Merge 5.4.101 into android12-5.4

Changes in 5.4.101
	bpf: Fix truncation handling for mod32 dst reg wrt zero
	HID: make arrays usage and value to be the same
	USB: quirks: sort quirk entries
	usb: quirks: add quirk to start video capture on ELMO L-12F document camera reliable
	ntfs: check for valid standard information attribute
	arm64: tegra: Add power-domain for Tegra210 HDA
	scripts: use pkg-config to locate libcrypto
	scripts: set proper OpenSSL include dir also for sign-file
	mm: unexport follow_pte_pmd
	mm: simplify follow_pte{,pmd}
	KVM: do not assume PTE is writable after follow_pfn
	mm: provide a saner PTE walking API for modules
	KVM: Use kvm_pfn_t for local PFN variable in hva_to_pfn_remapped()
	NET: usb: qmi_wwan: Adding support for Cinterion MV31
	cxgb4: Add new T6 PCI device id 0x6092
	cifs: Set CIFS_MOUNT_USE_PREFIX_PATH flag on setting cifs_sb->prepath.
	scripts/recordmcount.pl: support big endian for ARCH sh
	Linux 5.4.101

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I8cea70f3fe604cad1ef7f23b830c798eeb73f5b5
diff --git a/Documentation/ABI/testing/sysfs-class-devlink b/Documentation/ABI/testing/sysfs-class-devlink
new file mode 100644
index 0000000..64791b6
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-class-devlink
@@ -0,0 +1,126 @@
+What:		/sys/class/devlink/.../
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		Provide a place in sysfs for the device link objects in the
+		kernel at any given time.  The name of a device link directory,
+		denoted as ... above, is of the form <supplier>--<consumer>
+		where <supplier> is the supplier device name and <consumer> is
+		the consumer device name.
+
+What:		/sys/class/devlink/.../auto_remove_on
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		This file indicates if the device link will ever be
+		automatically removed by the driver core when the consumer and
+		supplier devices themselves are still present.
+
+		This will be one of the following strings:
+
+		'consumer unbind'
+		'supplier unbind'
+		'never'
+
+		'consumer unbind' means the device link will be removed when
+		the consumer's driver is unbound from the consumer device.
+
+		'supplier unbind' means the device link will be removed when
+		the supplier's driver is unbound from the supplier device.
+
+		'never' means the device link will not be automatically removed
+		when as long as the supplier and consumer devices themselves
+		are still present.
+
+What:		/sys/class/devlink/.../consumer
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		This file is a symlink to the consumer device's sysfs directory.
+
+What:		/sys/class/devlink/.../runtime_pm
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		This file indicates if the device link has any impact on the
+		runtime power management behavior of the consumer and supplier
+		devices. For example: Making sure the supplier doesn't enter
+		runtime suspend while the consumer is active.
+
+		This will be one of the following strings:
+
+		'0' - Does not affect runtime power management
+		'1' - Affects runtime power management
+
+What:		/sys/class/devlink/.../status
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		This file indicates the status of the device link. The status
+		of a device link is affected by whether the supplier and
+		consumer devices have been bound to their corresponding
+		drivers. The status of a device link also affects the binding
+		and unbinding of the supplier and consumer devices with their
+		drivers and also affects whether the software state of the
+		supplier device is synced with the hardware state of the
+		supplier device after boot up.
+		See also: sysfs-devices-state_synced.
+
+		This will be one of the following strings:
+
+		'not tracked'
+		'dormant'
+		'available'
+		'consumer probing'
+		'active'
+		'supplier unbinding'
+		'unknown'
+
+		'not tracked' means this device link does not track the status
+		and has no impact on the binding, unbinding and syncing the
+		hardware and software device state.
+
+		'dormant' means the supplier and the consumer devices have not
+		bound to their driver.
+
+		'available' means the supplier has bound to its driver and is
+		available to supply resources to the consumer device.
+
+		'consumer probing' means the consumer device is currently
+		trying to bind to its driver.
+
+		'active' means the supplier and consumer devices have both
+		bound successfully to their drivers.
+
+		'supplier unbinding' means the supplier devices is currently in
+		the process of unbinding from its driver.
+
+		'unknown' means the state of the device link is not any of the
+		above. If this is ever the value, there's a bug in the kernel.
+
+What:		/sys/class/devlink/.../supplier
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		This file is a symlink to the supplier device's sysfs directory.
+
+What:		/sys/class/devlink/.../sync_state_only
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		This file indicates if the device link is limited to only
+		affecting the syncing of the hardware and software state of the
+		supplier device.
+
+		This will be one of the following strings:
+
+		'0'
+		'1' - Affects runtime power management
+
+		'0' means the device link can affect other device behaviors
+		like binding/unbinding, suspend/resume, runtime power
+		management, etc.
+
+		'1' means the device link will only affect the syncing of
+		hardware and software state of the supplier device after boot
+		up and doesn't not affect other behaviors of the devices.
diff --git a/Documentation/ABI/testing/sysfs-class-power b/Documentation/ABI/testing/sysfs-class-power
index 27edc06..7d3aae6 100644
--- a/Documentation/ABI/testing/sysfs-class-power
+++ b/Documentation/ABI/testing/sysfs-class-power
@@ -74,6 +74,21 @@
 		Access: Read, Write
 		Valid values: 0 - 100 (percent)
 
+What:		/sys/class/power_supply/<supply_name>/capacity_error_margin
+Date:		April 2019
+Contact:	linux-pm@vger.kernel.org
+Description:
+		Battery capacity measurement becomes unreliable without
+		recalibration. This values provides the maximum error
+		margin expected to exist by the fuel gauge in percent.
+		Values close to 0% will be returned after (re-)calibration
+		has happened. Over time the error margin will increase.
+		100% means, that the capacity related values are basically
+		completely useless.
+
+		Access: Read
+		Valid values: 0 - 100 (percent)
+
 What:		/sys/class/power_supply/<supply_name>/capacity_level
 Date:		June 2009
 Contact:	linux-pm@vger.kernel.org
@@ -189,7 +204,9 @@
 		Access: Read
 		Valid values: "Unknown", "Good", "Overheat", "Dead",
 			      "Over voltage", "Unspecified failure", "Cold",
-			      "Watchdog timer expire", "Safety timer expire"
+			      "Watchdog timer expire", "Safety timer expire",
+			      "Over current", "Calibration required",
+			      "Warm", "Cool", "Hot"
 
 What:		/sys/class/power_supply/<supply_name>/precharge_current
 Date:		June 2017
@@ -664,3 +681,31 @@
 		Valid values:
 		- 1: enabled
 		- 0: disabled
+
+What:		/sys/class/power_supply/<supply_name>/manufacture_year
+Date:		January 2020
+Contact:	linux-pm@vger.kernel.org
+Description:
+		Reports the year (following Gregorian calendar) when the device has been
+		manufactured.
+
+		Access: Read
+		Valid values: Reported as integer
+
+What:		/sys/class/power_supply/<supply_name>/manufacture_month
+Date:		January 2020
+Contact:	linux-pm@vger.kernel.org
+Description:
+		Reports the month when the device has been manufactured.
+
+		Access: Read
+		Valid values: 1-12
+
+What:		/sys/class/power_supply/<supply_name>/manufacture_day
+Date:		January 2020
+Contact:	linux-pm@vger.kernel.org
+Description:
+		Reports the day of month when the device has been manufactured.
+
+		Access: Read
+		Valid values: 1-31
diff --git a/Documentation/ABI/testing/sysfs-devices-consumer b/Documentation/ABI/testing/sysfs-devices-consumer
new file mode 100644
index 0000000..1f06d74
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-devices-consumer
@@ -0,0 +1,8 @@
+What:		/sys/devices/.../consumer:<consumer>
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		The /sys/devices/.../consumer:<consumer> are symlinks to device
+		links where this device is the supplier. <consumer> denotes the
+		name of the consumer in that device link. There can be zero or
+		more of these symlinks for a given device.
diff --git a/Documentation/ABI/testing/sysfs-devices-state_synced b/Documentation/ABI/testing/sysfs-devices-state_synced
new file mode 100644
index 0000000..0c922d7
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-devices-state_synced
@@ -0,0 +1,24 @@
+What:		/sys/devices/.../state_synced
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		The /sys/devices/.../state_synced attribute is only present for
+		devices whose bus types or driver provides the .sync_state()
+		callback. The number read from it (0 or 1) reflects the value
+		of the device's 'state_synced' field. A value of 0 means the
+		.sync_state() callback hasn't been called yet. A value of 1
+		means the .sync_state() callback has been called.
+
+		Generally, if a device has sync_state() support and has some of
+		the resources it provides enabled at the time the kernel starts
+		(Eg: enabled by hardware reset or bootloader or anything that
+		run before the kernel starts), then it'll keep those resources
+		enabled and in a state that's compatible with the state they
+		were in at the start of the kernel. The device will stop doing
+		this only when the sync_state() callback has been called --
+		which happens only when all its consumer devices are registered
+		and have probed successfully. Resources that were left disabled
+		at the time the kernel starts are not affected or limited in
+		any way by sync_state() callbacks.
+
+
diff --git a/Documentation/ABI/testing/sysfs-devices-supplier b/Documentation/ABI/testing/sysfs-devices-supplier
new file mode 100644
index 0000000..a919e0d
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-devices-supplier
@@ -0,0 +1,8 @@
+What:		/sys/devices/.../supplier:<supplier>
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		The /sys/devices/.../supplier:<supplier> are symlinks to device
+		links where this device is the consumer. <supplier> denotes the
+		name of the supplier in that device link. There can be zero or
+		more of these symlinks for a given device.
diff --git a/Documentation/ABI/testing/sysfs-devices-waiting_for_supplier b/Documentation/ABI/testing/sysfs-devices-waiting_for_supplier
new file mode 100644
index 0000000..59d073d
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-devices-waiting_for_supplier
@@ -0,0 +1,17 @@
+What:		/sys/devices/.../waiting_for_supplier
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		The /sys/devices/.../waiting_for_supplier attribute is only
+		present when fw_devlink kernel command line option is enabled
+		and is set to something stricter than "permissive".  It is
+		removed once a device probes successfully (because the
+		information is no longer relevant). The number read from it (0
+		or 1) reflects whether the device is waiting for one or more
+		suppliers to be added and then linked to using device links
+		before the device can probe.
+
+		A value of 0 means the device is not waiting for any suppliers
+		to be added before it can probe.  A value of 1 means the device
+		is waiting for one or more suppliers to be added before it can
+		probe.
diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs
index 7ab2b1b..2618587 100644
--- a/Documentation/ABI/testing/sysfs-fs-f2fs
+++ b/Documentation/ABI/testing/sysfs-fs-f2fs
@@ -1,260 +1,359 @@
 What:		/sys/fs/f2fs/<disk>/gc_max_sleep_time
 Date:		July 2013
 Contact:	"Namjae Jeon" <namjae.jeon@samsung.com>
-Description:
-		 Controls the maximun sleep time for gc_thread. Time
-		 is in milliseconds.
+Description:	Controls the maximum sleep time for gc_thread. Time
+		is in milliseconds.
 
 What:		/sys/fs/f2fs/<disk>/gc_min_sleep_time
 Date:		July 2013
 Contact:	"Namjae Jeon" <namjae.jeon@samsung.com>
-Description:
-		 Controls the minimum sleep time for gc_thread. Time
-		 is in milliseconds.
+Description:	Controls the minimum sleep time for gc_thread. Time
+		is in milliseconds.
 
 What:		/sys/fs/f2fs/<disk>/gc_no_gc_sleep_time
 Date:		July 2013
 Contact:	"Namjae Jeon" <namjae.jeon@samsung.com>
-Description:
-		 Controls the default sleep time for gc_thread. Time
-		 is in milliseconds.
+Description:	Controls the default sleep time for gc_thread. Time
+		is in milliseconds.
 
 What:		/sys/fs/f2fs/<disk>/gc_idle
 Date:		July 2013
 Contact:	"Namjae Jeon" <namjae.jeon@samsung.com>
-Description:
-		 Controls the victim selection policy for garbage collection.
+Description:	Controls the victim selection policy for garbage collection.
+		Setting gc_idle = 0(default) will disable this option. Setting
+		gc_idle = 1 will select the Cost Benefit approach & setting
+		gc_idle = 2 will select the greedy approach & setting
+		gc_idle = 3 will select the age-threshold based approach.
 
 What:		/sys/fs/f2fs/<disk>/reclaim_segments
 Date:		October 2013
 Contact:	"Jaegeuk Kim" <jaegeuk.kim@samsung.com>
+Description:	This parameter controls the number of prefree segments to be
+		reclaimed. If the number of prefree segments is larger than
+		the number of segments in the proportion to the percentage
+		over total volume size, f2fs tries to conduct checkpoint to
+		reclaim the prefree segments to free segments.
+		By default, 5% over total # of segments.
+
+What:		/sys/fs/f2fs/<disk>/main_blkaddr
+Date:		November 2019
+Contact:	"Ramon Pantin" <pantin@google.com>
 Description:
-		 Controls the issue rate of segment discard commands.
+		 Shows first block address of MAIN area.
 
 What:		/sys/fs/f2fs/<disk>/ipu_policy
 Date:		November 2013
 Contact:	"Jaegeuk Kim" <jaegeuk.kim@samsung.com>
-Description:
-		 Controls the in-place-update policy.
+Description:	Controls the in-place-update policy.
+		updates in f2fs. User can set:
+		0x01: F2FS_IPU_FORCE, 0x02: F2FS_IPU_SSR,
+		0x04: F2FS_IPU_UTIL,  0x08: F2FS_IPU_SSR_UTIL,
+		0x10: F2FS_IPU_FSYNC, 0x20: F2FS_IPU_ASYNC,
+		0x40: F2FS_IPU_NOCACHE.
+		Refer segment.h for details.
 
 What:		/sys/fs/f2fs/<disk>/min_ipu_util
 Date:		November 2013
 Contact:	"Jaegeuk Kim" <jaegeuk.kim@samsung.com>
-Description:
-		 Controls the FS utilization condition for the in-place-update
-		 policies.
+Description:	Controls the FS utilization condition for the in-place-update
+		policies. It is used by F2FS_IPU_UTIL and F2FS_IPU_SSR_UTIL policies.
 
 What:		/sys/fs/f2fs/<disk>/min_fsync_blocks
 Date:		September 2014
 Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		 Controls the dirty page count condition for the in-place-update
-		 policies.
+Description:	Controls the dirty page count condition for the in-place-update
+		policies.
 
 What:		/sys/fs/f2fs/<disk>/min_seq_blocks
 Date:		August 2018
 Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		 Controls the dirty page count condition for batched sequential
-		 writes in ->writepages.
-
+Description:	Controls the dirty page count condition for batched sequential
+		writes in writepages.
 
 What:		/sys/fs/f2fs/<disk>/min_hot_blocks
 Date:		March 2017
 Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		 Controls the dirty page count condition for redefining hot data.
+Description:	Controls the dirty page count condition for redefining hot data.
 
 What:		/sys/fs/f2fs/<disk>/min_ssr_sections
 Date:		October 2017
 Contact:	"Chao Yu" <yuchao0@huawei.com>
-Description:
-		 Controls the fee section threshold to trigger SSR allocation.
+Description:	Controls the free section threshold to trigger SSR allocation.
+		If this is large, SSR mode will be enabled early.
 
 What:		/sys/fs/f2fs/<disk>/max_small_discards
 Date:		November 2013
 Contact:	"Jaegeuk Kim" <jaegeuk.kim@samsung.com>
-Description:
-		 Controls the issue rate of small discard commands.
+Description:	Controls the issue rate of discard commands that consist of small
+		blocks less than 2MB. The candidates to be discarded are cached until
+		checkpoint is triggered, and issued during the checkpoint.
+		By default, it is disabled with 0.
 
-What:          /sys/fs/f2fs/<disk>/discard_granularity
-Date:          July 2017
-Contact:       "Chao Yu" <yuchao0@huawei.com>
-Description:
-		Controls discard granularity of inner discard thread, inner thread
+What:		/sys/fs/f2fs/<disk>/discard_granularity
+Date:		July 2017
+Contact:	"Chao Yu" <yuchao0@huawei.com>
+Description:	Controls discard granularity of inner discard thread. Inner thread
 		will not issue discards with size that is smaller than granularity.
-		The unit size is one block, now only support configuring in range
-		of [1, 512].
+		The unit size is one block(4KB), now only support configuring
+		in range of [1, 512]. Default value is 4(=16KB).
 
-What:          /sys/fs/f2fs/<disk>/umount_discard_timeout
-Date:          January 2019
-Contact:       "Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		Set timeout to issue discard commands during umount.
-		Default: 5 secs
+What:		/sys/fs/f2fs/<disk>/umount_discard_timeout
+Date:		January 2019
+Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
+Description:	Set timeout to issue discard commands during umount.
+	        Default: 5 secs
 
 What:		/sys/fs/f2fs/<disk>/max_victim_search
 Date:		January 2014
 Contact:	"Jaegeuk Kim" <jaegeuk.kim@samsung.com>
-Description:
-		 Controls the number of trials to find a victim segment.
+Description:	Controls the number of trials to find a victim segment
+		when conducting SSR and cleaning operations. The default value
+		is 4096 which covers 8GB block address range.
 
 What:		/sys/fs/f2fs/<disk>/migration_granularity
 Date:		October 2018
 Contact:	"Chao Yu" <yuchao0@huawei.com>
-Description:
-		 Controls migration granularity of garbage collection on large
-		 section, it can let GC move partial segment{s} of one section
-		 in one GC cycle, so that dispersing heavy overhead GC to
-		 multiple lightweight one.
+Description:	Controls migration granularity of garbage collection on large
+		section, it can let GC move partial segment{s} of one section
+		in one GC cycle, so that dispersing heavy overhead GC to
+		multiple lightweight one.
 
 What:		/sys/fs/f2fs/<disk>/dir_level
 Date:		March 2014
 Contact:	"Jaegeuk Kim" <jaegeuk.kim@samsung.com>
-Description:
-		 Controls the directory level for large directory.
+Description:	Controls the directory level for large directory. If a
+		directory has a number of files, it can reduce the file lookup
+		latency by increasing this dir_level value. Otherwise, it
+		needs to decrease this value to reduce the space overhead.
+		The default value is 0.
 
 What:		/sys/fs/f2fs/<disk>/ram_thresh
 Date:		March 2014
 Contact:	"Jaegeuk Kim" <jaegeuk.kim@samsung.com>
-Description:
-		 Controls the memory footprint used by f2fs.
+Description:	Controls the memory footprint used by free nids and cached
+		nat entries. By default, 1 is set, which indicates
+		10 MB / 1 GB RAM.
 
 What:		/sys/fs/f2fs/<disk>/batched_trim_sections
 Date:		February 2015
 Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		 Controls the trimming rate in batch mode.
-		 <deprecated>
+Description:	Controls the trimming rate in batch mode.
+		<deprecated>
 
 What:		/sys/fs/f2fs/<disk>/cp_interval
 Date:		October 2015
 Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		 Controls the checkpoint timing.
+Description:	Controls the checkpoint timing, set to 60 seconds by default.
 
 What:		/sys/fs/f2fs/<disk>/idle_interval
 Date:		January 2016
 Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		 Controls the idle timing for all paths other than
-		 discard and gc path.
+Description:	Controls the idle timing of system, if there is no FS operation
+		during given interval.
+		Set to 5 seconds by default.
 
 What:		/sys/fs/f2fs/<disk>/discard_idle_interval
 Date:		September 2018
 Contact:	"Chao Yu" <yuchao0@huawei.com>
 Contact:	"Sahitya Tummala" <stummala@codeaurora.org>
-Description:
-		 Controls the idle timing for discard path.
+Description:	Controls the idle timing of discard thread given
+		this time interval.
+		Default is 5 secs.
 
 What:		/sys/fs/f2fs/<disk>/gc_idle_interval
 Date:		September 2018
 Contact:	"Chao Yu" <yuchao0@huawei.com>
 Contact:	"Sahitya Tummala" <stummala@codeaurora.org>
-Description:
-		 Controls the idle timing for gc path.
+Description:    Controls the idle timing for gc path. Set to 5 seconds by default.
 
 What:		/sys/fs/f2fs/<disk>/iostat_enable
 Date:		August 2017
 Contact:	"Chao Yu" <yuchao0@huawei.com>
-Description:
-		 Controls to enable/disable IO stat.
+Description:	Controls to enable/disable IO stat.
 
 What:		/sys/fs/f2fs/<disk>/ra_nid_pages
 Date:		October 2015
 Contact:	"Chao Yu" <chao2.yu@samsung.com>
-Description:
-		 Controls the count of nid pages to be readaheaded.
+Description:	Controls the count of nid pages to be readaheaded.
+		When building free nids, F2FS reads NAT blocks ahead for
+		speed up. Default is 0.
 
 What:		/sys/fs/f2fs/<disk>/dirty_nats_ratio
 Date:		January 2016
 Contact:	"Chao Yu" <chao2.yu@samsung.com>
-Description:
-		 Controls dirty nat entries ratio threshold, if current
-		 ratio exceeds configured threshold, checkpoint will
-		 be triggered for flushing dirty nat entries.
+Description:	Controls dirty nat entries ratio threshold, if current
+		ratio exceeds configured threshold, checkpoint will
+		be triggered for flushing dirty nat entries.
 
 What:		/sys/fs/f2fs/<disk>/lifetime_write_kbytes
 Date:		January 2016
 Contact:	"Shuoran Liu" <liushuoran@huawei.com>
-Description:
-		 Shows total written kbytes issued to disk.
+Description:	Shows total written kbytes issued to disk.
 
 What:		/sys/fs/f2fs/<disk>/features
 Date:		July 2017
 Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		 Shows all enabled features in current device.
+Description:	Shows all enabled features in current device.
 
 What:		/sys/fs/f2fs/<disk>/inject_rate
 Date:		May 2016
 Contact:	"Sheng Yong" <shengyong1@huawei.com>
-Description:
-		 Controls the injection rate.
+Description:	Controls the injection rate of arbitrary faults.
 
 What:		/sys/fs/f2fs/<disk>/inject_type
 Date:		May 2016
 Contact:	"Sheng Yong" <shengyong1@huawei.com>
-Description:
-		 Controls the injection type.
+Description:	Controls the injection type of arbitrary faults.
+
+What:		/sys/fs/f2fs/<disk>/dirty_segments
+Date:		October 2017
+Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
+Description:	Shows the number of dirty segments.
 
 What:		/sys/fs/f2fs/<disk>/reserved_blocks
 Date:		June 2017
 Contact:	"Chao Yu" <yuchao0@huawei.com>
-Description:
-		 Controls target reserved blocks in system, the threshold
-		 is soft, it could exceed current available user space.
+Description:	Controls target reserved blocks in system, the threshold
+		is soft, it could exceed current available user space.
 
 What:		/sys/fs/f2fs/<disk>/current_reserved_blocks
 Date:		October 2017
 Contact:	"Yunlong Song" <yunlong.song@huawei.com>
 Contact:	"Chao Yu" <yuchao0@huawei.com>
-Description:
-		 Shows current reserved blocks in system, it may be temporarily
-		 smaller than target_reserved_blocks, but will gradually
-		 increase to target_reserved_blocks when more free blocks are
-		 freed by user later.
+Description:	Shows current reserved blocks in system, it may be temporarily
+		smaller than target_reserved_blocks, but will gradually
+		increase to target_reserved_blocks when more free blocks are
+		freed by user later.
 
 What:		/sys/fs/f2fs/<disk>/gc_urgent
 Date:		August 2017
 Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		 Do background GC agressively
+Description:	Do background GC agressively when set. When gc_urgent = 1,
+		background thread starts to do GC by given gc_urgent_sleep_time
+		interval. When gc_urgent = 2, F2FS will lower the bar of
+		checking idle in order to process outstanding discard commands
+		and GC a little bit aggressively. It is set to 0 by default.
 
 What:		/sys/fs/f2fs/<disk>/gc_urgent_sleep_time
 Date:		August 2017
 Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		 Controls sleep time of GC urgent mode
+Description:	Controls sleep time of GC urgent mode. Set to 500ms by default.
 
 What:		/sys/fs/f2fs/<disk>/readdir_ra
 Date:		November 2017
 Contact:	"Sheng Yong" <shengyong1@huawei.com>
-Description:
-		 Controls readahead inode block in readdir.
+Description:	Controls readahead inode block in readdir. Enabled by default.
+
+What:		/sys/fs/f2fs/<disk>/gc_pin_file_thresh
+Date:		January 2018
+Contact:	Jaegeuk Kim <jaegeuk@kernel.org>
+Description:	This indicates how many GC can be failed for the pinned
+		file. If it exceeds this, F2FS doesn't guarantee its pinning
+		state. 2048 trials is set by default.
 
 What:		/sys/fs/f2fs/<disk>/extension_list
 Date:		Feburary 2018
 Contact:	"Chao Yu" <yuchao0@huawei.com>
-Description:
-		 Used to control configure extension list:
-		 - Query: cat /sys/fs/f2fs/<disk>/extension_list
-		 - Add: echo '[h/c]extension' > /sys/fs/f2fs/<disk>/extension_list
-		 - Del: echo '[h/c]!extension' > /sys/fs/f2fs/<disk>/extension_list
-		 - [h] means add/del hot file extension
-		 - [c] means add/del cold file extension
+Description:	Used to control configure extension list:
+		- Query: cat /sys/fs/f2fs/<disk>/extension_list
+		- Add: echo '[h/c]extension' > /sys/fs/f2fs/<disk>/extension_list
+		- Del: echo '[h/c]!extension' > /sys/fs/f2fs/<disk>/extension_list
+		- [h] means add/del hot file extension
+		- [c] means add/del cold file extension
 
 What:		/sys/fs/f2fs/<disk>/unusable
 Date		April 2019
 Contact:	"Daniel Rosenberg" <drosen@google.com>
-Description:
-		If checkpoint=disable, it displays the number of blocks that are unusable.
-                If checkpoint=enable it displays the enumber of blocks that would be unusable
-                if checkpoint=disable were to be set.
+Description:	If checkpoint=disable, it displays the number of blocks that
+		are unusable.
+		If checkpoint=enable it displays the enumber of blocks that
+		would be unusable if checkpoint=disable were to be set.
 
 What:		/sys/fs/f2fs/<disk>/encoding
 Date		July 2019
 Contact:	"Daniel Rosenberg" <drosen@google.com>
-Description:
-		Displays name and version of the encoding set for the filesystem.
-                If no encoding is set, displays (none)
+Description:	Displays name and version of the encoding set for the filesystem.
+		If no encoding is set, displays (none)
+
+What:		/sys/fs/f2fs/<disk>/free_segments
+Date:		September 2019
+Contact:	"Hridya Valsaraju" <hridya@google.com>
+Description:	Number of free segments in disk.
+
+What:		/sys/fs/f2fs/<disk>/cp_foreground_calls
+Date:		September 2019
+Contact:	"Hridya Valsaraju" <hridya@google.com>
+Description:	Number of checkpoint operations performed on demand. Available when
+		CONFIG_F2FS_STAT_FS=y.
+
+What:		/sys/fs/f2fs/<disk>/cp_background_calls
+Date:		September 2019
+Contact:	"Hridya Valsaraju" <hridya@google.com>
+Description:	Number of checkpoint operations performed in the background to
+		free segments. Available when CONFIG_F2FS_STAT_FS=y.
+
+What:		/sys/fs/f2fs/<disk>/gc_foreground_calls
+Date:		September 2019
+Contact:	"Hridya Valsaraju" <hridya@google.com>
+Description:	Number of garbage collection operations performed on demand.
+		Available when CONFIG_F2FS_STAT_FS=y.
+
+What:		/sys/fs/f2fs/<disk>/gc_background_calls
+Date:		September 2019
+Contact:	"Hridya Valsaraju" <hridya@google.com>
+Description:	Number of garbage collection operations triggered in background.
+		Available when CONFIG_F2FS_STAT_FS=y.
+
+What:		/sys/fs/f2fs/<disk>/moved_blocks_foreground
+Date:		September 2019
+Contact:	"Hridya Valsaraju" <hridya@google.com>
+Description:	Number of blocks moved by garbage collection in foreground.
+		Available when CONFIG_F2FS_STAT_FS=y.
+
+What:		/sys/fs/f2fs/<disk>/moved_blocks_background
+Date:		September 2019
+Contact:	"Hridya Valsaraju" <hridya@google.com>
+Description:	Number of blocks moved by garbage collection in background.
+		Available when CONFIG_F2FS_STAT_FS=y.
+
+What:		/sys/fs/f2fs/<disk>/avg_vblocks
+Date:		September 2019
+Contact:	"Hridya Valsaraju" <hridya@google.com>
+Description:	Average number of valid blocks.
+		Available when CONFIG_F2FS_STAT_FS=y.
+
+What:		/sys/fs/f2fs/<disk>/mounted_time_sec
+Date:		February 2020
+Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
+Description:	Show the mounted time in secs of this partition.
+
+What:		/sys/fs/f2fs/<disk>/data_io_flag
+Date:		April 2020
+Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
+Description:	Give a way to attach REQ_META|FUA to data writes
+		given temperature-based bits. Now the bits indicate:
+		*      REQ_META     |      REQ_FUA      |
+		*    5 |    4 |   3 |    2 |    1 |   0 |
+		* Cold | Warm | Hot | Cold | Warm | Hot |
+
+What:		/sys/fs/f2fs/<disk>/node_io_flag
+Date:		June 2020
+Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
+Description:	Give a way to attach REQ_META|FUA to node writes
+		given temperature-based bits. Now the bits indicate:
+		*      REQ_META     |      REQ_FUA      |
+		*    5 |    4 |   3 |    2 |    1 |   0 |
+		* Cold | Warm | Hot | Cold | Warm | Hot |
+
+What:		/sys/fs/f2fs/<disk>/iostat_period_ms
+Date:		April 2020
+Contact:	"Daeho Jeong" <daehojeong@google.com>
+Description:	Give a way to change iostat_period time. 3secs by default.
+		The new iostat trace gives stats gap given the period.
+What:		/sys/fs/f2fs/<disk>/max_io_bytes
+Date:		December 2020
+Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
+Description:	This gives a control to limit the bio size in f2fs.
+		Default is zero, which will follow underlying block layer limit,
+		whereas, if it has a certain bytes value, f2fs won't submit a
+		bio larger than that size.
diff --git a/Documentation/ABI/testing/sysfs-kernel-dmabuf-buffers b/Documentation/ABI/testing/sysfs-kernel-dmabuf-buffers
new file mode 100644
index 0000000..721d486
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-kernel-dmabuf-buffers
@@ -0,0 +1,59 @@
+What:		/sys/kernel/dmabuf/buffers
+Date:		January 2021
+KernelVersion:	v5.12
+Contact:	Hridya Valsaraju <hridya@google.com>
+Description:	The /sys/kernel/dmabuf/buffers directory contains a
+		snapshot of the internal state of every DMA-BUF.
+		/sys/kernel/dmabuf/buffers/<inode_number> will contain the
+		statistics for the DMA-BUF with the unique inode number
+		<inode_number>
+Users:		kernel memory tuning/debugging tools
+
+What:		/sys/kernel/dmabuf/buffers/<inode_number>/exporter_name
+Date:		January 2021
+KernelVersion:	v5.12
+Contact:	Hridya Valsaraju <hridya@google.com>
+Description:	This file is read-only and contains the name of the exporter of
+		the DMA-BUF.
+
+What:		/sys/kernel/dmabuf/buffers/<inode_number>/size
+Date:		January 2021
+KernelVersion:	v5.12
+Contact:	Hridya Valsaraju <hridya@google.com>
+Description:	This file is read-only and specifies the size of the DMA-BUF in
+		bytes.
+
+What:		/sys/kernel/dmabuf/buffers/<inode_number>/attachments
+Date:		January 2021
+KernelVersion:	v5.12
+Contact:	Hridya Valsaraju <hridya@google.com>
+Description:	This directory will contain subdirectories representing every
+		attachment of the DMA-BUF.
+
+What:		/sys/kernel/dmabuf/buffers/<inode_number>/attachments/<attachment_uid>
+Date:		January 2021
+KernelVersion:	v5.12
+Contact:	Hridya Valsaraju <hridya@google.com>
+Description:	This directory will contain information on the attaching device
+		and the number of current distinct device mappings.
+
+What:		/sys/kernel/dmabuf/buffers/<inode_number>/attachments/<attachment_uid>/device
+Date:		January 2021
+KernelVersion:	v5.12
+Contact:	Hridya Valsaraju <hridya@google.com>
+Description:	This file is read-only and is a symlink to the attaching devices's
+		sysfs entry.
+
+What:		/sys/kernel/dmabuf/buffers/<inode_number>/attachments/<attachment_uid>/map_counter
+Date:		January 2021
+KernelVersion:	v5.12
+Contact:	Hridya Valsaraju <hridya@google.com>
+Description:	This file is read-only and contains a map_counter indicating the
+		number of distinct device mappings of the attachment.
+
+What:		/sys/kernel/dmabuf/buffers/<inode_number>/mmap_count
+Date:		January 2021
+KernelVersion:	v5.10
+Contact:	Kalesh Singh <kaleshsingh@google.com>
+Description:	This file is read-only and contains a counter indicating the
+		number of times the buffer has been mmap().
diff --git a/Documentation/ABI/testing/sysfs-kernel-ion b/Documentation/ABI/testing/sysfs-kernel-ion
new file mode 100644
index 0000000..f57f970
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-kernel-ion
@@ -0,0 +1,27 @@
+What:		/sys/kernel/ion
+Date:		Dec 2019
+KernelVersion:	4.14.158
+Contact:	Suren Baghdasaryan <surenb@google.com>,
+		Sandeep Patil <sspatil@google.com>
+Description:
+		The /sys/kernel/ion directory contains a snapshot of the
+		internal state of ION memory heaps and pools.
+Users:		kernel memory tuning tools
+
+What:		/sys/kernel/ion/total_heaps_kb
+Date:		Dec 2019
+KernelVersion:	4.14.158
+Contact:	Suren Baghdasaryan <surenb@google.com>,
+		Sandeep Patil <sspatil@google.com>
+Description:
+		The total_heaps_kb file is read-only and specifies how much
+		memory in Kb is allocated to ION heaps.
+
+What:		/sys/kernel/ion/total_pools_kb
+Date:		Dec 2019
+KernelVersion:	4.14.158
+Contact:	Suren Baghdasaryan <surenb@google.com>,
+		Sandeep Patil <sspatil@google.com>
+Description:
+		The total_pools_kb file is read-only and specifies how much
+		memory in Kb is allocated to ION pools.
diff --git a/Documentation/ABI/testing/sysfs-kernel-wakeup_reasons b/Documentation/ABI/testing/sysfs-kernel-wakeup_reasons
new file mode 100644
index 0000000..acb19b9
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-kernel-wakeup_reasons
@@ -0,0 +1,16 @@
+What:		/sys/kernel/wakeup_reasons/last_resume_reason
+Date:		February 2014
+Contact:	Ruchi Kandoi <kandoiruchi@google.com>
+Description:
+		The /sys/kernel/wakeup_reasons/last_resume_reason is
+		used to report wakeup reasons after system exited suspend.
+
+What:		/sys/kernel/wakeup_reasons/last_suspend_time
+Date:		March 2015
+Contact:	jinqian <jinqian@google.com>
+Description:
+		The /sys/kernel/wakeup_reasons/last_suspend_time is
+		used to report time spent in last suspend cycle. It contains
+		two numbers (in seconds) separated by space. First number is
+		the time spent in suspend and resume processes. Second number
+		is the time spent in sleep state.
\ No newline at end of file
diff --git a/Documentation/admin-guide/blockdev/zram.rst b/Documentation/admin-guide/blockdev/zram.rst
index 6eccf13..caa17c4 100644
--- a/Documentation/admin-guide/blockdev/zram.rst
+++ b/Documentation/admin-guide/blockdev/zram.rst
@@ -335,6 +335,11 @@
 
 With the command, zram writeback idle pages from memory to the storage.
 
+If admin want to write a specific page in zram device to backing device,
+they could write a page index into the interface.
+
+	echo "page_index=1251" > /sys/block/zramX/writeback
+
 If there are lots of write IO with flash device, potentially, it has
 flash wearout problem so that admin needs to design write limitation
 to guarantee storage health for entire product life.
diff --git a/Documentation/admin-guide/bootconfig.rst b/Documentation/admin-guide/bootconfig.rst
new file mode 100644
index 0000000..cc22d8a
--- /dev/null
+++ b/Documentation/admin-guide/bootconfig.rst
@@ -0,0 +1,216 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+==================
+Boot Configuration
+==================
+
+:Author: Masami Hiramatsu <mhiramat@kernel.org>
+
+Overview
+========
+
+The boot configuration expands the current kernel command line to support
+additional key-value data when booting the kernel in an efficient way.
+This allows administrators to pass a structured-Key config file.
+
+Config File Syntax
+==================
+
+The boot config syntax is a simple structured key-value. Each key consists
+of dot-connected-words, and key and value are connected by ``=``. The value
+has to be terminated by semi-colon (``;``) or newline (``\n``).
+For array value, array entries are separated by comma (``,``). ::
+
+  KEY[.WORD[...]] = VALUE[, VALUE2[...]][;]
+
+Unlike the kernel command line syntax, spaces are OK around the comma and ``=``.
+
+Each key word must contain only alphabets, numbers, dash (``-``) or underscore
+(``_``). And each value only contains printable characters or spaces except
+for delimiters such as semi-colon (``;``), new-line (``\n``), comma (``,``),
+hash (``#``) and closing brace (``}``).
+
+If you want to use those delimiters in a value, you can use either double-
+quotes (``"VALUE"``) or single-quotes (``'VALUE'``) to quote it. Note that
+you can not escape these quotes.
+
+There can be a key which doesn't have value or has an empty value. Those keys
+are used for checking if the key exists or not (like a boolean).
+
+Key-Value Syntax
+----------------
+
+The boot config file syntax allows user to merge partially same word keys
+by brace. For example::
+
+ foo.bar.baz = value1
+ foo.bar.qux.quux = value2
+
+These can be written also in::
+
+ foo.bar {
+    baz = value1
+    qux.quux = value2
+ }
+
+Or more shorter, written as following::
+
+ foo.bar { baz = value1; qux.quux = value2 }
+
+In both styles, same key words are automatically merged when parsing it
+at boot time. So you can append similar trees or key-values.
+
+Same-key Values
+---------------
+
+It is prohibited that two or more values or arrays share a same-key.
+For example,::
+
+ foo = bar, baz
+ foo = qux  # !ERROR! we can not re-define same key
+
+If you want to append the value to existing key as an array member,
+you can use ``+=`` operator. For example::
+
+ foo = bar, baz
+ foo += qux
+
+In this case, the key ``foo`` has ``bar``, ``baz`` and ``qux``.
+
+However, a sub-key and a value can not co-exist under a parent key.
+For example, following config is NOT allowed.::
+
+ foo = value1
+ foo.bar = value2 # !ERROR! subkey "bar" and value "value1" can NOT co-exist
+
+
+Comments
+--------
+
+The config syntax accepts shell-script style comments. The comments starting
+with hash ("#") until newline ("\n") will be ignored.
+
+::
+
+ # comment line
+ foo = value # value is set to foo.
+ bar = 1, # 1st element
+       2, # 2nd element
+       3  # 3rd element
+
+This is parsed as below::
+
+ foo = value
+ bar = 1, 2, 3
+
+Note that you can not put a comment between value and delimiter(``,`` or
+``;``). This means following config has a syntax error ::
+
+ key = 1 # comment
+       ,2
+
+
+/proc/bootconfig
+================
+
+/proc/bootconfig is a user-space interface of the boot config.
+Unlike /proc/cmdline, this file shows the key-value style list.
+Each key-value pair is shown in each line with following style::
+
+ KEY[.WORDS...] = "[VALUE]"[,"VALUE2"...]
+
+
+Boot Kernel With a Boot Config
+==============================
+
+Since the boot configuration file is loaded with initrd, it will be added
+to the end of the initrd (initramfs) image file with size, checksum and
+12-byte magic word as below.
+
+[initrd][bootconfig][size(u32)][checksum(u32)][#BOOTCONFIG\n]
+
+The Linux kernel decodes the last part of the initrd image in memory to
+get the boot configuration data.
+Because of this "piggyback" method, there is no need to change or
+update the boot loader and the kernel image itself.
+
+To do this operation, Linux kernel provides "bootconfig" command under
+tools/bootconfig, which allows admin to apply or delete the config file
+to/from initrd image. You can build it by the following command::
+
+ # make -C tools/bootconfig
+
+To add your boot config file to initrd image, run bootconfig as below
+(Old data is removed automatically if exists)::
+
+ # tools/bootconfig/bootconfig -a your-config /boot/initrd.img-X.Y.Z
+
+To remove the config from the image, you can use -d option as below::
+
+ # tools/bootconfig/bootconfig -d /boot/initrd.img-X.Y.Z
+
+Then add "bootconfig" on the normal kernel command line to tell the
+kernel to look for the bootconfig at the end of the initrd file.
+
+Config File Limitation
+======================
+
+Currently the maximum config size size is 32KB and the total key-words (not
+key-value entries) must be under 1024 nodes.
+Note: this is not the number of entries but nodes, an entry must consume
+more than 2 nodes (a key-word and a value). So theoretically, it will be
+up to 512 key-value pairs. If keys contains 3 words in average, it can
+contain 256 key-value pairs. In most cases, the number of config items
+will be under 100 entries and smaller than 8KB, so it would be enough.
+If the node number exceeds 1024, parser returns an error even if the file
+size is smaller than 32KB.
+Anyway, since bootconfig command verifies it when appending a boot config
+to initrd image, user can notice it before boot.
+
+
+Bootconfig APIs
+===============
+
+User can query or loop on key-value pairs, also it is possible to find
+a root (prefix) key node and find key-values under that node.
+
+If you have a key string, you can query the value directly with the key
+using xbc_find_value(). If you want to know what keys exist in the boot
+config, you can use xbc_for_each_key_value() to iterate key-value pairs.
+Note that you need to use xbc_array_for_each_value() for accessing
+each array's value, e.g.::
+
+ vnode = NULL;
+ xbc_find_value("key.word", &vnode);
+ if (vnode && xbc_node_is_array(vnode))
+    xbc_array_for_each_value(vnode, value) {
+      printk("%s ", value);
+    }
+
+If you want to focus on keys which have a prefix string, you can use
+xbc_find_node() to find a node by the prefix string, and iterate
+keys under the prefix node with xbc_node_for_each_key_value().
+
+But the most typical usage is to get the named value under prefix
+or get the named array under prefix as below::
+
+ root = xbc_find_node("key.prefix");
+ value = xbc_node_find_value(root, "option", &vnode);
+ ...
+ xbc_node_for_each_array_value(root, "array-option", value, anode) {
+    ...
+ }
+
+This accesses a value of "key.prefix.option" and an array of
+"key.prefix.array-option".
+
+Locking is not needed, since after initialization, the config becomes
+read-only. All data and keys must be copied if you need to modify it.
+
+
+Functions and structures
+========================
+
+.. kernel-doc:: include/linux/bootconfig.h
+.. kernel-doc:: lib/bootconfig.c
+
diff --git a/Documentation/admin-guide/dynamic-debug-howto.rst b/Documentation/admin-guide/dynamic-debug-howto.rst
index 252e5ef..1012bd9 100644
--- a/Documentation/admin-guide/dynamic-debug-howto.rst
+++ b/Documentation/admin-guide/dynamic-debug-howto.rst
@@ -13,6 +13,11 @@
 ``print_hex_dump_debug()``/``print_hex_dump_bytes()`` calls can be dynamically
 enabled per-callsite.
 
+If you do not want to enable dynamic debug globally (i.e. in some embedded
+system), you may set ``CONFIG_DYNAMIC_DEBUG_CORE`` as basic support of dynamic
+debug and add ``ccflags := -DDYNAMIC_DEBUG_MODULE`` into the Makefile of any
+modules which you'd like to dynamically debug later.
+
 If ``CONFIG_DYNAMIC_DEBUG`` is not set, ``print_hex_dump_debug()`` is just
 shortcut for ``print_hex_dump(KERN_DEBUG)``.
 
@@ -54,6 +59,9 @@
 				<debugfs>/dynamic_debug/control
   -bash: echo: write error: Invalid argument
 
+Note, for systems without 'debugfs' enabled, the control file can be
+found in ``/proc/dynamic_debug/control``.
+
 Viewing Dynamic Debug Behaviour
 ===============================
 
diff --git a/Documentation/admin-guide/ext4.rst b/Documentation/admin-guide/ext4.rst
index 059ddcb..87b0a3e 100644
--- a/Documentation/admin-guide/ext4.rst
+++ b/Documentation/admin-guide/ext4.rst
@@ -390,6 +390,13 @@
         Documentation/filesystems/dax.txt.  Note that this option is
         incompatible with data=journal.
 
+  inlinecrypt
+        When possible, encrypt/decrypt the contents of encrypted files using the
+        blk-crypto framework rather than filesystem-layer encryption. This
+        allows the use of inline encryption hardware. The on-disk format is
+        unaffected. For more details, see
+        Documentation/block/inline-encryption.rst.
+
 Data Mode
 =========
 There are 3 different data modes:
diff --git a/Documentation/admin-guide/index.rst b/Documentation/admin-guide/index.rst
index 34cc20e..4aa87af9 100644
--- a/Documentation/admin-guide/index.rst
+++ b/Documentation/admin-guide/index.rst
@@ -58,6 +58,7 @@
    :maxdepth: 1
 
    initrd
+   bootconfig
    cgroup-v2
    cgroup-v1/index
    serial-console
diff --git a/Documentation/admin-guide/kernel-parameters.rst b/Documentation/admin-guide/kernel-parameters.rst
index d05d531..6d42169 100644
--- a/Documentation/admin-guide/kernel-parameters.rst
+++ b/Documentation/admin-guide/kernel-parameters.rst
@@ -127,6 +127,7 @@
 	NET	Appropriate network support is enabled.
 	NUMA	NUMA support is enabled.
 	NFS	Appropriate NFS support is enabled.
+	OF	Devicetree is enabled.
 	OSS	OSS sound support is enabled.
 	PV_OPS	A paravirtualized kernel is enabled.
 	PARIDE	The ParIDE (parallel port IDE) subsystem is enabled.
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index a19ae16..1d09998 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -441,6 +441,12 @@
 			no delay (0).
 			Format: integer
 
+	bootconfig	[KNL]
+			Extended command line options can be added to an initrd
+			and this will cause the kernel to look for it.
+
+			See Documentation/admin-guide/bootconfig.rst
+
 	bootmem_debug	[KNL] Enable bootmem allocator debug messages.
 
 	bert_disable	[ACPI]
@@ -3238,6 +3244,12 @@
 			This can be set from sysctl after boot.
 			See Documentation/admin-guide/sysctl/vm.rst for details.
 
+	of_devlink	[OF, KNL] Create device links between consumer and
+			supplier devices by scanning the devictree to infer the
+			consumer/supplier relationships.  A consumer device
+			will not be probed until all the supplier devices have
+			probed successfully.
+
 	ohci1394_dma=early	[HW] enable debugging via the ohci1394 driver.
 			See Documentation/debugging-via-ohci1394.txt for more
 			info.
diff --git a/Documentation/admin-guide/sysctl/kernel.rst b/Documentation/admin-guide/sysctl/kernel.rst
index 032c7cd..2675980 100644
--- a/Documentation/admin-guide/sysctl/kernel.rst
+++ b/Documentation/admin-guide/sysctl/kernel.rst
@@ -933,6 +933,60 @@
 incurs a small amount of overhead in the scheduler but is
 useful for debugging and performance tuning.
 
+sched_util_clamp_min:
+=====================
+
+Max allowed *minimum* utilization.
+
+Default value is 1024, which is the maximum possible value.
+
+It means that any requested uclamp.min value cannot be greater than
+sched_util_clamp_min, i.e., it is restricted to the range
+[0:sched_util_clamp_min].
+
+sched_util_clamp_max:
+=====================
+
+Max allowed *maximum* utilization.
+
+Default value is 1024, which is the maximum possible value.
+
+It means that any requested uclamp.max value cannot be greater than
+sched_util_clamp_max, i.e., it is restricted to the range
+[0:sched_util_clamp_max].
+
+sched_util_clamp_min_rt_default:
+================================
+
+By default Linux is tuned for performance. Which means that RT tasks always run
+at the highest frequency and most capable (highest capacity) CPU (in
+heterogeneous systems).
+
+Uclamp achieves this by setting the requested uclamp.min of all RT tasks to
+1024 by default, which effectively boosts the tasks to run at the highest
+frequency and biases them to run on the biggest CPU.
+
+This knob allows admins to change the default behavior when uclamp is being
+used. In battery powered devices particularly, running at the maximum
+capacity and frequency will increase energy consumption and shorten the battery
+life.
+
+This knob is only effective for RT tasks which the user hasn't modified their
+requested uclamp.min value via sched_setattr() syscall.
+
+This knob will not escape the range constraint imposed by sched_util_clamp_min
+defined above.
+
+For example if
+
+	sched_util_clamp_min_rt_default = 800
+	sched_util_clamp_min = 600
+
+Then the boost will be clamped to 600 because 800 is outside of the permissible
+range of [0:600]. This could happen for instance if a powersave mode will
+restrict all boosts temporarily by modifying sched_util_clamp_min. As soon as
+this restriction is lifted, the requested sched_util_clamp_min_rt_default
+will take effect.
 
 sg-big-buff:
 ============
diff --git a/Documentation/admin-guide/sysctl/vm.rst b/Documentation/admin-guide/sysctl/vm.rst
index 64aeee1..dcca8a6 100644
--- a/Documentation/admin-guide/sysctl/vm.rst
+++ b/Documentation/admin-guide/sysctl/vm.rst
@@ -37,6 +37,7 @@
 - dirty_writeback_centisecs
 - drop_caches
 - extfrag_threshold
+- extra_free_kbytes
 - hugetlb_shm_group
 - laptop_mode
 - legacy_va_layout
@@ -287,6 +288,21 @@
 any throttling.
 
 
+extra_free_kbytes
+
+This parameter tells the VM to keep extra free memory between the threshold
+where background reclaim (kswapd) kicks in, and the threshold where direct
+reclaim (by allocating processes) kicks in.
+
+This is useful for workloads that require low latency memory allocations
+and have a bounded burstiness in memory allocations, for example a
+realtime application that receives and transmits network traffic
+(causing in-kernel memory allocations) with a maximum total message burst
+size of 200MB may need 200MB of extra free memory to avoid direct reclaim
+related latencies.
+
+==============================================================
+
 hugetlb_shm_group
 =================
 
@@ -840,12 +856,17 @@
 unprivileged_userfaultfd
 ========================
 
-This flag controls whether unprivileged users can use the userfaultfd
-system calls.  Set this to 1 to allow unprivileged users to use the
-userfaultfd system calls, or set this to 0 to restrict userfaultfd to only
-privileged users (with SYS_CAP_PTRACE capability).
+This flag controls the mode in which unprivileged users can use the
+userfaultfd system calls. Set this to 0 to restrict unprivileged users
+to handle page faults in user mode only. In this case, users without
+SYS_CAP_PTRACE must pass UFFD_USER_MODE_ONLY in order for userfaultfd to
+succeed. Prohibiting use of userfaultfd for handling faults from kernel
+mode may make certain vulnerabilities more difficult to exploit.
 
-The default value is 1.
+Set this to 1 to allow unprivileged users to use the userfaultfd system
+calls without any restrictions.
+
+The default value is 0.
 
 
 user_reserve_kbytes
diff --git a/Documentation/arm64/amu.rst b/Documentation/arm64/amu.rst
new file mode 100644
index 0000000..5057b11
--- /dev/null
+++ b/Documentation/arm64/amu.rst
@@ -0,0 +1,112 @@
+=======================================================
+Activity Monitors Unit (AMU) extension in AArch64 Linux
+=======================================================
+
+Author: Ionela Voinescu <ionela.voinescu@arm.com>
+
+Date: 2019-09-10
+
+This document briefly describes the provision of Activity Monitors Unit
+support in AArch64 Linux.
+
+
+Architecture overview
+---------------------
+
+The activity monitors extension is an optional extension introduced by the
+ARMv8.4 CPU architecture.
+
+The activity monitors unit, implemented in each CPU, provides performance
+counters intended for system management use. The AMU extension provides a
+system register interface to the counter registers and also supports an
+optional external memory-mapped interface.
+
+Version 1 of the Activity Monitors architecture implements a counter group
+of four fixed and architecturally defined 64-bit event counters.
+  - CPU cycle counter: increments at the frequency of the CPU.
+  - Constant counter: increments at the fixed frequency of the system
+    clock.
+  - Instructions retired: increments with every architecturally executed
+    instruction.
+  - Memory stall cycles: counts instruction dispatch stall cycles caused by
+    misses in the last level cache within the clock domain.
+
+When in WFI or WFE these counters do not increment.
+
+The Activity Monitors architecture provides space for up to 16 architected
+event counters. Future versions of the architecture may use this space to
+implement additional architected event counters.
+
+Additionally, version 1 implements a counter group of up to 16 auxiliary
+64-bit event counters.
+
+On cold reset all counters reset to 0.
+
+
+Basic support
+-------------
+
+The kernel can safely run a mix of CPUs with and without support for the
+activity monitors extension. Therefore, when CONFIG_ARM64_AMU_EXTN is
+selected we unconditionally enable the capability to allow any late CPU
+(secondary or hotplugged) to detect and use the feature.
+
+When the feature is detected on a CPU, we flag the availability of the
+feature but this does not guarantee the correct functionality of the
+counters, only the presence of the extension.
+
+Firmware (code running at higher exception levels, e.g. arm-tf) support is
+needed to:
+ - Enable access for lower exception levels (EL2 and EL1) to the AMU
+   registers.
+ - Enable the counters. If not enabled these will read as 0.
+ - Save/restore the counters before/after the CPU is being put/brought up
+   from the 'off' power state.
+
+When using kernels that have this feature enabled but boot with broken
+firmware the user may experience panics or lockups when accessing the
+counter registers. Even if these symptoms are not observed, the values
+returned by the register reads might not correctly reflect reality. Most
+commonly, the counters will read as 0, indicating that they are not
+enabled.
+
+If proper support is not provided in firmware it's best to disable
+CONFIG_ARM64_AMU_EXTN. To be noted that for security reasons, this does not
+bypass the setting of AMUSERENR_EL0 to trap accesses from EL0 (userspace) to
+EL1 (kernel). Therefore, firmware should still ensure accesses to AMU registers
+are not trapped in EL2/EL3.
+
+The fixed counters of AMUv1 are accessible though the following system
+register definitions:
+ - SYS_AMEVCNTR0_CORE_EL0
+ - SYS_AMEVCNTR0_CONST_EL0
+ - SYS_AMEVCNTR0_INST_RET_EL0
+ - SYS_AMEVCNTR0_MEM_STALL_EL0
+
+Auxiliary platform specific counters can be accessed using
+SYS_AMEVCNTR1_EL0(n), where n is a value between 0 and 15.
+
+Details can be found in: arch/arm64/include/asm/sysreg.h.
+
+
+Userspace access
+----------------
+
+Currently, access from userspace to the AMU registers is disabled due to:
+ - Security reasons: they might expose information about code executed in
+   secure mode.
+ - Purpose: AMU counters are intended for system management use.
+
+Also, the presence of the feature is not visible to userspace.
+
+
+Virtualization
+--------------
+
+Currently, access from userspace (EL0) and kernelspace (EL1) on the KVM
+guest side is disabled due to:
+ - Security reasons: they might expose information about code executed
+   by other guests or the host.
+
+Any attempt to access the AMU registers will result in an UNDEFINED
+exception being injected into the guest.
diff --git a/Documentation/arm64/booting.rst b/Documentation/arm64/booting.rst
index d3f3a60..a17f427 100644
--- a/Documentation/arm64/booting.rst
+++ b/Documentation/arm64/booting.rst
@@ -245,6 +245,20 @@
     - HCR_EL2.APK (bit 40) must be initialised to 0b1
     - HCR_EL2.API (bit 41) must be initialised to 0b1
 
+  For CPUs with Activity Monitors Unit v1 (AMUv1) extension present:
+  - If EL3 is present:
+    CPTR_EL3.TAM (bit 30) must be initialised to 0b0
+    CPTR_EL2.TAM (bit 30) must be initialised to 0b0
+    AMCNTENSET0_EL0 must be initialised to 0b1111
+    AMCNTENSET1_EL0 must be initialised to a platform specific value
+    having 0b1 set for the corresponding bit for each of the auxiliary
+    counters present.
+  - If the kernel is entered at EL1:
+    AMCNTENSET0_EL0 must be initialised to 0b1111
+    AMCNTENSET1_EL0 must be initialised to a platform specific value
+    having 0b1 set for the corresponding bit for each of the auxiliary
+    counters present.
+
 The requirements described above for CPU mode, caches, MMUs, architected
 timers, coherency and system registers apply to all CPUs.  All CPUs must
 enter the kernel in the same exception level.
diff --git a/Documentation/arm64/index.rst b/Documentation/arm64/index.rst
index 5c0c69d..09cbb4e 100644
--- a/Documentation/arm64/index.rst
+++ b/Documentation/arm64/index.rst
@@ -6,6 +6,7 @@
     :maxdepth: 1
 
     acpi_object_usage
+    amu
     arm-acpi
     booting
     cpu-feature-registers
diff --git a/Documentation/block/index.rst b/Documentation/block/index.rst
index 3fa7a52..026addf 100644
--- a/Documentation/block/index.rst
+++ b/Documentation/block/index.rst
@@ -14,6 +14,7 @@
    cmdline-partition
    data-integrity
    deadline-iosched
+   inline-encryption
    ioprio
    kyber-iosched
    null_blk
diff --git a/Documentation/block/inline-encryption.rst b/Documentation/block/inline-encryption.rst
new file mode 100644
index 0000000..5fcea79
--- /dev/null
+++ b/Documentation/block/inline-encryption.rst
@@ -0,0 +1,263 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+=================
+Inline Encryption
+=================
+
+Background
+==========
+
+Inline encryption hardware sits logically between memory and the disk, and can
+en/decrypt data as it goes in/out of the disk. Inline encryption hardware has a
+fixed number of "keyslots" - slots into which encryption contexts (i.e. the
+encryption key, encryption algorithm, data unit size) can be programmed by the
+kernel at any time. Each request sent to the disk can be tagged with the index
+of a keyslot (and also a data unit number to act as an encryption tweak), and
+the inline encryption hardware will en/decrypt the data in the request with the
+encryption context programmed into that keyslot. This is very different from
+full disk encryption solutions like self encrypting drives/TCG OPAL/ATA
+Security standards, since with inline encryption, any block on disk could be
+encrypted with any encryption context the kernel chooses.
+
+
+Objective
+=========
+
+We want to support inline encryption (IE) in the kernel.
+To allow for testing, we also want a crypto API fallback when actual
+IE hardware is absent. We also want IE to work with layered devices
+like dm and loopback (i.e. we want to be able to use the IE hardware
+of the underlying devices if present, or else fall back to crypto API
+en/decryption).
+
+
+Constraints and notes
+=====================
+
+- IE hardware has a limited number of "keyslots" that can be programmed
+  with an encryption context (key, algorithm, data unit size, etc.) at any time.
+  One can specify a keyslot in a data request made to the device, and the
+  device will en/decrypt the data using the encryption context programmed into
+  that specified keyslot. When possible, we want to make multiple requests with
+  the same encryption context share the same keyslot.
+
+- We need a way for upper layers like filesystems to specify an encryption
+  context to use for en/decrypting a struct bio, and a device driver (like UFS)
+  needs to be able to use that encryption context when it processes the bio.
+
+- We need a way for device drivers to expose their inline encryption
+  capabilities in a unified way to the upper layers.
+
+
+Design
+======
+
+We add a :c:type:`struct bio_crypt_ctx` to :c:type:`struct bio` that can
+represent an encryption context, because we need to be able to pass this
+encryption context from the upper layers (like the fs layer) to the
+device driver to act upon.
+
+While IE hardware works on the notion of keyslots, the FS layer has no
+knowledge of keyslots - it simply wants to specify an encryption context to
+use while en/decrypting a bio.
+
+We introduce a keyslot manager (KSM) that handles the translation from
+encryption contexts specified by the FS to keyslots on the IE hardware.
+This KSM also serves as the way IE hardware can expose its capabilities to
+upper layers. The generic mode of operation is: each device driver that wants
+to support IE will construct a KSM and set it up in its struct request_queue.
+Upper layers that want to use IE on this device can then use this KSM in
+the device's struct request_queue to translate an encryption context into
+a keyslot. The presence of the KSM in the request queue shall be used to mean
+that the device supports IE.
+
+The KSM uses refcounts to track which keyslots are idle (either they have no
+encryption context programmed, or there are no in-flight struct bios
+referencing that keyslot). When a new encryption context needs a keyslot, it
+tries to find a keyslot that has already been programmed with the same
+encryption context, and if there is no such keyslot, it evicts the least
+recently used idle keyslot and programs the new encryption context into that
+one. If no idle keyslots are available, then the caller will sleep until there
+is at least one.
+
+
+blk-mq changes, other block layer changes and blk-crypto-fallback
+=================================================================
+
+We add a pointer to a ``bi_crypt_context`` and ``keyslot`` to
+:c:type:`struct request`. These will be referred to as the ``crypto fields``
+for the request. This ``keyslot`` is the keyslot into which the
+``bi_crypt_context`` has been programmed in the KSM of the ``request_queue``
+that this request is being sent to.
+
+We introduce ``block/blk-crypto-fallback.c``, which allows upper layers to remain
+blissfully unaware of whether or not real inline encryption hardware is present
+underneath. When a bio is submitted with a target ``request_queue`` that doesn't
+support the encryption context specified with the bio, the block layer will
+en/decrypt the bio with the blk-crypto-fallback.
+
+If the bio is a ``WRITE`` bio, a bounce bio is allocated, and the data in the bio
+is encrypted stored in the bounce bio - blk-mq will then proceed to process the
+bounce bio as if it were not encrypted at all (except when blk-integrity is
+concerned). ``blk-crypto-fallback`` sets the bounce bio's ``bi_end_io`` to an
+internal function that cleans up the bounce bio and ends the original bio.
+
+If the bio is a ``READ`` bio, the bio's ``bi_end_io`` (and also ``bi_private``)
+is saved and overwritten by ``blk-crypto-fallback`` to
+``bio_crypto_fallback_decrypt_bio``.  The bio's ``bi_crypt_context`` is also
+overwritten with ``NULL``, so that to the rest of the stack, the bio looks
+as if it was a regular bio that never had an encryption context specified.
+``bio_crypto_fallback_decrypt_bio`` will decrypt the bio, restore the original
+``bi_end_io`` (and also ``bi_private``) and end the bio again.
+
+Regardless of whether real inline encryption hardware is used or the
+blk-crypto-fallback is used, the ciphertext written to disk (and hence the
+on-disk format of data) will be the same (assuming the hardware's implementation
+of the algorithm being used adheres to spec and functions correctly).
+
+If a ``request queue``'s inline encryption hardware claimed to support the
+encryption context specified with a bio, then it will not be handled by the
+``blk-crypto-fallback``. We will eventually reach a point in blk-mq when a
+:c:type:`struct request` needs to be allocated for that bio. At that point,
+blk-mq tries to program the encryption context into the ``request_queue``'s
+keyslot_manager, and obtain a keyslot, which it stores in its newly added
+``keyslot`` field. This keyslot is released when the request is completed.
+
+When the first bio is added to a request, ``blk_crypto_rq_bio_prep`` is called,
+which sets the request's ``crypt_ctx`` to a copy of the bio's
+``bi_crypt_context``. bio_crypt_do_front_merge is called whenever a subsequent
+bio is merged to the front of the request, which updates the ``crypt_ctx`` of
+the request so that it matches the newly merged bio's ``bi_crypt_context``. In particular, the request keeps a copy of the ``bi_crypt_context`` of the first
+bio in its bio-list (blk-mq needs to be careful to maintain this invariant
+during bio and request merges).
+
+To make it possible for inline encryption to work with request queue based
+layered devices, when a request is cloned, its ``crypto fields`` are cloned as
+well. When the cloned request is submitted, blk-mq programs the
+``bi_crypt_context`` of the request into the clone's request_queue's keyslot
+manager, and stores the returned keyslot in the clone's ``keyslot``.
+
+
+API presented to users of the block layer
+=========================================
+
+``struct blk_crypto_key`` represents a crypto key (the raw key, size of the
+key, the crypto algorithm to use, the data unit size to use, and the number of
+bytes required to represent data unit numbers that will be specified with the
+``bi_crypt_context``).
+
+``blk_crypto_init_key`` allows upper layers to initialize such a
+``blk_crypto_key``.
+
+``bio_crypt_set_ctx`` should be called on any bio that a user of
+the block layer wants en/decrypted via inline encryption (or the
+blk-crypto-fallback, if hardware support isn't available for the desired
+crypto configuration). This function takes the ``blk_crypto_key`` and the
+data unit number (DUN) to use when en/decrypting the bio.
+
+``blk_crypto_config_supported`` allows upper layers to query whether or not the
+an encryption context passed to request queue can be handled by blk-crypto
+(either by real inline encryption hardware, or by the blk-crypto-fallback).
+This is useful e.g. when blk-crypto-fallback is disabled, and the upper layer
+wants to use an algorithm that may not supported by hardware - this function
+lets the upper layer know ahead of time that the algorithm isn't supported,
+and the upper layer can fallback to something else if appropriate.
+
+``blk_crypto_start_using_key`` - Upper layers must call this function on
+``blk_crypto_key`` and a ``request_queue`` before using the key with any bio
+headed for that ``request_queue``. This function ensures that either the
+hardware supports the key's crypto settings, or the crypto API fallback has
+transforms for the needed mode allocated and ready to go. Note that this
+function may allocate an ``skcipher``, and must not be called from the data
+path, since allocating ``skciphers`` from the data path can deadlock.
+
+``blk_crypto_evict_key`` *must* be called by upper layers before a
+``blk_crypto_key`` is freed. Further, it *must* only be called only once
+there are no more in-flight requests that use that ``blk_crypto_key``.
+``blk_crypto_evict_key`` will ensure that a key is removed from any keyslots in
+inline encryption hardware that the key might have been programmed into (or the blk-crypto-fallback).
+
+API presented to device drivers
+===============================
+
+A :c:type:``struct blk_keyslot_manager`` should be set up by device drivers in
+the ``request_queue`` of the device. The device driver needs to call
+``blk_ksm_init`` (or its resource-managed variant ``devm_blk_ksm_init``) on the
+``blk_keyslot_manager``, while specifying the number of keyslots supported by
+the hardware.
+
+The device driver also needs to tell the KSM how to actually manipulate the
+IE hardware in the device to do things like programming the crypto key into
+the IE hardware into a particular keyslot. All this is achieved through the
+:c:type:`struct blk_ksm_ll_ops` field in the KSM that the device driver
+must fill up after initing the ``blk_keyslot_manager``.
+
+The KSM also handles runtime power management for the device when applicable
+(e.g. when it wants to program a crypto key into the IE hardware, the device
+must be runtime powered on) - so the device driver must also set the ``dev``
+field in the ksm to point to the `struct device` for the KSM to use for runtime
+power management.
+
+``blk_ksm_reprogram_all_keys`` can be called by device drivers if the device
+needs each and every of its keyslots to be reprogrammed with the key it
+"should have" at the point in time when the function is called. This is useful
+e.g. if a device loses all its keys on runtime power down/up.
+
+If the driver used ``blk_ksm_init`` instead of ``devm_blk_ksm_init``, then
+``blk_ksm_destroy`` should be called to free up all resources used by a
+``blk_keyslot_manager`` once it is no longer needed.
+
+Layered Devices
+===============
+
+Request queue based layered devices like dm-rq that wish to support IE need to
+create their own keyslot manager for their request queue, and expose whatever
+functionality they choose. When a layered device wants to pass a clone of that
+request to another ``request_queue``, blk-crypto will initialize and prepare the
+clone as necessary - see ``blk_crypto_insert_cloned_request`` in
+``blk-crypto.c``.
+
+
+Future Optimizations for layered devices
+========================================
+
+Creating a keyslot manager for a layered device uses up memory for each
+keyslot, and in general, a layered device merely passes the request on to a
+"child" device, so the keyslots in the layered device itself are completely
+unused, and don't need any refcounting or keyslot programming. We can instead
+define a new type of KSM; the "passthrough KSM", that layered devices can use
+to advertise an unlimited number of keyslots, and support for any encryption
+algorithms they choose, while not actually using any memory for each keyslot.
+Another use case for the "passthrough KSM" is for IE devices that do not have a
+limited number of keyslots.
+
+
+Interaction between inline encryption and blk integrity
+=======================================================
+
+At the time of this patch, there is no real hardware that supports both these
+features. However, these features do interact with each other, and it's not
+completely trivial to make them both work together properly. In particular,
+when a WRITE bio wants to use inline encryption on a device that supports both
+features, the bio will have an encryption context specified, after which
+its integrity information is calculated (using the plaintext data, since
+the encryption will happen while data is being written), and the data and
+integrity info is sent to the device. Obviously, the integrity info must be
+verified before the data is encrypted. After the data is encrypted, the device
+must not store the integrity info that it received with the plaintext data
+since that might reveal information about the plaintext data. As such, it must
+re-generate the integrity info from the ciphertext data and store that on disk
+instead. Another issue with storing the integrity info of the plaintext data is
+that it changes the on disk format depending on whether hardware inline
+encryption support is present or the kernel crypto API fallback is used (since
+if the fallback is used, the device will receive the integrity info of the
+ciphertext, not that of the plaintext).
+
+Because there isn't any real hardware yet, it seems prudent to assume that
+hardware implementations might not implement both features together correctly,
+and disallow the combination for now. Whenever a device supports integrity, the
+kernel will pretend that the device does not support hardware inline encryption
+(by essentially setting the keyslot manager in the request_queue of the device
+to NULL). When the crypto API fallback is enabled, this means that all bios with
+and encryption context will use the fallback, and IO will complete as usual.
+When the fallback is disabled, a bio with an encryption context will be failed.
diff --git a/Documentation/dev-tools/index.rst b/Documentation/dev-tools/index.rst
index b0522a4..e09315b 100644
--- a/Documentation/dev-tools/index.rst
+++ b/Documentation/dev-tools/index.rst
@@ -21,9 +21,11 @@
    kasan
    ubsan
    kmemleak
+   kfence
    gdb-kernel-debugging
    kgdb
    kselftest
+   kunit/index
 
 
 .. only::  subproject and html
diff --git a/Documentation/dev-tools/kcov.rst b/Documentation/dev-tools/kcov.rst
index 42b6126..1c4e182 100644
--- a/Documentation/dev-tools/kcov.rst
+++ b/Documentation/dev-tools/kcov.rst
@@ -34,6 +34,7 @@
 
 Coverage collection
 -------------------
+
 The following program demonstrates coverage collection from within a test
 program using kcov:
 
@@ -128,6 +129,7 @@
 
 Comparison operands collection
 ------------------------------
+
 Comparison operands collection is similar to coverage collection:
 
 .. code-block:: c
@@ -202,3 +204,130 @@
 
 Note that the kcov modes (coverage collection or comparison operands) are
 mutually exclusive.
+
+Remote coverage collection
+--------------------------
+
+With KCOV_ENABLE coverage is collected only for syscalls that are issued
+from the current process. With KCOV_REMOTE_ENABLE it's possible to collect
+coverage for arbitrary parts of the kernel code, provided that those parts
+are annotated with kcov_remote_start()/kcov_remote_stop().
+
+This allows to collect coverage from two types of kernel background
+threads: the global ones, that are spawned during kernel boot in a limited
+number of instances (e.g. one USB hub_event() worker thread is spawned per
+USB HCD); and the local ones, that are spawned when a user interacts with
+some kernel interface (e.g. vhost workers).
+
+To enable collecting coverage from a global background thread, a unique
+global handle must be assigned and passed to the corresponding
+kcov_remote_start() call. Then a userspace process can pass a list of such
+handles to the KCOV_REMOTE_ENABLE ioctl in the handles array field of the
+kcov_remote_arg struct. This will attach the used kcov device to the code
+sections, that are referenced by those handles.
+
+Since there might be many local background threads spawned from different
+userspace processes, we can't use a single global handle per annotation.
+Instead, the userspace process passes a non-zero handle through the
+common_handle field of the kcov_remote_arg struct. This common handle gets
+saved to the kcov_handle field in the current task_struct and needs to be
+passed to the newly spawned threads via custom annotations. Those threads
+should in turn be annotated with kcov_remote_start()/kcov_remote_stop().
+
+Internally kcov stores handles as u64 integers. The top byte of a handle
+is used to denote the id of a subsystem that this handle belongs to, and
+the lower 4 bytes are used to denote the id of a thread instance within
+that subsystem. A reserved value 0 is used as a subsystem id for common
+handles as they don't belong to a particular subsystem. The bytes 4-7 are
+currently reserved and must be zero. In the future the number of bytes
+used for the subsystem or handle ids might be increased.
+
+When a particular userspace proccess collects coverage by via a common
+handle, kcov will collect coverage for each code section that is annotated
+to use the common handle obtained as kcov_handle from the current
+task_struct. However non common handles allow to collect coverage
+selectively from different subsystems.
+
+.. code-block:: c
+
+    struct kcov_remote_arg {
+	__u32		trace_mode;
+	__u32		area_size;
+	__u32		num_handles;
+	__aligned_u64	common_handle;
+	__aligned_u64	handles[0];
+    };
+
+    #define KCOV_INIT_TRACE			_IOR('c', 1, unsigned long)
+    #define KCOV_DISABLE			_IO('c', 101)
+    #define KCOV_REMOTE_ENABLE		_IOW('c', 102, struct kcov_remote_arg)
+
+    #define COVER_SIZE	(64 << 10)
+
+    #define KCOV_TRACE_PC	0
+
+    #define KCOV_SUBSYSTEM_COMMON	(0x00ull << 56)
+    #define KCOV_SUBSYSTEM_USB	(0x01ull << 56)
+
+    #define KCOV_SUBSYSTEM_MASK	(0xffull << 56)
+    #define KCOV_INSTANCE_MASK	(0xffffffffull)
+
+    static inline __u64 kcov_remote_handle(__u64 subsys, __u64 inst)
+    {
+	if (subsys & ~KCOV_SUBSYSTEM_MASK || inst & ~KCOV_INSTANCE_MASK)
+		return 0;
+	return subsys | inst;
+    }
+
+    #define KCOV_COMMON_ID	0x42
+    #define KCOV_USB_BUS_NUM	1
+
+    int main(int argc, char **argv)
+    {
+	int fd;
+	unsigned long *cover, n, i;
+	struct kcov_remote_arg *arg;
+
+	fd = open("/sys/kernel/debug/kcov", O_RDWR);
+	if (fd == -1)
+		perror("open"), exit(1);
+	if (ioctl(fd, KCOV_INIT_TRACE, COVER_SIZE))
+		perror("ioctl"), exit(1);
+	cover = (unsigned long*)mmap(NULL, COVER_SIZE * sizeof(unsigned long),
+				     PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+	if ((void*)cover == MAP_FAILED)
+		perror("mmap"), exit(1);
+
+	/* Enable coverage collection via common handle and from USB bus #1. */
+	arg = calloc(1, sizeof(*arg) + sizeof(uint64_t));
+	if (!arg)
+		perror("calloc"), exit(1);
+	arg->trace_mode = KCOV_TRACE_PC;
+	arg->area_size = COVER_SIZE;
+	arg->num_handles = 1;
+	arg->common_handle = kcov_remote_handle(KCOV_SUBSYSTEM_COMMON,
+							KCOV_COMMON_ID);
+	arg->handles[0] = kcov_remote_handle(KCOV_SUBSYSTEM_USB,
+						KCOV_USB_BUS_NUM);
+	if (ioctl(fd, KCOV_REMOTE_ENABLE, arg))
+		perror("ioctl"), free(arg), exit(1);
+	free(arg);
+
+	/*
+	 * Here the user needs to trigger execution of a kernel code section
+	 * that is either annotated with the common handle, or to trigger some
+	 * activity on USB bus #1.
+	 */
+	sleep(2);
+
+	n = __atomic_load_n(&cover[0], __ATOMIC_RELAXED);
+	for (i = 0; i < n; i++)
+		printf("0x%lx\n", cover[i + 1]);
+	if (ioctl(fd, KCOV_DISABLE, 0))
+		perror("ioctl"), exit(1);
+	if (munmap(cover, COVER_SIZE * sizeof(unsigned long)))
+		perror("munmap"), exit(1);
+	if (close(fd))
+		perror("close"), exit(1);
+	return 0;
+    }
diff --git a/Documentation/dev-tools/kfence.rst b/Documentation/dev-tools/kfence.rst
new file mode 100644
index 0000000..58a0a5f
--- /dev/null
+++ b/Documentation/dev-tools/kfence.rst
@@ -0,0 +1,298 @@
+.. SPDX-License-Identifier: GPL-2.0
+.. Copyright (C) 2020, Google LLC.
+
+Kernel Electric-Fence (KFENCE)
+==============================
+
+Kernel Electric-Fence (KFENCE) is a low-overhead sampling-based memory safety
+error detector. KFENCE detects heap out-of-bounds access, use-after-free, and
+invalid-free errors.
+
+KFENCE is designed to be enabled in production kernels, and has near zero
+performance overhead. Compared to KASAN, KFENCE trades performance for
+precision. The main motivation behind KFENCE's design, is that with enough
+total uptime KFENCE will detect bugs in code paths not typically exercised by
+non-production test workloads. One way to quickly achieve a large enough total
+uptime is when the tool is deployed across a large fleet of machines.
+
+Usage
+-----
+
+To enable KFENCE, configure the kernel with::
+
+    CONFIG_KFENCE=y
+
+To build a kernel with KFENCE support, but disabled by default (to enable, set
+``kfence.sample_interval`` to non-zero value), configure the kernel with::
+
+    CONFIG_KFENCE=y
+    CONFIG_KFENCE_SAMPLE_INTERVAL=0
+
+KFENCE provides several other configuration options to customize behaviour (see
+the respective help text in ``lib/Kconfig.kfence`` for more info).
+
+Tuning performance
+~~~~~~~~~~~~~~~~~~
+
+The most important parameter is KFENCE's sample interval, which can be set via
+the kernel boot parameter ``kfence.sample_interval`` in milliseconds. The
+sample interval determines the frequency with which heap allocations will be
+guarded by KFENCE. The default is configurable via the Kconfig option
+``CONFIG_KFENCE_SAMPLE_INTERVAL``. Setting ``kfence.sample_interval=0``
+disables KFENCE.
+
+The KFENCE memory pool is of fixed size, and if the pool is exhausted, no
+further KFENCE allocations occur. With ``CONFIG_KFENCE_NUM_OBJECTS`` (default
+255), the number of available guarded objects can be controlled. Each object
+requires 2 pages, one for the object itself and the other one used as a guard
+page; object pages are interleaved with guard pages, and every object page is
+therefore surrounded by two guard pages.
+
+The total memory dedicated to the KFENCE memory pool can be computed as::
+
+    ( #objects + 1 ) * 2 * PAGE_SIZE
+
+Using the default config, and assuming a page size of 4 KiB, results in
+dedicating 2 MiB to the KFENCE memory pool.
+
+Note: On architectures that support huge pages, KFENCE will ensure that the
+pool is using pages of size ``PAGE_SIZE``. This will result in additional page
+tables being allocated.
+
+Error reports
+~~~~~~~~~~~~~
+
+A typical out-of-bounds access looks like this::
+
+    ==================================================================
+    BUG: KFENCE: out-of-bounds read in test_out_of_bounds_read+0xa3/0x22b
+
+    Out-of-bounds read at 0xffffffffb672efff (1B left of kfence-#17):
+     test_out_of_bounds_read+0xa3/0x22b
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    kfence-#17 [0xffffffffb672f000-0xffffffffb672f01f, size=32, cache=kmalloc-32] allocated by task 507:
+     test_alloc+0xf3/0x25b
+     test_out_of_bounds_read+0x98/0x22b
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    CPU: 4 PID: 107 Comm: kunit_try_catch Not tainted 5.8.0-rc6+ #7
+    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1 04/01/2014
+    ==================================================================
+
+The header of the report provides a short summary of the function involved in
+the access. It is followed by more detailed information about the access and
+its origin. Note that, real kernel addresses are only shown for
+``CONFIG_DEBUG_KERNEL=y`` builds.
+
+Use-after-free accesses are reported as::
+
+    ==================================================================
+    BUG: KFENCE: use-after-free read in test_use_after_free_read+0xb3/0x143
+
+    Use-after-free read at 0xffffffffb673dfe0 (in kfence-#24):
+     test_use_after_free_read+0xb3/0x143
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    kfence-#24 [0xffffffffb673dfe0-0xffffffffb673dfff, size=32, cache=kmalloc-32] allocated by task 507:
+     test_alloc+0xf3/0x25b
+     test_use_after_free_read+0x76/0x143
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    freed by task 507:
+     test_use_after_free_read+0xa8/0x143
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    CPU: 4 PID: 109 Comm: kunit_try_catch Tainted: G        W         5.8.0-rc6+ #7
+    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1 04/01/2014
+    ==================================================================
+
+KFENCE also reports on invalid frees, such as double-frees::
+
+    ==================================================================
+    BUG: KFENCE: invalid free in test_double_free+0xdc/0x171
+
+    Invalid free of 0xffffffffb6741000:
+     test_double_free+0xdc/0x171
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    kfence-#26 [0xffffffffb6741000-0xffffffffb674101f, size=32, cache=kmalloc-32] allocated by task 507:
+     test_alloc+0xf3/0x25b
+     test_double_free+0x76/0x171
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    freed by task 507:
+     test_double_free+0xa8/0x171
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    CPU: 4 PID: 111 Comm: kunit_try_catch Tainted: G        W         5.8.0-rc6+ #7
+    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1 04/01/2014
+    ==================================================================
+
+KFENCE also uses pattern-based redzones on the other side of an object's guard
+page, to detect out-of-bounds writes on the unprotected side of the object.
+These are reported on frees::
+
+    ==================================================================
+    BUG: KFENCE: memory corruption in test_kmalloc_aligned_oob_write+0xef/0x184
+
+    Corrupted memory at 0xffffffffb6797ff9 [ 0xac . . . . . . ] (in kfence-#69):
+     test_kmalloc_aligned_oob_write+0xef/0x184
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    kfence-#69 [0xffffffffb6797fb0-0xffffffffb6797ff8, size=73, cache=kmalloc-96] allocated by task 507:
+     test_alloc+0xf3/0x25b
+     test_kmalloc_aligned_oob_write+0x57/0x184
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    CPU: 4 PID: 120 Comm: kunit_try_catch Tainted: G        W         5.8.0-rc6+ #7
+    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1 04/01/2014
+    ==================================================================
+
+For such errors, the address where the corruption occurred as well as the
+invalidly written bytes (offset from the address) are shown; in this
+representation, '.' denote untouched bytes. In the example above ``0xac`` is
+the value written to the invalid address at offset 0, and the remaining '.'
+denote that no following bytes have been touched. Note that, real values are
+only shown for ``CONFIG_DEBUG_KERNEL=y`` builds; to avoid information
+disclosure for non-debug builds, '!' is used instead to denote invalidly
+written bytes.
+
+And finally, KFENCE may also report on invalid accesses to any protected page
+where it was not possible to determine an associated object, e.g. if adjacent
+object pages had not yet been allocated::
+
+    ==================================================================
+    BUG: KFENCE: invalid read in test_invalid_access+0x26/0xe0
+
+    Invalid read at 0xffffffffb670b00a:
+     test_invalid_access+0x26/0xe0
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    CPU: 4 PID: 124 Comm: kunit_try_catch Tainted: G        W         5.8.0-rc6+ #7
+    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1 04/01/2014
+    ==================================================================
+
+DebugFS interface
+~~~~~~~~~~~~~~~~~
+
+Some debugging information is exposed via debugfs:
+
+* The file ``/sys/kernel/debug/kfence/stats`` provides runtime statistics.
+
+* The file ``/sys/kernel/debug/kfence/objects`` provides a list of objects
+  allocated via KFENCE, including those already freed but protected.
+
+Implementation Details
+----------------------
+
+Guarded allocations are set up based on the sample interval. After expiration
+of the sample interval, the next allocation through the main allocator (SLAB or
+SLUB) returns a guarded allocation from the KFENCE object pool (allocation
+sizes up to PAGE_SIZE are supported). At this point, the timer is reset, and
+the next allocation is set up after the expiration of the interval. To "gate" a
+KFENCE allocation through the main allocator's fast-path without overhead,
+KFENCE relies on static branches via the static keys infrastructure. The static
+branch is toggled to redirect the allocation to KFENCE.
+
+KFENCE objects each reside on a dedicated page, at either the left or right
+page boundaries selected at random. The pages to the left and right of the
+object page are "guard pages", whose attributes are changed to a protected
+state, and cause page faults on any attempted access. Such page faults are then
+intercepted by KFENCE, which handles the fault gracefully by reporting an
+out-of-bounds access, and marking the page as accessible so that the faulting
+code can (wrongly) continue executing (set ``panic_on_warn`` to panic instead).
+
+To detect out-of-bounds writes to memory within the object's page itself,
+KFENCE also uses pattern-based redzones. For each object page, a redzone is set
+up for all non-object memory. For typical alignments, the redzone is only
+required on the unguarded side of an object. Because KFENCE must honor the
+cache's requested alignment, special alignments may result in unprotected gaps
+on either side of an object, all of which are redzoned.
+
+The following figure illustrates the page layout::
+
+    ---+-----------+-----------+-----------+-----------+-----------+---
+       | xxxxxxxxx | O :       | xxxxxxxxx |       : O | xxxxxxxxx |
+       | xxxxxxxxx | B :       | xxxxxxxxx |       : B | xxxxxxxxx |
+       | x GUARD x | J : RED-  | x GUARD x | RED-  : J | x GUARD x |
+       | xxxxxxxxx | E :  ZONE | xxxxxxxxx |  ZONE : E | xxxxxxxxx |
+       | xxxxxxxxx | C :       | xxxxxxxxx |       : C | xxxxxxxxx |
+       | xxxxxxxxx | T :       | xxxxxxxxx |       : T | xxxxxxxxx |
+    ---+-----------+-----------+-----------+-----------+-----------+---
+
+Upon deallocation of a KFENCE object, the object's page is again protected and
+the object is marked as freed. Any further access to the object causes a fault
+and KFENCE reports a use-after-free access. Freed objects are inserted at the
+tail of KFENCE's freelist, so that the least recently freed objects are reused
+first, and the chances of detecting use-after-frees of recently freed objects
+is increased.
+
+Interface
+---------
+
+The following describes the functions which are used by allocators as well as
+page handling code to set up and deal with KFENCE allocations.
+
+.. kernel-doc:: include/linux/kfence.h
+   :functions: is_kfence_address
+               kfence_shutdown_cache
+               kfence_alloc kfence_free __kfence_free
+               kfence_ksize kfence_object_start
+               kfence_handle_page_fault
+
+Related Tools
+-------------
+
+In userspace, a similar approach is taken by `GWP-ASan
+<http://llvm.org/docs/GwpAsan.html>`_. GWP-ASan also relies on guard pages and
+a sampling strategy to detect memory unsafety bugs at scale. KFENCE's design is
+directly influenced by GWP-ASan, and can be seen as its kernel sibling. Another
+similar but non-sampling approach, that also inspired the name "KFENCE", can be
+found in the userspace `Electric Fence Malloc Debugger
+<https://linux.die.net/man/3/efence>`_.
+
+In the kernel, several tools exist to debug memory access errors, and in
+particular KASAN can detect all bug classes that KFENCE can detect. While KASAN
+is more precise, relying on compiler instrumentation, this comes at a
+performance cost.
+
+It is worth highlighting that KASAN and KFENCE are complementary, with
+different target environments. For instance, KASAN is the better debugging-aid,
+where test cases or reproducers exists: due to the lower chance to detect the
+error, it would require more effort using KFENCE to debug. Deployments at scale
+that cannot afford to enable KASAN, however, would benefit from using KFENCE to
+discover bugs due to code paths not exercised by test cases or fuzzers.
diff --git a/Documentation/dev-tools/kunit/api/index.rst b/Documentation/dev-tools/kunit/api/index.rst
new file mode 100644
index 0000000..9b9bffe
--- /dev/null
+++ b/Documentation/dev-tools/kunit/api/index.rst
@@ -0,0 +1,16 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+=============
+API Reference
+=============
+.. toctree::
+
+	test
+
+This section documents the KUnit kernel testing API. It is divided into the
+following sections:
+
+================================= ==============================================
+:doc:`test`                       documents all of the standard testing API
+                                  excluding mocking or mocking related features.
+================================= ==============================================
diff --git a/Documentation/dev-tools/kunit/api/test.rst b/Documentation/dev-tools/kunit/api/test.rst
new file mode 100644
index 0000000..aaa97f1
--- /dev/null
+++ b/Documentation/dev-tools/kunit/api/test.rst
@@ -0,0 +1,11 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+========
+Test API
+========
+
+This file documents all of the standard testing API excluding mocking or mocking
+related features.
+
+.. kernel-doc:: include/kunit/test.h
+   :internal:
diff --git a/Documentation/dev-tools/kunit/faq.rst b/Documentation/dev-tools/kunit/faq.rst
new file mode 100644
index 0000000..bf20951
--- /dev/null
+++ b/Documentation/dev-tools/kunit/faq.rst
@@ -0,0 +1,62 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+==========================
+Frequently Asked Questions
+==========================
+
+How is this different from Autotest, kselftest, etc?
+====================================================
+KUnit is a unit testing framework. Autotest, kselftest (and some others) are
+not.
+
+A `unit test <https://martinfowler.com/bliki/UnitTest.html>`_ is supposed to
+test a single unit of code in isolation, hence the name. A unit test should be
+the finest granularity of testing and as such should allow all possible code
+paths to be tested in the code under test; this is only possible if the code
+under test is very small and does not have any external dependencies outside of
+the test's control like hardware.
+
+There are no testing frameworks currently available for the kernel that do not
+require installing the kernel on a test machine or in a VM and all require
+tests to be written in userspace and run on the kernel under test; this is true
+for Autotest, kselftest, and some others, disqualifying any of them from being
+considered unit testing frameworks.
+
+Does KUnit support running on architectures other than UML?
+===========================================================
+
+Yes, well, mostly.
+
+For the most part, the KUnit core framework (what you use to write the tests)
+can compile to any architecture; it compiles like just another part of the
+kernel and runs when the kernel boots. However, there is some infrastructure,
+like the KUnit Wrapper (``tools/testing/kunit/kunit.py``) that does not support
+other architectures.
+
+In short, this means that, yes, you can run KUnit on other architectures, but
+it might require more work than using KUnit on UML.
+
+For more information, see :ref:`kunit-on-non-uml`.
+
+What is the difference between a unit test and these other kinds of tests?
+==========================================================================
+Most existing tests for the Linux kernel would be categorized as an integration
+test, or an end-to-end test.
+
+- A unit test is supposed to test a single unit of code in isolation, hence the
+  name. A unit test should be the finest granularity of testing and as such
+  should allow all possible code paths to be tested in the code under test; this
+  is only possible if the code under test is very small and does not have any
+  external dependencies outside of the test's control like hardware.
+- An integration test tests the interaction between a minimal set of components,
+  usually just two or three. For example, someone might write an integration
+  test to test the interaction between a driver and a piece of hardware, or to
+  test the interaction between the userspace libraries the kernel provides and
+  the kernel itself; however, one of these tests would probably not test the
+  entire kernel along with hardware interactions and interactions with the
+  userspace.
+- An end-to-end test usually tests the entire system from the perspective of the
+  code under test. For example, someone might write an end-to-end test for the
+  kernel by installing a production configuration of the kernel on production
+  hardware with a production userspace and then trying to exercise some behavior
+  that depends on interactions between the hardware, the kernel, and userspace.
diff --git a/Documentation/dev-tools/kunit/index.rst b/Documentation/dev-tools/kunit/index.rst
new file mode 100644
index 0000000..26ffb46
--- /dev/null
+++ b/Documentation/dev-tools/kunit/index.rst
@@ -0,0 +1,79 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+=========================================
+KUnit - Unit Testing for the Linux Kernel
+=========================================
+
+.. toctree::
+	:maxdepth: 2
+
+	start
+	usage
+	api/index
+	faq
+
+What is KUnit?
+==============
+
+KUnit is a lightweight unit testing and mocking framework for the Linux kernel.
+These tests are able to be run locally on a developer's workstation without a VM
+or special hardware.
+
+KUnit is heavily inspired by JUnit, Python's unittest.mock, and
+Googletest/Googlemock for C++. KUnit provides facilities for defining unit test
+cases, grouping related test cases into test suites, providing common
+infrastructure for running tests, and much more.
+
+Get started now: :doc:`start`
+
+Why KUnit?
+==========
+
+A unit test is supposed to test a single unit of code in isolation, hence the
+name. A unit test should be the finest granularity of testing and as such should
+allow all possible code paths to be tested in the code under test; this is only
+possible if the code under test is very small and does not have any external
+dependencies outside of the test's control like hardware.
+
+Outside of KUnit, there are no testing frameworks currently
+available for the kernel that do not require installing the kernel on a test
+machine or in a VM and all require tests to be written in userspace running on
+the kernel; this is true for Autotest, and kselftest, disqualifying
+any of them from being considered unit testing frameworks.
+
+KUnit addresses the problem of being able to run tests without needing a virtual
+machine or actual hardware with User Mode Linux. User Mode Linux is a Linux
+architecture, like ARM or x86; however, unlike other architectures it compiles
+to a standalone program that can be run like any other program directly inside
+of a host operating system; to be clear, it does not require any virtualization
+support; it is just a regular program.
+
+KUnit is fast. Excluding build time, from invocation to completion KUnit can run
+several dozen tests in only 10 to 20 seconds; this might not sound like a big
+deal to some people, but having such fast and easy to run tests fundamentally
+changes the way you go about testing and even writing code in the first place.
+Linus himself said in his `git talk at Google
+<https://gist.github.com/lorn/1272686/revisions#diff-53c65572127855f1b003db4064a94573R874>`_:
+
+	"... a lot of people seem to think that performance is about doing the
+	same thing, just doing it faster, and that is not true. That is not what
+	performance is all about. If you can do something really fast, really
+	well, people will start using it differently."
+
+In this context Linus was talking about branching and merging,
+but this point also applies to testing. If your tests are slow, unreliable, are
+difficult to write, and require a special setup or special hardware to run,
+then you wait a lot longer to write tests, and you wait a lot longer to run
+tests; this means that tests are likely to break, unlikely to test a lot of
+things, and are unlikely to be rerun once they pass. If your tests are really
+fast, you run them all the time, every time you make a change, and every time
+someone sends you some code. Why trust that someone ran all their tests
+correctly on every change when you can just run them yourself in less time than
+it takes to read their test log?
+
+How do I use it?
+================
+
+*   :doc:`start` - for new users of KUnit
+*   :doc:`usage` - for a more detailed explanation of KUnit features
+*   :doc:`api/index` - for the list of KUnit APIs used for testing
diff --git a/Documentation/dev-tools/kunit/start.rst b/Documentation/dev-tools/kunit/start.rst
new file mode 100644
index 0000000..aeeddfa
--- /dev/null
+++ b/Documentation/dev-tools/kunit/start.rst
@@ -0,0 +1,180 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+===============
+Getting Started
+===============
+
+Installing dependencies
+=======================
+KUnit has the same dependencies as the Linux kernel. As long as you can build
+the kernel, you can run KUnit.
+
+KUnit Wrapper
+=============
+Included with KUnit is a simple Python wrapper that helps format the output to
+easily use and read KUnit output. It handles building and running the kernel, as
+well as formatting the output.
+
+The wrapper can be run with:
+
+.. code-block:: bash
+
+   ./tools/testing/kunit/kunit.py run
+
+Creating a kunitconfig
+======================
+The Python script is a thin wrapper around Kbuild as such, it needs to be
+configured with a ``kunitconfig`` file. This file essentially contains the
+regular Kernel config, with the specific test targets as well.
+
+.. code-block:: bash
+
+	git clone -b master https://kunit.googlesource.com/kunitconfig $PATH_TO_KUNITCONFIG_REPO
+	cd $PATH_TO_LINUX_REPO
+	ln -s $PATH_TO_KUNIT_CONFIG_REPO/kunitconfig kunitconfig
+
+You may want to add kunitconfig to your local gitignore.
+
+Verifying KUnit Works
+---------------------
+
+To make sure that everything is set up correctly, simply invoke the Python
+wrapper from your kernel repo:
+
+.. code-block:: bash
+
+	./tools/testing/kunit/kunit.py run
+
+.. note::
+   You may want to run ``make mrproper`` first.
+
+If everything worked correctly, you should see the following:
+
+.. code-block:: bash
+
+	Generating .config ...
+	Building KUnit Kernel ...
+	Starting KUnit Kernel ...
+
+followed by a list of tests that are run. All of them should be passing.
+
+.. note::
+   Because it is building a lot of sources for the first time, the ``Building
+   kunit kernel`` step may take a while.
+
+Writing your first test
+=======================
+
+In your kernel repo let's add some code that we can test. Create a file
+``drivers/misc/example.h`` with the contents:
+
+.. code-block:: c
+
+	int misc_example_add(int left, int right);
+
+create a file ``drivers/misc/example.c``:
+
+.. code-block:: c
+
+	#include <linux/errno.h>
+
+	#include "example.h"
+
+	int misc_example_add(int left, int right)
+	{
+		return left + right;
+	}
+
+Now add the following lines to ``drivers/misc/Kconfig``:
+
+.. code-block:: kconfig
+
+	config MISC_EXAMPLE
+		bool "My example"
+
+and the following lines to ``drivers/misc/Makefile``:
+
+.. code-block:: make
+
+	obj-$(CONFIG_MISC_EXAMPLE) += example.o
+
+Now we are ready to write the test. The test will be in
+``drivers/misc/example-test.c``:
+
+.. code-block:: c
+
+	#include <kunit/test.h>
+	#include "example.h"
+
+	/* Define the test cases. */
+
+	static void misc_example_add_test_basic(struct kunit *test)
+	{
+		KUNIT_EXPECT_EQ(test, 1, misc_example_add(1, 0));
+		KUNIT_EXPECT_EQ(test, 2, misc_example_add(1, 1));
+		KUNIT_EXPECT_EQ(test, 0, misc_example_add(-1, 1));
+		KUNIT_EXPECT_EQ(test, INT_MAX, misc_example_add(0, INT_MAX));
+		KUNIT_EXPECT_EQ(test, -1, misc_example_add(INT_MAX, INT_MIN));
+	}
+
+	static void misc_example_test_failure(struct kunit *test)
+	{
+		KUNIT_FAIL(test, "This test never passes.");
+	}
+
+	static struct kunit_case misc_example_test_cases[] = {
+		KUNIT_CASE(misc_example_add_test_basic),
+		KUNIT_CASE(misc_example_test_failure),
+		{}
+	};
+
+	static struct kunit_suite misc_example_test_suite = {
+		.name = "misc-example",
+		.test_cases = misc_example_test_cases,
+	};
+	kunit_test_suite(misc_example_test_suite);
+
+Now add the following to ``drivers/misc/Kconfig``:
+
+.. code-block:: kconfig
+
+	config MISC_EXAMPLE_TEST
+		bool "Test for my example"
+		depends on MISC_EXAMPLE && KUNIT
+
+and the following to ``drivers/misc/Makefile``:
+
+.. code-block:: make
+
+	obj-$(CONFIG_MISC_EXAMPLE_TEST) += example-test.o
+
+Now add it to your ``kunitconfig``:
+
+.. code-block:: none
+
+	CONFIG_MISC_EXAMPLE=y
+	CONFIG_MISC_EXAMPLE_TEST=y
+
+Now you can run the test:
+
+.. code-block:: bash
+
+	./tools/testing/kunit/kunit.py
+
+You should see the following failure:
+
+.. code-block:: none
+
+	...
+	[16:08:57] [PASSED] misc-example:misc_example_add_test_basic
+	[16:08:57] [FAILED] misc-example:misc_example_test_failure
+	[16:08:57] EXPECTATION FAILED at drivers/misc/example-test.c:17
+	[16:08:57] 	This test never passes.
+	...
+
+Congrats! You just wrote your first KUnit test!
+
+Next Steps
+==========
+*   Check out the :doc:`usage` page for a more
+    in-depth explanation of KUnit.
diff --git a/Documentation/dev-tools/kunit/usage.rst b/Documentation/dev-tools/kunit/usage.rst
new file mode 100644
index 0000000..c6e6963
--- /dev/null
+++ b/Documentation/dev-tools/kunit/usage.rst
@@ -0,0 +1,576 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+===========
+Using KUnit
+===========
+
+The purpose of this document is to describe what KUnit is, how it works, how it
+is intended to be used, and all the concepts and terminology that are needed to
+understand it. This guide assumes a working knowledge of the Linux kernel and
+some basic knowledge of testing.
+
+For a high level introduction to KUnit, including setting up KUnit for your
+project, see :doc:`start`.
+
+Organization of this document
+=============================
+
+This document is organized into two main sections: Testing and Isolating
+Behavior. The first covers what a unit test is and how to use KUnit to write
+them. The second covers how to use KUnit to isolate code and make it possible
+to unit test code that was otherwise un-unit-testable.
+
+Testing
+=======
+
+What is KUnit?
+--------------
+
+"K" is short for "kernel" so "KUnit" is the "(Linux) Kernel Unit Testing
+Framework." KUnit is intended first and foremost for writing unit tests; it is
+general enough that it can be used to write integration tests; however, this is
+a secondary goal. KUnit has no ambition of being the only testing framework for
+the kernel; for example, it does not intend to be an end-to-end testing
+framework.
+
+What is Unit Testing?
+---------------------
+
+A `unit test <https://martinfowler.com/bliki/UnitTest.html>`_ is a test that
+tests code at the smallest possible scope, a *unit* of code. In the C
+programming language that's a function.
+
+Unit tests should be written for all the publicly exposed functions in a
+compilation unit; so that is all the functions that are exported in either a
+*class* (defined below) or all functions which are **not** static.
+
+Writing Tests
+-------------
+
+Test Cases
+~~~~~~~~~~
+
+The fundamental unit in KUnit is the test case. A test case is a function with
+the signature ``void (*)(struct kunit *test)``. It calls a function to be tested
+and then sets *expectations* for what should happen. For example:
+
+.. code-block:: c
+
+	void example_test_success(struct kunit *test)
+	{
+	}
+
+	void example_test_failure(struct kunit *test)
+	{
+		KUNIT_FAIL(test, "This test never passes.");
+	}
+
+In the above example ``example_test_success`` always passes because it does
+nothing; no expectations are set, so all expectations pass. On the other hand
+``example_test_failure`` always fails because it calls ``KUNIT_FAIL``, which is
+a special expectation that logs a message and causes the test case to fail.
+
+Expectations
+~~~~~~~~~~~~
+An *expectation* is a way to specify that you expect a piece of code to do
+something in a test. An expectation is called like a function. A test is made
+by setting expectations about the behavior of a piece of code under test; when
+one or more of the expectations fail, the test case fails and information about
+the failure is logged. For example:
+
+.. code-block:: c
+
+	void add_test_basic(struct kunit *test)
+	{
+		KUNIT_EXPECT_EQ(test, 1, add(1, 0));
+		KUNIT_EXPECT_EQ(test, 2, add(1, 1));
+	}
+
+In the above example ``add_test_basic`` makes a number of assertions about the
+behavior of a function called ``add``; the first parameter is always of type
+``struct kunit *``, which contains information about the current test context;
+the second parameter, in this case, is what the value is expected to be; the
+last value is what the value actually is. If ``add`` passes all of these
+expectations, the test case, ``add_test_basic`` will pass; if any one of these
+expectations fail, the test case will fail.
+
+It is important to understand that a test case *fails* when any expectation is
+violated; however, the test will continue running, potentially trying other
+expectations until the test case ends or is otherwise terminated. This is as
+opposed to *assertions* which are discussed later.
+
+To learn about more expectations supported by KUnit, see :doc:`api/test`.
+
+.. note::
+   A single test case should be pretty short, pretty easy to understand,
+   focused on a single behavior.
+
+For example, if we wanted to properly test the add function above, we would
+create additional tests cases which would each test a different property that an
+add function should have like this:
+
+.. code-block:: c
+
+	void add_test_basic(struct kunit *test)
+	{
+		KUNIT_EXPECT_EQ(test, 1, add(1, 0));
+		KUNIT_EXPECT_EQ(test, 2, add(1, 1));
+	}
+
+	void add_test_negative(struct kunit *test)
+	{
+		KUNIT_EXPECT_EQ(test, 0, add(-1, 1));
+	}
+
+	void add_test_max(struct kunit *test)
+	{
+		KUNIT_EXPECT_EQ(test, INT_MAX, add(0, INT_MAX));
+		KUNIT_EXPECT_EQ(test, -1, add(INT_MAX, INT_MIN));
+	}
+
+	void add_test_overflow(struct kunit *test)
+	{
+		KUNIT_EXPECT_EQ(test, INT_MIN, add(INT_MAX, 1));
+	}
+
+Notice how it is immediately obvious what all the properties that we are testing
+for are.
+
+Assertions
+~~~~~~~~~~
+
+KUnit also has the concept of an *assertion*. An assertion is just like an
+expectation except the assertion immediately terminates the test case if it is
+not satisfied.
+
+For example:
+
+.. code-block:: c
+
+	static void mock_test_do_expect_default_return(struct kunit *test)
+	{
+		struct mock_test_context *ctx = test->priv;
+		struct mock *mock = ctx->mock;
+		int param0 = 5, param1 = -5;
+		const char *two_param_types[] = {"int", "int"};
+		const void *two_params[] = {&param0, &param1};
+		const void *ret;
+
+		ret = mock->do_expect(mock,
+				      "test_printk", test_printk,
+				      two_param_types, two_params,
+				      ARRAY_SIZE(two_params));
+		KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ret);
+		KUNIT_EXPECT_EQ(test, -4, *((int *) ret));
+	}
+
+In this example, the method under test should return a pointer to a value, so
+if the pointer returned by the method is null or an errno, we don't want to
+bother continuing the test since the following expectation could crash the test
+case. `ASSERT_NOT_ERR_OR_NULL(...)` allows us to bail out of the test case if
+the appropriate conditions have not been satisfied to complete the test.
+
+Test Suites
+~~~~~~~~~~~
+
+Now obviously one unit test isn't very helpful; the power comes from having
+many test cases covering all of your behaviors. Consequently it is common to
+have many *similar* tests; in order to reduce duplication in these closely
+related tests most unit testing frameworks provide the concept of a *test
+suite*, in KUnit we call it a *test suite*; all it is is just a collection of
+test cases for a unit of code with a set up function that gets invoked before
+every test cases and then a tear down function that gets invoked after every
+test case completes.
+
+Example:
+
+.. code-block:: c
+
+	static struct kunit_case example_test_cases[] = {
+		KUNIT_CASE(example_test_foo),
+		KUNIT_CASE(example_test_bar),
+		KUNIT_CASE(example_test_baz),
+		{}
+	};
+
+	static struct kunit_suite example_test_suite = {
+		.name = "example",
+		.init = example_test_init,
+		.exit = example_test_exit,
+		.test_cases = example_test_cases,
+	};
+	kunit_test_suite(example_test_suite);
+
+In the above example the test suite, ``example_test_suite``, would run the test
+cases ``example_test_foo``, ``example_test_bar``, and ``example_test_baz``,
+each would have ``example_test_init`` called immediately before it and would
+have ``example_test_exit`` called immediately after it.
+``kunit_test_suite(example_test_suite)`` registers the test suite with the
+KUnit test framework.
+
+.. note::
+   A test case will only be run if it is associated with a test suite.
+
+For a more information on these types of things see the :doc:`api/test`.
+
+Isolating Behavior
+==================
+
+The most important aspect of unit testing that other forms of testing do not
+provide is the ability to limit the amount of code under test to a single unit.
+In practice, this is only possible by being able to control what code gets run
+when the unit under test calls a function and this is usually accomplished
+through some sort of indirection where a function is exposed as part of an API
+such that the definition of that function can be changed without affecting the
+rest of the code base. In the kernel this primarily comes from two constructs,
+classes, structs that contain function pointers that are provided by the
+implementer, and architecture specific functions which have definitions selected
+at compile time.
+
+Classes
+-------
+
+Classes are not a construct that is built into the C programming language;
+however, it is an easily derived concept. Accordingly, pretty much every project
+that does not use a standardized object oriented library (like GNOME's GObject)
+has their own slightly different way of doing object oriented programming; the
+Linux kernel is no exception.
+
+The central concept in kernel object oriented programming is the class. In the
+kernel, a *class* is a struct that contains function pointers. This creates a
+contract between *implementers* and *users* since it forces them to use the
+same function signature without having to call the function directly. In order
+for it to truly be a class, the function pointers must specify that a pointer
+to the class, known as a *class handle*, be one of the parameters; this makes
+it possible for the member functions (also known as *methods*) to have access
+to member variables (more commonly known as *fields*) allowing the same
+implementation to have multiple *instances*.
+
+Typically a class can be *overridden* by *child classes* by embedding the
+*parent class* in the child class. Then when a method provided by the child
+class is called, the child implementation knows that the pointer passed to it is
+of a parent contained within the child; because of this, the child can compute
+the pointer to itself because the pointer to the parent is always a fixed offset
+from the pointer to the child; this offset is the offset of the parent contained
+in the child struct. For example:
+
+.. code-block:: c
+
+	struct shape {
+		int (*area)(struct shape *this);
+	};
+
+	struct rectangle {
+		struct shape parent;
+		int length;
+		int width;
+	};
+
+	int rectangle_area(struct shape *this)
+	{
+		struct rectangle *self = container_of(this, struct shape, parent);
+
+		return self->length * self->width;
+	};
+
+	void rectangle_new(struct rectangle *self, int length, int width)
+	{
+		self->parent.area = rectangle_area;
+		self->length = length;
+		self->width = width;
+	}
+
+In this example (as in most kernel code) the operation of computing the pointer
+to the child from the pointer to the parent is done by ``container_of``.
+
+Faking Classes
+~~~~~~~~~~~~~~
+
+In order to unit test a piece of code that calls a method in a class, the
+behavior of the method must be controllable, otherwise the test ceases to be a
+unit test and becomes an integration test.
+
+A fake just provides an implementation of a piece of code that is different than
+what runs in a production instance, but behaves identically from the standpoint
+of the callers; this is usually done to replace a dependency that is hard to
+deal with, or is slow.
+
+A good example for this might be implementing a fake EEPROM that just stores the
+"contents" in an internal buffer. For example, let's assume we have a class that
+represents an EEPROM:
+
+.. code-block:: c
+
+	struct eeprom {
+		ssize_t (*read)(struct eeprom *this, size_t offset, char *buffer, size_t count);
+		ssize_t (*write)(struct eeprom *this, size_t offset, const char *buffer, size_t count);
+	};
+
+And we want to test some code that buffers writes to the EEPROM:
+
+.. code-block:: c
+
+	struct eeprom_buffer {
+		ssize_t (*write)(struct eeprom_buffer *this, const char *buffer, size_t count);
+		int flush(struct eeprom_buffer *this);
+		size_t flush_count; /* Flushes when buffer exceeds flush_count. */
+	};
+
+	struct eeprom_buffer *new_eeprom_buffer(struct eeprom *eeprom);
+	void destroy_eeprom_buffer(struct eeprom *eeprom);
+
+We can easily test this code by *faking out* the underlying EEPROM:
+
+.. code-block:: c
+
+	struct fake_eeprom {
+		struct eeprom parent;
+		char contents[FAKE_EEPROM_CONTENTS_SIZE];
+	};
+
+	ssize_t fake_eeprom_read(struct eeprom *parent, size_t offset, char *buffer, size_t count)
+	{
+		struct fake_eeprom *this = container_of(parent, struct fake_eeprom, parent);
+
+		count = min(count, FAKE_EEPROM_CONTENTS_SIZE - offset);
+		memcpy(buffer, this->contents + offset, count);
+
+		return count;
+	}
+
+	ssize_t fake_eeprom_write(struct eeprom *this, size_t offset, const char *buffer, size_t count)
+	{
+		struct fake_eeprom *this = container_of(parent, struct fake_eeprom, parent);
+
+		count = min(count, FAKE_EEPROM_CONTENTS_SIZE - offset);
+		memcpy(this->contents + offset, buffer, count);
+
+		return count;
+	}
+
+	void fake_eeprom_init(struct fake_eeprom *this)
+	{
+		this->parent.read = fake_eeprom_read;
+		this->parent.write = fake_eeprom_write;
+		memset(this->contents, 0, FAKE_EEPROM_CONTENTS_SIZE);
+	}
+
+We can now use it to test ``struct eeprom_buffer``:
+
+.. code-block:: c
+
+	struct eeprom_buffer_test {
+		struct fake_eeprom *fake_eeprom;
+		struct eeprom_buffer *eeprom_buffer;
+	};
+
+	static void eeprom_buffer_test_does_not_write_until_flush(struct kunit *test)
+	{
+		struct eeprom_buffer_test *ctx = test->priv;
+		struct eeprom_buffer *eeprom_buffer = ctx->eeprom_buffer;
+		struct fake_eeprom *fake_eeprom = ctx->fake_eeprom;
+		char buffer[] = {0xff};
+
+		eeprom_buffer->flush_count = SIZE_MAX;
+
+		eeprom_buffer->write(eeprom_buffer, buffer, 1);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[0], 0);
+
+		eeprom_buffer->write(eeprom_buffer, buffer, 1);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[1], 0);
+
+		eeprom_buffer->flush(eeprom_buffer);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[0], 0xff);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[1], 0xff);
+	}
+
+	static void eeprom_buffer_test_flushes_after_flush_count_met(struct kunit *test)
+	{
+		struct eeprom_buffer_test *ctx = test->priv;
+		struct eeprom_buffer *eeprom_buffer = ctx->eeprom_buffer;
+		struct fake_eeprom *fake_eeprom = ctx->fake_eeprom;
+		char buffer[] = {0xff};
+
+		eeprom_buffer->flush_count = 2;
+
+		eeprom_buffer->write(eeprom_buffer, buffer, 1);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[0], 0);
+
+		eeprom_buffer->write(eeprom_buffer, buffer, 1);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[0], 0xff);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[1], 0xff);
+	}
+
+	static void eeprom_buffer_test_flushes_increments_of_flush_count(struct kunit *test)
+	{
+		struct eeprom_buffer_test *ctx = test->priv;
+		struct eeprom_buffer *eeprom_buffer = ctx->eeprom_buffer;
+		struct fake_eeprom *fake_eeprom = ctx->fake_eeprom;
+		char buffer[] = {0xff, 0xff};
+
+		eeprom_buffer->flush_count = 2;
+
+		eeprom_buffer->write(eeprom_buffer, buffer, 1);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[0], 0);
+
+		eeprom_buffer->write(eeprom_buffer, buffer, 2);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[0], 0xff);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[1], 0xff);
+		/* Should have only flushed the first two bytes. */
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[2], 0);
+	}
+
+	static int eeprom_buffer_test_init(struct kunit *test)
+	{
+		struct eeprom_buffer_test *ctx;
+
+		ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
+		KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
+
+		ctx->fake_eeprom = kunit_kzalloc(test, sizeof(*ctx->fake_eeprom), GFP_KERNEL);
+		KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->fake_eeprom);
+		fake_eeprom_init(ctx->fake_eeprom);
+
+		ctx->eeprom_buffer = new_eeprom_buffer(&ctx->fake_eeprom->parent);
+		KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->eeprom_buffer);
+
+		test->priv = ctx;
+
+		return 0;
+	}
+
+	static void eeprom_buffer_test_exit(struct kunit *test)
+	{
+		struct eeprom_buffer_test *ctx = test->priv;
+
+		destroy_eeprom_buffer(ctx->eeprom_buffer);
+	}
+
+.. _kunit-on-non-uml:
+
+KUnit on non-UML architectures
+==============================
+
+By default KUnit uses UML as a way to provide dependencies for code under test.
+Under most circumstances KUnit's usage of UML should be treated as an
+implementation detail of how KUnit works under the hood. Nevertheless, there
+are instances where being able to run architecture specific code, or test
+against real hardware is desirable. For these reasons KUnit supports running on
+other architectures.
+
+Running existing KUnit tests on non-UML architectures
+-----------------------------------------------------
+
+There are some special considerations when running existing KUnit tests on
+non-UML architectures:
+
+*   Hardware may not be deterministic, so a test that always passes or fails
+    when run under UML may not always do so on real hardware.
+*   Hardware and VM environments may not be hermetic. KUnit tries its best to
+    provide a hermetic environment to run tests; however, it cannot manage state
+    that it doesn't know about outside of the kernel. Consequently, tests that
+    may be hermetic on UML may not be hermetic on other architectures.
+*   Some features and tooling may not be supported outside of UML.
+*   Hardware and VMs are slower than UML.
+
+None of these are reasons not to run your KUnit tests on real hardware; they are
+only things to be aware of when doing so.
+
+The biggest impediment will likely be that certain KUnit features and
+infrastructure may not support your target environment. For example, at this
+time the KUnit Wrapper (``tools/testing/kunit/kunit.py``) does not work outside
+of UML. Unfortunately, there is no way around this. Using UML (or even just a
+particular architecture) allows us to make a lot of assumptions that make it
+possible to do things which might otherwise be impossible.
+
+Nevertheless, all core KUnit framework features are fully supported on all
+architectures, and using them is straightforward: all you need to do is to take
+your kunitconfig, your Kconfig options for the tests you would like to run, and
+merge them into whatever config your are using for your platform. That's it!
+
+For example, let's say you have the following kunitconfig:
+
+.. code-block:: none
+
+	CONFIG_KUNIT=y
+	CONFIG_KUNIT_EXAMPLE_TEST=y
+
+If you wanted to run this test on an x86 VM, you might add the following config
+options to your ``.config``:
+
+.. code-block:: none
+
+	CONFIG_KUNIT=y
+	CONFIG_KUNIT_EXAMPLE_TEST=y
+	CONFIG_SERIAL_8250=y
+	CONFIG_SERIAL_8250_CONSOLE=y
+
+All these new options do is enable support for a common serial console needed
+for logging.
+
+Next, you could build a kernel with these tests as follows:
+
+
+.. code-block:: bash
+
+	make ARCH=x86 olddefconfig
+	make ARCH=x86
+
+Once you have built a kernel, you could run it on QEMU as follows:
+
+.. code-block:: bash
+
+	qemu-system-x86_64 -enable-kvm \
+			   -m 1024 \
+			   -kernel arch/x86_64/boot/bzImage \
+			   -append 'console=ttyS0' \
+			   --nographic
+
+Interspersed in the kernel logs you might see the following:
+
+.. code-block:: none
+
+	TAP version 14
+		# Subtest: example
+		1..1
+		# example_simple_test: initializing
+		ok 1 - example_simple_test
+	ok 1 - example
+
+Congratulations, you just ran a KUnit test on the x86 architecture!
+
+Writing new tests for other architectures
+-----------------------------------------
+
+The first thing you must do is ask yourself whether it is necessary to write a
+KUnit test for a specific architecture, and then whether it is necessary to
+write that test for a particular piece of hardware. In general, writing a test
+that depends on having access to a particular piece of hardware or software (not
+included in the Linux source repo) should be avoided at all costs.
+
+Even if you only ever plan on running your KUnit test on your hardware
+configuration, other people may want to run your tests and may not have access
+to your hardware. If you write your test to run on UML, then anyone can run your
+tests without knowing anything about your particular setup, and you can still
+run your tests on your hardware setup just by compiling for your architecture.
+
+.. important::
+   Always prefer tests that run on UML to tests that only run under a particular
+   architecture, and always prefer tests that run under QEMU or another easy
+   (and monitarily free) to obtain software environment to a specific piece of
+   hardware.
+
+Nevertheless, there are still valid reasons to write an architecture or hardware
+specific test: for example, you might want to test some code that really belongs
+in ``arch/some-arch/*``. Even so, try your best to write the test so that it
+does not depend on physical hardware: if some of your test cases don't need the
+hardware, only require the hardware for tests that actually need it.
+
+Now that you have narrowed down exactly what bits are hardware specific, the
+actual procedure for writing and running the tests is pretty much the same as
+writing normal KUnit tests. One special caveat is that you have to reset
+hardware state in between test cases; if this is not possible, you may only be
+able to run one test case per invocation.
+
+.. TODO(brendanhiggins@google.com): Add an actual example of an architecture
+   dependent KUnit test.
diff --git a/Documentation/device-mapper/dm-bow.txt b/Documentation/device-mapper/dm-bow.txt
new file mode 100644
index 0000000..e3fc4d2
--- /dev/null
+++ b/Documentation/device-mapper/dm-bow.txt
@@ -0,0 +1,99 @@
+dm_bow (backup on write)
+========================
+
+dm_bow is a device mapper driver that uses the free space on a device to back up
+data that is overwritten. The changes can then be committed by a simple state
+change, or rolled back by removing the dm_bow device and running a command line
+utility over the underlying device.
+
+dm_bow has three states, set by writing ‘1’ or ‘2’ to /sys/block/dm-?/bow/state.
+It is only possible to go from state 0 (initial state) to state 1, and then from
+state 1 to state 2.
+
+State 0: dm_bow collects all trims to the device and assumes that these mark
+free space on the overlying file system that can be safely used. Typically the
+mount code would create the dm_bow device, mount the file system, call the
+FITRIM ioctl on the file system then switch to state 1. These trims are not
+propagated to the underlying device.
+
+State 1: All writes to the device cause the underlying data to be backed up to
+the free (trimmed) area as needed in such a way as they can be restored.
+However, the writes, with one exception, then happen exactly as they would
+without dm_bow, so the device is always in a good final state. The exception is
+that sector 0 is used to keep a log of the latest changes, both to indicate that
+we are in this state and to allow rollback. See below for all details. If there
+isn't enough free space, writes are failed with -ENOSPC.
+
+State 2: The transition to state 2 triggers replacing the special sector 0 with
+the normal sector 0, and the freeing of all state information. dm_bow then
+becomes a pass-through driver, allowing the device to continue to be used with
+minimal performance impact.
+
+Usage
+=====
+dm-bow takes one command line parameter, the name of the underlying device.
+
+dm-bow will typically be used in the following way. dm-bow will be loaded with a
+suitable underlying device and the resultant device will be mounted. A file
+system trim will be issued via the FITRIM ioctl, then the device will be
+switched to state 1. The file system will now be used as normal. At some point,
+the changes can either be committed by switching to state 2, or rolled back by
+unmounting the file system, removing the dm-bow device and running the command
+line utility. Note that rebooting the device will be equivalent to unmounting
+and removing, but the command line utility must still be run
+
+Details of operation in state 1
+===============================
+
+dm_bow maintains a type for all sectors. A sector can be any of:
+
+SECTOR0
+SECTOR0_CURRENT
+UNCHANGED
+FREE
+CHANGED
+BACKUP
+
+SECTOR0 is the first sector on the device, and is used to hold the log of
+changes. This is the one exception.
+
+SECTOR0_CURRENT is a sector picked from the FREE sectors, and is where reads and
+writes from the true sector zero are redirected to. Note that like any backup
+sector, if the sector is written to directly, it must be moved again.
+
+UNCHANGED means that the sector has not been changed since we entered state 1.
+Thus if it is written to or trimmed, the contents must first be backed up.
+
+FREE means that the sector was trimmed in state 0 and has not yet been written
+to or used for backup. On being written to, a FREE sector is changed to CHANGED.
+
+CHANGED means that the sector has been modified, and can be further modified
+without further backup.
+
+BACKUP means that this is a free sector being used as a backup. On being written
+to, the contents must first be backed up again.
+
+All backup operations are logged to the first sector. The log sector has the
+format:
+--------------------------------------------------------
+| Magic | Count | Sequence | Log entry | Log entry | …
+--------------------------------------------------------
+
+Magic is a magic number. Count is the number of log entries. Sequence is 0
+initially. A log entry is
+
+-----------------------------------
+| Source | Dest | Size | Checksum |
+-----------------------------------
+
+When SECTOR0 is full, the log sector is backed up and another empty log sector
+created with sequence number one higher. The first entry in any log entry with
+sequence > 0 therefore must be the log of the backing up of the previous log
+sector. Note that sequence is not strictly needed, but is a useful sanity check
+and potentially limits the time spent trying to restore a corrupted snapshot.
+
+On entering state 1, dm_bow has a list of free sectors. All other sectors are
+unchanged. Sector0_current is selected from the free sectors and the contents of
+sector 0 are copied there. The sector 0 is backed up, which triggers the first
+log entry to be written.
+
diff --git a/Documentation/devicetree/bindings/interrupt-controller/interrupts.txt b/Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
index 4a3ee25..4ebfa00 100644
--- a/Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
+++ b/Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
@@ -108,3 +108,15 @@
 			sensitivity = <7>;
 		};
 	};
+
+3) Interrupt wakeup parent
+--------------------------
+
+Some interrupt controllers in a SoC, are always powered on and have a select
+interrupts routed to them, so that they can wakeup the SoC from suspend. These
+interrupt controllers do not fall into the category of a parent interrupt
+controller and can be specified by the "wakeup-parent" property and contain a
+single phandle referring to the wakeup capable interrupt controller.
+
+   Example:
+	wakeup-parent = <&pdc_intc>;
diff --git a/Documentation/devicetree/bindings/interrupt-controller/qcom,pdc.txt b/Documentation/devicetree/bindings/interrupt-controller/qcom,pdc.txt
index 8e0797c..e329f8d 100644
--- a/Documentation/devicetree/bindings/interrupt-controller/qcom,pdc.txt
+++ b/Documentation/devicetree/bindings/interrupt-controller/qcom,pdc.txt
@@ -24,6 +24,9 @@
 	Usage: required
 	Value type: <prop-encoded-array>
 	Definition: Specifies the base physical address for PDC hardware.
+		    Optionally, specify the PDC's GIC interface registers that
+		    need to be configured for wakeup capable GPIOs routed to
+		    the PDC.
 
 - interrupt-cells:
 	Usage: required
@@ -50,15 +53,23 @@
 		    The second element is the GIC hwirq number for the PDC port.
 		    The third element is the number of interrupts in sequence.
 
+- qcom,scm-spi-cfg:
+	Usage: optional
+	Value type: <bool>
+	Definition: Specifies if the SPI configuration registers have to be
+		    written from the firmware. Sometimes the PDC interface
+		    register to the GIC can only be written from the firmware.
+
 Example:
 
 	pdc: interrupt-controller@b220000 {
 		compatible = "qcom,sdm845-pdc";
-		reg = <0xb220000 0x30000>;
+		reg = <0 0x0b220000 0 0x30000>, <0 0x179900f0 0 0x60>;
 		qcom,pdc-ranges = <0 512 94>, <94 641 15>, <115 662 7>;
 		#interrupt-cells = <2>;
 		interrupt-parent = <&intc>;
 		interrupt-controller;
+		qcom,scm-spi-cfg;
 	};
 
 DT binding of a device that wants to use the GIC SPI 514 as a wakeup
diff --git a/Documentation/devicetree/bindings/misc/hisilicon-hikey-usb.txt b/Documentation/devicetree/bindings/misc/hisilicon-hikey-usb.txt
new file mode 100644
index 0000000..1e131b3
--- /dev/null
+++ b/Documentation/devicetree/bindings/misc/hisilicon-hikey-usb.txt
@@ -0,0 +1,40 @@
+Support usb hub and usb data role switch of Hisilicon HiKey960 Board.
+
+-----------------------------
+
+Required properties:
+- compatible: "hisilicon,gpio_hubv1"
+- typec-vbus-gpios: gpio to control the vbus of typeC port
+- otg-switch-gpios: gpio to switch DP & DM between the hub and typeC port
+- hub-vdd33-en-gpios: gpio to enable the power of hub
+- pinctrl-names: pin configuration state name ("default")
+- pinctrl-0: pinctrl config
+- usb-role-switch: flags the driver as a role switch provider
+- ports: two endpoints to connect the usb core role switch provider
+	 to the usb-c tcpm driver.
+
+Example
+-----
+	hisi_hikey_usb: hisi_hikey_usb {
+		compatible = "hisilicon,gpio_hubv1";
+		typec-vbus-gpios = <&gpio25 2 GPIO_ACTIVE_HIGH>;
+		otg-switch-gpios = <&gpio25 6 GPIO_ACTIVE_HIGH>;
+		hub-vdd33-en-gpios = <&gpio5 6 GPIO_ACTIVE_HIGH>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&usbhub5734_pmx_func>;
+		usb-role-switch;
+
+		port {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			hikey_usb_ep0: endpoint@0 {
+				reg = <0>;
+				remote-endpoint = <&dwc3_role_switch>;
+			};
+			hikey_usb_ep1: endpoint@1 {
+				reg = <1>;
+				remote-endpoint = <&rt1711h_ep>;
+			};
+		};
+	};
diff --git a/Documentation/devicetree/bindings/mmc/sdhci-msm.txt b/Documentation/devicetree/bindings/mmc/sdhci-msm.txt
index da4edb1..33ef90f 100644
--- a/Documentation/devicetree/bindings/mmc/sdhci-msm.txt
+++ b/Documentation/devicetree/bindings/mmc/sdhci-msm.txt
@@ -25,7 +25,15 @@
 
 - reg: Base address and length of the register in the following order:
 	- Host controller register map (required)
-	- SD Core register map (required for msm-v4 and below)
+	- SD Core register map (required for controllers earlier than msm-v5)
+	- CQE register map (Optional, CQE support is present on SDHC instance meant
+	                    for eMMC and version v4.2 and above)
+	- Inline Crypto Engine register map (optional)
+- reg-names: When CQE register map is supplied, below reg-names are required
+	- "hc" for Host controller register map
+	- "core" for SD core register map
+	- "cqhci" for CQE register map
+	- "ice" for Inline Crypto Engine register map (optional)
 - interrupts: Should contain an interrupt-specifiers for the interrupts:
 	- Host controller interrupt (required)
 - pinctrl-names: Should contain only one value - "default".
@@ -38,6 +46,7 @@
 	"xo"	- TCXO clock (optional)
 	"cal"	- reference clock for RCLK delay calibration (optional)
 	"sleep"	- sleep clock for RCLK delay calibration (optional)
+	"ice" - clock for Inline Crypto Engine (optional)
 
 Example:
 
diff --git a/Documentation/devicetree/bindings/nvmem/sprd-efuse.txt b/Documentation/devicetree/bindings/nvmem/sprd-efuse.txt
new file mode 100644
index 0000000..96b6fee
--- /dev/null
+++ b/Documentation/devicetree/bindings/nvmem/sprd-efuse.txt
@@ -0,0 +1,39 @@
+= Spreadtrum eFuse device tree bindings =
+
+Required properties:
+- compatible: Should be "sprd,ums312-efuse".
+- reg: Specify the address offset of efuse controller.
+- clock-names: Should be "enable".
+- clocks: The phandle and specifier referencing the controller's clock.
+- hwlocks: Reference to a phandle of a hwlock provider node.
+
+= Data cells =
+Are child nodes of eFuse, bindings of which as described in
+bindings/nvmem/nvmem.txt
+
+Example:
+
+	ap_efuse: efuse@32240000 {
+		compatible = "sprd,ums312-efuse";
+		reg = <0 0x32240000 0 0x10000>;
+		clock-names = "enable";
+		hwlocks = <&hwlock 8>;
+		clocks = <&aonapb_gate CLK_EFUSE_EB>;
+
+		/* Data cells */
+		thermal_calib: calib@10 {
+			reg = <0x10 0x2>;
+		};
+	};
+
+= Data consumers =
+Are device nodes which consume nvmem data cells.
+
+Example:
+
+	thermal {
+		...
+
+		nvmem-cells = <&thermal_calib>;
+		nvmem-cell-names = "calibration";
+	};
diff --git a/Documentation/devicetree/bindings/power/supply/battery.txt b/Documentation/devicetree/bindings/power/supply/battery.txt
index 5c913d4c..3049cf8 100644
--- a/Documentation/devicetree/bindings/power/supply/battery.txt
+++ b/Documentation/devicetree/bindings/power/supply/battery.txt
@@ -35,6 +35,10 @@
    for each of the battery capacity lookup table. The first temperature value
    specifies the OCV table 0, and the second temperature value specifies the
    OCV table 1, and so on.
+ - resistance-temp-table: An array providing the temperature in degree Celsius
+   and corresponding battery internal resistance percent, which is used to look
+   up the resistance percent according to current temperature to get a accurate
+   batterty internal resistance in different temperatures.
 
 Battery properties are named, where possible, for the corresponding
 elements in enum power_supply_property, defined in
@@ -61,6 +65,7 @@
 		ocv-capacity-table-0 = <4185000 100>, <4113000 95>, <4066000 90>, ...;
 		ocv-capacity-table-1 = <4200000 100>, <4185000 95>, <4113000 90>, ...;
 		ocv-capacity-table-2 = <4250000 100>, <4200000 95>, <4185000 90>, ...;
+		resistance-temp-table = <20 100>, <10 90>, <0 80>, <(-10) 60>;
 	};
 
 	charger: charger@11 {
diff --git a/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt b/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt
index 0a5705b..b6359b5 100644
--- a/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt
+++ b/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt
@@ -13,6 +13,8 @@
 - io-channel-names: Should be "bat-temp" or "charge-vol".
 - nvmem-cells: A phandle to the calibration cells provided by eFuse device.
 - nvmem-cell-names: Should be "fgu_calib".
+- sprd,calib-resistance-micro-ohms: Specify the real resistance of coulomb counter
+  chip in micro Ohms.
 - monitored-battery: Phandle of battery characteristics devicetree node.
   See Documentation/devicetree/bindings/power/supply/battery.txt
 
@@ -52,5 +54,6 @@
 			nvmem-cells = <&fgu_calib>;
 			nvmem-cell-names = "fgu_calib";
 			monitored-battery = <&bat>;
+			sprd,calib-resistance-micro-ohms = <21500>;
 		};
 	};
diff --git a/Documentation/devicetree/bindings/serial/samsung_uart.txt b/Documentation/devicetree/bindings/serial/samsung_uart.txt
index e85f37e..86211e8 100644
--- a/Documentation/devicetree/bindings/serial/samsung_uart.txt
+++ b/Documentation/devicetree/bindings/serial/samsung_uart.txt
@@ -25,6 +25,8 @@
     internal baud clock mux).
 - clocks: phandles and specifiers for all clocks specified in "clock-names"
   property, in the same order, according to clock bindings documentation [2].
+- reg-io-width: The size (in bytes) of the IO accesses that should be
+  performed on the device.
 
 [1] Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
 [2] Documentation/devicetree/bindings/clock/clock-bindings.txt
diff --git a/Documentation/devicetree/bindings/sound/hisilicon,hi3660-i2s.txt b/Documentation/devicetree/bindings/sound/hisilicon,hi3660-i2s.txt
new file mode 100644
index 0000000..654c234
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/hisilicon,hi3660-i2s.txt
@@ -0,0 +1,49 @@
+* Hisilicon 6210 i2s controller
+
+Required properties:
+
+- compatible: should be one of the following:
+   - "hisilicon,hi3660-i2s-1.0"
+- reg: physical base address of the i2s controller unit and length of
+   memory mapped region.
+- interrupts: should contain the i2s interrupt.
+- clocks: a list of phandle + clock-specifier pairs, one for each entry
+  in clock-names.
+- clock-names: should contain following:
+   - "dacodec"
+   - "i2s-base"
+- dmas: DMA specifiers for tx dma. See the DMA client binding,
+  Documentation/devicetree/bindings/dma/dma.txt
+- dma-names: should be "tx" and "rx"
+- hisilicon,sysctrl-syscon: phandle to sysctrl syscon
+- #sound-dai-cells: Should be set to 1 (for multi-dai)
+
+Example for the hi3660 i2s controller:
+
+	i2s2: hisi_i2s {
+		compatible = "hisilicon,hi3660-i2s-1.0";
+		reg = <0x0 0xe804f800 0x0 0x400>,
+			  <0x0 0xe804e000 0x0 0x400>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&i2s2_pmx_func &i2s2_cfg_func>;
+		dmas = <&asp_dmac 18 &asp_dmac 19>;
+		dma-names = "rx", "tx";
+		#sound-dai-cells = <0>;
+	};
+
+	sound {
+		compatible = "simple-audio-card";
+		simple-audio-card,name = "hikey-hdmi";
+		simple-audio-card,format = "i2s";
+
+		simple-audio-card,bitclock-master = <&sound_master>;
+		simple-audio-card,frame-master = <&sound_master>;
+
+		sound_master: simple-audio-card,cpu {
+			sound-dai = <&i2s2>;
+		};
+
+		simple-audio-card,codec {
+			sound-dai = <&adv7533>;
+		};
+	};
diff --git a/Documentation/devicetree/bindings/thermal/sprd-thermal.yaml b/Documentation/devicetree/bindings/thermal/sprd-thermal.yaml
new file mode 100644
index 0000000..3bfe055
--- /dev/null
+++ b/Documentation/devicetree/bindings/thermal/sprd-thermal.yaml
@@ -0,0 +1,108 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/thermal/sprd-thermal.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Spreadtrum thermal sensor controller bindings
+
+maintainers:
+  - Orson Zhai <orsonzhai@gmail.com>
+  - Baolin Wang <baolin.wang7@gmail.com>
+  - Chunyan Zhang <zhang.lyra@gmail.com>
+
+properties:
+  compatible:
+    const: sprd,ums512-thermal
+
+  reg:
+    maxItems: 1
+
+  clocks:
+    maxItems: 1
+
+  clock-names:
+    items:
+      - const: enable
+
+  nvmem-cells:
+    maxItems: 2
+    description:
+      Reference to nvmem nodes for the calibration data.
+
+  nvmem-cell-names:
+    maxItems: 2
+    items:
+      - const: thm_sign_cal
+      - const: thm_ratio_cal
+
+  "#thermal-sensor-cells":
+    const: 1
+
+  "#address-cells":
+    const: 1
+
+  "#size-cells":
+    const: 0
+
+patternProperties:
+  "^([a-z]*-)?sensor(-section)?@[0-9]+$":
+    type: object
+    description:
+      Represent one thermal sensor.
+
+    properties:
+      reg:
+        description: Specify the sensor id.
+        maxItems: 1
+
+      nvmem-cells:
+        maxItems: 1
+        description:
+          Reference to an nvmem node for the calibration data.
+
+      nvmem-cell-names:
+        const: sen_delta_cal
+
+    required:
+      - reg
+      - nvmem-cells
+      - nvmem-cell-names
+
+required:
+  - compatible
+  - reg
+  - clocks
+  - clock-names
+  - nvmem-cells
+  - nvmem-cell-names
+  - "#thermal-sensor-cells"
+  - "#address-cells"
+  - "#size-cells"
+
+examples:
+  - |
+        ap_thm0: thermal@32200000 {
+                compatible = "sprd,ums512-thermal";
+                reg = <0 0x32200000 0 0x10000>;
+                clock-names = "enable";
+                clocks = <&aonapb_gate 32>;
+                #thermal-sensor-cells = <1>;
+                nvmem-cells = <&thm0_sign>, <&thm0_ratio>;
+                nvmem-cell-names = "thm_sign_cal", "thm_ratio_cal";
+                #address-cells = <1>;
+                #size-cells = <0>;
+
+                prometheus-sensor@0 {
+                        reg = <0>;
+                        nvmem-cells = <&thm0_sen0>;
+                        nvmem-cell-names = "sen_delta_cal";
+                };
+
+                ank-sensor@1 {
+                        reg = <1>;
+                        nvmem-cells = <&thm0_sen1>;
+                        nvmem-cell-names = "sen_delta_cal";
+                };
+        };
+...
diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt
index c977a3b..9946ff9 100644
--- a/Documentation/devicetree/bindings/usb/dwc3.txt
+++ b/Documentation/devicetree/bindings/usb/dwc3.txt
@@ -7,7 +7,8 @@
  - compatible: must be "snps,dwc3"
  - reg : Address and length of the register set for the device
  - interrupts: Interrupts used by the dwc3 controller.
- - clock-names: should contain "ref", "bus_early", "suspend"
+ - clock-names: list of clock names. Ideally should be "ref",
+                "bus_early", "suspend" but may be less or more.
  - clocks: list of phandle and clock specifier pairs corresponding to
            entries in the clock-names property.
 
@@ -36,7 +37,7 @@
  - phys: from the *Generic PHY* bindings
  - phy-names: from the *Generic PHY* bindings; supported names are "usb2-phy"
 	or "usb3-phy".
- - resets: a single pair of phandle and reset specifier
+ - resets: set of phandle and reset specifier pairs
  - snps,usb2-lpm-disable: indicate if we don't want to enable USB2 HW LPM
  - snps,usb3_lpm_capable: determines if platform is USB3 LPM capable
  - snps,dis-start-transfer-quirk: when set, disable isoc START TRANSFER command
diff --git a/Documentation/devicetree/bindings/usb/generic.txt b/Documentation/devicetree/bindings/usb/generic.txt
index cf5a1ad..dd733fa 100644
--- a/Documentation/devicetree/bindings/usb/generic.txt
+++ b/Documentation/devicetree/bindings/usb/generic.txt
@@ -34,6 +34,12 @@
 			the USB data role (USB host or USB device) for a given
 			USB connector, such as Type-C, Type-B(micro).
 			see connector/usb-connector.txt.
+ - role-switch-default-mode: indicating if usb-role-switch is enabled, the
+			device default operation mode of controller while usb
+			role is USB_ROLE_NONE. Valid arguments are "host" and
+			"peripheral". Defaults to "peripheral" if not
+			specified.
+
 
 This is an attribute to a USB controller such as:
 
diff --git a/Documentation/devicetree/bindings/usb/mediatek,musb.txt b/Documentation/devicetree/bindings/usb/mediatek,musb.txt
new file mode 100644
index 0000000..2b8a87c
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/mediatek,musb.txt
@@ -0,0 +1,57 @@
+MediaTek musb DRD/OTG controller
+-------------------------------------------
+
+Required properties:
+ - compatible      : should be one of:
+                     "mediatek,mt2701-musb"
+                     ...
+                     followed by "mediatek,mtk-musb"
+ - reg             : specifies physical base address and size of
+                     the registers
+ - interrupts      : interrupt used by musb controller
+ - interrupt-names : must be "mc"
+ - phys            : PHY specifier for the OTG phy
+ - dr_mode         : should be one of "host", "peripheral" or "otg",
+                     refer to usb/generic.txt
+ - clocks          : a list of phandle + clock-specifier pairs, one for
+                     each entry in clock-names
+ - clock-names     : must contain "main", "mcu", "univpll"
+                     for clocks of controller
+
+Optional properties:
+ - power-domains   : a phandle to USB power domain node to control USB's
+                     MTCMOS
+
+Required child nodes:
+ usb connector node as defined in bindings/connector/usb-connector.txt
+Optional properties:
+ - id-gpios        : input GPIO for USB ID pin.
+ - vbus-gpios      : input GPIO for USB VBUS pin.
+ - vbus-supply     : reference to the VBUS regulator, needed when supports
+                     dual-role mode
+ - usb-role-switch : use USB Role Switch to support dual-role switch, see
+                     usb/generic.txt.
+
+Example:
+
+usb2: usb@11200000 {
+	compatible = "mediatek,mt2701-musb",
+		     "mediatek,mtk-musb";
+	reg = <0 0x11200000 0 0x1000>;
+	interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_LOW>;
+	interrupt-names = "mc";
+	phys = <&u2port2 PHY_TYPE_USB2>;
+	dr_mode = "otg";
+	clocks = <&pericfg CLK_PERI_USB0>,
+		 <&pericfg CLK_PERI_USB0_MCU>,
+		 <&pericfg CLK_PERI_USB_SLV>;
+	clock-names = "main","mcu","univpll";
+	power-domains = <&scpsys MT2701_POWER_DOMAIN_IFR_MSC>;
+	usb-role-switch;
+	connector{
+		compatible = "gpio-usb-b-connector", "usb-b-connector";
+		type = "micro";
+		id-gpios = <&pio 44 GPIO_ACTIVE_HIGH>;
+		vbus-supply = <&usb_vbus>;
+	};
+};
diff --git a/Documentation/driver-api/device_link.rst b/Documentation/driver-api/device_link.rst
index 1b5020e..bc2d89a 100644
--- a/Documentation/driver-api/device_link.rst
+++ b/Documentation/driver-api/device_link.rst
@@ -281,7 +281,8 @@
   :c:func:`driver_bound()`.)
 
 * Before a consumer device is probed, presence of supplier drivers is
-  verified by checking that links to suppliers are in ``DL_STATE_AVAILABLE``
+  verified by checking the consumer device is not in the wait_for_suppliers
+  list and by checking that links to suppliers are in ``DL_STATE_AVAILABLE``
   state.  The state of the links is updated to ``DL_STATE_CONSUMER_PROBE``.
   (Call to :c:func:`device_links_check_suppliers()` from
   :c:func:`really_probe()`.)
diff --git a/Documentation/driver-api/driver-model/driver.rst b/Documentation/driver-api/driver-model/driver.rst
index 11d2815..baa6a85c 100644
--- a/Documentation/driver-api/driver-model/driver.rst
+++ b/Documentation/driver-api/driver-model/driver.rst
@@ -169,6 +169,49 @@
 the driver did not bind to this device, in which case it should have
 released all resources it allocated::
 
+	void (*sync_state)(struct device *dev);
+
+sync_state is called only once for a device. It's called when all the consumer
+devices of the device have successfully probed. The list of consumers of the
+device is obtained by looking at the device links connecting that device to its
+consumer devices.
+
+The first attempt to call sync_state() is made during late_initcall_sync() to
+give firmware and drivers time to link devices to each other. During the first
+attempt at calling sync_state(), if all the consumers of the device at that
+point in time have already probed successfully, sync_state() is called right
+away. If there are no consumers of the device during the first attempt, that
+too is considered as "all consumers of the device have probed" and sync_state()
+is called right away.
+
+If during the first attempt at calling sync_state() for a device, there are
+still consumers that haven't probed successfully, the sync_state() call is
+postponed and reattempted in the future only when one or more consumers of the
+device probe successfully. If during the reattempt, the driver core finds that
+there are one or more consumers of the device that haven't probed yet, then
+sync_state() call is postponed again.
+
+A typical use case for sync_state() is to have the kernel cleanly take over
+management of devices from the bootloader. For example, if a device is left on
+and at a particular hardware configuration by the bootloader, the device's
+driver might need to keep the device in the boot configuration until all the
+consumers of the device have probed. Once all the consumers of the device have
+probed, the device's driver can synchronize the hardware state of the device to
+match the aggregated software state requested by all the consumers. Hence the
+name sync_state().
+
+While obvious examples of resources that can benefit from sync_state() include
+resources such as regulator, sync_state() can also be useful for complex
+resources like IOMMUs. For example, IOMMUs with multiple consumers (devices
+whose addresses are remapped by the IOMMU) might need to keep their mappings
+fixed at (or additive to) the boot configuration until all its consumers have
+probed.
+
+While the typical use case for sync_state() is to have the kernel cleanly take
+over management of devices from the bootloader, the usage of sync_state() is
+not restricted to that. Use it whenever it makes sense to take an action after
+all the consumers of a device have probed.
+
 	int 	(*remove)	(struct device *dev);
 
 remove is called to unbind a driver from a device. This may be
diff --git a/Documentation/filesystems/ext4/directory.rst b/Documentation/filesystems/ext4/directory.rst
index 073940c..55f618b 100644
--- a/Documentation/filesystems/ext4/directory.rst
+++ b/Documentation/filesystems/ext4/directory.rst
@@ -121,6 +121,31 @@
    * - 0x7
      - Symbolic link.
 
+To support directories that are both encrypted and casefolded directories, we
+must also include hash information in the directory entry. We append
+``ext4_extended_dir_entry_2`` to ``ext4_dir_entry_2`` except for the entries
+for dot and dotdot, which are kept the same. The structure follows immediately
+after ``name`` and is included in the size listed by ``rec_len`` If a directory
+entry uses this extension, it may be up to 271 bytes.
+
+.. list-table::
+   :widths: 8 8 24 40
+   :header-rows: 1
+
+   * - Offset
+     - Size
+     - Name
+     - Description
+   * - 0x0
+     - \_\_le32
+     - hash
+     - The hash of the directory name
+   * - 0x4
+     - \_\_le32
+     - minor\_hash
+     - The minor hash of the directory name
+
+
 In order to add checksums to these classic directory blocks, a phony
 ``struct ext4_dir_entry`` is placed at the end of each leaf block to
 hold the checksum. The directory entry is 12 bytes long. The inode
@@ -322,6 +347,8 @@
      - Half MD4, unsigned.
    * - 0x5
      - Tea, unsigned.
+   * - 0x6
+     - Siphash.
 
 Interior nodes of an htree are recorded as ``struct dx_node``, which is
 also the full length of a data block:
diff --git a/Documentation/filesystems/f2fs.txt b/Documentation/filesystems/f2fs.txt
index 7e19913..998a590 100644
--- a/Documentation/filesystems/f2fs.txt
+++ b/Documentation/filesystems/f2fs.txt
@@ -217,8 +217,12 @@
                        pass, but the performance will regress. "nobarrier" is
                        based on "posix", but doesn't issue flush command for
                        non-atomic files likewise "nobarrier" mount option.
-test_dummy_encryption  Enable dummy encryption, which provides a fake fscrypt
+test_dummy_encryption
+test_dummy_encryption=%s
+                       Enable dummy encryption, which provides a fake fscrypt
                        context. The fake fscrypt context is used by xfstests.
+                       The argument may be either "v1" or "v2", in order to
+                       select the corresponding fscrypt policy version.
 checkpoint=%s[:%u[%]]     Set to "disable" to turn off checkpointing. Set to "enable"
                        to reenable checkpointing. Is enabled by default. While
                        disabled, any unmounting or unexpected shutdowns will cause
@@ -235,6 +239,23 @@
                        hide up to all remaining free space. The actual space that
                        would be unusable can be viewed at /sys/fs/f2fs/<disk>/unusable
                        This space is reclaimed once checkpoint=enable.
+compress_algorithm=%s  Control compress algorithm, currently f2fs supports "lzo",
+                       "lz4" and "zstd" algorithm.
+compress_log_size=%u   Support configuring compress cluster size, the size will
+                       be 4KB * (1 << %u), 16KB is minimum size, also it's
+                       default size.
+compress_extension=%s  Support adding specified extension, so that f2fs can enable
+                       compression on those corresponding files, e.g. if all files
+                       with '.ext' has high compression rate, we can set the '.ext'
+                       on compression extension list and enable compression on
+                       these file by default rather than to enable it via ioctl.
+                       For other files, we can still enable compression via ioctl.
+inlinecrypt            When possible, encrypt/decrypt the contents of encrypted
+                       files using the blk-crypto framework rather than
+                       filesystem-layer encryption. This allows the use of
+                       inline encryption hardware. The on-disk format is
+                       unaffected. For more details, see
+                       Documentation/block/inline-encryption.rst.
 
 ================================================================================
 DEBUGFS ENTRIES
@@ -259,167 +280,6 @@
 
 Files in /sys/fs/f2fs/<devname>
 (see also Documentation/ABI/testing/sysfs-fs-f2fs)
-..............................................................................
- File                         Content
-
- gc_urgent_sleep_time         This parameter controls sleep time for gc_urgent.
-                              500 ms is set by default. See above gc_urgent.
-
- gc_min_sleep_time            This tuning parameter controls the minimum sleep
-                              time for the garbage collection thread. Time is
-                              in milliseconds.
-
- gc_max_sleep_time            This tuning parameter controls the maximum sleep
-                              time for the garbage collection thread. Time is
-                              in milliseconds.
-
- gc_no_gc_sleep_time          This tuning parameter controls the default sleep
-                              time for the garbage collection thread. Time is
-                              in milliseconds.
-
- gc_idle                      This parameter controls the selection of victim
-                              policy for garbage collection. Setting gc_idle = 0
-                              (default) will disable this option. Setting
-                              gc_idle = 1 will select the Cost Benefit approach
-                              & setting gc_idle = 2 will select the greedy approach.
-
- gc_urgent                    This parameter controls triggering background GCs
-                              urgently or not. Setting gc_urgent = 0 [default]
-                              makes back to default behavior, while if it is set
-                              to 1, background thread starts to do GC by given
-                              gc_urgent_sleep_time interval.
-
- reclaim_segments             This parameter controls the number of prefree
-                              segments to be reclaimed. If the number of prefree
-			      segments is larger than the number of segments
-			      in the proportion to the percentage over total
-			      volume size, f2fs tries to conduct checkpoint to
-			      reclaim the prefree segments to free segments.
-			      By default, 5% over total # of segments.
-
- max_small_discards	      This parameter controls the number of discard
-			      commands that consist small blocks less than 2MB.
-			      The candidates to be discarded are cached until
-			      checkpoint is triggered, and issued during the
-			      checkpoint. By default, it is disabled with 0.
-
- discard_granularity	      This parameter controls the granularity of discard
-			      command size. It will issue discard commands iif
-			      the size is larger than given granularity. Its
-			      unit size is 4KB, and 4 (=16KB) is set by default.
-			      The maximum value is 128 (=512KB).
-
- reserved_blocks	      This parameter indicates the number of blocks that
-			      f2fs reserves internally for root.
-
- batched_trim_sections	      This parameter controls the number of sections
-                              to be trimmed out in batch mode when FITRIM
-                              conducts. 32 sections is set by default.
-
- ipu_policy                   This parameter controls the policy of in-place
-                              updates in f2fs. There are five policies:
-                               0x01: F2FS_IPU_FORCE, 0x02: F2FS_IPU_SSR,
-                               0x04: F2FS_IPU_UTIL,  0x08: F2FS_IPU_SSR_UTIL,
-                               0x10: F2FS_IPU_FSYNC.
-
- min_ipu_util                 This parameter controls the threshold to trigger
-                              in-place-updates. The number indicates percentage
-                              of the filesystem utilization, and used by
-                              F2FS_IPU_UTIL and F2FS_IPU_SSR_UTIL policies.
-
- min_fsync_blocks             This parameter controls the threshold to trigger
-                              in-place-updates when F2FS_IPU_FSYNC mode is set.
-			      The number indicates the number of dirty pages
-			      when fsync needs to flush on its call path. If
-			      the number is less than this value, it triggers
-			      in-place-updates.
-
- min_seq_blocks		      This parameter controls the threshold to serialize
-			      write IOs issued by multiple threads in parallel.
-
- min_hot_blocks		      This parameter controls the threshold to allocate
-			      a hot data log for pending data blocks to write.
-
- min_ssr_sections	      This parameter adds the threshold when deciding
-			      SSR block allocation. If this is large, SSR mode
-			      will be enabled early.
-
- ram_thresh                   This parameter controls the memory footprint used
-			      by free nids and cached nat entries. By default,
-			      10 is set, which indicates 10 MB / 1 GB RAM.
-
- ra_nid_pages		      When building free nids, F2FS reads NAT blocks
-			      ahead for speed up. Default is 0.
-
- dirty_nats_ratio	      Given dirty ratio of cached nat entries, F2FS
-			      determines flushing them in background.
-
- max_victim_search	      This parameter controls the number of trials to
-			      find a victim segment when conducting SSR and
-			      cleaning operations. The default value is 4096
-			      which covers 8GB block address range.
-
- migration_granularity	      For large-sized sections, F2FS can stop GC given
-			      this granularity instead of reclaiming entire
-			      section.
-
- dir_level                    This parameter controls the directory level to
-			      support large directory. If a directory has a
-			      number of files, it can reduce the file lookup
-			      latency by increasing this dir_level value.
-			      Otherwise, it needs to decrease this value to
-			      reduce the space overhead. The default value is 0.
-
- cp_interval		      F2FS tries to do checkpoint periodically, 60 secs
-			      by default.
-
- idle_interval		      F2FS detects system is idle, if there's no F2FS
-			      operations during given interval, 5 secs by
-			      default.
-
- discard_idle_interval	      F2FS detects the discard thread is idle, given
-			      time interval. Default is 5 secs.
-
- gc_idle_interval	      F2FS detects the GC thread is idle, given time
-			      interval. Default is 5 secs.
-
- umount_discard_timeout       When unmounting the disk, F2FS waits for finishing
-			      queued discard commands which can take huge time.
-			      This gives time out for it, 5 secs by default.
-
- iostat_enable		      This controls to enable/disable iostat in F2FS.
-
- readdir_ra		      This enables/disabled readahead of inode blocks
-			      in readdir, and default is enabled.
-
- gc_pin_file_thresh	      This indicates how many GC can be failed for the
-			      pinned file. If it exceeds this, F2FS doesn't
-			      guarantee its pinning state. 2048 trials is set
-			      by default.
-
- extension_list		      This enables to change extension_list for hot/cold
-			      files in runtime.
-
- inject_rate		      This controls injection rate of arbitrary faults.
-
- inject_type		      This controls injection type of arbitrary faults.
-
- dirty_segments 	      This shows # of dirty segments.
-
- lifetime_write_kbytes	      This shows # of data written to the disk.
-
- features		      This shows current features enabled on F2FS.
-
- current_reserved_blocks      This shows # of blocks currently reserved.
-
- unusable                     If checkpoint=disable, this shows the number of
-                              blocks that are unusable.
-                              If checkpoint=enable it shows the number of blocks
-                              that would be unusable if checkpoint=disable were
-                              to be set.
-
-encoding 	              This shows the encoding used for casefolding.
-                              If casefolding is not enabled, returns (none)
 
 ================================================================================
 USAGE
@@ -837,3 +697,44 @@
  4. address = fibmap(fd, offset)
  5. open(blkdev)
  6. write(blkdev, address)
+
+Compression implementation
+--------------------------
+
+- New term named cluster is defined as basic unit of compression, file can
+be divided into multiple clusters logically. One cluster includes 4 << n
+(n >= 0) logical pages, compression size is also cluster size, each of
+cluster can be compressed or not.
+
+- In cluster metadata layout, one special block address is used to indicate
+cluster is compressed one or normal one, for compressed cluster, following
+metadata maps cluster to [1, 4 << n - 1] physical blocks, in where f2fs
+stores data including compress header and compressed data.
+
+- In order to eliminate write amplification during overwrite, F2FS only
+support compression on write-once file, data can be compressed only when
+all logical blocks in file are valid and cluster compress ratio is lower
+than specified threshold.
+
+- To enable compression on regular inode, there are three ways:
+* chattr +c file
+* chattr +c dir; touch dir/file
+* mount w/ -o compress_extension=ext; touch file.ext
+
+Compress metadata layout:
+                             [Dnode Structure]
+             +-----------------------------------------------+
+             | cluster 1 | cluster 2 | ......... | cluster N |
+             +-----------------------------------------------+
+             .           .                       .           .
+       .                       .                .                      .
+  .         Compressed Cluster       .        .        Normal Cluster            .
++----------+---------+---------+---------+  +---------+---------+---------+---------+
+|compr flag| block 1 | block 2 | block 3 |  | block 1 | block 2 | block 3 | block 4 |
++----------+---------+---------+---------+  +---------+---------+---------+---------+
+           .                             .
+         .                                           .
+       .                                                           .
+      +-------------+-------------+----------+----------------------------+
+      | data length | data chksum | reserved |      compressed data       |
+      +-------------+-------------+----------+----------------------------+
diff --git a/Documentation/filesystems/fscrypt.rst b/Documentation/filesystems/fscrypt.rst
index 8a0700a..70d90e3 100644
--- a/Documentation/filesystems/fscrypt.rst
+++ b/Documentation/filesystems/fscrypt.rst
@@ -234,8 +234,8 @@
 entropy from the master key.  HKDF is also standardized and widely
 used by other software, whereas the AES-128-ECB based KDF is ad-hoc.
 
-Per-file keys
--------------
+Per-file encryption keys
+------------------------
 
 Since each master key can protect many files, it is necessary to
 "tweak" the encryption of each file so that the same plaintext in two
@@ -256,13 +256,8 @@
 the master keys may be wrapped in userspace, e.g. as is done by the
 `fscrypt <https://github.com/google/fscrypt>`_ tool.
 
-Including the inode number in the IVs was considered.  However, it was
-rejected as it would have prevented ext4 filesystems from being
-resized, and by itself still wouldn't have been sufficient to prevent
-the same key from being directly reused for both XTS and CTS-CBC.
-
-DIRECT_KEY and per-mode keys
-----------------------------
+DIRECT_KEY policies
+-------------------
 
 The Adiantum encryption mode (see `Encryption modes and usage`_) is
 suitable for both contents and filenames encryption, and it accepts
@@ -273,9 +268,9 @@
 Therefore, to improve performance and save memory, for Adiantum a
 "direct key" configuration is supported.  When the user has enabled
 this by setting FSCRYPT_POLICY_FLAG_DIRECT_KEY in the fscrypt policy,
-per-file keys are not used.  Instead, whenever any data (contents or
-filenames) is encrypted, the file's 16-byte nonce is included in the
-IV.  Moreover:
+per-file encryption keys are not used.  Instead, whenever any data
+(contents or filenames) is encrypted, the file's 16-byte nonce is
+included in the IV.  Moreover:
 
 - For v1 encryption policies, the encryption is done directly with the
   master key.  Because of this, users **must not** use the same master
@@ -285,6 +280,35 @@
   key derived using the KDF.  Users may use the same master key for
   other v2 encryption policies.
 
+IV_INO_LBLK_64 policies
+-----------------------
+
+When FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64 is set in the fscrypt policy,
+the encryption keys are derived from the master key, encryption mode
+number, and filesystem UUID.  This normally results in all files
+protected by the same master key sharing a single contents encryption
+key and a single filenames encryption key.  To still encrypt different
+files' data differently, inode numbers are included in the IVs.
+Consequently, shrinking the filesystem may not be allowed.
+
+This format is optimized for use with inline encryption hardware
+compliant with the UFS standard, which supports only 64 IV bits per
+I/O request and may have only a small number of keyslots.
+
+IV_INO_LBLK_32 policies
+-----------------------
+
+IV_INO_LBLK_32 policies work like IV_INO_LBLK_64, except that for
+IV_INO_LBLK_32, the inode number is hashed with SipHash-2-4 (where the
+SipHash key is derived from the master key) and added to the file
+logical block number mod 2^32 to produce a 32-bit IV.
+
+This format is optimized for use with inline encryption hardware
+compliant with the eMMC v5.2 standard, which supports only 32 IV bits
+per I/O request and may have only a small number of keyslots.  This
+format results in some level of IV reuse, so it should only be used
+when necessary due to hardware limitations.
+
 Key identifiers
 ---------------
 
@@ -292,6 +316,16 @@
 identifier" is also derived using the KDF.  This value is stored in
 the clear, since it is needed to reliably identify the key itself.
 
+Dirhash keys
+------------
+
+For directories that are indexed using a secret-keyed dirhash over the
+plaintext filenames, the KDF is also used to derive a 128-bit
+SipHash-2-4 key per directory in order to hash filenames.  This works
+just like deriving a per-file encryption key, except that a different
+KDF context is used.  Currently, only casefolded ("case-insensitive")
+encrypted directories use this style of hashing.
+
 Encryption modes and usage
 ==========================
 
@@ -308,17 +342,18 @@
 
 AES-128-CBC was added only for low-powered embedded devices with
 crypto accelerators such as CAAM or CESA that do not support XTS.  To
-use AES-128-CBC, CONFIG_CRYPTO_SHA256 (or another SHA-256
-implementation) must be enabled so that ESSIV can be used.
+use AES-128-CBC, CONFIG_CRYPTO_ESSIV and CONFIG_CRYPTO_SHA256 (or
+another SHA-256 implementation) must be enabled so that ESSIV can be
+used.
 
 Adiantum is a (primarily) stream cipher-based mode that is fast even
 on CPUs without dedicated crypto instructions.  It's also a true
 wide-block mode, unlike XTS.  It can also eliminate the need to derive
-per-file keys.  However, it depends on the security of two primitives,
-XChaCha12 and AES-256, rather than just one.  See the paper
-"Adiantum: length-preserving encryption for entry-level processors"
-(https://eprint.iacr.org/2018/720.pdf) for more details.  To use
-Adiantum, CONFIG_CRYPTO_ADIANTUM must be enabled.  Also, fast
+per-file encryption keys.  However, it depends on the security of two
+primitives, XChaCha12 and AES-256, rather than just one.  See the
+paper "Adiantum: length-preserving encryption for entry-level
+processors" (https://eprint.iacr.org/2018/720.pdf) for more details.
+To use Adiantum, CONFIG_CRYPTO_ADIANTUM must be enabled.  Also, fast
 implementations of ChaCha and NHPoly1305 should be enabled, e.g.
 CONFIG_CRYPTO_CHACHA20_NEON and CONFIG_CRYPTO_NHPOLY1305_NEON for ARM.
 
@@ -341,10 +376,20 @@
   is encrypted with AES-256 where the AES-256 key is the SHA-256 hash
   of the file's data encryption key.
 
-- In the "direct key" configuration (FSCRYPT_POLICY_FLAG_DIRECT_KEY
-  set in the fscrypt_policy), the file's nonce is also appended to the
-  IV.  Currently this is only allowed with the Adiantum encryption
-  mode.
+- With `DIRECT_KEY policies`_, the file's nonce is appended to the IV.
+  Currently this is only allowed with the Adiantum encryption mode.
+
+- With `IV_INO_LBLK_64 policies`_, the logical block number is limited
+  to 32 bits and is placed in bits 0-31 of the IV.  The inode number
+  (which is also limited to 32 bits) is placed in bits 32-63.
+
+- With `IV_INO_LBLK_32 policies`_, the logical block number is limited
+  to 32 bits and is placed in bits 0-31 of the IV.  The inode number
+  is then hashed and added mod 2^32.
+
+Note that because file logical block numbers are included in the IVs,
+filesystems must enforce that blocks are never shifted around within
+encrypted files, e.g. via "collapse range" or "insert range".
 
 Filenames encryption
 --------------------
@@ -354,10 +399,10 @@
 filenames of up to 255 bytes, the same IV is used for every filename
 in a directory.
 
-However, each encrypted directory still uses a unique key; or
-alternatively (for the "direct key" configuration) has the file's
-nonce included in the IVs.  Thus, IV reuse is limited to within a
-single directory.
+However, each encrypted directory still uses a unique key, or
+alternatively has the file's nonce (for `DIRECT_KEY policies`_) or
+inode number (for `IV_INO_LBLK_64 policies`_) included in the IVs.
+Thus, IV reuse is limited to within a single directory.
 
 With CTS-CBC, the IV reuse means that when the plaintext filenames
 share a common prefix at least as long as the cipher block size (16
@@ -391,9 +436,9 @@
 
 The FS_IOC_SET_ENCRYPTION_POLICY ioctl sets an encryption policy on an
 empty directory or verifies that a directory or regular file already
-has the specified encryption policy.  It takes in a pointer to a
-:c:type:`struct fscrypt_policy_v1` or a :c:type:`struct
-fscrypt_policy_v2`, defined as follows::
+has the specified encryption policy.  It takes in a pointer to
+struct fscrypt_policy_v1 or struct fscrypt_policy_v2, defined as
+follows::
 
     #define FSCRYPT_POLICY_V1               0
     #define FSCRYPT_KEY_DESCRIPTOR_SIZE     8
@@ -419,11 +464,11 @@
 
 This structure must be initialized as follows:
 
-- ``version`` must be FSCRYPT_POLICY_V1 (0) if the struct is
-  :c:type:`fscrypt_policy_v1` or FSCRYPT_POLICY_V2 (2) if the struct
-  is :c:type:`fscrypt_policy_v2`.  (Note: we refer to the original
-  policy version as "v1", though its version code is really 0.)  For
-  new encrypted directories, use v2 policies.
+- ``version`` must be FSCRYPT_POLICY_V1 (0) if
+  struct fscrypt_policy_v1 is used or FSCRYPT_POLICY_V2 (2) if
+  struct fscrypt_policy_v2 is used. (Note: we refer to the original
+  policy version as "v1", though its version code is really 0.)
+  For new encrypted directories, use v2 policies.
 
 - ``contents_encryption_mode`` and ``filenames_encryption_mode`` must
   be set to constants from ``<linux/fscrypt.h>`` which identify the
@@ -431,12 +476,22 @@
   (1) for ``contents_encryption_mode`` and FSCRYPT_MODE_AES_256_CTS
   (4) for ``filenames_encryption_mode``.
 
-- ``flags`` must contain a value from ``<linux/fscrypt.h>`` which
-  identifies the amount of NUL-padding to use when encrypting
-  filenames.  If unsure, use FSCRYPT_POLICY_FLAGS_PAD_32 (0x3).
-  Additionally, if the encryption modes are both
-  FSCRYPT_MODE_ADIANTUM, this can contain
-  FSCRYPT_POLICY_FLAG_DIRECT_KEY; see `DIRECT_KEY and per-mode keys`_.
+- ``flags`` contains optional flags from ``<linux/fscrypt.h>``:
+
+  - FSCRYPT_POLICY_FLAGS_PAD_*: The amount of NUL padding to use when
+    encrypting filenames.  If unsure, use FSCRYPT_POLICY_FLAGS_PAD_32
+    (0x3).
+  - FSCRYPT_POLICY_FLAG_DIRECT_KEY: See `DIRECT_KEY policies`_.
+  - FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64: See `IV_INO_LBLK_64
+    policies`_.
+  - FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32: See `IV_INO_LBLK_32
+    policies`_.
+
+  v1 encryption policies only support the PAD_* and DIRECT_KEY flags.
+  The other flags are only supported by v2 encryption policies.
+
+  The DIRECT_KEY, IV_INO_LBLK_64, and IV_INO_LBLK_32 flags are
+  mutually exclusive.
 
 - For v2 encryption policies, ``__reserved`` must be zeroed.
 
@@ -453,9 +508,9 @@
   replaced with ``master_key_identifier``, which is longer and cannot
   be arbitrarily chosen.  Instead, the key must first be added using
   `FS_IOC_ADD_ENCRYPTION_KEY`_.  Then, the ``key_spec.u.identifier``
-  the kernel returned in the :c:type:`struct fscrypt_add_key_arg` must
-  be used as the ``master_key_identifier`` in the :c:type:`struct
-  fscrypt_policy_v2`.
+  the kernel returned in the struct fscrypt_add_key_arg must
+  be used as the ``master_key_identifier`` in
+  struct fscrypt_policy_v2.
 
 If the file is not yet encrypted, then FS_IOC_SET_ENCRYPTION_POLICY
 verifies that the file is an empty directory.  If so, the specified
@@ -493,7 +548,9 @@
 - ``EEXIST``: the file is already encrypted with an encryption policy
   different from the one specified
 - ``EINVAL``: an invalid encryption policy was specified (invalid
-  version, mode(s), or flags; or reserved bits were set)
+  version, mode(s), or flags; or reserved bits were set); or a v1
+  encryption policy was specified but the directory has the casefold
+  flag enabled (casefolding is incompatible with v1 policies).
 - ``ENOKEY``: a v2 encryption policy was specified, but the key with
   the specified ``master_key_identifier`` has not been added, nor does
   the process have the CAP_FOWNER capability in the initial user
@@ -533,7 +590,7 @@
 The FS_IOC_GET_ENCRYPTION_POLICY_EX ioctl retrieves the encryption
 policy, if any, for a directory or regular file.  No additional
 permissions are required beyond the ability to open the file.  It
-takes in a pointer to a :c:type:`struct fscrypt_get_policy_ex_arg`,
+takes in a pointer to struct fscrypt_get_policy_ex_arg,
 defined as follows::
 
     struct fscrypt_get_policy_ex_arg {
@@ -580,9 +637,8 @@
 encryption policy, if any, for a directory or regular file.  However,
 unlike `FS_IOC_GET_ENCRYPTION_POLICY_EX`_,
 FS_IOC_GET_ENCRYPTION_POLICY only supports the original policy
-version.  It takes in a pointer directly to a :c:type:`struct
-fscrypt_policy_v1` rather than a :c:type:`struct
-fscrypt_get_policy_ex_arg`.
+version.  It takes in a pointer directly to struct fscrypt_policy_v1
+rather than struct fscrypt_get_policy_ex_arg.
 
 The error codes for FS_IOC_GET_ENCRYPTION_POLICY are the same as those
 for FS_IOC_GET_ENCRYPTION_POLICY_EX, except that
@@ -601,6 +657,17 @@
 FS_IOC_GET_ENCRYPTION_PWSALT is deprecated.  Instead, prefer to
 generate and manage any needed salt(s) in userspace.
 
+Getting a file's encryption nonce
+---------------------------------
+
+Since Linux v5.7, the ioctl FS_IOC_GET_ENCRYPTION_NONCE is supported.
+On encrypted files and directories it gets the inode's 16-byte nonce.
+On unencrypted files and directories, it fails with ENODATA.
+
+This ioctl can be useful for automated tests which verify that the
+encryption is being done correctly.  It is not needed for normal use
+of fscrypt.
+
 Adding keys
 -----------
 
@@ -612,13 +679,13 @@
 encrypted using that key appear "unlocked", i.e. in plaintext form.
 It can be executed on any file or directory on the target filesystem,
 but using the filesystem's root directory is recommended.  It takes in
-a pointer to a :c:type:`struct fscrypt_add_key_arg`, defined as
-follows::
+a pointer to struct fscrypt_add_key_arg, defined as follows::
 
     struct fscrypt_add_key_arg {
             struct fscrypt_key_specifier key_spec;
             __u32 raw_size;
-            __u32 __reserved[9];
+            __u32 key_id;
+            __u32 __reserved[8];
             __u8 raw[];
     };
 
@@ -635,17 +702,22 @@
             } u;
     };
 
-:c:type:`struct fscrypt_add_key_arg` must be zeroed, then initialized
+    struct fscrypt_provisioning_key_payload {
+            __u32 type;
+            __u32 __reserved;
+            __u8 raw[];
+    };
+
+struct fscrypt_add_key_arg must be zeroed, then initialized
 as follows:
 
 - If the key is being added for use by v1 encryption policies, then
   ``key_spec.type`` must contain FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR, and
   ``key_spec.u.descriptor`` must contain the descriptor of the key
   being added, corresponding to the value in the
-  ``master_key_descriptor`` field of :c:type:`struct
-  fscrypt_policy_v1`.  To add this type of key, the calling process
-  must have the CAP_SYS_ADMIN capability in the initial user
-  namespace.
+  ``master_key_descriptor`` field of struct fscrypt_policy_v1.
+  To add this type of key, the calling process must have the
+  CAP_SYS_ADMIN capability in the initial user namespace.
 
   Alternatively, if the key is being added for use by v2 encryption
   policies, then ``key_spec.type`` must contain
@@ -657,9 +729,27 @@
   ``Documentation/security/keys/core.rst``).
 
 - ``raw_size`` must be the size of the ``raw`` key provided, in bytes.
+  Alternatively, if ``key_id`` is nonzero, this field must be 0, since
+  in that case the size is implied by the specified Linux keyring key.
+
+- ``key_id`` is 0 if the raw key is given directly in the ``raw``
+  field.  Otherwise ``key_id`` is the ID of a Linux keyring key of
+  type "fscrypt-provisioning" whose payload is
+  struct fscrypt_provisioning_key_payload whose ``raw`` field contains
+  the raw key and whose ``type`` field matches ``key_spec.type``.
+  Since ``raw`` is variable-length, the total size of this key's
+  payload must be ``sizeof(struct fscrypt_provisioning_key_payload)``
+  plus the raw key size.  The process must have Search permission on
+  this key.
+
+  Most users should leave this 0 and specify the raw key directly.
+  The support for specifying a Linux keyring key is intended mainly to
+  allow re-adding keys after a filesystem is unmounted and re-mounted,
+  without having to store the raw keys in userspace memory.
 
 - ``raw`` is a variable-length field which must contain the actual
-  key, ``raw_size`` bytes long.
+  key, ``raw_size`` bytes long.  Alternatively, if ``key_id`` is
+  nonzero, then this field is unused.
 
 For v2 policy keys, the kernel keeps track of which user (identified
 by effective user ID) added the key, and only allows the key to be
@@ -681,11 +771,16 @@
 
 - ``EACCES``: FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR was specified, but the
   caller does not have the CAP_SYS_ADMIN capability in the initial
-  user namespace
+  user namespace; or the raw key was specified by Linux key ID but the
+  process lacks Search permission on the key.
 - ``EDQUOT``: the key quota for this user would be exceeded by adding
   the key
 - ``EINVAL``: invalid key size or key specifier type, or reserved bits
   were set
+- ``EKEYREJECTED``: the raw key was specified by Linux key ID, but the
+  key has the wrong type
+- ``ENOKEY``: the raw key was specified by Linux key ID, but no key
+  exists with that ID
 - ``ENOTTY``: this type of filesystem does not implement encryption
 - ``EOPNOTSUPP``: the kernel was not configured with encryption
   support for this filesystem, or the filesystem superblock has not
@@ -763,8 +858,8 @@
 encryption key from the filesystem, and possibly removes the key
 itself.  It can be executed on any file or directory on the target
 filesystem, but using the filesystem's root directory is recommended.
-It takes in a pointer to a :c:type:`struct fscrypt_remove_key_arg`,
-defined as follows::
+It takes in a pointer to struct fscrypt_remove_key_arg, defined
+as follows::
 
     struct fscrypt_remove_key_arg {
             struct fscrypt_key_specifier key_spec;
@@ -859,8 +954,8 @@
 The FS_IOC_GET_ENCRYPTION_KEY_STATUS ioctl retrieves the status of a
 master encryption key.  It can be executed on any file or directory on
 the target filesystem, but using the filesystem's root directory is
-recommended.  It takes in a pointer to a :c:type:`struct
-fscrypt_get_key_status_arg`, defined as follows::
+recommended.  It takes in a pointer to
+struct fscrypt_get_key_status_arg, defined as follows::
 
     struct fscrypt_get_key_status_arg {
             /* input */
@@ -1051,17 +1146,17 @@
 Encryption context
 ------------------
 
-An encryption policy is represented on-disk by a :c:type:`struct
-fscrypt_context_v1` or a :c:type:`struct fscrypt_context_v2`.  It is
-up to individual filesystems to decide where to store it, but normally
-it would be stored in a hidden extended attribute.  It should *not* be
+An encryption policy is represented on-disk by
+struct fscrypt_context_v1 or struct fscrypt_context_v2.  It is up to
+individual filesystems to decide where to store it, but normally it
+would be stored in a hidden extended attribute.  It should *not* be
 exposed by the xattr-related system calls such as getxattr() and
 setxattr() because of the special semantics of the encryption xattr.
 (In particular, there would be much confusion if an encryption policy
 were to be added to or removed from anything other than an empty
 directory.)  These structs are defined as follows::
 
-    #define FS_KEY_DERIVATION_NONCE_SIZE 16
+    #define FSCRYPT_FILE_NONCE_SIZE 16
 
     #define FSCRYPT_KEY_DESCRIPTOR_SIZE  8
     struct fscrypt_context_v1 {
@@ -1070,7 +1165,7 @@
             u8 filenames_encryption_mode;
             u8 flags;
             u8 master_key_descriptor[FSCRYPT_KEY_DESCRIPTOR_SIZE];
-            u8 nonce[FS_KEY_DERIVATION_NONCE_SIZE];
+            u8 nonce[FSCRYPT_FILE_NONCE_SIZE];
     };
 
     #define FSCRYPT_KEY_IDENTIFIER_SIZE  16
@@ -1081,15 +1176,15 @@
             u8 flags;
             u8 __reserved[4];
             u8 master_key_identifier[FSCRYPT_KEY_IDENTIFIER_SIZE];
-            u8 nonce[FS_KEY_DERIVATION_NONCE_SIZE];
+            u8 nonce[FSCRYPT_FILE_NONCE_SIZE];
     };
 
 The context structs contain the same information as the corresponding
 policy structs (see `Setting an encryption policy`_), except that the
 context structs also contain a nonce.  The nonce is randomly generated
 by the kernel and is used as KDF input or as a tweak to cause
-different files to be encrypted differently; see `Per-file keys`_ and
-`DIRECT_KEY and per-mode keys`_.
+different files to be encrypted differently; see `Per-file encryption
+keys`_ and `DIRECT_KEY policies`_.
 
 Data path changes
 -----------------
@@ -1107,6 +1202,18 @@
 buffers regardless of encryption.  Other filesystems, such as ext4 and
 F2FS, have to allocate bounce pages specially for encryption.
 
+Fscrypt is also able to use inline encryption hardware instead of the
+kernel crypto API for en/decryption of file contents.  When possible,
+and if directed to do so (by specifying the 'inlinecrypt' mount option
+for an ext4/F2FS filesystem), it adds encryption contexts to bios and
+uses blk-crypto to perform the en/decryption instead of making use of
+the above read/write path changes.  Of course, even if directed to
+make use of inline encryption, fscrypt will only be able to do so if
+either hardware inline encryption support is available for the
+selected encryption algorithm or CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK
+is selected.  If neither is the case, fscrypt will fall back to using
+the above mentioned read/write path changes for en/decryption.
+
 Filename hashing and encoding
 -----------------------------
 
@@ -1140,8 +1247,8 @@
 filesystem-specific hash(es) needed for directory lookups.  This
 allows the filesystem to still, with a high degree of confidence, map
 the filename given in ->lookup() back to a particular directory entry
-that was previously listed by readdir().  See :c:type:`struct
-fscrypt_digested_name` in the source for more details.
+that was previously listed by readdir().  See
+struct fscrypt_nokey_name in the source for more details.
 
 Note that the precise way that filenames are presented to userspace
 without the key is subject to change in the future.  It is only meant
@@ -1153,11 +1260,14 @@
 
 To test fscrypt, use xfstests, which is Linux's de facto standard
 filesystem test suite.  First, run all the tests in the "encrypt"
-group on the relevant filesystem(s).  For example, to test ext4 and
+group on the relevant filesystem(s).  One can also run the tests
+with the 'inlinecrypt' mount option to test the implementation for
+inline encryption support.  For example, to test ext4 and
 f2fs encryption using `kvm-xfstests
 <https://github.com/tytso/xfstests-bld/blob/master/Documentation/kvm-quickstart.md>`_::
 
     kvm-xfstests -c ext4,f2fs -g encrypt
+    kvm-xfstests -c ext4,f2fs -g encrypt -m inlinecrypt
 
 UBIFS encryption can also be tested this way, but it should be done in
 a separate command, and it takes some time for kvm-xfstests to set up
@@ -1179,6 +1289,7 @@
 kvm-xfstests, use the "encrypt" filesystem configuration::
 
     kvm-xfstests -c ext4/encrypt,f2fs/encrypt -g auto
+    kvm-xfstests -c ext4/encrypt,f2fs/encrypt -g auto -m inlinecrypt
 
 Because this runs many more tests than "-g encrypt" does, it takes
 much longer to run; so also consider using `gce-xfstests
@@ -1186,3 +1297,4 @@
 instead of kvm-xfstests::
 
     gce-xfstests -c ext4/encrypt,f2fs/encrypt -g auto
+    gce-xfstests -c ext4/encrypt,f2fs/encrypt -g auto -m inlinecrypt
diff --git a/Documentation/filesystems/fsverity.rst b/Documentation/filesystems/fsverity.rst
index 42a0b6d..28ec7ba 100644
--- a/Documentation/filesystems/fsverity.rst
+++ b/Documentation/filesystems/fsverity.rst
@@ -27,9 +27,9 @@
 corrupted data, including mmap reads, will fail.
 
 Userspace can use another ioctl to retrieve the root hash (actually
-the "file measurement", which is a hash that includes the root hash)
-that fs-verity is enforcing for the file.  This ioctl executes in
-constant time, regardless of the file size.
+the "fs-verity file digest", which is a hash that includes the Merkle
+tree root hash) that fs-verity is enforcing for the file.  This ioctl
+executes in constant time, regardless of the file size.
 
 fs-verity is essentially a way to hash a file in constant time,
 subject to the caveat that reads which would violate the hash will
@@ -177,9 +177,10 @@
 FS_IOC_MEASURE_VERITY
 ---------------------
 
-The FS_IOC_MEASURE_VERITY ioctl retrieves the measurement of a verity
-file.  The file measurement is a digest that cryptographically
-identifies the file contents that are being enforced on reads.
+The FS_IOC_MEASURE_VERITY ioctl retrieves the digest of a verity file.
+The fs-verity file digest is a cryptographic digest that identifies
+the file contents that are being enforced on reads; it is computed via
+a Merkle tree and is different from a traditional full-file digest.
 
 This ioctl takes in a pointer to a variable-length structure::
 
@@ -197,7 +198,7 @@
 follows:
 
 - ``digest_algorithm`` will be the hash algorithm used for the file
-  measurement.  It will match ``fsverity_enable_arg::hash_algorithm``.
+  digest.  It will match ``fsverity_enable_arg::hash_algorithm``.
 - ``digest_size`` will be the size of the digest in bytes, e.g. 32
   for SHA-256.  (This can be redundant with ``digest_algorithm``.)
 - ``digest`` will be the actual bytes of the digest.
@@ -226,6 +227,14 @@
 The verity flag is not settable via FS_IOC_SETFLAGS.  You must use
 FS_IOC_ENABLE_VERITY instead, since parameters must be provided.
 
+statx
+-----
+
+Since Linux v5.5, the statx() system call sets STATX_ATTR_VERITY if
+the file has fs-verity enabled.  This can perform better than
+FS_IOC_GETFLAGS and FS_IOC_MEASURE_VERITY because it doesn't require
+opening the file, and opening verity files can be expensive.
+
 Accessing verity files
 ======================
 
@@ -249,25 +258,24 @@
   with EIO (for read()) or SIGBUS (for mmap() reads).
 
 - If the sysctl "fs.verity.require_signatures" is set to 1 and the
-  file's verity measurement is not signed by a key in the fs-verity
-  keyring, then opening the file will fail.  See `Built-in signature
-  verification`_.
+  file is not signed by a key in the fs-verity keyring, then opening
+  the file will fail.  See `Built-in signature verification`_.
 
 Direct access to the Merkle tree is not supported.  Therefore, if a
 verity file is copied, or is backed up and restored, then it will lose
 its "verity"-ness.  fs-verity is primarily meant for files like
 executables that are managed by a package manager.
 
-File measurement computation
-============================
+File digest computation
+=======================
 
 This section describes how fs-verity hashes the file contents using a
-Merkle tree to produce the "file measurement" which cryptographically
-identifies the file contents.  This algorithm is the same for all
-filesystems that support fs-verity.
+Merkle tree to produce the digest which cryptographically identifies
+the file contents.  This algorithm is the same for all filesystems
+that support fs-verity.
 
 Userspace only needs to be aware of this algorithm if it needs to
-compute the file measurement itself, e.g. in order to sign the file.
+compute fs-verity file digests itself, e.g. in order to sign files.
 
 .. _fsverity_merkle_tree:
 
@@ -317,26 +325,22 @@
 is exactly the top-level hash block of the first file.  Ambiguities
 also arise from the convention of padding to the next block boundary.
 
-To solve this problem, the verity file measurement is actually
-computed as a hash of the following structure, which contains the
-Merkle tree root hash as well as other fields such as the file size::
+To solve this problem, the fs-verity file digest is actually computed
+as a hash of the following structure, which contains the Merkle tree
+root hash as well as other fields such as the file size::
 
     struct fsverity_descriptor {
             __u8 version;           /* must be 1 */
             __u8 hash_algorithm;    /* Merkle tree hash algorithm */
             __u8 log_blocksize;     /* log2 of size of data and tree blocks */
             __u8 salt_size;         /* size of salt in bytes; 0 if none */
-            __le32 sig_size;        /* must be 0 */
+            __le32 __reserved_0x04; /* must be 0 */
             __le64 data_size;       /* size of file the Merkle tree is built over */
             __u8 root_hash[64];     /* Merkle tree root hash */
             __u8 salt[32];          /* salt prepended to each hashed block */
             __u8 __reserved[144];   /* must be 0's */
     };
 
-Note that the ``sig_size`` field must be set to 0 for the purpose of
-computing the file measurement, even if a signature was provided (or
-will be provided) to `FS_IOC_ENABLE_VERITY`_.
-
 Built-in signature verification
 ===============================
 
@@ -351,20 +355,20 @@
    certificates from being added.
 
 2. `FS_IOC_ENABLE_VERITY`_ accepts a pointer to a PKCS#7 formatted
-   detached signature in DER format of the file measurement.  On
-   success, this signature is persisted alongside the Merkle tree.
+   detached signature in DER format of the file's fs-verity digest.
+   On success, this signature is persisted alongside the Merkle tree.
    Then, any time the file is opened, the kernel will verify the
-   file's actual measurement against this signature, using the
-   certificates in the ".fs-verity" keyring.
+   file's actual digest against this signature, using the certificates
+   in the ".fs-verity" keyring.
 
 3. A new sysctl "fs.verity.require_signatures" is made available.
    When set to 1, the kernel requires that all verity files have a
-   correctly signed file measurement as described in (2).
+   correctly signed digest as described in (2).
 
-File measurements must be signed in the following format, which is
-similar to the structure used by `FS_IOC_MEASURE_VERITY`_::
+fs-verity file digests must be signed in the following format, which
+is similar to the structure used by `FS_IOC_MEASURE_VERITY`_::
 
-    struct fsverity_signed_digest {
+    struct fsverity_formatted_digest {
             char magic[8];                  /* must be "FSVerity" */
             __le16 digest_algorithm;
             __le16 digest_size;
@@ -398,7 +402,7 @@
 ext4
 ----
 
-ext4 supports fs-verity since Linux TODO and e2fsprogs v1.45.2.
+ext4 supports fs-verity since Linux v5.4 and e2fsprogs v1.45.2.
 
 To create verity files on an ext4 filesystem, the filesystem must have
 been formatted with ``-O verity`` or had ``tune2fs -O verity`` run on
@@ -413,8 +417,8 @@
 
 ext4 also supports encryption, which can be used simultaneously with
 fs-verity.  In this case, the plaintext data is verified rather than
-the ciphertext.  This is necessary in order to make the file
-measurement meaningful, since every file is encrypted differently.
+the ciphertext.  This is necessary in order to make the fs-verity file
+digest meaningful, since every file is encrypted differently.
 
 ext4 stores the verity metadata (Merkle tree and fsverity_descriptor)
 past the end of the file, starting at the first 64K boundary beyond
@@ -434,7 +438,7 @@
 f2fs
 ----
 
-f2fs supports fs-verity since Linux TODO and f2fs-tools v1.11.0.
+f2fs supports fs-verity since Linux v5.4 and f2fs-tools v1.11.0.
 
 To create verity files on an f2fs filesystem, the filesystem must have
 been formatted with ``-O verity``.
@@ -584,8 +588,8 @@
 :Q: Isn't fs-verity useless because the attacker can just modify the
     hashes in the Merkle tree, which is stored on-disk?
 :A: To verify the authenticity of an fs-verity file you must verify
-    the authenticity of the "file measurement", which is basically the
-    root hash of the Merkle tree.  See `Use cases`_.
+    the authenticity of the "fs-verity file digest", which
+    incorporates the root hash of the Merkle tree.  See `Use cases`_.
 
 :Q: Isn't fs-verity useless because the attacker can just replace a
     verity file with a non-verity one?
diff --git a/Documentation/filesystems/locking.rst b/Documentation/filesystems/locking.rst
index fc3a070..d479820 100644
--- a/Documentation/filesystems/locking.rst
+++ b/Documentation/filesystems/locking.rst
@@ -125,7 +125,7 @@
 	bool (*list)(struct dentry *dentry);
 	int (*get)(const struct xattr_handler *handler, struct dentry *dentry,
 		   struct inode *inode, const char *name, void *buffer,
-		   size_t size);
+		   size_t size, int flags);
 	int (*set)(const struct xattr_handler *handler, struct dentry *dentry,
 		   struct inode *inode, const char *name, const void *buffer,
 		   size_t size, int flags);
diff --git a/Documentation/filesystems/overlayfs.txt b/Documentation/filesystems/overlayfs.txt
index 845d689..c7ab389 100644
--- a/Documentation/filesystems/overlayfs.txt
+++ b/Documentation/filesystems/overlayfs.txt
@@ -102,6 +102,29 @@
 such as metadata and extended attributes are reported for the upper
 directory only.  These attributes of the lower directory are hidden.
 
+credentials
+-----------
+
+By default, all access to the upper, lower and work directories is the
+recorded mounter's MAC and DAC credentials.  The incoming accesses are
+checked against the caller's credentials.
+
+In the case where caller MAC or DAC credentials do not overlap, a
+use case available in older versions of the driver, the
+override_creds mount flag can be turned off and help when the use
+pattern has caller with legitimate credentials where the mounter
+does not.  Several unintended side effects will occur though.  The
+caller without certain key capabilities or lower privilege will not
+always be able to delete files or directories, create nodes, or
+search some restricted directories.  The ability to search and read
+a directory entry is spotty as a result of the cache mechanism not
+retesting the credentials because of the assumption, a privileged
+caller can fill cache, then a lower privilege can read the directory
+cache.  The uneven security model where cache, upperdir and workdir
+are opened at privilege, but accessed without creating a form of
+privilege escalation, should only be used with strict understanding
+of the side effects and of the security policies.
+
 whiteouts and opaque directories
 --------------------------------
 
diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt
index 99ca040..27c79cf 100644
--- a/Documentation/filesystems/proc.txt
+++ b/Documentation/filesystems/proc.txt
@@ -415,6 +415,8 @@
  [stack]                  = the stack of the main process
  [vdso]                   = the "virtual dynamic shared object",
                             the kernel system call handler
+ [anon:<name>]            = an anonymous mapping that has been
+                            named by userspace
 
  or if empty, the mapping is anonymous.
 
@@ -447,6 +449,7 @@
 Locked:                0 kB
 THPeligible:           0
 VmFlags: rd ex mr mw me dw
+Name:           name from userspace
 
 The first of these lines shows the same information as is displayed for the
 mapping in /proc/PID/maps.  Following lines show the size of the mapping
@@ -526,6 +529,9 @@
 might change in future as well. So each consumer of these flags has to
 follow each specific kernel version for the exact semantic.
 
+The "Name" field will only be present on a mapping that has been named by
+userspace, and will show the name passed in by userspace.
+
 This file is only present if the CONFIG_MMU kernel configuration option is
 enabled.
 
@@ -1797,18 +1803,20 @@
 3.8	/proc/<pid>/fdinfo/<fd> - Information about opened file
 ---------------------------------------------------------------
 This file provides information associated with an opened file. The regular
-files have at least three fields -- 'pos', 'flags' and mnt_id. The 'pos'
-represents the current offset of the opened file in decimal form [see lseek(2)
-for details], 'flags' denotes the octal O_xxx mask the file has been
-created with [see open(2) for details] and 'mnt_id' represents mount ID of
-the file system containing the opened file [see 3.5 /proc/<pid>/mountinfo
-for details].
+files have at least four fields -- 'pos', 'flags', 'mnt_id' and 'ino'.
+The 'pos' represents the current offset of the opened file in decimal
+form [see lseek(2) for details], 'flags' denotes the octal O_xxx mask the
+file has been created with [see open(2) for details] and 'mnt_id' represents
+mount ID of the file system containing the opened file [see 3.5
+/proc/<pid>/mountinfo for details]. 'ino' represents the inode number of
+the file.
 
 A typical output is
 
 	pos:	0
 	flags:	0100002
 	mnt_id:	19
+	ino:	63107
 
 All locks associated with a file descriptor are shown in its fdinfo too.
 
@@ -1822,6 +1830,7 @@
 	pos:	0
 	flags:	04002
 	mnt_id:	9
+	ino:	63107
 	eventfd-count:	5a
 
 	where 'eventfd-count' is hex value of a counter.
@@ -1831,6 +1840,7 @@
 	pos:	0
 	flags:	04002
 	mnt_id:	9
+	ino:	63107
 	sigmask:	0000000000000200
 
 	where 'sigmask' is hex value of the signal mask associated
@@ -1841,6 +1851,7 @@
 	pos:	0
 	flags:	02
 	mnt_id:	9
+	ino:	63107
 	tfd:        5 events:       1d data: ffffffffffffffff pos:0 ino:61af sdev:7
 
 	where 'tfd' is a target file descriptor number in decimal form,
@@ -1857,6 +1868,8 @@
 
 	pos:	0
 	flags:	02000000
+	mnt_id:	9
+	ino:	63107
 	inotify wd:3 ino:9e7e sdev:800013 mask:800afce ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:7e9e0000640d1b6d
 
 	where 'wd' is a watch descriptor in decimal form, ie a target file
@@ -1879,6 +1892,7 @@
 	pos:	0
 	flags:	02
 	mnt_id:	9
+	ino:	63107
 	fanotify flags:10 event-flags:0
 	fanotify mnt_id:12 mflags:40 mask:38 ignored_mask:40000003
 	fanotify ino:4f969 sdev:800013 mflags:0 mask:3b ignored_mask:40000000 fhandle-bytes:8 fhandle-type:1 f_handle:69f90400c275b5b4
@@ -1901,6 +1915,7 @@
 	pos:	0
 	flags:	02
 	mnt_id:	9
+	ino:	63107
 	clockid: 0
 	ticks: 0
 	settime flags: 01
@@ -1915,6 +1930,22 @@
 	with TIMER_ABSTIME option which will be shown in 'settime flags', but 'it_value'
 	still exhibits timer's remaining time.
 
+DMA Buffer files
+~~~~~~~~~~~~~~~~
+
+::
+
+	pos:	0
+	flags:	04002
+	mnt_id:	9
+	ino:	63107
+	size:   32768
+	count:  2
+	exp_name:  system-heap
+
+where 'size' is the size of the DMA buffer in bytes. 'count' is the file count of
+the DMA buffer file. 'exp_name' is the name of the DMA buffer exporter.
+
 3.9	/proc/<pid>/map_files - Information about memory mapped files
 ---------------------------------------------------------------------
 This directory contains symbolic links which represent memory mapped files
diff --git a/Documentation/ioctl/ioctl-number.rst b/Documentation/ioctl/ioctl-number.rst
index bef79cd..4ef8643 100644
--- a/Documentation/ioctl/ioctl-number.rst
+++ b/Documentation/ioctl/ioctl-number.rst
@@ -233,6 +233,7 @@
 'f'   00-0F  fs/ext4/ext4.h                                          conflict!
 'f'   00-0F  linux/fs.h                                              conflict!
 'f'   00-0F  fs/ocfs2/ocfs2_fs.h                                     conflict!
+'f'   13-27  linux/fscrypt.h
 'f'   81-8F  linux/fsverity.h
 'g'   00-0F  linux/usb/gadgetfs.h
 'g'   20-2F  linux/usb/g_printer.h
diff --git a/Documentation/media/uapi/v4l/biblio.rst b/Documentation/media/uapi/v4l/biblio.rst
index ad2ff25..8095f57 100644
--- a/Documentation/media/uapi/v4l/biblio.rst
+++ b/Documentation/media/uapi/v4l/biblio.rst
@@ -131,6 +131,15 @@
 
 :author:    International Telecommunication Union (http://www.itu.ch)
 
+.. _hevc:
+
+ITU H.265/HEVC
+==============
+
+:title:     ITU-T Rec. H.265 | ISO/IEC 23008-2 "High Efficiency Video Coding"
+
+:author:    International Telecommunication Union (http://www.itu.ch), International Organisation for Standardisation (http://www.iso.ch)
+
 .. _jfif:
 
 JFIF
diff --git a/Documentation/media/uapi/v4l/buffer.rst b/Documentation/media/uapi/v4l/buffer.rst
index 1cbd9cde..9149b57 100644
--- a/Documentation/media/uapi/v4l/buffer.rst
+++ b/Documentation/media/uapi/v4l/buffer.rst
@@ -607,6 +607,19 @@
 	applications shall use this flag for output buffers if the data in
 	this buffer has not been created by the CPU but by some
 	DMA-capable unit, in which case caches have not been used.
+    * .. _`V4L2-BUF-FLAG-M2M-HOLD-CAPTURE-BUF`:
+
+      - ``V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF``
+      - 0x00000200
+      - Only valid if ``V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF`` is
+	set. It is typically used with stateless decoders where multiple
+	output buffers each decode to a slice of the decoded frame.
+	Applications can set this flag when queueing the output buffer
+	to prevent the driver from dequeueing the capture buffer after
+	the output buffer has been decoded (i.e. the capture buffer is
+	'held'). If the timestamp of this output buffer differs from that
+	of the previous output buffer, then that indicates the start of a
+	new frame and the previously held capture buffer is dequeued.
     * .. _`V4L2-BUF-FLAG-LAST`:
 
       - ``V4L2_BUF_FLAG_LAST``
diff --git a/Documentation/media/uapi/v4l/ext-ctrls-codec.rst b/Documentation/media/uapi/v4l/ext-ctrls-codec.rst
index bc5dd8e..03a40fd 100644
--- a/Documentation/media/uapi/v4l/ext-ctrls-codec.rst
+++ b/Documentation/media/uapi/v4l/ext-ctrls-codec.rst
@@ -756,6 +756,14 @@
       - Level 5.0
     * - ``V4L2_MPEG_VIDEO_H264_LEVEL_5_1``
       - Level 5.1
+    * - ``V4L2_MPEG_VIDEO_H264_LEVEL_5_2``
+      - Level 5.2
+    * - ``V4L2_MPEG_VIDEO_H264_LEVEL_6_0``
+      - Level 6.0
+    * - ``V4L2_MPEG_VIDEO_H264_LEVEL_6_1``
+      - Level 6.1
+    * - ``V4L2_MPEG_VIDEO_H264_LEVEL_6_2``
+      - Level 6.2
 
 
 
@@ -868,6 +876,8 @@
       - Stereo High profile
     * - ``V4L2_MPEG_VIDEO_H264_PROFILE_MULTIVIEW_HIGH``
       - Multiview High profile
+    * - ``V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH``
+      - Constrained High profile
 
 
 
diff --git a/Documentation/media/uapi/v4l/vidioc-decoder-cmd.rst b/Documentation/media/uapi/v4l/vidioc-decoder-cmd.rst
index 57f0066..f1a5048 100644
--- a/Documentation/media/uapi/v4l/vidioc-decoder-cmd.rst
+++ b/Documentation/media/uapi/v4l/vidioc-decoder-cmd.rst
@@ -208,7 +208,15 @@
 	been started yet, the driver will return an ``EPERM`` error code. When
 	the decoder is already running, this command does nothing. No
 	flags are defined for this command.
-
+    * - ``V4L2_DEC_CMD_FLUSH``
+      - 4
+      - Flush any held capture buffers. Only valid for stateless decoders.
+	This command is typically used when the application reached the
+	end of the stream and the last output buffer had the
+	``V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF`` flag set. This would prevent
+	dequeueing the capture buffer containing the last decoded frame.
+	So this command can be used to explicitly flush that final decoded
+	frame. This command does nothing if there are no held capture buffers.
 
 Return Value
 ============
diff --git a/Documentation/media/uapi/v4l/vidioc-queryctrl.rst b/Documentation/media/uapi/v4l/vidioc-queryctrl.rst
index a3d56ff..c0b59a5f 100644
--- a/Documentation/media/uapi/v4l/vidioc-queryctrl.rst
+++ b/Documentation/media/uapi/v4l/vidioc-queryctrl.rst
@@ -473,6 +473,24 @@
       - n/a
       - A struct :c:type:`v4l2_ctrl_h264_decode_params`, containing H264
 	decode parameters for stateless video decoders.
+    * - ``V4L2_CTRL_TYPE_HEVC_SPS``
+      - n/a
+      - n/a
+      - n/a
+      - A struct :c:type:`v4l2_ctrl_hevc_sps`, containing HEVC Sequence
+	Parameter Set for stateless video decoders.
+    * - ``V4L2_CTRL_TYPE_HEVC_PPS``
+      - n/a
+      - n/a
+      - n/a
+      - A struct :c:type:`v4l2_ctrl_hevc_pps`, containing HEVC Picture
+	Parameter Set for stateless video decoders.
+    * - ``V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS``
+      - n/a
+      - n/a
+      - n/a
+      - A struct :c:type:`v4l2_ctrl_hevc_slice_params`, containing HEVC
+	slice parameters for stateless video decoders.
 
 .. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|
 
diff --git a/Documentation/media/uapi/v4l/vidioc-reqbufs.rst b/Documentation/media/uapi/v4l/vidioc-reqbufs.rst
index d7faef1..d0c643d 100644
--- a/Documentation/media/uapi/v4l/vidioc-reqbufs.rst
+++ b/Documentation/media/uapi/v4l/vidioc-reqbufs.rst
@@ -125,6 +125,7 @@
 .. _V4L2-BUF-CAP-SUPPORTS-DMABUF:
 .. _V4L2-BUF-CAP-SUPPORTS-REQUESTS:
 .. _V4L2-BUF-CAP-SUPPORTS-ORPHANED-BUFS:
+.. _V4L2-BUF-CAP-SUPPORTS-M2M-HOLD-CAPTURE-BUF:
 
 .. cssclass:: longtable
 
@@ -150,6 +151,11 @@
       - The kernel allows calling :ref:`VIDIOC_REQBUFS` while buffers are still
         mapped or exported via DMABUF. These orphaned buffers will be freed
         when they are unmapped or when the exported DMABUF fds are closed.
+    * - ``V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF``
+      - 0x00000020
+      - Only valid for stateless decoders. If set, then userspace can set the
+        ``V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF`` flag to hold off on returning the
+	capture buffer until the OUTPUT timestamp changes.
 
 Return Value
 ============
diff --git a/Documentation/media/videodev2.h.rst.exceptions b/Documentation/media/videodev2.h.rst.exceptions
index adeb6b7..a79028e 100644
--- a/Documentation/media/videodev2.h.rst.exceptions
+++ b/Documentation/media/videodev2.h.rst.exceptions
@@ -434,6 +434,7 @@
 replace define V4L2_DEC_CMD_STOP decoder-cmds
 replace define V4L2_DEC_CMD_PAUSE decoder-cmds
 replace define V4L2_DEC_CMD_RESUME decoder-cmds
+replace define V4L2_DEC_CMD_FLUSH decoder-cmds
 
 replace define V4L2_DEC_CMD_START_MUTE_AUDIO decoder-cmds
 replace define V4L2_DEC_CMD_PAUSE_TO_BLACK decoder-cmds
diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt
index 8af3771..e37f809 100644
--- a/Documentation/networking/ip-sysctl.txt
+++ b/Documentation/networking/ip-sysctl.txt
@@ -939,6 +939,19 @@
 
 	Default: Empty
 
+ip_local_unbindable_ports - list of comma separated ranges
+	Specify the ports which are not directly bind()able.
+
+	Usually you would use this to block the use of ports which
+	are invalid due to something outside of the control of the
+	kernel.  For example a port stolen by the nic for serial
+	console, remote power management or debugging.
+
+	There's a relatively high chance you will also want to list
+	these ports in 'ip_local_reserved_ports' to prevent autobinding.
+
+	Default: Empty
+
 ip_unprivileged_port_start - INTEGER
 	This is a per-namespace sysctl.  It defines the first
 	unprivileged port in the network namespace.  Privileged ports
diff --git a/Documentation/usb/index.rst b/Documentation/usb/index.rst
index e55386a..370d1e0 100644
--- a/Documentation/usb/index.rst
+++ b/Documentation/usb/index.rst
@@ -23,6 +23,7 @@
     mtouchusb
     ohci
     rio
+    raw-gadget
     usbip_protocol
     usbmon
     usb-serial
diff --git a/Documentation/usb/raw-gadget.rst b/Documentation/usb/raw-gadget.rst
new file mode 100644
index 0000000..68d879a
--- /dev/null
+++ b/Documentation/usb/raw-gadget.rst
@@ -0,0 +1,84 @@
+==============
+USB Raw Gadget
+==============
+
+USB Raw Gadget is a kernel module that provides a userspace interface for
+the USB Gadget subsystem. Essentially it allows to emulate USB devices
+from userspace. Enabled with CONFIG_USB_RAW_GADGET. Raw Gadget is
+currently a strictly debugging feature and shouldn't be used in
+production, use GadgetFS instead.
+
+Comparison to GadgetFS
+~~~~~~~~~~~~~~~~~~~~~~
+
+Raw Gadget is similar to GadgetFS, but provides a more low-level and
+direct access to the USB Gadget layer for the userspace. The key
+differences are:
+
+1. Every USB request is passed to the userspace to get a response, while
+   GadgetFS responds to some USB requests internally based on the provided
+   descriptors. However note, that the UDC driver might respond to some
+   requests on its own and never forward them to the Gadget layer.
+
+2. GadgetFS performs some sanity checks on the provided USB descriptors,
+   while Raw Gadget allows you to provide arbitrary data as responses to
+   USB requests.
+
+3. Raw Gadget provides a way to select a UDC device/driver to bind to,
+   while GadgetFS currently binds to the first available UDC.
+
+4. Raw Gadget explicitly exposes information about endpoints addresses and
+   capabilities allowing a user to write UDC-agnostic gadgets.
+
+5. Raw Gadget has ioctl-based interface instead of a filesystem-based one.
+
+Userspace interface
+~~~~~~~~~~~~~~~~~~~
+
+To create a Raw Gadget instance open /dev/raw-gadget. Multiple raw-gadget
+instances (bound to different UDCs) can be used at the same time. The
+interaction with the opened file happens through the ioctl() calls, see
+comments in include/uapi/linux/usb/raw_gadget.h for details.
+
+The typical usage of Raw Gadget looks like:
+
+1. Open Raw Gadget instance via /dev/raw-gadget.
+2. Initialize the instance via USB_RAW_IOCTL_INIT.
+3. Launch the instance with USB_RAW_IOCTL_RUN.
+4. In a loop issue USB_RAW_IOCTL_EVENT_FETCH calls to receive events from
+   Raw Gadget and react to those depending on what kind of USB device
+   needs to be emulated.
+
+Note, that some UDC drivers have fixed addresses assigned to endpoints, and
+therefore arbitrary endpoint addresses can't be used in the descriptors.
+Nevertheles, Raw Gadget provides a UDC-agnostic way to write USB gadgets.
+Once a USB_RAW_EVENT_CONNECT event is received via USB_RAW_IOCTL_EVENT_FETCH,
+the USB_RAW_IOCTL_EPS_INFO ioctl can be used to find out information about
+endpoints that the UDC driver has. Based on that information, the user must
+chose UDC endpoints that will be used for the gadget being emulated, and
+properly assign addresses in endpoint descriptors.
+
+You can find usage examples (along with a test suite) here:
+
+https://github.com/xairy/raw-gadget
+
+Internal details
+~~~~~~~~~~~~~~~~
+
+Currently every endpoint read/write ioctl submits a USB request and waits until
+its completion. This is the desired mode for coverage-guided fuzzing (as we'd
+like all USB request processing happen during the lifetime of a syscall),
+and must be kept in the implementation. (This might be slow for real world
+applications, thus the O_NONBLOCK improvement suggestion below.)
+
+Potential future improvements
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- Report more events (suspend, resume, etc.) through USB_RAW_IOCTL_EVENT_FETCH.
+
+- Support O_NONBLOCK I/O.
+
+- Support USB 3 features (accept SS endpoint companion descriptor when
+  enabling endpoints; allow providing stream_id for bulk transfers).
+
+- Support ISO transfer features (expose frame_number for completed requests).
diff --git a/Kconfig b/Kconfig
index e10b3ee..745bc77 100644
--- a/Kconfig
+++ b/Kconfig
@@ -5,8 +5,6 @@
 #
 mainmenu "Linux/$(ARCH) $(KERNELVERSION) Kernel Configuration"
 
-comment "Compiler: $(CC_VERSION_TEXT)"
-
 source "scripts/Kconfig.include"
 
 source "init/Kconfig"
diff --git a/MAINTAINERS b/MAINTAINERS
index 1407008..de51b21 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2128,7 +2128,7 @@
 F:	drivers/phy/qualcomm/
 F:	drivers/power/*/msm*
 F:	drivers/reset/reset-qcom-*
-F:	drivers/scsi/ufs/ufs-qcom.*
+F:	drivers/scsi/ufs/ufs-qcom*
 F:	drivers/spi/spi-qup.c
 F:	drivers/spi/spi-geni-qcom.c
 F:	drivers/spi/spi-qcom-qspi.c
@@ -4940,6 +4940,24 @@
 F:	Documentation/driver-api/dma-buf.rst
 T:	git git://anongit.freedesktop.org/drm/drm-misc
 
+DMA-BUF HEAPS FRAMEWORK
+M:	Sumit Semwal <sumit.semwal@linaro.org>
+R:	Andrew F. Davis <afd@ti.com>
+R:	Benjamin Gaignard <benjamin.gaignard@linaro.org>
+R:	Liam Mark <lmark@codeaurora.org>
+R:	Laura Abbott <labbott@redhat.com>
+R:	Brian Starkey <Brian.Starkey@arm.com>
+R:	John Stultz <john.stultz@linaro.org>
+S:	Maintained
+L:	linux-media@vger.kernel.org
+L:	dri-devel@lists.freedesktop.org
+L:	linaro-mm-sig@lists.linaro.org (moderated for non-subscribers)
+F:	include/uapi/linux/dma-heap.h
+F:	include/linux/dma-heap.h
+F:	drivers/dma-buf/dma-heap.c
+F:	drivers/dma-buf/heaps/*
+T:	git git://anongit.freedesktop.org/drm/drm-misc
+
 DMA GENERIC OFFLOAD ENGINE SUBSYSTEM
 M:	Vinod Koul <vkoul@kernel.org>
 L:	dmaengine@vger.kernel.org
@@ -11508,6 +11526,12 @@
 F:	Documentation/scsi/NinjaSCSI.txt
 F:	drivers/scsi/nsp32*
 
+NINTENDO HID DRIVER
+M:	Daniel J. Ogorchock <djogorchock@gmail.com>
+L:	linux-input@vger.kernel.org
+S:	Maintained
+F:	drivers/hid/hid-nintendo*
+
 NIOS2 ARCHITECTURE
 M:	Ley Foon Tan <lftan@altera.com>
 L:	nios2-dev@lists.rocketboards.org (moderated for non-subscribers)
@@ -14608,6 +14632,7 @@
 W:	https://github.com/SELinuxProject
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/selinux.git
 S:	Supported
+F:	include/trace/events/avc.h
 F:	include/uapi/linux/selinux_netlink.h
 F:	security/selinux/
 F:	scripts/selinux/
@@ -15540,6 +15565,15 @@
 S:	Supported
 F:	drivers/net/ethernet/stmicro/stmmac/
 
+EXTRA BOOT CONFIG
+M:	Masami Hiramatsu <mhiramat@kernel.org>
+S:	Maintained
+F:	lib/bootconfig.c
+F:	fs/proc/bootconfig.c
+F:	include/linux/bootconfig.h
+F:	tools/bootconfig/*
+F:	Documentation/admin-guide/bootconfig.rst
+
 SUN3/3X
 M:	Sam Creasey <sammy@sammy.net>
 W:	http://sammy.net/sun3/
@@ -17584,6 +17618,14 @@
 S:	Maintained
 F:	drivers/gpio/gpio-ws16c48.c
 
+WIREGUARD SECURE NETWORK TUNNEL
+M:	Jason A. Donenfeld <Jason@zx2c4.com>
+S:	Maintained
+F:	drivers/net/wireguard/
+F:	tools/testing/selftests/wireguard/
+L:	wireguard@lists.zx2c4.com
+L:	netdev@vger.kernel.org
+
 WISTRON LAPTOP BUTTON DRIVER
 M:	Miloslav Trmac <mitr@volny.cz>
 S:	Maintained
diff --git a/Makefile b/Makefile
index f564427..ffc7148 100644
--- a/Makefile
+++ b/Makefile
@@ -420,6 +420,7 @@
 READELF		= llvm-readelf
 OBJSIZE		= llvm-size
 STRIP		= llvm-strip
+KBUILD_HOSTLDFLAGS	+= -fuse-ld=lld --rtlib=compiler-rt
 else
 CC		= $(CROSS_COMPILE)gcc
 LD		= $(CROSS_COMPILE)ld
@@ -668,6 +669,16 @@
 export RETPOLINE_CFLAGS
 export RETPOLINE_VDSO_CFLAGS
 
+# Make toolchain changes before including arch/$(SRCARCH)/Makefile to ensure
+# ar/cc/ld-* macros return correct values.
+ifdef CONFIG_LTO_CLANG
+# LTO produces LLVM IR instead of object files. Use llvm-ar and llvm-nm, so we
+# can process these.
+AR		:= llvm-ar
+LLVM_NM		:= llvm-nm
+export LLVM_NM
+endif
+
 include arch/$(SRCARCH)/Makefile
 
 ifdef need-config
@@ -789,11 +800,20 @@
 endif
 endif
 
-# Initialize all stack variables with a pattern, if desired.
-ifdef CONFIG_INIT_STACK_ALL
+# Initialize all stack variables with a 0xAA pattern.
+ifdef CONFIG_INIT_STACK_ALL_PATTERN
 KBUILD_CFLAGS	+= -ftrivial-auto-var-init=pattern
 endif
 
+# Initialize all stack variables with a zero value.
+ifdef CONFIG_INIT_STACK_ALL_ZERO
+# Future support for zero initialization is still being debated, see
+# https://bugs.llvm.org/show_bug.cgi?id=45497. These flags are subject to being
+# renamed or dropped.
+KBUILD_CFLAGS	+= -ftrivial-auto-var-init=zero
+KBUILD_CFLAGS	+= -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang
+endif
+
 DEBUG_CFLAGS	:= $(call cc-option, -fno-var-tracking-assignments)
 
 ifdef CONFIG_DEBUG_INFO
@@ -864,6 +884,58 @@
 KBUILD_CFLAGS += $(call cc-option, -flive-patching=inline-clone)
 endif
 
+ifdef CONFIG_SHADOW_CALL_STACK
+CC_FLAGS_SCS	:= -fsanitize=shadow-call-stack
+KBUILD_CFLAGS	+= $(CC_FLAGS_SCS)
+export CC_FLAGS_SCS
+endif
+
+ifdef CONFIG_LTO_CLANG
+ifdef CONFIG_THINLTO
+CC_FLAGS_LTO_CLANG := -flto=thin $(call cc-option, -fsplit-lto-unit)
+KBUILD_LDFLAGS	+= --thinlto-cache-dir=.thinlto-cache
+else
+CC_FLAGS_LTO_CLANG := -flto
+endif
+CC_FLAGS_LTO_CLANG += -fvisibility=default
+
+# Limit inlining across translation units to reduce binary size
+LD_FLAGS_LTO_CLANG := -mllvm -import-instr-limit=5
+
+KBUILD_LDFLAGS += $(LD_FLAGS_LTO_CLANG)
+KBUILD_LDFLAGS_MODULE += $(LD_FLAGS_LTO_CLANG)
+
+KBUILD_LDS_MODULE += scripts/module-lto.lds
+endif
+
+ifdef CONFIG_LTO
+CC_FLAGS_LTO	:= $(CC_FLAGS_LTO_CLANG)
+KBUILD_CFLAGS	+= $(CC_FLAGS_LTO)
+export CC_FLAGS_LTO
+endif
+
+ifdef CONFIG_CFI_CLANG
+CC_FLAGS_CFI	:= -fsanitize=cfi \
+		   -fno-sanitize-cfi-canonical-jump-tables \
+		   -fno-sanitize-blacklist
+
+ifdef CONFIG_MODULES
+CC_FLAGS_CFI	+= -fsanitize-cfi-cross-dso
+endif
+
+ifdef CONFIG_CFI_PERMISSIVE
+CC_FLAGS_CFI	+= -fsanitize-recover=cfi \
+		   -fno-sanitize-trap=cfi
+else
+CC_FLAGS_CFI	+= -ftrap-function=__ubsan_handle_cfi_check_fail_abort
+endif
+
+# If LTO flags are filtered out, we must also filter out CFI.
+CC_FLAGS_LTO	+= $(CC_FLAGS_CFI)
+KBUILD_CFLAGS	+= $(CC_FLAGS_CFI)
+export CC_FLAGS_CFI
+endif
+
 # arch Makefile may override CC so keep this after arch Makefile is included
 NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
 
@@ -1022,7 +1094,8 @@
 
 ifdef CONFIG_STACK_VALIDATION
   has_libelf := $(call try-run,\
-		echo "int main() {}" | $(HOSTCC) -xc -o /dev/null $(HOST_LIBELF_LIBS) -,1,0)
+                  echo "int main() {}" | \
+                  $(HOSTCC) $(KBUILD_HOSTCFLAGS) -xc -o /dev/null $(KBUILD_HOSTLDFLAGS) $(HOST_LIBELF_LIBS) -,1,0)
   ifeq ($(has_libelf),1)
     objtool_target := tools/objtool FORCE
   else
@@ -1085,9 +1158,12 @@
 
 autoksyms_h := $(if $(CONFIG_TRIM_UNUSED_KSYMS), include/generated/autoksyms.h)
 
+quiet_cmd_autoksyms_h = GEN     $@
+      cmd_autoksyms_h = mkdir -p $(dir $@); \
+			$(CONFIG_SHELL) $(srctree)/scripts/gen_autoksyms.sh $@
+
 $(autoksyms_h):
-	$(Q)mkdir -p $(dir $@)
-	$(Q)touch $@
+	$(call cmd,autoksyms_h)
 
 ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
 
@@ -1106,7 +1182,8 @@
 $(sort $(vmlinux-deps)): descend ;
 
 filechk_kernel.release = \
-	echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
+	echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion \
+		$(srctree) $(BRANCH) $(KMI_GENERATION))"
 
 # Store (new) KERNELRELEASE string in include/config/kernel.release
 include/config/kernel.release: FORCE
@@ -1166,12 +1243,17 @@
 # needs to be updated, so this check is forced on all builds
 
 uts_len := 64
+ifneq (,$(BUILD_NUMBER))
+	UTS_RELEASE=$(KERNELRELEASE)-ab$(BUILD_NUMBER)
+else
+	UTS_RELEASE=$(KERNELRELEASE)
+endif
 define filechk_utsrelease.h
-	if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \
-	  echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2;    \
-	  exit 1;                                                         \
-	fi;                                                               \
-	echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"
+	if [ `echo -n "$(UTS_RELEASE)" | wc -c ` -gt $(uts_len) ]; then \
+		echo '"$(UTS_RELEASE)" exceeds $(uts_len) characters' >&2;    \
+		exit 1;                                                       \
+	fi;                                                             \
+	echo \#define UTS_RELEASE \"$(UTS_RELEASE)\"
 endef
 
 define filechk_version.h
@@ -1748,7 +1830,8 @@
 		-o -name modules.builtin -o -name '.tmp_*.o.*' \
 		-o -name '*.c.[012]*.*' \
 		-o -name '*.ll' \
-		-o -name '*.gcno' \) -type f -print | xargs rm -f
+		-o -name '*.gcno' \
+		-o -name '*.*.symversions' \) -type f -print | xargs rm -f
 
 # Generate tags for editors
 # ---------------------------------------------------------------------------
@@ -1807,7 +1890,8 @@
 	$(PERL) $(srctree)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
 
 kernelrelease:
-	@echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
+	@echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion \
+		$(srctree) $(BRANCH) $(KMI_GENERATION))"
 
 kernelversion:
 	@echo $(KERNELVERSION)
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..7012373
--- /dev/null
+++ b/README.md
@@ -0,0 +1,142 @@
+# How do I submit patches to Android Common Kernels
+
+1. BEST: Make all of your changes to upstream Linux. If appropriate, backport to the stable releases.
+   These patches will be merged automatically in the corresponding common kernels. If the patch is already
+   in upstream Linux, post a backport of the patch that conforms to the patch requirements below.
+
+2. LESS GOOD: Develop your patches out-of-tree (from an upstream Linux point-of-view). Unless these are
+   fixing an Android-specific bug, these are very unlikely to be accepted unless they have been
+   coordinated with kernel-team@android.com. If you want to proceed, post a patch that conforms to the
+   patch requirements below.
+
+# Common Kernel patch requirements
+
+- All patches must conform to the Linux kernel coding standards and pass `script/checkpatch.pl`
+- Patches shall not break gki_defconfig or allmodconfig builds for arm, arm64, x86, x86_64 architectures
+(see  https://source.android.com/setup/build/building-kernels)
+- If the patch is not merged from an upstream branch, the subject must be tagged with the type of patch:
+`UPSTREAM:`, `BACKPORT:`, `FROMGIT:`, `FROMLIST:`, or `ANDROID:`.
+- All patches must have a `Change-Id:` tag (see https://gerrit-review.googlesource.com/Documentation/user-changeid.html)
+- If an Android bug has been assigned, there must be a `Bug:` tag.
+- All patches must have a `Signed-off-by:` tag by the author and the submitter
+
+Additional requirements are listed below based on patch type
+
+## Requirements for backports from mainline Linux: `UPSTREAM:`, `BACKPORT:`
+
+- If the patch is a cherry-pick from Linux mainline with no changes at all
+    - tag the patch subject with `UPSTREAM:`.
+    - add upstream commit information with a `(cherry-picked from ...)` line
+    - Example:
+        - if the upstream commit message is
+```
+        important patch from upstream
+
+        This is the detailed description of the important patch
+
+        Signed-off-by: Fred Jones <fred.jones@foo.org>
+```
+        - then Joe Smith would upload the patch for the common kernel as
+```
+        UPSTREAM: important patch from upstream
+
+        This is the detailed description of the important patch
+
+        Signed-off-by: Fred Jones <fred.jones@foo.org>
+
+        Bug: 135791357
+        Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
+        (cherry-picked from c31e73121f4c1ec41143423ac6ce3ce6dafdcec1)
+        Signed-off-by: Joe Smith <joe.smith@foo.org>
+```
+
+- If the patch requires any changes from the upstream version, tag the patch with `BACKPORT:`
+instead of `UPSTREAM:`.
+    - use the same tags as `UPSTREAM:`
+    - add comments about the changes under the `(cherry-picked from ...)` line
+    - Example:
+```
+        BACKPORT: important patch from upstream
+
+        This is the detailed description of the important patch
+
+        Signed-off-by: Fred Jones <fred.jones@foo.org>
+
+        Bug: 135791357
+        Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
+        (cherry-picked from c31e73121f4c1ec41143423ac6ce3ce6dafdcec1)
+        [ Resolved minor conflict in drivers/foo/bar.c ]
+        Signed-off-by: Joe Smith <joe.smith@foo.org>
+```
+
+## Requirements for other backports: `FROMGIT:`, `FROMLIST:`,
+
+- If the patch has been merged into an upstream maintainer tree, but has not yet
+been merged into Linux mainline
+    - tag the patch subject with `FROMGIT:`
+    - add info on where the patch came from as `(cherry picked from commit <sha1> <repo> <branch>)`. This
+must be a stable maintainer branch (not rebased, so don't use `linux-next` for example).
+    - if changes were required, use `BACKPORT: FROMGIT:`
+    - Example:
+        - if the commit message in the maintainer tree is
+```
+        important patch from upstream
+
+        This is the detailed description of the important patch
+
+        Signed-off-by: Fred Jones <fred.jones@foo.org>
+```
+        - then Joe Smith would upload the patch for the common kernel as
+```
+        FROMGIT: important patch from upstream
+
+        This is the detailed description of the important patch
+
+        Signed-off-by: Fred Jones <fred.jones@foo.org>
+
+        Bug: 135791357
+        (cherry picked from commit 878a2fd9de10b03d11d2f622250285c7e63deace
+         https://git.kernel.org/pub/scm/linux/kernel/git/foo/bar.git test-branch)
+        Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
+        Signed-off-by: Joe Smith <joe.smith@foo.org>
+```
+
+
+- If the patch has been submitted to LKML, but not accepted into any maintainer tree
+    - tag the patch subject with `FROMLIST:`
+    - add a `Link:` tag with a link to the submittal on lore.kernel.org
+    - if changes were required, use `BACKPORT: FROMLIST:`
+    - Example:
+```
+        FROMLIST: important patch from upstream
+
+        This is the detailed description of the important patch
+
+        Signed-off-by: Fred Jones <fred.jones@foo.org>
+
+        Bug: 135791357
+        Link: https://lore.kernel.org/lkml/20190619171517.GA17557@someone.com/
+        Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
+        Signed-off-by: Joe Smith <joe.smith@foo.org>
+```
+
+## Requirements for Android-specific patches: `ANDROID:`
+
+- If the patch is fixing a bug to Android-specific code
+    - tag the patch subject with `ANDROID:`
+    - add a `Fixes:` tag that cites the patch with the bug
+    - Example:
+```
+        ANDROID: fix android-specific bug in foobar.c
+
+        This is the detailed description of the important fix
+
+        Fixes: 1234abcd2468 ("foobar: add cool feature")
+        Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
+        Signed-off-by: Joe Smith <joe.smith@foo.org>
+```
+
+- If the patch is a new feature
+    - tag the patch subject with `ANDROID:`
+    - add a `Bug:` tag with the Android bug (required for android-specific features)
+
diff --git a/android/abi_gki_aarch64 b/android/abi_gki_aarch64
new file mode 100644
index 0000000..57914f29
--- /dev/null
+++ b/android/abi_gki_aarch64
@@ -0,0 +1,4 @@
+[abi_symbol_list]
+# commonly used symbols
+  module_layout
+  __put_task_struct
diff --git a/android/abi_gki_aarch64.xml b/android/abi_gki_aarch64.xml
new file mode 100644
index 0000000..03d7984
--- /dev/null
+++ b/android/abi_gki_aarch64.xml
@@ -0,0 +1,179148 @@
+<abi-corpus-group architecture='elf-arm-aarch64'>
+  <abi-corpus path='vmlinux' architecture='elf-arm-aarch64'>
+    <elf-function-symbols>
+      <elf-symbol name='PDE_DATA' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3858f69b'/>
+      <elf-symbol name='ZSTD_CCtxWorkspaceBound' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xefe4f679'/>
+      <elf-symbol name='ZSTD_DCtxWorkspaceBound' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5ac3e33'/>
+      <elf-symbol name='ZSTD_compressCCtx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a107de2'/>
+      <elf-symbol name='ZSTD_decompressDCtx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a1bac9c'/>
+      <elf-symbol name='ZSTD_getParams' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe41476d9'/>
+      <elf-symbol name='ZSTD_initCCtx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe27a2dd'/>
+      <elf-symbol name='ZSTD_initDCtx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x578a408b'/>
+      <elf-symbol name='__ClearPageMovable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb155cc42'/>
+      <elf-symbol name='__SetPageMovable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6c0c426'/>
+      <elf-symbol name='___pskb_trim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6ea06cf'/>
+      <elf-symbol name='___ratelimit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d24c881'/>
+      <elf-symbol name='__alloc_disk_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc115f4cc'/>
+      <elf-symbol name='__alloc_pages_nodemask' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c44eb5e'/>
+      <elf-symbol name='__alloc_percpu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x949f7342'/>
+      <elf-symbol name='__alloc_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x84ac9233'/>
+      <elf-symbol name='__arch_clear_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55686530'/>
+      <elf-symbol name='__arch_copy_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf507de1'/>
+      <elf-symbol name='__arch_copy_in_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9957204'/>
+      <elf-symbol name='__arch_copy_to_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b2941b2'/>
+      <elf-symbol name='__arm_smccc_hvc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50f85302'/>
+      <elf-symbol name='__arm_smccc_smc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf93aae46'/>
+      <elf-symbol name='__bdevname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe569f4be'/>
+      <elf-symbol name='__bitmap_andnot' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xadfdfcef'/>
+      <elf-symbol name='__bitmap_clear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x922f45a6'/>
+      <elf-symbol name='__bitmap_parse' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4df119fa'/>
+      <elf-symbol name='__bitmap_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x615911d7'/>
+      <elf-symbol name='__bitmap_subset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd61eeee'/>
+      <elf-symbol name='__bitmap_weight' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63c4d61f'/>
+      <elf-symbol name='__blk_mq_end_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c5a5d76'/>
+      <elf-symbol name='__blkdev_issue_discard' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bd4cd20'/>
+      <elf-symbol name='__blkdev_issue_zeroout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb97e0806'/>
+      <elf-symbol name='__blockdev_direct_IO' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58499573'/>
+      <elf-symbol name='__bread_gfp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x107f459b'/>
+      <elf-symbol name='__breadahead' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7009ffc7'/>
+      <elf-symbol name='__brelse' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5160507'/>
+      <elf-symbol name='__cfg80211_alloc_event_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa24ea2f'/>
+      <elf-symbol name='__cfg80211_alloc_reply_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1140dbe0'/>
+      <elf-symbol name='__cfg80211_send_event_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44b178dd'/>
+      <elf-symbol name='__cfi_slowpath' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2cd90edd'/>
+      <elf-symbol name='__check_object_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88db9f48'/>
+      <elf-symbol name='__class_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3957aa0'/>
+      <elf-symbol name='__class_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8666bcb9'/>
+      <elf-symbol name='__clk_determine_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ea077b9'/>
+      <elf-symbol name='__clk_get_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe639b4ae'/>
+      <elf-symbol name='__clk_get_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc569d8ce'/>
+      <elf-symbol name='__clk_is_enabled' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6a4a872'/>
+      <elf-symbol name='__clk_mux_determine_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4cef7db2'/>
+      <elf-symbol name='__clk_mux_determine_rate_closest' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88247f7f'/>
+      <elf-symbol name='__clocksource_register_scale' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd7d0e90b'/>
+      <elf-symbol name='__close_fd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf77ae13'/>
+      <elf-symbol name='__compat_only_sysfs_link_entry_to_kobj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58d41514'/>
+      <elf-symbol name='__const_udelay' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeae3dfd6'/>
+      <elf-symbol name='__cpufreq_driver_target' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4e144cf'/>
+      <elf-symbol name='__cpuhp_remove_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x627f576f'/>
+      <elf-symbol name='__cpuhp_setup_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3d6084a'/>
+      <elf-symbol name='__cpuhp_setup_state_cpuslocked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82d07161'/>
+      <elf-symbol name='__cpuhp_state_add_instance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56dbf27e'/>
+      <elf-symbol name='__cpuhp_state_remove_instance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8b3f0d8'/>
+      <elf-symbol name='__crypto_memneq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a44f8cb'/>
+      <elf-symbol name='__crypto_xor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3f12f69'/>
+      <elf-symbol name='__dev_get_by_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda22b46e'/>
+      <elf-symbol name='__dev_get_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5e9e50d'/>
+      <elf-symbol name='__dev_kfree_skb_any' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76ad4360'/>
+      <elf-symbol name='__dev_kfree_skb_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a304bbb'/>
+      <elf-symbol name='__devm_iio_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdea3f152'/>
+      <elf-symbol name='__devm_of_phy_provider_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x754a9cf0'/>
+      <elf-symbol name='__devm_regmap_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc329022'/>
+      <elf-symbol name='__devm_regmap_init_i2c' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c756be1'/>
+      <elf-symbol name='__devm_regmap_init_mmio_clk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62beed43'/>
+      <elf-symbol name='__devm_release_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9479642'/>
+      <elf-symbol name='__devm_request_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b3a5b78'/>
+      <elf-symbol name='__devm_reset_control_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81ba710a'/>
+      <elf-symbol name='__dma_request_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a64efc2'/>
+      <elf-symbol name='__do_once_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4198ca95'/>
+      <elf-symbol name='__do_once_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18e60984'/>
+      <elf-symbol name='__drm_atomic_helper_connector_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38588899'/>
+      <elf-symbol name='__drm_atomic_helper_connector_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf3d56102'/>
+      <elf-symbol name='__drm_atomic_helper_connector_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25117e8a'/>
+      <elf-symbol name='__drm_atomic_helper_crtc_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec22c2c3'/>
+      <elf-symbol name='__drm_atomic_helper_crtc_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa66fb0cc'/>
+      <elf-symbol name='__drm_atomic_helper_crtc_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x212cbd34'/>
+      <elf-symbol name='__drm_atomic_helper_plane_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4f4a921'/>
+      <elf-symbol name='__drm_atomic_helper_plane_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe2a3d424'/>
+      <elf-symbol name='__drm_atomic_helper_private_obj_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6197160d'/>
+      <elf-symbol name='__drm_atomic_state_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9cad492'/>
+      <elf-symbol name='__drm_crtc_commit_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae277372'/>
+      <elf-symbol name='__drm_printfn_debug' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf824c7db'/>
+      <elf-symbol name='__drm_printfn_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe317082a'/>
+      <elf-symbol name='__drm_printfn_seq_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfeb953b1'/>
+      <elf-symbol name='__drm_puts_seq_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x513072fe'/>
+      <elf-symbol name='__dynamic_dev_dbg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd660239e'/>
+      <elf-symbol name='__dynamic_pr_debug' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x837b7b09'/>
+      <elf-symbol name='__ethtool_get_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x303529ad'/>
+      <elf-symbol name='__find_get_block' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaae269e1'/>
+      <elf-symbol name='__free_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebbed21e'/>
+      <elf-symbol name='__get_free_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a5cb5ee'/>
+      <elf-symbol name='__get_task_comm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed38e670'/>
+      <elf-symbol name='__getblk_gfp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7837990c'/>
+      <elf-symbol name='__hrtimer_get_remaining' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7bcdbf43'/>
+      <elf-symbol name='__hvc_resize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x376507ce'/>
+      <elf-symbol name='__hw_addr_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf389fe60'/>
+      <elf-symbol name='__hw_addr_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x865029ac'/>
+      <elf-symbol name='__hw_addr_unsync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e9110fa'/>
+      <elf-symbol name='__hwspin_lock_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2007ca2f'/>
+      <elf-symbol name='__hwspin_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54a380d8'/>
+      <elf-symbol name='__i2c_transfer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x323c9e17'/>
+      <elf-symbol name='__ieee80211_schedule_txq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf77c8c5f'/>
+      <elf-symbol name='__iio_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4efe6cdb'/>
+      <elf-symbol name='__iio_trigger_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeab259ba'/>
+      <elf-symbol name='__init_rwsem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9859fe0'/>
+      <elf-symbol name='__init_waitqueue_head' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9a5ea54'/>
+      <elf-symbol name='__insert_inode_hash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x813a5a5d'/>
+      <elf-symbol name='__ion_device_add_heap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1944c01f'/>
+      <elf-symbol name='__ioread32_copy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3801776b'/>
+      <elf-symbol name='__ioremap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b4b2933'/>
+      <elf-symbol name='__iowrite32_copy' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0x2dba276a'/>
+      <elf-symbol name='__ip_select_ident' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2884354'/>
+      <elf-symbol name='__ipv6_addr_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd542439'/>
+      <elf-symbol name='__irq_alloc_descs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5db075d0'/>
+      <elf-symbol name='__irq_domain_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4aba1e37'/>
+      <elf-symbol name='__kfifo_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x139f2189'/>
+      <elf-symbol name='__kfifo_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb760f52'/>
+      <elf-symbol name='__kfifo_from_user_r' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfeebc7c4'/>
+      <elf-symbol name='__kfifo_in' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf23fcb99'/>
+      <elf-symbol name='__kfifo_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd462b55'/>
+      <elf-symbol name='__kfifo_out' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13d0adf7'/>
+      <elf-symbol name='__kfifo_to_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4578f528'/>
+      <elf-symbol name='__kfifo_to_user_r' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2484adc3'/>
+      <elf-symbol name='__kmalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb233a45'/>
+      <elf-symbol name='__kthread_init_worker' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa91ec602'/>
+      <elf-symbol name='__list_add_valid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68f31cbd'/>
+      <elf-symbol name='__list_del_entry_valid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1537255'/>
+      <elf-symbol name='__local_bh_enable_ip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c3fce39'/>
+      <elf-symbol name='__lock_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x90b1527a'/>
+      <elf-symbol name='__lock_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec5792dd'/>
+      <elf-symbol name='__mark_inode_dirty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4bd146c'/>
+      <elf-symbol name='__mdiobus_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbdd784dd'/>
+      <elf-symbol name='__media_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe2b027c4'/>
+      <elf-symbol name='__media_entity_setup_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb957d13'/>
+      <elf-symbol name='__memcpy_fromio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d112304'/>
+      <elf-symbol name='__memcpy_toio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf77555cd'/>
+      <elf-symbol name='__memset_io' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18b48e28'/>
+      <elf-symbol name='__mmc_claim_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3683c3a6'/>
+      <elf-symbol name='__mmc_send_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2820750b'/>
+      <elf-symbol name='__mmdrop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x972ad5e3'/>
+      <elf-symbol name='__module_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8ea3612'/>
+      <elf-symbol name='__msecs_to_jiffies' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f02188f'/>
+      <elf-symbol name='__mutex_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x977f511b'/>
+      <elf-symbol name='__napi_alloc_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4cfcda67'/>
+      <elf-symbol name='__napi_schedule' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x473327b9'/>
+      <elf-symbol name='__ndelay' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf8c695a'/>
+      <elf-symbol name='__netdev_alloc_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b3faed3'/>
+      <elf-symbol name='__netif_set_xps_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54112316'/>
+      <elf-symbol name='__netlink_dump_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14a47de6'/>
+      <elf-symbol name='__netlink_kernel_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x798b0fae'/>
+      <elf-symbol name='__nla_parse' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x984ce9bd'/>
+      <elf-symbol name='__nlmsg_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd093273e'/>
+      <elf-symbol name='__of_reset_control_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a4241f2'/>
+      <elf-symbol name='__pci_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33c2e0d5'/>
+      <elf-symbol name='__platform_driver_probe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e426418'/>
+      <elf-symbol name='__platform_driver_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc587ba98'/>
+      <elf-symbol name='__platform_register_drivers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2db2b166'/>
+      <elf-symbol name='__pm_relax' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30946cbf'/>
+      <elf-symbol name='__pm_runtime_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaec35c43'/>
+      <elf-symbol name='__pm_runtime_idle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa1b092c'/>
+      <elf-symbol name='__pm_runtime_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48edc11b'/>
+      <elf-symbol name='__pm_runtime_set_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcbe3be4b'/>
+      <elf-symbol name='__pm_runtime_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff08f384'/>
+      <elf-symbol name='__pm_runtime_use_autosuspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d00fdf2'/>
+      <elf-symbol name='__pm_stay_awake' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd75cf7cf'/>
+      <elf-symbol name='__printk_ratelimit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6128b5fc'/>
+      <elf-symbol name='__pskb_copy_fclone' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcbafcffb'/>
+      <elf-symbol name='__pskb_pull_tail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf82b9e9'/>
+      <elf-symbol name='__put_cred' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4ea2038'/>
+      <elf-symbol name='__put_net' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9879ea81'/>
+      <elf-symbol name='__put_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe395f1ee'/>
+      <elf-symbol name='__put_task_struct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe500a9db'/>
+      <elf-symbol name='__raw_notifier_call_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf932015f'/>
+      <elf-symbol name='__raw_v4_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40b5ece1'/>
+      <elf-symbol name='__raw_v6_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x428b8c7'/>
+      <elf-symbol name='__rcu_read_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d522714'/>
+      <elf-symbol name='__rcu_read_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2469810f'/>
+      <elf-symbol name='__refrigerator' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4482cdb'/>
+      <elf-symbol name='__register_binfmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2fdd6377'/>
+      <elf-symbol name='__register_chrdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x83e82e58'/>
+      <elf-symbol name='__register_rpmsg_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfc26627'/>
+      <elf-symbol name='__regmap_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71dc280f'/>
+      <elf-symbol name='__release_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1848221d'/>
+      <elf-symbol name='__remove_inode_hash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7bf1dacf'/>
+      <elf-symbol name='__request_module' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa24f23d8'/>
+      <elf-symbol name='__request_percpu_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d9ee2a0'/>
+      <elf-symbol name='__request_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca39ba0'/>
+      <elf-symbol name='__rht_bucket_nested' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0d156e9'/>
+      <elf-symbol name='__rtc_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xccd7cb6b'/>
+      <elf-symbol name='__scsi_device_lookup_by_target' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5efee39b'/>
+      <elf-symbol name='__scsi_execute' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda94fd1e'/>
+      <elf-symbol name='__scsi_print_sense' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf60230db'/>
+      <elf-symbol name='__sdhci_add_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37d49fce'/>
+      <elf-symbol name='__seq_open_private' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53a82348'/>
+      <elf-symbol name='__serio_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1324bae'/>
+      <elf-symbol name='__serio_register_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9d7025c'/>
+      <elf-symbol name='__sg_alloc_table_from_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ed45b39'/>
+      <elf-symbol name='__sg_page_iter_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c9ca58f'/>
+      <elf-symbol name='__sg_page_iter_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xccd4c999'/>
+      <elf-symbol name='__sk_receive_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe96acfd4'/>
+      <elf-symbol name='__skb_ext_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x994aea95'/>
+      <elf-symbol name='__skb_flow_dissect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd76d409'/>
+      <elf-symbol name='__skb_get_hash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf5128e3'/>
+      <elf-symbol name='__skb_gso_segment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb41f484b'/>
+      <elf-symbol name='__skb_pad' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x93a0ade5'/>
+      <elf-symbol name='__sock_recv_ts_and_drops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x31238b05'/>
+      <elf-symbol name='__sock_tx_timestamp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x437a0d6d'/>
+      <elf-symbol name='__spi_alloc_controller' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4bfc8dca'/>
+      <elf-symbol name='__spi_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25ce5b1c'/>
+      <elf-symbol name='__splice_from_pipe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa340e094'/>
+      <elf-symbol name='__spmi_driver_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcac57b0a'/>
+      <elf-symbol name='__stack_chk_fail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0fdf6cb'/>
+      <elf-symbol name='__sw_hweight16' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57674fd7'/>
+      <elf-symbol name='__sw_hweight32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74c134b9'/>
+      <elf-symbol name='__sw_hweight64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f46ced8'/>
+      <elf-symbol name='__sw_hweight8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc3fcbc9'/>
+      <elf-symbol name='__sync_dirty_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaff867d6'/>
+      <elf-symbol name='__sysfs_match_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x169938c1'/>
+      <elf-symbol name='__task_pid_nr_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f62ef8c'/>
+      <elf-symbol name='__tasklet_hi_schedule' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47939e0d'/>
+      <elf-symbol name='__tasklet_schedule' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfaef0ed'/>
+      <elf-symbol name='__trace_bprintk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa20d01ba'/>
+      <elf-symbol name='__trace_puts' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d41e6f5'/>
+      <elf-symbol name='__tty_alloc_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf737d73'/>
+      <elf-symbol name='__tty_insert_flip_char' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b1b653f'/>
+      <elf-symbol name='__ubsan_handle_cfi_check_fail_abort' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf7a4c69'/>
+      <elf-symbol name='__udelay' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e7d6bd0'/>
+      <elf-symbol name='__uio_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f99e086'/>
+      <elf-symbol name='__unregister_chrdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6bc3fbc0'/>
+      <elf-symbol name='__usb_get_extra_descriptor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd36760ef'/>
+      <elf-symbol name='__usecs_to_jiffies' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1969a8e'/>
+      <elf-symbol name='__v4l2_ctrl_modify_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24b99c3e'/>
+      <elf-symbol name='__v4l2_ctrl_s_ctrl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8beca8d8'/>
+      <elf-symbol name='__video_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ff50d35'/>
+      <elf-symbol name='__vmalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcddf45c2'/>
+      <elf-symbol name='__wait_on_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8dfcda7'/>
+      <elf-symbol name='__wake_up' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3eeb2322'/>
+      <elf-symbol name='__warn_printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56470118'/>
+      <elf-symbol name='__xfrm_state_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8de39b59'/>
+      <elf-symbol name='_atomic_dec_and_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf4fdd4d'/>
+      <elf-symbol name='_bcd2bin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6936ffe'/>
+      <elf-symbol name='_bin2bcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x80ca5026'/>
+      <elf-symbol name='_copy_from_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdfa86f34'/>
+      <elf-symbol name='_copy_from_iter_full' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3075fd6'/>
+      <elf-symbol name='_copy_to_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd776f796'/>
+      <elf-symbol name='_dev_crit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72414651'/>
+      <elf-symbol name='_dev_emerg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd3bfff0'/>
+      <elf-symbol name='_dev_err' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x199f84e8'/>
+      <elf-symbol name='_dev_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb86ac057'/>
+      <elf-symbol name='_dev_notice' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8481c1'/>
+      <elf-symbol name='_dev_warn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2264182'/>
+      <elf-symbol name='_raw_read_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32ae5741'/>
+      <elf-symbol name='_raw_read_lock_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x150e3657'/>
+      <elf-symbol name='_raw_read_lock_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8595510'/>
+      <elf-symbol name='_raw_read_lock_irqsave' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x736b5662'/>
+      <elf-symbol name='_raw_read_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xef2993f4'/>
+      <elf-symbol name='_raw_read_unlock_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad10eb8'/>
+      <elf-symbol name='_raw_read_unlock_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8f375c1'/>
+      <elf-symbol name='_raw_read_unlock_irqrestore' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa16c8613'/>
+      <elf-symbol name='_raw_spin_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdbf17652'/>
+      <elf-symbol name='_raw_spin_lock_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3635b01'/>
+      <elf-symbol name='_raw_spin_lock_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47941711'/>
+      <elf-symbol name='_raw_spin_lock_irqsave' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51760917'/>
+      <elf-symbol name='_raw_spin_trylock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c3253ec'/>
+      <elf-symbol name='_raw_spin_trylock_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x963dcba1'/>
+      <elf-symbol name='_raw_spin_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x301fa007'/>
+      <elf-symbol name='_raw_spin_unlock_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49c41a57'/>
+      <elf-symbol name='_raw_spin_unlock_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5664491'/>
+      <elf-symbol name='_raw_spin_unlock_irqrestore' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3812050a'/>
+      <elf-symbol name='_raw_write_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a245f6d'/>
+      <elf-symbol name='_raw_write_lock_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1ed698d'/>
+      <elf-symbol name='_raw_write_lock_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9eab8d85'/>
+      <elf-symbol name='_raw_write_lock_irqsave' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe25ee9d3'/>
+      <elf-symbol name='_raw_write_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8c318e2'/>
+      <elf-symbol name='_raw_write_unlock_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ad29bab'/>
+      <elf-symbol name='_raw_write_unlock_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ccd378a'/>
+      <elf-symbol name='_raw_write_unlock_irqrestore' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1c1b9f8e'/>
+      <elf-symbol name='_snd_ctl_add_slave' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x186fb6de'/>
+      <elf-symbol name='ack_all_badblocks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48841a20'/>
+      <elf-symbol name='add_device_randomness' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2fb6de5d'/>
+      <elf-symbol name='add_timer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65744673'/>
+      <elf-symbol name='add_timer_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa83a512'/>
+      <elf-symbol name='add_uevent_var' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x719e0e44'/>
+      <elf-symbol name='add_wait_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4afb2238'/>
+      <elf-symbol name='adjust_managed_page_count' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c22ff79'/>
+      <elf-symbol name='aes_encrypt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x77e9eb37'/>
+      <elf-symbol name='aes_expandkey' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x558b281d'/>
+      <elf-symbol name='alarm_cancel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54705c5b'/>
+      <elf-symbol name='alarm_expires_remaining' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb03aa936'/>
+      <elf-symbol name='alarm_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95a71c53'/>
+      <elf-symbol name='alarm_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x112ddc66'/>
+      <elf-symbol name='alarm_start_relative' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x158e5b50'/>
+      <elf-symbol name='alarmtimer_get_rtcdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca09bd4f'/>
+      <elf-symbol name='alloc_anon_inode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6448068a'/>
+      <elf-symbol name='alloc_chrdev_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3ec2f2b'/>
+      <elf-symbol name='alloc_etherdev_mqs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d565cc4'/>
+      <elf-symbol name='alloc_io_pgtable_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c08035c'/>
+      <elf-symbol name='alloc_netdev_mqs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x97eae023'/>
+      <elf-symbol name='alloc_page_buffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91e3095'/>
+      <elf-symbol name='alloc_pages_exact' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5fc72f0e'/>
+      <elf-symbol name='alloc_skb_with_frags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fd6cd1b'/>
+      <elf-symbol name='alloc_workqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf9208c0'/>
+      <elf-symbol name='amba_driver_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b9180aa'/>
+      <elf-symbol name='amba_driver_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb41c6d27'/>
+      <elf-symbol name='amba_release_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5bce0eb'/>
+      <elf-symbol name='amba_request_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26e13647'/>
+      <elf-symbol name='anon_inode_getfd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc015bf6'/>
+      <elf-symbol name='anon_inode_getfile' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23000c4'/>
+      <elf-symbol name='arc4_crypt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd47fcc4'/>
+      <elf-symbol name='arc4_setkey' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2bb32ad1'/>
+      <elf-symbol name='arch_bpf_jit_check_func' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5f194e7'/>
+      <elf-symbol name='arch_set_freq_scale' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16128ed2'/>
+      <elf-symbol name='arch_setup_dma_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69735694'/>
+      <elf-symbol name='async_schedule_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5f370e0'/>
+      <elf-symbol name='atomic_notifier_call_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3752c27'/>
+      <elf-symbol name='atomic_notifier_chain_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b9997fb'/>
+      <elf-symbol name='atomic_notifier_chain_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7181db30'/>
+      <elf-symbol name='autoremove_wake_function' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad73041f'/>
+      <elf-symbol name='backlight_device_get_by_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbeb48c18'/>
+      <elf-symbol name='backlight_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe64b1471'/>
+      <elf-symbol name='backlight_device_set_brightness' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd02b9700'/>
+      <elf-symbol name='backlight_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6f31a58'/>
+      <elf-symbol name='badblocks_clear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73e5bfb4'/>
+      <elf-symbol name='badblocks_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8cd16c42'/>
+      <elf-symbol name='badblocks_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x789f361e'/>
+      <elf-symbol name='badblocks_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd1205aa'/>
+      <elf-symbol name='badblocks_show' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47e3824f'/>
+      <elf-symbol name='badblocks_store' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6807f25'/>
+      <elf-symbol name='bcmp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x263c3152'/>
+      <elf-symbol name='bd_link_disk_holder' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x489e33fb'/>
+      <elf-symbol name='bd_unlink_disk_holder' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79c5bbdb'/>
+      <elf-symbol name='bdev_read_only' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f4c823c'/>
+      <elf-symbol name='bdevname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd06b8f37'/>
+      <elf-symbol name='bdget_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1bb94186'/>
+      <elf-symbol name='bdput' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb765f65'/>
+      <elf-symbol name='bin2hex' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd45cc6ca'/>
+      <elf-symbol name='bio_add_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x745f1015'/>
+      <elf-symbol name='bio_alloc_bioset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1bafc173'/>
+      <elf-symbol name='bio_associate_blkg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1825b2a3'/>
+      <elf-symbol name='bio_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6179ab5b'/>
+      <elf-symbol name='bio_clone_blkg_association' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5dc2f93'/>
+      <elf-symbol name='bio_endio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x783724c4'/>
+      <elf-symbol name='bio_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4917a9b9'/>
+      <elf-symbol name='bio_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14bec129'/>
+      <elf-symbol name='bioset_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd1faeae3'/>
+      <elf-symbol name='bioset_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2614992'/>
+      <elf-symbol name='bitmap_find_next_zero_area_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64127b67'/>
+      <elf-symbol name='bitmap_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca21ebd3'/>
+      <elf-symbol name='bitmap_parselist' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b015d25'/>
+      <elf-symbol name='bitmap_print_to_pagebuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf474c21c'/>
+      <elf-symbol name='bitmap_zalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2688ec10'/>
+      <elf-symbol name='blk_alloc_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7849591'/>
+      <elf-symbol name='blk_cleanup_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd790c0d'/>
+      <elf-symbol name='blk_execute_rq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8dda9211'/>
+      <elf-symbol name='blk_execute_rq_nowait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6352f94'/>
+      <elf-symbol name='blk_finish_plug' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2215f74'/>
+      <elf-symbol name='blk_freeze_queue_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x614b168c'/>
+      <elf-symbol name='blk_get_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4a02c2e'/>
+      <elf-symbol name='blk_get_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7cd2f08'/>
+      <elf-symbol name='blk_lookup_devt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2af650c'/>
+      <elf-symbol name='blk_mq_alloc_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfdaaae25'/>
+      <elf-symbol name='blk_mq_alloc_request_hctx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf6927d7'/>
+      <elf-symbol name='blk_mq_alloc_tag_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b3ed44'/>
+      <elf-symbol name='blk_mq_complete_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88dc13c9'/>
+      <elf-symbol name='blk_mq_delay_kick_requeue_list' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x308c7c83'/>
+      <elf-symbol name='blk_mq_end_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39934734'/>
+      <elf-symbol name='blk_mq_free_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1c7b627d'/>
+      <elf-symbol name='blk_mq_free_tag_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x670325de'/>
+      <elf-symbol name='blk_mq_freeze_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1a9a575'/>
+      <elf-symbol name='blk_mq_freeze_queue_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb93eddd'/>
+      <elf-symbol name='blk_mq_freeze_queue_wait_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2de3df4d'/>
+      <elf-symbol name='blk_mq_init_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe131fae0'/>
+      <elf-symbol name='blk_mq_init_sq_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc84a2f7'/>
+      <elf-symbol name='blk_mq_map_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d4d7b79'/>
+      <elf-symbol name='blk_mq_pci_map_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74ca3873'/>
+      <elf-symbol name='blk_mq_quiesce_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ee1780a'/>
+      <elf-symbol name='blk_mq_request_completed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e03bf5'/>
+      <elf-symbol name='blk_mq_requeue_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1676a899'/>
+      <elf-symbol name='blk_mq_run_hw_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5df552e'/>
+      <elf-symbol name='blk_mq_start_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98c0c2e'/>
+      <elf-symbol name='blk_mq_start_stopped_hw_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d711e1d'/>
+      <elf-symbol name='blk_mq_stop_hw_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc2fb267b'/>
+      <elf-symbol name='blk_mq_tag_to_rq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ecd3479'/>
+      <elf-symbol name='blk_mq_tagset_busy_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd644e12d'/>
+      <elf-symbol name='blk_mq_tagset_wait_completed_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13039763'/>
+      <elf-symbol name='blk_mq_unfreeze_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9acfbb2c'/>
+      <elf-symbol name='blk_mq_unique_tag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc269a6d7'/>
+      <elf-symbol name='blk_mq_unquiesce_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c7df744'/>
+      <elf-symbol name='blk_mq_update_nr_hw_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7792047f'/>
+      <elf-symbol name='blk_mq_virtio_map_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x926eafb'/>
+      <elf-symbol name='blk_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8710f480'/>
+      <elf-symbol name='blk_put_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x874675f9'/>
+      <elf-symbol name='blk_put_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd25609c4'/>
+      <elf-symbol name='blk_queue_alignment_offset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4764f58b'/>
+      <elf-symbol name='blk_queue_bounce_limit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x342b16a3'/>
+      <elf-symbol name='blk_queue_can_use_dma_map_merging' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c6b3697'/>
+      <elf-symbol name='blk_queue_chunk_sectors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91dbb71'/>
+      <elf-symbol name='blk_queue_flag_clear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb97c592d'/>
+      <elf-symbol name='blk_queue_flag_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7dfdd765'/>
+      <elf-symbol name='blk_queue_flag_test_and_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b6aa33'/>
+      <elf-symbol name='blk_queue_io_min' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8353989'/>
+      <elf-symbol name='blk_queue_io_opt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc59ca2da'/>
+      <elf-symbol name='blk_queue_logical_block_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe15377a7'/>
+      <elf-symbol name='blk_queue_make_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca7f7d7a'/>
+      <elf-symbol name='blk_queue_max_discard_sectors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x428867bf'/>
+      <elf-symbol name='blk_queue_max_discard_segments' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2fd6d65'/>
+      <elf-symbol name='blk_queue_max_hw_sectors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b883f78'/>
+      <elf-symbol name='blk_queue_max_segment_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37ddc09d'/>
+      <elf-symbol name='blk_queue_max_segments' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f290f61'/>
+      <elf-symbol name='blk_queue_max_write_zeroes_sectors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f39f13e'/>
+      <elf-symbol name='blk_queue_physical_block_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x842aae33'/>
+      <elf-symbol name='blk_queue_rq_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f7cf5f'/>
+      <elf-symbol name='blk_queue_split' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fe5206d'/>
+      <elf-symbol name='blk_queue_update_dma_alignment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf39633fc'/>
+      <elf-symbol name='blk_queue_virt_boundary' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a199afd'/>
+      <elf-symbol name='blk_queue_write_cache' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb71ef85b'/>
+      <elf-symbol name='blk_register_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa338d3d0'/>
+      <elf-symbol name='blk_rq_map_kern' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d7ceab9'/>
+      <elf-symbol name='blk_rq_map_sg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47b1950'/>
+      <elf-symbol name='blk_rq_map_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd7c104c0'/>
+      <elf-symbol name='blk_rq_map_user_iov' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdfe7832b'/>
+      <elf-symbol name='blk_rq_unmap_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c7fc4fb'/>
+      <elf-symbol name='blk_set_queue_dying' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc2237abe'/>
+      <elf-symbol name='blk_set_stacking_limits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b5a83a0'/>
+      <elf-symbol name='blk_start_plug' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a9b37e8'/>
+      <elf-symbol name='blk_status_to_errno' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x84502a47'/>
+      <elf-symbol name='blk_sync_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd59d790f'/>
+      <elf-symbol name='blk_unregister_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c4265f6'/>
+      <elf-symbol name='blk_update_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62c91ea5'/>
+      <elf-symbol name='blk_verify_command' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27639220'/>
+      <elf-symbol name='blkdev_get_by_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44007c3'/>
+      <elf-symbol name='blkdev_get_by_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d9e8d48'/>
+      <elf-symbol name='blkdev_issue_flush' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86101ddd'/>
+      <elf-symbol name='blkdev_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6dbb20c9'/>
+      <elf-symbol name='block_is_partially_uptodate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc07c20f9'/>
+      <elf-symbol name='block_write_full_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc5be659'/>
+      <elf-symbol name='blocking_notifier_call_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1d2c01b'/>
+      <elf-symbol name='blocking_notifier_chain_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb4ab5609'/>
+      <elf-symbol name='blocking_notifier_chain_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x444e9140'/>
+      <elf-symbol name='bmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb62b6e4'/>
+      <elf-symbol name='bpf_prog_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ffccd4e'/>
+      <elf-symbol name='bpf_prog_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x242bed4a'/>
+      <elf-symbol name='bpf_prog_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed73e4b4'/>
+      <elf-symbol name='bpf_prog_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4919af83'/>
+      <elf-symbol name='bpf_prog_sub' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d3fdeb5'/>
+      <elf-symbol name='bpf_trace_run1' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x365b139d'/>
+      <elf-symbol name='bpf_trace_run10' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9307311'/>
+      <elf-symbol name='bpf_trace_run11' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98dbfd2'/>
+      <elf-symbol name='bpf_trace_run12' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48f84507'/>
+      <elf-symbol name='bpf_trace_run2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb7b41c1'/>
+      <elf-symbol name='bpf_trace_run3' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6217f42'/>
+      <elf-symbol name='bpf_trace_run4' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10e571b4'/>
+      <elf-symbol name='bpf_trace_run5' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xffcecfc5'/>
+      <elf-symbol name='bpf_trace_run6' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3dc44b57'/>
+      <elf-symbol name='bpf_trace_run7' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1dd8caf3'/>
+      <elf-symbol name='bpf_trace_run8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x902d113'/>
+      <elf-symbol name='bpf_trace_run9' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3b407d9'/>
+      <elf-symbol name='bpf_warn_invalid_xdp_action' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c2bcd37'/>
+      <elf-symbol name='bprm_change_interp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x239c916'/>
+      <elf-symbol name='bsearch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50a90e8d'/>
+      <elf-symbol name='buffer_migrate_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a3069e2'/>
+      <elf-symbol name='build_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xffbddd73'/>
+      <elf-symbol name='bus_find_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e7c2c6a'/>
+      <elf-symbol name='bus_for_each_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44e88722'/>
+      <elf-symbol name='bus_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68bafbf5'/>
+      <elf-symbol name='bus_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x45ff7932'/>
+      <elf-symbol name='bus_set_iommu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16e92efc'/>
+      <elf-symbol name='bus_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3486c8d4'/>
+      <elf-symbol name='bus_unregister_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ebb2102'/>
+      <elf-symbol name='cache_line_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x605d5bfa'/>
+      <elf-symbol name='call_netdevice_notifiers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x90a62b3d'/>
+      <elf-symbol name='cancel_delayed_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda571594'/>
+      <elf-symbol name='cancel_delayed_work_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8beca97'/>
+      <elf-symbol name='cancel_work_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd969d6f4'/>
+      <elf-symbol name='capable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6cbbc89'/>
+      <elf-symbol name='cdc_parse_cdc_header' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3a3486f'/>
+      <elf-symbol name='cdev_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c00d62d'/>
+      <elf-symbol name='cdev_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x791211'/>
+      <elf-symbol name='cdev_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe77ef4f0'/>
+      <elf-symbol name='cdev_device_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a9c6375'/>
+      <elf-symbol name='cdev_device_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4911e7bb'/>
+      <elf-symbol name='cdev_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ab35347'/>
+      <elf-symbol name='ce_aes_expandkey' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68f275ad'/>
+      <elf-symbol name='cec_allocate_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67046677'/>
+      <elf-symbol name='cec_delete_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b83d5bc'/>
+      <elf-symbol name='cec_received_msg_ts' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaabb0440'/>
+      <elf-symbol name='cec_register_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb14e8a85'/>
+      <elf-symbol name='cec_s_log_addrs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28a59fd9'/>
+      <elf-symbol name='cec_s_phys_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa9aa4e3a'/>
+      <elf-symbol name='cec_s_phys_addr_from_edid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4426fea4'/>
+      <elf-symbol name='cec_transmit_attempt_done_ts' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24606729'/>
+      <elf-symbol name='cec_transmit_done_ts' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3945a2af'/>
+      <elf-symbol name='cec_unregister_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33018c7d'/>
+      <elf-symbol name='cfg80211_assoc_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x164b8900'/>
+      <elf-symbol name='cfg80211_auth_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39112d22'/>
+      <elf-symbol name='cfg80211_calculate_bitrate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15a37cf3'/>
+      <elf-symbol name='cfg80211_ch_switch_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x907b9315'/>
+      <elf-symbol name='cfg80211_chandef_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18b53545'/>
+      <elf-symbol name='cfg80211_classify8021d' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1c76ccf5'/>
+      <elf-symbol name='cfg80211_connect_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a95299b'/>
+      <elf-symbol name='cfg80211_cqm_pktloss_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a54779b'/>
+      <elf-symbol name='cfg80211_cqm_rssi_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5443414'/>
+      <elf-symbol name='cfg80211_del_sta_sinfo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdfa1185b'/>
+      <elf-symbol name='cfg80211_disconnected' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24762ccd'/>
+      <elf-symbol name='cfg80211_find_elem_match' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d6cba30'/>
+      <elf-symbol name='cfg80211_find_vendor_elem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79b82a71'/>
+      <elf-symbol name='cfg80211_ft_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7db0d04'/>
+      <elf-symbol name='cfg80211_get_bss' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9851842'/>
+      <elf-symbol name='cfg80211_gtk_rekey_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bf0768c'/>
+      <elf-symbol name='cfg80211_ibss_joined' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ef30d7'/>
+      <elf-symbol name='cfg80211_inform_bss_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7da92bec'/>
+      <elf-symbol name='cfg80211_inform_bss_frame_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b8f5d8f'/>
+      <elf-symbol name='cfg80211_mgmt_tx_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbef2d592'/>
+      <elf-symbol name='cfg80211_michael_mic_failure' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x844c2792'/>
+      <elf-symbol name='cfg80211_new_sta' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c09e2b5'/>
+      <elf-symbol name='cfg80211_pmksa_candidate_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22051249'/>
+      <elf-symbol name='cfg80211_put_bss' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebf66e4a'/>
+      <elf-symbol name='cfg80211_ready_on_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc156a802'/>
+      <elf-symbol name='cfg80211_remain_on_channel_expired' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc1e064b'/>
+      <elf-symbol name='cfg80211_roamed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f0139cd'/>
+      <elf-symbol name='cfg80211_rx_assoc_resp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b876f86'/>
+      <elf-symbol name='cfg80211_rx_mgmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8770230'/>
+      <elf-symbol name='cfg80211_rx_mlme_mgmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde446ade'/>
+      <elf-symbol name='cfg80211_rx_unprot_mlme_mgmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2515cf27'/>
+      <elf-symbol name='cfg80211_scan_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73e2b160'/>
+      <elf-symbol name='cfg80211_sched_scan_results' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d2db7a5'/>
+      <elf-symbol name='cfg80211_sched_scan_stopped' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13b543c0'/>
+      <elf-symbol name='cfg80211_tdls_oper_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c67123e'/>
+      <elf-symbol name='cfg80211_tx_mlme_mgmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb998d17a'/>
+      <elf-symbol name='cfg80211_unlink_bss' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x188da879'/>
+      <elf-symbol name='cfg80211_unregister_wdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4eb2842'/>
+      <elf-symbol name='cfg80211_vendor_cmd_reply' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc15217a7'/>
+      <elf-symbol name='check_disk_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x691f934b'/>
+      <elf-symbol name='class_create_file_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3353073'/>
+      <elf-symbol name='class_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66f91481'/>
+      <elf-symbol name='class_find_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78159453'/>
+      <elf-symbol name='class_interface_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x588e1407'/>
+      <elf-symbol name='class_remove_file_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdeb5ec34'/>
+      <elf-symbol name='class_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa141692c'/>
+      <elf-symbol name='cleanup_srcu_struct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b7ed86c'/>
+      <elf-symbol name='clear_inode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9041ded5'/>
+      <elf-symbol name='clear_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d9ee9f0'/>
+      <elf-symbol name='clk_bulk_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x479f7d4b'/>
+      <elf-symbol name='clk_bulk_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec68ba70'/>
+      <elf-symbol name='clk_bulk_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x724b7b22'/>
+      <elf-symbol name='clk_bulk_get_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8f868fe'/>
+      <elf-symbol name='clk_bulk_prepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeafe07b8'/>
+      <elf-symbol name='clk_bulk_put_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8caa845'/>
+      <elf-symbol name='clk_bulk_unprepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63c08029'/>
+      <elf-symbol name='clk_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6e6d99d'/>
+      <elf-symbol name='clk_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x815588a6'/>
+      <elf-symbol name='clk_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57341c4f'/>
+      <elf-symbol name='clk_get_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63150e06'/>
+      <elf-symbol name='clk_get_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x556e4390'/>
+      <elf-symbol name='clk_get_sys' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec4d9e3a'/>
+      <elf-symbol name='clk_hw_get_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda78ec86'/>
+      <elf-symbol name='clk_hw_get_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe90694ed'/>
+      <elf-symbol name='clk_hw_get_num_parents' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4f7d391'/>
+      <elf-symbol name='clk_hw_get_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27098917'/>
+      <elf-symbol name='clk_hw_get_parent_by_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x730d9e03'/>
+      <elf-symbol name='clk_hw_get_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd581606'/>
+      <elf-symbol name='clk_hw_is_enabled' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38162770'/>
+      <elf-symbol name='clk_hw_is_prepared' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4745ea79'/>
+      <elf-symbol name='clk_hw_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29547130'/>
+      <elf-symbol name='clk_hw_register_divider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd11a3643'/>
+      <elf-symbol name='clk_hw_register_fixed_factor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac6b5d84'/>
+      <elf-symbol name='clk_hw_register_gate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62862f5d'/>
+      <elf-symbol name='clk_hw_register_mux' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58e2ae42'/>
+      <elf-symbol name='clk_hw_round_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a4dd909'/>
+      <elf-symbol name='clk_hw_set_rate_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b7bb544'/>
+      <elf-symbol name='clk_hw_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe17a1100'/>
+      <elf-symbol name='clk_hw_unregister_divider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa51e40c8'/>
+      <elf-symbol name='clk_hw_unregister_fixed_factor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d32e29f'/>
+      <elf-symbol name='clk_hw_unregister_gate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4fe502cb'/>
+      <elf-symbol name='clk_hw_unregister_mux' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8f6d137'/>
+      <elf-symbol name='clk_notifier_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60091316'/>
+      <elf-symbol name='clk_prepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c9a7371'/>
+      <elf-symbol name='clk_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e1ca751'/>
+      <elf-symbol name='clk_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa823880d'/>
+      <elf-symbol name='clk_register_clkdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9822234'/>
+      <elf-symbol name='clk_register_fixed_factor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6e7a47b'/>
+      <elf-symbol name='clk_register_fixed_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d60e693'/>
+      <elf-symbol name='clk_register_gate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92295424'/>
+      <elf-symbol name='clk_round_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43f81957'/>
+      <elf-symbol name='clk_set_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2396c7f0'/>
+      <elf-symbol name='clk_set_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76d9b876'/>
+      <elf-symbol name='clk_sync_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f69a8a8'/>
+      <elf-symbol name='clk_unprepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb077e70a'/>
+      <elf-symbol name='clk_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7757b51a'/>
+      <elf-symbol name='clockevents_config_and_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d8ec5c'/>
+      <elf-symbol name='clocks_calc_mult_shift' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62bb09bf'/>
+      <elf-symbol name='cma_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8ab8141'/>
+      <elf-symbol name='cma_for_each_area' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46765be7'/>
+      <elf-symbol name='cma_get_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2994243b'/>
+      <elf-symbol name='cma_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd65e36a'/>
+      <elf-symbol name='compat_alloc_user_space' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbffde8ec'/>
+      <elf-symbol name='complete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29361773'/>
+      <elf-symbol name='complete_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd94814e'/>
+      <elf-symbol name='complete_and_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8133c67d'/>
+      <elf-symbol name='completion_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51bd55b5'/>
+      <elf-symbol name='component_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37de230a'/>
+      <elf-symbol name='component_bind_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc1a5b61'/>
+      <elf-symbol name='component_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b2ef9d8'/>
+      <elf-symbol name='component_master_add_with_match' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81c7ad67'/>
+      <elf-symbol name='component_master_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8690c0f'/>
+      <elf-symbol name='component_match_add_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x261caaf2'/>
+      <elf-symbol name='component_unbind_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3eea896e'/>
+      <elf-symbol name='config_ep_by_speed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7962fbe5'/>
+      <elf-symbol name='config_group_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f75ef60'/>
+      <elf-symbol name='config_group_init_type_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87a39a87'/>
+      <elf-symbol name='config_item_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb27647b2'/>
+      <elf-symbol name='configfs_register_subsystem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76599a05'/>
+      <elf-symbol name='configfs_unregister_subsystem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c5cf09f'/>
+      <elf-symbol name='console_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfbaaf01e'/>
+      <elf-symbol name='console_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd7e4e409'/>
+      <elf-symbol name='console_trylock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40d04664'/>
+      <elf-symbol name='console_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc631580a'/>
+      <elf-symbol name='consume_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff55d2db'/>
+      <elf-symbol name='cont_write_begin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc432d46'/>
+      <elf-symbol name='copy_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d0d163d'/>
+      <elf-symbol name='copy_strings_kernel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4dc7934'/>
+      <elf-symbol name='cpu_down' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7cb1ae69'/>
+      <elf-symbol name='cpu_have_feature' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41237f71'/>
+      <elf-symbol name='cpu_pm_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x444f1735'/>
+      <elf-symbol name='cpu_pm_unregister_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f98d766'/>
+      <elf-symbol name='cpu_up' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56d697ce'/>
+      <elf-symbol name='cpufreq_add_update_util_hook' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1403ad09'/>
+      <elf-symbol name='cpufreq_cpu_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf3d30420'/>
+      <elf-symbol name='cpufreq_cpu_get_raw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4097af0'/>
+      <elf-symbol name='cpufreq_cpu_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d79510c'/>
+      <elf-symbol name='cpufreq_driver_resolve_freq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2718ed44'/>
+      <elf-symbol name='cpufreq_enable_boost_support' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf30a5502'/>
+      <elf-symbol name='cpufreq_freq_transition_begin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67deaf66'/>
+      <elf-symbol name='cpufreq_freq_transition_end' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3be6f0d2'/>
+      <elf-symbol name='cpufreq_frequency_table_verify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec774acb'/>
+      <elf-symbol name='cpufreq_generic_frequency_table_verify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc289e46d'/>
+      <elf-symbol name='cpufreq_generic_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba2b7f64'/>
+      <elf-symbol name='cpufreq_generic_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f5b19af'/>
+      <elf-symbol name='cpufreq_get_policy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa964a87e'/>
+      <elf-symbol name='cpufreq_quick_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c46233a'/>
+      <elf-symbol name='cpufreq_quick_get_max' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33f0768c'/>
+      <elf-symbol name='cpufreq_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92168fd0'/>
+      <elf-symbol name='cpufreq_register_governor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58390a11'/>
+      <elf-symbol name='cpufreq_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65d9e877'/>
+      <elf-symbol name='cpufreq_remove_update_util_hook' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3192d768'/>
+      <elf-symbol name='cpufreq_table_index_unsorted' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7f1774f'/>
+      <elf-symbol name='cpufreq_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4a4ee55'/>
+      <elf-symbol name='cpufreq_unregister_governor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25b69249'/>
+      <elf-symbol name='cpufreq_unregister_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6214aef2'/>
+      <elf-symbol name='cpufreq_update_policy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc37f9c6e'/>
+      <elf-symbol name='cpumask_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92ad1db9'/>
+      <elf-symbol name='cpumask_next_and' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4445ab21'/>
+      <elf-symbol name='cpumask_next_wrap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x233eb8eb'/>
+      <elf-symbol name='cpus_read_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa04f945a'/>
+      <elf-symbol name='cpus_read_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18fb2caf'/>
+      <elf-symbol name='crc32_be' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4df02057'/>
+      <elf-symbol name='crc32_le' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69dd3b5b'/>
+      <elf-symbol name='crc8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe2aae5cc'/>
+      <elf-symbol name='crc8_populate_msb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa8106bc'/>
+      <elf-symbol name='create_empty_buffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc23ae16e'/>
+      <elf-symbol name='crypto_aead_encrypt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96e5c93b'/>
+      <elf-symbol name='crypto_aead_setauthsize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb719eb8'/>
+      <elf-symbol name='crypto_aead_setkey' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc806541e'/>
+      <elf-symbol name='crypto_ahash_digest' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc36fcc5d'/>
+      <elf-symbol name='crypto_ahash_setkey' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c31030d'/>
+      <elf-symbol name='crypto_alloc_aead' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc76d3cbc'/>
+      <elf-symbol name='crypto_alloc_ahash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47b67eea'/>
+      <elf-symbol name='crypto_alloc_base' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbac59af7'/>
+      <elf-symbol name='crypto_alloc_instance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26bb7986'/>
+      <elf-symbol name='crypto_alloc_shash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x392da877'/>
+      <elf-symbol name='crypto_alloc_skcipher' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb7cda42'/>
+      <elf-symbol name='crypto_attr_alg2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7825c78e'/>
+      <elf-symbol name='crypto_check_attr_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x243f0b4b'/>
+      <elf-symbol name='crypto_dequeue_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x200a4d6'/>
+      <elf-symbol name='crypto_destroy_tfm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee0b9363'/>
+      <elf-symbol name='crypto_engine_alloc_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e611a62'/>
+      <elf-symbol name='crypto_engine_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1fce3400'/>
+      <elf-symbol name='crypto_engine_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd1fac53f'/>
+      <elf-symbol name='crypto_enqueue_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe0f93bd'/>
+      <elf-symbol name='crypto_finalize_ablkcipher_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2bdfdfd'/>
+      <elf-symbol name='crypto_has_ahash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x34407691'/>
+      <elf-symbol name='crypto_has_alg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x951a2773'/>
+      <elf-symbol name='crypto_inc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ef051c8'/>
+      <elf-symbol name='crypto_init_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x499043d3'/>
+      <elf-symbol name='crypto_init_spawn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xecb12eaa'/>
+      <elf-symbol name='crypto_mod_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8af15b4'/>
+      <elf-symbol name='crypto_register_aead' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea8e350c'/>
+      <elf-symbol name='crypto_register_ahash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67305a9c'/>
+      <elf-symbol name='crypto_register_alg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53bcfa3e'/>
+      <elf-symbol name='crypto_register_rng' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea07813b'/>
+      <elf-symbol name='crypto_register_rngs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xccc3c8c6'/>
+      <elf-symbol name='crypto_register_scomp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2143067'/>
+      <elf-symbol name='crypto_register_shash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc72b2b4f'/>
+      <elf-symbol name='crypto_register_shashes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7442d521'/>
+      <elf-symbol name='crypto_register_skcipher' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19927e5'/>
+      <elf-symbol name='crypto_register_skciphers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d15b24e'/>
+      <elf-symbol name='crypto_register_template' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ce61086'/>
+      <elf-symbol name='crypto_sha1_finup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafe5e9f5'/>
+      <elf-symbol name='crypto_sha1_update' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f813ebe'/>
+      <elf-symbol name='crypto_shash_digest' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x111586fb'/>
+      <elf-symbol name='crypto_shash_final' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5a9a15f'/>
+      <elf-symbol name='crypto_shash_setkey' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf9ad2e1'/>
+      <elf-symbol name='crypto_shash_update' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde7f5486'/>
+      <elf-symbol name='crypto_skcipher_decrypt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xabaeb482'/>
+      <elf-symbol name='crypto_skcipher_encrypt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf991f83e'/>
+      <elf-symbol name='crypto_spawn_tfm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81ca575e'/>
+      <elf-symbol name='crypto_transfer_ablkcipher_request_to_engine' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ead4eab'/>
+      <elf-symbol name='crypto_unregister_aead' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b3516d8'/>
+      <elf-symbol name='crypto_unregister_ahash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa62f1132'/>
+      <elf-symbol name='crypto_unregister_alg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb83bc956'/>
+      <elf-symbol name='crypto_unregister_rng' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2bd63786'/>
+      <elf-symbol name='crypto_unregister_rngs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b96c944'/>
+      <elf-symbol name='crypto_unregister_scomp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5158161b'/>
+      <elf-symbol name='crypto_unregister_shash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbced118c'/>
+      <elf-symbol name='crypto_unregister_shashes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5cb439e'/>
+      <elf-symbol name='crypto_unregister_skcipher' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x77a6492f'/>
+      <elf-symbol name='crypto_unregister_skciphers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbaa3ccb6'/>
+      <elf-symbol name='crypto_unregister_template' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x175867ad'/>
+      <elf-symbol name='csum_ipv6_magic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d65cbd5'/>
+      <elf-symbol name='csum_partial' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe113bbbc'/>
+      <elf-symbol name='csum_tcpudp_nofold' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd25bc5d4'/>
+      <elf-symbol name='current_time' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x827fedcb'/>
+      <elf-symbol name='current_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd75ee543'/>
+      <elf-symbol name='d_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a2ab10a'/>
+      <elf-symbol name='d_add_ci' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe68edd5f'/>
+      <elf-symbol name='d_alloc_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23a7adce'/>
+      <elf-symbol name='d_delete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ae93a57'/>
+      <elf-symbol name='d_drop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2650f0ad'/>
+      <elf-symbol name='d_find_alias' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52511c94'/>
+      <elf-symbol name='d_instantiate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95ca582'/>
+      <elf-symbol name='d_move' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1d6d8ca'/>
+      <elf-symbol name='d_obtain_alias' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b80d80'/>
+      <elf-symbol name='dapm_kcontrol_get_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x31181aff'/>
+      <elf-symbol name='dapm_pinctrl_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1c0a521'/>
+      <elf-symbol name='dapm_regulator_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ce43695'/>
+      <elf-symbol name='datagram_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3fc9989a'/>
+      <elf-symbol name='deactivate_locked_super' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x591bbfad'/>
+      <elf-symbol name='debugfs_attr_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa9e539e9'/>
+      <elf-symbol name='debugfs_attr_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b8f8dbf'/>
+      <elf-symbol name='debugfs_create_bool' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b04137e'/>
+      <elf-symbol name='debugfs_create_dir' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1826c19a'/>
+      <elf-symbol name='debugfs_create_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5aa221b6'/>
+      <elf-symbol name='debugfs_create_file_unsafe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf21bd5c'/>
+      <elf-symbol name='debugfs_create_size_t' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b779d91'/>
+      <elf-symbol name='debugfs_create_u32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5888294b'/>
+      <elf-symbol name='debugfs_create_u64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b21131a'/>
+      <elf-symbol name='debugfs_create_x32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe7df219f'/>
+      <elf-symbol name='debugfs_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc61ddba6'/>
+      <elf-symbol name='debugfs_remove_recursive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8435ca72'/>
+      <elf-symbol name='dec_zone_page_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ac24729'/>
+      <elf-symbol name='default_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdbb18016'/>
+      <elf-symbol name='default_wake_function' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaad8c7d6'/>
+      <elf-symbol name='del_gendisk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x500e37ef'/>
+      <elf-symbol name='del_timer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa4008af'/>
+      <elf-symbol name='del_timer_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf15e728e'/>
+      <elf-symbol name='delayed_work_timer_fn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x253af43d'/>
+      <elf-symbol name='dentry_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x477c1ff4'/>
+      <elf-symbol name='dequeue_signal' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6557b2b0'/>
+      <elf-symbol name='desc_to_gpio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x221b07ed'/>
+      <elf-symbol name='destroy_workqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c03d20c'/>
+      <elf-symbol name='dev_add_pack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8bca85a5'/>
+      <elf-symbol name='dev_alloc_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbbc316ea'/>
+      <elf-symbol name='dev_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdafb962a'/>
+      <elf-symbol name='dev_driver_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70cf2bcc'/>
+      <elf-symbol name='dev_fwnode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb19c8709'/>
+      <elf-symbol name='dev_get_by_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2e95fdd'/>
+      <elf-symbol name='dev_get_by_index_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x31862d34'/>
+      <elf-symbol name='dev_get_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26a94c16'/>
+      <elf-symbol name='dev_get_by_name_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62fdd7a3'/>
+      <elf-symbol name='dev_get_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa9d2f6fe'/>
+      <elf-symbol name='dev_get_stats' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad772a15'/>
+      <elf-symbol name='dev_mc_sync_multiple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ee37803'/>
+      <elf-symbol name='dev_mc_unsync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4505e4dd'/>
+      <elf-symbol name='dev_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x660eff3c'/>
+      <elf-symbol name='dev_pm_clear_wake_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x179e10a6'/>
+      <elf-symbol name='dev_pm_domain_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfcdf50a9'/>
+      <elf-symbol name='dev_pm_domain_attach_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f7b21dd'/>
+      <elf-symbol name='dev_pm_domain_detach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeae56342'/>
+      <elf-symbol name='dev_pm_genpd_set_performance_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5a5465d'/>
+      <elf-symbol name='dev_pm_opp_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fb9e1e3'/>
+      <elf-symbol name='dev_pm_opp_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab4d40a1'/>
+      <elf-symbol name='dev_pm_opp_find_freq_ceil' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x336cd5bf'/>
+      <elf-symbol name='dev_pm_opp_find_freq_exact' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc8cc7a9'/>
+      <elf-symbol name='dev_pm_opp_find_freq_floor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49db20f3'/>
+      <elf-symbol name='dev_pm_opp_free_cpufreq_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce7b85a9'/>
+      <elf-symbol name='dev_pm_opp_get_freq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87689664'/>
+      <elf-symbol name='dev_pm_opp_get_level' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e15d04d'/>
+      <elf-symbol name='dev_pm_opp_get_max_transition_latency' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bb122b1'/>
+      <elf-symbol name='dev_pm_opp_get_opp_count' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc199f771'/>
+      <elf-symbol name='dev_pm_opp_get_opp_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x378a2666'/>
+      <elf-symbol name='dev_pm_opp_get_sharing_cpus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd89ad38f'/>
+      <elf-symbol name='dev_pm_opp_get_suspend_opp_freq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37667abc'/>
+      <elf-symbol name='dev_pm_opp_get_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x21919fa2'/>
+      <elf-symbol name='dev_pm_opp_init_cpufreq_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x45cc037'/>
+      <elf-symbol name='dev_pm_opp_of_add_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde788011'/>
+      <elf-symbol name='dev_pm_opp_of_cpumask_add_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8cf281e7'/>
+      <elf-symbol name='dev_pm_opp_of_cpumask_remove_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ded56d3'/>
+      <elf-symbol name='dev_pm_opp_of_get_sharing_cpus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e07170d'/>
+      <elf-symbol name='dev_pm_opp_of_register_em' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xabe0636f'/>
+      <elf-symbol name='dev_pm_opp_of_remove_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6bf5dc4'/>
+      <elf-symbol name='dev_pm_opp_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x375faab0'/>
+      <elf-symbol name='dev_pm_opp_put_opp_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b9f07a1'/>
+      <elf-symbol name='dev_pm_opp_put_regulators' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2eaaf5f1'/>
+      <elf-symbol name='dev_pm_opp_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6dc35f93'/>
+      <elf-symbol name='dev_pm_opp_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe7555dd2'/>
+      <elf-symbol name='dev_pm_opp_remove_all_dynamic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18771f39'/>
+      <elf-symbol name='dev_pm_opp_set_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5aca8128'/>
+      <elf-symbol name='dev_pm_opp_set_regulators' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x476e12ae'/>
+      <elf-symbol name='dev_pm_opp_set_sharing_cpus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd748b8b'/>
+      <elf-symbol name='dev_pm_opp_set_supported_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87e8b75e'/>
+      <elf-symbol name='dev_pm_opp_unregister_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73947919'/>
+      <elf-symbol name='dev_pm_qos_add_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x229dc7d0'/>
+      <elf-symbol name='dev_pm_qos_expose_latency_tolerance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x735e3474'/>
+      <elf-symbol name='dev_pm_qos_hide_latency_tolerance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf7ce1dd'/>
+      <elf-symbol name='dev_pm_qos_remove_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48871419'/>
+      <elf-symbol name='dev_pm_qos_update_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xacef2f59'/>
+      <elf-symbol name='dev_pm_qos_update_user_latency_tolerance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x809ebb2e'/>
+      <elf-symbol name='dev_pm_set_dedicated_wake_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12244b1e'/>
+      <elf-symbol name='dev_pm_set_wake_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb024fbcc'/>
+      <elf-symbol name='dev_printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3852fb25'/>
+      <elf-symbol name='dev_queue_xmit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5cea5a87'/>
+      <elf-symbol name='dev_remove_pack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc803e83f'/>
+      <elf-symbol name='dev_set_mac_address' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10b32be3'/>
+      <elf-symbol name='dev_set_mtu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70baadf5'/>
+      <elf-symbol name='dev_set_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f247961'/>
+      <elf-symbol name='dev_uc_sync_multiple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae53a48f'/>
+      <elf-symbol name='dev_uc_unsync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x534b16e8'/>
+      <elf-symbol name='devfreq_add_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa879ba57'/>
+      <elf-symbol name='devfreq_add_governor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64b6aefa'/>
+      <elf-symbol name='devfreq_cooling_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a447ce5'/>
+      <elf-symbol name='devfreq_recommended_opp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a5ca2a1'/>
+      <elf-symbol name='devfreq_register_opp_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b7f2661'/>
+      <elf-symbol name='devfreq_remove_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xccd0d060'/>
+      <elf-symbol name='devfreq_remove_governor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3848d398'/>
+      <elf-symbol name='devfreq_resume_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf4d48240'/>
+      <elf-symbol name='devfreq_suspend_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5bee54c7'/>
+      <elf-symbol name='devfreq_unregister_opp_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2084ca92'/>
+      <elf-symbol name='devfreq_update_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4d20b09'/>
+      <elf-symbol name='device_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52be6fc1'/>
+      <elf-symbol name='device_add_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc0f2ad72'/>
+      <elf-symbol name='device_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1895c44b'/>
+      <elf-symbol name='device_bind_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f35957c'/>
+      <elf-symbol name='device_connection_find_match' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87e76b7b'/>
+      <elf-symbol name='device_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d60aba3'/>
+      <elf-symbol name='device_create_bin_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7866b2f3'/>
+      <elf-symbol name='device_create_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1be396b3'/>
+      <elf-symbol name='device_create_with_groups' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa47809a'/>
+      <elf-symbol name='device_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x738ede83'/>
+      <elf-symbol name='device_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x754bfb79'/>
+      <elf-symbol name='device_find_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x324743fb'/>
+      <elf-symbol name='device_for_each_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2267d8e'/>
+      <elf-symbol name='device_get_child_node_count' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x77dc92cd'/>
+      <elf-symbol name='device_get_dma_attr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x832e9bce'/>
+      <elf-symbol name='device_get_mac_address' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ba99bf1'/>
+      <elf-symbol name='device_get_match_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb89ac435'/>
+      <elf-symbol name='device_get_named_child_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb85bfcb'/>
+      <elf-symbol name='device_get_next_child_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6fcc95c'/>
+      <elf-symbol name='device_init_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8377b7b'/>
+      <elf-symbol name='device_initialize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd79d904b'/>
+      <elf-symbol name='device_link_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64d10e0'/>
+      <elf-symbol name='device_link_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2522bd3'/>
+      <elf-symbol name='device_match_fwnode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc80de26f'/>
+      <elf-symbol name='device_match_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53938c3f'/>
+      <elf-symbol name='device_pm_wait_for_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x390b3911'/>
+      <elf-symbol name='device_property_present' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25066d5e'/>
+      <elf-symbol name='device_property_read_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd2aee207'/>
+      <elf-symbol name='device_property_read_string_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4864717c'/>
+      <elf-symbol name='device_property_read_u32_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x943eed8'/>
+      <elf-symbol name='device_property_read_u8_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11cfd690'/>
+      <elf-symbol name='device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe2efd20d'/>
+      <elf-symbol name='device_release_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d454582'/>
+      <elf-symbol name='device_remove_bin_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4684a6c'/>
+      <elf-symbol name='device_remove_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0e4687d'/>
+      <elf-symbol name='device_remove_file_self' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa9b1dcdd'/>
+      <elf-symbol name='device_remove_groups' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e274153'/>
+      <elf-symbol name='device_rename' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xabbd1af3'/>
+      <elf-symbol name='device_set_wakeup_capable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad20096'/>
+      <elf-symbol name='device_set_wakeup_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa714b526'/>
+      <elf-symbol name='device_show_bool' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x797dc2bc'/>
+      <elf-symbol name='device_show_int' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96d5a300'/>
+      <elf-symbol name='device_store_bool' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8411da94'/>
+      <elf-symbol name='device_store_int' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb4da033'/>
+      <elf-symbol name='device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b9a31aa'/>
+      <elf-symbol name='device_wakeup_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1e818cf'/>
+      <elf-symbol name='device_wakeup_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc182bfa8'/>
+      <elf-symbol name='devm_add_action' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51f3a570'/>
+      <elf-symbol name='devm_backlight_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b004634'/>
+      <elf-symbol name='devm_clk_bulk_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6a08560'/>
+      <elf-symbol name='devm_clk_bulk_get_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe40d52c9'/>
+      <elf-symbol name='devm_clk_bulk_get_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb14442a'/>
+      <elf-symbol name='devm_clk_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b53cdc1'/>
+      <elf-symbol name='devm_clk_get_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x621f152a'/>
+      <elf-symbol name='devm_clk_hw_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8af4a3d'/>
+      <elf-symbol name='devm_clk_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38ee9229'/>
+      <elf-symbol name='devm_clk_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e3f931e'/>
+      <elf-symbol name='devm_devfreq_add_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95d99ad3'/>
+      <elf-symbol name='devm_devfreq_register_opp_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff31af19'/>
+      <elf-symbol name='devm_devfreq_remove_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66e4b320'/>
+      <elf-symbol name='devm_extcon_dev_allocate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2dd774c5'/>
+      <elf-symbol name='devm_extcon_dev_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd681304'/>
+      <elf-symbol name='devm_extcon_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeecc580d'/>
+      <elf-symbol name='devm_extcon_register_notifier_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x945f3724'/>
+      <elf-symbol name='devm_free_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2f9317f'/>
+      <elf-symbol name='devm_fwnode_get_index_gpiod_from_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf2a7956'/>
+      <elf-symbol name='devm_get_clk_from_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c971f7a'/>
+      <elf-symbol name='devm_gpio_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8cac7cc'/>
+      <elf-symbol name='devm_gpio_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d266c42'/>
+      <elf-symbol name='devm_gpio_request_one' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26802455'/>
+      <elf-symbol name='devm_gpiochip_add_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb25cba55'/>
+      <elf-symbol name='devm_gpiod_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa29c6357'/>
+      <elf-symbol name='devm_gpiod_get_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58e58da3'/>
+      <elf-symbol name='devm_gpiod_get_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c5f4866'/>
+      <elf-symbol name='devm_hwspin_lock_request_specific' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a5f3595'/>
+      <elf-symbol name='devm_iio_channel_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a5d8f45'/>
+      <elf-symbol name='devm_iio_device_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa26fed5e'/>
+      <elf-symbol name='devm_input_allocate_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b50ae2b'/>
+      <elf-symbol name='devm_ioremap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x522f025'/>
+      <elf-symbol name='devm_ioremap_nocache' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86843fa8'/>
+      <elf-symbol name='devm_ioremap_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70b37476'/>
+      <elf-symbol name='devm_ioremap_wc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c768986'/>
+      <elf-symbol name='devm_iounmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99c5e390'/>
+      <elf-symbol name='devm_kasprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ebe5b1a'/>
+      <elf-symbol name='devm_kfree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc24aecc8'/>
+      <elf-symbol name='devm_kmalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b093a66'/>
+      <elf-symbol name='devm_kmemdup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3882c138'/>
+      <elf-symbol name='devm_kstrdup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63f0ef5b'/>
+      <elf-symbol name='devm_kvasprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa968d812'/>
+      <elf-symbol name='devm_led_classdev_register_ext' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6916745d'/>
+      <elf-symbol name='devm_mbox_controller_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x760da69c'/>
+      <elf-symbol name='devm_memremap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81f43e78'/>
+      <elf-symbol name='devm_mfd_add_devices' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4b12f72'/>
+      <elf-symbol name='devm_nvmem_cell_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8781b0bf'/>
+      <elf-symbol name='devm_nvmem_device_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd48278e9'/>
+      <elf-symbol name='devm_nvmem_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9daddd93'/>
+      <elf-symbol name='devm_of_clk_add_hw_provider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa828fdc2'/>
+      <elf-symbol name='devm_of_iomap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff0ae586'/>
+      <elf-symbol name='devm_of_pci_get_host_bridge_resources' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe10fb90'/>
+      <elf-symbol name='devm_of_platform_populate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x590811bb'/>
+      <elf-symbol name='devm_of_pwm_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebc21083'/>
+      <elf-symbol name='devm_pci_alloc_host_bridge' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa22a10c2'/>
+      <elf-symbol name='devm_phy_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e4d17e8'/>
+      <elf-symbol name='devm_phy_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1e2eb88'/>
+      <elf-symbol name='devm_pinctrl_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a923a64'/>
+      <elf-symbol name='devm_pinctrl_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52467df0'/>
+      <elf-symbol name='devm_pinctrl_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x331fb477'/>
+      <elf-symbol name='devm_platform_ioremap_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b6fb9ad'/>
+      <elf-symbol name='devm_power_supply_get_by_phandle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18693da7'/>
+      <elf-symbol name='devm_power_supply_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66f33921'/>
+      <elf-symbol name='devm_pwm_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2de8dba'/>
+      <elf-symbol name='devm_pwm_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5338dbc7'/>
+      <elf-symbol name='devm_regmap_add_irq_chip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd2d68be0'/>
+      <elf-symbol name='devm_regmap_del_irq_chip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18ac7635'/>
+      <elf-symbol name='devm_regmap_field_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe15486a3'/>
+      <elf-symbol name='devm_regulator_bulk_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7aeab964'/>
+      <elf-symbol name='devm_regulator_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5253b104'/>
+      <elf-symbol name='devm_regulator_get_exclusive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47f55293'/>
+      <elf-symbol name='devm_regulator_get_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd868dcac'/>
+      <elf-symbol name='devm_regulator_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40f0aac4'/>
+      <elf-symbol name='devm_regulator_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78ddfefc'/>
+      <elf-symbol name='devm_regulator_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f3cf79a'/>
+      <elf-symbol name='devm_request_any_context_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf62d894c'/>
+      <elf-symbol name='devm_request_pci_bus_resources' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ab08f60'/>
+      <elf-symbol name='devm_request_threaded_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xecc750ea'/>
+      <elf-symbol name='devm_reset_control_array_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5150c830'/>
+      <elf-symbol name='devm_reset_controller_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd455cf0'/>
+      <elf-symbol name='devm_rtc_allocate_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x206a1dfe'/>
+      <elf-symbol name='devm_rtc_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8caece'/>
+      <elf-symbol name='devm_snd_dmaengine_pcm_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x589a9453'/>
+      <elf-symbol name='devm_snd_soc_register_card' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc12c063'/>
+      <elf-symbol name='devm_snd_soc_register_component' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x965b6f16'/>
+      <elf-symbol name='devm_spi_register_controller' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61492d20'/>
+      <elf-symbol name='devm_thermal_of_cooling_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f69819'/>
+      <elf-symbol name='devm_thermal_zone_of_sensor_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3fd0c5cf'/>
+      <elf-symbol name='devm_thermal_zone_of_sensor_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7628d74'/>
+      <elf-symbol name='devm_usb_get_phy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2da5b6a5'/>
+      <elf-symbol name='devm_usb_get_phy_by_phandle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa802a9b'/>
+      <elf-symbol name='devm_watchdog_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5051f12b'/>
+      <elf-symbol name='devres_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb70968f9'/>
+      <elf-symbol name='devres_alloc_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff9cf701'/>
+      <elf-symbol name='devres_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1c7c6a9'/>
+      <elf-symbol name='devres_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe93e49c3'/>
+      <elf-symbol name='devres_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d6680bb'/>
+      <elf-symbol name='disable_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ce4ca6f'/>
+      <elf-symbol name='disable_irq_nosync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27bbf221'/>
+      <elf-symbol name='disable_percpu_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf21e1f9b'/>
+      <elf-symbol name='divider_get_val' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e798ffb'/>
+      <elf-symbol name='divider_recalc_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb998640'/>
+      <elf-symbol name='divider_ro_round_rate_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6b8b234'/>
+      <elf-symbol name='divider_round_rate_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb014861e'/>
+      <elf-symbol name='dma_alloc_attrs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8e2a7ed'/>
+      <elf-symbol name='dma_async_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94cf1f7e'/>
+      <elf-symbol name='dma_async_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebbd8598'/>
+      <elf-symbol name='dma_async_tx_descriptor_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2c00c22'/>
+      <elf-symbol name='dma_buf_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7afcfc0e'/>
+      <elf-symbol name='dma_buf_begin_cpu_access' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c1dc2f8'/>
+      <elf-symbol name='dma_buf_begin_cpu_access_partial' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6ebba5b'/>
+      <elf-symbol name='dma_buf_detach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5310e280'/>
+      <elf-symbol name='dma_buf_end_cpu_access' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3290f728'/>
+      <elf-symbol name='dma_buf_end_cpu_access_partial' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a991c11'/>
+      <elf-symbol name='dma_buf_export' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54025917'/>
+      <elf-symbol name='dma_buf_fd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad578e51'/>
+      <elf-symbol name='dma_buf_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9e8ad13'/>
+      <elf-symbol name='dma_buf_get_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1c7a7750'/>
+      <elf-symbol name='dma_buf_get_uuid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5d5e4cb'/>
+      <elf-symbol name='dma_buf_kmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8dfb043'/>
+      <elf-symbol name='dma_buf_kunmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xccf5d017'/>
+      <elf-symbol name='dma_buf_map_attachment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd61d81e0'/>
+      <elf-symbol name='dma_buf_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11440b7c'/>
+      <elf-symbol name='dma_buf_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55dfd83a'/>
+      <elf-symbol name='dma_buf_unmap_attachment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xffd5286a'/>
+      <elf-symbol name='dma_buf_vmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd4354a0'/>
+      <elf-symbol name='dma_buf_vunmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75a3f58a'/>
+      <elf-symbol name='dma_direct_map_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4edb5fff'/>
+      <elf-symbol name='dma_direct_map_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2cc25fb2'/>
+      <elf-symbol name='dma_direct_map_sg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca8c8dd0'/>
+      <elf-symbol name='dma_direct_sync_sg_for_cpu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f40a1c9'/>
+      <elf-symbol name='dma_direct_sync_sg_for_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x515f6654'/>
+      <elf-symbol name='dma_direct_sync_single_for_cpu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6df6e1c'/>
+      <elf-symbol name='dma_direct_sync_single_for_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdcdf9b9a'/>
+      <elf-symbol name='dma_direct_unmap_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x151a5dbc'/>
+      <elf-symbol name='dma_direct_unmap_sg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5f6374d'/>
+      <elf-symbol name='dma_fence_add_callback' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e21c9a1'/>
+      <elf-symbol name='dma_fence_array_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb15ab250'/>
+      <elf-symbol name='dma_fence_context_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14605535'/>
+      <elf-symbol name='dma_fence_default_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x350ea558'/>
+      <elf-symbol name='dma_fence_enable_sw_signaling' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d9ca0e6'/>
+      <elf-symbol name='dma_fence_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd8166a1'/>
+      <elf-symbol name='dma_fence_get_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e0b1deb'/>
+      <elf-symbol name='dma_fence_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16dee44d'/>
+      <elf-symbol name='dma_fence_match_context' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xacaa4c72'/>
+      <elf-symbol name='dma_fence_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe123f3d9'/>
+      <elf-symbol name='dma_fence_remove_callback' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b20fb95'/>
+      <elf-symbol name='dma_fence_signal' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x731c4a9c'/>
+      <elf-symbol name='dma_fence_signal_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d02cd70'/>
+      <elf-symbol name='dma_fence_wait_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98c039dc'/>
+      <elf-symbol name='dma_free_attrs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x105e4d65'/>
+      <elf-symbol name='dma_get_merge_boundary' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e3c9618'/>
+      <elf-symbol name='dma_get_sgtable_attrs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52d8b17f'/>
+      <elf-symbol name='dma_get_slave_caps' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5cf4103c'/>
+      <elf-symbol name='dma_get_slave_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb801c37'/>
+      <elf-symbol name='dma_heap_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa456d572'/>
+      <elf-symbol name='dma_heap_get_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb0a47dc'/>
+      <elf-symbol name='dma_heap_get_drvdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf39b6569'/>
+      <elf-symbol name='dma_heap_get_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed3a3cb3'/>
+      <elf-symbol name='dma_max_mapping_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd210be7'/>
+      <elf-symbol name='dma_mmap_attrs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f301555'/>
+      <elf-symbol name='dma_pool_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x678b96ec'/>
+      <elf-symbol name='dma_pool_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66a46391'/>
+      <elf-symbol name='dma_pool_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5aa7165'/>
+      <elf-symbol name='dma_pool_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f7754a8'/>
+      <elf-symbol name='dma_release_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56a44e1e'/>
+      <elf-symbol name='dma_request_chan' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc419d72'/>
+      <elf-symbol name='dma_request_slave_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x980354e1'/>
+      <elf-symbol name='dma_resv_add_excl_fence' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x822aac47'/>
+      <elf-symbol name='dma_resv_add_shared_fence' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6408e61e'/>
+      <elf-symbol name='dma_resv_copy_fences' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55494a21'/>
+      <elf-symbol name='dma_resv_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b1f605d'/>
+      <elf-symbol name='dma_resv_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0e2553c'/>
+      <elf-symbol name='dma_resv_reserve_shared' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x990007e3'/>
+      <elf-symbol name='dma_resv_test_signaled_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a214c3f'/>
+      <elf-symbol name='dma_resv_wait_timeout_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56ea8194'/>
+      <elf-symbol name='dma_set_coherent_mask' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85b32597'/>
+      <elf-symbol name='dma_set_mask' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf337bce7'/>
+      <elf-symbol name='dmaengine_unmap_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7242c561'/>
+      <elf-symbol name='dmam_alloc_attrs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7310aaac'/>
+      <elf-symbol name='dmam_free_coherent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82fa213c'/>
+      <elf-symbol name='dmam_pool_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b8bb291'/>
+      <elf-symbol name='do_SAK' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd051eb23'/>
+      <elf-symbol name='do_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x952664c5'/>
+      <elf-symbol name='do_wait_intr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b2f27fb'/>
+      <elf-symbol name='down' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6626afca'/>
+      <elf-symbol name='down_interruptible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81b395b3'/>
+      <elf-symbol name='down_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb162aef5'/>
+      <elf-symbol name='down_read_trylock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x93ff63d1'/>
+      <elf-symbol name='down_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9682235'/>
+      <elf-symbol name='down_trylock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc7e2596'/>
+      <elf-symbol name='down_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x486fdb09'/>
+      <elf-symbol name='downgrade_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x971410bd'/>
+      <elf-symbol name='dput' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87a80659'/>
+      <elf-symbol name='drain_workqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa38602cd'/>
+      <elf-symbol name='driver_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa69fc67c'/>
+      <elf-symbol name='driver_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12838fc6'/>
+      <elf-symbol name='driver_find_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafb46abc'/>
+      <elf-symbol name='driver_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe10edb5'/>
+      <elf-symbol name='driver_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a7a9039'/>
+      <elf-symbol name='drm_add_edid_modes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78a7b5a5'/>
+      <elf-symbol name='drm_add_modes_noedid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x915afa9d'/>
+      <elf-symbol name='drm_atomic_commit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x400b85df'/>
+      <elf-symbol name='drm_atomic_get_connector_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e0e4c6b'/>
+      <elf-symbol name='drm_atomic_get_crtc_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99e2e76'/>
+      <elf-symbol name='drm_atomic_get_plane_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb02c1e52'/>
+      <elf-symbol name='drm_atomic_get_private_obj_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad93441d'/>
+      <elf-symbol name='drm_atomic_helper_async_commit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdef808fe'/>
+      <elf-symbol name='drm_atomic_helper_check' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf95879a'/>
+      <elf-symbol name='drm_atomic_helper_check_plane_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88963344'/>
+      <elf-symbol name='drm_atomic_helper_cleanup_planes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x417c01ce'/>
+      <elf-symbol name='drm_atomic_helper_commit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x991b5783'/>
+      <elf-symbol name='drm_atomic_helper_commit_cleanup_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2cbe00b1'/>
+      <elf-symbol name='drm_atomic_helper_commit_duplicated_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb050748'/>
+      <elf-symbol name='drm_atomic_helper_commit_hw_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26b112e5'/>
+      <elf-symbol name='drm_atomic_helper_commit_modeset_disables' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb4ecc73b'/>
+      <elf-symbol name='drm_atomic_helper_commit_modeset_enables' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f3c8347'/>
+      <elf-symbol name='drm_atomic_helper_commit_planes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x207f64ae'/>
+      <elf-symbol name='drm_atomic_helper_commit_tail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29be521e'/>
+      <elf-symbol name='drm_atomic_helper_commit_tail_rpm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b3fab3e'/>
+      <elf-symbol name='drm_atomic_helper_connector_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fe68e39'/>
+      <elf-symbol name='drm_atomic_helper_connector_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1d1b69'/>
+      <elf-symbol name='drm_atomic_helper_connector_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe80eb472'/>
+      <elf-symbol name='drm_atomic_helper_crtc_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25e353f2'/>
+      <elf-symbol name='drm_atomic_helper_crtc_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7f8076a'/>
+      <elf-symbol name='drm_atomic_helper_crtc_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x774ab7'/>
+      <elf-symbol name='drm_atomic_helper_dirtyfb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7eee7ac4'/>
+      <elf-symbol name='drm_atomic_helper_disable_plane' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x31219a31'/>
+      <elf-symbol name='drm_atomic_helper_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc05e7177'/>
+      <elf-symbol name='drm_atomic_helper_page_flip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fdb5ca6'/>
+      <elf-symbol name='drm_atomic_helper_plane_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7207429f'/>
+      <elf-symbol name='drm_atomic_helper_plane_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8359f708'/>
+      <elf-symbol name='drm_atomic_helper_plane_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9fcb75d'/>
+      <elf-symbol name='drm_atomic_helper_prepare_planes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfcacfa8'/>
+      <elf-symbol name='drm_atomic_helper_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x684cc324'/>
+      <elf-symbol name='drm_atomic_helper_set_config' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf061fdca'/>
+      <elf-symbol name='drm_atomic_helper_setup_commit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fe65237'/>
+      <elf-symbol name='drm_atomic_helper_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d63255e'/>
+      <elf-symbol name='drm_atomic_helper_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3061c4ee'/>
+      <elf-symbol name='drm_atomic_helper_swap_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70c69e43'/>
+      <elf-symbol name='drm_atomic_helper_update_legacy_modeset_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd11ef546'/>
+      <elf-symbol name='drm_atomic_helper_update_plane' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xefd55889'/>
+      <elf-symbol name='drm_atomic_helper_wait_for_dependencies' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4dc1eb76'/>
+      <elf-symbol name='drm_atomic_helper_wait_for_fences' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4624bec'/>
+      <elf-symbol name='drm_atomic_helper_wait_for_vblanks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1236b6aa'/>
+      <elf-symbol name='drm_atomic_private_obj_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd04580c3'/>
+      <elf-symbol name='drm_atomic_private_obj_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb91d19ec'/>
+      <elf-symbol name='drm_atomic_set_crtc_for_connector' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61fc3741'/>
+      <elf-symbol name='drm_atomic_set_fence_for_plane' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2afa0368'/>
+      <elf-symbol name='drm_atomic_set_mode_for_crtc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5dc7fab7'/>
+      <elf-symbol name='drm_atomic_state_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc5fabb9'/>
+      <elf-symbol name='drm_atomic_state_clear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d3cd767'/>
+      <elf-symbol name='drm_atomic_state_default_clear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ee88e3f'/>
+      <elf-symbol name='drm_atomic_state_default_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c0e1ccd'/>
+      <elf-symbol name='drm_atomic_state_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x343df7ca'/>
+      <elf-symbol name='drm_bridge_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53c1a30d'/>
+      <elf-symbol name='drm_bridge_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5a59832'/>
+      <elf-symbol name='drm_bridge_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf3e9e5f8'/>
+      <elf-symbol name='drm_bridge_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f5c5e2d'/>
+      <elf-symbol name='drm_bridge_mode_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x597a0e8c'/>
+      <elf-symbol name='drm_bridge_post_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe579576d'/>
+      <elf-symbol name='drm_bridge_pre_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8c43728'/>
+      <elf-symbol name='drm_bridge_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa15d2f5d'/>
+      <elf-symbol name='drm_calc_vbltimestamp_from_scanoutpos' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55a3fbcb'/>
+      <elf-symbol name='drm_class_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5b7eeb0'/>
+      <elf-symbol name='drm_class_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb9350af'/>
+      <elf-symbol name='drm_clflush_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6722e3b'/>
+      <elf-symbol name='drm_client_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab0c029b'/>
+      <elf-symbol name='drm_client_modeset_commit_force' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe81732a6'/>
+      <elf-symbol name='drm_client_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4fa362fa'/>
+      <elf-symbol name='drm_compat_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x97a9ca54'/>
+      <elf-symbol name='drm_connector_attach_content_protection_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x802c2f71'/>
+      <elf-symbol name='drm_connector_attach_edid_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x526be9ea'/>
+      <elf-symbol name='drm_connector_attach_encoder' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcab02b2d'/>
+      <elf-symbol name='drm_connector_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b8cef5c'/>
+      <elf-symbol name='drm_connector_has_possible_encoder' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ae670bb'/>
+      <elf-symbol name='drm_connector_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf513f618'/>
+      <elf-symbol name='drm_connector_list_iter_begin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe82c2ee'/>
+      <elf-symbol name='drm_connector_list_iter_end' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32297e0c'/>
+      <elf-symbol name='drm_connector_list_iter_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcac10fdf'/>
+      <elf-symbol name='drm_connector_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6cbd0cb'/>
+      <elf-symbol name='drm_connector_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b63e752'/>
+      <elf-symbol name='drm_connector_update_edid_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68a45084'/>
+      <elf-symbol name='drm_crtc_arm_vblank_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd99d9282'/>
+      <elf-symbol name='drm_crtc_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24f78e65'/>
+      <elf-symbol name='drm_crtc_handle_vblank' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4dbf5066'/>
+      <elf-symbol name='drm_crtc_init_with_planes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15e17ba9'/>
+      <elf-symbol name='drm_crtc_send_vblank_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d801984'/>
+      <elf-symbol name='drm_crtc_set_max_vblank_count' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x777aa641'/>
+      <elf-symbol name='drm_crtc_vblank_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b8801aa'/>
+      <elf-symbol name='drm_crtc_vblank_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x148988ab'/>
+      <elf-symbol name='drm_crtc_vblank_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0f7278e'/>
+      <elf-symbol name='drm_crtc_vblank_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9e367d1'/>
+      <elf-symbol name='drm_crtc_vblank_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe04c4c7'/>
+      <elf-symbol name='drm_crtc_wait_one_vblank' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe61c7f52'/>
+      <elf-symbol name='drm_cvt_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x720bf2c5'/>
+      <elf-symbol name='drm_dbg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x34a4640a'/>
+      <elf-symbol name='drm_debugfs_create_files' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74506676'/>
+      <elf-symbol name='drm_detect_hdmi_monitor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8ad5d01'/>
+      <elf-symbol name='drm_detect_monitor_audio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66551bc7'/>
+      <elf-symbol name='drm_dev_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50c688af'/>
+      <elf-symbol name='drm_dev_dbg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7eff4106'/>
+      <elf-symbol name='drm_dev_printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1c0a97ce'/>
+      <elf-symbol name='drm_dev_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5541df6'/>
+      <elf-symbol name='drm_dev_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd24284f4'/>
+      <elf-symbol name='drm_dev_set_unique' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1fb405d9'/>
+      <elf-symbol name='drm_dev_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab6ec53d'/>
+      <elf-symbol name='drm_display_mode_from_videomode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec55cbce'/>
+      <elf-symbol name='drm_display_mode_to_videomode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d44d611'/>
+      <elf-symbol name='drm_do_get_edid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4a4c06e'/>
+      <elf-symbol name='drm_dp_atomic_find_vcpi_slots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20c96707'/>
+      <elf-symbol name='drm_dp_atomic_release_vcpi_slots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab190a14'/>
+      <elf-symbol name='drm_dp_aux_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x813270a4'/>
+      <elf-symbol name='drm_dp_aux_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99b63830'/>
+      <elf-symbol name='drm_dp_bw_code_to_link_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73011db0'/>
+      <elf-symbol name='drm_dp_calc_pbn_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa47826e4'/>
+      <elf-symbol name='drm_dp_channel_eq_ok' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xedcf81ce'/>
+      <elf-symbol name='drm_dp_clock_recovery_ok' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d701329'/>
+      <elf-symbol name='drm_dp_dpcd_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c1fcee'/>
+      <elf-symbol name='drm_dp_dpcd_read_link_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x595a1f94'/>
+      <elf-symbol name='drm_dp_dpcd_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x767948c8'/>
+      <elf-symbol name='drm_dp_find_vcpi_slots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe3a65a0'/>
+      <elf-symbol name='drm_dp_get_adjust_request_pre_emphasis' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x582f248e'/>
+      <elf-symbol name='drm_dp_get_adjust_request_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5c99a79'/>
+      <elf-symbol name='drm_dp_link_configure' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1de84678'/>
+      <elf-symbol name='drm_dp_link_power_down' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1527534'/>
+      <elf-symbol name='drm_dp_link_power_up' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb03e84b6'/>
+      <elf-symbol name='drm_dp_link_probe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79fdb3bd'/>
+      <elf-symbol name='drm_dp_link_rate_to_bw_code' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26815dbc'/>
+      <elf-symbol name='drm_dp_link_train_channel_eq_delay' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48b62a57'/>
+      <elf-symbol name='drm_dp_link_train_clock_recovery_delay' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6ff9496'/>
+      <elf-symbol name='drm_dp_mst_allocate_vcpi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x182b2983'/>
+      <elf-symbol name='drm_dp_mst_deallocate_vcpi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1c48f67e'/>
+      <elf-symbol name='drm_dp_mst_detect_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1c0d286'/>
+      <elf-symbol name='drm_dp_mst_get_edid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9185290'/>
+      <elf-symbol name='drm_dp_mst_hpd_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7cad8f4'/>
+      <elf-symbol name='drm_dp_mst_reset_vcpi_slots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26a7d09e'/>
+      <elf-symbol name='drm_dp_mst_topology_mgr_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87071476'/>
+      <elf-symbol name='drm_dp_mst_topology_mgr_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf7aadca'/>
+      <elf-symbol name='drm_dp_mst_topology_mgr_set_mst' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf160e7a9'/>
+      <elf-symbol name='drm_dp_send_power_updown_phy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92f95f99'/>
+      <elf-symbol name='drm_dp_update_payload_part1' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d045d35'/>
+      <elf-symbol name='drm_dp_update_payload_part2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73205b76'/>
+      <elf-symbol name='drm_edid_duplicate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47f985aa'/>
+      <elf-symbol name='drm_encoder_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2ecd7de'/>
+      <elf-symbol name='drm_encoder_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x59176fd7'/>
+      <elf-symbol name='drm_err' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd8b879a'/>
+      <elf-symbol name='drm_event_reserve_init_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6219d4d'/>
+      <elf-symbol name='drm_fb_cma_get_gem_obj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ed9ab1'/>
+      <elf-symbol name='drm_flip_work_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd60ff1c2'/>
+      <elf-symbol name='drm_flip_work_commit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24a2ed2c'/>
+      <elf-symbol name='drm_flip_work_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x737100b1'/>
+      <elf-symbol name='drm_flip_work_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdcb59b84'/>
+      <elf-symbol name='drm_format_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7de7124'/>
+      <elf-symbol name='drm_framebuffer_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x950f50f2'/>
+      <elf-symbol name='drm_framebuffer_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7d717f1'/>
+      <elf-symbol name='drm_framebuffer_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8fef356'/>
+      <elf-symbol name='drm_framebuffer_unregister_private' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff8acf0f'/>
+      <elf-symbol name='drm_gem_cma_dumb_create_internal' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd14dc0e1'/>
+      <elf-symbol name='drm_gem_cma_free_object' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40e3e3'/>
+      <elf-symbol name='drm_gem_cma_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe47fd055'/>
+      <elf-symbol name='drm_gem_cma_prime_get_sg_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca8f607e'/>
+      <elf-symbol name='drm_gem_cma_prime_import_sg_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8768863e'/>
+      <elf-symbol name='drm_gem_cma_prime_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b6a8a9a'/>
+      <elf-symbol name='drm_gem_cma_prime_vmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xade46406'/>
+      <elf-symbol name='drm_gem_cma_prime_vunmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab329fca'/>
+      <elf-symbol name='drm_gem_create_mmap_offset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63668de6'/>
+      <elf-symbol name='drm_gem_fb_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7134b2f5'/>
+      <elf-symbol name='drm_gem_fb_create_handle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3685b6fa'/>
+      <elf-symbol name='drm_gem_fb_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f77a421'/>
+      <elf-symbol name='drm_gem_fb_get_obj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3953d0d0'/>
+      <elf-symbol name='drm_gem_fb_prepare_fb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x858987c6'/>
+      <elf-symbol name='drm_gem_free_mmap_offset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a614fad'/>
+      <elf-symbol name='drm_gem_get_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebc1b347'/>
+      <elf-symbol name='drm_gem_handle_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10787dd4'/>
+      <elf-symbol name='drm_gem_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91d63208'/>
+      <elf-symbol name='drm_gem_mmap_obj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17141253'/>
+      <elf-symbol name='drm_gem_object_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b1077e5'/>
+      <elf-symbol name='drm_gem_object_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x530d83f'/>
+      <elf-symbol name='drm_gem_object_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3fb30ab5'/>
+      <elf-symbol name='drm_gem_object_put_unlocked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c378d39'/>
+      <elf-symbol name='drm_gem_object_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4230beee'/>
+      <elf-symbol name='drm_gem_prime_export' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba43df0c'/>
+      <elf-symbol name='drm_gem_prime_fd_to_handle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a9611ea'/>
+      <elf-symbol name='drm_gem_prime_handle_to_fd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85ca227f'/>
+      <elf-symbol name='drm_gem_prime_import' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1591f19c'/>
+      <elf-symbol name='drm_gem_prime_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf040180'/>
+      <elf-symbol name='drm_gem_private_object_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe12ad57c'/>
+      <elf-symbol name='drm_gem_put_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e3be15b'/>
+      <elf-symbol name='drm_gem_vm_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x93399005'/>
+      <elf-symbol name='drm_gem_vm_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6a37ded'/>
+      <elf-symbol name='drm_get_connector_status_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd60df2'/>
+      <elf-symbol name='drm_get_edid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd25ae0b0'/>
+      <elf-symbol name='drm_get_format_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd26daf9'/>
+      <elf-symbol name='drm_get_format_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e095f11'/>
+      <elf-symbol name='drm_handle_vblank' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb184326a'/>
+      <elf-symbol name='drm_hdcp_check_ksvs_revoked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32577848'/>
+      <elf-symbol name='drm_hdcp_update_content_protection' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x496fb73'/>
+      <elf-symbol name='drm_hdmi_avi_infoframe_from_display_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeee38aab'/>
+      <elf-symbol name='drm_helper_hpd_irq_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x297621c9'/>
+      <elf-symbol name='drm_helper_mode_fill_fb_struct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bda5ddc'/>
+      <elf-symbol name='drm_helper_probe_single_connector_modes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6038d25b'/>
+      <elf-symbol name='drm_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0e4df58'/>
+      <elf-symbol name='drm_irq_install' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x386f371c'/>
+      <elf-symbol name='drm_irq_uninstall' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebe159f2'/>
+      <elf-symbol name='drm_kms_helper_hotplug_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaeb18d2d'/>
+      <elf-symbol name='drm_kms_helper_poll_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f75f69c'/>
+      <elf-symbol name='drm_kms_helper_poll_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x727c5076'/>
+      <elf-symbol name='drm_kms_helper_poll_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x797ec5f8'/>
+      <elf-symbol name='drm_kms_helper_poll_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ac0c1b9'/>
+      <elf-symbol name='drm_match_cea_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16c66718'/>
+      <elf-symbol name='drm_mm_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b982195'/>
+      <elf-symbol name='drm_mm_insert_node_in_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d12fd6e'/>
+      <elf-symbol name='drm_mm_print' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d93e65'/>
+      <elf-symbol name='drm_mm_remove_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c287154'/>
+      <elf-symbol name='drm_mm_takedown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc307a10c'/>
+      <elf-symbol name='drm_mode_config_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96c86580'/>
+      <elf-symbol name='drm_mode_config_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3133bd7'/>
+      <elf-symbol name='drm_mode_config_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x191c21dc'/>
+      <elf-symbol name='drm_mode_convert_umode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdbc19bf1'/>
+      <elf-symbol name='drm_mode_copy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa33ab01d'/>
+      <elf-symbol name='drm_mode_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x617da3cc'/>
+      <elf-symbol name='drm_mode_create_dp_colorspace_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc99980d5'/>
+      <elf-symbol name='drm_mode_crtc_set_gamma_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b333f8b'/>
+      <elf-symbol name='drm_mode_debug_printmodeline' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x521c94e8'/>
+      <elf-symbol name='drm_mode_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf93de616'/>
+      <elf-symbol name='drm_mode_duplicate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc5d2463'/>
+      <elf-symbol name='drm_mode_equal' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c8d1457'/>
+      <elf-symbol name='drm_mode_object_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1222fa84'/>
+      <elf-symbol name='drm_mode_object_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85b61ecf'/>
+      <elf-symbol name='drm_mode_object_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdcc2141d'/>
+      <elf-symbol name='drm_mode_probed_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfbb1e2e'/>
+      <elf-symbol name='drm_mode_set_crtcinfo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb26bf25d'/>
+      <elf-symbol name='drm_mode_set_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c2a17d8'/>
+      <elf-symbol name='drm_mode_vrefresh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6661bd33'/>
+      <elf-symbol name='drm_modeset_acquire_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x140d0a70'/>
+      <elf-symbol name='drm_modeset_acquire_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53048de8'/>
+      <elf-symbol name='drm_modeset_backoff' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b462cab'/>
+      <elf-symbol name='drm_modeset_drop_locks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14a09006'/>
+      <elf-symbol name='drm_modeset_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60afed64'/>
+      <elf-symbol name='drm_modeset_lock_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb6944a2'/>
+      <elf-symbol name='drm_modeset_lock_all_ctx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86fe639f'/>
+      <elf-symbol name='drm_modeset_lock_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ffa8ca0'/>
+      <elf-symbol name='drm_modeset_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28d9da80'/>
+      <elf-symbol name='drm_modeset_unlock_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d6f8712'/>
+      <elf-symbol name='drm_object_attach_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2243aac5'/>
+      <elf-symbol name='drm_object_property_set_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75a50441'/>
+      <elf-symbol name='drm_of_component_match_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc72c04ed'/>
+      <elf-symbol name='drm_of_find_possible_crtcs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c5c8aff'/>
+      <elf-symbol name='drm_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc714e8f1'/>
+      <elf-symbol name='drm_panel_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4862f8e'/>
+      <elf-symbol name='drm_panel_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56e91cd7'/>
+      <elf-symbol name='drm_panel_detach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfdb6749'/>
+      <elf-symbol name='drm_panel_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8ca18f3'/>
+      <elf-symbol name='drm_panel_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa28de34c'/>
+      <elf-symbol name='drm_panel_get_modes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e76df48'/>
+      <elf-symbol name='drm_panel_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6026ef03'/>
+      <elf-symbol name='drm_panel_notifier_call_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x569b84a5'/>
+      <elf-symbol name='drm_panel_notifier_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38df5974'/>
+      <elf-symbol name='drm_panel_notifier_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb6166ae'/>
+      <elf-symbol name='drm_panel_prepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49afa45'/>
+      <elf-symbol name='drm_panel_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65b2b677'/>
+      <elf-symbol name='drm_panel_unprepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x663450e8'/>
+      <elf-symbol name='drm_plane_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5623bf1'/>
+      <elf-symbol name='drm_plane_create_alpha_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3dd07be'/>
+      <elf-symbol name='drm_plane_create_blend_mode_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x634827e9'/>
+      <elf-symbol name='drm_plane_create_color_properties' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed107d16'/>
+      <elf-symbol name='drm_plane_create_rotation_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2c6b6d7'/>
+      <elf-symbol name='drm_plane_create_zpos_immutable_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5d3be62'/>
+      <elf-symbol name='drm_plane_create_zpos_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf4505cf'/>
+      <elf-symbol name='drm_plane_enable_fb_damage_clips' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71788b78'/>
+      <elf-symbol name='drm_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e8b9ee4'/>
+      <elf-symbol name='drm_prime_gem_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d039694'/>
+      <elf-symbol name='drm_prime_pages_to_sg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4487ac5c'/>
+      <elf-symbol name='drm_prime_sg_to_page_addr_arrays' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9df510e'/>
+      <elf-symbol name='drm_printf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28779e52'/>
+      <elf-symbol name='drm_property_blob_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4cc149f6'/>
+      <elf-symbol name='drm_property_blob_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa21bf5a3'/>
+      <elf-symbol name='drm_property_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x610c28be'/>
+      <elf-symbol name='drm_property_create_bitmask' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa24615d'/>
+      <elf-symbol name='drm_property_create_blob' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67cae772'/>
+      <elf-symbol name='drm_property_create_enum' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x755fb695'/>
+      <elf-symbol name='drm_property_create_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10b47e0'/>
+      <elf-symbol name='drm_property_lookup_blob' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98f8e49a'/>
+      <elf-symbol name='drm_put_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbbee7a5f'/>
+      <elf-symbol name='drm_puts' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x521ad6d0'/>
+      <elf-symbol name='drm_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8394d70'/>
+      <elf-symbol name='drm_rect_calc_hscale' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d50570f'/>
+      <elf-symbol name='drm_rect_calc_vscale' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91fec1cc'/>
+      <elf-symbol name='drm_rect_intersect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x871ab41a'/>
+      <elf-symbol name='drm_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5bea8102'/>
+      <elf-symbol name='drm_rotation_simplify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf666902'/>
+      <elf-symbol name='drm_send_event_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d0440b4'/>
+      <elf-symbol name='drm_set_preferred_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5710f766'/>
+      <elf-symbol name='drm_state_dump' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x711236cc'/>
+      <elf-symbol name='drm_sysfs_hotplug_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa9f14b4c'/>
+      <elf-symbol name='drm_universal_plane_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x893b548f'/>
+      <elf-symbol name='drm_vblank_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe707be19'/>
+      <elf-symbol name='drm_vma_offset_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x21c5c26'/>
+      <elf-symbol name='drm_vma_offset_lookup_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c06514e'/>
+      <elf-symbol name='drm_vma_offset_manager_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ca0833d'/>
+      <elf-symbol name='drm_vma_offset_manager_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc73cda3c'/>
+      <elf-symbol name='drm_vma_offset_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd592615'/>
+      <elf-symbol name='drm_wait_one_vblank' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37d05bc2'/>
+      <elf-symbol name='drop_nlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x536c1096'/>
+      <elf-symbol name='dst_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68c403c5'/>
+      <elf-symbol name='dump_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd989e21d'/>
+      <elf-symbol name='dump_stack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b2dc060'/>
+      <elf-symbol name='dup_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa82aa2af'/>
+      <elf-symbol name='dw_pcie_host_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x461bfc6c'/>
+      <elf-symbol name='dw_pcie_msi_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3efc8'/>
+      <elf-symbol name='dw_pcie_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7791e066'/>
+      <elf-symbol name='dw_pcie_setup_rc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54fdf7fa'/>
+      <elf-symbol name='dw_pcie_wait_for_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x34feedc5'/>
+      <elf-symbol name='dw_pcie_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe9a83d5'/>
+      <elf-symbol name='enable_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfcec0987'/>
+      <elf-symbol name='enable_percpu_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x335c570f'/>
+      <elf-symbol name='end_buffer_read_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3faf584a'/>
+      <elf-symbol name='eth_commit_mac_addr_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc234586'/>
+      <elf-symbol name='eth_mac_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6035b4e3'/>
+      <elf-symbol name='eth_platform_get_mac_address' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e65ce30'/>
+      <elf-symbol name='eth_prepare_mac_addr_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7f26459'/>
+      <elf-symbol name='eth_type_trans' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7cb74b55'/>
+      <elf-symbol name='eth_validate_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f355401'/>
+      <elf-symbol name='ether_setup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30bc41db'/>
+      <elf-symbol name='ethtool_op_get_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd18d671d'/>
+      <elf-symbol name='ethtool_op_get_ts_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87a079a'/>
+      <elf-symbol name='event_triggers_call' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7097405'/>
+      <elf-symbol name='extcon_find_edev_by_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc109366c'/>
+      <elf-symbol name='extcon_get_edev_by_phandle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe932df2'/>
+      <elf-symbol name='extcon_get_edev_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff2d63a2'/>
+      <elf-symbol name='extcon_get_extcon_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4979b6a7'/>
+      <elf-symbol name='extcon_get_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38a507b8'/>
+      <elf-symbol name='extcon_get_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44e5e88b'/>
+      <elf-symbol name='extcon_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56818469'/>
+      <elf-symbol name='extcon_set_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x392f8941'/>
+      <elf-symbol name='extcon_set_property_capability' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb52993cb'/>
+      <elf-symbol name='extcon_set_state_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf56b0bc2'/>
+      <elf-symbol name='extcon_unregister_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb87a4f4d'/>
+      <elf-symbol name='fasync_helper' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39b8ea82'/>
+      <elf-symbol name='fd_install' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda45e4f0'/>
+      <elf-symbol name='fget' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x546125ae'/>
+      <elf-symbol name='file_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd725a41f'/>
+      <elf-symbol name='filemap_fdatawait_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a6c860d'/>
+      <elf-symbol name='filemap_fdatawrite_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57d1e33'/>
+      <elf-symbol name='find_last_bit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6a68816'/>
+      <elf-symbol name='find_next_bit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc0a3d105'/>
+      <elf-symbol name='find_next_zero_bit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x479c3c86'/>
+      <elf-symbol name='find_snd_usb_substream' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe463f15f'/>
+      <elf-symbol name='find_vma' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa50f1014'/>
+      <elf-symbol name='find_vpid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x97c5a0eb'/>
+      <elf-symbol name='finish_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92540fbf'/>
+      <elf-symbol name='firmware_request_nowarn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb66cb89'/>
+      <elf-symbol name='flush_dcache_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea9ec35d'/>
+      <elf-symbol name='flush_delayed_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1148c0ea'/>
+      <elf-symbol name='flush_signals' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x524da4e2'/>
+      <elf-symbol name='flush_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4735ac17'/>
+      <elf-symbol name='flush_workqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42160169'/>
+      <elf-symbol name='fput' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69a347ef'/>
+      <elf-symbol name='frame_vector_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1dee5f1'/>
+      <elf-symbol name='frame_vector_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff903b43'/>
+      <elf-symbol name='frame_vector_to_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x689f370d'/>
+      <elf-symbol name='frame_vector_to_pfns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfcdc14d6'/>
+      <elf-symbol name='free_buffer_head' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2eaff0b'/>
+      <elf-symbol name='free_io_pgtable_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1485a307'/>
+      <elf-symbol name='free_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1514a3b'/>
+      <elf-symbol name='free_netdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8ecf45c'/>
+      <elf-symbol name='free_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4302d0eb'/>
+      <elf-symbol name='free_pages_exact' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb44339a'/>
+      <elf-symbol name='free_percpu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9ec4e21'/>
+      <elf-symbol name='free_percpu_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc6bec66'/>
+      <elf-symbol name='freezing_slow_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2495dd5'/>
+      <elf-symbol name='freq_qos_add_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc83dc59'/>
+      <elf-symbol name='freq_qos_remove_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x156f33cf'/>
+      <elf-symbol name='freq_qos_update_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b28a16'/>
+      <elf-symbol name='freq_reg_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeda2c3c6'/>
+      <elf-symbol name='fsl8250_handle_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x854475cb'/>
+      <elf-symbol name='fsync_bdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20b542d7'/>
+      <elf-symbol name='full_name_hash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6eaaea1'/>
+      <elf-symbol name='fuse_conn_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x544be4d9'/>
+      <elf-symbol name='fuse_conn_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x342efd96'/>
+      <elf-symbol name='fuse_conn_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x622ea679'/>
+      <elf-symbol name='fuse_dequeue_forget' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x168d875d'/>
+      <elf-symbol name='fuse_dev_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x868826c4'/>
+      <elf-symbol name='fuse_dev_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8ef350f'/>
+      <elf-symbol name='fuse_dev_install' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdecf1ccf'/>
+      <elf-symbol name='fuse_fill_super_common' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x116d84a9'/>
+      <elf-symbol name='fuse_free_conn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29677c9a'/>
+      <elf-symbol name='fuse_get_unique' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6d49618'/>
+      <elf-symbol name='fuse_kill_sb_anon' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe93fda5e'/>
+      <elf-symbol name='fuse_len_args' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd626ee3'/>
+      <elf-symbol name='fuse_request_end' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7fa537d0'/>
+      <elf-symbol name='fuse_send_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa279b738'/>
+      <elf-symbol name='fwnode_connection_find_match' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x999ffc78'/>
+      <elf-symbol name='fwnode_get_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50039b00'/>
+      <elf-symbol name='fwnode_handle_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdab78916'/>
+      <elf-symbol name='fwnode_property_present' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd42b05b'/>
+      <elf-symbol name='fwnode_property_read_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x645cf669'/>
+      <elf-symbol name='fwnode_property_read_u16_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4991a46d'/>
+      <elf-symbol name='fwnode_property_read_u32_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6d284ac'/>
+      <elf-symbol name='gcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea124bd1'/>
+      <elf-symbol name='gen_pool_add_owner' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbefa51a3'/>
+      <elf-symbol name='gen_pool_alloc_algo_owner' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b593aa8'/>
+      <elf-symbol name='gen_pool_avail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0d3f0a4'/>
+      <elf-symbol name='gen_pool_best_fit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb737b185'/>
+      <elf-symbol name='gen_pool_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xced0f4d4'/>
+      <elf-symbol name='gen_pool_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c224cda'/>
+      <elf-symbol name='gen_pool_dma_alloc_align' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xada31e57'/>
+      <elf-symbol name='gen_pool_dma_zalloc_align' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d210724'/>
+      <elf-symbol name='gen_pool_free_owner' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60ba97c'/>
+      <elf-symbol name='gen_pool_set_algo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96e5d30f'/>
+      <elf-symbol name='gen_pool_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2464da17'/>
+      <elf-symbol name='gen_pool_virt_to_phys' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d0ba682'/>
+      <elf-symbol name='generic_block_bmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65fa58d6'/>
+      <elf-symbol name='generic_cont_expand_simple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c30b23a'/>
+      <elf-symbol name='generic_delete_inode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc14012b'/>
+      <elf-symbol name='generic_device_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1c59db57'/>
+      <elf-symbol name='generic_end_io_acct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6f60787'/>
+      <elf-symbol name='generic_error_remove_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf8255d4'/>
+      <elf-symbol name='generic_fh_to_dentry' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc0e628d4'/>
+      <elf-symbol name='generic_fh_to_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x608050ed'/>
+      <elf-symbol name='generic_file_fsync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd998349c'/>
+      <elf-symbol name='generic_file_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b046a9b'/>
+      <elf-symbol name='generic_file_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13b3bd55'/>
+      <elf-symbol name='generic_file_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62a52fd1'/>
+      <elf-symbol name='generic_file_read_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7dc4a05d'/>
+      <elf-symbol name='generic_file_splice_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19fad4b8'/>
+      <elf-symbol name='generic_file_write_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9685cf58'/>
+      <elf-symbol name='generic_handle_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ceaf0d5'/>
+      <elf-symbol name='generic_key_instantiate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac3d6c30'/>
+      <elf-symbol name='generic_mii_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6029cb7'/>
+      <elf-symbol name='generic_start_io_acct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc86a89ca'/>
+      <elf-symbol name='generic_write_end' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d921dd1'/>
+      <elf-symbol name='genl_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ad89c4d'/>
+      <elf-symbol name='genl_register_family' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27397605'/>
+      <elf-symbol name='genl_unregister_family' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd22f53ee'/>
+      <elf-symbol name='genlmsg_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a822a2e'/>
+      <elf-symbol name='genphy_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7dacb1d9'/>
+      <elf-symbol name='get_anon_bdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd07f543'/>
+      <elf-symbol name='get_cpu_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x681ef9ae'/>
+      <elf-symbol name='get_cpu_idle_time' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9fe899b7'/>
+      <elf-symbol name='get_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x142be2c'/>
+      <elf-symbol name='get_device_system_crosststamp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe032a0c5'/>
+      <elf-symbol name='get_governor_parent_kobj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba47b1f5'/>
+      <elf-symbol name='get_next_ino' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe953b21f'/>
+      <elf-symbol name='get_option' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb0e10781'/>
+      <elf-symbol name='get_pid_task' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x926dccc8'/>
+      <elf-symbol name='get_random_bytes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79aa04a2'/>
+      <elf-symbol name='get_random_u32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd36dc10c'/>
+      <elf-symbol name='get_task_exe_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e71960b'/>
+      <elf-symbol name='get_task_mm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4bd6f17b'/>
+      <elf-symbol name='get_tree_bdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc66f9ac6'/>
+      <elf-symbol name='get_tree_single' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce11f012'/>
+      <elf-symbol name='get_unmapped_area' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf97798ff'/>
+      <elf-symbol name='get_unused_fd_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa843805a'/>
+      <elf-symbol name='get_user_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc66bfa1'/>
+      <elf-symbol name='get_user_pages_fast' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf5aba62'/>
+      <elf-symbol name='get_user_pages_remote' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb64c54c'/>
+      <elf-symbol name='get_vaddr_frames' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x655611bf'/>
+      <elf-symbol name='get_zeroed_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf09b5d9a'/>
+      <elf-symbol name='getboottime64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xef464c28'/>
+      <elf-symbol name='gf128mul_lle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e13f6f6'/>
+      <elf-symbol name='gnss_allocate_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6551f4b8'/>
+      <elf-symbol name='gnss_deregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8b0f9d4'/>
+      <elf-symbol name='gnss_insert_raw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66307e6c'/>
+      <elf-symbol name='gnss_put_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc006009'/>
+      <elf-symbol name='gnss_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc044e57'/>
+      <elf-symbol name='gov_attr_set_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60a1d960'/>
+      <elf-symbol name='gov_attr_set_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2823b5e'/>
+      <elf-symbol name='gov_attr_set_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x841f39fe'/>
+      <elf-symbol name='gpio_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe990052'/>
+      <elf-symbol name='gpio_free_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb0d1656c'/>
+      <elf-symbol name='gpio_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47229b5c'/>
+      <elf-symbol name='gpio_request_one' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x403f9529'/>
+      <elf-symbol name='gpio_to_desc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13ff1ee4'/>
+      <elf-symbol name='gpiochip_add_data_with_key' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9d11d26'/>
+      <elf-symbol name='gpiochip_add_pin_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7089a226'/>
+      <elf-symbol name='gpiochip_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa20b7bb8'/>
+      <elf-symbol name='gpiochip_generic_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a842ab2'/>
+      <elf-symbol name='gpiochip_generic_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xecb5e0c6'/>
+      <elf-symbol name='gpiochip_get_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41b0a2ec'/>
+      <elf-symbol name='gpiochip_line_is_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9dc4db82'/>
+      <elf-symbol name='gpiochip_lock_as_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd7b7583f'/>
+      <elf-symbol name='gpiochip_populate_parent_fwspec_fourcell' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x797f1b04'/>
+      <elf-symbol name='gpiochip_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71d3c891'/>
+      <elf-symbol name='gpiochip_unlock_as_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9fcf5471'/>
+      <elf-symbol name='gpiod_cansleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc9702dc'/>
+      <elf-symbol name='gpiod_direction_input' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91a33d0d'/>
+      <elf-symbol name='gpiod_direction_output' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcaed27bf'/>
+      <elf-symbol name='gpiod_direction_output_raw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4edaf593'/>
+      <elf-symbol name='gpiod_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17ffdca8'/>
+      <elf-symbol name='gpiod_get_direction' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5376cba'/>
+      <elf-symbol name='gpiod_get_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa9f5498'/>
+      <elf-symbol name='gpiod_get_raw_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9bed8f0'/>
+      <elf-symbol name='gpiod_get_raw_value_cansleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xada71854'/>
+      <elf-symbol name='gpiod_get_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd1987fa'/>
+      <elf-symbol name='gpiod_get_value_cansleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaabed960'/>
+      <elf-symbol name='gpiod_is_active_low' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4bdac03c'/>
+      <elf-symbol name='gpiod_set_consumer_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2db05b70'/>
+      <elf-symbol name='gpiod_set_debounce' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0f54bd4'/>
+      <elf-symbol name='gpiod_set_raw_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x382815c9'/>
+      <elf-symbol name='gpiod_set_raw_value_cansleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x819e9ef9'/>
+      <elf-symbol name='gpiod_set_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe45abaeb'/>
+      <elf-symbol name='gpiod_set_value_cansleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40ffdcaa'/>
+      <elf-symbol name='gpiod_to_chip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8dc08ee0'/>
+      <elf-symbol name='gpiod_to_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6729d0c1'/>
+      <elf-symbol name='gre_add_protocol' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x384d364d'/>
+      <elf-symbol name='gre_del_protocol' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x93a4f33a'/>
+      <elf-symbol name='gro_cells_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f54ead7'/>
+      <elf-symbol name='gro_cells_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68bc6888'/>
+      <elf-symbol name='gro_cells_receive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38d207e'/>
+      <elf-symbol name='gs_alloc_req' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe9964ce'/>
+      <elf-symbol name='gs_free_req' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57133707'/>
+      <elf-symbol name='gserial_alloc_line' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33bfdca2'/>
+      <elf-symbol name='gserial_connect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe53bf42d'/>
+      <elf-symbol name='gserial_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13bcf7a9'/>
+      <elf-symbol name='gserial_free_line' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6652875'/>
+      <elf-symbol name='handle_bad_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae5b5e9c'/>
+      <elf-symbol name='handle_edge_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3bc80a0'/>
+      <elf-symbol name='handle_fasteoi_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91729067'/>
+      <elf-symbol name='handle_level_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd2a6f539'/>
+      <elf-symbol name='handle_nested_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x549525ef'/>
+      <elf-symbol name='handle_simple_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc798d682'/>
+      <elf-symbol name='handle_sysrq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7647726c'/>
+      <elf-symbol name='have_governor_per_policy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47aad3b9'/>
+      <elf-symbol name='hdmi_audio_infoframe_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb14ab1ef'/>
+      <elf-symbol name='hdmi_audio_infoframe_pack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29e1e204'/>
+      <elf-symbol name='hdmi_avi_infoframe_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x148f46e3'/>
+      <elf-symbol name='hdmi_avi_infoframe_pack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x809712ff'/>
+      <elf-symbol name='hdmi_infoframe_pack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x595d8002'/>
+      <elf-symbol name='hex2bin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2edbeaf7'/>
+      <elf-symbol name='hex_dump_to_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe916dc6'/>
+      <elf-symbol name='hex_to_bin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11f7ed4c'/>
+      <elf-symbol name='hrtimer_active' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x500514f9'/>
+      <elf-symbol name='hrtimer_cancel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5529cbf8'/>
+      <elf-symbol name='hrtimer_forward' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54d3d43c'/>
+      <elf-symbol name='hrtimer_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11d6940e'/>
+      <elf-symbol name='hrtimer_start_range_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3827429d'/>
+      <elf-symbol name='hrtimer_try_to_cancel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa55b0436'/>
+      <elf-symbol name='hvc_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x881c57df'/>
+      <elf-symbol name='hvc_instantiate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c3a1c57'/>
+      <elf-symbol name='hvc_kick' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9833bc0c'/>
+      <elf-symbol name='hvc_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b6332c7'/>
+      <elf-symbol name='hvc_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5285a280'/>
+      <elf-symbol name='hwrng_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6cfb19d0'/>
+      <elf-symbol name='hwrng_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb605aeff'/>
+      <elf-symbol name='hwspin_lock_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac05fd8e'/>
+      <elf-symbol name='hwspin_lock_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ce3fbe8'/>
+      <elf-symbol name='hwspin_lock_request_specific' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5233eaf9'/>
+      <elf-symbol name='hwspin_lock_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf19aeca0'/>
+      <elf-symbol name='i2c_add_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44abf859'/>
+      <elf-symbol name='i2c_add_numbered_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fbdeb7b'/>
+      <elf-symbol name='i2c_del_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b76e6b6'/>
+      <elf-symbol name='i2c_del_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d01225c'/>
+      <elf-symbol name='i2c_for_each_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb545dbe2'/>
+      <elf-symbol name='i2c_generic_scl_recovery' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd3ad459'/>
+      <elf-symbol name='i2c_get_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5dd469c2'/>
+      <elf-symbol name='i2c_get_dma_safe_msg_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42041512'/>
+      <elf-symbol name='i2c_new_ancillary_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb04c82f1'/>
+      <elf-symbol name='i2c_new_dummy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46c38c2e'/>
+      <elf-symbol name='i2c_new_dummy_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe11f67d0'/>
+      <elf-symbol name='i2c_new_probed_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9125f37c'/>
+      <elf-symbol name='i2c_parse_fw_timings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1c05726'/>
+      <elf-symbol name='i2c_put_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf13d6586'/>
+      <elf-symbol name='i2c_put_dma_safe_msg_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4dae16e4'/>
+      <elf-symbol name='i2c_recover_bus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73e6ff6'/>
+      <elf-symbol name='i2c_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf4c26545'/>
+      <elf-symbol name='i2c_smbus_read_byte_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa448ecfb'/>
+      <elf-symbol name='i2c_smbus_read_i2c_block_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x453b0e7f'/>
+      <elf-symbol name='i2c_smbus_read_word_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ecc9cf3'/>
+      <elf-symbol name='i2c_smbus_write_byte' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37c24662'/>
+      <elf-symbol name='i2c_smbus_write_byte_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c0f71f3'/>
+      <elf-symbol name='i2c_smbus_write_i2c_block_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd7ced3d5'/>
+      <elf-symbol name='i2c_smbus_write_word_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8067d93e'/>
+      <elf-symbol name='i2c_smbus_xfer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0ab0fcf'/>
+      <elf-symbol name='i2c_transfer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x93ee760'/>
+      <elf-symbol name='i2c_transfer_buffer_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe881522c'/>
+      <elf-symbol name='i2c_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29d056ed'/>
+      <elf-symbol name='i2c_verify_client' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3908d076'/>
+      <elf-symbol name='icc_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69622b41'/>
+      <elf-symbol name='icc_link_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9d1566d'/>
+      <elf-symbol name='icc_node_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5df784ec'/>
+      <elf-symbol name='icc_node_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2de5904c'/>
+      <elf-symbol name='icc_node_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd4b3f47'/>
+      <elf-symbol name='icc_node_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc58a3ee6'/>
+      <elf-symbol name='icc_provider_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbdff1479'/>
+      <elf-symbol name='icc_provider_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2dbcac31'/>
+      <elf-symbol name='icc_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafb943ef'/>
+      <elf-symbol name='icc_set_bw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d3e275f'/>
+      <elf-symbol name='icc_set_tag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f4aca'/>
+      <elf-symbol name='icmpv6_send' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c851a9d'/>
+      <elf-symbol name='ida_alloc_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe7a02573'/>
+      <elf-symbol name='ida_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7d5f92e'/>
+      <elf-symbol name='ida_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xffb7c514'/>
+      <elf-symbol name='idr_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8f11603'/>
+      <elf-symbol name='idr_alloc_cyclic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91f44510'/>
+      <elf-symbol name='idr_alloc_u32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12ab31f1'/>
+      <elf-symbol name='idr_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e17b3ae'/>
+      <elf-symbol name='idr_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20978fb9'/>
+      <elf-symbol name='idr_for_each' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d40b6f3'/>
+      <elf-symbol name='idr_get_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc57c48a3'/>
+      <elf-symbol name='idr_preload' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x954f099c'/>
+      <elf-symbol name='idr_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7665a95b'/>
+      <elf-symbol name='idr_replace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b82b9a1'/>
+      <elf-symbol name='ieee80211_alloc_hw_nm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f85fb05'/>
+      <elf-symbol name='ieee80211_amsdu_to_8023s' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbad43671'/>
+      <elf-symbol name='ieee80211_ap_probereq_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a5a6aea'/>
+      <elf-symbol name='ieee80211_beacon_get_template' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcde2ed24'/>
+      <elf-symbol name='ieee80211_beacon_get_tim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5fb4056a'/>
+      <elf-symbol name='ieee80211_beacon_loss' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4452cd6'/>
+      <elf-symbol name='ieee80211_bss_get_elem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1866070'/>
+      <elf-symbol name='ieee80211_channel_to_freq_khz' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafe8b001'/>
+      <elf-symbol name='ieee80211_chswitch_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47f2bee5'/>
+      <elf-symbol name='ieee80211_connection_loss' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9081925b'/>
+      <elf-symbol name='ieee80211_cqm_beacon_loss_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x90132e34'/>
+      <elf-symbol name='ieee80211_cqm_rssi_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9329494d'/>
+      <elf-symbol name='ieee80211_csa_finish' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeeb0d2d7'/>
+      <elf-symbol name='ieee80211_csa_is_complete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd738218'/>
+      <elf-symbol name='ieee80211_csa_update_counter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89480126'/>
+      <elf-symbol name='ieee80211_data_to_8023_exthdr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf103924b'/>
+      <elf-symbol name='ieee80211_find_sta' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdff525d2'/>
+      <elf-symbol name='ieee80211_find_sta_by_ifaddr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62fd9529'/>
+      <elf-symbol name='ieee80211_free_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x483cbac4'/>
+      <elf-symbol name='ieee80211_free_txskb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69312b0c'/>
+      <elf-symbol name='ieee80211_freq_khz_to_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6bedf402'/>
+      <elf-symbol name='ieee80211_get_channel_khz' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5c9870'/>
+      <elf-symbol name='ieee80211_get_hdrlen_from_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3fbf9c8'/>
+      <elf-symbol name='ieee80211_get_tx_rates' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8df8cc77'/>
+      <elf-symbol name='ieee80211_hdrlen' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ef39823'/>
+      <elf-symbol name='ieee80211_iter_chan_contexts_atomic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6e8c5ba'/>
+      <elf-symbol name='ieee80211_iterate_active_interfaces_atomic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32c93487'/>
+      <elf-symbol name='ieee80211_iterate_interfaces' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94a269b8'/>
+      <elf-symbol name='ieee80211_iterate_stations_atomic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaec3c813'/>
+      <elf-symbol name='ieee80211_manage_rx_ba_offl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b06599b'/>
+      <elf-symbol name='ieee80211_next_txq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ba87b85'/>
+      <elf-symbol name='ieee80211_nullfunc_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb493498b'/>
+      <elf-symbol name='ieee80211_probereq_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcaeabfd6'/>
+      <elf-symbol name='ieee80211_proberesp_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3216bf6'/>
+      <elf-symbol name='ieee80211_pspoll_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ee56731'/>
+      <elf-symbol name='ieee80211_queue_delayed_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17cbe8e9'/>
+      <elf-symbol name='ieee80211_queue_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xefc6777'/>
+      <elf-symbol name='ieee80211_radar_detected' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x922c7bcb'/>
+      <elf-symbol name='ieee80211_radiotap_iterator_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac97a207'/>
+      <elf-symbol name='ieee80211_radiotap_iterator_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46312808'/>
+      <elf-symbol name='ieee80211_ready_on_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd450a97e'/>
+      <elf-symbol name='ieee80211_register_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2ceddd9'/>
+      <elf-symbol name='ieee80211_remain_on_channel_expired' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x415100c'/>
+      <elf-symbol name='ieee80211_report_low_ack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd65ec357'/>
+      <elf-symbol name='ieee80211_restart_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0ebb840'/>
+      <elf-symbol name='ieee80211_rx_irqsafe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8da71de'/>
+      <elf-symbol name='ieee80211_rx_napi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e467e50'/>
+      <elf-symbol name='ieee80211_scan_completed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc530c1c'/>
+      <elf-symbol name='ieee80211_sched_scan_results' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78b6609b'/>
+      <elf-symbol name='ieee80211_sched_scan_stopped' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92c90c5f'/>
+      <elf-symbol name='ieee80211_sta_ps_transition' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13b52f69'/>
+      <elf-symbol name='ieee80211_sta_register_airtime' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x751702c9'/>
+      <elf-symbol name='ieee80211_start_tx_ba_cb_irqsafe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3ce87dd'/>
+      <elf-symbol name='ieee80211_stop_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7957139f'/>
+      <elf-symbol name='ieee80211_stop_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa59af072'/>
+      <elf-symbol name='ieee80211_stop_rx_ba_session' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ca63e85'/>
+      <elf-symbol name='ieee80211_stop_tx_ba_cb_irqsafe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa81562b1'/>
+      <elf-symbol name='ieee80211_tdls_oper_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x882da02d'/>
+      <elf-symbol name='ieee80211_tx_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2cc53b7e'/>
+      <elf-symbol name='ieee80211_tx_rate_update' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5333685b'/>
+      <elf-symbol name='ieee80211_tx_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce5a27e9'/>
+      <elf-symbol name='ieee80211_tx_status_irqsafe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63a82a0d'/>
+      <elf-symbol name='ieee80211_txq_get_depth' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64d91747'/>
+      <elf-symbol name='ieee80211_txq_may_transmit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf17e05d6'/>
+      <elf-symbol name='ieee80211_txq_schedule_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x442df499'/>
+      <elf-symbol name='ieee80211_unregister_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c83311f'/>
+      <elf-symbol name='ieee80211_wake_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25ad2ba3'/>
+      <elf-symbol name='ieee80211_wake_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d34c593'/>
+      <elf-symbol name='iget_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6dea7b4'/>
+      <elf-symbol name='ihold' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7044b6de'/>
+      <elf-symbol name='iio_alloc_pollfunc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d3fa182'/>
+      <elf-symbol name='iio_buffer_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdacb286a'/>
+      <elf-symbol name='iio_buffer_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc33fcb4c'/>
+      <elf-symbol name='iio_channel_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x287d1e45'/>
+      <elf-symbol name='iio_channel_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2675bb6c'/>
+      <elf-symbol name='iio_dealloc_pollfunc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4cbc672e'/>
+      <elf-symbol name='iio_device_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec4b1a27'/>
+      <elf-symbol name='iio_device_attach_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3973abcb'/>
+      <elf-symbol name='iio_device_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc95431b9'/>
+      <elf-symbol name='iio_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa05fb9a0'/>
+      <elf-symbol name='iio_pollfunc_store_time' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf76bbeb'/>
+      <elf-symbol name='iio_push_to_buffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79bb766'/>
+      <elf-symbol name='iio_read_channel_processed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac4475bb'/>
+      <elf-symbol name='iio_read_channel_raw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40c36fc5'/>
+      <elf-symbol name='iio_trigger_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x849cdd58'/>
+      <elf-symbol name='iio_trigger_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba69a35a'/>
+      <elf-symbol name='iio_trigger_notify_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe392d927'/>
+      <elf-symbol name='iio_trigger_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5eab414d'/>
+      <elf-symbol name='iio_trigger_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0984eed'/>
+      <elf-symbol name='iio_triggered_buffer_postenable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc1c47ad'/>
+      <elf-symbol name='iio_triggered_buffer_predisable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9276b37e'/>
+      <elf-symbol name='iio_write_channel_attribute' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x45fc0750'/>
+      <elf-symbol name='ilookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcec7dcf4'/>
+      <elf-symbol name='import_iovec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76fee372'/>
+      <elf-symbol name='in4_pton' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac5fcec0'/>
+      <elf-symbol name='in6_pton' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x609bcd98'/>
+      <elf-symbol name='in_egroup_p' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39461d6a'/>
+      <elf-symbol name='in_group_p' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b8059bd'/>
+      <elf-symbol name='inc_nlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc0d2f069'/>
+      <elf-symbol name='inc_zone_page_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x949e451e'/>
+      <elf-symbol name='inet_dev_addr_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x958e3ec'/>
+      <elf-symbol name='inet_diag_bc_sk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x45fe1580'/>
+      <elf-symbol name='inet_diag_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7dba511e'/>
+      <elf-symbol name='inet_diag_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ce09441'/>
+      <elf-symbol name='inet_proto_csum_replace4' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76b8a4a3'/>
+      <elf-symbol name='inet_select_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b006023'/>
+      <elf-symbol name='inet_sk_diag_fill' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbccb063b'/>
+      <elf-symbol name='init_dummy_netdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f70d0fb'/>
+      <elf-symbol name='init_pseudo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa16c936f'/>
+      <elf-symbol name='init_srcu_struct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87da0360'/>
+      <elf-symbol name='init_timer_key' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79cf5987'/>
+      <elf-symbol name='init_wait_entry' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe487975'/>
+      <elf-symbol name='input_alloc_absinfo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1976309'/>
+      <elf-symbol name='input_allocate_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b9d284e'/>
+      <elf-symbol name='input_close_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x882c4769'/>
+      <elf-symbol name='input_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf71274ae'/>
+      <elf-symbol name='input_ff_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64e7e7f4'/>
+      <elf-symbol name='input_ff_create_memless' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6909dab'/>
+      <elf-symbol name='input_ff_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65cb38b1'/>
+      <elf-symbol name='input_free_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f6b03fa'/>
+      <elf-symbol name='input_mt_destroy_slots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37c499e2'/>
+      <elf-symbol name='input_mt_get_slot_by_key' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7836be16'/>
+      <elf-symbol name='input_mt_init_slots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc99c8aea'/>
+      <elf-symbol name='input_mt_report_pointer_emulation' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeac194ad'/>
+      <elf-symbol name='input_mt_report_slot_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5795e50'/>
+      <elf-symbol name='input_mt_sync_frame' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf876b059'/>
+      <elf-symbol name='input_open_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4aae5d9d'/>
+      <elf-symbol name='input_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b06a5e7'/>
+      <elf-symbol name='input_register_handle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c2eb817'/>
+      <elf-symbol name='input_register_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76e24704'/>
+      <elf-symbol name='input_scancode_to_scalar' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c256e1f'/>
+      <elf-symbol name='input_set_abs_params' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9fac514'/>
+      <elf-symbol name='input_set_capability' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4cdd1fd6'/>
+      <elf-symbol name='input_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8297142'/>
+      <elf-symbol name='input_unregister_handle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd181afd'/>
+      <elf-symbol name='input_unregister_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeaab0f90'/>
+      <elf-symbol name='int_pow' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1af267f8'/>
+      <elf-symbol name='int_to_scsilun' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ed90adc'/>
+      <elf-symbol name='invalidate_bdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19cfd886'/>
+      <elf-symbol name='invalidate_inode_buffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5949854c'/>
+      <elf-symbol name='invalidate_mapping_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf06e981c'/>
+      <elf-symbol name='io_schedule' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x93a6e0b2'/>
+      <elf-symbol name='iommu_alloc_resv_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf40724'/>
+      <elf-symbol name='iommu_attach_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a9b80a6'/>
+      <elf-symbol name='iommu_attach_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab279631'/>
+      <elf-symbol name='iommu_detach_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x969ec38d'/>
+      <elf-symbol name='iommu_device_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c4ce02f'/>
+      <elf-symbol name='iommu_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x77dcacd7'/>
+      <elf-symbol name='iommu_device_sysfs_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe68b3c4'/>
+      <elf-symbol name='iommu_device_sysfs_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x488c1fb4'/>
+      <elf-symbol name='iommu_device_unlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf273f25'/>
+      <elf-symbol name='iommu_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22acf0df'/>
+      <elf-symbol name='iommu_dma_get_resv_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb28470f0'/>
+      <elf-symbol name='iommu_dma_reserve_iova' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6149db03'/>
+      <elf-symbol name='iommu_domain_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92cb34e0'/>
+      <elf-symbol name='iommu_domain_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8f34054'/>
+      <elf-symbol name='iommu_domain_get_attr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b5440d4'/>
+      <elf-symbol name='iommu_domain_set_attr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7353a11e'/>
+      <elf-symbol name='iommu_fwspec_add_ids' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49dcae09'/>
+      <elf-symbol name='iommu_fwspec_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75faf1a6'/>
+      <elf-symbol name='iommu_get_dma_cookie' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87be8140'/>
+      <elf-symbol name='iommu_get_domain_for_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d59dbf0'/>
+      <elf-symbol name='iommu_group_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d22bb58'/>
+      <elf-symbol name='iommu_group_for_each_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x36fa18fb'/>
+      <elf-symbol name='iommu_group_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8dadbc9'/>
+      <elf-symbol name='iommu_group_get_for_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4171d0ab'/>
+      <elf-symbol name='iommu_group_get_iommudata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd55ad93b'/>
+      <elf-symbol name='iommu_group_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89485687'/>
+      <elf-symbol name='iommu_group_ref_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d6d0bbc'/>
+      <elf-symbol name='iommu_group_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x36075bb5'/>
+      <elf-symbol name='iommu_group_remove_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf54584ec'/>
+      <elf-symbol name='iommu_group_set_iommudata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc66b77b1'/>
+      <elf-symbol name='iommu_group_set_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbcdd5b99'/>
+      <elf-symbol name='iommu_iova_to_phys' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d6e0522'/>
+      <elf-symbol name='iommu_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe04615f9'/>
+      <elf-symbol name='iommu_map_sg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1b29c1'/>
+      <elf-symbol name='iommu_present' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48fbae93'/>
+      <elf-symbol name='iommu_put_dma_cookie' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ac1dcbb'/>
+      <elf-symbol name='iommu_register_device_fault_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a47fb56'/>
+      <elf-symbol name='iommu_report_device_fault' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69405952'/>
+      <elf-symbol name='iommu_set_fault_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a73b639'/>
+      <elf-symbol name='iommu_unmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea723a39'/>
+      <elf-symbol name='iommu_unregister_device_fault_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaefe6ff3'/>
+      <elf-symbol name='ion_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfbae1ba9'/>
+      <elf-symbol name='ion_buffer_prep_noncached' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66a73dc'/>
+      <elf-symbol name='ion_buffer_zero' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41d84517'/>
+      <elf-symbol name='ion_device_remove_heap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3461f6'/>
+      <elf-symbol name='ion_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e63109b'/>
+      <elf-symbol name='ion_heap_map_kernel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91e87686'/>
+      <elf-symbol name='ion_heap_map_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x733a8eb'/>
+      <elf-symbol name='ion_heap_unmap_kernel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd86e9dc'/>
+      <elf-symbol name='ion_query_heaps_kernel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4abc39a'/>
+      <elf-symbol name='iounmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xedc03953'/>
+      <elf-symbol name='iov_iter_bvec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66244a8'/>
+      <elf-symbol name='iov_iter_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ce74bbf'/>
+      <elf-symbol name='ip6_local_out' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ebc8bb6'/>
+      <elf-symbol name='ip6_redirect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad36ac00'/>
+      <elf-symbol name='ip6_route_output_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x373a86f9'/>
+      <elf-symbol name='ip6_update_pmtu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8001f0e'/>
+      <elf-symbol name='ip6t_alloc_initial_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98e2c286'/>
+      <elf-symbol name='ip6t_do_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe98231f'/>
+      <elf-symbol name='ip6t_register_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeeeb609a'/>
+      <elf-symbol name='ip6t_unregister_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ed1c3c1'/>
+      <elf-symbol name='ip_compute_csum' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20eadeb6'/>
+      <elf-symbol name='ip_local_out' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a875464'/>
+      <elf-symbol name='ip_route_output_flow' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a9ac9f7'/>
+      <elf-symbol name='ip_send_check' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2124474'/>
+      <elf-symbol name='ipcomp_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76231d49'/>
+      <elf-symbol name='ipcomp_init_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5bef2fb7'/>
+      <elf-symbol name='ipcomp_input' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff33fe32'/>
+      <elf-symbol name='ipcomp_output' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfec5741f'/>
+      <elf-symbol name='iput' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53afcab0'/>
+      <elf-symbol name='ipv4_redirect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d7645cb'/>
+      <elf-symbol name='ipv4_update_pmtu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcba07df'/>
+      <elf-symbol name='ipv6_chk_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98aceef0'/>
+      <elf-symbol name='ipv6_dev_get_saddr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x691093ec'/>
+      <elf-symbol name='ipv6_ext_hdr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x452ba683'/>
+      <elf-symbol name='ipv6_find_hdr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4b294ab'/>
+      <elf-symbol name='ipv6_skip_exthdr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x453d0c0c'/>
+      <elf-symbol name='ir_lirc_scancode_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x21f87d90'/>
+      <elf-symbol name='ir_raw_gen_manchester' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7cf52901'/>
+      <elf-symbol name='ir_raw_gen_pd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e12e343'/>
+      <elf-symbol name='ir_raw_gen_pl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ad91f6e'/>
+      <elf-symbol name='ir_raw_handler_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39ea3873'/>
+      <elf-symbol name='ir_raw_handler_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f1ba7e9'/>
+      <elf-symbol name='irq_chip_ack_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x238fefc'/>
+      <elf-symbol name='irq_chip_disable_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43cda6a5'/>
+      <elf-symbol name='irq_chip_enable_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49681a11'/>
+      <elf-symbol name='irq_chip_eoi_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x880bfc49'/>
+      <elf-symbol name='irq_chip_get_parent_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4034bb49'/>
+      <elf-symbol name='irq_chip_mask_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8734d7ac'/>
+      <elf-symbol name='irq_chip_retrigger_hierarchy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6b7b9c2'/>
+      <elf-symbol name='irq_chip_set_affinity_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f8f146f'/>
+      <elf-symbol name='irq_chip_set_parent_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb328d7a8'/>
+      <elf-symbol name='irq_chip_set_type_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x823ac17f'/>
+      <elf-symbol name='irq_chip_set_vcpu_affinity_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39398ce7'/>
+      <elf-symbol name='irq_chip_set_wake_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9928c64'/>
+      <elf-symbol name='irq_chip_unmask_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f430a1d'/>
+      <elf-symbol name='irq_create_fwspec_mapping' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78e989d6'/>
+      <elf-symbol name='irq_create_of_mapping' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x59b84872'/>
+      <elf-symbol name='irq_dispose_mapping' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c7db649'/>
+      <elf-symbol name='irq_domain_alloc_irqs_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7dde551'/>
+      <elf-symbol name='irq_domain_create_hierarchy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8331af59'/>
+      <elf-symbol name='irq_domain_free_irqs_common' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26aabce'/>
+      <elf-symbol name='irq_domain_free_irqs_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf9c9140'/>
+      <elf-symbol name='irq_domain_get_irq_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56e95d57'/>
+      <elf-symbol name='irq_domain_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc23b08e7'/>
+      <elf-symbol name='irq_domain_set_hwirq_and_chip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdae4b8bb'/>
+      <elf-symbol name='irq_domain_set_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9cf66db5'/>
+      <elf-symbol name='irq_domain_update_bus_token' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86477f64'/>
+      <elf-symbol name='irq_domain_xlate_onecell' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaac40435'/>
+      <elf-symbol name='irq_domain_xlate_onetwocell' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa66da2a'/>
+      <elf-symbol name='irq_domain_xlate_twocell' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac805d83'/>
+      <elf-symbol name='irq_find_mapping' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c4d455c'/>
+      <elf-symbol name='irq_find_matching_fwspec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b2b1ecf'/>
+      <elf-symbol name='irq_get_irq_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ccfe976'/>
+      <elf-symbol name='irq_modify_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7522f3ba'/>
+      <elf-symbol name='irq_of_parse_and_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81977f03'/>
+      <elf-symbol name='irq_set_affinity_hint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a7b4b03'/>
+      <elf-symbol name='irq_set_affinity_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7082834f'/>
+      <elf-symbol name='irq_set_chained_handler_and_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x97250b6d'/>
+      <elf-symbol name='irq_set_chip_and_handler_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbbd5ebd8'/>
+      <elf-symbol name='irq_set_chip_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20a789ac'/>
+      <elf-symbol name='irq_set_handler_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3dcb88a0'/>
+      <elf-symbol name='irq_set_irq_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc477a2'/>
+      <elf-symbol name='irq_set_irq_wake' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce2840e7'/>
+      <elf-symbol name='irq_set_irqchip_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb88dbfce'/>
+      <elf-symbol name='irq_set_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc6596fa'/>
+      <elf-symbol name='irq_to_desc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e65d5e2'/>
+      <elf-symbol name='irq_work_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcfb5871c'/>
+      <elf-symbol name='irq_work_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6923ce63'/>
+      <elf-symbol name='is_bad_inode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe1f4d4b'/>
+      <elf-symbol name='is_console_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x944a564d'/>
+      <elf-symbol name='iterate_fd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7dbfdead'/>
+      <elf-symbol name='iunique' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcdcf9d08'/>
+      <elf-symbol name='jiffies_64_to_clock_t' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1ddf995'/>
+      <elf-symbol name='jiffies_to_msecs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37befc70'/>
+      <elf-symbol name='jiffies_to_usecs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f24de73'/>
+      <elf-symbol name='kasprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb384d37'/>
+      <elf-symbol name='kern_mount' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b73b0bd'/>
+      <elf-symbol name='kern_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb31e0f3d'/>
+      <elf-symbol name='kern_unmount' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd7c8eab'/>
+      <elf-symbol name='kernel_connect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ca00014'/>
+      <elf-symbol name='kernel_getsockname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdfc3c7fa'/>
+      <elf-symbol name='kernel_neon_begin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fd180e7'/>
+      <elf-symbol name='kernel_neon_end' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8a8110c'/>
+      <elf-symbol name='kernel_param_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x931fb3a2'/>
+      <elf-symbol name='kernel_param_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe71f83bb'/>
+      <elf-symbol name='kernel_power_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf184d189'/>
+      <elf-symbol name='kernel_recvmsg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4805ed54'/>
+      <elf-symbol name='kernel_sendmsg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c54b3e3'/>
+      <elf-symbol name='kernel_sigaction' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6df1aaf1'/>
+      <elf-symbol name='kernfs_find_and_get_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebe7bf27'/>
+      <elf-symbol name='kernfs_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25969717'/>
+      <elf-symbol name='kernfs_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5830af81'/>
+      <elf-symbol name='key_invalidate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd29a0e6'/>
+      <elf-symbol name='key_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ff89ce7'/>
+      <elf-symbol name='key_revoke' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ab1ec81'/>
+      <elf-symbol name='key_validate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x59d54896'/>
+      <elf-symbol name='keyring_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbcb7cb76'/>
+      <elf-symbol name='kfree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37a0cba'/>
+      <elf-symbol name='kfree_call_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19f462ab'/>
+      <elf-symbol name='kfree_const' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf474fdcb'/>
+      <elf-symbol name='kfree_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c64ddd1'/>
+      <elf-symbol name='kfree_skb_list' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x990ef967'/>
+      <elf-symbol name='kill_anon_super' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe53c656d'/>
+      <elf-symbol name='kill_fasync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7750545a'/>
+      <elf-symbol name='kill_litter_super' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4d55061'/>
+      <elf-symbol name='kill_pid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeba45260'/>
+      <elf-symbol name='kiocb_set_cancel_fn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1355dde'/>
+      <elf-symbol name='kmalloc_order' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbbe80fdb'/>
+      <elf-symbol name='kmalloc_order_trace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8b9f817'/>
+      <elf-symbol name='kmem_cache_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x754d9d83'/>
+      <elf-symbol name='kmem_cache_alloc_bulk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58e7d2d1'/>
+      <elf-symbol name='kmem_cache_alloc_trace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa58307da'/>
+      <elf-symbol name='kmem_cache_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6593b086'/>
+      <elf-symbol name='kmem_cache_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xabc5d7bd'/>
+      <elf-symbol name='kmem_cache_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ae7e05c'/>
+      <elf-symbol name='kmem_cache_free_bulk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x828b6b3b'/>
+      <elf-symbol name='kmemdup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66b4cc41'/>
+      <elf-symbol name='kmemdup_nul' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3f548ad'/>
+      <elf-symbol name='kobject_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcfb64cf'/>
+      <elf-symbol name='kobject_create_and_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b64def8'/>
+      <elf-symbol name='kobject_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5703e7c'/>
+      <elf-symbol name='kobject_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6422a90'/>
+      <elf-symbol name='kobject_get_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b4b4b8a'/>
+      <elf-symbol name='kobject_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea021de6'/>
+      <elf-symbol name='kobject_init_and_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54c6504d'/>
+      <elf-symbol name='kobject_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x867e1c04'/>
+      <elf-symbol name='kobject_uevent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4198ece2'/>
+      <elf-symbol name='kobject_uevent_env' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a9dca58'/>
+      <elf-symbol name='krealloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1e12d81'/>
+      <elf-symbol name='kset_create_and_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd375c9e8'/>
+      <elf-symbol name='kset_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc38c89c'/>
+      <elf-symbol name='ksize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ea5d10'/>
+      <elf-symbol name='kstrdup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d39b0a7'/>
+      <elf-symbol name='kstrdup_const' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x365e7911'/>
+      <elf-symbol name='kstrdup_quotable_cmdline' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50ee6108'/>
+      <elf-symbol name='kstrndup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9eacf8a5'/>
+      <elf-symbol name='kstrtobool' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0875eb1'/>
+      <elf-symbol name='kstrtobool_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda9fc7ae'/>
+      <elf-symbol name='kstrtoint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2276db98'/>
+      <elf-symbol name='kstrtoint_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23c9891c'/>
+      <elf-symbol name='kstrtoll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x779a18af'/>
+      <elf-symbol name='kstrtos8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbcbdf60f'/>
+      <elf-symbol name='kstrtos8_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb417f082'/>
+      <elf-symbol name='kstrtou16' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b0192da'/>
+      <elf-symbol name='kstrtou16_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe13d5d07'/>
+      <elf-symbol name='kstrtou8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46045dd7'/>
+      <elf-symbol name='kstrtou8_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1179daa'/>
+      <elf-symbol name='kstrtouint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69ad2f20'/>
+      <elf-symbol name='kstrtouint_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfcb926cd'/>
+      <elf-symbol name='kstrtoul_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a6af65c'/>
+      <elf-symbol name='kstrtoull' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c80c06c'/>
+      <elf-symbol name='kstrtoull_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54245b39'/>
+      <elf-symbol name='kthread_bind' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12f7f60e'/>
+      <elf-symbol name='kthread_cancel_delayed_work_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a917756'/>
+      <elf-symbol name='kthread_cancel_work_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74722b60'/>
+      <elf-symbol name='kthread_create_on_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78189446'/>
+      <elf-symbol name='kthread_create_worker' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60a7f8a'/>
+      <elf-symbol name='kthread_delayed_work_timer_fn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1b48cc6'/>
+      <elf-symbol name='kthread_destroy_worker' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x31b22a4f'/>
+      <elf-symbol name='kthread_flush_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x753bd6cc'/>
+      <elf-symbol name='kthread_flush_worker' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb4b92bd'/>
+      <elf-symbol name='kthread_freezable_should_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca7d8764'/>
+      <elf-symbol name='kthread_mod_delayed_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4df7b3a3'/>
+      <elf-symbol name='kthread_park' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8739f414'/>
+      <elf-symbol name='kthread_parkme' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf95322f4'/>
+      <elf-symbol name='kthread_queue_delayed_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1edcabf0'/>
+      <elf-symbol name='kthread_queue_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15cf15f2'/>
+      <elf-symbol name='kthread_should_park' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79defbe1'/>
+      <elf-symbol name='kthread_should_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3f7646e'/>
+      <elf-symbol name='kthread_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb98bc82'/>
+      <elf-symbol name='kthread_unpark' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe34b50eb'/>
+      <elf-symbol name='kthread_worker_fn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x955b0e2e'/>
+      <elf-symbol name='ktime_add_safe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3952887'/>
+      <elf-symbol name='ktime_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb43f9365'/>
+      <elf-symbol name='ktime_get_boot_fast_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ef6b54f'/>
+      <elf-symbol name='ktime_get_mono_fast_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ebe366f'/>
+      <elf-symbol name='ktime_get_raw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9714e0bb'/>
+      <elf-symbol name='ktime_get_raw_ts64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1edb69d6'/>
+      <elf-symbol name='ktime_get_real_seconds' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x953e1b9e'/>
+      <elf-symbol name='ktime_get_real_ts64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ec6ca96'/>
+      <elf-symbol name='ktime_get_ts64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e515be6'/>
+      <elf-symbol name='ktime_get_with_offset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4f0da12'/>
+      <elf-symbol name='kvasprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x587b0954'/>
+      <elf-symbol name='kvfree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7aa1756e'/>
+      <elf-symbol name='kvmalloc_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x599fb41c'/>
+      <elf-symbol name='kzfree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a4497db'/>
+      <elf-symbol name='l2tp_session_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7deb8778'/>
+      <elf-symbol name='l2tp_session_delete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d18737b'/>
+      <elf-symbol name='l2tp_session_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa11ef6e'/>
+      <elf-symbol name='l2tp_session_get_nth' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc593e4'/>
+      <elf-symbol name='l2tp_session_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x967061b8'/>
+      <elf-symbol name='l2tp_session_set_header_len' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ada4722'/>
+      <elf-symbol name='l2tp_tunnel_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x542b1c70'/>
+      <elf-symbol name='l2tp_tunnel_delete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda12458f'/>
+      <elf-symbol name='l2tp_tunnel_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33a1dc53'/>
+      <elf-symbol name='l2tp_tunnel_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b6bae23'/>
+      <elf-symbol name='l2tp_tunnel_get_nth' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0318849'/>
+      <elf-symbol name='l2tp_tunnel_get_session' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a8bb030'/>
+      <elf-symbol name='l2tp_tunnel_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcaea34ad'/>
+      <elf-symbol name='l2tp_udp_encap_recv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86a5229c'/>
+      <elf-symbol name='l2tp_xmit_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a009ef3'/>
+      <elf-symbol name='led_classdev_flash_register_ext' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbdb01438'/>
+      <elf-symbol name='led_classdev_flash_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7dfb17e7'/>
+      <elf-symbol name='led_classdev_register_ext' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x323da4d7'/>
+      <elf-symbol name='led_classdev_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x655d31ec'/>
+      <elf-symbol name='led_get_default_pattern' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa001f6f4'/>
+      <elf-symbol name='led_set_brightness' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81340bd3'/>
+      <elf-symbol name='led_trigger_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaad87741'/>
+      <elf-symbol name='led_trigger_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f65da29'/>
+      <elf-symbol name='led_trigger_register_simple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1fbb8b30'/>
+      <elf-symbol name='led_trigger_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92cfad83'/>
+      <elf-symbol name='led_trigger_unregister_simple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b60dbd5'/>
+      <elf-symbol name='list_sort' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcba4abe3'/>
+      <elf-symbol name='ll_rw_block' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f3d698e'/>
+      <elf-symbol name='llist_add_batch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7a1840e'/>
+      <elf-symbol name='load_nls' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3591534e'/>
+      <elf-symbol name='load_nls_default' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd62111e7'/>
+      <elf-symbol name='lock_sock_nested' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe7a5025a'/>
+      <elf-symbol name='lockref_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9b85ef6'/>
+      <elf-symbol name='logfc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x860dc5a0'/>
+      <elf-symbol name='lookup_one_len' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3fd52193'/>
+      <elf-symbol name='lzo1x_1_compress' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x787c882b'/>
+      <elf-symbol name='lzo1x_decompress_safe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4df8fbc'/>
+      <elf-symbol name='lzorle1x_1_compress' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79f697e4'/>
+      <elf-symbol name='mac_pton' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x652032cb'/>
+      <elf-symbol name='make_bad_inode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce495f15'/>
+      <elf-symbol name='mark_buffer_dirty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12a5be2b'/>
+      <elf-symbol name='mark_page_accessed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ff49cc3'/>
+      <elf-symbol name='match_int' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e3567f7'/>
+      <elf-symbol name='match_octal' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x815b5dd4'/>
+      <elf-symbol name='match_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81188c30'/>
+      <elf-symbol name='mbox_chan_received_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78fa7776'/>
+      <elf-symbol name='mbox_chan_txdone' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0833c67'/>
+      <elf-symbol name='mbox_client_txdone' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf779686'/>
+      <elf-symbol name='mbox_controller_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e2d6685'/>
+      <elf-symbol name='mbox_controller_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x988b4b03'/>
+      <elf-symbol name='mbox_free_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xccb0d514'/>
+      <elf-symbol name='mbox_request_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8cf177d2'/>
+      <elf-symbol name='mbox_request_channel_byname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd00db106'/>
+      <elf-symbol name='mbox_send_message' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x36b2a58c'/>
+      <elf-symbol name='mdiobus_alloc_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x21336b98'/>
+      <elf-symbol name='mdiobus_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54de5ec5'/>
+      <elf-symbol name='mdiobus_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0f0a433'/>
+      <elf-symbol name='media_create_intf_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1c6690f'/>
+      <elf-symbol name='media_create_pad_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d5927d'/>
+      <elf-symbol name='media_device_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8844c5c4'/>
+      <elf-symbol name='media_device_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfe3758f'/>
+      <elf-symbol name='media_device_register_entity' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca5dfef'/>
+      <elf-symbol name='media_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19934bc7'/>
+      <elf-symbol name='media_device_unregister_entity' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb793a527'/>
+      <elf-symbol name='media_devnode_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9c90d1a'/>
+      <elf-symbol name='media_devnode_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63d3efda'/>
+      <elf-symbol name='media_entity_find_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc40bf1fa'/>
+      <elf-symbol name='media_entity_pads_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d2caa96'/>
+      <elf-symbol name='media_entity_remote_pad' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61d86787'/>
+      <elf-symbol name='media_entity_remove_links' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27d485a0'/>
+      <elf-symbol name='media_entity_setup_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ca83723'/>
+      <elf-symbol name='media_graph_walk_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb199bc85'/>
+      <elf-symbol name='media_graph_walk_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a432b1c'/>
+      <elf-symbol name='media_graph_walk_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd14a6d28'/>
+      <elf-symbol name='media_remove_intf_links' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e763e64'/>
+      <elf-symbol name='memchr' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0xa07a37f0'/>
+      <elf-symbol name='memchr_inv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8df92f66'/>
+      <elf-symbol name='memcmp' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0x449ad0a7'/>
+      <elf-symbol name='memcpy' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0x4829a47e'/>
+      <elf-symbol name='memdup_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9291cd3b'/>
+      <elf-symbol name='memmove' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0x5a9f1d63'/>
+      <elf-symbol name='memparse' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27864d57'/>
+      <elf-symbol name='mempool_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3762aec'/>
+      <elf-symbol name='mempool_alloc_slab' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc972449f'/>
+      <elf-symbol name='mempool_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1953c958'/>
+      <elf-symbol name='mempool_create_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c122bcf'/>
+      <elf-symbol name='mempool_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9034a696'/>
+      <elf-symbol name='mempool_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa897e3e7'/>
+      <elf-symbol name='mempool_free_slab' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a99a016'/>
+      <elf-symbol name='mempool_kfree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a037cf1'/>
+      <elf-symbol name='mempool_kmalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd35a6d31'/>
+      <elf-symbol name='memremap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d924f20'/>
+      <elf-symbol name='memset' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0xdcb764ad'/>
+      <elf-symbol name='memset32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x489eda10'/>
+      <elf-symbol name='memset64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed8a2d95'/>
+      <elf-symbol name='memunmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e9fdd9d'/>
+      <elf-symbol name='memweight' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3fe2ccbe'/>
+      <elf-symbol name='mfd_add_devices' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xddcf2c00'/>
+      <elf-symbol name='mfd_remove_devices' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b95fd59'/>
+      <elf-symbol name='mii_check_media' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb001341e'/>
+      <elf-symbol name='mii_ethtool_get_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac93eabe'/>
+      <elf-symbol name='mii_ethtool_gset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfea71b7b'/>
+      <elf-symbol name='mii_ethtool_set_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75bd6eb8'/>
+      <elf-symbol name='mii_link_ok' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa284e26d'/>
+      <elf-symbol name='mii_nway_restart' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b099913'/>
+      <elf-symbol name='mipi_dsi_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32186a61'/>
+      <elf-symbol name='mipi_dsi_create_packet' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81ce66fa'/>
+      <elf-symbol name='mipi_dsi_dcs_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f0ea17a'/>
+      <elf-symbol name='mipi_dsi_dcs_set_display_brightness' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a187cfb'/>
+      <elf-symbol name='mipi_dsi_dcs_set_tear_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc07ec32'/>
+      <elf-symbol name='mipi_dsi_dcs_write_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d0df86b'/>
+      <elf-symbol name='mipi_dsi_detach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e4bd418'/>
+      <elf-symbol name='mipi_dsi_device_register_full' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1578220'/>
+      <elf-symbol name='mipi_dsi_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2beb9e60'/>
+      <elf-symbol name='mipi_dsi_driver_register_full' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65820187'/>
+      <elf-symbol name='mipi_dsi_driver_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6963d7a5'/>
+      <elf-symbol name='mipi_dsi_generic_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x31ca757d'/>
+      <elf-symbol name='mipi_dsi_generic_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x673ae361'/>
+      <elf-symbol name='mipi_dsi_host_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x90ae9e32'/>
+      <elf-symbol name='mipi_dsi_host_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6cafa43e'/>
+      <elf-symbol name='mipi_dsi_packet_format_is_long' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xadbeed61'/>
+      <elf-symbol name='mipi_dsi_set_maximum_return_packet_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1f91a44'/>
+      <elf-symbol name='misc_deregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49da0f5a'/>
+      <elf-symbol name='misc_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x977ba4ec'/>
+      <elf-symbol name='mktime64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb2f8a4'/>
+      <elf-symbol name='mm_trace_rss_stat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b479937'/>
+      <elf-symbol name='mmc_add_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69e8bf7c'/>
+      <elf-symbol name='mmc_alloc_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe1c0ede'/>
+      <elf-symbol name='mmc_app_cmd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87cb3d03'/>
+      <elf-symbol name='mmc_calc_max_discard' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9b2cf1d'/>
+      <elf-symbol name='mmc_can_erase' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x400ad333'/>
+      <elf-symbol name='mmc_can_gpio_cd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca9efccb'/>
+      <elf-symbol name='mmc_can_sanitize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e13218e'/>
+      <elf-symbol name='mmc_can_secure_erase_trim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47f36e81'/>
+      <elf-symbol name='mmc_can_trim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf85d5cc8'/>
+      <elf-symbol name='mmc_cmdq_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41f936ca'/>
+      <elf-symbol name='mmc_cmdq_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88f9d403'/>
+      <elf-symbol name='mmc_cqe_post_req' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x384b5b1e'/>
+      <elf-symbol name='mmc_cqe_recovery' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc132c9f'/>
+      <elf-symbol name='mmc_cqe_request_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76b62200'/>
+      <elf-symbol name='mmc_cqe_start_req' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72767f74'/>
+      <elf-symbol name='mmc_detect_card_removed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf702177e'/>
+      <elf-symbol name='mmc_detect_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2dd424f'/>
+      <elf-symbol name='mmc_erase' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7b6b4ec'/>
+      <elf-symbol name='mmc_erase_group_aligned' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48907341'/>
+      <elf-symbol name='mmc_flush_cache' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x80c59f4'/>
+      <elf-symbol name='mmc_free_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5084297d'/>
+      <elf-symbol name='mmc_get_card' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa048a5d8'/>
+      <elf-symbol name='mmc_get_ext_csd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0177f6b'/>
+      <elf-symbol name='mmc_gpio_get_cd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4bd6f7e6'/>
+      <elf-symbol name='mmc_gpio_get_ro' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99fc054b'/>
+      <elf-symbol name='mmc_gpiod_request_cd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d1ca63'/>
+      <elf-symbol name='mmc_gpiod_request_cd_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f732157'/>
+      <elf-symbol name='mmc_gpiod_request_ro' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ebcb7b1'/>
+      <elf-symbol name='mmc_hw_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63b9e0ed'/>
+      <elf-symbol name='mmc_of_parse' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0a09c34'/>
+      <elf-symbol name='mmc_of_parse_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55ff25ca'/>
+      <elf-symbol name='mmc_put_card' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd92cae21'/>
+      <elf-symbol name='mmc_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x31bbf1cc'/>
+      <elf-symbol name='mmc_regulator_get_supply' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x346742b6'/>
+      <elf-symbol name='mmc_regulator_set_ocr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa9d943a1'/>
+      <elf-symbol name='mmc_regulator_set_vqmmc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x894881f5'/>
+      <elf-symbol name='mmc_release_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9166644d'/>
+      <elf-symbol name='mmc_remove_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4fc66454'/>
+      <elf-symbol name='mmc_request_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x298652a3'/>
+      <elf-symbol name='mmc_retune_pause' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x21ad65ff'/>
+      <elf-symbol name='mmc_retune_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb69eb694'/>
+      <elf-symbol name='mmc_retune_unpause' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23abcb59'/>
+      <elf-symbol name='mmc_run_bkops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc04f4409'/>
+      <elf-symbol name='mmc_send_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf3192087'/>
+      <elf-symbol name='mmc_send_tuning' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f30a13f'/>
+      <elf-symbol name='mmc_set_data_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8389f897'/>
+      <elf-symbol name='mmc_start_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafc3fcb9'/>
+      <elf-symbol name='mmc_switch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8633490'/>
+      <elf-symbol name='mmc_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fbe3477'/>
+      <elf-symbol name='mmc_wait_for_cmd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1708dc4'/>
+      <elf-symbol name='mmc_wait_for_req' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32775e9b'/>
+      <elf-symbol name='mmput' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7bca9a07'/>
+      <elf-symbol name='mod_delayed_work_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4f47221'/>
+      <elf-symbol name='mod_node_page_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1908a89d'/>
+      <elf-symbol name='mod_timer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72cd0f7f'/>
+      <elf-symbol name='module_layout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe64d03ba'/>
+      <elf-symbol name='module_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdaa237a4'/>
+      <elf-symbol name='mpage_readpage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b0bd892'/>
+      <elf-symbol name='mpage_readpages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd73fb9e3'/>
+      <elf-symbol name='mpage_writepages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7d007a0'/>
+      <elf-symbol name='msleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9a482f9'/>
+      <elf-symbol name='msleep_interruptible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc5005fe'/>
+      <elf-symbol name='msm_pinctrl_probe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6052401a'/>
+      <elf-symbol name='msm_pinctrl_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f5292f5'/>
+      <elf-symbol name='mutex_is_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x318d6fec'/>
+      <elf-symbol name='mutex_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ab7989d'/>
+      <elf-symbol name='mutex_lock_interruptible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2db3d320'/>
+      <elf-symbol name='mutex_trylock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf21017d9'/>
+      <elf-symbol name='mutex_trylock_recursive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae7e3a35'/>
+      <elf-symbol name='mutex_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x409bcb62'/>
+      <elf-symbol name='n_tty_ioctl_helper' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82ba7a61'/>
+      <elf-symbol name='napi_complete_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b9b5d58'/>
+      <elf-symbol name='napi_consume_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b509d35'/>
+      <elf-symbol name='napi_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa0fbeba'/>
+      <elf-symbol name='napi_gro_flush' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa42bb8bc'/>
+      <elf-symbol name='napi_gro_receive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ab8f0ce'/>
+      <elf-symbol name='napi_hash_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d6a5e54'/>
+      <elf-symbol name='napi_schedule_prep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xddc74294'/>
+      <elf-symbol name='neigh_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94dded23'/>
+      <elf-symbol name='net_ratelimit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6ebc03b'/>
+      <elf-symbol name='netdev_alloc_frag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1fe912f1'/>
+      <elf-symbol name='netdev_change_features' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4df02eb'/>
+      <elf-symbol name='netdev_err' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfdffd125'/>
+      <elf-symbol name='netdev_increment_features' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69668826'/>
+      <elf-symbol name='netdev_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6483ede5'/>
+      <elf-symbol name='netdev_lower_state_changed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x533e2bf9'/>
+      <elf-symbol name='netdev_master_upper_dev_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x304d38f6'/>
+      <elf-symbol name='netdev_notify_peers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9e5b072'/>
+      <elf-symbol name='netdev_pick_tx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa7d0317'/>
+      <elf-symbol name='netdev_printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc964f614'/>
+      <elf-symbol name='netdev_rx_handler_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee04ac48'/>
+      <elf-symbol name='netdev_rx_handler_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4ff728d'/>
+      <elf-symbol name='netdev_upper_dev_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6728d83'/>
+      <elf-symbol name='netdev_upper_dev_unlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbaebfc90'/>
+      <elf-symbol name='netdev_warn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf665846f'/>
+      <elf-symbol name='netif_carrier_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa553919b'/>
+      <elf-symbol name='netif_carrier_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0684794'/>
+      <elf-symbol name='netif_device_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a0c905d'/>
+      <elf-symbol name='netif_device_detach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87d0c608'/>
+      <elf-symbol name='netif_napi_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ecabefc'/>
+      <elf-symbol name='netif_napi_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60438910'/>
+      <elf-symbol name='netif_receive_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8aba488c'/>
+      <elf-symbol name='netif_rx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x120e7767'/>
+      <elf-symbol name='netif_rx_ni' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc2c78f7f'/>
+      <elf-symbol name='netif_schedule_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed59b3f'/>
+      <elf-symbol name='netif_set_real_num_rx_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ebf1460'/>
+      <elf-symbol name='netif_set_real_num_tx_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb912acce'/>
+      <elf-symbol name='netif_stacked_transfer_operstate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7bea515b'/>
+      <elf-symbol name='netif_tx_stop_all_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x83a781a1'/>
+      <elf-symbol name='netif_tx_wake_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8822e594'/>
+      <elf-symbol name='netlink_broadcast' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc752f3f'/>
+      <elf-symbol name='netlink_capable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47cc0ef3'/>
+      <elf-symbol name='netlink_has_listeners' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d27788c'/>
+      <elf-symbol name='netlink_kernel_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1d42eff'/>
+      <elf-symbol name='netlink_net_capable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x873bf5e'/>
+      <elf-symbol name='netlink_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa599bb2'/>
+      <elf-symbol name='netlink_unicast' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1c32ad7c'/>
+      <elf-symbol name='netlink_unregister_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf54a8f7'/>
+      <elf-symbol name='nf_conntrack_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a18c74'/>
+      <elf-symbol name='nf_conntrack_find_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xffc6f64f'/>
+      <elf-symbol name='nf_ct_get_tuplepr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x263c49de'/>
+      <elf-symbol name='nf_ct_invert_tuple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe731af8'/>
+      <elf-symbol name='nf_ct_l4proto_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd586186'/>
+      <elf-symbol name='nf_register_net_hooks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bb39dc7'/>
+      <elf-symbol name='nf_unregister_net_hooks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb26384ea'/>
+      <elf-symbol name='nla_memcpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1db1704'/>
+      <elf-symbol name='nla_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ad84277'/>
+      <elf-symbol name='nla_put_64bit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe01da59'/>
+      <elf-symbol name='nla_put_nohdr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x893ad936'/>
+      <elf-symbol name='nla_strlcpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b640864'/>
+      <elf-symbol name='no_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49c01af6'/>
+      <elf-symbol name='no_seek_end_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd19c19e'/>
+      <elf-symbol name='nonseekable_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8869605'/>
+      <elf-symbol name='noop_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x303d704e'/>
+      <elf-symbol name='ns_capable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7858552'/>
+      <elf-symbol name='ns_to_timespec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66decfd5'/>
+      <elf-symbol name='ns_to_timespec64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e1e140e'/>
+      <elf-symbol name='ns_to_timeval' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f548802'/>
+      <elf-symbol name='nsecs_to_jiffies' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xffae8e8b'/>
+      <elf-symbol name='nvdimm_bus_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x980abf17'/>
+      <elf-symbol name='nvdimm_bus_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4bf40f0'/>
+      <elf-symbol name='nvdimm_pmem_region_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd96840c8'/>
+      <elf-symbol name='nvmem_cell_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0a31bf2'/>
+      <elf-symbol name='nvmem_cell_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85540ebc'/>
+      <elf-symbol name='nvmem_cell_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99f018c4'/>
+      <elf-symbol name='nvmem_cell_read_u32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94d9e1e6'/>
+      <elf-symbol name='nvmem_cell_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x202d4ed6'/>
+      <elf-symbol name='nvmem_device_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x768cff7f'/>
+      <elf-symbol name='nvmem_device_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78b8642e'/>
+      <elf-symbol name='of_address_to_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa11adeaa'/>
+      <elf-symbol name='of_alias_get_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e7ddda0'/>
+      <elf-symbol name='of_clk_add_hw_provider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc80718'/>
+      <elf-symbol name='of_clk_add_provider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x84ec2ef7'/>
+      <elf-symbol name='of_clk_del_provider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1fdeef38'/>
+      <elf-symbol name='of_clk_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8e8a578'/>
+      <elf-symbol name='of_clk_get_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4055e753'/>
+      <elf-symbol name='of_clk_get_from_provider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9757f75'/>
+      <elf-symbol name='of_clk_get_parent_count' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd1f4f79a'/>
+      <elf-symbol name='of_clk_get_parent_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2d60941'/>
+      <elf-symbol name='of_clk_hw_onecell_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7237dd0c'/>
+      <elf-symbol name='of_clk_hw_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7288c2d'/>
+      <elf-symbol name='of_clk_hw_simple_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf3734d07'/>
+      <elf-symbol name='of_clk_set_defaults' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60e83ddd'/>
+      <elf-symbol name='of_clk_src_onecell_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfdb68509'/>
+      <elf-symbol name='of_clk_src_simple_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf491ec'/>
+      <elf-symbol name='of_count_phandle_with_args' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61ed9604'/>
+      <elf-symbol name='of_dev_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa91f5218'/>
+      <elf-symbol name='of_devfreq_cooling_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd09b0c4a'/>
+      <elf-symbol name='of_devfreq_cooling_register_power' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa63937c4'/>
+      <elf-symbol name='of_device_get_match_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a737f6f'/>
+      <elf-symbol name='of_device_is_available' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6e9e9a'/>
+      <elf-symbol name='of_device_is_big_endian' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa960e34'/>
+      <elf-symbol name='of_device_is_compatible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe894c664'/>
+      <elf-symbol name='of_device_modalias' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x21674e23'/>
+      <elf-symbol name='of_device_request_module' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x898c1406'/>
+      <elf-symbol name='of_device_uevent_modalias' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3dacdbe'/>
+      <elf-symbol name='of_dma_configure' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x773b0dae'/>
+      <elf-symbol name='of_dma_controller_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7ed1a28'/>
+      <elf-symbol name='of_dma_controller_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d08ea88'/>
+      <elf-symbol name='of_dma_is_coherent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6525ca02'/>
+      <elf-symbol name='of_dma_request_slave_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58d932b3'/>
+      <elf-symbol name='of_dma_simple_xlate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf4880450'/>
+      <elf-symbol name='of_drm_find_bridge' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xedddc6d6'/>
+      <elf-symbol name='of_drm_find_panel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ac61e38'/>
+      <elf-symbol name='of_fdt_unflatten_tree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87067607'/>
+      <elf-symbol name='of_find_backlight_by_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa5dd46'/>
+      <elf-symbol name='of_find_compatible_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9fe23d07'/>
+      <elf-symbol name='of_find_device_by_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75ccc8ef'/>
+      <elf-symbol name='of_find_i2c_adapter_by_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88e8d723'/>
+      <elf-symbol name='of_find_i2c_device_by_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa552a1bd'/>
+      <elf-symbol name='of_find_matching_node_and_match' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3348523f'/>
+      <elf-symbol name='of_find_mipi_dsi_host_by_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f62734f'/>
+      <elf-symbol name='of_find_node_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2138425'/>
+      <elf-symbol name='of_find_node_by_phandle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8075dcb'/>
+      <elf-symbol name='of_find_node_by_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x217c85dc'/>
+      <elf-symbol name='of_find_node_opts_by_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12da121a'/>
+      <elf-symbol name='of_find_node_with_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35df0aee'/>
+      <elf-symbol name='of_find_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1965d81d'/>
+      <elf-symbol name='of_genpd_add_provider_onecell' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe27dd5db'/>
+      <elf-symbol name='of_genpd_add_provider_simple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72b09ff6'/>
+      <elf-symbol name='of_genpd_add_subdomain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48fde2b4'/>
+      <elf-symbol name='of_genpd_del_provider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a8318f3'/>
+      <elf-symbol name='of_get_address' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6627613'/>
+      <elf-symbol name='of_get_child_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f399215'/>
+      <elf-symbol name='of_get_compatible_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb12caa7d'/>
+      <elf-symbol name='of_get_cpu_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f8fa8ae'/>
+      <elf-symbol name='of_get_dma_window' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9f68fba'/>
+      <elf-symbol name='of_get_drm_display_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xffc2a796'/>
+      <elf-symbol name='of_get_named_gpio_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a1d4102'/>
+      <elf-symbol name='of_get_next_available_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8eda058'/>
+      <elf-symbol name='of_get_next_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68b3ac99'/>
+      <elf-symbol name='of_get_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x84aacdc8'/>
+      <elf-symbol name='of_get_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1163720'/>
+      <elf-symbol name='of_get_regulator_init_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc400741d'/>
+      <elf-symbol name='of_graph_get_endpoint_by_regs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa55c7c8a'/>
+      <elf-symbol name='of_graph_get_next_endpoint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0aed43f'/>
+      <elf-symbol name='of_graph_get_remote_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b17a51a'/>
+      <elf-symbol name='of_graph_get_remote_port_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7297000'/>
+      <elf-symbol name='of_graph_parse_endpoint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54007c25'/>
+      <elf-symbol name='of_hwspin_lock_get_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb0ab8a5d'/>
+      <elf-symbol name='of_hwspin_lock_get_id_byname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63c6fed3'/>
+      <elf-symbol name='of_icc_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2d4debc'/>
+      <elf-symbol name='of_icc_xlate_onecell' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60ba6ee'/>
+      <elf-symbol name='of_io_request_and_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6f74311'/>
+      <elf-symbol name='of_iomap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42a27fec'/>
+      <elf-symbol name='of_irq_find_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15257966'/>
+      <elf-symbol name='of_irq_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3eb41f61'/>
+      <elf-symbol name='of_irq_get_byname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa9ee1723'/>
+      <elf-symbol name='of_irq_parse_and_map_pci' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4d23814'/>
+      <elf-symbol name='of_irq_parse_one' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x695252a2'/>
+      <elf-symbol name='of_irq_to_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e5125ed'/>
+      <elf-symbol name='of_machine_is_compatible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd31ccb06'/>
+      <elf-symbol name='of_match_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcdb26987'/>
+      <elf-symbol name='of_match_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6319619c'/>
+      <elf-symbol name='of_modalias_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb3433d3'/>
+      <elf-symbol name='of_n_addr_cells' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7f1ed8b'/>
+      <elf-symbol name='of_n_size_cells' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f368c3d'/>
+      <elf-symbol name='of_node_name_eq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x729de072'/>
+      <elf-symbol name='of_nvmem_cell_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40ff4e5'/>
+      <elf-symbol name='of_parse_phandle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17e1623b'/>
+      <elf-symbol name='of_parse_phandle_with_args' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5158ba'/>
+      <elf-symbol name='of_parse_phandle_with_fixed_args' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae090f01'/>
+      <elf-symbol name='of_phandle_iterator_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5aa602'/>
+      <elf-symbol name='of_phandle_iterator_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x950fa85'/>
+      <elf-symbol name='of_phy_simple_xlate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ba23325'/>
+      <elf-symbol name='of_platform_depopulate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c967f5'/>
+      <elf-symbol name='of_platform_device_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0c17fbd'/>
+      <elf-symbol name='of_platform_populate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a4100a1'/>
+      <elf-symbol name='of_prop_next_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70203657'/>
+      <elf-symbol name='of_prop_next_u32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9fb230b'/>
+      <elf-symbol name='of_property_count_elems_of_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9422ac7'/>
+      <elf-symbol name='of_property_match_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x343151e0'/>
+      <elf-symbol name='of_property_read_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1bc728c7'/>
+      <elf-symbol name='of_property_read_string_helper' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8669dcc1'/>
+      <elf-symbol name='of_property_read_u32_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51d3b256'/>
+      <elf-symbol name='of_property_read_u64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3d8f1c9'/>
+      <elf-symbol name='of_property_read_variable_u16_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11efb3bc'/>
+      <elf-symbol name='of_property_read_variable_u32_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1378bc9e'/>
+      <elf-symbol name='of_property_read_variable_u64_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10a7e94b'/>
+      <elf-symbol name='of_property_read_variable_u8_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0b3c866'/>
+      <elf-symbol name='of_pwm_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19a6de20'/>
+      <elf-symbol name='of_pwm_xlate_with_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b729876'/>
+      <elf-symbol name='of_reserved_mem_device_init_by_idx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11ea8f01'/>
+      <elf-symbol name='of_reserved_mem_device_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6733f55a'/>
+      <elf-symbol name='of_reserved_mem_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x90a6b84b'/>
+      <elf-symbol name='of_reset_control_array_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5d404c7'/>
+      <elf-symbol name='of_thermal_get_ntrips' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec28d687'/>
+      <elf-symbol name='of_thermal_get_trip_points' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b28fb1e'/>
+      <elf-symbol name='of_thermal_is_trip_valid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7981e660'/>
+      <elf-symbol name='of_translate_address' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6bcaa0c'/>
+      <elf-symbol name='of_usb_get_phy_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48fe2f72'/>
+      <elf-symbol name='of_usb_host_tpl_support' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f8b4c0d'/>
+      <elf-symbol name='on_each_cpu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x294b9ea1'/>
+      <elf-symbol name='open_exec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96d57348'/>
+      <elf-symbol name='orderly_poweroff' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56256e8a'/>
+      <elf-symbol name='page_endio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f5c524b'/>
+      <elf-symbol name='page_mapping' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42a85d08'/>
+      <elf-symbol name='panic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1e046cc'/>
+      <elf-symbol name='param_get_int' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1fcffed'/>
+      <elf-symbol name='param_get_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51329459'/>
+      <elf-symbol name='param_set_bool' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ebbcf74'/>
+      <elf-symbol name='param_set_copystring' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b00a92b'/>
+      <elf-symbol name='param_set_int' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a123ca4'/>
+      <elf-symbol name='passthru_features_check' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7b43e2a'/>
+      <elf-symbol name='pci_alloc_irq_vectors_affinity' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe777d2d2'/>
+      <elf-symbol name='pci_assign_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x36131592'/>
+      <elf-symbol name='pci_assign_unassigned_bus_resources' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42d91e1e'/>
+      <elf-symbol name='pci_bus_add_devices' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9578528c'/>
+      <elf-symbol name='pci_check_and_mask_intx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4646ad81'/>
+      <elf-symbol name='pci_check_and_unmask_intx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c080498'/>
+      <elf-symbol name='pci_clear_master' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5fdc496'/>
+      <elf-symbol name='pci_clear_mwi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b0818c9'/>
+      <elf-symbol name='pci_common_swizzle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9983e974'/>
+      <elf-symbol name='pci_d3cold_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2669dc5'/>
+      <elf-symbol name='pci_dev_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x112a3ec6'/>
+      <elf-symbol name='pci_device_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeffb2702'/>
+      <elf-symbol name='pci_device_is_present' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa323129a'/>
+      <elf-symbol name='pci_disable_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2617977d'/>
+      <elf-symbol name='pci_disable_msi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe2c931fa'/>
+      <elf-symbol name='pci_disable_msix' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63715f1d'/>
+      <elf-symbol name='pci_enable_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38c898d9'/>
+      <elf-symbol name='pci_enable_device_mem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc53e489a'/>
+      <elf-symbol name='pci_enable_msi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0c8269d'/>
+      <elf-symbol name='pci_enable_msix_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6361f7f6'/>
+      <elf-symbol name='pci_enable_wake' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14bc67e1'/>
+      <elf-symbol name='pci_find_bus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x80c97032'/>
+      <elf-symbol name='pci_find_capability' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e350ec6'/>
+      <elf-symbol name='pci_find_ext_capability' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26302f0a'/>
+      <elf-symbol name='pci_find_next_capability' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6d80195'/>
+      <elf-symbol name='pci_find_pcie_root_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4f8dcfe'/>
+      <elf-symbol name='pci_free_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa397816a'/>
+      <elf-symbol name='pci_free_irq_vectors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa63c0e7c'/>
+      <elf-symbol name='pci_get_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe369d03'/>
+      <elf-symbol name='pci_get_slot' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x77d072e'/>
+      <elf-symbol name='pci_intx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2477ca4a'/>
+      <elf-symbol name='pci_iomap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51eeba6c'/>
+      <elf-symbol name='pci_iomap_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b929259'/>
+      <elf-symbol name='pci_ioremap_bar' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2842c87'/>
+      <elf-symbol name='pci_ioremap_wc_bar' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3ad89ca'/>
+      <elf-symbol name='pci_irq_get_affinity' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6554b6f'/>
+      <elf-symbol name='pci_irq_vector' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d11b91f'/>
+      <elf-symbol name='pci_load_and_free_saved_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa394d1bd'/>
+      <elf-symbol name='pci_load_saved_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc711665a'/>
+      <elf-symbol name='pci_lock_rescan_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xddbeeecc'/>
+      <elf-symbol name='pci_match_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d09cfe9'/>
+      <elf-symbol name='pci_msi_create_irq_domain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a4094c7'/>
+      <elf-symbol name='pci_msi_mask_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5963b392'/>
+      <elf-symbol name='pci_msi_unmask_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a2b99b1'/>
+      <elf-symbol name='pci_msi_vec_count' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa177a237'/>
+      <elf-symbol name='pci_read_config_byte' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc634089'/>
+      <elf-symbol name='pci_read_config_dword' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ed4d566'/>
+      <elf-symbol name='pci_read_config_word' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6640aa28'/>
+      <elf-symbol name='pci_release_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa49f05f4'/>
+      <elf-symbol name='pci_release_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf46e9d0a'/>
+      <elf-symbol name='pci_release_selected_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22122233'/>
+      <elf-symbol name='pci_request_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa395d78'/>
+      <elf-symbol name='pci_request_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5041be75'/>
+      <elf-symbol name='pci_request_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd43ec9d5'/>
+      <elf-symbol name='pci_request_selected_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e5ac582'/>
+      <elf-symbol name='pci_rescan_bus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2bb528c5'/>
+      <elf-symbol name='pci_reset_function' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc3ab1a8'/>
+      <elf-symbol name='pci_restore_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7027bc1'/>
+      <elf-symbol name='pci_save_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x895f4e82'/>
+      <elf-symbol name='pci_scan_child_bus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e1c31d5'/>
+      <elf-symbol name='pci_scan_root_bus_bridge' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x504ee3fc'/>
+      <elf-symbol name='pci_select_bars' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f95d641'/>
+      <elf-symbol name='pci_set_master' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb3b7615'/>
+      <elf-symbol name='pci_set_mwi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1311d0a3'/>
+      <elf-symbol name='pci_set_power_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5b94107'/>
+      <elf-symbol name='pci_stop_and_remove_bus_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x731e5a9d'/>
+      <elf-symbol name='pci_store_saved_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c35b14c'/>
+      <elf-symbol name='pci_unlock_rescan_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5790e7a0'/>
+      <elf-symbol name='pci_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8d777ae'/>
+      <elf-symbol name='pci_walk_bus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf332697'/>
+      <elf-symbol name='pci_write_config_byte' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d1d548a'/>
+      <elf-symbol name='pci_write_config_dword' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30631a3c'/>
+      <elf-symbol name='pci_write_config_word' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc8689a5'/>
+      <elf-symbol name='pcie_aspm_enabled' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43ac9f1'/>
+      <elf-symbol name='pcie_bus_configure_settings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa3a5f'/>
+      <elf-symbol name='pcie_capability_read_dword' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa29c12b8'/>
+      <elf-symbol name='pcie_capability_read_word' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x455355ab'/>
+      <elf-symbol name='pcie_capability_write_word' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7857f44e'/>
+      <elf-symbol name='pcim_enable_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13e4af5e'/>
+      <elf-symbol name='percpu_ref_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x284fe794'/>
+      <elf-symbol name='percpu_ref_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41b200f9'/>
+      <elf-symbol name='percpu_ref_kill_and_confirm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81d7c5b7'/>
+      <elf-symbol name='percpu_ref_switch_to_atomic_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12dbc8f6'/>
+      <elf-symbol name='percpu_ref_switch_to_percpu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26c622ee'/>
+      <elf-symbol name='perf_event_create_kernel_counter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5dd9e6c4'/>
+      <elf-symbol name='perf_event_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaffef95'/>
+      <elf-symbol name='perf_event_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e434619'/>
+      <elf-symbol name='perf_event_read_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f4f856e'/>
+      <elf-symbol name='perf_event_release_kernel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3972ca8a'/>
+      <elf-symbol name='perf_trace_buf_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4eae733'/>
+      <elf-symbol name='perf_trace_run_bpf_submit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea372363'/>
+      <elf-symbol name='pfn_valid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51e77c97'/>
+      <elf-symbol name='phy_calibrate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0731c6f'/>
+      <elf-symbol name='phy_connect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ede3e1a'/>
+      <elf-symbol name='phy_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88d624aa'/>
+      <elf-symbol name='phy_ethtool_get_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfbc85c43'/>
+      <elf-symbol name='phy_ethtool_nway_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9f68882'/>
+      <elf-symbol name='phy_ethtool_set_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb82eddbf'/>
+      <elf-symbol name='phy_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70d98ba0'/>
+      <elf-symbol name='phy_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52a6f2cd'/>
+      <elf-symbol name='phy_mii_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a75a6fe'/>
+      <elf-symbol name='phy_pm_runtime_get_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5fdcdd55'/>
+      <elf-symbol name='phy_pm_runtime_put_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a66124f'/>
+      <elf-symbol name='phy_power_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8384b2e'/>
+      <elf-symbol name='phy_power_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39a0ee7'/>
+      <elf-symbol name='phy_print_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1a03532'/>
+      <elf-symbol name='phy_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe781bad9'/>
+      <elf-symbol name='phy_set_mode_ext' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58f84d81'/>
+      <elf-symbol name='phy_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3fc6e4c'/>
+      <elf-symbol name='phy_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc0fd74ce'/>
+      <elf-symbol name='pid_task' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f87a29a'/>
+      <elf-symbol name='pin_get_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc496da31'/>
+      <elf-symbol name='pinconf_generic_dt_node_to_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x398b5632'/>
+      <elf-symbol name='pinconf_generic_parse_dt_config' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ad4a2fb'/>
+      <elf-symbol name='pinctrl_add_gpio_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd449b02c'/>
+      <elf-symbol name='pinctrl_dev_get_drvdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4417ae9'/>
+      <elf-symbol name='pinctrl_force_sleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc39e14ed'/>
+      <elf-symbol name='pinctrl_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x869cdedd'/>
+      <elf-symbol name='pinctrl_gpio_set_config' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b92d16e'/>
+      <elf-symbol name='pinctrl_lookup_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b05930f'/>
+      <elf-symbol name='pinctrl_pm_select_default_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xef70d78d'/>
+      <elf-symbol name='pinctrl_pm_select_idle_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xccc42cc'/>
+      <elf-symbol name='pinctrl_pm_select_sleep_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc4d3fe7'/>
+      <elf-symbol name='pinctrl_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41735000'/>
+      <elf-symbol name='pinctrl_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x400ee912'/>
+      <elf-symbol name='pinctrl_remove_gpio_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb98637f6'/>
+      <elf-symbol name='pinctrl_select_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x59dc4a15'/>
+      <elf-symbol name='pinctrl_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b431359'/>
+      <elf-symbol name='pinctrl_utils_add_map_configs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98c4863c'/>
+      <elf-symbol name='pinctrl_utils_add_map_mux' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8357a8a'/>
+      <elf-symbol name='pinctrl_utils_free_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2db3caea'/>
+      <elf-symbol name='pinctrl_utils_reserve_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdac665f8'/>
+      <elf-symbol name='pipe_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38f66c3d'/>
+      <elf-symbol name='pipe_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9308874f'/>
+      <elf-symbol name='platform_device_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfdb0aa93'/>
+      <elf-symbol name='platform_device_add_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe56bf211'/>
+      <elf-symbol name='platform_device_add_properties' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd444f2c'/>
+      <elf-symbol name='platform_device_add_resources' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf591f2f'/>
+      <elf-symbol name='platform_device_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4cd004d6'/>
+      <elf-symbol name='platform_device_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2607f227'/>
+      <elf-symbol name='platform_device_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28b54af5'/>
+      <elf-symbol name='platform_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc76a948b'/>
+      <elf-symbol name='platform_device_register_full' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x142aac5c'/>
+      <elf-symbol name='platform_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc2967382'/>
+      <elf-symbol name='platform_driver_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x277852e9'/>
+      <elf-symbol name='platform_get_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb6d1a64'/>
+      <elf-symbol name='platform_get_irq_byname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd190c7f'/>
+      <elf-symbol name='platform_get_irq_byname_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1d7c849'/>
+      <elf-symbol name='platform_get_irq_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x618dfd5f'/>
+      <elf-symbol name='platform_get_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x80cdd098'/>
+      <elf-symbol name='platform_get_resource_byname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfaec7f73'/>
+      <elf-symbol name='platform_irq_count' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb91995a9'/>
+      <elf-symbol name='platform_unregister_drivers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd30658b'/>
+      <elf-symbol name='pm_generic_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85db6528'/>
+      <elf-symbol name='pm_generic_runtime_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ca726ec'/>
+      <elf-symbol name='pm_generic_runtime_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x410cdf3a'/>
+      <elf-symbol name='pm_generic_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xddbca5d0'/>
+      <elf-symbol name='pm_genpd_add_subdomain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec44d7a4'/>
+      <elf-symbol name='pm_genpd_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25cafe76'/>
+      <elf-symbol name='pm_genpd_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec5a235a'/>
+      <elf-symbol name='pm_genpd_remove_subdomain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x864c3c5'/>
+      <elf-symbol name='pm_print_active_wakeup_sources' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4065d168'/>
+      <elf-symbol name='pm_qos_add_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e5b03dc'/>
+      <elf-symbol name='pm_qos_add_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c763745'/>
+      <elf-symbol name='pm_qos_remove_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbcac6160'/>
+      <elf-symbol name='pm_qos_remove_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd4e9d03'/>
+      <elf-symbol name='pm_qos_request_active' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb64bcb2'/>
+      <elf-symbol name='pm_qos_update_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe7dc742f'/>
+      <elf-symbol name='pm_relax' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb45a71a1'/>
+      <elf-symbol name='pm_runtime_allow' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8806e6af'/>
+      <elf-symbol name='pm_runtime_barrier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ab56578'/>
+      <elf-symbol name='pm_runtime_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf32cca5d'/>
+      <elf-symbol name='pm_runtime_forbid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe92f454'/>
+      <elf-symbol name='pm_runtime_force_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe56c1400'/>
+      <elf-symbol name='pm_runtime_force_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5fdba3a'/>
+      <elf-symbol name='pm_runtime_get_if_in_use' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ca01e69'/>
+      <elf-symbol name='pm_runtime_irq_safe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce62c80a'/>
+      <elf-symbol name='pm_runtime_no_callbacks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb6be8ad'/>
+      <elf-symbol name='pm_runtime_set_autosuspend_delay' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b7c4c9b'/>
+      <elf-symbol name='pm_stay_awake' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc79b8674'/>
+      <elf-symbol name='pm_system_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c0215f2'/>
+      <elf-symbol name='pm_wakeup_dev_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9bf7a9d'/>
+      <elf-symbol name='pm_wakeup_ws_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b696e7f'/>
+      <elf-symbol name='policy_has_boost_freq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe9d1911'/>
+      <elf-symbol name='power_supply_changed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee7b76a4'/>
+      <elf-symbol name='power_supply_find_ocv2cap_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8528380d'/>
+      <elf-symbol name='power_supply_get_battery_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x322c14e4'/>
+      <elf-symbol name='power_supply_get_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeeedfb8e'/>
+      <elf-symbol name='power_supply_get_drvdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25c4dd07'/>
+      <elf-symbol name='power_supply_get_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27c0dfcb'/>
+      <elf-symbol name='power_supply_ocv2cap_simple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5cad8fc3'/>
+      <elf-symbol name='power_supply_powers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x697054aa'/>
+      <elf-symbol name='power_supply_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17d60528'/>
+      <elf-symbol name='power_supply_put_battery_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbba138fb'/>
+      <elf-symbol name='power_supply_reg_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x136209db'/>
+      <elf-symbol name='power_supply_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x197c4fff'/>
+      <elf-symbol name='power_supply_set_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92b27638'/>
+      <elf-symbol name='power_supply_temp2resist_simple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b6150fb'/>
+      <elf-symbol name='power_supply_unreg_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b81c38b'/>
+      <elf-symbol name='power_supply_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c38bf1c'/>
+      <elf-symbol name='ppp_channel_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73718197'/>
+      <elf-symbol name='ppp_dev_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94d1f432'/>
+      <elf-symbol name='ppp_input' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3525c'/>
+      <elf-symbol name='ppp_input_error' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe73a2b82'/>
+      <elf-symbol name='ppp_output_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5c27d16'/>
+      <elf-symbol name='ppp_register_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ef6651c'/>
+      <elf-symbol name='ppp_register_compressor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc358f4f5'/>
+      <elf-symbol name='ppp_register_net_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa86fae12'/>
+      <elf-symbol name='ppp_unit_number' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c18b21d'/>
+      <elf-symbol name='ppp_unregister_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7abfe098'/>
+      <elf-symbol name='ppp_unregister_compressor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x542998e2'/>
+      <elf-symbol name='pppox_compat_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf30a3a00'/>
+      <elf-symbol name='pppox_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa45ee80f'/>
+      <elf-symbol name='pppox_unbind_sock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39c871f0'/>
+      <elf-symbol name='prandom_u32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfda9581f'/>
+      <elf-symbol name='preempt_schedule' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43b0c9c3'/>
+      <elf-symbol name='preempt_schedule_notrace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf70e4a4d'/>
+      <elf-symbol name='prepare_binprm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94d82c17'/>
+      <elf-symbol name='prepare_kernel_cred' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25f30c60'/>
+      <elf-symbol name='prepare_to_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5fd90f1'/>
+      <elf-symbol name='prepare_to_wait_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c26d495'/>
+      <elf-symbol name='printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5850110'/>
+      <elf-symbol name='printk_timed_ratelimit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7cc4a5d'/>
+      <elf-symbol name='proc_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3597e04'/>
+      <elf-symbol name='proc_create_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc03445e'/>
+      <elf-symbol name='proc_create_net_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb068275'/>
+      <elf-symbol name='proc_create_net_single' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bbb140'/>
+      <elf-symbol name='proc_create_seq_private' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe180cfa9'/>
+      <elf-symbol name='proc_create_single_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfbcbc51a'/>
+      <elf-symbol name='proc_dointvec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8181adf'/>
+      <elf-symbol name='proc_mkdir' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x553b162f'/>
+      <elf-symbol name='proc_mkdir_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2892d656'/>
+      <elf-symbol name='proc_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94bdbdba'/>
+      <elf-symbol name='proto_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ddef250'/>
+      <elf-symbol name='proto_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa84fcb4b'/>
+      <elf-symbol name='pskb_expand_head' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c8fe60'/>
+      <elf-symbol name='pskb_trim_rcsum_slow' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xecf1def1'/>
+      <elf-symbol name='put_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2990ab5'/>
+      <elf-symbol name='put_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9553ff4b'/>
+      <elf-symbol name='put_pid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a7b3308'/>
+      <elf-symbol name='put_tty_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d68cdcb'/>
+      <elf-symbol name='put_unused_fd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f4547a7'/>
+      <elf-symbol name='put_vaddr_frames' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x568f2f3f'/>
+      <elf-symbol name='pwm_apply_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e59f26a'/>
+      <elf-symbol name='pwm_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x915f8b44'/>
+      <elf-symbol name='pwm_get_chip_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbabcded4'/>
+      <elf-symbol name='pwm_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb60e484'/>
+      <elf-symbol name='pwm_set_chip_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32a73b25'/>
+      <elf-symbol name='pwmchip_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee1e173'/>
+      <elf-symbol name='pwmchip_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7da96ee'/>
+      <elf-symbol name='qcom_smem_state_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x447ff1c0'/>
+      <elf-symbol name='qcom_smem_state_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55651fc8'/>
+      <elf-symbol name='qcom_smem_state_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4561f990'/>
+      <elf-symbol name='qcom_smem_state_update_bits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf730fb4a'/>
+      <elf-symbol name='qdisc_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13d722d8'/>
+      <elf-symbol name='queue_delayed_work_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf57e89e'/>
+      <elf-symbol name='queue_work_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x732ac580'/>
+      <elf-symbol name='radix_tree_delete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e6e4b41'/>
+      <elf-symbol name='radix_tree_insert' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fbc6a00'/>
+      <elf-symbol name='radix_tree_iter_delete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6dc35b25'/>
+      <elf-symbol name='radix_tree_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70ad75fb'/>
+      <elf-symbol name='radix_tree_maybe_preload' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb22e16d5'/>
+      <elf-symbol name='radix_tree_next_chunk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c541e7b'/>
+      <elf-symbol name='rational_best_approximation' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb0a0da0c'/>
+      <elf-symbol name='raw_notifier_call_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa851973a'/>
+      <elf-symbol name='raw_notifier_chain_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc9fa232'/>
+      <elf-symbol name='raw_notifier_chain_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd06524ba'/>
+      <elf-symbol name='rb_erase' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d9b652b'/>
+      <elf-symbol name='rb_first' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xece784c2'/>
+      <elf-symbol name='rb_insert_color' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5526619'/>
+      <elf-symbol name='rb_last' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf2c2742'/>
+      <elf-symbol name='rb_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca9360b5'/>
+      <elf-symbol name='rb_prev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf82ec573'/>
+      <elf-symbol name='rb_replace_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7fe32873'/>
+      <elf-symbol name='rc_keydown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6018fd1'/>
+      <elf-symbol name='rc_map_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x366ac4a3'/>
+      <elf-symbol name='rc_map_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6e332f'/>
+      <elf-symbol name='rc_repeat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x281ee57'/>
+      <elf-symbol name='rdev_get_drvdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e4c8a87'/>
+      <elf-symbol name='rdev_get_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf19409ca'/>
+      <elf-symbol name='refcount_dec_and_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9e8aee7'/>
+      <elf-symbol name='refcount_dec_and_mutex_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc156c981'/>
+      <elf-symbol name='refcount_dec_and_test_checked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb62b74af'/>
+      <elf-symbol name='refcount_dec_checked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8223179'/>
+      <elf-symbol name='refcount_dec_not_one' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe441e95a'/>
+      <elf-symbol name='refcount_inc_checked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ee8d6d4'/>
+      <elf-symbol name='refcount_inc_not_zero_checked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x957b1fb6'/>
+      <elf-symbol name='reg_initiator_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdba126c1'/>
+      <elf-symbol name='regcache_cache_only' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13a4e880'/>
+      <elf-symbol name='regcache_drop_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec97bc58'/>
+      <elf-symbol name='regcache_mark_dirty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69fde4a3'/>
+      <elf-symbol name='regcache_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0596782'/>
+      <elf-symbol name='regcache_sync_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcbf69fc2'/>
+      <elf-symbol name='register_blkdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71a50dbc'/>
+      <elf-symbol name='register_chrdev_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3fd78f3b'/>
+      <elf-symbol name='register_console' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf4eb4529'/>
+      <elf-symbol name='register_die_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6261484'/>
+      <elf-symbol name='register_inet6addr_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60352082'/>
+      <elf-symbol name='register_inetaddr_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf68285c0'/>
+      <elf-symbol name='register_key_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdefd345f'/>
+      <elf-symbol name='register_net_sysctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf12891f6'/>
+      <elf-symbol name='register_netdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x323e0c40'/>
+      <elf-symbol name='register_netdevice' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8545edb'/>
+      <elf-symbol name='register_netdevice_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd2da1048'/>
+      <elf-symbol name='register_netevent_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4761f17c'/>
+      <elf-symbol name='register_pernet_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd2063a9'/>
+      <elf-symbol name='register_pernet_subsys' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd20436ac'/>
+      <elf-symbol name='register_pm_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9cc4f70a'/>
+      <elf-symbol name='register_pppox_proto' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3047c82b'/>
+      <elf-symbol name='register_reboot_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3517383e'/>
+      <elf-symbol name='register_restart_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9d8fd16'/>
+      <elf-symbol name='register_shrinker' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa37a7e1c'/>
+      <elf-symbol name='register_syscore_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9c425de'/>
+      <elf-symbol name='register_sysctl_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf97d7de2'/>
+      <elf-symbol name='register_tcf_proto_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf9ef738'/>
+      <elf-symbol name='register_virtio_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8012ed0b'/>
+      <elf-symbol name='register_virtio_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e94cc5f'/>
+      <elf-symbol name='register_vmap_purge_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26ed2186'/>
+      <elf-symbol name='regmap_add_irq_chip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5fe8541'/>
+      <elf-symbol name='regmap_async_complete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6200c2d4'/>
+      <elf-symbol name='regmap_bulk_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe676548'/>
+      <elf-symbol name='regmap_bulk_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x59524c6c'/>
+      <elf-symbol name='regmap_del_irq_chip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x131a5ed7'/>
+      <elf-symbol name='regmap_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbeaada12'/>
+      <elf-symbol name='regmap_field_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4e3c37a'/>
+      <elf-symbol name='regmap_field_update_bits_base' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3934d225'/>
+      <elf-symbol name='regmap_get_reg_stride' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b7e60b6'/>
+      <elf-symbol name='regmap_get_val_bytes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18376875'/>
+      <elf-symbol name='regmap_irq_get_domain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6df4244a'/>
+      <elf-symbol name='regmap_irq_get_virq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55784228'/>
+      <elf-symbol name='regmap_multi_reg_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3fef7438'/>
+      <elf-symbol name='regmap_multi_reg_write_bypassed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8cee263'/>
+      <elf-symbol name='regmap_raw_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafbcac0d'/>
+      <elf-symbol name='regmap_raw_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x727469e6'/>
+      <elf-symbol name='regmap_raw_write_async' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2d69325'/>
+      <elf-symbol name='regmap_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4bd013ef'/>
+      <elf-symbol name='regmap_register_patch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x693bc0fb'/>
+      <elf-symbol name='regmap_update_bits_base' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99982346'/>
+      <elf-symbol name='regmap_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd6c8fcb'/>
+      <elf-symbol name='regulator_bulk_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65e583e9'/>
+      <elf-symbol name='regulator_bulk_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4acbada8'/>
+      <elf-symbol name='regulator_count_voltages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcec58763'/>
+      <elf-symbol name='regulator_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x915251bd'/>
+      <elf-symbol name='regulator_disable_deferred' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf3352ca4'/>
+      <elf-symbol name='regulator_disable_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79f49694'/>
+      <elf-symbol name='regulator_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b0aa2fa'/>
+      <elf-symbol name='regulator_enable_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7a977b1'/>
+      <elf-symbol name='regulator_force_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5d7fc1a'/>
+      <elf-symbol name='regulator_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff32853b'/>
+      <elf-symbol name='regulator_get_current_limit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x577c9c35'/>
+      <elf-symbol name='regulator_get_drvdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f08ea87'/>
+      <elf-symbol name='regulator_get_linear_step' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc22299f'/>
+      <elf-symbol name='regulator_get_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1971d15e'/>
+      <elf-symbol name='regulator_get_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa024cb49'/>
+      <elf-symbol name='regulator_get_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd341b334'/>
+      <elf-symbol name='regulator_get_voltage_sel_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8092b34c'/>
+      <elf-symbol name='regulator_is_enabled' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x544783d7'/>
+      <elf-symbol name='regulator_is_enabled_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ab71c04'/>
+      <elf-symbol name='regulator_is_supported_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2473f92f'/>
+      <elf-symbol name='regulator_list_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71e8275a'/>
+      <elf-symbol name='regulator_list_voltage_linear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3559babd'/>
+      <elf-symbol name='regulator_list_voltage_linear_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64c9ed14'/>
+      <elf-symbol name='regulator_list_voltage_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ad7cba8'/>
+      <elf-symbol name='regulator_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4195c18'/>
+      <elf-symbol name='regulator_map_voltage_ascend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd290ef8f'/>
+      <elf-symbol name='regulator_map_voltage_linear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7842ee28'/>
+      <elf-symbol name='regulator_notifier_call_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75a5a2'/>
+      <elf-symbol name='regulator_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40fa91b'/>
+      <elf-symbol name='regulator_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62727b01'/>
+      <elf-symbol name='regulator_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0a544e4'/>
+      <elf-symbol name='regulator_set_current_limit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdfbad284'/>
+      <elf-symbol name='regulator_set_load' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4719b78a'/>
+      <elf-symbol name='regulator_set_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37f626cc'/>
+      <elf-symbol name='regulator_set_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4dce6d6'/>
+      <elf-symbol name='regulator_set_voltage_sel_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ba8036c'/>
+      <elf-symbol name='regulator_set_voltage_time_sel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a932937'/>
+      <elf-symbol name='regulator_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e8e195c'/>
+      <elf-symbol name='regulator_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xedadbcef'/>
+      <elf-symbol name='regulator_unregister_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x386ac1d3'/>
+      <elf-symbol name='regulatory_hint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e2a0abe'/>
+      <elf-symbol name='regulatory_set_wiphy_regd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf8f0d55'/>
+      <elf-symbol name='release_firmware' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xabedbed1'/>
+      <elf-symbol name='release_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa9147996'/>
+      <elf-symbol name='release_sock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ca91ac9'/>
+      <elf-symbol name='remap_pfn_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba71e9bc'/>
+      <elf-symbol name='remap_vmalloc_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7aa1984'/>
+      <elf-symbol name='remove_arg_zero' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f516ce9'/>
+      <elf-symbol name='remove_proc_entry' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf3c61e7'/>
+      <elf-symbol name='remove_wait_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37110088'/>
+      <elf-symbol name='report_iommu_fault' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9f6aede'/>
+      <elf-symbol name='request_firmware' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5954d51a'/>
+      <elf-symbol name='request_firmware_direct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd66dcf7a'/>
+      <elf-symbol name='request_firmware_into_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e2695fc'/>
+      <elf-symbol name='request_firmware_nowait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x112a9db5'/>
+      <elf-symbol name='request_key_tag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94ed07a3'/>
+      <elf-symbol name='request_threaded_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2072ee9b'/>
+      <elf-symbol name='reset_control_assert' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c4b6684'/>
+      <elf-symbol name='reset_control_deassert' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2210d64'/>
+      <elf-symbol name='reset_control_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40f0683e'/>
+      <elf-symbol name='reset_control_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24f39c39'/>
+      <elf-symbol name='reset_controller_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae5e40f0'/>
+      <elf-symbol name='return_address' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb917b6d7'/>
+      <elf-symbol name='revalidate_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5a1e223'/>
+      <elf-symbol name='rfkill_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ea28880'/>
+      <elf-symbol name='rfkill_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb68bbad'/>
+      <elf-symbol name='rfkill_find_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50b73ce2'/>
+      <elf-symbol name='rfkill_init_sw_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaad6d92f'/>
+      <elf-symbol name='rfkill_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25277497'/>
+      <elf-symbol name='rfkill_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x83eb21c'/>
+      <elf-symbol name='rhashtable_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39d8c1bf'/>
+      <elf-symbol name='rhashtable_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1510dd2'/>
+      <elf-symbol name='rhashtable_insert_slow' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22964e6d'/>
+      <elf-symbol name='rht_bucket_nested' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7f990e9'/>
+      <elf-symbol name='rht_bucket_nested_insert' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe01d6bec'/>
+      <elf-symbol name='round_jiffies' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91eb9b4'/>
+      <elf-symbol name='round_jiffies_relative' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1eb9516e'/>
+      <elf-symbol name='round_jiffies_up' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50fad434'/>
+      <elf-symbol name='rpmsg_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x339d82c6'/>
+      <elf-symbol name='rpmsg_send' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdfb24d7d'/>
+      <elf-symbol name='rpmsg_trysend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeeda70e5'/>
+      <elf-symbol name='rpmsg_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x392bbd2'/>
+      <elf-symbol name='rproc_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1db6f446'/>
+      <elf-symbol name='rproc_add_subdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5e07a55'/>
+      <elf-symbol name='rproc_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1fff5e7c'/>
+      <elf-symbol name='rproc_coredump_add_custom_segment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16efa68b'/>
+      <elf-symbol name='rproc_coredump_add_segment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4eebca9'/>
+      <elf-symbol name='rproc_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x571ccf4b'/>
+      <elf-symbol name='rproc_elf_get_boot_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc898555c'/>
+      <elf-symbol name='rproc_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b120adc'/>
+      <elf-symbol name='rproc_get_by_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9e63628'/>
+      <elf-symbol name='rproc_remove_subdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f845cec'/>
+      <elf-symbol name='rproc_report_crash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7b43040'/>
+      <elf-symbol name='rq_flush_dcache_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa99f661b'/>
+      <elf-symbol name='rt6_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf18350b7'/>
+      <elf-symbol name='rt_mutex_trylock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x329abea3'/>
+      <elf-symbol name='rtc_class_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37def8ab'/>
+      <elf-symbol name='rtc_class_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x883f39b7'/>
+      <elf-symbol name='rtc_ktime_to_tm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4c2c66c'/>
+      <elf-symbol name='rtc_read_time' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3263f04'/>
+      <elf-symbol name='rtc_time64_to_tm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x356461c8'/>
+      <elf-symbol name='rtc_tm_to_time64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f2250ba'/>
+      <elf-symbol name='rtc_update_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae125c5a'/>
+      <elf-symbol name='rtc_valid_tm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5838f6c9'/>
+      <elf-symbol name='rtc_year_days' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4859b8bb'/>
+      <elf-symbol name='rtnl_is_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85670f1d'/>
+      <elf-symbol name='rtnl_link_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdcdcd19c'/>
+      <elf-symbol name='rtnl_link_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x945de9d0'/>
+      <elf-symbol name='rtnl_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7a4fbed'/>
+      <elf-symbol name='rtnl_register_module' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x112a9b1e'/>
+      <elf-symbol name='rtnl_trylock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf4f14de6'/>
+      <elf-symbol name='rtnl_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e720ff2'/>
+      <elf-symbol name='rtnl_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b52e38'/>
+      <elf-symbol name='rtnl_unregister_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x579e0bf5'/>
+      <elf-symbol name='save_stack_trace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x361e2bcc'/>
+      <elf-symbol name='save_stack_trace_tsk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73657bea'/>
+      <elf-symbol name='sb800_prefetch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5cc1c50f'/>
+      <elf-symbol name='scatterwalk_ffwd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5bbdfa26'/>
+      <elf-symbol name='scatterwalk_map_and_copy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x845dbf3b'/>
+      <elf-symbol name='sched_clock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd653b126'/>
+      <elf-symbol name='sched_setattr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6c8c1a'/>
+      <elf-symbol name='sched_setscheduler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b5506f2'/>
+      <elf-symbol name='sched_setscheduler_nocheck' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82f34bf9'/>
+      <elf-symbol name='sched_show_task' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa126e3eb'/>
+      <elf-symbol name='schedule' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1000e51'/>
+      <elf-symbol name='schedule_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ddd8aad'/>
+      <elf-symbol name='schedule_timeout_interruptible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54496b4'/>
+      <elf-symbol name='schedule_timeout_uninterruptible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x151f4898'/>
+      <elf-symbol name='scmd_printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0614b4a'/>
+      <elf-symbol name='scmi_driver_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf565312a'/>
+      <elf-symbol name='scmi_driver_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x788370eb'/>
+      <elf-symbol name='scnprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96848186'/>
+      <elf-symbol name='scsi_add_host_with_dma' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x835e3b69'/>
+      <elf-symbol name='scsi_autopm_get_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdbe1543'/>
+      <elf-symbol name='scsi_autopm_put_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x425eccb3'/>
+      <elf-symbol name='scsi_block_requests' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91bc807d'/>
+      <elf-symbol name='scsi_block_when_processing_errors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd4c4833'/>
+      <elf-symbol name='scsi_change_queue_depth' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c39e22a'/>
+      <elf-symbol name='scsi_device_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ec737f0'/>
+      <elf-symbol name='scsi_device_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e185d61'/>
+      <elf-symbol name='scsi_eh_prep_cmnd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xccac0d31'/>
+      <elf-symbol name='scsi_eh_restore_cmnd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafdce29'/>
+      <elf-symbol name='scsi_get_host_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c2c2917'/>
+      <elf-symbol name='scsi_host_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x337405cc'/>
+      <elf-symbol name='scsi_host_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e1ddf02'/>
+      <elf-symbol name='scsi_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6447fe92'/>
+      <elf-symbol name='scsi_ioctl_block_when_processing_errors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55a1903d'/>
+      <elf-symbol name='scsi_is_host_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c65903'/>
+      <elf-symbol name='scsi_normalize_sense' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfbad3cf0'/>
+      <elf-symbol name='scsi_print_command' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12b4c546'/>
+      <elf-symbol name='scsi_print_sense_hdr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d10eb1b'/>
+      <elf-symbol name='scsi_register_interface' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11862bdf'/>
+      <elf-symbol name='scsi_remove_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64000f6'/>
+      <elf-symbol name='scsi_report_bus_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10288f8'/>
+      <elf-symbol name='scsi_report_device_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x871a80a8'/>
+      <elf-symbol name='scsi_scan_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87c9bd86'/>
+      <elf-symbol name='scsi_sense_desc_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10d9f885'/>
+      <elf-symbol name='scsi_unblock_requests' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf80f050f'/>
+      <elf-symbol name='sdev_prefix_printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a79f54b'/>
+      <elf-symbol name='sdhci_add_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x942e57ad'/>
+      <elf-symbol name='sdhci_cleanup_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x796584ad'/>
+      <elf-symbol name='sdhci_cqe_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x695a3b47'/>
+      <elf-symbol name='sdhci_cqe_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e5dc1c6'/>
+      <elf-symbol name='sdhci_cqe_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6f807f'/>
+      <elf-symbol name='sdhci_enable_clk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f8f25e2'/>
+      <elf-symbol name='sdhci_enable_v4_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d83fac5'/>
+      <elf-symbol name='sdhci_get_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89503c87'/>
+      <elf-symbol name='sdhci_pltfm_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8370fed9'/>
+      <elf-symbol name='sdhci_pltfm_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x59cae22'/>
+      <elf-symbol name='sdhci_remove_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88b7aa22'/>
+      <elf-symbol name='sdhci_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x391f3381'/>
+      <elf-symbol name='sdhci_request_atomic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38c594eb'/>
+      <elf-symbol name='sdhci_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4fa32ae7'/>
+      <elf-symbol name='sdhci_runtime_resume_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x553deec5'/>
+      <elf-symbol name='sdhci_runtime_suspend_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b28479c'/>
+      <elf-symbol name='sdhci_set_bus_width' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24fa3aff'/>
+      <elf-symbol name='sdhci_setup_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce1f4438'/>
+      <elf-symbol name='sdio_align_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc665f4c8'/>
+      <elf-symbol name='sdio_claim_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27288e39'/>
+      <elf-symbol name='sdio_claim_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee5dd8b8'/>
+      <elf-symbol name='sdio_disable_func' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd2ebcc0a'/>
+      <elf-symbol name='sdio_enable_func' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa859c0a7'/>
+      <elf-symbol name='sdio_f0_readb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2fdc7d5e'/>
+      <elf-symbol name='sdio_f0_writeb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b2d1874'/>
+      <elf-symbol name='sdio_get_host_pm_caps' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa99d7cd'/>
+      <elf-symbol name='sdio_memcpy_fromio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2edc35f7'/>
+      <elf-symbol name='sdio_memcpy_toio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79161519'/>
+      <elf-symbol name='sdio_readb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b1ea0a8'/>
+      <elf-symbol name='sdio_readl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e83d61e'/>
+      <elf-symbol name='sdio_readsb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa93d7f8a'/>
+      <elf-symbol name='sdio_readw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x77c691de'/>
+      <elf-symbol name='sdio_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x167099b0'/>
+      <elf-symbol name='sdio_release_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3441acac'/>
+      <elf-symbol name='sdio_release_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8156574c'/>
+      <elf-symbol name='sdio_set_block_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfffa806'/>
+      <elf-symbol name='sdio_set_host_pm_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76ccde82'/>
+      <elf-symbol name='sdio_signal_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27713925'/>
+      <elf-symbol name='sdio_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e006289'/>
+      <elf-symbol name='sdio_writeb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf39739d6'/>
+      <elf-symbol name='sdio_writel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfbe4df0'/>
+      <elf-symbol name='sdio_writesb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5fd1174a'/>
+      <elf-symbol name='sdio_writew' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5eef5dc9'/>
+      <elf-symbol name='search_binary_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7586efe4'/>
+      <elf-symbol name='security_sk_classify_flow' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0875158'/>
+      <elf-symbol name='security_sock_graft' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda10ec3'/>
+      <elf-symbol name='securityfs_create_dir' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1511394b'/>
+      <elf-symbol name='securityfs_create_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x907d7b71'/>
+      <elf-symbol name='securityfs_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x146e8270'/>
+      <elf-symbol name='send_sig_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebd308d'/>
+      <elf-symbol name='seq_file_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd81bc51'/>
+      <elf-symbol name='seq_hex_dump' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57b7ebec'/>
+      <elf-symbol name='seq_lseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc294fa3f'/>
+      <elf-symbol name='seq_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc80c3f8b'/>
+      <elf-symbol name='seq_open_private' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1006c01'/>
+      <elf-symbol name='seq_printf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe834e62'/>
+      <elf-symbol name='seq_putc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1a49fe'/>
+      <elf-symbol name='seq_puts' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48c8327'/>
+      <elf-symbol name='seq_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11e762f4'/>
+      <elf-symbol name='seq_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x822d249a'/>
+      <elf-symbol name='seq_release_private' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9adf69b'/>
+      <elf-symbol name='seq_vprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe13e8e06'/>
+      <elf-symbol name='seq_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x140ea3db'/>
+      <elf-symbol name='serdev_device_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9edee4f'/>
+      <elf-symbol name='serdev_device_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71267da5'/>
+      <elf-symbol name='serdev_device_set_baudrate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x648a19cf'/>
+      <elf-symbol name='serdev_device_set_flow_control' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf802bbf'/>
+      <elf-symbol name='serdev_device_wait_until_sent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d5eb1bb'/>
+      <elf-symbol name='serdev_device_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56ac9437'/>
+      <elf-symbol name='serdev_device_write_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a6236e6'/>
+      <elf-symbol name='serial8250_get_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x297dc7e4'/>
+      <elf-symbol name='serial8250_register_8250_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xef670557'/>
+      <elf-symbol name='serial8250_resume_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7208c3a'/>
+      <elf-symbol name='serial8250_suspend_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc248d26'/>
+      <elf-symbol name='serial8250_unregister_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcefcd99a'/>
+      <elf-symbol name='serio_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe71698d'/>
+      <elf-symbol name='serio_interrupt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xced6ea98'/>
+      <elf-symbol name='serio_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed2f2835'/>
+      <elf-symbol name='serio_reconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ff1cd7e'/>
+      <elf-symbol name='serio_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x677bb14e'/>
+      <elf-symbol name='serio_unregister_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb20cb0a5'/>
+      <elf-symbol name='set_cpus_allowed_ptr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7bc51cea'/>
+      <elf-symbol name='set_disk_ro' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcae099c7'/>
+      <elf-symbol name='set_freezable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e61bb05'/>
+      <elf-symbol name='set_normalized_timespec64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x365acda7'/>
+      <elf-symbol name='set_page_dirty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62af407e'/>
+      <elf-symbol name='set_page_dirty_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3415ebda'/>
+      <elf-symbol name='set_user_nice' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x888b5ac3'/>
+      <elf-symbol name='setattr_copy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3d519c5'/>
+      <elf-symbol name='setup_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xadba1928'/>
+      <elf-symbol name='sg_alloc_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a2f6702'/>
+      <elf-symbol name='sg_alloc_table_from_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74d560c6'/>
+      <elf-symbol name='sg_copy_from_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x905695ab'/>
+      <elf-symbol name='sg_copy_to_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b8ab42'/>
+      <elf-symbol name='sg_free_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f5b4fe4'/>
+      <elf-symbol name='sg_init_one' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb320cc0e'/>
+      <elf-symbol name='sg_init_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf888ca21'/>
+      <elf-symbol name='sg_miter_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8161aae'/>
+      <elf-symbol name='sg_miter_skip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62e3137f'/>
+      <elf-symbol name='sg_miter_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x940b8c54'/>
+      <elf-symbol name='sg_miter_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xacbb4e06'/>
+      <elf-symbol name='sg_nents' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x461d16ca'/>
+      <elf-symbol name='sg_nents_for_len' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4230a8d7'/>
+      <elf-symbol name='sg_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87b8798d'/>
+      <elf-symbol name='sg_pcopy_from_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0fe8d51'/>
+      <elf-symbol name='sg_pcopy_to_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea778fab'/>
+      <elf-symbol name='sg_scsi_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf63d996'/>
+      <elf-symbol name='sg_zero_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d192c70'/>
+      <elf-symbol name='sget_fc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26c31e4a'/>
+      <elf-symbol name='sgl_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a13f54a'/>
+      <elf-symbol name='sgl_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x840342c6'/>
+      <elf-symbol name='shash_free_instance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe40bde8c'/>
+      <elf-symbol name='shash_register_instance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb4894ea'/>
+      <elf-symbol name='shmem_file_setup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43e10dd7'/>
+      <elf-symbol name='shmem_read_mapping_page_gfp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x59a02718'/>
+      <elf-symbol name='shmem_truncate_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5727fd25'/>
+      <elf-symbol name='si_mem_available' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x785a93b4'/>
+      <elf-symbol name='si_meminfo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40c7247c'/>
+      <elf-symbol name='sigprocmask' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a5fa363'/>
+      <elf-symbol name='simd_skcipher_create_compat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88638552'/>
+      <elf-symbol name='simd_skcipher_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xefe73979'/>
+      <elf-symbol name='simple_attr_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2457a0f2'/>
+      <elf-symbol name='simple_attr_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6601ebb'/>
+      <elf-symbol name='simple_attr_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf08061c2'/>
+      <elf-symbol name='simple_attr_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71b7ed2d'/>
+      <elf-symbol name='simple_fill_super' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81f9cd28'/>
+      <elf-symbol name='simple_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb408e16'/>
+      <elf-symbol name='simple_pin_fs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75f46f5f'/>
+      <elf-symbol name='simple_read_from_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x619cb7dd'/>
+      <elf-symbol name='simple_release_fs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4b1f74'/>
+      <elf-symbol name='simple_statfs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5dbb48e4'/>
+      <elf-symbol name='simple_strtol' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb742fd7'/>
+      <elf-symbol name='simple_strtoul' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20000329'/>
+      <elf-symbol name='simple_write_to_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb4f4766'/>
+      <elf-symbol name='single_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bd421b5'/>
+      <elf-symbol name='single_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeebcc0'/>
+      <elf-symbol name='sk_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x777d61bb'/>
+      <elf-symbol name='sk_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc928a9ff'/>
+      <elf-symbol name='sk_setup_caps' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x786e7f4f'/>
+      <elf-symbol name='skb_add_rx_frag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x797f2'/>
+      <elf-symbol name='skb_append_pagefrags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3fb8822'/>
+      <elf-symbol name='skb_checksum' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x399e17f3'/>
+      <elf-symbol name='skb_checksum_help' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6e9e666'/>
+      <elf-symbol name='skb_clone' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5fe9b4f'/>
+      <elf-symbol name='skb_coalesce_rx_frag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x166041a1'/>
+      <elf-symbol name='skb_copy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40df3331'/>
+      <elf-symbol name='skb_copy_bits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e67f13c'/>
+      <elf-symbol name='skb_copy_datagram_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4262d27a'/>
+      <elf-symbol name='skb_copy_expand' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc2aba9d'/>
+      <elf-symbol name='skb_cow_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6bae65a'/>
+      <elf-symbol name='skb_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x946ecd62'/>
+      <elf-symbol name='skb_ensure_writable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfb1aa7f'/>
+      <elf-symbol name='skb_free_datagram' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xefa89302'/>
+      <elf-symbol name='skb_page_frag_refill' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30c0d3a2'/>
+      <elf-symbol name='skb_partial_csum_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0318265'/>
+      <elf-symbol name='skb_pull' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x97ff1568'/>
+      <elf-symbol name='skb_pull_rcsum' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcddb8228'/>
+      <elf-symbol name='skb_push' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x34712c00'/>
+      <elf-symbol name='skb_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7bd0e63'/>
+      <elf-symbol name='skb_queue_head' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2dc8df8b'/>
+      <elf-symbol name='skb_queue_purge' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82f87a71'/>
+      <elf-symbol name='skb_queue_tail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8eb59f7'/>
+      <elf-symbol name='skb_realloc_headroom' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6967b90'/>
+      <elf-symbol name='skb_recv_datagram' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11ef8305'/>
+      <elf-symbol name='skb_scrub_packet' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe7d2689d'/>
+      <elf-symbol name='skb_set_owner_w' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d75cb47'/>
+      <elf-symbol name='skb_store_bits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5537b2ed'/>
+      <elf-symbol name='skb_to_sgvec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a83b973'/>
+      <elf-symbol name='skb_to_sgvec_nomark' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ffddd55'/>
+      <elf-symbol name='skb_trim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1fe237c8'/>
+      <elf-symbol name='skb_tstamp_tx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20faa26a'/>
+      <elf-symbol name='skb_unlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfabf87d3'/>
+      <elf-symbol name='skcipher_walk_aead_decrypt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x778f97b4'/>
+      <elf-symbol name='skcipher_walk_aead_encrypt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5db6cfbe'/>
+      <elf-symbol name='skcipher_walk_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a4f27af'/>
+      <elf-symbol name='skcipher_walk_virt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f53505c'/>
+      <elf-symbol name='skip_spaces' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0a91bab'/>
+      <elf-symbol name='slhc_compress' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c8f2de'/>
+      <elf-symbol name='slhc_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5bc9a53'/>
+      <elf-symbol name='slhc_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x215a8ec8'/>
+      <elf-symbol name='slhc_remember' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf102033e'/>
+      <elf-symbol name='slhc_toss' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6405dcd3'/>
+      <elf-symbol name='slhc_uncompress' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85fbc931'/>
+      <elf-symbol name='smp_call_function' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0eae826'/>
+      <elf-symbol name='smp_call_function_single' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6228c21f'/>
+      <elf-symbol name='smpboot_register_percpu_thread' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc879c57d'/>
+      <elf-symbol name='snd_card_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8811b1d5'/>
+      <elf-symbol name='snd_card_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13566994'/>
+      <elf-symbol name='snd_card_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x577171c3'/>
+      <elf-symbol name='snd_card_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf9f1fb9'/>
+      <elf-symbol name='snd_card_rw_proc_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35f8a310'/>
+      <elf-symbol name='snd_component_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17959ca6'/>
+      <elf-symbol name='snd_compr_stop_error' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc3520fc'/>
+      <elf-symbol name='snd_ctl_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3155174'/>
+      <elf-symbol name='snd_ctl_add_vmaster_hook' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6cee6f97'/>
+      <elf-symbol name='snd_ctl_apply_vmaster_slaves' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfb98ab6'/>
+      <elf-symbol name='snd_ctl_boolean_mono_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0f5e54c'/>
+      <elf-symbol name='snd_ctl_boolean_stereo_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3dd536e8'/>
+      <elf-symbol name='snd_ctl_enum_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81b69e41'/>
+      <elf-symbol name='snd_ctl_find_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc75dc07a'/>
+      <elf-symbol name='snd_ctl_make_virtual_master' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4add9b7'/>
+      <elf-symbol name='snd_ctl_new1' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56b3fe99'/>
+      <elf-symbol name='snd_ctl_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe216f4fc'/>
+      <elf-symbol name='snd_ctl_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32deb714'/>
+      <elf-symbol name='snd_ctl_remove_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d247e0f'/>
+      <elf-symbol name='snd_ctl_sync_vmaster' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32ffade5'/>
+      <elf-symbol name='snd_device_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9978978'/>
+      <elf-symbol name='snd_device_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x463550ec'/>
+      <elf-symbol name='snd_device_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76594655'/>
+      <elf-symbol name='snd_dma_alloc_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f4a1d7c'/>
+      <elf-symbol name='snd_dma_free_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x747e0a97'/>
+      <elf-symbol name='snd_dmaengine_pcm_close_release_chan' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64c58adf'/>
+      <elf-symbol name='snd_dmaengine_pcm_get_chan' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66682d34'/>
+      <elf-symbol name='snd_dmaengine_pcm_open_request_chan' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d18fda9'/>
+      <elf-symbol name='snd_dmaengine_pcm_pointer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9a60da'/>
+      <elf-symbol name='snd_dmaengine_pcm_prepare_slave_config' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2fcb18fa'/>
+      <elf-symbol name='snd_dmaengine_pcm_trigger' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7fa360c9'/>
+      <elf-symbol name='snd_hwdep_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf0ce0fe'/>
+      <elf-symbol name='snd_hwparams_to_dma_slave_config' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4c69ea7'/>
+      <elf-symbol name='snd_info_create_card_entry' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd7c366b8'/>
+      <elf-symbol name='snd_info_create_module_entry' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd6991d6'/>
+      <elf-symbol name='snd_info_free_entry' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x549e6618'/>
+      <elf-symbol name='snd_info_get_line' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24a94b26'/>
+      <elf-symbol name='snd_info_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x21ffb7bd'/>
+      <elf-symbol name='snd_interval_refine' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4cda566'/>
+      <elf-symbol name='snd_jack_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60ab0850'/>
+      <elf-symbol name='snd_jack_report' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e338396'/>
+      <elf-symbol name='snd_jack_set_key' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60a0d7eb'/>
+      <elf-symbol name='snd_pci_quirk_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6dcef31'/>
+      <elf-symbol name='snd_pcm_add_chmap_ctls' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b96936c'/>
+      <elf-symbol name='snd_pcm_create_iec958_consumer_hw_params' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11eba48e'/>
+      <elf-symbol name='snd_pcm_format_physical_width' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68a24153'/>
+      <elf-symbol name='snd_pcm_format_width' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe56a9336'/>
+      <elf-symbol name='snd_pcm_hw_constraint_eld' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71ef58c8'/>
+      <elf-symbol name='snd_pcm_hw_constraint_integer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96edf1d3'/>
+      <elf-symbol name='snd_pcm_hw_constraint_list' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xefb5faac'/>
+      <elf-symbol name='snd_pcm_hw_constraint_mask64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39ddb550'/>
+      <elf-symbol name='snd_pcm_hw_constraint_minmax' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc404b1ee'/>
+      <elf-symbol name='snd_pcm_hw_constraint_msbits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda2f1e84'/>
+      <elf-symbol name='snd_pcm_hw_constraint_step' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0cf28cb'/>
+      <elf-symbol name='snd_pcm_hw_rule_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7da12747'/>
+      <elf-symbol name='snd_pcm_lib_default_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b937004'/>
+      <elf-symbol name='snd_pcm_lib_free_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaecf9b56'/>
+      <elf-symbol name='snd_pcm_lib_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf411e06'/>
+      <elf-symbol name='snd_pcm_lib_malloc_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46829fcc'/>
+      <elf-symbol name='snd_pcm_lib_preallocate_free_for_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f842597'/>
+      <elf-symbol name='snd_pcm_lib_preallocate_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1123b38'/>
+      <elf-symbol name='snd_pcm_lib_preallocate_pages_for_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62a459c3'/>
+      <elf-symbol name='snd_pcm_limit_hw_rates' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62e38d4b'/>
+      <elf-symbol name='snd_pcm_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9fb55b'/>
+      <elf-symbol name='snd_pcm_period_elapsed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x931feedc'/>
+      <elf-symbol name='snd_pcm_rate_bit_to_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff6104d0'/>
+      <elf-symbol name='snd_pcm_rate_range_to_bits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d864069'/>
+      <elf-symbol name='snd_pcm_rate_to_rate_bit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9638db4'/>
+      <elf-symbol name='snd_pcm_set_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c071750'/>
+      <elf-symbol name='snd_pcm_set_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x657275d7'/>
+      <elf-symbol name='snd_pcm_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x830d49ec'/>
+      <elf-symbol name='snd_soc_add_card_controls' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x183374f8'/>
+      <elf-symbol name='snd_soc_add_component_controls' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x647ff0de'/>
+      <elf-symbol name='snd_soc_bytes_info_ext' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca1c92d5'/>
+      <elf-symbol name='snd_soc_bytes_tlv_callback' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf89d1a0'/>
+      <elf-symbol name='snd_soc_card_get_kcontrol' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26c243a2'/>
+      <elf-symbol name='snd_soc_card_jack_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3b8be02'/>
+      <elf-symbol name='snd_soc_component_async_complete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b8e184c'/>
+      <elf-symbol name='snd_soc_component_disable_pin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0420385'/>
+      <elf-symbol name='snd_soc_component_exit_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf814bb69'/>
+      <elf-symbol name='snd_soc_component_force_enable_pin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf13d8d'/>
+      <elf-symbol name='snd_soc_component_init_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47fabe5b'/>
+      <elf-symbol name='snd_soc_component_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c3a7d21'/>
+      <elf-symbol name='snd_soc_component_read32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8bf4ea85'/>
+      <elf-symbol name='snd_soc_component_set_pll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe2baeff7'/>
+      <elf-symbol name='snd_soc_component_set_sysclk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3042b4e'/>
+      <elf-symbol name='snd_soc_component_update_bits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5fc0c1c2'/>
+      <elf-symbol name='snd_soc_component_update_bits_async' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb25cb1cc'/>
+      <elf-symbol name='snd_soc_component_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe77c5262'/>
+      <elf-symbol name='snd_soc_dai_get_channel_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdda1c2dc'/>
+      <elf-symbol name='snd_soc_dai_set_bclk_ratio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c98cb98'/>
+      <elf-symbol name='snd_soc_dai_set_channel_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a1870ea'/>
+      <elf-symbol name='snd_soc_dai_set_clkdiv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8d13e65'/>
+      <elf-symbol name='snd_soc_dai_set_fmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70bad1d6'/>
+      <elf-symbol name='snd_soc_dai_set_pll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc057d63'/>
+      <elf-symbol name='snd_soc_dai_set_sysclk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40786c03'/>
+      <elf-symbol name='snd_soc_dai_set_tdm_slot' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65ddb2b8'/>
+      <elf-symbol name='snd_soc_dapm_add_routes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65e96231'/>
+      <elf-symbol name='snd_soc_dapm_disable_pin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x124f6c79'/>
+      <elf-symbol name='snd_soc_dapm_enable_pin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8d5e97e'/>
+      <elf-symbol name='snd_soc_dapm_force_enable_pin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35bc9a65'/>
+      <elf-symbol name='snd_soc_dapm_get_enum_double' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb4f18d7b'/>
+      <elf-symbol name='snd_soc_dapm_get_pin_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e991da8'/>
+      <elf-symbol name='snd_soc_dapm_get_pin_switch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e6854ff'/>
+      <elf-symbol name='snd_soc_dapm_get_volsw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe79d4d38'/>
+      <elf-symbol name='snd_soc_dapm_ignore_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee78f020'/>
+      <elf-symbol name='snd_soc_dapm_info_pin_switch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x903dbcff'/>
+      <elf-symbol name='snd_soc_dapm_kcontrol_dapm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebeefa92'/>
+      <elf-symbol name='snd_soc_dapm_kcontrol_widget' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ed1a5b7'/>
+      <elf-symbol name='snd_soc_dapm_mixer_update_power' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc98216ba'/>
+      <elf-symbol name='snd_soc_dapm_mux_update_power' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x287f516f'/>
+      <elf-symbol name='snd_soc_dapm_new_control' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ae663ef'/>
+      <elf-symbol name='snd_soc_dapm_new_controls' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a6b2136'/>
+      <elf-symbol name='snd_soc_dapm_new_widgets' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6de3ec58'/>
+      <elf-symbol name='snd_soc_dapm_put_enum_double' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99d1be31'/>
+      <elf-symbol name='snd_soc_dapm_put_pin_switch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6cb49300'/>
+      <elf-symbol name='snd_soc_dapm_put_volsw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf59b66a5'/>
+      <elf-symbol name='snd_soc_dapm_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19289317'/>
+      <elf-symbol name='snd_soc_dapm_weak_routes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x665f9da5'/>
+      <elf-symbol name='snd_soc_find_dai' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee425ff2'/>
+      <elf-symbol name='snd_soc_get_enum_double' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x220b6101'/>
+      <elf-symbol name='snd_soc_get_pcm_runtime' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6962591c'/>
+      <elf-symbol name='snd_soc_get_volsw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x561842fa'/>
+      <elf-symbol name='snd_soc_get_volsw_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae35bc89'/>
+      <elf-symbol name='snd_soc_get_volsw_sx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53eecf3f'/>
+      <elf-symbol name='snd_soc_get_xr_sx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b613465'/>
+      <elf-symbol name='snd_soc_info_enum_double' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58fe9ea1'/>
+      <elf-symbol name='snd_soc_info_multi_ext' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf3129b4e'/>
+      <elf-symbol name='snd_soc_info_volsw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40d137e1'/>
+      <elf-symbol name='snd_soc_info_volsw_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb55fe5ff'/>
+      <elf-symbol name='snd_soc_info_volsw_sx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ae46625'/>
+      <elf-symbol name='snd_soc_info_xr_sx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeea13b14'/>
+      <elf-symbol name='snd_soc_jack_add_gpios' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81c729c7'/>
+      <elf-symbol name='snd_soc_jack_report' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1176926f'/>
+      <elf-symbol name='snd_soc_lookup_component' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf3cd4bf4'/>
+      <elf-symbol name='snd_soc_new_compress' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ea3d219'/>
+      <elf-symbol name='snd_soc_of_get_dai_link_codecs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56ab1e07'/>
+      <elf-symbol name='snd_soc_of_get_dai_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbdeeebca'/>
+      <elf-symbol name='snd_soc_of_parse_audio_routing' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9626aa28'/>
+      <elf-symbol name='snd_soc_of_parse_audio_simple_widgets' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95d910cc'/>
+      <elf-symbol name='snd_soc_of_parse_card_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x499dac07'/>
+      <elf-symbol name='snd_soc_of_parse_daifmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b4ec546'/>
+      <elf-symbol name='snd_soc_of_parse_node_prefix' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96e3a981'/>
+      <elf-symbol name='snd_soc_of_parse_tdm_slot' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0bfe1b9'/>
+      <elf-symbol name='snd_soc_of_put_dai_link_codecs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x917f2387'/>
+      <elf-symbol name='snd_soc_params_to_bclk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb711ae7'/>
+      <elf-symbol name='snd_soc_put_enum_double' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e690c32'/>
+      <elf-symbol name='snd_soc_put_volsw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49254e8'/>
+      <elf-symbol name='snd_soc_put_volsw_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe257d1ba'/>
+      <elf-symbol name='snd_soc_put_volsw_sx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5db9679a'/>
+      <elf-symbol name='snd_soc_put_xr_sx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9eb2277'/>
+      <elf-symbol name='snd_soc_register_card' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ede79e2'/>
+      <elf-symbol name='snd_soc_register_component' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1578a70'/>
+      <elf-symbol name='snd_soc_rtdcom_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81032e79'/>
+      <elf-symbol name='snd_soc_set_runtime_hwparams' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd30344d'/>
+      <elf-symbol name='snd_soc_tplg_component_load' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6aa71d3'/>
+      <elf-symbol name='snd_soc_tplg_component_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69263755'/>
+      <elf-symbol name='snd_soc_tplg_widget_bind_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fae72f1'/>
+      <elf-symbol name='snd_soc_unregister_card' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf8f9e8e'/>
+      <elf-symbol name='snd_soc_unregister_component' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3db5a7e5'/>
+      <elf-symbol name='snd_timer_interrupt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa21af368'/>
+      <elf-symbol name='snd_usb_enable_audio_stream' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b730cf7'/>
+      <elf-symbol name='snprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x656e4a6e'/>
+      <elf-symbol name='soc_device_match' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51642278'/>
+      <elf-symbol name='soc_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3482cd0c'/>
+      <elf-symbol name='soc_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19c20269'/>
+      <elf-symbol name='sock_alloc_send_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff82312a'/>
+      <elf-symbol name='sock_create_kern' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ba1c101'/>
+      <elf-symbol name='sock_diag_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc42fe41'/>
+      <elf-symbol name='sock_diag_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c1161ea'/>
+      <elf-symbol name='sock_diag_save_cookie' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x876e688c'/>
+      <elf-symbol name='sock_diag_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa36ac914'/>
+      <elf-symbol name='sock_efree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb5756d9'/>
+      <elf-symbol name='sock_gettstamp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a76d3c0'/>
+      <elf-symbol name='sock_i_ino' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb87b156e'/>
+      <elf-symbol name='sock_init_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff0400c2'/>
+      <elf-symbol name='sock_no_accept' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a72ea33'/>
+      <elf-symbol name='sock_no_bind' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6ad6ce5'/>
+      <elf-symbol name='sock_no_connect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x759c99ab'/>
+      <elf-symbol name='sock_no_getname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d942061'/>
+      <elf-symbol name='sock_no_getsockopt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfaa8988c'/>
+      <elf-symbol name='sock_no_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe7eb9661'/>
+      <elf-symbol name='sock_no_listen' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a640428'/>
+      <elf-symbol name='sock_no_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67dab387'/>
+      <elf-symbol name='sock_no_recvmsg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x298b0586'/>
+      <elf-symbol name='sock_no_sendmsg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x486840f9'/>
+      <elf-symbol name='sock_no_sendpage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd2cf0c72'/>
+      <elf-symbol name='sock_no_setsockopt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d6bec52'/>
+      <elf-symbol name='sock_no_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x893920d'/>
+      <elf-symbol name='sock_no_socketpair' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd650b953'/>
+      <elf-symbol name='sock_queue_rcv_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x669ea798'/>
+      <elf-symbol name='sock_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57222935'/>
+      <elf-symbol name='sock_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe048638e'/>
+      <elf-symbol name='sock_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62737e1d'/>
+      <elf-symbol name='sock_wmalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab067069'/>
+      <elf-symbol name='sort' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3a53f4c'/>
+      <elf-symbol name='spi_bus_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2108e42'/>
+      <elf-symbol name='spi_bus_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ba1237d'/>
+      <elf-symbol name='spi_busnum_to_master' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x856396ae'/>
+      <elf-symbol name='spi_controller_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88e1e6a3'/>
+      <elf-symbol name='spi_controller_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x172e24b0'/>
+      <elf-symbol name='spi_finalize_current_message' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd8a0202'/>
+      <elf-symbol name='spi_finalize_current_transfer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x667f9565'/>
+      <elf-symbol name='spi_get_next_queued_message' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf92573c'/>
+      <elf-symbol name='spi_register_controller' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x77db1462'/>
+      <elf-symbol name='spi_setup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9752da24'/>
+      <elf-symbol name='spi_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4deb0897'/>
+      <elf-symbol name='spi_sync_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x869860b6'/>
+      <elf-symbol name='spi_unregister_controller' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x578e15d2'/>
+      <elf-symbol name='spi_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb0f6f2a'/>
+      <elf-symbol name='split_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a7dd286'/>
+      <elf-symbol name='spmi_controller_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6cbd5ab7'/>
+      <elf-symbol name='spmi_controller_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf87141df'/>
+      <elf-symbol name='spmi_controller_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x113ce119'/>
+      <elf-symbol name='spmi_ext_register_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7e19708'/>
+      <elf-symbol name='spmi_ext_register_readl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff6ba617'/>
+      <elf-symbol name='spmi_ext_register_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5a42904'/>
+      <elf-symbol name='spmi_ext_register_writel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d72c164'/>
+      <elf-symbol name='spmi_register_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x686bc402'/>
+      <elf-symbol name='spmi_register_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x795549f9'/>
+      <elf-symbol name='spmi_register_zero_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x325829df'/>
+      <elf-symbol name='sprint_symbol' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x661601de'/>
+      <elf-symbol name='sprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c3ff9fd'/>
+      <elf-symbol name='srcu_init_notifier_head' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5e17e48'/>
+      <elf-symbol name='srcu_notifier_call_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x638c7b16'/>
+      <elf-symbol name='srcu_notifier_chain_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d41972d'/>
+      <elf-symbol name='srcu_notifier_chain_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4294849c'/>
+      <elf-symbol name='sscanf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbcab6ee6'/>
+      <elf-symbol name='stack_trace_print' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa45c7b90'/>
+      <elf-symbol name='start_tty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x402a9829'/>
+      <elf-symbol name='static_key_slow_dec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f4880df'/>
+      <elf-symbol name='static_key_slow_inc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e92f7c4'/>
+      <elf-symbol name='stop_tty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b58dfb2'/>
+      <elf-symbol name='strcasecmp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaafdc258'/>
+      <elf-symbol name='strcat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61651be'/>
+      <elf-symbol name='strchr' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0x349cba85'/>
+      <elf-symbol name='strchrnul' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xceab0311'/>
+      <elf-symbol name='strcmp' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0xe2d5255a'/>
+      <elf-symbol name='strcpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe914e41e'/>
+      <elf-symbol name='strcspn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ac5d3cb'/>
+      <elf-symbol name='stream_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9891751'/>
+      <elf-symbol name='strim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x77bc13a0'/>
+      <elf-symbol name='string_get_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48a91171'/>
+      <elf-symbol name='string_unescape' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64bbc288'/>
+      <elf-symbol name='strlcat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9c0b663'/>
+      <elf-symbol name='strlcpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5792f848'/>
+      <elf-symbol name='strlen' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0x98cf60b3'/>
+      <elf-symbol name='strncasecmp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96b29254'/>
+      <elf-symbol name='strncat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e2b40d2'/>
+      <elf-symbol name='strnchr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4841bdee'/>
+      <elf-symbol name='strncmp' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0x5a921311'/>
+      <elf-symbol name='strncpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9166fada'/>
+      <elf-symbol name='strncpy_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24428be5'/>
+      <elf-symbol name='strnlen' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0xa916b694'/>
+      <elf-symbol name='strnstr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc310b981'/>
+      <elf-symbol name='strpbrk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a1dfd65'/>
+      <elf-symbol name='strrchr' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0x9f984513'/>
+      <elf-symbol name='strreplace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7410aba2'/>
+      <elf-symbol name='strscpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd64e639'/>
+      <elf-symbol name='strsep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85df9b6c'/>
+      <elf-symbol name='strstr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e6d26a8'/>
+      <elf-symbol name='submit_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f762b54'/>
+      <elf-symbol name='submit_bio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea1fe785'/>
+      <elf-symbol name='submit_bio_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf10c8c98'/>
+      <elf-symbol name='subsys_system_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1dc6cca5'/>
+      <elf-symbol name='swiotlb_max_segment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b6b0329'/>
+      <elf-symbol name='sync_blockdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a8da514'/>
+      <elf-symbol name='sync_dirty_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d21b402'/>
+      <elf-symbol name='sync_file_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4100212a'/>
+      <elf-symbol name='sync_file_get_fence' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4dca08ee'/>
+      <elf-symbol name='sync_filesystem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94ab8f92'/>
+      <elf-symbol name='sync_mapping_buffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8613019b'/>
+      <elf-symbol name='synchronize_hardirq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa309cf'/>
+      <elf-symbol name='synchronize_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe523ad75'/>
+      <elf-symbol name='synchronize_net' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x609f1c7e'/>
+      <elf-symbol name='synchronize_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6091797f'/>
+      <elf-symbol name='synchronize_srcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf5865f0'/>
+      <elf-symbol name='syscon_node_to_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8481f8'/>
+      <elf-symbol name='syscon_regmap_lookup_by_phandle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29785518'/>
+      <elf-symbol name='syscon_regmap_lookup_by_phandle_args' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc26f0fc'/>
+      <elf-symbol name='sysfs_add_file_to_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb37d150d'/>
+      <elf-symbol name='sysfs_create_bin_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1c53cb6'/>
+      <elf-symbol name='sysfs_create_file_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeae18cc9'/>
+      <elf-symbol name='sysfs_create_files' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x281f67b0'/>
+      <elf-symbol name='sysfs_create_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdfafcd7f'/>
+      <elf-symbol name='sysfs_create_groups' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe404601f'/>
+      <elf-symbol name='sysfs_create_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfeb2334f'/>
+      <elf-symbol name='sysfs_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3345a27c'/>
+      <elf-symbol name='sysfs_remove_bin_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47029eec'/>
+      <elf-symbol name='sysfs_remove_file_from_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf96f147e'/>
+      <elf-symbol name='sysfs_remove_file_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd430496'/>
+      <elf-symbol name='sysfs_remove_files' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa31718f8'/>
+      <elf-symbol name='sysfs_remove_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0c76560'/>
+      <elf-symbol name='sysfs_remove_groups' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6c95bf6'/>
+      <elf-symbol name='sysfs_remove_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb357f876'/>
+      <elf-symbol name='sysfs_streq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x222e7ce2'/>
+      <elf-symbol name='tasklet_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9545af6d'/>
+      <elf-symbol name='tasklet_kill' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82072614'/>
+      <elf-symbol name='tcf_action_exec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5db2f2c5'/>
+      <elf-symbol name='tcf_exts_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbce9a77a'/>
+      <elf-symbol name='tcf_exts_dump' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1b3eebf'/>
+      <elf-symbol name='tcf_exts_dump_stats' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5fd159b7'/>
+      <elf-symbol name='tcf_exts_validate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1079149e'/>
+      <elf-symbol name='tcf_queue_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29063663'/>
+      <elf-symbol name='tcpm_cc_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc37b9769'/>
+      <elf-symbol name='tcpm_pd_hard_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e0bd753'/>
+      <elf-symbol name='tcpm_pd_receive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb655342c'/>
+      <elf-symbol name='tcpm_pd_transmit_complete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b84657b'/>
+      <elf-symbol name='tcpm_register_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x941ea14a'/>
+      <elf-symbol name='tcpm_tcpc_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea220941'/>
+      <elf-symbol name='tcpm_unregister_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76eeda4b'/>
+      <elf-symbol name='tcpm_vbus_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xceb50012'/>
+      <elf-symbol name='thermal_cdev_update' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb4c74ffe'/>
+      <elf-symbol name='thermal_cooling_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99497ad3'/>
+      <elf-symbol name='thermal_cooling_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c46dba5'/>
+      <elf-symbol name='thermal_of_cooling_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xede90f9b'/>
+      <elf-symbol name='thermal_zone_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11380321'/>
+      <elf-symbol name='thermal_zone_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9cf1d20'/>
+      <elf-symbol name='thermal_zone_device_update' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74a31a6b'/>
+      <elf-symbol name='thermal_zone_get_temp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd41030a'/>
+      <elf-symbol name='thermal_zone_get_zone_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb70046b2'/>
+      <elf-symbol name='thermal_zone_of_sensor_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5fcd697'/>
+      <elf-symbol name='thermal_zone_of_sensor_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd741281c'/>
+      <elf-symbol name='time64_to_tm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfff5afc'/>
+      <elf-symbol name='timecounter_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x862258db'/>
+      <elf-symbol name='timecounter_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f9e763b'/>
+      <elf-symbol name='timer_of_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff7ddd32'/>
+      <elf-symbol name='timespec64_to_jiffies' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf93b9d8'/>
+      <elf-symbol name='touch_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d832edb'/>
+      <elf-symbol name='touch_softlockup_watchdog' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fcb87a1'/>
+      <elf-symbol name='trace_define_field' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe672bfba'/>
+      <elf-symbol name='trace_event_buffer_commit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67e15184'/>
+      <elf-symbol name='trace_event_buffer_reserve' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x524d8aec'/>
+      <elf-symbol name='trace_event_ignore_this_pid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd918aaf9'/>
+      <elf-symbol name='trace_event_raw_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x730ce0ab'/>
+      <elf-symbol name='trace_event_reg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46a41e30'/>
+      <elf-symbol name='trace_handle_return' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7381287f'/>
+      <elf-symbol name='trace_output_call' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7bcd975f'/>
+      <elf-symbol name='trace_print_array_seq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3bc72ad'/>
+      <elf-symbol name='trace_print_hex_seq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe02ba436'/>
+      <elf-symbol name='trace_raw_output_prep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x447f2f1c'/>
+      <elf-symbol name='trace_seq_printf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x525d0aa3'/>
+      <elf-symbol name='trace_seq_putc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b5f4377'/>
+      <elf-symbol name='trace_set_clr_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd217e9e6'/>
+      <elf-symbol name='tracing_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7944e0fc'/>
+      <elf-symbol name='truncate_inode_pages_final' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x132e857d'/>
+      <elf-symbol name='truncate_pagecache' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9468331a'/>
+      <elf-symbol name='try_module_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x154827db'/>
+      <elf-symbol name='try_wait_for_completion' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4005f38c'/>
+      <elf-symbol name='ttm_bo_add_to_lru' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b7cf6f'/>
+      <elf-symbol name='ttm_bo_del_sub_from_lru' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3cc6067e'/>
+      <elf-symbol name='ttm_bo_device_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49d87a64'/>
+      <elf-symbol name='ttm_bo_device_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5c506f1'/>
+      <elf-symbol name='ttm_bo_dma_acc_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa459d92a'/>
+      <elf-symbol name='ttm_bo_eviction_valuable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7386346e'/>
+      <elf-symbol name='ttm_bo_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd229c6a6'/>
+      <elf-symbol name='ttm_bo_init_mm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e261a88'/>
+      <elf-symbol name='ttm_bo_kmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe97845bb'/>
+      <elf-symbol name='ttm_bo_kunmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2d67ab7'/>
+      <elf-symbol name='ttm_bo_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5687fe98'/>
+      <elf-symbol name='ttm_bo_move_to_lru_tail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb22d025d'/>
+      <elf-symbol name='ttm_bo_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7bc6dfc8'/>
+      <elf-symbol name='ttm_bo_validate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9df684'/>
+      <elf-symbol name='ttm_bo_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x799336a1'/>
+      <elf-symbol name='ttm_dma_tt_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11205a53'/>
+      <elf-symbol name='ttm_dma_tt_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fc527ee'/>
+      <elf-symbol name='ttm_eu_backoff_reservation' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9fe0644'/>
+      <elf-symbol name='ttm_eu_fence_buffer_objects' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72b0f2c1'/>
+      <elf-symbol name='ttm_eu_reserve_buffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0b7341e'/>
+      <elf-symbol name='ttm_tt_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1301b0aa'/>
+      <elf-symbol name='tty_flip_buffer_push' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7a5dcab'/>
+      <elf-symbol name='tty_hangup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c832cbb'/>
+      <elf-symbol name='tty_insert_flip_string_fixed_flag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa698fdab'/>
+      <elf-symbol name='tty_kref_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3186d6b'/>
+      <elf-symbol name='tty_ldisc_deref' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c8300c8'/>
+      <elf-symbol name='tty_ldisc_ref' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x631fab50'/>
+      <elf-symbol name='tty_mode_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44ffe0ed'/>
+      <elf-symbol name='tty_port_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc88f66fa'/>
+      <elf-symbol name='tty_port_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5259b409'/>
+      <elf-symbol name='tty_port_hangup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f2f4ee6'/>
+      <elf-symbol name='tty_port_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x889d3843'/>
+      <elf-symbol name='tty_port_link_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6756b115'/>
+      <elf-symbol name='tty_port_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe6c8801'/>
+      <elf-symbol name='tty_port_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b3d9f29'/>
+      <elf-symbol name='tty_port_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbdf5005d'/>
+      <elf-symbol name='tty_port_tty_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f370faa'/>
+      <elf-symbol name='tty_port_tty_hangup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb0e6912'/>
+      <elf-symbol name='tty_port_tty_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35b82138'/>
+      <elf-symbol name='tty_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7fd1830'/>
+      <elf-symbol name='tty_register_ldisc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebde00e7'/>
+      <elf-symbol name='tty_schedule_flip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c2643f5'/>
+      <elf-symbol name='tty_set_operations' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9744fdeb'/>
+      <elf-symbol name='tty_standard_install' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1a3a95d'/>
+      <elf-symbol name='tty_termios_baud_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x409873e3'/>
+      <elf-symbol name='tty_termios_copy_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30e74134'/>
+      <elf-symbol name='tty_termios_encode_baud_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5641485b'/>
+      <elf-symbol name='tty_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d8ae767'/>
+      <elf-symbol name='tty_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf87799a5'/>
+      <elf-symbol name='tty_unregister_ldisc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa120d33c'/>
+      <elf-symbol name='tty_unthrottle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x983f16df'/>
+      <elf-symbol name='tty_vhangup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe00cdbfc'/>
+      <elf-symbol name='tty_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5b304c'/>
+      <elf-symbol name='typec_altmode_attention' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x522cf7d2'/>
+      <elf-symbol name='typec_altmode_get_partner' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88388a53'/>
+      <elf-symbol name='typec_altmode_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaddaf616'/>
+      <elf-symbol name='typec_altmode_update_active' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x207acf26'/>
+      <elf-symbol name='typec_altmode_vdm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c98b1b4'/>
+      <elf-symbol name='typec_get_drvdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x734a9c4d'/>
+      <elf-symbol name='typec_partner_register_altmode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a5e5032'/>
+      <elf-symbol name='typec_port_register_altmode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x508bb862'/>
+      <elf-symbol name='typec_register_partner' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a00a11c'/>
+      <elf-symbol name='typec_register_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79d8967d'/>
+      <elf-symbol name='typec_set_data_role' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f2c6469'/>
+      <elf-symbol name='typec_set_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54c93810'/>
+      <elf-symbol name='typec_set_orientation' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x36852716'/>
+      <elf-symbol name='typec_set_pwr_opmode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33fd62de'/>
+      <elf-symbol name='typec_set_pwr_role' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e2998e7'/>
+      <elf-symbol name='typec_set_vconn_role' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ac3a632'/>
+      <elf-symbol name='typec_unregister_altmode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7402c28'/>
+      <elf-symbol name='typec_unregister_partner' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9cad8da6'/>
+      <elf-symbol name='typec_unregister_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda0a9c4c'/>
+      <elf-symbol name='uart_add_one_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xadeb8457'/>
+      <elf-symbol name='uart_console_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9889cc96'/>
+      <elf-symbol name='uart_console_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7bc7e87'/>
+      <elf-symbol name='uart_get_baud_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbef74fe0'/>
+      <elf-symbol name='uart_get_divisor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5171a2a2'/>
+      <elf-symbol name='uart_handle_cts_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x783e7c19'/>
+      <elf-symbol name='uart_handle_dcd_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15fb58b4'/>
+      <elf-symbol name='uart_insert_char' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d64a9ce'/>
+      <elf-symbol name='uart_parse_options' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f72a987'/>
+      <elf-symbol name='uart_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe57f10bc'/>
+      <elf-symbol name='uart_remove_one_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x513d8584'/>
+      <elf-symbol name='uart_resume_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d9198b8'/>
+      <elf-symbol name='uart_set_options' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x80cad2f7'/>
+      <elf-symbol name='uart_suspend_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca4f807f'/>
+      <elf-symbol name='uart_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x857ab358'/>
+      <elf-symbol name='uart_update_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c34d1c3'/>
+      <elf-symbol name='uart_write_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x839facd0'/>
+      <elf-symbol name='ufshcd_dme_get_attr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a2c6736'/>
+      <elf-symbol name='ufshcd_dme_set_attr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe645ef4d'/>
+      <elf-symbol name='ufshcd_dump_regs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ee7171e'/>
+      <elf-symbol name='ufshcd_get_local_unipro_ver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ad7b0a3'/>
+      <elf-symbol name='ufshcd_get_pwr_dev_param' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff85cd6b'/>
+      <elf-symbol name='ufshcd_pltfrm_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x90a18f9a'/>
+      <elf-symbol name='ufshcd_pltfrm_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8102bdd'/>
+      <elf-symbol name='ufshcd_pltfrm_runtime_idle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe7ee8335'/>
+      <elf-symbol name='ufshcd_pltfrm_runtime_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6944e4b'/>
+      <elf-symbol name='ufshcd_pltfrm_runtime_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9030efa7'/>
+      <elf-symbol name='ufshcd_pltfrm_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6b33e6d'/>
+      <elf-symbol name='ufshcd_pltfrm_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89025db3'/>
+      <elf-symbol name='ufshcd_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86718982'/>
+      <elf-symbol name='ufshcd_uic_hibern8_enter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8cc1c99'/>
+      <elf-symbol name='ufshcd_uic_hibern8_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x388f0a84'/>
+      <elf-symbol name='uio_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22b94061'/>
+      <elf-symbol name='unload_nls' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b245d23'/>
+      <elf-symbol name='unlock_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6c95eb3'/>
+      <elf-symbol name='unlock_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc81be83a'/>
+      <elf-symbol name='unmap_mapping_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xefb8a9a3'/>
+      <elf-symbol name='unregister_binfmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78b01ed'/>
+      <elf-symbol name='unregister_blkdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5a459dc'/>
+      <elf-symbol name='unregister_chrdev_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6091b333'/>
+      <elf-symbol name='unregister_console' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fac71b8'/>
+      <elf-symbol name='unregister_gadget_item' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc2fe7db0'/>
+      <elf-symbol name='unregister_inet6addr_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2fe252cc'/>
+      <elf-symbol name='unregister_inetaddr_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe029963'/>
+      <elf-symbol name='unregister_key_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdda4756b'/>
+      <elf-symbol name='unregister_netdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5658efc'/>
+      <elf-symbol name='unregister_netdevice_many' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9fdecc31'/>
+      <elf-symbol name='unregister_netdevice_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d0d6206'/>
+      <elf-symbol name='unregister_netdevice_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50812759'/>
+      <elf-symbol name='unregister_netevent_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4fe1eddf'/>
+      <elf-symbol name='unregister_pernet_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ceb1fc5'/>
+      <elf-symbol name='unregister_pernet_subsys' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43cf4ac0'/>
+      <elf-symbol name='unregister_pm_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7681946c'/>
+      <elf-symbol name='unregister_pppox_proto' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0ff7a18'/>
+      <elf-symbol name='unregister_reboot_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac1a55be'/>
+      <elf-symbol name='unregister_restart_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40d59096'/>
+      <elf-symbol name='unregister_rpmsg_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac86b626'/>
+      <elf-symbol name='unregister_shrinker' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51c3ea91'/>
+      <elf-symbol name='unregister_syscore_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa1eb910'/>
+      <elf-symbol name='unregister_sysctl_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6be0d38b'/>
+      <elf-symbol name='unregister_tcf_proto_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81c0d4c4'/>
+      <elf-symbol name='unregister_virtio_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6c32f30'/>
+      <elf-symbol name='unregister_virtio_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f8869b4'/>
+      <elf-symbol name='unregister_vmap_purge_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7c69a63'/>
+      <elf-symbol name='unuse_mm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53f8d679'/>
+      <elf-symbol name='up' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf2a6966'/>
+      <elf-symbol name='up_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98d747fd'/>
+      <elf-symbol name='up_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x469de6d2'/>
+      <elf-symbol name='update_devfreq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1773f49'/>
+      <elf-symbol name='usb_add_function' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc44f1cb'/>
+      <elf-symbol name='usb_add_gadget_udc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30bc78d8'/>
+      <elf-symbol name='usb_add_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42823a73'/>
+      <elf-symbol name='usb_add_phy_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92e53ab2'/>
+      <elf-symbol name='usb_alloc_coherent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa1cb0e'/>
+      <elf-symbol name='usb_alloc_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7d81e21'/>
+      <elf-symbol name='usb_alloc_streams' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2035a32c'/>
+      <elf-symbol name='usb_alloc_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8749d6a4'/>
+      <elf-symbol name='usb_amd_dev_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9b9df41'/>
+      <elf-symbol name='usb_amd_hang_symptom_quirk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33832c7'/>
+      <elf-symbol name='usb_amd_prefetch_quirk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd87fc0a0'/>
+      <elf-symbol name='usb_amd_pt_check_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e1ab24a'/>
+      <elf-symbol name='usb_amd_quirk_pll_check' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf4014ff'/>
+      <elf-symbol name='usb_amd_quirk_pll_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc825d6c'/>
+      <elf-symbol name='usb_amd_quirk_pll_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10ecc52c'/>
+      <elf-symbol name='usb_anchor_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x584e406e'/>
+      <elf-symbol name='usb_asmedia_modifyflowcontrol' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e043d8d'/>
+      <elf-symbol name='usb_assign_descriptors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72397ffb'/>
+      <elf-symbol name='usb_autopm_get_interface' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1560cd57'/>
+      <elf-symbol name='usb_autopm_get_interface_async' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcae4993c'/>
+      <elf-symbol name='usb_autopm_get_interface_no_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1469354'/>
+      <elf-symbol name='usb_autopm_put_interface' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xef955a29'/>
+      <elf-symbol name='usb_autopm_put_interface_async' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91011e1e'/>
+      <elf-symbol name='usb_autopm_put_interface_no_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae43707a'/>
+      <elf-symbol name='usb_bulk_msg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f089f43'/>
+      <elf-symbol name='usb_calc_bus_time' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e64181d'/>
+      <elf-symbol name='usb_clear_halt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x333a200c'/>
+      <elf-symbol name='usb_composite_setup_continue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf4d94b66'/>
+      <elf-symbol name='usb_control_msg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9defc1d3'/>
+      <elf-symbol name='usb_copy_descriptors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e09263f'/>
+      <elf-symbol name='usb_create_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f1b4fbe'/>
+      <elf-symbol name='usb_decode_ctrl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4531624f'/>
+      <elf-symbol name='usb_del_gadget_udc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb201164'/>
+      <elf-symbol name='usb_deregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3a8b776'/>
+      <elf-symbol name='usb_disable_xhci_ports' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a3e9165'/>
+      <elf-symbol name='usb_disabled' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19a304ba'/>
+      <elf-symbol name='usb_driver_claim_interface' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x537da2c3'/>
+      <elf-symbol name='usb_driver_release_interface' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7f4371d'/>
+      <elf-symbol name='usb_enable_autosuspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x36778131'/>
+      <elf-symbol name='usb_enable_intel_xhci_ports' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73213d18'/>
+      <elf-symbol name='usb_ep_alloc_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0e62d4b'/>
+      <elf-symbol name='usb_ep_autoconfig' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe22108e3'/>
+      <elf-symbol name='usb_ep_clear_halt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63e14d80'/>
+      <elf-symbol name='usb_ep_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8ea074a'/>
+      <elf-symbol name='usb_ep_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc41263c7'/>
+      <elf-symbol name='usb_ep_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6bfad17f'/>
+      <elf-symbol name='usb_ep_fifo_flush' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5591473d'/>
+      <elf-symbol name='usb_ep_fifo_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28cb7cef'/>
+      <elf-symbol name='usb_ep_free_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa36ea15e'/>
+      <elf-symbol name='usb_ep_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xffaa944'/>
+      <elf-symbol name='usb_ep_set_halt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40f79de7'/>
+      <elf-symbol name='usb_ep_set_maxpacket_limit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a2315f5'/>
+      <elf-symbol name='usb_ep_set_wedge' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94816c92'/>
+      <elf-symbol name='usb_find_common_endpoints' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8eae8dfd'/>
+      <elf-symbol name='usb_for_each_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6c09293'/>
+      <elf-symbol name='usb_free_all_descriptors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6815da4'/>
+      <elf-symbol name='usb_free_coherent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d893e0a'/>
+      <elf-symbol name='usb_free_streams' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64716f06'/>
+      <elf-symbol name='usb_free_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e8dd9e8'/>
+      <elf-symbol name='usb_function_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1086e605'/>
+      <elf-symbol name='usb_function_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x202bccde'/>
+      <elf-symbol name='usb_gadget_giveback_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0979a46'/>
+      <elf-symbol name='usb_gadget_map_request_by_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42daa4db'/>
+      <elf-symbol name='usb_gadget_probe_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd71c95ce'/>
+      <elf-symbol name='usb_gadget_set_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce6fc4ef'/>
+      <elf-symbol name='usb_gadget_udc_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdccfa78d'/>
+      <elf-symbol name='usb_gadget_unmap_request_by_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41a7ed1'/>
+      <elf-symbol name='usb_gadget_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfcbde08'/>
+      <elf-symbol name='usb_gadget_vbus_connect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa561e17c'/>
+      <elf-symbol name='usb_gadget_vbus_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86dca2ce'/>
+      <elf-symbol name='usb_gadget_vbus_draw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11b9beb4'/>
+      <elf-symbol name='usb_gadget_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9eccc271'/>
+      <elf-symbol name='usb_get_current_frame_number' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xabcecac5'/>
+      <elf-symbol name='usb_get_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7031852'/>
+      <elf-symbol name='usb_get_dr_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd6cfb1b'/>
+      <elf-symbol name='usb_get_from_anchor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5cae374d'/>
+      <elf-symbol name='usb_get_gadget_udc_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50b88f41'/>
+      <elf-symbol name='usb_get_intf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd7a6ac54'/>
+      <elf-symbol name='usb_get_maximum_speed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9c3d60f'/>
+      <elf-symbol name='usb_get_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65b7664d'/>
+      <elf-symbol name='usb_gstrings_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb3af9db'/>
+      <elf-symbol name='usb_hc_died' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a98e6d0'/>
+      <elf-symbol name='usb_hcd_check_unlink_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b6dfe19'/>
+      <elf-symbol name='usb_hcd_end_port_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4de927d'/>
+      <elf-symbol name='usb_hcd_giveback_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98edfa11'/>
+      <elf-symbol name='usb_hcd_is_primary_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8f0a3ff'/>
+      <elf-symbol name='usb_hcd_link_urb_to_ep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb192d349'/>
+      <elf-symbol name='usb_hcd_map_urb_for_dma' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87136d39'/>
+      <elf-symbol name='usb_hcd_pci_probe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf73cdc6'/>
+      <elf-symbol name='usb_hcd_pci_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x774dedb1'/>
+      <elf-symbol name='usb_hcd_pci_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x399aaf4b'/>
+      <elf-symbol name='usb_hcd_platform_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb0064e4'/>
+      <elf-symbol name='usb_hcd_poll_rh_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3eb5acb2'/>
+      <elf-symbol name='usb_hcd_resume_root_hub' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0ec84fe'/>
+      <elf-symbol name='usb_hcd_start_port_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98965ee3'/>
+      <elf-symbol name='usb_hcd_unlink_urb_from_ep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96917a56'/>
+      <elf-symbol name='usb_hcd_unmap_urb_for_dma' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd093443'/>
+      <elf-symbol name='usb_hub_clear_tt_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9469fa1'/>
+      <elf-symbol name='usb_hub_find_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x581f07a2'/>
+      <elf-symbol name='usb_ifnum_to_if' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c0faf6'/>
+      <elf-symbol name='usb_interface_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x340a5f33'/>
+      <elf-symbol name='usb_kill_anchored_urbs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x962c8ae1'/>
+      <elf-symbol name='usb_kill_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7863c9f1'/>
+      <elf-symbol name='usb_lock_device_for_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x894dd412'/>
+      <elf-symbol name='usb_match_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94862981'/>
+      <elf-symbol name='usb_match_one_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x193cb425'/>
+      <elf-symbol name='usb_of_get_companion_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5ca2dd4'/>
+      <elf-symbol name='usb_os_desc_prepare_interf_dir' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d1c6580'/>
+      <elf-symbol name='usb_otg_state_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f0d9053'/>
+      <elf-symbol name='usb_phy_get_charger_current' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53671c91'/>
+      <elf-symbol name='usb_phy_set_charger_current' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2dae2659'/>
+      <elf-symbol name='usb_phy_set_charger_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb33c3c2'/>
+      <elf-symbol name='usb_poison_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29cabc66'/>
+      <elf-symbol name='usb_put_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf4610d84'/>
+      <elf-symbol name='usb_put_function_instance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c9bb2aa'/>
+      <elf-symbol name='usb_put_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b801bb5'/>
+      <elf-symbol name='usb_put_intf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70c5fb53'/>
+      <elf-symbol name='usb_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a1f0b91'/>
+      <elf-symbol name='usb_register_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89bbafc6'/>
+      <elf-symbol name='usb_remove_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x547493a2'/>
+      <elf-symbol name='usb_remove_phy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3c43bcc'/>
+      <elf-symbol name='usb_reset_configuration' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f6850a6'/>
+      <elf-symbol name='usb_reset_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99c07f59'/>
+      <elf-symbol name='usb_reset_endpoint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2bd5ebbc'/>
+      <elf-symbol name='usb_role_switch_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99626f5c'/>
+      <elf-symbol name='usb_role_switch_get_role' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff42c374'/>
+      <elf-symbol name='usb_role_switch_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9fd634a'/>
+      <elf-symbol name='usb_role_switch_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2702174b'/>
+      <elf-symbol name='usb_role_switch_set_role' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5474690'/>
+      <elf-symbol name='usb_role_switch_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2882d40e'/>
+      <elf-symbol name='usb_root_hub_lost_power' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d3ac9aa'/>
+      <elf-symbol name='usb_set_device_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9472947d'/>
+      <elf-symbol name='usb_set_interface' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3a49e0b'/>
+      <elf-symbol name='usb_sg_cancel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x844ea5e4'/>
+      <elf-symbol name='usb_sg_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde8a3448'/>
+      <elf-symbol name='usb_sg_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf811223'/>
+      <elf-symbol name='usb_show_dynids' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc17e9946'/>
+      <elf-symbol name='usb_speed_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x77ae495d'/>
+      <elf-symbol name='usb_store_new_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x901e42d8'/>
+      <elf-symbol name='usb_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e723eac'/>
+      <elf-symbol name='usb_string_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfaf42dca'/>
+      <elf-symbol name='usb_submit_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61986f64'/>
+      <elf-symbol name='usb_unanchor_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafdc7c64'/>
+      <elf-symbol name='usb_unlink_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2bead3be'/>
+      <elf-symbol name='usb_unpoison_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d6bd5a'/>
+      <elf-symbol name='usb_unregister_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x811dc334'/>
+      <elf-symbol name='usb_wait_anchor_empty_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x407af304'/>
+      <elf-symbol name='usb_wakeup_notification' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa291cc6'/>
+      <elf-symbol name='usbnet_change_mtu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x162642a9'/>
+      <elf-symbol name='usbnet_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2cdf946b'/>
+      <elf-symbol name='usbnet_get_drvinfo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43e28405'/>
+      <elf-symbol name='usbnet_get_endpoints' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x792110d8'/>
+      <elf-symbol name='usbnet_get_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2606f9e4'/>
+      <elf-symbol name='usbnet_get_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x784eccb3'/>
+      <elf-symbol name='usbnet_get_msglevel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9445b1c2'/>
+      <elf-symbol name='usbnet_get_stats64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe48b5d26'/>
+      <elf-symbol name='usbnet_link_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a9ee57a'/>
+      <elf-symbol name='usbnet_nway_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76cce007'/>
+      <elf-symbol name='usbnet_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66815241'/>
+      <elf-symbol name='usbnet_probe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd843e6b2'/>
+      <elf-symbol name='usbnet_read_cmd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6adcf058'/>
+      <elf-symbol name='usbnet_read_cmd_nopm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62371bf3'/>
+      <elf-symbol name='usbnet_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57189994'/>
+      <elf-symbol name='usbnet_set_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18e38ac9'/>
+      <elf-symbol name='usbnet_set_msglevel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53fc00f'/>
+      <elf-symbol name='usbnet_skb_return' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4799ebbe'/>
+      <elf-symbol name='usbnet_start_xmit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46047d7'/>
+      <elf-symbol name='usbnet_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x771bcf3d'/>
+      <elf-symbol name='usbnet_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdeab8511'/>
+      <elf-symbol name='usbnet_tx_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea75755a'/>
+      <elf-symbol name='usbnet_unlink_rx_urbs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3a2f8ac'/>
+      <elf-symbol name='usbnet_update_max_qlen' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd19b311'/>
+      <elf-symbol name='usbnet_write_cmd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13bc7e20'/>
+      <elf-symbol name='usbnet_write_cmd_async' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc2c63b6d'/>
+      <elf-symbol name='usbnet_write_cmd_nopm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd261ca1c'/>
+      <elf-symbol name='use_mm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69dce152'/>
+      <elf-symbol name='user_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfec55ce5'/>
+      <elf-symbol name='user_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89999248'/>
+      <elf-symbol name='user_revoke' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f0c7d6e'/>
+      <elf-symbol name='usleep_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12a38747'/>
+      <elf-symbol name='utf16s_to_utf8s' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xabf32f29'/>
+      <elf-symbol name='utf8s_to_utf16s' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x97adb487'/>
+      <elf-symbol name='uuid_gen' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69e683de'/>
+      <elf-symbol name='uuid_parse' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb67fec0e'/>
+      <elf-symbol name='v4l2_ctrl_cluster' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e4628e8'/>
+      <elf-symbol name='v4l2_ctrl_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e7585cb'/>
+      <elf-symbol name='v4l2_ctrl_g_ctrl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8cb4c2f5'/>
+      <elf-symbol name='v4l2_ctrl_get_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32d43420'/>
+      <elf-symbol name='v4l2_ctrl_handler_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce4e974e'/>
+      <elf-symbol name='v4l2_ctrl_handler_init_class' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4045a8b'/>
+      <elf-symbol name='v4l2_ctrl_handler_setup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa8ae6d7'/>
+      <elf-symbol name='v4l2_ctrl_log_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16093e7e'/>
+      <elf-symbol name='v4l2_ctrl_merge' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b5c0864'/>
+      <elf-symbol name='v4l2_ctrl_new_custom' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a7b0e08'/>
+      <elf-symbol name='v4l2_ctrl_new_int_menu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcdb89d34'/>
+      <elf-symbol name='v4l2_ctrl_new_std' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x671f0cd0'/>
+      <elf-symbol name='v4l2_ctrl_new_std_menu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f76ffa2'/>
+      <elf-symbol name='v4l2_ctrl_replace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b77c88d'/>
+      <elf-symbol name='v4l2_ctrl_subdev_subscribe_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe2d7487'/>
+      <elf-symbol name='v4l2_ctrl_subscribe_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c72ea88'/>
+      <elf-symbol name='v4l2_device_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc5a71fd'/>
+      <elf-symbol name='v4l2_device_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17d221d1'/>
+      <elf-symbol name='v4l2_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec003e0e'/>
+      <elf-symbol name='v4l2_device_register_subdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9748e2d'/>
+      <elf-symbol name='v4l2_device_register_subdev_nodes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd56f8818'/>
+      <elf-symbol name='v4l2_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa9960ac8'/>
+      <elf-symbol name='v4l2_device_unregister_subdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e5e0a4'/>
+      <elf-symbol name='v4l2_event_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba9f9cd6'/>
+      <elf-symbol name='v4l2_event_pending' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79846b3f'/>
+      <elf-symbol name='v4l2_event_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x121ca003'/>
+      <elf-symbol name='v4l2_event_queue_fh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa783543e'/>
+      <elf-symbol name='v4l2_event_subdev_unsubscribe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd0c65f'/>
+      <elf-symbol name='v4l2_event_subscribe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x693a233c'/>
+      <elf-symbol name='v4l2_event_unsubscribe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5c5752a'/>
+      <elf-symbol name='v4l2_fh_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa94a87bf'/>
+      <elf-symbol name='v4l2_fh_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d2b982a'/>
+      <elf-symbol name='v4l2_fh_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b14ed74'/>
+      <elf-symbol name='v4l2_fh_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff61c4bf'/>
+      <elf-symbol name='v4l2_fh_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaec0812f'/>
+      <elf-symbol name='v4l2_fh_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x196dbe42'/>
+      <elf-symbol name='v4l2_format_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28b12cc9'/>
+      <elf-symbol name='v4l2_g_ctrl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd89a5c3a'/>
+      <elf-symbol name='v4l2_i2c_new_subdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd32c568a'/>
+      <elf-symbol name='v4l2_i2c_subdev_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82902907'/>
+      <elf-symbol name='v4l2_prio_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb77b0159'/>
+      <elf-symbol name='v4l2_s_ctrl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1528fcf8'/>
+      <elf-symbol name='v4l2_spi_new_subdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61224ce5'/>
+      <elf-symbol name='v4l2_subdev_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3cc5d7b3'/>
+      <elf-symbol name='v4l_bound_align_image' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5ef842e'/>
+      <elf-symbol name='vb2_buffer_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85b587e1'/>
+      <elf-symbol name='vb2_create_bufs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde4be651'/>
+      <elf-symbol name='vb2_dqbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9eb4020'/>
+      <elf-symbol name='vb2_expbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbbedadbd'/>
+      <elf-symbol name='vb2_fop_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf61d27c'/>
+      <elf-symbol name='vb2_fop_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xacafc53f'/>
+      <elf-symbol name='vb2_fop_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x763864b3'/>
+      <elf-symbol name='vb2_fop_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35f2ca85'/>
+      <elf-symbol name='vb2_ioctl_create_bufs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7addb0be'/>
+      <elf-symbol name='vb2_ioctl_dqbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc95b33a9'/>
+      <elf-symbol name='vb2_ioctl_expbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44912ae'/>
+      <elf-symbol name='vb2_ioctl_prepare_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb95e6f70'/>
+      <elf-symbol name='vb2_ioctl_qbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65d80616'/>
+      <elf-symbol name='vb2_ioctl_querybuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe2f41356'/>
+      <elf-symbol name='vb2_ioctl_reqbufs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfca98243'/>
+      <elf-symbol name='vb2_ioctl_streamoff' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d246829'/>
+      <elf-symbol name='vb2_ioctl_streamon' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf15dff9'/>
+      <elf-symbol name='vb2_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa2d9e75'/>
+      <elf-symbol name='vb2_ops_wait_finish' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f707f02'/>
+      <elf-symbol name='vb2_ops_wait_prepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e194695'/>
+      <elf-symbol name='vb2_plane_cookie' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf22938d9'/>
+      <elf-symbol name='vb2_plane_vaddr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7abb1464'/>
+      <elf-symbol name='vb2_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde9ee33e'/>
+      <elf-symbol name='vb2_prepare_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1fd5a92'/>
+      <elf-symbol name='vb2_qbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcdf0210e'/>
+      <elf-symbol name='vb2_querybuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb97a8995'/>
+      <elf-symbol name='vb2_queue_error' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f2da4a6'/>
+      <elf-symbol name='vb2_queue_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf41589e8'/>
+      <elf-symbol name='vb2_queue_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x249244db'/>
+      <elf-symbol name='vb2_reqbufs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a13b5ed'/>
+      <elf-symbol name='vb2_request_object_is_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d90c885'/>
+      <elf-symbol name='vb2_streamoff' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd631f08c'/>
+      <elf-symbol name='vb2_streamon' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64b7bf1e'/>
+      <elf-symbol name='vb2_wait_for_all_buffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfbc0a2a2'/>
+      <elf-symbol name='vfree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x999e8297'/>
+      <elf-symbol name='vfs_fsync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x847f8e93'/>
+      <elf-symbol name='vfs_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56444c61'/>
+      <elf-symbol name='video_devdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x83df33a8'/>
+      <elf-symbol name='video_device_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x878f8c8f'/>
+      <elf-symbol name='video_device_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ac5d9fd'/>
+      <elf-symbol name='video_device_release_empty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5869aa18'/>
+      <elf-symbol name='video_ioctl2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea2da0e9'/>
+      <elf-symbol name='video_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x262437fe'/>
+      <elf-symbol name='virtio_break_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x512222a'/>
+      <elf-symbol name='virtio_check_driver_offered_feature' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b5ae2f9'/>
+      <elf-symbol name='virtio_config_changed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71c86ddc'/>
+      <elf-symbol name='virtio_device_freeze' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10dc29df'/>
+      <elf-symbol name='virtio_device_restore' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x655b3062'/>
+      <elf-symbol name='virtio_max_dma_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6520d09f'/>
+      <elf-symbol name='virtio_transport_connect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd11a3c9'/>
+      <elf-symbol name='virtio_transport_deliver_tap_pkt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61030039'/>
+      <elf-symbol name='virtio_transport_destruct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ba360bc'/>
+      <elf-symbol name='virtio_transport_dgram_allow' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbabd30f5'/>
+      <elf-symbol name='virtio_transport_dgram_bind' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a9d12ab'/>
+      <elf-symbol name='virtio_transport_dgram_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe7c95b19'/>
+      <elf-symbol name='virtio_transport_dgram_enqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72182bb4'/>
+      <elf-symbol name='virtio_transport_do_socket_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2f45574'/>
+      <elf-symbol name='virtio_transport_free_pkt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44cd43a2'/>
+      <elf-symbol name='virtio_transport_notify_buffer_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60c6dd3'/>
+      <elf-symbol name='virtio_transport_notify_poll_in' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x124269b8'/>
+      <elf-symbol name='virtio_transport_notify_poll_out' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7966c4e5'/>
+      <elf-symbol name='virtio_transport_notify_recv_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4cf7af3b'/>
+      <elf-symbol name='virtio_transport_notify_recv_post_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x526ca522'/>
+      <elf-symbol name='virtio_transport_notify_recv_pre_block' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7c17ef2'/>
+      <elf-symbol name='virtio_transport_notify_recv_pre_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x90675f78'/>
+      <elf-symbol name='virtio_transport_notify_send_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca96911c'/>
+      <elf-symbol name='virtio_transport_notify_send_post_enqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7a10e7f'/>
+      <elf-symbol name='virtio_transport_notify_send_pre_block' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x244237b7'/>
+      <elf-symbol name='virtio_transport_notify_send_pre_enqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd20a0e3c'/>
+      <elf-symbol name='virtio_transport_recv_pkt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91f4fde5'/>
+      <elf-symbol name='virtio_transport_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5aca979'/>
+      <elf-symbol name='virtio_transport_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf649217f'/>
+      <elf-symbol name='virtio_transport_stream_allow' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a81e69'/>
+      <elf-symbol name='virtio_transport_stream_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8094e608'/>
+      <elf-symbol name='virtio_transport_stream_enqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14e138dc'/>
+      <elf-symbol name='virtio_transport_stream_has_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb836868e'/>
+      <elf-symbol name='virtio_transport_stream_has_space' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6c5c6e4'/>
+      <elf-symbol name='virtio_transport_stream_is_active' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2fd8b4eb'/>
+      <elf-symbol name='virtio_transport_stream_rcvhiwat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x196b2063'/>
+      <elf-symbol name='virtqueue_add_inbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6f5013e'/>
+      <elf-symbol name='virtqueue_add_inbuf_ctx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d59d44f'/>
+      <elf-symbol name='virtqueue_add_outbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6eb8f695'/>
+      <elf-symbol name='virtqueue_add_sgs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9f36faa'/>
+      <elf-symbol name='virtqueue_detach_unused_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2aaaa739'/>
+      <elf-symbol name='virtqueue_disable_cb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x579fba29'/>
+      <elf-symbol name='virtqueue_enable_cb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c19b282'/>
+      <elf-symbol name='virtqueue_enable_cb_delayed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa02ef8f6'/>
+      <elf-symbol name='virtqueue_enable_cb_prepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35357c31'/>
+      <elf-symbol name='virtqueue_get_avail_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8bdee860'/>
+      <elf-symbol name='virtqueue_get_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbbf69720'/>
+      <elf-symbol name='virtqueue_get_buf_ctx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1d5218d'/>
+      <elf-symbol name='virtqueue_get_desc_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe792aea3'/>
+      <elf-symbol name='virtqueue_get_used_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe052f689'/>
+      <elf-symbol name='virtqueue_get_vring_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd62556c'/>
+      <elf-symbol name='virtqueue_is_broken' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a7947af'/>
+      <elf-symbol name='virtqueue_kick' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf51868'/>
+      <elf-symbol name='virtqueue_kick_prepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a1601b7'/>
+      <elf-symbol name='virtqueue_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10069570'/>
+      <elf-symbol name='virtqueue_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x90630873'/>
+      <elf-symbol name='vm_get_page_prot' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c91e17c'/>
+      <elf-symbol name='vm_insert_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6c8d43b'/>
+      <elf-symbol name='vm_iomap_memory' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b436e8f'/>
+      <elf-symbol name='vm_map_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd74fabd'/>
+      <elf-symbol name='vm_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde05ffef'/>
+      <elf-symbol name='vmalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6ee688f'/>
+      <elf-symbol name='vmalloc_to_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c618ddc'/>
+      <elf-symbol name='vmalloc_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5635a60a'/>
+      <elf-symbol name='vmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72276fad'/>
+      <elf-symbol name='vmf_insert_mixed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa69b36a'/>
+      <elf-symbol name='vmf_insert_pfn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbce6a419'/>
+      <elf-symbol name='vmf_insert_pfn_prot' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8dd4f34b'/>
+      <elf-symbol name='vprintk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x715a5ed0'/>
+      <elf-symbol name='vring_create_virtqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a2d0d04'/>
+      <elf-symbol name='vring_del_virtqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a5877c2'/>
+      <elf-symbol name='vring_interrupt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff05fa13'/>
+      <elf-symbol name='vring_new_virtqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28a86a3b'/>
+      <elf-symbol name='vring_transport_features' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x594c9feb'/>
+      <elf-symbol name='vscnprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa0c318b'/>
+      <elf-symbol name='vsnprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x148653'/>
+      <elf-symbol name='vsock_core_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4fcf677f'/>
+      <elf-symbol name='vsock_core_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x59a8ab0a'/>
+      <elf-symbol name='vsock_for_each_connected_socket' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf86ab0a0'/>
+      <elf-symbol name='vsprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78b887ed'/>
+      <elf-symbol name='vsscanf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50d035c2'/>
+      <elf-symbol name='vunmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94961283'/>
+      <elf-symbol name='vzalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40a9b349'/>
+      <elf-symbol name='wait_for_completion' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6de13801'/>
+      <elf-symbol name='wait_for_completion_interruptible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x262e823a'/>
+      <elf-symbol name='wait_for_completion_interruptible_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa33c0eac'/>
+      <elf-symbol name='wait_for_completion_io_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x139cee21'/>
+      <elf-symbol name='wait_for_completion_killable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa096b889'/>
+      <elf-symbol name='wait_for_completion_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d1ff60a'/>
+      <elf-symbol name='wait_woken' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb308c97d'/>
+      <elf-symbol name='wake_up_process' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fef25b1'/>
+      <elf-symbol name='wakeup_source_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6544f746'/>
+      <elf-symbol name='wakeup_source_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55262b96'/>
+      <elf-symbol name='wakeup_source_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x906f899d'/>
+      <elf-symbol name='wakeup_source_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3630b8a5'/>
+      <elf-symbol name='wakeup_source_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x715e46e5'/>
+      <elf-symbol name='wakeup_source_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b3d56b5'/>
+      <elf-symbol name='watchdog_init_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0d106bf'/>
+      <elf-symbol name='watchdog_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1aa7b9c9'/>
+      <elf-symbol name='watchdog_set_restart_priority' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4a8da53'/>
+      <elf-symbol name='watchdog_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc41c49f'/>
+      <elf-symbol name='wiphy_apply_custom_regulatory' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65c7a0a8'/>
+      <elf-symbol name='wiphy_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b7a79be'/>
+      <elf-symbol name='wiphy_new_nm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcfbeac40'/>
+      <elf-symbol name='wiphy_read_of_freq_limits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaff8e81d'/>
+      <elf-symbol name='wiphy_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f91f99f'/>
+      <elf-symbol name='wiphy_to_ieee80211_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8e14763'/>
+      <elf-symbol name='wiphy_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe8b5605'/>
+      <elf-symbol name='woken_wake_function' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0654aba'/>
+      <elf-symbol name='work_busy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86ab091d'/>
+      <elf-symbol name='would_dump' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5ef54ff'/>
+      <elf-symbol name='write_inode_now' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d2aff5a'/>
+      <elf-symbol name='ww_mutex_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b2411d0'/>
+      <elf-symbol name='ww_mutex_lock_interruptible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf985d5d'/>
+      <elf-symbol name='ww_mutex_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7c2765e'/>
+      <elf-symbol name='xdp_convert_zc_to_xdp_frame' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa33ed015'/>
+      <elf-symbol name='xdp_do_flush_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x559b27f8'/>
+      <elf-symbol name='xdp_do_redirect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd73b93e8'/>
+      <elf-symbol name='xdp_return_frame' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x434bd4d4'/>
+      <elf-symbol name='xdp_return_frame_rx_napi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x134e3568'/>
+      <elf-symbol name='xdp_rxq_info_reg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c3df513'/>
+      <elf-symbol name='xdp_rxq_info_reg_mem_model' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x961b22e1'/>
+      <elf-symbol name='xdp_rxq_info_unreg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ea26c73'/>
+      <elf-symbol name='xfrm4_protocol_deregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2aaceb3f'/>
+      <elf-symbol name='xfrm4_protocol_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e2678d'/>
+      <elf-symbol name='xfrm4_rcv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2077784b'/>
+      <elf-symbol name='xfrm4_tunnel_deregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe69199c7'/>
+      <elf-symbol name='xfrm4_tunnel_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e98b7eb'/>
+      <elf-symbol name='xfrm6_find_1stfragopt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5dd4b94'/>
+      <elf-symbol name='xfrm6_protocol_deregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb5e0c9b'/>
+      <elf-symbol name='xfrm6_protocol_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfad9b3ff'/>
+      <elf-symbol name='xfrm6_rcv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b365645'/>
+      <elf-symbol name='xfrm_aalg_get_byname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37a02412'/>
+      <elf-symbol name='xfrm_init_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9133a007'/>
+      <elf-symbol name='xfrm_input' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3eab5403'/>
+      <elf-symbol name='xfrm_input_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4a4d908'/>
+      <elf-symbol name='xfrm_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd10f4a1c'/>
+      <elf-symbol name='xfrm_output_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe944a6b8'/>
+      <elf-symbol name='xfrm_register_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15e807e7'/>
+      <elf-symbol name='xfrm_state_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0433145'/>
+      <elf-symbol name='xfrm_state_insert' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49461a30'/>
+      <elf-symbol name='xfrm_state_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66b21cc8'/>
+      <elf-symbol name='xfrm_unregister_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82d409d1'/>
+      <elf-symbol name='xt_hook_ops_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcccf0fd2'/>
+      <elf-symbol name='xt_register_match' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0cd51f7'/>
+      <elf-symbol name='xt_register_matches' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8532cc02'/>
+      <elf-symbol name='xt_register_target' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe620e9bb'/>
+      <elf-symbol name='xt_register_targets' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7c6c6e'/>
+      <elf-symbol name='xt_unregister_match' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae1a2b50'/>
+      <elf-symbol name='xt_unregister_matches' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xadd5c5e0'/>
+      <elf-symbol name='xt_unregister_target' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7b60560'/>
+      <elf-symbol name='xt_unregister_targets' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x45500833'/>
+      <elf-symbol name='zlib_deflate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2c43f3f'/>
+      <elf-symbol name='zlib_deflateEnd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc890c008'/>
+      <elf-symbol name='zlib_deflateInit2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a0b73d0'/>
+      <elf-symbol name='zlib_deflateReset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6aeefac4'/>
+      <elf-symbol name='zlib_deflate_workspacesize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9f7149c'/>
+      <elf-symbol name='zlib_inflate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x581f98da'/>
+      <elf-symbol name='zlib_inflateEnd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x107e5878'/>
+      <elf-symbol name='zlib_inflateIncomp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x424d3620'/>
+      <elf-symbol name='zlib_inflateInit2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35a88f28'/>
+      <elf-symbol name='zlib_inflateReset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb0540aa'/>
+      <elf-symbol name='zlib_inflate_workspacesize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce5ac24f'/>
+    </elf-function-symbols>
+    <elf-variable-symbols>
+      <elf-symbol name='__cpu_active_mask' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15db3b99'/>
+      <elf-symbol name='__cpu_online_mask' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac594e02'/>
+      <elf-symbol name='__cpu_possible_mask' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde7ece30'/>
+      <elf-symbol name='__cpu_present_mask' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3055449'/>
+      <elf-symbol name='__num_online_cpus' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc60d0620'/>
+      <elf-symbol name='__per_cpu_offset' size='256' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x280f9f14'/>
+      <elf-symbol name='__stack_chk_guard' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f678b07'/>
+      <elf-symbol name='__tracepoint_dma_fence_emit' size='48' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x349ac524'/>
+      <elf-symbol name='__tracepoint_gpu_mem_total' size='48' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfbeb6f2f'/>
+      <elf-symbol name='__tracepoint_xdp_exception' size='48' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x666b755a'/>
+      <elf-symbol name='_ctype' size='256' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11089ac7'/>
+      <elf-symbol name='_totalram_pages' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x944375db'/>
+      <elf-symbol name='amba_bustype' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafb40956'/>
+      <elf-symbol name='arm64_const_caps_ready' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14b89635'/>
+      <elf-symbol name='arp_tbl' size='552' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6302694f'/>
+      <elf-symbol name='bpf_stats_enabled_key' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf84bd6ee'/>
+      <elf-symbol name='bridge_tunnel_header' size='6' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1879fcbd'/>
+      <elf-symbol name='clk_fixed_factor_ops' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd7bb311'/>
+      <elf-symbol name='clk_fixed_rate_ops' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb75a95'/>
+      <elf-symbol name='console_printk' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2592fc6c'/>
+      <elf-symbol name='console_suspend_enabled' size='1' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x366307a'/>
+      <elf-symbol name='contig_page_data' size='5760' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e79adb5'/>
+      <elf-symbol name='cpu_all_bits' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd994ecee'/>
+      <elf-symbol name='cpu_bit_bitmap' size='520' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62ad2053'/>
+      <elf-symbol name='cpu_hwcap_keys' size='992' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e2d7875'/>
+      <elf-symbol name='cpu_hwcaps' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c1c3eb4'/>
+      <elf-symbol name='cpu_number' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a2af7b4'/>
+      <elf-symbol name='cpu_subsys' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6bb5f241'/>
+      <elf-symbol name='cpu_topology' size='1280' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42bf23cb'/>
+      <elf-symbol name='cpufreq_freq_attr_scaling_available_freqs' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf18d821a'/>
+      <elf-symbol name='cpufreq_freq_attr_scaling_boost_freqs' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf15c0a0'/>
+      <elf-symbol name='cpufreq_generic_attr' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2fda563b'/>
+      <elf-symbol name='cpuhp_tasks_frozen' size='1' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4507f4a8'/>
+      <elf-symbol name='crc_ccitt_table' size='512' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f03b6a9'/>
+      <elf-symbol name='crypto_ablkcipher_type' size='72' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x445d04d5'/>
+      <elf-symbol name='crypto_aes_inv_sbox' size='256' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa84ce9e0'/>
+      <elf-symbol name='crypto_aes_sbox' size='256' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9d952d1'/>
+      <elf-symbol name='dma_contiguous_default_area' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4fd950ed'/>
+      <elf-symbol name='dma_fence_array_ops' size='72' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe03a689d'/>
+      <elf-symbol name='drm_debug' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20645642'/>
+      <elf-symbol name='drm_gem_cma_vm_ops' size='144' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54c11918'/>
+      <elf-symbol name='efi' size='344' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0f493d9'/>
+      <elf-symbol name='efi_tpm_final_log_size' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9e8faeb'/>
+      <elf-symbol name='ehci_cf_port_reset_rwsem' size='48' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c610ba4'/>
+      <elf-symbol name='fb_mode_option' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdaf4dfb3'/>
+      <elf-symbol name='flow_keys_basic_dissector' size='60' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7e38f12'/>
+      <elf-symbol name='fpsimd_context_busy' size='1' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8946ea72'/>
+      <elf-symbol name='fs_bio_set' size='272' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca130b74'/>
+      <elf-symbol name='governor_sysfs_ops' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7aeb0263'/>
+      <elf-symbol name='hash_digest_size' size='80' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd24e146'/>
+      <elf-symbol name='i2c_adapter_type' size='48' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xffc6c501'/>
+      <elf-symbol name='i2c_bus_type' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfae21820'/>
+      <elf-symbol name='ignore_console_lock_warning' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98e508ef'/>
+      <elf-symbol name='init_net' size='4160' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf62be75d'/>
+      <elf-symbol name='init_task' size='3776' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x678441fe'/>
+      <elf-symbol name='init_user_ns' size='568' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e07bedb'/>
+      <elf-symbol name='init_uts_ns' size='440' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5a06745'/>
+      <elf-symbol name='iomem_resource' size='96' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7da062f'/>
+      <elf-symbol name='jiffies' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15ba50a6'/>
+      <elf-symbol name='jiffies_64' size='8' type='object-type' binding='global-binding' visibility='default-visibility' alias='jiffies' is-defined='yes' crc='0x55e77e8'/>
+      <elf-symbol name='kernel_kobj' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcae58b6a'/>
+      <elf-symbol name='kimage_voffset' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4bbc1dd'/>
+      <elf-symbol name='kmalloc_caches' size='224' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea670741'/>
+      <elf-symbol name='kstat' size='48' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38869d88'/>
+      <elf-symbol name='loops_per_jiffy' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba497f13'/>
+      <elf-symbol name='memstart_addr' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9688de8b'/>
+      <elf-symbol name='msm_pinctrl_dev_pm_ops' size='184' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9a54c35'/>
+      <elf-symbol name='nd_tbl' size='552' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x93c4bc4'/>
+      <elf-symbol name='net_namespace_list' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d2fc5a6'/>
+      <elf-symbol name='nr_cpu_ids' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17de3d5'/>
+      <elf-symbol name='nr_irqs' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcdca3691'/>
+      <elf-symbol name='nr_swap_pages' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0d3456d'/>
+      <elf-symbol name='of_fwnode_ops' size='128' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbed4933'/>
+      <elf-symbol name='of_root' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25334e71'/>
+      <elf-symbol name='oops_in_progress' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1c3a01a'/>
+      <elf-symbol name='overflowgid' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7171121c'/>
+      <elf-symbol name='overflowuid' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b618d08'/>
+      <elf-symbol name='panic_notifier_list' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ceeac9'/>
+      <elf-symbol name='panic_timeout' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f8544b8'/>
+      <elf-symbol name='param_array_ops' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf9b3569'/>
+      <elf-symbol name='param_ops_bint' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69969f25'/>
+      <elf-symbol name='param_ops_bool' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf243297'/>
+      <elf-symbol name='param_ops_byte' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7be7cd0c'/>
+      <elf-symbol name='param_ops_charp' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2684638'/>
+      <elf-symbol name='param_ops_int' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91525527'/>
+      <elf-symbol name='param_ops_long' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92223f0a'/>
+      <elf-symbol name='param_ops_string' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdbce2bc7'/>
+      <elf-symbol name='param_ops_uint' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb56d4b7'/>
+      <elf-symbol name='param_ops_ullong' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad20e834'/>
+      <elf-symbol name='param_ops_ulong' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6207a8cf'/>
+      <elf-symbol name='param_ops_ushort' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdef3e53c'/>
+      <elf-symbol name='pci_bus_type' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3943e1b5'/>
+      <elf-symbol name='platform_bus_type' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d74de0b'/>
+      <elf-symbol name='pm_power_off' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60a32ea9'/>
+      <elf-symbol name='pm_suspend_global_flags' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42635d55'/>
+      <elf-symbol name='raw_v4_hashinfo' size='2056' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb510c250'/>
+      <elf-symbol name='raw_v6_hashinfo' size='2056' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed7c7b91'/>
+      <elf-symbol name='reboot_mode' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x429c3f9c'/>
+      <elf-symbol name='reservation_ww_class' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc328a5c'/>
+      <elf-symbol name='rfc1042_header' size='6' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69b18f43'/>
+      <elf-symbol name='rps_needed' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8761c87b'/>
+      <elf-symbol name='scsi_command_size_tbl' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x334da4e'/>
+      <elf-symbol name='simple_dir_inode_operations' size='256' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b535ed2'/>
+      <elf-symbol name='simple_dir_operations' size='288' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc418c492'/>
+      <elf-symbol name='snd_pcm_alt_chmaps' size='96' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e913c1'/>
+      <elf-symbol name='snd_pcm_std_chmaps' size='96' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e1b99f'/>
+      <elf-symbol name='snd_soc_pm_ops' size='184' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26b6cd00'/>
+      <elf-symbol name='softnet_data' size='704' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d016552'/>
+      <elf-symbol name='spi_bus_type' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a170623'/>
+      <elf-symbol name='static_key_initialized' size='1' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbea5ff1e'/>
+      <elf-symbol name='sys_tz' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe5d4bb2'/>
+      <elf-symbol name='system_freezable_wq' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4034828'/>
+      <elf-symbol name='system_freezing_cnt' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ab88a45'/>
+      <elf-symbol name='system_highpri_wq' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd91b127'/>
+      <elf-symbol name='system_long_wq' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x131db64a'/>
+      <elf-symbol name='system_power_efficient_wq' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47884890'/>
+      <elf-symbol name='system_state' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15af7f4'/>
+      <elf-symbol name='system_unbound_wq' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4c14632'/>
+      <elf-symbol name='system_wq' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d3385d3'/>
+      <elf-symbol name='timer_unstable_counter_workaround' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f5fb950'/>
+      <elf-symbol name='ttm_bo_manager_func' size='40' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8dd438e2'/>
+      <elf-symbol name='tty_std_termios' size='44' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67b27ec1'/>
+      <elf-symbol name='usb_debug_root' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b5546c4'/>
+      <elf-symbol name='usb_hcd_pci_pm_ops' size='184' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x432b3b7d'/>
+      <elf-symbol name='usb_hcds_loaded' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc17515d7'/>
+      <elf-symbol name='uuid_null' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6dcf857f'/>
+      <elf-symbol name='v4l2_subdev_call_wrappers' size='64' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f228b2f'/>
+      <elf-symbol name='v4l2_type_names' size='120' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x123959a1'/>
+      <elf-symbol name='vabits_actual' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc56a41e6'/>
+      <elf-symbol name='xt_tee_enabled' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3fcc511'/>
+    </elf-variable-symbols>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/crypto/aes-cipher-glue.c' language='LANG_C89'>
+      <function-decl name='crypto_unregister_alg' mangled-name='crypto_unregister_alg' filepath='include/linux/crypto.h' line='703' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_alg'>
+        <parameter type-id='67f526b5'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_register_alg' mangled-name='crypto_register_alg' filepath='include/linux/crypto.h' line='702' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_alg'>
+        <parameter type-id='67f526b5'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='514fe525' size-in-bits='64' id='67f526b5'/>
+      <type-decl name='int' size-in-bits='32' id='95e97e5e'/>
+      <class-decl name='crypto_alg' size-in-bits='4096' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='550' column='1' id='514fe525'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cra_list' type-id='72f469ec' visibility='default' filepath='include/linux/crypto.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cra_users' type-id='72f469ec' visibility='default' filepath='include/linux/crypto.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cra_flags' type-id='19c2251e' visibility='default' filepath='include/linux/crypto.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='cra_blocksize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cra_ctxsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='cra_alignmask' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cra_priority' type-id='95e97e5e' visibility='default' filepath='include/linux/crypto.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='cra_refcnt' type-id='64615833' visibility='default' filepath='include/linux/crypto.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cra_name' type-id='e3204322' visibility='default' filepath='include/linux/crypto.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='cra_driver_name' type-id='e3204322' visibility='default' filepath='include/linux/crypto.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='cra_type' type-id='71dc7604' visibility='default' filepath='include/linux/crypto.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='cra_u' type-id='89e73658' visibility='default' filepath='include/linux/crypto.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='cra_init' type-id='469599ea' visibility='default' filepath='include/linux/crypto.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='cra_exit' type-id='3ba771a1' visibility='default' filepath='include/linux/crypto.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='cra_destroy' type-id='33e7622c' visibility='default' filepath='include/linux/crypto.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='cra_module' type-id='2730d015' visibility='default' filepath='include/linux/crypto.h' line='578' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='1024' id='e3204322'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <pointer-type-def type-id='3e448446' size-in-bits='64' id='71dc7604'/>
+      <pointer-type-def type-id='d093a820' size-in-bits='64' id='469599ea'/>
+      <pointer-type-def type-id='29476915' size-in-bits='64' id='2730d015'/>
+      <class-decl name='list_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/types.h' line='181' column='1' id='72f469ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='e84b031a' visibility='default' filepath='include/linux/types.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prev' type-id='e84b031a' visibility='default' filepath='include/linux/types.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='refcount_t' type-id='637cfeaf' filepath='include/linux/refcount.h' line='21' column='1' id='64615833'/>
+      <typedef-decl name='u32' type-id='3f1a6b60' filepath='include/asm-generic/int-ll64.h' line='21' column='1' id='19c2251e'/>
+      <union-decl name='__anonymous_union__' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/crypto.h' line='567' column='1' id='89e73658'>
+        <data-member access='private'>
+          <var-decl name='ablkcipher' type-id='67574995' visibility='default' filepath='include/linux/crypto.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='blkcipher' type-id='69794f86' visibility='default' filepath='include/linux/crypto.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='cipher' type-id='208c9717' visibility='default' filepath='include/linux/crypto.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='compress' type-id='380acddc' visibility='default' filepath='include/linux/crypto.h' line='571' column='1'/>
+        </data-member>
+      </union-decl>
+      <type-decl name='unsigned int' size-in-bits='32' id='f0981eeb'/>
+      <pointer-type-def type-id='58d69ec2' size-in-bits='64' id='33e7622c'/>
+      <pointer-type-def type-id='420b230d' size-in-bits='64' id='3ba771a1'/>
+      <type-decl name='__ARRAY_SIZE_TYPE__' size-in-bits='64' id='7ff19f0f'/>
+      <type-decl name='char' size-in-bits='8' id='a84c031d'/>
+      <qualified-type-def type-id='caca298d' const='yes' id='3e448446'/>
+      <pointer-type-def type-id='72f469ec' size-in-bits='64' id='e84b031a'/>
+      <class-decl name='ablkcipher_alg' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='232' column='1' id='67574995'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='214533b0' visibility='default' filepath='include/linux/crypto.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='68e5f4e6' visibility='default' filepath='include/linux/crypto.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='68e5f4e6' visibility='default' filepath='include/linux/crypto.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='240' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcipher_alg' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='254' column='1' id='69794f86'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='b201adb8' visibility='default' filepath='include/linux/crypto.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='3347d7ed' visibility='default' filepath='include/linux/crypto.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='3347d7ed' visibility='default' filepath='include/linux/crypto.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='266' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cipher_alg' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='316' column='1' id='208c9717'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cia_min_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cia_max_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cia_setkey' type-id='b201adb8' visibility='default' filepath='include/linux/crypto.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cia_encrypt' type-id='f76f0ea4' visibility='default' filepath='include/linux/crypto.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cia_decrypt' type-id='f76f0ea4' visibility='default' filepath='include/linux/crypto.h' line='322' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='compress_alg' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='336' column='1' id='380acddc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='coa_compress' type-id='8801b8af' visibility='default' filepath='include/linux/crypto.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='coa_decompress' type-id='8801b8af' visibility='default' filepath='include/linux/crypto.h' line='339' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module' size-in-bits='7168' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='349' column='1' id='29476915'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='327e04c6' visibility='default' filepath='include/linux/module.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/module.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='6093ff7c' visibility='default' filepath='include/linux/module.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mkobj' type-id='7bd9942c' visibility='default' filepath='include/linux/module.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='modinfo_attrs' type-id='063da268' visibility='default' filepath='include/linux/module.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='version' type-id='80f4b756' visibility='default' filepath='include/linux/module.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='srcversion' type-id='80f4b756' visibility='default' filepath='include/linux/module.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='holders_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/module.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='syms' type-id='fcd64690' visibility='default' filepath='include/linux/module.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='crcs' type-id='e0a2e3a6' visibility='default' filepath='include/linux/module.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='num_syms' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='cfi_check' type-id='d7c6106c' visibility='default' filepath='include/linux/module.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='param_lock' type-id='925167dc' visibility='default' filepath='include/linux/module.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='kp' type-id='a7c6e908' visibility='default' filepath='include/linux/module.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='num_kp' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='num_gpl_syms' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='gpl_syms' type-id='fcd64690' visibility='default' filepath='include/linux/module.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='gpl_crcs' type-id='e0a2e3a6' visibility='default' filepath='include/linux/module.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='using_gplonly_symbols' type-id='b50a4934' visibility='default' filepath='include/linux/module.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2696'>
+          <var-decl name='sig_ok' type-id='b50a4934' visibility='default' filepath='include/linux/module.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2704'>
+          <var-decl name='async_probe_requested' type-id='b50a4934' visibility='default' filepath='include/linux/module.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='gpl_future_syms' type-id='fcd64690' visibility='default' filepath='include/linux/module.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='gpl_future_crcs' type-id='e0a2e3a6' visibility='default' filepath='include/linux/module.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='num_gpl_future_syms' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='num_exentries' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='extable' type-id='7f0eb64c' visibility='default' filepath='include/linux/module.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='init' type-id='1db260e5' visibility='default' filepath='include/linux/module.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='core_layout' type-id='68b3d9a8' visibility='default' filepath='include/linux/module.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='init_layout' type-id='68b3d9a8' visibility='default' filepath='include/linux/module.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='arch' type-id='ea05c185' visibility='default' filepath='include/linux/module.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='taints' type-id='7359adad' visibility='default' filepath='include/linux/module.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='num_bugs' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='bug_list' type-id='72f469ec' visibility='default' filepath='include/linux/module.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='bug_table' type-id='c250b0e4' visibility='default' filepath='include/linux/module.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='kallsyms' type-id='209d601e' visibility='default' filepath='include/linux/module.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='core_kallsyms' type-id='6a003ee8' visibility='default' filepath='include/linux/module.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='sect_attrs' type-id='3f4455c4' visibility='default' filepath='include/linux/module.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='notes_attrs' type-id='f0cb8b62' visibility='default' filepath='include/linux/module.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='args' type-id='26a90f95' visibility='default' filepath='include/linux/module.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='percpu' type-id='eaa32e2f' visibility='default' filepath='include/linux/module.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='percpu_size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5536'>
+          <var-decl name='num_tracepoints' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='tracepoints_ptrs' type-id='700727c0' visibility='default' filepath='include/linux/module.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='num_srcu_structs' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='srcu_struct_ptrs' type-id='57933490' visibility='default' filepath='include/linux/module.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='num_bpf_raw_events' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='bpf_raw_events' type-id='1f7f0216' visibility='default' filepath='include/linux/module.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='jump_entries' type-id='7a35228c' visibility='default' filepath='include/linux/module.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='num_jump_entries' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5984'>
+          <var-decl name='num_trace_bprintk_fmt' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='trace_bprintk_fmt_start' type-id='7d3cd834' visibility='default' filepath='include/linux/module.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='trace_events' type-id='109cc752' visibility='default' filepath='include/linux/module.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='num_trace_events' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='trace_evals' type-id='69881700' visibility='default' filepath='include/linux/module.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='num_trace_evals' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='source_list' type-id='72f469ec' visibility='default' filepath='include/linux/module.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='target_list' type-id='72f469ec' visibility='default' filepath='include/linux/module.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='exit' type-id='953b12f8' visibility='default' filepath='include/linux/module.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='refcnt' type-id='49178f86' visibility='default' filepath='include/linux/module.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='ei_funcs' type-id='7f79f20e' visibility='default' filepath='include/linux/module.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='num_ei_funcs' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/module.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/module.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/module.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/module.h' line='522' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='refcount_struct' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/refcount.h' line='19' column='1' id='637cfeaf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refs' type-id='49178f86' visibility='default' filepath='include/linux/refcount.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__u32' type-id='f0981eeb' filepath='include/uapi/asm-generic/int-ll64.h' line='27' column='1' id='3f1a6b60'/>
+      <pointer-type-def type-id='72790540' size-in-bits='64' id='1f7f0216'/>
+      <pointer-type-def type-id='93630c4e' size-in-bits='64' id='c250b0e4'/>
+      <pointer-type-def type-id='a84c031d' size-in-bits='64' id='26a90f95'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='448' id='6093ff7c'>
+        <subrange length='56' type-id='7ff19f0f' id='f8137894'/>
+      </array-type-def>
+      <pointer-type-def type-id='9b45d938' size-in-bits='64' id='80f4b756'/>
+      <pointer-type-def type-id='80f4b756' size-in-bits='64' id='7d3cd834'/>
+      <pointer-type-def type-id='d03af91a' size-in-bits='64' id='fcd64690'/>
+      <pointer-type-def type-id='5e3feda8' size-in-bits='64' id='e0a2e3a6'/>
+      <enum-decl name='module_state' filepath='include/linux/module.h' line='297' column='1' id='327e04c6'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MODULE_STATE_LIVE' value='0'/>
+        <enumerator name='MODULE_STATE_COMING' value='1'/>
+        <enumerator name='MODULE_STATE_GOING' value='2'/>
+        <enumerator name='MODULE_STATE_UNFORMED' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='e6a2a878' size-in-bits='64' id='7f79f20e'/>
+      <pointer-type-def type-id='da1095b6' size-in-bits='64' id='7f0eb64c'/>
+      <pointer-type-def type-id='276427e1' size-in-bits='64' id='1db260e5'/>
+      <pointer-type-def type-id='9b8b35dc' size-in-bits='64' id='68e5f4e6'/>
+      <pointer-type-def type-id='01941a31' size-in-bits='64' id='3347d7ed'/>
+      <pointer-type-def type-id='3c5b888e' size-in-bits='64' id='214533b0'/>
+      <pointer-type-def type-id='1af55526' size-in-bits='64' id='b201adb8'/>
+      <pointer-type-def type-id='38c67a4b' size-in-bits='64' id='8801b8af'/>
+      <pointer-type-def type-id='ca0c09a6' size-in-bits='64' id='7a35228c'/>
+      <pointer-type-def type-id='ca10d3ca' size-in-bits='64' id='a7c6e908'/>
+      <pointer-type-def type-id='b6ab8849' size-in-bits='64' id='d30bdc51'/>
+      <pointer-type-def type-id='6a003ee8' size-in-bits='64' id='209d601e'/>
+      <pointer-type-def type-id='8f90cd2a' size-in-bits='64' id='063da268'/>
+      <pointer-type-def type-id='96b6b914' size-in-bits='64' id='f0cb8b62'/>
+      <pointer-type-def type-id='b43b0dce' size-in-bits='64' id='3f4455c4'/>
+      <pointer-type-def type-id='f7d7131a' size-in-bits='64' id='57933490'/>
+      <class-decl name='crypto_type' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/crypto/algapi.h' line='31' column='1' id='caca298d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctxsize' type-id='a506a456' visibility='default' filepath='include/crypto/algapi.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='extsize' type-id='f77c2568' visibility='default' filepath='include/crypto/algapi.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='d066db18' visibility='default' filepath='include/crypto/algapi.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='init_tfm' type-id='469599ea' visibility='default' filepath='include/crypto/algapi.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='show' type-id='2c17fd2e' visibility='default' filepath='include/crypto/algapi.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='report' type-id='2108b777' visibility='default' filepath='include/crypto/algapi.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='free' type-id='3aa8795d' visibility='default' filepath='include/crypto/algapi.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='maskclear' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='maskset' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='tfmsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mod_arch_specific' size-in-bits='256' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/module.h' line='19' column='1' id='ea05c185'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='core' type-id='1615ea0e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='init' type-id='1615ea0e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ftrace_trampoline' type-id='72ece9e2' visibility='default' filepath='arch/arm64/include/asm/module.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mod_kallsyms' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='333' column='1' id='6a003ee8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='symtab' type-id='7d71a706' visibility='default' filepath='include/linux/module.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_symtab' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='strtab' type-id='26a90f95' visibility='default' filepath='include/linux/module.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='typetab' type-id='26a90f95' visibility='default' filepath='include/linux/module.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module_kobject' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='44' column='1' id='7bd9942c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/module.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/module.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='drivers_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/module.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='mp' type-id='ad9e36e6' visibility='default' filepath='include/linux/module.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='kobj_completion' type-id='389faaf7' visibility='default' filepath='include/linux/module.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module_layout' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='309' column='1' id='68b3d9a8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='eaa32e2f' visibility='default' filepath='include/linux/module.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='text_size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ro_size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ro_after_init_size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mtn' type-id='3351dce1' visibility='default' filepath='include/linux/module.h' line='322' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mutex' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mutex.h' line='53' column='1' id='925167dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='f22a8abb' visibility='default' filepath='include/linux/mutex.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mutex.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='osq' type-id='0c3105cd' visibility='default' filepath='include/linux/mutex.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wait_list' type-id='72f469ec' visibility='default' filepath='include/linux/mutex.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='0f81ed2a' size-in-bits='64' id='69881700'/>
+      <pointer-type-def type-id='23d6768c' size-in-bits='64' id='109cc752'/>
+      <pointer-type-def type-id='e431ac27' size-in-bits='64' id='700727c0'/>
+      <typedef-decl name='atomic_t' type-id='79faeff3' filepath='include/linux/types.h' line='173' column='1' id='49178f86'/>
+      <typedef-decl name='bool' type-id='c894953d' filepath='include/linux/types.h' line='30' column='1' id='b50a4934'/>
+      <typedef-decl name='cfi_check_fn' type-id='64115f6c' filepath='include/linux/cfi.h' line='15' column='1' id='d7c6106c'/>
+      <typedef-decl name='u64' type-id='d3130597' filepath='include/asm-generic/int-ll64.h' line='23' column='1' id='91ce1af9'/>
+      <type-decl name='unsigned long int' size-in-bits='64' id='7359adad'/>
+      <pointer-type-def type-id='ee076206' size-in-bits='64' id='953b12f8'/>
+      <pointer-type-def type-id='54d829fa' size-in-bits='64' id='f76f0ea4'/>
+      <pointer-type-def type-id='48b5725f' size-in-bits='64' id='eaa32e2f'/>
+      <pointer-type-def type-id='7cdfe313' size-in-bits='64' id='7d71a706'/>
+      <type-decl name='bool' size-in-bits='8' id='c894953d'/>
+      <pointer-type-def type-id='f9fef04f' size-in-bits='64' id='389faaf7'/>
+      <qualified-type-def type-id='a84c031d' const='yes' id='9b45d938'/>
+      <qualified-type-def type-id='9493d3c9' const='yes' id='d03af91a'/>
+      <qualified-type-def type-id='a7832498' const='yes' id='5e3feda8'/>
+      <pointer-type-def type-id='b739ffde' size-in-bits='64' id='d066db18'/>
+      <pointer-type-def type-id='d10f08e3' size-in-bits='64' id='2108b777'/>
+      <pointer-type-def type-id='9e045430' size-in-bits='64' id='ad9e36e6'/>
+      <pointer-type-def type-id='2519c394' size-in-bits='64' id='72ece9e2'/>
+      <pointer-type-def type-id='e4a7867c' size-in-bits='64' id='f7d7131a'/>
+      <class-decl name='bpf_raw_event_map' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/tracepoint-defs.h' line='44' column='1' id='72790540'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tp' type-id='08e531de' visibility='default' filepath='include/linux/tracepoint-defs.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bpf_func' type-id='eaa32e2f' visibility='default' filepath='include/linux/tracepoint-defs.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_args' type-id='19c2251e' visibility='default' filepath='include/linux/tracepoint-defs.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='writable_size' type-id='19c2251e' visibility='default' filepath='include/linux/tracepoint-defs.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bug_entry' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/asm-generic/bug.h' line='24' column='1' id='93630c4e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bug_addr_disp' type-id='95e97e5e' visibility='default' filepath='include/asm-generic/bug.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='file_disp' type-id='95e97e5e' visibility='default' filepath='include/asm-generic/bug.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='line' type-id='8efea9e5' visibility='default' filepath='include/asm-generic/bug.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/asm-generic/bug.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='error_injection_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/asm-generic/error-injection.h' line='14' column='1' id='e6a2a878'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='7359adad' visibility='default' filepath='include/asm-generic/error-injection.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='etype' type-id='95e97e5e' visibility='default' filepath='include/asm-generic/error-injection.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='exception_table_entry' size-in-bits='64' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/extable.h' line='18' column='1' id='da1095b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='insn' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/extable.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fixup' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/extable.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='jump_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/jump_label.h' line='122' column='1' id='ca0c09a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='code' type-id='a7832498' visibility='default' filepath='include/linux/jump_label.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='target' type-id='a7832498' visibility='default' filepath='include/linux/jump_label.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key' type-id='bd54fe1a' visibility='default' filepath='include/linux/jump_label.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernel_param' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/moduleparam.h' line='69' column='1' id='ca10d3ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/moduleparam.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/moduleparam.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='99beed66' visibility='default' filepath='include/linux/moduleparam.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='perm' type-id='d5c0a628' visibility='default' filepath='include/linux/moduleparam.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='level' type-id='fdbf7a0f' visibility='default' filepath='include/linux/moduleparam.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/linux/moduleparam.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='cbb4664d' visibility='default' filepath='include/linux/moduleparam.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kobject' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='66' column='1' id='b6ab8849'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/kobject.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/kobject.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parent' type-id='d30bdc51' visibility='default' filepath='include/linux/kobject.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='kset' type-id='89b70200' visibility='default' filepath='include/linux/kobject.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ktype' type-id='c48b394e' visibility='default' filepath='include/linux/kobject.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sd' type-id='150efd3f' visibility='default' filepath='include/linux/kobject.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/kobject.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='state_initialized' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='state_in_sysfs' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='state_add_uevent_sent' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='state_remove_uevent_sent' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='uevent_suppress' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mod_plt_sec' size-in-bits='96' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/module.h' line='13' column='1' id='1615ea0e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='plt_shndx' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='plt_num_entries' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='plt_max_entries' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mod_tree_node' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='304' column='1' id='3351dce1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/module.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='node' type-id='dc9cc7c7' visibility='default' filepath='include/linux/module.h' line='306' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module_attribute' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='52' column='1' id='8f90cd2a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' visibility='default' filepath='include/linux/module.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='9a6e3348' visibility='default' filepath='include/linux/module.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='96948294' visibility='default' filepath='include/linux/module.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='setup' type-id='537ed613' visibility='default' filepath='include/linux/module.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='test' type-id='fe3af88b' visibility='default' filepath='include/linux/module.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='free' type-id='d6f1846c' visibility='default' filepath='include/linux/module.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module_notes_attrs' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/module.c' line='1656' column='1' id='96b6b914'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dir' type-id='d30bdc51' visibility='default' filepath='kernel/module.c' line='1657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='notes' type-id='f0981eeb' visibility='default' filepath='kernel/module.c' line='1658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attrs' type-id='7cfae8e1' visibility='default' filepath='kernel/module.c' line='1659' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module_sect_attrs' size-in-bits='384' is-struct='yes' visibility='default' filepath='kernel/module.c' line='1543' column='1' id='b43b0dce'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='grp' type-id='e4af473b' visibility='default' filepath='kernel/module.c' line='1544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nsections' type-id='f0981eeb' visibility='default' filepath='kernel/module.c' line='1545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='attrs' type-id='ae08da59' visibility='default' filepath='kernel/module.c' line='1546' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='optimistic_spin_queue' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/osq_lock.h' line='15' column='1' id='0c3105cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tail' type-id='49178f86' visibility='default' filepath='include/linux/osq_lock.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='49178f86' visibility='default' filepath='include/linux/types.h' line='171' column='1' id='79faeff3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='counter' type-id='95e97e5e' visibility='default' filepath='include/linux/types.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='49b910cc' size-in-bits='64' id='0f81ed2a'/>
+      <pointer-type-def type-id='fd48a6e6' size-in-bits='64' id='23d6768c'/>
+      <typedef-decl name='__u64' type-id='3a47d82b' filepath='include/uapi/asm-generic/int-ll64.h' line='31' column='1' id='d3130597'/>
+      <typedef-decl name='atomic_long_t' type-id='28ee064c' filepath='include/asm-generic/atomic-long.h' line='12' column='1' id='f22a8abb'/>
+      <typedef-decl name='spinlock_t' type-id='53fb272e' filepath='include/linux/spinlock_types.h' line='73' column='1' id='fb4018a0'/>
+      <typedef-decl name='tracepoint_ptr_t' type-id='d2d812d1' filepath='include/linux/tracepoint-defs.h' line='41' column='1' id='e431ac27'/>
+      <pointer-type-def type-id='cdd79d4e' size-in-bits='64' id='f77c2568'/>
+      <pointer-type-def type-id='3642b004' size-in-bits='64' id='a506a456'/>
+      <type-decl name='void' id='48b5725f'/>
+      <pointer-type-def type-id='cc2d5b01' size-in-bits='64' id='3aa8795d'/>
+      <pointer-type-def type-id='26d45b0c' size-in-bits='64' id='2c17fd2e'/>
+      <pointer-type-def type-id='cdd056d2' size-in-bits='64' id='64115f6c'/>
+      <array-type-def dimensions='1' type-id='d83a2db1' size-in-bits='infinite' id='7cfae8e1'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='95d0d4e8' size-in-bits='64' id='99beed66'/>
+      <qualified-type-def type-id='1dc6a898' const='yes' id='d5c0a628'/>
+      <pointer-type-def type-id='e32cf39f' size-in-bits='64' id='fe3af88b'/>
+      <pointer-type-def type-id='29d79af7' size-in-bits='64' id='150efd3f'/>
+      <pointer-type-def type-id='1a08fab8' size-in-bits='64' id='c48b394e'/>
+      <pointer-type-def type-id='8cf069a2' size-in-bits='64' id='89b70200'/>
+      <type-decl name='long int' size-in-bits='64' id='bd54fe1a'/>
+      <type-decl name='long long unsigned int' size-in-bits='64' id='3a47d82b'/>
+      <array-type-def dimensions='1' type-id='def413c9' size-in-bits='infinite' id='ae08da59'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='attribute' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/sysfs.h' line='30' column='1' id='a6222917'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/sysfs.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='include/linux/sysfs.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='attribute_group' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/sysfs.h' line='84' column='1' id='e4af473b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/sysfs.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='is_visible' type-id='f69fcfe1' visibility='default' filepath='include/linux/sysfs.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='is_bin_visible' type-id='cc3e2efb' visibility='default' filepath='include/linux/sysfs.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='attrs' type-id='862c676f' visibility='default' filepath='include/linux/sysfs.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bin_attrs' type-id='87d62959' visibility='default' filepath='include/linux/sysfs.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='completion' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/completion.h' line='26' column='1' id='f9fef04f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='done' type-id='f0981eeb' visibility='default' filepath='include/linux/completion.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/completion.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernel_symbol' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/export.h' line='87' column='1' id='9493d3c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='7359adad' visibility='default' filepath='include/linux/export.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/export.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='namespace' type-id='80f4b756' visibility='default' filepath='include/linux/export.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kref' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/kref.h' line='19' column='1' id='400fb07b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='64615833' visibility='default' filepath='include/linux/kref.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='latch_tree_node' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/rbtree_latch.h' line='40' column='1' id='dc9cc7c7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='d46544fa' visibility='default' filepath='include/linux/rbtree_latch.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module_param_attrs' is-struct='yes' visibility='default' is-declaration-only='yes' id='9e045430'/>
+      <class-decl name='plt_entry' size-in-bits='96' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/module.h' line='41' column='1' id='2519c394'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='adrp' type-id='2f162548' visibility='default' filepath='arch/arm64/include/asm/module.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='add' type-id='2f162548' visibility='default' filepath='arch/arm64/include/asm/module.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='br' type-id='2f162548' visibility='default' filepath='arch/arm64/include/asm/module.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spinlock' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/spinlock_types.h' line='61' column='1' id='53fb272e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='1076cffc' visibility='default' filepath='include/linux/spinlock_types.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='srcu_struct' size-in-bits='5184' is-struct='yes' visibility='default' filepath='include/linux/srcutree.h' line='64' column='1' id='e4a7867c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='01115b96' visibility='default' filepath='include/linux/srcutree.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='level' type-id='2f7565c6' visibility='default' filepath='include/linux/srcutree.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='srcu_cb_mutex' type-id='925167dc' visibility='default' filepath='include/linux/srcutree.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/srcutree.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='srcu_gp_mutex' type-id='925167dc' visibility='default' filepath='include/linux/srcutree.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='srcu_idx' type-id='f0981eeb' visibility='default' filepath='include/linux/srcutree.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='srcu_gp_seq' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='srcu_gp_seq_needed' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='srcu_gp_seq_needed_exp' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='srcu_last_gp_end' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='sda' type-id='2a5ff2f1' visibility='default' filepath='include/linux/srcutree.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='srcu_barrier_seq' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='srcu_barrier_mutex' type-id='925167dc' visibility='default' filepath='include/linux/srcutree.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='srcu_barrier_completion' type-id='f9fef04f' visibility='default' filepath='include/linux/srcutree.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='srcu_barrier_cpu_cnt' type-id='49178f86' visibility='default' filepath='include/linux/srcutree.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/srcutree.h' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_eval_map' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/tracepoint.h' line='27' column='1' id='49b910cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='system' type-id='80f4b756' visibility='default' filepath='include/linux/tracepoint.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='eval_string' type-id='80f4b756' visibility='default' filepath='include/linux/tracepoint.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='eval_value' type-id='7359adad' visibility='default' filepath='include/linux/tracepoint.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_event_call' is-struct='yes' visibility='default' is-declaration-only='yes' id='fd48a6e6'/>
+      <pointer-type-def type-id='4ca0c298' size-in-bits='64' id='08e531de'/>
+      <qualified-type-def type-id='08e531de' const='yes' id='d2d812d1'/>
+      <typedef-decl name='Elf64_Sym' type-id='30bf9720' filepath='include/uapi/linux/elf.h' line='199' column='1' id='7cdfe313'/>
+      <typedef-decl name='atomic64_t' type-id='4efbf2c5' filepath='include/linux/types.h' line='178' column='1' id='28ee064c'/>
+      <typedef-decl name='s32' type-id='3158a266' filepath='include/asm-generic/int-ll64.h' line='20' column='1' id='a7832498'/>
+      <typedef-decl name='s8' type-id='8af57d41' filepath='include/asm-generic/int-ll64.h' line='16' column='1' id='fdbf7a0f'/>
+      <pointer-type-def type-id='18188cce' size-in-bits='64' id='9a6e3348'/>
+      <pointer-type-def type-id='78199102' size-in-bits='64' id='96948294'/>
+      <typedef-decl name='u8' type-id='8f048e17' filepath='include/asm-generic/int-ll64.h' line='17' column='1' id='f9b06939'/>
+      <union-decl name='__anonymous_union__47' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/moduleparam.h' line='76' column='1' id='cbb4664d'>
+        <data-member access='private'>
+          <var-decl name='arg' type-id='eaa32e2f' visibility='default' filepath='include/linux/moduleparam.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='str' type-id='db4b7928' visibility='default' filepath='include/linux/moduleparam.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='arr' type-id='ffa2ea6a' visibility='default' filepath='include/linux/moduleparam.h' line='79' column='1'/>
+        </data-member>
+      </union-decl>
+      <type-decl name='unsigned short int' size-in-bits='16' id='8efea9e5'/>
+      <pointer-type-def type-id='5985c13a' size-in-bits='64' id='d6f1846c'/>
+      <pointer-type-def type-id='7a42d02f' size-in-bits='64' id='537ed613'/>
+      <pointer-type-def type-id='0b001c1f' size-in-bits='64' id='862c676f'/>
+      <pointer-type-def type-id='c0e2acc9' size-in-bits='64' id='87d62959'/>
+      <qualified-type-def type-id='1740bab9' const='yes' id='95d0d4e8'/>
+      <pointer-type-def type-id='d8801604' size-in-bits='64' id='ffa2ea6a'/>
+      <pointer-type-def type-id='ef40fb12' size-in-bits='64' id='db4b7928'/>
+      <array-type-def dimensions='1' type-id='2a8a6332' size-in-bits='384' id='d46544fa'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='1207cfa9' size-in-bits='64' id='2a5ff2f1'/>
+      <array-type-def dimensions='1' type-id='8dee6d89' size-in-bits='192' id='2f7565c6'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='56798c81' size-in-bits='2304' id='01115b96'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <class-decl name='bin_attribute' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/sysfs.h' line='161' column='1' id='d83a2db1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' visibility='default' filepath='include/linux/sysfs.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/sysfs.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/sysfs.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read' type-id='afa767ca' visibility='default' filepath='include/linux/sysfs.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write' type-id='afa767ca' visibility='default' filepath='include/linux/sysfs.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mmap' type-id='a02c170c' visibility='default' filepath='include/linux/sysfs.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='delayed_work' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='118' column='1' id='5ad6e0ef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/workqueue.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/linux/workqueue.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='wq' type-id='242e3d19' visibility='default' filepath='include/linux/workqueue.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/workqueue.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/workqueue.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/workqueue.h' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='elf64_sym' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/elf.h' line='192' column='1' id='30bf9720'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='st_name' type-id='e57120d4' visibility='default' filepath='include/uapi/linux/elf.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='st_info' type-id='002ac4a6' visibility='default' filepath='include/uapi/linux/elf.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='st_other' type-id='002ac4a6' visibility='default' filepath='include/uapi/linux/elf.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='st_shndx' type-id='101a70d5' visibility='default' filepath='include/uapi/linux/elf.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='st_value' type-id='e14340cf' visibility='default' filepath='include/uapi/linux/elf.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='st_size' type-id='c87c44e4' visibility='default' filepath='include/uapi/linux/elf.h' line='198' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_node' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='132' column='1' id='29d79af7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/kernfs.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='active' type-id='49178f86' visibility='default' filepath='include/linux/kernfs.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parent' type-id='150efd3f' visibility='default' filepath='include/linux/kernfs.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/kernfs.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rb' type-id='2a8a6332' visibility='default' filepath='include/linux/kernfs.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ns' type-id='eaa32e2f' visibility='default' filepath='include/linux/kernfs.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hash' type-id='f0981eeb' visibility='default' filepath='include/linux/kernfs.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='' type-id='de6f7c53' visibility='default' filepath='include/linux/kernfs.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/kernfs.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='id' type-id='3dfef700' visibility='default' filepath='include/linux/kernfs.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/linux/kernfs.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='912'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='include/linux/kernfs.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='iattr' type-id='1f4b5d14' visibility='default' filepath='include/linux/kernfs.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kobj_type' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='145' column='1' id='1a08fab8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='release' type-id='aa377a8c' visibility='default' filepath='include/linux/kobject.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sysfs_ops' type-id='ebd313ed' visibility='default' filepath='include/linux/kobject.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='default_attrs' type-id='862c676f' visibility='default' filepath='include/linux/kobject.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='default_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/kobject.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='child_ns_type' type-id='10f0a819' visibility='default' filepath='include/linux/kobject.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='namespace' type-id='9c1150bc' visibility='default' filepath='include/linux/kobject.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_ownership' type-id='96b6fff2' visibility='default' filepath='include/linux/kobject.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kset' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='204' column='1' id='8cf069a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/kobject.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/kobject.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/kobject.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='uevent_ops' type-id='86462700' visibility='default' filepath='include/linux/kobject.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='213' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module_sect_attr' size-in-bits='512' is-struct='yes' visibility='default' filepath='kernel/module.c' line='1538' column='1' id='def413c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='battr' type-id='d83a2db1' visibility='default' filepath='kernel/module.c' line='1539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='address' type-id='7359adad' visibility='default' filepath='kernel/module.c' line='1540' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tracepoint' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/tracepoint-defs.h' line='30' column='1' id='4ca0c298'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/tracepoint-defs.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key' type-id='00205383' visibility='default' filepath='include/linux/tracepoint-defs.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='regfunc' type-id='1db260e5' visibility='default' filepath='include/linux/tracepoint-defs.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unregfunc' type-id='953b12f8' visibility='default' filepath='include/linux/tracepoint-defs.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='funcs' type-id='484b400f' visibility='default' filepath='include/linux/tracepoint-defs.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__9' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='28ee064c' visibility='default' filepath='include/linux/types.h' line='176' column='1' id='4efbf2c5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='counter' type-id='9b7c55ef' visibility='default' filepath='include/linux/types.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__le32' type-id='3f1a6b60' filepath='include/uapi/linux/types.h' line='31' column='1' id='2f162548'/>
+      <typedef-decl name='__s32' type-id='95e97e5e' filepath='include/uapi/asm-generic/int-ll64.h' line='26' column='1' id='3158a266'/>
+      <typedef-decl name='__s8' type-id='28577a57' filepath='include/uapi/asm-generic/int-ll64.h' line='20' column='1' id='8af57d41'/>
+      <typedef-decl name='__u8' type-id='002ac4a6' filepath='include/uapi/asm-generic/int-ll64.h' line='21' column='1' id='8f048e17'/>
+      <typedef-decl name='u16' type-id='d315442e' filepath='include/asm-generic/int-ll64.h' line='19' column='1' id='1dc6a898'/>
+      <typedef-decl name='umode_t' type-id='8efea9e5' filepath='include/linux/types.h' line='19' column='1' id='2594b00f'/>
+      <pointer-type-def type-id='5ea5a07d' size-in-bits='64' id='f69fcfe1'/>
+      <pointer-type-def type-id='449f791f' size-in-bits='64' id='cc3e2efb'/>
+      <typedef-decl name='wait_queue_head_t' type-id='cff07063' filepath='include/linux/wait.h' line='38' column='1' id='b5ab048f'/>
+      <union-decl name='__anonymous_union__10' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/spinlock_types.h' line='62' column='1' id='1076cffc'>
+        <data-member access='private'>
+          <var-decl name='rlock' type-id='f106d0e5' visibility='default' filepath='include/linux/spinlock_types.h' line='63' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='a6222917' size-in-bits='64' id='0b001c1f'/>
+      <pointer-type-def type-id='d83a2db1' size-in-bits='64' id='c0e2acc9'/>
+      <pointer-type-def type-id='8ff9530e' size-in-bits='64' id='c97de1ac'/>
+      <pointer-type-def type-id='10e36dc5' size-in-bits='64' id='10f0a819'/>
+      <qualified-type-def type-id='3b156a69' const='yes' id='d8801604'/>
+      <qualified-type-def type-id='744e4af5' const='yes' id='ef40fb12'/>
+      <pointer-type-def type-id='b2d59d2a' size-in-bits='64' id='86462700'/>
+      <pointer-type-def type-id='0f840455' size-in-bits='64' id='ebd313ed'/>
+      <pointer-type-def type-id='cdead692' size-in-bits='64' id='a02c170c'/>
+      <pointer-type-def type-id='7b5435ce' size-in-bits='64' id='1f4b5d14'/>
+      <type-decl name='signed char' size-in-bits='8' id='28577a57'/>
+      <pointer-type-def type-id='56798c81' size-in-bits='64' id='8dee6d89'/>
+      <class-decl name='kernel_param_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/moduleparam.h' line='47' column='1' id='1740bab9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/moduleparam.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set' type-id='388a7f2a' visibility='default' filepath='include/linux/moduleparam.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get' type-id='d1c62993' visibility='default' filepath='include/linux/moduleparam.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='free' type-id='b7f9d8e6' visibility='default' filepath='include/linux/moduleparam.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='raw_spinlock' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/spinlock_types.h' line='20' column='1' id='f106d0e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='raw_lock' type-id='641c41d1' visibility='default' filepath='include/linux/spinlock_types.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rb_node' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/rbtree.h' line='24' column='1' id='2a8a6332'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__rb_parent_color' type-id='7359adad' visibility='default' filepath='include/linux/rbtree.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rb_right' type-id='e6532500' visibility='default' filepath='include/linux/rbtree.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rb_left' type-id='e6532500' visibility='default' filepath='include/linux/rbtree.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='srcu_data' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/linux/srcutree.h' line='24' column='1' id='1207cfa9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='srcu_lock_count' type-id='f05e8e77' visibility='default' filepath='include/linux/srcutree.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='srcu_unlock_count' type-id='f05e8e77' visibility='default' filepath='include/linux/srcutree.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/srcutree.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='srcu_cblist' type-id='541c023a' visibility='default' filepath='include/linux/srcutree.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='srcu_gp_seq_needed' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='srcu_gp_seq_needed_exp' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='srcu_cblist_invoking' type-id='b50a4934' visibility='default' filepath='include/linux/srcutree.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='delay_work' type-id='abe41e67' visibility='default' filepath='include/linux/srcutree.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/srcutree.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='srcu_barrier_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/srcutree.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='mynode' type-id='8dee6d89' visibility='default' filepath='include/linux/srcutree.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='grpmask' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/srcutree.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='ssp' type-id='f7d7131a' visibility='default' filepath='include/linux/srcutree.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='srcu_node' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/srcutree.h' line='48' column='1' id='56798c81'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/srcutree.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='srcu_have_cbs' type-id='f46d9f4d' visibility='default' filepath='include/linux/srcutree.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='srcu_data_have_cbs' type-id='f46d9f4d' visibility='default' filepath='include/linux/srcutree.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='srcu_gp_seq_needed_exp' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='srcu_parent' type-id='8dee6d89' visibility='default' filepath='include/linux/srcutree.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='grplo' type-id='95e97e5e' visibility='default' filepath='include/linux/srcutree.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='grphi' type-id='95e97e5e' visibility='default' filepath='include/linux/srcutree.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='static_key' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/jump_label.h' line='87' column='1' id='00205383'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enabled' type-id='49178f86' visibility='default' filepath='include/linux/jump_label.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='7792d5a2' visibility='default' filepath='include/linux/jump_label.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timer_list' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/timer.h' line='12' column='1' id='abe41e67'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entry' type-id='03a4a074' visibility='default' filepath='include/linux/timer.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='expires' type-id='7359adad' visibility='default' filepath='include/linux/timer.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='function' type-id='9582ad9a' visibility='default' filepath='include/linux/timer.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/timer.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/timer.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/timer.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wait_queue_head' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/wait.h' line='34' column='1' id='cff07063'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/wait.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/linux/wait.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='work_struct' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='103' column='1' id='ef9025d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='f22a8abb' visibility='default' filepath='include/linux/workqueue.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/workqueue.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='func' type-id='72666d3f' visibility='default' filepath='include/linux/workqueue.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/workqueue.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/workqueue.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3132e187' size-in-bits='64' id='484b400f'/>
+      <typedef-decl name='Elf64_Addr' type-id='d3130597' filepath='include/uapi/linux/elf.h' line='16' column='1' id='e14340cf'/>
+      <typedef-decl name='Elf64_Half' type-id='d315442e' filepath='include/uapi/linux/elf.h' line='17' column='1' id='101a70d5'/>
+      <typedef-decl name='Elf64_Word' type-id='3f1a6b60' filepath='include/uapi/linux/elf.h' line='21' column='1' id='e57120d4'/>
+      <typedef-decl name='Elf64_Xword' type-id='d3130597' filepath='include/uapi/linux/elf.h' line='22' column='1' id='c87c44e4'/>
+      <typedef-decl name='__u16' type-id='8efea9e5' filepath='include/uapi/asm-generic/int-ll64.h' line='24' column='1' id='d315442e'/>
+      <typedef-decl name='s64' type-id='49659421' filepath='include/asm-generic/int-ll64.h' line='22' column='1' id='9b7c55ef'/>
+      <typedef-decl name='size_t' type-id='9e19ad6e' filepath='include/linux/types.h' line='55' column='1' id='b59d7dce'/>
+      <pointer-type-def type-id='e7e14410' size-in-bits='64' id='afa767ca'/>
+      <union-decl name='kernfs_node_id' size-in-bits='64' visibility='default' filepath='include/linux/kernfs.h' line='109' column='1' id='3dfef700'>
+        <data-member access='private'>
+          <var-decl name='' type-id='9d3d640f' visibility='default' filepath='include/linux/kernfs.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='id' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='120' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__46' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/kernfs.h' line='151' column='1' id='de6f7c53'>
+        <data-member access='private'>
+          <var-decl name='dir' type-id='4303ca40' visibility='default' filepath='include/linux/kernfs.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='symlink' type-id='c8685ef0' visibility='default' filepath='include/linux/kernfs.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='attr' type-id='9e04468e' visibility='default' filepath='include/linux/kernfs.h' line='154' column='1'/>
+        </data-member>
+      </union-decl>
+      <type-decl name='unsigned char' size-in-bits='8' id='002ac4a6'/>
+      <pointer-type-def type-id='10587c0a' size-in-bits='64' id='aa377a8c'/>
+      <pointer-type-def type-id='257e5168' size-in-bits='64' id='96b6fff2'/>
+      <pointer-type-def type-id='e0c79ce2' size-in-bits='64' id='9c1150bc'/>
+      <pointer-type-def type-id='a5159c01' size-in-bits='64' id='242e3d19'/>
+      <pointer-type-def type-id='e88d0150' size-in-bits='64' id='8ff9530e'/>
+      <qualified-type-def type-id='9f6abc71' const='yes' id='b2d59d2a'/>
+      <qualified-type-def type-id='e7826ffa' const='yes' id='0f840455'/>
+      <pointer-type-def type-id='05cd795f' size-in-bits='64' id='d1c62993'/>
+      <pointer-type-def type-id='e625eab0' size-in-bits='64' id='388a7f2a'/>
+      <pointer-type-def type-id='2a8a6332' size-in-bits='64' id='e6532500'/>
+      <class-decl name='callback_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/types.h' line='219' column='1' id='e3d8ce29'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='69c138b1' visibility='default' filepath='include/linux/types.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='eb839374' visibility='default' filepath='include/linux/types.h' line='221' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hlist_node' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/types.h' line='189' column='1' id='03a4a074'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='08cbad52' visibility='default' filepath='include/linux/types.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pprev' type-id='50a213e8' visibility='default' filepath='include/linux/types.h' line='190' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_elem_attr' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='101' column='1' id='9e04468e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='d37373f6' visibility='default' filepath='include/linux/kernfs.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open' type-id='627d9f9e' visibility='default' filepath='include/linux/kernfs.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='69bf7bee' visibility='default' filepath='include/linux/kernfs.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='notify_next' type-id='150efd3f' visibility='default' filepath='include/linux/kernfs.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_elem_dir' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='85' column='1' id='4303ca40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subdirs' type-id='7359adad' visibility='default' filepath='include/linux/kernfs.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='children' type-id='dec44472' visibility='default' filepath='include/linux/kernfs.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='root' type-id='e18defdb' visibility='default' filepath='include/linux/kernfs.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_elem_symlink' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='97' column='1' id='c8685ef0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='target_kn' type-id='150efd3f' visibility='default' filepath='include/linux/kernfs.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_iattrs' is-struct='yes' visibility='default' is-declaration-only='yes' id='7b5435ce'/>
+      <class-decl name='kparam_array' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/moduleparam.h' line='92' column='1' id='3b156a69'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max' type-id='f0981eeb' visibility='default' filepath='include/linux/moduleparam.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='elemsize' type-id='f0981eeb' visibility='default' filepath='include/linux/moduleparam.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num' type-id='807869d3' visibility='default' filepath='include/linux/moduleparam.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='99beed66' visibility='default' filepath='include/linux/moduleparam.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='elem' type-id='eaa32e2f' visibility='default' filepath='include/linux/moduleparam.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kparam_string' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/moduleparam.h' line='86' column='1' id='744e4af5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='maxlen' type-id='f0981eeb' visibility='default' filepath='include/linux/moduleparam.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='string' type-id='26a90f95' visibility='default' filepath='include/linux/moduleparam.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcu_segcblist' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/rcu_segcblist.h' line='67' column='1' id='541c023a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='69c138b1' visibility='default' filepath='include/linux/rcu_segcblist.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tails' type-id='68694f49' visibility='default' filepath='include/linux/rcu_segcblist.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='gp_seq' type-id='f46d9f4d' visibility='default' filepath='include/linux/rcu_segcblist.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='len' type-id='f22a8abb' visibility='default' filepath='include/linux/rcu_segcblist.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='len_lazy' type-id='bd54fe1a' visibility='default' filepath='include/linux/rcu_segcblist.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='enabled' type-id='f9b06939' visibility='default' filepath='include/linux/rcu_segcblist.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='712'>
+          <var-decl name='offloaded' type-id='f9b06939' visibility='default' filepath='include/linux/rcu_segcblist.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tracepoint_func' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/tracepoint-defs.h' line='24' column='1' id='3132e187'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='func' type-id='eaa32e2f' visibility='default' filepath='include/linux/tracepoint-defs.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/tracepoint-defs.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='prio' type-id='95e97e5e' visibility='default' filepath='include/linux/tracepoint-defs.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='workqueue_struct' size-in-bits='2560' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='242' column='1' id='a5159c01'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pwqs' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='kernel/workqueue.c' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='work_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='flush_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='nr_pwqs_to_flush' type-id='49178f86' visibility='default' filepath='kernel/workqueue.c' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='first_flusher' type-id='ec037527' visibility='default' filepath='kernel/workqueue.c' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='flusher_queue' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='flusher_overflow' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='maydays' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rescuer' type-id='50a159c7' visibility='default' filepath='kernel/workqueue.c' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nr_drainers' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='saved_max_active' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='unbound_attrs' type-id='cfd15e7e' visibility='default' filepath='kernel/workqueue.c' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='dfl_pwq' type-id='a7a31b92' visibility='default' filepath='kernel/workqueue.c' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='wq_dev' type-id='5cebc26e' visibility='default' filepath='kernel/workqueue.c' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='name' type-id='6653bb13' visibility='default' filepath='kernel/workqueue.c' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/workqueue.c' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='kernel/workqueue.c' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='cpu_pwqs' type-id='a7a31b92' visibility='default' filepath='kernel/workqueue.c' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='numa_pwq_tbl' type-id='55b5dc02' visibility='default' filepath='kernel/workqueue.c' line='283' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__58' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/kernfs.h' line='110' column='1' id='9d3d640f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ino' type-id='19c2251e' visibility='default' filepath='include/linux/kernfs.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='generation' type-id='19c2251e' visibility='default' filepath='include/linux/kernfs.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__kernel_size_t' type-id='447da2ae' filepath='include/uapi/asm-generic/posix_types.h' line='72' column='1' id='9e19ad6e'/>
+      <typedef-decl name='__s64' type-id='1eb56b1e' filepath='include/uapi/asm-generic/int-ll64.h' line='30' column='1' id='49659421'/>
+      <typedef-decl name='arch_spinlock_t' type-id='c167abfb' filepath='include/asm-generic/qspinlock_types.h' line='52' column='1' id='641c41d1'/>
+      <typedef-decl name='work_func_t' type-id='939280af' filepath='include/linux/workqueue.h' line='22' column='1' id='72666d3f'/>
+      <union-decl name='__anonymous_union__48' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/jump_label.h' line='102' column='1' id='7792d5a2'>
+        <data-member access='private'>
+          <var-decl name='type' type-id='7359adad' visibility='default' filepath='include/linux/jump_label.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='entries' type-id='7a35228c' visibility='default' filepath='include/linux/jump_label.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='next' type-id='c77a71ce' visibility='default' filepath='include/linux/jump_label.h' line='105' column='1'/>
+        </data-member>
+      </union-decl>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='128' id='f05e8e77'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='256' id='f46d9f4d'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='8029c9e0' size-in-bits='64' id='9582ad9a'/>
+      <pointer-type-def type-id='c5c76c9c' size-in-bits='64' id='b7f9d8e6'/>
+      <pointer-type-def type-id='e3d8ce29' size-in-bits='64' id='69c138b1'/>
+      <array-type-def dimensions='1' type-id='162c1c01' size-in-bits='256' id='68694f49'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='192' id='6653bb13'>
+        <subrange length='24' type-id='7ff19f0f' id='fdd3342b'/>
+      </array-type-def>
+      <qualified-type-def type-id='e4af473b' const='yes' id='e88d0150'/>
+      <pointer-type-def type-id='499c8dd8' size-in-bits='64' id='d37373f6'/>
+      <pointer-type-def type-id='03a4a074' size-in-bits='64' id='08cbad52'/>
+      <pointer-type-def type-id='08cbad52' size-in-bits='64' id='50a213e8'/>
+      <pointer-type-def type-id='cc9b8e48' size-in-bits='64' id='627d9f9e'/>
+      <pointer-type-def type-id='471fc91b' size-in-bits='64' id='e18defdb'/>
+      <type-decl name='long long int' size-in-bits='64' id='1eb56b1e'/>
+      <pointer-type-def type-id='b0355154' size-in-bits='64' id='a7a31b92'/>
+      <array-type-def dimensions='1' type-id='a7a31b92' size-in-bits='infinite' id='55b5dc02'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='5081ed08' size-in-bits='64' id='c77a71ce'/>
+      <class-decl name='kset_uevent_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='168' column='1' id='9f6abc71'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filter' type-id='2a3ad845' visibility='default' filepath='include/linux/kobject.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='1ea91ded' visibility='default' filepath='include/linux/kobject.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uevent' type-id='9125ffcd' visibility='default' filepath='include/linux/kobject.h' line='171' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qspinlock' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='22' column='1' id='c167abfb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='16e927d3' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rb_root' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/rbtree.h' line='31' column='1' id='dec44472'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_node' type-id='e6532500' visibility='default' filepath='include/linux/rbtree.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sysfs_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/sysfs.h' line='223' column='1' id='e7826ffa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='show' type-id='434e45fe' visibility='default' filepath='include/linux/sysfs.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='store' type-id='855e70d2' visibility='default' filepath='include/linux/sysfs.h' line='225' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__kernel_ulong_t' type-id='7359adad' filepath='include/uapi/asm-generic/posix_types.h' line='16' column='1' id='447da2ae'/>
+      <typedef-decl name='loff_t' type-id='537a730e' filepath='include/linux/types.h' line='46' column='1' id='69bf7bee'/>
+      <pointer-type-def type-id='f0981eeb' size-in-bits='64' id='807869d3'/>
+      <pointer-type-def type-id='34135eb2' size-in-bits='64' id='eb839374'/>
+      <pointer-type-def type-id='4827f223' size-in-bits='64' id='939280af'/>
+      <pointer-type-def type-id='146df21f' size-in-bits='64' id='50a159c7'/>
+      <pointer-type-def type-id='2fe6f208' size-in-bits='64' id='cfd15e7e'/>
+      <pointer-type-def type-id='a88ecfc8' size-in-bits='64' id='5cebc26e'/>
+      <pointer-type-def type-id='c8eb0f4f' size-in-bits='64' id='ec037527'/>
+      <pointer-type-def type-id='69c138b1' size-in-bits='64' id='162c1c01'/>
+      <qualified-type-def type-id='84ba3262' const='yes' id='1ea91ded'/>
+      <qualified-type-def type-id='ae89b201' const='yes' id='499c8dd8'/>
+      <qualified-type-def type-id='a42969fa' const='yes' id='2a3ad845'/>
+      <qualified-type-def type-id='795bbc42' const='yes' id='9125ffcd'/>
+      <class-decl name='kernfs_open_node' is-struct='yes' visibility='default' is-declaration-only='yes' id='cc9b8e48'/>
+      <class-decl name='kernfs_root' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='189' column='1' id='471fc91b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kn' type-id='150efd3f' visibility='default' filepath='include/linux/kernfs.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/kernfs.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ino_idr' type-id='37ce495e' visibility='default' filepath='include/linux/kernfs.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='last_ino' type-id='19c2251e' visibility='default' filepath='include/linux/kernfs.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='next_generation' type-id='19c2251e' visibility='default' filepath='include/linux/kernfs.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='syscall_ops' type-id='fefa8c5f' visibility='default' filepath='include/linux/kernfs.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='supers' type-id='72f469ec' visibility='default' filepath='include/linux/kernfs.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='deactivate_waitq' type-id='b5ab048f' visibility='default' filepath='include/linux/kernfs.h' line='203' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pool_workqueue' size-in-bits='2048' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='203' column='1' id='b0355154'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pool' type-id='1ce8c5e4' visibility='default' filepath='kernel/workqueue.c' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wq' type-id='242e3d19' visibility='default' filepath='kernel/workqueue.c' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='work_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flush_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='refcnt' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='nr_in_flight' type-id='73c97830' visibility='default' filepath='kernel/workqueue.c' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='nr_active' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_active' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='delayed_works' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pwqs_node' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mayday_node' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='unbound_release_work' type-id='ef9025d0' visibility='default' filepath='kernel/workqueue.c' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/workqueue.c' line='224' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='static_key_mod' is-struct='yes' visibility='default' is-declaration-only='yes' id='5081ed08'/>
+      <class-decl name='worker' size-in-bits='1216' is-struct='yes' visibility='default' filepath='kernel/workqueue_internal.h' line='24' column='1' id='146df21f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='d331b3a2' visibility='default' filepath='kernel/workqueue_internal.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='current_work' type-id='83c1bde6' visibility='default' filepath='kernel/workqueue_internal.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='current_func' type-id='72666d3f' visibility='default' filepath='kernel/workqueue_internal.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='current_pwq' type-id='a7a31b92' visibility='default' filepath='kernel/workqueue_internal.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='scheduled' type-id='72f469ec' visibility='default' filepath='kernel/workqueue_internal.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='kernel/workqueue_internal.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pool' type-id='1ce8c5e4' visibility='default' filepath='kernel/workqueue_internal.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='kernel/workqueue_internal.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='last_active' type-id='7359adad' visibility='default' filepath='kernel/workqueue_internal.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='kernel/workqueue_internal.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue_internal.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='sleeping' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue_internal.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='desc' type-id='6653bb13' visibility='default' filepath='kernel/workqueue_internal.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rescue_wq' type-id='242e3d19' visibility='default' filepath='kernel/workqueue_internal.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='last_func' type-id='72666d3f' visibility='default' filepath='kernel/workqueue_internal.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='workqueue_attrs' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='143' column='1' id='2fe6f208'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nice' type-id='95e97e5e' visibility='default' filepath='include/linux/workqueue.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cpumask' type-id='b16b461b' visibility='default' filepath='include/linux/workqueue.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='no_numa' type-id='b50a4934' visibility='default' filepath='include/linux/workqueue.h' line='161' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wq_device' size-in-bits='7424' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='5349' column='1' id='a88ecfc8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wq' type-id='242e3d19' visibility='default' filepath='kernel/workqueue.c' line='5350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='kernel/workqueue.c' line='5351' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wq_flusher' size-in-bits='448' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='230' column='1' id='c8eb0f4f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flush_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='done' type-id='f9fef04f' visibility='default' filepath='kernel/workqueue.c' line='233' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__kernel_loff_t' type-id='1eb56b1e' filepath='include/uapi/asm-generic/posix_types.h' line='88' column='1' id='537a730e'/>
+      <pointer-type-def type-id='d5b6f34c' size-in-bits='64' id='434e45fe'/>
+      <pointer-type-def type-id='be97e3d8' size-in-bits='64' id='855e70d2'/>
+      <union-decl name='__anonymous_union__11' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='23' column='1' id='16e927d3'>
+        <data-member access='private'>
+          <var-decl name='val' type-id='49178f86' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='e56340ee' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='33729b5d' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='36' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='ebb550f0' size-in-bits='64' id='84ba3262'/>
+      <pointer-type-def type-id='93be8120' size-in-bits='64' id='a42969fa'/>
+      <pointer-type-def type-id='6ee62c60' size-in-bits='64' id='795bbc42'/>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='480' id='73c97830'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <pointer-type-def type-id='91f5bcb7' size-in-bits='64' id='fefa8c5f'/>
+      <class-decl name='device' size-in-bits='7360' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='1251' column='1' id='66e487eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/device.h' line='1252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/device.h' line='1253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='p' type-id='0d3b0dcf' visibility='default' filepath='include/linux/device.h' line='1255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='init_name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='1257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='type' type-id='cd28613b' visibility='default' filepath='include/linux/device.h' line='1258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bus' type-id='5e2671f8' visibility='default' filepath='include/linux/device.h' line='1260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='driver' type-id='00c7b870' visibility='default' filepath='include/linux/device.h' line='1261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='platform_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/device.h' line='1263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/device.h' line='1265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/device.h' line='1270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='links' type-id='2d178f63' visibility='default' filepath='include/linux/device.h' line='1274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='power' type-id='f3166b6b' visibility='default' filepath='include/linux/device.h' line='1275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='pm_domain' type-id='a4375c03' visibility='default' filepath='include/linux/device.h' line='1276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='msi_domain' type-id='7544e824' visibility='default' filepath='include/linux/device.h' line='1279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='pins' type-id='fa43ef1d' visibility='default' filepath='include/linux/device.h' line='1282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='msi_list' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='dma_ops' type-id='ac58af12' visibility='default' filepath='include/linux/device.h' line='1288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='dma_mask' type-id='3df9fd28' visibility='default' filepath='include/linux/device.h' line='1289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='coherent_dma_mask' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='bus_dma_mask' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='dma_pfn_offset' type-id='7359adad' visibility='default' filepath='include/linux/device.h' line='1296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='dma_parms' type-id='9b4aaf1f' visibility='default' filepath='include/linux/device.h' line='1298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='dma_pools' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='dma_mem' type-id='5bfba86c' visibility='default' filepath='include/linux/device.h' line='1303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='cma_area' type-id='6f67b38a' visibility='default' filepath='include/linux/device.h' line='1307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='archdata' type-id='d3e142f5' visibility='default' filepath='include/linux/device.h' line='1311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/device.h' line='1313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/device.h' line='1314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='devt' type-id='8504f260' visibility='default' filepath='include/linux/device.h' line='1319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/linux/device.h' line='1320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='devres_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/device.h' line='1322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='devres_head' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='class' type-id='67aca04f' visibility='default' filepath='include/linux/device.h' line='1325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='1326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='release' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='1328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='iommu_group' type-id='0b19fc54' visibility='default' filepath='include/linux/device.h' line='1329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='iommu_fwspec' type-id='1979c577' visibility='default' filepath='include/linux/device.h' line='1330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='iommu_param' type-id='506df562' visibility='default' filepath='include/linux/device.h' line='1331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='offline_disabled' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='offline' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='of_node_reused' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='state_synced' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='dma_coherent' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='android_kabi_reserved5' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='android_kabi_reserved6' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='android_kabi_reserved7' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='android_kabi_reserved8' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1349' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='idr' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/idr.h' line='19' column='1' id='37ce495e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idr_rt' type-id='d39738ac' visibility='default' filepath='include/linux/idr.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idr_base' type-id='f0981eeb' visibility='default' filepath='include/linux/idr.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='idr_next' type-id='f0981eeb' visibility='default' filepath='include/linux/idr.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_ops' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='226' column='1' id='ae89b201'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='964d2eb6' visibility='default' filepath='include/linux/kernfs.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release' type-id='f1825e09' visibility='default' filepath='include/linux/kernfs.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq_show' type-id='0131eb61' visibility='default' filepath='include/linux/kernfs.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='seq_start' type-id='a46b05a0' visibility='default' filepath='include/linux/kernfs.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='seq_next' type-id='b6ba26fa' visibility='default' filepath='include/linux/kernfs.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='seq_stop' type-id='6ba28d1c' visibility='default' filepath='include/linux/kernfs.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read' type-id='17b1add7' visibility='default' filepath='include/linux/kernfs.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='atomic_write_len' type-id='b59d7dce' visibility='default' filepath='include/linux/kernfs.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='prealloc' type-id='b50a4934' visibility='default' filepath='include/linux/kernfs.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='write' type-id='17b1add7' visibility='default' filepath='include/linux/kernfs.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='poll' type-id='b347e5ac' visibility='default' filepath='include/linux/kernfs.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='mmap' type-id='f9e738c5' visibility='default' filepath='include/linux/kernfs.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='282' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='36' column='1' id='33729b5d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='locked_pending' type-id='1dc6a898' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='tail' type-id='1dc6a898' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__4' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='32' column='1' id='e56340ee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='locked' type-id='f9b06939' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='pending' type-id='f9b06939' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='bc3f1924' size-in-bits='64' id='f23e2572'/>
+      <typedef-decl name='cpumask_var_t' type-id='db98c084' filepath='include/linux/cpumask.h' line='751' column='1' id='b16b461b'/>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='kernel/workqueue_internal.h' line='26' column='1' id='d331b3a2'>
+        <data-member access='private'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='kernel/workqueue_internal.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='hentry' type-id='03a4a074' visibility='default' filepath='kernel/workqueue_internal.h' line='28' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='ef9025d0' size-in-bits='64' id='83c1bde6'/>
+      <pointer-type-def type-id='19ea21fe' size-in-bits='64' id='1ce8c5e4'/>
+      <pointer-type-def type-id='b31bfc8a' size-in-bits='64' id='5e2671f8'/>
+      <pointer-type-def type-id='fd48a067' size-in-bits='64' id='67aca04f'/>
+      <pointer-type-def type-id='6110442c' size-in-bits='64' id='6f67b38a'/>
+      <pointer-type-def type-id='683a8a93' size-in-bits='64' id='cd28613b'/>
+      <pointer-type-def type-id='512ac7cc' size-in-bits='64' id='ac58af12'/>
+      <array-type-def dimensions='1' type-id='1354385d' size-in-bits='64' id='db98c084'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <pointer-type-def type-id='038d05bd' size-in-bits='64' id='fa43ef1d'/>
+      <pointer-type-def type-id='7c94eaa3' size-in-bits='64' id='a4375c03'/>
+      <pointer-type-def type-id='66e487eb' size-in-bits='64' id='fa0b179b'/>
+      <pointer-type-def type-id='37251e77' size-in-bits='64' id='9b4aaf1f'/>
+      <pointer-type-def type-id='fe007c02' size-in-bits='64' id='00c7b870'/>
+      <pointer-type-def type-id='6661a698' size-in-bits='64' id='9a537bbe'/>
+      <pointer-type-def type-id='d066d157' size-in-bits='64' id='0d3b0dcf'/>
+      <pointer-type-def type-id='5d5ff7f6' size-in-bits='64' id='5bfba86c'/>
+      <pointer-type-def type-id='d5ace205' size-in-bits='64' id='4a935625'/>
+      <pointer-type-def type-id='8bcde2dc' size-in-bits='64' id='964d2eb6'/>
+      <pointer-type-def type-id='054882f1' size-in-bits='64' id='f9e738c5'/>
+      <pointer-type-def type-id='cf9ec29d' size-in-bits='64' id='0131eb61'/>
+      <pointer-type-def type-id='0d6f83ff' size-in-bits='64' id='1979c577'/>
+      <pointer-type-def type-id='2352f3ae' size-in-bits='64' id='0b19fc54'/>
+      <pointer-type-def type-id='6c784694' size-in-bits='64' id='506df562'/>
+      <pointer-type-def type-id='a667f60e' size-in-bits='64' id='7544e824'/>
+      <class-decl name='dev_archdata' size-in-bits='64' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/device.h' line='8' column='1' id='d3e142f5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iommu' type-id='eaa32e2f' visibility='default' filepath='arch/arm64/include/asm/device.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_links_info' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='1151' column='1' id='2d178f63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='suppliers' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='consumers' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='needs_suppliers' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='defer_hook' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='need_for_probe' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='status' type-id='070abca2' visibility='default' filepath='include/linux/device.h' line='1157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_info' size-in-bits='2624' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='573' column='1' id='f3166b6b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power_state' type-id='08496218' visibility='default' filepath='include/linux/pm.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='can_wakeup' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='async_suspend' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='in_dpm_list' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='is_prepared' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='is_suspended' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='is_noirq_suspended' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='is_late_suspended' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='no_pm' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='early_init' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='direct_complete' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='driver_flags' type-id='19c2251e' visibility='default' filepath='include/linux/pm.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/pm.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/pm.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='completion' type-id='f9fef04f' visibility='default' filepath='include/linux/pm.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wakeup' type-id='1ea237a6' visibility='default' filepath='include/linux/pm.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='wakeup_path' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='syscore' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='no_pm_callbacks' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='must_resume' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='may_skip_resume' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='suspend_timer' type-id='b6993efc' visibility='default' filepath='include/linux/pm.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='timer_expires' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/pm.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='wait_queue' type-id='b5ab048f' visibility='default' filepath='include/linux/pm.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='wakeirq' type-id='303e01fa' visibility='default' filepath='include/linux/pm.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='usage_count' type-id='49178f86' visibility='default' filepath='include/linux/pm.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='child_count' type-id='49178f86' visibility='default' filepath='include/linux/pm.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='disable_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='idle_notification' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='request_pending' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='deferred_resume' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='runtime_auto' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ignore_children' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='no_callbacks' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='irq_safe' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='use_autosuspend' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='timer_autosuspends' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='memalloc_noio' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='links_count' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='request' type-id='2418515b' visibility='default' filepath='include/linux/pm.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='runtime_status' type-id='3c1b7fd8' visibility='default' filepath='include/linux/pm.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='runtime_error' type-id='95e97e5e' visibility='default' filepath='include/linux/pm.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='autosuspend_delay' type-id='95e97e5e' visibility='default' filepath='include/linux/pm.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='last_busy' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='active_time' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='suspended_time' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='accounting_timestamp' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='subsys_data' type-id='77415389' visibility='default' filepath='include/linux/pm.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='set_latency_tolerance' type-id='c3d2558f' visibility='default' filepath='include/linux/pm.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='qos' type-id='b991f562' visibility='default' filepath='include/linux/pm.h' line='630' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_syscall_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='172' column='1' id='91f5bcb7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='show_options' type-id='efd5496b' visibility='default' filepath='include/linux/kernfs.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mkdir' type-id='58d10a98' visibility='default' filepath='include/linux/kernfs.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rmdir' type-id='0b56752f' visibility='default' filepath='include/linux/kernfs.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rename' type-id='aea90108' visibility='default' filepath='include/linux/kernfs.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='show_path' type-id='26692209' visibility='default' filepath='include/linux/kernfs.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='186' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_struct' size-in-bits='30208' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='636' column='1' id='bc3f1924'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='thread_info' type-id='575a2c7a' visibility='default' filepath='include/linux/sched.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state' type-id='5efddaac' visibility='default' filepath='include/linux/sched.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='stack' type-id='eaa32e2f' visibility='default' filepath='include/linux/sched.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='include/linux/sched.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ptrace' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wake_entry' type-id='c5ccfee8' visibility='default' filepath='include/linux/sched.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='on_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='wakee_flips' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='wakee_flip_decay_ts' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='last_wakee' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='recent_used_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='wake_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='678' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='on_rq' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='prio' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='static_prio' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='normal_prio' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rt_priority' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='sched_class' type-id='162b4cce' visibility='default' filepath='include/linux/sched.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='se' type-id='2561fcb2' visibility='default' filepath='include/linux/sched.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='rt' type-id='29843697' visibility='default' filepath='include/linux/sched.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='sched_task_group' type-id='3c32f9de' visibility='default' filepath='include/linux/sched.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='dl' type-id='2d494b2d' visibility='default' filepath='include/linux/sched.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='uclamp_req' type-id='c6e3c250' visibility='default' filepath='include/linux/sched.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='uclamp' type-id='c6e3c250' visibility='default' filepath='include/linux/sched.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='preempt_notifiers' type-id='e151255a' visibility='default' filepath='include/linux/sched.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='policy' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8416'>
+          <var-decl name='nr_cpus_allowed' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='cpus_ptr' type-id='af4bd535' visibility='default' filepath='include/linux/sched.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='cpus_mask' type-id='90bc6bed' visibility='default' filepath='include/linux/sched.h' line='720' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='rcu_read_lock_nesting' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8608'>
+          <var-decl name='rcu_read_unlock_special' type-id='a324790e' visibility='default' filepath='include/linux/sched.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='rcu_node_entry' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='rcu_blocked_node' type-id='d5d06540' visibility='default' filepath='include/linux/sched.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='rcu_tasks_nvcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='rcu_tasks_holdout' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8904'>
+          <var-decl name='rcu_tasks_idx' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8928'>
+          <var-decl name='rcu_tasks_idle_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='rcu_tasks_holdout_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='sched_info' type-id='59ddd03d' visibility='default' filepath='include/linux/sched.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='tasks' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='pushable_tasks' type-id='e3a91a7c' visibility='default' filepath='include/linux/sched.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='pushable_dl_tasks' type-id='2a8a6332' visibility='default' filepath='include/linux/sched.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='mm' type-id='df4b7819' visibility='default' filepath='include/linux/sched.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='active_mm' type-id='df4b7819' visibility='default' filepath='include/linux/sched.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='vmacache' type-id='4f79f8f3' visibility='default' filepath='include/linux/sched.h' line='749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='rss_stat' type-id='dfedb05a' visibility='default' filepath='include/linux/sched.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10592'>
+          <var-decl name='exit_state' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='exit_code' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10656'>
+          <var-decl name='exit_signal' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='pdeath_signal' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='jobctl' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='personality' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='sched_reset_on_fork' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='sched_contributes_to_load' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='sched_migrated' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='sched_remote_wakeup' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='sched_psi_wake_requeue' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='in_execve' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='in_iowait' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='in_user_fault' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='no_cgroup_migration' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='frozen' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='use_memdelay' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='atomic_flags' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='restart_block' type-id='45e819d6' visibility='default' filepath='include/linux/sched.h' line='804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='pid' type-id='587f89d2' visibility='default' filepath='include/linux/sched.h' line='806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11424'>
+          <var-decl name='tgid' type-id='587f89d2' visibility='default' filepath='include/linux/sched.h' line='807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11456'>
+          <var-decl name='stack_canary' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='real_parent' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='820' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='parent' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='823' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='828' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='sibling' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='group_leader' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='830' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='ptraced' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='ptrace_entry' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='thread_pid' type-id='b94e5398' visibility='default' filepath='include/linux/sched.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='pid_links' type-id='3f6e320a' visibility='default' filepath='include/linux/sched.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='thread_group' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='thread_node' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='vfork_done' type-id='389faaf7' visibility='default' filepath='include/linux/sched.h' line='847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='set_child_tid' type-id='7292109c' visibility='default' filepath='include/linux/sched.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='clear_child_tid' type-id='7292109c' visibility='default' filepath='include/linux/sched.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='utime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13312'>
+          <var-decl name='stime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='gtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13440'>
+          <var-decl name='time_in_state' type-id='3df9fd28' visibility='default' filepath='include/linux/sched.h' line='863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='max_state' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13568'>
+          <var-decl name='prev_cputime' type-id='9c7bf560' visibility='default' filepath='include/linux/sched.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13760'>
+          <var-decl name='nvcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13824'>
+          <var-decl name='nivcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13888'>
+          <var-decl name='start_time' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13952'>
+          <var-decl name='real_start_time' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14016'>
+          <var-decl name='min_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14080'>
+          <var-decl name='maj_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14144'>
+          <var-decl name='posix_cputimers' type-id='1069de27' visibility='default' filepath='include/linux/sched.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14784'>
+          <var-decl name='ptracer_cred' type-id='bc33861a' visibility='default' filepath='include/linux/sched.h' line='894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14848'>
+          <var-decl name='real_cred' type-id='bc33861a' visibility='default' filepath='include/linux/sched.h' line='897' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14912'>
+          <var-decl name='cred' type-id='bc33861a' visibility='default' filepath='include/linux/sched.h' line='900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14976'>
+          <var-decl name='cached_requested_key' type-id='204a4632' visibility='default' filepath='include/linux/sched.h' line='904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15040'>
+          <var-decl name='comm' type-id='ac1fa8c0' visibility='default' filepath='include/linux/sched.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15168'>
+          <var-decl name='nameidata' type-id='26452515' visibility='default' filepath='include/linux/sched.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15232'>
+          <var-decl name='fs' type-id='08890290' visibility='default' filepath='include/linux/sched.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15296'>
+          <var-decl name='files' type-id='16c53416' visibility='default' filepath='include/linux/sched.h' line='930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15360'>
+          <var-decl name='nsproxy' type-id='dc5ce118' visibility='default' filepath='include/linux/sched.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15424'>
+          <var-decl name='signal' type-id='a91cd5f7' visibility='default' filepath='include/linux/sched.h' line='936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15488'>
+          <var-decl name='sighand' type-id='32cc1711' visibility='default' filepath='include/linux/sched.h' line='937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15552'>
+          <var-decl name='blocked' type-id='daf33c64' visibility='default' filepath='include/linux/sched.h' line='938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15616'>
+          <var-decl name='real_blocked' type-id='daf33c64' visibility='default' filepath='include/linux/sched.h' line='939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15680'>
+          <var-decl name='saved_sigmask' type-id='daf33c64' visibility='default' filepath='include/linux/sched.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15744'>
+          <var-decl name='pending' type-id='7b5c012d' visibility='default' filepath='include/linux/sched.h' line='942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15936'>
+          <var-decl name='sas_ss_sp' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16000'>
+          <var-decl name='sas_ss_size' type-id='b59d7dce' visibility='default' filepath='include/linux/sched.h' line='944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16064'>
+          <var-decl name='sas_ss_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16128'>
+          <var-decl name='task_works' type-id='69c138b1' visibility='default' filepath='include/linux/sched.h' line='947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16192'>
+          <var-decl name='audit_context' type-id='a9f319d2' visibility='default' filepath='include/linux/sched.h' line='951' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16256'>
+          <var-decl name='loginuid' type-id='d80b72e6' visibility='default' filepath='include/linux/sched.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16288'>
+          <var-decl name='sessionid' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16320'>
+          <var-decl name='seccomp' type-id='298af459' visibility='default' filepath='include/linux/sched.h' line='956' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16448'>
+          <var-decl name='parent_exec_id' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16512'>
+          <var-decl name='self_exec_id' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='960' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16576'>
+          <var-decl name='alloc_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/sched.h' line='963' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16608'>
+          <var-decl name='pi_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/sched.h' line='966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16640'>
+          <var-decl name='wake_q' type-id='69970be2' visibility='default' filepath='include/linux/sched.h' line='968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16704'>
+          <var-decl name='pi_waiters' type-id='6fe1603d' visibility='default' filepath='include/linux/sched.h' line='972' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16832'>
+          <var-decl name='pi_top_task' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16896'>
+          <var-decl name='pi_blocked_on' type-id='54d4ed50' visibility='default' filepath='include/linux/sched.h' line='976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16960'>
+          <var-decl name='journal_info' type-id='eaa32e2f' visibility='default' filepath='include/linux/sched.h' line='1017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17024'>
+          <var-decl name='bio_list' type-id='ee802604' visibility='default' filepath='include/linux/sched.h' line='1020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17088'>
+          <var-decl name='plug' type-id='39944481' visibility='default' filepath='include/linux/sched.h' line='1024' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17152'>
+          <var-decl name='reclaim_state' type-id='c78f98c0' visibility='default' filepath='include/linux/sched.h' line='1028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17216'>
+          <var-decl name='backing_dev_info' type-id='ef4fae1b' visibility='default' filepath='include/linux/sched.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17280'>
+          <var-decl name='io_context' type-id='d042cfad' visibility='default' filepath='include/linux/sched.h' line='1032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17344'>
+          <var-decl name='capture_control' type-id='f886696f' visibility='default' filepath='include/linux/sched.h' line='1035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17408'>
+          <var-decl name='ptrace_message' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='1038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17472'>
+          <var-decl name='last_siginfo' type-id='3638c201' visibility='default' filepath='include/linux/sched.h' line='1039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17536'>
+          <var-decl name='ioac' type-id='ca075c7f' visibility='default' filepath='include/linux/sched.h' line='1041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18048'>
+          <var-decl name='psi_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='1044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18112'>
+          <var-decl name='acct_rss_mem1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18176'>
+          <var-decl name='acct_vm_mem1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18240'>
+          <var-decl name='acct_timexpd' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18304'>
+          <var-decl name='mems_allowed' type-id='6a7d16bb' visibility='default' filepath='include/linux/sched.h' line='1056' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18368'>
+          <var-decl name='mems_allowed_seq' type-id='e14c3b11' visibility='default' filepath='include/linux/sched.h' line='1058' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18400'>
+          <var-decl name='cpuset_mem_spread_rotor' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1059' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18432'>
+          <var-decl name='cpuset_slab_spread_rotor' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1060' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18496'>
+          <var-decl name='cgroups' type-id='85d57723' visibility='default' filepath='include/linux/sched.h' line='1064' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18560'>
+          <var-decl name='cg_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='1066' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18688'>
+          <var-decl name='robust_list' type-id='c44b3996' visibility='default' filepath='include/linux/sched.h' line='1073' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18752'>
+          <var-decl name='compat_robust_list' type-id='917bb1c5' visibility='default' filepath='include/linux/sched.h' line='1075' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18816'>
+          <var-decl name='pi_state_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='1077' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18944'>
+          <var-decl name='pi_state_cache' type-id='0bbc9f87' visibility='default' filepath='include/linux/sched.h' line='1078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19008'>
+          <var-decl name='futex_exit_mutex' type-id='925167dc' visibility='default' filepath='include/linux/sched.h' line='1079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19264'>
+          <var-decl name='futex_state' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='1080' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='perf_event_ctxp' type-id='c7e7059f' visibility='default' filepath='include/linux/sched.h' line='1083' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19456'>
+          <var-decl name='perf_event_mutex' type-id='925167dc' visibility='default' filepath='include/linux/sched.h' line='1084' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19712'>
+          <var-decl name='perf_event_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='1085' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='tlb_ubc' type-id='a3d9f566' visibility='default' filepath='include/linux/sched.h' line='1156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='' type-id='b45135d0' visibility='default' filepath='include/linux/sched.h' line='1158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19968'>
+          <var-decl name='splice_pipe' type-id='15d29710' visibility='default' filepath='include/linux/sched.h' line='1164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='task_frag' type-id='06c0432f' visibility='default' filepath='include/linux/sched.h' line='1166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20160'>
+          <var-decl name='nr_dirtied' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20192'>
+          <var-decl name='nr_dirtied_pause' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20224'>
+          <var-decl name='dirty_paused_when' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='1183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20288'>
+          <var-decl name='timer_slack_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20352'>
+          <var-decl name='default_timer_slack_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20416'>
+          <var-decl name='trace' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='1223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20480'>
+          <var-decl name='trace_recursion' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='1226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20544'>
+          <var-decl name='memcg_in_oom' type-id='223696fb' visibility='default' filepath='include/linux/sched.h' line='1252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20608'>
+          <var-decl name='memcg_oom_gfp_mask' type-id='3eb7c31c' visibility='default' filepath='include/linux/sched.h' line='1253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20640'>
+          <var-decl name='memcg_oom_order' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20672'>
+          <var-decl name='memcg_nr_pages_over_high' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='1257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20736'>
+          <var-decl name='active_memcg' type-id='223696fb' visibility='default' filepath='include/linux/sched.h' line='1260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20800'>
+          <var-decl name='throttle_queue' type-id='e7d2a5fc' visibility='default' filepath='include/linux/sched.h' line='1264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20864'>
+          <var-decl name='utask' type-id='9d2cef34' visibility='default' filepath='include/linux/sched.h' line='1268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20928'>
+          <var-decl name='pagefault_disabled' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20992'>
+          <var-decl name='oom_reaper_list' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='1279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21056'>
+          <var-decl name='stack_vm_area' type-id='d295dab2' visibility='default' filepath='include/linux/sched.h' line='1282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21120'>
+          <var-decl name='stack_refcount' type-id='64615833' visibility='default' filepath='include/linux/sched.h' line='1286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21184'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/sched.h' line='1293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21248'>
+          <var-decl name='android_vendor_data1' type-id='24a375b2' visibility='default' filepath='include/linux/sched.h' line='1301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21376'>
+          <var-decl name='android_oem_data1' type-id='24a375b2' visibility='default' filepath='include/linux/sched.h' line='1302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21504'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21568'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21632'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21696'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21760'>
+          <var-decl name='android_kabi_reserved5' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21824'>
+          <var-decl name='android_kabi_reserved6' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21888'>
+          <var-decl name='android_kabi_reserved7' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21952'>
+          <var-decl name='android_kabi_reserved8' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22016'>
+          <var-decl name='thread' type-id='0c8a83c7' visibility='default' filepath='include/linux/sched.h' line='1320' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='worker_pool' size-in-bits='7168' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='151' column='1' id='19ea21fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='kernel/workqueue.c' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='node' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='kernel/workqueue.c' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='watchdog_ts' type-id='7359adad' visibility='default' filepath='kernel/workqueue.c' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='worklist' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nr_workers' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='nr_idle' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='idle_list' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='idle_timer' type-id='abe41e67' visibility='default' filepath='kernel/workqueue.c' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mayday_timer' type-id='abe41e67' visibility='default' filepath='kernel/workqueue.c' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='busy_hash' type-id='53b70d6c' visibility='default' filepath='kernel/workqueue.c' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='manager' type-id='50a159c7' visibility='default' filepath='kernel/workqueue.c' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='workers' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='detach_completion' type-id='389faaf7' visibility='default' filepath='kernel/workqueue.c' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='worker_ida' type-id='46ce60fb' visibility='default' filepath='kernel/workqueue.c' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='attrs' type-id='cfd15e7e' visibility='default' filepath='kernel/workqueue.c' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='hash_node' type-id='03a4a074' visibility='default' filepath='kernel/workqueue.c' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='refcnt' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='nr_running' type-id='49178f86' visibility='default' filepath='kernel/workqueue.c' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/workqueue.c' line='194' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xarray' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/xarray.h' line='292' column='1' id='d39738ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xa_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/xarray.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='xa_flags' type-id='3eb7c31c' visibility='default' filepath='include/linux/xarray.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='xa_head' type-id='eaa32e2f' visibility='default' filepath='include/linux/xarray.h' line='296' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='1a4194ca' size-in-bits='64' id='b347e5ac'/>
+      <typedef-decl name='dev_t' type-id='8f336000' filepath='include/linux/types.h' line='16' column='1' id='8504f260'/>
+      <pointer-type-def type-id='beb5fff3' size-in-bits='64' id='17b1add7'/>
+      <pointer-type-def type-id='91ce1af9' size-in-bits='64' id='3df9fd28'/>
+      <pointer-type-def type-id='fb2144e8' size-in-bits='64' id='dd787f72'/>
+      <pointer-type-def type-id='c96d591d' size-in-bits='64' id='f1825e09'/>
+      <pointer-type-def type-id='127ce78a' size-in-bits='64' id='6ba28d1c'/>
+      <pointer-type-def type-id='943685e6' size-in-bits='64' id='a46b05a0'/>
+      <pointer-type-def type-id='749378a8' size-in-bits='64' id='b6ba26fa'/>
+      <pointer-type-def type-id='82d9d5d4' size-in-bits='64' id='a9f319d2'/>
+      <pointer-type-def type-id='c0badb3b' size-in-bits='64' id='ef4fae1b'/>
+      <pointer-type-def type-id='096280be' size-in-bits='64' id='ee802604'/>
+      <pointer-type-def type-id='718a7cd9' size-in-bits='64' id='39944481'/>
+      <pointer-type-def type-id='978e8e27' size-in-bits='64' id='f886696f'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='128' id='ac1fa8c0'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <pointer-type-def type-id='1b9c6d35' size-in-bits='64' id='917bb1c5'/>
+      <pointer-type-def type-id='2cd82b3d' size-in-bits='64' id='af4bd535'/>
+      <pointer-type-def type-id='bca91994' size-in-bits='64' id='bc33861a'/>
+      <qualified-type-def type-id='bdae35f4' const='yes' id='683a8a93'/>
+      <qualified-type-def type-id='d45f2b4f' const='yes' id='512ac7cc'/>
+      <pointer-type-def type-id='60263890' size-in-bits='64' id='162b4cce'/>
+      <pointer-type-def type-id='afbeac63' size-in-bits='64' id='85d57723'/>
+      <pointer-type-def type-id='7d93f824' size-in-bits='64' id='b991f562'/>
+      <enum-decl name='dl_dev_state' filepath='include/linux/device.h' line='1133' column='1' id='070abca2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DL_DEV_NO_DRIVER' value='0'/>
+        <enumerator name='DL_DEV_PROBING' value='1'/>
+        <enumerator name='DL_DEV_DRIVER_BOUND' value='2'/>
+        <enumerator name='DL_DEV_UNBINDING' value='3'/>
+      </enum-decl>
+      <enum-decl name='rpm_request' filepath='include/linux/pm.h' line='518' column='1' id='2418515b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RPM_REQ_NONE' value='0'/>
+        <enumerator name='RPM_REQ_IDLE' value='1'/>
+        <enumerator name='RPM_REQ_SUSPEND' value='2'/>
+        <enumerator name='RPM_REQ_AUTOSUSPEND' value='3'/>
+        <enumerator name='RPM_REQ_RESUME' value='4'/>
+      </enum-decl>
+      <enum-decl name='rpm_status' filepath='include/linux/pm.h' line='496' column='1' id='3c1b7fd8'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RPM_ACTIVE' value='0'/>
+        <enumerator name='RPM_RESUMING' value='1'/>
+        <enumerator name='RPM_SUSPENDED' value='2'/>
+        <enumerator name='RPM_SUSPENDING' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='bccdf330' size-in-bits='64' id='16c53416'/>
+      <pointer-type-def type-id='7dc87302' size-in-bits='64' id='08890290'/>
+      <pointer-type-def type-id='62bd013f' size-in-bits='64' id='0bbc9f87'/>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='4096' id='53b70d6c'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='03a4a074' size-in-bits='512' id='3f6e320a'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='a71373a3' size-in-bits='64' id='0b56752f'/>
+      <pointer-type-def type-id='e1ee975e' size-in-bits='64' id='58d10a98'/>
+      <pointer-type-def type-id='8e42c936' size-in-bits='64' id='aea90108'/>
+      <pointer-type-def type-id='774cf1e5' size-in-bits='64' id='26692209'/>
+      <pointer-type-def type-id='c655c7b7' size-in-bits='64' id='efd5496b'/>
+      <pointer-type-def type-id='95e97e5e' size-in-bits='64' id='7292109c'/>
+      <pointer-type-def type-id='d002899d' size-in-bits='64' id='d042cfad'/>
+      <pointer-type-def type-id='22ec9634' size-in-bits='64' id='3638c201'/>
+      <pointer-type-def type-id='128d0ac4' size-in-bits='64' id='204a4632'/>
+      <pointer-type-def type-id='11c8601b' size-in-bits='64' id='223696fb'/>
+      <pointer-type-def type-id='311626f1' size-in-bits='64' id='df4b7819'/>
+      <pointer-type-def type-id='0319fc05' size-in-bits='64' id='26452515'/>
+      <pointer-type-def type-id='b82b9d3a' size-in-bits='64' id='dc5ce118'/>
+      <array-type-def dimensions='1' type-id='b9419dc5' size-in-bits='128' id='c7e7059f'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='d10e968a' size-in-bits='64' id='b94e5398'/>
+      <pointer-type-def type-id='bed94322' size-in-bits='64' id='15d29710'/>
+      <pointer-type-def type-id='1269b801' size-in-bits='64' id='77415389'/>
+      <pointer-type-def type-id='67b24a02' size-in-bits='64' id='d5d06540'/>
+      <pointer-type-def type-id='b9b792e2' size-in-bits='64' id='c78f98c0'/>
+      <pointer-type-def type-id='caf652c6' size-in-bits='64' id='e7d2a5fc'/>
+      <pointer-type-def type-id='999b38a0' size-in-bits='64' id='c44b3996'/>
+      <pointer-type-def type-id='afb04a62' size-in-bits='64' id='54d4ed50'/>
+      <pointer-type-def type-id='317e3dc9' size-in-bits='64' id='32cc1711'/>
+      <pointer-type-def type-id='9a4619bf' size-in-bits='64' id='a91cd5f7'/>
+      <class-decl name='bus_type' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='123' column='1' id='b31bfc8a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev_name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev_root' type-id='fa0b179b' visibility='default' filepath='include/linux/device.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bus_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='drv_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='match' type-id='2f28f04c' visibility='default' filepath='include/linux/device.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='uevent' type-id='22deb949' visibility='default' filepath='include/linux/device.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='probe' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sync_state' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='remove' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='shutdown' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='online' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='offline' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='suspend' type-id='df416a94' visibility='default' filepath='include/linux/device.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='resume' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='num_vf' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='dma_configure' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='pm' type-id='3fab024e' visibility='default' filepath='include/linux/device.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='iommu_ops' type-id='f1ac64d0' visibility='default' filepath='include/linux/device.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='p' type-id='5da77304' visibility='default' filepath='include/linux/device.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='lock_key' type-id='47479831' visibility='default' filepath='include/linux/device.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='need_parent_lock' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='class' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='600' column='1' id='fd48a067'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/device.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='class_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev_kobj' type-id='d30bdc51' visibility='default' filepath='include/linux/device.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev_uevent' type-id='22deb949' visibility='default' filepath='include/linux/device.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='devnode' type-id='8cd77b5f' visibility='default' filepath='include/linux/device.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='class_release' type-id='bea4d586' visibility='default' filepath='include/linux/device.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev_release' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='shutdown_pre' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ns_type' type-id='47547dee' visibility='default' filepath='include/linux/device.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='namespace' type-id='e6c297c2' visibility='default' filepath='include/linux/device.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_ownership' type-id='f5f7cbd4' visibility='default' filepath='include/linux/device.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pm' type-id='3fab024e' visibility='default' filepath='include/linux/device.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='p' type-id='5da77304' visibility='default' filepath='include/linux/device.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='628' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cma' size-in-bits='576' is-struct='yes' visibility='default' filepath='mm/cma.h' line='5' column='1' id='6110442c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base_pfn' type-id='7359adad' visibility='default' filepath='mm/cma.h' line='6' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='7359adad' visibility='default' filepath='mm/cma.h' line='7' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bitmap' type-id='1d2c2b85' visibility='default' filepath='mm/cma.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='order_per_bit' type-id='f0981eeb' visibility='default' filepath='mm/cma.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='mm/cma.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='mm/cma.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpumask' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/cpumask.h' line='17' column='1' id='1354385d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bits' type-id='f066dd3c' visibility='default' filepath='include/linux/cpumask.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pin_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='038d05bd'/>
+      <class-decl name='dev_pm_domain' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='649' column='1' id='7c94eaa3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='3ea82289' visibility='default' filepath='include/linux/pm.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='detach' type-id='7d18218b' visibility='default' filepath='include/linux/pm.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='activate' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='sync' type-id='dd787f72' visibility='default' filepath='include/linux/pm.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dismiss' type-id='dd787f72' visibility='default' filepath='include/linux/pm.h' line='654' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_dma_parameters' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='1022' column='1' id='37251e77'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_segment_size' type-id='f0981eeb' visibility='default' filepath='include/linux/device.h' line='1027' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='segment_boundary_mask' type-id='7359adad' visibility='default' filepath='include/linux/device.h' line='1028' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_driver' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='389' column='1' id='fe007c02'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bus' type-id='5e2671f8' visibility='default' filepath='include/linux/device.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/device.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mod_name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='suppress_bind_attrs' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='probe_type' type-id='171c98b7' visibility='default' filepath='include/linux/device.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_match_table' type-id='e5ce629e' visibility='default' filepath='include/linux/device.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='acpi_match_table' type-id='5b62aa60' visibility='default' filepath='include/linux/device.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='probe' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sync_state' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='remove' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='shutdown' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='suspend' type-id='df416a94' visibility='default' filepath='include/linux/device.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='resume' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dev_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='pm' type-id='3fab024e' visibility='default' filepath='include/linux/device.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='coredump' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='p' type-id='52abf1d3' visibility='default' filepath='include/linux/device.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='419' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_node' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/linux/of.h' line='51' column='1' id='6661a698'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/of.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phandle' type-id='6e394fba' visibility='default' filepath='include/linux/of.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='full_name' type-id='80f4b756' visibility='default' filepath='include/linux/of.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fwnode' type-id='d5ace205' visibility='default' filepath='include/linux/of.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='properties' type-id='ddcd89c6' visibility='default' filepath='include/linux/of.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='deadprops' type-id='ddcd89c6' visibility='default' filepath='include/linux/of.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='parent' type-id='9a537bbe' visibility='default' filepath='include/linux/of.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='child' type-id='9a537bbe' visibility='default' filepath='include/linux/of.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='sibling' type-id='9a537bbe' visibility='default' filepath='include/linux/of.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/of.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='_flags' type-id='7359adad' visibility='default' filepath='include/linux/of.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/of.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_private' is-struct='yes' visibility='default' is-declaration-only='yes' id='d066d157'/>
+      <class-decl name='dma_coherent_mem' is-struct='yes' visibility='default' is-declaration-only='yes' id='5d5ff7f6'/>
+      <class-decl name='fwnode_handle' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fwnode.h' line='18' column='1' id='d5ace205'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='secondary' type-id='4a935625' visibility='default' filepath='include/linux/fwnode.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='b4ff6cf8' visibility='default' filepath='include/linux/fwnode.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/fwnode.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fwnode.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fwnode.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fwnode.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fwnode.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hlist_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/types.h' line='185' column='1' id='e151255a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='08cbad52' visibility='default' filepath='include/linux/types.h' line='186' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hrtimer' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/hrtimer.h' line='118' column='1' id='b6993efc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='fe3acb42' visibility='default' filepath='include/linux/hrtimer.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='_softexpires' type-id='fbc017ef' visibility='default' filepath='include/linux/hrtimer.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='function' type-id='ca9b3bbf' visibility='default' filepath='include/linux/hrtimer.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='base' type-id='730f4667' visibility='default' filepath='include/linux/hrtimer.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='state' type-id='f9b06939' visibility='default' filepath='include/linux/hrtimer.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='is_rel' type-id='f9b06939' visibility='default' filepath='include/linux/hrtimer.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='is_soft' type-id='f9b06939' visibility='default' filepath='include/linux/hrtimer.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='472'>
+          <var-decl name='is_hard' type-id='f9b06939' visibility='default' filepath='include/linux/hrtimer.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/hrtimer.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ida' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/idr.h' line='244' column='1' id='46ce60fb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xa' type-id='d39738ac' visibility='default' filepath='include/linux/idr.h' line='245' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_fwspec' is-struct='yes' visibility='default' is-declaration-only='yes' id='0d6f83ff'/>
+      <class-decl name='iommu_group' size-in-bits='2048' is-struct='yes' visibility='default' filepath='drivers/iommu/iommu.c' line='35' column='1' id='2352f3ae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='drivers/iommu/iommu.c' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='devices_kobj' type-id='d30bdc51' visibility='default' filepath='drivers/iommu/iommu.c' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='devices' type-id='72f469ec' visibility='default' filepath='drivers/iommu/iommu.c' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='drivers/iommu/iommu.c' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='notifier' type-id='708c2394' visibility='default' filepath='drivers/iommu/iommu.c' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='iommu_data' type-id='eaa32e2f' visibility='default' filepath='drivers/iommu/iommu.c' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='iommu_data_release' type-id='b7f9d8e6' visibility='default' filepath='drivers/iommu/iommu.c' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='drivers/iommu/iommu.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='drivers/iommu/iommu.c' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='default_domain' type-id='bff05edb' visibility='default' filepath='drivers/iommu/iommu.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='domain' type-id='bff05edb' visibility='default' filepath='drivers/iommu/iommu.c' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_param' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='366' column='1' id='6c784694'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/iommu.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fault_param' type-id='0a9b173b' visibility='default' filepath='include/linux/iommu.h' line='368' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_domain' is-struct='yes' visibility='default' is-declaration-only='yes' id='a667f60e'/>
+      <class-decl name='llist_node' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/llist.h' line='58' column='1' id='c5ccfee8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='023b769e' visibility='default' filepath='include/linux/llist.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='page_frag' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mm_types_task.h' line='64' column='1' id='06c0432f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page' type-id='02f11ed4' visibility='default' filepath='include/linux/mm_types_task.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/linux/mm_types_task.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='size' type-id='3f1a6b60' visibility='default' filepath='include/linux/mm_types_task.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='plist_node' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/plist.h' line='83' column='1' id='e3a91a7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prio' type-id='95e97e5e' visibility='default' filepath='include/linux/plist.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prio_list' type-id='72f469ec' visibility='default' filepath='include/linux/plist.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='node_list' type-id='72f469ec' visibility='default' filepath='include/linux/plist.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='posix_cputimers' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/posix-timers.h' line='122' column='1' id='1069de27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bases' type-id='0e685653' visibility='default' filepath='include/linux/posix-timers.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='timers_active' type-id='f0981eeb' visibility='default' filepath='include/linux/posix-timers.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='expiry_active' type-id='f0981eeb' visibility='default' filepath='include/linux/posix-timers.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='prev_cputime' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='244' column='1' id='9c7bf560'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='utime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/sched.h' line='248' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rb_root_cached' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/rbtree.h' line='125' column='1' id='6fe1603d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_root' type-id='dec44472' visibility='default' filepath='include/linux/rbtree.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rb_leftmost' type-id='e6532500' visibility='default' filepath='include/linux/rbtree.h' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='restart_block' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/restart_block.h' line='25' column='1' id='45e819d6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fn' type-id='d5b25e9c' visibility='default' filepath='include/linux/restart_block.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='7f825f2d' visibility='default' filepath='include/linux/restart_block.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_dl_entity' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='511' column='1' id='2d494b2d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='include/linux/sched.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dl_runtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dl_deadline' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dl_period' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dl_bw' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dl_density' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='runtime' type-id='9b7c55ef' visibility='default' filepath='include/linux/sched.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='deadline' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='dl_throttled' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='dl_boosted' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='dl_yielded' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='dl_non_contending' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='dl_overrun' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dl_timer' type-id='b6993efc' visibility='default' filepath='include/linux/sched.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='inactive_timer' type-id='b6993efc' visibility='default' filepath='include/linux/sched.h' line='577' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_entity' size-in-bits='4096' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='446' column='1' id='2561fcb2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='load' type-id='ad979632' visibility='default' filepath='include/linux/sched.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='runnable_weight' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='run_node' type-id='2a8a6332' visibility='default' filepath='include/linux/sched.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='group_node' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='on_rq' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='exec_start' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sum_exec_runtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vruntime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='prev_sum_exec_runtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_migrations' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='statistics' type-id='4ebe02b2' visibility='default' filepath='include/linux/sched.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='depth' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='parent' type-id='ff2b3d10' visibility='default' filepath='include/linux/sched.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='cfs_rq' type-id='a6892387' visibility='default' filepath='include/linux/sched.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='my_q' type-id='a6892387' visibility='default' filepath='include/linux/sched.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='avg' type-id='629c8d83' visibility='default' filepath='include/linux/sched.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='485' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='287' column='1' id='59ddd03d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pcount' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='run_delay' type-id='3a47d82b' visibility='default' filepath='include/linux/sched.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='last_arrival' type-id='3a47d82b' visibility='default' filepath='include/linux/sched.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_queued' type-id='3a47d82b' visibility='default' filepath='include/linux/sched.h' line='303' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_rt_entity' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='488' column='1' id='29843697'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='run_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timeout' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='watchdog_stamp' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='time_slice' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='on_rq' type-id='8efea9e5' visibility='default' filepath='include/linux/sched.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='on_list' type-id='8efea9e5' visibility='default' filepath='include/linux/sched.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='back' type-id='9eead88f' visibility='default' filepath='include/linux/sched.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='508' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='seccomp' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/seccomp.h' line='30' column='1' id='298af459'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mode' type-id='95e97e5e' visibility='default' filepath='include/linux/seccomp.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='filter_count' type-id='49178f86' visibility='default' filepath='include/linux/seccomp.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='filter' type-id='2a128f5a' visibility='default' filepath='include/linux/seccomp.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sigpending' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/signal_types.h' line='30' column='1' id='7b5c012d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/signal_types.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='signal' type-id='daf33c64' visibility='default' filepath='include/linux/signal_types.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_io_accounting' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/task_io_accounting.h' line='12' column='1' id='ca075c7f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rchar' type-id='91ce1af9' visibility='default' filepath='include/linux/task_io_accounting.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wchar' type-id='91ce1af9' visibility='default' filepath='include/linux/task_io_accounting.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='syscr' type-id='91ce1af9' visibility='default' filepath='include/linux/task_io_accounting.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='syscw' type-id='91ce1af9' visibility='default' filepath='include/linux/task_io_accounting.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='syscfs' type-id='91ce1af9' visibility='default' filepath='include/linux/task_io_accounting.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='read_bytes' type-id='91ce1af9' visibility='default' filepath='include/linux/task_io_accounting.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write_bytes' type-id='91ce1af9' visibility='default' filepath='include/linux/task_io_accounting.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cancelled_write_bytes' type-id='91ce1af9' visibility='default' filepath='include/linux/task_io_accounting.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_rss_stat' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/mm_types_task.h' line='54' column='1' id='dfedb05a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='events' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types_task.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='2020bac4' visibility='default' filepath='include/linux/mm_types_task.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thread_info' size-in-bits='320' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='26' column='1' id='575a2c7a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr_limit' type-id='f079b4db' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ttbr0' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='9a29bfd9' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='shadow_call_stack' type-id='eaa32e2f' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thread_struct' size-in-bits='7808' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='127' column='1' id='0c8a83c7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_context' type-id='6a577ca5' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='uw' type-id='3bb05d08' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='fpsimd_cpu' type-id='f0981eeb' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='sve_state' type-id='eaa32e2f' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='sve_vl' type-id='f0981eeb' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5408'>
+          <var-decl name='sve_vl_onexec' type-id='f0981eeb' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='fault_address' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='fault_code' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='debug' type-id='2f821a8d' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tlbflush_unmap_batch' is-struct='yes' visibility='default' filepath='include/linux/mm_types_task.h' line='76' column='1' id='a3d9f566'/>
+      <class-decl name='vmacache' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/mm_types_task.h' line='34' column='1' id='4f79f8f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seqnum' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types_task.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vmas' type-id='ae25b7bc' visibility='default' filepath='include/linux/mm_types_task.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wake_q_node' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='632' column='1' id='69970be2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='b16791f0' visibility='default' filepath='include/linux/sched.h' line='633' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2d863538' size-in-bits='64' id='3c32f9de'/>
+      <typedef-decl name='__kernel_dev_t' type-id='19c2251e' filepath='include/linux/types.h' line='13' column='1' id='8f336000'/>
+      <typedef-decl name='cpumask_t' type-id='1354385d' filepath='include/linux/cpumask.h' line='17' column='1' id='90bc6bed'/>
+      <typedef-decl name='gfp_t' type-id='f0981eeb' filepath='include/linux/types.h' line='153' column='1' id='3eb7c31c'/>
+      <typedef-decl name='kuid_t' type-id='e8b29774' filepath='include/linux/uidgid.h' line='23' column='1' id='d80b72e6'/>
+      <typedef-decl name='nodemask_t' type-id='24d23dab' filepath='include/linux/nodemask.h' line='98' column='1' id='6a7d16bb'/>
+      <typedef-decl name='pid_t' type-id='63eb2bf2' filepath='include/linux/types.h' line='22' column='1' id='587f89d2'/>
+      <typedef-decl name='pm_message_t' type-id='c120b5da' filepath='include/linux/pm.h' line='52' column='1' id='08496218'/>
+      <typedef-decl name='raw_spinlock_t' type-id='f106d0e5' filepath='include/linux/spinlock_types.h' line='29' column='1' id='f5c90b3f'/>
+      <typedef-decl name='seqcount_t' type-id='3a74ff0b' filepath='include/linux/seqlock.h' line='53' column='1' id='e14c3b11'/>
+      <typedef-decl name='sigset_t' type-id='e6ea37b8' filepath='include/uapi/asm-generic/signal.h' line='92' column='1' id='daf33c64'/>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='128' id='24a375b2'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0888126c' size-in-bits='64' id='c6e3c250'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <union-decl name='rcu_special' size-in-bits='32' visibility='default' filepath='include/linux/sched.h' line='615' column='1' id='a324790e'>
+        <data-member access='private'>
+          <var-decl name='b' type-id='4edee319' visibility='default' filepath='include/linux/sched.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='s' type-id='19c2251e' visibility='default' filepath='include/linux/sched.h' line='622' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__35' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/sched.h' line='1158' column='1' id='b45135d0'>
+        <data-member access='private'>
+          <var-decl name='rcu_users' type-id='64615833' visibility='default' filepath='include/linux/sched.h' line='1159' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/sched.h' line='1160' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='98f6607e' size-in-bits='64' id='9d2cef34'/>
+      <pointer-type-def type-id='5f2f8da4' size-in-bits='64' id='d295dab2'/>
+      <pointer-type-def type-id='766eac03' size-in-bits='64' id='c3d2558f'/>
+      <qualified-type-def type-id='bd54fe1a' volatile='yes' id='5efddaac'/>
+      <pointer-type-def type-id='4657336c' size-in-bits='64' id='303e01fa'/>
+      <pointer-type-def type-id='152cd1b0' size-in-bits='64' id='1ea237a6'/>
+      <pointer-type-def type-id='feeb4c2f' size-in-bits='64' id='a6892387'/>
+      <pointer-type-def type-id='6a18482b' size-in-bits='64' id='8cd77b5f'/>
+      <pointer-type-def type-id='3c7ea80a' size-in-bits='64' id='5b62aa60'/>
+      <qualified-type-def type-id='90bc6bed' const='yes' id='2cd82b3d'/>
+      <qualified-type-def type-id='6739dd09' const='yes' id='bca91994'/>
+      <pointer-type-def type-id='86af1d10' size-in-bits='64' id='3fab024e'/>
+      <pointer-type-def type-id='2eb8da02' size-in-bits='64' id='b4ff6cf8'/>
+      <pointer-type-def type-id='9ce849da' size-in-bits='64' id='f1ac64d0'/>
+      <pointer-type-def type-id='a4a37730' size-in-bits='64' id='47547dee'/>
+      <pointer-type-def type-id='c46fad80' size-in-bits='64' id='e5ce629e'/>
+      <qualified-type-def type-id='74191d27' const='yes' id='60263890'/>
+      <pointer-type-def type-id='e44b8083' size-in-bits='64' id='52abf1d3'/>
+      <pointer-type-def type-id='9280516b' size-in-bits='64' id='ca9b3bbf'/>
+      <enum-decl name='probe_type' filepath='include/linux/device.h' line='338' column='1' id='171c98b7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PROBE_DEFAULT_STRATEGY' value='0'/>
+        <enumerator name='PROBE_PREFER_ASYNCHRONOUS' value='1'/>
+        <enumerator name='PROBE_FORCE_SYNCHRONOUS' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='1851ab9f' size-in-bits='64' id='730f4667'/>
+      <pointer-type-def type-id='374a88a9' size-in-bits='64' id='613d39f5'/>
+      <pointer-type-def type-id='63217e72' size-in-bits='64' id='2f28f04c'/>
+      <pointer-type-def type-id='9c1f445d' size-in-bits='64' id='22deb949'/>
+      <pointer-type-def type-id='aa70b8e2' size-in-bits='64' id='df416a94'/>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='128' id='2020bac4'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='80ef8feb' size-in-bits='64' id='bff05edb'/>
+      <pointer-type-def type-id='325adc8b' size-in-bits='64' id='0a9b173b'/>
+      <pointer-type-def type-id='c5ccfee8' size-in-bits='64' id='023b769e'/>
+      <pointer-type-def type-id='b68c3fba' size-in-bits='64' id='d5b25e9c'/>
+      <pointer-type-def type-id='a25ce1be' size-in-bits='64' id='02f11ed4'/>
+      <pointer-type-def type-id='9d67acd5' size-in-bits='64' id='b9419dc5'/>
+      <array-type-def dimensions='1' type-id='e710f78e' size-in-bits='576' id='0e685653'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='ebe3ac70' size-in-bits='64' id='ddcd89c6'/>
+      <pointer-type-def type-id='2561fcb2' size-in-bits='64' id='ff2b3d10'/>
+      <pointer-type-def type-id='29843697' size-in-bits='64' id='9eead88f'/>
+      <pointer-type-def type-id='e290c28c' size-in-bits='64' id='2a128f5a'/>
+      <class-decl name='audit_context' is-struct='yes' visibility='default' is-declaration-only='yes' id='82d9d5d4'/>
+      <class-decl name='backing_dev_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='c0badb3b'/>
+      <class-decl name='bio_list' is-struct='yes' visibility='default' is-declaration-only='yes' id='096280be'/>
+      <class-decl name='blk_plug' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='1171' column='1' id='718a7cd9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mq_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='1172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cb_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='1173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rq_count' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='1174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='multiple_queues' type-id='b50a4934' visibility='default' filepath='include/linux/blkdev.h' line='1175' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blocking_notifier_head' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='65' column='1' id='708c2394'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/notifier.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='head' type-id='d504f73d' visibility='default' filepath='include/linux/notifier.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='capture_control' is-struct='yes' visibility='default' is-declaration-only='yes' id='978e8e27'/>
+      <class-decl name='compat_robust_list_head' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/compat.h' line='378' column='1' id='1b9c6d35'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='bd51dd4a' visibility='default' filepath='include/linux/compat.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='futex_offset' type-id='abb906de' visibility='default' filepath='include/linux/compat.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list_op_pending' type-id='782d78af' visibility='default' filepath='include/linux/compat.h' line='381' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpu_context' size-in-bits='832' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='111' column='1' id='6a577ca5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x19' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='x20' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='x21' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='x22' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='x23' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='x24' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='x25' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='x26' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='x27' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='x28' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fp' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sp' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='pc' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='124' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='css_set' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='190' column='1' id='afbeac63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subsys' type-id='7975e215' visibility='default' filepath='include/linux/cgroup-defs.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='refcount' type-id='64615833' visibility='default' filepath='include/linux/cgroup-defs.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dom_cset' type-id='85d57723' visibility='default' filepath='include/linux/cgroup-defs.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dfl_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='nr_tasks' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tasks' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mg_tasks' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dying_tasks' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='task_iters' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='e_cset_node' type-id='e4e6d6c4' visibility='default' filepath='include/linux/cgroup-defs.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='threaded_csets' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='threaded_csets_node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='hlist' type-id='03a4a074' visibility='default' filepath='include/linux/cgroup-defs.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='cgrp_links' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='mg_preload_node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='mg_node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='mg_src_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='mg_dst_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='mg_dst_cset' type-id='85d57723' visibility='default' filepath='include/linux/cgroup-defs.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='dead' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/cgroup-defs.h' line='276' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='debug_info' size-in-bits='2176' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='98' column='1' id='2f821a8d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='suspended_step' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bps_disabled' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wps_disabled' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hbp_break' type-id='18b1b6ec' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hbp_watch' type-id='18b1b6ec' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='278' column='1' id='3ea82289'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='complete' type-id='dd787f72' visibility='default' filepath='include/linux/pm.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='suspend' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='resume' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='freeze' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='thaw' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='poweroff' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='restore' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='suspend_late' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='resume_early' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='freeze_late' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='thaw_early' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='poweroff_late' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='restore_early' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='suspend_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='resume_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='freeze_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='thaw_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='poweroff_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='restore_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='runtime_suspend' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='runtime_resume' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='runtime_idle' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='301' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_qos' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='121' column='1' id='7d93f824'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='resume_latency' type-id='4ad5b81b' visibility='default' filepath='include/linux/pm_qos.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='latency_tolerance' type-id='4ad5b81b' visibility='default' filepath='include/linux/pm_qos.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='freq' type-id='7ca99f8c' visibility='default' filepath='include/linux/pm_qos.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='flags' type-id='e0a9bd3c' visibility='default' filepath='include/linux/pm_qos.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='resume_latency_req' type-id='a80fd1bc' visibility='default' filepath='include/linux/pm_qos.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='latency_tolerance_req' type-id='a80fd1bc' visibility='default' filepath='include/linux/pm_qos.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='flags_req' type-id='a80fd1bc' visibility='default' filepath='include/linux/pm_qos.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_type' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='825' column='1' id='bdae35f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='826' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='827' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uevent' type-id='22deb949' visibility='default' filepath='include/linux/device.h' line='828' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='devnode' type-id='b72fdee5' visibility='default' filepath='include/linux/device.h' line='829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pm' type-id='3fab024e' visibility='default' filepath='include/linux/device.h' line='833' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_map_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/dma-mapping.h' line='80' column='1' id='d45f2b4f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alloc' type-id='06c31e09' visibility='default' filepath='include/linux/dma-mapping.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='free' type-id='d7b98f89' visibility='default' filepath='include/linux/dma-mapping.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mmap' type-id='f7114ca5' visibility='default' filepath='include/linux/dma-mapping.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_sgtable' type-id='295a92ed' visibility='default' filepath='include/linux/dma-mapping.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='map_page' type-id='7855184a' visibility='default' filepath='include/linux/dma-mapping.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='unmap_page' type-id='6407fd0f' visibility='default' filepath='include/linux/dma-mapping.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='map_sg' type-id='64452f48' visibility='default' filepath='include/linux/dma-mapping.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unmap_sg' type-id='772c77c9' visibility='default' filepath='include/linux/dma-mapping.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='map_resource' type-id='66c8694d' visibility='default' filepath='include/linux/dma-mapping.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='unmap_resource' type-id='6407fd0f' visibility='default' filepath='include/linux/dma-mapping.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sync_single_for_cpu' type-id='b97350f1' visibility='default' filepath='include/linux/dma-mapping.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sync_single_for_device' type-id='b97350f1' visibility='default' filepath='include/linux/dma-mapping.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='sync_sg_for_cpu' type-id='9ed36ca7' visibility='default' filepath='include/linux/dma-mapping.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='sync_sg_for_device' type-id='9ed36ca7' visibility='default' filepath='include/linux/dma-mapping.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='cache_sync' type-id='4935400d' visibility='default' filepath='include/linux/dma-mapping.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dma_supported' type-id='5aa1f3eb' visibility='default' filepath='include/linux/dma-mapping.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_required_mask' type-id='5dee5830' visibility='default' filepath='include/linux/dma-mapping.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='max_mapping_size' type-id='49f5e2e5' visibility='default' filepath='include/linux/dma-mapping.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='get_merge_boundary' type-id='1588722c' visibility='default' filepath='include/linux/dma-mapping.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-mapping.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-mapping.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-mapping.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-mapping.h' line='140' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='files_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='bccdf330'/>
+      <class-decl name='fs_struct' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fs_struct.h' line='9' column='1' id='7dc87302'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='users' type-id='95e97e5e' visibility='default' filepath='include/linux/fs_struct.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs_struct.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seq' type-id='e14c3b11' visibility='default' filepath='include/linux/fs_struct.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='umask' type-id='95e97e5e' visibility='default' filepath='include/linux/fs_struct.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='in_exec' type-id='95e97e5e' visibility='default' filepath='include/linux/fs_struct.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='root' type-id='b5382ece' visibility='default' filepath='include/linux/fs_struct.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pwd' type-id='b5382ece' visibility='default' filepath='include/linux/fs_struct.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='futex_pi_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='62bd013f'/>
+      <class-decl name='io_context' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/iocontext.h' line='99' column='1' id='d002899d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='f22a8abb' visibility='default' filepath='include/linux/iocontext.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='active_ref' type-id='49178f86' visibility='default' filepath='include/linux/iocontext.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nr_tasks' type-id='49178f86' visibility='default' filepath='include/linux/iocontext.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/iocontext.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ioprio' type-id='8efea9e5' visibility='default' filepath='include/linux/iocontext.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_batch_requests' type-id='95e97e5e' visibility='default' filepath='include/linux/iocontext.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='last_waited' type-id='7359adad' visibility='default' filepath='include/linux/iocontext.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='icq_tree' type-id='d39738ac' visibility='default' filepath='include/linux/iocontext.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='icq_hint' type-id='7c6e0e0c' visibility='default' filepath='include/linux/iocontext.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='icq_list' type-id='e151255a' visibility='default' filepath='include/linux/iocontext.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='release_work' type-id='ef9025d0' visibility='default' filepath='include/linux/iocontext.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/linux/key.h' line='172' column='1' id='128d0ac4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='include/linux/key.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='serial' type-id='c84025ab' visibility='default' filepath='include/linux/key.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='1a65b0a7' visibility='default' filepath='include/linux/key.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sem' type-id='f19fdb93' visibility='default' filepath='include/linux/key.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='user' type-id='23704f74' visibility='default' filepath='include/linux/key.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/key.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='' type-id='21f0eb77' visibility='default' filepath='include/linux/key.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='last_used_at' type-id='1afd27ac' visibility='default' filepath='include/linux/key.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/key.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='gid' type-id='094d8048' visibility='default' filepath='include/linux/key.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='perm' type-id='296adac1' visibility='default' filepath='include/linux/key.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='quotalen' type-id='8efea9e5' visibility='default' filepath='include/linux/key.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='datalen' type-id='8efea9e5' visibility='default' filepath='include/linux/key.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='state' type-id='a2185560' visibility='default' filepath='include/linux/key.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='' type-id='51bb2fb5' visibility='default' filepath='include/linux/key.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='' type-id='d5d77d48' visibility='default' filepath='include/linux/key.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='restrict_link' type-id='92daca01' visibility='default' filepath='include/linux/key.h' line='254' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='load_weight' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='322' column='1' id='ad979632'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='weight' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='inv_weight' type-id='19c2251e' visibility='default' filepath='include/linux/sched.h' line='324' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lock_class_key' is-struct='yes' visibility='default' filepath='include/linux/lockdep.h' line='459' column='1' id='47479831'/>
+      <class-decl name='mem_cgroup' is-struct='yes' visibility='default' is-declaration-only='yes' id='11c8601b'/>
+      <class-decl name='mm_struct' size-in-bits='7232' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='385' column='1' id='311626f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='37b0b969' visibility='default' filepath='include/linux/mm_types.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='cpu_bitmap' type-id='c99b5ecd' visibility='default' filepath='include/linux/mm_types.h' line='549' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nameidata' is-struct='yes' visibility='default' is-declaration-only='yes' id='0319fc05'/>
+      <class-decl name='nsproxy' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/nsproxy.h' line='31' column='1' id='b82b9d3a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/nsproxy.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='uts_ns' type-id='9d5923ed' visibility='default' filepath='include/linux/nsproxy.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ipc_ns' type-id='76ccea8d' visibility='default' filepath='include/linux/nsproxy.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mnt_ns' type-id='d60f4f10' visibility='default' filepath='include/linux/nsproxy.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pid_ns_for_children' type-id='b816e1d0' visibility='default' filepath='include/linux/nsproxy.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='net_ns' type-id='a2bff676' visibility='default' filepath='include/linux/nsproxy.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cgroup_ns' type-id='f774a955' visibility='default' filepath='include/linux/nsproxy.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pid' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/pid.h' line='59' column='1' id='d10e968a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='64615833' visibility='default' filepath='include/linux/pid.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='level' type-id='f0981eeb' visibility='default' filepath='include/linux/pid.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tasks' type-id='fc3a8480' visibility='default' filepath='include/linux/pid.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wait_pidfd' type-id='b5ab048f' visibility='default' filepath='include/linux/pid.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/pid.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='numbers' type-id='9a69aeec' visibility='default' filepath='include/linux/pid.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pipe_inode_info' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/pipe_fs_i.h' line='48' column='1' id='bed94322'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/pipe_fs_i.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/pipe_fs_i.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nrbufs' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='curbuf' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='buffers' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='readers' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='writers' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='files' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='waiting_writers' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='r_counter' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='w_counter' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='tmp_page' type-id='02f11ed4' visibility='default' filepath='include/linux/pipe_fs_i.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='fasync_readers' type-id='5bb9c75d' visibility='default' filepath='include/linux/pipe_fs_i.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fasync_writers' type-id='5bb9c75d' visibility='default' filepath='include/linux/pipe_fs_i.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bufs' type-id='e15f3242' visibility='default' filepath='include/linux/pipe_fs_i.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='user' type-id='273a7d34' visibility='default' filepath='include/linux/pipe_fs_i.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pm_message' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='50' column='1' id='c120b5da'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event' type-id='95e97e5e' visibility='default' filepath='include/linux/pm.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pm_subsys_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='530' column='1' id='1269b801'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/pm.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='refcount' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clock_list' type-id='72f469ec' visibility='default' filepath='include/linux/pm.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='domain_data' type-id='53e3a7d6' visibility='default' filepath='include/linux/pm.h' line='537' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcu_node' is-struct='yes' visibility='default' is-declaration-only='yes' id='67b24a02'/>
+      <class-decl name='reclaim_state' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/swap.h' line='131' column='1' id='b9b792e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reclaimed_slab' type-id='7359adad' visibility='default' filepath='include/linux/swap.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request_queue' is-struct='yes' visibility='default' is-declaration-only='yes' id='caf652c6'/>
+      <class-decl name='robust_list_head' is-struct='yes' visibility='default' is-declaration-only='yes' id='999b38a0'/>
+      <class-decl name='rt_mutex_waiter' is-struct='yes' visibility='default' is-declaration-only='yes' id='afb04a62'/>
+      <class-decl name='sched_avg' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='398' column='1' id='629c8d83'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='last_update_time' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='load_sum' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='runnable_load_sum' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='util_sum' type-id='19c2251e' visibility='default' filepath='include/linux/sched.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='period_contrib' type-id='19c2251e' visibility='default' filepath='include/linux/sched.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='load_avg' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='runnable_load_avg' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='util_avg' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='util_est' type-id='594488ba' visibility='default' filepath='include/linux/sched.h' line='407' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_statistics' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='410' column='1' id='4ebe02b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wait_start' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wait_count' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='wait_sum' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='iowait_count' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='iowait_sum' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sleep_start' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sleep_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sum_sleep_runtime' type-id='9b7c55ef' visibility='default' filepath='include/linux/sched.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='block_start' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='block_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='exec_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='slice_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_migrations_cold' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='nr_failed_migrations_affine' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nr_failed_migrations_running' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='nr_failed_migrations_hot' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='nr_forced_migrations' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nr_wakeups' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='nr_wakeups_sync' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='nr_wakeups_migrate' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='nr_wakeups_local' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='nr_wakeups_remote' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='nr_wakeups_affine' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='nr_wakeups_affine_attempts' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='nr_wakeups_passive' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='nr_wakeups_idle' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='442' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='seqcount' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/seqlock.h' line='48' column='1' id='3a74ff0b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sequence' type-id='f0981eeb' visibility='default' filepath='include/linux/seqlock.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sighand_struct' size-in-bits='16640' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='21' column='1' id='317e3dc9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='siglock' type-id='fb4018a0' visibility='default' filepath='include/linux/sched/signal.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='64615833' visibility='default' filepath='include/linux/sched/signal.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='signalfd_wqh' type-id='b5ab048f' visibility='default' filepath='include/linux/sched/signal.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='action' type-id='02d77f24' visibility='default' filepath='include/linux/sched/signal.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='signal_struct' size-in-bits='8704' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='83' column='1' id='9a4619bf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sigcnt' type-id='64615833' visibility='default' filepath='include/linux/sched/signal.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='live' type-id='49178f86' visibility='default' filepath='include/linux/sched/signal.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_threads' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='thread_head' type-id='72f469ec' visibility='default' filepath='include/linux/sched/signal.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='wait_chldexit' type-id='b5ab048f' visibility='default' filepath='include/linux/sched/signal.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='curr_target' type-id='f23e2572' visibility='default' filepath='include/linux/sched/signal.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='shared_pending' type-id='7b5c012d' visibility='default' filepath='include/linux/sched/signal.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='multiprocess' type-id='e151255a' visibility='default' filepath='include/linux/sched/signal.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='group_exit_code' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='notify_count' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='group_exit_task' type-id='f23e2572' visibility='default' filepath='include/linux/sched/signal.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='group_stop_count' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/signal.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='is_child_subreaper' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/signal.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='has_child_subreaper' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/signal.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='posix_timer_id' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='posix_timers' type-id='72f469ec' visibility='default' filepath='include/linux/sched/signal.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='real_timer' type-id='b6993efc' visibility='default' filepath='include/linux/sched/signal.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='it_real_incr' type-id='fbc017ef' visibility='default' filepath='include/linux/sched/signal.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='it' type-id='bb2d0d4e' visibility='default' filepath='include/linux/sched/signal.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='cputimer' type-id='9480bb51' visibility='default' filepath='include/linux/sched/signal.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='posix_cputimers' type-id='1069de27' visibility='default' filepath='include/linux/sched/signal.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='pids' type-id='3449295e' visibility='default' filepath='include/linux/sched/signal.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='tty_old_pgrp' type-id='b94e5398' visibility='default' filepath='include/linux/sched/signal.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='leader' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='tty' type-id='572fbdca' visibility='default' filepath='include/linux/sched/signal.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='stats_lock' type-id='e6cd5ecf' visibility='default' filepath='include/linux/sched/signal.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='utime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='stime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='cutime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='cstime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='gtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='cgtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='prev_cputime' type-id='9c7bf560' visibility='default' filepath='include/linux/sched/signal.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='nvcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='nivcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='cnvcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='cnivcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='min_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='maj_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='cmin_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='cmaj_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='inblock' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='oublock' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='cinblock' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='coublock' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='maxrss' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='cmaxrss' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='ioac' type-id='ca075c7f' visibility='default' filepath='include/linux/sched/signal.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='sum_sched_runtime' type-id='3a47d82b' visibility='default' filepath='include/linux/sched/signal.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='rlim' type-id='80f344e1' visibility='default' filepath='include/linux/sched/signal.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='stats' type-id='2c927837' visibility='default' filepath='include/linux/sched/signal.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='audit_tty' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/signal.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='tty_audit_buf' type-id='868c74f4' visibility='default' filepath='include/linux/sched/signal.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='oom_flag_origin' type-id='b50a4934' visibility='default' filepath='include/linux/sched/signal.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7696'>
+          <var-decl name='oom_score_adj' type-id='a2185560' visibility='default' filepath='include/linux/sched/signal.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='oom_score_adj_min' type-id='a2185560' visibility='default' filepath='include/linux/sched/signal.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='oom_mm' type-id='df4b7819' visibility='default' filepath='include/linux/sched/signal.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='cred_guard_mutex' type-id='925167dc' visibility='default' filepath='include/linux/sched/signal.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='exec_update_lock' type-id='f19fdb93' visibility='default' filepath='include/linux/sched/signal.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='242' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_group' size-in-bits='3584' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='355' column='1' id='2d863538'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='css' type-id='7f3df443' visibility='default' filepath='kernel/sched/sched.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='se' type-id='eb11624e' visibility='default' filepath='kernel/sched/sched.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='cfs_rq' type-id='d6e32957' visibility='default' filepath='kernel/sched/sched.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='shares' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='load_avg' type-id='f22a8abb' visibility='default' filepath='kernel/sched/sched.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/sched/sched.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='parent' type-id='3c32f9de' visibility='default' filepath='kernel/sched/sched.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='siblings' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='cfs_bandwidth' type-id='68e4a3af' visibility='default' filepath='kernel/sched/sched.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='uclamp_pct' type-id='0d532ec1' visibility='default' filepath='kernel/sched/sched.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='uclamp_req' type-id='c6e3c250' visibility='default' filepath='kernel/sched/sched.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='uclamp' type-id='c6e3c250' visibility='default' filepath='kernel/sched/sched.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='latency_sensitive' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='403' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timerqueue_node' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/timerqueue.h' line='9' column='1' id='fe3acb42'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='2a8a6332' visibility='default' filepath='include/linux/timerqueue.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='expires' type-id='fbc017ef' visibility='default' filepath='include/linux/timerqueue.h' line='11' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uclamp_se' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='607' column='1' id='0888126c'>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='value' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='bucket_id' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='user_defined' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='611' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uprobe_task' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/uprobes.h' line='61' column='1' id='98f6607e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='5d1a5bc7' visibility='default' filepath='include/linux/uprobes.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='f5a928fc' visibility='default' filepath='include/linux/uprobes.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active_uprobe' type-id='57376310' visibility='default' filepath='include/linux/uprobes.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xol_vaddr' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='return_instances' type-id='d38eb863' visibility='default' filepath='include/linux/uprobes.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='depth' type-id='f0981eeb' visibility='default' filepath='include/linux/uprobes.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vm_struct' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/vmalloc.h' line='41' column='1' id='5f2f8da4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='d295dab2' visibility='default' filepath='include/linux/vmalloc.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr' type-id='eaa32e2f' visibility='default' filepath='include/linux/vmalloc.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='7359adad' visibility='default' filepath='include/linux/vmalloc.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/vmalloc.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pages' type-id='9f93c9da' visibility='default' filepath='include/linux/vmalloc.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nr_pages' type-id='f0981eeb' visibility='default' filepath='include/linux/vmalloc.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='phys_addr' type-id='2522883d' visibility='default' filepath='include/linux/vmalloc.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='caller' type-id='eaa32e2f' visibility='default' filepath='include/linux/vmalloc.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wake_irq' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/base/power/power.h' line='31' column='1' id='4657336c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/base/power/power.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='status' type-id='f0981eeb' visibility='default' filepath='drivers/base/power/power.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='drivers/base/power/power.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/base/power/power.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wakeup_source' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/pm_wakeup.h' line='43' column='1' id='152cd1b0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pm_wakeup.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/pm_wakeup.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/pm_wakeup.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/pm_wakeup.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wakeirq' type-id='303e01fa' visibility='default' filepath='include/linux/pm_wakeup.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/linux/pm_wakeup.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='timer_expires' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='total_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='max_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='last_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='start_prevent_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='prevent_sleep_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='event_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='active_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='relax_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='expire_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='wakeup_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/pm_wakeup.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='active' type-id='b50a4934' visibility='default' filepath='include/linux/pm_wakeup.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='autosleep_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/pm_wakeup.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__31' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/sched.h' line='616' column='1' id='4edee319'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='blocked' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='need_qs' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='exp_hint' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='deferred_qs' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='620' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__7' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='d80b72e6' visibility='default' filepath='include/linux/uidgid.h' line='21' column='1' id='e8b29774'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='354978ed' visibility='default' filepath='include/linux/uidgid.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__50' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='6a7d16bb' visibility='default' filepath='include/linux/nodemask.h' line='98' column='1' id='24d23dab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bits' type-id='f066dd3c' visibility='default' filepath='include/linux/nodemask.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__38' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='daf33c64' visibility='default' filepath='include/uapi/asm-generic/signal.h' line='90' column='1' id='e6ea37b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sig' type-id='f066dd3c' visibility='default' filepath='include/uapi/asm-generic/signal.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__53' size-in-bits='4352' is-struct='yes' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='135' column='1' id='3bb05d08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tp_value' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tp2_value' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fpsimd_state' type-id='3cb82f3a' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4a19d21e' size-in-bits='64' id='5da77304'/>
+      <typedef-decl name='__kernel_pid_t' type-id='95e97e5e' filepath='include/uapi/asm-generic/posix_types.h' line='28' column='1' id='63eb2bf2'/>
+      <typedef-decl name='kernel_siginfo_t' type-id='38ef7882' filepath='include/linux/signal_types.h' line='14' column='1' id='22ec9634'/>
+      <typedef-decl name='ktime_t' type-id='9b7c55ef' filepath='include/linux/ktime.h' line='28' column='1' id='fbc017ef'/>
+      <typedef-decl name='mm_segment_t' type-id='7359adad' filepath='arch/arm64/include/asm/thread_info.h' line='21' column='1' id='f079b4db'/>
+      <typedef-decl name='phandle' type-id='19c2251e' filepath='include/linux/of.h' line='28' column='1' id='6e394fba'/>
+      <union-decl name='__anonymous_union__24' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='27' column='1' id='7f825f2d'>
+        <data-member access='private'>
+          <var-decl name='futex' type-id='71f149c6' visibility='default' filepath='include/linux/restart_block.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nanosleep' type-id='5047547d' visibility='default' filepath='include/linux/restart_block.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='poll' type-id='98bfe848' visibility='default' filepath='include/linux/restart_block.h' line='54' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__23' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='32' column='1' id='9a29bfd9'>
+        <data-member access='private'>
+          <var-decl name='preempt_count' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='preempt' type-id='45bb8abd' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='42' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='7359adad' size-in-bits='64' id='1d2c2b85'/>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='64' id='f066dd3c'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='2ae08426' size-in-bits='256' id='ae25b7bc'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='59bcd074' size-in-bits='64' id='bea4d586'/>
+      <pointer-type-def type-id='630e0832' size-in-bits='64' id='f5f7cbd4'/>
+      <pointer-type-def type-id='0a84ab07' size-in-bits='64' id='7d18218b'/>
+      <pointer-type-def type-id='f8c641b0' size-in-bits='64' id='e6c297c2'/>
+      <pointer-type-def type-id='69970be2' size-in-bits='64' id='b16791f0'/>
+      <pointer-type-def type-id='a6892387' size-in-bits='64' id='d6e32957'/>
+      <pointer-type-def type-id='ab9643dd' size-in-bits='64' id='46ff135d'/>
+      <pointer-type-def type-id='e54806c5' size-in-bits='64' id='f774a955'/>
+      <array-type-def dimensions='1' type-id='cfff5953' size-in-bits='384' id='7975e215'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <pointer-type-def type-id='7e6588d9' size-in-bits='64' id='b72fdee5'/>
+      <qualified-type-def type-id='ad95e21b' const='yes' id='3c7ea80a'/>
+      <qualified-type-def type-id='3ea82289' const='yes' id='86af1d10'/>
+      <qualified-type-def type-id='f45a6a89' const='yes' id='2eb8da02'/>
+      <qualified-type-def type-id='8b7a2cd1' const='yes' id='9ce849da'/>
+      <qualified-type-def type-id='ff771233' const='yes' id='a4a37730'/>
+      <qualified-type-def type-id='8bb45a31' const='yes' id='c46fad80'/>
+      <array-type-def dimensions='1' type-id='47841236' size-in-bits='256' id='bb2d0d4e'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='32536656' size-in-bits='64' id='a80fd1bc'/>
+      <enum-decl name='uprobe_task_state' filepath='include/linux/uprobes.h' line='51' column='1' id='5d1a5bc7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UTASK_RUNNING' value='0'/>
+        <enumerator name='UTASK_SSTEP' value='1'/>
+        <enumerator name='UTASK_SSTEP_ACK' value='2'/>
+        <enumerator name='UTASK_SSTEP_TRAPPED' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='70c545cd' size-in-bits='64' id='5bb9c75d'/>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='256' id='fc3a8480'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='a301f696' size-in-bits='64' id='64452f48'/>
+      <pointer-type-def type-id='dccf0381' size-in-bits='64' id='295a92ed'/>
+      <pointer-type-def type-id='8ab5a2af' size-in-bits='64' id='5aa1f3eb'/>
+      <pointer-type-def type-id='a2ac80c1' size-in-bits='64' id='f7114ca5'/>
+      <pointer-type-def type-id='db04abd6' size-in-bits='64' id='7c6e0e0c'/>
+      <pointer-type-def type-id='dd74f3ed' size-in-bits='64' id='76ccea8d'/>
+      <array-type-def dimensions='1' type-id='a21c4412' size-in-bits='16384' id='02d77f24'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <pointer-type-def type-id='fe81ecb9' size-in-bits='64' id='92daca01'/>
+      <pointer-type-def type-id='696d238e' size-in-bits='64' id='23704f74'/>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='768' id='e4e6d6c4'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <pointer-type-def type-id='de031042' size-in-bits='64' id='d60f4f10'/>
+      <pointer-type-def type-id='bd965180' size-in-bits='64' id='a2bff676'/>
+      <pointer-type-def type-id='9b08f7cd' size-in-bits='64' id='d504f73d'/>
+      <pointer-type-def type-id='02f11ed4' size-in-bits='64' id='9f93c9da'/>
+      <array-type-def dimensions='1' type-id='2bf16f59' size-in-bits='1024' id='18b1b6ec'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b94e5398' size-in-bits='256' id='3449295e'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='0252e252' size-in-bits='64' id='b816e1d0'/>
+      <pointer-type-def type-id='a490b814' size-in-bits='64' id='e15f3242'/>
+      <pointer-type-def type-id='3bf19710' size-in-bits='64' id='53e3a7d6'/>
+      <pointer-type-def type-id='c0342c43' size-in-bits='64' id='d38eb863'/>
+      <array-type-def dimensions='1' type-id='60dcbf6c' size-in-bits='2048' id='80f344e1'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <pointer-type-def type-id='ff2b3d10' size-in-bits='64' id='eb11624e'/>
+      <type-decl name='short int' size-in-bits='16' id='a2185560'/>
+      <class-decl name='cfs_bandwidth' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='331' column='1' id='68e4a3af'/>
+      <class-decl name='cfs_rq' size-in-bits='3072' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='492' column='1' id='feeb4c2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='load' type-id='ad979632' visibility='default' filepath='kernel/sched/sched.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='runnable_weight' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='h_nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='idle_h_nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='exec_clock' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='min_vruntime' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tasks_timeline' type-id='6fe1603d' visibility='default' filepath='kernel/sched/sched.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='curr' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='next' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='last' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='skip' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_spread_over' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='avg' type-id='629c8d83' visibility='default' filepath='kernel/sched/sched.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='removed' type-id='dbb6a82c' visibility='default' filepath='kernel/sched/sched.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='tg_load_avg_contrib' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='propagate' type-id='bd54fe1a' visibility='default' filepath='kernel/sched/sched.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='prop_runnable_sum' type-id='bd54fe1a' visibility='default' filepath='kernel/sched/sched.h' line='539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='h_load' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='last_h_load_update' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='h_load_next' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='rq' type-id='6ed6b432' visibility='default' filepath='kernel/sched/sched.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='on_list' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='leaf_cfs_rq_list' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='tg' type-id='3c32f9de' visibility='default' filepath='kernel/sched/sched.h' line='566' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_subsys_state' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='133' column='1' id='7f3df443'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cgroup' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ss' type-id='dc91d125' visibility='default' filepath='include/linux/cgroup-defs.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='include/linux/cgroup-defs.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sibling' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rstat_css_node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='serial_nr' type-id='91ce1af9' visibility='default' filepath='include/linux/cgroup-defs.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='online_cnt' type-id='49178f86' visibility='default' filepath='include/linux/cgroup-defs.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='destroy_work' type-id='ef9025d0' visibility='default' filepath='include/linux/cgroup-defs.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='destroy_rwork' type-id='7c0b9fdb' visibility='default' filepath='include/linux/cgroup-defs.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='parent' type-id='cfff5953' visibility='default' filepath='include/linux/cgroup-defs.h' line='180' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='compat_robust_list' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/compat.h' line='374' column='1' id='bd51dd4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='782d78af' visibility='default' filepath='include/linux/compat.h' line='375' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cred' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/cred.h' line='111' column='1' id='6739dd09'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='49178f86' visibility='default' filepath='include/linux/cred.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/cred.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gid' type-id='094d8048' visibility='default' filepath='include/linux/cred.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='suid' type-id='d80b72e6' visibility='default' filepath='include/linux/cred.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sgid' type-id='094d8048' visibility='default' filepath='include/linux/cred.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='euid' type-id='d80b72e6' visibility='default' filepath='include/linux/cred.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='egid' type-id='094d8048' visibility='default' filepath='include/linux/cred.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='fsuid' type-id='d80b72e6' visibility='default' filepath='include/linux/cred.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fsgid' type-id='094d8048' visibility='default' filepath='include/linux/cred.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='securebits' type-id='f0981eeb' visibility='default' filepath='include/linux/cred.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cap_inheritable' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cap_permitted' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cap_effective' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cap_bset' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cap_ambient' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='jit_keyring' type-id='002ac4a6' visibility='default' filepath='include/linux/cred.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='session_keyring' type-id='204a4632' visibility='default' filepath='include/linux/cred.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='process_keyring' type-id='204a4632' visibility='default' filepath='include/linux/cred.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='thread_keyring' type-id='204a4632' visibility='default' filepath='include/linux/cred.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='request_key_auth' type-id='204a4632' visibility='default' filepath='include/linux/cred.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/cred.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='user' type-id='273a7d34' visibility='default' filepath='include/linux/cred.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/cred.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='group_info' type-id='383471a1' visibility='default' filepath='include/linux/cred.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='' type-id='0a97cc35' visibility='default' filepath='include/linux/cred.h' line='149' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='driver_private' is-struct='yes' visibility='default' is-declaration-only='yes' id='e44b8083'/>
+      <class-decl name='freq_constraints' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='89' column='1' id='7ca99f8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_freq' type-id='4ad5b81b' visibility='default' filepath='include/linux/pm_qos.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='min_freq_notifiers' type-id='708c2394' visibility='default' filepath='include/linux/pm_qos.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='max_freq' type-id='4ad5b81b' visibility='default' filepath='include/linux/pm_qos.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='max_freq_notifiers' type-id='708c2394' visibility='default' filepath='include/linux/pm_qos.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hrtimer_clock_base' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/hrtimer.h' line='161' column='1' id='1851ab9f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_base' type-id='75e9503b' visibility='default' filepath='include/linux/hrtimer.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='clockid' type-id='a1c3b834' visibility='default' filepath='include/linux/hrtimer.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq' type-id='e14c3b11' visibility='default' filepath='include/linux/hrtimer.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='running' type-id='08c8d0fa' visibility='default' filepath='include/linux/hrtimer.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active' type-id='ff3c7f20' visibility='default' filepath='include/linux/hrtimer.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_time' type-id='7a6c9108' visibility='default' filepath='include/linux/hrtimer.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='offset' type-id='fbc017ef' visibility='default' filepath='include/linux/hrtimer.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_domain' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='89' column='1' id='80ef8feb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/linux/iommu.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='f1ac64d1' visibility='default' filepath='include/linux/iommu.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pgsize_bitmap' type-id='7359adad' visibility='default' filepath='include/linux/iommu.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='handler' type-id='a01c3626' visibility='default' filepath='include/linux/iommu.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='handler_token' type-id='eaa32e2f' visibility='default' filepath='include/linux/iommu.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='geometry' type-id='1f78af0c' visibility='default' filepath='include/linux/iommu.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='iova_cookie' type-id='eaa32e2f' visibility='default' filepath='include/linux/iommu.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_fault_param' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='350' column='1' id='325adc8b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='handler' type-id='a84f5b46' visibility='default' filepath='include/linux/iommu.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/iommu.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='faults' type-id='72f469ec' visibility='default' filepath='include/linux/iommu.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/iommu.h' line='354' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernel_siginfo' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/signal_types.h' line='12' column='1' id='38ef7882'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='c60b207d' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='page' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='70' column='1' id='a25ce1be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='1c70c8a9' visibility='default' filepath='include/linux/mm_types.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='' type-id='f47d5752' visibility='default' filepath='include/linux/mm_types.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='_refcount' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mem_cgroup' type-id='223696fb' visibility='default' filepath='include/linux/mm_types.h' line='203' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='path' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/path.h' line='8' column='1' id='b5382ece'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mnt' type-id='549da823' visibility='default' filepath='include/linux/path.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dentry' type-id='27675065' visibility='default' filepath='include/linux/path.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_event_context' is-struct='yes' visibility='default' is-declaration-only='yes' id='9d67acd5'/>
+      <class-decl name='pm_qos_constraints' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='66' column='1' id='4ad5b81b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='57b0eed2' visibility='default' filepath='include/linux/pm_qos.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='target_value' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='default_value' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='no_constraint_value' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='type' type-id='1389f6b6' visibility='default' filepath='include/linux/pm_qos.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='notifiers' type-id='282b7312' visibility='default' filepath='include/linux/pm_qos.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pm_qos_flags' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='75' column='1' id='e0a9bd3c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/pm_qos.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='effective_flags' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='posix_cputimer_base' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/posix-timers.h' line='107' column='1' id='e710f78e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nextevt' type-id='91ce1af9' visibility='default' filepath='include/linux/posix-timers.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tqhead' type-id='ff3c7f20' visibility='default' filepath='include/linux/posix-timers.h' line='109' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='property' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/of.h' line='31' column='1' id='ebe3ac70'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/of.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='length' type-id='95e97e5e' visibility='default' filepath='include/linux/of.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='value' type-id='eaa32e2f' visibility='default' filepath='include/linux/of.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='ddcd89c6' visibility='default' filepath='include/linux/of.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='attr' type-id='d83a2db1' visibility='default' filepath='include/linux/of.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rw_semaphore' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/rwsem.h' line='36' column='1' id='f19fdb93'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f22a8abb' visibility='default' filepath='include/linux/rwsem.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='f22a8abb' visibility='default' filepath='include/linux/rwsem.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='osq' type-id='0c3105cd' visibility='default' filepath='include/linux/rwsem.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='wait_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/rwsem.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='wait_list' type-id='72f469ec' visibility='default' filepath='include/linux/rwsem.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_vendor_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/rwsem.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_class' size-in-bits='1664' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='1719' column='1' id='74191d27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='162b4cce' visibility='default' filepath='kernel/sched/sched.h' line='1720' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='uclamp_enabled' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='1723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='enqueue_task' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dequeue_task' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='yield_task' type-id='d846ae3b' visibility='default' filepath='kernel/sched/sched.h' line='1728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='yield_to_task' type-id='c4b7e554' visibility='default' filepath='kernel/sched/sched.h' line='1729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='check_preempt_curr' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pick_next_task' type-id='2a7b00f2' visibility='default' filepath='kernel/sched/sched.h' line='1744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='put_prev_task' type-id='604374c8' visibility='default' filepath='kernel/sched/sched.h' line='1747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_next_task' type-id='f13b7179' visibility='default' filepath='kernel/sched/sched.h' line='1748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='balance' type-id='5346c726' visibility='default' filepath='kernel/sched/sched.h' line='1751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='select_task_rq' type-id='c3408547' visibility='default' filepath='kernel/sched/sched.h' line='1752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='migrate_task_rq' type-id='9d640202' visibility='default' filepath='kernel/sched/sched.h' line='1753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='task_woken' type-id='604374c8' visibility='default' filepath='kernel/sched/sched.h' line='1755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_cpus_allowed' type-id='54777a92' visibility='default' filepath='kernel/sched/sched.h' line='1757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rq_online' type-id='d846ae3b' visibility='default' filepath='kernel/sched/sched.h' line='1760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='rq_offline' type-id='d846ae3b' visibility='default' filepath='kernel/sched/sched.h' line='1761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='task_tick' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='task_fork' type-id='1c9e19fb' visibility='default' filepath='kernel/sched/sched.h' line='1765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='task_dead' type-id='1c9e19fb' visibility='default' filepath='kernel/sched/sched.h' line='1766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='switched_from' type-id='604374c8' visibility='default' filepath='kernel/sched/sched.h' line='1773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='switched_to' type-id='604374c8' visibility='default' filepath='kernel/sched/sched.h' line='1774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='prio_changed' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='get_rr_interval' type-id='c79c9f4c' visibility='default' filepath='kernel/sched/sched.h' line='1778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='update_curr' type-id='d846ae3b' visibility='default' filepath='kernel/sched/sched.h' line='1781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='task_change_group' type-id='9d640202' visibility='default' filepath='kernel/sched/sched.h' line='1787' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='seccomp_filter' is-struct='yes' visibility='default' is-declaration-only='yes' id='e290c28c'/>
+      <class-decl name='subsys_private' is-struct='yes' visibility='default' is-declaration-only='yes' id='4a19d21e'/>
+      <class-decl name='thread_group_cputimer' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='67' column='1' id='9480bb51'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cputime_atomic' type-id='4b60fba4' visibility='default' filepath='include/linux/sched/signal.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='user_fpsimd_state' size-in-bits='4224' is-struct='yes' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='82' column='1' id='3cb82f3a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vregs' type-id='98f84070' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='fpsr' type-id='3f1a6b60' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4128'>
+          <var-decl name='fpcr' type-id='3f1a6b60' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='__reserved' type-id='839e8989' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='util_est' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='349' column='1' id='594488ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enqueued' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ewma' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='351' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__33' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='38' column='1' id='5047547d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clockid' type-id='a1c3b834' visibility='default' filepath='include/linux/restart_block.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='58918b27' visibility='default' filepath='include/linux/restart_block.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='95408dfc' visibility='default' filepath='include/linux/restart_block.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='expires' type-id='91ce1af9' visibility='default' filepath='include/linux/restart_block.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__34' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='48' column='1' id='98bfe848'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ufds' type-id='3ac36db0' visibility='default' filepath='include/linux/restart_block.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nfds' type-id='95e97e5e' visibility='default' filepath='include/linux/restart_block.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='has_timeout' type-id='95e97e5e' visibility='default' filepath='include/linux/restart_block.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tv_sec' type-id='7359adad' visibility='default' filepath='include/linux/restart_block.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tv_nsec' type-id='7359adad' visibility='default' filepath='include/linux/restart_block.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__30' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='34' column='1' id='45bb8abd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='need_resched' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__32' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='29' column='1' id='71f149c6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uaddr' type-id='f9409001' visibility='default' filepath='include/linux/restart_block.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='val' type-id='19c2251e' visibility='default' filepath='include/linux/restart_block.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/restart_block.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bitset' type-id='19c2251e' visibility='default' filepath='include/linux/restart_block.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='time' type-id='91ce1af9' visibility='default' filepath='include/linux/restart_block.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='uaddr2' type-id='f9409001' visibility='default' filepath='include/linux/restart_block.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__22' size-in-bits='7232' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='386' column='1' id='37b0b969'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mmap' type-id='2ae08426' visibility='default' filepath='include/linux/mm_types.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mm_rb' type-id='dec44472' visibility='default' filepath='include/linux/mm_types.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vmacache_seqnum' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_unmapped_area' type-id='d44a8cec' visibility='default' filepath='include/linux/mm_types.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mmap_base' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mmap_legacy_base' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='task_size' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='highest_vm_end' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pgd' type-id='2e97ceaf' visibility='default' filepath='include/linux/mm_types.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='membarrier_state' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='mm_users' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mm_count' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='pgtables_bytes' type-id='f22a8abb' visibility='default' filepath='include/linux/mm_types.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='map_count' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='page_table_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mm_types.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='mmap_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/mm_types.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='mmlist' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='hiwater_rss' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='hiwater_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='total_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='locked_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='pinned_vm' type-id='28ee064c' visibility='default' filepath='include/linux/mm_types.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='data_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='exec_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='stack_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='def_flags' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='arg_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mm_types.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='start_code' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='end_code' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='start_data' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='end_data' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='start_brk' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='brk' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='start_stack' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='arg_start' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='arg_end' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='env_start' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='env_end' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='saved_auxv' type-id='d964a553' visibility='default' filepath='include/linux/mm_types.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='rss_stat' type-id='2235a2cb' visibility='default' filepath='include/linux/mm_types.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='binfmt' type-id='7cc59444' visibility='default' filepath='include/linux/mm_types.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='context' type-id='0eb9c3fd' visibility='default' filepath='include/linux/mm_types.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='core_state' type-id='90ad83aa' visibility='default' filepath='include/linux/mm_types.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='ioctx_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mm_types.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='ioctx_table' type-id='122191b2' visibility='default' filepath='include/linux/mm_types.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='owner' type-id='f23e2572' visibility='default' filepath='include/linux/mm_types.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/mm_types.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='exe_file' type-id='77e79a4b' visibility='default' filepath='include/linux/mm_types.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='mmu_notifier_mm' type-id='cc546a3e' visibility='default' filepath='include/linux/mm_types.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='tlb_flush_pending' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='uprobes_state' type-id='6308a819' visibility='default' filepath='include/linux/mm_types.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='async_put_work' type-id='ef9025d0' visibility='default' filepath='include/linux/mm_types.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='android_vendor_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='542' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3a97b64f' size-in-bits='64' id='2c927837'/>
+      <pointer-type-def type-id='9127cd0e' size-in-bits='64' id='868c74f4'/>
+      <pointer-type-def type-id='4c8d9cac' size-in-bits='64' id='572fbdca'/>
+      <typedef-decl name='compat_long_t' type-id='a7832498' filepath='include/asm-generic/compat.h' line='18' column='1' id='abb906de'/>
+      <typedef-decl name='compat_uptr_t' type-id='19c2251e' filepath='include/asm-generic/compat.h' line='22' column='1' id='782d78af'/>
+      <pointer-type-def type-id='b39453c8' size-in-bits='64' id='7855184a'/>
+      <pointer-type-def type-id='ea038279' size-in-bits='64' id='66c8694d'/>
+      <typedef-decl name='key_perm_t' type-id='8f92235e' filepath='include/linux/key.h' line='31' column='1' id='296adac1'/>
+      <typedef-decl name='key_serial_t' type-id='3ff5601b' filepath='include/linux/key.h' line='28' column='1' id='c84025ab'/>
+      <typedef-decl name='kgid_t' type-id='bac1227a' filepath='include/linux/uidgid.h' line='28' column='1' id='094d8048'/>
+      <typedef-decl name='phys_addr_t' type-id='91ce1af9' filepath='include/linux/types.h' line='158' column='1' id='2522883d'/>
+      <typedef-decl name='seqlock_t' type-id='c87ee7e4' filepath='include/linux/seqlock.h' line='414' column='1' id='e6cd5ecf'/>
+      <pointer-type-def type-id='7df55081' size-in-bits='64' id='49f5e2e5'/>
+      <typedef-decl name='time64_t' type-id='49659421' filepath='include/linux/time64.h' line='8' column='1' id='1afd27ac'/>
+      <pointer-type-def type-id='1f1ec116' size-in-bits='64' id='5dee5830'/>
+      <typedef-decl name='uid_t' type-id='70734f24' filepath='include/linux/types.h' line='32' column='1' id='354978ed'/>
+      <union-decl name='__anonymous_union__30' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='234' column='1' id='d5d77d48'>
+        <data-member access='private'>
+          <var-decl name='payload' type-id='2888d74a' visibility='default' filepath='include/linux/key.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='607bacb1' visibility='default' filepath='include/linux/key.h' line='236' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__28' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='219' column='1' id='51bb2fb5'>
+        <data-member access='private'>
+          <var-decl name='index_key' type-id='16ab8749' visibility='default' filepath='include/linux/key.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='5b740cc8' visibility='default' filepath='include/linux/key.h' line='221' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__26' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='175' column='1' id='1a65b0a7'>
+        <data-member access='private'>
+          <var-decl name='graveyard_link' type-id='72f469ec' visibility='default' filepath='include/linux/key.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='serial_node' type-id='2a8a6332' visibility='default' filepath='include/linux/key.h' line='177' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__36' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/uprobes.h' line='64' column='1' id='f5a928fc'>
+        <data-member access='private'>
+          <var-decl name='' type-id='2b31becf' visibility='default' filepath='include/linux/uprobes.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='46982a3f' visibility='default' filepath='include/linux/uprobes.h' line='70' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__27' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='182' column='1' id='21f0eb77'>
+        <data-member access='private'>
+          <var-decl name='expiry' type-id='1afd27ac' visibility='default' filepath='include/linux/key.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='revoked_at' type-id='1afd27ac' visibility='default' filepath='include/linux/key.h' line='184' column='1'/>
+        </data-member>
+      </union-decl>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='64' id='0d532ec1'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='38b33cba' size-in-bits='64' id='1588722c'/>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='infinite' id='c99b5ecd'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='120c01b5' size-in-bits='128' id='9a69aeec'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <pointer-type-def type-id='b7e0fed2' size-in-bits='64' id='57376310'/>
+      <pointer-type-def type-id='ddd7cbfe' size-in-bits='64' id='273a7d34'/>
+      <pointer-type-def type-id='44f52e9d' size-in-bits='64' id='9d5923ed'/>
+      <pointer-type-def type-id='62c85860' size-in-bits='64' id='2ae08426'/>
+      <pointer-type-def type-id='dd082beb' size-in-bits='64' id='9ed36ca7'/>
+      <pointer-type-def type-id='2157493d' size-in-bits='64' id='772c77c9'/>
+      <pointer-type-def type-id='08cd0705' size-in-bits='64' id='b97350f1'/>
+      <pointer-type-def type-id='09c8f1a3' size-in-bits='64' id='6407fd0f'/>
+      <pointer-type-def type-id='8741a34d' size-in-bits='64' id='d7b98f89'/>
+      <pointer-type-def type-id='e76f1d29' size-in-bits='64' id='4935400d'/>
+      <pointer-type-def type-id='066ca455' size-in-bits='64' id='06c31e09'/>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='64' id='839e8989'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7e2609cc' size-in-bits='4096' id='98f84070'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <pointer-type-def type-id='708c2394' size-in-bits='64' id='282b7312'/>
+      <pointer-type-def type-id='1d115fd5' size-in-bits='64' id='dc91d125'/>
+      <pointer-type-def type-id='7f3df443' size-in-bits='64' id='cfff5953'/>
+      <pointer-type-def type-id='9ce849db' size-in-bits='64' id='f1ac64d1'/>
+      <pointer-type-def type-id='0e1f7cac' size-in-bits='64' id='90ad83aa'/>
+      <pointer-type-def type-id='d6ebca75' size-in-bits='64' id='27675065'/>
+      <enum-decl name='pm_qos_type' filepath='include/linux/pm_qos.h' line='54' column='1' id='1389f6b6'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PM_QOS_UNITIALIZED' value='0'/>
+        <enumerator name='PM_QOS_MAX' value='1'/>
+        <enumerator name='PM_QOS_MIN' value='2'/>
+        <enumerator name='PM_QOS_SUM' value='3'/>
+      </enum-decl>
+      <enum-decl name='timespec_type' filepath='include/linux/restart_block.h' line='16' column='1' id='58918b27'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TT_NONE' value='0'/>
+        <enumerator name='TT_NATIVE' value='1'/>
+        <enumerator name='TT_COMPAT' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='b4b8adeb' size-in-bits='64' id='77e79a4b'/>
+      <pointer-type-def type-id='781993c9' size-in-bits='64' id='383471a1'/>
+      <pointer-type-def type-id='b6993efc' size-in-bits='64' id='08c8d0fa'/>
+      <pointer-type-def type-id='8d24b00b' size-in-bits='64' id='75e9503b'/>
+      <pointer-type-def type-id='2fa2db94' size-in-bits='64' id='5346c726'/>
+      <pointer-type-def type-id='5dcc12a3' size-in-bits='64' id='c3408547'/>
+      <pointer-type-def type-id='5d0f15d4' size-in-bits='64' id='122191b2'/>
+      <pointer-type-def type-id='47d6e76e' size-in-bits='64' id='7cc59444'/>
+      <pointer-type-def type-id='770fc578' size-in-bits='64' id='cc546a3e'/>
+      <pointer-type-def type-id='7263c471' size-in-bits='64' id='2bf16f59'/>
+      <pointer-type-def type-id='12aa8ce4' size-in-bits='64' id='2e97ceaf'/>
+      <pointer-type-def type-id='b440e872' size-in-bits='64' id='3ac36db0'/>
+      <pointer-type-def type-id='d5ee6a94' size-in-bits='64' id='6ed6b432'/>
+      <class-decl name='acpi_device_id' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='210' column='1' id='ad95e21b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='060772ed' visibility='default' filepath='include/linux/mod_devicetable.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver_data' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cls' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='cls_msk' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='214' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup' size-in-bits='18624' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='351' column='1' id='ab9643dd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='self' type-id='7f3df443' visibility='default' filepath='include/linux/cgroup-defs.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/cgroup-defs.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='level' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='max_depth' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='nr_descendants' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='nr_dying_descendants' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='max_descendants' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='nr_populated_csets' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2464'>
+          <var-decl name='nr_populated_domain_children' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='nr_populated_threaded_children' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='nr_threaded_children' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='kn' type-id='150efd3f' visibility='default' filepath='include/linux/cgroup-defs.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='procs_file' type-id='37a4ee40' visibility='default' filepath='include/linux/cgroup-defs.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='events_file' type-id='37a4ee40' visibility='default' filepath='include/linux/cgroup-defs.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='subtree_control' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3792'>
+          <var-decl name='subtree_ss_mask' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3808'>
+          <var-decl name='old_subtree_control' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3824'>
+          <var-decl name='old_subtree_ss_mask' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='subsys' type-id='7975e215' visibility='default' filepath='include/linux/cgroup-defs.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='root' type-id='aede2cf0' visibility='default' filepath='include/linux/cgroup-defs.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='cset_links' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='e_csets' type-id='e4e6d6c4' visibility='default' filepath='include/linux/cgroup-defs.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='dom_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='old_dom_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='rstat_cpu' type-id='d8e759a7' visibility='default' filepath='include/linux/cgroup-defs.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='rstat_css_list' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='pending_bstat' type-id='cfd8587e' visibility='default' filepath='include/linux/cgroup-defs.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='bstat' type-id='cfd8587e' visibility='default' filepath='include/linux/cgroup-defs.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='prev_cputime' type-id='9c7bf560' visibility='default' filepath='include/linux/cgroup-defs.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='pidlists' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='pidlist_mutex' type-id='925167dc' visibility='default' filepath='include/linux/cgroup-defs.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='offline_waitq' type-id='b5ab048f' visibility='default' filepath='include/linux/cgroup-defs.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='release_agent_work' type-id='ef9025d0' visibility='default' filepath='include/linux/cgroup-defs.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='psi' type-id='12878ab3' visibility='default' filepath='include/linux/cgroup-defs.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='bpf' type-id='b80e3996' visibility='default' filepath='include/linux/cgroup-defs.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18432'>
+          <var-decl name='congestion_count' type-id='49178f86' visibility='default' filepath='include/linux/cgroup-defs.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18464'>
+          <var-decl name='freezer' type-id='ad50988b' visibility='default' filepath='include/linux/cgroup-defs.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18592'>
+          <var-decl name='ancestor_ids' type-id='1fdc7fa6' visibility='default' filepath='include/linux/cgroup-defs.h' line='491' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='e54806c5'/>
+      <class-decl name='cpu_itimer' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='39' column='1' id='47841236'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='expires' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='incr' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_qos_request' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='111' column='1' id='32536656'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c47ba023' visibility='default' filepath='include/linux/pm_qos.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='5d6ef881' visibility='default' filepath='include/linux/pm_qos.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/pm_qos.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fasync_struct' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1368' column='1' id='70c545cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fa_lock' type-id='ac16795b' visibility='default' filepath='include/linux/fs.h' line='1369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fa_fd' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fa_next' type-id='5bb9c75d' visibility='default' filepath='include/linux/fs.h' line='1372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fa_file' type-id='77e79a4b' visibility='default' filepath='include/linux/fs.h' line='1373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fa_rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='1374' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fwnode_operations' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/fwnode.h' line='114' column='1' id='f45a6a89'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get' type-id='e3a3f61a' visibility='default' filepath='include/linux/fwnode.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='put' type-id='c379ce2c' visibility='default' filepath='include/linux/fwnode.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='device_is_available' type-id='e4913062' visibility='default' filepath='include/linux/fwnode.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device_get_match_data' type-id='def135ae' visibility='default' filepath='include/linux/fwnode.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='property_present' type-id='a9ee1319' visibility='default' filepath='include/linux/fwnode.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='property_read_int_array' type-id='15f6292e' visibility='default' filepath='include/linux/fwnode.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='property_read_string_array' type-id='841b4311' visibility='default' filepath='include/linux/fwnode.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_parent' type-id='e9910ceb' visibility='default' filepath='include/linux/fwnode.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_next_child_node' type-id='900dcb03' visibility='default' filepath='include/linux/fwnode.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_named_child_node' type-id='c297681a' visibility='default' filepath='include/linux/fwnode.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_reference_args' type-id='4324a0e5' visibility='default' filepath='include/linux/fwnode.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='graph_get_next_endpoint' type-id='900dcb03' visibility='default' filepath='include/linux/fwnode.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='graph_get_remote_endpoint' type-id='e9910ceb' visibility='default' filepath='include/linux/fwnode.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='graph_get_port_parent' type-id='e3a3f61a' visibility='default' filepath='include/linux/fwnode.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='graph_parse_endpoint' type-id='bde527e9' visibility='default' filepath='include/linux/fwnode.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='add_links' type-id='5eff49b2' visibility='default' filepath='include/linux/fwnode.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='io_cq' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/iocontext.h' line='73' column='1' id='db04abd6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q' type-id='e7d2a5fc' visibility='default' filepath='include/linux/iocontext.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ioc' type-id='d042cfad' visibility='default' filepath='include/linux/iocontext.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='df248743' visibility='default' filepath='include/linux/iocontext.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='eb20ccf0' visibility='default' filepath='include/linux/iocontext.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/iocontext.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_domain_geometry' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='59' column='1' id='1f78af0c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='aperture_start' type-id='cf29c9b3' visibility='default' filepath='include/linux/iommu.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='aperture_end' type-id='cf29c9b3' visibility='default' filepath='include/linux/iommu.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='force_aperture' type-id='b50a4934' visibility='default' filepath='include/linux/iommu.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='8b7a2cd1'/>
+      <class-decl name='ipc_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='dd74f3ed'/>
+      <class-decl name='k_sigaction' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/signal_types.h' line='49' column='1' id='a21c4412'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sa' type-id='fe391c48' visibility='default' filepath='include/linux/signal_types.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key_restriction' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/key.h' line='153' column='1' id='fe81ecb9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='check' type-id='f87a5fab' visibility='default' filepath='include/linux/key.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key' type-id='204a4632' visibility='default' filepath='include/linux/key.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='keytype' type-id='d0a699d1' visibility='default' filepath='include/linux/key.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key_user' size-in-bits='704' is-struct='yes' visibility='default' filepath='security/keys/internal.h' line='53' column='1' id='696d238e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='2a8a6332' visibility='default' filepath='security/keys/internal.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cons_lock' type-id='925167dc' visibility='default' filepath='security/keys/internal.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='security/keys/internal.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='security/keys/internal.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='nkeys' type-id='49178f86' visibility='default' filepath='security/keys/internal.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='nikeys' type-id='49178f86' visibility='default' filepath='security/keys/internal.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='security/keys/internal.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='qnkeys' type-id='95e97e5e' visibility='default' filepath='security/keys/internal.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='qnbytes' type-id='95e97e5e' visibility='default' filepath='security/keys/internal.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='keyring_index_key' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/key.h' line='91' column='1' id='16ab8749'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='465ca58e' visibility='default' filepath='include/linux/key.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='d0a699d1' visibility='default' filepath='include/linux/key.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='domain_tag' type-id='fce14c5f' visibility='default' filepath='include/linux/key.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='description' type-id='80f4b756' visibility='default' filepath='include/linux/key.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kobj_ns_type_operations' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/kobject_ns.h' line='39' column='1' id='ff771233'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='52127d59' visibility='default' filepath='include/linux/kobject_ns.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='current_may_mount' type-id='d4ae3f3f' visibility='default' filepath='include/linux/kobject_ns.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='grab_current_ns' type-id='0cfacb48' visibility='default' filepath='include/linux/kobject_ns.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='netlink_ns' type-id='8734cf20' visibility='default' filepath='include/linux/kobject_ns.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='initial_ns' type-id='0cfacb48' visibility='default' filepath='include/linux/kobject_ns.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='drop_ns' type-id='b7f9d8e6' visibility='default' filepath='include/linux/kobject_ns.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mm_rss_stat' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mm_types_task.h' line='60' column='1' id='2235a2cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='b6b7435e' visibility='default' filepath='include/linux/mm_types_task.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mnt_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='de031042'/>
+      <class-decl name='net' is-struct='yes' visibility='default' is-declaration-only='yes' id='bd965180'/>
+      <class-decl name='notifier_block' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='54' column='1' id='9b08f7cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='notifier_call' type-id='0ec8c658' visibility='default' filepath='include/linux/notifier.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='d504f73d' visibility='default' filepath='include/linux/notifier.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='priority' type-id='95e97e5e' visibility='default' filepath='include/linux/notifier.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='of_device_id' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='260' column='1' id='8bb45a31'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/linux/mod_devicetable.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='type' type-id='16dc656a' visibility='default' filepath='include/linux/mod_devicetable.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='compatible' type-id='e3204322' visibility='default' filepath='include/linux/mod_devicetable.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mod_devicetable.h' line='264' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='percpu_ref' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/percpu-refcount.h' line='95' column='1' id='818799b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f22a8abb' visibility='default' filepath='include/linux/percpu-refcount.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='percpu_count_ptr' type-id='7359adad' visibility='default' filepath='include/linux/percpu-refcount.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='release' type-id='903b12fe' visibility='default' filepath='include/linux/percpu-refcount.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='confirm_switch' type-id='903b12fe' visibility='default' filepath='include/linux/percpu-refcount.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='force_atomic' type-id='b50a4934' visibility='default' filepath='include/linux/percpu-refcount.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='allow_reinit' type-id='b50a4934' visibility='default' filepath='include/linux/percpu-refcount.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/percpu-refcount.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pid_namespace' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/pid_namespace.h' line='24' column='1' id='0252e252'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/pid_namespace.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='idr' type-id='37ce495e' visibility='default' filepath='include/linux/pid_namespace.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/pid_namespace.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pid_allocated' type-id='f0981eeb' visibility='default' filepath='include/linux/pid_namespace.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='child_reaper' type-id='f23e2572' visibility='default' filepath='include/linux/pid_namespace.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pid_cachep' type-id='f3b4aca8' visibility='default' filepath='include/linux/pid_namespace.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='level' type-id='f0981eeb' visibility='default' filepath='include/linux/pid_namespace.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='parent' type-id='b816e1d0' visibility='default' filepath='include/linux/pid_namespace.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='proc_mnt' type-id='549da824' visibility='default' filepath='include/linux/pid_namespace.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='proc_self' type-id='27675065' visibility='default' filepath='include/linux/pid_namespace.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='proc_thread_self' type-id='27675065' visibility='default' filepath='include/linux/pid_namespace.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/pid_namespace.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ucounts' type-id='b1d4934a' visibility='default' filepath='include/linux/pid_namespace.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='proc_work' type-id='ef9025d0' visibility='default' filepath='include/linux/pid_namespace.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='pid_gid' type-id='094d8048' visibility='default' filepath='include/linux/pid_namespace.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='hide_pid' type-id='95e97e5e' visibility='default' filepath='include/linux/pid_namespace.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='reboot' type-id='95e97e5e' visibility='default' filepath='include/linux/pid_namespace.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='ns' type-id='99f367f2' visibility='default' filepath='include/linux/pid_namespace.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pipe_buffer' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/pipe_fs_i.h' line='21' column='1' id='a490b814'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page' type-id='02f11ed4' visibility='default' filepath='include/linux/pipe_fs_i.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='edef9855' visibility='default' filepath='include/linux/pipe_fs_i.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='private' type-id='7359adad' visibility='default' filepath='include/linux/pipe_fs_i.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='plist_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/plist.h' line='79' column='1' id='57b0eed2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node_list' type-id='72f469ec' visibility='default' filepath='include/linux/plist.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pm_domain_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pm_domain.h' line='172' column='1' id='3bf19710'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list_node' type-id='72f469ec' visibility='default' filepath='include/linux/pm_domain.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/pm_domain.h' line='174' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcu_work' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='130' column='1' id='7c0b9fdb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/workqueue.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/workqueue.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wq' type-id='242e3d19' visibility='default' filepath='include/linux/workqueue.h' line='135' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='return_instance' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/uprobes.h' line='83' column='1' id='c0342c43'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uprobe' type-id='57376310' visibility='default' filepath='include/linux/uprobes.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='stack' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='orig_ret_vaddr' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='chained' type-id='b50a4934' visibility='default' filepath='include/linux/uprobes.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='next' type-id='d38eb863' visibility='default' filepath='include/linux/uprobes.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rlimit' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/resource.h' line='43' column='1' id='60dcbf6c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rlim_cur' type-id='447da2ae' visibility='default' filepath='include/uapi/linux/resource.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rlim_max' type-id='447da2ae' visibility='default' filepath='include/uapi/linux/resource.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_cputime_atomic' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='48' column='1' id='4b60fba4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='utime' type-id='28ee064c' visibility='default' filepath='include/linux/sched/signal.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stime' type-id='28ee064c' visibility='default' filepath='include/linux/sched/signal.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sum_exec_runtime' type-id='28ee064c' visibility='default' filepath='include/linux/sched/signal.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='taskstats' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/uapi/linux/taskstats.h' line='41' column='1' id='3a97b64f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='d315442e' visibility='default' filepath='include/uapi/linux/taskstats.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ac_exitcode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/taskstats.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ac_flag' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/taskstats.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='ac_nice' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/taskstats.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpu_count' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cpu_delay_total' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='blkio_count' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='blkio_delay_total' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='swapin_count' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='swapin_delay_total' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cpu_run_real_total' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cpu_run_virtual_total' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ac_comm' type-id='16dc656a' visibility='default' filepath='include/uapi/linux/taskstats.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ac_sched' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/taskstats.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='904'>
+          <var-decl name='ac_pad' type-id='c216126b' visibility='default' filepath='include/uapi/linux/taskstats.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ac_uid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/taskstats.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='ac_gid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/taskstats.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ac_pid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/taskstats.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='ac_ppid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/taskstats.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='ac_btime' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/taskstats.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ac_etime' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ac_utime' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ac_stime' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ac_minflt' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='ac_majflt' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='coremem' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='virtmem' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='hiwater_rss' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='hiwater_vm' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='read_char' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='write_char' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='read_syscalls' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='write_syscalls' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='read_bytes' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='write_bytes' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='cancelled_write_bytes' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='nvcsw' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='nivcsw' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='ac_utimescaled' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ac_stimescaled' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='cpu_scaled_run_real_total' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='freepages_count' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='freepages_delay_total' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='thrashing_count' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='thrashing_delay_total' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timerqueue_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/timerqueue.h' line='14' column='1' id='ff3c7f20'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_root' type-id='6fe1603d' visibility='default' filepath='include/linux/timerqueue.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_audit_buf' is-struct='yes' visibility='default' is-declaration-only='yes' id='9127cd0e'/>
+      <class-decl name='tty_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='4c8d9cac'/>
+      <class-decl name='upid' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pid.h' line='54' column='1' id='120c01b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr' type-id='95e97e5e' visibility='default' filepath='include/linux/pid.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ns' type-id='b816e1d0' visibility='default' filepath='include/linux/pid.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uprobe' size-in-bits='1856' is-struct='yes' visibility='default' filepath='kernel/events/uprobes.c' line='55' column='1' id='b7e0fed2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='kernel/events/uprobes.c' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ref' type-id='64615833' visibility='default' filepath='kernel/events/uprobes.c' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='register_rwsem' type-id='f19fdb93' visibility='default' filepath='kernel/events/uprobes.c' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='consumer_rwsem' type-id='f19fdb93' visibility='default' filepath='kernel/events/uprobes.c' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pending_list' type-id='72f469ec' visibility='default' filepath='kernel/events/uprobes.c' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='consumers' type-id='af0533e7' visibility='default' filepath='kernel/events/uprobes.c' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='inode' type-id='7e666abe' visibility='default' filepath='kernel/events/uprobes.c' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='offset' type-id='69bf7bee' visibility='default' filepath='kernel/events/uprobes.c' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ref_ctr_offset' type-id='69bf7bee' visibility='default' filepath='kernel/events/uprobes.c' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='kernel/events/uprobes.c' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='arch' type-id='0b6ba789' visibility='default' filepath='kernel/events/uprobes.c' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uprobes_state' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/uprobes.h' line='101' column='1' id='6308a819'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xol_area' type-id='3d15880e' visibility='default' filepath='include/linux/uprobes.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='user_struct' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/sched/user.h' line='14' column='1' id='ddd7cbfe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__count' type-id='64615833' visibility='default' filepath='include/linux/sched/user.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='processes' type-id='49178f86' visibility='default' filepath='include/linux/sched/user.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sigpending' type-id='49178f86' visibility='default' filepath='include/linux/sched/user.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='epoll_watches' type-id='f22a8abb' visibility='default' filepath='include/linux/sched/user.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='locked_shm' type-id='7359adad' visibility='default' filepath='include/linux/sched/user.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unix_inflight' type-id='7359adad' visibility='default' filepath='include/linux/sched/user.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pipe_bufs' type-id='f22a8abb' visibility='default' filepath='include/linux/sched/user.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='uidhash_node' type-id='03a4a074' visibility='default' filepath='include/linux/sched/user.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/sched/user.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='locked_vm' type-id='f22a8abb' visibility='default' filepath='include/linux/sched/user.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ratelimit' type-id='8b829a50' visibility='default' filepath='include/linux/sched/user.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/user.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/user.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uts_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='44f52e9d'/>
+      <class-decl name='vm_area_struct' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='294' column='1' id='62c85860'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vm_start' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vm_end' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vm_next' type-id='2ae08426' visibility='default' filepath='include/linux/mm_types.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vm_prev' type-id='2ae08426' visibility='default' filepath='include/linux/mm_types.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vm_rb' type-id='2a8a6332' visibility='default' filepath='include/linux/mm_types.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rb_subtree_gap' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='vm_mm' type-id='df4b7819' visibility='default' filepath='include/linux/mm_types.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='vm_page_prot' type-id='2e2dcbd3' visibility='default' filepath='include/linux/mm_types.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vm_flags' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='' type-id='cc072175' visibility='default' filepath='include/linux/mm_types.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='anon_vma_chain' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='anon_vma' type-id='a8f86cda' visibility='default' filepath='include/linux/mm_types.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='vm_ops' type-id='9be87662' visibility='default' filepath='include/linux/mm_types.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='vm_pgoff' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='vm_file' type-id='77e79a4b' visibility='default' filepath='include/linux/mm_types.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='vm_private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mm_types.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='swap_readahead_info' type-id='f22a8abb' visibility='default' filepath='include/linux/mm_types.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='vm_userfaultfd_ctx' type-id='fdd6214e' visibility='default' filepath='include/linux/mm_types.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_vendor_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='370' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__51' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/uprobes.h' line='65' column='1' id='2b31becf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='autask' type-id='79aea64f' visibility='default' filepath='include/linux/uprobes.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vaddr' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__52' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/uprobes.h' line='70' column='1' id='46982a3f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dup_xol_work' type-id='e3d8ce29' visibility='default' filepath='include/linux/uprobes.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dup_xol_addr' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__8' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='094d8048' visibility='default' filepath='include/linux/uidgid.h' line='26' column='1' id='bac1227a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='2bb2b96f' visibility='default' filepath='include/linux/uidgid.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__40' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1' id='c60b207d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='si_signo' type-id='95e97e5e' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='si_errno' type-id='95e97e5e' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='si_code' type-id='95e97e5e' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_sifields' type-id='a60646cb' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__37' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='236' column='1' id='607bacb1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name_link' type-id='72f469ec' visibility='default' filepath='include/linux/key.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='keys' type-id='b58d1e12' visibility='default' filepath='include/linux/key.h' line='239' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='512' is-struct='yes' is-anonymous='yes' visibility='default' filepath='kernel/sched/sched.h' line='528' column='1' id='dbb6a82c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='load_avg' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='util_avg' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='runnable_sum' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='533' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__39' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='e6cd5ecf' visibility='default' filepath='include/linux/seqlock.h' line='411' column='1' id='c87ee7e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seqcount' type-id='3a74ff0b' visibility='default' filepath='include/linux/seqlock.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/seqlock.h' line='413' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__36' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='221' column='1' id='5b740cc8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len_desc' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='d0a699d1' visibility='default' filepath='include/linux/key.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='domain_tag' type-id='fce14c5f' visibility='default' filepath='include/linux/key.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='description' type-id='26a90f95' visibility='default' filepath='include/linux/key.h' line='226' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='158e8b98' size-in-bits='64' id='2a7b00f2'/>
+      <typedef-decl name='__kernel_uid32_t' type-id='f0981eeb' filepath='include/uapi/asm-generic/posix_types.h' line='49' column='1' id='70734f24'/>
+      <pointer-type-def type-id='5753d902' size-in-bits='64' id='c4b7e554'/>
+      <typedef-decl name='clockid_t' type-id='7eb128d4' filepath='include/linux/types.h' line='27' column='1' id='a1c3b834'/>
+      <typedef-decl name='int32_t' type-id='a7832498' filepath='include/linux/types.h' line='103' column='1' id='3ff5601b'/>
+      <typedef-decl name='iommu_dev_fault_handler_t' type-id='6d118cd1' filepath='include/linux/iommu.h' line='57' column='1' id='a84f5b46'/>
+      <typedef-decl name='iommu_fault_handler_t' type-id='8e0d1900' filepath='include/linux/iommu.h' line='53' column='1' id='a01c3626'/>
+      <typedef-decl name='kernel_cap_t' type-id='923128a5' filepath='include/linux/capability.h' line='26' column='1' id='7496b151'/>
+      <pointer-type-def type-id='68d3e576' size-in-bits='64' id='7a6c9108'/>
+      <typedef-decl name='mm_context_t' type-id='7319f51c' filepath='arch/arm64/include/asm/mmu.h' line='23' column='1' id='0eb9c3fd'/>
+      <typedef-decl name='uint32_t' type-id='19c2251e' filepath='include/linux/types.h' line='109' column='1' id='8f92235e'/>
+      <pointer-type-def type-id='19c2251e' size-in-bits='64' id='f9409001'/>
+      <union-decl name='key_payload' size-in-bits='256' visibility='default' filepath='include/linux/key.h' line='111' column='1' id='2888d74a'>
+        <data-member access='private'>
+          <var-decl name='rcu_data0' type-id='eaa32e2f' visibility='default' filepath='include/linux/key.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='data' type-id='209ef23f' visibility='default' filepath='include/linux/key.h' line='113' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__25' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='41' column='1' id='95408dfc'>
+        <data-member access='private'>
+          <var-decl name='rmtp' type-id='59229509' visibility='default' filepath='include/linux/restart_block.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='compat_rmtp' type-id='e69c040e' visibility='default' filepath='include/linux/restart_block.h' line='43' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__37' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='180' column='1' id='f47d5752'>
+        <data-member access='private'>
+          <var-decl name='_mapcount' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='page_type' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='units' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types.h' line='196' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__31' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/cred.h' line='149' column='1' id='0a97cc35'>
+        <data-member access='private'>
+          <var-decl name='non_rcu' type-id='95e97e5e' visibility='default' filepath='include/linux/cred.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/cred.h' line='151' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__15' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='79' column='1' id='1c70c8a9'>
+        <data-member access='private'>
+          <var-decl name='' type-id='9228d425' visibility='default' filepath='include/linux/mm_types.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='5f2b8baf' visibility='default' filepath='include/linux/mm_types.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='7d00e4f0' visibility='default' filepath='include/linux/mm_types.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='1c2d6ac7' visibility='default' filepath='include/linux/mm_types.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='ce8e16a4' visibility='default' filepath='include/linux/mm_types.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='b32fec8c' visibility='default' filepath='include/linux/mm_types.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='754ab6d5' visibility='default' filepath='include/linux/mm_types.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/mm_types.h' line='177' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='45660d72' size-in-bits='64' id='c79c9f4c'/>
+      <pointer-type-def type-id='0fae1622' size-in-bits='64' id='d44a8cec'/>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='2944' id='d964a553'>
+        <subrange length='46' type-id='7ff19f0f' id='8b86bc1b'/>
+      </array-type-def>
+      <pointer-type-def type-id='8c178e22' size-in-bits='64' id='c0ced320'/>
+      <pointer-type-def type-id='19e88833' size-in-bits='64' id='549da823'/>
+      <pointer-type-def type-id='82e3e1cf' size-in-bits='64' id='d846ae3b'/>
+      <pointer-type-def type-id='47d2043e' size-in-bits='64' id='604374c8'/>
+      <pointer-type-def type-id='f67639d3' size-in-bits='64' id='7bca30b7'/>
+      <pointer-type-def type-id='f83bf2cd' size-in-bits='64' id='f13b7179'/>
+      <pointer-type-def type-id='1c0f29cf' size-in-bits='64' id='1c9e19fb'/>
+      <pointer-type-def type-id='24bb49a8' size-in-bits='64' id='54777a92'/>
+      <pointer-type-def type-id='ca7f7878' size-in-bits='64' id='9d640202'/>
+      <pointer-type-def type-id='5c155a71' size-in-bits='64' id='59229509'/>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='24' id='c216126b'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='72' id='060772ed'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <pointer-type-def type-id='14f332cc' size-in-bits='64' id='a8f86cda'/>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='256' id='b6b7435e'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='66f1e832' size-in-bits='64' id='aede2cf0'/>
+      <pointer-type-def type-id='a73d96cf' size-in-bits='64' id='d8e759a7'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='256' id='16dc656a'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <qualified-type-def type-id='8b7a2cd2' const='yes' id='9ce849db'/>
+      <pointer-type-def type-id='2153cf5d' size-in-bits='64' id='edef9855'/>
+      <pointer-type-def type-id='92e9b57c' size-in-bits='64' id='9be87662'/>
+      <enum-decl name='dev_pm_qos_req_type' filepath='include/linux/pm_qos.h' line='103' column='1' id='c47ba023'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DEV_PM_QOS_RESUME_LATENCY' value='1'/>
+        <enumerator name='DEV_PM_QOS_LATENCY_TOLERANCE' value='2'/>
+        <enumerator name='DEV_PM_QOS_MIN_FREQUENCY' value='3'/>
+        <enumerator name='DEV_PM_QOS_MAX_FREQUENCY' value='4'/>
+        <enumerator name='DEV_PM_QOS_FLAGS' value='5'/>
+      </enum-decl>
+      <enum-decl name='kobj_ns_type' filepath='include/linux/kobject_ns.h' line='26' column='1' id='52127d59'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='KOBJ_NS_TYPE_NONE' value='0'/>
+        <enumerator name='KOBJ_NS_TYPE_NET' value='1'/>
+        <enumerator name='KOBJ_NS_TYPES' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='d4693377' size-in-bits='64' id='e9910ceb'/>
+      <pointer-type-def type-id='cbab5390' size-in-bits='64' id='c297681a'/>
+      <pointer-type-def type-id='34e265cf' size-in-bits='64' id='900dcb03'/>
+      <pointer-type-def type-id='8f5d4d00' size-in-bits='64' id='e3a3f61a'/>
+      <pointer-type-def type-id='fe070fe8' size-in-bits='64' id='7e666abe'/>
+      <pointer-type-def type-id='bde8b845' size-in-bits='64' id='841b4311'/>
+      <pointer-type-def type-id='2a123bf1' size-in-bits='64' id='4324a0e5'/>
+      <pointer-type-def type-id='630a7fa4' size-in-bits='64' id='15f6292e'/>
+      <pointer-type-def type-id='00631170' size-in-bits='64' id='5eff49b2'/>
+      <pointer-type-def type-id='41d25fad' size-in-bits='64' id='bde527e9'/>
+      <pointer-type-def type-id='bdb68106' size-in-bits='64' id='8e0d1900'/>
+      <pointer-type-def type-id='9bb659f5' size-in-bits='64' id='6d118cd1'/>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='infinite' id='1fdc7fa6'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='3173bc57' size-in-bits='64' id='fce14c5f'/>
+      <pointer-type-def type-id='71e87d49' size-in-bits='64' id='d0a699d1'/>
+      <pointer-type-def type-id='a3119fea' size-in-bits='64' id='f3b4aca8'/>
+      <pointer-type-def type-id='f4b65c68' size-in-bits='64' id='e69c040e'/>
+      <pointer-type-def type-id='ed7b7f6b' size-in-bits='64' id='903b12fe'/>
+      <class-decl name='arch_uprobe' size-in-bits='384' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/uprobes.h' line='24' column='1' id='0b6ba789'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='e021ecb2' visibility='default' filepath='arch/arm64/include/asm/uprobes.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='api' type-id='f21a6717' visibility='default' filepath='arch/arm64/include/asm/uprobes.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='simulate' type-id='b50a4934' visibility='default' filepath='arch/arm64/include/asm/uprobes.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='arch_uprobe_task' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/uprobes.h' line='21' column='1' id='79aea64f'/>
+      <class-decl name='assoc_array' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/assoc_array.h' line='22' column='1' id='b58d1e12'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root' type-id='815cf0d3' visibility='default' filepath='include/linux/assoc_array.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_leaves_on_tree' type-id='7359adad' visibility='default' filepath='include/linux/assoc_array.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_base_stat' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='279' column='1' id='cfd8587e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cputime' type-id='ad6873f4' visibility='default' filepath='include/linux/cgroup-defs.h' line='280' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_bpf' size-in-bits='6080' is-struct='yes' visibility='default' filepath='include/linux/bpf-cgroup.h' line='62' column='1' id='b80e3996'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='effective' type-id='47645c1d' visibility='default' filepath='include/linux/bpf-cgroup.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='progs' type-id='a835e1f5' visibility='default' filepath='include/linux/bpf-cgroup.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='flags' type-id='bd44dad8' visibility='default' filepath='include/linux/bpf-cgroup.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='inactive' type-id='380c7edc' visibility='default' filepath='include/linux/bpf-cgroup.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='include/linux/bpf-cgroup.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='release_work' type-id='ef9025d0' visibility='default' filepath='include/linux/bpf-cgroup.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_file' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='119' column='1' id='37a4ee40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kn' type-id='150efd3f' visibility='default' filepath='include/linux/cgroup-defs.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='notified_at' type-id='7359adad' visibility='default' filepath='include/linux/cgroup-defs.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='notify_timer' type-id='abe41e67' visibility='default' filepath='include/linux/cgroup-defs.h' line='123' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_freezer_state' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='332' column='1' id='ad50988b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='freeze' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='e_freeze' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_frozen_descendants' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nr_frozen_tasks' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='348' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_subsys' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='629' column='1' id='1d115fd5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='css_alloc' type-id='a87691ee' visibility='default' filepath='include/linux/cgroup-defs.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='css_online' type-id='8bdbbb63' visibility='default' filepath='include/linux/cgroup-defs.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='css_offline' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='css_released' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='css_free' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='css_reset' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='css_rstat_flush' type-id='fe17c379' visibility='default' filepath='include/linux/cgroup-defs.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='css_extra_stat_show' type-id='f22a42d7' visibility='default' filepath='include/linux/cgroup-defs.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='can_attach' type-id='354bcec3' visibility='default' filepath='include/linux/cgroup-defs.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cancel_attach' type-id='6484073c' visibility='default' filepath='include/linux/cgroup-defs.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='attach' type-id='6484073c' visibility='default' filepath='include/linux/cgroup-defs.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='post_attach' type-id='953b12f8' visibility='default' filepath='include/linux/cgroup-defs.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='can_fork' type-id='2c2624ea' visibility='default' filepath='include/linux/cgroup-defs.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cancel_fork' type-id='1c9e19fb' visibility='default' filepath='include/linux/cgroup-defs.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fork' type-id='1c9e19fb' visibility='default' filepath='include/linux/cgroup-defs.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='exit' type-id='1c9e19fb' visibility='default' filepath='include/linux/cgroup-defs.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='release' type-id='1c9e19fb' visibility='default' filepath='include/linux/cgroup-defs.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='bind' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='early_init' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='implicit_on_dfl' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='threaded' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='broken_hierarchy' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='warned_broken_hierarchy' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/cgroup-defs.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='legacy_name' type-id='80f4b756' visibility='default' filepath='include/linux/cgroup-defs.h' line='698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='root' type-id='aede2cf0' visibility='default' filepath='include/linux/cgroup-defs.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='css_idr' type-id='37ce495e' visibility='default' filepath='include/linux/cgroup-defs.h' line='704' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='cfts' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='dfl_cftypes' type-id='03054cfa' visibility='default' filepath='include/linux/cgroup-defs.h' line='716' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='legacy_cftypes' type-id='03054cfa' visibility='default' filepath='include/linux/cgroup-defs.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='depends_on' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='726' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='core_state' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='378' column='1' id='0e1f7cac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_threads' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dumper' type-id='f3d147c3' visibility='default' filepath='include/linux/mm_types.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='startup' type-id='f9fef04f' visibility='default' filepath='include/linux/mm_types.h' line='381' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dentry' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/dcache.h' line='90' column='1' id='d6ebca75'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='d_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/dcache.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='d_seq' type-id='e14c3b11' visibility='default' filepath='include/linux/dcache.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='d_hash' type-id='8db0df1b' visibility='default' filepath='include/linux/dcache.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='d_parent' type-id='27675065' visibility='default' filepath='include/linux/dcache.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='d_name' type-id='02244303' visibility='default' filepath='include/linux/dcache.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='d_inode' type-id='7e666abe' visibility='default' filepath='include/linux/dcache.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='d_iname' type-id='fc872715' visibility='default' filepath='include/linux/dcache.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='d_lockref' type-id='60efdfd3' visibility='default' filepath='include/linux/dcache.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='d_op' type-id='1ee57353' visibility='default' filepath='include/linux/dcache.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='d_sb' type-id='42c8f564' visibility='default' filepath='include/linux/dcache.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='d_time' type-id='7359adad' visibility='default' filepath='include/linux/dcache.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='d_fsdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/dcache.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='' type-id='ba311a3a' visibility='default' filepath='include/linux/dcache.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='d_child' type-id='72f469ec' visibility='default' filepath='include/linux/dcache.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='d_subdirs' type-id='72f469ec' visibility='default' filepath='include/linux/dcache.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='d_u' type-id='ba0a0e48' visibility='default' filepath='include/linux/dcache.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='124' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='961' column='1' id='b4b8adeb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='f_u' type-id='8c8e2781' visibility='default' filepath='include/linux/fs.h' line='965' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='f_path' type-id='b5382ece' visibility='default' filepath='include/linux/fs.h' line='966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='f_inode' type-id='7e666abe' visibility='default' filepath='include/linux/fs.h' line='967' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='f_op' type-id='61758ee5' visibility='default' filepath='include/linux/fs.h' line='968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='f_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='f_write_hint' type-id='0d20c3dd' visibility='default' filepath='include/linux/fs.h' line='975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='f_count' type-id='f22a8abb' visibility='default' filepath='include/linux/fs.h' line='976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='f_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='f_mode' type-id='2665334e' visibility='default' filepath='include/linux/fs.h' line='978' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='f_pos_lock' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='f_pos' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='980' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='f_owner' type-id='6b640edd' visibility='default' filepath='include/linux/fs.h' line='981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='f_cred' type-id='bc33861a' visibility='default' filepath='include/linux/fs.h' line='982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='f_ra' type-id='b31f003f' visibility='default' filepath='include/linux/fs.h' line='983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='f_version' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='f_security' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='f_ep_links' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='f_tfile_llink' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='f_mapping' type-id='f57039f0' visibility='default' filepath='include/linux/fs.h' line='997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='f_wb_err' type-id='1da55f79' visibility='default' filepath='include/linux/fs.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='f_sb_err' type-id='1da55f79' visibility='default' filepath='include/linux/fs.h' line='999' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='group_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/cred.h' line='25' column='1' id='781993c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='49178f86' visibility='default' filepath='include/linux/cred.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ngroups' type-id='95e97e5e' visibility='default' filepath='include/linux/cred.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gid' type-id='da6e2919' visibility='default' filepath='include/linux/cred.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hrtimer_cpu_base' size-in-bits='4608' is-struct='yes' visibility='default' filepath='include/linux/hrtimer.h' line='216' column='1' id='8d24b00b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/hrtimer.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='active_bases' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='clock_was_set_seq' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='hres_active' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='in_hrtirq' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='hang_detected' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='softirq_activated' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nr_events' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_retries' type-id='8efea9e5' visibility='default' filepath='include/linux/hrtimer.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='nr_hangs' type-id='8efea9e5' visibility='default' filepath='include/linux/hrtimer.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_hang_time' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='expires_next' type-id='fbc017ef' visibility='default' filepath='include/linux/hrtimer.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='next_timer' type-id='08c8d0fa' visibility='default' filepath='include/linux/hrtimer.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='softirq_expires_next' type-id='fbc017ef' visibility='default' filepath='include/linux/hrtimer.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='softirq_next_timer' type-id='08c8d0fa' visibility='default' filepath='include/linux/hrtimer.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='clock_base' type-id='cb01bf4b' visibility='default' filepath='include/linux/hrtimer.h' line='239' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernel_cap_struct' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/capability.h' line='24' column='1' id='923128a5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap' type-id='839e8989' visibility='default' filepath='include/linux/capability.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kioctx_table' is-struct='yes' visibility='default' is-declaration-only='yes' id='5d0f15d4'/>
+      <class-decl name='linux_binfmt' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/binfmts.h' line='102' column='1' id='47d6e76e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lh' type-id='72f469ec' visibility='default' filepath='include/linux/binfmts.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/linux/binfmts.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='load_binary' type-id='c5c535b4' visibility='default' filepath='include/linux/binfmts.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='load_shlib' type-id='4da4101d' visibility='default' filepath='include/linux/binfmts.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='core_dump' type-id='be2c124b' visibility='default' filepath='include/linux/binfmts.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='min_coredump' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmu_notifier_mm' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mmu_notifier.h' line='56' column='1' id='770fc578'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='e151255a' visibility='default' filepath='include/linux/mmu_notifier.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmu_notifier.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ns_common' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/ns_common.h' line='7' column='1' id='99f367f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stashed' type-id='f22a8abb' visibility='default' filepath='include/linux/ns_common.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='4598bd2d' visibility='default' filepath='include/linux/ns_common.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='inum' type-id='f0981eeb' visibility='default' filepath='include/linux/ns_common.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_event' is-struct='yes' visibility='default' is-declaration-only='yes' id='7263c471'/>
+      <class-decl name='pollfd' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/asm-generic/poll.h' line='36' column='1' id='b440e872'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fd' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/poll.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='events' type-id='a2185560' visibility='default' filepath='include/uapi/asm-generic/poll.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='revents' type-id='a2185560' visibility='default' filepath='include/uapi/asm-generic/poll.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='psi_group' size-in-bits='5312' is-struct='yes' visibility='default' filepath='include/linux/psi_types.h' line='128' column='1' id='12878ab3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='avgs_lock' type-id='925167dc' visibility='default' filepath='include/linux/psi_types.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pcpu' type-id='9dc40234' visibility='default' filepath='include/linux/psi_types.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='avg_total' type-id='64af1365' visibility='default' filepath='include/linux/psi_types.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='avg_last_update' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='avg_next_update' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='avgs_work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/psi_types.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='total' type-id='a4295685' visibility='default' filepath='include/linux/psi_types.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='avg' type-id='625e8699' visibility='default' filepath='include/linux/psi_types.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='poll_task' type-id='f23e2572' visibility='default' filepath='include/linux/psi_types.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='poll_timer' type-id='abe41e67' visibility='default' filepath='include/linux/psi_types.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='poll_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/psi_types.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='poll_wakeup' type-id='49178f86' visibility='default' filepath='include/linux/psi_types.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='trigger_lock' type-id='925167dc' visibility='default' filepath='include/linux/psi_types.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='triggers' type-id='72f469ec' visibility='default' filepath='include/linux/psi_types.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='nr_triggers' type-id='586ea944' visibility='default' filepath='include/linux/psi_types.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4768'>
+          <var-decl name='poll_states' type-id='19c2251e' visibility='default' filepath='include/linux/psi_types.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='poll_min_period' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='polling_total' type-id='64af1365' visibility='default' filepath='include/linux/psi_types.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='polling_next_update' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='polling_until' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='165' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ratelimit_state' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/ratelimit.h' line='15' column='1' id='8b829a50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/ratelimit.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='interval' type-id='95e97e5e' visibility='default' filepath='include/linux/ratelimit.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='burst' type-id='95e97e5e' visibility='default' filepath='include/linux/ratelimit.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='printed' type-id='95e97e5e' visibility='default' filepath='include/linux/ratelimit.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='missed' type-id='95e97e5e' visibility='default' filepath='include/linux/ratelimit.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='begin' type-id='7359adad' visibility='default' filepath='include/linux/ratelimit.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/ratelimit.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rq' size-in-bits='25088' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='859' column='1' id='d5ee6a94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last_load_update_tick' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='last_blocked_load_update_tick' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='has_blocked_load' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='877' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='nohz_tick_stopped' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nohz_flags' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='880' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nr_load_updates' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nr_switches' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='uclamp' type-id='cf2a9adf' visibility='default' filepath='kernel/sched/sched.h' line='888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='uclamp_flags' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='cfs' type-id='feeb4c2f' visibility='default' filepath='kernel/sched/sched.h' line='893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='rt' type-id='e648d771' visibility='default' filepath='kernel/sched/sched.h' line='894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18240'>
+          <var-decl name='dl' type-id='53d038df' visibility='default' filepath='kernel/sched/sched.h' line='895' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19072'>
+          <var-decl name='leaf_cfs_rq_list' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='899' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19200'>
+          <var-decl name='tmp_alone_branch' type-id='e84b031a' visibility='default' filepath='kernel/sched/sched.h' line='900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19264'>
+          <var-decl name='nr_uninterruptible' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='curr' type-id='f23e2572' visibility='default' filepath='kernel/sched/sched.h' line='911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19392'>
+          <var-decl name='idle' type-id='f23e2572' visibility='default' filepath='kernel/sched/sched.h' line='912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19456'>
+          <var-decl name='stop' type-id='f23e2572' visibility='default' filepath='kernel/sched/sched.h' line='913' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19520'>
+          <var-decl name='next_balance' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19584'>
+          <var-decl name='prev_mm' type-id='df4b7819' visibility='default' filepath='kernel/sched/sched.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19648'>
+          <var-decl name='clock_update_flags' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='917' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19712'>
+          <var-decl name='clock' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19968'>
+          <var-decl name='clock_task' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='920' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='clock_pelt' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20096'>
+          <var-decl name='lost_idle_time' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20160'>
+          <var-decl name='nr_iowait' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='924' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20192'>
+          <var-decl name='membarrier_state' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20224'>
+          <var-decl name='rd' type-id='c13bca88' visibility='default' filepath='kernel/sched/sched.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20288'>
+          <var-decl name='sd' type-id='e9d32201' visibility='default' filepath='kernel/sched/sched.h' line='932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20352'>
+          <var-decl name='cpu_capacity' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20416'>
+          <var-decl name='cpu_capacity_orig' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20480'>
+          <var-decl name='balance_callback' type-id='69c138b1' visibility='default' filepath='kernel/sched/sched.h' line='937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20544'>
+          <var-decl name='idle_balance' type-id='002ac4a6' visibility='default' filepath='kernel/sched/sched.h' line='939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20608'>
+          <var-decl name='misfit_task_load' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20672'>
+          <var-decl name='active_balance' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20704'>
+          <var-decl name='push_cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20736'>
+          <var-decl name='active_balance_work' type-id='8eb07132' visibility='default' filepath='kernel/sched/sched.h' line='946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21056'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='949' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21088'>
+          <var-decl name='online' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='950' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21120'>
+          <var-decl name='cfs_tasks' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21504'>
+          <var-decl name='avg_rt' type-id='629c8d83' visibility='default' filepath='kernel/sched/sched.h' line='954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22016'>
+          <var-decl name='avg_dl' type-id='629c8d83' visibility='default' filepath='kernel/sched/sched.h' line='955' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22528'>
+          <var-decl name='avg_irq' type-id='629c8d83' visibility='default' filepath='kernel/sched/sched.h' line='957' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23040'>
+          <var-decl name='idle_stamp' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23104'>
+          <var-decl name='avg_idle' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='960' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23168'>
+          <var-decl name='max_idle_balance_cost' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='963' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23232'>
+          <var-decl name='prev_irq_time' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='967' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23296'>
+          <var-decl name='prev_steal_time' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='970' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23360'>
+          <var-decl name='calc_load_update' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23424'>
+          <var-decl name='calc_load_active' type-id='bd54fe1a' visibility='default' filepath='kernel/sched/sched.h' line='978' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23488'>
+          <var-decl name='hrtick_csd_pending' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23552'>
+          <var-decl name='hrtick_csd' type-id='223a68bd' visibility='default' filepath='kernel/sched/sched.h' line='983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23808'>
+          <var-decl name='hrtick_timer' type-id='b6993efc' visibility='default' filepath='kernel/sched/sched.h' line='985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24384'>
+          <var-decl name='rq_sched_info' type-id='59ddd03d' visibility='default' filepath='kernel/sched/sched.h' line='990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24640'>
+          <var-decl name='rq_cpu_time' type-id='3a47d82b' visibility='default' filepath='kernel/sched/sched.h' line='991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24704'>
+          <var-decl name='yld_count' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24736'>
+          <var-decl name='sched_count' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24768'>
+          <var-decl name='sched_goidle' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24800'>
+          <var-decl name='ttwu_count' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24832'>
+          <var-decl name='ttwu_local' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24896'>
+          <var-decl name='wake_list' type-id='77df194e' visibility='default' filepath='kernel/sched/sched.h' line='1007' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24960'>
+          <var-decl name='idle_state' type-id='2e3e746d' visibility='default' filepath='kernel/sched/sched.h' line='1012' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sigaction' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/signal_types.h' line='35' column='1' id='fe391c48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sa_handler' type-id='8cdd9566' visibility='default' filepath='include/linux/signal_types.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sa_flags' type-id='7359adad' visibility='default' filepath='include/linux/signal_types.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sa_restorer' type-id='81564178' visibility='default' filepath='include/linux/signal_types.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sa_mask' type-id='daf33c64' visibility='default' filepath='include/linux/signal_types.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='user_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='8c178e22'/>
+      <class-decl name='vfsmount' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/mount.h' line='69' column='1' id='19e88833'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mnt_root' type-id='27675065' visibility='default' filepath='include/linux/mount.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mnt_sb' type-id='42c8f564' visibility='default' filepath='include/linux/mount.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mnt_flags' type-id='95e97e5e' visibility='default' filepath='include/linux/mount.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mount.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mount.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/mount.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/mount.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vm_userfaultfd_ctx' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='285' column='1' id='fdd6214e'/>
+      <class-decl name='__anonymous_struct__29' size-in-bits='192' is-struct='yes' is-anonymous='yes' naming-typedef-id='0eb9c3fd' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='19' column='1' id='7319f51c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='28ee064c' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vdso' type-id='eaa32e2f' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__54' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='160' column='1' id='754ab6d5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pgmap' type-id='b1a5e68a' visibility='default' filepath='include/linux/mm_types.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='zone_device_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mm_types.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__15' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='98' column='1' id='5f2b8baf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dma_addr' type-id='cf29c9b3' visibility='default' filepath='include/linux/mm_types.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__11' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='80' column='1' id='9228d425'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lru' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mapping' type-id='f57039f0' visibility='default' filepath='include/linux/mm_types.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='index' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='private' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__16' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='105' column='1' id='7d00e4f0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='c06bf9dd' visibility='default' filepath='include/linux/mm_types.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='slab_cache' type-id='f3b4aca8' visibility='default' filepath='include/linux/mm_types.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='freelist' type-id='eaa32e2f' visibility='default' filepath='include/linux/mm_types.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='77c8e02e' visibility='default' filepath='include/linux/mm_types.h' line='122' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__20' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='140' column='1' id='ce8e16a4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_compound_pad_1' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_compound_pad_2' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='deferred_list' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='144' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__21' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='146' column='1' id='b32fec8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_pt_pad_1' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pmd_huge_pte' type-id='c28b9700' visibility='default' filepath='include/linux/mm_types.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_pt_pad_2' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='787e8237' visibility='default' filepath='include/linux/mm_types.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ptl' type-id='fb4018a0' visibility='default' filepath='include/linux/mm_types.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__19' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='132' column='1' id='1c2d6ac7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='compound_head' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='compound_dtor' type-id='002ac4a6' visibility='default' filepath='include/linux/mm_types.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='compound_order' type-id='002ac4a6' visibility='default' filepath='include/linux/mm_types.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='compound_mapcount' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__kernel_clockid_t' type-id='95e97e5e' filepath='include/uapi/asm-generic/posix_types.h' line='93' column='1' id='7eb128d4'/>
+      <typedef-decl name='__uint128_t' type-id='4f340252' filepath='arch/arm64/crypto/aes-glue.c' line='1035' column='1' id='7e2609cc'/>
+      <pointer-type-def type-id='3273164b' size-in-bits='64' id='d4ae3f3f'/>
+      <pointer-type-def type-id='f611d028' size-in-bits='64' id='e4913062'/>
+      <pointer-type-def type-id='19bf080d' size-in-bits='64' id='a9ee1319'/>
+      <typedef-decl name='dma_addr_t' type-id='91ce1af9' filepath='include/linux/types.h' line='148' column='1' id='cf29c9b3'/>
+      <typedef-decl name='gid_t' type-id='b4413cee' filepath='include/linux/types.h' line='33' column='1' id='2bb2b96f'/>
+      <typedef-decl name='kernel_ulong_t' type-id='7359adad' filepath='include/linux/mod_devicetable.h' line='14' column='1' id='0791d6c8'/>
+      <typedef-decl name='key_restrict_link_func_t' type-id='a5786cbb' filepath='include/linux/key.h' line='148' column='1' id='f87a5fab'/>
+      <typedef-decl name='notifier_fn_t' type-id='38a7cb79' filepath='include/linux/notifier.h' line='51' column='1' id='0ec8c658'/>
+      <typedef-decl name='pgd_t' type-id='59473550' filepath='arch/arm64/include/asm/pgtable-types.h' line='38' column='1' id='12aa8ce4'/>
+      <typedef-decl name='pgprot_t' type-id='051883a9' filepath='arch/arm64/include/asm/pgtable-types.h' line='42' column='1' id='2e2dcbd3'/>
+      <typedef-decl name='rwlock_t' type-id='d7ab0a14' filepath='include/linux/rwlock_types.h' line='20' column='1' id='ac16795b'/>
+      <pointer-type-def type-id='fdf3707c' size-in-bits='64' id='b1d4934a'/>
+      <union-decl name='__sifields' size-in-bits='256' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='32' column='1' id='a60646cb'>
+        <data-member access='private'>
+          <var-decl name='_kill' type-id='35888a92' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_timer' type-id='11b42bf5' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_rt' type-id='90a6a0a3' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_sigchld' type-id='5b8a7161' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_sigfault' type-id='b47416ba' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_sigpoll' type-id='88c21632' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_sigsys' type-id='07fe0781' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='108' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__33' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/iocontext.h' line='87' column='1' id='eb20ccf0'>
+        <data-member access='private'>
+          <var-decl name='ioc_node' type-id='03a4a074' visibility='default' filepath='include/linux/iocontext.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='__rcu_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/iocontext.h' line='89' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__32' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/iocontext.h' line='83' column='1' id='df248743'>
+        <data-member access='private'>
+          <var-decl name='q_node' type-id='72f469ec' visibility='default' filepath='include/linux/iocontext.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='__rcu_icq_cache' type-id='f3b4aca8' visibility='default' filepath='include/linux/iocontext.h' line='85' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__26' size-in-bits='448' is-anonymous='yes' visibility='default' filepath='include/linux/pm_qos.h' line='113' column='1' id='5d6ef881'>
+        <data-member access='private'>
+          <var-decl name='pnode' type-id='e3a91a7c' visibility='default' filepath='include/linux/pm_qos.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='flr' type-id='a70ae6be' visibility='default' filepath='include/linux/pm_qos.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='freq' type-id='da4cc8f3' visibility='default' filepath='include/linux/pm_qos.h' line='116' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__22' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='328' column='1' id='cc072175'>
+        <data-member access='private'>
+          <var-decl name='shared' type-id='0c408f16' visibility='default' filepath='include/linux/mm_types.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='anon_name' type-id='80f4b756' visibility='default' filepath='include/linux/mm_types.h' line='333' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__29' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='94' column='1' id='465ca58e'>
+        <data-member access='private'>
+          <var-decl name='' type-id='6a74abcf' visibility='default' filepath='include/linux/key.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='x' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='104' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='fdd49c5f' size-in-bits='64' id='af0533e7'/>
+      <pointer-type-def type-id='19e88834' size-in-bits='64' id='549da824'/>
+      <pointer-type-def type-id='d8fd579a' size-in-bits='64' id='c379ce2c'/>
+      <pointer-type-def type-id='afb1917e' size-in-bits='64' id='0cfacb48'/>
+      <pointer-type-def type-id='c00013f4' size-in-bits='64' id='def135ae'/>
+      <pointer-type-def type-id='c0e5af96' size-in-bits='64' id='8734cf20'/>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='256' id='209ef23f'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='c39df2b8' size-in-bits='64' id='3d15880e'/>
+      <pointer-type-def type-id='0fd82dc2' size-in-bits='64' id='f57039f0'/>
+      <pointer-type-def type-id='3249e303' size-in-bits='64' id='815cf0d3'/>
+      <pointer-type-def type-id='c75c7b06' size-in-bits='64' id='380c7edc'/>
+      <array-type-def dimensions='1' type-id='380c7edc' size-in-bits='1472' id='47645c1d'>
+        <subrange length='23' type-id='7ff19f0f' id='fdd0f594'/>
+      </array-type-def>
+      <pointer-type-def type-id='ea2ebeac' size-in-bits='64' id='03054cfa'/>
+      <pointer-type-def type-id='5332c7dc' size-in-bits='64' id='a87691ee'/>
+      <pointer-type-def type-id='1d22df6b' size-in-bits='64' id='1ee57353'/>
+      <pointer-type-def type-id='b8ae588d' size-in-bits='64' id='61758ee5'/>
+      <qualified-type-def type-id='ed6c59ba' const='yes' id='2153cf5d'/>
+      <pointer-type-def type-id='4e267e15' size-in-bits='64' id='4598bd2d'/>
+      <qualified-type-def type-id='19795245' const='yes' id='92e9b57c'/>
+      <pointer-type-def type-id='97aa083d' size-in-bits='64' id='2e3e746d'/>
+      <pointer-type-def type-id='8e586c5c' size-in-bits='64' id='b1a5e68a'/>
+      <enum-decl name='rw_hint' filepath='include/linux/fs.h' line='301' column='1' id='0d20c3dd'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='WRITE_LIFE_NOT_SET' value='0'/>
+        <enumerator name='WRITE_LIFE_NONE' value='1'/>
+        <enumerator name='WRITE_LIFE_SHORT' value='2'/>
+        <enumerator name='WRITE_LIFE_MEDIUM' value='3'/>
+        <enumerator name='WRITE_LIFE_LONG' value='4'/>
+        <enumerator name='WRITE_LIFE_EXTREME' value='5'/>
+      </enum-decl>
+      <array-type-def dimensions='1' type-id='1851ab9f' size-in-bits='4096' id='cb01bf4b'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <pointer-type-def type-id='749ee287' size-in-bits='64' id='8bdbbb63'/>
+      <pointer-type-def type-id='28d1931f' size-in-bits='64' id='354bcec3'/>
+      <pointer-type-def type-id='28cb132f' size-in-bits='64' id='be2c124b'/>
+      <pointer-type-def type-id='d07af849' size-in-bits='64' id='4da4101d'/>
+      <pointer-type-def type-id='f8cb692f' size-in-bits='64' id='a5786cbb'/>
+      <pointer-type-def type-id='17f2d2f2' size-in-bits='64' id='c5c535b4'/>
+      <pointer-type-def type-id='294be38d' size-in-bits='64' id='38a7cb79'/>
+      <pointer-type-def type-id='b52da57b' size-in-bits='64' id='f22a42d7'/>
+      <pointer-type-def type-id='595c4720' size-in-bits='64' id='2c2624ea'/>
+      <array-type-def dimensions='1' type-id='094d8048' size-in-bits='infinite' id='da6e2919'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='2944' id='a835e1f5'>
+        <subrange length='23' type-id='7ff19f0f' id='fdd0f594'/>
+      </array-type-def>
+      <pointer-type-def type-id='956e764e' size-in-bits='64' id='9dc40234'/>
+      <pointer-type-def type-id='9cdca91a' size-in-bits='64' id='c13bca88'/>
+      <pointer-type-def type-id='1706cf19' size-in-bits='64' id='e9d32201'/>
+      <class-decl name='__kernel_timespec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/time_types.h' line='7' column='1' id='5c155a71'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='3d9e85cc' visibility='default' filepath='include/uapi/linux/time_types.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tv_nsec' type-id='1eb56b1e' visibility='default' filepath='include/uapi/linux/time_types.h' line='9' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='anon_vma' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/rmap.h' line='29' column='1' id='14f332cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root' type-id='a8f86cda' visibility='default' filepath='include/linux/rmap.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/rmap.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcount' type-id='49178f86' visibility='default' filepath='include/linux/rmap.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='degree' type-id='f0981eeb' visibility='default' filepath='include/linux/rmap.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='parent' type-id='a8f86cda' visibility='default' filepath='include/linux/rmap.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rb_root' type-id='6fe1603d' visibility='default' filepath='include/linux/rmap.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='arch_probe_insn' size-in-bits='256' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/probes.h' line='14' column='1' id='f21a6717'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='insn' type-id='0abee587' visibility='default' filepath='arch/arm64/include/asm/probes.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pstate_cc' type-id='452b34c2' visibility='default' filepath='arch/arm64/include/asm/probes.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='handler' type-id='0e87d404' visibility='default' filepath='arch/arm64/include/asm/probes.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='restore' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/probes.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_root' size-in-bits='52480' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='499' column='1' id='66f1e832'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kf_root' type-id='e18defdb' visibility='default' filepath='include/linux/cgroup-defs.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='subsys_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hierarchy_id' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cgrp' type-id='ab9643dd' visibility='default' filepath='include/linux/cgroup-defs.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18752'>
+          <var-decl name='cgrp_ancestor_id_storage' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18784'>
+          <var-decl name='nr_cgrps' type-id='49178f86' visibility='default' filepath='include/linux/cgroup-defs.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18816'>
+          <var-decl name='root_list' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18944'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19008'>
+          <var-decl name='cgroup_idr' type-id='37ce495e' visibility='default' filepath='include/linux/cgroup-defs.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19200'>
+          <var-decl name='release_agent_path' type-id='d16c6df4' visibility='default' filepath='include/linux/cgroup-defs.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='51968'>
+          <var-decl name='name' type-id='59daf3ef' visibility='default' filepath='include/linux/cgroup-defs.h' line='530' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_rstat_cpu' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='303' column='1' id='a73d96cf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bsync' type-id='e4d85780' visibility='default' filepath='include/linux/cgroup-defs.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bstat' type-id='cfd8587e' visibility='default' filepath='include/linux/cgroup-defs.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_bstat' type-id='cfd8587e' visibility='default' filepath='include/linux/cgroup-defs.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='updated_children' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='updated_next' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='329' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='core_thread' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='373' column='1' id='f3d147c3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/mm_types.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='740b5503' visibility='default' filepath='include/linux/mm_types.h' line='375' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpu_stop_work' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/stop_machine.h' line='24' column='1' id='8eb07132'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/stop_machine.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fn' type-id='87dfefa3' visibility='default' filepath='include/linux/stop_machine.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='arg' type-id='eaa32e2f' visibility='default' filepath='include/linux/stop_machine.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='done' type-id='d589c913' visibility='default' filepath='include/linux/stop_machine.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dl_rq' size-in-bits='832' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='634' column='1' id='53d038df'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root' type-id='6fe1603d' visibility='default' filepath='kernel/sched/sched.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dl_nr_running' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='earliest_dl' type-id='8c6b5470' visibility='default' filepath='kernel/sched/sched.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dl_nr_migratory' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='overloaded' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pushable_dl_tasks_root' type-id='6fe1603d' visibility='default' filepath='kernel/sched/sched.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='running_bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='this_bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='extra_bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bw_ratio' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='687' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file_ra_state' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='941' column='1' id='b31f003f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='async_size' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ra_pages' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='mmap_miss' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='948' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prev_pos' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='949' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fown_struct' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='930' column='1' id='6b640edd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/linux/fs.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pid' type-id='b94e5398' visibility='default' filepath='include/linux/fs.h' line='932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pid_type' type-id='ce78cf46' visibility='default' filepath='include/linux/fs.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/fs.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='euid' type-id='d80b72e6' visibility='default' filepath='include/linux/fs.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='signum' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='935' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='freq_qos_request' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='96' column='1' id='da4cc8f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='1df5cca8' visibility='default' filepath='include/linux/pm_qos.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pnode' type-id='e3a91a7c' visibility='default' filepath='include/linux/pm_qos.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='qos' type-id='1351457a' visibility='default' filepath='include/linux/pm_qos.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hlist_bl_node' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/list_bl.h' line='38' column='1' id='8db0df1b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='d09d4bab' visibility='default' filepath='include/linux/list_bl.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pprev' type-id='e89ddc13' visibility='default' filepath='include/linux/list_bl.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inode' size-in-bits='5312' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='650' column='1' id='fe070fe8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='i_mode' type-id='2594b00f' visibility='default' filepath='include/linux/fs.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='i_opflags' type-id='8efea9e5' visibility='default' filepath='include/linux/fs.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='i_uid' type-id='d80b72e6' visibility='default' filepath='include/linux/fs.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='i_gid' type-id='094d8048' visibility='default' filepath='include/linux/fs.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='i_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='i_acl' type-id='2871909b' visibility='default' filepath='include/linux/fs.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='i_default_acl' type-id='2871909b' visibility='default' filepath='include/linux/fs.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='i_op' type-id='de2c232c' visibility='default' filepath='include/linux/fs.h' line='662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='i_sb' type-id='42c8f564' visibility='default' filepath='include/linux/fs.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='i_mapping' type-id='f57039f0' visibility='default' filepath='include/linux/fs.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='i_security' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='i_ino' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='' type-id='3ee18b51' visibility='default' filepath='include/linux/fs.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='i_rdev' type-id='8504f260' visibility='default' filepath='include/linux/fs.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='i_size' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='i_atime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='i_mtime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='i_ctime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='i_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='i_bytes' type-id='8efea9e5' visibility='default' filepath='include/linux/fs.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1136'>
+          <var-decl name='i_blkbits' type-id='f9b06939' visibility='default' filepath='include/linux/fs.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1144'>
+          <var-decl name='i_write_hint' type-id='f9b06939' visibility='default' filepath='include/linux/fs.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='i_blocks' type-id='17345459' visibility='default' filepath='include/linux/fs.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='i_state' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='i_rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/fs.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dirtied_when' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='dirtied_time_when' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='i_hash' type-id='03a4a074' visibility='default' filepath='include/linux/fs.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='i_io_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='i_wb' type-id='f885ca7d' visibility='default' filepath='include/linux/fs.h' line='708' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='i_wb_frn_winner' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='711' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='i_wb_frn_avg_time' type-id='1dc6a898' visibility='default' filepath='include/linux/fs.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2160'>
+          <var-decl name='i_wb_frn_history' type-id='1dc6a898' visibility='default' filepath='include/linux/fs.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='i_lru' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='715' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='i_sb_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='716' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='i_wb_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='' type-id='cbd4a95b' visibility='default' filepath='include/linux/fs.h' line='718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='i_version' type-id='28ee064c' visibility='default' filepath='include/linux/fs.h' line='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='i_sequence' type-id='28ee064c' visibility='default' filepath='include/linux/fs.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='i_count' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='i_dio_count' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='i_writecount' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='i_readcount' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='' type-id='67f3b119' visibility='default' filepath='include/linux/fs.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='i_flctx' type-id='731257ff' visibility='default' filepath='include/linux/fs.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='i_data' type-id='0fd82dc2' visibility='default' filepath='include/linux/fs.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='i_devices' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='' type-id='d1afa4fe' visibility='default' filepath='include/linux/fs.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='i_generation' type-id='3f1a6b60' visibility='default' filepath='include/linux/fs.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4896'>
+          <var-decl name='i_fsnotify_mask' type-id='3f1a6b60' visibility='default' filepath='include/linux/fs.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='i_fsnotify_marks' type-id='994d9d61' visibility='default' filepath='include/linux/fs.h' line='749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='i_crypt_info' type-id='1ea8c5af' visibility='default' filepath='include/linux/fs.h' line='753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='i_verity_info' type-id='ba18e248' visibility='default' filepath='include/linux/fs.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='i_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='763' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_ops' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='250' column='1' id='8b7a2cd2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capable' type-id='fd03a8f4' visibility='default' filepath='include/linux/iommu.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='domain_alloc' type-id='2908e93a' visibility='default' filepath='include/linux/iommu.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='domain_free' type-id='36caa4da' visibility='default' filepath='include/linux/iommu.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='attach_dev' type-id='21e9ca19' visibility='default' filepath='include/linux/iommu.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='detach_dev' type-id='32baba38' visibility='default' filepath='include/linux/iommu.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='map' type-id='2371b41a' visibility='default' filepath='include/linux/iommu.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='unmap' type-id='d1a6d6c2' visibility='default' filepath='include/linux/iommu.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flush_iotlb_all' type-id='36caa4da' visibility='default' filepath='include/linux/iommu.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='iotlb_sync_map' type-id='36caa4da' visibility='default' filepath='include/linux/iommu.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='iotlb_sync' type-id='a6bf568c' visibility='default' filepath='include/linux/iommu.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='iova_to_phys' type-id='c4904652' visibility='default' filepath='include/linux/iommu.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='add_device' type-id='613d39f5' visibility='default' filepath='include/linux/iommu.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='remove_device' type-id='dd787f72' visibility='default' filepath='include/linux/iommu.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='device_group' type-id='5448fdd7' visibility='default' filepath='include/linux/iommu.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='domain_get_attr' type-id='fe396a7b' visibility='default' filepath='include/linux/iommu.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='domain_set_attr' type-id='fe396a7b' visibility='default' filepath='include/linux/iommu.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_resv_regions' type-id='83d96d05' visibility='default' filepath='include/linux/iommu.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='put_resv_regions' type-id='83d96d05' visibility='default' filepath='include/linux/iommu.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='apply_resv_region' type-id='b20722ab' visibility='default' filepath='include/linux/iommu.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='domain_window_enable' type-id='7f31e8fb' visibility='default' filepath='include/linux/iommu.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='domain_window_disable' type-id='d3b2d361' visibility='default' filepath='include/linux/iommu.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='of_xlate' type-id='7fc43753' visibility='default' filepath='include/linux/iommu.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='is_attach_deferred' type-id='6ee36fa3' visibility='default' filepath='include/linux/iommu.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='dev_has_feat' type-id='6981b6e9' visibility='default' filepath='include/linux/iommu.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='dev_feat_enabled' type-id='6981b6e9' visibility='default' filepath='include/linux/iommu.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='dev_enable_feat' type-id='5a1281ab' visibility='default' filepath='include/linux/iommu.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dev_disable_feat' type-id='5a1281ab' visibility='default' filepath='include/linux/iommu.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='aux_attach_dev' type-id='21e9ca19' visibility='default' filepath='include/linux/iommu.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='aux_detach_dev' type-id='32baba38' visibility='default' filepath='include/linux/iommu.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='aux_get_pasid' type-id='21e9ca19' visibility='default' filepath='include/linux/iommu.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='sva_bind' type-id='925b860a' visibility='default' filepath='include/linux/iommu.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sva_unbind' type-id='4fb74714' visibility='default' filepath='include/linux/iommu.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sva_get_pasid' type-id='4ded61d5' visibility='default' filepath='include/linux/iommu.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='page_response' type-id='1ff48951' visibility='default' filepath='include/linux/iommu.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='pgsize_bitmap' type-id='7359adad' visibility='default' filepath='include/linux/iommu.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/iommu.h' line='312' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key_tag' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/key.h' line='85' column='1' id='3173bc57'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/key.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='include/linux/key.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='removed' type-id='b50a4934' visibility='default' filepath='include/linux/key.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key_type' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/key-type.h' line='63' column='1' id='71e87d49'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/key-type.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='def_datalen' type-id='b59d7dce' visibility='default' filepath='include/linux/key-type.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/key-type.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vet_description' type-id='70487b28' visibility='default' filepath='include/linux/key-type.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='preparse' type-id='320c9cb0' visibility='default' filepath='include/linux/key-type.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='free_preparse' type-id='54d7d559' visibility='default' filepath='include/linux/key-type.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='instantiate' type-id='ab4f7fd7' visibility='default' filepath='include/linux/key-type.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='update' type-id='ab4f7fd7' visibility='default' filepath='include/linux/key-type.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='match_preparse' type-id='0954c675' visibility='default' filepath='include/linux/key-type.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='match_free' type-id='87f6a50e' visibility='default' filepath='include/linux/key-type.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='revoke' type-id='b36896a7' visibility='default' filepath='include/linux/key-type.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='destroy' type-id='b36896a7' visibility='default' filepath='include/linux/key-type.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='describe' type-id='f68ddecc' visibility='default' filepath='include/linux/key-type.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='read' type-id='a9cc7986' visibility='default' filepath='include/linux/key-type.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='request_key' type-id='99147724' visibility='default' filepath='include/linux/key-type.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='lookup_restriction' type-id='7c4a6c91' visibility='default' filepath='include/linux/key-type.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='asym_query' type-id='b6633a3c' visibility='default' filepath='include/linux/key-type.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='asym_eds_op' type-id='824beef7' visibility='default' filepath='include/linux/key-type.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='asym_verify_signature' type-id='824beef7' visibility='default' filepath='include/linux/key-type.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='link' type-id='72f469ec' visibility='default' filepath='include/linux/key-type.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='lock_class' type-id='47479831' visibility='default' filepath='include/linux/key-type.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kmem_cache' size-in-bits='3712' is-struct='yes' visibility='default' filepath='include/linux/slub_def.h' line='82' column='1' id='a3119fea'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_slab' type-id='75f3cc0b' visibility='default' filepath='include/linux/slub_def.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='f7fe96cb' visibility='default' filepath='include/linux/slub_def.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='min_partial' type-id='7359adad' visibility='default' filepath='include/linux/slub_def.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='object_size' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='offset' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='cpu_partial' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='oo' type-id='dfc42026' visibility='default' filepath='include/linux/slub_def.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='max' type-id='dfc42026' visibility='default' filepath='include/linux/slub_def.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='min' type-id='dfc42026' visibility='default' filepath='include/linux/slub_def.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='allocflags' type-id='3eb7c31c' visibility='default' filepath='include/linux/slub_def.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcount' type-id='95e97e5e' visibility='default' filepath='include/linux/slub_def.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ctor' type-id='b7f9d8e6' visibility='default' filepath='include/linux/slub_def.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='inuse' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='align' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='red_left_pad' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/slub_def.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/slub_def.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/slub_def.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='kobj_remove_work' type-id='ef9025d0' visibility='default' filepath='include/linux/slub_def.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='memcg_params' type-id='f36112b4' visibility='default' filepath='include/linux/slub_def.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='max_attr_size' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='memcg_kset' type-id='89b70200' visibility='default' filepath='include/linux/slub_def.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='random' type-id='7359adad' visibility='default' filepath='include/linux/slub_def.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='random_seq' type-id='807869d3' visibility='default' filepath='include/linux/slub_def.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='useroffset' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3616'>
+          <var-decl name='usersize' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='node' type-id='425436e6' visibility='default' filepath='include/linux/slub_def.h' line='142' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='llist_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/llist.h' line='54' column='1' id='77df194e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='023b769e' visibility='default' filepath='include/linux/llist.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lockref' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/lockref.h' line='25' column='1' id='60efdfd3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='d9c71193' visibility='default' filepath='include/linux/lockref.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='old_timespec32' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/vdso/time32.h' line='7' column='1' id='f4b65c68'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='5d60da55' visibility='default' filepath='include/vdso/time32.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tv_nsec' type-id='a7832498' visibility='default' filepath='include/vdso/time32.h' line='9' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pm_qos_flags_request' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='49' column='1' id='a70ae6be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/pm_qos.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qstr' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/dcache.h' line='48' column='1' id='02244303'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='c047989c' visibility='default' filepath='include/linux/dcache.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='354f7eb9' visibility='default' filepath='include/linux/dcache.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rt_rq' size-in-bits='13632' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='593' column='1' id='e648d771'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='active' type-id='3ac6deac' visibility='default' filepath='kernel/sched/sched.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='rt_nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12960'>
+          <var-decl name='rr_nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12992'>
+          <var-decl name='highest_prio' type-id='8f548118' visibility='default' filepath='kernel/sched/sched.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='rt_nr_migratory' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='rt_nr_total' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='overloaded' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='pushable_tasks' type-id='57b0eed2' visibility='default' filepath='kernel/sched/sched.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='rt_queued' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13408'>
+          <var-decl name='rt_throttled' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13440'>
+          <var-decl name='rt_time' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='rt_runtime' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13568'>
+          <var-decl name='rt_runtime_lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='618' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_cputime' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/sched/types.h' line='17' column='1' id='ad6873f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/types.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='utime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/types.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sum_exec_runtime' type-id='3a47d82b' visibility='default' filepath='include/linux/sched/types.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ucounts' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/user_namespace.h' line='95' column='1' id='fdf3707c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='03a4a074' visibility='default' filepath='include/linux/user_namespace.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ns' type-id='c0ced321' visibility='default' filepath='include/linux/user_namespace.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/user_namespace.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/user_namespace.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ucount' type-id='32e5d672' visibility='default' filepath='include/linux/user_namespace.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uprobe_consumer' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/uprobes.h' line='36' column='1' id='fdd49c5f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='handler' type-id='37058a7f' visibility='default' filepath='include/linux/uprobes.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ret_handler' type-id='529ca3c5' visibility='default' filepath='include/linux/uprobes.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='filter' type-id='c6810324' visibility='default' filepath='include/linux/uprobes.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='af0533e7' visibility='default' filepath='include/linux/uprobes.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vfsmount' is-struct='yes' visibility='default' is-declaration-only='yes' id='19e88834'/>
+      <class-decl name='xol_area' is-struct='yes' visibility='default' is-declaration-only='yes' id='c39df2b8'/>
+      <class-decl name='__anonymous_struct__44' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='55' column='1' id='5b8a7161'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_pid' type-id='63eb2bf2' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_uid' type-id='70734f24' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_status' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_utime' type-id='880ebc01' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='_stime' type-id='880ebc01' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__43' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='48' column='1' id='90a6a0a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_pid' type-id='63eb2bf2' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_uid' type-id='70734f24' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_sigval' type-id='95506cfb' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__41' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='34' column='1' id='35888a92'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_pid' type-id='63eb2bf2' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_uid' type-id='70734f24' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__42' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='40' column='1' id='11b42bf5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_tid' type-id='c28acba6' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_overrun' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_sigval' type-id='95506cfb' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_sys_private' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__12' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='ac16795b' visibility='default' filepath='include/linux/rwlock_types.h' line='11' column='1' id='d7ab0a14'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='raw_lock' type-id='fed2d8ee' visibility='default' filepath='include/linux/rwlock_types.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__48' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='98' column='1' id='88c21632'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_band' type-id='bd54fe1a' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_fd' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__27' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='12aa8ce4' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='38' column='1' id='59473550'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pgd' type-id='df6d7e75' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__23' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='2e2dcbd3' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='42' column='1' id='051883a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pgprot' type-id='e044eb0d' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__24' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='329' column='1' id='0c408f16'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb' type-id='2a8a6332' visibility='default' filepath='include/linux/mm_types.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rb_subtree_last' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='331' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__35' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='95' column='1' id='6a74abcf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc_len' type-id='1dc6a898' visibility='default' filepath='include/linux/key.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='desc' type-id='4a008bc3' visibility='default' filepath='include/linux/key.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__45' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='64' column='1' id='b47416ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_addr' type-id='eaa32e2f' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='c4e140b8' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__49' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='104' column='1' id='07fe0781'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_call_addr' type-id='eaa32e2f' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_syscall' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='_arch' type-id='f0981eeb' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='bc39a8be' size-in-bits='64' id='42c8f564'/>
+      <typedef-decl name='__kernel_gid32_t' type-id='f0981eeb' filepath='include/uapi/asm-generic/posix_types.h' line='50' column='1' id='b4413cee'/>
+      <typedef-decl name='__sighandler_t' type-id='a38aafde' filepath='include/uapi/asm-generic/signal-defs.h' line='19' column='1' id='8cdd9566'/>
+      <typedef-decl name='__sigrestore_t' type-id='5d3a884e' filepath='include/uapi/asm-generic/signal-defs.h' line='22' column='1' id='81564178'/>
+      <typedef-decl name='call_single_data_t' type-id='bb75ea85' filepath='include/linux/smp.h' line='26' column='1' id='223a68bd'/>
+      <typedef-decl name='errseq_t' type-id='19c2251e' filepath='include/linux/errseq.h' line='8' column='1' id='1da55f79'/>
+      <typedef-decl name='fmode_t' type-id='f0981eeb' filepath='include/linux/types.h' line='155' column='1' id='2665334e'/>
+      <typedef-decl name='percpu_ref_func_t' type-id='96650caf' filepath='include/linux/percpu-refcount.h' line='60' column='1' id='ed7b7f6b'/>
+      <typedef-decl name='pgtable_t' type-id='02f11ed4' filepath='arch/arm64/include/asm/page.h' line='31' column='1' id='c28b9700'/>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='736' id='bd44dad8'>
+        <subrange length='23' type-id='7ff19f0f' id='fdd0f594'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='160' id='586ea944'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='91ce1af9' size-in-bits='640' id='a4295685'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='320' id='64af1365'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='30847fcd' size-in-bits='768' id='cf2a9adf'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <union-decl name='__anonymous_union__45' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='117' column='1' id='ba0a0e48'>
+        <data-member access='private'>
+          <var-decl name='d_alias' type-id='03a4a074' visibility='default' filepath='include/linux/dcache.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='d_in_lookup_hash' type-id='8db0df1b' visibility='default' filepath='include/linux/dcache.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='d_rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/dcache.h' line='120' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__44' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='108' column='1' id='ba311a3a'>
+        <data-member access='private'>
+          <var-decl name='d_lru' type-id='72f469ec' visibility='default' filepath='include/linux/dcache.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='d_wait' type-id='03d48e96' visibility='default' filepath='include/linux/dcache.h' line='110' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__19' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='106' column='1' id='c06bf9dd'>
+        <data-member access='private'>
+          <var-decl name='slab_list' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='5e3b2ede' visibility='default' filepath='include/linux/mm_types.h' line='108' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__12' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='962' column='1' id='8c8e2781'>
+        <data-member access='private'>
+          <var-decl name='fu_llist' type-id='c5ccfee8' visibility='default' filepath='include/linux/fs.h' line='963' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fu_rcuhead' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='964' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__21' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='150' column='1' id='787e8237'>
+        <data-member access='private'>
+          <var-decl name='pt_mm' type-id='df4b7819' visibility='default' filepath='include/linux/mm_types.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='pt_frag_refcount' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='152' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__10' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/uprobes.h' line='25' column='1' id='e021ecb2'>
+        <data-member access='private'>
+          <var-decl name='insn' type-id='931565be' visibility='default' filepath='arch/arm64/include/asm/uprobes.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ixol' type-id='931565be' visibility='default' filepath='arch/arm64/include/asm/uprobes.h' line='27' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__20' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='122' column='1' id='77c8e02e'>
+        <data-member access='private'>
+          <var-decl name='s_mem' type-id='eaa32e2f' visibility='default' filepath='include/linux/mm_types.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='counters' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='26dfc30c' visibility='default' filepath='include/linux/mm_types.h' line='125' column='1'/>
+        </data-member>
+      </union-decl>
+      <type-decl name='unsigned __int128' size-in-bits='128' id='4f340252'/>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='256' id='fc872715'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='7359adad' size-in-bits='960' id='625e8699'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='07c30a78' size-in-bits='64' id='f65daff2'/>
+      <pointer-type-def type-id='d71978c5' size-in-bits='64' id='fe17c379'/>
+      <pointer-type-def type-id='03d219e2' size-in-bits='64' id='6484073c'/>
+      <pointer-type-def type-id='830ee0a7' size-in-bits='64' id='5d3a884e'/>
+      <pointer-type-def type-id='3b5c61ad' size-in-bits='64' id='a38aafde'/>
+      <array-type-def dimensions='1' type-id='49178f86' size-in-bits='288' id='32e5d672'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <pointer-type-def type-id='ac0aeb1d' size-in-bits='64' id='f885ca7d'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='32768' id='d16c6df4'>
+        <subrange length='4096' type-id='7ff19f0f' id='bc1b5ddc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='512' id='59daf3ef'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='48' id='4a008bc3'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <qualified-type-def type-id='e4992400' const='yes' id='1d22df6b'/>
+      <qualified-type-def type-id='7dffcde2' const='yes' id='b8ae588d'/>
+      <pointer-type-def type-id='c8e0fb8e' size-in-bits='64' id='de2c232c'/>
+      <qualified-type-def type-id='2ba71bf0' const='yes' id='4e267e15'/>
+      <pointer-type-def type-id='ea86de29' size-in-bits='64' id='354f7eb9'/>
+      <pointer-type-def type-id='f3d147c3' size-in-bits='64' id='740b5503'/>
+      <pointer-type-def type-id='64c36f53' size-in-bits='64' id='d589c913'/>
+      <enum-decl name='freq_qos_req_type' filepath='include/linux/pm_qos.h' line='84' column='1' id='1df5cca8'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='FREQ_QOS_MIN' value='1'/>
+        <enumerator name='FREQ_QOS_MAX' value='2'/>
+      </enum-decl>
+      <enum-decl name='pid_type' filepath='include/linux/pid.h' line='9' column='1' id='ce78cf46'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PIDTYPE_PID' value='0'/>
+        <enumerator name='PIDTYPE_TGID' value='1'/>
+        <enumerator name='PIDTYPE_PGID' value='2'/>
+        <enumerator name='PIDTYPE_SID' value='3'/>
+        <enumerator name='PIDTYPE_MAX' value='4'/>
+      </enum-decl>
+      <pointer-type-def type-id='fb0c2987' size-in-bits='64' id='731257ff'/>
+      <pointer-type-def type-id='7ca99f8c' size-in-bits='64' id='1351457a'/>
+      <pointer-type-def type-id='9441bb37' size-in-bits='64' id='1ea8c5af'/>
+      <pointer-type-def type-id='aadc8ce9' size-in-bits='64' id='994d9d61'/>
+      <pointer-type-def type-id='43489bca' size-in-bits='64' id='ba18e248'/>
+      <pointer-type-def type-id='8db0df1b' size-in-bits='64' id='d09d4bab'/>
+      <pointer-type-def type-id='d09d4bab' size-in-bits='64' id='e89ddc13'/>
+      <pointer-type-def type-id='5113b296' size-in-bits='64' id='70487b28'/>
+      <pointer-type-def type-id='690d3bc2' size-in-bits='64' id='b6633a3c'/>
+      <pointer-type-def type-id='46816f8f' size-in-bits='64' id='5a1281ab'/>
+      <pointer-type-def type-id='984b30c5' size-in-bits='64' id='1ff48951'/>
+      <pointer-type-def type-id='0ebe5367' size-in-bits='64' id='7fc43753'/>
+      <pointer-type-def type-id='0ef3e0fd' size-in-bits='64' id='21e9ca19'/>
+      <pointer-type-def type-id='f11f5d07' size-in-bits='64' id='fe396a7b'/>
+      <pointer-type-def type-id='99373687' size-in-bits='64' id='7f31e8fb'/>
+      <pointer-type-def type-id='c619ce98' size-in-bits='64' id='2371b41a'/>
+      <pointer-type-def type-id='dab705c1' size-in-bits='64' id='4ded61d5'/>
+      <pointer-type-def type-id='1a55bf13' size-in-bits='64' id='824beef7'/>
+      <pointer-type-def type-id='b3bf9ca3' size-in-bits='64' id='ab4f7fd7'/>
+      <pointer-type-def type-id='d442aa81' size-in-bits='64' id='0954c675'/>
+      <pointer-type-def type-id='47a8f7d6' size-in-bits='64' id='320c9cb0'/>
+      <pointer-type-def type-id='f1bc64d3' size-in-bits='64' id='37058a7f'/>
+      <pointer-type-def type-id='c387f6d1' size-in-bits='64' id='529ca3c5'/>
+      <pointer-type-def type-id='78536370' size-in-bits='64' id='2908e93a'/>
+      <pointer-type-def type-id='834d1a2b' size-in-bits='64' id='5448fdd7'/>
+      <pointer-type-def type-id='a2dba6b8' size-in-bits='64' id='925b860a'/>
+      <pointer-type-def type-id='c7da7875' size-in-bits='64' id='7c4a6c91'/>
+      <pointer-type-def type-id='8696da2b' size-in-bits='64' id='75f3cc0b'/>
+      <array-type-def dimensions='1' type-id='42c7aae7' size-in-bits='64' id='425436e6'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <pointer-type-def type-id='4c16d0cc' size-in-bits='64' id='a9cc7986'/>
+      <pointer-type-def type-id='605b61bb' size-in-bits='64' id='2871909b'/>
+      <pointer-type-def type-id='170c8692' size-in-bits='64' id='0abee587'/>
+      <pointer-type-def type-id='34a2420f' size-in-bits='64' id='0e87d404'/>
+      <pointer-type-def type-id='470b0e09' size-in-bits='64' id='452b34c2'/>
+      <class-decl name='__call_single_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/smp.h' line='18' column='1' id='bb75ea85'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='llist' type-id='c5ccfee8' visibility='default' filepath='include/linux/smp.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='89714567' visibility='default' filepath='include/linux/smp.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='info' type-id='eaa32e2f' visibility='default' filepath='include/linux/smp.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/smp.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='address_space' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='457' column='1' id='0fd82dc2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='host' type-id='7e666abe' visibility='default' filepath='include/linux/fs.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='i_pages' type-id='d39738ac' visibility='default' filepath='include/linux/fs.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='gfp_mask' type-id='3eb7c31c' visibility='default' filepath='include/linux/fs.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='i_mmap_writable' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='i_mmap' type-id='6fe1603d' visibility='default' filepath='include/linux/fs.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='i_mmap_rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/fs.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nrpages' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nrexceptional' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='writeback_index' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='a_ops' type-id='7311f672' visibility='default' filepath='include/linux/fs.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='wb_err' type-id='1da55f79' visibility='default' filepath='include/linux/fs.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='private_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='private_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='481' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='assoc_array_ptr' is-struct='yes' visibility='default' is-declaration-only='yes' id='3249e303'/>
+      <class-decl name='bpf_prog_array' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='516' column='1' id='c75c7b06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/bpf.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='items' type-id='3f814540' visibility='default' filepath='include/linux/bpf.h' line='518' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cftype' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='540' column='1' id='ea2ebeac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='59daf3ef' visibility='default' filepath='include/linux/cgroup-defs.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='private' type-id='7359adad' visibility='default' filepath='include/linux/cgroup-defs.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_write_len' type-id='b59d7dce' visibility='default' filepath='include/linux/cgroup-defs.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='file_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ss' type-id='dc91d125' visibility='default' filepath='include/linux/cgroup-defs.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='kf_ops' type-id='1f2a8949' visibility='default' filepath='include/linux/cgroup-defs.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='open' type-id='964d2eb6' visibility='default' filepath='include/linux/cgroup-defs.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='release' type-id='f1825e09' visibility='default' filepath='include/linux/cgroup-defs.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='read_u64' type-id='ad13fd93' visibility='default' filepath='include/linux/cgroup-defs.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='read_s64' type-id='ae18a37d' visibility='default' filepath='include/linux/cgroup-defs.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='seq_show' type-id='0131eb61' visibility='default' filepath='include/linux/cgroup-defs.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='seq_start' type-id='a46b05a0' visibility='default' filepath='include/linux/cgroup-defs.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='seq_next' type-id='b6ba26fa' visibility='default' filepath='include/linux/cgroup-defs.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='seq_stop' type-id='6ba28d1c' visibility='default' filepath='include/linux/cgroup-defs.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='write_u64' type-id='3e9fac96' visibility='default' filepath='include/linux/cgroup-defs.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='write_s64' type-id='2b0348f0' visibility='default' filepath='include/linux/cgroup-defs.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='write' type-id='17b1add7' visibility='default' filepath='include/linux/cgroup-defs.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='poll' type-id='b347e5ac' visibility='default' filepath='include/linux/cgroup-defs.h' line='617' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpuidle_state' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/cpuidle.h' line='44' column='1' id='97aa083d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/cpuidle.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='desc' type-id='16dc656a' visibility='default' filepath='include/linux/cpuidle.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='exit_latency' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='power_usage' type-id='95e97e5e' visibility='default' filepath='include/linux/cpuidle.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='target_residency' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='disabled' type-id='b50a4934' visibility='default' filepath='include/linux/cpuidle.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='enter' type-id='738b5bc2' visibility='default' filepath='include/linux/cpuidle.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='enter_dead' type-id='0ba194b9' visibility='default' filepath='include/linux/cpuidle.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='enter_s2idle' type-id='738b5bc2' visibility='default' filepath='include/linux/cpuidle.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pagemap' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/memremap.h' line='107' column='1' id='8e586c5c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='altmap' type-id='62d0a96c' visibility='default' filepath='include/linux/memremap.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='res' type-id='5218160d' visibility='default' filepath='include/linux/memremap.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ref' type-id='60219102' visibility='default' filepath='include/linux/memremap.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='internal_ref' type-id='818799b4' visibility='default' filepath='include/linux/memremap.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='done' type-id='f9fef04f' visibility='default' filepath='include/linux/memremap.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='type' type-id='cc7210fc' visibility='default' filepath='include/linux/memremap.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/memremap.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ops' type-id='55917c32' visibility='default' filepath='include/linux/memremap.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kmem_cache_order_objects' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/slub_def.h' line='75' column='1' id='dfc42026'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_cache_params' size-in-bits='1280' is-struct='yes' visibility='default' filepath='mm/slab.h' line='73' column='1' id='f36112b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root_cache' type-id='f3b4aca8' visibility='default' filepath='mm/slab.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='8305e8d4' visibility='default' filepath='mm/slab.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pipe_buf_operations' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/pipe_fs_i.h' line='75' column='1' id='ed6c59ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='confirm' type-id='254733eb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release' type-id='941a57ca' visibility='default' filepath='include/linux/pipe_fs_i.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='steal' type-id='254733eb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get' type-id='c2ab7955' visibility='default' filepath='include/linux/pipe_fs_i.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='psi_group_cpu' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/psi_types.h' line='56' column='1' id='956e764e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seq' type-id='e14c3b11' visibility='default' filepath='include/linux/psi_types.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tasks' type-id='0955670c' visibility='default' filepath='include/linux/psi_types.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state_mask' type-id='19c2251e' visibility='default' filepath='include/linux/psi_types.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='times' type-id='5867ed7f' visibility='default' filepath='include/linux/psi_types.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='state_start' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='times_prev' type-id='4e00dfcd' visibility='default' filepath='include/linux/psi_types.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='root_domain' size-in-bits='14720' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='740' column='1' id='9cdca91a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rto_count' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/sched/sched.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='span' type-id='b16b461b' visibility='default' filepath='kernel/sched/sched.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='online' type-id='b16b461b' visibility='default' filepath='kernel/sched/sched.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='overload' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='overutilized' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dlo_mask' type-id='b16b461b' visibility='default' filepath='kernel/sched/sched.h' line='761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dlo_count' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dl_bw' type-id='51a92649' visibility='default' filepath='kernel/sched/sched.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='cpudl' type-id='a9cef929' visibility='default' filepath='kernel/sched/sched.h' line='764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rto_push_work' type-id='9281c70f' visibility='default' filepath='kernel/sched/sched.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rto_lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='rto_loop' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rto_cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='rto_loop_next' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='rto_loop_start' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='rto_mask' type-id='b16b461b' visibility='default' filepath='kernel/sched/sched.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='cpupri' type-id='afe3b3de' visibility='default' filepath='kernel/sched/sched.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14464'>
+          <var-decl name='max_cpu_capacity' type-id='12dbc6b5' visibility='default' filepath='kernel/sched/sched.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14656'>
+          <var-decl name='pd' type-id='30f9749f' visibility='default' filepath='kernel/sched/sched.h' line='793' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rt_prio_array' size-in-bits='12928' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='234' column='1' id='3ac6deac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bitmap' type-id='f05e8e77' visibility='default' filepath='kernel/sched/sched.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='queue' type-id='6f53db1b' visibility='default' filepath='kernel/sched/sched.h' line='236' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_domain' size-in-bits='2432' is-struct='yes' visibility='default' filepath='include/linux/sched/topology.h' line='72' column='1' id='1706cf19'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent' type-id='e9d32201' visibility='default' filepath='include/linux/sched/topology.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='child' type-id='e9d32201' visibility='default' filepath='include/linux/sched/topology.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='groups' type-id='f3dcd492' visibility='default' filepath='include/linux/sched/topology.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_interval' type-id='7359adad' visibility='default' filepath='include/linux/sched/topology.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='max_interval' type-id='7359adad' visibility='default' filepath='include/linux/sched/topology.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='busy_factor' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='imbalance_pct' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cache_nice_tries' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='nohz_idle' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/topology.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/topology.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='level' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/topology.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='last_balance' type-id='7359adad' visibility='default' filepath='include/linux/sched/topology.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='balance_interval' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='nr_balance_failed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='max_newidle_lb_cost' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/topology.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='next_decay_max_lb_cost' type-id='7359adad' visibility='default' filepath='include/linux/sched/topology.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='avg_scan_cost' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/topology.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='lb_count' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='lb_failed' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='lb_balanced' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='lb_imbalance' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='lb_gained' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='lb_hot_gained' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='lb_nobusyg' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='lb_nobusyq' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='alb_count' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='alb_failed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='alb_pushed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='sbe_count' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='sbe_balanced' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='sbe_pushed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='sbf_count' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='sbf_balanced' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='sbf_pushed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='ttwu_wake_remote' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ttwu_move_affine' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='ttwu_move_balance' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/sched/topology.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='' type-id='52c6c1a9' visibility='default' filepath='include/linux/sched/topology.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='shared' type-id='774b23cf' visibility='default' filepath='include/linux/sched/topology.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='span_weight' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/topology.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/topology.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='span' type-id='c99b5ecd' visibility='default' filepath='include/linux/sched/topology.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='super_block' size-in-bits='12800' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1468' column='1' id='bc39a8be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='s_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='s_dev' type-id='8504f260' visibility='default' filepath='include/linux/fs.h' line='1470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='s_blocksize_bits' type-id='002ac4a6' visibility='default' filepath='include/linux/fs.h' line='1471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='s_blocksize' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='s_maxbytes' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='1473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='s_type' type-id='21e53d44' visibility='default' filepath='include/linux/fs.h' line='1474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='s_op' type-id='f7c6dcac' visibility='default' filepath='include/linux/fs.h' line='1475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dq_op' type-id='85741a2a' visibility='default' filepath='include/linux/fs.h' line='1476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='s_qcop' type-id='2cb49514' visibility='default' filepath='include/linux/fs.h' line='1477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_export_op' type-id='ab932c45' visibility='default' filepath='include/linux/fs.h' line='1478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='s_flags' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='s_iflags' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='s_magic' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='s_root' type-id='27675065' visibility='default' filepath='include/linux/fs.h' line='1482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='s_umount' type-id='f19fdb93' visibility='default' filepath='include/linux/fs.h' line='1483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='s_count' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='s_active' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='1485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='s_security' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='1487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='s_xattr' type-id='cb49d4b8' visibility='default' filepath='include/linux/fs.h' line='1489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='s_cop' type-id='8d31a8d6' visibility='default' filepath='include/linux/fs.h' line='1491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='s_master_keys' type-id='204a4632' visibility='default' filepath='include/linux/fs.h' line='1492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='s_vop' type-id='e3008443' visibility='default' filepath='include/linux/fs.h' line='1495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='s_encoding' type-id='72835629' visibility='default' filepath='include/linux/fs.h' line='1498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='s_encoding_flags' type-id='d315442e' visibility='default' filepath='include/linux/fs.h' line='1499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='s_roots' type-id='def98e71' visibility='default' filepath='include/linux/fs.h' line='1501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='s_mounts' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='s_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='1503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='s_bdi' type-id='ef4fae1b' visibility='default' filepath='include/linux/fs.h' line='1504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='s_mtd' type-id='58ed56f5' visibility='default' filepath='include/linux/fs.h' line='1505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='s_instances' type-id='03a4a074' visibility='default' filepath='include/linux/fs.h' line='1506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='s_quota_types' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='s_dquot' type-id='c26e4ad8' visibility='default' filepath='include/linux/fs.h' line='1508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='s_writers' type-id='fb476a2b' visibility='default' filepath='include/linux/fs.h' line='1510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='s_fs_info' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='1517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='s_time_gran' type-id='19c2251e' visibility='default' filepath='include/linux/fs.h' line='1520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='s_time_min' type-id='1afd27ac' visibility='default' filepath='include/linux/fs.h' line='1522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='s_time_max' type-id='1afd27ac' visibility='default' filepath='include/linux/fs.h' line='1523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='s_fsnotify_mask' type-id='3f1a6b60' visibility='default' filepath='include/linux/fs.h' line='1525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='s_fsnotify_marks' type-id='994d9d61' visibility='default' filepath='include/linux/fs.h' line='1526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='s_id' type-id='16dc656a' visibility='default' filepath='include/linux/fs.h' line='1529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='s_uuid' type-id='ec55eb74' visibility='default' filepath='include/linux/fs.h' line='1530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='s_max_links' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8864'>
+          <var-decl name='s_mode' type-id='2665334e' visibility='default' filepath='include/linux/fs.h' line='1533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='s_vfs_rename_mutex' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='1539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='s_subtype' type-id='80f4b756' visibility='default' filepath='include/linux/fs.h' line='1545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='s_d_op' type-id='1ee57353' visibility='default' filepath='include/linux/fs.h' line='1547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='cleancache_poolid' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='s_shrink' type-id='27cb404f' visibility='default' filepath='include/linux/fs.h' line='1554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='s_remove_count' type-id='f22a8abb' visibility='default' filepath='include/linux/fs.h' line='1557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='s_fsnotify_inode_refs' type-id='f22a8abb' visibility='default' filepath='include/linux/fs.h' line='1560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='s_readonly_remount' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10016'>
+          <var-decl name='s_wb_err' type-id='1da55f79' visibility='default' filepath='include/linux/fs.h' line='1566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='s_dio_done_wq' type-id='242e3d19' visibility='default' filepath='include/linux/fs.h' line='1569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='s_pins' type-id='e151255a' visibility='default' filepath='include/linux/fs.h' line='1570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='s_user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/fs.h' line='1577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='s_dentry_lru' type-id='c653aac7' visibility='default' filepath='include/linux/fs.h' line='1584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='s_inode_lru' type-id='c653aac7' visibility='default' filepath='include/linux/fs.h' line='1585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='1586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='destroy_work' type-id='ef9025d0' visibility='default' filepath='include/linux/fs.h' line='1587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='s_sync_lock' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='1589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='s_stack_depth' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='s_inode_list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='1597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='s_inodes' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='s_inode_wblist_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='1600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='s_inodes_wb' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1606' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timespec64' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/time64.h' line='13' column='1' id='40a816ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='1afd27ac' visibility='default' filepath='include/linux/time64.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tv_nsec' type-id='bd54fe1a' visibility='default' filepath='include/linux/time64.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='u64_stats_sync' is-struct='yes' visibility='default' filepath='include/linux/u64_stats_sync.h' line='65' column='1' id='e4d85780'/>
+      <class-decl name='uclamp_rq' size-in-bits='384' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='844' column='1' id='30847fcd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bucket' type-id='ec2b1499' visibility='default' filepath='kernel/sched/sched.h' line='846' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vm_operations_struct' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/mm.h' line='542' column='1' id='19795245'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='170cc62f' visibility='default' filepath='include/linux/mm.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='close' type-id='170cc62f' visibility='default' filepath='include/linux/mm.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='split' type-id='6910c028' visibility='default' filepath='include/linux/mm.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mremap' type-id='6910c028' visibility='default' filepath='include/linux/mm.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fault' type-id='bb28da1c' visibility='default' filepath='include/linux/mm.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='huge_fault' type-id='5e15576d' visibility='default' filepath='include/linux/mm.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='map_pages' type-id='8f17d05e' visibility='default' filepath='include/linux/mm.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pagesize' type-id='1a17e40d' visibility='default' filepath='include/linux/mm.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='page_mkwrite' type-id='bb28da1c' visibility='default' filepath='include/linux/mm.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pfn_mkwrite' type-id='bb28da1c' visibility='default' filepath='include/linux/mm.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='access' type-id='6850e780' visibility='default' filepath='include/linux/mm.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='name' type-id='e803acd0' visibility='default' filepath='include/linux/mm.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='find_special_page' type-id='d9e60bb2' visibility='default' filepath='include/linux/mm.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_vendor_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='607' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='kernel/sched/sched.h' line='598' column='1' id='8f548118'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='curr' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='next' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='601' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__17' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='108' column='1' id='5e3b2ede'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='02f11ed4' visibility='default' filepath='include/linux/mm_types.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pages' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pobjects' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types.h' line='112' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='kernel/sched/sched.h' line='647' column='1' id='8c6b5470'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='curr' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='649' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__18' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='125' column='1' id='26dfc30c'>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='inuse' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='objects' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frozen' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__kernel_clock_t' type-id='6a11bd61' filepath='include/uapi/asm-generic/posix_types.h' line='91' column='1' id='880ebc01'/>
+      <typedef-decl name='__kernel_time64_t' type-id='1eb56b1e' filepath='include/uapi/asm-generic/posix_types.h' line='90' column='1' id='3d9e85cc'/>
+      <typedef-decl name='__kernel_timer_t' type-id='95e97e5e' filepath='include/uapi/asm-generic/posix_types.h' line='92' column='1' id='c28acba6'/>
+      <typedef-decl name='arch_rwlock_t' type-id='319e0e18' filepath='include/asm-generic/qrwlock_types.h' line='27' column='1' id='fed2d8ee'/>
+      <typedef-decl name='blkcnt_t' type-id='91ce1af9' filepath='include/linux/types.h' line='131' column='1' id='17345459'/>
+      <pointer-type-def type-id='24f3731d' size-in-bits='64' id='6981b6e9'/>
+      <pointer-type-def type-id='b3bc5b3a' size-in-bits='64' id='fd03a8f4'/>
+      <pointer-type-def type-id='53143c97' size-in-bits='64' id='6ee36fa3'/>
+      <pointer-type-def type-id='c02bc58a' size-in-bits='64' id='c6810324'/>
+      <typedef-decl name='cpu_stop_fn_t' type-id='b9b212f5' filepath='include/linux/stop_machine.h' line='20' column='1' id='87dfefa3'/>
+      <typedef-decl name='old_time32_t' type-id='a7832498' filepath='include/vdso/time32.h' line='5' column='1' id='5d60da55'/>
+      <typedef-decl name='pgdval_t' type-id='91ce1af9' filepath='arch/arm64/include/asm/pgtable-types.h' line='17' column='1' id='df6d7e75'/>
+      <pointer-type-def type-id='7a348508' size-in-bits='64' id='c4904652'/>
+      <typedef-decl name='pteval_t' type-id='91ce1af9' filepath='arch/arm64/include/asm/pgtable-types.h' line='14' column='1' id='e044eb0d'/>
+      <typedef-decl name='request_key_actor_t' type-id='a4946104' filepath='include/linux/key-type.h' line='40' column='1' id='99147724'/>
+      <typedef-decl name='sigval_t' type-id='a094b870' filepath='include/uapi/asm-generic/siginfo.h' line='11' column='1' id='95506cfb'/>
+      <pointer-type-def type-id='f1a922f0' size-in-bits='64' id='d1a6d6c2'/>
+      <typedef-decl name='slab_flags_t' type-id='f0981eeb' filepath='include/linux/types.h' line='154' column='1' id='f7fe96cb'/>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='32' id='931565be'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <union-decl name='__anonymous_union__43' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/lockref.h' line='26' column='1' id='d9c71193'>
+        <data-member access='private'>
+          <var-decl name='lock_count' type-id='d3130597' visibility='default' filepath='include/linux/lockref.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='7a58bf78' visibility='default' filepath='include/linux/lockref.h' line='30' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='730' column='1' id='67f3b119'>
+        <data-member access='private'>
+          <var-decl name='i_fop' type-id='61758ee5' visibility='default' filepath='include/linux/fs.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='free_inode' type-id='4f3d95df' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='679' column='1' id='3ee18b51'>
+        <data-member access='private'>
+          <var-decl name='i_nlink' type-id='20f5f452' visibility='default' filepath='include/linux/fs.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='__i_nlink' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='681' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='718' column='1' id='cbd4a95b'>
+        <data-member access='private'>
+          <var-decl name='i_dentry' type-id='e151255a' visibility='default' filepath='include/linux/fs.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='720' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='737' column='1' id='d1afa4fe'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29711' visibility='default' filepath='include/linux/fs.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb939' visibility='default' filepath='include/linux/fs.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_dir_seq' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='742' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__34' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='77' column='1' id='c4e140b8'>
+        <data-member access='private'>
+          <var-decl name='_addr_lsb' type-id='a2185560' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_addr_bnd' type-id='ea0e6645' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_addr_pkey' type-id='8a41173c' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='93' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__13' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='49' column='1' id='c047989c'>
+        <data-member access='private'>
+          <var-decl name='' type-id='7a2c0764' visibility='default' filepath='include/linux/dcache.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='hash_len' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='53' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='8c178e23' size-in-bits='64' id='c0ced321'/>
+      <pointer-type-def type-id='8422a42a' size-in-bits='64' id='f68ddecc'/>
+      <pointer-type-def type-id='6c99ab8f' size-in-bits='64' id='b20722ab'/>
+      <pointer-type-def type-id='06a1c469' size-in-bits='64' id='83d96d05'/>
+      <pointer-type-def type-id='0b1ef2a8' size-in-bits='64' id='36caa4da'/>
+      <pointer-type-def type-id='e931abd6' size-in-bits='64' id='32baba38'/>
+      <pointer-type-def type-id='87769f42' size-in-bits='64' id='a6bf568c'/>
+      <pointer-type-def type-id='e5507ab5' size-in-bits='64' id='d3b2d361'/>
+      <pointer-type-def type-id='22400b6a' size-in-bits='64' id='4fb74714'/>
+      <pointer-type-def type-id='fae72313' size-in-bits='64' id='b36896a7'/>
+      <pointer-type-def type-id='0ef969d4' size-in-bits='64' id='87f6a50e'/>
+      <pointer-type-def type-id='a9237415' size-in-bits='64' id='54d7d559'/>
+      <pointer-type-def type-id='b5ab048f' size-in-bits='64' id='03d48e96'/>
+      <pointer-type-def type-id='1b893cc5' size-in-bits='64' id='b88dd945'/>
+      <array-type-def dimensions='1' type-id='f67e137c' size-in-bits='infinite' id='3f814540'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='22f86351' size-in-bits='64' id='3e6eb939'/>
+      <pointer-type-def type-id='38ce7f2c' size-in-bits='64' id='7311f672'/>
+      <pointer-type-def type-id='6dbd849e' size-in-bits='64' id='e803acd0'/>
+      <pointer-type-def type-id='7c8b7a6c' size-in-bits='64' id='55917c32'/>
+      <pointer-type-def type-id='47d6ff44' size-in-bits='64' id='85741a2a'/>
+      <pointer-type-def type-id='3cea21ed' size-in-bits='64' id='ab932c45'/>
+      <pointer-type-def type-id='de5211b8' size-in-bits='64' id='8d31a8d6'/>
+      <pointer-type-def type-id='0c45e0bb' size-in-bits='64' id='e3008443'/>
+      <qualified-type-def type-id='5f5aa1ff' const='yes' id='c8e0fb8e'/>
+      <pointer-type-def type-id='051f9336' size-in-bits='64' id='2cb49514'/>
+      <pointer-type-def type-id='ecd54c0e' size-in-bits='64' id='f7c6dcac'/>
+      <qualified-type-def type-id='002ac4a6' const='yes' id='ea86de29'/>
+      <qualified-type-def type-id='f0981eeb' const='yes' id='20f5f452'/>
+      <pointer-type-def type-id='6a54ab42' size-in-bits='64' id='cb49d4b8'/>
+      <enum-decl name='memory_type' filepath='include/linux/memremap.h' line='59' column='1' id='cc7210fc'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MEMORY_DEVICE_PRIVATE' value='1'/>
+        <enumerator name='MEMORY_DEVICE_FS_DAX' value='2'/>
+        <enumerator name='MEMORY_DEVICE_DEVDAX' value='3'/>
+        <enumerator name='MEMORY_DEVICE_PCI_P2PDMA' value='4'/>
+      </enum-decl>
+      <pointer-type-def type-id='2f5a60be' size-in-bits='64' id='21e53d44'/>
+      <pointer-type-def type-id='969fc316' size-in-bits='64' id='2b0348f0'/>
+      <pointer-type-def type-id='2cfafd1c' size-in-bits='64' id='3e9fac96'/>
+      <pointer-type-def type-id='2d2d4460' size-in-bits='64' id='738b5bc2'/>
+      <pointer-type-def type-id='0174792d' size-in-bits='64' id='0ba194b9'/>
+      <pointer-type-def type-id='b2a9667a' size-in-bits='64' id='a4946104'/>
+      <pointer-type-def type-id='cea824ff' size-in-bits='64' id='254733eb'/>
+      <pointer-type-def type-id='262a563e' size-in-bits='64' id='6910c028'/>
+      <pointer-type-def type-id='3b03705e' size-in-bits='64' id='6850e780'/>
+      <pointer-type-def type-id='9efbfb11' size-in-bits='64' id='b9b212f5'/>
+      <pointer-type-def type-id='ae89b201' size-in-bits='64' id='1f2a8949'/>
+      <pointer-type-def type-id='edac1e8f' size-in-bits='64' id='42c7aae7'/>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='12800' id='6f53db1b'>
+        <subrange length='100' type-id='7ff19f0f' id='4196563c'/>
+      </array-type-def>
+      <pointer-type-def type-id='25dc4075' size-in-bits='64' id='58ed56f5'/>
+      <pointer-type-def type-id='e17bc528' size-in-bits='64' id='d9e60bb2'/>
+      <pointer-type-def type-id='818799b4' size-in-bits='64' id='60219102'/>
+      <pointer-type-def type-id='f2e22af7' size-in-bits='64' id='30f9749f'/>
+      <pointer-type-def type-id='bed94323' size-in-bits='64' id='15d29711'/>
+      <pointer-type-def type-id='ccc53977' size-in-bits='64' id='774b23cf'/>
+      <pointer-type-def type-id='8b6491f4' size-in-bits='64' id='f3dcd492'/>
+      <class-decl name='bdi_writeback' size-in-bits='6080' is-struct='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='130' column='1' id='ac0aeb1d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bdi' type-id='ef4fae1c' visibility='default' filepath='include/linux/backing-dev-defs.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='last_old_flush' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='b_dirty' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='b_io' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='b_more_io' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='b_dirty_time' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/backing-dev-defs.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='stat' type-id='aca5b9e5' visibility='default' filepath='include/linux/backing-dev-defs.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='congested' type-id='d97a04ce' visibility='default' filepath='include/linux/backing-dev-defs.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='bw_time_stamp' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='dirtied_stamp' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='written_stamp' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='write_bandwidth' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='avg_write_bandwidth' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dirty_ratelimit' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='balanced_dirty_ratelimit' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='completions' type-id='587caff2' visibility='default' filepath='include/linux/backing-dev-defs.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='dirty_exceeded' type-id='95e97e5e' visibility='default' filepath='include/linux/backing-dev-defs.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2976'>
+          <var-decl name='start_all_reason' type-id='c1602c7a' visibility='default' filepath='include/linux/backing-dev-defs.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='work_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/backing-dev-defs.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='work_list' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='dwork' type-id='5ad6e0ef' visibility='default' filepath='include/linux/backing-dev-defs.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='dirty_sleep' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='bdi_node' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='include/linux/backing-dev-defs.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='memcg_completions' type-id='587caff2' visibility='default' filepath='include/linux/backing-dev-defs.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='memcg_css' type-id='cfff5953' visibility='default' filepath='include/linux/backing-dev-defs.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='blkcg_css' type-id='cfff5953' visibility='default' filepath='include/linux/backing-dev-defs.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='memcg_node' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='blkcg_node' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='' type-id='93944b10' visibility='default' filepath='include/linux/backing-dev-defs.h' line='181' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpu_stop_done' is-struct='yes' visibility='default' is-declaration-only='yes' id='64c36f53'/>
+      <class-decl name='cpudl' size-in-bits='192' is-struct='yes' visibility='default' filepath='kernel/sched/cpudeadline.h' line='11' column='1' id='a9cef929'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/cpudeadline.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='95e97e5e' visibility='default' filepath='kernel/sched/cpudeadline.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='free_cpus' type-id='b16b461b' visibility='default' filepath='kernel/sched/cpudeadline.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='elements' type-id='9bf95e81' visibility='default' filepath='kernel/sched/cpudeadline.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpupri' size-in-bits='13120' is-struct='yes' visibility='default' filepath='kernel/sched/cpupri.h' line='15' column='1' id='afe3b3de'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pri_to_cpu' type-id='f88f3d38' visibility='default' filepath='kernel/sched/cpupri.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='cpu_to_pri' type-id='7292109c' visibility='default' filepath='kernel/sched/cpupri.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dentry_operations' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/dcache.h' line='139' column='1' id='e4992400'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='d_revalidate' type-id='30ab2c05' visibility='default' filepath='include/linux/dcache.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='d_weak_revalidate' type-id='30ab2c05' visibility='default' filepath='include/linux/dcache.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='d_hash' type-id='65cea51e' visibility='default' filepath='include/linux/dcache.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='d_compare' type-id='fb86b772' visibility='default' filepath='include/linux/dcache.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='d_delete' type-id='a50c1d00' visibility='default' filepath='include/linux/dcache.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='d_init' type-id='6241aa4f' visibility='default' filepath='include/linux/dcache.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='d_release' type-id='f42e15b8' visibility='default' filepath='include/linux/dcache.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='d_prune' type-id='f42e15b8' visibility='default' filepath='include/linux/dcache.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='d_iput' type-id='40363cbb' visibility='default' filepath='include/linux/dcache.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='d_dname' type-id='84618a95' visibility='default' filepath='include/linux/dcache.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='d_automount' type-id='da81d789' visibility='default' filepath='include/linux/dcache.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='d_manage' type-id='6eededc8' visibility='default' filepath='include/linux/dcache.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='d_real' type-id='3cce524c' visibility='default' filepath='include/linux/dcache.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='d_canonical_path' type-id='8581ac2b' visibility='default' filepath='include/linux/dcache.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='159' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dl_bw' size-in-bits='192' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='279' column='1' id='51a92649'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='total_bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='282' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file_lock_context' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1154' column='1' id='fb0c2987'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flc_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='1155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flc_flock' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flc_posix' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flc_lease' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1158' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file_operations' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1880' column='1' id='7dffcde2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/fs.h' line='1881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='llseek' type-id='07ebb4cd' visibility='default' filepath='include/linux/fs.h' line='1882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read' type-id='4d8f5625' visibility='default' filepath='include/linux/fs.h' line='1883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write' type-id='5f29549c' visibility='default' filepath='include/linux/fs.h' line='1884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read_iter' type-id='227e209d' visibility='default' filepath='include/linux/fs.h' line='1885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write_iter' type-id='227e209d' visibility='default' filepath='include/linux/fs.h' line='1886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='iopoll' type-id='6c4618be' visibility='default' filepath='include/linux/fs.h' line='1887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='iterate' type-id='42beb73a' visibility='default' filepath='include/linux/fs.h' line='1888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='iterate_shared' type-id='42beb73a' visibility='default' filepath='include/linux/fs.h' line='1889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='poll' type-id='4d01ede7' visibility='default' filepath='include/linux/fs.h' line='1890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='unlocked_ioctl' type-id='fc7daf55' visibility='default' filepath='include/linux/fs.h' line='1891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='compat_ioctl' type-id='fc7daf55' visibility='default' filepath='include/linux/fs.h' line='1892' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mmap' type-id='8ea2626c' visibility='default' filepath='include/linux/fs.h' line='1893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='mmap_supported_flags' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='open' type-id='47800058' visibility='default' filepath='include/linux/fs.h' line='1895' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='flush' type-id='5ddef2dd' visibility='default' filepath='include/linux/fs.h' line='1896' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='release' type-id='47800058' visibility='default' filepath='include/linux/fs.h' line='1897' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fsync' type-id='31cc9254' visibility='default' filepath='include/linux/fs.h' line='1898' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='fasync' type-id='b94ac371' visibility='default' filepath='include/linux/fs.h' line='1899' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='lock' type-id='12f0ff82' visibility='default' filepath='include/linux/fs.h' line='1900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='sendpage' type-id='40da47a8' visibility='default' filepath='include/linux/fs.h' line='1901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='get_unmapped_area' type-id='d44a8cec' visibility='default' filepath='include/linux/fs.h' line='1902' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='check_flags' type-id='7f416e10' visibility='default' filepath='include/linux/fs.h' line='1903' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='flock' type-id='12f0ff82' visibility='default' filepath='include/linux/fs.h' line='1904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='splice_write' type-id='b22f4610' visibility='default' filepath='include/linux/fs.h' line='1905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='splice_read' type-id='72cd68b0' visibility='default' filepath='include/linux/fs.h' line='1906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='setlease' type-id='87e3d3e2' visibility='default' filepath='include/linux/fs.h' line='1907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='fallocate' type-id='a53e2328' visibility='default' filepath='include/linux/fs.h' line='1908' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='show_fdinfo' type-id='eda08098' visibility='default' filepath='include/linux/fs.h' line='1910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='copy_file_range' type-id='d0882d6b' visibility='default' filepath='include/linux/fs.h' line='1914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='remap_file_range' type-id='c1de1086' visibility='default' filepath='include/linux/fs.h' line='1916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='fadvise' type-id='31cc9254' visibility='default' filepath='include/linux/fs.h' line='1919' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1923' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1924' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fscrypt_info' size-in-bits='1088' is-struct='yes' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='195' column='1' id='9441bb37'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ci_enc_key' type-id='a28355c2' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ci_owns_key' type-id='b50a4934' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='ci_inlinecrypt' type-id='b50a4934' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ci_mode' type-id='65936caa' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ci_inode' type-id='7e666abe' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ci_master_key' type-id='204a4632' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ci_master_key_link' type-id='72f469ec' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ci_direct_key' type-id='8ce270a4' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ci_dirhash_key' type-id='7799da43' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ci_dirhash_key_initialized' type-id='b50a4934' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='712'>
+          <var-decl name='ci_policy' type-id='61227238' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='904'>
+          <var-decl name='ci_nonce' type-id='0d8415b5' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='ci_hashed_ino' type-id='19c2251e' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='254' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fsnotify_mark_connector' is-struct='yes' visibility='default' is-declaration-only='yes' id='aadc8ce9'/>
+      <class-decl name='fsverity_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='43489bca'/>
+      <class-decl name='hlist_bl_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/list_bl.h' line='34' column='1' id='def98e71'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='d09d4bab' visibility='default' filepath='include/linux/list_bl.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_work' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/irq_work.h' line='24' column='1' id='9281c70f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/irq_work.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='llnode' type-id='c5ccfee8' visibility='default' filepath='include/linux/irq_work.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='func' type-id='f48b73f6' visibility='default' filepath='include/linux/irq_work.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kmem_cache_cpu' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/slub_def.h' line='41' column='1' id='8696da2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='freelist' type-id='63e171df' visibility='default' filepath='include/linux/slub_def.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tid' type-id='7359adad' visibility='default' filepath='include/linux/slub_def.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='page' type-id='02f11ed4' visibility='default' filepath='include/linux/slub_def.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='partial' type-id='02f11ed4' visibility='default' filepath='include/linux/slub_def.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='list_lru' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/list_lru.h' line='52' column='1' id='c653aac7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='a6d2fa52' visibility='default' filepath='include/linux/list_lru.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/list_lru.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='shrinker_id' type-id='95e97e5e' visibility='default' filepath='include/linux/list_lru.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='memcg_aware' type-id='b50a4934' visibility='default' filepath='include/linux/list_lru.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='max_cpu_capacity' size-in-bits='192' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='722' column='1' id='12dbc6b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='val' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='725' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='posix_acl' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/posix_acl.h' line='27' column='1' id='605b61bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='a_refcount' type-id='64615833' visibility='default' filepath='include/linux/posix_acl.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='a_rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/posix_acl.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='a_count' type-id='f0981eeb' visibility='default' filepath='include/linux/posix_acl.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='a_entries' type-id='a51f6b3c' visibility='default' filepath='include/linux/posix_acl.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='proc_ns_operations' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/proc_ns.h' line='16' column='1' id='2ba71bf0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/proc_ns.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='real_ns_name' type-id='80f4b756' visibility='default' filepath='include/linux/proc_ns.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/linux/proc_ns.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get' type-id='3e644294' visibility='default' filepath='include/linux/proc_ns.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='put' type-id='277e3361' visibility='default' filepath='include/linux/proc_ns.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='install' type-id='d23fe9bd' visibility='default' filepath='include/linux/proc_ns.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='6fa26802' visibility='default' filepath='include/linux/proc_ns.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_parent' type-id='e0677422' visibility='default' filepath='include/linux/proc_ns.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qrwlock' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='13' column='1' id='319e0e18'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='54d74023' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wait_lock' type-id='641c41d1' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='quota_info' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='527' column='1' id='c26e4ad8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dqio_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/quota.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='files' type-id='e6ff92fb' visibility='default' filepath='include/linux/quota.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='info' type-id='83ae09a1' visibility='default' filepath='include/linux/quota.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ops' type-id='59bd9302' visibility='default' filepath='include/linux/quota.h' line='532' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='resource' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/ioport.h' line='21' column='1' id='5218160d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='acc63fdf' visibility='default' filepath='include/linux/ioport.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='end' type-id='acc63fdf' visibility='default' filepath='include/linux/ioport.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/ioport.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/ioport.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='desc' type-id='7359adad' visibility='default' filepath='include/linux/ioport.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='parent' type-id='c9d64c0d' visibility='default' filepath='include/linux/ioport.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sibling' type-id='c9d64c0d' visibility='default' filepath='include/linux/ioport.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='child' type-id='c9d64c0d' visibility='default' filepath='include/linux/ioport.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/ioport.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/ioport.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/ioport.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/ioport.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sb_writers' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1462' column='1' id='fb476a2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frozen' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_unfrozen' type-id='b5ab048f' visibility='default' filepath='include/linux/fs.h' line='1464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rw_sem' type-id='a09ef5a6' visibility='default' filepath='include/linux/fs.h' line='1465' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='shrinker' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/shrinker.h' line='60' column='1' id='27cb404f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count_objects' type-id='cd2cc9e1' visibility='default' filepath='include/linux/shrinker.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='scan_objects' type-id='cd2cc9e1' visibility='default' filepath='include/linux/shrinker.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='batch' type-id='bd54fe1a' visibility='default' filepath='include/linux/shrinker.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='seeks' type-id='95e97e5e' visibility='default' filepath='include/linux/shrinker.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/shrinker.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/shrinker.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/shrinker.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nr_deferred' type-id='5403cb36' visibility='default' filepath='include/linux/shrinker.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='user_namespace' size-in-bits='4544' is-struct='yes' visibility='default' filepath='include/linux/user_namespace.h' line='56' column='1' id='8c178e23'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uid_map' type-id='f179bf1b' visibility='default' filepath='include/linux/user_namespace.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='gid_map' type-id='f179bf1b' visibility='default' filepath='include/linux/user_namespace.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='projid_map' type-id='f179bf1b' visibility='default' filepath='include/linux/user_namespace.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/user_namespace.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='parent' type-id='c0ced321' visibility='default' filepath='include/linux/user_namespace.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='level' type-id='95e97e5e' visibility='default' filepath='include/linux/user_namespace.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='owner' type-id='d80b72e6' visibility='default' filepath='include/linux/user_namespace.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='group' type-id='094d8048' visibility='default' filepath='include/linux/user_namespace.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ns' type-id='99f367f2' visibility='default' filepath='include/linux/user_namespace.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/user_namespace.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='keyring_name_list' type-id='72f469ec' visibility='default' filepath='include/linux/user_namespace.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='user_keyring_register' type-id='204a4632' visibility='default' filepath='include/linux/user_namespace.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='keyring_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/user_namespace.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/user_namespace.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='set' type-id='3fc3d262' visibility='default' filepath='include/linux/user_namespace.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='sysctls' type-id='11b101bb' visibility='default' filepath='include/linux/user_namespace.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='ucounts' type-id='b1d4934a' visibility='default' filepath='include/linux/user_namespace.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='ucount_max' type-id='e415235d' visibility='default' filepath='include/linux/user_namespace.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/user_namespace.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/user_namespace.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vmem_altmap' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/memremap.h' line='18' column='1' id='62d0a96c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base_pfn' type-id='9cbd1c16' visibility='default' filepath='include/linux/memremap.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='end_pfn' type-id='9cbd1c16' visibility='default' filepath='include/linux/memremap.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reserve' type-id='9cbd1c16' visibility='default' filepath='include/linux/memremap.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='free' type-id='7359adad' visibility='default' filepath='include/linux/memremap.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='align' type-id='7359adad' visibility='default' filepath='include/linux/memremap.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='alloc' type-id='7359adad' visibility='default' filepath='include/linux/memremap.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__46' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='84' column='1' id='ea0e6645'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_dummy_bnd' type-id='8e100159' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_lower' type-id='eaa32e2f' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_upper' type-id='eaa32e2f' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__47' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='90' column='1' id='8a41173c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_dummy_pkey' type-id='8e100159' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_pkey' type-id='3f1a6b60' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__57' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/lockref.h' line='30' column='1' id='7a58bf78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/lockref.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/lockref.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__6' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='50' column='1' id='7a2c0764'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='19c2251e' visibility='default' filepath='include/linux/dcache.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='19c2251e' visibility='default' filepath='include/linux/dcache.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__kernel_long_t' type-id='bd54fe1a' filepath='include/uapi/asm-generic/posix_types.h' line='15' column='1' id='6a11bd61'/>
+      <typedef-decl name='__restorefn_t' type-id='ee076206' filepath='include/uapi/asm-generic/signal-defs.h' line='21' column='1' id='830ee0a7'/>
+      <typedef-decl name='__signalfn_t' type-id='f712e2b7' filepath='include/uapi/asm-generic/signal-defs.h' line='18' column='1' id='3b5c61ad'/>
+      <pointer-type-def type-id='5e80f131' size-in-bits='64' id='c2ab7955'/>
+      <typedef-decl name='probe_opcode_t' type-id='19c2251e' filepath='arch/arm64/include/asm/probes.h' line='10' column='1' id='170c8692'/>
+      <typedef-decl name='probes_handler_t' type-id='ae26a81a' filepath='arch/arm64/include/asm/probes.h' line='11' column='1' id='34a2420f'/>
+      <typedef-decl name='pstate_check_t' type-id='b21b8f21' filepath='arch/arm64/include/asm/insn.h' line='477' column='1' id='470b0e09'/>
+      <pointer-type-def type-id='59145b91' size-in-bits='64' id='ae18a37d'/>
+      <typedef-decl name='smp_call_func_t' type-id='b7f9d8e6' filepath='include/linux/smp.h' line='17' column='1' id='89714567'/>
+      <pointer-type-def type-id='90c1df7f' size-in-bits='64' id='ad13fd93'/>
+      <typedef-decl name='uuid_t' type-id='8425539a' filepath='include/linux/uuid.h' line='18' column='1' id='ec55eb74'/>
+      <pointer-type-def type-id='ecbaa04a' size-in-bits='64' id='bb28da1c'/>
+      <pointer-type-def type-id='af6e35e9' size-in-bits='64' id='5e15576d'/>
+      <array-type-def dimensions='2' type-id='19c2251e' size-in-bits='384' id='4e00dfcd'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='192' id='5867ed7f'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='ab0c2f56' size-in-bits='320' id='ec2b1499'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <pointer-type-def type-id='a24978a1' size-in-bits='64' id='72835629'/>
+      <union-decl name='sigval' size-in-bits='64' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='8' column='1' id='a094b870'>
+        <data-member access='private'>
+          <var-decl name='sival_int' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sival_ptr' type-id='eaa32e2f' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='10' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='1216' is-anonymous='yes' visibility='default' filepath='mm/slab.h' line='75' column='1' id='8305e8d4'>
+        <data-member access='private'>
+          <var-decl name='' type-id='22e2627b' visibility='default' filepath='mm/slab.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='b5fecf67' visibility='default' filepath='mm/slab.h' line='82' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__8' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/sched/topology.h' line='132' column='1' id='52c6c1a9'>
+        <data-member access='private'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/sched/topology.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/sched/topology.h' line='134' column='1'/>
+        </data-member>
+      </union-decl>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='96' id='0955670c'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='08616ba1' size-in-bits='64' id='1a17e40d'/>
+      <pointer-type-def type-id='6c0e4a93' size-in-bits='64' id='4f3d95df'/>
+      <pointer-type-def type-id='c611b7c0' size-in-bits='64' id='941a57ca'/>
+      <pointer-type-def type-id='e74bcc7b' size-in-bits='64' id='170cc62f'/>
+      <pointer-type-def type-id='1650bf24' size-in-bits='64' id='8f17d05e'/>
+      <pointer-type-def type-id='f22a8abb' size-in-bits='64' id='5403cb36'/>
+      <pointer-type-def type-id='c0badb3c' size-in-bits='64' id='ef4fae1c'/>
+      <pointer-type-def type-id='87886298' size-in-bits='64' id='d97a04ce'/>
+      <pointer-type-def type-id='473764d9' size-in-bits='64' id='84618a95'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='64' id='8e100159'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <qualified-type-def type-id='66fa8ce5' const='yes' id='38ce7f2c'/>
+      <qualified-type-def type-id='c553aabf' const='yes' id='7c8b7a6c'/>
+      <qualified-type-def type-id='0584e65d' const='yes' id='47d6ff44'/>
+      <qualified-type-def type-id='1a0c5572' const='yes' id='3cea21ed'/>
+      <qualified-type-def type-id='fa21a7e9' const='yes' id='de5211b8'/>
+      <qualified-type-def type-id='5f0d764c' const='yes' id='0c45e0bb'/>
+      <array-type-def dimensions='1' type-id='bd561d05' size-in-bits='192' id='59bd9302'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <qualified-type-def type-id='8ce4ff83' const='yes' id='051f9336'/>
+      <qualified-type-def type-id='874691ab' const='yes' id='ecd54c0e'/>
+      <qualified-type-def type-id='7359adad' const='yes' id='9cbd1c16'/>
+      <pointer-type-def type-id='e4f938dc' size-in-bits='64' id='6a54ab42'/>
+      <pointer-type-def type-id='4dc01f59' size-in-bits='64' id='9bf95e81'/>
+      <array-type-def dimensions='1' type-id='a7623477' size-in-bits='13056' id='f88f3d38'>
+        <subrange length='102' type-id='7ff19f0f' id='8590b11a'/>
+      </array-type-def>
+      <pointer-type-def type-id='ed51618b' size-in-bits='64' id='11b101bb'/>
+      <pointer-type-def type-id='277029da' size-in-bits='64' id='3cce524c'/>
+      <enum-decl name='wb_reason' filepath='include/linux/backing-dev-defs.h' line='51' column='1' id='c1602c7a'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='WB_REASON_BACKGROUND' value='0'/>
+        <enumerator name='WB_REASON_VMSCAN' value='1'/>
+        <enumerator name='WB_REASON_SYNC' value='2'/>
+        <enumerator name='WB_REASON_PERIODIC' value='3'/>
+        <enumerator name='WB_REASON_LAPTOP_TIMER' value='4'/>
+        <enumerator name='WB_REASON_FREE_MORE_MEM' value='5'/>
+        <enumerator name='WB_REASON_FS_FREE_SPACE' value='6'/>
+        <enumerator name='WB_REASON_FORKER_THREAD' value='7'/>
+        <enumerator name='WB_REASON_FOREIGN_FLUSH' value='8'/>
+        <enumerator name='WB_REASON_MAX' value='9'/>
+      </enum-decl>
+      <pointer-type-def type-id='9df4c74e' size-in-bits='64' id='8ce270a4'/>
+      <pointer-type-def type-id='80a367ec' size-in-bits='64' id='65936caa'/>
+      <array-type-def dimensions='1' type-id='7e666abe' size-in-bits='192' id='e6ff92fb'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='8b7bbbae' size-in-bits='64' id='a50c1d00'/>
+      <pointer-type-def type-id='b11be48c' size-in-bits='64' id='65cea51e'/>
+      <pointer-type-def type-id='75985c10' size-in-bits='64' id='fb86b772'/>
+      <pointer-type-def type-id='935b1156' size-in-bits='64' id='6eededc8'/>
+      <pointer-type-def type-id='eb0f802b' size-in-bits='64' id='6241aa4f'/>
+      <pointer-type-def type-id='c3384bd1' size-in-bits='64' id='30ab2c05'/>
+      <pointer-type-def type-id='19ebf718' size-in-bits='64' id='42beb73a'/>
+      <pointer-type-def type-id='56cb7858' size-in-bits='64' id='12f0ff82'/>
+      <pointer-type-def type-id='c1f57de8' size-in-bits='64' id='87e3d3e2'/>
+      <pointer-type-def type-id='1b99a1f1' size-in-bits='64' id='5ddef2dd'/>
+      <pointer-type-def type-id='e0d0028a' size-in-bits='64' id='31cc9254'/>
+      <pointer-type-def type-id='6bd699b2' size-in-bits='64' id='8ea2626c'/>
+      <pointer-type-def type-id='b073751e' size-in-bits='64' id='47800058'/>
+      <pointer-type-def type-id='9b634486' size-in-bits='64' id='7f416e10'/>
+      <pointer-type-def type-id='3e7a7dc5' size-in-bits='64' id='b94ac371'/>
+      <pointer-type-def type-id='92cdf314' size-in-bits='64' id='6c4618be'/>
+      <pointer-type-def type-id='d0d650b9' size-in-bits='64' id='d23fe9bd'/>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='288' id='e415235d'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <pointer-type-def type-id='dc49d474' size-in-bits='64' id='a6d2fa52'/>
+      <pointer-type-def type-id='0cf2912e' size-in-bits='64' id='a53e2328'/>
+      <pointer-type-def type-id='9386c3d1' size-in-bits='64' id='fc7daf55'/>
+      <array-type-def dimensions='1' type-id='b0690d78' size-in-bits='1728' id='83ae09a1'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='b0f27198' size-in-bits='64' id='e0677422'/>
+      <pointer-type-def type-id='32f8fd62' size-in-bits='64' id='3e644294'/>
+      <array-type-def dimensions='1' type-id='b92c8d0d' size-in-bits='1280' id='aca5b9e5'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='ce848ab1' size-in-bits='2880' id='a09ef5a6'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='05438640' size-in-bits='infinite' id='a51f6b3c'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='5218160d' size-in-bits='64' id='c9d64c0d'/>
+      <class-decl name='block_device' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='490' column='1' id='1b893cc5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bd_dev' type-id='8504f260' visibility='default' filepath='include/linux/fs.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bd_openers' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bd_inode' type-id='7e666abe' visibility='default' filepath='include/linux/fs.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bd_super' type-id='42c8f564' visibility='default' filepath='include/linux/fs.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bd_mutex' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bd_claiming' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='bd_holder' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bd_holders' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='bd_write_holder' type-id='b50a4934' visibility='default' filepath='include/linux/fs.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bd_holder_disks' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bd_contains' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='bd_block_size' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='bd_partno' type-id='f9b06939' visibility='default' filepath='include/linux/fs.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='bd_part' type-id='84dc82b7' visibility='default' filepath='include/linux/fs.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bd_part_count' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='bd_invalidated' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bd_disk' type-id='33c599da' visibility='default' filepath='include/linux/fs.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='bd_queue' type-id='e7d2a5fc' visibility='default' filepath='include/linux/fs.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='bd_bdi' type-id='ef4fae1b' visibility='default' filepath='include/linux/fs.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='bd_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='bd_private' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='bd_fsfreeze_count' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='bd_fsfreeze_mutex' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='530' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog_array_item' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='511' column='1' id='f67e137c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog' type-id='bdcee7ae' visibility='default' filepath='include/linux/bpf.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cgroup_storage' type-id='dcd9fb4c' visibility='default' filepath='include/linux/bpf.h' line='513' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cdev' is-struct='yes' visibility='default' is-declaration-only='yes' id='22f86351'/>
+      <class-decl name='ctl_table_set' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='169' column='1' id='3fc3d262'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_seen' type-id='35e8c658' visibility='default' filepath='include/linux/sysctl.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dir' type-id='7c7d6006' visibility='default' filepath='include/linux/sysctl.h' line='171' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file_system_type' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='2294' column='1' id='2f5a60be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/fs.h' line='2295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fs_flags' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='2296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init_fs_context' type-id='57f0383a' visibility='default' filepath='include/linux/fs.h' line='2303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parameters' type-id='a2fb6348' visibility='default' filepath='include/linux/fs.h' line='2304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mount' type-id='d9394db1' visibility='default' filepath='include/linux/fs.h' line='2305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='kill_sb' type-id='1ff54a45' visibility='default' filepath='include/linux/fs.h' line='2307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/fs.h' line='2308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='next' type-id='21e53d44' visibility='default' filepath='include/linux/fs.h' line='2309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fs_supers' type-id='e151255a' visibility='default' filepath='include/linux/fs.h' line='2310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_lock_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_umount_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_vfs_rename_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_writers_key' type-id='9c02e2a6' visibility='default' filepath='include/linux/fs.h' line='2315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='i_lock_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='i_mutex_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='i_mutex_dir_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2324' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fprop_local_percpu' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/flex_proportions.h' line='76' column='1' id='587caff2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='events' type-id='b92c8d0d' visibility='default' filepath='include/linux/flex_proportions.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='period' type-id='f0981eeb' visibility='default' filepath='include/linux/flex_proportions.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/flex_proportions.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fscrypt_prepared_key' size-in-bits='128' is-struct='yes' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='181' column='1' id='a28355c2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tfm' type-id='72bb8c36' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='blk_key' type-id='cb6e5180' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='184' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inode_operations' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1927' column='1' id='5f5aa1ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lookup' type-id='02f90a61' visibility='default' filepath='include/linux/fs.h' line='1928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_link' type-id='76ae8e1d' visibility='default' filepath='include/linux/fs.h' line='1929' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='permission' type-id='f4f91b99' visibility='default' filepath='include/linux/fs.h' line='1930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_acl' type-id='7f30b822' visibility='default' filepath='include/linux/fs.h' line='1931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='readlink' type-id='a57bd028' visibility='default' filepath='include/linux/fs.h' line='1933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='create' type-id='c9cd0e09' visibility='default' filepath='include/linux/fs.h' line='1935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='link' type-id='4b872e00' visibility='default' filepath='include/linux/fs.h' line='1936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unlink' type-id='7f5be7f6' visibility='default' filepath='include/linux/fs.h' line='1937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='symlink' type-id='234843b5' visibility='default' filepath='include/linux/fs.h' line='1938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mkdir' type-id='98c2d938' visibility='default' filepath='include/linux/fs.h' line='1939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rmdir' type-id='7f5be7f6' visibility='default' filepath='include/linux/fs.h' line='1940' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='mknod' type-id='f9e0c0e5' visibility='default' filepath='include/linux/fs.h' line='1941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rename' type-id='7733ef81' visibility='default' filepath='include/linux/fs.h' line='1942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='setattr' type-id='c237e829' visibility='default' filepath='include/linux/fs.h' line='1944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='getattr' type-id='0b787edf' visibility='default' filepath='include/linux/fs.h' line='1945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='listxattr' type-id='3494e4bb' visibility='default' filepath='include/linux/fs.h' line='1946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fiemap' type-id='0508acce' visibility='default' filepath='include/linux/fs.h' line='1947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='update_time' type-id='64ecf6a5' visibility='default' filepath='include/linux/fs.h' line='1949' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='atomic_open' type-id='d3807eb0' visibility='default' filepath='include/linux/fs.h' line='1950' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tmpfile' type-id='98c2d938' visibility='default' filepath='include/linux/fs.h' line='1953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='set_acl' type-id='820976ef' visibility='default' filepath='include/linux/fs.h' line='1954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1956' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1957' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1959' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kmem_cache_node' size-in-bits='512' is-struct='yes' visibility='default' filepath='mm/slab.h' line='598' column='1' id='edac1e8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list_lock' type-id='fb4018a0' visibility='default' filepath='mm/slab.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_partial' type-id='7359adad' visibility='default' filepath='mm/slab.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='partial' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nr_slabs' type-id='f22a8abb' visibility='default' filepath='mm/slab.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='total_objects' type-id='f22a8abb' visibility='default' filepath='mm/slab.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='full' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='622' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mtd_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='25dc4075'/>
+      <class-decl name='perf_domain' size-in-bits='256' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='716' column='1' id='f2e22af7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='em_pd' type-id='ce714046' visibility='default' filepath='kernel/sched/sched.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='30f9749f' visibility='default' filepath='kernel/sched/sched.h' line='718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/sched/sched.h' line='719' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pipe_inode_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='bed94323'/>
+      <class-decl name='sched_domain_shared' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/sched/topology.h' line='66' column='1' id='ccc53977'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ref' type-id='49178f86' visibility='default' filepath='include/linux/sched/topology.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr_busy_cpus' type-id='49178f86' visibility='default' filepath='include/linux/sched/topology.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='has_idle_cores' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/topology.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_group' size-in-bits='256' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='1414' column='1' id='8b6491f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='f3dcd492' visibility='default' filepath='kernel/sched/sched.h' line='1415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ref' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='1416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='group_weight' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sgc' type-id='29a48d3d' visibility='default' filepath='kernel/sched/sched.h' line='1419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='asym_prefer_cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='1420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cpumask' type-id='c99b5ecd' visibility='default' filepath='kernel/sched/sched.h' line='1429' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uclamp_bucket' size-in-bits='64' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='817' column='1' id='ab0c2f56'>
+        <data-member access='public' layout-offset-in-bits='53'>
+          <var-decl name='value' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='818' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tasks' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='819' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uid_gid_map' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/user_namespace.h' line='24' column='1' id='f179bf1b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_extents' type-id='19c2251e' visibility='default' filepath='include/linux/user_namespace.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='c3ec14d0' visibility='default' filepath='include/linux/user_namespace.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='unicode_map' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/unicode.h' line='8' column='1' id='a24978a1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='charset' type-id='80f4b756' visibility='default' filepath='include/linux/unicode.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='version' type-id='95e97e5e' visibility='default' filepath='include/linux/unicode.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__55' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='ec55eb74' visibility='default' filepath='include/linux/uuid.h' line='16' column='1' id='8425539a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='b' type-id='9396cabb' visibility='default' filepath='include/linux/uuid.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='1216' is-struct='yes' is-anonymous='yes' visibility='default' filepath='mm/slab.h' line='82' column='1' id='b5fecf67'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='memcg' type-id='223696fc' visibility='default' filepath='mm/slab.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='children_node' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='kmem_caches_node' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='mm/slab.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='work_fn' type-id='8a4f2b79' visibility='default' filepath='mm/slab.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='' type-id='436b4ed4' visibility='default' filepath='mm/slab.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='mm/slab.h' line='76' column='1' id='22e2627b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='memcg_caches' type-id='2c8ce02f' visibility='default' filepath='mm/slab.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='__root_caches_node' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dying' type-id='b50a4934' visibility='default' filepath='mm/slab.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='1c0d3c63' size-in-bits='64' id='4d01ede7'/>
+      <pointer-type-def type-id='ff95f77c' size-in-bits='64' id='c1de1086'/>
+      <pointer-type-def type-id='56731789' size-in-bits='64' id='07ebb4cd'/>
+      <typedef-decl name='resource_size_t' type-id='2522883d' filepath='include/linux/types.h' line='163' column='1' id='acc63fdf'/>
+      <typedef-decl name='siphash_key_t' type-id='a1908dcc' filepath='include/linux/siphash.h' line='22' column='1' id='7799da43'/>
+      <pointer-type-def type-id='100ce309' size-in-bits='64' id='4d8f5625'/>
+      <pointer-type-def type-id='0caa7082' size-in-bits='64' id='5f29549c'/>
+      <pointer-type-def type-id='e9855576' size-in-bits='64' id='72cd68b0'/>
+      <pointer-type-def type-id='ebe8eb0e' size-in-bits='64' id='40da47a8'/>
+      <pointer-type-def type-id='309ed22f' size-in-bits='64' id='d0882d6b'/>
+      <pointer-type-def type-id='357e5279' size-in-bits='64' id='227e209d'/>
+      <pointer-type-def type-id='8c180526' size-in-bits='64' id='b22f4610'/>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='128' id='0d8415b5'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <union-decl name='fscrypt_policy' size-in-bits='192' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='105' column='1' id='61227238'>
+        <data-member access='private'>
+          <var-decl name='version' type-id='f9b06939' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='v1' type-id='74e2c23b' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='v2' type-id='75e2c3ce' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='108' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__17' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='14' column='1' id='54d74023'>
+        <data-member access='private'>
+          <var-decl name='cnts' type-id='49178f86' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='f29807b6' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='16' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__27' size-in-bits='384' is-anonymous='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='181' column='1' id='93944b10'>
+        <data-member access='private'>
+          <var-decl name='release_work' type-id='ef9025d0' visibility='default' filepath='include/linux/backing-dev-defs.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/backing-dev-defs.h' line='183' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='8f9ed095' size-in-bits='64' id='cd2cc9e1'/>
+      <pointer-type-def type-id='61062930' size-in-bits='64' id='6fa26802'/>
+      <pointer-type-def type-id='a38d6c05' size-in-bits='64' id='da81d789'/>
+      <pointer-type-def type-id='97db9237' size-in-bits='64' id='8581ac2b'/>
+      <pointer-type-def type-id='d843c93e' size-in-bits='64' id='f42e15b8'/>
+      <pointer-type-def type-id='37f6d957' size-in-bits='64' id='40363cbb'/>
+      <pointer-type-def type-id='8e9eec3c' size-in-bits='64' id='f48b73f6'/>
+      <pointer-type-def type-id='107219ed' size-in-bits='64' id='277e3361'/>
+      <pointer-type-def type-id='d6e6975e' size-in-bits='64' id='eda08098'/>
+      <pointer-type-def type-id='eaa32e2f' size-in-bits='64' id='63e171df'/>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='128' id='9396cabb'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='531c24d0' size-in-bits='128' id='dcd9fb4c'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='facd5338' size-in-bits='64' id='bdcee7ae'/>
+      <pointer-type-def type-id='933e0e21' size-in-bits='64' id='76ae8e1d'/>
+      <pointer-type-def type-id='dc743cb2' size-in-bits='64' id='a2fb6348'/>
+      <pointer-type-def type-id='3ae4e62d' size-in-bits='64' id='bd561d05'/>
+      <qualified-type-def type-id='2d3dd5e3' const='yes' id='e4f938dc'/>
+      <pointer-type-def type-id='d80b6ab0' size-in-bits='64' id='72bb8c36'/>
+      <pointer-type-def type-id='fbe9020d' size-in-bits='64' id='d9394db1'/>
+      <pointer-type-def type-id='2bdce7cd' size-in-bits='64' id='02f90a61'/>
+      <pointer-type-def type-id='f8d03d40' size-in-bits='64' id='ce714046'/>
+      <pointer-type-def type-id='d509ab32' size-in-bits='64' id='cb6e5180'/>
+      <pointer-type-def type-id='4f60ffbc' size-in-bits='64' id='33c599da'/>
+      <pointer-type-def type-id='2473bc1f' size-in-bits='64' id='84dc82b7'/>
+      <pointer-type-def type-id='f29c5fbb' size-in-bits='64' id='0b787edf'/>
+      <pointer-type-def type-id='647d371e' size-in-bits='64' id='35e8c658'/>
+      <pointer-type-def type-id='904e13de' size-in-bits='64' id='a57bd028'/>
+      <pointer-type-def type-id='fb8e936d' size-in-bits='64' id='c237e829'/>
+      <pointer-type-def type-id='dfe7e6ee' size-in-bits='64' id='4b872e00'/>
+      <pointer-type-def type-id='cb6487f8' size-in-bits='64' id='57f0383a'/>
+      <pointer-type-def type-id='09c8759c' size-in-bits='64' id='7f5be7f6'/>
+      <pointer-type-def type-id='a04cd5a9' size-in-bits='64' id='234843b5'/>
+      <pointer-type-def type-id='7e8ddfae' size-in-bits='64' id='d3807eb0'/>
+      <pointer-type-def type-id='f2fea3d5' size-in-bits='64' id='7733ef81'/>
+      <pointer-type-def type-id='453343e6' size-in-bits='64' id='98c2d938'/>
+      <pointer-type-def type-id='f3601a85' size-in-bits='64' id='c9cd0e09'/>
+      <pointer-type-def type-id='270f5881' size-in-bits='64' id='f9e0c0e5'/>
+      <pointer-type-def type-id='79d185ec' size-in-bits='64' id='0508acce'/>
+      <pointer-type-def type-id='cfe842dd' size-in-bits='64' id='f4f91b99'/>
+      <pointer-type-def type-id='bdd382a3' size-in-bits='64' id='820976ef'/>
+      <pointer-type-def type-id='c3b65e91' size-in-bits='64' id='64ecf6a5'/>
+      <array-type-def dimensions='1' type-id='47479831' id='9c02e2a6'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='11c8601c' size-in-bits='64' id='223696fc'/>
+      <pointer-type-def type-id='dbef6377' size-in-bits='64' id='2c8ce02f'/>
+      <pointer-type-def type-id='a2802dd0' size-in-bits='64' id='7f30b822'/>
+      <pointer-type-def type-id='ea3de64d' size-in-bits='64' id='29a48d3d'/>
+      <class-decl name='address_space_operations' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='369' column='1' id='66fa8ce5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='writepage' type-id='8b8bc11e' visibility='default' filepath='include/linux/fs.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='readpage' type-id='ab57fa9e' visibility='default' filepath='include/linux/fs.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='writepages' type-id='01ffd89c' visibility='default' filepath='include/linux/fs.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_page_dirty' type-id='1654d99a' visibility='default' filepath='include/linux/fs.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='readpages' type-id='230dd919' visibility='default' filepath='include/linux/fs.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write_begin' type-id='4eb95ade' visibility='default' filepath='include/linux/fs.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write_end' type-id='e6da64f6' visibility='default' filepath='include/linux/fs.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bmap' type-id='aecbf18b' visibility='default' filepath='include/linux/fs.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='invalidatepage' type-id='d8db14d1' visibility='default' filepath='include/linux/fs.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='releasepage' type-id='919b335b' visibility='default' filepath='include/linux/fs.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='freepage' type-id='2f974a69' visibility='default' filepath='include/linux/fs.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='direct_IO' type-id='227e209d' visibility='default' filepath='include/linux/fs.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='migratepage' type-id='10451dea' visibility='default' filepath='include/linux/fs.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='isolate_page' type-id='a8faf36f' visibility='default' filepath='include/linux/fs.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='putback_page' type-id='2f974a69' visibility='default' filepath='include/linux/fs.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='launder_page' type-id='1654d99a' visibility='default' filepath='include/linux/fs.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='is_partially_uptodate' type-id='800c67c2' visibility='default' filepath='include/linux/fs.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='is_dirty_writeback' type-id='6af64a09' visibility='default' filepath='include/linux/fs.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='error_remove_page' type-id='2c5f769d' visibility='default' filepath='include/linux/fs.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='swap_activate' type-id='2eb7248e' visibility='default' filepath='include/linux/fs.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='swap_deactivate' type-id='88909596' visibility='default' filepath='include/linux/fs.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='421' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='backing_dev_info' size-in-bits='9344' is-struct='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='188' column='1' id='c0badb3c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='91ce1af9' visibility='default' filepath='include/linux/backing-dev-defs.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='include/linux/backing-dev-defs.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bdi_list' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ra_pages' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_pages' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='congested_fn' type-id='84127e50' visibility='default' filepath='include/linux/backing-dev-defs.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='congested_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/backing-dev-defs.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/backing-dev-defs.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='refcnt' type-id='400fb07b' visibility='default' filepath='include/linux/backing-dev-defs.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='capabilities' type-id='f0981eeb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='min_ratio' type-id='f0981eeb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='max_ratio' type-id='f0981eeb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='max_prop_frac' type-id='f0981eeb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='tot_write_bandwidth' type-id='f22a8abb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='wb' type-id='ac0aeb1d' visibility='default' filepath='include/linux/backing-dev-defs.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='wb_list' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='cgwb_tree' type-id='d39738ac' visibility='default' filepath='include/linux/backing-dev-defs.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='cgwb_congested_tree' type-id='dec44472' visibility='default' filepath='include/linux/backing-dev-defs.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='cgwb_release_mutex' type-id='925167dc' visibility='default' filepath='include/linux/backing-dev-defs.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='wb_switch_rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/backing-dev-defs.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='wb_waitq' type-id='b5ab048f' visibility='default' filepath='include/linux/backing-dev-defs.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/backing-dev-defs.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='dev_name' type-id='59daf3ef' visibility='default' filepath='include/linux/backing-dev-defs.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='owner' type-id='fa0b179b' visibility='default' filepath='include/linux/backing-dev-defs.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='laptop_mode_wb_timer' type-id='abe41e67' visibility='default' filepath='include/linux/backing-dev-defs.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='debug_dir' type-id='27675065' visibility='default' filepath='include/linux/backing-dev-defs.h' line='229' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bdi_writeback_congested' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='98' column='1' id='87886298'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/linux/backing-dev-defs.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__bdi' type-id='ef4fae1c' visibility='default' filepath='include/linux/backing-dev-defs.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='blkcg_id' type-id='95e97e5e' visibility='default' filepath='include/linux/backing-dev-defs.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='include/linux/backing-dev-defs.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpudl_item' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/sched/cpudeadline.h' line='5' column='1' id='4dc01f59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dl' type-id='91ce1af9' visibility='default' filepath='kernel/sched/cpudeadline.h' line='6' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/cpudeadline.h' line='7' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='idx' type-id='95e97e5e' visibility='default' filepath='kernel/sched/cpudeadline.h' line='8' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpupri_vec' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/sched/cpupri.h' line='10' column='1' id='a7623477'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='kernel/sched/cpupri.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask' type-id='b16b461b' visibility='default' filepath='kernel/sched/cpupri.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ctl_dir' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='163' column='1' id='7c7d6006'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='ed51618b' visibility='default' filepath='include/linux/sysctl.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='root' type-id='dec44472' visibility='default' filepath='include/linux/sysctl.h' line='166' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ctl_table_header' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='143' column='1' id='ed51618b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='201d54e5' visibility='default' filepath='include/linux/sysctl.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unregistering' type-id='389faaf7' visibility='default' filepath='include/linux/sysctl.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ctl_table_arg' type-id='631dc3c1' visibility='default' filepath='include/linux/sysctl.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='root' type-id='2993adbc' visibility='default' filepath='include/linux/sysctl.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set' type-id='42988600' visibility='default' filepath='include/linux/sysctl.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parent' type-id='1c66bddc' visibility='default' filepath='include/linux/sysctl.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='node' type-id='a586bbcf' visibility='default' filepath='include/linux/sysctl.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='inodes' type-id='e151255a' visibility='default' filepath='include/linux/sysctl.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pagemap_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/memremap.h' line='67' column='1' id='c553aabf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page_free' type-id='2f974a69' visibility='default' filepath='include/linux/memremap.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kill' type-id='b90b068f' visibility='default' filepath='include/linux/memremap.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cleanup' type-id='b90b068f' visibility='default' filepath='include/linux/memremap.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='migrate_to_ram' type-id='bb28da1c' visibility='default' filepath='include/linux/memremap.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dquot_operations' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='325' column='1' id='0584e65d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='write_dquot' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='alloc_dquot' type-id='324070f9' visibility='default' filepath='include/linux/quota.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destroy_dquot' type-id='dbc22931' visibility='default' filepath='include/linux/quota.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='acquire_dquot' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release_dquot' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mark_dirty' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write_info' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_reserved_space' type-id='15543b10' visibility='default' filepath='include/linux/quota.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_projid' type-id='c23b3cbc' visibility='default' filepath='include/linux/quota.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_inode_usage' type-id='6b7539fb' visibility='default' filepath='include/linux/quota.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_next_id' type-id='70b08f83' visibility='default' filepath='include/linux/quota.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='343' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='export_operations' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/exportfs.h' line='193' column='1' id='1a0c5572'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='encode_fh' type-id='2cdfbf0a' visibility='default' filepath='include/linux/exportfs.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fh_to_dentry' type-id='9b9ccb86' visibility='default' filepath='include/linux/exportfs.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fh_to_parent' type-id='9b9ccb86' visibility='default' filepath='include/linux/exportfs.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_name' type-id='cb0ca137' visibility='default' filepath='include/linux/exportfs.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_parent' type-id='36ed3b9a' visibility='default' filepath='include/linux/exportfs.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='commit_metadata' type-id='28ba4492' visibility='default' filepath='include/linux/exportfs.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_uuid' type-id='547aa7d2' visibility='default' filepath='include/linux/exportfs.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='map_blocks' type-id='35d085ce' visibility='default' filepath='include/linux/exportfs.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='commit_blocks' type-id='30144f27' visibility='default' filepath='include/linux/exportfs.h' line='209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fscrypt_direct_key' is-struct='yes' visibility='default' is-declaration-only='yes' id='9df4c74e'/>
+      <class-decl name='fscrypt_mode' size-in-bits='256' is-struct='yes' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='580' column='1' id='80a367ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='friendly_name' type-id='80f4b756' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cipher_str' type-id='80f4b756' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='keysize' type-id='95e97e5e' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ivsize' type-id='95e97e5e' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='logged_impl_name' type-id='95e97e5e' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='blk_crypto_mode' type-id='e951e732' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='586' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fscrypt_operations' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/fscrypt.h' line='58' column='1' id='fa21a7e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fscrypt.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key_prefix' type-id='80f4b756' visibility='default' filepath='include/linux/fscrypt.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_context' type-id='c60354f3' visibility='default' filepath='include/linux/fscrypt.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_context' type-id='ef75df1f' visibility='default' filepath='include/linux/fscrypt.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_dummy_policy' type-id='c0135c9c' visibility='default' filepath='include/linux/fscrypt.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='empty_dir' type-id='deb31178' visibility='default' filepath='include/linux/fscrypt.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='max_namelen' type-id='f0981eeb' visibility='default' filepath='include/linux/fscrypt.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='has_stable_inodes' type-id='3b2da7a6' visibility='default' filepath='include/linux/fscrypt.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_ino_and_lblk_bits' type-id='c95d966d' visibility='default' filepath='include/linux/fscrypt.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_num_devices' type-id='d2f4c704' visibility='default' filepath='include/linux/fscrypt.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_devices' type-id='b0ddaf40' visibility='default' filepath='include/linux/fscrypt.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fscrypt_policy_v1' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='40' column='1' id='74e2c23b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='contents_encryption_mode' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='filenames_encryption_mode' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='master_key_descriptor' type-id='0209ab38' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fscrypt_policy_v2' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='66' column='1' id='75e2c3ce'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='contents_encryption_mode' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='filenames_encryption_mode' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='__reserved' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='master_key_identifier' type-id='9396cabb' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fsverity_operations' is-struct='yes' visibility='default' is-declaration-only='yes' id='5f0d764c'/>
+      <class-decl name='list_lru_node' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/list_lru.h' line='40' column='1' id='dc49d474'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/list_lru.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lru' type-id='ff0d68dc' visibility='default' filepath='include/linux/list_lru.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='memcg_lrus' type-id='153e161b' visibility='default' filepath='include/linux/list_lru.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nr_items' type-id='bd54fe1a' visibility='default' filepath='include/linux/list_lru.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_dqinfo' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='222' column='1' id='b0690d78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dqi_format' type-id='eb9a3ab6' visibility='default' filepath='include/linux/quota.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dqi_fmt_id' type-id='95e97e5e' visibility='default' filepath='include/linux/quota.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dqi_dirty_list' type-id='72f469ec' visibility='default' filepath='include/linux/quota.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dqi_flags' type-id='7359adad' visibility='default' filepath='include/linux/quota.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dqi_bgrace' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='dqi_igrace' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dqi_max_spc_limit' type-id='33341965' visibility='default' filepath='include/linux/quota.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dqi_max_ino_limit' type-id='33341965' visibility='default' filepath='include/linux/quota.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dqi_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/quota.h' line='232' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='percpu_counter' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/percpu_counter.h' line='20' column='1' id='b92c8d0d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/percpu_counter.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='9b7c55ef' visibility='default' filepath='include/linux/percpu_counter.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/percpu_counter.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='counters' type-id='9f2cce4b' visibility='default' filepath='include/linux/percpu_counter.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='percpu_rw_semaphore' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/percpu-rwsem.h' line='12' column='1' id='ce848ab1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rss' type-id='638a7d75' visibility='default' filepath='include/linux/percpu-rwsem.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read_count' type-id='807869d3' visibility='default' filepath='include/linux/percpu-rwsem.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rw_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/percpu-rwsem.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='writer' type-id='71598d38' visibility='default' filepath='include/linux/percpu-rwsem.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='readers_block' type-id='95e97e5e' visibility='default' filepath='include/linux/percpu-rwsem.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='posix_acl_entry' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/posix_acl.h' line='18' column='1' id='05438640'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='e_tag' type-id='a2185560' visibility='default' filepath='include/linux/posix_acl.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='e_perm' type-id='8efea9e5' visibility='default' filepath='include/linux/posix_acl.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='' type-id='21c0164a' visibility='default' filepath='include/linux/posix_acl.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='quotactl_ops' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='434' column='1' id='8ce4ff83'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='quota_on' type-id='de6b64d0' visibility='default' filepath='include/linux/quota.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='quota_off' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='quota_enable' type-id='7aa5a21e' visibility='default' filepath='include/linux/quota.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='quota_disable' type-id='7aa5a21e' visibility='default' filepath='include/linux/quota.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='quota_sync' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_info' type-id='4e326e06' visibility='default' filepath='include/linux/quota.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_dqblk' type-id='9e27a8d4' visibility='default' filepath='include/linux/quota.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_nextdqblk' type-id='483e8c3a' visibility='default' filepath='include/linux/quota.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_dqblk' type-id='9e27a8d4' visibility='default' filepath='include/linux/quota.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_state' type-id='eb638046' visibility='default' filepath='include/linux/quota.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rm_xquota' type-id='7aa5a21e' visibility='default' filepath='include/linux/quota.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='449' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='super_operations' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='2011' column='1' id='874691ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alloc_inode' type-id='e8c4dba4' visibility='default' filepath='include/linux/fs.h' line='2012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='destroy_inode' type-id='4f3d95df' visibility='default' filepath='include/linux/fs.h' line='2013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='free_inode' type-id='4f3d95df' visibility='default' filepath='include/linux/fs.h' line='2014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dirty_inode' type-id='5f5506f6' visibility='default' filepath='include/linux/fs.h' line='2016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write_inode' type-id='fd780be6' visibility='default' filepath='include/linux/fs.h' line='2017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='drop_inode' type-id='28ba4492' visibility='default' filepath='include/linux/fs.h' line='2018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='evict_inode' type-id='4f3d95df' visibility='default' filepath='include/linux/fs.h' line='2019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='put_super' type-id='1ff54a45' visibility='default' filepath='include/linux/fs.h' line='2020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sync_fs' type-id='dcab5203' visibility='default' filepath='include/linux/fs.h' line='2021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='freeze_super' type-id='d2f4c704' visibility='default' filepath='include/linux/fs.h' line='2022' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='freeze_fs' type-id='d2f4c704' visibility='default' filepath='include/linux/fs.h' line='2023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='thaw_super' type-id='d2f4c704' visibility='default' filepath='include/linux/fs.h' line='2024' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='unfreeze_fs' type-id='d2f4c704' visibility='default' filepath='include/linux/fs.h' line='2025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='statfs' type-id='35646c79' visibility='default' filepath='include/linux/fs.h' line='2026' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='remount_fs' type-id='552c8f87' visibility='default' filepath='include/linux/fs.h' line='2027' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='umount_begin' type-id='1ff54a45' visibility='default' filepath='include/linux/fs.h' line='2028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='show_options' type-id='c94f6b13' visibility='default' filepath='include/linux/fs.h' line='2030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='show_devname' type-id='c94f6b13' visibility='default' filepath='include/linux/fs.h' line='2031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='show_path' type-id='c94f6b13' visibility='default' filepath='include/linux/fs.h' line='2032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='show_stats' type-id='c94f6b13' visibility='default' filepath='include/linux/fs.h' line='2033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='quota_read' type-id='e295c77c' visibility='default' filepath='include/linux/fs.h' line='2035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='quota_write' type-id='a9b95107' visibility='default' filepath='include/linux/fs.h' line='2036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='get_dquots' type-id='ae02292a' visibility='default' filepath='include/linux/fs.h' line='2037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='bdev_try_to_free_page' type-id='ea44f8d2' visibility='default' filepath='include/linux/fs.h' line='2039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='nr_cached_objects' type-id='c4facf61' visibility='default' filepath='include/linux/fs.h' line='2040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='free_cached_objects' type-id='c4facf61' visibility='default' filepath='include/linux/fs.h' line='2042' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2048' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__8' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='7799da43' visibility='default' filepath='include/linux/siphash.h' line='20' column='1' id='a1908dcc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='24a375b2' visibility='default' filepath='include/linux/siphash.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__13' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='16' column='1' id='f29807b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wlocked' type-id='f9b06939' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='__lstate' type-id='930ea9f9' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ebaa0f87' size-in-bits='64' id='3494e4bb'/>
+      <union-decl name='__anonymous_union__6' size-in-bits='384' is-anonymous='yes' visibility='default' filepath='mm/slab.h' line='89' column='1' id='436b4ed4'>
+        <data-member access='private'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='mm/slab.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='mm/slab.h' line='91' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/linux/user_namespace.h' line='26' column='1' id='c3ec14d0'>
+        <data-member access='private'>
+          <var-decl name='extent' type-id='df6d2206' visibility='default' filepath='include/linux/user_namespace.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='e873af3e' visibility='default' filepath='include/linux/user_namespace.h' line='28' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='ad0ff4ed' size-in-bits='64' id='8a4f2b79'/>
+      <pointer-type-def type-id='18fcefa9' size-in-bits='64' id='1ff54a45'/>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='32' id='c213d3d4'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='64' id='0209ab38'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <pointer-type-def type-id='15881542' size-in-bits='64' id='531c24d0'/>
+      <pointer-type-def type-id='6e3695a3' size-in-bits='64' id='84127e50'/>
+      <qualified-type-def type-id='8a2a988b' const='yes' id='dc743cb2'/>
+      <pointer-type-def type-id='4b7af74a' size-in-bits='64' id='c0135c9c'/>
+      <qualified-type-def type-id='87cad984' const='yes' id='3ae4e62d'/>
+      <pointer-type-def type-id='7c7d6006' size-in-bits='64' id='1c66bddc'/>
+      <pointer-type-def type-id='beafd747' size-in-bits='64' id='a586bbcf'/>
+      <pointer-type-def type-id='91a515f9' size-in-bits='64' id='631dc3c1'/>
+      <pointer-type-def type-id='d83969a6' size-in-bits='64' id='2993adbc'/>
+      <pointer-type-def type-id='3fc3d262' size-in-bits='64' id='42988600'/>
+      <pointer-type-def type-id='39d64410' size-in-bits='64' id='36ed3b9a'/>
+      <pointer-type-def type-id='5d64147c' size-in-bits='64' id='9b9ccb86'/>
+      <pointer-type-def type-id='13edfabd' size-in-bits='64' id='324070f9'/>
+      <pointer-type-def type-id='5a9e3f68' size-in-bits='64' id='ae02292a'/>
+      <enum-decl name='blk_crypto_mode_num' filepath='include/linux/blk-crypto.h' line='11' column='1' id='e951e732'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_INVALID' value='0'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_AES_256_XTS' value='1'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV' value='2'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_ADIANTUM' value='3'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_MAX' value='4'/>
+      </enum-decl>
+      <pointer-type-def type-id='96bb51fa' size-in-bits='64' id='e8c4dba4'/>
+      <pointer-type-def type-id='8d077d91' size-in-bits='64' id='2c5f769d'/>
+      <pointer-type-def type-id='0f1de308' size-in-bits='64' id='10451dea'/>
+      <pointer-type-def type-id='ffad938a' size-in-bits='64' id='01ffd89c'/>
+      <pointer-type-def type-id='96658a93' size-in-bits='64' id='cb0ca137'/>
+      <pointer-type-def type-id='ea863425' size-in-bits='64' id='35646c79'/>
+      <pointer-type-def type-id='d87d8242' size-in-bits='64' id='24c1e1dc'/>
+      <pointer-type-def type-id='37d25cd5' size-in-bits='64' id='230dd919'/>
+      <pointer-type-def type-id='cd1955fc' size-in-bits='64' id='4eb95ade'/>
+      <pointer-type-def type-id='da73ead4' size-in-bits='64' id='e6da64f6'/>
+      <pointer-type-def type-id='d9f53f44' size-in-bits='64' id='ab57fa9e'/>
+      <pointer-type-def type-id='cd313b90' size-in-bits='64' id='28ba4492'/>
+      <pointer-type-def type-id='91de15a8' size-in-bits='64' id='2cdfbf0a'/>
+      <pointer-type-def type-id='91b0693b' size-in-bits='64' id='30144f27'/>
+      <pointer-type-def type-id='a92634ba' size-in-bits='64' id='c23b3cbc'/>
+      <pointer-type-def type-id='27e3f547' size-in-bits='64' id='6b7539fb'/>
+      <pointer-type-def type-id='a48b0884' size-in-bits='64' id='35d085ce'/>
+      <pointer-type-def type-id='7a6178ff' size-in-bits='64' id='c60354f3'/>
+      <pointer-type-def type-id='4f0fdafb' size-in-bits='64' id='ef75df1f'/>
+      <pointer-type-def type-id='b36b391c' size-in-bits='64' id='fd780be6'/>
+      <pointer-type-def type-id='869f5d80' size-in-bits='64' id='1654d99a'/>
+      <pointer-type-def type-id='dc2316e7' size-in-bits='64' id='919b335b'/>
+      <pointer-type-def type-id='31e7d828' size-in-bits='64' id='800c67c2'/>
+      <pointer-type-def type-id='a804e84c' size-in-bits='64' id='8b8bc11e'/>
+      <pointer-type-def type-id='b16db39f' size-in-bits='64' id='c94f6b13'/>
+      <pointer-type-def type-id='c604b3e2' size-in-bits='64' id='d2f4c704'/>
+      <pointer-type-def type-id='3b1012d7' size-in-bits='64' id='dcab5203'/>
+      <pointer-type-def type-id='4f21665b' size-in-bits='64' id='552c8f87'/>
+      <pointer-type-def type-id='e85fe596' size-in-bits='64' id='de6b64d0'/>
+      <pointer-type-def type-id='b992836c' size-in-bits='64' id='4e326e06'/>
+      <pointer-type-def type-id='e6f3a13f' size-in-bits='64' id='70b08f83'/>
+      <pointer-type-def type-id='cda9f6b0' size-in-bits='64' id='483e8c3a'/>
+      <pointer-type-def type-id='26f907b0' size-in-bits='64' id='ea44f8d2'/>
+      <pointer-type-def type-id='0e61b6d4' size-in-bits='64' id='eb638046'/>
+      <pointer-type-def type-id='eeeb3192' size-in-bits='64' id='9e27a8d4'/>
+      <pointer-type-def type-id='657fbd80' size-in-bits='64' id='547aa7d2'/>
+      <pointer-type-def type-id='56a7b834' size-in-bits='64' id='7aa5a21e'/>
+      <pointer-type-def type-id='c95d9034' size-in-bits='64' id='2eb7248e'/>
+      <pointer-type-def type-id='5a3e162b' size-in-bits='64' id='153e161b'/>
+      <pointer-type-def type-id='7f8cc66d' size-in-bits='64' id='c4facf61'/>
+      <pointer-type-def type-id='e29df76e' size-in-bits='64' id='15543b10'/>
+      <pointer-type-def type-id='c2be49b0' size-in-bits='64' id='eb9a3ab6'/>
+      <pointer-type-def type-id='a7832498' size-in-bits='64' id='9f2cce4b'/>
+      <class-decl name='bpf_prog' is-struct='yes' visibility='default' is-declaration-only='yes' id='facd5338'/>
+      <class-decl name='crypto_skcipher' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/crypto/skcipher.h' line='37' column='1' id='d80b6ab0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='9e5416b4' visibility='default' filepath='include/crypto/skcipher.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='1507ee2a' visibility='default' filepath='include/crypto/skcipher.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='1507ee2a' visibility='default' filepath='include/crypto/skcipher.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='reqsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='keysize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/crypto/skcipher.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='em_perf_domain' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/energy_model.h' line='37' column='1' id='f8d03d40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='table' type-id='57c51e1c' visibility='default' filepath='include/linux/energy_model.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_cap_states' type-id='95e97e5e' visibility='default' filepath='include/linux/energy_model.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpus' type-id='c99b5ecd' visibility='default' filepath='include/linux/energy_model.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fscrypt_blk_crypto_key' size-in-bits='1280' is-struct='yes' visibility='default' filepath='fs/crypto/inline_crypt.c' line='24' column='1' id='d509ab32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='7b61b7b4' visibility='default' filepath='fs/crypto/inline_crypt.c' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='num_devs' type-id='95e97e5e' visibility='default' filepath='fs/crypto/inline_crypt.c' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='devs' type-id='60a540a8' visibility='default' filepath='fs/crypto/inline_crypt.c' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gendisk' is-struct='yes' visibility='default' is-declaration-only='yes' id='4f60ffbc'/>
+      <class-decl name='hd_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='2473bc1f'/>
+      <class-decl name='list_lru_one' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/list_lru.h' line='28' column='1' id='ff0d68dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/list_lru.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nr_items' type-id='bd54fe1a' visibility='default' filepath='include/linux/list_lru.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup' size-in-bits='21504' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='208' column='1' id='11c8601c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='css' type-id='7f3df443' visibility='default' filepath='include/linux/memcontrol.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='id' type-id='18f7b101' visibility='default' filepath='include/linux/memcontrol.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='memory' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='swap' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='memsw' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='kmem' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='tcpmem' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='high' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='high_work' type-id='ef9025d0' visibility='default' filepath='include/linux/memcontrol.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='soft_limit' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='vmpressure' type-id='d6294af7' visibility='default' filepath='include/linux/memcontrol.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='use_hierarchy' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8008'>
+          <var-decl name='oom_group' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8016'>
+          <var-decl name='oom_lock' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8032'>
+          <var-decl name='under_oom' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='swappiness' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8096'>
+          <var-decl name='oom_kill_disable' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='events_file' type-id='37a4ee40' visibility='default' filepath='include/linux/memcontrol.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='events_local_file' type-id='37a4ee40' visibility='default' filepath='include/linux/memcontrol.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='swap_events_file' type-id='37a4ee40' visibility='default' filepath='include/linux/memcontrol.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='thresholds_lock' type-id='925167dc' visibility='default' filepath='include/linux/memcontrol.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='thresholds' type-id='a38368d4' visibility='default' filepath='include/linux/memcontrol.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='memsw_thresholds' type-id='a38368d4' visibility='default' filepath='include/linux/memcontrol.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='oom_notify' type-id='72f469ec' visibility='default' filepath='include/linux/memcontrol.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='move_charge_at_immigrate' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='move_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/memcontrol.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='move_lock_flags' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='_pad1_' type-id='4f5a0c96' visibility='default' filepath='include/linux/memcontrol.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='moving_account' type-id='49178f86' visibility='default' filepath='include/linux/memcontrol.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='move_lock_task' type-id='f23e2572' visibility='default' filepath='include/linux/memcontrol.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='vmstats_local' type-id='a0d3a64b' visibility='default' filepath='include/linux/memcontrol.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='vmstats_percpu' type-id='a0d3a64b' visibility='default' filepath='include/linux/memcontrol.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='_pad2_' type-id='4f5a0c96' visibility='default' filepath='include/linux/memcontrol.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='vmstats' type-id='9dc2293d' visibility='default' filepath='include/linux/memcontrol.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13696'>
+          <var-decl name='vmevents' type-id='37ece551' visibility='default' filepath='include/linux/memcontrol.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17280'>
+          <var-decl name='memory_events' type-id='76b91d35' visibility='default' filepath='include/linux/memcontrol.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17728'>
+          <var-decl name='memory_events_local' type-id='76b91d35' visibility='default' filepath='include/linux/memcontrol.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18176'>
+          <var-decl name='socket_pressure' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18240'>
+          <var-decl name='tcpmem_active' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18272'>
+          <var-decl name='tcpmem_pressure' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18304'>
+          <var-decl name='kmemcg_id' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18336'>
+          <var-decl name='kmem_state' type-id='def0995c' visibility='default' filepath='include/linux/memcontrol.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18368'>
+          <var-decl name='kmem_caches' type-id='72f469ec' visibility='default' filepath='include/linux/memcontrol.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18496'>
+          <var-decl name='last_scanned_node' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18560'>
+          <var-decl name='cgwb_list' type-id='72f469ec' visibility='default' filepath='include/linux/memcontrol.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18688'>
+          <var-decl name='cgwb_domain' type-id='960bf1fd' visibility='default' filepath='include/linux/memcontrol.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19776'>
+          <var-decl name='cgwb_frn' type-id='f53c5bdb' visibility='default' filepath='include/linux/memcontrol.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21056'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='include/linux/memcontrol.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21184'>
+          <var-decl name='event_list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/memcontrol.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21248'>
+          <var-decl name='nodeinfo' type-id='687d975e' visibility='default' filepath='include/linux/memcontrol.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_cache_array' size-in-bits='128' is-struct='yes' visibility='default' filepath='mm/slab.h' line='35' column='1' id='dbef6377'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='mm/slab.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entries' type-id='c66d33bc' visibility='default' filepath='mm/slab.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcu_sync' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/rcu_sync.h' line='17' column='1' id='638a7d75'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gp_state' type-id='95e97e5e' visibility='default' filepath='include/linux/rcu_sync.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='gp_count' type-id='95e97e5e' visibility='default' filepath='include/linux/rcu_sync.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gp_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/rcu_sync.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cb_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/rcu_sync.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcuwait' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/rcuwait.h' line='15' column='1' id='71598d38'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/rcuwait.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_group_capacity' size-in-bits='384' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='1395' column='1' id='ea3de64d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ref' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='1396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='capacity' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='1401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='min_capacity' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='1402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_capacity' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='1403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='next_update' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='1404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='imbalance' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='1405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='1408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cpumask' type-id='c99b5ecd' visibility='default' filepath='kernel/sched/sched.h' line='1411' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xattr_handler' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/xattr.h' line='28' column='1' id='2d3dd5e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/xattr.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prefix' type-id='80f4b756' visibility='default' filepath='include/linux/xattr.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/xattr.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='439be051' visibility='default' filepath='include/linux/xattr.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get' type-id='d5f76b20' visibility='default' filepath='include/linux/xattr.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set' type-id='d5f76b20' visibility='default' filepath='include/linux/xattr.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__4' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/user_namespace.h' line='28' column='1' id='e873af3e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='forward' type-id='9b105293' visibility='default' filepath='include/linux/user_namespace.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reverse' type-id='9b105293' visibility='default' filepath='include/linux/user_namespace.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e74568be' size-in-bits='64' id='deb31178'/>
+      <pointer-type-def type-id='f037e1bb' size-in-bits='64' id='a8faf36f'/>
+      <pointer-type-def type-id='3e80a1bc' size-in-bits='64' id='3b2da7a6'/>
+      <typedef-decl name='qsize_t' type-id='1eb56b1e' filepath='include/linux/quota.h' line='66' column='1' id='33341965'/>
+      <pointer-type-def type-id='51edb62f' size-in-bits='64' id='aecbf18b'/>
+      <pointer-type-def type-id='d802bf72' size-in-bits='64' id='e295c77c'/>
+      <pointer-type-def type-id='fec629e3' size-in-bits='64' id='a9b95107'/>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='24' id='930ea9f9'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a9d71093' size-in-bits='480' id='df6d2206'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <union-decl name='__anonymous_union__' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/posix_acl.h' line='21' column='1' id='21c0164a'>
+        <data-member access='private'>
+          <var-decl name='e_uid' type-id='d80b72e6' visibility='default' filepath='include/linux/posix_acl.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='e_gid' type-id='094d8048' visibility='default' filepath='include/linux/posix_acl.h' line='23' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/sysctl.h' line='145' column='1' id='201d54e5'>
+        <data-member access='private'>
+          <var-decl name='' type-id='1acab550' visibility='default' filepath='include/linux/sysctl.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/sysctl.h' line='152' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='a9732c0b' size-in-bits='64' id='b90b068f'/>
+      <pointer-type-def type-id='cbbffc65' size-in-bits='64' id='dbc22931'/>
+      <pointer-type-def type-id='a9cc575c' size-in-bits='64' id='88909596'/>
+      <pointer-type-def type-id='ebcc73dc' size-in-bits='64' id='5f5506f6'/>
+      <pointer-type-def type-id='e9ef9215' size-in-bits='64' id='2f974a69'/>
+      <pointer-type-def type-id='74e7a035' size-in-bits='64' id='6af64a09'/>
+      <pointer-type-def type-id='0cf765ad' size-in-bits='64' id='d8db14d1'/>
+      <pointer-type-def type-id='64604191' size-in-bits='64' id='c95d966d'/>
+      <pointer-type-def type-id='a96e8cde' size-in-bits='64' id='b0ddaf40'/>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='2432' id='9dc2293d'>
+        <subrange length='38' type-id='7ff19f0f' id='aa4ccdac'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='3584' id='37ece551'>
+        <subrange length='56' type-id='7ff19f0f' id='f8137894'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='448' id='76b91d35'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <pointer-type-def type-id='44399e16' size-in-bits='64' id='57c51e1c'/>
+      <enum-decl name='memcg_kmem_state' filepath='include/linux/memcontrol.h' line='170' column='1' id='def0995c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='KMEM_NONE' value='0'/>
+        <enumerator name='KMEM_ALLOCATED' value='1'/>
+        <enumerator name='KMEM_ONLINE' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='e2da4ade' size-in-bits='64' id='d5f76b20'/>
+      <pointer-type-def type-id='3e497762' size-in-bits='64' id='9e5416b4'/>
+      <pointer-type-def type-id='031a4ff0' size-in-bits='64' id='1507ee2a'/>
+      <array-type-def dimensions='1' type-id='f3b4aca8' size-in-bits='infinite' id='c66d33bc'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='97851996' size-in-bits='infinite' id='687d975e'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='aac38d0b' size-in-bits='1280' id='f53c5bdb'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='6aac043b' size-in-bits='64' id='a0d3a64b'/>
+      <array-type-def dimensions='1' type-id='e7d2a5fd' size-in-bits='infinite' id='60a540a8'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='blk_crypto_key' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/blk-crypto.h' line='52' column='1' id='7b61b7b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crypto_cfg' type-id='cdcb89ef' visibility='default' filepath='include/linux/blk-crypto.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data_unit_size_bits' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-crypto.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-crypto.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='raw' type-id='7f475abd' visibility='default' filepath='include/linux/blk-crypto.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_cgroup_storage' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/bpf-cgroup.h' line='42' column='1' id='15881542'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='dad3eb71' visibility='default' filepath='include/linux/bpf-cgroup.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='map' type-id='b6a33eaf' visibility='default' filepath='include/linux/bpf-cgroup.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='key' type-id='d8d7111e' visibility='default' filepath='include/linux/bpf-cgroup.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/bpf-cgroup.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='node' type-id='2a8a6332' visibility='default' filepath='include/linux/bpf-cgroup.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/bpf-cgroup.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_tfm' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='761' column='1' id='0328c8b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crt_flags' type-id='19c2251e' visibility='default' filepath='include/linux/crypto.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crt_u' type-id='1f411b02' visibility='default' filepath='include/linux/crypto.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='exit' type-id='3ba771a1' visibility='default' filepath='include/linux/crypto.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='__crt_alg' type-id='67f526b5' visibility='default' filepath='include/linux/crypto.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__crt_ctx' type-id='baf98fd3' visibility='default' filepath='include/linux/crypto.h' line='776' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ctl_node' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='136' column='1' id='beafd747'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='2a8a6332' visibility='default' filepath='include/linux/sysctl.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='header' type-id='11b101bb' visibility='default' filepath='include/linux/sysctl.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ctl_table' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='123' column='1' id='91a515f9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='procname' type-id='80f4b756' visibility='default' filepath='include/linux/sysctl.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/sysctl.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='maxlen' type-id='95e97e5e' visibility='default' filepath='include/linux/sysctl.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='include/linux/sysctl.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='child' type-id='631dc3c1' visibility='default' filepath='include/linux/sysctl.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='proc_handler' type-id='66032958' visibility='default' filepath='include/linux/sysctl.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='poll' type-id='4dec003b' visibility='default' filepath='include/linux/sysctl.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='extra1' type-id='eaa32e2f' visibility='default' filepath='include/linux/sysctl.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='extra2' type-id='eaa32e2f' visibility='default' filepath='include/linux/sysctl.h' line='133' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ctl_table_root' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='174' column='1' id='d83969a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='default_set' type-id='3fc3d262' visibility='default' filepath='include/linux/sysctl.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='lookup' type-id='50abd760' visibility='default' filepath='include/linux/sysctl.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_ownership' type-id='47727520' visibility='default' filepath='include/linux/sysctl.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='permissions' type-id='7bada959' visibility='default' filepath='include/linux/sysctl.h' line='180' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fs_parameter_description' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs_parser.h' line='64' column='1' id='8a2a988b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='8d43b1f5' visibility='default' filepath='include/linux/fs_parser.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='specs' type-id='8d4f223b' visibility='default' filepath='include/linux/fs_parser.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enums' type-id='6d6531cd' visibility='default' filepath='include/linux/fs_parser.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='list_lru_memcg' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/list_lru.h' line='34' column='1' id='5a3e162b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/list_lru.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lru' type-id='b969bd7a' visibility='default' filepath='include/linux/list_lru.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_id' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='70' column='1' id='18f7b101'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ref' type-id='64615833' visibility='default' filepath='include/linux/memcontrol.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_thresholds' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='159' column='1' id='a38368d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='primary' type-id='4ec56f94' visibility='default' filepath='include/linux/memcontrol.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='spare' type-id='4ec56f94' visibility='default' filepath='include/linux/memcontrol.h' line='167' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_padding' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='177' column='1' id='4f5a0c96'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='e84913bd' visibility='default' filepath='include/linux/memcontrol.h' line='178' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='page_counter' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/page_counter.h' line='9' column='1' id='635c3685'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='f22a8abb' visibility='default' filepath='include/linux/page_counter.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min' type-id='7359adad' visibility='default' filepath='include/linux/page_counter.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='low' type-id='7359adad' visibility='default' filepath='include/linux/page_counter.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max' type-id='7359adad' visibility='default' filepath='include/linux/page_counter.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parent' type-id='ea7fad85' visibility='default' filepath='include/linux/page_counter.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='emin' type-id='7359adad' visibility='default' filepath='include/linux/page_counter.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='min_usage' type-id='f22a8abb' visibility='default' filepath='include/linux/page_counter.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='children_min_usage' type-id='f22a8abb' visibility='default' filepath='include/linux/page_counter.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='elow' type-id='7359adad' visibility='default' filepath='include/linux/page_counter.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='low_usage' type-id='f22a8abb' visibility='default' filepath='include/linux/page_counter.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='children_low_usage' type-id='f22a8abb' visibility='default' filepath='include/linux/page_counter.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='watermark' type-id='7359adad' visibility='default' filepath='include/linux/page_counter.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='failcnt' type-id='7359adad' visibility='default' filepath='include/linux/page_counter.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='quota_format_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='310' column='1' id='87cad984'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='check_quota_file' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read_file_info' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write_file_info' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='free_file_info' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read_dqblk' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='commit_dqblk' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='release_dqblk' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_next_id' type-id='70b08f83' visibility='default' filepath='include/linux/quota.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='321' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='quota_format_type' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='452' column='1' id='c2be49b0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='qf_fmt_id' type-id='95e97e5e' visibility='default' filepath='include/linux/quota.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='qf_ops' type-id='bd561d05' visibility='default' filepath='include/linux/quota.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='qf_owner' type-id='2730d015' visibility='default' filepath='include/linux/quota.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='qf_next' type-id='eb9a3ab6' visibility='default' filepath='include/linux/quota.h' line='456' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uid_gid_extent' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/user_namespace.h' line='18' column='1' id='a9d71093'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='19c2251e' visibility='default' filepath='include/linux/user_namespace.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lower_first' type-id='19c2251e' visibility='default' filepath='include/linux/user_namespace.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='19c2251e' visibility='default' filepath='include/linux/user_namespace.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vmpressure' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/vmpressure.h' line='13' column='1' id='d6294af7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scanned' type-id='7359adad' visibility='default' filepath='include/linux/vmpressure.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reclaimed' type-id='7359adad' visibility='default' filepath='include/linux/vmpressure.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tree_scanned' type-id='7359adad' visibility='default' filepath='include/linux/vmpressure.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tree_reclaimed' type-id='7359adad' visibility='default' filepath='include/linux/vmpressure.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sr_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/vmpressure.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='events' type-id='72f469ec' visibility='default' filepath='include/linux/vmpressure.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='events_lock' type-id='925167dc' visibility='default' filepath='include/linux/vmpressure.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/vmpressure.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wb_domain' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/writeback.h' line='129' column='1' id='960bf1fd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/writeback.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='completions' type-id='7dc82ec2' visibility='default' filepath='include/linux/writeback.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='period_timer' type-id='abe41e67' visibility='default' filepath='include/linux/writeback.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='period_time' type-id='7359adad' visibility='default' filepath='include/linux/writeback.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dirty_limit_tstamp' type-id='7359adad' visibility='default' filepath='include/linux/writeback.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dirty_limit' type-id='7359adad' visibility='default' filepath='include/linux/writeback.h' line='164' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/sysctl.h' line='146' column='1' id='1acab550'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctl_table' type-id='631dc3c1' visibility='default' filepath='include/linux/sysctl.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='used' type-id='95e97e5e' visibility='default' filepath='include/linux/sysctl.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/sysctl.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nreg' type-id='95e97e5e' visibility='default' filepath='include/linux/sysctl.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='916c4095' size-in-bits='64' id='439be051'/>
+      <typedef-decl name='congested_fn' type-id='dd42ab12' filepath='include/linux/backing-dev-defs.h' line='36' column='1' id='6e3695a3'/>
+      <pointer-type-def type-id='a9d71093' size-in-bits='64' id='9b105293'/>
+      <pointer-type-def type-id='0ad68707' size-in-bits='64' id='b6a33eaf'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='infinite' id='e84913bd'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='9b45d938' size-in-bits='128' id='8d43b1f5'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <pointer-type-def type-id='e76b9b35' size-in-bits='64' id='6d6531cd'/>
+      <pointer-type-def type-id='a6f56593' size-in-bits='64' id='8d4f223b'/>
+      <pointer-type-def type-id='d39c42ab' size-in-bits='64' id='4dec003b'/>
+      <pointer-type-def type-id='7552fc26' size-in-bits='64' id='50abd760'/>
+      <pointer-type-def type-id='d99ae68d' size-in-bits='64' id='7bada959'/>
+      <array-type-def dimensions='1' type-id='f6507b0a' size-in-bits='infinite' id='b969bd7a'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='2e6f3990' size-in-bits='64' id='97851996'/>
+      <pointer-type-def type-id='413be38e' size-in-bits='64' id='4ec56f94'/>
+      <pointer-type-def type-id='635c3685' size-in-bits='64' id='ea7fad85'/>
+      <pointer-type-def type-id='8cf4128f' size-in-bits='64' id='66032958'/>
+      <pointer-type-def type-id='caf652c7' size-in-bits='64' id='e7d2a5fd'/>
+      <class-decl name='blk_crypto_config' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/blk-crypto.h' line='33' column='1' id='cdcb89ef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crypto_mode' type-id='e951e732' visibility='default' filepath='include/linux/blk-crypto.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='data_unit_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-crypto.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dun_bytes' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-crypto.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='is_hw_wrapped' type-id='b50a4934' visibility='default' filepath='include/linux/blk-crypto.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_cgroup_storage_key' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='79' column='1' id='d8d7111e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cgroup_inode_id' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='attach_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='em_cap_state' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/energy_model.h' line='20' column='1' id='44399e16'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frequency' type-id='7359adad' visibility='default' filepath='include/linux/energy_model.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='power' type-id='7359adad' visibility='default' filepath='include/linux/energy_model.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cost' type-id='7359adad' visibility='default' filepath='include/linux/energy_model.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fprop_global' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/flex_proportions.h' line='28' column='1' id='7dc82ec2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='events' type-id='b92c8d0d' visibility='default' filepath='include/linux/flex_proportions.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='period' type-id='f0981eeb' visibility='default' filepath='include/linux/flex_proportions.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='sequence' type-id='e14c3b11' visibility='default' filepath='include/linux/flex_proportions.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_cgwb_frn' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='195' column='1' id='aac38d0b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bdi_id' type-id='91ce1af9' visibility='default' filepath='include/linux/memcontrol.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='memcg_id' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='at' type-id='91ce1af9' visibility='default' filepath='include/linux/memcontrol.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='done' type-id='9eb3e00b' visibility='default' filepath='include/linux/memcontrol.h' line='199' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_vmstats_percpu' size-in-bits='6272' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='88' column='1' id='6aac043b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stat' type-id='4f05d88f' visibility='default' filepath='include/linux/memcontrol.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='events' type-id='45f161cc' visibility='default' filepath='include/linux/memcontrol.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='nr_page_events' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='targets' type-id='3461381a' visibility='default' filepath='include/linux/memcontrol.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='1024' id='7f475abd'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <union-decl name='__anonymous_union__' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/crypto.h' line='765' column='1' id='1f411b02'>
+        <data-member access='private'>
+          <var-decl name='ablkcipher' type-id='3bbbf306' visibility='default' filepath='include/linux/crypto.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='blkcipher' type-id='a93bd501' visibility='default' filepath='include/linux/crypto.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='cipher' type-id='015d8760' visibility='default' filepath='include/linux/crypto.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='compress' type-id='2fcb265f' visibility='default' filepath='include/linux/crypto.h' line='769' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/bpf-cgroup.h' line='43' column='1' id='dad3eb71'>
+        <data-member access='private'>
+          <var-decl name='buf' type-id='b1253746' visibility='default' filepath='include/linux/bpf-cgroup.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='percpu_buf' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf-cgroup.h' line='45' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='6d41ed4e' size-in-bits='64' id='47727520'/>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='infinite' id='baf98fd3'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='0ef5c7e0' size-in-bits='64' id='b1253746'/>
+      <qualified-type-def type-id='1a71e14e' const='yes' id='e76b9b35'/>
+      <qualified-type-def type-id='077208d0' const='yes' id='a6f56593'/>
+      <pointer-type-def type-id='ff0d68dc' size-in-bits='64' id='f6507b0a'/>
+      <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='2432' id='4f05d88f'>
+        <subrange length='38' type-id='7ff19f0f' id='aa4ccdac'/>
+      </array-type-def>
+      <class-decl name='ablkcipher_tfm' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='718' column='1' id='3bbbf306'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='214533b0' visibility='default' filepath='include/linux/crypto.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='68e5f4e6' visibility='default' filepath='include/linux/crypto.h' line='721' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='68e5f4e6' visibility='default' filepath='include/linux/crypto.h' line='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='base' type-id='7171de96' visibility='default' filepath='include/linux/crypto.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='reqsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='727' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcipher_tfm' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='730' column='1' id='a93bd501'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iv' type-id='eaa32e2f' visibility='default' filepath='include/linux/crypto.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='setkey' type-id='b201adb8' visibility='default' filepath='include/linux/crypto.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='encrypt' type-id='3347d7ed' visibility='default' filepath='include/linux/crypto.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='decrypt' type-id='3347d7ed' visibility='default' filepath='include/linux/crypto.h' line='736' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_cgroup_storage_map' is-struct='yes' visibility='default' is-declaration-only='yes' id='0ad68707'/>
+      <class-decl name='cipher_tfm' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='740' column='1' id='015d8760'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cit_setkey' type-id='b201adb8' visibility='default' filepath='include/linux/crypto.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cit_encrypt_one' type-id='f76f0ea4' visibility='default' filepath='include/linux/crypto.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cit_decrypt_one' type-id='f76f0ea4' visibility='default' filepath='include/linux/crypto.h' line='744' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='compress_tfm' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='747' column='1' id='2fcb265f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cot_compress' type-id='8801b8af' visibility='default' filepath='include/linux/crypto.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cot_decompress' type-id='8801b8af' visibility='default' filepath='include/linux/crypto.h' line='751' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ctl_table_poll' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='105' column='1' id='d39c42ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event' type-id='49178f86' visibility='default' filepath='include/linux/sysctl.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/sysctl.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_per_node' size-in-bits='6336' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='117' column='1' id='2e6f3990'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lruvec' type-id='9e8c0698' visibility='default' filepath='include/linux/memcontrol.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='lruvec_stat_local' type-id='208b18ef' visibility='default' filepath='include/linux/memcontrol.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='lruvec_stat_cpu' type-id='208b18ef' visibility='default' filepath='include/linux/memcontrol.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='lruvec_stat' type-id='99d12d7b' visibility='default' filepath='include/linux/memcontrol.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='lru_zone_size' type-id='aa6663dd' visibility='default' filepath='include/linux/memcontrol.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='iter' type-id='d1982c82' visibility='default' filepath='include/linux/memcontrol.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='shrinker_map' type-id='09f6e9a4' visibility='default' filepath='include/linux/memcontrol.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='tree_node' type-id='2a8a6332' visibility='default' filepath='include/linux/memcontrol.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='usage_in_excess' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='on_tree' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6216'>
+          <var-decl name='congested' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='memcg' type-id='223696fc' visibility='default' filepath='include/linux/memcontrol.h' line='140' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_threshold_ary' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='150' column='1' id='413be38e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='current_threshold' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/memcontrol.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entries' type-id='31f1649b' visibility='default' filepath='include/linux/memcontrol.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request_queue' size-in-bits='16448' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='400' column='1' id='caf652c7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='last_merge' type-id='3dad1a48' visibility='default' filepath='include/linux/blkdev.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='elevator' type-id='07d0a3e7' visibility='default' filepath='include/linux/blkdev.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='stats' type-id='a0408c5a' visibility='default' filepath='include/linux/blkdev.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rq_qos' type-id='c3a28778' visibility='default' filepath='include/linux/blkdev.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='make_request_fn' type-id='8f01ad5c' visibility='default' filepath='include/linux/blkdev.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dma_drain_needed' type-id='1b19faa1' visibility='default' filepath='include/linux/blkdev.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mq_ops' type-id='e1962c5d' visibility='default' filepath='include/linux/blkdev.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='queue_ctx' type-id='9a335021' visibility='default' filepath='include/linux/blkdev.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='nr_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='queue_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='queue_hw_ctx' type-id='3e195537' visibility='default' filepath='include/linux/blkdev.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='nr_hw_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='backing_dev_info' type-id='ef4fae1c' visibility='default' filepath='include/linux/blkdev.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='queuedata' type-id='eaa32e2f' visibility='default' filepath='include/linux/blkdev.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='queue_flags' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pm_only' type-id='49178f86' visibility='default' filepath='include/linux/blkdev.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bounce_gfp' type-id='3eb7c31c' visibility='default' filepath='include/linux/blkdev.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='queue_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blkdev.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/blkdev.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='mq_kobj' type-id='d30bdc51' visibility='default' filepath='include/linux/blkdev.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/blkdev.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='rpm_status' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='nr_pending' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='nr_requests' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dma_drain_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='dma_drain_buffer' type-id='eaa32e2f' visibility='default' filepath='include/linux/blkdev.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='dma_pad_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='dma_alignment' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='ksm' type-id='bf8a20d2' visibility='default' filepath='include/linux/blkdev.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='rq_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='poll_nsec' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='poll_cb' type-id='1f98c663' visibility='default' filepath='include/linux/blkdev.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='poll_stat' type-id='8574e02e' visibility='default' filepath='include/linux/blkdev.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='timeout' type-id='abe41e67' visibility='default' filepath='include/linux/blkdev.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='timeout_work' type-id='ef9025d0' visibility='default' filepath='include/linux/blkdev.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='icq_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='blkcg_pols' type-id='f066dd3c' visibility='default' filepath='include/linux/blkdev.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='root_blkg' type-id='1146dea3' visibility='default' filepath='include/linux/blkdev.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='blkg_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='limits' type-id='f0966d3d' visibility='default' filepath='include/linux/blkdev.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='required_elevator_features' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9632'>
+          <var-decl name='sg_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='sg_reserved_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9696'>
+          <var-decl name='node' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='fq' type-id='e118aff9' visibility='default' filepath='include/linux/blkdev.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='requeue_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='requeue_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blkdev.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='requeue_work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/blkdev.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='sysfs_lock' type-id='925167dc' visibility='default' filepath='include/linux/blkdev.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='sysfs_dir_lock' type-id='925167dc' visibility='default' filepath='include/linux/blkdev.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='unused_hctx_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='unused_hctx_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blkdev.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11744'>
+          <var-decl name='mq_freeze_depth' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='bsg_dev' type-id='6a3af55b' visibility='default' filepath='include/linux/blkdev.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/blkdev.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='mq_freeze_wq' type-id='b5ab048f' visibility='default' filepath='include/linux/blkdev.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='mq_freeze_lock' type-id='925167dc' visibility='default' filepath='include/linux/blkdev.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12608'>
+          <var-decl name='q_usage_counter' type-id='818799b4' visibility='default' filepath='include/linux/blkdev.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='tag_set' type-id='cc26d15f' visibility='default' filepath='include/linux/blkdev.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='tag_set_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='bio_split' type-id='dfa886b2' visibility='default' filepath='include/linux/blkdev.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15424'>
+          <var-decl name='debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blkdev.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15488'>
+          <var-decl name='sched_debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blkdev.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15552'>
+          <var-decl name='rqos_debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blkdev.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15616'>
+          <var-decl name='mq_sysfs_init_done' type-id='b50a4934' visibility='default' filepath='include/linux/blkdev.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15680'>
+          <var-decl name='cmd_size' type-id='b59d7dce' visibility='default' filepath='include/linux/blkdev.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15744'>
+          <var-decl name='release_work' type-id='ef9025d0' visibility='default' filepath='include/linux/blkdev.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16128'>
+          <var-decl name='write_hints' type-id='64af1365' visibility='default' filepath='include/linux/blkdev.h' line='597' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wb_completion' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='71' column='1' id='9eb3e00b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cnt' type-id='49178f86' visibility='default' filepath='include/linux/backing-dev-defs.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='waitq' type-id='03d48e96' visibility='default' filepath='include/linux/backing-dev-defs.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='proc_handler' type-id='99803d40' filepath='include/linux/sysctl.h' line='47' column='1' id='8cf4128f'/>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='192' id='3461381a'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='3584' id='45f161cc'>
+        <subrange length='56' type-id='7ff19f0f' id='f8137894'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='2048' id='99d12d7b'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <pointer-type-def type-id='1d120221' size-in-bits='64' id='e118aff9'/>
+      <pointer-type-def type-id='13fcfe64' size-in-bits='64' id='bf8a20d2'/>
+      <pointer-type-def type-id='cde99b39' size-in-bits='64' id='9a335021'/>
+      <pointer-type-def type-id='a47d3467' size-in-bits='64' id='3e195537'/>
+      <pointer-type-def type-id='651086d7' size-in-bits='64' id='cc26d15f'/>
+      <pointer-type-def type-id='99d089ec' size-in-bits='64' id='a0408c5a'/>
+      <array-type-def dimensions='1' type-id='a3274c4b' size-in-bits='5120' id='8574e02e'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <pointer-type-def type-id='be8f4983' size-in-bits='64' id='1f98c663'/>
+      <pointer-type-def type-id='9467b853' size-in-bits='64' id='1146dea3'/>
+      <pointer-type-def type-id='c3619065' size-in-bits='64' id='e1962c5d'/>
+      <pointer-type-def type-id='609c0c20' size-in-bits='64' id='7171de96'/>
+      <pointer-type-def type-id='0128515a' size-in-bits='64' id='1b19faa1'/>
+      <pointer-type-def type-id='fc87d78f' size-in-bits='64' id='07d0a3e7'/>
+      <pointer-type-def type-id='f8009817' size-in-bits='64' id='208b18ef'/>
+      <pointer-type-def type-id='99cd4891' size-in-bits='64' id='8f01ad5c'/>
+      <array-type-def dimensions='1' type-id='e0324306' size-in-bits='1664' id='d1982c82'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='ad98c82f' size-in-bits='infinite' id='31f1649b'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='366e0ade' size-in-bits='64' id='09f6e9a4'/>
+      <pointer-type-def type-id='ceee71ca' size-in-bits='64' id='3dad1a48'/>
+      <pointer-type-def type-id='e0a68fea' size-in-bits='64' id='c3a28778'/>
+      <class-decl name='bio_set' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/bio.h' line='708' column='1' id='dfa886b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bio_slab' type-id='f3b4aca8' visibility='default' filepath='include/linux/bio.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='front_pad' type-id='f0981eeb' visibility='default' filepath='include/linux/bio.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bio_pool' type-id='2745fad8' visibility='default' filepath='include/linux/bio.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='bvec_pool' type-id='2745fad8' visibility='default' filepath='include/linux/bio.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='rescue_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/bio.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rescue_list' type-id='096280bf' visibility='default' filepath='include/linux/bio.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rescue_work' type-id='ef9025d0' visibility='default' filepath='include/linux/bio.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='rescue_workqueue' type-id='242e3d19' visibility='default' filepath='include/linux/bio.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/bio.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/bio.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/bio.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/bio.h' line='731' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_storage_buffer' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bpf-cgroup.h' line='37' column='1' id='0ef5c7e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/bpf-cgroup.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='e84913bd' visibility='default' filepath='include/linux/bpf-cgroup.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bsg_class_device' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/bsg.h' line='18' column='1' id='6a3af55b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='class_dev' type-id='fa0b179b' visibility='default' filepath='include/linux/bsg.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/linux/bsg.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='queue' type-id='e7d2a5fd' visibility='default' filepath='include/linux/bsg.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='1a0da7f7' visibility='default' filepath='include/linux/bsg.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fs_parameter_enum' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fs_parser.h' line='58' column='1' id='1a71e14e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='opt' type-id='f9b06939' visibility='default' filepath='include/linux/fs_parser.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='name' type-id='f01a039e' visibility='default' filepath='include/linux/fs_parser.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='value' type-id='f9b06939' visibility='default' filepath='include/linux/fs_parser.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fs_parameter_spec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fs_parser.h' line='47' column='1' id='077208d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/fs_parser.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='opt' type-id='f9b06939' visibility='default' filepath='include/linux/fs_parser.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='type' type-id='ef73e3d4' visibility='default' filepath='include/linux/fs_parser.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/linux/fs_parser.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lruvec' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='302' column='1' id='9e8c0698'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lists' type-id='e4e01aff' visibility='default' filepath='include/linux/mmzone.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='reclaim_stat' type-id='1f1f4d8e' visibility='default' filepath='include/linux/mmzone.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='inactive_age' type-id='f22a8abb' visibility='default' filepath='include/linux/mmzone.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='refaults' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pgdat' type-id='c876a7a5' visibility='default' filepath='include/linux/mmzone.h' line='310' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='queue_limits' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='326' column='1' id='f0966d3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bounce_pfn' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seg_boundary_mask' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='virt_boundary_mask' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_hw_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_dev_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='chunk_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='max_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_segment_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='physical_block_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='logical_block_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='alignment_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_min' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='io_opt' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='max_discard_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='max_hw_discard_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_write_same_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='max_write_zeroes_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='discard_granularity' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='discard_alignment' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='max_segments' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='720'>
+          <var-decl name='max_integrity_segments' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_discard_segments' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='752'>
+          <var-decl name='misaligned' type-id='002ac4a6' visibility='default' filepath='include/linux/blkdev.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='760'>
+          <var-decl name='discard_misaligned' type-id='002ac4a6' visibility='default' filepath='include/linux/blkdev.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='raid_partial_stripes_expensive' type-id='002ac4a6' visibility='default' filepath='include/linux/blkdev.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='zoned' type-id='a48b5528' visibility='default' filepath='include/linux/blkdev.h' line='355' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='2' type-id='7359adad' size-in-bits='960' id='aa6663dd'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <pointer-type-def type-id='e063028f' size-in-bits='64' id='a47d3467'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='112' id='f01a039e'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <qualified-type-def type-id='b785b938' const='yes' id='c3619065'/>
+      <pointer-type-def type-id='e4664ea7' size-in-bits='64' id='1a0da7f7'/>
+      <enum-decl name='blk_zoned_model' filepath='include/linux/blkdev.h' line='320' column='1' id='a48b5528'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BLK_ZONED_NONE' value='0'/>
+        <enumerator name='BLK_ZONED_HA' value='1'/>
+        <enumerator name='BLK_ZONED_HM' value='2'/>
+      </enum-decl>
+      <enum-decl name='fs_parameter_type' filepath='include/linux/fs_parser.h' line='23' column='1' id='ef73e3d4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='__fs_param_wasnt_defined' value='0'/>
+        <enumerator name='fs_param_is_flag' value='1'/>
+        <enumerator name='fs_param_is_bool' value='2'/>
+        <enumerator name='fs_param_is_u32' value='3'/>
+        <enumerator name='fs_param_is_u32_octal' value='4'/>
+        <enumerator name='fs_param_is_u32_hex' value='5'/>
+        <enumerator name='fs_param_is_s32' value='6'/>
+        <enumerator name='fs_param_is_u64' value='7'/>
+        <enumerator name='fs_param_is_enum' value='8'/>
+        <enumerator name='fs_param_is_string' value='9'/>
+        <enumerator name='fs_param_is_blob' value='10'/>
+        <enumerator name='fs_param_is_blockdev' value='11'/>
+        <enumerator name='fs_param_is_path' value='12'/>
+        <enumerator name='fs_param_is_fd' value='13'/>
+        <enumerator name='nr__fs_parameter_type' value='14'/>
+      </enum-decl>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='640' id='e4e01aff'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <pointer-type-def type-id='54406315' size-in-bits='64' id='c876a7a5'/>
+      <class-decl name='bio_list' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bio.h' line='580' column='1' id='096280bf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='fb55efa1' visibility='default' filepath='include/linux/bio.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tail' type-id='fb55efa1' visibility='default' filepath='include/linux/bio.h' line='582' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_flush_queue' is-struct='yes' visibility='default' is-declaration-only='yes' id='1d120221'/>
+      <class-decl name='blk_keyslot_manager' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/keyslot-manager.h' line='52' column='1' id='13fcfe64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ksm_ll_ops' type-id='85385c54' visibility='default' filepath='include/linux/keyslot-manager.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_dun_bytes_supported' type-id='f0981eeb' visibility='default' filepath='include/linux/keyslot-manager.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='features' type-id='f0981eeb' visibility='default' filepath='include/linux/keyslot-manager.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='crypto_modes_supported' type-id='49580a63' visibility='default' filepath='include/linux/keyslot-manager.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/keyslot-manager.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_slots' type-id='f0981eeb' visibility='default' filepath='include/linux/keyslot-manager.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='lock' type-id='f19fdb93' visibility='default' filepath='include/linux/keyslot-manager.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='idle_slots_wait_queue' type-id='b5ab048f' visibility='default' filepath='include/linux/keyslot-manager.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='idle_slots' type-id='72f469ec' visibility='default' filepath='include/linux/keyslot-manager.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='idle_slots_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/keyslot-manager.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='slot_hashtable' type-id='030d0b18' visibility='default' filepath='include/linux/keyslot-manager.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='log_slot_ht_size' type-id='f0981eeb' visibility='default' filepath='include/linux/keyslot-manager.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='slots' type-id='5b559658' visibility='default' filepath='include/linux/keyslot-manager.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_ctx' is-struct='yes' visibility='default' is-declaration-only='yes' id='cde99b39'/>
+      <class-decl name='blk_mq_tag_set' is-struct='yes' visibility='default' is-declaration-only='yes' id='651086d7'/>
+      <class-decl name='blk_queue_stats' is-struct='yes' visibility='default' is-declaration-only='yes' id='99d089ec'/>
+      <class-decl name='blk_rq_stat' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/blk_types.h' line='491' column='1' id='a3274c4b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mean' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_samples' type-id='19c2251e' visibility='default' filepath='include/linux/blk_types.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='batch' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='496' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_stat_callback' size-in-bits='1088' is-struct='yes' visibility='default' filepath='block/blk-stat.h' line='19' column='1' id='be8f4983'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='block/blk-stat.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='block/blk-stat.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cpu_stat' type-id='253d2bfb' visibility='default' filepath='block/blk-stat.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bucket_fn' type-id='484cd9e5' visibility='default' filepath='block/blk-stat.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='buckets' type-id='f0981eeb' visibility='default' filepath='block/blk-stat.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='stat' type-id='253d2bfb' visibility='default' filepath='block/blk-stat.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='timer_fn' type-id='454b8f82' visibility='default' filepath='block/blk-stat.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='block/blk-stat.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='block/blk-stat.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcg_gq' size-in-bits='6208' is-struct='yes' visibility='default' filepath='include/linux/blk-cgroup.h' line='108' column='1' id='9467b853'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q' type-id='e7d2a5fd' visibility='default' filepath='include/linux/blk-cgroup.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='q_node' type-id='72f469ec' visibility='default' filepath='include/linux/blk-cgroup.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='blkcg_node' type-id='03a4a074' visibility='default' filepath='include/linux/blk-cgroup.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='blkcg' type-id='11bff950' visibility='default' filepath='include/linux/blk-cgroup.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='wb_congested' type-id='d97a04ce' visibility='default' filepath='include/linux/blk-cgroup.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parent' type-id='1146dea3' visibility='default' filepath='include/linux/blk-cgroup.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='include/linux/blk-cgroup.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='online' type-id='b50a4934' visibility='default' filepath='include/linux/blk-cgroup.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='stat_bytes' type-id='247d0323' visibility='default' filepath='include/linux/blk-cgroup.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='stat_ios' type-id='247d0323' visibility='default' filepath='include/linux/blk-cgroup.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='pd' type-id='f5665670' visibility='default' filepath='include/linux/blk-cgroup.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='async_bio_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blk-cgroup.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='async_bios' type-id='096280bf' visibility='default' filepath='include/linux/blk-cgroup.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='async_bio_work' type-id='ef9025d0' visibility='default' filepath='include/linux/blk-cgroup.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='use_delay' type-id='49178f86' visibility='default' filepath='include/linux/blk-cgroup.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='delay_nsec' type-id='28ee064c' visibility='default' filepath='include/linux/blk-cgroup.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='delay_start' type-id='28ee064c' visibility='default' filepath='include/linux/blk-cgroup.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='last_delay' type-id='91ce1af9' visibility='default' filepath='include/linux/blk-cgroup.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='last_use' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-cgroup.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/blk-cgroup.h' line='145' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_ablkcipher' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='779' column='1' id='609c0c20'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/linux/crypto.h' line='780' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='elevator_queue' size-in-bits='5312' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='110' column='1' id='fc87d78f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='4a89adae' visibility='default' filepath='include/linux/elevator.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='elevator_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/elevator.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/elevator.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='sysfs_lock' type-id='925167dc' visibility='default' filepath='include/linux/elevator.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='registered' type-id='f0981eeb' visibility='default' filepath='include/linux/elevator.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hash' type-id='53b70d6c' visibility='default' filepath='include/linux/elevator.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lruvec_stat' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='101' column='1' id='f8009817'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='52f6d451' visibility='default' filepath='include/linux/memcontrol.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_reclaim_iter' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='95' column='1' id='e0324306'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='position' type-id='223696fc' visibility='default' filepath='include/linux/memcontrol.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='generation' type-id='f0981eeb' visibility='default' filepath='include/linux/memcontrol.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_threshold' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='144' column='1' id='ad98c82f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='eventfd' type-id='71f2e203' visibility='default' filepath='include/linux/memcontrol.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='threshold' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='146' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_shrinker_map' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='109' column='1' id='366e0ade'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/memcontrol.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='c99b5ecd' visibility='default' filepath='include/linux/memcontrol.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request' size-in-bits='2368' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='133' column='1' id='ceee71ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q' type-id='e7d2a5fd' visibility='default' filepath='include/linux/blkdev.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mq_ctx' type-id='9a335021' visibility='default' filepath='include/linux/blkdev.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mq_hctx' type-id='a47d3467' visibility='default' filepath='include/linux/blkdev.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cmd_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='rq_flags' type-id='3b445e53' visibility='default' filepath='include/linux/blkdev.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tag' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='internal_tag' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='__data_len' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='__sector' type-id='a42536cd' visibility='default' filepath='include/linux/blkdev.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bio' type-id='fb55efa1' visibility='default' filepath='include/linux/blkdev.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='biotail' type-id='fb55efa1' visibility='default' filepath='include/linux/blkdev.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='queuelist' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='' type-id='2f76bc4b' visibility='default' filepath='include/linux/blkdev.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='' type-id='df8866ad' visibility='default' filepath='include/linux/blkdev.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='' type-id='7fc3d482' visibility='default' filepath='include/linux/blkdev.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='rq_disk' type-id='33c599db' visibility='default' filepath='include/linux/blkdev.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='part' type-id='84dc82b8' visibility='default' filepath='include/linux/blkdev.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='start_time_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='io_start_time_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='stats_sectors' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1552'>
+          <var-decl name='nr_phys_segments' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='crypt_ctx' type-id='9d1360ce' visibility='default' filepath='include/linux/blkdev.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='crypt_keyslot' type-id='5b559658' visibility='default' filepath='include/linux/blkdev.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='write_hint' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1744'>
+          <var-decl name='ioprio' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='extra_len' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='state' type-id='4df77f20' visibility='default' filepath='include/linux/blkdev.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='ref' type-id='64615833' visibility='default' filepath='include/linux/blkdev.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='deadline' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='' type-id='097c5bdb' visibility='default' filepath='include/linux/blkdev.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='end_io' type-id='5afdaa66' visibility='default' filepath='include/linux/blkdev.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='end_io_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blkdev.h' line='252' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rq_qos' is-struct='yes' visibility='default' is-declaration-only='yes' id='e0a68fea'/>
+      <class-decl name='zone_reclaim_stat' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='289' column='1' id='1f1f4d8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='recent_rotated' type-id='f05e8e77' visibility='default' filepath='include/linux/mmzone.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='recent_scanned' type-id='f05e8e77' visibility='default' filepath='include/linux/mmzone.h' line='299' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dma_drain_needed_fn' type-id='59bb6212' filepath='include/linux/blkdev.h' line='299' column='1' id='0128515a'/>
+      <typedef-decl name='make_request_fn' type-id='f8561c55' filepath='include/linux/blkdev.h' line='296' column='1' id='99cd4891'/>
+      <typedef-decl name='mempool_t' type-id='5932767e' filepath='include/linux/mempool.h' line='26' column='1' id='2745fad8'/>
+      <pointer-type-def type-id='f3e87129' size-in-bits='64' id='fb55efa1'/>
+      <pointer-type-def type-id='b545ce08' size-in-bits='64' id='9d1360ce'/>
+      <pointer-type-def type-id='479d017a' size-in-bits='64' id='5b559658'/>
+      <pointer-type-def type-id='a3274c4b' size-in-bits='64' id='253d2bfb'/>
+      <pointer-type-def type-id='19b26952' size-in-bits='64' id='11bff950'/>
+      <array-type-def dimensions='1' type-id='3213e875' size-in-bits='320' id='f5665670'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <qualified-type-def type-id='ebd46aa4' const='yes' id='e4664ea7'/>
+      <pointer-type-def type-id='2731de48' size-in-bits='64' id='4a89adae'/>
+      <enum-decl name='mq_rq_state' filepath='include/linux/blkdev.h' line='121' column='1' id='4df77f20'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MQ_RQ_IDLE' value='0'/>
+        <enumerator name='MQ_RQ_IN_FLIGHT' value='1'/>
+        <enumerator name='MQ_RQ_COMPLETE' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='77dc8383' size-in-bits='64' id='71f2e203'/>
+      <pointer-type-def type-id='4f60ffbd' size-in-bits='64' id='33c599db'/>
+      <pointer-type-def type-id='2473bc20' size-in-bits='64' id='84dc82b8'/>
+      <pointer-type-def type-id='e151255a' size-in-bits='64' id='030d0b18'/>
+      <pointer-type-def type-id='03278979' size-in-bits='64' id='484cd9e5'/>
+      <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='2048' id='52f6d451'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <pointer-type-def type-id='537d88b1' size-in-bits='64' id='5afdaa66'/>
+      <class-decl name='blk_ksm_ll_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/keyslot-manager.h' line='39' column='1' id='85385c54'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='keyslot_program' type-id='c1e89b34' visibility='default' filepath='include/linux/keyslot-manager.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='keyslot_evict' type-id='c1e89b34' visibility='default' filepath='include/linux/keyslot-manager.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='derive_raw_secret' type-id='9f82b8fd' visibility='default' filepath='include/linux/keyslot-manager.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_hw_ctx' is-struct='yes' visibility='default' is-declaration-only='yes' id='e063028f'/>
+      <class-decl name='blk_mq_ops' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='146' column='1' id='b785b938'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='queue_rq' type-id='cf544519' visibility='default' filepath='include/linux/blk-mq.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='commit_rqs' type-id='10b13b44' visibility='default' filepath='include/linux/blk-mq.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_budget' type-id='9712eb54' visibility='default' filepath='include/linux/blk-mq.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='put_budget' type-id='247cb56b' visibility='default' filepath='include/linux/blk-mq.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='timeout' type-id='23816d7d' visibility='default' filepath='include/linux/blk-mq.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='poll' type-id='969a6bcd' visibility='default' filepath='include/linux/blk-mq.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='complete' type-id='681aaa17' visibility='default' filepath='include/linux/blk-mq.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='init_hctx' type-id='e1f2504c' visibility='default' filepath='include/linux/blk-mq.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='exit_hctx' type-id='1fb247c2' visibility='default' filepath='include/linux/blk-mq.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='init_request' type-id='57e65d80' visibility='default' filepath='include/linux/blk-mq.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='exit_request' type-id='9a2e43a6' visibility='default' filepath='include/linux/blk-mq.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='initialize_rq_fn' type-id='bbf015cd' visibility='default' filepath='include/linux/blk-mq.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='cleanup_rq' type-id='ac8cd584' visibility='default' filepath='include/linux/blk-mq.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='busy' type-id='65c718a5' visibility='default' filepath='include/linux/blk-mq.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='map_queues' type-id='06a241cf' visibility='default' filepath='include/linux/blk-mq.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='show_rq' type-id='05a372cf' visibility='default' filepath='include/linux/blk-mq.h' line='222' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkg_rwstat' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/blk-cgroup.h' line='68' column='1' id='247d0323'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_cnt' type-id='68a92070' visibility='default' filepath='include/linux/blk-cgroup.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='aux_cnt' type-id='39e531ac' visibility='default' filepath='include/linux/blk-cgroup.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mempool_s' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/mempool.h' line='16' column='1' id='5932767e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mempool.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='min_nr' type-id='95e97e5e' visibility='default' filepath='include/linux/mempool.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='curr_nr' type-id='95e97e5e' visibility='default' filepath='include/linux/mempool.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='elements' type-id='63e171df' visibility='default' filepath='include/linux/mempool.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pool_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mempool.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='alloc' type-id='8bf6d789' visibility='default' filepath='include/linux/mempool.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='free' type-id='a4c19f22' visibility='default' filepath='include/linux/mempool.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/mempool.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pglist_data' size-in-bits='46080' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='711' column='1' id='54406315'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node_zones' type-id='83aedf28' visibility='default' filepath='include/linux/mmzone.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='39936'>
+          <var-decl name='node_zonelists' type-id='9509a9de' visibility='default' filepath='include/linux/mmzone.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40448'>
+          <var-decl name='nr_zones' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40480'>
+          <var-decl name='node_size_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmzone.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40512'>
+          <var-decl name='node_start_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40576'>
+          <var-decl name='node_present_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40640'>
+          <var-decl name='node_spanned_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40704'>
+          <var-decl name='node_id' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40768'>
+          <var-decl name='kswapd_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/mmzone.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40960'>
+          <var-decl name='pfmemalloc_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/mmzone.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41152'>
+          <var-decl name='kswapd' type-id='f23e2572' visibility='default' filepath='include/linux/mmzone.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41216'>
+          <var-decl name='kswapd_order' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41248'>
+          <var-decl name='kswapd_classzone_idx' type-id='d278ff03' visibility='default' filepath='include/linux/mmzone.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41280'>
+          <var-decl name='kswapd_failures' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41312'>
+          <var-decl name='kcompactd_max_order' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41344'>
+          <var-decl name='kcompactd_classzone_idx' type-id='d278ff03' visibility='default' filepath='include/linux/mmzone.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41408'>
+          <var-decl name='kcompactd_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/mmzone.h' line='753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41600'>
+          <var-decl name='kcompactd' type-id='f23e2572' visibility='default' filepath='include/linux/mmzone.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41664'>
+          <var-decl name='totalreserve_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41984'>
+          <var-decl name='_pad1_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41984'>
+          <var-decl name='lru_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmzone.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='42048'>
+          <var-decl name='lruvec' type-id='9e8c0698' visibility='default' filepath='include/linux/mmzone.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43136'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43520'>
+          <var-decl name='_pad2_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43520'>
+          <var-decl name='per_cpu_nodestats' type-id='36700cde' visibility='default' filepath='include/linux/mmzone.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43584'>
+          <var-decl name='vm_stat' type-id='99d12d7b' visibility='default' filepath='include/linux/mmzone.h' line='795' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='req_flags_t' type-id='3f1a6b60' filepath='include/linux/blkdev.h' line='67' column='1' id='3b445e53'/>
+      <typedef-decl name='sector_t' type-id='91ce1af9' filepath='include/linux/types.h' line='130' column='1' id='a42536cd'/>
+      <union-decl name='__anonymous_union__17' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='243' column='1' id='097c5bdb'>
+        <data-member access='private'>
+          <var-decl name='csd' type-id='bb75ea85' visibility='default' filepath='include/linux/blkdev.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fifo_time' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='245' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__12' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='160' column='1' id='2f76bc4b'>
+        <data-member access='private'>
+          <var-decl name='hash' type-id='03a4a074' visibility='default' filepath='include/linux/blkdev.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ipi_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='162' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__13' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='170' column='1' id='df8866ad'>
+        <data-member access='private'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='include/linux/blkdev.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='special_vec' type-id='40af3608' visibility='default' filepath='include/linux/blkdev.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='completion_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blkdev.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='error_count' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='174' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__14' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='183' column='1' id='7fc3d482'>
+        <data-member access='private'>
+          <var-decl name='elv' type-id='6d001302' visibility='default' filepath='include/linux/blkdev.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='flush' type-id='5596717b' visibility='default' filepath='include/linux/blkdev.h' line='193' column='1'/>
+        </data-member>
+      </union-decl>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='128' id='49580a63'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='419202b8' size-in-bits='64' id='454b8f82'/>
+      <array-type-def dimensions='1' type-id='28ee064c' size-in-bits='320' id='39e531ac'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <pointer-type-def type-id='55eaf925' size-in-bits='64' id='3213e875'/>
+      <pointer-type-def type-id='53cc9bd6' size-in-bits='64' id='65c718a5'/>
+      <pointer-type-def type-id='3577ed21' size-in-bits='64' id='ac8cd584'/>
+      <pointer-type-def type-id='ac1c385d' size-in-bits='64' id='10b13b44'/>
+      <pointer-type-def type-id='f7915bc8' size-in-bits='64' id='681aaa17'/>
+      <enum-decl name='zone_type' filepath='include/linux/mmzone.h' line='364' column='1' id='d278ff03'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ZONE_DMA32' value='0'/>
+        <enumerator name='ZONE_NORMAL' value='1'/>
+        <enumerator name='ZONE_MOVABLE' value='2'/>
+        <enumerator name='__MAX_NR_ZONES' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='e6f81ea9' size-in-bits='64' id='1fb247c2'/>
+      <pointer-type-def type-id='d63f4ff3' size-in-bits='64' id='9a2e43a6'/>
+      <pointer-type-def type-id='f47b0345' size-in-bits='64' id='9712eb54'/>
+      <pointer-type-def type-id='76c7c9df' size-in-bits='64' id='e1f2504c'/>
+      <pointer-type-def type-id='4e958389' size-in-bits='64' id='57e65d80'/>
+      <pointer-type-def type-id='24254372' size-in-bits='64' id='c1e89b34'/>
+      <pointer-type-def type-id='bba85209' size-in-bits='64' id='9f82b8fd'/>
+      <pointer-type-def type-id='6e9b911c' size-in-bits='64' id='06a241cf'/>
+      <pointer-type-def type-id='94d117ca' size-in-bits='64' id='8bf6d789'/>
+      <pointer-type-def type-id='27f2e0d9' size-in-bits='64' id='a4c19f22'/>
+      <pointer-type-def type-id='d84ae668' size-in-bits='64' id='36700cde'/>
+      <array-type-def dimensions='1' type-id='b92c8d0d' size-in-bits='1600' id='68a92070'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <pointer-type-def type-id='9a083a6e' size-in-bits='64' id='969a6bcd'/>
+      <pointer-type-def type-id='695ed59c' size-in-bits='64' id='247cb56b'/>
+      <pointer-type-def type-id='aa8737f6' size-in-bits='64' id='cf544519'/>
+      <class-decl name='bio' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/blk_types.h' line='146' column='1' id='f3e87129'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bi_next' type-id='fb55efa1' visibility='default' filepath='include/linux/blk_types.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bi_disk' type-id='33c599db' visibility='default' filepath='include/linux/blk_types.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bi_opf' type-id='f0981eeb' visibility='default' filepath='include/linux/blk_types.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='bi_flags' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='bi_ioprio' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bi_write_hint' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='bi_status' type-id='f4e2facd' visibility='default' filepath='include/linux/blk_types.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='bi_partno' type-id='f9b06939' visibility='default' filepath='include/linux/blk_types.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bi_iter' type-id='9e0198d8' visibility='default' filepath='include/linux/blk_types.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='__bi_remaining' type-id='49178f86' visibility='default' filepath='include/linux/blk_types.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='bi_end_io' type-id='8213bb9f' visibility='default' filepath='include/linux/blk_types.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bi_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/blk_types.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bi_blkg' type-id='1146dea3' visibility='default' filepath='include/linux/blk_types.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='bi_issue' type-id='a9b0f4f1' visibility='default' filepath='include/linux/blk_types.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bi_crypt_context' type-id='9d1360ce' visibility='default' filepath='include/linux/blk_types.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='bi_skip_dm_default_key' type-id='b50a4934' visibility='default' filepath='include/linux/blk_types.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='840'>
+          <var-decl name='' type-id='2a125a28' visibility='default' filepath='include/linux/blk_types.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='848'>
+          <var-decl name='bi_vcnt' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='bi_max_vecs' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='__bi_cnt' type-id='49178f86' visibility='default' filepath='include/linux/blk_types.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bi_io_vec' type-id='cddcb53e' visibility='default' filepath='include/linux/blk_types.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bi_pool' type-id='38b1e3a0' visibility='default' filepath='include/linux/blk_types.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='bi_inline_vecs' type-id='7289e834' visibility='default' filepath='include/linux/blk_types.h' line='214' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bio_crypt_ctx' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/blk-crypto.h' line='71' column='1' id='b545ce08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bc_key' type-id='9baaf905' visibility='default' filepath='include/linux/blk-crypto.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bc_dun' type-id='20b279f0' visibility='default' filepath='include/linux/blk-crypto.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bio_vec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bvec.h' line='18' column='1' id='40af3608'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bv_page' type-id='02f11ed4' visibility='default' filepath='include/linux/bvec.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bv_len' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bv_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_ksm_keyslot' is-struct='yes' visibility='default' is-declaration-only='yes' id='479d017a'/>
+      <class-decl name='blkcg' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/linux/blk-cgroup.h' line='47' column='1' id='19b26952'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='css' type-id='7f3df443' visibility='default' filepath='include/linux/blk-cgroup.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blk-cgroup.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='blkg_tree' type-id='d39738ac' visibility='default' filepath='include/linux/blk-cgroup.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='blkg_hint' type-id='1146dea3' visibility='default' filepath='include/linux/blk-cgroup.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='blkg_list' type-id='e151255a' visibility='default' filepath='include/linux/blk-cgroup.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='cpd' type-id='39e1fe03' visibility='default' filepath='include/linux/blk-cgroup.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='all_blkcgs_node' type-id='72f469ec' visibility='default' filepath='include/linux/blk-cgroup.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='cgwb_list' type-id='72f469ec' visibility='default' filepath='include/linux/blk-cgroup.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='cgwb_refcnt' type-id='64615833' visibility='default' filepath='include/linux/blk-cgroup.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bsg_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/bsg.h' line='10' column='1' id='ebd46aa4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='check_proto' type-id='22aed5fd' visibility='default' filepath='include/linux/bsg.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fill_hdr' type-id='b31b5e29' visibility='default' filepath='include/linux/bsg.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='complete_rq' type-id='f45f2842' visibility='default' filepath='include/linux/bsg.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='free_rq' type-id='bbf015cd' visibility='default' filepath='include/linux/bsg.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='elevator_type' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='72' column='1' id='2731de48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='icq_cache' type-id='f3b4aca8' visibility='default' filepath='include/linux/elevator.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='386fe521' visibility='default' filepath='include/linux/elevator.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='icq_size' type-id='b59d7dce' visibility='default' filepath='include/linux/elevator.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='icq_align' type-id='b59d7dce' visibility='default' filepath='include/linux/elevator.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='elevator_attrs' type-id='177a4437' visibility='default' filepath='include/linux/elevator.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='elevator_name' type-id='80f4b756' visibility='default' filepath='include/linux/elevator.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='elevator_alias' type-id='80f4b756' visibility='default' filepath='include/linux/elevator.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='elevator_features' type-id='20f5f452' visibility='default' filepath='include/linux/elevator.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='elevator_owner' type-id='2730d015' visibility='default' filepath='include/linux/elevator.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='queue_debugfs_attrs' type-id='e649198d' visibility='default' filepath='include/linux/elevator.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='hctx_debugfs_attrs' type-id='e649198d' visibility='default' filepath='include/linux/elevator.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='icq_cache_name' type-id='aa4fa8f1' visibility='default' filepath='include/linux/elevator.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/elevator.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='eventfd_ctx' is-struct='yes' visibility='default' is-declaration-only='yes' id='77dc8383'/>
+      <class-decl name='gendisk' size-in-bits='11136' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='191' column='1' id='4f60ffbd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='major' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='first_minor' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='minors' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='disk_name' type-id='16dc656a' visibility='default' filepath='include/linux/genhd.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='devnode' type-id='b160f6ba' visibility='default' filepath='include/linux/genhd.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='events' type-id='8efea9e5' visibility='default' filepath='include/linux/genhd.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='event_flags' type-id='8efea9e5' visibility='default' filepath='include/linux/genhd.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='part_tbl' type-id='af836b25' visibility='default' filepath='include/linux/genhd.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='part0' type-id='2473bc20' visibility='default' filepath='include/linux/genhd.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='fops' type-id='6829b047' visibility='default' filepath='include/linux/genhd.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='queue' type-id='e7d2a5fd' visibility='default' filepath='include/linux/genhd.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/genhd.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='lookup_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/genhd.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='slave_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/genhd.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='random' type-id='22aa3c54' visibility='default' filepath='include/linux/genhd.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='sync_io' type-id='49178f86' visibility='default' filepath='include/linux/genhd.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='ev' type-id='26f00576' visibility='default' filepath='include/linux/genhd.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='node_id' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='bb' type-id='5760652c' visibility='default' filepath='include/linux/genhd.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='lockdep_map' type-id='d34a605e' visibility='default' filepath='include/linux/genhd.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='235' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hd_struct' size-in-bits='9280' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='109' column='1' id='2473bc20'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_sect' type-id='a42536cd' visibility='default' filepath='include/linux/genhd.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_sects' type-id='a42536cd' visibility='default' filepath='include/linux/genhd.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nr_sects_seq' type-id='e14c3b11' visibility='default' filepath='include/linux/genhd.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='alignment_offset' type-id='a42536cd' visibility='default' filepath='include/linux/genhd.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='discard_alignment' type-id='f0981eeb' visibility='default' filepath='include/linux/genhd.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='__dev' type-id='66e487eb' visibility='default' filepath='include/linux/genhd.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='holder_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/genhd.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='policy' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='partno' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='info' type-id='d4f2b9b2' visibility='default' filepath='include/linux/genhd.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='stamp' type-id='7359adad' visibility='default' filepath='include/linux/genhd.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='dkstats' type-id='70f1634e' visibility='default' filepath='include/linux/genhd.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='ref' type-id='818799b4' visibility='default' filepath='include/linux/genhd.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='rcu_work' type-id='7c0b9fdb' visibility='default' filepath='include/linux/genhd.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='139' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='zone_padding' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='171' column='1' id='6041cd25'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='e84913bd' visibility='default' filepath='include/linux/mmzone.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__11' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='184' column='1' id='6d001302'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='icq' type-id='7c6e0e0c' visibility='default' filepath='include/linux/blkdev.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='24ae0315' visibility='default' filepath='include/linux/blkdev.h' line='186' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__12' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='189' column='1' id='5596717b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seq' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='saved_end_io' type-id='5afdaa66' visibility='default' filepath='include/linux/blkdev.h' line='192' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9509b3ac' size-in-bits='64' id='23816d7d'/>
+      <typedef-decl name='rq_end_io_fn' type-id='06c207bd' filepath='include/linux/blkdev.h' line='63' column='1' id='537d88b1'/>
+      <pointer-type-def type-id='45e743e9' size-in-bits='64' id='bbf015cd'/>
+      <pointer-type-def type-id='96bf0a3b' size-in-bits='64' id='05a372cf'/>
+      <array-type-def dimensions='1' type-id='be9189df' size-in-bits='39936' id='83aedf28'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='459f31a7' size-in-bits='512' id='9509a9de'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <pointer-type-def type-id='cacf0f56' size-in-bits='64' id='5760652c'/>
+      <pointer-type-def type-id='2ec4b2ae' size-in-bits='64' id='8213bb9f'/>
+      <pointer-type-def type-id='dfa886b2' size-in-bits='64' id='38b1e3a0'/>
+      <pointer-type-def type-id='40af3608' size-in-bits='64' id='cddcb53e'/>
+      <array-type-def dimensions='1' type-id='40af3608' size-in-bits='infinite' id='7289e834'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0f8f80b0' size-in-bits='320' id='39e1fe03'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <pointer-type-def type-id='24c24978' size-in-bits='64' id='b160f6ba'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='176' id='aa4fa8f1'>
+        <subrange length='22' type-id='7ff19f0f' id='41cf2209'/>
+      </array-type-def>
+      <pointer-type-def type-id='72b61a2d' size-in-bits='64' id='9baaf905'/>
+      <pointer-type-def type-id='9bf7ec75' size-in-bits='64' id='e649198d'/>
+      <pointer-type-def type-id='425496d7' size-in-bits='64' id='6829b047'/>
+      <pointer-type-def type-id='ec1aac50' size-in-bits='64' id='26f00576'/>
+      <pointer-type-def type-id='a8d380d5' size-in-bits='64' id='af836b25'/>
+      <pointer-type-def type-id='acfd9368' size-in-bits='64' id='70f1634e'/>
+      <pointer-type-def type-id='aaa166ff' size-in-bits='64' id='177a4437'/>
+      <pointer-type-def type-id='a21db860' size-in-bits='64' id='f45f2842'/>
+      <pointer-type-def type-id='4e83077d' size-in-bits='64' id='b31b5e29'/>
+      <pointer-type-def type-id='0f83e831' size-in-bits='64' id='22aed5fd'/>
+      <pointer-type-def type-id='a388c264' size-in-bits='64' id='d4f2b9b2'/>
+      <class-decl name='bio_issue' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/blk_types.h' line='114' column='1' id='a9b0f4f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkg_policy_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/blk-cgroup.h' line='88' column='1' id='55eaf925'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='blkg' type-id='1146dea3' visibility='default' filepath='include/linux/blk-cgroup.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='plid' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-cgroup.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bvec_iter' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/bvec.h' line='24' column='1' id='9e0198d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bi_sector' type-id='a42536cd' visibility='default' filepath='include/linux/bvec.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bi_size' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bi_idx' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bi_bvec_done' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='elevator_mq_ops' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='30' column='1' id='386fe521'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init_sched' type-id='c2889977' visibility='default' filepath='include/linux/elevator.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='exit_sched' type-id='89340c26' visibility='default' filepath='include/linux/elevator.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init_hctx' type-id='a2abb549' visibility='default' filepath='include/linux/elevator.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='exit_hctx' type-id='66288ae4' visibility='default' filepath='include/linux/elevator.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='depth_updated' type-id='a75080c6' visibility='default' filepath='include/linux/elevator.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='allow_merge' type-id='1734c68b' visibility='default' filepath='include/linux/elevator.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bio_merge' type-id='c2644e83' visibility='default' filepath='include/linux/elevator.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='request_merge' type-id='f72cc247' visibility='default' filepath='include/linux/elevator.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='request_merged' type-id='b615a053' visibility='default' filepath='include/linux/elevator.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='requests_merged' type-id='40f624e9' visibility='default' filepath='include/linux/elevator.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='limit_depth' type-id='e46f66f3' visibility='default' filepath='include/linux/elevator.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='prepare_request' type-id='639b44d1' visibility='default' filepath='include/linux/elevator.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='finish_request' type-id='bbf015cd' visibility='default' filepath='include/linux/elevator.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='insert_requests' type-id='60c9df2c' visibility='default' filepath='include/linux/elevator.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dispatch_request' type-id='a66a8231' visibility='default' filepath='include/linux/elevator.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='has_work' type-id='6ca30b05' visibility='default' filepath='include/linux/elevator.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='completed_request' type-id='300d6413' visibility='default' filepath='include/linux/elevator.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='requeue_request' type-id='bbf015cd' visibility='default' filepath='include/linux/elevator.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='former_request' type-id='27bb8677' visibility='default' filepath='include/linux/elevator.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='next_request' type-id='27bb8677' visibility='default' filepath='include/linux/elevator.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='init_icq' type-id='fedb17fd' visibility='default' filepath='include/linux/elevator.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='exit_icq' type-id='fedb17fd' visibility='default' filepath='include/linux/elevator.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lockdep_map' is-struct='yes' visibility='default' filepath='include/linux/lockdep.h' line='472' column='1' id='d34a605e'/>
+      <class-decl name='per_cpu_nodestat' size-in-bits='264' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='357' column='1' id='d84ae668'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stat_threshold' type-id='fdbf7a0f' visibility='default' filepath='include/linux/mmzone.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='vm_node_stat_diff' type-id='c8478d3d' visibility='default' filepath='include/linux/mmzone.h' line='359' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='zone' size-in-bits='13312' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='421' column='1' id='be9189df'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_watermark' type-id='3461381a' visibility='default' filepath='include/linux/mmzone.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='watermark_boost' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nr_reserved_highatomic' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lowmem_reserve' type-id='5d34b9c7' visibility='default' filepath='include/linux/mmzone.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='zone_pgdat' type-id='c876a7a5' visibility='default' filepath='include/linux/mmzone.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pageset' type-id='16cfe92b' visibility='default' filepath='include/linux/mmzone.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cma_alloc' type-id='b50a4934' visibility='default' filepath='include/linux/mmzone.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='zone_start_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='managed_pages' type-id='f22a8abb' visibility='default' filepath='include/linux/mmzone.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='spanned_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='present_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/mmzone.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='nr_isolate_pageblock' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='span_seqlock' type-id='e6cd5ecf' visibility='default' filepath='include/linux/mmzone.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='initialized' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='_pad1_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='free_area' type-id='be1ad65f' visibility='default' filepath='include/linux/mmzone.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmzone.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='_pad2_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='percpu_drift_mark' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='compact_cached_free_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='compact_cached_migrate_pfn' type-id='f05e8e77' visibility='default' filepath='include/linux/mmzone.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='compact_init_migrate_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='compact_init_free_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='compact_considered' type-id='f0981eeb' visibility='default' filepath='include/linux/mmzone.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11680'>
+          <var-decl name='compact_defer_shift' type-id='f0981eeb' visibility='default' filepath='include/linux/mmzone.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='compact_order_failed' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11744'>
+          <var-decl name='compact_blockskip_flush' type-id='b50a4934' visibility='default' filepath='include/linux/mmzone.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11752'>
+          <var-decl name='contiguous' type-id='b50a4934' visibility='default' filepath='include/linux/mmzone.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='_pad3_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='vm_stat' type-id='80b13f9b' visibility='default' filepath='include/linux/mmzone.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='vm_numa_stat' type-id='a922812c' visibility='default' filepath='include/linux/mmzone.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mmzone.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mmzone.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/mmzone.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12864'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/mmzone.h' line='576' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='zonelist' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='685' column='1' id='459f31a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_zonerefs' type-id='c2eeb70e' visibility='default' filepath='include/linux/mmzone.h' line='686' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f308a7ce' size-in-bits='64' id='22aa3c54'/>
+      <typedef-decl name='blk_status_t' type-id='f9b06939' filepath='include/linux/blk_types.h' line='31' column='1' id='f4e2facd'/>
+      <typedef-decl name='busy_fn' type-id='06c81b64' filepath='include/linux/blk-mq.h' line='141' column='1' id='53cc9bd6'/>
+      <typedef-decl name='cleanup_rq_fn' type-id='45e743e9' filepath='include/linux/blk-mq.h' line='143' column='1' id='3577ed21'/>
+      <typedef-decl name='commit_rqs_fn' type-id='4e7ef9a4' filepath='include/linux/blk-mq.h' line='125' column='1' id='ac1c385d'/>
+      <typedef-decl name='complete_fn' type-id='45e743e9' filepath='include/linux/blk-mq.h' line='142' column='1' id='f7915bc8'/>
+      <typedef-decl name='exit_hctx_fn' type-id='4f1e6b9a' filepath='include/linux/blk-mq.h' line='130' column='1' id='e6f81ea9'/>
+      <typedef-decl name='exit_request_fn' type-id='9d05a3e9' filepath='include/linux/blk-mq.h' line='133' column='1' id='d63f4ff3'/>
+      <typedef-decl name='get_budget_fn' type-id='c2be64d1' filepath='include/linux/blk-mq.h' line='126' column='1' id='f47b0345'/>
+      <typedef-decl name='init_hctx_fn' type-id='02e8b0a1' filepath='include/linux/blk-mq.h' line='129' column='1' id='76c7c9df'/>
+      <typedef-decl name='init_request_fn' type-id='722249f6' filepath='include/linux/blk-mq.h' line='131' column='1' id='4e958389'/>
+      <typedef-decl name='map_queues_fn' type-id='640838f9' filepath='include/linux/blk-mq.h' line='140' column='1' id='6e9b911c'/>
+      <typedef-decl name='mempool_alloc_t' type-id='6f7f4c91' filepath='include/linux/mempool.h' line='13' column='1' id='94d117ca'/>
+      <typedef-decl name='mempool_free_t' type-id='c039af2e' filepath='include/linux/mempool.h' line='14' column='1' id='27f2e0d9'/>
+      <typedef-decl name='poll_fn' type-id='8ce1651f' filepath='include/linux/blk-mq.h' line='139' column='1' id='9a083a6e'/>
+      <typedef-decl name='put_budget_fn' type-id='4e7ef9a4' filepath='include/linux/blk-mq.h' line='127' column='1' id='695ed59c'/>
+      <typedef-decl name='queue_rq_fn' type-id='32672900' filepath='include/linux/blk-mq.h' line='123' column='1' id='aa8737f6'/>
+      <typedef-decl name='timeout_fn' type-id='9b58f3d9' filepath='include/linux/blk-mq.h' line='128' column='1' id='9509b3ac'/>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='256' id='20b279f0'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <union-decl name='__anonymous_union__18' is-anonymous='yes' visibility='default' filepath='include/linux/blk_types.h' line='186' column='1' id='2a125a28'/>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='128' id='24ae0315'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='896' id='80b13f9b'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='infinite' id='a922812c'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='11fd1392' size-in-bits='64' id='0f8f80b0'/>
+      <qualified-type-def type-id='7b61b7b4' const='yes' id='72b61a2d'/>
+      <qualified-type-def type-id='d53ee986' const='yes' id='9bf7ec75'/>
+      <qualified-type-def type-id='dbd58b50' const='yes' id='425496d7'/>
+      <array-type-def dimensions='1' type-id='39ec6fe5' size-in-bits='9152' id='be1ad65f'>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <pointer-type-def type-id='203c1d4d' size-in-bits='64' id='a2abb549'/>
+      <pointer-type-def type-id='62855293' size-in-bits='64' id='c2889977'/>
+      <pointer-type-def type-id='081f19f3' size-in-bits='64' id='f72cc247'/>
+      <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='192' id='5d34b9c7'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='23a849db' size-in-bits='64' id='16cfe92b'/>
+      <pointer-type-def type-id='b715cae5' size-in-bits='64' id='a66a8231'/>
+      <pointer-type-def type-id='f111d4f3' size-in-bits='64' id='27bb8677'/>
+      <array-type-def dimensions='1' type-id='fdbf7a0f' size-in-bits='256' id='c8478d3d'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <class-decl name='badblocks' is-struct='yes' visibility='default' is-declaration-only='yes' id='cacf0f56'/>
+      <class-decl name='disk_events' size-in-bits='1792' is-struct='yes' visibility='default' filepath='block/genhd.c' line='1624' column='1' id='ec1aac50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='block/genhd.c' line='1625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='disk' type-id='33c599db' visibility='default' filepath='block/genhd.c' line='1626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='block/genhd.c' line='1627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='block_mutex' type-id='925167dc' visibility='default' filepath='block/genhd.c' line='1629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='block' type-id='95e97e5e' visibility='default' filepath='block/genhd.c' line='1630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='pending' type-id='f0981eeb' visibility='default' filepath='block/genhd.c' line='1631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='clearing' type-id='f0981eeb' visibility='default' filepath='block/genhd.c' line='1632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='poll_msecs' type-id='bd54fe1a' visibility='default' filepath='block/genhd.c' line='1634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dwork' type-id='5ad6e0ef' visibility='default' filepath='block/genhd.c' line='1635' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='disk_part_tbl' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='166' column='1' id='a8d380d5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/genhd.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_lookup' type-id='84dc82b8' visibility='default' filepath='include/linux/genhd.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='part' type-id='f7aeb09b' visibility='default' filepath='include/linux/genhd.h' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='disk_stats' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='87' column='1' id='acfd9368'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nsecs' type-id='20a130cf' visibility='default' filepath='include/linux/genhd.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sectors' type-id='3461381a' visibility='default' filepath='include/linux/genhd.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ios' type-id='3461381a' visibility='default' filepath='include/linux/genhd.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='merges' type-id='3461381a' visibility='default' filepath='include/linux/genhd.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='io_ticks' type-id='7359adad' visibility='default' filepath='include/linux/genhd.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='time_in_queue' type-id='7359adad' visibility='default' filepath='include/linux/genhd.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='in_flight' type-id='efa46f39' visibility='default' filepath='include/linux/genhd.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='elv_fs_entry' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='63' column='1' id='aaa166ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' visibility='default' filepath='include/linux/elevator.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='a2178c8a' visibility='default' filepath='include/linux/elevator.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='1854489e' visibility='default' filepath='include/linux/elevator.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='partition_meta_info' size-in-bits='808' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='104' column='1' id='a388c264'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uuid' type-id='12e4ade3' visibility='default' filepath='include/linux/genhd.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='volname' type-id='47ba3182' visibility='default' filepath='include/linux/genhd.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timer_rand_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='f308a7ce'/>
+      <typedef-decl name='bio_end_io_t' type-id='98617d6e' filepath='include/linux/blk_types.h' line='21' column='1' id='2ec4b2ae'/>
+      <pointer-type-def type-id='c2be64d2' size-in-bits='64' id='6ca30b05'/>
+      <pointer-type-def type-id='da68c5d7' size-in-bits='64' id='c2644e83'/>
+      <pointer-type-def type-id='b911101f' size-in-bits='64' id='1734c68b'/>
+      <pointer-type-def type-id='4e7ef9a5' size-in-bits='64' id='a75080c6'/>
+      <pointer-type-def type-id='607834f2' size-in-bits='64' id='60c9df2c'/>
+      <pointer-type-def type-id='4f1e6b9b' size-in-bits='64' id='66288ae4'/>
+      <pointer-type-def type-id='ff15393c' size-in-bits='64' id='89340c26'/>
+      <pointer-type-def type-id='8eeb5a69' size-in-bits='64' id='fedb17fd'/>
+      <pointer-type-def type-id='90d2ca45' size-in-bits='64' id='639b44d1'/>
+      <pointer-type-def type-id='820ec76f' size-in-bits='64' id='300d6413'/>
+      <pointer-type-def type-id='1ee46c97' size-in-bits='64' id='b615a053'/>
+      <pointer-type-def type-id='2572f485' size-in-bits='64' id='40f624e9'/>
+      <pointer-type-def type-id='07c93537' size-in-bits='64' id='e46f66f3'/>
+      <array-type-def dimensions='1' type-id='caf9c470' size-in-bits='512' id='c2eeb70e'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='296' id='12e4ade3'>
+        <subrange length='37' type-id='7ff19f0f' id='aa6426fb'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='84dc82b8' size-in-bits='infinite' id='f7aeb09b'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='dd91f264' size-in-bits='128' id='efa46f39'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='blk_mq_debugfs_attr' size-in-bits='320' is-struct='yes' visibility='default' filepath='block/blk-mq-debugfs.h' line='9' column='1' id='d53ee986'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='block/blk-mq-debugfs.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='block/blk-mq-debugfs.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='5694e921' visibility='default' filepath='block/blk-mq-debugfs.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write' type-id='9682fd8c' visibility='default' filepath='block/blk-mq-debugfs.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='seq_ops' type-id='943a1b48' visibility='default' filepath='block/blk-mq-debugfs.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcg_policy_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/blk-cgroup.h' line='101' column='1' id='11fd1392'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='blkcg' type-id='11bff950' visibility='default' filepath='include/linux/blk-cgroup.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='plid' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-cgroup.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='block_device_operations' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='1734' column='1' id='dbd58b50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='2207988a' visibility='default' filepath='include/linux/blkdev.h' line='1735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release' type-id='156433b6' visibility='default' filepath='include/linux/blkdev.h' line='1736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rw_page' type-id='55f833ce' visibility='default' filepath='include/linux/blkdev.h' line='1737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ioctl' type-id='6ed32e60' visibility='default' filepath='include/linux/blkdev.h' line='1738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='compat_ioctl' type-id='6ed32e60' visibility='default' filepath='include/linux/blkdev.h' line='1739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='check_events' type-id='4bf65d9d' visibility='default' filepath='include/linux/blkdev.h' line='1740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='media_changed' type-id='f220106e' visibility='default' filepath='include/linux/blkdev.h' line='1743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unlock_native_capacity' type-id='dabeff1b' visibility='default' filepath='include/linux/blkdev.h' line='1744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='revalidate_disk' type-id='f220106e' visibility='default' filepath='include/linux/blkdev.h' line='1745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='getgeo' type-id='68a88aaa' visibility='default' filepath='include/linux/blkdev.h' line='1746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='swap_slot_free_notify' type-id='c4cac78c' visibility='default' filepath='include/linux/blkdev.h' line='1748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='report_zones' type-id='8eee5b07' visibility='default' filepath='include/linux/blkdev.h' line='1749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/blkdev.h' line='1751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pr_ops' type-id='08d45f21' visibility='default' filepath='include/linux/blkdev.h' line='1752' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='free_area' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='101' column='1' id='39ec6fe5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='free_list' type-id='e4e6d6c4' visibility='default' filepath='include/linux/mmzone.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nr_free' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='per_cpu_pageset' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='345' column='1' id='23a849db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pcp' type-id='3572f41a' visibility='default' filepath='include/linux/mmzone.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='stat_threshold' type-id='fdbf7a0f' visibility='default' filepath='include/linux/mmzone.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='648'>
+          <var-decl name='vm_stat_diff' type-id='a2b7d295' visibility='default' filepath='include/linux/mmzone.h' line='353' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='zoneref' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='666' column='1' id='caf9c470'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='zone' type-id='0a0aff97' visibility='default' filepath='include/linux/mmzone.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='zone_idx' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='668' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='30247438' size-in-bits='64' id='a2178c8a'/>
+      <pointer-type-def type-id='54c5fdf4' size-in-bits='64' id='1854489e'/>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='192' id='20a130cf'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='512' id='47ba3182'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <pointer-type-def type-id='8ef65cd1' size-in-bits='64' id='08d45f21'/>
+      <pointer-type-def type-id='b64da4b2' size-in-bits='64' id='943a1b48'/>
+      <pointer-type-def type-id='9e22fc50' size-in-bits='64' id='68a88aaa'/>
+      <pointer-type-def type-id='0afc6f78' size-in-bits='64' id='2207988a'/>
+      <pointer-type-def type-id='806a4586' size-in-bits='64' id='6ed32e60'/>
+      <pointer-type-def type-id='1ee59844' size-in-bits='64' id='55f833ce'/>
+      <pointer-type-def type-id='4ed460e4' size-in-bits='64' id='f220106e'/>
+      <pointer-type-def type-id='603a76bb' size-in-bits='64' id='8eee5b07'/>
+      <pointer-type-def type-id='9bc672dd' size-in-bits='64' id='5694e921'/>
+      <array-type-def dimensions='1' type-id='fdbf7a0f' size-in-bits='112' id='a2b7d295'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <class-decl name='per_cpu_pages' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='336' column='1' id='3572f41a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='high' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='batch' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lists' type-id='a8e1fb22' visibility='default' filepath='include/linux/mmzone.h' line='342' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='local_t' type-id='de878dd6' filepath='include/asm-generic/local.h' line='25' column='1' id='dd91f264'/>
+      <pointer-type-def type-id='9f5a4f22' size-in-bits='64' id='9682fd8c'/>
+      <pointer-type-def type-id='ad4a13f9' size-in-bits='64' id='4bf65d9d'/>
+      <pointer-type-def type-id='5d58e1d2' size-in-bits='64' id='c4cac78c'/>
+      <pointer-type-def type-id='3683b7e7' size-in-bits='64' id='dabeff1b'/>
+      <pointer-type-def type-id='bc51cf2c' size-in-bits='64' id='156433b6'/>
+      <pointer-type-def type-id='be9189df' size-in-bits='64' id='0a0aff97'/>
+      <qualified-type-def type-id='b45c773c' const='yes' id='8ef65cd1'/>
+      <qualified-type-def type-id='c4b04493' const='yes' id='b64da4b2'/>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='512' id='a8e1fb22'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='__anonymous_struct__10' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='dd91f264' visibility='default' filepath='include/asm-generic/local.h' line='22' column='1' id='de878dd6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='a' type-id='f22a8abb' visibility='default' filepath='include/asm-generic/local.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pr_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='b45c773c'/>
+      <class-decl name='seq_operations' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/seq_file.h' line='32' column='1' id='c4b04493'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='a46b05a0' visibility='default' filepath='include/linux/seq_file.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stop' type-id='6ba28d1c' visibility='default' filepath='include/linux/seq_file.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='b6ba26fa' visibility='default' filepath='include/linux/seq_file.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='show' type-id='0131eb61' visibility='default' filepath='include/linux/seq_file.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/crypto/aes-glue.c' language='LANG_C89'>
+      <type-decl name='__ARRAY_SIZE_TYPE__' size-in-bits='64' id='7ff19f0f'/>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='64' id='839e8989'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='96' id='3fa05d14'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='infinite' id='d5016f6f'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='d3130597' size-in-bits='128' id='8a7b7524'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='128' id='9396cabb'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='infinite' id='167619f6'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7e2609cc' size-in-bits='4096' id='98f84070'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='256' id='b6b7435e'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <type-decl name='bool' size-in-bits='8' id='c894953d'/>
+      <array-type-def dimensions='1' type-id='162c1c01' size-in-bits='256' id='68694f49'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='26a90f95' size-in-bits='2048' id='2e646d82'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='26a90f95' size-in-bits='192' id='461c9ed2'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='1024' id='e3204322'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='128' id='ac1fa8c0'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='16384' id='41bf80f3'>
+        <subrange length='2048' type-id='7ff19f0f' id='e5323efb'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='256' id='16dc656a'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='384' id='36d7f119'>
+        <subrange length='48' type-id='7ff19f0f' id='8f6d2a81'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='448' id='6093ff7c'>
+        <subrange length='56' type-id='7ff19f0f' id='f8137894'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='48' id='4a008bc3'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='64' id='8e100159'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='infinite' id='e84913bd'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='anon_vma' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/rmap.h' line='29' column='1' id='14f332cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root' type-id='a8f86cda' visibility='default' filepath='include/linux/rmap.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/rmap.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcount' type-id='49178f86' visibility='default' filepath='include/linux/rmap.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='degree' type-id='f0981eeb' visibility='default' filepath='include/linux/rmap.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='parent' type-id='a8f86cda' visibility='default' filepath='include/linux/rmap.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rb_root' type-id='6fe1603d' visibility='default' filepath='include/linux/rmap.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='assoc_array_ptr' is-struct='yes' visibility='default' is-declaration-only='yes' id='3249e303'/>
+      <class-decl name='audit_context' is-struct='yes' visibility='default' is-declaration-only='yes' id='82d9d5d4'/>
+      <class-decl name='backing_dev_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='c0badb3b'/>
+      <class-decl name='bdi_writeback' is-struct='yes' visibility='default' is-declaration-only='yes' id='ac0aeb1e'/>
+      <class-decl name='bio_list' is-struct='yes' visibility='default' is-declaration-only='yes' id='096280be'/>
+      <class-decl name='blk_plug' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='1171' column='1' id='718a7cd9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mq_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='1172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cb_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='1173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rq_count' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='1174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='multiple_queues' type-id='b50a4934' visibility='default' filepath='include/linux/blkdev.h' line='1175' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='capture_control' is-struct='yes' visibility='default' is-declaration-only='yes' id='978e8e27'/>
+      <class-decl name='cdev' is-struct='yes' visibility='default' is-declaration-only='yes' id='22f86351'/>
+      <class-decl name='cfs_rq' size-in-bits='3072' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='492' column='1' id='feeb4c2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='load' type-id='ad979632' visibility='default' filepath='kernel/sched/sched.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='runnable_weight' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='h_nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='idle_h_nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='exec_clock' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='min_vruntime' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tasks_timeline' type-id='6fe1603d' visibility='default' filepath='kernel/sched/sched.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='curr' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='next' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='last' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='skip' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_spread_over' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='avg' type-id='629c8d83' visibility='default' filepath='kernel/sched/sched.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='removed' type-id='dbb6a82c' visibility='default' filepath='kernel/sched/sched.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='tg_load_avg_contrib' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='propagate' type-id='bd54fe1a' visibility='default' filepath='kernel/sched/sched.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='prop_runnable_sum' type-id='bd54fe1a' visibility='default' filepath='kernel/sched/sched.h' line='539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='h_load' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='last_h_load_update' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='h_load_next' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='rq' type-id='6ed6b432' visibility='default' filepath='kernel/sched/sched.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='on_list' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='leaf_cfs_rq_list' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='tg' type-id='3c32f9de' visibility='default' filepath='kernel/sched/sched.h' line='566' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='e54806c5'/>
+      <class-decl name='compat_robust_list_head' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/compat.h' line='378' column='1' id='1b9c6d35'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='bd51dd4a' visibility='default' filepath='include/linux/compat.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='futex_offset' type-id='abb906de' visibility='default' filepath='include/linux/compat.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list_op_pending' type-id='782d78af' visibility='default' filepath='include/linux/compat.h' line='381' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='css_set' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='190' column='1' id='afbeac63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subsys' type-id='7975e215' visibility='default' filepath='include/linux/cgroup-defs.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='refcount' type-id='64615833' visibility='default' filepath='include/linux/cgroup-defs.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dom_cset' type-id='85d57723' visibility='default' filepath='include/linux/cgroup-defs.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dfl_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='nr_tasks' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tasks' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mg_tasks' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dying_tasks' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='task_iters' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='e_cset_node' type-id='e4e6d6c4' visibility='default' filepath='include/linux/cgroup-defs.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='threaded_csets' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='threaded_csets_node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='hlist' type-id='03a4a074' visibility='default' filepath='include/linux/cgroup-defs.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='cgrp_links' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='mg_preload_node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='mg_node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='mg_src_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='mg_dst_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='mg_dst_cset' type-id='85d57723' visibility='default' filepath='include/linux/cgroup-defs.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='dead' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/cgroup-defs.h' line='276' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='export_operations' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/exportfs.h' line='193' column='1' id='1a0c5572'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='encode_fh' type-id='2cdfbf0a' visibility='default' filepath='include/linux/exportfs.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fh_to_dentry' type-id='9b9ccb86' visibility='default' filepath='include/linux/exportfs.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fh_to_parent' type-id='9b9ccb86' visibility='default' filepath='include/linux/exportfs.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_name' type-id='cb0ca137' visibility='default' filepath='include/linux/exportfs.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_parent' type-id='36ed3b9a' visibility='default' filepath='include/linux/exportfs.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='commit_metadata' type-id='28ba4492' visibility='default' filepath='include/linux/exportfs.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_uuid' type-id='547aa7d2' visibility='default' filepath='include/linux/exportfs.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='map_blocks' type-id='35d085ce' visibility='default' filepath='include/linux/exportfs.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='commit_blocks' type-id='30144f27' visibility='default' filepath='include/linux/exportfs.h' line='209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='files_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='bccdf330'/>
+      <class-decl name='fs_context' is-struct='yes' visibility='default' is-declaration-only='yes' id='8d0295a2'/>
+      <class-decl name='fs_parameter_description' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs_parser.h' line='64' column='1' id='8a2a988b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='8d43b1f5' visibility='default' filepath='include/linux/fs_parser.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='specs' type-id='8d4f223b' visibility='default' filepath='include/linux/fs_parser.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enums' type-id='6d6531cd' visibility='default' filepath='include/linux/fs_parser.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fs_struct' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fs_struct.h' line='9' column='1' id='7dc87302'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='users' type-id='95e97e5e' visibility='default' filepath='include/linux/fs_struct.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs_struct.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seq' type-id='e14c3b11' visibility='default' filepath='include/linux/fs_struct.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='umask' type-id='95e97e5e' visibility='default' filepath='include/linux/fs_struct.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='in_exec' type-id='95e97e5e' visibility='default' filepath='include/linux/fs_struct.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='root' type-id='b5382ece' visibility='default' filepath='include/linux/fs_struct.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pwd' type-id='b5382ece' visibility='default' filepath='include/linux/fs_struct.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fscrypt_info' size-in-bits='1088' is-struct='yes' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='195' column='1' id='9441bb37'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ci_enc_key' type-id='a28355c2' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ci_owns_key' type-id='b50a4934' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='ci_inlinecrypt' type-id='b50a4934' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ci_mode' type-id='65936caa' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ci_inode' type-id='7e666abe' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ci_master_key' type-id='204a4632' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ci_master_key_link' type-id='72f469ec' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ci_direct_key' type-id='8ce270a4' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ci_dirhash_key' type-id='7799da43' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ci_dirhash_key_initialized' type-id='b50a4934' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='712'>
+          <var-decl name='ci_policy' type-id='61227238' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='904'>
+          <var-decl name='ci_nonce' type-id='0d8415b5' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='ci_hashed_ino' type-id='19c2251e' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='254' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fscrypt_operations' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/fscrypt.h' line='58' column='1' id='fa21a7e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fscrypt.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key_prefix' type-id='80f4b756' visibility='default' filepath='include/linux/fscrypt.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_context' type-id='c60354f3' visibility='default' filepath='include/linux/fscrypt.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_context' type-id='ef75df1f' visibility='default' filepath='include/linux/fscrypt.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_dummy_policy' type-id='c0135c9c' visibility='default' filepath='include/linux/fscrypt.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='empty_dir' type-id='deb31178' visibility='default' filepath='include/linux/fscrypt.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='max_namelen' type-id='f0981eeb' visibility='default' filepath='include/linux/fscrypt.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='has_stable_inodes' type-id='3b2da7a6' visibility='default' filepath='include/linux/fscrypt.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_ino_and_lblk_bits' type-id='c95d966d' visibility='default' filepath='include/linux/fscrypt.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_num_devices' type-id='d2f4c704' visibility='default' filepath='include/linux/fscrypt.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_devices' type-id='b0ddaf40' visibility='default' filepath='include/linux/fscrypt.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fsnotify_mark_connector' is-struct='yes' visibility='default' is-declaration-only='yes' id='aadc8ce9'/>
+      <class-decl name='fsverity_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='43489bca'/>
+      <class-decl name='fsverity_operations' is-struct='yes' visibility='default' is-declaration-only='yes' id='5f0d764c'/>
+      <class-decl name='futex_pi_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='62bd013f'/>
+      <class-decl name='gendisk' is-struct='yes' visibility='default' is-declaration-only='yes' id='4f60ffbc'/>
+      <class-decl name='hd_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='2473bc1f'/>
+      <class-decl name='ipc_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='dd74f3ed'/>
+      <class-decl name='kernfs_iattrs' is-struct='yes' visibility='default' is-declaration-only='yes' id='7b5435ce'/>
+      <class-decl name='kernfs_open_node' is-struct='yes' visibility='default' is-declaration-only='yes' id='cc9b8e48'/>
+      <class-decl name='key_type' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/key-type.h' line='63' column='1' id='71e87d49'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/key-type.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='def_datalen' type-id='b59d7dce' visibility='default' filepath='include/linux/key-type.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/key-type.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vet_description' type-id='70487b28' visibility='default' filepath='include/linux/key-type.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='preparse' type-id='320c9cb0' visibility='default' filepath='include/linux/key-type.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='free_preparse' type-id='54d7d559' visibility='default' filepath='include/linux/key-type.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='instantiate' type-id='ab4f7fd7' visibility='default' filepath='include/linux/key-type.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='update' type-id='ab4f7fd7' visibility='default' filepath='include/linux/key-type.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='match_preparse' type-id='0954c675' visibility='default' filepath='include/linux/key-type.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='match_free' type-id='87f6a50e' visibility='default' filepath='include/linux/key-type.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='revoke' type-id='b36896a7' visibility='default' filepath='include/linux/key-type.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='destroy' type-id='b36896a7' visibility='default' filepath='include/linux/key-type.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='describe' type-id='f68ddecc' visibility='default' filepath='include/linux/key-type.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='read' type-id='a9cc7986' visibility='default' filepath='include/linux/key-type.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='request_key' type-id='99147724' visibility='default' filepath='include/linux/key-type.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='lookup_restriction' type-id='7c4a6c91' visibility='default' filepath='include/linux/key-type.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='asym_query' type-id='b6633a3c' visibility='default' filepath='include/linux/key-type.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='asym_eds_op' type-id='824beef7' visibility='default' filepath='include/linux/key-type.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='asym_verify_signature' type-id='824beef7' visibility='default' filepath='include/linux/key-type.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='link' type-id='72f469ec' visibility='default' filepath='include/linux/key-type.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='lock_class' type-id='47479831' visibility='default' filepath='include/linux/key-type.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key_user' size-in-bits='704' is-struct='yes' visibility='default' filepath='security/keys/internal.h' line='53' column='1' id='696d238e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='2a8a6332' visibility='default' filepath='security/keys/internal.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cons_lock' type-id='925167dc' visibility='default' filepath='security/keys/internal.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='security/keys/internal.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='security/keys/internal.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='nkeys' type-id='49178f86' visibility='default' filepath='security/keys/internal.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='nikeys' type-id='49178f86' visibility='default' filepath='security/keys/internal.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='security/keys/internal.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='qnkeys' type-id='95e97e5e' visibility='default' filepath='security/keys/internal.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='qnbytes' type-id='95e97e5e' visibility='default' filepath='security/keys/internal.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kioctx_table' is-struct='yes' visibility='default' is-declaration-only='yes' id='5d0f15d4'/>
+      <class-decl name='kstatfs' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/statfs.h' line='8' column='1' id='ff1c7c9b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='f_type' type-id='bd54fe1a' visibility='default' filepath='include/linux/statfs.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='f_bsize' type-id='bd54fe1a' visibility='default' filepath='include/linux/statfs.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='f_blocks' type-id='91ce1af9' visibility='default' filepath='include/linux/statfs.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='f_bfree' type-id='91ce1af9' visibility='default' filepath='include/linux/statfs.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='f_bavail' type-id='91ce1af9' visibility='default' filepath='include/linux/statfs.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='f_files' type-id='91ce1af9' visibility='default' filepath='include/linux/statfs.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='f_ffree' type-id='91ce1af9' visibility='default' filepath='include/linux/statfs.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='f_fsid' type-id='ac895711' visibility='default' filepath='include/linux/statfs.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='f_namelen' type-id='bd54fe1a' visibility='default' filepath='include/linux/statfs.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='f_frsize' type-id='bd54fe1a' visibility='default' filepath='include/linux/statfs.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='f_flags' type-id='bd54fe1a' visibility='default' filepath='include/linux/statfs.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='f_spare' type-id='5d4602e8' visibility='default' filepath='include/linux/statfs.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='linux_binfmt' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/binfmts.h' line='102' column='1' id='47d6e76e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lh' type-id='72f469ec' visibility='default' filepath='include/linux/binfmts.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/linux/binfmts.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='load_binary' type-id='c5c535b4' visibility='default' filepath='include/linux/binfmts.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='load_shlib' type-id='4da4101d' visibility='default' filepath='include/linux/binfmts.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='core_dump' type-id='be2c124b' visibility='default' filepath='include/linux/binfmts.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='min_coredump' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup' is-struct='yes' visibility='default' is-declaration-only='yes' id='11c8601b'/>
+      <class-decl name='mmu_notifier_mm' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mmu_notifier.h' line='56' column='1' id='770fc578'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='e151255a' visibility='default' filepath='include/linux/mmu_notifier.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmu_notifier.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mnt_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='de031042'/>
+      <class-decl name='module_notes_attrs' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/module.c' line='1656' column='1' id='96b6b914'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dir' type-id='d30bdc51' visibility='default' filepath='kernel/module.c' line='1657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='notes' type-id='f0981eeb' visibility='default' filepath='kernel/module.c' line='1658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attrs' type-id='7cfae8e1' visibility='default' filepath='kernel/module.c' line='1659' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module_param_attrs' is-struct='yes' visibility='default' is-declaration-only='yes' id='9e045430'/>
+      <class-decl name='module_sect_attrs' size-in-bits='384' is-struct='yes' visibility='default' filepath='kernel/module.c' line='1543' column='1' id='b43b0dce'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='grp' type-id='e4af473b' visibility='default' filepath='kernel/module.c' line='1544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nsections' type-id='f0981eeb' visibility='default' filepath='kernel/module.c' line='1545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='attrs' type-id='ae08da59' visibility='default' filepath='kernel/module.c' line='1546' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mtd_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='25dc4075'/>
+      <class-decl name='nameidata' is-struct='yes' visibility='default' is-declaration-only='yes' id='0319fc05'/>
+      <class-decl name='net' is-struct='yes' visibility='default' is-declaration-only='yes' id='bd965180'/>
+      <class-decl name='net_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='5a9929eb'/>
+      <class-decl name='nfs4_lock_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='a558a366'/>
+      <class-decl name='nlm_lockowner' is-struct='yes' visibility='default' is-declaration-only='yes' id='92afe5f3'/>
+      <class-decl name='perf_event' is-struct='yes' visibility='default' is-declaration-only='yes' id='7263c471'/>
+      <class-decl name='perf_event_context' is-struct='yes' visibility='default' is-declaration-only='yes' id='9d67acd5'/>
+      <class-decl name='poll_table_struct' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/poll.h' line='43' column='1' id='415eecf1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_qproc' type-id='650104ba' visibility='default' filepath='include/linux/poll.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_key' type-id='8f254b08' visibility='default' filepath='include/linux/poll.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pollfd' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/asm-generic/poll.h' line='36' column='1' id='b440e872'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fd' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/poll.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='events' type-id='a2185560' visibility='default' filepath='include/uapi/asm-generic/poll.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='revents' type-id='a2185560' visibility='default' filepath='include/uapi/asm-generic/poll.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='posix_acl' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/posix_acl.h' line='27' column='1' id='605b61bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='a_refcount' type-id='64615833' visibility='default' filepath='include/linux/posix_acl.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='a_rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/posix_acl.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='a_count' type-id='f0981eeb' visibility='default' filepath='include/linux/posix_acl.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='a_entries' type-id='a51f6b3c' visibility='default' filepath='include/linux/posix_acl.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='proc_ns_operations' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/proc_ns.h' line='16' column='1' id='2ba71bf0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/proc_ns.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='real_ns_name' type-id='80f4b756' visibility='default' filepath='include/linux/proc_ns.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/linux/proc_ns.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get' type-id='3e644294' visibility='default' filepath='include/linux/proc_ns.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='put' type-id='277e3361' visibility='default' filepath='include/linux/proc_ns.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='install' type-id='d23fe9bd' visibility='default' filepath='include/linux/proc_ns.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='6fa26802' visibility='default' filepath='include/linux/proc_ns.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_parent' type-id='e0677422' visibility='default' filepath='include/linux/proc_ns.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcu_node' is-struct='yes' visibility='default' is-declaration-only='yes' id='67b24a02'/>
+      <class-decl name='reclaim_state' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/swap.h' line='131' column='1' id='b9b792e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reclaimed_slab' type-id='7359adad' visibility='default' filepath='include/linux/swap.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request_queue' is-struct='yes' visibility='default' is-declaration-only='yes' id='caf652c6'/>
+      <class-decl name='robust_list_head' is-struct='yes' visibility='default' is-declaration-only='yes' id='999b38a0'/>
+      <class-decl name='rt_mutex_waiter' is-struct='yes' visibility='default' is-declaration-only='yes' id='afb04a62'/>
+      <class-decl name='rtattr' is-struct='yes' visibility='default' is-declaration-only='yes' id='549dd8f4'/>
+      <class-decl name='sched_class' size-in-bits='1664' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='1719' column='1' id='74191d27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='162b4cce' visibility='default' filepath='kernel/sched/sched.h' line='1720' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='uclamp_enabled' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='1723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='enqueue_task' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dequeue_task' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='yield_task' type-id='d846ae3b' visibility='default' filepath='kernel/sched/sched.h' line='1728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='yield_to_task' type-id='c4b7e554' visibility='default' filepath='kernel/sched/sched.h' line='1729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='check_preempt_curr' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pick_next_task' type-id='2a7b00f2' visibility='default' filepath='kernel/sched/sched.h' line='1744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='put_prev_task' type-id='604374c8' visibility='default' filepath='kernel/sched/sched.h' line='1747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_next_task' type-id='f13b7179' visibility='default' filepath='kernel/sched/sched.h' line='1748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='balance' type-id='5346c726' visibility='default' filepath='kernel/sched/sched.h' line='1751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='select_task_rq' type-id='c3408547' visibility='default' filepath='kernel/sched/sched.h' line='1752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='migrate_task_rq' type-id='9d640202' visibility='default' filepath='kernel/sched/sched.h' line='1753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='task_woken' type-id='604374c8' visibility='default' filepath='kernel/sched/sched.h' line='1755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_cpus_allowed' type-id='54777a92' visibility='default' filepath='kernel/sched/sched.h' line='1757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rq_online' type-id='d846ae3b' visibility='default' filepath='kernel/sched/sched.h' line='1760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='rq_offline' type-id='d846ae3b' visibility='default' filepath='kernel/sched/sched.h' line='1761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='task_tick' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='task_fork' type-id='1c9e19fb' visibility='default' filepath='kernel/sched/sched.h' line='1765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='task_dead' type-id='1c9e19fb' visibility='default' filepath='kernel/sched/sched.h' line='1766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='switched_from' type-id='604374c8' visibility='default' filepath='kernel/sched/sched.h' line='1773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='switched_to' type-id='604374c8' visibility='default' filepath='kernel/sched/sched.h' line='1774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='prio_changed' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='get_rr_interval' type-id='c79c9f4c' visibility='default' filepath='kernel/sched/sched.h' line='1778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='update_curr' type-id='d846ae3b' visibility='default' filepath='kernel/sched/sched.h' line='1781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='task_change_group' type-id='9d640202' visibility='default' filepath='kernel/sched/sched.h' line='1787' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='seccomp_filter' is-struct='yes' visibility='default' is-declaration-only='yes' id='e290c28c'/>
+      <class-decl name='seq_file' is-struct='yes' visibility='default' is-declaration-only='yes' id='f3415517'/>
+      <class-decl name='simd_skcipher_alg' is-struct='yes' visibility='default' is-declaration-only='yes' id='5165995d'/>
+      <class-decl name='sock' is-struct='yes' visibility='default' is-declaration-only='yes' id='a240f41d'/>
+      <class-decl name='static_key_mod' is-struct='yes' visibility='default' is-declaration-only='yes' id='5081ed08'/>
+      <class-decl name='swap_info_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='3eb82749'/>
+      <class-decl name='task_group' size-in-bits='3584' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='355' column='1' id='2d863538'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='css' type-id='7f3df443' visibility='default' filepath='kernel/sched/sched.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='se' type-id='eb11624e' visibility='default' filepath='kernel/sched/sched.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='cfs_rq' type-id='d6e32957' visibility='default' filepath='kernel/sched/sched.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='shares' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='load_avg' type-id='f22a8abb' visibility='default' filepath='kernel/sched/sched.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/sched/sched.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='parent' type-id='3c32f9de' visibility='default' filepath='kernel/sched/sched.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='siblings' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='cfs_bandwidth' type-id='68e4a3af' visibility='default' filepath='kernel/sched/sched.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='uclamp_pct' type-id='0d532ec1' visibility='default' filepath='kernel/sched/sched.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='uclamp_req' type-id='c6e3c250' visibility='default' filepath='kernel/sched/sched.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='uclamp' type-id='c6e3c250' visibility='default' filepath='kernel/sched/sched.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='latency_sensitive' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='403' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='taskstats' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/uapi/linux/taskstats.h' line='41' column='1' id='3a97b64f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='d315442e' visibility='default' filepath='include/uapi/linux/taskstats.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ac_exitcode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/taskstats.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ac_flag' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/taskstats.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='ac_nice' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/taskstats.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpu_count' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cpu_delay_total' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='blkio_count' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='blkio_delay_total' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='swapin_count' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='swapin_delay_total' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cpu_run_real_total' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cpu_run_virtual_total' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ac_comm' type-id='16dc656a' visibility='default' filepath='include/uapi/linux/taskstats.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ac_sched' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/taskstats.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='904'>
+          <var-decl name='ac_pad' type-id='c216126b' visibility='default' filepath='include/uapi/linux/taskstats.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ac_uid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/taskstats.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='ac_gid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/taskstats.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ac_pid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/taskstats.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='ac_ppid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/taskstats.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='ac_btime' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/taskstats.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ac_etime' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ac_utime' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ac_stime' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ac_minflt' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='ac_majflt' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='coremem' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='virtmem' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='hiwater_rss' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='hiwater_vm' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='read_char' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='write_char' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='read_syscalls' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='write_syscalls' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='read_bytes' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='write_bytes' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='cancelled_write_bytes' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='nvcsw' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='nivcsw' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='ac_utimescaled' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ac_stimescaled' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='cpu_scaled_run_real_total' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='freepages_count' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='freepages_delay_total' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='thrashing_count' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='thrashing_delay_total' type-id='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_eval_map' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/tracepoint.h' line='27' column='1' id='49b910cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='system' type-id='80f4b756' visibility='default' filepath='include/linux/tracepoint.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='eval_string' type-id='80f4b756' visibility='default' filepath='include/linux/tracepoint.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='eval_value' type-id='7359adad' visibility='default' filepath='include/linux/tracepoint.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_event_call' is-struct='yes' visibility='default' is-declaration-only='yes' id='fd48a6e6'/>
+      <class-decl name='tty_audit_buf' is-struct='yes' visibility='default' is-declaration-only='yes' id='9127cd0e'/>
+      <class-decl name='tty_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='4c8d9cac'/>
+      <class-decl name='ucounts' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/user_namespace.h' line='95' column='1' id='fdf3707c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='03a4a074' visibility='default' filepath='include/linux/user_namespace.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ns' type-id='c0ced321' visibility='default' filepath='include/linux/user_namespace.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/user_namespace.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/user_namespace.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ucount' type-id='32e5d672' visibility='default' filepath='include/linux/user_namespace.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='unicode_map' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/unicode.h' line='8' column='1' id='a24978a1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='charset' type-id='80f4b756' visibility='default' filepath='include/linux/unicode.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='version' type-id='95e97e5e' visibility='default' filepath='include/linux/unicode.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uprobe' size-in-bits='1856' is-struct='yes' visibility='default' filepath='kernel/events/uprobes.c' line='55' column='1' id='b7e0fed2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='kernel/events/uprobes.c' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ref' type-id='64615833' visibility='default' filepath='kernel/events/uprobes.c' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='register_rwsem' type-id='f19fdb93' visibility='default' filepath='kernel/events/uprobes.c' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='consumer_rwsem' type-id='f19fdb93' visibility='default' filepath='kernel/events/uprobes.c' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pending_list' type-id='72f469ec' visibility='default' filepath='kernel/events/uprobes.c' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='consumers' type-id='af0533e7' visibility='default' filepath='kernel/events/uprobes.c' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='inode' type-id='7e666abe' visibility='default' filepath='kernel/events/uprobes.c' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='offset' type-id='69bf7bee' visibility='default' filepath='kernel/events/uprobes.c' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ref_ctr_offset' type-id='69bf7bee' visibility='default' filepath='kernel/events/uprobes.c' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='kernel/events/uprobes.c' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='arch' type-id='0b6ba789' visibility='default' filepath='kernel/events/uprobes.c' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='user_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='8c178e22'/>
+      <class-decl name='uts_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='44f52e9d'/>
+      <class-decl name='vfsmount' is-struct='yes' visibility='default' is-declaration-only='yes' id='19e88834'/>
+      <class-decl name='workqueue_struct' size-in-bits='2560' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='242' column='1' id='a5159c01'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pwqs' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='kernel/workqueue.c' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='work_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='flush_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='nr_pwqs_to_flush' type-id='49178f86' visibility='default' filepath='kernel/workqueue.c' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='first_flusher' type-id='ec037527' visibility='default' filepath='kernel/workqueue.c' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='flusher_queue' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='flusher_overflow' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='maydays' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rescuer' type-id='50a159c7' visibility='default' filepath='kernel/workqueue.c' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nr_drainers' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='saved_max_active' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='unbound_attrs' type-id='cfd15e7e' visibility='default' filepath='kernel/workqueue.c' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='dfl_pwq' type-id='a7a31b92' visibility='default' filepath='kernel/workqueue.c' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='wq_dev' type-id='5cebc26e' visibility='default' filepath='kernel/workqueue.c' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='name' type-id='6653bb13' visibility='default' filepath='kernel/workqueue.c' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/workqueue.c' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='kernel/workqueue.c' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='cpu_pwqs' type-id='a7a31b92' visibility='default' filepath='kernel/workqueue.c' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='numa_pwq_tbl' type-id='55b5dc02' visibility='default' filepath='kernel/workqueue.c' line='283' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='writeback_control' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/writeback.h' line='51' column='1' id='705711f5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_to_write' type-id='bd54fe1a' visibility='default' filepath='include/linux/writeback.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pages_skipped' type-id='bd54fe1a' visibility='default' filepath='include/linux/writeback.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='range_start' type-id='69bf7bee' visibility='default' filepath='include/linux/writeback.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='range_end' type-id='69bf7bee' visibility='default' filepath='include/linux/writeback.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sync_mode' type-id='cf92d981' visibility='default' filepath='include/linux/writeback.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='for_kupdate' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='for_background' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='tagged_writepages' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='for_reclaim' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='range_cyclic' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='for_sync' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='no_cgroup_owner' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='punt_to_cgroup' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wb' type-id='f885ca7d' visibility='default' filepath='include/linux/writeback.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='inode' type-id='7e666abe' visibility='default' filepath='include/linux/writeback.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='wb_id' type-id='95e97e5e' visibility='default' filepath='include/linux/writeback.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='wb_lcand_id' type-id='95e97e5e' visibility='default' filepath='include/linux/writeback.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wb_tcand_id' type-id='95e97e5e' visibility='default' filepath='include/linux/writeback.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wb_bytes' type-id='b59d7dce' visibility='default' filepath='include/linux/writeback.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='wb_lcand_bytes' type-id='b59d7dce' visibility='default' filepath='include/linux/writeback.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='wb_tcand_bytes' type-id='b59d7dce' visibility='default' filepath='include/linux/writeback.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xattr_handler' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/xattr.h' line='28' column='1' id='2d3dd5e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/xattr.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prefix' type-id='80f4b756' visibility='default' filepath='include/linux/xattr.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/xattr.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='439be051' visibility='default' filepath='include/linux/xattr.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get' type-id='d5f76b20' visibility='default' filepath='include/linux/xattr.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set' type-id='d5f76b20' visibility='default' filepath='include/linux/xattr.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xol_area' is-struct='yes' visibility='default' is-declaration-only='yes' id='c39df2b8'/>
+      <array-type-def dimensions='1' type-id='bd561d05' size-in-bits='192' id='59bd9302'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='47841236' size-in-bits='256' id='bb2d0d4e'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='256' id='fc3a8480'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='03a4a074' size-in-bits='512' id='3f6e320a'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='1851ab9f' size-in-bits='4096' id='cb01bf4b'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7e666abe' size-in-bits='192' id='e6ff92fb'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='128' id='2020bac4'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a21c4412' size-in-bits='16384' id='02d77f24'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='094d8048' size-in-bits='infinite' id='da6e2919'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f6507b0a' size-in-bits='infinite' id='b969bd7a'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='47479831' id='9c02e2a6'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <type-decl name='long int' size-in-bits='64' id='bd54fe1a'/>
+      <type-decl name='long long int' size-in-bits='64' id='1eb56b1e'/>
+      <type-decl name='long long unsigned int' size-in-bits='64' id='3a47d82b'/>
+      <array-type-def dimensions='1' type-id='b0690d78' size-in-bits='1728' id='83ae09a1'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='ce848ab1' size-in-bits='2880' id='a09ef5a6'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='2bf16f59' size-in-bits='1024' id='18b1b6ec'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b9419dc5' size-in-bits='128' id='c7e7059f'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b94e5398' size-in-bits='256' id='3449295e'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e710f78e' size-in-bits='576' id='0e685653'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e878d564' size-in-bits='1344' id='55d1e02d'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='2a8a6332' size-in-bits='384' id='d46544fa'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='60dcbf6c' size-in-bits='2048' id='80f344e1'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <type-decl name='short int' size-in-bits='16' id='a2185560'/>
+      <type-decl name='signed char' size-in-bits='8' id='28577a57'/>
+      <array-type-def dimensions='1' type-id='8dee6d89' size-in-bits='192' id='2f7565c6'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='56798c81' size-in-bits='2304' id='01115b96'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='1920' id='08b4ad9f'>
+        <subrange length='60' type-id='7ff19f0f' id='b114e3c3'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='128' id='24a375b2'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='8' id='cf08f83f'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='24' id='930ea9f9'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0888126c' size-in-bits='64' id='c6e3c250'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <type-decl name='unnamed-enum-underlying-type-32' is-anonymous='yes' size-in-bits='32' alignment-in-bits='32' id='9cac1fee'/>
+      <type-decl name='unsigned __int128' size-in-bits='128' id='4f340252'/>
+      <type-decl name='unsigned char' size-in-bits='8' id='002ac4a6'/>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='256' id='fc872715'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='64' id='f066dd3c'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='128' id='f05e8e77'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='2944' id='d964a553'>
+        <subrange length='46' type-id='7ff19f0f' id='8b86bc1b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='256' id='f46d9f4d'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='infinite' id='c99b5ecd'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <type-decl name='unsigned short int' size-in-bits='16' id='8efea9e5'/>
+      <array-type-def dimensions='1' type-id='120c01b5' size-in-bits='128' id='9a69aeec'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='2ae08426' size-in-bits='256' id='ae25b7bc'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='256' id='209ef23f'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='infinite' id='baf98fd3'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='skcipher_alg' size-in-bits='5120' is-struct='yes' visibility='default' filepath='include/crypto/skcipher.h' line='111' column='1' id='dd37d315'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='9e5416b4' visibility='default' filepath='include/crypto/skcipher.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='1507ee2a' visibility='default' filepath='include/crypto/skcipher.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='1507ee2a' visibility='default' filepath='include/crypto/skcipher.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='init' type-id='b298c88e' visibility='default' filepath='include/crypto/skcipher.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='exit' type-id='7997266f' visibility='default' filepath='include/crypto/skcipher.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='min_keysize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='max_keysize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='chunksize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='walksize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='514fe525' visibility='default' filepath='include/crypto/skcipher.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_skcipher' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/crypto/skcipher.h' line='37' column='1' id='d80b6ab0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='9e5416b4' visibility='default' filepath='include/crypto/skcipher.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='1507ee2a' visibility='default' filepath='include/crypto/skcipher.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='1507ee2a' visibility='default' filepath='include/crypto/skcipher.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='reqsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='keysize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/crypto/skcipher.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='skcipher_request' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/crypto/skcipher.h' line='24' column='1' id='8838d802'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cryptlen' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iv' type-id='8bff8096' visibility='default' filepath='include/crypto/skcipher.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='src' type-id='bf3ef905' visibility='default' filepath='include/crypto/skcipher.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dst' type-id='bf3ef905' visibility='default' filepath='include/crypto/skcipher.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='base' type-id='5e6083f1' visibility='default' filepath='include/crypto/skcipher.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__ctx' type-id='baf98fd3' visibility='default' filepath='include/crypto/skcipher.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='u8' type-id='8f048e17' filepath='include/asm-generic/int-ll64.h' line='17' column='1' id='f9b06939'/>
+      <typedef-decl name='__u8' type-id='002ac4a6' filepath='include/uapi/asm-generic/int-ll64.h' line='21' column='1' id='8f048e17'/>
+      <class-decl name='scatterlist' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/scatterlist.h' line='11' column='1' id='663acc25'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page_link' type-id='7359adad' visibility='default' filepath='include/linux/scatterlist.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='length' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dma_address' type-id='cf29c9b3' visibility='default' filepath='include/linux/scatterlist.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dma_length' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dma_addr_t' type-id='91ce1af9' filepath='include/linux/types.h' line='148' column='1' id='cf29c9b3'/>
+      <typedef-decl name='u64' type-id='d3130597' filepath='include/asm-generic/int-ll64.h' line='23' column='1' id='91ce1af9'/>
+      <typedef-decl name='__u64' type-id='3a47d82b' filepath='include/uapi/asm-generic/int-ll64.h' line='31' column='1' id='d3130597'/>
+      <class-decl name='crypto_async_request' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='157' column='1' id='5e6083f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/crypto.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='complete' type-id='2cfb2e6f' visibility='default' filepath='include/linux/crypto.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/crypto.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tfm' type-id='dfeb7f6c' visibility='default' filepath='include/linux/crypto.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/crypto.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='list_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/types.h' line='181' column='1' id='72f469ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='e84b031a' visibility='default' filepath='include/linux/types.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prev' type-id='e84b031a' visibility='default' filepath='include/linux/types.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='crypto_completion_t' type-id='60d662f3' filepath='include/linux/crypto.h' line='148' column='1' id='2cfb2e6f'/>
+      <class-decl name='crypto_tfm' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='761' column='1' id='0328c8b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crt_flags' type-id='19c2251e' visibility='default' filepath='include/linux/crypto.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crt_u' type-id='1f411b02' visibility='default' filepath='include/linux/crypto.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='exit' type-id='3ba771a1' visibility='default' filepath='include/linux/crypto.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='__crt_alg' type-id='67f526b5' visibility='default' filepath='include/linux/crypto.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__crt_ctx' type-id='baf98fd3' visibility='default' filepath='include/linux/crypto.h' line='776' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='u32' type-id='3f1a6b60' filepath='include/asm-generic/int-ll64.h' line='21' column='1' id='19c2251e'/>
+      <typedef-decl name='__u32' type-id='f0981eeb' filepath='include/uapi/asm-generic/int-ll64.h' line='27' column='1' id='3f1a6b60'/>
+      <union-decl name='__anonymous_union__' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/crypto.h' line='765' column='1' id='1f411b02'>
+        <data-member access='private'>
+          <var-decl name='ablkcipher' type-id='3bbbf306' visibility='default' filepath='include/linux/crypto.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='blkcipher' type-id='a93bd501' visibility='default' filepath='include/linux/crypto.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='cipher' type-id='015d8760' visibility='default' filepath='include/linux/crypto.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='compress' type-id='2fcb265f' visibility='default' filepath='include/linux/crypto.h' line='769' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='ablkcipher_tfm' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='718' column='1' id='3bbbf306'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='214533b0' visibility='default' filepath='include/linux/crypto.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='68e5f4e6' visibility='default' filepath='include/linux/crypto.h' line='721' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='68e5f4e6' visibility='default' filepath='include/linux/crypto.h' line='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='base' type-id='7171de96' visibility='default' filepath='include/linux/crypto.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='reqsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='727' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_ablkcipher' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='779' column='1' id='609c0c20'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/linux/crypto.h' line='780' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ablkcipher_request' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='166' column='1' id='d0793682'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='5e6083f1' visibility='default' filepath='include/linux/crypto.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nbytes' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='info' type-id='eaa32e2f' visibility='default' filepath='include/linux/crypto.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='src' type-id='bf3ef905' visibility='default' filepath='include/linux/crypto.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dst' type-id='bf3ef905' visibility='default' filepath='include/linux/crypto.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__ctx' type-id='baf98fd3' visibility='default' filepath='include/linux/crypto.h' line='176' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='key_payload' size-in-bits='256' visibility='default' filepath='include/linux/key.h' line='111' column='1' id='2888d74a'>
+        <data-member access='private'>
+          <var-decl name='rcu_data0' type-id='eaa32e2f' visibility='default' filepath='include/linux/key.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='data' type-id='209ef23f' visibility='default' filepath='include/linux/key.h' line='113' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='blkcipher_tfm' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='730' column='1' id='a93bd501'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iv' type-id='eaa32e2f' visibility='default' filepath='include/linux/crypto.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='setkey' type-id='b201adb8' visibility='default' filepath='include/linux/crypto.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='encrypt' type-id='3347d7ed' visibility='default' filepath='include/linux/crypto.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='decrypt' type-id='3347d7ed' visibility='default' filepath='include/linux/crypto.h' line='736' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcipher_desc' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='179' column='1' id='101fbff9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tfm' type-id='ffbca087' visibility='default' filepath='include/linux/crypto.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='info' type-id='eaa32e2f' visibility='default' filepath='include/linux/crypto.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/crypto.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_blkcipher' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='783' column='1' id='3cc0f7af'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/linux/crypto.h' line='784' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cipher_tfm' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='740' column='1' id='015d8760'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cit_setkey' type-id='b201adb8' visibility='default' filepath='include/linux/crypto.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cit_encrypt_one' type-id='f76f0ea4' visibility='default' filepath='include/linux/crypto.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cit_decrypt_one' type-id='f76f0ea4' visibility='default' filepath='include/linux/crypto.h' line='744' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='compress_tfm' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='747' column='1' id='2fcb265f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cot_compress' type-id='8801b8af' visibility='default' filepath='include/linux/crypto.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cot_decompress' type-id='8801b8af' visibility='default' filepath='include/linux/crypto.h' line='751' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_alg' size-in-bits='4096' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='550' column='1' id='514fe525'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cra_list' type-id='72f469ec' visibility='default' filepath='include/linux/crypto.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cra_users' type-id='72f469ec' visibility='default' filepath='include/linux/crypto.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cra_flags' type-id='19c2251e' visibility='default' filepath='include/linux/crypto.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='cra_blocksize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cra_ctxsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='cra_alignmask' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cra_priority' type-id='95e97e5e' visibility='default' filepath='include/linux/crypto.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='cra_refcnt' type-id='64615833' visibility='default' filepath='include/linux/crypto.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cra_name' type-id='e3204322' visibility='default' filepath='include/linux/crypto.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='cra_driver_name' type-id='e3204322' visibility='default' filepath='include/linux/crypto.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='cra_type' type-id='71dc7604' visibility='default' filepath='include/linux/crypto.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='cra_u' type-id='89e73658' visibility='default' filepath='include/linux/crypto.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='cra_init' type-id='469599ea' visibility='default' filepath='include/linux/crypto.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='cra_exit' type-id='3ba771a1' visibility='default' filepath='include/linux/crypto.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='cra_destroy' type-id='33e7622c' visibility='default' filepath='include/linux/crypto.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='cra_module' type-id='2730d015' visibility='default' filepath='include/linux/crypto.h' line='578' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='refcount_t' type-id='637cfeaf' filepath='include/linux/refcount.h' line='21' column='1' id='64615833'/>
+      <union-decl name='rcu_special' size-in-bits='32' visibility='default' filepath='include/linux/sched.h' line='615' column='1' id='a324790e'>
+        <data-member access='private'>
+          <var-decl name='b' type-id='4edee319' visibility='default' filepath='include/linux/sched.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='s' type-id='19c2251e' visibility='default' filepath='include/linux/sched.h' line='622' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='refcount_struct' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/refcount.h' line='19' column='1' id='637cfeaf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refs' type-id='49178f86' visibility='default' filepath='include/linux/refcount.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='atomic_t' type-id='79faeff3' filepath='include/linux/types.h' line='173' column='1' id='49178f86'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='49178f86' visibility='default' filepath='include/linux/types.h' line='171' column='1' id='79faeff3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='counter' type-id='95e97e5e' visibility='default' filepath='include/linux/types.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_type' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/crypto/algapi.h' line='31' column='1' id='caca298d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctxsize' type-id='a506a456' visibility='default' filepath='include/crypto/algapi.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='extsize' type-id='f77c2568' visibility='default' filepath='include/crypto/algapi.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='d066db18' visibility='default' filepath='include/crypto/algapi.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='init_tfm' type-id='469599ea' visibility='default' filepath='include/crypto/algapi.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='show' type-id='2c17fd2e' visibility='default' filepath='include/crypto/algapi.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='report' type-id='2108b777' visibility='default' filepath='include/crypto/algapi.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='free' type-id='3aa8795d' visibility='default' filepath='include/crypto/algapi.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='maskclear' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='maskset' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='tfmsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sk_buff' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/skbuff.h' line='688' column='1' id='ae8bfcdd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='da6f1b1a' visibility='default' filepath='include/linux/skbuff.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='a6d66544' visibility='default' filepath='include/linux/skbuff.h' line='708' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='b24a5a7e' visibility='default' filepath='include/linux/skbuff.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cb' type-id='36d7f119' visibility='default' filepath='include/linux/skbuff.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='' type-id='271a40b8' visibility='default' filepath='include/linux/skbuff.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='_nfct' type-id='7359adad' visibility='default' filepath='include/linux/skbuff.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/linux/skbuff.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='data_len' type-id='f0981eeb' visibility='default' filepath='include/linux/skbuff.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mac_len' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='hdr_len' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='queue_mapping' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='__cloned_offset' type-id='167619f6' visibility='default' filepath='include/linux/skbuff.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='cloned' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='nohdr' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='fclone' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='peeked' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='head_frag' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='pfmemalloc' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1016'>
+          <var-decl name='active_extensions' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='headers_start' type-id='d5016f6f' visibility='default' filepath='include/linux/skbuff.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__pkt_type_offset' type-id='167619f6' visibility='default' filepath='include/linux/skbuff.h' line='779' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='pkt_type' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='ignore_df' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='nf_trace' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='ip_summed' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ooo_okay' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='l4_hash' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='sw_hash' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='wifi_acked_valid' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='wifi_acked' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='no_fcs' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='encapsulation' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='792' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='encap_hdr_csum' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1032'>
+          <var-decl name='csum_valid' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='__pkt_vlan_present_offset' type-id='167619f6' visibility='default' filepath='include/linux/skbuff.h' line='802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='vlan_present' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='csum_complete_sw' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='csum_level' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='csum_not_inet' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='dst_pending_confirm' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='ndisc_nodetype' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='809' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='ipvs_property' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='inner_protocol_type' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='813' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='remcsum_offload' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='tc_skip_classify' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='820' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='tc_at_ingress' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='821' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='tc_index' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='832' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='' type-id='b4fc55b7' visibility='default' filepath='include/linux/skbuff.h' line='835' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='priority' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='skb_iif' type-id='95e97e5e' visibility='default' filepath='include/linux/skbuff.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='hash' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='vlan_proto' type-id='84a5c3d4' visibility='default' filepath='include/linux/skbuff.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1232'>
+          <var-decl name='vlan_tci' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='' type-id='8c3ee840' visibility='default' filepath='include/linux/skbuff.h' line='848' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='secmark' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='854' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='' type-id='9c81e675' visibility='default' filepath='include/linux/skbuff.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='' type-id='b97daab4' visibility='default' filepath='include/linux/skbuff.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1360'>
+          <var-decl name='inner_transport_header' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='inner_network_header' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='868' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1392'>
+          <var-decl name='inner_mac_header' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='869' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='protocol' type-id='84a5c3d4' visibility='default' filepath='include/linux/skbuff.h' line='871' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1424'>
+          <var-decl name='transport_header' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='872' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='network_header' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='873' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1456'>
+          <var-decl name='mac_header' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='headers_end' type-id='d5016f6f' visibility='default' filepath='include/linux/skbuff.h' line='877' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/skbuff.h' line='880' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/skbuff.h' line='881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='tail' type-id='5c1abc34' visibility='default' filepath='include/linux/skbuff.h' line='884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='end' type-id='5c1abc34' visibility='default' filepath='include/linux/skbuff.h' line='885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='head' type-id='cf536864' visibility='default' filepath='include/linux/skbuff.h' line='886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='data' type-id='cf536864' visibility='default' filepath='include/linux/skbuff.h' line='887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='truesize' type-id='f0981eeb' visibility='default' filepath='include/linux/skbuff.h' line='888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='users' type-id='64615833' visibility='default' filepath='include/linux/skbuff.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='extensions' type-id='374692c7' visibility='default' filepath='include/linux/skbuff.h' line='893' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='689' column='1' id='da6f1b1a'>
+        <data-member access='private'>
+          <var-decl name='' type-id='fe3b99ac' visibility='default' filepath='include/linux/skbuff.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rbnode' type-id='2a8a6332' visibility='default' filepath='include/linux/skbuff.h' line='704' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/skbuff.h' line='705' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='690' column='1' id='fe3b99ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prev' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='1285aa79' visibility='default' filepath='include/linux/skbuff.h' line='695' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='695' column='1' id='1285aa79'>
+        <data-member access='private'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/linux/skbuff.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dev_scratch' type-id='7359adad' visibility='default' filepath='include/linux/skbuff.h' line='701' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='rb_node' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/rbtree.h' line='24' column='1' id='2a8a6332'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__rb_parent_color' type-id='7359adad' visibility='default' filepath='include/linux/rbtree.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rb_right' type-id='e6532500' visibility='default' filepath='include/linux/rbtree.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rb_left' type-id='e6532500' visibility='default' filepath='include/linux/rbtree.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='708' column='1' id='a6d66544'>
+        <data-member access='private'>
+          <var-decl name='sk' type-id='f772df6d' visibility='default' filepath='include/linux/skbuff.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ip_defrag_offset' type-id='95e97e5e' visibility='default' filepath='include/linux/skbuff.h' line='710' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='713' column='1' id='b24a5a7e'>
+        <data-member access='private'>
+          <var-decl name='tstamp' type-id='fbc017ef' visibility='default' filepath='include/linux/skbuff.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='skb_mstamp_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/skbuff.h' line='715' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='ktime_t' type-id='9b7c55ef' filepath='include/linux/ktime.h' line='28' column='1' id='fbc017ef'/>
+      <typedef-decl name='s64' type-id='49659421' filepath='include/asm-generic/int-ll64.h' line='22' column='1' id='9b7c55ef'/>
+      <typedef-decl name='__s64' type-id='1eb56b1e' filepath='include/uapi/asm-generic/int-ll64.h' line='30' column='1' id='49659421'/>
+      <union-decl name='__anonymous_union__5' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='725' column='1' id='271a40b8'>
+        <data-member access='private'>
+          <var-decl name='' type-id='710cec71' visibility='default' filepath='include/linux/skbuff.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tcp_tsorted_anchor' type-id='72f469ec' visibility='default' filepath='include/linux/skbuff.h' line='730' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='726' column='1' id='710cec71'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_skb_refdst' type-id='7359adad' visibility='default' filepath='include/linux/skbuff.h' line='727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='destructor' type-id='0ef96694' visibility='default' filepath='include/linux/skbuff.h' line='728' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__u16' type-id='8efea9e5' filepath='include/uapi/asm-generic/int-ll64.h' line='24' column='1' id='d315442e'/>
+      <union-decl name='__anonymous_union__6' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='835' column='1' id='b4fc55b7'>
+        <data-member access='private'>
+          <var-decl name='csum' type-id='fbd88bba' visibility='default' filepath='include/linux/skbuff.h' line='836' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='358587ec' visibility='default' filepath='include/linux/skbuff.h' line='837' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='__wsum' type-id='3f1a6b60' filepath='include/uapi/linux/types.h' line='37' column='1' id='fbd88bba'/>
+      <class-decl name='__anonymous_struct__3' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='837' column='1' id='358587ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='csum_start' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='csum_offset' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='839' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__be16' type-id='d315442e' filepath='include/uapi/linux/types.h' line='30' column='1' id='84a5c3d4'/>
+      <union-decl name='__anonymous_union__7' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='848' column='1' id='8c3ee840'>
+        <data-member access='private'>
+          <var-decl name='napi_id' type-id='f0981eeb' visibility='default' filepath='include/linux/skbuff.h' line='849' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sender_cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/skbuff.h' line='850' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__8' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='857' column='1' id='9c81e675'>
+        <data-member access='private'>
+          <var-decl name='mark' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='reserved_tailroom' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='859' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__9' size-in-bits='16' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='862' column='1' id='b97daab4'>
+        <data-member access='private'>
+          <var-decl name='inner_protocol' type-id='84a5c3d4' visibility='default' filepath='include/linux/skbuff.h' line='863' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='inner_ipproto' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='864' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='sk_buff_data_t' type-id='f0981eeb' filepath='include/linux/skbuff.h' line='605' column='1' id='5c1abc34'/>
+      <class-decl name='skb_ext' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/skbuff.h' line='4133' column='1' id='a8c69bdf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/linux/skbuff.h' line='4134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='offset' type-id='cf08f83f' visibility='default' filepath='include/linux/skbuff.h' line='4135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='chunks' type-id='f9b06939' visibility='default' filepath='include/linux/skbuff.h' line='4136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='e84913bd' visibility='default' filepath='include/linux/skbuff.h' line='4137' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_instance' size-in-bits='5120' is-struct='yes' visibility='default' filepath='include/crypto/algapi.h' line='46' column='1' id='85c172d2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg' type-id='514fe525' visibility='default' filepath='include/crypto/algapi.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='tmpl' type-id='f0f856cb' visibility='default' filepath='include/crypto/algapi.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='list' type-id='03a4a074' visibility='default' filepath='include/crypto/algapi.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='__ctx' type-id='baf98fd3' visibility='default' filepath='include/crypto/algapi.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_template' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/crypto/algapi.h' line='55' column='1' id='90a4444b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/crypto/algapi.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='instances' type-id='e151255a' visibility='default' filepath='include/crypto/algapi.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/crypto/algapi.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='alloc' type-id='94271082' visibility='default' filepath='include/crypto/algapi.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='free' type-id='3aa8795d' visibility='default' filepath='include/crypto/algapi.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='create' type-id='db94924a' visibility='default' filepath='include/crypto/algapi.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='e3204322' visibility='default' filepath='include/crypto/algapi.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hlist_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/types.h' line='185' column='1' id='e151255a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='08cbad52' visibility='default' filepath='include/linux/types.h' line='186' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hlist_node' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/types.h' line='189' column='1' id='03a4a074'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='08cbad52' visibility='default' filepath='include/linux/types.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pprev' type-id='50a213e8' visibility='default' filepath='include/linux/types.h' line='190' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module' size-in-bits='7168' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='349' column='1' id='29476915'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='327e04c6' visibility='default' filepath='include/linux/module.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/module.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='6093ff7c' visibility='default' filepath='include/linux/module.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mkobj' type-id='7bd9942c' visibility='default' filepath='include/linux/module.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='modinfo_attrs' type-id='063da268' visibility='default' filepath='include/linux/module.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='version' type-id='80f4b756' visibility='default' filepath='include/linux/module.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='srcversion' type-id='80f4b756' visibility='default' filepath='include/linux/module.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='holders_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/module.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='syms' type-id='fcd64690' visibility='default' filepath='include/linux/module.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='crcs' type-id='e0a2e3a6' visibility='default' filepath='include/linux/module.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='num_syms' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='cfi_check' type-id='d7c6106c' visibility='default' filepath='include/linux/module.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='param_lock' type-id='925167dc' visibility='default' filepath='include/linux/module.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='kp' type-id='a7c6e908' visibility='default' filepath='include/linux/module.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='num_kp' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='num_gpl_syms' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='gpl_syms' type-id='fcd64690' visibility='default' filepath='include/linux/module.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='gpl_crcs' type-id='e0a2e3a6' visibility='default' filepath='include/linux/module.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='using_gplonly_symbols' type-id='b50a4934' visibility='default' filepath='include/linux/module.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2696'>
+          <var-decl name='sig_ok' type-id='b50a4934' visibility='default' filepath='include/linux/module.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2704'>
+          <var-decl name='async_probe_requested' type-id='b50a4934' visibility='default' filepath='include/linux/module.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='gpl_future_syms' type-id='fcd64690' visibility='default' filepath='include/linux/module.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='gpl_future_crcs' type-id='e0a2e3a6' visibility='default' filepath='include/linux/module.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='num_gpl_future_syms' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='num_exentries' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='extable' type-id='7f0eb64c' visibility='default' filepath='include/linux/module.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='init' type-id='1db260e5' visibility='default' filepath='include/linux/module.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='core_layout' type-id='68b3d9a8' visibility='default' filepath='include/linux/module.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='init_layout' type-id='68b3d9a8' visibility='default' filepath='include/linux/module.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='arch' type-id='ea05c185' visibility='default' filepath='include/linux/module.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='taints' type-id='7359adad' visibility='default' filepath='include/linux/module.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='num_bugs' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='bug_list' type-id='72f469ec' visibility='default' filepath='include/linux/module.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='bug_table' type-id='c250b0e4' visibility='default' filepath='include/linux/module.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='kallsyms' type-id='209d601e' visibility='default' filepath='include/linux/module.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='core_kallsyms' type-id='6a003ee8' visibility='default' filepath='include/linux/module.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='sect_attrs' type-id='3f4455c4' visibility='default' filepath='include/linux/module.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='notes_attrs' type-id='f0cb8b62' visibility='default' filepath='include/linux/module.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='args' type-id='26a90f95' visibility='default' filepath='include/linux/module.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='percpu' type-id='eaa32e2f' visibility='default' filepath='include/linux/module.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='percpu_size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5536'>
+          <var-decl name='num_tracepoints' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='tracepoints_ptrs' type-id='700727c0' visibility='default' filepath='include/linux/module.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='num_srcu_structs' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='srcu_struct_ptrs' type-id='57933490' visibility='default' filepath='include/linux/module.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='num_bpf_raw_events' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='bpf_raw_events' type-id='1f7f0216' visibility='default' filepath='include/linux/module.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='jump_entries' type-id='7a35228c' visibility='default' filepath='include/linux/module.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='num_jump_entries' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5984'>
+          <var-decl name='num_trace_bprintk_fmt' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='trace_bprintk_fmt_start' type-id='7d3cd834' visibility='default' filepath='include/linux/module.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='trace_events' type-id='109cc752' visibility='default' filepath='include/linux/module.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='num_trace_events' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='trace_evals' type-id='69881700' visibility='default' filepath='include/linux/module.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='num_trace_evals' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='source_list' type-id='72f469ec' visibility='default' filepath='include/linux/module.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='target_list' type-id='72f469ec' visibility='default' filepath='include/linux/module.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='exit' type-id='953b12f8' visibility='default' filepath='include/linux/module.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='refcnt' type-id='49178f86' visibility='default' filepath='include/linux/module.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='ei_funcs' type-id='7f79f20e' visibility='default' filepath='include/linux/module.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='num_ei_funcs' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/module.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/module.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/module.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/module.h' line='522' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='module_state' filepath='include/linux/module.h' line='297' column='1' id='327e04c6'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MODULE_STATE_LIVE' value='0'/>
+        <enumerator name='MODULE_STATE_COMING' value='1'/>
+        <enumerator name='MODULE_STATE_GOING' value='2'/>
+        <enumerator name='MODULE_STATE_UNFORMED' value='3'/>
+      </enum-decl>
+      <class-decl name='module_kobject' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='44' column='1' id='7bd9942c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/module.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/module.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='drivers_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/module.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='mp' type-id='ad9e36e6' visibility='default' filepath='include/linux/module.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='kobj_completion' type-id='389faaf7' visibility='default' filepath='include/linux/module.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kobject' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='66' column='1' id='b6ab8849'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/kobject.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/kobject.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parent' type-id='d30bdc51' visibility='default' filepath='include/linux/kobject.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='kset' type-id='89b70200' visibility='default' filepath='include/linux/kobject.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ktype' type-id='c48b394e' visibility='default' filepath='include/linux/kobject.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sd' type-id='150efd3f' visibility='default' filepath='include/linux/kobject.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/kobject.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='state_initialized' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='state_in_sysfs' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='state_add_uevent_sent' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='state_remove_uevent_sent' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='uevent_suppress' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kset' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='204' column='1' id='8cf069a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/kobject.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/kobject.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/kobject.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='uevent_ops' type-id='86462700' visibility='default' filepath='include/linux/kobject.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='213' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='spinlock_t' type-id='53fb272e' filepath='include/linux/spinlock_types.h' line='73' column='1' id='fb4018a0'/>
+      <class-decl name='spinlock' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/spinlock_types.h' line='61' column='1' id='53fb272e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='1076cffc' visibility='default' filepath='include/linux/spinlock_types.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__10' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/spinlock_types.h' line='62' column='1' id='1076cffc'>
+        <data-member access='private'>
+          <var-decl name='rlock' type-id='f106d0e5' visibility='default' filepath='include/linux/spinlock_types.h' line='63' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='raw_spinlock' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/spinlock_types.h' line='20' column='1' id='f106d0e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='raw_lock' type-id='641c41d1' visibility='default' filepath='include/linux/spinlock_types.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='arch_spinlock_t' type-id='c167abfb' filepath='include/asm-generic/qspinlock_types.h' line='52' column='1' id='641c41d1'/>
+      <class-decl name='qspinlock' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='22' column='1' id='c167abfb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='16e927d3' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__11' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='23' column='1' id='16e927d3'>
+        <data-member access='private'>
+          <var-decl name='val' type-id='49178f86' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='e56340ee' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='33729b5d' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='36' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__4' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='32' column='1' id='e56340ee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='locked' type-id='f9b06939' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='pending' type-id='f9b06939' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='36' column='1' id='33729b5d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='locked_pending' type-id='1dc6a898' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='tail' type-id='1dc6a898' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='u16' type-id='d315442e' filepath='include/asm-generic/int-ll64.h' line='19' column='1' id='1dc6a898'/>
+      <class-decl name='kset_uevent_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='168' column='1' id='9f6abc71'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filter' type-id='2a3ad845' visibility='default' filepath='include/linux/kobject.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='1ea91ded' visibility='default' filepath='include/linux/kobject.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uevent' type-id='9125ffcd' visibility='default' filepath='include/linux/kobject.h' line='171' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kobj_uevent_env' size-in-bits='18688' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='160' column='1' id='a5179659'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='argv' type-id='461c9ed2' visibility='default' filepath='include/linux/kobject.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='envp' type-id='2e646d82' visibility='default' filepath='include/linux/kobject.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='envp_idx' type-id='95e97e5e' visibility='default' filepath='include/linux/kobject.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='buf' type-id='41bf80f3' visibility='default' filepath='include/linux/kobject.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18656'>
+          <var-decl name='buflen' type-id='95e97e5e' visibility='default' filepath='include/linux/kobject.h' line='165' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kobj_type' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='145' column='1' id='1a08fab8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='release' type-id='aa377a8c' visibility='default' filepath='include/linux/kobject.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sysfs_ops' type-id='ebd313ed' visibility='default' filepath='include/linux/kobject.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='default_attrs' type-id='862c676f' visibility='default' filepath='include/linux/kobject.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='default_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/kobject.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='child_ns_type' type-id='10f0a819' visibility='default' filepath='include/linux/kobject.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='namespace' type-id='9c1150bc' visibility='default' filepath='include/linux/kobject.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_ownership' type-id='96b6fff2' visibility='default' filepath='include/linux/kobject.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sysfs_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/sysfs.h' line='223' column='1' id='e7826ffa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='show' type-id='434e45fe' visibility='default' filepath='include/linux/sysfs.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='store' type-id='855e70d2' visibility='default' filepath='include/linux/sysfs.h' line='225' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='ssize_t' type-id='b6b3ebaf' filepath='include/linux/types.h' line='60' column='1' id='79a0948f'/>
+      <typedef-decl name='__kernel_ssize_t' type-id='6a11bd61' filepath='include/uapi/asm-generic/posix_types.h' line='73' column='1' id='b6b3ebaf'/>
+      <typedef-decl name='__kernel_long_t' type-id='bd54fe1a' filepath='include/uapi/asm-generic/posix_types.h' line='15' column='1' id='6a11bd61'/>
+      <class-decl name='attribute' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/sysfs.h' line='30' column='1' id='a6222917'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/sysfs.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='include/linux/sysfs.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='umode_t' type-id='8efea9e5' filepath='include/linux/types.h' line='19' column='1' id='2594b00f'/>
+      <typedef-decl name='size_t' type-id='9e19ad6e' filepath='include/linux/types.h' line='55' column='1' id='b59d7dce'/>
+      <typedef-decl name='__kernel_size_t' type-id='447da2ae' filepath='include/uapi/asm-generic/posix_types.h' line='72' column='1' id='9e19ad6e'/>
+      <typedef-decl name='__kernel_ulong_t' type-id='7359adad' filepath='include/uapi/asm-generic/posix_types.h' line='16' column='1' id='447da2ae'/>
+      <class-decl name='attribute_group' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/sysfs.h' line='84' column='1' id='e4af473b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/sysfs.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='is_visible' type-id='f69fcfe1' visibility='default' filepath='include/linux/sysfs.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='is_bin_visible' type-id='cc3e2efb' visibility='default' filepath='include/linux/sysfs.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='attrs' type-id='862c676f' visibility='default' filepath='include/linux/sysfs.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bin_attrs' type-id='87d62959' visibility='default' filepath='include/linux/sysfs.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bin_attribute' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/sysfs.h' line='161' column='1' id='d83a2db1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' visibility='default' filepath='include/linux/sysfs.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/sysfs.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/sysfs.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read' type-id='afa767ca' visibility='default' filepath='include/linux/sysfs.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write' type-id='afa767ca' visibility='default' filepath='include/linux/sysfs.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mmap' type-id='a02c170c' visibility='default' filepath='include/linux/sysfs.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='961' column='1' id='b4b8adeb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='f_u' type-id='8c8e2781' visibility='default' filepath='include/linux/fs.h' line='965' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='f_path' type-id='b5382ece' visibility='default' filepath='include/linux/fs.h' line='966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='f_inode' type-id='7e666abe' visibility='default' filepath='include/linux/fs.h' line='967' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='f_op' type-id='61758ee5' visibility='default' filepath='include/linux/fs.h' line='968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='f_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='f_write_hint' type-id='0d20c3dd' visibility='default' filepath='include/linux/fs.h' line='975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='f_count' type-id='f22a8abb' visibility='default' filepath='include/linux/fs.h' line='976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='f_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='f_mode' type-id='2665334e' visibility='default' filepath='include/linux/fs.h' line='978' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='f_pos_lock' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='f_pos' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='980' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='f_owner' type-id='6b640edd' visibility='default' filepath='include/linux/fs.h' line='981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='f_cred' type-id='bc33861a' visibility='default' filepath='include/linux/fs.h' line='982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='f_ra' type-id='b31f003f' visibility='default' filepath='include/linux/fs.h' line='983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='f_version' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='f_security' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='f_ep_links' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='f_tfile_llink' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='f_mapping' type-id='f57039f0' visibility='default' filepath='include/linux/fs.h' line='997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='f_wb_err' type-id='1da55f79' visibility='default' filepath='include/linux/fs.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='f_sb_err' type-id='1da55f79' visibility='default' filepath='include/linux/fs.h' line='999' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__12' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='962' column='1' id='8c8e2781'>
+        <data-member access='private'>
+          <var-decl name='fu_llist' type-id='c5ccfee8' visibility='default' filepath='include/linux/fs.h' line='963' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fu_rcuhead' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='964' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='llist_node' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/llist.h' line='58' column='1' id='c5ccfee8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='023b769e' visibility='default' filepath='include/linux/llist.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='callback_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/types.h' line='219' column='1' id='e3d8ce29'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='69c138b1' visibility='default' filepath='include/linux/types.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='eb839374' visibility='default' filepath='include/linux/types.h' line='221' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='path' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/path.h' line='8' column='1' id='b5382ece'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mnt' type-id='549da824' visibility='default' filepath='include/linux/path.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dentry' type-id='27675065' visibility='default' filepath='include/linux/path.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dentry' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/dcache.h' line='90' column='1' id='d6ebca75'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='d_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/dcache.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='d_seq' type-id='e14c3b11' visibility='default' filepath='include/linux/dcache.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='d_hash' type-id='8db0df1b' visibility='default' filepath='include/linux/dcache.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='d_parent' type-id='27675065' visibility='default' filepath='include/linux/dcache.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='d_name' type-id='02244303' visibility='default' filepath='include/linux/dcache.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='d_inode' type-id='7e666abe' visibility='default' filepath='include/linux/dcache.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='d_iname' type-id='fc872715' visibility='default' filepath='include/linux/dcache.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='d_lockref' type-id='60efdfd3' visibility='default' filepath='include/linux/dcache.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='d_op' type-id='1ee57353' visibility='default' filepath='include/linux/dcache.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='d_sb' type-id='42c8f564' visibility='default' filepath='include/linux/dcache.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='d_time' type-id='7359adad' visibility='default' filepath='include/linux/dcache.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='d_fsdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/dcache.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='' type-id='ba311a3a' visibility='default' filepath='include/linux/dcache.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='d_child' type-id='72f469ec' visibility='default' filepath='include/linux/dcache.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='d_subdirs' type-id='72f469ec' visibility='default' filepath='include/linux/dcache.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='d_u' type-id='ba0a0e48' visibility='default' filepath='include/linux/dcache.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='124' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='seqcount_t' type-id='3a74ff0b' filepath='include/linux/seqlock.h' line='53' column='1' id='e14c3b11'/>
+      <class-decl name='seqcount' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/seqlock.h' line='48' column='1' id='3a74ff0b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sequence' type-id='f0981eeb' visibility='default' filepath='include/linux/seqlock.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hlist_bl_node' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/list_bl.h' line='38' column='1' id='8db0df1b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='d09d4bab' visibility='default' filepath='include/linux/list_bl.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pprev' type-id='e89ddc13' visibility='default' filepath='include/linux/list_bl.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qstr' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/dcache.h' line='48' column='1' id='02244303'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='c047989c' visibility='default' filepath='include/linux/dcache.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='354f7eb9' visibility='default' filepath='include/linux/dcache.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__13' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='49' column='1' id='c047989c'>
+        <data-member access='private'>
+          <var-decl name='' type-id='7a2c0764' visibility='default' filepath='include/linux/dcache.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='hash_len' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='53' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__6' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='50' column='1' id='7a2c0764'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='19c2251e' visibility='default' filepath='include/linux/dcache.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='19c2251e' visibility='default' filepath='include/linux/dcache.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inode' size-in-bits='5312' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='650' column='1' id='fe070fe8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='i_mode' type-id='2594b00f' visibility='default' filepath='include/linux/fs.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='i_opflags' type-id='8efea9e5' visibility='default' filepath='include/linux/fs.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='i_uid' type-id='d80b72e6' visibility='default' filepath='include/linux/fs.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='i_gid' type-id='094d8048' visibility='default' filepath='include/linux/fs.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='i_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='i_acl' type-id='2871909b' visibility='default' filepath='include/linux/fs.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='i_default_acl' type-id='2871909b' visibility='default' filepath='include/linux/fs.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='i_op' type-id='de2c232c' visibility='default' filepath='include/linux/fs.h' line='662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='i_sb' type-id='42c8f564' visibility='default' filepath='include/linux/fs.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='i_mapping' type-id='f57039f0' visibility='default' filepath='include/linux/fs.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='i_security' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='i_ino' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='' type-id='3ee18b51' visibility='default' filepath='include/linux/fs.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='i_rdev' type-id='8504f260' visibility='default' filepath='include/linux/fs.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='i_size' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='i_atime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='i_mtime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='i_ctime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='i_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='i_bytes' type-id='8efea9e5' visibility='default' filepath='include/linux/fs.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1136'>
+          <var-decl name='i_blkbits' type-id='f9b06939' visibility='default' filepath='include/linux/fs.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1144'>
+          <var-decl name='i_write_hint' type-id='f9b06939' visibility='default' filepath='include/linux/fs.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='i_blocks' type-id='17345459' visibility='default' filepath='include/linux/fs.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='i_state' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='i_rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/fs.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dirtied_when' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='dirtied_time_when' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='i_hash' type-id='03a4a074' visibility='default' filepath='include/linux/fs.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='i_io_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='i_wb' type-id='f885ca7e' visibility='default' filepath='include/linux/fs.h' line='708' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='i_wb_frn_winner' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='711' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='i_wb_frn_avg_time' type-id='1dc6a898' visibility='default' filepath='include/linux/fs.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2160'>
+          <var-decl name='i_wb_frn_history' type-id='1dc6a898' visibility='default' filepath='include/linux/fs.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='i_lru' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='715' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='i_sb_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='716' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='i_wb_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='' type-id='cbd4a95b' visibility='default' filepath='include/linux/fs.h' line='718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='i_version' type-id='28ee064c' visibility='default' filepath='include/linux/fs.h' line='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='i_sequence' type-id='28ee064c' visibility='default' filepath='include/linux/fs.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='i_count' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='i_dio_count' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='i_writecount' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='i_readcount' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='' type-id='67f3b119' visibility='default' filepath='include/linux/fs.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='i_flctx' type-id='731257ff' visibility='default' filepath='include/linux/fs.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='i_data' type-id='0fd82dc2' visibility='default' filepath='include/linux/fs.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='i_devices' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='' type-id='d1afa4ff' visibility='default' filepath='include/linux/fs.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='i_generation' type-id='3f1a6b60' visibility='default' filepath='include/linux/fs.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4896'>
+          <var-decl name='i_fsnotify_mask' type-id='3f1a6b60' visibility='default' filepath='include/linux/fs.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='i_fsnotify_marks' type-id='994d9d61' visibility='default' filepath='include/linux/fs.h' line='749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='i_crypt_info' type-id='1ea8c5af' visibility='default' filepath='include/linux/fs.h' line='753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='i_verity_info' type-id='ba18e248' visibility='default' filepath='include/linux/fs.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='i_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='763' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='kuid_t' type-id='e8b29774' filepath='include/linux/uidgid.h' line='23' column='1' id='d80b72e6'/>
+      <class-decl name='__anonymous_struct__7' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='d80b72e6' visibility='default' filepath='include/linux/uidgid.h' line='21' column='1' id='e8b29774'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='354978ed' visibility='default' filepath='include/linux/uidgid.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='uid_t' type-id='70734f24' filepath='include/linux/types.h' line='32' column='1' id='354978ed'/>
+      <typedef-decl name='__kernel_uid32_t' type-id='f0981eeb' filepath='include/uapi/asm-generic/posix_types.h' line='49' column='1' id='70734f24'/>
+      <typedef-decl name='kgid_t' type-id='bac1227a' filepath='include/linux/uidgid.h' line='28' column='1' id='094d8048'/>
+      <class-decl name='__anonymous_struct__8' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='094d8048' visibility='default' filepath='include/linux/uidgid.h' line='26' column='1' id='bac1227a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='2bb2b96f' visibility='default' filepath='include/linux/uidgid.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='gid_t' type-id='b4413cee' filepath='include/linux/types.h' line='33' column='1' id='2bb2b96f'/>
+      <typedef-decl name='__kernel_gid32_t' type-id='f0981eeb' filepath='include/uapi/asm-generic/posix_types.h' line='50' column='1' id='b4413cee'/>
+      <class-decl name='inode_operations' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1927' column='1' id='5f5aa1ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lookup' type-id='02f90a61' visibility='default' filepath='include/linux/fs.h' line='1928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_link' type-id='76ae8e1d' visibility='default' filepath='include/linux/fs.h' line='1929' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='permission' type-id='f4f91b99' visibility='default' filepath='include/linux/fs.h' line='1930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_acl' type-id='7f30b822' visibility='default' filepath='include/linux/fs.h' line='1931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='readlink' type-id='a57bd028' visibility='default' filepath='include/linux/fs.h' line='1933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='create' type-id='c9cd0e09' visibility='default' filepath='include/linux/fs.h' line='1935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='link' type-id='4b872e00' visibility='default' filepath='include/linux/fs.h' line='1936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unlink' type-id='7f5be7f6' visibility='default' filepath='include/linux/fs.h' line='1937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='symlink' type-id='234843b5' visibility='default' filepath='include/linux/fs.h' line='1938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mkdir' type-id='98c2d938' visibility='default' filepath='include/linux/fs.h' line='1939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rmdir' type-id='7f5be7f6' visibility='default' filepath='include/linux/fs.h' line='1940' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='mknod' type-id='f9e0c0e5' visibility='default' filepath='include/linux/fs.h' line='1941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rename' type-id='7733ef81' visibility='default' filepath='include/linux/fs.h' line='1942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='setattr' type-id='c237e829' visibility='default' filepath='include/linux/fs.h' line='1944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='getattr' type-id='0b787edf' visibility='default' filepath='include/linux/fs.h' line='1945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='listxattr' type-id='3494e4bb' visibility='default' filepath='include/linux/fs.h' line='1946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fiemap' type-id='0508acce' visibility='default' filepath='include/linux/fs.h' line='1947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='update_time' type-id='64ecf6a5' visibility='default' filepath='include/linux/fs.h' line='1949' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='atomic_open' type-id='d3807eb0' visibility='default' filepath='include/linux/fs.h' line='1950' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tmpfile' type-id='98c2d938' visibility='default' filepath='include/linux/fs.h' line='1953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='set_acl' type-id='820976ef' visibility='default' filepath='include/linux/fs.h' line='1954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1956' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1957' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1959' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='delayed_call' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/delayed_call.h' line='10' column='1' id='f1fbc58e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fn' type-id='b7f9d8e6' visibility='default' filepath='include/linux/delayed_call.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='arg' type-id='eaa32e2f' visibility='default' filepath='include/linux/delayed_call.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='bool' type-id='c894953d' filepath='include/linux/types.h' line='30' column='1' id='b50a4934'/>
+      <typedef-decl name='dev_t' type-id='8f336000' filepath='include/linux/types.h' line='16' column='1' id='8504f260'/>
+      <typedef-decl name='__kernel_dev_t' type-id='19c2251e' filepath='include/linux/types.h' line='13' column='1' id='8f336000'/>
+      <class-decl name='iattr' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='225' column='1' id='a9ef191f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ia_valid' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ia_mode' type-id='2594b00f' visibility='default' filepath='include/linux/fs.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ia_uid' type-id='d80b72e6' visibility='default' filepath='include/linux/fs.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ia_gid' type-id='094d8048' visibility='default' filepath='include/linux/fs.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ia_size' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ia_atime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ia_mtime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ia_ctime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ia_file' type-id='77e79a4b' visibility='default' filepath='include/linux/fs.h' line='240' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='loff_t' type-id='537a730e' filepath='include/linux/types.h' line='46' column='1' id='69bf7bee'/>
+      <typedef-decl name='__kernel_loff_t' type-id='1eb56b1e' filepath='include/uapi/asm-generic/posix_types.h' line='88' column='1' id='537a730e'/>
+      <class-decl name='timespec64' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/time64.h' line='13' column='1' id='40a816ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='1afd27ac' visibility='default' filepath='include/linux/time64.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tv_nsec' type-id='bd54fe1a' visibility='default' filepath='include/linux/time64.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='time64_t' type-id='49659421' filepath='include/linux/time64.h' line='8' column='1' id='1afd27ac'/>
+      <class-decl name='kstat' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/stat.h' line='24' column='1' id='5f5c9d88'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='result_mask' type-id='19c2251e' visibility='default' filepath='include/linux/stat.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='include/linux/stat.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nlink' type-id='f0981eeb' visibility='default' filepath='include/linux/stat.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='blksize' type-id='8f92235e' visibility='default' filepath='include/linux/stat.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attributes' type-id='91ce1af9' visibility='default' filepath='include/linux/stat.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='attributes_mask' type-id='91ce1af9' visibility='default' filepath='include/linux/stat.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ino' type-id='91ce1af9' visibility='default' filepath='include/linux/stat.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev' type-id='8504f260' visibility='default' filepath='include/linux/stat.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='rdev' type-id='8504f260' visibility='default' filepath='include/linux/stat.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/stat.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='gid' type-id='094d8048' visibility='default' filepath='include/linux/stat.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='size' type-id='69bf7bee' visibility='default' filepath='include/linux/stat.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='atime' type-id='40a816ad' visibility='default' filepath='include/linux/stat.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mtime' type-id='40a816ad' visibility='default' filepath='include/linux/stat.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ctime' type-id='40a816ad' visibility='default' filepath='include/linux/stat.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='btime' type-id='40a816ad' visibility='default' filepath='include/linux/stat.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='blocks' type-id='91ce1af9' visibility='default' filepath='include/linux/stat.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='uint32_t' type-id='19c2251e' filepath='include/linux/types.h' line='109' column='1' id='8f92235e'/>
+      <class-decl name='fiemap_extent_info' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1802' column='1' id='8ffe5745'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fi_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fi_extents_mapped' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fi_extents_max' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fi_extents_start' type-id='d92598ce' visibility='default' filepath='include/linux/fs.h' line='1806' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fiemap_extent' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/uapi/linux/fiemap.h' line='17' column='1' id='eab08458'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fe_logical' type-id='d3130597' visibility='default' filepath='include/uapi/linux/fiemap.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fe_physical' type-id='d3130597' visibility='default' filepath='include/uapi/linux/fiemap.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fe_length' type-id='d3130597' visibility='default' filepath='include/uapi/linux/fiemap.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fe_reserved64' type-id='8a7b7524' visibility='default' filepath='include/uapi/linux/fiemap.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fe_flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fiemap.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='fe_reserved' type-id='3fa05d14' visibility='default' filepath='include/uapi/linux/fiemap.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='super_block' size-in-bits='12800' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1468' column='1' id='bc39a8be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='s_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='s_dev' type-id='8504f260' visibility='default' filepath='include/linux/fs.h' line='1470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='s_blocksize_bits' type-id='002ac4a6' visibility='default' filepath='include/linux/fs.h' line='1471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='s_blocksize' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='s_maxbytes' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='1473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='s_type' type-id='21e53d44' visibility='default' filepath='include/linux/fs.h' line='1474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='s_op' type-id='f7c6dcac' visibility='default' filepath='include/linux/fs.h' line='1475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dq_op' type-id='85741a2a' visibility='default' filepath='include/linux/fs.h' line='1476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='s_qcop' type-id='2cb49514' visibility='default' filepath='include/linux/fs.h' line='1477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_export_op' type-id='ab932c45' visibility='default' filepath='include/linux/fs.h' line='1478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='s_flags' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='s_iflags' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='s_magic' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='s_root' type-id='27675065' visibility='default' filepath='include/linux/fs.h' line='1482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='s_umount' type-id='f19fdb93' visibility='default' filepath='include/linux/fs.h' line='1483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='s_count' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='s_active' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='1485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='s_security' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='1487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='s_xattr' type-id='cb49d4b8' visibility='default' filepath='include/linux/fs.h' line='1489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='s_cop' type-id='8d31a8d6' visibility='default' filepath='include/linux/fs.h' line='1491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='s_master_keys' type-id='204a4632' visibility='default' filepath='include/linux/fs.h' line='1492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='s_vop' type-id='e3008443' visibility='default' filepath='include/linux/fs.h' line='1495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='s_encoding' type-id='72835629' visibility='default' filepath='include/linux/fs.h' line='1498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='s_encoding_flags' type-id='d315442e' visibility='default' filepath='include/linux/fs.h' line='1499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='s_roots' type-id='def98e71' visibility='default' filepath='include/linux/fs.h' line='1501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='s_mounts' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='s_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='1503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='s_bdi' type-id='ef4fae1b' visibility='default' filepath='include/linux/fs.h' line='1504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='s_mtd' type-id='58ed56f5' visibility='default' filepath='include/linux/fs.h' line='1505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='s_instances' type-id='03a4a074' visibility='default' filepath='include/linux/fs.h' line='1506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='s_quota_types' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='s_dquot' type-id='c26e4ad8' visibility='default' filepath='include/linux/fs.h' line='1508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='s_writers' type-id='fb476a2b' visibility='default' filepath='include/linux/fs.h' line='1510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='s_fs_info' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='1517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='s_time_gran' type-id='19c2251e' visibility='default' filepath='include/linux/fs.h' line='1520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='s_time_min' type-id='1afd27ac' visibility='default' filepath='include/linux/fs.h' line='1522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='s_time_max' type-id='1afd27ac' visibility='default' filepath='include/linux/fs.h' line='1523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='s_fsnotify_mask' type-id='3f1a6b60' visibility='default' filepath='include/linux/fs.h' line='1525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='s_fsnotify_marks' type-id='994d9d61' visibility='default' filepath='include/linux/fs.h' line='1526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='s_id' type-id='16dc656a' visibility='default' filepath='include/linux/fs.h' line='1529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='s_uuid' type-id='ec55eb74' visibility='default' filepath='include/linux/fs.h' line='1530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='s_max_links' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8864'>
+          <var-decl name='s_mode' type-id='2665334e' visibility='default' filepath='include/linux/fs.h' line='1533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='s_vfs_rename_mutex' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='1539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='s_subtype' type-id='80f4b756' visibility='default' filepath='include/linux/fs.h' line='1545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='s_d_op' type-id='1ee57353' visibility='default' filepath='include/linux/fs.h' line='1547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='cleancache_poolid' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='s_shrink' type-id='27cb404f' visibility='default' filepath='include/linux/fs.h' line='1554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='s_remove_count' type-id='f22a8abb' visibility='default' filepath='include/linux/fs.h' line='1557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='s_fsnotify_inode_refs' type-id='f22a8abb' visibility='default' filepath='include/linux/fs.h' line='1560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='s_readonly_remount' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10016'>
+          <var-decl name='s_wb_err' type-id='1da55f79' visibility='default' filepath='include/linux/fs.h' line='1566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='s_dio_done_wq' type-id='242e3d19' visibility='default' filepath='include/linux/fs.h' line='1569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='s_pins' type-id='e151255a' visibility='default' filepath='include/linux/fs.h' line='1570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='s_user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/fs.h' line='1577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='s_dentry_lru' type-id='c653aac7' visibility='default' filepath='include/linux/fs.h' line='1584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='s_inode_lru' type-id='c653aac7' visibility='default' filepath='include/linux/fs.h' line='1585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='1586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='destroy_work' type-id='ef9025d0' visibility='default' filepath='include/linux/fs.h' line='1587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='s_sync_lock' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='1589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='s_stack_depth' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='s_inode_list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='1597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='s_inodes' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='s_inode_wblist_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='1600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='s_inodes_wb' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1606' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file_system_type' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='2294' column='1' id='2f5a60be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/fs.h' line='2295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fs_flags' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='2296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init_fs_context' type-id='57f0383a' visibility='default' filepath='include/linux/fs.h' line='2303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parameters' type-id='a2fb6348' visibility='default' filepath='include/linux/fs.h' line='2304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mount' type-id='d9394db1' visibility='default' filepath='include/linux/fs.h' line='2305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='kill_sb' type-id='1ff54a45' visibility='default' filepath='include/linux/fs.h' line='2307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/fs.h' line='2308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='next' type-id='21e53d44' visibility='default' filepath='include/linux/fs.h' line='2309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fs_supers' type-id='e151255a' visibility='default' filepath='include/linux/fs.h' line='2310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_lock_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_umount_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_vfs_rename_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_writers_key' type-id='9c02e2a6' visibility='default' filepath='include/linux/fs.h' line='2315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='i_lock_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='i_mutex_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='i_mutex_dir_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2324' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lock_class_key' is-struct='yes' visibility='default' filepath='include/linux/lockdep.h' line='459' column='1' id='47479831'/>
+      <class-decl name='super_operations' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='2011' column='1' id='874691ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alloc_inode' type-id='e8c4dba4' visibility='default' filepath='include/linux/fs.h' line='2012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='destroy_inode' type-id='4f3d95df' visibility='default' filepath='include/linux/fs.h' line='2013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='free_inode' type-id='4f3d95df' visibility='default' filepath='include/linux/fs.h' line='2014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dirty_inode' type-id='5f5506f6' visibility='default' filepath='include/linux/fs.h' line='2016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write_inode' type-id='fd780be6' visibility='default' filepath='include/linux/fs.h' line='2017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='drop_inode' type-id='28ba4492' visibility='default' filepath='include/linux/fs.h' line='2018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='evict_inode' type-id='4f3d95df' visibility='default' filepath='include/linux/fs.h' line='2019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='put_super' type-id='1ff54a45' visibility='default' filepath='include/linux/fs.h' line='2020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sync_fs' type-id='dcab5203' visibility='default' filepath='include/linux/fs.h' line='2021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='freeze_super' type-id='d2f4c704' visibility='default' filepath='include/linux/fs.h' line='2022' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='freeze_fs' type-id='d2f4c704' visibility='default' filepath='include/linux/fs.h' line='2023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='thaw_super' type-id='d2f4c704' visibility='default' filepath='include/linux/fs.h' line='2024' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='unfreeze_fs' type-id='d2f4c704' visibility='default' filepath='include/linux/fs.h' line='2025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='statfs' type-id='35646c79' visibility='default' filepath='include/linux/fs.h' line='2026' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='remount_fs' type-id='552c8f87' visibility='default' filepath='include/linux/fs.h' line='2027' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='umount_begin' type-id='1ff54a45' visibility='default' filepath='include/linux/fs.h' line='2028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='show_options' type-id='c94f6b13' visibility='default' filepath='include/linux/fs.h' line='2030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='show_devname' type-id='c94f6b13' visibility='default' filepath='include/linux/fs.h' line='2031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='show_path' type-id='c94f6b13' visibility='default' filepath='include/linux/fs.h' line='2032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='show_stats' type-id='c94f6b13' visibility='default' filepath='include/linux/fs.h' line='2033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='quota_read' type-id='e295c77c' visibility='default' filepath='include/linux/fs.h' line='2035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='quota_write' type-id='a9b95107' visibility='default' filepath='include/linux/fs.h' line='2036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='get_dquots' type-id='ae02292a' visibility='default' filepath='include/linux/fs.h' line='2037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='bdev_try_to_free_page' type-id='ea44f8d2' visibility='default' filepath='include/linux/fs.h' line='2039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='nr_cached_objects' type-id='c4facf61' visibility='default' filepath='include/linux/fs.h' line='2040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='free_cached_objects' type-id='c4facf61' visibility='default' filepath='include/linux/fs.h' line='2042' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2048' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dquot' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='294' column='1' id='691a06da'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dq_hash' type-id='03a4a074' visibility='default' filepath='include/linux/quota.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dq_inuse' type-id='72f469ec' visibility='default' filepath='include/linux/quota.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dq_free' type-id='72f469ec' visibility='default' filepath='include/linux/quota.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dq_dirty' type-id='72f469ec' visibility='default' filepath='include/linux/quota.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dq_lock' type-id='925167dc' visibility='default' filepath='include/linux/quota.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dq_dqb_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/quota.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='dq_count' type-id='49178f86' visibility='default' filepath='include/linux/quota.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dq_sb' type-id='42c8f564' visibility='default' filepath='include/linux/quota.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dq_id' type-id='72028e1c' visibility='default' filepath='include/linux/quota.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dq_off' type-id='69bf7bee' visibility='default' filepath='include/linux/quota.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dq_flags' type-id='7359adad' visibility='default' filepath='include/linux/quota.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='dq_dqb' type-id='bd17a943' visibility='default' filepath='include/linux/quota.h' line='306' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mutex' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mutex.h' line='53' column='1' id='925167dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='f22a8abb' visibility='default' filepath='include/linux/mutex.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mutex.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='osq' type-id='0c3105cd' visibility='default' filepath='include/linux/mutex.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wait_list' type-id='72f469ec' visibility='default' filepath='include/linux/mutex.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='atomic_long_t' type-id='28ee064c' filepath='include/asm-generic/atomic-long.h' line='12' column='1' id='f22a8abb'/>
+      <typedef-decl name='atomic64_t' type-id='4efbf2c5' filepath='include/linux/types.h' line='178' column='1' id='28ee064c'/>
+      <class-decl name='__anonymous_struct__9' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='28ee064c' visibility='default' filepath='include/linux/types.h' line='176' column='1' id='4efbf2c5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='counter' type-id='9b7c55ef' visibility='default' filepath='include/linux/types.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='optimistic_spin_queue' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/osq_lock.h' line='15' column='1' id='0c3105cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tail' type-id='49178f86' visibility='default' filepath='include/linux/osq_lock.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kqid' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='68' column='1' id='72028e1c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='4579c4c7' visibility='default' filepath='include/linux/quota.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='9ff1dafd' visibility='default' filepath='include/linux/quota.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__14' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/quota.h' line='69' column='1' id='4579c4c7'>
+        <data-member access='private'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/quota.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='gid' type-id='094d8048' visibility='default' filepath='include/linux/quota.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='projid' type-id='b7cdd2f8' visibility='default' filepath='include/linux/quota.h' line='72' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='kprojid_t' type-id='393e7ae8' filepath='include/linux/projid.h' line='24' column='1' id='b7cdd2f8'/>
+      <class-decl name='__anonymous_struct__10' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='b7cdd2f8' visibility='default' filepath='include/linux/projid.h' line='22' column='1' id='393e7ae8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='6ab42ed1' visibility='default' filepath='include/linux/projid.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='projid_t' type-id='70734f24' filepath='include/linux/projid.h' line='20' column='1' id='6ab42ed1'/>
+      <enum-decl name='quota_type' filepath='include/linux/quota.h' line='54' column='1' id='9ff1dafd'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USRQUOTA' value='0'/>
+        <enumerator name='GRPQUOTA' value='1'/>
+        <enumerator name='PRJQUOTA' value='2'/>
+      </enum-decl>
+      <class-decl name='mem_dqblk' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='205' column='1' id='bd17a943'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dqb_bhardlimit' type-id='33341965' visibility='default' filepath='include/linux/quota.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dqb_bsoftlimit' type-id='33341965' visibility='default' filepath='include/linux/quota.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dqb_curspace' type-id='33341965' visibility='default' filepath='include/linux/quota.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dqb_rsvspace' type-id='33341965' visibility='default' filepath='include/linux/quota.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dqb_ihardlimit' type-id='33341965' visibility='default' filepath='include/linux/quota.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dqb_isoftlimit' type-id='33341965' visibility='default' filepath='include/linux/quota.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dqb_curinodes' type-id='33341965' visibility='default' filepath='include/linux/quota.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dqb_btime' type-id='1afd27ac' visibility='default' filepath='include/linux/quota.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dqb_itime' type-id='1afd27ac' visibility='default' filepath='include/linux/quota.h' line='214' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='qsize_t' type-id='1eb56b1e' filepath='include/linux/quota.h' line='66' column='1' id='33341965'/>
+      <class-decl name='page' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='70' column='1' id='a25ce1be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='1c70c8a9' visibility='default' filepath='include/linux/mm_types.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='' type-id='f47d5752' visibility='default' filepath='include/linux/mm_types.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='_refcount' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mem_cgroup' type-id='223696fb' visibility='default' filepath='include/linux/mm_types.h' line='203' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__15' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='79' column='1' id='1c70c8a9'>
+        <data-member access='private'>
+          <var-decl name='' type-id='9228d425' visibility='default' filepath='include/linux/mm_types.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='5f2b8baf' visibility='default' filepath='include/linux/mm_types.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='7d00e4f0' visibility='default' filepath='include/linux/mm_types.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='1c2d6ac7' visibility='default' filepath='include/linux/mm_types.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='ce8e16a4' visibility='default' filepath='include/linux/mm_types.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='b32fec8c' visibility='default' filepath='include/linux/mm_types.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='754ab6d5' visibility='default' filepath='include/linux/mm_types.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/mm_types.h' line='177' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__11' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='80' column='1' id='9228d425'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lru' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mapping' type-id='f57039f0' visibility='default' filepath='include/linux/mm_types.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='index' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='private' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='address_space' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='457' column='1' id='0fd82dc2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='host' type-id='7e666abe' visibility='default' filepath='include/linux/fs.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='i_pages' type-id='d39738ac' visibility='default' filepath='include/linux/fs.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='gfp_mask' type-id='3eb7c31c' visibility='default' filepath='include/linux/fs.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='i_mmap_writable' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='i_mmap' type-id='6fe1603d' visibility='default' filepath='include/linux/fs.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='i_mmap_rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/fs.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nrpages' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nrexceptional' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='writeback_index' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='a_ops' type-id='7311f672' visibility='default' filepath='include/linux/fs.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='wb_err' type-id='1da55f79' visibility='default' filepath='include/linux/fs.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='private_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='private_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='481' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xarray' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/xarray.h' line='292' column='1' id='d39738ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xa_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/xarray.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='xa_flags' type-id='3eb7c31c' visibility='default' filepath='include/linux/xarray.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='xa_head' type-id='eaa32e2f' visibility='default' filepath='include/linux/xarray.h' line='296' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='gfp_t' type-id='f0981eeb' filepath='include/linux/types.h' line='153' column='1' id='3eb7c31c'/>
+      <class-decl name='rb_root_cached' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/rbtree.h' line='125' column='1' id='6fe1603d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_root' type-id='dec44472' visibility='default' filepath='include/linux/rbtree.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rb_leftmost' type-id='e6532500' visibility='default' filepath='include/linux/rbtree.h' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rb_root' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/rbtree.h' line='31' column='1' id='dec44472'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_node' type-id='e6532500' visibility='default' filepath='include/linux/rbtree.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rw_semaphore' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/rwsem.h' line='36' column='1' id='f19fdb93'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f22a8abb' visibility='default' filepath='include/linux/rwsem.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='f22a8abb' visibility='default' filepath='include/linux/rwsem.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='osq' type-id='0c3105cd' visibility='default' filepath='include/linux/rwsem.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='wait_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/rwsem.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='wait_list' type-id='72f469ec' visibility='default' filepath='include/linux/rwsem.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_vendor_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/rwsem.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='raw_spinlock_t' type-id='f106d0e5' filepath='include/linux/spinlock_types.h' line='29' column='1' id='f5c90b3f'/>
+      <class-decl name='address_space_operations' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='369' column='1' id='66fa8ce5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='writepage' type-id='8b8bc11e' visibility='default' filepath='include/linux/fs.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='readpage' type-id='ab57fa9e' visibility='default' filepath='include/linux/fs.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='writepages' type-id='01ffd89c' visibility='default' filepath='include/linux/fs.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_page_dirty' type-id='1654d99a' visibility='default' filepath='include/linux/fs.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='readpages' type-id='230dd919' visibility='default' filepath='include/linux/fs.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write_begin' type-id='4eb95ade' visibility='default' filepath='include/linux/fs.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write_end' type-id='e6da64f6' visibility='default' filepath='include/linux/fs.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bmap' type-id='aecbf18b' visibility='default' filepath='include/linux/fs.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='invalidatepage' type-id='d8db14d1' visibility='default' filepath='include/linux/fs.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='releasepage' type-id='919b335b' visibility='default' filepath='include/linux/fs.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='freepage' type-id='2f974a69' visibility='default' filepath='include/linux/fs.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='direct_IO' type-id='227e209d' visibility='default' filepath='include/linux/fs.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='migratepage' type-id='10451dea' visibility='default' filepath='include/linux/fs.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='isolate_page' type-id='a8faf36f' visibility='default' filepath='include/linux/fs.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='putback_page' type-id='2f974a69' visibility='default' filepath='include/linux/fs.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='launder_page' type-id='1654d99a' visibility='default' filepath='include/linux/fs.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='is_partially_uptodate' type-id='800c67c2' visibility='default' filepath='include/linux/fs.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='is_dirty_writeback' type-id='6af64a09' visibility='default' filepath='include/linux/fs.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='error_remove_page' type-id='2c5f769d' visibility='default' filepath='include/linux/fs.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='swap_activate' type-id='2eb7248e' visibility='default' filepath='include/linux/fs.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='swap_deactivate' type-id='88909596' visibility='default' filepath='include/linux/fs.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='421' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='sector_t' type-id='91ce1af9' filepath='include/linux/types.h' line='130' column='1' id='a42536cd'/>
+      <class-decl name='kiocb' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='325' column='1' id='da62d64b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ki_filp' type-id='77e79a4b' visibility='default' filepath='include/linux/fs.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ki_pos' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ki_complete' type-id='9b28bd76' visibility='default' filepath='include/linux/fs.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ki_flags' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='ki_hint' type-id='1dc6a898' visibility='default' filepath='include/linux/fs.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='ki_ioprio' type-id='1dc6a898' visibility='default' filepath='include/linux/fs.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ki_cookie' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iov_iter' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/uio.h' line='30' column='1' id='f2b4d088'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/linux/uio.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iov_offset' type-id='b59d7dce' visibility='default' filepath='include/linux/uio.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='b59d7dce' visibility='default' filepath='include/linux/uio.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='9b26deed' visibility='default' filepath='include/linux/uio.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='a8aafb60' visibility='default' filepath='include/linux/uio.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__16' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='39' column='1' id='9b26deed'>
+        <data-member access='private'>
+          <var-decl name='iov' type-id='2c556848' visibility='default' filepath='include/linux/uio.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='kvec' type-id='5199c30d' visibility='default' filepath='include/linux/uio.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='bvec' type-id='15c9a01b' visibility='default' filepath='include/linux/uio.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='pipe' type-id='15d29710' visibility='default' filepath='include/linux/uio.h' line='43' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='iovec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/uio.h' line='17' column='1' id='0f042891'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iov_base' type-id='eaa32e2f' visibility='default' filepath='include/uapi/linux/uio.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iov_len' type-id='9e19ad6e' visibility='default' filepath='include/uapi/linux/uio.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kvec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/uio.h' line='16' column='1' id='cd5915d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iov_base' type-id='eaa32e2f' visibility='default' filepath='include/linux/uio.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iov_len' type-id='b59d7dce' visibility='default' filepath='include/linux/uio.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bio_vec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bvec.h' line='18' column='1' id='40af3608'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bv_page' type-id='02f11ed4' visibility='default' filepath='include/linux/bvec.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bv_len' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bv_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pipe_inode_info' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/pipe_fs_i.h' line='48' column='1' id='bed94322'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/pipe_fs_i.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/pipe_fs_i.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nrbufs' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='curbuf' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='buffers' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='readers' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='writers' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='files' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='waiting_writers' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='r_counter' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='w_counter' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='tmp_page' type-id='02f11ed4' visibility='default' filepath='include/linux/pipe_fs_i.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='fasync_readers' type-id='5bb9c75d' visibility='default' filepath='include/linux/pipe_fs_i.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fasync_writers' type-id='5bb9c75d' visibility='default' filepath='include/linux/pipe_fs_i.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bufs' type-id='e15f3242' visibility='default' filepath='include/linux/pipe_fs_i.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='user' type-id='273a7d34' visibility='default' filepath='include/linux/pipe_fs_i.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='wait_queue_head_t' type-id='cff07063' filepath='include/linux/wait.h' line='38' column='1' id='b5ab048f'/>
+      <class-decl name='wait_queue_head' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/wait.h' line='34' column='1' id='cff07063'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/wait.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/linux/wait.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fasync_struct' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1368' column='1' id='70c545cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fa_lock' type-id='ac16795b' visibility='default' filepath='include/linux/fs.h' line='1369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fa_fd' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fa_next' type-id='5bb9c75d' visibility='default' filepath='include/linux/fs.h' line='1372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fa_file' type-id='77e79a4b' visibility='default' filepath='include/linux/fs.h' line='1373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fa_rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='1374' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='rwlock_t' type-id='d7ab0a14' filepath='include/linux/rwlock_types.h' line='20' column='1' id='ac16795b'/>
+      <class-decl name='__anonymous_struct__12' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='ac16795b' visibility='default' filepath='include/linux/rwlock_types.h' line='11' column='1' id='d7ab0a14'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='raw_lock' type-id='fed2d8ee' visibility='default' filepath='include/linux/rwlock_types.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='arch_rwlock_t' type-id='319e0e18' filepath='include/asm-generic/qrwlock_types.h' line='27' column='1' id='fed2d8ee'/>
+      <class-decl name='qrwlock' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='13' column='1' id='319e0e18'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='54d74023' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wait_lock' type-id='641c41d1' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__17' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='14' column='1' id='54d74023'>
+        <data-member access='private'>
+          <var-decl name='cnts' type-id='49178f86' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='f29807b6' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='16' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__13' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='16' column='1' id='f29807b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wlocked' type-id='f9b06939' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='__lstate' type-id='930ea9f9' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pipe_buffer' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/pipe_fs_i.h' line='21' column='1' id='a490b814'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page' type-id='02f11ed4' visibility='default' filepath='include/linux/pipe_fs_i.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='edef9855' visibility='default' filepath='include/linux/pipe_fs_i.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='private' type-id='7359adad' visibility='default' filepath='include/linux/pipe_fs_i.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pipe_buf_operations' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/pipe_fs_i.h' line='75' column='1' id='ed6c59ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='confirm' type-id='254733eb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release' type-id='941a57ca' visibility='default' filepath='include/linux/pipe_fs_i.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='steal' type-id='254733eb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get' type-id='c2ab7955' visibility='default' filepath='include/linux/pipe_fs_i.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='user_struct' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/sched/user.h' line='14' column='1' id='ddd7cbfe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__count' type-id='64615833' visibility='default' filepath='include/linux/sched/user.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='processes' type-id='49178f86' visibility='default' filepath='include/linux/sched/user.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sigpending' type-id='49178f86' visibility='default' filepath='include/linux/sched/user.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='epoll_watches' type-id='f22a8abb' visibility='default' filepath='include/linux/sched/user.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='locked_shm' type-id='7359adad' visibility='default' filepath='include/linux/sched/user.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unix_inflight' type-id='7359adad' visibility='default' filepath='include/linux/sched/user.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pipe_bufs' type-id='f22a8abb' visibility='default' filepath='include/linux/sched/user.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='uidhash_node' type-id='03a4a074' visibility='default' filepath='include/linux/sched/user.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/sched/user.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='locked_vm' type-id='f22a8abb' visibility='default' filepath='include/linux/sched/user.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ratelimit' type-id='8b829a50' visibility='default' filepath='include/linux/sched/user.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/user.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/user.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ratelimit_state' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/ratelimit.h' line='15' column='1' id='8b829a50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/ratelimit.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='interval' type-id='95e97e5e' visibility='default' filepath='include/linux/ratelimit.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='burst' type-id='95e97e5e' visibility='default' filepath='include/linux/ratelimit.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='printed' type-id='95e97e5e' visibility='default' filepath='include/linux/ratelimit.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='missed' type-id='95e97e5e' visibility='default' filepath='include/linux/ratelimit.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='begin' type-id='7359adad' visibility='default' filepath='include/linux/ratelimit.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/ratelimit.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__18' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='45' column='1' id='a8aafb60'>
+        <data-member access='private'>
+          <var-decl name='nr_segs' type-id='7359adad' visibility='default' filepath='include/linux/uio.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='1570e040' visibility='default' filepath='include/linux/uio.h' line='47' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__14' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='47' column='1' id='1570e040'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idx' type-id='95e97e5e' visibility='default' filepath='include/linux/uio.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='start_idx' type-id='95e97e5e' visibility='default' filepath='include/linux/uio.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='migrate_mode' filepath='include/linux/migrate_mode.h' line='15' column='1' id='157252dd'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MIGRATE_ASYNC' value='0'/>
+        <enumerator name='MIGRATE_SYNC_LIGHT' value='1'/>
+        <enumerator name='MIGRATE_SYNC' value='2'/>
+        <enumerator name='MIGRATE_SYNC_NO_COPY' value='3'/>
+      </enum-decl>
+      <typedef-decl name='isolate_mode_t' type-id='f0981eeb' filepath='include/linux/mmzone.h' line='322' column='1' id='9c5c646e'/>
+      <typedef-decl name='errseq_t' type-id='19c2251e' filepath='include/linux/errseq.h' line='8' column='1' id='1da55f79'/>
+      <class-decl name='__anonymous_struct__15' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='98' column='1' id='5f2b8baf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dma_addr' type-id='cf29c9b3' visibility='default' filepath='include/linux/mm_types.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__16' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='105' column='1' id='7d00e4f0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='c06bf9dd' visibility='default' filepath='include/linux/mm_types.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='slab_cache' type-id='f3b4aca8' visibility='default' filepath='include/linux/mm_types.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='freelist' type-id='eaa32e2f' visibility='default' filepath='include/linux/mm_types.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='77c8e02e' visibility='default' filepath='include/linux/mm_types.h' line='122' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__19' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='106' column='1' id='c06bf9dd'>
+        <data-member access='private'>
+          <var-decl name='slab_list' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='5e3b2ede' visibility='default' filepath='include/linux/mm_types.h' line='108' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__17' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='108' column='1' id='5e3b2ede'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='02f11ed4' visibility='default' filepath='include/linux/mm_types.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pages' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pobjects' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types.h' line='112' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__20' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='122' column='1' id='77c8e02e'>
+        <data-member access='private'>
+          <var-decl name='s_mem' type-id='eaa32e2f' visibility='default' filepath='include/linux/mm_types.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='counters' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='26dfc30c' visibility='default' filepath='include/linux/mm_types.h' line='125' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__18' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='125' column='1' id='26dfc30c'>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='inuse' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='objects' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frozen' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__19' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='132' column='1' id='1c2d6ac7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='compound_head' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='compound_dtor' type-id='002ac4a6' visibility='default' filepath='include/linux/mm_types.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='compound_order' type-id='002ac4a6' visibility='default' filepath='include/linux/mm_types.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='compound_mapcount' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__20' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='140' column='1' id='ce8e16a4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_compound_pad_1' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_compound_pad_2' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='deferred_list' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='144' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__21' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='146' column='1' id='b32fec8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_pt_pad_1' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pmd_huge_pte' type-id='c28b9700' visibility='default' filepath='include/linux/mm_types.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_pt_pad_2' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='787e8237' visibility='default' filepath='include/linux/mm_types.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ptl' type-id='fb4018a0' visibility='default' filepath='include/linux/mm_types.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pgtable_t' type-id='02f11ed4' filepath='arch/arm64/include/asm/page.h' line='31' column='1' id='c28b9700'/>
+      <union-decl name='__anonymous_union__21' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='150' column='1' id='787e8237'>
+        <data-member access='private'>
+          <var-decl name='pt_mm' type-id='df4b7819' visibility='default' filepath='include/linux/mm_types.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='pt_frag_refcount' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='152' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='mm_struct' size-in-bits='7232' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='385' column='1' id='311626f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='37b0b969' visibility='default' filepath='include/linux/mm_types.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='cpu_bitmap' type-id='c99b5ecd' visibility='default' filepath='include/linux/mm_types.h' line='549' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__22' size-in-bits='7232' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='386' column='1' id='37b0b969'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mmap' type-id='2ae08426' visibility='default' filepath='include/linux/mm_types.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mm_rb' type-id='dec44472' visibility='default' filepath='include/linux/mm_types.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vmacache_seqnum' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_unmapped_area' type-id='d44a8cec' visibility='default' filepath='include/linux/mm_types.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mmap_base' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mmap_legacy_base' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='task_size' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='highest_vm_end' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pgd' type-id='2e97ceaf' visibility='default' filepath='include/linux/mm_types.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='membarrier_state' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='mm_users' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mm_count' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='pgtables_bytes' type-id='f22a8abb' visibility='default' filepath='include/linux/mm_types.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='map_count' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='page_table_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mm_types.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='mmap_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/mm_types.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='mmlist' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='hiwater_rss' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='hiwater_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='total_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='locked_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='pinned_vm' type-id='28ee064c' visibility='default' filepath='include/linux/mm_types.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='data_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='exec_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='stack_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='def_flags' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='arg_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mm_types.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='start_code' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='end_code' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='start_data' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='end_data' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='start_brk' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='brk' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='start_stack' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='arg_start' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='arg_end' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='env_start' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='env_end' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='saved_auxv' type-id='d964a553' visibility='default' filepath='include/linux/mm_types.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='rss_stat' type-id='2235a2cb' visibility='default' filepath='include/linux/mm_types.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='binfmt' type-id='7cc59444' visibility='default' filepath='include/linux/mm_types.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='context' type-id='0eb9c3fd' visibility='default' filepath='include/linux/mm_types.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='core_state' type-id='90ad83aa' visibility='default' filepath='include/linux/mm_types.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='ioctx_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mm_types.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='ioctx_table' type-id='122191b2' visibility='default' filepath='include/linux/mm_types.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='owner' type-id='f23e2572' visibility='default' filepath='include/linux/mm_types.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/mm_types.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='exe_file' type-id='77e79a4b' visibility='default' filepath='include/linux/mm_types.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='mmu_notifier_mm' type-id='cc546a3e' visibility='default' filepath='include/linux/mm_types.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='tlb_flush_pending' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='uprobes_state' type-id='6308a819' visibility='default' filepath='include/linux/mm_types.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='async_put_work' type-id='ef9025d0' visibility='default' filepath='include/linux/mm_types.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='android_vendor_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='542' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vm_area_struct' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='294' column='1' id='62c85860'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vm_start' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vm_end' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vm_next' type-id='2ae08426' visibility='default' filepath='include/linux/mm_types.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vm_prev' type-id='2ae08426' visibility='default' filepath='include/linux/mm_types.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vm_rb' type-id='2a8a6332' visibility='default' filepath='include/linux/mm_types.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rb_subtree_gap' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='vm_mm' type-id='df4b7819' visibility='default' filepath='include/linux/mm_types.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='vm_page_prot' type-id='2e2dcbd3' visibility='default' filepath='include/linux/mm_types.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vm_flags' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='' type-id='cc072175' visibility='default' filepath='include/linux/mm_types.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='anon_vma_chain' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='anon_vma' type-id='a8f86cda' visibility='default' filepath='include/linux/mm_types.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='vm_ops' type-id='9be87662' visibility='default' filepath='include/linux/mm_types.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='vm_pgoff' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='vm_file' type-id='77e79a4b' visibility='default' filepath='include/linux/mm_types.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='vm_private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mm_types.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='swap_readahead_info' type-id='f22a8abb' visibility='default' filepath='include/linux/mm_types.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='vm_userfaultfd_ctx' type-id='fdd6214e' visibility='default' filepath='include/linux/mm_types.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_vendor_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='370' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pgprot_t' type-id='051883a9' filepath='arch/arm64/include/asm/pgtable-types.h' line='42' column='1' id='2e2dcbd3'/>
+      <class-decl name='__anonymous_struct__23' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='2e2dcbd3' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='42' column='1' id='051883a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pgprot' type-id='e044eb0d' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pteval_t' type-id='91ce1af9' filepath='arch/arm64/include/asm/pgtable-types.h' line='14' column='1' id='e044eb0d'/>
+      <union-decl name='__anonymous_union__22' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='328' column='1' id='cc072175'>
+        <data-member access='private'>
+          <var-decl name='shared' type-id='0c408f16' visibility='default' filepath='include/linux/mm_types.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='anon_name' type-id='80f4b756' visibility='default' filepath='include/linux/mm_types.h' line='333' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__24' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='329' column='1' id='0c408f16'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb' type-id='2a8a6332' visibility='default' filepath='include/linux/mm_types.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rb_subtree_last' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='331' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vm_operations_struct' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/mm.h' line='542' column='1' id='19795245'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='170cc62f' visibility='default' filepath='include/linux/mm.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='close' type-id='170cc62f' visibility='default' filepath='include/linux/mm.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='split' type-id='6910c028' visibility='default' filepath='include/linux/mm.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mremap' type-id='6910c028' visibility='default' filepath='include/linux/mm.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fault' type-id='bb28da1c' visibility='default' filepath='include/linux/mm.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='huge_fault' type-id='5e15576d' visibility='default' filepath='include/linux/mm.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='map_pages' type-id='8f17d05e' visibility='default' filepath='include/linux/mm.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pagesize' type-id='1a17e40d' visibility='default' filepath='include/linux/mm.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='page_mkwrite' type-id='bb28da1c' visibility='default' filepath='include/linux/mm.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pfn_mkwrite' type-id='bb28da1c' visibility='default' filepath='include/linux/mm.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='access' type-id='6850e780' visibility='default' filepath='include/linux/mm.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='name' type-id='e803acd0' visibility='default' filepath='include/linux/mm.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='find_special_page' type-id='d9e60bb2' visibility='default' filepath='include/linux/mm.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_vendor_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='607' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='vm_fault_t' type-id='f0981eeb' filepath='include/linux/mm_types.h' line='666' column='1' id='e9265215'/>
+      <class-decl name='vm_fault' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/mm.h' line='488' column='1' id='807afe73'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vma' type-id='2ae08426' visibility='default' filepath='include/linux/mm.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/mm.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='gfp_mask' type-id='3eb7c31c' visibility='default' filepath='include/linux/mm.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pgoff' type-id='7359adad' visibility='default' filepath='include/linux/mm.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='address' type-id='7359adad' visibility='default' filepath='include/linux/mm.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pmd' type-id='6d5994d5' visibility='default' filepath='include/linux/mm.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pud' type-id='af00e73d' visibility='default' filepath='include/linux/mm.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='orig_pte' type-id='4b2795fc' visibility='default' filepath='include/linux/mm.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cow_page' type-id='02f11ed4' visibility='default' filepath='include/linux/mm.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='memcg' type-id='223696fb' visibility='default' filepath='include/linux/mm.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='page' type-id='02f11ed4' visibility='default' filepath='include/linux/mm.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='pte' type-id='e8d572d7' visibility='default' filepath='include/linux/mm.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ptl' type-id='cff2d845' visibility='default' filepath='include/linux/mm.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='prealloc_pte' type-id='c28b9700' visibility='default' filepath='include/linux/mm.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='vma_flags' type-id='7359adad' visibility='default' filepath='include/linux/mm.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='vma_page_prot' type-id='2e2dcbd3' visibility='default' filepath='include/linux/mm.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_vendor_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_vendor_data2' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='527' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pmd_t' type-id='ed9a87e0' filepath='arch/arm64/include/asm/pgtable-types.h' line='27' column='1' id='9ecf9226'/>
+      <class-decl name='__anonymous_struct__25' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='9ecf9226' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='27' column='1' id='ed9a87e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pmd' type-id='cb5c7c0f' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pmdval_t' type-id='91ce1af9' filepath='arch/arm64/include/asm/pgtable-types.h' line='15' column='1' id='cb5c7c0f'/>
+      <typedef-decl name='pud_t' type-id='735a5a3d' filepath='include/asm-generic/pgtable-nop4d-hack.h' line='15' column='1' id='ac9f3c7e'/>
+      <class-decl name='__anonymous_struct__26' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='ac9f3c7e' visibility='default' filepath='include/asm-generic/pgtable-nop4d-hack.h' line='15' column='1' id='735a5a3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pgd' type-id='12aa8ce4' visibility='default' filepath='include/asm-generic/pgtable-nop4d-hack.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pgd_t' type-id='59473550' filepath='arch/arm64/include/asm/pgtable-types.h' line='38' column='1' id='12aa8ce4'/>
+      <class-decl name='__anonymous_struct__27' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='12aa8ce4' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='38' column='1' id='59473550'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pgd' type-id='df6d7e75' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pgdval_t' type-id='91ce1af9' filepath='arch/arm64/include/asm/pgtable-types.h' line='17' column='1' id='df6d7e75'/>
+      <typedef-decl name='pte_t' type-id='d7f0cb3c' filepath='arch/arm64/include/asm/pgtable-types.h' line='22' column='1' id='4b2795fc'/>
+      <class-decl name='__anonymous_struct__28' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='4b2795fc' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='22' column='1' id='d7f0cb3c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pte' type-id='e044eb0d' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='page_entry_size' filepath='include/linux/mm.h' line='531' column='1' id='5555b4b4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PE_SIZE_PTE' value='0'/>
+        <enumerator name='PE_SIZE_PMD' value='1'/>
+        <enumerator name='PE_SIZE_PUD' value='2'/>
+      </enum-decl>
+      <class-decl name='vm_userfaultfd_ctx' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='285' column='1' id='fdd6214e'/>
+      <class-decl name='mm_rss_stat' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mm_types_task.h' line='60' column='1' id='2235a2cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='b6b7435e' visibility='default' filepath='include/linux/mm_types_task.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='mm_context_t' type-id='7319f51c' filepath='arch/arm64/include/asm/mmu.h' line='23' column='1' id='0eb9c3fd'/>
+      <class-decl name='__anonymous_struct__29' size-in-bits='192' is-struct='yes' is-anonymous='yes' naming-typedef-id='0eb9c3fd' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='19' column='1' id='7319f51c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='28ee064c' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vdso' type-id='eaa32e2f' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='core_state' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='378' column='1' id='0e1f7cac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_threads' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dumper' type-id='f3d147c3' visibility='default' filepath='include/linux/mm_types.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='startup' type-id='f9fef04f' visibility='default' filepath='include/linux/mm_types.h' line='381' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='core_thread' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='373' column='1' id='f3d147c3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/mm_types.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='740b5503' visibility='default' filepath='include/linux/mm_types.h' line='375' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_struct' size-in-bits='30208' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='636' column='1' id='bc3f1924'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='thread_info' type-id='575a2c7a' visibility='default' filepath='include/linux/sched.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state' type-id='5efddaac' visibility='default' filepath='include/linux/sched.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='stack' type-id='eaa32e2f' visibility='default' filepath='include/linux/sched.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='include/linux/sched.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ptrace' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wake_entry' type-id='c5ccfee8' visibility='default' filepath='include/linux/sched.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='on_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='wakee_flips' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='wakee_flip_decay_ts' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='last_wakee' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='recent_used_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='wake_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='678' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='on_rq' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='prio' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='static_prio' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='normal_prio' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rt_priority' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='sched_class' type-id='162b4cce' visibility='default' filepath='include/linux/sched.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='se' type-id='2561fcb2' visibility='default' filepath='include/linux/sched.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='rt' type-id='29843697' visibility='default' filepath='include/linux/sched.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='sched_task_group' type-id='3c32f9de' visibility='default' filepath='include/linux/sched.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='dl' type-id='2d494b2d' visibility='default' filepath='include/linux/sched.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='uclamp_req' type-id='c6e3c250' visibility='default' filepath='include/linux/sched.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='uclamp' type-id='c6e3c250' visibility='default' filepath='include/linux/sched.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='preempt_notifiers' type-id='e151255a' visibility='default' filepath='include/linux/sched.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='policy' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8416'>
+          <var-decl name='nr_cpus_allowed' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='cpus_ptr' type-id='af4bd535' visibility='default' filepath='include/linux/sched.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='cpus_mask' type-id='90bc6bed' visibility='default' filepath='include/linux/sched.h' line='720' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='rcu_read_lock_nesting' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8608'>
+          <var-decl name='rcu_read_unlock_special' type-id='a324790e' visibility='default' filepath='include/linux/sched.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='rcu_node_entry' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='rcu_blocked_node' type-id='d5d06540' visibility='default' filepath='include/linux/sched.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='rcu_tasks_nvcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='rcu_tasks_holdout' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8904'>
+          <var-decl name='rcu_tasks_idx' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8928'>
+          <var-decl name='rcu_tasks_idle_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='rcu_tasks_holdout_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='sched_info' type-id='59ddd03d' visibility='default' filepath='include/linux/sched.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='tasks' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='pushable_tasks' type-id='e3a91a7c' visibility='default' filepath='include/linux/sched.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='pushable_dl_tasks' type-id='2a8a6332' visibility='default' filepath='include/linux/sched.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='mm' type-id='df4b7819' visibility='default' filepath='include/linux/sched.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='active_mm' type-id='df4b7819' visibility='default' filepath='include/linux/sched.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='vmacache' type-id='4f79f8f3' visibility='default' filepath='include/linux/sched.h' line='749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='rss_stat' type-id='dfedb05a' visibility='default' filepath='include/linux/sched.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10592'>
+          <var-decl name='exit_state' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='exit_code' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10656'>
+          <var-decl name='exit_signal' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='pdeath_signal' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='jobctl' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='personality' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='sched_reset_on_fork' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='sched_contributes_to_load' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='sched_migrated' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='sched_remote_wakeup' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='sched_psi_wake_requeue' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='in_execve' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='in_iowait' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='in_user_fault' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='no_cgroup_migration' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='frozen' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='use_memdelay' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='atomic_flags' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='restart_block' type-id='45e819d6' visibility='default' filepath='include/linux/sched.h' line='804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='pid' type-id='587f89d2' visibility='default' filepath='include/linux/sched.h' line='806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11424'>
+          <var-decl name='tgid' type-id='587f89d2' visibility='default' filepath='include/linux/sched.h' line='807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11456'>
+          <var-decl name='stack_canary' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='real_parent' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='820' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='parent' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='823' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='828' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='sibling' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='group_leader' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='830' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='ptraced' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='ptrace_entry' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='thread_pid' type-id='b94e5398' visibility='default' filepath='include/linux/sched.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='pid_links' type-id='3f6e320a' visibility='default' filepath='include/linux/sched.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='thread_group' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='thread_node' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='vfork_done' type-id='389faaf7' visibility='default' filepath='include/linux/sched.h' line='847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='set_child_tid' type-id='7292109c' visibility='default' filepath='include/linux/sched.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='clear_child_tid' type-id='7292109c' visibility='default' filepath='include/linux/sched.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='utime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13312'>
+          <var-decl name='stime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='gtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13440'>
+          <var-decl name='time_in_state' type-id='3df9fd28' visibility='default' filepath='include/linux/sched.h' line='863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='max_state' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13568'>
+          <var-decl name='prev_cputime' type-id='9c7bf560' visibility='default' filepath='include/linux/sched.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13760'>
+          <var-decl name='nvcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13824'>
+          <var-decl name='nivcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13888'>
+          <var-decl name='start_time' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13952'>
+          <var-decl name='real_start_time' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14016'>
+          <var-decl name='min_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14080'>
+          <var-decl name='maj_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14144'>
+          <var-decl name='posix_cputimers' type-id='1069de27' visibility='default' filepath='include/linux/sched.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14784'>
+          <var-decl name='ptracer_cred' type-id='bc33861a' visibility='default' filepath='include/linux/sched.h' line='894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14848'>
+          <var-decl name='real_cred' type-id='bc33861a' visibility='default' filepath='include/linux/sched.h' line='897' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14912'>
+          <var-decl name='cred' type-id='bc33861a' visibility='default' filepath='include/linux/sched.h' line='900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14976'>
+          <var-decl name='cached_requested_key' type-id='204a4632' visibility='default' filepath='include/linux/sched.h' line='904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15040'>
+          <var-decl name='comm' type-id='ac1fa8c0' visibility='default' filepath='include/linux/sched.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15168'>
+          <var-decl name='nameidata' type-id='26452515' visibility='default' filepath='include/linux/sched.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15232'>
+          <var-decl name='fs' type-id='08890290' visibility='default' filepath='include/linux/sched.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15296'>
+          <var-decl name='files' type-id='16c53416' visibility='default' filepath='include/linux/sched.h' line='930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15360'>
+          <var-decl name='nsproxy' type-id='dc5ce118' visibility='default' filepath='include/linux/sched.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15424'>
+          <var-decl name='signal' type-id='a91cd5f7' visibility='default' filepath='include/linux/sched.h' line='936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15488'>
+          <var-decl name='sighand' type-id='32cc1711' visibility='default' filepath='include/linux/sched.h' line='937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15552'>
+          <var-decl name='blocked' type-id='daf33c64' visibility='default' filepath='include/linux/sched.h' line='938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15616'>
+          <var-decl name='real_blocked' type-id='daf33c64' visibility='default' filepath='include/linux/sched.h' line='939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15680'>
+          <var-decl name='saved_sigmask' type-id='daf33c64' visibility='default' filepath='include/linux/sched.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15744'>
+          <var-decl name='pending' type-id='7b5c012d' visibility='default' filepath='include/linux/sched.h' line='942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15936'>
+          <var-decl name='sas_ss_sp' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16000'>
+          <var-decl name='sas_ss_size' type-id='b59d7dce' visibility='default' filepath='include/linux/sched.h' line='944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16064'>
+          <var-decl name='sas_ss_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16128'>
+          <var-decl name='task_works' type-id='69c138b1' visibility='default' filepath='include/linux/sched.h' line='947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16192'>
+          <var-decl name='audit_context' type-id='a9f319d2' visibility='default' filepath='include/linux/sched.h' line='951' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16256'>
+          <var-decl name='loginuid' type-id='d80b72e6' visibility='default' filepath='include/linux/sched.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16288'>
+          <var-decl name='sessionid' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16320'>
+          <var-decl name='seccomp' type-id='298af459' visibility='default' filepath='include/linux/sched.h' line='956' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16448'>
+          <var-decl name='parent_exec_id' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16512'>
+          <var-decl name='self_exec_id' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='960' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16576'>
+          <var-decl name='alloc_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/sched.h' line='963' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16608'>
+          <var-decl name='pi_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/sched.h' line='966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16640'>
+          <var-decl name='wake_q' type-id='69970be2' visibility='default' filepath='include/linux/sched.h' line='968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16704'>
+          <var-decl name='pi_waiters' type-id='6fe1603d' visibility='default' filepath='include/linux/sched.h' line='972' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16832'>
+          <var-decl name='pi_top_task' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16896'>
+          <var-decl name='pi_blocked_on' type-id='54d4ed50' visibility='default' filepath='include/linux/sched.h' line='976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16960'>
+          <var-decl name='journal_info' type-id='eaa32e2f' visibility='default' filepath='include/linux/sched.h' line='1017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17024'>
+          <var-decl name='bio_list' type-id='ee802604' visibility='default' filepath='include/linux/sched.h' line='1020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17088'>
+          <var-decl name='plug' type-id='39944481' visibility='default' filepath='include/linux/sched.h' line='1024' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17152'>
+          <var-decl name='reclaim_state' type-id='c78f98c0' visibility='default' filepath='include/linux/sched.h' line='1028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17216'>
+          <var-decl name='backing_dev_info' type-id='ef4fae1b' visibility='default' filepath='include/linux/sched.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17280'>
+          <var-decl name='io_context' type-id='d042cfad' visibility='default' filepath='include/linux/sched.h' line='1032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17344'>
+          <var-decl name='capture_control' type-id='f886696f' visibility='default' filepath='include/linux/sched.h' line='1035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17408'>
+          <var-decl name='ptrace_message' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='1038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17472'>
+          <var-decl name='last_siginfo' type-id='3638c201' visibility='default' filepath='include/linux/sched.h' line='1039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17536'>
+          <var-decl name='ioac' type-id='ca075c7f' visibility='default' filepath='include/linux/sched.h' line='1041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18048'>
+          <var-decl name='psi_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='1044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18112'>
+          <var-decl name='acct_rss_mem1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18176'>
+          <var-decl name='acct_vm_mem1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18240'>
+          <var-decl name='acct_timexpd' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18304'>
+          <var-decl name='mems_allowed' type-id='6a7d16bb' visibility='default' filepath='include/linux/sched.h' line='1056' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18368'>
+          <var-decl name='mems_allowed_seq' type-id='e14c3b11' visibility='default' filepath='include/linux/sched.h' line='1058' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18400'>
+          <var-decl name='cpuset_mem_spread_rotor' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1059' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18432'>
+          <var-decl name='cpuset_slab_spread_rotor' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1060' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18496'>
+          <var-decl name='cgroups' type-id='85d57723' visibility='default' filepath='include/linux/sched.h' line='1064' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18560'>
+          <var-decl name='cg_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='1066' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18688'>
+          <var-decl name='robust_list' type-id='c44b3996' visibility='default' filepath='include/linux/sched.h' line='1073' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18752'>
+          <var-decl name='compat_robust_list' type-id='917bb1c5' visibility='default' filepath='include/linux/sched.h' line='1075' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18816'>
+          <var-decl name='pi_state_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='1077' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18944'>
+          <var-decl name='pi_state_cache' type-id='0bbc9f87' visibility='default' filepath='include/linux/sched.h' line='1078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19008'>
+          <var-decl name='futex_exit_mutex' type-id='925167dc' visibility='default' filepath='include/linux/sched.h' line='1079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19264'>
+          <var-decl name='futex_state' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='1080' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='perf_event_ctxp' type-id='c7e7059f' visibility='default' filepath='include/linux/sched.h' line='1083' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19456'>
+          <var-decl name='perf_event_mutex' type-id='925167dc' visibility='default' filepath='include/linux/sched.h' line='1084' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19712'>
+          <var-decl name='perf_event_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='1085' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='tlb_ubc' type-id='a3d9f566' visibility='default' filepath='include/linux/sched.h' line='1156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='' type-id='b45135d0' visibility='default' filepath='include/linux/sched.h' line='1158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19968'>
+          <var-decl name='splice_pipe' type-id='15d29710' visibility='default' filepath='include/linux/sched.h' line='1164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='task_frag' type-id='06c0432f' visibility='default' filepath='include/linux/sched.h' line='1166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20160'>
+          <var-decl name='nr_dirtied' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20192'>
+          <var-decl name='nr_dirtied_pause' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20224'>
+          <var-decl name='dirty_paused_when' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='1183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20288'>
+          <var-decl name='timer_slack_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20352'>
+          <var-decl name='default_timer_slack_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20416'>
+          <var-decl name='trace' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='1223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20480'>
+          <var-decl name='trace_recursion' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='1226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20544'>
+          <var-decl name='memcg_in_oom' type-id='223696fb' visibility='default' filepath='include/linux/sched.h' line='1252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20608'>
+          <var-decl name='memcg_oom_gfp_mask' type-id='3eb7c31c' visibility='default' filepath='include/linux/sched.h' line='1253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20640'>
+          <var-decl name='memcg_oom_order' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20672'>
+          <var-decl name='memcg_nr_pages_over_high' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='1257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20736'>
+          <var-decl name='active_memcg' type-id='223696fb' visibility='default' filepath='include/linux/sched.h' line='1260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20800'>
+          <var-decl name='throttle_queue' type-id='e7d2a5fc' visibility='default' filepath='include/linux/sched.h' line='1264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20864'>
+          <var-decl name='utask' type-id='9d2cef34' visibility='default' filepath='include/linux/sched.h' line='1268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20928'>
+          <var-decl name='pagefault_disabled' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20992'>
+          <var-decl name='oom_reaper_list' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='1279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21056'>
+          <var-decl name='stack_vm_area' type-id='d295dab2' visibility='default' filepath='include/linux/sched.h' line='1282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21120'>
+          <var-decl name='stack_refcount' type-id='64615833' visibility='default' filepath='include/linux/sched.h' line='1286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21184'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/sched.h' line='1293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21248'>
+          <var-decl name='android_vendor_data1' type-id='24a375b2' visibility='default' filepath='include/linux/sched.h' line='1301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21376'>
+          <var-decl name='android_oem_data1' type-id='24a375b2' visibility='default' filepath='include/linux/sched.h' line='1302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21504'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21568'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21632'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21696'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21760'>
+          <var-decl name='android_kabi_reserved5' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21824'>
+          <var-decl name='android_kabi_reserved6' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21888'>
+          <var-decl name='android_kabi_reserved7' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21952'>
+          <var-decl name='android_kabi_reserved8' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22016'>
+          <var-decl name='thread' type-id='0c8a83c7' visibility='default' filepath='include/linux/sched.h' line='1320' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thread_info' size-in-bits='320' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='26' column='1' id='575a2c7a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr_limit' type-id='f079b4db' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ttbr0' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='9a29bfd9' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='shadow_call_stack' type-id='eaa32e2f' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='mm_segment_t' type-id='7359adad' filepath='arch/arm64/include/asm/thread_info.h' line='21' column='1' id='f079b4db'/>
+      <union-decl name='__anonymous_union__23' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='32' column='1' id='9a29bfd9'>
+        <data-member access='private'>
+          <var-decl name='preempt_count' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='preempt' type-id='45bb8abd' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='42' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__30' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='34' column='1' id='45bb8abd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='need_resched' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_entity' size-in-bits='4096' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='446' column='1' id='2561fcb2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='load' type-id='ad979632' visibility='default' filepath='include/linux/sched.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='runnable_weight' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='run_node' type-id='2a8a6332' visibility='default' filepath='include/linux/sched.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='group_node' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='on_rq' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='exec_start' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sum_exec_runtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vruntime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='prev_sum_exec_runtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_migrations' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='statistics' type-id='4ebe02b2' visibility='default' filepath='include/linux/sched.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='depth' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='parent' type-id='ff2b3d10' visibility='default' filepath='include/linux/sched.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='cfs_rq' type-id='a6892387' visibility='default' filepath='include/linux/sched.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='my_q' type-id='a6892387' visibility='default' filepath='include/linux/sched.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='avg' type-id='629c8d83' visibility='default' filepath='include/linux/sched.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='485' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='load_weight' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='322' column='1' id='ad979632'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='weight' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='inv_weight' type-id='19c2251e' visibility='default' filepath='include/linux/sched.h' line='324' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_statistics' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='410' column='1' id='4ebe02b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wait_start' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wait_count' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='wait_sum' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='iowait_count' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='iowait_sum' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sleep_start' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sleep_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sum_sleep_runtime' type-id='9b7c55ef' visibility='default' filepath='include/linux/sched.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='block_start' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='block_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='exec_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='slice_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_migrations_cold' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='nr_failed_migrations_affine' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nr_failed_migrations_running' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='nr_failed_migrations_hot' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='nr_forced_migrations' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nr_wakeups' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='nr_wakeups_sync' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='nr_wakeups_migrate' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='nr_wakeups_local' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='nr_wakeups_remote' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='nr_wakeups_affine' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='nr_wakeups_affine_attempts' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='nr_wakeups_passive' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='nr_wakeups_idle' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='442' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_avg' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='398' column='1' id='629c8d83'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='last_update_time' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='load_sum' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='runnable_load_sum' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='util_sum' type-id='19c2251e' visibility='default' filepath='include/linux/sched.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='period_contrib' type-id='19c2251e' visibility='default' filepath='include/linux/sched.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='load_avg' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='runnable_load_avg' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='util_avg' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='util_est' type-id='594488ba' visibility='default' filepath='include/linux/sched.h' line='407' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='util_est' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='349' column='1' id='594488ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enqueued' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ewma' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='351' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_rt_entity' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='488' column='1' id='29843697'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='run_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timeout' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='watchdog_stamp' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='time_slice' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='on_rq' type-id='8efea9e5' visibility='default' filepath='include/linux/sched.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='on_list' type-id='8efea9e5' visibility='default' filepath='include/linux/sched.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='back' type-id='9eead88f' visibility='default' filepath='include/linux/sched.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='508' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_dl_entity' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='511' column='1' id='2d494b2d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='include/linux/sched.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dl_runtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dl_deadline' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dl_period' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dl_bw' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dl_density' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='runtime' type-id='9b7c55ef' visibility='default' filepath='include/linux/sched.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='deadline' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='dl_throttled' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='dl_boosted' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='dl_yielded' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='dl_non_contending' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='dl_overrun' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dl_timer' type-id='b6993efc' visibility='default' filepath='include/linux/sched.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='inactive_timer' type-id='b6993efc' visibility='default' filepath='include/linux/sched.h' line='577' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hrtimer' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/hrtimer.h' line='118' column='1' id='b6993efc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='fe3acb42' visibility='default' filepath='include/linux/hrtimer.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='_softexpires' type-id='fbc017ef' visibility='default' filepath='include/linux/hrtimer.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='function' type-id='ca9b3bbf' visibility='default' filepath='include/linux/hrtimer.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='base' type-id='730f4667' visibility='default' filepath='include/linux/hrtimer.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='state' type-id='f9b06939' visibility='default' filepath='include/linux/hrtimer.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='is_rel' type-id='f9b06939' visibility='default' filepath='include/linux/hrtimer.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='is_soft' type-id='f9b06939' visibility='default' filepath='include/linux/hrtimer.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='472'>
+          <var-decl name='is_hard' type-id='f9b06939' visibility='default' filepath='include/linux/hrtimer.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/hrtimer.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timerqueue_node' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/timerqueue.h' line='9' column='1' id='fe3acb42'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='2a8a6332' visibility='default' filepath='include/linux/timerqueue.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='expires' type-id='fbc017ef' visibility='default' filepath='include/linux/timerqueue.h' line='11' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='hrtimer_restart' filepath='include/linux/hrtimer.h' line='65' column='1' id='7313b0ab'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HRTIMER_NORESTART' value='0'/>
+        <enumerator name='HRTIMER_RESTART' value='1'/>
+      </enum-decl>
+      <class-decl name='hrtimer_clock_base' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/hrtimer.h' line='161' column='1' id='1851ab9f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_base' type-id='75e9503b' visibility='default' filepath='include/linux/hrtimer.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='clockid' type-id='a1c3b834' visibility='default' filepath='include/linux/hrtimer.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq' type-id='e14c3b11' visibility='default' filepath='include/linux/hrtimer.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='running' type-id='08c8d0fa' visibility='default' filepath='include/linux/hrtimer.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active' type-id='ff3c7f20' visibility='default' filepath='include/linux/hrtimer.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_time' type-id='7a6c9108' visibility='default' filepath='include/linux/hrtimer.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='offset' type-id='fbc017ef' visibility='default' filepath='include/linux/hrtimer.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hrtimer_cpu_base' size-in-bits='4608' is-struct='yes' visibility='default' filepath='include/linux/hrtimer.h' line='216' column='1' id='8d24b00b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/hrtimer.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='active_bases' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='clock_was_set_seq' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='hres_active' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='in_hrtirq' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='hang_detected' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='softirq_activated' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nr_events' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_retries' type-id='8efea9e5' visibility='default' filepath='include/linux/hrtimer.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='nr_hangs' type-id='8efea9e5' visibility='default' filepath='include/linux/hrtimer.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_hang_time' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='expires_next' type-id='fbc017ef' visibility='default' filepath='include/linux/hrtimer.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='next_timer' type-id='08c8d0fa' visibility='default' filepath='include/linux/hrtimer.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='softirq_expires_next' type-id='fbc017ef' visibility='default' filepath='include/linux/hrtimer.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='softirq_next_timer' type-id='08c8d0fa' visibility='default' filepath='include/linux/hrtimer.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='clock_base' type-id='cb01bf4b' visibility='default' filepath='include/linux/hrtimer.h' line='239' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='clockid_t' type-id='7eb128d4' filepath='include/linux/types.h' line='27' column='1' id='a1c3b834'/>
+      <typedef-decl name='__kernel_clockid_t' type-id='95e97e5e' filepath='include/uapi/asm-generic/posix_types.h' line='93' column='1' id='7eb128d4'/>
+      <class-decl name='timerqueue_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/timerqueue.h' line='14' column='1' id='ff3c7f20'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_root' type-id='6fe1603d' visibility='default' filepath='include/linux/timerqueue.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uclamp_se' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='607' column='1' id='0888126c'>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='value' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='bucket_id' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='user_defined' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='611' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='cpumask_t' type-id='1354385d' filepath='include/linux/cpumask.h' line='17' column='1' id='90bc6bed'/>
+      <class-decl name='cpumask' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/cpumask.h' line='17' column='1' id='1354385d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bits' type-id='f066dd3c' visibility='default' filepath='include/linux/cpumask.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__31' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/sched.h' line='616' column='1' id='4edee319'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='blocked' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='need_qs' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='exp_hint' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='deferred_qs' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='620' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='287' column='1' id='59ddd03d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pcount' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='run_delay' type-id='3a47d82b' visibility='default' filepath='include/linux/sched.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='last_arrival' type-id='3a47d82b' visibility='default' filepath='include/linux/sched.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_queued' type-id='3a47d82b' visibility='default' filepath='include/linux/sched.h' line='303' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='plist_node' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/plist.h' line='83' column='1' id='e3a91a7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prio' type-id='95e97e5e' visibility='default' filepath='include/linux/plist.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prio_list' type-id='72f469ec' visibility='default' filepath='include/linux/plist.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='node_list' type-id='72f469ec' visibility='default' filepath='include/linux/plist.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vmacache' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/mm_types_task.h' line='34' column='1' id='4f79f8f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seqnum' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types_task.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vmas' type-id='ae25b7bc' visibility='default' filepath='include/linux/mm_types_task.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_rss_stat' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/mm_types_task.h' line='54' column='1' id='dfedb05a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='events' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types_task.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='2020bac4' visibility='default' filepath='include/linux/mm_types_task.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='restart_block' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/restart_block.h' line='25' column='1' id='45e819d6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fn' type-id='d5b25e9c' visibility='default' filepath='include/linux/restart_block.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='7f825f2d' visibility='default' filepath='include/linux/restart_block.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__24' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='27' column='1' id='7f825f2d'>
+        <data-member access='private'>
+          <var-decl name='futex' type-id='71f149c6' visibility='default' filepath='include/linux/restart_block.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nanosleep' type-id='5047547d' visibility='default' filepath='include/linux/restart_block.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='poll' type-id='98bfe848' visibility='default' filepath='include/linux/restart_block.h' line='54' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__32' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='29' column='1' id='71f149c6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uaddr' type-id='f9409001' visibility='default' filepath='include/linux/restart_block.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='val' type-id='19c2251e' visibility='default' filepath='include/linux/restart_block.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/restart_block.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bitset' type-id='19c2251e' visibility='default' filepath='include/linux/restart_block.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='time' type-id='91ce1af9' visibility='default' filepath='include/linux/restart_block.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='uaddr2' type-id='f9409001' visibility='default' filepath='include/linux/restart_block.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__33' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='38' column='1' id='5047547d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clockid' type-id='a1c3b834' visibility='default' filepath='include/linux/restart_block.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='58918b27' visibility='default' filepath='include/linux/restart_block.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='95408dfc' visibility='default' filepath='include/linux/restart_block.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='expires' type-id='91ce1af9' visibility='default' filepath='include/linux/restart_block.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='timespec_type' filepath='include/linux/restart_block.h' line='16' column='1' id='58918b27'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TT_NONE' value='0'/>
+        <enumerator name='TT_NATIVE' value='1'/>
+        <enumerator name='TT_COMPAT' value='2'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__25' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='41' column='1' id='95408dfc'>
+        <data-member access='private'>
+          <var-decl name='rmtp' type-id='59229509' visibility='default' filepath='include/linux/restart_block.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='compat_rmtp' type-id='e69c040e' visibility='default' filepath='include/linux/restart_block.h' line='43' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__kernel_timespec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/time_types.h' line='7' column='1' id='5c155a71'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='3d9e85cc' visibility='default' filepath='include/uapi/linux/time_types.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tv_nsec' type-id='1eb56b1e' visibility='default' filepath='include/uapi/linux/time_types.h' line='9' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__kernel_time64_t' type-id='1eb56b1e' filepath='include/uapi/asm-generic/posix_types.h' line='90' column='1' id='3d9e85cc'/>
+      <class-decl name='old_timespec32' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/vdso/time32.h' line='7' column='1' id='f4b65c68'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='5d60da55' visibility='default' filepath='include/vdso/time32.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tv_nsec' type-id='a7832498' visibility='default' filepath='include/vdso/time32.h' line='9' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='old_time32_t' type-id='a7832498' filepath='include/vdso/time32.h' line='5' column='1' id='5d60da55'/>
+      <typedef-decl name='s32' type-id='3158a266' filepath='include/asm-generic/int-ll64.h' line='20' column='1' id='a7832498'/>
+      <typedef-decl name='__s32' type-id='95e97e5e' filepath='include/uapi/asm-generic/int-ll64.h' line='26' column='1' id='3158a266'/>
+      <class-decl name='__anonymous_struct__34' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='48' column='1' id='98bfe848'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ufds' type-id='3ac36db0' visibility='default' filepath='include/linux/restart_block.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nfds' type-id='95e97e5e' visibility='default' filepath='include/linux/restart_block.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='has_timeout' type-id='95e97e5e' visibility='default' filepath='include/linux/restart_block.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tv_sec' type-id='7359adad' visibility='default' filepath='include/linux/restart_block.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tv_nsec' type-id='7359adad' visibility='default' filepath='include/linux/restart_block.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pid_t' type-id='63eb2bf2' filepath='include/linux/types.h' line='22' column='1' id='587f89d2'/>
+      <typedef-decl name='__kernel_pid_t' type-id='95e97e5e' filepath='include/uapi/asm-generic/posix_types.h' line='28' column='1' id='63eb2bf2'/>
+      <class-decl name='pid' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/pid.h' line='59' column='1' id='d10e968a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='64615833' visibility='default' filepath='include/linux/pid.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='level' type-id='f0981eeb' visibility='default' filepath='include/linux/pid.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tasks' type-id='fc3a8480' visibility='default' filepath='include/linux/pid.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wait_pidfd' type-id='b5ab048f' visibility='default' filepath='include/linux/pid.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/pid.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='numbers' type-id='9a69aeec' visibility='default' filepath='include/linux/pid.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='upid' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pid.h' line='54' column='1' id='120c01b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr' type-id='95e97e5e' visibility='default' filepath='include/linux/pid.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ns' type-id='b816e1d0' visibility='default' filepath='include/linux/pid.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pid_namespace' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/pid_namespace.h' line='24' column='1' id='0252e252'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/pid_namespace.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='idr' type-id='37ce495e' visibility='default' filepath='include/linux/pid_namespace.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/pid_namespace.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pid_allocated' type-id='f0981eeb' visibility='default' filepath='include/linux/pid_namespace.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='child_reaper' type-id='f23e2572' visibility='default' filepath='include/linux/pid_namespace.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pid_cachep' type-id='f3b4aca8' visibility='default' filepath='include/linux/pid_namespace.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='level' type-id='f0981eeb' visibility='default' filepath='include/linux/pid_namespace.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='parent' type-id='b816e1d0' visibility='default' filepath='include/linux/pid_namespace.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='proc_mnt' type-id='549da824' visibility='default' filepath='include/linux/pid_namespace.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='proc_self' type-id='27675065' visibility='default' filepath='include/linux/pid_namespace.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='proc_thread_self' type-id='27675065' visibility='default' filepath='include/linux/pid_namespace.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/pid_namespace.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ucounts' type-id='b1d4934a' visibility='default' filepath='include/linux/pid_namespace.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='proc_work' type-id='ef9025d0' visibility='default' filepath='include/linux/pid_namespace.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='pid_gid' type-id='094d8048' visibility='default' filepath='include/linux/pid_namespace.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='hide_pid' type-id='95e97e5e' visibility='default' filepath='include/linux/pid_namespace.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='reboot' type-id='95e97e5e' visibility='default' filepath='include/linux/pid_namespace.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='ns' type-id='99f367f2' visibility='default' filepath='include/linux/pid_namespace.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kref' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/kref.h' line='19' column='1' id='400fb07b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='64615833' visibility='default' filepath='include/linux/kref.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='idr' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/idr.h' line='19' column='1' id='37ce495e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idr_rt' type-id='d39738ac' visibility='default' filepath='include/linux/idr.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idr_base' type-id='f0981eeb' visibility='default' filepath='include/linux/idr.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='idr_next' type-id='f0981eeb' visibility='default' filepath='include/linux/idr.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='work_struct' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='103' column='1' id='ef9025d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='f22a8abb' visibility='default' filepath='include/linux/workqueue.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/workqueue.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='func' type-id='72666d3f' visibility='default' filepath='include/linux/workqueue.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/workqueue.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/workqueue.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='work_func_t' type-id='939280af' filepath='include/linux/workqueue.h' line='22' column='1' id='72666d3f'/>
+      <class-decl name='ns_common' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/ns_common.h' line='7' column='1' id='99f367f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stashed' type-id='f22a8abb' visibility='default' filepath='include/linux/ns_common.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='4598bd2d' visibility='default' filepath='include/linux/ns_common.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='inum' type-id='f0981eeb' visibility='default' filepath='include/linux/ns_common.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='completion' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/completion.h' line='26' column='1' id='f9fef04f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='done' type-id='f0981eeb' visibility='default' filepath='include/linux/completion.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/completion.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='prev_cputime' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='244' column='1' id='9c7bf560'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='utime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/sched.h' line='248' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='posix_cputimers' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/posix-timers.h' line='122' column='1' id='1069de27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bases' type-id='0e685653' visibility='default' filepath='include/linux/posix-timers.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='timers_active' type-id='f0981eeb' visibility='default' filepath='include/linux/posix-timers.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='expiry_active' type-id='f0981eeb' visibility='default' filepath='include/linux/posix-timers.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='posix_cputimer_base' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/posix-timers.h' line='107' column='1' id='e710f78e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nextevt' type-id='91ce1af9' visibility='default' filepath='include/linux/posix-timers.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tqhead' type-id='ff3c7f20' visibility='default' filepath='include/linux/posix-timers.h' line='109' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cred' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/cred.h' line='111' column='1' id='6739dd09'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='49178f86' visibility='default' filepath='include/linux/cred.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/cred.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gid' type-id='094d8048' visibility='default' filepath='include/linux/cred.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='suid' type-id='d80b72e6' visibility='default' filepath='include/linux/cred.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sgid' type-id='094d8048' visibility='default' filepath='include/linux/cred.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='euid' type-id='d80b72e6' visibility='default' filepath='include/linux/cred.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='egid' type-id='094d8048' visibility='default' filepath='include/linux/cred.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='fsuid' type-id='d80b72e6' visibility='default' filepath='include/linux/cred.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fsgid' type-id='094d8048' visibility='default' filepath='include/linux/cred.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='securebits' type-id='f0981eeb' visibility='default' filepath='include/linux/cred.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cap_inheritable' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cap_permitted' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cap_effective' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cap_bset' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cap_ambient' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='jit_keyring' type-id='002ac4a6' visibility='default' filepath='include/linux/cred.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='session_keyring' type-id='204a4632' visibility='default' filepath='include/linux/cred.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='process_keyring' type-id='204a4632' visibility='default' filepath='include/linux/cred.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='thread_keyring' type-id='204a4632' visibility='default' filepath='include/linux/cred.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='request_key_auth' type-id='204a4632' visibility='default' filepath='include/linux/cred.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/cred.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='user' type-id='273a7d34' visibility='default' filepath='include/linux/cred.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/cred.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='group_info' type-id='383471a1' visibility='default' filepath='include/linux/cred.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='' type-id='0a97cc35' visibility='default' filepath='include/linux/cred.h' line='149' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='kernel_cap_t' type-id='923128a5' filepath='include/linux/capability.h' line='26' column='1' id='7496b151'/>
+      <class-decl name='kernel_cap_struct' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/capability.h' line='24' column='1' id='923128a5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap' type-id='839e8989' visibility='default' filepath='include/linux/capability.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/linux/key.h' line='172' column='1' id='128d0ac4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='include/linux/key.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='serial' type-id='c84025ab' visibility='default' filepath='include/linux/key.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='1a65b0a7' visibility='default' filepath='include/linux/key.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sem' type-id='f19fdb93' visibility='default' filepath='include/linux/key.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='user' type-id='23704f74' visibility='default' filepath='include/linux/key.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/key.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='' type-id='21f0eb77' visibility='default' filepath='include/linux/key.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='last_used_at' type-id='1afd27ac' visibility='default' filepath='include/linux/key.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/key.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='gid' type-id='094d8048' visibility='default' filepath='include/linux/key.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='perm' type-id='296adac1' visibility='default' filepath='include/linux/key.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='quotalen' type-id='8efea9e5' visibility='default' filepath='include/linux/key.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='datalen' type-id='8efea9e5' visibility='default' filepath='include/linux/key.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='state' type-id='a2185560' visibility='default' filepath='include/linux/key.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='' type-id='51bb2fb5' visibility='default' filepath='include/linux/key.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='' type-id='d5d77d48' visibility='default' filepath='include/linux/key.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='restrict_link' type-id='92daca01' visibility='default' filepath='include/linux/key.h' line='254' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='key_serial_t' type-id='3ff5601b' filepath='include/linux/key.h' line='28' column='1' id='c84025ab'/>
+      <typedef-decl name='int32_t' type-id='a7832498' filepath='include/linux/types.h' line='103' column='1' id='3ff5601b'/>
+      <union-decl name='__anonymous_union__26' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='175' column='1' id='1a65b0a7'>
+        <data-member access='private'>
+          <var-decl name='graveyard_link' type-id='72f469ec' visibility='default' filepath='include/linux/key.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='serial_node' type-id='2a8a6332' visibility='default' filepath='include/linux/key.h' line='177' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__27' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='182' column='1' id='21f0eb77'>
+        <data-member access='private'>
+          <var-decl name='expiry' type-id='1afd27ac' visibility='default' filepath='include/linux/key.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='revoked_at' type-id='1afd27ac' visibility='default' filepath='include/linux/key.h' line='184' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='key_perm_t' type-id='8f92235e' filepath='include/linux/key.h' line='31' column='1' id='296adac1'/>
+      <union-decl name='__anonymous_union__28' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='219' column='1' id='51bb2fb5'>
+        <data-member access='private'>
+          <var-decl name='index_key' type-id='16ab8749' visibility='default' filepath='include/linux/key.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='5b740cc8' visibility='default' filepath='include/linux/key.h' line='221' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='keyring_index_key' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/key.h' line='91' column='1' id='16ab8749'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='465ca58e' visibility='default' filepath='include/linux/key.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='d0a699d1' visibility='default' filepath='include/linux/key.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='domain_tag' type-id='fce14c5f' visibility='default' filepath='include/linux/key.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='description' type-id='80f4b756' visibility='default' filepath='include/linux/key.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__29' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='94' column='1' id='465ca58e'>
+        <data-member access='private'>
+          <var-decl name='' type-id='6a74abcf' visibility='default' filepath='include/linux/key.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='x' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='104' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__35' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='95' column='1' id='6a74abcf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc_len' type-id='1dc6a898' visibility='default' filepath='include/linux/key.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='desc' type-id='4a008bc3' visibility='default' filepath='include/linux/key.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key_tag' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/key.h' line='85' column='1' id='3173bc57'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/key.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='include/linux/key.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='removed' type-id='b50a4934' visibility='default' filepath='include/linux/key.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__36' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='221' column='1' id='5b740cc8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len_desc' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='d0a699d1' visibility='default' filepath='include/linux/key.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='domain_tag' type-id='fce14c5f' visibility='default' filepath='include/linux/key.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='description' type-id='26a90f95' visibility='default' filepath='include/linux/key.h' line='226' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__30' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='234' column='1' id='d5d77d48'>
+        <data-member access='private'>
+          <var-decl name='payload' type-id='2888d74a' visibility='default' filepath='include/linux/key.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='607bacb1' visibility='default' filepath='include/linux/key.h' line='236' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__37' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='236' column='1' id='607bacb1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name_link' type-id='72f469ec' visibility='default' filepath='include/linux/key.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='keys' type-id='b58d1e12' visibility='default' filepath='include/linux/key.h' line='239' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='assoc_array' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/assoc_array.h' line='22' column='1' id='b58d1e12'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root' type-id='815cf0d3' visibility='default' filepath='include/linux/assoc_array.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_leaves_on_tree' type-id='7359adad' visibility='default' filepath='include/linux/assoc_array.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key_restriction' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/key.h' line='153' column='1' id='fe81ecb9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='check' type-id='f87a5fab' visibility='default' filepath='include/linux/key.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key' type-id='204a4632' visibility='default' filepath='include/linux/key.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='keytype' type-id='d0a699d1' visibility='default' filepath='include/linux/key.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='key_restrict_link_func_t' type-id='a5786cbb' filepath='include/linux/key.h' line='148' column='1' id='f87a5fab'/>
+      <class-decl name='group_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/cred.h' line='25' column='1' id='781993c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='49178f86' visibility='default' filepath='include/linux/cred.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ngroups' type-id='95e97e5e' visibility='default' filepath='include/linux/cred.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gid' type-id='da6e2919' visibility='default' filepath='include/linux/cred.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__31' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/cred.h' line='149' column='1' id='0a97cc35'>
+        <data-member access='private'>
+          <var-decl name='non_rcu' type-id='95e97e5e' visibility='default' filepath='include/linux/cred.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/cred.h' line='151' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='nsproxy' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/nsproxy.h' line='31' column='1' id='b82b9d3a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/nsproxy.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='uts_ns' type-id='9d5923ed' visibility='default' filepath='include/linux/nsproxy.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ipc_ns' type-id='76ccea8d' visibility='default' filepath='include/linux/nsproxy.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mnt_ns' type-id='d60f4f10' visibility='default' filepath='include/linux/nsproxy.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pid_ns_for_children' type-id='b816e1d0' visibility='default' filepath='include/linux/nsproxy.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='net_ns' type-id='a2bff676' visibility='default' filepath='include/linux/nsproxy.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cgroup_ns' type-id='f774a955' visibility='default' filepath='include/linux/nsproxy.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='signal_struct' size-in-bits='8704' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='83' column='1' id='9a4619bf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sigcnt' type-id='64615833' visibility='default' filepath='include/linux/sched/signal.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='live' type-id='49178f86' visibility='default' filepath='include/linux/sched/signal.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_threads' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='thread_head' type-id='72f469ec' visibility='default' filepath='include/linux/sched/signal.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='wait_chldexit' type-id='b5ab048f' visibility='default' filepath='include/linux/sched/signal.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='curr_target' type-id='f23e2572' visibility='default' filepath='include/linux/sched/signal.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='shared_pending' type-id='7b5c012d' visibility='default' filepath='include/linux/sched/signal.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='multiprocess' type-id='e151255a' visibility='default' filepath='include/linux/sched/signal.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='group_exit_code' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='notify_count' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='group_exit_task' type-id='f23e2572' visibility='default' filepath='include/linux/sched/signal.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='group_stop_count' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/signal.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='is_child_subreaper' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/signal.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='has_child_subreaper' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/signal.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='posix_timer_id' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='posix_timers' type-id='72f469ec' visibility='default' filepath='include/linux/sched/signal.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='real_timer' type-id='b6993efc' visibility='default' filepath='include/linux/sched/signal.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='it_real_incr' type-id='fbc017ef' visibility='default' filepath='include/linux/sched/signal.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='it' type-id='bb2d0d4e' visibility='default' filepath='include/linux/sched/signal.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='cputimer' type-id='9480bb51' visibility='default' filepath='include/linux/sched/signal.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='posix_cputimers' type-id='1069de27' visibility='default' filepath='include/linux/sched/signal.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='pids' type-id='3449295e' visibility='default' filepath='include/linux/sched/signal.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='tty_old_pgrp' type-id='b94e5398' visibility='default' filepath='include/linux/sched/signal.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='leader' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='tty' type-id='572fbdca' visibility='default' filepath='include/linux/sched/signal.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='stats_lock' type-id='e6cd5ecf' visibility='default' filepath='include/linux/sched/signal.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='utime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='stime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='cutime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='cstime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='gtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='cgtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='prev_cputime' type-id='9c7bf560' visibility='default' filepath='include/linux/sched/signal.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='nvcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='nivcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='cnvcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='cnivcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='min_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='maj_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='cmin_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='cmaj_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='inblock' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='oublock' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='cinblock' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='coublock' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='maxrss' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='cmaxrss' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='ioac' type-id='ca075c7f' visibility='default' filepath='include/linux/sched/signal.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='sum_sched_runtime' type-id='3a47d82b' visibility='default' filepath='include/linux/sched/signal.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='rlim' type-id='80f344e1' visibility='default' filepath='include/linux/sched/signal.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='stats' type-id='2c927837' visibility='default' filepath='include/linux/sched/signal.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='audit_tty' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/signal.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='tty_audit_buf' type-id='868c74f4' visibility='default' filepath='include/linux/sched/signal.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='oom_flag_origin' type-id='b50a4934' visibility='default' filepath='include/linux/sched/signal.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7696'>
+          <var-decl name='oom_score_adj' type-id='a2185560' visibility='default' filepath='include/linux/sched/signal.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='oom_score_adj_min' type-id='a2185560' visibility='default' filepath='include/linux/sched/signal.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='oom_mm' type-id='df4b7819' visibility='default' filepath='include/linux/sched/signal.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='cred_guard_mutex' type-id='925167dc' visibility='default' filepath='include/linux/sched/signal.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='exec_update_lock' type-id='f19fdb93' visibility='default' filepath='include/linux/sched/signal.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='242' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sigpending' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/signal_types.h' line='30' column='1' id='7b5c012d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/signal_types.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='signal' type-id='daf33c64' visibility='default' filepath='include/linux/signal_types.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='sigset_t' type-id='e6ea37b8' filepath='include/uapi/asm-generic/signal.h' line='92' column='1' id='daf33c64'/>
+      <class-decl name='__anonymous_struct__38' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='daf33c64' visibility='default' filepath='include/uapi/asm-generic/signal.h' line='90' column='1' id='e6ea37b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sig' type-id='f066dd3c' visibility='default' filepath='include/uapi/asm-generic/signal.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpu_itimer' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='39' column='1' id='47841236'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='expires' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='incr' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thread_group_cputimer' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='67' column='1' id='9480bb51'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cputime_atomic' type-id='4b60fba4' visibility='default' filepath='include/linux/sched/signal.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_cputime_atomic' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='48' column='1' id='4b60fba4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='utime' type-id='28ee064c' visibility='default' filepath='include/linux/sched/signal.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stime' type-id='28ee064c' visibility='default' filepath='include/linux/sched/signal.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sum_exec_runtime' type-id='28ee064c' visibility='default' filepath='include/linux/sched/signal.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='seqlock_t' type-id='c87ee7e4' filepath='include/linux/seqlock.h' line='414' column='1' id='e6cd5ecf'/>
+      <class-decl name='__anonymous_struct__39' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='e6cd5ecf' visibility='default' filepath='include/linux/seqlock.h' line='411' column='1' id='c87ee7e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seqcount' type-id='3a74ff0b' visibility='default' filepath='include/linux/seqlock.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/seqlock.h' line='413' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_io_accounting' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/task_io_accounting.h' line='12' column='1' id='ca075c7f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rchar' type-id='91ce1af9' visibility='default' filepath='include/linux/task_io_accounting.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wchar' type-id='91ce1af9' visibility='default' filepath='include/linux/task_io_accounting.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='syscr' type-id='91ce1af9' visibility='default' filepath='include/linux/task_io_accounting.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='syscw' type-id='91ce1af9' visibility='default' filepath='include/linux/task_io_accounting.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='syscfs' type-id='91ce1af9' visibility='default' filepath='include/linux/task_io_accounting.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='read_bytes' type-id='91ce1af9' visibility='default' filepath='include/linux/task_io_accounting.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write_bytes' type-id='91ce1af9' visibility='default' filepath='include/linux/task_io_accounting.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cancelled_write_bytes' type-id='91ce1af9' visibility='default' filepath='include/linux/task_io_accounting.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rlimit' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/resource.h' line='43' column='1' id='60dcbf6c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rlim_cur' type-id='447da2ae' visibility='default' filepath='include/uapi/linux/resource.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rlim_max' type-id='447da2ae' visibility='default' filepath='include/uapi/linux/resource.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sighand_struct' size-in-bits='16640' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='21' column='1' id='317e3dc9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='siglock' type-id='fb4018a0' visibility='default' filepath='include/linux/sched/signal.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='64615833' visibility='default' filepath='include/linux/sched/signal.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='signalfd_wqh' type-id='b5ab048f' visibility='default' filepath='include/linux/sched/signal.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='action' type-id='02d77f24' visibility='default' filepath='include/linux/sched/signal.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='k_sigaction' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/signal_types.h' line='49' column='1' id='a21c4412'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sa' type-id='fe391c48' visibility='default' filepath='include/linux/signal_types.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sigaction' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/signal_types.h' line='35' column='1' id='fe391c48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sa_handler' type-id='8cdd9566' visibility='default' filepath='include/linux/signal_types.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sa_flags' type-id='7359adad' visibility='default' filepath='include/linux/signal_types.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sa_restorer' type-id='81564178' visibility='default' filepath='include/linux/signal_types.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sa_mask' type-id='daf33c64' visibility='default' filepath='include/linux/signal_types.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__sighandler_t' type-id='a38aafde' filepath='include/uapi/asm-generic/signal-defs.h' line='19' column='1' id='8cdd9566'/>
+      <typedef-decl name='__signalfn_t' type-id='f712e2b7' filepath='include/uapi/asm-generic/signal-defs.h' line='18' column='1' id='3b5c61ad'/>
+      <typedef-decl name='__sigrestore_t' type-id='5d3a884e' filepath='include/uapi/asm-generic/signal-defs.h' line='22' column='1' id='81564178'/>
+      <typedef-decl name='__restorefn_t' type-id='ee076206' filepath='include/uapi/asm-generic/signal-defs.h' line='21' column='1' id='830ee0a7'/>
+      <class-decl name='seccomp' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/seccomp.h' line='30' column='1' id='298af459'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mode' type-id='95e97e5e' visibility='default' filepath='include/linux/seccomp.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='filter_count' type-id='49178f86' visibility='default' filepath='include/linux/seccomp.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='filter' type-id='2a128f5a' visibility='default' filepath='include/linux/seccomp.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wake_q_node' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='632' column='1' id='69970be2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='b16791f0' visibility='default' filepath='include/linux/sched.h' line='633' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='io_context' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/iocontext.h' line='99' column='1' id='d002899d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='f22a8abb' visibility='default' filepath='include/linux/iocontext.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='active_ref' type-id='49178f86' visibility='default' filepath='include/linux/iocontext.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nr_tasks' type-id='49178f86' visibility='default' filepath='include/linux/iocontext.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/iocontext.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ioprio' type-id='8efea9e5' visibility='default' filepath='include/linux/iocontext.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_batch_requests' type-id='95e97e5e' visibility='default' filepath='include/linux/iocontext.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='last_waited' type-id='7359adad' visibility='default' filepath='include/linux/iocontext.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='icq_tree' type-id='d39738ac' visibility='default' filepath='include/linux/iocontext.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='icq_hint' type-id='7c6e0e0c' visibility='default' filepath='include/linux/iocontext.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='icq_list' type-id='e151255a' visibility='default' filepath='include/linux/iocontext.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='release_work' type-id='ef9025d0' visibility='default' filepath='include/linux/iocontext.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='io_cq' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/iocontext.h' line='73' column='1' id='db04abd6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q' type-id='e7d2a5fc' visibility='default' filepath='include/linux/iocontext.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ioc' type-id='d042cfad' visibility='default' filepath='include/linux/iocontext.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='df248743' visibility='default' filepath='include/linux/iocontext.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='eb20ccf0' visibility='default' filepath='include/linux/iocontext.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/iocontext.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__32' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/iocontext.h' line='83' column='1' id='df248743'>
+        <data-member access='private'>
+          <var-decl name='q_node' type-id='72f469ec' visibility='default' filepath='include/linux/iocontext.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='__rcu_icq_cache' type-id='f3b4aca8' visibility='default' filepath='include/linux/iocontext.h' line='85' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__33' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/iocontext.h' line='87' column='1' id='eb20ccf0'>
+        <data-member access='private'>
+          <var-decl name='ioc_node' type-id='03a4a074' visibility='default' filepath='include/linux/iocontext.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='__rcu_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/iocontext.h' line='89' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='kernel_siginfo_t' type-id='38ef7882' filepath='include/linux/signal_types.h' line='14' column='1' id='22ec9634'/>
+      <class-decl name='kernel_siginfo' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/signal_types.h' line='12' column='1' id='38ef7882'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='c60b207d' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__40' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1' id='c60b207d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='si_signo' type-id='95e97e5e' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='si_errno' type-id='95e97e5e' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='si_code' type-id='95e97e5e' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_sifields' type-id='a60646cb' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__sifields' size-in-bits='256' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='32' column='1' id='a60646cb'>
+        <data-member access='private'>
+          <var-decl name='_kill' type-id='35888a92' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_timer' type-id='11b42bf5' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_rt' type-id='90a6a0a3' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_sigchld' type-id='5b8a7161' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_sigfault' type-id='b47416ba' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_sigpoll' type-id='88c21632' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_sigsys' type-id='07fe0781' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='108' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__41' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='34' column='1' id='35888a92'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_pid' type-id='63eb2bf2' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_uid' type-id='70734f24' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__42' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='40' column='1' id='11b42bf5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_tid' type-id='c28acba6' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_overrun' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_sigval' type-id='95506cfb' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_sys_private' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__kernel_timer_t' type-id='95e97e5e' filepath='include/uapi/asm-generic/posix_types.h' line='92' column='1' id='c28acba6'/>
+      <typedef-decl name='sigval_t' type-id='a094b870' filepath='include/uapi/asm-generic/siginfo.h' line='11' column='1' id='95506cfb'/>
+      <union-decl name='sigval' size-in-bits='64' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='8' column='1' id='a094b870'>
+        <data-member access='private'>
+          <var-decl name='sival_int' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sival_ptr' type-id='eaa32e2f' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='10' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__43' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='48' column='1' id='90a6a0a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_pid' type-id='63eb2bf2' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_uid' type-id='70734f24' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_sigval' type-id='95506cfb' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__44' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='55' column='1' id='5b8a7161'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_pid' type-id='63eb2bf2' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_uid' type-id='70734f24' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_status' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_utime' type-id='880ebc01' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='_stime' type-id='880ebc01' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__kernel_clock_t' type-id='6a11bd61' filepath='include/uapi/asm-generic/posix_types.h' line='91' column='1' id='880ebc01'/>
+      <class-decl name='__anonymous_struct__45' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='64' column='1' id='b47416ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_addr' type-id='eaa32e2f' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='c4e140b8' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__34' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='77' column='1' id='c4e140b8'>
+        <data-member access='private'>
+          <var-decl name='_addr_lsb' type-id='a2185560' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_addr_bnd' type-id='ea0e6645' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='_addr_pkey' type-id='8a41173c' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='93' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__46' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='84' column='1' id='ea0e6645'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_dummy_bnd' type-id='8e100159' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_lower' type-id='eaa32e2f' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_upper' type-id='eaa32e2f' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__47' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='90' column='1' id='8a41173c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_dummy_pkey' type-id='8e100159' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_pkey' type-id='3f1a6b60' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__48' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='98' column='1' id='88c21632'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_band' type-id='bd54fe1a' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_fd' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__49' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='104' column='1' id='07fe0781'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_call_addr' type-id='eaa32e2f' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_syscall' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='_arch' type-id='f0981eeb' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='nodemask_t' type-id='24d23dab' filepath='include/linux/nodemask.h' line='98' column='1' id='6a7d16bb'/>
+      <class-decl name='__anonymous_struct__50' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='6a7d16bb' visibility='default' filepath='include/linux/nodemask.h' line='98' column='1' id='24d23dab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bits' type-id='f066dd3c' visibility='default' filepath='include/linux/nodemask.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tlbflush_unmap_batch' is-struct='yes' visibility='default' filepath='include/linux/mm_types_task.h' line='76' column='1' id='a3d9f566'/>
+      <union-decl name='__anonymous_union__35' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/sched.h' line='1158' column='1' id='b45135d0'>
+        <data-member access='private'>
+          <var-decl name='rcu_users' type-id='64615833' visibility='default' filepath='include/linux/sched.h' line='1159' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/sched.h' line='1160' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='page_frag' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mm_types_task.h' line='64' column='1' id='06c0432f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page' type-id='02f11ed4' visibility='default' filepath='include/linux/mm_types_task.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/linux/mm_types_task.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='size' type-id='3f1a6b60' visibility='default' filepath='include/linux/mm_types_task.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uprobe_task' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/uprobes.h' line='61' column='1' id='98f6607e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='5d1a5bc7' visibility='default' filepath='include/linux/uprobes.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='f5a928fc' visibility='default' filepath='include/linux/uprobes.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active_uprobe' type-id='57376310' visibility='default' filepath='include/linux/uprobes.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xol_vaddr' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='return_instances' type-id='d38eb863' visibility='default' filepath='include/linux/uprobes.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='depth' type-id='f0981eeb' visibility='default' filepath='include/linux/uprobes.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='uprobe_task_state' filepath='include/linux/uprobes.h' line='51' column='1' id='5d1a5bc7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UTASK_RUNNING' value='0'/>
+        <enumerator name='UTASK_SSTEP' value='1'/>
+        <enumerator name='UTASK_SSTEP_ACK' value='2'/>
+        <enumerator name='UTASK_SSTEP_TRAPPED' value='3'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__36' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/uprobes.h' line='64' column='1' id='f5a928fc'>
+        <data-member access='private'>
+          <var-decl name='' type-id='2b31becf' visibility='default' filepath='include/linux/uprobes.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='46982a3f' visibility='default' filepath='include/linux/uprobes.h' line='70' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__51' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/uprobes.h' line='65' column='1' id='2b31becf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='autask' type-id='79aea64f' visibility='default' filepath='include/linux/uprobes.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vaddr' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='arch_uprobe_task' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/uprobes.h' line='21' column='1' id='79aea64f'/>
+      <class-decl name='__anonymous_struct__52' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/uprobes.h' line='70' column='1' id='46982a3f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dup_xol_work' type-id='e3d8ce29' visibility='default' filepath='include/linux/uprobes.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dup_xol_addr' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='return_instance' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/uprobes.h' line='83' column='1' id='c0342c43'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uprobe' type-id='57376310' visibility='default' filepath='include/linux/uprobes.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='stack' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='orig_ret_vaddr' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='chained' type-id='b50a4934' visibility='default' filepath='include/linux/uprobes.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='next' type-id='d38eb863' visibility='default' filepath='include/linux/uprobes.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vm_struct' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/vmalloc.h' line='41' column='1' id='5f2f8da4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='d295dab2' visibility='default' filepath='include/linux/vmalloc.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr' type-id='eaa32e2f' visibility='default' filepath='include/linux/vmalloc.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='7359adad' visibility='default' filepath='include/linux/vmalloc.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/vmalloc.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pages' type-id='9f93c9da' visibility='default' filepath='include/linux/vmalloc.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nr_pages' type-id='f0981eeb' visibility='default' filepath='include/linux/vmalloc.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='phys_addr' type-id='2522883d' visibility='default' filepath='include/linux/vmalloc.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='caller' type-id='eaa32e2f' visibility='default' filepath='include/linux/vmalloc.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='phys_addr_t' type-id='91ce1af9' filepath='include/linux/types.h' line='158' column='1' id='2522883d'/>
+      <class-decl name='thread_struct' size-in-bits='7808' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='127' column='1' id='0c8a83c7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_context' type-id='6a577ca5' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='uw' type-id='3bb05d08' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='fpsimd_cpu' type-id='f0981eeb' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='sve_state' type-id='eaa32e2f' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='sve_vl' type-id='f0981eeb' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5408'>
+          <var-decl name='sve_vl_onexec' type-id='f0981eeb' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='fault_address' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='fault_code' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='debug' type-id='2f821a8d' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpu_context' size-in-bits='832' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='111' column='1' id='6a577ca5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x19' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='x20' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='x21' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='x22' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='x23' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='x24' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='x25' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='x26' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='x27' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='x28' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fp' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sp' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='pc' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='124' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__53' size-in-bits='4352' is-struct='yes' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='135' column='1' id='3bb05d08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tp_value' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tp2_value' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fpsimd_state' type-id='3cb82f3a' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='user_fpsimd_state' size-in-bits='4224' is-struct='yes' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='82' column='1' id='3cb82f3a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vregs' type-id='98f84070' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='fpsr' type-id='3f1a6b60' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4128'>
+          <var-decl name='fpcr' type-id='3f1a6b60' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='__reserved' type-id='839e8989' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__uint128_t' type-id='4f340252' filepath='arch/arm64/crypto/aes-glue.c' line='1035' column='1' id='7e2609cc'/>
+      <class-decl name='debug_info' size-in-bits='2176' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='98' column='1' id='2f821a8d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='suspended_step' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bps_disabled' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wps_disabled' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hbp_break' type-id='18b1b6ec' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hbp_watch' type-id='18b1b6ec' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uprobes_state' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/uprobes.h' line='101' column='1' id='6308a819'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xol_area' type-id='3d15880e' visibility='default' filepath='include/linux/uprobes.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__54' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='160' column='1' id='754ab6d5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pgmap' type-id='b1a5e68a' visibility='default' filepath='include/linux/mm_types.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='zone_device_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mm_types.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pagemap' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/memremap.h' line='107' column='1' id='8e586c5c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='altmap' type-id='62d0a96c' visibility='default' filepath='include/linux/memremap.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='res' type-id='5218160d' visibility='default' filepath='include/linux/memremap.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ref' type-id='60219102' visibility='default' filepath='include/linux/memremap.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='internal_ref' type-id='818799b4' visibility='default' filepath='include/linux/memremap.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='done' type-id='f9fef04f' visibility='default' filepath='include/linux/memremap.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='type' type-id='cc7210fc' visibility='default' filepath='include/linux/memremap.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/memremap.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ops' type-id='55917c32' visibility='default' filepath='include/linux/memremap.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vmem_altmap' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/memremap.h' line='18' column='1' id='62d0a96c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base_pfn' type-id='9cbd1c16' visibility='default' filepath='include/linux/memremap.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='end_pfn' type-id='9cbd1c16' visibility='default' filepath='include/linux/memremap.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reserve' type-id='9cbd1c16' visibility='default' filepath='include/linux/memremap.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='free' type-id='7359adad' visibility='default' filepath='include/linux/memremap.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='align' type-id='7359adad' visibility='default' filepath='include/linux/memremap.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='alloc' type-id='7359adad' visibility='default' filepath='include/linux/memremap.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='resource' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/ioport.h' line='21' column='1' id='5218160d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='acc63fdf' visibility='default' filepath='include/linux/ioport.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='end' type-id='acc63fdf' visibility='default' filepath='include/linux/ioport.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/ioport.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/ioport.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='desc' type-id='7359adad' visibility='default' filepath='include/linux/ioport.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='parent' type-id='c9d64c0d' visibility='default' filepath='include/linux/ioport.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sibling' type-id='c9d64c0d' visibility='default' filepath='include/linux/ioport.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='child' type-id='c9d64c0d' visibility='default' filepath='include/linux/ioport.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/ioport.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/ioport.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/ioport.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/ioport.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='resource_size_t' type-id='2522883d' filepath='include/linux/types.h' line='163' column='1' id='acc63fdf'/>
+      <class-decl name='percpu_ref' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/percpu-refcount.h' line='95' column='1' id='818799b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f22a8abb' visibility='default' filepath='include/linux/percpu-refcount.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='percpu_count_ptr' type-id='7359adad' visibility='default' filepath='include/linux/percpu-refcount.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='release' type-id='903b12fe' visibility='default' filepath='include/linux/percpu-refcount.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='confirm_switch' type-id='903b12fe' visibility='default' filepath='include/linux/percpu-refcount.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='force_atomic' type-id='b50a4934' visibility='default' filepath='include/linux/percpu-refcount.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='allow_reinit' type-id='b50a4934' visibility='default' filepath='include/linux/percpu-refcount.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/percpu-refcount.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='percpu_ref_func_t' type-id='96650caf' filepath='include/linux/percpu-refcount.h' line='60' column='1' id='ed7b7f6b'/>
+      <enum-decl name='memory_type' filepath='include/linux/memremap.h' line='59' column='1' id='cc7210fc'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MEMORY_DEVICE_PRIVATE' value='1'/>
+        <enumerator name='MEMORY_DEVICE_FS_DAX' value='2'/>
+        <enumerator name='MEMORY_DEVICE_DEVDAX' value='3'/>
+        <enumerator name='MEMORY_DEVICE_PCI_P2PDMA' value='4'/>
+      </enum-decl>
+      <class-decl name='dev_pagemap_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/memremap.h' line='67' column='1' id='c553aabf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page_free' type-id='2f974a69' visibility='default' filepath='include/linux/memremap.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kill' type-id='b90b068f' visibility='default' filepath='include/linux/memremap.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cleanup' type-id='b90b068f' visibility='default' filepath='include/linux/memremap.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='migrate_to_ram' type-id='bb28da1c' visibility='default' filepath='include/linux/memremap.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__37' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='180' column='1' id='f47d5752'>
+        <data-member access='private'>
+          <var-decl name='_mapcount' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='page_type' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='units' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types.h' line='196' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='shrink_control' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/shrinker.h' line='12' column='1' id='dee16bbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gfp_mask' type-id='3eb7c31c' visibility='default' filepath='include/linux/shrinker.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nid' type-id='95e97e5e' visibility='default' filepath='include/linux/shrinker.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_to_scan' type-id='7359adad' visibility='default' filepath='include/linux/shrinker.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nr_scanned' type-id='7359adad' visibility='default' filepath='include/linux/shrinker.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='memcg' type-id='223696fb' visibility='default' filepath='include/linux/shrinker.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dquot_operations' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='325' column='1' id='0584e65d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='write_dquot' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='alloc_dquot' type-id='324070f9' visibility='default' filepath='include/linux/quota.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destroy_dquot' type-id='dbc22931' visibility='default' filepath='include/linux/quota.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='acquire_dquot' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release_dquot' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mark_dirty' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write_info' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_reserved_space' type-id='15543b10' visibility='default' filepath='include/linux/quota.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_projid' type-id='c23b3cbc' visibility='default' filepath='include/linux/quota.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_inode_usage' type-id='6b7539fb' visibility='default' filepath='include/linux/quota.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_next_id' type-id='70b08f83' visibility='default' filepath='include/linux/quota.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='343' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='quotactl_ops' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='434' column='1' id='8ce4ff83'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='quota_on' type-id='de6b64d0' visibility='default' filepath='include/linux/quota.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='quota_off' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='quota_enable' type-id='7aa5a21e' visibility='default' filepath='include/linux/quota.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='quota_disable' type-id='7aa5a21e' visibility='default' filepath='include/linux/quota.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='quota_sync' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_info' type-id='4e326e06' visibility='default' filepath='include/linux/quota.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_dqblk' type-id='9e27a8d4' visibility='default' filepath='include/linux/quota.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_nextdqblk' type-id='483e8c3a' visibility='default' filepath='include/linux/quota.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_dqblk' type-id='9e27a8d4' visibility='default' filepath='include/linux/quota.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_state' type-id='eb638046' visibility='default' filepath='include/linux/quota.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rm_xquota' type-id='7aa5a21e' visibility='default' filepath='include/linux/quota.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='449' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qc_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='421' column='1' id='9dbdc7de'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='i_fieldmask' type-id='95e97e5e' visibility='default' filepath='include/linux/quota.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='i_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='i_spc_timelimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='i_ino_timelimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='i_rt_spc_timelimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='i_spc_warnlimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='i_ino_warnlimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='i_rt_spc_warnlimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='430' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qc_dqblk' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='349' column='1' id='aef83a98'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='d_fieldmask' type-id='95e97e5e' visibility='default' filepath='include/linux/quota.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='d_spc_hardlimit' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='d_spc_softlimit' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='d_ino_hardlimit' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='d_ino_softlimit' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='d_space' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='d_ino_count' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='d_ino_timer' type-id='9b7c55ef' visibility='default' filepath='include/linux/quota.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='d_spc_timer' type-id='9b7c55ef' visibility='default' filepath='include/linux/quota.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='d_ino_warns' type-id='95e97e5e' visibility='default' filepath='include/linux/quota.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='d_spc_warns' type-id='95e97e5e' visibility='default' filepath='include/linux/quota.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='d_rt_spc_hardlimit' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='d_rt_spc_softlimit' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='d_rt_space' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='d_rt_spc_timer' type-id='9b7c55ef' visibility='default' filepath='include/linux/quota.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='d_rt_spc_warns' type-id='95e97e5e' visibility='default' filepath='include/linux/quota.h' line='366' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qc_state' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='415' column='1' id='f6be3c23'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='s_incoredqs' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_state' type-id='55d1e02d' visibility='default' filepath='include/linux/quota.h' line='417' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qc_type_state' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='401' column='1' id='e878d564'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='spc_timelimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ino_timelimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='rt_spc_timelimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='spc_warnlimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ino_warnlimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rt_spc_warnlimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ino' type-id='3a47d82b' visibility='default' filepath='include/linux/quota.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='blocks' type-id='17345459' visibility='default' filepath='include/linux/quota.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nextents' type-id='17345459' visibility='default' filepath='include/linux/quota.h' line='412' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='blkcnt_t' type-id='91ce1af9' filepath='include/linux/types.h' line='131' column='1' id='17345459'/>
+      <class-decl name='hlist_bl_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/list_bl.h' line='34' column='1' id='def98e71'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='d09d4bab' visibility='default' filepath='include/linux/list_bl.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='block_device' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='490' column='1' id='1b893cc5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bd_dev' type-id='8504f260' visibility='default' filepath='include/linux/fs.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bd_openers' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bd_inode' type-id='7e666abe' visibility='default' filepath='include/linux/fs.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bd_super' type-id='42c8f564' visibility='default' filepath='include/linux/fs.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bd_mutex' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bd_claiming' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='bd_holder' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bd_holders' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='bd_write_holder' type-id='b50a4934' visibility='default' filepath='include/linux/fs.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bd_holder_disks' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bd_contains' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='bd_block_size' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='bd_partno' type-id='f9b06939' visibility='default' filepath='include/linux/fs.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='bd_part' type-id='84dc82b7' visibility='default' filepath='include/linux/fs.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bd_part_count' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='bd_invalidated' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bd_disk' type-id='33c599da' visibility='default' filepath='include/linux/fs.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='bd_queue' type-id='e7d2a5fc' visibility='default' filepath='include/linux/fs.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='bd_bdi' type-id='ef4fae1b' visibility='default' filepath='include/linux/fs.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='bd_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='bd_private' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='bd_fsfreeze_count' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='bd_fsfreeze_mutex' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='530' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='quota_info' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='527' column='1' id='c26e4ad8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dqio_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/quota.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='files' type-id='e6ff92fb' visibility='default' filepath='include/linux/quota.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='info' type-id='83ae09a1' visibility='default' filepath='include/linux/quota.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ops' type-id='59bd9302' visibility='default' filepath='include/linux/quota.h' line='532' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_dqinfo' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='222' column='1' id='b0690d78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dqi_format' type-id='eb9a3ab6' visibility='default' filepath='include/linux/quota.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dqi_fmt_id' type-id='95e97e5e' visibility='default' filepath='include/linux/quota.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dqi_dirty_list' type-id='72f469ec' visibility='default' filepath='include/linux/quota.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dqi_flags' type-id='7359adad' visibility='default' filepath='include/linux/quota.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dqi_bgrace' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='dqi_igrace' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dqi_max_spc_limit' type-id='33341965' visibility='default' filepath='include/linux/quota.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dqi_max_ino_limit' type-id='33341965' visibility='default' filepath='include/linux/quota.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dqi_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/quota.h' line='232' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='quota_format_type' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='452' column='1' id='c2be49b0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='qf_fmt_id' type-id='95e97e5e' visibility='default' filepath='include/linux/quota.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='qf_ops' type-id='bd561d05' visibility='default' filepath='include/linux/quota.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='qf_owner' type-id='2730d015' visibility='default' filepath='include/linux/quota.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='qf_next' type-id='eb9a3ab6' visibility='default' filepath='include/linux/quota.h' line='456' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='quota_format_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='310' column='1' id='87cad984'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='check_quota_file' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read_file_info' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write_file_info' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='free_file_info' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read_dqblk' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='commit_dqblk' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='release_dqblk' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_next_id' type-id='70b08f83' visibility='default' filepath='include/linux/quota.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='321' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sb_writers' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1462' column='1' id='fb476a2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frozen' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_unfrozen' type-id='b5ab048f' visibility='default' filepath='include/linux/fs.h' line='1464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rw_sem' type-id='a09ef5a6' visibility='default' filepath='include/linux/fs.h' line='1465' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='percpu_rw_semaphore' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/percpu-rwsem.h' line='12' column='1' id='ce848ab1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rss' type-id='638a7d75' visibility='default' filepath='include/linux/percpu-rwsem.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read_count' type-id='807869d3' visibility='default' filepath='include/linux/percpu-rwsem.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rw_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/percpu-rwsem.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='writer' type-id='71598d38' visibility='default' filepath='include/linux/percpu-rwsem.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='readers_block' type-id='95e97e5e' visibility='default' filepath='include/linux/percpu-rwsem.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcu_sync' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/rcu_sync.h' line='17' column='1' id='638a7d75'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gp_state' type-id='95e97e5e' visibility='default' filepath='include/linux/rcu_sync.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='gp_count' type-id='95e97e5e' visibility='default' filepath='include/linux/rcu_sync.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gp_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/rcu_sync.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cb_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/rcu_sync.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcuwait' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/rcuwait.h' line='15' column='1' id='71598d38'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/rcuwait.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='uuid_t' type-id='8425539a' filepath='include/linux/uuid.h' line='18' column='1' id='ec55eb74'/>
+      <class-decl name='__anonymous_struct__55' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='ec55eb74' visibility='default' filepath='include/linux/uuid.h' line='16' column='1' id='8425539a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='b' type-id='9396cabb' visibility='default' filepath='include/linux/uuid.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='fmode_t' type-id='f0981eeb' filepath='include/linux/types.h' line='155' column='1' id='2665334e'/>
+      <class-decl name='dentry_operations' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/dcache.h' line='139' column='1' id='e4992400'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='d_revalidate' type-id='30ab2c05' visibility='default' filepath='include/linux/dcache.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='d_weak_revalidate' type-id='30ab2c05' visibility='default' filepath='include/linux/dcache.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='d_hash' type-id='65cea51e' visibility='default' filepath='include/linux/dcache.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='d_compare' type-id='fb86b772' visibility='default' filepath='include/linux/dcache.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='d_delete' type-id='a50c1d00' visibility='default' filepath='include/linux/dcache.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='d_init' type-id='6241aa4f' visibility='default' filepath='include/linux/dcache.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='d_release' type-id='f42e15b8' visibility='default' filepath='include/linux/dcache.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='d_prune' type-id='f42e15b8' visibility='default' filepath='include/linux/dcache.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='d_iput' type-id='40363cbb' visibility='default' filepath='include/linux/dcache.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='d_dname' type-id='84618a95' visibility='default' filepath='include/linux/dcache.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='d_automount' type-id='da81d789' visibility='default' filepath='include/linux/dcache.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='d_manage' type-id='6eededc8' visibility='default' filepath='include/linux/dcache.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='d_real' type-id='3cce524c' visibility='default' filepath='include/linux/dcache.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='d_canonical_path' type-id='8581ac2b' visibility='default' filepath='include/linux/dcache.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='159' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='shrinker' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/shrinker.h' line='60' column='1' id='27cb404f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count_objects' type-id='cd2cc9e1' visibility='default' filepath='include/linux/shrinker.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='scan_objects' type-id='cd2cc9e1' visibility='default' filepath='include/linux/shrinker.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='batch' type-id='bd54fe1a' visibility='default' filepath='include/linux/shrinker.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='seeks' type-id='95e97e5e' visibility='default' filepath='include/linux/shrinker.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/shrinker.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/shrinker.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/shrinker.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nr_deferred' type-id='5403cb36' visibility='default' filepath='include/linux/shrinker.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='list_lru' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/list_lru.h' line='52' column='1' id='c653aac7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='a6d2fa52' visibility='default' filepath='include/linux/list_lru.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/list_lru.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='shrinker_id' type-id='95e97e5e' visibility='default' filepath='include/linux/list_lru.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='memcg_aware' type-id='b50a4934' visibility='default' filepath='include/linux/list_lru.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='list_lru_node' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/list_lru.h' line='40' column='1' id='dc49d474'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/list_lru.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lru' type-id='ff0d68dc' visibility='default' filepath='include/linux/list_lru.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='memcg_lrus' type-id='153e161b' visibility='default' filepath='include/linux/list_lru.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nr_items' type-id='bd54fe1a' visibility='default' filepath='include/linux/list_lru.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='list_lru_one' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/list_lru.h' line='28' column='1' id='ff0d68dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/list_lru.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nr_items' type-id='bd54fe1a' visibility='default' filepath='include/linux/list_lru.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='list_lru_memcg' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/list_lru.h' line='34' column='1' id='5a3e162b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/list_lru.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lru' type-id='b969bd7a' visibility='default' filepath='include/linux/list_lru.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__38' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='679' column='1' id='3ee18b51'>
+        <data-member access='private'>
+          <var-decl name='i_nlink' type-id='20f5f452' visibility='default' filepath='include/linux/fs.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='__i_nlink' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='681' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__39' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='718' column='1' id='cbd4a95b'>
+        <data-member access='private'>
+          <var-decl name='i_dentry' type-id='e151255a' visibility='default' filepath='include/linux/fs.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='720' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__40' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='730' column='1' id='67f3b119'>
+        <data-member access='private'>
+          <var-decl name='i_fop' type-id='61758ee5' visibility='default' filepath='include/linux/fs.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='free_inode' type-id='4f3d95df' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='file_operations' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1880' column='1' id='7dffcde2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/fs.h' line='1881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='llseek' type-id='07ebb4cd' visibility='default' filepath='include/linux/fs.h' line='1882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read' type-id='4d8f5625' visibility='default' filepath='include/linux/fs.h' line='1883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write' type-id='5f29549c' visibility='default' filepath='include/linux/fs.h' line='1884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read_iter' type-id='227e209d' visibility='default' filepath='include/linux/fs.h' line='1885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write_iter' type-id='227e209d' visibility='default' filepath='include/linux/fs.h' line='1886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='iopoll' type-id='6c4618be' visibility='default' filepath='include/linux/fs.h' line='1887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='iterate' type-id='42beb73a' visibility='default' filepath='include/linux/fs.h' line='1888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='iterate_shared' type-id='42beb73a' visibility='default' filepath='include/linux/fs.h' line='1889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='poll' type-id='4d01ede7' visibility='default' filepath='include/linux/fs.h' line='1890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='unlocked_ioctl' type-id='fc7daf55' visibility='default' filepath='include/linux/fs.h' line='1891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='compat_ioctl' type-id='fc7daf55' visibility='default' filepath='include/linux/fs.h' line='1892' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mmap' type-id='8ea2626c' visibility='default' filepath='include/linux/fs.h' line='1893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='mmap_supported_flags' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='open' type-id='47800058' visibility='default' filepath='include/linux/fs.h' line='1895' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='flush' type-id='5ddef2dd' visibility='default' filepath='include/linux/fs.h' line='1896' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='release' type-id='47800058' visibility='default' filepath='include/linux/fs.h' line='1897' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fsync' type-id='31cc9254' visibility='default' filepath='include/linux/fs.h' line='1898' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='fasync' type-id='b94ac371' visibility='default' filepath='include/linux/fs.h' line='1899' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='lock' type-id='12f0ff82' visibility='default' filepath='include/linux/fs.h' line='1900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='sendpage' type-id='40da47a8' visibility='default' filepath='include/linux/fs.h' line='1901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='get_unmapped_area' type-id='d44a8cec' visibility='default' filepath='include/linux/fs.h' line='1902' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='check_flags' type-id='7f416e10' visibility='default' filepath='include/linux/fs.h' line='1903' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='flock' type-id='12f0ff82' visibility='default' filepath='include/linux/fs.h' line='1904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='splice_write' type-id='b22f4610' visibility='default' filepath='include/linux/fs.h' line='1905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='splice_read' type-id='72cd68b0' visibility='default' filepath='include/linux/fs.h' line='1906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='setlease' type-id='87e3d3e2' visibility='default' filepath='include/linux/fs.h' line='1907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='fallocate' type-id='a53e2328' visibility='default' filepath='include/linux/fs.h' line='1908' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='show_fdinfo' type-id='eda08098' visibility='default' filepath='include/linux/fs.h' line='1910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='copy_file_range' type-id='d0882d6b' visibility='default' filepath='include/linux/fs.h' line='1914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='remap_file_range' type-id='c1de1086' visibility='default' filepath='include/linux/fs.h' line='1916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='fadvise' type-id='31cc9254' visibility='default' filepath='include/linux/fs.h' line='1919' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1923' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1924' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dir_context' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1826' column='1' id='d5476b80'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='actor' type-id='262124ef' visibility='default' filepath='include/linux/fs.h' line='1827' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pos' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='1828' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='filldir_t' type-id='78efe913' filepath='include/linux/fs.h' line='1823' column='1' id='262124ef'/>
+      <typedef-decl name='__poll_t' type-id='f0981eeb' filepath='include/uapi/linux/types.h' line='52' column='1' id='8f254b08'/>
+      <typedef-decl name='fl_owner_t' type-id='eaa32e2f' filepath='include/linux/fs.h' line='1052' column='1' id='bc5666d5'/>
+      <class-decl name='file_lock' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1112' column='1' id='23c73eb3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fl_blocker' type-id='0343ce83' visibility='default' filepath='include/linux/fs.h' line='1113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fl_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fl_link' type-id='03a4a074' visibility='default' filepath='include/linux/fs.h' line='1115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fl_blocked_requests' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fl_blocked_member' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fl_owner' type-id='bc5666d5' visibility='default' filepath='include/linux/fs.h' line='1122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fl_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='fl_type' type-id='002ac4a6' visibility='default' filepath='include/linux/fs.h' line='1124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fl_pid' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='fl_link_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fl_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/fs.h' line='1127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fl_file' type-id='77e79a4b' visibility='default' filepath='include/linux/fs.h' line='1128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fl_start' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='1129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fl_end' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='1130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='fl_fasync' type-id='5bb9c75d' visibility='default' filepath='include/linux/fs.h' line='1132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fl_break_time' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='fl_downgrade_time' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fl_ops' type-id='dc4077ef' visibility='default' filepath='include/linux/fs.h' line='1137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='fl_lmops' type-id='a548fbc8' visibility='default' filepath='include/linux/fs.h' line='1138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='fl_u' type-id='ff03d60a' visibility='default' filepath='include/linux/fs.h' line='1147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_reserved1' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1151' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file_lock_operations' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1056' column='1' id='1958bd2a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fl_copy_lock' type-id='7b9768f0' visibility='default' filepath='include/linux/fs.h' line='1057' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fl_release_private' type-id='c9e2bc02' visibility='default' filepath='include/linux/fs.h' line='1058' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1060' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1061' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lock_manager_operations' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1064' column='1' id='970ecd31'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lm_get_owner' type-id='d6e9f1fa' visibility='default' filepath='include/linux/fs.h' line='1065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lm_put_owner' type-id='9615a2e0' visibility='default' filepath='include/linux/fs.h' line='1066' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lm_notify' type-id='c9e2bc02' visibility='default' filepath='include/linux/fs.h' line='1067' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lm_grant' type-id='bdada41a' visibility='default' filepath='include/linux/fs.h' line='1068' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lm_break' type-id='5fb34715' visibility='default' filepath='include/linux/fs.h' line='1069' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lm_change' type-id='4817356d' visibility='default' filepath='include/linux/fs.h' line='1070' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lm_setup' type-id='628f3294' visibility='default' filepath='include/linux/fs.h' line='1071' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1073' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1074' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__41' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='1139' column='1' id='ff03d60a'>
+        <data-member access='private'>
+          <var-decl name='nfs_fl' type-id='17bacae5' visibility='default' filepath='include/linux/fs.h' line='1140' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nfs4_fl' type-id='b811a3f5' visibility='default' filepath='include/linux/fs.h' line='1141' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='afs' type-id='ee4b5026' visibility='default' filepath='include/linux/fs.h' line='1146' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='nfs_lock_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/nfs_fs_i.h' line='10' column='1' id='17bacae5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='19c2251e' visibility='default' filepath='include/linux/nfs_fs_i.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='982f8df3' visibility='default' filepath='include/linux/nfs_fs_i.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/nfs_fs_i.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nfs4_lock_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/nfs_fs_i.h' line='17' column='1' id='b811a3f5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='a6f0152c' visibility='default' filepath='include/linux/nfs_fs_i.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__56' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='1142' column='1' id='ee4b5026'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='link' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='debug_id' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1145' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file_lock_context' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1154' column='1' id='fb0c2987'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flc_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='1155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flc_flock' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flc_posix' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flc_lease' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1158' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__42' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='737' column='1' id='d1afa4ff'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29710' visibility='default' filepath='include/linux/fs.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb939' visibility='default' filepath='include/linux/fs.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_dir_seq' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='742' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='lockref' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/lockref.h' line='25' column='1' id='60efdfd3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='d9c71193' visibility='default' filepath='include/linux/lockref.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__43' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/lockref.h' line='26' column='1' id='d9c71193'>
+        <data-member access='private'>
+          <var-decl name='lock_count' type-id='d3130597' visibility='default' filepath='include/linux/lockref.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='7a58bf78' visibility='default' filepath='include/linux/lockref.h' line='30' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__57' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/lockref.h' line='30' column='1' id='7a58bf78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/lockref.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/lockref.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__44' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='108' column='1' id='ba311a3a'>
+        <data-member access='private'>
+          <var-decl name='d_lru' type-id='72f469ec' visibility='default' filepath='include/linux/dcache.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='d_wait' type-id='03d48e96' visibility='default' filepath='include/linux/dcache.h' line='110' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__45' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='117' column='1' id='ba0a0e48'>
+        <data-member access='private'>
+          <var-decl name='d_alias' type-id='03a4a074' visibility='default' filepath='include/linux/dcache.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='d_in_lookup_hash' type-id='8db0df1b' visibility='default' filepath='include/linux/dcache.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='d_rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/dcache.h' line='120' column='1'/>
+        </data-member>
+      </union-decl>
+      <enum-decl name='rw_hint' filepath='include/linux/fs.h' line='301' column='1' id='0d20c3dd'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='WRITE_LIFE_NOT_SET' value='0'/>
+        <enumerator name='WRITE_LIFE_NONE' value='1'/>
+        <enumerator name='WRITE_LIFE_SHORT' value='2'/>
+        <enumerator name='WRITE_LIFE_MEDIUM' value='3'/>
+        <enumerator name='WRITE_LIFE_LONG' value='4'/>
+        <enumerator name='WRITE_LIFE_EXTREME' value='5'/>
+      </enum-decl>
+      <class-decl name='fown_struct' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='930' column='1' id='6b640edd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/linux/fs.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pid' type-id='b94e5398' visibility='default' filepath='include/linux/fs.h' line='932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pid_type' type-id='ce78cf46' visibility='default' filepath='include/linux/fs.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/fs.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='euid' type-id='d80b72e6' visibility='default' filepath='include/linux/fs.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='signum' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='935' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='pid_type' filepath='include/linux/pid.h' line='9' column='1' id='ce78cf46'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PIDTYPE_PID' value='0'/>
+        <enumerator name='PIDTYPE_TGID' value='1'/>
+        <enumerator name='PIDTYPE_PGID' value='2'/>
+        <enumerator name='PIDTYPE_SID' value='3'/>
+        <enumerator name='PIDTYPE_MAX' value='4'/>
+      </enum-decl>
+      <class-decl name='file_ra_state' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='941' column='1' id='b31f003f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='async_size' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ra_pages' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='mmap_miss' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='948' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prev_pos' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='949' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kobj_ns_type_operations' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/kobject_ns.h' line='39' column='1' id='ff771233'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='52127d59' visibility='default' filepath='include/linux/kobject_ns.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='current_may_mount' type-id='d4ae3f3f' visibility='default' filepath='include/linux/kobject_ns.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='grab_current_ns' type-id='0cfacb48' visibility='default' filepath='include/linux/kobject_ns.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='netlink_ns' type-id='8734cf20' visibility='default' filepath='include/linux/kobject_ns.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='initial_ns' type-id='0cfacb48' visibility='default' filepath='include/linux/kobject_ns.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='drop_ns' type-id='b7f9d8e6' visibility='default' filepath='include/linux/kobject_ns.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='kobj_ns_type' filepath='include/linux/kobject_ns.h' line='26' column='1' id='52127d59'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='KOBJ_NS_TYPE_NONE' value='0'/>
+        <enumerator name='KOBJ_NS_TYPE_NET' value='1'/>
+        <enumerator name='KOBJ_NS_TYPES' value='2'/>
+      </enum-decl>
+      <class-decl name='kernfs_node' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='132' column='1' id='29d79af7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/kernfs.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='active' type-id='49178f86' visibility='default' filepath='include/linux/kernfs.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parent' type-id='150efd3f' visibility='default' filepath='include/linux/kernfs.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/kernfs.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rb' type-id='2a8a6332' visibility='default' filepath='include/linux/kernfs.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ns' type-id='eaa32e2f' visibility='default' filepath='include/linux/kernfs.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hash' type-id='f0981eeb' visibility='default' filepath='include/linux/kernfs.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='' type-id='de6f7c53' visibility='default' filepath='include/linux/kernfs.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/kernfs.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='id' type-id='3dfef700' visibility='default' filepath='include/linux/kernfs.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/linux/kernfs.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='912'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='include/linux/kernfs.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='iattr' type-id='1f4b5d14' visibility='default' filepath='include/linux/kernfs.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__46' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/kernfs.h' line='151' column='1' id='de6f7c53'>
+        <data-member access='private'>
+          <var-decl name='dir' type-id='4303ca40' visibility='default' filepath='include/linux/kernfs.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='symlink' type-id='c8685ef0' visibility='default' filepath='include/linux/kernfs.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='attr' type-id='9e04468e' visibility='default' filepath='include/linux/kernfs.h' line='154' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='kernfs_elem_dir' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='85' column='1' id='4303ca40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subdirs' type-id='7359adad' visibility='default' filepath='include/linux/kernfs.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='children' type-id='dec44472' visibility='default' filepath='include/linux/kernfs.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='root' type-id='e18defdb' visibility='default' filepath='include/linux/kernfs.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_root' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='189' column='1' id='471fc91b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kn' type-id='150efd3f' visibility='default' filepath='include/linux/kernfs.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/kernfs.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ino_idr' type-id='37ce495e' visibility='default' filepath='include/linux/kernfs.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='last_ino' type-id='19c2251e' visibility='default' filepath='include/linux/kernfs.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='next_generation' type-id='19c2251e' visibility='default' filepath='include/linux/kernfs.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='syscall_ops' type-id='fefa8c5f' visibility='default' filepath='include/linux/kernfs.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='supers' type-id='72f469ec' visibility='default' filepath='include/linux/kernfs.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='deactivate_waitq' type-id='b5ab048f' visibility='default' filepath='include/linux/kernfs.h' line='203' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_syscall_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='172' column='1' id='91f5bcb7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='show_options' type-id='efd5496b' visibility='default' filepath='include/linux/kernfs.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mkdir' type-id='58d10a98' visibility='default' filepath='include/linux/kernfs.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rmdir' type-id='0b56752f' visibility='default' filepath='include/linux/kernfs.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rename' type-id='aea90108' visibility='default' filepath='include/linux/kernfs.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='show_path' type-id='26692209' visibility='default' filepath='include/linux/kernfs.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='186' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_elem_symlink' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='97' column='1' id='c8685ef0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='target_kn' type-id='150efd3f' visibility='default' filepath='include/linux/kernfs.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_elem_attr' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='101' column='1' id='9e04468e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='d37373f6' visibility='default' filepath='include/linux/kernfs.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open' type-id='627d9f9e' visibility='default' filepath='include/linux/kernfs.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='69bf7bee' visibility='default' filepath='include/linux/kernfs.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='notify_next' type-id='150efd3f' visibility='default' filepath='include/linux/kernfs.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_ops' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='226' column='1' id='ae89b201'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='964d2eb6' visibility='default' filepath='include/linux/kernfs.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release' type-id='f1825e09' visibility='default' filepath='include/linux/kernfs.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq_show' type-id='0131eb61' visibility='default' filepath='include/linux/kernfs.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='seq_start' type-id='a46b05a0' visibility='default' filepath='include/linux/kernfs.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='seq_next' type-id='b6ba26fa' visibility='default' filepath='include/linux/kernfs.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='seq_stop' type-id='6ba28d1c' visibility='default' filepath='include/linux/kernfs.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read' type-id='17b1add7' visibility='default' filepath='include/linux/kernfs.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='atomic_write_len' type-id='b59d7dce' visibility='default' filepath='include/linux/kernfs.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='prealloc' type-id='b50a4934' visibility='default' filepath='include/linux/kernfs.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='write' type-id='17b1add7' visibility='default' filepath='include/linux/kernfs.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='poll' type-id='b347e5ac' visibility='default' filepath='include/linux/kernfs.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='mmap' type-id='f9e738c5' visibility='default' filepath='include/linux/kernfs.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='282' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_open_file' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='206' column='1' id='60fb5bfa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kn' type-id='150efd3f' visibility='default' filepath='include/linux/kernfs.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/kernfs.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq_file' type-id='f8dc9def' visibility='default' filepath='include/linux/kernfs.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/kernfs.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/kernfs.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='prealloc_mutex' type-id='925167dc' visibility='default' filepath='include/linux/kernfs.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='event' type-id='95e97e5e' visibility='default' filepath='include/linux/kernfs.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/kernfs.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='prealloc_buf' type-id='26a90f95' visibility='default' filepath='include/linux/kernfs.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='atomic_write_len' type-id='b59d7dce' visibility='default' filepath='include/linux/kernfs.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='mmapped' type-id='b50a4934' visibility='default' filepath='include/linux/kernfs.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='released' type-id='b50a4934' visibility='default' filepath='include/linux/kernfs.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='vm_ops' type-id='9be87662' visibility='default' filepath='include/linux/kernfs.h' line='223' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='kernfs_node_id' size-in-bits='64' visibility='default' filepath='include/linux/kernfs.h' line='109' column='1' id='3dfef700'>
+        <data-member access='private'>
+          <var-decl name='' type-id='9d3d640f' visibility='default' filepath='include/linux/kernfs.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='id' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='120' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__58' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/kernfs.h' line='110' column='1' id='9d3d640f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ino' type-id='19c2251e' visibility='default' filepath='include/linux/kernfs.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='generation' type-id='19c2251e' visibility='default' filepath='include/linux/kernfs.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module_attribute' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='52' column='1' id='8f90cd2a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' visibility='default' filepath='include/linux/module.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='9a6e3348' visibility='default' filepath='include/linux/module.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='96948294' visibility='default' filepath='include/linux/module.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='setup' type-id='537ed613' visibility='default' filepath='include/linux/module.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='test' type-id='fe3af88b' visibility='default' filepath='include/linux/module.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='free' type-id='d6f1846c' visibility='default' filepath='include/linux/module.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernel_symbol' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/export.h' line='87' column='1' id='9493d3c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='7359adad' visibility='default' filepath='include/linux/export.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/export.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='namespace' type-id='80f4b756' visibility='default' filepath='include/linux/export.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='cfi_check_fn' type-id='64115f6c' filepath='include/linux/cfi.h' line='15' column='1' id='d7c6106c'/>
+      <typedef-decl name='uint64_t' type-id='91ce1af9' filepath='include/linux/types.h' line='112' column='1' id='9c313c2d'/>
+      <class-decl name='kernel_param' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/moduleparam.h' line='69' column='1' id='ca10d3ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/moduleparam.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/moduleparam.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='99beed66' visibility='default' filepath='include/linux/moduleparam.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='perm' type-id='d5c0a628' visibility='default' filepath='include/linux/moduleparam.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='level' type-id='fdbf7a0f' visibility='default' filepath='include/linux/moduleparam.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/linux/moduleparam.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='cbb4664d' visibility='default' filepath='include/linux/moduleparam.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernel_param_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/moduleparam.h' line='47' column='1' id='1740bab9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/moduleparam.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set' type-id='388a7f2a' visibility='default' filepath='include/linux/moduleparam.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get' type-id='d1c62993' visibility='default' filepath='include/linux/moduleparam.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='free' type-id='b7f9d8e6' visibility='default' filepath='include/linux/moduleparam.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='s8' type-id='8af57d41' filepath='include/asm-generic/int-ll64.h' line='16' column='1' id='fdbf7a0f'/>
+      <typedef-decl name='__s8' type-id='28577a57' filepath='include/uapi/asm-generic/int-ll64.h' line='20' column='1' id='8af57d41'/>
+      <union-decl name='__anonymous_union__47' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/moduleparam.h' line='76' column='1' id='cbb4664d'>
+        <data-member access='private'>
+          <var-decl name='arg' type-id='eaa32e2f' visibility='default' filepath='include/linux/moduleparam.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='str' type-id='db4b7928' visibility='default' filepath='include/linux/moduleparam.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='arr' type-id='ffa2ea6a' visibility='default' filepath='include/linux/moduleparam.h' line='79' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='kparam_string' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/moduleparam.h' line='86' column='1' id='744e4af5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='maxlen' type-id='f0981eeb' visibility='default' filepath='include/linux/moduleparam.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='string' type-id='26a90f95' visibility='default' filepath='include/linux/moduleparam.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kparam_array' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/moduleparam.h' line='92' column='1' id='3b156a69'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max' type-id='f0981eeb' visibility='default' filepath='include/linux/moduleparam.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='elemsize' type-id='f0981eeb' visibility='default' filepath='include/linux/moduleparam.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num' type-id='807869d3' visibility='default' filepath='include/linux/moduleparam.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='99beed66' visibility='default' filepath='include/linux/moduleparam.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='elem' type-id='eaa32e2f' visibility='default' filepath='include/linux/moduleparam.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='exception_table_entry' size-in-bits='64' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/extable.h' line='18' column='1' id='da1095b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='insn' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/extable.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fixup' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/extable.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module_layout' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='309' column='1' id='68b3d9a8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='eaa32e2f' visibility='default' filepath='include/linux/module.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='text_size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ro_size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ro_after_init_size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mtn' type-id='3351dce1' visibility='default' filepath='include/linux/module.h' line='322' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mod_tree_node' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='304' column='1' id='3351dce1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/module.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='node' type-id='dc9cc7c7' visibility='default' filepath='include/linux/module.h' line='306' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='latch_tree_node' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/rbtree_latch.h' line='40' column='1' id='dc9cc7c7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='d46544fa' visibility='default' filepath='include/linux/rbtree_latch.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mod_arch_specific' size-in-bits='256' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/module.h' line='19' column='1' id='ea05c185'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='core' type-id='1615ea0e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='init' type-id='1615ea0e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ftrace_trampoline' type-id='72ece9e2' visibility='default' filepath='arch/arm64/include/asm/module.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mod_plt_sec' size-in-bits='96' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/module.h' line='13' column='1' id='1615ea0e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='plt_shndx' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='plt_num_entries' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='plt_max_entries' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='plt_entry' size-in-bits='96' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/module.h' line='41' column='1' id='2519c394'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='adrp' type-id='2f162548' visibility='default' filepath='arch/arm64/include/asm/module.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='add' type-id='2f162548' visibility='default' filepath='arch/arm64/include/asm/module.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='br' type-id='2f162548' visibility='default' filepath='arch/arm64/include/asm/module.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__le32' type-id='3f1a6b60' filepath='include/uapi/linux/types.h' line='31' column='1' id='2f162548'/>
+      <class-decl name='bug_entry' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/asm-generic/bug.h' line='24' column='1' id='93630c4e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bug_addr_disp' type-id='95e97e5e' visibility='default' filepath='include/asm-generic/bug.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='file_disp' type-id='95e97e5e' visibility='default' filepath='include/asm-generic/bug.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='line' type-id='8efea9e5' visibility='default' filepath='include/asm-generic/bug.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/asm-generic/bug.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mod_kallsyms' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='333' column='1' id='6a003ee8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='symtab' type-id='7d71a706' visibility='default' filepath='include/linux/module.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_symtab' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='strtab' type-id='26a90f95' visibility='default' filepath='include/linux/module.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='typetab' type-id='26a90f95' visibility='default' filepath='include/linux/module.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='Elf64_Sym' type-id='30bf9720' filepath='include/uapi/linux/elf.h' line='199' column='1' id='7cdfe313'/>
+      <class-decl name='elf64_sym' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/elf.h' line='192' column='1' id='30bf9720'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='st_name' type-id='e57120d4' visibility='default' filepath='include/uapi/linux/elf.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='st_info' type-id='002ac4a6' visibility='default' filepath='include/uapi/linux/elf.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='st_other' type-id='002ac4a6' visibility='default' filepath='include/uapi/linux/elf.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='st_shndx' type-id='101a70d5' visibility='default' filepath='include/uapi/linux/elf.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='st_value' type-id='e14340cf' visibility='default' filepath='include/uapi/linux/elf.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='st_size' type-id='c87c44e4' visibility='default' filepath='include/uapi/linux/elf.h' line='198' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='Elf64_Word' type-id='3f1a6b60' filepath='include/uapi/linux/elf.h' line='21' column='1' id='e57120d4'/>
+      <typedef-decl name='Elf64_Half' type-id='d315442e' filepath='include/uapi/linux/elf.h' line='17' column='1' id='101a70d5'/>
+      <typedef-decl name='Elf64_Addr' type-id='d3130597' filepath='include/uapi/linux/elf.h' line='16' column='1' id='e14340cf'/>
+      <typedef-decl name='Elf64_Xword' type-id='d3130597' filepath='include/uapi/linux/elf.h' line='22' column='1' id='c87c44e4'/>
+      <typedef-decl name='tracepoint_ptr_t' type-id='d2d812d1' filepath='include/linux/tracepoint-defs.h' line='41' column='1' id='e431ac27'/>
+      <class-decl name='tracepoint' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/tracepoint-defs.h' line='30' column='1' id='4ca0c298'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/tracepoint-defs.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key' type-id='00205383' visibility='default' filepath='include/linux/tracepoint-defs.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='regfunc' type-id='1db260e5' visibility='default' filepath='include/linux/tracepoint-defs.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unregfunc' type-id='953b12f8' visibility='default' filepath='include/linux/tracepoint-defs.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='funcs' type-id='484b400f' visibility='default' filepath='include/linux/tracepoint-defs.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='static_key' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/jump_label.h' line='87' column='1' id='00205383'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enabled' type-id='49178f86' visibility='default' filepath='include/linux/jump_label.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='7792d5a2' visibility='default' filepath='include/linux/jump_label.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__48' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/jump_label.h' line='102' column='1' id='7792d5a2'>
+        <data-member access='private'>
+          <var-decl name='type' type-id='7359adad' visibility='default' filepath='include/linux/jump_label.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='entries' type-id='7a35228c' visibility='default' filepath='include/linux/jump_label.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='next' type-id='c77a71ce' visibility='default' filepath='include/linux/jump_label.h' line='105' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='jump_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/jump_label.h' line='122' column='1' id='ca0c09a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='code' type-id='a7832498' visibility='default' filepath='include/linux/jump_label.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='target' type-id='a7832498' visibility='default' filepath='include/linux/jump_label.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key' type-id='bd54fe1a' visibility='default' filepath='include/linux/jump_label.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tracepoint_func' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/tracepoint-defs.h' line='24' column='1' id='3132e187'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='func' type-id='eaa32e2f' visibility='default' filepath='include/linux/tracepoint-defs.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/tracepoint-defs.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='prio' type-id='95e97e5e' visibility='default' filepath='include/linux/tracepoint-defs.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='srcu_struct' size-in-bits='5184' is-struct='yes' visibility='default' filepath='include/linux/srcutree.h' line='64' column='1' id='e4a7867c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='01115b96' visibility='default' filepath='include/linux/srcutree.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='level' type-id='2f7565c6' visibility='default' filepath='include/linux/srcutree.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='srcu_cb_mutex' type-id='925167dc' visibility='default' filepath='include/linux/srcutree.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/srcutree.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='srcu_gp_mutex' type-id='925167dc' visibility='default' filepath='include/linux/srcutree.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='srcu_idx' type-id='f0981eeb' visibility='default' filepath='include/linux/srcutree.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='srcu_gp_seq' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='srcu_gp_seq_needed' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='srcu_gp_seq_needed_exp' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='srcu_last_gp_end' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='sda' type-id='2a5ff2f1' visibility='default' filepath='include/linux/srcutree.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='srcu_barrier_seq' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='srcu_barrier_mutex' type-id='925167dc' visibility='default' filepath='include/linux/srcutree.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='srcu_barrier_completion' type-id='f9fef04f' visibility='default' filepath='include/linux/srcutree.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='srcu_barrier_cpu_cnt' type-id='49178f86' visibility='default' filepath='include/linux/srcutree.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/srcutree.h' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='srcu_node' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/srcutree.h' line='48' column='1' id='56798c81'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/srcutree.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='srcu_have_cbs' type-id='f46d9f4d' visibility='default' filepath='include/linux/srcutree.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='srcu_data_have_cbs' type-id='f46d9f4d' visibility='default' filepath='include/linux/srcutree.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='srcu_gp_seq_needed_exp' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='srcu_parent' type-id='8dee6d89' visibility='default' filepath='include/linux/srcutree.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='grplo' type-id='95e97e5e' visibility='default' filepath='include/linux/srcutree.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='grphi' type-id='95e97e5e' visibility='default' filepath='include/linux/srcutree.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='srcu_data' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/linux/srcutree.h' line='24' column='1' id='1207cfa9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='srcu_lock_count' type-id='f05e8e77' visibility='default' filepath='include/linux/srcutree.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='srcu_unlock_count' type-id='f05e8e77' visibility='default' filepath='include/linux/srcutree.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/srcutree.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='srcu_cblist' type-id='541c023a' visibility='default' filepath='include/linux/srcutree.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='srcu_gp_seq_needed' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='srcu_gp_seq_needed_exp' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='srcu_cblist_invoking' type-id='b50a4934' visibility='default' filepath='include/linux/srcutree.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='delay_work' type-id='abe41e67' visibility='default' filepath='include/linux/srcutree.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/srcutree.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='srcu_barrier_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/srcutree.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='mynode' type-id='8dee6d89' visibility='default' filepath='include/linux/srcutree.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='grpmask' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/srcutree.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='ssp' type-id='f7d7131a' visibility='default' filepath='include/linux/srcutree.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcu_segcblist' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/rcu_segcblist.h' line='67' column='1' id='541c023a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='69c138b1' visibility='default' filepath='include/linux/rcu_segcblist.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tails' type-id='68694f49' visibility='default' filepath='include/linux/rcu_segcblist.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='gp_seq' type-id='f46d9f4d' visibility='default' filepath='include/linux/rcu_segcblist.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='len' type-id='f22a8abb' visibility='default' filepath='include/linux/rcu_segcblist.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='len_lazy' type-id='bd54fe1a' visibility='default' filepath='include/linux/rcu_segcblist.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='enabled' type-id='f9b06939' visibility='default' filepath='include/linux/rcu_segcblist.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='712'>
+          <var-decl name='offloaded' type-id='f9b06939' visibility='default' filepath='include/linux/rcu_segcblist.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timer_list' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/timer.h' line='12' column='1' id='abe41e67'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entry' type-id='03a4a074' visibility='default' filepath='include/linux/timer.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='expires' type-id='7359adad' visibility='default' filepath='include/linux/timer.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='function' type-id='9582ad9a' visibility='default' filepath='include/linux/timer.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/timer.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/timer.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/timer.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='delayed_work' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='118' column='1' id='5ad6e0ef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/workqueue.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/linux/workqueue.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='wq' type-id='242e3d19' visibility='default' filepath='include/linux/workqueue.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/workqueue.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/workqueue.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/workqueue.h' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_raw_event_map' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/tracepoint-defs.h' line='44' column='1' id='72790540'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tp' type-id='08e531de' visibility='default' filepath='include/linux/tracepoint-defs.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bpf_func' type-id='eaa32e2f' visibility='default' filepath='include/linux/tracepoint-defs.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_args' type-id='19c2251e' visibility='default' filepath='include/linux/tracepoint-defs.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='writable_size' type-id='19c2251e' visibility='default' filepath='include/linux/tracepoint-defs.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='error_injection_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/asm-generic/error-injection.h' line='14' column='1' id='e6a2a878'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='7359adad' visibility='default' filepath='include/asm-generic/error-injection.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='etype' type-id='95e97e5e' visibility='default' filepath='include/asm-generic/error-injection.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__49' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/crypto.h' line='567' column='1' id='89e73658'>
+        <data-member access='private'>
+          <var-decl name='ablkcipher' type-id='67574995' visibility='default' filepath='include/linux/crypto.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='blkcipher' type-id='69794f86' visibility='default' filepath='include/linux/crypto.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='cipher' type-id='208c9717' visibility='default' filepath='include/linux/crypto.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='compress' type-id='380acddc' visibility='default' filepath='include/linux/crypto.h' line='571' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='ablkcipher_alg' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='232' column='1' id='67574995'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='214533b0' visibility='default' filepath='include/linux/crypto.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='68e5f4e6' visibility='default' filepath='include/linux/crypto.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='68e5f4e6' visibility='default' filepath='include/linux/crypto.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='240' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcipher_alg' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='254' column='1' id='69794f86'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='b201adb8' visibility='default' filepath='include/linux/crypto.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='3347d7ed' visibility='default' filepath='include/linux/crypto.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='3347d7ed' visibility='default' filepath='include/linux/crypto.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='266' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cipher_alg' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='316' column='1' id='208c9717'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cia_min_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cia_max_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cia_setkey' type-id='b201adb8' visibility='default' filepath='include/linux/crypto.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cia_encrypt' type-id='f76f0ea4' visibility='default' filepath='include/linux/crypto.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cia_decrypt' type-id='f76f0ea4' visibility='default' filepath='include/linux/crypto.h' line='322' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='compress_alg' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='336' column='1' id='380acddc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='coa_compress' type-id='8801b8af' visibility='default' filepath='include/linux/crypto.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='coa_decompress' type-id='8801b8af' visibility='default' filepath='include/linux/crypto.h' line='339' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='shash_alg' size-in-bits='6144' is-struct='yes' visibility='default' filepath='include/crypto/hash.h' line='179' column='1' id='b73dd29b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init' type-id='88994406' visibility='default' filepath='include/crypto/hash.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='update' type-id='b07c56ec' visibility='default' filepath='include/crypto/hash.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='final' type-id='bf4ae585' visibility='default' filepath='include/crypto/hash.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='finup' type-id='80662063' visibility='default' filepath='include/crypto/hash.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='digest' type-id='80662063' visibility='default' filepath='include/crypto/hash.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='export' type-id='2fd02888' visibility='default' filepath='include/crypto/hash.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='import' type-id='2fd02888' visibility='default' filepath='include/crypto/hash.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='setkey' type-id='1c33159c' visibility='default' filepath='include/crypto/hash.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='descsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/hash.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='digestsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/hash.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='statesize' type-id='f0981eeb' visibility='default' filepath='include/crypto/hash.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='base' type-id='514fe525' visibility='default' filepath='include/crypto/hash.h' line='200' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='shash_desc' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/crypto/hash.h' line='142' column='1' id='55bdfa3e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tfm' type-id='247dd85c' visibility='default' filepath='include/crypto/hash.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__ctx' type-id='baf98fd3' visibility='default' filepath='include/crypto/hash.h' line='144' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_shash' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/crypto/hash.h' line='218' column='1' id='df5e8716'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='descsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/hash.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/crypto/hash.h' line='220' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_aes_ctx' size-in-bits='3872' is-struct='yes' visibility='default' filepath='include/crypto/aes.h' line='25' column='1' id='b5b9216e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key_enc' type-id='08b4ad9f' visibility='default' filepath='include/crypto/aes.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='key_dec' type-id='08b4ad9f' visibility='default' filepath='include/crypto/aes.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='key_length' type-id='19c2251e' visibility='default' filepath='include/crypto/aes.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='skcipher_walk' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/crypto/internal/skcipher.h' line='34' column='1' id='917c67c0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='src' type-id='916e0901' visibility='default' filepath='include/crypto/internal/skcipher.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dst' type-id='916e0901' visibility='default' filepath='include/crypto/internal/skcipher.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='in' type-id='9953e88b' visibility='default' filepath='include/crypto/internal/skcipher.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nbytes' type-id='f0981eeb' visibility='default' filepath='include/crypto/internal/skcipher.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='out' type-id='9953e88b' visibility='default' filepath='include/crypto/internal/skcipher.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='total' type-id='f0981eeb' visibility='default' filepath='include/crypto/internal/skcipher.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='buffers' type-id='72f469ec' visibility='default' filepath='include/crypto/internal/skcipher.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='page' type-id='8bff8096' visibility='default' filepath='include/crypto/internal/skcipher.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='buffer' type-id='8bff8096' visibility='default' filepath='include/crypto/internal/skcipher.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='oiv' type-id='8bff8096' visibility='default' filepath='include/crypto/internal/skcipher.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='iv' type-id='eaa32e2f' visibility='default' filepath='include/crypto/internal/skcipher.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/internal/skcipher.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/crypto/internal/skcipher.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='blocksize' type-id='f0981eeb' visibility='default' filepath='include/crypto/internal/skcipher.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='stride' type-id='f0981eeb' visibility='default' filepath='include/crypto/internal/skcipher.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='alignmask' type-id='f0981eeb' visibility='default' filepath='include/crypto/internal/skcipher.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__50' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/crypto/internal/skcipher.h' line='35' column='1' id='916e0901'>
+        <data-member access='private'>
+          <var-decl name='phys' type-id='9c85f28a' visibility='default' filepath='include/crypto/internal/skcipher.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='virt' type-id='58aa248a' visibility='default' filepath='include/crypto/internal/skcipher.h' line='44' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__59' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/crypto/internal/skcipher.h' line='36' column='1' id='9c85f28a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page' type-id='02f11ed4' visibility='default' filepath='include/crypto/internal/skcipher.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='7359adad' visibility='default' filepath='include/crypto/internal/skcipher.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__60' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/crypto/internal/skcipher.h' line='41' column='1' id='58aa248a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page' type-id='8bff8096' visibility='default' filepath='include/crypto/internal/skcipher.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr' type-id='eaa32e2f' visibility='default' filepath='include/crypto/internal/skcipher.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scatter_walk' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/crypto/algapi.h' line='83' column='1' id='9953e88b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sg' type-id='bf3ef905' visibility='default' filepath='include/crypto/algapi.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7cdfe313' size-in-bits='64' id='7d71a706'/>
+      <pointer-type-def type-id='5c155a71' size-in-bits='64' id='59229509'/>
+      <pointer-type-def type-id='830ee0a7' size-in-bits='64' id='5d3a884e'/>
+      <pointer-type-def type-id='3b5c61ad' size-in-bits='64' id='a38aafde'/>
+      <pointer-type-def type-id='d0793682' size-in-bits='64' id='792ca340'/>
+      <pointer-type-def type-id='0fd82dc2' size-in-bits='64' id='f57039f0'/>
+      <pointer-type-def type-id='14f332cc' size-in-bits='64' id='a8f86cda'/>
+      <pointer-type-def type-id='3249e303' size-in-bits='64' id='815cf0d3'/>
+      <pointer-type-def type-id='f22a8abb' size-in-bits='64' id='5403cb36'/>
+      <pointer-type-def type-id='a6222917' size-in-bits='64' id='0b001c1f'/>
+      <pointer-type-def type-id='0b001c1f' size-in-bits='64' id='862c676f'/>
+      <pointer-type-def type-id='82d9d5d4' size-in-bits='64' id='a9f319d2'/>
+      <pointer-type-def type-id='c0badb3b' size-in-bits='64' id='ef4fae1b'/>
+      <pointer-type-def type-id='ac0aeb1e' size-in-bits='64' id='f885ca7e'/>
+      <pointer-type-def type-id='d83a2db1' size-in-bits='64' id='c0e2acc9'/>
+      <pointer-type-def type-id='c0e2acc9' size-in-bits='64' id='87d62959'/>
+      <pointer-type-def type-id='096280be' size-in-bits='64' id='ee802604'/>
+      <pointer-type-def type-id='718a7cd9' size-in-bits='64' id='39944481'/>
+      <pointer-type-def type-id='101fbff9' size-in-bits='64' id='23e79551'/>
+      <pointer-type-def type-id='1b893cc5' size-in-bits='64' id='b88dd945'/>
+      <pointer-type-def type-id='b50a4934' size-in-bits='64' id='d8e6b335'/>
+      <pointer-type-def type-id='72790540' size-in-bits='64' id='1f7f0216'/>
+      <pointer-type-def type-id='93630c4e' size-in-bits='64' id='c250b0e4'/>
+      <pointer-type-def type-id='e3d8ce29' size-in-bits='64' id='69c138b1'/>
+      <pointer-type-def type-id='69c138b1' size-in-bits='64' id='162c1c01'/>
+      <pointer-type-def type-id='978e8e27' size-in-bits='64' id='f886696f'/>
+      <pointer-type-def type-id='22f86351' size-in-bits='64' id='3e6eb939'/>
+      <pointer-type-def type-id='feeb4c2f' size-in-bits='64' id='a6892387'/>
+      <pointer-type-def type-id='e54806c5' size-in-bits='64' id='f774a955'/>
+      <pointer-type-def type-id='473764d9' size-in-bits='64' id='84618a95'/>
+      <pointer-type-def type-id='1b9c6d35' size-in-bits='64' id='917bb1c5'/>
+      <pointer-type-def type-id='f9fef04f' size-in-bits='64' id='389faaf7'/>
+      <qualified-type-def type-id='66fa8ce5' const='yes' id='38ce7f2c'/>
+      <pointer-type-def type-id='38ce7f2c' size-in-bits='64' id='7311f672'/>
+      <qualified-type-def type-id='e4af473b' const='yes' id='e88d0150'/>
+      <pointer-type-def type-id='e88d0150' size-in-bits='64' id='8ff9530e'/>
+      <pointer-type-def type-id='8ff9530e' size-in-bits='64' id='c97de1ac'/>
+      <qualified-type-def type-id='40af3608' const='yes' id='e70f1c73'/>
+      <pointer-type-def type-id='e70f1c73' size-in-bits='64' id='15c9a01b'/>
+      <pointer-type-def type-id='933e0e21' size-in-bits='64' id='76ae8e1d'/>
+      <pointer-type-def type-id='ebb550f0' size-in-bits='64' id='84ba3262'/>
+      <qualified-type-def type-id='84ba3262' const='yes' id='1ea91ded'/>
+      <pointer-type-def type-id='6dbd849e' size-in-bits='64' id='e803acd0'/>
+      <pointer-type-def type-id='80f4b756' size-in-bits='64' id='7d3cd834'/>
+      <qualified-type-def type-id='90bc6bed' const='yes' id='2cd82b3d'/>
+      <pointer-type-def type-id='2cd82b3d' size-in-bits='64' id='af4bd535'/>
+      <qualified-type-def type-id='6739dd09' const='yes' id='bca91994'/>
+      <pointer-type-def type-id='bca91994' size-in-bits='64' id='bc33861a'/>
+      <qualified-type-def type-id='b5b9216e' const='yes' id='09f052f7'/>
+      <pointer-type-def type-id='09f052f7' size-in-bits='64' id='825271e7'/>
+      <qualified-type-def type-id='caca298d' const='yes' id='3e448446'/>
+      <pointer-type-def type-id='3e448446' size-in-bits='64' id='71dc7604'/>
+      <qualified-type-def type-id='d6ebca75' const='yes' id='893302ec'/>
+      <pointer-type-def type-id='893302ec' size-in-bits='64' id='c14d5db2'/>
+      <qualified-type-def type-id='e4992400' const='yes' id='1d22df6b'/>
+      <pointer-type-def type-id='1d22df6b' size-in-bits='64' id='1ee57353'/>
+      <qualified-type-def type-id='c553aabf' const='yes' id='7c8b7a6c'/>
+      <pointer-type-def type-id='7c8b7a6c' size-in-bits='64' id='55917c32'/>
+      <qualified-type-def type-id='0584e65d' const='yes' id='47d6ff44'/>
+      <pointer-type-def type-id='47d6ff44' size-in-bits='64' id='85741a2a'/>
+      <qualified-type-def type-id='1a0c5572' const='yes' id='3cea21ed'/>
+      <pointer-type-def type-id='3cea21ed' size-in-bits='64' id='ab932c45'/>
+      <qualified-type-def type-id='1958bd2a' const='yes' id='0b88199f'/>
+      <pointer-type-def type-id='0b88199f' size-in-bits='64' id='dc4077ef'/>
+      <qualified-type-def type-id='7dffcde2' const='yes' id='b8ae588d'/>
+      <pointer-type-def type-id='b8ae588d' size-in-bits='64' id='61758ee5'/>
+      <qualified-type-def type-id='8a2a988b' const='yes' id='dc743cb2'/>
+      <pointer-type-def type-id='dc743cb2' size-in-bits='64' id='a2fb6348'/>
+      <qualified-type-def type-id='fa21a7e9' const='yes' id='de5211b8'/>
+      <pointer-type-def type-id='de5211b8' size-in-bits='64' id='8d31a8d6'/>
+      <qualified-type-def type-id='5f0d764c' const='yes' id='0c45e0bb'/>
+      <pointer-type-def type-id='0c45e0bb' size-in-bits='64' id='e3008443'/>
+      <qualified-type-def type-id='fe070fe8' const='yes' id='45cc51cf'/>
+      <pointer-type-def type-id='45cc51cf' size-in-bits='64' id='c5a4eb7f'/>
+      <qualified-type-def type-id='5f5aa1ff' const='yes' id='c8e0fb8e'/>
+      <pointer-type-def type-id='c8e0fb8e' size-in-bits='64' id='de2c232c'/>
+      <qualified-type-def type-id='0f042891' const='yes' id='fb4943b2'/>
+      <pointer-type-def type-id='fb4943b2' size-in-bits='64' id='2c556848'/>
+      <qualified-type-def type-id='ca10d3ca' const='yes' id='77e48e1b'/>
+      <pointer-type-def type-id='77e48e1b' size-in-bits='64' id='edcbd723'/>
+      <qualified-type-def type-id='1740bab9' const='yes' id='95d0d4e8'/>
+      <pointer-type-def type-id='95d0d4e8' size-in-bits='64' id='99beed66'/>
+      <qualified-type-def type-id='9493d3c9' const='yes' id='d03af91a'/>
+      <pointer-type-def type-id='d03af91a' size-in-bits='64' id='fcd64690'/>
+      <qualified-type-def type-id='ae89b201' const='yes' id='499c8dd8'/>
+      <pointer-type-def type-id='499c8dd8' size-in-bits='64' id='d37373f6'/>
+      <qualified-type-def type-id='2888d74a' const='yes' id='7893b96a'/>
+      <pointer-type-def type-id='7893b96a' size-in-bits='64' id='108c9fc0'/>
+      <qualified-type-def type-id='71e87d49' const='yes' id='47f81694'/>
+      <pointer-type-def type-id='47f81694' size-in-bits='64' id='098bcd1a'/>
+      <qualified-type-def type-id='ff771233' const='yes' id='a4a37730'/>
+      <pointer-type-def type-id='a4a37730' size-in-bits='64' id='47547dee'/>
+      <pointer-type-def type-id='10e36dc5' size-in-bits='64' id='10f0a819'/>
+      <qualified-type-def type-id='3b156a69' const='yes' id='d8801604'/>
+      <pointer-type-def type-id='d8801604' size-in-bits='64' id='ffa2ea6a'/>
+      <qualified-type-def type-id='744e4af5' const='yes' id='ef40fb12'/>
+      <pointer-type-def type-id='ef40fb12' size-in-bits='64' id='db4b7928'/>
+      <qualified-type-def type-id='9f6abc71' const='yes' id='b2d59d2a'/>
+      <pointer-type-def type-id='b2d59d2a' size-in-bits='64' id='86462700'/>
+      <qualified-type-def type-id='cd5915d8' const='yes' id='ccd48cf5'/>
+      <pointer-type-def type-id='ccd48cf5' size-in-bits='64' id='5199c30d'/>
+      <qualified-type-def type-id='970ecd31' const='yes' id='4bf19232'/>
+      <pointer-type-def type-id='4bf19232' size-in-bits='64' id='a548fbc8'/>
+      <qualified-type-def type-id='b5382ece' const='yes' id='5251a03b'/>
+      <pointer-type-def type-id='5251a03b' size-in-bits='64' id='a77efac3'/>
+      <qualified-type-def type-id='ed6c59ba' const='yes' id='2153cf5d'/>
+      <pointer-type-def type-id='2153cf5d' size-in-bits='64' id='edef9855'/>
+      <qualified-type-def type-id='2ba71bf0' const='yes' id='4e267e15'/>
+      <pointer-type-def type-id='4e267e15' size-in-bits='64' id='4598bd2d'/>
+      <qualified-type-def type-id='02244303' const='yes' id='82c73a4e'/>
+      <pointer-type-def type-id='82c73a4e' size-in-bits='64' id='43a0eb6c'/>
+      <qualified-type-def type-id='87cad984' const='yes' id='3ae4e62d'/>
+      <pointer-type-def type-id='3ae4e62d' size-in-bits='64' id='bd561d05'/>
+      <qualified-type-def type-id='8ce4ff83' const='yes' id='051f9336'/>
+      <pointer-type-def type-id='051f9336' size-in-bits='64' id='2cb49514'/>
+      <qualified-type-def type-id='a7832498' const='yes' id='5e3feda8'/>
+      <pointer-type-def type-id='5e3feda8' size-in-bits='64' id='e0a2e3a6'/>
+      <qualified-type-def type-id='74191d27' const='yes' id='60263890'/>
+      <pointer-type-def type-id='60263890' size-in-bits='64' id='162b4cce'/>
+      <qualified-type-def type-id='874691ab' const='yes' id='ecd54c0e'/>
+      <pointer-type-def type-id='ecd54c0e' size-in-bits='64' id='f7c6dcac'/>
+      <qualified-type-def type-id='e7826ffa' const='yes' id='0f840455'/>
+      <pointer-type-def type-id='0f840455' size-in-bits='64' id='ebd313ed'/>
+      <qualified-type-def type-id='1dc6a898' const='yes' id='d5c0a628'/>
+      <qualified-type-def type-id='f9b06939' const='yes' id='19272f09'/>
+      <pointer-type-def type-id='19272f09' size-in-bits='64' id='bbaf3419'/>
+      <qualified-type-def type-id='002ac4a6' const='yes' id='ea86de29'/>
+      <pointer-type-def type-id='ea86de29' size-in-bits='64' id='354f7eb9'/>
+      <qualified-type-def type-id='f0981eeb' const='yes' id='20f5f452'/>
+      <qualified-type-def type-id='7359adad' const='yes' id='9cbd1c16'/>
+      <qualified-type-def type-id='19795245' const='yes' id='92e9b57c'/>
+      <pointer-type-def type-id='92e9b57c' size-in-bits='64' id='9be87662'/>
+      <qualified-type-def type-id='2d3dd5e3' const='yes' id='e4f938dc'/>
+      <pointer-type-def type-id='e4f938dc' size-in-bits='64' id='6a54ab42'/>
+      <pointer-type-def type-id='6a54ab42' size-in-bits='64' id='cb49d4b8'/>
+      <pointer-type-def type-id='0e1f7cac' size-in-bits='64' id='90ad83aa'/>
+      <pointer-type-def type-id='f3d147c3' size-in-bits='64' id='740b5503'/>
+      <pointer-type-def type-id='609c0c20' size-in-bits='64' id='7171de96'/>
+      <pointer-type-def type-id='b5b9216e' size-in-bits='64' id='21370cb4'/>
+      <pointer-type-def type-id='514fe525' size-in-bits='64' id='67f526b5'/>
+      <pointer-type-def type-id='5e6083f1' size-in-bits='64' id='af5eeab9'/>
+      <pointer-type-def type-id='3cc0f7af' size-in-bits='64' id='ffbca087'/>
+      <pointer-type-def type-id='85c172d2' size-in-bits='64' id='708ae4d0'/>
+      <pointer-type-def type-id='cdf069c8' size-in-bits='64' id='94271082'/>
+      <pointer-type-def type-id='df5e8716' size-in-bits='64' id='247dd85c'/>
+      <pointer-type-def type-id='d80b6ab0' size-in-bits='64' id='72bb8c36'/>
+      <pointer-type-def type-id='90a4444b' size-in-bits='64' id='f0f856cb'/>
+      <pointer-type-def type-id='0328c8b6' size-in-bits='64' id='dfeb7f6c'/>
+      <pointer-type-def type-id='afbeac63' size-in-bits='64' id='85d57723'/>
+      <pointer-type-def type-id='f1fbc58e' size-in-bits='64' id='26cad514'/>
+      <pointer-type-def type-id='d6ebca75' size-in-bits='64' id='27675065'/>
+      <pointer-type-def type-id='277029da' size-in-bits='64' id='3cce524c'/>
+      <pointer-type-def type-id='fbe9020d' size-in-bits='64' id='d9394db1'/>
+      <pointer-type-def type-id='2bdce7cd' size-in-bits='64' id='02f90a61'/>
+      <pointer-type-def type-id='8e586c5c' size-in-bits='64' id='b1a5e68a'/>
+      <pointer-type-def type-id='d5476b80' size-in-bits='64' id='b80a6036'/>
+      <pointer-type-def type-id='691a06da' size-in-bits='64' id='e9a4c848'/>
+      <pointer-type-def type-id='13edfabd' size-in-bits='64' id='324070f9'/>
+      <pointer-type-def type-id='e9a4c848' size-in-bits='64' id='30677246'/>
+      <pointer-type-def type-id='5a9e3f68' size-in-bits='64' id='ae02292a'/>
+      <pointer-type-def type-id='9280516b' size-in-bits='64' id='ca9b3bbf'/>
+      <pointer-type-def type-id='e6a2a878' size-in-bits='64' id='7f79f20e'/>
+      <pointer-type-def type-id='da1095b6' size-in-bits='64' id='7f0eb64c'/>
+      <pointer-type-def type-id='70c545cd' size-in-bits='64' id='5bb9c75d'/>
+      <pointer-type-def type-id='eab08458' size-in-bits='64' id='d92598ce'/>
+      <pointer-type-def type-id='8ffe5745' size-in-bits='64' id='890caaa5'/>
+      <pointer-type-def type-id='b4b8adeb' size-in-bits='64' id='77e79a4b'/>
+      <pointer-type-def type-id='23c73eb3' size-in-bits='64' id='0343ce83'/>
+      <pointer-type-def type-id='0343ce83' size-in-bits='64' id='ccbe540b'/>
+      <pointer-type-def type-id='fb0c2987' size-in-bits='64' id='731257ff'/>
+      <pointer-type-def type-id='2f5a60be' size-in-bits='64' id='21e53d44'/>
+      <pointer-type-def type-id='bccdf330' size-in-bits='64' id='16c53416'/>
+      <pointer-type-def type-id='8d0295a2' size-in-bits='64' id='5760dcb0'/>
+      <pointer-type-def type-id='7dc87302' size-in-bits='64' id='08890290'/>
+      <pointer-type-def type-id='9441bb37' size-in-bits='64' id='1ea8c5af'/>
+      <pointer-type-def type-id='aadc8ce9' size-in-bits='64' id='994d9d61'/>
+      <pointer-type-def type-id='43489bca' size-in-bits='64' id='ba18e248'/>
+      <pointer-type-def type-id='62bd013f' size-in-bits='64' id='0bbc9f87'/>
+      <pointer-type-def type-id='4f60ffbc' size-in-bits='64' id='33c599da'/>
+      <pointer-type-def type-id='781993c9' size-in-bits='64' id='383471a1'/>
+      <pointer-type-def type-id='2473bc1f' size-in-bits='64' id='84dc82b7'/>
+      <pointer-type-def type-id='8db0df1b' size-in-bits='64' id='d09d4bab'/>
+      <pointer-type-def type-id='d09d4bab' size-in-bits='64' id='e89ddc13'/>
+      <pointer-type-def type-id='03a4a074' size-in-bits='64' id='08cbad52'/>
+      <pointer-type-def type-id='08cbad52' size-in-bits='64' id='50a213e8'/>
+      <pointer-type-def type-id='b6993efc' size-in-bits='64' id='08c8d0fa'/>
+      <pointer-type-def type-id='1851ab9f' size-in-bits='64' id='730f4667'/>
+      <pointer-type-def type-id='8d24b00b' size-in-bits='64' id='75e9503b'/>
+      <pointer-type-def type-id='a9ef191f' size-in-bits='64' id='ab7bbd67'/>
+      <pointer-type-def type-id='fe070fe8' size-in-bits='64' id='7e666abe'/>
+      <pointer-type-def type-id='96bb51fa' size-in-bits='64' id='e8c4dba4'/>
+      <pointer-type-def type-id='276427e1' size-in-bits='64' id='1db260e5'/>
+      <pointer-type-def type-id='9b8b35dc' size-in-bits='64' id='68e5f4e6'/>
+      <pointer-type-def type-id='8d077d91' size-in-bits='64' id='2c5f769d'/>
+      <pointer-type-def type-id='0f1de308' size-in-bits='64' id='10451dea'/>
+      <pointer-type-def type-id='ffad938a' size-in-bits='64' id='01ffd89c'/>
+      <pointer-type-def type-id='01941a31' size-in-bits='64' id='3347d7ed'/>
+      <pointer-type-def type-id='05cd795f' size-in-bits='64' id='d1c62993'/>
+      <pointer-type-def type-id='e625eab0' size-in-bits='64' id='388a7f2a'/>
+      <pointer-type-def type-id='8b7bbbae' size-in-bits='64' id='a50c1d00'/>
+      <pointer-type-def type-id='b11be48c' size-in-bits='64' id='65cea51e'/>
+      <pointer-type-def type-id='75985c10' size-in-bits='64' id='fb86b772'/>
+      <pointer-type-def type-id='f29c5fbb' size-in-bits='64' id='0b787edf'/>
+      <pointer-type-def type-id='935b1156' size-in-bits='64' id='6eededc8'/>
+      <pointer-type-def type-id='3c5b888e' size-in-bits='64' id='214533b0'/>
+      <pointer-type-def type-id='e613f28a' size-in-bits='64' id='1c33159c'/>
+      <pointer-type-def type-id='c0d42424' size-in-bits='64' id='b298c88e'/>
+      <pointer-type-def type-id='3e497762' size-in-bits='64' id='9e5416b4'/>
+      <pointer-type-def type-id='4130d810' size-in-bits='64' id='db94924a'/>
+      <pointer-type-def type-id='d093a820' size-in-bits='64' id='469599ea'/>
+      <pointer-type-def type-id='1af55526' size-in-bits='64' id='b201adb8'/>
+      <pointer-type-def type-id='38c67a4b' size-in-bits='64' id='8801b8af'/>
+      <pointer-type-def type-id='b739ffde' size-in-bits='64' id='d066db18'/>
+      <pointer-type-def type-id='eb0f802b' size-in-bits='64' id='6241aa4f'/>
+      <pointer-type-def type-id='904e13de' size-in-bits='64' id='a57bd028'/>
+      <pointer-type-def type-id='fb8e936d' size-in-bits='64' id='c237e829'/>
+      <pointer-type-def type-id='dfe7e6ee' size-in-bits='64' id='4b872e00'/>
+      <pointer-type-def type-id='ea863425' size-in-bits='64' id='35646c79'/>
+      <pointer-type-def type-id='c3384bd1' size-in-bits='64' id='30ab2c05'/>
+      <pointer-type-def type-id='70084cf7' size-in-bits='64' id='78efe913'/>
+      <pointer-type-def type-id='d87d8242' size-in-bits='64' id='24c1e1dc'/>
+      <pointer-type-def type-id='37d25cd5' size-in-bits='64' id='230dd919'/>
+      <pointer-type-def type-id='cd1955fc' size-in-bits='64' id='4eb95ade'/>
+      <pointer-type-def type-id='da73ead4' size-in-bits='64' id='e6da64f6'/>
+      <pointer-type-def type-id='19ebf718' size-in-bits='64' id='42beb73a'/>
+      <pointer-type-def type-id='56cb7858' size-in-bits='64' id='12f0ff82'/>
+      <pointer-type-def type-id='cdead692' size-in-bits='64' id='a02c170c'/>
+      <pointer-type-def type-id='c1f57de8' size-in-bits='64' id='87e3d3e2'/>
+      <pointer-type-def type-id='d9f53f44' size-in-bits='64' id='ab57fa9e'/>
+      <pointer-type-def type-id='1b99a1f1' size-in-bits='64' id='5ddef2dd'/>
+      <pointer-type-def type-id='e0d0028a' size-in-bits='64' id='31cc9254'/>
+      <pointer-type-def type-id='6bd699b2' size-in-bits='64' id='8ea2626c'/>
+      <pointer-type-def type-id='b0623418' size-in-bits='64' id='bdada41a'/>
+      <pointer-type-def type-id='d67e1739' size-in-bits='64' id='4817356d'/>
+      <pointer-type-def type-id='cb6487f8' size-in-bits='64' id='57f0383a'/>
+      <pointer-type-def type-id='cd313b90' size-in-bits='64' id='28ba4492'/>
+      <pointer-type-def type-id='09c8759c' size-in-bits='64' id='7f5be7f6'/>
+      <pointer-type-def type-id='a04cd5a9' size-in-bits='64' id='234843b5'/>
+      <pointer-type-def type-id='7e8ddfae' size-in-bits='64' id='d3807eb0'/>
+      <pointer-type-def type-id='f2fea3d5' size-in-bits='64' id='7733ef81'/>
+      <pointer-type-def type-id='453343e6' size-in-bits='64' id='98c2d938'/>
+      <pointer-type-def type-id='f3601a85' size-in-bits='64' id='c9cd0e09'/>
+      <pointer-type-def type-id='270f5881' size-in-bits='64' id='f9e0c0e5'/>
+      <pointer-type-def type-id='79d185ec' size-in-bits='64' id='0508acce'/>
+      <pointer-type-def type-id='b073751e' size-in-bits='64' id='47800058'/>
+      <pointer-type-def type-id='cfe842dd' size-in-bits='64' id='f4f91b99'/>
+      <pointer-type-def type-id='a92634ba' size-in-bits='64' id='c23b3cbc'/>
+      <pointer-type-def type-id='bdd382a3' size-in-bits='64' id='820976ef'/>
+      <pointer-type-def type-id='27e3f547' size-in-bits='64' id='6b7539fb'/>
+      <pointer-type-def type-id='c3b65e91' size-in-bits='64' id='64ecf6a5'/>
+      <pointer-type-def type-id='b36b391c' size-in-bits='64' id='fd780be6'/>
+      <pointer-type-def type-id='9b634486' size-in-bits='64' id='7f416e10'/>
+      <pointer-type-def type-id='3e7a7dc5' size-in-bits='64' id='b94ac371'/>
+      <pointer-type-def type-id='a71373a3' size-in-bits='64' id='0b56752f'/>
+      <pointer-type-def type-id='e1ee975e' size-in-bits='64' id='58d10a98'/>
+      <pointer-type-def type-id='8e42c936' size-in-bits='64' id='aea90108'/>
+      <pointer-type-def type-id='8bcde2dc' size-in-bits='64' id='964d2eb6'/>
+      <pointer-type-def type-id='054882f1' size-in-bits='64' id='f9e738c5'/>
+      <pointer-type-def type-id='f8cb692f' size-in-bits='64' id='a5786cbb'/>
+      <pointer-type-def type-id='92cdf314' size-in-bits='64' id='6c4618be'/>
+      <pointer-type-def type-id='93be8120' size-in-bits='64' id='a42969fa'/>
+      <qualified-type-def type-id='a42969fa' const='yes' id='2a3ad845'/>
+      <pointer-type-def type-id='6ee62c60' size-in-bits='64' id='795bbc42'/>
+      <qualified-type-def type-id='795bbc42' const='yes' id='9125ffcd'/>
+      <pointer-type-def type-id='e32cf39f' size-in-bits='64' id='fe3af88b'/>
+      <pointer-type-def type-id='869f5d80' size-in-bits='64' id='1654d99a'/>
+      <pointer-type-def type-id='dc2316e7' size-in-bits='64' id='919b335b'/>
+      <pointer-type-def type-id='31e7d828' size-in-bits='64' id='800c67c2'/>
+      <pointer-type-def type-id='a804e84c' size-in-bits='64' id='8b8bc11e'/>
+      <pointer-type-def type-id='cea824ff' size-in-bits='64' id='254733eb'/>
+      <pointer-type-def type-id='b16db39f' size-in-bits='64' id='c94f6b13'/>
+      <pointer-type-def type-id='774cf1e5' size-in-bits='64' id='26692209'/>
+      <pointer-type-def type-id='c655c7b7' size-in-bits='64' id='efd5496b'/>
+      <pointer-type-def type-id='cf9ec29d' size-in-bits='64' id='0131eb61'/>
+      <pointer-type-def type-id='cca56d7c' size-in-bits='64' id='88994406'/>
+      <pointer-type-def type-id='270dc7da' size-in-bits='64' id='b07c56ec'/>
+      <pointer-type-def type-id='0467beaf' size-in-bits='64' id='80662063'/>
+      <pointer-type-def type-id='36a439e9' size-in-bits='64' id='bf4ae585'/>
+      <pointer-type-def type-id='c012d70e' size-in-bits='64' id='2fd02888'/>
+      <pointer-type-def type-id='d10f08e3' size-in-bits='64' id='2108b777'/>
+      <pointer-type-def type-id='031a4ff0' size-in-bits='64' id='1507ee2a'/>
+      <pointer-type-def type-id='c604b3e2' size-in-bits='64' id='d2f4c704'/>
+      <pointer-type-def type-id='eeeb3192' size-in-bits='64' id='9e27a8d4'/>
+      <pointer-type-def type-id='3b1012d7' size-in-bits='64' id='dcab5203'/>
+      <pointer-type-def type-id='4f21665b' size-in-bits='64' id='552c8f87'/>
+      <pointer-type-def type-id='e85fe596' size-in-bits='64' id='de6b64d0'/>
+      <pointer-type-def type-id='b992836c' size-in-bits='64' id='4e326e06'/>
+      <pointer-type-def type-id='e6f3a13f' size-in-bits='64' id='70b08f83'/>
+      <pointer-type-def type-id='cda9f6b0' size-in-bits='64' id='483e8c3a'/>
+      <pointer-type-def type-id='26f907b0' size-in-bits='64' id='ea44f8d2'/>
+      <pointer-type-def type-id='0e61b6d4' size-in-bits='64' id='eb638046'/>
+      <pointer-type-def type-id='56a7b834' size-in-bits='64' id='7aa5a21e'/>
+      <pointer-type-def type-id='c95d9034' size-in-bits='64' id='2eb7248e'/>
+      <pointer-type-def type-id='262a563e' size-in-bits='64' id='6910c028'/>
+      <pointer-type-def type-id='3b03705e' size-in-bits='64' id='6850e780'/>
+      <pointer-type-def type-id='95e97e5e' size-in-bits='64' id='7292109c'/>
+      <pointer-type-def type-id='d002899d' size-in-bits='64' id='d042cfad'/>
+      <pointer-type-def type-id='db04abd6' size-in-bits='64' id='7c6e0e0c'/>
+      <pointer-type-def type-id='f2b4d088' size-in-bits='64' id='4fa10f9e'/>
+      <pointer-type-def type-id='dd74f3ed' size-in-bits='64' id='76ccea8d'/>
+      <pointer-type-def type-id='ca0c09a6' size-in-bits='64' id='7a35228c'/>
+      <pointer-type-def type-id='ca10d3ca' size-in-bits='64' id='a7c6e908'/>
+      <pointer-type-def type-id='22ec9634' size-in-bits='64' id='3638c201'/>
+      <pointer-type-def type-id='7b5435ce' size-in-bits='64' id='1f4b5d14'/>
+      <pointer-type-def type-id='29d79af7' size-in-bits='64' id='150efd3f'/>
+      <pointer-type-def type-id='60fb5bfa' size-in-bits='64' id='8212a608'/>
+      <pointer-type-def type-id='cc9b8e48' size-in-bits='64' id='627d9f9e'/>
+      <pointer-type-def type-id='471fc91b' size-in-bits='64' id='e18defdb'/>
+      <pointer-type-def type-id='91f5bcb7' size-in-bits='64' id='fefa8c5f'/>
+      <pointer-type-def type-id='128d0ac4' size-in-bits='64' id='204a4632'/>
+      <pointer-type-def type-id='fe81ecb9' size-in-bits='64' id='92daca01'/>
+      <pointer-type-def type-id='3173bc57' size-in-bits='64' id='fce14c5f'/>
+      <pointer-type-def type-id='71e87d49' size-in-bits='64' id='d0a699d1'/>
+      <pointer-type-def type-id='696d238e' size-in-bits='64' id='23704f74'/>
+      <pointer-type-def type-id='094d8048' size-in-bits='64' id='acd96ee1'/>
+      <pointer-type-def type-id='da62d64b' size-in-bits='64' id='80f25feb'/>
+      <pointer-type-def type-id='5d0f15d4' size-in-bits='64' id='122191b2'/>
+      <pointer-type-def type-id='1a08fab8' size-in-bits='64' id='c48b394e'/>
+      <pointer-type-def type-id='a5179659' size-in-bits='64' id='d9d65b21'/>
+      <pointer-type-def type-id='b6ab8849' size-in-bits='64' id='d30bdc51'/>
+      <pointer-type-def type-id='b7cdd2f8' size-in-bits='64' id='c858233f'/>
+      <pointer-type-def type-id='72028e1c' size-in-bits='64' id='cc8d835a'/>
+      <pointer-type-def type-id='8cf069a2' size-in-bits='64' id='89b70200'/>
+      <pointer-type-def type-id='5f5c9d88' size-in-bits='64' id='0e87f9be'/>
+      <pointer-type-def type-id='ff1c7c9b' size-in-bits='64' id='087d687b'/>
+      <pointer-type-def type-id='d80b72e6' size-in-bits='64' id='2168a3eb'/>
+      <pointer-type-def type-id='47d6e76e' size-in-bits='64' id='7cc59444'/>
+      <pointer-type-def type-id='72f469ec' size-in-bits='64' id='e84b031a'/>
+      <pointer-type-def type-id='5a3e162b' size-in-bits='64' id='153e161b'/>
+      <pointer-type-def type-id='dc49d474' size-in-bits='64' id='a6d2fa52'/>
+      <pointer-type-def type-id='ff0d68dc' size-in-bits='64' id='f6507b0a'/>
+      <pointer-type-def type-id='c5ccfee8' size-in-bits='64' id='023b769e'/>
+      <pointer-type-def type-id='69bf7bee' size-in-bits='64' id='b53e8dbb'/>
+      <pointer-type-def type-id='0cf2912e' size-in-bits='64' id='a53e2328'/>
+      <pointer-type-def type-id='9386c3d1' size-in-bits='64' id='fc7daf55'/>
+      <pointer-type-def type-id='b68c3fba' size-in-bits='64' id='d5b25e9c'/>
+      <pointer-type-def type-id='7f8cc66d' size-in-bits='64' id='c4facf61'/>
+      <pointer-type-def type-id='11c8601b' size-in-bits='64' id='223696fb'/>
+      <pointer-type-def type-id='311626f1' size-in-bits='64' id='df4b7819'/>
+      <pointer-type-def type-id='770fc578' size-in-bits='64' id='cc546a3e'/>
+      <pointer-type-def type-id='de031042' size-in-bits='64' id='d60f4f10'/>
+      <pointer-type-def type-id='6a003ee8' size-in-bits='64' id='209d601e'/>
+      <pointer-type-def type-id='29476915' size-in-bits='64' id='2730d015'/>
+      <pointer-type-def type-id='8f90cd2a' size-in-bits='64' id='063da268'/>
+      <pointer-type-def type-id='7bd9942c' size-in-bits='64' id='47ed147a'/>
+      <pointer-type-def type-id='96b6b914' size-in-bits='64' id='f0cb8b62'/>
+      <pointer-type-def type-id='9e045430' size-in-bits='64' id='ad9e36e6'/>
+      <pointer-type-def type-id='b43b0dce' size-in-bits='64' id='3f4455c4'/>
+      <pointer-type-def type-id='25dc4075' size-in-bits='64' id='58ed56f5'/>
+      <pointer-type-def type-id='0319fc05' size-in-bits='64' id='26452515'/>
+      <pointer-type-def type-id='bd965180' size-in-bits='64' id='a2bff676'/>
+      <pointer-type-def type-id='5a9929eb' size-in-bits='64' id='68a2d05b'/>
+      <pointer-type-def type-id='a558a366' size-in-bits='64' id='a6f0152c'/>
+      <pointer-type-def type-id='92afe5f3' size-in-bits='64' id='982f8df3'/>
+      <pointer-type-def type-id='b82b9d3a' size-in-bits='64' id='dc5ce118'/>
+      <pointer-type-def type-id='f4b65c68' size-in-bits='64' id='e69c040e'/>
+      <pointer-type-def type-id='a25ce1be' size-in-bits='64' id='02f11ed4'/>
+      <pointer-type-def type-id='e17bc528' size-in-bits='64' id='d9e60bb2'/>
+      <pointer-type-def type-id='02f11ed4' size-in-bits='64' id='9f93c9da'/>
+      <pointer-type-def type-id='b5382ece' size-in-bits='64' id='bcfe6314'/>
+      <pointer-type-def type-id='818799b4' size-in-bits='64' id='60219102'/>
+      <pointer-type-def type-id='ed7b7f6b' size-in-bits='64' id='903b12fe'/>
+      <pointer-type-def type-id='7263c471' size-in-bits='64' id='2bf16f59'/>
+      <pointer-type-def type-id='9d67acd5' size-in-bits='64' id='b9419dc5'/>
+      <pointer-type-def type-id='12aa8ce4' size-in-bits='64' id='2e97ceaf'/>
+      <pointer-type-def type-id='d10e968a' size-in-bits='64' id='b94e5398'/>
+      <pointer-type-def type-id='0252e252' size-in-bits='64' id='b816e1d0'/>
+      <pointer-type-def type-id='a490b814' size-in-bits='64' id='e15f3242'/>
+      <pointer-type-def type-id='bed94322' size-in-bits='64' id='15d29710'/>
+      <pointer-type-def type-id='2519c394' size-in-bits='64' id='72ece9e2'/>
+      <pointer-type-def type-id='9ecf9226' size-in-bits='64' id='6d5994d5'/>
+      <pointer-type-def type-id='415eecf1' size-in-bits='64' id='f0acc909'/>
+      <pointer-type-def type-id='b440e872' size-in-bits='64' id='3ac36db0'/>
+      <pointer-type-def type-id='605b61bb' size-in-bits='64' id='2871909b'/>
+      <pointer-type-def type-id='a2802dd0' size-in-bits='64' id='7f30b822'/>
+      <pointer-type-def type-id='4b2795fc' size-in-bits='64' id='e8d572d7'/>
+      <pointer-type-def type-id='ac9f3c7e' size-in-bits='64' id='af00e73d'/>
+      <pointer-type-def type-id='aef83a98' size-in-bits='64' id='39341f7e'/>
+      <pointer-type-def type-id='9dbdc7de' size-in-bits='64' id='66b0cee4'/>
+      <pointer-type-def type-id='f6be3c23' size-in-bits='64' id='6dcf57f3'/>
+      <pointer-type-def type-id='33341965' size-in-bits='64' id='0892f7dc'/>
+      <pointer-type-def type-id='e29df76e' size-in-bits='64' id='15543b10'/>
+      <pointer-type-def type-id='02244303' size-in-bits='64' id='b316d9a3'/>
+      <pointer-type-def type-id='c2be49b0' size-in-bits='64' id='eb9a3ab6'/>
+      <pointer-type-def type-id='2a8a6332' size-in-bits='64' id='e6532500'/>
+      <pointer-type-def type-id='67b24a02' size-in-bits='64' id='d5d06540'/>
+      <pointer-type-def type-id='b9b792e2' size-in-bits='64' id='c78f98c0'/>
+      <pointer-type-def type-id='caf652c6' size-in-bits='64' id='e7d2a5fc'/>
+      <pointer-type-def type-id='5218160d' size-in-bits='64' id='c9d64c0d'/>
+      <pointer-type-def type-id='45e819d6' size-in-bits='64' id='07af3c3c'/>
+      <pointer-type-def type-id='c0342c43' size-in-bits='64' id='d38eb863'/>
+      <pointer-type-def type-id='999b38a0' size-in-bits='64' id='c44b3996'/>
+      <pointer-type-def type-id='afb04a62' size-in-bits='64' id='54d4ed50'/>
+      <pointer-type-def type-id='549dd8f4' size-in-bits='64' id='f28646d2'/>
+      <pointer-type-def type-id='f28646d2' size-in-bits='64' id='c161b868'/>
+      <pointer-type-def type-id='663acc25' size-in-bits='64' id='bf3ef905'/>
+      <pointer-type-def type-id='2561fcb2' size-in-bits='64' id='ff2b3d10'/>
+      <pointer-type-def type-id='29843697' size-in-bits='64' id='9eead88f'/>
+      <pointer-type-def type-id='e290c28c' size-in-bits='64' id='2a128f5a'/>
+      <pointer-type-def type-id='a42536cd' size-in-bits='64' id='5c39fc92'/>
+      <pointer-type-def type-id='f3415517' size-in-bits='64' id='f8dc9def'/>
+      <pointer-type-def type-id='b73dd29b' size-in-bits='64' id='1be0f6ab'/>
+      <pointer-type-def type-id='55bdfa3e' size-in-bits='64' id='32efad44'/>
+      <pointer-type-def type-id='dee16bbe' size-in-bits='64' id='cb1156c4'/>
+      <pointer-type-def type-id='27cb404f' size-in-bits='64' id='4be14597'/>
+      <pointer-type-def type-id='317e3dc9' size-in-bits='64' id='32cc1711'/>
+      <pointer-type-def type-id='9a4619bf' size-in-bits='64' id='a91cd5f7'/>
+      <pointer-type-def type-id='5165995d' size-in-bits='64' id='31be5add'/>
+      <pointer-type-def type-id='ae8bfcdd' size-in-bits='64' id='0fbf3cfd'/>
+      <pointer-type-def type-id='a8c69bdf' size-in-bits='64' id='374692c7'/>
+      <pointer-type-def type-id='dd37d315' size-in-bits='64' id='613dff15'/>
+      <pointer-type-def type-id='8838d802' size-in-bits='64' id='c249b570'/>
+      <pointer-type-def type-id='917c67c0' size-in-bits='64' id='74439606'/>
+      <pointer-type-def type-id='a240f41d' size-in-bits='64' id='f772df6d'/>
+      <pointer-type-def type-id='fb4018a0' size-in-bits='64' id='cff2d845'/>
+      <pointer-type-def type-id='1207cfa9' size-in-bits='64' id='2a5ff2f1'/>
+      <pointer-type-def type-id='56798c81' size-in-bits='64' id='8dee6d89'/>
+      <pointer-type-def type-id='e4a7867c' size-in-bits='64' id='f7d7131a'/>
+      <pointer-type-def type-id='f7d7131a' size-in-bits='64' id='57933490'/>
+      <pointer-type-def type-id='5081ed08' size-in-bits='64' id='c77a71ce'/>
+      <pointer-type-def type-id='bc39a8be' size-in-bits='64' id='42c8f564'/>
+      <pointer-type-def type-id='3eb82749' size-in-bits='64' id='11e11a61'/>
+      <pointer-type-def type-id='2d863538' size-in-bits='64' id='3c32f9de'/>
+      <pointer-type-def type-id='bc3f1924' size-in-bits='64' id='f23e2572'/>
+      <pointer-type-def type-id='3a97b64f' size-in-bits='64' id='2c927837'/>
+      <pointer-type-def type-id='abe41e67' size-in-bits='64' id='9248e67f'/>
+      <pointer-type-def type-id='40a816ad' size-in-bits='64' id='4151733d'/>
+      <pointer-type-def type-id='49b910cc' size-in-bits='64' id='0f81ed2a'/>
+      <pointer-type-def type-id='0f81ed2a' size-in-bits='64' id='69881700'/>
+      <pointer-type-def type-id='fd48a6e6' size-in-bits='64' id='23d6768c'/>
+      <pointer-type-def type-id='23d6768c' size-in-bits='64' id='109cc752'/>
+      <pointer-type-def type-id='4ca0c298' size-in-bits='64' id='08e531de'/>
+      <qualified-type-def type-id='08e531de' const='yes' id='d2d812d1'/>
+      <pointer-type-def type-id='3132e187' size-in-bits='64' id='484b400f'/>
+      <pointer-type-def type-id='e431ac27' size-in-bits='64' id='700727c0'/>
+      <pointer-type-def type-id='9127cd0e' size-in-bits='64' id='868c74f4'/>
+      <pointer-type-def type-id='4c8d9cac' size-in-bits='64' id='572fbdca'/>
+      <pointer-type-def type-id='1c0d3c63' size-in-bits='64' id='4d01ede7'/>
+      <pointer-type-def type-id='1a4194ca' size-in-bits='64' id='b347e5ac'/>
+      <pointer-type-def type-id='3273164b' size-in-bits='64' id='d4ae3f3f'/>
+      <pointer-type-def type-id='77784eb9' size-in-bits='64' id='5fb34715'/>
+      <pointer-type-def type-id='f037e1bb' size-in-bits='64' id='a8faf36f'/>
+      <pointer-type-def type-id='5e80f131' size-in-bits='64' id='c2ab7955'/>
+      <pointer-type-def type-id='bc5c36f0' size-in-bits='64' id='d6e9f1fa'/>
+      <pointer-type-def type-id='68d3e576' size-in-bits='64' id='7a6c9108'/>
+      <pointer-type-def type-id='ff95f77c' size-in-bits='64' id='c1de1086'/>
+      <pointer-type-def type-id='56731789' size-in-bits='64' id='07ebb4cd'/>
+      <pointer-type-def type-id='51edb62f' size-in-bits='64' id='aecbf18b'/>
+      <pointer-type-def type-id='ebaa0f87' size-in-bits='64' id='3494e4bb'/>
+      <pointer-type-def type-id='100ce309' size-in-bits='64' id='4d8f5625'/>
+      <pointer-type-def type-id='0caa7082' size-in-bits='64' id='5f29549c'/>
+      <pointer-type-def type-id='e7e14410' size-in-bits='64' id='afa767ca'/>
+      <pointer-type-def type-id='e9855576' size-in-bits='64' id='72cd68b0'/>
+      <pointer-type-def type-id='ebe8eb0e' size-in-bits='64' id='40da47a8'/>
+      <pointer-type-def type-id='309ed22f' size-in-bits='64' id='d0882d6b'/>
+      <pointer-type-def type-id='beb5fff3' size-in-bits='64' id='17b1add7'/>
+      <pointer-type-def type-id='357e5279' size-in-bits='64' id='227e209d'/>
+      <pointer-type-def type-id='d5b6f34c' size-in-bits='64' id='434e45fe'/>
+      <pointer-type-def type-id='be97e3d8' size-in-bits='64' id='855e70d2'/>
+      <pointer-type-def type-id='18188cce' size-in-bits='64' id='9a6e3348'/>
+      <pointer-type-def type-id='78199102' size-in-bits='64' id='96948294'/>
+      <pointer-type-def type-id='8c180526' size-in-bits='64' id='b22f4610'/>
+      <pointer-type-def type-id='d802bf72' size-in-bits='64' id='e295c77c'/>
+      <pointer-type-def type-id='fec629e3' size-in-bits='64' id='a9b95107'/>
+      <pointer-type-def type-id='5ea5a07d' size-in-bits='64' id='f69fcfe1'/>
+      <pointer-type-def type-id='449f791f' size-in-bits='64' id='cc3e2efb'/>
+      <pointer-type-def type-id='ecbaa04a' size-in-bits='64' id='bb28da1c'/>
+      <pointer-type-def type-id='af6e35e9' size-in-bits='64' id='5e15576d'/>
+      <pointer-type-def type-id='19c2251e' size-in-bits='64' id='f9409001'/>
+      <pointer-type-def type-id='91ce1af9' size-in-bits='64' id='3df9fd28'/>
+      <pointer-type-def type-id='f9b06939' size-in-bits='64' id='8bff8096'/>
+      <pointer-type-def type-id='fdf3707c' size-in-bits='64' id='b1d4934a'/>
+      <pointer-type-def type-id='a24978a1' size-in-bits='64' id='72835629'/>
+      <pointer-type-def type-id='002ac4a6' size-in-bits='64' id='cf536864'/>
+      <pointer-type-def type-id='cdd79d4e' size-in-bits='64' id='f77c2568'/>
+      <pointer-type-def type-id='3642b004' size-in-bits='64' id='a506a456'/>
+      <pointer-type-def type-id='f0981eeb' size-in-bits='64' id='807869d3'/>
+      <pointer-type-def type-id='0fae1622' size-in-bits='64' id='d44a8cec'/>
+      <pointer-type-def type-id='8f9ed095' size-in-bits='64' id='cd2cc9e1'/>
+      <pointer-type-def type-id='08616ba1' size-in-bits='64' id='1a17e40d'/>
+      <pointer-type-def type-id='b7e0fed2' size-in-bits='64' id='57376310'/>
+      <pointer-type-def type-id='98f6607e' size-in-bits='64' id='9d2cef34'/>
+      <pointer-type-def type-id='8c178e22' size-in-bits='64' id='c0ced320'/>
+      <pointer-type-def type-id='ddd7cbfe' size-in-bits='64' id='273a7d34'/>
+      <pointer-type-def type-id='44f52e9d' size-in-bits='64' id='9d5923ed'/>
+      <pointer-type-def type-id='19e88834' size-in-bits='64' id='549da824'/>
+      <pointer-type-def type-id='a38d6c05' size-in-bits='64' id='da81d789'/>
+      <pointer-type-def type-id='62c85860' size-in-bits='64' id='2ae08426'/>
+      <pointer-type-def type-id='807afe73' size-in-bits='64' id='d02f4143'/>
+      <pointer-type-def type-id='5f2f8da4' size-in-bits='64' id='d295dab2'/>
+      <pointer-type-def type-id='ee076206' size-in-bits='64' id='953b12f8'/>
+      <pointer-type-def type-id='34135eb2' size-in-bits='64' id='eb839374'/>
+      <pointer-type-def type-id='97db9237' size-in-bits='64' id='8581ac2b'/>
+      <pointer-type-def type-id='58d69ec2' size-in-bits='64' id='33e7622c'/>
+      <pointer-type-def type-id='dcb10fbf' size-in-bits='64' id='60d662f3'/>
+      <pointer-type-def type-id='cc2d5b01' size-in-bits='64' id='3aa8795d'/>
+      <pointer-type-def type-id='0ae96173' size-in-bits='64' id='7997266f'/>
+      <pointer-type-def type-id='420b230d' size-in-bits='64' id='3ba771a1'/>
+      <pointer-type-def type-id='54d829fa' size-in-bits='64' id='f76f0ea4'/>
+      <pointer-type-def type-id='d843c93e' size-in-bits='64' id='f42e15b8'/>
+      <pointer-type-def type-id='37f6d957' size-in-bits='64' id='40363cbb'/>
+      <pointer-type-def type-id='a9732c0b' size-in-bits='64' id='b90b068f'/>
+      <pointer-type-def type-id='cbbffc65' size-in-bits='64' id='dbc22931'/>
+      <pointer-type-def type-id='a9cc575c' size-in-bits='64' id='88909596'/>
+      <pointer-type-def type-id='1c254730' size-in-bits='64' id='c9e2bc02'/>
+      <pointer-type-def type-id='08bcc9e6' size-in-bits='64' id='7b9768f0'/>
+      <pointer-type-def type-id='2ca9725a' size-in-bits='64' id='628f3294'/>
+      <pointer-type-def type-id='6c0e4a93' size-in-bits='64' id='4f3d95df'/>
+      <pointer-type-def type-id='ebcc73dc' size-in-bits='64' id='5f5506f6'/>
+      <pointer-type-def type-id='c96d591d' size-in-bits='64' id='f1825e09'/>
+      <pointer-type-def type-id='d647b094' size-in-bits='64' id='9b28bd76'/>
+      <pointer-type-def type-id='10587c0a' size-in-bits='64' id='aa377a8c'/>
+      <pointer-type-def type-id='257e5168' size-in-bits='64' id='96b6fff2'/>
+      <pointer-type-def type-id='5985c13a' size-in-bits='64' id='d6f1846c'/>
+      <pointer-type-def type-id='7a42d02f' size-in-bits='64' id='537ed613'/>
+      <pointer-type-def type-id='e9ef9215' size-in-bits='64' id='2f974a69'/>
+      <pointer-type-def type-id='74e7a035' size-in-bits='64' id='6af64a09'/>
+      <pointer-type-def type-id='0cf765ad' size-in-bits='64' id='d8db14d1'/>
+      <pointer-type-def type-id='c611b7c0' size-in-bits='64' id='941a57ca'/>
+      <pointer-type-def type-id='26d45b0c' size-in-bits='64' id='2c17fd2e'/>
+      <pointer-type-def type-id='d6e6975e' size-in-bits='64' id='eda08098'/>
+      <pointer-type-def type-id='127ce78a' size-in-bits='64' id='6ba28d1c'/>
+      <pointer-type-def type-id='1646f19a' size-in-bits='64' id='0ef96694'/>
+      <pointer-type-def type-id='18fcefa9' size-in-bits='64' id='1ff54a45'/>
+      <pointer-type-def type-id='8029c9e0' size-in-bits='64' id='9582ad9a'/>
+      <pointer-type-def type-id='70a927ce' size-in-bits='64' id='9615a2e0'/>
+      <pointer-type-def type-id='cdd056d2' size-in-bits='64' id='64115f6c'/>
+      <pointer-type-def type-id='e74bcc7b' size-in-bits='64' id='170cc62f'/>
+      <pointer-type-def type-id='1650bf24' size-in-bits='64' id='8f17d05e'/>
+      <pointer-type-def type-id='c5c76c9c' size-in-bits='64' id='b7f9d8e6'/>
+      <pointer-type-def type-id='4827f223' size-in-bits='64' id='939280af'/>
+      <pointer-type-def type-id='afb1917e' size-in-bits='64' id='0cfacb48'/>
+      <pointer-type-def type-id='e0c79ce2' size-in-bits='64' id='9c1150bc'/>
+      <pointer-type-def type-id='943685e6' size-in-bits='64' id='a46b05a0'/>
+      <pointer-type-def type-id='749378a8' size-in-bits='64' id='b6ba26fa'/>
+      <pointer-type-def type-id='c0e5af96' size-in-bits='64' id='8734cf20'/>
+      <pointer-type-def type-id='eaa32e2f' size-in-bits='64' id='63e171df'/>
+      <qualified-type-def type-id='bd54fe1a' volatile='yes' id='5efddaac'/>
+      <pointer-type-def type-id='b5ab048f' size-in-bits='64' id='03d48e96'/>
+      <pointer-type-def type-id='69970be2' size-in-bits='64' id='b16791f0'/>
+      <pointer-type-def type-id='ef9025d0' size-in-bits='64' id='83c1bde6'/>
+      <pointer-type-def type-id='a5159c01' size-in-bits='64' id='242e3d19'/>
+      <pointer-type-def type-id='705711f5' size-in-bits='64' id='c2c60445'/>
+      <pointer-type-def type-id='c39df2b8' size-in-bits='64' id='3d15880e'/>
+      <function-decl name='cpu_have_feature' mangled-name='cpu_have_feature' filepath='arch/arm64/include/asm/cpufeature.h' line='388' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpu_have_feature'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='crypto_register_skciphers' mangled-name='crypto_register_skciphers' filepath='include/crypto/internal/skcipher.h' line='131' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_skciphers'>
+        <parameter type-id='613dff15'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_register_shashes' mangled-name='crypto_register_shashes' filepath='include/crypto/internal/hash.h' line='103' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_shashes'>
+        <parameter type-id='1be0f6ab'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_unregister_skciphers' mangled-name='crypto_unregister_skciphers' filepath='include/crypto/internal/skcipher.h' line='132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_skciphers'>
+        <parameter type-id='613dff15'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='simd_skcipher_create_compat' mangled-name='simd_skcipher_create_compat' filepath='include/crypto/internal/simd.h' line='17' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simd_skcipher_create_compat'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='31be5add'/>
+      </function-decl>
+      <function-decl name='simd_skcipher_free' mangled-name='simd_skcipher_free' filepath='include/crypto/internal/simd.h' line='22' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simd_skcipher_free'>
+        <parameter type-id='31be5add'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_unregister_shashes' mangled-name='crypto_unregister_shashes' filepath='include/crypto/internal/hash.h' line='104' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_shashes'>
+        <parameter type-id='1be0f6ab'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ce_aes_expandkey' mangled-name='ce_aes_expandkey' filepath='arch/arm64/crypto/aes-ce-setkey.h' line='5' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ce_aes_expandkey'>
+        <parameter type-id='21370cb4'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kernel_neon_begin' mangled-name='kernel_neon_begin' filepath='arch/arm64/include/asm/neon.h' line='16' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_neon_begin'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kernel_neon_end' mangled-name='kernel_neon_end' filepath='arch/arm64/include/asm/neon.h' line='17' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_neon_end'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='aes_encrypt' mangled-name='aes_encrypt' filepath='include/crypto/aes.h' line='77' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='aes_encrypt'>
+        <parameter type-id='825271e7'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='354f7eb9'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='preempt_schedule_notrace' mangled-name='preempt_schedule_notrace' filepath='arch/arm64/include/asm/preempt.h' line='85' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='preempt_schedule_notrace'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skcipher_walk_virt' mangled-name='skcipher_walk_virt' filepath='include/crypto/internal/skcipher.h' line='137' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skcipher_walk_virt'>
+        <parameter type-id='74439606'/>
+        <parameter type-id='c249b570'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skcipher_walk_done' mangled-name='skcipher_walk_done' filepath='include/crypto/internal/skcipher.h' line='136' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skcipher_walk_done'>
+        <parameter type-id='74439606'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_inc' mangled-name='crypto_inc' filepath='include/crypto/algapi.h' line='197' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_inc'>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scatterwalk_ffwd' mangled-name='scatterwalk_ffwd' filepath='include/crypto/scatterwalk.h' line='111' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scatterwalk_ffwd'>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='bf3ef905'/>
+      </function-decl>
+      <function-decl name='crypto_shash_digest' mangled-name='crypto_shash_digest' filepath='include/crypto/hash.h' line='842' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_shash_digest'>
+        <parameter type-id='32efad44'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='cf536864'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_alloc_shash' mangled-name='crypto_alloc_shash' filepath='include/crypto/hash.h' line='695' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_alloc_shash'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='247dd85c'/>
+      </function-decl>
+      <function-decl name='crypto_destroy_tfm' mangled-name='crypto_destroy_tfm' filepath='include/linux/crypto.h' line='826' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_destroy_tfm'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='dfeb7f6c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <enum-decl name='writeback_sync_modes' filepath='include/linux/writeback.h' line='41' column='1' id='cf92d981'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='WB_SYNC_NONE' value='0'/>
+        <enumerator name='WB_SYNC_ALL' value='1'/>
+      </enum-decl>
+      <function-type size-in-bits='64' id='473764d9'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='26a90f95'/>
+      </function-type>
+      <function-type size-in-bits='64' id='933e0e21'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='26cad514'/>
+        <return type-id='80f4b756'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ebb550f0'>
+        <parameter type-id='89b70200'/>
+        <parameter type-id='d30bdc51'/>
+        <return type-id='80f4b756'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6dbd849e'>
+        <parameter type-id='2ae08426'/>
+        <return type-id='80f4b756'/>
+      </function-type>
+      <function-type size-in-bits='64' id='10e36dc5'>
+        <parameter type-id='d30bdc51'/>
+        <return type-id='47547dee'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cdf069c8'>
+        <parameter type-id='c161b868'/>
+        <return type-id='708ae4d0'/>
+      </function-type>
+      <function-type size-in-bits='64' id='277029da'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='c5a4eb7f'/>
+        <return type-id='27675065'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fbe9020d'>
+        <parameter type-id='21e53d44'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='27675065'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2bdce7cd'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='27675065'/>
+      </function-type>
+      <function-type size-in-bits='64' id='13edfabd'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='e9a4c848'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5a9e3f68'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='30677246'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9280516b'>
+        <parameter type-id='08c8d0fa'/>
+        <return type-id='7313b0ab'/>
+      </function-type>
+      <function-type size-in-bits='64' id='96bb51fa'>
+        <parameter type-id='42c8f564'/>
+        <return type-id='7e666abe'/>
+      </function-type>
+      <function-type size-in-bits='64' id='276427e1'>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9b8b35dc'>
+        <parameter type-id='792ca340'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8d077d91'>
+        <parameter type-id='f57039f0'/>
+        <parameter type-id='02f11ed4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0f1de308'>
+        <parameter type-id='f57039f0'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='157252dd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ffad938a'>
+        <parameter type-id='f57039f0'/>
+        <parameter type-id='c2c60445'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='01941a31'>
+        <parameter type-id='23e79551'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='05cd795f'>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='edcbd723'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e625eab0'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='edcbd723'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8b7bbbae'>
+        <parameter type-id='c14d5db2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b11be48c'>
+        <parameter type-id='c14d5db2'/>
+        <parameter type-id='b316d9a3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='75985c10'>
+        <parameter type-id='c14d5db2'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='43a0eb6c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f29c5fbb'>
+        <parameter type-id='a77efac3'/>
+        <parameter type-id='0e87f9be'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='935b1156'>
+        <parameter type-id='a77efac3'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3c5b888e'>
+        <parameter type-id='7171de96'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e613f28a'>
+        <parameter type-id='247dd85c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c0d42424'>
+        <parameter type-id='72bb8c36'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3e497762'>
+        <parameter type-id='72bb8c36'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4130d810'>
+        <parameter type-id='f0f856cb'/>
+        <parameter type-id='c161b868'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d093a820'>
+        <parameter type-id='dfeb7f6c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1af55526'>
+        <parameter type-id='dfeb7f6c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='38c67a4b'>
+        <parameter type-id='dfeb7f6c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b739ffde'>
+        <parameter type-id='dfeb7f6c'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eb0f802b'>
+        <parameter type-id='27675065'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='904e13de'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fb8e936d'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='ab7bbd67'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dfe7e6ee'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ea863425'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='087d687b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c3384bd1'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='70084cf7'>
+        <parameter type-id='b80a6036'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d87d8242'>
+        <parameter type-id='e9a4c848'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='37d25cd5'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f57039f0'/>
+        <parameter type-id='e84b031a'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cd1955fc'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f57039f0'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='9f93c9da'/>
+        <parameter type-id='63e171df'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da73ead4'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f57039f0'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='19ebf718'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='b80a6036'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='56cb7858'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='0343ce83'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cdead692'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='c0e2acc9'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c1f57de8'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='bd54fe1a'/>
+        <parameter type-id='ccbe540b'/>
+        <parameter type-id='63e171df'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d9f53f44'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='02f11ed4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1b99a1f1'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='bc5666d5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e0d0028a'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6bd699b2'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b0623418'>
+        <parameter type-id='0343ce83'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d67e1739'>
+        <parameter type-id='0343ce83'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='e84b031a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cb6487f8'>
+        <parameter type-id='5760dcb0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cd313b90'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='09c8759c'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a04cd5a9'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7e8ddfae'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='2594b00f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f2fea3d5'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='453343e6'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='2594b00f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f3601a85'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='2594b00f'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='270f5881'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='2594b00f'/>
+        <parameter type-id='8504f260'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='79d185ec'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='890caaa5'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b073751e'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cfe842dd'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a92634ba'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='c858233f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bdd382a3'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='2871909b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='27e3f547'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='0892f7dc'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c3b65e91'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='4151733d'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b36b391c'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='c2c60445'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9b634486'>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3e7a7dc5'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a71373a3'>
+        <parameter type-id='150efd3f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e1ee975e'>
+        <parameter type-id='150efd3f'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='2594b00f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8e42c936'>
+        <parameter type-id='150efd3f'/>
+        <parameter type-id='150efd3f'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8bcde2dc'>
+        <parameter type-id='8212a608'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='054882f1'>
+        <parameter type-id='8212a608'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8cb692f'>
+        <parameter type-id='204a4632'/>
+        <parameter type-id='098bcd1a'/>
+        <parameter type-id='108c9fc0'/>
+        <parameter type-id='204a4632'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='92cdf314'>
+        <parameter type-id='80f25feb'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='93be8120'>
+        <parameter type-id='89b70200'/>
+        <parameter type-id='d30bdc51'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6ee62c60'>
+        <parameter type-id='89b70200'/>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='d9d65b21'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e32cf39f'>
+        <parameter type-id='2730d015'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='869f5d80'>
+        <parameter type-id='02f11ed4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dc2316e7'>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='31e7d828'>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a804e84c'>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='c2c60445'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cea824ff'>
+        <parameter type-id='15d29710'/>
+        <parameter type-id='e15f3242'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b16db39f'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='27675065'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='774cf1e5'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='150efd3f'/>
+        <parameter type-id='e18defdb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c655c7b7'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='e18defdb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cf9ec29d'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cca56d7c'>
+        <parameter type-id='32efad44'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='270dc7da'>
+        <parameter type-id='32efad44'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0467beaf'>
+        <parameter type-id='32efad44'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='36a439e9'>
+        <parameter type-id='32efad44'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c012d70e'>
+        <parameter type-id='32efad44'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d10f08e3'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='67f526b5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='031a4ff0'>
+        <parameter type-id='c249b570'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c604b3e2'>
+        <parameter type-id='42c8f564'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3b1012d7'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f21665b'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e85fe596'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='a77efac3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b992836c'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='66b0cee4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e6f3a13f'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='cc8d835a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cda9f6b0'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='cc8d835a'/>
+        <parameter type-id='39341f7e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='26f907b0'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0e61b6d4'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='6dcf57f3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eeeb3192'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='72028e1c'/>
+        <parameter type-id='39341f7e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='56a7b834'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c95d9034'>
+        <parameter type-id='11e11a61'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='5c39fc92'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='262a563e'>
+        <parameter type-id='2ae08426'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3b03705e'>
+        <parameter type-id='2ae08426'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0cf2912e'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='69bf7bee'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9386c3d1'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b68c3fba'>
+        <parameter type-id='07af3c3c'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7f8cc66d'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='cb1156c4'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e17bc528'>
+        <parameter type-id='2ae08426'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='02f11ed4'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2802dd0'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='2871909b'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e29df76e'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='0892f7dc'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1c0d3c63'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f0acc909'/>
+        <return type-id='8f254b08'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1a4194ca'>
+        <parameter type-id='8212a608'/>
+        <parameter type-id='f0acc909'/>
+        <return type-id='8f254b08'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3273164b'>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='77784eb9'>
+        <parameter type-id='0343ce83'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f037e1bb'>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='9c5c646e'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5e80f131'>
+        <parameter type-id='15d29710'/>
+        <parameter type-id='e15f3242'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bc5c36f0'>
+        <parameter type-id='bc5666d5'/>
+        <return type-id='bc5666d5'/>
+      </function-type>
+      <function-type size-in-bits='64' id='68d3e576'>
+        <return type-id='fbc017ef'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ff95f77c'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='69bf7bee'/>
+      </function-type>
+      <function-type size-in-bits='64' id='56731789'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='69bf7bee'/>
+      </function-type>
+      <function-type size-in-bits='64' id='51edb62f'>
+        <parameter type-id='f57039f0'/>
+        <parameter type-id='a42536cd'/>
+        <return type-id='a42536cd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ebaa0f87'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='100ce309'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0caa7082'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e7e14410'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='c0e2acc9'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e9855576'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='b53e8dbb'/>
+        <parameter type-id='15d29710'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ebe8eb0e'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b53e8dbb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='309ed22f'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='beb5fff3'>
+        <parameter type-id='8212a608'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='69bf7bee'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='357e5279'>
+        <parameter type-id='80f25feb'/>
+        <parameter type-id='4fa10f9e'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d5b6f34c'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='0b001c1f'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='be97e3d8'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='0b001c1f'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='18188cce'>
+        <parameter type-id='063da268'/>
+        <parameter type-id='47ed147a'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78199102'>
+        <parameter type-id='063da268'/>
+        <parameter type-id='47ed147a'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8c180526'>
+        <parameter type-id='15d29710'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='b53e8dbb'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d802bf72'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='69bf7bee'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fec629e3'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='69bf7bee'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5ea5a07d'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='0b001c1f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='2594b00f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='449f791f'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='c0e2acc9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='2594b00f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ecbaa04a'>
+        <parameter type-id='d02f4143'/>
+        <return type-id='e9265215'/>
+      </function-type>
+      <function-type size-in-bits='64' id='af6e35e9'>
+        <parameter type-id='d02f4143'/>
+        <parameter type-id='5555b4b4'/>
+        <return type-id='e9265215'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cdd79d4e'>
+        <parameter type-id='67f526b5'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3642b004'>
+        <parameter type-id='67f526b5'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0fae1622'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8f9ed095'>
+        <parameter type-id='4be14597'/>
+        <parameter type-id='cb1156c4'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08616ba1'>
+        <parameter type-id='2ae08426'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a38d6c05'>
+        <parameter type-id='bcfe6314'/>
+        <return type-id='549da824'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ee076206'>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34135eb2'>
+        <parameter type-id='69c138b1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='97db9237'>
+        <parameter type-id='a77efac3'/>
+        <parameter type-id='bcfe6314'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='58d69ec2'>
+        <parameter type-id='67f526b5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dcb10fbf'>
+        <parameter type-id='af5eeab9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cc2d5b01'>
+        <parameter type-id='708ae4d0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ae96173'>
+        <parameter type-id='72bb8c36'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='420b230d'>
+        <parameter type-id='dfeb7f6c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='54d829fa'>
+        <parameter type-id='dfeb7f6c'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='bbaf3419'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d843c93e'>
+        <parameter type-id='27675065'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='37f6d957'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='7e666abe'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a9732c0b'>
+        <parameter type-id='b1a5e68a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cbbffc65'>
+        <parameter type-id='e9a4c848'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a9cc575c'>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1c254730'>
+        <parameter type-id='0343ce83'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08bcc9e6'>
+        <parameter type-id='0343ce83'/>
+        <parameter type-id='0343ce83'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2ca9725a'>
+        <parameter type-id='0343ce83'/>
+        <parameter type-id='63e171df'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6c0e4a93'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ebcc73dc'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f712e2b7'>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c96d591d'>
+        <parameter type-id='8212a608'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d647b094'>
+        <parameter type-id='80f25feb'/>
+        <parameter type-id='bd54fe1a'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='10587c0a'>
+        <parameter type-id='d30bdc51'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='257e5168'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='2168a3eb'/>
+        <parameter type-id='acd96ee1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5985c13a'>
+        <parameter type-id='2730d015'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7a42d02f'>
+        <parameter type-id='2730d015'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e9ef9215'>
+        <parameter type-id='02f11ed4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='74e7a035'>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='d8e6b335'/>
+        <parameter type-id='d8e6b335'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0cf765ad'>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='96650caf'>
+        <parameter type-id='60219102'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c611b7c0'>
+        <parameter type-id='15d29710'/>
+        <parameter type-id='e15f3242'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='26d45b0c'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='67f526b5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d6e6975e'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='127ce78a'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1646f19a'>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='18fcefa9'>
+        <parameter type-id='42c8f564'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8029c9e0'>
+        <parameter type-id='9248e67f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='70a927ce'>
+        <parameter type-id='bc5666d5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cdd056d2'>
+        <parameter type-id='9c313c2d'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e74bcc7b'>
+        <parameter type-id='2ae08426'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1650bf24'>
+        <parameter type-id='d02f4143'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c5c76c9c'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4827f223'>
+        <parameter type-id='83c1bde6'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='afb1917e'>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e0c79ce2'>
+        <parameter type-id='d30bdc51'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='943685e6'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='749378a8'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c0e5af96'>
+        <parameter type-id='f772df6d'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='256' id='5d4602e8'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <typedef-decl name='__kernel_fsid_t' type-id='b55219f8' filepath='include/uapi/asm-generic/posix_types.h' line='81' column='1' id='ac895711'/>
+      <typedef-decl name='poll_queue_proc' type-id='4aecccbd' filepath='include/linux/poll.h' line='37' column='1' id='650104ba'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='ac895711' visibility='default' filepath='include/uapi/asm-generic/posix_types.h' line='79' column='1' id='b55219f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='e4266c7e' visibility='default' filepath='include/uapi/asm-generic/posix_types.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='c5392ac1' size-in-bits='64' id='4aecccbd'/>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='64' id='e4266c7e'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kernel/armv8_deprecated.c' language='LANG_C89'>
+      <function-decl name='on_each_cpu' mangled-name='on_each_cpu' filepath='include/linux/smp.h' line='38' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='on_each_cpu'>
+        <parameter type-id='b7f9d8e6'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kernel/cacheinfo.c' language='LANG_C89'>
+      <function-decl name='cache_line_size' mangled-name='cache_line_size' filepath='arch/arm64/kernel/cacheinfo.c' line='20' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cache_line_size'>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='smp_call_function_single' mangled-name='smp_call_function_single' filepath='include/linux/smp.h' line='32' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='smp_call_function_single'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b7f9d8e6'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kernel/cpufeature.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='237c0d27' size-in-bits='7936' id='6288ed8b'>
+        <subrange length='62' type-id='7ff19f0f' id='f519cbfd'/>
+      </array-type-def>
+      <class-decl name='static_key_false' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/jump_label.h' line='350' column='1' id='237c0d27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='00205383' visibility='default' filepath='include/linux/jump_label.h' line='351' column='1'/>
+        </data-member>
+      </class-decl>
+      <var-decl name='cpu_hwcap_keys' type-id='6288ed8b' mangled-name='cpu_hwcap_keys' visibility='default' filepath='arch/arm64/kernel/cpufeature.c' line='82' column='1' elf-symbol-id='cpu_hwcap_keys'/>
+      <var-decl name='arm64_const_caps_ready' type-id='237c0d27' mangled-name='arm64_const_caps_ready' visibility='default' filepath='arch/arm64/kernel/cpufeature.c' line='2083' column='1' elf-symbol-id='arm64_const_caps_ready'/>
+      <var-decl name='cpu_hwcaps' type-id='f066dd3c' mangled-name='cpu_hwcaps' visibility='default' filepath='arch/arm64/kernel/cpufeature.c' line='41' column='1' elf-symbol-id='cpu_hwcaps'/>
+      <function-decl name='bsearch' mangled-name='bsearch' filepath='include/linux/bsearch.h' line='7' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bsearch'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='585e1de9'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='cpus_read_lock' mangled-name='cpus_read_lock' filepath='include/linux/cpu.h' line='113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpus_read_lock'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpus_read_unlock' mangled-name='cpus_read_unlock' filepath='include/linux/cpu.h' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpus_read_unlock'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='96ee24a5' size-in-bits='64' id='585e1de9'/>
+      <function-type size-in-bits='64' id='96ee24a5'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kernel/cpuinfo.c' language='LANG_C89'>
+      <function-decl name='kobject_init' mangled-name='kobject_init' filepath='include/linux/kobject.h' line='100' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_init'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='c48b394e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kobject_add' mangled-name='kobject_add' filepath='include/linux/kobject.h' line='102' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_add'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kobject_del' mangled-name='kobject_del' filepath='include/linux/kobject.h' line='109' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_del'>
+        <parameter type-id='d30bdc51'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kernel/debug-monitors.c' language='LANG_C89'>
+      <pointer-type-def type-id='c894953d' size-in-bits='64' id='d8e6b336'/>
+      <function-decl name='debugfs_create_bool' mangled-name='debugfs_create_bool' filepath='include/linux/debugfs.h' line='123' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_bool'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='d8e6b336'/>
+        <return type-id='27675065'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kernel/fpsimd.c' language='LANG_C89'>
+      <pointer-type-def type-id='dbd58f6e' size-in-bits='64' id='02162584'/>
+      <var-decl name='fpsimd_context_busy' type-id='b50a4934' mangled-name='fpsimd_context_busy' visibility='default' filepath='arch/arm64/kernel/fpsimd.c' line='149' column='1' elf-symbol-id='fpsimd_context_busy'/>
+      <function-decl name='atomic_notifier_chain_register' mangled-name='atomic_notifier_chain_register' filepath='include/linux/notifier.h' line='144' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_notifier_chain_register'>
+        <parameter type-id='02162584'/>
+        <parameter type-id='d504f73d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <class-decl name='atomic_notifier_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='60' column='1' id='dbd58f6e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/notifier.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='d504f73d' visibility='default' filepath='include/linux/notifier.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kernel/insn.c' language='LANG_C89'>
+      <function-decl name='vmalloc_to_page' mangled-name='vmalloc_to_page' filepath='include/linux/mm.h' line='715' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vmalloc_to_page'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='02f11ed4'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kernel/io.c' language='LANG_C89'>
+      <qualified-type-def type-id='b0b3cbf9' const='yes' id='484cd8ba'/>
+      <pointer-type-def type-id='484cd8ba' size-in-bits='64' id='60f8eab0'/>
+      <function-decl name='__memcpy_fromio' mangled-name='__memcpy_fromio' filepath='arch/arm64/kernel/io.c' line='15' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__memcpy_fromio'>
+        <parameter type-id='eaa32e2f' name='to' filepath='arch/arm64/kernel/io.c' line='15' column='1'/>
+        <parameter type-id='60f8eab0' name='from' filepath='arch/arm64/kernel/io.c' line='15' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='arch/arm64/kernel/io.c' line='15' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__memcpy_toio' mangled-name='__memcpy_toio' filepath='arch/arm64/kernel/io.c' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__memcpy_toio'>
+        <parameter type-id='fe09dd29' name='to' filepath='arch/arm64/kernel/io.c' line='43' column='1'/>
+        <parameter type-id='eaa32e2f' name='from' filepath='arch/arm64/kernel/io.c' line='43' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='arch/arm64/kernel/io.c' line='43' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__memset_io' mangled-name='__memset_io' filepath='arch/arm64/kernel/io.c' line='71' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__memset_io'>
+        <parameter type-id='fe09dd29' name='dst' filepath='arch/arm64/kernel/io.c' line='71' column='1'/>
+        <parameter type-id='95e97e5e' name='c' filepath='arch/arm64/kernel/io.c' line='71' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='arch/arm64/kernel/io.c' line='71' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <qualified-type-def type-id='48b5725f' volatile='yes' id='b0b3cbf9'/>
+      <pointer-type-def type-id='b0b3cbf9' size-in-bits='64' id='fe09dd29'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kernel/pci.c' language='LANG_C89'>
+      <function-decl name='pci_find_bus' mangled-name='pci_find_bus' filepath='include/linux/pci.h' line='1001' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_find_bus'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='d1feb554'/>
+      </function-decl>
+      <pointer-type-def type-id='7e8e008e' size-in-bits='64' id='d1feb554'/>
+      <class-decl name='pci_bus' size-in-bits='10432' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='577' column='1' id='7e8e008e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parent' type-id='d1feb554' visibility='default' filepath='include/linux/pci.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='devices' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='self' type-id='85196e3f' visibility='default' filepath='include/linux/pci.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='slots' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='resource' type-id='774e8b2d' visibility='default' filepath='include/linux/pci.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='resources' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='busn_res' type-id='5218160d' visibility='default' filepath='include/linux/pci.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='ops' type-id='2058826a' visibility='default' filepath='include/linux/pci.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='msi' type-id='b9526cc1' visibility='default' filepath='include/linux/pci.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='sysdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/pci.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='procdir' type-id='d077e928' visibility='default' filepath='include/linux/pci.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='number' type-id='002ac4a6' visibility='default' filepath='include/linux/pci.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2056'>
+          <var-decl name='primary' type-id='002ac4a6' visibility='default' filepath='include/linux/pci.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2064'>
+          <var-decl name='max_bus_speed' type-id='002ac4a6' visibility='default' filepath='include/linux/pci.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2072'>
+          <var-decl name='cur_bus_speed' type-id='002ac4a6' visibility='default' filepath='include/linux/pci.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='domain_nr' type-id='95e97e5e' visibility='default' filepath='include/linux/pci.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='name' type-id='36d7f119' visibility='default' filepath='include/linux/pci.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='bridge_ctl' type-id='8efea9e5' visibility='default' filepath='include/linux/pci.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2512'>
+          <var-decl name='bus_flags' type-id='757fc982' visibility='default' filepath='include/linux/pci.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='bridge' type-id='fa0b179b' visibility='default' filepath='include/linux/pci.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/pci.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='legacy_io' type-id='c0e2acc9' visibility='default' filepath='include/linux/pci.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='legacy_mem' type-id='c0e2acc9' visibility='default' filepath='include/linux/pci.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='is_added' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='615' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='1f8bced9' size-in-bits='64' id='b9526cc1'/>
+      <pointer-type-def type-id='5c93f9a7' size-in-bits='64' id='85196e3f'/>
+      <pointer-type-def type-id='fc2007cc' size-in-bits='64' id='2058826a'/>
+      <pointer-type-def type-id='fe4ffa7a' size-in-bits='64' id='d077e928'/>
+      <array-type-def dimensions='1' type-id='c9d64c0d' size-in-bits='256' id='774e8b2d'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <typedef-decl name='pci_bus_flags_t' type-id='8efea9e5' filepath='include/linux/pci.h' line='219' column='1' id='757fc982'/>
+      <class-decl name='msi_controller' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='215' column='1' id='1f8bced9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/linux/msi.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/msi.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/msi.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/msi.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='setup_irq' type-id='01170708' visibility='default' filepath='include/linux/msi.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='setup_irqs' type-id='3c23f0a7' visibility='default' filepath='include/linux/msi.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='teardown_irq' type-id='694b6f36' visibility='default' filepath='include/linux/msi.h' line='225' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_dev' size-in-bits='20096' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='292' column='1' id='5c93f9a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bus_list' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bus' type-id='d1feb554' visibility='default' filepath='include/linux/pci.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='subordinate' type-id='d1feb554' visibility='default' filepath='include/linux/pci.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sysdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/pci.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='procent' type-id='d077e928' visibility='default' filepath='include/linux/pci.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='slot' type-id='4f146b8a' visibility='default' filepath='include/linux/pci.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='devfn' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='vendor' type-id='8efea9e5' visibility='default' filepath='include/linux/pci.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='device' type-id='8efea9e5' visibility='default' filepath='include/linux/pci.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='subsystem_vendor' type-id='8efea9e5' visibility='default' filepath='include/linux/pci.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='subsystem_device' type-id='8efea9e5' visibility='default' filepath='include/linux/pci.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='class' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='revision' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='584'>
+          <var-decl name='hdr_type' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='592'>
+          <var-decl name='pcie_cap' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='600'>
+          <var-decl name='msi_cap' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='msix_cap' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='pcie_mpss' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='624'>
+          <var-decl name='rom_base_reg' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='632'>
+          <var-decl name='pin' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='pcie_flags_reg' type-id='1dc6a898' visibility='default' filepath='include/linux/pci.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dma_alias_mask' type-id='1d2c2b85' visibility='default' filepath='include/linux/pci.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='driver' type-id='85b59624' visibility='default' filepath='include/linux/pci.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dma_mask' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dma_parms' type-id='37251e77' visibility='default' filepath='include/linux/pci.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='current_state' type-id='49c32219' visibility='default' filepath='include/linux/pci.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='imm_ready' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1064'>
+          <var-decl name='pm_cap' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='pme_support' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='pme_poll' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='d1_support' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='d2_support' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='no_d1d2' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='no_d3cold' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='bridge_d3' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='d3cold_allowed' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='mmio_always_on' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='wakeup_prepared' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='runtime_d3cold' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='skip_bus_pm' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='ignore_hotplug' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='hotplug_user_indicators' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='clear_retrain_link' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='d3_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='d3cold_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='link_state' type-id='fe2d9f1d' visibility='default' filepath='include/linux/pci.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='ltr_path' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='eetlp_prefix_path' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='error_state' type-id='7d5a17ad' visibility='default' filepath='include/linux/pci.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/pci.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='cfg_size' type-id='95e97e5e' visibility='default' filepath='include/linux/pci.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8736'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='resource' type-id='221adaf7' visibility='default' filepath='include/linux/pci.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17216'>
+          <var-decl name='match_driver' type-id='b50a4934' visibility='default' filepath='include/linux/pci.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='transparent' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='io_window' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='pref_window' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='pref_64_window' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='multifunction' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='is_busmaster' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='no_msi' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='no_64bit_msi' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='block_cfg_access' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='broken_parity_status' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='irq_reroute_variant' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='msi_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='msix_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='ari_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='ats_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='pasid_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='pri_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='is_managed' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='needs_freset' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='state_saved' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='is_physfn' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='is_virtfn' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17216'>
+          <var-decl name='reset_fn' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='is_hotplug_bridge' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='shpc_managed' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='is_thunderbolt' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='untrusted' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='__aer_firmware_first_valid' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='__aer_firmware_first' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='broken_intx_masking' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='io_window_1k' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='irq_managed' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='non_compliant_bars' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='is_probed' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='link_active_reporting' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='no_vf_scan' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='no_command_memory' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17264'>
+          <var-decl name='dev_flags' type-id='0f4efb07' visibility='default' filepath='include/linux/pci.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17280'>
+          <var-decl name='enable_cnt' type-id='49178f86' visibility='default' filepath='include/linux/pci.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17312'>
+          <var-decl name='saved_config_space' type-id='02fdec64' visibility='default' filepath='include/linux/pci.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17856'>
+          <var-decl name='saved_cap_space' type-id='e151255a' visibility='default' filepath='include/linux/pci.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17920'>
+          <var-decl name='rom_attr' type-id='c0e2acc9' visibility='default' filepath='include/linux/pci.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17984'>
+          <var-decl name='rom_attr_enabled' type-id='95e97e5e' visibility='default' filepath='include/linux/pci.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18048'>
+          <var-decl name='res_attr' type-id='2cc49b73' visibility='default' filepath='include/linux/pci.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18752'>
+          <var-decl name='res_attr_wc' type-id='2cc49b73' visibility='default' filepath='include/linux/pci.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19456'>
+          <var-decl name='msi_irq_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/pci.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19520'>
+          <var-decl name='vpd' type-id='0b72939c' visibility='default' filepath='include/linux/pci.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19584'>
+          <var-decl name='rom' type-id='2522883d' visibility='default' filepath='include/linux/pci.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19648'>
+          <var-decl name='romlen' type-id='b59d7dce' visibility='default' filepath='include/linux/pci.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19712'>
+          <var-decl name='driver_override' type-id='26a90f95' visibility='default' filepath='include/linux/pci.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19776'>
+          <var-decl name='priv_flags' type-id='7359adad' visibility='default' filepath='include/linux/pci.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19904'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19968'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='477' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='708' column='1' id='fc2007cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='add_bus' type-id='4a1c3304' visibility='default' filepath='include/linux/pci.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='remove_bus' type-id='7df445b9' visibility='default' filepath='include/linux/pci.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_bus' type-id='d479d76a' visibility='default' filepath='include/linux/pci.h' line='711' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read' type-id='ffde3570' visibility='default' filepath='include/linux/pci.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write' type-id='934d23eb' visibility='default' filepath='include/linux/pci.h' line='713' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='proc_dir_entry' size-in-bits='1408' is-struct='yes' visibility='default' filepath='fs/proc/internal.h' line='30' column='1' id='fe4ffa7a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='in_use' type-id='49178f86' visibility='default' filepath='fs/proc/internal.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='fs/proc/internal.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pde_openers' type-id='72f469ec' visibility='default' filepath='fs/proc/internal.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pde_unload_lock' type-id='fb4018a0' visibility='default' filepath='fs/proc/internal.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pde_unload_completion' type-id='389faaf7' visibility='default' filepath='fs/proc/internal.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='proc_iops' type-id='de2c232c' visibility='default' filepath='fs/proc/internal.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='proc_fops' type-id='61758ee5' visibility='default' filepath='fs/proc/internal.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='proc_dops' type-id='1ee57353' visibility='default' filepath='fs/proc/internal.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='' type-id='1371a02f' visibility='default' filepath='fs/proc/internal.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='write' type-id='7c2b18ab' visibility='default' filepath='fs/proc/internal.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='fs/proc/internal.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='state_size' type-id='f0981eeb' visibility='default' filepath='fs/proc/internal.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='low_ino' type-id='f0981eeb' visibility='default' filepath='fs/proc/internal.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nlink' type-id='6fa67d85' visibility='default' filepath='fs/proc/internal.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='fs/proc/internal.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='gid' type-id='094d8048' visibility='default' filepath='fs/proc/internal.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='size' type-id='69bf7bee' visibility='default' filepath='fs/proc/internal.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='parent' type-id='d077e928' visibility='default' filepath='fs/proc/internal.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='subdir' type-id='dec44472' visibility='default' filepath='fs/proc/internal.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='subdir_node' type-id='2a8a6332' visibility='default' filepath='fs/proc/internal.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='fs/proc/internal.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='fs/proc/internal.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1360'>
+          <var-decl name='namelen' type-id='f9b06939' visibility='default' filepath='fs/proc/internal.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1368'>
+          <var-decl name='inline_name' type-id='e84913bd' visibility='default' filepath='fs/proc/internal.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='c0e2acc9' size-in-bits='704' id='2cc49b73'>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <pointer-type-def type-id='c03e8273' size-in-bits='64' id='3c23f0a7'/>
+      <pointer-type-def type-id='da757fbe' size-in-bits='64' id='01170708'/>
+      <pointer-type-def type-id='6334ba8a' size-in-bits='64' id='4a1c3304'/>
+      <pointer-type-def type-id='ba6c1a6f' size-in-bits='64' id='934d23eb'/>
+      <pointer-type-def type-id='89c3fb76' size-in-bits='64' id='ffde3570'/>
+      <pointer-type-def type-id='29476916' size-in-bits='64' id='2730d016'/>
+      <pointer-type-def type-id='314e713e' size-in-bits='64' id='85b59624'/>
+      <pointer-type-def type-id='cce0f0cc' size-in-bits='64' id='4f146b8a'/>
+      <pointer-type-def type-id='059a2256' size-in-bits='64' id='0b72939c'/>
+      <pointer-type-def type-id='2b7bb54d' size-in-bits='64' id='fe2d9f1d'/>
+      <array-type-def dimensions='1' type-id='5218160d' size-in-bits='8448' id='221adaf7'>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <typedef-decl name='nlink_t' type-id='19c2251e' filepath='include/linux/types.h' line='20' column='1' id='6fa67d85'/>
+      <typedef-decl name='pci_channel_state_t' type-id='f0981eeb' filepath='include/linux/pci.h' line='162' column='1' id='7d5a17ad'/>
+      <typedef-decl name='pci_dev_flags_t' type-id='8efea9e5' filepath='include/linux/pci.h' line='188' column='1' id='0f4efb07'/>
+      <typedef-decl name='pci_power_t' type-id='95e97e5e' filepath='include/linux/pci.h' line='137' column='1' id='49c32219'/>
+      <typedef-decl name='proc_write_t' type-id='f71f3e00' filepath='include/linux/proc_fs.h' line='17' column='1' id='7c2b18ab'/>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='512' id='02fdec64'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='fs/proc/internal.h' line='44' column='1' id='1371a02f'>
+        <data-member access='private'>
+          <var-decl name='seq_ops' type-id='943a1b48' visibility='default' filepath='fs/proc/internal.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='single_show' type-id='0131eb61' visibility='default' filepath='fs/proc/internal.h' line='46' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='deb48314' size-in-bits='64' id='694b6f36'/>
+      <pointer-type-def type-id='0181b08d' size-in-bits='64' id='7df445b9'/>
+      <pointer-type-def type-id='9f1d7608' size-in-bits='64' id='d479d76a'/>
+      <pointer-type-def type-id='56b34f46' size-in-bits='64' id='f71f3e00'/>
+      <class-decl name='module' is-struct='yes' visibility='default' is-declaration-only='yes' id='29476916'/>
+      <class-decl name='pci_driver' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='837' column='1' id='314e713e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pci.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id_table' type-id='92fc8aa5' visibility='default' filepath='include/linux/pci.h' line='840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='probe' type-id='6cc3a8b3' visibility='default' filepath='include/linux/pci.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='remove' type-id='01d543be' visibility='default' filepath='include/linux/pci.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='suspend' type-id='831f84c2' visibility='default' filepath='include/linux/pci.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='suspend_late' type-id='831f84c2' visibility='default' filepath='include/linux/pci.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='resume_early' type-id='40672f7b' visibility='default' filepath='include/linux/pci.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='resume' type-id='40672f7b' visibility='default' filepath='include/linux/pci.h' line='846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='shutdown' type-id='01d543be' visibility='default' filepath='include/linux/pci.h' line='847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sriov_configure' type-id='ab05e282' visibility='default' filepath='include/linux/pci.h' line='848' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='err_handler' type-id='2da88de7' visibility='default' filepath='include/linux/pci.h' line='849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/pci.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/pci.h' line='851' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='dynids' type-id='022719b7' visibility='default' filepath='include/linux/pci.h' line='852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='854' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='857' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_slot' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='63' column='1' id='cce0f0cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bus' type-id='d1feb554' visibility='default' filepath='include/linux/pci.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hotplug' type-id='b47b0d41' visibility='default' filepath='include/linux/pci.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='number' type-id='002ac4a6' visibility='default' filepath='include/linux/pci.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/pci.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_vpd' is-struct='yes' visibility='default' is-declaration-only='yes' id='059a2256'/>
+      <class-decl name='pcie_link_state' size-in-bits='1216' is-struct='yes' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='49' column='1' id='2b7bb54d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pdev' type-id='85196e3f' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='downstream' type-id='85196e3f' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='root' type-id='fe2d9f1d' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parent' type-id='fe2d9f1d' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sibling' type-id='72f469ec' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='aspm_support' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='aspm_enabled' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='aspm_capable' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='aspm_default' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='aspm_disable' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='clkpm_capable' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='clkpm_enabled' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='clkpm_default' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='clkpm_disable' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='latency_up' type-id='d0622163' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='latency_dw' type-id='d0622163' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='acceptable' type-id='fa0d0a7f' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='l1ss' type-id='a1d8a938' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='d0622163' size-in-bits='512' id='fa0d0a7f'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <pointer-type-def type-id='b947c5cd' size-in-bits='64' id='92fc8aa5'/>
+      <pointer-type-def type-id='b68346f7' size-in-bits='64' id='2da88de7'/>
+      <pointer-type-def type-id='2dfcfaf9' size-in-bits='64' id='b47b0d41'/>
+      <pointer-type-def type-id='b4db8337' size-in-bits='64' id='40672f7b'/>
+      <pointer-type-def type-id='1e828e67' size-in-bits='64' id='6cc3a8b3'/>
+      <pointer-type-def type-id='173cc5a0' size-in-bits='64' id='ab05e282'/>
+      <pointer-type-def type-id='dedd4d90' size-in-bits='64' id='831f84c2'/>
+      <class-decl name='aspm_latency' size-in-bits='64' is-struct='yes' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='44' column='1' id='d0622163'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='l0s' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='l1' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_dynids' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='736' column='1' id='022719b7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/pci.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='738' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='79' column='1' id='a1d8a938'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='up_cap_ptr' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dw_cap_ptr' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ctl1' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ctl2' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7d41fdf4' size-in-bits='64' id='01d543be'/>
+      <qualified-type-def type-id='6cb59de2' const='yes' id='b947c5cd'/>
+      <qualified-type-def type-id='709bf5ba' const='yes' id='b68346f7'/>
+      <class-decl name='hotplug_slot' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/pci_hotplug.h' line='56' column='1' id='2dfcfaf9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='94bc2d77' visibility='default' filepath='include/linux/pci_hotplug.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='slot_list' type-id='72f469ec' visibility='default' filepath='include/linux/pci_hotplug.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pci_slot' type-id='4f146b8a' visibility='default' filepath='include/linux/pci_hotplug.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/pci_hotplug.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mod_name' type-id='80f4b756' visibility='default' filepath='include/linux/pci_hotplug.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='61872327' size-in-bits='64' id='94bc2d77'/>
+      <class-decl name='pci_device_id' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='38' column='1' id='6cb59de2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vendor' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='device' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='subvendor' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='subdevice' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='class' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='class_mask' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_data' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_error_handlers' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='772' column='1' id='709bf5ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='error_detected' type-id='abc80f30' visibility='default' filepath='include/linux/pci.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mmio_enabled' type-id='80b73a7b' visibility='default' filepath='include/linux/pci.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='slot_reset' type-id='80b73a7b' visibility='default' filepath='include/linux/pci.h' line='781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reset_prepare' type-id='01d543be' visibility='default' filepath='include/linux/pci.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reset_done' type-id='01d543be' visibility='default' filepath='include/linux/pci.h' line='785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resume' type-id='01d543be' visibility='default' filepath='include/linux/pci.h' line='788' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='8d2c0dd2' const='yes' id='61872327'/>
+      <pointer-type-def type-id='b359f47f' size-in-bits='64' id='80b73a7b'/>
+      <pointer-type-def type-id='9325ec16' size-in-bits='64' id='abc80f30'/>
+      <class-decl name='hotplug_slot_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/pci_hotplug.h' line='38' column='1' id='8d2c0dd2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enable_slot' type-id='1617c63b' visibility='default' filepath='include/linux/pci_hotplug.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable_slot' type-id='1617c63b' visibility='default' filepath='include/linux/pci_hotplug.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_attention_status' type-id='4b81d8e7' visibility='default' filepath='include/linux/pci_hotplug.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hardware_test' type-id='b3f54aba' visibility='default' filepath='include/linux/pci_hotplug.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_power_status' type-id='db02d786' visibility='default' filepath='include/linux/pci_hotplug.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_attention_status' type-id='db02d786' visibility='default' filepath='include/linux/pci_hotplug.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_latch_status' type-id='db02d786' visibility='default' filepath='include/linux/pci_hotplug.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_adapter_status' type-id='db02d786' visibility='default' filepath='include/linux/pci_hotplug.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='reset_slot' type-id='3801bb42' visibility='default' filepath='include/linux/pci_hotplug.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d9435f47' size-in-bits='64' id='1617c63b'/>
+      <pointer-type-def type-id='b6b1bef0' size-in-bits='64' id='3801bb42'/>
+      <pointer-type-def type-id='9d9db488' size-in-bits='64' id='b3f54aba'/>
+      <pointer-type-def type-id='025c78c3' size-in-bits='64' id='4b81d8e7'/>
+      <pointer-type-def type-id='ad4c5814' size-in-bits='64' id='db02d786'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kernel/perf_event.c' language='LANG_C89'>
+      <function-decl name='clocks_calc_mult_shift' mangled-name='clocks_calc_mult_shift' filepath='include/linux/clocksource.h' line='206' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clocks_calc_mult_shift'>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kernel/process.c' language='LANG_C89'>
+      <var-decl name='__stack_chk_guard' type-id='7359adad' mangled-name='__stack_chk_guard' visibility='default' filepath='arch/arm64/kernel/process.c' line='60' column='1' elf-symbol-id='__stack_chk_guard'/>
+      <var-decl name='pm_power_off' type-id='953b12f8' mangled-name='pm_power_off' visibility='default' filepath='arch/arm64/kernel/process.c' line='67' column='1' elf-symbol-id='pm_power_off'/>
+      <function-decl name='atomic_notifier_call_chain' mangled-name='atomic_notifier_call_chain' filepath='include/linux/notifier.h' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_notifier_call_chain'>
+        <parameter type-id='02162584'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='get_random_u32' mangled-name='get_random_u32' filepath='include/linux/random.h' line='50' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_random_u32'>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kernel/ptrace.c' language='LANG_C89'>
+      <pointer-type-def type-id='e57536d9' size-in-bits='64' id='20862e61'/>
+      <function-decl name='perf_event_release_kernel' mangled-name='perf_event_release_kernel' filepath='include/linux/perf_event.h' line='921' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='perf_event_release_kernel'>
+        <parameter type-id='2bf16f5a'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='perf_event_create_kernel_counter' mangled-name='perf_event_create_kernel_counter' filepath='include/linux/perf_event.h' line='923' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='perf_event_create_kernel_counter'>
+        <parameter type-id='20862e61'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='a8564695'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='2bf16f5a'/>
+      </function-decl>
+      <pointer-type-def type-id='7263c472' size-in-bits='64' id='2bf16f5a'/>
+      <class-decl name='perf_event_attr' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='310' column='1' id='e57536d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='config' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='de6d2b01' visibility='default' filepath='include/uapi/linux/perf_event.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sample_type' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read_format' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='63'>
+          <var-decl name='disabled' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='62'>
+          <var-decl name='inherit' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='61'>
+          <var-decl name='pinned' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='60'>
+          <var-decl name='exclusive' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='59'>
+          <var-decl name='exclude_user' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='58'>
+          <var-decl name='exclude_kernel' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='57'>
+          <var-decl name='exclude_hv' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='exclude_idle' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='55'>
+          <var-decl name='mmap' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='54'>
+          <var-decl name='comm' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='53'>
+          <var-decl name='freq' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='52'>
+          <var-decl name='inherit_stat' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='51'>
+          <var-decl name='enable_on_exec' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='50'>
+          <var-decl name='task' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='49'>
+          <var-decl name='watermark' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='47'>
+          <var-decl name='precise_ip' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='46'>
+          <var-decl name='mmap_data' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='45'>
+          <var-decl name='sample_id_all' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44'>
+          <var-decl name='exclude_host' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43'>
+          <var-decl name='exclude_guest' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='42'>
+          <var-decl name='exclude_callchain_kernel' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41'>
+          <var-decl name='exclude_callchain_user' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='mmap2' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='39'>
+          <var-decl name='comm_exec' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38'>
+          <var-decl name='use_clockid' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='37'>
+          <var-decl name='context_switch' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36'>
+          <var-decl name='write_backward' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='35'>
+          <var-decl name='namespaces' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34'>
+          <var-decl name='ksymbol' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33'>
+          <var-decl name='bpf_event' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='aux_output' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='__reserved_1' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='' type-id='051df3c3' visibility='default' filepath='include/uapi/linux/perf_event.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='bp_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='' type-id='3089c176' visibility='default' filepath='include/uapi/linux/perf_event.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='' type-id='38c76117' visibility='default' filepath='include/uapi/linux/perf_event.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='branch_sample_type' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sample_regs_user' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sample_stack_user' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='clockid' type-id='3158a266' visibility='default' filepath='include/uapi/linux/perf_event.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='sample_regs_intr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='aux_watermark' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='sample_max_stack' type-id='d315442e' visibility='default' filepath='include/uapi/linux/perf_event.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='880'>
+          <var-decl name='__reserved_2' type-id='d315442e' visibility='default' filepath='include/uapi/linux/perf_event.h' line='427' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7a592779' size-in-bits='64' id='a8564695'/>
+      <class-decl name='perf_event' size-in-bits='7872' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='575' column='1' id='7263c472'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sibling_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='group_node' type-id='2a8a6332' visibility='default' filepath='include/linux/perf_event.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='group_index' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='migrate_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='hlist_entry' type-id='03a4a074' visibility='default' filepath='include/linux/perf_event.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='active_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='nr_siblings' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='event_caps' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='group_caps' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='group_leader' type-id='2bf16f5a' visibility='default' filepath='include/linux/perf_event.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='pmu' type-id='0906f5b9' visibility='default' filepath='include/linux/perf_event.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='pmu_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='state' type-id='31fdb95a' visibility='default' filepath='include/linux/perf_event.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='attach_state' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='count' type-id='7da7300e' visibility='default' filepath='include/linux/perf_event.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='child_count' type-id='28ee064c' visibility='default' filepath='include/linux/perf_event.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='total_time_enabled' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='total_time_running' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='tstamp' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='shadow_ctx_time' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='attr' type-id='e57536d9' visibility='default' filepath='include/linux/perf_event.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='header_size' type-id='1dc6a898' visibility='default' filepath='include/linux/perf_event.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2704'>
+          <var-decl name='id_header_size' type-id='1dc6a898' visibility='default' filepath='include/linux/perf_event.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='read_size' type-id='1dc6a898' visibility='default' filepath='include/linux/perf_event.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='hw' type-id='b594b0c9' visibility='default' filepath='include/linux/perf_event.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='ctx' type-id='b9419dc6' visibility='default' filepath='include/linux/perf_event.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='refcount' type-id='f22a8abb' visibility='default' filepath='include/linux/perf_event.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='child_total_time_enabled' type-id='28ee064c' visibility='default' filepath='include/linux/perf_event.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='child_total_time_running' type-id='28ee064c' visibility='default' filepath='include/linux/perf_event.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='child_mutex' type-id='925167dc' visibility='default' filepath='include/linux/perf_event.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='child_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='parent' type-id='2bf16f5a' visibility='default' filepath='include/linux/perf_event.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='oncpu' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5024'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='owner_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='owner' type-id='f23e2572' visibility='default' filepath='include/linux/perf_event.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='mmap_mutex' type-id='925167dc' visibility='default' filepath='include/linux/perf_event.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='mmap_count' type-id='49178f86' visibility='default' filepath='include/linux/perf_event.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='rb' type-id='8462bc54' visibility='default' filepath='include/linux/perf_event.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='rb_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='674' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='rcu_batches' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='rcu_pending' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='waitq' type-id='b5ab048f' visibility='default' filepath='include/linux/perf_event.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='fasync' type-id='5bb9c75d' visibility='default' filepath='include/linux/perf_event.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='pending_wakeup' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='pending_kill' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='pending_disable' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='pending' type-id='9281c70f' visibility='default' filepath='include/linux/perf_event.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='event_limit' type-id='49178f86' visibility='default' filepath='include/linux/perf_event.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='addr_filters' type-id='54885433' visibility='default' filepath='include/linux/perf_event.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='addr_filter_ranges' type-id='200ffa89' visibility='default' filepath='include/linux/perf_event.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='addr_filters_gen' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='aux_event' type-id='2bf16f5a' visibility='default' filepath='include/linux/perf_event.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='destroy' type-id='aed2baa8' visibility='default' filepath='include/linux/perf_event.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/perf_event.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='ns' type-id='b816e1d0' visibility='default' filepath='include/linux/perf_event.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='id' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='clock' type-id='0e70db3e' visibility='default' filepath='include/linux/perf_event.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='overflow_handler' type-id='20a2e4e6' visibility='default' filepath='include/linux/perf_event.h' line='706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='overflow_handler_context' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='orig_overflow_handler' type-id='20a2e4e6' visibility='default' filepath='include/linux/perf_event.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='prog' type-id='bdcee7ae' visibility='default' filepath='include/linux/perf_event.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='tp_event' type-id='23d6768d' visibility='default' filepath='include/linux/perf_event.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='filter' type-id='26461068' visibility='default' filepath='include/linux/perf_event.h' line='715' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='sb_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='728' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__21' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='380' column='1' id='051df3c3'>
+        <data-member access='private'>
+          <var-decl name='wakeup_events' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='wakeup_watermark' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='382' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__22' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='386' column='1' id='3089c176'>
+        <data-member access='private'>
+          <var-decl name='bp_addr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='kprobe_func' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='uprobe_path' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='config1' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='390' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__23' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='392' column='1' id='38c76117'>
+        <data-member access='private'>
+          <var-decl name='bp_len' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='kprobe_addr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='probe_offset' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='config2' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='396' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__20' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='327' column='1' id='de6d2b01'>
+        <data-member access='private'>
+          <var-decl name='sample_period' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sample_freq' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='329' column='1'/>
+        </data-member>
+      </union-decl>
+      <enum-decl name='perf_event_state' filepath='include/linux/perf_event.h' line='520' column='1' id='31fdb95a'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PERF_EVENT_STATE_DEAD' value='-4'/>
+        <enumerator name='PERF_EVENT_STATE_EXIT' value='-3'/>
+        <enumerator name='PERF_EVENT_STATE_ERROR' value='-2'/>
+        <enumerator name='PERF_EVENT_STATE_OFF' value='-1'/>
+        <enumerator name='PERF_EVENT_STATE_INACTIVE' value='0'/>
+        <enumerator name='PERF_EVENT_STATE_ACTIVE' value='1'/>
+      </enum-decl>
+      <pointer-type-def type-id='5ff1273a' size-in-bits='64' id='26461068'/>
+      <pointer-type-def type-id='3490ee41' size-in-bits='64' id='200ffa89'/>
+      <pointer-type-def type-id='9d67acd6' size-in-bits='64' id='b9419dc6'/>
+      <pointer-type-def type-id='e205b6f1' size-in-bits='64' id='0906f5b9'/>
+      <pointer-type-def type-id='6efee8be' size-in-bits='64' id='8462bc54'/>
+      <class-decl name='hw_perf_event' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='122' column='1' id='b594b0c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='47a85f98' visibility='default' filepath='include/linux/perf_event.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='target' type-id='f23e2572' visibility='default' filepath='include/linux/perf_event.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='addr_filters' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='addr_filters_gen' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='prev_count' type-id='7da7300e' visibility='default' filepath='include/linux/perf_event.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sample_period' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='last_period' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='period_left' type-id='7da7300e' visibility='default' filepath='include/linux/perf_event.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='interrupts_seq' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='interrupts' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='freq_time_stamp' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='freq_count_stamp' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='227' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_addr_filters_head' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='506' column='1' id='54885433'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/perf_event.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nr_file_filters' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='509' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='fd48a6e7' size-in-bits='64' id='23d6768d'/>
+      <typedef-decl name='local64_t' type-id='2b04c975' filepath='include/asm-generic/local64.h' line='26' column='1' id='7da7300e'/>
+      <typedef-decl name='perf_overflow_handler_t' type-id='a8564695' filepath='include/linux/perf_event.h' line='532' column='1' id='20a2e4e6'/>
+      <pointer-type-def type-id='8804cbe4' size-in-bits='64' id='0e70db3e'/>
+      <pointer-type-def type-id='a79c760e' size-in-bits='64' id='aed2baa8'/>
+      <class-decl name='event_filter' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='1369' column='1' id='5ff1273a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog' type-id='efd0fdec' visibility='default' filepath='kernel/trace/trace.h' line='1370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='filter_string' type-id='26a90f95' visibility='default' filepath='kernel/trace/trace.h' line='1371' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_addr_filter_range' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='512' column='1' id='3490ee41'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='514' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_event_context' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='743' column='1' id='9d67acd6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pmu' type-id='0906f5b9' visibility='default' filepath='include/linux/perf_event.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/perf_event.h' line='749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/perf_event.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='active_ctx_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pinned_groups' type-id='3643bc2a' visibility='default' filepath='include/linux/perf_event.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flexible_groups' type-id='3643bc2a' visibility='default' filepath='include/linux/perf_event.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pinned_active' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='flexible_active' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nr_events' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='nr_active' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='is_active' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='nr_stat' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='nr_freq' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='rotate_disable' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rotate_necessary' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='refcount' type-id='64615833' visibility='default' filepath='include/linux/perf_event.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/perf_event.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='time' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='timestamp' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='parent_ctx' type-id='b9419dc6' visibility='default' filepath='include/linux/perf_event.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='parent_gen' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='generation' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='pin_count' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='792' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='task_ctx_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/perf_event.h' line='797' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pmu' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='255' column='1' id='e205b6f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/linux/perf_event.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/perf_event.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='attr_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/perf_event.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='attr_update' type-id='c97de1ac' visibility='default' filepath='include/linux/perf_event.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/perf_event.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='capabilities' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pmu_disable_count' type-id='7292109c' visibility='default' filepath='include/linux/perf_event.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pmu_cpu_context' type-id='090503c3' visibility='default' filepath='include/linux/perf_event.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='exclusive_cnt' type-id='49178f86' visibility='default' filepath='include/linux/perf_event.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='task_ctx_nr' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='hrtimer_interval_ms' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='nr_addr_filters' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='pmu_enable' type-id='dae07608' visibility='default' filepath='include/linux/perf_event.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pmu_disable' type-id='dae07608' visibility='default' filepath='include/linux/perf_event.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='event_init' type-id='8d78edef' visibility='default' filepath='include/linux/perf_event.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='event_mapped' type-id='eddb9394' visibility='default' filepath='include/linux/perf_event.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='event_unmapped' type-id='eddb9394' visibility='default' filepath='include/linux/perf_event.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='add' type-id='afc38bc6' visibility='default' filepath='include/linux/perf_event.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='del' type-id='6c534e17' visibility='default' filepath='include/linux/perf_event.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='start' type-id='6c534e17' visibility='default' filepath='include/linux/perf_event.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='stop' type-id='6c534e17' visibility='default' filepath='include/linux/perf_event.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='read' type-id='aed2baa8' visibility='default' filepath='include/linux/perf_event.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='start_txn' type-id='f865774a' visibility='default' filepath='include/linux/perf_event.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='commit_txn' type-id='0cd76695' visibility='default' filepath='include/linux/perf_event.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='cancel_txn' type-id='dae07608' visibility='default' filepath='include/linux/perf_event.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='event_idx' type-id='8d78edef' visibility='default' filepath='include/linux/perf_event.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='sched_task' type-id='54df184d' visibility='default' filepath='include/linux/perf_event.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='task_ctx_size' type-id='b59d7dce' visibility='default' filepath='include/linux/perf_event.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='setup_aux' type-id='e91cc304' visibility='default' filepath='include/linux/perf_event.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='free_aux' type-id='b7f9d8e6' visibility='default' filepath='include/linux/perf_event.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='addr_filters_validate' type-id='6668d13a' visibility='default' filepath='include/linux/perf_event.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='addr_filters_sync' type-id='aed2baa8' visibility='default' filepath='include/linux/perf_event.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='aux_output_match' type-id='8d78edef' visibility='default' filepath='include/linux/perf_event.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='filter_match' type-id='8d78edef' visibility='default' filepath='include/linux/perf_event.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='check_period' type-id='36f91979' visibility='default' filepath='include/linux/perf_event.h' line='469' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ring_buffer' is-struct='yes' visibility='default' is-declaration-only='yes' id='6efee8be'/>
+      <class-decl name='trace_event_call' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='254' column='1' id='fd48a6e7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/trace_events.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='class' type-id='3570c570' visibility='default' filepath='include/linux/trace_events.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='7d3eb798' visibility='default' filepath='include/linux/trace_events.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='event' type-id='78b26ac9' visibility='default' filepath='include/linux/trace_events.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='print_fmt' type-id='26a90f95' visibility='default' filepath='include/linux/trace_events.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='filter' type-id='26461068' visibility='default' filepath='include/linux/trace_events.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mod' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='perf_refcount' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='perf_events' type-id='030d0b18' visibility='default' filepath='include/linux/trace_events.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='prog_array' type-id='380c7edc' visibility='default' filepath='include/linux/trace_events.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='perf_perm' type-id='7fa32aba' visibility='default' filepath='include/linux/trace_events.h' line='283' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__13' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='7da7300e' visibility='default' filepath='include/asm-generic/local64.h' line='24' column='1' id='2b04c975'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='a' type-id='dd91f264' visibility='default' filepath='include/asm-generic/local64.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__24' size-in-bits='768' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='124' column='1' id='47a85f98'>
+        <data-member access='private'>
+          <var-decl name='' type-id='e816fcaa' visibility='default' filepath='include/linux/perf_event.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='35e31cc2' visibility='default' filepath='include/linux/perf_event.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='17578164' visibility='default' filepath='include/linux/perf_event.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='f9c5ea3e' visibility='default' filepath='include/linux/perf_event.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='c0044425' visibility='default' filepath='include/linux/perf_event.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='7a56104f' visibility='default' filepath='include/linux/perf_event.h' line='160' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='ed4be5c0' size-in-bits='64' id='6668d13a'/>
+      <pointer-type-def type-id='9b94c22b' size-in-bits='64' id='8d78edef'/>
+      <pointer-type-def type-id='87732674' size-in-bits='64' id='afc38bc6'/>
+      <pointer-type-def type-id='6ad7a215' size-in-bits='64' id='36f91979'/>
+      <pointer-type-def type-id='6d544aa1' size-in-bits='64' id='0cd76695'/>
+      <pointer-type-def type-id='ca8c1528' size-in-bits='64' id='7fa32aba'/>
+      <pointer-type-def type-id='4448fdd3' size-in-bits='64' id='090503c3'/>
+      <pointer-type-def type-id='da952956' size-in-bits='64' id='efd0fdec'/>
+      <class-decl name='perf_event_groups' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='733' column='1' id='3643bc2a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tree' type-id='dec44472' visibility='default' filepath='include/linux/perf_event.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='index' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='735' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_event' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='124' column='1' id='78b26ac9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='03a4a074' visibility='default' filepath='include/linux/trace_events.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/trace_events.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='funcs' type-id='d6d37d27' visibility='default' filepath='include/linux/trace_events.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__18' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='150' column='1' id='c0044425'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='info' type-id='b61f34eb' visibility='default' filepath='include/linux/perf_event.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bp_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__15' size-in-bits='576' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='138' column='1' id='35e31cc2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hrtimer' type-id='b6993efc' visibility='default' filepath='include/linux/perf_event.h' line='139' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__16' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='141' column='1' id='17578164'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tp_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='143' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__14' size-in-bits='768' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='125' column='1' id='e816fcaa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='config' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last_tag' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='config_base' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='event_base' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='event_base_rdpmc' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='idx' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='last_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='extra_reg' type-id='a80839c0' visibility='default' filepath='include/linux/perf_event.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='branch_reg' type-id='a80839c0' visibility='default' filepath='include/linux/perf_event.h' line='136' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__17' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='145' column='1' id='f9c5ea3e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pwr_acc' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ptsc' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__19' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='160' column='1' id='7a56104f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iommu_bank' type-id='f9b06939' visibility='default' filepath='include/linux/perf_event.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='iommu_cntr' type-id='f9b06939' visibility='default' filepath='include/linux/perf_event.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='padding' type-id='1dc6a898' visibility='default' filepath='include/linux/perf_event.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='conf' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='conf1' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='165' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a2689372' size-in-bits='64' id='3570c570'/>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/trace_events.h' line='257' column='1' id='7d3eb798'>
+        <data-member access='private'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/trace_events.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tp' type-id='08e531de' visibility='default' filepath='include/linux/trace_events.h' line='260' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='078589a3' size-in-bits='64' id='6c534e17'/>
+      <pointer-type-def type-id='e589860a' size-in-bits='64' id='eddb9394'/>
+      <pointer-type-def type-id='d725da49' size-in-bits='64' id='54df184d'/>
+      <pointer-type-def type-id='2a275b06' size-in-bits='64' id='dae07608'/>
+      <pointer-type-def type-id='88d4f840' size-in-bits='64' id='f865774a'/>
+      <pointer-type-def type-id='f9617b12' size-in-bits='64' id='e91cc304'/>
+      <class-decl name='arch_hw_breakpoint' size-in-bits='192' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='21' column='1' id='b61f34eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='address' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='trigger' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ctrl' type-id='2633d065' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hw_perf_event_extra' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='112' column='1' id='a80839c0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='config' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='alloc' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idx' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='116' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_cpu_context' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='809' column='1' id='4448fdd3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctx' type-id='9d67acd6' visibility='default' filepath='include/linux/perf_event.h' line='810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='task_ctx' type-id='b9419dc6' visibility='default' filepath='include/linux/perf_event.h' line='811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='active_oncpu' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='exclusive' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='813' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='hrtimer_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/perf_event.h' line='815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='hrtimer' type-id='b6993efc' visibility='default' filepath='include/linux/perf_event.h' line='816' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='hrtimer_interval' type-id='fbc017ef' visibility='default' filepath='include/linux/perf_event.h' line='817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='hrtimer_active' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='818' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='sched_cb_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='825' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='sched_cb_usage' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='826' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='online' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='828' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='prog_entry' is-struct='yes' visibility='default' is-declaration-only='yes' id='da952956'/>
+      <class-decl name='trace_event_class' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='190' column='1' id='a2689372'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='system' type-id='80f4b756' visibility='default' filepath='include/linux/trace_events.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='probe' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='perf_probe' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reg' type-id='50ec573b' visibility='default' filepath='include/linux/trace_events.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='define_fields' type-id='9a5ed472' visibility='default' filepath='include/linux/trace_events.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_fields' type-id='17898fce' visibility='default' filepath='include/linux/trace_events.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fields' type-id='72f469ec' visibility='default' filepath='include/linux/trace_events.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='raw_init' type-id='9a5ed472' visibility='default' filepath='include/linux/trace_events.h' line='201' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='195ea87f' size-in-bits='64' id='d6d37d27'/>
+      <pointer-type-def type-id='abe3ca10' size-in-bits='64' id='9a5ed472'/>
+      <pointer-type-def type-id='287b404f' size-in-bits='64' id='50ec573b'/>
+      <pointer-type-def type-id='08694484' size-in-bits='64' id='17898fce'/>
+      <class-decl name='arch_hw_breakpoint_ctrl' size-in-bits='32' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='13' column='1' id='2633d065'>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='__reserved' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='len' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='type' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='privilege' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enabled' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_event_functions' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='117' column='1' id='195ea87f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='trace' type-id='8e7f627c' visibility='default' filepath='include/linux/trace_events.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='raw' type-id='8e7f627c' visibility='default' filepath='include/linux/trace_events.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hex' type-id='8e7f627c' visibility='default' filepath='include/linux/trace_events.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='binary' type-id='8e7f627c' visibility='default' filepath='include/linux/trace_events.h' line='121' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='trace_print_func' type-id='ff826f29' filepath='include/linux/trace_events.h' line='114' column='1' id='8e7f627c'/>
+      <pointer-type-def type-id='a43a9295' size-in-bits='64' id='ff826f29'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kernel/return_address.c' language='LANG_C89'>
+      <function-decl name='return_address' mangled-name='return_address' filepath='arch/arm64/kernel/return_address.c' line='35' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='return_address'>
+        <parameter type-id='f0981eeb' name='level' filepath='arch/arm64/kernel/return_address.c' line='35' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kernel/smp.c' language='LANG_C89'>
+      <var-decl name='cpu_number' type-id='95e97e5e' mangled-name='cpu_number' visibility='default' filepath='arch/arm64/kernel/smp.c' line='59' column='1' elf-symbol-id='cpu_number'/>
+      <function-decl name='of_n_addr_cells' mangled-name='of_n_addr_cells' filepath='include/linux/of.h' line='358' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_n_addr_cells'>
+        <parameter type-id='9a537bbe'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kernel/stacktrace.c' language='LANG_C89'>
+      <class-decl name='stack_trace' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/stacktrace.h' line='64' column='1' id='e7058f21'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_entries' type-id='f0981eeb' visibility='default' filepath='include/linux/stacktrace.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_entries' type-id='f0981eeb' visibility='default' filepath='include/linux/stacktrace.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entries' type-id='1d2c2b85' visibility='default' filepath='include/linux/stacktrace.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='skip' type-id='95e97e5e' visibility='default' filepath='include/linux/stacktrace.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e7058f21' size-in-bits='64' id='e5248359'/>
+      <function-decl name='save_stack_trace_tsk' mangled-name='save_stack_trace_tsk' filepath='arch/arm64/kernel/stacktrace.c' line='201' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='save_stack_trace_tsk'>
+        <parameter type-id='f23e2572' name='tsk' filepath='arch/arm64/kernel/stacktrace.c' line='201' column='1'/>
+        <parameter type-id='e5248359' name='trace' filepath='arch/arm64/kernel/stacktrace.c' line='201' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='save_stack_trace' mangled-name='save_stack_trace' filepath='arch/arm64/kernel/stacktrace.c' line='206' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='save_stack_trace'>
+        <parameter type-id='e5248359' name='trace' filepath='arch/arm64/kernel/stacktrace.c' line='206' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kernel/traps.c' language='LANG_C89'>
+      <function-decl name='tracing_off' mangled-name='tracing_off' filepath='include/linux/kernel.h' line='664' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tracing_off'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='do_exit' mangled-name='do_exit' filepath='include/linux/kernel.h' line='328' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='do_exit'>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='find_vma' mangled-name='find_vma' filepath='include/linux/mm.h' line='2553' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='find_vma'>
+        <parameter type-id='df4b7819'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='2ae08426'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kernel/vdso.c' language='LANG_C89'>
+      <function-decl name='get_zeroed_page' mangled-name='get_zeroed_page' filepath='include/linux/gfp.h' line='561' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_zeroed_page'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='get_unmapped_area' mangled-name='get_unmapped_area' filepath='include/linux/mm.h' line='2430' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_unmapped_area'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kvm/../../../virt/kvm/arm/arch_timer.c' language='LANG_C89'>
+      <function-decl name='hrtimer_forward' mangled-name='hrtimer_forward' filepath='include/linux/hrtimer.h' line='487' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hrtimer_forward'>
+        <parameter type-id='08c8d0fa'/>
+        <parameter type-id='1eb56b1e'/>
+        <parameter type-id='1eb56b1e'/>
+        <return type-id='3a47d82b'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kvm/../../../virt/kvm/arm/arm.c' language='LANG_C89'>
+      <function-decl name='atomic_notifier_chain_unregister' mangled-name='atomic_notifier_chain_unregister' filepath='include/linux/notifier.h' line='157' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_notifier_chain_unregister'>
+        <parameter type-id='02162584'/>
+        <parameter type-id='d504f73d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kvm/../../../virt/kvm/arm/mmu.c' language='LANG_C89'>
+      <function-decl name='alloc_pages_exact' mangled-name='alloc_pages_exact' filepath='include/linux/gfp.h' line='563' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_pages_exact'>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='free_pages_exact' mangled-name='free_pages_exact' filepath='include/linux/gfp.h' line='564' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_pages_exact'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kvm/../../../virt/kvm/arm/pmu.c' language='LANG_C89'>
+      <function-decl name='perf_event_read_value' mangled-name='perf_event_read_value' filepath='include/linux/perf_event.h' line='932' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='perf_event_read_value'>
+        <parameter type-id='2bf16f5a'/>
+        <parameter type-id='c0190993'/>
+        <parameter type-id='c0190993'/>
+        <return type-id='3a47d82b'/>
+      </function-decl>
+      <function-decl name='perf_event_disable' mangled-name='perf_event_disable' filepath='include/linux/perf_event.h' line='1360' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='perf_event_disable'>
+        <parameter type-id='2bf16f5a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='perf_event_enable' mangled-name='perf_event_enable' filepath='include/linux/perf_event.h' line='1359' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='perf_event_enable'>
+        <parameter type-id='2bf16f5a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='3a47d82b' size-in-bits='64' id='c0190993'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kvm/../../../virt/kvm/eventfd.c' language='LANG_C89'>
+      <function-decl name='synchronize_srcu' mangled-name='synchronize_srcu' filepath='include/linux/srcu.h' line='62' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='synchronize_srcu'>
+        <parameter type-id='f7d7131a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='flush_workqueue' mangled-name='flush_workqueue' filepath='include/linux/workqueue.h' line='460' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='flush_workqueue'>
+        <parameter type-id='242e3d19'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kvm/../../../virt/kvm/kvm_main.c' language='LANG_C89'>
+      <class-decl name='syscore_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/syscore_ops.h' line='13' column='1' id='654484ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/syscore_ops.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='suspend' type-id='1db260e5' visibility='default' filepath='include/linux/syscore_ops.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='resume' type-id='953b12f8' visibility='default' filepath='include/linux/syscore_ops.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='shutdown' type-id='953b12f8' visibility='default' filepath='include/linux/syscore_ops.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e6ea37b8' size-in-bits='64' id='8567d8b0'/>
+      <pointer-type-def type-id='60a1cbff' size-in-bits='64' id='a47ececb'/>
+      <pointer-type-def type-id='6cb6dd61' size-in-bits='64' id='498d7045'/>
+      <pointer-type-def type-id='00205383' size-in-bits='64' id='f8840c23'/>
+      <pointer-type-def type-id='654484ba' size-in-bits='64' id='cbd24a98'/>
+      <pointer-type-def type-id='2ae08426' size-in-bits='64' id='8b6fdee4'/>
+      <function-decl name='bpf_trace_run3' mangled-name='bpf_trace_run3' filepath='include/linux/trace_events.h' line='607' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run3'>
+        <parameter type-id='bdcee7ae'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='3a47d82b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run4' mangled-name='bpf_trace_run4' filepath='include/linux/trace_events.h' line='609' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run4'>
+        <parameter type-id='bdcee7ae'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='3a47d82b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='put_pid' mangled-name='put_pid' filepath='include/linux/pid.h' line='86' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='put_pid'>
+        <parameter type-id='b94e5398'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='debugfs_remove_recursive' mangled-name='debugfs_remove_recursive' filepath='include/linux/debugfs.h' line='86' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_remove_recursive'>
+        <parameter type-id='27675065'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cleanup_srcu_struct' mangled-name='cleanup_srcu_struct' filepath='include/linux/srcu.h' line='59' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cleanup_srcu_struct'>
+        <parameter type-id='f7d7131a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='static_key_slow_dec' mangled-name='static_key_slow_dec' filepath='include/linux/jump_label.h' line='223' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='static_key_slow_dec'>
+        <parameter type-id='f8840c23'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='get_user_pages' mangled-name='get_user_pages' filepath='include/linux/mm.h' line='1617' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_user_pages'>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='9f93c9da'/>
+        <parameter type-id='8b6fdee4'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='mark_page_accessed' mangled-name='mark_page_accessed' filepath='include/linux/swap.h' line='337' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mark_page_accessed'>
+        <parameter type-id='02f11ed4'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sigprocmask' mangled-name='sigprocmask' filepath='include/linux/signal.h' line='275' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sigprocmask'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='8567d8b0'/>
+        <parameter type-id='8567d8b0'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='get_pid_task' mangled-name='get_pid_task' filepath='include/linux/pid.h' line='88' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_pid_task'>
+        <parameter type-id='b94e5398'/>
+        <parameter type-id='ce78cf46'/>
+        <return type-id='f23e2572'/>
+      </function-decl>
+      <function-decl name='blocking_notifier_chain_register' mangled-name='blocking_notifier_chain_register' filepath='include/linux/notifier.h' line='146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blocking_notifier_chain_register'>
+        <parameter type-id='282b7312'/>
+        <parameter type-id='d504f73d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='register_syscore_ops' mangled-name='register_syscore_ops' filepath='include/linux/syscore_ops.h' line='20' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_syscore_ops'>
+        <parameter type-id='cbd24a98'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='debugfs_create_dir' mangled-name='debugfs_create_dir' filepath='include/linux/debugfs.h' line='75' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_dir'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='27675065'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='blocking_notifier_chain_unregister' mangled-name='blocking_notifier_chain_unregister' filepath='include/linux/notifier.h' line='159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blocking_notifier_chain_unregister'>
+        <parameter type-id='282b7312'/>
+        <parameter type-id='d504f73d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_syscore_ops' mangled-name='unregister_syscore_ops' filepath='include/linux/syscore_ops.h' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_syscore_ops'>
+        <parameter type-id='cbd24a98'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kthread_park' mangled-name='kthread_park' filepath='include/linux/kthread.h' line='65' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_park'>
+        <parameter type-id='f23e2572'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='set_user_nice' mangled-name='set_user_nice' filepath='include/linux/sched.h' line='1631' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_user_nice'>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kthread_parkme' mangled-name='kthread_parkme' filepath='include/linux/kthread.h' line='67' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_parkme'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='add_uevent_var' mangled-name='add_uevent_var' filepath='include/linux/kobject.h' line='262' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='add_uevent_var'>
+        <parameter type-id='d9d65b21'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='anon_inode_getfile' mangled-name='anon_inode_getfile' filepath='include/linux/anon_inodes.h' line='14' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='anon_inode_getfile'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='61758ee5'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='77e79a4b'/>
+      </function-decl>
+      <function-decl name='put_unused_fd' mangled-name='put_unused_fd' filepath='include/linux/file.h' line='87' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='put_unused_fd'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='static_key_slow_inc' mangled-name='static_key_slow_inc' filepath='include/linux/jump_label.h' line='222' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='static_key_slow_inc'>
+        <parameter type-id='f8840c23'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='simple_attr_open' mangled-name='simple_attr_open' filepath='include/linux/fs.h' line='3606' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_attr_open'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='498d7045'/>
+        <parameter type-id='a47ececb'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='anon_inode_getfd' mangled-name='anon_inode_getfd' filepath='include/linux/anon_inodes.h' line='17' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='anon_inode_getfd'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='61758ee5'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='60a1cbff'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='3a47d82b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6cb6dd61'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='c0190993'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/kvm/handle_exit.c' language='LANG_C89'>
+      <function-decl name='trace_print_array_seq' mangled-name='trace_print_array_seq' filepath='include/linux/trace_events.h' line='44' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_print_array_seq'>
+        <parameter type-id='fc932690'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <pointer-type-def type-id='c5078f42' size-in-bits='64' id='fc932690'/>
+      <class-decl name='trace_seq' size-in-bits='33088' is-struct='yes' visibility='default' filepath='include/linux/trace_seq.h' line='14' column='1' id='c5078f42'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buffer' type-id='d16c6df4' visibility='default' filepath='include/linux/trace_seq.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32768'>
+          <var-decl name='seq' type-id='857188d6' visibility='default' filepath='include/linux/trace_seq.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33024'>
+          <var-decl name='full' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_seq.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='seq_buf' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/seq_buf.h' line='19' column='1' id='857188d6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buffer' type-id='26a90f95' visibility='default' filepath='include/linux/seq_buf.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/seq_buf.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='b59d7dce' visibility='default' filepath='include/linux/seq_buf.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='readpos' type-id='69bf7bee' visibility='default' filepath='include/linux/seq_buf.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/lib/delay.c' language='LANG_C89'>
+      <function-decl name='__const_udelay' mangled-name='__const_udelay' filepath='arch/arm64/lib/delay.c' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__const_udelay'>
+        <parameter type-id='7359adad' name='xloops' filepath='arch/arm64/lib/delay.c' line='43' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__udelay' mangled-name='__udelay' filepath='arch/arm64/lib/delay.c' line='49' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__udelay'>
+        <parameter type-id='7359adad' name='usecs' filepath='arch/arm64/lib/delay.c' line='49' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__ndelay' mangled-name='__ndelay' filepath='arch/arm64/lib/delay.c' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ndelay'>
+        <parameter type-id='7359adad' name='nsecs' filepath='arch/arm64/lib/delay.c' line='55' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/mm/copypage.c' language='LANG_C89'>
+      <function-decl name='copy_page' filepath='arch/arm64/include/asm/page.h' line='21' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='clear_page' filepath='arch/arm64/include/asm/page.h' line='22' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/mm/dma-mapping.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='448' id='a038344f'>
+        <subrange length='56' type-id='7ff19f0f' id='f8137894'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='32' id='587936a0'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <class-decl name='iommu_ops' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='250' column='1' id='8b7a2cd2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capable' type-id='fd03a8f4' visibility='default' filepath='include/linux/iommu.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='domain_alloc' type-id='2908e93a' visibility='default' filepath='include/linux/iommu.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='domain_free' type-id='36caa4da' visibility='default' filepath='include/linux/iommu.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='attach_dev' type-id='21e9ca19' visibility='default' filepath='include/linux/iommu.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='detach_dev' type-id='32baba38' visibility='default' filepath='include/linux/iommu.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='map' type-id='2371b41a' visibility='default' filepath='include/linux/iommu.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='unmap' type-id='d1a6d6c2' visibility='default' filepath='include/linux/iommu.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flush_iotlb_all' type-id='36caa4da' visibility='default' filepath='include/linux/iommu.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='iotlb_sync_map' type-id='36caa4da' visibility='default' filepath='include/linux/iommu.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='iotlb_sync' type-id='a6bf568c' visibility='default' filepath='include/linux/iommu.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='iova_to_phys' type-id='c4904652' visibility='default' filepath='include/linux/iommu.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='add_device' type-id='613d39f5' visibility='default' filepath='include/linux/iommu.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='remove_device' type-id='dd787f72' visibility='default' filepath='include/linux/iommu.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='device_group' type-id='5448fdd7' visibility='default' filepath='include/linux/iommu.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='domain_get_attr' type-id='fe396a7b' visibility='default' filepath='include/linux/iommu.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='domain_set_attr' type-id='fe396a7b' visibility='default' filepath='include/linux/iommu.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_resv_regions' type-id='83d96d05' visibility='default' filepath='include/linux/iommu.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='put_resv_regions' type-id='83d96d05' visibility='default' filepath='include/linux/iommu.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='apply_resv_region' type-id='b20722ab' visibility='default' filepath='include/linux/iommu.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='domain_window_enable' type-id='7f31e8fb' visibility='default' filepath='include/linux/iommu.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='domain_window_disable' type-id='d3b2d361' visibility='default' filepath='include/linux/iommu.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='of_xlate' type-id='7fc43753' visibility='default' filepath='include/linux/iommu.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='is_attach_deferred' type-id='6ee36fa3' visibility='default' filepath='include/linux/iommu.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='dev_has_feat' type-id='6981b6e9' visibility='default' filepath='include/linux/iommu.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='dev_feat_enabled' type-id='6981b6e9' visibility='default' filepath='include/linux/iommu.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='dev_enable_feat' type-id='5a1281ab' visibility='default' filepath='include/linux/iommu.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dev_disable_feat' type-id='5a1281ab' visibility='default' filepath='include/linux/iommu.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='aux_attach_dev' type-id='21e9ca19' visibility='default' filepath='include/linux/iommu.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='aux_detach_dev' type-id='32baba38' visibility='default' filepath='include/linux/iommu.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='aux_get_pasid' type-id='21e9ca19' visibility='default' filepath='include/linux/iommu.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='sva_bind' type-id='925b860a' visibility='default' filepath='include/linux/iommu.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sva_unbind' type-id='4fb74714' visibility='default' filepath='include/linux/iommu.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sva_get_pasid' type-id='4ded61d5' visibility='default' filepath='include/linux/iommu.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='page_response' type-id='1ff48951' visibility='default' filepath='include/linux/iommu.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='pgsize_bitmap' type-id='7359adad' visibility='default' filepath='include/linux/iommu.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/linux/iommu.h' line='312' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iommu_cap' filepath='include/linux/iommu.h' line='99' column='1' id='031224de'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IOMMU_CAP_CACHE_COHERENCY' value='0'/>
+        <enumerator name='IOMMU_CAP_INTR_REMAP' value='1'/>
+        <enumerator name='IOMMU_CAP_NOEXEC' value='2'/>
+      </enum-decl>
+      <class-decl name='iommu_domain' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='89' column='1' id='80ef8feb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/linux/iommu.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='f1ac64d1' visibility='default' filepath='include/linux/iommu.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pgsize_bitmap' type-id='7359adad' visibility='default' filepath='include/linux/iommu.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='handler' type-id='a01c3626' visibility='default' filepath='include/linux/iommu.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='handler_token' type-id='eaa32e2f' visibility='default' filepath='include/linux/iommu.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='geometry' type-id='1f78af0c' visibility='default' filepath='include/linux/iommu.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='iova_cookie' type-id='eaa32e2f' visibility='default' filepath='include/linux/iommu.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='iommu_fault_handler_t' type-id='8e0d1900' filepath='include/linux/iommu.h' line='53' column='1' id='a01c3626'/>
+      <class-decl name='iommu_domain_geometry' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='59' column='1' id='1f78af0c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='aperture_start' type-id='cf29c9b3' visibility='default' filepath='include/linux/iommu.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='aperture_end' type-id='cf29c9b3' visibility='default' filepath='include/linux/iommu.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='force_aperture' type-id='b50a4934' visibility='default' filepath='include/linux/iommu.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_iotlb_gather' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='205' column='1' id='34fc4897'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='7359adad' visibility='default' filepath='include/linux/iommu.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='end' type-id='7359adad' visibility='default' filepath='include/linux/iommu.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pgsize' type-id='b59d7dce' visibility='default' filepath='include/linux/iommu.h' line='208' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iommu_attr' filepath='include/linux/iommu.h' line='119' column='1' id='e176cc45'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DOMAIN_ATTR_GEOMETRY' value='0'/>
+        <enumerator name='DOMAIN_ATTR_PAGING' value='1'/>
+        <enumerator name='DOMAIN_ATTR_WINDOWS' value='2'/>
+        <enumerator name='DOMAIN_ATTR_FSL_PAMU_STASH' value='3'/>
+        <enumerator name='DOMAIN_ATTR_FSL_PAMU_ENABLE' value='4'/>
+        <enumerator name='DOMAIN_ATTR_FSL_PAMUV1' value='5'/>
+        <enumerator name='DOMAIN_ATTR_NESTING' value='6'/>
+        <enumerator name='DOMAIN_ATTR_DMA_USE_FLUSH_QUEUE' value='7'/>
+        <enumerator name='DOMAIN_ATTR_MAX' value='8'/>
+      </enum-decl>
+      <class-decl name='iommu_resv_region' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='157' column='1' id='91088608'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/iommu.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='start' type-id='2522883d' visibility='default' filepath='include/linux/iommu.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='length' type-id='b59d7dce' visibility='default' filepath='include/linux/iommu.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='prot' type-id='95e97e5e' visibility='default' filepath='include/linux/iommu.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='type' type-id='256c2037' visibility='default' filepath='include/linux/iommu.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iommu_resv_type' filepath='include/linux/iommu.h' line='132' column='1' id='256c2037'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IOMMU_RESV_DIRECT' value='0'/>
+        <enumerator name='IOMMU_RESV_DIRECT_RELAXABLE' value='1'/>
+        <enumerator name='IOMMU_RESV_RESERVED' value='2'/>
+        <enumerator name='IOMMU_RESV_MSI' value='3'/>
+        <enumerator name='IOMMU_RESV_SW_MSI' value='4'/>
+      </enum-decl>
+      <enum-decl name='iommu_dev_features' filepath='include/linux/iommu.h' line='166' column='1' id='29d28711'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IOMMU_DEV_FEAT_AUX' value='0'/>
+        <enumerator name='IOMMU_DEV_FEAT_SVA' value='1'/>
+      </enum-decl>
+      <class-decl name='iommu_sva' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='583' column='1' id='c0e44fcd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/iommu.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='cdcad9b1' visibility='default' filepath='include/linux/iommu.h' line='585' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_sva_ops' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='188' column='1' id='dcdc0d46'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mm_exit' type-id='bf86d885' visibility='default' filepath='include/linux/iommu.h' line='189' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='iommu_mm_exit_handler_t' type-id='459dcf05' filepath='include/linux/iommu.h' line='55' column='1' id='bf86d885'/>
+      <class-decl name='iommu_fault_event' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='338' column='1' id='00f37356'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fault' type-id='1f190221' visibility='default' filepath='include/linux/iommu.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/iommu.h' line='340' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_fault' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/iommu.h' line='111' column='1' id='1f190221'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='padding' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='10f19c49' visibility='default' filepath='include/uapi/linux/iommu.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='448' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/iommu.h' line='114' column='1' id='10f19c49'>
+        <data-member access='private'>
+          <var-decl name='event' type-id='85fb8e73' visibility='default' filepath='include/uapi/linux/iommu.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='prm' type-id='cfbe6297' visibility='default' filepath='include/uapi/linux/iommu.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='padding2' type-id='a038344f' visibility='default' filepath='include/uapi/linux/iommu.h' line='117' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='iommu_fault_unrecoverable' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/iommu.h' line='69' column='1' id='85fb8e73'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reason' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pasid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='perm' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='addr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/iommu.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fetch_addr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/iommu.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_fault_page_request' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/iommu.h' line='91' column='1' id='cfbe6297'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pasid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='grpid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='perm' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='addr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/iommu.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private_data' type-id='8a7b7524' visibility='default' filepath='include/uapi/linux/iommu.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_page_response' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/iommu.h' line='145' column='1' id='719148b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pasid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='grpid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='code' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='152' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_fwspec' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='568' column='1' id='0d6f8400'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='f1ac64d1' visibility='default' filepath='include/linux/iommu.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iommu_fwnode' type-id='4a935625' visibility='default' filepath='include/linux/iommu.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='iommu_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/iommu.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/iommu.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='num_ids' type-id='f0981eeb' visibility='default' filepath='include/linux/iommu.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ids' type-id='587936a0' visibility='default' filepath='include/linux/iommu.h' line='574' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_fault_param' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='350' column='1' id='325adc8b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='handler' type-id='a84f5b46' visibility='default' filepath='include/linux/iommu.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/iommu.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='faults' type-id='72f469ec' visibility='default' filepath='include/linux/iommu.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/iommu.h' line='354' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='iommu_dev_fault_handler_t' type-id='6d118cd1' filepath='include/linux/iommu.h' line='57' column='1' id='a84f5b46'/>
+      <qualified-type-def type-id='8b7a2cd2' const='yes' id='9ce849db'/>
+      <pointer-type-def type-id='9ce849db' size-in-bits='64' id='f1ac64d1'/>
+      <qualified-type-def type-id='dcdc0d46' const='yes' id='c880d201'/>
+      <pointer-type-def type-id='c880d201' size-in-bits='64' id='cdcad9b1'/>
+      <pointer-type-def type-id='46816f8f' size-in-bits='64' id='5a1281ab'/>
+      <pointer-type-def type-id='984b30c5' size-in-bits='64' id='1ff48951'/>
+      <pointer-type-def type-id='b838f429' size-in-bits='64' id='459dcf05'/>
+      <pointer-type-def type-id='0ebe5367' size-in-bits='64' id='7fc43753'/>
+      <pointer-type-def type-id='0ef3e0fd' size-in-bits='64' id='21e9ca19'/>
+      <pointer-type-def type-id='bdb68106' size-in-bits='64' id='8e0d1900'/>
+      <pointer-type-def type-id='f11f5d07' size-in-bits='64' id='fe396a7b'/>
+      <pointer-type-def type-id='99373687' size-in-bits='64' id='7f31e8fb'/>
+      <pointer-type-def type-id='c619ce98' size-in-bits='64' id='2371b41a'/>
+      <pointer-type-def type-id='9bb659f5' size-in-bits='64' id='6d118cd1'/>
+      <pointer-type-def type-id='dab705c1' size-in-bits='64' id='4ded61d5'/>
+      <pointer-type-def type-id='80ef8feb' size-in-bits='64' id='bff05edb'/>
+      <pointer-type-def type-id='78536370' size-in-bits='64' id='2908e93a'/>
+      <pointer-type-def type-id='1f190221' size-in-bits='64' id='9d9e2a39'/>
+      <pointer-type-def type-id='00f37356' size-in-bits='64' id='af233abc'/>
+      <pointer-type-def type-id='325adc8b' size-in-bits='64' id='0a9b173b'/>
+      <pointer-type-def type-id='0d6f8400' size-in-bits='64' id='1979c578'/>
+      <pointer-type-def type-id='834d1a2b' size-in-bits='64' id='5448fdd7'/>
+      <pointer-type-def type-id='34fc4897' size-in-bits='64' id='1c63cc3f'/>
+      <pointer-type-def type-id='719148b2' size-in-bits='64' id='de4fef50'/>
+      <pointer-type-def type-id='91088608' size-in-bits='64' id='24b0cc5e'/>
+      <pointer-type-def type-id='c0e44fcd' size-in-bits='64' id='419266fd'/>
+      <pointer-type-def type-id='a2dba6b8' size-in-bits='64' id='925b860a'/>
+      <pointer-type-def type-id='24f3731d' size-in-bits='64' id='6981b6e9'/>
+      <pointer-type-def type-id='b3bc5b3a' size-in-bits='64' id='fd03a8f4'/>
+      <pointer-type-def type-id='53143c97' size-in-bits='64' id='6ee36fa3'/>
+      <pointer-type-def type-id='7a348508' size-in-bits='64' id='c4904652'/>
+      <pointer-type-def type-id='f1a922f0' size-in-bits='64' id='d1a6d6c2'/>
+      <pointer-type-def type-id='6c99ab8f' size-in-bits='64' id='b20722ab'/>
+      <pointer-type-def type-id='06a1c469' size-in-bits='64' id='83d96d05'/>
+      <pointer-type-def type-id='0b1ef2a8' size-in-bits='64' id='36caa4da'/>
+      <pointer-type-def type-id='e931abd6' size-in-bits='64' id='32baba38'/>
+      <pointer-type-def type-id='87769f42' size-in-bits='64' id='a6bf568c'/>
+      <pointer-type-def type-id='e5507ab5' size-in-bits='64' id='d3b2d361'/>
+      <pointer-type-def type-id='22400b6a' size-in-bits='64' id='4fb74714'/>
+      <function-decl name='arch_setup_dma_ops' mangled-name='arch_setup_dma_ops' filepath='arch/arm64/mm/dma-mapping.c' line='40' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='arch_setup_dma_ops'>
+        <parameter type-id='fa0b179b' name='dev' filepath='arch/arm64/mm/dma-mapping.c' line='40' column='1'/>
+        <parameter type-id='91ce1af9' name='dma_base' filepath='arch/arm64/mm/dma-mapping.c' line='40' column='1'/>
+        <parameter type-id='91ce1af9' name='size' filepath='arch/arm64/mm/dma-mapping.c' line='40' column='1'/>
+        <parameter type-id='f1ac64d1' name='iommu' filepath='arch/arm64/mm/dma-mapping.c' line='41' column='1'/>
+        <parameter type-id='b50a4934' name='coherent' filepath='arch/arm64/mm/dma-mapping.c' line='41' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='46816f8f'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='29d28711'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='984b30c5'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='af233abc'/>
+        <parameter type-id='de4fef50'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b838f429'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='419266fd'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ebe5367'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='51a94113'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ef3e0fd'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bdb68106'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f11f5d07'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='e176cc45'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='99373687'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='2522883d'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c619ce98'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='2522883d'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9bb659f5'>
+        <parameter type-id='9d9e2a39'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dab705c1'>
+        <parameter type-id='419266fd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78536370'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='bff05edb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='834d1a2b'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='0b19fc54'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2dba6b8'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='df4b7819'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='419266fd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24f3731d'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='29d28711'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b3bc5b3a'>
+        <parameter type-id='031224de'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='53143c97'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7a348508'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='cf29c9b3'/>
+        <return type-id='2522883d'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f1a922f0'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='1c63cc3f'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6c99ab8f'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='24b0cc5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06a1c469'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='e84b031a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0b1ef2a8'>
+        <parameter type-id='bff05edb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e931abd6'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='87769f42'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='1c63cc3f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e5507ab5'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='22400b6a'>
+        <parameter type-id='419266fd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='fbff4263' size-in-bits='64' id='51a94113'/>
+      <class-decl name='of_phandle_args' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/of.h' line='74' column='1' id='fbff4263'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='np' type-id='9a537bbe' visibility='default' filepath='include/linux/of.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='args_count' type-id='95e97e5e' visibility='default' filepath='include/linux/of.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='args' type-id='625d6c02' visibility='default' filepath='include/linux/of.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='8f92235e' size-in-bits='512' id='625d6c02'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/mm/fault.c' language='LANG_C89'>
+      <function-decl name='down_read_trylock' mangled-name='down_read_trylock' filepath='include/linux/rwsem.h' line='136' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='down_read_trylock'>
+        <parameter type-id='9b58df93'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='f19fdb93' size-in-bits='64' id='9b58df93'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/mm/init.c' language='LANG_C89'>
+      <var-decl name='memstart_addr' type-id='9b7c55ef' mangled-name='memstart_addr' visibility='default' filepath='arch/arm64/mm/init.c' line='50' column='1' elf-symbol-id='memstart_addr'/>
+      <function-decl name='pfn_valid' mangled-name='pfn_valid' filepath='arch/arm64/mm/init.c' line='235' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pfn_valid'>
+        <parameter type-id='7359adad' name='pfn' filepath='arch/arm64/mm/init.c' line='235' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/mm/ioremap.c' language='LANG_C89'>
+      <function-decl name='__ioremap' mangled-name='__ioremap' filepath='arch/arm64/mm/ioremap.c' line='65' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ioremap'>
+        <parameter type-id='2522883d' name='phys_addr' filepath='arch/arm64/mm/ioremap.c' line='65' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='arch/arm64/mm/ioremap.c' line='65' column='1'/>
+        <parameter type-id='2e2dcbd3' name='prot' filepath='arch/arm64/mm/ioremap.c' line='65' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='vunmap' mangled-name='vunmap' filepath='include/linux/vmalloc.h' line='121' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vunmap'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='arch/arm64/mm/mmu.c' language='LANG_C89'>
+      <enum-decl name='zone_stat_item' filepath='include/linux/mmzone.h' line='193' column='1' id='a1f2d9a1'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NR_FREE_PAGES' value='0'/>
+        <enumerator name='NR_ZONE_LRU_BASE' value='1'/>
+        <enumerator name='NR_ZONE_INACTIVE_ANON' value='1'/>
+        <enumerator name='NR_ZONE_ACTIVE_ANON' value='2'/>
+        <enumerator name='NR_ZONE_INACTIVE_FILE' value='3'/>
+        <enumerator name='NR_ZONE_ACTIVE_FILE' value='4'/>
+        <enumerator name='NR_ZONE_UNEVICTABLE' value='5'/>
+        <enumerator name='NR_ZONE_WRITE_PENDING' value='6'/>
+        <enumerator name='NR_MLOCK' value='7'/>
+        <enumerator name='NR_PAGETABLE' value='8'/>
+        <enumerator name='NR_KERNEL_STACK_KB' value='9'/>
+        <enumerator name='NR_KERNEL_SCS_BYTES' value='10'/>
+        <enumerator name='NR_BOUNCE' value='11'/>
+        <enumerator name='NR_ZSPAGES' value='12'/>
+        <enumerator name='NR_FREE_CMA_PAGES' value='13'/>
+        <enumerator name='NR_VM_ZONE_STAT_ITEMS' value='14'/>
+      </enum-decl>
+      <var-decl name='kimage_voffset' type-id='91ce1af9' mangled-name='kimage_voffset' visibility='default' filepath='arch/arm64/mm/mmu.c' line='47' column='1' elf-symbol-id='kimage_voffset'/>
+      <function-decl name='inc_zone_page_state' mangled-name='inc_zone_page_state' filepath='include/linux/vmstat.h' line='252' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inc_zone_page_state'>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='a1f2d9a1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/badblocks.c' language='LANG_C89'>
+      <function-decl name='badblocks_set' mangled-name='badblocks_set' filepath='block/badblocks.c' line='163' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='badblocks_set'>
+        <parameter type-id='5760652d' name='bb' filepath='block/badblocks.c' line='163' column='1'/>
+        <parameter type-id='a42536cd' name='s' filepath='block/badblocks.c' line='163' column='1'/>
+        <parameter type-id='95e97e5e' name='sectors' filepath='block/badblocks.c' line='163' column='1'/>
+        <parameter type-id='95e97e5e' name='acknowledged' filepath='block/badblocks.c' line='164' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ack_all_badblocks' mangled-name='ack_all_badblocks' filepath='block/badblocks.c' line='433' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ack_all_badblocks'>
+        <parameter type-id='5760652d' name='bb' filepath='block/badblocks.c' line='433' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='badblocks_init' mangled-name='badblocks_init' filepath='block/badblocks.c' line='575' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='badblocks_init'>
+        <parameter type-id='5760652d' name='bb' filepath='block/badblocks.c' line='575' column='1'/>
+        <parameter type-id='95e97e5e' name='enable' filepath='block/badblocks.c' line='575' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='badblocks_exit' mangled-name='badblocks_exit' filepath='block/badblocks.c' line='593' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='badblocks_exit'>
+        <parameter type-id='5760652d' name='bb' filepath='block/badblocks.c' line='593' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='cacf0f57' size-in-bits='64' id='5760652d'/>
+      <class-decl name='badblocks' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/badblocks.h' line='27' column='1' id='cacf0f57'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/badblocks.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/badblocks.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='unacked_exist' type-id='95e97e5e' visibility='default' filepath='include/linux/badblocks.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shift' type-id='95e97e5e' visibility='default' filepath='include/linux/badblocks.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='page' type-id='3df9fd28' visibility='default' filepath='include/linux/badblocks.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='changed' type-id='95e97e5e' visibility='default' filepath='include/linux/badblocks.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/linux/badblocks.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sector' type-id='a42536cd' visibility='default' filepath='include/linux/badblocks.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='size' type-id='a42536cd' visibility='default' filepath='include/linux/badblocks.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/bio.c' language='LANG_C89'>
+      <var-decl name='fs_bio_set' type-id='dfa886b2' mangled-name='fs_bio_set' visibility='default' filepath='block/bio.c' line='47' column='1' elf-symbol-id='fs_bio_set'/>
+      <function-decl name='bio_chain' mangled-name='bio_chain' filepath='block/bio.c' line='333' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bio_chain'>
+        <parameter type-id='fb55efa1' name='bio' filepath='block/bio.c' line='333' column='1'/>
+        <parameter type-id='fb55efa1' name='parent' filepath='block/bio.c' line='333' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bio_clone_blkg_association' mangled-name='bio_clone_blkg_association' filepath='block/bio.c' line='2180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bio_clone_blkg_association'>
+        <parameter type-id='fb55efa1' name='dst' filepath='block/bio.c' line='2180' column='1'/>
+        <parameter type-id='fb55efa1' name='src' filepath='block/bio.c' line='2180' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-core.c' language='LANG_C89'>
+      <typedef-decl name='blk_mq_req_flags_t' type-id='3f1a6b60' filepath='include/linux/blk_types.h' line='268' column='1' id='346d62be'/>
+      <function-decl name='blk_queue_flag_clear' mangled-name='blk_queue_flag_clear' filepath='block/blk-core.c' line='90' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_flag_clear'>
+        <parameter type-id='f0981eeb' name='flag' filepath='block/blk-core.c' line='90' column='1'/>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-core.c' line='90' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_flag_test_and_set' mangled-name='blk_queue_flag_test_and_set' filepath='block/blk-core.c' line='104' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_flag_test_and_set'>
+        <parameter type-id='f0981eeb' name='flag' filepath='block/blk-core.c' line='104' column='1'/>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-core.c' line='104' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='blk_sync_queue' mangled-name='blk_sync_queue' filepath='block/blk-core.c' line='282' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_sync_queue'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-core.c' line='282' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_put_queue' mangled-name='blk_put_queue' filepath='block/blk-core.c' line='310' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_put_queue'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-core.c' line='310' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_set_queue_dying' mangled-name='blk_set_queue_dying' filepath='block/blk-core.c' line='316' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_set_queue_dying'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-core.c' line='316' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_alloc_queue' mangled-name='blk_alloc_queue' filepath='block/blk-core.c' line='394' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_alloc_queue'>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='block/blk-core.c' line='394' column='1'/>
+        <return type-id='e7d2a5fd'/>
+      </function-decl>
+      <function-decl name='blk_get_request' mangled-name='blk_get_request' filepath='block/blk-core.c' line='583' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_get_request'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-core.c' line='583' column='1'/>
+        <parameter type-id='f0981eeb' name='op' filepath='block/blk-core.c' line='583' column='1'/>
+        <parameter type-id='346d62be' name='flags' filepath='block/blk-core.c' line='584' column='1'/>
+        <return type-id='3dad1a48'/>
+      </function-decl>
+      <function-decl name='blk_mq_alloc_request' mangled-name='blk_mq_alloc_request' filepath='include/linux/blk-mq.h' line='280' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_alloc_request'>
+        <parameter type-id='e7d2a5fd'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='3dad1a48'/>
+      </function-decl>
+      <function-decl name='blk_put_request' mangled-name='blk_put_request' filepath='block/blk-core.c' line='599' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_put_request'>
+        <parameter type-id='3dad1a48' name='req' filepath='block/blk-core.c' line='599' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_update_request' mangled-name='blk_update_request' filepath='block/blk-core.c' line='1446' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_update_request'>
+        <parameter type-id='3dad1a48' name='req' filepath='block/blk-core.c' line='1446' column='1'/>
+        <parameter type-id='f4e2facd' name='error' filepath='block/blk-core.c' line='1446' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_bytes' filepath='block/blk-core.c' line='1447' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='rq_flush_dcache_pages' mangled-name='rq_flush_dcache_pages' filepath='block/blk-core.c' line='1538' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rq_flush_dcache_pages'>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-core.c' line='1538' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-exec.c' language='LANG_C89'>
+      <function-decl name='blk_execute_rq_nowait' mangled-name='blk_execute_rq_nowait' filepath='block/blk-exec.c' line='48' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_execute_rq_nowait'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-exec.c' line='48' column='1'/>
+        <parameter type-id='33c599db' name='bd_disk' filepath='block/blk-exec.c' line='48' column='1'/>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-exec.c' line='49' column='1'/>
+        <parameter type-id='95e97e5e' name='at_head' filepath='block/blk-exec.c' line='49' column='1'/>
+        <parameter type-id='5afdaa66' name='done' filepath='block/blk-exec.c' line='50' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_execute_rq' mangled-name='blk_execute_rq' filepath='block/blk-exec.c' line='77' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_execute_rq'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-exec.c' line='77' column='1'/>
+        <parameter type-id='33c599db' name='bd_disk' filepath='block/blk-exec.c' line='77' column='1'/>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-exec.c' line='78' column='1'/>
+        <parameter type-id='95e97e5e' name='at_head' filepath='block/blk-exec.c' line='78' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-flush.c' language='LANG_C89'>
+      <function-decl name='blk_mq_end_request' mangled-name='blk_mq_end_request' filepath='include/linux/blk-mq.h' line='308' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_end_request'>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-ioc.c' language='LANG_C89'>
+      <function-decl name='radix_tree_maybe_preload' mangled-name='radix_tree_maybe_preload' filepath='include/linux/radix-tree.h' line='228' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='radix_tree_maybe_preload'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-lib.c' language='LANG_C89'>
+      <function-decl name='__blkdev_issue_discard' mangled-name='__blkdev_issue_discard' filepath='block/blk-lib.c' line='25' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__blkdev_issue_discard'>
+        <parameter type-id='b88dd945' name='bdev' filepath='block/blk-lib.c' line='25' column='1'/>
+        <parameter type-id='a42536cd' name='sector' filepath='block/blk-lib.c' line='25' column='1'/>
+        <parameter type-id='a42536cd' name='nr_sects' filepath='block/blk-lib.c' line='26' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='block/blk-lib.c' line='26' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='block/blk-lib.c' line='26' column='1'/>
+        <parameter type-id='334817d1' name='biop' filepath='block/blk-lib.c' line='27' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__blkdev_issue_zeroout' mangled-name='__blkdev_issue_zeroout' filepath='block/blk-lib.c' line='324' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__blkdev_issue_zeroout'>
+        <parameter type-id='b88dd945' name='bdev' filepath='block/blk-lib.c' line='324' column='1'/>
+        <parameter type-id='a42536cd' name='sector' filepath='block/blk-lib.c' line='324' column='1'/>
+        <parameter type-id='a42536cd' name='nr_sects' filepath='block/blk-lib.c' line='325' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='block/blk-lib.c' line='325' column='1'/>
+        <parameter type-id='334817d1' name='biop' filepath='block/blk-lib.c' line='325' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='block/blk-lib.c' line='326' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='fb55efa1' size-in-bits='64' id='334817d1'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-map.c' language='LANG_C89'>
+      <class-decl name='rq_map_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='812' column='1' id='9a6e6516'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pages' type-id='9f93c9da' visibility='default' filepath='include/linux/blkdev.h' line='813' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='page_order' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nr_entries' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='offset' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='816' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='null_mapped' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='from_user' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='818' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='f2b4d088' const='yes' id='7f60130d'/>
+      <pointer-type-def type-id='7f60130d' size-in-bits='64' id='ab3e2665'/>
+      <pointer-type-def type-id='9a6e6516' size-in-bits='64' id='9c9d090c'/>
+      <function-decl name='blk_rq_map_user_iov' mangled-name='blk_rq_map_user_iov' filepath='block/blk-map.c' line='121' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_rq_map_user_iov'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-map.c' line='121' column='1'/>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-map.c' line='121' column='1'/>
+        <parameter type-id='9c9d090c' name='map_data' filepath='block/blk-map.c' line='122' column='1'/>
+        <parameter type-id='ab3e2665' name='iter' filepath='block/blk-map.c' line='123' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='block/blk-map.c' line='123' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_rq_unmap_user' mangled-name='blk_rq_unmap_user' filepath='block/blk-map.c' line='186' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_rq_unmap_user'>
+        <parameter type-id='fb55efa1' name='bio' filepath='block/blk-map.c' line='186' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_rq_map_user' mangled-name='blk_rq_map_user' filepath='block/blk-map.c' line='162' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_rq_map_user'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-map.c' line='162' column='1'/>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-map.c' line='162' column='1'/>
+        <parameter type-id='9c9d090c' name='map_data' filepath='block/blk-map.c' line='163' column='1'/>
+        <parameter type-id='eaa32e2f' name='ubuf' filepath='block/blk-map.c' line='163' column='1'/>
+        <parameter type-id='7359adad' name='len' filepath='block/blk-map.c' line='164' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='block/blk-map.c' line='164' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_rq_map_kern' mangled-name='blk_rq_map_kern' filepath='block/blk-map.c' line='222' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_rq_map_kern'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-map.c' line='222' column='1'/>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-map.c' line='222' column='1'/>
+        <parameter type-id='eaa32e2f' name='kbuf' filepath='block/blk-map.c' line='222' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='block/blk-map.c' line='223' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='block/blk-map.c' line='223' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-merge.c' language='LANG_C89'>
+      <pointer-type-def type-id='fb55efa1' size-in-bits='64' id='334817d1'/>
+      <function-decl name='blk_queue_split' mangled-name='blk_queue_split' filepath='block/blk-merge.c' line='352' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_split'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-merge.c' line='352' column='1'/>
+        <parameter type-id='334817d1' name='bio' filepath='block/blk-merge.c' line='352' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_rq_map_sg' mangled-name='blk_rq_map_sg' filepath='block/blk-merge.c' line='507' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_rq_map_sg'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-merge.c' line='507' column='1'/>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-merge.c' line='507' column='1'/>
+        <parameter type-id='bf3ef905' name='sglist' filepath='block/blk-merge.c' line='508' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-mq-pci.c' language='LANG_C89'>
+      <function-decl name='blk_mq_pci_map_queues' mangled-name='blk_mq_pci_map_queues' filepath='block/blk-mq-pci.c' line='26' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_pci_map_queues'>
+        <parameter type-id='187ae308' name='qmap' filepath='block/blk-mq-pci.c' line='26' column='1'/>
+        <parameter type-id='85196e3f' name='pdev' filepath='block/blk-mq-pci.c' line='26' column='1'/>
+        <parameter type-id='95e97e5e' name='offset' filepath='block/blk-mq-pci.c' line='27' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_irq_get_affinity' mangled-name='pci_irq_get_affinity' filepath='include/linux/pci.h' line='1472' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_irq_get_affinity'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='5f8a1ac4'/>
+      </function-decl>
+      <pointer-type-def type-id='32406f0a' size-in-bits='64' id='187ae308'/>
+      <pointer-type-def type-id='6b2a4486' size-in-bits='64' id='5f8a1ac4'/>
+      <qualified-type-def type-id='1354385d' const='yes' id='6b2a4486'/>
+      <class-decl name='blk_mq_queue_map' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='79' column='1' id='32406f0a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mq_map' type-id='807869d3' visibility='default' filepath='include/linux/blk-mq.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='queue_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-mq-tag.c' language='LANG_C89'>
+      <typedef-decl name='busy_tag_iter_fn' type-id='784e7aa9' filepath='include/linux/blk-mq.h' line='138' column='1' id='f8a88be2'/>
+      <pointer-type-def type-id='f8a88be2' size-in-bits='64' id='65a8a3df'/>
+      <function-decl name='blk_mq_tagset_busy_iter' mangled-name='blk_mq_tagset_busy_iter' filepath='block/blk-mq-tag.c' line='346' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_tagset_busy_iter'>
+        <parameter type-id='cc26d160' name='tagset' filepath='block/blk-mq-tag.c' line='346' column='1'/>
+        <parameter type-id='65a8a3df' name='fn' filepath='block/blk-mq-tag.c' line='347' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='block/blk-mq-tag.c' line='347' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_tagset_wait_completed_request' mangled-name='blk_mq_tagset_wait_completed_request' filepath='block/blk-mq-tag.c' line='375' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_tagset_wait_completed_request'>
+        <parameter type-id='cc26d160' name='tagset' filepath='block/blk-mq-tag.c' line='375' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_unique_tag' mangled-name='blk_mq_unique_tag' filepath='block/blk-mq-tag.c' line='556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_unique_tag'>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-mq-tag.c' line='556' column='1'/>
+        <return type-id='19c2251e'/>
+      </function-decl>
+      <pointer-type-def type-id='651086d8' size-in-bits='64' id='cc26d160'/>
+      <function-type size-in-bits='64' id='784e7aa9'>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <class-decl name='blk_mq_tag_set' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='93' column='1' id='651086d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map' type-id='ffbe012f' visibility='default' filepath='include/linux/blk-mq.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nr_maps' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='e1962c5d' visibility='default' filepath='include/linux/blk-mq.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='nr_hw_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='queue_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reserved_tags' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='cmd_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='numa_node' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-mq.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blk-mq.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='tags' type-id='c527e30d' visibility='default' filepath='include/linux/blk-mq.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='tag_list_lock' type-id='925167dc' visibility='default' filepath='include/linux/blk-mq.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tag_list' type-id='72f469ec' visibility='default' filepath='include/linux/blk-mq.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='32406f0a' size-in-bits='384' id='ffbe012f'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='0461ecf5' size-in-bits='64' id='c527e30d'/>
+      <pointer-type-def type-id='8efd3865' size-in-bits='64' id='0461ecf5'/>
+      <class-decl name='blk_mq_tags' size-in-bits='1408' is-struct='yes' visibility='default' filepath='block/blk-mq-tag.h' line='10' column='1' id='8efd3865'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_tags' type-id='f0981eeb' visibility='default' filepath='block/blk-mq-tag.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr_reserved_tags' type-id='f0981eeb' visibility='default' filepath='block/blk-mq-tag.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='active_queues' type-id='49178f86' visibility='default' filepath='block/blk-mq-tag.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bitmap_tags' type-id='a133315d' visibility='default' filepath='block/blk-mq-tag.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='breserved_tags' type-id='a133315d' visibility='default' filepath='block/blk-mq-tag.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rqs' type-id='79808846' visibility='default' filepath='block/blk-mq-tag.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='static_rqs' type-id='79808846' visibility='default' filepath='block/blk-mq-tag.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='page_list' type-id='72f469ec' visibility='default' filepath='block/blk-mq-tag.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3dad1a48' size-in-bits='64' id='79808846'/>
+      <class-decl name='sbitmap_queue' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/sbitmap.h' line='97' column='1' id='a133315d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sb' type-id='6e051ed1' visibility='default' filepath='include/linux/sbitmap.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='alloc_hint' type-id='807869d3' visibility='default' filepath='include/linux/sbitmap.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='wake_batch' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='wake_index' type-id='49178f86' visibility='default' filepath='include/linux/sbitmap.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ws' type-id='cdff193b' visibility='default' filepath='include/linux/sbitmap.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ws_active' type-id='49178f86' visibility='default' filepath='include/linux/sbitmap.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='round_robin' type-id='b50a4934' visibility='default' filepath='include/linux/sbitmap.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='min_shallow_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='141' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='41425a4b' size-in-bits='64' id='cdff193b'/>
+      <class-decl name='sbitmap' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/sbitmap.h' line='48' column='1' id='6e051ed1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='depth' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='shift' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='map_nr' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='278a4544' visibility='default' filepath='include/linux/sbitmap.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='28e1d9ae' size-in-bits='64' id='278a4544'/>
+      <class-decl name='sbq_wait_state' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/sbitmap.h' line='76' column='1' id='41425a4b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wait_cnt' type-id='49178f86' visibility='default' filepath='include/linux/sbitmap.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/sbitmap.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sbitmap_word' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/sbitmap.h' line='20' column='1' id='28e1d9ae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='depth' type-id='7359adad' visibility='default' filepath='include/linux/sbitmap.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='word' type-id='7359adad' visibility='default' filepath='include/linux/sbitmap.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='cleared' type-id='7359adad' visibility='default' filepath='include/linux/sbitmap.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='swap_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/sbitmap.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-mq-virtio.c' language='LANG_C89'>
+      <function-decl name='blk_mq_virtio_map_queues' mangled-name='blk_mq_virtio_map_queues' filepath='block/blk-mq-virtio.c' line='24' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_virtio_map_queues'>
+        <parameter type-id='187ae308' name='qmap' filepath='block/blk-mq-virtio.c' line='24' column='1'/>
+        <parameter type-id='5dbfcbb1' name='vdev' filepath='block/blk-mq-virtio.c' line='25' column='1'/>
+        <parameter type-id='95e97e5e' name='first_vec' filepath='block/blk-mq-virtio.c' line='25' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='a23921c9' size-in-bits='64' id='5dbfcbb1'/>
+      <class-decl name='virtio_device' size-in-bits='7936' is-struct='yes' visibility='default' filepath='include/linux/virtio.h' line='108' column='1' id='a23921c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/linux/virtio.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='failed' type-id='b50a4934' visibility='default' filepath='include/linux/virtio.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='config_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/virtio.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='config_change_pending' type-id='b50a4934' visibility='default' filepath='include/linux/virtio.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='config_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/virtio.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/virtio.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='id' type-id='7462f12f' visibility='default' filepath='include/linux/virtio.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='config' type-id='afc22511' visibility='default' filepath='include/linux/virtio.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='vringh_config' type-id='f9c3a0be' visibility='default' filepath='include/linux/virtio.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='vqs' type-id='72f469ec' visibility='default' filepath='include/linux/virtio.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='features' type-id='91ce1af9' visibility='default' filepath='include/linux/virtio.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/virtio.h' line='120' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='17c0f561' size-in-bits='64' id='afc22511'/>
+      <pointer-type-def type-id='79eccb20' size-in-bits='64' id='f9c3a0be'/>
+      <class-decl name='virtio_device_id' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='427' column='1' id='7462f12f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='device' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vendor' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='429' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='d70a473a' const='yes' id='17c0f561'/>
+      <qualified-type-def type-id='b16ef9f3' const='yes' id='79eccb20'/>
+      <class-decl name='virtio_config_ops' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/virtio_config.h' line='70' column='1' id='d70a473a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get' type-id='b22e78ee' visibility='default' filepath='include/linux/virtio_config.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set' type-id='b22e78ee' visibility='default' filepath='include/linux/virtio_config.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='generation' type-id='fe5a9a49' visibility='default' filepath='include/linux/virtio_config.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_status' type-id='bbefcc2a' visibility='default' filepath='include/linux/virtio_config.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_status' type-id='3dc18b9c' visibility='default' filepath='include/linux/virtio_config.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reset' type-id='33d93b18' visibility='default' filepath='include/linux/virtio_config.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='find_vqs' type-id='17035a6b' visibility='default' filepath='include/linux/virtio_config.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='del_vqs' type-id='33d93b18' visibility='default' filepath='include/linux/virtio_config.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_features' type-id='f428336a' visibility='default' filepath='include/linux/virtio_config.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='finalize_features' type-id='b89d0409' visibility='default' filepath='include/linux/virtio_config.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bus_name' type-id='eb8aa2f1' visibility='default' filepath='include/linux/virtio_config.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set_vq_affinity' type-id='53a5ad54' visibility='default' filepath='include/linux/virtio_config.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_vq_affinity' type-id='7642cce6' visibility='default' filepath='include/linux/virtio_config.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vringh_config_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/vringh.h' line='59' column='1' id='b16ef9f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='find_vrhs' type-id='7035601e' visibility='default' filepath='include/linux/vringh.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='del_vrhs' type-id='33d93b18' visibility='default' filepath='include/linux/vringh.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f2207a6d' size-in-bits='64' id='eb8aa2f1'/>
+      <pointer-type-def type-id='ba92be9c' size-in-bits='64' id='7642cce6'/>
+      <pointer-type-def type-id='f214de7d' size-in-bits='64' id='b89d0409'/>
+      <pointer-type-def type-id='e636858f' size-in-bits='64' id='17035a6b'/>
+      <pointer-type-def type-id='b70014f4' size-in-bits='64' id='7035601e'/>
+      <pointer-type-def type-id='628f102a' size-in-bits='64' id='53a5ad54'/>
+      <pointer-type-def type-id='1e91d6cd' size-in-bits='64' id='fe5a9a49'/>
+      <pointer-type-def type-id='70a1a668' size-in-bits='64' id='f428336a'/>
+      <pointer-type-def type-id='983b8510' size-in-bits='64' id='bbefcc2a'/>
+      <pointer-type-def type-id='bbf47576' size-in-bits='64' id='33d93b18'/>
+      <pointer-type-def type-id='83c3d80a' size-in-bits='64' id='3dc18b9c'/>
+      <pointer-type-def type-id='6c0f5f3c' size-in-bits='64' id='b22e78ee'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-mq.c' language='LANG_C89'>
+      <pointer-type-def type-id='32406f0a' size-in-bits='64' id='187ae308'/>
+      <function-decl name='blk_mq_alloc_tag_set' mangled-name='blk_mq_alloc_tag_set' filepath='block/blk-mq.c' line='3092' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_alloc_tag_set'>
+        <parameter type-id='cc26d160' name='set' filepath='block/blk-mq.c' line='3092' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_mq_run_hw_queues' mangled-name='blk_mq_run_hw_queues' filepath='block/blk-mq.c' line='1541' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_run_hw_queues'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-mq.c' line='1541' column='1'/>
+        <parameter type-id='b50a4934' name='async' filepath='block/blk-mq.c' line='1541' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_freeze_queue_wait' mangled-name='blk_mq_freeze_queue_wait' filepath='block/blk-mq.c' line='161' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_freeze_queue_wait'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-mq.c' line='161' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_freeze_queue_wait_timeout' mangled-name='blk_mq_freeze_queue_wait_timeout' filepath='block/blk-mq.c' line='167' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_freeze_queue_wait_timeout'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-mq.c' line='167' column='1'/>
+        <parameter type-id='7359adad' name='timeout' filepath='block/blk-mq.c' line='168' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_mq_freeze_queue' mangled-name='blk_mq_freeze_queue' filepath='block/blk-mq.c' line='193' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_freeze_queue'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-mq.c' line='193' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_alloc_request_hctx' mangled-name='blk_mq_alloc_request_hctx' filepath='block/blk-mq.c' line='448' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_alloc_request_hctx'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-mq.c' line='448' column='1'/>
+        <parameter type-id='f0981eeb' name='op' filepath='block/blk-mq.c' line='449' column='1'/>
+        <parameter type-id='346d62be' name='flags' filepath='block/blk-mq.c' line='449' column='1'/>
+        <parameter type-id='f0981eeb' name='hctx_idx' filepath='block/blk-mq.c' line='449' column='1'/>
+        <return type-id='3dad1a48'/>
+      </function-decl>
+      <function-decl name='__blk_mq_end_request' mangled-name='__blk_mq_end_request' filepath='block/blk-mq.c' line='543' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__blk_mq_end_request'>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-mq.c' line='543' column='1'/>
+        <parameter type-id='f4e2facd' name='error' filepath='block/blk-mq.c' line='543' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_complete_request' mangled-name='blk_mq_complete_request' filepath='block/blk-mq.c' line='660' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_complete_request'>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-mq.c' line='660' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='blk_mq_request_completed' mangled-name='blk_mq_request_completed' filepath='block/blk-mq.c' line='675' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_request_completed'>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-mq.c' line='675' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_mq_start_request' mangled-name='blk_mq_start_request' filepath='block/blk-mq.c' line='681' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_start_request'>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-mq.c' line='681' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_requeue_request' mangled-name='blk_mq_requeue_request' filepath='block/blk-mq.c' line='732' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_requeue_request'>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-mq.c' line='732' column='1'/>
+        <parameter type-id='b50a4934' name='kick_requeue_list' filepath='block/blk-mq.c' line='732' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_delay_kick_requeue_list' mangled-name='blk_mq_delay_kick_requeue_list' filepath='block/blk-mq.c' line='812' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_delay_kick_requeue_list'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-mq.c' line='812' column='1'/>
+        <parameter type-id='7359adad' name='msecs' filepath='block/blk-mq.c' line='813' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_tag_to_rq' mangled-name='blk_mq_tag_to_rq' filepath='block/blk-mq.c' line='820' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_tag_to_rq'>
+        <parameter type-id='0461ecf5' name='tags' filepath='block/blk-mq.c' line='820' column='1'/>
+        <parameter type-id='f0981eeb' name='tag' filepath='block/blk-mq.c' line='820' column='1'/>
+        <return type-id='3dad1a48'/>
+      </function-decl>
+      <function-decl name='blk_mq_stop_hw_queue' mangled-name='blk_mq_stop_hw_queue' filepath='block/blk-mq.c' line='1584' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_stop_hw_queue'>
+        <parameter type-id='a47d3468' name='hctx' filepath='block/blk-mq.c' line='1584' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_start_stopped_hw_queues' mangled-name='blk_mq_start_stopped_hw_queues' filepath='block/blk-mq.c' line='1639' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_start_stopped_hw_queues'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-mq.c' line='1639' column='1'/>
+        <parameter type-id='b50a4934' name='async' filepath='block/blk-mq.c' line='1639' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_init_queue' mangled-name='blk_mq_init_queue' filepath='block/blk-mq.c' line='2743' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_init_queue'>
+        <parameter type-id='cc26d160' name='set' filepath='block/blk-mq.c' line='2743' column='1'/>
+        <return type-id='e7d2a5fd'/>
+      </function-decl>
+      <function-decl name='blk_mq_init_sq_queue' mangled-name='blk_mq_init_sq_queue' filepath='block/blk-mq.c' line='2767' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_init_sq_queue'>
+        <parameter type-id='cc26d160' name='set' filepath='block/blk-mq.c' line='2767' column='1'/>
+        <parameter type-id='e1962c5d' name='ops' filepath='block/blk-mq.c' line='2768' column='1'/>
+        <parameter type-id='f0981eeb' name='queue_depth' filepath='block/blk-mq.c' line='2769' column='1'/>
+        <parameter type-id='f0981eeb' name='set_flags' filepath='block/blk-mq.c' line='2770' column='1'/>
+        <return type-id='e7d2a5fd'/>
+      </function-decl>
+      <function-decl name='blk_mq_free_tag_set' mangled-name='blk_mq_free_tag_set' filepath='block/blk-mq.c' line='3178' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_free_tag_set'>
+        <parameter type-id='cc26d160' name='set' filepath='block/blk-mq.c' line='3178' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_map_queues' mangled-name='blk_mq_map_queues' filepath='include/linux/blk-mq.h' line='339' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_map_queues'>
+        <parameter type-id='187ae308'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_mq_update_nr_hw_queues' mangled-name='blk_mq_update_nr_hw_queues' filepath='block/blk-mq.c' line='3375' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_update_nr_hw_queues'>
+        <parameter type-id='cc26d160' name='set' filepath='block/blk-mq.c' line='3375' column='1'/>
+        <parameter type-id='95e97e5e' name='nr_hw_queues' filepath='block/blk-mq.c' line='3375' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='e0630290' size-in-bits='64' id='a47d3468'/>
+      <class-decl name='blk_mq_hw_ctx' size-in-bits='5120' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='15' column='1' id='e0630290'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='87322991' visibility='default' filepath='include/linux/blk-mq.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='run_work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/blk-mq.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='cpumask' type-id='b16b461b' visibility='default' filepath='include/linux/blk-mq.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='next_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-mq.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='next_cpu_batch' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-mq.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='sched_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blk-mq.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='queue' type-id='e7d2a5fd' visibility='default' filepath='include/linux/blk-mq.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='fq' type-id='e118affa' visibility='default' filepath='include/linux/blk-mq.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blk-mq.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ctx_map' type-id='6e051ed1' visibility='default' filepath='include/linux/blk-mq.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='dispatch_from' type-id='9a335022' visibility='default' filepath='include/linux/blk-mq.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='dispatch_busy' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='type' type-id='8efea9e5' visibility='default' filepath='include/linux/blk-mq.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2352'>
+          <var-decl name='nr_ctx' type-id='8efea9e5' visibility='default' filepath='include/linux/blk-mq.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ctxs' type-id='c9c70151' visibility='default' filepath='include/linux/blk-mq.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dispatch_wait_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blk-mq.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='dispatch_wait' type-id='fe794aa9' visibility='default' filepath='include/linux/blk-mq.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='wait_index' type-id='49178f86' visibility='default' filepath='include/linux/blk-mq.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='tags' type-id='0461ecf5' visibility='default' filepath='include/linux/blk-mq.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='sched_tags' type-id='0461ecf5' visibility='default' filepath='include/linux/blk-mq.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='queued' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='run' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='dispatched' type-id='346bc576' visibility='default' filepath='include/linux/blk-mq.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='numa_node' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3616'>
+          <var-decl name='queue_num' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='nr_active' type-id='49178f86' visibility='default' filepath='include/linux/blk-mq.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='cpuhp_dead' type-id='03a4a074' visibility='default' filepath='include/linux/blk-mq.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/blk-mq.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='poll_considered' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='poll_invoked' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='poll_success' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blk-mq.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='sched_debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blk-mq.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='hctx_list' type-id='72f469ec' visibility='default' filepath='include/linux/blk-mq.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='srcu' type-id='6abca080' visibility='default' filepath='include/linux/blk-mq.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='1d120222' size-in-bits='64' id='e118affa'/>
+      <pointer-type-def type-id='cde99b3a' size-in-bits='64' id='9a335022'/>
+      <pointer-type-def type-id='9a335022' size-in-bits='64' id='c9c70151'/>
+      <array-type-def dimensions='1' type-id='e4a7867c' size-in-bits='infinite' id='6abca080'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='__anonymous_struct__' size-in-bits='512' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/blk-mq.h' line='16' column='1' id='87322991'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blk-mq.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dispatch' type-id='72f469ec' visibility='default' filepath='include/linux/blk-mq.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='wait_queue_entry_t' type-id='504855b3' filepath='include/linux/wait.h' line='14' column='1' id='fe794aa9'/>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='448' id='346bc576'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <class-decl name='blk_flush_queue' size-in-bits='704' is-struct='yes' visibility='default' filepath='block/blk.h' line='20' column='1' id='1d120222'>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='flush_queue_delayed' type-id='f0981eeb' visibility='default' filepath='block/blk.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='flush_pending_idx' type-id='f0981eeb' visibility='default' filepath='block/blk.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='flush_running_idx' type-id='f0981eeb' visibility='default' filepath='block/blk.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='rq_status' type-id='f4e2facd' visibility='default' filepath='block/blk.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flush_pending_since' type-id='7359adad' visibility='default' filepath='block/blk.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flush_queue' type-id='e4f16420' visibility='default' filepath='block/blk.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flush_data_in_flight' type-id='72f469ec' visibility='default' filepath='block/blk.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='flush_rq' type-id='3dad1a48' visibility='default' filepath='block/blk.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='orig_rq' type-id='3dad1a48' visibility='default' filepath='block/blk.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='key' type-id='47479831' visibility='default' filepath='block/blk.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mq_flush_lock' type-id='fb4018a0' visibility='default' filepath='block/blk.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_ctx' size-in-bits='2048' is-struct='yes' visibility='default' filepath='block/blk-mq.h' line='18' column='1' id='cde99b3a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='e9e9d685' visibility='default' filepath='block/blk-mq.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='block/blk-mq.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='index_hw' type-id='ff2536e2' visibility='default' filepath='block/blk-mq.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='hctxs' type-id='56ac7648' visibility='default' filepath='block/blk-mq.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rq_dispatched' type-id='f05e8e77' visibility='default' filepath='block/blk-mq.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rq_merged' type-id='7359adad' visibility='default' filepath='block/blk-mq.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='rq_completed' type-id='f05e8e77' visibility='default' filepath='block/blk-mq.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='queue' type-id='e7d2a5fd' visibility='default' filepath='block/blk-mq.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ctxs' type-id='ceead144' visibility='default' filepath='block/blk-mq.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='block/blk-mq.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wait_queue_entry' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/wait.h' line='27' column='1' id='504855b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/wait.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/wait.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='func' type-id='67119c17' visibility='default' filepath='include/linux/wait.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/wait.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='70bf757e' size-in-bits='64' id='ceead144'/>
+      <array-type-def dimensions='1' type-id='a47d3468' size-in-bits='192' id='56ac7648'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='256' id='e4f16420'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='__anonymous_struct__1' size-in-bits='512' is-struct='yes' is-anonymous='yes' visibility='default' filepath='block/blk-mq.h' line='19' column='1' id='e9e9d685'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='block/blk-mq.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rq_lists' type-id='e8ef2bd5' visibility='default' filepath='block/blk-mq.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='wait_queue_func_t' type-id='3e643710' filepath='include/linux/wait.h' line='16' column='1' id='67119c17'/>
+      <array-type-def dimensions='1' type-id='8efea9e5' size-in-bits='48' id='ff2536e2'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='3cab519e' size-in-bits='64' id='3e643710'/>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='384' id='e8ef2bd5'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <class-decl name='blk_mq_ctxs' size-in-bits='832' is-struct='yes' visibility='default' filepath='block/blk-mq.h' line='10' column='1' id='70bf757e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='block/blk-mq.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='queue_ctx' type-id='9a335022' visibility='default' filepath='block/blk-mq.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-pm.c' language='LANG_C89'>
+      <function-decl name='pm_runtime_set_autosuspend_delay' mangled-name='pm_runtime_set_autosuspend_delay' filepath='include/linux/pm_runtime.h' line='52' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_set_autosuspend_delay'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='percpu_ref_switch_to_atomic_sync' mangled-name='percpu_ref_switch_to_atomic_sync' filepath='include/linux/percpu-refcount.h' line='115' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='percpu_ref_switch_to_atomic_sync'>
+        <parameter type-id='60219102'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-settings.c' language='LANG_C89'>
+      <pointer-type-def type-id='f0966d3d' size-in-bits='64' id='7604ff1d'/>
+      <function-decl name='blk_queue_rq_timeout' mangled-name='blk_queue_rq_timeout' filepath='block/blk-settings.c' line='25' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_rq_timeout'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-settings.c' line='25' column='1'/>
+        <parameter type-id='f0981eeb' name='timeout' filepath='block/blk-settings.c' line='25' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_set_stacking_limits' mangled-name='blk_set_stacking_limits' filepath='block/blk-settings.c' line='73' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_set_stacking_limits'>
+        <parameter type-id='7604ff1d' name='lim' filepath='block/blk-settings.c' line='73' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_bounce_limit' mangled-name='blk_queue_bounce_limit' filepath='block/blk-settings.c' line='136' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_bounce_limit'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-settings.c' line='136' column='1'/>
+        <parameter type-id='91ce1af9' name='max_addr' filepath='block/blk-settings.c' line='136' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_chunk_sectors' mangled-name='blk_queue_chunk_sectors' filepath='block/blk-settings.c' line='215' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_chunk_sectors'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-settings.c' line='215' column='1'/>
+        <parameter type-id='f0981eeb' name='chunk_sectors' filepath='block/blk-settings.c' line='215' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_max_discard_sectors' mangled-name='blk_queue_max_discard_sectors' filepath='block/blk-settings.c' line='227' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_max_discard_sectors'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-settings.c' line='227' column='1'/>
+        <parameter type-id='f0981eeb' name='max_discard_sectors' filepath='block/blk-settings.c' line='228' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_max_write_zeroes_sectors' mangled-name='blk_queue_max_write_zeroes_sectors' filepath='block/blk-settings.c' line='253' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_max_write_zeroes_sectors'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-settings.c' line='253' column='1'/>
+        <parameter type-id='f0981eeb' name='max_write_zeroes_sectors' filepath='block/blk-settings.c' line='254' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_max_segments' mangled-name='blk_queue_max_segments' filepath='block/blk-settings.c' line='269' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_max_segments'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-settings.c' line='269' column='1'/>
+        <parameter type-id='8efea9e5' name='max_segments' filepath='block/blk-settings.c' line='269' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_max_discard_segments' mangled-name='blk_queue_max_discard_segments' filepath='block/blk-settings.c' line='290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_max_discard_segments'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-settings.c' line='290' column='1'/>
+        <parameter type-id='8efea9e5' name='max_segments' filepath='block/blk-settings.c' line='291' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_max_segment_size' mangled-name='blk_queue_max_segment_size' filepath='block/blk-settings.c' line='306' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_max_segment_size'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-settings.c' line='306' column='1'/>
+        <parameter type-id='f0981eeb' name='max_size' filepath='block/blk-settings.c' line='306' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_alignment_offset' mangled-name='blk_queue_alignment_offset' filepath='block/blk-settings.c' line='376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_alignment_offset'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-settings.c' line='376' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='block/blk-settings.c' line='376' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_io_min' mangled-name='blk_queue_io_min' filepath='block/blk-settings.c' line='421' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_io_min'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-settings.c' line='421' column='1'/>
+        <parameter type-id='f0981eeb' name='min' filepath='block/blk-settings.c' line='421' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_io_opt' mangled-name='blk_queue_io_opt' filepath='block/blk-settings.c' line='459' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_io_opt'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-settings.c' line='459' column='1'/>
+        <parameter type-id='f0981eeb' name='opt' filepath='block/blk-settings.c' line='459' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_virt_boundary' mangled-name='blk_queue_virt_boundary' filepath='block/blk-settings.c' line='749' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_virt_boundary'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-settings.c' line='749' column='1'/>
+        <parameter type-id='7359adad' name='mask' filepath='block/blk-settings.c' line='749' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_can_use_dma_map_merging' mangled-name='blk_queue_can_use_dma_map_merging' filepath='block/blk-settings.c' line='862' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_can_use_dma_map_merging'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/blk-settings.c' line='862' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='block/blk-settings.c' line='863' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/blk-sysfs.c' language='LANG_C89'>
+      <function-decl name='percpu_ref_switch_to_percpu' mangled-name='percpu_ref_switch_to_percpu' filepath='include/linux/percpu-refcount.h' line='116' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='percpu_ref_switch_to_percpu'>
+        <parameter type-id='60219102'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/elevator.c' language='LANG_C89'>
+      <class-decl name='rq_qos' size-in-bits='320' is-struct='yes' visibility='default' filepath='block/blk-rq-qos.h' line='26' column='1' id='e0a68feb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='4a3f5a61' visibility='default' filepath='block/blk-rq-qos.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='q' type-id='e7d2a5fd' visibility='default' filepath='block/blk-rq-qos.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='51cb492d' visibility='default' filepath='block/blk-rq-qos.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='c3a28779' visibility='default' filepath='block/blk-rq-qos.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='debugfs_dir' type-id='27675065' visibility='default' filepath='block/blk-rq-qos.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rq_qos_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='block/blk-rq-qos.h' line='36' column='1' id='59969f99'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='throttle' type-id='7eeb4265' visibility='default' filepath='block/blk-rq-qos.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='track' type-id='923f12f8' visibility='default' filepath='block/blk-rq-qos.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='merge' type-id='923f12f8' visibility='default' filepath='block/blk-rq-qos.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='issue' type-id='4b080d34' visibility='default' filepath='block/blk-rq-qos.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='requeue' type-id='4b080d34' visibility='default' filepath='block/blk-rq-qos.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='done' type-id='4b080d34' visibility='default' filepath='block/blk-rq-qos.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='done_bio' type-id='7eeb4265' visibility='default' filepath='block/blk-rq-qos.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cleanup' type-id='7eeb4265' visibility='default' filepath='block/blk-rq-qos.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='queue_depth_changed' type-id='754d9fe1' visibility='default' filepath='block/blk-rq-qos.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='exit' type-id='754d9fe1' visibility='default' filepath='block/blk-rq-qos.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='debugfs_attrs' type-id='e649198d' visibility='default' filepath='block/blk-rq-qos.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='rq_qos_id' filepath='block/blk-rq-qos.h' line='15' column='1' id='51cb492d'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RQ_QOS_WBT' value='0'/>
+        <enumerator name='RQ_QOS_LATENCY' value='1'/>
+        <enumerator name='RQ_QOS_COST' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='e0a68feb' size-in-bits='64' id='c3a28779'/>
+      <pointer-type-def type-id='59969f99' size-in-bits='64' id='4a3f5a61'/>
+      <pointer-type-def type-id='0627f2fd' size-in-bits='64' id='754d9fe1'/>
+      <pointer-type-def type-id='d86a6269' size-in-bits='64' id='7eeb4265'/>
+      <pointer-type-def type-id='836381ca' size-in-bits='64' id='4b080d34'/>
+      <pointer-type-def type-id='4b4e7d36' size-in-bits='64' id='923f12f8'/>
+      <function-decl name='blk_mq_quiesce_queue' mangled-name='blk_mq_quiesce_queue' filepath='include/linux/blk-mq.h' line='324' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_quiesce_queue'>
+        <parameter type-id='e7d2a5fd'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_unquiesce_queue' mangled-name='blk_mq_unquiesce_queue' filepath='include/linux/blk-mq.h' line='325' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_unquiesce_queue'>
+        <parameter type-id='e7d2a5fd'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_unfreeze_queue' mangled-name='blk_mq_unfreeze_queue' filepath='include/linux/blk-mq.h' line='333' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_unfreeze_queue'>
+        <parameter type-id='e7d2a5fd'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='0627f2fd'>
+        <parameter type-id='c3a28779'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d86a6269'>
+        <parameter type-id='c3a28779'/>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='836381ca'>
+        <parameter type-id='c3a28779'/>
+        <parameter type-id='3dad1a48'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4b4e7d36'>
+        <parameter type-id='c3a28779'/>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/genhd.c' language='LANG_C89'>
+      <pointer-type-def type-id='445b0832' size-in-bits='64' id='a8735e7c'/>
+      <pointer-type-def type-id='eed59d16' size-in-bits='64' id='aaaf3990'/>
+      <function-decl name='__alloc_disk_node' mangled-name='__alloc_disk_node' filepath='block/genhd.c' line='1467' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__alloc_disk_node'>
+        <parameter type-id='95e97e5e' name='minors' filepath='block/genhd.c' line='1467' column='1'/>
+        <parameter type-id='95e97e5e' name='node_id' filepath='block/genhd.c' line='1467' column='1'/>
+        <return type-id='33c599db'/>
+      </function-decl>
+      <function-decl name='register_blkdev' mangled-name='register_blkdev' filepath='block/genhd.c' line='357' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_blkdev'>
+        <parameter type-id='f0981eeb' name='major' filepath='block/genhd.c' line='357' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='block/genhd.c' line='357' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_blkdev' mangled-name='unregister_blkdev' filepath='block/genhd.c' line='421' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_blkdev'>
+        <parameter type-id='f0981eeb' name='major' filepath='block/genhd.c' line='421' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='block/genhd.c' line='421' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_register_region' mangled-name='blk_register_region' filepath='block/genhd.c' line='567' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_register_region'>
+        <parameter type-id='8504f260' name='devt' filepath='block/genhd.c' line='567' column='1'/>
+        <parameter type-id='7359adad' name='range' filepath='block/genhd.c' line='567' column='1'/>
+        <parameter type-id='2730d015' name='module' filepath='block/genhd.c' line='567' column='1'/>
+        <parameter type-id='aaaf3990' name='probe' filepath='block/genhd.c' line='568' column='1'/>
+        <parameter type-id='a8735e7c' name='lock' filepath='block/genhd.c' line='569' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='block/genhd.c' line='569' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_unregister_region' mangled-name='blk_unregister_region' filepath='block/genhd.c' line='576' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_unregister_region'>
+        <parameter type-id='8504f260' name='devt' filepath='block/genhd.c' line='576' column='1'/>
+        <parameter type-id='7359adad' name='range' filepath='block/genhd.c' line='576' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='set_disk_ro' mangled-name='set_disk_ro' filepath='block/genhd.c' line='1580' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_disk_ro'>
+        <parameter type-id='33c599db' name='disk' filepath='block/genhd.c' line='1580' column='1'/>
+        <parameter type-id='95e97e5e' name='flag' filepath='block/genhd.c' line='1580' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='badblocks_show' mangled-name='badblocks_show' filepath='include/linux/badblocks.h' line='50' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='badblocks_show'>
+        <parameter type-id='5760652d'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='badblocks_store' mangled-name='badblocks_store' filepath='include/linux/badblocks.h' line='51' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='badblocks_store'>
+        <parameter type-id='5760652d'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='445b0832'>
+        <parameter type-id='8504f260'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eed59d16'>
+        <parameter type-id='8504f260'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='d30bdc51'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/mq-deadline.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='a47d3468' size-in-bits='192' id='56ac7648'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='32406f0a' size-in-bits='384' id='ffbe012f'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <class-decl name='blkcg_gq' is-struct='yes' visibility='default' is-declaration-only='yes' id='9467b854'/>
+      <class-decl name='cgroup_subsys_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='7f3df444'/>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='256' id='e4f16420'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='384' id='e8ef2bd5'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e4a7867c' size-in-bits='infinite' id='6abca080'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='256' id='20b279f0'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='1024' id='7f475abd'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='448' id='346bc576'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8efea9e5' size-in-bits='48' id='ff2536e2'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <typedef-decl name='queue_rq_fn' type-id='32672900' filepath='include/linux/blk-mq.h' line='123' column='1' id='aa8737f6'/>
+      <class-decl name='blk_mq_hw_ctx' size-in-bits='5120' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='15' column='1' id='e0630290'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='87322991' visibility='default' filepath='include/linux/blk-mq.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='run_work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/blk-mq.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='cpumask' type-id='b16b461b' visibility='default' filepath='include/linux/blk-mq.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='next_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-mq.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='next_cpu_batch' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-mq.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='sched_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blk-mq.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='queue' type-id='e7d2a5fd' visibility='default' filepath='include/linux/blk-mq.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='fq' type-id='e118affa' visibility='default' filepath='include/linux/blk-mq.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blk-mq.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ctx_map' type-id='6e051ed1' visibility='default' filepath='include/linux/blk-mq.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='dispatch_from' type-id='9a335022' visibility='default' filepath='include/linux/blk-mq.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='dispatch_busy' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='type' type-id='8efea9e5' visibility='default' filepath='include/linux/blk-mq.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2352'>
+          <var-decl name='nr_ctx' type-id='8efea9e5' visibility='default' filepath='include/linux/blk-mq.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ctxs' type-id='c9c70151' visibility='default' filepath='include/linux/blk-mq.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dispatch_wait_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blk-mq.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='dispatch_wait' type-id='fe794aa9' visibility='default' filepath='include/linux/blk-mq.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='wait_index' type-id='49178f86' visibility='default' filepath='include/linux/blk-mq.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='tags' type-id='0461ecf5' visibility='default' filepath='include/linux/blk-mq.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='sched_tags' type-id='0461ecf5' visibility='default' filepath='include/linux/blk-mq.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='queued' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='run' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='dispatched' type-id='346bc576' visibility='default' filepath='include/linux/blk-mq.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='numa_node' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3616'>
+          <var-decl name='queue_num' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='nr_active' type-id='49178f86' visibility='default' filepath='include/linux/blk-mq.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='cpuhp_dead' type-id='03a4a074' visibility='default' filepath='include/linux/blk-mq.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/blk-mq.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='poll_considered' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='poll_invoked' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='poll_success' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blk-mq.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='sched_debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blk-mq.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='hctx_list' type-id='72f469ec' visibility='default' filepath='include/linux/blk-mq.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='srcu' type-id='6abca080' visibility='default' filepath='include/linux/blk-mq.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='512' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/blk-mq.h' line='16' column='1' id='87322991'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blk-mq.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dispatch' type-id='72f469ec' visibility='default' filepath='include/linux/blk-mq.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_flush_queue' size-in-bits='704' is-struct='yes' visibility='default' filepath='block/blk.h' line='20' column='1' id='1d120222'>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='flush_queue_delayed' type-id='f0981eeb' visibility='default' filepath='block/blk.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='flush_pending_idx' type-id='f0981eeb' visibility='default' filepath='block/blk.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='flush_running_idx' type-id='f0981eeb' visibility='default' filepath='block/blk.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='rq_status' type-id='f4e2facd' visibility='default' filepath='block/blk.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flush_pending_since' type-id='7359adad' visibility='default' filepath='block/blk.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flush_queue' type-id='e4f16420' visibility='default' filepath='block/blk.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flush_data_in_flight' type-id='72f469ec' visibility='default' filepath='block/blk.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='flush_rq' type-id='3dad1a48' visibility='default' filepath='block/blk.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='orig_rq' type-id='3dad1a48' visibility='default' filepath='block/blk.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='key' type-id='47479831' visibility='default' filepath='block/blk.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mq_flush_lock' type-id='fb4018a0' visibility='default' filepath='block/blk.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sbitmap' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/sbitmap.h' line='48' column='1' id='6e051ed1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='depth' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='shift' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='map_nr' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='278a4544' visibility='default' filepath='include/linux/sbitmap.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sbitmap_word' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/sbitmap.h' line='20' column='1' id='28e1d9ae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='depth' type-id='7359adad' visibility='default' filepath='include/linux/sbitmap.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='word' type-id='7359adad' visibility='default' filepath='include/linux/sbitmap.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='cleared' type-id='7359adad' visibility='default' filepath='include/linux/sbitmap.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='swap_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/sbitmap.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_ctx' size-in-bits='2048' is-struct='yes' visibility='default' filepath='block/blk-mq.h' line='18' column='1' id='cde99b3a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='e9e9d685' visibility='default' filepath='block/blk-mq.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='block/blk-mq.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='index_hw' type-id='ff2536e2' visibility='default' filepath='block/blk-mq.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='hctxs' type-id='56ac7648' visibility='default' filepath='block/blk-mq.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rq_dispatched' type-id='f05e8e77' visibility='default' filepath='block/blk-mq.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rq_merged' type-id='7359adad' visibility='default' filepath='block/blk-mq.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='rq_completed' type-id='f05e8e77' visibility='default' filepath='block/blk-mq.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='queue' type-id='e7d2a5fd' visibility='default' filepath='block/blk-mq.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ctxs' type-id='ceead144' visibility='default' filepath='block/blk-mq.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='block/blk-mq.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='512' is-struct='yes' is-anonymous='yes' visibility='default' filepath='block/blk-mq.h' line='19' column='1' id='e9e9d685'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='block/blk-mq.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rq_lists' type-id='e8ef2bd5' visibility='default' filepath='block/blk-mq.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_ctxs' size-in-bits='832' is-struct='yes' visibility='default' filepath='block/blk-mq.h' line='10' column='1' id='70bf757e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='block/blk-mq.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='queue_ctx' type-id='9a335022' visibility='default' filepath='block/blk-mq.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='wait_queue_entry_t' type-id='504855b3' filepath='include/linux/wait.h' line='14' column='1' id='fe794aa9'/>
+      <class-decl name='wait_queue_entry' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/wait.h' line='27' column='1' id='504855b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/wait.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/wait.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='func' type-id='67119c17' visibility='default' filepath='include/linux/wait.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/wait.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='wait_queue_func_t' type-id='3e643710' filepath='include/linux/wait.h' line='16' column='1' id='67119c17'/>
+      <class-decl name='blk_mq_tags' size-in-bits='1408' is-struct='yes' visibility='default' filepath='block/blk-mq-tag.h' line='10' column='1' id='8efd3865'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_tags' type-id='f0981eeb' visibility='default' filepath='block/blk-mq-tag.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr_reserved_tags' type-id='f0981eeb' visibility='default' filepath='block/blk-mq-tag.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='active_queues' type-id='49178f86' visibility='default' filepath='block/blk-mq-tag.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bitmap_tags' type-id='a133315d' visibility='default' filepath='block/blk-mq-tag.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='breserved_tags' type-id='a133315d' visibility='default' filepath='block/blk-mq-tag.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rqs' type-id='79808846' visibility='default' filepath='block/blk-mq-tag.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='static_rqs' type-id='79808846' visibility='default' filepath='block/blk-mq-tag.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='page_list' type-id='72f469ec' visibility='default' filepath='block/blk-mq-tag.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sbitmap_queue' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/sbitmap.h' line='97' column='1' id='a133315d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sb' type-id='6e051ed1' visibility='default' filepath='include/linux/sbitmap.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='alloc_hint' type-id='807869d3' visibility='default' filepath='include/linux/sbitmap.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='wake_batch' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='wake_index' type-id='49178f86' visibility='default' filepath='include/linux/sbitmap.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ws' type-id='cdff193b' visibility='default' filepath='include/linux/sbitmap.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ws_active' type-id='49178f86' visibility='default' filepath='include/linux/sbitmap.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='round_robin' type-id='b50a4934' visibility='default' filepath='include/linux/sbitmap.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='min_shallow_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='141' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sbq_wait_state' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/sbitmap.h' line='76' column='1' id='41425a4b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wait_cnt' type-id='49178f86' visibility='default' filepath='include/linux/sbitmap.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/sbitmap.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_queue_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='118' column='1' id='03a1b8ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rq' type-id='3dad1a48' visibility='default' filepath='include/linux/blk-mq.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last' type-id='b50a4934' visibility='default' filepath='include/linux/blk-mq.h' line='120' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='commit_rqs_fn' type-id='4e7ef9a4' filepath='include/linux/blk-mq.h' line='125' column='1' id='ac1c385d'/>
+      <typedef-decl name='get_budget_fn' type-id='c2be64d1' filepath='include/linux/blk-mq.h' line='126' column='1' id='f47b0345'/>
+      <typedef-decl name='put_budget_fn' type-id='4e7ef9a4' filepath='include/linux/blk-mq.h' line='127' column='1' id='695ed59c'/>
+      <typedef-decl name='timeout_fn' type-id='9b58f3d9' filepath='include/linux/blk-mq.h' line='128' column='1' id='9509b3ac'/>
+      <enum-decl name='blk_eh_timer_return' filepath='include/linux/blkdev.h' line='301' column='1' id='0f4f6276'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BLK_EH_DONE' value='0'/>
+        <enumerator name='BLK_EH_RESET_TIMER' value='1'/>
+      </enum-decl>
+      <typedef-decl name='poll_fn' type-id='8ce1651f' filepath='include/linux/blk-mq.h' line='139' column='1' id='9a083a6e'/>
+      <typedef-decl name='complete_fn' type-id='45e743e9' filepath='include/linux/blk-mq.h' line='142' column='1' id='f7915bc8'/>
+      <typedef-decl name='init_hctx_fn' type-id='02e8b0a1' filepath='include/linux/blk-mq.h' line='129' column='1' id='76c7c9df'/>
+      <typedef-decl name='exit_hctx_fn' type-id='4f1e6b9a' filepath='include/linux/blk-mq.h' line='130' column='1' id='e6f81ea9'/>
+      <typedef-decl name='init_request_fn' type-id='722249f6' filepath='include/linux/blk-mq.h' line='131' column='1' id='4e958389'/>
+      <class-decl name='blk_mq_tag_set' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='93' column='1' id='651086d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map' type-id='ffbe012f' visibility='default' filepath='include/linux/blk-mq.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nr_maps' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='e1962c5d' visibility='default' filepath='include/linux/blk-mq.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='nr_hw_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='queue_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reserved_tags' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='cmd_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='numa_node' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-mq.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blk-mq.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='tags' type-id='c527e30d' visibility='default' filepath='include/linux/blk-mq.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='tag_list_lock' type-id='925167dc' visibility='default' filepath='include/linux/blk-mq.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tag_list' type-id='72f469ec' visibility='default' filepath='include/linux/blk-mq.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_queue_map' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='79' column='1' id='32406f0a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mq_map' type-id='807869d3' visibility='default' filepath='include/linux/blk-mq.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='queue_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='exit_request_fn' type-id='9d05a3e9' filepath='include/linux/blk-mq.h' line='133' column='1' id='d63f4ff3'/>
+      <typedef-decl name='cleanup_rq_fn' type-id='45e743e9' filepath='include/linux/blk-mq.h' line='143' column='1' id='3577ed21'/>
+      <typedef-decl name='busy_fn' type-id='06c81b64' filepath='include/linux/blk-mq.h' line='141' column='1' id='53cc9bd6'/>
+      <typedef-decl name='map_queues_fn' type-id='640838f9' filepath='include/linux/blk-mq.h' line='140' column='1' id='6e9b911c'/>
+      <class-decl name='blk_crypto_key' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/blk-crypto.h' line='52' column='1' id='7b61b7b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crypto_cfg' type-id='cdcb89ef' visibility='default' filepath='include/linux/blk-crypto.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data_unit_size_bits' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-crypto.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-crypto.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='raw' type-id='7f475abd' visibility='default' filepath='include/linux/blk-crypto.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_crypto_config' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/blk-crypto.h' line='33' column='1' id='cdcb89ef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crypto_mode' type-id='e951e732' visibility='default' filepath='include/linux/blk-crypto.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='data_unit_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-crypto.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dun_bytes' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-crypto.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='is_hw_wrapped' type-id='b50a4934' visibility='default' filepath='include/linux/blk-crypto.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='blk_crypto_mode_num' filepath='include/linux/blk-crypto.h' line='11' column='1' id='e951e732'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_INVALID' value='0'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_AES_256_XTS' value='1'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV' value='2'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_ADIANTUM' value='3'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_MAX' value='4'/>
+      </enum-decl>
+      <pointer-type-def type-id='1d120222' size-in-bits='64' id='e118affa'/>
+      <pointer-type-def type-id='cde99b3a' size-in-bits='64' id='9a335022'/>
+      <pointer-type-def type-id='9a335022' size-in-bits='64' id='c9c70151'/>
+      <pointer-type-def type-id='70bf757e' size-in-bits='64' id='ceead144'/>
+      <pointer-type-def type-id='e0630290' size-in-bits='64' id='a47d3468'/>
+      <pointer-type-def type-id='a47d3468' size-in-bits='64' id='3e195538'/>
+      <pointer-type-def type-id='651086d8' size-in-bits='64' id='cc26d160'/>
+      <pointer-type-def type-id='8efd3865' size-in-bits='64' id='0461ecf5'/>
+      <pointer-type-def type-id='0461ecf5' size-in-bits='64' id='c527e30d'/>
+      <pointer-type-def type-id='a3274c4b' size-in-bits='64' id='253d2bfb'/>
+      <pointer-type-def type-id='9467b854' size-in-bits='64' id='1146dea4'/>
+      <pointer-type-def type-id='53cc9bd6' size-in-bits='64' id='65c718a5'/>
+      <pointer-type-def type-id='7f3df444' size-in-bits='64' id='cfff5954'/>
+      <pointer-type-def type-id='3577ed21' size-in-bits='64' id='ac8cd584'/>
+      <pointer-type-def type-id='ac1c385d' size-in-bits='64' id='10b13b44'/>
+      <pointer-type-def type-id='f7915bc8' size-in-bits='64' id='681aaa17'/>
+      <qualified-type-def type-id='7b61b7b4' const='yes' id='72b61a2d'/>
+      <pointer-type-def type-id='72b61a2d' size-in-bits='64' id='9baaf905'/>
+      <qualified-type-def type-id='03a1b8ac' const='yes' id='a2b0f227'/>
+      <pointer-type-def type-id='a2b0f227' size-in-bits='64' id='298d0a77'/>
+      <qualified-type-def type-id='ceee71ca' const='yes' id='6ace3b65'/>
+      <pointer-type-def type-id='6ace3b65' size-in-bits='64' id='71a75d5d'/>
+      <pointer-type-def type-id='e6f81ea9' size-in-bits='64' id='1fb247c2'/>
+      <pointer-type-def type-id='d63f4ff3' size-in-bits='64' id='9a2e43a6'/>
+      <pointer-type-def type-id='f47b0345' size-in-bits='64' id='9712eb54'/>
+      <pointer-type-def type-id='76c7c9df' size-in-bits='64' id='e1f2504c'/>
+      <pointer-type-def type-id='4e958389' size-in-bits='64' id='57e65d80'/>
+      <pointer-type-def type-id='03278979' size-in-bits='64' id='484cd9e5'/>
+      <pointer-type-def type-id='9bc672dd' size-in-bits='64' id='5694e921'/>
+      <pointer-type-def type-id='3cab519e' size-in-bits='64' id='3e643710'/>
+      <pointer-type-def type-id='6e9b911c' size-in-bits='64' id='06a241cf'/>
+      <pointer-type-def type-id='9a083a6e' size-in-bits='64' id='969a6bcd'/>
+      <pointer-type-def type-id='695ed59c' size-in-bits='64' id='247cb56b'/>
+      <pointer-type-def type-id='aa8737f6' size-in-bits='64' id='cf544519'/>
+      <pointer-type-def type-id='28e1d9ae' size-in-bits='64' id='278a4544'/>
+      <pointer-type-def type-id='41425a4b' size-in-bits='64' id='cdff193b'/>
+      <pointer-type-def type-id='9509b3ac' size-in-bits='64' id='23816d7d'/>
+      <pointer-type-def type-id='9f5a4f22' size-in-bits='64' id='9682fd8c'/>
+      <pointer-type-def type-id='419202b8' size-in-bits='64' id='454b8f82'/>
+      <pointer-type-def type-id='96bf0a3b' size-in-bits='64' id='05a372cf'/>
+      <pointer-type-def type-id='504855b3' size-in-bits='64' id='db9d03e3'/>
+      <function-decl name='blk_mq_free_request' mangled-name='blk_mq_free_request' filepath='include/linux/blk-mq.h' line='264' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_free_request'>
+        <parameter type-id='3dad1a48'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_spin_lock_irqsave' mangled-name='_raw_spin_lock_irqsave' filepath='include/linux/spinlock_api_smp.h' line='32' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_lock_irqsave'>
+        <parameter type-id='538ece95'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='_raw_spin_unlock_irqrestore' mangled-name='_raw_spin_unlock_irqrestore' filepath='include/linux/spinlock_api_smp.h' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_unlock_irqrestore'>
+        <parameter type-id='538ece95'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='jiffies_to_msecs' mangled-name='jiffies_to_msecs' filepath='include/linux/jiffies.h' line='289' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='jiffies_to_msecs'>
+        <parameter type-id='7359adad'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='9b58f3d9'>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='0f4f6276'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8ce1651f'>
+        <parameter type-id='a47d3468'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='02e8b0a1'>
+        <parameter type-id='a47d3468'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='640838f9'>
+        <parameter type-id='cc26d160'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='722249f6'>
+        <parameter type-id='cc26d160'/>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='03278979'>
+        <parameter type-id='71a75d5d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9bc672dd'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f8dc9df0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3cab519e'>
+        <parameter type-id='db9d03e3'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='32672900'>
+        <parameter type-id='a47d3468'/>
+        <parameter type-id='298d0a77'/>
+        <return type-id='f4e2facd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c2be64d1'>
+        <parameter type-id='a47d3468'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06c81b64'>
+        <parameter type-id='e7d2a5fd'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9f5a4f22'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4e7ef9a4'>
+        <parameter type-id='a47d3468'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f1e6b9a'>
+        <parameter type-id='a47d3468'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9d05a3e9'>
+        <parameter type-id='cc26d160'/>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='419202b8'>
+        <parameter type-id='1f98c663'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='45e743e9'>
+        <parameter type-id='3dad1a48'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='96bf0a3b'>
+        <parameter type-id='f8dc9df0'/>
+        <parameter type-id='3dad1a48'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='f106d0e5' size-in-bits='64' id='538ece95'/>
+      <pointer-type-def type-id='f3415518' size-in-bits='64' id='f8dc9df0'/>
+      <class-decl name='seq_file' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/seq_file.h' line='16' column='1' id='f3415518'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='26a90f95' visibility='default' filepath='include/linux/seq_file.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/seq_file.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='from' type-id='b59d7dce' visibility='default' filepath='include/linux/seq_file.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='count' type-id='b59d7dce' visibility='default' filepath='include/linux/seq_file.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pad_until' type-id='b59d7dce' visibility='default' filepath='include/linux/seq_file.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='index' type-id='69bf7bee' visibility='default' filepath='include/linux/seq_file.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read_pos' type-id='69bf7bee' visibility='default' filepath='include/linux/seq_file.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='version' type-id='91ce1af9' visibility='default' filepath='include/linux/seq_file.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/seq_file.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='op' type-id='943a1b48' visibility='default' filepath='include/linux/seq_file.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='poll_event' type-id='95e97e5e' visibility='default' filepath='include/linux/seq_file.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='file' type-id='5d92c9e0' visibility='default' filepath='include/linux/seq_file.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/seq_file.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='09ffba8a' size-in-bits='64' id='5d92c9e0'/>
+      <qualified-type-def type-id='b4b8adeb' const='yes' id='09ffba8a'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/partition-generic.c' language='LANG_C89'>
+      <function-decl name='__bdevname' mangled-name='__bdevname' filepath='block/partition-generic.c' line='65' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__bdevname'>
+        <parameter type-id='8504f260' name='dev' filepath='block/partition-generic.c' line='65' column='1'/>
+        <parameter type-id='26a90f95' name='buffer' filepath='block/partition-generic.c' line='65' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='block/scsi_ioctl.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='ea86de29' size-in-bits='64' id='561570b5'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='scsi_ioctl_command' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/scsi/scsi_ioctl.h' line='27' column='1' id='85553493'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='inlen' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_ioctl.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='outlen' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_ioctl.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='5e6516ee' visibility='default' filepath='include/scsi/scsi_ioctl.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='85553493' size-in-bits='64' id='2926d4f3'/>
+      <var-decl name='scsi_command_size_tbl' type-id='561570b5' mangled-name='scsi_command_size_tbl' visibility='default' filepath='block/scsi_ioctl.c' line='31' column='1' elf-symbol-id='scsi_command_size_tbl'/>
+      <function-decl name='sg_scsi_ioctl' mangled-name='sg_scsi_ioctl' filepath='block/scsi_ioctl.c' line='404' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_scsi_ioctl'>
+        <parameter type-id='e7d2a5fd' name='q' filepath='block/scsi_ioctl.c' line='404' column='1'/>
+        <parameter type-id='33c599db' name='disk' filepath='block/scsi_ioctl.c' line='404' column='1'/>
+        <parameter type-id='2665334e' name='mode' filepath='block/scsi_ioctl.c' line='404' column='1'/>
+        <parameter type-id='2926d4f3' name='sic' filepath='block/scsi_ioctl.c' line='405' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_verify_command' mangled-name='blk_verify_command' filepath='block/scsi_ioctl.c' line='196' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_verify_command'>
+        <parameter type-id='cf536864' name='cmd' filepath='block/scsi_ioctl.c' line='196' column='1'/>
+        <parameter type-id='2665334e' name='mode' filepath='block/scsi_ioctl.c' line='196' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='infinite' id='5e6516ee'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='certs/system_keyring.c' language='LANG_C89'>
+      <function-decl name='keyring_alloc' mangled-name='keyring_alloc' filepath='include/linux/key.h' line='385' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='keyring_alloc'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='e8b29774'/>
+        <parameter type-id='bac1227a'/>
+        <parameter type-id='bc33861a'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='92daca01'/>
+        <parameter type-id='204a4632'/>
+        <return type-id='204a4632'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/ablkcipher.c' language='LANG_C89'>
+      <var-decl name='crypto_ablkcipher_type' type-id='3e448446' mangled-name='crypto_ablkcipher_type' visibility='default' filepath='crypto/ablkcipher.c' line='399' column='1' elf-symbol-id='crypto_ablkcipher_type'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/adiantum.c' language='LANG_C89'>
+      <class-decl name='sg_mapping_iter' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/scatterlist.h' line='491' column='1' id='52378ac1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page' type-id='02f11ed4' visibility='default' filepath='include/linux/scatterlist.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr' type-id='eaa32e2f' visibility='default' filepath='include/linux/scatterlist.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='length' type-id='b59d7dce' visibility='default' filepath='include/linux/scatterlist.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='consumed' type-id='b59d7dce' visibility='default' filepath='include/linux/scatterlist.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='piter' type-id='78e3e1d2' visibility='default' filepath='include/linux/scatterlist.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='__offset' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='__remaining' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='__flags' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='502' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sg_page_iter' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/scatterlist.h' line='366' column='1' id='78e3e1d2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sg' type-id='bf3ef905' visibility='default' filepath='include/linux/scatterlist.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sg_pgoffset' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='__nents' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__pg_advance' type-id='95e97e5e' visibility='default' filepath='include/linux/scatterlist.h' line='372' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='52378ac1' size-in-bits='64' id='a462f2f9'/>
+      <function-decl name='wait_for_completion' mangled-name='wait_for_completion' filepath='include/linux/completion.h' line='103' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wait_for_completion'>
+        <parameter type-id='389faaf7'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_shash_setkey' mangled-name='crypto_shash_setkey' filepath='include/crypto/hash.h' line='824' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_shash_setkey'>
+        <parameter type-id='247dd85c'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sg_nents' mangled-name='sg_nents' filepath='include/linux/scatterlist.h' line='268' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_nents'>
+        <parameter type-id='bf3ef905'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sg_miter_start' mangled-name='sg_miter_start' filepath='include/linux/scatterlist.h' line='505' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_miter_start'>
+        <parameter type-id='a462f2f9'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sg_miter_next' mangled-name='sg_miter_next' filepath='include/linux/scatterlist.h' line='508' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_miter_next'>
+        <parameter type-id='a462f2f9'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='sg_miter_stop' mangled-name='sg_miter_stop' filepath='include/linux/scatterlist.h' line='509' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_miter_stop'>
+        <parameter type-id='a462f2f9'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/aead.c' language='LANG_C89'>
+      <class-decl name='aead_alg' size-in-bits='5120' is-struct='yes' visibility='default' filepath='include/crypto/aead.h' line='130' column='1' id='94111b83'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='4598a9be' visibility='default' filepath='include/crypto/aead.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='setauthsize' type-id='d87ec006' visibility='default' filepath='include/crypto/aead.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='encrypt' type-id='a97ec1c4' visibility='default' filepath='include/crypto/aead.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='decrypt' type-id='a97ec1c4' visibility='default' filepath='include/crypto/aead.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='init' type-id='3fb740ac' visibility='default' filepath='include/crypto/aead.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='exit' type-id='465e35b9' visibility='default' filepath='include/crypto/aead.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/aead.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='maxauthsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/aead.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='chunksize' type-id='f0981eeb' visibility='default' filepath='include/crypto/aead.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='514fe525' visibility='default' filepath='include/crypto/aead.h' line='143' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='94111b83' size-in-bits='64' id='e4163de3'/>
+      <pointer-type-def type-id='c0de8daa' size-in-bits='64' id='a97ec1c4'/>
+      <pointer-type-def type-id='e4d537fa' size-in-bits='64' id='3fb740ac'/>
+      <pointer-type-def type-id='44b564e4' size-in-bits='64' id='4598a9be'/>
+      <pointer-type-def type-id='a41d4f0c' size-in-bits='64' id='d87ec006'/>
+      <pointer-type-def type-id='309421a5' size-in-bits='64' id='465e35b9'/>
+      <function-decl name='crypto_register_aead' mangled-name='crypto_register_aead' filepath='crypto/aead.c' line='403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_aead'>
+        <parameter type-id='e4163de3' name='alg' filepath='crypto/aead.c' line='403' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_unregister_aead' mangled-name='crypto_unregister_aead' filepath='crypto/aead.c' line='416' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_aead'>
+        <parameter type-id='e4163de3' name='alg' filepath='crypto/aead.c' line='416' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='c0de8daa'>
+        <parameter type-id='146bc842'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e4d537fa'>
+        <parameter type-id='a585cbc4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='44b564e4'>
+        <parameter type-id='a585cbc4'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a41d4f0c'>
+        <parameter type-id='a585cbc4'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='309421a5'>
+        <parameter type-id='a585cbc4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='850096b4' size-in-bits='64' id='146bc842'/>
+      <pointer-type-def type-id='472efbee' size-in-bits='64' id='a585cbc4'/>
+      <class-decl name='aead_request' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/crypto/aead.h' line='81' column='1' id='850096b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='5e6083f1' visibility='default' filepath='include/crypto/aead.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='assoclen' type-id='f0981eeb' visibility='default' filepath='include/crypto/aead.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='cryptlen' type-id='f0981eeb' visibility='default' filepath='include/crypto/aead.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='iv' type-id='8bff8096' visibility='default' filepath='include/crypto/aead.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='src' type-id='bf3ef905' visibility='default' filepath='include/crypto/aead.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dst' type-id='bf3ef905' visibility='default' filepath='include/crypto/aead.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__ctx' type-id='baf98fd3' visibility='default' filepath='include/crypto/aead.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_aead' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/crypto/aead.h' line='146' column='1' id='472efbee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='authsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/aead.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='reqsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/aead.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/crypto/aead.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/aes_generic.c' language='LANG_C89'>
+      <function-decl name='aes_expandkey' mangled-name='aes_expandkey' filepath='include/crypto/aes.h' line='68' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='aes_expandkey'>
+        <parameter type-id='21370cb4'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/ahash.c' language='LANG_C89'>
+      <class-decl name='ahash_alg' size-in-bits='6144' is-struct='yes' visibility='default' filepath='include/crypto/hash.h' line='128' column='1' id='d0f077d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='update' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='final' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='finup' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='digest' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='export' type-id='77c96f7a' visibility='default' filepath='include/crypto/hash.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='import' type-id='77c96f7a' visibility='default' filepath='include/crypto/hash.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='setkey' type-id='c509dbc2' visibility='default' filepath='include/crypto/hash.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='halg' type-id='a3fe44e4' visibility='default' filepath='include/crypto/hash.h' line='139' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hash_alg_common' size-in-bits='5120' is-struct='yes' visibility='default' filepath='include/crypto/hash.h' line='42' column='1' id='a3fe44e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='digestsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/hash.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='statesize' type-id='f0981eeb' visibility='default' filepath='include/crypto/hash.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='514fe525' visibility='default' filepath='include/crypto/hash.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d0f077d9' size-in-bits='64' id='16144ad1'/>
+      <function-decl name='crypto_register_ahash' mangled-name='crypto_register_ahash' filepath='crypto/ahash.c' line='588' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_ahash'>
+        <parameter type-id='16144ad1' name='alg' filepath='crypto/ahash.c' line='588' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_unregister_ahash' mangled-name='crypto_unregister_ahash' filepath='crypto/ahash.c' line='601' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_ahash'>
+        <parameter type-id='16144ad1' name='alg' filepath='crypto/ahash.c' line='601' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='e501fad6' size-in-bits='64' id='0b5e03e0'/>
+      <pointer-type-def type-id='928ea938' size-in-bits='64' id='77c96f7a'/>
+      <pointer-type-def type-id='c2b07168' size-in-bits='64' id='c509dbc2'/>
+      <function-type size-in-bits='64' id='e501fad6'>
+        <parameter type-id='6f3c82ac'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='928ea938'>
+        <parameter type-id='6f3c82ac'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c2b07168'>
+        <parameter type-id='1351523a'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/algapi.c' language='LANG_C89'>
+      <function-decl name='__crypto_xor' mangled-name='__crypto_xor' filepath='crypto/algapi.c' line='977' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__crypto_xor'>
+        <parameter type-id='8bff8096' name='dst' filepath='crypto/algapi.c' line='977' column='1'/>
+        <parameter type-id='bbaf3419' name='src1' filepath='crypto/algapi.c' line='977' column='1'/>
+        <parameter type-id='bbaf3419' name='src2' filepath='crypto/algapi.c' line='977' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='crypto/algapi.c' line='977' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/algboss.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='78a133c2' size-in-bits='64' id='f41331a9'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='224' id='3faaea70'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='256' id='7f84eb57'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='16' id='0618bc0e'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='256' id='7e67d89d'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='416' id='a0412eab'>
+        <subrange length='52' type-id='7ff19f0f' id='f81e05f0'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='48' id='c60dc9f2'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='96' id='ac151b64'>
+        <subrange length='12' type-id='7ff19f0f' id='84827bdc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='112' id='f01a039e'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <class-decl name='Qdisc' is-struct='yes' visibility='default' is-declaration-only='yes' id='85c22421'/>
+      <class-decl name='btf' is-struct='yes' visibility='default' is-declaration-only='yes' id='dccc7677'/>
+      <class-decl name='btf_type' is-struct='yes' visibility='default' is-declaration-only='yes' id='5f6b1830'/>
+      <class-decl name='cpu_rmap' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/cpu_rmap.h' line='24' column='1' id='e09a048e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/linux/cpu_rmap.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='1dc6a898' visibility='default' filepath='include/linux/cpu_rmap.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='used' type-id='1dc6a898' visibility='default' filepath='include/linux/cpu_rmap.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='obj' type-id='63e171df' visibility='default' filepath='include/linux/cpu_rmap.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='near' type-id='f443352a' visibility='default' filepath='include/linux/cpu_rmap.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_node' is-struct='yes' visibility='default' is-declaration-only='yes' id='6661a699'/>
+      <class-decl name='devlink_port' is-struct='yes' visibility='default' is-declaration-only='yes' id='b62ee7e2'/>
+      <class-decl name='in_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='4234e231'/>
+      <class-decl name='inet6_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='8db8de2b'/>
+      <class-decl name='iw_handler_def' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/iw_handler.h' line='324' column='1' id='9218f3f6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='standard' type-id='f696846b' visibility='default' filepath='include/net/iw_handler.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_standard' type-id='d315442e' visibility='default' filepath='include/net/iw_handler.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='num_private' type-id='d315442e' visibility='default' filepath='include/net/iw_handler.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='num_private_args' type-id='d315442e' visibility='default' filepath='include/net/iw_handler.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='private' type-id='f696846b' visibility='default' filepath='include/net/iw_handler.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private_args' type-id='d841feae' visibility='default' filepath='include/net/iw_handler.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_wireless_stats' type-id='55e2a83c' visibility='default' filepath='include/net/iw_handler.h' line='352' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_public_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/iw_handler.h' line='420' column='1' id='44b3a0ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='spy_data' type-id='96efb615' visibility='default' filepath='include/net/iw_handler.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='libipw' type-id='29244949' visibility='default' filepath='include/net/iw_handler.h' line='424' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mini_Qdisc' is-struct='yes' visibility='default' is-declaration-only='yes' id='b10d582f'/>
+      <class-decl name='ndisc_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/ndisc.h' line='202' column='1' id='88ef330b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_useropt' type-id='c1655339' visibility='default' filepath='include/net/ndisc.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parse_options' type-id='58505a39' visibility='default' filepath='include/net/ndisc.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='update' type-id='0feea528' visibility='default' filepath='include/net/ndisc.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='opt_addr_space' type-id='beb4f24d' visibility='default' filepath='include/net/ndisc.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fill_addr_option' type-id='b78e9a0f' visibility='default' filepath='include/net/ndisc.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='prefix_rcv_add_addr' type-id='1cebc84d' visibility='default' filepath='include/net/ndisc.h' line='216' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neigh_parms' is-struct='yes' visibility='default' is-declaration-only='yes' id='1429eee4'/>
+      <class-decl name='pcpu_dstats' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/net/dummy.c' line='54' column='1' id='45092453'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_packets' type-id='91ce1af9' visibility='default' filepath='drivers/net/dummy.c' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tx_bytes' type-id='91ce1af9' visibility='default' filepath='drivers/net/dummy.c' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='syncp' type-id='e4d85780' visibility='default' filepath='drivers/net/dummy.c' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='phy_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='7c1f8187'/>
+      <class-decl name='rtnl_link_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='6696ef79'/>
+      <class-decl name='sfp_bus' is-struct='yes' visibility='default' is-declaration-only='yes' id='cc52ca8d'/>
+      <class-decl name='tipc_bearer' is-struct='yes' visibility='default' is-declaration-only='yes' id='10ec1ded'/>
+      <class-decl name='udp_tunnel_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='a49fa2a0'/>
+      <class-decl name='wireless_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='3ce3a3e9'/>
+      <class-decl name='wpan_dev' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='326' column='1' id='8ae2fb1d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wpan_phy' type-id='82398c35' visibility='default' filepath='include/net/cfg802154.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iftype' type-id='95e97e5e' visibility='default' filepath='include/net/cfg802154.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/cfg802154.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='netdev' type-id='68a2d05c' visibility='default' filepath='include/net/cfg802154.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='header_ops' type-id='790774ef' visibility='default' filepath='include/net/cfg802154.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lowpan_dev' type-id='68a2d05c' visibility='default' filepath='include/net/cfg802154.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='identifier' type-id='19c2251e' visibility='default' filepath='include/net/cfg802154.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='pan_id' type-id='23119536' visibility='default' filepath='include/net/cfg802154.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='short_addr' type-id='23119536' visibility='default' filepath='include/net/cfg802154.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='extended_addr' type-id='a30e8d1f' visibility='default' filepath='include/net/cfg802154.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bsn' type-id='49178f86' visibility='default' filepath='include/net/cfg802154.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='dsn' type-id='49178f86' visibility='default' filepath='include/net/cfg802154.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='min_be' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='648'>
+          <var-decl name='max_be' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='656'>
+          <var-decl name='csma_retries' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='664'>
+          <var-decl name='frame_retries' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg802154.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='lbt' type-id='b50a4934' visibility='default' filepath='include/net/cfg802154.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='680'>
+          <var-decl name='promiscuous_mode' type-id='b50a4934' visibility='default' filepath='include/net/cfg802154.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='688'>
+          <var-decl name='ackreq' type-id='b50a4934' visibility='default' filepath='include/net/cfg802154.h' line='361' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xdp_umem' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/net/xdp_sock.h' line='44' column='1' id='bbbd8970'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fq' type-id='9fa25a99' visibility='default' filepath='include/net/xdp_sock.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cq' type-id='9fa25a99' visibility='default' filepath='include/net/xdp_sock.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pages' type-id='48e57944' visibility='default' filepath='include/net/xdp_sock.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='chunk_mask' type-id='91ce1af9' visibility='default' filepath='include/net/xdp_sock.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='size' type-id='91ce1af9' visibility='default' filepath='include/net/xdp_sock.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='headroom' type-id='19c2251e' visibility='default' filepath='include/net/xdp_sock.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='chunk_size_nohr' type-id='19c2251e' visibility='default' filepath='include/net/xdp_sock.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='user' type-id='273a7d34' visibility='default' filepath='include/net/xdp_sock.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='address' type-id='7359adad' visibility='default' filepath='include/net/xdp_sock.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='users' type-id='64615833' visibility='default' filepath='include/net/xdp_sock.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/net/xdp_sock.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='pgs' type-id='9f93c9da' visibility='default' filepath='include/net/xdp_sock.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='npgs' type-id='19c2251e' visibility='default' filepath='include/net/xdp_sock.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='queue_id' type-id='1dc6a898' visibility='default' filepath='include/net/xdp_sock.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1072'>
+          <var-decl name='need_wakeup' type-id='f9b06939' visibility='default' filepath='include/net/xdp_sock.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1080'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/xdp_sock.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/net/xdp_sock.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/net/xdp_sock.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fq_reuse' type-id='b925f68b' visibility='default' filepath='include/net/xdp_sock.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='zc' type-id='b50a4934' visibility='default' filepath='include/net/xdp_sock.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='xsk_list_lock' type-id='fb4018a0' visibility='default' filepath='include/net/xdp_sock.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='xsk_list' type-id='72f469ec' visibility='default' filepath='include/net/xdp_sock.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='8ff9530e' size-in-bits='256' id='db1b7234'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='1024' id='ccfd385f'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='384' id='613ff906'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f1e1eb79' size-in-bits='512' id='b5839634'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b65a052d' size-in-bits='infinite' id='11d66d65'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='1dc6a898' size-in-bits='infinite' id='0f300383'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='128' id='0d8415b5'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='160' id='5429fe4a'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='384' id='6aa9aca0'>
+        <subrange length='48' type-id='7ff19f0f' id='8f6d2a81'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='48' id='4cfa781a'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='768' id='d2b016f4'>
+        <subrange length='12' type-id='7ff19f0f' id='84827bdc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='c6675287' size-in-bits='infinite' id='a0955e2b'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='net_device' size-in-bits='18944' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='1816' column='1' id='5a9929ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/netdevice.h' line='1817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name_hlist' type-id='03a4a074' visibility='default' filepath='include/linux/netdevice.h' line='1818' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ifalias' type-id='d81cf24c' visibility='default' filepath='include/linux/netdevice.h' line='1819' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mem_end' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='1824' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mem_start' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='1825' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='base_addr' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='1826' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='1827' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='1835' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dev_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1837' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='napi_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='unreg_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='close_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ptype_all' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ptype_specific' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='adj_list' type-id='19245258' visibility='default' filepath='include/linux/netdevice.h' line='1847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='hw_features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='wanted_features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1851' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='vlan_features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='hw_enc_features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='mpls_features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1854' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='gso_partial_features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='ifindex' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='1857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='group' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='1858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='stats' type-id='a3566137' visibility='default' filepath='include/linux/netdevice.h' line='1860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='rx_dropped' type-id='f22a8abb' visibility='default' filepath='include/linux/netdevice.h' line='1862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='tx_dropped' type-id='f22a8abb' visibility='default' filepath='include/linux/netdevice.h' line='1863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='rx_nohandler' type-id='f22a8abb' visibility='default' filepath='include/linux/netdevice.h' line='1864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='carrier_up_count' type-id='49178f86' visibility='default' filepath='include/linux/netdevice.h' line='1867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3872'>
+          <var-decl name='carrier_down_count' type-id='49178f86' visibility='default' filepath='include/linux/netdevice.h' line='1868' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='wireless_handlers' type-id='3e2bb973' visibility='default' filepath='include/linux/netdevice.h' line='1871' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='wireless_data' type-id='e40f7bda' visibility='default' filepath='include/linux/netdevice.h' line='1872' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='netdev_ops' type-id='a84ec761' visibility='default' filepath='include/linux/netdevice.h' line='1874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='ethtool_ops' type-id='bdf901f8' visibility='default' filepath='include/linux/netdevice.h' line='1875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='ndisc_ops' type-id='a2e418a6' visibility='default' filepath='include/linux/netdevice.h' line='1880' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='header_ops' type-id='2d747e78' visibility='default' filepath='include/linux/netdevice.h' line='1891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4320'>
+          <var-decl name='priv_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='gflags' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1896' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4368'>
+          <var-decl name='padded' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1897' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4384'>
+          <var-decl name='operstate' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1899' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4392'>
+          <var-decl name='link_mode' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4400'>
+          <var-decl name='if_port' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1902' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4408'>
+          <var-decl name='dma' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1903' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='mtu' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4448'>
+          <var-decl name='min_mtu' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='max_mtu' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4512'>
+          <var-decl name='type' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1913' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4528'>
+          <var-decl name='hard_header_len' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='min_header_len' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1915' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4560'>
+          <var-decl name='needed_headroom' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1917' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4576'>
+          <var-decl name='needed_tailroom' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4592'>
+          <var-decl name='perm_addr' type-id='fc872715' visibility='default' filepath='include/linux/netdevice.h' line='1921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4848'>
+          <var-decl name='addr_assign_type' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4856'>
+          <var-decl name='addr_len' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1923' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='upper_level' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1924' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4872'>
+          <var-decl name='lower_level' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1925' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4880'>
+          <var-decl name='neigh_priv_len' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1926' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4896'>
+          <var-decl name='dev_id' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4912'>
+          <var-decl name='dev_port' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='addr_list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/netdevice.h' line='1929' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4960'>
+          <var-decl name='name_assign_type' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4968'>
+          <var-decl name='uc_promisc' type-id='b50a4934' visibility='default' filepath='include/linux/netdevice.h' line='1931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='uc' type-id='44a1ec32' visibility='default' filepath='include/linux/netdevice.h' line='1932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='mc' type-id='44a1ec32' visibility='default' filepath='include/linux/netdevice.h' line='1933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='dev_addrs' type-id='44a1ec32' visibility='default' filepath='include/linux/netdevice.h' line='1934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='queues_kset' type-id='89b70200' visibility='default' filepath='include/linux/netdevice.h' line='1937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='promiscuity' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5664'>
+          <var-decl name='allmulti' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1940' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='tipc_ptr' type-id='eeaf504d' visibility='default' filepath='include/linux/netdevice.h' line='1952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='ip_ptr' type-id='fc6f14a9' visibility='default' filepath='include/linux/netdevice.h' line='1957' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='ip6_ptr' type-id='f026b16b' visibility='default' filepath='include/linux/netdevice.h' line='1961' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='ieee80211_ptr' type-id='63c7e8e1' visibility='default' filepath='include/linux/netdevice.h' line='1965' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='ieee802154_ptr' type-id='165146ad' visibility='default' filepath='include/linux/netdevice.h' line='1966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='dev_addr' type-id='cf536864' visibility='default' filepath='include/linux/netdevice.h' line='1975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='_rx' type-id='31094274' visibility='default' filepath='include/linux/netdevice.h' line='1977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='num_rx_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1978' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='real_num_rx_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='xdp_prog' type-id='bdcee7ae' visibility='default' filepath='include/linux/netdevice.h' line='1981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='gro_flush_timeout' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='1982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='rx_handler' type-id='da1cb816' visibility='default' filepath='include/linux/netdevice.h' line='1983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='rx_handler_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/netdevice.h' line='1984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='miniq_ingress' type-id='b70f37f7' visibility='default' filepath='include/linux/netdevice.h' line='1987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='ingress_queue' type-id='35b28c4f' visibility='default' filepath='include/linux/netdevice.h' line='1989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='nf_hooks_ingress' type-id='39a43b40' visibility='default' filepath='include/linux/netdevice.h' line='1991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='broadcast' type-id='fc872715' visibility='default' filepath='include/linux/netdevice.h' line='1994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='rx_cpu_rmap' type-id='52baee64' visibility='default' filepath='include/linux/netdevice.h' line='1996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='index_hlist' type-id='03a4a074' visibility='default' filepath='include/linux/netdevice.h' line='1998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='_tx' type-id='35b28c4f' visibility='default' filepath='include/linux/netdevice.h' line='2003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='num_tx_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='2004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7264'>
+          <var-decl name='real_num_tx_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='2005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='qdisc' type-id='ee406209' visibility='default' filepath='include/linux/netdevice.h' line='2006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='qdisc_hash' type-id='ccfd385f' visibility='default' filepath='include/linux/netdevice.h' line='2008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='tx_queue_len' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='2010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8416'>
+          <var-decl name='tx_global_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/netdevice.h' line='2011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='watchdog_timeo' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='2012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='xps_cpus_map' type-id='bf237056' visibility='default' filepath='include/linux/netdevice.h' line='2015' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='xps_rxqs_map' type-id='bf237056' visibility='default' filepath='include/linux/netdevice.h' line='2016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='miniq_egress' type-id='b70f37f7' visibility='default' filepath='include/linux/netdevice.h' line='2019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='watchdog_timer' type-id='abe41e67' visibility='default' filepath='include/linux/netdevice.h' line='2023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='pcpu_refcnt' type-id='7292109c' visibility='default' filepath='include/linux/netdevice.h' line='2025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='todo_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='2026' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='link_watch_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='2028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='reg_state' type-id='08f5ca17' visibility='default' filepath='include/linux/netdevice.h' line='2036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9480'>
+          <var-decl name='dismantle' type-id='b50a4934' visibility='default' filepath='include/linux/netdevice.h' line='2038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='rtnl_link_state' type-id='40ed39d2' visibility='default' filepath='include/linux/netdevice.h' line='2043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9504'>
+          <var-decl name='needs_free_netdev' type-id='b50a4934' visibility='default' filepath='include/linux/netdevice.h' line='2045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='priv_destructor' type-id='548eee3a' visibility='default' filepath='include/linux/netdevice.h' line='2046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='nd_net' type-id='c9df1e6c' visibility='default' filepath='include/linux/netdevice.h' line='2052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='' type-id='069363e6' visibility='default' filepath='include/linux/netdevice.h' line='2055' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/netdevice.h' line='2069' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17088'>
+          <var-decl name='sysfs_groups' type-id='db1b7234' visibility='default' filepath='include/linux/netdevice.h' line='2070' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17344'>
+          <var-decl name='sysfs_rx_queue_group' type-id='8ff9530e' visibility='default' filepath='include/linux/netdevice.h' line='2071' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17408'>
+          <var-decl name='rtnl_link_ops' type-id='999c8d90' visibility='default' filepath='include/linux/netdevice.h' line='2073' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17472'>
+          <var-decl name='gso_max_size' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='2077' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17504'>
+          <var-decl name='gso_max_segs' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='2079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17520'>
+          <var-decl name='num_tc' type-id='9b7e9486' visibility='default' filepath='include/linux/netdevice.h' line='2084' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17536'>
+          <var-decl name='tc_to_txq' type-id='b5839634' visibility='default' filepath='include/linux/netdevice.h' line='2085' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18048'>
+          <var-decl name='prio_tc_map' type-id='0d8415b5' visibility='default' filepath='include/linux/netdevice.h' line='2086' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18176'>
+          <var-decl name='phydev' type-id='7efbcaaf' visibility='default' filepath='include/linux/netdevice.h' line='2094' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18240'>
+          <var-decl name='sfp_bus' type-id='6daf6abd' visibility='default' filepath='include/linux/netdevice.h' line='2095' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18304'>
+          <var-decl name='qdisc_tx_busylock_key' type-id='47479831' visibility='default' filepath='include/linux/netdevice.h' line='2096' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18304'>
+          <var-decl name='qdisc_running_key' type-id='47479831' visibility='default' filepath='include/linux/netdevice.h' line='2097' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18304'>
+          <var-decl name='qdisc_xmit_lock_key' type-id='47479831' visibility='default' filepath='include/linux/netdevice.h' line='2098' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18304'>
+          <var-decl name='addr_list_lock_key' type-id='47479831' visibility='default' filepath='include/linux/netdevice.h' line='2099' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18304'>
+          <var-decl name='proto_down' type-id='b50a4934' visibility='default' filepath='include/linux/netdevice.h' line='2100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='wol_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='2101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18368'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18432'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18496'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18560'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18624'>
+          <var-decl name='android_kabi_reserved5' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18688'>
+          <var-decl name='android_kabi_reserved6' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18752'>
+          <var-decl name='android_kabi_reserved7' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18816'>
+          <var-decl name='android_kabi_reserved8' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_ifalias' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='946' column='1' id='ddd212e6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcuhead' type-id='e3d8ce29' visibility='default' filepath='include/linux/netdevice.h' line='947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ifalias' type-id='e84913bd' visibility='default' filepath='include/linux/netdevice.h' line='948' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='1844' column='1' id='19245258'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='upper' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lower' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1846' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='netdev_features_t' type-id='91ce1af9' filepath='include/linux/netdev_features.h' line='12' column='1' id='f9f4b16f'/>
+      <class-decl name='net_device_stats' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='164' column='1' id='a3566137'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_packets' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tx_packets' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx_bytes' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_bytes' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rx_dropped' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tx_dropped' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='multicast' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='collisions' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rx_length_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rx_over_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rx_crc_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rx_frame_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rx_fifo_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rx_missed_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='tx_aborted_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='tx_carrier_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tx_fifo_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tx_heartbeat_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='tx_window_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rx_compressed' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='tx_compressed' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='187' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='net_device_ops' size-in-bits='4736' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='1273' column='1' id='ba44c7d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ndo_init' type-id='2555df59' visibility='default' filepath='include/linux/netdevice.h' line='1274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ndo_uninit' type-id='548eee3a' visibility='default' filepath='include/linux/netdevice.h' line='1275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ndo_open' type-id='2555df59' visibility='default' filepath='include/linux/netdevice.h' line='1276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ndo_stop' type-id='2555df59' visibility='default' filepath='include/linux/netdevice.h' line='1277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ndo_start_xmit' type-id='bd3f3f93' visibility='default' filepath='include/linux/netdevice.h' line='1278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ndo_features_check' type-id='7a0ed254' visibility='default' filepath='include/linux/netdevice.h' line='1280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ndo_select_queue' type-id='de36db77' visibility='default' filepath='include/linux/netdevice.h' line='1283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ndo_change_rx_flags' type-id='c7c94ce1' visibility='default' filepath='include/linux/netdevice.h' line='1286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ndo_set_rx_mode' type-id='548eee3a' visibility='default' filepath='include/linux/netdevice.h' line='1288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ndo_set_mac_address' type-id='f4dd5cc5' visibility='default' filepath='include/linux/netdevice.h' line='1289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ndo_validate_addr' type-id='2555df59' visibility='default' filepath='include/linux/netdevice.h' line='1291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ndo_do_ioctl' type-id='cc325be7' visibility='default' filepath='include/linux/netdevice.h' line='1292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ndo_set_config' type-id='bd2d1eba' visibility='default' filepath='include/linux/netdevice.h' line='1294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ndo_change_mtu' type-id='d6762aa0' visibility='default' filepath='include/linux/netdevice.h' line='1296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ndo_neigh_setup' type-id='5c9f2a92' visibility='default' filepath='include/linux/netdevice.h' line='1298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ndo_tx_timeout' type-id='548eee3a' visibility='default' filepath='include/linux/netdevice.h' line='1300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ndo_get_stats64' type-id='cb4c6db1' visibility='default' filepath='include/linux/netdevice.h' line='1302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='ndo_has_offload_stats' type-id='e95fd96b' visibility='default' filepath='include/linux/netdevice.h' line='1304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ndo_get_offload_stats' type-id='f98694f9' visibility='default' filepath='include/linux/netdevice.h' line='1305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ndo_get_stats' type-id='3217f9ba' visibility='default' filepath='include/linux/netdevice.h' line='1308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ndo_vlan_rx_add_vid' type-id='4fcb4c39' visibility='default' filepath='include/linux/netdevice.h' line='1310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ndo_vlan_rx_kill_vid' type-id='4fcb4c39' visibility='default' filepath='include/linux/netdevice.h' line='1312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='ndo_set_vf_mac' type-id='bae60bcf' visibility='default' filepath='include/linux/netdevice.h' line='1320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ndo_set_vf_vlan' type-id='699131d0' visibility='default' filepath='include/linux/netdevice.h' line='1322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='ndo_set_vf_rate' type-id='7cd466e6' visibility='default' filepath='include/linux/netdevice.h' line='1325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='ndo_set_vf_spoofchk' type-id='0c16aca1' visibility='default' filepath='include/linux/netdevice.h' line='1328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='ndo_set_vf_trust' type-id='0c16aca1' visibility='default' filepath='include/linux/netdevice.h' line='1330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='ndo_get_vf_config' type-id='d22f8cbe' visibility='default' filepath='include/linux/netdevice.h' line='1332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='ndo_set_vf_link_state' type-id='b54cfa0f' visibility='default' filepath='include/linux/netdevice.h' line='1335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='ndo_get_vf_stats' type-id='eee971fd' visibility='default' filepath='include/linux/netdevice.h' line='1337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ndo_set_vf_port' type-id='af60ef81' visibility='default' filepath='include/linux/netdevice.h' line='1341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ndo_get_vf_port' type-id='be55abd8' visibility='default' filepath='include/linux/netdevice.h' line='1344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ndo_set_vf_guid' type-id='0617ad2b' visibility='default' filepath='include/linux/netdevice.h' line='1346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='ndo_set_vf_rss_query_en' type-id='0c16aca1' visibility='default' filepath='include/linux/netdevice.h' line='1349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='ndo_setup_tc' type-id='06b83346' visibility='default' filepath='include/linux/netdevice.h' line='1352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='ndo_rx_flow_steer' type-id='47498e6c' visibility='default' filepath='include/linux/netdevice.h' line='1380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='ndo_add_slave' type-id='031fe454' visibility='default' filepath='include/linux/netdevice.h' line='1385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ndo_del_slave' type-id='ed3019e9' visibility='default' filepath='include/linux/netdevice.h' line='1388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='ndo_fix_features' type-id='4a028f44' visibility='default' filepath='include/linux/netdevice.h' line='1390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='ndo_set_features' type-id='10dae4c5' visibility='default' filepath='include/linux/netdevice.h' line='1392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='ndo_neigh_construct' type-id='92446276' visibility='default' filepath='include/linux/netdevice.h' line='1394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='ndo_neigh_destroy' type-id='11e89fb9' visibility='default' filepath='include/linux/netdevice.h' line='1396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='ndo_fdb_add' type-id='5ffcd66c' visibility='default' filepath='include/linux/netdevice.h' line='1399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='ndo_fdb_del' type-id='e6032f80' visibility='default' filepath='include/linux/netdevice.h' line='1406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='ndo_fdb_dump' type-id='147cd5a7' visibility='default' filepath='include/linux/netdevice.h' line='1411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='ndo_fdb_get' type-id='6537d478' visibility='default' filepath='include/linux/netdevice.h' line='1416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='ndo_bridge_setlink' type-id='50756496' visibility='default' filepath='include/linux/netdevice.h' line='1422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='ndo_bridge_getlink' type-id='e78e01a9' visibility='default' filepath='include/linux/netdevice.h' line='1426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='ndo_bridge_dellink' type-id='1223555b' visibility='default' filepath='include/linux/netdevice.h' line='1431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='ndo_change_carrier' type-id='e36088ec' visibility='default' filepath='include/linux/netdevice.h' line='1434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='ndo_get_phys_port_id' type-id='98252144' visibility='default' filepath='include/linux/netdevice.h' line='1436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='ndo_get_port_parent_id' type-id='98252144' visibility='default' filepath='include/linux/netdevice.h' line='1438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='ndo_get_phys_port_name' type-id='5139dd84' visibility='default' filepath='include/linux/netdevice.h' line='1440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='ndo_udp_tunnel_add' type-id='a43821b9' visibility='default' filepath='include/linux/netdevice.h' line='1442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='ndo_udp_tunnel_del' type-id='a43821b9' visibility='default' filepath='include/linux/netdevice.h' line='1444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='ndo_dfwd_add_station' type-id='e2d7f258' visibility='default' filepath='include/linux/netdevice.h' line='1446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='ndo_dfwd_del_station' type-id='5ac7baf4' visibility='default' filepath='include/linux/netdevice.h' line='1448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='ndo_set_tx_maxrate' type-id='c1e0b02f' visibility='default' filepath='include/linux/netdevice.h' line='1451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='ndo_get_iflink' type-id='4753b592' visibility='default' filepath='include/linux/netdevice.h' line='1454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='ndo_change_proto_down' type-id='e36088ec' visibility='default' filepath='include/linux/netdevice.h' line='1455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='ndo_fill_metadata_dst' type-id='2cc5a575' visibility='default' filepath='include/linux/netdevice.h' line='1457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='ndo_set_rx_headroom' type-id='c7c94ce1' visibility='default' filepath='include/linux/netdevice.h' line='1459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='ndo_bpf' type-id='49f84764' visibility='default' filepath='include/linux/netdevice.h' line='1461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='ndo_xdp_xmit' type-id='0c7d25ff' visibility='default' filepath='include/linux/netdevice.h' line='1463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='ndo_xsk_wakeup' type-id='149f0e1f' visibility='default' filepath='include/linux/netdevice.h' line='1466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='ndo_get_devlink_port' type-id='cd97030f' visibility='default' filepath='include/linux/netdevice.h' line='1468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='android_kabi_reserved5' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='android_kabi_reserved6' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='android_kabi_reserved7' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='android_kabi_reserved8' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1477' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='netdev_tx_t' type-id='e246a80b' filepath='include/linux/netdevice.h' line='115' column='1' id='6849a88c'/>
+      <enum-decl name='netdev_tx' filepath='include/linux/netdevice.h' line='110' column='1' id='e246a80b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='__NETDEV_TX_MIN' value='-2147483648'/>
+        <enumerator name='NETDEV_TX_OK' value='0'/>
+        <enumerator name='NETDEV_TX_BUSY' value='16'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='689' column='1' id='da6f1b1b'>
+        <data-member access='private'>
+          <var-decl name='' type-id='fe3b99ad' visibility='default' filepath='include/linux/skbuff.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rbnode' type-id='2a8a6332' visibility='default' filepath='include/linux/skbuff.h' line='704' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/skbuff.h' line='705' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='690' column='1' id='fe3b99ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prev' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='1285aa7a' visibility='default' filepath='include/linux/skbuff.h' line='695' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='695' column='1' id='1285aa7a'>
+        <data-member access='private'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/linux/skbuff.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dev_scratch' type-id='7359adad' visibility='default' filepath='include/linux/skbuff.h' line='701' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='ifreq' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/if.h' line='231' column='1' id='c1a75286'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ifr_ifrn' type-id='96ef15db' visibility='default' filepath='include/uapi/linux/if.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ifr_ifru' type-id='95fd560f' visibility='default' filepath='include/uapi/linux/if.h' line='252' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__9' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/if.h' line='233' column='1' id='96ef15db'>
+        <data-member access='private'>
+          <var-decl name='ifrn_name' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/if.h' line='235' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__10' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/if.h' line='238' column='1' id='95fd560f'>
+        <data-member access='private'>
+          <var-decl name='ifru_addr' type-id='5221b18a' visibility='default' filepath='include/uapi/linux/if.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_dstaddr' type-id='5221b18a' visibility='default' filepath='include/uapi/linux/if.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_broadaddr' type-id='5221b18a' visibility='default' filepath='include/uapi/linux/if.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_netmask' type-id='5221b18a' visibility='default' filepath='include/uapi/linux/if.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_hwaddr' type-id='5221b18a' visibility='default' filepath='include/uapi/linux/if.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_flags' type-id='a2185560' visibility='default' filepath='include/uapi/linux/if.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_ivalue' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/if.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_mtu' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/if.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_map' type-id='c6fb2ff8' visibility='default' filepath='include/uapi/linux/if.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_slave' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/if.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_newname' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/if.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_data' type-id='eaa32e2f' visibility='default' filepath='include/uapi/linux/if.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ifru_settings' type-id='1cff49be' visibility='default' filepath='include/uapi/linux/if.h' line='251' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='sockaddr' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/socket.h' line='31' column='1' id='5221b18a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sa_family' type-id='376fda66' visibility='default' filepath='include/linux/socket.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sa_data' type-id='f01a039e' visibility='default' filepath='include/linux/socket.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='sa_family_t' type-id='93d679c6' filepath='include/linux/socket.h' line='25' column='1' id='376fda66'/>
+      <typedef-decl name='__kernel_sa_family_t' type-id='8efea9e5' filepath='include/uapi/linux/socket.h' line='10' column='1' id='93d679c6'/>
+      <class-decl name='ifmap' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/if.h' line='194' column='1' id='c6fb2ff8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mem_start' type-id='7359adad' visibility='default' filepath='include/uapi/linux/if.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mem_end' type-id='7359adad' visibility='default' filepath='include/uapi/linux/if.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='base_addr' type-id='8efea9e5' visibility='default' filepath='include/uapi/linux/if.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='irq' type-id='002ac4a6' visibility='default' filepath='include/uapi/linux/if.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='dma' type-id='002ac4a6' visibility='default' filepath='include/uapi/linux/if.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='port' type-id='002ac4a6' visibility='default' filepath='include/uapi/linux/if.h' line='200' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='if_settings' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/if.h' line='205' column='1' id='1cff49be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/if.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/if.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ifs_ifsu' type-id='11418911' visibility='default' filepath='include/uapi/linux/if.h' line='219' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__11' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/if.h' line='208' column='1' id='11418911'>
+        <data-member access='private'>
+          <var-decl name='raw_hdlc' type-id='b3ce99dc' visibility='default' filepath='include/uapi/linux/if.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='cisco' type-id='0c90c619' visibility='default' filepath='include/uapi/linux/if.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fr' type-id='0fd7b97e' visibility='default' filepath='include/uapi/linux/if.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fr_pvc' type-id='fae5f6fe' visibility='default' filepath='include/uapi/linux/if.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fr_pvc_info' type-id='a5896095' visibility='default' filepath='include/uapi/linux/if.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sync' type-id='85d83b09' visibility='default' filepath='include/uapi/linux/if.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='te1' type-id='08fd2ee7' visibility='default' filepath='include/uapi/linux/if.h' line='218' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='raw_hdlc_proto' type-id='f9167bd9' filepath='include/uapi/linux/hdlc/ioctl.h' line='56' column='1' id='a79adfa3'/>
+      <class-decl name='__anonymous_struct__2' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='a79adfa3' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='53' column='1' id='f9167bd9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='encoding' type-id='8efea9e5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='parity' type-id='8efea9e5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='cisco_proto' type-id='a30de527' filepath='include/uapi/linux/hdlc/ioctl.h' line='80' column='1' id='36051b76'/>
+      <class-decl name='__anonymous_struct__3' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='36051b76' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='77' column='1' id='a30de527'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='interval' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='fr_proto' type-id='09d0e305' filepath='include/uapi/linux/hdlc/ioctl.h' line='66' column='1' id='8d64a1ad'/>
+      <class-decl name='__anonymous_struct__4' size-in-bits='192' is-struct='yes' is-anonymous='yes' naming-typedef-id='8d64a1ad' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='58' column='1' id='09d0e305'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='t391' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='t392' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n391' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='n392' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n393' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='lmi' type-id='8efea9e5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='dce' type-id='8efea9e5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='fr_proto_pvc' type-id='e1f2add0' filepath='include/uapi/linux/hdlc/ioctl.h' line='70' column='1' id='a622177d'/>
+      <class-decl name='__anonymous_struct__5' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='a622177d' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='68' column='1' id='e1f2add0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dlci' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='fr_proto_pvc_info' type-id='eccf113e' filepath='include/uapi/linux/hdlc/ioctl.h' line='75' column='1' id='26e73b36'/>
+      <class-decl name='__anonymous_struct__6' size-in-bits='160' is-struct='yes' is-anonymous='yes' naming-typedef-id='26e73b36' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='72' column='1' id='eccf113e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dlci' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='master' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='sync_serial_settings' type-id='60cb7ded' filepath='include/uapi/linux/hdlc/ioctl.h' line='44' column='1' id='4d8b71ac'/>
+      <class-decl name='__anonymous_struct__7' size-in-bits='96' is-struct='yes' is-anonymous='yes' naming-typedef-id='4d8b71ac' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='40' column='1' id='60cb7ded'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clock_rate' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='clock_type' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='loopback' type-id='8efea9e5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='te1_settings' type-id='cf721265' filepath='include/uapi/linux/hdlc/ioctl.h' line='51' column='1' id='f9d018aa'/>
+      <class-decl name='__anonymous_struct__8' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='f9d018aa' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='46' column='1' id='cf721265'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clock_rate' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='clock_type' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='loopback' type-id='8efea9e5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='slot_map' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rtnl_link_stats64' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/uapi/linux/if_link.h' line='44' column='1' id='be643f38'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_packets' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tx_packets' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx_bytes' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_bytes' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_errors' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_errors' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rx_dropped' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tx_dropped' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='multicast' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='collisions' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rx_length_errors' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rx_over_errors' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rx_crc_errors' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rx_frame_errors' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rx_fifo_errors' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rx_missed_errors' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='tx_aborted_errors' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='tx_carrier_errors' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tx_fifo_errors' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tx_heartbeat_errors' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='tx_window_errors' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rx_compressed' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='tx_compressed' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rx_nohandler' type-id='d3130597' visibility='default' filepath='include/uapi/linux/if_link.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ifla_vf_info' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/if_link.h' line='20' column='1' id='8468004b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vf' type-id='3f1a6b60' visibility='default' filepath='include/linux/if_link.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mac' type-id='7e67d89d' visibility='default' filepath='include/linux/if_link.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='vlan' type-id='3f1a6b60' visibility='default' filepath='include/linux/if_link.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='qos' type-id='3f1a6b60' visibility='default' filepath='include/linux/if_link.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='spoofchk' type-id='3f1a6b60' visibility='default' filepath='include/linux/if_link.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='linkstate' type-id='3f1a6b60' visibility='default' filepath='include/linux/if_link.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='min_tx_rate' type-id='3f1a6b60' visibility='default' filepath='include/linux/if_link.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='max_tx_rate' type-id='3f1a6b60' visibility='default' filepath='include/linux/if_link.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='rss_query_en' type-id='3f1a6b60' visibility='default' filepath='include/linux/if_link.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='trusted' type-id='3f1a6b60' visibility='default' filepath='include/linux/if_link.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='vlan_proto' type-id='84a5c3d4' visibility='default' filepath='include/linux/if_link.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ifla_vf_stats' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/if_link.h' line='9' column='1' id='01e6a0f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_packets' type-id='d3130597' visibility='default' filepath='include/linux/if_link.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tx_packets' type-id='d3130597' visibility='default' filepath='include/linux/if_link.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx_bytes' type-id='d3130597' visibility='default' filepath='include/linux/if_link.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_bytes' type-id='d3130597' visibility='default' filepath='include/linux/if_link.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='broadcast' type-id='d3130597' visibility='default' filepath='include/linux/if_link.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='multicast' type-id='d3130597' visibility='default' filepath='include/linux/if_link.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rx_dropped' type-id='d3130597' visibility='default' filepath='include/linux/if_link.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tx_dropped' type-id='d3130597' visibility='default' filepath='include/linux/if_link.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nlattr' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/netlink.h' line='211' column='1' id='89d7cb48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nla_len' type-id='d315442e' visibility='default' filepath='include/uapi/linux/netlink.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='nla_type' type-id='d315442e' visibility='default' filepath='include/uapi/linux/netlink.h' line='213' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='tc_setup_type' filepath='include/linux/netdevice.h' line='857' column='1' id='b3e12f1c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TC_SETUP_QDISC_MQPRIO' value='0'/>
+        <enumerator name='TC_SETUP_CLSU32' value='1'/>
+        <enumerator name='TC_SETUP_CLSFLOWER' value='2'/>
+        <enumerator name='TC_SETUP_CLSMATCHALL' value='3'/>
+        <enumerator name='TC_SETUP_CLSBPF' value='4'/>
+        <enumerator name='TC_SETUP_BLOCK' value='5'/>
+        <enumerator name='TC_SETUP_QDISC_CBS' value='6'/>
+        <enumerator name='TC_SETUP_QDISC_RED' value='7'/>
+        <enumerator name='TC_SETUP_QDISC_PRIO' value='8'/>
+        <enumerator name='TC_SETUP_QDISC_MQ' value='9'/>
+        <enumerator name='TC_SETUP_QDISC_ETF' value='10'/>
+        <enumerator name='TC_SETUP_ROOT_QDISC' value='11'/>
+        <enumerator name='TC_SETUP_QDISC_GRED' value='12'/>
+        <enumerator name='TC_SETUP_QDISC_TAPRIO' value='13'/>
+      </enum-decl>
+      <class-decl name='netlink_ext_ack' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/netlink.h' line='74' column='1' id='852a961e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_msg' type-id='80f4b756' visibility='default' filepath='include/linux/netlink.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bad_attr' type-id='0f2a7ce5' visibility='default' filepath='include/linux/netlink.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cookie' type-id='5429fe4a' visibility='default' filepath='include/linux/netlink.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='cookie_len' type-id='f9b06939' visibility='default' filepath='include/linux/netlink.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ndmsg' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/neighbour.h' line='8' column='1' id='bef19510'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ndm_family' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/neighbour.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='ndm_pad1' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/neighbour.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ndm_pad2' type-id='d315442e' visibility='default' filepath='include/uapi/linux/neighbour.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ndm_ifindex' type-id='3158a266' visibility='default' filepath='include/uapi/linux/neighbour.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ndm_state' type-id='d315442e' visibility='default' filepath='include/uapi/linux/neighbour.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='ndm_flags' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/neighbour.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='ndm_type' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/neighbour.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netlink_callback' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/netlink.h' line='180' column='1' id='d1678a2e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='skb' type-id='0fbf3cfd' visibility='default' filepath='include/linux/netlink.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nlh' type-id='390fbe8f' visibility='default' filepath='include/linux/netlink.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dump' type-id='32a663ca' visibility='default' filepath='include/linux/netlink.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='done' type-id='eca40b6e' visibility='default' filepath='include/linux/netlink.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/netlink.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/linux/netlink.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='extack' type-id='5799dc94' visibility='default' filepath='include/linux/netlink.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='family' type-id='1dc6a898' visibility='default' filepath='include/linux/netlink.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='min_dump_alloc' type-id='1dc6a898' visibility='default' filepath='include/linux/netlink.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='strict_check' type-id='b50a4934' visibility='default' filepath='include/linux/netlink.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='answer_flags' type-id='1dc6a898' visibility='default' filepath='include/linux/netlink.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='prev_seq' type-id='f0981eeb' visibility='default' filepath='include/linux/netlink.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='seq' type-id='f0981eeb' visibility='default' filepath='include/linux/netlink.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='' type-id='4ce2708e' visibility='default' filepath='include/linux/netlink.h' line='195' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nlmsghdr' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/netlink.h' line='44' column='1' id='5b37df4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nlmsg_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/netlink.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nlmsg_type' type-id='d315442e' visibility='default' filepath='include/uapi/linux/netlink.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='nlmsg_flags' type-id='d315442e' visibility='default' filepath='include/uapi/linux/netlink.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nlmsg_seq' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/netlink.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nlmsg_pid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/netlink.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__12' size-in-bits='384' is-anonymous='yes' visibility='default' filepath='include/linux/netlink.h' line='195' column='1' id='4ce2708e'>
+        <data-member access='private'>
+          <var-decl name='ctx' type-id='6aa9aca0' visibility='default' filepath='include/linux/netlink.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='args' type-id='613ff906' visibility='default' filepath='include/linux/netlink.h' line='201' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='netdev_phys_item_id' size-in-bits='264' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='841' column='1' id='14a30316'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='fc872715' visibility='default' filepath='include/linux/netdevice.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='id_len' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='843' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netdev_bpf' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='899' column='1' id='0360a184'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='command' type-id='fa64b30d' visibility='default' filepath='include/linux/netdevice.h' line='900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='dd64c8e8' visibility='default' filepath='include/linux/netdevice.h' line='901' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='bpf_netdev_command' filepath='include/linux/netdevice.h' line='877' column='1' id='fa64b30d'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='XDP_SETUP_PROG' value='0'/>
+        <enumerator name='XDP_SETUP_PROG_HW' value='1'/>
+        <enumerator name='XDP_QUERY_PROG' value='2'/>
+        <enumerator name='XDP_QUERY_PROG_HW' value='3'/>
+        <enumerator name='BPF_OFFLOAD_MAP_ALLOC' value='4'/>
+        <enumerator name='BPF_OFFLOAD_MAP_FREE' value='5'/>
+        <enumerator name='XDP_SETUP_XSK_UMEM' value='6'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__13' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='901' column='1' id='dd64c8e8'>
+        <data-member access='private'>
+          <var-decl name='' type-id='33bba89f' visibility='default' filepath='include/linux/netdevice.h' line='903' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='0ed9a4e9' visibility='default' filepath='include/linux/netdevice.h' line='909' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='f7a2361f' visibility='default' filepath='include/linux/netdevice.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='xsk' type-id='40a847cb' visibility='default' filepath='include/linux/netdevice.h' line='922' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__9' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='903' column='1' id='33bba89f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/netdevice.h' line='904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prog' type-id='bdcee7ae' visibility='default' filepath='include/linux/netdevice.h' line='905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='extack' type-id='5799dc94' visibility='default' filepath='include/linux/netdevice.h' line='906' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__10' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='909' column='1' id='0ed9a4e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog_id' type-id='19c2251e' visibility='default' filepath='include/linux/netdevice.h' line='910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='prog_flags' type-id='19c2251e' visibility='default' filepath='include/linux/netdevice.h' line='912' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__11' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='915' column='1' id='f7a2361f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='offmap' type-id='366d2695' visibility='default' filepath='include/linux/netdevice.h' line='916' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_offloaded_map' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='151' column='1' id='15ac14d5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map' type-id='9e4acc7a' visibility='default' filepath='include/linux/bpf.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='netdev' type-id='68a2d05c' visibility='default' filepath='include/linux/bpf.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='dev_ops' type-id='2ce97450' visibility='default' filepath='include/linux/bpf.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='dev_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='offloads' type-id='72f469ec' visibility='default' filepath='include/linux/bpf.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_map' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='74' column='1' id='9e4acc7a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='3a109e70' visibility='default' filepath='include/linux/bpf.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='inner_map_meta' type-id='00ee50b8' visibility='default' filepath='include/linux/bpf.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='map_type' type-id='da8f27ee' visibility='default' filepath='include/linux/bpf.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='key_size' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='value_size' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='max_entries' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='map_flags' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='spin_lock_off' type-id='95e97e5e' visibility='default' filepath='include/linux/bpf.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='numa_node' type-id='95e97e5e' visibility='default' filepath='include/linux/bpf.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='btf_key_type_id' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='btf_value_type_id' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='btf' type-id='a469220f' visibility='default' filepath='include/linux/bpf.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='memory' type-id='7c6af338' visibility='default' filepath='include/linux/bpf.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='unpriv_array' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='712'>
+          <var-decl name='frozen' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='refcnt' type-id='49178f86' visibility='default' filepath='include/linux/bpf.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='usercnt' type-id='49178f86' visibility='default' filepath='include/linux/bpf.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/bpf.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/bpf.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_map_ops' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='31' column='1' id='90cdb889'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map_alloc_check' type-id='9c946059' visibility='default' filepath='include/linux/bpf.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='map_alloc' type-id='0f1b0147' visibility='default' filepath='include/linux/bpf.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_release' type-id='8bf3cff5' visibility='default' filepath='include/linux/bpf.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='map_free' type-id='cf265ed1' visibility='default' filepath='include/linux/bpf.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='map_get_next_key' type-id='45ef3730' visibility='default' filepath='include/linux/bpf.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='map_release_uref' type-id='cf265ed1' visibility='default' filepath='include/linux/bpf.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='map_lookup_elem_sys_only' type-id='7a66877d' visibility='default' filepath='include/linux/bpf.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='map_lookup_elem' type-id='7a66877d' visibility='default' filepath='include/linux/bpf.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='map_update_elem' type-id='65fcdb9c' visibility='default' filepath='include/linux/bpf.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='map_delete_elem' type-id='bf8c5f5e' visibility='default' filepath='include/linux/bpf.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='map_push_elem' type-id='aad51e56' visibility='default' filepath='include/linux/bpf.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='map_pop_elem' type-id='bf8c5f5e' visibility='default' filepath='include/linux/bpf.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='map_peek_elem' type-id='bf8c5f5e' visibility='default' filepath='include/linux/bpf.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='map_fd_get_ptr' type-id='2a3a4aec' visibility='default' filepath='include/linux/bpf.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='map_fd_put_ptr' type-id='b7f9d8e6' visibility='default' filepath='include/linux/bpf.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='map_gen_lookup' type-id='82ff4739' visibility='default' filepath='include/linux/bpf.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='map_fd_sys_lookup_elem' type-id='99577235' visibility='default' filepath='include/linux/bpf.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='map_seq_show_elem' type-id='81c90e99' visibility='default' filepath='include/linux/bpf.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='map_check_btf' type-id='098d4d92' visibility='default' filepath='include/linux/bpf.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='map_direct_value_addr' type-id='da4ee44b' visibility='default' filepath='include/linux/bpf.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='map_direct_value_meta' type-id='f6a079db' visibility='default' filepath='include/linux/bpf.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__12' size-in-bits='480' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='370' column='1' id='61517c3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='key_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='value_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_entries' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='inner_map_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='numa_node' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='map_name' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/bpf.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='map_ifindex' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='btf_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='btf_key_type_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='btf_value_type_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='386' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__13' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='389' column='1' id='27086fb9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='e4a9eb9a' visibility='default' filepath='include/uapi/linux/bpf.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='396' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__14' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='392' column='1' id='e4a9eb9a'>
+        <data-member access='private'>
+          <var-decl name='value' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='next_key' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='394' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__14' size-in-bits='896' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='399' column='1' id='5bd442ce'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='insn_cnt' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='insns' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='license' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='log_level' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='log_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='log_buf' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='kern_version' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='prog_flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='prog_name' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/bpf.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='prog_ifindex' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='expected_attach_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='prog_btf_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='func_info_rec_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='func_info' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='func_info_cnt' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='line_info_rec_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='line_info' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='line_info_cnt' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='422' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__15' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='425' column='1' id='26ba5712'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pathname' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bpf_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='file_flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='428' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__16' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='431' column='1' id='ecd71c3f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='target_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='attach_bpf_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='attach_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='attach_flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='435' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__17' size-in-bits='512' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='438' column='1' id='220f72e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='retval' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data_size_in' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='data_size_out' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data_in' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data_out' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='repeat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='duration' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ctx_size_in' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='ctx_size_out' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ctx_in' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ctx_out' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='456' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__18' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='459' column='1' id='5ae16468'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='8f526230' visibility='default' filepath='include/uapi/linux/bpf.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='next_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open_flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='467' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__15' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='460' column='1' id='8f526230'>
+        <data-member access='private'>
+          <var-decl name='start_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='prog_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='map_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='btf_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='464' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__19' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='470' column='1' id='cca669dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bpf_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='info_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='info' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='473' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__20' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='476' column='1' id='e4eac598'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='target_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='attach_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='query_flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='attach_flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='prog_ids' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prog_cnt' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='482' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__21' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='485' column='1' id='d316bc32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prog_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='487' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__22' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='490' column='1' id='fb043dae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='btf' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='btf_log_buf' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='btf_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='btf_log_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='btf_log_level' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='495' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__23' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='498' column='1' id='e7d0ed32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='buf_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buf' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prog_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='fd_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='probe_offset' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='probe_addr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='511' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_insn' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='65' column='1' id='8c2bf2b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='code' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/bpf.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='dst_reg' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/bpf.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='src_reg' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/bpf.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='off' type-id='b55def60' visibility='default' filepath='include/uapi/linux/bpf.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='imm' type-id='3158a266' visibility='default' filepath='include/uapi/linux/bpf.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__s16' type-id='a2185560' filepath='include/uapi/asm-generic/int-ll64.h' line='23' column='1' id='b55def60'/>
+      <enum-decl name='bpf_map_type' filepath='include/uapi/linux/bpf.h' line='112' column='1' id='da8f27ee'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BPF_MAP_TYPE_UNSPEC' value='0'/>
+        <enumerator name='BPF_MAP_TYPE_HASH' value='1'/>
+        <enumerator name='BPF_MAP_TYPE_ARRAY' value='2'/>
+        <enumerator name='BPF_MAP_TYPE_PROG_ARRAY' value='3'/>
+        <enumerator name='BPF_MAP_TYPE_PERF_EVENT_ARRAY' value='4'/>
+        <enumerator name='BPF_MAP_TYPE_PERCPU_HASH' value='5'/>
+        <enumerator name='BPF_MAP_TYPE_PERCPU_ARRAY' value='6'/>
+        <enumerator name='BPF_MAP_TYPE_STACK_TRACE' value='7'/>
+        <enumerator name='BPF_MAP_TYPE_CGROUP_ARRAY' value='8'/>
+        <enumerator name='BPF_MAP_TYPE_LRU_HASH' value='9'/>
+        <enumerator name='BPF_MAP_TYPE_LRU_PERCPU_HASH' value='10'/>
+        <enumerator name='BPF_MAP_TYPE_LPM_TRIE' value='11'/>
+        <enumerator name='BPF_MAP_TYPE_ARRAY_OF_MAPS' value='12'/>
+        <enumerator name='BPF_MAP_TYPE_HASH_OF_MAPS' value='13'/>
+        <enumerator name='BPF_MAP_TYPE_DEVMAP' value='14'/>
+        <enumerator name='BPF_MAP_TYPE_SOCKMAP' value='15'/>
+        <enumerator name='BPF_MAP_TYPE_CPUMAP' value='16'/>
+        <enumerator name='BPF_MAP_TYPE_XSKMAP' value='17'/>
+        <enumerator name='BPF_MAP_TYPE_SOCKHASH' value='18'/>
+        <enumerator name='BPF_MAP_TYPE_CGROUP_STORAGE' value='19'/>
+        <enumerator name='BPF_MAP_TYPE_REUSEPORT_SOCKARRAY' value='20'/>
+        <enumerator name='BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE' value='21'/>
+        <enumerator name='BPF_MAP_TYPE_QUEUE' value='22'/>
+        <enumerator name='BPF_MAP_TYPE_STACK' value='23'/>
+        <enumerator name='BPF_MAP_TYPE_SK_STORAGE' value='24'/>
+        <enumerator name='BPF_MAP_TYPE_DEVMAP_HASH' value='25'/>
+      </enum-decl>
+      <class-decl name='bpf_map_memory' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='69' column='1' id='7c6af338'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pages' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='user' type-id='273a7d34' visibility='default' filepath='include/linux/bpf.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_map_dev_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='141' column='1' id='1779ab9d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map_get_next_key' type-id='ef2b6bf5' visibility='default' filepath='include/linux/bpf.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='map_lookup_elem' type-id='ef2b6bf5' visibility='default' filepath='include/linux/bpf.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_update_elem' type-id='bedcc9eb' visibility='default' filepath='include/linux/bpf.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='map_delete_elem' type-id='e24c55c9' visibility='default' filepath='include/linux/bpf.h' line='148' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__24' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='919' column='1' id='40a847cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='umem' type-id='577ede06' visibility='default' filepath='include/linux/netdevice.h' line='920' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='queue_id' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='921' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xdp_frame' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/xdp.h' line='75' column='1' id='21f83f61'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/net/xdp.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='1dc6a898' visibility='default' filepath='include/net/xdp.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='headroom' type-id='1dc6a898' visibility='default' filepath='include/net/xdp.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='metasize' type-id='1dc6a898' visibility='default' filepath='include/net/xdp.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mem' type-id='1182636e' visibility='default' filepath='include/net/xdp.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev_rx' type-id='68a2d05c' visibility='default' filepath='include/net/xdp.h' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xdp_mem_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/xdp.h' line='48' column='1' id='1182636e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='19c2251e' visibility='default' filepath='include/net/xdp.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/net/xdp.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_ops' size-in-bits='3840' is-struct='yes' visibility='default' filepath='include/linux/ethtool.h' line='326' column='1' id='8a3b11ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_drvinfo' type-id='343c05fa' visibility='default' filepath='include/linux/ethtool.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_regs_len' type-id='2555df59' visibility='default' filepath='include/linux/ethtool.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_regs' type-id='345f0501' visibility='default' filepath='include/linux/ethtool.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_wol' type-id='afcbd268' visibility='default' filepath='include/linux/ethtool.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_wol' type-id='5a92dd37' visibility='default' filepath='include/linux/ethtool.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_msglevel' type-id='92d86499' visibility='default' filepath='include/linux/ethtool.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_msglevel' type-id='9038f441' visibility='default' filepath='include/linux/ethtool.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nway_reset' type-id='2555df59' visibility='default' filepath='include/linux/ethtool.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_link' type-id='92d86499' visibility='default' filepath='include/linux/ethtool.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_eeprom_len' type-id='2555df59' visibility='default' filepath='include/linux/ethtool.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_eeprom' type-id='67a2c0c8' visibility='default' filepath='include/linux/ethtool.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set_eeprom' type-id='67a2c0c8' visibility='default' filepath='include/linux/ethtool.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_coalesce' type-id='5a8326dc' visibility='default' filepath='include/linux/ethtool.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_coalesce' type-id='5a8326dc' visibility='default' filepath='include/linux/ethtool.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='get_ringparam' type-id='89b5be7f' visibility='default' filepath='include/linux/ethtool.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_ringparam' type-id='807c842c' visibility='default' filepath='include/linux/ethtool.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_pauseparam' type-id='f45e1d71' visibility='default' filepath='include/linux/ethtool.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='set_pauseparam' type-id='d57a1ee4' visibility='default' filepath='include/linux/ethtool.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='self_test' type-id='4acd4951' visibility='default' filepath='include/linux/ethtool.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='get_strings' type-id='27653c4c' visibility='default' filepath='include/linux/ethtool.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='set_phys_id' type-id='e0c03654' visibility='default' filepath='include/linux/ethtool.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='get_ethtool_stats' type-id='6c781266' visibility='default' filepath='include/linux/ethtool.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='begin' type-id='2555df59' visibility='default' filepath='include/linux/ethtool.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='complete' type-id='548eee3a' visibility='default' filepath='include/linux/ethtool.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='get_priv_flags' type-id='92d86499' visibility='default' filepath='include/linux/ethtool.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='set_priv_flags' type-id='0f8df030' visibility='default' filepath='include/linux/ethtool.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='get_sset_count' type-id='d6762aa0' visibility='default' filepath='include/linux/ethtool.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='get_rxnfc' type-id='d67468b4' visibility='default' filepath='include/linux/ethtool.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='set_rxnfc' type-id='fece2110' visibility='default' filepath='include/linux/ethtool.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='flash_device' type-id='d91e8ea3' visibility='default' filepath='include/linux/ethtool.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='reset' type-id='4814c3f9' visibility='default' filepath='include/linux/ethtool.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='get_rxfh_key_size' type-id='92d86499' visibility='default' filepath='include/linux/ethtool.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='get_rxfh_indir_size' type-id='92d86499' visibility='default' filepath='include/linux/ethtool.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='get_rxfh' type-id='de5dab7b' visibility='default' filepath='include/linux/ethtool.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='set_rxfh' type-id='13680d10' visibility='default' filepath='include/linux/ethtool.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='get_rxfh_context' type-id='64efa47a' visibility='default' filepath='include/linux/ethtool.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='set_rxfh_context' type-id='5f0d472d' visibility='default' filepath='include/linux/ethtool.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='get_channels' type-id='74287ea0' visibility='default' filepath='include/linux/ethtool.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='set_channels' type-id='b60e7255' visibility='default' filepath='include/linux/ethtool.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='get_dump_flag' type-id='351add77' visibility='default' filepath='include/linux/ethtool.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='get_dump_data' type-id='b7ee351b' visibility='default' filepath='include/linux/ethtool.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='set_dump' type-id='351add77' visibility='default' filepath='include/linux/ethtool.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='get_ts_info' type-id='88f4e837' visibility='default' filepath='include/linux/ethtool.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='get_module_info' type-id='20974125' visibility='default' filepath='include/linux/ethtool.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='get_module_eeprom' type-id='67a2c0c8' visibility='default' filepath='include/linux/ethtool.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='get_eee' type-id='d2be5b16' visibility='default' filepath='include/linux/ethtool.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='set_eee' type-id='d2be5b16' visibility='default' filepath='include/linux/ethtool.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='get_tunable' type-id='a3c69469' visibility='default' filepath='include/linux/ethtool.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='set_tunable' type-id='a3c69469' visibility='default' filepath='include/linux/ethtool.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='get_per_queue_coalesce' type-id='6f2bf2e3' visibility='default' filepath='include/linux/ethtool.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='set_per_queue_coalesce' type-id='6f2bf2e3' visibility='default' filepath='include/linux/ethtool.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='get_link_ksettings' type-id='83359c30' visibility='default' filepath='include/linux/ethtool.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='set_link_ksettings' type-id='5a3c102b' visibility='default' filepath='include/linux/ethtool.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='get_fecparam' type-id='bda101d4' visibility='default' filepath='include/linux/ethtool.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='set_fecparam' type-id='bda101d4' visibility='default' filepath='include/linux/ethtool.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='get_ethtool_phy_stats' type-id='6c781266' visibility='default' filepath='include/linux/ethtool.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/ethtool.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/ethtool.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/ethtool.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/ethtool.h' line='412' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_drvinfo' size-in-bits='1568' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='177' column='1' id='b32a1711'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='driver' type-id='16dc656a' visibility='default' filepath='include/uapi/linux/ethtool.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='version' type-id='16dc656a' visibility='default' filepath='include/uapi/linux/ethtool.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='fw_version' type-id='16dc656a' visibility='default' filepath='include/uapi/linux/ethtool.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='bus_info' type-id='16dc656a' visibility='default' filepath='include/uapi/linux/ethtool.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='erom_version' type-id='16dc656a' visibility='default' filepath='include/uapi/linux/ethtool.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='reserved2' type-id='ac151b64' visibility='default' filepath='include/uapi/linux/ethtool.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='n_priv_flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='n_stats' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='testinfo_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='eedump_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='regdump_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='189' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_regs' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='310' column='1' id='a96e1a44'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='data' type-id='167619f6' visibility='default' filepath='include/uapi/linux/ethtool.h' line='314' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_wolinfo' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='203' column='1' id='c3b8a83b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='supported' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wolopts' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='sopass' type-id='c60dc9f2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_eeprom' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='335' column='1' id='7dc7ab8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='magic' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='167619f6' visibility='default' filepath='include/uapi/linux/ethtool.h' line='340' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_coalesce' size-in-bits='736' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='462' column='1' id='d1d61218'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rx_coalesce_usecs' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_max_coalesced_frames' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='rx_coalesce_usecs_irq' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx_max_coalesced_frames_irq' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tx_coalesce_usecs' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_max_coalesced_frames' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='tx_coalesce_usecs_irq' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_max_coalesced_frames_irq' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='stats_block_coalesce_usecs' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='use_adaptive_rx_coalesce' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='use_adaptive_tx_coalesce' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pkt_rate_low' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='rx_coalesce_usecs_low' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rx_max_coalesced_frames_low' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='tx_coalesce_usecs_low' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='tx_max_coalesced_frames_low' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='pkt_rate_high' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rx_coalesce_usecs_high' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='rx_max_coalesced_frames_high' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tx_coalesce_usecs_high' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='tx_max_coalesced_frames_high' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rate_sample_interval' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='485' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_ringparam' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='513' column='1' id='555033d2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rx_max_pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_mini_max_pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='rx_jumbo_max_pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_max_pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rx_pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rx_mini_pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='rx_jumbo_pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='522' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_pauseparam' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='575' column='1' id='e38bdef8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='autoneg' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_pause' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tx_pause' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='579' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_test' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='683' column='1' id='9b087887'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='52cd3f2c' visibility='default' filepath='include/uapi/linux/ethtool.h' line='688' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ethtool_phys_id_state' filepath='include/linux/ethtool.h' line='55' column='1' id='cb317f38'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ETHTOOL_ID_INACTIVE' value='0'/>
+        <enumerator name='ETHTOOL_ID_ACTIVE' value='1'/>
+        <enumerator name='ETHTOOL_ID_ON' value='2'/>
+        <enumerator name='ETHTOOL_ID_OFF' value='3'/>
+      </enum-decl>
+      <class-decl name='ethtool_stats' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='702' column='1' id='c8d63c6e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='n_stats' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='704' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='52cd3f2c' visibility='default' filepath='include/uapi/linux/ethtool.h' line='705' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_rxnfc' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1001' column='1' id='51e825b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flow_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='d3130597' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fs' type-id='a8ce468c' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='' type-id='9567c730' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='rule_locs' type-id='d5016f6f' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1010' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_rx_flow_spec' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='905' column='1' id='a8ce468c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flow_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='h_u' type-id='b79b5da2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='h_ext' type-id='abeda0b3' visibility='default' filepath='include/uapi/linux/ethtool.h' line='908' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='m_u' type-id='b79b5da2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='m_ext' type-id='abeda0b3' visibility='default' filepath='include/uapi/linux/ethtool.h' line='910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ring_cookie' type-id='d3130597' visibility='default' filepath='include/uapi/linux/ethtool.h' line='911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='location' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='912' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='ethtool_flow_union' size-in-bits='416' visibility='default' filepath='include/uapi/linux/ethtool.h' line='852' column='1' id='b79b5da2'>
+        <data-member access='private'>
+          <var-decl name='tcp_ip4_spec' type-id='51bf1175' visibility='default' filepath='include/uapi/linux/ethtool.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='udp_ip4_spec' type-id='51bf1175' visibility='default' filepath='include/uapi/linux/ethtool.h' line='854' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sctp_ip4_spec' type-id='51bf1175' visibility='default' filepath='include/uapi/linux/ethtool.h' line='855' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ah_ip4_spec' type-id='b6a9d1ee' visibility='default' filepath='include/uapi/linux/ethtool.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='esp_ip4_spec' type-id='b6a9d1ee' visibility='default' filepath='include/uapi/linux/ethtool.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='usr_ip4_spec' type-id='3b9817d8' visibility='default' filepath='include/uapi/linux/ethtool.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tcp_ip6_spec' type-id='cdd8eaf7' visibility='default' filepath='include/uapi/linux/ethtool.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='udp_ip6_spec' type-id='cdd8eaf7' visibility='default' filepath='include/uapi/linux/ethtool.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sctp_ip6_spec' type-id='cdd8eaf7' visibility='default' filepath='include/uapi/linux/ethtool.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ah_ip6_spec' type-id='c324ec54' visibility='default' filepath='include/uapi/linux/ethtool.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='esp_ip6_spec' type-id='c324ec54' visibility='default' filepath='include/uapi/linux/ethtool.h' line='863' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='usr_ip6_spec' type-id='fbb12f62' visibility='default' filepath='include/uapi/linux/ethtool.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ether_spec' type-id='1c00b436' visibility='default' filepath='include/uapi/linux/ethtool.h' line='865' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='hdata' type-id='a0412eab' visibility='default' filepath='include/uapi/linux/ethtool.h' line='866' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='ethtool_tcpip4_spec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='758' column='1' id='51bf1175'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ip4src' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ip4dst' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='psrc' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ethtool.h' line='761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='pdst' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ethtool.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tos' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='763' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_ah_espip4_spec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='775' column='1' id='b6a9d1ee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ip4src' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ip4dst' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='spi' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tos' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='779' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_usrip4_spec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='793' column='1' id='3b9817d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ip4src' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ip4dst' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='l4_4_bytes' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tos' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='797' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='ip_ver' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='proto' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='799' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_tcpip6_spec' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='812' column='1' id='cdd8eaf7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ip6src' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/ethtool.h' line='813' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ip6dst' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/ethtool.h' line='814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='psrc' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ethtool.h' line='815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='pdst' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ethtool.h' line='816' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tclass' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='817' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_ah_espip6_spec' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='829' column='1' id='c324ec54'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ip6src' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/ethtool.h' line='830' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ip6dst' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/ethtool.h' line='831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='spi' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='832' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tclass' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='833' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_usrip6_spec' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='844' column='1' id='fbb12f62'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ip6src' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/ethtool.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ip6dst' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/ethtool.h' line='846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='l4_4_bytes' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tclass' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='848' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='l4_proto' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='849' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethhdr' size-in-bits='112' is-struct='yes' visibility='default' filepath='include/uapi/linux/if_ether.h' line='163' column='1' id='1c00b436'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='h_dest' type-id='4cfa781a' visibility='default' filepath='include/uapi/linux/if_ether.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='h_source' type-id='4cfa781a' visibility='default' filepath='include/uapi/linux/if_ether.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='h_proto' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/if_ether.h' line='166' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_flow_ext' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='880' column='1' id='abeda0b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='padding' type-id='0618bc0e' visibility='default' filepath='include/uapi/linux/ethtool.h' line='881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='h_dest' type-id='4cfa781a' visibility='default' filepath='include/uapi/linux/ethtool.h' line='882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vlan_etype' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ethtool.h' line='883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='vlan_tci' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ethtool.h' line='884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='data' type-id='f41331a9' visibility='default' filepath='include/uapi/linux/ethtool.h' line='885' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__16' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1006' column='1' id='9567c730'>
+        <data-member access='private'>
+          <var-decl name='rule_cnt' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1007' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rss_context' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1008' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='ethtool_flash' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1130' column='1' id='1f90162b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='region' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='e3204322' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1133' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_channels' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='541' column='1' id='ed7ee6ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_rx' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_tx' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_other' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_combined' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rx_count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='other_count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='combined_count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='550' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_dump' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1150' column='1' id='2d064c05'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flag' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='167619f6' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1155' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_ts_info' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1230' column='1' id='91f77fa3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='so_timestamping' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phc_index' type-id='3158a266' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tx_types' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_reserved' type-id='3fa05d14' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='rx_filters' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_reserved' type-id='3fa05d14' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1237' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_modinfo' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='382' column='1' id='5e7de2a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='eeprom_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/ethtool.h' line='386' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_eee' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='360' column='1' id='d666fa80'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='supported' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='advertised' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='lp_advertised' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='eee_active' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='eee_enabled' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_lpi_enabled' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='tx_lpi_timer' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/ethtool.h' line='369' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='bpf_attr' size-in-bits='896' visibility='default' filepath='include/uapi/linux/bpf.h' line='369' column='1' id='8eb8eec2'>
+        <data-member access='private'>
+          <var-decl name='' type-id='61517c3b' visibility='default' filepath='include/uapi/linux/bpf.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='27086fb9' visibility='default' filepath='include/uapi/linux/bpf.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='5bd442ce' visibility='default' filepath='include/uapi/linux/bpf.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='26ba5712' visibility='default' filepath='include/uapi/linux/bpf.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='ecd71c3f' visibility='default' filepath='include/uapi/linux/bpf.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='test' type-id='220f72e3' visibility='default' filepath='include/uapi/linux/bpf.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='5ae16468' visibility='default' filepath='include/uapi/linux/bpf.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='info' type-id='cca669dc' visibility='default' filepath='include/uapi/linux/bpf.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='query' type-id='e4eac598' visibility='default' filepath='include/uapi/linux/bpf.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw_tracepoint' type-id='d316bc32' visibility='default' filepath='include/uapi/linux/bpf.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='fb043dae' visibility='default' filepath='include/uapi/linux/bpf.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='task_fd_query' type-id='e7d0ed32' visibility='default' filepath='include/uapi/linux/bpf.h' line='512' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='ethtool_tunable' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='244' column='1' id='89f717fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='baf98fd3' visibility='default' filepath='include/uapi/linux/ethtool.h' line='249' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_link_ksettings' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/ethtool.h' line='109' column='1' id='1e1b3494'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='7aeccae5' visibility='default' filepath='include/linux/ethtool.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='link_modes' type-id='28334c43' visibility='default' filepath='include/linux/ethtool.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_link_settings' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1870' column='1' id='7aeccae5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1871' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='speed' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1872' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='duplex' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1873' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='port' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='phy_address' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='autoneg' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mdio_support' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1877' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='eth_tp_mdix' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1878' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='eth_tp_mdix_ctrl' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='link_mode_masks_nwords' type-id='8af57d41' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1880' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='transceiver' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='reserved1' type-id='c216126b' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reserved' type-id='3faaea70' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='link_mode_masks' type-id='d5016f6f' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1884' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__25' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ethtool.h' line='111' column='1' id='28334c43'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported' type-id='f05e8e77' visibility='default' filepath='include/linux/ethtool.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='advertising' type-id='f05e8e77' visibility='default' filepath='include/linux/ethtool.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lp_advertising' type-id='f05e8e77' visibility='default' filepath='include/linux/ethtool.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_fecparam' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1302' column='1' id='d0cace14'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='active_fec' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fec' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1307' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='header_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='266' column='1' id='f6e7855b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='create' type-id='e82aa0fb' visibility='default' filepath='include/linux/netdevice.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parse' type-id='35b37061' visibility='default' filepath='include/linux/netdevice.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cache' type-id='464a4247' visibility='default' filepath='include/linux/netdevice.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cache_update' type-id='b713d448' visibility='default' filepath='include/linux/netdevice.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='validate' type-id='5a60e638' visibility='default' filepath='include/linux/netdevice.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='parse_protocol' type-id='98c4c95a' visibility='default' filepath='include/linux/netdevice.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='279' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hh_cache' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='240' column='1' id='0db936dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hh_len' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='hh_lock' type-id='e6cd5ecf' visibility='default' filepath='include/linux/netdevice.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hh_data' type-id='d2b016f4' visibility='default' filepath='include/linux/netdevice.h' line='250' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netdev_hw_addr_list' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='220' column='1' id='44a1ec32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='222' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netdev_rx_queue' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='752' column='1' id='f12ac4ae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rps_map' type-id='f30dbff5' visibility='default' filepath='include/linux/netdevice.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rps_flow_table' type-id='deff2378' visibility='default' filepath='include/linux/netdevice.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/netdevice.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/linux/netdevice.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='xdp_rxq' type-id='eb0d6f26' visibility='default' filepath='include/linux/netdevice.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='umem' type-id='577ede06' visibility='default' filepath='include/linux/netdevice.h' line='761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='767' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rps_map' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='678' column='1' id='6f8d5f55'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/netdevice.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cpus' type-id='0f300383' visibility='default' filepath='include/linux/netdevice.h' line='681' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rps_dev_flow_table' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='700' column='1' id='aca51d4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/netdevice.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flows' type-id='11d66d65' visibility='default' filepath='include/linux/netdevice.h' line='703' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rps_dev_flow' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='690' column='1' id='b65a052d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='filter' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='last_qtail' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='693' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xdp_rxq_info' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/xdp.h' line='59' column='1' id='eb0d6f26'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/net/xdp.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='queue_index' type-id='19c2251e' visibility='default' filepath='include/net/xdp.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reg_state' type-id='19c2251e' visibility='default' filepath='include/net/xdp.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mem' type-id='1182636e' visibility='default' filepath='include/net/xdp.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='rx_handler_func_t' type-id='77c9a241' filepath='include/linux/netdevice.h' line='432' column='1' id='9193647b'/>
+      <typedef-decl name='rx_handler_result_t' type-id='aee6711b' filepath='include/linux/netdevice.h' line='431' column='1' id='a110acfc'/>
+      <enum-decl name='rx_handler_result' filepath='include/linux/netdevice.h' line='425' column='1' id='aee6711b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RX_HANDLER_CONSUMED' value='0'/>
+        <enumerator name='RX_HANDLER_ANOTHER' value='1'/>
+        <enumerator name='RX_HANDLER_EXACT' value='2'/>
+        <enumerator name='RX_HANDLER_PASS' value='3'/>
+      </enum-decl>
+      <class-decl name='netdev_queue' size-in-bits='3584' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='600' column='1' id='49a7c5a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/linux/netdevice.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='qdisc' type-id='ee406209' visibility='default' filepath='include/linux/netdevice.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='qdisc_sleeping' type-id='ee406209' visibility='default' filepath='include/linux/netdevice.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/netdevice.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='tx_maxrate' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='trans_timeout' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sb_dev' type-id='68a2d05c' visibility='default' filepath='include/linux/netdevice.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='umem' type-id='577ede06' visibility='default' filepath='include/linux/netdevice.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='_xmit_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/netdevice.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='xmit_lock_owner' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='trans_start' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dql' type-id='471cb386' visibility='default' filepath='include/linux/netdevice.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='644' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dql' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='41' column='1' id='471cb386'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_queued' type-id='f0981eeb' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='adj_limit' type-id='f0981eeb' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last_obj_cnt' type-id='f0981eeb' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='limit' type-id='f0981eeb' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='num_completed' type-id='f0981eeb' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='prev_ovlimit' type-id='f0981eeb' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='prev_num_queued' type-id='f0981eeb' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='prev_last_obj_cnt' type-id='f0981eeb' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='lowest_slack' type-id='f0981eeb' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='slack_start_time' type-id='7359adad' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='max_limit' type-id='f0981eeb' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='min_limit' type-id='f0981eeb' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='slack_hold_time' type-id='f0981eeb' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xps_dev_maps' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='798' column='1' id='4edc4180'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/netdevice.h' line='799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attr_map' type-id='a0955e2b' visibility='default' filepath='include/linux/netdevice.h' line='800' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xps_map' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='785' column='1' id='279bdcdf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='alloc_len' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/netdevice.h' line='788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='queues' type-id='0f300383' visibility='default' filepath='include/linux/netdevice.h' line='789' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/linux/netdevice.h' line='2030' column='1' id='08f5ca17'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NETREG_UNINITIALIZED' value='0'/>
+        <enumerator name='NETREG_REGISTERED' value='1'/>
+        <enumerator name='NETREG_UNREGISTERING' value='2'/>
+        <enumerator name='NETREG_UNREGISTERED' value='3'/>
+        <enumerator name='NETREG_RELEASED' value='4'/>
+        <enumerator name='NETREG_DUMMY' value='5'/>
+      </enum-decl>
+      <enum-decl name='__anonymous_enum__1' is-anonymous='yes' filepath='include/linux/netdevice.h' line='2040' column='1' id='40ed39d2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RTNL_LINK_INITIALIZED' value='0'/>
+        <enumerator name='RTNL_LINK_INITIALIZING' value='1'/>
+      </enum-decl>
+      <typedef-decl name='possible_net_t' type-id='0a0aec0a' filepath='include/net/net_namespace.h' line='308' column='1' id='c9df1e6c'/>
+      <class-decl name='__anonymous_struct__26' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='c9df1e6c' visibility='default' filepath='include/net/net_namespace.h' line='304' column='1' id='0a0aec0a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='net' type-id='a2bff677' visibility='default' filepath='include/net/net_namespace.h' line='306' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__17' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='2055' column='1' id='069363e6'>
+        <data-member access='private'>
+          <var-decl name='ml_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/netdevice.h' line='2056' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='lstats' type-id='a42934eb' visibility='default' filepath='include/linux/netdevice.h' line='2057' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tstats' type-id='90cd86e5' visibility='default' filepath='include/linux/netdevice.h' line='2058' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dstats' type-id='f59f5033' visibility='default' filepath='include/linux/netdevice.h' line='2059' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='pcpu_lstats' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='2445' column='1' id='b71b307b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='packets' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bytes' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='syncp' type-id='e4d85780' visibility='default' filepath='include/linux/netdevice.h' line='2448' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pcpu_sw_netstats' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='2437' column='1' id='101eeec5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_packets' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_bytes' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_packets' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_bytes' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='syncp' type-id='e4d85780' visibility='default' filepath='include/linux/netdevice.h' line='2442' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='s16' type-id='b55def60' filepath='include/asm-generic/int-ll64.h' line='18' column='1' id='9b7e9486'/>
+      <class-decl name='netdev_tc_txq' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='814' column='1' id='f1e1eb79'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='offset' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='816' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='85c22421' size-in-bits='64' id='ee406209'/>
+      <pointer-type-def type-id='8eb8eec2' size-in-bits='64' id='231422bf'/>
+      <pointer-type-def type-id='8c2bf2b2' size-in-bits='64' id='7fe42640'/>
+      <pointer-type-def type-id='9e4acc7a' size-in-bits='64' id='00ee50b8'/>
+      <pointer-type-def type-id='732df9b3' size-in-bits='64' id='0f1b0147'/>
+      <pointer-type-def type-id='15ac14d5' size-in-bits='64' id='366d2695'/>
+      <pointer-type-def type-id='dccc7677' size-in-bits='64' id='a469220f'/>
+      <pointer-type-def type-id='36051b76' size-in-bits='64' id='0c90c619'/>
+      <qualified-type-def type-id='9e4acc7a' const='yes' id='9fda12c1'/>
+      <pointer-type-def type-id='9fda12c1' size-in-bits='64' id='8f4bc7f1'/>
+      <qualified-type-def type-id='1779ab9d' const='yes' id='a4feac5a'/>
+      <pointer-type-def type-id='a4feac5a' size-in-bits='64' id='2ce97450'/>
+      <qualified-type-def type-id='90cdb889' const='yes' id='4e65adfa'/>
+      <pointer-type-def type-id='4e65adfa' size-in-bits='64' id='3a109e70'/>
+      <qualified-type-def type-id='dccc7677' const='yes' id='f3cb01e4'/>
+      <pointer-type-def type-id='f3cb01e4' size-in-bits='64' id='9693d74a'/>
+      <qualified-type-def type-id='5f6b1830' const='yes' id='82a21fa9'/>
+      <pointer-type-def type-id='82a21fa9' size-in-bits='64' id='28379b39'/>
+      <qualified-type-def type-id='1e1b3494' const='yes' id='d09d6361'/>
+      <pointer-type-def type-id='d09d6361' size-in-bits='64' id='b2c34f11'/>
+      <qualified-type-def type-id='8a3b11ed' const='yes' id='b56a1102'/>
+      <pointer-type-def type-id='b56a1102' size-in-bits='64' id='bdf901f8'/>
+      <qualified-type-def type-id='89f717fe' const='yes' id='fe943e01'/>
+      <pointer-type-def type-id='fe943e01' size-in-bits='64' id='ee5dddb1'/>
+      <qualified-type-def type-id='f6e7855b' const='yes' id='60407282'/>
+      <pointer-type-def type-id='60407282' size-in-bits='64' id='2d747e78'/>
+      <qualified-type-def type-id='9218f3f6' const='yes' id='12cfd48b'/>
+      <pointer-type-def type-id='12cfd48b' size-in-bits='64' id='3e2bb973'/>
+      <qualified-type-def type-id='88ef330b' const='yes' id='99cf04a8'/>
+      <pointer-type-def type-id='99cf04a8' size-in-bits='64' id='a2e418a6'/>
+      <qualified-type-def type-id='da0e76a0' const='yes' id='e5d19dc7'/>
+      <pointer-type-def type-id='e5d19dc7' size-in-bits='64' id='b5fb9c17'/>
+      <qualified-type-def type-id='5a9929ec' const='yes' id='1d8cf482'/>
+      <pointer-type-def type-id='1d8cf482' size-in-bits='64' id='2ce52478'/>
+      <qualified-type-def type-id='ba44c7d8' const='yes' id='68c47b91'/>
+      <pointer-type-def type-id='68c47b91' size-in-bits='64' id='a84ec761'/>
+      <qualified-type-def type-id='89d7cb48' const='yes' id='fc72728d'/>
+      <pointer-type-def type-id='fc72728d' size-in-bits='64' id='0f2a7ce5'/>
+      <qualified-type-def type-id='5b37df4a' const='yes' id='754a5cbf'/>
+      <pointer-type-def type-id='754a5cbf' size-in-bits='64' id='390fbe8f'/>
+      <qualified-type-def type-id='6696ef79' const='yes' id='ab23f61a'/>
+      <pointer-type-def type-id='ab23f61a' size-in-bits='64' id='999c8d90'/>
+      <qualified-type-def type-id='ae8bfcdd' const='yes' id='599ce02a'/>
+      <pointer-type-def type-id='599ce02a' size-in-bits='64' id='11f4a000'/>
+      <pointer-type-def type-id='e09a048e' size-in-bits='64' id='52baee64'/>
+      <pointer-type-def type-id='ddd212e6' size-in-bits='64' id='d81cf24c'/>
+      <pointer-type-def type-id='6661a699' size-in-bits='64' id='9a537bbf'/>
+      <pointer-type-def type-id='b62ee7e2' size-in-bits='64' id='f41a0030'/>
+      <pointer-type-def type-id='c435a5bb' size-in-bits='64' id='cd97030f'/>
+      <pointer-type-def type-id='ed7ee6ab' size-in-bits='64' id='7f9b4c1b'/>
+      <pointer-type-def type-id='d1d61218' size-in-bits='64' id='6db6a1be'/>
+      <pointer-type-def type-id='b32a1711' size-in-bits='64' id='8c4c4029'/>
+      <pointer-type-def type-id='2d064c05' size-in-bits='64' id='6e313ad5'/>
+      <pointer-type-def type-id='d666fa80' size-in-bits='64' id='eced47f6'/>
+      <pointer-type-def type-id='7dc7ab8f' size-in-bits='64' id='02557527'/>
+      <pointer-type-def type-id='d0cace14' size-in-bits='64' id='a99bd7d2'/>
+      <pointer-type-def type-id='1f90162b' size-in-bits='64' id='ddd0a58b'/>
+      <pointer-type-def type-id='1e1b3494' size-in-bits='64' id='70de91e2'/>
+      <pointer-type-def type-id='5e7de2a9' size-in-bits='64' id='b1e844c1'/>
+      <pointer-type-def type-id='e38bdef8' size-in-bits='64' id='ab38066e'/>
+      <pointer-type-def type-id='a96e1a44' size-in-bits='64' id='31f59912'/>
+      <pointer-type-def type-id='555033d2' size-in-bits='64' id='2bf5f3d0'/>
+      <pointer-type-def type-id='51e825b6' size-in-bits='64' id='a079e5cc'/>
+      <pointer-type-def type-id='c8d63c6e' size-in-bits='64' id='33e1dfe4'/>
+      <pointer-type-def type-id='9b087887' size-in-bits='64' id='469e947f'/>
+      <pointer-type-def type-id='91f77fa3' size-in-bits='64' id='fa058983'/>
+      <pointer-type-def type-id='c3b8a83b' size-in-bits='64' id='fde1bbcb'/>
+      <pointer-type-def type-id='8d64a1ad' size-in-bits='64' id='0fd7b97e'/>
+      <pointer-type-def type-id='a622177d' size-in-bits='64' id='fae5f6fe'/>
+      <pointer-type-def type-id='26e73b36' size-in-bits='64' id='a5896095'/>
+      <pointer-type-def type-id='0db936dc' size-in-bits='64' id='236f06da'/>
+      <pointer-type-def type-id='8468004b' size-in-bits='64' id='691d1b3b'/>
+      <pointer-type-def type-id='01e6a0f2' size-in-bits='64' id='c0a50b50'/>
+      <pointer-type-def type-id='c6fb2ff8' size-in-bits='64' id='cf0da35e'/>
+      <pointer-type-def type-id='c1a75286' size-in-bits='64' id='d494b97c'/>
+      <pointer-type-def type-id='4234e231' size-in-bits='64' id='fc6f14a9'/>
+      <pointer-type-def type-id='8db8de2b' size-in-bits='64' id='f026b16b'/>
+      <pointer-type-def type-id='f8a93d65' size-in-bits='64' id='9c946059'/>
+      <pointer-type-def type-id='5abe74b4' size-in-bits='64' id='bf8c5f5e'/>
+      <pointer-type-def type-id='73e35fcc' size-in-bits='64' id='aad51e56'/>
+      <pointer-type-def type-id='58407416' size-in-bits='64' id='45ef3730'/>
+      <pointer-type-def type-id='8f138f6a' size-in-bits='64' id='65fcdb9c'/>
+      <pointer-type-def type-id='081241b5' size-in-bits='64' id='e24c55c9'/>
+      <pointer-type-def type-id='3c2554e1' size-in-bits='64' id='ef2b6bf5'/>
+      <pointer-type-def type-id='1b0dcbb7' size-in-bits='64' id='bedcc9eb'/>
+      <pointer-type-def type-id='1c674f90' size-in-bits='64' id='098d4d92'/>
+      <pointer-type-def type-id='d1043097' size-in-bits='64' id='f6a079db'/>
+      <pointer-type-def type-id='9ebac747' size-in-bits='64' id='da4ee44b'/>
+      <pointer-type-def type-id='25126efb' size-in-bits='64' id='464a4247'/>
+      <pointer-type-def type-id='8e4f6a60' size-in-bits='64' id='4753b592'/>
+      <pointer-type-def type-id='b29581c5' size-in-bits='64' id='35b37061'/>
+      <pointer-type-def type-id='31b74d85' size-in-bits='64' id='f98694f9'/>
+      <pointer-type-def type-id='960bee7e' size-in-bits='64' id='e6032f80'/>
+      <pointer-type-def type-id='458c097a' size-in-bits='64' id='5ffcd66c'/>
+      <pointer-type-def type-id='80343f75' size-in-bits='64' id='2555df59'/>
+      <pointer-type-def type-id='8087fc9a' size-in-bits='64' id='5139dd84'/>
+      <pointer-type-def type-id='cd2b672f' size-in-bits='64' id='5a3c102b'/>
+      <pointer-type-def type-id='6557550d' size-in-bits='64' id='a3c69469'/>
+      <pointer-type-def type-id='49d94952' size-in-bits='64' id='47498e6c'/>
+      <pointer-type-def type-id='f4398a06' size-in-bits='64' id='13680d10'/>
+      <pointer-type-def type-id='538b7809' size-in-bits='64' id='5f0d472d'/>
+      <pointer-type-def type-id='ecb90832' size-in-bits='64' id='e0c03654'/>
+      <pointer-type-def type-id='35b31004' size-in-bits='64' id='06b83346'/>
+      <pointer-type-def type-id='9e33bce1' size-in-bits='64' id='b60e7255'/>
+      <pointer-type-def type-id='c15e0ad2' size-in-bits='64' id='5a8326dc'/>
+      <pointer-type-def type-id='35c1cbe3' size-in-bits='64' id='351add77'/>
+      <pointer-type-def type-id='21e2c677' size-in-bits='64' id='b7ee351b'/>
+      <pointer-type-def type-id='4cef7edc' size-in-bits='64' id='d2be5b16'/>
+      <pointer-type-def type-id='a80d6b6e' size-in-bits='64' id='67a2c0c8'/>
+      <pointer-type-def type-id='d2df6ce2' size-in-bits='64' id='bda101d4'/>
+      <pointer-type-def type-id='c6751b87' size-in-bits='64' id='d91e8ea3'/>
+      <pointer-type-def type-id='f6dcb63e' size-in-bits='64' id='83359c30'/>
+      <pointer-type-def type-id='62f14019' size-in-bits='64' id='20974125'/>
+      <pointer-type-def type-id='205059e2' size-in-bits='64' id='d57a1ee4'/>
+      <pointer-type-def type-id='a82c7e12' size-in-bits='64' id='807c842c'/>
+      <pointer-type-def type-id='8427fe66' size-in-bits='64' id='fece2110'/>
+      <pointer-type-def type-id='c0de0cb2' size-in-bits='64' id='d67468b4'/>
+      <pointer-type-def type-id='965023eb' size-in-bits='64' id='88f4e837'/>
+      <pointer-type-def type-id='89e92d83' size-in-bits='64' id='5a92dd37'/>
+      <pointer-type-def type-id='3b28e6a8' size-in-bits='64' id='bd2d1eba'/>
+      <pointer-type-def type-id='858c6d7b' size-in-bits='64' id='cc325be7'/>
+      <pointer-type-def type-id='0b0288d6' size-in-bits='64' id='d6762aa0'/>
+      <pointer-type-def type-id='e87d68d4' size-in-bits='64' id='d22f8cbe'/>
+      <pointer-type-def type-id='782b4219' size-in-bits='64' id='eee971fd'/>
+      <pointer-type-def type-id='32ee1dcb' size-in-bits='64' id='b54cfa0f'/>
+      <pointer-type-def type-id='2976f714' size-in-bits='64' id='7cd466e6'/>
+      <pointer-type-def type-id='4c110a85' size-in-bits='64' id='af60ef81'/>
+      <pointer-type-def type-id='0ccb1a26' size-in-bits='64' id='be55abd8'/>
+      <pointer-type-def type-id='50801c15' size-in-bits='64' id='0c16aca1'/>
+      <pointer-type-def type-id='c8915c86' size-in-bits='64' id='699131d0'/>
+      <pointer-type-def type-id='61b18a3b' size-in-bits='64' id='c1e0b02f'/>
+      <pointer-type-def type-id='9b7dfd9f' size-in-bits='64' id='0617ad2b'/>
+      <pointer-type-def type-id='cb28c283' size-in-bits='64' id='bae60bcf'/>
+      <pointer-type-def type-id='65655453' size-in-bits='64' id='0c7d25ff'/>
+      <pointer-type-def type-id='337862e8' size-in-bits='64' id='5c9f2a92'/>
+      <pointer-type-def type-id='18359f44' size-in-bits='64' id='92446276'/>
+      <pointer-type-def type-id='cbbca4c5' size-in-bits='64' id='ed3019e9'/>
+      <pointer-type-def type-id='c0ac60c2' size-in-bits='64' id='031fe454'/>
+      <pointer-type-def type-id='d8da8ad2' size-in-bits='64' id='49f84764'/>
+      <pointer-type-def type-id='e3a1e7d2' size-in-bits='64' id='98252144'/>
+      <pointer-type-def type-id='594ef19f' size-in-bits='64' id='1223555b'/>
+      <pointer-type-def type-id='29cf1864' size-in-bits='64' id='50756496'/>
+      <pointer-type-def type-id='455e2261' size-in-bits='64' id='2cc5a575'/>
+      <pointer-type-def type-id='45639e3d' size-in-bits='64' id='4fcb4c39'/>
+      <pointer-type-def type-id='c4e36342' size-in-bits='64' id='e36088ec'/>
+      <pointer-type-def type-id='b4cb0241' size-in-bits='64' id='10dae4c5'/>
+      <pointer-type-def type-id='9803cec6' size-in-bits='64' id='0f8df030'/>
+      <pointer-type-def type-id='924e6a9f' size-in-bits='64' id='6f2bf2e3'/>
+      <pointer-type-def type-id='34072a4b' size-in-bits='64' id='149f0e1f'/>
+      <pointer-type-def type-id='81c3d1f5' size-in-bits='64' id='4814c3f9'/>
+      <pointer-type-def type-id='77fe651f' size-in-bits='64' id='de5dab7b'/>
+      <pointer-type-def type-id='da556df0' size-in-bits='64' id='64efa47a'/>
+      <pointer-type-def type-id='85832c21' size-in-bits='64' id='f4dd5cc5'/>
+      <pointer-type-def type-id='9035443c' size-in-bits='64' id='eca40b6e'/>
+      <pointer-type-def type-id='930eb0f7' size-in-bits='64' id='e82aa0fb'/>
+      <pointer-type-def type-id='6386f568' size-in-bits='64' id='32a663ca'/>
+      <pointer-type-def type-id='b7b43e53' size-in-bits='64' id='147cd5a7'/>
+      <pointer-type-def type-id='811eff86' size-in-bits='64' id='6537d478'/>
+      <pointer-type-def type-id='7e5bb1dd' size-in-bits='64' id='e78e01a9'/>
+      <pointer-type-def type-id='44b3a0ac' size-in-bits='64' id='e40f7bda'/>
+      <pointer-type-def type-id='b10d582f' size-in-bits='64' id='b70f37f7'/>
+      <pointer-type-def type-id='bef19510' size-in-bits='64' id='ccc13476'/>
+      <pointer-type-def type-id='1429eee4' size-in-bits='64' id='affe0fe2'/>
+      <pointer-type-def type-id='5a9929ec' size-in-bits='64' id='68a2d05c'/>
+      <pointer-type-def type-id='a3566137' size-in-bits='64' id='c15eecdf'/>
+      <pointer-type-def type-id='4469e818' size-in-bits='64' id='3217f9ba'/>
+      <pointer-type-def type-id='0360a184' size-in-bits='64' id='4da45462'/>
+      <pointer-type-def type-id='14a30316' size-in-bits='64' id='5bc7662c'/>
+      <pointer-type-def type-id='49a7c5a7' size-in-bits='64' id='35b28c4f'/>
+      <pointer-type-def type-id='f12ac4ae' size-in-bits='64' id='31094274'/>
+      <pointer-type-def type-id='d1678a2e' size-in-bits='64' id='07b9ee34'/>
+      <pointer-type-def type-id='852a961e' size-in-bits='64' id='5799dc94'/>
+      <pointer-type-def type-id='89d7cb48' size-in-bits='64' id='6fcaf91e'/>
+      <pointer-type-def type-id='6fcaf91e' size-in-bits='64' id='30864cdc'/>
+      <pointer-type-def type-id='5b37df4a' size-in-bits='64' id='c2074578'/>
+      <pointer-type-def type-id='45092453' size-in-bits='64' id='f59f5033'/>
+      <pointer-type-def type-id='b71b307b' size-in-bits='64' id='a42934eb'/>
+      <pointer-type-def type-id='101eeec5' size-in-bits='64' id='90cd86e5'/>
+      <pointer-type-def type-id='7c1f8187' size-in-bits='64' id='7efbcaaf'/>
+      <pointer-type-def type-id='a79adfa3' size-in-bits='64' id='b3ce99dc'/>
+      <pointer-type-def type-id='aca51d4a' size-in-bits='64' id='deff2378'/>
+      <pointer-type-def type-id='6f8d5f55' size-in-bits='64' id='f30dbff5'/>
+      <pointer-type-def type-id='be643f38' size-in-bits='64' id='bd3860fe'/>
+      <pointer-type-def type-id='9193647b' size-in-bits='64' id='da1cb816'/>
+      <pointer-type-def type-id='cc52ca8d' size-in-bits='64' id='6daf6abd'/>
+      <pointer-type-def type-id='0fbf3cfd' size-in-bits='64' id='a10cc675'/>
+      <pointer-type-def type-id='4d8b71ac' size-in-bits='64' id='85d83b09'/>
+      <pointer-type-def type-id='f9d018aa' size-in-bits='64' id='08fd2ee7'/>
+      <pointer-type-def type-id='10ec1ded' size-in-bits='64' id='eeaf504d'/>
+      <pointer-type-def type-id='ca5008d0' size-in-bits='64' id='98c4c95a'/>
+      <pointer-type-def type-id='68bc5e16' size-in-bits='64' id='5a60e638'/>
+      <pointer-type-def type-id='a115139f' size-in-bits='64' id='e95fd96b'/>
+      <pointer-type-def type-id='64f32e32' size-in-bits='64' id='4a028f44'/>
+      <pointer-type-def type-id='9754e8aa' size-in-bits='64' id='7a0ed254'/>
+      <pointer-type-def type-id='6fd68117' size-in-bits='64' id='bd3f3f93'/>
+      <pointer-type-def type-id='3d5d0103' size-in-bits='64' id='de36db77'/>
+      <pointer-type-def type-id='670d37f5' size-in-bits='64' id='82ff4739'/>
+      <pointer-type-def type-id='b364ee65' size-in-bits='64' id='92d86499'/>
+      <pointer-type-def type-id='e0e73a01' size-in-bits='64' id='99577235'/>
+      <pointer-type-def type-id='a49fa2a0' size-in-bits='64' id='84bbda06'/>
+      <pointer-type-def type-id='47658c9d' size-in-bits='64' id='cf265ed1'/>
+      <pointer-type-def type-id='9c267c11' size-in-bits='64' id='8bf3cff5'/>
+      <pointer-type-def type-id='f6590065' size-in-bits='64' id='81c90e99'/>
+      <pointer-type-def type-id='4cc265e6' size-in-bits='64' id='b713d448'/>
+      <pointer-type-def type-id='4ae18970' size-in-bits='64' id='548eee3a'/>
+      <pointer-type-def type-id='395aad7e' size-in-bits='64' id='74287ea0'/>
+      <pointer-type-def type-id='07b58648' size-in-bits='64' id='343c05fa'/>
+      <pointer-type-def type-id='be90799d' size-in-bits='64' id='f45e1d71'/>
+      <pointer-type-def type-id='3fe3822d' size-in-bits='64' id='345f0501'/>
+      <pointer-type-def type-id='ffb8b223' size-in-bits='64' id='89b5be7f'/>
+      <pointer-type-def type-id='e0f7a7a4' size-in-bits='64' id='6c781266'/>
+      <pointer-type-def type-id='f6d2a7cd' size-in-bits='64' id='4acd4951'/>
+      <pointer-type-def type-id='b41203ee' size-in-bits='64' id='afcbd268'/>
+      <pointer-type-def type-id='af1a3b3d' size-in-bits='64' id='c7c94ce1'/>
+      <pointer-type-def type-id='7e2e2485' size-in-bits='64' id='11e89fb9'/>
+      <pointer-type-def type-id='0bd6c9bd' size-in-bits='64' id='cb4c6db1'/>
+      <pointer-type-def type-id='f6dbfe8d' size-in-bits='64' id='9038f441'/>
+      <pointer-type-def type-id='c05e7862' size-in-bits='64' id='27653c4c'/>
+      <pointer-type-def type-id='f8448e05' size-in-bits='64' id='a43821b9'/>
+      <pointer-type-def type-id='cd9acaaa' size-in-bits='64' id='5ac7baf4'/>
+      <pointer-type-def type-id='4cb2ce2a' size-in-bits='64' id='2a3a4aec'/>
+      <pointer-type-def type-id='19db78f1' size-in-bits='64' id='7a66877d'/>
+      <pointer-type-def type-id='cd562d46' size-in-bits='64' id='e2d7f258'/>
+      <pointer-type-def type-id='3ce3a3e9' size-in-bits='64' id='63c7e8e1'/>
+      <pointer-type-def type-id='8ae2fb1d' size-in-bits='64' id='165146ad'/>
+      <pointer-type-def type-id='21f83f61' size-in-bits='64' id='cb1c5129'/>
+      <pointer-type-def type-id='cb1c5129' size-in-bits='64' id='c09387b9'/>
+      <pointer-type-def type-id='bbbd8970' size-in-bits='64' id='577ede06'/>
+      <pointer-type-def type-id='4edc4180' size-in-bits='64' id='bf237056'/>
+      <pointer-type-def type-id='279bdcdf' size-in-bits='64' id='c6675287'/>
+      <function-decl name='try_module_get' mangled-name='try_module_get' filepath='include/linux/module.h' line='613' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='try_module_get'>
+        <parameter type-id='2730d015'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='simple_strtol' mangled-name='simple_strtol' filepath='include/linux/kernel.h' line='467' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_strtol'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='9b23c9ad'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='kthread_create_on_node' mangled-name='kthread_create_on_node' filepath='include/linux/kthread.h' line='9' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_create_on_node'>
+        <parameter type-id='b9b212f5'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='f23e2572'/>
+      </function-decl>
+      <function-decl name='module_put' mangled-name='module_put' filepath='include/linux/module.h' line='615' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='module_put'>
+        <parameter type-id='2730d015'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='wake_up_process' mangled-name='wake_up_process' filepath='include/linux/sched.h' line='1716' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wake_up_process'>
+        <parameter type-id='f23e2572'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='complete_all' mangled-name='complete_all' filepath='include/linux/completion.h' line='119' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='complete_all'>
+        <parameter type-id='389faaf7'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <array-type-def dimensions='1' type-id='bb08c7e1' size-in-bits='infinite' id='f443352a'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='78a133c2' size-in-bits='128' id='30180d4b'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='d3130597' size-in-bits='infinite' id='52cd3f2c'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='26a90f95' size-in-bits='64' id='9b23c9ad'/>
+      <pointer-type-def type-id='208298e3' size-in-bits='64' id='f696846b'/>
+      <pointer-type-def type-id='afa36b70' size-in-bits='64' id='d841feae'/>
+      <pointer-type-def type-id='ff37489f' size-in-bits='64' id='790774ef'/>
+      <function-type size-in-bits='64' id='732df9b3'>
+        <parameter type-id='231422bf'/>
+        <return type-id='00ee50b8'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c435a5bb'>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='f41a0030'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8a93d65'>
+        <parameter type-id='231422bf'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5abe74b4'>
+        <parameter type-id='00ee50b8'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='73e35fcc'>
+        <parameter type-id='00ee50b8'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='58407416'>
+        <parameter type-id='00ee50b8'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8f138f6a'>
+        <parameter type-id='00ee50b8'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='081241b5'>
+        <parameter type-id='366d2695'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3c2554e1'>
+        <parameter type-id='366d2695'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1b0dcbb7'>
+        <parameter type-id='366d2695'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1c674f90'>
+        <parameter type-id='8f4bc7f1'/>
+        <parameter type-id='9693d74a'/>
+        <parameter type-id='28379b39'/>
+        <parameter type-id='28379b39'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d1043097'>
+        <parameter type-id='8f4bc7f1'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9ebac747'>
+        <parameter type-id='8f4bc7f1'/>
+        <parameter type-id='3df9fd28'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='25126efb'>
+        <parameter type-id='b5fb9c17'/>
+        <parameter type-id='236f06da'/>
+        <parameter type-id='84a5c3d4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8e4f6a60'>
+        <parameter type-id='2ce52478'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b29581c5'>
+        <parameter type-id='11f4a000'/>
+        <parameter type-id='cf536864'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='31b74d85'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='960bee7e'>
+        <parameter type-id='ccc13476'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='458c097a'>
+        <parameter type-id='ccc13476'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='80343f75'>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8087fc9a'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cd2b672f'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='b2c34f11'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6557550d'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='ee5dddb1'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='49d94952'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='11f4a000'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f4398a06'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='aded214c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='19272f09'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='538b7809'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='aded214c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='19272f09'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ecb90832'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='cb317f38'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='35b31004'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='b3e12f1c'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9e33bce1'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='7f9b4c1b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c15e0ad2'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='6db6a1be'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='35c1cbe3'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='6e313ad5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='21e2c677'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='6e313ad5'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4cef7edc'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='eced47f6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a80d6b6e'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='02557527'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d2df6ce2'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='a99bd7d2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c6751b87'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='ddd0a58b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f6dcb63e'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='70de91e2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='62f14019'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='b1e844c1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='205059e2'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='ab38066e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a82c7e12'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='2bf5f3d0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8427fe66'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='a079e5cc'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c0de0cb2'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='a079e5cc'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='965023eb'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='fa058983'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='89e92d83'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='fde1bbcb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3b28e6a8'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='cf0da35e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='858c6d7b'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='d494b97c'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0b0288d6'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e87d68d4'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='691d1b3b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='782b4219'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='c0a50b50'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='32ee1dcb'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2976f714'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4c110a85'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='30864cdc'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ccb1a26'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='50801c15'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c8915c86'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='84a5c3d4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='61b18a3b'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9b7dfd9f'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cb28c283'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='65655453'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='c09387b9'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='337862e8'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='affe0fe2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='18359f44'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='3c330066'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cbbca4c5'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c0ac60c2'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d8da8ad2'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='4da45462'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e3a1e7d2'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='5bc7662c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='594ef19f'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='c2074578'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='29cf1864'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='c2074578'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='455e2261'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='45639e3d'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='84a5c3d4'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c4e36342'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b4cb0241'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='f9f4b16f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9803cec6'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='924e6a9f'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='6db6a1be'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34072a4b'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='81c3d1f5'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='77fe651f'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da556df0'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='85832c21'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9035443c'>
+        <parameter type-id='07b9ee34'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='930eb0f7'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6386f568'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='07b9ee34'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b7b43e53'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='07b9ee34'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='811eff86'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7e5bb1dd'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4469e818'>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='c15eecdf'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ca5008d0'>
+        <parameter type-id='11f4a000'/>
+        <return type-id='84a5c3d4'/>
+      </function-type>
+      <function-type size-in-bits='64' id='68bc5e16'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a115139f'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='64f32e32'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='f9f4b16f'/>
+        <return type-id='f9f4b16f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9754e8aa'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='f9f4b16f'/>
+        <return type-id='f9f4b16f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6fd68117'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='6849a88c'/>
+      </function-type>
+      <function-type size-in-bits='64' id='77c9a241'>
+        <parameter type-id='a10cc675'/>
+        <return type-id='a110acfc'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3d5d0103'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='1dc6a898'/>
+      </function-type>
+      <function-type size-in-bits='64' id='670d37f5'>
+        <parameter type-id='00ee50b8'/>
+        <parameter type-id='7fe42640'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b364ee65'>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e0e73a01'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='47658c9d'>
+        <parameter type-id='00ee50b8'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9c267c11'>
+        <parameter type-id='00ee50b8'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f6590065'>
+        <parameter type-id='00ee50b8'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f8dc9df0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4cc265e6'>
+        <parameter type-id='236f06da'/>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='354f7eb9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4ae18970'>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='395aad7e'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='7f9b4c1b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='07b58648'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='8c4c4029'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='be90799d'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='ab38066e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3fe3822d'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='31f59912'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ffb8b223'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='2bf5f3d0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e0f7a7a4'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='33e1dfe4'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f6d2a7cd'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='469e947f'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b41203ee'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='fde1bbcb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='af1a3b3d'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7e2e2485'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='3c330066'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0bd6c9bd'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='bd3860fe'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f6dbfe8d'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c05e7862'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8448e05'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='84bbda06'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cd9acaaa'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4cb2ce2a'>
+        <parameter type-id='00ee50b8'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='19db78f1'>
+        <parameter type-id='00ee50b8'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cd562d46'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <pointer-type-def type-id='5931aad5' size-in-bits='64' id='58505a39'/>
+      <pointer-type-def type-id='5fffc559' size-in-bits='64' id='beb4f24d'/>
+      <pointer-type-def type-id='18da11bd' size-in-bits='64' id='c1655339'/>
+      <pointer-type-def type-id='f8292115' size-in-bits='64' id='96efb615'/>
+      <pointer-type-def type-id='cfdbff8a' size-in-bits='64' id='55e2a83c'/>
+      <pointer-type-def type-id='9c91a761' size-in-bits='64' id='29244949'/>
+      <pointer-type-def type-id='bd965181' size-in-bits='64' id='a2bff677'/>
+      <pointer-type-def type-id='85c08b52' size-in-bits='64' id='39a43b40'/>
+      <class-decl name='neighbour' is-struct='yes' visibility='default' is-declaration-only='yes' id='da0e76a0'/>
+      <typedef-decl name='__be32' type-id='3f1a6b60' filepath='include/uapi/linux/types.h' line='32' column='1' id='78a133c2'/>
+      <typedef-decl name='__le16' type-id='d315442e' filepath='include/uapi/linux/types.h' line='29' column='1' id='23119536'/>
+      <typedef-decl name='__le64' type-id='d3130597' filepath='include/uapi/linux/types.h' line='33' column='1' id='a30e8d1f'/>
+      <pointer-type-def type-id='c2e47616' size-in-bits='64' id='0feea528'/>
+      <pointer-type-def type-id='4d3ea3f3' size-in-bits='64' id='b78e9a0f'/>
+      <pointer-type-def type-id='99690429' size-in-bits='64' id='1cebc84d'/>
+      <pointer-type-def type-id='0a042b05' size-in-bits='64' id='82398c35'/>
+      <pointer-type-def type-id='c06daf3b' size-in-bits='64' id='b925f68b'/>
+      <pointer-type-def type-id='8ea64c8e' size-in-bits='64' id='48e57944'/>
+      <pointer-type-def type-id='7f424251' size-in-bits='64' id='9fa25a99'/>
+      <qualified-type-def type-id='bcc5cab3' const='yes' id='208298e3'/>
+      <qualified-type-def type-id='0c842ad9' const='yes' id='afa36b70'/>
+      <pointer-type-def type-id='51bb592e' size-in-bits='64' id='aded214c'/>
+      <qualified-type-def type-id='95fcbc94' const='yes' id='ff37489f'/>
+      <pointer-type-def type-id='da0e76a0' size-in-bits='64' id='3c330066'/>
+      <class-decl name='iw_spy_data' size-in-bits='800' is-struct='yes' visibility='default' filepath='include/net/iw_handler.h' line='396' column='1' id='f8292115'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='spy_number' type-id='95e97e5e' visibility='default' filepath='include/net/iw_handler.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='spy_address' type-id='2d507faf' visibility='default' filepath='include/net/iw_handler.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='spy_stat' type-id='c73a16a3' visibility='default' filepath='include/net/iw_handler.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='spy_thr_low' type-id='aa80c027' visibility='default' filepath='include/net/iw_handler.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='spy_thr_high' type-id='aa80c027' visibility='default' filepath='include/net/iw_handler.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='spy_thr_under' type-id='4a744ea1' visibility='default' filepath='include/net/iw_handler.h' line='404' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='libipw_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='9c91a761'/>
+      <class-decl name='net' size-in-bits='33280' is-struct='yes' visibility='default' filepath='include/net/net_namespace.h' line='54' column='1' id='bd965181'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='passive' type-id='64615833' visibility='default' filepath='include/net/net_namespace.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='64615833' visibility='default' filepath='include/net/net_namespace.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rules_mod_lock' type-id='fb4018a0' visibility='default' filepath='include/net/net_namespace.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dev_unreg_count' type-id='f0981eeb' visibility='default' filepath='include/net/net_namespace.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev_base_seq' type-id='f0981eeb' visibility='default' filepath='include/net/net_namespace.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ifindex' type-id='95e97e5e' visibility='default' filepath='include/net/net_namespace.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nsid_lock' type-id='fb4018a0' visibility='default' filepath='include/net/net_namespace.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='fnhe_genid' type-id='49178f86' visibility='default' filepath='include/net/net_namespace.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/net_namespace.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='exit_list' type-id='72f469ec' visibility='default' filepath='include/net/net_namespace.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cleanup_list' type-id='c5ccfee8' visibility='default' filepath='include/net/net_namespace.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='key_domain' type-id='fce14c5f' visibility='default' filepath='include/net/net_namespace.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='user_ns' type-id='c0ced321' visibility='default' filepath='include/net/net_namespace.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ucounts' type-id='b1d4934a' visibility='default' filepath='include/net/net_namespace.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='netns_ids' type-id='37ce495e' visibility='default' filepath='include/net/net_namespace.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ns' type-id='99f367f2' visibility='default' filepath='include/net/net_namespace.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='dev_base_head' type-id='72f469ec' visibility='default' filepath='include/net/net_namespace.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='proc_net' type-id='d077e928' visibility='default' filepath='include/net/net_namespace.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='proc_net_stat' type-id='d077e928' visibility='default' filepath='include/net/net_namespace.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='sysctls' type-id='3fc3d262' visibility='default' filepath='include/net/net_namespace.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='rtnl' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='genl_sock' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='uevent_sock' type-id='5224788d' visibility='default' filepath='include/net/net_namespace.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='dev_name_head' type-id='030d0b18' visibility='default' filepath='include/net/net_namespace.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dev_index_head' type-id='030d0b18' visibility='default' filepath='include/net/net_namespace.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='hash_mix' type-id='19c2251e' visibility='default' filepath='include/net/net_namespace.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='loopback_dev' type-id='68a2d05c' visibility='default' filepath='include/net/net_namespace.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='rules_ops' type-id='72f469ec' visibility='default' filepath='include/net/net_namespace.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='core' type-id='7436aa2b' visibility='default' filepath='include/net/net_namespace.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='mib' type-id='870ef624' visibility='default' filepath='include/net/net_namespace.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='packet' type-id='49d7aa74' visibility='default' filepath='include/net/net_namespace.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='unx' type-id='6e306fde' visibility='default' filepath='include/net/net_namespace.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='nexthop' type-id='03364088' visibility='default' filepath='include/net/net_namespace.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='ipv4' type-id='dba1641f' visibility='default' filepath='include/net/net_namespace.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='ipv6' type-id='dda16745' visibility='default' filepath='include/net/net_namespace.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17920'>
+          <var-decl name='nf' type-id='0a6298e0' visibility='default' filepath='include/net/net_namespace.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='xt' type-id='288fe7b8' visibility='default' filepath='include/net/net_namespace.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21568'>
+          <var-decl name='ct' type-id='2a831eeb' visibility='default' filepath='include/net/net_namespace.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24896'>
+          <var-decl name='nf_frag' type-id='ebd39a5d' visibility='default' filepath='include/net/net_namespace.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24960'>
+          <var-decl name='nf_frag_frags_hdr' type-id='11b101bb' visibility='default' filepath='include/net/net_namespace.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25024'>
+          <var-decl name='nfnl' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25088'>
+          <var-decl name='nfnl_stash' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25152'>
+          <var-decl name='wext_nlevents' type-id='e61c85d0' visibility='default' filepath='include/net/net_namespace.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25344'>
+          <var-decl name='gen' type-id='871fd930' visibility='default' filepath='include/net/net_namespace.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25408'>
+          <var-decl name='flow_dissector_prog' type-id='bdcee7ae' visibility='default' filepath='include/net/net_namespace.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25600'>
+          <var-decl name='xfrm' type-id='3d2d291b' visibility='default' filepath='include/net/net_namespace.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32768'>
+          <var-decl name='xdp' type-id='a2b0ef48' visibility='default' filepath='include/net/net_namespace.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33088'>
+          <var-decl name='diag_nlsk' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='183' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_hook_entries' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/netfilter.h' line='100' column='1' id='85c08b52'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_hook_entries' type-id='1dc6a898' visibility='default' filepath='include/linux/netfilter.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hooks' type-id='84607bca' visibility='default' filepath='include/linux/netfilter.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wpan_phy' size-in-bits='9472' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='176' column='1' id='0a042b05'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='privid' type-id='eaa32e2f' visibility='default' filepath='include/net/cfg802154.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg802154.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='current_channel' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='current_page' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='supported' type-id='7b03c2a4' visibility='default' filepath='include/net/cfg802154.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='transmit_power' type-id='a7832498' visibility='default' filepath='include/net/cfg802154.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='cca' type-id='51a1cee7' visibility='default' filepath='include/net/cfg802154.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='perm_extended_addr' type-id='a30e8d1f' visibility='default' filepath='include/net/cfg802154.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='cca_ed_level' type-id='a7832498' visibility='default' filepath='include/net/cfg802154.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='symbol_duration' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1840'>
+          <var-decl name='lifs_period' type-id='1dc6a898' visibility='default' filepath='include/net/cfg802154.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='sifs_period' type-id='1dc6a898' visibility='default' filepath='include/net/cfg802154.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/net/cfg802154.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='_net' type-id='c9df1e6c' visibility='default' filepath='include/net/cfg802154.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='priv' type-id='e84913bd' visibility='default' filepath='include/net/cfg802154.h' line='217' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xdp_umem_fq_reuse' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/xdp_sock.h' line='31' column='1' id='c06daf3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nentries' type-id='19c2251e' visibility='default' filepath='include/net/xdp_sock.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='length' type-id='19c2251e' visibility='default' filepath='include/net/xdp_sock.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='handles' type-id='09b35382' visibility='default' filepath='include/net/xdp_sock.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xdp_umem_page' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/xdp_sock.h' line='26' column='1' id='8ea64c8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='eaa32e2f' visibility='default' filepath='include/net/xdp_sock.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dma' type-id='cf29c9b3' visibility='default' filepath='include/net/xdp_sock.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xsk_queue' is-struct='yes' visibility='default' is-declaration-only='yes' id='7f424251'/>
+      <class-decl name='__anonymous_struct__1' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/cpu_rmap.h' line='28' column='1' id='bb08c7e1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='1dc6a898' visibility='default' filepath='include/linux/cpu_rmap.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='dist' type-id='1dc6a898' visibility='default' filepath='include/linux/cpu_rmap.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='19c2251e' const='yes' id='51bb592e'/>
+      <array-type-def dimensions='1' type-id='aa80c027' size-in-bits='256' id='c73a16a3'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <pointer-type-def type-id='8e5f5512' size-in-bits='64' id='871fd930'/>
+      <array-type-def dimensions='1' type-id='7a1bc3c2' size-in-bits='infinite' id='84607bca'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='iw_priv_args' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/wireless.h' line='1063' column='1' id='0c842ad9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/wireless.h' line='1064' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='set_args' type-id='d315442e' visibility='default' filepath='include/uapi/linux/wireless.h' line='1065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='get_args' type-id='d315442e' visibility='default' filepath='include/uapi/linux/wireless.h' line='1066' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/wireless.h' line='1067' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_quality' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/wireless.h' line='716' column='1' id='aa80c027'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='qual' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='level' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='noise' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='720' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='updated' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='721' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_core' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/netns/core.h' line='8' column='1' id='7436aa2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysctl_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/core.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sysctl_somaxconn' type-id='95e97e5e' visibility='default' filepath='include/net/netns/core.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sock_inuse' type-id='7292109c' visibility='default' filepath='include/net/netns/core.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prot_inuse' type-id='a06a810d' visibility='default' filepath='include/net/netns/core.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_ct' size-in-bits='3328' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='95' column='1' id='2a831eeb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/net/netns/conntrack.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='expect_count' type-id='f0981eeb' visibility='default' filepath='include/net/netns/conntrack.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ecache_dwork' type-id='5ad6e0ef' visibility='default' filepath='include/net/netns/conntrack.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ecache_dwork_pending' type-id='b50a4934' visibility='default' filepath='include/net/netns/conntrack.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='auto_assign_helper_warned' type-id='b50a4934' visibility='default' filepath='include/net/netns/conntrack.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='sysctl_header' type-id='11b101bb' visibility='default' filepath='include/net/netns/conntrack.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='sysctl_log_invalid' type-id='f0981eeb' visibility='default' filepath='include/net/netns/conntrack.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='sysctl_events' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='sysctl_acct' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='sysctl_auto_assign_helper' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='sysctl_tstamp' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='sysctl_checksum' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='pcpu_lists' type-id='b2bcb5d9' visibility='default' filepath='include/net/netns/conntrack.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='stat' type-id='e46089fd' visibility='default' filepath='include/net/netns/conntrack.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='nf_conntrack_event_cb' type-id='2db792b9' visibility='default' filepath='include/net/netns/conntrack.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='nf_expect_event_cb' type-id='bb6de7e1' visibility='default' filepath='include/net/netns/conntrack.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='nf_ct_proto' type-id='7f3015f3' visibility='default' filepath='include/net/netns/conntrack.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_ipv4' size-in-bits='7168' is-struct='yes' visibility='default' filepath='include/net/netns/ipv4.h' line='43' column='1' id='dba1641f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='forw_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frags_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ipv4_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='route_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xfrm4_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='devconf_all' type-id='e963f446' visibility='default' filepath='include/net/netns/ipv4.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='devconf_dflt' type-id='e963f446' visibility='default' filepath='include/net/netns/ipv4.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ra_chain' type-id='00c4cbac' visibility='default' filepath='include/net/netns/ipv4.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ra_mutex' type-id='925167dc' visibility='default' filepath='include/net/netns/ipv4.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rules_ops' type-id='a68064b1' visibility='default' filepath='include/net/netns/ipv4.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='fib_has_custom_rules' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv4.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='fib_rules_require_fldissect' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fib_main' type-id='107630a5' visibility='default' filepath='include/net/netns/ipv4.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fib_default' type-id='107630a5' visibility='default' filepath='include/net/netns/ipv4.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fib_has_custom_local_routes' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv4.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fib_table_hash' type-id='030d0b18' visibility='default' filepath='include/net/netns/ipv4.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='fib_offload_disabled' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv4.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fibnl' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv4.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='icmp_sk' type-id='d0d57cc5' visibility='default' filepath='include/net/netns/ipv4.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='mc_autojoin_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv4.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='peers' type-id='01d310c2' visibility='default' filepath='include/net/netns/ipv4.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='tcp_sk' type-id='d0d57cc5' visibility='default' filepath='include/net/netns/ipv4.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='fqdir' type-id='943ad75f' visibility='default' filepath='include/net/netns/ipv4.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='iptable_filter' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='iptable_mangle' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='iptable_raw' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='arptable_filter' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='iptable_security' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='nat_table' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sysctl_icmp_echo_ignore_all' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='sysctl_icmp_echo_ignore_broadcasts' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sysctl_icmp_ignore_bogus_error_responses' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='sysctl_icmp_ratelimit' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sysctl_icmp_ratemask' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='sysctl_icmp_errors_use_inbound_ifaddr' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='ip_local_ports' type-id='93d4ab27' visibility='default' filepath='include/net/netns/ipv4.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='sysctl_tcp_ecn' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='sysctl_tcp_ecn_fallback' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='sysctl_ip_default_ttl' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='sysctl_ip_no_pmtu_disc' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2464'>
+          <var-decl name='sysctl_ip_fwd_use_pmtu' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='sysctl_ip_fwd_update_priority' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='sysctl_ip_nonlocal_bind' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='sysctl_ip_dynaddr' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='sysctl_ip_early_demux' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='sysctl_tcp_early_demux' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='sysctl_udp_early_demux' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='sysctl_fwmark_reflect' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='sysctl_tcp_fwmark_accept' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='sysctl_tcp_mtu_probing' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2784'>
+          <var-decl name='sysctl_tcp_mtu_probe_floor' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='sysctl_tcp_base_mss' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='sysctl_tcp_min_snd_mss' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='sysctl_tcp_probe_threshold' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='sysctl_tcp_probe_interval' type-id='19c2251e' visibility='default' filepath='include/net/netns/ipv4.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='sysctl_tcp_keepalive_time' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2976'>
+          <var-decl name='sysctl_tcp_keepalive_probes' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='sysctl_tcp_keepalive_intvl' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='sysctl_tcp_syn_retries' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='sysctl_tcp_synack_retries' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='sysctl_tcp_syncookies' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='sysctl_tcp_reordering' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3168'>
+          <var-decl name='sysctl_tcp_retries1' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='sysctl_tcp_retries2' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3232'>
+          <var-decl name='sysctl_tcp_orphan_retries' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='sysctl_tcp_fin_timeout' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3296'>
+          <var-decl name='sysctl_tcp_notsent_lowat' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='sysctl_tcp_tw_reuse' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3360'>
+          <var-decl name='sysctl_tcp_sack' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='sysctl_tcp_window_scaling' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3424'>
+          <var-decl name='sysctl_tcp_timestamps' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='sysctl_tcp_early_retrans' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='sysctl_tcp_recovery' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='sysctl_tcp_thin_linear_timeouts' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3552'>
+          <var-decl name='sysctl_tcp_slow_start_after_idle' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='sysctl_tcp_retrans_collapse' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3616'>
+          <var-decl name='sysctl_tcp_stdurg' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='sysctl_tcp_rfc1337' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3680'>
+          <var-decl name='sysctl_tcp_abort_on_overflow' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='sysctl_tcp_fack' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3744'>
+          <var-decl name='sysctl_tcp_max_reordering' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='sysctl_tcp_dsack' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3808'>
+          <var-decl name='sysctl_tcp_app_win' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='sysctl_tcp_adv_win_scale' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3872'>
+          <var-decl name='sysctl_tcp_frto' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='sysctl_tcp_nometrics_save' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3936'>
+          <var-decl name='sysctl_tcp_moderate_rcvbuf' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='sysctl_tcp_tso_win_divisor' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4000'>
+          <var-decl name='sysctl_tcp_workaround_signed_windows' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='sysctl_tcp_limit_output_bytes' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4064'>
+          <var-decl name='sysctl_tcp_challenge_ack_limit' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='sysctl_tcp_min_tso_segs' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4128'>
+          <var-decl name='sysctl_tcp_min_rtt_wlen' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='sysctl_tcp_autocorking' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4192'>
+          <var-decl name='sysctl_tcp_invalid_ratelimit' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='sysctl_tcp_pacing_ss_ratio' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4256'>
+          <var-decl name='sysctl_tcp_pacing_ca_ratio' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='sysctl_tcp_wmem' type-id='e024279b' visibility='default' filepath='include/net/netns/ipv4.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4384'>
+          <var-decl name='sysctl_tcp_rmem' type-id='e024279b' visibility='default' filepath='include/net/netns/ipv4.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='sysctl_tcp_comp_sack_nr' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='sysctl_tcp_comp_sack_delay_ns' type-id='7359adad' visibility='default' filepath='include/net/netns/ipv4.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='tcp_death_row' type-id='af2c6a56' visibility='default' filepath='include/net/netns/ipv4.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='sysctl_max_syn_backlog' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5664'>
+          <var-decl name='sysctl_tcp_fastopen' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='tcp_congestion_control' type-id='b3ef56ee' visibility='default' filepath='include/net/netns/ipv4.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='tcp_fastopen_ctx' type-id='104fa32f' visibility='default' filepath='include/net/netns/ipv4.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='tcp_fastopen_ctx_lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/ipv4.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5856'>
+          <var-decl name='sysctl_tcp_fastopen_blackhole_timeout' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='tfo_active_disable_times' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv4.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='tfo_active_disable_stamp' type-id='7359adad' visibility='default' filepath='include/net/netns/ipv4.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='sysctl_udp_wmem_min' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6048'>
+          <var-decl name='sysctl_udp_rmem_min' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='sysctl_igmp_max_memberships' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6112'>
+          <var-decl name='sysctl_igmp_max_msf' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='sysctl_igmp_llm_reports' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='sysctl_igmp_qrv' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='ping_group_range' type-id='89d35c53' visibility='default' filepath='include/net/netns/ipv4.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='dev_addr_genid' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv4.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='sysctl_local_reserved_ports' type-id='1d2c2b85' visibility='default' filepath='include/net/netns/ipv4.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='sysctl_local_unbindable_ports' type-id='1d2c2b85' visibility='default' filepath='include/net/netns/ipv4.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='sysctl_ip_prot_sock' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='notifier_ops' type-id='74f101b0' visibility='default' filepath='include/net/netns/ipv4.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='fib_seq' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='ipmr_notifier_ops' type-id='74f101b0' visibility='default' filepath='include/net/netns/ipv4.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='ipmr_seq' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6816'>
+          <var-decl name='rt_genid' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv4.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='ip_id_key' type-id='7799da43' visibility='default' filepath='include/net/netns/ipv4.h' line='224' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_ipv6' size-in-bits='6144' is-struct='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='56' column='1' id='dda16745'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysctl' type-id='6c13064a' visibility='default' filepath='include/net/netns/ipv6.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='devconf_all' type-id='ca399350' visibility='default' filepath='include/net/netns/ipv6.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='devconf_dflt' type-id='ca399350' visibility='default' filepath='include/net/netns/ipv6.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='peers' type-id='01d310c2' visibility='default' filepath='include/net/netns/ipv6.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='fqdir' type-id='943ad75f' visibility='default' filepath='include/net/netns/ipv6.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='ip6table_filter' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ip6table_mangle' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ip6table_raw' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ip6table_security' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='ip6table_nat' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='fib6_null_entry' type-id='fe454a75' visibility='default' filepath='include/net/netns/ipv6.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='ip6_null_entry' type-id='6ceb7782' visibility='default' filepath='include/net/netns/ipv6.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='rt6_stats' type-id='aca8a113' visibility='default' filepath='include/net/netns/ipv6.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ip6_fib_timer' type-id='abe41e67' visibility='default' filepath='include/net/netns/ipv6.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='fib_table_hash' type-id='030d0b18' visibility='default' filepath='include/net/netns/ipv6.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='fib6_main_tbl' type-id='7156b317' visibility='default' filepath='include/net/netns/ipv6.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='fib6_walkers' type-id='72f469ec' visibility='default' filepath='include/net/netns/ipv6.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='ip6_dst_ops' type-id='32358857' visibility='default' filepath='include/net/netns/ipv6.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='fib6_walker_lock' type-id='ac16795b' visibility='default' filepath='include/net/netns/ipv6.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='fib6_gc_lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/ipv6.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4704'>
+          <var-decl name='ip6_rt_gc_expire' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv6.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='ip6_rt_last_gc' type-id='7359adad' visibility='default' filepath='include/net/netns/ipv6.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='fib6_rules_require_fldissect' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv6.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4832'>
+          <var-decl name='fib6_has_custom_rules' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv6.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='ip6_prohibit_entry' type-id='6ceb7782' visibility='default' filepath='include/net/netns/ipv6.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='ip6_blk_hole_entry' type-id='6ceb7782' visibility='default' filepath='include/net/netns/ipv6.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='fib6_local_tbl' type-id='7156b317' visibility='default' filepath='include/net/netns/ipv6.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='fib6_rules_ops' type-id='a68064b1' visibility='default' filepath='include/net/netns/ipv6.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='icmp_sk' type-id='d0d57cc5' visibility='default' filepath='include/net/netns/ipv6.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='ndisc_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv6.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='tcp_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv6.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='igmp_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv6.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='mc_autojoin_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv6.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='dev_addr_genid' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv6.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5472'>
+          <var-decl name='fib6_sernum' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv6.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='seg6_data' type-id='15b8a3be' visibility='default' filepath='include/net/netns/ipv6.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='notifier_ops' type-id='74f101b0' visibility='default' filepath='include/net/netns/ipv6.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='ip6mr_notifier_ops' type-id='74f101b0' visibility='default' filepath='include/net/netns/ipv6.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='ipmr_seq' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv6.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='ip6addrlbl_table' type-id='a03c964b' visibility='default' filepath='include/net/netns/ipv6.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_mib' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/netns/mib.h' line='7' column='1' id='870ef624'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tcp_statistics' type-id='19a26ee3' visibility='default' filepath='include/net/netns/mib.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ip_statistics' type-id='30897c4e' visibility='default' filepath='include/net/netns/mib.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='net_statistics' type-id='016811bc' visibility='default' filepath='include/net/netns/mib.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='udp_statistics' type-id='d1440a9f' visibility='default' filepath='include/net/netns/mib.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='udplite_statistics' type-id='d1440a9f' visibility='default' filepath='include/net/netns/mib.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='icmp_statistics' type-id='c085a9fb' visibility='default' filepath='include/net/netns/mib.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='icmpmsg_statistics' type-id='0296b670' visibility='default' filepath='include/net/netns/mib.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='proc_net_devsnmp6' type-id='d077e928' visibility='default' filepath='include/net/netns/mib.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='udp_stats_in6' type-id='d1440a9f' visibility='default' filepath='include/net/netns/mib.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='udplite_stats_in6' type-id='d1440a9f' visibility='default' filepath='include/net/netns/mib.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ipv6_statistics' type-id='30897c4e' visibility='default' filepath='include/net/netns/mib.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='icmpv6_statistics' type-id='1a16368f' visibility='default' filepath='include/net/netns/mib.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='icmpv6msg_statistics' type-id='bf0465ec' visibility='default' filepath='include/net/netns/mib.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='xfrm_statistics' type-id='f43a2d4c' visibility='default' filepath='include/net/netns/mib.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_nexthop' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/netns/nexthop.h' line='11' column='1' id='03364088'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_root' type-id='dec44472' visibility='default' filepath='include/net/netns/nexthop.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='devhash' type-id='030d0b18' visibility='default' filepath='include/net/netns/nexthop.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq' type-id='f0981eeb' visibility='default' filepath='include/net/netns/nexthop.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='last_id_allocated' type-id='19c2251e' visibility='default' filepath='include/net/netns/nexthop.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_nf' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/net/netns/netfilter.h' line='11' column='1' id='0a6298e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='proc_netfilter' type-id='d077e928' visibility='default' filepath='include/net/netns/netfilter.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='queue_handler' type-id='67f12fe3' visibility='default' filepath='include/net/netns/netfilter.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nf_loggers' type-id='e521ce61' visibility='default' filepath='include/net/netns/netfilter.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nf_log_dir_header' type-id='11b101bb' visibility='default' filepath='include/net/netns/netfilter.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='hooks_ipv4' type-id='94310593' visibility='default' filepath='include/net/netns/netfilter.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='hooks_ipv6' type-id='94310593' visibility='default' filepath='include/net/netns/netfilter.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='hooks_arp' type-id='d82cf371' visibility='default' filepath='include/net/netns/netfilter.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='defrag_ipv4' type-id='b50a4934' visibility='default' filepath='include/net/netns/netfilter.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1864'>
+          <var-decl name='defrag_ipv6' type-id='b50a4934' visibility='default' filepath='include/net/netns/netfilter.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_nf_frag' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='118' column='1' id='ebd39a5d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fqdir' type-id='943ad75f' visibility='default' filepath='include/net/netns/ipv6.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_packet' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/netns/packet.h' line='11' column='1' id='49d7aa74'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sklist_lock' type-id='925167dc' visibility='default' filepath='include/net/netns/packet.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sklist' type-id='e151255a' visibility='default' filepath='include/net/netns/packet.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_unix' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/netns/unix.h' line='9' column='1' id='6e306fde'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysctl_max_dgram_qlen' type-id='95e97e5e' visibility='default' filepath='include/net/netns/unix.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ctl' type-id='11b101bb' visibility='default' filepath='include/net/netns/unix.h' line='11' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_xdp' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/netns/xdp.h' line='8' column='1' id='a2b0ef48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/net/netns/xdp.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='e151255a' visibility='default' filepath='include/net/netns/xdp.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_xfrm' size-in-bits='7168' is-struct='yes' visibility='default' filepath='include/net/netns/xfrm.h' line='32' column='1' id='3d2d291b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state_all' type-id='72f469ec' visibility='default' filepath='include/net/netns/xfrm.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state_bydst' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='state_bysrc' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='state_byspi' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state_hmask' type-id='f0981eeb' visibility='default' filepath='include/net/netns/xfrm.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='state_num' type-id='f0981eeb' visibility='default' filepath='include/net/netns/xfrm.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='state_hash_work' type-id='ef9025d0' visibility='default' filepath='include/net/netns/xfrm.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='policy_all' type-id='72f469ec' visibility='default' filepath='include/net/netns/xfrm.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='policy_byidx' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='policy_idx_hmask' type-id='f0981eeb' visibility='default' filepath='include/net/netns/xfrm.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='policy_inexact' type-id='fc293b5f' visibility='default' filepath='include/net/netns/xfrm.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='policy_bydst' type-id='bd1ec77b' visibility='default' filepath='include/net/netns/xfrm.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='policy_count' type-id='0d5c291d' visibility='default' filepath='include/net/netns/xfrm.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='policy_hash_work' type-id='ef9025d0' visibility='default' filepath='include/net/netns/xfrm.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='policy_hthresh' type-id='52aaaba4' visibility='default' filepath='include/net/netns/xfrm.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='inexact_bins' type-id='72f469ec' visibility='default' filepath='include/net/netns/xfrm.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='nlsk' type-id='f772df6d' visibility='default' filepath='include/net/netns/xfrm.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='nlsk_stash' type-id='f772df6d' visibility='default' filepath='include/net/netns/xfrm.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='sysctl_aevent_etime' type-id='19c2251e' visibility='default' filepath='include/net/netns/xfrm.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2976'>
+          <var-decl name='sysctl_aevent_rseqth' type-id='19c2251e' visibility='default' filepath='include/net/netns/xfrm.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='sysctl_larval_drop' type-id='95e97e5e' visibility='default' filepath='include/net/netns/xfrm.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='sysctl_acq_expires' type-id='19c2251e' visibility='default' filepath='include/net/netns/xfrm.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='sysctl_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/xfrm.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='xfrm4_dst_ops' type-id='32358857' visibility='default' filepath='include/net/netns/xfrm.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='xfrm6_dst_ops' type-id='32358857' visibility='default' filepath='include/net/netns/xfrm.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='xfrm_state_lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/xfrm.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6688'>
+          <var-decl name='xfrm_policy_lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/xfrm.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='xfrm_cfg_mutex' type-id='925167dc' visibility='default' filepath='include/net/netns/xfrm.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_xt' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/net/netns/x_tables.h' line='10' column='1' id='288fe7b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tables' type-id='5e747b58' visibility='default' filepath='include/net/netns/x_tables.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='notrack_deprecated_warning' type-id='b50a4934' visibility='default' filepath='include/net/netns/x_tables.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1672'>
+          <var-decl name='clusterip_deprecated_warning' type-id='b50a4934' visibility='default' filepath='include/net/netns/x_tables.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sk_buff_head' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/skbuff.h' line='290' column='1' id='e61c85d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prev' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='qlen' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/skbuff.h' line='296' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wpan_dev_header_ops' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='315' column='1' id='95fcbc94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='create' type-id='5afbd3c3' visibility='default' filepath='include/net/cfg802154.h' line='320' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wpan_phy_cca' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='145' column='1' id='51a1cee7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mode' type-id='59ec32df' visibility='default' filepath='include/net/cfg802154.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='opt' type-id='ef15418f' visibility='default' filepath='include/net/cfg802154.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wpan_phy_supported' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='134' column='1' id='7b03c2a4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channels' type-id='6dcfc3c6' visibility='default' filepath='include/net/cfg802154.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='cca_modes' type-id='19c2251e' visibility='default' filepath='include/net/cfg802154.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='cca_opts' type-id='19c2251e' visibility='default' filepath='include/net/cfg802154.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='iftypes' type-id='19c2251e' visibility='default' filepath='include/net/cfg802154.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='lbt' type-id='c78c6f33' visibility='default' filepath='include/net/cfg802154.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='min_minbe' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='max_minbe' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1168'>
+          <var-decl name='min_maxbe' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1176'>
+          <var-decl name='max_maxbe' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='min_csma_backoffs' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1192'>
+          <var-decl name='max_csma_backoffs' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1200'>
+          <var-decl name='min_frame_retries' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg802154.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1208'>
+          <var-decl name='max_frame_retries' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg802154.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tx_powers_size' type-id='b59d7dce' visibility='default' filepath='include/net/cfg802154.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='cca_ed_levels_size' type-id='b59d7dce' visibility='default' filepath='include/net/cfg802154.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='tx_powers' type-id='e0a2e3a6' visibility='default' filepath='include/net/cfg802154.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='cca_ed_levels' type-id='e0a2e3a6' visibility='default' filepath='include/net/cfg802154.h' line='142' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='iw_handler' type-id='2c8ff697' filepath='include/net/iw_handler.h' line='315' column='1' id='bcc5cab3'/>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='infinite' id='09b35382'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b151a3a8' size-in-bits='64' id='4a744ea1'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='b151a3a8' size-in-bits='384' id='2d507faf'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <pointer-type-def type-id='0c7ab04d' size-in-bits='64' id='5224788d'/>
+      <array-type-def dimensions='1' type-id='30e60925' size-in-bits='832' id='e521ce61'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <pointer-type-def type-id='2d144a5b' size-in-bits='64' id='67f12fe3'/>
+      <pointer-type-def type-id='c408da30' size-in-bits='64' id='b3ef56ee'/>
+      <pointer-type-def type-id='4ec43a31' size-in-bits='64' id='b2bcb5d9'/>
+      <enum-decl name='nl802154_cca_modes' filepath='include/net/nl802154.h' line='234' column='1' id='59ec32df'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='__NL802154_CCA_INVALID' value='0'/>
+        <enumerator name='NL802154_CCA_ENERGY' value='1'/>
+        <enumerator name='NL802154_CCA_CARRIER' value='2'/>
+        <enumerator name='NL802154_CCA_ENERGY_CARRIER' value='3'/>
+        <enumerator name='NL802154_CCA_ALOHA' value='4'/>
+        <enumerator name='NL802154_CCA_UWB_SHR' value='5'/>
+        <enumerator name='NL802154_CCA_UWB_MULTIPLEXED' value='6'/>
+        <enumerator name='__NL802154_CCA_ATTR_AFTER_LAST' value='7'/>
+        <enumerator name='NL802154_CCA_ATTR_MAX' value='6'/>
+      </enum-decl>
+      <enum-decl name='nl802154_cca_opts' filepath='include/net/nl802154.h' line='254' column='1' id='ef15418f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL802154_CCA_OPT_ENERGY_CARRIER_AND' value='0'/>
+        <enumerator name='NL802154_CCA_OPT_ENERGY_CARRIER_OR' value='1'/>
+        <enumerator name='__NL802154_CCA_OPT_ATTR_AFTER_LAST' value='2'/>
+        <enumerator name='NL802154_CCA_OPT_ATTR_MAX' value='1'/>
+      </enum-decl>
+      <enum-decl name='nl802154_supported_bool_states' filepath='include/net/nl802154.h' line='273' column='1' id='c78c6f33'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL802154_SUPPORTED_BOOL_FALSE' value='0'/>
+        <enumerator name='NL802154_SUPPORTED_BOOL_TRUE' value='1'/>
+        <enumerator name='__NL802154_SUPPORTED_BOOL_INVALD' value='2'/>
+        <enumerator name='NL802154_SUPPORTED_BOOL_BOTH' value='3'/>
+        <enumerator name='__NL802154_SUPPORTED_BOOL_AFTER_LAST' value='4'/>
+        <enumerator name='NL802154_SUPPORTED_BOOL_MAX' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='faaac7a5' size-in-bits='64' id='fe454a75'/>
+      <pointer-type-def type-id='7147e7ff' size-in-bits='64' id='7156b317'/>
+      <pointer-type-def type-id='ef45f062' size-in-bits='64' id='74f101b0'/>
+      <pointer-type-def type-id='e079fe29' size-in-bits='64' id='a68064b1'/>
+      <pointer-type-def type-id='a2b406b5' size-in-bits='64' id='107630a5'/>
+      <pointer-type-def type-id='84dbb257' size-in-bits='64' id='943ad75f'/>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='192' id='fc293b5f'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='bd4dc4cb' size-in-bits='64' id='c085a9fb'/>
+      <pointer-type-def type-id='b4bfe052' size-in-bits='64' id='0296b670'/>
+      <pointer-type-def type-id='c7afdfb7' size-in-bits='64' id='1a16368f'/>
+      <pointer-type-def type-id='1f91fd06' size-in-bits='64' id='bf0465ec'/>
+      <pointer-type-def type-id='27ebfa24' size-in-bits='64' id='01d310c2'/>
+      <pointer-type-def type-id='97488913' size-in-bits='64' id='2c8ff697'/>
+      <pointer-type-def type-id='bb1a67f7' size-in-bits='64' id='5afbd3c3'/>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='96' id='e024279b'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='be50a64d' size-in-bits='64' id='e46089fd'/>
+      <pointer-type-def type-id='4816a146' size-in-bits='64' id='00c4cbac'/>
+      <pointer-type-def type-id='f52a1ce8' size-in-bits='64' id='30897c4e'/>
+      <pointer-type-def type-id='c2c09950' size-in-bits='64' id='e963f446'/>
+      <pointer-type-def type-id='55e8af82' size-in-bits='64' id='ca399350'/>
+      <pointer-type-def type-id='e222a326' size-in-bits='64' id='016811bc'/>
+      <pointer-type-def type-id='7f2c5e96' size-in-bits='64' id='f43a2d4c'/>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='1664' id='5e747b58'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <pointer-type-def type-id='a27aef61' size-in-bits='64' id='2db792b9'/>
+      <pointer-type-def type-id='602fd1a9' size-in-bits='64' id='bb6de7e1'/>
+      <array-type-def dimensions='1' type-id='39a43b40' size-in-bits='192' id='d82cf371'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='39a43b40' size-in-bits='320' id='94310593'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <pointer-type-def type-id='ac763c5d' size-in-bits='64' id='a06a810d'/>
+      <pointer-type-def type-id='384b6d84' size-in-bits='64' id='6ceb7782'/>
+      <pointer-type-def type-id='aa112583' size-in-bits='64' id='aca8a113'/>
+      <pointer-type-def type-id='990cce78' size-in-bits='64' id='15b8a3be'/>
+      <pointer-type-def type-id='f772df6d' size-in-bits='64' id='d0d57cc5'/>
+      <class-decl name='dst_ops' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/net/dst_ops.h' line='15' column='1' id='32358857'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='8efea9e5' visibility='default' filepath='include/net/dst_ops.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='gc_thresh' type-id='f0981eeb' visibility='default' filepath='include/net/dst_ops.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gc' type-id='79efa3b3' visibility='default' filepath='include/net/dst_ops.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='check' type-id='d7c38177' visibility='default' filepath='include/net/dst_ops.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='default_advmss' type-id='34c443b7' visibility='default' filepath='include/net/dst_ops.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mtu' type-id='34c443b7' visibility='default' filepath='include/net/dst_ops.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cow_metrics' type-id='9917918c' visibility='default' filepath='include/net/dst_ops.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='destroy' type-id='d6965222' visibility='default' filepath='include/net/dst_ops.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ifdown' type-id='ce828d9f' visibility='default' filepath='include/net/dst_ops.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='negative_advice' type-id='3ce3447a' visibility='default' filepath='include/net/dst_ops.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='link_failure' type-id='0ef96694' visibility='default' filepath='include/net/dst_ops.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='update_pmtu' type-id='79b8da5c' visibility='default' filepath='include/net/dst_ops.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='redirect' type-id='9f403612' visibility='default' filepath='include/net/dst_ops.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='local_out' type-id='0023218e' visibility='default' filepath='include/net/dst_ops.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='neigh_lookup' type-id='950eceb8' visibility='default' filepath='include/net/dst_ops.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='confirm_neigh' type-id='7e5b15cf' visibility='default' filepath='include/net/dst_ops.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='kmem_cachep' type-id='f3b4aca8' visibility='default' filepath='include/net/dst_ops.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pcpuc_entries' type-id='b92c8d0d' visibility='default' filepath='include/net/dst_ops.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_timewait_death_row' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/net/netns/ipv4.h' line='34' column='1' id='af2c6a56'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tw_count' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv4.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='hashinfo' type-id='d7a1e3c2' visibility='default' filepath='include/net/netns/ipv4.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sysctl_max_tw_buckets' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='local_ports' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/netns/ipv4.h' line='21' column='1' id='93d4ab27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/netns/ipv4.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='range' type-id='e4266c7e' visibility='default' filepath='include/net/netns/ipv4.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='warned' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv4.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='net_generic' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/netns/generic.h' line='28' column='1' id='8e5f5512'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='1a99b3b8' visibility='default' filepath='include/net/netns/generic.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_sysctl_ipv6' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='15' column='1' id='6c13064a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='route_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='icmp_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='frags_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xfrm6_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bindv6only' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='flush_delay' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ip6_rt_max_size' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='ip6_rt_gc_min_interval' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ip6_rt_gc_timeout' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='ip6_rt_gc_interval' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ip6_rt_gc_elasticity' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='ip6_rt_mtu_expires' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ip6_rt_min_advmss' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='multipath_hash_policy' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flowlabel_consistency' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='auto_flowlabels' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='icmpv6_time' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='icmpv6_echo_ignore_all' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='icmpv6_echo_ignore_multicast' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='icmpv6_echo_ignore_anycast' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='icmpv6_ratemask' type-id='f46d9f4d' visibility='default' filepath='include/net/netns/ipv6.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='icmpv6_ratemask_ptr' type-id='1d2c2b85' visibility='default' filepath='include/net/netns/ipv6.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='anycast_src_echo_reply' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='ip_nonlocal_bind' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fwmark_reflect' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='idgen_retries' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='idgen_delay' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='flowlabel_state_ranges' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='flowlabel_reflect' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='max_dst_opts_cnt' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='max_hbh_opts_cnt' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='max_dst_opts_len' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='max_hbh_opts_len' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='seg6_flowlabel' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='skip_notify_on_dev_down' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv6.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_hook_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/netfilter.h' line='90' column='1' id='7a1bc3c2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hook' type-id='c8f8b049' visibility='default' filepath='include/linux/netfilter.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_ip_net' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='72' column='1' id='7f3015f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='generic' type-id='80487c53' visibility='default' filepath='include/net/netns/conntrack.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tcp' type-id='a2e01929' visibility='default' filepath='include/net/netns/conntrack.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='udp' type-id='328aff41' visibility='default' filepath='include/net/netns/conntrack.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='icmp' type-id='8cc9c55b' visibility='default' filepath='include/net/netns/conntrack.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='icmpv6' type-id='8cc9c55b' visibility='default' filepath='include/net/netns/conntrack.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dccp' type-id='ddb2f0ec' visibility='default' filepath='include/net/netns/conntrack.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='sctp' type-id='c91839d0' visibility='default' filepath='include/net/netns/conntrack.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='gre' type-id='ef266e4a' visibility='default' filepath='include/net/netns/conntrack.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ping_group_range' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/netns/ipv4.h' line='27' column='1' id='89d35c53'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/netns/ipv4.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='range' type-id='5fd0d2fb' visibility='default' filepath='include/net/netns/ipv4.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uevent_sock' is-struct='yes' visibility='default' is-declaration-only='yes' id='0c7ab04d'/>
+      <class-decl name='xfrm_policy_hthresh' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/netns/xfrm.h' line='23' column='1' id='52aaaba4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/net/netns/xfrm.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/netns/xfrm.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lbits4' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='rbits4' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='lbits6' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='472'>
+          <var-decl name='rbits6' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__9' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='110' column='1' id='a03c964b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='e151255a' visibility='default' filepath='include/net/netns/ipv6.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/ipv6.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='seq' type-id='19c2251e' visibility='default' filepath='include/net/netns/ipv6.h' line='113' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f77d4717' size-in-bits='64' id='104fa32f'/>
+      <pointer-type-def type-id='e1f906a3' size-in-bits='64' id='19a26ee3'/>
+      <typedef-decl name='u_char' type-id='002ac4a6' filepath='include/linux/types.h' line='84' column='1' id='b151a3a8'/>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='1024' id='6dcfc3c6'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <pointer-type-def type-id='89e527b7' size-in-bits='64' id='d1440a9f'/>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='192' id='0d5c291d'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='9b61d1a6' size-in-bits='384' id='bd1ec77b'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='469df90e' size-in-bits='64' id='95610bd4'/>
+      <pointer-type-def type-id='f1415d4d' size-in-bits='64' id='30e60925'/>
+      <qualified-type-def type-id='b77325d2' const='yes' id='2d144a5b'/>
+      <qualified-type-def type-id='54718f09' const='yes' id='c408da30'/>
+      <pointer-type-def type-id='c21690c0' size-in-bits='64' id='3ce3447a'/>
+      <pointer-type-def type-id='7f4a5e53' size-in-bits='64' id='d7c38177'/>
+      <pointer-type-def type-id='3482ac54' size-in-bits='64' id='d7a1e3c2'/>
+      <pointer-type-def type-id='923a53bf' size-in-bits='64' id='79efa3b3'/>
+      <pointer-type-def type-id='fc8b497c' size-in-bits='64' id='0023218e'/>
+      <array-type-def dimensions='1' type-id='094d8048' size-in-bits='64' id='5fd0d2fb'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='37688d8e' size-in-bits='64' id='950eceb8'/>
+      <pointer-type-def type-id='0331c4d6' size-in-bits='64' id='c8f8b049'/>
+      <class-decl name='ct_pcpu' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='89' column='1' id='4ec43a31'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/conntrack.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unconfirmed' type-id='af86905d' visibility='default' filepath='include/net/netns/conntrack.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dying' type-id='af86905d' visibility='default' filepath='include/net/netns/conntrack.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib6_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='faaac7a5'/>
+      <class-decl name='fib6_table' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='350' column='1' id='7147e7ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tb6_hlist' type-id='03a4a074' visibility='default' filepath='include/net/ip6_fib.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tb6_id' type-id='19c2251e' visibility='default' filepath='include/net/ip6_fib.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tb6_lock' type-id='fb4018a0' visibility='default' filepath='include/net/ip6_fib.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tb6_root' type-id='9f30e4ad' visibility='default' filepath='include/net/ip6_fib.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tb6_peers' type-id='27ebfa24' visibility='default' filepath='include/net/ip6_fib.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/net/ip6_fib.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='fib_seq' type-id='f0981eeb' visibility='default' filepath='include/net/ip6_fib.h' line='357' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_notifier_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='ef45f062'/>
+      <class-decl name='fib_rules_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='e079fe29'/>
+      <class-decl name='fib_table' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='234' column='1' id='a2b406b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tb_hlist' type-id='03a4a074' visibility='default' filepath='include/net/ip_fib.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tb_id' type-id='19c2251e' visibility='default' filepath='include/net/ip_fib.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tb_num_default' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip_fib.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tb_data' type-id='1d2c2b85' visibility='default' filepath='include/net/ip_fib.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='__data' type-id='c99b5ecd' visibility='default' filepath='include/net/ip_fib.h' line='240' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fqdir' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/net/inet_frag.h' line='9' column='1' id='84dbb257'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='high_thresh' type-id='bd54fe1a' visibility='default' filepath='include/net/inet_frag.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='low_thresh' type-id='bd54fe1a' visibility='default' filepath='include/net/inet_frag.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timeout' type-id='95e97e5e' visibility='default' filepath='include/net/inet_frag.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_dist' type-id='95e97e5e' visibility='default' filepath='include/net/inet_frag.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='f' type-id='f6c3a7a5' visibility='default' filepath='include/net/inet_frag.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='net' type-id='a2bff677' visibility='default' filepath='include/net/inet_frag.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dead' type-id='b50a4934' visibility='default' filepath='include/net/inet_frag.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rhashtable' type-id='9e095f93' visibility='default' filepath='include/net/inet_frag.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='mem' type-id='f22a8abb' visibility='default' filepath='include/net/inet_frag.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='destroy_work' type-id='ef9025d0' visibility='default' filepath='include/net/inet_frag.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icmp_mib' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='59' column='1' id='bd4dc4cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='8bbc0f7f' visibility='default' filepath='include/net/snmp.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icmpmsg_mib' size-in-bits='32768' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='64' column='1' id='b4bfe052'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='61cd76ae' visibility='default' filepath='include/net/snmp.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icmpv6_mib' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='71' column='1' id='c7afdfb7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='f0691bd3' visibility='default' filepath='include/net/snmp.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icmpv6msg_mib' size-in-bits='32768' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='81' column='1' id='1f91fd06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='61cd76ae' visibility='default' filepath='include/net/snmp.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_peer_base' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/inetpeer.h' line='61' column='1' id='27ebfa24'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_root' type-id='dec44472' visibility='default' filepath='include/net/inetpeer.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/inetpeer.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='total' type-id='95e97e5e' visibility='default' filepath='include/net/inetpeer.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip_conntrack_stat' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='8' column='1' id='be50a64d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='found' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='invalid' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ignore' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='insert' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='insert_failed' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='drop' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='early_drop' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='error' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='expect_new' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='expect_create' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='expect_delete' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='search_restart' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip_ra_chain' is-struct='yes' visibility='default' is-declaration-only='yes' id='4816a146'/>
+      <class-decl name='ipstats_mib' size-in-bits='2368' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='51' column='1' id='f52a1ce8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='2b89ba50' visibility='default' filepath='include/net/snmp.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='syncp' type-id='e4d85780' visibility='default' filepath='include/net/snmp.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv4_devconf' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/inetdevice.h' line='17' column='1' id='c2c09950'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysctl' type-id='eaa32e2f' visibility='default' filepath='include/linux/inetdevice.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='9e942f0d' visibility='default' filepath='include/linux/inetdevice.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='state' type-id='f066dd3c' visibility='default' filepath='include/linux/inetdevice.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_devconf' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/ipv6.h' line='13' column='1' id='55e8af82'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='forwarding' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='hop_limit' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mtu6' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='accept_ra' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='accept_redirects' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='autoconf' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dad_transmits' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='rtr_solicits' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rtr_solicit_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='rtr_solicit_max_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rtr_solicit_delay' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='force_mld_version' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mldv1_unsolicited_report_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='mldv2_unsolicited_report_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='use_tempaddr' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='temp_valid_lft' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='temp_prefered_lft' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='regen_max_retry' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_desync_factor' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='max_addresses' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='accept_ra_defrtr' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='accept_ra_min_hop_limit' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='accept_ra_pinfo' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='ignore_routes_with_linkdown' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='accept_ra_rtr_pref' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='rtr_probe_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='accept_ra_rt_info_min_plen' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='accept_ra_rt_info_max_plen' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='accept_ra_rt_table' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='proxy_ndp' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='accept_source_route' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='accept_ra_from_local' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='optimistic_dad' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='use_optimistic' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='disable_ipv6' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='drop_unicast_in_l2_multicast' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='accept_dad' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='force_tllao' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ndisc_notify' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='suppress_frag_ndisc' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='accept_ra_mtu' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='drop_unsolicited_na' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='stable_secret' type-id='b2fc06b3' visibility='default' filepath='include/linux/ipv6.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='use_oif_addrs_only' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='keep_addr_on_down' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='seg6_enabled' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='enhanced_dad' type-id='3f1a6b60' visibility='default' filepath='include/linux/ipv6.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='addr_gen_mode' type-id='3f1a6b60' visibility='default' filepath='include/linux/ipv6.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='disable_policy' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='ndisc_tclass' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='sysctl_header' type-id='11b101bb' visibility='default' filepath='include/linux/ipv6.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/ipv6.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/ipv6.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/ipv6.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/ipv6.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='linux_mib' size-in-bits='7680' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='104' column='1' id='e222a326'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='1868bbfa' visibility='default' filepath='include/net/snmp.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='linux_xfrm_mib' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='110' column='1' id='7f2c5e96'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='4fbdefa2' visibility='default' filepath='include/net/snmp.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_ct_event_notifier' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='75' column='1' id='a27aef61'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fcn' type-id='117abbea' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_dccp_net' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='47' column='1' id='ddb2f0ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dccp_loose' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dccp_timeout' type-id='67c1c82c' visibility='default' filepath='include/net/netns/conntrack.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_exp_event_notifier' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='161' column='1' id='602fd1a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fcn' type-id='c8fa3070' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_generic_net' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='21' column='1' id='80487c53'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/net/netns/conntrack.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_gre_net' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='66' column='1' id='ef266e4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='keymap_list' type-id='72f469ec' visibility='default' filepath='include/net/netns/conntrack.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timeouts' type-id='0d532ec1' visibility='default' filepath='include/net/netns/conntrack.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_icmp_net' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='42' column='1' id='8cc9c55b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/net/netns/conntrack.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_sctp_net' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='54' column='1' id='c91839d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeouts' type-id='67c1c82c' visibility='default' filepath='include/net/netns/conntrack.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_tcp_net' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='25' column='1' id='a2e01929'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeouts' type-id='27cbf0c8' visibility='default' filepath='include/net/netns/conntrack.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tcp_loose' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='tcp_be_liberal' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='tcp_max_retrans' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_udp_net' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='38' column='1' id='328aff41'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeouts' type-id='0d532ec1' visibility='default' filepath='include/net/netns/conntrack.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='prot_inuse' size-in-bits='2048' is-struct='yes' visibility='default' filepath='net/core/sock.c' line='3244' column='1' id='ac763c5d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='93e41790' visibility='default' filepath='net/core/sock.c' line='3245' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rt6_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='384b6d84'/>
+      <class-decl name='rt6_statistics' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='328' column='1' id='aa112583'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fib_nodes' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fib_route_nodes' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fib_rt_entries' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fib_rt_cache' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fib_discarded_routes' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='fib_rt_alloc' type-id='49178f86' visibility='default' filepath='include/net/ip6_fib.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fib_rt_uncache' type-id='49178f86' visibility='default' filepath='include/net/ip6_fib.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='seg6_pernet_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='990cce78'/>
+      <class-decl name='tcp_fastopen_context' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/tcp.h' line='1671' column='1' id='f77d4717'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='5b02a6fc' visibility='default' filepath='include/net/tcp.h' line='1672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num' type-id='95e97e5e' visibility='default' filepath='include/net/tcp.h' line='1673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/tcp.h' line='1674' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcp_mib' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='92' column='1' id='e1f906a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='d2baa450' visibility='default' filepath='include/net/snmp.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='udp_mib' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='98' column='1' id='89e527b7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='307ac9b4' visibility='default' filepath='include/net/snmp.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_policy_hash' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/netns/xfrm.h' line='14' column='1' id='9b61d1a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='table' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hmask' type-id='f0981eeb' visibility='default' filepath='include/net/netns/xfrm.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dbits4' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='sbits4' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='dbits6' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='sbits6' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xt_table' is-struct='yes' visibility='default' is-declaration-only='yes' id='469df90e'/>
+      <pointer-type-def type-id='b5975902' size-in-bits='64' id='9917918c'/>
+      <union-decl name='__anonymous_union__5' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/net/netns/generic.h' line='29' column='1' id='1a99b3b8'>
+        <data-member access='private'>
+          <var-decl name='s' type-id='88d8a388' visibility='default' filepath='include/net/netns/generic.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ptr' type-id='baf98fd3' visibility='default' filepath='include/net/netns/generic.h' line='35' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='6d22a61b' size-in-bits='64' id='34c443b7'/>
+      <pointer-type-def type-id='a66ce823' size-in-bits='64' id='7e5b15cf'/>
+      <pointer-type-def type-id='b98b24d0' size-in-bits='64' id='d6965222'/>
+      <pointer-type-def type-id='56958353' size-in-bits='64' id='ce828d9f'/>
+      <pointer-type-def type-id='165b46a0' size-in-bits='64' id='9f403612'/>
+      <pointer-type-def type-id='4c671f3a' size-in-bits='64' id='79b8da5c'/>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='32768' id='61cd76ae'>
+        <subrange length='512' type-id='7ff19f0f' id='c11630dd'/>
+      </array-type-def>
+      <qualified-type-def type-id='01c546da' const='yes' id='f1415d4d'/>
+      <pointer-type-def type-id='e56bc2e5' size-in-bits='64' id='f6c3a7a5'/>
+      <pointer-type-def type-id='ad974870' size-in-bits='64' id='117abbea'/>
+      <pointer-type-def type-id='27ca88ce' size-in-bits='64' id='c8fa3070'/>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='1024' id='9e942f0d'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='2048' id='93e41790'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7799da43' size-in-bits='256' id='5b02a6fc'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='fib6_node' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='70' column='1' id='9f30e4ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent' type-id='f7b83e6d' visibility='default' filepath='include/net/ip6_fib.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='left' type-id='f7b83e6d' visibility='default' filepath='include/net/ip6_fib.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='right' type-id='f7b83e6d' visibility='default' filepath='include/net/ip6_fib.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='leaf' type-id='fe454a76' visibility='default' filepath='include/net/ip6_fib.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fn_bit' type-id='d315442e' visibility='default' filepath='include/net/ip6_fib.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='fn_flags' type-id='d315442e' visibility='default' filepath='include/net/ip6_fib.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='fn_sernum' type-id='95e97e5e' visibility='default' filepath='include/net/ip6_fib.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rr_ptr' type-id='fe454a76' visibility='default' filepath='include/net/ip6_fib.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip6_fib.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hlist_nulls_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/list_nulls.h' line='21' column='1' id='af86905d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='6cf6468f' visibility='default' filepath='include/linux/list_nulls.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_hashinfo' size-in-bits='4608' is-struct='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='124' column='1' id='3482ac54'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ehash' type-id='77011cbc' visibility='default' filepath='include/net/inet_hashtables.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ehash_locks' type-id='cff2d845' visibility='default' filepath='include/net/inet_hashtables.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ehash_mask' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ehash_locks_mask' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bind_bucket_cachep' type-id='f3b4aca8' visibility='default' filepath='include/net/inet_hashtables.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bhash' type-id='fd53db64' visibility='default' filepath='include/net/inet_hashtables.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bhash_size' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='lhash2_mask' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lhash2' type-id='e0087b68' visibility='default' filepath='include/net/inet_hashtables.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='listening_hash' type-id='e3638da9' visibility='default' filepath='include/net/inet_hashtables.h' line='159' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_stable_secret' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/ipv6.h' line='65' column='1' id='b2fc06b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='initialized' type-id='b50a4934' visibility='default' filepath='include/linux/ipv6.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='secret' type-id='f6ed712a' visibility='default' filepath='include/linux/ipv6.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_queue_handler' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='27' column='1' id='b77325d2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='outfn' type-id='c2147f48' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nf_hook_drop' type-id='9b92b29b' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rhashtable' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/rhashtable-types.h' line='81' column='1' id='9e095f93'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tbl' type-id='35e7a722' visibility='default' filepath='include/linux/rhashtable-types.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key_len' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable-types.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_elems' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable-types.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='p' type-id='e4c11782' visibility='default' filepath='include/linux/rhashtable-types.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rhlist' type-id='b50a4934' visibility='default' filepath='include/linux/rhashtable-types.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='run_work' type-id='ef9025d0' visibility='default' filepath='include/linux/rhashtable-types.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/rhashtable-types.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/rhashtable-types.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='nelems' type-id='49178f86' visibility='default' filepath='include/linux/rhashtable-types.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcp_congestion_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='54718f09'/>
+      <class-decl name='__anonymous_struct__1' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netns/generic.h' line='30' column='1' id='88d8a388'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/net/netns/generic.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/netns/generic.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='nf_hookfn' type-id='272e7e29' filepath='include/linux/netfilter.h' line='76' column='1' id='0331c4d6'/>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='2368' id='2b89ba50'>
+        <subrange length='37' type-id='7ff19f0f' id='aa6426fb'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='320' id='67c1c82c'>
+        <subrange length='10' type-id='7ff19f0f' id='487da03a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='448' id='27cbf0c8'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='7680' id='1868bbfa'>
+        <subrange length='120' type-id='7ff19f0f' id='1ec4f032'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='1024' id='d2baa450'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='1792' id='8bbc0f7f'>
+        <subrange length='28' type-id='7ff19f0f' id='3db583d7'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='1856' id='4fbdefa2'>
+        <subrange length='29' type-id='7ff19f0f' id='01b8f6fa'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='384' id='f0691bd3'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='576' id='307ac9b4'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <pointer-type-def type-id='984972f4' size-in-bits='64' id='35e7a722'/>
+      <pointer-type-def type-id='faaac7a6' size-in-bits='64' id='fe454a76'/>
+      <pointer-type-def type-id='9f30e4ad' size-in-bits='64' id='f7b83e6d'/>
+      <pointer-type-def type-id='5bd248e7' size-in-bits='64' id='6cf6468f'/>
+      <pointer-type-def type-id='082b64be' size-in-bits='64' id='fd53db64'/>
+      <pointer-type-def type-id='08400b46' size-in-bits='64' id='77011cbc'/>
+      <pointer-type-def type-id='42b16dba' size-in-bits='64' id='e0087b68'/>
+      <array-type-def dimensions='1' type-id='42b16dba' size-in-bits='4096' id='e3638da9'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <pointer-type-def type-id='33f50c8e' size-in-bits='64' id='c2147f48'/>
+      <class-decl name='in6_addr' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/in6.h' line='33' column='1' id='f6ed712a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='in6_u' type-id='0efc37b8' visibility='default' filepath='include/uapi/linux/in6.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_frags' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/net/inet_frag.h' line='98' column='1' id='e56bc2e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='qsize' type-id='f0981eeb' visibility='default' filepath='include/net/inet_frag.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='constructor' type-id='82a6d477' visibility='default' filepath='include/net/inet_frag.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destructor' type-id='7e20177b' visibility='default' filepath='include/net/inet_frag.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='frag_expire' type-id='9582ad9a' visibility='default' filepath='include/net/inet_frag.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='frags_cachep' type-id='f3b4aca8' visibility='default' filepath='include/net/inet_frag.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='frags_cache_name' type-id='80f4b756' visibility='default' filepath='include/net/inet_frag.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rhash_params' type-id='e4c11782' visibility='default' filepath='include/net/inet_frag.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/inet_frag.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='completion' type-id='f9fef04f' visibility='default' filepath='include/net/inet_frag.h' line='109' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_logger' is-struct='yes' visibility='default' is-declaration-only='yes' id='01c546da'/>
+      <class-decl name='rhashtable_params' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/rhashtable-types.h' line='56' column='1' id='e4c11782'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nelem_hint' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='key_len' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='key_offset' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='head_offset' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_size' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable-types.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='min_size' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='automatic_shrinking' type-id='b50a4934' visibility='default' filepath='include/linux/rhashtable-types.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hashfn' type-id='07fa0d18' visibility='default' filepath='include/linux/rhashtable-types.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='obj_hashfn' type-id='365fa902' visibility='default' filepath='include/linux/rhashtable-types.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='obj_cmpfn' type-id='a8e15d8c' visibility='default' filepath='include/linux/rhashtable-types.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='6ddd203f' size-in-bits='64' id='9b92b29b'/>
+      <class-decl name='bucket_table' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/rhashtable.h' line='76' column='1' id='984972f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nest' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hash_rnd' type-id='19c2251e' visibility='default' filepath='include/linux/rhashtable.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='walkers' type-id='72f469ec' visibility='default' filepath='include/linux/rhashtable.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/rhashtable.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='future_tbl' type-id='35e7a722' visibility='default' filepath='include/linux/rhashtable.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dep_map' type-id='d34a605e' visibility='default' filepath='include/linux/rhashtable.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='buckets' type-id='7c792e5e' visibility='default' filepath='include/linux/rhashtable.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib6_info' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='136' column='1' id='faaac7a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fib6_table' type-id='7156b317' visibility='default' filepath='include/net/ip6_fib.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fib6_next' type-id='fe454a76' visibility='default' filepath='include/net/ip6_fib.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fib6_node' type-id='f7b83e6d' visibility='default' filepath='include/net/ip6_fib.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='faf198da' visibility='default' filepath='include/net/ip6_fib.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fib6_nsiblings' type-id='f0981eeb' visibility='default' filepath='include/net/ip6_fib.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='fib6_ref' type-id='64615833' visibility='default' filepath='include/net/ip6_fib.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='expires' type-id='7359adad' visibility='default' filepath='include/net/ip6_fib.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fib6_metrics' type-id='8eff91b0' visibility='default' filepath='include/net/ip6_fib.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fib6_dst' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='fib6_flags' type-id='19c2251e' visibility='default' filepath='include/net/ip6_fib.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fib6_src' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='fib6_prefsrc' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fib6_metric' type-id='19c2251e' visibility='default' filepath='include/net/ip6_fib.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='fib6_protocol' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1064'>
+          <var-decl name='fib6_type' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='should_flush' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='dst_nocount' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='dst_nopolicy' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='dst_host' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='fib6_destroying' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1072'>
+          <var-decl name='unused' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip6_fib.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='nh' type-id='f32120a7' visibility='default' filepath='include/net/ip6_fib.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='fib6_nh' type-id='7be723ef' visibility='default' filepath='include/net/ip6_fib.h' line='174' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hlist_nulls_node' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/list_nulls.h' line='25' column='1' id='5bd248e7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='6cf6468f' visibility='default' filepath='include/linux/list_nulls.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pprev' type-id='2cb135bf' visibility='default' filepath='include/linux/list_nulls.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_bind_hashbucket' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='101' column='1' id='082b64be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/inet_hashtables.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='chain' type-id='e151255a' visibility='default' filepath='include/net/inet_hashtables.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_ehash_bucket' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='38' column='1' id='08400b46'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chain' type-id='af86905d' visibility='default' filepath='include/net/inet_hashtables.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_listen_hashbucket' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='112' column='1' id='42b16dba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/inet_hashtables.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='ba169a6c' visibility='default' filepath='include/net/inet_hashtables.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='rht_hashfn_t' type-id='bc00c03b' filepath='include/linux/rhashtable-types.h' line='38' column='1' id='07fa0d18'/>
+      <typedef-decl name='rht_obj_cmpfn_t' type-id='d8c458ae' filepath='include/linux/rhashtable-types.h' line='40' column='1' id='a8e15d8c'/>
+      <typedef-decl name='rht_obj_hashfn_t' type-id='bc00c03b' filepath='include/linux/rhashtable-types.h' line='39' column='1' id='365fa902'/>
+      <union-decl name='__anonymous_union__11' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/in6.h' line='34' column='1' id='0efc37b8'>
+        <data-member access='private'>
+          <var-decl name='u6_addr8' type-id='9396cabb' visibility='default' filepath='include/uapi/linux/in6.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u6_addr16' type-id='7f112b69' visibility='default' filepath='include/uapi/linux/in6.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u6_addr32' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/in6.h' line='38' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='b6c1136f' size-in-bits='64' id='7e20177b'/>
+      <pointer-type-def type-id='54b1caeb' size-in-bits='64' id='82a6d477'/>
+      <array-type-def dimensions='1' type-id='84a5c3d4' size-in-bits='128' id='7f112b69'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <pointer-type-def type-id='e51de182' size-in-bits='64' id='8eff91b0'/>
+      <array-type-def dimensions='1' type-id='979d5bbb' size-in-bits='infinite' id='7be723ef'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='6cf6468f' size-in-bits='64' id='2cb135bf'/>
+      <pointer-type-def type-id='b4bb7eac' size-in-bits='64' id='d8c458ae'/>
+      <pointer-type-def type-id='b754514f' size-in-bits='64' id='f32120a7'/>
+      <array-type-def dimensions='1' type-id='0f8b1896' size-in-bits='infinite' id='7c792e5e'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='rt6key' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='102' column='1' id='d7f36d8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='f6ed712a' visibility='default' filepath='include/net/ip6_fib.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='plen' type-id='95e97e5e' visibility='default' filepath='include/net/ip6_fib.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='243799e7' size-in-bits='64' id='bc00c03b'/>
+      <union-decl name='__anonymous_union__5' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='115' column='1' id='ba169a6c'>
+        <data-member access='private'>
+          <var-decl name='head' type-id='e151255a' visibility='default' filepath='include/net/inet_hashtables.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nulls_head' type-id='af86905d' visibility='default' filepath='include/net/inet_hashtables.h' line='117' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__42' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/ip6_fib.h' line='146' column='1' id='faf198da'>
+        <data-member access='private'>
+          <var-decl name='fib6_siblings' type-id='72f469ec' visibility='default' filepath='include/net/ip6_fib.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nh_list' type-id='72f469ec' visibility='default' filepath='include/net/ip6_fib.h' line='148' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='c0065bf0' size-in-bits='64' id='0f8b1896'/>
+      <class-decl name='dst_metrics' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/dst.h' line='82' column='1' id='e51de182'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='metrics' type-id='46fc18d9' visibility='default' filepath='include/net/dst.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/dst.h' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib6_nh' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='125' column='1' id='979d5bbb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nh_common' type-id='e1f89457' visibility='default' filepath='include/net/ip6_fib.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='last_probe' type-id='7359adad' visibility='default' filepath='include/net/ip6_fib.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rt6i_pcpu' type-id='1ead5d78' visibility='default' filepath='include/net/ip6_fib.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rt6i_exception_bucket' type-id='cc9f99b2' visibility='default' filepath='include/net/ip6_fib.h' line='133' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nexthop' is-struct='yes' visibility='default' is-declaration-only='yes' id='b754514f'/>
+      <pointer-type-def type-id='db281924' size-in-bits='64' id='cc9f99b2'/>
+      <pointer-type-def type-id='6ceb7783' size-in-bits='64' id='1ead5d78'/>
+      <class-decl name='fib_nh_common' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='80' column='1' id='e1f89457'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nhc_dev' type-id='68a2d05c' visibility='default' filepath='include/net/ip_fib.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nhc_oif' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nhc_scope' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='nhc_family' type-id='f9b06939' visibility='default' filepath='include/net/ip_fib.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='nhc_gw_family' type-id='f9b06939' visibility='default' filepath='include/net/ip_fib.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='nhc_flags' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nhc_lwtstate' type-id='d19f4fca' visibility='default' filepath='include/net/ip_fib.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nhc_gw' type-id='37def4b7' visibility='default' filepath='include/net/ip_fib.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nhc_weight' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='nhc_upper_bound' type-id='49178f86' visibility='default' filepath='include/net/ip_fib.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nhc_pcpu_rth_output' type-id='0f830eef' visibility='default' filepath='include/net/ip_fib.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nhc_rth_input' type-id='c8f5869f' visibility='default' filepath='include/net/ip_fib.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='nhc_exceptions' type-id='09c59e98' visibility='default' filepath='include/net/ip_fib.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rhash_lock_head' is-struct='yes' visibility='default' filepath='include/linux/rhashtable.h' line='47' column='1' id='c0065bf0'/>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='544' id='46fc18d9'>
+        <subrange length='17' type-id='7ff19f0f' id='888ad0ed'/>
+      </array-type-def>
+      <pointer-type-def type-id='ba046e9a' size-in-bits='64' id='09c59e98'/>
+      <pointer-type-def type-id='44644afc' size-in-bits='64' id='d19f4fca'/>
+      <pointer-type-def type-id='384b6d85' size-in-bits='64' id='6ceb7783'/>
+      <pointer-type-def type-id='6aebc4a7' size-in-bits='64' id='c8f5869f'/>
+      <pointer-type-def type-id='c8f5869f' size-in-bits='64' id='0f830eef'/>
+      <class-decl name='rt6_exception_bucket' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='109' column='1' id='db281924'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chain' type-id='e151255a' visibility='default' filepath='include/net/ip6_fib.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='depth' type-id='95e97e5e' visibility='default' filepath='include/net/ip6_fib.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__43' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/ip_fib.h' line='89' column='1' id='37def4b7'>
+        <data-member access='private'>
+          <var-decl name='ipv4' type-id='78a133c2' visibility='default' filepath='include/net/ip_fib.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ipv6' type-id='f6ed712a' visibility='default' filepath='include/net/ip_fib.h' line='91' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='fnhe_hash_bucket' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='72' column='1' id='ba046e9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chain' type-id='aa804387' visibility='default' filepath='include/net/ip_fib.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lwtunnel_state' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/lwtunnel.h' line='25' column='1' id='44644afc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='d315442e' visibility='default' filepath='include/net/lwtunnel.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/net/lwtunnel.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='headroom' type-id='d315442e' visibility='default' filepath='include/net/lwtunnel.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='refcnt' type-id='49178f86' visibility='default' filepath='include/net/lwtunnel.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='orig_output' type-id='0023218e' visibility='default' filepath='include/net/lwtunnel.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='orig_input' type-id='d2e00785' visibility='default' filepath='include/net/lwtunnel.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/lwtunnel.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='data' type-id='167619f6' visibility='default' filepath='include/net/lwtunnel.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rt6_info' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='177' column='1' id='384b6d85'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dst' type-id='772a4ddf' visibility='default' filepath='include/net/ip6_fib.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='from' type-id='fe454a76' visibility='default' filepath='include/net/ip6_fib.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='sernum' type-id='95e97e5e' visibility='default' filepath='include/net/ip6_fib.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='rt6i_dst' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rt6i_src' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='rt6i_gateway' type-id='f6ed712a' visibility='default' filepath='include/net/ip6_fib.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rt6i_idev' type-id='f026b16c' visibility='default' filepath='include/net/ip6_fib.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='rt6i_flags' type-id='19c2251e' visibility='default' filepath='include/net/ip6_fib.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='rt6i_uncached' type-id='72f469ec' visibility='default' filepath='include/net/ip6_fib.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='rt6i_uncached_list' type-id='e9bf5d35' visibility='default' filepath='include/net/ip6_fib.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='rt6i_nfheader_len' type-id='8efea9e5' visibility='default' filepath='include/net/ip6_fib.h' line='192' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rtable' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/net/route.h' line='49' column='1' id='6aebc4a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dst' type-id='772a4ddf' visibility='default' filepath='include/net/route.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rt_genid' type-id='95e97e5e' visibility='default' filepath='include/net/route.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='rt_flags' type-id='f0981eeb' visibility='default' filepath='include/net/route.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rt_type' type-id='d315442e' visibility='default' filepath='include/net/route.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='rt_is_input' type-id='8f048e17' visibility='default' filepath='include/net/route.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='984'>
+          <var-decl name='rt_uses_gateway' type-id='8f048e17' visibility='default' filepath='include/net/route.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='rt_iif' type-id='95e97e5e' visibility='default' filepath='include/net/route.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='rt_gw_family' type-id='f9b06939' visibility='default' filepath='include/net/route.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='' type-id='77077303' visibility='default' filepath='include/net/route.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='rt_mtu_locked' type-id='19c2251e' visibility='default' filepath='include/net/route.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='rt_pmtu' type-id='19c2251e' visibility='default' filepath='include/net/route.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='rt_uncached' type-id='72f469ec' visibility='default' filepath='include/net/route.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rt_uncached_list' type-id='e9bf5d35' visibility='default' filepath='include/net/route.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e92f1a2f' size-in-bits='64' id='aa804387'/>
+      <pointer-type-def type-id='8db8de2c' size-in-bits='64' id='f026b16c'/>
+      <pointer-type-def type-id='918604f1' size-in-bits='64' id='d2e00785'/>
+      <class-decl name='dst_entry' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/dst.h' line='24' column='1' id='772a4ddf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/net/dst.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='6d30564f' visibility='default' filepath='include/net/dst.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_metrics' type-id='7359adad' visibility='default' filepath='include/net/dst.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='expires' type-id='7359adad' visibility='default' filepath='include/net/dst.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xfrm' type-id='328dda6e' visibility='default' filepath='include/net/dst.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='input' type-id='d2e00785' visibility='default' filepath='include/net/dst.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='output' type-id='0023218e' visibility='default' filepath='include/net/dst.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/net/dst.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='obsolete' type-id='a2185560' visibility='default' filepath='include/net/dst.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='header_len' type-id='8efea9e5' visibility='default' filepath='include/net/dst.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='trailer_len' type-id='8efea9e5' visibility='default' filepath='include/net/dst.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='__refcnt' type-id='49178f86' visibility='default' filepath='include/net/dst.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='__use' type-id='95e97e5e' visibility='default' filepath='include/net/dst.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='lastuse' type-id='7359adad' visibility='default' filepath='include/net/dst.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='lwtstate' type-id='d19f4fca' visibility='default' filepath='include/net/dst.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/dst.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='error' type-id='a2185560' visibility='default' filepath='include/net/dst.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='848'>
+          <var-decl name='__pad' type-id='a2185560' visibility='default' filepath='include/net/dst.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='tclassid' type-id='3f1a6b60' visibility='default' filepath='include/net/dst.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='6b1203e5' size-in-bits='64' id='e9bf5d35'/>
+      <union-decl name='__anonymous_union__44' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/route.h' line='62' column='1' id='77077303'>
+        <data-member access='private'>
+          <var-decl name='rt_gw4' type-id='78a133c2' visibility='default' filepath='include/net/route.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rt_gw6' type-id='f6ed712a' visibility='default' filepath='include/net/route.h' line='64' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='32358857' size-in-bits='64' id='6d30564f'/>
+      <class-decl name='fib_nh_exception' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='58' column='1' id='e92f1a2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fnhe_next' type-id='aa804387' visibility='default' filepath='include/net/ip_fib.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fnhe_genid' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fnhe_daddr' type-id='78a133c2' visibility='default' filepath='include/net/ip_fib.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fnhe_pmtu' type-id='19c2251e' visibility='default' filepath='include/net/ip_fib.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='fnhe_mtu_locked' type-id='b50a4934' visibility='default' filepath='include/net/ip_fib.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fnhe_gw' type-id='78a133c2' visibility='default' filepath='include/net/ip_fib.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fnhe_expires' type-id='7359adad' visibility='default' filepath='include/net/ip_fib.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fnhe_rth_input' type-id='c8f5869f' visibility='default' filepath='include/net/ip_fib.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fnhe_rth_output' type-id='c8f5869f' visibility='default' filepath='include/net/ip_fib.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fnhe_stamp' type-id='7359adad' visibility='default' filepath='include/net/ip_fib.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip_fib.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet6_dev' size-in-bits='5632' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='163' column='1' id='8db8de2c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/net/if_inet6.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr_list' type-id='72f469ec' visibility='default' filepath='include/net/if_inet6.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mc_list' type-id='d1ca3a89' visibility='default' filepath='include/net/if_inet6.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mc_tomb' type-id='d1ca3a89' visibility='default' filepath='include/net/if_inet6.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mc_lock' type-id='fb4018a0' visibility='default' filepath='include/net/if_inet6.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='mc_qrv' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='mc_gq_running' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='mc_ifc_count' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='376'>
+          <var-decl name='mc_dad_count' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mc_v1_seen' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mc_qi' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mc_qri' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mc_maxdelay' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mc_gq_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mc_ifc_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='mc_dad_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ac_list' type-id='034d7ded' visibility='default' filepath='include/net/if_inet6.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/if_inet6.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/if_inet6.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='if_flags' type-id='3f1a6b60' visibility='default' filepath='include/net/if_inet6.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='dead' type-id='95e97e5e' visibility='default' filepath='include/net/if_inet6.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='desync_factor' type-id='19c2251e' visibility='default' filepath='include/net/if_inet6.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='rndid' type-id='d2f7b56a' visibility='default' filepath='include/net/if_inet6.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='tempaddr_list' type-id='72f469ec' visibility='default' filepath='include/net/if_inet6.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='token' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='nd_parms' type-id='affe0fe3' visibility='default' filepath='include/net/if_inet6.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='cnf' type-id='55e8af82' visibility='default' filepath='include/net/if_inet6.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='stats' type-id='0e97f526' visibility='default' filepath='include/net/if_inet6.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='rs_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='rs_interval' type-id='3158a266' visibility='default' filepath='include/net/if_inet6.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5408'>
+          <var-decl name='rs_probes' type-id='8f048e17' visibility='default' filepath='include/net/if_inet6.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='tstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/if_inet6.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uncached_list' size-in-bits='192' is-struct='yes' visibility='default' filepath='net/ipv4/route.c' line='1502' column='1' id='6b1203e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='net/ipv4/route.c' line='1503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='net/ipv4/route.c' line='1504' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='cb961c68' size-in-bits='64' id='328dda6e'/>
+      <pointer-type-def type-id='1883cd3d' size-in-bits='64' id='034d7ded'/>
+      <pointer-type-def type-id='cc23d6f1' size-in-bits='64' id='d1ca3a89'/>
+      <pointer-type-def type-id='1429eee5' size-in-bits='64' id='affe0fe3'/>
+      <class-decl name='ipv6_devstat' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='156' column='1' id='0e97f526'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='proc_dir_entry' type-id='d077e928' visibility='default' filepath='include/net/if_inet6.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ipv6' type-id='30897c4e' visibility='default' filepath='include/net/if_inet6.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='icmpv6dev' type-id='6551bd60' visibility='default' filepath='include/net/if_inet6.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='icmpv6msgdev' type-id='793f0d19' visibility='default' filepath='include/net/if_inet6.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_state' size-in-bits='5824' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='147' column='1' id='cb961c68'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xs_net' type-id='c9df1e6c' visibility='default' filepath='include/net/xfrm.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='fc320d58' visibility='default' filepath='include/net/xfrm.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bysrc' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='byspi' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/xfrm.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/xfrm.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='id' type-id='d07aeeaa' visibility='default' filepath='include/net/xfrm.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sel' type-id='8eb3b1fe' visibility='default' filepath='include/net/xfrm.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='mark' type-id='0084df72' visibility='default' filepath='include/net/xfrm.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='if_id' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='tfcpad' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='genid' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='km' type-id='12872440' visibility='default' filepath='include/net/xfrm.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='props' type-id='35535e57' visibility='default' filepath='include/net/xfrm.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='lft' type-id='4ca5f2ad' visibility='default' filepath='include/net/xfrm.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='aalg' type-id='255e0487' visibility='default' filepath='include/net/xfrm.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='ealg' type-id='1663a26e' visibility='default' filepath='include/net/xfrm.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='calg' type-id='1663a26e' visibility='default' filepath='include/net/xfrm.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='aead' type-id='c56b5ee4' visibility='default' filepath='include/net/xfrm.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='geniv' type-id='80f4b756' visibility='default' filepath='include/net/xfrm.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='encap' type-id='47541e34' visibility='default' filepath='include/net/xfrm.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='coaddr' type-id='47a1c9f4' visibility='default' filepath='include/net/xfrm.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='tunnel' type-id='328dda6e' visibility='default' filepath='include/net/xfrm.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='tunnel_users' type-id='49178f86' visibility='default' filepath='include/net/xfrm.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='replay' type-id='c59d261e' visibility='default' filepath='include/net/xfrm.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='replay_esn' type-id='71411b0f' visibility='default' filepath='include/net/xfrm.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='preplay' type-id='c59d261e' visibility='default' filepath='include/net/xfrm.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='preplay_esn' type-id='71411b0f' visibility='default' filepath='include/net/xfrm.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='repl' type-id='400b9143' visibility='default' filepath='include/net/xfrm.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='xflags' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='replay_maxage' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='replay_maxdiff' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='rtimer' type-id='abe41e67' visibility='default' filepath='include/net/xfrm.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='stats' type-id='c1960caa' visibility='default' filepath='include/net/xfrm.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='curlft' type-id='29d519c9' visibility='default' filepath='include/net/xfrm.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='mtimer' type-id='b6993efc' visibility='default' filepath='include/net/xfrm.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='xso' type-id='f5284c72' visibility='default' filepath='include/net/xfrm.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='saved_tmo' type-id='bd54fe1a' visibility='default' filepath='include/net/xfrm.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='lastused' type-id='1afd27ac' visibility='default' filepath='include/net/xfrm.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='xfrag' type-id='06c0432f' visibility='default' filepath='include/net/xfrm.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='type' type-id='4e812b7a' visibility='default' filepath='include/net/xfrm.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='inner_mode' type-id='fdc52c40' visibility='default' filepath='include/net/xfrm.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5528'>
+          <var-decl name='inner_mode_iaf' type-id='fdc52c40' visibility='default' filepath='include/net/xfrm.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5552'>
+          <var-decl name='outer_mode' type-id='fdc52c40' visibility='default' filepath='include/net/xfrm.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='type_offload' type-id='2f8b61b4' visibility='default' filepath='include/net/xfrm.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='security' type-id='b07c2494' visibility='default' filepath='include/net/xfrm.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/net/xfrm.h' line='259' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='64' id='d2f7b56a'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <pointer-type-def type-id='3d6abfbb' size-in-bits='64' id='400b9143'/>
+      <pointer-type-def type-id='9819baf4' size-in-bits='64' id='4e812b7a'/>
+      <pointer-type-def type-id='9d07f7d6' size-in-bits='64' id='2f8b61b4'/>
+      <pointer-type-def type-id='1b8801b2' size-in-bits='64' id='6551bd60'/>
+      <pointer-type-def type-id='e4ca98d1' size-in-bits='64' id='793f0d19'/>
+      <class-decl name='ifacaddr6' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='140' column='1' id='1883cd3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='aca_addr' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='aca_rt' type-id='fe454a76' visibility='default' filepath='include/net/if_inet6.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='aca_next' type-id='034d7ded' visibility='default' filepath='include/net/if_inet6.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='aca_addr_lst' type-id='03a4a074' visibility='default' filepath='include/net/if_inet6.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='aca_users' type-id='95e97e5e' visibility='default' filepath='include/net/if_inet6.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='aca_refcnt' type-id='64615833' visibility='default' filepath='include/net/if_inet6.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='aca_cstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='aca_tstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/if_inet6.h' line='149' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ifmcaddr6' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='114' column='1' id='cc23d6f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mca_addr' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idev' type-id='f026b16c' visibility='default' filepath='include/net/if_inet6.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='d1ca3a89' visibility='default' filepath='include/net/if_inet6.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mca_sources' type-id='60f4096f' visibility='default' filepath='include/net/if_inet6.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mca_tomb' type-id='60f4096f' visibility='default' filepath='include/net/if_inet6.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mca_sfmode' type-id='f0981eeb' visibility='default' filepath='include/net/if_inet6.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='mca_crcount' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mca_sfcount' type-id='f05e8e77' visibility='default' filepath='include/net/if_inet6.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mca_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mca_flags' type-id='f0981eeb' visibility='default' filepath='include/net/if_inet6.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='mca_users' type-id='95e97e5e' visibility='default' filepath='include/net/if_inet6.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mca_refcnt' type-id='64615833' visibility='default' filepath='include/net/if_inet6.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='mca_lock' type-id='fb4018a0' visibility='default' filepath='include/net/if_inet6.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='mca_cstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='mca_tstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='129' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neigh_parms' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='70' column='1' id='1429eee5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='net' type-id='c9df1e6c' visibility='default' filepath='include/net/neighbour.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/net/neighbour.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/neighbour.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='neigh_setup' type-id='8eff9c66' visibility='default' filepath='include/net/neighbour.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tbl' type-id='6bbe39a7' visibility='default' filepath='include/net/neighbour.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sysctl_table' type-id='eaa32e2f' visibility='default' filepath='include/net/neighbour.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dead' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/neighbour.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/neighbour.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='reachable_time' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='data' type-id='77ba73f2' visibility='default' filepath='include/net/neighbour.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='data_state' type-id='f066dd3c' visibility='default' filepath='include/net/neighbour.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_id' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='25' column='1' id='d07aeeaa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='daddr' type-id='c210d497' visibility='default' filepath='include/uapi/linux/xfrm.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='spi' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/xfrm.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='proto' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_lifetime_cfg' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='66' column='1' id='4ca5f2ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='soft_byte_limit' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hard_byte_limit' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='soft_packet_limit' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hard_packet_limit' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='soft_add_expires_seconds' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hard_add_expires_seconds' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='soft_use_expires_seconds' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hard_use_expires_seconds' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_lifetime_cur' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='77' column='1' id='29d519c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bytes' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='packets' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='add_time' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='use_time' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_mark' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='317' column='1' id='0084df72'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='v' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='m' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='319' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_mode' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='135' column='1' id='fdc52c40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='encap' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='family' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_replay_state' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='84' column='1' id='c59d261e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='oseq' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='seq' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bitmap' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_selector' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='49' column='1' id='8eb3b1fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='daddr' type-id='c210d497' visibility='default' filepath='include/uapi/linux/xfrm.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='saddr' type-id='c210d497' visibility='default' filepath='include/uapi/linux/xfrm.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dport' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/xfrm.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='dport_mask' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/xfrm.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='sport' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/xfrm.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='sport_mask' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/xfrm.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='family' type-id='d315442e' visibility='default' filepath='include/uapi/linux/xfrm.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='prefixlen_d' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='prefixlen_s' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='proto' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ifindex' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/xfrm.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='user' type-id='70734f24' visibility='default' filepath='include/uapi/linux/xfrm.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_state_offload' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='128' column='1' id='f5284c72'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/net/xfrm.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offload_handle' type-id='7359adad' visibility='default' filepath='include/net/xfrm.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_exthdrs' type-id='f0981eeb' visibility='default' filepath='include/net/xfrm.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_state_walk' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='119' column='1' id='12872440'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='all' type-id='72f469ec' visibility='default' filepath='include/net/xfrm.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='dying' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='proto' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='seq' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='filter' type-id='14a0013e' visibility='default' filepath='include/net/xfrm.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_stats' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='122' column='1' id='c1960caa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='replay_window' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='replay' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='integrity_failed' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__11' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/xfrm.h' line='171' column='1' id='35535e57'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reqid' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mode' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='replay_window' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='aalgo' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='ealgo' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='calgo' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='family' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='saddr' type-id='c210d497' visibility='default' filepath='include/net/xfrm.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='header_len' type-id='95e97e5e' visibility='default' filepath='include/net/xfrm.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='trailer_len' type-id='95e97e5e' visibility='default' filepath='include/net/xfrm.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='extra_flags' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='smark' type-id='0084df72' visibility='default' filepath='include/net/xfrm.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__36' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/xfrm.h' line='149' column='1' id='fc320d58'>
+        <data-member access='private'>
+          <var-decl name='gclist' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='bydst' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='151' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='c210d497' size-in-bits='64' id='47a1c9f4'/>
+      <pointer-type-def type-id='4da03818' size-in-bits='64' id='1663a26e'/>
+      <pointer-type-def type-id='307587ae' size-in-bits='64' id='c56b5ee4'/>
+      <pointer-type-def type-id='faa1424f' size-in-bits='64' id='255e0487'/>
+      <pointer-type-def type-id='f9cce85e' size-in-bits='64' id='47541e34'/>
+      <pointer-type-def type-id='b3f5c5f7' size-in-bits='64' id='71411b0f'/>
+      <pointer-type-def type-id='cddfb84e' size-in-bits='64' id='b07c2494'/>
+      <qualified-type-def type-id='9a401bb0' const='yes' id='3d6abfbb'/>
+      <qualified-type-def type-id='972f40bf' const='yes' id='9819baf4'/>
+      <qualified-type-def type-id='faf1ab29' const='yes' id='9d07f7d6'/>
+      <pointer-type-def type-id='4eb067f4' size-in-bits='64' id='8eff9c66'/>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='416' id='77ba73f2'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <pointer-type-def type-id='b83c8287' size-in-bits='64' id='60f4096f'/>
+      <pointer-type-def type-id='aebe1cff' size-in-bits='64' id='6bbe39a7'/>
+      <class-decl name='icmpv6_mib_device' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='75' column='1' id='1b8801b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='72bb5580' visibility='default' filepath='include/net/snmp.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icmpv6msg_mib_device' size-in-bits='32768' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='85' column='1' id='e4ca98d1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='61cd76ae' visibility='default' filepath='include/net/snmp.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_algo' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='102' column='1' id='4da03818'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg_name' type-id='59daf3ef' visibility='default' filepath='include/uapi/linux/xfrm.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='alg_key_len' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/xfrm.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='alg_key' type-id='e84913bd' visibility='default' filepath='include/uapi/linux/xfrm.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_algo_aead' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='115' column='1' id='307587ae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg_name' type-id='59daf3ef' visibility='default' filepath='include/uapi/linux/xfrm.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='alg_key_len' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/xfrm.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='alg_icv_len' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/xfrm.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='alg_key' type-id='e84913bd' visibility='default' filepath='include/uapi/linux/xfrm.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_algo_auth' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='108' column='1' id='faa1424f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg_name' type-id='59daf3ef' visibility='default' filepath='include/uapi/linux/xfrm.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='alg_key_len' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/xfrm.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='alg_trunc_len' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/xfrm.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='alg_key' type-id='e84913bd' visibility='default' filepath='include/uapi/linux/xfrm.h' line='112' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_encap_tmpl' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='249' column='1' id='f9cce85e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='encap_type' type-id='d315442e' visibility='default' filepath='include/uapi/linux/xfrm.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='encap_sport' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/xfrm.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='encap_dport' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/xfrm.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encap_oa' type-id='c210d497' visibility='default' filepath='include/uapi/linux/xfrm.h' line='253' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_replay_state_esn' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='92' column='1' id='b3f5c5f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bmp_len' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/xfrm.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='oseq' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seq' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='oseq_hi' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq_hi' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='replay_window' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bmp' type-id='d5016f6f' visibility='default' filepath='include/uapi/linux/xfrm.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_sec_ctx' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='31' column='1' id='cddfb84e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctx_doi' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='ctx_alg' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ctx_len' type-id='d315442e' visibility='default' filepath='include/uapi/linux/xfrm.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ctx_sid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ctx_str' type-id='e84913bd' visibility='default' filepath='include/uapi/linux/xfrm.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='xfrm_address_t' type-id='eba8a6fd' filepath='include/uapi/linux/xfrm.h' line='19' column='1' id='c210d497'/>
+      <pointer-type-def type-id='b4a65d38' size-in-bits='64' id='14a0013e'/>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='384' id='72bb5580'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <class-decl name='ip6_sf_list' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='99' column='1' id='b83c8287'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sf_next' type-id='60f4096f' visibility='default' filepath='include/net/if_inet6.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sf_addr' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sf_count' type-id='f05e8e77' visibility='default' filepath='include/net/if_inet6.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sf_gsresp' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='sf_oldin' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='sf_crcount' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neigh_table' size-in-bits='4416' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='194' column='1' id='aebe1cff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='entry_size' type-id='f0981eeb' visibility='default' filepath='include/net/neighbour.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key_len' type-id='f0981eeb' visibility='default' filepath='include/net/neighbour.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='protocol' type-id='84a5c3d4' visibility='default' filepath='include/net/neighbour.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hash' type-id='f60e04ee' visibility='default' filepath='include/net/neighbour.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='key_eq' type-id='8fbb31d1' visibility='default' filepath='include/net/neighbour.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='constructor' type-id='8eff9c66' visibility='default' filepath='include/net/neighbour.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pconstructor' type-id='9264da33' visibility='default' filepath='include/net/neighbour.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pdestructor' type-id='5c4c6144' visibility='default' filepath='include/net/neighbour.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='proxy_redo' type-id='0ef96694' visibility='default' filepath='include/net/neighbour.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='is_multicast' type-id='b9b212f5' visibility='default' filepath='include/net/neighbour.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='allow_add' type-id='6ade418d' visibility='default' filepath='include/net/neighbour.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='id' type-id='26a90f95' visibility='default' filepath='include/net/neighbour.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='parms' type-id='1429eee5' visibility='default' filepath='include/net/neighbour.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='parms_list' type-id='72f469ec' visibility='default' filepath='include/net/neighbour.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='gc_interval' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='gc_thresh1' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='gc_thresh2' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='gc_thresh3' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='last_flush' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='gc_work' type-id='5ad6e0ef' visibility='default' filepath='include/net/neighbour.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='proxy_timer' type-id='abe41e67' visibility='default' filepath='include/net/neighbour.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='proxy_queue' type-id='e61c85d0' visibility='default' filepath='include/net/neighbour.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='entries' type-id='49178f86' visibility='default' filepath='include/net/neighbour.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3936'>
+          <var-decl name='gc_entries' type-id='49178f86' visibility='default' filepath='include/net/neighbour.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='gc_list' type-id='72f469ec' visibility='default' filepath='include/net/neighbour.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/neighbour.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='last_rand' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='stats' type-id='3a0389d8' visibility='default' filepath='include/net/neighbour.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='nht' type-id='0d378d14' visibility='default' filepath='include/net/neighbour.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='phash_buckets' type-id='62c51a1d' visibility='default' filepath='include/net/neighbour.h' line='228' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_address_filter' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='495' column='1' id='b4a65d38'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='saddr' type-id='c210d497' visibility='default' filepath='include/uapi/linux/xfrm.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='daddr' type-id='c210d497' visibility='default' filepath='include/uapi/linux/xfrm.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='family' type-id='d315442e' visibility='default' filepath='include/uapi/linux/xfrm.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='splen' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='280'>
+          <var-decl name='dplen' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='500' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_replay' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='296' column='1' id='9a401bb0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='advance' type-id='7e17c1b8' visibility='default' filepath='include/net/xfrm.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='check' type-id='796b13b7' visibility='default' filepath='include/net/xfrm.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='recheck' type-id='796b13b7' visibility='default' filepath='include/net/xfrm.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='notify' type-id='b2edd032' visibility='default' filepath='include/net/xfrm.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='overflow' type-id='5e185d4c' visibility='default' filepath='include/net/xfrm.h' line='305' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_type' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='390' column='1' id='972f40bf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='26a90f95' visibility='default' filepath='include/net/xfrm.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/xfrm.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='proto' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='init_state' type-id='0642cb3c' visibility='default' filepath='include/net/xfrm.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='destructor' type-id='d507826b' visibility='default' filepath='include/net/xfrm.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='input' type-id='5e185d4c' visibility='default' filepath='include/net/xfrm.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='output' type-id='5e185d4c' visibility='default' filepath='include/net/xfrm.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='reject' type-id='ae9790c6' visibility='default' filepath='include/net/xfrm.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='hdr_offset' type-id='d236d29d' visibility='default' filepath='include/net/xfrm.h' line='406' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_type_offload' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='412' column='1' id='faf1ab29'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='26a90f95' visibility='default' filepath='include/net/xfrm.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/xfrm.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='proto' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='encap' type-id='a81671bb' visibility='default' filepath='include/net/xfrm.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='input_tail' type-id='5e185d4c' visibility='default' filepath='include/net/xfrm.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xmit' type-id='231269da' visibility='default' filepath='include/net/xfrm.h' line='418' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__35' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='15' column='1' id='eba8a6fd'>
+        <data-member access='private'>
+          <var-decl name='a4' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/xfrm.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='a6' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/xfrm.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='in6' type-id='f6ed712a' visibility='default' filepath='include/uapi/linux/xfrm.h' line='18' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='f18c6e1f' size-in-bits='64' id='9264da33'/>
+      <pointer-type-def type-id='1b8c67aa' size-in-bits='64' id='0642cb3c'/>
+      <pointer-type-def type-id='389d1e82' size-in-bits='64' id='5e185d4c'/>
+      <pointer-type-def type-id='0286989c' size-in-bits='64' id='ae9790c6'/>
+      <pointer-type-def type-id='65fbb133' size-in-bits='64' id='796b13b7'/>
+      <pointer-type-def type-id='08abca50' size-in-bits='64' id='231269da'/>
+      <pointer-type-def type-id='06b4cb39' size-in-bits='64' id='d236d29d'/>
+      <pointer-type-def type-id='1f305e7e' size-in-bits='64' id='0d378d14'/>
+      <pointer-type-def type-id='59a2e4aa' size-in-bits='64' id='3a0389d8'/>
+      <pointer-type-def type-id='12f283a5' size-in-bits='64' id='62c51a1d'/>
+      <pointer-type-def type-id='b9c5fbfc' size-in-bits='64' id='f60e04ee'/>
+      <pointer-type-def type-id='8e2d4615' size-in-bits='64' id='8fbb31d1'/>
+      <pointer-type-def type-id='7c9213d1' size-in-bits='64' id='6ade418d'/>
+      <pointer-type-def type-id='d66ae2ca' size-in-bits='64' id='5c4c6144'/>
+      <pointer-type-def type-id='8edc59cf' size-in-bits='64' id='d507826b'/>
+      <pointer-type-def type-id='751b0878' size-in-bits='64' id='b2edd032'/>
+      <pointer-type-def type-id='bf7aaec7' size-in-bits='64' id='a81671bb'/>
+      <pointer-type-def type-id='f85fb8c6' size-in-bits='64' id='7e17c1b8'/>
+      <pointer-type-def type-id='fff56995' size-in-bits='64' id='12f283a5'/>
+      <class-decl name='neigh_hash_table' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='186' column='1' id='1f305e7e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash_buckets' type-id='104977a4' visibility='default' filepath='include/net/neighbour.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hash_shift' type-id='f0981eeb' visibility='default' filepath='include/net/neighbour.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hash_rnd' type-id='3fa29bab' visibility='default' filepath='include/net/neighbour.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/neighbour.h' line='190' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neigh_statistics' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='112' column='1' id='59a2e4aa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='allocs' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='destroys' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hash_grows' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='res_failed' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lookups' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hits' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcv_probes_mcast' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rcv_probes_ucast' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='periodic_gc_runs' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='forced_gc_runs' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='unres_discards' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='table_fulls' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='129' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='128' id='3fa29bab'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='3c330067' size-in-bits='64' id='104977a4'/>
+      <class-decl name='pneigh_entry' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='171' column='1' id='fff56995'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='12f283a5' visibility='default' filepath='include/net/neighbour.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='net' type-id='c9df1e6c' visibility='default' filepath='include/net/neighbour.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/net/neighbour.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/neighbour.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='protocol' type-id='f9b06939' visibility='default' filepath='include/net/neighbour.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='key' type-id='29c3368c' visibility='default' filepath='include/net/neighbour.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='da0e76a1' size-in-bits='64' id='3c330067'/>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='infinite' id='29c3368c'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='neighbour' size-in-bits='2944' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='134' column='1' id='da0e76a1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='3c330067' visibility='default' filepath='include/net/neighbour.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tbl' type-id='6bbe39a7' visibility='default' filepath='include/net/neighbour.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parms' type-id='affe0fe3' visibility='default' filepath='include/net/neighbour.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='confirmed' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='updated' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/neighbour.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/neighbour.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='arp_queue_len_bytes' type-id='f0981eeb' visibility='default' filepath='include/net/neighbour.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='arp_queue' type-id='e61c85d0' visibility='default' filepath='include/net/neighbour.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/net/neighbour.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='used' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='probes' type-id='49178f86' visibility='default' filepath='include/net/neighbour.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/net/neighbour.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1192'>
+          <var-decl name='nud_state' type-id='8f048e17' visibility='default' filepath='include/net/neighbour.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1200'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/net/neighbour.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1208'>
+          <var-decl name='dead' type-id='8f048e17' visibility='default' filepath='include/net/neighbour.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='protocol' type-id='f9b06939' visibility='default' filepath='include/net/neighbour.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='ha_lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/neighbour.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ha' type-id='fc872715' visibility='default' filepath='include/net/neighbour.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='hh' type-id='0db936dc' visibility='default' filepath='include/net/neighbour.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='output' type-id='a57789c2' visibility='default' filepath='include/net/neighbour.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='ops' type-id='66fa472a' visibility='default' filepath='include/net/neighbour.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='gc_list' type-id='72f469ec' visibility='default' filepath='include/net/neighbour.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/neighbour.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/net/neighbour.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='primary_key' type-id='29c3368c' visibility='default' filepath='include/net/neighbour.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e4083e44' size-in-bits='64' id='66fa472a'/>
+      <pointer-type-def type-id='38a112d0' size-in-bits='64' id='a57789c2'/>
+      <qualified-type-def type-id='06dfa6bb' const='yes' id='e4083e44'/>
+      <class-decl name='neigh_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='163' column='1' id='06dfa6bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='solicit' type-id='8e78f753' visibility='default' filepath='include/net/neighbour.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='error_report' type-id='8e78f753' visibility='default' filepath='include/net/neighbour.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='output' type-id='a57789c2' visibility='default' filepath='include/net/neighbour.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connected_output' type-id='a57789c2' visibility='default' filepath='include/net/neighbour.h' line='168' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='6415147f' size-in-bits='64' id='8e78f753'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/ansi_cprng.c' language='LANG_C89'>
+      <class-decl name='rng_alg' size-in-bits='5120' is-struct='yes' visibility='default' filepath='include/crypto/rng.h' line='41' column='1' id='edc58e1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='generate' type-id='5cae2f79' visibility='default' filepath='include/crypto/rng.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seed' type-id='0499c3f4' visibility='default' filepath='include/crypto/rng.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_ent' type-id='a37de2bd' visibility='default' filepath='include/crypto/rng.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='seedsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/rng.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='514fe525' visibility='default' filepath='include/crypto/rng.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_rng' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/crypto/rng.h' line='54' column='1' id='673937f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/crypto/rng.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='673937f2' size-in-bits='64' id='5474f420'/>
+      <pointer-type-def type-id='7b596412' size-in-bits='64' id='0499c3f4'/>
+      <pointer-type-def type-id='09978275' size-in-bits='64' id='5cae2f79'/>
+      <pointer-type-def type-id='edc58e1f' size-in-bits='64' id='090a6ee7'/>
+      <pointer-type-def type-id='de6e2151' size-in-bits='64' id='a37de2bd'/>
+      <function-decl name='crypto_unregister_rngs' mangled-name='crypto_unregister_rngs' filepath='include/crypto/internal/rng.h' line='18' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_rngs'>
+        <parameter type-id='090a6ee7'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_spin_lock_bh' mangled-name='_raw_spin_lock_bh' filepath='include/linux/spinlock_api_smp.h' line='28' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_lock_bh'>
+        <parameter type-id='538ece95'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_spin_unlock_bh' mangled-name='_raw_spin_unlock_bh' filepath='include/linux/spinlock_api_smp.h' line='40' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_unlock_bh'>
+        <parameter type-id='538ece95'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_register_rngs' mangled-name='crypto_register_rngs' filepath='include/crypto/internal/rng.h' line='17' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_rngs'>
+        <parameter type-id='090a6ee7'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='7b596412'>
+        <parameter type-id='5474f420'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='09978275'>
+        <parameter type-id='5474f420'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='de6e2151'>
+        <parameter type-id='5474f420'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/authencesn.c' language='LANG_C89'>
+      <function-decl name='crypto_ahash_digest' mangled-name='crypto_ahash_digest' filepath='include/crypto/hash.h' line='455' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_ahash_digest'>
+        <parameter type-id='6f3c82ac'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='41207a16' size-in-bits='64' id='6f3c82ac'/>
+      <class-decl name='ahash_request' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/crypto/hash.h' line='49' column='1' id='41207a16'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='5e6083f1' visibility='default' filepath='include/crypto/hash.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nbytes' type-id='f0981eeb' visibility='default' filepath='include/crypto/hash.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='src' type-id='bf3ef905' visibility='default' filepath='include/crypto/hash.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='result' type-id='8bff8096' visibility='default' filepath='include/crypto/hash.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/crypto/hash.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__ctx' type-id='baf98fd3' visibility='default' filepath='include/crypto/hash.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/cmac.c' language='LANG_C89'>
+      <class-decl name='crypto_spawn' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/crypto/algapi.h' line='67' column='1' id='58ba85d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/crypto/algapi.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='alg' type-id='67f526b5' visibility='default' filepath='include/crypto/algapi.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='inst' type-id='708ae4d0' visibility='default' filepath='include/crypto/algapi.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='frontend' type-id='71dc7604' visibility='default' filepath='include/crypto/algapi.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mask' type-id='19c2251e' visibility='default' filepath='include/crypto/algapi.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='shash_instance' size-in-bits='6144' is-struct='yes' visibility='default' filepath='include/crypto/internal/hash.h' line='36' column='1' id='08d1d960'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg' type-id='b73dd29b' visibility='default' filepath='include/crypto/internal/hash.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='58ba85d8' size-in-bits='64' id='5f880e0e'/>
+      <pointer-type-def type-id='08d1d960' size-in-bits='64' id='9414c4b6'/>
+      <function-decl name='crypto_check_attr_type' mangled-name='crypto_check_attr_type' filepath='include/crypto/algapi.h' line='170' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_check_attr_type'>
+        <parameter type-id='c161b868'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_attr_alg2' mangled-name='crypto_attr_alg2' filepath='include/crypto/algapi.h' line='172' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_attr_alg2'>
+        <parameter type-id='f28646d2'/>
+        <parameter type-id='71dc7604'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='67f526b5'/>
+      </function-decl>
+      <function-decl name='crypto_alloc_instance' mangled-name='crypto_alloc_instance' filepath='include/crypto/algapi.h' line='185' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_alloc_instance'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='67f526b5'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='crypto_init_spawn' mangled-name='crypto_init_spawn' filepath='include/crypto/algapi.h' line='150' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_init_spawn'>
+        <parameter type-id='5f880e0e'/>
+        <parameter type-id='67f526b5'/>
+        <parameter type-id='708ae4d0'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='shash_register_instance' mangled-name='shash_register_instance' filepath='include/crypto/internal/hash.h' line='105' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='shash_register_instance'>
+        <parameter type-id='f0f856cb'/>
+        <parameter type-id='9414c4b6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='shash_free_instance' mangled-name='shash_free_instance' filepath='include/crypto/internal/hash.h' line='107' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='shash_free_instance'>
+        <parameter type-id='708ae4d0'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_mod_put' mangled-name='crypto_mod_put' filepath='include/crypto/algapi.h' line='138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_mod_put'>
+        <parameter type-id='67f526b5'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_spawn_tfm' mangled-name='crypto_spawn_tfm' filepath='include/crypto/algapi.h' line='159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_spawn_tfm'>
+        <parameter type-id='5f880e0e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='dfeb7f6c'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/crc32_generic.c' language='LANG_C89'>
+      <function-decl name='crc32_le' filepath='include/linux/crc32.h' line='11' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/crypto_engine.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='240' id='d2e20a8c'>
+        <subrange length='30' type-id='7ff19f0f' id='6a6183a4'/>
+      </array-type-def>
+      <class-decl name='crypto_engine' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/crypto/engine.h' line='43' column='1' id='52afe07b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='d2e20a8c' visibility='default' filepath='include/crypto/engine.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='idling' type-id='b50a4934' visibility='default' filepath='include/crypto/engine.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='248'>
+          <var-decl name='busy' type-id='b50a4934' visibility='default' filepath='include/crypto/engine.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='running' type-id='b50a4934' visibility='default' filepath='include/crypto/engine.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='cur_req_prepared' type-id='b50a4934' visibility='default' filepath='include/crypto/engine.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/crypto/engine.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='queue_lock' type-id='fb4018a0' visibility='default' filepath='include/crypto/engine.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='queue' type-id='590223f8' visibility='default' filepath='include/crypto/engine.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/crypto/engine.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rt' type-id='b50a4934' visibility='default' filepath='include/crypto/engine.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='prepare_crypt_hardware' type-id='4c6bdb1f' visibility='default' filepath='include/crypto/engine.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='unprepare_crypt_hardware' type-id='4c6bdb1f' visibility='default' filepath='include/crypto/engine.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='kworker' type-id='c41f4539' visibility='default' filepath='include/crypto/engine.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='pump_requests' type-id='ac165296' visibility='default' filepath='include/crypto/engine.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='priv_data' type-id='eaa32e2f' visibility='default' filepath='include/crypto/engine.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='cur_req' type-id='af5eeab9' visibility='default' filepath='include/crypto/engine.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_queue' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/crypto/algapi.h' line='75' column='1' id='590223f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/crypto/algapi.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='backlog' type-id='e84b031a' visibility='default' filepath='include/crypto/algapi.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='qlen' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_qlen' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='52afe07b' size-in-bits='64' id='2281d68b'/>
+      <pointer-type-def type-id='590223f8' size-in-bits='64' id='1a8fddbe'/>
+      <pointer-type-def type-id='ee48a0b3' size-in-bits='64' id='4c6bdb1f'/>
+      <function-decl name='crypto_transfer_ablkcipher_request_to_engine' mangled-name='crypto_transfer_ablkcipher_request_to_engine' filepath='crypto/crypto_engine.c' line='223' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_transfer_ablkcipher_request_to_engine'>
+        <parameter type-id='2281d68b' name='engine' filepath='crypto/crypto_engine.c' line='223' column='1'/>
+        <parameter type-id='792ca340' name='req' filepath='crypto/crypto_engine.c' line='224' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_enqueue_request' mangled-name='crypto_enqueue_request' filepath='include/crypto/algapi.h' line='189' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_enqueue_request'>
+        <parameter type-id='1a8fddbe'/>
+        <parameter type-id='af5eeab9'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_finalize_ablkcipher_request' mangled-name='crypto_finalize_ablkcipher_request' filepath='crypto/crypto_engine.c' line='290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_finalize_ablkcipher_request'>
+        <parameter type-id='2281d68b' name='engine' filepath='crypto/crypto_engine.c' line='290' column='1'/>
+        <parameter type-id='792ca340' name='req' filepath='crypto/crypto_engine.c' line='291' column='1'/>
+        <parameter type-id='95e97e5e' name='err' filepath='crypto/crypto_engine.c' line='291' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_engine_start' mangled-name='crypto_engine_start' filepath='crypto/crypto_engine.c' line='359' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_engine_start'>
+        <parameter type-id='2281d68b' name='engine' filepath='crypto/crypto_engine.c' line='359' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_engine_alloc_init' mangled-name='crypto_engine_alloc_init' filepath='crypto/crypto_engine.c' line='426' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_engine_alloc_init'>
+        <parameter type-id='fa0b179b' name='dev' filepath='crypto/crypto_engine.c' line='426' column='1'/>
+        <parameter type-id='b50a4934' name='rt' filepath='crypto/crypto_engine.c' line='426' column='1'/>
+        <return type-id='2281d68b'/>
+      </function-decl>
+      <function-decl name='crypto_init_queue' mangled-name='crypto_init_queue' filepath='include/crypto/algapi.h' line='188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_init_queue'>
+        <parameter type-id='1a8fddbe'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_dequeue_request' mangled-name='crypto_dequeue_request' filepath='include/crypto/algapi.h' line='191' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_dequeue_request'>
+        <parameter type-id='1a8fddbe'/>
+        <return type-id='af5eeab9'/>
+      </function-decl>
+      <function-decl name='crypto_engine_exit' mangled-name='crypto_engine_exit' filepath='crypto/crypto_engine.c' line='473' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_engine_exit'>
+        <parameter type-id='2281d68b' name='engine' filepath='crypto/crypto_engine.c' line='473' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='ee48a0b3'>
+        <parameter type-id='2281d68b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <pointer-type-def type-id='62968721' size-in-bits='64' id='c41f4539'/>
+      <class-decl name='kthread_work' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/kthread.h' line='98' column='1' id='ac165296'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/kthread.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='func' type-id='a785c7fd' visibility='default' filepath='include/linux/kthread.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='worker' type-id='c41f4539' visibility='default' filepath='include/linux/kthread.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='canceling' type-id='95e97e5e' visibility='default' filepath='include/linux/kthread.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kthread_worker' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/kthread.h' line='89' column='1' id='62968721'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/kthread.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/kthread.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='work_list' type-id='72f469ec' visibility='default' filepath='include/linux/kthread.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='delayed_work_list' type-id='72f469ec' visibility='default' filepath='include/linux/kthread.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/kthread.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='current_work' type-id='401eb95c' visibility='default' filepath='include/linux/kthread.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='kthread_work_func_t' type-id='2a5d0ea1' filepath='include/linux/kthread.h' line='82' column='1' id='a785c7fd'/>
+      <pointer-type-def type-id='ac165296' size-in-bits='64' id='401eb95c'/>
+      <pointer-type-def type-id='38d1cb6d' size-in-bits='64' id='2a5d0ea1'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/cts.c' language='LANG_C89'>
+      <function-decl name='crypto_skcipher_decrypt' mangled-name='crypto_skcipher_decrypt' filepath='include/crypto/skcipher.h' line='465' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_skcipher_decrypt'>
+        <parameter type-id='c249b570'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/deflate.c' language='LANG_C89'>
+      <class-decl name='z_stream_s' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/zlib.h' line='84' column='1' id='d19a2f20'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next_in' type-id='7211f874' visibility='default' filepath='include/linux/zlib.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='avail_in' type-id='5bbcce85' visibility='default' filepath='include/linux/zlib.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='total_in' type-id='5bbcce85' visibility='default' filepath='include/linux/zlib.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next_out' type-id='00abfc0f' visibility='default' filepath='include/linux/zlib.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='avail_out' type-id='5bbcce85' visibility='default' filepath='include/linux/zlib.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='total_out' type-id='5bbcce85' visibility='default' filepath='include/linux/zlib.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='msg' type-id='26a90f95' visibility='default' filepath='include/linux/zlib.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='state' type-id='3a49ee4c' visibility='default' filepath='include/linux/zlib.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='workspace' type-id='eaa32e2f' visibility='default' filepath='include/linux/zlib.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='data_type' type-id='95e97e5e' visibility='default' filepath='include/linux/zlib.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='adler' type-id='5bbcce85' visibility='default' filepath='include/linux/zlib.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='reserved' type-id='5bbcce85' visibility='default' filepath='include/linux/zlib.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='Byte' type-id='002ac4a6' filepath='include/linux/zconf.h' line='52' column='1' id='efb9ba06'/>
+      <typedef-decl name='uLong' type-id='7359adad' filepath='include/linux/zconf.h' line='54' column='1' id='5bbcce85'/>
+      <class-decl name='internal_state' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/zlib.h' line='586' column='1' id='221461a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dummy' type-id='95e97e5e' visibility='default' filepath='include/linux/zlib.h' line='586' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='efb9ba06' size-in-bits='64' id='00abfc0f'/>
+      <qualified-type-def type-id='efb9ba06' const='yes' id='41903e16'/>
+      <pointer-type-def type-id='41903e16' size-in-bits='64' id='7211f874'/>
+      <pointer-type-def type-id='221461a6' size-in-bits='64' id='3a49ee4c'/>
+      <pointer-type-def type-id='d19a2f20' size-in-bits='64' id='24a339f6'/>
+      <function-decl name='zlib_deflateEnd' mangled-name='zlib_deflateEnd' filepath='include/linux/zlib.h' line='295' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_deflateEnd'>
+        <parameter type-id='24a339f6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vfree' mangled-name='vfree' filepath='include/linux/vmalloc.h' line='116' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfree'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='zlib_inflateEnd' mangled-name='zlib_inflateEnd' filepath='include/linux/zlib.h' line='436' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_inflateEnd'>
+        <parameter type-id='24a339f6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='zlib_deflateReset' mangled-name='zlib_deflateReset' filepath='include/linux/zlib.h' line='497' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_deflateReset'>
+        <parameter type-id='24a339f6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='zlib_deflate' mangled-name='zlib_deflate' filepath='include/linux/zlib.h' line='217' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_deflate'>
+        <parameter type-id='24a339f6'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='zlib_inflateReset' mangled-name='zlib_inflateReset' filepath='include/linux/zlib.h' line='555' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_inflateReset'>
+        <parameter type-id='24a339f6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='zlib_inflate' mangled-name='zlib_inflate' filepath='include/linux/zlib.h' line='337' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_inflate'>
+        <parameter type-id='24a339f6'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='zlib_deflate_workspacesize' mangled-name='zlib_deflate_workspacesize' filepath='include/linux/zlib.h' line='182' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_deflate_workspacesize'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vzalloc' mangled-name='vzalloc' filepath='include/linux/vmalloc.h' line='92' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vzalloc'>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='zlib_deflateInit2' mangled-name='zlib_deflateInit2' filepath='include/linux/zlib.h' line='580' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_deflateInit2'>
+        <parameter type-id='24a339f6'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='zlib_inflate_workspacesize' mangled-name='zlib_inflate_workspacesize' filepath='include/linux/zlib.h' line='309' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_inflate_workspacesize'>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='zlib_inflateInit2' mangled-name='zlib_inflateInit2' filepath='include/linux/zlib.h' line='583' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_inflateInit2'>
+        <parameter type-id='24a339f6'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/drbg.c' language='LANG_C89'>
+      <function-decl name='cancel_work_sync' mangled-name='cancel_work_sync' filepath='include/linux/workqueue.h' line='468' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cancel_work_sync'>
+        <parameter type-id='83c1bde6'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/ecdh.c' language='LANG_C89'>
+      <function-decl name='sg_copy_to_buffer' mangled-name='sg_copy_to_buffer' filepath='include/linux/scatterlist.h' line='313' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_copy_to_buffer'>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='sg_copy_from_buffer' mangled-name='sg_copy_from_buffer' filepath='include/linux/scatterlist.h' line='311' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_copy_from_buffer'>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/essiv.c' language='LANG_C89'>
+      <function-decl name='sg_nents_for_len' mangled-name='sg_nents_for_len' filepath='include/linux/scatterlist.h' line='269' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_nents_for_len'>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='3a47d82b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/gcm.c' language='LANG_C89'>
+      <class-decl name='crypto_aead' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/crypto/aead.h' line='146' column='1' id='472efbee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='authsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/aead.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='reqsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/aead.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/crypto/aead.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_ahash' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/crypto/hash.h' line='203' column='1' id='8eb3840c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='update' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='final' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='finup' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='digest' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='export' type-id='77c96f7a' visibility='default' filepath='include/crypto/hash.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='import' type-id='77c96f7a' visibility='default' filepath='include/crypto/hash.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='setkey' type-id='c509dbc2' visibility='default' filepath='include/crypto/hash.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='reqsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/hash.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/crypto/hash.h' line='215' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ahash_request' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/crypto/hash.h' line='49' column='1' id='41207a16'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='5e6083f1' visibility='default' filepath='include/crypto/hash.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nbytes' type-id='f0981eeb' visibility='default' filepath='include/crypto/hash.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='src' type-id='bf3ef905' visibility='default' filepath='include/crypto/hash.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='result' type-id='8bff8096' visibility='default' filepath='include/crypto/hash.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/crypto/hash.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__ctx' type-id='baf98fd3' visibility='default' filepath='include/crypto/hash.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='41207a16' size-in-bits='64' id='6f3c82ac'/>
+      <pointer-type-def type-id='472efbee' size-in-bits='64' id='a585cbc4'/>
+      <pointer-type-def type-id='8eb3840c' size-in-bits='64' id='1351523a'/>
+      <pointer-type-def type-id='e501fad6' size-in-bits='64' id='0b5e03e0'/>
+      <pointer-type-def type-id='928ea938' size-in-bits='64' id='77c96f7a'/>
+      <pointer-type-def type-id='c2b07168' size-in-bits='64' id='c509dbc2'/>
+      <function-decl name='crypto_aead_setkey' mangled-name='crypto_aead_setkey' filepath='include/crypto/aead.h' line='281' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_aead_setkey'>
+        <parameter type-id='a585cbc4'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_aead_setauthsize' mangled-name='crypto_aead_setauthsize' filepath='include/crypto/aead.h' line='294' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_aead_setauthsize'>
+        <parameter type-id='a585cbc4'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_ahash_setkey' mangled-name='crypto_ahash_setkey' filepath='include/crypto/hash.h' line='411' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_ahash_setkey'>
+        <parameter type-id='1351523a'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sg_next' mangled-name='sg_next' filepath='include/linux/scatterlist.h' line='270' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_next'>
+        <parameter type-id='bf3ef905'/>
+        <return type-id='bf3ef905'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/gf128mul.c' language='LANG_C89'>
+      <typedef-decl name='be128' type-id='e1637ddc' filepath='include/crypto/b128ops.h' line='58' column='1' id='2c3bbc0e'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='2c3bbc0e' visibility='default' filepath='include/crypto/b128ops.h' line='56' column='1' id='e1637ddc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='a' type-id='0899c7ad' visibility='default' filepath='include/crypto/b128ops.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='b' type-id='0899c7ad' visibility='default' filepath='include/crypto/b128ops.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2c3bbc0e' size-in-bits='64' id='342f43d1'/>
+      <qualified-type-def type-id='2c3bbc0e' const='yes' id='9b734d5e'/>
+      <pointer-type-def type-id='9b734d5e' size-in-bits='64' id='2a82ed9c'/>
+      <function-decl name='gf128mul_lle' mangled-name='gf128mul_lle' filepath='crypto/gf128mul.c' line='170' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gf128mul_lle'>
+        <parameter type-id='342f43d1' name='r' filepath='crypto/gf128mul.c' line='170' column='1'/>
+        <parameter type-id='2a82ed9c' name='b' filepath='crypto/gf128mul.c' line='170' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <typedef-decl name='__be64' type-id='d3130597' filepath='include/uapi/linux/types.h' line='34' column='1' id='0899c7ad'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/hash_info.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='2448a865' size-in-bits='640' id='9208c5df'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <var-decl name='hash_digest_size' type-id='9208c5df' mangled-name='hash_digest_size' visibility='default' filepath='crypto/hash_info.c' line='35' column='1' elf-symbol-id='hash_digest_size'/>
+      <qualified-type-def type-id='95e97e5e' const='yes' id='2448a865'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/hmac.c' language='LANG_C89'>
+      <function-decl name='crypto_shash_update' mangled-name='crypto_shash_update' filepath='include/crypto/hash.h' line='918' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_shash_update'>
+        <parameter type-id='32efad44'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_shash_final' mangled-name='crypto_shash_final' filepath='include/crypto/hash.h' line='935' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_shash_final'>
+        <parameter type-id='32efad44'/>
+        <parameter type-id='cf536864'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/lz4.c' language='LANG_C89'>
+      <class-decl name='scomp_alg' size-in-bits='5120' is-struct='yes' visibility='default' filepath='include/crypto/internal/scompress.h' line='28' column='1' id='c2b72af8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alloc_ctx' type-id='f531dfd0' visibility='default' filepath='include/crypto/internal/scompress.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='free_ctx' type-id='0459295a' visibility='default' filepath='include/crypto/internal/scompress.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='compress' type-id='e4372f12' visibility='default' filepath='include/crypto/internal/scompress.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='decompress' type-id='e4372f12' visibility='default' filepath='include/crypto/internal/scompress.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='514fe525' visibility='default' filepath='include/crypto/internal/scompress.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_scomp' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/crypto/internal/scompress.h' line='15' column='1' id='09bcad51'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/crypto/internal/scompress.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='09bcad51' size-in-bits='64' id='f03f21e9'/>
+      <pointer-type-def type-id='61c46dd8' size-in-bits='64' id='e4372f12'/>
+      <pointer-type-def type-id='c2b72af8' size-in-bits='64' id='6e764b1e'/>
+      <pointer-type-def type-id='b2c72f60' size-in-bits='64' id='0459295a'/>
+      <pointer-type-def type-id='4ed265d6' size-in-bits='64' id='f531dfd0'/>
+      <function-decl name='crypto_unregister_scomp' mangled-name='crypto_unregister_scomp' filepath='include/crypto/internal/scompress.h' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_scomp'>
+        <parameter type-id='6e764b1e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vmalloc' mangled-name='vmalloc' filepath='include/linux/vmalloc.h' line='91' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vmalloc'>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='crypto_register_scomp' mangled-name='crypto_register_scomp' filepath='include/crypto/internal/scompress.h' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_scomp'>
+        <parameter type-id='6e764b1e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='61c46dd8'>
+        <parameter type-id='f03f21e9'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b2c72f60'>
+        <parameter type-id='f03f21e9'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4ed265d6'>
+        <parameter type-id='f03f21e9'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/memneq.c' language='LANG_C89'>
+      <function-decl name='__crypto_memneq' mangled-name='__crypto_memneq' filepath='crypto/memneq.c' line='156' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__crypto_memneq'>
+        <parameter type-id='eaa32e2f' name='a' filepath='crypto/memneq.c' line='156' column='1'/>
+        <parameter type-id='eaa32e2f' name='b' filepath='crypto/memneq.c' line='156' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='crypto/memneq.c' line='157' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/poly1305_generic.c' language='LANG_C89'>
+      <function-decl name='crypto_unregister_shash' mangled-name='crypto_unregister_shash' filepath='include/crypto/internal/hash.h' line='102' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_shash'>
+        <parameter type-id='1be0f6ab'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_register_shash' mangled-name='crypto_register_shash' filepath='include/crypto/internal/hash.h' line='101' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_shash'>
+        <parameter type-id='1be0f6ab'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/rng.c' language='LANG_C89'>
+      <function-decl name='crypto_register_rng' mangled-name='crypto_register_rng' filepath='crypto/rng.c' line='181' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_rng'>
+        <parameter type-id='090a6ee7' name='alg' filepath='crypto/rng.c' line='181' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_unregister_rng' mangled-name='crypto_unregister_rng' filepath='crypto/rng.c' line='196' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_rng'>
+        <parameter type-id='090a6ee7' name='alg' filepath='crypto/rng.c' line='196' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/seqiv.c' language='LANG_C89'>
+      <class-decl name='aead_request' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/crypto/aead.h' line='81' column='1' id='850096b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='5e6083f1' visibility='default' filepath='include/crypto/aead.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='assoclen' type-id='f0981eeb' visibility='default' filepath='include/crypto/aead.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='cryptlen' type-id='f0981eeb' visibility='default' filepath='include/crypto/aead.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='iv' type-id='8bff8096' visibility='default' filepath='include/crypto/aead.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='src' type-id='bf3ef905' visibility='default' filepath='include/crypto/aead.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dst' type-id='bf3ef905' visibility='default' filepath='include/crypto/aead.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__ctx' type-id='baf98fd3' visibility='default' filepath='include/crypto/aead.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='850096b4' size-in-bits='64' id='146bc842'/>
+      <function-decl name='crypto_unregister_template' mangled-name='crypto_unregister_template' filepath='include/crypto/algapi.h' line='142' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_template'>
+        <parameter type-id='f0f856cb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_skcipher_encrypt' mangled-name='crypto_skcipher_encrypt' filepath='include/crypto/skcipher.h' line='452' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_skcipher_encrypt'>
+        <parameter type-id='c249b570'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='scatterwalk_map_and_copy' mangled-name='scatterwalk_map_and_copy' filepath='include/crypto/scatterwalk.h' line='108' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scatterwalk_map_and_copy'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_aead_encrypt' mangled-name='crypto_aead_encrypt' filepath='include/crypto/aead.h' line='320' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_aead_encrypt'>
+        <parameter type-id='146bc842'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kzfree' mangled-name='kzfree' filepath='include/linux/slab.h' line='190' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kzfree'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_register_template' mangled-name='crypto_register_template' filepath='include/crypto/algapi.h' line='140' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_template'>
+        <parameter type-id='f0f856cb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/sha1_generic.c' language='LANG_C89'>
+      <function-decl name='crypto_sha1_update' mangled-name='crypto_sha1_update' filepath='crypto/sha1_generic.c' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_sha1_update'>
+        <parameter type-id='32efad44' name='desc' filepath='crypto/sha1_generic.c' line='43' column='1'/>
+        <parameter type-id='bbaf3419' name='data' filepath='crypto/sha1_generic.c' line='43' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='crypto/sha1_generic.c' line='44' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_sha1_finup' mangled-name='crypto_sha1_finup' filepath='crypto/sha1_generic.c' line='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_sha1_finup'>
+        <parameter type-id='32efad44' name='desc' filepath='crypto/sha1_generic.c' line='56' column='1'/>
+        <parameter type-id='bbaf3419' name='data' filepath='crypto/sha1_generic.c' line='56' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='crypto/sha1_generic.c' line='57' column='1'/>
+        <parameter type-id='8bff8096' name='out' filepath='crypto/sha1_generic.c' line='57' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/skcipher.c' language='LANG_C89'>
+      <function-decl name='skcipher_walk_aead_encrypt' mangled-name='skcipher_walk_aead_encrypt' filepath='crypto/skcipher.c' line='561' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skcipher_walk_aead_encrypt'>
+        <parameter type-id='74439606' name='walk' filepath='crypto/skcipher.c' line='561' column='1'/>
+        <parameter type-id='146bc842' name='req' filepath='crypto/skcipher.c' line='562' column='1'/>
+        <parameter type-id='b50a4934' name='atomic' filepath='crypto/skcipher.c' line='562' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skcipher_walk_aead_decrypt' mangled-name='skcipher_walk_aead_decrypt' filepath='crypto/skcipher.c' line='570' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skcipher_walk_aead_decrypt'>
+        <parameter type-id='74439606' name='walk' filepath='crypto/skcipher.c' line='570' column='1'/>
+        <parameter type-id='146bc842' name='req' filepath='crypto/skcipher.c' line='571' column='1'/>
+        <parameter type-id='b50a4934' name='atomic' filepath='crypto/skcipher.c' line='571' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_register_skcipher' mangled-name='crypto_register_skcipher' filepath='crypto/skcipher.c' line='1047' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_skcipher'>
+        <parameter type-id='613dff15' name='alg' filepath='crypto/skcipher.c' line='1047' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_unregister_skcipher' mangled-name='crypto_unregister_skcipher' filepath='crypto/skcipher.c' line='1060' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_skcipher'>
+        <parameter type-id='613dff15' name='alg' filepath='crypto/skcipher.c' line='1060' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/xts.c' language='LANG_C89'>
+      <function-decl name='crypto_alloc_base' mangled-name='crypto_alloc_base' filepath='include/linux/crypto.h' line='825' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_alloc_base'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='dfeb7f6c'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='crypto/zstd.c' language='LANG_C89'>
+      <class-decl name='ZSTD_CCtx_s' is-struct='yes' visibility='default' is-declaration-only='yes' id='dcc3dee3'/>
+      <class-decl name='ZSTD_DCtx_s' is-struct='yes' visibility='default' is-declaration-only='yes' id='de238d9c'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/zstd.h' line='177' column='1' id='8532dab9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cParams' type-id='a26eb5ee' visibility='default' filepath='include/linux/zstd.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='fParams' type-id='a0d1de25' visibility='default' filepath='include/linux/zstd.h' line='179' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='ZSTD_compressionParameters' type-id='c8a5ecfe' filepath='include/linux/zstd.h' line='153' column='1' id='a26eb5ee'/>
+      <class-decl name='__anonymous_struct__1' size-in-bits='224' is-struct='yes' is-anonymous='yes' naming-typedef-id='a26eb5ee' visibility='default' filepath='include/linux/zstd.h' line='145' column='1' id='c8a5ecfe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='windowLog' type-id='f0981eeb' visibility='default' filepath='include/linux/zstd.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='chainLog' type-id='f0981eeb' visibility='default' filepath='include/linux/zstd.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hashLog' type-id='f0981eeb' visibility='default' filepath='include/linux/zstd.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='searchLog' type-id='f0981eeb' visibility='default' filepath='include/linux/zstd.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='searchLength' type-id='f0981eeb' visibility='default' filepath='include/linux/zstd.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='targetLength' type-id='f0981eeb' visibility='default' filepath='include/linux/zstd.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='strategy' type-id='14c83269' visibility='default' filepath='include/linux/zstd.h' line='152' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='ZSTD_strategy' type-id='08f5ca18' filepath='include/linux/zstd.h' line='128' column='1' id='14c83269'/>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/linux/zstd.h' line='119' column='1' id='08f5ca18'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ZSTD_fast' value='0'/>
+        <enumerator name='ZSTD_dfast' value='1'/>
+        <enumerator name='ZSTD_greedy' value='2'/>
+        <enumerator name='ZSTD_lazy' value='3'/>
+        <enumerator name='ZSTD_lazy2' value='4'/>
+        <enumerator name='ZSTD_btlazy2' value='5'/>
+        <enumerator name='ZSTD_btopt' value='6'/>
+        <enumerator name='ZSTD_btopt2' value='7'/>
+      </enum-decl>
+      <typedef-decl name='ZSTD_frameParameters' type-id='63eefab3' filepath='include/linux/zstd.h' line='170' column='1' id='a0d1de25'/>
+      <class-decl name='__anonymous_struct__2' size-in-bits='96' is-struct='yes' is-anonymous='yes' naming-typedef-id='a0d1de25' visibility='default' filepath='include/linux/zstd.h' line='166' column='1' id='63eefab3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='contentSizeFlag' type-id='f0981eeb' visibility='default' filepath='include/linux/zstd.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='checksumFlag' type-id='f0981eeb' visibility='default' filepath='include/linux/zstd.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='noDictIDFlag' type-id='f0981eeb' visibility='default' filepath='include/linux/zstd.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='dcc3dee3' size-in-bits='64' id='4d61d553'/>
+      <pointer-type-def type-id='de238d9c' size-in-bits='64' id='a53692ca'/>
+      <function-decl name='ZSTD_getParams' mangled-name='ZSTD_getParams' filepath='include/linux/zstd.h' line='204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ZSTD_getParams'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='8532dab9'/>
+      </function-decl>
+      <function-decl name='ZSTD_compressCCtx' mangled-name='ZSTD_compressCCtx' filepath='include/linux/zstd.h' line='256' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ZSTD_compressCCtx'>
+        <parameter type-id='4d61d553'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='8532dab9'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='ZSTD_decompressDCtx' mangled-name='ZSTD_decompressDCtx' filepath='include/linux/zstd.h' line='299' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ZSTD_decompressDCtx'>
+        <parameter type-id='a53692ca'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='ZSTD_CCtxWorkspaceBound' mangled-name='ZSTD_CCtxWorkspaceBound' filepath='include/linux/zstd.h' line='222' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ZSTD_CCtxWorkspaceBound'>
+        <parameter type-id='c8a5ecfe'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='ZSTD_initCCtx' mangled-name='ZSTD_initCCtx' filepath='include/linux/zstd.h' line='240' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ZSTD_initCCtx'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='4d61d553'/>
+      </function-decl>
+      <function-decl name='ZSTD_DCtxWorkspaceBound' mangled-name='ZSTD_DCtxWorkspaceBound' filepath='include/linux/zstd.h' line='265' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ZSTD_DCtxWorkspaceBound'>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='ZSTD_initDCtx' mangled-name='ZSTD_initDCtx' filepath='include/linux/zstd.h' line='283' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ZSTD_initDCtx'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='a53692ca'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/amba/bus.c' language='LANG_C89'>
+      <var-decl name='amba_bustype' type-id='b31bfc8a' mangled-name='amba_bustype' visibility='default' filepath='drivers/amba/bus.c' line='215' column='1' elf-symbol-id='amba_bustype'/>
+      <function-decl name='of_clk_set_defaults' mangled-name='of_clk_set_defaults' filepath='include/linux/clk/clk-conf.h' line='15' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_set_defaults'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_domain_attach' mangled-name='dev_pm_domain_attach' filepath='include/linux/pm_domain.h' line='363' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_domain_attach'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_domain_detach' mangled-name='dev_pm_domain_detach' filepath='include/linux/pm_domain.h' line='368' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_domain_detach'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bus_for_each_dev' mangled-name='bus_for_each_dev' filepath='include/linux/device.h' line='188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bus_for_each_dev'>
+        <parameter type-id='5e2671f8'/>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='92d15ae9'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_generic_runtime_suspend' mangled-name='pm_generic_runtime_suspend' filepath='include/linux/pm_runtime.h' line='33' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_generic_runtime_suspend'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_generic_runtime_resume' mangled-name='pm_generic_runtime_resume' filepath='include/linux/pm_runtime.h' line='34' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_generic_runtime_resume'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='e6c6c6cd' size-in-bits='64' id='92d15ae9'/>
+      <function-type size-in-bits='64' id='e6c6c6cd'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/arch_topology.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='7c13c5bf' size-in-bits='10240' id='366d2368'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <class-decl name='cpu_topology' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/arch_topology.h' line='44' column='1' id='7c13c5bf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='thread_id' type-id='95e97e5e' visibility='default' filepath='include/linux/arch_topology.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='core_id' type-id='95e97e5e' visibility='default' filepath='include/linux/arch_topology.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='package_id' type-id='95e97e5e' visibility='default' filepath='include/linux/arch_topology.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='llc_id' type-id='95e97e5e' visibility='default' filepath='include/linux/arch_topology.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='thread_sibling' type-id='90bc6bed' visibility='default' filepath='include/linux/arch_topology.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='core_sibling' type-id='90bc6bed' visibility='default' filepath='include/linux/arch_topology.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='llc_sibling' type-id='90bc6bed' visibility='default' filepath='include/linux/arch_topology.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <var-decl name='cpu_topology' type-id='366d2368' mangled-name='cpu_topology' visibility='default' filepath='drivers/base/arch_topology.c' line='459' column='1' elf-symbol-id='cpu_topology'/>
+      <function-decl name='cpufreq_register_notifier' mangled-name='cpufreq_register_notifier' filepath='include/linux/cpufreq.h' line='476' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_register_notifier'>
+        <parameter type-id='d504f73d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpufreq_unregister_notifier' mangled-name='cpufreq_unregister_notifier' filepath='include/linux/cpufreq.h' line='477' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_unregister_notifier'>
+        <parameter type-id='d504f73d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/bus.c' language='LANG_C89'>
+      <function-decl name='bus_register_notifier' mangled-name='bus_register_notifier' filepath='drivers/base/bus.c' line='900' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bus_register_notifier'>
+        <parameter type-id='5e2671f8' name='bus' filepath='drivers/base/bus.c' line='900' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/base/bus.c' line='900' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bus_unregister_notifier' mangled-name='bus_unregister_notifier' filepath='drivers/base/bus.c' line='906' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bus_unregister_notifier'>
+        <parameter type-id='5e2671f8' name='bus' filepath='drivers/base/bus.c' line='906' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/base/bus.c' line='906' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='subsys_system_register' mangled-name='subsys_system_register' filepath='drivers/base/bus.c' line='1156' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='subsys_system_register'>
+        <parameter type-id='5e2671f8' name='subsys' filepath='drivers/base/bus.c' line='1156' column='1'/>
+        <parameter type-id='c97de1ac' name='groups' filepath='drivers/base/bus.c' line='1157' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/class.c' language='LANG_C89'>
+      <function-decl name='__class_register' mangled-name='__class_register' filepath='drivers/base/class.c' line='152' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__class_register'>
+        <parameter type-id='67aca04f' name='cls' filepath='drivers/base/class.c' line='152' column='1'/>
+        <parameter type-id='a57283f9' name='key' filepath='drivers/base/class.c' line='152' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__class_create' mangled-name='__class_create' filepath='drivers/base/class.c' line='225' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__class_create'>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/base/class.c' line='225' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/class.c' line='225' column='1'/>
+        <parameter type-id='a57283f9' name='key' filepath='drivers/base/class.c' line='226' column='1'/>
+        <return type-id='67aca04f'/>
+      </function-decl>
+      <pointer-type-def type-id='47479831' size-in-bits='64' id='a57283f9'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/component.c' language='LANG_C89'>
+      <class-decl name='component_match_array' size-in-bits='384' is-struct='yes' visibility='default' filepath='drivers/base/component.c' line='47' column='1' id='c991d9f0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='drivers/base/component.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='compare' type-id='92d15ae9' visibility='default' filepath='drivers/base/component.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='compare_typed' type-id='78e7ce8e' visibility='default' filepath='drivers/base/component.c' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='release' type-id='680bf43c' visibility='default' filepath='drivers/base/component.c' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='component' type-id='52f567fe' visibility='default' filepath='drivers/base/component.c' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='duplicate' type-id='b50a4934' visibility='default' filepath='drivers/base/component.c' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='component' size-in-bits='448' is-struct='yes' visibility='default' filepath='drivers/base/component.c' line='72' column='1' id='02e89848'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/base/component.c' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='master' type-id='f623d45b' visibility='default' filepath='drivers/base/component.c' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bound' type-id='b50a4934' visibility='default' filepath='drivers/base/component.c' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ops' type-id='14f24806' visibility='default' filepath='drivers/base/component.c' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='subcomponent' type-id='95e97e5e' visibility='default' filepath='drivers/base/component.c' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/base/component.c' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='master' size-in-bits='448' is-struct='yes' visibility='default' filepath='drivers/base/component.c' line='62' column='1' id='d050fd8b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/base/component.c' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bound' type-id='b50a4934' visibility='default' filepath='drivers/base/component.c' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='27729729' visibility='default' filepath='drivers/base/component.c' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/base/component.c' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='match' type-id='7d9421ac' visibility='default' filepath='drivers/base/component.c' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dentry' type-id='27675065' visibility='default' filepath='drivers/base/component.c' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='component_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/component.h' line='16' column='1' id='89a1ee2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bind' type-id='3385b72d' visibility='default' filepath='include/linux/component.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unbind' type-id='9e6fc9aa' visibility='default' filepath='include/linux/component.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='02e89848' size-in-bits='64' id='52f567fe'/>
+      <pointer-type-def type-id='c991d9f0' size-in-bits='64' id='72dd5196'/>
+      <qualified-type-def type-id='89a1ee2b' const='yes' id='2b7b3388'/>
+      <pointer-type-def type-id='2b7b3388' size-in-bits='64' id='14f24806'/>
+      <pointer-type-def type-id='08bd3e89' size-in-bits='64' id='3385b72d'/>
+      <pointer-type-def type-id='1fc93694' size-in-bits='64' id='78e7ce8e'/>
+      <pointer-type-def type-id='d050fd8b' size-in-bits='64' id='f623d45b'/>
+      <pointer-type-def type-id='be36c378' size-in-bits='64' id='9e6fc9aa'/>
+      <function-decl name='component_match_add_release' mangled-name='component_match_add_release' filepath='drivers/base/component.c' line='401' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='component_match_add_release'>
+        <parameter type-id='fa0b179b' name='master' filepath='drivers/base/component.c' line='401' column='1'/>
+        <parameter type-id='3630c5f2' name='matchptr' filepath='drivers/base/component.c' line='402' column='1'/>
+        <parameter type-id='680bf43c' name='release' filepath='drivers/base/component.c' line='403' column='1'/>
+        <parameter type-id='92d15ae9' name='compare' filepath='drivers/base/component.c' line='404' column='1'/>
+        <parameter type-id='eaa32e2f' name='compare_data' filepath='drivers/base/component.c' line='404' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='component_master_del' mangled-name='component_master_del' filepath='drivers/base/component.c' line='513' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='component_master_del'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/component.c' line='513' column='1'/>
+        <parameter type-id='27729729' name='ops' filepath='drivers/base/component.c' line='514' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='component_unbind_all' mangled-name='component_unbind_all' filepath='drivers/base/component.c' line='549' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='component_unbind_all'>
+        <parameter type-id='fa0b179b' name='master_dev' filepath='drivers/base/component.c' line='549' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/base/component.c' line='549' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='component_bind_all' mangled-name='component_bind_all' filepath='drivers/base/component.c' line='632' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='component_bind_all'>
+        <parameter type-id='fa0b179b' name='master_dev' filepath='drivers/base/component.c' line='632' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/base/component.c' line='632' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='component_add' mangled-name='component_add' filepath='drivers/base/component.c' line='742' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='component_add'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/component.c' line='742' column='1'/>
+        <parameter type-id='14f24806' name='ops' filepath='drivers/base/component.c' line='742' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='component_del' mangled-name='component_del' filepath='drivers/base/component.c' line='757' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='component_del'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/component.c' line='757' column='1'/>
+        <parameter type-id='14f24806' name='ops' filepath='drivers/base/component.c' line='757' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='37c0f586' size-in-bits='64' id='7d9421ac'/>
+      <pointer-type-def type-id='7d9421ac' size-in-bits='64' id='3630c5f2'/>
+      <pointer-type-def type-id='ec8469f9' size-in-bits='64' id='27729729'/>
+      <function-type size-in-bits='64' id='08bd3e89'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1fc93694'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='be36c378'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='b5d4a6d2' size-in-bits='64' id='680bf43c'/>
+      <qualified-type-def type-id='85fa4490' const='yes' id='ec8469f9'/>
+      <class-decl name='component_match' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/base/component.c' line='56' column='1' id='37c0f586'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alloc' type-id='b59d7dce' visibility='default' filepath='drivers/base/component.c' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num' type-id='b59d7dce' visibility='default' filepath='drivers/base/component.c' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='compare' type-id='72dd5196' visibility='default' filepath='drivers/base/component.c' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='component_master_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/component.h' line='52' column='1' id='85fa4490'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bind' type-id='613d39f5' visibility='default' filepath='include/linux/component.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unbind' type-id='dd787f72' visibility='default' filepath='include/linux/component.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/core.c' language='LANG_C89'>
+      <class-decl name='device_private' size-in-bits='1664' is-struct='yes' visibility='default' filepath='drivers/base/base.h' line='77' column='1' id='d066d158'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='klist_children' type-id='6160a6ce' visibility='default' filepath='drivers/base/base.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='knode_parent' type-id='3d045a53' visibility='default' filepath='drivers/base/base.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='knode_driver' type-id='3d045a53' visibility='default' filepath='drivers/base/base.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='knode_bus' type-id='3d045a53' visibility='default' filepath='drivers/base/base.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='knode_class' type-id='3d045a53' visibility='default' filepath='drivers/base/base.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='deferred_probe' type-id='72f469ec' visibility='default' filepath='drivers/base/base.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='async_driver' type-id='00c7b870' visibility='default' filepath='drivers/base/base.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='device' type-id='fa0b179b' visibility='default' filepath='drivers/base/base.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='dead' type-id='f9b06939' visibility='default' filepath='drivers/base/base.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='klist' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/klist.h' line='18' column='1' id='6160a6ce'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='k_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/klist.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='k_list' type-id='72f469ec' visibility='default' filepath='include/linux/klist.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get' type-id='a80942ae' visibility='default' filepath='include/linux/klist.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='put' type-id='a80942ae' visibility='default' filepath='include/linux/klist.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='klist_node' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/klist.h' line='37' column='1' id='3d045a53'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='n_klist' type-id='eaa32e2f' visibility='default' filepath='include/linux/klist.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_node' type-id='72f469ec' visibility='default' filepath='include/linux/klist.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='n_ref' type-id='400fb07b' visibility='default' filepath='include/linux/klist.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='subsys_private' size-in-bits='4352' is-struct='yes' visibility='default' filepath='drivers/base/base.h' line='29' column='1' id='4a19d21f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subsys' type-id='8cf069a2' visibility='default' filepath='drivers/base/base.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='devices_kset' type-id='89b70200' visibility='default' filepath='drivers/base/base.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='interfaces' type-id='72f469ec' visibility='default' filepath='drivers/base/base.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='drivers/base/base.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='drivers_kset' type-id='89b70200' visibility='default' filepath='drivers/base/base.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='klist_devices' type-id='6160a6ce' visibility='default' filepath='drivers/base/base.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='klist_drivers' type-id='6160a6ce' visibility='default' filepath='drivers/base/base.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='bus_notifier' type-id='708c2394' visibility='default' filepath='drivers/base/base.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='drivers_autoprobe' type-id='f0981eeb' visibility='default' filepath='drivers/base/base.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='bus' type-id='5e2671f8' visibility='default' filepath='drivers/base/base.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='glue_dirs' type-id='8cf069a2' visibility='default' filepath='drivers/base/base.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='class' type-id='67aca04f' visibility='default' filepath='drivers/base/base.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='driver_private' size-in-bits='1472' is-struct='yes' visibility='default' filepath='drivers/base/base.h' line='47' column='1' id='e44b8084'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='drivers/base/base.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='klist_devices' type-id='6160a6ce' visibility='default' filepath='drivers/base/base.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='knode_bus' type-id='3d045a53' visibility='default' filepath='drivers/base/base.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='mkobj' type-id='47ed147a' visibility='default' filepath='drivers/base/base.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='driver' type-id='00c7b870' visibility='default' filepath='drivers/base/base.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d066d158' size-in-bits='64' id='0d3b0dd0'/>
+      <pointer-type-def type-id='e44b8084' size-in-bits='64' id='52abf1d4'/>
+      <pointer-type-def type-id='3d045a53' size-in-bits='64' id='4b4b90b3'/>
+      <pointer-type-def type-id='4a19d21f' size-in-bits='64' id='5da77305'/>
+      <pointer-type-def type-id='b3fff074' size-in-bits='64' id='a80942ae'/>
+      <function-decl name='class_unregister' mangled-name='class_unregister' filepath='include/linux/device.h' line='640' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='class_unregister'>
+        <parameter type-id='67aca04f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_register' mangled-name='device_register' filepath='drivers/base/core.c' line='2969' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='2969' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_link_del' mangled-name='device_link_del' filepath='drivers/base/core.c' line='819' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_link_del'>
+        <parameter type-id='7acfb3fa' name='link' filepath='drivers/base/core.c' line='819' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_store_int' mangled-name='device_store_int' filepath='drivers/base/core.c' line='1691' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_store_int'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='1691' column='1'/>
+        <parameter type-id='89a2612a' name='attr' filepath='drivers/base/core.c' line='1692' column='1'/>
+        <parameter type-id='80f4b756' name='buf' filepath='drivers/base/core.c' line='1693' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/base/core.c' line='1693' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='device_show_int' mangled-name='device_show_int' filepath='drivers/base/core.c' line='1711' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_show_int'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='1711' column='1'/>
+        <parameter type-id='89a2612a' name='attr' filepath='drivers/base/core.c' line='1712' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='drivers/base/core.c' line='1713' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='device_store_bool' mangled-name='device_store_bool' filepath='drivers/base/core.c' line='1721' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_store_bool'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='1721' column='1'/>
+        <parameter type-id='89a2612a' name='attr' filepath='drivers/base/core.c' line='1721' column='1'/>
+        <parameter type-id='80f4b756' name='buf' filepath='drivers/base/core.c' line='1722' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/base/core.c' line='1722' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='device_show_bool' mangled-name='device_show_bool' filepath='drivers/base/core.c' line='1733' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_show_bool'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='1733' column='1'/>
+        <parameter type-id='89a2612a' name='attr' filepath='drivers/base/core.c' line='1733' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='drivers/base/core.c' line='1734' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='device_remove_groups' mangled-name='device_remove_groups' filepath='drivers/base/core.c' line='1999' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_remove_groups'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='1999' column='1'/>
+        <parameter type-id='c97de1ac' name='groups' filepath='drivers/base/core.c' line='2000' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_create_bin_file' mangled-name='device_create_bin_file' filepath='drivers/base/core.c' line='2315' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_create_bin_file'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='2315' column='1'/>
+        <parameter type-id='559ac6f0' name='attr' filepath='drivers/base/core.c' line='2316' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_remove_bin_file' mangled-name='device_remove_bin_file' filepath='drivers/base/core.c' line='2330' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_remove_bin_file'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='2330' column='1'/>
+        <parameter type-id='559ac6f0' name='attr' filepath='drivers/base/core.c' line='2331' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_rename' mangled-name='device_rename' filepath='drivers/base/core.c' line='3731' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_rename'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='3731' column='1'/>
+        <parameter type-id='80f4b756' name='new_name' filepath='drivers/base/core.c' line='3731' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='_dev_emerg' mangled-name='_dev_emerg' filepath='drivers/base/core.c' line='4078' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_dev_emerg'>
+        <parameter type-id='8df61054' name='dev' filepath='drivers/base/core.c' line='4078' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/base/core.c' line='4078' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_match_name' mangled-name='device_match_name' filepath='drivers/base/core.c' line='4163' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_match_name'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='4163' column='1'/>
+        <parameter type-id='eaa32e2f' name='name' filepath='drivers/base/core.c' line='4163' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_match_fwnode' mangled-name='device_match_fwnode' filepath='drivers/base/core.c' line='4175' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_match_fwnode'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='4175' column='1'/>
+        <parameter type-id='eaa32e2f' name='fwnode' filepath='drivers/base/core.c' line='4175' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='dbce337a' size-in-bits='64' id='559ac6f0'/>
+      <pointer-type-def type-id='a78232f6' size-in-bits='64' id='8df61054'/>
+      <pointer-type-def type-id='dbf3947c' size-in-bits='64' id='89a2612a'/>
+      <pointer-type-def type-id='b52abcec' size-in-bits='64' id='7acfb3fa'/>
+      <function-type size-in-bits='64' id='b3fff074'>
+        <parameter type-id='4b4b90b3'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <qualified-type-def type-id='d83a2db1' const='yes' id='dbce337a'/>
+      <qualified-type-def type-id='66e487eb' const='yes' id='a78232f6'/>
+      <class-decl name='device_attribute' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='837' column='1' id='dbf3947c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' visibility='default' filepath='include/linux/device.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='3dcc4acf' visibility='default' filepath='include/linux/device.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='839105d3' visibility='default' filepath='include/linux/device.h' line='841' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_link' size-in-bits='8320' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='1366' column='1' id='b52abcec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supplier' type-id='fa0b179b' visibility='default' filepath='include/linux/device.h' line='1367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_node' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='consumer' type-id='fa0b179b' visibility='default' filepath='include/linux/device.h' line='1369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='c_node' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='link_dev' type-id='66e487eb' visibility='default' filepath='include/linux/device.h' line='1371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='status' type-id='3f7ac0c9' visibility='default' filepath='include/linux/device.h' line='1372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/device.h' line='1373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='rpm_active' type-id='64615833' visibility='default' filepath='include/linux/device.h' line='1374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7840'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/device.h' line='1375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/device.h' line='1377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='supplier_preactivated' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1384' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='device_link_state' filepath='include/linux/device.h' line='1096' column='1' id='3f7ac0c9'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DL_STATE_NONE' value='-1'/>
+        <enumerator name='DL_STATE_DORMANT' value='0'/>
+        <enumerator name='DL_STATE_AVAILABLE' value='1'/>
+        <enumerator name='DL_STATE_CONSUMER_PROBE' value='2'/>
+        <enumerator name='DL_STATE_ACTIVE' value='3'/>
+        <enumerator name='DL_STATE_SUPPLIER_UNBIND' value='4'/>
+      </enum-decl>
+      <pointer-type-def type-id='4bbe36cb' size-in-bits='64' id='3dcc4acf'/>
+      <pointer-type-def type-id='50bd3cc7' size-in-bits='64' id='839105d3'/>
+      <function-type size-in-bits='64' id='4bbe36cb'>
+        <parameter type-id='fa0b179b' name='dev'/>
+        <parameter type-id='89a2612a' name='attr'/>
+        <parameter type-id='26a90f95' name='buf'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='50bd3cc7'>
+        <parameter type-id='fa0b179b' name='dev'/>
+        <parameter type-id='89a2612a' name='attr'/>
+        <parameter type-id='80f4b756' name='buf'/>
+        <parameter type-id='b59d7dce' name='size'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/cpu.c' language='LANG_C89'>
+      <var-decl name='cpu_subsys' type-id='b31bfc8a' mangled-name='cpu_subsys' visibility='default' filepath='drivers/base/cpu.c' line='128' column='1' elf-symbol-id='cpu_subsys'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/dd.c' language='LANG_C89'>
+      <function-decl name='device_bind_driver' mangled-name='device_bind_driver' filepath='drivers/base/dd.c' line='466' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_bind_driver'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/dd.c' line='466' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='driver_attach' mangled-name='driver_attach' filepath='drivers/base/dd.c' line='1113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='driver_attach'>
+        <parameter type-id='00c7b870' name='drv' filepath='drivers/base/dd.c' line='1113' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/devcon.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='80f4b756' size-in-bits='128' id='35e20666'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <typedef-decl name='devcon_match_fn_t' type-id='2100d554' filepath='include/linux/device.h' line='1049' column='1' id='2517d133'/>
+      <class-decl name='device_connection' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='1042' column='1' id='c42d830c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/device.h' line='1043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='endpoint' type-id='35e20666' visibility='default' filepath='include/linux/device.h' line='1044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1046' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='c42d830c' size-in-bits='64' id='ee2d5a9a'/>
+      <pointer-type-def type-id='a179af1a' size-in-bits='64' id='2100d554'/>
+      <function-decl name='fwnode_connection_find_match' mangled-name='fwnode_connection_find_match' filepath='drivers/base/devcon.c' line='71' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fwnode_connection_find_match'>
+        <parameter type-id='4a935625' name='fwnode' filepath='drivers/base/devcon.c' line='71' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/base/devcon.c' line='72' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/base/devcon.c' line='72' column='1'/>
+        <parameter type-id='2517d133' name='match' filepath='drivers/base/devcon.c' line='73' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='device_connection_find_match' mangled-name='device_connection_find_match' filepath='drivers/base/devcon.c' line='99' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_connection_find_match'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/devcon.c' line='99' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/base/devcon.c' line='99' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/base/devcon.c' line='100' column='1'/>
+        <parameter type-id='2517d133' name='match' filepath='drivers/base/devcon.c' line='100' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='a179af1a'>
+        <parameter type-id='ee2d5a9a'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/devres.c' language='LANG_C89'>
+      <function-decl name='devm_kvasprintf' mangled-name='devm_kvasprintf' filepath='drivers/base/devres.c' line='888' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_kvasprintf'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/devres.c' line='888' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='drivers/base/devres.c' line='888' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/base/devres.c' line='888' column='1'/>
+        <parameter type-id='2aee9912' name='ap' filepath='drivers/base/devres.c' line='889' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <typedef-decl name='va_list' type-id='7f896fb4' filepath='prebuilts-master/clang/host/linux-x86/clang-r407598/lib64/clang/12.0.1/include/stdarg.h' line='14' column='1' id='2aee9912'/>
+      <typedef-decl name='__builtin_va_list' type-id='5f919c1f' id='7f896fb4'/>
+      <class-decl name='__va_list' size-in-bits='256' is-struct='yes' visibility='default' filepath='kernel/panic.c' line='170' column='1' id='5f919c1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__stack' type-id='eaa32e2f' visibility='default' filepath='kernel/panic.c' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='__gr_top' type-id='eaa32e2f' visibility='default' filepath='kernel/panic.c' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__vr_top' type-id='eaa32e2f' visibility='default' filepath='kernel/panic.c' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='__gr_offs' type-id='95e97e5e' visibility='default' filepath='kernel/panic.c' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='__vr_offs' type-id='95e97e5e' visibility='default' filepath='kernel/panic.c' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/driver.c' language='LANG_C89'>
+      <function-decl name='driver_find_device' mangled-name='driver_find_device' filepath='drivers/base/driver.c' line='75' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='driver_find_device'>
+        <parameter type-id='00c7b870' name='drv' filepath='drivers/base/driver.c' line='75' column='1'/>
+        <parameter type-id='fa0b179b' name='start' filepath='drivers/base/driver.c' line='76' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/base/driver.c' line='76' column='1'/>
+        <parameter type-id='92d15ae9' name='match' filepath='drivers/base/driver.c' line='77' column='1'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='driver_find' mangled-name='driver_find' filepath='drivers/base/driver.c' line='213' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='driver_find'>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/driver.c' line='213' column='1'/>
+        <parameter type-id='5e2671f8' name='bus' filepath='drivers/base/driver.c' line='213' column='1'/>
+        <return type-id='00c7b870'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/firmware_loader/main.c' language='LANG_C89'>
+      <pointer-type-def type-id='fce0537d' size-in-bits='64' id='6c2331f5'/>
+      <pointer-type-def type-id='b4dce158' size-in-bits='64' id='c8e4e392'/>
+      <function-decl name='request_firmware' mangled-name='request_firmware' filepath='drivers/base/firmware_loader/main.c' line='824' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='request_firmware'>
+        <parameter type-id='6c2331f5' name='firmware_p' filepath='drivers/base/firmware_loader/main.c' line='824' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/firmware_loader/main.c' line='824' column='1'/>
+        <parameter type-id='fa0b179b' name='device' filepath='drivers/base/firmware_loader/main.c' line='825' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='firmware_request_nowarn' mangled-name='firmware_request_nowarn' filepath='drivers/base/firmware_loader/main.c' line='851' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='firmware_request_nowarn'>
+        <parameter type-id='6c2331f5' name='firmware' filepath='drivers/base/firmware_loader/main.c' line='851' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/firmware_loader/main.c' line='851' column='1'/>
+        <parameter type-id='fa0b179b' name='device' filepath='drivers/base/firmware_loader/main.c' line='852' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='request_firmware_direct' mangled-name='request_firmware_direct' filepath='drivers/base/firmware_loader/main.c' line='876' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='request_firmware_direct'>
+        <parameter type-id='6c2331f5' name='firmware_p' filepath='drivers/base/firmware_loader/main.c' line='876' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/firmware_loader/main.c' line='877' column='1'/>
+        <parameter type-id='fa0b179b' name='device' filepath='drivers/base/firmware_loader/main.c' line='877' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='request_firmware_into_buf' mangled-name='request_firmware_into_buf' filepath='drivers/base/firmware_loader/main.c' line='930' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='request_firmware_into_buf'>
+        <parameter type-id='6c2331f5' name='firmware_p' filepath='drivers/base/firmware_loader/main.c' line='930' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/firmware_loader/main.c' line='930' column='1'/>
+        <parameter type-id='fa0b179b' name='device' filepath='drivers/base/firmware_loader/main.c' line='931' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='drivers/base/firmware_loader/main.c' line='931' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/base/firmware_loader/main.c' line='931' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='request_firmware_nowait' mangled-name='request_firmware_nowait' filepath='drivers/base/firmware_loader/main.c' line='1012' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='request_firmware_nowait'>
+        <parameter type-id='2730d015' name='module' filepath='drivers/base/firmware_loader/main.c' line='1013' column='1'/>
+        <parameter type-id='b50a4934' name='uevent' filepath='drivers/base/firmware_loader/main.c' line='1013' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/firmware_loader/main.c' line='1014' column='1'/>
+        <parameter type-id='fa0b179b' name='device' filepath='drivers/base/firmware_loader/main.c' line='1014' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='drivers/base/firmware_loader/main.c' line='1014' column='1'/>
+        <parameter type-id='eaa32e2f' name='context' filepath='drivers/base/firmware_loader/main.c' line='1014' column='1'/>
+        <parameter type-id='c8e4e392' name='cont' filepath='drivers/base/firmware_loader/main.c' line='1015' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='732bc085' size-in-bits='64' id='fce0537d'/>
+      <function-type size-in-bits='64' id='b4dce158'>
+        <parameter type-id='fce0537d'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <qualified-type-def type-id='62049774' const='yes' id='732bc085'/>
+      <class-decl name='firmware' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/firmware.h' line='12' column='1' id='62049774'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/firmware.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='bbaf3419' visibility='default' filepath='include/linux/firmware.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pages' type-id='9f93c9da' visibility='default' filepath='include/linux/firmware.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/firmware.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/platform.c' language='LANG_C89'>
+      <qualified-type-def type-id='d53c2eb5' const='yes' id='7c7c6daa'/>
+      <pointer-type-def type-id='7c7c6daa' size-in-bits='64' id='77e06080'/>
+      <var-decl name='platform_bus_type' type-id='b31bfc8a' mangled-name='platform_bus_type' visibility='default' filepath='drivers/base/platform.c' line='1262' column='1' elf-symbol-id='platform_bus_type'/>
+      <function-decl name='platform_get_irq_optional' mangled-name='platform_get_irq_optional' filepath='drivers/base/platform.c' line='194' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_get_irq_optional'>
+        <parameter type-id='db362995' name='dev' filepath='drivers/base/platform.c' line='194' column='1'/>
+        <parameter type-id='f0981eeb' name='num' filepath='drivers/base/platform.c' line='194' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='platform_irq_count' mangled-name='platform_irq_count' filepath='drivers/base/platform.c' line='206' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_irq_count'>
+        <parameter type-id='db362995' name='dev' filepath='drivers/base/platform.c' line='206' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_irq_get_byname' mangled-name='of_irq_get_byname' filepath='include/linux/of_irq.h' line='47' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_irq_get_byname'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='platform_get_irq_byname_optional' mangled-name='platform_get_irq_byname_optional' filepath='drivers/base/platform.c' line='296' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_get_irq_byname_optional'>
+        <parameter type-id='db362995' name='dev' filepath='drivers/base/platform.c' line='296' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/platform.c' line='297' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__platform_driver_register' mangled-name='__platform_driver_register' filepath='drivers/base/platform.c' line='732' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__platform_driver_register'>
+        <parameter type-id='d53c2eb5' name='drv' filepath='drivers/base/platform.c' line='732' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/base/platform.c' line='733' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__platform_driver_probe' mangled-name='__platform_driver_probe' filepath='drivers/base/platform.c' line='775' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__platform_driver_probe'>
+        <parameter type-id='d53c2eb5' name='drv' filepath='drivers/base/platform.c' line='775' column='1'/>
+        <parameter type-id='e05ae2cd' name='probe' filepath='drivers/base/platform.c' line='776' column='1'/>
+        <parameter type-id='2730d015' name='module' filepath='drivers/base/platform.c' line='776' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__platform_register_drivers' mangled-name='__platform_register_drivers' filepath='drivers/base/platform.c' line='897' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__platform_register_drivers'>
+        <parameter type-id='77e06080' name='drivers' filepath='drivers/base/platform.c' line='897' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='drivers/base/platform.c' line='898' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/base/platform.c' line='898' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='platform_unregister_drivers' mangled-name='platform_unregister_drivers' filepath='drivers/base/platform.c' line='935' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_unregister_drivers'>
+        <parameter type-id='77e06080' name='drivers' filepath='drivers/base/platform.c' line='935' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='drivers/base/platform.c' line='936' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='b083f9b9' size-in-bits='64' id='e05ae2cd'/>
+      <pointer-type-def type-id='7bb4e525' size-in-bits='64' id='db362995'/>
+      <pointer-type-def type-id='0742eda5' size-in-bits='64' id='d53c2eb5'/>
+      <class-decl name='platform_device' size-in-bits='7872' is-struct='yes' visibility='default' filepath='include/linux/platform_device.h' line='22' column='1' id='7bb4e525'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/platform_device.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/platform_device.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='id_auto' type-id='b50a4934' visibility='default' filepath='include/linux/platform_device.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/platform_device.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='platform_dma_mask' type-id='91ce1af9' visibility='default' filepath='include/linux/platform_device.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='num_resources' type-id='19c2251e' visibility='default' filepath='include/linux/platform_device.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='resource' type-id='c9d64c0d' visibility='default' filepath='include/linux/platform_device.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='id_entry' type-id='79c2f4f8' visibility='default' filepath='include/linux/platform_device.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='driver_override' type-id='26a90f95' visibility='default' filepath='include/linux/platform_device.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='mfd_cell' type-id='fb02122b' visibility='default' filepath='include/linux/platform_device.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='archdata' type-id='89ee2f2f' visibility='default' filepath='include/linux/platform_device.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='platform_driver' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/linux/platform_device.h' line='190' column='1' id='0742eda5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='probe' type-id='e05ae2cd' visibility='default' filepath='include/linux/platform_device.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='remove' type-id='e05ae2cd' visibility='default' filepath='include/linux/platform_device.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shutdown' type-id='2cbd236c' visibility='default' filepath='include/linux/platform_device.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='suspend' type-id='5a92c1cc' visibility='default' filepath='include/linux/platform_device.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='resume' type-id='e05ae2cd' visibility='default' filepath='include/linux/platform_device.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/platform_device.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='id_table' type-id='79c2f4f8' visibility='default' filepath='include/linux/platform_device.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='prevent_deferred_probe' type-id='b50a4934' visibility='default' filepath='include/linux/platform_device.h' line='198' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='213c3202' size-in-bits='64' id='79c2f4f8'/>
+      <pointer-type-def type-id='90220a52' size-in-bits='64' id='5a92c1cc'/>
+      <pointer-type-def type-id='54cc740b' size-in-bits='64' id='fb02122b'/>
+      <class-decl name='pdev_archdata' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/device.h' line='14' column='1' id='89ee2f2f'/>
+      <pointer-type-def type-id='cfb839d2' size-in-bits='64' id='2cbd236c'/>
+      <qualified-type-def type-id='c4ec4353' const='yes' id='213c3202'/>
+      <class-decl name='mfd_cell' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/mfd/core.h' line='29' column='1' id='54cc740b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/mfd/core.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/mfd/core.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usage_count' type-id='8a47abc3' visibility='default' filepath='include/linux/mfd/core.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enable' type-id='e05ae2cd' visibility='default' filepath='include/linux/mfd/core.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='disable' type-id='e05ae2cd' visibility='default' filepath='include/linux/mfd/core.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='suspend' type-id='e05ae2cd' visibility='default' filepath='include/linux/mfd/core.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='resume' type-id='e05ae2cd' visibility='default' filepath='include/linux/mfd/core.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='platform_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mfd/core.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pdata_size' type-id='b59d7dce' visibility='default' filepath='include/linux/mfd/core.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='properties' type-id='6db3218b' visibility='default' filepath='include/linux/mfd/core.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='of_compatible' type-id='80f4b756' visibility='default' filepath='include/linux/mfd/core.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='acpi_match' type-id='66421794' visibility='default' filepath='include/linux/mfd/core.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='num_resources' type-id='95e97e5e' visibility='default' filepath='include/linux/mfd/core.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='resources' type-id='e153f6de' visibility='default' filepath='include/linux/mfd/core.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ignore_resource_conflicts' type-id='b50a4934' visibility='default' filepath='include/linux/mfd/core.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='904'>
+          <var-decl name='pm_runtime_no_callbacks' type-id='b50a4934' visibility='default' filepath='include/linux/mfd/core.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='parent_supplies' type-id='13956559' visibility='default' filepath='include/linux/mfd/core.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='num_parent_supplies' type-id='95e97e5e' visibility='default' filepath='include/linux/mfd/core.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='49178f86' size-in-bits='64' id='8a47abc3'/>
+      <pointer-type-def type-id='b99c00c9' size-in-bits='64' id='13956559'/>
+      <pointer-type-def type-id='7a7796b6' size-in-bits='64' id='66421794'/>
+      <pointer-type-def type-id='20b17040' size-in-bits='64' id='e153f6de'/>
+      <pointer-type-def type-id='822bf95b' size-in-bits='64' id='6db3218b'/>
+      <class-decl name='platform_device_id' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='582' column='1' id='c4ec4353'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/linux/mod_devicetable.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_data' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='584' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='160' id='664ac0b7'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <qualified-type-def type-id='80f4b756' const='yes' id='b99c00c9'/>
+      <qualified-type-def type-id='7fe6c639' const='yes' id='7a7796b6'/>
+      <qualified-type-def type-id='5218160d' const='yes' id='20b17040'/>
+      <class-decl name='property_entry' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/property.h' line='231' column='1' id='822bf95b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/property.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='length' type-id='b59d7dce' visibility='default' filepath='include/linux/property.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='is_array' type-id='b50a4934' visibility='default' filepath='include/linux/property.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='type' type-id='fec738e2' visibility='default' filepath='include/linux/property.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='7f9d5221' visibility='default' filepath='include/linux/property.h' line='236' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dev_prop_type' filepath='include/linux/property.h' line='19' column='1' id='fec738e2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DEV_PROP_U8' value='0'/>
+        <enumerator name='DEV_PROP_U16' value='1'/>
+        <enumerator name='DEV_PROP_U32' value='2'/>
+        <enumerator name='DEV_PROP_U64' value='3'/>
+        <enumerator name='DEV_PROP_STRING' value='4'/>
+        <enumerator name='DEV_PROP_MAX' value='5'/>
+      </enum-decl>
+      <class-decl name='mfd_cell_acpi_match' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mfd/core.h' line='19' column='1' id='7fe6c639'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pnpid' type-id='80f4b756' visibility='default' filepath='include/linux/mfd/core.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='adr' type-id='340461fe' visibility='default' filepath='include/linux/mfd/core.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/property.h' line='236' column='1' id='7f9d5221'>
+        <data-member access='private'>
+          <var-decl name='pointer' type-id='cbb0e2f4' visibility='default' filepath='include/linux/property.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='value' type-id='8e9a613b' visibility='default' filepath='include/linux/property.h' line='250' column='1'/>
+        </data-member>
+      </union-decl>
+      <qualified-type-def type-id='3a47d82b' const='yes' id='340461fe'/>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/property.h' line='237' column='1' id='cbb0e2f4'>
+        <data-member access='private'>
+          <var-decl name='u8_data' type-id='bbaf3419' visibility='default' filepath='include/linux/property.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u16_data' type-id='80455526' visibility='default' filepath='include/linux/property.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u32_data' type-id='aded214c' visibility='default' filepath='include/linux/property.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u64_data' type-id='c8fec899' visibility='default' filepath='include/linux/property.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='str' type-id='13956559' visibility='default' filepath='include/linux/property.h' line='242' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/property.h' line='244' column='1' id='8e9a613b'>
+        <data-member access='private'>
+          <var-decl name='u8_data' type-id='f9b06939' visibility='default' filepath='include/linux/property.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u16_data' type-id='1dc6a898' visibility='default' filepath='include/linux/property.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u32_data' type-id='19c2251e' visibility='default' filepath='include/linux/property.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u64_data' type-id='91ce1af9' visibility='default' filepath='include/linux/property.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='str' type-id='80f4b756' visibility='default' filepath='include/linux/property.h' line='249' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='d5c0a628' size-in-bits='64' id='80455526'/>
+      <pointer-type-def type-id='49c81889' size-in-bits='64' id='c8fec899'/>
+      <qualified-type-def type-id='91ce1af9' const='yes' id='49c81889'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/power/common.c' language='LANG_C89'>
+      <function-decl name='dev_pm_domain_attach_by_name' mangled-name='dev_pm_domain_attach_by_name' filepath='drivers/base/power/common.c' line='160' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_domain_attach_by_name'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/common.c' line='160' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/power/common.c' line='161' column='1'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/power/domain.c' language='LANG_C89'>
+      <class-decl name='opp_table' size-in-bits='4544' is-struct='yes' visibility='default' filepath='drivers/opp/opp.h' line='162' column='1' id='08aeec0d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/opp/opp.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='head' type-id='708c2394' visibility='default' filepath='drivers/opp/opp.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dev_list' type-id='72f469ec' visibility='default' filepath='drivers/opp/opp.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='opp_list' type-id='72f469ec' visibility='default' filepath='drivers/opp/opp.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='drivers/opp/opp.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='drivers/opp/opp.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='np' type-id='9a537bbe' visibility='default' filepath='drivers/opp/opp.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='clock_latency_ns_max' type-id='7359adad' visibility='default' filepath='drivers/opp/opp.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='voltage_tolerance_v1' type-id='f0981eeb' visibility='default' filepath='drivers/opp/opp.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='parsed_static_opps' type-id='f0981eeb' visibility='default' filepath='drivers/opp/opp.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='shared_opp' type-id='943b03b5' visibility='default' filepath='drivers/opp/opp.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='suspend_opp' type-id='02e48bc6' visibility='default' filepath='drivers/opp/opp.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='genpd_virt_dev_lock' type-id='925167dc' visibility='default' filepath='drivers/opp/opp.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='genpd_virt_devs' type-id='50764ba3' visibility='default' filepath='drivers/opp/opp.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='required_opp_tables' type-id='ebb60db5' visibility='default' filepath='drivers/opp/opp.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='required_opp_count' type-id='f0981eeb' visibility='default' filepath='drivers/opp/opp.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='supported_hw' type-id='807869d3' visibility='default' filepath='drivers/opp/opp.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='supported_hw_count' type-id='f0981eeb' visibility='default' filepath='drivers/opp/opp.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='prop_name' type-id='80f4b756' visibility='default' filepath='drivers/opp/opp.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='drivers/opp/opp.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='regulators' type-id='4e034354' visibility='default' filepath='drivers/opp/opp.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='regulator_count' type-id='95e97e5e' visibility='default' filepath='drivers/opp/opp.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='genpd_performance_state' type-id='b50a4934' visibility='default' filepath='drivers/opp/opp.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2280'>
+          <var-decl name='is_genpd' type-id='b50a4934' visibility='default' filepath='drivers/opp/opp.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='set_opp' type-id='c1433076' visibility='default' filepath='drivers/opp/opp.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='set_opp_data' type-id='7727bbf2' visibility='default' filepath='drivers/opp/opp.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dentry' type-id='27675066' visibility='default' filepath='drivers/opp/opp.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='dentry_name' type-id='11641789' visibility='default' filepath='drivers/opp/opp.h' line='200' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='generic_pm_domain' size-in-bits='11904' is-struct='yes' visibility='default' filepath='include/linux/pm_domain.h' line='94' column='1' id='d52c7591'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/pm_domain.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='domain' type-id='7c94eaa3' visibility='default' filepath='include/linux/pm_domain.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='gpd_list_node' type-id='72f469ec' visibility='default' filepath='include/linux/pm_domain.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='master_links' type-id='72f469ec' visibility='default' filepath='include/linux/pm_domain.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='slave_links' type-id='72f469ec' visibility='default' filepath='include/linux/pm_domain.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='dev_list' type-id='72f469ec' visibility='default' filepath='include/linux/pm_domain.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='gov' type-id='5db9bd89' visibility='default' filepath='include/linux/pm_domain.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='power_off_work' type-id='ef9025d0' visibility='default' filepath='include/linux/pm_domain.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='provider' type-id='4a935625' visibility='default' filepath='include/linux/pm_domain.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='has_provider' type-id='b50a4934' visibility='default' filepath='include/linux/pm_domain.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pm_domain.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='sd_count' type-id='49178f86' visibility='default' filepath='include/linux/pm_domain.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10272'>
+          <var-decl name='status' type-id='8c497ed4' visibility='default' filepath='include/linux/pm_domain.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='device_count' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_domain.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10336'>
+          <var-decl name='suspended_count' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_domain.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='prepared_count' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_domain.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10400'>
+          <var-decl name='performance_state' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_domain.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='cpus' type-id='b16b461b' visibility='default' filepath='include/linux/pm_domain.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='power_off' type-id='16052051' visibility='default' filepath='include/linux/pm_domain.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='power_on' type-id='16052051' visibility='default' filepath='include/linux/pm_domain.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='opp_table' type-id='e62a60bd' visibility='default' filepath='include/linux/pm_domain.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='opp_to_performance_state' type-id='0adcd7cb' visibility='default' filepath='include/linux/pm_domain.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='set_performance_state' type-id='791b4a6b' visibility='default' filepath='include/linux/pm_domain.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='dev_ops' type-id='e56d1ecd' visibility='default' filepath='include/linux/pm_domain.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='max_off_time_ns' type-id='9b7c55ef' visibility='default' filepath='include/linux/pm_domain.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='max_off_time_changed' type-id='b50a4934' visibility='default' filepath='include/linux/pm_domain.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11016'>
+          <var-decl name='cached_power_down_ok' type-id='b50a4934' visibility='default' filepath='include/linux/pm_domain.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11024'>
+          <var-decl name='cached_power_down_state_idx' type-id='b50a4934' visibility='default' filepath='include/linux/pm_domain.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='attach_dev' type-id='9ab734dd' visibility='default' filepath='include/linux/pm_domain.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='detach_dev' type-id='c24523fe' visibility='default' filepath='include/linux/pm_domain.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_domain.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='states' type-id='ab59ee31' visibility='default' filepath='include/linux/pm_domain.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='free_states' type-id='28773d52' visibility='default' filepath='include/linux/pm_domain.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='state_count' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_domain.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11424'>
+          <var-decl name='state_idx' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_domain.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11456'>
+          <var-decl name='on_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_domain.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='accounting_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_domain.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='lock_ops' type-id='adbc0a2b' visibility='default' filepath='include/linux/pm_domain.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='' type-id='d4d3f8b8' visibility='default' filepath='include/linux/pm_domain.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_power_governor' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pm_domain.h' line='71' column='1' id='3e115181'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power_down_ok' type-id='cb27da0d' visibility='default' filepath='include/linux/pm_domain.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='suspend_ok' type-id='df4bf537' visibility='default' filepath='include/linux/pm_domain.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='gpd_status' filepath='include/linux/pm_domain.h' line='66' column='1' id='8c497ed4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='GPD_STATE_ACTIVE' value='0'/>
+        <enumerator name='GPD_STATE_POWER_OFF' value='1'/>
+      </enum-decl>
+      <class-decl name='gpd_dev_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pm_domain.h' line='76' column='1' id='e56d1ecd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='613d39f5' visibility='default' filepath='include/linux/pm_domain.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stop' type-id='613d39f5' visibility='default' filepath='include/linux/pm_domain.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='genpd_power_state' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/pm_domain.h' line='81' column='1' id='d5e6c299'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power_off_latency_ns' type-id='9b7c55ef' visibility='default' filepath='include/linux/pm_domain.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='power_on_latency_ns' type-id='9b7c55ef' visibility='default' filepath='include/linux/pm_domain.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='residency_ns' type-id='9b7c55ef' visibility='default' filepath='include/linux/pm_domain.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/pm_domain.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='idle_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_domain.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/pm_domain.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='genpd_lock_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/base/power/domain.c' line='44' column='1' id='4c993ea6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='cccdf8f0' visibility='default' filepath='drivers/base/power/domain.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock_nested' type-id='795e6e5f' visibility='default' filepath='drivers/base/power/domain.c' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock_interruptible' type-id='16052051' visibility='default' filepath='drivers/base/power/domain.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unlock' type-id='cccdf8f0' visibility='default' filepath='drivers/base/power/domain.c' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/pm_domain.h' line='138' column='1' id='d4d3f8b8'>
+        <data-member access='private'>
+          <var-decl name='mlock' type-id='925167dc' visibility='default' filepath='include/linux/pm_domain.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='9df67ae2' visibility='default' filepath='include/linux/pm_domain.h' line='140' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/pm_domain.h' line='140' column='1' id='9df67ae2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='slock' type-id='fb4018a0' visibility='default' filepath='include/linux/pm_domain.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock_flags' type-id='7359adad' visibility='default' filepath='include/linux/pm_domain.h' line='142' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='genpd_onecell_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pm_domain.h' line='272' column='1' id='964819d7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='domains' type-id='464f84a9' visibility='default' filepath='include/linux/pm_domain.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_domains' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_domain.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='xlate' type-id='5b046932' visibility='default' filepath='include/linux/pm_domain.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='genpd_xlate_t' type-id='293b7ad2' filepath='include/linux/pm_domain.h' line='269' column='1' id='5b046932'/>
+      <class-decl name='of_phandle_iterator' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/of.h' line='80' column='1' id='514d8c48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cells_name' type-id='80f4b756' visibility='default' filepath='include/linux/of.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cell_count' type-id='95e97e5e' visibility='default' filepath='include/linux/of.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parent' type-id='0afa6ea3' visibility='default' filepath='include/linux/of.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list_end' type-id='90144368' visibility='default' filepath='include/linux/of.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='phandle_end' type-id='90144368' visibility='default' filepath='include/linux/of.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cur' type-id='90144368' visibility='default' filepath='include/linux/of.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cur_count' type-id='8f92235e' visibility='default' filepath='include/linux/of.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='phandle' type-id='6e394fba' visibility='default' filepath='include/linux/of.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='node' type-id='9a537bbe' visibility='default' filepath='include/linux/of.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='78a133c2' const='yes' id='398c6fd2'/>
+      <pointer-type-def type-id='398c6fd2' size-in-bits='64' id='90144368'/>
+      <qualified-type-def type-id='4c993ea6' const='yes' id='3cc19423'/>
+      <pointer-type-def type-id='3cc19423' size-in-bits='64' id='adbc0a2b'/>
+      <pointer-type-def type-id='3e115181' size-in-bits='64' id='5db9bd89'/>
+      <pointer-type-def type-id='d52c7591' size-in-bits='64' id='855e3679'/>
+      <pointer-type-def type-id='4fa40360' size-in-bits='64' id='293b7ad2'/>
+      <pointer-type-def type-id='855e3679' size-in-bits='64' id='464f84a9'/>
+      <pointer-type-def type-id='964819d7' size-in-bits='64' id='29f0ac2f'/>
+      <pointer-type-def type-id='d5e6c299' size-in-bits='64' id='ab59ee31'/>
+      <pointer-type-def type-id='2aedd95d' size-in-bits='64' id='16052051'/>
+      <pointer-type-def type-id='a6676061' size-in-bits='64' id='9ab734dd'/>
+      <pointer-type-def type-id='adbacf87' size-in-bits='64' id='791b4a6b'/>
+      <pointer-type-def type-id='514d8c48' size-in-bits='64' id='58cfaa0e'/>
+      <pointer-type-def type-id='08aeec0d' size-in-bits='64' id='e62a60bd'/>
+      <pointer-type-def type-id='f60505a1' size-in-bits='64' id='cb27da0d'/>
+      <pointer-type-def type-id='0393750b' size-in-bits='64' id='df4bf537'/>
+      <pointer-type-def type-id='e5a91b7f' size-in-bits='64' id='0adcd7cb'/>
+      <pointer-type-def type-id='4f4445b6' size-in-bits='64' id='cccdf8f0'/>
+      <pointer-type-def type-id='35210e5c' size-in-bits='64' id='c24523fe'/>
+      <pointer-type-def type-id='7ebd7dab' size-in-bits='64' id='795e6e5f'/>
+      <pointer-type-def type-id='a017baf8' size-in-bits='64' id='28773d52'/>
+      <function-decl name='dev_pm_genpd_set_performance_state' mangled-name='dev_pm_genpd_set_performance_state' filepath='drivers/base/power/domain.c' line='376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_genpd_set_performance_state'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/domain.c' line='376' column='1'/>
+        <parameter type-id='f0981eeb' name='state' filepath='drivers/base/power/domain.c' line='376' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_genpd_add_subdomain' mangled-name='pm_genpd_add_subdomain' filepath='drivers/base/power/domain.c' line='1677' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_genpd_add_subdomain'>
+        <parameter type-id='855e3679' name='genpd' filepath='drivers/base/power/domain.c' line='1677' column='1'/>
+        <parameter type-id='855e3679' name='subdomain' filepath='drivers/base/power/domain.c' line='1678' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_genpd_remove_subdomain' mangled-name='pm_genpd_remove_subdomain' filepath='drivers/base/power/domain.c' line='1695' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_genpd_remove_subdomain'>
+        <parameter type-id='855e3679' name='genpd' filepath='drivers/base/power/domain.c' line='1695' column='1'/>
+        <parameter type-id='855e3679' name='subdomain' filepath='drivers/base/power/domain.c' line='1696' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_genpd_init' mangled-name='pm_genpd_init' filepath='drivers/base/power/domain.c' line='1776' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_genpd_init'>
+        <parameter type-id='855e3679' name='genpd' filepath='drivers/base/power/domain.c' line='1776' column='1'/>
+        <parameter type-id='5db9bd89' name='gov' filepath='drivers/base/power/domain.c' line='1777' column='1'/>
+        <parameter type-id='b50a4934' name='is_off' filepath='drivers/base/power/domain.c' line='1777' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_genpd_remove' mangled-name='pm_genpd_remove' filepath='drivers/base/power/domain.c' line='1899' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_genpd_remove'>
+        <parameter type-id='855e3679' name='genpd' filepath='drivers/base/power/domain.c' line='1899' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_genpd_add_provider_simple' mangled-name='of_genpd_add_provider_simple' filepath='drivers/base/power/domain.c' line='2028' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_genpd_add_provider_simple'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/base/power/domain.c' line='2028' column='1'/>
+        <parameter type-id='855e3679' name='genpd' filepath='drivers/base/power/domain.c' line='2029' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_of_add_table' mangled-name='dev_pm_opp_of_add_table' filepath='include/linux/pm_opp.h' line='341' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_of_add_table'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_put_opp_table' mangled-name='dev_pm_opp_put_opp_table' filepath='include/linux/pm_opp.h' line='80' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_put_opp_table'>
+        <parameter type-id='e62a60bd'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_genpd_add_provider_onecell' mangled-name='of_genpd_add_provider_onecell' filepath='drivers/base/power/domain.c' line='2085' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_genpd_add_provider_onecell'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/base/power/domain.c' line='2085' column='1'/>
+        <parameter type-id='29f0ac2f' name='data' filepath='drivers/base/power/domain.c' line='2086' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_genpd_del_provider' mangled-name='of_genpd_del_provider' filepath='drivers/base/power/domain.c' line='2165' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_genpd_del_provider'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/base/power/domain.c' line='2165' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_genpd_add_subdomain' mangled-name='of_genpd_add_subdomain' filepath='drivers/base/power/domain.c' line='2276' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_genpd_add_subdomain'>
+        <parameter type-id='51a94113' name='parent_spec' filepath='drivers/base/power/domain.c' line='2276' column='1'/>
+        <parameter type-id='51a94113' name='subdomain_spec' filepath='drivers/base/power/domain.c' line='2277' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_phandle_iterator_init' mangled-name='of_phandle_iterator_init' filepath='include/linux/of.h' line='380' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_phandle_iterator_init'>
+        <parameter type-id='58cfaa0e'/>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_phandle_iterator_next' mangled-name='of_phandle_iterator_next' filepath='include/linux/of.h' line='386' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_phandle_iterator_next'>
+        <parameter type-id='58cfaa0e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kobject_get_path' mangled-name='kobject_get_path' filepath='include/linux/kobject.h' line='126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_get_path'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='2040' id='11641789'>
+        <subrange length='255' type-id='7ff19f0f' id='36e7f891'/>
+      </array-type-def>
+      <pointer-type-def type-id='830e3b1b' size-in-bits='64' id='7d0bc0eb'/>
+      <pointer-type-def type-id='5558489b' size-in-bits='64' id='0afa6ea3'/>
+      <pointer-type-def type-id='d6ebca76' size-in-bits='64' id='27675066'/>
+      <pointer-type-def type-id='3ba81dd0' size-in-bits='64' id='02e48bc6'/>
+      <pointer-type-def type-id='d48383c4' size-in-bits='64' id='7727bbf2'/>
+      <pointer-type-def type-id='fa0b179b' size-in-bits='64' id='50764ba3'/>
+      <enum-decl name='opp_table_access' filepath='drivers/opp/opp.h' line='115' column='1' id='943b03b5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='OPP_TABLE_ACCESS_UNKNOWN' value='0'/>
+        <enumerator name='OPP_TABLE_ACCESS_EXCLUSIVE' value='1'/>
+        <enumerator name='OPP_TABLE_ACCESS_SHARED' value='2'/>
+      </enum-decl>
+      <function-type size-in-bits='64' id='4fa40360'>
+        <parameter type-id='51a94113'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='855e3679'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2aedd95d'>
+        <parameter type-id='855e3679'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a6676061'>
+        <parameter type-id='855e3679'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='adbacf87'>
+        <parameter type-id='855e3679'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f60505a1'>
+        <parameter type-id='a4375c03'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0393750b'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e5a91b7f'>
+        <parameter type-id='855e3679'/>
+        <parameter type-id='02e48bc6'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f4445b6'>
+        <parameter type-id='855e3679'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='35210e5c'>
+        <parameter type-id='855e3679'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7ebd7dab'>
+        <parameter type-id='855e3679'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a017baf8'>
+        <parameter type-id='ab59ee31'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='4b3ae594' size-in-bits='64' id='c1433076'/>
+      <pointer-type-def type-id='e62a60bd' size-in-bits='64' id='ebb60db5'/>
+      <pointer-type-def type-id='850c13f6' size-in-bits='64' id='4e034354'/>
+      <qualified-type-def type-id='6661a698' const='yes' id='5558489b'/>
+      <pointer-type-def type-id='b06eb6f0' size-in-bits='64' id='850c13f6'/>
+      <class-decl name='clk' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/clk/clk.c' line='99' column='1' id='830e3b1b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='core' type-id='ba21e62b' visibility='default' filepath='drivers/clk/clk.c' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/clk/clk.c' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev_id' type-id='80f4b756' visibility='default' filepath='drivers/clk/clk.c' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='con_id' type-id='80f4b756' visibility='default' filepath='drivers/clk/clk.c' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='min_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='exclusive_count' type-id='f0981eeb' visibility='default' filepath='drivers/clk/clk.c' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='clks_node' type-id='03a4a074' visibility='default' filepath='drivers/clk/clk.c' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dentry' is-struct='yes' visibility='default' is-declaration-only='yes' id='d6ebca76'/>
+      <class-decl name='dev_pm_opp' size-in-bits='768' is-struct='yes' visibility='default' filepath='drivers/opp/opp.h' line='71' column='1' id='3ba81dd0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/opp/opp.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='drivers/opp/opp.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='available' type-id='b50a4934' visibility='default' filepath='drivers/opp/opp.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='dynamic' type-id='b50a4934' visibility='default' filepath='drivers/opp/opp.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='turbo' type-id='b50a4934' visibility='default' filepath='drivers/opp/opp.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='suspend' type-id='b50a4934' visibility='default' filepath='drivers/opp/opp.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pstate' type-id='f0981eeb' visibility='default' filepath='drivers/opp/opp.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rate' type-id='7359adad' visibility='default' filepath='drivers/opp/opp.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='level' type-id='f0981eeb' visibility='default' filepath='drivers/opp/opp.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='supplies' type-id='614c5efc' visibility='default' filepath='drivers/opp/opp.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='clock_latency_ns' type-id='7359adad' visibility='default' filepath='drivers/opp/opp.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='required_opps' type-id='79c84484' visibility='default' filepath='drivers/opp/opp.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='opp_table' type-id='e62a60bd' visibility='default' filepath='drivers/opp/opp.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='np' type-id='9a537bbe' visibility='default' filepath='drivers/opp/opp.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dentry' type-id='27675066' visibility='default' filepath='drivers/opp/opp.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_set_opp_data' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/pm_opp.h' line='66' column='1' id='d48383c4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='old_opp' type-id='de175b0d' visibility='default' filepath='include/linux/pm_opp.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='new_opp' type-id='de175b0d' visibility='default' filepath='include/linux/pm_opp.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='regulators' type-id='4e034354' visibility='default' filepath='include/linux/pm_opp.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='regulator_count' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_opp.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='include/linux/pm_opp.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/pm_opp.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='636cc9ab' size-in-bits='64' id='ba21e62b'/>
+      <pointer-type-def type-id='02e48bc6' size-in-bits='64' id='79c84484'/>
+      <pointer-type-def type-id='c1ac25a6' size-in-bits='64' id='614c5efc'/>
+      <class-decl name='dev_pm_opp_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pm_opp.h' line='50' column='1' id='de175b0d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rate' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supplies' type-id='614c5efc' visibility='default' filepath='include/linux/pm_opp.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator' is-struct='yes' visibility='default' is-declaration-only='yes' id='b06eb6f0'/>
+      <class-decl name='clk_core' size-in-bits='1984' is-struct='yes' visibility='default' filepath='drivers/clk/clk.c' line='56' column='1' id='636cc9ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/clk/clk.c' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='824ffa73' visibility='default' filepath='drivers/clk/clk.c' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hw' type-id='3aaeef89' visibility='default' filepath='drivers/clk/clk.c' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='drivers/clk/clk.c' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/clk/clk.c' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='drivers/clk/clk.c' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='parent' type-id='ba21e62b' visibility='default' filepath='drivers/clk/clk.c' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parents' type-id='338d484d' visibility='default' filepath='drivers/clk/clk.c' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='num_parents' type-id='f9b06939' visibility='default' filepath='drivers/clk/clk.c' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='520'>
+          <var-decl name='new_parent_index' type-id='f9b06939' visibility='default' filepath='drivers/clk/clk.c' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='req_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='new_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='new_parent' type-id='ba21e62b' visibility='default' filepath='drivers/clk/clk.c' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='new_child' type-id='ba21e62b' visibility='default' filepath='drivers/clk/clk.c' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='orphan' type-id='b50a4934' visibility='default' filepath='drivers/clk/clk.c' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='968'>
+          <var-decl name='rpm_enabled' type-id='b50a4934' visibility='default' filepath='drivers/clk/clk.c' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='need_sync' type-id='b50a4934' visibility='default' filepath='drivers/clk/clk.c' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='984'>
+          <var-decl name='boot_enabled' type-id='b50a4934' visibility='default' filepath='drivers/clk/clk.c' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='enable_count' type-id='f0981eeb' visibility='default' filepath='drivers/clk/clk.c' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='prepare_count' type-id='f0981eeb' visibility='default' filepath='drivers/clk/clk.c' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='protect_count' type-id='f0981eeb' visibility='default' filepath='drivers/clk/clk.c' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='min_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='max_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='accuracy' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='phase' type-id='95e97e5e' visibility='default' filepath='drivers/clk/clk.c' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='duty' type-id='4f935e80' visibility='default' filepath='drivers/clk/clk.c' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='children' type-id='e151255a' visibility='default' filepath='drivers/clk/clk.c' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='child_node' type-id='03a4a074' visibility='default' filepath='drivers/clk/clk.c' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='clks' type-id='e151255a' visibility='default' filepath='drivers/clk/clk.c' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='notifier_count' type-id='f0981eeb' visibility='default' filepath='drivers/clk/clk.c' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='dentry' type-id='27675065' visibility='default' filepath='drivers/clk/clk.c' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='debug_node' type-id='03a4a074' visibility='default' filepath='drivers/clk/clk.c' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='drivers/clk/clk.c' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_opp_supply' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/pm_opp.h' line='36' column='1' id='c1ac25a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='u_volt' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='u_volt_min' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='u_volt_max' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='u_amp' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='cf8d7d81' size-in-bits='64' id='3aaeef89'/>
+      <pointer-type-def type-id='710f82fd' size-in-bits='64' id='338d484d'/>
+      <pointer-type-def type-id='92072f8b' size-in-bits='64' id='824ffa73'/>
+      <class-decl name='clk_duty' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='70' column='1' id='4f935e80'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num' type-id='f0981eeb' visibility='default' filepath='include/linux/clk-provider.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='den' type-id='f0981eeb' visibility='default' filepath='include/linux/clk-provider.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='512851e8' const='yes' id='92072f8b'/>
+      <class-decl name='clk_hw' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='319' column='1' id='cf8d7d81'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='core' type-id='ba21e62b' visibility='default' filepath='include/linux/clk-provider.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='include/linux/clk-provider.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='b6a95a02' visibility='default' filepath='include/linux/clk-provider.h' line='322' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clk_parent_map' size-in-bits='320' is-struct='yes' visibility='default' filepath='drivers/clk/clk.c' line='48' column='1' id='710f82fd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hw' type-id='9e6d4b4e' visibility='default' filepath='drivers/clk/clk.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='core' type-id='ba21e62b' visibility='default' filepath='drivers/clk/clk.c' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fw_name' type-id='80f4b756' visibility='default' filepath='drivers/clk/clk.c' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/clk/clk.c' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='drivers/clk/clk.c' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='fdb55010' size-in-bits='64' id='9e6d4b4e'/>
+      <pointer-type-def type-id='d7aa071c' size-in-bits='64' id='b6a95a02'/>
+      <class-decl name='clk_ops' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='222' column='1' id='512851e8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unprepare' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='is_prepared' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unprepare_unused' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='enable' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='disable' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='is_enabled' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='disable_unused' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='save_context' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='restore_context' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='recalc_rate' type-id='93097cd2' visibility='default' filepath='include/linux/clk-provider.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='round_rate' type-id='1eac8fa1' visibility='default' filepath='include/linux/clk-provider.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='determine_rate' type-id='c2c32efe' visibility='default' filepath='include/linux/clk-provider.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_parent' type-id='a05e478f' visibility='default' filepath='include/linux/clk-provider.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='get_parent' type-id='38527a92' visibility='default' filepath='include/linux/clk-provider.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_rate' type-id='3d287e03' visibility='default' filepath='include/linux/clk-provider.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='set_rate_and_parent' type-id='d598c37f' visibility='default' filepath='include/linux/clk-provider.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='recalc_accuracy' type-id='93097cd2' visibility='default' filepath='include/linux/clk-provider.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='get_phase' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='set_phase' type-id='eeb35eda' visibility='default' filepath='include/linux/clk-provider.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='get_duty_cycle' type-id='3993d336' visibility='default' filepath='include/linux/clk-provider.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='set_duty_cycle' type-id='3993d336' visibility='default' filepath='include/linux/clk-provider.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='init' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='debug_init' type-id='c2d2a400' visibility='default' filepath='include/linux/clk-provider.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='pre_rate_change' type-id='3d287e03' visibility='default' filepath='include/linux/clk-provider.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='post_rate_change' type-id='3d287e03' visibility='default' filepath='include/linux/clk-provider.h' line='259' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='cf8d7d81' const='yes' id='fdb55010'/>
+      <qualified-type-def type-id='065eee5b' const='yes' id='d7aa071c'/>
+      <pointer-type-def type-id='f5a529af' size-in-bits='64' id='2d015d73'/>
+      <pointer-type-def type-id='73b85a24' size-in-bits='64' id='3993d336'/>
+      <pointer-type-def type-id='f867473c' size-in-bits='64' id='c2c32efe'/>
+      <pointer-type-def type-id='fc053d58' size-in-bits='64' id='eeb35eda'/>
+      <pointer-type-def type-id='8de1c3db' size-in-bits='64' id='a05e478f'/>
+      <pointer-type-def type-id='2e5f4f0f' size-in-bits='64' id='3d287e03'/>
+      <pointer-type-def type-id='59f7b4bb' size-in-bits='64' id='d598c37f'/>
+      <pointer-type-def type-id='7fb4efa5' size-in-bits='64' id='1eac8fa1'/>
+      <pointer-type-def type-id='d49e6088' size-in-bits='64' id='38527a92'/>
+      <pointer-type-def type-id='0a38a8f0' size-in-bits='64' id='93097cd2'/>
+      <pointer-type-def type-id='30913582' size-in-bits='64' id='0112fb3c'/>
+      <pointer-type-def type-id='7c1f247e' size-in-bits='64' id='c2d2a400'/>
+      <class-decl name='clk_init_data' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='292' column='1' id='065eee5b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/clk-provider.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='824ffa73' visibility='default' filepath='include/linux/clk-provider.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parent_names' type-id='13956559' visibility='default' filepath='include/linux/clk-provider.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parent_data' type-id='4cdbecf4' visibility='default' filepath='include/linux/clk-provider.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parent_hws' type-id='ca0dae6c' visibility='default' filepath='include/linux/clk-provider.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_parents' type-id='f9b06939' visibility='default' filepath='include/linux/clk-provider.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/clk-provider.h' line='300' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9e6d4b4e' size-in-bits='64' id='ca0dae6c'/>
+      <pointer-type-def type-id='dcc94796' size-in-bits='64' id='4cdbecf4'/>
+      <qualified-type-def type-id='bd5c3911' const='yes' id='dcc94796'/>
+      <class-decl name='clk_parent_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='271' column='1' id='bd5c3911'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hw' type-id='9e6d4b4e' visibility='default' filepath='include/linux/clk-provider.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fw_name' type-id='80f4b756' visibility='default' filepath='include/linux/clk-provider.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/clk-provider.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/linux/clk-provider.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/power/generic_ops.c' language='LANG_C89'>
+      <function-decl name='pm_generic_suspend' mangled-name='pm_generic_suspend' filepath='drivers/base/power/generic_ops.c' line='97' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_generic_suspend'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/generic_ops.c' line='97' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_generic_resume' mangled-name='pm_generic_resume' filepath='drivers/base/power/generic_ops.c' line='241' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_generic_resume'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/generic_ops.c' line='241' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/power/main.c' language='LANG_C89'>
+      <function-decl name='device_wakeup_disable' mangled-name='device_wakeup_disable' filepath='include/linux/pm_wakeup.h' line='96' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_wakeup_disable'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/power/qos.c' language='LANG_C89'>
+      <function-decl name='dev_pm_qos_add_request' mangled-name='dev_pm_qos_add_request' filepath='drivers/base/power/qos.c' line='388' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_qos_add_request'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/qos.c' line='388' column='1'/>
+        <parameter type-id='a80fd1bc' name='req' filepath='drivers/base/power/qos.c' line='388' column='1'/>
+        <parameter type-id='c47ba023' name='type' filepath='drivers/base/power/qos.c' line='389' column='1'/>
+        <parameter type-id='a7832498' name='value' filepath='drivers/base/power/qos.c' line='389' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_qos_update_request' mangled-name='dev_pm_qos_update_request' filepath='drivers/base/power/qos.c' line='463' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_qos_update_request'>
+        <parameter type-id='a80fd1bc' name='req' filepath='drivers/base/power/qos.c' line='463' column='1'/>
+        <parameter type-id='a7832498' name='new_value' filepath='drivers/base/power/qos.c' line='463' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_qos_remove_request' mangled-name='dev_pm_qos_remove_request' filepath='drivers/base/power/qos.c' line='510' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_qos_remove_request'>
+        <parameter type-id='a80fd1bc' name='req' filepath='drivers/base/power/qos.c' line='510' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_qos_expose_latency_tolerance' mangled-name='dev_pm_qos_expose_latency_tolerance' filepath='drivers/base/power/qos.c' line='951' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_qos_expose_latency_tolerance'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/qos.c' line='951' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_qos_hide_latency_tolerance' mangled-name='dev_pm_qos_hide_latency_tolerance' filepath='drivers/base/power/qos.c' line='970' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_qos_hide_latency_tolerance'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/qos.c' line='970' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/power/runtime.c' language='LANG_C89'>
+      <function-decl name='__pm_runtime_idle' mangled-name='__pm_runtime_idle' filepath='drivers/base/power/runtime.c' line='1000' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_runtime_idle'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1000' column='1'/>
+        <parameter type-id='95e97e5e' name='rpmflags' filepath='drivers/base/power/runtime.c' line='1000' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__pm_runtime_suspend' mangled-name='__pm_runtime_suspend' filepath='drivers/base/power/runtime.c' line='1032' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_runtime_suspend'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1032' column='1'/>
+        <parameter type-id='95e97e5e' name='rpmflags' filepath='drivers/base/power/runtime.c' line='1032' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__pm_runtime_resume' mangled-name='__pm_runtime_resume' filepath='drivers/base/power/runtime.c' line='1063' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_runtime_resume'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1063' column='1'/>
+        <parameter type-id='95e97e5e' name='rpmflags' filepath='drivers/base/power/runtime.c' line='1063' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_runtime_get_if_in_use' mangled-name='pm_runtime_get_if_in_use' filepath='drivers/base/power/runtime.c' line='1092' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_get_if_in_use'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1092' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__pm_runtime_set_status' mangled-name='__pm_runtime_set_status' filepath='drivers/base/power/runtime.c' line='1130' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_runtime_set_status'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1130' column='1'/>
+        <parameter type-id='f0981eeb' name='status' filepath='drivers/base/power/runtime.c' line='1130' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__pm_runtime_disable' mangled-name='__pm_runtime_disable' filepath='drivers/base/power/runtime.c' line='1327' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_runtime_disable'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1327' column='1'/>
+        <parameter type-id='b50a4934' name='check_resume' filepath='drivers/base/power/runtime.c' line='1327' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_runtime_irq_safe' mangled-name='pm_runtime_irq_safe' filepath='drivers/base/power/runtime.c' line='1469' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_irq_safe'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1469' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__pm_runtime_use_autosuspend' mangled-name='__pm_runtime_use_autosuspend' filepath='drivers/base/power/runtime.c' line='1546' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_runtime_use_autosuspend'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1546' column='1'/>
+        <parameter type-id='b50a4934' name='use' filepath='drivers/base/power/runtime.c' line='1546' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_runtime_force_suspend' mangled-name='pm_runtime_force_suspend' filepath='drivers/base/power/runtime.c' line='1720' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_force_suspend'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1720' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_runtime_force_resume' mangled-name='pm_runtime_force_resume' filepath='drivers/base/power/runtime.c' line='1766' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_force_resume'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1766' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/power/sysfs.c' language='LANG_C89'>
+      <function-decl name='dev_pm_qos_update_user_latency_tolerance' mangled-name='dev_pm_qos_update_user_latency_tolerance' filepath='include/linux/pm_qos.h' line='188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_qos_update_user_latency_tolerance'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/power/wakeirq.c' language='LANG_C89'>
+      <function-decl name='dev_pm_set_dedicated_wake_irq' mangled-name='dev_pm_set_dedicated_wake_irq' filepath='drivers/base/power/wakeirq.c' line='165' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_set_dedicated_wake_irq'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/wakeirq.c' line='165' column='1'/>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/base/power/wakeirq.c' line='165' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/power/wakeup.c' language='LANG_C89'>
+      <function-decl name='wakeup_source_create' mangled-name='wakeup_source_create' filepath='drivers/base/power/wakeup.c' line='84' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wakeup_source_create'>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/power/wakeup.c' line='84' column='1'/>
+        <return type-id='1ea237a6'/>
+      </function-decl>
+      <function-decl name='wakeup_source_destroy' mangled-name='wakeup_source_destroy' filepath='drivers/base/power/wakeup.c' line='156' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wakeup_source_destroy'>
+        <parameter type-id='1ea237a6' name='ws' filepath='drivers/base/power/wakeup.c' line='156' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__pm_relax' mangled-name='__pm_relax' filepath='drivers/base/power/wakeup.c' line='699' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_relax'>
+        <parameter type-id='1ea237a6' name='ws' filepath='drivers/base/power/wakeup.c' line='699' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='wakeup_source_add' mangled-name='wakeup_source_add' filepath='drivers/base/power/wakeup.c' line='171' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wakeup_source_add'>
+        <parameter type-id='1ea237a6' name='ws' filepath='drivers/base/power/wakeup.c' line='171' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='wakeup_source_remove' mangled-name='wakeup_source_remove' filepath='drivers/base/power/wakeup.c' line='192' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wakeup_source_remove'>
+        <parameter type-id='1ea237a6' name='ws' filepath='drivers/base/power/wakeup.c' line='192' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__pm_stay_awake' mangled-name='__pm_stay_awake' filepath='drivers/base/power/wakeup.c' line='582' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_stay_awake'>
+        <parameter type-id='1ea237a6' name='ws' filepath='drivers/base/power/wakeup.c' line='582' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_system_wakeup' mangled-name='pm_system_wakeup' filepath='drivers/base/power/wakeup.c' line='914' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_system_wakeup'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/property.c' language='LANG_C89'>
+      <enum-decl name='dev_dma_attr' filepath='include/linux/property.h' line='28' column='1' id='0f98306c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DEV_DMA_NOT_SUPPORTED' value='0'/>
+        <enumerator name='DEV_DMA_NON_COHERENT' value='1'/>
+        <enumerator name='DEV_DMA_COHERENT' value='2'/>
+      </enum-decl>
+      <function-decl name='device_property_read_u8_array' mangled-name='device_property_read_u8_array' filepath='drivers/base/property.c' line='78' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_property_read_u8_array'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/property.c' line='78' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/base/property.c' line='78' column='1'/>
+        <parameter type-id='8bff8096' name='val' filepath='drivers/base/property.c' line='79' column='1'/>
+        <parameter type-id='b59d7dce' name='nval' filepath='drivers/base/property.c' line='79' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='fwnode_property_read_u16_array' mangled-name='fwnode_property_read_u16_array' filepath='drivers/base/property.c' line='291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fwnode_property_read_u16_array'>
+        <parameter type-id='7837cd88' name='fwnode' filepath='drivers/base/property.c' line='291' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/base/property.c' line='292' column='1'/>
+        <parameter type-id='26d4d46f' name='val' filepath='drivers/base/property.c' line='292' column='1'/>
+        <parameter type-id='b59d7dce' name='nval' filepath='drivers/base/property.c' line='292' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_property_read_string_array' mangled-name='device_property_read_string_array' filepath='drivers/base/property.c' line='178' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_property_read_string_array'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/property.c' line='178' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/base/property.c' line='178' column='1'/>
+        <parameter type-id='7d3cd834' name='val' filepath='drivers/base/property.c' line='179' column='1'/>
+        <parameter type-id='b59d7dce' name='nval' filepath='drivers/base/property.c' line='179' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='fwnode_get_parent' mangled-name='fwnode_get_parent' filepath='drivers/base/property.c' line='587' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fwnode_get_parent'>
+        <parameter type-id='7837cd88' name='fwnode' filepath='drivers/base/property.c' line='587' column='1'/>
+        <return type-id='4a935625'/>
+      </function-decl>
+      <function-decl name='device_get_named_child_node' mangled-name='device_get_named_child_node' filepath='drivers/base/property.c' line='670' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_get_named_child_node'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/property.c' line='670' column='1'/>
+        <parameter type-id='80f4b756' name='childname' filepath='drivers/base/property.c' line='671' column='1'/>
+        <return type-id='4a935625'/>
+      </function-decl>
+      <function-decl name='device_get_dma_attr' mangled-name='device_get_dma_attr' filepath='drivers/base/property.c' line='745' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_get_dma_attr'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/property.c' line='745' column='1'/>
+        <return type-id='0f98306c'/>
+      </function-decl>
+      <function-decl name='of_dma_is_coherent' mangled-name='of_dma_is_coherent' filepath='include/linux/of_address.h' line='59' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_dma_is_coherent'>
+        <parameter type-id='9a537bbe'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='device_get_mac_address' mangled-name='device_get_mac_address' filepath='drivers/base/property.c' line='859' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_get_mac_address'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/property.c' line='859' column='1'/>
+        <parameter type-id='26a90f95' name='addr' filepath='drivers/base/property.c' line='859' column='1'/>
+        <parameter type-id='95e97e5e' name='alen' filepath='drivers/base/property.c' line='859' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='device_get_match_data' mangled-name='device_get_match_data' filepath='drivers/base/property.c' line='1103' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_get_match_data'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/property.c' line='1103' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <pointer-type-def type-id='03419172' size-in-bits='64' id='7837cd88'/>
+      <pointer-type-def type-id='1dc6a898' size-in-bits='64' id='26d4d46f'/>
+      <qualified-type-def type-id='d5ace205' const='yes' id='03419172'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/regmap/regcache.c' language='LANG_C89'>
+      <function-decl name='regcache_sync' mangled-name='regcache_sync' filepath='drivers/base/regmap/regcache.c' line='339' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regcache_sync'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regcache.c' line='339' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regcache_sync_region' mangled-name='regcache_sync_region' filepath='drivers/base/regmap/regcache.c' line='408' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regcache_sync_region'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regcache.c' line='408' column='1'/>
+        <parameter type-id='f0981eeb' name='min' filepath='drivers/base/regmap/regcache.c' line='408' column='1'/>
+        <parameter type-id='f0981eeb' name='max' filepath='drivers/base/regmap/regcache.c' line='409' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regcache_drop_region' mangled-name='regcache_drop_region' filepath='drivers/base/regmap/regcache.c' line='463' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regcache_drop_region'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regcache.c' line='463' column='1'/>
+        <parameter type-id='f0981eeb' name='min' filepath='drivers/base/regmap/regcache.c' line='463' column='1'/>
+        <parameter type-id='f0981eeb' name='max' filepath='drivers/base/regmap/regcache.c' line='464' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regcache_cache_only' mangled-name='regcache_cache_only' filepath='drivers/base/regmap/regcache.c' line='495' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regcache_cache_only'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regcache.c' line='495' column='1'/>
+        <parameter type-id='b50a4934' name='enable' filepath='drivers/base/regmap/regcache.c' line='495' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='regcache_mark_dirty' mangled-name='regcache_mark_dirty' filepath='drivers/base/regmap/regcache.c' line='518' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regcache_mark_dirty'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regcache.c' line='518' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='ddf16879' size-in-bits='64' id='29af9a71'/>
+      <class-decl name='regmap' size-in-bits='4928' is-struct='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='49' column='1' id='ddf16879'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='ed93e75e' visibility='default' filepath='drivers/base/regmap/internal.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='a4d5c862' visibility='default' filepath='drivers/base/regmap/internal.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='unlock' type-id='cf202c75' visibility='default' filepath='drivers/base/regmap/internal.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lock_arg' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='alloc_flags' type-id='3eb7c31c' visibility='default' filepath='drivers/base/regmap/internal.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/base/regmap/internal.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='work_buf' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='format' type-id='32ee7e31' visibility='default' filepath='drivers/base/regmap/internal.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='bus' type-id='00e96299' visibility='default' filepath='drivers/base/regmap/internal.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='bus_context' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/base/regmap/internal.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='async' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='async_lock' type-id='fb4018a0' visibility='default' filepath='drivers/base/regmap/internal.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='async_waitq' type-id='b5ab048f' visibility='default' filepath='drivers/base/regmap/internal.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='async_list' type-id='72f469ec' visibility='default' filepath='drivers/base/regmap/internal.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='async_free' type-id='72f469ec' visibility='default' filepath='drivers/base/regmap/internal.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='async_ret' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='debugfs_disable' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='debugfs' type-id='27675065' visibility='default' filepath='drivers/base/regmap/internal.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='debugfs_name' type-id='80f4b756' visibility='default' filepath='drivers/base/regmap/internal.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='debugfs_reg_len' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='debugfs_val_len' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='debugfs_tot_len' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='debugfs_off_cache' type-id='72f469ec' visibility='default' filepath='drivers/base/regmap/internal.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='cache_lock' type-id='925167dc' visibility='default' filepath='drivers/base/regmap/internal.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='max_register' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='writeable_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='readable_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='volatile_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='precious_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='writeable_noinc_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='readable_noinc_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='wr_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='rd_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='volatile_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='precious_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='wr_noinc_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='rd_noinc_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='reg_read' type-id='4893ffdf' visibility='default' filepath='drivers/base/regmap/internal.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='reg_write' type-id='db7eb22d' visibility='default' filepath='drivers/base/regmap/internal.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='reg_update_bits' type-id='3a0b4ecf' visibility='default' filepath='drivers/base/regmap/internal.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='defer_caching' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='read_flag_mask' type-id='7359adad' visibility='default' filepath='drivers/base/regmap/internal.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='write_flag_mask' type-id='7359adad' visibility='default' filepath='drivers/base/regmap/internal.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='reg_shift' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3872'>
+          <var-decl name='reg_stride' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='reg_stride_order' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='cache_ops' type-id='66755d9f' visibility='default' filepath='drivers/base/regmap/internal.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='cache_type' type-id='6e1356fd' visibility='default' filepath='drivers/base/regmap/internal.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4064'>
+          <var-decl name='cache_size_raw' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='cache_word_size' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4128'>
+          <var-decl name='num_reg_defaults' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='num_reg_defaults_raw' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4192'>
+          <var-decl name='cache_only' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4200'>
+          <var-decl name='cache_bypass' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4208'>
+          <var-decl name='cache_free' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='reg_defaults' type-id='629ca5cb' visibility='default' filepath='drivers/base/regmap/internal.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='reg_defaults_raw' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='cache' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='cache_dirty' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4424'>
+          <var-decl name='no_sync_defaults' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='patch' type-id='f94cf1ff' visibility='default' filepath='drivers/base/regmap/internal.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='patch_regs' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4576'>
+          <var-decl name='use_single_read' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4584'>
+          <var-decl name='use_single_write' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4592'>
+          <var-decl name='can_multi_write' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='max_raw_read' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='max_raw_write' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='range_tree' type-id='dec44472' visibility='default' filepath='drivers/base/regmap/internal.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='selector_work_buf' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='hwlock' type-id='0cb0b26f' visibility='default' filepath='drivers/base/regmap/internal.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2dd1eb6f' size-in-bits='64' id='66755d9f'/>
+      <pointer-type-def type-id='a82172e0' size-in-bits='64' id='76a7b3fe'/>
+      <pointer-type-def type-id='4dbb5689' size-in-bits='64' id='00e96299'/>
+      <enum-decl name='regcache_type' filepath='include/linux/regmap.h' line='37' column='1' id='6e1356fd'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='REGCACHE_NONE' value='0'/>
+        <enumerator name='REGCACHE_RBTREE' value='1'/>
+        <enumerator name='REGCACHE_COMPRESSED' value='2'/>
+        <enumerator name='REGCACHE_FLAT' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='38db93a7' size-in-bits='64' id='0cb0b26f'/>
+      <pointer-type-def type-id='7ee67639' size-in-bits='64' id='db7eb22d'/>
+      <pointer-type-def type-id='b4c4ed0b' size-in-bits='64' id='4893ffdf'/>
+      <pointer-type-def type-id='9f19269b' size-in-bits='64' id='3a0b4ecf'/>
+      <pointer-type-def type-id='0ee576bb' size-in-bits='64' id='629ca5cb'/>
+      <pointer-type-def type-id='4fcc4597' size-in-bits='64' id='f94cf1ff'/>
+      <class-decl name='regmap_format' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='30' column='1' id='32ee7e31'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf_size' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg_bytes' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pad_bytes' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='val_bytes' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='format_write' type-id='d1abd66c' visibility='default' filepath='drivers/base/regmap/internal.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='format_reg' type-id='8052541e' visibility='default' filepath='drivers/base/regmap/internal.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='format_val' type-id='8052541e' visibility='default' filepath='drivers/base/regmap/internal.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parse_val' type-id='caa804f2' visibility='default' filepath='drivers/base/regmap/internal.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='parse_inplace' type-id='b7f9d8e6' visibility='default' filepath='drivers/base/regmap/internal.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e14a26b1' size-in-bits='64' id='8e565e6d'/>
+      <typedef-decl name='regmap_lock' type-id='b7f9d8e6' filepath='include/linux/regmap.h' line='232' column='1' id='a4d5c862'/>
+      <typedef-decl name='regmap_unlock' type-id='b7f9d8e6' filepath='include/linux/regmap.h' line='233' column='1' id='cf202c75'/>
+      <union-decl name='__anonymous_union__' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='50' column='1' id='ed93e75e'>
+        <data-member access='private'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='drivers/base/regmap/internal.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='3eaed1cb' visibility='default' filepath='drivers/base/regmap/internal.h' line='52' column='1'/>
+        </data-member>
+      </union-decl>
+      <qualified-type-def type-id='81cd3626' const='yes' id='2dd1eb6f'/>
+      <qualified-type-def type-id='2bed066b' const='yes' id='a82172e0'/>
+      <qualified-type-def type-id='bd5f6464' const='yes' id='4dbb5689'/>
+      <class-decl name='hwspinlock' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='40' column='1' id='38db93a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bank' type-id='b8cd8f00' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='reg_default' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='53' column='1' id='0ee576bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='def' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='reg_sequence' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='68' column='1' id='4fcc4597'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='def' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='delay_us' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='52' column='1' id='3eaed1cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='spinlock' type-id='fb4018a0' visibility='default' filepath='drivers/base/regmap/internal.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='spinlock_flags' type-id='7359adad' visibility='default' filepath='drivers/base/regmap/internal.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2ea97d28' size-in-bits='64' id='caa804f2'/>
+      <pointer-type-def type-id='aee29222' size-in-bits='64' id='d1abd66c'/>
+      <pointer-type-def type-id='7c5064e4' size-in-bits='64' id='8052541e'/>
+      <pointer-type-def type-id='8712a502' size-in-bits='64' id='b8cd8f00'/>
+      <class-decl name='regcache_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='166' column='1' id='81cd3626'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/base/regmap/internal.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type' type-id='6e1356fd' visibility='default' filepath='drivers/base/regmap/internal.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='02c2e3f3' visibility='default' filepath='drivers/base/regmap/internal.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='exit' type-id='02c2e3f3' visibility='default' filepath='drivers/base/regmap/internal.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='debugfs_init' type-id='078f0514' visibility='default' filepath='drivers/base/regmap/internal.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='read' type-id='b8529195' visibility='default' filepath='drivers/base/regmap/internal.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write' type-id='2f739ebb' visibility='default' filepath='drivers/base/regmap/internal.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sync' type-id='2f739ebb' visibility='default' filepath='drivers/base/regmap/internal.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='drop' type-id='2f739ebb' visibility='default' filepath='drivers/base/regmap/internal.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_access_table' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='225' column='1' id='2bed066b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='yes_ranges' type-id='01dc1e38' visibility='default' filepath='include/linux/regmap.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_yes_ranges' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='no_ranges' type-id='01dc1e38' visibility='default' filepath='include/linux/regmap.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='n_no_ranges' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='229' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_bus' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='504' column='1' id='bd5f6464'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fast_io' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write' type-id='928c5b64' visibility='default' filepath='include/linux/regmap.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gather_write' type-id='60be0faa' visibility='default' filepath='include/linux/regmap.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='async_write' type-id='6ee2c7d7' visibility='default' filepath='include/linux/regmap.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reg_write' type-id='8c8780d1' visibility='default' filepath='include/linux/regmap.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reg_update_bits' type-id='59483ee8' visibility='default' filepath='include/linux/regmap.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read' type-id='697414cd' visibility='default' filepath='include/linux/regmap.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='reg_read' type-id='ec8d430e' visibility='default' filepath='include/linux/regmap.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='free_context' type-id='5c459137' visibility='default' filepath='include/linux/regmap.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='async_alloc' type-id='27a024fd' visibility='default' filepath='include/linux/regmap.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='read_flag_mask' type-id='f9b06939' visibility='default' filepath='include/linux/regmap.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='reg_format_endian_default' type-id='e8a9ba7e' visibility='default' filepath='include/linux/regmap.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='val_format_endian_default' type-id='e8a9ba7e' visibility='default' filepath='include/linux/regmap.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='max_raw_read' type-id='b59d7dce' visibility='default' filepath='include/linux/regmap.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='max_raw_write' type-id='b59d7dce' visibility='default' filepath='include/linux/regmap.h' line='519' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9a6d2bc2' size-in-bits='64' id='01dc1e38'/>
+      <enum-decl name='regmap_endian' filepath='include/linux/regmap.h' line='190' column='1' id='e8a9ba7e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='REGMAP_ENDIAN_DEFAULT' value='0'/>
+        <enumerator name='REGMAP_ENDIAN_BIG' value='1'/>
+        <enumerator name='REGMAP_ENDIAN_LITTLE' value='2'/>
+        <enumerator name='REGMAP_ENDIAN_NATIVE' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='b5732d6f' size-in-bits='64' id='02c2e3f3'/>
+      <pointer-type-def type-id='3b43e527' size-in-bits='64' id='2f739ebb'/>
+      <pointer-type-def type-id='71e3f969' size-in-bits='64' id='b8529195'/>
+      <class-decl name='hwspinlock_device' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='54' column='1' id='8712a502'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='9138a099' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='base_id' type-id='95e97e5e' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='num_locks' type-id='95e97e5e' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lock' type-id='e84e7d83' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='regmap_hw_async_alloc' type-id='68f92bd7' filepath='include/linux/regmap.h' line='466' column='1' id='27a024fd'/>
+      <typedef-decl name='regmap_hw_async_write' type-id='38921430' filepath='include/linux/regmap.h' line='453' column='1' id='6ee2c7d7'/>
+      <typedef-decl name='regmap_hw_free_context' type-id='b7f9d8e6' filepath='include/linux/regmap.h' line='467' column='1' id='5c459137'/>
+      <typedef-decl name='regmap_hw_gather_write' type-id='acda35bb' filepath='include/linux/regmap.h' line='450' column='1' id='60be0faa'/>
+      <typedef-decl name='regmap_hw_read' type-id='acda35bb' filepath='include/linux/regmap.h' line='457' column='1' id='697414cd'/>
+      <typedef-decl name='regmap_hw_reg_read' type-id='4893ffdf' filepath='include/linux/regmap.h' line='460' column='1' id='ec8d430e'/>
+      <typedef-decl name='regmap_hw_reg_update_bits' type-id='3a0b4ecf' filepath='include/linux/regmap.h' line='464' column='1' id='59483ee8'/>
+      <typedef-decl name='regmap_hw_reg_write' type-id='db7eb22d' filepath='include/linux/regmap.h' line='462' column='1' id='8c8780d1'/>
+      <typedef-decl name='regmap_hw_write' type-id='02a757da' filepath='include/linux/regmap.h' line='448' column='1' id='928c5b64'/>
+      <pointer-type-def type-id='0086a11a' size-in-bits='64' id='078f0514'/>
+      <pointer-type-def type-id='822de089' size-in-bits='64' id='9138a099'/>
+      <qualified-type-def type-id='20f6935f' const='yes' id='9a6d2bc2'/>
+      <array-type-def dimensions='1' type-id='38db93a7' size-in-bits='infinite' id='e84e7d83'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='bc6e6178' size-in-bits='64' id='02a757da'/>
+      <pointer-type-def type-id='51192447' size-in-bits='64' id='acda35bb'/>
+      <pointer-type-def type-id='22a55ca6' size-in-bits='64' id='38921430'/>
+      <pointer-type-def type-id='bae213e3' size-in-bits='64' id='68f92bd7'/>
+      <qualified-type-def type-id='b74ac0d4' const='yes' id='822de089'/>
+      <class-decl name='regmap_range' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='205' column='1' id='20f6935f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='range_min' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='range_max' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hwspinlock_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='28' column='1' id='b74ac0d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='trylock' type-id='18277869' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unlock' type-id='35411736' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='relax' type-id='35411736' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2fedb035' size-in-bits='64' id='18277869'/>
+      <pointer-type-def type-id='3f7e2e74' size-in-bits='64' id='35411736'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/regmap/regmap-i2c.c' language='LANG_C89'>
+      <qualified-type-def type-id='a9cdb48b' const='yes' id='220a92c2'/>
+      <pointer-type-def type-id='220a92c2' size-in-bits='64' id='7ea54338'/>
+      <function-decl name='__devm_regmap_init_i2c' mangled-name='__devm_regmap_init_i2c' filepath='drivers/base/regmap/regmap-i2c.c' line='292' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__devm_regmap_init_i2c'>
+        <parameter type-id='3e31633b' name='i2c' filepath='drivers/base/regmap/regmap-i2c.c' line='292' column='1'/>
+        <parameter type-id='9d19d4a7' name='config' filepath='drivers/base/regmap/regmap-i2c.c' line='293' column='1'/>
+        <parameter type-id='a57283f9' name='lock_key' filepath='drivers/base/regmap/regmap-i2c.c' line='294' column='1'/>
+        <parameter type-id='80f4b756' name='lock_name' filepath='drivers/base/regmap/regmap-i2c.c' line='295' column='1'/>
+        <return type-id='29af9a71'/>
+      </function-decl>
+      <function-decl name='i2c_transfer_buffer_flags' mangled-name='i2c_transfer_buffer_flags' filepath='include/linux/i2c.h' line='53' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_transfer_buffer_flags'>
+        <parameter type-id='7ea54338'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='8efea9e5'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_smbus_write_i2c_block_data' mangled-name='i2c_smbus_write_i2c_block_data' filepath='include/linux/i2c.h' line='175' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_smbus_write_i2c_block_data'>
+        <parameter type-id='7ea54338'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='354f7eb9'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_smbus_read_i2c_block_data' mangled-name='i2c_smbus_read_i2c_block_data' filepath='include/linux/i2c.h' line='173' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_smbus_read_i2c_block_data'>
+        <parameter type-id='7ea54338'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='cf536864'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_smbus_write_word_data' mangled-name='i2c_smbus_write_word_data' filepath='include/linux/i2c.h' line='149' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_smbus_write_word_data'>
+        <parameter type-id='7ea54338'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='8efea9e5'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_smbus_read_word_data' mangled-name='i2c_smbus_read_word_data' filepath='include/linux/i2c.h' line='147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_smbus_read_word_data'>
+        <parameter type-id='7ea54338'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_smbus_write_byte_data' mangled-name='i2c_smbus_write_byte_data' filepath='include/linux/i2c.h' line='145' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_smbus_write_byte_data'>
+        <parameter type-id='7ea54338'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_smbus_read_byte_data' mangled-name='i2c_smbus_read_byte_data' filepath='include/linux/i2c.h' line='143' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_smbus_read_byte_data'>
+        <parameter type-id='7ea54338'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='23e41d37' size-in-bits='64' id='9d19d4a7'/>
+      <pointer-type-def type-id='a9cdb48b' size-in-bits='64' id='3e31633b'/>
+      <class-decl name='i2c_client' size-in-bits='7808' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='313' column='1' id='a9cdb48b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/linux/i2c.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='addr' type-id='8efea9e5' visibility='default' filepath='include/linux/i2c.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/linux/i2c.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='adapter' type-id='b9af02c3' visibility='default' filepath='include/linux/i2c.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/i2c.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='init_irq' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='detected' type-id='72f469ec' visibility='default' filepath='include/linux/i2c.h' line='332' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='20b6fd7c' const='yes' id='23e41d37'/>
+      <pointer-type-def type-id='ec5384d3' size-in-bits='64' id='b9af02c3'/>
+      <class-decl name='i2c_adapter' size-in-bits='9600' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='685' column='1' id='ec5384d3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/i2c.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='class' type-id='f0981eeb' visibility='default' filepath='include/linux/i2c.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='algo' type-id='e93ce0cc' visibility='default' filepath='include/linux/i2c.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='algo_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/i2c.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock_ops' type-id='16d08491' visibility='default' filepath='include/linux/i2c.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bus_lock' type-id='dd823037' visibility='default' filepath='include/linux/i2c.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mux_lock' type-id='dd823037' visibility='default' filepath='include/linux/i2c.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='timeout' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='retries' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/i2c.h' line='698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='locked_flags' type-id='7359adad' visibility='default' filepath='include/linux/i2c.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='nr' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8352'>
+          <var-decl name='name' type-id='36d7f119' visibility='default' filepath='include/linux/i2c.h' line='704' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='dev_released' type-id='f9fef04f' visibility='default' filepath='include/linux/i2c.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='userspace_clients_lock' type-id='925167dc' visibility='default' filepath='include/linux/i2c.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='userspace_clients' type-id='72f469ec' visibility='default' filepath='include/linux/i2c.h' line='708' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='bus_recovery_info' type-id='f1537b61' visibility='default' filepath='include/linux/i2c.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='quirks' type-id='398e6008' visibility='default' filepath='include/linux/i2c.h' line='711' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='host_notify_domain' type-id='7544e825' visibility='default' filepath='include/linux/i2c.h' line='713' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_config' size-in-bits='2112' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='352' column='1' id='20b6fd7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/regmap.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg_bits' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reg_stride' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pad_bits' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='val_bits' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='writeable_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='readable_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='volatile_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='precious_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='writeable_noinc_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='readable_noinc_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='disable_locking' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='lock' type-id='a4d5c862' visibility='default' filepath='include/linux/regmap.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='unlock' type-id='cf202c75' visibility='default' filepath='include/linux/regmap.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='lock_arg' type-id='eaa32e2f' visibility='default' filepath='include/linux/regmap.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reg_read' type-id='4893ffdf' visibility='default' filepath='include/linux/regmap.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='reg_write' type-id='db7eb22d' visibility='default' filepath='include/linux/regmap.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fast_io' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='max_register' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='wr_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rd_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='volatile_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='precious_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='wr_noinc_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rd_noinc_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='reg_defaults' type-id='4825f6ba' visibility='default' filepath='include/linux/regmap.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='num_reg_defaults' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='cache_type' type-id='6e1356fd' visibility='default' filepath='include/linux/regmap.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='reg_defaults_raw' type-id='eaa32e2f' visibility='default' filepath='include/linux/regmap.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='num_reg_defaults_raw' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='read_flag_mask' type-id='7359adad' visibility='default' filepath='include/linux/regmap.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='write_flag_mask' type-id='7359adad' visibility='default' filepath='include/linux/regmap.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='zero_flag_mask' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1800'>
+          <var-decl name='use_single_read' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1808'>
+          <var-decl name='use_single_write' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1816'>
+          <var-decl name='can_multi_write' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='reg_format_endian' type-id='e8a9ba7e' visibility='default' filepath='include/linux/regmap.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='val_format_endian' type-id='e8a9ba7e' visibility='default' filepath='include/linux/regmap.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ranges' type-id='cf08cac3' visibility='default' filepath='include/linux/regmap.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='num_ranges' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='use_hwlock' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='hwlock_id' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='hwlock_mode' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='406' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d79644f2' size-in-bits='64' id='398e6008'/>
+      <pointer-type-def type-id='9be24bae' size-in-bits='64' id='e93ce0cc'/>
+      <pointer-type-def type-id='00d2c7e1' size-in-bits='64' id='16d08491'/>
+      <pointer-type-def type-id='9fddcab4' size-in-bits='64' id='4825f6ba'/>
+      <pointer-type-def type-id='9e02903b' size-in-bits='64' id='cf08cac3'/>
+      <pointer-type-def type-id='d5526a99' size-in-bits='64' id='f1537b61'/>
+      <pointer-type-def type-id='a667f60f' size-in-bits='64' id='7544e825'/>
+      <class-decl name='rt_mutex' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/rtmutex.h' line='30' column='1' id='dd823037'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wait_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/rtmutex.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='waiters' type-id='6fe1603d' visibility='default' filepath='include/linux/rtmutex.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='owner' type-id='f23e2572' visibility='default' filepath='include/linux/rtmutex.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='21fe2d6b' const='yes' id='d79644f2'/>
+      <qualified-type-def type-id='547b1199' const='yes' id='9be24bae'/>
+      <qualified-type-def type-id='a94a041a' const='yes' id='00d2c7e1'/>
+      <qualified-type-def type-id='0ee576bb' const='yes' id='9fddcab4'/>
+      <qualified-type-def type-id='b683d7fe' const='yes' id='9e02903b'/>
+      <class-decl name='i2c_bus_recovery_info' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='611' column='1' id='d5526a99'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='recover_bus' type-id='6ae2afd7' visibility='default' filepath='include/linux/i2c.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_scl' type-id='6ae2afd7' visibility='default' filepath='include/linux/i2c.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_scl' type-id='8f19938d' visibility='default' filepath='include/linux/i2c.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_sda' type-id='6ae2afd7' visibility='default' filepath='include/linux/i2c.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_sda' type-id='8f19938d' visibility='default' filepath='include/linux/i2c.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_bus_free' type-id='6ae2afd7' visibility='default' filepath='include/linux/i2c.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='prepare_recovery' type-id='8616a4a6' visibility='default' filepath='include/linux/i2c.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unprepare_recovery' type-id='8616a4a6' visibility='default' filepath='include/linux/i2c.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='scl_gpiod' type-id='26760480' visibility='default' filepath='include/linux/i2c.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sda_gpiod' type-id='26760480' visibility='default' filepath='include/linux/i2c.h' line='625' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_domain' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/linux/irqdomain.h' line='162' column='1' id='a667f60f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='link' type-id='72f469ec' visibility='default' filepath='include/linux/irqdomain.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/irqdomain.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='2c202856' visibility='default' filepath='include/linux/irqdomain.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='host_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/irqdomain.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdomain.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='mapcount' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdomain.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/irqdomain.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bus_token' type-id='385b8018' visibility='default' filepath='include/linux/irqdomain.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='gc' type-id='8e62d7cb' visibility='default' filepath='include/linux/irqdomain.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='parent' type-id='7544e825' visibility='default' filepath='include/linux/irqdomain.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/irqdomain.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/irqdomain.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/irqdomain.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/irqdomain.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='hwirq_max' type-id='88370ce9' visibility='default' filepath='include/linux/irqdomain.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='revmap_direct_max_irq' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdomain.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='revmap_size' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdomain.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='revmap_tree' type-id='d39738ac' visibility='default' filepath='include/linux/irqdomain.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='revmap_tree_mutex' type-id='925167dc' visibility='default' filepath='include/linux/irqdomain.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='linear_revmap' type-id='c764d637' visibility='default' filepath='include/linux/irqdomain.h' line='192' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a4974438' size-in-bits='64' id='2c202856'/>
+      <enum-decl name='irq_domain_bus_token' filepath='include/linux/irqdomain.h' line='77' column='1' id='385b8018'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DOMAIN_BUS_ANY' value='0'/>
+        <enumerator name='DOMAIN_BUS_WIRED' value='1'/>
+        <enumerator name='DOMAIN_BUS_GENERIC_MSI' value='2'/>
+        <enumerator name='DOMAIN_BUS_PCI_MSI' value='3'/>
+        <enumerator name='DOMAIN_BUS_PLATFORM_MSI' value='4'/>
+        <enumerator name='DOMAIN_BUS_NEXUS' value='5'/>
+        <enumerator name='DOMAIN_BUS_IPI' value='6'/>
+        <enumerator name='DOMAIN_BUS_FSL_MC_MSI' value='7'/>
+        <enumerator name='DOMAIN_BUS_TI_SCI_INTA_MSI' value='8'/>
+        <enumerator name='DOMAIN_BUS_WAKEUP' value='9'/>
+      </enum-decl>
+      <pointer-type-def type-id='63b74212' size-in-bits='64' id='26760480'/>
+      <pointer-type-def type-id='4033dd6b' size-in-bits='64' id='6ae2afd7'/>
+      <pointer-type-def type-id='f100815b' size-in-bits='64' id='8e62d7cb'/>
+      <class-decl name='i2c_adapter_quirks' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='654' column='1' id='21fe2d6b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='91ce1af9' visibility='default' filepath='include/linux/i2c.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_num_msgs' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_write_len' type-id='1dc6a898' visibility='default' filepath='include/linux/i2c.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='max_read_len' type-id='1dc6a898' visibility='default' filepath='include/linux/i2c.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_comb_1st_msg_len' type-id='1dc6a898' visibility='default' filepath='include/linux/i2c.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='max_comb_2nd_msg_len' type-id='1dc6a898' visibility='default' filepath='include/linux/i2c.h' line='660' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='i2c_algorithm' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='526' column='1' id='547b1199'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='master_xfer' type-id='4813c4da' visibility='default' filepath='include/linux/i2c.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='master_xfer_atomic' type-id='4813c4da' visibility='default' filepath='include/linux/i2c.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='smbus_xfer' type-id='99dc8ee7' visibility='default' filepath='include/linux/i2c.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='smbus_xfer_atomic' type-id='99dc8ee7' visibility='default' filepath='include/linux/i2c.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='functionality' type-id='d0ff2b97' visibility='default' filepath='include/linux/i2c.h' line='548' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='i2c_lock_operations' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='564' column='1' id='a94a041a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock_bus' type-id='6523d744' visibility='default' filepath='include/linux/i2c.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='trylock_bus' type-id='3d5afe0d' visibility='default' filepath='include/linux/i2c.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='unlock_bus' type-id='6523d744' visibility='default' filepath='include/linux/i2c.h' line='567' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_range_cfg' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='429' column='1' id='b683d7fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/regmap.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='range_min' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='range_max' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='selector_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='selector_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='selector_shift' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='window_start' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='window_len' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='443' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='irq_hw_number_t' type-id='7359adad' filepath='include/linux/types.h' line='169' column='1' id='88370ce9'/>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='infinite' id='c764d637'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='d385bfac' size-in-bits='64' id='8616a4a6'/>
+      <pointer-type-def type-id='d6574e69' size-in-bits='64' id='8f19938d'/>
+      <qualified-type-def type-id='0926e4bd' const='yes' id='a4974438'/>
+      <pointer-type-def type-id='674bdea8' size-in-bits='64' id='4813c4da'/>
+      <pointer-type-def type-id='86768fbb' size-in-bits='64' id='99dc8ee7'/>
+      <pointer-type-def type-id='5d16c291' size-in-bits='64' id='3d5afe0d'/>
+      <class-decl name='gpio_desc' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/gpio/gpiolib.h' line='96' column='1' id='63b74212'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gdev' type-id='fb7dc22d' visibility='default' filepath='drivers/gpio/gpiolib.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='drivers/gpio/gpiolib.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='drivers/gpio/gpiolib.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/gpio/gpiolib.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_domain_chip_generic' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='1076' column='1' id='f100815b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='irqs_per_chip' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1077' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num_chips' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='irq_flags_to_clear' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='irq_flags_to_set' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1080' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gc_flags' type-id='7a1ec3b1' visibility='default' filepath='include/linux/irq.h' line='1081' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='gc' type-id='a5527824' visibility='default' filepath='include/linux/irq.h' line='1082' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='64f1e67b' size-in-bits='64' id='d0ff2b97'/>
+      <pointer-type-def type-id='9d4721a2' size-in-bits='64' id='6523d744'/>
+      <enum-decl name='irq_gc_flags' filepath='include/linux/irq.h' line='1059' column='1' id='7a1ec3b1'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IRQ_GC_INIT_MASK_CACHE' value='1'/>
+        <enumerator name='IRQ_GC_INIT_NESTED_LOCK' value='2'/>
+        <enumerator name='IRQ_GC_MASK_CACHE_PER_TYPE' value='4'/>
+        <enumerator name='IRQ_GC_NO_MASK' value='8'/>
+        <enumerator name='IRQ_GC_BE_IO' value='16'/>
+      </enum-decl>
+      <pointer-type-def type-id='e32a05ed' size-in-bits='64' id='fb7dc22d'/>
+      <array-type-def dimensions='1' type-id='e53d7a90' size-in-bits='infinite' id='a5527824'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='irq_domain_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/irqdomain.h' line='105' column='1' id='0926e4bd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='match' type-id='f1c95c76' visibility='default' filepath='include/linux/irqdomain.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='select' type-id='e1759090' visibility='default' filepath='include/linux/irqdomain.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='8a2b0cc8' visibility='default' filepath='include/linux/irqdomain.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unmap' type-id='8b74557f' visibility='default' filepath='include/linux/irqdomain.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xlate' type-id='7881e15c' visibility='default' filepath='include/linux/irqdomain.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='alloc' type-id='0871ecbc' visibility='default' filepath='include/linux/irqdomain.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='free' type-id='644a4b55' visibility='default' filepath='include/linux/irqdomain.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='activate' type-id='7ad47ca2' visibility='default' filepath='include/linux/irqdomain.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='deactivate' type-id='0b8fca52' visibility='default' filepath='include/linux/irqdomain.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='translate' type-id='bbe45043' visibility='default' filepath='include/linux/irqdomain.h' line='123' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='8ab70c7a' size-in-bits='64' id='7881e15c'/>
+      <pointer-type-def type-id='3de312fc' size-in-bits='64' id='f1c95c76'/>
+      <pointer-type-def type-id='dea13b10' size-in-bits='64' id='7ad47ca2'/>
+      <pointer-type-def type-id='a5eadeee' size-in-bits='64' id='e1759090'/>
+      <pointer-type-def type-id='a2ef4917' size-in-bits='64' id='bbe45043'/>
+      <pointer-type-def type-id='7e765fce' size-in-bits='64' id='8a2b0cc8'/>
+      <pointer-type-def type-id='1d6846fa' size-in-bits='64' id='0871ecbc'/>
+      <pointer-type-def type-id='bb06f572' size-in-bits='64' id='e53d7a90'/>
+      <class-decl name='gpio_device' size-in-bits='9216' is-struct='yes' visibility='default' filepath='drivers/gpio/gpiolib.h' line='44' column='1' id='e32a05ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='drivers/gpio/gpiolib.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/gpio/gpiolib.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='chrdev' type-id='22f86352' visibility='default' filepath='drivers/gpio/gpiolib.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='mockdev' type-id='fa0b179b' visibility='default' filepath='drivers/gpio/gpiolib.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='drivers/gpio/gpiolib.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='chip' type-id='e324928d' visibility='default' filepath='drivers/gpio/gpiolib.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='descs' type-id='26760480' visibility='default' filepath='drivers/gpio/gpiolib.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='base' type-id='95e97e5e' visibility='default' filepath='drivers/gpio/gpiolib.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8800'>
+          <var-decl name='ngpio' type-id='1dc6a898' visibility='default' filepath='drivers/gpio/gpiolib.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='drivers/gpio/gpiolib.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='drivers/gpio/gpiolib.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/gpio/gpiolib.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='pin_ranges' type-id='72f469ec' visibility='default' filepath='drivers/gpio/gpiolib.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='71099d68' size-in-bits='64' id='0b8fca52'/>
+      <pointer-type-def type-id='eb940a3b' size-in-bits='64' id='8b74557f'/>
+      <pointer-type-def type-id='267816c1' size-in-bits='64' id='644a4b55'/>
+      <pointer-type-def type-id='59f9f35d' size-in-bits='64' id='e324928d'/>
+      <class-decl name='cdev' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/cdev.h' line='14' column='1' id='22f86352'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/cdev.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/cdev.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ops' type-id='61758ee5' visibility='default' filepath='include/linux/cdev.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/cdev.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dev' type-id='8504f260' visibility='default' filepath='include/linux/cdev.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/linux/cdev.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_chip_generic' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='1026' column='1' id='bb06f572'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/irq.h' line='1027' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg_base' type-id='eaa32e2f' visibility='default' filepath='include/linux/irq.h' line='1028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reg_readl' type-id='99577235' visibility='default' filepath='include/linux/irq.h' line='1029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reg_writel' type-id='f34cc61f' visibility='default' filepath='include/linux/irq.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='suspend' type-id='bf17d761' visibility='default' filepath='include/linux/irq.h' line='1031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resume' type-id='bf17d761' visibility='default' filepath='include/linux/irq.h' line='1032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='irq_base' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='irq_cnt' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1034' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mask_cache' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='type_cache' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='polarity_cache' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='wake_enabled' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wake_active' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='num_ct' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/irq.h' line='1041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='installed' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='1042' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='unused' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='1043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='domain' type-id='7544e825' visibility='default' filepath='include/linux/irq.h' line='1044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/irq.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='chip_types' type-id='7290550d' visibility='default' filepath='include/linux/irq.h' line='1046' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='62778ae5' size-in-bits='infinite' id='7290550d'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='gpio_chip' size-in-bits='3712' is-struct='yes' visibility='default' filepath='include/linux/gpio/driver.h' line='340' column='1' id='59f9f35d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='include/linux/gpio/driver.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gpiodev' type-id='fb7dc22d' visibility='default' filepath='include/linux/gpio/driver.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/gpio/driver.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/gpio/driver.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='request' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='free' type-id='d2a48436' visibility='default' filepath='include/linux/gpio/driver.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_direction' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='direction_input' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='direction_output' type-id='9d5147b2' visibility='default' filepath='include/linux/gpio/driver.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_multiple' type-id='ea666691' visibility='default' filepath='include/linux/gpio/driver.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set' type-id='7c70f4dd' visibility='default' filepath='include/linux/gpio/driver.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='set_multiple' type-id='f471a8cc' visibility='default' filepath='include/linux/gpio/driver.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_config' type-id='49728c6d' visibility='default' filepath='include/linux/gpio/driver.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='to_irq' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dbg_show' type-id='2c6d11fe' visibility='default' filepath='include/linux/gpio/driver.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='init_valid_mask' type-id='0084e9cb' visibility='default' filepath='include/linux/gpio/driver.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='base' type-id='95e97e5e' visibility='default' filepath='include/linux/gpio/driver.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='ngpio' type-id='1dc6a898' visibility='default' filepath='include/linux/gpio/driver.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='names' type-id='13956559' visibility='default' filepath='include/linux/gpio/driver.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='can_sleep' type-id='b50a4934' visibility='default' filepath='include/linux/gpio/driver.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='irq' type-id='31045126' visibility='default' filepath='include/linux/gpio/driver.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='valid_mask' type-id='1d2c2b85' visibility='default' filepath='include/linux/gpio/driver.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/gpio/driver.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='of_gpio_n_cells' type-id='f0981eeb' visibility='default' filepath='include/linux/gpio/driver.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='of_xlate' type-id='fdd04afe' visibility='default' filepath='include/linux/gpio/driver.h' line='449' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='75685cad' size-in-bits='64' id='bf17d761'/>
+      <pointer-type-def type-id='4b8eb833' size-in-bits='64' id='f34cc61f'/>
+      <pointer-type-def type-id='95abac74' size-in-bits='64' id='fdd04afe'/>
+      <pointer-type-def type-id='e19b8aa7' size-in-bits='64' id='9f2634eb'/>
+      <pointer-type-def type-id='40afefd0' size-in-bits='64' id='9d5147b2'/>
+      <pointer-type-def type-id='706f3909' size-in-bits='64' id='49728c6d'/>
+      <pointer-type-def type-id='068d5e4f' size-in-bits='64' id='0084e9cb'/>
+      <pointer-type-def type-id='4cbeea4d' size-in-bits='64' id='ea666691'/>
+      <class-decl name='gpio_irq_chip' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/gpio/driver.h' line='28' column='1' id='31045126'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chip' type-id='8846a616' visibility='default' filepath='include/linux/gpio/driver.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='domain' type-id='7544e825' visibility='default' filepath='include/linux/gpio/driver.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='domain_ops' type-id='2c202856' visibility='default' filepath='include/linux/gpio/driver.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/gpio/driver.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parent_domain' type-id='7544e825' visibility='default' filepath='include/linux/gpio/driver.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='child_to_parent_hwirq' type-id='391871d1' visibility='default' filepath='include/linux/gpio/driver.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='populate_parent_fwspec' type-id='c12d7269' visibility='default' filepath='include/linux/gpio/driver.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='child_offset_to_irq' type-id='f5b0f2f2' visibility='default' filepath='include/linux/gpio/driver.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='child_irq_domain_ops' type-id='0926e4bd' visibility='default' filepath='include/linux/gpio/driver.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='handler' type-id='cdb741d3' visibility='default' filepath='include/linux/gpio/driver.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='default_type' type-id='f0981eeb' visibility='default' filepath='include/linux/gpio/driver.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='lock_key' type-id='a57283f9' visibility='default' filepath='include/linux/gpio/driver.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='request_key' type-id='a57283f9' visibility='default' filepath='include/linux/gpio/driver.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='parent_handler' type-id='cdb741d3' visibility='default' filepath='include/linux/gpio/driver.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='parent_handler_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/gpio/driver.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='num_parents' type-id='f0981eeb' visibility='default' filepath='include/linux/gpio/driver.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='parents' type-id='807869d3' visibility='default' filepath='include/linux/gpio/driver.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='map' type-id='807869d3' visibility='default' filepath='include/linux/gpio/driver.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='threaded' type-id='b50a4934' visibility='default' filepath='include/linux/gpio/driver.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='init_hw' type-id='26bfaed1' visibility='default' filepath='include/linux/gpio/driver.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='init_valid_mask' type-id='bb3baa4e' visibility='default' filepath='include/linux/gpio/driver.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='valid_mask' type-id='1d2c2b85' visibility='default' filepath='include/linux/gpio/driver.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='first' type-id='f0981eeb' visibility='default' filepath='include/linux/gpio/driver.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='irq_enable' type-id='185ccd91' visibility='default' filepath='include/linux/gpio/driver.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='irq_disable' type-id='185ccd91' visibility='default' filepath='include/linux/gpio/driver.h' line='253' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_chip_type' size-in-bits='2944' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='984' column='1' id='62778ae5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chip' type-id='0f5f7920' visibility='default' filepath='include/linux/irq.h' line='985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='regs' type-id='6194fd9a' visibility='default' filepath='include/linux/irq.h' line='986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='handler' type-id='cdb741d3' visibility='default' filepath='include/linux/irq.h' line='987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='type' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='mask_cache_priv' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='mask_cache' type-id='f9409001' visibility='default' filepath='include/linux/irq.h' line='990' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='bd08cd5c' size-in-bits='64' id='d2a48436'/>
+      <pointer-type-def type-id='e30804d9' size-in-bits='64' id='7c70f4dd'/>
+      <pointer-type-def type-id='8a70282a' size-in-bits='64' id='f471a8cc'/>
+      <pointer-type-def type-id='92920004' size-in-bits='64' id='2c6d11fe'/>
+      <pointer-type-def type-id='33c534fd' size-in-bits='64' id='26bfaed1'/>
+      <pointer-type-def type-id='d35840cd' size-in-bits='64' id='391871d1'/>
+      <pointer-type-def type-id='0f5f7920' size-in-bits='64' id='8846a616'/>
+      <class-decl name='irq_chip' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='480' column='1' id='0f5f7920'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent_device' type-id='fa0b179b' visibility='default' filepath='include/linux/irq.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/irq.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='irq_startup' type-id='1cb2627d' visibility='default' filepath='include/linux/irq.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='irq_shutdown' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='irq_enable' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='irq_disable' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='irq_ack' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='irq_mask' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irq_mask_ack' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='irq_unmask' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='irq_eoi' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='irq_set_affinity' type-id='d72a0292' visibility='default' filepath='include/linux/irq.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='irq_retrigger' type-id='ed9f97a6' visibility='default' filepath='include/linux/irq.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='irq_set_type' type-id='f3bd9244' visibility='default' filepath='include/linux/irq.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='irq_set_wake' type-id='f3bd9244' visibility='default' filepath='include/linux/irq.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='irq_bus_lock' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='irq_bus_sync_unlock' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='irq_cpu_online' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='irq_cpu_offline' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='irq_suspend' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='irq_resume' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='irq_pm_shutdown' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='irq_calc_mask' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='irq_print_chip' type-id='9438aa05' visibility='default' filepath='include/linux/irq.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='irq_request_resources' type-id='ed9f97a6' visibility='default' filepath='include/linux/irq.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='irq_release_resources' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='irq_compose_msi_msg' type-id='3a3e6b6c' visibility='default' filepath='include/linux/irq.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='irq_write_msi_msg' type-id='3a3e6b6c' visibility='default' filepath='include/linux/irq.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='irq_get_irqchip_state' type-id='f12b668c' visibility='default' filepath='include/linux/irq.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='irq_set_irqchip_state' type-id='ecf8d02d' visibility='default' filepath='include/linux/irq.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='irq_set_vcpu_affinity' type-id='cb5b8228' visibility='default' filepath='include/linux/irq.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ipi_send_single' type-id='19c5fc2b' visibility='default' filepath='include/linux/irq.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ipi_send_mask' type-id='eb0bccd8' visibility='default' filepath='include/linux/irq.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='irq_nmi_setup' type-id='ed9f97a6' visibility='default' filepath='include/linux/irq.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='irq_nmi_teardown' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='529' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_chip_regs' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='961' column='1' id='6194fd9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enable' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='962' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='963' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mask' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='964' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ack' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='965' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='eoi' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='type' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='967' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='polarity' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='968' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='irq_flow_handler_t' type-id='8937f3c2' filepath='include/linux/irqhandler.h' line='12' column='1' id='cdb741d3'/>
+      <pointer-type-def type-id='74b5d8d8' size-in-bits='64' id='f5b0f2f2'/>
+      <pointer-type-def type-id='0d702425' size-in-bits='64' id='c12d7269'/>
+      <pointer-type-def type-id='0863015c' size-in-bits='64' id='bb3baa4e'/>
+      <pointer-type-def type-id='3b7ef195' size-in-bits='64' id='185ccd91'/>
+      <pointer-type-def type-id='4852a8ec' size-in-bits='64' id='ed9f97a6'/>
+      <pointer-type-def type-id='f5c32c38' size-in-bits='64' id='d72a0292'/>
+      <pointer-type-def type-id='97f95e6a' size-in-bits='64' id='f12b668c'/>
+      <pointer-type-def type-id='2cabe151' size-in-bits='64' id='ecf8d02d'/>
+      <pointer-type-def type-id='91265862' size-in-bits='64' id='f3bd9244'/>
+      <pointer-type-def type-id='20f1cebe' size-in-bits='64' id='cb5b8228'/>
+      <pointer-type-def type-id='7addb8a1' size-in-bits='64' id='1cb2627d'/>
+      <pointer-type-def type-id='9cad7816' size-in-bits='64' id='eb0bccd8'/>
+      <pointer-type-def type-id='16ebfbba' size-in-bits='64' id='3a3e6b6c'/>
+      <pointer-type-def type-id='9e497d29' size-in-bits='64' id='9438aa05'/>
+      <pointer-type-def type-id='e7c67bff' size-in-bits='64' id='19c5fc2b'/>
+      <pointer-type-def type-id='da4d9050' size-in-bits='64' id='8937f3c2'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/regmap/regmap-irq.c' language='LANG_C89'>
+      <class-decl name='regmap_irq_chip' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='1224' column='1' id='349c0cdf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/regmap.h' line='1225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='main_status' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='num_main_status_bits' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sub_reg_offsets' type-id='521ebb15' visibility='default' filepath='include/linux/regmap.h' line='1229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_main_regs' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='1230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='status_base' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mask_base' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='unmask_base' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ack_base' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='wake_base' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='type_base' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='irq_reg_stride' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='mask_writeonly' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='init_ack_masked' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='mask_invert' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='use_ack' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='ack_invert' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='wake_invert' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='runtime_pm' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='type_invert' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='type_in_mask' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='clear_on_unmask' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='num_regs' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='1250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irqs' type-id='f630e149' visibility='default' filepath='include/linux/regmap.h' line='1252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='num_irqs' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='1253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='num_type_reg' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='1255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='type_reg_stride' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='handle_pre_irq' type-id='b9b212f5' visibility='default' filepath='include/linux/regmap.h' line='1258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='handle_post_irq' type-id='b9b212f5' visibility='default' filepath='include/linux/regmap.h' line='1259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='irq_drv_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/regmap.h' line='1260' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_irq_sub_irq_map' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='1154' column='1' id='652bbaa5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_regs' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='807869d3' visibility='default' filepath='include/linux/regmap.h' line='1156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_irq' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='1136' column='1' id='5fb55d48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reg_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type' type-id='ecdf025d' visibility='default' filepath='include/linux/regmap.h' line='1139' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_irq_type' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='1119' column='1' id='ecdf025d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type_reg_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type_reg_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type_rising_val' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='type_falling_val' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type_level_low_val' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='type_level_high_val' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='types_supported' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1126' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_irq_chip_data' size-in-bits='3520' is-struct='yes' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='20' column='1' id='6161d888'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='irq_chip' type-id='0f5f7920' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='map' type-id='29af9a71' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='chip' type-id='78965926' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='irq_base' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='domain' type-id='7544e825' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='wake_count' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='status_reg_buf' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='main_status_buf' type-id='807869d3' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='status_buf' type-id='807869d3' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='mask_buf' type-id='807869d3' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='mask_buf_def' type-id='807869d3' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='wake_buf' type-id='807869d3' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='type_buf' type-id='807869d3' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='type_buf_def' type-id='807869d3' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='irq_reg_stride' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3424'>
+          <var-decl name='type_reg_stride' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='clear_status' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='5fb55d48' const='yes' id='70ebcb19'/>
+      <pointer-type-def type-id='70ebcb19' size-in-bits='64' id='f630e149'/>
+      <qualified-type-def type-id='349c0cdf' const='yes' id='23de1228'/>
+      <pointer-type-def type-id='23de1228' size-in-bits='64' id='78965926'/>
+      <pointer-type-def type-id='6161d888' size-in-bits='64' id='a2782ece'/>
+      <pointer-type-def type-id='a2782ece' size-in-bits='64' id='a731d0ec'/>
+      <pointer-type-def type-id='652bbaa5' size-in-bits='64' id='521ebb15'/>
+      <function-decl name='regmap_add_irq_chip' mangled-name='regmap_add_irq_chip' filepath='drivers/base/regmap/regmap-irq.c' line='559' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_add_irq_chip'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap-irq.c' line='559' column='1'/>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/base/regmap/regmap-irq.c' line='559' column='1'/>
+        <parameter type-id='95e97e5e' name='irq_flags' filepath='drivers/base/regmap/regmap-irq.c' line='559' column='1'/>
+        <parameter type-id='95e97e5e' name='irq_base' filepath='drivers/base/regmap/regmap-irq.c' line='560' column='1'/>
+        <parameter type-id='78965926' name='chip' filepath='drivers/base/regmap/regmap-irq.c' line='560' column='1'/>
+        <parameter type-id='a731d0ec' name='data' filepath='drivers/base/regmap/regmap-irq.c' line='561' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_del_irq_chip' mangled-name='regmap_del_irq_chip' filepath='drivers/base/regmap/regmap-irq.c' line='821' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_del_irq_chip'>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/base/regmap/regmap-irq.c' line='821' column='1'/>
+        <parameter type-id='a2782ece' name='d' filepath='drivers/base/regmap/regmap-irq.c' line='821' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_regmap_add_irq_chip' mangled-name='devm_regmap_add_irq_chip' filepath='drivers/base/regmap/regmap-irq.c' line='893' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regmap_add_irq_chip'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/regmap/regmap-irq.c' line='893' column='1'/>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap-irq.c' line='893' column='1'/>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/base/regmap/regmap-irq.c' line='893' column='1'/>
+        <parameter type-id='95e97e5e' name='irq_flags' filepath='drivers/base/regmap/regmap-irq.c' line='894' column='1'/>
+        <parameter type-id='95e97e5e' name='irq_base' filepath='drivers/base/regmap/regmap-irq.c' line='894' column='1'/>
+        <parameter type-id='78965926' name='chip' filepath='drivers/base/regmap/regmap-irq.c' line='895' column='1'/>
+        <parameter type-id='a731d0ec' name='data' filepath='drivers/base/regmap/regmap-irq.c' line='896' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_regmap_del_irq_chip' mangled-name='devm_regmap_del_irq_chip' filepath='drivers/base/regmap/regmap-irq.c' line='929' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regmap_del_irq_chip'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/regmap/regmap-irq.c' line='929' column='1'/>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/base/regmap/regmap-irq.c' line='929' column='1'/>
+        <parameter type-id='a2782ece' name='data' filepath='drivers/base/regmap/regmap-irq.c' line='930' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='regmap_irq_get_virq' mangled-name='regmap_irq_get_virq' filepath='drivers/base/regmap/regmap-irq.c' line='965' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_irq_get_virq'>
+        <parameter type-id='a2782ece' name='data' filepath='drivers/base/regmap/regmap-irq.c' line='965' column='1'/>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/base/regmap/regmap-irq.c' line='965' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_irq_get_domain' mangled-name='regmap_irq_get_domain' filepath='drivers/base/regmap/regmap-irq.c' line='985' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_irq_get_domain'>
+        <parameter type-id='a2782ece' name='data' filepath='drivers/base/regmap/regmap-irq.c' line='985' column='1'/>
+        <return type-id='7544e825'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/regmap/regmap-mmio.c' language='LANG_C89'>
+      <function-decl name='__devm_regmap_init_mmio_clk' mangled-name='__devm_regmap_init_mmio_clk' filepath='drivers/base/regmap/regmap-mmio.c' line='339' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__devm_regmap_init_mmio_clk'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/regmap/regmap-mmio.c' line='339' column='1'/>
+        <parameter type-id='80f4b756' name='clk_id' filepath='drivers/base/regmap/regmap-mmio.c' line='340' column='1'/>
+        <parameter type-id='eaa32e2f' name='regs' filepath='drivers/base/regmap/regmap-mmio.c' line='341' column='1'/>
+        <parameter type-id='9d19d4a7' name='config' filepath='drivers/base/regmap/regmap-mmio.c' line='342' column='1'/>
+        <parameter type-id='a57283f9' name='lock_key' filepath='drivers/base/regmap/regmap-mmio.c' line='343' column='1'/>
+        <parameter type-id='80f4b756' name='lock_name' filepath='drivers/base/regmap/regmap-mmio.c' line='344' column='1'/>
+        <return type-id='29af9a71'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/regmap/regmap-spi.c' language='LANG_C89'>
+      <class-decl name='dma_chan' is-struct='yes' visibility='default' is-declaration-only='yes' id='5e3b10aa'/>
+      <class-decl name='spi_controller_mem_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='252' column='1' id='40c992e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='adjust_op_size' type-id='c1205b1f' visibility='default' filepath='include/linux/spi/spi-mem.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supports_op' type-id='3d444e9a' visibility='default' filepath='include/linux/spi/spi-mem.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='exec_op' type-id='80f1f854' visibility='default' filepath='include/linux/spi/spi-mem.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_name' type-id='149deb03' visibility='default' filepath='include/linux/spi/spi-mem.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dirmap_create' type-id='dfa456d5' visibility='default' filepath='include/linux/spi/spi-mem.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dirmap_destroy' type-id='12e56aa0' visibility='default' filepath='include/linux/spi/spi-mem.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dirmap_read' type-id='79b4ee7f' visibility='default' filepath='include/linux/spi/spi-mem.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dirmap_write' type-id='79b4ee7f' visibility='default' filepath='include/linux/spi/spi-mem.h' line='263' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='1088' id='96b80745'>
+        <subrange length='17' type-id='7ff19f0f' id='888ad0ed'/>
+      </array-type-def>
+      <class-decl name='spi_device' size-in-bits='10112' is-struct='yes' visibility='default' filepath='include/linux/spi/spi.h' line='140' column='1' id='72c0e160'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/spi/spi.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='controller' type-id='f22e4524' visibility='default' filepath='include/linux/spi/spi.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='master' type-id='f22e4524' visibility='default' filepath='include/linux/spi/spi.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='max_speed_hz' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7520'>
+          <var-decl name='chip_select' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7528'>
+          <var-decl name='bits_per_word' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7536'>
+          <var-decl name='rt' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='mode' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7584'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/spi/spi.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='controller_state' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='controller_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='modalias' type-id='16dc656a' visibility='default' filepath='include/linux/spi/spi.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='driver_override' type-id='80f4b756' visibility='default' filepath='include/linux/spi/spi.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='cs_gpio' type-id='95e97e5e' visibility='default' filepath='include/linux/spi/spi.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='cs_gpiod' type-id='26760480' visibility='default' filepath='include/linux/spi/spi.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='word_delay_usecs' type-id='b96825af' visibility='default' filepath='include/linux/spi/spi.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='statistics' type-id='bf41d149' visibility='default' filepath='include/linux/spi/spi.h' line='179' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spi_controller' size-in-bits='13376' is-struct='yes' visibility='default' filepath='include/linux/spi/spi.h' line='424' column='1' id='db1b9d9e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/spi/spi.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/spi/spi.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='bus_num' type-id='9b7e9486' visibility='default' filepath='include/linux/spi/spi.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7504'>
+          <var-decl name='num_chipselect' type-id='1dc6a898' visibility='default' filepath='include/linux/spi/spi.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7520'>
+          <var-decl name='dma_alignment' type-id='1dc6a898' visibility='default' filepath='include/linux/spi/spi.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='mode_bits' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7584'>
+          <var-decl name='bits_per_word_mask' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='min_speed_hz' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='max_speed_hz' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='flags' type-id='1dc6a898' visibility='default' filepath='include/linux/spi/spi.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7696'>
+          <var-decl name='slave' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='max_transfer_size' type-id='fc096b90' visibility='default' filepath='include/linux/spi/spi.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='max_message_size' type-id='fc096b90' visibility='default' filepath='include/linux/spi/spi.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='io_mutex' type-id='925167dc' visibility='default' filepath='include/linux/spi/spi.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='bus_lock_spinlock' type-id='fb4018a0' visibility='default' filepath='include/linux/spi/spi.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='bus_lock_mutex' type-id='925167dc' visibility='default' filepath='include/linux/spi/spi.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='bus_lock_flag' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='setup' type-id='4f312040' visibility='default' filepath='include/linux/spi/spi.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='set_cs_timing' type-id='fd508c3f' visibility='default' filepath='include/linux/spi/spi.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='transfer' type-id='08bd785c' visibility='default' filepath='include/linux/spi/spi.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='cleanup' type-id='c965bc43' visibility='default' filepath='include/linux/spi/spi.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='can_dma' type-id='b7f92ac9' visibility='default' filepath='include/linux/spi/spi.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='queued' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='kworker' type-id='62968721' visibility='default' filepath='include/linux/spi/spi.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='kworker_task' type-id='f23e2572' visibility='default' filepath='include/linux/spi/spi.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='pump_messages' type-id='ac165296' visibility='default' filepath='include/linux/spi/spi.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='queue_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/spi/spi.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='queue' type-id='72f469ec' visibility='default' filepath='include/linux/spi/spi.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='cur_msg' type-id='bb7889ed' visibility='default' filepath='include/linux/spi/spi.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='idling' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9992'>
+          <var-decl name='busy' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10000'>
+          <var-decl name='running' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10008'>
+          <var-decl name='rt' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10016'>
+          <var-decl name='auto_runtime_pm' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10024'>
+          <var-decl name='cur_msg_prepared' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10032'>
+          <var-decl name='cur_msg_mapped' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='xfer_completion' type-id='f9fef04f' visibility='default' filepath='include/linux/spi/spi.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='max_dma_len' type-id='b59d7dce' visibility='default' filepath='include/linux/spi/spi.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='prepare_transfer_hardware' type-id='3de177aa' visibility='default' filepath='include/linux/spi/spi.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='transfer_one_message' type-id='424a6df6' visibility='default' filepath='include/linux/spi/spi.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='unprepare_transfer_hardware' type-id='3de177aa' visibility='default' filepath='include/linux/spi/spi.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='prepare_message' type-id='424a6df6' visibility='default' filepath='include/linux/spi/spi.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='unprepare_message' type-id='424a6df6' visibility='default' filepath='include/linux/spi/spi.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='slave_abort' type-id='3de177aa' visibility='default' filepath='include/linux/spi/spi.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='set_cs' type-id='54a1bec6' visibility='default' filepath='include/linux/spi/spi.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='transfer_one' type-id='6495fd5b' visibility='default' filepath='include/linux/spi/spi.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='handle_err' type-id='72fa5619' visibility='default' filepath='include/linux/spi/spi.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='mem_ops' type-id='e93ac78c' visibility='default' filepath='include/linux/spi/spi.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='cs_gpios' type-id='7292109c' visibility='default' filepath='include/linux/spi/spi.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='cs_gpiods' type-id='35c9579e' visibility='default' filepath='include/linux/spi/spi.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='use_gpio_descriptors' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='statistics' type-id='bf41d149' visibility='default' filepath='include/linux/spi/spi.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='dma_tx' type-id='27f3f5d8' visibility='default' filepath='include/linux/spi/spi.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='dma_rx' type-id='27f3f5d8' visibility='default' filepath='include/linux/spi/spi.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='dummy_rx' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='dummy_tx' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13312'>
+          <var-decl name='fw_translate_cs' type-id='aaa6c630' visibility='default' filepath='include/linux/spi/spi.h' line='606' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spi_transfer' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/spi/spi.h' line='830' column='1' id='9b7f1a95'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_buf' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='836' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_buf' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='837' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_dma' type-id='cf29c9b3' visibility='default' filepath='include/linux/spi/spi.h' line='840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_dma' type-id='cf29c9b3' visibility='default' filepath='include/linux/spi/spi.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_sg' type-id='c59e4f4c' visibility='default' filepath='include/linux/spi/spi.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rx_sg' type-id='c59e4f4c' visibility='default' filepath='include/linux/spi/spi.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='cs_change' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='tx_nbits' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi.h' line='846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='rx_nbits' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi.h' line='847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='584'>
+          <var-decl name='bits_per_word' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi.h' line='851' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='592'>
+          <var-decl name='word_delay_usecs' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi.h' line='852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='delay_usecs' type-id='1dc6a898' visibility='default' filepath='include/linux/spi/spi.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='624'>
+          <var-decl name='cs_change_delay' type-id='1dc6a898' visibility='default' filepath='include/linux/spi/spi.h' line='854' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cs_change_delay_unit' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi.h' line='855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='speed_hz' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='word_delay' type-id='1dc6a898' visibility='default' filepath='include/linux/spi/spi.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='effective_speed_hz' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='transfer_list' type-id='72f469ec' visibility='default' filepath='include/linux/spi/spi.h' line='864' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spi_message' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/spi/spi.h' line='897' column='1' id='4dd90c3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='transfers' type-id='72f469ec' visibility='default' filepath='include/linux/spi/spi.h' line='898' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='spi' type-id='e90f4666' visibility='default' filepath='include/linux/spi/spi.h' line='900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='is_dma_mapped' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi.h' line='902' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='complete' type-id='b7f9d8e6' visibility='default' filepath='include/linux/spi/spi.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='context' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='917' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='frame_length' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='actual_length' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi.h' line='919' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='status' type-id='95e97e5e' visibility='default' filepath='include/linux/spi/spi.h' line='920' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='queue' type-id='72f469ec' visibility='default' filepath='include/linux/spi/spi.h' line='926' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='state' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='resources' type-id='72f469ec' visibility='default' filepath='include/linux/spi/spi.h' line='930' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spi_statistics' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/linux/spi/spi.h' line='55' column='1' id='bf41d149'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/spi/spi.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='messages' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='transfers' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='errors' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='timedout' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='spi_sync' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='spi_sync_immediate' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='spi_async' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='bytes' type-id='3a47d82b' visibility='default' filepath='include/linux/spi/spi.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bytes_rx' type-id='3a47d82b' visibility='default' filepath='include/linux/spi/spi.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bytes_tx' type-id='3a47d82b' visibility='default' filepath='include/linux/spi/spi.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='transfer_bytes_histo' type-id='96b80745' visibility='default' filepath='include/linux/spi/spi.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='transfers_split_maxsize' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='40c992e3' const='yes' id='68e801ee'/>
+      <pointer-type-def type-id='68e801ee' size-in-bits='64' id='e93ac78c'/>
+      <pointer-type-def type-id='5e3b10aa' size-in-bits='64' id='27f3f5d8'/>
+      <pointer-type-def type-id='26760480' size-in-bits='64' id='35c9579e'/>
+      <pointer-type-def type-id='d96066b0' size-in-bits='64' id='3de177aa'/>
+      <pointer-type-def type-id='006d72ff' size-in-bits='64' id='6495fd5b'/>
+      <pointer-type-def type-id='4afdce44' size-in-bits='64' id='424a6df6'/>
+      <pointer-type-def type-id='01e1f26e' size-in-bits='64' id='aaa6c630'/>
+      <pointer-type-def type-id='fb73ecde' size-in-bits='64' id='4f312040'/>
+      <pointer-type-def type-id='d06fe862' size-in-bits='64' id='08bd785c'/>
+      <pointer-type-def type-id='db1b9d9e' size-in-bits='64' id='f22e4524'/>
+      <pointer-type-def type-id='72c0e160' size-in-bits='64' id='e90f4666'/>
+      <pointer-type-def type-id='4dd90c3d' size-in-bits='64' id='bb7889ed'/>
+      <pointer-type-def type-id='9b7f1a95' size-in-bits='64' id='7c11f655'/>
+      <pointer-type-def type-id='579042ad' size-in-bits='64' id='b7f92ac9'/>
+      <pointer-type-def type-id='50f7c736' size-in-bits='64' id='fc096b90'/>
+      <pointer-type-def type-id='0c71d025' size-in-bits='64' id='72fa5619'/>
+      <pointer-type-def type-id='3243417f' size-in-bits='64' id='c965bc43'/>
+      <pointer-type-def type-id='9ea75344' size-in-bits='64' id='54a1bec6'/>
+      <pointer-type-def type-id='c52ef7cb' size-in-bits='64' id='fd508c3f'/>
+      <function-decl name='spi_sync' mangled-name='spi_sync' filepath='include/linux/spi/spi.h' line='1117' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_sync'>
+        <parameter type-id='e90f4666'/>
+        <parameter type-id='bb7889ed'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='1c210187' size-in-bits='64' id='149deb03'/>
+      <function-type size-in-bits='64' id='d96066b0'>
+        <parameter type-id='f22e4524'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='006d72ff'>
+        <parameter type-id='f22e4524'/>
+        <parameter type-id='e90f4666'/>
+        <parameter type-id='7c11f655'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4afdce44'>
+        <parameter type-id='f22e4524'/>
+        <parameter type-id='bb7889ed'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='01e1f26e'>
+        <parameter type-id='f22e4524'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fb73ecde'>
+        <parameter type-id='e90f4666'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d06fe862'>
+        <parameter type-id='e90f4666'/>
+        <parameter type-id='bb7889ed'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='579042ad'>
+        <parameter type-id='f22e4524'/>
+        <parameter type-id='e90f4666'/>
+        <parameter type-id='7c11f655'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='50f7c736'>
+        <parameter type-id='e90f4666'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0c71d025'>
+        <parameter type-id='f22e4524'/>
+        <parameter type-id='bb7889ed'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3243417f'>
+        <parameter type-id='e90f4666'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9ea75344'>
+        <parameter type-id='e90f4666'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c52ef7cb'>
+        <parameter type-id='e90f4666'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='96fe8392' size-in-bits='64' id='80f1f854'/>
+      <pointer-type-def type-id='e2270bc3' size-in-bits='64' id='c1205b1f'/>
+      <pointer-type-def type-id='78c92961' size-in-bits='64' id='dfa456d5'/>
+      <class-decl name='sg_table' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/scatterlist.h' line='42' column='1' id='c59e4f4c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sgl' type-id='bf3ef905' visibility='default' filepath='include/linux/scatterlist.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nents' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='orig_nents' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7983eff8' size-in-bits='64' id='3d444e9a'/>
+      <pointer-type-def type-id='5460fbd3' size-in-bits='64' id='79b4ee7f'/>
+      <typedef-decl name='uint8_t' type-id='f9b06939' filepath='include/linux/types.h' line='107' column='1' id='b96825af'/>
+      <pointer-type-def type-id='262d57ae' size-in-bits='64' id='12e56aa0'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/regmap/regmap.c' language='LANG_C89'>
+      <class-decl name='hwspinlock' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='40' column='1' id='38db93a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bank' type-id='b8cd8f00' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap' size-in-bits='4928' is-struct='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='49' column='1' id='ddf16879'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='ed93e75e' visibility='default' filepath='drivers/base/regmap/internal.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='a4d5c862' visibility='default' filepath='drivers/base/regmap/internal.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='unlock' type-id='cf202c75' visibility='default' filepath='drivers/base/regmap/internal.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lock_arg' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='alloc_flags' type-id='3eb7c31c' visibility='default' filepath='drivers/base/regmap/internal.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/base/regmap/internal.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='work_buf' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='format' type-id='32ee7e31' visibility='default' filepath='drivers/base/regmap/internal.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='bus' type-id='00e96299' visibility='default' filepath='drivers/base/regmap/internal.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='bus_context' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/base/regmap/internal.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='async' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='async_lock' type-id='fb4018a0' visibility='default' filepath='drivers/base/regmap/internal.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='async_waitq' type-id='b5ab048f' visibility='default' filepath='drivers/base/regmap/internal.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='async_list' type-id='72f469ec' visibility='default' filepath='drivers/base/regmap/internal.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='async_free' type-id='72f469ec' visibility='default' filepath='drivers/base/regmap/internal.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='async_ret' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='debugfs_disable' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='debugfs' type-id='27675065' visibility='default' filepath='drivers/base/regmap/internal.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='debugfs_name' type-id='80f4b756' visibility='default' filepath='drivers/base/regmap/internal.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='debugfs_reg_len' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='debugfs_val_len' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='debugfs_tot_len' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='debugfs_off_cache' type-id='72f469ec' visibility='default' filepath='drivers/base/regmap/internal.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='cache_lock' type-id='925167dc' visibility='default' filepath='drivers/base/regmap/internal.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='max_register' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='writeable_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='readable_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='volatile_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='precious_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='writeable_noinc_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='readable_noinc_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='wr_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='rd_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='volatile_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='precious_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='wr_noinc_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='rd_noinc_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='reg_read' type-id='4893ffdf' visibility='default' filepath='drivers/base/regmap/internal.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='reg_write' type-id='db7eb22d' visibility='default' filepath='drivers/base/regmap/internal.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='reg_update_bits' type-id='3a0b4ecf' visibility='default' filepath='drivers/base/regmap/internal.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='defer_caching' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='read_flag_mask' type-id='7359adad' visibility='default' filepath='drivers/base/regmap/internal.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='write_flag_mask' type-id='7359adad' visibility='default' filepath='drivers/base/regmap/internal.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='reg_shift' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3872'>
+          <var-decl name='reg_stride' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='reg_stride_order' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='cache_ops' type-id='66755d9f' visibility='default' filepath='drivers/base/regmap/internal.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='cache_type' type-id='6e1356fd' visibility='default' filepath='drivers/base/regmap/internal.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4064'>
+          <var-decl name='cache_size_raw' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='cache_word_size' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4128'>
+          <var-decl name='num_reg_defaults' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='num_reg_defaults_raw' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4192'>
+          <var-decl name='cache_only' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4200'>
+          <var-decl name='cache_bypass' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4208'>
+          <var-decl name='cache_free' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='reg_defaults' type-id='629ca5cb' visibility='default' filepath='drivers/base/regmap/internal.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='reg_defaults_raw' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='cache' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='cache_dirty' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4424'>
+          <var-decl name='no_sync_defaults' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='patch' type-id='f94cf1ff' visibility='default' filepath='drivers/base/regmap/internal.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='patch_regs' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4576'>
+          <var-decl name='use_single_read' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4584'>
+          <var-decl name='use_single_write' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4592'>
+          <var-decl name='can_multi_write' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='max_raw_read' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='max_raw_write' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='range_tree' type-id='dec44472' visibility='default' filepath='drivers/base/regmap/internal.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='selector_work_buf' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='hwlock' type-id='0cb0b26f' visibility='default' filepath='drivers/base/regmap/internal.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='50' column='1' id='ed93e75e'>
+        <data-member access='private'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='drivers/base/regmap/internal.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='3eaed1cb' visibility='default' filepath='drivers/base/regmap/internal.h' line='52' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='52' column='1' id='3eaed1cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='spinlock' type-id='fb4018a0' visibility='default' filepath='drivers/base/regmap/internal.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='spinlock_flags' type-id='7359adad' visibility='default' filepath='drivers/base/regmap/internal.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='regmap_lock' type-id='b7f9d8e6' filepath='include/linux/regmap.h' line='232' column='1' id='a4d5c862'/>
+      <typedef-decl name='regmap_unlock' type-id='b7f9d8e6' filepath='include/linux/regmap.h' line='233' column='1' id='cf202c75'/>
+      <class-decl name='regmap_format' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='30' column='1' id='32ee7e31'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf_size' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg_bytes' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pad_bytes' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='val_bytes' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='format_write' type-id='d1abd66c' visibility='default' filepath='drivers/base/regmap/internal.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='format_reg' type-id='8052541e' visibility='default' filepath='drivers/base/regmap/internal.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='format_val' type-id='8052541e' visibility='default' filepath='drivers/base/regmap/internal.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parse_val' type-id='caa804f2' visibility='default' filepath='drivers/base/regmap/internal.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='parse_inplace' type-id='b7f9d8e6' visibility='default' filepath='drivers/base/regmap/internal.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_bus' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='504' column='1' id='bd5f6464'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fast_io' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write' type-id='928c5b64' visibility='default' filepath='include/linux/regmap.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gather_write' type-id='60be0faa' visibility='default' filepath='include/linux/regmap.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='async_write' type-id='6ee2c7d7' visibility='default' filepath='include/linux/regmap.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reg_write' type-id='8c8780d1' visibility='default' filepath='include/linux/regmap.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reg_update_bits' type-id='59483ee8' visibility='default' filepath='include/linux/regmap.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read' type-id='697414cd' visibility='default' filepath='include/linux/regmap.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='reg_read' type-id='ec8d430e' visibility='default' filepath='include/linux/regmap.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='free_context' type-id='5c459137' visibility='default' filepath='include/linux/regmap.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='async_alloc' type-id='27a024fd' visibility='default' filepath='include/linux/regmap.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='read_flag_mask' type-id='f9b06939' visibility='default' filepath='include/linux/regmap.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='reg_format_endian_default' type-id='e8a9ba7e' visibility='default' filepath='include/linux/regmap.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='val_format_endian_default' type-id='e8a9ba7e' visibility='default' filepath='include/linux/regmap.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='max_raw_read' type-id='b59d7dce' visibility='default' filepath='include/linux/regmap.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='max_raw_write' type-id='b59d7dce' visibility='default' filepath='include/linux/regmap.h' line='519' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='regmap_hw_write' type-id='02a757da' filepath='include/linux/regmap.h' line='448' column='1' id='928c5b64'/>
+      <typedef-decl name='regmap_hw_gather_write' type-id='acda35bb' filepath='include/linux/regmap.h' line='450' column='1' id='60be0faa'/>
+      <typedef-decl name='regmap_hw_async_write' type-id='38921430' filepath='include/linux/regmap.h' line='453' column='1' id='6ee2c7d7'/>
+      <class-decl name='regmap_async' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='43' column='1' id='26527266'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/base/regmap/internal.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='29af9a71' visibility='default' filepath='drivers/base/regmap/internal.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='work_buf' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='regmap_hw_reg_write' type-id='db7eb22d' filepath='include/linux/regmap.h' line='462' column='1' id='8c8780d1'/>
+      <typedef-decl name='regmap_hw_reg_update_bits' type-id='3a0b4ecf' filepath='include/linux/regmap.h' line='464' column='1' id='59483ee8'/>
+      <typedef-decl name='regmap_hw_read' type-id='acda35bb' filepath='include/linux/regmap.h' line='457' column='1' id='697414cd'/>
+      <typedef-decl name='regmap_hw_reg_read' type-id='4893ffdf' filepath='include/linux/regmap.h' line='460' column='1' id='ec8d430e'/>
+      <typedef-decl name='regmap_hw_free_context' type-id='b7f9d8e6' filepath='include/linux/regmap.h' line='467' column='1' id='5c459137'/>
+      <typedef-decl name='regmap_hw_async_alloc' type-id='68f92bd7' filepath='include/linux/regmap.h' line='466' column='1' id='27a024fd'/>
+      <enum-decl name='regmap_endian' filepath='include/linux/regmap.h' line='190' column='1' id='e8a9ba7e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='REGMAP_ENDIAN_DEFAULT' value='0'/>
+        <enumerator name='REGMAP_ENDIAN_BIG' value='1'/>
+        <enumerator name='REGMAP_ENDIAN_LITTLE' value='2'/>
+        <enumerator name='REGMAP_ENDIAN_NATIVE' value='3'/>
+      </enum-decl>
+      <class-decl name='regmap_access_table' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='225' column='1' id='2bed066b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='yes_ranges' type-id='01dc1e38' visibility='default' filepath='include/linux/regmap.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_yes_ranges' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='no_ranges' type-id='01dc1e38' visibility='default' filepath='include/linux/regmap.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='n_no_ranges' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='229' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_range' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='205' column='1' id='20f6935f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='range_min' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='range_max' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regcache_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='166' column='1' id='81cd3626'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/base/regmap/internal.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type' type-id='6e1356fd' visibility='default' filepath='drivers/base/regmap/internal.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='02c2e3f3' visibility='default' filepath='drivers/base/regmap/internal.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='exit' type-id='02c2e3f3' visibility='default' filepath='drivers/base/regmap/internal.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='debugfs_init' type-id='078f0514' visibility='default' filepath='drivers/base/regmap/internal.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='read' type-id='b8529195' visibility='default' filepath='drivers/base/regmap/internal.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write' type-id='2f739ebb' visibility='default' filepath='drivers/base/regmap/internal.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sync' type-id='2f739ebb' visibility='default' filepath='drivers/base/regmap/internal.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='drop' type-id='2f739ebb' visibility='default' filepath='drivers/base/regmap/internal.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='regcache_type' filepath='include/linux/regmap.h' line='37' column='1' id='6e1356fd'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='REGCACHE_NONE' value='0'/>
+        <enumerator name='REGCACHE_RBTREE' value='1'/>
+        <enumerator name='REGCACHE_COMPRESSED' value='2'/>
+        <enumerator name='REGCACHE_FLAT' value='3'/>
+      </enum-decl>
+      <class-decl name='reg_default' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='53' column='1' id='0ee576bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='def' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='reg_sequence' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='68' column='1' id='4fcc4597'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='def' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='delay_us' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_config' size-in-bits='2112' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='352' column='1' id='20b6fd7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/regmap.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg_bits' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reg_stride' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pad_bits' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='val_bits' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='writeable_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='readable_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='volatile_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='precious_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='writeable_noinc_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='readable_noinc_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='disable_locking' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='lock' type-id='a4d5c862' visibility='default' filepath='include/linux/regmap.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='unlock' type-id='cf202c75' visibility='default' filepath='include/linux/regmap.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='lock_arg' type-id='eaa32e2f' visibility='default' filepath='include/linux/regmap.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reg_read' type-id='4893ffdf' visibility='default' filepath='include/linux/regmap.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='reg_write' type-id='db7eb22d' visibility='default' filepath='include/linux/regmap.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fast_io' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='max_register' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='wr_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rd_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='volatile_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='precious_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='wr_noinc_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rd_noinc_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='reg_defaults' type-id='4825f6ba' visibility='default' filepath='include/linux/regmap.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='num_reg_defaults' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='cache_type' type-id='6e1356fd' visibility='default' filepath='include/linux/regmap.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='reg_defaults_raw' type-id='eaa32e2f' visibility='default' filepath='include/linux/regmap.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='num_reg_defaults_raw' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='read_flag_mask' type-id='7359adad' visibility='default' filepath='include/linux/regmap.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='write_flag_mask' type-id='7359adad' visibility='default' filepath='include/linux/regmap.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='zero_flag_mask' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1800'>
+          <var-decl name='use_single_read' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1808'>
+          <var-decl name='use_single_write' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1816'>
+          <var-decl name='can_multi_write' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='reg_format_endian' type-id='e8a9ba7e' visibility='default' filepath='include/linux/regmap.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='val_format_endian' type-id='e8a9ba7e' visibility='default' filepath='include/linux/regmap.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ranges' type-id='cf08cac3' visibility='default' filepath='include/linux/regmap.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='num_ranges' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='use_hwlock' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='hwlock_id' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='hwlock_mode' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='406' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_range_cfg' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='429' column='1' id='b683d7fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/regmap.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='range_min' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='range_max' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='selector_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='selector_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='selector_shift' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='window_start' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='window_len' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='443' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_field' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='207' column='1' id='ccbe56f6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='regmap' type-id='29af9a71' visibility='default' filepath='drivers/base/regmap/internal.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='shift' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reg' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='id_size' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id_offset' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='215' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='reg_field' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='1078' column='1' id='d7d5e052'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lsb' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1080' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='msb' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1081' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='id_size' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1082' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1083' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='0ee576bb' const='yes' id='9fddcab4'/>
+      <pointer-type-def type-id='9fddcab4' size-in-bits='64' id='4825f6ba'/>
+      <qualified-type-def type-id='4fcc4597' const='yes' id='40308fd2'/>
+      <pointer-type-def type-id='40308fd2' size-in-bits='64' id='0472a368'/>
+      <qualified-type-def type-id='81cd3626' const='yes' id='2dd1eb6f'/>
+      <pointer-type-def type-id='2dd1eb6f' size-in-bits='64' id='66755d9f'/>
+      <qualified-type-def type-id='2bed066b' const='yes' id='a82172e0'/>
+      <pointer-type-def type-id='a82172e0' size-in-bits='64' id='76a7b3fe'/>
+      <qualified-type-def type-id='bd5f6464' const='yes' id='4dbb5689'/>
+      <pointer-type-def type-id='4dbb5689' size-in-bits='64' id='00e96299'/>
+      <qualified-type-def type-id='20b6fd7c' const='yes' id='23e41d37'/>
+      <pointer-type-def type-id='23e41d37' size-in-bits='64' id='9d19d4a7'/>
+      <qualified-type-def type-id='20f6935f' const='yes' id='9a6d2bc2'/>
+      <pointer-type-def type-id='9a6d2bc2' size-in-bits='64' id='01dc1e38'/>
+      <qualified-type-def type-id='b683d7fe' const='yes' id='9e02903b'/>
+      <pointer-type-def type-id='9e02903b' size-in-bits='64' id='cf08cac3'/>
+      <pointer-type-def type-id='38db93a7' size-in-bits='64' id='0cb0b26f'/>
+      <pointer-type-def type-id='b5732d6f' size-in-bits='64' id='02c2e3f3'/>
+      <pointer-type-def type-id='3b43e527' size-in-bits='64' id='2f739ebb'/>
+      <pointer-type-def type-id='71e3f969' size-in-bits='64' id='b8529195'/>
+      <pointer-type-def type-id='7ee67639' size-in-bits='64' id='db7eb22d'/>
+      <pointer-type-def type-id='b4c4ed0b' size-in-bits='64' id='4893ffdf'/>
+      <pointer-type-def type-id='9f19269b' size-in-bits='64' id='3a0b4ecf'/>
+      <pointer-type-def type-id='bc6e6178' size-in-bits='64' id='02a757da'/>
+      <pointer-type-def type-id='51192447' size-in-bits='64' id='acda35bb'/>
+      <pointer-type-def type-id='22a55ca6' size-in-bits='64' id='38921430'/>
+      <pointer-type-def type-id='0ee576bb' size-in-bits='64' id='629ca5cb'/>
+      <pointer-type-def type-id='4fcc4597' size-in-bits='64' id='f94cf1ff'/>
+      <pointer-type-def type-id='ddf16879' size-in-bits='64' id='29af9a71'/>
+      <pointer-type-def type-id='26527266' size-in-bits='64' id='211c185c'/>
+      <pointer-type-def type-id='bae213e3' size-in-bits='64' id='68f92bd7'/>
+      <pointer-type-def type-id='ccbe56f6' size-in-bits='64' id='476eb32c'/>
+      <pointer-type-def type-id='e14a26b1' size-in-bits='64' id='8e565e6d'/>
+      <pointer-type-def type-id='2ea97d28' size-in-bits='64' id='caa804f2'/>
+      <pointer-type-def type-id='0086a11a' size-in-bits='64' id='078f0514'/>
+      <pointer-type-def type-id='aee29222' size-in-bits='64' id='d1abd66c'/>
+      <pointer-type-def type-id='7c5064e4' size-in-bits='64' id='8052541e'/>
+      <function-decl name='__regmap_init' mangled-name='__regmap_init' filepath='drivers/base/regmap/regmap.c' line='674' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__regmap_init'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/regmap/regmap.c' line='674' column='1'/>
+        <parameter type-id='00e96299' name='bus' filepath='drivers/base/regmap/regmap.c' line='675' column='1'/>
+        <parameter type-id='eaa32e2f' name='bus_context' filepath='drivers/base/regmap/regmap.c' line='676' column='1'/>
+        <parameter type-id='9d19d4a7' name='config' filepath='drivers/base/regmap/regmap.c' line='677' column='1'/>
+        <parameter type-id='a57283f9' name='lock_key' filepath='drivers/base/regmap/regmap.c' line='678' column='1'/>
+        <parameter type-id='80f4b756' name='lock_name' filepath='drivers/base/regmap/regmap.c' line='679' column='1'/>
+        <return type-id='29af9a71'/>
+      </function-decl>
+      <function-decl name='regmap_register_patch' mangled-name='regmap_register_patch' filepath='drivers/base/regmap/regmap.c' line='3015' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_register_patch'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='3015' column='1'/>
+        <parameter type-id='0472a368' name='regs' filepath='drivers/base/regmap/regmap.c' line='3015' column='1'/>
+        <parameter type-id='95e97e5e' name='num_regs' filepath='drivers/base/regmap/regmap.c' line='3016' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hwspin_lock_request_specific' mangled-name='hwspin_lock_request_specific' filepath='include/linux/hwspinlock.h' line='62' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hwspin_lock_request_specific'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='0cb0b26f'/>
+      </function-decl>
+      <function-decl name='hwspin_lock_free' mangled-name='hwspin_lock_free' filepath='include/linux/hwspinlock.h' line='63' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hwspin_lock_free'>
+        <parameter type-id='0cb0b26f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__devm_regmap_init' mangled-name='__devm_regmap_init' filepath='drivers/base/regmap/regmap.c' line='1171' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__devm_regmap_init'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/regmap/regmap.c' line='1171' column='1'/>
+        <parameter type-id='00e96299' name='bus' filepath='drivers/base/regmap/regmap.c' line='1172' column='1'/>
+        <parameter type-id='eaa32e2f' name='bus_context' filepath='drivers/base/regmap/regmap.c' line='1173' column='1'/>
+        <parameter type-id='9d19d4a7' name='config' filepath='drivers/base/regmap/regmap.c' line='1174' column='1'/>
+        <parameter type-id='a57283f9' name='lock_key' filepath='drivers/base/regmap/regmap.c' line='1175' column='1'/>
+        <parameter type-id='80f4b756' name='lock_name' filepath='drivers/base/regmap/regmap.c' line='1176' column='1'/>
+        <return type-id='29af9a71'/>
+      </function-decl>
+      <function-decl name='regmap_exit' mangled-name='regmap_exit' filepath='drivers/base/regmap/regmap.c' line='1330' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_exit'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='1330' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_regmap_field_alloc' mangled-name='devm_regmap_field_alloc' filepath='drivers/base/regmap/regmap.c' line='1219' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regmap_field_alloc'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/regmap/regmap.c' line='1219' column='1'/>
+        <parameter type-id='29af9a71' name='regmap' filepath='drivers/base/regmap/regmap.c' line='1220' column='1'/>
+        <parameter type-id='d7d5e052' name='reg_field' filepath='drivers/base/regmap/regmap.c' line='1220' column='1'/>
+        <return type-id='476eb32c'/>
+      </function-decl>
+      <function-decl name='regmap_raw_write' mangled-name='regmap_raw_write' filepath='drivers/base/regmap/regmap.c' line='1900' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_raw_write'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='1900' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='drivers/base/regmap/regmap.c' line='1900' column='1'/>
+        <parameter type-id='eaa32e2f' name='val' filepath='drivers/base/regmap/regmap.c' line='1901' column='1'/>
+        <parameter type-id='b59d7dce' name='val_len' filepath='drivers/base/regmap/regmap.c' line='1901' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_field_update_bits_base' mangled-name='regmap_field_update_bits_base' filepath='drivers/base/regmap/regmap.c' line='2000' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_field_update_bits_base'>
+        <parameter type-id='476eb32c' name='field' filepath='drivers/base/regmap/regmap.c' line='2000' column='1'/>
+        <parameter type-id='f0981eeb' name='mask' filepath='drivers/base/regmap/regmap.c' line='2001' column='1'/>
+        <parameter type-id='f0981eeb' name='val' filepath='drivers/base/regmap/regmap.c' line='2001' column='1'/>
+        <parameter type-id='d8e6b335' name='change' filepath='drivers/base/regmap/regmap.c' line='2002' column='1'/>
+        <parameter type-id='b50a4934' name='async' filepath='drivers/base/regmap/regmap.c' line='2002' column='1'/>
+        <parameter type-id='b50a4934' name='force' filepath='drivers/base/regmap/regmap.c' line='2002' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_bulk_write' mangled-name='regmap_bulk_write' filepath='drivers/base/regmap/regmap.c' line='2057' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_bulk_write'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='2057' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='drivers/base/regmap/regmap.c' line='2057' column='1'/>
+        <parameter type-id='eaa32e2f' name='val' filepath='drivers/base/regmap/regmap.c' line='2057' column='1'/>
+        <parameter type-id='b59d7dce' name='val_count' filepath='drivers/base/regmap/regmap.c' line='2058' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_multi_reg_write' mangled-name='regmap_multi_reg_write' filepath='drivers/base/regmap/regmap.c' line='2356' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_multi_reg_write'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='2356' column='1'/>
+        <parameter type-id='0472a368' name='regs' filepath='drivers/base/regmap/regmap.c' line='2356' column='1'/>
+        <parameter type-id='95e97e5e' name='num_regs' filepath='drivers/base/regmap/regmap.c' line='2357' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_multi_reg_write_bypassed' mangled-name='regmap_multi_reg_write_bypassed' filepath='drivers/base/regmap/regmap.c' line='2389' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_multi_reg_write_bypassed'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='2389' column='1'/>
+        <parameter type-id='0472a368' name='regs' filepath='drivers/base/regmap/regmap.c' line='2390' column='1'/>
+        <parameter type-id='95e97e5e' name='num_regs' filepath='drivers/base/regmap/regmap.c' line='2391' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_raw_write_async' mangled-name='regmap_raw_write_async' filepath='drivers/base/regmap/regmap.c' line='2433' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_raw_write_async'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='2433' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='drivers/base/regmap/regmap.c' line='2433' column='1'/>
+        <parameter type-id='eaa32e2f' name='val' filepath='drivers/base/regmap/regmap.c' line='2434' column='1'/>
+        <parameter type-id='b59d7dce' name='val_len' filepath='drivers/base/regmap/regmap.c' line='2434' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_raw_read' mangled-name='regmap_raw_read' filepath='drivers/base/regmap/regmap.c' line='2586' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_raw_read'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='2586' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='drivers/base/regmap/regmap.c' line='2586' column='1'/>
+        <parameter type-id='eaa32e2f' name='val' filepath='drivers/base/regmap/regmap.c' line='2586' column='1'/>
+        <parameter type-id='b59d7dce' name='val_len' filepath='drivers/base/regmap/regmap.c' line='2587' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_field_read' mangled-name='regmap_field_read' filepath='drivers/base/regmap/regmap.c' line='2733' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_field_read'>
+        <parameter type-id='476eb32c' name='field' filepath='drivers/base/regmap/regmap.c' line='2733' column='1'/>
+        <parameter type-id='807869d3' name='val' filepath='drivers/base/regmap/regmap.c' line='2733' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_bulk_read' mangled-name='regmap_bulk_read' filepath='drivers/base/regmap/regmap.c' line='2793' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_bulk_read'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='2793' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='drivers/base/regmap/regmap.c' line='2793' column='1'/>
+        <parameter type-id='eaa32e2f' name='val' filepath='drivers/base/regmap/regmap.c' line='2793' column='1'/>
+        <parameter type-id='b59d7dce' name='val_count' filepath='drivers/base/regmap/regmap.c' line='2794' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_async_complete' mangled-name='regmap_async_complete' filepath='drivers/base/regmap/regmap.c' line='2974' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_async_complete'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='2974' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_get_val_bytes' mangled-name='regmap_get_val_bytes' filepath='drivers/base/regmap/regmap.c' line='3065' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_get_val_bytes'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='3065' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_get_reg_stride' mangled-name='regmap_get_reg_stride' filepath='drivers/base/regmap/regmap.c' line='3096' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_get_reg_stride'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='3096' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='b5732d6f'>
+        <parameter type-id='29af9a71'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3b43e527'>
+        <parameter type-id='29af9a71'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='71e3f969'>
+        <parameter type-id='29af9a71'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7ee67639'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b4c4ed0b'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9f19269b'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bc6e6178'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='51192447'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='22a55ca6'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='211c185c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bae213e3'>
+        <return type-id='211c185c'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e14a26b1'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2ea97d28'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0086a11a'>
+        <parameter type-id='29af9a71'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aee29222'>
+        <parameter type-id='29af9a71'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7c5064e4'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/soc.c' language='LANG_C89'>
+      <class-decl name='soc_device' size-in-bits='7488' is-struct='yes' visibility='default' filepath='drivers/base/soc.c' line='24' column='1' id='a353e32f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/base/soc.c' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='attr' type-id='2dbbe856' visibility='default' filepath='drivers/base/soc.c' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='soc_dev_num' type-id='95e97e5e' visibility='default' filepath='drivers/base/soc.c' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a353e32f' size-in-bits='64' id='97eb1967'/>
+      <pointer-type-def type-id='81954c90' size-in-bits='64' id='2dbbe856'/>
+      <function-decl name='soc_device_register' mangled-name='soc_device_register' filepath='drivers/base/soc.c' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='soc_device_register'>
+        <parameter type-id='2dbbe856' name='soc_dev_attr' filepath='drivers/base/soc.c' line='118' column='1'/>
+        <return type-id='97eb1967'/>
+      </function-decl>
+      <function-decl name='soc_device_unregister' mangled-name='soc_device_unregister' filepath='drivers/base/soc.c' line='176' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='soc_device_unregister'>
+        <parameter type-id='97eb1967' name='soc_dev' filepath='drivers/base/soc.c' line='176' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <class-decl name='soc_device_attribute' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/sys_soc.h' line='11' column='1' id='81954c90'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='machine' type-id='80f4b756' visibility='default' filepath='include/linux/sys_soc.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='family' type-id='80f4b756' visibility='default' filepath='include/linux/sys_soc.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='revision' type-id='80f4b756' visibility='default' filepath='include/linux/sys_soc.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='serial_number' type-id='80f4b756' visibility='default' filepath='include/linux/sys_soc.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='soc_id' type-id='80f4b756' visibility='default' filepath='include/linux/sys_soc.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/sys_soc.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='custom_attr_group' type-id='8ff9530e' visibility='default' filepath='include/linux/sys_soc.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/base/topology.c' language='LANG_C89'>
+      <function-decl name='get_cpu_device' mangled-name='get_cpu_device' filepath='include/linux/cpu.h' line='38' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_cpu_device'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='bitmap_print_to_pagebuf' mangled-name='bitmap_print_to_pagebuf' filepath='include/linux/bitmap.h' line='205' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bitmap_print_to_pagebuf'>
+        <parameter type-id='c894953d'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='f9b37274'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='9cbd1c16' size-in-bits='64' id='f9b37274'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/bluetooth/btsdio.c' language='LANG_C89'>
+      <class-decl name='mmc_bus_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='drivers/mmc/core/core.h' line='20' column='1' id='424ad5b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='remove' type-id='fa3ed3a2' visibility='default' filepath='drivers/mmc/core/core.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='detect' type-id='fa3ed3a2' visibility='default' filepath='drivers/mmc/core/core.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pre_suspend' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='suspend' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='resume' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='runtime_suspend' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='runtime_resume' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='alive' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='shutdown' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='hw_reset' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sw_reset' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_pwrseq' is-struct='yes' visibility='default' is-declaration-only='yes' id='bed67209'/>
+      <array-type-def dimensions='1' type-id='cc256810' size-in-bits='2240' id='67d619b5'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='c1880945' size-in-bits='448' id='4abea81e'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='64' id='1872161b'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='32' id='931565be'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='sdio_driver' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='73' column='1' id='81d3e1dd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id_table' type-id='4054d674' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='probe' type-id='ab1e2186' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='remove' type-id='11124634' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='drv' type-id='fe007c02' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sdio_device_id' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='391' column='1' id='d7c619db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='class' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='vendor' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='device' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='driver_data' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='395' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sdio_func' size-in-bits='8000' is-struct='yes' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='34' column='1' id='4073d265'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='card' type-id='13d38dcb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='irq_handler' type-id='1d186b8b' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='num' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7520'>
+          <var-decl name='class' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7536'>
+          <var-decl name='vendor' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='device' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7584'>
+          <var-decl name='max_blksize' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='cur_blksize' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='enable_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='state' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='tmpbuf' type-id='8bff8096' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='num_info' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='info' type-id='7d3cd834' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='tuples' type-id='e5932b8e' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_card' size-in-bits='14464' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='244' column='1' id='b0f558fb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='host' type-id='dd575c43' visibility='default' filepath='include/linux/mmc/card.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/mmc/card.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='ocr' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/card.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7456'>
+          <var-decl name='rca' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7520'>
+          <var-decl name='state' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='quirks' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7584'>
+          <var-decl name='quirk_max_rate' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='reenable_cmdq' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='erase_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='erase_shift' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='pref_erase' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='eg_boundary' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='erase_arg' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='erased_byte' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7840'>
+          <var-decl name='raw_cid' type-id='1c6c0c39' visibility='default' filepath='include/linux/mmc/card.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7968'>
+          <var-decl name='raw_csd' type-id='1c6c0c39' visibility='default' filepath='include/linux/mmc/card.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8096'>
+          <var-decl name='raw_scr' type-id='1872161b' visibility='default' filepath='include/linux/mmc/card.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8160'>
+          <var-decl name='raw_ssr' type-id='02fdec64' visibility='default' filepath='include/linux/mmc/card.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8672'>
+          <var-decl name='cid' type-id='5a0fc813' visibility='default' filepath='include/linux/mmc/card.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='csd' type-id='5e477b59' visibility='default' filepath='include/linux/mmc/card.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='ext_csd' type-id='2561085d' visibility='default' filepath='include/linux/mmc/card.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='scr' type-id='5e938df5' visibility='default' filepath='include/linux/mmc/card.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='ssr' type-id='5eba9d65' visibility='default' filepath='include/linux/mmc/card.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10784'>
+          <var-decl name='sw_caps' type-id='2a479001' visibility='default' filepath='include/linux/mmc/card.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='sdio_funcs' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10976'>
+          <var-decl name='sdio_funcs_probed' type-id='49178f86' visibility='default' filepath='include/linux/mmc/card.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='cccr' type-id='7f07e508' visibility='default' filepath='include/linux/mmc/card.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11104'>
+          <var-decl name='cis' type-id='4b644cf4' visibility='default' filepath='include/linux/mmc/card.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='sdio_func' type-id='4abea81e' visibility='default' filepath='include/linux/mmc/card.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='sdio_single_irq' type-id='c1880945' visibility='default' filepath='include/linux/mmc/card.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='num_info' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='info' type-id='7d3cd834' visibility='default' filepath='include/linux/mmc/card.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='tuples' type-id='e5932b8e' visibility='default' filepath='include/linux/mmc/card.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='sd_bus_speed' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11936'>
+          <var-decl name='mmc_avail_type' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='drive_strength' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='debugfs_root' type-id='27675065' visibility='default' filepath='include/linux/mmc/card.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='part' type-id='67d619b5' visibility='default' filepath='include/linux/mmc/card.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14336'>
+          <var-decl name='nr_parts' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14368'>
+          <var-decl name='bouncesz' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14400'>
+          <var-decl name='complete_wq' type-id='242e3d19' visibility='default' filepath='include/linux/mmc/card.h' line='313' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_host' size-in-bits='13312' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='274' column='1' id='a7d74313'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/mmc/host.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='class_dev' type-id='66e487eb' visibility='default' filepath='include/linux/mmc/host.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='ops' type-id='13d52ad5' visibility='default' filepath='include/linux/mmc/host.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='pwrseq' type-id='0d786921' visibility='default' filepath='include/linux/mmc/host.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='f_min' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='f_max' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='f_init' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='ocr_avail' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='ocr_avail_sdio' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='ocr_avail_sd' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='ocr_avail_mmc' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='pm_notify' type-id='9b08f7cd' visibility='default' filepath='include/linux/mmc/host.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='max_current_330' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8096'>
+          <var-decl name='max_current_300' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='max_current_180' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8160'>
+          <var-decl name='caps' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='caps2' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8224'>
+          <var-decl name='fixed_drv_type' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='pm_caps' type-id='208a5a8d' visibility='default' filepath='include/linux/mmc/host.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8288'>
+          <var-decl name='max_seg_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='max_segs' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/host.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8336'>
+          <var-decl name='unused' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/host.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8352'>
+          <var-decl name='max_req_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='max_blk_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8416'>
+          <var-decl name='max_blk_count' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='max_busy_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmc/host.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='ios' type-id='3f80a1ba' visibility='default' filepath='include/linux/mmc/host.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='use_spi_crc' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='claimed' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='bus_dead' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='can_retune' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='doing_retune' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='retune_now' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='retune_paused' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='use_blk_mq' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='retune_crc_disable' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='can_dma_map_merge' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='rescan_disable' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8736'>
+          <var-decl name='rescan_entered' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='need_retune' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8800'>
+          <var-decl name='hold_retune' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='retune_period' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='retune_timer' type-id='abe41e67' visibility='default' filepath='include/linux/mmc/host.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='trigger_card_event' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='card' type-id='13d38dcb' visibility='default' filepath='include/linux/mmc/host.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='wq' type-id='b5ab048f' visibility='default' filepath='include/linux/mmc/host.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='claimer' type-id='f1e196e0' visibility='default' filepath='include/linux/mmc/host.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='claim_cnt' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='default_ctx' type-id='783f5582' visibility='default' filepath='include/linux/mmc/host.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='detect' type-id='5ad6e0ef' visibility='default' filepath='include/linux/mmc/host.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='detect_change' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='slot' type-id='edfd3d7d' visibility='default' filepath='include/linux/mmc/host.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='bus_ops' type-id='5680a8c9' visibility='default' filepath='include/linux/mmc/host.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='bus_refs' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11232'>
+          <var-decl name='sdio_irqs' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='sdio_irq_thread' type-id='f23e2572' visibility='default' filepath='include/linux/mmc/host.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='sdio_irq_work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/mmc/host.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12416'>
+          <var-decl name='sdio_irq_pending' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12448'>
+          <var-decl name='sdio_irq_thread_abort' type-id='49178f86' visibility='default' filepath='include/linux/mmc/host.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12480'>
+          <var-decl name='pm_flags' type-id='208a5a8d' visibility='default' filepath='include/linux/mmc/host.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12544'>
+          <var-decl name='led' type-id='db6d90a1' visibility='default' filepath='include/linux/mmc/host.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12608'>
+          <var-decl name='regulator_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='supply' type-id='39af3b22' visibility='default' filepath='include/linux/mmc/host.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='debugfs_root' type-id='27675065' visibility='default' filepath='include/linux/mmc/host.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12864'>
+          <var-decl name='ongoing_mrq' type-id='47f117d4' visibility='default' filepath='include/linux/mmc/host.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='actual_clock' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12960'>
+          <var-decl name='slotno' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12992'>
+          <var-decl name='dsr_req' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13024'>
+          <var-decl name='dsr' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='cqe_ops' type-id='c3b36a8e' visibility='default' filepath='include/linux/mmc/host.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='cqe_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/mmc/host.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='cqe_qdepth' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13216'>
+          <var-decl name='cqe_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13224'>
+          <var-decl name='cqe_on' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13232'>
+          <var-decl name='hsq_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13312'>
+          <var-decl name='private' type-id='c99b5ecd' visibility='default' filepath='include/linux/mmc/host.h' line='472' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_host_ops' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='82' column='1' id='f2d6d1c0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='post_req' type-id='d7f8a77a' visibility='default' filepath='include/linux/mmc/host.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pre_req' type-id='624a8813' visibility='default' filepath='include/linux/mmc/host.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='request' type-id='624a8813' visibility='default' filepath='include/linux/mmc/host.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='request_atomic' type-id='83cb8e80' visibility='default' filepath='include/linux/mmc/host.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_ios' type-id='589bddbf' visibility='default' filepath='include/linux/mmc/host.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_ro' type-id='e2d63f85' visibility='default' filepath='include/linux/mmc/host.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_cd' type-id='e2d63f85' visibility='default' filepath='include/linux/mmc/host.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='enable_sdio_irq' type-id='dacbc069' visibility='default' filepath='include/linux/mmc/host.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ack_sdio_irq' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='init_card' type-id='287e3e50' visibility='default' filepath='include/linux/mmc/host.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='start_signal_voltage_switch' type-id='13636c34' visibility='default' filepath='include/linux/mmc/host.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='card_busy' type-id='e2d63f85' visibility='default' filepath='include/linux/mmc/host.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='execute_tuning' type-id='ebae9a6c' visibility='default' filepath='include/linux/mmc/host.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='prepare_hs400_tuning' type-id='13636c34' visibility='default' filepath='include/linux/mmc/host.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='hs400_prepare_ddr' type-id='e2d63f85' visibility='default' filepath='include/linux/mmc/host.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hs400_downgrade' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='hs400_complete' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='hs400_enhanced_strobe' type-id='589bddbf' visibility='default' filepath='include/linux/mmc/host.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='select_drive_strength' type-id='981b2780' visibility='default' filepath='include/linux/mmc/host.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hw_reset' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='card_event' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='multi_io_quirk' type-id='78470542' visibility='default' filepath='include/linux/mmc/host.h' line='173' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_request' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/mmc/core.h' line='147' column='1' id='8bb2c7be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sbc' type-id='6df3750c' visibility='default' filepath='include/linux/mmc/core.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cmd' type-id='6df3750c' visibility='default' filepath='include/linux/mmc/core.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='6de64ec1' visibility='default' filepath='include/linux/mmc/core.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='stop' type-id='6df3750c' visibility='default' filepath='include/linux/mmc/core.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='completion' type-id='f9fef04f' visibility='default' filepath='include/linux/mmc/core.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cmd_completion' type-id='f9fef04f' visibility='default' filepath='include/linux/mmc/core.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='done' type-id='41865b69' visibility='default' filepath='include/linux/mmc/core.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='recovery_notifier' type-id='41865b69' visibility='default' filepath='include/linux/mmc/core.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='host' type-id='dd575c43' visibility='default' filepath='include/linux/mmc/core.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='cap_cmd_during_tfr' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/core.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='tag' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/core.h' line='167' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_command' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/mmc/core.h' line='26' column='1' id='c8e8a836'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='opcode' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/core.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='arg' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/core.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='resp' type-id='1c6c0c39' visibility='default' filepath='include/linux/mmc/core.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='retries' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/core.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='busy_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sanitize_busy' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/core.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='data' type-id='6de64ec1' visibility='default' filepath='include/linux/mmc/core.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mrq' type-id='47f117d4' visibility='default' filepath='include/linux/mmc/core.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_data' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/mmc/core.h' line='117' column='1' id='69e72089'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeout_ns' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='timeout_clks' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='blksz' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='blocks' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='blk_addr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/core.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='bytes_xfered' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='stop' type-id='6df3750c' visibility='default' filepath='include/linux/mmc/core.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mrq' type-id='47f117d4' visibility='default' filepath='include/linux/mmc/core.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sg_len' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sg_count' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/core.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sg' type-id='bf3ef905' visibility='default' filepath='include/linux/mmc/core.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='host_cookie' type-id='a7832498' visibility='default' filepath='include/linux/mmc/core.h' line='143' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_ios' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='19' column='1' id='3f80a1ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clock' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vdd' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/host.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='power_delay_ms' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bus_mode' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='chip_select' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='power_mode' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='bus_width' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timing' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='signal_voltage' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='drv_type' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='enhanced_strobe' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='mmc_pm_flag_t' type-id='f0981eeb' filepath='include/linux/mmc/pm.h' line='22' column='1' id='208a5a8d'/>
+      <class-decl name='mmc_ctx' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='270' column='1' id='783f5582'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/mmc/host.h' line='271' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_slot' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='242' column='1' id='edfd3d7d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cd_irq' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cd_wake_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='handler_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/mmc/host.h' line='245' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_supply' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='265' column='1' id='39af3b22'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vmmc' type-id='850c13f6' visibility='default' filepath='include/linux/mmc/host.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vqmmc' type-id='850c13f6' visibility='default' filepath='include/linux/mmc/host.h' line='267' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_cqe_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='177' column='1' id='e726245b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cqe_enable' type-id='6847d33d' visibility='default' filepath='include/linux/mmc/host.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cqe_disable' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cqe_request' type-id='83cb8e80' visibility='default' filepath='include/linux/mmc/host.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cqe_post_req' type-id='624a8813' visibility='default' filepath='include/linux/mmc/host.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cqe_off' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cqe_wait_for_idle' type-id='e2d63f85' visibility='default' filepath='include/linux/mmc/host.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cqe_timeout' type-id='885a96c2' visibility='default' filepath='include/linux/mmc/host.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cqe_recovery_start' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cqe_recovery_finish' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='218' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_cid' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='13' column='1' id='5a0fc813'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='manfid' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='prod_name' type-id='8e100159' visibility='default' filepath='include/linux/mmc/card.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='prv' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='serial' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='oemid' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='year' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hwrev' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='fwrev' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='month' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_csd' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='25' column='1' id='5e477b59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='structure' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='mmca_vsn' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='cmdclass' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='taac_clks' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='taac_ns' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='c_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='r2w_factor' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_dtr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='erase_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='read_blkbits' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write_blkbits' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='capacity' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='read_partial' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='read_misalign' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='write_partial' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='write_misalign' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='dsr_imp' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_ext_csd' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='45' column='1' id='2561085d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rev' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='erase_group_def' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sec_feature_support' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='rel_sectors' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rel_param' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='enhanced_rpmb_supported' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='part_config' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='cache_ctrl' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rst_n_function' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='max_packed_writes' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='max_packed_reads' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='packed_event_en' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='part_time' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sa_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='generic_cmd6_time' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='power_off_longtime' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='power_off_notification' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='hs_max_dtr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='hs200_max_dtr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='hc_erase_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='hc_erase_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sec_trim_mult' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sec_erase_mult' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='trim_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='partition_setting_completed' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='enhanced_area_offset' type-id='3a47d82b' visibility='default' filepath='include/linux/mmc/card.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='enhanced_area_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='cache_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='hpi_en' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='712'>
+          <var-decl name='hpi' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='hpi_cmd' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bkops' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='776'>
+          <var-decl name='man_bkops_en' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='auto_bkops_en' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='data_sector_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='data_tag_unit_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='boot_ro_lock' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='boot_ro_lockable' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='904'>
+          <var-decl name='ffu_capable' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='912'>
+          <var-decl name='cmdq_en' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='920'>
+          <var-decl name='cmdq_support' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='cmdq_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fwrev' type-id='d2f7b56a' visibility='default' filepath='include/linux/mmc/card.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='raw_exception_status' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1032'>
+          <var-decl name='raw_partition_support' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='raw_rpmb_size_mult' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1048'>
+          <var-decl name='raw_erased_mem_count' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='strobe_support' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1064'>
+          <var-decl name='raw_ext_csd_structure' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1072'>
+          <var-decl name='raw_card_type' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1080'>
+          <var-decl name='raw_driver_strength' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='out_of_int_time' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1096'>
+          <var-decl name='raw_pwr_cl_52_195' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1104'>
+          <var-decl name='raw_pwr_cl_26_195' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1112'>
+          <var-decl name='raw_pwr_cl_52_360' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='raw_pwr_cl_26_360' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1128'>
+          <var-decl name='raw_s_a_timeout' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1136'>
+          <var-decl name='raw_hc_erase_gap_size' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1144'>
+          <var-decl name='raw_erase_timeout_mult' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='raw_hc_erase_grp_size' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='raw_sec_trim_mult' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1168'>
+          <var-decl name='raw_sec_erase_mult' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1176'>
+          <var-decl name='raw_sec_feature_support' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='raw_trim_mult' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1192'>
+          <var-decl name='raw_pwr_cl_200_195' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1200'>
+          <var-decl name='raw_pwr_cl_200_360' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1208'>
+          <var-decl name='raw_pwr_cl_ddr_52_195' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='raw_pwr_cl_ddr_52_360' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1224'>
+          <var-decl name='raw_pwr_cl_ddr_200_360' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1232'>
+          <var-decl name='raw_bkops_status' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1240'>
+          <var-decl name='raw_sectors' type-id='931565be' visibility='default' filepath='include/linux/mmc/card.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1272'>
+          <var-decl name='pre_eol_info' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='device_life_time_est_typ_a' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1288'>
+          <var-decl name='device_life_time_est_typ_b' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='feature_support' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sd_scr' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='131' column='1' id='5e938df5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sda_vsn' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='sda_spec3' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sda_spec4' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='sda_specx' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bus_widths' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='cmds' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='139' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sd_ssr' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='144' column='1' id='5eba9d65'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='au' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='erase_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='erase_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sd_switch_caps' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='150' column='1' id='2a479001'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hs_max_dtr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='uhs_max_dtr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sd3_bus_mode' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='sd3_drv_type' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sd3_curr_limit' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='179' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sdio_cccr' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='192' column='1' id='7f07e508'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sdio_vsn' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='sd_vsn' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='multi_block' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='low_speed' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='wide_bus' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='high_power' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='high_speed' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='disable_cd' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='200' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sdio_cis' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='203' column='1' id='4b644cf4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vendor' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='device' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='blksize' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_dtr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sdio_func_tuple' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='24' column='1' id='d81af048'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='e5932b8e' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='code' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='size' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='data' type-id='5e6516ee' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_part' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='229' column='1' id='cc256810'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/card.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='part_cfg' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/linux/mmc/card.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='force_ro' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='area_type' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='234' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='sdio_irq_handler_t' type-id='81dd332a' filepath='include/linux/mmc/sdio_func.h' line='19' column='1' id='72a9e98a'/>
+      <qualified-type-def type-id='424ad5b6' const='yes' id='04379599'/>
+      <pointer-type-def type-id='04379599' size-in-bits='64' id='5680a8c9'/>
+      <qualified-type-def type-id='e726245b' const='yes' id='7a773bd0'/>
+      <pointer-type-def type-id='7a773bd0' size-in-bits='64' id='c3b36a8e'/>
+      <qualified-type-def type-id='f2d6d1c0' const='yes' id='d43d82dd'/>
+      <pointer-type-def type-id='d43d82dd' size-in-bits='64' id='13d52ad5'/>
+      <qualified-type-def type-id='d7c619db' const='yes' id='2f04a816'/>
+      <pointer-type-def type-id='2f04a816' size-in-bits='64' id='4054d674'/>
+      <pointer-type-def type-id='72e932b0' size-in-bits='64' id='78470542'/>
+      <pointer-type-def type-id='9df0e286' size-in-bits='64' id='981b2780'/>
+      <pointer-type-def type-id='8d57fbd1' size-in-bits='64' id='e2d63f85'/>
+      <pointer-type-def type-id='355fab89' size-in-bits='64' id='6847d33d'/>
+      <pointer-type-def type-id='00a425f2' size-in-bits='64' id='13636c34'/>
+      <pointer-type-def type-id='c4f6276e' size-in-bits='64' id='83cb8e80'/>
+      <pointer-type-def type-id='aa7f03f2' size-in-bits='64' id='ebae9a6c'/>
+      <pointer-type-def type-id='a211528c' size-in-bits='64' id='ab1e2186'/>
+      <pointer-type-def type-id='b0f558fb' size-in-bits='64' id='13d38dcb'/>
+      <pointer-type-def type-id='c8e8a836' size-in-bits='64' id='6df3750c'/>
+      <pointer-type-def type-id='783f5582' size-in-bits='64' id='f1e196e0'/>
+      <pointer-type-def type-id='69e72089' size-in-bits='64' id='6de64ec1'/>
+      <pointer-type-def type-id='a7d74313' size-in-bits='64' id='dd575c43'/>
+      <pointer-type-def type-id='3f80a1ba' size-in-bits='64' id='3b590e48'/>
+      <pointer-type-def type-id='bed67209' size-in-bits='64' id='0d786921'/>
+      <pointer-type-def type-id='8bb2c7be' size-in-bits='64' id='47f117d4'/>
+      <pointer-type-def type-id='81d3e1dd' size-in-bits='64' id='710bea3d'/>
+      <pointer-type-def type-id='4073d265' size-in-bits='64' id='c1880945'/>
+      <pointer-type-def type-id='d81af048' size-in-bits='64' id='e5932b8e'/>
+      <pointer-type-def type-id='72a9e98a' size-in-bits='64' id='1d186b8b'/>
+      <pointer-type-def type-id='6b983020' size-in-bits='64' id='885a96c2'/>
+      <pointer-type-def type-id='7d43ac00' size-in-bits='64' id='fa3ed3a2'/>
+      <pointer-type-def type-id='e3e30c0d' size-in-bits='64' id='dacbc069'/>
+      <pointer-type-def type-id='d72e913e' size-in-bits='64' id='287e3e50'/>
+      <pointer-type-def type-id='82718bfb' size-in-bits='64' id='589bddbf'/>
+      <pointer-type-def type-id='c3d2316f' size-in-bits='64' id='624a8813'/>
+      <pointer-type-def type-id='b7bb7c18' size-in-bits='64' id='d7f8a77a'/>
+      <pointer-type-def type-id='48dbb365' size-in-bits='64' id='41865b69'/>
+      <pointer-type-def type-id='81dd332a' size-in-bits='64' id='11124634'/>
+      <function-decl name='sdio_unregister_driver' mangled-name='sdio_unregister_driver' filepath='include/linux/mmc/sdio_func.h' line='108' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_unregister_driver'>
+        <parameter type-id='710bea3d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdio_claim_host' mangled-name='sdio_claim_host' filepath='include/linux/mmc/sdio_func.h' line='125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_claim_host'>
+        <parameter type-id='c1880945'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_dequeue' mangled-name='skb_dequeue' filepath='include/linux/skbuff.h' line='2070' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_dequeue'>
+        <parameter type-id='03c386c6'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='sdio_writesb' mangled-name='sdio_writesb' filepath='include/linux/mmc/sdio_func.h' line='159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_writesb'>
+        <parameter type-id='c1880945'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdio_writeb' mangled-name='sdio_writeb' filepath='include/linux/mmc/sdio_func.h' line='147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_writeb'>
+        <parameter type-id='c1880945'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_queue_head' mangled-name='skb_queue_head' filepath='include/linux/skbuff.h' line='2019' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_queue_head'>
+        <parameter type-id='03c386c6'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdio_release_host' mangled-name='sdio_release_host' filepath='include/linux/mmc/sdio_func.h' line='126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_release_host'>
+        <parameter type-id='c1880945'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdio_enable_func' mangled-name='sdio_enable_func' filepath='include/linux/mmc/sdio_func.h' line='128' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_enable_func'>
+        <parameter type-id='c1880945'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdio_claim_irq' mangled-name='sdio_claim_irq' filepath='include/linux/mmc/sdio_func.h' line='133' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_claim_irq'>
+        <parameter type-id='c1880945'/>
+        <parameter type-id='11124634'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdio_disable_func' mangled-name='sdio_disable_func' filepath='include/linux/mmc/sdio_func.h' line='129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_disable_func'>
+        <parameter type-id='c1880945'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdio_release_irq' mangled-name='sdio_release_irq' filepath='include/linux/mmc/sdio_func.h' line='134' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_release_irq'>
+        <parameter type-id='c1880945'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdio_readb' mangled-name='sdio_readb' filepath='include/linux/mmc/sdio_func.h' line='138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_readb'>
+        <parameter type-id='c1880945'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='002ac4a6'/>
+      </function-decl>
+      <function-decl name='sdio_readsb' mangled-name='sdio_readsb' filepath='include/linux/mmc/sdio_func.h' line='144' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_readsb'>
+        <parameter type-id='c1880945'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdio_register_driver' mangled-name='sdio_register_driver' filepath='include/linux/mmc/sdio_func.h' line='107' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_register_driver'>
+        <parameter type-id='710bea3d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='72e932b0'>
+        <parameter type-id='13d38dcb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9df0e286'>
+        <parameter type-id='13d38dcb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8d57fbd1'>
+        <parameter type-id='dd575c43'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='355fab89'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='13d38dcb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='00a425f2'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='3b590e48'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c4f6276e'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='47f117d4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aa7f03f2'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a211528c'>
+        <parameter type-id='c1880945'/>
+        <parameter type-id='4054d674'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6b983020'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='47f117d4'/>
+        <parameter type-id='d8e6b335'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7d43ac00'>
+        <parameter type-id='dd575c43'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e3e30c0d'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d72e913e'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='13d38dcb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='82718bfb'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='3b590e48'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c3d2316f'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='47f117d4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b7bb7c18'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='47f117d4'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='48dbb365'>
+        <parameter type-id='47f117d4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='81dd332a'>
+        <parameter type-id='c1880945'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='7bcbad99' size-in-bits='64' id='db6d90a1'/>
+      <pointer-type-def type-id='e61c85d0' size-in-bits='64' id='03c386c6'/>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='128' id='1c6c0c39'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='led_trigger' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/leds.h' line='338' column='1' id='7bcbad99'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='activate' type-id='0904d108' visibility='default' filepath='include/linux/leds.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='deactivate' type-id='749654e7' visibility='default' filepath='include/linux/leds.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='leddev_list_lock' type-id='ac16795b' visibility='default' filepath='include/linux/leds.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='led_cdevs' type-id='72f469ec' visibility='default' filepath='include/linux/leds.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='next_trig' type-id='72f469ec' visibility='default' filepath='include/linux/leds.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/leds.h' line='351' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='821e33ee' size-in-bits='64' id='0904d108'/>
+      <pointer-type-def type-id='6dea5f13' size-in-bits='64' id='749654e7'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/bluetooth/hci_ll.c' language='LANG_C89'>
+      <class-decl name='nvmem_cell' size-in-bits='448' is-struct='yes' visibility='default' filepath='drivers/nvmem/core.c' line='22' column='1' id='78c7ad97'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/nvmem/core.c' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/core.c' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bytes' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/core.c' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bit_offset' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/core.c' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nbits' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/core.c' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='np' type-id='9a537bbe' visibility='default' filepath='drivers/nvmem/core.c' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nvmem' type-id='8179bc49' visibility='default' filepath='drivers/nvmem/core.c' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/nvmem/core.c' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='78c7ad97' size-in-bits='64' id='4a4ce85f'/>
+      <function-decl name='nvmem_cell_get' mangled-name='nvmem_cell_get' filepath='include/linux/nvmem-consumer.h' line='58' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvmem_cell_get'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='4a4ce85f'/>
+      </function-decl>
+      <function-decl name='nvmem_cell_read' mangled-name='nvmem_cell_read' filepath='include/linux/nvmem-consumer.h' line='62' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvmem_cell_read'>
+        <parameter type-id='4a4ce85f'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <pointer-type-def type-id='77aad2d1' size-in-bits='64' id='8179bc49'/>
+      <class-decl name='nvmem_device' size-in-bits='8576' is-struct='yes' visibility='default' filepath='drivers/nvmem/nvmem.h' line='13' column='1' id='77aad2d1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='drivers/nvmem/nvmem.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/nvmem/nvmem.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='stride' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/nvmem.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7456'>
+          <var-decl name='word_size' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/nvmem.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/nvmem.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7520'>
+          <var-decl name='refcnt' type-id='400fb07b' visibility='default' filepath='drivers/nvmem/nvmem.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='drivers/nvmem/nvmem.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='read_only' type-id='b50a4934' visibility='default' filepath='drivers/nvmem/nvmem.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/nvmem.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='type' type-id='0c30c73e' visibility='default' filepath='drivers/nvmem/nvmem.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='eeprom' type-id='d83a2db1' visibility='default' filepath='drivers/nvmem/nvmem.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='base_dev' type-id='fa0b179b' visibility='default' filepath='drivers/nvmem/nvmem.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='cells' type-id='72f469ec' visibility='default' filepath='drivers/nvmem/nvmem.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='reg_read' type-id='b3e77ef6' visibility='default' filepath='drivers/nvmem/nvmem.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='reg_write' type-id='020bf95f' visibility='default' filepath='drivers/nvmem/nvmem.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='drivers/nvmem/nvmem.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nvmem_type' filepath='include/linux/nvmem-provider.h' line='22' column='1' id='0c30c73e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NVMEM_TYPE_UNKNOWN' value='0'/>
+        <enumerator name='NVMEM_TYPE_EEPROM' value='1'/>
+        <enumerator name='NVMEM_TYPE_OTP' value='2'/>
+        <enumerator name='NVMEM_TYPE_BATTERY_BACKED' value='3'/>
+      </enum-decl>
+      <typedef-decl name='nvmem_reg_read_t' type-id='3ba5153c' filepath='include/linux/nvmem-provider.h' line='17' column='1' id='b3e77ef6'/>
+      <typedef-decl name='nvmem_reg_write_t' type-id='3ba5153c' filepath='include/linux/nvmem-provider.h' line='19' column='1' id='020bf95f'/>
+      <pointer-type-def type-id='dfed847a' size-in-bits='64' id='3ba5153c'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/bus/qcom-ebi2.c' language='LANG_C89'>
+      <class-decl name='clk' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/clk/clk.c' line='99' column='1' id='830e3b1b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='core' type-id='ba21e62b' visibility='default' filepath='drivers/clk/clk.c' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/clk/clk.c' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev_id' type-id='80f4b756' visibility='default' filepath='drivers/clk/clk.c' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='con_id' type-id='80f4b756' visibility='default' filepath='drivers/clk/clk.c' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='min_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='exclusive_count' type-id='f0981eeb' visibility='default' filepath='drivers/clk/clk.c' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='clks_node' type-id='03a4a074' visibility='default' filepath='drivers/clk/clk.c' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='830e3b1b' size-in-bits='64' id='7d0bc0eb'/>
+      <function-decl name='devm_clk_get' mangled-name='devm_clk_get' filepath='include/linux/clk.h' line='419' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_clk_get'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='clk_prepare' mangled-name='clk_prepare' filepath='include/linux/clk.h' line='232' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_prepare'>
+        <parameter type-id='7d0bc0eb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_enable' mangled-name='clk_enable' filepath='include/linux/clk.h' line='491' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_enable'>
+        <parameter type-id='7d0bc0eb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_ioremap_resource' mangled-name='devm_ioremap_resource' filepath='include/linux/device.h' line='979' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_ioremap_resource'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='e153f6de'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='clk_disable' mangled-name='clk_disable' filepath='include/linux/clk.h' line='519' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_disable'>
+        <parameter type-id='7d0bc0eb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='clk_unprepare' mangled-name='clk_unprepare' filepath='include/linux/clk.h' line='260' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_unprepare'>
+        <parameter type-id='7d0bc0eb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_get_next_available_child' mangled-name='of_get_next_available_child' filepath='include/linux/of.h' line='290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_next_available_child'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='9a537bbe'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='_dev_info' mangled-name='_dev_info' filepath='include/linux/device.h' line='1764' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_dev_info'>
+        <parameter type-id='8df61054'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/char/hw_random/core.c' language='LANG_C89'>
+      <class-decl name='hwrng' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/hw_random.h' line='39' column='1' id='9f3c2055'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/hw_random.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init' type-id='83a85211' visibility='default' filepath='include/linux/hw_random.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cleanup' type-id='844c2e84' visibility='default' filepath='include/linux/hw_random.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data_present' type-id='0b1bf018' visibility='default' filepath='include/linux/hw_random.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data_read' type-id='81767071' visibility='default' filepath='include/linux/hw_random.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='read' type-id='c38df6d7' visibility='default' filepath='include/linux/hw_random.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='7359adad' visibility='default' filepath='include/linux/hw_random.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='quality' type-id='8efea9e5' visibility='default' filepath='include/linux/hw_random.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/hw_random.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/linux/hw_random.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='cleanup_done' type-id='f9fef04f' visibility='default' filepath='include/linux/hw_random.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9f3c2055' size-in-bits='64' id='c1547255'/>
+      <pointer-type-def type-id='d660dfdd' size-in-bits='64' id='83a85211'/>
+      <pointer-type-def type-id='78627a7e' size-in-bits='64' id='0b1bf018'/>
+      <pointer-type-def type-id='b03c6e7d' size-in-bits='64' id='81767071'/>
+      <pointer-type-def type-id='4f6af29b' size-in-bits='64' id='c38df6d7'/>
+      <pointer-type-def type-id='72fc7982' size-in-bits='64' id='844c2e84'/>
+      <function-decl name='hwrng_register' mangled-name='hwrng_register' filepath='drivers/char/hw_random/core.c' line='457' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hwrng_register'>
+        <parameter type-id='c1547255' name='rng' filepath='drivers/char/hw_random/core.c' line='457' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hwrng_unregister' mangled-name='hwrng_unregister' filepath='drivers/char/hw_random/core.c' line='517' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hwrng_unregister'>
+        <parameter type-id='c1547255' name='rng' filepath='drivers/char/hw_random/core.c' line='517' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='d660dfdd'>
+        <parameter type-id='c1547255' name='rng'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78627a7e'>
+        <parameter type-id='c1547255'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b03c6e7d'>
+        <parameter type-id='c1547255'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f6af29b'>
+        <parameter type-id='c1547255'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='72fc7982'>
+        <parameter type-id='c1547255'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/char/mem.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__14' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='737' column='1' id='d1afa500'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29710' visibility='default' filepath='include/linux/fs.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb93a' visibility='default' filepath='include/linux/fs.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_dir_seq' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='742' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='pseudo_fs_context' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/pseudo_fs.h' line='6' column='1' id='01ded187'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='f7c6dcac' visibility='default' filepath='include/linux/pseudo_fs.h' line='7' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='xattr' type-id='cb49d4b8' visibility='default' filepath='include/linux/pseudo_fs.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dops' type-id='1ee57353' visibility='default' filepath='include/linux/pseudo_fs.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='magic' type-id='7359adad' visibility='default' filepath='include/linux/pseudo_fs.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='01ded187' size-in-bits='64' id='79f85ebf'/>
+      <function-decl name='alloc_anon_inode' mangled-name='alloc_anon_inode' filepath='include/linux/fs.h' line='3414' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_anon_inode'>
+        <parameter type-id='42c8f564'/>
+        <return type-id='7e666abe'/>
+      </function-decl>
+      <function-decl name='device_create' mangled-name='device_create' filepath='include/linux/device.h' line='1653' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_create'>
+        <parameter type-id='67aca04f'/>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='init_pseudo' mangled-name='init_pseudo' filepath='include/linux/pseudo_fs.h' line='13' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='init_pseudo'>
+        <parameter type-id='5760dcb1'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='79f85ebf'/>
+      </function-decl>
+      <pointer-type-def type-id='22f86352' size-in-bits='64' id='3e6eb93a'/>
+      <pointer-type-def type-id='8d0295a3' size-in-bits='64' id='5760dcb1'/>
+      <class-decl name='fs_context' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/fs_context.h' line='86' column='1' id='8d0295a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='7536fa28' visibility='default' filepath='include/linux/fs_context.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='uapi_mutex' type-id='925167dc' visibility='default' filepath='include/linux/fs_context.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fs_type' type-id='21e53d44' visibility='default' filepath='include/linux/fs_context.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fs_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs_context.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sget_key' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs_context.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='root' type-id='27675065' visibility='default' filepath='include/linux/fs_context.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='user_ns' type-id='c0ced321' visibility='default' filepath='include/linux/fs_context.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='net_ns' type-id='a2bff676' visibility='default' filepath='include/linux/fs_context.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='cred' type-id='bc33861a' visibility='default' filepath='include/linux/fs_context.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='log' type-id='d1a78aeb' visibility='default' filepath='include/linux/fs_context.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='source' type-id='80f4b756' visibility='default' filepath='include/linux/fs_context.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs_context.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='s_fs_info' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs_context.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='sb_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs_context.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='sb_flags_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/fs_context.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='s_iflags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs_context.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='lsm_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs_context.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='purpose' type-id='4171a6be' visibility='default' filepath='include/linux/fs_context.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='phase' type-id='de54989f' visibility='default' filepath='include/linux/fs_context.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='need_free' type-id='b50a4934' visibility='default' filepath='include/linux/fs_context.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='global' type-id='b50a4934' visibility='default' filepath='include/linux/fs_context.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4b1c1612' size-in-bits='64' id='7536fa28'/>
+      <enum-decl name='fs_context_phase' filepath='include/linux/fs_context.h' line='38' column='1' id='de54989f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='FS_CONTEXT_CREATE_PARAMS' value='0'/>
+        <enumerator name='FS_CONTEXT_CREATING' value='1'/>
+        <enumerator name='FS_CONTEXT_AWAITING_MOUNT' value='2'/>
+        <enumerator name='FS_CONTEXT_AWAITING_RECONF' value='3'/>
+        <enumerator name='FS_CONTEXT_RECONF_PARAMS' value='4'/>
+        <enumerator name='FS_CONTEXT_RECONFIGURING' value='5'/>
+        <enumerator name='FS_CONTEXT_FAILED' value='6'/>
+      </enum-decl>
+      <enum-decl name='fs_context_purpose' filepath='include/linux/fs_context.h' line='29' column='1' id='4171a6be'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='FS_CONTEXT_FOR_MOUNT' value='0'/>
+        <enumerator name='FS_CONTEXT_FOR_SUBMOUNT' value='1'/>
+        <enumerator name='FS_CONTEXT_FOR_RECONFIGURE' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='fb4c7dfb' size-in-bits='64' id='d1a78aeb'/>
+      <qualified-type-def type-id='d2bd1e05' const='yes' id='4b1c1612'/>
+      <class-decl name='fc_log' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/fs_context.h' line='176' column='1' id='fb4c7dfb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='include/linux/fs_context.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='head' type-id='f9b06939' visibility='default' filepath='include/linux/fs_context.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='tail' type-id='f9b06939' visibility='default' filepath='include/linux/fs_context.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='need_free' type-id='f9b06939' visibility='default' filepath='include/linux/fs_context.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/linux/fs_context.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buffer' type-id='460b55b1' visibility='default' filepath='include/linux/fs_context.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='26a90f95' size-in-bits='512' id='460b55b1'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='fs_context_operations' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/fs_context.h' line='110' column='1' id='d2bd1e05'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='free' type-id='18811e61' visibility='default' filepath='include/linux/fs_context.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dup' type-id='0177caaf' visibility='default' filepath='include/linux/fs_context.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parse_param' type-id='7af12c47' visibility='default' filepath='include/linux/fs_context.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parse_monolithic' type-id='33c348f4' visibility='default' filepath='include/linux/fs_context.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_tree' type-id='57f0383a' visibility='default' filepath='include/linux/fs_context.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reconfigure' type-id='57f0383a' visibility='default' filepath='include/linux/fs_context.h' line='116' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='135a5d4b' size-in-bits='64' id='0177caaf'/>
+      <pointer-type-def type-id='c44bfbeb' size-in-bits='64' id='7af12c47'/>
+      <pointer-type-def type-id='91015ee2' size-in-bits='64' id='33c348f4'/>
+      <pointer-type-def type-id='41f25325' size-in-bits='64' id='18811e61'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/clk/clk-bulk.c' language='LANG_C89'>
+      <function-decl name='clk_bulk_get' mangled-name='clk_bulk_get' filepath='drivers/clk/clk-bulk.c' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_bulk_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-bulk.c' line='114' column='1'/>
+        <parameter type-id='95e97e5e' name='num_clks' filepath='drivers/clk/clk-bulk.c' line='114' column='1'/>
+        <parameter type-id='2942e355' name='clks' filepath='drivers/clk/clk-bulk.c' line='115' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='158c8c35' size-in-bits='64' id='2942e355'/>
+      <class-decl name='clk_bulk_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/clk.h' line='87' column='1' id='158c8c35'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='80f4b756' visibility='default' filepath='include/linux/clk.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='include/linux/clk.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/clk/clk-devres.c' language='LANG_C89'>
+      <function-decl name='devm_clk_bulk_get_optional' mangled-name='devm_clk_bulk_get_optional' filepath='drivers/clk/clk-devres.c' line='88' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_clk_bulk_get_optional'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-devres.c' line='88' column='1'/>
+        <parameter type-id='95e97e5e' name='num_clks' filepath='drivers/clk/clk-devres.c' line='88' column='1'/>
+        <parameter type-id='2942e355' name='clks' filepath='drivers/clk/clk-devres.c' line='89' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_clk_bulk_get_all' mangled-name='devm_clk_bulk_get_all' filepath='drivers/clk/clk-devres.c' line='95' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_clk_bulk_get_all'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-devres.c' line='95' column='1'/>
+        <parameter type-id='734c20ed' name='clks' filepath='drivers/clk/clk-devres.c' line='96' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_clk_put' mangled-name='devm_clk_put' filepath='drivers/clk/clk-devres.c' line='129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_clk_put'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-devres.c' line='129' column='1'/>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk-devres.c' line='129' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_get_clk_from_child' mangled-name='devm_get_clk_from_child' filepath='drivers/clk/clk-devres.c' line='139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_get_clk_from_child'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-devres.c' line='139' column='1'/>
+        <parameter type-id='9a537bbf' name='np' filepath='drivers/clk/clk-devres.c' line='140' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/clk/clk-devres.c' line='140' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='of_clk_get_by_name' mangled-name='of_clk_get_by_name' filepath='include/linux/clk.h' line='967' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_get_by_name'>
+        <parameter type-id='9a537bbf'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <pointer-type-def type-id='2942e355' size-in-bits='64' id='734c20ed'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/clk/clk-divider.c' language='LANG_C89'>
+      <class-decl name='device' is-struct='yes' visibility='default' is-declaration-only='yes' id='66e487ec'/>
+      <class-decl name='clk_div_table' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='415' column='1' id='32858f34'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='f0981eeb' visibility='default' filepath='include/linux/clk-provider.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='div' type-id='f0981eeb' visibility='default' filepath='include/linux/clk-provider.h' line='417' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='32858f34' const='yes' id='bb21a21f'/>
+      <pointer-type-def type-id='bb21a21f' size-in-bits='64' id='caf2596f'/>
+      <pointer-type-def type-id='66e487ec' size-in-bits='64' id='fa0b179c'/>
+      <function-decl name='divider_recalc_rate' mangled-name='divider_recalc_rate' filepath='drivers/clk/clk-divider.c' line='129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='divider_recalc_rate'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk-divider.c' line='129' column='1'/>
+        <parameter type-id='7359adad' name='parent_rate' filepath='drivers/clk/clk-divider.c' line='129' column='1'/>
+        <parameter type-id='f0981eeb' name='val' filepath='drivers/clk/clk-divider.c' line='130' column='1'/>
+        <parameter type-id='caf2596f' name='table' filepath='drivers/clk/clk-divider.c' line='131' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-divider.c' line='132' column='1'/>
+        <parameter type-id='7359adad' name='width' filepath='drivers/clk/clk-divider.c' line='132' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='divider_round_rate_parent' mangled-name='divider_round_rate_parent' filepath='drivers/clk/clk-divider.c' line='345' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='divider_round_rate_parent'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk-divider.c' line='345' column='1'/>
+        <parameter type-id='3aaeef89' name='parent' filepath='drivers/clk/clk-divider.c' line='345' column='1'/>
+        <parameter type-id='7359adad' name='rate' filepath='drivers/clk/clk-divider.c' line='346' column='1'/>
+        <parameter type-id='1d2c2b85' name='prate' filepath='drivers/clk/clk-divider.c' line='346' column='1'/>
+        <parameter type-id='caf2596f' name='table' filepath='drivers/clk/clk-divider.c' line='347' column='1'/>
+        <parameter type-id='f9b06939' name='width' filepath='drivers/clk/clk-divider.c' line='348' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-divider.c' line='348' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='divider_ro_round_rate_parent' mangled-name='divider_ro_round_rate_parent' filepath='drivers/clk/clk-divider.c' line='358' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='divider_ro_round_rate_parent'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk-divider.c' line='358' column='1'/>
+        <parameter type-id='3aaeef89' name='parent' filepath='drivers/clk/clk-divider.c' line='358' column='1'/>
+        <parameter type-id='7359adad' name='rate' filepath='drivers/clk/clk-divider.c' line='359' column='1'/>
+        <parameter type-id='1d2c2b85' name='prate' filepath='drivers/clk/clk-divider.c' line='359' column='1'/>
+        <parameter type-id='caf2596f' name='table' filepath='drivers/clk/clk-divider.c' line='360' column='1'/>
+        <parameter type-id='f9b06939' name='width' filepath='drivers/clk/clk-divider.c' line='360' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-divider.c' line='361' column='1'/>
+        <parameter type-id='f0981eeb' name='val' filepath='drivers/clk/clk-divider.c' line='361' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='divider_get_val' mangled-name='divider_get_val' filepath='drivers/clk/clk-divider.c' line='401' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='divider_get_val'>
+        <parameter type-id='7359adad' name='rate' filepath='drivers/clk/clk-divider.c' line='401' column='1'/>
+        <parameter type-id='7359adad' name='parent_rate' filepath='drivers/clk/clk-divider.c' line='401' column='1'/>
+        <parameter type-id='caf2596f' name='table' filepath='drivers/clk/clk-divider.c' line='402' column='1'/>
+        <parameter type-id='f9b06939' name='width' filepath='drivers/clk/clk-divider.c' line='402' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-divider.c' line='403' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_hw_register_divider' mangled-name='clk_hw_register_divider' filepath='drivers/clk/clk-divider.c' line='557' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_register_divider'>
+        <parameter type-id='fa0b179c' name='dev' filepath='drivers/clk/clk-divider.c' line='557' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/clk/clk-divider.c' line='557' column='1'/>
+        <parameter type-id='80f4b756' name='parent_name' filepath='drivers/clk/clk-divider.c' line='558' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-divider.c' line='558' column='1'/>
+        <parameter type-id='eaa32e2f' name='reg' filepath='drivers/clk/clk-divider.c' line='559' column='1'/>
+        <parameter type-id='f9b06939' name='shift' filepath='drivers/clk/clk-divider.c' line='559' column='1'/>
+        <parameter type-id='f9b06939' name='width' filepath='drivers/clk/clk-divider.c' line='559' column='1'/>
+        <parameter type-id='f9b06939' name='clk_divider_flags' filepath='drivers/clk/clk-divider.c' line='560' column='1'/>
+        <parameter type-id='cff2d845' name='lock' filepath='drivers/clk/clk-divider.c' line='560' column='1'/>
+        <return type-id='3aaeef89'/>
+      </function-decl>
+      <function-decl name='clk_hw_unregister_divider' mangled-name='clk_hw_unregister_divider' filepath='drivers/clk/clk-divider.c' line='642' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_unregister_divider'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk-divider.c' line='642' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/clk/clk-fixed-factor.c' language='LANG_C89'>
+      <var-decl name='clk_fixed_factor_ops' type-id='92072f8b' mangled-name='clk_fixed_factor_ops' visibility='default' filepath='drivers/clk/clk-fixed-factor.c' line='60' column='1' elf-symbol-id='clk_fixed_factor_ops'/>
+      <function-decl name='clk_hw_register_fixed_factor' mangled-name='clk_hw_register_fixed_factor' filepath='drivers/clk/clk-fixed-factor.c' line='109' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_register_fixed_factor'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-fixed-factor.c' line='109' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/clk/clk-fixed-factor.c' line='110' column='1'/>
+        <parameter type-id='80f4b756' name='parent_name' filepath='drivers/clk/clk-fixed-factor.c' line='110' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-fixed-factor.c' line='110' column='1'/>
+        <parameter type-id='f0981eeb' name='mult' filepath='drivers/clk/clk-fixed-factor.c' line='111' column='1'/>
+        <parameter type-id='f0981eeb' name='div' filepath='drivers/clk/clk-fixed-factor.c' line='111' column='1'/>
+        <return type-id='3aaeef89'/>
+      </function-decl>
+      <function-decl name='clk_register_fixed_factor' mangled-name='clk_register_fixed_factor' filepath='drivers/clk/clk-fixed-factor.c' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_register_fixed_factor'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-fixed-factor.c' line='118' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/clk/clk-fixed-factor.c' line='118' column='1'/>
+        <parameter type-id='80f4b756' name='parent_name' filepath='drivers/clk/clk-fixed-factor.c' line='119' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-fixed-factor.c' line='119' column='1'/>
+        <parameter type-id='f0981eeb' name='mult' filepath='drivers/clk/clk-fixed-factor.c' line='120' column='1'/>
+        <parameter type-id='f0981eeb' name='div' filepath='drivers/clk/clk-fixed-factor.c' line='120' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='clk_hw_unregister_fixed_factor' mangled-name='clk_hw_unregister_fixed_factor' filepath='drivers/clk/clk-fixed-factor.c' line='145' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_unregister_fixed_factor'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk-fixed-factor.c' line='145' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/clk/clk-fixed-rate.c' language='LANG_C89'>
+      <var-decl name='clk_fixed_rate_ops' type-id='92072f8b' mangled-name='clk_fixed_rate_ops' visibility='default' filepath='drivers/clk/clk-fixed-rate.c' line='39' column='1' elf-symbol-id='clk_fixed_rate_ops'/>
+      <function-decl name='clk_register_fixed_rate' mangled-name='clk_register_fixed_rate' filepath='drivers/clk/clk-fixed-rate.c' line='124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_register_fixed_rate'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-fixed-rate.c' line='124' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/clk/clk-fixed-rate.c' line='124' column='1'/>
+        <parameter type-id='80f4b756' name='parent_name' filepath='drivers/clk/clk-fixed-rate.c' line='125' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-fixed-rate.c' line='125' column='1'/>
+        <parameter type-id='7359adad' name='fixed_rate' filepath='drivers/clk/clk-fixed-rate.c' line='126' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/clk/clk-gate.c' language='LANG_C89'>
+      <function-decl name='clk_hw_register_gate' mangled-name='clk_hw_register_gate' filepath='drivers/clk/clk-gate.c' line='137' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_register_gate'>
+        <parameter type-id='fa0b179c' name='dev' filepath='drivers/clk/clk-gate.c' line='137' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/clk/clk-gate.c' line='137' column='1'/>
+        <parameter type-id='80f4b756' name='parent_name' filepath='drivers/clk/clk-gate.c' line='138' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-gate.c' line='138' column='1'/>
+        <parameter type-id='eaa32e2f' name='reg' filepath='drivers/clk/clk-gate.c' line='139' column='1'/>
+        <parameter type-id='f9b06939' name='bit_idx' filepath='drivers/clk/clk-gate.c' line='139' column='1'/>
+        <parameter type-id='f9b06939' name='clk_gate_flags' filepath='drivers/clk/clk-gate.c' line='140' column='1'/>
+        <parameter type-id='cff2d845' name='lock' filepath='drivers/clk/clk-gate.c' line='140' column='1'/>
+        <return type-id='3aaeef89'/>
+      </function-decl>
+      <function-decl name='clk_register_gate' mangled-name='clk_register_gate' filepath='drivers/clk/clk-gate.c' line='183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_register_gate'>
+        <parameter type-id='fa0b179c' name='dev' filepath='drivers/clk/clk-gate.c' line='183' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/clk/clk-gate.c' line='183' column='1'/>
+        <parameter type-id='80f4b756' name='parent_name' filepath='drivers/clk/clk-gate.c' line='184' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-gate.c' line='184' column='1'/>
+        <parameter type-id='eaa32e2f' name='reg' filepath='drivers/clk/clk-gate.c' line='185' column='1'/>
+        <parameter type-id='f9b06939' name='bit_idx' filepath='drivers/clk/clk-gate.c' line='185' column='1'/>
+        <parameter type-id='f9b06939' name='clk_gate_flags' filepath='drivers/clk/clk-gate.c' line='186' column='1'/>
+        <parameter type-id='cff2d845' name='lock' filepath='drivers/clk/clk-gate.c' line='186' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='clk_hw_unregister_gate' mangled-name='clk_hw_unregister_gate' filepath='drivers/clk/clk-gate.c' line='214' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_unregister_gate'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk-gate.c' line='214' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/clk/clk-mux.c' language='LANG_C89'>
+      <function-decl name='clk_hw_register_mux' mangled-name='clk_hw_register_mux' filepath='drivers/clk/clk-mux.c' line='233' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_register_mux'>
+        <parameter type-id='fa0b179c' name='dev' filepath='drivers/clk/clk-mux.c' line='233' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/clk/clk-mux.c' line='233' column='1'/>
+        <parameter type-id='13956559' name='parent_names' filepath='drivers/clk/clk-mux.c' line='234' column='1'/>
+        <parameter type-id='f9b06939' name='num_parents' filepath='drivers/clk/clk-mux.c' line='234' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-mux.c' line='235' column='1'/>
+        <parameter type-id='eaa32e2f' name='reg' filepath='drivers/clk/clk-mux.c' line='236' column='1'/>
+        <parameter type-id='f9b06939' name='shift' filepath='drivers/clk/clk-mux.c' line='236' column='1'/>
+        <parameter type-id='f9b06939' name='width' filepath='drivers/clk/clk-mux.c' line='236' column='1'/>
+        <parameter type-id='f9b06939' name='clk_mux_flags' filepath='drivers/clk/clk-mux.c' line='237' column='1'/>
+        <parameter type-id='cff2d845' name='lock' filepath='drivers/clk/clk-mux.c' line='237' column='1'/>
+        <return type-id='3aaeef89'/>
+      </function-decl>
+      <function-decl name='clk_hw_unregister_mux' mangled-name='clk_hw_unregister_mux' filepath='drivers/clk/clk-mux.c' line='263' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_unregister_mux'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk-mux.c' line='263' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/clk/clk-scpi.c' language='LANG_C89'>
+      <class-decl name='clk_core' size-in-bits='1984' is-struct='yes' visibility='default' filepath='drivers/clk/clk.c' line='56' column='1' id='636cc9ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/clk/clk.c' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='824ffa73' visibility='default' filepath='drivers/clk/clk.c' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hw' type-id='3aaeef89' visibility='default' filepath='drivers/clk/clk.c' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='drivers/clk/clk.c' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/clk/clk.c' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='drivers/clk/clk.c' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='parent' type-id='ba21e62b' visibility='default' filepath='drivers/clk/clk.c' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parents' type-id='338d484d' visibility='default' filepath='drivers/clk/clk.c' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='num_parents' type-id='f9b06939' visibility='default' filepath='drivers/clk/clk.c' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='520'>
+          <var-decl name='new_parent_index' type-id='f9b06939' visibility='default' filepath='drivers/clk/clk.c' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='req_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='new_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='new_parent' type-id='ba21e62b' visibility='default' filepath='drivers/clk/clk.c' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='new_child' type-id='ba21e62b' visibility='default' filepath='drivers/clk/clk.c' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='orphan' type-id='b50a4934' visibility='default' filepath='drivers/clk/clk.c' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='968'>
+          <var-decl name='rpm_enabled' type-id='b50a4934' visibility='default' filepath='drivers/clk/clk.c' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='need_sync' type-id='b50a4934' visibility='default' filepath='drivers/clk/clk.c' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='984'>
+          <var-decl name='boot_enabled' type-id='b50a4934' visibility='default' filepath='drivers/clk/clk.c' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='enable_count' type-id='f0981eeb' visibility='default' filepath='drivers/clk/clk.c' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='prepare_count' type-id='f0981eeb' visibility='default' filepath='drivers/clk/clk.c' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='protect_count' type-id='f0981eeb' visibility='default' filepath='drivers/clk/clk.c' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='min_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='max_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='accuracy' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='phase' type-id='95e97e5e' visibility='default' filepath='drivers/clk/clk.c' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='duty' type-id='4f935e80' visibility='default' filepath='drivers/clk/clk.c' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='children' type-id='e151255a' visibility='default' filepath='drivers/clk/clk.c' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='child_node' type-id='03a4a074' visibility='default' filepath='drivers/clk/clk.c' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='clks' type-id='e151255a' visibility='default' filepath='drivers/clk/clk.c' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='notifier_count' type-id='f0981eeb' visibility='default' filepath='drivers/clk/clk.c' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='dentry' type-id='27675065' visibility='default' filepath='drivers/clk/clk.c' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='debug_node' type-id='03a4a074' visibility='default' filepath='drivers/clk/clk.c' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='drivers/clk/clk.c' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dentry' is-struct='yes' visibility='default' is-declaration-only='yes' id='d6ebca76'/>
+      <class-decl name='clk_hw' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='319' column='1' id='cf8d7d81'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='core' type-id='ba21e62b' visibility='default' filepath='include/linux/clk-provider.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='include/linux/clk-provider.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='b6a95a02' visibility='default' filepath='include/linux/clk-provider.h' line='322' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clk_init_data' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='292' column='1' id='065eee5b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/clk-provider.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='824ffa73' visibility='default' filepath='include/linux/clk-provider.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parent_names' type-id='13956559' visibility='default' filepath='include/linux/clk-provider.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parent_data' type-id='4cdbecf4' visibility='default' filepath='include/linux/clk-provider.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parent_hws' type-id='ca0dae6c' visibility='default' filepath='include/linux/clk-provider.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_parents' type-id='f9b06939' visibility='default' filepath='include/linux/clk-provider.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/clk-provider.h' line='300' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clk_ops' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='222' column='1' id='512851e8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unprepare' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='is_prepared' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unprepare_unused' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='enable' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='disable' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='is_enabled' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='disable_unused' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='save_context' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='restore_context' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='recalc_rate' type-id='93097cd2' visibility='default' filepath='include/linux/clk-provider.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='round_rate' type-id='1eac8fa1' visibility='default' filepath='include/linux/clk-provider.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='determine_rate' type-id='c2c32efe' visibility='default' filepath='include/linux/clk-provider.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_parent' type-id='a05e478f' visibility='default' filepath='include/linux/clk-provider.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='get_parent' type-id='38527a92' visibility='default' filepath='include/linux/clk-provider.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_rate' type-id='3d287e03' visibility='default' filepath='include/linux/clk-provider.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='set_rate_and_parent' type-id='d598c37f' visibility='default' filepath='include/linux/clk-provider.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='recalc_accuracy' type-id='93097cd2' visibility='default' filepath='include/linux/clk-provider.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='get_phase' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='set_phase' type-id='eeb35eda' visibility='default' filepath='include/linux/clk-provider.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='get_duty_cycle' type-id='3993d336' visibility='default' filepath='include/linux/clk-provider.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='set_duty_cycle' type-id='3993d336' visibility='default' filepath='include/linux/clk-provider.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='init' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='debug_init' type-id='c2d2a400' visibility='default' filepath='include/linux/clk-provider.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='pre_rate_change' type-id='3d287e03' visibility='default' filepath='include/linux/clk-provider.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='post_rate_change' type-id='3d287e03' visibility='default' filepath='include/linux/clk-provider.h' line='259' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clk_rate_request' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='56' column='1' id='e9bea70c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rate' type-id='7359adad' visibility='default' filepath='include/linux/clk-provider.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min_rate' type-id='7359adad' visibility='default' filepath='include/linux/clk-provider.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_rate' type-id='7359adad' visibility='default' filepath='include/linux/clk-provider.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='best_parent_rate' type-id='7359adad' visibility='default' filepath='include/linux/clk-provider.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='best_parent_hw' type-id='3aaeef89' visibility='default' filepath='include/linux/clk-provider.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clk_duty' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='70' column='1' id='4f935e80'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num' type-id='f0981eeb' visibility='default' filepath='include/linux/clk-provider.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='den' type-id='f0981eeb' visibility='default' filepath='include/linux/clk-provider.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clk_parent_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='271' column='1' id='bd5c3911'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hw' type-id='9e6d4b4e' visibility='default' filepath='include/linux/clk-provider.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fw_name' type-id='80f4b756' visibility='default' filepath='include/linux/clk-provider.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/clk-provider.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/linux/clk-provider.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='636cc9ab' size-in-bits='64' id='ba21e62b'/>
+      <pointer-type-def type-id='4f935e80' size-in-bits='64' id='f726dab6'/>
+      <pointer-type-def type-id='cf8d7d81' size-in-bits='64' id='3aaeef89'/>
+      <pointer-type-def type-id='e4cb80c8' size-in-bits='64' id='a5186342'/>
+      <pointer-type-def type-id='e9bea70c' size-in-bits='64' id='23a0ad0a'/>
+      <qualified-type-def type-id='cf8d7d81' const='yes' id='fdb55010'/>
+      <pointer-type-def type-id='fdb55010' size-in-bits='64' id='9e6d4b4e'/>
+      <pointer-type-def type-id='9e6d4b4e' size-in-bits='64' id='ca0dae6c'/>
+      <qualified-type-def type-id='065eee5b' const='yes' id='d7aa071c'/>
+      <pointer-type-def type-id='d7aa071c' size-in-bits='64' id='b6a95a02'/>
+      <qualified-type-def type-id='512851e8' const='yes' id='92072f8b'/>
+      <pointer-type-def type-id='92072f8b' size-in-bits='64' id='824ffa73'/>
+      <qualified-type-def type-id='bd5c3911' const='yes' id='dcc94796'/>
+      <pointer-type-def type-id='dcc94796' size-in-bits='64' id='4cdbecf4'/>
+      <pointer-type-def type-id='d6ebca76' size-in-bits='64' id='27675066'/>
+      <pointer-type-def type-id='f5a529af' size-in-bits='64' id='2d015d73'/>
+      <pointer-type-def type-id='73b85a24' size-in-bits='64' id='3993d336'/>
+      <pointer-type-def type-id='f867473c' size-in-bits='64' id='c2c32efe'/>
+      <pointer-type-def type-id='fc053d58' size-in-bits='64' id='eeb35eda'/>
+      <pointer-type-def type-id='8de1c3db' size-in-bits='64' id='a05e478f'/>
+      <pointer-type-def type-id='2e5f4f0f' size-in-bits='64' id='3d287e03'/>
+      <pointer-type-def type-id='59f7b4bb' size-in-bits='64' id='d598c37f'/>
+      <pointer-type-def type-id='7fb4efa5' size-in-bits='64' id='1eac8fa1'/>
+      <pointer-type-def type-id='d49e6088' size-in-bits='64' id='38527a92'/>
+      <pointer-type-def type-id='0a38a8f0' size-in-bits='64' id='93097cd2'/>
+      <pointer-type-def type-id='30913582' size-in-bits='64' id='0112fb3c'/>
+      <pointer-type-def type-id='7c1f247e' size-in-bits='64' id='c2d2a400'/>
+      <function-decl name='of_property_read_string_helper' mangled-name='of_property_read_string_helper' filepath='include/linux/of.h' line='340' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_read_string_helper'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7d3cd834'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_clk_hw_register' mangled-name='devm_clk_hw_register' filepath='include/linux/clk-provider.h' line='811' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_clk_hw_register'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='3aaeef89'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_hw_set_rate_range' mangled-name='clk_hw_set_rate_range' filepath='include/linux/clk-provider.h' line='858' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_set_rate_range'>
+        <parameter type-id='3aaeef89'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_clk_add_hw_provider' mangled-name='of_clk_add_hw_provider' filepath='include/linux/clk-provider.h' line='1048' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_add_hw_provider'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='a5186342'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_clk_del_provider' mangled-name='of_clk_del_provider' filepath='include/linux/clk-provider.h' line='1056' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_del_provider'>
+        <parameter type-id='9a537bbe'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='e4cb80c8'>
+        <parameter type-id='51a94113'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='3aaeef89'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f5a529af'>
+        <parameter type-id='3aaeef89'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='73b85a24'>
+        <parameter type-id='3aaeef89'/>
+        <parameter type-id='f726dab6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f867473c'>
+        <parameter type-id='3aaeef89'/>
+        <parameter type-id='23a0ad0a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fc053d58'>
+        <parameter type-id='3aaeef89'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8de1c3db'>
+        <parameter type-id='3aaeef89'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2e5f4f0f'>
+        <parameter type-id='3aaeef89'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='59f7b4bb'>
+        <parameter type-id='3aaeef89'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7fb4efa5'>
+        <parameter type-id='3aaeef89'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d49e6088'>
+        <parameter type-id='3aaeef89'/>
+        <return type-id='f9b06939'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0a38a8f0'>
+        <parameter type-id='3aaeef89'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='30913582'>
+        <parameter type-id='3aaeef89'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7c1f247e'>
+        <parameter type-id='3aaeef89'/>
+        <parameter type-id='27675066'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/clk/clk.c' language='LANG_C89'>
+      <class-decl name='clk_parent_map' size-in-bits='320' is-struct='yes' visibility='default' filepath='drivers/clk/clk.c' line='48' column='1' id='710f82fd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hw' type-id='9e6d4b4e' visibility='default' filepath='drivers/clk/clk.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='core' type-id='ba21e62b' visibility='default' filepath='drivers/clk/clk.c' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fw_name' type-id='80f4b756' visibility='default' filepath='drivers/clk/clk.c' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/clk/clk.c' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='drivers/clk/clk.c' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='710f82fd' size-in-bits='64' id='338d484d'/>
+      <qualified-type-def type-id='830e3b1b' const='yes' id='75144de8'/>
+      <pointer-type-def type-id='75144de8' size-in-bits='64' id='10f66866'/>
+      <function-decl name='__clk_get_name' mangled-name='__clk_get_name' filepath='drivers/clk/clk.c' line='266' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__clk_get_name'>
+        <parameter type-id='10f66866' name='clk' filepath='drivers/clk/clk.c' line='266' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='clk_hw_get_name' mangled-name='clk_hw_get_name' filepath='drivers/clk/clk.c' line='272' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_get_name'>
+        <parameter type-id='9e6d4b4e' name='hw' filepath='drivers/clk/clk.c' line='272' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='__clk_get_hw' mangled-name='__clk_get_hw' filepath='drivers/clk/clk.c' line='278' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__clk_get_hw'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk.c' line='278' column='1'/>
+        <return type-id='3aaeef89'/>
+      </function-decl>
+      <function-decl name='clk_hw_get_num_parents' mangled-name='clk_hw_get_num_parents' filepath='drivers/clk/clk.c' line='284' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_get_num_parents'>
+        <parameter type-id='9e6d4b4e' name='hw' filepath='drivers/clk/clk.c' line='284' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='clk_hw_get_parent' mangled-name='clk_hw_get_parent' filepath='drivers/clk/clk.c' line='290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_get_parent'>
+        <parameter type-id='9e6d4b4e' name='hw' filepath='drivers/clk/clk.c' line='290' column='1'/>
+        <return type-id='3aaeef89'/>
+      </function-decl>
+      <function-decl name='clk_hw_get_parent_by_index' mangled-name='clk_hw_get_parent_by_index' filepath='drivers/clk/clk.c' line='460' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_get_parent_by_index'>
+        <parameter type-id='9e6d4b4e' name='hw' filepath='drivers/clk/clk.c' line='460' column='1'/>
+        <parameter type-id='f0981eeb' name='index' filepath='drivers/clk/clk.c' line='460' column='1'/>
+        <return type-id='3aaeef89'/>
+      </function-decl>
+      <function-decl name='clk_hw_get_rate' mangled-name='clk_hw_get_rate' filepath='drivers/clk/clk.c' line='491' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_get_rate'>
+        <parameter type-id='9e6d4b4e' name='hw' filepath='drivers/clk/clk.c' line='491' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='clk_hw_get_flags' mangled-name='clk_hw_get_flags' filepath='drivers/clk/clk.c' line='511' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_get_flags'>
+        <parameter type-id='9e6d4b4e' name='hw' filepath='drivers/clk/clk.c' line='511' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='clk_hw_is_prepared' mangled-name='clk_hw_is_prepared' filepath='drivers/clk/clk.c' line='517' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_is_prepared'>
+        <parameter type-id='9e6d4b4e' name='hw' filepath='drivers/clk/clk.c' line='517' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='clk_hw_is_enabled' mangled-name='clk_hw_is_enabled' filepath='drivers/clk/clk.c' line='529' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_is_enabled'>
+        <parameter type-id='9e6d4b4e' name='hw' filepath='drivers/clk/clk.c' line='529' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='__clk_is_enabled' mangled-name='__clk_is_enabled' filepath='drivers/clk/clk.c' line='535' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__clk_is_enabled'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk.c' line='535' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='__clk_determine_rate' mangled-name='__clk_determine_rate' filepath='drivers/clk/clk.c' line='1434' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__clk_determine_rate'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk.c' line='1434' column='1'/>
+        <parameter type-id='23a0ad0a' name='req' filepath='drivers/clk/clk.c' line='1434' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__clk_mux_determine_rate' mangled-name='__clk_mux_determine_rate' filepath='drivers/clk/clk.c' line='661' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__clk_mux_determine_rate'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk.c' line='661' column='1'/>
+        <parameter type-id='23a0ad0a' name='req' filepath='drivers/clk/clk.c' line='662' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__clk_mux_determine_rate_closest' mangled-name='__clk_mux_determine_rate_closest' filepath='drivers/clk/clk.c' line='668' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__clk_mux_determine_rate_closest'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk.c' line='668' column='1'/>
+        <parameter type-id='23a0ad0a' name='req' filepath='drivers/clk/clk.c' line='669' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_sync_state' mangled-name='clk_sync_state' filepath='drivers/clk/clk.c' line='1333' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_sync_state'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk.c' line='1333' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='clk_hw_round_rate' mangled-name='clk_hw_round_rate' filepath='drivers/clk/clk.c' line='1445' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_round_rate'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk.c' line='1445' column='1'/>
+        <parameter type-id='7359adad' name='rate' filepath='drivers/clk/clk.c' line='1445' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='clk_round_rate' mangled-name='clk_round_rate' filepath='drivers/clk/clk.c' line='1470' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_round_rate'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk.c' line='1470' column='1'/>
+        <parameter type-id='7359adad' name='rate' filepath='drivers/clk/clk.c' line='1470' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='clk_get_parent' mangled-name='clk_get_parent' filepath='drivers/clk/clk.c' line='2463' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_get_parent'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk.c' line='2463' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='clk_register' mangled-name='clk_register' filepath='drivers/clk/clk.c' line='3861' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk.c' line='3861' column='1'/>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk.c' line='3861' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='clk_hw_register' mangled-name='clk_hw_register' filepath='drivers/clk/clk.c' line='3877' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk.c' line='3877' column='1'/>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk.c' line='3877' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_clk_hw_register' mangled-name='of_clk_hw_register' filepath='drivers/clk/clk.c' line='3895' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_hw_register'>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/clk/clk.c' line='3895' column='1'/>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk.c' line='3895' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_unregister' mangled-name='clk_unregister' filepath='drivers/clk/clk.c' line='3980' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_unregister'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk.c' line='3980' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='clk_hw_unregister' mangled-name='clk_hw_unregister' filepath='drivers/clk/clk.c' line='4037' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_unregister'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk.c' line='4037' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='clk_notifier_register' mangled-name='clk_notifier_register' filepath='drivers/clk/clk.c' line='4223' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_notifier_register'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk.c' line='4223' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/clk/clk.c' line='4223' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_clk_src_simple_get' mangled-name='of_clk_src_simple_get' filepath='drivers/clk/clk.c' line='4340' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_src_simple_get'>
+        <parameter type-id='51a94113' name='clkspec' filepath='drivers/clk/clk.c' line='4340' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/clk/clk.c' line='4341' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='of_clk_hw_simple_get' mangled-name='of_clk_hw_simple_get' filepath='drivers/clk/clk.c' line='4347' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_hw_simple_get'>
+        <parameter type-id='51a94113' name='clkspec' filepath='drivers/clk/clk.c' line='4347' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/clk/clk.c' line='4347' column='1'/>
+        <return type-id='3aaeef89'/>
+      </function-decl>
+      <function-decl name='of_clk_src_onecell_get' mangled-name='of_clk_src_onecell_get' filepath='drivers/clk/clk.c' line='4353' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_src_onecell_get'>
+        <parameter type-id='51a94113' name='clkspec' filepath='drivers/clk/clk.c' line='4353' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/clk/clk.c' line='4353' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='of_clk_hw_onecell_get' mangled-name='of_clk_hw_onecell_get' filepath='drivers/clk/clk.c' line='4368' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_hw_onecell_get'>
+        <parameter type-id='51a94113' name='clkspec' filepath='drivers/clk/clk.c' line='4368' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/clk/clk.c' line='4368' column='1'/>
+        <return type-id='3aaeef89'/>
+      </function-decl>
+      <function-decl name='of_clk_get_from_provider' mangled-name='of_clk_get_from_provider' filepath='drivers/clk/clk.c' line='4688' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_get_from_provider'>
+        <parameter type-id='51a94113' name='clkspec' filepath='drivers/clk/clk.c' line='4688' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='of_clk_get_parent_name' mangled-name='of_clk_get_parent_name' filepath='drivers/clk/clk.c' line='4764' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_get_parent_name'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/clk/clk.c' line='4764' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/clk/clk.c' line='4764' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='of_prop_next_u32' mangled-name='of_prop_next_u32' filepath='include/linux/of.h' line='540' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_prop_next_u32'>
+        <parameter type-id='ddcd89c6'/>
+        <parameter type-id='5b2fd8e8'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='5b2fd8e8'/>
+      </function-decl>
+      <pointer-type-def type-id='20f5f452' size-in-bits='64' id='5b2fd8e8'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/clk/clkdev.c' language='LANG_C89'>
+      <function-decl name='clk_get_sys' mangled-name='clk_get_sys' filepath='drivers/clk/clkdev.c' line='94' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_get_sys'>
+        <parameter type-id='80f4b756' name='dev_id' filepath='drivers/clk/clkdev.c' line='94' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/clk/clkdev.c' line='94' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='clk_register_clkdev' mangled-name='clk_register_clkdev' filepath='drivers/clk/clkdev.c' line='341' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_register_clkdev'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clkdev.c' line='341' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/clk/clkdev.c' line='341' column='1'/>
+        <parameter type-id='80f4b756' name='dev_id' filepath='drivers/clk/clkdev.c' line='342' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/clk/hisilicon/clk-hi3660-stub.c' language='LANG_C89'>
+      <function-decl name='devm_of_clk_add_hw_provider' mangled-name='devm_of_clk_add_hw_provider' filepath='include/linux/clk-provider.h' line='1052' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_of_clk_add_hw_provider'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='a5186342'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mbox_client_txdone' mangled-name='mbox_client_txdone' filepath='include/linux/mailbox_client.h' line='45' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mbox_client_txdone'>
+        <parameter type-id='339c87e8'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='cbc88d4a' size-in-bits='64' id='339c87e8'/>
+      <class-decl name='mbox_chan' is-struct='yes' visibility='default' is-declaration-only='yes' id='cbc88d4a'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/clk/hisilicon/clk-hi6220-stub.c' language='LANG_C89'>
+      <class-decl name='mbox_chan' is-struct='yes' visibility='default' is-declaration-only='yes' id='cbc88d4a'/>
+      <class-decl name='mbox_client' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/mailbox_client.h' line='29' column='1' id='3bf7d5b1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/mailbox_client.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tx_block' type-id='b50a4934' visibility='default' filepath='include/linux/mailbox_client.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_tout' type-id='7359adad' visibility='default' filepath='include/linux/mailbox_client.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='knows_txdone' type-id='b50a4934' visibility='default' filepath='include/linux/mailbox_client.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_callback' type-id='f0cadde6' visibility='default' filepath='include/linux/mailbox_client.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_prepare' type-id='f0cadde6' visibility='default' filepath='include/linux/mailbox_client.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='tx_done' type-id='a16bb3cd' visibility='default' filepath='include/linux/mailbox_client.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='cbc88d4a' size-in-bits='64' id='339c87e8'/>
+      <pointer-type-def type-id='3bf7d5b1' size-in-bits='64' id='aeae13b9'/>
+      <pointer-type-def type-id='0410b02c' size-in-bits='64' id='f0cadde6'/>
+      <pointer-type-def type-id='3c5fffe9' size-in-bits='64' id='a16bb3cd'/>
+      <function-decl name='syscon_regmap_lookup_by_phandle' mangled-name='syscon_regmap_lookup_by_phandle' filepath='include/linux/mfd/syscon.h' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='syscon_regmap_lookup_by_phandle'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='29af9a72'/>
+      </function-decl>
+      <function-decl name='mbox_request_channel' mangled-name='mbox_request_channel' filepath='include/linux/mailbox_client.h' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mbox_request_channel'>
+        <parameter type-id='aeae13b9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='339c87e8'/>
+      </function-decl>
+      <function-decl name='devm_clk_register' mangled-name='devm_clk_register' filepath='include/linux/clk-provider.h' line='808' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_clk_register'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='3aaeef89'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='mbox_send_message' mangled-name='mbox_send_message' filepath='include/linux/mailbox_client.h' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mbox_send_message'>
+        <parameter type-id='339c87e8'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='0410b02c'>
+        <parameter type-id='aeae13b9'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3c5fffe9'>
+        <parameter type-id='aeae13b9'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='ddf1687a' size-in-bits='64' id='29af9a72'/>
+      <class-decl name='regmap' is-struct='yes' visibility='default' is-declaration-only='yes' id='ddf1687a'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/clk/hisilicon/crg-hi3516cv300.c' language='LANG_C89'>
+      <pointer-type-def type-id='824a7fd2' size-in-bits='64' id='f1c652ac'/>
+      <function-decl name='of_clk_add_provider' mangled-name='of_clk_add_provider' filepath='include/linux/clk-provider.h' line='1044' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_add_provider'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='f1c652ac'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='824a7fd2'>
+        <parameter type-id='51a94113'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='7d0bc0eb'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/clocksource/arm_arch_timer.c' language='LANG_C89'>
+      <class-decl name='arch_timer_erratum_workaround' size-in-bits='640' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='51' column='1' id='a3e4c395'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='match_type' type-id='2377364c' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='eaa32e2f' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='desc' type-id='80f4b756' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read_cntp_tval_el0' type-id='d91eb3a5' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read_cntv_tval_el0' type-id='d91eb3a5' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='read_cntpct_el0' type-id='0e70db3e' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read_cntvct_el0' type-id='0e70db3e' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_next_event_phys' type-id='1bff60d1' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_next_event_virt' type-id='1bff60d1' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='disable_compat_vdso' type-id='b50a4934' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='arch_timer_erratum_match_type' filepath='arch/arm64/include/asm/arch_timer.h' line='43' column='1' id='2377364c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ate_match_dt' value='0'/>
+        <enumerator name='ate_match_local_cap_id' value='1'/>
+        <enumerator name='ate_match_acpi_oem_info' value='2'/>
+      </enum-decl>
+      <qualified-type-def type-id='a3e4c395' const='yes' id='8bd3aaa6'/>
+      <pointer-type-def type-id='8bd3aaa6' size-in-bits='64' id='aa357a64'/>
+      <var-decl name='timer_unstable_counter_workaround' type-id='aa357a64' mangled-name='timer_unstable_counter_workaround' visibility='default' filepath='drivers/clocksource/arm_arch_timer.c' line='379' column='1' elf-symbol-id='timer_unstable_counter_workaround'/>
+      <pointer-type-def type-id='242d8ed5' size-in-bits='64' id='1bff60d1'/>
+      <pointer-type-def type-id='428b7011' size-in-bits='64' id='d91eb3a5'/>
+      <function-type size-in-bits='64' id='242d8ed5'>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='aff725d5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='428b7011'>
+        <return type-id='19c2251e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/clocksource/timer-sun4i.c' language='LANG_C89'>
+      <class-decl name='timer_of' size-in-bits='3584' is-struct='yes' visibility='default' filepath='drivers/clocksource/timer-of.h' line='34' column='1' id='ebdc8782'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='drivers/clocksource/timer-of.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='np' type-id='9a537bbe' visibility='default' filepath='drivers/clocksource/timer-of.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='clkevt' type-id='13964735' visibility='default' filepath='drivers/clocksource/timer-of.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='of_base' type-id='bd48ef82' visibility='default' filepath='drivers/clocksource/timer-of.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='of_irq' type-id='dbd50a93' visibility='default' filepath='drivers/clocksource/timer-of.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='of_clk' type-id='63c32039' visibility='default' filepath='drivers/clocksource/timer-of.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='drivers/clocksource/timer-of.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clock_event_device' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/clockchips.h' line='100' column='1' id='13964735'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event_handler' type-id='7106dab8' visibility='default' filepath='include/linux/clockchips.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_next_event' type-id='1bff60d1' visibility='default' filepath='include/linux/clockchips.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_next_ktime' type-id='a4477ecf' visibility='default' filepath='include/linux/clockchips.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next_event' type-id='fbc017ef' visibility='default' filepath='include/linux/clockchips.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='max_delta_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/clockchips.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='min_delta_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/clockchips.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mult' type-id='19c2251e' visibility='default' filepath='include/linux/clockchips.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='shift' type-id='19c2251e' visibility='default' filepath='include/linux/clockchips.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='state_use_accessors' type-id='3d8b7ef7' visibility='default' filepath='include/linux/clockchips.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='features' type-id='f0981eeb' visibility='default' filepath='include/linux/clockchips.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='retries' type-id='7359adad' visibility='default' filepath='include/linux/clockchips.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_state_periodic' type-id='d6a989c3' visibility='default' filepath='include/linux/clockchips.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_state_oneshot' type-id='d6a989c3' visibility='default' filepath='include/linux/clockchips.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set_state_oneshot_stopped' type-id='d6a989c3' visibility='default' filepath='include/linux/clockchips.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='set_state_shutdown' type-id='d6a989c3' visibility='default' filepath='include/linux/clockchips.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='tick_resume' type-id='d6a989c3' visibility='default' filepath='include/linux/clockchips.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='broadcast' type-id='5858ec15' visibility='default' filepath='include/linux/clockchips.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='suspend' type-id='7106dab8' visibility='default' filepath='include/linux/clockchips.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='resume' type-id='7106dab8' visibility='default' filepath='include/linux/clockchips.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='min_delta_ticks' type-id='7359adad' visibility='default' filepath='include/linux/clockchips.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='max_delta_ticks' type-id='7359adad' visibility='default' filepath='include/linux/clockchips.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/clockchips.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='rating' type-id='95e97e5e' visibility='default' filepath='include/linux/clockchips.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/clockchips.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='bound_on' type-id='95e97e5e' visibility='default' filepath='include/linux/clockchips.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='cpumask' type-id='5f8a1ac4' visibility='default' filepath='include/linux/clockchips.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/clockchips.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/linux/clockchips.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='clock_event_state' filepath='include/linux/clockchips.h' line='35' column='1' id='3d8b7ef7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='CLOCK_EVT_STATE_DETACHED' value='0'/>
+        <enumerator name='CLOCK_EVT_STATE_SHUTDOWN' value='1'/>
+        <enumerator name='CLOCK_EVT_STATE_PERIODIC' value='2'/>
+        <enumerator name='CLOCK_EVT_STATE_ONESHOT' value='3'/>
+        <enumerator name='CLOCK_EVT_STATE_ONESHOT_STOPPED' value='4'/>
+      </enum-decl>
+      <class-decl name='of_timer_base' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/clocksource/timer-of.h' line='20' column='1' id='bd48ef82'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='eaa32e2f' visibility='default' filepath='drivers/clocksource/timer-of.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/clocksource/timer-of.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='drivers/clocksource/timer-of.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='of_timer_irq' size-in-bits='320' is-struct='yes' visibility='default' filepath='drivers/clocksource/timer-of.h' line='11' column='1' id='dbd50a93'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='drivers/clocksource/timer-of.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='drivers/clocksource/timer-of.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='percpu' type-id='95e97e5e' visibility='default' filepath='drivers/clocksource/timer-of.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/clocksource/timer-of.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='drivers/clocksource/timer-of.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='handler' type-id='29591c9a' visibility='default' filepath='drivers/clocksource/timer-of.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='of_timer_clk' size-in-bits='320' is-struct='yes' visibility='default' filepath='drivers/clocksource/timer-of.h' line='26' column='1' id='63c32039'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='drivers/clocksource/timer-of.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/clocksource/timer-of.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='drivers/clocksource/timer-of.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rate' type-id='7359adad' visibility='default' filepath='drivers/clocksource/timer-of.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='period' type-id='7359adad' visibility='default' filepath='drivers/clocksource/timer-of.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='13964735' size-in-bits='64' id='aff725d5'/>
+      <pointer-type-def type-id='c740a74f' size-in-bits='64' id='d6a989c3'/>
+      <pointer-type-def type-id='632cd7c3' size-in-bits='64' id='a4477ecf'/>
+      <pointer-type-def type-id='242d8ed5' size-in-bits='64' id='1bff60d1'/>
+      <pointer-type-def type-id='ebdc8782' size-in-bits='64' id='b2168730'/>
+      <pointer-type-def type-id='64588176' size-in-bits='64' id='7106dab8'/>
+      <pointer-type-def type-id='075176f9' size-in-bits='64' id='5858ec15'/>
+      <function-decl name='timer_of_init' mangled-name='timer_of_init' filepath='drivers/clocksource/timer-of.h' line='69' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='timer_of_init'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='b2168730'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_machine_is_compatible' mangled-name='of_machine_is_compatible' filepath='include/linux/of.h' line='398' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_machine_is_compatible'>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clockevents_config_and_register' mangled-name='clockevents_config_and_register' filepath='include/linux/clockchips.h' line='186' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clockevents_config_and_register'>
+        <parameter type-id='aff725d5'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='c740a74f'>
+        <parameter type-id='aff725d5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='632cd7c3'>
+        <parameter type-id='fbc017ef'/>
+        <parameter type-id='aff725d5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='64588176'>
+        <parameter type-id='aff725d5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='075176f9'>
+        <parameter type-id='5f8a1ac4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <typedef-decl name='irq_handler_t' type-id='3fefe9b7' filepath='include/linux/interrupt.h' line='92' column='1' id='29591c9a'/>
+      <pointer-type-def type-id='19f1c953' size-in-bits='64' id='3fefe9b7'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/cpufreq/cpufreq.c' language='LANG_C89'>
+      <class-decl name='cpufreq_freqs' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='165' column='1' id='9906d117'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='policy' type-id='343c3ae4' visibility='default' filepath='include/linux/cpufreq.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='old' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='new' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/linux/cpufreq.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9906d117' size-in-bits='64' id='857d6f7f'/>
+      <function-decl name='cpufreq_generic_get' mangled-name='cpufreq_generic_get' filepath='drivers/cpufreq/cpufreq.c' line='197' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_generic_get'>
+        <parameter type-id='f0981eeb' name='cpu' filepath='drivers/cpufreq/cpufreq.c' line='197' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='cpufreq_cpu_put' mangled-name='cpufreq_cpu_put' filepath='drivers/cpufreq/cpufreq.c' line='250' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_cpu_put'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq.c' line='250' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpufreq_freq_transition_begin' mangled-name='cpufreq_freq_transition_begin' filepath='drivers/cpufreq/cpufreq.c' line='412' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_freq_transition_begin'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq.c' line='412' column='1'/>
+        <parameter type-id='857d6f7f' name='freqs' filepath='drivers/cpufreq/cpufreq.c' line='413' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpufreq_freq_transition_end' mangled-name='cpufreq_freq_transition_end' filepath='drivers/cpufreq/cpufreq.c' line='446' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_freq_transition_end'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq.c' line='446' column='1'/>
+        <parameter type-id='857d6f7f' name='freqs' filepath='drivers/cpufreq/cpufreq.c' line='447' column='1'/>
+        <parameter type-id='95e97e5e' name='transition_failed' filepath='drivers/cpufreq/cpufreq.c' line='447' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpufreq_table_index_unsorted' mangled-name='cpufreq_table_index_unsorted' filepath='include/linux/cpufreq.h' line='702' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_table_index_unsorted'>
+        <parameter type-id='343c3ae4'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpufreq_quick_get_max' mangled-name='cpufreq_quick_get_max' filepath='drivers/cpufreq/cpufreq.c' line='1740' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_quick_get_max'>
+        <parameter type-id='f0981eeb' name='cpu' filepath='drivers/cpufreq/cpufreq.c' line='1740' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='cpufreq_generic_suspend' mangled-name='cpufreq_generic_suspend' filepath='drivers/cpufreq/cpufreq.c' line='1797' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_generic_suspend'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq.c' line='1797' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__cpufreq_driver_target' mangled-name='__cpufreq_driver_target' filepath='drivers/cpufreq/cpufreq.c' line='2142' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cpufreq_driver_target'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq.c' line='2142' column='1'/>
+        <parameter type-id='f0981eeb' name='target_freq' filepath='drivers/cpufreq/cpufreq.c' line='2143' column='1'/>
+        <parameter type-id='f0981eeb' name='relation' filepath='drivers/cpufreq/cpufreq.c' line='2144' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpufreq_get_policy' mangled-name='cpufreq_get_policy' filepath='drivers/cpufreq/cpufreq.c' line='2371' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_get_policy'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq.c' line='2371' column='1'/>
+        <parameter type-id='f0981eeb' name='cpu' filepath='drivers/cpufreq/cpufreq.c' line='2371' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpufreq_update_policy' mangled-name='cpufreq_update_policy' filepath='drivers/cpufreq/cpufreq.c' line='2497' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_update_policy'>
+        <parameter type-id='f0981eeb' name='cpu' filepath='drivers/cpufreq/cpufreq.c' line='2497' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpufreq_enable_boost_support' mangled-name='cpufreq_enable_boost_support' filepath='drivers/cpufreq/cpufreq.c' line='2612' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_enable_boost_support'>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='dbcf5bbe' size-in-bits='64' id='343c3ae4'/>
+      <class-decl name='cpufreq_policy' size-in-bits='5696' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='51' column='1' id='dbcf5bbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpus' type-id='b16b461b' visibility='default' filepath='include/linux/cpufreq.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='related_cpus' type-id='b16b461b' visibility='default' filepath='include/linux/cpufreq.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='real_cpus' type-id='b16b461b' visibility='default' filepath='include/linux/cpufreq.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='shared_type' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='include/linux/cpufreq.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cpuinfo' type-id='861f63ae' visibility='default' filepath='include/linux/cpufreq.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='min' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='max' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='cur' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='restore_freq' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='suspend_freq' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='policy' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='last_policy' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='governor' type-id='6925355c' visibility='default' filepath='include/linux/cpufreq.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='governor_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/cpufreq.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='last_governor' type-id='ac1fa8c0' visibility='default' filepath='include/linux/cpufreq.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='update' type-id='ef9025d0' visibility='default' filepath='include/linux/cpufreq.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='constraints' type-id='7ca99f8c' visibility='default' filepath='include/linux/cpufreq.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='min_freq_req' type-id='3fdf7ca3' visibility='default' filepath='include/linux/cpufreq.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='max_freq_req' type-id='3fdf7ca3' visibility='default' filepath='include/linux/cpufreq.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='freq_table' type-id='3b8b42e1' visibility='default' filepath='include/linux/cpufreq.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='freq_table_sorted' type-id='e29b2d58' visibility='default' filepath='include/linux/cpufreq.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='policy_list' type-id='72f469ec' visibility='default' filepath='include/linux/cpufreq.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/cpufreq.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='kobj_unregister' type-id='f9fef04f' visibility='default' filepath='include/linux/cpufreq.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/cpufreq.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='fast_switch_possible' type-id='b50a4934' visibility='default' filepath='include/linux/cpufreq.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4616'>
+          <var-decl name='fast_switch_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/cpufreq.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4640'>
+          <var-decl name='transition_delay_us' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='dvfs_possible_from_any_cpu' type-id='b50a4934' visibility='default' filepath='include/linux/cpufreq.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4704'>
+          <var-decl name='cached_target_freq' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='cached_resolved_idx' type-id='95e97e5e' visibility='default' filepath='include/linux/cpufreq.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4768'>
+          <var-decl name='transition_ongoing' type-id='b50a4934' visibility='default' filepath='include/linux/cpufreq.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='transition_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/cpufreq.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='transition_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/cpufreq.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='transition_task' type-id='f23e2572' visibility='default' filepath='include/linux/cpufreq.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='stats' type-id='dfdc5e57' visibility='default' filepath='include/linux/cpufreq.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/cpufreq.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='cdev' type-id='2feec21f' visibility='default' filepath='include/linux/cpufreq.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='nb_min' type-id='9b08f7cd' visibility='default' filepath='include/linux/cpufreq.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='nb_max' type-id='9b08f7cd' visibility='default' filepath='include/linux/cpufreq.h' line='148' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f7f17df9' size-in-bits='64' id='3b8b42e1'/>
+      <pointer-type-def type-id='c0525226' size-in-bits='64' id='6925355c'/>
+      <pointer-type-def type-id='570cf6cf' size-in-bits='64' id='dfdc5e57'/>
+      <enum-decl name='cpufreq_table_sorting' filepath='include/linux/cpufreq.h' line='37' column='1' id='e29b2d58'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='CPUFREQ_TABLE_UNSORTED' value='0'/>
+        <enumerator name='CPUFREQ_TABLE_SORTED_ASCENDING' value='1'/>
+        <enumerator name='CPUFREQ_TABLE_SORTED_DESCENDING' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='da4cc8f3' size-in-bits='64' id='3fdf7ca3'/>
+      <class-decl name='cpufreq_cpuinfo' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='43' column='1' id='861f63ae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_freq' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='min_freq' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='transition_latency' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3ae87f87' size-in-bits='64' id='2feec21f'/>
+      <class-decl name='cpufreq_frequency_table' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='619' column='1' id='f7f17df9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='driver_data' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frequency' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='622' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpufreq_governor' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='543' column='1' id='c0525226'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/cpufreq.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='exit' type-id='bbebd435' visibility='default' filepath='include/linux/cpufreq.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='start' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='stop' type-id='bbebd435' visibility='default' filepath='include/linux/cpufreq.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='limits' type-id='bbebd435' visibility='default' filepath='include/linux/cpufreq.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='show_setspeed' type-id='7126cf8f' visibility='default' filepath='include/linux/cpufreq.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='store_setspeed' type-id='933bd18c' visibility='default' filepath='include/linux/cpufreq.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dynamic_switching' type-id='b50a4934' visibility='default' filepath='include/linux/cpufreq.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='governor_list' type-id='72f469ec' visibility='default' filepath='include/linux/cpufreq.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/cpufreq.h' line='557' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpufreq_stats' is-struct='yes' visibility='default' is-declaration-only='yes' id='570cf6cf'/>
+      <class-decl name='thermal_cooling_device' size-in-bits='8384' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='130' column='1' id='3ae87f87'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='664ac0b7' visibility='default' filepath='include/linux/thermal.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device' type-id='66e487eb' visibility='default' filepath='include/linux/thermal.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='np' type-id='9a537bbe' visibility='default' filepath='include/linux/thermal.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='devdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/thermal.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='stats' type-id='eaa32e2f' visibility='default' filepath='include/linux/thermal.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='ops' type-id='6f4dc085' visibility='default' filepath='include/linux/thermal.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='updated' type-id='b50a4934' visibility='default' filepath='include/linux/thermal.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/thermal.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='thermal_instances' type-id='72f469ec' visibility='default' filepath='include/linux/thermal.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/thermal.h' line='141' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e542e4ad' size-in-bits='64' id='6f4dc085'/>
+      <pointer-type-def type-id='8393eddc' size-in-bits='64' id='8dc588ee'/>
+      <pointer-type-def type-id='144e93b2' size-in-bits='64' id='933bd18c'/>
+      <pointer-type-def type-id='4292193b' size-in-bits='64' id='7126cf8f'/>
+      <pointer-type-def type-id='593ec809' size-in-bits='64' id='bbebd435'/>
+      <qualified-type-def type-id='ff1a03f4' const='yes' id='e542e4ad'/>
+      <class-decl name='thermal_cooling_device_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='118' column='1' id='ff1a03f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_max_state' type-id='ff2d9ea5' visibility='default' filepath='include/linux/thermal.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_cur_state' type-id='ff2d9ea5' visibility='default' filepath='include/linux/thermal.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_cur_state' type-id='4b4c62ab' visibility='default' filepath='include/linux/thermal.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_requested_power' type-id='6f31af4c' visibility='default' filepath='include/linux/thermal.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='state2power' type-id='4692f31c' visibility='default' filepath='include/linux/thermal.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='power2state' type-id='c1eac593' visibility='default' filepath='include/linux/thermal.h' line='126' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='51dca1f7' size-in-bits='64' id='c1eac593'/>
+      <pointer-type-def type-id='9762f152' size-in-bits='64' id='6f31af4c'/>
+      <pointer-type-def type-id='35aa2942' size-in-bits='64' id='4692f31c'/>
+      <pointer-type-def type-id='e7176377' size-in-bits='64' id='4b4c62ab'/>
+      <pointer-type-def type-id='7fd43619' size-in-bits='64' id='ff2d9ea5'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/cpufreq/cpufreq_governor_attr_set.c' language='LANG_C89'>
+      <var-decl name='governor_sysfs_ops' type-id='0f840455' mangled-name='governor_sysfs_ops' visibility='default' filepath='drivers/cpufreq/cpufreq_governor_attr_set.c' line='42' column='1' elf-symbol-id='governor_sysfs_ops'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/cpufreq/cpufreq_powersave.c' language='LANG_C89'>
+      <class-decl name='cpufreq_stats' is-struct='yes' visibility='default' is-declaration-only='yes' id='570cf6cf'/>
+      <class-decl name='thermal_cooling_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='3ae87f88'/>
+      <class-decl name='cpufreq_governor' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='543' column='1' id='c0525226'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/cpufreq.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='exit' type-id='bbebd435' visibility='default' filepath='include/linux/cpufreq.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='start' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='stop' type-id='bbebd435' visibility='default' filepath='include/linux/cpufreq.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='limits' type-id='bbebd435' visibility='default' filepath='include/linux/cpufreq.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='show_setspeed' type-id='7126cf8f' visibility='default' filepath='include/linux/cpufreq.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='store_setspeed' type-id='933bd18c' visibility='default' filepath='include/linux/cpufreq.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dynamic_switching' type-id='b50a4934' visibility='default' filepath='include/linux/cpufreq.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='governor_list' type-id='72f469ec' visibility='default' filepath='include/linux/cpufreq.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/cpufreq.h' line='557' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpufreq_policy' size-in-bits='5696' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='51' column='1' id='dbcf5bbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpus' type-id='b16b461b' visibility='default' filepath='include/linux/cpufreq.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='related_cpus' type-id='b16b461b' visibility='default' filepath='include/linux/cpufreq.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='real_cpus' type-id='b16b461b' visibility='default' filepath='include/linux/cpufreq.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='shared_type' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='include/linux/cpufreq.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cpuinfo' type-id='861f63ae' visibility='default' filepath='include/linux/cpufreq.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='min' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='max' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='cur' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='restore_freq' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='suspend_freq' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='policy' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='last_policy' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='governor' type-id='6925355c' visibility='default' filepath='include/linux/cpufreq.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='governor_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/cpufreq.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='last_governor' type-id='ac1fa8c0' visibility='default' filepath='include/linux/cpufreq.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='update' type-id='ef9025d0' visibility='default' filepath='include/linux/cpufreq.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='constraints' type-id='7ca99f8c' visibility='default' filepath='include/linux/cpufreq.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='min_freq_req' type-id='3fdf7ca3' visibility='default' filepath='include/linux/cpufreq.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='max_freq_req' type-id='3fdf7ca3' visibility='default' filepath='include/linux/cpufreq.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='freq_table' type-id='3b8b42e1' visibility='default' filepath='include/linux/cpufreq.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='freq_table_sorted' type-id='e29b2d58' visibility='default' filepath='include/linux/cpufreq.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='policy_list' type-id='72f469ec' visibility='default' filepath='include/linux/cpufreq.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/cpufreq.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='kobj_unregister' type-id='f9fef04f' visibility='default' filepath='include/linux/cpufreq.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/cpufreq.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='fast_switch_possible' type-id='b50a4934' visibility='default' filepath='include/linux/cpufreq.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4616'>
+          <var-decl name='fast_switch_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/cpufreq.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4640'>
+          <var-decl name='transition_delay_us' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='dvfs_possible_from_any_cpu' type-id='b50a4934' visibility='default' filepath='include/linux/cpufreq.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4704'>
+          <var-decl name='cached_target_freq' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='cached_resolved_idx' type-id='95e97e5e' visibility='default' filepath='include/linux/cpufreq.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4768'>
+          <var-decl name='transition_ongoing' type-id='b50a4934' visibility='default' filepath='include/linux/cpufreq.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='transition_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/cpufreq.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='transition_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/cpufreq.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='transition_task' type-id='f23e2572' visibility='default' filepath='include/linux/cpufreq.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='stats' type-id='dfdc5e57' visibility='default' filepath='include/linux/cpufreq.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/cpufreq.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='cdev' type-id='2feec220' visibility='default' filepath='include/linux/cpufreq.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='nb_min' type-id='9b08f7cd' visibility='default' filepath='include/linux/cpufreq.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='nb_max' type-id='9b08f7cd' visibility='default' filepath='include/linux/cpufreq.h' line='148' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpufreq_cpuinfo' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='43' column='1' id='861f63ae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_freq' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='min_freq' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='transition_latency' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpufreq_frequency_table' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='619' column='1' id='f7f17df9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='driver_data' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frequency' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='622' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='cpufreq_table_sorting' filepath='include/linux/cpufreq.h' line='37' column='1' id='e29b2d58'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='CPUFREQ_TABLE_UNSORTED' value='0'/>
+        <enumerator name='CPUFREQ_TABLE_SORTED_ASCENDING' value='1'/>
+        <enumerator name='CPUFREQ_TABLE_SORTED_DESCENDING' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='f7f17df9' size-in-bits='64' id='3b8b42e1'/>
+      <pointer-type-def type-id='c0525226' size-in-bits='64' id='6925355c'/>
+      <pointer-type-def type-id='dbcf5bbe' size-in-bits='64' id='343c3ae4'/>
+      <pointer-type-def type-id='570cf6cf' size-in-bits='64' id='dfdc5e57'/>
+      <pointer-type-def type-id='da4cc8f3' size-in-bits='64' id='3fdf7ca3'/>
+      <pointer-type-def type-id='8393eddc' size-in-bits='64' id='8dc588ee'/>
+      <pointer-type-def type-id='144e93b2' size-in-bits='64' id='933bd18c'/>
+      <pointer-type-def type-id='3ae87f88' size-in-bits='64' id='2feec220'/>
+      <pointer-type-def type-id='4292193b' size-in-bits='64' id='7126cf8f'/>
+      <pointer-type-def type-id='593ec809' size-in-bits='64' id='bbebd435'/>
+      <function-decl name='cpufreq_unregister_governor' mangled-name='cpufreq_unregister_governor' filepath='include/linux/cpufreq.h' line='573' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_unregister_governor'>
+        <parameter type-id='6925355c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpufreq_register_governor' mangled-name='cpufreq_register_governor' filepath='include/linux/cpufreq.h' line='572' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_register_governor'>
+        <parameter type-id='6925355c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='8393eddc'>
+        <parameter type-id='343c3ae4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='144e93b2'>
+        <parameter type-id='343c3ae4'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4292193b'>
+        <parameter type-id='343c3ae4'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='593ec809'>
+        <parameter type-id='343c3ae4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/cpufreq/freq_table.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='15e229a3' size-in-bits='128' id='82486e89'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <var-decl name='cpufreq_freq_attr_scaling_available_freqs' type-id='9f2d4ea3' mangled-name='cpufreq_freq_attr_scaling_available_freqs' visibility='default' filepath='drivers/cpufreq/freq_table.c' line='272' column='1' elf-symbol-id='cpufreq_freq_attr_scaling_available_freqs'/>
+      <var-decl name='cpufreq_freq_attr_scaling_boost_freqs' type-id='9f2d4ea3' mangled-name='cpufreq_freq_attr_scaling_boost_freqs' visibility='default' filepath='drivers/cpufreq/freq_table.c' line='284' column='1' elf-symbol-id='cpufreq_freq_attr_scaling_boost_freqs'/>
+      <var-decl name='cpufreq_generic_attr' type-id='82486e89' mangled-name='cpufreq_generic_attr' visibility='default' filepath='drivers/cpufreq/freq_table.c' line='287' column='1' elf-symbol-id='cpufreq_generic_attr'/>
+      <function-decl name='policy_has_boost_freq' mangled-name='policy_has_boost_freq' filepath='drivers/cpufreq/freq_table.c' line='17' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='policy_has_boost_freq'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/freq_table.c' line='17' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='cpufreq_frequency_table_verify' mangled-name='cpufreq_frequency_table_verify' filepath='drivers/cpufreq/freq_table.c' line='63' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_frequency_table_verify'>
+        <parameter type-id='5aa4f86b' name='policy' filepath='drivers/cpufreq/freq_table.c' line='63' column='1'/>
+        <parameter type-id='3b8b42e1' name='table' filepath='drivers/cpufreq/freq_table.c' line='64' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpufreq_generic_frequency_table_verify' mangled-name='cpufreq_generic_frequency_table_verify' filepath='drivers/cpufreq/freq_table.c' line='103' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_generic_frequency_table_verify'>
+        <parameter type-id='5aa4f86b' name='policy' filepath='drivers/cpufreq/freq_table.c' line='103' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='ffe5737b' size-in-bits='64' id='5aa4f86b'/>
+      <pointer-type-def type-id='9f2d4ea3' size-in-bits='64' id='15e229a3'/>
+      <class-decl name='freq_attr' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='258' column='1' id='9f2d4ea3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' visibility='default' filepath='include/linux/cpufreq.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='7126cf8f' visibility='default' filepath='include/linux/cpufreq.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='880ef693' visibility='default' filepath='include/linux/cpufreq.h' line='261' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpufreq_policy_data' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='157' column='1' id='ffe5737b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpuinfo' type-id='861f63ae' visibility='default' filepath='include/linux/cpufreq.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='freq_table' type-id='3b8b42e1' visibility='default' filepath='include/linux/cpufreq.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='min' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='max' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='52126317' size-in-bits='64' id='880ef693'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/cpufreq/scmi-cpufreq.c' language='LANG_C89'>
+      <class-decl name='cpufreq_driver' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='289' column='1' id='9b8dc95a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/cpufreq.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/linux/cpufreq.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/cpufreq.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='init' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='verify' type-id='0c33493b' visibility='default' filepath='include/linux/cpufreq.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='setpolicy' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='target' type-id='8a854266' visibility='default' filepath='include/linux/cpufreq.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='target_index' type-id='933bd18c' visibility='default' filepath='include/linux/cpufreq.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fast_switch' type-id='b3e04083' visibility='default' filepath='include/linux/cpufreq.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='resolve_freq' type-id='b3e04083' visibility='default' filepath='include/linux/cpufreq.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_intermediate' type-id='b3e04083' visibility='default' filepath='include/linux/cpufreq.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='target_intermediate' type-id='933bd18c' visibility='default' filepath='include/linux/cpufreq.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='get' type-id='17a94daa' visibility='default' filepath='include/linux/cpufreq.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='update_limits' type-id='4a84e7de' visibility='default' filepath='include/linux/cpufreq.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bios_limit' type-id='2a05538a' visibility='default' filepath='include/linux/cpufreq.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='online' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='offline' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='exit' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='stop_cpu' type-id='bbebd435' visibility='default' filepath='include/linux/cpufreq.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='suspend' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='resume' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='ready' type-id='bbebd435' visibility='default' filepath='include/linux/cpufreq.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='attr' type-id='fc0762ab' visibility='default' filepath='include/linux/cpufreq.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='boost_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/cpufreq.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='set_boost' type-id='7f416e10' visibility='default' filepath='include/linux/cpufreq.h' line='365' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpufreq_policy_data' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='157' column='1' id='ffe5737b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpuinfo' type-id='861f63ae' visibility='default' filepath='include/linux/cpufreq.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='freq_table' type-id='3b8b42e1' visibility='default' filepath='include/linux/cpufreq.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='min' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='max' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='freq_attr' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='258' column='1' id='9f2d4ea3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' visibility='default' filepath='include/linux/cpufreq.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='7126cf8f' visibility='default' filepath='include/linux/cpufreq.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='880ef693' visibility='default' filepath='include/linux/cpufreq.h' line='261' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9b8dc95a' size-in-bits='64' id='eb90c228'/>
+      <pointer-type-def type-id='3b8b42e1' size-in-bits='64' id='873a2591'/>
+      <pointer-type-def type-id='ffe5737b' size-in-bits='64' id='5aa4f86b'/>
+      <pointer-type-def type-id='9f2d4ea3' size-in-bits='64' id='15e229a3'/>
+      <pointer-type-def type-id='15e229a3' size-in-bits='64' id='fc0762ab'/>
+      <pointer-type-def type-id='88ffd624' size-in-bits='64' id='8a854266'/>
+      <pointer-type-def type-id='242fdc5f' size-in-bits='64' id='0c33493b'/>
+      <pointer-type-def type-id='1d2f7bf0' size-in-bits='64' id='2a05538a'/>
+      <pointer-type-def type-id='52126317' size-in-bits='64' id='880ef693'/>
+      <pointer-type-def type-id='c85f87a7' size-in-bits='64' id='b3e04083'/>
+      <pointer-type-def type-id='e69c1394' size-in-bits='64' id='4a84e7de'/>
+      <function-decl name='cpufreq_register_driver' mangled-name='cpufreq_register_driver' filepath='include/linux/cpufreq.h' line='415' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_register_driver'>
+        <parameter type-id='eb90c228'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpufreq_unregister_driver' mangled-name='cpufreq_unregister_driver' filepath='include/linux/cpufreq.h' line='416' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_unregister_driver'>
+        <parameter type-id='eb90c228'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_set_sharing_cpus' mangled-name='dev_pm_opp_set_sharing_cpus' filepath='include/linux/pm_opp.h' line='137' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_set_sharing_cpus'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='5f8a1ac4'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_get_opp_count' mangled-name='dev_pm_opp_get_opp_count' filepath='include/linux/pm_opp.h' line='90' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_get_opp_count'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_init_cpufreq_table' mangled-name='dev_pm_opp_init_cpufreq_table' filepath='include/linux/cpufreq.h' line='627' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_init_cpufreq_table'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='873a2591'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_remove_all_dynamic' mangled-name='dev_pm_opp_remove_all_dynamic' filepath='include/linux/pm_opp.h' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_remove_all_dynamic'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='arch_set_freq_scale' mangled-name='arch_set_freq_scale' filepath='include/linux/cpufreq.h' line='988' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='arch_set_freq_scale'>
+        <parameter type-id='74bccedd'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpufreq_cpu_get_raw' mangled-name='cpufreq_cpu_get_raw' filepath='include/linux/cpufreq.h' line='179' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_cpu_get_raw'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='343c3ae4'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_free_cpufreq_table' mangled-name='dev_pm_opp_free_cpufreq_table' filepath='include/linux/cpufreq.h' line='629' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_free_cpufreq_table'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='873a2591'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='1354385d' size-in-bits='64' id='74bccedd'/>
+      <function-type size-in-bits='64' id='88ffd624'>
+        <parameter type-id='343c3ae4'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='242fdc5f'>
+        <parameter type-id='5aa4f86b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1d2f7bf0'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='52126317'>
+        <parameter type-id='343c3ae4'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c85f87a7'>
+        <parameter type-id='343c3ae4'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e69c1394'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='32efe300' size-in-bits='64' id='17a94daa'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/cpufreq/scpi-cpufreq.c' language='LANG_C89'>
+      <function-decl name='dev_pm_opp_of_register_em' mangled-name='dev_pm_opp_of_register_em' filepath='include/linux/pm_opp.h' line='350' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_of_register_em'>
+        <parameter type-id='74bccedd'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/cpuidle/cpuidle-psci.c' language='LANG_C89'>
+      <function-decl name='of_get_cpu_node' mangled-name='of_get_cpu_node' filepath='include/linux/of.h' line='352' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_cpu_node'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_get_property' mangled-name='of_get_property' filepath='include/linux/of.h' line='349' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_property'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='of_parse_phandle' mangled-name='of_parse_phandle' filepath='include/linux/of.h' line='364' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_parse_phandle'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/devfreq/devfreq.c' language='LANG_C89'>
+      <function-decl name='devm_devfreq_add_device' mangled-name='devm_devfreq_add_device' filepath='drivers/devfreq/devfreq.c' line='798' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_devfreq_add_device'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/devfreq/devfreq.c' line='798' column='1'/>
+        <parameter type-id='cba10b6e' name='profile' filepath='drivers/devfreq/devfreq.c' line='799' column='1'/>
+        <parameter type-id='80f4b756' name='governor_name' filepath='drivers/devfreq/devfreq.c' line='800' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/devfreq/devfreq.c' line='801' column='1'/>
+        <return type-id='f66fa7f4'/>
+      </function-decl>
+      <function-decl name='devm_devfreq_remove_device' mangled-name='devm_devfreq_remove_device' filepath='drivers/devfreq/devfreq.c' line='872' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_devfreq_remove_device'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/devfreq/devfreq.c' line='872' column='1'/>
+        <parameter type-id='f66fa7f4' name='devfreq' filepath='drivers/devfreq/devfreq.c' line='872' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devfreq_register_opp_notifier' mangled-name='devfreq_register_opp_notifier' filepath='drivers/devfreq/devfreq.c' line='1535' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_register_opp_notifier'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/devfreq/devfreq.c' line='1535' column='1'/>
+        <parameter type-id='f66fa7f4' name='devfreq' filepath='drivers/devfreq/devfreq.c' line='1535' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devfreq_unregister_opp_notifier' mangled-name='devfreq_unregister_opp_notifier' filepath='drivers/devfreq/devfreq.c' line='1551' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_unregister_opp_notifier'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/devfreq/devfreq.c' line='1551' column='1'/>
+        <parameter type-id='f66fa7f4' name='devfreq' filepath='drivers/devfreq/devfreq.c' line='1551' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_devfreq_register_opp_notifier' mangled-name='devm_devfreq_register_opp_notifier' filepath='drivers/devfreq/devfreq.c' line='1568' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_devfreq_register_opp_notifier'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/devfreq/devfreq.c' line='1568' column='1'/>
+        <parameter type-id='f66fa7f4' name='devfreq' filepath='drivers/devfreq/devfreq.c' line='1569' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='f80c018e' size-in-bits='64' id='f66fa7f4'/>
+      <pointer-type-def type-id='c9196d18' size-in-bits='64' id='cba10b6e'/>
+      <class-decl name='devfreq' size-in-bits='15872' is-struct='yes' visibility='default' filepath='include/linux/devfreq.h' line='148' column='1' id='f80c018e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/devfreq.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/devfreq.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/devfreq.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='profile' type-id='cba10b6e' visibility='default' filepath='include/linux/devfreq.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='governor' type-id='f627870a' visibility='default' filepath='include/linux/devfreq.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='governor_name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/devfreq.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='nb' type-id='9b08f7cd' visibility='default' filepath='include/linux/devfreq.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/devfreq.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='previous_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='last_status' type-id='49266711' visibility='default' filepath='include/linux/devfreq.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/devfreq.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='min_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='max_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='scaling_min_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='scaling_max_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='stop_polling' type-id='b50a4934' visibility='default' filepath='include/linux/devfreq.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='suspend_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='resume_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='suspend_count' type-id='49178f86' visibility='default' filepath='include/linux/devfreq.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10144'>
+          <var-decl name='total_trans' type-id='f0981eeb' visibility='default' filepath='include/linux/devfreq.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='trans_table' type-id='807869d3' visibility='default' filepath='include/linux/devfreq.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='time_in_state' type-id='1d2c2b85' visibility='default' filepath='include/linux/devfreq.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='last_stat_updated' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='transition_notifier_list' type-id='ffc4a47a' visibility='default' filepath='include/linux/devfreq.h' line='180' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='devfreq_dev_profile' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/devfreq.h' line='95' column='1' id='c9196d18'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='initial_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='polling_ms' type-id='f0981eeb' visibility='default' filepath='include/linux/devfreq.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='target' type-id='70283254' visibility='default' filepath='include/linux/devfreq.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_dev_status' type-id='676fff47' visibility='default' filepath='include/linux/devfreq.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_cur_freq' type-id='0e18d3fd' visibility='default' filepath='include/linux/devfreq.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='exit' type-id='dd787f72' visibility='default' filepath='include/linux/devfreq.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='freq_table' type-id='1d2c2b85' visibility='default' filepath='include/linux/devfreq.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='max_state' type-id='f0981eeb' visibility='default' filepath='include/linux/devfreq.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e5e56b24' size-in-bits='64' id='f627870a'/>
+      <pointer-type-def type-id='2873dcbb' size-in-bits='64' id='676fff47'/>
+      <pointer-type-def type-id='4e3cc2a9' size-in-bits='64' id='0e18d3fd'/>
+      <pointer-type-def type-id='6788fb9a' size-in-bits='64' id='70283254'/>
+      <class-decl name='devfreq_dev_status' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/devfreq.h' line='51' column='1' id='49266711'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='total_time' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='busy_time' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='current_frequency' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/devfreq.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='srcu_notifier_head' size-in-bits='5504' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='74' column='1' id='ffc4a47a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/notifier.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='srcu' type-id='e4a7867c' visibility='default' filepath='include/linux/notifier.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='head' type-id='d504f73d' visibility='default' filepath='include/linux/notifier.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='6d54709d' const='yes' id='e5e56b24'/>
+      <class-decl name='devfreq_governor' size-in-bits='448' is-struct='yes' visibility='default' filepath='drivers/devfreq/governor.h' line='47' column='1' id='6d54709d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/devfreq/governor.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='8d43b1f5' visibility='default' filepath='drivers/devfreq/governor.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='immutable' type-id='20f5f452' visibility='default' filepath='drivers/devfreq/governor.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_target_freq' type-id='b2610cc8' visibility='default' filepath='drivers/devfreq/governor.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='event_handler' type-id='10b92604' visibility='default' filepath='drivers/devfreq/governor.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='5e5241e2' size-in-bits='64' id='10b92604'/>
+      <pointer-type-def type-id='11581816' size-in-bits='64' id='b2610cc8'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/devfreq/governor_passive.c' language='LANG_C89'>
+      <class-decl name='dev_pm_opp' size-in-bits='768' is-struct='yes' visibility='default' filepath='drivers/opp/opp.h' line='71' column='1' id='3ba81dd0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/opp/opp.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='drivers/opp/opp.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='available' type-id='b50a4934' visibility='default' filepath='drivers/opp/opp.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='dynamic' type-id='b50a4934' visibility='default' filepath='drivers/opp/opp.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='turbo' type-id='b50a4934' visibility='default' filepath='drivers/opp/opp.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='suspend' type-id='b50a4934' visibility='default' filepath='drivers/opp/opp.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pstate' type-id='f0981eeb' visibility='default' filepath='drivers/opp/opp.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rate' type-id='7359adad' visibility='default' filepath='drivers/opp/opp.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='level' type-id='f0981eeb' visibility='default' filepath='drivers/opp/opp.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='supplies' type-id='614c5efc' visibility='default' filepath='drivers/opp/opp.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='clock_latency_ns' type-id='7359adad' visibility='default' filepath='drivers/opp/opp.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='required_opps' type-id='79c84484' visibility='default' filepath='drivers/opp/opp.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='opp_table' type-id='e62a60bd' visibility='default' filepath='drivers/opp/opp.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='np' type-id='9a537bbe' visibility='default' filepath='drivers/opp/opp.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dentry' type-id='27675066' visibility='default' filepath='drivers/opp/opp.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3ba81dd0' size-in-bits='64' id='02e48bc6'/>
+      <function-decl name='devfreq_recommended_opp' mangled-name='devfreq_recommended_opp' filepath='include/linux/devfreq.h' line='217' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_recommended_opp'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='02e48bc6'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_put' mangled-name='dev_pm_opp_put' filepath='include/linux/pm_opp.h' line='109' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_put'>
+        <parameter type-id='02e48bc6'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devfreq_update_status' mangled-name='devfreq_update_status' filepath='drivers/devfreq/governor.h' line='67' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_update_status'>
+        <parameter type-id='f66fa7f4'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/devfreq/governor_performance.c' language='LANG_C89'>
+      <function-decl name='update_devfreq' mangled-name='update_devfreq' filepath='include/linux/devfreq.h' line='214' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='update_devfreq'>
+        <parameter type-id='f66fa7f4'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/devfreq/governor_simpleondemand.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='9b45d938' size-in-bits='128' id='8d43b1f5'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <pointer-type-def type-id='6d54709d' size-in-bits='64' id='247297cd'/>
+      <pointer-type-def type-id='5e5241e2' size-in-bits='64' id='10b92604'/>
+      <pointer-type-def type-id='11581816' size-in-bits='64' id='b2610cc8'/>
+      <function-decl name='devfreq_remove_governor' mangled-name='devfreq_remove_governor' filepath='drivers/devfreq/governor.h' line='65' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_remove_governor'>
+        <parameter type-id='247297cd'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devfreq_add_governor' mangled-name='devfreq_add_governor' filepath='drivers/devfreq/governor.h' line='64' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_add_governor'>
+        <parameter type-id='247297cd'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='5e5241e2'>
+        <parameter type-id='f66fa7f4'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='11581816'>
+        <parameter type-id='f66fa7f4'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/dma-buf/dma-buf.c' language='LANG_C89'>
+      <function-decl name='dma_buf_begin_cpu_access' mangled-name='dma_buf_begin_cpu_access' filepath='drivers/dma-buf/dma-buf.c' line='1035' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_begin_cpu_access'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='1035' column='1'/>
+        <parameter type-id='eea6b025' name='direction' filepath='drivers/dma-buf/dma-buf.c' line='1036' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_buf_begin_cpu_access_partial' mangled-name='dma_buf_begin_cpu_access_partial' filepath='drivers/dma-buf/dma-buf.c' line='1057' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_begin_cpu_access_partial'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='1057' column='1'/>
+        <parameter type-id='eea6b025' name='direction' filepath='drivers/dma-buf/dma-buf.c' line='1058' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/dma-buf/dma-buf.c' line='1059' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='drivers/dma-buf/dma-buf.c' line='1059' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_buf_end_cpu_access' mangled-name='dma_buf_end_cpu_access' filepath='drivers/dma-buf/dma-buf.c' line='1093' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_end_cpu_access'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='1093' column='1'/>
+        <parameter type-id='eea6b025' name='direction' filepath='drivers/dma-buf/dma-buf.c' line='1094' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_buf_end_cpu_access_partial' mangled-name='dma_buf_end_cpu_access_partial' filepath='drivers/dma-buf/dma-buf.c' line='1107' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_end_cpu_access_partial'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='1107' column='1'/>
+        <parameter type-id='eea6b025' name='direction' filepath='drivers/dma-buf/dma-buf.c' line='1108' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/dma-buf/dma-buf.c' line='1109' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='drivers/dma-buf/dma-buf.c' line='1109' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_buf_kmap' mangled-name='dma_buf_kmap' filepath='drivers/dma-buf/dma-buf.c' line='1132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_kmap'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='1132' column='1'/>
+        <parameter type-id='7359adad' name='page_num' filepath='drivers/dma-buf/dma-buf.c' line='1132' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='dma_buf_kunmap' mangled-name='dma_buf_kunmap' filepath='drivers/dma-buf/dma-buf.c' line='1150' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_kunmap'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='1150' column='1'/>
+        <parameter type-id='7359adad' name='page_num' filepath='drivers/dma-buf/dma-buf.c' line='1150' column='1'/>
+        <parameter type-id='eaa32e2f' name='vaddr' filepath='drivers/dma-buf/dma-buf.c' line='1151' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_buf_mmap' mangled-name='dma_buf_mmap' filepath='drivers/dma-buf/dma-buf.c' line='1175' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_mmap'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='1175' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/dma-buf/dma-buf.c' line='1175' column='1'/>
+        <parameter type-id='7359adad' name='pgoff' filepath='drivers/dma-buf/dma-buf.c' line='1176' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_buf_get_flags' mangled-name='dma_buf_get_flags' filepath='drivers/dma-buf/dma-buf.c' line='1288' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_get_flags'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='1288' column='1'/>
+        <parameter type-id='1d2c2b85' name='flags' filepath='drivers/dma-buf/dma-buf.c' line='1288' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_buf_get_uuid' mangled-name='dma_buf_get_uuid' filepath='drivers/dma-buf/dma-buf.c' line='1302' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_get_uuid'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='1302' column='1'/>
+        <parameter type-id='f1397309' name='uuid' filepath='drivers/dma-buf/dma-buf.c' line='1302' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='c201baab' size-in-bits='64' id='5e4f599b'/>
+      <enum-decl name='dma_data_direction' filepath='include/linux/dma-direction.h' line='5' column='1' id='eea6b025'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DMA_BIDIRECTIONAL' value='0'/>
+        <enumerator name='DMA_TO_DEVICE' value='1'/>
+        <enumerator name='DMA_FROM_DEVICE' value='2'/>
+        <enumerator name='DMA_NONE' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='ec55eb74' size-in-bits='64' id='f1397309'/>
+      <class-decl name='dma_buf' size-in-bits='3392' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='388' column='1' id='c201baab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/dma-buf.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/dma-buf.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attachments' type-id='72f469ec' visibility='default' filepath='include/linux/dma-buf.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ops' type-id='c248c11b' visibility='default' filepath='include/linux/dma-buf.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/dma-buf.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='vmapping_counter' type-id='f0981eeb' visibility='default' filepath='include/linux/dma-buf.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vmap_ptr' type-id='eaa32e2f' visibility='default' filepath='include/linux/dma-buf.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='exp_name' type-id='80f4b756' visibility='default' filepath='include/linux/dma-buf.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/dma-buf.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='name_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/dma-buf.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/dma-buf.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='list_node' type-id='72f469ec' visibility='default' filepath='include/linux/dma-buf.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/dma-buf.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='resv' type-id='340cea9c' visibility='default' filepath='include/linux/dma-buf.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='poll' type-id='b5ab048f' visibility='default' filepath='include/linux/dma-buf.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='cb_excl' type-id='d5acde18' visibility='default' filepath='include/linux/dma-buf.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='cb_shared' type-id='d5acde18' visibility='default' filepath='include/linux/dma-buf.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sysfs_entry' type-id='bd60ed15' visibility='default' filepath='include/linux/dma-buf.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='mmap_count' type-id='95e97e5e' visibility='default' filepath='include/linux/dma-buf.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='exp_vm_ops' type-id='9be87662' visibility='default' filepath='include/linux/dma-buf.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='vm_ops' type-id='19795245' visibility='default' filepath='include/linux/dma-buf.h' line='423' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='38cc1773' size-in-bits='64' id='c248c11b'/>
+      <pointer-type-def type-id='36721cc5' size-in-bits='64' id='bd60ed15'/>
+      <pointer-type-def type-id='d06fbf66' size-in-bits='64' id='340cea9c'/>
+      <class-decl name='dma_buf_poll_cb_t' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='407' column='1' id='d5acde18'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cb' type-id='54c5dd35' visibility='default' filepath='include/linux/dma-buf.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='poll' type-id='03d48e96' visibility='default' filepath='include/linux/dma-buf.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active' type-id='8f254b08' visibility='default' filepath='include/linux/dma-buf.h' line='411' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='3f8b3d98' const='yes' id='38cc1773'/>
+      <class-decl name='dma_buf_sysfs_entry' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='415' column='1' id='36721cc5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/dma-buf.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dmabuf' type-id='5e4f599b' visibility='default' filepath='include/linux/dma-buf.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='attachment_uid' type-id='f0981eeb' visibility='default' filepath='include/linux/dma-buf.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='attach_stats_kset' type-id='89b70200' visibility='default' filepath='include/linux/dma-buf.h' line='419' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_fence_cb' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/dma-fence.h' line='116' column='1' id='54c5dd35'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/dma-fence.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='func' type-id='9c175524' visibility='default' filepath='include/linux/dma-fence.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_resv' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/dma-resv.h' line='72' column='1' id='d06fbf66'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='45793a97' visibility='default' filepath='include/linux/dma-resv.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='seq' type-id='e14c3b11' visibility='default' filepath='include/linux/dma-resv.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fence_excl' type-id='28271da3' visibility='default' filepath='include/linux/dma-resv.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fence' type-id='ed300e23' visibility='default' filepath='include/linux/dma-resv.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ce8c45a3' size-in-bits='64' id='28271da3'/>
+      <pointer-type-def type-id='7cc6fd83' size-in-bits='64' id='ed300e23'/>
+      <class-decl name='dma_buf_ops' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='35' column='1' id='3f8b3d98'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cache_sgt_mapping' type-id='b50a4934' visibility='default' filepath='include/linux/dma-buf.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='attach' type-id='b512ba7d' visibility='default' filepath='include/linux/dma-buf.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='detach' type-id='f191792a' visibility='default' filepath='include/linux/dma-buf.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='map_dma_buf' type-id='2d7508a9' visibility='default' filepath='include/linux/dma-buf.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unmap_dma_buf' type-id='0b475e59' visibility='default' filepath='include/linux/dma-buf.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='release' type-id='4e7b299a' visibility='default' filepath='include/linux/dma-buf.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='begin_cpu_access' type-id='127a97dd' visibility='default' filepath='include/linux/dma-buf.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='begin_cpu_access_partial' type-id='5299fb35' visibility='default' filepath='include/linux/dma-buf.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='end_cpu_access' type-id='127a97dd' visibility='default' filepath='include/linux/dma-buf.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='end_cpu_access_partial' type-id='5299fb35' visibility='default' filepath='include/linux/dma-buf.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mmap' type-id='68074686' visibility='default' filepath='include/linux/dma-buf.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='map' type-id='02838dc6' visibility='default' filepath='include/linux/dma-buf.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='unmap' type-id='632039f8' visibility='default' filepath='include/linux/dma-buf.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='vmap' type-id='a298286a' visibility='default' filepath='include/linux/dma-buf.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='vunmap' type-id='eb050ad4' visibility='default' filepath='include/linux/dma-buf.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='get_uuid' type-id='24dc58c9' visibility='default' filepath='include/linux/dma-buf.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_flags' type-id='97a03e57' visibility='default' filepath='include/linux/dma-buf.h' line='349' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ww_mutex' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/ww_mutex.h' line='51' column='1' id='45793a97'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='925167dc' visibility='default' filepath='include/linux/ww_mutex.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ctx' type-id='c1d02a64' visibility='default' filepath='include/linux/ww_mutex.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dma_fence_func_t' type-id='75d065d2' filepath='include/linux/dma-fence.h' line='105' column='1' id='9c175524'/>
+      <pointer-type-def type-id='9977c731' size-in-bits='64' id='b512ba7d'/>
+      <pointer-type-def type-id='88776799' size-in-bits='64' id='127a97dd'/>
+      <pointer-type-def type-id='c3e60881' size-in-bits='64' id='5299fb35'/>
+      <pointer-type-def type-id='8b9912bb' size-in-bits='64' id='97a03e57'/>
+      <pointer-type-def type-id='440843bd' size-in-bits='64' id='24dc58c9'/>
+      <pointer-type-def type-id='70e959e4' size-in-bits='64' id='68074686'/>
+      <pointer-type-def type-id='efdb04f5' size-in-bits='64' id='2d7508a9'/>
+      <class-decl name='dma_fence' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/dma-fence.h' line='65' column='1' id='ce8c45a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='cff2d845' visibility='default' filepath='include/linux/dma-fence.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='13d85783' visibility='default' filepath='include/linux/dma-fence.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='9d063591' visibility='default' filepath='include/linux/dma-fence.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='context' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-fence.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='seqno' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-fence.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/dma-fence.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/linux/dma-fence.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/linux/dma-fence.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_resv_list' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/dma-resv.h' line='59' column='1' id='7cc6fd83'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/dma-resv.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shared_count' type-id='19c2251e' visibility='default' filepath='include/linux/dma-resv.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='shared_max' type-id='19c2251e' visibility='default' filepath='include/linux/dma-resv.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='shared' type-id='f5432a6f' visibility='default' filepath='include/linux/dma-resv.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7908d890' size-in-bits='64' id='4e7b299a'/>
+      <pointer-type-def type-id='d299a9b0' size-in-bits='64' id='f191792a'/>
+      <pointer-type-def type-id='45d6b556' size-in-bits='64' id='632039f8'/>
+      <pointer-type-def type-id='9a321b4a' size-in-bits='64' id='eb050ad4'/>
+      <pointer-type-def type-id='7e5de8f5' size-in-bits='64' id='0b475e59'/>
+      <pointer-type-def type-id='18c89148' size-in-bits='64' id='75d065d2'/>
+      <pointer-type-def type-id='a1b495b8' size-in-bits='64' id='a298286a'/>
+      <pointer-type-def type-id='ddfa4afc' size-in-bits='64' id='02838dc6'/>
+      <pointer-type-def type-id='2c45f76e' size-in-bits='64' id='c1d02a64'/>
+      <pointer-type-def type-id='ee0fc87b' size-in-bits='64' id='13d85783'/>
+      <array-type-def dimensions='1' type-id='28271da3' size-in-bits='infinite' id='f5432a6f'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='ww_acquire_ctx' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/ww_mutex.h' line='31' column='1' id='2c45f76e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/ww_mutex.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stamp' type-id='7359adad' visibility='default' filepath='include/linux/ww_mutex.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='acquired' type-id='f0981eeb' visibility='default' filepath='include/linux/ww_mutex.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='wounded' type-id='8efea9e5' visibility='default' filepath='include/linux/ww_mutex.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='is_wait_die' type-id='8efea9e5' visibility='default' filepath='include/linux/ww_mutex.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dma-fence.h' line='84' column='1' id='9d063591'>
+        <data-member access='private'>
+          <var-decl name='cb_list' type-id='72f469ec' visibility='default' filepath='include/linux/dma-fence.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='timestamp' type-id='fbc017ef' visibility='default' filepath='include/linux/dma-fence.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/dma-fence.h' line='89' column='1'/>
+        </data-member>
+      </union-decl>
+      <qualified-type-def type-id='65d79a70' const='yes' id='ee0fc87b'/>
+      <class-decl name='dma_fence_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/dma-fence.h' line='125' column='1' id='65d79a70'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='use_64bit_seqno' type-id='b50a4934' visibility='default' filepath='include/linux/dma-fence.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_driver_name' type-id='0c4b82c7' visibility='default' filepath='include/linux/dma-fence.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_timeline_name' type-id='0c4b82c7' visibility='default' filepath='include/linux/dma-fence.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enable_signaling' type-id='e33a30a5' visibility='default' filepath='include/linux/dma-fence.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='signaled' type-id='e33a30a5' visibility='default' filepath='include/linux/dma-fence.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wait' type-id='c82424f9' visibility='default' filepath='include/linux/dma-fence.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='release' type-id='90d4d75e' visibility='default' filepath='include/linux/dma-fence.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fence_value_str' type-id='0f859ff9' visibility='default' filepath='include/linux/dma-fence.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='timeline_value_str' type-id='0f859ff9' visibility='default' filepath='include/linux/dma-fence.h' line='262' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a62a5dcb' size-in-bits='64' id='0c4b82c7'/>
+      <pointer-type-def type-id='0c98f83d' size-in-bits='64' id='c82424f9'/>
+      <pointer-type-def type-id='8cdee791' size-in-bits='64' id='e33a30a5'/>
+      <pointer-type-def type-id='da94e28c' size-in-bits='64' id='90d4d75e'/>
+      <pointer-type-def type-id='9a809cc5' size-in-bits='64' id='0f859ff9'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/dma-buf/dma-fence-array.c' language='LANG_C89'>
+      <class-decl name='dma_fence_array' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/dma-fence-array.h' line='37' column='1' id='8d83bfc9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='ce8c45a3' visibility='default' filepath='include/linux/dma-fence-array.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/dma-fence-array.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='num_fences' type-id='f0981eeb' visibility='default' filepath='include/linux/dma-fence-array.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='num_pending' type-id='49178f86' visibility='default' filepath='include/linux/dma-fence-array.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fences' type-id='be937eab' visibility='default' filepath='include/linux/dma-fence-array.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='work' type-id='9281c70f' visibility='default' filepath='include/linux/dma-fence-array.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='28271da3' size-in-bits='64' id='be937eab'/>
+      <pointer-type-def type-id='8d83bfc9' size-in-bits='64' id='34135071'/>
+      <var-decl name='dma_fence_array_ops' type-id='ee0fc87b' mangled-name='dma_fence_array_ops' visibility='default' filepath='drivers/dma-buf/dma-fence-array.c' line='122' column='1' elf-symbol-id='dma_fence_array_ops'/>
+      <function-decl name='dma_fence_array_create' mangled-name='dma_fence_array_create' filepath='drivers/dma-buf/dma-fence-array.c' line='150' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_array_create'>
+        <parameter type-id='95e97e5e' name='num_fences' filepath='drivers/dma-buf/dma-fence-array.c' line='150' column='1'/>
+        <parameter type-id='be937eab' name='fences' filepath='drivers/dma-buf/dma-fence-array.c' line='151' column='1'/>
+        <parameter type-id='91ce1af9' name='context' filepath='drivers/dma-buf/dma-fence-array.c' line='152' column='1'/>
+        <parameter type-id='f0981eeb' name='seqno' filepath='drivers/dma-buf/dma-fence-array.c' line='152' column='1'/>
+        <parameter type-id='b50a4934' name='signal_on_any' filepath='drivers/dma-buf/dma-fence-array.c' line='153' column='1'/>
+        <return type-id='34135071'/>
+      </function-decl>
+      <function-decl name='dma_fence_match_context' mangled-name='dma_fence_match_context' filepath='drivers/dma-buf/dma-fence-array.c' line='188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_match_context'>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/dma-buf/dma-fence-array.c' line='188' column='1'/>
+        <parameter type-id='91ce1af9' name='context' filepath='drivers/dma-buf/dma-fence-array.c' line='188' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/dma-buf/dma-fence.c' language='LANG_C89'>
+      <var-decl name='__tracepoint_dma_fence_emit' type-id='4ca0c298' mangled-name='__tracepoint_dma_fence_emit' visibility='default' filepath='include/trace/events/dma_fence.h' line='37' column='1' elf-symbol-id='__tracepoint_dma_fence_emit'/>
+      <function-decl name='dma_fence_signal_locked' mangled-name='dma_fence_signal_locked' filepath='drivers/dma-buf/dma-fence.c' line='129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_signal_locked'>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/dma-buf/dma-fence.c' line='129' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_fence_default_wait' mangled-name='dma_fence_default_wait' filepath='drivers/dma-buf/dma-fence.c' line='464' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_default_wait'>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/dma-buf/dma-fence.c' line='464' column='1'/>
+        <parameter type-id='b50a4934' name='intr' filepath='drivers/dma-buf/dma-fence.c' line='464' column='1'/>
+        <parameter type-id='bd54fe1a' name='timeout' filepath='drivers/dma-buf/dma-fence.c' line='464' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='dma_fence_release' mangled-name='dma_fence_release' filepath='drivers/dma-buf/dma-fence.c' line='228' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_release'>
+        <parameter type-id='aa29ecab' name='kref' filepath='drivers/dma-buf/dma-fence.c' line='228' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_fence_free' mangled-name='dma_fence_free' filepath='drivers/dma-buf/dma-fence.c' line='270' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_free'>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/dma-buf/dma-fence.c' line='270' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_fence_get_status' mangled-name='dma_fence_get_status' filepath='drivers/dma-buf/dma-fence.c' line='388' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_get_status'>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/dma-buf/dma-fence.c' line='388' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='400fb07b' size-in-bits='64' id='aa29ecab'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/dma-buf/dma-heap.c' language='LANG_C89'>
+      <class-decl name='dma_heap' size-in-bits='1600' is-struct='yes' visibility='default' filepath='drivers/dma-buf/dma-heap.c' line='37' column='1' id='060e2e70'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/dma-buf/dma-heap.c' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='cabcb658' visibility='default' filepath='drivers/dma-buf/dma-heap.c' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='drivers/dma-buf/dma-heap.c' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='heap_devt' type-id='8504f260' visibility='default' filepath='drivers/dma-buf/dma-heap.c' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/dma-buf/dma-heap.c' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='heap_cdev' type-id='22f86352' visibility='default' filepath='drivers/dma-buf/dma-heap.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='drivers/dma-buf/dma-heap.c' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='heap_dev' type-id='fa0b179b' visibility='default' filepath='drivers/dma-buf/dma-heap.c' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_heap_ops' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/dma-heap.h' line='23' column='1' id='e87e70f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='allocate' type-id='404d559d' visibility='default' filepath='include/linux/dma-heap.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_heap_export_info' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/dma-heap.h' line='38' column='1' id='666ada80'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/dma-heap.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='cabcb658' visibility='default' filepath='include/linux/dma-heap.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/dma-heap.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='666ada80' const='yes' id='ee9f611d'/>
+      <pointer-type-def type-id='ee9f611d' size-in-bits='64' id='dbe60995'/>
+      <qualified-type-def type-id='e87e70f3' const='yes' id='3651c762'/>
+      <pointer-type-def type-id='3651c762' size-in-bits='64' id='cabcb658'/>
+      <pointer-type-def type-id='9a08a831' size-in-bits='64' id='404d559d'/>
+      <pointer-type-def type-id='060e2e70' size-in-bits='64' id='ea1bdaf6'/>
+      <function-decl name='dma_heap_get_drvdata' mangled-name='dma_heap_get_drvdata' filepath='drivers/dma-buf/dma-heap.c' line='237' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_heap_get_drvdata'>
+        <parameter type-id='ea1bdaf6' name='heap' filepath='drivers/dma-buf/dma-heap.c' line='237' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='dma_heap_get_dev' mangled-name='dma_heap_get_dev' filepath='drivers/dma-buf/dma-heap.c' line='277' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_heap_get_dev'>
+        <parameter type-id='ea1bdaf6' name='heap' filepath='drivers/dma-buf/dma-heap.c' line='277' column='1'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='dma_heap_get_name' mangled-name='dma_heap_get_name' filepath='drivers/dma-buf/dma-heap.c' line='290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_heap_get_name'>
+        <parameter type-id='ea1bdaf6' name='heap' filepath='drivers/dma-buf/dma-heap.c' line='290' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='dma_heap_add' mangled-name='dma_heap_add' filepath='drivers/dma-buf/dma-heap.c' line='296' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_heap_add'>
+        <parameter type-id='dbe60995' name='exp_info' filepath='drivers/dma-buf/dma-heap.c' line='296' column='1'/>
+        <return type-id='ea1bdaf6'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='9a08a831'>
+        <parameter type-id='ea1bdaf6'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='5e4f599b'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/dma-buf/dma-resv.c' language='LANG_C89'>
+      <class-decl name='ww_class' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/ww_mutex.h' line='22' column='1' id='f0dc3c34'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stamp' type-id='f22a8abb' visibility='default' filepath='include/linux/ww_mutex.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='acquire_key' type-id='47479831' visibility='default' filepath='include/linux/ww_mutex.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mutex_key' type-id='47479831' visibility='default' filepath='include/linux/ww_mutex.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='acquire_name' type-id='80f4b756' visibility='default' filepath='include/linux/ww_mutex.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mutex_name' type-id='80f4b756' visibility='default' filepath='include/linux/ww_mutex.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='is_wait_die' type-id='f0981eeb' visibility='default' filepath='include/linux/ww_mutex.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <var-decl name='reservation_ww_class' type-id='f0dc3c34' mangled-name='reservation_ww_class' visibility='default' filepath='drivers/dma-buf/dma-resv.c' line='49' column='1' elf-symbol-id='reservation_ww_class'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/dma/dmaengine.c' language='LANG_C89'>
+      <qualified-type-def type-id='3fb29acd' const='yes' id='1b39a1dd'/>
+      <pointer-type-def type-id='1b39a1dd' size-in-bits='64' id='d2b9f7d5'/>
+      <function-decl name='dma_async_device_unregister' mangled-name='dma_async_device_unregister' filepath='drivers/dma/dmaengine.c' line='1111' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_async_device_unregister'>
+        <parameter type-id='c60ba652' name='device' filepath='drivers/dma/dmaengine.c' line='1111' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_get_slave_channel' mangled-name='dma_get_slave_channel' filepath='drivers/dma/dmaengine.c' line='577' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_get_slave_channel'>
+        <parameter type-id='27f3f5d9' name='chan' filepath='drivers/dma/dmaengine.c' line='577' column='1'/>
+        <return type-id='27f3f5d9'/>
+      </function-decl>
+      <function-decl name='__dma_request_channel' mangled-name='__dma_request_channel' filepath='drivers/dma/dmaengine.c' line='636' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__dma_request_channel'>
+        <parameter type-id='d2b9f7d5' name='mask' filepath='drivers/dma/dmaengine.c' line='636' column='1'/>
+        <parameter type-id='55f53546' name='fn' filepath='drivers/dma/dmaengine.c' line='637' column='1'/>
+        <parameter type-id='eaa32e2f' name='fn_param' filepath='drivers/dma/dmaengine.c' line='637' column='1'/>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/dma/dmaengine.c' line='638' column='1'/>
+        <return type-id='27f3f5d9'/>
+      </function-decl>
+      <function-decl name='of_dma_request_slave_channel' mangled-name='of_dma_request_slave_channel' filepath='include/linux/of_dma.h' line='47' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_dma_request_slave_channel'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='27f3f5d9'/>
+      </function-decl>
+      <function-decl name='dma_async_device_register' mangled-name='dma_async_device_register' filepath='drivers/dma/dmaengine.c' line='907' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_async_device_register'>
+        <parameter type-id='c60ba652' name='device' filepath='drivers/dma/dmaengine.c' line='907' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dmaengine_unmap_put' mangled-name='dmaengine_unmap_put' filepath='drivers/dma/dmaengine.c' line='1231' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dmaengine_unmap_put'>
+        <parameter type-id='e220a5e2' name='unmap' filepath='drivers/dma/dmaengine.c' line='1231' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_async_tx_descriptor_init' mangled-name='dma_async_tx_descriptor_init' filepath='drivers/dma/dmaengine.c' line='1297' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_async_tx_descriptor_init'>
+        <parameter type-id='0e3f80d9' name='tx' filepath='drivers/dma/dmaengine.c' line='1297' column='1'/>
+        <parameter type-id='27f3f5d9' name='chan' filepath='drivers/dma/dmaengine.c' line='1298' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='b50ce591' size-in-bits='64' id='0e3f80d9'/>
+      <pointer-type-def type-id='5e3b10ab' size-in-bits='64' id='27f3f5d9'/>
+      <pointer-type-def type-id='0dcaa1e4' size-in-bits='64' id='c60ba652'/>
+      <pointer-type-def type-id='b32b9ce4' size-in-bits='64' id='e220a5e2'/>
+      <typedef-decl name='dma_cap_mask_t' type-id='24d23dab' filepath='include/linux/dmaengine.h' line='214' column='1' id='3fb29acd'/>
+      <typedef-decl name='dma_filter_fn' type-id='aa8ac136' filepath='include/linux/dmaengine.h' line='444' column='1' id='55f53546'/>
+      <class-decl name='dma_async_tx_descriptor' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='496' column='1' id='b50ce591'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cookie' type-id='6478ea0a' visibility='default' filepath='include/linux/dmaengine.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='04baee86' visibility='default' filepath='include/linux/dmaengine.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phys' type-id='cf29c9b3' visibility='default' filepath='include/linux/dmaengine.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='chan' type-id='27f3f5d9' visibility='default' filepath='include/linux/dmaengine.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_submit' type-id='fb8c75c5' visibility='default' filepath='include/linux/dmaengine.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='desc_free' type-id='dccdb2b1' visibility='default' filepath='include/linux/dmaengine.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='callback' type-id='ee3f36d4' visibility='default' filepath='include/linux/dmaengine.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='callback_result' type-id='82615040' visibility='default' filepath='include/linux/dmaengine.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='callback_param' type-id='eaa32e2f' visibility='default' filepath='include/linux/dmaengine.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='unmap' type-id='e220a5e2' visibility='default' filepath='include/linux/dmaengine.h' line='506' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_chan' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='253' column='1' id='5e3b10ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='device' type-id='c60ba652' visibility='default' filepath='include/linux/dmaengine.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cookie' type-id='6478ea0a' visibility='default' filepath='include/linux/dmaengine.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='completed_cookie' type-id='6478ea0a' visibility='default' filepath='include/linux/dmaengine.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='chan_id' type-id='95e97e5e' visibility='default' filepath='include/linux/dmaengine.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='114d14e4' visibility='default' filepath='include/linux/dmaengine.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='device_node' type-id='72f469ec' visibility='default' filepath='include/linux/dmaengine.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='local' type-id='f8c8e796' visibility='default' filepath='include/linux/dmaengine.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='client_count' type-id='95e97e5e' visibility='default' filepath='include/linux/dmaengine.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='table_count' type-id='95e97e5e' visibility='default' filepath='include/linux/dmaengine.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='router' type-id='70a92833' visibility='default' filepath='include/linux/dmaengine.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='route_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/dmaengine.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/dmaengine.h' line='271' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_device' size-in-bits='2432' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='723' column='1' id='0dcaa1e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chancnt' type-id='f0981eeb' visibility='default' filepath='include/linux/dmaengine.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='privatecnt' type-id='f0981eeb' visibility='default' filepath='include/linux/dmaengine.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='channels' type-id='72f469ec' visibility='default' filepath='include/linux/dmaengine.h' line='727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='global_node' type-id='72f469ec' visibility='default' filepath='include/linux/dmaengine.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='filter' type-id='d914dc7c' visibility='default' filepath='include/linux/dmaengine.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cap_mask' type-id='3fb29acd' visibility='default' filepath='include/linux/dmaengine.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_xor' type-id='8efea9e5' visibility='default' filepath='include/linux/dmaengine.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='592'>
+          <var-decl name='max_pq' type-id='8efea9e5' visibility='default' filepath='include/linux/dmaengine.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='copy_align' type-id='ec506a0a' visibility='default' filepath='include/linux/dmaengine.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='xor_align' type-id='ec506a0a' visibility='default' filepath='include/linux/dmaengine.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='pq_align' type-id='ec506a0a' visibility='default' filepath='include/linux/dmaengine.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fill_align' type-id='ec506a0a' visibility='default' filepath='include/linux/dmaengine.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='dev_id' type-id='95e97e5e' visibility='default' filepath='include/linux/dmaengine.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/dmaengine.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/dmaengine.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='src_addr_widths' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='dst_addr_widths' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='directions' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='max_burst' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='descriptor_reuse' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='residue_granularity' type-id='cad02db3' visibility='default' filepath='include/linux/dmaengine.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='device_alloc_chan_resources' type-id='8425c356' visibility='default' filepath='include/linux/dmaengine.h' line='750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='device_free_chan_resources' type-id='42e84365' visibility='default' filepath='include/linux/dmaengine.h' line='751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='device_prep_dma_memcpy' type-id='16a27d24' visibility='default' filepath='include/linux/dmaengine.h' line='753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='device_prep_dma_xor' type-id='d37a2705' visibility='default' filepath='include/linux/dmaengine.h' line='756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='device_prep_dma_xor_val' type-id='187c2c79' visibility='default' filepath='include/linux/dmaengine.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='device_prep_dma_pq' type-id='2fa81f80' visibility='default' filepath='include/linux/dmaengine.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='device_prep_dma_pq_val' type-id='35da6582' visibility='default' filepath='include/linux/dmaengine.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='device_prep_dma_memset' type-id='9c36e869' visibility='default' filepath='include/linux/dmaengine.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='device_prep_dma_memset_sg' type-id='81ec80b0' visibility='default' filepath='include/linux/dmaengine.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='device_prep_dma_interrupt' type-id='37513679' visibility='default' filepath='include/linux/dmaengine.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='device_prep_slave_sg' type-id='3cbeb812' visibility='default' filepath='include/linux/dmaengine.h' line='779' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='device_prep_dma_cyclic' type-id='f166bad0' visibility='default' filepath='include/linux/dmaengine.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='device_prep_interleaved_dma' type-id='3e2efc02' visibility='default' filepath='include/linux/dmaengine.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='device_prep_dma_imm_data' type-id='7be3d1f9' visibility='default' filepath='include/linux/dmaengine.h' line='790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='device_config' type-id='81aefe59' visibility='default' filepath='include/linux/dmaengine.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='device_pause' type-id='8425c356' visibility='default' filepath='include/linux/dmaengine.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='device_resume' type-id='8425c356' visibility='default' filepath='include/linux/dmaengine.h' line='797' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='device_terminate_all' type-id='8425c356' visibility='default' filepath='include/linux/dmaengine.h' line='798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='device_synchronize' type-id='42e84365' visibility='default' filepath='include/linux/dmaengine.h' line='799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='device_tx_status' type-id='e4038107' visibility='default' filepath='include/linux/dmaengine.h' line='801' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='device_issue_pending' type-id='42e84365' visibility='default' filepath='include/linux/dmaengine.h' line='804' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dmaengine_unmap_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='463' column='1' id='b32b9ce4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map_cnt' type-id='f9b06939' visibility='default' filepath='include/linux/dmaengine.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='to_cnt' type-id='f9b06939' visibility='default' filepath='include/linux/dmaengine.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='from_cnt' type-id='f9b06939' visibility='default' filepath='include/linux/dmaengine.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bidi_cnt' type-id='f9b06939' visibility='default' filepath='include/linux/dmaengine.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/dmaengine.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/dmaengine.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='len' type-id='b59d7dce' visibility='default' filepath='include/linux/dmaengine.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='addr' type-id='55685a92' visibility='default' filepath='include/linux/dmaengine.h' line='475' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ccee3154' size-in-bits='64' id='aa8ac136'/>
+      <array-type-def dimensions='1' type-id='cf29c9b3' size-in-bits='infinite' id='55685a92'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='81e2e960' size-in-bits='64' id='35da6582'/>
+      <pointer-type-def type-id='bbe0df86' size-in-bits='64' id='2fa81f80'/>
+      <pointer-type-def type-id='22b04425' size-in-bits='64' id='187c2c79'/>
+      <pointer-type-def type-id='d42dfd68' size-in-bits='64' id='3e2efc02'/>
+      <pointer-type-def type-id='c9c16460' size-in-bits='64' id='3cbeb812'/>
+      <pointer-type-def type-id='494c865e' size-in-bits='64' id='81ec80b0'/>
+      <pointer-type-def type-id='08dd4249' size-in-bits='64' id='d37a2705'/>
+      <pointer-type-def type-id='e070d395' size-in-bits='64' id='9c36e869'/>
+      <pointer-type-def type-id='1d86628a' size-in-bits='64' id='16a27d24'/>
+      <pointer-type-def type-id='68595236' size-in-bits='64' id='f166bad0'/>
+      <pointer-type-def type-id='13de152d' size-in-bits='64' id='7be3d1f9'/>
+      <pointer-type-def type-id='e4bb0da5' size-in-bits='64' id='37513679'/>
+      <pointer-type-def type-id='2765d8de' size-in-bits='64' id='114d14e4'/>
+      <pointer-type-def type-id='ea186880' size-in-bits='64' id='f8c8e796'/>
+      <pointer-type-def type-id='bfd10d03' size-in-bits='64' id='70a92833'/>
+      <enum-decl name='dma_ctrl_flags' filepath='include/linux/dmaengine.h' line='180' column='1' id='04baee86'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DMA_PREP_INTERRUPT' value='1'/>
+        <enumerator name='DMA_CTRL_ACK' value='2'/>
+        <enumerator name='DMA_PREP_PQ_DISABLE_P' value='4'/>
+        <enumerator name='DMA_PREP_PQ_DISABLE_Q' value='8'/>
+        <enumerator name='DMA_PREP_CONTINUE' value='16'/>
+        <enumerator name='DMA_PREP_FENCE' value='32'/>
+        <enumerator name='DMA_CTRL_REUSE' value='64'/>
+        <enumerator name='DMA_PREP_CMD' value='128'/>
+      </enum-decl>
+      <enum-decl name='dma_residue_granularity' filepath='include/linux/dmaengine.h' line='389' column='1' id='cad02db3'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DMA_RESIDUE_GRANULARITY_DESCRIPTOR' value='0'/>
+        <enumerator name='DMA_RESIDUE_GRANULARITY_SEGMENT' value='1'/>
+        <enumerator name='DMA_RESIDUE_GRANULARITY_BURST' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='261b7c73' size-in-bits='64' id='e4038107'/>
+      <enum-decl name='dmaengine_alignment' filepath='include/linux/dmaengine.h' line='625' column='1' id='ec506a0a'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DMAENGINE_ALIGN_1_BYTE' value='0'/>
+        <enumerator name='DMAENGINE_ALIGN_2_BYTES' value='1'/>
+        <enumerator name='DMAENGINE_ALIGN_4_BYTES' value='2'/>
+        <enumerator name='DMAENGINE_ALIGN_8_BYTES' value='3'/>
+        <enumerator name='DMAENGINE_ALIGN_16_BYTES' value='4'/>
+        <enumerator name='DMAENGINE_ALIGN_32_BYTES' value='5'/>
+        <enumerator name='DMAENGINE_ALIGN_64_BYTES' value='6'/>
+      </enum-decl>
+      <pointer-type-def type-id='6dd06c9d' size-in-bits='64' id='dccdb2b1'/>
+      <pointer-type-def type-id='04c69dd4' size-in-bits='64' id='8425c356'/>
+      <pointer-type-def type-id='dfde97ed' size-in-bits='64' id='81aefe59'/>
+      <class-decl name='dma_filter' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='655' column='1' id='d914dc7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fn' type-id='55f53546' visibility='default' filepath='include/linux/dmaengine.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mapcnt' type-id='95e97e5e' visibility='default' filepath='include/linux/dmaengine.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='06cc3383' visibility='default' filepath='include/linux/dmaengine.h' line='658' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dma_async_tx_callback' type-id='b7f9d8e6' filepath='include/linux/dmaengine.h' line='446' column='1' id='ee3f36d4'/>
+      <typedef-decl name='dma_async_tx_callback_result' type-id='31316b61' filepath='include/linux/dmaengine.h' line='460' column='1' id='82615040'/>
+      <typedef-decl name='dma_cookie_t' type-id='a7832498' filepath='include/linux/dmaengine.h' line='22' column='1' id='6478ea0a'/>
+      <pointer-type-def type-id='d9866c79' size-in-bits='64' id='fb8c75c5'/>
+      <pointer-type-def type-id='a198c269' size-in-bits='64' id='42e84365'/>
+      <pointer-type-def type-id='de25fc7b' size-in-bits='64' id='06cc3383'/>
+      <class-decl name='dma_chan_dev' size-in-bits='7552' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='281' column='1' id='2765d8de'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chan' type-id='27f3f5d9' visibility='default' filepath='include/linux/dmaengine.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='device' type-id='66e487eb' visibility='default' filepath='include/linux/dmaengine.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='dev_id' type-id='95e97e5e' visibility='default' filepath='include/linux/dmaengine.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='idr_ref' type-id='8a47abc3' visibility='default' filepath='include/linux/dmaengine.h' line='285' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_chan_percpu' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='222' column='1' id='ea186880'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='memcpy_count' type-id='7359adad' visibility='default' filepath='include/linux/dmaengine.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bytes_transferred' type-id='7359adad' visibility='default' filepath='include/linux/dmaengine.h' line='225' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_router' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='233' column='1' id='bfd10d03'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/dmaengine.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='route_free' type-id='680bf43c' visibility='default' filepath='include/linux/dmaengine.h' line='235' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='1c2e282d' size-in-bits='64' id='31316b61'/>
+      <qualified-type-def type-id='848612dc' const='yes' id='de25fc7b'/>
+      <class-decl name='dma_slave_map' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='642' column='1' id='848612dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='devname' type-id='80f4b756' visibility='default' filepath='include/linux/dmaengine.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='slave' type-id='80f4b756' visibility='default' filepath='include/linux/dmaengine.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='param' type-id='eaa32e2f' visibility='default' filepath='include/linux/dmaengine.h' line='645' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/dma/of-dma.c' language='LANG_C89'>
+      <class-decl name='of_dma' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/of_dma.h' line='18' column='1' id='e8681069'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='of_dma_controllers' type-id='72f469ec' visibility='default' filepath='include/linux/of_dma.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/of_dma.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='of_dma_xlate' type-id='04d80927' visibility='default' filepath='include/linux/of_dma.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='of_dma_route_allocate' type-id='d1aa2b6e' visibility='default' filepath='include/linux/of_dma.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dma_router' type-id='70a92833' visibility='default' filepath='include/linux/of_dma.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='of_dma_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/of_dma.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e4a6917b' size-in-bits='64' id='04d80927'/>
+      <pointer-type-def type-id='e8681069' size-in-bits='64' id='2f9b8041'/>
+      <pointer-type-def type-id='bf3013ec' size-in-bits='64' id='d1aa2b6e'/>
+      <function-decl name='of_dma_controller_register' mangled-name='of_dma_controller_register' filepath='drivers/dma/of-dma.c' line='101' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_dma_controller_register'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/dma/of-dma.c' line='101' column='1'/>
+        <parameter type-id='04d80927' name='of_dma_xlate' filepath='drivers/dma/of-dma.c' line='102' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/dma/of-dma.c' line='104' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_dma_controller_free' mangled-name='of_dma_controller_free' filepath='drivers/dma/of-dma.c' line='136' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_dma_controller_free'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/dma/of-dma.c' line='136' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_dma_simple_xlate' mangled-name='of_dma_simple_xlate' filepath='drivers/dma/of-dma.c' line='304' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_dma_simple_xlate'>
+        <parameter type-id='51a94113' name='dma_spec' filepath='drivers/dma/of-dma.c' line='304' column='1'/>
+        <parameter type-id='2f9b8041' name='ofdma' filepath='drivers/dma/of-dma.c' line='305' column='1'/>
+        <return type-id='27f3f5d9'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='e4a6917b'>
+        <parameter type-id='51a94113'/>
+        <parameter type-id='2f9b8041'/>
+        <return type-id='27f3f5d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bf3013ec'>
+        <parameter type-id='51a94113'/>
+        <parameter type-id='2f9b8041'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/extcon/devres.c' language='LANG_C89'>
+      <function-decl name='devm_extcon_dev_allocate' mangled-name='devm_extcon_dev_allocate' filepath='drivers/extcon/devres.c' line='65' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_extcon_dev_allocate'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/extcon/devres.c' line='65' column='1'/>
+        <parameter type-id='5b2fd8e8' name='supported_cable' filepath='drivers/extcon/devres.c' line='66' column='1'/>
+        <return type-id='c0d6fada'/>
+      </function-decl>
+      <function-decl name='devm_extcon_dev_register' mangled-name='devm_extcon_dev_register' filepath='drivers/extcon/devres.c' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_extcon_dev_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/extcon/devres.c' line='118' column='1'/>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/devres.c' line='118' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_extcon_register_notifier_all' mangled-name='devm_extcon_register_notifier_all' filepath='drivers/extcon/devres.c' line='228' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_extcon_register_notifier_all'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/extcon/devres.c' line='228' column='1'/>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/devres.c' line='228' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/extcon/devres.c' line='229' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='87a2d33c' size-in-bits='64' id='c0d6fada'/>
+      <class-decl name='extcon_dev' size-in-bits='8832' is-struct='yes' visibility='default' filepath='drivers/extcon/extcon.h' line='41' column='1' id='87a2d33c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/extcon/extcon.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supported_cable' type-id='5b2fd8e8' visibility='default' filepath='drivers/extcon/extcon.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mutually_exclusive' type-id='aded214c' visibility='default' filepath='drivers/extcon/extcon.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/extcon/extcon.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='nh_all' type-id='96e74f5f' visibility='default' filepath='drivers/extcon/extcon.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='nh' type-id='dc20ab67' visibility='default' filepath='drivers/extcon/extcon.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='drivers/extcon/extcon.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='max_supported' type-id='95e97e5e' visibility='default' filepath='drivers/extcon/extcon.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7840'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='drivers/extcon/extcon.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='state' type-id='19c2251e' visibility='default' filepath='drivers/extcon/extcon.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='extcon_dev_type' type-id='bdae35f4' visibility='default' filepath='drivers/extcon/extcon.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='cables' type-id='e07a8e4c' visibility='default' filepath='drivers/extcon/extcon.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='attr_g_muex' type-id='e4af473b' visibility='default' filepath='drivers/extcon/extcon.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='attrs_muex' type-id='862c676f' visibility='default' filepath='drivers/extcon/extcon.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='d_attrs_muex' type-id='89a2612a' visibility='default' filepath='drivers/extcon/extcon.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='103b4c26' size-in-bits='64' id='e07a8e4c'/>
+      <pointer-type-def type-id='96e74f5f' size-in-bits='64' id='dc20ab67'/>
+      <class-decl name='raw_notifier_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='70' column='1' id='96e74f5f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='d504f73d' visibility='default' filepath='include/linux/notifier.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='extcon_cable' size-in-bits='1664' is-struct='yes' visibility='default' filepath='drivers/extcon/extcon.c' line='200' column='1' id='103b4c26'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='edev' type-id='c0d6fada' visibility='default' filepath='drivers/extcon/extcon.c' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cable_index' type-id='95e97e5e' visibility='default' filepath='drivers/extcon/extcon.c' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attr_g' type-id='e4af473b' visibility='default' filepath='drivers/extcon/extcon.c' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='attr_name' type-id='dbf3947c' visibility='default' filepath='drivers/extcon/extcon.c' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='attr_state' type-id='dbf3947c' visibility='default' filepath='drivers/extcon/extcon.c' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='attrs' type-id='ff62a050' visibility='default' filepath='drivers/extcon/extcon.c' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='usb_propval' type-id='475a4bff' visibility='default' filepath='drivers/extcon/extcon.c' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='chg_propval' type-id='0b5e6ab9' visibility='default' filepath='drivers/extcon/extcon.c' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='jack_propval' type-id='0b5e6ab9' visibility='default' filepath='drivers/extcon/extcon.c' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='disp_propval' type-id='0b5c2c22' visibility='default' filepath='drivers/extcon/extcon.c' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='usb_bits' type-id='f066dd3c' visibility='default' filepath='drivers/extcon/extcon.c' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='chg_bits' type-id='f066dd3c' visibility='default' filepath='drivers/extcon/extcon.c' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='jack_bits' type-id='f066dd3c' visibility='default' filepath='drivers/extcon/extcon.c' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='disp_bits' type-id='f066dd3c' visibility='default' filepath='drivers/extcon/extcon.c' line='218' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='0b001c1f' size-in-bits='192' id='ff62a050'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='282b2805' size-in-bits='32' id='0b5e6ab9'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='282b2805' size-in-bits='64' id='0b5c2c22'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='282b2805' size-in-bits='96' id='475a4bff'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <union-decl name='extcon_property_value' size-in-bits='32' visibility='default' filepath='include/linux/extcon.h' line='162' column='1' id='282b2805'>
+        <data-member access='private'>
+          <var-decl name='intval' type-id='95e97e5e' visibility='default' filepath='include/linux/extcon.h' line='163' column='1'/>
+        </data-member>
+      </union-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/extcon/extcon.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='0b001c1f' size-in-bits='192' id='ff62a050'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='282b2805' size-in-bits='32' id='0b5e6ab9'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='282b2805' size-in-bits='64' id='0b5c2c22'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='282b2805' size-in-bits='96' id='475a4bff'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <class-decl name='extcon_dev' size-in-bits='8832' is-struct='yes' visibility='default' filepath='drivers/extcon/extcon.h' line='41' column='1' id='87a2d33c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/extcon/extcon.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supported_cable' type-id='5b2fd8e8' visibility='default' filepath='drivers/extcon/extcon.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mutually_exclusive' type-id='aded214c' visibility='default' filepath='drivers/extcon/extcon.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/extcon/extcon.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='nh_all' type-id='96e74f5f' visibility='default' filepath='drivers/extcon/extcon.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='nh' type-id='dc20ab67' visibility='default' filepath='drivers/extcon/extcon.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='drivers/extcon/extcon.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='max_supported' type-id='95e97e5e' visibility='default' filepath='drivers/extcon/extcon.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7840'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='drivers/extcon/extcon.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='state' type-id='19c2251e' visibility='default' filepath='drivers/extcon/extcon.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='extcon_dev_type' type-id='bdae35f4' visibility='default' filepath='drivers/extcon/extcon.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='cables' type-id='e07a8e4c' visibility='default' filepath='drivers/extcon/extcon.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='attr_g_muex' type-id='e4af473b' visibility='default' filepath='drivers/extcon/extcon.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='attrs_muex' type-id='862c676f' visibility='default' filepath='drivers/extcon/extcon.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='d_attrs_muex' type-id='89a2612a' visibility='default' filepath='drivers/extcon/extcon.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='extcon_cable' size-in-bits='1664' is-struct='yes' visibility='default' filepath='drivers/extcon/extcon.c' line='200' column='1' id='103b4c26'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='edev' type-id='c0d6fada' visibility='default' filepath='drivers/extcon/extcon.c' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cable_index' type-id='95e97e5e' visibility='default' filepath='drivers/extcon/extcon.c' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attr_g' type-id='e4af473b' visibility='default' filepath='drivers/extcon/extcon.c' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='attr_name' type-id='dbf3947c' visibility='default' filepath='drivers/extcon/extcon.c' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='attr_state' type-id='dbf3947c' visibility='default' filepath='drivers/extcon/extcon.c' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='attrs' type-id='ff62a050' visibility='default' filepath='drivers/extcon/extcon.c' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='usb_propval' type-id='475a4bff' visibility='default' filepath='drivers/extcon/extcon.c' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='chg_propval' type-id='0b5e6ab9' visibility='default' filepath='drivers/extcon/extcon.c' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='jack_propval' type-id='0b5e6ab9' visibility='default' filepath='drivers/extcon/extcon.c' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='disp_propval' type-id='0b5c2c22' visibility='default' filepath='drivers/extcon/extcon.c' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='usb_bits' type-id='f066dd3c' visibility='default' filepath='drivers/extcon/extcon.c' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='chg_bits' type-id='f066dd3c' visibility='default' filepath='drivers/extcon/extcon.c' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='jack_bits' type-id='f066dd3c' visibility='default' filepath='drivers/extcon/extcon.c' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='disp_bits' type-id='f066dd3c' visibility='default' filepath='drivers/extcon/extcon.c' line='218' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='extcon_property_value' size-in-bits='32' visibility='default' filepath='include/linux/extcon.h' line='162' column='1' id='282b2805'>
+        <data-member access='private'>
+          <var-decl name='intval' type-id='95e97e5e' visibility='default' filepath='include/linux/extcon.h' line='163' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='103b4c26' size-in-bits='64' id='e07a8e4c'/>
+      <pointer-type-def type-id='87a2d33c' size-in-bits='64' id='c0d6fada'/>
+      <pointer-type-def type-id='282b2805' size-in-bits='64' id='50842338'/>
+      <function-decl name='extcon_set_state_sync' mangled-name='extcon_set_state_sync' filepath='drivers/extcon/extcon.c' line='577' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_set_state_sync'>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/extcon.c' line='577' column='1'/>
+        <parameter type-id='f0981eeb' name='id' filepath='drivers/extcon/extcon.c' line='577' column='1'/>
+        <parameter type-id='b50a4934' name='state' filepath='drivers/extcon/extcon.c' line='577' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='extcon_get_property' mangled-name='extcon_get_property' filepath='drivers/extcon/extcon.c' line='615' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_get_property'>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/extcon.c' line='615' column='1'/>
+        <parameter type-id='f0981eeb' name='id' filepath='drivers/extcon/extcon.c' line='615' column='1'/>
+        <parameter type-id='f0981eeb' name='prop' filepath='drivers/extcon/extcon.c' line='616' column='1'/>
+        <parameter type-id='50842338' name='prop_val' filepath='drivers/extcon/extcon.c' line='617' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='extcon_set_property' mangled-name='extcon_set_property' filepath='drivers/extcon/extcon.c' line='694' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_set_property'>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/extcon.c' line='694' column='1'/>
+        <parameter type-id='f0981eeb' name='id' filepath='drivers/extcon/extcon.c' line='694' column='1'/>
+        <parameter type-id='f0981eeb' name='prop' filepath='drivers/extcon/extcon.c' line='695' column='1'/>
+        <parameter type-id='282b2805' name='prop_val' filepath='drivers/extcon/extcon.c' line='696' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='extcon_set_property_capability' mangled-name='extcon_set_property_capability' filepath='drivers/extcon/extcon.c' line='816' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_set_property_capability'>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/extcon.c' line='816' column='1'/>
+        <parameter type-id='f0981eeb' name='id' filepath='drivers/extcon/extcon.c' line='816' column='1'/>
+        <parameter type-id='f0981eeb' name='prop' filepath='drivers/extcon/extcon.c' line='817' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='extcon_get_edev_name' mangled-name='extcon_get_edev_name' filepath='drivers/extcon/extcon.c' line='1405' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_get_edev_name'>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/extcon.c' line='1405' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/firmware/arm_scmi/perf.c' language='LANG_C89'>
+      <function-decl name='dev_pm_opp_add' mangled-name='dev_pm_opp_add' filepath='include/linux/pm_opp.h' line='111' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_add'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_remove' mangled-name='dev_pm_opp_remove' filepath='include/linux/pm_opp.h' line='113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_remove'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/firmware/arm_scpi.c' language='LANG_C89'>
+      <function-decl name='devm_of_platform_populate' mangled-name='devm_of_platform_populate' filepath='include/linux/of_platform.h' line='83' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_of_platform_populate'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mbox_free_channel' mangled-name='mbox_free_channel' filepath='include/linux/mailbox_client.h' line='47' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mbox_free_channel'>
+        <parameter type-id='339c87e8'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/firmware/efi/earlycon.c' language='LANG_C89'>
+      <function-decl name='memunmap' mangled-name='memunmap' filepath='include/linux/io.h' line='156' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memunmap'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='memremap' mangled-name='memremap' filepath='include/linux/io.h' line='155' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memremap'>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/firmware/efi/efi.c' language='LANG_C89'>
+      <class-decl name='efi' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/linux/efi.h' line='982' column='1' id='f7bdefe9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='systab' type-id='7e8eb77b' visibility='default' filepath='include/linux/efi.h' line='983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='runtime_version' type-id='f0981eeb' visibility='default' filepath='include/linux/efi.h' line='984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mps' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='acpi' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='acpi20' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='smbios' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='smbios3' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='boot_info' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='hcdp' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='uga' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='992' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fw_vendor' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='993' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='runtime' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='config_table' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='esrt' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='properties_table' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mem_attr_table' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='rng_seed' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='tpm_log' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='1000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tpm_final_log' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='1001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='mem_reserve' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='get_time' type-id='b6c6c0b9' visibility='default' filepath='include/linux/efi.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='set_time' type-id='235cec4d' visibility='default' filepath='include/linux/efi.h' line='1004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='get_wakeup_time' type-id='ce9ca351' visibility='default' filepath='include/linux/efi.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='set_wakeup_time' type-id='00aa9c6d' visibility='default' filepath='include/linux/efi.h' line='1006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='get_variable' type-id='a86f7daa' visibility='default' filepath='include/linux/efi.h' line='1007' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='get_next_variable' type-id='038aa726' visibility='default' filepath='include/linux/efi.h' line='1008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='set_variable' type-id='0f427eae' visibility='default' filepath='include/linux/efi.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='set_variable_nonblocking' type-id='0f427eae' visibility='default' filepath='include/linux/efi.h' line='1010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='query_variable_info' type-id='25269d6f' visibility='default' filepath='include/linux/efi.h' line='1011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='query_variable_info_nonblocking' type-id='25269d6f' visibility='default' filepath='include/linux/efi.h' line='1012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='update_capsule' type-id='9324451e' visibility='default' filepath='include/linux/efi.h' line='1013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='query_capsule_caps' type-id='ef9eae4d' visibility='default' filepath='include/linux/efi.h' line='1014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='get_next_high_mono_count' type-id='7ea36636' visibility='default' filepath='include/linux/efi.h' line='1015' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='reset_system' type-id='bdb2559a' visibility='default' filepath='include/linux/efi.h' line='1016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='set_virtual_address_map' type-id='e48d4733' visibility='default' filepath='include/linux/efi.h' line='1017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='memmap' type-id='1dad91d0' visibility='default' filepath='include/linux/efi.h' line='1018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='1019' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='efi_system_table_t' type-id='d894dae3' filepath='include/linux/efi.h' line='776' column='1' id='b8c997be'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='960' is-struct='yes' is-anonymous='yes' naming-typedef-id='b8c997be' visibility='default' filepath='include/linux/efi.h' line='762' column='1' id='d894dae3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hdr' type-id='2285a0d7' visibility='default' filepath='include/linux/efi.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fw_vendor' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fw_revision' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='con_in_handle' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='con_in' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='con_out_handle' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='con_out' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='stderr_handle' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='stderr' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='runtime' type-id='90150c16' visibility='default' filepath='include/linux/efi.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='boottime' type-id='447dc282' visibility='default' filepath='include/linux/efi.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_tables' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='tables' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='775' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='efi_table_hdr_t' type-id='ffd4b94d' filepath='include/linux/efi.h' line='78' column='1' id='2285a0d7'/>
+      <class-decl name='__anonymous_struct__1' size-in-bits='192' is-struct='yes' is-anonymous='yes' naming-typedef-id='2285a0d7' visibility='default' filepath='include/linux/efi.h' line='72' column='1' id='ffd4b94d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='signature' type-id='91ce1af9' visibility='default' filepath='include/linux/efi.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='revision' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='headersize' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='crc32' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reserved' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='efi_runtime_services_t' type-id='16d09086' filepath='include/linux/efi.h' line='623' column='1' id='50449fbd'/>
+      <class-decl name='__anonymous_struct__2' size-in-bits='1088' is-struct='yes' is-anonymous='yes' naming-typedef-id='50449fbd' visibility='default' filepath='include/linux/efi.h' line='607' column='1' id='16d09086'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hdr' type-id='2285a0d7' visibility='default' filepath='include/linux/efi.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_time' type-id='b6c6c0b9' visibility='default' filepath='include/linux/efi.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_time' type-id='235cec4d' visibility='default' filepath='include/linux/efi.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_wakeup_time' type-id='ce9ca351' visibility='default' filepath='include/linux/efi.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_wakeup_time' type-id='00aa9c6d' visibility='default' filepath='include/linux/efi.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_virtual_address_map' type-id='e48d4733' visibility='default' filepath='include/linux/efi.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='convert_pointer' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_variable' type-id='a86f7daa' visibility='default' filepath='include/linux/efi.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_next_variable' type-id='038aa726' visibility='default' filepath='include/linux/efi.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set_variable' type-id='0f427eae' visibility='default' filepath='include/linux/efi.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_next_high_mono_count' type-id='7ea36636' visibility='default' filepath='include/linux/efi.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reset_system' type-id='bdb2559a' visibility='default' filepath='include/linux/efi.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='update_capsule' type-id='9324451e' visibility='default' filepath='include/linux/efi.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='query_capsule_caps' type-id='ef9eae4d' visibility='default' filepath='include/linux/efi.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='query_variable_info' type-id='25269d6f' visibility='default' filepath='include/linux/efi.h' line='622' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='efi_get_time_t' type-id='2e6b81bc' filepath='include/linux/efi.h' line='573' column='1' id='537afa70'/>
+      <typedef-decl name='efi_status_t' type-id='7359adad' filepath='include/linux/efi.h' line='45' column='1' id='95398de2'/>
+      <typedef-decl name='efi_time_t' type-id='5c952537' filepath='include/linux/efi.h' line='197' column='1' id='dffd2b75'/>
+      <class-decl name='__anonymous_struct__3' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='dffd2b75' visibility='default' filepath='include/linux/efi.h' line='185' column='1' id='5c952537'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='year' type-id='1dc6a898' visibility='default' filepath='include/linux/efi.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='month' type-id='f9b06939' visibility='default' filepath='include/linux/efi.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='day' type-id='f9b06939' visibility='default' filepath='include/linux/efi.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='hour' type-id='f9b06939' visibility='default' filepath='include/linux/efi.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='minute' type-id='f9b06939' visibility='default' filepath='include/linux/efi.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='second' type-id='f9b06939' visibility='default' filepath='include/linux/efi.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='pad1' type-id='f9b06939' visibility='default' filepath='include/linux/efi.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nanosecond' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='timezone' type-id='9b7e9486' visibility='default' filepath='include/linux/efi.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='daylight' type-id='f9b06939' visibility='default' filepath='include/linux/efi.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='pad2' type-id='f9b06939' visibility='default' filepath='include/linux/efi.h' line='196' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='efi_time_cap_t' type-id='4bcfdeda' filepath='include/linux/efi.h' line='203' column='1' id='a4bc3012'/>
+      <class-decl name='__anonymous_struct__4' size-in-bits='96' is-struct='yes' is-anonymous='yes' naming-typedef-id='a4bc3012' visibility='default' filepath='include/linux/efi.h' line='199' column='1' id='4bcfdeda'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='resolution' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='accuracy' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sets_to_zero' type-id='f9b06939' visibility='default' filepath='include/linux/efi.h' line='202' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='efi_set_time_t' type-id='c60add1e' filepath='include/linux/efi.h' line='574' column='1' id='f9110a14'/>
+      <typedef-decl name='efi_get_wakeup_time_t' type-id='39e463ea' filepath='include/linux/efi.h' line='575' column='1' id='50c6d8a2'/>
+      <typedef-decl name='efi_bool_t' type-id='f9b06939' filepath='include/linux/efi.h' line='46' column='1' id='471304a8'/>
+      <typedef-decl name='efi_set_wakeup_time_t' type-id='918f5beb' filepath='include/linux/efi.h' line='577' column='1' id='8d7ff53e'/>
+      <typedef-decl name='efi_set_virtual_address_map_t' type-id='d24eef2f' filepath='include/linux/efi.h' line='588' column='1' id='8bd72250'/>
+      <typedef-decl name='efi_memory_desc_t' type-id='60cb14c6' filepath='include/linux/efi.h' line='129' column='1' id='08f73f9b'/>
+      <class-decl name='__anonymous_struct__5' size-in-bits='320' is-struct='yes' is-anonymous='yes' naming-typedef-id='08f73f9b' visibility='default' filepath='include/linux/efi.h' line='122' column='1' id='60cb14c6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pad' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phys_addr' type-id='91ce1af9' visibility='default' filepath='include/linux/efi.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='virt_addr' type-id='91ce1af9' visibility='default' filepath='include/linux/efi.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_pages' type-id='91ce1af9' visibility='default' filepath='include/linux/efi.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='attribute' type-id='91ce1af9' visibility='default' filepath='include/linux/efi.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='efi_get_variable_t' type-id='184f0729' filepath='include/linux/efi.h' line='578' column='1' id='6dbdd24d'/>
+      <typedef-decl name='efi_char16_t' type-id='1dc6a898' filepath='include/linux/efi.h' line='47' column='1' id='297bd8d7'/>
+      <typedef-decl name='efi_guid_t' type-id='7ae02c0a' filepath='include/linux/efi.h' line='64' column='1' id='1a7f9ac1'/>
+      <typedef-decl name='efi_get_next_variable_t' type-id='11e91b85' filepath='include/linux/efi.h' line='580' column='1' id='60b9862b'/>
+      <typedef-decl name='efi_set_variable_t' type-id='896801a8' filepath='include/linux/efi.h' line='582' column='1' id='90f79ad1'/>
+      <typedef-decl name='efi_get_next_high_mono_count_t' type-id='16242329' filepath='include/linux/efi.h' line='585' column='1' id='b07b2619'/>
+      <typedef-decl name='efi_reset_system_t' type-id='1e4f4e6d' filepath='include/linux/efi.h' line='586' column='1' id='a343ff61'/>
+      <typedef-decl name='efi_update_capsule_t' type-id='0b50e12e' filepath='include/linux/efi.h' line='596' column='1' id='225a561d'/>
+      <typedef-decl name='efi_capsule_header_t' type-id='b74ee25a' filepath='include/linux/efi.h' line='136' column='1' id='09b56f45'/>
+      <class-decl name='__anonymous_struct__6' size-in-bits='224' is-struct='yes' is-anonymous='yes' naming-typedef-id='09b56f45' visibility='default' filepath='include/linux/efi.h' line='131' column='1' id='b74ee25a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='guid' type-id='1a7f9ac1' visibility='default' filepath='include/linux/efi.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='headersize' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='imagesize' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='135' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='efi_query_capsule_caps_t' type-id='558c7602' filepath='include/linux/efi.h' line='599' column='1' id='0112baf0'/>
+      <typedef-decl name='efi_query_variable_info_t' type-id='23aa5fb5' filepath='include/linux/efi.h' line='592' column='1' id='69175bf8'/>
+      <typedef-decl name='efi_boot_services_t' type-id='934f2dd9' filepath='include/linux/efi.h' line='353' column='1' id='98e51d27'/>
+      <class-decl name='__anonymous_struct__7' size-in-bits='3008' is-struct='yes' is-anonymous='yes' naming-typedef-id='98e51d27' visibility='default' filepath='include/linux/efi.h' line='304' column='1' id='934f2dd9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hdr' type-id='2285a0d7' visibility='default' filepath='include/linux/efi.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='raise_tpl' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='restore_tpl' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='allocate_pages' type-id='d222d59e' visibility='default' filepath='include/linux/efi.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='free_pages' type-id='4826f043' visibility='default' filepath='include/linux/efi.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_memory_map' type-id='f5c4c531' visibility='default' filepath='include/linux/efi.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='allocate_pool' type-id='3fe787fe' visibility='default' filepath='include/linux/efi.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='free_pool' type-id='2e721e19' visibility='default' filepath='include/linux/efi.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='create_event' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set_timer' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='wait_for_event' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='signal_event' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='close_event' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='check_event' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='install_protocol_interface' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='reinstall_protocol_interface' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='uninstall_protocol_interface' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='handle_protocol' type-id='cb69985f' visibility='default' filepath='include/linux/efi.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='__reserved' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='register_protocol_notify' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='locate_handle' type-id='b9c037ab' visibility='default' filepath='include/linux/efi.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='locate_device_path' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='install_configuration_table' type-id='031f8a6a' visibility='default' filepath='include/linux/efi.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='load_image' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='start_image' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='exit' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='unload_image' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='exit_boot_services' type-id='a447b31e' visibility='default' filepath='include/linux/efi.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='get_next_monotonic_count' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='stall' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='set_watchdog_timer' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='connect_controller' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='disconnect_controller' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='open_protocol' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='close_protocol' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='open_protocol_information' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='protocols_per_handle' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='locate_handle_buffer' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='locate_protocol' type-id='1193adac' visibility='default' filepath='include/linux/efi.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='install_multiple_protocol_interfaces' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='uninstall_multiple_protocol_interfaces' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='calculate_crc32' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='copy_mem' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='set_mem' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='create_event_ex' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='352' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='efi_physical_addr_t' type-id='91ce1af9' filepath='include/linux/efi.h' line='48' column='1' id='6d42dfa3'/>
+      <typedef-decl name='efi_handle_t' type-id='eaa32e2f' filepath='include/linux/efi.h' line='49' column='1' id='a5e590fa'/>
+      <class-decl name='efi_memory_map' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/efi.h' line='790' column='1' id='1dad91d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='phys_map' type-id='2522883d' visibility='default' filepath='include/linux/efi.h' line='791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='map' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='792' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_end' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_map' type-id='95e97e5e' visibility='default' filepath='include/linux/efi.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='desc_version' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='desc_size' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='late' type-id='b50a4934' visibility='default' filepath='include/linux/efi.h' line='797' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='471304a8' size-in-bits='64' id='b8e34fa5'/>
+      <pointer-type-def type-id='98e51d27' size-in-bits='64' id='447dc282'/>
+      <pointer-type-def type-id='09b56f45' size-in-bits='64' id='744dd502'/>
+      <pointer-type-def type-id='744dd502' size-in-bits='64' id='3e868df8'/>
+      <pointer-type-def type-id='297bd8d7' size-in-bits='64' id='dd5869f0'/>
+      <pointer-type-def type-id='b07b2619' size-in-bits='64' id='7ea36636'/>
+      <pointer-type-def type-id='60b9862b' size-in-bits='64' id='038aa726'/>
+      <pointer-type-def type-id='537afa70' size-in-bits='64' id='b6c6c0b9'/>
+      <pointer-type-def type-id='6dbdd24d' size-in-bits='64' id='a86f7daa'/>
+      <pointer-type-def type-id='50c6d8a2' size-in-bits='64' id='ce9ca351'/>
+      <pointer-type-def type-id='1a7f9ac1' size-in-bits='64' id='e4b4d1d6'/>
+      <pointer-type-def type-id='a5e590fa' size-in-bits='64' id='67ed349f'/>
+      <pointer-type-def type-id='08f73f9b' size-in-bits='64' id='ae05b432'/>
+      <pointer-type-def type-id='6d42dfa3' size-in-bits='64' id='e69cd7f6'/>
+      <pointer-type-def type-id='0112baf0' size-in-bits='64' id='ef9eae4d'/>
+      <pointer-type-def type-id='69175bf8' size-in-bits='64' id='25269d6f'/>
+      <pointer-type-def type-id='a343ff61' size-in-bits='64' id='bdb2559a'/>
+      <pointer-type-def type-id='50449fbd' size-in-bits='64' id='90150c16'/>
+      <pointer-type-def type-id='f9110a14' size-in-bits='64' id='235cec4d'/>
+      <pointer-type-def type-id='90f79ad1' size-in-bits='64' id='0f427eae'/>
+      <pointer-type-def type-id='8bd72250' size-in-bits='64' id='e48d4733'/>
+      <pointer-type-def type-id='8d7ff53e' size-in-bits='64' id='00aa9c6d'/>
+      <pointer-type-def type-id='b8c997be' size-in-bits='64' id='7e8eb77b'/>
+      <pointer-type-def type-id='a4bc3012' size-in-bits='64' id='ec8e2237'/>
+      <pointer-type-def type-id='dffd2b75' size-in-bits='64' id='f7369cc6'/>
+      <pointer-type-def type-id='225a561d' size-in-bits='64' id='9324451e'/>
+      <pointer-type-def type-id='960820a8' size-in-bits='64' id='031f8a6a'/>
+      <pointer-type-def type-id='d49fa262' size-in-bits='64' id='1193adac'/>
+      <pointer-type-def type-id='1a8eee07' size-in-bits='64' id='b9c037ab'/>
+      <pointer-type-def type-id='23d4ef1c' size-in-bits='64' id='d222d59e'/>
+      <pointer-type-def type-id='b45977dc' size-in-bits='64' id='3fe787fe'/>
+      <pointer-type-def type-id='ae26b3c3' size-in-bits='64' id='cb69985f'/>
+      <pointer-type-def type-id='6407f6f4' size-in-bits='64' id='a447b31e'/>
+      <pointer-type-def type-id='6a2c97a7' size-in-bits='64' id='4826f043'/>
+      <pointer-type-def type-id='967bf45d' size-in-bits='64' id='f5c4c531'/>
+      <pointer-type-def type-id='bfb08cad' size-in-bits='64' id='2e721e19'/>
+      <var-decl name='efi' type-id='f7bdefe9' mangled-name='efi' visibility='default' filepath='drivers/firmware/efi/efi.c' line='37' column='1' elf-symbol-id='efi'/>
+      <function-type size-in-bits='64' id='39e463ea'>
+        <parameter type-id='b8e34fa5'/>
+        <parameter type-id='b8e34fa5'/>
+        <parameter type-id='f7369cc6'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='558c7602'>
+        <parameter type-id='3e868df8'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='3df9fd28'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0b50e12e'>
+        <parameter type-id='3e868df8'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='896801a8'>
+        <parameter type-id='dd5869f0'/>
+        <parameter type-id='e4b4d1d6'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='184f0729'>
+        <parameter type-id='dd5869f0'/>
+        <parameter type-id='e4b4d1d6'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='960820a8'>
+        <parameter type-id='e4b4d1d6'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d49fa262'>
+        <parameter type-id='e4b4d1d6'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='63e171df'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c60add1e'>
+        <parameter type-id='f7369cc6'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2e6b81bc'>
+        <parameter type-id='f7369cc6'/>
+        <parameter type-id='ec8e2237'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1a8eee07'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='e4b4d1d6'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='67ed349f'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='23d4ef1c'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='e69cd7f6'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b45977dc'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='63e171df'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='918f5beb'>
+        <parameter type-id='471304a8'/>
+        <parameter type-id='f7369cc6'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ae26b3c3'>
+        <parameter type-id='a5e590fa'/>
+        <parameter type-id='e4b4d1d6'/>
+        <parameter type-id='63e171df'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6407f6f4'>
+        <parameter type-id='a5e590fa'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6a2c97a7'>
+        <parameter type-id='6d42dfa3'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='23aa5fb5'>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='3df9fd28'/>
+        <parameter type-id='3df9fd28'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='16242329'>
+        <parameter type-id='f9409001'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='11e91b85'>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='dd5869f0'/>
+        <parameter type-id='e4b4d1d6'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='967bf45d'>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d24eef2f'>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='ae05b432'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bfb08cad'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1e4f4e6d'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95398de2'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='dd5869f0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <typedef-decl name='guid_t' type-id='8425539a' filepath='include/uapi/linux/uuid.h' line='25' column='1' id='7ae02c0a'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/firmware/efi/libstub/arm-stub.c' language='LANG_C89'>
+      <type-decl name='char' size-in-bits='8' id='a84c031d'/>
+      <type-decl name='int' size-in-bits='32' id='95e97e5e'/>
+      <type-decl name='unsigned long int' size-in-bits='64' id='7359adad'/>
+      <type-decl name='void' id='48b5725f'/>
+      <pointer-type-def type-id='a84c031d' size-in-bits='64' id='26a90f95'/>
+      <qualified-type-def type-id='a84c031d' const='yes' id='9b45d938'/>
+      <pointer-type-def type-id='9b45d938' size-in-bits='64' id='80f4b756'/>
+      <pointer-type-def type-id='96ee24a5' size-in-bits='64' id='585e1de9'/>
+      <pointer-type-def type-id='73a3fbc3' size-in-bits='64' id='97c3bf57'/>
+      <pointer-type-def type-id='48b5725f' size-in-bits='64' id='eaa32e2f'/>
+      <function-decl name='strstr' mangled-name='strstr' filepath='include/linux/string.h' line='81' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strstr'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='sort' mangled-name='sort' filepath='include/linux/sort.h' line='12' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sort'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='585e1de9'/>
+        <parameter type-id='97c3bf57'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='memcpy' filepath='arch/arm64/include/asm/string.h' line='35' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='73a3fbc3'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/firmware/efi/libstub/efi-stub-helper.c' language='LANG_C89'>
+      <function-decl name='strlen' filepath='arch/arm64/include/asm/string.h' line='22' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='80f4b756'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='strncmp' filepath='arch/arm64/include/asm/string.h' line='19' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='memcmp' filepath='arch/arm64/include/asm/string.h' line='28' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/firmware/efi/tpm.c' language='LANG_C89'>
+      <var-decl name='efi_tpm_final_log_size' type-id='95e97e5e' mangled-name='efi_tpm_final_log_size' visibility='default' filepath='drivers/firmware/efi/tpm.c' line='16' column='1' elf-symbol-id='efi_tpm_final_log_size'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gnss/core.c' language='LANG_C89'>
+      <class-decl name='gnss_device' size-in-bits='10048' is-struct='yes' visibility='default' filepath='include/linux/gnss.h' line='37' column='1' id='a272e179'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/gnss.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='cdev' type-id='22f86352' visibility='default' filepath='include/linux/gnss.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/gnss.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='type' type-id='3c695ab8' visibility='default' filepath='include/linux/gnss.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/gnss.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/gnss.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='ops' type-id='b4a76368' visibility='default' filepath='include/linux/gnss.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/linux/gnss.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='disconnected' type-id='f0981eeb' visibility='default' filepath='include/linux/gnss.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='read_mutex' type-id='925167dc' visibility='default' filepath='include/linux/gnss.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='read_fifo' type-id='7664edcc' visibility='default' filepath='include/linux/gnss.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='read_queue' type-id='b5ab048f' visibility='default' filepath='include/linux/gnss.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='write_mutex' type-id='925167dc' visibility='default' filepath='include/linux/gnss.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='write_buf' type-id='26a90f95' visibility='default' filepath='include/linux/gnss.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='gnss_type' filepath='include/linux/gnss.h' line='21' column='1' id='3c695ab8'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='GNSS_TYPE_NMEA' value='0'/>
+        <enumerator name='GNSS_TYPE_SIRF' value='1'/>
+        <enumerator name='GNSS_TYPE_UBX' value='2'/>
+        <enumerator name='GNSS_TYPE_MTK' value='3'/>
+        <enumerator name='GNSS_TYPE_COUNT' value='4'/>
+      </enum-decl>
+      <class-decl name='gnss_operations' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/gnss.h' line='30' column='1' id='9925a3d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='96aaf495' visibility='default' filepath='include/linux/gnss.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='close' type-id='663e4c8c' visibility='default' filepath='include/linux/gnss.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write_raw' type-id='fe2cd2b6' visibility='default' filepath='include/linux/gnss.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kfifo' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1' id='7664edcc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='df24571d' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='buf' type-id='5e6516ee' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1' id='df24571d'>
+        <data-member access='private'>
+          <var-decl name='kfifo' type-id='bbbc6c1e' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='type' type-id='cf536864' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='const_type' type-id='354f7eb9' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rectype' type-id='4209d6b5' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ptr' type-id='eaa32e2f' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ptr_const' type-id='eaa32e2f' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+      </union-decl>
+      <qualified-type-def type-id='9925a3d9' const='yes' id='f320cfd2'/>
+      <pointer-type-def type-id='f320cfd2' size-in-bits='64' id='b4a76368'/>
+      <pointer-type-def type-id='a272e179' size-in-bits='64' id='94411a61'/>
+      <pointer-type-def type-id='7aaadab9' size-in-bits='64' id='96aaf495'/>
+      <pointer-type-def type-id='89407a8c' size-in-bits='64' id='fe2cd2b6'/>
+      <pointer-type-def type-id='75d1367a' size-in-bits='64' id='663e4c8c'/>
+      <function-decl name='gnss_allocate_device' mangled-name='gnss_allocate_device' filepath='drivers/gnss/core.c' line='224' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gnss_allocate_device'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/gnss/core.c' line='224' column='1'/>
+        <return type-id='94411a61'/>
+      </function-decl>
+      <function-decl name='gnss_put_device' mangled-name='gnss_put_device' filepath='drivers/gnss/core.c' line='277' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gnss_put_device'>
+        <parameter type-id='94411a61' name='gdev' filepath='drivers/gnss/core.c' line='277' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gnss_register_device' mangled-name='gnss_register_device' filepath='drivers/gnss/core.c' line='283' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gnss_register_device'>
+        <parameter type-id='94411a61' name='gdev' filepath='drivers/gnss/core.c' line='283' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gnss_deregister_device' mangled-name='gnss_deregister_device' filepath='drivers/gnss/core.c' line='301' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gnss_deregister_device'>
+        <parameter type-id='94411a61' name='gdev' filepath='drivers/gnss/core.c' line='301' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gnss_insert_raw' mangled-name='gnss_insert_raw' filepath='drivers/gnss/core.c' line='320' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gnss_insert_raw'>
+        <parameter type-id='94411a61' name='gdev' filepath='drivers/gnss/core.c' line='320' column='1'/>
+        <parameter type-id='354f7eb9' name='buf' filepath='drivers/gnss/core.c' line='320' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='drivers/gnss/core.c' line='321' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='e84913bd' size-in-bits='64' id='4209d6b5'/>
+      <function-type size-in-bits='64' id='7aaadab9'>
+        <parameter type-id='94411a61'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='89407a8c'>
+        <parameter type-id='94411a61'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='75d1367a'>
+        <parameter type-id='94411a61'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <class-decl name='__kfifo' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/kfifo.h' line='44' column='1' id='bbbc6c1e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='in' type-id='f0981eeb' visibility='default' filepath='include/linux/kfifo.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='out' type-id='f0981eeb' visibility='default' filepath='include/linux/kfifo.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/linux/kfifo.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='esize' type-id='f0981eeb' visibility='default' filepath='include/linux/kfifo.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/kfifo.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpio/gpio-pl061.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='288' id='0d6477e2'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <class-decl name='amba_driver' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/amba/bus.h' line='75' column='1' id='929b60e1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='drv' type-id='fe007c02' visibility='default' filepath='include/linux/amba/bus.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='probe' type-id='3c6ca22d' visibility='default' filepath='include/linux/amba/bus.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='remove' type-id='64cf15f5' visibility='default' filepath='include/linux/amba/bus.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='shutdown' type-id='690433e0' visibility='default' filepath='include/linux/amba/bus.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='id_table' type-id='be3ce245' visibility='default' filepath='include/linux/amba/bus.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='amba_device' size-in-bits='8832' is-struct='yes' visibility='default' filepath='include/linux/amba/bus.h' line='64' column='1' id='92e8f939'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/amba/bus.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='res' type-id='5218160d' visibility='default' filepath='include/linux/amba/bus.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='pclk' type-id='7d0bc0eb' visibility='default' filepath='include/linux/amba/bus.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='periphid' type-id='f0981eeb' visibility='default' filepath='include/linux/amba/bus.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8224'>
+          <var-decl name='cid' type-id='f0981eeb' visibility='default' filepath='include/linux/amba/bus.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='uci' type-id='ca73ce17' visibility='default' filepath='include/linux/amba/bus.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='irq' type-id='0d6477e2' visibility='default' filepath='include/linux/amba/bus.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='driver_override' type-id='26a90f95' visibility='default' filepath='include/linux/amba/bus.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='amba_cs_uci_id' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/amba/bus.h' line='51' column='1' id='ca73ce17'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='devarch' type-id='f0981eeb' visibility='default' filepath='include/linux/amba/bus.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='devarch_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/amba/bus.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='devtype' type-id='f0981eeb' visibility='default' filepath='include/linux/amba/bus.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/amba/bus.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='amba_id' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='638' column='1' id='c0e32d5e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/linux/mod_devicetable.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/linux/mod_devicetable.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mod_devicetable.h' line='641' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='92e8f939' size-in-bits='64' id='ddd322c1'/>
+      <pointer-type-def type-id='929b60e1' size-in-bits='64' id='6e829429'/>
+      <qualified-type-def type-id='c0e32d5e' const='yes' id='860353ed'/>
+      <pointer-type-def type-id='860353ed' size-in-bits='64' id='be3ce245'/>
+      <pointer-type-def type-id='1340ad71' size-in-bits='64' id='64cf15f5'/>
+      <pointer-type-def type-id='d4a58841' size-in-bits='64' id='3c6ca22d'/>
+      <pointer-type-def type-id='d3efde9e' size-in-bits='64' id='690433e0'/>
+      <function-decl name='amba_driver_register' mangled-name='amba_driver_register' filepath='include/linux/amba/bus.h' line='107' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='amba_driver_register'>
+        <parameter type-id='6e829429'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_gpiochip_add_data' mangled-name='devm_gpiochip_add_data' filepath='include/linux/gpio/driver.h' line='501' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_gpiochip_add_data'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_set_irq_wake' mangled-name='irq_set_irq_wake' filepath='include/linux/interrupt.h' line='448' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_irq_wake'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='1340ad71'>
+        <parameter type-id='ddd322c1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d4a58841'>
+        <parameter type-id='ddd322c1'/>
+        <parameter type-id='be3ce245'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d3efde9e'>
+        <parameter type-id='ddd322c1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpio/gpiolib-devres.c' language='LANG_C89'>
+      <function-decl name='devm_gpiod_get' mangled-name='devm_gpiod_get' filepath='drivers/gpio/gpiolib-devres.c' line='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_gpiod_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/gpio/gpiolib-devres.c' line='56' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/gpio/gpiolib-devres.c' line='57' column='1'/>
+        <parameter type-id='38d4936d' name='flags' filepath='drivers/gpio/gpiolib-devres.c' line='58' column='1'/>
+        <return type-id='26760480'/>
+      </function-decl>
+      <function-decl name='devm_gpiod_get_index' mangled-name='devm_gpiod_get_index' filepath='drivers/gpio/gpiolib-devres.c' line='93' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_gpiod_get_index'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/gpio/gpiolib-devres.c' line='93' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/gpio/gpiolib-devres.c' line='94' column='1'/>
+        <parameter type-id='f0981eeb' name='idx' filepath='drivers/gpio/gpiolib-devres.c' line='95' column='1'/>
+        <parameter type-id='38d4936d' name='flags' filepath='drivers/gpio/gpiolib-devres.c' line='96' column='1'/>
+        <return type-id='26760480'/>
+      </function-decl>
+      <function-decl name='devm_gpio_request' mangled-name='devm_gpio_request' filepath='drivers/gpio/gpiolib-devres.c' line='427' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_gpio_request'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/gpio/gpiolib-devres.c' line='427' column='1'/>
+        <parameter type-id='f0981eeb' name='gpio' filepath='drivers/gpio/gpiolib-devres.c' line='427' column='1'/>
+        <parameter type-id='80f4b756' name='label' filepath='drivers/gpio/gpiolib-devres.c' line='427' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpio_request_one' mangled-name='gpio_request_one' filepath='include/asm-generic/gpio.h' line='117' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpio_request_one'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_gpio_free' mangled-name='devm_gpio_free' filepath='drivers/gpio/gpiolib-devres.c' line='489' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_gpio_free'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/gpio/gpiolib-devres.c' line='489' column='1'/>
+        <parameter type-id='f0981eeb' name='gpio' filepath='drivers/gpio/gpiolib-devres.c' line='489' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <enum-decl name='gpiod_flags' filepath='include/linux/gpio/consumer.h' line='48' column='1' id='38d4936d'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='GPIOD_ASIS' value='0'/>
+        <enumerator name='GPIOD_IN' value='1'/>
+        <enumerator name='GPIOD_OUT_LOW' value='3'/>
+        <enumerator name='GPIOD_OUT_HIGH' value='7'/>
+        <enumerator name='GPIOD_OUT_LOW_OPEN_DRAIN' value='11'/>
+        <enumerator name='GPIOD_OUT_HIGH_OPEN_DRAIN' value='15'/>
+      </enum-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpio/gpiolib-legacy.c' language='LANG_C89'>
+      <class-decl name='gpio' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/gpio.h' line='50' column='1' id='84d91c62'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gpio' type-id='f0981eeb' visibility='default' filepath='include/linux/gpio.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/gpio.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='include/linux/gpio.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='84d91c62' const='yes' id='69df97a3'/>
+      <pointer-type-def type-id='69df97a3' size-in-bits='64' id='33fb8cab'/>
+      <function-decl name='gpio_free' mangled-name='gpio_free' filepath='drivers/gpio/gpiolib-legacy.c' line='9' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpio_free'>
+        <parameter type-id='f0981eeb' name='gpio' filepath='drivers/gpio/gpiolib-legacy.c' line='9' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gpio_free_array' mangled-name='gpio_free_array' filepath='drivers/gpio/gpiolib-legacy.c' line='108' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpio_free_array'>
+        <parameter type-id='33fb8cab' name='array' filepath='drivers/gpio/gpiolib-legacy.c' line='108' column='1'/>
+        <parameter type-id='b59d7dce' name='num' filepath='drivers/gpio/gpiolib-legacy.c' line='108' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpio/gpiolib-of.c' language='LANG_C89'>
+      <function-decl name='of_parse_phandle_with_fixed_args' mangled-name='of_parse_phandle_with_fixed_args' filepath='include/linux/of.h' line='373' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_parse_phandle_with_fixed_args'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='51a94113'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpio/gpiolib.c' language='LANG_C89'>
+      <pointer-type-def type-id='eacd3fb9' size-in-bits='64' id='7a52b9cd'/>
+      <function-decl name='desc_to_gpio' mangled-name='desc_to_gpio' filepath='drivers/gpio/gpiolib.c' line='163' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='desc_to_gpio'>
+        <parameter type-id='5bed570d' name='desc' filepath='drivers/gpio/gpiolib.c' line='163' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_get_direction' mangled-name='gpiod_get_direction' filepath='drivers/gpio/gpiolib.c' line='214' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_get_direction'>
+        <parameter type-id='26760480' name='desc' filepath='drivers/gpio/gpiolib.c' line='214' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiochip_find' mangled-name='gpiochip_find' filepath='drivers/gpio/gpiolib.c' line='1600' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_find'>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/gpio/gpiolib.c' line='1600' column='1'/>
+        <parameter type-id='7a52b9cd' name='match' filepath='drivers/gpio/gpiolib.c' line='1601' column='1'/>
+        <return type-id='e324928d'/>
+      </function-decl>
+      <function-decl name='gpiochip_populate_parent_fwspec_fourcell' mangled-name='gpiochip_populate_parent_fwspec_fourcell' filepath='drivers/gpio/gpiolib.c' line='2008' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_populate_parent_fwspec_fourcell'>
+        <parameter type-id='e324928d' name='chip' filepath='drivers/gpio/gpiolib.c' line='2008' column='1'/>
+        <parameter type-id='2869bb38' name='fwspec' filepath='drivers/gpio/gpiolib.c' line='2009' column='1'/>
+        <parameter type-id='f0981eeb' name='parent_hwirq' filepath='drivers/gpio/gpiolib.c' line='2010' column='1'/>
+        <parameter type-id='f0981eeb' name='parent_type' filepath='drivers/gpio/gpiolib.c' line='2011' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gpiochip_generic_request' mangled-name='gpiochip_generic_request' filepath='drivers/gpio/gpiolib.c' line='2502' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_generic_request'>
+        <parameter type-id='e324928d' name='chip' filepath='drivers/gpio/gpiolib.c' line='2502' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/gpio/gpiolib.c' line='2502' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiochip_generic_free' mangled-name='gpiochip_generic_free' filepath='drivers/gpio/gpiolib.c' line='2513' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_generic_free'>
+        <parameter type-id='e324928d' name='chip' filepath='drivers/gpio/gpiolib.c' line='2513' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/gpio/gpiolib.c' line='2513' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gpiod_direction_input' mangled-name='gpiod_direction_input' filepath='drivers/gpio/gpiolib.c' line='2958' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_direction_input'>
+        <parameter type-id='26760480' name='desc' filepath='drivers/gpio/gpiolib.c' line='2958' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_direction_output' mangled-name='gpiod_direction_output' filepath='drivers/gpio/gpiolib.c' line='3082' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_direction_output'>
+        <parameter type-id='26760480' name='desc' filepath='drivers/gpio/gpiolib.c' line='3082' column='1'/>
+        <parameter type-id='95e97e5e' name='value' filepath='drivers/gpio/gpiolib.c' line='3082' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_get_raw_value' mangled-name='gpiod_get_raw_value' filepath='drivers/gpio/gpiolib.c' line='3410' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_get_raw_value'>
+        <parameter type-id='5bed570d' name='desc' filepath='drivers/gpio/gpiolib.c' line='3410' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_get_value' mangled-name='gpiod_get_value' filepath='drivers/gpio/gpiolib.c' line='3429' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_get_value'>
+        <parameter type-id='5bed570d' name='desc' filepath='drivers/gpio/gpiolib.c' line='3429' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_set_raw_value' mangled-name='gpiod_set_raw_value' filepath='drivers/gpio/gpiolib.c' line='3698' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_set_raw_value'>
+        <parameter type-id='26760480' name='desc' filepath='drivers/gpio/gpiolib.c' line='3698' column='1'/>
+        <parameter type-id='95e97e5e' name='value' filepath='drivers/gpio/gpiolib.c' line='3698' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gpiod_set_value' mangled-name='gpiod_set_value' filepath='drivers/gpio/gpiolib.c' line='3739' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_set_value'>
+        <parameter type-id='26760480' name='desc' filepath='drivers/gpio/gpiolib.c' line='3739' column='1'/>
+        <parameter type-id='95e97e5e' name='value' filepath='drivers/gpio/gpiolib.c' line='3739' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gpiod_cansleep' mangled-name='gpiod_cansleep' filepath='drivers/gpio/gpiolib.c' line='3804' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_cansleep'>
+        <parameter type-id='5bed570d' name='desc' filepath='drivers/gpio/gpiolib.c' line='3804' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_set_consumer_name' mangled-name='gpiod_set_consumer_name' filepath='drivers/gpio/gpiolib.c' line='3816' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_set_consumer_name'>
+        <parameter type-id='26760480' name='desc' filepath='drivers/gpio/gpiolib.c' line='3816' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/gpio/gpiolib.c' line='3816' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_get_raw_value_cansleep' mangled-name='gpiod_get_raw_value_cansleep' filepath='drivers/gpio/gpiolib.c' line='4042' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_get_raw_value_cansleep'>
+        <parameter type-id='5bed570d' name='desc' filepath='drivers/gpio/gpiolib.c' line='4042' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_set_raw_value_cansleep' mangled-name='gpiod_set_raw_value_cansleep' filepath='drivers/gpio/gpiolib.c' line='4139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_set_raw_value_cansleep'>
+        <parameter type-id='26760480' name='desc' filepath='drivers/gpio/gpiolib.c' line='4139' column='1'/>
+        <parameter type-id='95e97e5e' name='value' filepath='drivers/gpio/gpiolib.c' line='4139' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gpiod_get' mangled-name='gpiod_get' filepath='drivers/gpio/gpiolib.c' line='4426' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/gpio/gpiolib.c' line='4426' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/gpio/gpiolib.c' line='4426' column='1'/>
+        <parameter type-id='38d4936d' name='flags' filepath='drivers/gpio/gpiolib.c' line='4427' column='1'/>
+        <return type-id='26760480'/>
+      </function-decl>
+      <function-decl name='bus_unregister' mangled-name='bus_unregister' filepath='include/linux/device.h' line='165' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bus_unregister'>
+        <parameter type-id='5e2671f8'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='70bf28f5' size-in-bits='64' id='5bed570d'/>
+      <function-type size-in-bits='64' id='eacd3fb9'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <pointer-type-def type-id='a87c488a' size-in-bits='64' id='2869bb38'/>
+      <qualified-type-def type-id='63b74212' const='yes' id='70bf28f5'/>
+      <class-decl name='irq_fwspec' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/irqdomain.h' line='64' column='1' id='a87c488a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/irqdomain.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='param_count' type-id='95e97e5e' visibility='default' filepath='include/linux/irqdomain.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='param' type-id='02fdec64' visibility='default' filepath='include/linux/irqdomain.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/bridge/panel.c' language='LANG_C89'>
+      <class-decl name='display_timing' is-struct='yes' visibility='default' is-declaration-only='yes' id='fd7f3d28'/>
+      <class-decl name='drm_panel' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/drm/drm_panel.h' line='130' column='1' id='b9675e9f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='drm' type-id='8898134d' visibility='default' filepath='include/drm/drm_panel.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='connector' type-id='4db02c58' visibility='default' filepath='include/drm/drm_panel.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_panel.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='funcs' type-id='cda6c21a' visibility='default' filepath='include/drm/drm_panel.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_panel.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nh' type-id='708c2394' visibility='default' filepath='include/drm/drm_panel.h' line='171' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_panel_funcs' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_panel.h' line='80' column='1' id='3ae2c39f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare' type-id='c3a1efbb' visibility='default' filepath='include/drm/drm_panel.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='enable' type-id='c3a1efbb' visibility='default' filepath='include/drm/drm_panel.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='disable' type-id='c3a1efbb' visibility='default' filepath='include/drm/drm_panel.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unprepare' type-id='c3a1efbb' visibility='default' filepath='include/drm/drm_panel.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_modes' type-id='c3a1efbb' visibility='default' filepath='include/drm/drm_panel.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_timings' type-id='2a614134' visibility='default' filepath='include/drm/drm_panel.h' line='123' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='3ae2c39f' const='yes' id='795e6d94'/>
+      <pointer-type-def type-id='795e6d94' size-in-bits='64' id='cda6c21a'/>
+      <pointer-type-def type-id='fd7f3d28' size-in-bits='64' id='a569b9de'/>
+      <pointer-type-def type-id='b9675e9f' size-in-bits='64' id='c5491077'/>
+      <pointer-type-def type-id='449a6017' size-in-bits='64' id='c3a1efbb'/>
+      <pointer-type-def type-id='ecbba9ca' size-in-bits='64' id='2a614134'/>
+      <function-decl name='drm_bridge_add' mangled-name='drm_bridge_add' filepath='include/drm/drm_bridge.h' line='403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_bridge_add'>
+        <parameter type-id='8582e5ec'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_bridge_remove' mangled-name='drm_bridge_remove' filepath='include/drm/drm_bridge.h' line='404' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_bridge_remove'>
+        <parameter type-id='8582e5ec'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_connector_init' mangled-name='drm_connector_init' filepath='include/drm/drm_connector.h' line='1435' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_init'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='3fb29739'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_panel_attach' mangled-name='drm_panel_attach' filepath='include/drm/drm_panel.h' line='179' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_attach'>
+        <parameter type-id='c5491077'/>
+        <parameter type-id='4db02c58'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_panel_disable' mangled-name='drm_panel_disable' filepath='include/drm/drm_panel.h' line='193' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_disable'>
+        <parameter type-id='c5491077'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_panel_unprepare' mangled-name='drm_panel_unprepare' filepath='include/drm/drm_panel.h' line='190' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_unprepare'>
+        <parameter type-id='c5491077'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_panel_prepare' mangled-name='drm_panel_prepare' filepath='include/drm/drm_panel.h' line='189' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_prepare'>
+        <parameter type-id='c5491077'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_panel_enable' mangled-name='drm_panel_enable' filepath='include/drm/drm_panel.h' line='192' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_enable'>
+        <parameter type-id='c5491077'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_panel_get_modes' mangled-name='drm_panel_get_modes' filepath='include/drm/drm_panel.h' line='195' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_get_modes'>
+        <parameter type-id='c5491077'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='f508b3a9' size-in-bits='64' id='3fb29739'/>
+      <pointer-type-def type-id='87c471e6' size-in-bits='64' id='8582e5ec'/>
+      <pointer-type-def type-id='f02c18fa' size-in-bits='64' id='4db02c58'/>
+      <pointer-type-def type-id='e96cc76d' size-in-bits='64' id='8898134d'/>
+      <function-type size-in-bits='64' id='449a6017'>
+        <parameter type-id='c5491077'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ecbba9ca'>
+        <parameter type-id='c5491077'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='a569b9de'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <qualified-type-def type-id='142d8eca' const='yes' id='f508b3a9'/>
+      <class-decl name='drm_bridge' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/drm/drm_bridge.h' line='378' column='1' id='87c471e6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_bridge.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encoder' type-id='74d89ebd' visibility='default' filepath='include/drm/drm_bridge.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='8582e5ec' visibility='default' filepath='include/drm/drm_bridge.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/drm/drm_bridge.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_bridge.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='timings' type-id='10c598f7' visibility='default' filepath='include/drm/drm_bridge.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='funcs' type-id='39e20e4b' visibility='default' filepath='include/drm/drm_bridge.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='driver_private' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_bridge.h' line='400' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_connector' size-in-bits='14208' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='1087' column='1' id='f02c18fa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_connector.h' line='1089' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kdev' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_connector.h' line='1091' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attr' type-id='89a2612a' visibility='default' filepath='include/drm/drm_connector.h' line='1093' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_connector.h' line='1103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_connector.h' line='1106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/drm/drm_connector.h' line='1109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_connector.h' line='1116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='1124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='connector_type' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='connector_type_id' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='interlace_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1000'>
+          <var-decl name='doublescan_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='stereo_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1016'>
+          <var-decl name='ycbcr_420_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='registration_state' type-id='0b8fe6b9' visibility='default' filepath='include/drm/drm_connector.h' line='1166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='modes' type-id='72f469ec' visibility='default' filepath='include/drm/drm_connector.h' line='1173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='status' type-id='f7b0e1b4' visibility='default' filepath='include/drm/drm_connector.h' line='1180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='probed_modes' type-id='72f469ec' visibility='default' filepath='include/drm/drm_connector.h' line='1188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='display_info' type-id='228c7c6c' visibility='default' filepath='include/drm/drm_connector.h' line='1199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='funcs' type-id='3fb29739' visibility='default' filepath='include/drm/drm_connector.h' line='1202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='edid_blob_ptr' type-id='c4126d52' visibility='default' filepath='include/drm/drm_connector.h' line='1209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='properties' type-id='970d3828' visibility='default' filepath='include/drm/drm_connector.h' line='1212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='scaling_mode_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_connector.h' line='1218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='vrr_capable_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_connector.h' line='1229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='colorspace_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_connector.h' line='1235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='path_blob_ptr' type-id='c4126d52' visibility='default' filepath='include/drm/drm_connector.h' line='1243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='max_bpc_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_connector.h' line='1249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='polled' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11104'>
+          <var-decl name='dpms' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='helper_private' type-id='90133bf8' visibility='default' filepath='include/drm/drm_connector.h' line='1287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='cmdline_mode' type-id='458106cb' visibility='default' filepath='include/drm/drm_connector.h' line='1290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='force' type-id='e1a0be31' visibility='default' filepath='include/drm/drm_connector.h' line='1292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11872'>
+          <var-decl name='override_edid' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='encoder_ids' type-id='6f7eb9e8' visibility='default' filepath='include/drm/drm_connector.h' line='1301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='encoder' type-id='74d89ebd' visibility='default' filepath='include/drm/drm_connector.h' line='1309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='eld' type-id='c768f32d' visibility='default' filepath='include/drm/drm_connector.h' line='1313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='latency_present' type-id='86c49187' visibility='default' filepath='include/drm/drm_connector.h' line='1315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13152'>
+          <var-decl name='video_latency' type-id='e4266c7e' visibility='default' filepath='include/drm/drm_connector.h' line='1320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13216'>
+          <var-decl name='audio_latency' type-id='e4266c7e' visibility='default' filepath='include/drm/drm_connector.h' line='1325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13312'>
+          <var-decl name='ddc' type-id='b9af02c3' visibility='default' filepath='include/drm/drm_connector.h' line='1336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='null_edid_counter' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13408'>
+          <var-decl name='bad_edid_counter' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='1345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13440'>
+          <var-decl name='edid_corrupt' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13448'>
+          <var-decl name='real_edid_checksum' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='1358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='debugfs_entry' type-id='27675065' visibility='default' filepath='include/drm/drm_connector.h' line='1361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13568'>
+          <var-decl name='state' type-id='249ef586' visibility='default' filepath='include/drm/drm_connector.h' line='1377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13632'>
+          <var-decl name='tile_blob_ptr' type-id='c4126d52' visibility='default' filepath='include/drm/drm_connector.h' line='1394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13696'>
+          <var-decl name='has_tile' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13760'>
+          <var-decl name='tile_group' type-id='c6c44b9f' visibility='default' filepath='include/drm/drm_connector.h' line='1399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13824'>
+          <var-decl name='tile_is_single_monitor' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13832'>
+          <var-decl name='num_h_tile' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13840'>
+          <var-decl name='num_v_tile' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13848'>
+          <var-decl name='tile_h_loc' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13856'>
+          <var-decl name='tile_v_loc' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13872'>
+          <var-decl name='tile_h_size' type-id='149c6638' visibility='default' filepath='include/drm/drm_connector.h' line='1411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13888'>
+          <var-decl name='tile_v_size' type-id='149c6638' visibility='default' filepath='include/drm/drm_connector.h' line='1411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13952'>
+          <var-decl name='free_node' type-id='c5ccfee8' visibility='default' filepath='include/drm/drm_connector.h' line='1420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14016'>
+          <var-decl name='hdr_sink_metadata' type-id='b459f8ff' visibility='default' filepath='include/drm/drm_connector.h' line='1423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14144'>
+          <var-decl name='panel' type-id='c5491077' visibility='default' filepath='include/drm/drm_connector.h' line='1430' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_device' size-in-bits='12864' is-struct='yes' visibility='default' filepath='include/drm/drm_device.h' line='53' column='1' id='e96cc76d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='legacy_dev_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='if_version' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_device.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_device.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_device.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='driver' type-id='1d52bc4d' visibility='default' filepath='include/drm/drm_device.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev_private' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_device.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='primary' type-id='6c3b3f8e' visibility='default' filepath='include/drm/drm_device.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='render' type-id='6c3b3f8e' visibility='default' filepath='include/drm/drm_device.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/drm/drm_device.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='master' type-id='07df1a3d' visibility='default' filepath='include/drm/drm_device.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='driver_features' type-id='19c2251e' visibility='default' filepath='include/drm/drm_device.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='unplugged' type-id='b50a4934' visibility='default' filepath='include/drm/drm_device.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='anon_inode' type-id='7e666abe' visibility='default' filepath='include/drm/drm_device.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='unique' type-id='26a90f95' visibility='default' filepath='include/drm/drm_device.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='struct_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='master_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='open_count' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_device.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='filelist_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='filelist' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='filelist_internal' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='clientlist_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='clientlist' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='irq_enabled' type-id='b50a4934' visibility='default' filepath='include/drm/drm_device.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_device.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='vblank_disable_immediate' type-id='b50a4934' visibility='default' filepath='include/drm/drm_device.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='vblank' type-id='04d2f8d2' visibility='default' filepath='include/drm/drm_device.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='vblank_time_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_device.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='vbl_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_device.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='max_vblank_count' type-id='19c2251e' visibility='default' filepath='include/drm/drm_device.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='vblank_event_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='event_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_device.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='agp' type-id='c137ea76' visibility='default' filepath='include/drm/drm_device.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='pdev' type-id='85196e40' visibility='default' filepath='include/drm/drm_device.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='num_crtcs' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_device.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='mode_config' type-id='5052051f' visibility='default' filepath='include/drm/drm_device.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='object_name_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12416'>
+          <var-decl name='object_name_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_device.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12608'>
+          <var-decl name='vma_offset_manager' type-id='0c6d12d5' visibility='default' filepath='include/drm/drm_device.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='vram_mm' type-id='dbdf0f9e' visibility='default' filepath='include/drm/drm_device.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='switch_power_state' type-id='40bb3c00' visibility='default' filepath='include/drm/drm_device.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='fb_helper' type-id='147b8c0a' visibility='default' filepath='include/drm/drm_device.h' line='309' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='b50a4934' size-in-bits='16' id='86c49187'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='545e9343' size-in-bits='64' id='39e20e4b'/>
+      <pointer-type-def type-id='fdc939a7' size-in-bits='64' id='10c598f7'/>
+      <pointer-type-def type-id='3ab32f02' size-in-bits='64' id='90133bf8'/>
+      <pointer-type-def type-id='874fb8c0' size-in-bits='64' id='c137ea76'/>
+      <pointer-type-def type-id='5ad3f0d0' size-in-bits='64' id='249ef586'/>
+      <pointer-type-def type-id='73303b8d' size-in-bits='64' id='1d52bc4d'/>
+      <pointer-type-def type-id='d12f4a1d' size-in-bits='64' id='74d89ebd'/>
+      <pointer-type-def type-id='55b7e9ac' size-in-bits='64' id='147b8c0a'/>
+      <pointer-type-def type-id='f8a4685d' size-in-bits='64' id='07df1a3d'/>
+      <pointer-type-def type-id='d5cb77a8' size-in-bits='64' id='6c3b3f8e'/>
+      <pointer-type-def type-id='811caa36' size-in-bits='64' id='26ea5d4c'/>
+      <pointer-type-def type-id='3dfb1294' size-in-bits='64' id='c4126d52'/>
+      <pointer-type-def type-id='edb008f7' size-in-bits='64' id='c6c44b9f'/>
+      <pointer-type-def type-id='e5ebb0e4' size-in-bits='64' id='04d2f8d2'/>
+      <pointer-type-def type-id='1b04dce5' size-in-bits='64' id='0c6d12d5'/>
+      <pointer-type-def type-id='8008efb8' size-in-bits='64' id='dbdf0f9e'/>
+      <enum-decl name='drm_connector_force' filepath='include/drm/drm_connector.h' line='47' column='1' id='e1a0be31'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_FORCE_UNSPECIFIED' value='0'/>
+        <enumerator name='DRM_FORCE_OFF' value='1'/>
+        <enumerator name='DRM_FORCE_ON' value='2'/>
+        <enumerator name='DRM_FORCE_ON_DIGITAL' value='3'/>
+      </enum-decl>
+      <enum-decl name='drm_connector_registration_state' filepath='include/drm/drm_connector.h' line='95' column='1' id='0b8fe6b9'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_CONNECTOR_INITIALIZING' value='0'/>
+        <enumerator name='DRM_CONNECTOR_REGISTERED' value='1'/>
+        <enumerator name='DRM_CONNECTOR_UNREGISTERED' value='2'/>
+      </enum-decl>
+      <enum-decl name='drm_connector_status' filepath='include/drm/drm_connector.h' line='60' column='1' id='f7b0e1b4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='connector_status_connected' value='1'/>
+        <enumerator name='connector_status_disconnected' value='2'/>
+        <enumerator name='connector_status_unknown' value='3'/>
+      </enum-decl>
+      <enum-decl name='switch_power_state' filepath='include/drm/drm_device.h' line='33' column='1' id='40bb3c00'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_SWITCH_POWER_ON' value='0'/>
+        <enumerator name='DRM_SWITCH_POWER_OFF' value='1'/>
+        <enumerator name='DRM_SWITCH_POWER_CHANGING' value='2'/>
+        <enumerator name='DRM_SWITCH_POWER_DYNAMIC_OFF' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='5c93f9a8' size-in-bits='64' id='85196e40'/>
+      <class-decl name='drm_cmdline_mode' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='968' column='1' id='458106cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/drm/drm_connector.h' line='974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='specified' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='refresh_specified' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='bpp_specified' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='xres' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='yres' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='bpp' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='refresh' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='rb' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='424'>
+          <var-decl name='interlace' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='432'>
+          <var-decl name='cvt' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='440'>
+          <var-decl name='margins' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='force' type-id='e1a0be31' visibility='default' filepath='include/drm/drm_connector.h' line='1061' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='rotation_reflection' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='1071' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='tv_margins' type-id='a38825b1' visibility='default' filepath='include/drm/drm_connector.h' line='1076' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_connector_funcs' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='674' column='1' id='142d8eca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dpms' type-id='d379869f' visibility='default' filepath='include/drm/drm_connector.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reset' type-id='a3cb28f1' visibility='default' filepath='include/drm/drm_connector.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='detect' type-id='9f1392b3' visibility='default' filepath='include/drm/drm_connector.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='force' type-id='a3cb28f1' visibility='default' filepath='include/drm/drm_connector.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fill_modes' type-id='96846df4' visibility='default' filepath='include/drm/drm_connector.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_property' type-id='9a2977d1' visibility='default' filepath='include/drm/drm_connector.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='late_register' type-id='0b8c9d30' visibility='default' filepath='include/drm/drm_connector.h' line='808' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='early_unregister' type-id='a3cb28f1' visibility='default' filepath='include/drm/drm_connector.h' line='821' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='destroy' type-id='a3cb28f1' visibility='default' filepath='include/drm/drm_connector.h' line='831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='atomic_duplicate_state' type-id='be89b2b8' visibility='default' filepath='include/drm/drm_connector.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_destroy_state' type-id='6e5d37e2' visibility='default' filepath='include/drm/drm_connector.h' line='874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_set_property' type-id='69fbf2a0' visibility='default' filepath='include/drm/drm_connector.h' line='919' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_get_property' type-id='456e047e' visibility='default' filepath='include/drm/drm_connector.h' line='942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='atomic_print_state' type-id='b01310d2' visibility='default' filepath='include/drm/drm_connector.h' line='956' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_display_info' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='366' column='1' id='228c7c6c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width_mm' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height_mm' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bpc' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='subpixel_order' type-id='a93e6dcd' visibility='default' filepath='include/drm/drm_connector.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='panel_orientation' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='color_formats' type-id='19c2251e' visibility='default' filepath='include/drm/drm_connector.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bus_formats' type-id='aded214c' visibility='default' filepath='include/drm/drm_connector.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_bus_formats' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='bus_flags' type-id='19c2251e' visibility='default' filepath='include/drm/drm_connector.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_tmds_clock' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='dvi_dual' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='has_hdmi_infoframe' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='rgb_quant_range_selectable' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='376'>
+          <var-decl name='edid_hdmi_dc_modes' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cea_rev' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hdmi' type-id='452748b2' visibility='default' filepath='include/drm/drm_connector.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='non_desktop' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='468' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mode_config' size-in-bits='9152' is-struct='yes' visibility='default' filepath='include/drm/drm_mode_config.h' line='358' column='1' id='5052051f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_mode_config.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connection_mutex' type-id='ae5fc04a' visibility='default' filepath='include/drm/drm_mode_config.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='acquire_ctx' type-id='d1499e71' visibility='default' filepath='include/drm/drm_mode_config.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='idr_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_mode_config.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='object_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_mode_config.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tile_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_mode_config.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='fb_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_mode_config.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='num_fb' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='fb_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='connector_list_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_mode_config.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='num_connector' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='connector_ida' type-id='46ce60fb' visibility='default' filepath='include/drm/drm_mode_config.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='connector_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='connector_free_list' type-id='77df194e' visibility='default' filepath='include/drm/drm_mode_config.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='connector_free_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_mode_config.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='num_encoder' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='encoder_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='num_total_plane' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='plane_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='num_crtc' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='crtc_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='property_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='privobj_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='min_width' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='min_height' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='max_width' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3552'>
+          <var-decl name='max_height' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='funcs' type-id='3f50936e' visibility='default' filepath='include/drm/drm_mode_config.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='fb_base' type-id='acc63fdf' visibility='default' filepath='include/drm/drm_mode_config.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='poll_enabled' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3720'>
+          <var-decl name='poll_running' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3728'>
+          <var-decl name='delayed_event' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='output_poll_work' type-id='5ad6e0ef' visibility='default' filepath='include/drm/drm_mode_config.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='blob_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_mode_config.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='property_blob_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='edid_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='dpms_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='path_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='tile_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='link_status_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='plane_type_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='prop_src_x' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='prop_src_y' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='prop_src_w' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='prop_src_h' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='prop_crtc_x' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='prop_crtc_y' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='prop_crtc_w' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='prop_crtc_h' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='prop_fb_id' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='prop_in_fence_fd' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='prop_out_fence_ptr' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='prop_crtc_id' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='prop_fb_damage_clips' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='prop_active' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='prop_mode_id' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='prop_vrr_enabled' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='dvi_i_subconnector_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='dvi_i_select_subconnector_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='tv_subconnector_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='tv_select_subconnector_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='tv_mode_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='tv_left_margin_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='tv_right_margin_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='tv_top_margin_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='tv_bottom_margin_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='tv_brightness_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='tv_contrast_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='tv_flicker_reduction_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='tv_overscan_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='tv_saturation_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='tv_hue_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='scaling_mode_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='aspect_ratio_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='content_type_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='degamma_lut_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='degamma_lut_size_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='ctm_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='gamma_lut_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='gamma_lut_size_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='suggested_x_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='suggested_y_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='800' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='non_desktop_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='panel_orientation_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='writeback_fb_id_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='821' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='writeback_pixel_formats_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='writeback_out_fence_ptr_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='837' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='hdr_output_metadata_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='content_protection_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='hdcp_content_type_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='preferred_depth' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_config.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8800'>
+          <var-decl name='prefer_shadow' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_config.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='prefer_shadow_fbdev' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8840'>
+          <var-decl name='quirk_addfb_prefer_xbgr_30bpp' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8848'>
+          <var-decl name='quirk_addfb_prefer_host_byte_order' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8856'>
+          <var-decl name='async_page_flip' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8864'>
+          <var-decl name='allow_fb_modifiers' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8872'>
+          <var-decl name='normalize_zpos' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='modifiers_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='cursor_width' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_config.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8992'>
+          <var-decl name='cursor_height' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_config.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='suspend_state' type-id='e3dd029e' visibility='default' filepath='include/drm/drm_mode_config.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='helper_private' type-id='dc79526d' visibility='default' filepath='include/drm/drm_mode_config.h' line='929' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mode_object' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_mode_object.h' line='55' column='1' id='350f4182'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_object.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_object.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='properties' type-id='c353cb3e' visibility='default' filepath='include/drm/drm_mode_object.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/drm/drm_mode_object.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='free_cb' type-id='16575f26' visibility='default' filepath='include/drm/drm_mode_object.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_object_properties' size-in-bits='8256' is-struct='yes' visibility='default' filepath='include/drm/drm_mode_object.h' line='67' column='1' id='970d3828'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_object.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='properties' type-id='53f04f9e' visibility='default' filepath='include/drm/drm_mode_object.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='values' type-id='ed4ceada' visibility='default' filepath='include/drm/drm_mode_object.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hdr_sink_metadata' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='375' column='1' id='b459f8ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='metadata_type' type-id='3f1a6b60' visibility='default' filepath='include/linux/hdmi.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='' type-id='c778239e' visibility='default' filepath='include/linux/hdmi.h' line='383' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='uint16_t' type-id='1dc6a898' filepath='include/linux/types.h' line='108' column='1' id='149c6638'/>
+      <array-type-def dimensions='1' type-id='8f92235e' size-in-bits='96' id='6f7eb9e8'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b96825af' size-in-bits='1024' id='c768f32d'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <qualified-type-def type-id='5e0dec46' const='yes' id='545e9343'/>
+      <qualified-type-def type-id='0c695772' const='yes' id='fdc939a7'/>
+      <qualified-type-def type-id='c571b65b' const='yes' id='3ab32f02'/>
+      <pointer-type-def type-id='59fa7bb0' size-in-bits='64' id='3f50936e'/>
+      <pointer-type-def type-id='82c5dbd5' size-in-bits='64' id='dc79526d'/>
+      <pointer-type-def type-id='8bb9a8e8' size-in-bits='64' id='e3dd029e'/>
+      <pointer-type-def type-id='e184aa4e' size-in-bits='64' id='be89b2b8'/>
+      <pointer-type-def type-id='118c2af9' size-in-bits='64' id='d1499e71'/>
+      <pointer-type-def type-id='970d3828' size-in-bits='64' id='c353cb3e'/>
+      <array-type-def dimensions='1' type-id='26ea5d4c' size-in-bits='4096' id='53f04f9e'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <pointer-type-def type-id='746df737' size-in-bits='64' id='9f1392b3'/>
+      <enum-decl name='subpixel_order' filepath='include/drm/drm_connector.h' line='134' column='1' id='a93e6dcd'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SubPixelUnknown' value='0'/>
+        <enumerator name='SubPixelHorizontalRGB' value='1'/>
+        <enumerator name='SubPixelHorizontalBGR' value='2'/>
+        <enumerator name='SubPixelVerticalRGB' value='3'/>
+        <enumerator name='SubPixelVerticalBGR' value='4'/>
+        <enumerator name='SubPixelNone' value='5'/>
+      </enum-decl>
+      <pointer-type-def type-id='f1babf06' size-in-bits='64' id='0b8c9d30'/>
+      <pointer-type-def type-id='6d905adc' size-in-bits='64' id='456e047e'/>
+      <pointer-type-def type-id='f43da4de' size-in-bits='64' id='69fbf2a0'/>
+      <pointer-type-def type-id='97471c35' size-in-bits='64' id='9a2977d1'/>
+      <pointer-type-def type-id='4dedc1bb' size-in-bits='64' id='d379869f'/>
+      <pointer-type-def type-id='699ab992' size-in-bits='64' id='96846df4'/>
+      <class-decl name='drm_agp_head' is-struct='yes' visibility='default' is-declaration-only='yes' id='874fb8c0'/>
+      <class-decl name='drm_connector_state' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='530' column='1' id='5ad3f0d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='connector' type-id='4db02c58' visibility='default' filepath='include/drm/drm_connector.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_connector.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='best_encoder' type-id='74d89ebd' visibility='default' filepath='include/drm/drm_connector.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='link_status' type-id='a28dfadd' visibility='default' filepath='include/drm/drm_connector.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='state' type-id='e3dd029e' visibility='default' filepath='include/drm/drm_connector.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='commit' type-id='3f40b771' visibility='default' filepath='include/drm/drm_connector.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='tv' type-id='25b5f0d7' visibility='default' filepath='include/drm/drm_connector.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='self_refresh_aware' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='picture_aspect_ratio' type-id='a30ccd44' visibility='default' filepath='include/drm/drm_connector.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='content_type' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='hdcp_content_type' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='scaling_mode' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='content_protection' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='colorspace' type-id='19c2251e' visibility='default' filepath='include/drm/drm_connector.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='writeback_job' type-id='7b4ee155' visibility='default' filepath='include/drm/drm_connector.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='max_requested_bpc' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1096'>
+          <var-decl name='max_bpc' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hdr_output_metadata' type-id='c4126d52' visibility='default' filepath='include/drm/drm_connector.h' line='664' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_connector_tv_margins' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='481' column='1' id='a38825b1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bottom' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='left' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='right' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='top' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='500' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_driver' is-struct='yes' visibility='default' is-declaration-only='yes' id='73303b8d'/>
+      <class-decl name='drm_encoder' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/drm/drm_encoder.h' line='99' column='1' id='d12f4a1d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_encoder.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_encoder.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_encoder.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/drm/drm_encoder.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='encoder_type' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_encoder.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_encoder.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='possible_crtcs' type-id='8f92235e' visibility='default' filepath='include/drm/drm_encoder.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='possible_clones' type-id='8f92235e' visibility='default' filepath='include/drm/drm_encoder.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_encoder.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='bridge' type-id='8582e5ec' visibility='default' filepath='include/drm/drm_encoder.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='funcs' type-id='1701f1ac' visibility='default' filepath='include/drm/drm_encoder.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='helper_private' type-id='32162fa7' visibility='default' filepath='include/drm/drm_encoder.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_fb_helper' size-in-bits='2880' is-struct='yes' visibility='default' filepath='include/drm/drm_fb_helper.h' line='114' column='1' id='55b7e9ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='client' type-id='0ab6a08c' visibility='default' filepath='include/drm/drm_fb_helper.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='buffer' type-id='b78e1fbb' visibility='default' filepath='include/drm/drm_fb_helper.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_fb_helper.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_fb_helper.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='funcs' type-id='b4872443' visibility='default' filepath='include/drm/drm_fb_helper.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fbdev' type-id='9f763fd8' visibility='default' filepath='include/drm/drm_fb_helper.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pseudo_palette' type-id='46fc18d9' visibility='default' filepath='include/drm/drm_fb_helper.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='dirty_clip' type-id='ec280828' visibility='default' filepath='include/drm/drm_fb_helper.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='dirty_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_fb_helper.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dirty_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_fb_helper.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='resume_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_fb_helper.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_fb_helper.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='kernel_fb_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_fb_helper.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='delayed_hotplug' type-id='b50a4934' visibility='default' filepath='include/drm/drm_fb_helper.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2824'>
+          <var-decl name='deferred_setup' type-id='b50a4934' visibility='default' filepath='include/drm/drm_fb_helper.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='preferred_bpp' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_fb_helper.h' line='188' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_hdmi_info' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='186' column='1' id='452748b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scdc' type-id='2c7c7fd8' visibility='default' filepath='include/drm/drm_connector.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='y420_vdb_modes' type-id='f05e8e77' visibility='default' filepath='include/drm/drm_connector.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='y420_cmdb_modes' type-id='f05e8e77' visibility='default' filepath='include/drm/drm_connector.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='y420_cmdb_map' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_connector.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='y420_dc_modes' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='210' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_master' is-struct='yes' visibility='default' is-declaration-only='yes' id='f8a4685d'/>
+      <class-decl name='drm_minor' is-struct='yes' visibility='default' is-declaration-only='yes' id='d5cb77a8'/>
+      <class-decl name='drm_modeset_lock' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='76' column='1' id='ae5fc04a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='45793a97' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_property' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/drm/drm_property.h' line='73' column='1' id='811caa36'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_property.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_property.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='8f92235e' visibility='default' filepath='include/drm/drm_property.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/drm/drm_property.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='num_values' type-id='8f92235e' visibility='default' filepath='include/drm/drm_property.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='values' type-id='5d6479ae' visibility='default' filepath='include/drm/drm_property.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_property.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='enum_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_property.h' line='190' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_property_blob' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/drm/drm_property.h' line='209' column='1' id='3dfb1294'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_property.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_property.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='head_global' type-id='72f469ec' visibility='default' filepath='include/drm/drm_property.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='head_file' type-id='72f469ec' visibility='default' filepath='include/drm/drm_property.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='length' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_property.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_property.h' line='215' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_tile_group' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='1576' column='1' id='edb008f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/drm/drm_connector.h' line='1577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_connector.h' line='1578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='group_data' type-id='d2f7b56a' visibility='default' filepath='include/drm/drm_connector.h' line='1580' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_vblank_crtc' is-struct='yes' visibility='default' is-declaration-only='yes' id='e5ebb0e4'/>
+      <class-decl name='drm_vma_offset_manager' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/drm/drm_vma_manager.h' line='59' column='1' id='1b04dce5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vm_lock' type-id='ac16795b' visibility='default' filepath='include/drm/drm_vma_manager.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vm_addr_space_mm' type-id='0b8ea949' visibility='default' filepath='include/drm/drm_vma_manager.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_vram_mm' is-struct='yes' visibility='default' is-declaration-only='yes' id='8008efb8'/>
+      <class-decl name='pci_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='5c93f9a8'/>
+      <array-type-def dimensions='1' type-id='9c313c2d' size-in-bits='4096' id='ed4ceada'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <union-decl name='__anonymous_union__11' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/hdmi.h' line='383' column='1' id='c778239e'>
+        <data-member access='private'>
+          <var-decl name='hdmi_type1' type-id='4ba022f8' visibility='default' filepath='include/linux/hdmi.h' line='384' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='cecfa2ad' size-in-bits='64' id='a3cb28f1'/>
+      <pointer-type-def type-id='07c62f88' size-in-bits='64' id='6e5d37e2'/>
+      <pointer-type-def type-id='6f026338' size-in-bits='64' id='b01310d2'/>
+      <pointer-type-def type-id='4dd76d14' size-in-bits='64' id='16575f26'/>
+      <pointer-type-def type-id='532f030e' size-in-bits='64' id='1701f1ac'/>
+      <pointer-type-def type-id='d4db3637' size-in-bits='64' id='32162fa7'/>
+      <pointer-type-def type-id='2b48c0bb' size-in-bits='64' id='b4872443'/>
+      <qualified-type-def type-id='b444361f' const='yes' id='59fa7bb0'/>
+      <qualified-type-def type-id='fa206174' const='yes' id='82c5dbd5'/>
+      <pointer-type-def type-id='2a13094b' size-in-bits='64' id='b78e1fbb'/>
+      <pointer-type-def type-id='3f5f978b' size-in-bits='64' id='b64ad7cb'/>
+      <pointer-type-def type-id='09d6e909' size-in-bits='64' id='3f40b771'/>
+      <pointer-type-def type-id='a0eb3346' size-in-bits='64' id='7b332e1c'/>
+      <pointer-type-def type-id='71f18ea5' size-in-bits='64' id='7b4ee155'/>
+      <enum-decl name='drm_link_status' filepath='include/drm/drm_connector.h' line='224' column='1' id='a28dfadd'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_LINK_STATUS_GOOD' value='0'/>
+        <enumerator name='DRM_LINK_STATUS_BAD' value='1'/>
+      </enum-decl>
+      <enum-decl name='hdmi_picture_aspect' filepath='include/linux/hdmi.h' line='95' column='1' id='a30ccd44'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_PICTURE_ASPECT_NONE' value='0'/>
+        <enumerator name='HDMI_PICTURE_ASPECT_4_3' value='1'/>
+        <enumerator name='HDMI_PICTURE_ASPECT_16_9' value='2'/>
+        <enumerator name='HDMI_PICTURE_ASPECT_64_27' value='3'/>
+        <enumerator name='HDMI_PICTURE_ASPECT_256_135' value='4'/>
+        <enumerator name='HDMI_PICTURE_ASPECT_RESERVED' value='5'/>
+      </enum-decl>
+      <pointer-type-def type-id='f546887a' size-in-bits='64' id='9f763fd8'/>
+      <class-decl name='drm_atomic_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='8bb9a8e8'/>
+      <class-decl name='drm_bridge_funcs' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/drm/drm_bridge.h' line='38' column='1' id='5e0dec46'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attach' type-id='901effb6' visibility='default' filepath='include/drm/drm_bridge.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='detach' type-id='e1fb15d1' visibility='default' filepath='include/drm/drm_bridge.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode_valid' type-id='2c8c8c19' visibility='default' filepath='include/drm/drm_bridge.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mode_fixup' type-id='ea44fe69' visibility='default' filepath='include/drm/drm_bridge.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='disable' type-id='e1fb15d1' visibility='default' filepath='include/drm/drm_bridge.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='post_disable' type-id='e1fb15d1' visibility='default' filepath='include/drm/drm_bridge.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mode_set' type-id='63662edb' visibility='default' filepath='include/drm/drm_bridge.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pre_enable' type-id='e1fb15d1' visibility='default' filepath='include/drm/drm_bridge.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='enable' type-id='e1fb15d1' visibility='default' filepath='include/drm/drm_bridge.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='atomic_pre_enable' type-id='ff30d95c' visibility='default' filepath='include/drm/drm_bridge.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_enable' type-id='ff30d95c' visibility='default' filepath='include/drm/drm_bridge.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_disable' type-id='ff30d95c' visibility='default' filepath='include/drm/drm_bridge.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_post_disable' type-id='ff30d95c' visibility='default' filepath='include/drm/drm_bridge.h' line='335' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_bridge_timings' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_bridge.h' line='342' column='1' id='0c695772'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='input_bus_flags' type-id='19c2251e' visibility='default' filepath='include/drm/drm_bridge.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='setup_time_ps' type-id='19c2251e' visibility='default' filepath='include/drm/drm_bridge.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hold_time_ps' type-id='19c2251e' visibility='default' filepath='include/drm/drm_bridge.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dual_link' type-id='b50a4934' visibility='default' filepath='include/drm/drm_bridge.h' line='372' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_client_dev' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/drm/drm_client.h' line='65' column='1' id='0ab6a08c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_client.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/drm/drm_client.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_client.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='funcs' type-id='67ede465' visibility='default' filepath='include/drm/drm_client.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='file' type-id='9e99ecc1' visibility='default' filepath='include/drm/drm_client.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='modeset_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_client.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='modesets' type-id='8106240b' visibility='default' filepath='include/drm/drm_client.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_clip_rect' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm.h' line='97' column='1' id='ec280828'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x1' type-id='8efea9e5' visibility='default' filepath='include/uapi/drm/drm.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='y1' type-id='8efea9e5' visibility='default' filepath='include/uapi/drm/drm.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='x2' type-id='8efea9e5' visibility='default' filepath='include/uapi/drm/drm.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='y2' type-id='8efea9e5' visibility='default' filepath='include/uapi/drm/drm.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_connector_helper_funcs' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='837' column='1' id='c571b65b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_modes' type-id='0b8c9d30' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='detect_ctx' type-id='a8bd8fa1' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode_valid' type-id='ff7f72b4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='best_encoder' type-id='a4de2233' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='969' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='atomic_best_encoder' type-id='0b5f3d7c' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_check' type-id='2e18356f' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_commit' type-id='6e5d37e2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='prepare_writeback_job' type-id='a92ff885' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cleanup_writeback_job' type-id='b781f274' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1050' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mm' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/drm/drm_mm.h' line='186' column='1' id='0b8ea949'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='color_adjust' type-id='4bcdfb80' visibility='default' filepath='include/drm/drm_mm.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hole_stack' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mm.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='head_node' type-id='60498a7e' visibility='default' filepath='include/drm/drm_mm.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='interval_tree' type-id='6fe1603d' visibility='default' filepath='include/drm/drm_mm.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='holes_size' type-id='6fe1603d' visibility='default' filepath='include/drm/drm_mm.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='holes_addr' type-id='dec44472' visibility='default' filepath='include/drm/drm_mm.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='scan_active' type-id='7359adad' visibility='default' filepath='include/drm/drm_mm.h' line='211' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_modeset_acquire_ctx' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='43' column='1' id='118c2af9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ww_ctx' type-id='2c45f76e' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='contended' type-id='b4b06bb8' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='locked' type-id='72f469ec' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='trylock_only' type-id='b50a4934' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='interruptible' type-id='b50a4934' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_scdc' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='164' column='1' id='2c7c7fd8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='read_request' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='scrambling' type-id='beea899b' visibility='default' filepath='include/drm/drm_connector.h' line='176' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_tv_connector_state' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='515' column='1' id='25b5f0d7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subconnector' type-id='b590704f' visibility='default' filepath='include/drm/drm_connector.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='margins' type-id='a38825b1' visibility='default' filepath='include/drm/drm_connector.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='mode' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='brightness' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='contrast' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flicker_reduction' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='overscan' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='saturation' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='hue' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='524' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hdr_static_metadata' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='362' column='1' id='4ba022f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='eotf' type-id='8f048e17' visibility='default' filepath='include/linux/hdmi.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='metadata_type' type-id='8f048e17' visibility='default' filepath='include/linux/hdmi.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='max_cll' type-id='d315442e' visibility='default' filepath='include/linux/hdmi.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_fall' type-id='d315442e' visibility='default' filepath='include/linux/hdmi.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='min_cll' type-id='d315442e' visibility='default' filepath='include/linux/hdmi.h' line='367' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9c313c2d' size-in-bits='64' id='5d6479ae'/>
+      <pointer-type-def type-id='34401d0d' size-in-bits='64' id='67ede465'/>
+      <qualified-type-def type-id='c20384d9' const='yes' id='532f030e'/>
+      <qualified-type-def type-id='3cdc7e32' const='yes' id='d4db3637'/>
+      <qualified-type-def type-id='1a200140' const='yes' id='2b48c0bb'/>
+      <pointer-type-def type-id='a843bacf' size-in-bits='64' id='a4de2233'/>
+      <pointer-type-def type-id='79256f62' size-in-bits='64' id='0b5f3d7c'/>
+      <pointer-type-def type-id='cc4a63b9' size-in-bits='64' id='9e99ecc1'/>
+      <pointer-type-def type-id='ef266a3b' size-in-bits='64' id='8106240b'/>
+      <pointer-type-def type-id='ae5fc04a' size-in-bits='64' id='b4b06bb8'/>
+      <pointer-type-def type-id='013ba5ed' size-in-bits='64' id='2c8c8c19'/>
+      <pointer-type-def type-id='b938ea42' size-in-bits='64' id='ff7f72b4'/>
+      <enum-decl name='drm_mode_subconnector' filepath='include/uapi/drm/drm_mode.h' line='344' column='1' id='b590704f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_Automatic' value='0'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_Unknown' value='0'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_DVID' value='3'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_DVIA' value='4'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_Composite' value='5'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_SVIDEO' value='6'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_Component' value='8'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_SCART' value='9'/>
+      </enum-decl>
+      <pointer-type-def type-id='e8862ab4' size-in-bits='64' id='901effb6'/>
+      <pointer-type-def type-id='32d07fab' size-in-bits='64' id='2e18356f'/>
+      <pointer-type-def type-id='eeda2e3d' size-in-bits='64' id='a8bd8fa1'/>
+      <pointer-type-def type-id='82d08b71' size-in-bits='64' id='a92ff885'/>
+      <class-decl name='drm_client_buffer' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/drm/drm_client.h' line='117' column='1' id='2a13094b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='client' type-id='cc1804ea' visibility='default' filepath='include/drm/drm_client.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='handle' type-id='19c2251e' visibility='default' filepath='include/drm/drm_client.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pitch' type-id='19c2251e' visibility='default' filepath='include/drm/drm_client.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gem' type-id='abd62a96' visibility='default' filepath='include/drm/drm_client.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vaddr' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_client.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_client.h' line='146' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc' size-in-bits='14528' is-struct='yes' visibility='default' filepath='include/drm/drm_crtc.h' line='879' column='1' id='3f5f978b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_crtc.h' line='881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='port' type-id='9a537bbe' visibility='default' filepath='include/drm/drm_crtc.h' line='883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_crtc.h' line='891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/drm/drm_crtc.h' line='894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mutex' type-id='ae5fc04a' visibility='default' filepath='include/drm/drm_crtc.h' line='906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_crtc.h' line='909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='primary' type-id='a6711537' visibility='default' filepath='include/drm/drm_crtc.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cursor' type-id='a6711537' visibility='default' filepath='include/drm/drm_crtc.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_crtc.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='cursor_x' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_crtc.h' line='942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='cursor_y' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_crtc.h' line='950' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='enabled' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='960' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mode' type-id='55efd1a3' visibility='default' filepath='include/drm/drm_crtc.h' line='970' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='hwmode' type-id='55efd1a3' visibility='default' filepath='include/drm/drm_crtc.h' line='985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='x' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_crtc.h' line='994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4640'>
+          <var-decl name='y' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_crtc.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='funcs' type-id='7236c5c8' visibility='default' filepath='include/drm/drm_crtc.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='gamma_size' type-id='8f92235e' visibility='default' filepath='include/drm/drm_crtc.h' line='1011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='gamma_store' type-id='8a121f49' visibility='default' filepath='include/drm/drm_crtc.h' line='1017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='helper_private' type-id='423f39eb' visibility='default' filepath='include/drm/drm_crtc.h' line='1020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='properties' type-id='970d3828' visibility='default' filepath='include/drm/drm_crtc.h' line='1023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='state' type-id='35078cb9' visibility='default' filepath='include/drm/drm_crtc.h' line='1038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='commit_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_crtc.h' line='1055' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='commit_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_crtc.h' line='1062' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13440'>
+          <var-decl name='debugfs_entry' type-id='27675065' visibility='default' filepath='include/drm/drm_crtc.h' line='1070' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='crc' type-id='3bcab18a' visibility='default' filepath='include/drm/drm_crtc.h' line='1078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14080'>
+          <var-decl name='fence_context' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_crtc.h' line='1085' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14112'>
+          <var-decl name='fence_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_crtc.h' line='1092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14144'>
+          <var-decl name='fence_seqno' type-id='7359adad' visibility='default' filepath='include/drm/drm_crtc.h' line='1099' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14208'>
+          <var-decl name='timeline_name' type-id='16dc656a' visibility='default' filepath='include/drm/drm_crtc.h' line='1106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14464'>
+          <var-decl name='self_refresh_data' type-id='fa013de0' visibility='default' filepath='include/drm/drm_crtc.h' line='1113' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc_commit' is-struct='yes' visibility='default' is-declaration-only='yes' id='09d6e909'/>
+      <class-decl name='drm_framebuffer' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/drm/drm_framebuffer.h' line='117' column='1' id='a0eb3346'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_framebuffer.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_framebuffer.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_framebuffer.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='comm' type-id='ac1fa8c0' visibility='default' filepath='include/drm/drm_framebuffer.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='format' type-id='f10b2208' visibility='default' filepath='include/drm/drm_framebuffer.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='funcs' type-id='8e992c3d' visibility='default' filepath='include/drm/drm_framebuffer.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='pitches' type-id='49580a63' visibility='default' filepath='include/drm/drm_framebuffer.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='offsets' type-id='49580a63' visibility='default' filepath='include/drm/drm_framebuffer.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='modifier' type-id='9c313c2d' visibility='default' filepath='include/drm/drm_framebuffer.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='width' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_framebuffer.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='height' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_framebuffer.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_framebuffer.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='hot_x' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_framebuffer.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hot_y' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_framebuffer.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='filp_head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_framebuffer.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='obj' type-id='a459476c' visibility='default' filepath='include/drm/drm_framebuffer.h' line='213' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mm_node' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/drm/drm_mm.h' line='155' column='1' id='60498a7e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='color' type-id='7359adad' visibility='default' filepath='include/drm/drm_mm.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='start' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_mm.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_mm.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mm' type-id='0ee978f1' visibility='default' filepath='include/drm/drm_mm.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='node_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mm.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='hole_stack' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mm.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rb' type-id='2a8a6332' visibility='default' filepath='include/drm/drm_mm.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rb_hole_size' type-id='2a8a6332' visibility='default' filepath='include/drm/drm_mm.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rb_hole_addr' type-id='2a8a6332' visibility='default' filepath='include/drm/drm_mm.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='__subtree_last' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_mm.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hole_size' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_mm.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='allocated' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mm.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='scanned_block' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mm.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mode_config_funcs' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/drm/drm_mode_config.h' line='47' column='1' id='b444361f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb_create' type-id='fd8daf85' visibility='default' filepath='include/drm/drm_mode_config.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_format_info' type-id='f2bb73e9' visibility='default' filepath='include/drm/drm_mode_config.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='output_poll_changed' type-id='62995e90' visibility='default' filepath='include/drm/drm_mode_config.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mode_valid' type-id='57ca5882' visibility='default' filepath='include/drm/drm_mode_config.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='atomic_check' type-id='d74fad0a' visibility='default' filepath='include/drm/drm_mode_config.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_commit' type-id='69b48bd3' visibility='default' filepath='include/drm/drm_mode_config.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_state_alloc' type-id='27c3122f' visibility='default' filepath='include/drm/drm_mode_config.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='atomic_state_clear' type-id='75795f13' visibility='default' filepath='include/drm/drm_mode_config.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='atomic_state_free' type-id='75795f13' visibility='default' filepath='include/drm/drm_mode_config.h' line='333' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mode_config_helper_funcs' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1273' column='1' id='fa206174'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='atomic_commit_tail' type-id='75795f13' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1309' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_scrambling' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='147' column='1' id='beea899b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='low_rates' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='155' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_writeback_job' is-struct='yes' visibility='default' is-declaration-only='yes' id='71f18ea5'/>
+      <class-decl name='fb_info' size-in-bits='6272' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='437' column='1' id='f546887a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/fb.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='node' type-id='95e97e5e' visibility='default' filepath='include/linux/fb.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/fb.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fbcon_rotate_hint' type-id='95e97e5e' visibility='default' filepath='include/linux/fb.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/fb.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mm_lock' type-id='925167dc' visibility='default' filepath='include/linux/fb.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='var' type-id='87e42d48' visibility='default' filepath='include/linux/fb.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='fix' type-id='1cead55a' visibility='default' filepath='include/linux/fb.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='monspecs' type-id='ee529a90' visibility='default' filepath='include/linux/fb.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='queue' type-id='ef9025d0' visibility='default' filepath='include/linux/fb.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='pixmap' type-id='0a45c8ef' visibility='default' filepath='include/linux/fb.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='sprite' type-id='0a45c8ef' visibility='default' filepath='include/linux/fb.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='cmap' type-id='be9adbe3' visibility='default' filepath='include/linux/fb.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='modelist' type-id='72f469ec' visibility='default' filepath='include/linux/fb.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='mode' type-id='c03076ec' visibility='default' filepath='include/linux/fb.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='fbops' type-id='33dff390' visibility='default' filepath='include/linux/fb.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='device' type-id='fa0b179b' visibility='default' filepath='include/linux/fb.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/fb.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='class_flag' type-id='95e97e5e' visibility='default' filepath='include/linux/fb.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='' type-id='145b6d9f' visibility='default' filepath='include/linux/fb.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='screen_size' type-id='7359adad' visibility='default' filepath='include/linux/fb.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='pseudo_palette' type-id='eaa32e2f' visibility='default' filepath='include/linux/fb.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='state' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='fbcon_par' type-id='eaa32e2f' visibility='default' filepath='include/linux/fb.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='par' type-id='eaa32e2f' visibility='default' filepath='include/linux/fb.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='apertures' type-id='3dc7db80' visibility='default' filepath='include/linux/fb.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='skip_vt_switch' type-id='b50a4934' visibility='default' filepath='include/linux/fb.h' line='503' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ae99f6b5' size-in-bits='64' id='ea44fe69'/>
+      <pointer-type-def type-id='7dfcb6b6' size-in-bits='64' id='4bcdfb80'/>
+      <pointer-type-def type-id='da3b08cd' size-in-bits='64' id='e1fb15d1'/>
+      <pointer-type-def type-id='81d7511f' size-in-bits='64' id='63662edb'/>
+      <pointer-type-def type-id='7775f78a' size-in-bits='64' id='ff30d95c'/>
+      <pointer-type-def type-id='eaff4dba' size-in-bits='64' id='b781f274'/>
+      <pointer-type-def type-id='d3638b22' size-in-bits='64' id='3dc7db80'/>
+      <qualified-type-def type-id='9840934c' const='yes' id='34401d0d'/>
+      <pointer-type-def type-id='a192e032' size-in-bits='64' id='7236c5c8'/>
+      <pointer-type-def type-id='d9de7d63' size-in-bits='64' id='423f39eb'/>
+      <pointer-type-def type-id='4ba7baf2' size-in-bits='64' id='f10b2208'/>
+      <pointer-type-def type-id='d47d86c5' size-in-bits='64' id='f2bb73e9'/>
+      <pointer-type-def type-id='9ca9fcc5' size-in-bits='64' id='8e992c3d'/>
+      <pointer-type-def type-id='6a65de43' size-in-bits='64' id='27c3122f'/>
+      <pointer-type-def type-id='0ab6a08c' size-in-bits='64' id='cc1804ea'/>
+      <pointer-type-def type-id='ea65fb21' size-in-bits='64' id='35078cb9'/>
+      <pointer-type-def type-id='228968a1' size-in-bits='64' id='fd8daf85'/>
+      <pointer-type-def type-id='3bc524c0' size-in-bits='64' id='abd62a96'/>
+      <array-type-def dimensions='1' type-id='abd62a96' size-in-bits='256' id='a459476c'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='0b8ea949' size-in-bits='64' id='0ee978f1'/>
+      <pointer-type-def type-id='60f2213f' size-in-bits='64' id='a6711537'/>
+      <pointer-type-def type-id='12506762' size-in-bits='64' id='fa013de0'/>
+      <pointer-type-def type-id='f2dcb698' size-in-bits='64' id='57ca5882'/>
+      <pointer-type-def type-id='88ac6962' size-in-bits='64' id='33dff390'/>
+      <pointer-type-def type-id='e3dece26' size-in-bits='64' id='c03076ec'/>
+      <pointer-type-def type-id='a61b2dc8' size-in-bits='64' id='d74fad0a'/>
+      <pointer-type-def type-id='3d75b067' size-in-bits='64' id='69b48bd3'/>
+      <class-decl name='drm_crtc_crc' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='53' column='1' id='3bcab18a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='source' type-id='80f4b756' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='opened' type-id='b50a4934' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='overflow' type-id='b50a4934' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='entries' type-id='54a031e1' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='head' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tail' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='values_cnt' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='wq' type-id='b5ab048f' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_display_mode' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/drm/drm_modes.h' line='224' column='1' id='55efd1a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_modes.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/drm/drm_modes.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='status' type-id='4fb62cb0' visibility='default' filepath='include/drm/drm_modes.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_modes.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='clock' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='hdisplay' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='hsync_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='hsync_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='htotal' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='hskew' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vdisplay' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='vsync_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vsync_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='vtotal' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='vscan' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_modes.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='width_mm' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='height_mm' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='crtc_clock' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='crtc_hdisplay' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='crtc_hblank_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='crtc_hblank_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='crtc_hsync_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='crtc_hsync_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='crtc_htotal' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='crtc_hskew' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='crtc_vdisplay' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='crtc_vblank_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='crtc_vblank_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='crtc_vsync_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='crtc_vsync_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='crtc_vtotal' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='private' type-id='7292109c' visibility='default' filepath='include/drm/drm_modes.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='private_flags' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='vrefresh' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='hsync' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='picture_aspect_ratio' type-id='a30ccd44' visibility='default' filepath='include/drm/drm_modes.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='export_head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_modes.h' line='428' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_encoder_funcs' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_encoder.h' line='40' column='1' id='c20384d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reset' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_encoder.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='destroy' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_encoder.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='late_register' type-id='5b7d6a61' visibility='default' filepath='include/drm/drm_encoder.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='early_unregister' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_encoder.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_encoder_helper_funcs' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='472' column='1' id='3cdc7e32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dpms' type-id='0b72aa63' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mode_valid' type-id='a3a882dc' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode_fixup' type-id='375f8cba' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prepare' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='commit' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mode_set' type-id='a6426b1c' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_mode_set' type-id='e15f707f' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_crtc' type-id='fc630d30' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='detect' type-id='69099556' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='atomic_disable' type-id='1da45ab3' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_enable' type-id='1da45ab3' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='disable' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='enable' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='atomic_check' type-id='21e51c00' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='815' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_fb_helper_funcs' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/drm/drm_fb_helper.h' line='77' column='1' id='1a200140'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb_probe' type-id='4a5aa6b9' visibility='default' filepath='include/drm/drm_fb_helper.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_file' is-struct='yes' visibility='default' is-declaration-only='yes' id='cc4a63b9'/>
+      <class-decl name='drm_mode_set' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_crtc.h' line='1129' column='1' id='ef266a3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_crtc.h' line='1130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_crtc.h' line='1131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode' type-id='11e02f83' visibility='default' filepath='include/drm/drm_crtc.h' line='1132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='x' type-id='8f92235e' visibility='default' filepath='include/drm/drm_crtc.h' line='1134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='y' type-id='8f92235e' visibility='default' filepath='include/drm/drm_crtc.h' line='1135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connectors' type-id='be55f776' visibility='default' filepath='include/drm/drm_crtc.h' line='1137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_connectors' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_crtc.h' line='1138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_cmap' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='281' column='1' id='be9adbe3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='red' type-id='2e5e3725' visibility='default' filepath='include/uapi/linux/fb.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='green' type-id='2e5e3725' visibility='default' filepath='include/uapi/linux/fb.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='blue' type-id='2e5e3725' visibility='default' filepath='include/uapi/linux/fb.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='transp' type-id='2e5e3725' visibility='default' filepath='include/uapi/linux/fb.h' line='287' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_fix_screeninfo' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='157' column='1' id='1cead55a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/fb.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='smem_start' type-id='7359adad' visibility='default' filepath='include/uapi/linux/fb.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='smem_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='type_aux' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='visual' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xpanstep' type-id='d315442e' visibility='default' filepath='include/uapi/linux/fb.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='ypanstep' type-id='d315442e' visibility='default' filepath='include/uapi/linux/fb.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='ywrapstep' type-id='d315442e' visibility='default' filepath='include/uapi/linux/fb.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='line_length' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mmio_start' type-id='7359adad' visibility='default' filepath='include/uapi/linux/fb.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mmio_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='accel' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='capabilities' type-id='d315442e' visibility='default' filepath='include/uapi/linux/fb.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='592'>
+          <var-decl name='reserved' type-id='810b4a17' visibility='default' filepath='include/uapi/linux/fb.h' line='175' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_monspecs' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='63' column='1' id='ee529a90'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chroma' type-id='1c76a224' visibility='default' filepath='include/linux/fb.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='modedb' type-id='c03076ec' visibility='default' filepath='include/linux/fb.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='manufacturer' type-id='c213d3d4' visibility='default' filepath='include/linux/fb.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='monitor' type-id='579c7c75' visibility='default' filepath='include/linux/fb.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='serial_no' type-id='579c7c75' visibility='default' filepath='include/linux/fb.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ascii' type-id='579c7c75' visibility='default' filepath='include/linux/fb.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='modedb_len' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='model' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='serial' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='year' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='week' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='hfmin' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='hfmax' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='dclkmin' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dclkmax' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='input' type-id='d315442e' visibility='default' filepath='include/linux/fb.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='dpms' type-id='d315442e' visibility='default' filepath='include/linux/fb.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='signal' type-id='d315442e' visibility='default' filepath='include/linux/fb.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='vfmin' type-id='d315442e' visibility='default' filepath='include/linux/fb.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='vfmax' type-id='d315442e' visibility='default' filepath='include/linux/fb.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1072'>
+          <var-decl name='gamma' type-id='d315442e' visibility='default' filepath='include/linux/fb.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='gtf' type-id='d315442e' visibility='default' filepath='include/linux/fb.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1104'>
+          <var-decl name='misc' type-id='d315442e' visibility='default' filepath='include/linux/fb.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='version' type-id='8f048e17' visibility='default' filepath='include/linux/fb.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1128'>
+          <var-decl name='revision' type-id='8f048e17' visibility='default' filepath='include/linux/fb.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1136'>
+          <var-decl name='max_x' type-id='8f048e17' visibility='default' filepath='include/linux/fb.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1144'>
+          <var-decl name='max_y' type-id='8f048e17' visibility='default' filepath='include/linux/fb.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_pixmap' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='185' column='1' id='0a45c8ef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='8bff8096' visibility='default' filepath='include/linux/fb.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='offset' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buf_align' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='scan_align' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='access_align' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='blit_x' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='blit_y' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='writeio' type-id='888567bf' visibility='default' filepath='include/linux/fb.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='readio' type-id='888567bf' visibility='default' filepath='include/linux/fb.h' line='199' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_var_screeninfo' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='241' column='1' id='87e42d48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xres' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='yres' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='xres_virtual' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='yres_virtual' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='xoffset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='yoffset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bits_per_pixel' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='grayscale' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='red' type-id='2d123a1f' visibility='default' filepath='include/uapi/linux/fb.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='green' type-id='2d123a1f' visibility='default' filepath='include/uapi/linux/fb.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='blue' type-id='2d123a1f' visibility='default' filepath='include/uapi/linux/fb.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='transp' type-id='2d123a1f' visibility='default' filepath='include/uapi/linux/fb.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='nonstd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='activate' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='accel_flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='pixclock' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='left_margin' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='right_margin' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='upper_margin' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='lower_margin' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hsync_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='vsync_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='sync' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='vmode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rotate' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='colorspace' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='reserved' type-id='3fa29bab' visibility='default' filepath='include/uapi/linux/fb.h' line='278' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='149c6638' size-in-bits='64' id='8a121f49'/>
+      <union-decl name='__anonymous_union__10' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fb.h' line='480' column='1' id='145b6d9f'>
+        <data-member access='private'>
+          <var-decl name='screen_base' type-id='26a90f95' visibility='default' filepath='include/linux/fb.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='screen_buffer' type-id='26a90f95' visibility='default' filepath='include/linux/fb.h' line='482' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='891c6957' size-in-bits='64' id='75795f13'/>
+      <pointer-type-def type-id='a222e3fe' size-in-bits='64' id='62995e90'/>
+      <pointer-type-def type-id='d315442e' size-in-bits='64' id='2e5e3725'/>
+      <array-type-def dimensions='1' type-id='d315442e' size-in-bits='32' id='810b4a17'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='112' id='579c7c75'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <qualified-type-def type-id='e019c76b' const='yes' id='a192e032'/>
+      <qualified-type-def type-id='ad4d49e8' const='yes' id='d9de7d63'/>
+      <qualified-type-def type-id='a588cbed' const='yes' id='4ba7baf2'/>
+      <qualified-type-def type-id='eb452ce6' const='yes' id='9ca9fcc5'/>
+      <pointer-type-def type-id='4db02c58' size-in-bits='64' id='be55f776'/>
+      <pointer-type-def type-id='3a711e5e' size-in-bits='64' id='fc630d30'/>
+      <pointer-type-def type-id='0f47abb9' size-in-bits='64' id='54a031e1'/>
+      <pointer-type-def type-id='55efd1a3' size-in-bits='64' id='11e02f83'/>
+      <pointer-type-def type-id='20638bb4' size-in-bits='64' id='69099556'/>
+      <enum-decl name='drm_mode_status' filepath='include/drm/drm_modes.h' line='91' column='1' id='4fb62cb0'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MODE_OK' value='0'/>
+        <enumerator name='MODE_HSYNC' value='1'/>
+        <enumerator name='MODE_VSYNC' value='2'/>
+        <enumerator name='MODE_H_ILLEGAL' value='3'/>
+        <enumerator name='MODE_V_ILLEGAL' value='4'/>
+        <enumerator name='MODE_BAD_WIDTH' value='5'/>
+        <enumerator name='MODE_NOMODE' value='6'/>
+        <enumerator name='MODE_NO_INTERLACE' value='7'/>
+        <enumerator name='MODE_NO_DBLESCAN' value='8'/>
+        <enumerator name='MODE_NO_VSCAN' value='9'/>
+        <enumerator name='MODE_MEM' value='10'/>
+        <enumerator name='MODE_VIRTUAL_X' value='11'/>
+        <enumerator name='MODE_VIRTUAL_Y' value='12'/>
+        <enumerator name='MODE_MEM_VIRT' value='13'/>
+        <enumerator name='MODE_NOCLOCK' value='14'/>
+        <enumerator name='MODE_CLOCK_HIGH' value='15'/>
+        <enumerator name='MODE_CLOCK_LOW' value='16'/>
+        <enumerator name='MODE_CLOCK_RANGE' value='17'/>
+        <enumerator name='MODE_BAD_HVALUE' value='18'/>
+        <enumerator name='MODE_BAD_VVALUE' value='19'/>
+        <enumerator name='MODE_BAD_VSCAN' value='20'/>
+        <enumerator name='MODE_HSYNC_NARROW' value='21'/>
+        <enumerator name='MODE_HSYNC_WIDE' value='22'/>
+        <enumerator name='MODE_HBLANK_NARROW' value='23'/>
+        <enumerator name='MODE_HBLANK_WIDE' value='24'/>
+        <enumerator name='MODE_VSYNC_NARROW' value='25'/>
+        <enumerator name='MODE_VSYNC_WIDE' value='26'/>
+        <enumerator name='MODE_VBLANK_NARROW' value='27'/>
+        <enumerator name='MODE_VBLANK_WIDE' value='28'/>
+        <enumerator name='MODE_PANEL' value='29'/>
+        <enumerator name='MODE_INTERLACE_WIDTH' value='30'/>
+        <enumerator name='MODE_ONE_WIDTH' value='31'/>
+        <enumerator name='MODE_ONE_HEIGHT' value='32'/>
+        <enumerator name='MODE_ONE_SIZE' value='33'/>
+        <enumerator name='MODE_NO_REDUCED' value='34'/>
+        <enumerator name='MODE_NO_STEREO' value='35'/>
+        <enumerator name='MODE_NO_420' value='36'/>
+        <enumerator name='MODE_STALE' value='-3'/>
+        <enumerator name='MODE_BAD' value='-2'/>
+        <enumerator name='MODE_ERROR' value='-1'/>
+      </enum-decl>
+      <pointer-type-def type-id='4e0e413a' size-in-bits='64' id='a3a882dc'/>
+      <pointer-type-def type-id='874459e5' size-in-bits='64' id='5b7d6a61'/>
+      <pointer-type-def type-id='2b3f252e' size-in-bits='64' id='21e51c00'/>
+      <pointer-type-def type-id='56fa322d' size-in-bits='64' id='4a5aa6b9'/>
+      <class-decl name='apertures_struct' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='495' column='1' id='d3638b22'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/linux/fb.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ranges' type-id='f13afa51' visibility='default' filepath='include/linux/fb.h' line='500' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_client_funcs' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_client.h' line='24' column='1' id='9840934c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/drm/drm_client.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unregister' type-id='18e3d2c7' visibility='default' filepath='include/drm/drm_client.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='restore' type-id='c6e1b58c' visibility='default' filepath='include/drm/drm_client.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hotplug' type-id='c6e1b58c' visibility='default' filepath='include/drm/drm_client.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc_state' size-in-bits='4032' is-struct='yes' visibility='default' filepath='include/drm/drm_crtc.h' line='100' column='1' id='ea65fb21'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_crtc.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='enable' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='active' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='planes_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='mode_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='active_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='connectors_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='zpos_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='color_mgmt_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='no_vblank' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='plane_mask' type-id='19c2251e' visibility='default' filepath='include/drm/drm_crtc.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='connector_mask' type-id='19c2251e' visibility='default' filepath='include/drm/drm_crtc.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='encoder_mask' type-id='19c2251e' visibility='default' filepath='include/drm/drm_crtc.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='adjusted_mode' type-id='55efd1a3' visibility='default' filepath='include/drm/drm_crtc.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='mode' type-id='55efd1a3' visibility='default' filepath='include/drm/drm_crtc.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='mode_blob' type-id='c4126d52' visibility='default' filepath='include/drm/drm_crtc.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='degamma_lut' type-id='c4126d52' visibility='default' filepath='include/drm/drm_crtc.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='ctm' type-id='c4126d52' visibility='default' filepath='include/drm/drm_crtc.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='gamma_lut' type-id='c4126d52' visibility='default' filepath='include/drm/drm_crtc.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='target_vblank' type-id='19c2251e' visibility='default' filepath='include/drm/drm_crtc.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3808'>
+          <var-decl name='async_flip' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3816'>
+          <var-decl name='vrr_enabled' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3824'>
+          <var-decl name='self_refresh_active' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='event' type-id='6301fad2' visibility='default' filepath='include/drm/drm_crtc.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='commit' type-id='3f40b772' visibility='default' filepath='include/drm/drm_crtc.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='state' type-id='e3dd029f' visibility='default' filepath='include/drm/drm_crtc.h' line='375' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_gem_object' is-struct='yes' visibility='default' is-declaration-only='yes' id='3bc524c0'/>
+      <class-decl name='drm_plane' size-in-bits='10368' is-struct='yes' visibility='default' filepath='include/drm/drm_plane.h' line='556' column='1' id='60f2213f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_plane.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_plane.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/drm/drm_plane.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mutex' type-id='ae5fc04a' visibility='default' filepath='include/drm/drm_plane.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_plane.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='possible_crtcs' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='format_types' type-id='90421557' visibility='default' filepath='include/drm/drm_plane.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='format_count' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='format_default' type-id='b50a4934' visibility='default' filepath='include/drm/drm_plane.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='modifiers' type-id='5d6479ae' visibility='default' filepath='include/drm/drm_plane.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='modifier_count' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_plane.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_plane.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='old_fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_plane.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='funcs' type-id='cfd5d066' visibility='default' filepath='include/drm/drm_plane.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='properties' type-id='970d3828' visibility='default' filepath='include/drm/drm_plane.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='type' type-id='5eed3c85' visibility='default' filepath='include/drm/drm_plane.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9824'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='helper_private' type-id='affc31e5' visibility='default' filepath='include/drm/drm_plane.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='state' type-id='d0835005' visibility='default' filepath='include/drm/drm_plane.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='alpha_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='zpos_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='rotation_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='blend_mode_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='color_encoding_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='color_range_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='707' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_self_refresh_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='12506762'/>
+      <class-decl name='fb_bitfield' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='188' column='1' id='2d123a1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='length' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='msb_right' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='191' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_chroma' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='52' column='1' id='1c76a224'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='redx' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='greenx' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bluex' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='whitex' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='redy' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='greeny' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bluey' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='whitey' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='228' column='1' id='88ac6962'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/linux/fb.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fb_open' type-id='5173cfa7' visibility='default' filepath='include/linux/fb.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fb_release' type-id='5173cfa7' visibility='default' filepath='include/linux/fb.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fb_read' type-id='c523819e' visibility='default' filepath='include/linux/fb.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fb_write' type-id='b90c8c47' visibility='default' filepath='include/linux/fb.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fb_check_var' type-id='325e877b' visibility='default' filepath='include/linux/fb.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fb_set_par' type-id='de0565b8' visibility='default' filepath='include/linux/fb.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fb_setcolreg' type-id='47150d4e' visibility='default' filepath='include/linux/fb.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fb_setcmap' type-id='6cae92ea' visibility='default' filepath='include/linux/fb.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fb_blank' type-id='264d5ec9' visibility='default' filepath='include/linux/fb.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fb_pan_display' type-id='325e877b' visibility='default' filepath='include/linux/fb.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fb_fillrect' type-id='e6c64d04' visibility='default' filepath='include/linux/fb.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fb_copyarea' type-id='2fff15e1' visibility='default' filepath='include/linux/fb.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='fb_imageblit' type-id='c72645fa' visibility='default' filepath='include/linux/fb.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fb_cursor' type-id='f03e9a5b' visibility='default' filepath='include/linux/fb.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fb_sync' type-id='de0565b8' visibility='default' filepath='include/linux/fb.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fb_ioctl' type-id='20b881b6' visibility='default' filepath='include/linux/fb.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fb_compat_ioctl' type-id='20b881b6' visibility='default' filepath='include/linux/fb.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='fb_mmap' type-id='17d72e03' visibility='default' filepath='include/linux/fb.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fb_get_caps' type-id='3e6ac796' visibility='default' filepath='include/linux/fb.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='fb_destroy' type-id='37191bbd' visibility='default' filepath='include/linux/fb.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fb_debug_enter' type-id='de0565b8' visibility='default' filepath='include/linux/fb.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='fb_debug_leave' type-id='de0565b8' visibility='default' filepath='include/linux/fb.h' line='295' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_videomode' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='765' column='1' id='e3dece26'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/fb.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='refresh' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='xres' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='yres' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='pixclock' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='left_margin' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='right_margin' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='upper_margin' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='lower_margin' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hsync_len' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='vsync_len' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sync' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='vmode' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flag' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='779' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='86bc8898' size-in-bits='64' id='375f8cba'/>
+      <pointer-type-def type-id='ec9f1e6a' size-in-bits='64' id='ac9d10e4'/>
+      <pointer-type-def type-id='f3dc294f' size-in-bits='64' id='1da45ab3'/>
+      <pointer-type-def type-id='1d2b3133' size-in-bits='64' id='e15f707f'/>
+      <pointer-type-def type-id='fff725a2' size-in-bits='64' id='a6426b1c'/>
+      <pointer-type-def type-id='0a04ae5f' size-in-bits='64' id='0b72aa63'/>
+      <pointer-type-def type-id='e2245803' size-in-bits='64' id='888567bf'/>
+      <array-type-def dimensions='1' type-id='87647851' size-in-bits='infinite' id='f13afa51'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='bdf845e8' size-in-bits='64' id='cfd5d066'/>
+      <pointer-type-def type-id='5b7f098d' size-in-bits='64' id='affc31e5'/>
+      <pointer-type-def type-id='8bb9a8e9' size-in-bits='64' id='e3dd029f'/>
+      <pointer-type-def type-id='09d6e90a' size-in-bits='64' id='3f40b772'/>
+      <pointer-type-def type-id='64249e24' size-in-bits='64' id='6301fad2'/>
+      <pointer-type-def type-id='a1700eb5' size-in-bits='64' id='d0835005'/>
+      <enum-decl name='drm_plane_type' filepath='include/drm/drm_plane.h' line='517' column='1' id='5eed3c85'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_PLANE_TYPE_OVERLAY' value='0'/>
+        <enumerator name='DRM_PLANE_TYPE_PRIMARY' value='1'/>
+        <enumerator name='DRM_PLANE_TYPE_CURSOR' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='6ab964d2' size-in-bits='64' id='c6e1b58c'/>
+      <pointer-type-def type-id='32037540' size-in-bits='64' id='6cae92ea'/>
+      <pointer-type-def type-id='32ea5aae' size-in-bits='64' id='de0565b8'/>
+      <pointer-type-def type-id='20919507' size-in-bits='64' id='f03e9a5b'/>
+      <pointer-type-def type-id='b0471e43' size-in-bits='64' id='5173cfa7'/>
+      <pointer-type-def type-id='f65c27ec' size-in-bits='64' id='20b881b6'/>
+      <pointer-type-def type-id='29599587' size-in-bits='64' id='17d72e03'/>
+      <pointer-type-def type-id='24762397' size-in-bits='64' id='325e877b'/>
+      <pointer-type-def type-id='29c8c1c5' size-in-bits='64' id='264d5ec9'/>
+      <pointer-type-def type-id='c89dc0a4' size-in-bits='64' id='47150d4e'/>
+      <class-decl name='drm_crtc_crc_entry' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='33' column='1' id='0f47abb9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='has_frame_counter' type-id='b50a4934' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='frame' type-id='8f92235e' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crcs' type-id='1e6c0b80' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc_funcs' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/drm/drm_crtc.h' line='390' column='1' id='e019c76b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reset' type-id='a50616ee' visibility='default' filepath='include/drm/drm_crtc.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cursor_set' type-id='601c5a9c' visibility='default' filepath='include/drm/drm_crtc.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cursor_set2' type-id='3df34728' visibility='default' filepath='include/drm/drm_crtc.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cursor_move' type-id='7f9fdb63' visibility='default' filepath='include/drm/drm_crtc.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='gamma_set' type-id='ceacf83c' visibility='default' filepath='include/drm/drm_crtc.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='destroy' type-id='a50616ee' visibility='default' filepath='include/drm/drm_crtc.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_config' type-id='4fc3b355' visibility='default' filepath='include/drm/drm_crtc.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='page_flip' type-id='5ad57c34' visibility='default' filepath='include/drm/drm_crtc.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='page_flip_target' type-id='ccd6746f' visibility='default' filepath='include/drm/drm_crtc.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_property' type-id='e1038882' visibility='default' filepath='include/drm/drm_crtc.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_duplicate_state' type-id='d664ced0' visibility='default' filepath='include/drm/drm_crtc.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_destroy_state' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_crtc.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_set_property' type-id='102ab76c' visibility='default' filepath='include/drm/drm_crtc.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='atomic_get_property' type-id='c0240e5c' visibility='default' filepath='include/drm/drm_crtc.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='late_register' type-id='dfd1cc3d' visibility='default' filepath='include/drm/drm_crtc.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='early_unregister' type-id='a50616ee' visibility='default' filepath='include/drm/drm_crtc.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='set_crc_source' type-id='ee3b6114' visibility='default' filepath='include/drm/drm_crtc.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='verify_crc_source' type-id='31163f5a' visibility='default' filepath='include/drm/drm_crtc.h' line='788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='get_crc_sources' type-id='bda384fe' visibility='default' filepath='include/drm/drm_crtc.h' line='810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='atomic_print_state' type-id='1f51f8f7' visibility='default' filepath='include/drm/drm_crtc.h' line='822' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='get_vblank_counter' type-id='1dd1747d' visibility='default' filepath='include/drm/drm_crtc.h' line='849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='enable_vblank' type-id='dfd1cc3d' visibility='default' filepath='include/drm/drm_crtc.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='disable_vblank' type-id='a50616ee' visibility='default' filepath='include/drm/drm_crtc.h' line='870' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc_helper_funcs' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='61' column='1' id='ad4d49e8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dpms' type-id='a9a90075' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prepare' type-id='a50616ee' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='commit' type-id='a50616ee' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mode_valid' type-id='8d681b98' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mode_fixup' type-id='e003b5ce' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mode_set' type-id='18901036' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mode_set_nofb' type-id='a50616ee' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mode_set_base' type-id='9c5c88be' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mode_set_base_atomic' type-id='c368c2fb' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='disable' type-id='a50616ee' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_check' type-id='5ef2f163' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_begin' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_flush' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='atomic_enable' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='atomic_disable' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='451' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_format_info' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/drm/drm_fourcc.h' line='56' column='1' id='a588cbed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='format' type-id='19c2251e' visibility='default' filepath='include/drm/drm_fourcc.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='depth' type-id='f9b06939' visibility='default' filepath='include/drm/drm_fourcc.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='num_planes' type-id='f9b06939' visibility='default' filepath='include/drm/drm_fourcc.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='' type-id='5ab3bf5b' visibility='default' filepath='include/drm/drm_fourcc.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='block_w' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_fourcc.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='block_h' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_fourcc.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='hsub' type-id='f9b06939' visibility='default' filepath='include/drm/drm_fourcc.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vsub' type-id='f9b06939' visibility='default' filepath='include/drm/drm_fourcc.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='has_alpha' type-id='b50a4934' visibility='default' filepath='include/drm/drm_fourcc.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='is_yuv' type-id='b50a4934' visibility='default' filepath='include/drm/drm_fourcc.h' line='135' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_framebuffer_funcs' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/drm_framebuffer.h' line='42' column='1' id='eb452ce6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='destroy' type-id='dd634c69' visibility='default' filepath='include/drm/drm_framebuffer.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='create_handle' type-id='541466be' visibility='default' filepath='include/drm/drm_framebuffer.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dirty' type-id='040ef975' visibility='default' filepath='include/drm/drm_framebuffer.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='de345e44' size-in-bits='64' id='c523819e'/>
+      <pointer-type-def type-id='6c6bf843' size-in-bits='64' id='b90c8c47'/>
+      <pointer-type-def type-id='8f92235e' size-in-bits='64' id='90421557'/>
+      <pointer-type-def type-id='765a8acb' size-in-bits='64' id='18e3d2c7'/>
+      <pointer-type-def type-id='cfe09901' size-in-bits='64' id='37191bbd'/>
+      <pointer-type-def type-id='ef65541d' size-in-bits='64' id='2fff15e1'/>
+      <pointer-type-def type-id='f036a6aa' size-in-bits='64' id='e6c64d04'/>
+      <pointer-type-def type-id='78de7510' size-in-bits='64' id='c72645fa'/>
+      <pointer-type-def type-id='200520c4' size-in-bits='64' id='3e6ac796'/>
+      <pointer-type-def type-id='ba3b5f2c' size-in-bits='64' id='bda384fe'/>
+      <qualified-type-def type-id='60eff7ff' const='yes' id='bdf845e8'/>
+      <qualified-type-def type-id='7cfcbd14' const='yes' id='5b7f098d'/>
+      <pointer-type-def type-id='fe3cfa56' size-in-bits='64' id='d664ced0'/>
+      <pointer-type-def type-id='3d84df46' size-in-bits='64' id='8d681b98'/>
+      <pointer-type-def type-id='71fd1591' size-in-bits='64' id='dfd1cc3d'/>
+      <pointer-type-def type-id='172997aa' size-in-bits='64' id='ee3b6114'/>
+      <pointer-type-def type-id='93df1bf0' size-in-bits='64' id='31163f5a'/>
+      <pointer-type-def type-id='68adba6a' size-in-bits='64' id='c0240e5c'/>
+      <pointer-type-def type-id='30f77767' size-in-bits='64' id='5ef2f163'/>
+      <pointer-type-def type-id='c01f4982' size-in-bits='64' id='102ab76c'/>
+      <pointer-type-def type-id='6081969c' size-in-bits='64' id='18901036'/>
+      <pointer-type-def type-id='a6dcac82' size-in-bits='64' id='601c5a9c'/>
+      <pointer-type-def type-id='17f9ad66' size-in-bits='64' id='3df34728'/>
+      <pointer-type-def type-id='615707ca' size-in-bits='64' id='5ad57c34'/>
+      <pointer-type-def type-id='4d41685b' size-in-bits='64' id='ccd6746f'/>
+      <pointer-type-def type-id='b0cde5c7' size-in-bits='64' id='c368c2fb'/>
+      <pointer-type-def type-id='971a52d0' size-in-bits='64' id='e1038882'/>
+      <pointer-type-def type-id='c2f3c8c7' size-in-bits='64' id='7f9fdb63'/>
+      <pointer-type-def type-id='202c5914' size-in-bits='64' id='9c5c88be'/>
+      <pointer-type-def type-id='84730732' size-in-bits='64' id='ceacf83c'/>
+      <pointer-type-def type-id='5c166f04' size-in-bits='64' id='541466be'/>
+      <pointer-type-def type-id='800ed759' size-in-bits='64' id='040ef975'/>
+      <pointer-type-def type-id='322dfcc1' size-in-bits='64' id='4fc3b355'/>
+      <class-decl name='aperture' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='497' column='1' id='87647851'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='acc63fdf' visibility='default' filepath='include/linux/fb.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='acc63fdf' visibility='default' filepath='include/linux/fb.h' line='499' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_atomic_state' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='316' column='1' id='8bb9a8e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_atomic.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_atomic.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='allow_modeset' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='legacy_cursor_update' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='async_update' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='duplicated' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='planes' type-id='356fd446' visibility='default' filepath='include/drm/drm_atomic.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='crtcs' type-id='611a28de' visibility='default' filepath='include/drm/drm_atomic.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_connector' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_atomic.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='connectors' type-id='6d26c72b' visibility='default' filepath='include/drm/drm_atomic.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_private_objs' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_atomic.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='private_objs' type-id='258e7e75' visibility='default' filepath='include/drm/drm_atomic.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='acquire_ctx' type-id='d1499e71' visibility='default' filepath='include/drm/drm_atomic.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fake_commit' type-id='3f40b772' visibility='default' filepath='include/drm/drm_atomic.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='commit_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_atomic.h' line='368' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc_commit' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='70' column='1' id='09d6e90a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_atomic.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_atomic.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flip_done' type-id='f9fef04f' visibility='default' filepath='include/drm/drm_atomic.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='hw_done' type-id='f9fef04f' visibility='default' filepath='include/drm/drm_atomic.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cleanup_done' type-id='f9fef04f' visibility='default' filepath='include/drm/drm_atomic.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='commit_entry' type-id='72f469ec' visibility='default' filepath='include/drm/drm_atomic.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='event' type-id='6301fad2' visibility='default' filepath='include/drm/drm_atomic.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='abort_completion' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='146' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_pending_vblank_event' is-struct='yes' visibility='default' is-declaration-only='yes' id='64249e24'/>
+      <class-decl name='drm_plane_state' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/drm/drm_plane.h' line='47' column='1' id='a1700eb5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='plane' type-id='a6711537' visibility='default' filepath='include/drm/drm_plane.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_plane.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_plane.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fence' type-id='28271da3' visibility='default' filepath='include/drm/drm_plane.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='crtc_x' type-id='3ff5601b' visibility='default' filepath='include/drm/drm_plane.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='crtc_y' type-id='3ff5601b' visibility='default' filepath='include/drm/drm_plane.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='crtc_w' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='crtc_h' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='src_x' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='src_y' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='src_h' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='src_w' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='alpha' type-id='1dc6a898' visibility='default' filepath='include/drm/drm_plane.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='pixel_blend_mode' type-id='149c6638' visibility='default' filepath='include/drm/drm_plane.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='rotation' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='zpos' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='normalized_zpos' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='color_encoding' type-id='e57e5f2b' visibility='default' filepath='include/drm/drm_plane.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='color_range' type-id='322e1b47' visibility='default' filepath='include/drm/drm_plane.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fb_damage_clips' type-id='c4126d52' visibility='default' filepath='include/drm/drm_plane.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='src' type-id='4ccdd8a9' visibility='default' filepath='include/drm/drm_plane.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dst' type-id='4ccdd8a9' visibility='default' filepath='include/drm/drm_plane.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='visible' type-id='b50a4934' visibility='default' filepath='include/drm/drm_plane.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='commit' type-id='3f40b772' visibility='default' filepath='include/drm/drm_plane.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='state' type-id='e3dd029f' visibility='default' filepath='include/drm/drm_plane.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7f73c08c' size-in-bits='64' id='e003b5ce'/>
+      <pointer-type-def type-id='c78b7721' size-in-bits='64' id='1dd1747d'/>
+      <array-type-def dimensions='1' type-id='8f92235e' size-in-bits='320' id='1e6c0b80'>
+        <subrange length='10' type-id='7ff19f0f' id='487da03a'/>
+      </array-type-def>
+      <union-decl name='__anonymous_union__8' size-in-bits='24' is-anonymous='yes' visibility='default' filepath='include/drm/drm_fourcc.h' line='72' column='1' id='5ab3bf5b'>
+        <data-member access='private'>
+          <var-decl name='cpp' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_fourcc.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='char_per_block' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_fourcc.h' line='107' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='2a02b07c' size-in-bits='64' id='a50616ee'/>
+      <pointer-type-def type-id='52d21874' size-in-bits='64' id='a3c6fb36'/>
+      <pointer-type-def type-id='28678bf9' size-in-bits='64' id='a9a90075'/>
+      <pointer-type-def type-id='5c6f297d' size-in-bits='64' id='dd634c69'/>
+      <pointer-type-def type-id='792f7033' size-in-bits='64' id='1f51f8f7'/>
+      <pointer-type-def type-id='45f4b23b' size-in-bits='64' id='6d26c72b'/>
+      <pointer-type-def type-id='b35335c8' size-in-bits='64' id='611a28de'/>
+      <pointer-type-def type-id='a79398e0' size-in-bits='64' id='356fd446'/>
+      <pointer-type-def type-id='99c97f55' size-in-bits='64' id='258e7e75'/>
+      <enum-decl name='drm_color_encoding' filepath='include/drm/drm_color_mgmt.h' line='54' column='1' id='e57e5f2b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_COLOR_YCBCR_BT601' value='0'/>
+        <enumerator name='DRM_COLOR_YCBCR_BT709' value='1'/>
+        <enumerator name='DRM_COLOR_YCBCR_BT2020' value='2'/>
+        <enumerator name='DRM_COLOR_ENCODING_MAX' value='3'/>
+      </enum-decl>
+      <enum-decl name='drm_color_range' filepath='include/drm/drm_color_mgmt.h' line='61' column='1' id='322e1b47'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_COLOR_YCBCR_LIMITED_RANGE' value='0'/>
+        <enumerator name='DRM_COLOR_YCBCR_FULL_RANGE' value='1'/>
+        <enumerator name='DRM_COLOR_RANGE_MAX' value='2'/>
+      </enum-decl>
+      <class-decl name='drm_plane_funcs' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/drm/drm_plane.h' line='237' column='1' id='60eff7ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='update_plane' type-id='16723420' visibility='default' filepath='include/drm/drm_plane.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable_plane' type-id='d58d6a5f' visibility='default' filepath='include/drm/drm_plane.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destroy' type-id='20e4b16e' visibility='default' filepath='include/drm/drm_plane.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reset' type-id='20e4b16e' visibility='default' filepath='include/drm/drm_plane.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_property' type-id='8f0815d8' visibility='default' filepath='include/drm/drm_plane.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_duplicate_state' type-id='841501c0' visibility='default' filepath='include/drm/drm_plane.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_destroy_state' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_plane.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='atomic_set_property' type-id='49e4df08' visibility='default' filepath='include/drm/drm_plane.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='atomic_get_property' type-id='a6945abe' visibility='default' filepath='include/drm/drm_plane.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='late_register' type-id='e1ec3697' visibility='default' filepath='include/drm/drm_plane.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='early_unregister' type-id='20e4b16e' visibility='default' filepath='include/drm/drm_plane.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_print_state' type-id='86c0ad39' visibility='default' filepath='include/drm/drm_plane.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='format_mod_supported' type-id='4af717b2' visibility='default' filepath='include/drm/drm_plane.h' line='495' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_plane_helper_funcs' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1071' column='1' id='7cfcbd14'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare_fb' type-id='4c74ea47' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cleanup_fb' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='atomic_check' type-id='4c74ea47' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='atomic_update' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='atomic_disable' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_async_check' type-id='4c74ea47' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_async_update' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1253' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_rect' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_rect.h' line='41' column='1' id='4ccdd8a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x1' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_rect.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='y1' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_rect.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='x2' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_rect.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='y2' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_rect.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='58313606' size-in-bits='64' id='841501c0'/>
+      <pointer-type-def type-id='5f5b9bdb' size-in-bits='64' id='e1ec3697'/>
+      <pointer-type-def type-id='332a260c' size-in-bits='64' id='a6945abe'/>
+      <pointer-type-def type-id='77328cce' size-in-bits='64' id='16723420'/>
+      <pointer-type-def type-id='ef46a2bb' size-in-bits='64' id='d58d6a5f'/>
+      <pointer-type-def type-id='5a678b43' size-in-bits='64' id='4c74ea47'/>
+      <pointer-type-def type-id='c016e2d6' size-in-bits='64' id='49e4df08'/>
+      <pointer-type-def type-id='304ac94e' size-in-bits='64' id='8f0815d8'/>
+      <class-decl name='__drm_connnectors_state' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='172' column='1' id='45f4b23b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='4db02c58' visibility='default' filepath='include/drm/drm_atomic.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='249ef586' visibility='default' filepath='include/drm/drm_atomic.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='249ef586' visibility='default' filepath='include/drm/drm_atomic.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='249ef586' visibility='default' filepath='include/drm/drm_atomic.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='out_fence_ptr' type-id='9f2cce4b' visibility='default' filepath='include/drm/drm_atomic.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__drm_crtcs_state' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='154' column='1' id='b35335c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_atomic.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='35078cb9' visibility='default' filepath='include/drm/drm_atomic.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='35078cb9' visibility='default' filepath='include/drm/drm_atomic.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='35078cb9' visibility='default' filepath='include/drm/drm_atomic.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='commit' type-id='3f40b772' visibility='default' filepath='include/drm/drm_atomic.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='out_fence_ptr' type-id='9f2cce4b' visibility='default' filepath='include/drm/drm_atomic.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='last_vblank_count' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_atomic.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__drm_planes_state' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='149' column='1' id='a79398e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='a6711537' visibility='default' filepath='include/drm/drm_atomic.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='d0835005' visibility='default' filepath='include/drm/drm_atomic.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='d0835005' visibility='default' filepath='include/drm/drm_atomic.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='d0835005' visibility='default' filepath='include/drm/drm_atomic.h' line='151' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__drm_private_objs_state' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='293' column='1' id='99c97f55'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='11c98e9a' visibility='default' filepath='include/drm/drm_atomic.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='4ea020ae' visibility='default' filepath='include/drm/drm_atomic.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='4ea020ae' visibility='default' filepath='include/drm/drm_atomic.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='4ea020ae' visibility='default' filepath='include/drm/drm_atomic.h' line='295' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='1c171578' size-in-bits='64' id='4af717b2'/>
+      <pointer-type-def type-id='ba9f6db4' size-in-bits='64' id='20e4b16e'/>
+      <pointer-type-def type-id='4c7af498' size-in-bits='64' id='d196b9c2'/>
+      <pointer-type-def type-id='031e8b8d' size-in-bits='64' id='86c0ad39'/>
+      <pointer-type-def type-id='cc3a4f0c' size-in-bits='64' id='11c98e9a'/>
+      <pointer-type-def type-id='b281e308' size-in-bits='64' id='4ea020ae'/>
+      <class-decl name='drm_private_obj' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='243' column='1' id='cc3a4f0c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_atomic.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='ae5fc04a' visibility='default' filepath='include/drm/drm_atomic.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='state' type-id='4ea020ae' visibility='default' filepath='include/drm/drm_atomic.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='funcs' type-id='515fa1af' visibility='default' filepath='include/drm/drm_atomic.h' line='266' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_private_state' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='289' column='1' id='b281e308'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='e3dd029f' visibility='default' filepath='include/drm/drm_atomic.h' line='290' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='6d7d60df' size-in-bits='64' id='515fa1af'/>
+      <qualified-type-def type-id='6110f5ec' const='yes' id='6d7d60df'/>
+      <class-decl name='drm_private_state_funcs' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='198' column='1' id='6110f5ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='atomic_duplicate_state' type-id='a20ce8b2' visibility='default' filepath='include/drm/drm_atomic.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='atomic_destroy_state' type-id='dc18a9b0' visibility='default' filepath='include/drm/drm_atomic.h' line='217' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='328910d8' size-in-bits='64' id='a20ce8b2'/>
+      <pointer-type-def type-id='e0ed16c6' size-in-bits='64' id='dc18a9b0'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_atomic.c' language='LANG_C89'>
+      <class-decl name='drm_info_list' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_debugfs.h' line='43' column='1' id='c645b65c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/drm/drm_debugfs.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='show' type-id='0131eb61' visibility='default' filepath='include/drm/drm_debugfs.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver_features' type-id='19c2251e' visibility='default' filepath='include/drm/drm_debugfs.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_debugfs.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='c645b65c' const='yes' id='94847817'/>
+      <pointer-type-def type-id='94847817' size-in-bits='64' id='09894807'/>
+      <function-decl name='__drm_crtc_commit_free' mangled-name='__drm_crtc_commit_free' filepath='drivers/gpu/drm/drm_atomic.c' line='45' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_crtc_commit_free'>
+        <parameter type-id='aa29ecab' name='kref' filepath='drivers/gpu/drm/drm_atomic.c' line='45' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_state_default_release' mangled-name='drm_atomic_state_default_release' filepath='drivers/gpu/drm/drm_atomic.c' line='63' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_state_default_release'>
+        <parameter type-id='e3dd029f' name='state' filepath='drivers/gpu/drm/drm_atomic.c' line='63' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_state_init' mangled-name='drm_atomic_state_init' filepath='drivers/gpu/drm/drm_atomic.c' line='82' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_state_init'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic.c' line='82' column='1'/>
+        <parameter type-id='e3dd029f' name='state' filepath='drivers/gpu/drm/drm_atomic.c' line='82' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_state_default_clear' mangled-name='drm_atomic_state_default_clear' filepath='drivers/gpu/drm/drm_atomic.c' line='147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_state_default_clear'>
+        <parameter type-id='e3dd029f' name='state' filepath='drivers/gpu/drm/drm_atomic.c' line='147' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__drm_atomic_state_free' mangled-name='__drm_atomic_state_free' filepath='drivers/gpu/drm/drm_atomic.c' line='256' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_state_free'>
+        <parameter type-id='aa29ecab' name='ref' filepath='drivers/gpu/drm/drm_atomic.c' line='256' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_set_mode_for_crtc' mangled-name='drm_atomic_set_mode_for_crtc' filepath='include/drm/drm_atomic_uapi.h' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_set_mode_for_crtc'>
+        <parameter type-id='35078cb9'/>
+        <parameter type-id='745b39e8'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_state_dump' mangled-name='drm_state_dump' filepath='drivers/gpu/drm/drm_atomic.c' line='1502' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_state_dump'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic.c' line='1502' column='1'/>
+        <parameter type-id='7ac48c21' name='p' filepath='drivers/gpu/drm/drm_atomic.c' line='1502' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_debugfs_create_files' mangled-name='drm_debugfs_create_files' filepath='include/drm/drm_debugfs.h' line='83' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_debugfs_create_files'>
+        <parameter type-id='09894807'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='6c3b3f8f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='fffdaf52' size-in-bits='64' id='745b39e8'/>
+      <pointer-type-def type-id='d5cb77a9' size-in-bits='64' id='6c3b3f8f'/>
+      <pointer-type-def type-id='68b6a809' size-in-bits='64' id='7ac48c21'/>
+      <qualified-type-def type-id='55efd1a3' const='yes' id='fffdaf52'/>
+      <class-decl name='drm_minor' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/drm/drm_file.h' line='69' column='1' id='d5cb77a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_file.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_file.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kdev' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_file.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_file.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='debugfs_root' type-id='27675065' visibility='default' filepath='include/drm/drm_file.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='debugfs_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='debugfs_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_file.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_printer' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_print.h' line='72' column='1' id='68b6a809'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='printfn' type-id='ef76b4f1' visibility='default' filepath='include/drm/drm_print.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='puts' type-id='12dffdbb' visibility='default' filepath='include/drm/drm_print.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='arg' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_print.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prefix' type-id='80f4b756' visibility='default' filepath='include/drm/drm_print.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='cf8cfd4f' size-in-bits='64' id='12dffdbb'/>
+      <pointer-type-def type-id='c0d6093d' size-in-bits='64' id='ef76b4f1'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_atomic_helper.c' language='LANG_C89'>
+      <class-decl name='drm_writeback_job' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/drm/drm_writeback.h' line='81' column='1' id='71f18ea6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='connector' type-id='2944961d' visibility='default' filepath='include/drm/drm_writeback.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prepared' type-id='b50a4934' visibility='default' filepath='include/drm/drm_writeback.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cleanup_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_writeback.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='list_entry' type-id='72f469ec' visibility='default' filepath='include/drm/drm_writeback.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_writeback.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='out_fence' type-id='28271da3' visibility='default' filepath='include/drm/drm_writeback.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_writeback.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_writeback_connector' size-in-bits='15744' is-struct='yes' visibility='default' filepath='include/drm/drm_writeback.h' line='18' column='1' id='f14fc18d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='f02c18fa' visibility='default' filepath='include/drm/drm_writeback.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14208'>
+          <var-decl name='encoder' type-id='d12f4a1d' visibility='default' filepath='include/drm/drm_writeback.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15104'>
+          <var-decl name='pixel_formats_blob_ptr' type-id='c4126d52' visibility='default' filepath='include/drm/drm_writeback.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15168'>
+          <var-decl name='job_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_writeback.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15232'>
+          <var-decl name='job_queue' type-id='72f469ec' visibility='default' filepath='include/drm/drm_writeback.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15360'>
+          <var-decl name='fence_context' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_writeback.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15392'>
+          <var-decl name='fence_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_writeback.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15424'>
+          <var-decl name='fence_seqno' type-id='7359adad' visibility='default' filepath='include/drm/drm_writeback.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15488'>
+          <var-decl name='timeline_name' type-id='16dc656a' visibility='default' filepath='include/drm/drm_writeback.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='4ccdd8a9' const='yes' id='6c09ca40'/>
+      <pointer-type-def type-id='6c09ca40' size-in-bits='64' id='7d69a4de'/>
+      <pointer-type-def type-id='f14fc18d' size-in-bits='64' id='2944961d'/>
+      <pointer-type-def type-id='71f18ea6' size-in-bits='64' id='7b4ee156'/>
+      <function-decl name='drm_mode_copy' mangled-name='drm_mode_copy' filepath='include/drm/drm_modes.h' line='510' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_copy'>
+        <parameter type-id='11e02f83'/>
+        <parameter type-id='745b39e8'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_get_connector_state' mangled-name='drm_atomic_get_connector_state' filepath='include/drm/drm_atomic.h' line='443' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_get_connector_state'>
+        <parameter type-id='e3dd029f'/>
+        <parameter type-id='4db02c58'/>
+        <return type-id='249ef586'/>
+      </function-decl>
+      <function-decl name='drm_atomic_set_crtc_for_connector' mangled-name='drm_atomic_set_crtc_for_connector' filepath='include/drm/drm_atomic_uapi.h' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_set_crtc_for_connector'>
+        <parameter type-id='249ef586'/>
+        <parameter type-id='b64ad7cb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_rect_calc_hscale' mangled-name='drm_rect_calc_hscale' filepath='include/drm/drm_rect.h' line='179' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_rect_calc_hscale'>
+        <parameter type-id='7d69a4de'/>
+        <parameter type-id='7d69a4de'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_rect_calc_vscale' mangled-name='drm_rect_calc_vscale' filepath='include/drm/drm_rect.h' line='182' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_rect_calc_vscale'>
+        <parameter type-id='7d69a4de'/>
+        <parameter type-id='7d69a4de'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_check' mangled-name='drm_atomic_helper_check' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='936' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_check'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='936' column='1'/>
+        <parameter type-id='e3dd029f' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='937' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_update_legacy_modeset_state' mangled-name='drm_atomic_helper_update_legacy_modeset_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1107' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_update_legacy_modeset_state'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1107' column='1'/>
+        <parameter type-id='e3dd029f' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1108' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_commit_modeset_disables' mangled-name='drm_atomic_helper_commit_modeset_disables' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1246' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_modeset_disables'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1246' column='1'/>
+        <parameter type-id='e3dd029f' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1247' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_crtc_vblank_put' mangled-name='drm_crtc_vblank_put' filepath='include/drm/drm_vblank.h' line='211' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_vblank_put'>
+        <parameter type-id='b64ad7cb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_crtc_vblank_get' mangled-name='drm_crtc_vblank_get' filepath='include/drm/drm_vblank.h' line='210' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_vblank_get'>
+        <parameter type-id='b64ad7cb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_bridge_mode_set' mangled-name='drm_bridge_mode_set' filepath='include/drm/drm_bridge.h' line='416' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_bridge_mode_set'>
+        <parameter type-id='8582e5ec'/>
+        <parameter type-id='745b39e8'/>
+        <parameter type-id='745b39e8'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_commit_modeset_enables' mangled-name='drm_atomic_helper_commit_modeset_enables' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1292' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_modeset_enables'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1292' column='1'/>
+        <parameter type-id='e3dd029f' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1293' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_wait_for_fences' mangled-name='drm_atomic_helper_wait_for_fences' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1384' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_wait_for_fences'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1384' column='1'/>
+        <parameter type-id='e3dd029f' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1385' column='1'/>
+        <parameter type-id='b50a4934' name='pre_swap' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1386' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_fence_wait_timeout' mangled-name='dma_fence_wait_timeout' filepath='include/linux/dma-fence.h' line='538' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_wait_timeout'>
+        <parameter type-id='28271da3'/>
+        <parameter type-id='c894953d'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_wait_for_vblanks' mangled-name='drm_atomic_helper_wait_for_vblanks' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1431' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_wait_for_vblanks'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1431' column='1'/>
+        <parameter type-id='e3dd029f' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1432' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_commit_tail' mangled-name='drm_atomic_helper_commit_tail' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1529' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_tail'>
+        <parameter type-id='e3dd029f' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1529' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_commit_planes' mangled-name='drm_atomic_helper_commit_planes' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2428' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_planes'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2428' column='1'/>
+        <parameter type-id='e3dd029f' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2429' column='1'/>
+        <parameter type-id='8f92235e' name='flags' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2430' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_crtc_send_vblank_event' mangled-name='drm_crtc_send_vblank_event' filepath='include/drm/drm_vblank.h' line='201' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_send_vblank_event'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='6301fad3'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_commit_hw_done' mangled-name='drm_atomic_helper_commit_hw_done' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2248' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_hw_done'>
+        <parameter type-id='e3dd029f' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2248' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_cleanup_planes' mangled-name='drm_atomic_helper_cleanup_planes' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2634' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_cleanup_planes'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2634' column='1'/>
+        <parameter type-id='e3dd029f' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2635' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_commit_tail_rpm' mangled-name='drm_atomic_helper_commit_tail_rpm' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1559' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_tail_rpm'>
+        <parameter type-id='e3dd029f' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1559' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_async_commit' mangled-name='drm_atomic_helper_async_commit' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1714' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_async_commit'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1714' column='1'/>
+        <parameter type-id='e3dd029f' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1715' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_commit' mangled-name='drm_atomic_helper_commit' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1767' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1767' column='1'/>
+        <parameter type-id='e3dd029f' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1768' column='1'/>
+        <parameter type-id='b50a4934' name='nonblock' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1769' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_setup_commit' mangled-name='drm_atomic_helper_setup_commit' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2013' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_setup_commit'>
+        <parameter type-id='e3dd029f' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2013' column='1'/>
+        <parameter type-id='b50a4934' name='nonblock' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2014' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_prepare_planes' mangled-name='drm_atomic_helper_prepare_planes' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2333' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_prepare_planes'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2333' column='1'/>
+        <parameter type-id='e3dd029f' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2334' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_swap_state' mangled-name='drm_atomic_helper_swap_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2697' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_swap_state'>
+        <parameter type-id='e3dd029f' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2697' column='1'/>
+        <parameter type-id='b50a4934' name='stall' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2698' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_wait_for_dependencies' mangled-name='drm_atomic_helper_wait_for_dependencies' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2117' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_wait_for_dependencies'>
+        <parameter type-id='e3dd029f' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2117' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_commit_cleanup_done' mangled-name='drm_atomic_helper_commit_cleanup_done' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2293' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_cleanup_done'>
+        <parameter type-id='e3dd029f' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2293' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_update_plane' mangled-name='drm_atomic_helper_update_plane' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2828' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_update_plane'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2828' column='1'/>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2829' column='1'/>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2830' column='1'/>
+        <parameter type-id='95e97e5e' name='crtc_x' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2831' column='1'/>
+        <parameter type-id='95e97e5e' name='crtc_y' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2831' column='1'/>
+        <parameter type-id='f0981eeb' name='crtc_w' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2832' column='1'/>
+        <parameter type-id='f0981eeb' name='crtc_h' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2832' column='1'/>
+        <parameter type-id='8f92235e' name='src_x' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2833' column='1'/>
+        <parameter type-id='8f92235e' name='src_y' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2833' column='1'/>
+        <parameter type-id='8f92235e' name='src_w' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2834' column='1'/>
+        <parameter type-id='8f92235e' name='src_h' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2834' column='1'/>
+        <parameter type-id='d1499e71' name='ctx' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2835' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_state_alloc' mangled-name='drm_atomic_state_alloc' filepath='include/drm/drm_atomic.h' line='401' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_state_alloc'>
+        <parameter type-id='8898134d'/>
+        <return type-id='e3dd029f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_get_plane_state' mangled-name='drm_atomic_get_plane_state' filepath='include/drm/drm_atomic.h' line='440' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_get_plane_state'>
+        <parameter type-id='e3dd029f'/>
+        <parameter type-id='a6711537'/>
+        <return type-id='d0835005'/>
+      </function-decl>
+      <function-decl name='drm_atomic_commit' mangled-name='drm_atomic_commit' filepath='include/drm/drm_atomic.h' line='671' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_commit'>
+        <parameter type-id='e3dd029f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_disable_plane' mangled-name='drm_atomic_helper_disable_plane' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2885' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_disable_plane'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2885' column='1'/>
+        <parameter type-id='d1499e71' name='ctx' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2886' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_set_config' mangled-name='drm_atomic_helper_set_config' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2933' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_set_config'>
+        <parameter type-id='8106240b' name='set' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2933' column='1'/>
+        <parameter type-id='d1499e71' name='ctx' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2934' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_get_crtc_state' mangled-name='drm_atomic_get_crtc_state' filepath='include/drm/drm_atomic.h' line='437' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_get_crtc_state'>
+        <parameter type-id='e3dd029f'/>
+        <parameter type-id='b64ad7cb'/>
+        <return type-id='35078cb9'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_shutdown' mangled-name='drm_atomic_helper_shutdown' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3056' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_shutdown'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3056' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_modeset_lock_all_ctx' mangled-name='drm_modeset_lock_all_ctx' filepath='include/drm/drm_modeset_lock.h' line='130' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_lock_all_ctx'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='d1499e71'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_duplicate_state' mangled-name='drm_atomic_helper_duplicate_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3096' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_duplicate_state'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3096' column='1'/>
+        <parameter type-id='d1499e71' name='ctx' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3097' column='1'/>
+        <return type-id='e3dd029f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_suspend' mangled-name='drm_atomic_helper_suspend' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3184' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_suspend'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3184' column='1'/>
+        <return type-id='e3dd029f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_commit_duplicated_state' mangled-name='drm_atomic_helper_commit_duplicated_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3230' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_duplicated_state'>
+        <parameter type-id='e3dd029f' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3230' column='1'/>
+        <parameter type-id='d1499e71' name='ctx' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3231' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_resume' mangled-name='drm_atomic_helper_resume' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3276' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_resume'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3276' column='1'/>
+        <parameter type-id='e3dd029f' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3277' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_mode_config_reset' mangled-name='drm_mode_config_reset' filepath='include/drm/drm_mode_config.h' line='933' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_config_reset'>
+        <parameter type-id='8898134d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_page_flip' mangled-name='drm_atomic_helper_page_flip' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3350' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_page_flip'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3350' column='1'/>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3351' column='1'/>
+        <parameter type-id='6301fad3' name='event' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3352' column='1'/>
+        <parameter type-id='8f92235e' name='flags' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3353' column='1'/>
+        <parameter type-id='d1499e71' name='ctx' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3354' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_property_create_blob' mangled-name='drm_property_create_blob' filepath='include/drm/drm_property.h' line='270' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_property_create_blob'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='c4126d52'/>
+      </function-decl>
+      <function-decl name='drm_property_blob_put' mangled-name='drm_property_blob_put' filepath='include/drm/drm_property.h' line='284' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_property_blob_put'>
+        <parameter type-id='c4126d52'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='64249e25' size-in-bits='64' id='6301fad3'/>
+      <class-decl name='drm_pending_vblank_event' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/drm/drm_vblank.h' line='40' column='1' id='64249e25'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='2aa44dc9' visibility='default' filepath='include/drm/drm_vblank.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pipe' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_vblank.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sequence' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_vblank.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='event' type-id='4eb3729d' visibility='default' filepath='include/drm/drm_vblank.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_pending_event' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/drm/drm_file.h' line='89' column='1' id='2aa44dc9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='completion' type-id='389faaf7' visibility='default' filepath='include/drm/drm_file.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='completion_release' type-id='e3fbbc86' visibility='default' filepath='include/drm/drm_file.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='event' type-id='5b35aab5' visibility='default' filepath='include/drm/drm_file.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fence' type-id='28271da3' visibility='default' filepath='include/drm/drm_file.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='file_priv' type-id='9e99ecc2' visibility='default' filepath='include/drm/drm_file.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='link' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pending_link' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/drm/drm_vblank.h' line='56' column='1' id='4eb3729d'>
+        <data-member access='private'>
+          <var-decl name='base' type-id='9857a465' visibility='default' filepath='include/drm/drm_vblank.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='vbl' type-id='bc6bca7e' visibility='default' filepath='include/drm/drm_vblank.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='seq' type-id='3aca1eaa' visibility='default' filepath='include/drm/drm_vblank.h' line='75' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='9857a465' size-in-bits='64' id='5b35aab5'/>
+      <pointer-type-def type-id='cc4a63ba' size-in-bits='64' id='9e99ecc2'/>
+      <class-decl name='drm_event' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm.h' line='973' column='1' id='9857a465'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='length' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='975' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_event_crtc_sequence' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm.h' line='994' column='1' id='3aca1eaa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='9857a465' visibility='default' filepath='include/uapi/drm/drm.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='user_data' type-id='d3130597' visibility='default' filepath='include/uapi/drm/drm.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='time_ns' type-id='49659421' visibility='default' filepath='include/uapi/drm/drm.h' line='997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sequence' type-id='d3130597' visibility='default' filepath='include/uapi/drm/drm.h' line='998' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_event_vblank' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm.h' line='982' column='1' id='bc6bca7e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='9857a465' visibility='default' filepath='include/uapi/drm/drm.h' line='983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='user_data' type-id='d3130597' visibility='default' filepath='include/uapi/drm/drm.h' line='984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tv_sec' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tv_usec' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='crtc_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='988' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='fac43f4c' size-in-bits='64' id='e3fbbc86'/>
+      <class-decl name='drm_file' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/drm/drm_file.h' line='158' column='1' id='cc4a63ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='authenticated' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='stereo_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='universal_planes' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='atomic' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='aspect_ratio_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='writeback_connectors' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='is_master' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='master' type-id='07df1a3d' visibility='default' filepath='include/drm/drm_file.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pid' type-id='b94e5398' visibility='default' filepath='include/drm/drm_file.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='magic' type-id='283696d2' visibility='default' filepath='include/drm/drm_file.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lhead' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='minor' type-id='6c3b3f8f' visibility='default' filepath='include/drm/drm_file.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='object_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_file.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='table_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_file.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='syncobj_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_file.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='syncobj_table_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_file.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='filp' type-id='77e79a4b' visibility='default' filepath='include/drm/drm_file.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='driver_priv' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_file.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fbs' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fbs_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_file.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='blobs' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='event_wait' type-id='b5ab048f' visibility='default' filepath='include/drm/drm_file.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='pending_event_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='event_space' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_file.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='event_read_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_file.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='prime' type-id='1eb5bd59' visibility='default' filepath='include/drm/drm_file.h' line='335' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_prime_file_private' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_prime.h' line='45' column='1' id='1eb5bd59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_prime.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dmabufs' type-id='dec44472' visibility='default' filepath='include/drm/drm_prime.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='handles' type-id='dec44472' visibility='default' filepath='include/drm/drm_prime.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='drm_magic_t' type-id='f0981eeb' filepath='include/uapi/drm/drm.h' line='86' column='1' id='283696d2'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_atomic_state_helper.c' language='LANG_C89'>
+      <function-decl name='__drm_atomic_helper_crtc_reset' mangled-name='__drm_atomic_helper_crtc_reset' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='73' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_helper_crtc_reset'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='73' column='1'/>
+        <parameter type-id='35078cb9' name='crtc_state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='74' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_crtc_reset' mangled-name='drm_atomic_helper_crtc_reset' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='90' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_crtc_reset'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='90' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__drm_atomic_helper_crtc_duplicate_state' mangled-name='__drm_atomic_helper_crtc_duplicate_state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='110' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_helper_crtc_duplicate_state'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='110' column='1'/>
+        <parameter type-id='35078cb9' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='111' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_crtc_duplicate_state' mangled-name='drm_atomic_helper_crtc_duplicate_state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_crtc_duplicate_state'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='147' column='1'/>
+        <return type-id='35078cb9'/>
+      </function-decl>
+      <function-decl name='__drm_atomic_helper_crtc_destroy_state' mangled-name='__drm_atomic_helper_crtc_destroy_state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='170' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_helper_crtc_destroy_state'>
+        <parameter type-id='35078cb9' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='170' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_crtc_destroy_state' mangled-name='drm_atomic_helper_crtc_destroy_state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='206' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_crtc_destroy_state'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='206' column='1'/>
+        <parameter type-id='35078cb9' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='207' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_plane_reset' mangled-name='drm_atomic_helper_plane_reset' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='242' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_plane_reset'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='242' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__drm_atomic_helper_plane_destroy_state' mangled-name='__drm_atomic_helper_plane_destroy_state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='307' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_helper_plane_destroy_state'>
+        <parameter type-id='d0835005' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='307' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__drm_atomic_helper_plane_duplicate_state' mangled-name='__drm_atomic_helper_plane_duplicate_state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='262' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_helper_plane_duplicate_state'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='262' column='1'/>
+        <parameter type-id='d0835005' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='263' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_plane_duplicate_state' mangled-name='drm_atomic_helper_plane_duplicate_state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='284' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_plane_duplicate_state'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='284' column='1'/>
+        <return type-id='d0835005'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_plane_destroy_state' mangled-name='drm_atomic_helper_plane_destroy_state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='330' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_plane_destroy_state'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='330' column='1'/>
+        <parameter type-id='d0835005' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='331' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__drm_atomic_helper_connector_reset' mangled-name='__drm_atomic_helper_connector_reset' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='351' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_helper_connector_reset'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='351' column='1'/>
+        <parameter type-id='249ef586' name='conn_state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='352' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_connector_reset' mangled-name='drm_atomic_helper_connector_reset' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='369' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_connector_reset'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='369' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__drm_atomic_helper_connector_destroy_state' mangled-name='__drm_atomic_helper_connector_destroy_state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='457' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_helper_connector_destroy_state'>
+        <parameter type-id='249ef586' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='457' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__drm_atomic_helper_connector_duplicate_state' mangled-name='__drm_atomic_helper_connector_duplicate_state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='409' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_helper_connector_duplicate_state'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='409' column='1'/>
+        <parameter type-id='249ef586' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='410' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_connector_duplicate_state' mangled-name='drm_atomic_helper_connector_duplicate_state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='433' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_connector_duplicate_state'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='433' column='1'/>
+        <return type-id='249ef586'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_connector_destroy_state' mangled-name='drm_atomic_helper_connector_destroy_state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='480' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_connector_destroy_state'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='480' column='1'/>
+        <parameter type-id='249ef586' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='481' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__drm_atomic_helper_private_obj_duplicate_state' mangled-name='__drm_atomic_helper_private_obj_duplicate_state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='496' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_helper_private_obj_duplicate_state'>
+        <parameter type-id='11c98e9a' name='obj' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='496' column='1'/>
+        <parameter type-id='4ea020ae' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='497' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_blend.c' language='LANG_C89'>
+      <function-decl name='drm_plane_create_rotation_property' mangled-name='drm_plane_create_rotation_property' filepath='drivers/gpu/drm/drm_blend.c' line='252' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_plane_create_rotation_property'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_blend.c' line='252' column='1'/>
+        <parameter type-id='f0981eeb' name='rotation' filepath='drivers/gpu/drm/drm_blend.c' line='253' column='1'/>
+        <parameter type-id='f0981eeb' name='supported_rotations' filepath='drivers/gpu/drm/drm_blend.c' line='254' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_plane_create_blend_mode_property' mangled-name='drm_plane_create_blend_mode_property' filepath='drivers/gpu/drm/drm_blend.c' line='552' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_plane_create_blend_mode_property'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_blend.c' line='552' column='1'/>
+        <parameter type-id='f0981eeb' name='supported_modes' filepath='drivers/gpu/drm/drm_blend.c' line='553' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_plane_create_alpha_property' mangled-name='drm_plane_create_alpha_property' filepath='drivers/gpu/drm/drm_blend.c' line='199' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_plane_create_alpha_property'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_blend.c' line='199' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_property_create_bitmask' mangled-name='drm_property_create_bitmask' filepath='include/drm/drm_property.h' line='250' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_property_create_bitmask'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b807105c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='3a47d82b'/>
+        <return type-id='26ea5d4c'/>
+      </function-decl>
+      <function-decl name='drm_rotation_simplify' mangled-name='drm_rotation_simplify' filepath='drivers/gpu/drm/drm_blend.c' line='305' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_rotation_simplify'>
+        <parameter type-id='f0981eeb' name='rotation' filepath='drivers/gpu/drm/drm_blend.c' line='305' column='1'/>
+        <parameter type-id='f0981eeb' name='supported_rotations' filepath='drivers/gpu/drm/drm_blend.c' line='306' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='drm_plane_create_zpos_property' mangled-name='drm_plane_create_zpos_property' filepath='drivers/gpu/drm/drm_blend.c' line='349' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_plane_create_zpos_property'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_blend.c' line='349' column='1'/>
+        <parameter type-id='f0981eeb' name='zpos' filepath='drivers/gpu/drm/drm_blend.c' line='350' column='1'/>
+        <parameter type-id='f0981eeb' name='min' filepath='drivers/gpu/drm/drm_blend.c' line='351' column='1'/>
+        <parameter type-id='f0981eeb' name='max' filepath='drivers/gpu/drm/drm_blend.c' line='351' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_plane_create_zpos_immutable_property' mangled-name='drm_plane_create_zpos_immutable_property' filepath='drivers/gpu/drm/drm_blend.c' line='388' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_plane_create_zpos_immutable_property'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_blend.c' line='388' column='1'/>
+        <parameter type-id='f0981eeb' name='zpos' filepath='drivers/gpu/drm/drm_blend.c' line='389' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='50af579e' size-in-bits='64' id='b807105c'/>
+      <qualified-type-def type-id='56eae4b3' const='yes' id='50af579e'/>
+      <class-decl name='drm_prop_enum_list' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_property.h' line='218' column='1' id='56eae4b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_property.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/drm/drm_property.h' line='220' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_bridge.c' language='LANG_C89'>
+      <function-decl name='drm_bridge_disable' mangled-name='drm_bridge_disable' filepath='drivers/gpu/drm/drm_bridge.c' line='250' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_bridge_disable'>
+        <parameter type-id='8582e5ec' name='bridge' filepath='drivers/gpu/drm/drm_bridge.c' line='250' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_bridge_post_disable' mangled-name='drm_bridge_post_disable' filepath='drivers/gpu/drm/drm_bridge.c' line='272' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_bridge_post_disable'>
+        <parameter type-id='8582e5ec' name='bridge' filepath='drivers/gpu/drm/drm_bridge.c' line='272' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_bridge_pre_enable' mangled-name='drm_bridge_pre_enable' filepath='drivers/gpu/drm/drm_bridge.c' line='321' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_bridge_pre_enable'>
+        <parameter type-id='8582e5ec' name='bridge' filepath='drivers/gpu/drm/drm_bridge.c' line='321' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_bridge_enable' mangled-name='drm_bridge_enable' filepath='drivers/gpu/drm/drm_bridge.c' line='343' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_bridge_enable'>
+        <parameter type-id='8582e5ec' name='bridge' filepath='drivers/gpu/drm/drm_bridge.c' line='343' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_drm_find_bridge' mangled-name='of_drm_find_bridge' filepath='drivers/gpu/drm/drm_bridge.c' line='475' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_drm_find_bridge'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/gpu/drm/drm_bridge.c' line='475' column='1'/>
+        <return type-id='8582e5ec'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_cache.c' language='LANG_C89'>
+      <function-decl name='drm_clflush_pages' mangled-name='drm_clflush_pages' filepath='drivers/gpu/drm/drm_cache.c' line='81' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_clflush_pages'>
+        <parameter type-id='9f93c9da' name='pages' filepath='drivers/gpu/drm/drm_cache.c' line='81' column='1'/>
+        <parameter type-id='7359adad' name='num_pages' filepath='drivers/gpu/drm/drm_cache.c' line='81' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_client.c' language='LANG_C89'>
+      <function-decl name='drm_client_init' mangled-name='drm_client_init' filepath='drivers/gpu/drm/drm_client.c' line='78' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_client_init'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_client.c' line='78' column='1'/>
+        <parameter type-id='cc1804ea' name='client' filepath='drivers/gpu/drm/drm_client.c' line='78' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/gpu/drm/drm_client.c' line='79' column='1'/>
+        <parameter type-id='67ede465' name='funcs' filepath='drivers/gpu/drm/drm_client.c' line='79' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_client_register' mangled-name='drm_client_register' filepath='drivers/gpu/drm/drm_client.c' line='125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_client_register'>
+        <parameter type-id='cc1804ea' name='client' filepath='drivers/gpu/drm/drm_client.c' line='125' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_client_modeset.c' language='LANG_C89'>
+      <function-decl name='drm_client_modeset_commit_force' mangled-name='drm_client_modeset_commit_force' filepath='drivers/gpu/drm/drm_client_modeset.c' line='1035' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_client_modeset_commit_force'>
+        <parameter type-id='cc1804ea' name='client' filepath='drivers/gpu/drm/drm_client_modeset.c' line='1035' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_color_mgmt.c' language='LANG_C89'>
+      <function-decl name='drm_mode_crtc_set_gamma_size' mangled-name='drm_mode_crtc_set_gamma_size' filepath='drivers/gpu/drm/drm_color_mgmt.c' line='195' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_crtc_set_gamma_size'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_color_mgmt.c' line='195' column='1'/>
+        <parameter type-id='95e97e5e' name='gamma_size' filepath='drivers/gpu/drm/drm_color_mgmt.c' line='196' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_plane_create_color_properties' mangled-name='drm_plane_create_color_properties' filepath='drivers/gpu/drm/drm_color_mgmt.c' line='406' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_plane_create_color_properties'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_color_mgmt.c' line='406' column='1'/>
+        <parameter type-id='19c2251e' name='supported_encodings' filepath='drivers/gpu/drm/drm_color_mgmt.c' line='407' column='1'/>
+        <parameter type-id='19c2251e' name='supported_ranges' filepath='drivers/gpu/drm/drm_color_mgmt.c' line='408' column='1'/>
+        <parameter type-id='e57e5f2b' name='default_encoding' filepath='drivers/gpu/drm/drm_color_mgmt.c' line='409' column='1'/>
+        <parameter type-id='322e1b47' name='default_range' filepath='drivers/gpu/drm/drm_color_mgmt.c' line='410' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_connector.c' language='LANG_C89'>
+      <class-decl name='drm_prop_enum_list' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_property.h' line='218' column='1' id='56eae4b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_property.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/drm/drm_property.h' line='220' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='56eae4b3' const='yes' id='50af579e'/>
+      <pointer-type-def type-id='50af579e' size-in-bits='64' id='b807105c'/>
+      <function-decl name='drm_connector_attach_edid_property' mangled-name='drm_connector_attach_edid_property' filepath='drivers/gpu/drm/drm_connector.c' line='344' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_attach_edid_property'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='344' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_connector_has_possible_encoder' mangled-name='drm_connector_has_possible_encoder' filepath='drivers/gpu/drm/drm_connector.c' line='403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_has_possible_encoder'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='403' column='1'/>
+        <parameter type-id='74d89ebd' name='encoder' filepath='drivers/gpu/drm/drm_connector.c' line='404' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drm_connector_cleanup' mangled-name='drm_connector_cleanup' filepath='drivers/gpu/drm/drm_connector.c' line='431' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_cleanup'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='431' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_connector_unregister' mangled-name='drm_connector_unregister' filepath='drivers/gpu/drm/drm_connector.c' line='536' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_unregister'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='536' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_connector_register' mangled-name='drm_connector_register' filepath='drivers/gpu/drm/drm_connector.c' line='489' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_register'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='489' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_connector_list_iter_begin' mangled-name='drm_connector_list_iter_begin' filepath='drivers/gpu/drm/drm_connector.c' line='641' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_list_iter_begin'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_connector.c' line='641' column='1'/>
+        <parameter type-id='40a902ec' name='iter' filepath='drivers/gpu/drm/drm_connector.c' line='642' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_get_connector_status_name' mangled-name='drm_get_connector_status_name' filepath='drivers/gpu/drm/drm_connector.c' line='592' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_get_connector_status_name'>
+        <parameter type-id='f7b0e1b4' name='status' filepath='drivers/gpu/drm/drm_connector.c' line='592' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='drm_property_create' mangled-name='drm_property_create' filepath='include/drm/drm_property.h' line='243' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_property_create'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='26ea5d4c'/>
+      </function-decl>
+      <function-decl name='drm_property_create_enum' mangled-name='drm_property_create_enum' filepath='include/drm/drm_property.h' line='246' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_property_create_enum'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b807105c'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='26ea5d4c'/>
+      </function-decl>
+      <function-decl name='drm_property_create_range' mangled-name='drm_property_create_range' filepath='include/drm/drm_property.h' line='255' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_property_create_range'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='3a47d82b'/>
+        <return type-id='26ea5d4c'/>
+      </function-decl>
+      <function-decl name='drm_mode_create_dp_colorspace_property' mangled-name='drm_mode_create_dp_colorspace_property' filepath='drivers/gpu/drm/drm_connector.c' line='1777' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_create_dp_colorspace_property'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='1777' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='d1f16456' size-in-bits='64' id='40a902ec'/>
+      <class-decl name='drm_connector_list_iter' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='1599' column='1' id='d1f16456'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_connector.h' line='1601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='conn' type-id='4db02c58' visibility='default' filepath='include/drm/drm_connector.h' line='1602' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_crtc.c' language='LANG_C89'>
+      <class-decl name='drm_encoder' is-struct='yes' visibility='default' is-declaration-only='yes' id='d12f4a1e'/>
+      <class-decl name='drm_mode_modeinfo' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='231' column='1' id='9d0ae2a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clock' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='hdisplay' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='hsync_start' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hsync_end' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='htotal' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hskew' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='vdisplay' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vsync_start' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='vsync_end' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='vtotal' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='vscan' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vrefresh' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='248' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_format_name_buf' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_fourcc.h' line='142' column='1' id='6f36f2ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='str' type-id='16dc656a' visibility='default' filepath='include/drm/drm_fourcc.h' line='143' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='9d0ae2a2' const='yes' id='c2623161'/>
+      <pointer-type-def type-id='c2623161' size-in-bits='64' id='4b939911'/>
+      <pointer-type-def type-id='d12f4a1e' size-in-bits='64' id='74d89ebe'/>
+      <pointer-type-def type-id='6f36f2ec' size-in-bits='64' id='d00fb93a'/>
+      <function-decl name='dma_fence_init' mangled-name='dma_fence_init' filepath='include/linux/dma-fence.h' line='266' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_init'>
+        <parameter type-id='28271da3'/>
+        <parameter type-id='13d85783'/>
+        <parameter type-id='34e69a54'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='3a47d82b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_modeset_lock_init' mangled-name='drm_modeset_lock_init' filepath='include/drm/drm_modeset_lock.h' line='97' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_lock_init'>
+        <parameter type-id='b4b06bb8'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_fence_context_alloc' mangled-name='dma_fence_context_alloc' filepath='include/linux/dma-fence.h' line='574' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_context_alloc'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='3a47d82b'/>
+      </function-decl>
+      <function-decl name='drm_crtc_cleanup' mangled-name='drm_crtc_cleanup' filepath='drivers/gpu/drm/drm_crtc.c' line='316' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_cleanup'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_crtc.c' line='316' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_framebuffer_lookup' mangled-name='drm_framebuffer_lookup' filepath='include/drm/drm_framebuffer.h' line='221' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_framebuffer_lookup'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='9e99ecc2'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='7b332e1c'/>
+      </function-decl>
+      <function-decl name='drm_mode_convert_umode' mangled-name='drm_mode_convert_umode' filepath='include/drm/drm_modes.h' line='468' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_convert_umode'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='11e02f83'/>
+        <parameter type-id='4b939911'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_get_format_name' mangled-name='drm_get_format_name' filepath='include/drm/drm_fourcc.h' line='321' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_get_format_name'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='d00fb93a'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='drm_object_property_set_value' mangled-name='drm_object_property_set_value' filepath='include/drm/drm_mode_object.h' line='123' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_object_property_set_value'>
+        <parameter type-id='c5417630'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='3a47d82b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='350f4182' size-in-bits='64' id='c5417630'/>
+      <pointer-type-def type-id='53fb272e' size-in-bits='64' id='34e69a54'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_crtc_helper.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='d3130597' size-in-bits='256' id='ce805d5e'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b50a4934' size-in-bits='16' id='86c49187'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='dma_buf' is-struct='yes' visibility='default' is-declaration-only='yes' id='c201baac'/>
+      <class-decl name='dma_buf_attachment' is-struct='yes' visibility='default' is-declaration-only='yes' id='f01bc099'/>
+      <class-decl name='drm_agp_head' is-struct='yes' visibility='default' is-declaration-only='yes' id='874fb8c0'/>
+      <class-decl name='drm_gem_object' is-struct='yes' visibility='default' is-declaration-only='yes' id='3bc524c0'/>
+      <class-decl name='drm_ioctl_desc' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/drm_ioctl.h' line='144' column='1' id='833c0b8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_ioctl.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='ad578603' visibility='default' filepath='include/drm/drm_ioctl.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='e2cefc47' visibility='default' filepath='include/drm/drm_ioctl.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/drm/drm_ioctl.h' line='148' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_master' is-struct='yes' visibility='default' is-declaration-only='yes' id='f8a4685d'/>
+      <class-decl name='drm_panel' is-struct='yes' visibility='default' is-declaration-only='yes' id='b9675ea0'/>
+      <class-decl name='drm_self_refresh_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='12506762'/>
+      <class-decl name='drm_vma_offset_manager' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/drm/drm_vma_manager.h' line='59' column='1' id='1b04dce5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vm_lock' type-id='ac16795b' visibility='default' filepath='include/drm/drm_vma_manager.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vm_addr_space_mm' type-id='0b8ea949' visibility='default' filepath='include/drm/drm_vma_manager.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_vram_mm' is-struct='yes' visibility='default' is-declaration-only='yes' id='8008efb8'/>
+      <class-decl name='drm_writeback_connector' is-struct='yes' visibility='default' is-declaration-only='yes' id='f14fc18e'/>
+      <class-decl name='drm_writeback_job' is-struct='yes' visibility='default' is-declaration-only='yes' id='71f18ea5'/>
+      <class-decl name='pci_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='5c93f9a8'/>
+      <array-type-def dimensions='1' type-id='abd62a96' size-in-bits='256' id='a459476c'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='26ea5d4c' size-in-bits='4096' id='53f04f9e'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <typedef-decl name='__builtin_va_list' type-id='5f919c1f' id='7f896fb4'/>
+      <array-type-def dimensions='1' type-id='8f92235e' size-in-bits='320' id='1e6c0b80'>
+        <subrange length='10' type-id='7ff19f0f' id='487da03a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f92235e' size-in-bits='96' id='6f7eb9e8'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='9c313c2d' size-in-bits='4096' id='ed4ceada'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b96825af' size-in-bits='1024' id='c768f32d'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <class-decl name='drm_connector' size-in-bits='14208' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='1087' column='1' id='f02c18fa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_connector.h' line='1089' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kdev' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_connector.h' line='1091' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attr' type-id='89a2612a' visibility='default' filepath='include/drm/drm_connector.h' line='1093' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_connector.h' line='1103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_connector.h' line='1106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/drm/drm_connector.h' line='1109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_connector.h' line='1116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='1124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='connector_type' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='connector_type_id' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='interlace_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1000'>
+          <var-decl name='doublescan_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='stereo_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1016'>
+          <var-decl name='ycbcr_420_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='registration_state' type-id='0b8fe6b9' visibility='default' filepath='include/drm/drm_connector.h' line='1166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='modes' type-id='72f469ec' visibility='default' filepath='include/drm/drm_connector.h' line='1173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='status' type-id='f7b0e1b4' visibility='default' filepath='include/drm/drm_connector.h' line='1180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='probed_modes' type-id='72f469ec' visibility='default' filepath='include/drm/drm_connector.h' line='1188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='display_info' type-id='228c7c6c' visibility='default' filepath='include/drm/drm_connector.h' line='1199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='funcs' type-id='3fb29739' visibility='default' filepath='include/drm/drm_connector.h' line='1202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='edid_blob_ptr' type-id='c4126d52' visibility='default' filepath='include/drm/drm_connector.h' line='1209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='properties' type-id='970d3828' visibility='default' filepath='include/drm/drm_connector.h' line='1212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='scaling_mode_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_connector.h' line='1218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='vrr_capable_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_connector.h' line='1229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='colorspace_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_connector.h' line='1235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='path_blob_ptr' type-id='c4126d52' visibility='default' filepath='include/drm/drm_connector.h' line='1243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='max_bpc_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_connector.h' line='1249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='polled' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11104'>
+          <var-decl name='dpms' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='helper_private' type-id='90133bf8' visibility='default' filepath='include/drm/drm_connector.h' line='1287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='cmdline_mode' type-id='458106cb' visibility='default' filepath='include/drm/drm_connector.h' line='1290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='force' type-id='e1a0be31' visibility='default' filepath='include/drm/drm_connector.h' line='1292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11872'>
+          <var-decl name='override_edid' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='encoder_ids' type-id='6f7eb9e8' visibility='default' filepath='include/drm/drm_connector.h' line='1301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='encoder' type-id='74d89ebd' visibility='default' filepath='include/drm/drm_connector.h' line='1309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='eld' type-id='c768f32d' visibility='default' filepath='include/drm/drm_connector.h' line='1313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='latency_present' type-id='86c49187' visibility='default' filepath='include/drm/drm_connector.h' line='1315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13152'>
+          <var-decl name='video_latency' type-id='e4266c7e' visibility='default' filepath='include/drm/drm_connector.h' line='1320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13216'>
+          <var-decl name='audio_latency' type-id='e4266c7e' visibility='default' filepath='include/drm/drm_connector.h' line='1325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13312'>
+          <var-decl name='ddc' type-id='b9af02c3' visibility='default' filepath='include/drm/drm_connector.h' line='1336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='null_edid_counter' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13408'>
+          <var-decl name='bad_edid_counter' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='1345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13440'>
+          <var-decl name='edid_corrupt' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13448'>
+          <var-decl name='real_edid_checksum' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='1358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='debugfs_entry' type-id='27675065' visibility='default' filepath='include/drm/drm_connector.h' line='1361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13568'>
+          <var-decl name='state' type-id='249ef586' visibility='default' filepath='include/drm/drm_connector.h' line='1377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13632'>
+          <var-decl name='tile_blob_ptr' type-id='c4126d52' visibility='default' filepath='include/drm/drm_connector.h' line='1394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13696'>
+          <var-decl name='has_tile' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13760'>
+          <var-decl name='tile_group' type-id='c6c44b9f' visibility='default' filepath='include/drm/drm_connector.h' line='1399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13824'>
+          <var-decl name='tile_is_single_monitor' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13832'>
+          <var-decl name='num_h_tile' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13840'>
+          <var-decl name='num_v_tile' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13848'>
+          <var-decl name='tile_h_loc' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13856'>
+          <var-decl name='tile_v_loc' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13872'>
+          <var-decl name='tile_h_size' type-id='149c6638' visibility='default' filepath='include/drm/drm_connector.h' line='1411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13888'>
+          <var-decl name='tile_v_size' type-id='149c6638' visibility='default' filepath='include/drm/drm_connector.h' line='1411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13952'>
+          <var-decl name='free_node' type-id='c5ccfee8' visibility='default' filepath='include/drm/drm_connector.h' line='1420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14016'>
+          <var-decl name='hdr_sink_metadata' type-id='b459f8ff' visibility='default' filepath='include/drm/drm_connector.h' line='1423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14144'>
+          <var-decl name='panel' type-id='c5491078' visibility='default' filepath='include/drm/drm_connector.h' line='1430' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_device' size-in-bits='12864' is-struct='yes' visibility='default' filepath='include/drm/drm_device.h' line='53' column='1' id='e96cc76d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='legacy_dev_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='if_version' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_device.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_device.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_device.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='driver' type-id='1d52bc4e' visibility='default' filepath='include/drm/drm_device.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev_private' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_device.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='primary' type-id='6c3b3f8f' visibility='default' filepath='include/drm/drm_device.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='render' type-id='6c3b3f8f' visibility='default' filepath='include/drm/drm_device.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/drm/drm_device.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='master' type-id='07df1a3d' visibility='default' filepath='include/drm/drm_device.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='driver_features' type-id='19c2251e' visibility='default' filepath='include/drm/drm_device.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='unplugged' type-id='b50a4934' visibility='default' filepath='include/drm/drm_device.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='anon_inode' type-id='7e666abe' visibility='default' filepath='include/drm/drm_device.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='unique' type-id='26a90f95' visibility='default' filepath='include/drm/drm_device.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='struct_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='master_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='open_count' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_device.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='filelist_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='filelist' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='filelist_internal' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='clientlist_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='clientlist' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='irq_enabled' type-id='b50a4934' visibility='default' filepath='include/drm/drm_device.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_device.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='vblank_disable_immediate' type-id='b50a4934' visibility='default' filepath='include/drm/drm_device.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='vblank' type-id='04d2f8d3' visibility='default' filepath='include/drm/drm_device.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='vblank_time_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_device.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='vbl_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_device.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='max_vblank_count' type-id='19c2251e' visibility='default' filepath='include/drm/drm_device.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='vblank_event_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='event_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_device.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='agp' type-id='c137ea76' visibility='default' filepath='include/drm/drm_device.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='pdev' type-id='85196e40' visibility='default' filepath='include/drm/drm_device.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='num_crtcs' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_device.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='mode_config' type-id='5052051f' visibility='default' filepath='include/drm/drm_device.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='object_name_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12416'>
+          <var-decl name='object_name_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_device.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12608'>
+          <var-decl name='vma_offset_manager' type-id='0c6d12d5' visibility='default' filepath='include/drm/drm_device.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='vram_mm' type-id='dbdf0f9e' visibility='default' filepath='include/drm/drm_device.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='switch_power_state' type-id='40bb3c00' visibility='default' filepath='include/drm/drm_device.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='fb_helper' type-id='147b8c0a' visibility='default' filepath='include/drm/drm_device.h' line='309' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_driver' size-in-bits='3776' is-struct='yes' visibility='default' filepath='include/drm/drm_drv.h' line='163' column='1' id='73303b8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='load' type-id='30c8e7b1' visibility='default' filepath='include/drm/drm_drv.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open' type-id='ccba7a85' visibility='default' filepath='include/drm/drm_drv.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='postclose' type-id='157eca44' visibility='default' filepath='include/drm/drm_drv.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lastclose' type-id='62995e90' visibility='default' filepath='include/drm/drm_drv.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unload' type-id='62995e90' visibility='default' filepath='include/drm/drm_drv.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='release' type-id='62995e90' visibility='default' filepath='include/drm/drm_drv.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_vblank_counter' type-id='52dd4de5' visibility='default' filepath='include/drm/drm_drv.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='enable_vblank' type-id='b8905925' visibility='default' filepath='include/drm/drm_drv.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='disable_vblank' type-id='5de03572' visibility='default' filepath='include/drm/drm_drv.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_scanout_position' type-id='4e80a34b' visibility='default' filepath='include/drm/drm_drv.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_vblank_timestamp' type-id='93ff0584' visibility='default' filepath='include/drm/drm_drv.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='irq_handler' type-id='3fefe9b7' visibility='default' filepath='include/drm/drm_drv.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='irq_preinstall' type-id='62995e90' visibility='default' filepath='include/drm/drm_drv.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='irq_postinstall' type-id='d9d2e26f' visibility='default' filepath='include/drm/drm_drv.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='irq_uninstall' type-id='62995e90' visibility='default' filepath='include/drm/drm_drv.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='master_create' type-id='adc543b9' visibility='default' filepath='include/drm/drm_drv.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='master_destroy' type-id='972f2a14' visibility='default' filepath='include/drm/drm_drv.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='master_set' type-id='ca39eb80' visibility='default' filepath='include/drm/drm_drv.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='master_drop' type-id='157eca44' visibility='default' filepath='include/drm/drm_drv.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='debugfs_init' type-id='ca55f982' visibility='default' filepath='include/drm/drm_drv.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='gem_free_object' type-id='9126441b' visibility='default' filepath='include/drm/drm_drv.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='gem_free_object_unlocked' type-id='9126441b' visibility='default' filepath='include/drm/drm_drv.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='gem_open_object' type-id='8e2012e0' visibility='default' filepath='include/drm/drm_drv.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='gem_close_object' type-id='133b86a1' visibility='default' filepath='include/drm/drm_drv.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='gem_print_info' type-id='1c51ec16' visibility='default' filepath='include/drm/drm_drv.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='gem_create_object' type-id='76ba9b40' visibility='default' filepath='include/drm/drm_drv.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='prime_handle_to_fd' type-id='2579e5b0' visibility='default' filepath='include/drm/drm_drv.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='prime_fd_to_handle' type-id='f9d4c3c6' visibility='default' filepath='include/drm/drm_drv.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='gem_prime_export' type-id='a4e2d046' visibility='default' filepath='include/drm/drm_drv.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='gem_prime_import' type-id='b121f651' visibility='default' filepath='include/drm/drm_drv.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='gem_prime_pin' type-id='12e23e5c' visibility='default' filepath='include/drm/drm_drv.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='gem_prime_unpin' type-id='9126441b' visibility='default' filepath='include/drm/drm_drv.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='gem_prime_get_sg_table' type-id='32774f90' visibility='default' filepath='include/drm/drm_drv.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='gem_prime_import_sg_table' type-id='38d8fc10' visibility='default' filepath='include/drm/drm_drv.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='gem_prime_vmap' type-id='2edb3e4b' visibility='default' filepath='include/drm/drm_drv.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='gem_prime_vunmap' type-id='06586097' visibility='default' filepath='include/drm/drm_drv.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='gem_prime_mmap' type-id='516294a7' visibility='default' filepath='include/drm/drm_drv.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='gem_prime_get_uuid' type-id='0de721e0' visibility='default' filepath='include/drm/drm_drv.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dumb_create' type-id='c95d5016' visibility='default' filepath='include/drm/drm_drv.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='dumb_map_offset' type-id='c62ff945' visibility='default' filepath='include/drm/drm_drv.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='dumb_destroy' type-id='aca8090e' visibility='default' filepath='include/drm/drm_drv.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='gem_vm_ops' type-id='9be87662' visibility='default' filepath='include/drm/drm_drv.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='major' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_drv.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_drv.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='patchlevel' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_drv.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/drm/drm_drv.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='desc' type-id='26a90f95' visibility='default' filepath='include/drm/drm_drv.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='date' type-id='26a90f95' visibility='default' filepath='include/drm/drm_drv.h' line='747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='driver_features' type-id='19c2251e' visibility='default' filepath='include/drm/drm_drv.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='ioctls' type-id='2effb43d' visibility='default' filepath='include/drm/drm_drv.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='num_ioctls' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_drv.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='fops' type-id='61758ee5' visibility='default' filepath='include/drm/drm_drv.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='legacy_dev_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_drv.h' line='782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='firstopen' type-id='d9d2e26f' visibility='default' filepath='include/drm/drm_drv.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='preclose' type-id='157eca44' visibility='default' filepath='include/drm/drm_drv.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='dma_ioctl' type-id='8ac1c0d9' visibility='default' filepath='include/drm/drm_drv.h' line='785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='dma_quiescent' type-id='d9d2e26f' visibility='default' filepath='include/drm/drm_drv.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='context_dtor' type-id='4a984946' visibility='default' filepath='include/drm/drm_drv.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='dev_priv_size' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_drv.h' line='788' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_file' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/drm/drm_file.h' line='158' column='1' id='cc4a63ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='authenticated' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='stereo_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='universal_planes' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='atomic' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='aspect_ratio_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='writeback_connectors' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='is_master' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='master' type-id='07df1a3d' visibility='default' filepath='include/drm/drm_file.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pid' type-id='b94e5398' visibility='default' filepath='include/drm/drm_file.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='magic' type-id='283696d2' visibility='default' filepath='include/drm/drm_file.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lhead' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='minor' type-id='6c3b3f8f' visibility='default' filepath='include/drm/drm_file.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='object_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_file.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='table_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_file.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='syncobj_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_file.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='syncobj_table_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_file.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='filp' type-id='77e79a4b' visibility='default' filepath='include/drm/drm_file.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='driver_priv' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_file.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fbs' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fbs_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_file.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='blobs' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='event_wait' type-id='b5ab048f' visibility='default' filepath='include/drm/drm_file.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='pending_event_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='event_space' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_file.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='event_read_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_file.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='prime' type-id='1eb5bd59' visibility='default' filepath='include/drm/drm_file.h' line='335' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='drm_magic_t' type-id='f0981eeb' filepath='include/uapi/drm/drm.h' line='86' column='1' id='283696d2'/>
+      <class-decl name='drm_minor' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/drm/drm_file.h' line='69' column='1' id='d5cb77a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_file.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_file.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kdev' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_file.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_file.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='debugfs_root' type-id='27675065' visibility='default' filepath='include/drm/drm_file.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='debugfs_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='debugfs_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_file.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_prime_file_private' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_prime.h' line='45' column='1' id='1eb5bd59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_prime.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dmabufs' type-id='dec44472' visibility='default' filepath='include/drm/drm_prime.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='handles' type-id='dec44472' visibility='default' filepath='include/drm/drm_prime.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_display_mode' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/drm/drm_modes.h' line='224' column='1' id='55efd1a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_modes.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/drm/drm_modes.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='status' type-id='4fb62cb0' visibility='default' filepath='include/drm/drm_modes.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_modes.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='clock' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='hdisplay' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='hsync_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='hsync_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='htotal' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='hskew' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vdisplay' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='vsync_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vsync_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='vtotal' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='vscan' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_modes.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='width_mm' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='height_mm' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='crtc_clock' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='crtc_hdisplay' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='crtc_hblank_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='crtc_hblank_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='crtc_hsync_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='crtc_hsync_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='crtc_htotal' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='crtc_hskew' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='crtc_vdisplay' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='crtc_vblank_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='crtc_vblank_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='crtc_vsync_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='crtc_vsync_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='crtc_vtotal' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='private' type-id='7292109c' visibility='default' filepath='include/drm/drm_modes.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='private_flags' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='vrefresh' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='hsync' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='picture_aspect_ratio' type-id='a30ccd44' visibility='default' filepath='include/drm/drm_modes.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='export_head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_modes.h' line='428' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_mode_status' filepath='include/drm/drm_modes.h' line='91' column='1' id='4fb62cb0'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MODE_OK' value='0'/>
+        <enumerator name='MODE_HSYNC' value='1'/>
+        <enumerator name='MODE_VSYNC' value='2'/>
+        <enumerator name='MODE_H_ILLEGAL' value='3'/>
+        <enumerator name='MODE_V_ILLEGAL' value='4'/>
+        <enumerator name='MODE_BAD_WIDTH' value='5'/>
+        <enumerator name='MODE_NOMODE' value='6'/>
+        <enumerator name='MODE_NO_INTERLACE' value='7'/>
+        <enumerator name='MODE_NO_DBLESCAN' value='8'/>
+        <enumerator name='MODE_NO_VSCAN' value='9'/>
+        <enumerator name='MODE_MEM' value='10'/>
+        <enumerator name='MODE_VIRTUAL_X' value='11'/>
+        <enumerator name='MODE_VIRTUAL_Y' value='12'/>
+        <enumerator name='MODE_MEM_VIRT' value='13'/>
+        <enumerator name='MODE_NOCLOCK' value='14'/>
+        <enumerator name='MODE_CLOCK_HIGH' value='15'/>
+        <enumerator name='MODE_CLOCK_LOW' value='16'/>
+        <enumerator name='MODE_CLOCK_RANGE' value='17'/>
+        <enumerator name='MODE_BAD_HVALUE' value='18'/>
+        <enumerator name='MODE_BAD_VVALUE' value='19'/>
+        <enumerator name='MODE_BAD_VSCAN' value='20'/>
+        <enumerator name='MODE_HSYNC_NARROW' value='21'/>
+        <enumerator name='MODE_HSYNC_WIDE' value='22'/>
+        <enumerator name='MODE_HBLANK_NARROW' value='23'/>
+        <enumerator name='MODE_HBLANK_WIDE' value='24'/>
+        <enumerator name='MODE_VSYNC_NARROW' value='25'/>
+        <enumerator name='MODE_VSYNC_WIDE' value='26'/>
+        <enumerator name='MODE_VBLANK_NARROW' value='27'/>
+        <enumerator name='MODE_VBLANK_WIDE' value='28'/>
+        <enumerator name='MODE_PANEL' value='29'/>
+        <enumerator name='MODE_INTERLACE_WIDTH' value='30'/>
+        <enumerator name='MODE_ONE_WIDTH' value='31'/>
+        <enumerator name='MODE_ONE_HEIGHT' value='32'/>
+        <enumerator name='MODE_ONE_SIZE' value='33'/>
+        <enumerator name='MODE_NO_REDUCED' value='34'/>
+        <enumerator name='MODE_NO_STEREO' value='35'/>
+        <enumerator name='MODE_NO_420' value='36'/>
+        <enumerator name='MODE_STALE' value='-3'/>
+        <enumerator name='MODE_BAD' value='-2'/>
+        <enumerator name='MODE_ERROR' value='-1'/>
+      </enum-decl>
+      <class-decl name='drm_printer' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_print.h' line='72' column='1' id='68b6a809'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='printfn' type-id='ef76b4f1' visibility='default' filepath='include/drm/drm_print.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='puts' type-id='12dffdbb' visibility='default' filepath='include/drm/drm_print.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='arg' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_print.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prefix' type-id='80f4b756' visibility='default' filepath='include/drm/drm_print.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='va_format' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/printk.h' line='87' column='1' id='150dc81a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fmt' type-id='80f4b756' visibility='default' filepath='include/linux/printk.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='va' type-id='50bcf651' visibility='default' filepath='include/linux/printk.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='va_list' type-id='7f896fb4' filepath='prebuilts-master/clang/host/linux-x86/clang-r407598/lib64/clang/12.0.1/include/stdarg.h' line='14' column='1' id='2aee9912'/>
+      <class-decl name='drm_mode_create_dumb' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='811' column='1' id='46d25262'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='813' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bpp' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='handle' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='pitch' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='818' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='d3130597' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='819' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_vblank_crtc' size-in-bits='2880' is-struct='yes' visibility='default' filepath='include/drm/drm_vblank.h' line='89' column='1' id='e5ebb0e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_vblank.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='queue' type-id='b5ab048f' visibility='default' filepath='include/drm/drm_vblank.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='disable_timer' type-id='abe41e67' visibility='default' filepath='include/drm/drm_vblank.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='seqlock' type-id='e6cd5ecf' visibility='default' filepath='include/drm/drm_vblank.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='count' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_vblank.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='time' type-id='fbc017ef' visibility='default' filepath='include/drm/drm_vblank.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='refcount' type-id='49178f86' visibility='default' filepath='include/drm/drm_vblank.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='last' type-id='19c2251e' visibility='default' filepath='include/drm/drm_vblank.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='max_vblank_count' type-id='19c2251e' visibility='default' filepath='include/drm/drm_vblank.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='inmodeset' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_vblank.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pipe' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_vblank.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='framedur_ns' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_vblank.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='linedur_ns' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_vblank.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hwmode' type-id='55efd1a3' visibility='default' filepath='include/drm/drm_vblank.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='enabled' type-id='b50a4934' visibility='default' filepath='include/drm/drm_vblank.h' line='194' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mode_config' size-in-bits='9152' is-struct='yes' visibility='default' filepath='include/drm/drm_mode_config.h' line='358' column='1' id='5052051f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_mode_config.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connection_mutex' type-id='ae5fc04a' visibility='default' filepath='include/drm/drm_mode_config.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='acquire_ctx' type-id='d1499e71' visibility='default' filepath='include/drm/drm_mode_config.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='idr_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_mode_config.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='object_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_mode_config.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tile_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_mode_config.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='fb_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_mode_config.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='num_fb' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='fb_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='connector_list_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_mode_config.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='num_connector' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='connector_ida' type-id='46ce60fb' visibility='default' filepath='include/drm/drm_mode_config.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='connector_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='connector_free_list' type-id='77df194e' visibility='default' filepath='include/drm/drm_mode_config.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='connector_free_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_mode_config.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='num_encoder' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='encoder_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='num_total_plane' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='plane_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='num_crtc' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='crtc_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='property_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='privobj_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='min_width' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='min_height' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='max_width' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3552'>
+          <var-decl name='max_height' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='funcs' type-id='3f50936e' visibility='default' filepath='include/drm/drm_mode_config.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='fb_base' type-id='acc63fdf' visibility='default' filepath='include/drm/drm_mode_config.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='poll_enabled' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3720'>
+          <var-decl name='poll_running' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3728'>
+          <var-decl name='delayed_event' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='output_poll_work' type-id='5ad6e0ef' visibility='default' filepath='include/drm/drm_mode_config.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='blob_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_mode_config.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='property_blob_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='edid_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='dpms_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='path_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='tile_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='link_status_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='plane_type_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='prop_src_x' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='prop_src_y' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='prop_src_w' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='prop_src_h' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='prop_crtc_x' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='prop_crtc_y' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='prop_crtc_w' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='prop_crtc_h' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='prop_fb_id' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='prop_in_fence_fd' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='prop_out_fence_ptr' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='prop_crtc_id' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='prop_fb_damage_clips' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='prop_active' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='prop_mode_id' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='prop_vrr_enabled' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='dvi_i_subconnector_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='dvi_i_select_subconnector_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='tv_subconnector_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='tv_select_subconnector_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='tv_mode_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='tv_left_margin_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='tv_right_margin_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='tv_top_margin_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='tv_bottom_margin_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='tv_brightness_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='tv_contrast_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='tv_flicker_reduction_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='tv_overscan_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='tv_saturation_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='tv_hue_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='scaling_mode_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='aspect_ratio_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='content_type_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='degamma_lut_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='degamma_lut_size_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='ctm_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='gamma_lut_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='gamma_lut_size_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='suggested_x_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='suggested_y_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='800' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='non_desktop_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='panel_orientation_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='writeback_fb_id_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='821' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='writeback_pixel_formats_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='writeback_out_fence_ptr_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='837' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='hdr_output_metadata_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='content_protection_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='hdcp_content_type_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='preferred_depth' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_config.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8800'>
+          <var-decl name='prefer_shadow' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_config.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='prefer_shadow_fbdev' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8840'>
+          <var-decl name='quirk_addfb_prefer_xbgr_30bpp' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8848'>
+          <var-decl name='quirk_addfb_prefer_host_byte_order' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8856'>
+          <var-decl name='async_page_flip' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8864'>
+          <var-decl name='allow_fb_modifiers' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8872'>
+          <var-decl name='normalize_zpos' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='modifiers_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='cursor_width' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_config.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8992'>
+          <var-decl name='cursor_height' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_config.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='suspend_state' type-id='e3dd029f' visibility='default' filepath='include/drm/drm_mode_config.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='helper_private' type-id='dc79526d' visibility='default' filepath='include/drm/drm_mode_config.h' line='929' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_modeset_lock' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='76' column='1' id='ae5fc04a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='45793a97' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_modeset_acquire_ctx' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='43' column='1' id='118c2af9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ww_ctx' type-id='2c45f76e' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='contended' type-id='b4b06bb8' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='locked' type-id='72f469ec' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='trylock_only' type-id='b50a4934' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='interruptible' type-id='b50a4934' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mode_config_funcs' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/drm/drm_mode_config.h' line='47' column='1' id='b444361f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb_create' type-id='fd8daf85' visibility='default' filepath='include/drm/drm_mode_config.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_format_info' type-id='f2bb73e9' visibility='default' filepath='include/drm/drm_mode_config.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='output_poll_changed' type-id='62995e90' visibility='default' filepath='include/drm/drm_mode_config.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mode_valid' type-id='57ca5882' visibility='default' filepath='include/drm/drm_mode_config.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='atomic_check' type-id='d74fad0a' visibility='default' filepath='include/drm/drm_mode_config.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_commit' type-id='69b48bd3' visibility='default' filepath='include/drm/drm_mode_config.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_state_alloc' type-id='27c3122f' visibility='default' filepath='include/drm/drm_mode_config.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='atomic_state_clear' type-id='75795f13' visibility='default' filepath='include/drm/drm_mode_config.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='atomic_state_free' type-id='75795f13' visibility='default' filepath='include/drm/drm_mode_config.h' line='333' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_framebuffer' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/drm/drm_framebuffer.h' line='117' column='1' id='a0eb3346'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_framebuffer.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_framebuffer.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_framebuffer.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='comm' type-id='ac1fa8c0' visibility='default' filepath='include/drm/drm_framebuffer.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='format' type-id='f10b2208' visibility='default' filepath='include/drm/drm_framebuffer.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='funcs' type-id='8e992c3d' visibility='default' filepath='include/drm/drm_framebuffer.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='pitches' type-id='49580a63' visibility='default' filepath='include/drm/drm_framebuffer.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='offsets' type-id='49580a63' visibility='default' filepath='include/drm/drm_framebuffer.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='modifier' type-id='9c313c2d' visibility='default' filepath='include/drm/drm_framebuffer.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='width' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_framebuffer.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='height' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_framebuffer.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_framebuffer.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='hot_x' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_framebuffer.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hot_y' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_framebuffer.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='filp_head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_framebuffer.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='obj' type-id='a459476c' visibility='default' filepath='include/drm/drm_framebuffer.h' line='213' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mode_object' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_mode_object.h' line='55' column='1' id='350f4182'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_object.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_object.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='properties' type-id='c353cb3e' visibility='default' filepath='include/drm/drm_mode_object.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/drm/drm_mode_object.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='free_cb' type-id='16575f26' visibility='default' filepath='include/drm/drm_mode_object.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_object_properties' size-in-bits='8256' is-struct='yes' visibility='default' filepath='include/drm/drm_mode_object.h' line='67' column='1' id='970d3828'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_object.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='properties' type-id='53f04f9e' visibility='default' filepath='include/drm/drm_mode_object.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='values' type-id='ed4ceada' visibility='default' filepath='include/drm/drm_mode_object.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_property' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/drm/drm_property.h' line='73' column='1' id='811caa36'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_property.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_property.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='8f92235e' visibility='default' filepath='include/drm/drm_property.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/drm/drm_property.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='num_values' type-id='8f92235e' visibility='default' filepath='include/drm/drm_property.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='values' type-id='5d6479ae' visibility='default' filepath='include/drm/drm_property.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_property.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='enum_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_property.h' line='190' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_format_info' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/drm/drm_fourcc.h' line='56' column='1' id='a588cbed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='format' type-id='19c2251e' visibility='default' filepath='include/drm/drm_fourcc.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='depth' type-id='f9b06939' visibility='default' filepath='include/drm/drm_fourcc.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='num_planes' type-id='f9b06939' visibility='default' filepath='include/drm/drm_fourcc.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='' type-id='5ab3bf5b' visibility='default' filepath='include/drm/drm_fourcc.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='block_w' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_fourcc.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='block_h' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_fourcc.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='hsub' type-id='f9b06939' visibility='default' filepath='include/drm/drm_fourcc.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vsub' type-id='f9b06939' visibility='default' filepath='include/drm/drm_fourcc.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='has_alpha' type-id='b50a4934' visibility='default' filepath='include/drm/drm_fourcc.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='is_yuv' type-id='b50a4934' visibility='default' filepath='include/drm/drm_fourcc.h' line='135' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__8' size-in-bits='24' is-anonymous='yes' visibility='default' filepath='include/drm/drm_fourcc.h' line='72' column='1' id='5ab3bf5b'>
+        <data-member access='private'>
+          <var-decl name='cpp' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_fourcc.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='char_per_block' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_fourcc.h' line='107' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='drm_framebuffer_funcs' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/drm_framebuffer.h' line='42' column='1' id='eb452ce6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='destroy' type-id='dd634c69' visibility='default' filepath='include/drm/drm_framebuffer.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='create_handle' type-id='541466be' visibility='default' filepath='include/drm/drm_framebuffer.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dirty' type-id='040ef975' visibility='default' filepath='include/drm/drm_framebuffer.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_clip_rect' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm.h' line='97' column='1' id='ec280828'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x1' type-id='8efea9e5' visibility='default' filepath='include/uapi/drm/drm.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='y1' type-id='8efea9e5' visibility='default' filepath='include/uapi/drm/drm.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='x2' type-id='8efea9e5' visibility='default' filepath='include/uapi/drm/drm.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='y2' type-id='8efea9e5' visibility='default' filepath='include/uapi/drm/drm.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mode_fb_cmd2' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='500' column='1' id='05bdad78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pixel_format' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='handles' type-id='3fa29bab' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='pitches' type-id='3fa29bab' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='offsets' type-id='3fa29bab' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='modifier' type-id='ce805d5e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='534' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_atomic_state' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='316' column='1' id='8bb9a8e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_atomic.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_atomic.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='allow_modeset' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='legacy_cursor_update' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='async_update' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='duplicated' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='planes' type-id='356fd446' visibility='default' filepath='include/drm/drm_atomic.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='crtcs' type-id='611a28de' visibility='default' filepath='include/drm/drm_atomic.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_connector' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_atomic.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='connectors' type-id='6d26c72b' visibility='default' filepath='include/drm/drm_atomic.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_private_objs' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_atomic.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='private_objs' type-id='258e7e75' visibility='default' filepath='include/drm/drm_atomic.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='acquire_ctx' type-id='d1499e71' visibility='default' filepath='include/drm/drm_atomic.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fake_commit' type-id='3f40b772' visibility='default' filepath='include/drm/drm_atomic.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='commit_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_atomic.h' line='368' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__drm_planes_state' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='149' column='1' id='a79398e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='a6711537' visibility='default' filepath='include/drm/drm_atomic.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='d0835005' visibility='default' filepath='include/drm/drm_atomic.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='d0835005' visibility='default' filepath='include/drm/drm_atomic.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='d0835005' visibility='default' filepath='include/drm/drm_atomic.h' line='151' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_plane' size-in-bits='10368' is-struct='yes' visibility='default' filepath='include/drm/drm_plane.h' line='556' column='1' id='60f2213f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_plane.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_plane.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/drm/drm_plane.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mutex' type-id='ae5fc04a' visibility='default' filepath='include/drm/drm_plane.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_plane.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='possible_crtcs' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='format_types' type-id='90421557' visibility='default' filepath='include/drm/drm_plane.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='format_count' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='format_default' type-id='b50a4934' visibility='default' filepath='include/drm/drm_plane.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='modifiers' type-id='5d6479ae' visibility='default' filepath='include/drm/drm_plane.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='modifier_count' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_plane.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_plane.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='old_fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_plane.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='funcs' type-id='cfd5d066' visibility='default' filepath='include/drm/drm_plane.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='properties' type-id='970d3828' visibility='default' filepath='include/drm/drm_plane.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='type' type-id='5eed3c85' visibility='default' filepath='include/drm/drm_plane.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9824'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='helper_private' type-id='affc31e5' visibility='default' filepath='include/drm/drm_plane.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='state' type-id='d0835005' visibility='default' filepath='include/drm/drm_plane.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='alpha_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='zpos_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='rotation_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='blend_mode_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='color_encoding_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='color_range_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='707' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc' size-in-bits='14528' is-struct='yes' visibility='default' filepath='include/drm/drm_crtc.h' line='879' column='1' id='3f5f978b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_crtc.h' line='881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='port' type-id='9a537bbe' visibility='default' filepath='include/drm/drm_crtc.h' line='883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_crtc.h' line='891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/drm/drm_crtc.h' line='894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mutex' type-id='ae5fc04a' visibility='default' filepath='include/drm/drm_crtc.h' line='906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_crtc.h' line='909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='primary' type-id='a6711537' visibility='default' filepath='include/drm/drm_crtc.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cursor' type-id='a6711537' visibility='default' filepath='include/drm/drm_crtc.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_crtc.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='cursor_x' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_crtc.h' line='942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='cursor_y' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_crtc.h' line='950' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='enabled' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='960' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mode' type-id='55efd1a3' visibility='default' filepath='include/drm/drm_crtc.h' line='970' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='hwmode' type-id='55efd1a3' visibility='default' filepath='include/drm/drm_crtc.h' line='985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='x' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_crtc.h' line='994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4640'>
+          <var-decl name='y' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_crtc.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='funcs' type-id='7236c5c8' visibility='default' filepath='include/drm/drm_crtc.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='gamma_size' type-id='8f92235e' visibility='default' filepath='include/drm/drm_crtc.h' line='1011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='gamma_store' type-id='8a121f49' visibility='default' filepath='include/drm/drm_crtc.h' line='1017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='helper_private' type-id='423f39eb' visibility='default' filepath='include/drm/drm_crtc.h' line='1020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='properties' type-id='970d3828' visibility='default' filepath='include/drm/drm_crtc.h' line='1023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='state' type-id='35078cb9' visibility='default' filepath='include/drm/drm_crtc.h' line='1038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='commit_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_crtc.h' line='1055' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='commit_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_crtc.h' line='1062' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13440'>
+          <var-decl name='debugfs_entry' type-id='27675065' visibility='default' filepath='include/drm/drm_crtc.h' line='1070' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='crc' type-id='3bcab18a' visibility='default' filepath='include/drm/drm_crtc.h' line='1078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14080'>
+          <var-decl name='fence_context' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_crtc.h' line='1085' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14112'>
+          <var-decl name='fence_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_crtc.h' line='1092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14144'>
+          <var-decl name='fence_seqno' type-id='7359adad' visibility='default' filepath='include/drm/drm_crtc.h' line='1099' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14208'>
+          <var-decl name='timeline_name' type-id='16dc656a' visibility='default' filepath='include/drm/drm_crtc.h' line='1106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14464'>
+          <var-decl name='self_refresh_data' type-id='fa013de0' visibility='default' filepath='include/drm/drm_crtc.h' line='1113' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc_funcs' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/drm/drm_crtc.h' line='390' column='1' id='e019c76b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reset' type-id='a50616ee' visibility='default' filepath='include/drm/drm_crtc.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cursor_set' type-id='601c5a9c' visibility='default' filepath='include/drm/drm_crtc.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cursor_set2' type-id='3df34728' visibility='default' filepath='include/drm/drm_crtc.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cursor_move' type-id='7f9fdb63' visibility='default' filepath='include/drm/drm_crtc.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='gamma_set' type-id='ceacf83c' visibility='default' filepath='include/drm/drm_crtc.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='destroy' type-id='a50616ee' visibility='default' filepath='include/drm/drm_crtc.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_config' type-id='4fc3b355' visibility='default' filepath='include/drm/drm_crtc.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='page_flip' type-id='5ad57c34' visibility='default' filepath='include/drm/drm_crtc.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='page_flip_target' type-id='ccd6746f' visibility='default' filepath='include/drm/drm_crtc.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_property' type-id='e1038882' visibility='default' filepath='include/drm/drm_crtc.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_duplicate_state' type-id='d664ced0' visibility='default' filepath='include/drm/drm_crtc.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_destroy_state' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_crtc.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_set_property' type-id='102ab76c' visibility='default' filepath='include/drm/drm_crtc.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='atomic_get_property' type-id='c0240e5c' visibility='default' filepath='include/drm/drm_crtc.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='late_register' type-id='dfd1cc3d' visibility='default' filepath='include/drm/drm_crtc.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='early_unregister' type-id='a50616ee' visibility='default' filepath='include/drm/drm_crtc.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='set_crc_source' type-id='ee3b6114' visibility='default' filepath='include/drm/drm_crtc.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='verify_crc_source' type-id='31163f5a' visibility='default' filepath='include/drm/drm_crtc.h' line='788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='get_crc_sources' type-id='bda384fe' visibility='default' filepath='include/drm/drm_crtc.h' line='810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='atomic_print_state' type-id='1f51f8f7' visibility='default' filepath='include/drm/drm_crtc.h' line='822' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='get_vblank_counter' type-id='1dd1747d' visibility='default' filepath='include/drm/drm_crtc.h' line='849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='enable_vblank' type-id='dfd1cc3d' visibility='default' filepath='include/drm/drm_crtc.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='disable_vblank' type-id='a50616ee' visibility='default' filepath='include/drm/drm_crtc.h' line='870' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mode_set' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_crtc.h' line='1129' column='1' id='ef266a3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_crtc.h' line='1130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_crtc.h' line='1131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode' type-id='11e02f83' visibility='default' filepath='include/drm/drm_crtc.h' line='1132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='x' type-id='8f92235e' visibility='default' filepath='include/drm/drm_crtc.h' line='1134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='y' type-id='8f92235e' visibility='default' filepath='include/drm/drm_crtc.h' line='1135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connectors' type-id='be55f776' visibility='default' filepath='include/drm/drm_crtc.h' line='1137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_connectors' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_crtc.h' line='1138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_pending_vblank_event' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/drm/drm_vblank.h' line='40' column='1' id='64249e25'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='2aa44dc9' visibility='default' filepath='include/drm/drm_vblank.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pipe' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_vblank.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sequence' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_vblank.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='event' type-id='4eb3729d' visibility='default' filepath='include/drm/drm_vblank.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_pending_event' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/drm/drm_file.h' line='89' column='1' id='2aa44dc9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='completion' type-id='389faaf7' visibility='default' filepath='include/drm/drm_file.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='completion_release' type-id='e3fbbc86' visibility='default' filepath='include/drm/drm_file.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='event' type-id='5b35aab5' visibility='default' filepath='include/drm/drm_file.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fence' type-id='28271da3' visibility='default' filepath='include/drm/drm_file.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='file_priv' type-id='9e99ecc2' visibility='default' filepath='include/drm/drm_file.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='link' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pending_link' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_event' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm.h' line='973' column='1' id='9857a465'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='length' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='975' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__9' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/drm/drm_vblank.h' line='56' column='1' id='4eb3729d'>
+        <data-member access='private'>
+          <var-decl name='base' type-id='9857a465' visibility='default' filepath='include/drm/drm_vblank.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='vbl' type-id='bc6bca7e' visibility='default' filepath='include/drm/drm_vblank.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='seq' type-id='3aca1eaa' visibility='default' filepath='include/drm/drm_vblank.h' line='75' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='drm_event_vblank' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm.h' line='982' column='1' id='bc6bca7e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='9857a465' visibility='default' filepath='include/uapi/drm/drm.h' line='983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='user_data' type-id='d3130597' visibility='default' filepath='include/uapi/drm/drm.h' line='984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tv_sec' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tv_usec' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='crtc_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='988' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_event_crtc_sequence' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm.h' line='994' column='1' id='3aca1eaa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='9857a465' visibility='default' filepath='include/uapi/drm/drm.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='user_data' type-id='d3130597' visibility='default' filepath='include/uapi/drm/drm.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='time_ns' type-id='49659421' visibility='default' filepath='include/uapi/drm/drm.h' line='997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sequence' type-id='d3130597' visibility='default' filepath='include/uapi/drm/drm.h' line='998' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc_state' size-in-bits='4032' is-struct='yes' visibility='default' filepath='include/drm/drm_crtc.h' line='100' column='1' id='ea65fb21'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_crtc.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='enable' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='active' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='planes_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='mode_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='active_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='connectors_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='zpos_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='color_mgmt_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='no_vblank' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='plane_mask' type-id='19c2251e' visibility='default' filepath='include/drm/drm_crtc.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='connector_mask' type-id='19c2251e' visibility='default' filepath='include/drm/drm_crtc.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='encoder_mask' type-id='19c2251e' visibility='default' filepath='include/drm/drm_crtc.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='adjusted_mode' type-id='55efd1a3' visibility='default' filepath='include/drm/drm_crtc.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='mode' type-id='55efd1a3' visibility='default' filepath='include/drm/drm_crtc.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='mode_blob' type-id='c4126d52' visibility='default' filepath='include/drm/drm_crtc.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='degamma_lut' type-id='c4126d52' visibility='default' filepath='include/drm/drm_crtc.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='ctm' type-id='c4126d52' visibility='default' filepath='include/drm/drm_crtc.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='gamma_lut' type-id='c4126d52' visibility='default' filepath='include/drm/drm_crtc.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='target_vblank' type-id='19c2251e' visibility='default' filepath='include/drm/drm_crtc.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3808'>
+          <var-decl name='async_flip' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3816'>
+          <var-decl name='vrr_enabled' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3824'>
+          <var-decl name='self_refresh_active' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='event' type-id='6301fad3' visibility='default' filepath='include/drm/drm_crtc.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='commit' type-id='3f40b772' visibility='default' filepath='include/drm/drm_crtc.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='state' type-id='e3dd029f' visibility='default' filepath='include/drm/drm_crtc.h' line='375' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_property_blob' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/drm/drm_property.h' line='209' column='1' id='3dfb1294'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_property.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_property.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='head_global' type-id='72f469ec' visibility='default' filepath='include/drm/drm_property.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='head_file' type-id='72f469ec' visibility='default' filepath='include/drm/drm_property.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='length' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_property.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_property.h' line='215' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc_commit' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='70' column='1' id='09d6e90a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_atomic.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_atomic.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flip_done' type-id='f9fef04f' visibility='default' filepath='include/drm/drm_atomic.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='hw_done' type-id='f9fef04f' visibility='default' filepath='include/drm/drm_atomic.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cleanup_done' type-id='f9fef04f' visibility='default' filepath='include/drm/drm_atomic.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='commit_entry' type-id='72f469ec' visibility='default' filepath='include/drm/drm_atomic.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='event' type-id='6301fad3' visibility='default' filepath='include/drm/drm_atomic.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='abort_completion' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='146' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='uint16_t' type-id='1dc6a898' filepath='include/linux/types.h' line='108' column='1' id='149c6638'/>
+      <class-decl name='drm_crtc_helper_funcs' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='61' column='1' id='ad4d49e8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dpms' type-id='a9a90075' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prepare' type-id='a50616ee' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='commit' type-id='a50616ee' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mode_valid' type-id='8d681b98' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mode_fixup' type-id='e003b5ce' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mode_set' type-id='18901036' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mode_set_nofb' type-id='a50616ee' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mode_set_base' type-id='9c5c88be' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mode_set_base_atomic' type-id='c368c2fb' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='disable' type-id='a50616ee' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_check' type-id='5ef2f163' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_begin' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_flush' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='atomic_enable' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='atomic_disable' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='451' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='mode_set_atomic' filepath='include/drm/drm_fb_helper.h' line='41' column='1' id='7e90344c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='LEAVE_ATOMIC_MODE_SET' value='0'/>
+        <enumerator name='ENTER_ATOMIC_MODE_SET' value='1'/>
+      </enum-decl>
+      <class-decl name='drm_crtc_crc' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='53' column='1' id='3bcab18a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='source' type-id='80f4b756' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='opened' type-id='b50a4934' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='overflow' type-id='b50a4934' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='entries' type-id='54a031e1' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='head' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tail' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='values_cnt' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='wq' type-id='b5ab048f' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc_crc_entry' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='33' column='1' id='0f47abb9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='has_frame_counter' type-id='b50a4934' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='frame' type-id='8f92235e' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crcs' type-id='1e6c0b80' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_plane_funcs' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/drm/drm_plane.h' line='237' column='1' id='60eff7ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='update_plane' type-id='16723420' visibility='default' filepath='include/drm/drm_plane.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable_plane' type-id='d58d6a5f' visibility='default' filepath='include/drm/drm_plane.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destroy' type-id='20e4b16e' visibility='default' filepath='include/drm/drm_plane.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reset' type-id='20e4b16e' visibility='default' filepath='include/drm/drm_plane.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_property' type-id='8f0815d8' visibility='default' filepath='include/drm/drm_plane.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_duplicate_state' type-id='841501c0' visibility='default' filepath='include/drm/drm_plane.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_destroy_state' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_plane.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='atomic_set_property' type-id='49e4df08' visibility='default' filepath='include/drm/drm_plane.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='atomic_get_property' type-id='a6945abe' visibility='default' filepath='include/drm/drm_plane.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='late_register' type-id='e1ec3697' visibility='default' filepath='include/drm/drm_plane.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='early_unregister' type-id='20e4b16e' visibility='default' filepath='include/drm/drm_plane.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_print_state' type-id='86c0ad39' visibility='default' filepath='include/drm/drm_plane.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='format_mod_supported' type-id='4af717b2' visibility='default' filepath='include/drm/drm_plane.h' line='495' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_plane_state' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/drm/drm_plane.h' line='47' column='1' id='a1700eb5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='plane' type-id='a6711537' visibility='default' filepath='include/drm/drm_plane.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_plane.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_plane.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fence' type-id='28271da3' visibility='default' filepath='include/drm/drm_plane.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='crtc_x' type-id='3ff5601b' visibility='default' filepath='include/drm/drm_plane.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='crtc_y' type-id='3ff5601b' visibility='default' filepath='include/drm/drm_plane.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='crtc_w' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='crtc_h' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='src_x' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='src_y' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='src_h' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='src_w' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='alpha' type-id='1dc6a898' visibility='default' filepath='include/drm/drm_plane.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='pixel_blend_mode' type-id='149c6638' visibility='default' filepath='include/drm/drm_plane.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='rotation' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='zpos' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='normalized_zpos' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='color_encoding' type-id='e57e5f2b' visibility='default' filepath='include/drm/drm_plane.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='color_range' type-id='322e1b47' visibility='default' filepath='include/drm/drm_plane.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fb_damage_clips' type-id='c4126d52' visibility='default' filepath='include/drm/drm_plane.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='src' type-id='4ccdd8a9' visibility='default' filepath='include/drm/drm_plane.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dst' type-id='4ccdd8a9' visibility='default' filepath='include/drm/drm_plane.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='visible' type-id='b50a4934' visibility='default' filepath='include/drm/drm_plane.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='commit' type-id='3f40b772' visibility='default' filepath='include/drm/drm_plane.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='state' type-id='e3dd029f' visibility='default' filepath='include/drm/drm_plane.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_color_encoding' filepath='include/drm/drm_color_mgmt.h' line='54' column='1' id='e57e5f2b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_COLOR_YCBCR_BT601' value='0'/>
+        <enumerator name='DRM_COLOR_YCBCR_BT709' value='1'/>
+        <enumerator name='DRM_COLOR_YCBCR_BT2020' value='2'/>
+        <enumerator name='DRM_COLOR_ENCODING_MAX' value='3'/>
+      </enum-decl>
+      <enum-decl name='drm_color_range' filepath='include/drm/drm_color_mgmt.h' line='61' column='1' id='322e1b47'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_COLOR_YCBCR_LIMITED_RANGE' value='0'/>
+        <enumerator name='DRM_COLOR_YCBCR_FULL_RANGE' value='1'/>
+        <enumerator name='DRM_COLOR_RANGE_MAX' value='2'/>
+      </enum-decl>
+      <class-decl name='drm_rect' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_rect.h' line='41' column='1' id='4ccdd8a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x1' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_rect.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='y1' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_rect.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='x2' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_rect.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='y2' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_rect.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_plane_type' filepath='include/drm/drm_plane.h' line='517' column='1' id='5eed3c85'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_PLANE_TYPE_OVERLAY' value='0'/>
+        <enumerator name='DRM_PLANE_TYPE_PRIMARY' value='1'/>
+        <enumerator name='DRM_PLANE_TYPE_CURSOR' value='2'/>
+      </enum-decl>
+      <class-decl name='drm_plane_helper_funcs' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1071' column='1' id='7cfcbd14'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare_fb' type-id='4c74ea47' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cleanup_fb' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='atomic_check' type-id='4c74ea47' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='atomic_update' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='atomic_disable' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_async_check' type-id='4c74ea47' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_async_update' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1253' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__drm_crtcs_state' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='154' column='1' id='b35335c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_atomic.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='35078cb9' visibility='default' filepath='include/drm/drm_atomic.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='35078cb9' visibility='default' filepath='include/drm/drm_atomic.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='35078cb9' visibility='default' filepath='include/drm/drm_atomic.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='commit' type-id='3f40b772' visibility='default' filepath='include/drm/drm_atomic.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='out_fence_ptr' type-id='9f2cce4b' visibility='default' filepath='include/drm/drm_atomic.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='last_vblank_count' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_atomic.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__drm_connnectors_state' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='172' column='1' id='45f4b23b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='4db02c58' visibility='default' filepath='include/drm/drm_atomic.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='249ef586' visibility='default' filepath='include/drm/drm_atomic.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='249ef586' visibility='default' filepath='include/drm/drm_atomic.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='249ef586' visibility='default' filepath='include/drm/drm_atomic.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='out_fence_ptr' type-id='9f2cce4b' visibility='default' filepath='include/drm/drm_atomic.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_connector_state' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='530' column='1' id='5ad3f0d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='connector' type-id='4db02c58' visibility='default' filepath='include/drm/drm_connector.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_connector.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='best_encoder' type-id='74d89ebd' visibility='default' filepath='include/drm/drm_connector.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='link_status' type-id='a28dfadd' visibility='default' filepath='include/drm/drm_connector.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='state' type-id='e3dd029f' visibility='default' filepath='include/drm/drm_connector.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='commit' type-id='3f40b772' visibility='default' filepath='include/drm/drm_connector.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='tv' type-id='25b5f0d7' visibility='default' filepath='include/drm/drm_connector.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='self_refresh_aware' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='picture_aspect_ratio' type-id='a30ccd44' visibility='default' filepath='include/drm/drm_connector.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='content_type' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='hdcp_content_type' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='scaling_mode' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='content_protection' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='colorspace' type-id='19c2251e' visibility='default' filepath='include/drm/drm_connector.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='writeback_job' type-id='7b4ee155' visibility='default' filepath='include/drm/drm_connector.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='max_requested_bpc' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1096'>
+          <var-decl name='max_bpc' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hdr_output_metadata' type-id='c4126d52' visibility='default' filepath='include/drm/drm_connector.h' line='664' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_encoder' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/drm/drm_encoder.h' line='99' column='1' id='d12f4a1d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_encoder.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_encoder.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_encoder.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/drm/drm_encoder.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='encoder_type' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_encoder.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_encoder.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='possible_crtcs' type-id='8f92235e' visibility='default' filepath='include/drm/drm_encoder.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='possible_clones' type-id='8f92235e' visibility='default' filepath='include/drm/drm_encoder.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_encoder.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='bridge' type-id='8582e5ec' visibility='default' filepath='include/drm/drm_encoder.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='funcs' type-id='1701f1ac' visibility='default' filepath='include/drm/drm_encoder.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='helper_private' type-id='32162fa7' visibility='default' filepath='include/drm/drm_encoder.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_bridge' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/drm/drm_bridge.h' line='378' column='1' id='87c471e6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_bridge.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encoder' type-id='74d89ebd' visibility='default' filepath='include/drm/drm_bridge.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='8582e5ec' visibility='default' filepath='include/drm/drm_bridge.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/drm/drm_bridge.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_bridge.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='timings' type-id='10c598f7' visibility='default' filepath='include/drm/drm_bridge.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='funcs' type-id='39e20e4b' visibility='default' filepath='include/drm/drm_bridge.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='driver_private' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_bridge.h' line='400' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_bridge_timings' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_bridge.h' line='342' column='1' id='0c695772'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='input_bus_flags' type-id='19c2251e' visibility='default' filepath='include/drm/drm_bridge.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='setup_time_ps' type-id='19c2251e' visibility='default' filepath='include/drm/drm_bridge.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hold_time_ps' type-id='19c2251e' visibility='default' filepath='include/drm/drm_bridge.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dual_link' type-id='b50a4934' visibility='default' filepath='include/drm/drm_bridge.h' line='372' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_bridge_funcs' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/drm/drm_bridge.h' line='38' column='1' id='5e0dec46'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attach' type-id='901effb6' visibility='default' filepath='include/drm/drm_bridge.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='detach' type-id='e1fb15d1' visibility='default' filepath='include/drm/drm_bridge.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode_valid' type-id='2c8c8c19' visibility='default' filepath='include/drm/drm_bridge.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mode_fixup' type-id='ea44fe69' visibility='default' filepath='include/drm/drm_bridge.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='disable' type-id='e1fb15d1' visibility='default' filepath='include/drm/drm_bridge.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='post_disable' type-id='e1fb15d1' visibility='default' filepath='include/drm/drm_bridge.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mode_set' type-id='63662edb' visibility='default' filepath='include/drm/drm_bridge.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pre_enable' type-id='e1fb15d1' visibility='default' filepath='include/drm/drm_bridge.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='enable' type-id='e1fb15d1' visibility='default' filepath='include/drm/drm_bridge.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='atomic_pre_enable' type-id='ff30d95c' visibility='default' filepath='include/drm/drm_bridge.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_enable' type-id='ff30d95c' visibility='default' filepath='include/drm/drm_bridge.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_disable' type-id='ff30d95c' visibility='default' filepath='include/drm/drm_bridge.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_post_disable' type-id='ff30d95c' visibility='default' filepath='include/drm/drm_bridge.h' line='335' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_encoder_funcs' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_encoder.h' line='40' column='1' id='c20384d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reset' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_encoder.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='destroy' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_encoder.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='late_register' type-id='5b7d6a61' visibility='default' filepath='include/drm/drm_encoder.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='early_unregister' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_encoder.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_encoder_helper_funcs' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='472' column='1' id='3cdc7e32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dpms' type-id='0b72aa63' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mode_valid' type-id='a3a882dc' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode_fixup' type-id='375f8cba' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prepare' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='commit' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mode_set' type-id='a6426b1c' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_mode_set' type-id='e15f707f' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_crtc' type-id='fc630d30' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='detect' type-id='69099556' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='atomic_disable' type-id='1da45ab3' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_enable' type-id='1da45ab3' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='disable' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='enable' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='atomic_check' type-id='21e51c00' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='815' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_connector_status' filepath='include/drm/drm_connector.h' line='60' column='1' id='f7b0e1b4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='connector_status_connected' value='1'/>
+        <enumerator name='connector_status_disconnected' value='2'/>
+        <enumerator name='connector_status_unknown' value='3'/>
+      </enum-decl>
+      <enum-decl name='drm_link_status' filepath='include/drm/drm_connector.h' line='224' column='1' id='a28dfadd'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_LINK_STATUS_GOOD' value='0'/>
+        <enumerator name='DRM_LINK_STATUS_BAD' value='1'/>
+      </enum-decl>
+      <class-decl name='drm_tv_connector_state' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='515' column='1' id='25b5f0d7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subconnector' type-id='b590704f' visibility='default' filepath='include/drm/drm_connector.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='margins' type-id='a38825b1' visibility='default' filepath='include/drm/drm_connector.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='mode' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='brightness' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='contrast' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flicker_reduction' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='overscan' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='saturation' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='hue' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='524' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_mode_subconnector' filepath='include/uapi/drm/drm_mode.h' line='344' column='1' id='b590704f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_Automatic' value='0'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_Unknown' value='0'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_DVID' value='3'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_DVIA' value='4'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_Composite' value='5'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_SVIDEO' value='6'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_Component' value='8'/>
+        <enumerator name='DRM_MODE_SUBCONNECTOR_SCART' value='9'/>
+      </enum-decl>
+      <class-decl name='drm_connector_tv_margins' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='481' column='1' id='a38825b1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bottom' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='left' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='right' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='top' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='500' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__drm_private_objs_state' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='293' column='1' id='99c97f55'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='11c98e9a' visibility='default' filepath='include/drm/drm_atomic.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='4ea020ae' visibility='default' filepath='include/drm/drm_atomic.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='4ea020ae' visibility='default' filepath='include/drm/drm_atomic.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='4ea020ae' visibility='default' filepath='include/drm/drm_atomic.h' line='295' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_private_obj' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='243' column='1' id='cc3a4f0c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_atomic.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='ae5fc04a' visibility='default' filepath='include/drm/drm_atomic.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='state' type-id='4ea020ae' visibility='default' filepath='include/drm/drm_atomic.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='funcs' type-id='515fa1af' visibility='default' filepath='include/drm/drm_atomic.h' line='266' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_private_state' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='289' column='1' id='b281e308'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='e3dd029f' visibility='default' filepath='include/drm/drm_atomic.h' line='290' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_private_state_funcs' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='198' column='1' id='6110f5ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='atomic_duplicate_state' type-id='a20ce8b2' visibility='default' filepath='include/drm/drm_atomic.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='atomic_destroy_state' type-id='dc18a9b0' visibility='default' filepath='include/drm/drm_atomic.h' line='217' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mode_config_helper_funcs' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1273' column='1' id='fa206174'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='atomic_commit_tail' type-id='75795f13' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1309' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='switch_power_state' filepath='include/drm/drm_device.h' line='33' column='1' id='40bb3c00'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_SWITCH_POWER_ON' value='0'/>
+        <enumerator name='DRM_SWITCH_POWER_OFF' value='1'/>
+        <enumerator name='DRM_SWITCH_POWER_CHANGING' value='2'/>
+        <enumerator name='DRM_SWITCH_POWER_DYNAMIC_OFF' value='3'/>
+      </enum-decl>
+      <class-decl name='drm_fb_helper' size-in-bits='2880' is-struct='yes' visibility='default' filepath='include/drm/drm_fb_helper.h' line='114' column='1' id='55b7e9ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='client' type-id='0ab6a08c' visibility='default' filepath='include/drm/drm_fb_helper.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='buffer' type-id='b78e1fbb' visibility='default' filepath='include/drm/drm_fb_helper.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_fb_helper.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_fb_helper.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='funcs' type-id='b4872443' visibility='default' filepath='include/drm/drm_fb_helper.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fbdev' type-id='9f763fd8' visibility='default' filepath='include/drm/drm_fb_helper.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pseudo_palette' type-id='46fc18d9' visibility='default' filepath='include/drm/drm_fb_helper.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='dirty_clip' type-id='ec280828' visibility='default' filepath='include/drm/drm_fb_helper.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='dirty_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_fb_helper.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dirty_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_fb_helper.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='resume_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_fb_helper.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_fb_helper.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='kernel_fb_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_fb_helper.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='delayed_hotplug' type-id='b50a4934' visibility='default' filepath='include/drm/drm_fb_helper.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2824'>
+          <var-decl name='deferred_setup' type-id='b50a4934' visibility='default' filepath='include/drm/drm_fb_helper.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='preferred_bpp' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_fb_helper.h' line='188' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_client_dev' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/drm/drm_client.h' line='65' column='1' id='0ab6a08c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_client.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/drm/drm_client.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_client.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='funcs' type-id='67ede465' visibility='default' filepath='include/drm/drm_client.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='file' type-id='9e99ecc2' visibility='default' filepath='include/drm/drm_client.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='modeset_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_client.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='modesets' type-id='8106240b' visibility='default' filepath='include/drm/drm_client.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_client_funcs' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_client.h' line='24' column='1' id='9840934c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/drm/drm_client.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unregister' type-id='18e3d2c7' visibility='default' filepath='include/drm/drm_client.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='restore' type-id='c6e1b58c' visibility='default' filepath='include/drm/drm_client.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hotplug' type-id='c6e1b58c' visibility='default' filepath='include/drm/drm_client.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_client_buffer' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/drm/drm_client.h' line='117' column='1' id='2a13094b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='client' type-id='cc1804ea' visibility='default' filepath='include/drm/drm_client.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='handle' type-id='19c2251e' visibility='default' filepath='include/drm/drm_client.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pitch' type-id='19c2251e' visibility='default' filepath='include/drm/drm_client.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gem' type-id='abd62a96' visibility='default' filepath='include/drm/drm_client.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vaddr' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_client.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_client.h' line='146' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_fb_helper_funcs' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/drm/drm_fb_helper.h' line='77' column='1' id='1a200140'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb_probe' type-id='4a5aa6b9' visibility='default' filepath='include/drm/drm_fb_helper.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_fb_helper_surface_size' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/drm_fb_helper.h' line='63' column='1' id='edc6f434'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb_width' type-id='19c2251e' visibility='default' filepath='include/drm/drm_fb_helper.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fb_height' type-id='19c2251e' visibility='default' filepath='include/drm/drm_fb_helper.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='surface_width' type-id='19c2251e' visibility='default' filepath='include/drm/drm_fb_helper.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='surface_height' type-id='19c2251e' visibility='default' filepath='include/drm/drm_fb_helper.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='surface_bpp' type-id='19c2251e' visibility='default' filepath='include/drm/drm_fb_helper.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='surface_depth' type-id='19c2251e' visibility='default' filepath='include/drm/drm_fb_helper.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_connector_registration_state' filepath='include/drm/drm_connector.h' line='95' column='1' id='0b8fe6b9'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_CONNECTOR_INITIALIZING' value='0'/>
+        <enumerator name='DRM_CONNECTOR_REGISTERED' value='1'/>
+        <enumerator name='DRM_CONNECTOR_UNREGISTERED' value='2'/>
+      </enum-decl>
+      <class-decl name='drm_display_info' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='366' column='1' id='228c7c6c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width_mm' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height_mm' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bpc' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='subpixel_order' type-id='a93e6dcd' visibility='default' filepath='include/drm/drm_connector.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='panel_orientation' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='color_formats' type-id='19c2251e' visibility='default' filepath='include/drm/drm_connector.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bus_formats' type-id='aded214c' visibility='default' filepath='include/drm/drm_connector.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_bus_formats' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='bus_flags' type-id='19c2251e' visibility='default' filepath='include/drm/drm_connector.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_tmds_clock' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='dvi_dual' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='has_hdmi_infoframe' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='rgb_quant_range_selectable' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='376'>
+          <var-decl name='edid_hdmi_dc_modes' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cea_rev' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hdmi' type-id='452748b2' visibility='default' filepath='include/drm/drm_connector.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='non_desktop' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='468' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='subpixel_order' filepath='include/drm/drm_connector.h' line='134' column='1' id='a93e6dcd'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SubPixelUnknown' value='0'/>
+        <enumerator name='SubPixelHorizontalRGB' value='1'/>
+        <enumerator name='SubPixelHorizontalBGR' value='2'/>
+        <enumerator name='SubPixelVerticalRGB' value='3'/>
+        <enumerator name='SubPixelVerticalBGR' value='4'/>
+        <enumerator name='SubPixelNone' value='5'/>
+      </enum-decl>
+      <class-decl name='drm_hdmi_info' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='186' column='1' id='452748b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scdc' type-id='2c7c7fd8' visibility='default' filepath='include/drm/drm_connector.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='y420_vdb_modes' type-id='f05e8e77' visibility='default' filepath='include/drm/drm_connector.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='y420_cmdb_modes' type-id='f05e8e77' visibility='default' filepath='include/drm/drm_connector.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='y420_cmdb_map' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_connector.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='y420_dc_modes' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='210' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_scdc' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='164' column='1' id='2c7c7fd8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='read_request' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='scrambling' type-id='beea899b' visibility='default' filepath='include/drm/drm_connector.h' line='176' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_scrambling' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='147' column='1' id='beea899b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='low_rates' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='155' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_connector_funcs' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='674' column='1' id='142d8eca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dpms' type-id='d379869f' visibility='default' filepath='include/drm/drm_connector.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reset' type-id='a3cb28f1' visibility='default' filepath='include/drm/drm_connector.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='detect' type-id='9f1392b3' visibility='default' filepath='include/drm/drm_connector.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='force' type-id='a3cb28f1' visibility='default' filepath='include/drm/drm_connector.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fill_modes' type-id='96846df4' visibility='default' filepath='include/drm/drm_connector.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_property' type-id='9a2977d1' visibility='default' filepath='include/drm/drm_connector.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='late_register' type-id='0b8c9d30' visibility='default' filepath='include/drm/drm_connector.h' line='808' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='early_unregister' type-id='a3cb28f1' visibility='default' filepath='include/drm/drm_connector.h' line='821' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='destroy' type-id='a3cb28f1' visibility='default' filepath='include/drm/drm_connector.h' line='831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='atomic_duplicate_state' type-id='be89b2b8' visibility='default' filepath='include/drm/drm_connector.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_destroy_state' type-id='6e5d37e2' visibility='default' filepath='include/drm/drm_connector.h' line='874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_set_property' type-id='69fbf2a0' visibility='default' filepath='include/drm/drm_connector.h' line='919' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_get_property' type-id='456e047e' visibility='default' filepath='include/drm/drm_connector.h' line='942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='atomic_print_state' type-id='b01310d2' visibility='default' filepath='include/drm/drm_connector.h' line='956' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_connector_helper_funcs' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='837' column='1' id='c571b65b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_modes' type-id='0b8c9d30' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='detect_ctx' type-id='a8bd8fa1' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode_valid' type-id='ff7f72b4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='best_encoder' type-id='a4de2233' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='969' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='atomic_best_encoder' type-id='0b5f3d7c' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_check' type-id='2e18356f' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_commit' type-id='6e5d37e2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='prepare_writeback_job' type-id='a92ff885' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cleanup_writeback_job' type-id='b781f274' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1050' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_cmdline_mode' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='968' column='1' id='458106cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/drm/drm_connector.h' line='974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='specified' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='refresh_specified' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='bpp_specified' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='xres' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='yres' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='bpp' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='refresh' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='rb' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='424'>
+          <var-decl name='interlace' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='432'>
+          <var-decl name='cvt' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='440'>
+          <var-decl name='margins' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='force' type-id='e1a0be31' visibility='default' filepath='include/drm/drm_connector.h' line='1061' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='rotation_reflection' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='1071' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='tv_margins' type-id='a38825b1' visibility='default' filepath='include/drm/drm_connector.h' line='1076' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_connector_force' filepath='include/drm/drm_connector.h' line='47' column='1' id='e1a0be31'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_FORCE_UNSPECIFIED' value='0'/>
+        <enumerator name='DRM_FORCE_OFF' value='1'/>
+        <enumerator name='DRM_FORCE_ON' value='2'/>
+        <enumerator name='DRM_FORCE_ON_DIGITAL' value='3'/>
+      </enum-decl>
+      <class-decl name='drm_tile_group' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='1576' column='1' id='edb008f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/drm/drm_connector.h' line='1577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_connector.h' line='1578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='group_data' type-id='d2f7b56a' visibility='default' filepath='include/drm/drm_connector.h' line='1580' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hdr_sink_metadata' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='375' column='1' id='b459f8ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='metadata_type' type-id='3f1a6b60' visibility='default' filepath='include/linux/hdmi.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='' type-id='c778239e' visibility='default' filepath='include/linux/hdmi.h' line='383' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__11' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/hdmi.h' line='383' column='1' id='c778239e'>
+        <data-member access='private'>
+          <var-decl name='hdmi_type1' type-id='4ba022f8' visibility='default' filepath='include/linux/hdmi.h' line='384' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='hdr_static_metadata' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='362' column='1' id='4ba022f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='eotf' type-id='8f048e17' visibility='default' filepath='include/linux/hdmi.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='metadata_type' type-id='8f048e17' visibility='default' filepath='include/linux/hdmi.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='max_cll' type-id='d315442e' visibility='default' filepath='include/linux/hdmi.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_fall' type-id='d315442e' visibility='default' filepath='include/linux/hdmi.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='min_cll' type-id='d315442e' visibility='default' filepath='include/linux/hdmi.h' line='367' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_connector_list_iter' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='1599' column='1' id='d1f16456'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_connector.h' line='1601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='conn' type-id='4db02c58' visibility='default' filepath='include/drm/drm_connector.h' line='1602' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='45f4b23b' size-in-bits='64' id='6d26c72b'/>
+      <pointer-type-def type-id='b35335c8' size-in-bits='64' id='611a28de'/>
+      <pointer-type-def type-id='a79398e0' size-in-bits='64' id='356fd446'/>
+      <pointer-type-def type-id='99c97f55' size-in-bits='64' id='258e7e75'/>
+      <pointer-type-def type-id='ba3b5f2c' size-in-bits='64' id='bda384fe'/>
+      <qualified-type-def type-id='5e0dec46' const='yes' id='545e9343'/>
+      <pointer-type-def type-id='545e9343' size-in-bits='64' id='39e20e4b'/>
+      <qualified-type-def type-id='0c695772' const='yes' id='fdc939a7'/>
+      <pointer-type-def type-id='fdc939a7' size-in-bits='64' id='10c598f7'/>
+      <qualified-type-def type-id='9840934c' const='yes' id='34401d0d'/>
+      <pointer-type-def type-id='34401d0d' size-in-bits='64' id='67ede465'/>
+      <qualified-type-def type-id='142d8eca' const='yes' id='f508b3a9'/>
+      <pointer-type-def type-id='f508b3a9' size-in-bits='64' id='3fb29739'/>
+      <qualified-type-def type-id='c571b65b' const='yes' id='3ab32f02'/>
+      <pointer-type-def type-id='3ab32f02' size-in-bits='64' id='90133bf8'/>
+      <qualified-type-def type-id='5ad3f0d0' const='yes' id='9b2db0ab'/>
+      <pointer-type-def type-id='9b2db0ab' size-in-bits='64' id='c9ecdb13'/>
+      <qualified-type-def type-id='e019c76b' const='yes' id='a192e032'/>
+      <pointer-type-def type-id='a192e032' size-in-bits='64' id='7236c5c8'/>
+      <qualified-type-def type-id='ad4d49e8' const='yes' id='d9de7d63'/>
+      <pointer-type-def type-id='d9de7d63' size-in-bits='64' id='423f39eb'/>
+      <qualified-type-def type-id='ea65fb21' const='yes' id='14d2a428'/>
+      <pointer-type-def type-id='14d2a428' size-in-bits='64' id='c9982f26'/>
+      <qualified-type-def type-id='55efd1a3' const='yes' id='fffdaf52'/>
+      <pointer-type-def type-id='fffdaf52' size-in-bits='64' id='745b39e8'/>
+      <qualified-type-def type-id='c20384d9' const='yes' id='532f030e'/>
+      <pointer-type-def type-id='532f030e' size-in-bits='64' id='1701f1ac'/>
+      <qualified-type-def type-id='3cdc7e32' const='yes' id='d4db3637'/>
+      <pointer-type-def type-id='d4db3637' size-in-bits='64' id='32162fa7'/>
+      <qualified-type-def type-id='1a200140' const='yes' id='2b48c0bb'/>
+      <pointer-type-def type-id='2b48c0bb' size-in-bits='64' id='b4872443'/>
+      <qualified-type-def type-id='a588cbed' const='yes' id='4ba7baf2'/>
+      <pointer-type-def type-id='4ba7baf2' size-in-bits='64' id='f10b2208'/>
+      <pointer-type-def type-id='d47d86c5' size-in-bits='64' id='f2bb73e9'/>
+      <qualified-type-def type-id='eb452ce6' const='yes' id='9ca9fcc5'/>
+      <pointer-type-def type-id='9ca9fcc5' size-in-bits='64' id='8e992c3d'/>
+      <qualified-type-def type-id='3bc524c0' const='yes' id='e03666d9'/>
+      <pointer-type-def type-id='e03666d9' size-in-bits='64' id='e8a41089'/>
+      <qualified-type-def type-id='833c0b8c' const='yes' id='d6de54c5'/>
+      <pointer-type-def type-id='d6de54c5' size-in-bits='64' id='2effb43d'/>
+      <qualified-type-def type-id='b444361f' const='yes' id='59fa7bb0'/>
+      <pointer-type-def type-id='59fa7bb0' size-in-bits='64' id='3f50936e'/>
+      <qualified-type-def type-id='fa206174' const='yes' id='82c5dbd5'/>
+      <pointer-type-def type-id='82c5dbd5' size-in-bits='64' id='dc79526d'/>
+      <qualified-type-def type-id='05bdad78' const='yes' id='70dd03cd'/>
+      <pointer-type-def type-id='70dd03cd' size-in-bits='64' id='92ed24a5'/>
+      <qualified-type-def type-id='60eff7ff' const='yes' id='bdf845e8'/>
+      <pointer-type-def type-id='bdf845e8' size-in-bits='64' id='cfd5d066'/>
+      <qualified-type-def type-id='7cfcbd14' const='yes' id='5b7f098d'/>
+      <pointer-type-def type-id='5b7f098d' size-in-bits='64' id='affc31e5'/>
+      <qualified-type-def type-id='a1700eb5' const='yes' id='c7516f02'/>
+      <pointer-type-def type-id='c7516f02' size-in-bits='64' id='ed31fbf8'/>
+      <qualified-type-def type-id='6110f5ec' const='yes' id='6d7d60df'/>
+      <pointer-type-def type-id='6d7d60df' size-in-bits='64' id='515fa1af'/>
+      <pointer-type-def type-id='c201baac' size-in-bits='64' id='5e4f599c'/>
+      <pointer-type-def type-id='111ab5a4' size-in-bits='64' id='a4e2d046'/>
+      <pointer-type-def type-id='f01bc099' size-in-bits='64' id='e68e04c1'/>
+      <pointer-type-def type-id='874fb8c0' size-in-bits='64' id='c137ea76'/>
+      <pointer-type-def type-id='8bb9a8e9' size-in-bits='64' id='e3dd029f'/>
+      <pointer-type-def type-id='6a65de43' size-in-bits='64' id='27c3122f'/>
+      <pointer-type-def type-id='87c471e6' size-in-bits='64' id='8582e5ec'/>
+      <pointer-type-def type-id='2a13094b' size-in-bits='64' id='b78e1fbb'/>
+      <pointer-type-def type-id='0ab6a08c' size-in-bits='64' id='cc1804ea'/>
+      <pointer-type-def type-id='ec280828' size-in-bits='64' id='254852de'/>
+      <pointer-type-def type-id='f02c18fa' size-in-bits='64' id='4db02c58'/>
+      <pointer-type-def type-id='4db02c58' size-in-bits='64' id='be55f776'/>
+      <pointer-type-def type-id='d1f16456' size-in-bits='64' id='40a902ec'/>
+      <pointer-type-def type-id='5ad3f0d0' size-in-bits='64' id='249ef586'/>
+      <pointer-type-def type-id='e184aa4e' size-in-bits='64' id='be89b2b8'/>
+      <pointer-type-def type-id='3f5f978b' size-in-bits='64' id='b64ad7cb'/>
+      <pointer-type-def type-id='3a711e5e' size-in-bits='64' id='fc630d30'/>
+      <pointer-type-def type-id='09d6e90a' size-in-bits='64' id='3f40b772'/>
+      <pointer-type-def type-id='0f47abb9' size-in-bits='64' id='54a031e1'/>
+      <pointer-type-def type-id='ea65fb21' size-in-bits='64' id='35078cb9'/>
+      <pointer-type-def type-id='fe3cfa56' size-in-bits='64' id='d664ced0'/>
+      <pointer-type-def type-id='e96cc76d' size-in-bits='64' id='8898134d'/>
+      <pointer-type-def type-id='55efd1a3' size-in-bits='64' id='11e02f83'/>
+      <pointer-type-def type-id='73303b8e' size-in-bits='64' id='1d52bc4e'/>
+      <pointer-type-def type-id='d12f4a1d' size-in-bits='64' id='74d89ebd'/>
+      <pointer-type-def type-id='a843bacf' size-in-bits='64' id='a4de2233'/>
+      <pointer-type-def type-id='79256f62' size-in-bits='64' id='0b5f3d7c'/>
+      <pointer-type-def type-id='9857a465' size-in-bits='64' id='5b35aab5'/>
+      <pointer-type-def type-id='55b7e9ac' size-in-bits='64' id='147b8c0a'/>
+      <pointer-type-def type-id='edc6f434' size-in-bits='64' id='ef68bde2'/>
+      <pointer-type-def type-id='cc4a63ba' size-in-bits='64' id='9e99ecc2'/>
+      <pointer-type-def type-id='a0eb3346' size-in-bits='64' id='7b332e1c'/>
+      <pointer-type-def type-id='228968a1' size-in-bits='64' id='fd8daf85'/>
+      <pointer-type-def type-id='3bc524c0' size-in-bits='64' id='abd62a96'/>
+      <pointer-type-def type-id='272672f5' size-in-bits='64' id='b121f651'/>
+      <pointer-type-def type-id='c33808e6' size-in-bits='64' id='38d8fc10'/>
+      <pointer-type-def type-id='b6b06c66' size-in-bits='64' id='76ba9b40'/>
+      <pointer-type-def type-id='f8a4685d' size-in-bits='64' id='07df1a3d'/>
+      <pointer-type-def type-id='d5cb77a9' size-in-bits='64' id='6c3b3f8f'/>
+      <pointer-type-def type-id='46d25262' size-in-bits='64' id='28cbbf40'/>
+      <pointer-type-def type-id='350f4182' size-in-bits='64' id='c5417630'/>
+      <pointer-type-def type-id='ef266a3b' size-in-bits='64' id='8106240b'/>
+      <pointer-type-def type-id='118c2af9' size-in-bits='64' id='d1499e71'/>
+      <pointer-type-def type-id='ae5fc04a' size-in-bits='64' id='b4b06bb8'/>
+      <pointer-type-def type-id='970d3828' size-in-bits='64' id='c353cb3e'/>
+      <pointer-type-def type-id='b9675ea0' size-in-bits='64' id='c5491078'/>
+      <pointer-type-def type-id='64249e25' size-in-bits='64' id='6301fad3'/>
+      <pointer-type-def type-id='60f2213f' size-in-bits='64' id='a6711537'/>
+      <pointer-type-def type-id='a1700eb5' size-in-bits='64' id='d0835005'/>
+      <pointer-type-def type-id='58313606' size-in-bits='64' id='841501c0'/>
+      <pointer-type-def type-id='68b6a809' size-in-bits='64' id='7ac48c21'/>
+      <pointer-type-def type-id='cc3a4f0c' size-in-bits='64' id='11c98e9a'/>
+      <pointer-type-def type-id='b281e308' size-in-bits='64' id='4ea020ae'/>
+      <pointer-type-def type-id='328910d8' size-in-bits='64' id='a20ce8b2'/>
+      <pointer-type-def type-id='811caa36' size-in-bits='64' id='26ea5d4c'/>
+      <pointer-type-def type-id='3dfb1294' size-in-bits='64' id='c4126d52'/>
+      <pointer-type-def type-id='12506762' size-in-bits='64' id='fa013de0'/>
+      <pointer-type-def type-id='edb008f7' size-in-bits='64' id='c6c44b9f'/>
+      <pointer-type-def type-id='e5ebb0e5' size-in-bits='64' id='04d2f8d3'/>
+      <pointer-type-def type-id='1b04dce5' size-in-bits='64' id='0c6d12d5'/>
+      <pointer-type-def type-id='8008efb8' size-in-bits='64' id='dbdf0f9e'/>
+      <pointer-type-def type-id='f14fc18e' size-in-bits='64' id='2944961e'/>
+      <pointer-type-def type-id='71f18ea5' size-in-bits='64' id='7b4ee155'/>
+      <pointer-type-def type-id='746df737' size-in-bits='64' id='9f1392b3'/>
+      <pointer-type-def type-id='20638bb4' size-in-bits='64' id='69099556'/>
+      <pointer-type-def type-id='013ba5ed' size-in-bits='64' id='2c8c8c19'/>
+      <pointer-type-def type-id='b938ea42' size-in-bits='64' id='ff7f72b4'/>
+      <pointer-type-def type-id='3d84df46' size-in-bits='64' id='8d681b98'/>
+      <pointer-type-def type-id='f2dcb698' size-in-bits='64' id='57ca5882'/>
+      <pointer-type-def type-id='4e0e413a' size-in-bits='64' id='a3a882dc'/>
+      <pointer-type-def type-id='e8862ab4' size-in-bits='64' id='901effb6'/>
+      <pointer-type-def type-id='6ab964d2' size-in-bits='64' id='c6e1b58c'/>
+      <pointer-type-def type-id='f1babf06' size-in-bits='64' id='0b8c9d30'/>
+      <pointer-type-def type-id='6d905adc' size-in-bits='64' id='456e047e'/>
+      <pointer-type-def type-id='32d07fab' size-in-bits='64' id='2e18356f'/>
+      <pointer-type-def type-id='f43da4de' size-in-bits='64' id='69fbf2a0'/>
+      <pointer-type-def type-id='eeda2e3d' size-in-bits='64' id='a8bd8fa1'/>
+      <pointer-type-def type-id='97471c35' size-in-bits='64' id='9a2977d1'/>
+      <pointer-type-def type-id='4dedc1bb' size-in-bits='64' id='d379869f'/>
+      <pointer-type-def type-id='699ab992' size-in-bits='64' id='96846df4'/>
+      <pointer-type-def type-id='71fd1591' size-in-bits='64' id='dfd1cc3d'/>
+      <pointer-type-def type-id='172997aa' size-in-bits='64' id='ee3b6114'/>
+      <pointer-type-def type-id='93df1bf0' size-in-bits='64' id='31163f5a'/>
+      <pointer-type-def type-id='68adba6a' size-in-bits='64' id='c0240e5c'/>
+      <pointer-type-def type-id='30f77767' size-in-bits='64' id='5ef2f163'/>
+      <pointer-type-def type-id='c01f4982' size-in-bits='64' id='102ab76c'/>
+      <pointer-type-def type-id='6081969c' size-in-bits='64' id='18901036'/>
+      <pointer-type-def type-id='a6dcac82' size-in-bits='64' id='601c5a9c'/>
+      <pointer-type-def type-id='17f9ad66' size-in-bits='64' id='3df34728'/>
+      <pointer-type-def type-id='615707ca' size-in-bits='64' id='5ad57c34'/>
+      <pointer-type-def type-id='4d41685b' size-in-bits='64' id='ccd6746f'/>
+      <pointer-type-def type-id='b0cde5c7' size-in-bits='64' id='c368c2fb'/>
+      <pointer-type-def type-id='971a52d0' size-in-bits='64' id='e1038882'/>
+      <pointer-type-def type-id='c2f3c8c7' size-in-bits='64' id='7f9fdb63'/>
+      <pointer-type-def type-id='202c5914' size-in-bits='64' id='9c5c88be'/>
+      <pointer-type-def type-id='84730732' size-in-bits='64' id='ceacf83c'/>
+      <pointer-type-def type-id='c3277f63' size-in-bits='64' id='d9d2e26f'/>
+      <pointer-type-def type-id='a61b2dc8' size-in-bits='64' id='d74fad0a'/>
+      <pointer-type-def type-id='3d75b067' size-in-bits='64' id='69b48bd3'/>
+      <pointer-type-def type-id='c2ddfea1' size-in-bits='64' id='ccba7a85'/>
+      <pointer-type-def type-id='9a54e634' size-in-bits='64' id='f9d4c3c6'/>
+      <pointer-type-def type-id='4f5cd1f6' size-in-bits='64' id='ca39eb80'/>
+      <pointer-type-def type-id='0795c636' size-in-bits='64' id='2579e5b0'/>
+      <pointer-type-def type-id='fbd40bed' size-in-bits='64' id='adc543b9'/>
+      <pointer-type-def type-id='7ac88bec' size-in-bits='64' id='4a984946'/>
+      <pointer-type-def type-id='1a648909' size-in-bits='64' id='b8905925'/>
+      <pointer-type-def type-id='50f15cd5' size-in-bits='64' id='30c8e7b1'/>
+      <pointer-type-def type-id='4e407315' size-in-bits='64' id='8ac1c0d9'/>
+      <pointer-type-def type-id='874459e5' size-in-bits='64' id='5b7d6a61'/>
+      <pointer-type-def type-id='2b3f252e' size-in-bits='64' id='21e51c00'/>
+      <pointer-type-def type-id='56fa322d' size-in-bits='64' id='4a5aa6b9'/>
+      <pointer-type-def type-id='1c62d4d4' size-in-bits='64' id='c95d5016'/>
+      <pointer-type-def type-id='935923dc' size-in-bits='64' id='aca8090e'/>
+      <pointer-type-def type-id='e374f511' size-in-bits='64' id='c62ff945'/>
+      <pointer-type-def type-id='5c166f04' size-in-bits='64' id='541466be'/>
+      <pointer-type-def type-id='800ed759' size-in-bits='64' id='040ef975'/>
+      <pointer-type-def type-id='40877b8a' size-in-bits='64' id='12e23e5c'/>
+      <pointer-type-def type-id='857f27d6' size-in-bits='64' id='8e2012e0'/>
+      <pointer-type-def type-id='6ba772ee' size-in-bits='64' id='0de721e0'/>
+      <pointer-type-def type-id='194ac023' size-in-bits='64' id='516294a7'/>
+      <pointer-type-def type-id='507536a0' size-in-bits='64' id='ca55f982'/>
+      <pointer-type-def type-id='322dfcc1' size-in-bits='64' id='4fc3b355'/>
+      <pointer-type-def type-id='5f5b9bdb' size-in-bits='64' id='e1ec3697'/>
+      <pointer-type-def type-id='332a260c' size-in-bits='64' id='a6945abe'/>
+      <pointer-type-def type-id='77328cce' size-in-bits='64' id='16723420'/>
+      <pointer-type-def type-id='ef46a2bb' size-in-bits='64' id='d58d6a5f'/>
+      <pointer-type-def type-id='5a678b43' size-in-bits='64' id='4c74ea47'/>
+      <pointer-type-def type-id='c016e2d6' size-in-bits='64' id='49e4df08'/>
+      <pointer-type-def type-id='304ac94e' size-in-bits='64' id='8f0815d8'/>
+      <pointer-type-def type-id='82d08b71' size-in-bits='64' id='a92ff885'/>
+      <pointer-type-def type-id='5c93f9a8' size-in-bits='64' id='85196e40'/>
+      <pointer-type-def type-id='d1d4db8e' size-in-bits='64' id='32774f90'/>
+      <pointer-type-def type-id='ae99f6b5' size-in-bits='64' id='ea44fe69'/>
+      <pointer-type-def type-id='7f73c08c' size-in-bits='64' id='e003b5ce'/>
+      <pointer-type-def type-id='6c91f89a' size-in-bits='64' id='93ff0584'/>
+      <pointer-type-def type-id='b8e2b737' size-in-bits='64' id='4e80a34b'/>
+      <pointer-type-def type-id='86bc8898' size-in-bits='64' id='375f8cba'/>
+      <pointer-type-def type-id='1c171578' size-in-bits='64' id='4af717b2'/>
+      <pointer-type-def type-id='c78b7721' size-in-bits='64' id='1dd1747d'/>
+      <pointer-type-def type-id='09818b99' size-in-bits='64' id='52dd4de5'/>
+      <pointer-type-def type-id='149c6638' size-in-bits='64' id='8a121f49'/>
+      <pointer-type-def type-id='8f92235e' size-in-bits='64' id='90421557'/>
+      <pointer-type-def type-id='9c313c2d' size-in-bits='64' id='5d6479ae'/>
+      <pointer-type-def type-id='150dc81a' size-in-bits='64' id='3b5c2208'/>
+      <pointer-type-def type-id='2aee9912' size-in-bits='64' id='50bcf651'/>
+      <pointer-type-def type-id='fac43f4c' size-in-bits='64' id='e3fbbc86'/>
+      <pointer-type-def type-id='891c6957' size-in-bits='64' id='75795f13'/>
+      <pointer-type-def type-id='da3b08cd' size-in-bits='64' id='e1fb15d1'/>
+      <pointer-type-def type-id='81d7511f' size-in-bits='64' id='63662edb'/>
+      <pointer-type-def type-id='7775f78a' size-in-bits='64' id='ff30d95c'/>
+      <pointer-type-def type-id='765a8acb' size-in-bits='64' id='18e3d2c7'/>
+      <pointer-type-def type-id='cecfa2ad' size-in-bits='64' id='a3cb28f1'/>
+      <pointer-type-def type-id='07c62f88' size-in-bits='64' id='6e5d37e2'/>
+      <pointer-type-def type-id='2a02b07c' size-in-bits='64' id='a50616ee'/>
+      <pointer-type-def type-id='52d21874' size-in-bits='64' id='a3c6fb36'/>
+      <pointer-type-def type-id='28678bf9' size-in-bits='64' id='a9a90075'/>
+      <pointer-type-def type-id='a222e3fe' size-in-bits='64' id='62995e90'/>
+      <pointer-type-def type-id='80b3d6aa' size-in-bits='64' id='157eca44'/>
+      <pointer-type-def type-id='a7bf86ca' size-in-bits='64' id='972f2a14'/>
+      <pointer-type-def type-id='b7290258' size-in-bits='64' id='5de03572'/>
+      <pointer-type-def type-id='ec9f1e6a' size-in-bits='64' id='ac9d10e4'/>
+      <pointer-type-def type-id='f3dc294f' size-in-bits='64' id='1da45ab3'/>
+      <pointer-type-def type-id='1d2b3133' size-in-bits='64' id='e15f707f'/>
+      <pointer-type-def type-id='fff725a2' size-in-bits='64' id='a6426b1c'/>
+      <pointer-type-def type-id='0a04ae5f' size-in-bits='64' id='0b72aa63'/>
+      <pointer-type-def type-id='5c6f297d' size-in-bits='64' id='dd634c69'/>
+      <pointer-type-def type-id='2d421ebf' size-in-bits='64' id='9126441b'/>
+      <pointer-type-def type-id='5fa4ba0d' size-in-bits='64' id='133b86a1'/>
+      <pointer-type-def type-id='4111263b' size-in-bits='64' id='06586097'/>
+      <pointer-type-def type-id='ba9f6db4' size-in-bits='64' id='20e4b16e'/>
+      <pointer-type-def type-id='4c7af498' size-in-bits='64' id='d196b9c2'/>
+      <pointer-type-def type-id='cf8cfd4f' size-in-bits='64' id='12dffdbb'/>
+      <pointer-type-def type-id='6f026338' size-in-bits='64' id='b01310d2'/>
+      <pointer-type-def type-id='792f7033' size-in-bits='64' id='1f51f8f7'/>
+      <pointer-type-def type-id='031e8b8d' size-in-bits='64' id='86c0ad39'/>
+      <pointer-type-def type-id='97e3fb6c' size-in-bits='64' id='1c51ec16'/>
+      <pointer-type-def type-id='c0d6093d' size-in-bits='64' id='ef76b4f1'/>
+      <pointer-type-def type-id='e0ed16c6' size-in-bits='64' id='dc18a9b0'/>
+      <pointer-type-def type-id='eaff4dba' size-in-bits='64' id='b781f274'/>
+      <pointer-type-def type-id='ee780377' size-in-bits='64' id='2edb3e4b'/>
+      <function-decl name='drm_connector_list_iter_next' mangled-name='drm_connector_list_iter_next' filepath='include/drm/drm_connector.h' line='1608' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_list_iter_next'>
+        <parameter type-id='40a902ec'/>
+        <return type-id='4db02c58'/>
+      </function-decl>
+      <function-decl name='drm_connector_list_iter_end' mangled-name='drm_connector_list_iter_end' filepath='include/drm/drm_connector.h' line='1609' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_list_iter_end'>
+        <parameter type-id='40a902ec'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_modeset_lock_all' mangled-name='drm_modeset_lock_all' filepath='include/drm/drm_modeset_lock.h' line='126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_lock_all'>
+        <parameter type-id='8898134d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_modeset_unlock_all' mangled-name='drm_modeset_unlock_all' filepath='include/drm/drm_modeset_lock.h' line='127' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_unlock_all'>
+        <parameter type-id='8898134d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mode_duplicate' mangled-name='drm_mode_duplicate' filepath='include/drm/drm_modes.h' line='512' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_duplicate'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='745b39e8'/>
+        <return type-id='11e02f83'/>
+      </function-decl>
+      <function-decl name='drm_dbg' mangled-name='drm_dbg' filepath='include/drm/drm_print.h' line='283' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dbg'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mode_destroy' mangled-name='drm_mode_destroy' filepath='include/drm/drm_modes.h' line='465' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_destroy'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='11e02f83'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mode_debug_printmodeline' mangled-name='drm_mode_debug_printmodeline' filepath='include/drm/drm_modes.h' line='472' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_debug_printmodeline'>
+        <parameter type-id='745b39e8'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mode_object_get' mangled-name='drm_mode_object_get' filepath='include/drm/drm_mode_object.h' line='120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_object_get'>
+        <parameter type-id='c5417630'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mode_object_put' mangled-name='drm_mode_object_put' filepath='include/drm/drm_mode_object.h' line='121' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_object_put'>
+        <parameter type-id='c5417630'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_err' mangled-name='drm_err' filepath='include/drm/drm_print.h' line='285' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_err'>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='28063720' size-in-bits='64' id='e2cefc47'/>
+      <enum-decl name='drm_ioctl_flags' filepath='include/drm/drm_ioctl.h' line='79' column='1' id='ad578603'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_AUTH' value='1'/>
+        <enumerator name='DRM_MASTER' value='2'/>
+        <enumerator name='DRM_ROOT_ONLY' value='4'/>
+        <enumerator name='DRM_UNLOCKED' value='16'/>
+        <enumerator name='DRM_RENDER_ALLOW' value='32'/>
+      </enum-decl>
+      <function-type size-in-bits='64' id='ba3b5f2c'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='78c01427'/>
+        <return type-id='13956559'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d47d86c5'>
+        <parameter type-id='92ed24a5'/>
+        <return type-id='f10b2208'/>
+      </function-type>
+      <function-type size-in-bits='64' id='111ab5a4'>
+        <parameter type-id='abd62a96'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='5e4f599c'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6a65de43'>
+        <parameter type-id='8898134d'/>
+        <return type-id='e3dd029f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e184aa4e'>
+        <parameter type-id='4db02c58'/>
+        <return type-id='249ef586'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3a711e5e'>
+        <parameter type-id='74d89ebd'/>
+        <return type-id='b64ad7cb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fe3cfa56'>
+        <parameter type-id='b64ad7cb'/>
+        <return type-id='35078cb9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a843bacf'>
+        <parameter type-id='4db02c58'/>
+        <return type-id='74d89ebd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='79256f62'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='249ef586'/>
+        <return type-id='74d89ebd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='228968a1'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='9e99ecc2'/>
+        <parameter type-id='92ed24a5'/>
+        <return type-id='7b332e1c'/>
+      </function-type>
+      <function-type size-in-bits='64' id='272672f5'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='5e4f599c'/>
+        <return type-id='abd62a96'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c33808e6'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='e68e04c1'/>
+        <parameter type-id='4adb0e6a'/>
+        <return type-id='abd62a96'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b6b06c66'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='abd62a96'/>
+      </function-type>
+      <function-type size-in-bits='64' id='58313606'>
+        <parameter type-id='a6711537'/>
+        <return type-id='d0835005'/>
+      </function-type>
+      <function-type size-in-bits='64' id='328910d8'>
+        <parameter type-id='11c98e9a'/>
+        <return type-id='4ea020ae'/>
+      </function-type>
+      <function-type size-in-bits='64' id='746df737'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='f7b0e1b4'/>
+      </function-type>
+      <function-type size-in-bits='64' id='20638bb4'>
+        <parameter type-id='74d89ebd'/>
+        <parameter type-id='4db02c58'/>
+        <return type-id='f7b0e1b4'/>
+      </function-type>
+      <function-type size-in-bits='64' id='013ba5ed'>
+        <parameter type-id='8582e5ec'/>
+        <parameter type-id='745b39e8'/>
+        <return type-id='4fb62cb0'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b938ea42'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='11e02f83'/>
+        <return type-id='4fb62cb0'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3d84df46'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='745b39e8'/>
+        <return type-id='4fb62cb0'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f2dcb698'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='745b39e8'/>
+        <return type-id='4fb62cb0'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4e0e413a'>
+        <parameter type-id='74d89ebd'/>
+        <parameter type-id='745b39e8'/>
+        <return type-id='4fb62cb0'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e8862ab4'>
+        <parameter type-id='8582e5ec'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6ab964d2'>
+        <parameter type-id='cc1804ea'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f1babf06'>
+        <parameter type-id='4db02c58'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6d905adc'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='c9ecdb13'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='5d6479ae'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='32d07fab'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='e3dd029f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f43da4de'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='249ef586'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='9c313c2d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eeda2e3d'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='d1499e71'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='97471c35'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='9c313c2d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4dedc1bb'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='699ab992'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='71fd1591'>
+        <parameter type-id='b64ad7cb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='172997aa'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='93df1bf0'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='78c01427'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='68adba6a'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='c9982f26'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='5d6479ae'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='30f77767'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='35078cb9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c01f4982'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='35078cb9'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='9c313c2d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6081969c'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='11e02f83'/>
+        <parameter type-id='11e02f83'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7b332e1c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a6dcac82'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='9e99ecc2'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='17f9ad66'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='9e99ecc2'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='3ff5601b'/>
+        <parameter type-id='3ff5601b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='615707ca'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='7b332e1c'/>
+        <parameter type-id='6301fad3'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='d1499e71'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4d41685b'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='7b332e1c'/>
+        <parameter type-id='6301fad3'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='d1499e71'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b0cde5c7'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='7b332e1c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7e90344c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='971a52d0'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='9c313c2d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c2f3c8c7'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='202c5914'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7b332e1c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='84730732'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='26d4d46f'/>
+        <parameter type-id='26d4d46f'/>
+        <parameter type-id='26d4d46f'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='d1499e71'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c3277f63'>
+        <parameter type-id='8898134d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a61b2dc8'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='e3dd029f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3d75b067'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='e3dd029f'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c2ddfea1'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='9e99ecc2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9a54e634'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='9e99ecc2'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='90421557'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f5cd1f6'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='9e99ecc2'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0795c636'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='9e99ecc2'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fbd40bed'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='07df1a3d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7ac88bec'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1a648909'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='50f15cd5'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4e407315'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='9e99ecc2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='874459e5'>
+        <parameter type-id='74d89ebd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2b3f252e'>
+        <parameter type-id='74d89ebd'/>
+        <parameter type-id='35078cb9'/>
+        <parameter type-id='249ef586'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='56fa322d'>
+        <parameter type-id='147b8c0a'/>
+        <parameter type-id='ef68bde2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1c62d4d4'>
+        <parameter type-id='9e99ecc2'/>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='28cbbf40'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='935923dc'>
+        <parameter type-id='9e99ecc2'/>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='8f92235e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e374f511'>
+        <parameter type-id='9e99ecc2'/>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='5d6479ae'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5c166f04'>
+        <parameter type-id='7b332e1c'/>
+        <parameter type-id='9e99ecc2'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='800ed759'>
+        <parameter type-id='7b332e1c'/>
+        <parameter type-id='9e99ecc2'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='254852de'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='40877b8a'>
+        <parameter type-id='abd62a96'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='857f27d6'>
+        <parameter type-id='abd62a96'/>
+        <parameter type-id='9e99ecc2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6ba772ee'>
+        <parameter type-id='abd62a96'/>
+        <parameter type-id='f1397309'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='194ac023'>
+        <parameter type-id='abd62a96'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='507536a0'>
+        <parameter type-id='6c3b3f8f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='322dfcc1'>
+        <parameter type-id='8106240b'/>
+        <parameter type-id='d1499e71'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5f5b9bdb'>
+        <parameter type-id='a6711537'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='332a260c'>
+        <parameter type-id='a6711537'/>
+        <parameter type-id='ed31fbf8'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='5d6479ae'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='77328cce'>
+        <parameter type-id='a6711537'/>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='7b332e1c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='d1499e71'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ef46a2bb'>
+        <parameter type-id='a6711537'/>
+        <parameter type-id='d1499e71'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5a678b43'>
+        <parameter type-id='a6711537'/>
+        <parameter type-id='d0835005'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c016e2d6'>
+        <parameter type-id='a6711537'/>
+        <parameter type-id='d0835005'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='9c313c2d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='304ac94e'>
+        <parameter type-id='a6711537'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='9c313c2d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='82d08b71'>
+        <parameter type-id='2944961e'/>
+        <parameter type-id='7b4ee155'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d1d4db8e'>
+        <parameter type-id='abd62a96'/>
+        <return type-id='4adb0e6a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ae99f6b5'>
+        <parameter type-id='8582e5ec'/>
+        <parameter type-id='745b39e8'/>
+        <parameter type-id='11e02f83'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7f73c08c'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='745b39e8'/>
+        <parameter type-id='11e02f83'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6c91f89a'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='44372936'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b8e2b737'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='44372936'/>
+        <parameter type-id='44372936'/>
+        <parameter type-id='745b39e8'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='86bc8898'>
+        <parameter type-id='74d89ebd'/>
+        <parameter type-id='745b39e8'/>
+        <parameter type-id='11e02f83'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1c171578'>
+        <parameter type-id='a6711537'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='9c313c2d'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c78b7721'>
+        <parameter type-id='b64ad7cb'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='09818b99'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fac43f4c'>
+        <parameter type-id='389faaf7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='891c6957'>
+        <parameter type-id='e3dd029f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da3b08cd'>
+        <parameter type-id='8582e5ec'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='81d7511f'>
+        <parameter type-id='8582e5ec'/>
+        <parameter type-id='745b39e8'/>
+        <parameter type-id='745b39e8'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7775f78a'>
+        <parameter type-id='8582e5ec'/>
+        <parameter type-id='e3dd029f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='765a8acb'>
+        <parameter type-id='cc1804ea'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cecfa2ad'>
+        <parameter type-id='4db02c58'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='07c62f88'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='249ef586'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2a02b07c'>
+        <parameter type-id='b64ad7cb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='52d21874'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='35078cb9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='28678bf9'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a222e3fe'>
+        <parameter type-id='8898134d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='80b3d6aa'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='9e99ecc2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a7bf86ca'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='07df1a3d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b7290258'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ec9f1e6a'>
+        <parameter type-id='74d89ebd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f3dc294f'>
+        <parameter type-id='74d89ebd'/>
+        <parameter type-id='e3dd029f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1d2b3133'>
+        <parameter type-id='74d89ebd'/>
+        <parameter type-id='35078cb9'/>
+        <parameter type-id='249ef586'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fff725a2'>
+        <parameter type-id='74d89ebd'/>
+        <parameter type-id='11e02f83'/>
+        <parameter type-id='11e02f83'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0a04ae5f'>
+        <parameter type-id='74d89ebd'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5c6f297d'>
+        <parameter type-id='7b332e1c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2d421ebf'>
+        <parameter type-id='abd62a96'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5fa4ba0d'>
+        <parameter type-id='abd62a96'/>
+        <parameter type-id='9e99ecc2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4111263b'>
+        <parameter type-id='abd62a96'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ba9f6db4'>
+        <parameter type-id='a6711537'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4c7af498'>
+        <parameter type-id='a6711537'/>
+        <parameter type-id='d0835005'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cf8cfd4f'>
+        <parameter type-id='7ac48c21'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6f026338'>
+        <parameter type-id='7ac48c21'/>
+        <parameter type-id='c9ecdb13'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='792f7033'>
+        <parameter type-id='7ac48c21'/>
+        <parameter type-id='c9982f26'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='031e8b8d'>
+        <parameter type-id='7ac48c21'/>
+        <parameter type-id='ed31fbf8'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='97e3fb6c'>
+        <parameter type-id='7ac48c21'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='e8a41089'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c0d6093d'>
+        <parameter type-id='7ac48c21'/>
+        <parameter type-id='3b5c2208'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e0ed16c6'>
+        <parameter type-id='11c98e9a'/>
+        <parameter type-id='4ea020ae'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eaff4dba'>
+        <parameter type-id='2944961e'/>
+        <parameter type-id='7b4ee155'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ee780377'>
+        <parameter type-id='abd62a96'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <pointer-type-def type-id='fbc017ef' size-in-bits='64' id='44372936'/>
+      <pointer-type-def type-id='c59e4f4c' size-in-bits='64' id='4adb0e6a'/>
+      <pointer-type-def type-id='b59d7dce' size-in-bits='64' id='78c01427'/>
+      <typedef-decl name='drm_ioctl_t' type-id='4e407315' filepath='include/drm/drm_ioctl.h' line='54' column='1' id='28063720'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_damage_helper.c' language='LANG_C89'>
+      <pointer-type-def type-id='4ccdd8a9' size-in-bits='64' id='c91d6c11'/>
+      <function-decl name='drm_plane_enable_fb_damage_clips' mangled-name='drm_plane_enable_fb_damage_clips' filepath='drivers/gpu/drm/drm_damage_helper.c' line='96' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_plane_enable_fb_damage_clips'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_damage_helper.c' line='96' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_object_attach_property' mangled-name='drm_object_attach_property' filepath='include/drm/drm_mode_object.h' line='130' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_object_attach_property'>
+        <parameter type-id='c5417630'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='3a47d82b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_dirtyfb' mangled-name='drm_atomic_helper_dirtyfb' filepath='drivers/gpu/drm/drm_damage_helper.c' line='160' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_dirtyfb'>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_damage_helper.c' line='160' column='1'/>
+        <parameter type-id='9e99ecc1' name='file_priv' filepath='drivers/gpu/drm/drm_damage_helper.c' line='161' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='drivers/gpu/drm/drm_damage_helper.c' line='161' column='1'/>
+        <parameter type-id='f0981eeb' name='color' filepath='drivers/gpu/drm/drm_damage_helper.c' line='162' column='1'/>
+        <parameter type-id='254852de' name='clips' filepath='drivers/gpu/drm/drm_damage_helper.c' line='162' column='1'/>
+        <parameter type-id='f0981eeb' name='num_clips' filepath='drivers/gpu/drm/drm_damage_helper.c' line='163' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_modeset_unlock' mangled-name='drm_modeset_unlock' filepath='include/drm/drm_modeset_lock.h' line='120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_unlock'>
+        <parameter type-id='b4b06bb8'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_state_clear' mangled-name='drm_atomic_state_clear' filepath='include/drm/drm_atomic.h' line='402' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_state_clear'>
+        <parameter type-id='e3dd029f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_rect_intersect' mangled-name='drm_rect_intersect' filepath='include/drm/drm_rect.h' line='176' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_rect_intersect'>
+        <parameter type-id='c91d6c11'/>
+        <parameter type-id='7d69a4de'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_dp_dual_mode_helper.c' language='LANG_C89'>
+      <function-decl name='i2c_transfer' mangled-name='i2c_transfer' filepath='include/linux/i2c.h' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_transfer'>
+        <parameter type-id='b9af02c3'/>
+        <parameter type-id='cd44bc95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='56ed3a25' size-in-bits='64' id='cd44bc95'/>
+      <class-decl name='i2c_msg' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/i2c.h' line='69' column='1' id='56ed3a25'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='d315442e' visibility='default' filepath='include/uapi/linux/i2c.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/uapi/linux/i2c.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='d315442e' visibility='default' filepath='include/uapi/linux/i2c.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='buf' type-id='474e5dcc' visibility='default' filepath='include/uapi/linux/i2c.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='8f048e17' size-in-bits='64' id='474e5dcc'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_dp_helper.c' language='LANG_C89'>
+      <class-decl name='cec_adapter' is-struct='yes' visibility='default' is-declaration-only='yes' id='075e0246'/>
+      <class-decl name='drm_atomic_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='8bb9a8e8'/>
+      <class-decl name='drm_crtc_commit' is-struct='yes' visibility='default' is-declaration-only='yes' id='09d6e909'/>
+      <class-decl name='drm_driver' is-struct='yes' visibility='default' is-declaration-only='yes' id='73303b8d'/>
+      <class-decl name='drm_fb_helper' is-struct='yes' visibility='default' is-declaration-only='yes' id='55b7e9ad'/>
+      <class-decl name='drm_dp_aux' size-in-bits='12224' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1298' column='1' id='b2983aea'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ddc' type-id='ec5384d3' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='hw_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='crc_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='crc_count' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='transfer' type-id='5deab224' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='i2c_nack_count' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10592'>
+          <var-decl name='i2c_defer_count' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='cec' type-id='507e56d0' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='is_remote' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1323' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_aux_msg' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1231' column='1' id='04e455f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='address' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='request' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='reply' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='buffer' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1236' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_aux_cec' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1250' column='1' id='507e56d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='adap' type-id='b94a2f7c' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unregister_work' type-id='5ad6e0ef' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1255' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_link' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1371' column='1' id='609c704c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='revision' type-id='002ac4a6' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rate' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_lanes' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='capabilities' type-id='7359adad' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1375' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='075e0246' size-in-bits='64' id='b94a2f7c'/>
+      <pointer-type-def type-id='8bb9a8e8' size-in-bits='64' id='e3dd029e'/>
+      <pointer-type-def type-id='09d6e909' size-in-bits='64' id='3f40b771'/>
+      <pointer-type-def type-id='b2983aea' size-in-bits='64' id='7c5f8cd8'/>
+      <pointer-type-def type-id='04e455f8' size-in-bits='64' id='c8851b4e'/>
+      <pointer-type-def type-id='609c704c' size-in-bits='64' id='f89c98aa'/>
+      <pointer-type-def type-id='73303b8d' size-in-bits='64' id='1d52bc4d'/>
+      <pointer-type-def type-id='55b7e9ad' size-in-bits='64' id='147b8c0b'/>
+      <pointer-type-def type-id='6c1c578a' size-in-bits='64' id='5deab224'/>
+      <function-decl name='drm_dp_channel_eq_ok' mangled-name='drm_dp_channel_eq_ok' filepath='drivers/gpu/drm/drm_dp_helper.c' line='62' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_channel_eq_ok'>
+        <parameter type-id='bbaf3419' name='link_status' filepath='drivers/gpu/drm/drm_dp_helper.c' line='62' column='1'/>
+        <parameter type-id='95e97e5e' name='lane_count' filepath='drivers/gpu/drm/drm_dp_helper.c' line='63' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drm_dp_clock_recovery_ok' mangled-name='drm_dp_clock_recovery_ok' filepath='drivers/gpu/drm/drm_dp_helper.c' line='82' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_clock_recovery_ok'>
+        <parameter type-id='bbaf3419' name='link_status' filepath='drivers/gpu/drm/drm_dp_helper.c' line='82' column='1'/>
+        <parameter type-id='95e97e5e' name='lane_count' filepath='drivers/gpu/drm/drm_dp_helper.c' line='83' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drm_dp_get_adjust_request_voltage' mangled-name='drm_dp_get_adjust_request_voltage' filepath='drivers/gpu/drm/drm_dp_helper.c' line='97' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_get_adjust_request_voltage'>
+        <parameter type-id='bbaf3419' name='link_status' filepath='drivers/gpu/drm/drm_dp_helper.c' line='97' column='1'/>
+        <parameter type-id='95e97e5e' name='lane' filepath='drivers/gpu/drm/drm_dp_helper.c' line='98' column='1'/>
+        <return type-id='f9b06939'/>
+      </function-decl>
+      <function-decl name='drm_dp_get_adjust_request_pre_emphasis' mangled-name='drm_dp_get_adjust_request_pre_emphasis' filepath='drivers/gpu/drm/drm_dp_helper.c' line='110' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_get_adjust_request_pre_emphasis'>
+        <parameter type-id='bbaf3419' name='link_status' filepath='drivers/gpu/drm/drm_dp_helper.c' line='110' column='1'/>
+        <parameter type-id='95e97e5e' name='lane' filepath='drivers/gpu/drm/drm_dp_helper.c' line='111' column='1'/>
+        <return type-id='f9b06939'/>
+      </function-decl>
+      <function-decl name='drm_dp_link_train_clock_recovery_delay' mangled-name='drm_dp_link_train_clock_recovery_delay' filepath='drivers/gpu/drm/drm_dp_helper.c' line='123' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_link_train_clock_recovery_delay'>
+        <parameter type-id='bbaf3419' name='dpcd' filepath='drivers/gpu/drm/drm_dp_helper.c' line='123' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dp_link_train_channel_eq_delay' mangled-name='drm_dp_link_train_channel_eq_delay' filepath='drivers/gpu/drm/drm_dp_helper.c' line='138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_link_train_channel_eq_delay'>
+        <parameter type-id='bbaf3419' name='dpcd' filepath='drivers/gpu/drm/drm_dp_helper.c' line='138' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dp_link_rate_to_bw_code' mangled-name='drm_dp_link_rate_to_bw_code' filepath='drivers/gpu/drm/drm_dp_helper.c' line='153' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_link_rate_to_bw_code'>
+        <parameter type-id='95e97e5e' name='link_rate' filepath='drivers/gpu/drm/drm_dp_helper.c' line='153' column='1'/>
+        <return type-id='f9b06939'/>
+      </function-decl>
+      <function-decl name='drm_dp_bw_code_to_link_rate' mangled-name='drm_dp_bw_code_to_link_rate' filepath='drivers/gpu/drm/drm_dp_helper.c' line='160' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_bw_code_to_link_rate'>
+        <parameter type-id='f9b06939' name='link_bw' filepath='drivers/gpu/drm/drm_dp_helper.c' line='160' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_dpcd_read' mangled-name='drm_dp_dpcd_read' filepath='drivers/gpu/drm/drm_dp_helper.c' line='266' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_dpcd_read'>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_helper.c' line='266' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/gpu/drm/drm_dp_helper.c' line='266' column='1'/>
+        <parameter type-id='eaa32e2f' name='buffer' filepath='drivers/gpu/drm/drm_dp_helper.c' line='267' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/gpu/drm/drm_dp_helper.c' line='267' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='drm_dp_dpcd_write' mangled-name='drm_dp_dpcd_write' filepath='drivers/gpu/drm/drm_dp_helper.c' line='311' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_dpcd_write'>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_helper.c' line='311' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/gpu/drm/drm_dp_helper.c' line='311' column='1'/>
+        <parameter type-id='eaa32e2f' name='buffer' filepath='drivers/gpu/drm/drm_dp_helper.c' line='312' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/gpu/drm/drm_dp_helper.c' line='312' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='drm_dp_dpcd_read_link_status' mangled-name='drm_dp_dpcd_read_link_status' filepath='drivers/gpu/drm/drm_dp_helper.c' line='331' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_dpcd_read_link_status'>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_helper.c' line='331' column='1'/>
+        <parameter type-id='8bff8096' name='status' filepath='drivers/gpu/drm/drm_dp_helper.c' line='332' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_link_probe' mangled-name='drm_dp_link_probe' filepath='drivers/gpu/drm/drm_dp_helper.c' line='409' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_link_probe'>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_helper.c' line='409' column='1'/>
+        <parameter type-id='f89c98aa' name='link' filepath='drivers/gpu/drm/drm_dp_helper.c' line='409' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_link_power_up' mangled-name='drm_dp_link_power_up' filepath='drivers/gpu/drm/drm_dp_helper.c' line='438' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_link_power_up'>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_helper.c' line='438' column='1'/>
+        <parameter type-id='f89c98aa' name='link' filepath='drivers/gpu/drm/drm_dp_helper.c' line='438' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_link_power_down' mangled-name='drm_dp_link_power_down' filepath='drivers/gpu/drm/drm_dp_helper.c' line='476' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_link_power_down'>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_helper.c' line='476' column='1'/>
+        <parameter type-id='f89c98aa' name='link' filepath='drivers/gpu/drm/drm_dp_helper.c' line='476' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_link_configure' mangled-name='drm_dp_link_configure' filepath='drivers/gpu/drm/drm_dp_helper.c' line='507' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_link_configure'>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_helper.c' line='507' column='1'/>
+        <parameter type-id='f89c98aa' name='link' filepath='drivers/gpu/drm/drm_dp_helper.c' line='507' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_crtc_wait_one_vblank' mangled-name='drm_crtc_wait_one_vblank' filepath='include/drm/drm_vblank.h' line='213' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_wait_one_vblank'>
+        <parameter type-id='b64ad7cb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dp_aux_register' mangled-name='drm_dp_aux_register' filepath='drivers/gpu/drm/drm_dp_helper.c' line='1174' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_aux_register'>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_helper.c' line='1174' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_add_adapter' mangled-name='i2c_add_adapter' filepath='include/linux/i2c.h' line='836' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_add_adapter'>
+        <parameter type-id='b9af02c3'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_aux_unregister' mangled-name='drm_dp_aux_unregister' filepath='drivers/gpu/drm/drm_dp_helper.c' line='1206' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_aux_unregister'>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_helper.c' line='1206' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='i2c_del_adapter' mangled-name='i2c_del_adapter' filepath='include/linux/i2c.h' line='837' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_del_adapter'>
+        <parameter type-id='b9af02c3'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dev_dbg' mangled-name='drm_dev_dbg' filepath='include/drm/drm_print.h' line='279' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dev_dbg'>
+        <parameter type-id='8df61054'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='6c1c578a'>
+        <parameter type-id='7c5f8cd8'/>
+        <parameter type-id='c8851b4e'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_dp_mst_topology.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='ecbd5721' size-in-bits='3200' id='014100ec'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='778f4653' size-in-bits='128' id='e14df1f9'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='120' id='4d823bde'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='2040' id='1bac30d2'>
+        <subrange length='255' type-id='7ff19f0f' id='36e7f891'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='2048' id='dbaf9da9'>
+        <subrange length='256' type-id='7ff19f0f' id='36e5b9fa'/>
+      </array-type-def>
+      <class-decl name='drm_dp_mst_topology_mgr' size-in-bits='9536' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='449' column='1' id='77db5b7d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='cc3a4f0c' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='cbs' type-id='44572ce8' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='max_dpcd_transaction_bytes' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='aux' type-id='7c5f8cd8' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='max_payloads' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='conn_base_id' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='down_rep_recv' type-id='86641ab5' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3632'>
+          <var-decl name='up_req_recv' type-id='86641ab5' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='mst_state' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='mst_primary' type-id='7bc9d2d9' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='dpcd' type-id='4d823bde' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6776'>
+          <var-decl name='sink_count' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='pbn_div' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='funcs' type-id='515fa1af' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='qlock' type-id='925167dc' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='tx_msg_downq' type-id='72f469ec' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='payload_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='proposed_vcpis' type-id='d08b3eb8' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='payloads' type-id='1a8bc978' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='payload_mask' type-id='7359adad' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='vcpi_mask' type-id='7359adad' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='tx_waitq' type-id='b5ab048f' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='tx_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='destroy_connector_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='destroy_connector_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='destroy_connector_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='589' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_mst_topology_cbs' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='405' column='1' id='8596da29'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='add_connector' type-id='89bd4f61' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='register_connector' type-id='a3cb28f1' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destroy_connector' type-id='7d8f7dd9' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='409' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_mst_port' size-in-bits='13056' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='68' column='1' id='7f985fda'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='topology_kref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='malloc_kref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='port_num' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='input' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='mcs' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='ddps' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pdt' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='ldps' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='dpcd_rev' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='num_sdp_streams' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_sdp_stream_sinks' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='available_pbn' type-id='149c6638' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='72f469ec' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mstb' type-id='7bc9d2d9' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='aux' type-id='b2983aea' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12608'>
+          <var-decl name='parent' type-id='7bc9d2d9' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='vcpi' type-id='e1653094' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='connector' type-id='4db02c58' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12864'>
+          <var-decl name='mgr' type-id='88a6d23d' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='cached_edid' type-id='c91d1bf1' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12992'>
+          <var-decl name='has_audio' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_mst_branch' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='132' column='1' id='d710e4d1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='topology_kref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='malloc_kref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rad' type-id='d2f7b56a' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lct' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='num_ports' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='msg_slots' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ports' type-id='72f469ec' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='port_parent' type-id='c45d1018' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mgr' type-id='88a6d23d' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='tx_slots' type-id='e14df1f9' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='last_seqno' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='link_address_sent' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='680'>
+          <var-decl name='guid' type-id='0d8415b5' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_sideband_msg_tx' size-in-bits='6144' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='390' column='1' id='7a5f8aa3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='msg' type-id='dbaf9da9' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='chunk' type-id='6aa9aca0' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='cur_offset' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2440'>
+          <var-decl name='cur_len' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='dst' type-id='7bc9d2d9' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='next' type-id='72f469ec' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='seqno' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='path_msg' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2768'>
+          <var-decl name='reply' type-id='2fe1d36e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='400' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_sideband_msg_reply_body' size-in-bits='3360' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='358' column='1' id='2fe1d36e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reply_type' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='req_type' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='u' type-id='6df1f9c2' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='377' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='ack_replies' size-in-bits='3344' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='361' column='1' id='6df1f9c2'>
+        <data-member access='private'>
+          <var-decl name='nak' type-id='61c3f979' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='link_addr' type-id='81bf688e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='port_number' type-id='1cca5a6d' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='path_resources' type-id='bc62b31a' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='allocate_payload' type-id='2268ea8f' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='query_payload' type-id='f945f5d0' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='remote_dpcd_read_ack' type-id='7b447a04' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='remote_dpcd_write_ack' type-id='fff4a999' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='remote_dpcd_write_nack' type-id='b506183e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='remote_i2c_read_ack' type-id='4629bebf' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='remote_i2c_read_nack' type-id='fbcb62dc' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='remote_i2c_write_ack' type-id='1fb39188' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='376' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='drm_dp_nak_reply' size-in-bits='144' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='180' column='1' id='61c3f979'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='guid' type-id='0d8415b5' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reason' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='nak_data' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='183' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_link_address_ack_reply' size-in-bits='3336' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='186' column='1' id='81bf688e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='guid' type-id='0d8415b5' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nports' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='ports' type-id='014100ec' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='200' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_link_addr_reply_port' size-in-bits='200' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='189' column='1' id='ecbd5721'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='input_port' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='peer_device_type' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='mcs' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ddps' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='legacy_device_plug_status' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='dpcd_revision' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='peer_guid' type-id='0d8415b5' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='num_sdp_streams' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_sdp_stream_sinks' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='199' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_port_number_rep' size-in-bits='8' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='320' column='1' id='1cca5a6d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='321' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_enum_path_resources_ack_reply' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='313' column='1' id='bc62b31a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='full_payload_bw_number' type-id='1dc6a898' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='avail_payload_bw_number' type-id='1dc6a898' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='316' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_allocate_payload_ack_reply' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='257' column='1' id='2268ea8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='vcpi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='allocated_pbn' type-id='1dc6a898' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='260' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_query_payload_ack_reply' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='335' column='1' id='f945f5d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='allocated_pbn' type-id='1dc6a898' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_remote_dpcd_read_ack_reply' size-in-bits='2056' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='203' column='1' id='7b447a04'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='num_bytes' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bytes' type-id='1bac30d2' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='206' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_remote_dpcd_write_ack_reply' size-in-bits='8' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='209' column='1' id='fff4a999'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='210' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_remote_dpcd_write_nak_reply' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='213' column='1' id='b506183e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='reason' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bytes_written_before_failure' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='216' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_remote_i2c_read_ack_reply' size-in-bits='2056' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='219' column='1' id='4629bebf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='num_bytes' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bytes' type-id='1bac30d2' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='222' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_remote_i2c_read_nak_reply' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='225' column='1' id='fbcb62dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='nak_reason' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='i2c_nak_transaction' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='228' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_remote_i2c_write_ack_reply' size-in-bits='8' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='231' column='1' id='1fb39188'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='232' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_vcpi' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='38' column='1' id='e1653094'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vcpi' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pbn' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='aligned_pbn' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='num_slots' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_sideband_msg_rx' size-in-bits='2608' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='236' column='1' id='86641ab5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chunk' type-id='6aa9aca0' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='msg' type-id='dbaf9da9' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='curchunk_len' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2440'>
+          <var-decl name='curchunk_idx' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2448'>
+          <var-decl name='curchunk_hdrlen' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2456'>
+          <var-decl name='curlen' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2464'>
+          <var-decl name='have_somt' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2472'>
+          <var-decl name='have_eomt' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2480'>
+          <var-decl name='initial_hdr' type-id='d10fcb8b' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='245' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_sideband_msg_hdr' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='168' column='1' id='d10fcb8b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lct' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='lcr' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='rad' type-id='d2f7b56a' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='broadcast' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='path_msg' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='msg_len' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='somt' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='eomt' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='seqno' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_payload' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='419' column='1' id='c3b3aa2a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='payload_state' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='start_slot' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_slots' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='vcpi' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='423' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='8596da29' const='yes' id='ee15d052'/>
+      <pointer-type-def type-id='ee15d052' size-in-bits='64' id='44572ce8'/>
+      <pointer-type-def type-id='75ec6dfd' size-in-bits='64' id='89bd4f61'/>
+      <pointer-type-def type-id='d710e4d1' size-in-bits='64' id='7bc9d2d9'/>
+      <pointer-type-def type-id='7f985fda' size-in-bits='64' id='c45d1018'/>
+      <pointer-type-def type-id='77db5b7d' size-in-bits='64' id='88a6d23d'/>
+      <pointer-type-def type-id='c3b3aa2a' size-in-bits='64' id='1a8bc978'/>
+      <pointer-type-def type-id='7a5f8aa3' size-in-bits='64' id='778f4653'/>
+      <pointer-type-def type-id='e1653094' size-in-bits='64' id='9117d942'/>
+      <pointer-type-def type-id='9117d942' size-in-bits='64' id='d08b3eb8'/>
+      <pointer-type-def type-id='a7fa16d9' size-in-bits='64' id='c91d1bf1'/>
+      <pointer-type-def type-id='9a9b3035' size-in-bits='64' id='7d8f7dd9'/>
+      <function-decl name='drm_dp_mst_topology_mgr_init' mangled-name='drm_dp_mst_topology_mgr_init' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3957' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_mst_topology_mgr_init'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3957' column='1'/>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3958' column='1'/>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3958' column='1'/>
+        <parameter type-id='95e97e5e' name='max_dpcd_transaction_bytes' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3959' column='1'/>
+        <parameter type-id='95e97e5e' name='max_payloads' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3960' column='1'/>
+        <parameter type-id='95e97e5e' name='conn_base_id' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3960' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_send_power_updown_phy' mangled-name='drm_dp_send_power_updown_phy' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2302' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_send_power_updown_phy'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2302' column='1'/>
+        <parameter type-id='c45d1018' name='port' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2303' column='1'/>
+        <parameter type-id='b50a4934' name='power_up' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2303' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_update_payload_part1' mangled-name='drm_dp_update_payload_part1' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2401' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_update_payload_part1'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2401' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_update_payload_part2' mangled-name='drm_dp_update_payload_part2' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2508' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_update_payload_part2'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2508' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_mst_topology_mgr_set_mst' mangled-name='drm_dp_mst_topology_mgr_set_mst' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2695' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_mst_topology_mgr_set_mst'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2695' column='1'/>
+        <parameter type-id='b50a4934' name='mst_state' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2695' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_mst_hpd_irq' mangled-name='drm_dp_mst_hpd_irq' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3044' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_mst_hpd_irq'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3044' column='1'/>
+        <parameter type-id='8bff8096' name='esi' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3044' column='1'/>
+        <parameter type-id='d8e6b335' name='handled' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3044' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_mst_detect_port' mangled-name='drm_dp_mst_detect_port' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3080' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_mst_detect_port'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3080' column='1'/>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3081' column='1'/>
+        <parameter type-id='c45d1018' name='port' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3081' column='1'/>
+        <return type-id='f7b0e1b4'/>
+      </function-decl>
+      <function-decl name='drm_get_edid' mangled-name='drm_get_edid' filepath='include/drm/drm_edid.h' line='475' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_get_edid'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='b9af02c3'/>
+        <return type-id='c91d1bf1'/>
+      </function-decl>
+      <function-decl name='drm_dp_mst_get_edid' mangled-name='drm_dp_mst_get_edid' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_mst_get_edid'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3147' column='1'/>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3147' column='1'/>
+        <parameter type-id='c45d1018' name='port' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3147' column='1'/>
+        <return type-id='c91d1bf1'/>
+      </function-decl>
+      <function-decl name='drm_edid_duplicate' mangled-name='drm_edid_duplicate' filepath='include/drm/drm_edid.h' line='479' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_edid_duplicate'>
+        <parameter type-id='776adf76'/>
+        <return type-id='c91d1bf1'/>
+      </function-decl>
+      <function-decl name='drm_detect_monitor_audio' mangled-name='drm_detect_monitor_audio' filepath='include/drm/drm_edid.h' line='486' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_detect_monitor_audio'>
+        <parameter type-id='c91d1bf1'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='drm_dp_find_vcpi_slots' mangled-name='drm_dp_find_vcpi_slots' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3179' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_find_vcpi_slots'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3179' column='1'/>
+        <parameter type-id='95e97e5e' name='pbn' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3180' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_atomic_find_vcpi_slots' mangled-name='drm_dp_atomic_find_vcpi_slots' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3242' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_atomic_find_vcpi_slots'>
+        <parameter type-id='e3dd029f' name='state' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3242' column='1'/>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3243' column='1'/>
+        <parameter type-id='c45d1018' name='port' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3244' column='1'/>
+        <parameter type-id='95e97e5e' name='pbn' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3244' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_get_private_obj_state' mangled-name='drm_atomic_get_private_obj_state' filepath='include/drm/drm_atomic.h' line='453' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_get_private_obj_state'>
+        <parameter type-id='e3dd029f'/>
+        <parameter type-id='11c98e9a'/>
+        <return type-id='4ea020ae'/>
+      </function-decl>
+      <function-decl name='drm_dp_atomic_release_vcpi_slots' mangled-name='drm_dp_atomic_release_vcpi_slots' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3326' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_atomic_release_vcpi_slots'>
+        <parameter type-id='e3dd029f' name='state' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3326' column='1'/>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3327' column='1'/>
+        <parameter type-id='c45d1018' name='port' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3328' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_mst_allocate_vcpi' mangled-name='drm_dp_mst_allocate_vcpi' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3367' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_mst_allocate_vcpi'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3367' column='1'/>
+        <parameter type-id='c45d1018' name='port' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3368' column='1'/>
+        <parameter type-id='95e97e5e' name='pbn' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3368' column='1'/>
+        <parameter type-id='95e97e5e' name='slots' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3368' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drm_dp_mst_reset_vcpi_slots' mangled-name='drm_dp_mst_reset_vcpi_slots' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3427' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_mst_reset_vcpi_slots'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3427' column='1'/>
+        <parameter type-id='c45d1018' name='port' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3427' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dp_mst_deallocate_vcpi' mangled-name='drm_dp_mst_deallocate_vcpi' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3446' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_mst_deallocate_vcpi'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3446' column='1'/>
+        <parameter type-id='c45d1018' name='port' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3447' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dp_calc_pbn_mode' mangled-name='drm_dp_calc_pbn_mode' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_calc_pbn_mode'>
+        <parameter type-id='95e97e5e' name='clock' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3556' column='1'/>
+        <parameter type-id='95e97e5e' name='bpp' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3556' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_private_obj_init' mangled-name='drm_atomic_private_obj_init' filepath='include/drm/drm_atomic.h' line='446' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_private_obj_init'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='11c98e9a'/>
+        <parameter type-id='4ea020ae'/>
+        <parameter type-id='515fa1af'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dp_mst_topology_mgr_destroy' mangled-name='drm_dp_mst_topology_mgr_destroy' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='4011' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_mst_topology_mgr_destroy'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='4011' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_private_obj_fini' mangled-name='drm_atomic_private_obj_fini' filepath='include/drm/drm_atomic.h' line='450' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_private_obj_fini'>
+        <parameter type-id='11c98e9a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='4af8a458' size-in-bits='64' id='776adf76'/>
+      <function-type size-in-bits='64' id='75ec6dfd'>
+        <parameter type-id='88a6d23d'/>
+        <parameter type-id='c45d1018'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='4db02c58'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9a9b3035'>
+        <parameter type-id='88a6d23d'/>
+        <parameter type-id='4db02c58'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <class-decl name='edid' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='285' column='1' id='a7fa16d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='d2f7b56a' visibility='default' filepath='include/drm/drm_edid.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mfg_id' type-id='cf114704' visibility='default' filepath='include/drm/drm_edid.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='prod_code' type-id='cf114704' visibility='default' filepath='include/drm/drm_edid.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='serial' type-id='19c2251e' visibility='default' filepath='include/drm/drm_edid.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mfg_week' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='mfg_year' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='version' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='revision' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='input' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='width_cm' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='height_cm' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='gamma' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='features' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='red_green_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='black_white_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='red_x' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='red_y' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='232'>
+          <var-decl name='green_x' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='green_y' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='248'>
+          <var-decl name='blue_x' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='blue_y' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='white_x' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='white_y' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='280'>
+          <var-decl name='established_timings' type-id='93a90c7b' visibility='default' filepath='include/drm/drm_edid.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='standard_timings' type-id='521a7abd' visibility='default' filepath='include/drm/drm_edid.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='432'>
+          <var-decl name='detailed_timings' type-id='c93659c6' visibility='default' filepath='include/drm/drm_edid.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='extensions' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1016'>
+          <var-decl name='checksum' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='322' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='a7fa16d9' const='yes' id='4af8a458'/>
+      <array-type-def dimensions='1' type-id='d30cc3b8' size-in-bits='576' id='c93659c6'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0bb26f49' size-in-bits='128' id='521a7abd'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='est_timings' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='44' column='1' id='93a90c7b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='t1' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='t2' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='mfg_rsvd' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='16' id='cf114704'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='detailed_timing' size-in-bits='144' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='165' column='1' id='d30cc3b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pixel_clock' type-id='23119536' visibility='default' filepath='include/drm/drm_edid.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='data' type-id='74e410f1' visibility='default' filepath='include/drm/drm_edid.h' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='std_timing' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='58' column='1' id='0bb26f49'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hsize' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='vfreq_aspect' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='167' column='1' id='74e410f1'>
+        <data-member access='private'>
+          <var-decl name='pixel_data' type-id='42c5f701' visibility='default' filepath='include/drm/drm_edid.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='other_data' type-id='4191437e' visibility='default' filepath='include/drm/drm_edid.h' line='169' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='detailed_non_pixel' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='140' column='1' id='4191437e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pad1' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='type' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='pad2' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='data' type-id='3b37e17e' visibility='default' filepath='include/drm/drm_edid.h' line='152' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='detailed_pixel_timing' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='70' column='1' id='42c5f701'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hactive_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='hblank_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='hactive_hblank_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='vactive_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vblank_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='vactive_vblank_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='hsync_offset_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='hsync_pulse_width_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vsync_offset_pulse_width_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='hsync_vsync_offset_pulse_width_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='width_mm_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='height_mm_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='width_height_mm_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='hborder' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='vborder' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='misc' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='104' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='146' column='1' id='3b37e17e'>
+        <data-member access='private'>
+          <var-decl name='str' type-id='9839ad2e' visibility='default' filepath='include/drm/drm_edid.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='range' type-id='2d6065c1' visibility='default' filepath='include/drm/drm_edid.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='color' type-id='d35b6cc8' visibility='default' filepath='include/drm/drm_edid.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='timings' type-id='0e1e8cdf' visibility='default' filepath='include/drm/drm_edid.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='cvt' type-id='e6001147' visibility='default' filepath='include/drm/drm_edid.h' line='151' column='1'/>
+        </data-member>
+      </union-decl>
+      <array-type-def dimensions='1' type-id='ebccef5f' size-in-bits='96' id='e6001147'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0bb26f49' size-in-bits='96' id='0e1e8cdf'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <class-decl name='detailed_data_monitor_range' size-in-bits='104' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='94' column='1' id='2d6065c1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_vfreq' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='max_vfreq' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='min_hfreq_khz' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='max_hfreq_khz' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pixel_clock_mhz' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='formula' type-id='58741aa1' visibility='default' filepath='include/drm/drm_edid.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='detailed_data_string' size-in-bits='104' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='90' column='1' id='9839ad2e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='str' type-id='097d53a4' visibility='default' filepath='include/drm/drm_edid.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='detailed_data_wpindex' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='122' column='1' id='d35b6cc8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='white_yx_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='white_x_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='white_y_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='gamma' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='126' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cvt_timing' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='136' column='1' id='ebccef5f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='code' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_edid.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='104' id='097d53a4'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <union-decl name='__anonymous_union__6' size-in-bits='56' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='101' column='1' id='58741aa1'>
+        <data-member access='private'>
+          <var-decl name='gtf2' type-id='3f6be67c' visibility='default' filepath='include/drm/drm_edid.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='cvt' type-id='c591dff3' visibility='default' filepath='include/drm/drm_edid.h' line='118' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='56' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='102' column='1' id='3f6be67c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reserved' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='hfreq_start_khz' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='c' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='m' type-id='23119536' visibility='default' filepath='include/drm/drm_edid.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='k' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='j' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='56' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='110' column='1' id='c591dff3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='data1' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='data2' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='supported_aspects' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='supported_scalings' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='preferred_refresh' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_drv.c' language='LANG_C89'>
+      <function-decl name='drm_dev_put' mangled-name='drm_dev_put' filepath='drivers/gpu/drm/drm_drv.c' line='877' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dev_put'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_drv.c' line='877' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_put_dev' mangled-name='drm_put_dev' filepath='drivers/gpu/drm/drm_drv.c' line='439' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_put_dev'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_drv.c' line='439' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dev_unregister' mangled-name='drm_dev_unregister' filepath='drivers/gpu/drm/drm_drv.c' line='1024' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dev_unregister'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_drv.c' line='1024' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dev_set_unique' mangled-name='drm_dev_set_unique' filepath='drivers/gpu/drm/drm_drv.c' line='1061' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dev_set_unique'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_drv.c' line='1061' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/gpu/drm/drm_drv.c' line='1061' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dev_alloc' mangled-name='drm_dev_alloc' filepath='drivers/gpu/drm/drm_drv.c' line='819' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dev_alloc'>
+        <parameter type-id='1d52bc4e' name='driver' filepath='drivers/gpu/drm/drm_drv.c' line='819' column='1'/>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/gpu/drm/drm_drv.c' line='820' column='1'/>
+        <return type-id='8898134d'/>
+      </function-decl>
+      <function-decl name='drm_dev_register' mangled-name='drm_dev_register' filepath='drivers/gpu/drm/drm_drv.c' line='960' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dev_register'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_drv.c' line='960' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/gpu/drm/drm_drv.c' line='960' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_edid.c' language='LANG_C89'>
+      <pointer-type-def type-id='c3fc04e5' size-in-bits='64' id='e879a339'/>
+      <function-decl name='drm_add_edid_modes' mangled-name='drm_add_edid_modes' filepath='drivers/gpu/drm/drm_edid.c' line='4868' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_add_edid_modes'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_edid.c' line='4868' column='1'/>
+        <parameter type-id='c91d1bf1' name='edid' filepath='drivers/gpu/drm/drm_edid.c' line='4868' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_do_get_edid' mangled-name='drm_do_get_edid' filepath='drivers/gpu/drm/drm_edid.c' line='1661' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_do_get_edid'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_edid.c' line='1661' column='1'/>
+        <parameter type-id='e879a339' name='get_edid_block' filepath='drivers/gpu/drm/drm_edid.c' line='1662' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/gpu/drm/drm_edid.c' line='1664' column='1'/>
+        <return type-id='c91d1bf1'/>
+      </function-decl>
+      <function-decl name='drm_detect_hdmi_monitor' mangled-name='drm_detect_hdmi_monitor' filepath='drivers/gpu/drm/drm_edid.c' line='4350' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_detect_hdmi_monitor'>
+        <parameter type-id='c91d1bf1' name='edid' filepath='drivers/gpu/drm/drm_edid.c' line='4350' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drm_set_preferred_mode' mangled-name='drm_set_preferred_mode' filepath='drivers/gpu/drm/drm_edid.c' line='4993' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_set_preferred_mode'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_edid.c' line='4993' column='1'/>
+        <parameter type-id='95e97e5e' name='hpref' filepath='drivers/gpu/drm/drm_edid.c' line='4994' column='1'/>
+        <parameter type-id='95e97e5e' name='vpref' filepath='drivers/gpu/drm/drm_edid.c' line='4994' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_hdmi_avi_infoframe_from_display_mode' mangled-name='drm_hdmi_avi_infoframe_from_display_mode' filepath='drivers/gpu/drm/drm_edid.c' line='5101' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_hdmi_avi_infoframe_from_display_mode'>
+        <parameter type-id='19ddc3a6' name='frame' filepath='drivers/gpu/drm/drm_edid.c' line='5101' column='1'/>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_edid.c' line='5102' column='1'/>
+        <parameter type-id='745b39e8' name='mode' filepath='drivers/gpu/drm/drm_edid.c' line='5103' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='c3fc04e5'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <pointer-type-def type-id='4536ce10' size-in-bits='64' id='19ddc3a6'/>
+      <class-decl name='hdmi_avi_infoframe' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='168' column='1' id='4536ce10'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c573b339' visibility='default' filepath='include/linux/hdmi.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='length' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='colorspace' type-id='c86f38e4' visibility='default' filepath='include/linux/hdmi.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='scan_mode' type-id='aaafc218' visibility='default' filepath='include/linux/hdmi.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='colorimetry' type-id='8df1782c' visibility='default' filepath='include/linux/hdmi.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='picture_aspect' type-id='a30ccd44' visibility='default' filepath='include/linux/hdmi.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='active_aspect' type-id='90bbc2e6' visibility='default' filepath='include/linux/hdmi.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='itc' type-id='b50a4934' visibility='default' filepath='include/linux/hdmi.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='extended_colorimetry' type-id='b8a53560' visibility='default' filepath='include/linux/hdmi.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='quantization_range' type-id='5c444b2c' visibility='default' filepath='include/linux/hdmi.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nups' type-id='a84bbd3b' visibility='default' filepath='include/linux/hdmi.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='video_code' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ycc_quantization_range' type-id='569eefca' visibility='default' filepath='include/linux/hdmi.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='content_type' type-id='6cedbf81' visibility='default' filepath='include/linux/hdmi.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pixel_repeat' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='top_bar' type-id='8efea9e5' visibility='default' filepath='include/linux/hdmi.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='bottom_bar' type-id='8efea9e5' visibility='default' filepath='include/linux/hdmi.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='left_bar' type-id='8efea9e5' visibility='default' filepath='include/linux/hdmi.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='right_bar' type-id='8efea9e5' visibility='default' filepath='include/linux/hdmi.h' line='188' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='hdmi_active_aspect' filepath='include/linux/hdmi.h' line='104' column='1' id='90bbc2e6'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9_TOP' value='2'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_14_9_TOP' value='3'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9_CENTER' value='4'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_PICTURE' value='8'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_4_3' value='9'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9' value='10'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_14_9' value='11'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_4_3_SP_14_9' value='13'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9_SP_14_9' value='14'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9_SP_4_3' value='15'/>
+      </enum-decl>
+      <enum-decl name='hdmi_colorimetry' filepath='include/linux/hdmi.h' line='88' column='1' id='8df1782c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_COLORIMETRY_NONE' value='0'/>
+        <enumerator name='HDMI_COLORIMETRY_ITU_601' value='1'/>
+        <enumerator name='HDMI_COLORIMETRY_ITU_709' value='2'/>
+        <enumerator name='HDMI_COLORIMETRY_EXTENDED' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_colorspace' filepath='include/linux/hdmi.h' line='70' column='1' id='c86f38e4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_COLORSPACE_RGB' value='0'/>
+        <enumerator name='HDMI_COLORSPACE_YUV422' value='1'/>
+        <enumerator name='HDMI_COLORSPACE_YUV444' value='2'/>
+        <enumerator name='HDMI_COLORSPACE_YUV420' value='3'/>
+        <enumerator name='HDMI_COLORSPACE_RESERVED4' value='4'/>
+        <enumerator name='HDMI_COLORSPACE_RESERVED5' value='5'/>
+        <enumerator name='HDMI_COLORSPACE_RESERVED6' value='6'/>
+        <enumerator name='HDMI_COLORSPACE_IDO_DEFINED' value='7'/>
+      </enum-decl>
+      <enum-decl name='hdmi_content_type' filepath='include/linux/hdmi.h' line='150' column='1' id='6cedbf81'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_CONTENT_TYPE_GRAPHICS' value='0'/>
+        <enumerator name='HDMI_CONTENT_TYPE_PHOTO' value='1'/>
+        <enumerator name='HDMI_CONTENT_TYPE_CINEMA' value='2'/>
+        <enumerator name='HDMI_CONTENT_TYPE_GAME' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_extended_colorimetry' filepath='include/linux/hdmi.h' line='117' column='1' id='b8a53560'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_XV_YCC_601' value='0'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_XV_YCC_709' value='1'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_S_YCC_601' value='2'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_OPYCC_601' value='3'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_OPRGB' value='4'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_BT2020_CONST_LUM' value='5'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_BT2020' value='6'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_RESERVED' value='7'/>
+      </enum-decl>
+      <enum-decl name='hdmi_infoframe_type' filepath='include/linux/hdmi.h' line='45' column='1' id='c573b339'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_VENDOR' value='129'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_AVI' value='130'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_SPD' value='131'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_AUDIO' value='132'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_DRM' value='135'/>
+      </enum-decl>
+      <enum-decl name='hdmi_nups' filepath='include/linux/hdmi.h' line='138' column='1' id='a84bbd3b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_NUPS_UNKNOWN' value='0'/>
+        <enumerator name='HDMI_NUPS_HORIZONTAL' value='1'/>
+        <enumerator name='HDMI_NUPS_VERTICAL' value='2'/>
+        <enumerator name='HDMI_NUPS_BOTH' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_quantization_range' filepath='include/linux/hdmi.h' line='130' column='1' id='5c444b2c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_QUANTIZATION_RANGE_DEFAULT' value='0'/>
+        <enumerator name='HDMI_QUANTIZATION_RANGE_LIMITED' value='1'/>
+        <enumerator name='HDMI_QUANTIZATION_RANGE_FULL' value='2'/>
+        <enumerator name='HDMI_QUANTIZATION_RANGE_RESERVED' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_scan_mode' filepath='include/linux/hdmi.h' line='81' column='1' id='aaafc218'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_SCAN_MODE_NONE' value='0'/>
+        <enumerator name='HDMI_SCAN_MODE_OVERSCAN' value='1'/>
+        <enumerator name='HDMI_SCAN_MODE_UNDERSCAN' value='2'/>
+        <enumerator name='HDMI_SCAN_MODE_RESERVED' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_ycc_quantization_range' filepath='include/linux/hdmi.h' line='145' column='1' id='569eefca'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_YCC_QUANTIZATION_RANGE_LIMITED' value='0'/>
+        <enumerator name='HDMI_YCC_QUANTIZATION_RANGE_FULL' value='1'/>
+      </enum-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_encoder.c' language='LANG_C89'>
+      <function-decl name='drm_encoder_cleanup' mangled-name='drm_encoder_cleanup' filepath='drivers/gpu/drm/drm_encoder.c' line='159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_encoder_cleanup'>
+        <parameter type-id='74d89ebd' name='encoder' filepath='drivers/gpu/drm/drm_encoder.c' line='159' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_encoder_slave.c' language='LANG_C89'>
+      <function-decl name='i2c_unregister_device' mangled-name='i2c_unregister_device' filepath='include/linux/i2c.h' line='480' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_unregister_device'>
+        <parameter type-id='3e31633b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_fb_cma_helper.c' language='LANG_C89'>
+      <class-decl name='drm_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='e96cc76e'/>
+      <class-decl name='drm_gem_cma_object' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/drm/drm_gem_cma_helper.h' line='20' column='1' id='a9a2d60c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='3bc524c1' visibility='default' filepath='include/drm/drm_gem_cma_helper.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='paddr' type-id='cf29c9b3' visibility='default' filepath='include/drm/drm_gem_cma_helper.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='sgt' type-id='4adb0e6a' visibility='default' filepath='include/drm/drm_gem_cma_helper.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='vaddr' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_gem_cma_helper.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e96cc76e' size-in-bits='64' id='8898134e'/>
+      <pointer-type-def type-id='a9a2d60c' size-in-bits='64' id='faa9576a'/>
+      <function-decl name='drm_fb_cma_get_gem_obj' mangled-name='drm_fb_cma_get_gem_obj' filepath='drivers/gpu/drm/drm_fb_cma_helper.c' line='38' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_fb_cma_get_gem_obj'>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_fb_cma_helper.c' line='38' column='1'/>
+        <parameter type-id='f0981eeb' name='plane' filepath='drivers/gpu/drm/drm_fb_cma_helper.c' line='39' column='1'/>
+        <return type-id='faa9576a'/>
+      </function-decl>
+      <class-decl name='drm_gem_object' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/drm/drm_gem.h' line='171' column='1' id='3bc524c1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/drm/drm_gem.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='handle_count' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_gem.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='8898134e' visibility='default' filepath='include/drm/drm_gem.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='filp' type-id='77e79a4b' visibility='default' filepath='include/drm/drm_gem.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vma_node' type-id='743d7e52' visibility='default' filepath='include/drm/drm_gem.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_gem.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='name' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_gem.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='dma_buf' type-id='5e4f599c' visibility='default' filepath='include/drm/drm_gem.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='import_attach' type-id='e68e04c1' visibility='default' filepath='include/drm/drm_gem.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='resv' type-id='340cea9c' visibility='default' filepath='include/drm/drm_gem.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='_resv' type-id='d06fbf66' visibility='default' filepath='include/drm/drm_gem.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='funcs' type-id='3a73453d' visibility='default' filepath='include/drm/drm_gem.h' line='299' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d45b1fc5' size-in-bits='64' id='3a73453d'/>
+      <class-decl name='drm_vma_offset_node' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/drm/drm_vma_manager.h' line='52' column='1' id='743d7e52'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vm_lock' type-id='ac16795b' visibility='default' filepath='include/drm/drm_vma_manager.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vm_node' type-id='60498a7e' visibility='default' filepath='include/drm/drm_vma_manager.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='vm_files' type-id='dec44472' visibility='default' filepath='include/drm/drm_vma_manager.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='readonly' type-id='b50a4934' visibility='default' filepath='include/drm/drm_vma_manager.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='df20b624' const='yes' id='d45b1fc5'/>
+      <class-decl name='drm_gem_object_funcs' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/drm/drm_gem.h' line='47' column='1' id='df20b624'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='free' type-id='9126441b' visibility='default' filepath='include/drm/drm_gem.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open' type-id='8e2012e0' visibility='default' filepath='include/drm/drm_gem.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='close' type-id='133b86a1' visibility='default' filepath='include/drm/drm_gem.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='print_info' type-id='1c51ec16' visibility='default' filepath='include/drm/drm_gem.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='export' type-id='a4e2d046' visibility='default' filepath='include/drm/drm_gem.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pin' type-id='12e23e5c' visibility='default' filepath='include/drm/drm_gem.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='unpin' type-id='9126441b' visibility='default' filepath='include/drm/drm_gem.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_sg_table' type-id='32774f90' visibility='default' filepath='include/drm/drm_gem.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='vmap' type-id='2edb3e4b' visibility='default' filepath='include/drm/drm_gem.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='vunmap' type-id='06586097' visibility='default' filepath='include/drm/drm_gem.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vm_ops' type-id='9be87662' visibility='default' filepath='include/drm/drm_gem.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_file.c' language='LANG_C89'>
+      <class-decl name='drm_master' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/drm/drm_auth.h' line='71' column='1' id='f8a4685e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/drm/drm_auth.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_auth.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='unique' type-id='26a90f95' visibility='default' filepath='include/drm/drm_auth.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unique_len' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_auth.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='magic_map' type-id='37ce495e' visibility='default' filepath='include/drm/drm_auth.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='driver_priv' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_auth.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='lessor' type-id='07df1a3e' visibility='default' filepath='include/drm/drm_auth.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='lessee_id' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_auth.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='lessee_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_auth.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='lessees' type-id='72f469ec' visibility='default' filepath='include/drm/drm_auth.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='leases' type-id='37ce495e' visibility='default' filepath='include/drm/drm_auth.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='lessee_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_auth.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_ioctl_flags' filepath='include/drm/drm_ioctl.h' line='79' column='1' id='ad578603'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_AUTH' value='1'/>
+        <enumerator name='DRM_MASTER' value='2'/>
+        <enumerator name='DRM_ROOT_ONLY' value='4'/>
+        <enumerator name='DRM_UNLOCKED' value='16'/>
+        <enumerator name='DRM_RENDER_ALLOW' value='32'/>
+      </enum-decl>
+      <typedef-decl name='drm_ioctl_t' type-id='4e407315' filepath='include/drm/drm_ioctl.h' line='54' column='1' id='28063720'/>
+      <pointer-type-def type-id='28063720' size-in-bits='64' id='e2cefc47'/>
+      <pointer-type-def type-id='f8a4685e' size-in-bits='64' id='07df1a3e'/>
+      <pointer-type-def type-id='2aa44dc9' size-in-bits='64' id='16ab0351'/>
+      <function-decl name='drm_open' mangled-name='drm_open' filepath='drivers/gpu/drm/drm_file.c' line='370' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_open'>
+        <parameter type-id='7e666abe' name='inode' filepath='drivers/gpu/drm/drm_file.c' line='370' column='1'/>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/gpu/drm/drm_file.c' line='370' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_release' mangled-name='drm_release' filepath='drivers/gpu/drm/drm_file.c' line='440' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_release'>
+        <parameter type-id='7e666abe' name='inode' filepath='drivers/gpu/drm/drm_file.c' line='440' column='1'/>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/gpu/drm/drm_file.c' line='440' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_read' mangled-name='drm_read' filepath='drivers/gpu/drm/drm_file.c' line='489' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_read'>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/gpu/drm/drm_file.c' line='489' column='1'/>
+        <parameter type-id='26a90f95' name='buffer' filepath='drivers/gpu/drm/drm_file.c' line='489' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='drivers/gpu/drm/drm_file.c' line='490' column='1'/>
+        <parameter type-id='b53e8dbb' name='offset' filepath='drivers/gpu/drm/drm_file.c' line='490' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='drm_poll' mangled-name='drm_poll' filepath='drivers/gpu/drm/drm_file.c' line='576' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_poll'>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/gpu/drm/drm_file.c' line='576' column='1'/>
+        <parameter type-id='f0acc909' name='wait' filepath='drivers/gpu/drm/drm_file.c' line='576' column='1'/>
+        <return type-id='8f254b08'/>
+      </function-decl>
+      <function-decl name='drm_event_reserve_init_locked' mangled-name='drm_event_reserve_init_locked' filepath='drivers/gpu/drm/drm_file.c' line='614' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_event_reserve_init_locked'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_file.c' line='614' column='1'/>
+        <parameter type-id='9e99ecc2' name='file_priv' filepath='drivers/gpu/drm/drm_file.c' line='615' column='1'/>
+        <parameter type-id='16ab0351' name='p' filepath='drivers/gpu/drm/drm_file.c' line='616' column='1'/>
+        <parameter type-id='5b35aab5' name='e' filepath='drivers/gpu/drm/drm_file.c' line='617' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_send_event_locked' mangled-name='drm_send_event_locked' filepath='drivers/gpu/drm/drm_file.c' line='713' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_send_event_locked'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_file.c' line='713' column='1'/>
+        <parameter type-id='16ab0351' name='e' filepath='drivers/gpu/drm/drm_file.c' line='713' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_fence_signal' mangled-name='dma_fence_signal' filepath='include/linux/dma-fence.h' line='360' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_signal'>
+        <parameter type-id='28271da3'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_flip_work.c' language='LANG_C89'>
+      <class-decl name='drm_flip_work' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/drm/drm_flip_work.h' line='73' column='1' id='2181e5cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/drm/drm_flip_work.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='12758247' visibility='default' filepath='include/drm/drm_flip_work.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='worker' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_flip_work.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='queued' type-id='72f469ec' visibility='default' filepath='include/drm/drm_flip_work.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='commited' type-id='72f469ec' visibility='default' filepath='include/drm/drm_flip_work.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_flip_work.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='drm_flip_func_t' type-id='5c8b296f' filepath='include/drm/drm_flip_work.h' line='52' column='1' id='12758247'/>
+      <pointer-type-def type-id='2181e5cc' size-in-bits='64' id='705eaeca'/>
+      <pointer-type-def type-id='719a30bb' size-in-bits='64' id='5c8b296f'/>
+      <function-decl name='drm_flip_work_queue' mangled-name='drm_flip_work_queue' filepath='drivers/gpu/drm/drm_flip_work.c' line='76' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_flip_work_queue'>
+        <parameter type-id='705eaeca' name='work' filepath='drivers/gpu/drm/drm_flip_work.c' line='76' column='1'/>
+        <parameter type-id='eaa32e2f' name='val' filepath='drivers/gpu/drm/drm_flip_work.c' line='76' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_flip_work_commit' mangled-name='drm_flip_work_commit' filepath='drivers/gpu/drm/drm_flip_work.c' line='101' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_flip_work_commit'>
+        <parameter type-id='705eaeca' name='work' filepath='drivers/gpu/drm/drm_flip_work.c' line='101' column='1'/>
+        <parameter type-id='242e3d19' name='wq' filepath='drivers/gpu/drm/drm_flip_work.c' line='102' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_flip_work_init' mangled-name='drm_flip_work_init' filepath='drivers/gpu/drm/drm_flip_work.c' line='147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_flip_work_init'>
+        <parameter type-id='705eaeca' name='work' filepath='drivers/gpu/drm/drm_flip_work.c' line='147' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/gpu/drm/drm_flip_work.c' line='148' column='1'/>
+        <parameter type-id='12758247' name='func' filepath='drivers/gpu/drm/drm_flip_work.c' line='148' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_flip_work_cleanup' mangled-name='drm_flip_work_cleanup' filepath='drivers/gpu/drm/drm_flip_work.c' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_flip_work_cleanup'>
+        <parameter type-id='705eaeca' name='work' filepath='drivers/gpu/drm/drm_flip_work.c' line='166' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='719a30bb'>
+        <parameter type-id='705eaeca' name='work'/>
+        <parameter type-id='eaa32e2f' name='val'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_fourcc.c' language='LANG_C89'>
+      <function-decl name='drm_format_info' mangled-name='drm_format_info' filepath='drivers/gpu/drm/drm_fourcc.c' line='300' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_format_info'>
+        <parameter type-id='19c2251e' name='format' filepath='drivers/gpu/drm/drm_fourcc.c' line='300' column='1'/>
+        <return type-id='f10b2208'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_framebuffer.c' language='LANG_C89'>
+      <function-decl name='drm_framebuffer_remove' mangled-name='drm_framebuffer_remove' filepath='drivers/gpu/drm/drm_framebuffer.c' line='963' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_framebuffer_remove'>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_framebuffer.c' line='963' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_framebuffer_unregister_private' mangled-name='drm_framebuffer_unregister_private' filepath='drivers/gpu/drm/drm_framebuffer.c' line='791' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_framebuffer_unregister_private'>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_framebuffer.c' line='791' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_gem.c' language='LANG_C89'>
+      <class-decl name='drm_property' is-struct='yes' visibility='default' is-declaration-only='yes' id='811caa37'/>
+      <pointer-type-def type-id='811caa37' size-in-bits='64' id='26ea5d4d'/>
+      <pointer-type-def type-id='743d7e52' size-in-bits='64' id='e05b33b0'/>
+      <function-decl name='drm_vma_offset_manager_init' mangled-name='drm_vma_offset_manager_init' filepath='include/drm/drm_vma_manager.h' line='64' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_vma_offset_manager_init'>
+        <parameter type-id='0c6d12d5'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mm_takedown' mangled-name='drm_mm_takedown' filepath='include/drm/drm_mm.h' line='464' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mm_takedown'>
+        <parameter type-id='0ee978f1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_object_init' mangled-name='drm_gem_object_init' filepath='drivers/gpu/drm/drm_gem.c' line='124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_object_init'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_gem.c' line='124' column='1'/>
+        <parameter type-id='abd62a97' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='125' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/gpu/drm/drm_gem.c' line='125' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_resv_init' mangled-name='dma_resv_init' filepath='include/linux/dma-resv.h' line='276' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_resv_init'>
+        <parameter type-id='340cea9c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_private_object_init' mangled-name='drm_gem_private_object_init' filepath='drivers/gpu/drm/drm_gem.c' line='151' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_private_object_init'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_gem.c' line='151' column='1'/>
+        <parameter type-id='abd62a97' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='152' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/gpu/drm/drm_gem.c' line='152' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_vma_offset_add' mangled-name='drm_vma_offset_add' filepath='include/drm/drm_vma_manager.h' line='71' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_vma_offset_add'>
+        <parameter type-id='0c6d12d5'/>
+        <parameter type-id='e05b33b0'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_gem_create_mmap_offset' mangled-name='drm_gem_create_mmap_offset' filepath='drivers/gpu/drm/drm_gem.c' line='515' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_create_mmap_offset'>
+        <parameter type-id='abd62a97' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='515' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_buf_put' mangled-name='dma_buf_put' filepath='include/linux/dma-buf.h' line='522' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_put'>
+        <parameter type-id='5e4f599b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_free_mmap_offset' mangled-name='drm_gem_free_mmap_offset' filepath='drivers/gpu/drm/drm_gem.c' line='466' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_free_mmap_offset'>
+        <parameter type-id='abd62a97' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='466' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_vma_offset_remove' mangled-name='drm_vma_offset_remove' filepath='include/drm/drm_vma_manager.h' line='73' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_vma_offset_remove'>
+        <parameter type-id='0c6d12d5'/>
+        <parameter type-id='e05b33b0'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_get_pages' mangled-name='drm_gem_get_pages' filepath='drivers/gpu/drm/drm_gem.c' line='553' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_get_pages'>
+        <parameter type-id='abd62a97' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='553' column='1'/>
+        <return type-id='9f93c9da'/>
+      </function-decl>
+      <function-decl name='drm_gem_put_pages' mangled-name='drm_gem_put_pages' filepath='drivers/gpu/drm/drm_gem.c' line='616' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_put_pages'>
+        <parameter type-id='abd62a97' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='616' column='1'/>
+        <parameter type-id='9f93c9da' name='pages' filepath='drivers/gpu/drm/drm_gem.c' line='616' column='1'/>
+        <parameter type-id='b50a4934' name='dirty' filepath='drivers/gpu/drm/drm_gem.c' line='617' column='1'/>
+        <parameter type-id='b50a4934' name='accessed' filepath='drivers/gpu/drm/drm_gem.c' line='617' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_resv_wait_timeout_rcu' mangled-name='dma_resv_wait_timeout_rcu' filepath='include/linux/dma-resv.h' line='290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_resv_wait_timeout_rcu'>
+        <parameter type-id='340cea9c'/>
+        <parameter type-id='c894953d'/>
+        <parameter type-id='c894953d'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='drm_gem_object_release' mangled-name='drm_gem_object_release' filepath='drivers/gpu/drm/drm_gem.c' line='950' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_object_release'>
+        <parameter type-id='abd62a97' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='950' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_resv_fini' mangled-name='dma_resv_fini' filepath='include/linux/dma-resv.h' line='277' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_resv_fini'>
+        <parameter type-id='340cea9c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_object_put' mangled-name='drm_gem_object_put' filepath='drivers/gpu/drm/drm_gem.c' line='1032' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_object_put'>
+        <parameter type-id='abd62a97' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='1032' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_vm_open' mangled-name='drm_gem_vm_open' filepath='drivers/gpu/drm/drm_gem.c' line='1049' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_vm_open'>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/gpu/drm/drm_gem.c' line='1049' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_vm_close' mangled-name='drm_gem_vm_close' filepath='drivers/gpu/drm/drm_gem.c' line='1064' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_vm_close'>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/gpu/drm/drm_gem.c' line='1064' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_mmap_obj' mangled-name='drm_gem_mmap_obj' filepath='drivers/gpu/drm/drm_gem.c' line='1096' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_mmap_obj'>
+        <parameter type-id='abd62a97' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='1096' column='1'/>
+        <parameter type-id='7359adad' name='obj_size' filepath='drivers/gpu/drm/drm_gem.c' line='1096' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/gpu/drm/drm_gem.c' line='1097' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_gem_mmap' mangled-name='drm_gem_mmap' filepath='drivers/gpu/drm/drm_gem.c' line='1144' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_mmap'>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/gpu/drm/drm_gem.c' line='1144' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/gpu/drm/drm_gem.c' line='1144' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_vma_offset_lookup_locked' mangled-name='drm_vma_offset_lookup_locked' filepath='include/drm/drm_vma_manager.h' line='68' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_vma_offset_lookup_locked'>
+        <parameter type-id='0c6d12d5'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='e05b33b0'/>
+      </function-decl>
+      <function-decl name='drm_printf' mangled-name='drm_printf' filepath='include/drm/drm_print.h' line='88' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_printf'>
+        <parameter type-id='7ac48c21'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='3bc524c1' size-in-bits='64' id='abd62a97'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_gem_cma_helper.c' language='LANG_C89'>
+      <var-decl name='drm_gem_cma_vm_ops' type-id='92e9b57c' mangled-name='drm_gem_cma_vm_ops' visibility='default' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='263' column='1' elf-symbol-id='drm_gem_cma_vm_ops'/>
+      <function-decl name='drm_gem_cma_free_object' mangled-name='drm_gem_cma_free_object' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='176' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_cma_free_object'>
+        <parameter type-id='abd62a97' name='gem_obj' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='176' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_buf_vunmap' mangled-name='dma_buf_vunmap' filepath='include/linux/dma-buf.h' line='544' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_vunmap'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_cma_dumb_create_internal' mangled-name='drm_gem_cma_dumb_create_internal' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='211' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_cma_dumb_create_internal'>
+        <parameter type-id='9e99ecc2' name='file_priv' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='211' column='1'/>
+        <parameter type-id='8898134d' name='drm' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='212' column='1'/>
+        <parameter type-id='28cbbf40' name='args' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='213' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_gem_cma_mmap' mangled-name='drm_gem_cma_mmap' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='308' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_cma_mmap'>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='308' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='308' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_gem_cma_prime_get_sg_table' mangled-name='drm_gem_cma_prime_get_sg_table' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='427' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_cma_prime_get_sg_table'>
+        <parameter type-id='abd62a97' name='obj' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='427' column='1'/>
+        <return type-id='4adb0e6a'/>
+      </function-decl>
+      <function-decl name='drm_gem_cma_prime_import_sg_table' mangled-name='drm_gem_cma_prime_import_sg_table' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='468' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_cma_prime_import_sg_table'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='468' column='1'/>
+        <parameter type-id='e68e04c2' name='attach' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='469' column='1'/>
+        <parameter type-id='4adb0e6a' name='sgt' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='470' column='1'/>
+        <return type-id='abd62a97'/>
+      </function-decl>
+      <function-decl name='drm_gem_cma_prime_mmap' mangled-name='drm_gem_cma_prime_mmap' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='521' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_cma_prime_mmap'>
+        <parameter type-id='abd62a97' name='obj' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='521' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='522' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_gem_cma_prime_vmap' mangled-name='drm_gem_cma_prime_vmap' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='550' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_cma_prime_vmap'>
+        <parameter type-id='abd62a97' name='obj' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='550' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='drm_gem_cma_prime_vunmap' mangled-name='drm_gem_cma_prime_vunmap' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='569' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_cma_prime_vunmap'>
+        <parameter type-id='abd62a97' name='obj' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='569' column='1'/>
+        <parameter type-id='eaa32e2f' name='vaddr' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='569' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_buf_vmap' mangled-name='dma_buf_vmap' filepath='include/linux/dma-buf.h' line='543' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_vmap'>
+        <parameter type-id='5e4f599b'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <pointer-type-def type-id='f01bc09a' size-in-bits='64' id='e68e04c2'/>
+      <class-decl name='dma_buf_attachment' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='448' column='1' id='f01bc09a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dmabuf' type-id='5e4f599b' visibility='default' filepath='include/linux/dma-buf.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/dma-buf.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/dma-buf.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sgt' type-id='4adb0e6a' visibility='default' filepath='include/linux/dma-buf.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dir' type-id='eea6b025' visibility='default' filepath='include/linux/dma-buf.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/dma-buf.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dma_map_attrs' type-id='7359adad' visibility='default' filepath='include/linux/dma-buf.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sysfs_entry' type-id='39154bd3' visibility='default' filepath='include/linux/dma-buf.h' line='461' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='26832c63' size-in-bits='64' id='39154bd3'/>
+      <class-decl name='dma_buf_attach_sysfs_entry' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='458' column='1' id='26832c63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/dma-buf.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='map_counter' type-id='f0981eeb' visibility='default' filepath='include/linux/dma-buf.h' line='460' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_gem_framebuffer_helper.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='28271da3' size-in-bits='infinite' id='f5432a6f'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='drm_gem_object' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/drm/drm_gem.h' line='171' column='1' id='3bc524c1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/drm/drm_gem.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='handle_count' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_gem.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_gem.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='filp' type-id='77e79a4b' visibility='default' filepath='include/drm/drm_gem.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vma_node' type-id='743d7e52' visibility='default' filepath='include/drm/drm_gem.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_gem.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='name' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_gem.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='dma_buf' type-id='5e4f599b' visibility='default' filepath='include/drm/drm_gem.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='import_attach' type-id='e68e04c2' visibility='default' filepath='include/drm/drm_gem.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='resv' type-id='340cea9c' visibility='default' filepath='include/drm/drm_gem.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='_resv' type-id='d06fbf66' visibility='default' filepath='include/drm/drm_gem.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='funcs' type-id='3a73453d' visibility='default' filepath='include/drm/drm_gem.h' line='299' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mm' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/drm/drm_mm.h' line='186' column='1' id='0b8ea949'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='color_adjust' type-id='4bcdfb80' visibility='default' filepath='include/drm/drm_mm.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hole_stack' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mm.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='head_node' type-id='60498a7e' visibility='default' filepath='include/drm/drm_mm.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='interval_tree' type-id='6fe1603d' visibility='default' filepath='include/drm/drm_mm.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='holes_size' type-id='6fe1603d' visibility='default' filepath='include/drm/drm_mm.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='holes_addr' type-id='dec44472' visibility='default' filepath='include/drm/drm_mm.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='scan_active' type-id='7359adad' visibility='default' filepath='include/drm/drm_mm.h' line='211' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mm_node' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/drm/drm_mm.h' line='155' column='1' id='60498a7e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='color' type-id='7359adad' visibility='default' filepath='include/drm/drm_mm.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='start' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_mm.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_mm.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mm' type-id='0ee978f1' visibility='default' filepath='include/drm/drm_mm.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='node_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mm.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='hole_stack' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mm.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rb' type-id='2a8a6332' visibility='default' filepath='include/drm/drm_mm.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rb_hole_size' type-id='2a8a6332' visibility='default' filepath='include/drm/drm_mm.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rb_hole_addr' type-id='2a8a6332' visibility='default' filepath='include/drm/drm_mm.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='__subtree_last' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_mm.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hole_size' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_mm.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='allocated' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mm.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='scanned_block' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mm.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_vma_offset_node' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/drm/drm_vma_manager.h' line='52' column='1' id='743d7e52'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vm_lock' type-id='ac16795b' visibility='default' filepath='include/drm/drm_vma_manager.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vm_node' type-id='60498a7e' visibility='default' filepath='include/drm/drm_vma_manager.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='vm_files' type-id='dec44472' visibility='default' filepath='include/drm/drm_vma_manager.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='readonly' type-id='b50a4934' visibility='default' filepath='include/drm/drm_vma_manager.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_resv' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/dma-resv.h' line='72' column='1' id='d06fbf66'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='45793a97' visibility='default' filepath='include/linux/dma-resv.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='seq' type-id='e14c3b11' visibility='default' filepath='include/linux/dma-resv.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fence_excl' type-id='28271da3' visibility='default' filepath='include/linux/dma-resv.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fence' type-id='ed300e23' visibility='default' filepath='include/linux/dma-resv.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_resv_list' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/dma-resv.h' line='59' column='1' id='7cc6fd83'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/dma-resv.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shared_count' type-id='19c2251e' visibility='default' filepath='include/linux/dma-resv.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='shared_max' type-id='19c2251e' visibility='default' filepath='include/linux/dma-resv.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='shared' type-id='f5432a6f' visibility='default' filepath='include/linux/dma-resv.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_gem_object_funcs' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/drm/drm_gem.h' line='47' column='1' id='df20b624'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='free' type-id='9126441b' visibility='default' filepath='include/drm/drm_gem.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open' type-id='8e2012e0' visibility='default' filepath='include/drm/drm_gem.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='close' type-id='133b86a1' visibility='default' filepath='include/drm/drm_gem.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='print_info' type-id='1c51ec16' visibility='default' filepath='include/drm/drm_gem.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='export' type-id='a4e2d046' visibility='default' filepath='include/drm/drm_gem.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pin' type-id='12e23e5c' visibility='default' filepath='include/drm/drm_gem.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='unpin' type-id='9126441b' visibility='default' filepath='include/drm/drm_gem.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_sg_table' type-id='32774f90' visibility='default' filepath='include/drm/drm_gem.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='vmap' type-id='2edb3e4b' visibility='default' filepath='include/drm/drm_gem.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='vunmap' type-id='06586097' visibility='default' filepath='include/drm/drm_gem.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vm_ops' type-id='9be87662' visibility='default' filepath='include/drm/drm_gem.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='3bc524c1' const='yes' id='e03666da'/>
+      <pointer-type-def type-id='e03666da' size-in-bits='64' id='e8a4108a'/>
+      <qualified-type-def type-id='df20b624' const='yes' id='d45b1fc5'/>
+      <pointer-type-def type-id='d45b1fc5' size-in-bits='64' id='3a73453d'/>
+      <qualified-type-def type-id='60498a7e' const='yes' id='809e8e55'/>
+      <pointer-type-def type-id='809e8e55' size-in-bits='64' id='f89a51ed'/>
+      <pointer-type-def type-id='d06fbf66' size-in-bits='64' id='340cea9c'/>
+      <pointer-type-def type-id='7cc6fd83' size-in-bits='64' id='ed300e23'/>
+      <pointer-type-def type-id='3bc524c1' size-in-bits='64' id='abd62a97'/>
+      <pointer-type-def type-id='0b8ea949' size-in-bits='64' id='0ee978f1'/>
+      <pointer-type-def type-id='7dfcb6b6' size-in-bits='64' id='4bcdfb80'/>
+      <function-decl name='drm_gem_fb_get_obj' mangled-name='drm_gem_fb_get_obj' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='47' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_fb_get_obj'>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='47' column='1'/>
+        <parameter type-id='f0981eeb' name='plane' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='48' column='1'/>
+        <return type-id='abd62a97'/>
+      </function-decl>
+      <function-decl name='drm_gem_fb_destroy' mangled-name='drm_gem_fb_destroy' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='94' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_fb_destroy'>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='94' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_object_put_unlocked' mangled-name='drm_gem_object_put_unlocked' filepath='include/drm/drm_gem.h' line='373' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_object_put_unlocked'>
+        <parameter type-id='abd62a97'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_fb_create_handle' mangled-name='drm_gem_fb_create_handle' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='119' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_fb_create_handle'>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='119' column='1'/>
+        <parameter type-id='9e99ecc1' name='file' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='119' column='1'/>
+        <parameter type-id='807869d3' name='handle' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='120' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_gem_handle_create' mangled-name='drm_gem_handle_create' filepath='include/drm/drm_gem.h' line='376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_handle_create'>
+        <parameter type-id='9e99ecc1'/>
+        <parameter type-id='abd62a97'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_gem_object_lookup' mangled-name='drm_gem_object_lookup' filepath='include/drm/drm_gem.h' line='392' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_object_lookup'>
+        <parameter type-id='9e99ecc1'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='abd62a97'/>
+      </function-decl>
+      <function-decl name='drm_framebuffer_init' mangled-name='drm_framebuffer_init' filepath='include/drm/drm_framebuffer.h' line='218' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_framebuffer_init'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='7b332e1c'/>
+        <parameter type-id='8e992c3d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dev_printk' mangled-name='drm_dev_printk' filepath='include/drm/drm_print.h' line='276' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dev_printk'>
+        <parameter type-id='8df61054'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_fb_create' mangled-name='drm_gem_fb_create' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='223' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_fb_create'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='223' column='1'/>
+        <parameter type-id='9e99ecc1' name='file' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='223' column='1'/>
+        <parameter type-id='92ed24a5' name='mode_cmd' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='224' column='1'/>
+        <return type-id='7b332e1c'/>
+      </function-decl>
+      <function-decl name='drm_gem_fb_prepare_fb' mangled-name='drm_gem_fb_prepare_fb' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='287' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_fb_prepare_fb'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='287' column='1'/>
+        <parameter type-id='d0835005' name='state' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='288' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_set_fence_for_plane' mangled-name='drm_atomic_set_fence_for_plane' filepath='include/drm/drm_atomic_uapi.h' line='52' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_set_fence_for_plane'>
+        <parameter type-id='d0835005'/>
+        <parameter type-id='28271da3'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='7dfcb6b6'>
+        <parameter type-id='f89a51ed'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='3df9fd28'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_hdcp.c' language='LANG_C89'>
+      <class-decl name='drm_crtc' is-struct='yes' visibility='default' is-declaration-only='yes' id='3f5f978c'/>
+      <class-decl name='i2c_adapter' is-struct='yes' visibility='default' is-declaration-only='yes' id='ec5384d4'/>
+      <class-decl name='firmware' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/firmware.h' line='12' column='1' id='62049774'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/firmware.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='bbaf3419' visibility='default' filepath='include/linux/firmware.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pages' type-id='9f93c9da' visibility='default' filepath='include/linux/firmware.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/firmware.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='62049774' const='yes' id='732bc085'/>
+      <pointer-type-def type-id='732bc085' size-in-bits='64' id='fce0537d'/>
+      <pointer-type-def type-id='3f5f978c' size-in-bits='64' id='b64ad7cc'/>
+      <pointer-type-def type-id='ec5384d4' size-in-bits='64' id='b9af02c4'/>
+      <function-decl name='drm_hdcp_check_ksvs_revoked' mangled-name='drm_hdcp_check_ksvs_revoked' filepath='drivers/gpu/drm/drm_hdcp.c' line='284' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_hdcp_check_ksvs_revoked'>
+        <parameter type-id='8898134d' name='drm_dev' filepath='drivers/gpu/drm/drm_hdcp.c' line='284' column='1'/>
+        <parameter type-id='8bff8096' name='ksvs' filepath='drivers/gpu/drm/drm_hdcp.c' line='284' column='1'/>
+        <parameter type-id='19c2251e' name='ksv_count' filepath='drivers/gpu/drm/drm_hdcp.c' line='285' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='release_firmware' mangled-name='release_firmware' filepath='include/linux/firmware.h' line='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='release_firmware'>
+        <parameter type-id='fce0537d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_connector_attach_content_protection_property' mangled-name='drm_connector_attach_content_protection_property' filepath='drivers/gpu/drm/drm_hdcp.c' line='391' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_attach_content_protection_property'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_hdcp.c' line='392' column='1'/>
+        <parameter type-id='b50a4934' name='hdcp_content_type' filepath='drivers/gpu/drm/drm_hdcp.c' line='392' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_hdcp_update_content_protection' mangled-name='drm_hdcp_update_content_protection' filepath='drivers/gpu/drm/drm_hdcp.c' line='443' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_hdcp_update_content_protection'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_hdcp.c' line='443' column='1'/>
+        <parameter type-id='91ce1af9' name='val' filepath='drivers/gpu/drm/drm_hdcp.c' line='444' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_ioc32.c' language='LANG_C89'>
+      <function-decl name='drm_compat_ioctl' mangled-name='drm_compat_ioctl' filepath='drivers/gpu/drm/drm_ioc32.c' line='970' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_compat_ioctl'>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/gpu/drm/drm_ioc32.c' line='970' column='1'/>
+        <parameter type-id='f0981eeb' name='cmd' filepath='drivers/gpu/drm/drm_ioc32.c' line='970' column='1'/>
+        <parameter type-id='7359adad' name='arg' filepath='drivers/gpu/drm/drm_ioc32.c' line='970' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_ioctl.c' language='LANG_C89'>
+      <function-decl name='drm_ioctl' mangled-name='drm_ioctl' filepath='drivers/gpu/drm/drm_ioctl.c' line='809' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_ioctl'>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/gpu/drm/drm_ioctl.c' line='809' column='1'/>
+        <parameter type-id='f0981eeb' name='cmd' filepath='drivers/gpu/drm/drm_ioctl.c' line='810' column='1'/>
+        <parameter type-id='7359adad' name='arg' filepath='drivers/gpu/drm/drm_ioctl.c' line='810' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_irq.c' language='LANG_C89'>
+      <function-decl name='drm_irq_install' mangled-name='drm_irq_install' filepath='drivers/gpu/drm/drm_irq.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_irq_install'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_irq.c' line='106' column='1'/>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/gpu/drm/drm_irq.c' line='106' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_irq_uninstall' mangled-name='drm_irq_uninstall' filepath='drivers/gpu/drm/drm_irq.c' line='173' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_irq_uninstall'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_irq.c' line='173' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_mipi_dsi.c' language='LANG_C89'>
+      <class-decl name='mipi_dsi_device' size-in-bits='7872' is-struct='yes' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='187' column='1' id='a167c9f6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='host' type-id='c149fe34' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7584'>
+          <var-decl name='channel' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='lanes' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='format' type-id='fe8650ad' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='mode_flags' type-id='7359adad' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='hs_rate' type-id='7359adad' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='lp_rate' type-id='7359adad' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='197' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mipi_dsi_host' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='106' column='1' id='b048e68e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='093ead14' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='109' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mipi_dsi_host_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='91' column='1' id='62465d3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attach' type-id='43a37dd9' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='detach' type-id='43a37dd9' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='transfer' type-id='a51b5fb8' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mipi_dsi_msg' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='38' column='1' id='b98f7775'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channel' type-id='f9b06939' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='type' type-id='f9b06939' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='1dc6a898' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ctrl' type-id='19c2251e' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_ms' type-id='19c2251e' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_len' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_buf' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_len' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rx_buf' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='mipi_dsi_pixel_format' filepath='include/drm/drm_mipi_dsi.h' line='147' column='1' id='fe8650ad'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MIPI_DSI_FMT_RGB888' value='0'/>
+        <enumerator name='MIPI_DSI_FMT_RGB666' value='1'/>
+        <enumerator name='MIPI_DSI_FMT_RGB666_PACKED' value='2'/>
+        <enumerator name='MIPI_DSI_FMT_RGB565' value='3'/>
+      </enum-decl>
+      <class-decl name='mipi_dsi_device_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='165' column='1' id='1c5d084f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='664ac0b7' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='channel' type-id='19c2251e' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='node' type-id='9a537bbe' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='168' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mipi_dsi_packet' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='63' column='1' id='7e369584'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='header' type-id='931565be' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='payload_length' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='payload' type-id='bbaf3419' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mipi_dsi_driver' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='302' column='1' id='51d715c2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='probe' type-id='289e8bdc' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='remove' type-id='289e8bdc' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='shutdown' type-id='fea4b945' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='306' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='1c5d084f' const='yes' id='a51c0f4a'/>
+      <pointer-type-def type-id='a51c0f4a' size-in-bits='64' id='4b2c3420'/>
+      <qualified-type-def type-id='62465d3d' const='yes' id='db1c1b36'/>
+      <pointer-type-def type-id='db1c1b36' size-in-bits='64' id='093ead14'/>
+      <qualified-type-def type-id='b98f7775' const='yes' id='b5b8ebc4'/>
+      <pointer-type-def type-id='b5b8ebc4' size-in-bits='64' id='001b67aa'/>
+      <pointer-type-def type-id='ce6ad852' size-in-bits='64' id='289e8bdc'/>
+      <pointer-type-def type-id='11ecaf45' size-in-bits='64' id='43a37dd9'/>
+      <pointer-type-def type-id='a167c9f6' size-in-bits='64' id='182be7cc'/>
+      <pointer-type-def type-id='51d715c2' size-in-bits='64' id='0588e2f0'/>
+      <pointer-type-def type-id='b048e68e' size-in-bits='64' id='c149fe34'/>
+      <pointer-type-def type-id='7e369584' size-in-bits='64' id='368a0122'/>
+      <pointer-type-def type-id='31b9d99e' size-in-bits='64' id='a51b5fb8'/>
+      <pointer-type-def type-id='a796a301' size-in-bits='64' id='fea4b945'/>
+      <function-decl name='mipi_dsi_device_register_full' mangled-name='mipi_dsi_device_register_full' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='200' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_device_register_full'>
+        <parameter type-id='c149fe34' name='host' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='200' column='1'/>
+        <parameter type-id='4b2c3420' name='info' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='201' column='1'/>
+        <return type-id='182be7cc'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_device_unregister' mangled-name='mipi_dsi_device_unregister' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='243' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_device_unregister'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='243' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_find_mipi_dsi_host_by_node' mangled-name='of_find_mipi_dsi_host_by_node' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_mipi_dsi_host_by_node'>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='261' column='1'/>
+        <return type-id='c149fe34'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_host_register' mangled-name='mipi_dsi_host_register' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='280' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_host_register'>
+        <parameter type-id='c149fe34' name='host' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='280' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_modalias_node' mangled-name='of_modalias_node' filepath='include/linux/of.h' line='362' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_modalias_node'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_host_unregister' mangled-name='mipi_dsi_host_unregister' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='308' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_host_unregister'>
+        <parameter type-id='c149fe34' name='host' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='308' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_attach' mangled-name='mipi_dsi_attach' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='322' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_attach'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='322' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_detach' mangled-name='mipi_dsi_detach' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='337' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_detach'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='337' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_packet_format_is_long' mangled-name='mipi_dsi_packet_format_is_long' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='407' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_packet_format_is_long'>
+        <parameter type-id='f9b06939' name='type' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='407' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_create_packet' mangled-name='mipi_dsi_create_packet' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='440' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_create_packet'>
+        <parameter type-id='368a0122' name='packet' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='440' column='1'/>
+        <parameter type-id='001b67aa' name='msg' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='441' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_set_maximum_return_packet_size' mangled-name='mipi_dsi_set_maximum_return_packet_size' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='534' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_set_maximum_return_packet_size'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='534' column='1'/>
+        <parameter type-id='1dc6a898' name='value' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='535' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_generic_write' mangled-name='mipi_dsi_generic_write' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='562' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_generic_write'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='562' column='1'/>
+        <parameter type-id='eaa32e2f' name='payload' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='562' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='563' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_generic_read' mangled-name='mipi_dsi_generic_read' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='607' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_generic_read'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='607' column='1'/>
+        <parameter type-id='eaa32e2f' name='params' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='607' column='1'/>
+        <parameter type-id='b59d7dce' name='num_params' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='608' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='608' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='608' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_dcs_write_buffer' mangled-name='mipi_dsi_dcs_write_buffer' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='651' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_dcs_write_buffer'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='651' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='652' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='652' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_dcs_read' mangled-name='mipi_dsi_dcs_read' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='734' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_dcs_read'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='734' column='1'/>
+        <parameter type-id='f9b06939' name='cmd' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='734' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='734' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='735' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_dcs_set_tear_off' mangled-name='mipi_dsi_dcs_set_tear_off' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='967' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_dcs_set_tear_off'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='967' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_dcs_set_display_brightness' mangled-name='mipi_dsi_dcs_set_display_brightness' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='1053' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_dcs_set_display_brightness'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='1053' column='1'/>
+        <parameter type-id='1dc6a898' name='brightness' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='1054' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_driver_register_full' mangled-name='mipi_dsi_driver_register_full' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='1125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_driver_register_full'>
+        <parameter type-id='0588e2f0' name='drv' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='1125' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='1126' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_driver_unregister' mangled-name='mipi_dsi_driver_unregister' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='1148' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_driver_unregister'>
+        <parameter type-id='0588e2f0' name='drv' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='1148' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='ce6ad852'>
+        <parameter type-id='182be7cc' name='dsi'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='11ecaf45'>
+        <parameter type-id='c149fe34'/>
+        <parameter type-id='182be7cc'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='31b9d99e'>
+        <parameter type-id='c149fe34'/>
+        <parameter type-id='001b67aa'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a796a301'>
+        <parameter type-id='182be7cc' name='dsi'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_mm.c' language='LANG_C89'>
+      <enum-decl name='drm_mm_insert_mode' filepath='include/drm/drm_mm.h' line='68' column='1' id='24e1ec7e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_MM_INSERT_BEST' value='0'/>
+        <enumerator name='DRM_MM_INSERT_LOW' value='1'/>
+        <enumerator name='DRM_MM_INSERT_HIGH' value='2'/>
+        <enumerator name='DRM_MM_INSERT_EVICT' value='3'/>
+        <enumerator name='DRM_MM_INSERT_ONCE' value='2147483648'/>
+        <enumerator name='DRM_MM_INSERT_HIGHEST' value='2147483650'/>
+        <enumerator name='DRM_MM_INSERT_LOWEST' value='2147483649'/>
+      </enum-decl>
+      <qualified-type-def type-id='0b8ea949' const='yes' id='bbc46580'/>
+      <pointer-type-def type-id='bbc46580' size-in-bits='64' id='402c0a9e'/>
+      <qualified-type-def type-id='0ee978f1' const='yes' id='60f31a4e'/>
+      <pointer-type-def type-id='60498a7e' size-in-bits='64' id='6368b074'/>
+      <qualified-type-def type-id='6368b074' const='yes' id='7c50e73f'/>
+      <function-decl name='drm_mm_insert_node_in_range' mangled-name='drm_mm_insert_node_in_range' filepath='drivers/gpu/drm/drm_mm.c' line='464' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mm_insert_node_in_range'>
+        <parameter type-id='60f31a4e' name='mm' filepath='drivers/gpu/drm/drm_mm.c' line='464' column='1'/>
+        <parameter type-id='7c50e73f' name='node' filepath='drivers/gpu/drm/drm_mm.c' line='465' column='1'/>
+        <parameter type-id='91ce1af9' name='size' filepath='drivers/gpu/drm/drm_mm.c' line='466' column='1'/>
+        <parameter type-id='91ce1af9' name='alignment' filepath='drivers/gpu/drm/drm_mm.c' line='466' column='1'/>
+        <parameter type-id='7359adad' name='color' filepath='drivers/gpu/drm/drm_mm.c' line='467' column='1'/>
+        <parameter type-id='91ce1af9' name='range_start' filepath='drivers/gpu/drm/drm_mm.c' line='468' column='1'/>
+        <parameter type-id='91ce1af9' name='range_end' filepath='drivers/gpu/drm/drm_mm.c' line='468' column='1'/>
+        <parameter type-id='24e1ec7e' name='mode' filepath='drivers/gpu/drm/drm_mm.c' line='469' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_mm_remove_node' mangled-name='drm_mm_remove_node' filepath='drivers/gpu/drm/drm_mm.c' line='572' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mm_remove_node'>
+        <parameter type-id='6368b074' name='node' filepath='drivers/gpu/drm/drm_mm.c' line='572' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rb_replace_node' mangled-name='rb_replace_node' filepath='include/linux/rbtree.h' line='64' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rb_replace_node'>
+        <parameter type-id='e6532500'/>
+        <parameter type-id='e6532500'/>
+        <parameter type-id='c5bcc2c0'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mm_init' mangled-name='drm_mm_init' filepath='drivers/gpu/drm/drm_mm.c' line='907' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mm_init'>
+        <parameter type-id='0ee978f1' name='mm' filepath='drivers/gpu/drm/drm_mm.c' line='907' column='1'/>
+        <parameter type-id='91ce1af9' name='start' filepath='drivers/gpu/drm/drm_mm.c' line='907' column='1'/>
+        <parameter type-id='91ce1af9' name='size' filepath='drivers/gpu/drm/drm_mm.c' line='907' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mm_print' mangled-name='drm_mm_print' filepath='drivers/gpu/drm/drm_mm.c' line='963' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mm_print'>
+        <parameter type-id='402c0a9e' name='mm' filepath='drivers/gpu/drm/drm_mm.c' line='963' column='1'/>
+        <parameter type-id='7ac48c21' name='p' filepath='drivers/gpu/drm/drm_mm.c' line='963' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='dec44472' size-in-bits='64' id='c5bcc2c0'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_mode_config.c' language='LANG_C89'>
+      <function-decl name='drm_mode_config_init' mangled-name='drm_mode_config_init' filepath='drivers/gpu/drm/drm_mode_config.c' line='387' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_config_init'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_mode_config.c' line='387' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mode_config_cleanup' mangled-name='drm_mode_config_cleanup' filepath='drivers/gpu/drm/drm_mode_config.c' line='434' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_config_cleanup'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_mode_config.c' line='434' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_mode_object.c' language='LANG_C89'>
+      <function-decl name='drm_mode_object_find' mangled-name='drm_mode_object_find' filepath='drivers/gpu/drm/drm_mode_object.c' line='173' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_object_find'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_mode_object.c' line='173' column='1'/>
+        <parameter type-id='9e99ecc2' name='file_priv' filepath='drivers/gpu/drm/drm_mode_object.c' line='174' column='1'/>
+        <parameter type-id='8f92235e' name='id' filepath='drivers/gpu/drm/drm_mode_object.c' line='175' column='1'/>
+        <parameter type-id='8f92235e' name='type' filepath='drivers/gpu/drm/drm_mode_object.c' line='175' column='1'/>
+        <return type-id='c5417630'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_modes.c' language='LANG_C89'>
+      <class-decl name='videomode' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/video/videomode.h' line='18' column='1' id='70ab3bc7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pixelclock' type-id='7359adad' visibility='default' filepath='include/video/videomode.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hactive' type-id='19c2251e' visibility='default' filepath='include/video/videomode.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hfront_porch' type-id='19c2251e' visibility='default' filepath='include/video/videomode.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hback_porch' type-id='19c2251e' visibility='default' filepath='include/video/videomode.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='hsync_len' type-id='19c2251e' visibility='default' filepath='include/video/videomode.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vactive' type-id='19c2251e' visibility='default' filepath='include/video/videomode.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='vfront_porch' type-id='19c2251e' visibility='default' filepath='include/video/videomode.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vback_porch' type-id='19c2251e' visibility='default' filepath='include/video/videomode.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='vsync_len' type-id='19c2251e' visibility='default' filepath='include/video/videomode.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flags' type-id='04e8607a' visibility='default' filepath='include/video/videomode.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='display_flags' filepath='include/video/display_timing.h' line='14' column='1' id='04e8607a'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DISPLAY_FLAGS_HSYNC_LOW' value='1'/>
+        <enumerator name='DISPLAY_FLAGS_HSYNC_HIGH' value='2'/>
+        <enumerator name='DISPLAY_FLAGS_VSYNC_LOW' value='4'/>
+        <enumerator name='DISPLAY_FLAGS_VSYNC_HIGH' value='8'/>
+        <enumerator name='DISPLAY_FLAGS_DE_LOW' value='16'/>
+        <enumerator name='DISPLAY_FLAGS_DE_HIGH' value='32'/>
+        <enumerator name='DISPLAY_FLAGS_PIXDATA_POSEDGE' value='64'/>
+        <enumerator name='DISPLAY_FLAGS_PIXDATA_NEGEDGE' value='128'/>
+        <enumerator name='DISPLAY_FLAGS_INTERLACED' value='256'/>
+        <enumerator name='DISPLAY_FLAGS_DOUBLESCAN' value='512'/>
+        <enumerator name='DISPLAY_FLAGS_DOUBLECLK' value='1024'/>
+        <enumerator name='DISPLAY_FLAGS_SYNC_POSEDGE' value='2048'/>
+        <enumerator name='DISPLAY_FLAGS_SYNC_NEGEDGE' value='4096'/>
+      </enum-decl>
+      <qualified-type-def type-id='70ab3bc7' const='yes' id='ceff8680'/>
+      <pointer-type-def type-id='ceff8680' size-in-bits='64' id='8640fd9e'/>
+      <pointer-type-def type-id='70ab3bc7' size-in-bits='64' id='83e7c23f'/>
+      <function-decl name='drm_mode_create' mangled-name='drm_mode_create' filepath='drivers/gpu/drm/drm_modes.c' line='70' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_create'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_modes.c' line='70' column='1'/>
+        <return type-id='11e02f83'/>
+      </function-decl>
+      <function-decl name='drm_cvt_mode' mangled-name='drm_cvt_mode' filepath='drivers/gpu/drm/drm_modes.c' line='140' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_cvt_mode'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_modes.c' line='140' column='1'/>
+        <parameter type-id='95e97e5e' name='hdisplay' filepath='drivers/gpu/drm/drm_modes.c' line='140' column='1'/>
+        <parameter type-id='95e97e5e' name='vdisplay' filepath='drivers/gpu/drm/drm_modes.c' line='141' column='1'/>
+        <parameter type-id='95e97e5e' name='vrefresh' filepath='drivers/gpu/drm/drm_modes.c' line='141' column='1'/>
+        <parameter type-id='b50a4934' name='reduced' filepath='drivers/gpu/drm/drm_modes.c' line='142' column='1'/>
+        <parameter type-id='b50a4934' name='interlaced' filepath='drivers/gpu/drm/drm_modes.c' line='142' column='1'/>
+        <parameter type-id='b50a4934' name='margins' filepath='drivers/gpu/drm/drm_modes.c' line='142' column='1'/>
+        <return type-id='11e02f83'/>
+      </function-decl>
+      <function-decl name='drm_mode_set_name' mangled-name='drm_mode_set_name' filepath='drivers/gpu/drm/drm_modes.c' line='739' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_set_name'>
+        <parameter type-id='11e02f83' name='mode' filepath='drivers/gpu/drm/drm_modes.c' line='739' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_display_mode_from_videomode' mangled-name='drm_display_mode_from_videomode' filepath='drivers/gpu/drm/drm_modes.c' line='587' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_display_mode_from_videomode'>
+        <parameter type-id='8640fd9e' name='vm' filepath='drivers/gpu/drm/drm_modes.c' line='587' column='1'/>
+        <parameter type-id='11e02f83' name='dmode' filepath='drivers/gpu/drm/drm_modes.c' line='588' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_display_mode_to_videomode' mangled-name='drm_display_mode_to_videomode' filepath='drivers/gpu/drm/drm_modes.c' line='628' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_display_mode_to_videomode'>
+        <parameter type-id='745b39e8' name='dmode' filepath='drivers/gpu/drm/drm_modes.c' line='628' column='1'/>
+        <parameter type-id='83e7c23f' name='vm' filepath='drivers/gpu/drm/drm_modes.c' line='629' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_get_drm_display_mode' mangled-name='of_get_drm_display_mode' filepath='drivers/gpu/drm/drm_modes.c' line='707' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_drm_display_mode'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/gpu/drm/drm_modes.c' line='707' column='1'/>
+        <parameter type-id='11e02f83' name='dmode' filepath='drivers/gpu/drm/drm_modes.c' line='708' column='1'/>
+        <parameter type-id='f9409001' name='bus_flags' filepath='drivers/gpu/drm/drm_modes.c' line='708' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/gpu/drm/drm_modes.c' line='709' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_mode_equal' mangled-name='drm_mode_equal' filepath='drivers/gpu/drm/drm_modes.c' line='1053' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_equal'>
+        <parameter type-id='745b39e8' name='mode1' filepath='drivers/gpu/drm/drm_modes.c' line='1053' column='1'/>
+        <parameter type-id='745b39e8' name='mode2' filepath='drivers/gpu/drm/drm_modes.c' line='1054' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drm_match_cea_mode' mangled-name='drm_match_cea_mode' filepath='include/drm/drm_edid.h' line='483' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_match_cea_mode'>
+        <parameter type-id='745b39e8'/>
+        <return type-id='002ac4a6'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_modeset_helper.c' language='LANG_C89'>
+      <function-decl name='drm_helper_mode_fill_fb_struct' mangled-name='drm_helper_mode_fill_fb_struct' filepath='drivers/gpu/drm/drm_modeset_helper.c' line='79' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_helper_mode_fill_fb_struct'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_modeset_helper.c' line='79' column='1'/>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_modeset_helper.c' line='80' column='1'/>
+        <parameter type-id='92ed24a5' name='mode_cmd' filepath='drivers/gpu/drm/drm_modeset_helper.c' line='81' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_get_format_info' mangled-name='drm_get_format_info' filepath='include/drm/drm_fourcc.h' line='310' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_get_format_info'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='92ed24a5'/>
+        <return type-id='f10b2208'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_modeset_lock.c' language='LANG_C89'>
+      <function-decl name='drm_modeset_acquire_fini' mangled-name='drm_modeset_acquire_fini' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='214' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_acquire_fini'>
+        <parameter type-id='d1499e71' name='ctx' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='214' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_of.c' language='LANG_C89'>
+      <class-decl name='component_match' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/base/component.c' line='56' column='1' id='37c0f586'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alloc' type-id='b59d7dce' visibility='default' filepath='drivers/base/component.c' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num' type-id='b59d7dce' visibility='default' filepath='drivers/base/component.c' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='compare' type-id='72dd5196' visibility='default' filepath='drivers/base/component.c' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='component_master_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/component.h' line='52' column='1' id='85fa4490'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bind' type-id='613d39f5' visibility='default' filepath='include/linux/component.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unbind' type-id='dd787f72' visibility='default' filepath='include/linux/component.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='of_endpoint' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/of_graph.h' line='23' column='1' id='5821ac64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='f0981eeb' visibility='default' filepath='include/linux/of_graph.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/linux/of_graph.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='local_node' type-id='0afa6ea3' visibility='default' filepath='include/linux/of_graph.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='37c0f586' size-in-bits='64' id='7d9421ac'/>
+      <pointer-type-def type-id='7d9421ac' size-in-bits='64' id='3630c5f2'/>
+      <qualified-type-def type-id='85fa4490' const='yes' id='ec8469f9'/>
+      <pointer-type-def type-id='ec8469f9' size-in-bits='64' id='27729729'/>
+      <pointer-type-def type-id='5821ac64' size-in-bits='64' id='a5eb3c12'/>
+      <function-decl name='drm_of_find_possible_crtcs' mangled-name='drm_of_find_possible_crtcs' filepath='drivers/gpu/drm/drm_of.c' line='62' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_of_find_possible_crtcs'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_of.c' line='62' column='1'/>
+        <parameter type-id='9a537bbe' name='port' filepath='drivers/gpu/drm/drm_of.c' line='63' column='1'/>
+        <return type-id='8f92235e'/>
+      </function-decl>
+      <function-decl name='of_graph_get_next_endpoint' mangled-name='of_graph_get_next_endpoint' filepath='include/linux/of_graph.h' line='45' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_graph_get_next_endpoint'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='9a537bbe'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='drm_of_component_match_add' mangled-name='drm_of_component_match_add' filepath='drivers/gpu/drm/drm_of.c' line='91' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_of_component_match_add'>
+        <parameter type-id='fa0b179b' name='master' filepath='drivers/gpu/drm/drm_of.c' line='91' column='1'/>
+        <parameter type-id='3630c5f2' name='matchptr' filepath='drivers/gpu/drm/drm_of.c' line='92' column='1'/>
+        <parameter type-id='92d15ae9' name='compare' filepath='drivers/gpu/drm/drm_of.c' line='93' column='1'/>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/gpu/drm/drm_of.c' line='94' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_graph_get_remote_port_parent' mangled-name='of_graph_get_remote_port_parent' filepath='include/linux/of_graph.h' line='52' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_graph_get_remote_port_parent'>
+        <parameter type-id='0afa6ea3'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='component_master_add_with_match' mangled-name='component_master_add_with_match' filepath='include/linux/component.h' line='90' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='component_master_add_with_match'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='27729729'/>
+        <parameter type-id='7d9421ac'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_graph_parse_endpoint' mangled-name='of_graph_parse_endpoint' filepath='include/linux/of_graph.h' line='41' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_graph_parse_endpoint'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='a5eb3c12'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_graph_get_remote_node' mangled-name='of_graph_get_remote_node' filepath='include/linux/of_graph.h' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_graph_get_remote_node'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_panel.c' language='LANG_C89'>
+      <function-decl name='drm_panel_init' mangled-name='drm_panel_init' filepath='drivers/gpu/drm/drm_panel.c' line='51' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_init'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='51' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_panel_add' mangled-name='drm_panel_add' filepath='drivers/gpu/drm/drm_panel.c' line='67' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_add'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='67' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_panel_remove' mangled-name='drm_panel_remove' filepath='drivers/gpu/drm/drm_panel.c' line='83' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_remove'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='83' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_panel_detach' mangled-name='drm_panel_detach' filepath='drivers/gpu/drm/drm_panel.c' line='128' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_detach'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='128' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_drm_find_panel' mangled-name='of_drm_find_panel' filepath='drivers/gpu/drm/drm_panel.c' line='248' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_drm_find_panel'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/gpu/drm/drm_panel.c' line='248' column='1'/>
+        <return type-id='c5491077'/>
+      </function-decl>
+      <function-decl name='drm_panel_notifier_register' mangled-name='drm_panel_notifier_register' filepath='drivers/gpu/drm/drm_panel.c' line='270' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_notifier_register'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='270' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/gpu/drm/drm_panel.c' line='271' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_panel_notifier_unregister' mangled-name='drm_panel_notifier_unregister' filepath='drivers/gpu/drm/drm_panel.c' line='277' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_notifier_unregister'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='277' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/gpu/drm/drm_panel.c' line='278' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_panel_notifier_call_chain' mangled-name='drm_panel_notifier_call_chain' filepath='drivers/gpu/drm/drm_panel.c' line='284' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_notifier_call_chain'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='284' column='1'/>
+        <parameter type-id='7359adad' name='val' filepath='drivers/gpu/drm/drm_panel.c' line='285' column='1'/>
+        <parameter type-id='eaa32e2f' name='v' filepath='drivers/gpu/drm/drm_panel.c' line='285' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_plane_helper.c' language='LANG_C89'>
+      <function-decl name='drm_plane_cleanup' mangled-name='drm_plane_cleanup' filepath='include/drm/drm_plane.h' line='728' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_plane_cleanup'>
+        <parameter type-id='a6711537'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_check_plane_state' mangled-name='drm_atomic_helper_check_plane_state' filepath='include/drm/drm_atomic_helper.h' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_check_plane_state'>
+        <parameter type-id='d0835005'/>
+        <parameter type-id='c9982f26'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='c894953d'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_prime.c' language='LANG_C89'>
+      <class-decl name='dma_buf_export_info' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='478' column='1' id='4da0249b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='exp_name' type-id='80f4b756' visibility='default' filepath='include/linux/dma-buf.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/linux/dma-buf.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='c248c11b' visibility='default' filepath='include/linux/dma-buf.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/dma-buf.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/dma-buf.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resv' type-id='340cea9c' visibility='default' filepath='include/linux/dma-buf.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/dma-buf.h' line='485' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='4da0249b' const='yes' id='27b6d100'/>
+      <pointer-type-def type-id='27b6d100' size-in-bits='64' id='aecb451e'/>
+      <function-decl name='dma_buf_export' mangled-name='dma_buf_export' filepath='include/linux/dma-buf.h' line='518' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_export'>
+        <parameter type-id='aecb451e'/>
+        <return type-id='5e4f599b'/>
+      </function-decl>
+      <function-decl name='drm_gem_prime_fd_to_handle' mangled-name='drm_gem_prime_fd_to_handle' filepath='drivers/gpu/drm/drm_prime.c' line='291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_prime_fd_to_handle'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_prime.c' line='291' column='1'/>
+        <parameter type-id='9e99ecc2' name='file_priv' filepath='drivers/gpu/drm/drm_prime.c' line='292' column='1'/>
+        <parameter type-id='95e97e5e' name='prime_fd' filepath='drivers/gpu/drm/drm_prime.c' line='292' column='1'/>
+        <parameter type-id='90421557' name='handle' filepath='drivers/gpu/drm/drm_prime.c' line='293' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_buf_get' mangled-name='dma_buf_get' filepath='include/linux/dma-buf.h' line='521' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_get'>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='5e4f599b'/>
+      </function-decl>
+      <function-decl name='drm_gem_prime_import' mangled-name='drm_gem_prime_import' filepath='drivers/gpu/drm/drm_prime.c' line='950' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_prime_import'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_prime.c' line='950' column='1'/>
+        <parameter type-id='5e4f599b' name='dma_buf' filepath='drivers/gpu/drm/drm_prime.c' line='951' column='1'/>
+        <return type-id='abd62a97'/>
+      </function-decl>
+      <function-decl name='drm_gem_prime_handle_to_fd' mangled-name='drm_gem_prime_handle_to_fd' filepath='drivers/gpu/drm/drm_prime.c' line='422' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_prime_handle_to_fd'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_prime.c' line='422' column='1'/>
+        <parameter type-id='9e99ecc2' name='file_priv' filepath='drivers/gpu/drm/drm_prime.c' line='423' column='1'/>
+        <parameter type-id='8f92235e' name='handle' filepath='drivers/gpu/drm/drm_prime.c' line='423' column='1'/>
+        <parameter type-id='8f92235e' name='flags' filepath='drivers/gpu/drm/drm_prime.c' line='424' column='1'/>
+        <parameter type-id='7292109c' name='prime_fd' filepath='drivers/gpu/drm/drm_prime.c' line='425' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_buf_fd' mangled-name='dma_buf_fd' filepath='include/linux/dma-buf.h' line='520' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_fd'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_gem_prime_mmap' mangled-name='drm_gem_prime_mmap' filepath='drivers/gpu/drm/drm_prime.c' line='710' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_prime_mmap'>
+        <parameter type-id='abd62a97' name='obj' filepath='drivers/gpu/drm/drm_prime.c' line='710' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/gpu/drm/drm_prime.c' line='710' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_prime_pages_to_sg' mangled-name='drm_prime_pages_to_sg' filepath='drivers/gpu/drm/drm_prime.c' line='816' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_prime_pages_to_sg'>
+        <parameter type-id='9f93c9da' name='pages' filepath='drivers/gpu/drm/drm_prime.c' line='816' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_pages' filepath='drivers/gpu/drm/drm_prime.c' line='816' column='1'/>
+        <return type-id='4adb0e6a'/>
+      </function-decl>
+      <function-decl name='drm_gem_prime_export' mangled-name='drm_gem_prime_export' filepath='drivers/gpu/drm/drm_prime.c' line='848' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_prime_export'>
+        <parameter type-id='abd62a97' name='obj' filepath='drivers/gpu/drm/drm_prime.c' line='848' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='drivers/gpu/drm/drm_prime.c' line='849' column='1'/>
+        <return type-id='5e4f599b'/>
+      </function-decl>
+      <function-decl name='dma_buf_attach' mangled-name='dma_buf_attach' filepath='include/linux/dma-buf.h' line='513' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_attach'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='e68e04c2'/>
+      </function-decl>
+      <function-decl name='dma_buf_map_attachment' mangled-name='dma_buf_map_attachment' filepath='include/linux/dma-buf.h' line='524' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_map_attachment'>
+        <parameter type-id='e68e04c2'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='4adb0e6a'/>
+      </function-decl>
+      <function-decl name='dma_buf_unmap_attachment' mangled-name='dma_buf_unmap_attachment' filepath='include/linux/dma-buf.h' line='526' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_unmap_attachment'>
+        <parameter type-id='e68e04c2'/>
+        <parameter type-id='4adb0e6a'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_buf_detach' mangled-name='dma_buf_detach' filepath='include/linux/dma-buf.h' line='515' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_detach'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='e68e04c2'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_prime_sg_to_page_addr_arrays' mangled-name='drm_prime_sg_to_page_addr_arrays' filepath='drivers/gpu/drm/drm_prime.c' line='970' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_prime_sg_to_page_addr_arrays'>
+        <parameter type-id='4adb0e6a' name='sgt' filepath='drivers/gpu/drm/drm_prime.c' line='970' column='1'/>
+        <parameter type-id='9f93c9da' name='pages' filepath='drivers/gpu/drm/drm_prime.c' line='970' column='1'/>
+        <parameter type-id='e835b5d8' name='addrs' filepath='drivers/gpu/drm/drm_prime.c' line='971' column='1'/>
+        <parameter type-id='95e97e5e' name='max_entries' filepath='drivers/gpu/drm/drm_prime.c' line='971' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_prime_gem_destroy' mangled-name='drm_prime_gem_destroy' filepath='drivers/gpu/drm/drm_prime.c' line='1011' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_prime_gem_destroy'>
+        <parameter type-id='abd62a97' name='obj' filepath='drivers/gpu/drm/drm_prime.c' line='1011' column='1'/>
+        <parameter type-id='4adb0e6a' name='sg' filepath='drivers/gpu/drm/drm_prime.c' line='1011' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='cf29c9b3' size-in-bits='64' id='e835b5d8'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_print.c' language='LANG_C89'>
+      <function-decl name='__drm_puts_seq_file' mangled-name='__drm_puts_seq_file' filepath='drivers/gpu/drm/drm_print.c' line='126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_puts_seq_file'>
+        <parameter type-id='7ac48c21' name='p' filepath='drivers/gpu/drm/drm_print.c' line='126' column='1'/>
+        <parameter type-id='80f4b756' name='str' filepath='drivers/gpu/drm/drm_print.c' line='126' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__drm_printfn_seq_file' mangled-name='__drm_printfn_seq_file' filepath='drivers/gpu/drm/drm_print.c' line='132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_printfn_seq_file'>
+        <parameter type-id='7ac48c21' name='p' filepath='drivers/gpu/drm/drm_print.c' line='132' column='1'/>
+        <parameter type-id='3b5c2208' name='vaf' filepath='drivers/gpu/drm/drm_print.c' line='132' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__drm_printfn_info' mangled-name='__drm_printfn_info' filepath='drivers/gpu/drm/drm_print.c' line='138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_printfn_info'>
+        <parameter type-id='7ac48c21' name='p' filepath='drivers/gpu/drm/drm_print.c' line='138' column='1'/>
+        <parameter type-id='3b5c2208' name='vaf' filepath='drivers/gpu/drm/drm_print.c' line='138' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__drm_printfn_debug' mangled-name='__drm_printfn_debug' filepath='drivers/gpu/drm/drm_print.c' line='144' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_printfn_debug'>
+        <parameter type-id='7ac48c21' name='p' filepath='drivers/gpu/drm/drm_print.c' line='144' column='1'/>
+        <parameter type-id='3b5c2208' name='vaf' filepath='drivers/gpu/drm/drm_print.c' line='144' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_puts' mangled-name='drm_puts' filepath='drivers/gpu/drm/drm_print.c' line='158' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_puts'>
+        <parameter type-id='7ac48c21' name='p' filepath='drivers/gpu/drm/drm_print.c' line='158' column='1'/>
+        <parameter type-id='80f4b756' name='str' filepath='drivers/gpu/drm/drm_print.c' line='158' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_probe_helper.c' language='LANG_C89'>
+      <class-decl name='drm_file' is-struct='yes' visibility='default' is-declaration-only='yes' id='cc4a63b9'/>
+      <class-decl name='drm_minor' is-struct='yes' visibility='default' is-declaration-only='yes' id='d5cb77a8'/>
+      <class-decl name='drm_pending_vblank_event' is-struct='yes' visibility='default' is-declaration-only='yes' id='64249e24'/>
+      <class-decl name='drm_vblank_crtc' is-struct='yes' visibility='default' is-declaration-only='yes' id='e5ebb0e4'/>
+      <array-type-def dimensions='1' type-id='ebccef5f' size-in-bits='96' id='e6001147'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='d30cc3b8' size-in-bits='576' id='c93659c6'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0bb26f49' size-in-bits='96' id='0e1e8cdf'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0bb26f49' size-in-bits='128' id='521a7abd'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='104' id='097d53a4'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <class-decl name='edid' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='285' column='1' id='a7fa16d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='d2f7b56a' visibility='default' filepath='include/drm/drm_edid.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mfg_id' type-id='cf114704' visibility='default' filepath='include/drm/drm_edid.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='prod_code' type-id='cf114704' visibility='default' filepath='include/drm/drm_edid.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='serial' type-id='19c2251e' visibility='default' filepath='include/drm/drm_edid.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mfg_week' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='mfg_year' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='version' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='revision' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='input' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='width_cm' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='height_cm' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='gamma' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='features' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='red_green_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='black_white_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='red_x' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='red_y' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='232'>
+          <var-decl name='green_x' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='green_y' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='248'>
+          <var-decl name='blue_x' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='blue_y' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='white_x' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='white_y' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='280'>
+          <var-decl name='established_timings' type-id='93a90c7b' visibility='default' filepath='include/drm/drm_edid.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='standard_timings' type-id='521a7abd' visibility='default' filepath='include/drm/drm_edid.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='432'>
+          <var-decl name='detailed_timings' type-id='c93659c6' visibility='default' filepath='include/drm/drm_edid.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='extensions' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1016'>
+          <var-decl name='checksum' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='322' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='est_timings' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='44' column='1' id='93a90c7b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='t1' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='t2' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='mfg_rsvd' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='std_timing' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='58' column='1' id='0bb26f49'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hsize' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='vfreq_aspect' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='detailed_timing' size-in-bits='144' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='165' column='1' id='d30cc3b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pixel_clock' type-id='23119536' visibility='default' filepath='include/drm/drm_edid.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='data' type-id='74e410f1' visibility='default' filepath='include/drm/drm_edid.h' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='167' column='1' id='74e410f1'>
+        <data-member access='private'>
+          <var-decl name='pixel_data' type-id='42c5f701' visibility='default' filepath='include/drm/drm_edid.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='other_data' type-id='4191437e' visibility='default' filepath='include/drm/drm_edid.h' line='169' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='detailed_pixel_timing' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='70' column='1' id='42c5f701'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hactive_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='hblank_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='hactive_hblank_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='vactive_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vblank_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='vactive_vblank_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='hsync_offset_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='hsync_pulse_width_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vsync_offset_pulse_width_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='hsync_vsync_offset_pulse_width_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='width_mm_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='height_mm_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='width_height_mm_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='hborder' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='vborder' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='misc' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='detailed_non_pixel' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='140' column='1' id='4191437e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pad1' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='type' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='pad2' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='data' type-id='3b37e17e' visibility='default' filepath='include/drm/drm_edid.h' line='152' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='104' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='146' column='1' id='3b37e17e'>
+        <data-member access='private'>
+          <var-decl name='str' type-id='9839ad2e' visibility='default' filepath='include/drm/drm_edid.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='range' type-id='2d6065c1' visibility='default' filepath='include/drm/drm_edid.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='color' type-id='d35b6cc8' visibility='default' filepath='include/drm/drm_edid.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='timings' type-id='0e1e8cdf' visibility='default' filepath='include/drm/drm_edid.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='cvt' type-id='e6001147' visibility='default' filepath='include/drm/drm_edid.h' line='151' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='detailed_data_string' size-in-bits='104' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='90' column='1' id='9839ad2e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='str' type-id='097d53a4' visibility='default' filepath='include/drm/drm_edid.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='detailed_data_monitor_range' size-in-bits='104' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='94' column='1' id='2d6065c1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_vfreq' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='max_vfreq' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='min_hfreq_khz' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='max_hfreq_khz' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pixel_clock_mhz' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='formula' type-id='58741aa1' visibility='default' filepath='include/drm/drm_edid.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='56' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='101' column='1' id='58741aa1'>
+        <data-member access='private'>
+          <var-decl name='gtf2' type-id='3f6be67c' visibility='default' filepath='include/drm/drm_edid.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='cvt' type-id='c591dff3' visibility='default' filepath='include/drm/drm_edid.h' line='118' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='56' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='102' column='1' id='3f6be67c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reserved' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='hfreq_start_khz' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='c' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='m' type-id='23119536' visibility='default' filepath='include/drm/drm_edid.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='k' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='j' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='56' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='110' column='1' id='c591dff3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='data1' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='data2' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='supported_aspects' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='supported_scalings' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='preferred_refresh' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='detailed_data_wpindex' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='122' column='1' id='d35b6cc8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='white_yx_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='white_x_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='white_y_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='gamma' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='126' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cvt_timing' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='136' column='1' id='ebccef5f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='code' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_edid.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='a7fa16d9' const='yes' id='4af8a458'/>
+      <pointer-type-def type-id='4af8a458' size-in-bits='64' id='776adf76'/>
+      <pointer-type-def type-id='cc4a63b9' size-in-bits='64' id='9e99ecc1'/>
+      <pointer-type-def type-id='d5cb77a8' size-in-bits='64' id='6c3b3f8e'/>
+      <pointer-type-def type-id='64249e24' size-in-bits='64' id='6301fad2'/>
+      <pointer-type-def type-id='e5ebb0e4' size-in-bits='64' id='04d2f8d2'/>
+      <function-decl name='drm_kms_helper_poll_enable' mangled-name='drm_kms_helper_poll_enable' filepath='drivers/gpu/drm/drm_probe_helper.c' line='223' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_kms_helper_poll_enable'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_probe_helper.c' line='223' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_modeset_lock' mangled-name='drm_modeset_lock' filepath='include/drm/drm_modeset_lock.h' line='117' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_lock'>
+        <parameter type-id='b4b06bb8'/>
+        <parameter type-id='d1499e71'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_modeset_acquire_init' mangled-name='drm_modeset_acquire_init' filepath='include/drm/drm_modeset_lock.h' line='91' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_acquire_init'>
+        <parameter type-id='d1499e71'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_modeset_backoff' mangled-name='drm_modeset_backoff' filepath='include/drm/drm_modeset_lock.h' line='95' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_backoff'>
+        <parameter type-id='d1499e71'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_modeset_drop_locks' mangled-name='drm_modeset_drop_locks' filepath='include/drm/drm_modeset_lock.h' line='94' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_drop_locks'>
+        <parameter type-id='d1499e71'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_helper_probe_single_connector_modes' mangled-name='drm_helper_probe_single_connector_modes' filepath='drivers/gpu/drm/drm_probe_helper.c' line='388' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_helper_probe_single_connector_modes'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_probe_helper.c' line='388' column='1'/>
+        <parameter type-id='8f92235e' name='maxX' filepath='drivers/gpu/drm/drm_probe_helper.c' line='389' column='1'/>
+        <parameter type-id='8f92235e' name='maxY' filepath='drivers/gpu/drm/drm_probe_helper.c' line='389' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_connector_update_edid_property' mangled-name='drm_connector_update_edid_property' filepath='include/drm/drm_connector.h' line='1555' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_update_edid_property'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='776adf76'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_add_modes_noedid' mangled-name='drm_add_modes_noedid' filepath='include/drm/drm_edid.h' line='489' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_add_modes_noedid'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_mode_vrefresh' mangled-name='drm_mode_vrefresh' filepath='include/drm/drm_modes.h' line='504' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_vrefresh'>
+        <parameter type-id='745b39e8'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_mode_probed_add' mangled-name='drm_mode_probed_add' filepath='include/drm/drm_modes.h' line='471' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_probed_add'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='11e02f83'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mode_set_crtcinfo' mangled-name='drm_mode_set_crtcinfo' filepath='include/drm/drm_modes.h' line='508' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_set_crtcinfo'>
+        <parameter type-id='11e02f83'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_kms_helper_hotplug_event' mangled-name='drm_kms_helper_hotplug_event' filepath='drivers/gpu/drm/drm_probe_helper.c' line='565' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_kms_helper_hotplug_event'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_probe_helper.c' line='565' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_sysfs_hotplug_event' mangled-name='drm_sysfs_hotplug_event' filepath='include/drm/drm_sysfs.h' line='13' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_sysfs_hotplug_event'>
+        <parameter type-id='8898134d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_kms_helper_poll_disable' mangled-name='drm_kms_helper_poll_disable' filepath='drivers/gpu/drm/drm_probe_helper.c' line='700' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_kms_helper_poll_disable'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_probe_helper.c' line='700' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_kms_helper_poll_init' mangled-name='drm_kms_helper_poll_init' filepath='drivers/gpu/drm/drm_probe_helper.c' line='727' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_kms_helper_poll_init'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_probe_helper.c' line='727' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_kms_helper_poll_fini' mangled-name='drm_kms_helper_poll_fini' filepath='drivers/gpu/drm/drm_probe_helper.c' line='740' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_kms_helper_poll_fini'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_probe_helper.c' line='740' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_helper_hpd_irq_event' mangled-name='drm_helper_hpd_irq_event' filepath='drivers/gpu/drm/drm_probe_helper.c' line='773' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_helper_hpd_irq_event'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_probe_helper.c' line='773' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_property.c' language='LANG_C89'>
+      <function-decl name='drm_property_blob_get' mangled-name='drm_property_blob_get' filepath='drivers/gpu/drm/drm_property.c' line='637' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_property_blob_get'>
+        <parameter type-id='c4126d52' name='blob' filepath='drivers/gpu/drm/drm_property.c' line='637' column='1'/>
+        <return type-id='c4126d52'/>
+      </function-decl>
+      <function-decl name='drm_property_lookup_blob' mangled-name='drm_property_lookup_blob' filepath='drivers/gpu/drm/drm_property.c' line='656' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_property_lookup_blob'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_property.c' line='656' column='1'/>
+        <parameter type-id='8f92235e' name='id' filepath='drivers/gpu/drm/drm_property.c' line='657' column='1'/>
+        <return type-id='c4126d52'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_simple_kms_helper.c' language='LANG_C89'>
+      <pointer-type-def type-id='340461fe' size-in-bits='64' id='b6e600bc'/>
+      <function-decl name='drm_bridge_attach' mangled-name='drm_bridge_attach' filepath='include/drm/drm_bridge.h' line='406' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_bridge_attach'>
+        <parameter type-id='74d89ebd'/>
+        <parameter type-id='8582e5ec'/>
+        <parameter type-id='8582e5ec'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_universal_plane_init' mangled-name='drm_universal_plane_init' filepath='include/drm/drm_plane.h' line='713' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_universal_plane_init'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='a6711537'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='cfd5d066'/>
+        <parameter type-id='5b2fd8e8'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='b6e600bc'/>
+        <parameter type-id='5eed3c85'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_crtc_init_with_planes' mangled-name='drm_crtc_init_with_planes' filepath='include/drm/drm_crtc.h' line='1144' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_init_with_planes'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='a6711537'/>
+        <parameter type-id='a6711537'/>
+        <parameter type-id='7236c5c8'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_encoder_init' mangled-name='drm_encoder_init' filepath='include/drm/drm_encoder.h' line='183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_encoder_init'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='74d89ebd'/>
+        <parameter type-id='1701f1ac'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_connector_attach_encoder' mangled-name='drm_connector_attach_encoder' filepath='include/drm/drm_connector.h' line='1447' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_attach_encoder'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='74d89ebd'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_syncobj.c' language='LANG_C89'>
+      <class-decl name='sync_file' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/sync_file.h' line='35' column='1' id='b6352c99'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/sync_file.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='user_name' type-id='16dc656a' visibility='default' filepath='include/linux/sync_file.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sync_file_list' type-id='72f469ec' visibility='default' filepath='include/linux/sync_file.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='wq' type-id='b5ab048f' visibility='default' filepath='include/linux/sync_file.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/sync_file.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fence' type-id='28271da3' visibility='default' filepath='include/linux/sync_file.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='cb' type-id='54c5dd35' visibility='default' filepath='include/linux/sync_file.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b6352c99' size-in-bits='64' id='6a6b0b01'/>
+      <function-decl name='sync_file_create' mangled-name='sync_file_create' filepath='include/linux/sync_file.h' line='58' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sync_file_create'>
+        <parameter type-id='28271da3'/>
+        <return type-id='6a6b0b01'/>
+      </function-decl>
+      <function-decl name='sync_file_get_fence' mangled-name='sync_file_get_fence' filepath='include/linux/sync_file.h' line='59' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sync_file_get_fence'>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='28271da3'/>
+      </function-decl>
+      <function-decl name='dma_fence_add_callback' mangled-name='dma_fence_add_callback' filepath='include/linux/dma-fence.h' line='364' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_add_callback'>
+        <parameter type-id='28271da3'/>
+        <parameter type-id='a47516e5'/>
+        <parameter type-id='75d065d2'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_fence_remove_callback' mangled-name='dma_fence_remove_callback' filepath='include/linux/dma-fence.h' line='367' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_remove_callback'>
+        <parameter type-id='28271da3'/>
+        <parameter type-id='a47516e5'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <pointer-type-def type-id='54c5dd35' size-in-bits='64' id='a47516e5'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_sysfs.c' language='LANG_C89'>
+      <class-decl name='class_attribute' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='742' column='1' id='fc927268'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' visibility='default' filepath='include/linux/device.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='c4c01ce7' visibility='default' filepath='include/linux/device.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='dfcac4bb' visibility='default' filepath='include/linux/device.h' line='746' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='fc927268' size-in-bits='64' id='9cc1ac3e'/>
+      <qualified-type-def type-id='fc927268' const='yes' id='2bc6669b'/>
+      <pointer-type-def type-id='2bc6669b' size-in-bits='64' id='9a53a8a3'/>
+      <pointer-type-def type-id='32aa9d63' size-in-bits='64' id='c4c01ce7'/>
+      <pointer-type-def type-id='5243924f' size-in-bits='64' id='dfcac4bb'/>
+      <function-decl name='class_create_file_ns' mangled-name='class_create_file_ns' filepath='include/linux/device.h' line='757' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='class_create_file_ns'>
+        <parameter type-id='67aca04f'/>
+        <parameter type-id='9a53a8a3'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='class_remove_file_ns' mangled-name='class_remove_file_ns' filepath='include/linux/device.h' line='760' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='class_remove_file_ns'>
+        <parameter type-id='67aca04f'/>
+        <parameter type-id='9a53a8a3'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_class_device_register' mangled-name='drm_class_device_register' filepath='drivers/gpu/drm/drm_sysfs.c' line='427' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_class_device_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/gpu/drm/drm_sysfs.c' line='427' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_class_device_unregister' mangled-name='drm_class_device_unregister' filepath='drivers/gpu/drm/drm_sysfs.c' line='445' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_class_device_unregister'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/gpu/drm/drm_sysfs.c' line='445' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='32aa9d63'>
+        <parameter type-id='67aca04f'/>
+        <parameter type-id='9cc1ac3e'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5243924f'>
+        <parameter type-id='67aca04f'/>
+        <parameter type-id='9cc1ac3e'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_vblank.c' language='LANG_C89'>
+      <function-decl name='drm_vblank_init' mangled-name='drm_vblank_init' filepath='drivers/gpu/drm/drm_vblank.c' line='444' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_vblank_init'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_vblank.c' line='444' column='1'/>
+        <parameter type-id='f0981eeb' name='num_crtcs' filepath='drivers/gpu/drm/drm_vblank.c' line='444' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_calc_vbltimestamp_from_scanoutpos' mangled-name='drm_calc_vbltimestamp_from_scanoutpos' filepath='drivers/gpu/drm/drm_vblank.c' line='596' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_calc_vbltimestamp_from_scanoutpos'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_vblank.c' line='596' column='1'/>
+        <parameter type-id='f0981eeb' name='pipe' filepath='drivers/gpu/drm/drm_vblank.c' line='597' column='1'/>
+        <parameter type-id='7292109c' name='max_error' filepath='drivers/gpu/drm/drm_vblank.c' line='598' column='1'/>
+        <parameter type-id='44372936' name='vblank_time' filepath='drivers/gpu/drm/drm_vblank.c' line='599' column='1'/>
+        <parameter type-id='b50a4934' name='in_vblank_irq' filepath='drivers/gpu/drm/drm_vblank.c' line='600' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drm_crtc_arm_vblank_event' mangled-name='drm_crtc_arm_vblank_event' filepath='drivers/gpu/drm/drm_vblank.c' line='896' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_arm_vblank_event'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_vblank.c' line='896' column='1'/>
+        <parameter type-id='6301fad3' name='e' filepath='drivers/gpu/drm/drm_vblank.c' line='897' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_wait_one_vblank' mangled-name='drm_wait_one_vblank' filepath='drivers/gpu/drm/drm_vblank.c' line='1082' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_wait_one_vblank'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_vblank.c' line='1082' column='1'/>
+        <parameter type-id='f0981eeb' name='pipe' filepath='drivers/gpu/drm/drm_vblank.c' line='1082' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_crtc_vblank_off' mangled-name='drm_crtc_vblank_off' filepath='drivers/gpu/drm/drm_vblank.c' line='1132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_vblank_off'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_vblank.c' line='1132' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_crtc_vblank_reset' mangled-name='drm_crtc_vblank_reset' filepath='drivers/gpu/drm/drm_vblank.c' line='1202' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_vblank_reset'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_vblank.c' line='1202' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_crtc_set_max_vblank_count' mangled-name='drm_crtc_set_max_vblank_count' filepath='drivers/gpu/drm/drm_vblank.c' line='1241' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_set_max_vblank_count'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_vblank.c' line='1241' column='1'/>
+        <parameter type-id='19c2251e' name='max_vblank_count' filepath='drivers/gpu/drm/drm_vblank.c' line='1242' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_crtc_vblank_on' mangled-name='drm_crtc_vblank_on' filepath='drivers/gpu/drm/drm_vblank.c' line='1265' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_vblank_on'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_vblank.c' line='1265' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_handle_vblank' mangled-name='drm_handle_vblank' filepath='drivers/gpu/drm/drm_vblank.c' line='1747' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_handle_vblank'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_vblank.c' line='1747' column='1'/>
+        <parameter type-id='f0981eeb' name='pipe' filepath='drivers/gpu/drm/drm_vblank.c' line='1747' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drm_crtc_handle_vblank' mangled-name='drm_crtc_handle_vblank' filepath='drivers/gpu/drm/drm_vblank.c' line='1812' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_handle_vblank'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_vblank.c' line='1812' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/drm_vma_manager.c' language='LANG_C89'>
+      <function-decl name='drm_vma_offset_manager_destroy' mangled-name='drm_vma_offset_manager_destroy' filepath='drivers/gpu/drm/drm_vma_manager.c' line='104' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_vma_offset_manager_destroy'>
+        <parameter type-id='0c6d12d5' name='mgr' filepath='drivers/gpu/drm/drm_vma_manager.c' line='104' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/ttm/ttm_bo.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='3b3611a4' size-in-bits='512' id='e70a051a'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='ttm_lru_bulk_move' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='523' column='1' id='4f61d355'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tt' type-id='e70a051a' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='vram' type-id='e70a051a' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='swap' type-id='e70a051a' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='526' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_lru_bulk_move_pos' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='509' column='1' id='3b3611a4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='9d57e433' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last' type-id='9d57e433' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='511' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4f61d355' size-in-bits='64' id='92bac3a5'/>
+      <function-decl name='ttm_bo_init_mm' mangled-name='ttm_bo_init_mm' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1588' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_init_mm'>
+        <parameter type-id='723d4d79' name='bdev' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1588' column='1'/>
+        <parameter type-id='f0981eeb' name='type' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1588' column='1'/>
+        <parameter type-id='7359adad' name='p_size' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1589' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ttm_bo_add_to_lru' mangled-name='ttm_bo_add_to_lru' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='196' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_add_to_lru'>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='196' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ttm_bo_del_sub_from_lru' mangled-name='ttm_bo_del_sub_from_lru' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='227' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_del_sub_from_lru'>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='227' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ttm_bo_move_to_lru_tail' mangled-name='ttm_bo_move_to_lru_tail' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='245' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_move_to_lru_tail'>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='245' column='1'/>
+        <parameter type-id='92bac3a5' name='bulk' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='246' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ttm_bo_put' mangled-name='ttm_bo_put' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='689' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_put'>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='689' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_resv_copy_fences' mangled-name='dma_resv_copy_fences' filepath='include/linux/dma-resv.h' line='288' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_resv_copy_fences'>
+        <parameter type-id='340cea9c'/>
+        <parameter type-id='340cea9c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_resv_test_signaled_rcu' mangled-name='dma_resv_test_signaled_rcu' filepath='include/linux/dma-resv.h' line='293' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_resv_test_signaled_rcu'>
+        <parameter type-id='340cea9c'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='dma_fence_enable_sw_signaling' mangled-name='dma_fence_enable_sw_signaling' filepath='include/linux/dma-fence.h' line='369' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_enable_sw_signaling'>
+        <parameter type-id='28271da3'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ttm_bo_eviction_valuable' mangled-name='ttm_bo_eviction_valuable' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='758' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_eviction_valuable'>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='758' column='1'/>
+        <parameter type-id='2e6aa127' name='place' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='759' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='dma_resv_reserve_shared' mangled-name='dma_resv_reserve_shared' filepath='include/linux/dma-resv.h' line='278' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_resv_reserve_shared'>
+        <parameter type-id='340cea9c'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_resv_add_shared_fence' mangled-name='dma_resv_add_shared_fence' filepath='include/linux/dma-resv.h' line='279' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_resv_add_shared_fence'>
+        <parameter type-id='340cea9c'/>
+        <parameter type-id='28271da3'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ttm_bo_validate' mangled-name='ttm_bo_validate' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1254' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_validate'>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1254' column='1'/>
+        <parameter type-id='1d36520e' name='placement' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1255' column='1'/>
+        <parameter type-id='7c3e509a' name='ctx' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1256' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ttm_bo_init' mangled-name='ttm_bo_init' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1404' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_init'>
+        <parameter type-id='723d4d79' name='bdev' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1404' column='1'/>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1405' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1406' column='1'/>
+        <parameter type-id='db1f3944' name='type' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1407' column='1'/>
+        <parameter type-id='1d36520e' name='placement' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1408' column='1'/>
+        <parameter type-id='8f92235e' name='page_alignment' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1409' column='1'/>
+        <parameter type-id='b50a4934' name='interruptible' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1410' column='1'/>
+        <parameter type-id='b59d7dce' name='acc_size' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1411' column='1'/>
+        <parameter type-id='4adb0e6a' name='sg' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1412' column='1'/>
+        <parameter type-id='340cea9c' name='resv' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1413' column='1'/>
+        <parameter type-id='7c7fffd6' name='destroy' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1414' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ttm_bo_dma_acc_size' mangled-name='ttm_bo_dma_acc_size' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1446' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_dma_acc_size'>
+        <parameter type-id='723d4d79' name='bdev' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1446' column='1'/>
+        <parameter type-id='7359adad' name='bo_size' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1447' column='1'/>
+        <parameter type-id='f0981eeb' name='struct_size' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1448' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='ttm_bo_device_release' mangled-name='ttm_bo_device_release' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1688' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_device_release'>
+        <parameter type-id='723d4d79' name='bdev' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1688' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ttm_bo_device_init' mangled-name='ttm_bo_device_init' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1732' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_device_init'>
+        <parameter type-id='723d4d79' name='bdev' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1732' column='1'/>
+        <parameter type-id='0975b661' name='driver' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1733' column='1'/>
+        <parameter type-id='f57039f0' name='mapping' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1734' column='1'/>
+        <parameter type-id='b50a4934' name='need_dma32' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1735' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ttm_bo_wait' mangled-name='ttm_bo_wait' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1817' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_wait'>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1817' column='1'/>
+        <parameter type-id='b50a4934' name='interruptible' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1818' column='1'/>
+        <parameter type-id='b50a4934' name='no_wait' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1818' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_resv_add_excl_fence' mangled-name='dma_resv_add_excl_fence' filepath='include/linux/dma-resv.h' line='281' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_resv_add_excl_fence'>
+        <parameter type-id='340cea9c'/>
+        <parameter type-id='28271da3'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='b421eeb7' size-in-bits='64' id='2e6aa127'/>
+      <enum-decl name='ttm_bo_type' filepath='include/drm/ttm/ttm_bo_api.h' line='120' column='1' id='db1f3944'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ttm_bo_type_device' value='0'/>
+        <enumerator name='ttm_bo_type_kernel' value='1'/>
+        <enumerator name='ttm_bo_type_sg' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='0448ebb1' size-in-bits='64' id='723d4d79'/>
+      <pointer-type-def type-id='0abbafb9' size-in-bits='64' id='0975b661'/>
+      <pointer-type-def type-id='46b5bb33' size-in-bits='64' id='9d57e433'/>
+      <pointer-type-def type-id='98f70d4c' size-in-bits='64' id='7c3e509a'/>
+      <pointer-type-def type-id='523f50f8' size-in-bits='64' id='1d36520e'/>
+      <pointer-type-def type-id='4a1729fc' size-in-bits='64' id='7c7fffd6'/>
+      <qualified-type-def type-id='3f4ad3b4' const='yes' id='b421eeb7'/>
+      <class-decl name='ttm_bo_device' size-in-bits='15296' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='464' column='1' id='0448ebb1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='device_list' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='glob' type-id='567f9176' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver' type-id='0975b661' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='man' type-id='9ca36087' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='vma_manager' type-id='1b04dce5' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13952'>
+          <var-decl name='ddestroy' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14080'>
+          <var-decl name='dev_mapping' type-id='f57039f0' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14144'>
+          <var-decl name='wq' type-id='5ad6e0ef' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15232'>
+          <var-decl name='need_dma32' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15240'>
+          <var-decl name='no_retry' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='498' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_bo_driver' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='223' column='1' id='0abbafb9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ttm_tt_create' type-id='450f3d4f' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ttm_tt_populate' type-id='d2c32f54' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ttm_tt_unpopulate' type-id='ec1424fc' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='invalidate_caches' type-id='2ba41982' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='init_mem_type' type-id='b63cf0a8' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='eviction_valuable' type-id='67ac9797' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='evict_flags' type-id='c8e0f54d' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='move' type-id='152cf9e7' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='verify_access' type-id='3630f867' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='move_notify' type-id='e8cfc5c5' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fault_reserve_notify' type-id='9303745f' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='swap_notify' type-id='7c7fffd6' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='io_mem_reserve' type-id='08ab1f27' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='io_mem_free' type-id='2f557b66' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='io_mem_pfn' type-id='7758a804' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='access_memory' type-id='cd386183' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='del_from_lru_notify' type-id='7c7fffd6' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='release_notify' type-id='7c7fffd6' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='402' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_buffer_object' size-in-bits='4928' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='172' column='1' id='46b5bb33'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='3bc524c1' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='bdev' type-id='723d4d79' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='type' type-id='db1f3944' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='destroy' type-id='7c7fffd6' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='num_pages' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='acc_size' type-id='b59d7dce' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='list_kref' type-id='400fb07b' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='mem' type-id='9b9a6957' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='persistent_swap_storage' type-id='77e79a4b' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='ttm' type-id='c21baddd' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='evicted' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3872'>
+          <var-decl name='cpu_writers' type-id='49178f86' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='lru' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='ddestroy' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='swap' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='io_reserve_lru' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='moving' type-id='28271da3' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='priority' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='offset' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='sg' type-id='4adb0e6a' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='wu_mutex' type-id='925167dc' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='233' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_operation_ctx' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='273' column='1' id='98f70d4c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='interruptible' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='no_wait_gpu' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='resv' type-id='340cea9c' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bytes_moved' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='278' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_placement' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='101' column='1' id='523f50f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_placement' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='placement' type-id='2e6aa127' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_busy_placement' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='busy_placement' type-id='2e6aa127' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='8bc09183' size-in-bits='64' id='08ab1f27'/>
+      <pointer-type-def type-id='0120f518' size-in-bits='64' id='2ba41982'/>
+      <pointer-type-def type-id='4f2315a6' size-in-bits='64' id='b63cf0a8'/>
+      <pointer-type-def type-id='4b442d83' size-in-bits='64' id='9303745f'/>
+      <pointer-type-def type-id='d2389b23' size-in-bits='64' id='3630f867'/>
+      <pointer-type-def type-id='16cbb69b' size-in-bits='64' id='152cf9e7'/>
+      <pointer-type-def type-id='c66ae1d7' size-in-bits='64' id='cd386183'/>
+      <pointer-type-def type-id='531d31a2' size-in-bits='64' id='d2c32f54'/>
+      <class-decl name='ttm_mem_reg' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='95' column='1' id='9b9a6957'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mm_node' type-id='eaa32e2f' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='start' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_pages' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='page_alignment' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='mem_type' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='placement' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bus' type-id='e93aa2cd' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_place' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='85' column='1' id='3f4ad3b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fpfn' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lpfn' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='92115120' size-in-bits='64' id='567f9176'/>
+      <array-type-def dimensions='1' type-id='992de32b' size-in-bits='11776' id='9ca36087'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <pointer-type-def type-id='57584f2d' size-in-bits='64' id='c21baddd'/>
+      <pointer-type-def type-id='b8713c6b' size-in-bits='64' id='450f3d4f'/>
+      <pointer-type-def type-id='1de2f9c3' size-in-bits='64' id='67ac9797'/>
+      <pointer-type-def type-id='77d04d5a' size-in-bits='64' id='7758a804'/>
+      <pointer-type-def type-id='e6848ac4' size-in-bits='64' id='2f557b66'/>
+      <pointer-type-def type-id='403b94d1' size-in-bits='64' id='c8e0f54d'/>
+      <pointer-type-def type-id='622dc421' size-in-bits='64' id='e8cfc5c5'/>
+      <pointer-type-def type-id='419979fa' size-in-bits='64' id='ec1424fc'/>
+      <class-decl name='ttm_bo_global' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='419' column='1' id='92115120'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mem_glob' type-id='328b60d6' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dummy_read_page' type-id='02f11ed4' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='lru_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='device_list' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='swap_lru' type-id='a8e1fb22' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='bo_count' type-id='49178f86' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='443' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_bus_placement' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='70' column='1' id='e93aa2cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='eaa32e2f' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='base' type-id='2522883d' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='offset' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='is_iomem' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='io_reserved_vm' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='io_reserved_count' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_mem_type_manager' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='170' column='1' id='992de32b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bdev' type-id='723d4d79' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='has_type' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='use_type' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gpu_offset' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='available_caching' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='default_caching' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='func' type-id='0b05c1b5' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_reserve_mutex' type-id='925167dc' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='use_io_reserve_lru' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='712'>
+          <var-decl name='io_reserve_fastpath' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='move_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='io_reserve_lru' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='lru' type-id='a8e1fb22' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='move' type-id='28271da3' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='206' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_tt' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='105' column='1' id='57584f2d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bdev' type-id='723d4d79' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='aab7fd14' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pages' type-id='9f93c9da' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='page_flags' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_pages' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sg' type-id='4adb0e6a' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='swap_storage' type-id='77e79a4b' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='caching_state' type-id='06293a2b' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='state' type-id='08f5ca19' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b73c5cbd' size-in-bits='64' id='0b05c1b5'/>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/drm/ttm/ttm_tt.h' line='114' column='1' id='08f5ca19'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='tt_bound' value='0'/>
+        <enumerator name='tt_unbound' value='1'/>
+        <enumerator name='tt_unpopulated' value='2'/>
+      </enum-decl>
+      <enum-decl name='ttm_caching_state' filepath='include/drm/ttm/ttm_tt.h' line='45' column='1' id='06293a2b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='tt_uncached' value='0'/>
+        <enumerator name='tt_wc' value='1'/>
+        <enumerator name='tt_cached' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='5b7e0fbe' size-in-bits='64' id='aab7fd14'/>
+      <pointer-type-def type-id='a5c68aa0' size-in-bits='64' id='328b60d6'/>
+      <qualified-type-def type-id='6ea0ba9a' const='yes' id='b73c5cbd'/>
+      <class-decl name='ttm_backend_func' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='51' column='1' id='5b7e0fbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bind' type-id='7e38d909' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unbind' type-id='1b1e5363' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destroy' type-id='ec1424fc' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_mem_global' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='66' column='1' id='a5c68aa0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bo_glob' type-id='567f9176' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='swap_queue' type-id='242e3d19' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='lower_mem_limit' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='zones' type-id='34da8f73' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='num_zones' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='zone_kernel' type-id='9c074ad9' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='zone_dma32' type-id='9c074ad9' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3e65a527' size-in-bits='64' id='1b1e5363'/>
+      <pointer-type-def type-id='06991f7d' size-in-bits='64' id='7e38d909'/>
+      <class-decl name='ttm_mem_type_manager_func' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='54' column='1' id='6ea0ba9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init' type-id='41c90967' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='takedown' type-id='68c938a9' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_node' type-id='328b0a2f' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='put_node' type-id='dd5560fc' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='debug' type-id='2c38adba' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='134' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='0c6d1911' size-in-bits='64' id='9c074ad9'/>
+      <array-type-def dimensions='1' type-id='9c074ad9' size-in-bits='128' id='34da8f73'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='34ff06bd' size-in-bits='64' id='68c938a9'/>
+      <pointer-type-def type-id='d8d0a883' size-in-bits='64' id='328b0a2f'/>
+      <pointer-type-def type-id='06bec4db' size-in-bits='64' id='41c90967'/>
+      <class-decl name='ttm_mem_zone' is-struct='yes' visibility='default' is-declaration-only='yes' id='0c6d1911'/>
+      <pointer-type-def type-id='589a9770' size-in-bits='64' id='2c38adba'/>
+      <pointer-type-def type-id='94cecf4a' size-in-bits='64' id='dd5560fc'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/ttm/ttm_bo_manager.c' language='LANG_C89'>
+      <var-decl name='ttm_bo_manager_func' type-id='b73c5cbd' mangled-name='ttm_bo_manager_func' visibility='default' filepath='drivers/gpu/drm/ttm/ttm_bo_manager.c' line='149' column='1' elf-symbol-id='ttm_bo_manager_func'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/ttm/ttm_bo_util.c' language='LANG_C89'>
+      <class-decl name='ttm_bo_kmap_obj' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='250' column='1' id='6f724070'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='virtual' type-id='eaa32e2f' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='page' type-id='02f11ed4' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bo_kmap_type' type-id='08f5ca1a' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bo' type-id='9d57e433' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='259' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/drm/ttm/ttm_bo_api.h' line='253' column='1' id='08f5ca1a'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ttm_bo_map_iomap' value='129'/>
+        <enumerator name='ttm_bo_map_vmap' value='2'/>
+        <enumerator name='ttm_bo_map_kmap' value='3'/>
+        <enumerator name='ttm_bo_map_premapped' value='132'/>
+      </enum-decl>
+      <pointer-type-def type-id='6f724070' size-in-bits='64' id='cc6dfde6'/>
+      <function-decl name='ttm_bo_kmap' mangled-name='ttm_bo_kmap' filepath='drivers/gpu/drm/ttm/ttm_bo_util.c' line='619' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_kmap'>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_bo_util.c' line='619' column='1'/>
+        <parameter type-id='7359adad' name='start_page' filepath='drivers/gpu/drm/ttm/ttm_bo_util.c' line='620' column='1'/>
+        <parameter type-id='7359adad' name='num_pages' filepath='drivers/gpu/drm/ttm/ttm_bo_util.c' line='620' column='1'/>
+        <parameter type-id='cc6dfde6' name='map' filepath='drivers/gpu/drm/ttm/ttm_bo_util.c' line='621' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ttm_bo_kunmap' mangled-name='ttm_bo_kunmap' filepath='drivers/gpu/drm/ttm/ttm_bo_util.c' line='650' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_kunmap'>
+        <parameter type-id='cc6dfde6' name='map' filepath='drivers/gpu/drm/ttm/ttm_bo_util.c' line='650' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/ttm/ttm_bo_vm.c' language='LANG_C89'>
+      <function-decl name='ttm_bo_mmap' mangled-name='ttm_bo_mmap' filepath='drivers/gpu/drm/ttm/ttm_bo_vm.c' line='435' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_mmap'>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/gpu/drm/ttm/ttm_bo_vm.c' line='435' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/gpu/drm/ttm/ttm_bo_vm.c' line='435' column='1'/>
+        <parameter type-id='723d4d79' name='bdev' filepath='drivers/gpu/drm/ttm/ttm_bo_vm.c' line='436' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/ttm/ttm_execbuf_util.c' language='LANG_C89'>
+      <function-decl name='ttm_eu_backoff_reservation' mangled-name='ttm_eu_backoff_reservation' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_eu_backoff_reservation'>
+        <parameter type-id='c1d02a64' name='ticket' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='56' column='1'/>
+        <parameter type-id='e84b031a' name='list' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='57' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ttm_eu_reserve_buffers' mangled-name='ttm_eu_reserve_buffers' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='95' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_eu_reserve_buffers'>
+        <parameter type-id='c1d02a64' name='ticket' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='95' column='1'/>
+        <parameter type-id='e84b031a' name='list' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='96' column='1'/>
+        <parameter type-id='b50a4934' name='intr' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='96' column='1'/>
+        <parameter type-id='e84b031a' name='dups' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='97' column='1'/>
+        <parameter type-id='b50a4934' name='del_lru' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='97' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ttm_eu_fence_buffer_objects' mangled-name='ttm_eu_fence_buffer_objects' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='185' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_eu_fence_buffer_objects'>
+        <parameter type-id='c1d02a64' name='ticket' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='185' column='1'/>
+        <parameter type-id='e84b031a' name='list' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='186' column='1'/>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='187' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/drm/ttm/ttm_tt.c' language='LANG_C89'>
+      <class-decl name='ttm_mem_zone' is-struct='yes' visibility='default' is-declaration-only='yes' id='0c6d1911'/>
+      <array-type-def dimensions='1' type-id='992de32b' size-in-bits='11776' id='9ca36087'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='9c074ad9' size-in-bits='128' id='34da8f73'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='ttm_tt' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='105' column='1' id='57584f2d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bdev' type-id='723d4d79' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='aab7fd14' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pages' type-id='9f93c9da' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='page_flags' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_pages' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sg' type-id='4adb0e6a' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='swap_storage' type-id='77e79a4b' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='caching_state' type-id='06293a2b' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='state' type-id='08f5ca19' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_bo_device' size-in-bits='15296' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='464' column='1' id='0448ebb1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='device_list' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='glob' type-id='567f9176' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver' type-id='0975b661' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='man' type-id='9ca36087' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='vma_manager' type-id='1b04dce5' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13952'>
+          <var-decl name='ddestroy' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14080'>
+          <var-decl name='dev_mapping' type-id='f57039f0' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14144'>
+          <var-decl name='wq' type-id='5ad6e0ef' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15232'>
+          <var-decl name='need_dma32' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15240'>
+          <var-decl name='no_retry' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='498' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_bo_global' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='419' column='1' id='92115120'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mem_glob' type-id='328b60d6' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dummy_read_page' type-id='02f11ed4' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='lru_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='device_list' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='swap_lru' type-id='a8e1fb22' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='bo_count' type-id='49178f86' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='443' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_mem_global' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='66' column='1' id='a5c68aa0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bo_glob' type-id='567f9176' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='swap_queue' type-id='242e3d19' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='lower_mem_limit' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='zones' type-id='34da8f73' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='num_zones' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='zone_kernel' type-id='9c074ad9' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='zone_dma32' type-id='9c074ad9' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_bo_driver' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='223' column='1' id='0abbafb9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ttm_tt_create' type-id='450f3d4f' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ttm_tt_populate' type-id='d2c32f54' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ttm_tt_unpopulate' type-id='ec1424fc' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='invalidate_caches' type-id='2ba41982' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='init_mem_type' type-id='b63cf0a8' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='eviction_valuable' type-id='67ac9797' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='evict_flags' type-id='c8e0f54d' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='move' type-id='152cf9e7' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='verify_access' type-id='3630f867' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='move_notify' type-id='e8cfc5c5' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fault_reserve_notify' type-id='9303745f' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='swap_notify' type-id='7c7fffd6' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='io_mem_reserve' type-id='08ab1f27' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='io_mem_free' type-id='2f557b66' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='io_mem_pfn' type-id='7758a804' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='access_memory' type-id='cd386183' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='del_from_lru_notify' type-id='7c7fffd6' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='release_notify' type-id='7c7fffd6' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='402' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_buffer_object' size-in-bits='4928' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='172' column='1' id='46b5bb33'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='3bc524c1' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='bdev' type-id='723d4d79' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='type' type-id='db1f3944' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='destroy' type-id='7c7fffd6' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='num_pages' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='acc_size' type-id='b59d7dce' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='list_kref' type-id='400fb07b' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='mem' type-id='9b9a6957' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='persistent_swap_storage' type-id='77e79a4b' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='ttm' type-id='c21baddd' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='evicted' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3872'>
+          <var-decl name='cpu_writers' type-id='49178f86' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='lru' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='ddestroy' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='swap' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='io_reserve_lru' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='moving' type-id='28271da3' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='priority' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='offset' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='sg' type-id='4adb0e6a' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='wu_mutex' type-id='925167dc' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='233' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ttm_bo_type' filepath='include/drm/ttm/ttm_bo_api.h' line='120' column='1' id='db1f3944'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ttm_bo_type_device' value='0'/>
+        <enumerator name='ttm_bo_type_kernel' value='1'/>
+        <enumerator name='ttm_bo_type_sg' value='2'/>
+      </enum-decl>
+      <class-decl name='ttm_mem_reg' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='95' column='1' id='9b9a6957'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mm_node' type-id='eaa32e2f' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='start' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_pages' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='page_alignment' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='mem_type' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='placement' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bus' type-id='e93aa2cd' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_bus_placement' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='70' column='1' id='e93aa2cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='eaa32e2f' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='base' type-id='2522883d' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='offset' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='is_iomem' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='io_reserved_vm' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='io_reserved_count' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_operation_ctx' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='273' column='1' id='98f70d4c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='interruptible' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='no_wait_gpu' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='resv' type-id='340cea9c' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bytes_moved' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='278' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_mem_type_manager' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='170' column='1' id='992de32b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bdev' type-id='723d4d79' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='has_type' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='use_type' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gpu_offset' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='available_caching' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='default_caching' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='func' type-id='0b05c1b5' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_reserve_mutex' type-id='925167dc' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='use_io_reserve_lru' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='712'>
+          <var-decl name='io_reserve_fastpath' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='move_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='io_reserve_lru' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='lru' type-id='a8e1fb22' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='move' type-id='28271da3' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='206' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_mem_type_manager_func' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='54' column='1' id='6ea0ba9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init' type-id='41c90967' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='takedown' type-id='68c938a9' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_node' type-id='328b0a2f' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='put_node' type-id='dd5560fc' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='debug' type-id='2c38adba' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='134' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_place' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='85' column='1' id='3f4ad3b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fpfn' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lpfn' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_placement' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='101' column='1' id='523f50f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_placement' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='placement' type-id='2e6aa127' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_busy_placement' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='busy_placement' type-id='2e6aa127' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_backend_func' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='51' column='1' id='5b7e0fbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bind' type-id='7e38d909' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unbind' type-id='1b1e5363' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destroy' type-id='ec1424fc' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ttm_caching_state' filepath='include/drm/ttm/ttm_tt.h' line='45' column='1' id='06293a2b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='tt_uncached' value='0'/>
+        <enumerator name='tt_wc' value='1'/>
+        <enumerator name='tt_cached' value='2'/>
+      </enum-decl>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/drm/ttm/ttm_tt.h' line='114' column='1' id='08f5ca19'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='tt_bound' value='0'/>
+        <enumerator name='tt_unbound' value='1'/>
+        <enumerator name='tt_unpopulated' value='2'/>
+      </enum-decl>
+      <class-decl name='ttm_dma_tt' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='132' column='1' id='a5c79252'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ttm' type-id='57584f2d' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dma_address' type-id='e835b5d8' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pages_list' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='135' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='6ea0ba9a' const='yes' id='b73c5cbd'/>
+      <pointer-type-def type-id='b73c5cbd' size-in-bits='64' id='0b05c1b5'/>
+      <qualified-type-def type-id='3f4ad3b4' const='yes' id='b421eeb7'/>
+      <pointer-type-def type-id='b421eeb7' size-in-bits='64' id='2e6aa127'/>
+      <pointer-type-def type-id='8bc09183' size-in-bits='64' id='08ab1f27'/>
+      <pointer-type-def type-id='0120f518' size-in-bits='64' id='2ba41982'/>
+      <pointer-type-def type-id='4f2315a6' size-in-bits='64' id='b63cf0a8'/>
+      <pointer-type-def type-id='4b442d83' size-in-bits='64' id='9303745f'/>
+      <pointer-type-def type-id='d2389b23' size-in-bits='64' id='3630f867'/>
+      <pointer-type-def type-id='16cbb69b' size-in-bits='64' id='152cf9e7'/>
+      <pointer-type-def type-id='c66ae1d7' size-in-bits='64' id='cd386183'/>
+      <pointer-type-def type-id='34ff06bd' size-in-bits='64' id='68c938a9'/>
+      <pointer-type-def type-id='d8d0a883' size-in-bits='64' id='328b0a2f'/>
+      <pointer-type-def type-id='06bec4db' size-in-bits='64' id='41c90967'/>
+      <pointer-type-def type-id='3e65a527' size-in-bits='64' id='1b1e5363'/>
+      <pointer-type-def type-id='06991f7d' size-in-bits='64' id='7e38d909'/>
+      <pointer-type-def type-id='531d31a2' size-in-bits='64' id='d2c32f54'/>
+      <pointer-type-def type-id='5b7e0fbe' size-in-bits='64' id='aab7fd14'/>
+      <pointer-type-def type-id='0448ebb1' size-in-bits='64' id='723d4d79'/>
+      <pointer-type-def type-id='0abbafb9' size-in-bits='64' id='0975b661'/>
+      <pointer-type-def type-id='92115120' size-in-bits='64' id='567f9176'/>
+      <pointer-type-def type-id='46b5bb33' size-in-bits='64' id='9d57e433'/>
+      <pointer-type-def type-id='a5c79252' size-in-bits='64' id='6621f500'/>
+      <pointer-type-def type-id='a5c68aa0' size-in-bits='64' id='328b60d6'/>
+      <pointer-type-def type-id='9b9a6957' size-in-bits='64' id='0c498ebf'/>
+      <pointer-type-def type-id='992de32b' size-in-bits='64' id='8120587b'/>
+      <pointer-type-def type-id='0c6d1911' size-in-bits='64' id='9c074ad9'/>
+      <pointer-type-def type-id='98f70d4c' size-in-bits='64' id='7c3e509a'/>
+      <pointer-type-def type-id='523f50f8' size-in-bits='64' id='1d36520e'/>
+      <pointer-type-def type-id='57584f2d' size-in-bits='64' id='c21baddd'/>
+      <pointer-type-def type-id='b8713c6b' size-in-bits='64' id='450f3d4f'/>
+      <pointer-type-def type-id='1de2f9c3' size-in-bits='64' id='67ac9797'/>
+      <pointer-type-def type-id='77d04d5a' size-in-bits='64' id='7758a804'/>
+      <pointer-type-def type-id='e6848ac4' size-in-bits='64' id='2f557b66'/>
+      <pointer-type-def type-id='4a1729fc' size-in-bits='64' id='7c7fffd6'/>
+      <pointer-type-def type-id='403b94d1' size-in-bits='64' id='c8e0f54d'/>
+      <pointer-type-def type-id='622dc421' size-in-bits='64' id='e8cfc5c5'/>
+      <pointer-type-def type-id='589a9770' size-in-bits='64' id='2c38adba'/>
+      <pointer-type-def type-id='94cecf4a' size-in-bits='64' id='dd5560fc'/>
+      <pointer-type-def type-id='419979fa' size-in-bits='64' id='ec1424fc'/>
+      <function-decl name='ttm_tt_init' mangled-name='ttm_tt_init' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='238' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_tt_init'>
+        <parameter type-id='c21baddd' name='ttm' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='238' column='1'/>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='238' column='1'/>
+        <parameter type-id='8f92235e' name='page_flags' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='239' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ttm_dma_tt_init' mangled-name='ttm_dma_tt_init' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='258' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_dma_tt_init'>
+        <parameter type-id='6621f500' name='ttm_dma' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='258' column='1'/>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='258' column='1'/>
+        <parameter type-id='8f92235e' name='page_flags' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='259' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ttm_dma_tt_fini' mangled-name='ttm_dma_tt_fini' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='295' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_dma_tt_fini'>
+        <parameter type-id='6621f500' name='ttm_dma' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='295' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='8bc09183'>
+        <parameter type-id='723d4d79'/>
+        <parameter type-id='0c498ebf'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0120f518'>
+        <parameter type-id='723d4d79'/>
+        <parameter type-id='8f92235e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f2315a6'>
+        <parameter type-id='723d4d79'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8120587b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4b442d83'>
+        <parameter type-id='9d57e433'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d2389b23'>
+        <parameter type-id='9d57e433'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='16cbb69b'>
+        <parameter type-id='9d57e433'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='7c3e509a'/>
+        <parameter type-id='0c498ebf'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c66ae1d7'>
+        <parameter type-id='9d57e433'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34ff06bd'>
+        <parameter type-id='8120587b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d8d0a883'>
+        <parameter type-id='8120587b'/>
+        <parameter type-id='9d57e433'/>
+        <parameter type-id='2e6aa127'/>
+        <parameter type-id='0c498ebf'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06bec4db'>
+        <parameter type-id='8120587b'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3e65a527'>
+        <parameter type-id='c21baddd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06991f7d'>
+        <parameter type-id='c21baddd'/>
+        <parameter type-id='0c498ebf'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='531d31a2'>
+        <parameter type-id='c21baddd'/>
+        <parameter type-id='7c3e509a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b8713c6b'>
+        <parameter type-id='9d57e433'/>
+        <parameter type-id='8f92235e'/>
+        <return type-id='c21baddd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1de2f9c3'>
+        <parameter type-id='9d57e433'/>
+        <parameter type-id='2e6aa127'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='77d04d5a'>
+        <parameter type-id='9d57e433'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e6848ac4'>
+        <parameter type-id='723d4d79'/>
+        <parameter type-id='0c498ebf'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4a1729fc'>
+        <parameter type-id='9d57e433'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='403b94d1'>
+        <parameter type-id='9d57e433'/>
+        <parameter type-id='1d36520e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='622dc421'>
+        <parameter type-id='9d57e433'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='0c498ebf'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='589a9770'>
+        <parameter type-id='8120587b'/>
+        <parameter type-id='7ac48c21'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='94cecf4a'>
+        <parameter type-id='8120587b'/>
+        <parameter type-id='0c498ebf'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='419979fa'>
+        <parameter type-id='c21baddd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/gpu/trace/trace_gpu_mem.c' language='LANG_C89'>
+      <var-decl name='__tracepoint_gpu_mem_total' type-id='4ca0c298' mangled-name='__tracepoint_gpu_mem_total' visibility='default' filepath='include/trace/events/gpu_mem.h' line='30' column='1' elf-symbol-id='__tracepoint_gpu_mem_total'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/hid/hid-lg.c' language='LANG_C89'>
+      <function-decl name='schedule_timeout' mangled-name='schedule_timeout' filepath='include/linux/sched.h' line='221' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='schedule_timeout'>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/hid/hid-logitech-dj.c' language='LANG_C89'>
+      <class-decl name='semaphore' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/semaphore.h' line='15' column='1' id='011244e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/semaphore.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/linux/semaphore.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_list' type-id='72f469ec' visibility='default' filepath='include/linux/semaphore.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='011244e5' size-in-bits='64' id='a965a5b5'/>
+      <function-decl name='up' mangled-name='up' filepath='include/linux/semaphore.h' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='up'>
+        <parameter type-id='a965a5b5'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/hid/hid-logitech-hidpp.c' language='LANG_C89'>
+      <class-decl name='thermal_zone_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='82084f52'/>
+      <class-decl name='power_supply' size-in-bits='10176' is-struct='yes' visibility='default' filepath='include/linux/power_supply.h' line='278' column='1' id='98749268'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='cb9cd99f' visibility='default' filepath='include/linux/power_supply.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supplied_to' type-id='9b23c9ad' visibility='default' filepath='include/linux/power_supply.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_supplicants' type-id='b59d7dce' visibility='default' filepath='include/linux/power_supply.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='supplied_from' type-id='9b23c9ad' visibility='default' filepath='include/linux/power_supply.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_supplies' type-id='b59d7dce' visibility='default' filepath='include/linux/power_supply.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_node' type-id='9a537bbf' visibility='default' filepath='include/linux/power_supply.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='drv_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/power_supply.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/power_supply.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='changed_work' type-id='ef9025d0' visibility='default' filepath='include/linux/power_supply.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='deferred_register_work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/power_supply.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='changed_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/power_supply.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9312'>
+          <var-decl name='changed' type-id='b50a4934' visibility='default' filepath='include/linux/power_supply.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9320'>
+          <var-decl name='initialized' type-id='b50a4934' visibility='default' filepath='include/linux/power_supply.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9328'>
+          <var-decl name='removing' type-id='b50a4934' visibility='default' filepath='include/linux/power_supply.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='use_cnt' type-id='49178f86' visibility='default' filepath='include/linux/power_supply.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='tzd' type-id='404b1300' visibility='default' filepath='include/linux/power_supply.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='tcd' type-id='2feec220' visibility='default' filepath='include/linux/power_supply.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='charging_full_trig' type-id='db6d90a1' visibility='default' filepath='include/linux/power_supply.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='charging_full_trig_name' type-id='26a90f95' visibility='default' filepath='include/linux/power_supply.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='charging_trig' type-id='db6d90a1' visibility='default' filepath='include/linux/power_supply.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='charging_trig_name' type-id='26a90f95' visibility='default' filepath='include/linux/power_supply.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='full_trig' type-id='db6d90a1' visibility='default' filepath='include/linux/power_supply.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='full_trig_name' type-id='26a90f95' visibility='default' filepath='include/linux/power_supply.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='online_trig' type-id='db6d90a1' visibility='default' filepath='include/linux/power_supply.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='online_trig_name' type-id='26a90f95' visibility='default' filepath='include/linux/power_supply.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='charging_blink_full_solid_trig' type-id='db6d90a1' visibility='default' filepath='include/linux/power_supply.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='charging_blink_full_solid_trig_name' type-id='26a90f95' visibility='default' filepath='include/linux/power_supply.h' line='315' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='power_supply_desc' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/power_supply.h' line='238' column='1' id='6d39b2d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/power_supply.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type' type-id='c61c3172' visibility='default' filepath='include/linux/power_supply.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usb_types' type-id='f26ad218' visibility='default' filepath='include/linux/power_supply.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_usb_types' type-id='b59d7dce' visibility='default' filepath='include/linux/power_supply.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='properties' type-id='c0d0f1ae' visibility='default' filepath='include/linux/power_supply.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_properties' type-id='b59d7dce' visibility='default' filepath='include/linux/power_supply.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_property' type-id='c793cb80' visibility='default' filepath='include/linux/power_supply.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_property' type-id='7c0fed0f' visibility='default' filepath='include/linux/power_supply.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='property_is_writeable' type-id='4079d8fe' visibility='default' filepath='include/linux/power_supply.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='external_power_changed' type-id='a89a6c47' visibility='default' filepath='include/linux/power_supply.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_charged' type-id='a89a6c47' visibility='default' filepath='include/linux/power_supply.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='no_thermal' type-id='b50a4934' visibility='default' filepath='include/linux/power_supply.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='use_for_apm' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='power_supply_type' filepath='include/linux/power_supply.h' line='181' column='1' id='c61c3172'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='POWER_SUPPLY_TYPE_UNKNOWN' value='0'/>
+        <enumerator name='POWER_SUPPLY_TYPE_BATTERY' value='1'/>
+        <enumerator name='POWER_SUPPLY_TYPE_UPS' value='2'/>
+        <enumerator name='POWER_SUPPLY_TYPE_MAINS' value='3'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB' value='4'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB_DCP' value='5'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB_CDP' value='6'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB_ACA' value='7'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB_TYPE_C' value='8'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB_PD' value='9'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB_PD_DRP' value='10'/>
+        <enumerator name='POWER_SUPPLY_TYPE_APPLE_BRICK_ID' value='11'/>
+        <enumerator name='POWER_SUPPLY_TYPE_WIRELESS' value='12'/>
+      </enum-decl>
+      <enum-decl name='power_supply_usb_type' filepath='include/linux/power_supply.h' line='197' column='1' id='1f7f0095'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_UNKNOWN' value='0'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_SDP' value='1'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_DCP' value='2'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_CDP' value='3'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_ACA' value='4'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_C' value='5'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_PD' value='6'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_PD_DRP' value='7'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_PD_PPS' value='8'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID' value='9'/>
+      </enum-decl>
+      <enum-decl name='power_supply_property' filepath='include/linux/power_supply.h' line='101' column='1' id='5f78aa17'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='POWER_SUPPLY_PROP_STATUS' value='0'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_TYPE' value='1'/>
+        <enumerator name='POWER_SUPPLY_PROP_HEALTH' value='2'/>
+        <enumerator name='POWER_SUPPLY_PROP_PRESENT' value='3'/>
+        <enumerator name='POWER_SUPPLY_PROP_ONLINE' value='4'/>
+        <enumerator name='POWER_SUPPLY_PROP_AUTHENTIC' value='5'/>
+        <enumerator name='POWER_SUPPLY_PROP_TECHNOLOGY' value='6'/>
+        <enumerator name='POWER_SUPPLY_PROP_CYCLE_COUNT' value='7'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_MAX' value='8'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_MIN' value='9'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN' value='10'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN' value='11'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_NOW' value='12'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_AVG' value='13'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_OCV' value='14'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_BOOT' value='15'/>
+        <enumerator name='POWER_SUPPLY_PROP_CURRENT_MAX' value='16'/>
+        <enumerator name='POWER_SUPPLY_PROP_CURRENT_NOW' value='17'/>
+        <enumerator name='POWER_SUPPLY_PROP_CURRENT_AVG' value='18'/>
+        <enumerator name='POWER_SUPPLY_PROP_CURRENT_BOOT' value='19'/>
+        <enumerator name='POWER_SUPPLY_PROP_POWER_NOW' value='20'/>
+        <enumerator name='POWER_SUPPLY_PROP_POWER_AVG' value='21'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN' value='22'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN' value='23'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_FULL' value='24'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_EMPTY' value='25'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_NOW' value='26'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_AVG' value='27'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_COUNTER' value='28'/>
+        <enumerator name='POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT' value='29'/>
+        <enumerator name='POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX' value='30'/>
+        <enumerator name='POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE' value='31'/>
+        <enumerator name='POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX' value='32'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT' value='33'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX' value='34'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_CONTROL_START_THRESHOLD' value='35'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD' value='36'/>
+        <enumerator name='POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT' value='37'/>
+        <enumerator name='POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT' value='38'/>
+        <enumerator name='POWER_SUPPLY_PROP_INPUT_POWER_LIMIT' value='39'/>
+        <enumerator name='POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN' value='40'/>
+        <enumerator name='POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN' value='41'/>
+        <enumerator name='POWER_SUPPLY_PROP_ENERGY_FULL' value='42'/>
+        <enumerator name='POWER_SUPPLY_PROP_ENERGY_EMPTY' value='43'/>
+        <enumerator name='POWER_SUPPLY_PROP_ENERGY_NOW' value='44'/>
+        <enumerator name='POWER_SUPPLY_PROP_ENERGY_AVG' value='45'/>
+        <enumerator name='POWER_SUPPLY_PROP_CAPACITY' value='46'/>
+        <enumerator name='POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN' value='47'/>
+        <enumerator name='POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX' value='48'/>
+        <enumerator name='POWER_SUPPLY_PROP_CAPACITY_ERROR_MARGIN' value='49'/>
+        <enumerator name='POWER_SUPPLY_PROP_CAPACITY_LEVEL' value='50'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP' value='51'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_MAX' value='52'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_MIN' value='53'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_ALERT_MIN' value='54'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_ALERT_MAX' value='55'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_AMBIENT' value='56'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN' value='57'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX' value='58'/>
+        <enumerator name='POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW' value='59'/>
+        <enumerator name='POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG' value='60'/>
+        <enumerator name='POWER_SUPPLY_PROP_TIME_TO_FULL_NOW' value='61'/>
+        <enumerator name='POWER_SUPPLY_PROP_TIME_TO_FULL_AVG' value='62'/>
+        <enumerator name='POWER_SUPPLY_PROP_TYPE' value='63'/>
+        <enumerator name='POWER_SUPPLY_PROP_USB_TYPE' value='64'/>
+        <enumerator name='POWER_SUPPLY_PROP_SCOPE' value='65'/>
+        <enumerator name='POWER_SUPPLY_PROP_PRECHARGE_CURRENT' value='66'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT' value='67'/>
+        <enumerator name='POWER_SUPPLY_PROP_CALIBRATE' value='68'/>
+        <enumerator name='POWER_SUPPLY_PROP_MANUFACTURE_YEAR' value='69'/>
+        <enumerator name='POWER_SUPPLY_PROP_MANUFACTURE_MONTH' value='70'/>
+        <enumerator name='POWER_SUPPLY_PROP_MANUFACTURE_DAY' value='71'/>
+        <enumerator name='POWER_SUPPLY_PROP_MODEL_NAME' value='72'/>
+        <enumerator name='POWER_SUPPLY_PROP_MANUFACTURER' value='73'/>
+        <enumerator name='POWER_SUPPLY_PROP_SERIAL_NUMBER' value='74'/>
+      </enum-decl>
+      <union-decl name='power_supply_propval' size-in-bits='64' visibility='default' filepath='include/linux/power_supply.h' line='214' column='1' id='08942f16'>
+        <data-member access='private'>
+          <var-decl name='intval' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='strval' type-id='80f4b756' visibility='default' filepath='include/linux/power_supply.h' line='216' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='power_supply_config' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/power_supply.h' line='223' column='1' id='098cab97'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='of_node' type-id='9a537bbf' visibility='default' filepath='include/linux/power_supply.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/power_supply.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='drv_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/power_supply.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='attr_grp' type-id='c97de1ac' visibility='default' filepath='include/linux/power_supply.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='supplied_to' type-id='9b23c9ad' visibility='default' filepath='include/linux/power_supply.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_supplicants' type-id='b59d7dce' visibility='default' filepath='include/linux/power_supply.h' line='234' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='098cab97' const='yes' id='e45577b8'/>
+      <pointer-type-def type-id='e45577b8' size-in-bits='64' id='048b3ad6'/>
+      <qualified-type-def type-id='6d39b2d0' const='yes' id='79a9ff6f'/>
+      <pointer-type-def type-id='79a9ff6f' size-in-bits='64' id='cb9cd99f'/>
+      <qualified-type-def type-id='08942f16' const='yes' id='2cd7c576'/>
+      <pointer-type-def type-id='2cd7c576' size-in-bits='64' id='f3abafd4'/>
+      <pointer-type-def type-id='50e956a4' size-in-bits='64' id='4079d8fe'/>
+      <pointer-type-def type-id='6daa74bb' size-in-bits='64' id='7c0fed0f'/>
+      <pointer-type-def type-id='40d98f1e' size-in-bits='64' id='c793cb80'/>
+      <pointer-type-def type-id='98749268' size-in-bits='64' id='c0c93c9e'/>
+      <pointer-type-def type-id='5f78aa17' size-in-bits='64' id='c0d0f1ae'/>
+      <pointer-type-def type-id='08942f16' size-in-bits='64' id='2e53d20f'/>
+      <pointer-type-def type-id='1f7f0095' size-in-bits='64' id='f26ad218'/>
+      <pointer-type-def type-id='82084f52' size-in-bits='64' id='404b1300'/>
+      <pointer-type-def type-id='ffbf2003' size-in-bits='64' id='a89a6c47'/>
+      <function-decl name='down' mangled-name='down' filepath='include/linux/semaphore.h' line='38' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='down'>
+        <parameter type-id='a965a5b5'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='strnstr' mangled-name='strnstr' filepath='include/linux/string.h' line='84' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strnstr'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='mutex_is_locked' mangled-name='mutex_is_locked' filepath='include/linux/mutex.h' line='137' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_is_locked'>
+        <parameter type-id='e0ea832a'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='power_supply_changed' mangled-name='power_supply_changed' filepath='include/linux/power_supply.h' line='418' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_changed'>
+        <parameter type-id='c0c93c9e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_mt_get_slot_by_key' mangled-name='input_mt_get_slot_by_key' filepath='include/linux/input/mt.h' line='122' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_mt_get_slot_by_key'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='input_mt_report_slot_state' mangled-name='input_mt_report_slot_state' filepath='include/linux/input/mt.h' line='100' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_mt_report_slot_state'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='input_mt_sync_frame' mangled-name='input_mt_sync_frame' filepath='include/linux/input/mt.h' line='107' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_mt_sync_frame'>
+        <parameter type-id='74b427eb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_kasprintf' mangled-name='devm_kasprintf' filepath='include/linux/device.h' line='948' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_kasprintf'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='devm_power_supply_register' mangled-name='devm_power_supply_register' filepath='include/linux/power_supply.h' line='449' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_power_supply_register'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='cb9cd99f'/>
+        <parameter type-id='048b3ad6'/>
+        <return type-id='c0c93c9e'/>
+      </function-decl>
+      <function-decl name='power_supply_powers' mangled-name='power_supply_powers' filepath='include/linux/power_supply.h' line='457' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_powers'>
+        <parameter type-id='c0c93c9e'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='power_supply_get_drvdata' mangled-name='power_supply_get_drvdata' filepath='include/linux/power_supply.h' line='461' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_get_drvdata'>
+        <parameter type-id='c0c93c9e'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='50e956a4'>
+        <parameter type-id='c0c93c9e'/>
+        <parameter type-id='5f78aa17'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6daa74bb'>
+        <parameter type-id='c0c93c9e'/>
+        <parameter type-id='5f78aa17'/>
+        <parameter type-id='f3abafd4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='40d98f1e'>
+        <parameter type-id='c0c93c9e'/>
+        <parameter type-id='5f78aa17'/>
+        <parameter type-id='2e53d20f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ffbf2003'>
+        <parameter type-id='c0c93c9e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='2e443c2b' size-in-bits='64' id='74b427eb'/>
+      <pointer-type-def type-id='925167dc' size-in-bits='64' id='e0ea832a'/>
+      <class-decl name='input_dev' size-in-bits='12480' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='131' column='1' id='2e443c2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phys' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uniq' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='d99ed569' visibility='default' filepath='include/linux/input.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='propbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='evbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='keybit' type-id='d2b016f4' visibility='default' filepath='include/linux/input.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='relbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='absbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mscbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ledbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='sndbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ffbit' type-id='f05e8e77' visibility='default' filepath='include/linux/input.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='swbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='hint_events_per_packet' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='keycodemax' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='keycodesize' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='keycode' type-id='eaa32e2f' visibility='default' filepath='include/linux/input.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='setkeycode' type-id='bc9b7fcd' visibility='default' filepath='include/linux/input.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='getkeycode' type-id='94ce875a' visibility='default' filepath='include/linux/input.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ff' type-id='4a3a4f46' visibility='default' filepath='include/linux/input.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='poller' type-id='3b8264a8' visibility='default' filepath='include/linux/input.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='repeat_key' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/linux/input.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='rep' type-id='e4266c7e' visibility='default' filepath='include/linux/input.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='mt' type-id='bf68c5dd' visibility='default' filepath='include/linux/input.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='absinfo' type-id='5c7f23c6' visibility='default' filepath='include/linux/input.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='key' type-id='d2b016f4' visibility='default' filepath='include/linux/input.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='led' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='snd' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='sw' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='open' type-id='2f59f71f' visibility='default' filepath='include/linux/input.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='close' type-id='b44880ea' visibility='default' filepath='include/linux/input.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='flush' type-id='3cf704a7' visibility='default' filepath='include/linux/input.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='event' type-id='49091f8e' visibility='default' filepath='include/linux/input.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='grab' type-id='bef1b918' visibility='default' filepath='include/linux/input.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='event_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/input.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/input.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='users' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4448'>
+          <var-decl name='going_away' type-id='b50a4934' visibility='default' filepath='include/linux/input.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/input.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='h_list' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='num_vals' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12128'>
+          <var-decl name='max_vals' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='vals' type-id='d09656fd' visibility='default' filepath='include/linux/input.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='devres_managed' type-id='b50a4934' visibility='default' filepath='include/linux/input.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='timestamp' type-id='728c8299' visibility='default' filepath='include/linux/input.h' line='203' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='bccc4180' size-in-bits='64' id='4a3a4f46'/>
+      <pointer-type-def type-id='a7b3c380' size-in-bits='64' id='5c7f23c6'/>
+      <pointer-type-def type-id='5c32afaa' size-in-bits='64' id='3b8264a8'/>
+      <pointer-type-def type-id='18448baa' size-in-bits='64' id='bef1b918'/>
+      <pointer-type-def type-id='d995db0d' size-in-bits='64' id='bf68c5dd'/>
+      <pointer-type-def type-id='c058e0bd' size-in-bits='64' id='d09656fd'/>
+      <pointer-type-def type-id='7364da7b' size-in-bits='64' id='2f59f71f'/>
+      <pointer-type-def type-id='df042c09' size-in-bits='64' id='bc9b7fcd'/>
+      <pointer-type-def type-id='8e3d9a4b' size-in-bits='64' id='3cf704a7'/>
+      <pointer-type-def type-id='3fdac390' size-in-bits='64' id='94ce875a'/>
+      <pointer-type-def type-id='136c624c' size-in-bits='64' id='49091f8e'/>
+      <array-type-def dimensions='1' type-id='fbc017ef' size-in-bits='192' id='728c8299'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <class-decl name='input_id' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='59' column='1' id='d99ed569'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bustype' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='vendor' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='product' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='version' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ce79ab50' size-in-bits='64' id='b44880ea'/>
+      <class-decl name='ff_device' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='533' column='1' id='bccc4180'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='upload' type-id='a13b38d7' visibility='default' filepath='include/linux/input.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='erase' type-id='9589d936' visibility='default' filepath='include/linux/input.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='playback' type-id='feb3b3dd' visibility='default' filepath='include/linux/input.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_gain' type-id='1e82f767' visibility='default' filepath='include/linux/input.h' line='539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_autocenter' type-id='1e82f767' visibility='default' filepath='include/linux/input.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='destroy' type-id='bf55f18b' visibility='default' filepath='include/linux/input.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/input.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ffbit' type-id='f05e8e77' visibility='default' filepath='include/linux/input.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/input.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='max_effects' type-id='95e97e5e' visibility='default' filepath='include/linux/input.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='effects' type-id='98b22793' visibility='default' filepath='include/linux/input.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='effect_owners' type-id='5e8a3097' visibility='default' filepath='include/linux/input.h' line='552' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_absinfo' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='90' column='1' id='a7b3c380'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='minimum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='maximum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fuzz' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flat' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='resolution' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_dev_poller' is-struct='yes' visibility='default' is-declaration-only='yes' id='5c32afaa'/>
+      <class-decl name='input_handle' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='337' column='1' id='18448baa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/input.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open' type-id='95e97e5e' visibility='default' filepath='include/linux/input.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='74b427eb' visibility='default' filepath='include/linux/input.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='handler' type-id='4938abae' visibility='default' filepath='include/linux/input.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='d_node' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='h_node' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='348' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_mt' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/input/mt.h' line='43' column='1' id='d995db0d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='trkid' type-id='95e97e5e' visibility='default' filepath='include/linux/input/mt.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num_slots' type-id='95e97e5e' visibility='default' filepath='include/linux/input/mt.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='slot' type-id='95e97e5e' visibility='default' filepath='include/linux/input/mt.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/input/mt.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='frame' type-id='f0981eeb' visibility='default' filepath='include/linux/input/mt.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='red' type-id='7292109c' visibility='default' filepath='include/linux/input/mt.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='slots' type-id='5ef3b2ba' visibility='default' filepath='include/linux/input/mt.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_value' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='32' column='1' id='c058e0bd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='d315442e' visibility='default' filepath='include/linux/input.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='code' type-id='d315442e' visibility='default' filepath='include/linux/input.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='value' type-id='3158a266' visibility='default' filepath='include/linux/input.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='0c6ad5d3' size-in-bits='64' id='98b22793'/>
+      <array-type-def dimensions='1' type-id='77e79a4b' size-in-bits='infinite' id='5e8a3097'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='0be82508' size-in-bits='64' id='4938abae'/>
+      <array-type-def dimensions='1' type-id='e0d59f72' size-in-bits='infinite' id='5ef3b2ba'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='83c7cbd3' size-in-bits='64' id='a13b38d7'/>
+      <pointer-type-def type-id='2a0a5404' size-in-bits='64' id='9589d936'/>
+      <pointer-type-def type-id='103ba521' size-in-bits='64' id='feb3b3dd'/>
+      <pointer-type-def type-id='00a1b58f' size-in-bits='64' id='bf55f18b'/>
+      <pointer-type-def type-id='6356717b' size-in-bits='64' id='1e82f767'/>
+      <class-decl name='ff_effect' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='450' column='1' id='0c6ad5d3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='id' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='direction' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='trigger' type-id='bd8e6f06' visibility='default' filepath='include/uapi/linux/input.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='replay' type-id='74a8f9e9' visibility='default' filepath='include/uapi/linux/input.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='u' type-id='af36d098' visibility='default' filepath='include/uapi/linux/input.h' line='463' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_handler' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='302' column='1' id='0be82508'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/input.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='event' type-id='37a787dc' visibility='default' filepath='include/linux/input.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='events' type-id='ddacdfe6' visibility='default' filepath='include/linux/input.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='filter' type-id='95325033' visibility='default' filepath='include/linux/input.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='match' type-id='ff015e22' visibility='default' filepath='include/linux/input.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='connect' type-id='5c6fb334' visibility='default' filepath='include/linux/input.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='disconnect' type-id='3e15391d' visibility='default' filepath='include/linux/input.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='start' type-id='3e15391d' visibility='default' filepath='include/linux/input.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='legacy_minors' type-id='b50a4934' visibility='default' filepath='include/linux/input.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/linux/input.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='id_table' type-id='cf2e76b1' visibility='default' filepath='include/linux/input.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='h_list' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='322' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_mt_slot' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/input/mt.h' line='27' column='1' id='e0d59f72'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='abs' type-id='b7c7a4a5' visibility='default' filepath='include/linux/input/mt.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='frame' type-id='f0981eeb' visibility='default' filepath='include/linux/input/mt.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='key' type-id='f0981eeb' visibility='default' filepath='include/linux/input/mt.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='c184e101' size-in-bits='64' id='cf2e76b1'/>
+      <pointer-type-def type-id='1086c08a' size-in-bits='64' id='5c6fb334'/>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='448' id='b7c7a4a5'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <class-decl name='ff_replay' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='306' column='1' id='74a8f9e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='length' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='delay' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='308' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_trigger' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='316' column='1' id='bd8e6f06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='button' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='interval' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='318' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='29964e7f' size-in-bits='64' id='95325033'/>
+      <pointer-type-def type-id='74bea618' size-in-bits='64' id='ff015e22'/>
+      <union-decl name='__anonymous_union__' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/input.h' line='457' column='1' id='af36d098'>
+        <data-member access='private'>
+          <var-decl name='constant' type-id='777eafbe' visibility='default' filepath='include/uapi/linux/input.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ramp' type-id='83c35232' visibility='default' filepath='include/uapi/linux/input.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='periodic' type-id='106cd915' visibility='default' filepath='include/uapi/linux/input.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='condition' type-id='1c159d57' visibility='default' filepath='include/uapi/linux/input.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rumble' type-id='6e5c8c15' visibility='default' filepath='include/uapi/linux/input.h' line='462' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='ff3151a1' size-in-bits='64' id='3e15391d'/>
+      <pointer-type-def type-id='ff7a347c' size-in-bits='64' id='ddacdfe6'/>
+      <pointer-type-def type-id='d6ad270a' size-in-bits='64' id='37a787dc'/>
+      <qualified-type-def type-id='1d6edf8e' const='yes' id='c184e101'/>
+      <array-type-def dimensions='1' type-id='84fc83c5' size-in-bits='192' id='1c159d57'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='ff_constant_effect' size-in-bits='80' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='345' column='1' id='777eafbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='level' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='envelope' type-id='95dfde06' visibility='default' filepath='include/uapi/linux/input.h' line='347' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_periodic_effect' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='401' column='1' id='106cd915'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='waveform' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='period' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='magnitude' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='offset' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phase' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='envelope' type-id='95dfde06' visibility='default' filepath='include/uapi/linux/input.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='custom_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/input.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='custom_data' type-id='54c34bcf' visibility='default' filepath='include/uapi/linux/input.h' line='411' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_ramp_effect' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='356' column='1' id='83c35232'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_level' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='end_level' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='envelope' type-id='95dfde06' visibility='default' filepath='include/uapi/linux/input.h' line='359' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_rumble_effect' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='422' column='1' id='6e5c8c15'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='strong_magnitude' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='weak_magnitude' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='424' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b55def60' size-in-bits='64' id='54c34bcf'/>
+      <class-decl name='ff_condition_effect' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='372' column='1' id='84fc83c5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='right_saturation' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='left_saturation' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='right_coeff' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='left_coeff' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='deadband' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='center' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='380' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_envelope' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='333' column='1' id='95dfde06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attack_length' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='attack_level' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fade_length' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='fade_level' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_device_id' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='340' column='1' id='1d6edf8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bustype' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='vendor' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='product' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='version' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='evbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='keybit' type-id='88b5427c' visibility='default' filepath='include/linux/mod_devicetable.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='relbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='absbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mscbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ledbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='sndbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ffbit' type-id='43f0230f' visibility='default' filepath='include/linux/mod_devicetable.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='swbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='propbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='driver_info' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='360' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='0791d6c8' size-in-bits='768' id='88b5427c'>
+        <subrange length='12' type-id='7ff19f0f' id='84827bdc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0791d6c8' size-in-bits='64' id='43f871d4'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0791d6c8' size-in-bits='128' id='43f0230f'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/hid/hid-magicmouse.c' language='LANG_C89'>
+      <function-decl name='input_mt_report_pointer_emulation' mangled-name='input_mt_report_pointer_emulation' filepath='include/linux/input/mt.h' line='104' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_mt_report_pointer_emulation'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/hid/hid-microsoft.c' language='LANG_C89'>
+      <pointer-type-def type-id='33d9b285' size-in-bits='64' id='2d974d69'/>
+      <function-decl name='input_ff_create_memless' mangled-name='input_ff_create_memless' filepath='include/linux/input.h' line='564' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_ff_create_memless'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='2d974d69'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='33d9b285'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='98b22793'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/hid/hid-multitouch.c' language='LANG_C89'>
+      <function-decl name='jiffies_to_usecs' mangled-name='jiffies_to_usecs' filepath='include/linux/jiffies.h' line='290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='jiffies_to_usecs'>
+        <parameter type-id='7359adad'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/hid/hid-prodikeys.c' language='LANG_C89'>
+      <function-decl name='snd_card_disconnect' mangled-name='snd_card_disconnect' filepath='include/sound/core.h' line='226' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_card_disconnect'>
+        <parameter type-id='52704eb7'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='5ef8814f' size-in-bits='64' id='52704eb7'/>
+      <class-decl name='snd_card' size-in-bits='20288' is-struct='yes' visibility='default' filepath='include/sound/core.h' line='79' column='1' id='5ef8814f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='number' type-id='95e97e5e' visibility='default' filepath='include/sound/core.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='ac1fa8c0' visibility='default' filepath='include/sound/core.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='driver' type-id='ac1fa8c0' visibility='default' filepath='include/sound/core.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='shortname' type-id='16dc656a' visibility='default' filepath='include/sound/core.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='longname' type-id='aa5ff375' visibility='default' filepath='include/sound/core.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='irq_descr' type-id='16dc656a' visibility='default' filepath='include/sound/core.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='mixername' type-id='aa5ff375' visibility='default' filepath='include/sound/core.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='components' type-id='e3204322' visibility='default' filepath='include/sound/core.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/sound/core.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/core.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='private_free' type-id='fde42bf2' visibility='default' filepath='include/sound/core.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='devices' type-id='72f469ec' visibility='default' filepath='include/sound/core.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='ctl_dev' type-id='66e487eb' visibility='default' filepath='include/sound/core.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='last_numid' type-id='f0981eeb' visibility='default' filepath='include/sound/core.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='controls_rwsem' type-id='f19fdb93' visibility='default' filepath='include/sound/core.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='ctl_files_rwlock' type-id='ac16795b' visibility='default' filepath='include/sound/core.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='controls_count' type-id='95e97e5e' visibility='default' filepath='include/sound/core.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11360'>
+          <var-decl name='user_ctl_count' type-id='95e97e5e' visibility='default' filepath='include/sound/core.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='controls' type-id='72f469ec' visibility='default' filepath='include/sound/core.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='ctl_files' type-id='72f469ec' visibility='default' filepath='include/sound/core.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='proc_root' type-id='b9608bfc' visibility='default' filepath='include/sound/core.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='proc_root_link' type-id='d077e928' visibility='default' filepath='include/sound/core.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='files_list' type-id='72f469ec' visibility='default' filepath='include/sound/core.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='s_f_ops' type-id='df5f3f5d' visibility='default' filepath='include/sound/core.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='files_lock' type-id='fb4018a0' visibility='default' filepath='include/sound/core.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12000'>
+          <var-decl name='shutdown' type-id='95e97e5e' visibility='default' filepath='include/sound/core.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='release_completion' type-id='389faaf7' visibility='default' filepath='include/sound/core.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/core.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='card_dev' type-id='66e487eb' visibility='default' filepath='include/sound/core.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19520'>
+          <var-decl name='dev_groups' type-id='db1b7234' visibility='default' filepath='include/sound/core.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19776'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/sound/core.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='remove_sleep' type-id='b5ab048f' visibility='default' filepath='include/sound/core.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='power_state' type-id='f0981eeb' visibility='default' filepath='include/sound/core.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20096'>
+          <var-decl name='power_sleep' type-id='b5ab048f' visibility='default' filepath='include/sound/core.h' line='124' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='640' id='aa5ff375'>
+        <subrange length='80' type-id='7ff19f0f' id='b4129fbd'/>
+      </array-type-def>
+      <pointer-type-def type-id='48ad5fc6' size-in-bits='64' id='b9608bfc'/>
+      <pointer-type-def type-id='30b9286d' size-in-bits='64' id='df5f3f5d'/>
+      <pointer-type-def type-id='593d8168' size-in-bits='64' id='fde42bf2'/>
+      <class-decl name='snd_info_entry' is-struct='yes' visibility='default' is-declaration-only='yes' id='48ad5fc6'/>
+      <class-decl name='snd_shutdown_f_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='30b9286d'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/hid/hid-roccat-arvo.c' language='LANG_C89'>
+      <function-decl name='class_destroy' mangled-name='class_destroy' filepath='include/linux/device.h' line='806' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='class_destroy'>
+        <parameter type-id='67aca04f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/hid/hid-sony.c' language='LANG_C89'>
+      <pointer-type-def type-id='46ce60fb' size-in-bits='64' id='a9e764bb'/>
+      <function-decl name='ida_destroy' mangled-name='ida_destroy' filepath='include/linux/idr.h' line='257' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ida_destroy'>
+        <parameter type-id='a9e764bb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ida_free' mangled-name='ida_free' filepath='include/linux/idr.h' line='256' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ida_free'>
+        <parameter type-id='a9e764bb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ida_alloc_range' mangled-name='ida_alloc_range' filepath='include/linux/idr.h' line='255' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ida_alloc_range'>
+        <parameter type-id='a9e764bb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_led_classdev_register_ext' mangled-name='devm_led_classdev_register_ext' filepath='include/linux/leds.h' line='184' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_led_classdev_register_ext'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='bd1c8eb6'/>
+        <parameter type-id='eebb8ee8'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='6e0e17b0' size-in-bits='64' id='bd1c8eb6'/>
+      <pointer-type-def type-id='fbd376ca' size-in-bits='64' id='eebb8ee8'/>
+      <class-decl name='led_classdev' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/linux/leds.h' line='58' column='1' id='6e0e17b0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='brightness' type-id='fa598f35' visibility='default' filepath='include/linux/leds.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_brightness' type-id='fa598f35' visibility='default' filepath='include/linux/leds.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/leds.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='work_flags' type-id='7359adad' visibility='default' filepath='include/linux/leds.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='brightness_set' type-id='971a91c1' visibility='default' filepath='include/linux/leds.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='brightness_set_blocking' type-id='07e65680' visibility='default' filepath='include/linux/leds.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='brightness_get' type-id='a91f7d05' visibility='default' filepath='include/linux/leds.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='blink_set' type-id='adaf1c08' visibility='default' filepath='include/linux/leds.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pattern_set' type-id='e9f2f0c0' visibility='default' filepath='include/linux/leds.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pattern_clear' type-id='0904d108' visibility='default' filepath='include/linux/leds.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/leds.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/leds.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/leds.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='default_trigger' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='blink_delay_on' type-id='7359adad' visibility='default' filepath='include/linux/leds.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='blink_delay_off' type-id='7359adad' visibility='default' filepath='include/linux/leds.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='blink_timer' type-id='abe41e67' visibility='default' filepath='include/linux/leds.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='blink_brightness' type-id='95e97e5e' visibility='default' filepath='include/linux/leds.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='new_blink_brightness' type-id='95e97e5e' visibility='default' filepath='include/linux/leds.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='flash_resume' type-id='749654e7' visibility='default' filepath='include/linux/leds.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='set_brightness_work' type-id='ef9025d0' visibility='default' filepath='include/linux/leds.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='delayed_set_value' type-id='95e97e5e' visibility='default' filepath='include/linux/leds.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='trigger_lock' type-id='f19fdb93' visibility='default' filepath='include/linux/leds.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='trigger' type-id='db6d90a1' visibility='default' filepath='include/linux/leds.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='trig_list' type-id='72f469ec' visibility='default' filepath='include/linux/leds.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='trigger_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/leds.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='activated' type-id='b50a4934' visibility='default' filepath='include/linux/leds.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='led_access' type-id='925167dc' visibility='default' filepath='include/linux/leds.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='led_init_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/leds.h' line='34' column='1' id='fbd376ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fwnode' type-id='4a935626' visibility='default' filepath='include/linux/leds.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='default_label' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='devicename' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='devname_mandatory' type-id='b50a4934' visibility='default' filepath='include/linux/leds.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='led_brightness' filepath='include/linux/leds.h' line='27' column='1' id='fa598f35'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='LED_OFF' value='0'/>
+        <enumerator name='LED_ON' value='1'/>
+        <enumerator name='LED_HALF' value='127'/>
+        <enumerator name='LED_FULL' value='255'/>
+      </enum-decl>
+      <pointer-type-def type-id='f7c7c7f9' size-in-bits='64' id='a91f7d05'/>
+      <pointer-type-def type-id='d5ace206' size-in-bits='64' id='4a935626'/>
+      <pointer-type-def type-id='6a0fd5a6' size-in-bits='64' id='07e65680'/>
+      <pointer-type-def type-id='fcd4ba8e' size-in-bits='64' id='e9f2f0c0'/>
+      <pointer-type-def type-id='4b04075e' size-in-bits='64' id='adaf1c08'/>
+      <pointer-type-def type-id='a373c61d' size-in-bits='64' id='971a91c1'/>
+      <class-decl name='fwnode_handle' is-struct='yes' visibility='default' is-declaration-only='yes' id='d5ace206'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/hid/hid-steam.c' language='LANG_C89'>
+      <function-decl name='power_supply_unregister' mangled-name='power_supply_unregister' filepath='include/linux/power_supply.h' line='456' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_unregister'>
+        <parameter type-id='c0c93c9e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='power_supply_register' mangled-name='power_supply_register' filepath='include/linux/power_supply.h' line='441' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_register'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='cb9cd99f'/>
+        <parameter type-id='048b3ad6'/>
+        <return type-id='c0c93c9e'/>
+      </function-decl>
+      <function-decl name='param_set_bool' mangled-name='param_set_bool' filepath='include/linux/moduleparam.h' line='387' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='param_set_bool'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='edcbd723'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/hwspinlock/hwspinlock_core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='38db93a7' size-in-bits='infinite' id='e84e7d83'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='hwspinlock_device' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='54' column='1' id='8712a502'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='9138a099' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='base_id' type-id='95e97e5e' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='num_locks' type-id='95e97e5e' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lock' type-id='e84e7d83' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hwspinlock_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='28' column='1' id='b74ac0d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='trylock' type-id='18277869' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unlock' type-id='35411736' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='relax' type-id='35411736' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='b74ac0d4' const='yes' id='822de089'/>
+      <pointer-type-def type-id='822de089' size-in-bits='64' id='9138a099'/>
+      <pointer-type-def type-id='8712a502' size-in-bits='64' id='b8cd8f00'/>
+      <pointer-type-def type-id='2fedb035' size-in-bits='64' id='18277869'/>
+      <pointer-type-def type-id='3f7e2e74' size-in-bits='64' id='35411736'/>
+      <function-decl name='__hwspin_lock_timeout' mangled-name='__hwspin_lock_timeout' filepath='drivers/hwspinlock/hwspinlock_core.c' line='206' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__hwspin_lock_timeout'>
+        <parameter type-id='0cb0b26f' name='hwlock' filepath='drivers/hwspinlock/hwspinlock_core.c' line='206' column='1'/>
+        <parameter type-id='f0981eeb' name='to' filepath='drivers/hwspinlock/hwspinlock_core.c' line='206' column='1'/>
+        <parameter type-id='95e97e5e' name='mode' filepath='drivers/hwspinlock/hwspinlock_core.c' line='207' column='1'/>
+        <parameter type-id='1d2c2b85' name='flags' filepath='drivers/hwspinlock/hwspinlock_core.c' line='207' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__hwspin_unlock' mangled-name='__hwspin_unlock' filepath='drivers/hwspinlock/hwspinlock_core.c' line='265' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__hwspin_unlock'>
+        <parameter type-id='0cb0b26f' name='hwlock' filepath='drivers/hwspinlock/hwspinlock_core.c' line='265' column='1'/>
+        <parameter type-id='95e97e5e' name='mode' filepath='drivers/hwspinlock/hwspinlock_core.c' line='265' column='1'/>
+        <parameter type-id='1d2c2b85' name='flags' filepath='drivers/hwspinlock/hwspinlock_core.c' line='265' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_hwspin_lock_get_id_byname' mangled-name='of_hwspin_lock_get_id_byname' filepath='drivers/hwspinlock/hwspinlock_core.c' line='406' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_hwspin_lock_get_id_byname'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/hwspinlock/hwspinlock_core.c' line='406' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/hwspinlock/hwspinlock_core.c' line='406' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hwspin_lock_register' mangled-name='hwspin_lock_register' filepath='drivers/hwspinlock/hwspinlock_core.c' line='486' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hwspin_lock_register'>
+        <parameter type-id='b8cd8f00' name='bank' filepath='drivers/hwspinlock/hwspinlock_core.c' line='486' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/hwspinlock/hwspinlock_core.c' line='486' column='1'/>
+        <parameter type-id='9138a099' name='ops' filepath='drivers/hwspinlock/hwspinlock_core.c' line='487' column='1'/>
+        <parameter type-id='95e97e5e' name='base_id' filepath='drivers/hwspinlock/hwspinlock_core.c' line='487' column='1'/>
+        <parameter type-id='95e97e5e' name='num_locks' filepath='drivers/hwspinlock/hwspinlock_core.c' line='487' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hwspin_lock_unregister' mangled-name='hwspin_lock_unregister' filepath='drivers/hwspinlock/hwspinlock_core.c' line='534' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hwspin_lock_unregister'>
+        <parameter type-id='b8cd8f00' name='bank' filepath='drivers/hwspinlock/hwspinlock_core.c' line='534' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_hwspin_lock_request_specific' mangled-name='devm_hwspin_lock_request_specific' filepath='drivers/hwspinlock/hwspinlock_core.c' line='931' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_hwspin_lock_request_specific'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/hwspinlock/hwspinlock_core.c' line='931' column='1'/>
+        <parameter type-id='f0981eeb' name='id' filepath='drivers/hwspinlock/hwspinlock_core.c' line='932' column='1'/>
+        <return type-id='0cb0b26f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='2fedb035'>
+        <parameter type-id='0cb0b26f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3f7e2e74'>
+        <parameter type-id='0cb0b26f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/hwtracing/coresight/coresight-funnel.c' language='LANG_C89'>
+      <function-decl name='dev_fwnode' mangled-name='dev_fwnode' filepath='include/linux/property.h' line='34' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_fwnode'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='4a935625'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/i2c/i2c-core-base.c' language='LANG_C89'>
+      <class-decl name='i2c_timings' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='579' column='1' id='24734c8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bus_freq_hz' type-id='19c2251e' visibility='default' filepath='include/linux/i2c.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='scl_rise_ns' type-id='19c2251e' visibility='default' filepath='include/linux/i2c.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='scl_fall_ns' type-id='19c2251e' visibility='default' filepath='include/linux/i2c.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='scl_int_delay_ns' type-id='19c2251e' visibility='default' filepath='include/linux/i2c.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sda_fall_ns' type-id='19c2251e' visibility='default' filepath='include/linux/i2c.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='sda_hold_ns' type-id='19c2251e' visibility='default' filepath='include/linux/i2c.h' line='585' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='24734c8f' size-in-bits='64' id='d19fb227'/>
+      <pointer-type-def type-id='db4c9bf7' size-in-bits='64' id='9194e9f3'/>
+      <var-decl name='i2c_bus_type' type-id='b31bfc8a' mangled-name='i2c_bus_type' visibility='default' filepath='drivers/i2c/i2c-core-base.c' line='502' column='1' elf-symbol-id='i2c_bus_type'/>
+      <var-decl name='i2c_adapter_type' type-id='bdae35f4' mangled-name='i2c_adapter_type' visibility='default' filepath='drivers/i2c/i2c-core-base.c' line='1181' column='1' elf-symbol-id='i2c_adapter_type'/>
+      <function-decl name='i2c_generic_scl_recovery' mangled-name='i2c_generic_scl_recovery' filepath='drivers/i2c/i2c-core-base.c' line='177' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_generic_scl_recovery'>
+        <parameter type-id='b9af02c3' name='adap' filepath='drivers/i2c/i2c-core-base.c' line='177' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_recover_bus' mangled-name='i2c_recover_bus' filepath='drivers/i2c/i2c-core-base.c' line='244' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_recover_bus'>
+        <parameter type-id='b9af02c3' name='adap' filepath='drivers/i2c/i2c-core-base.c' line='244' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_verify_client' mangled-name='i2c_verify_client' filepath='drivers/i2c/i2c-core-base.c' line='528' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_verify_client'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/i2c/i2c-core-base.c' line='528' column='1'/>
+        <return type-id='3e31633b'/>
+      </function-decl>
+      <function-decl name='i2c_new_dummy_device' mangled-name='i2c_new_dummy_device' filepath='drivers/i2c/i2c-core-base.c' line='906' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_new_dummy_device'>
+        <parameter type-id='b9af02c3' name='adapter' filepath='drivers/i2c/i2c-core-base.c' line='906' column='1'/>
+        <parameter type-id='1dc6a898' name='address' filepath='drivers/i2c/i2c-core-base.c' line='906' column='1'/>
+        <return type-id='3e31633b'/>
+      </function-decl>
+      <function-decl name='i2c_new_dummy' mangled-name='i2c_new_dummy' filepath='drivers/i2c/i2c-core-base.c' line='930' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_new_dummy'>
+        <parameter type-id='b9af02c3' name='adapter' filepath='drivers/i2c/i2c-core-base.c' line='930' column='1'/>
+        <parameter type-id='1dc6a898' name='address' filepath='drivers/i2c/i2c-core-base.c' line='930' column='1'/>
+        <return type-id='3e31633b'/>
+      </function-decl>
+      <function-decl name='i2c_new_ancillary_device' mangled-name='i2c_new_ancillary_device' filepath='drivers/i2c/i2c-core-base.c' line='1005' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_new_ancillary_device'>
+        <parameter type-id='3e31633b' name='client' filepath='drivers/i2c/i2c-core-base.c' line='1005' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/i2c/i2c-core-base.c' line='1006' column='1'/>
+        <parameter type-id='1dc6a898' name='default_addr' filepath='drivers/i2c/i2c-core-base.c' line='1007' column='1'/>
+        <return type-id='3e31633b'/>
+      </function-decl>
+      <function-decl name='i2c_add_numbered_adapter' mangled-name='i2c_add_numbered_adapter' filepath='drivers/i2c/i2c-core-base.c' line='1495' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_add_numbered_adapter'>
+        <parameter type-id='b9af02c3' name='adap' filepath='drivers/i2c/i2c-core-base.c' line='1495' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_parse_fw_timings' mangled-name='i2c_parse_fw_timings' filepath='drivers/i2c/i2c-core-base.c' line='1641' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_parse_fw_timings'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/i2c/i2c-core-base.c' line='1641' column='1'/>
+        <parameter type-id='d19fb227' name='t' filepath='drivers/i2c/i2c-core-base.c' line='1641' column='1'/>
+        <parameter type-id='b50a4934' name='use_defaults' filepath='drivers/i2c/i2c-core-base.c' line='1641' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='i2c_for_each_dev' mangled-name='i2c_for_each_dev' filepath='drivers/i2c/i2c-core-base.c' line='1681' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_for_each_dev'>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/i2c/i2c-core-base.c' line='1681' column='1'/>
+        <parameter type-id='92d15ae9' name='fn' filepath='drivers/i2c/i2c-core-base.c' line='1681' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__i2c_transfer' mangled-name='__i2c_transfer' filepath='drivers/i2c/i2c-core-base.c' line='1966' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__i2c_transfer'>
+        <parameter type-id='b9af02c3' name='adap' filepath='drivers/i2c/i2c-core-base.c' line='1966' column='1'/>
+        <parameter type-id='cd44bc95' name='msgs' filepath='drivers/i2c/i2c-core-base.c' line='1966' column='1'/>
+        <parameter type-id='95e97e5e' name='num' filepath='drivers/i2c/i2c-core-base.c' line='1966' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_smbus_xfer' mangled-name='i2c_smbus_xfer' filepath='include/linux/i2c.h' line='129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_smbus_xfer'>
+        <parameter type-id='b9af02c3'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='a84c031d'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='a556dccb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_new_probed_device' mangled-name='i2c_new_probed_device' filepath='drivers/i2c/i2c-core-base.c' line='2291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_new_probed_device'>
+        <parameter type-id='b9af02c3' name='adap' filepath='drivers/i2c/i2c-core-base.c' line='2291' column='1'/>
+        <parameter type-id='fae597a1' name='info' filepath='drivers/i2c/i2c-core-base.c' line='2292' column='1'/>
+        <parameter type-id='31347b7a' name='addr_list' filepath='drivers/i2c/i2c-core-base.c' line='2293' column='1'/>
+        <parameter type-id='9194e9f3' name='probe' filepath='drivers/i2c/i2c-core-base.c' line='2294' column='1'/>
+        <return type-id='3e31633b'/>
+      </function-decl>
+      <function-decl name='i2c_get_adapter' mangled-name='i2c_get_adapter' filepath='drivers/i2c/i2c-core-base.c' line='2332' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_get_adapter'>
+        <parameter type-id='95e97e5e' name='nr' filepath='drivers/i2c/i2c-core-base.c' line='2332' column='1'/>
+        <return type-id='b9af02c3'/>
+      </function-decl>
+      <function-decl name='i2c_put_adapter' mangled-name='i2c_put_adapter' filepath='drivers/i2c/i2c-core-base.c' line='2352' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_put_adapter'>
+        <parameter type-id='b9af02c3' name='adap' filepath='drivers/i2c/i2c-core-base.c' line='2352' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='i2c_get_dma_safe_msg_buf' mangled-name='i2c_get_dma_safe_msg_buf' filepath='drivers/i2c/i2c-core-base.c' line='2374' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_get_dma_safe_msg_buf'>
+        <parameter type-id='cd44bc95' name='msg' filepath='drivers/i2c/i2c-core-base.c' line='2374' column='1'/>
+        <parameter type-id='f0981eeb' name='threshold' filepath='drivers/i2c/i2c-core-base.c' line='2374' column='1'/>
+        <return type-id='8bff8096'/>
+      </function-decl>
+      <function-decl name='i2c_put_dma_safe_msg_buf' mangled-name='i2c_put_dma_safe_msg_buf' filepath='drivers/i2c/i2c-core-base.c' line='2402' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_put_dma_safe_msg_buf'>
+        <parameter type-id='8bff8096' name='buf' filepath='drivers/i2c/i2c-core-base.c' line='2402' column='1'/>
+        <parameter type-id='cd44bc95' name='msg' filepath='drivers/i2c/i2c-core-base.c' line='2402' column='1'/>
+        <parameter type-id='b50a4934' name='xferred' filepath='drivers/i2c/i2c-core-base.c' line='2402' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='3beb2af4' size-in-bits='64' id='31347b7a'/>
+      <function-type size-in-bits='64' id='db4c9bf7'>
+        <parameter type-id='b9af02c3'/>
+        <parameter type-id='8efea9e5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <pointer-type-def type-id='f95bfc29' size-in-bits='64' id='fae597a1'/>
+      <pointer-type-def type-id='1a96c066' size-in-bits='64' id='a556dccb'/>
+      <qualified-type-def type-id='8efea9e5' const='yes' id='3beb2af4'/>
+      <class-decl name='i2c_board_info' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='409' column='1' id='f95bfc29'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='664ac0b7' visibility='default' filepath='include/linux/i2c.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/linux/i2c.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='addr' type-id='8efea9e5' visibility='default' filepath='include/linux/i2c.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev_name' type-id='80f4b756' visibility='default' filepath='include/linux/i2c.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='platform_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/i2c.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/i2c.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/i2c.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='properties' type-id='9e1d140c' visibility='default' filepath='include/linux/i2c.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='resources' type-id='e153f6de' visibility='default' filepath='include/linux/i2c.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='num_resources' type-id='f0981eeb' visibility='default' filepath='include/linux/i2c.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='420' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='i2c_smbus_data' size-in-bits='272' visibility='default' filepath='include/uapi/linux/i2c.h' line='135' column='1' id='1a96c066'>
+        <data-member access='private'>
+          <var-decl name='byte' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/i2c.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='word' type-id='d315442e' visibility='default' filepath='include/uapi/linux/i2c.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='block' type-id='ba592c87' visibility='default' filepath='include/uapi/linux/i2c.h' line='138' column='1'/>
+        </data-member>
+      </union-decl>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='272' id='ba592c87'>
+        <subrange length='34' type-id='7ff19f0f' id='6a6a7e00'/>
+      </array-type-def>
+      <pointer-type-def type-id='283e536e' size-in-bits='64' id='9e1d140c'/>
+      <qualified-type-def type-id='822bf95b' const='yes' id='283e536e'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/i2c/i2c-core-of.c' language='LANG_C89'>
+      <function-decl name='of_find_i2c_device_by_node' mangled-name='of_find_i2c_device_by_node' filepath='drivers/i2c/i2c-core-of.c' line='129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_i2c_device_by_node'>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/i2c/i2c-core-of.c' line='129' column='1'/>
+        <return type-id='3e31633b'/>
+      </function-decl>
+      <function-decl name='of_find_i2c_adapter_by_node' mangled-name='of_find_i2c_adapter_by_node' filepath='drivers/i2c/i2c-core-of.c' line='147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_i2c_adapter_by_node'>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/i2c/i2c-core-of.c' line='147' column='1'/>
+        <return type-id='b9af02c3'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/i2c/i2c-core-smbus.c' language='LANG_C89'>
+      <function-decl name='i2c_smbus_write_byte' mangled-name='i2c_smbus_write_byte' filepath='drivers/i2c/i2c-core-smbus.c' line='113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_smbus_write_byte'>
+        <parameter type-id='7ea54338' name='client' filepath='drivers/i2c/i2c-core-smbus.c' line='113' column='1'/>
+        <parameter type-id='f9b06939' name='value' filepath='drivers/i2c/i2c-core-smbus.c' line='113' column='1'/>
+        <return type-id='a7832498'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/iio/industrialio-buffer.c' language='LANG_C89'>
+      <function-decl name='iio_buffer_init' mangled-name='iio_buffer_init' filepath='drivers/iio/industrialio-buffer.c' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_buffer_init'>
+        <parameter type-id='aa9ea333' name='buffer' filepath='drivers/iio/industrialio-buffer.c' line='198' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iio_push_to_buffers' mangled-name='iio_push_to_buffers' filepath='drivers/iio/industrialio-buffer.c' line='1405' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_push_to_buffers'>
+        <parameter type-id='226853d2' name='indio_dev' filepath='drivers/iio/industrialio-buffer.c' line='1405' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/iio/industrialio-buffer.c' line='1405' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iio_device_attach_buffer' mangled-name='iio_device_attach_buffer' filepath='drivers/iio/industrialio-buffer.c' line='1471' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_device_attach_buffer'>
+        <parameter type-id='226853d2' name='indio_dev' filepath='drivers/iio/industrialio-buffer.c' line='1471' column='1'/>
+        <parameter type-id='aa9ea333' name='buffer' filepath='drivers/iio/industrialio-buffer.c' line='1472' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='717ee4f3' size-in-bits='64' id='aa9ea333'/>
+      <pointer-type-def type-id='8c644de4' size-in-bits='64' id='226853d2'/>
+      <class-decl name='iio_buffer' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='73' column='1' id='717ee4f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='length' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bytes_per_datum' type-id='b59d7dce' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='access' type-id='56670be1' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='scan_mask' type-id='3ccc2590' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='demux_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pollq' type-id='b5ab048f' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='watermark' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='scan_el_attrs' type-id='aad24a5b' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='scan_timestamp' type-id='b50a4934' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='scan_el_dev_attr_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='buffer_group' type-id='e4af473b' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='scan_el_group' type-id='e4af473b' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='stufftoread' type-id='b50a4934' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='attrs' type-id='cd733e18' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='demux_bounce' type-id='eaa32e2f' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='buffer_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='133' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_dev' size-in-bits='11520' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='525' column='1' id='8c644de4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='driver_module' type-id='2730d016' visibility='default' filepath='include/linux/iio/iio.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='modes' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='currentmode' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/iio/iio.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='event_interface' type-id='f380f2bb' visibility='default' filepath='include/linux/iio/iio.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='buffer' type-id='aa9ea333' visibility='default' filepath='include/linux/iio/iio.h' line='535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='buffer_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/iio.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='scan_bytes' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='mlock' type-id='925167dc' visibility='default' filepath='include/linux/iio/iio.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='available_scan_masks' type-id='f9b37274' visibility='default' filepath='include/linux/iio/iio.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='masklength' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='active_scan_mask' type-id='f9b37274' visibility='default' filepath='include/linux/iio/iio.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='scan_timestamp' type-id='b50a4934' visibility='default' filepath='include/linux/iio/iio.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8352'>
+          <var-decl name='scan_index_timestamp' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='trig' type-id='54e54fbb' visibility='default' filepath='include/linux/iio/iio.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='trig_readonly' type-id='b50a4934' visibility='default' filepath='include/linux/iio/iio.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='pollfunc' type-id='9add1da7' visibility='default' filepath='include/linux/iio/iio.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='pollfunc_event' type-id='9add1da7' visibility='default' filepath='include/linux/iio/iio.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='channels' type-id='f74174a4' visibility='default' filepath='include/linux/iio/iio.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='num_channels' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='channel_attr_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/iio.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='chan_attr_group' type-id='e4af473b' visibility='default' filepath='include/linux/iio/iio.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/iio.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='info' type-id='62d8a75a' visibility='default' filepath='include/linux/iio/iio.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='clock_id' type-id='a1c3b834' visibility='default' filepath='include/linux/iio/iio.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='info_exist_lock' type-id='925167dc' visibility='default' filepath='include/linux/iio/iio.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='setup_ops' type-id='7597aac3' visibility='default' filepath='include/linux/iio/iio.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='chrdev' type-id='22f86352' visibility='default' filepath='include/linux/iio/iio.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='groups' type-id='db13236f' visibility='default' filepath='include/linux/iio/iio.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='groupcounter' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='debugfs_dentry' type-id='27675065' visibility='default' filepath='include/linux/iio/iio.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11456'>
+          <var-decl name='cached_reg_addr' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='568' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e4af473b' size-in-bits='64' id='aad24a5b'/>
+      <pointer-type-def type-id='cfe4f8a2' size-in-bits='64' id='cd733e18'/>
+      <array-type-def dimensions='1' type-id='8ff9530e' size-in-bits='448' id='db13236f'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <pointer-type-def type-id='81a7f511' size-in-bits='64' id='56670be1'/>
+      <pointer-type-def type-id='ea04303b' size-in-bits='64' id='7597aac3'/>
+      <pointer-type-def type-id='1f8d2f66' size-in-bits='64' id='f74174a4'/>
+      <pointer-type-def type-id='02793b54' size-in-bits='64' id='62d8a75a'/>
+      <pointer-type-def type-id='a0b3876b' size-in-bits='64' id='f380f2bb'/>
+      <pointer-type-def type-id='5cec8edf' size-in-bits='64' id='9add1da7'/>
+      <pointer-type-def type-id='f060e03b' size-in-bits='64' id='54e54fbb'/>
+      <pointer-type-def type-id='bd54fe1a' size-in-bits='64' id='3ccc2590'/>
+      <pointer-type-def type-id='be65923c' size-in-bits='64' id='cfe4f8a2'/>
+      <qualified-type-def type-id='e59f755e' const='yes' id='81a7f511'/>
+      <qualified-type-def type-id='36e5348a' const='yes' id='ea04303b'/>
+      <qualified-type-def type-id='da58161d' const='yes' id='1f8d2f66'/>
+      <qualified-type-def type-id='49f5fd4d' const='yes' id='02793b54'/>
+      <class-decl name='iio_event_interface' is-struct='yes' visibility='default' is-declaration-only='yes' id='a0b3876b'/>
+      <class-decl name='iio_poll_func' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='30' column='1' id='5cec8edf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='indio_dev' type-id='226853d2' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='h' type-id='3fefe9b7' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='thread' type-id='3fefe9b7' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='timestamp' type-id='9b7c55ef' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_trigger' size-in-bits='10688' is-struct='yes' visibility='default' filepath='include/linux/iio/trigger.h' line='59' column='1' id='f060e03b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='a233c137' visibility='default' filepath='include/linux/iio/trigger.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/iio/trigger.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/trigger.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/trigger.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/iio/trigger.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/trigger.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='alloc_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/trigger.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='use_count' type-id='49178f86' visibility='default' filepath='include/linux/iio/trigger.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='subirq_chip' type-id='0f5f7920' visibility='default' filepath='include/linux/iio/trigger.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='subirq_base' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/trigger.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10272'>
+          <var-decl name='subirqs' type-id='76e4cb23' visibility='default' filepath='include/linux/iio/trigger.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='pool' type-id='f066dd3c' visibility='default' filepath='include/linux/iio/trigger.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='pool_lock' type-id='925167dc' visibility='default' filepath='include/linux/iio/trigger.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='attached_own_device' type-id='b50a4934' visibility='default' filepath='include/linux/iio/trigger.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='a6222917' const='yes' id='be65923c'/>
+      <pointer-type-def type-id='152c9867' size-in-bits='64' id='a233c137'/>
+      <array-type-def dimensions='1' type-id='a04304a1' size-in-bits='16' id='76e4cb23'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='iio_buffer_access_funcs' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='46' column='1' id='e59f755e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='store_to' type-id='3168497d' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read_first_n' type-id='268afde6' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data_available' type-id='6bfc1e31' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='request_update' type-id='098b33c1' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_bytes_per_datum' type-id='07aa12a2' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_length' type-id='e78e2dfb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='enable' type-id='7c9900c6' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='disable' type-id='7c9900c6' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='release' type-id='50968132' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='modes' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_buffer_setup_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='474' column='1' id='36e5348a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='preenable' type-id='adb7e86e' visibility='default' filepath='include/linux/iio/iio.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='postenable' type-id='adb7e86e' visibility='default' filepath='include/linux/iio/iio.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='predisable' type-id='adb7e86e' visibility='default' filepath='include/linux/iio/iio.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='postdisable' type-id='adb7e86e' visibility='default' filepath='include/linux/iio/iio.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='validate_scan_mask' type-id='d2b31715' visibility='default' filepath='include/linux/iio/iio.h' line='479' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_chan_spec' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='236' column='1' id='da58161d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='6dc73e71' visibility='default' filepath='include/linux/iio/iio.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='channel' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='channel2' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='address' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='scan_index' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='scan_type' type-id='427f8bed' visibility='default' filepath='include/linux/iio/iio.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='info_mask_separate' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='info_mask_separate_available' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='info_mask_shared_by_type' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='info_mask_shared_by_type_available' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='info_mask_shared_by_dir' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='info_mask_shared_by_dir_available' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='info_mask_shared_by_all' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='info_mask_shared_by_all_available' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='event_spec' type-id='b1b94ad4' visibility='default' filepath='include/linux/iio/iio.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='num_event_specs' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ext_info' type-id='d67abbdf' visibility='default' filepath='include/linux/iio/iio.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='extend_name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/iio.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='datasheet_name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/iio.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='modified' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='indexed' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='output' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='differential' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='266' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_info' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='393' column='1' id='49f5fd4d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event_attrs' type-id='8ff9530e' visibility='default' filepath='include/linux/iio/iio.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='attrs' type-id='8ff9530e' visibility='default' filepath='include/linux/iio/iio.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read_raw' type-id='933bd96c' visibility='default' filepath='include/linux/iio/iio.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read_raw_multi' type-id='373a5a49' visibility='default' filepath='include/linux/iio/iio.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read_avail' type-id='c967fe0a' visibility='default' filepath='include/linux/iio/iio.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write_raw' type-id='ca9b89b2' visibility='default' filepath='include/linux/iio/iio.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write_raw_get_fmt' type-id='763c550c' visibility='default' filepath='include/linux/iio/iio.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='read_event_config' type-id='e6bda83a' visibility='default' filepath='include/linux/iio/iio.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='write_event_config' type-id='6cf6fae1' visibility='default' filepath='include/linux/iio/iio.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='read_event_value' type-id='7ef1b01a' visibility='default' filepath='include/linux/iio/iio.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='write_event_value' type-id='fbb36f38' visibility='default' filepath='include/linux/iio/iio.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='validate_trigger' type-id='247cd24c' visibility='default' filepath='include/linux/iio/iio.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='update_scan_mode' type-id='b7f77f1f' visibility='default' filepath='include/linux/iio/iio.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='debugfs_reg_access' type-id='f657670c' visibility='default' filepath='include/linux/iio/iio.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='of_xlate' type-id='d3d1201d' visibility='default' filepath='include/linux/iio/iio.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hwfifo_set_watermark' type-id='9778250c' visibility='default' filepath='include/linux/iio/iio.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='hwfifo_flush_to_buffer' type-id='9778250c' visibility='default' filepath='include/linux/iio/iio.h' line='460' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='1d1afc2f' size-in-bits='64' id='d67abbdf'/>
+      <pointer-type-def type-id='50409e76' size-in-bits='64' id='b1b94ad4'/>
+      <qualified-type-def type-id='df5f1cc8' const='yes' id='152c9867'/>
+      <enum-decl name='iio_chan_type' filepath='include/uapi/linux/iio/types.h' line='14' column='1' id='6dc73e71'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_VOLTAGE' value='0'/>
+        <enumerator name='IIO_CURRENT' value='1'/>
+        <enumerator name='IIO_POWER' value='2'/>
+        <enumerator name='IIO_ACCEL' value='3'/>
+        <enumerator name='IIO_ANGL_VEL' value='4'/>
+        <enumerator name='IIO_MAGN' value='5'/>
+        <enumerator name='IIO_LIGHT' value='6'/>
+        <enumerator name='IIO_INTENSITY' value='7'/>
+        <enumerator name='IIO_PROXIMITY' value='8'/>
+        <enumerator name='IIO_TEMP' value='9'/>
+        <enumerator name='IIO_INCLI' value='10'/>
+        <enumerator name='IIO_ROT' value='11'/>
+        <enumerator name='IIO_ANGL' value='12'/>
+        <enumerator name='IIO_TIMESTAMP' value='13'/>
+        <enumerator name='IIO_CAPACITANCE' value='14'/>
+        <enumerator name='IIO_ALTVOLTAGE' value='15'/>
+        <enumerator name='IIO_CCT' value='16'/>
+        <enumerator name='IIO_PRESSURE' value='17'/>
+        <enumerator name='IIO_HUMIDITYRELATIVE' value='18'/>
+        <enumerator name='IIO_ACTIVITY' value='19'/>
+        <enumerator name='IIO_STEPS' value='20'/>
+        <enumerator name='IIO_ENERGY' value='21'/>
+        <enumerator name='IIO_DISTANCE' value='22'/>
+        <enumerator name='IIO_VELOCITY' value='23'/>
+        <enumerator name='IIO_CONCENTRATION' value='24'/>
+        <enumerator name='IIO_RESISTANCE' value='25'/>
+        <enumerator name='IIO_PH' value='26'/>
+        <enumerator name='IIO_UVINDEX' value='27'/>
+        <enumerator name='IIO_ELECTRICALCONDUCTIVITY' value='28'/>
+        <enumerator name='IIO_COUNT' value='29'/>
+        <enumerator name='IIO_INDEX' value='30'/>
+        <enumerator name='IIO_GRAVITY' value='31'/>
+        <enumerator name='IIO_POSITIONRELATIVE' value='32'/>
+        <enumerator name='IIO_PHASE' value='33'/>
+        <enumerator name='IIO_MASSCONCENTRATION' value='34'/>
+      </enum-decl>
+      <pointer-type-def type-id='0590d37d' size-in-bits='64' id='098b33c1'/>
+      <pointer-type-def type-id='e1a8ec34' size-in-bits='64' id='7c9900c6'/>
+      <pointer-type-def type-id='4d1587e0' size-in-bits='64' id='07aa12a2'/>
+      <pointer-type-def type-id='ecabee4c' size-in-bits='64' id='268afde6'/>
+      <pointer-type-def type-id='56310527' size-in-bits='64' id='e78e2dfb'/>
+      <pointer-type-def type-id='6ae7a739' size-in-bits='64' id='3168497d'/>
+      <pointer-type-def type-id='0943811c' size-in-bits='64' id='adb7e86e'/>
+      <pointer-type-def type-id='85b51308' size-in-bits='64' id='c967fe0a'/>
+      <pointer-type-def type-id='11ed9d28' size-in-bits='64' id='e6bda83a'/>
+      <pointer-type-def type-id='ba66f720' size-in-bits='64' id='7ef1b01a'/>
+      <pointer-type-def type-id='13606a0e' size-in-bits='64' id='fbb36f38'/>
+      <pointer-type-def type-id='6ae427f5' size-in-bits='64' id='6cf6fae1'/>
+      <pointer-type-def type-id='47f058fa' size-in-bits='64' id='933bd96c'/>
+      <pointer-type-def type-id='6cc49e45' size-in-bits='64' id='373a5a49'/>
+      <pointer-type-def type-id='0a831e58' size-in-bits='64' id='ca9b89b2'/>
+      <pointer-type-def type-id='df510f4a' size-in-bits='64' id='763c550c'/>
+      <pointer-type-def type-id='1f79e9b9' size-in-bits='64' id='d3d1201d'/>
+      <pointer-type-def type-id='daa6240b' size-in-bits='64' id='b7f77f1f'/>
+      <pointer-type-def type-id='fba20e52' size-in-bits='64' id='247cd24c'/>
+      <pointer-type-def type-id='bcb69272' size-in-bits='64' id='9778250c'/>
+      <pointer-type-def type-id='1a13292a' size-in-bits='64' id='f657670c'/>
+      <class-decl name='iio_subirq' size-in-bits='8' is-struct='yes' visibility='default' filepath='include/linux/iio/trigger.h' line='14' column='1' id='a04304a1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enabled' type-id='b50a4934' visibility='default' filepath='include/linux/iio/trigger.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/iio/iio.h' line='242' column='1' id='427f8bed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sign' type-id='a84c031d' visibility='default' filepath='include/linux/iio/iio.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='realbits' type-id='f9b06939' visibility='default' filepath='include/linux/iio/iio.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='storagebits' type-id='f9b06939' visibility='default' filepath='include/linux/iio/iio.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='shift' type-id='f9b06939' visibility='default' filepath='include/linux/iio/iio.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='repeat' type-id='f9b06939' visibility='default' filepath='include/linux/iio/iio.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='endianness' type-id='b8c1dcff' visibility='default' filepath='include/linux/iio/iio.h' line='248' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f3f76d11' size-in-bits='64' id='d2b31715'/>
+      <pointer-type-def type-id='cda9d9e5' size-in-bits='64' id='6bfc1e31'/>
+      <pointer-type-def type-id='b6577688' size-in-bits='64' id='50968132'/>
+      <qualified-type-def type-id='94e99e8e' const='yes' id='1d1afc2f'/>
+      <qualified-type-def type-id='90b8a0b3' const='yes' id='50409e76'/>
+      <enum-decl name='iio_endian' filepath='include/linux/iio/iio.h' line='27' column='1' id='b8c1dcff'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_CPU' value='0'/>
+        <enumerator name='IIO_BE' value='1'/>
+        <enumerator name='IIO_LE' value='2'/>
+      </enum-decl>
+      <class-decl name='iio_trigger_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/iio/trigger.h' line='32' column='1' id='df5f1cc8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='set_trigger_state' type-id='b8aaeb8e' visibility='default' filepath='include/linux/iio/trigger.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='try_reenable' type-id='b3d5643b' visibility='default' filepath='include/linux/iio/trigger.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='validate_device' type-id='ecbc0920' visibility='default' filepath='include/linux/iio/trigger.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2b0fb5b7' size-in-bits='64' id='b3d5643b'/>
+      <pointer-type-def type-id='a86c42ee' size-in-bits='64' id='ecbc0920'/>
+      <pointer-type-def type-id='dc03d04c' size-in-bits='64' id='b8aaeb8e'/>
+      <class-decl name='iio_chan_spec_ext_info' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='44' column='1' id='94e99e8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/iio.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='shared' type-id='89575fbb' visibility='default' filepath='include/linux/iio/iio.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read' type-id='0c7d3068' visibility='default' filepath='include/linux/iio/iio.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write' type-id='70f0fa74' visibility='default' filepath='include/linux/iio/iio.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='private' type-id='e475ab95' visibility='default' filepath='include/linux/iio/iio.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_event_spec' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='164' column='1' id='90b8a0b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='064bebb9' visibility='default' filepath='include/linux/iio/iio.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dir' type-id='180bfe06' visibility='default' filepath='include/linux/iio/iio.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask_separate' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mask_shared_by_type' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mask_shared_by_dir' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mask_shared_by_all' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iio_event_direction' filepath='include/uapi/linux/iio/types.h' line='108' column='1' id='180bfe06'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_EV_DIR_EITHER' value='0'/>
+        <enumerator name='IIO_EV_DIR_RISING' value='1'/>
+        <enumerator name='IIO_EV_DIR_FALLING' value='2'/>
+        <enumerator name='IIO_EV_DIR_NONE' value='3'/>
+      </enum-decl>
+      <enum-decl name='iio_event_type' filepath='include/uapi/linux/iio/types.h' line='99' column='1' id='064bebb9'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_EV_TYPE_THRESH' value='0'/>
+        <enumerator name='IIO_EV_TYPE_MAG' value='1'/>
+        <enumerator name='IIO_EV_TYPE_ROC' value='2'/>
+        <enumerator name='IIO_EV_TYPE_THRESH_ADAPTIVE' value='3'/>
+        <enumerator name='IIO_EV_TYPE_MAG_ADAPTIVE' value='4'/>
+        <enumerator name='IIO_EV_TYPE_CHANGE' value='5'/>
+      </enum-decl>
+      <enum-decl name='iio_shared_by' filepath='include/linux/iio/iio.h' line='20' column='1' id='89575fbb'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_SEPARATE' value='0'/>
+        <enumerator name='IIO_SHARED_BY_TYPE' value='1'/>
+        <enumerator name='IIO_SHARED_BY_DIR' value='2'/>
+        <enumerator name='IIO_SHARED_BY_ALL' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='5344bebe' size-in-bits='64' id='0c7d3068'/>
+      <pointer-type-def type-id='057e4bd2' size-in-bits='64' id='70f0fa74'/>
+      <typedef-decl name='uintptr_t' type-id='7359adad' filepath='include/linux/types.h' line='37' column='1' id='e475ab95'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/iio/industrialio-core.c' language='LANG_C89'>
+      <class-decl name='iio_event_interface' is-struct='yes' visibility='default' is-declaration-only='yes' id='a0b3876b'/>
+      <class-decl name='iio_poll_func' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='30' column='1' id='5cec8edf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='indio_dev' type-id='226853d2' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='h' type-id='3fefe9b7' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='thread' type-id='3fefe9b7' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='timestamp' type-id='9b7c55ef' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_trigger' size-in-bits='10688' is-struct='yes' visibility='default' filepath='include/linux/iio/trigger.h' line='59' column='1' id='f060e03b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='a233c137' visibility='default' filepath='include/linux/iio/trigger.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/iio/trigger.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/trigger.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/trigger.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/iio/trigger.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/trigger.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='alloc_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/trigger.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='use_count' type-id='49178f86' visibility='default' filepath='include/linux/iio/trigger.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='subirq_chip' type-id='0f5f7920' visibility='default' filepath='include/linux/iio/trigger.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='subirq_base' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/trigger.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10272'>
+          <var-decl name='subirqs' type-id='76e4cb23' visibility='default' filepath='include/linux/iio/trigger.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='pool' type-id='f066dd3c' visibility='default' filepath='include/linux/iio/trigger.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='pool_lock' type-id='925167dc' visibility='default' filepath='include/linux/iio/trigger.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='attached_own_device' type-id='b50a4934' visibility='default' filepath='include/linux/iio/trigger.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='8ff9530e' size-in-bits='448' id='db13236f'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <class-decl name='iio_dev' size-in-bits='11520' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='525' column='1' id='8c644de4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='driver_module' type-id='2730d015' visibility='default' filepath='include/linux/iio/iio.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='modes' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='currentmode' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/iio/iio.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='event_interface' type-id='f380f2bb' visibility='default' filepath='include/linux/iio/iio.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='buffer' type-id='aa9ea333' visibility='default' filepath='include/linux/iio/iio.h' line='535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='buffer_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/iio.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='scan_bytes' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='mlock' type-id='925167dc' visibility='default' filepath='include/linux/iio/iio.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='available_scan_masks' type-id='f9b37274' visibility='default' filepath='include/linux/iio/iio.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='masklength' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='active_scan_mask' type-id='f9b37274' visibility='default' filepath='include/linux/iio/iio.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='scan_timestamp' type-id='b50a4934' visibility='default' filepath='include/linux/iio/iio.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8352'>
+          <var-decl name='scan_index_timestamp' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='trig' type-id='54e54fbb' visibility='default' filepath='include/linux/iio/iio.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='trig_readonly' type-id='b50a4934' visibility='default' filepath='include/linux/iio/iio.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='pollfunc' type-id='9add1da7' visibility='default' filepath='include/linux/iio/iio.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='pollfunc_event' type-id='9add1da7' visibility='default' filepath='include/linux/iio/iio.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='channels' type-id='f74174a4' visibility='default' filepath='include/linux/iio/iio.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='num_channels' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='channel_attr_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/iio.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='chan_attr_group' type-id='e4af473b' visibility='default' filepath='include/linux/iio/iio.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/iio.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='info' type-id='62d8a75a' visibility='default' filepath='include/linux/iio/iio.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='clock_id' type-id='a1c3b834' visibility='default' filepath='include/linux/iio/iio.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='info_exist_lock' type-id='925167dc' visibility='default' filepath='include/linux/iio/iio.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='setup_ops' type-id='7597aac3' visibility='default' filepath='include/linux/iio/iio.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='chrdev' type-id='22f86352' visibility='default' filepath='include/linux/iio/iio.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='groups' type-id='db13236f' visibility='default' filepath='include/linux/iio/iio.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='groupcounter' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='debugfs_dentry' type-id='27675065' visibility='default' filepath='include/linux/iio/iio.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11456'>
+          <var-decl name='cached_reg_addr' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='568' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_buffer' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='73' column='1' id='717ee4f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='length' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bytes_per_datum' type-id='b59d7dce' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='access' type-id='56670be1' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='scan_mask' type-id='3ccc2590' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='demux_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pollq' type-id='b5ab048f' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='watermark' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='scan_el_attrs' type-id='aad24a5b' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='scan_timestamp' type-id='b50a4934' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='scan_el_dev_attr_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='buffer_group' type-id='e4af473b' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='scan_el_group' type-id='e4af473b' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='stufftoread' type-id='b50a4934' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='attrs' type-id='cd733e18' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='demux_bounce' type-id='eaa32e2f' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='buffer_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='133' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_buffer_access_funcs' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='46' column='1' id='e59f755e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='store_to' type-id='3168497d' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read_first_n' type-id='268afde6' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data_available' type-id='6bfc1e31' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='request_update' type-id='098b33c1' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_bytes_per_datum' type-id='07aa12a2' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_length' type-id='e78e2dfb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='enable' type-id='7c9900c6' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='disable' type-id='7c9900c6' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='release' type-id='50968132' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='modes' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_chan_spec' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='236' column='1' id='da58161d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='6dc73e71' visibility='default' filepath='include/linux/iio/iio.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='channel' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='channel2' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='address' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='scan_index' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='scan_type' type-id='427f8bed' visibility='default' filepath='include/linux/iio/iio.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='info_mask_separate' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='info_mask_separate_available' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='info_mask_shared_by_type' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='info_mask_shared_by_type_available' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='info_mask_shared_by_dir' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='info_mask_shared_by_dir_available' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='info_mask_shared_by_all' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='info_mask_shared_by_all_available' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='event_spec' type-id='b1b94ad4' visibility='default' filepath='include/linux/iio/iio.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='num_event_specs' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ext_info' type-id='d67abbdf' visibility='default' filepath='include/linux/iio/iio.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='extend_name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/iio.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='datasheet_name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/iio.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='modified' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='indexed' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='output' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='differential' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='266' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iio_chan_type' filepath='include/uapi/linux/iio/types.h' line='14' column='1' id='6dc73e71'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_VOLTAGE' value='0'/>
+        <enumerator name='IIO_CURRENT' value='1'/>
+        <enumerator name='IIO_POWER' value='2'/>
+        <enumerator name='IIO_ACCEL' value='3'/>
+        <enumerator name='IIO_ANGL_VEL' value='4'/>
+        <enumerator name='IIO_MAGN' value='5'/>
+        <enumerator name='IIO_LIGHT' value='6'/>
+        <enumerator name='IIO_INTENSITY' value='7'/>
+        <enumerator name='IIO_PROXIMITY' value='8'/>
+        <enumerator name='IIO_TEMP' value='9'/>
+        <enumerator name='IIO_INCLI' value='10'/>
+        <enumerator name='IIO_ROT' value='11'/>
+        <enumerator name='IIO_ANGL' value='12'/>
+        <enumerator name='IIO_TIMESTAMP' value='13'/>
+        <enumerator name='IIO_CAPACITANCE' value='14'/>
+        <enumerator name='IIO_ALTVOLTAGE' value='15'/>
+        <enumerator name='IIO_CCT' value='16'/>
+        <enumerator name='IIO_PRESSURE' value='17'/>
+        <enumerator name='IIO_HUMIDITYRELATIVE' value='18'/>
+        <enumerator name='IIO_ACTIVITY' value='19'/>
+        <enumerator name='IIO_STEPS' value='20'/>
+        <enumerator name='IIO_ENERGY' value='21'/>
+        <enumerator name='IIO_DISTANCE' value='22'/>
+        <enumerator name='IIO_VELOCITY' value='23'/>
+        <enumerator name='IIO_CONCENTRATION' value='24'/>
+        <enumerator name='IIO_RESISTANCE' value='25'/>
+        <enumerator name='IIO_PH' value='26'/>
+        <enumerator name='IIO_UVINDEX' value='27'/>
+        <enumerator name='IIO_ELECTRICALCONDUCTIVITY' value='28'/>
+        <enumerator name='IIO_COUNT' value='29'/>
+        <enumerator name='IIO_INDEX' value='30'/>
+        <enumerator name='IIO_GRAVITY' value='31'/>
+        <enumerator name='IIO_POSITIONRELATIVE' value='32'/>
+        <enumerator name='IIO_PHASE' value='33'/>
+        <enumerator name='IIO_MASSCONCENTRATION' value='34'/>
+      </enum-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/iio/iio.h' line='242' column='1' id='427f8bed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sign' type-id='a84c031d' visibility='default' filepath='include/linux/iio/iio.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='realbits' type-id='f9b06939' visibility='default' filepath='include/linux/iio/iio.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='storagebits' type-id='f9b06939' visibility='default' filepath='include/linux/iio/iio.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='shift' type-id='f9b06939' visibility='default' filepath='include/linux/iio/iio.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='repeat' type-id='f9b06939' visibility='default' filepath='include/linux/iio/iio.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='endianness' type-id='b8c1dcff' visibility='default' filepath='include/linux/iio/iio.h' line='248' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iio_endian' filepath='include/linux/iio/iio.h' line='27' column='1' id='b8c1dcff'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_CPU' value='0'/>
+        <enumerator name='IIO_BE' value='1'/>
+        <enumerator name='IIO_LE' value='2'/>
+      </enum-decl>
+      <class-decl name='iio_event_spec' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='164' column='1' id='90b8a0b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='064bebb9' visibility='default' filepath='include/linux/iio/iio.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dir' type-id='180bfe06' visibility='default' filepath='include/linux/iio/iio.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask_separate' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mask_shared_by_type' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mask_shared_by_dir' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mask_shared_by_all' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iio_event_type' filepath='include/uapi/linux/iio/types.h' line='99' column='1' id='064bebb9'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_EV_TYPE_THRESH' value='0'/>
+        <enumerator name='IIO_EV_TYPE_MAG' value='1'/>
+        <enumerator name='IIO_EV_TYPE_ROC' value='2'/>
+        <enumerator name='IIO_EV_TYPE_THRESH_ADAPTIVE' value='3'/>
+        <enumerator name='IIO_EV_TYPE_MAG_ADAPTIVE' value='4'/>
+        <enumerator name='IIO_EV_TYPE_CHANGE' value='5'/>
+      </enum-decl>
+      <enum-decl name='iio_event_direction' filepath='include/uapi/linux/iio/types.h' line='108' column='1' id='180bfe06'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_EV_DIR_EITHER' value='0'/>
+        <enumerator name='IIO_EV_DIR_RISING' value='1'/>
+        <enumerator name='IIO_EV_DIR_FALLING' value='2'/>
+        <enumerator name='IIO_EV_DIR_NONE' value='3'/>
+      </enum-decl>
+      <class-decl name='iio_chan_spec_ext_info' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='44' column='1' id='94e99e8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/iio.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='shared' type-id='89575fbb' visibility='default' filepath='include/linux/iio/iio.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read' type-id='0c7d3068' visibility='default' filepath='include/linux/iio/iio.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write' type-id='70f0fa74' visibility='default' filepath='include/linux/iio/iio.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='private' type-id='e475ab95' visibility='default' filepath='include/linux/iio/iio.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iio_shared_by' filepath='include/linux/iio/iio.h' line='20' column='1' id='89575fbb'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_SEPARATE' value='0'/>
+        <enumerator name='IIO_SHARED_BY_TYPE' value='1'/>
+        <enumerator name='IIO_SHARED_BY_DIR' value='2'/>
+        <enumerator name='IIO_SHARED_BY_ALL' value='3'/>
+      </enum-decl>
+      <typedef-decl name='uintptr_t' type-id='7359adad' filepath='include/linux/types.h' line='37' column='1' id='e475ab95'/>
+      <class-decl name='iio_info' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='393' column='1' id='49f5fd4d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event_attrs' type-id='8ff9530e' visibility='default' filepath='include/linux/iio/iio.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='attrs' type-id='8ff9530e' visibility='default' filepath='include/linux/iio/iio.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read_raw' type-id='933bd96c' visibility='default' filepath='include/linux/iio/iio.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read_raw_multi' type-id='373a5a49' visibility='default' filepath='include/linux/iio/iio.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read_avail' type-id='c967fe0a' visibility='default' filepath='include/linux/iio/iio.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write_raw' type-id='ca9b89b2' visibility='default' filepath='include/linux/iio/iio.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write_raw_get_fmt' type-id='763c550c' visibility='default' filepath='include/linux/iio/iio.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='read_event_config' type-id='e6bda83a' visibility='default' filepath='include/linux/iio/iio.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='write_event_config' type-id='6cf6fae1' visibility='default' filepath='include/linux/iio/iio.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='read_event_value' type-id='7ef1b01a' visibility='default' filepath='include/linux/iio/iio.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='write_event_value' type-id='fbb36f38' visibility='default' filepath='include/linux/iio/iio.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='validate_trigger' type-id='247cd24c' visibility='default' filepath='include/linux/iio/iio.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='update_scan_mode' type-id='b7f77f1f' visibility='default' filepath='include/linux/iio/iio.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='debugfs_reg_access' type-id='f657670c' visibility='default' filepath='include/linux/iio/iio.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='of_xlate' type-id='d3d1201d' visibility='default' filepath='include/linux/iio/iio.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hwfifo_set_watermark' type-id='9778250c' visibility='default' filepath='include/linux/iio/iio.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='hwfifo_flush_to_buffer' type-id='9778250c' visibility='default' filepath='include/linux/iio/iio.h' line='460' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iio_event_info' filepath='include/linux/iio/types.h' line='12' column='1' id='c67c1129'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_EV_INFO_ENABLE' value='0'/>
+        <enumerator name='IIO_EV_INFO_VALUE' value='1'/>
+        <enumerator name='IIO_EV_INFO_HYSTERESIS' value='2'/>
+        <enumerator name='IIO_EV_INFO_PERIOD' value='3'/>
+        <enumerator name='IIO_EV_INFO_HIGH_PASS_FILTER_3DB' value='4'/>
+        <enumerator name='IIO_EV_INFO_LOW_PASS_FILTER_3DB' value='5'/>
+      </enum-decl>
+      <class-decl name='iio_buffer_setup_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='474' column='1' id='36e5348a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='preenable' type-id='adb7e86e' visibility='default' filepath='include/linux/iio/iio.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='postenable' type-id='adb7e86e' visibility='default' filepath='include/linux/iio/iio.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='predisable' type-id='adb7e86e' visibility='default' filepath='include/linux/iio/iio.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='postdisable' type-id='adb7e86e' visibility='default' filepath='include/linux/iio/iio.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='validate_scan_mask' type-id='d2b31715' visibility='default' filepath='include/linux/iio/iio.h' line='479' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='cfe4f8a2' size-in-bits='64' id='cd733e18'/>
+      <qualified-type-def type-id='e59f755e' const='yes' id='81a7f511'/>
+      <pointer-type-def type-id='81a7f511' size-in-bits='64' id='56670be1'/>
+      <qualified-type-def type-id='36e5348a' const='yes' id='ea04303b'/>
+      <pointer-type-def type-id='ea04303b' size-in-bits='64' id='7597aac3'/>
+      <qualified-type-def type-id='da58161d' const='yes' id='1f8d2f66'/>
+      <pointer-type-def type-id='1f8d2f66' size-in-bits='64' id='f74174a4'/>
+      <qualified-type-def type-id='94e99e8e' const='yes' id='1d1afc2f'/>
+      <pointer-type-def type-id='1d1afc2f' size-in-bits='64' id='d67abbdf'/>
+      <qualified-type-def type-id='90b8a0b3' const='yes' id='50409e76'/>
+      <pointer-type-def type-id='50409e76' size-in-bits='64' id='b1b94ad4'/>
+      <qualified-type-def type-id='49f5fd4d' const='yes' id='02793b54'/>
+      <pointer-type-def type-id='02793b54' size-in-bits='64' id='62d8a75a'/>
+      <pointer-type-def type-id='6d60f45d' size-in-bits='64' id='a6a0d755'/>
+      <pointer-type-def type-id='717ee4f3' size-in-bits='64' id='aa9ea333'/>
+      <pointer-type-def type-id='8c644de4' size-in-bits='64' id='226853d2'/>
+      <pointer-type-def type-id='a0b3876b' size-in-bits='64' id='f380f2bb'/>
+      <pointer-type-def type-id='5cec8edf' size-in-bits='64' id='9add1da7'/>
+      <pointer-type-def type-id='f060e03b' size-in-bits='64' id='54e54fbb'/>
+      <pointer-type-def type-id='0590d37d' size-in-bits='64' id='098b33c1'/>
+      <pointer-type-def type-id='e1a8ec34' size-in-bits='64' id='7c9900c6'/>
+      <pointer-type-def type-id='4d1587e0' size-in-bits='64' id='07aa12a2'/>
+      <pointer-type-def type-id='ecabee4c' size-in-bits='64' id='268afde6'/>
+      <pointer-type-def type-id='56310527' size-in-bits='64' id='e78e2dfb'/>
+      <pointer-type-def type-id='6ae7a739' size-in-bits='64' id='3168497d'/>
+      <pointer-type-def type-id='0943811c' size-in-bits='64' id='adb7e86e'/>
+      <pointer-type-def type-id='85b51308' size-in-bits='64' id='c967fe0a'/>
+      <pointer-type-def type-id='11ed9d28' size-in-bits='64' id='e6bda83a'/>
+      <pointer-type-def type-id='ba66f720' size-in-bits='64' id='7ef1b01a'/>
+      <pointer-type-def type-id='13606a0e' size-in-bits='64' id='fbb36f38'/>
+      <pointer-type-def type-id='6ae427f5' size-in-bits='64' id='6cf6fae1'/>
+      <pointer-type-def type-id='47f058fa' size-in-bits='64' id='933bd96c'/>
+      <pointer-type-def type-id='6cc49e45' size-in-bits='64' id='373a5a49'/>
+      <pointer-type-def type-id='0a831e58' size-in-bits='64' id='ca9b89b2'/>
+      <pointer-type-def type-id='df510f4a' size-in-bits='64' id='763c550c'/>
+      <pointer-type-def type-id='1f79e9b9' size-in-bits='64' id='d3d1201d'/>
+      <pointer-type-def type-id='daa6240b' size-in-bits='64' id='b7f77f1f'/>
+      <pointer-type-def type-id='fba20e52' size-in-bits='64' id='247cd24c'/>
+      <pointer-type-def type-id='bcb69272' size-in-bits='64' id='9778250c'/>
+      <pointer-type-def type-id='1a13292a' size-in-bits='64' id='f657670c'/>
+      <pointer-type-def type-id='f3f76d11' size-in-bits='64' id='d2b31715'/>
+      <pointer-type-def type-id='cda9d9e5' size-in-bits='64' id='6bfc1e31'/>
+      <pointer-type-def type-id='5344bebe' size-in-bits='64' id='0c7d3068'/>
+      <pointer-type-def type-id='057e4bd2' size-in-bits='64' id='70f0fa74'/>
+      <pointer-type-def type-id='b6577688' size-in-bits='64' id='50968132'/>
+      <function-decl name='iio_device_alloc' mangled-name='iio_device_alloc' filepath='drivers/iio/industrialio-core.c' line='1426' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_device_alloc'>
+        <parameter type-id='95e97e5e' name='sizeof_priv' filepath='drivers/iio/industrialio-core.c' line='1426' column='1'/>
+        <return type-id='226853d2'/>
+      </function-decl>
+      <function-decl name='iio_buffer_put' mangled-name='iio_buffer_put' filepath='include/linux/iio/buffer_impl.h' line='155' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_buffer_put'>
+        <parameter type-id='aa9ea333'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iio_device_free' mangled-name='iio_device_free' filepath='drivers/iio/industrialio-core.c' line='1470' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_device_free'>
+        <parameter type-id='226853d2' name='dev' filepath='drivers/iio/industrialio-core.c' line='1470' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_iio_device_alloc' mangled-name='devm_iio_device_alloc' filepath='drivers/iio/industrialio-core.c' line='1507' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_iio_device_alloc'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iio/industrialio-core.c' line='1507' column='1'/>
+        <parameter type-id='95e97e5e' name='sizeof_priv' filepath='drivers/iio/industrialio-core.c' line='1507' column='1'/>
+        <return type-id='226853d2'/>
+      </function-decl>
+      <function-decl name='__iio_device_register' mangled-name='__iio_device_register' filepath='drivers/iio/industrialio-core.c' line='1643' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__iio_device_register'>
+        <parameter type-id='226853d2' name='indio_dev' filepath='drivers/iio/industrialio-core.c' line='1643' column='1'/>
+        <parameter type-id='2730d015' name='this_mod' filepath='drivers/iio/industrialio-core.c' line='1643' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iio_device_unregister' mangled-name='iio_device_unregister' filepath='drivers/iio/industrialio-core.c' line='1716' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_device_unregister'>
+        <parameter type-id='226853d2' name='indio_dev' filepath='drivers/iio/industrialio-core.c' line='1716' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__devm_iio_device_register' mangled-name='__devm_iio_device_register' filepath='drivers/iio/industrialio-core.c' line='1742' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__devm_iio_device_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iio/industrialio-core.c' line='1742' column='1'/>
+        <parameter type-id='226853d2' name='indio_dev' filepath='drivers/iio/industrialio-core.c' line='1742' column='1'/>
+        <parameter type-id='2730d015' name='this_mod' filepath='drivers/iio/industrialio-core.c' line='1743' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='2448a865' size-in-bits='64' id='6d60f45d'/>
+      <function-type size-in-bits='64' id='0590d37d'>
+        <parameter type-id='aa9ea333'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e1a8ec34'>
+        <parameter type-id='aa9ea333'/>
+        <parameter type-id='226853d2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4d1587e0'>
+        <parameter type-id='aa9ea333'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ecabee4c'>
+        <parameter type-id='aa9ea333'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='56310527'>
+        <parameter type-id='aa9ea333'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6ae7a739'>
+        <parameter type-id='aa9ea333'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0943811c'>
+        <parameter type-id='226853d2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='85b51308'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='a6a0d755'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='11ed9d28'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='064bebb9'/>
+        <parameter type-id='180bfe06'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ba66f720'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='064bebb9'/>
+        <parameter type-id='180bfe06'/>
+        <parameter type-id='c67c1129'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='13606a0e'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='064bebb9'/>
+        <parameter type-id='180bfe06'/>
+        <parameter type-id='c67c1129'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6ae427f5'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='064bebb9'/>
+        <parameter type-id='180bfe06'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='47f058fa'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6cc49e45'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0a831e58'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='df510f4a'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1f79e9b9'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='af02a266'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='daa6240b'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f9b37274'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fba20e52'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='54e54fbb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bcb69272'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1a13292a'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f3f76d11'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f9b37274'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cda9d9e5'>
+        <parameter type-id='aa9ea333'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5344bebe'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='e475ab95'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='057e4bd2'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='e475ab95'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b6577688'>
+        <parameter type-id='aa9ea333'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='bde36be8' size-in-bits='64' id='af02a266'/>
+      <qualified-type-def type-id='fbff4263' const='yes' id='bde36be8'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/iio/industrialio-trigger.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='a04304a1' size-in-bits='16' id='76e4cb23'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='iio_trigger_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/iio/trigger.h' line='32' column='1' id='df5f1cc8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='set_trigger_state' type-id='b8aaeb8e' visibility='default' filepath='include/linux/iio/trigger.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='try_reenable' type-id='b3d5643b' visibility='default' filepath='include/linux/iio/trigger.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='validate_device' type-id='ecbc0920' visibility='default' filepath='include/linux/iio/trigger.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_subirq' size-in-bits='8' is-struct='yes' visibility='default' filepath='include/linux/iio/trigger.h' line='14' column='1' id='a04304a1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enabled' type-id='b50a4934' visibility='default' filepath='include/linux/iio/trigger.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='df5f1cc8' const='yes' id='152c9867'/>
+      <pointer-type-def type-id='152c9867' size-in-bits='64' id='a233c137'/>
+      <pointer-type-def type-id='2b0fb5b7' size-in-bits='64' id='b3d5643b'/>
+      <pointer-type-def type-id='a86c42ee' size-in-bits='64' id='ecbc0920'/>
+      <pointer-type-def type-id='dc03d04c' size-in-bits='64' id='b8aaeb8e'/>
+      <function-decl name='__iio_trigger_register' mangled-name='__iio_trigger_register' filepath='drivers/iio/industrialio-trigger.c' line='66' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__iio_trigger_register'>
+        <parameter type-id='54e54fbb' name='trig_info' filepath='drivers/iio/industrialio-trigger.c' line='66' column='1'/>
+        <parameter type-id='2730d015' name='this_mod' filepath='drivers/iio/industrialio-trigger.c' line='67' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iio_trigger_unregister' mangled-name='iio_trigger_unregister' filepath='drivers/iio/industrialio-trigger.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_trigger_unregister'>
+        <parameter type-id='54e54fbb' name='trig_info' filepath='drivers/iio/industrialio-trigger.c' line='106' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iio_trigger_poll' mangled-name='iio_trigger_poll' filepath='drivers/iio/industrialio-trigger.c' line='162' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_trigger_poll'>
+        <parameter type-id='54e54fbb' name='trig' filepath='drivers/iio/industrialio-trigger.c' line='162' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iio_trigger_notify_done' mangled-name='iio_trigger_notify_done' filepath='drivers/iio/industrialio-trigger.c' line='203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_trigger_notify_done'>
+        <parameter type-id='54e54fbb' name='trig' filepath='drivers/iio/industrialio-trigger.c' line='203' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iio_pollfunc_store_time' mangled-name='iio_pollfunc_store_time' filepath='drivers/iio/industrialio-trigger.c' line='315' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_pollfunc_store_time'>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/iio/industrialio-trigger.c' line='315' column='1'/>
+        <parameter type-id='eaa32e2f' name='p' filepath='drivers/iio/industrialio-trigger.c' line='315' column='1'/>
+        <return type-id='4bdecfd7'/>
+      </function-decl>
+      <function-decl name='iio_alloc_pollfunc' mangled-name='iio_alloc_pollfunc' filepath='drivers/iio/industrialio-trigger.c' line='324' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_alloc_pollfunc'>
+        <parameter type-id='3fefe9b7' name='h' filepath='drivers/iio/industrialio-trigger.c' line='324' column='1'/>
+        <parameter type-id='3fefe9b7' name='thread' filepath='drivers/iio/industrialio-trigger.c' line='325' column='1'/>
+        <parameter type-id='95e97e5e' name='type' filepath='drivers/iio/industrialio-trigger.c' line='326' column='1'/>
+        <parameter type-id='226853d2' name='indio_dev' filepath='drivers/iio/industrialio-trigger.c' line='327' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/iio/industrialio-trigger.c' line='328' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='9add1da7'/>
+      </function-decl>
+      <function-decl name='iio_dealloc_pollfunc' mangled-name='iio_dealloc_pollfunc' filepath='drivers/iio/industrialio-trigger.c' line='353' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_dealloc_pollfunc'>
+        <parameter type-id='9add1da7' name='pf' filepath='drivers/iio/industrialio-trigger.c' line='353' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iio_trigger_alloc' mangled-name='iio_trigger_alloc' filepath='drivers/iio/industrialio-trigger.c' line='563' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_trigger_alloc'>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/iio/industrialio-trigger.c' line='563' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='54e54fbb'/>
+      </function-decl>
+      <function-decl name='iio_trigger_free' mangled-name='iio_trigger_free' filepath='drivers/iio/industrialio-trigger.c' line='576' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_trigger_free'>
+        <parameter type-id='54e54fbb' name='trig' filepath='drivers/iio/industrialio-trigger.c' line='576' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iio_triggered_buffer_postenable' mangled-name='iio_triggered_buffer_postenable' filepath='drivers/iio/industrialio-trigger.c' line='762' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_triggered_buffer_postenable'>
+        <parameter type-id='226853d2' name='indio_dev' filepath='drivers/iio/industrialio-trigger.c' line='762' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iio_triggered_buffer_predisable' mangled-name='iio_triggered_buffer_predisable' filepath='drivers/iio/industrialio-trigger.c' line='769' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_triggered_buffer_predisable'>
+        <parameter type-id='226853d2' name='indio_dev' filepath='drivers/iio/industrialio-trigger.c' line='769' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='2b0fb5b7'>
+        <parameter type-id='54e54fbb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a86c42ee'>
+        <parameter type-id='54e54fbb'/>
+        <parameter type-id='226853d2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dc03d04c'>
+        <parameter type-id='54e54fbb'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <typedef-decl name='irqreturn_t' type-id='8086ea38' filepath='include/linux/irqreturn.h' line='17' column='1' id='4bdecfd7'/>
+      <enum-decl name='irqreturn' filepath='include/linux/irqreturn.h' line='11' column='1' id='8086ea38'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IRQ_NONE' value='0'/>
+        <enumerator name='IRQ_HANDLED' value='1'/>
+        <enumerator name='IRQ_WAKE_THREAD' value='2'/>
+      </enum-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/iio/inkern.c' language='LANG_C89'>
+      <class-decl name='file_operations' is-struct='yes' visibility='default' is-declaration-only='yes' id='7dffcde3'/>
+      <class-decl name='iio_channel' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/iio/consumer.h' line='23' column='1' id='63a6e12c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='indio_dev' type-id='226853d2' visibility='default' filepath='include/linux/iio/consumer.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='channel' type-id='f74174a4' visibility='default' filepath='include/linux/iio/consumer.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/iio/consumer.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iio_chan_info_enum' filepath='include/linux/iio/types.h' line='34' column='1' id='cda049ab'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_CHAN_INFO_RAW' value='0'/>
+        <enumerator name='IIO_CHAN_INFO_PROCESSED' value='1'/>
+        <enumerator name='IIO_CHAN_INFO_SCALE' value='2'/>
+        <enumerator name='IIO_CHAN_INFO_OFFSET' value='3'/>
+        <enumerator name='IIO_CHAN_INFO_CALIBSCALE' value='4'/>
+        <enumerator name='IIO_CHAN_INFO_CALIBBIAS' value='5'/>
+        <enumerator name='IIO_CHAN_INFO_PEAK' value='6'/>
+        <enumerator name='IIO_CHAN_INFO_PEAK_SCALE' value='7'/>
+        <enumerator name='IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW' value='8'/>
+        <enumerator name='IIO_CHAN_INFO_AVERAGE_RAW' value='9'/>
+        <enumerator name='IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY' value='10'/>
+        <enumerator name='IIO_CHAN_INFO_HIGH_PASS_FILTER_3DB_FREQUENCY' value='11'/>
+        <enumerator name='IIO_CHAN_INFO_SAMP_FREQ' value='12'/>
+        <enumerator name='IIO_CHAN_INFO_FREQUENCY' value='13'/>
+        <enumerator name='IIO_CHAN_INFO_PHASE' value='14'/>
+        <enumerator name='IIO_CHAN_INFO_HARDWAREGAIN' value='15'/>
+        <enumerator name='IIO_CHAN_INFO_HYSTERESIS' value='16'/>
+        <enumerator name='IIO_CHAN_INFO_INT_TIME' value='17'/>
+        <enumerator name='IIO_CHAN_INFO_ENABLE' value='18'/>
+        <enumerator name='IIO_CHAN_INFO_CALIBHEIGHT' value='19'/>
+        <enumerator name='IIO_CHAN_INFO_CALIBWEIGHT' value='20'/>
+        <enumerator name='IIO_CHAN_INFO_DEBOUNCE_COUNT' value='21'/>
+        <enumerator name='IIO_CHAN_INFO_DEBOUNCE_TIME' value='22'/>
+        <enumerator name='IIO_CHAN_INFO_CALIBEMISSIVITY' value='23'/>
+        <enumerator name='IIO_CHAN_INFO_OVERSAMPLING_RATIO' value='24'/>
+      </enum-decl>
+      <qualified-type-def type-id='7dffcde3' const='yes' id='b8ae588e'/>
+      <pointer-type-def type-id='b8ae588e' size-in-bits='64' id='61758ee6'/>
+      <pointer-type-def type-id='63a6e12c' size-in-bits='64' id='2712709a'/>
+      <function-decl name='iio_channel_get' mangled-name='iio_channel_get' filepath='drivers/iio/inkern.c' line='330' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_channel_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iio/inkern.c' line='330' column='1'/>
+        <parameter type-id='80f4b756' name='channel_name' filepath='drivers/iio/inkern.c' line='331' column='1'/>
+        <return type-id='2712709a'/>
+      </function-decl>
+      <function-decl name='iio_channel_release' mangled-name='iio_channel_release' filepath='drivers/iio/inkern.c' line='347' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_channel_release'>
+        <parameter type-id='2712709a' name='channel' filepath='drivers/iio/inkern.c' line='347' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_iio_channel_get' mangled-name='devm_iio_channel_get' filepath='drivers/iio/inkern.c' line='375' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_iio_channel_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iio/inkern.c' line='375' column='1'/>
+        <parameter type-id='80f4b756' name='channel_name' filepath='drivers/iio/inkern.c' line='376' column='1'/>
+        <return type-id='2712709a'/>
+      </function-decl>
+      <function-decl name='iio_read_channel_raw' mangled-name='iio_read_channel_raw' filepath='drivers/iio/inkern.c' line='552' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_read_channel_raw'>
+        <parameter type-id='2712709a' name='chan' filepath='drivers/iio/inkern.c' line='552' column='1'/>
+        <parameter type-id='7292109c' name='val' filepath='drivers/iio/inkern.c' line='552' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iio_read_channel_processed' mangled-name='iio_read_channel_processed' filepath='drivers/iio/inkern.c' line='689' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_read_channel_processed'>
+        <parameter type-id='2712709a' name='chan' filepath='drivers/iio/inkern.c' line='689' column='1'/>
+        <parameter type-id='7292109c' name='val' filepath='drivers/iio/inkern.c' line='689' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iio_write_channel_attribute' mangled-name='iio_write_channel_attribute' filepath='drivers/iio/inkern.c' line='862' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_write_channel_attribute'>
+        <parameter type-id='2712709a' name='chan' filepath='drivers/iio/inkern.c' line='862' column='1'/>
+        <parameter type-id='95e97e5e' name='val' filepath='drivers/iio/inkern.c' line='862' column='1'/>
+        <parameter type-id='95e97e5e' name='val2' filepath='drivers/iio/inkern.c' line='862' column='1'/>
+        <parameter type-id='cda049ab' name='attribute' filepath='drivers/iio/inkern.c' line='863' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/input/evdev.c' language='LANG_C89'>
+      <pointer-type-def type-id='5bb9c75d' size-in-bits='64' id='dc750055'/>
+      <function-decl name='dev_set_name' mangled-name='dev_set_name' filepath='include/linux/device.h' line='1415' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_set_name'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='get_device' mangled-name='get_device' filepath='include/linux/device.h' line='1708' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_device'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='device_initialize' mangled-name='device_initialize' filepath='include/linux/device.h' line='1576' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_initialize'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cdev_init' mangled-name='cdev_init' filepath='include/linux/cdev.h' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdev_init'>
+        <parameter type-id='3e6eb93a'/>
+        <parameter type-id='61758ee5'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cdev_device_add' mangled-name='cdev_device_add' filepath='include/linux/cdev.h' line='32' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdev_device_add'>
+        <parameter type-id='3e6eb93a'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cdev_device_del' mangled-name='cdev_device_del' filepath='include/linux/cdev.h' line='33' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdev_device_del'>
+        <parameter type-id='3e6eb93a'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kill_fasync' mangled-name='kill_fasync' filepath='include/linux/fs.h' line='1387' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kill_fasync'>
+        <parameter type-id='dc750055'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mutex_lock_interruptible' mangled-name='mutex_lock_interruptible' filepath='include/linux/mutex.h' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_lock_interruptible'>
+        <parameter type-id='e0ea832a'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='stream_open' mangled-name='stream_open' filepath='include/linux/fs.h' line='3242' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='stream_open'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bitmap_free' mangled-name='bitmap_free' filepath='include/linux/bitmap.h' line='113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bitmap_free'>
+        <parameter type-id='f9b37274'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='fasync_helper' mangled-name='fasync_helper' filepath='include/linux/fs.h' line='1380' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fasync_helper'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='dc750055'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bitmap_zalloc' mangled-name='bitmap_zalloc' filepath='include/linux/bitmap.h' line='112' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bitmap_zalloc'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='1d2c2b85'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/input/input-leds.c' language='LANG_C89'>
+      <class-decl name='input_dev_poller' is-struct='yes' visibility='default' is-declaration-only='yes' id='5c32afaa'/>
+      <class-decl name='input_mt' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/input/mt.h' line='43' column='1' id='d995db0d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='trkid' type-id='95e97e5e' visibility='default' filepath='include/linux/input/mt.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num_slots' type-id='95e97e5e' visibility='default' filepath='include/linux/input/mt.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='slot' type-id='95e97e5e' visibility='default' filepath='include/linux/input/mt.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/input/mt.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='frame' type-id='f0981eeb' visibility='default' filepath='include/linux/input/mt.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='red' type-id='7292109c' visibility='default' filepath='include/linux/input/mt.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='slots' type-id='5ef3b2ba' visibility='default' filepath='include/linux/input/mt.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='84fc83c5' size-in-bits='192' id='1c159d57'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='77e79a4b' size-in-bits='infinite' id='5e8a3097'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0791d6c8' size-in-bits='768' id='88b5427c'>
+        <subrange length='12' type-id='7ff19f0f' id='84827bdc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0791d6c8' size-in-bits='64' id='43f871d4'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0791d6c8' size-in-bits='128' id='43f0230f'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='fbc017ef' size-in-bits='192' id='728c8299'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <class-decl name='input_handler' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='302' column='1' id='0be82508'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/input.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='event' type-id='37a787dc' visibility='default' filepath='include/linux/input.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='events' type-id='ddacdfe6' visibility='default' filepath='include/linux/input.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='filter' type-id='95325033' visibility='default' filepath='include/linux/input.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='match' type-id='ff015e22' visibility='default' filepath='include/linux/input.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='connect' type-id='5c6fb334' visibility='default' filepath='include/linux/input.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='disconnect' type-id='3e15391d' visibility='default' filepath='include/linux/input.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='start' type-id='3e15391d' visibility='default' filepath='include/linux/input.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='legacy_minors' type-id='b50a4934' visibility='default' filepath='include/linux/input.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/linux/input.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='id_table' type-id='cf2e76b1' visibility='default' filepath='include/linux/input.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='h_list' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='322' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_handle' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='337' column='1' id='18448baa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/input.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open' type-id='95e97e5e' visibility='default' filepath='include/linux/input.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='74b427eb' visibility='default' filepath='include/linux/input.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='handler' type-id='4938abae' visibility='default' filepath='include/linux/input.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='d_node' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='h_node' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='348' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_dev' size-in-bits='12480' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='131' column='1' id='2e443c2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phys' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uniq' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='d99ed569' visibility='default' filepath='include/linux/input.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='propbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='evbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='keybit' type-id='d2b016f4' visibility='default' filepath='include/linux/input.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='relbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='absbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mscbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ledbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='sndbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ffbit' type-id='f05e8e77' visibility='default' filepath='include/linux/input.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='swbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='hint_events_per_packet' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='keycodemax' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='keycodesize' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='keycode' type-id='eaa32e2f' visibility='default' filepath='include/linux/input.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='setkeycode' type-id='bc9b7fcd' visibility='default' filepath='include/linux/input.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='getkeycode' type-id='94ce875a' visibility='default' filepath='include/linux/input.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ff' type-id='4a3a4f46' visibility='default' filepath='include/linux/input.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='poller' type-id='3b8264a8' visibility='default' filepath='include/linux/input.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='repeat_key' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/linux/input.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='rep' type-id='e4266c7e' visibility='default' filepath='include/linux/input.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='mt' type-id='bf68c5dd' visibility='default' filepath='include/linux/input.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='absinfo' type-id='5c7f23c6' visibility='default' filepath='include/linux/input.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='key' type-id='d2b016f4' visibility='default' filepath='include/linux/input.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='led' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='snd' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='sw' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='open' type-id='2f59f71f' visibility='default' filepath='include/linux/input.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='close' type-id='b44880ea' visibility='default' filepath='include/linux/input.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='flush' type-id='3cf704a7' visibility='default' filepath='include/linux/input.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='event' type-id='49091f8e' visibility='default' filepath='include/linux/input.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='grab' type-id='bef1b918' visibility='default' filepath='include/linux/input.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='event_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/input.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/input.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='users' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4448'>
+          <var-decl name='going_away' type-id='b50a4934' visibility='default' filepath='include/linux/input.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/input.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='h_list' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='num_vals' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12128'>
+          <var-decl name='max_vals' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='vals' type-id='d09656fd' visibility='default' filepath='include/linux/input.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='devres_managed' type-id='b50a4934' visibility='default' filepath='include/linux/input.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='timestamp' type-id='728c8299' visibility='default' filepath='include/linux/input.h' line='203' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_id' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='59' column='1' id='d99ed569'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bustype' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='vendor' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='product' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='version' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_keymap_entry' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='114' column='1' id='1731e728'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/input.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='len' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/input.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='index' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='keycode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/input.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='scancode' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/input.h' line='120' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_device' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='533' column='1' id='bccc4180'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='upload' type-id='a13b38d7' visibility='default' filepath='include/linux/input.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='erase' type-id='9589d936' visibility='default' filepath='include/linux/input.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='playback' type-id='feb3b3dd' visibility='default' filepath='include/linux/input.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_gain' type-id='1e82f767' visibility='default' filepath='include/linux/input.h' line='539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_autocenter' type-id='1e82f767' visibility='default' filepath='include/linux/input.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='destroy' type-id='bf55f18b' visibility='default' filepath='include/linux/input.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/input.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ffbit' type-id='f05e8e77' visibility='default' filepath='include/linux/input.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/input.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='max_effects' type-id='95e97e5e' visibility='default' filepath='include/linux/input.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='effects' type-id='98b22793' visibility='default' filepath='include/linux/input.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='effect_owners' type-id='5e8a3097' visibility='default' filepath='include/linux/input.h' line='552' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_effect' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='450' column='1' id='0c6ad5d3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='id' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='direction' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='trigger' type-id='bd8e6f06' visibility='default' filepath='include/uapi/linux/input.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='replay' type-id='74a8f9e9' visibility='default' filepath='include/uapi/linux/input.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='u' type-id='af36d098' visibility='default' filepath='include/uapi/linux/input.h' line='463' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_trigger' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='316' column='1' id='bd8e6f06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='button' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='interval' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='318' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_replay' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='306' column='1' id='74a8f9e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='length' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='delay' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='308' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/input.h' line='457' column='1' id='af36d098'>
+        <data-member access='private'>
+          <var-decl name='constant' type-id='777eafbe' visibility='default' filepath='include/uapi/linux/input.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ramp' type-id='83c35232' visibility='default' filepath='include/uapi/linux/input.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='periodic' type-id='106cd915' visibility='default' filepath='include/uapi/linux/input.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='condition' type-id='1c159d57' visibility='default' filepath='include/uapi/linux/input.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rumble' type-id='6e5c8c15' visibility='default' filepath='include/uapi/linux/input.h' line='462' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='ff_constant_effect' size-in-bits='80' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='345' column='1' id='777eafbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='level' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='envelope' type-id='95dfde06' visibility='default' filepath='include/uapi/linux/input.h' line='347' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_envelope' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='333' column='1' id='95dfde06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attack_length' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='attack_level' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fade_length' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='fade_level' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_ramp_effect' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='356' column='1' id='83c35232'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_level' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='end_level' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='envelope' type-id='95dfde06' visibility='default' filepath='include/uapi/linux/input.h' line='359' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_periodic_effect' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='401' column='1' id='106cd915'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='waveform' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='period' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='magnitude' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='offset' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phase' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='envelope' type-id='95dfde06' visibility='default' filepath='include/uapi/linux/input.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='custom_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/input.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='custom_data' type-id='54c34bcf' visibility='default' filepath='include/uapi/linux/input.h' line='411' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_condition_effect' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='372' column='1' id='84fc83c5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='right_saturation' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='left_saturation' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='right_coeff' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='left_coeff' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='deadband' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='center' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='380' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_rumble_effect' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='422' column='1' id='6e5c8c15'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='strong_magnitude' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='weak_magnitude' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='424' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_absinfo' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='90' column='1' id='a7b3c380'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='minimum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='maximum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fuzz' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flat' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='resolution' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_value' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='32' column='1' id='c058e0bd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='d315442e' visibility='default' filepath='include/linux/input.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='code' type-id='d315442e' visibility='default' filepath='include/linux/input.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='value' type-id='3158a266' visibility='default' filepath='include/linux/input.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_device_id' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='340' column='1' id='1d6edf8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bustype' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='vendor' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='product' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='version' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='evbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='keybit' type-id='88b5427c' visibility='default' filepath='include/linux/mod_devicetable.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='relbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='absbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mscbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ledbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='sndbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ffbit' type-id='43f0230f' visibility='default' filepath='include/linux/mod_devicetable.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='swbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='propbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='driver_info' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='360' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='led_classdev' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/linux/leds.h' line='58' column='1' id='6e0e17b0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='brightness' type-id='fa598f35' visibility='default' filepath='include/linux/leds.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_brightness' type-id='fa598f35' visibility='default' filepath='include/linux/leds.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/leds.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='work_flags' type-id='7359adad' visibility='default' filepath='include/linux/leds.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='brightness_set' type-id='971a91c1' visibility='default' filepath='include/linux/leds.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='brightness_set_blocking' type-id='07e65680' visibility='default' filepath='include/linux/leds.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='brightness_get' type-id='a91f7d05' visibility='default' filepath='include/linux/leds.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='blink_set' type-id='adaf1c08' visibility='default' filepath='include/linux/leds.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pattern_set' type-id='e9f2f0c0' visibility='default' filepath='include/linux/leds.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pattern_clear' type-id='0904d108' visibility='default' filepath='include/linux/leds.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/leds.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/leds.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/leds.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='default_trigger' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='blink_delay_on' type-id='7359adad' visibility='default' filepath='include/linux/leds.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='blink_delay_off' type-id='7359adad' visibility='default' filepath='include/linux/leds.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='blink_timer' type-id='abe41e67' visibility='default' filepath='include/linux/leds.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='blink_brightness' type-id='95e97e5e' visibility='default' filepath='include/linux/leds.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='new_blink_brightness' type-id='95e97e5e' visibility='default' filepath='include/linux/leds.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='flash_resume' type-id='749654e7' visibility='default' filepath='include/linux/leds.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='set_brightness_work' type-id='ef9025d0' visibility='default' filepath='include/linux/leds.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='delayed_set_value' type-id='95e97e5e' visibility='default' filepath='include/linux/leds.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='trigger_lock' type-id='f19fdb93' visibility='default' filepath='include/linux/leds.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='trigger' type-id='db6d90a1' visibility='default' filepath='include/linux/leds.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='trig_list' type-id='72f469ec' visibility='default' filepath='include/linux/leds.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='trigger_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/leds.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='activated' type-id='b50a4934' visibility='default' filepath='include/linux/leds.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='led_access' type-id='925167dc' visibility='default' filepath='include/linux/leds.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='led_brightness' filepath='include/linux/leds.h' line='27' column='1' id='fa598f35'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='LED_OFF' value='0'/>
+        <enumerator name='LED_ON' value='1'/>
+        <enumerator name='LED_HALF' value='127'/>
+        <enumerator name='LED_FULL' value='255'/>
+      </enum-decl>
+      <class-decl name='led_pattern' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/leds.h' line='574' column='1' id='de7f2597'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='delta_t' type-id='19c2251e' visibility='default' filepath='include/linux/leds.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='brightness' type-id='95e97e5e' visibility='default' filepath='include/linux/leds.h' line='576' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='led_trigger' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/leds.h' line='338' column='1' id='7bcbad99'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='activate' type-id='0904d108' visibility='default' filepath='include/linux/leds.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='deactivate' type-id='749654e7' visibility='default' filepath='include/linux/leds.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='leddev_list_lock' type-id='ac16795b' visibility='default' filepath='include/linux/leds.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='led_cdevs' type-id='72f469ec' visibility='default' filepath='include/linux/leds.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='next_trig' type-id='72f469ec' visibility='default' filepath='include/linux/leds.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/leds.h' line='351' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='led_init_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/leds.h' line='34' column='1' id='fbd376ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fwnode' type-id='4a935626' visibility='default' filepath='include/linux/leds.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='default_label' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='devicename' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='devname_mandatory' type-id='b50a4934' visibility='default' filepath='include/linux/leds.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b55def60' size-in-bits='64' id='54c34bcf'/>
+      <qualified-type-def type-id='1d6edf8e' const='yes' id='c184e101'/>
+      <pointer-type-def type-id='c184e101' size-in-bits='64' id='cf2e76b1'/>
+      <qualified-type-def type-id='1731e728' const='yes' id='52c69ba9'/>
+      <pointer-type-def type-id='52c69ba9' size-in-bits='64' id='d1a6cf39'/>
+      <qualified-type-def type-id='c058e0bd' const='yes' id='ed1a1b22'/>
+      <pointer-type-def type-id='ed1a1b22' size-in-bits='64' id='48188d98'/>
+      <pointer-type-def type-id='f7c7c7f9' size-in-bits='64' id='a91f7d05'/>
+      <pointer-type-def type-id='bccc4180' size-in-bits='64' id='4a3a4f46'/>
+      <pointer-type-def type-id='0c6ad5d3' size-in-bits='64' id='98b22793'/>
+      <pointer-type-def type-id='a7b3c380' size-in-bits='64' id='5c7f23c6'/>
+      <pointer-type-def type-id='2e443c2b' size-in-bits='64' id='74b427eb'/>
+      <pointer-type-def type-id='5c32afaa' size-in-bits='64' id='3b8264a8'/>
+      <pointer-type-def type-id='18448baa' size-in-bits='64' id='bef1b918'/>
+      <pointer-type-def type-id='0be82508' size-in-bits='64' id='4938abae'/>
+      <pointer-type-def type-id='1731e728' size-in-bits='64' id='df3f4fce'/>
+      <pointer-type-def type-id='d995db0d' size-in-bits='64' id='bf68c5dd'/>
+      <pointer-type-def type-id='c058e0bd' size-in-bits='64' id='d09656fd'/>
+      <pointer-type-def type-id='7364da7b' size-in-bits='64' id='2f59f71f'/>
+      <pointer-type-def type-id='df042c09' size-in-bits='64' id='bc9b7fcd'/>
+      <pointer-type-def type-id='83c7cbd3' size-in-bits='64' id='a13b38d7'/>
+      <pointer-type-def type-id='8e3d9a4b' size-in-bits='64' id='3cf704a7'/>
+      <pointer-type-def type-id='3fdac390' size-in-bits='64' id='94ce875a'/>
+      <pointer-type-def type-id='2a0a5404' size-in-bits='64' id='9589d936'/>
+      <pointer-type-def type-id='103ba521' size-in-bits='64' id='feb3b3dd'/>
+      <pointer-type-def type-id='136c624c' size-in-bits='64' id='49091f8e'/>
+      <pointer-type-def type-id='1086c08a' size-in-bits='64' id='5c6fb334'/>
+      <pointer-type-def type-id='821e33ee' size-in-bits='64' id='0904d108'/>
+      <pointer-type-def type-id='6a0fd5a6' size-in-bits='64' id='07e65680'/>
+      <pointer-type-def type-id='fcd4ba8e' size-in-bits='64' id='e9f2f0c0'/>
+      <pointer-type-def type-id='4b04075e' size-in-bits='64' id='adaf1c08'/>
+      <pointer-type-def type-id='6e0e17b0' size-in-bits='64' id='bd1c8eb6'/>
+      <pointer-type-def type-id='fbd376ca' size-in-bits='64' id='eebb8ee8'/>
+      <pointer-type-def type-id='de7f2597' size-in-bits='64' id='e98ceb7f'/>
+      <pointer-type-def type-id='7bcbad99' size-in-bits='64' id='db6d90a1'/>
+      <pointer-type-def type-id='29964e7f' size-in-bits='64' id='95325033'/>
+      <pointer-type-def type-id='74bea618' size-in-bits='64' id='ff015e22'/>
+      <pointer-type-def type-id='00a1b58f' size-in-bits='64' id='bf55f18b'/>
+      <pointer-type-def type-id='ce79ab50' size-in-bits='64' id='b44880ea'/>
+      <pointer-type-def type-id='6356717b' size-in-bits='64' id='1e82f767'/>
+      <pointer-type-def type-id='ff3151a1' size-in-bits='64' id='3e15391d'/>
+      <pointer-type-def type-id='ff7a347c' size-in-bits='64' id='ddacdfe6'/>
+      <pointer-type-def type-id='d6ad270a' size-in-bits='64' id='37a787dc'/>
+      <pointer-type-def type-id='6dea5f13' size-in-bits='64' id='749654e7'/>
+      <pointer-type-def type-id='a373c61d' size-in-bits='64' id='971a91c1'/>
+      <function-decl name='input_unregister_handler' mangled-name='input_unregister_handler' filepath='include/linux/input.h' line='388' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_unregister_handler'>
+        <parameter type-id='4938abae'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_register_handle' mangled-name='input_register_handle' filepath='include/linux/input.h' line='397' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_register_handle'>
+        <parameter type-id='bef1b918'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='input_open_device' mangled-name='input_open_device' filepath='include/linux/input.h' line='403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_open_device'>
+        <parameter type-id='bef1b918'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='input_unregister_handle' mangled-name='input_unregister_handle' filepath='include/linux/input.h' line='398' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_unregister_handle'>
+        <parameter type-id='bef1b918'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='led_classdev_register_ext' mangled-name='led_classdev_register_ext' filepath='include/linux/leds.h' line='164' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_classdev_register_ext'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='bd1c8eb6'/>
+        <parameter type-id='eebb8ee8'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='led_classdev_unregister' mangled-name='led_classdev_unregister' filepath='include/linux/leds.h' line='193' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_classdev_unregister'>
+        <parameter type-id='bd1c8eb6'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_close_device' mangled-name='input_close_device' filepath='include/linux/input.h' line='404' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_close_device'>
+        <parameter type-id='bef1b918'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_register_handler' mangled-name='input_register_handler' filepath='include/linux/input.h' line='387' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_register_handler'>
+        <parameter type-id='4938abae'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='f7c7c7f9'>
+        <parameter type-id='bd1c8eb6'/>
+        <return type-id='fa598f35'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7364da7b'>
+        <parameter type-id='74b427eb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='df042c09'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='d1a6cf39'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='83c7cbd3'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='98b22793'/>
+        <parameter type-id='98b22793'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8e3d9a4b'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3fdac390'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='df3f4fce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2a0a5404'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='103ba521'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='136c624c'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1086c08a'>
+        <parameter type-id='4938abae'/>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='cf2e76b1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='821e33ee'>
+        <parameter type-id='bd1c8eb6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6a0fd5a6'>
+        <parameter type-id='bd1c8eb6'/>
+        <parameter type-id='fa598f35'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fcd4ba8e'>
+        <parameter type-id='bd1c8eb6'/>
+        <parameter type-id='e98ceb7f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4b04075e'>
+        <parameter type-id='bd1c8eb6'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='29964e7f'>
+        <parameter type-id='bef1b918'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='74bea618'>
+        <parameter type-id='4938abae'/>
+        <parameter type-id='74b427eb'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='00a1b58f'>
+        <parameter type-id='4a3a4f46'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ce79ab50'>
+        <parameter type-id='74b427eb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6356717b'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ff3151a1'>
+        <parameter type-id='bef1b918'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ff7a347c'>
+        <parameter type-id='bef1b918'/>
+        <parameter type-id='48188d98'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d6ad270a'>
+        <parameter type-id='bef1b918'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6dea5f13'>
+        <parameter type-id='bd1c8eb6'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a373c61d'>
+        <parameter type-id='bd1c8eb6'/>
+        <parameter type-id='fa598f35'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/input/input.c' language='LANG_C89'>
+      <function-decl name='input_scancode_to_scalar' mangled-name='input_scancode_to_scalar' filepath='drivers/input/input.c' line='763' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_scancode_to_scalar'>
+        <parameter type-id='d1a6cf39' name='ke' filepath='drivers/input/input.c' line='763' column='1'/>
+        <parameter type-id='807869d3' name='scancode' filepath='drivers/input/input.c' line='764' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='input_mt_destroy_slots' mangled-name='input_mt_destroy_slots' filepath='include/linux/input/mt.h' line='78' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_mt_destroy_slots'>
+        <parameter type-id='74b427eb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/input/joystick/xpad.c' language='LANG_C89'>
+      <function-decl name='input_set_abs_params' mangled-name='input_set_abs_params' filepath='include/linux/input.h' line='467' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_set_abs_params'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_ff_destroy' mangled-name='input_ff_destroy' filepath='include/linux/input.h' line='556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_ff_destroy'>
+        <parameter type-id='74b427eb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/input/keyboard/atkbd.c' language='LANG_C89'>
+      <function-decl name='serio_unregister_driver' mangled-name='serio_unregister_driver' filepath='include/linux/serio.h' line='107' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serio_unregister_driver'>
+        <parameter type-id='1065554a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_wakeup_dev_event' mangled-name='pm_wakeup_dev_event' filepath='include/linux/pm_wakeup.h' line='105' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_wakeup_dev_event'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_event' mangled-name='input_event' filepath='include/linux/input.h' line='411' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_event'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='serio_reconnect' mangled-name='serio_reconnect' filepath='include/linux/serio.h' line='88' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serio_reconnect'>
+        <parameter type-id='95dc69d1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_allocate_device' mangled-name='input_allocate_device' filepath='include/linux/input.h' line='351' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_allocate_device'>
+        <return type-id='74b427eb'/>
+      </function-decl>
+      <function-decl name='serio_open' mangled-name='serio_open' filepath='include/linux/serio.h' line='85' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serio_open'>
+        <parameter type-id='95dc69d1'/>
+        <parameter type-id='1065554a'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='input_register_device' mangled-name='input_register_device' filepath='include/linux/input.h' line='376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_register_device'>
+        <parameter type-id='74b427eb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='serio_close' mangled-name='serio_close' filepath='include/linux/serio.h' line='86' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serio_close'>
+        <parameter type-id='95dc69d1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_free_device' mangled-name='input_free_device' filepath='include/linux/input.h' line='353' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_free_device'>
+        <parameter type-id='74b427eb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_unregister_device' mangled-name='input_unregister_device' filepath='include/linux/input.h' line='377' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_unregister_device'>
+        <parameter type-id='74b427eb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bitmap_parselist' mangled-name='bitmap_parselist' filepath='include/linux/bitmap.h' line='183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bitmap_parselist'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='67eab439' size-in-bits='64' id='95dc69d1'/>
+      <pointer-type-def type-id='1dad932c' size-in-bits='64' id='1065554a'/>
+      <class-decl name='serio' size-in-bits='10304' is-struct='yes' visibility='default' filepath='include/linux/serio.h' line='20' column='1' id='67eab439'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/serio.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/linux/serio.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='phys' type-id='16dc656a' visibility='default' filepath='include/linux/serio.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='firmware_id' type-id='e3204322' visibility='default' filepath='include/linux/serio.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='manual_bind' type-id='b50a4934' visibility='default' filepath='include/linux/serio.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1608'>
+          <var-decl name='id' type-id='6119d604' visibility='default' filepath='include/linux/serio.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/serio.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='write' type-id='759d27dc' visibility='default' filepath='include/linux/serio.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='open' type-id='88cd8be5' visibility='default' filepath='include/linux/serio.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='close' type-id='3e5cde94' visibility='default' filepath='include/linux/serio.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='start' type-id='88cd8be5' visibility='default' filepath='include/linux/serio.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='stop' type-id='3e5cde94' visibility='default' filepath='include/linux/serio.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='parent' type-id='95dc69d1' visibility='default' filepath='include/linux/serio.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='child_node' type-id='72f469ec' visibility='default' filepath='include/linux/serio.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='include/linux/serio.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='depth' type-id='f0981eeb' visibility='default' filepath='include/linux/serio.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='drv' type-id='1065554a' visibility='default' filepath='include/linux/serio.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='drv_mutex' type-id='925167dc' visibility='default' filepath='include/linux/serio.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/serio.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/serio.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='ps2_cmd_mutex' type-id='e0ea832a' visibility='default' filepath='include/linux/serio.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='serio_driver' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/serio.h' line='67' column='1' id='1dad932c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='80f4b756' visibility='default' filepath='include/linux/serio.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id_table' type-id='3e95668f' visibility='default' filepath='include/linux/serio.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='manual_bind' type-id='b50a4934' visibility='default' filepath='include/linux/serio.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write_wakeup' type-id='3e5cde94' visibility='default' filepath='include/linux/serio.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='interrupt' type-id='a6d9ffb5' visibility='default' filepath='include/linux/serio.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='connect' type-id='3b070d34' visibility='default' filepath='include/linux/serio.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='reconnect' type-id='88cd8be5' visibility='default' filepath='include/linux/serio.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fast_reconnect' type-id='88cd8be5' visibility='default' filepath='include/linux/serio.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='disconnect' type-id='3e5cde94' visibility='default' filepath='include/linux/serio.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cleanup' type-id='3e5cde94' visibility='default' filepath='include/linux/serio.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/serio.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='add714bf' size-in-bits='64' id='3e95668f'/>
+      <pointer-type-def type-id='09fcb6b1' size-in-bits='64' id='88cd8be5'/>
+      <pointer-type-def type-id='8faf705a' size-in-bits='64' id='3b070d34'/>
+      <pointer-type-def type-id='9da48162' size-in-bits='64' id='759d27dc'/>
+      <class-decl name='serio_device_id' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='236' column='1' id='6119d604'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='extra' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='id' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='proto' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='240' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='5c07a611' size-in-bits='64' id='a6d9ffb5'/>
+      <pointer-type-def type-id='c315836a' size-in-bits='64' id='3e5cde94'/>
+      <qualified-type-def type-id='6119d604' const='yes' id='add714bf'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/input/keyboard/gpio_keys.c' language='LANG_C89'>
+      <qualified-type-def type-id='63b74212' const='yes' id='70bf28f5'/>
+      <pointer-type-def type-id='70bf28f5' size-in-bits='64' id='5bed570d'/>
+      <function-decl name='devm_input_allocate_device' mangled-name='devm_input_allocate_device' filepath='include/linux/input.h' line='352' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_input_allocate_device'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='74b427eb'/>
+      </function-decl>
+      <function-decl name='device_get_next_child_node' mangled-name='device_get_next_child_node' filepath='include/linux/property.h' line='99' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_get_next_child_node'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='4a935625'/>
+        <return type-id='4a935625'/>
+      </function-decl>
+      <function-decl name='devm_fwnode_get_index_gpiod_from_child' mangled-name='devm_fwnode_get_index_gpiod_from_child' filepath='include/linux/gpio/consumer.h' line='180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_fwnode_get_index_gpiod_from_child'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='4a935625'/>
+        <parameter type-id='38d4936d'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='26760480'/>
+      </function-decl>
+      <function-decl name='devm_gpio_request_one' mangled-name='devm_gpio_request_one' filepath='include/linux/gpio.h' line='96' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_gpio_request_one'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_is_active_low' mangled-name='gpiod_is_active_low' filepath='include/linux/gpio/consumer.h' line='163' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_is_active_low'>
+        <parameter type-id='5bed570d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_set_debounce' mangled-name='gpiod_set_debounce' filepath='include/linux/gpio/consumer.h' line='159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_set_debounce'>
+        <parameter type-id='26760480'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_to_irq' mangled-name='gpiod_to_irq' filepath='include/linux/gpio/consumer.h' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_to_irq'>
+        <parameter type-id='5bed570d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='input_set_capability' mangled-name='input_set_capability' filepath='include/linux/input.h' line='449' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_set_capability'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_request_any_context_irq' mangled-name='devm_request_any_context_irq' filepath='include/linux/interrupt.h' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_request_any_context_irq'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='ff9465c8'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_get_child_node_count' mangled-name='device_get_child_node_count' filepath='include/linux/property.h' line='116' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_get_child_node_count'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='device_property_read_string' mangled-name='device_property_read_string' filepath='include/linux/property.h' line='47' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_property_read_string'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7d3cd834'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='fwnode_property_read_u32_array' mangled-name='fwnode_property_read_u32_array' filepath='include/linux/property.h' line='61' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fwnode_property_read_u32_array'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='fwnode_property_read_string' mangled-name='fwnode_property_read_string' filepath='include/linux/property.h' line='70' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fwnode_property_read_string'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7d3cd834'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='fwnode_property_present' mangled-name='fwnode_property_present' filepath='include/linux/property.h' line='53' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fwnode_property_present'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='fwnode_handle_put' mangled-name='fwnode_handle_put' filepath='include/linux/property.h' line='112' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fwnode_handle_put'>
+        <parameter type-id='4a935625'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_set_irq_type' mangled-name='irq_set_irq_type' filepath='include/linux/irq.h' line='780' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_irq_type'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_get_value_cansleep' mangled-name='gpiod_get_value_cansleep' filepath='include/linux/gpio/consumer.h' line='138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_get_value_cansleep'>
+        <parameter type-id='5bed570d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='disable_irq' mangled-name='disable_irq' filepath='include/linux/interrupt.h' line='224' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='disable_irq'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_relax' mangled-name='pm_relax' filepath='include/linux/pm_wakeup.h' line='103' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_relax'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_stay_awake' mangled-name='pm_stay_awake' filepath='include/linux/pm_wakeup.h' line='101' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_stay_awake'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mod_delayed_work_on' mangled-name='mod_delayed_work_on' filepath='include/linux/workqueue.h' line='456' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mod_delayed_work_on'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='242e3d19'/>
+        <parameter type-id='1a7ee447'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <pointer-type-def type-id='5ad6e0ef' size-in-bits='64' id='1a7ee447'/>
+      <pointer-type-def type-id='ba05298e' size-in-bits='64' id='ff9465c8'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/input/misc/uinput.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='e0d59f72' size-in-bits='infinite' id='5ef3b2ba'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='448' id='b7c7a4a5'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <class-decl name='miscdevice' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/miscdevice.h' line='66' column='1' id='ae7d199f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/linux/miscdevice.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/miscdevice.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fops' type-id='61758ee5' visibility='default' filepath='include/linux/miscdevice.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/miscdevice.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/miscdevice.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='this_device' type-id='fa0b179b' visibility='default' filepath='include/linux/miscdevice.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/miscdevice.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='nodename' type-id='80f4b756' visibility='default' filepath='include/linux/miscdevice.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='include/linux/miscdevice.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_mt_slot' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/input/mt.h' line='27' column='1' id='e0d59f72'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='abs' type-id='b7c7a4a5' visibility='default' filepath='include/linux/input/mt.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='frame' type-id='f0981eeb' visibility='default' filepath='include/linux/input/mt.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='key' type-id='f0981eeb' visibility='default' filepath='include/linux/input/mt.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ae7d199f' size-in-bits='64' id='c63257f7'/>
+      <function-decl name='misc_deregister' mangled-name='misc_deregister' filepath='include/linux/miscdevice.h' line='79' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='misc_deregister'>
+        <parameter type-id='c63257f7'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='memdup_user' mangled-name='memdup_user' filepath='include/linux/string.h' line='13' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memdup_user'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='input_alloc_absinfo' mangled-name='input_alloc_absinfo' filepath='include/linux/input.h' line='466' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_alloc_absinfo'>
+        <parameter type-id='74b427eb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='complete' mangled-name='complete' filepath='include/linux/completion.h' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='complete'>
+        <parameter type-id='389faaf7'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_ff_create' mangled-name='input_ff_create' filepath='include/linux/input.h' line='555' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_ff_create'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='input_mt_init_slots' mangled-name='input_mt_init_slots' filepath='include/linux/input/mt.h' line='76' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_mt_init_slots'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='wait_for_completion_timeout' mangled-name='wait_for_completion_timeout' filepath='include/linux/completion.h' line='107' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wait_for_completion_timeout'>
+        <parameter type-id='389faaf7'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='misc_register' mangled-name='misc_register' filepath='include/linux/miscdevice.h' line='78' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='misc_register'>
+        <parameter type-id='c63257f7'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/input/serio/serio.c' language='LANG_C89'>
+      <function-decl name='__serio_register_port' mangled-name='__serio_register_port' filepath='drivers/input/serio/serio.c' line='695' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__serio_register_port'>
+        <parameter type-id='95dc69d1' name='serio' filepath='drivers/input/serio/serio.c' line='695' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/input/serio/serio.c' line='695' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__serio_register_driver' mangled-name='__serio_register_driver' filepath='drivers/input/serio/serio.c' line='814' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__serio_register_driver'>
+        <parameter type-id='1065554a' name='drv' filepath='drivers/input/serio/serio.c' line='814' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/input/serio/serio.c' line='814' column='1'/>
+        <parameter type-id='80f4b756' name='mod_name' filepath='drivers/input/serio/serio.c' line='814' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/input/serio/serport.c' language='LANG_C89'>
+      <class-decl name='serio' size-in-bits='10304' is-struct='yes' visibility='default' filepath='include/linux/serio.h' line='20' column='1' id='67eab439'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/serio.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/linux/serio.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='phys' type-id='16dc656a' visibility='default' filepath='include/linux/serio.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='firmware_id' type-id='e3204322' visibility='default' filepath='include/linux/serio.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='manual_bind' type-id='b50a4934' visibility='default' filepath='include/linux/serio.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1608'>
+          <var-decl name='id' type-id='6119d604' visibility='default' filepath='include/linux/serio.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/serio.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='write' type-id='759d27dc' visibility='default' filepath='include/linux/serio.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='open' type-id='88cd8be5' visibility='default' filepath='include/linux/serio.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='close' type-id='3e5cde94' visibility='default' filepath='include/linux/serio.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='start' type-id='88cd8be5' visibility='default' filepath='include/linux/serio.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='stop' type-id='3e5cde94' visibility='default' filepath='include/linux/serio.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='parent' type-id='95dc69d1' visibility='default' filepath='include/linux/serio.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='child_node' type-id='72f469ec' visibility='default' filepath='include/linux/serio.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='include/linux/serio.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='depth' type-id='f0981eeb' visibility='default' filepath='include/linux/serio.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='drv' type-id='1065554a' visibility='default' filepath='include/linux/serio.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='drv_mutex' type-id='925167dc' visibility='default' filepath='include/linux/serio.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/serio.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/serio.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='ps2_cmd_mutex' type-id='e0ea832a' visibility='default' filepath='include/linux/serio.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='serio_device_id' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='236' column='1' id='6119d604'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='extra' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='id' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='proto' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='240' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='serio_driver' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/serio.h' line='67' column='1' id='1dad932c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='80f4b756' visibility='default' filepath='include/linux/serio.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id_table' type-id='3e95668f' visibility='default' filepath='include/linux/serio.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='manual_bind' type-id='b50a4934' visibility='default' filepath='include/linux/serio.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write_wakeup' type-id='3e5cde94' visibility='default' filepath='include/linux/serio.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='interrupt' type-id='a6d9ffb5' visibility='default' filepath='include/linux/serio.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='connect' type-id='3b070d34' visibility='default' filepath='include/linux/serio.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='reconnect' type-id='88cd8be5' visibility='default' filepath='include/linux/serio.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fast_reconnect' type-id='88cd8be5' visibility='default' filepath='include/linux/serio.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='disconnect' type-id='3e5cde94' visibility='default' filepath='include/linux/serio.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cleanup' type-id='3e5cde94' visibility='default' filepath='include/linux/serio.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/serio.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='6119d604' const='yes' id='add714bf'/>
+      <pointer-type-def type-id='add714bf' size-in-bits='64' id='3e95668f'/>
+      <pointer-type-def type-id='09fcb6b1' size-in-bits='64' id='88cd8be5'/>
+      <pointer-type-def type-id='8faf705a' size-in-bits='64' id='3b070d34'/>
+      <pointer-type-def type-id='9da48162' size-in-bits='64' id='759d27dc'/>
+      <pointer-type-def type-id='67eab439' size-in-bits='64' id='95dc69d1'/>
+      <pointer-type-def type-id='1dad932c' size-in-bits='64' id='1065554a'/>
+      <pointer-type-def type-id='5c07a611' size-in-bits='64' id='a6d9ffb5'/>
+      <pointer-type-def type-id='c315836a' size-in-bits='64' id='3e5cde94'/>
+      <function-decl name='init_wait_entry' mangled-name='init_wait_entry' filepath='include/linux/wait.h' line='245' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='init_wait_entry'>
+        <parameter type-id='db9d03e3'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='prepare_to_wait_event' mangled-name='prepare_to_wait_event' filepath='include/linux/wait.h' line='1125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='prepare_to_wait_event'>
+        <parameter type-id='3f8b2ed3'/>
+        <parameter type-id='db9d03e3'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='finish_wait' mangled-name='finish_wait' filepath='include/linux/wait.h' line='1126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='finish_wait'>
+        <parameter type-id='3f8b2ed3'/>
+        <parameter type-id='db9d03e3'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='serio_unregister_port' mangled-name='serio_unregister_port' filepath='include/linux/serio.h' line='97' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serio_unregister_port'>
+        <parameter type-id='95dc69d1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='serio_interrupt' mangled-name='serio_interrupt' filepath='include/linux/serio.h' line='89' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serio_interrupt'>
+        <parameter type-id='95dc69d1'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='8086ea38'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='09fcb6b1'>
+        <parameter type-id='95dc69d1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8faf705a'>
+        <parameter type-id='95dc69d1'/>
+        <parameter type-id='1065554a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9da48162'>
+        <parameter type-id='95dc69d1'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5c07a611'>
+        <parameter type-id='95dc69d1'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='4bdecfd7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c315836a'>
+        <parameter type-id='95dc69d1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='cff07063' size-in-bits='64' id='3f8b2ed3'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/interconnect/core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='29f471c5' size-in-bits='infinite' id='ebc5312d'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='icc_node' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/interconnect-provider.h' line='76' column='1' id='c2e5ce3f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/interconnect-provider.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/interconnect-provider.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='links' type-id='c824cd57' visibility='default' filepath='include/linux/interconnect-provider.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_links' type-id='b59d7dce' visibility='default' filepath='include/linux/interconnect-provider.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='provider' type-id='e68dc824' visibility='default' filepath='include/linux/interconnect-provider.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='node_list' type-id='72f469ec' visibility='default' filepath='include/linux/interconnect-provider.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='search_list' type-id='72f469ec' visibility='default' filepath='include/linux/interconnect-provider.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reverse' type-id='18d76f87' visibility='default' filepath='include/linux/interconnect-provider.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='is_traversed' type-id='f9b06939' visibility='default' filepath='include/linux/interconnect-provider.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='req_list' type-id='e151255a' visibility='default' filepath='include/linux/interconnect-provider.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='avg_bw' type-id='19c2251e' visibility='default' filepath='include/linux/interconnect-provider.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='peak_bw' type-id='19c2251e' visibility='default' filepath='include/linux/interconnect-provider.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/interconnect-provider.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icc_provider' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/interconnect-provider.h' line='46' column='1' id='0e59314e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='provider_list' type-id='72f469ec' visibility='default' filepath='include/linux/interconnect-provider.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nodes' type-id='72f469ec' visibility='default' filepath='include/linux/interconnect-provider.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set' type-id='13229469' visibility='default' filepath='include/linux/interconnect-provider.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='aggregate' type-id='209ddc8a' visibility='default' filepath='include/linux/interconnect-provider.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pre_aggregate' type-id='17c9b422' visibility='default' filepath='include/linux/interconnect-provider.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='xlate' type-id='baffee98' visibility='default' filepath='include/linux/interconnect-provider.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/interconnect-provider.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='users' type-id='95e97e5e' visibility='default' filepath='include/linux/interconnect-provider.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/interconnect-provider.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icc_path' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/interconnect/internal.h' line='36' column='1' id='9da806d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/interconnect/internal.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_nodes' type-id='b59d7dce' visibility='default' filepath='drivers/interconnect/internal.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reqs' type-id='ebc5312d' visibility='default' filepath='drivers/interconnect/internal.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icc_req' size-in-bits='384' is-struct='yes' visibility='default' filepath='drivers/interconnect/internal.h' line='21' column='1' id='29f471c5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='req_node' type-id='03a4a074' visibility='default' filepath='drivers/interconnect/internal.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='node' type-id='18d76f87' visibility='default' filepath='drivers/interconnect/internal.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/interconnect/internal.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tag' type-id='19c2251e' visibility='default' filepath='drivers/interconnect/internal.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='avg_bw' type-id='19c2251e' visibility='default' filepath='drivers/interconnect/internal.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='peak_bw' type-id='19c2251e' visibility='default' filepath='drivers/interconnect/internal.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='c2e5ce3f' size-in-bits='64' id='18d76f87'/>
+      <pointer-type-def type-id='8695633e' size-in-bits='64' id='baffee98'/>
+      <pointer-type-def type-id='18d76f87' size-in-bits='64' id='c824cd57'/>
+      <pointer-type-def type-id='9da806d8' size-in-bits='64' id='b5fdec5e'/>
+      <pointer-type-def type-id='0e59314e' size-in-bits='64' id='e68dc824'/>
+      <pointer-type-def type-id='f3dd5585' size-in-bits='64' id='13229469'/>
+      <pointer-type-def type-id='b32e5b88' size-in-bits='64' id='209ddc8a'/>
+      <pointer-type-def type-id='609e4600' size-in-bits='64' id='17c9b422'/>
+      <function-decl name='of_icc_xlate_onecell' mangled-name='of_icc_xlate_onecell' filepath='drivers/interconnect/core.c' line='234' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_icc_xlate_onecell'>
+        <parameter type-id='51a94113' name='spec' filepath='drivers/interconnect/core.c' line='234' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/interconnect/core.c' line='235' column='1'/>
+        <return type-id='18d76f87'/>
+      </function-decl>
+      <function-decl name='of_icc_get' mangled-name='of_icc_get' filepath='drivers/interconnect/core.c' line='294' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_icc_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/interconnect/core.c' line='294' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/interconnect/core.c' line='294' column='1'/>
+        <return type-id='b5fdec5e'/>
+      </function-decl>
+      <function-decl name='icc_set_tag' mangled-name='icc_set_tag' filepath='drivers/interconnect/core.c' line='391' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_set_tag'>
+        <parameter type-id='b5fdec5e' name='path' filepath='drivers/interconnect/core.c' line='391' column='1'/>
+        <parameter type-id='19c2251e' name='tag' filepath='drivers/interconnect/core.c' line='391' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='icc_set_bw' mangled-name='icc_set_bw' filepath='drivers/interconnect/core.c' line='422' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_set_bw'>
+        <parameter type-id='b5fdec5e' name='path' filepath='drivers/interconnect/core.c' line='422' column='1'/>
+        <parameter type-id='19c2251e' name='avg_bw' filepath='drivers/interconnect/core.c' line='422' column='1'/>
+        <parameter type-id='19c2251e' name='peak_bw' filepath='drivers/interconnect/core.c' line='422' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='icc_get' mangled-name='icc_get' filepath='drivers/interconnect/core.c' line='488' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/interconnect/core.c' line='488' column='1'/>
+        <parameter type-id='2448a865' name='src_id' filepath='drivers/interconnect/core.c' line='488' column='1'/>
+        <parameter type-id='2448a865' name='dst_id' filepath='drivers/interconnect/core.c' line='488' column='1'/>
+        <return type-id='b5fdec5e'/>
+      </function-decl>
+      <function-decl name='icc_put' mangled-name='icc_put' filepath='drivers/interconnect/core.c' line='527' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_put'>
+        <parameter type-id='b5fdec5e' name='path' filepath='drivers/interconnect/core.c' line='527' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='icc_node_create' mangled-name='icc_node_create' filepath='drivers/interconnect/core.c' line='585' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_node_create'>
+        <parameter type-id='95e97e5e' name='id' filepath='drivers/interconnect/core.c' line='585' column='1'/>
+        <return type-id='18d76f87'/>
+      </function-decl>
+      <function-decl name='icc_node_destroy' mangled-name='icc_node_destroy' filepath='drivers/interconnect/core.c' line='603' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_node_destroy'>
+        <parameter type-id='95e97e5e' name='id' filepath='drivers/interconnect/core.c' line='603' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='icc_link_create' mangled-name='icc_link_create' filepath='drivers/interconnect/core.c' line='634' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_link_create'>
+        <parameter type-id='18d76f87' name='node' filepath='drivers/interconnect/core.c' line='634' column='1'/>
+        <parameter type-id='2448a865' name='dst_id' filepath='drivers/interconnect/core.c' line='634' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='icc_node_add' mangled-name='icc_node_add' filepath='drivers/interconnect/core.c' line='722' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_node_add'>
+        <parameter type-id='18d76f87' name='node' filepath='drivers/interconnect/core.c' line='722' column='1'/>
+        <parameter type-id='e68dc824' name='provider' filepath='drivers/interconnect/core.c' line='722' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='icc_node_del' mangled-name='icc_node_del' filepath='drivers/interconnect/core.c' line='737' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_node_del'>
+        <parameter type-id='18d76f87' name='node' filepath='drivers/interconnect/core.c' line='737' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='icc_provider_add' mangled-name='icc_provider_add' filepath='drivers/interconnect/core.c' line='753' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_provider_add'>
+        <parameter type-id='e68dc824' name='provider' filepath='drivers/interconnect/core.c' line='753' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='icc_provider_del' mangled-name='icc_provider_del' filepath='drivers/interconnect/core.c' line='779' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_provider_del'>
+        <parameter type-id='e68dc824' name='provider' filepath='drivers/interconnect/core.c' line='779' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='8695633e'>
+        <parameter type-id='51a94113' name='spec'/>
+        <parameter type-id='eaa32e2f' name='data'/>
+        <return type-id='18d76f87'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f3dd5585'>
+        <parameter type-id='18d76f87'/>
+        <parameter type-id='18d76f87'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b32e5b88'>
+        <parameter type-id='18d76f87'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='609e4600'>
+        <parameter type-id='18d76f87'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/iommu/dma-iommu.c' language='LANG_C89'>
+      <function-decl name='iommu_get_dma_cookie' mangled-name='iommu_get_dma_cookie' filepath='drivers/iommu/dma-iommu.c' line='78' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_get_dma_cookie'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/dma-iommu.c' line='78' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_put_dma_cookie' mangled-name='iommu_put_dma_cookie' filepath='drivers/iommu/dma-iommu.c' line='130' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_put_dma_cookie'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/dma-iommu.c' line='130' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_dma_get_resv_regions' mangled-name='iommu_dma_get_resv_regions' filepath='drivers/iommu/dma-iommu.c' line='160' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_dma_get_resv_regions'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/dma-iommu.c' line='160' column='1'/>
+        <parameter type-id='e84b031a' name='list' filepath='drivers/iommu/dma-iommu.c' line='160' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_dma_reserve_iova' mangled-name='iommu_dma_reserve_iova' filepath='drivers/iommu/dma-iommu.c' line='358' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_dma_reserve_iova'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/dma-iommu.c' line='358' column='1'/>
+        <parameter type-id='cf29c9b3' name='base' filepath='drivers/iommu/dma-iommu.c' line='358' column='1'/>
+        <parameter type-id='91ce1af9' name='size' filepath='drivers/iommu/dma-iommu.c' line='359' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/iommu/io-pgtable.c' language='LANG_C89'>
+      <class-decl name='io_pgtable_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/io-pgtable.h' line='137' column='1' id='37b2770e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map' type-id='8f5dd5a0' visibility='default' filepath='include/linux/io-pgtable.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unmap' type-id='7ec53559' visibility='default' filepath='include/linux/io-pgtable.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='iova_to_phys' type-id='92b191e1' visibility='default' filepath='include/linux/io-pgtable.h' line='142' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='io_pgtable_fmt' filepath='include/linux/io-pgtable.h' line='11' column='1' id='28637b68'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ARM_32_LPAE_S1' value='0'/>
+        <enumerator name='ARM_32_LPAE_S2' value='1'/>
+        <enumerator name='ARM_64_LPAE_S1' value='2'/>
+        <enumerator name='ARM_64_LPAE_S2' value='3'/>
+        <enumerator name='ARM_V7S' value='4'/>
+        <enumerator name='ARM_MALI_LPAE' value='5'/>
+        <enumerator name='IO_PGTABLE_NUM_FMTS' value='6'/>
+      </enum-decl>
+      <class-decl name='io_pgtable_cfg' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/io-pgtable.h' line='64' column='1' id='5470719c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='quirks' type-id='7359adad' visibility='default' filepath='include/linux/io-pgtable.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pgsize_bitmap' type-id='7359adad' visibility='default' filepath='include/linux/io-pgtable.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ias' type-id='f0981eeb' visibility='default' filepath='include/linux/io-pgtable.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='oas' type-id='f0981eeb' visibility='default' filepath='include/linux/io-pgtable.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='coherent_walk' type-id='b50a4934' visibility='default' filepath='include/linux/io-pgtable.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tlb' type-id='8e043c8f' visibility='default' filepath='include/linux/io-pgtable.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='iommu_dev' type-id='fa0b179b' visibility='default' filepath='include/linux/io-pgtable.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='' type-id='a376e215' visibility='default' filepath='include/linux/io-pgtable.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_flush_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/io-pgtable.h' line='39' column='1' id='4df659d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tlb_flush_all' type-id='b7f9d8e6' visibility='default' filepath='include/linux/io-pgtable.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tlb_flush_walk' type-id='cbe8ceae' visibility='default' filepath='include/linux/io-pgtable.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tlb_flush_leaf' type-id='cbe8ceae' visibility='default' filepath='include/linux/io-pgtable.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tlb_add_page' type-id='2adcf411' visibility='default' filepath='include/linux/io-pgtable.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/io-pgtable.h' line='101' column='1' id='a376e215'>
+        <data-member access='private'>
+          <var-decl name='arm_lpae_s1_cfg' type-id='f8050897' visibility='default' filepath='include/linux/io-pgtable.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='arm_lpae_s2_cfg' type-id='53b1ef5a' visibility='default' filepath='include/linux/io-pgtable.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='arm_v7s_cfg' type-id='160960d1' visibility='default' filepath='include/linux/io-pgtable.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='arm_mali_lpae_cfg' type-id='c145f506' visibility='default' filepath='include/linux/io-pgtable.h' line='123' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/io-pgtable.h' line='102' column='1' id='f8050897'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ttbr' type-id='24a375b2' visibility='default' filepath='include/linux/io-pgtable.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tcr' type-id='91ce1af9' visibility='default' filepath='include/linux/io-pgtable.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mair' type-id='24a375b2' visibility='default' filepath='include/linux/io-pgtable.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/io-pgtable.h' line='108' column='1' id='53b1ef5a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vttbr' type-id='91ce1af9' visibility='default' filepath='include/linux/io-pgtable.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vtcr' type-id='91ce1af9' visibility='default' filepath='include/linux/io-pgtable.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='160' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/io-pgtable.h' line='113' column='1' id='160960d1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ttbr' type-id='1872161b' visibility='default' filepath='include/linux/io-pgtable.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tcr' type-id='19c2251e' visibility='default' filepath='include/linux/io-pgtable.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nmrr' type-id='19c2251e' visibility='default' filepath='include/linux/io-pgtable.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='prrr' type-id='19c2251e' visibility='default' filepath='include/linux/io-pgtable.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/io-pgtable.h' line='120' column='1' id='c145f506'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='transtab' type-id='91ce1af9' visibility='default' filepath='include/linux/io-pgtable.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='memattr' type-id='91ce1af9' visibility='default' filepath='include/linux/io-pgtable.h' line='122' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='4df659d8' const='yes' id='9ecaa6bf'/>
+      <pointer-type-def type-id='9ecaa6bf' size-in-bits='64' id='8e043c8f'/>
+      <pointer-type-def type-id='d077537e' size-in-bits='64' id='8f5dd5a0'/>
+      <pointer-type-def type-id='5470719c' size-in-bits='64' id='a6481aea'/>
+      <pointer-type-def type-id='37b2770e' size-in-bits='64' id='bf4bdb64'/>
+      <pointer-type-def type-id='d5568bdd' size-in-bits='64' id='92b191e1'/>
+      <pointer-type-def type-id='d3fc5c05' size-in-bits='64' id='7ec53559'/>
+      <pointer-type-def type-id='e6af544d' size-in-bits='64' id='2adcf411'/>
+      <pointer-type-def type-id='925ea354' size-in-bits='64' id='cbe8ceae'/>
+      <function-decl name='alloc_io_pgtable_ops' mangled-name='alloc_io_pgtable_ops' filepath='drivers/iommu/io-pgtable.c' line='29' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_io_pgtable_ops'>
+        <parameter type-id='28637b68' name='fmt' filepath='drivers/iommu/io-pgtable.c' line='29' column='1'/>
+        <parameter type-id='a6481aea' name='cfg' filepath='drivers/iommu/io-pgtable.c' line='30' column='1'/>
+        <parameter type-id='eaa32e2f' name='cookie' filepath='drivers/iommu/io-pgtable.c' line='31' column='1'/>
+        <return type-id='bf4bdb64'/>
+      </function-decl>
+      <function-decl name='free_io_pgtable_ops' mangled-name='free_io_pgtable_ops' filepath='drivers/iommu/io-pgtable.c' line='59' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_io_pgtable_ops'>
+        <parameter type-id='bf4bdb64' name='ops' filepath='drivers/iommu/io-pgtable.c' line='59' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='d077537e'>
+        <parameter type-id='bf4bdb64'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='2522883d'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d5568bdd'>
+        <parameter type-id='bf4bdb64'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='2522883d'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d3fc5c05'>
+        <parameter type-id='bf4bdb64'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='1c63cc3f'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e6af544d'>
+        <parameter type-id='1c63cc3f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='925ea354'>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/iommu/iommu-sysfs.c' language='LANG_C89'>
+      <function-decl name='iommu_device_sysfs_add' mangled-name='iommu_device_sysfs_add' filepath='drivers/iommu/iommu-sysfs.c' line='54' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_device_sysfs_add'>
+        <parameter type-id='2f00283d' name='iommu' filepath='drivers/iommu/iommu-sysfs.c' line='54' column='1'/>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/iommu/iommu-sysfs.c' line='55' column='1'/>
+        <parameter type-id='c97de1ac' name='groups' filepath='drivers/iommu/iommu-sysfs.c' line='56' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/iommu/iommu-sysfs.c' line='57' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_device_sysfs_remove' mangled-name='iommu_device_sysfs_remove' filepath='drivers/iommu/iommu-sysfs.c' line='92' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_device_sysfs_remove'>
+        <parameter type-id='2f00283d' name='iommu' filepath='drivers/iommu/iommu-sysfs.c' line='92' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_device_link' mangled-name='iommu_device_link' filepath='drivers/iommu/iommu-sysfs.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_device_link'>
+        <parameter type-id='2f00283d' name='iommu' filepath='drivers/iommu/iommu-sysfs.c' line='106' column='1'/>
+        <parameter type-id='fa0b179b' name='link' filepath='drivers/iommu/iommu-sysfs.c' line='106' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_device_unlink' mangled-name='iommu_device_unlink' filepath='drivers/iommu/iommu-sysfs.c' line='127' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_device_unlink'>
+        <parameter type-id='2f00283d' name='iommu' filepath='drivers/iommu/iommu-sysfs.c' line='127' column='1'/>
+        <parameter type-id='fa0b179b' name='link' filepath='drivers/iommu/iommu-sysfs.c' line='127' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='c67e920d' size-in-bits='64' id='2f00283d'/>
+      <class-decl name='iommu_device' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='322' column='1' id='c67e920d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/iommu.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='f1ac64d1' visibility='default' filepath='include/linux/iommu.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/iommu.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/iommu.h' line='326' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/iommu/iommu.c' language='LANG_C89'>
+      <class-decl name='iommu_device' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='322' column='1' id='c67e920d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/iommu.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='f1ac64d1' visibility='default' filepath='include/linux/iommu.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/iommu.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/iommu.h' line='326' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='c67e920d' size-in-bits='64' id='2f00283d'/>
+      <function-decl name='iommu_group_alloc' mangled-name='iommu_group_alloc' filepath='drivers/iommu/iommu.c' line='487' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_alloc'>
+        <return type-id='0b19fc54'/>
+      </function-decl>
+      <function-decl name='iommu_register_device_fault_handler' mangled-name='iommu_register_device_fault_handler' filepath='drivers/iommu/iommu.c' line='971' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_register_device_fault_handler'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='971' column='1'/>
+        <parameter type-id='a84f5b46' name='handler' filepath='drivers/iommu/iommu.c' line='972' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/iommu/iommu.c' line='973' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_device_register' mangled-name='iommu_device_register' filepath='drivers/iommu/iommu.c' line='138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_device_register'>
+        <parameter type-id='2f00283d' name='iommu' filepath='drivers/iommu/iommu.c' line='138' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_device_unregister' mangled-name='iommu_device_unregister' filepath='drivers/iommu/iommu.c' line='147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_device_unregister'>
+        <parameter type-id='2f00283d' name='iommu' filepath='drivers/iommu/iommu.c' line='147' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_group_get_iommudata' mangled-name='iommu_group_get_iommudata' filepath='drivers/iommu/iommu.c' line='581' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_get_iommudata'>
+        <parameter type-id='0b19fc54' name='group' filepath='drivers/iommu/iommu.c' line='581' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='iommu_group_set_iommudata' mangled-name='iommu_group_set_iommudata' filepath='drivers/iommu/iommu.c' line='597' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_set_iommudata'>
+        <parameter type-id='0b19fc54' name='group' filepath='drivers/iommu/iommu.c' line='597' column='1'/>
+        <parameter type-id='eaa32e2f' name='iommu_data' filepath='drivers/iommu/iommu.c' line='597' column='1'/>
+        <parameter type-id='b7f9d8e6' name='release' filepath='drivers/iommu/iommu.c' line='598' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_group_set_name' mangled-name='iommu_group_set_name' filepath='drivers/iommu/iommu.c' line='613' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_set_name'>
+        <parameter type-id='0b19fc54' name='group' filepath='drivers/iommu/iommu.c' line='613' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/iommu/iommu.c' line='613' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_group_remove_device' mangled-name='iommu_group_remove_device' filepath='drivers/iommu/iommu.c' line='790' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_remove_device'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='790' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_group_for_each_dev' mangled-name='iommu_group_for_each_dev' filepath='drivers/iommu/iommu.c' line='863' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_for_each_dev'>
+        <parameter type-id='0b19fc54' name='group' filepath='drivers/iommu/iommu.c' line='863' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/iommu/iommu.c' line='863' column='1'/>
+        <parameter type-id='92d15ae9' name='fn' filepath='drivers/iommu/iommu.c' line='864' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_group_get' mangled-name='iommu_group_get' filepath='drivers/iommu/iommu.c' line='884' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='884' column='1'/>
+        <return type-id='0b19fc54'/>
+      </function-decl>
+      <function-decl name='iommu_group_ref_get' mangled-name='iommu_group_ref_get' filepath='drivers/iommu/iommu.c' line='902' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_ref_get'>
+        <parameter type-id='0b19fc54' name='group' filepath='drivers/iommu/iommu.c' line='902' column='1'/>
+        <return type-id='0b19fc54'/>
+      </function-decl>
+      <function-decl name='iommu_group_put' mangled-name='iommu_group_put' filepath='drivers/iommu/iommu.c' line='916' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_put'>
+        <parameter type-id='0b19fc54' name='group' filepath='drivers/iommu/iommu.c' line='916' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_group_register_notifier' mangled-name='iommu_group_register_notifier' filepath='drivers/iommu/iommu.c' line='932' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_register_notifier'>
+        <parameter type-id='0b19fc54' name='group' filepath='drivers/iommu/iommu.c' line='932' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/iommu/iommu.c' line='933' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_unregister_device_fault_handler' mangled-name='iommu_unregister_device_fault_handler' filepath='drivers/iommu/iommu.c' line='1016' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_unregister_device_fault_handler'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='1016' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_report_device_fault' mangled-name='iommu_report_device_fault' filepath='drivers/iommu/iommu.c' line='1056' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_report_device_fault'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='1056' column='1'/>
+        <parameter type-id='af233abc' name='evt' filepath='drivers/iommu/iommu.c' line='1056' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_get_domain_for_dev' mangled-name='iommu_get_domain_for_dev' filepath='drivers/iommu/iommu.c' line='1732' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_get_domain_for_dev'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='1732' column='1'/>
+        <return type-id='bff05edb'/>
+      </function-decl>
+      <function-decl name='generic_device_group' mangled-name='generic_device_group' filepath='drivers/iommu/iommu.c' line='1277' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_device_group'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='1277' column='1'/>
+        <return type-id='0b19fc54'/>
+      </function-decl>
+      <function-decl name='pci_device_group' mangled-name='pci_device_group' filepath='drivers/iommu/iommu.c' line='1287' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_device_group'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='1287' column='1'/>
+        <return type-id='0b19fc54'/>
+      </function-decl>
+      <function-decl name='iommu_group_get_for_dev' mangled-name='iommu_group_get_for_dev' filepath='drivers/iommu/iommu.c' line='1374' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_get_for_dev'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='1374' column='1'/>
+        <return type-id='0b19fc54'/>
+      </function-decl>
+      <function-decl name='iommu_domain_set_attr' mangled-name='iommu_domain_set_attr' filepath='drivers/iommu/iommu.c' line='2197' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_domain_set_attr'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='2197' column='1'/>
+        <parameter type-id='e176cc45' name='attr' filepath='drivers/iommu/iommu.c' line='2198' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/iommu/iommu.c' line='2198' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bus_set_iommu' mangled-name='bus_set_iommu' filepath='drivers/iommu/iommu.c' line='1558' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bus_set_iommu'>
+        <parameter type-id='5e2671f8' name='bus' filepath='drivers/iommu/iommu.c' line='1558' column='1'/>
+        <parameter type-id='f1ac64d1' name='ops' filepath='drivers/iommu/iommu.c' line='1558' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_present' mangled-name='iommu_present' filepath='drivers/iommu/iommu.c' line='1581' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_present'>
+        <parameter type-id='5e2671f8' name='bus' filepath='drivers/iommu/iommu.c' line='1581' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='iommu_set_fault_handler' mangled-name='iommu_set_fault_handler' filepath='drivers/iommu/iommu.c' line='1608' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_set_fault_handler'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='1608' column='1'/>
+        <parameter type-id='a01c3626' name='handler' filepath='drivers/iommu/iommu.c' line='1609' column='1'/>
+        <parameter type-id='eaa32e2f' name='token' filepath='drivers/iommu/iommu.c' line='1610' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_domain_alloc' mangled-name='iommu_domain_alloc' filepath='drivers/iommu/iommu.c' line='1639' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_domain_alloc'>
+        <parameter type-id='5e2671f8' name='bus' filepath='drivers/iommu/iommu.c' line='1639' column='1'/>
+        <return type-id='bff05edb'/>
+      </function-decl>
+      <function-decl name='iommu_domain_free' mangled-name='iommu_domain_free' filepath='drivers/iommu/iommu.c' line='1645' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_domain_free'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='1645' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_attach_device' mangled-name='iommu_attach_device' filepath='drivers/iommu/iommu.c' line='1668' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_attach_device'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='1668' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='1668' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_detach_device' mangled-name='iommu_detach_device' filepath='drivers/iommu/iommu.c' line='1710' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_detach_device'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='1710' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='1710' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_attach_group' mangled-name='iommu_attach_group' filepath='drivers/iommu/iommu.c' line='1791' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_attach_group'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='1791' column='1'/>
+        <parameter type-id='0b19fc54' name='group' filepath='drivers/iommu/iommu.c' line='1791' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_iova_to_phys' mangled-name='iommu_iova_to_phys' filepath='drivers/iommu/iommu.c' line='1844' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_iova_to_phys'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='1844' column='1'/>
+        <parameter type-id='cf29c9b3' name='iova' filepath='drivers/iommu/iommu.c' line='1844' column='1'/>
+        <return type-id='2522883d'/>
+      </function-decl>
+      <function-decl name='iommu_map' mangled-name='iommu_map' filepath='drivers/iommu/iommu.c' line='1945' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_map'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='1945' column='1'/>
+        <parameter type-id='7359adad' name='iova' filepath='drivers/iommu/iommu.c' line='1945' column='1'/>
+        <parameter type-id='2522883d' name='paddr' filepath='drivers/iommu/iommu.c' line='1946' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/iommu/iommu.c' line='1946' column='1'/>
+        <parameter type-id='95e97e5e' name='prot' filepath='drivers/iommu/iommu.c' line='1946' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_unmap' mangled-name='iommu_unmap' filepath='drivers/iommu/iommu.c' line='2014' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_unmap'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='2014' column='1'/>
+        <parameter type-id='7359adad' name='iova' filepath='drivers/iommu/iommu.c' line='2015' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/iommu/iommu.c' line='2015' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='iommu_map_sg' mangled-name='iommu_map_sg' filepath='drivers/iommu/iommu.c' line='2080' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_map_sg'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='2080' column='1'/>
+        <parameter type-id='7359adad' name='iova' filepath='drivers/iommu/iommu.c' line='2080' column='1'/>
+        <parameter type-id='bf3ef905' name='sg' filepath='drivers/iommu/iommu.c' line='2081' column='1'/>
+        <parameter type-id='f0981eeb' name='nents' filepath='drivers/iommu/iommu.c' line='2081' column='1'/>
+        <parameter type-id='95e97e5e' name='prot' filepath='drivers/iommu/iommu.c' line='2081' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='report_iommu_fault' mangled-name='report_iommu_fault' filepath='drivers/iommu/iommu.c' line='2139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='report_iommu_fault'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='2139' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='2139' column='1'/>
+        <parameter type-id='7359adad' name='iova' filepath='drivers/iommu/iommu.c' line='2140' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='drivers/iommu/iommu.c' line='2140' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_domain_get_attr' mangled-name='iommu_domain_get_attr' filepath='drivers/iommu/iommu.c' line='2169' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_domain_get_attr'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='2169' column='1'/>
+        <parameter type-id='e176cc45' name='attr' filepath='drivers/iommu/iommu.c' line='2170' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/iommu/iommu.c' line='2170' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_alloc_resv_region' mangled-name='iommu_alloc_resv_region' filepath='drivers/iommu/iommu.c' line='2230' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_alloc_resv_region'>
+        <parameter type-id='2522883d' name='start' filepath='drivers/iommu/iommu.c' line='2230' column='1'/>
+        <parameter type-id='b59d7dce' name='length' filepath='drivers/iommu/iommu.c' line='2231' column='1'/>
+        <parameter type-id='95e97e5e' name='prot' filepath='drivers/iommu/iommu.c' line='2231' column='1'/>
+        <parameter type-id='256c2037' name='type' filepath='drivers/iommu/iommu.c' line='2232' column='1'/>
+        <return type-id='24b0cc5e'/>
+      </function-decl>
+      <function-decl name='iommu_fwspec_free' mangled-name='iommu_fwspec_free' filepath='drivers/iommu/iommu.c' line='2371' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_fwspec_free'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='2371' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_fwspec_add_ids' mangled-name='iommu_fwspec_add_ids' filepath='drivers/iommu/iommu.c' line='2383' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_fwspec_add_ids'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='2383' column='1'/>
+        <parameter type-id='f9409001' name='ids' filepath='drivers/iommu/iommu.c' line='2383' column='1'/>
+        <parameter type-id='95e97e5e' name='num_ids' filepath='drivers/iommu/iommu.c' line='2383' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/iommu/of_iommu.c' language='LANG_C89'>
+      <function-decl name='of_get_dma_window' mangled-name='of_get_dma_window' filepath='drivers/iommu/of_iommu.c' line='34' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_dma_window'>
+        <parameter type-id='9a537bbe' name='dn' filepath='drivers/iommu/of_iommu.c' line='34' column='1'/>
+        <parameter type-id='80f4b756' name='prefix' filepath='drivers/iommu/of_iommu.c' line='34' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/iommu/of_iommu.c' line='34' column='1'/>
+        <parameter type-id='1d2c2b85' name='busno' filepath='drivers/iommu/of_iommu.c' line='35' column='1'/>
+        <parameter type-id='e835b5d8' name='addr' filepath='drivers/iommu/of_iommu.c' line='35' column='1'/>
+        <parameter type-id='78c01427' name='size' filepath='drivers/iommu/of_iommu.c' line='35' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_n_size_cells' mangled-name='of_n_size_cells' filepath='include/linux/of.h' line='359' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_n_size_cells'>
+        <parameter type-id='9a537bbe'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/irqchip/irq-gic-v3-its-pci-msi.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='d87a4b41' size-in-bits='128' id='f7b1166e'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='c0e2acc9' size-in-bits='704' id='2cc49b73'>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <class-decl name='hotplug_slot' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/pci_hotplug.h' line='56' column='1' id='2dfcfaf9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='94bc2d77' visibility='default' filepath='include/linux/pci_hotplug.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='slot_list' type-id='72f469ec' visibility='default' filepath='include/linux/pci_hotplug.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pci_slot' type-id='4f146b8a' visibility='default' filepath='include/linux/pci_hotplug.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/pci_hotplug.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mod_name' type-id='80f4b756' visibility='default' filepath='include/linux/pci_hotplug.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_vpd' is-struct='yes' visibility='default' is-declaration-only='yes' id='059a2256'/>
+      <class-decl name='pcie_link_state' size-in-bits='1216' is-struct='yes' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='49' column='1' id='2b7bb54d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pdev' type-id='85196e3f' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='downstream' type-id='85196e3f' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='root' type-id='fe2d9f1d' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parent' type-id='fe2d9f1d' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sibling' type-id='72f469ec' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='aspm_support' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='aspm_enabled' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='aspm_capable' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='aspm_default' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='aspm_disable' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='clkpm_capable' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='clkpm_enabled' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='clkpm_default' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='clkpm_disable' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='latency_up' type-id='d0622163' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='latency_dw' type-id='d0622163' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='acceptable' type-id='fa0d0a7f' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='l1ss' type-id='a1d8a938' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='platform_msi_priv_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='5d1d7263'/>
+      <array-type-def dimensions='1' type-id='c9d64c0d' size-in-bits='256' id='774e8b2d'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='5218160d' size-in-bits='8448' id='221adaf7'>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <class-decl name='msi_domain_info' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='292' column='1' id='7df9052a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/msi.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='adccc7b0' visibility='default' filepath='include/linux/msi.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='chip' type-id='8846a616' visibility='default' filepath='include/linux/msi.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='chip_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/msi.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='handler' type-id='cdb741d3' visibility='default' filepath='include/linux/msi.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='handler_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/msi.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='handler_name' type-id='80f4b756' visibility='default' filepath='include/linux/msi.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/msi.h' line='300' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='msi_domain_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='258' column='1' id='fef1be32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_hwirq' type-id='e41e7f12' visibility='default' filepath='include/linux/msi.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='msi_init' type-id='390f2646' visibility='default' filepath='include/linux/msi.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='msi_free' type-id='f28039ea' visibility='default' filepath='include/linux/msi.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='msi_check' type-id='40825cfb' visibility='default' filepath='include/linux/msi.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='msi_prepare' type-id='68c675aa' visibility='default' filepath='include/linux/msi.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='msi_finish' type-id='9d1da97a' visibility='default' filepath='include/linux/msi.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_desc' type-id='b3c70e7a' visibility='default' filepath='include/linux/msi.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='handle_error' type-id='ed647258' visibility='default' filepath='include/linux/msi.h' line='277' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='msi_alloc_info_t' type-id='b3d73007' filepath='include/asm-generic/msi.h' line='29' column='1' id='e36320e9'/>
+      <class-decl name='msi_alloc_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/asm-generic/msi.h' line='22' column='1' id='b3d73007'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='b11825ce' visibility='default' filepath='include/asm-generic/msi.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hwirq' type-id='88370ce9' visibility='default' filepath='include/asm-generic/msi.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='scratchpad' type-id='f7b1166e' visibility='default' filepath='include/asm-generic/msi.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_affinity_desc' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/interrupt.h' line='293' column='1' id='bab69d9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='1354385d' visibility='default' filepath='include/linux/interrupt.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='is_managed' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='295' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/msi.h' line='100' column='1' id='153fff9c'>
+        <data-member access='private'>
+          <var-decl name='' type-id='72589d89' visibility='default' filepath='include/linux/msi.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='platform' type-id='2ae2d1e2' visibility='default' filepath='include/linux/msi.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fsl_mc' type-id='9930269d' visibility='default' filepath='include/linux/msi.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='inta' type-id='248c6527' visibility='default' filepath='include/linux/msi.h' line='129' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/msi.h' line='102' column='1' id='72589d89'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='masked' type-id='19c2251e' visibility='default' filepath='include/linux/msi.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='msi_attrib' type-id='2ce04ee0' visibility='default' filepath='include/linux/msi.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='79c40656' visibility='default' filepath='include/linux/msi.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/msi.h' line='104' column='1' id='2ce04ee0'>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='is_msix' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='multiple' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='multi_cap' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='maskbit' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='is_64' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='is_virtual' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='entry_nr' type-id='1dc6a898' visibility='default' filepath='include/linux/msi.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='default_irq' type-id='f0981eeb' visibility='default' filepath='include/linux/msi.h' line='112' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/msi.h' line='114' column='1' id='79c40656'>
+        <data-member access='private'>
+          <var-decl name='mask_pos' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='mask_base' type-id='eaa32e2f' visibility='default' filepath='include/linux/msi.h' line='116' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='platform_msi_desc' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='37' column='1' id='2ae2d1e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='msi_priv_data' type-id='1f211d93' visibility='default' filepath='include/linux/msi.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='msi_index' type-id='1dc6a898' visibility='default' filepath='include/linux/msi.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fsl_mc_msi_desc' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='46' column='1' id='9930269d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='msi_index' type-id='1dc6a898' visibility='default' filepath='include/linux/msi.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ti_sci_inta_msi_desc' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='54' column='1' id='248c6527'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_index' type-id='1dc6a898' visibility='default' filepath='include/linux/msi.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/asm-generic/msi.h' line='25' column='1' id='d87a4b41'>
+        <data-member access='private'>
+          <var-decl name='ul' type-id='7359adad' visibility='default' filepath='include/asm-generic/msi.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ptr' type-id='eaa32e2f' visibility='default' filepath='include/asm-generic/msi.h' line='27' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='pci_bus' size-in-bits='10432' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='577' column='1' id='7e8e008e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parent' type-id='d1feb554' visibility='default' filepath='include/linux/pci.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='devices' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='self' type-id='85196e3f' visibility='default' filepath='include/linux/pci.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='slots' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='resource' type-id='774e8b2d' visibility='default' filepath='include/linux/pci.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='resources' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='busn_res' type-id='5218160d' visibility='default' filepath='include/linux/pci.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='ops' type-id='2058826a' visibility='default' filepath='include/linux/pci.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='msi' type-id='b9526cc1' visibility='default' filepath='include/linux/pci.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='sysdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/pci.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='procdir' type-id='d077e928' visibility='default' filepath='include/linux/pci.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='number' type-id='002ac4a6' visibility='default' filepath='include/linux/pci.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2056'>
+          <var-decl name='primary' type-id='002ac4a6' visibility='default' filepath='include/linux/pci.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2064'>
+          <var-decl name='max_bus_speed' type-id='002ac4a6' visibility='default' filepath='include/linux/pci.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2072'>
+          <var-decl name='cur_bus_speed' type-id='002ac4a6' visibility='default' filepath='include/linux/pci.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='domain_nr' type-id='95e97e5e' visibility='default' filepath='include/linux/pci.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='name' type-id='36d7f119' visibility='default' filepath='include/linux/pci.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='bridge_ctl' type-id='8efea9e5' visibility='default' filepath='include/linux/pci.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2512'>
+          <var-decl name='bus_flags' type-id='757fc982' visibility='default' filepath='include/linux/pci.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='bridge' type-id='fa0b179b' visibility='default' filepath='include/linux/pci.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/pci.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='legacy_io' type-id='c0e2acc9' visibility='default' filepath='include/linux/pci.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='legacy_mem' type-id='c0e2acc9' visibility='default' filepath='include/linux/pci.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='is_added' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='615' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_dev' size-in-bits='20096' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='292' column='1' id='5c93f9a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bus_list' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bus' type-id='d1feb554' visibility='default' filepath='include/linux/pci.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='subordinate' type-id='d1feb554' visibility='default' filepath='include/linux/pci.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sysdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/pci.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='procent' type-id='d077e928' visibility='default' filepath='include/linux/pci.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='slot' type-id='4f146b8a' visibility='default' filepath='include/linux/pci.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='devfn' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='vendor' type-id='8efea9e5' visibility='default' filepath='include/linux/pci.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='device' type-id='8efea9e5' visibility='default' filepath='include/linux/pci.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='subsystem_vendor' type-id='8efea9e5' visibility='default' filepath='include/linux/pci.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='subsystem_device' type-id='8efea9e5' visibility='default' filepath='include/linux/pci.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='class' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='revision' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='584'>
+          <var-decl name='hdr_type' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='592'>
+          <var-decl name='pcie_cap' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='600'>
+          <var-decl name='msi_cap' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='msix_cap' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='pcie_mpss' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='624'>
+          <var-decl name='rom_base_reg' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='632'>
+          <var-decl name='pin' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='pcie_flags_reg' type-id='1dc6a898' visibility='default' filepath='include/linux/pci.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dma_alias_mask' type-id='1d2c2b85' visibility='default' filepath='include/linux/pci.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='driver' type-id='85b59624' visibility='default' filepath='include/linux/pci.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dma_mask' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dma_parms' type-id='37251e77' visibility='default' filepath='include/linux/pci.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='current_state' type-id='49c32219' visibility='default' filepath='include/linux/pci.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='imm_ready' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1064'>
+          <var-decl name='pm_cap' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='pme_support' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='pme_poll' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='d1_support' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='d2_support' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='no_d1d2' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='no_d3cold' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='bridge_d3' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='d3cold_allowed' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='mmio_always_on' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='wakeup_prepared' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='runtime_d3cold' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='skip_bus_pm' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='ignore_hotplug' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='hotplug_user_indicators' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='clear_retrain_link' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='d3_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='d3cold_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='link_state' type-id='fe2d9f1d' visibility='default' filepath='include/linux/pci.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='ltr_path' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='eetlp_prefix_path' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='error_state' type-id='7d5a17ad' visibility='default' filepath='include/linux/pci.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/pci.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='cfg_size' type-id='95e97e5e' visibility='default' filepath='include/linux/pci.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8736'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='resource' type-id='221adaf7' visibility='default' filepath='include/linux/pci.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17216'>
+          <var-decl name='match_driver' type-id='b50a4934' visibility='default' filepath='include/linux/pci.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='transparent' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='io_window' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='pref_window' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='pref_64_window' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='multifunction' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='is_busmaster' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='no_msi' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='no_64bit_msi' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='block_cfg_access' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='broken_parity_status' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='irq_reroute_variant' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='msi_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='msix_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='ari_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='ats_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='pasid_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='pri_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='is_managed' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='needs_freset' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='state_saved' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='is_physfn' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='is_virtfn' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17216'>
+          <var-decl name='reset_fn' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='is_hotplug_bridge' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='shpc_managed' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='is_thunderbolt' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='untrusted' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='__aer_firmware_first_valid' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='__aer_firmware_first' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='broken_intx_masking' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='io_window_1k' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='irq_managed' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='non_compliant_bars' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='is_probed' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='link_active_reporting' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='no_vf_scan' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='no_command_memory' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17264'>
+          <var-decl name='dev_flags' type-id='0f4efb07' visibility='default' filepath='include/linux/pci.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17280'>
+          <var-decl name='enable_cnt' type-id='49178f86' visibility='default' filepath='include/linux/pci.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17312'>
+          <var-decl name='saved_config_space' type-id='02fdec64' visibility='default' filepath='include/linux/pci.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17856'>
+          <var-decl name='saved_cap_space' type-id='e151255a' visibility='default' filepath='include/linux/pci.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17920'>
+          <var-decl name='rom_attr' type-id='c0e2acc9' visibility='default' filepath='include/linux/pci.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17984'>
+          <var-decl name='rom_attr_enabled' type-id='95e97e5e' visibility='default' filepath='include/linux/pci.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18048'>
+          <var-decl name='res_attr' type-id='2cc49b73' visibility='default' filepath='include/linux/pci.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18752'>
+          <var-decl name='res_attr_wc' type-id='2cc49b73' visibility='default' filepath='include/linux/pci.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19456'>
+          <var-decl name='msi_irq_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/pci.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19520'>
+          <var-decl name='vpd' type-id='0b72939c' visibility='default' filepath='include/linux/pci.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19584'>
+          <var-decl name='rom' type-id='2522883d' visibility='default' filepath='include/linux/pci.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19648'>
+          <var-decl name='romlen' type-id='b59d7dce' visibility='default' filepath='include/linux/pci.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19712'>
+          <var-decl name='driver_override' type-id='26a90f95' visibility='default' filepath='include/linux/pci.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19776'>
+          <var-decl name='priv_flags' type-id='7359adad' visibility='default' filepath='include/linux/pci.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19904'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19968'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='477' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_slot' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='63' column='1' id='cce0f0cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bus' type-id='d1feb554' visibility='default' filepath='include/linux/pci.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hotplug' type-id='b47b0d41' visibility='default' filepath='include/linux/pci.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='number' type-id='002ac4a6' visibility='default' filepath='include/linux/pci.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/pci.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_driver' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='837' column='1' id='314e713e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pci.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id_table' type-id='92fc8aa5' visibility='default' filepath='include/linux/pci.h' line='840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='probe' type-id='6cc3a8b3' visibility='default' filepath='include/linux/pci.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='remove' type-id='01d543be' visibility='default' filepath='include/linux/pci.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='suspend' type-id='831f84c2' visibility='default' filepath='include/linux/pci.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='suspend_late' type-id='831f84c2' visibility='default' filepath='include/linux/pci.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='resume_early' type-id='40672f7b' visibility='default' filepath='include/linux/pci.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='resume' type-id='40672f7b' visibility='default' filepath='include/linux/pci.h' line='846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='shutdown' type-id='01d543be' visibility='default' filepath='include/linux/pci.h' line='847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sriov_configure' type-id='ab05e282' visibility='default' filepath='include/linux/pci.h' line='848' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='err_handler' type-id='2da88de7' visibility='default' filepath='include/linux/pci.h' line='849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/pci.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/pci.h' line='851' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='dynids' type-id='022719b7' visibility='default' filepath='include/linux/pci.h' line='852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='854' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='857' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_device_id' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='38' column='1' id='6cb59de2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vendor' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='device' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='subvendor' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='subdevice' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='class' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='class_mask' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_data' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_error_handlers' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='772' column='1' id='709bf5ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='error_detected' type-id='abc80f30' visibility='default' filepath='include/linux/pci.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mmio_enabled' type-id='80b73a7b' visibility='default' filepath='include/linux/pci.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='slot_reset' type-id='80b73a7b' visibility='default' filepath='include/linux/pci.h' line='781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reset_prepare' type-id='01d543be' visibility='default' filepath='include/linux/pci.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reset_done' type-id='01d543be' visibility='default' filepath='include/linux/pci.h' line='785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resume' type-id='01d543be' visibility='default' filepath='include/linux/pci.h' line='788' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pci_ers_result_t' type-id='f0981eeb' filepath='include/linux/pci.h' line='749' column='1' id='453a795e'/>
+      <enum-decl name='pci_channel_state' filepath='include/linux/pci.h' line='164' column='1' id='c36cf4da'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='pci_channel_io_normal' value='1'/>
+        <enumerator name='pci_channel_io_frozen' value='2'/>
+        <enumerator name='pci_channel_io_perm_failure' value='3'/>
+      </enum-decl>
+      <class-decl name='pci_dynids' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='736' column='1' id='022719b7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/pci.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='738' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pci_power_t' type-id='95e97e5e' filepath='include/linux/pci.h' line='137' column='1' id='49c32219'/>
+      <typedef-decl name='pci_channel_state_t' type-id='f0981eeb' filepath='include/linux/pci.h' line='162' column='1' id='7d5a17ad'/>
+      <typedef-decl name='pci_dev_flags_t' type-id='8efea9e5' filepath='include/linux/pci.h' line='188' column='1' id='0f4efb07'/>
+      <class-decl name='pci_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='708' column='1' id='fc2007cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='add_bus' type-id='4a1c3304' visibility='default' filepath='include/linux/pci.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='remove_bus' type-id='7df445b9' visibility='default' filepath='include/linux/pci.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_bus' type-id='d479d76a' visibility='default' filepath='include/linux/pci.h' line='711' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read' type-id='ffde3570' visibility='default' filepath='include/linux/pci.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write' type-id='934d23eb' visibility='default' filepath='include/linux/pci.h' line='713' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='msi_controller' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='215' column='1' id='1f8bced9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/linux/msi.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/msi.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/msi.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/msi.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='setup_irq' type-id='01170708' visibility='default' filepath='include/linux/msi.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='setup_irqs' type-id='3c23f0a7' visibility='default' filepath='include/linux/msi.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='teardown_irq' type-id='694b6f36' visibility='default' filepath='include/linux/msi.h' line='225' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pci_bus_flags_t' type-id='8efea9e5' filepath='include/linux/pci.h' line='219' column='1' id='757fc982'/>
+      <qualified-type-def type-id='6cb59de2' const='yes' id='b947c5cd'/>
+      <pointer-type-def type-id='b947c5cd' size-in-bits='64' id='92fc8aa5'/>
+      <qualified-type-def type-id='709bf5ba' const='yes' id='b68346f7'/>
+      <pointer-type-def type-id='b68346f7' size-in-bits='64' id='2da88de7'/>
+      <pointer-type-def type-id='2dfcfaf9' size-in-bits='64' id='b47b0d41'/>
+      <pointer-type-def type-id='a1aadc50' size-in-bits='64' id='68c675aa'/>
+      <pointer-type-def type-id='78117ea6' size-in-bits='64' id='ed647258'/>
+      <pointer-type-def type-id='aaa8d90f' size-in-bits='64' id='40825cfb'/>
+      <pointer-type-def type-id='5e584ca4' size-in-bits='64' id='390f2646'/>
+      <pointer-type-def type-id='c03e8273' size-in-bits='64' id='3c23f0a7'/>
+      <pointer-type-def type-id='da757fbe' size-in-bits='64' id='01170708'/>
+      <pointer-type-def type-id='6334ba8a' size-in-bits='64' id='4a1c3304'/>
+      <pointer-type-def type-id='ba6c1a6f' size-in-bits='64' id='934d23eb'/>
+      <pointer-type-def type-id='89c3fb76' size-in-bits='64' id='ffde3570'/>
+      <pointer-type-def type-id='b4db8337' size-in-bits='64' id='40672f7b'/>
+      <pointer-type-def type-id='1e828e67' size-in-bits='64' id='6cc3a8b3'/>
+      <pointer-type-def type-id='173cc5a0' size-in-bits='64' id='ab05e282'/>
+      <pointer-type-def type-id='dedd4d90' size-in-bits='64' id='831f84c2'/>
+      <pointer-type-def type-id='f3404a83' size-in-bits='64' id='82fb5c77'/>
+      <pointer-type-def type-id='bab69d9a' size-in-bits='64' id='ef2b6ec8'/>
+      <pointer-type-def type-id='e36320e9' size-in-bits='64' id='ccf3b302'/>
+      <pointer-type-def type-id='1f8bced9' size-in-bits='64' id='b9526cc1'/>
+      <pointer-type-def type-id='7df9052a' size-in-bits='64' id='a9bcccf8'/>
+      <pointer-type-def type-id='fef1be32' size-in-bits='64' id='adccc7b0'/>
+      <pointer-type-def type-id='7e8e008e' size-in-bits='64' id='d1feb554'/>
+      <pointer-type-def type-id='5c93f9a7' size-in-bits='64' id='85196e3f'/>
+      <pointer-type-def type-id='314e713e' size-in-bits='64' id='85b59624'/>
+      <pointer-type-def type-id='fc2007cc' size-in-bits='64' id='2058826a'/>
+      <pointer-type-def type-id='cce0f0cc' size-in-bits='64' id='4f146b8a'/>
+      <pointer-type-def type-id='059a2256' size-in-bits='64' id='0b72939c'/>
+      <pointer-type-def type-id='2b7bb54d' size-in-bits='64' id='fe2d9f1d'/>
+      <pointer-type-def type-id='5d1d7263' size-in-bits='64' id='1f211d93'/>
+      <pointer-type-def type-id='2381d398' size-in-bits='64' id='e41e7f12'/>
+      <pointer-type-def type-id='b359f47f' size-in-bits='64' id='80b73a7b'/>
+      <pointer-type-def type-id='9325ec16' size-in-bits='64' id='abc80f30'/>
+      <pointer-type-def type-id='aefe43a8' size-in-bits='64' id='f28039ea'/>
+      <pointer-type-def type-id='95e62b18' size-in-bits='64' id='9d1da97a'/>
+      <pointer-type-def type-id='0706d6e8' size-in-bits='64' id='b3c70e7a'/>
+      <pointer-type-def type-id='deb48314' size-in-bits='64' id='694b6f36'/>
+      <pointer-type-def type-id='9d9f3e8b' size-in-bits='64' id='aecf9817'/>
+      <pointer-type-def type-id='0181b08d' size-in-bits='64' id='7df445b9'/>
+      <pointer-type-def type-id='7d41fdf4' size-in-bits='64' id='01d543be'/>
+      <pointer-type-def type-id='9f1d7608' size-in-bits='64' id='d479d76a'/>
+      <function-decl name='pci_msi_create_irq_domain' mangled-name='pci_msi_create_irq_domain' filepath='include/linux/msi.h' line='375' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_msi_create_irq_domain'>
+        <parameter type-id='4a935625'/>
+        <parameter type-id='a9bcccf8'/>
+        <parameter type-id='7544e825'/>
+        <return type-id='7544e825'/>
+      </function-decl>
+      <function-decl name='pci_msi_mask_irq' mangled-name='pci_msi_mask_irq' filepath='include/linux/msi.h' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_msi_mask_irq'>
+        <parameter type-id='1c475548'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_chip_mask_parent' mangled-name='irq_chip_mask_parent' filepath='include/linux/irq.h' line='654' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_mask_parent'>
+        <parameter type-id='1c475548'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_msi_unmask_irq' mangled-name='pci_msi_unmask_irq' filepath='include/linux/msi.h' line='199' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_msi_unmask_irq'>
+        <parameter type-id='1c475548'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_chip_unmask_parent' mangled-name='irq_chip_unmask_parent' filepath='include/linux/irq.h' line='656' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_unmask_parent'>
+        <parameter type-id='1c475548'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_walk_bus' mangled-name='pci_walk_bus' filepath='include/linux/pci.h' line='1405' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_walk_bus'>
+        <parameter type-id='d1feb554'/>
+        <parameter type-id='82fb5c77'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_msi_vec_count' mangled-name='pci_msi_vec_count' filepath='include/linux/pci.h' line='1449' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_msi_vec_count'>
+        <parameter type-id='85196e3f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='a1aadc50'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='ccf3b302'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78117ea6'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='b11825ce'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aaa8d90f'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='a9bcccf8'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5e584ca4'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='a9bcccf8'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='88370ce9'/>
+        <parameter type-id='ccf3b302'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c03e8273'>
+        <parameter type-id='b9526cc1'/>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da757fbe'>
+        <parameter type-id='b9526cc1'/>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='b11825ce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6334ba8a'>
+        <parameter type-id='d1feb554'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ba6c1a6f'>
+        <parameter type-id='d1feb554'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='89c3fb76'>
+        <parameter type-id='d1feb554'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b4db8337'>
+        <parameter type-id='85196e3f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1e828e67'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='92fc8aa5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='173cc5a0'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dedd4d90'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='08496218'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f3404a83'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2381d398'>
+        <parameter type-id='a9bcccf8'/>
+        <parameter type-id='ccf3b302'/>
+        <return type-id='88370ce9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b359f47f'>
+        <parameter type-id='85196e3f'/>
+        <return type-id='453a795e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9325ec16'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='c36cf4da'/>
+        <return type-id='453a795e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aefe43a8'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='a9bcccf8'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='95e62b18'>
+        <parameter type-id='ccf3b302'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0706d6e8'>
+        <parameter type-id='ccf3b302'/>
+        <parameter type-id='b11825ce'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='deb48314'>
+        <parameter type-id='b9526cc1'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9d9f3e8b'>
+        <parameter type-id='b11825ce'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0181b08d'>
+        <parameter type-id='d1feb554'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7d41fdf4'>
+        <parameter type-id='85196e3f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9f1d7608'>
+        <parameter type-id='d1feb554'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <pointer-type-def type-id='064acd7a' size-in-bits='64' id='1c475548'/>
+      <pointer-type-def type-id='d2b46ce8' size-in-bits='64' id='b11825ce'/>
+      <class-decl name='irq_data' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='173' column='1' id='064acd7a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hwirq' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='common' type-id='a4a39eba' visibility='default' filepath='include/linux/irq.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='chip' type-id='8846a616' visibility='default' filepath='include/linux/irq.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='domain' type-id='7544e825' visibility='default' filepath='include/linux/irq.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='parent_data' type-id='1c475548' visibility='default' filepath='include/linux/irq.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='chip_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/irq.h' line='183' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='msi_desc' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='85' column='1' id='d2b46ce8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/msi.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/msi.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nvec_used' type-id='f0981eeb' visibility='default' filepath='include/linux/msi.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/msi.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='msg' type-id='03ba410a' visibility='default' filepath='include/linux/msi.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='affinity' type-id='ef2b6ec8' visibility='default' filepath='include/linux/msi.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='iommu_cookie' type-id='eaa32e2f' visibility='default' filepath='include/linux/msi.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='write_msi_msg' type-id='aecf9817' visibility='default' filepath='include/linux/msi.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='write_msi_msg_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/msi.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='' type-id='153fff9c' visibility='default' filepath='include/linux/msi.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f1a268ec' size-in-bits='64' id='a4a39eba'/>
+      <class-decl name='msi_msg' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='8' column='1' id='03ba410a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='address_lo' type-id='19c2251e' visibility='default' filepath='include/linux/msi.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='address_hi' type-id='19c2251e' visibility='default' filepath='include/linux/msi.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='19c2251e' visibility='default' filepath='include/linux/msi.h' line='11' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_common_data' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='143' column='1' id='f1a268ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state_use_accessors' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='handler_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/irq.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='msi_desc' type-id='b11825ce' visibility='default' filepath='include/linux/irq.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='affinity' type-id='b16b461b' visibility='default' filepath='include/linux/irq.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='effective_affinity' type-id='b16b461b' visibility='default' filepath='include/linux/irq.h' line='152' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/irqchip/irq-gic-v3-its-platform-msi.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='8f92235e' size-in-bits='512' id='625d6c02'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <class-decl name='of_phandle_args' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/of.h' line='74' column='1' id='fbff4263'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='np' type-id='9a537bbe' visibility='default' filepath='include/linux/of.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='args_count' type-id='95e97e5e' visibility='default' filepath='include/linux/of.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='args' type-id='625d6c02' visibility='default' filepath='include/linux/of.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e5ce629e' size-in-bits='64' id='77e5615c'/>
+      <pointer-type-def type-id='fbff4263' size-in-bits='64' id='51a94113'/>
+      <function-decl name='of_find_matching_node_and_match' mangled-name='of_find_matching_node_and_match' filepath='include/linux/of.h' line='273' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_matching_node_and_match'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='e5ce629e'/>
+        <parameter type-id='77e5615c'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_device_is_available' mangled-name='of_device_is_available' filepath='include/linux/of.h' line='347' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_device_is_available'>
+        <parameter type-id='0afa6ea3'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='irq_find_matching_fwspec' mangled-name='irq_find_matching_fwspec' filepath='include/linux/irqdomain.h' line='279' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_find_matching_fwspec'>
+        <parameter type-id='2869bb38'/>
+        <parameter type-id='385b8018'/>
+        <return type-id='7544e825'/>
+      </function-decl>
+      <function-decl name='of_parse_phandle_with_args' mangled-name='of_parse_phandle_with_args' filepath='include/linux/of.h' line='367' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_parse_phandle_with_args'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='51a94113'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/irqchip/irq-gic-v3-mbi.c' language='LANG_C89'>
+      <function-decl name='of_translate_address' mangled-name='of_translate_address' filepath='include/linux/of_address.h' line='34' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_translate_address'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='5b2fd8e8'/>
+        <return type-id='3a47d82b'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/irqchip/irq-gic-v3.c' language='LANG_C89'>
+      <pointer-type-def type-id='3a47d82b' size-in-bits='64' id='c0190993'/>
+      <qualified-type-def type-id='48b5725f' volatile='yes' id='b0b3cbf9'/>
+      <pointer-type-def type-id='b0b3cbf9' size-in-bits='64' id='fe09dd29'/>
+      <function-decl name='kstrtobool' mangled-name='kstrtobool' filepath='include/linux/string.h' line='192' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtobool'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='d8e6b335'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_address_to_resource' mangled-name='of_address_to_resource' filepath='include/linux/of_address.h' line='113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_address_to_resource'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='c9d64c0d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_property_read_u64' mangled-name='of_property_read_u64' filepath='include/linux/of.h' line='326' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_read_u64'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='c0190993'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iounmap' mangled-name='iounmap' filepath='arch/arm64/include/asm/io.h' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iounmap'>
+        <parameter type-id='fe09dd29'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_domain_update_bus_token' mangled-name='irq_domain_update_bus_token' filepath='include/linux/irqdomain.h' line='300' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_update_bus_token'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='385b8018'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpu_pm_register_notifier' mangled-name='cpu_pm_register_notifier' filepath='include/linux/cpu_pm.h' line='61' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpu_pm_register_notifier'>
+        <parameter type-id='d504f73d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='free_percpu' mangled-name='free_percpu' filepath='include/linux/percpu.h' line='136' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_percpu'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_get_child_by_name' mangled-name='of_get_child_by_name' filepath='include/linux/of.h' line='295' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_child_by_name'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_get_next_child' mangled-name='of_get_next_child' filepath='include/linux/of.h' line='288' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_next_child'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='9a537bbe'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='irq_create_fwspec_mapping' mangled-name='irq_create_fwspec_mapping' filepath='include/linux/irqdomain.h' line='395' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_create_fwspec_mapping'>
+        <parameter type-id='2869bb38'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='of_property_count_elems_of_size' mangled-name='of_property_count_elems_of_size' filepath='include/linux/of.h' line='307' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_count_elems_of_size'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_property_read_u32_index' mangled-name='of_property_read_u32_index' filepath='include/linux/of.h' line='309' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_read_u32_index'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_find_node_by_phandle' mangled-name='of_find_node_by_phandle' filepath='include/linux/of.h' line='285' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_node_by_phandle'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='irq_domain_get_irq_data' mangled-name='irq_domain_get_irq_data' filepath='include/linux/irqdomain.h' line='456' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_get_irq_data'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='1c475548'/>
+      </function-decl>
+      <function-decl name='irq_domain_set_info' mangled-name='irq_domain_set_info' filepath='include/linux/irqdomain.h' line='458' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_set_info'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='8846a616'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='8937f3c2'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_to_desc' mangled-name='irq_to_desc' filepath='include/linux/irqnr.h' line='9' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_to_desc'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='76c7d88b'/>
+      </function-decl>
+      <function-decl name='cpumask_next_and' mangled-name='cpumask_next_and' filepath='include/linux/cpumask.h' line='245' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpumask_next_and'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='5f8a1ac4'/>
+        <parameter type-id='5f8a1ac4'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='911b5feb' size-in-bits='64' id='76c7d88b'/>
+      <class-decl name='irq_desc' size-in-bits='3584' is-struct='yes' visibility='default' filepath='include/linux/irqdesc.h' line='56' column='1' id='911b5feb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='irq_common_data' type-id='f1a268ec' visibility='default' filepath='include/linux/irqdesc.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='irq_data' type-id='064acd7a' visibility='default' filepath='include/linux/irqdesc.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='kstat_irqs' type-id='807869d3' visibility='default' filepath='include/linux/irqdesc.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='handle_irq' type-id='cdb741d3' visibility='default' filepath='include/linux/irqdesc.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='action' type-id='ba361e53' visibility='default' filepath='include/linux/irqdesc.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='status_use_accessors' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='core_internal_state__do_not_mess_with_it' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='wake_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='tot_count' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='irq_count' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='last_unhandled' type-id='7359adad' visibility='default' filepath='include/linux/irqdesc.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='irqs_unhandled' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='threads_handled' type-id='49178f86' visibility='default' filepath='include/linux/irqdesc.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='threads_handled_last' type-id='95e97e5e' visibility='default' filepath='include/linux/irqdesc.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/irqdesc.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='percpu_enabled' type-id='74bccedd' visibility='default' filepath='include/linux/irqdesc.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='percpu_affinity' type-id='5f8a1ac4' visibility='default' filepath='include/linux/irqdesc.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='affinity_hint' type-id='5f8a1ac4' visibility='default' filepath='include/linux/irqdesc.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='affinity_notify' type-id='7ca8e198' visibility='default' filepath='include/linux/irqdesc.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='threads_oneshot' type-id='7359adad' visibility='default' filepath='include/linux/irqdesc.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='threads_active' type-id='49178f86' visibility='default' filepath='include/linux/irqdesc.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='wait_for_threads' type-id='b5ab048f' visibility='default' filepath='include/linux/irqdesc.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='nr_actions' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='no_suspend_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='cond_suspend_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='force_resume_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dir' type-id='d077e928' visibility='default' filepath='include/linux/irqdesc.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/irqdesc.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/irqdesc.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='request_mutex' type-id='925167dc' visibility='default' filepath='include/linux/irqdesc.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='parent_irq' type-id='95e97e5e' visibility='default' filepath='include/linux/irqdesc.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/linux/irqdesc.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/irqdesc.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='58f5058a' size-in-bits='64' id='7ca8e198'/>
+      <pointer-type-def type-id='754d1c63' size-in-bits='64' id='ba361e53'/>
+      <class-decl name='irq_affinity_notify' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/interrupt.h' line='255' column='1' id='58f5058a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/interrupt.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/interrupt.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='notify' type-id='c1d52f61' visibility='default' filepath='include/linux/interrupt.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='release' type-id='16575f26' visibility='default' filepath='include/linux/interrupt.h' line='260' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irqaction' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/interrupt.h' line='110' column='1' id='754d1c63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='handler' type-id='29591c9a' visibility='default' filepath='include/linux/interrupt.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev_id' type-id='eaa32e2f' visibility='default' filepath='include/linux/interrupt.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='percpu_dev_id' type-id='eaa32e2f' visibility='default' filepath='include/linux/interrupt.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='ba361e53' visibility='default' filepath='include/linux/interrupt.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='thread_fn' type-id='29591c9a' visibility='default' filepath='include/linux/interrupt.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='thread' type-id='f23e2572' visibility='default' filepath='include/linux/interrupt.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='secondary' type-id='ba361e53' visibility='default' filepath='include/linux/interrupt.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='thread_flags' type-id='7359adad' visibility='default' filepath='include/linux/interrupt.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='thread_mask' type-id='7359adad' visibility='default' filepath='include/linux/interrupt.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/interrupt.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dir' type-id='d077e928' visibility='default' filepath='include/linux/interrupt.h' line='123' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='426a0da5' size-in-bits='64' id='c1d52f61'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/irqchip/irq-mbigen.c' language='LANG_C89'>
+      <function-decl name='devm_ioremap' mangled-name='devm_ioremap' filepath='include/linux/io.h' line='65' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_ioremap'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='3a47d82b'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='of_platform_device_create' mangled-name='of_platform_device_create' filepath='include/linux/of_platform.h' line='65' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_platform_device_create'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='db362995'/>
+      </function-decl>
+      <function-decl name='irq_get_irq_data' mangled-name='irq_get_irq_data' filepath='include/linux/irq.h' line='784' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_get_irq_data'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='1c475548'/>
+      </function-decl>
+      <function-decl name='irq_domain_set_hwirq_and_chip' mangled-name='irq_domain_set_hwirq_and_chip' filepath='include/linux/irqdomain.h' line='498' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_set_hwirq_and_chip'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='8846a616'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/irqchip/irq-sun4i.c' language='LANG_C89'>
+      <class-decl name='address_space' is-struct='yes' visibility='default' is-declaration-only='yes' id='0fd82dc3'/>
+      <class-decl name='cred' is-struct='yes' visibility='default' is-declaration-only='yes' id='6739dd0a'/>
+      <class-decl name='io_context' is-struct='yes' visibility='default' is-declaration-only='yes' id='d002899e'/>
+      <class-decl name='key' is-struct='yes' visibility='default' is-declaration-only='yes' id='128d0ac5'/>
+      <class-decl name='msi_desc' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='85' column='1' id='d2b46ce8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/msi.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/msi.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nvec_used' type-id='f0981eeb' visibility='default' filepath='include/linux/msi.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/msi.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='msg' type-id='03ba410a' visibility='default' filepath='include/linux/msi.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='affinity' type-id='ef2b6ec8' visibility='default' filepath='include/linux/msi.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='iommu_cookie' type-id='eaa32e2f' visibility='default' filepath='include/linux/msi.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='write_msi_msg' type-id='aecf9817' visibility='default' filepath='include/linux/msi.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='write_msi_msg_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/msi.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='' type-id='153fff9c' visibility='default' filepath='include/linux/msi.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='msi_msg' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='8' column='1' id='03ba410a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='address_lo' type-id='19c2251e' visibility='default' filepath='include/linux/msi.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='address_hi' type-id='19c2251e' visibility='default' filepath='include/linux/msi.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='19c2251e' visibility='default' filepath='include/linux/msi.h' line='11' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nsproxy' is-struct='yes' visibility='default' is-declaration-only='yes' id='b82b9d3b'/>
+      <class-decl name='signal_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='9a4619c0'/>
+      <array-type-def dimensions='1' type-id='e53d7a90' size-in-bits='infinite' id='a5527824'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='62778ae5' size-in-bits='infinite' id='7290550d'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='512' id='02fdec64'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='infinite' id='c764d637'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='irq_chip' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='480' column='1' id='0f5f7920'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent_device' type-id='fa0b179b' visibility='default' filepath='include/linux/irq.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/irq.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='irq_startup' type-id='1cb2627d' visibility='default' filepath='include/linux/irq.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='irq_shutdown' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='irq_enable' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='irq_disable' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='irq_ack' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='irq_mask' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irq_mask_ack' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='irq_unmask' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='irq_eoi' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='irq_set_affinity' type-id='d72a0292' visibility='default' filepath='include/linux/irq.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='irq_retrigger' type-id='ed9f97a6' visibility='default' filepath='include/linux/irq.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='irq_set_type' type-id='f3bd9244' visibility='default' filepath='include/linux/irq.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='irq_set_wake' type-id='f3bd9244' visibility='default' filepath='include/linux/irq.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='irq_bus_lock' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='irq_bus_sync_unlock' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='irq_cpu_online' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='irq_cpu_offline' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='irq_suspend' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='irq_resume' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='irq_pm_shutdown' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='irq_calc_mask' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='irq_print_chip' type-id='9438aa05' visibility='default' filepath='include/linux/irq.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='irq_request_resources' type-id='ed9f97a6' visibility='default' filepath='include/linux/irq.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='irq_release_resources' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='irq_compose_msi_msg' type-id='3a3e6b6c' visibility='default' filepath='include/linux/irq.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='irq_write_msi_msg' type-id='3a3e6b6c' visibility='default' filepath='include/linux/irq.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='irq_get_irqchip_state' type-id='f12b668c' visibility='default' filepath='include/linux/irq.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='irq_set_irqchip_state' type-id='ecf8d02d' visibility='default' filepath='include/linux/irq.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='irq_set_vcpu_affinity' type-id='cb5b8228' visibility='default' filepath='include/linux/irq.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ipi_send_single' type-id='19c5fc2b' visibility='default' filepath='include/linux/irq.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ipi_send_mask' type-id='eb0bccd8' visibility='default' filepath='include/linux/irq.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='irq_nmi_setup' type-id='ed9f97a6' visibility='default' filepath='include/linux/irq.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='irq_nmi_teardown' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='529' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_data' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='173' column='1' id='064acd7a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hwirq' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='common' type-id='a4a39eba' visibility='default' filepath='include/linux/irq.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='chip' type-id='8846a616' visibility='default' filepath='include/linux/irq.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='domain' type-id='7544e825' visibility='default' filepath='include/linux/irq.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='parent_data' type-id='1c475548' visibility='default' filepath='include/linux/irq.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='chip_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/irq.h' line='183' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_common_data' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='143' column='1' id='f1a268ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state_use_accessors' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='handler_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/irq.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='msi_desc' type-id='b11825ce' visibility='default' filepath='include/linux/irq.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='affinity' type-id='b16b461b' visibility='default' filepath='include/linux/irq.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='effective_affinity' type-id='b16b461b' visibility='default' filepath='include/linux/irq.h' line='152' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_domain' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/linux/irqdomain.h' line='162' column='1' id='a667f60f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='link' type-id='72f469ec' visibility='default' filepath='include/linux/irqdomain.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/irqdomain.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='2c202856' visibility='default' filepath='include/linux/irqdomain.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='host_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/irqdomain.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdomain.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='mapcount' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdomain.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/irqdomain.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bus_token' type-id='385b8018' visibility='default' filepath='include/linux/irqdomain.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='gc' type-id='8e62d7cb' visibility='default' filepath='include/linux/irqdomain.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='parent' type-id='7544e825' visibility='default' filepath='include/linux/irqdomain.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/irqdomain.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/irqdomain.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/irqdomain.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/irqdomain.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='hwirq_max' type-id='88370ce9' visibility='default' filepath='include/linux/irqdomain.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='revmap_direct_max_irq' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdomain.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='revmap_size' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdomain.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='revmap_tree' type-id='d39738ac' visibility='default' filepath='include/linux/irqdomain.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='revmap_tree_mutex' type-id='925167dc' visibility='default' filepath='include/linux/irqdomain.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='linear_revmap' type-id='c764d637' visibility='default' filepath='include/linux/irqdomain.h' line='192' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_domain_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/irqdomain.h' line='105' column='1' id='0926e4bd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='match' type-id='f1c95c76' visibility='default' filepath='include/linux/irqdomain.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='select' type-id='e1759090' visibility='default' filepath='include/linux/irqdomain.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='8a2b0cc8' visibility='default' filepath='include/linux/irqdomain.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unmap' type-id='8b74557f' visibility='default' filepath='include/linux/irqdomain.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xlate' type-id='7881e15c' visibility='default' filepath='include/linux/irqdomain.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='alloc' type-id='0871ecbc' visibility='default' filepath='include/linux/irqdomain.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='free' type-id='644a4b55' visibility='default' filepath='include/linux/irqdomain.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='activate' type-id='7ad47ca2' visibility='default' filepath='include/linux/irqdomain.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='deactivate' type-id='0b8fca52' visibility='default' filepath='include/linux/irqdomain.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='translate' type-id='bbe45043' visibility='default' filepath='include/linux/irqdomain.h' line='123' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='irq_domain_bus_token' filepath='include/linux/irqdomain.h' line='77' column='1' id='385b8018'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DOMAIN_BUS_ANY' value='0'/>
+        <enumerator name='DOMAIN_BUS_WIRED' value='1'/>
+        <enumerator name='DOMAIN_BUS_GENERIC_MSI' value='2'/>
+        <enumerator name='DOMAIN_BUS_PCI_MSI' value='3'/>
+        <enumerator name='DOMAIN_BUS_PLATFORM_MSI' value='4'/>
+        <enumerator name='DOMAIN_BUS_NEXUS' value='5'/>
+        <enumerator name='DOMAIN_BUS_IPI' value='6'/>
+        <enumerator name='DOMAIN_BUS_FSL_MC_MSI' value='7'/>
+        <enumerator name='DOMAIN_BUS_TI_SCI_INTA_MSI' value='8'/>
+        <enumerator name='DOMAIN_BUS_WAKEUP' value='9'/>
+      </enum-decl>
+      <class-decl name='irq_fwspec' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/irqdomain.h' line='64' column='1' id='a87c488a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/irqdomain.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='param_count' type-id='95e97e5e' visibility='default' filepath='include/linux/irqdomain.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='param' type-id='02fdec64' visibility='default' filepath='include/linux/irqdomain.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='irq_hw_number_t' type-id='7359adad' filepath='include/linux/types.h' line='169' column='1' id='88370ce9'/>
+      <class-decl name='irq_domain_chip_generic' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='1076' column='1' id='f100815b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='irqs_per_chip' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1077' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num_chips' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='irq_flags_to_clear' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='irq_flags_to_set' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1080' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gc_flags' type-id='7a1ec3b1' visibility='default' filepath='include/linux/irq.h' line='1081' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='gc' type-id='a5527824' visibility='default' filepath='include/linux/irq.h' line='1082' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='irq_gc_flags' filepath='include/linux/irq.h' line='1059' column='1' id='7a1ec3b1'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IRQ_GC_INIT_MASK_CACHE' value='1'/>
+        <enumerator name='IRQ_GC_INIT_NESTED_LOCK' value='2'/>
+        <enumerator name='IRQ_GC_MASK_CACHE_PER_TYPE' value='4'/>
+        <enumerator name='IRQ_GC_NO_MASK' value='8'/>
+        <enumerator name='IRQ_GC_BE_IO' value='16'/>
+      </enum-decl>
+      <class-decl name='irq_chip_generic' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='1026' column='1' id='bb06f572'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/irq.h' line='1027' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg_base' type-id='eaa32e2f' visibility='default' filepath='include/linux/irq.h' line='1028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reg_readl' type-id='99577235' visibility='default' filepath='include/linux/irq.h' line='1029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reg_writel' type-id='f34cc61f' visibility='default' filepath='include/linux/irq.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='suspend' type-id='bf17d761' visibility='default' filepath='include/linux/irq.h' line='1031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resume' type-id='bf17d761' visibility='default' filepath='include/linux/irq.h' line='1032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='irq_base' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='irq_cnt' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1034' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mask_cache' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='type_cache' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='polarity_cache' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='wake_enabled' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wake_active' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='num_ct' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/irq.h' line='1041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='installed' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='1042' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='unused' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='1043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='domain' type-id='7544e825' visibility='default' filepath='include/linux/irq.h' line='1044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/irq.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='chip_types' type-id='7290550d' visibility='default' filepath='include/linux/irq.h' line='1046' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_chip_type' size-in-bits='2944' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='984' column='1' id='62778ae5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chip' type-id='0f5f7920' visibility='default' filepath='include/linux/irq.h' line='985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='regs' type-id='6194fd9a' visibility='default' filepath='include/linux/irq.h' line='986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='handler' type-id='cdb741d3' visibility='default' filepath='include/linux/irq.h' line='987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='type' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='mask_cache_priv' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='mask_cache' type-id='f9409001' visibility='default' filepath='include/linux/irq.h' line='990' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_chip_regs' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='961' column='1' id='6194fd9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enable' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='962' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='963' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mask' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='964' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ack' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='965' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='eoi' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='type' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='967' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='polarity' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='968' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_desc' size-in-bits='3584' is-struct='yes' visibility='default' filepath='include/linux/irqdesc.h' line='56' column='1' id='911b5feb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='irq_common_data' type-id='f1a268ec' visibility='default' filepath='include/linux/irqdesc.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='irq_data' type-id='064acd7a' visibility='default' filepath='include/linux/irqdesc.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='kstat_irqs' type-id='807869d3' visibility='default' filepath='include/linux/irqdesc.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='handle_irq' type-id='cdb741d3' visibility='default' filepath='include/linux/irqdesc.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='action' type-id='ba361e53' visibility='default' filepath='include/linux/irqdesc.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='status_use_accessors' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='core_internal_state__do_not_mess_with_it' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='wake_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='tot_count' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='irq_count' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='last_unhandled' type-id='7359adad' visibility='default' filepath='include/linux/irqdesc.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='irqs_unhandled' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='threads_handled' type-id='49178f86' visibility='default' filepath='include/linux/irqdesc.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='threads_handled_last' type-id='95e97e5e' visibility='default' filepath='include/linux/irqdesc.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/irqdesc.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='percpu_enabled' type-id='74bccedd' visibility='default' filepath='include/linux/irqdesc.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='percpu_affinity' type-id='5f8a1ac4' visibility='default' filepath='include/linux/irqdesc.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='affinity_hint' type-id='5f8a1ac4' visibility='default' filepath='include/linux/irqdesc.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='affinity_notify' type-id='7ca8e198' visibility='default' filepath='include/linux/irqdesc.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='threads_oneshot' type-id='7359adad' visibility='default' filepath='include/linux/irqdesc.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='threads_active' type-id='49178f86' visibility='default' filepath='include/linux/irqdesc.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='wait_for_threads' type-id='b5ab048f' visibility='default' filepath='include/linux/irqdesc.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='nr_actions' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='no_suspend_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='cond_suspend_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='force_resume_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dir' type-id='d077e928' visibility='default' filepath='include/linux/irqdesc.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/irqdesc.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/irqdesc.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='request_mutex' type-id='925167dc' visibility='default' filepath='include/linux/irqdesc.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='parent_irq' type-id='95e97e5e' visibility='default' filepath='include/linux/irqdesc.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/linux/irqdesc.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/irqdesc.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='irq_flow_handler_t' type-id='8937f3c2' filepath='include/linux/irqhandler.h' line='12' column='1' id='cdb741d3'/>
+      <class-decl name='irqaction' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/interrupt.h' line='110' column='1' id='754d1c63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='handler' type-id='29591c9a' visibility='default' filepath='include/linux/interrupt.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev_id' type-id='eaa32e2f' visibility='default' filepath='include/linux/interrupt.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='percpu_dev_id' type-id='eaa32e2f' visibility='default' filepath='include/linux/interrupt.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='ba361e53' visibility='default' filepath='include/linux/interrupt.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='thread_fn' type-id='29591c9a' visibility='default' filepath='include/linux/interrupt.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='thread' type-id='f23e2572' visibility='default' filepath='include/linux/interrupt.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='secondary' type-id='ba361e53' visibility='default' filepath='include/linux/interrupt.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='thread_flags' type-id='7359adad' visibility='default' filepath='include/linux/interrupt.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='thread_mask' type-id='7359adad' visibility='default' filepath='include/linux/interrupt.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/interrupt.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dir' type-id='d077e928' visibility='default' filepath='include/linux/interrupt.h' line='123' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='irq_handler_t' type-id='3fefe9b7' filepath='include/linux/interrupt.h' line='92' column='1' id='29591c9a'/>
+      <typedef-decl name='irqreturn_t' type-id='8086ea38' filepath='include/linux/irqreturn.h' line='17' column='1' id='4bdecfd7'/>
+      <enum-decl name='irqreturn' filepath='include/linux/irqreturn.h' line='11' column='1' id='8086ea38'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IRQ_NONE' value='0'/>
+        <enumerator name='IRQ_HANDLED' value='1'/>
+        <enumerator name='IRQ_WAKE_THREAD' value='2'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='79' column='1' id='1c70c8aa'>
+        <data-member access='private'>
+          <var-decl name='' type-id='9228d426' visibility='default' filepath='include/linux/mm_types.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='5f2b8baf' visibility='default' filepath='include/linux/mm_types.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='7d00e4f0' visibility='default' filepath='include/linux/mm_types.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='1c2d6ac7' visibility='default' filepath='include/linux/mm_types.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='ce8e16a4' visibility='default' filepath='include/linux/mm_types.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='b32fec8c' visibility='default' filepath='include/linux/mm_types.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='754ab6d5' visibility='default' filepath='include/linux/mm_types.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/mm_types.h' line='177' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='80' column='1' id='9228d426'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lru' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mapping' type-id='f57039f1' visibility='default' filepath='include/linux/mm_types.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='index' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='private' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_affinity_notify' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/interrupt.h' line='255' column='1' id='58f5058a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/interrupt.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/interrupt.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='notify' type-id='c1d52f61' visibility='default' filepath='include/linux/interrupt.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='release' type-id='16575f26' visibility='default' filepath='include/linux/interrupt.h' line='260' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='irqchip_irq_state' filepath='include/linux/interrupt.h' line='463' column='1' id='0187da1b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IRQCHIP_STATE_PENDING' value='0'/>
+        <enumerator name='IRQCHIP_STATE_ACTIVE' value='1'/>
+        <enumerator name='IRQCHIP_STATE_MASKED' value='2'/>
+        <enumerator name='IRQCHIP_STATE_LINE_LEVEL' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='0fd82dc3' size-in-bits='64' id='f57039f1'/>
+      <qualified-type-def type-id='6739dd0a' const='yes' id='bca91995'/>
+      <pointer-type-def type-id='bca91995' size-in-bits='64' id='bc33861b'/>
+      <qualified-type-def type-id='0926e4bd' const='yes' id='a4974438'/>
+      <pointer-type-def type-id='a4974438' size-in-bits='64' id='2c202856'/>
+      <pointer-type-def type-id='4852a8ec' size-in-bits='64' id='ed9f97a6'/>
+      <pointer-type-def type-id='f5c32c38' size-in-bits='64' id='d72a0292'/>
+      <pointer-type-def type-id='97f95e6a' size-in-bits='64' id='f12b668c'/>
+      <pointer-type-def type-id='2cabe151' size-in-bits='64' id='ecf8d02d'/>
+      <pointer-type-def type-id='91265862' size-in-bits='64' id='f3bd9244'/>
+      <pointer-type-def type-id='20f1cebe' size-in-bits='64' id='cb5b8228'/>
+      <pointer-type-def type-id='8ab70c7a' size-in-bits='64' id='7881e15c'/>
+      <pointer-type-def type-id='3de312fc' size-in-bits='64' id='f1c95c76'/>
+      <pointer-type-def type-id='dea13b10' size-in-bits='64' id='7ad47ca2'/>
+      <pointer-type-def type-id='a5eadeee' size-in-bits='64' id='e1759090'/>
+      <pointer-type-def type-id='a2ef4917' size-in-bits='64' id='bbe45043'/>
+      <pointer-type-def type-id='7e765fce' size-in-bits='64' id='8a2b0cc8'/>
+      <pointer-type-def type-id='1d6846fa' size-in-bits='64' id='0871ecbc'/>
+      <pointer-type-def type-id='d002899e' size-in-bits='64' id='d042cfae'/>
+      <pointer-type-def type-id='58f5058a' size-in-bits='64' id='7ca8e198'/>
+      <pointer-type-def type-id='0f5f7920' size-in-bits='64' id='8846a616'/>
+      <pointer-type-def type-id='bb06f572' size-in-bits='64' id='e53d7a90'/>
+      <pointer-type-def type-id='f1a268ec' size-in-bits='64' id='a4a39eba'/>
+      <pointer-type-def type-id='064acd7a' size-in-bits='64' id='1c475548'/>
+      <pointer-type-def type-id='911b5feb' size-in-bits='64' id='76c7d88b'/>
+      <pointer-type-def type-id='a667f60f' size-in-bits='64' id='7544e825'/>
+      <pointer-type-def type-id='f100815b' size-in-bits='64' id='8e62d7cb'/>
+      <pointer-type-def type-id='a87c488a' size-in-bits='64' id='2869bb38'/>
+      <pointer-type-def type-id='754d1c63' size-in-bits='64' id='ba361e53'/>
+      <pointer-type-def type-id='128d0ac5' size-in-bits='64' id='204a4633'/>
+      <pointer-type-def type-id='400fb07b' size-in-bits='64' id='aa29ecab'/>
+      <pointer-type-def type-id='d2b46ce8' size-in-bits='64' id='b11825ce'/>
+      <pointer-type-def type-id='03ba410a' size-in-bits='64' id='7f6ae768'/>
+      <pointer-type-def type-id='b82b9d3b' size-in-bits='64' id='dc5ce119'/>
+      <pointer-type-def type-id='9a4619c0' size-in-bits='64' id='a91cd5f8'/>
+      <pointer-type-def type-id='19f1c953' size-in-bits='64' id='3fefe9b7'/>
+      <pointer-type-def type-id='7addb8a1' size-in-bits='64' id='1cb2627d'/>
+      <pointer-type-def type-id='426a0da5' size-in-bits='64' id='c1d52f61'/>
+      <pointer-type-def type-id='75685cad' size-in-bits='64' id='bf17d761'/>
+      <pointer-type-def type-id='3b7ef195' size-in-bits='64' id='185ccd91'/>
+      <pointer-type-def type-id='9cad7816' size-in-bits='64' id='eb0bccd8'/>
+      <pointer-type-def type-id='16ebfbba' size-in-bits='64' id='3a3e6b6c'/>
+      <pointer-type-def type-id='9e497d29' size-in-bits='64' id='9438aa05'/>
+      <pointer-type-def type-id='e7c67bff' size-in-bits='64' id='19c5fc2b'/>
+      <pointer-type-def type-id='da4d9050' size-in-bits='64' id='8937f3c2'/>
+      <pointer-type-def type-id='71099d68' size-in-bits='64' id='0b8fca52'/>
+      <pointer-type-def type-id='eb940a3b' size-in-bits='64' id='8b74557f'/>
+      <pointer-type-def type-id='267816c1' size-in-bits='64' id='644a4b55'/>
+      <pointer-type-def type-id='4dd76d14' size-in-bits='64' id='16575f26'/>
+      <pointer-type-def type-id='4b8eb833' size-in-bits='64' id='f34cc61f'/>
+      <function-decl name='of_iomap' mangled-name='of_iomap' filepath='include/linux/of_address.h' line='115' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_iomap'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='irq_set_chip_and_handler_name' mangled-name='irq_set_chip_and_handler_name' filepath='include/linux/irq.h' line='684' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_chip_and_handler_name'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='8846a616'/>
+        <parameter type-id='8937f3c2'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_modify_status' mangled-name='irq_modify_status' filepath='include/linux/irq.h' line='729' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_modify_status'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='4852a8ec'>
+        <parameter type-id='1c475548'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f5c32c38'>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='5f8a1ac4'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='97f95e6a'>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='0187da1b'/>
+        <parameter type-id='d8e6b335'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2cabe151'>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='0187da1b'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='91265862'>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='20f1cebe'>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8ab70c7a'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='aded214c'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3de312fc'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='385b8018'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dea13b10'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a5eadeee'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='2869bb38'/>
+        <parameter type-id='385b8018'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2ef4917'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='2869bb38'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7e765fce'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='88370ce9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1d6846fa'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='19f1c953'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='4bdecfd7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7addb8a1'>
+        <parameter type-id='1c475548'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='426a0da5'>
+        <parameter type-id='7ca8e198'/>
+        <parameter type-id='af4bd535'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='75685cad'>
+        <parameter type-id='e53d7a90'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3b7ef195'>
+        <parameter type-id='1c475548'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9cad7816'>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='5f8a1ac4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='16ebfbba'>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='7f6ae768'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9e497d29'>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='f8dc9def'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e7c67bff'>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da4d9050'>
+        <parameter type-id='76c7d88b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='71099d68'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='1c475548'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eb940a3b'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='267816c1'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4dd76d14'>
+        <parameter type-id='aa29ecab'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4b8eb833'>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/irqchip/irq-sunxi-nmi.c' language='LANG_C89'>
+      <function-decl name='irq_of_parse_and_map' mangled-name='irq_of_parse_and_map' filepath='include/linux/of_irq.h' line='108' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_of_parse_and_map'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='of_io_request_and_map' mangled-name='of_io_request_and_map' filepath='include/linux/of_address.h' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_io_request_and_map'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='irq_set_chained_handler_and_data' mangled-name='irq_set_chained_handler_and_data' filepath='include/linux/irq.h' line='726' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_chained_handler_and_data'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='8937f3c2'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_domain_remove' mangled-name='irq_domain_remove' filepath='include/linux/irqdomain.h' line='382' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_remove'>
+        <parameter type-id='7544e825'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_find_mapping' mangled-name='irq_find_mapping' filepath='include/linux/irqdomain.h' line='420' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_find_mapping'>
+        <parameter type-id='7544e825'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='generic_handle_irq' mangled-name='generic_handle_irq' filepath='include/linux/irqdesc.h' line='159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_handle_irq'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/leds/led-class-flash.c' language='LANG_C89'>
+      <class-decl name='led_classdev_flash' size-in-bits='3712' is-struct='yes' visibility='default' filepath='include/linux/led-class-flash.h' line='65' column='1' id='e6a2c851'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='led_cdev' type-id='6e0e17b0' visibility='default' filepath='include/linux/led-class-flash.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='ops' type-id='4b90501b' visibility='default' filepath='include/linux/led-class-flash.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='brightness' type-id='d7244bd4' visibility='default' filepath='include/linux/led-class-flash.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='timeout' type-id='d7244bd4' visibility='default' filepath='include/linux/led-class-flash.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='sysfs_groups' type-id='9f18d529' visibility='default' filepath='include/linux/led-class-flash.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='led_flash_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/led-class-flash.h' line='33' column='1' id='842b8964'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flash_brightness_set' type-id='8cbb2c12' visibility='default' filepath='include/linux/led-class-flash.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flash_brightness_get' type-id='9630d76f' visibility='default' filepath='include/linux/led-class-flash.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='strobe_set' type-id='3a068a46' visibility='default' filepath='include/linux/led-class-flash.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='strobe_get' type-id='80c2f2c9' visibility='default' filepath='include/linux/led-class-flash.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='timeout_set' type-id='8cbb2c12' visibility='default' filepath='include/linux/led-class-flash.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fault_get' type-id='9630d76f' visibility='default' filepath='include/linux/led-class-flash.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='led_flash_setting' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/led-class-flash.h' line='54' column='1' id='d7244bd4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min' type-id='19c2251e' visibility='default' filepath='include/linux/led-class-flash.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max' type-id='19c2251e' visibility='default' filepath='include/linux/led-class-flash.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='step' type-id='19c2251e' visibility='default' filepath='include/linux/led-class-flash.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='val' type-id='19c2251e' visibility='default' filepath='include/linux/led-class-flash.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='842b8964' const='yes' id='7d1bac73'/>
+      <pointer-type-def type-id='7d1bac73' size-in-bits='64' id='4b90501b'/>
+      <pointer-type-def type-id='a547eaa5' size-in-bits='64' id='80c2f2c9'/>
+      <pointer-type-def type-id='1fc85394' size-in-bits='64' id='3a068a46'/>
+      <pointer-type-def type-id='b21fa5e0' size-in-bits='64' id='8cbb2c12'/>
+      <pointer-type-def type-id='a2e29ca3' size-in-bits='64' id='9630d76f'/>
+      <pointer-type-def type-id='e6a2c851' size-in-bits='64' id='26deddb9'/>
+      <function-decl name='led_classdev_flash_register_ext' mangled-name='led_classdev_flash_register_ext' filepath='drivers/leds/led-class-flash.c' line='285' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_classdev_flash_register_ext'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/leds/led-class-flash.c' line='285' column='1'/>
+        <parameter type-id='26deddb9' name='fled_cdev' filepath='drivers/leds/led-class-flash.c' line='286' column='1'/>
+        <parameter type-id='eebb8ee8' name='init_data' filepath='drivers/leds/led-class-flash.c' line='287' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='led_classdev_flash_unregister' mangled-name='led_classdev_flash_unregister' filepath='drivers/leds/led-class-flash.c' line='321' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_classdev_flash_unregister'>
+        <parameter type-id='26deddb9' name='fled_cdev' filepath='drivers/leds/led-class-flash.c' line='321' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <array-type-def dimensions='1' type-id='8ff9530e' size-in-bits='320' id='9f18d529'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <function-type size-in-bits='64' id='a547eaa5'>
+        <parameter type-id='26deddb9'/>
+        <parameter type-id='d8e6b335'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1fc85394'>
+        <parameter type-id='26deddb9'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b21fa5e0'>
+        <parameter type-id='26deddb9'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2e29ca3'>
+        <parameter type-id='26deddb9'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/leds/trigger/ledtrig-timer.c' language='LANG_C89'>
+      <function-decl name='led_trigger_unregister' mangled-name='led_trigger_unregister' filepath='include/linux/leds.h' line='370' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_trigger_unregister'>
+        <parameter type-id='db6d90a1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='led_get_default_pattern' mangled-name='led_get_default_pattern' filepath='include/linux/leds.h' line='282' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_get_default_pattern'>
+        <parameter type-id='bd1c8eb6'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='807869d3'/>
+      </function-decl>
+      <function-decl name='led_set_brightness' mangled-name='led_set_brightness' filepath='include/linux/leds.h' line='244' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_set_brightness'>
+        <parameter type-id='bd1c8eb6'/>
+        <parameter type-id='fa598f35'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kstrtoull' mangled-name='kstrtoull' filepath='include/linux/kernel.h' line='342' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtoull'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='c0190993'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='led_trigger_register' mangled-name='led_trigger_register' filepath='include/linux/leds.h' line='369' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_trigger_register'>
+        <parameter type-id='db6d90a1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/mailbox/hi3660-mailbox.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='1280' id='4a460309'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <class-decl name='mbox_controller' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/mailbox_controller.h' line='74' column='1' id='026a169a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/mailbox_controller.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='962b0f84' visibility='default' filepath='include/linux/mailbox_controller.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='chans' type-id='339c87e9' visibility='default' filepath='include/linux/mailbox_controller.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_chans' type-id='95e97e5e' visibility='default' filepath='include/linux/mailbox_controller.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='txdone_irq' type-id='b50a4934' visibility='default' filepath='include/linux/mailbox_controller.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='232'>
+          <var-decl name='txdone_poll' type-id='b50a4934' visibility='default' filepath='include/linux/mailbox_controller.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='txpoll_period' type-id='f0981eeb' visibility='default' filepath='include/linux/mailbox_controller.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_xlate' type-id='8bdb16d5' visibility='default' filepath='include/linux/mailbox_controller.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='poll_hrt' type-id='b6993efc' visibility='default' filepath='include/linux/mailbox_controller.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/mailbox_controller.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mbox_chan_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/mailbox_controller.h' line='46' column='1' id='4d1a8c39'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='send_data' type-id='9f8ab0a2' visibility='default' filepath='include/linux/mailbox_controller.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flush' type-id='cead4188' visibility='default' filepath='include/linux/mailbox_controller.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='startup' type-id='f7bc2858' visibility='default' filepath='include/linux/mailbox_controller.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='shutdown' type-id='a9035179' visibility='default' filepath='include/linux/mailbox_controller.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='last_tx_done' type-id='921a362a' visibility='default' filepath='include/linux/mailbox_controller.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='peek_data' type-id='921a362a' visibility='default' filepath='include/linux/mailbox_controller.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mbox_chan' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/linux/mailbox_controller.h' line='117' column='1' id='cbc88d4b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mbox' type-id='fb648468' visibility='default' filepath='include/linux/mailbox_controller.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='txdone_method' type-id='f0981eeb' visibility='default' filepath='include/linux/mailbox_controller.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cl' type-id='aeae13b9' visibility='default' filepath='include/linux/mailbox_controller.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_complete' type-id='f9fef04f' visibility='default' filepath='include/linux/mailbox_controller.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='active_req' type-id='eaa32e2f' visibility='default' filepath='include/linux/mailbox_controller.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='msg_count' type-id='f0981eeb' visibility='default' filepath='include/linux/mailbox_controller.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='msg_free' type-id='f0981eeb' visibility='default' filepath='include/linux/mailbox_controller.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='msg_data' type-id='4a460309' visibility='default' filepath='include/linux/mailbox_controller.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mailbox_controller.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='con_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/mailbox_controller.h' line='126' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='4d1a8c39' const='yes' id='24a174c6'/>
+      <pointer-type-def type-id='24a174c6' size-in-bits='64' id='962b0f84'/>
+      <pointer-type-def type-id='5468e006' size-in-bits='64' id='f7bc2858'/>
+      <pointer-type-def type-id='98985516' size-in-bits='64' id='cead4188'/>
+      <pointer-type-def type-id='d4f11968' size-in-bits='64' id='9f8ab0a2'/>
+      <pointer-type-def type-id='cbc88d4b' size-in-bits='64' id='339c87e9'/>
+      <pointer-type-def type-id='b08da511' size-in-bits='64' id='8bdb16d5'/>
+      <pointer-type-def type-id='026a169a' size-in-bits='64' id='fb648468'/>
+      <pointer-type-def type-id='f7b53f40' size-in-bits='64' id='921a362a'/>
+      <pointer-type-def type-id='10b63b7d' size-in-bits='64' id='a9035179'/>
+      <function-decl name='devm_mbox_controller_register' mangled-name='devm_mbox_controller_register' filepath='include/linux/mailbox_controller.h' line='134' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_mbox_controller_register'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='fb648468'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ktime_get' mangled-name='ktime_get' filepath='include/linux/timekeeping.h' line='67' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get'>
+        <return type-id='1eb56b1e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='5468e006'>
+        <parameter type-id='339c87e9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='98985516'>
+        <parameter type-id='339c87e9'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d4f11968'>
+        <parameter type-id='339c87e9'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b08da511'>
+        <parameter type-id='fb648468'/>
+        <parameter type-id='af02a266'/>
+        <return type-id='339c87e9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f7b53f40'>
+        <parameter type-id='339c87e9'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='10b63b7d'>
+        <parameter type-id='339c87e9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/mailbox/hi6220-mailbox.c' language='LANG_C89'>
+      <function-decl name='mbox_chan_txdone' mangled-name='mbox_chan_txdone' filepath='include/linux/mailbox_controller.h' line='132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mbox_chan_txdone'>
+        <parameter type-id='339c87e9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mbox_chan_received_data' mangled-name='mbox_chan_received_data' filepath='include/linux/mailbox_controller.h' line='131' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mbox_chan_received_data'>
+        <parameter type-id='339c87e9'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/mailbox/mailbox.c' language='LANG_C89'>
+      <function-decl name='mbox_request_channel_byname' mangled-name='mbox_request_channel_byname' filepath='drivers/mailbox/mailbox.c' line='402' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mbox_request_channel_byname'>
+        <parameter type-id='aeae13b9' name='cl' filepath='drivers/mailbox/mailbox.c' line='402' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/mailbox/mailbox.c' line='403' column='1'/>
+        <return type-id='339c87e9'/>
+      </function-decl>
+      <function-decl name='mbox_controller_register' mangled-name='mbox_controller_register' filepath='drivers/mailbox/mailbox.c' line='478' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mbox_controller_register'>
+        <parameter type-id='fb648468' name='mbox' filepath='drivers/mailbox/mailbox.c' line='478' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mbox_controller_unregister' mangled-name='mbox_controller_unregister' filepath='drivers/mailbox/mailbox.c' line='529' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mbox_controller_unregister'>
+        <parameter type-id='fb648468' name='mbox' filepath='drivers/mailbox/mailbox.c' line='529' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/md/dm-crypt.c' language='LANG_C89'>
+      <pointer-type-def type-id='5932767e' size-in-bits='64' id='566a4d44'/>
+      <pointer-type-def type-id='dec44472' size-in-bits='64' id='c5bcc2c0'/>
+      <function-decl name='strsep' mangled-name='strsep' filepath='include/linux/string.h' line='96' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strsep'>
+        <parameter type-id='9b23c9ad'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='crypto_alloc_ahash' mangled-name='crypto_alloc_ahash' filepath='include/crypto/hash.h' line='252' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_alloc_ahash'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='1351523a'/>
+      </function-decl>
+      <function-decl name='bioset_init' mangled-name='bioset_init' filepath='include/linux/bio.h' line='390' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bioset_init'>
+        <parameter type-id='38b1e3a0'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kthread_stop' mangled-name='kthread_stop' filepath='include/linux/kthread.h' line='58' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_stop'>
+        <parameter type-id='f23e2572'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bioset_exit' mangled-name='bioset_exit' filepath='include/linux/bio.h' line='391' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bioset_exit'>
+        <parameter type-id='38b1e3a0'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bio_associate_blkg' mangled-name='bio_associate_blkg' filepath='include/linux/bio.h' line='518' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bio_associate_blkg'>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mempool_alloc' mangled-name='mempool_alloc' filepath='include/linux/mempool.h' line='48' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mempool_alloc'>
+        <parameter type-id='566a4d44'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='request_key_tag' mangled-name='request_key_tag' filepath='include/linux/key.h' line='295' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='request_key_tag'>
+        <parameter type-id='d0a699d1'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='fce14c5f'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='204a4632'/>
+      </function-decl>
+      <function-decl name='bio_put' mangled-name='bio_put' filepath='include/linux/bio.h' line='396' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bio_put'>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bio_alloc_bioset' mangled-name='bio_alloc_bioset' filepath='include/linux/bio.h' line='395' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bio_alloc_bioset'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='38b1e3a0'/>
+        <return type-id='fb55efa1'/>
+      </function-decl>
+      <function-decl name='bio_add_page' mangled-name='bio_add_page' filepath='include/linux/bio.h' line='440' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bio_add_page'>
+        <parameter type-id='fb55efa1'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mempool_free' mangled-name='mempool_free' filepath='include/linux/mempool.h' line='49' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mempool_free'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='566a4d44'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rb_insert_color' mangled-name='rb_insert_color' filepath='include/linux/rbtree.h' line='49' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rb_insert_color'>
+        <parameter type-id='e6532500'/>
+        <parameter type-id='c5bcc2c0'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_alloc_skcipher' mangled-name='crypto_alloc_skcipher' filepath='include/crypto/skcipher.h' line='191' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_alloc_skcipher'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='72bb8c36'/>
+      </function-decl>
+      <function-decl name='crypto_alloc_aead' mangled-name='crypto_alloc_aead' filepath='include/crypto/aead.h' line='172' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_alloc_aead'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='a585cbc4'/>
+      </function-decl>
+      <function-decl name='kthread_should_stop' mangled-name='kthread_should_stop' filepath='include/linux/kthread.h' line='59' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_should_stop'>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='blk_start_plug' mangled-name='blk_start_plug' filepath='include/linux/blkdev.h' line='1189' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_start_plug'>
+        <parameter type-id='39944481'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rb_erase' mangled-name='rb_erase' filepath='include/linux/rbtree.h' line='50' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rb_erase'>
+        <parameter type-id='e6532500'/>
+        <parameter type-id='c5bcc2c0'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_finish_plug' mangled-name='blk_finish_plug' filepath='include/linux/blkdev.h' line='1190' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_finish_plug'>
+        <parameter type-id='39944481'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/md/dm-user.c' language='LANG_C89'>
+      <function-decl name='_copy_from_iter' mangled-name='_copy_from_iter' filepath='include/linux/uio.h' line='127' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_copy_from_iter'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='4fa10f9e'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/media/cec/cec-adap.c' language='LANG_C89'>
+      <pointer-type-def type-id='c6954120' size-in-bits='64' id='ebc04a66'/>
+      <function-decl name='cec_transmit_done_ts' mangled-name='cec_transmit_done_ts' filepath='drivers/media/cec/cec-adap.c' line='591' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_transmit_done_ts'>
+        <parameter type-id='b94a2f7d' name='adap' filepath='drivers/media/cec/cec-adap.c' line='591' column='1'/>
+        <parameter type-id='f9b06939' name='status' filepath='drivers/media/cec/cec-adap.c' line='591' column='1'/>
+        <parameter type-id='f9b06939' name='arb_lost_cnt' filepath='drivers/media/cec/cec-adap.c' line='592' column='1'/>
+        <parameter type-id='f9b06939' name='nack_cnt' filepath='drivers/media/cec/cec-adap.c' line='592' column='1'/>
+        <parameter type-id='f9b06939' name='low_drive_cnt' filepath='drivers/media/cec/cec-adap.c' line='592' column='1'/>
+        <parameter type-id='f9b06939' name='error_cnt' filepath='drivers/media/cec/cec-adap.c' line='593' column='1'/>
+        <parameter type-id='fbc017ef' name='ts' filepath='drivers/media/cec/cec-adap.c' line='593' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cec_transmit_attempt_done_ts' mangled-name='cec_transmit_attempt_done_ts' filepath='drivers/media/cec/cec-adap.c' line='688' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_transmit_attempt_done_ts'>
+        <parameter type-id='b94a2f7d' name='adap' filepath='drivers/media/cec/cec-adap.c' line='688' column='1'/>
+        <parameter type-id='f9b06939' name='status' filepath='drivers/media/cec/cec-adap.c' line='689' column='1'/>
+        <parameter type-id='fbc017ef' name='ts' filepath='drivers/media/cec/cec-adap.c' line='689' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cec_received_msg_ts' mangled-name='cec_received_msg_ts' filepath='drivers/media/cec/cec-adap.c' line='1036' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_received_msg_ts'>
+        <parameter type-id='b94a2f7d' name='adap' filepath='drivers/media/cec/cec-adap.c' line='1036' column='1'/>
+        <parameter type-id='ffb3cc6e' name='msg' filepath='drivers/media/cec/cec-adap.c' line='1037' column='1'/>
+        <parameter type-id='fbc017ef' name='ts' filepath='drivers/media/cec/cec-adap.c' line='1037' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cec_s_phys_addr_from_edid' mangled-name='cec_s_phys_addr_from_edid' filepath='drivers/media/cec/cec-adap.c' line='1616' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_s_phys_addr_from_edid'>
+        <parameter type-id='b94a2f7d' name='adap' filepath='drivers/media/cec/cec-adap.c' line='1616' column='1'/>
+        <parameter type-id='776adf76' name='edid' filepath='drivers/media/cec/cec-adap.c' line='1617' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cec_s_log_addrs' mangled-name='cec_s_log_addrs' filepath='drivers/media/cec/cec-adap.c' line='1809' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_s_log_addrs'>
+        <parameter type-id='b94a2f7d' name='adap' filepath='drivers/media/cec/cec-adap.c' line='1809' column='1'/>
+        <parameter type-id='ebc04a66' name='log_addrs' filepath='drivers/media/cec/cec-adap.c' line='1810' column='1'/>
+        <parameter type-id='b50a4934' name='block' filepath='drivers/media/cec/cec-adap.c' line='1810' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='075e0247' size-in-bits='64' id='b94a2f7d'/>
+      <pointer-type-def type-id='488c1da8' size-in-bits='64' id='ffb3cc6e'/>
+      <class-decl name='cec_log_addrs' size-in-bits='736' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='355' column='1' id='c6954120'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='log_addr' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/cec.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='log_addr_mask' type-id='d315442e' visibility='default' filepath='include/uapi/linux/cec.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='cec_version' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='num_log_addrs' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vendor_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='osd_name' type-id='ec17bebb' visibility='default' filepath='include/uapi/linux/cec.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='248'>
+          <var-decl name='primary_device_type' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/cec.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='280'>
+          <var-decl name='log_addr_type' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/cec.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='312'>
+          <var-decl name='all_device_types' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/cec.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='features' type-id='c9f5704d' visibility='default' filepath='include/uapi/linux/cec.h' line='368' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='384' id='c9f5704d'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+        <subrange length='12' type-id='7ff19f0f' id='84827bdc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='120' id='ec17bebb'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <class-decl name='cec_adapter' size-in-bits='13504' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='178' column='1' id='075e0247'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/media/cec.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/media/cec.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='devnode' type-id='c2b8d3fa' visibility='default' filepath='include/media/cec.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/media/cec.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='rc' type-id='75ae4804' visibility='default' filepath='include/media/cec.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='transmit_queue' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='transmit_queue_sz' type-id='f0981eeb' visibility='default' filepath='include/media/cec.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='wait_queue' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='transmitting' type-id='a588c23f' visibility='default' filepath='include/media/cec.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='transmit_in_progress' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='kthread_config' type-id='f23e2572' visibility='default' filepath='include/media/cec.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='config_completion' type-id='f9fef04f' visibility='default' filepath='include/media/cec.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='kthread' type-id='f23e2572' visibility='default' filepath='include/media/cec.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='kthread_waitq' type-id='b5ab048f' visibility='default' filepath='include/media/cec.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='waitq' type-id='b5ab048f' visibility='default' filepath='include/media/cec.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='ops' type-id='4bc4fd45' visibility='default' filepath='include/media/cec.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/cec.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='capabilities' type-id='19c2251e' visibility='default' filepath='include/media/cec.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10912'>
+          <var-decl name='available_log_addrs' type-id='f9b06939' visibility='default' filepath='include/media/cec.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10928'>
+          <var-decl name='phys_addr' type-id='1dc6a898' visibility='default' filepath='include/media/cec.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='needs_hpd' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10952'>
+          <var-decl name='is_configuring' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10960'>
+          <var-decl name='is_configured' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10968'>
+          <var-decl name='cec_pin_is_high' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10976'>
+          <var-decl name='last_initiator' type-id='f9b06939' visibility='default' filepath='include/media/cec.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='monitor_all_cnt' type-id='19c2251e' visibility='default' filepath='include/media/cec.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11040'>
+          <var-decl name='monitor_pin_cnt' type-id='19c2251e' visibility='default' filepath='include/media/cec.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='follower_cnt' type-id='19c2251e' visibility='default' filepath='include/media/cec.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='cec_follower' type-id='3ef2bf11' visibility='default' filepath='include/media/cec.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='cec_initiator' type-id='3ef2bf11' visibility='default' filepath='include/media/cec.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='passthrough' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11296'>
+          <var-decl name='log_addrs' type-id='c6954120' visibility='default' filepath='include/media/cec.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='conn_info' type-id='a809e963' visibility='default' filepath='include/media/cec.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12576'>
+          <var-decl name='tx_timeouts' type-id='19c2251e' visibility='default' filepath='include/media/cec.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12608'>
+          <var-decl name='notifier' type-id='33ceb73d' visibility='default' filepath='include/media/cec.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='pin' type-id='93901aac' visibility='default' filepath='include/media/cec.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='cec_dir' type-id='27675065' visibility='default' filepath='include/media/cec.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='status_file' type-id='27675065' visibility='default' filepath='include/media/cec.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12864'>
+          <var-decl name='error_inj_file' type-id='27675065' visibility='default' filepath='include/media/cec.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='phys_addrs' type-id='42c8bff1' visibility='default' filepath='include/media/cec.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='sequence' type-id='19c2251e' visibility='default' filepath='include/media/cec.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13216'>
+          <var-decl name='input_phys' type-id='16dc656a' visibility='default' filepath='include/media/cec.h' line='234' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_msg' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='57' column='1' id='488c1da8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_ts' type-id='d3130597' visibility='default' filepath='include/uapi/linux/cec.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_ts' type-id='d3130597' visibility='default' filepath='include/uapi/linux/cec.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='timeout' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='msg' type-id='9396cabb' visibility='default' filepath='include/uapi/linux/cec.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='reply' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='rx_status' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='tx_status' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='408'>
+          <var-decl name='tx_arb_lost_cnt' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='tx_nack_cnt' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='424'>
+          <var-decl name='tx_low_drive_cnt' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='432'>
+          <var-decl name='tx_error_cnt' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f3287987' size-in-bits='64' id='a588c23f'/>
+      <pointer-type-def type-id='1227fbe9' size-in-bits='64' id='3ef2bf11'/>
+      <pointer-type-def type-id='ac0bc8bd' size-in-bits='64' id='33ceb73d'/>
+      <pointer-type-def type-id='fa296b96' size-in-bits='64' id='93901aac'/>
+      <pointer-type-def type-id='d297aced' size-in-bits='64' id='4bc4fd45'/>
+      <pointer-type-def type-id='7a35a8fe' size-in-bits='64' id='75ae4804'/>
+      <class-decl name='cec_connector_info' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='170' column='1' id='a809e963'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/media/cec.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='' type-id='deb646b2' visibility='default' filepath='include/media/cec.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_devnode' size-in-bits='8896' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='42' column='1' id='c2b8d3fa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/media/cec.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='cdev' type-id='22f86352' visibility='default' filepath='include/media/cec.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/media/cec.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8488'>
+          <var-decl name='unregistered' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='fhs' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/media/cec.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='1dc6a898' size-in-bits='240' id='42c8bff1'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <qualified-type-def type-id='3c91c090' const='yes' id='d297aced'/>
+      <class-decl name='cec_data' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='60' column='1' id='f3287987'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='xfer_list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='adap' type-id='b94a2f7d' visibility='default' filepath='include/media/cec.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='msg' type-id='488c1da8' visibility='default' filepath='include/media/cec.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fh' type-id='3ef2bf11' visibility='default' filepath='include/media/cec.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='work' type-id='5ad6e0ef' visibility='default' filepath='include/media/cec.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='c' type-id='f9fef04f' visibility='default' filepath='include/media/cec.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='attempts' type-id='f9b06939' visibility='default' filepath='include/media/cec.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2184'>
+          <var-decl name='blocking' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2192'>
+          <var-decl name='completed' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_fh' size-in-bits='3776' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='86' column='1' id='1227fbe9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='xfer_list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='adap' type-id='b94a2f7d' visibility='default' filepath='include/media/cec.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mode_initiator' type-id='f9b06939' visibility='default' filepath='include/media/cec.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='mode_follower' type-id='f9b06939' visibility='default' filepath='include/media/cec.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/media/cec.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/media/cec.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='events' type-id='e8d7d286' visibility='default' filepath='include/media/cec.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='queued_events' type-id='c24d1a13' visibility='default' filepath='include/media/cec.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='total_queued_events' type-id='f0981eeb' visibility='default' filepath='include/media/cec.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='core_events' type-id='379ac606' visibility='default' filepath='include/media/cec.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='msgs' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='queued_msgs' type-id='f0981eeb' visibility='default' filepath='include/media/cec.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_notifier' is-struct='yes' visibility='default' is-declaration-only='yes' id='ac0bc8bd'/>
+      <class-decl name='cec_pin' is-struct='yes' visibility='default' is-declaration-only='yes' id='fa296b96'/>
+      <class-decl name='rc_dev' size-in-bits='20480' is-struct='yes' visibility='default' filepath='include/media/rc-core.h' line='162' column='1' id='7a35a8fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/media/rc-core.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='managed_alloc' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='sysfs_groups' type-id='9f18d529' visibility='default' filepath='include/media/rc-core.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='device_name' type-id='80f4b756' visibility='default' filepath='include/media/rc-core.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='input_phys' type-id='80f4b756' visibility='default' filepath='include/media/rc-core.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='input_id' type-id='d99ed569' visibility='default' filepath='include/media/rc-core.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='driver_name' type-id='80f4b756' visibility='default' filepath='include/media/rc-core.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='map_name' type-id='80f4b756' visibility='default' filepath='include/media/rc-core.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='rc_map' type-id='9ab3364f' visibility='default' filepath='include/media/rc-core.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/media/rc-core.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='minor' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='raw' type-id='696ed472' visibility='default' filepath='include/media/rc-core.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='input_dev' type-id='74b427eb' visibility='default' filepath='include/media/rc-core.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='driver_type' type-id='d4dbe3db' visibility='default' filepath='include/media/rc-core.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8864'>
+          <var-decl name='idle' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8872'>
+          <var-decl name='encode_wakeup' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='allowed_protocols' type-id='91ce1af9' visibility='default' filepath='include/media/rc-core.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='enabled_protocols' type-id='91ce1af9' visibility='default' filepath='include/media/rc-core.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='allowed_wakeup_protocols' type-id='91ce1af9' visibility='default' filepath='include/media/rc-core.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='wakeup_protocol' type-id='17862576' visibility='default' filepath='include/media/rc-core.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9120'>
+          <var-decl name='scancode_filter' type-id='f3a6417e' visibility='default' filepath='include/media/rc-core.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9184'>
+          <var-decl name='scancode_wakeup_filter' type-id='f3a6417e' visibility='default' filepath='include/media/rc-core.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9248'>
+          <var-decl name='scancode_mask' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='users' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/rc-core.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='keylock' type-id='fb4018a0' visibility='default' filepath='include/media/rc-core.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9440'>
+          <var-decl name='keypressed' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='keyup_jiffies' type-id='7359adad' visibility='default' filepath='include/media/rc-core.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='timer_keyup' type-id='abe41e67' visibility='default' filepath='include/media/rc-core.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='timer_repeat' type-id='abe41e67' visibility='default' filepath='include/media/rc-core.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='last_keycode' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10464'>
+          <var-decl name='last_protocol' type-id='17862576' visibility='default' filepath='include/media/rc-core.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='last_scancode' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10528'>
+          <var-decl name='last_toggle' type-id='f9b06939' visibility='default' filepath='include/media/rc-core.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='timeout' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10592'>
+          <var-decl name='min_timeout' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='max_timeout' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10656'>
+          <var-decl name='rx_resolution' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='tx_resolution' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='lirc_dev' type-id='66e487eb' visibility='default' filepath='include/media/rc-core.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18112'>
+          <var-decl name='lirc_cdev' type-id='22f86352' visibility='default' filepath='include/media/rc-core.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19200'>
+          <var-decl name='gap_start' type-id='fbc017ef' visibility='default' filepath='include/media/rc-core.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19264'>
+          <var-decl name='gap_duration' type-id='91ce1af9' visibility='default' filepath='include/media/rc-core.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='gap' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19360'>
+          <var-decl name='lirc_fh_lock' type-id='fb4018a0' visibility='default' filepath='include/media/rc-core.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19392'>
+          <var-decl name='lirc_fh' type-id='72f469ec' visibility='default' filepath='include/media/rc-core.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19520'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19584'>
+          <var-decl name='change_protocol' type-id='a113447f' visibility='default' filepath='include/media/rc-core.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19648'>
+          <var-decl name='open' type-id='7c07671a' visibility='default' filepath='include/media/rc-core.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19712'>
+          <var-decl name='close' type-id='35513fbd' visibility='default' filepath='include/media/rc-core.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19776'>
+          <var-decl name='s_tx_mask' type-id='27b80621' visibility='default' filepath='include/media/rc-core.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='s_tx_carrier' type-id='27b80621' visibility='default' filepath='include/media/rc-core.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19904'>
+          <var-decl name='s_tx_duty_cycle' type-id='27b80621' visibility='default' filepath='include/media/rc-core.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19968'>
+          <var-decl name='s_rx_carrier_range' type-id='03935b08' visibility='default' filepath='include/media/rc-core.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='tx_ir' type-id='86089bb2' visibility='default' filepath='include/media/rc-core.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20096'>
+          <var-decl name='s_idle' type-id='7e6d7408' visibility='default' filepath='include/media/rc-core.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20160'>
+          <var-decl name='s_learning_mode' type-id='0b603cc1' visibility='default' filepath='include/media/rc-core.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20224'>
+          <var-decl name='s_carrier_report' type-id='0b603cc1' visibility='default' filepath='include/media/rc-core.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20288'>
+          <var-decl name='s_filter' type-id='a479b17b' visibility='default' filepath='include/media/rc-core.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20352'>
+          <var-decl name='s_wakeup_filter' type-id='a479b17b' visibility='default' filepath='include/media/rc-core.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20416'>
+          <var-decl name='s_timeout' type-id='efba8d40' visibility='default' filepath='include/media/rc-core.h' line='227' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/media/cec.h' line='172' column='1' id='deb646b2'>
+        <data-member access='private'>
+          <var-decl name='drm' type-id='8c7b18b1' visibility='default' filepath='include/media/cec.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw' type-id='9d2cf33e' visibility='default' filepath='include/media/cec.h' line='174' column='1'/>
+        </data-member>
+      </union-decl>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='512' id='9d2cf33e'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='6e21d41e' size-in-bits='1536' id='379ac606'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <enum-decl name='rc_driver_type' filepath='include/media/rc-core.h' line='27' column='1' id='d4dbe3db'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RC_DRIVER_SCANCODE' value='0'/>
+        <enumerator name='RC_DRIVER_IR_RAW' value='1'/>
+        <enumerator name='RC_DRIVER_IR_RAW_TX' value='2'/>
+      </enum-decl>
+      <enum-decl name='rc_proto' filepath='include/uapi/linux/lirc.h' line='200' column='1' id='17862576'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RC_PROTO_UNKNOWN' value='0'/>
+        <enumerator name='RC_PROTO_OTHER' value='1'/>
+        <enumerator name='RC_PROTO_RC5' value='2'/>
+        <enumerator name='RC_PROTO_RC5X_20' value='3'/>
+        <enumerator name='RC_PROTO_RC5_SZ' value='4'/>
+        <enumerator name='RC_PROTO_JVC' value='5'/>
+        <enumerator name='RC_PROTO_SONY12' value='6'/>
+        <enumerator name='RC_PROTO_SONY15' value='7'/>
+        <enumerator name='RC_PROTO_SONY20' value='8'/>
+        <enumerator name='RC_PROTO_NEC' value='9'/>
+        <enumerator name='RC_PROTO_NECX' value='10'/>
+        <enumerator name='RC_PROTO_NEC32' value='11'/>
+        <enumerator name='RC_PROTO_SANYO' value='12'/>
+        <enumerator name='RC_PROTO_MCIR2_KBD' value='13'/>
+        <enumerator name='RC_PROTO_MCIR2_MSE' value='14'/>
+        <enumerator name='RC_PROTO_RC6_0' value='15'/>
+        <enumerator name='RC_PROTO_RC6_6A_20' value='16'/>
+        <enumerator name='RC_PROTO_RC6_6A_24' value='17'/>
+        <enumerator name='RC_PROTO_RC6_6A_32' value='18'/>
+        <enumerator name='RC_PROTO_RC6_MCE' value='19'/>
+        <enumerator name='RC_PROTO_SHARP' value='20'/>
+        <enumerator name='RC_PROTO_XMP' value='21'/>
+        <enumerator name='RC_PROTO_CEC' value='22'/>
+        <enumerator name='RC_PROTO_IMON' value='23'/>
+        <enumerator name='RC_PROTO_RCMM12' value='24'/>
+        <enumerator name='RC_PROTO_RCMM24' value='25'/>
+        <enumerator name='RC_PROTO_RCMM32' value='26'/>
+        <enumerator name='RC_PROTO_XBOX_DVD' value='27'/>
+      </enum-decl>
+      <pointer-type-def type-id='cd5ad9b0' size-in-bits='64' id='7c07671a'/>
+      <pointer-type-def type-id='05cdb97d' size-in-bits='64' id='0b603cc1'/>
+      <pointer-type-def type-id='51b5f0bf' size-in-bits='64' id='a479b17b'/>
+      <pointer-type-def type-id='6e44244d' size-in-bits='64' id='27b80621'/>
+      <pointer-type-def type-id='ec263c6e' size-in-bits='64' id='03935b08'/>
+      <pointer-type-def type-id='d0615a9b' size-in-bits='64' id='a113447f'/>
+      <pointer-type-def type-id='74912d6e' size-in-bits='64' id='efba8d40'/>
+      <pointer-type-def type-id='a82fc150' size-in-bits='64' id='86089bb2'/>
+      <pointer-type-def type-id='986a13e4' size-in-bits='64' id='696ed472'/>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='1024' id='e8d7d286'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='cec_adap_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='111' column='1' id='3c91c090'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='adap_enable' type-id='c42cb699' visibility='default' filepath='include/media/cec.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='adap_monitor_all_enable' type-id='c42cb699' visibility='default' filepath='include/media/cec.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='adap_monitor_pin_enable' type-id='c42cb699' visibility='default' filepath='include/media/cec.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='adap_log_addr' type-id='7b15200c' visibility='default' filepath='include/media/cec.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='adap_transmit' type-id='d5951000' visibility='default' filepath='include/media/cec.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='adap_status' type-id='c4365925' visibility='default' filepath='include/media/cec.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='adap_free' type-id='6dbc77f1' visibility='default' filepath='include/media/cec.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='error_inj_show' type-id='025f347e' visibility='default' filepath='include/media/cec.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='error_inj_parse_line' type-id='56c9c562' visibility='default' filepath='include/media/cec.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='received' type-id='6240ec2f' visibility='default' filepath='include/media/cec.h' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_drm_connector_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='156' column='1' id='8c7b18b1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='card_no' type-id='3f1a6b60' visibility='default' filepath='include/media/cec.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='connector_id' type-id='3f1a6b60' visibility='default' filepath='include/media/cec.h' line='158' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rc_map' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/rc-map.h' line='108' column='1' id='9ab3364f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scan' type-id='57909d12' visibility='default' filepath='include/media/rc-map.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/media/rc-map.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/media/rc-map.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='alloc' type-id='f0981eeb' visibility='default' filepath='include/media/rc-map.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rc_proto' type-id='17862576' visibility='default' filepath='include/media/rc-map.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/media/rc-map.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/media/rc-map.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rc_scancode_filter' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/rc-core.h' line='38' column='1' id='f3a6417e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mask' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='1dc6a898' size-in-bits='128' id='c24d1a13'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <pointer-type-def type-id='25048781' size-in-bits='64' id='35513fbd'/>
+      <pointer-type-def type-id='437aead6' size-in-bits='64' id='7e6d7408'/>
+      <pointer-type-def type-id='ad20c773' size-in-bits='64' id='6240ec2f'/>
+      <pointer-type-def type-id='617b50f4' size-in-bits='64' id='025f347e'/>
+      <pointer-type-def type-id='e2d03a5d' size-in-bits='64' id='c42cb699'/>
+      <pointer-type-def type-id='e4205152' size-in-bits='64' id='7b15200c'/>
+      <pointer-type-def type-id='835a73a6' size-in-bits='64' id='d5951000'/>
+      <pointer-type-def type-id='ae855994' size-in-bits='64' id='57909d12'/>
+      <class-decl name='cec_event_entry' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='78' column='1' id='6e21d41e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ev' type-id='9638c87d' visibility='default' filepath='include/media/cec.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ir_raw_event_ctrl' size-in-bits='36544' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='48' column='1' id='986a13e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='thread' type-id='f23e2572' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='kfifo' type-id='56fcb682' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33152'>
+          <var-decl name='last_event' type-id='fbc017ef' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33216'>
+          <var-decl name='dev' type-id='75ae4804' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33280'>
+          <var-decl name='edge_spinlock' type-id='fb4018a0' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33344'>
+          <var-decl name='edge_handle' type-id='abe41e67' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33792'>
+          <var-decl name='prev_ev' type-id='39486498' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33856'>
+          <var-decl name='this_ev' type-id='39486498' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33920'>
+          <var-decl name='bpf_sample' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33984'>
+          <var-decl name='progs' type-id='380c7edc' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34048'>
+          <var-decl name='nec' type-id='9f72ab96' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34176'>
+          <var-decl name='rc5' type-id='9f1c8f9e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34304'>
+          <var-decl name='rc6' type-id='ef26ce47' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34496'>
+          <var-decl name='sony' type-id='bec1f309' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34592'>
+          <var-decl name='jvc' type-id='5f32c669' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34752'>
+          <var-decl name='sanyo' type-id='8474b1f2' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34880'>
+          <var-decl name='sharp' type-id='556cd788' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='35008'>
+          <var-decl name='mce_kbd' type-id='d7c6758b' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='35712'>
+          <var-decl name='xmp' type-id='01edcb75' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36288'>
+          <var-decl name='imon' type-id='099324f9' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36448'>
+          <var-decl name='rcmm' type-id='b68be393' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='da9684d0' size-in-bits='64' id='56c9c562'/>
+      <pointer-type-def type-id='4666032d' size-in-bits='64' id='6dbc77f1'/>
+      <pointer-type-def type-id='12e476c1' size-in-bits='64' id='c4365925'/>
+      <class-decl name='cec_event' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='424' column='1' id='9638c87d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ts' type-id='d3130597' visibility='default' filepath='include/uapi/linux/cec.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='event' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='ea003a68' visibility='default' filepath='include/uapi/linux/cec.h' line='428' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='imon_dec' size-in-bits='160' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='127' column='1' id='099324f9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last_chk' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bits' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='stick_keyboard' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ir_raw_event' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/rc-core.h' line='299' column='1' id='39486498'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='671d516a' visibility='default' filepath='include/media/rc-core.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='duty_cycle' type-id='f9b06939' visibility='default' filepath='include/media/rc-core.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='pulse' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='reset' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='carrier_report' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='309' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='jvc_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='93' column='1' id='5f32c669'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bits' type-id='1dc6a898' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='old_bits' type-id='1dc6a898' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='first' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='toggle' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mce_kbd_dec' size-in-bits='704' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='112' column='1' id='d7c6758b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='keylock' type-id='fb4018a0' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_timeout' type-id='abe41e67' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='header' type-id='f9b06939' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='body' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='wanted_bits' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='120' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nec_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='67' column='1' id='9f72ab96'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='is_nec_x' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='necx_repeat' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rc5_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='74' column='1' id='9f1c8f9e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='is_rc5x' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rc6_dec' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='80' column='1' id='ef26ce47'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='header' type-id='f9b06939' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='body' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='toggle' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='wanted_bits' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rc_map_table' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/rc-map.h' line='91' column='1' id='ae855994'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scancode' type-id='19c2251e' visibility='default' filepath='include/media/rc-map.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='keycode' type-id='19c2251e' visibility='default' filepath='include/media/rc-map.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcmm_dec' size-in-bits='96' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='134' column='1' id='b68be393'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sanyo_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='101' column='1' id='8474b1f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bits' type-id='91ce1af9' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sharp_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='106' column='1' id='556cd788'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pulse_len' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sony_dec' size-in-bits='96' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='88' column='1' id='bec1f309'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xmp_dec' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='122' column='1' id='01edcb75'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='durations' type-id='02fdec64' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='32960' is-struct='yes' is-anonymous='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1' id='56fcb682'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='4dca854a' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='buf' type-id='55a95556' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='39486498' size-in-bits='32768' id='55a95556'>
+        <subrange length='512' type-id='7ff19f0f' id='c11630dd'/>
+      </array-type-def>
+      <union-decl name='__anonymous_union__1' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1' id='4dca854a'>
+        <data-member access='private'>
+          <var-decl name='kfifo' type-id='bbbc6c1e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='type' type-id='4a06e68e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='const_type' type-id='528735d1' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rectype' type-id='4209d6b5' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ptr' type-id='4a06e68e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ptr_const' type-id='528735d1' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='428' column='1' id='ea003a68'>
+        <data-member access='private'>
+          <var-decl name='state_change' type-id='14c5637c' visibility='default' filepath='include/uapi/linux/cec.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='lost_msgs' type-id='66c0ec77' visibility='default' filepath='include/uapi/linux/cec.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw' type-id='9d2cf33e' visibility='default' filepath='include/uapi/linux/cec.h' line='431' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/media/rc-core.h' line='300' column='1' id='671d516a'>
+        <data-member access='private'>
+          <var-decl name='duration' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='carrier' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='302' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='f28519a1' size-in-bits='64' id='528735d1'/>
+      <pointer-type-def type-id='39486498' size-in-bits='64' id='4a06e68e'/>
+      <class-decl name='cec_event_lost_msgs' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='411' column='1' id='66c0ec77'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lost_msgs' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='412' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_event_state_change' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='402' column='1' id='14c5637c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='phys_addr' type-id='d315442e' visibility='default' filepath='include/uapi/linux/cec.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='log_addr_mask' type-id='d315442e' visibility='default' filepath='include/uapi/linux/cec.h' line='404' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='39486498' const='yes' id='f28519a1'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/media/cec/cec-core.c' language='LANG_C89'>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='384' id='c9f5704d'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+        <subrange length='12' type-id='7ff19f0f' id='84827bdc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='6e21d41e' size-in-bits='1536' id='379ac606'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='120' id='ec17bebb'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <class-decl name='cec_notifier' is-struct='yes' visibility='default' is-declaration-only='yes' id='ac0bc8bd'/>
+      <class-decl name='cec_pin' is-struct='yes' visibility='default' is-declaration-only='yes' id='fa296b96'/>
+      <class-decl name='ir_raw_event_ctrl' is-struct='yes' visibility='default' is-declaration-only='yes' id='986a13e5'/>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='1024' id='e8d7d286'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='1dc6a898' size-in-bits='240' id='42c8bff1'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='1dc6a898' size-in-bits='128' id='c24d1a13'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='cec_adapter' size-in-bits='13504' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='178' column='1' id='075e0247'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/media/cec.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/media/cec.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='devnode' type-id='c2b8d3fa' visibility='default' filepath='include/media/cec.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/media/cec.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='rc' type-id='75ae4804' visibility='default' filepath='include/media/cec.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='transmit_queue' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='transmit_queue_sz' type-id='f0981eeb' visibility='default' filepath='include/media/cec.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='wait_queue' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='transmitting' type-id='a588c23f' visibility='default' filepath='include/media/cec.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='transmit_in_progress' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='kthread_config' type-id='f23e2572' visibility='default' filepath='include/media/cec.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='config_completion' type-id='f9fef04f' visibility='default' filepath='include/media/cec.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='kthread' type-id='f23e2572' visibility='default' filepath='include/media/cec.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='kthread_waitq' type-id='b5ab048f' visibility='default' filepath='include/media/cec.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='waitq' type-id='b5ab048f' visibility='default' filepath='include/media/cec.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='ops' type-id='4bc4fd45' visibility='default' filepath='include/media/cec.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/cec.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='capabilities' type-id='19c2251e' visibility='default' filepath='include/media/cec.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10912'>
+          <var-decl name='available_log_addrs' type-id='f9b06939' visibility='default' filepath='include/media/cec.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10928'>
+          <var-decl name='phys_addr' type-id='1dc6a898' visibility='default' filepath='include/media/cec.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='needs_hpd' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10952'>
+          <var-decl name='is_configuring' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10960'>
+          <var-decl name='is_configured' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10968'>
+          <var-decl name='cec_pin_is_high' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10976'>
+          <var-decl name='last_initiator' type-id='f9b06939' visibility='default' filepath='include/media/cec.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='monitor_all_cnt' type-id='19c2251e' visibility='default' filepath='include/media/cec.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11040'>
+          <var-decl name='monitor_pin_cnt' type-id='19c2251e' visibility='default' filepath='include/media/cec.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='follower_cnt' type-id='19c2251e' visibility='default' filepath='include/media/cec.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='cec_follower' type-id='3ef2bf11' visibility='default' filepath='include/media/cec.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='cec_initiator' type-id='3ef2bf11' visibility='default' filepath='include/media/cec.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='passthrough' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11296'>
+          <var-decl name='log_addrs' type-id='c6954120' visibility='default' filepath='include/media/cec.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='conn_info' type-id='a809e963' visibility='default' filepath='include/media/cec.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12576'>
+          <var-decl name='tx_timeouts' type-id='19c2251e' visibility='default' filepath='include/media/cec.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12608'>
+          <var-decl name='notifier' type-id='33ceb73d' visibility='default' filepath='include/media/cec.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='pin' type-id='93901aac' visibility='default' filepath='include/media/cec.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='cec_dir' type-id='27675065' visibility='default' filepath='include/media/cec.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='status_file' type-id='27675065' visibility='default' filepath='include/media/cec.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12864'>
+          <var-decl name='error_inj_file' type-id='27675065' visibility='default' filepath='include/media/cec.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='phys_addrs' type-id='42c8bff1' visibility='default' filepath='include/media/cec.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='sequence' type-id='19c2251e' visibility='default' filepath='include/media/cec.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13216'>
+          <var-decl name='input_phys' type-id='16dc656a' visibility='default' filepath='include/media/cec.h' line='234' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_devnode' size-in-bits='8896' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='42' column='1' id='c2b8d3fa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/media/cec.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='cdev' type-id='22f86352' visibility='default' filepath='include/media/cec.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/media/cec.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8488'>
+          <var-decl name='unregistered' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='fhs' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/media/cec.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_data' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='60' column='1' id='f3287987'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='xfer_list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='adap' type-id='b94a2f7d' visibility='default' filepath='include/media/cec.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='msg' type-id='488c1da8' visibility='default' filepath='include/media/cec.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fh' type-id='3ef2bf11' visibility='default' filepath='include/media/cec.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='work' type-id='5ad6e0ef' visibility='default' filepath='include/media/cec.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='c' type-id='f9fef04f' visibility='default' filepath='include/media/cec.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='attempts' type-id='f9b06939' visibility='default' filepath='include/media/cec.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2184'>
+          <var-decl name='blocking' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2192'>
+          <var-decl name='completed' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_msg' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='57' column='1' id='488c1da8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_ts' type-id='d3130597' visibility='default' filepath='include/uapi/linux/cec.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_ts' type-id='d3130597' visibility='default' filepath='include/uapi/linux/cec.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='timeout' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='msg' type-id='9396cabb' visibility='default' filepath='include/uapi/linux/cec.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='reply' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='rx_status' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='tx_status' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='408'>
+          <var-decl name='tx_arb_lost_cnt' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='tx_nack_cnt' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='424'>
+          <var-decl name='tx_low_drive_cnt' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='432'>
+          <var-decl name='tx_error_cnt' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_fh' size-in-bits='3776' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='86' column='1' id='1227fbe9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='xfer_list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='adap' type-id='b94a2f7d' visibility='default' filepath='include/media/cec.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mode_initiator' type-id='f9b06939' visibility='default' filepath='include/media/cec.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='mode_follower' type-id='f9b06939' visibility='default' filepath='include/media/cec.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/media/cec.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/media/cec.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='events' type-id='e8d7d286' visibility='default' filepath='include/media/cec.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='queued_events' type-id='c24d1a13' visibility='default' filepath='include/media/cec.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='total_queued_events' type-id='f0981eeb' visibility='default' filepath='include/media/cec.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='core_events' type-id='379ac606' visibility='default' filepath='include/media/cec.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='msgs' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='queued_msgs' type-id='f0981eeb' visibility='default' filepath='include/media/cec.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_event_entry' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='78' column='1' id='6e21d41e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ev' type-id='9638c87d' visibility='default' filepath='include/media/cec.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_event' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='424' column='1' id='9638c87d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ts' type-id='d3130597' visibility='default' filepath='include/uapi/linux/cec.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='event' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='ea003a68' visibility='default' filepath='include/uapi/linux/cec.h' line='428' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='428' column='1' id='ea003a68'>
+        <data-member access='private'>
+          <var-decl name='state_change' type-id='14c5637c' visibility='default' filepath='include/uapi/linux/cec.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='lost_msgs' type-id='66c0ec77' visibility='default' filepath='include/uapi/linux/cec.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw' type-id='9d2cf33e' visibility='default' filepath='include/uapi/linux/cec.h' line='431' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='cec_event_state_change' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='402' column='1' id='14c5637c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='phys_addr' type-id='d315442e' visibility='default' filepath='include/uapi/linux/cec.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='log_addr_mask' type-id='d315442e' visibility='default' filepath='include/uapi/linux/cec.h' line='404' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_event_lost_msgs' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='411' column='1' id='66c0ec77'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lost_msgs' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='412' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_adap_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='111' column='1' id='3c91c090'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='adap_enable' type-id='c42cb699' visibility='default' filepath='include/media/cec.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='adap_monitor_all_enable' type-id='c42cb699' visibility='default' filepath='include/media/cec.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='adap_monitor_pin_enable' type-id='c42cb699' visibility='default' filepath='include/media/cec.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='adap_log_addr' type-id='7b15200c' visibility='default' filepath='include/media/cec.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='adap_transmit' type-id='d5951000' visibility='default' filepath='include/media/cec.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='adap_status' type-id='c4365925' visibility='default' filepath='include/media/cec.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='adap_free' type-id='6dbc77f1' visibility='default' filepath='include/media/cec.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='error_inj_show' type-id='025f347e' visibility='default' filepath='include/media/cec.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='error_inj_parse_line' type-id='56c9c562' visibility='default' filepath='include/media/cec.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='received' type-id='6240ec2f' visibility='default' filepath='include/media/cec.h' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_log_addrs' size-in-bits='736' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='355' column='1' id='c6954120'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='log_addr' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/cec.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='log_addr_mask' type-id='d315442e' visibility='default' filepath='include/uapi/linux/cec.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='cec_version' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='num_log_addrs' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vendor_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='osd_name' type-id='ec17bebb' visibility='default' filepath='include/uapi/linux/cec.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='248'>
+          <var-decl name='primary_device_type' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/cec.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='280'>
+          <var-decl name='log_addr_type' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/cec.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='312'>
+          <var-decl name='all_device_types' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/cec.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='features' type-id='c9f5704d' visibility='default' filepath='include/uapi/linux/cec.h' line='368' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_connector_info' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='170' column='1' id='a809e963'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/media/cec.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='' type-id='deb646b2' visibility='default' filepath='include/media/cec.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/media/cec.h' line='172' column='1' id='deb646b2'>
+        <data-member access='private'>
+          <var-decl name='drm' type-id='8c7b18b1' visibility='default' filepath='include/media/cec.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw' type-id='9d2cf33e' visibility='default' filepath='include/media/cec.h' line='174' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='cec_drm_connector_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='156' column='1' id='8c7b18b1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='card_no' type-id='3f1a6b60' visibility='default' filepath='include/media/cec.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='connector_id' type-id='3f1a6b60' visibility='default' filepath='include/media/cec.h' line='158' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='075e0247' size-in-bits='64' id='b94a2f7d'/>
+      <pointer-type-def type-id='f3287987' size-in-bits='64' id='a588c23f'/>
+      <pointer-type-def type-id='1227fbe9' size-in-bits='64' id='3ef2bf11'/>
+      <pointer-type-def type-id='488c1da8' size-in-bits='64' id='ffb3cc6e'/>
+      <pointer-type-def type-id='ac0bc8bd' size-in-bits='64' id='33ceb73d'/>
+      <pointer-type-def type-id='fa296b96' size-in-bits='64' id='93901aac'/>
+      <qualified-type-def type-id='3c91c090' const='yes' id='d297aced'/>
+      <pointer-type-def type-id='d297aced' size-in-bits='64' id='4bc4fd45'/>
+      <pointer-type-def type-id='ad20c773' size-in-bits='64' id='6240ec2f'/>
+      <pointer-type-def type-id='617b50f4' size-in-bits='64' id='025f347e'/>
+      <pointer-type-def type-id='e2d03a5d' size-in-bits='64' id='c42cb699'/>
+      <pointer-type-def type-id='e4205152' size-in-bits='64' id='7b15200c'/>
+      <pointer-type-def type-id='835a73a6' size-in-bits='64' id='d5951000'/>
+      <pointer-type-def type-id='da9684d0' size-in-bits='64' id='56c9c562'/>
+      <pointer-type-def type-id='4666032d' size-in-bits='64' id='6dbc77f1'/>
+      <pointer-type-def type-id='12e476c1' size-in-bits='64' id='c4365925'/>
+      <function-decl name='cec_allocate_adapter' mangled-name='cec_allocate_adapter' filepath='drivers/media/cec/cec-core.c' line='253' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_allocate_adapter'>
+        <parameter type-id='4bc4fd45' name='ops' filepath='drivers/media/cec/cec-core.c' line='253' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/cec/cec-core.c' line='254' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/media/cec/cec-core.c' line='254' column='1'/>
+        <parameter type-id='19c2251e' name='caps' filepath='drivers/media/cec/cec-core.c' line='254' column='1'/>
+        <parameter type-id='f9b06939' name='available_las' filepath='drivers/media/cec/cec-core.c' line='255' column='1'/>
+        <return type-id='b94a2f7d'/>
+      </function-decl>
+      <function-decl name='cec_s_phys_addr' mangled-name='cec_s_phys_addr' filepath='include/media/cec.h' line='279' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_s_phys_addr'>
+        <parameter type-id='b94a2f7d'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cec_register_adapter' mangled-name='cec_register_adapter' filepath='drivers/media/cec/cec-core.c' line='342' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_register_adapter'>
+        <parameter type-id='b94a2f7d' name='adap' filepath='drivers/media/cec/cec-core.c' line='342' column='1'/>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/media/cec/cec-core.c' line='343' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cec_unregister_adapter' mangled-name='cec_unregister_adapter' filepath='drivers/media/cec/cec-core.c' line='412' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_unregister_adapter'>
+        <parameter type-id='b94a2f7d' name='adap' filepath='drivers/media/cec/cec-core.c' line='412' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cec_delete_adapter' mangled-name='cec_delete_adapter' filepath='drivers/media/cec/cec-core.c' line='431' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_delete_adapter'>
+        <parameter type-id='b94a2f7d' name='adap' filepath='drivers/media/cec/cec-core.c' line='431' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='ad20c773'>
+        <parameter type-id='b94a2f7d'/>
+        <parameter type-id='ffb3cc6e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='617b50f4'>
+        <parameter type-id='b94a2f7d'/>
+        <parameter type-id='f8dc9df0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e2d03a5d'>
+        <parameter type-id='b94a2f7d'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e4205152'>
+        <parameter type-id='b94a2f7d'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='835a73a6'>
+        <parameter type-id='b94a2f7d'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='ffb3cc6e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da9684d0'>
+        <parameter type-id='b94a2f7d'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4666032d'>
+        <parameter type-id='b94a2f7d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='12e476c1'>
+        <parameter type-id='b94a2f7d'/>
+        <parameter type-id='f8dc9df0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/media/common/videobuf2/videobuf2-core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='14582e4a' size-in-bits='12288' id='729537cc'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <class-decl name='vb2_fileio_buf' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2403' column='1' id='14582e4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vaddr' type-id='eaa32e2f' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pos' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='queued' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2407' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='vb2_thread_fnc' type-id='c4cd4be2' filepath='include/media/videobuf2-core.h' line='1035' column='1' id='86e6f91d'/>
+      <function-decl name='vb2_buffer_done' mangled-name='vb2_buffer_done' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='921' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_buffer_done'>
+        <parameter type-id='85535682' name='vb' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='921' column='1'/>
+        <parameter type-id='550876cf' name='state' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='921' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vb2_plane_vaddr' mangled-name='vb2_plane_vaddr' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='902' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_plane_vaddr'>
+        <parameter type-id='85535682' name='vb' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='902' column='1'/>
+        <parameter type-id='f0981eeb' name='plane_no' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='902' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='vb2_plane_cookie' mangled-name='vb2_plane_cookie' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='912' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_plane_cookie'>
+        <parameter type-id='85535682' name='vb' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='912' column='1'/>
+        <parameter type-id='f0981eeb' name='plane_no' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='912' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='vb2_request_object_is_buffer' mangled-name='vb2_request_object_is_buffer' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='1397' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_request_object_is_buffer'>
+        <parameter type-id='347d8ccd' name='obj' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='1397' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='vb2_wait_for_all_buffers' mangled-name='vb2_wait_for_all_buffers' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='1773' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_wait_for_all_buffers'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='1773' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_queue_error' mangled-name='vb2_queue_error' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2014' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_queue_error'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2014' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vb2_mmap' mangled-name='vb2_mmap' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_mmap'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2147' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2147' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <enum-decl name='vb2_buffer_state' filepath='include/media/videobuf2-core.h' line='219' column='1' id='550876cf'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='VB2_BUF_STATE_DEQUEUED' value='0'/>
+        <enumerator name='VB2_BUF_STATE_IN_REQUEST' value='1'/>
+        <enumerator name='VB2_BUF_STATE_PREPARING' value='2'/>
+        <enumerator name='VB2_BUF_STATE_QUEUED' value='3'/>
+        <enumerator name='VB2_BUF_STATE_ACTIVE' value='4'/>
+        <enumerator name='VB2_BUF_STATE_DONE' value='5'/>
+        <enumerator name='VB2_BUF_STATE_ERROR' value='6'/>
+      </enum-decl>
+      <pointer-type-def type-id='f9bc47e0' size-in-bits='64' id='c4cd4be2'/>
+      <pointer-type-def type-id='a5b7e4fd' size-in-bits='64' id='347d8ccd'/>
+      <pointer-type-def type-id='4a078c54' size-in-bits='64' id='85535682'/>
+      <pointer-type-def type-id='6b30321d' size-in-bits='64' id='a05f1ecd'/>
+      <class-decl name='media_request_object' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/media/media-request.h' line='269' column='1' id='a5b7e4fd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='4228340f' visibility='default' filepath='include/media/media-request.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/media-request.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='req' type-id='ac429605' visibility='default' filepath='include/media/media-request.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/media-request.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/media/media-request.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='completed' type-id='b50a4934' visibility='default' filepath='include/media/media-request.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_buffer' size-in-bits='4096' is-struct='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='245' column='1' id='4a078c54'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vb2_queue' type-id='a05f1ecd' visibility='default' filepath='include/media/videobuf2-core.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='memory' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='num_planes' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timestamp' type-id='91ce1af9' visibility='default' filepath='include/media/videobuf2-core.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='request' type-id='ac429605' visibility='default' filepath='include/media/videobuf2-core.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='req_obj' type-id='a5b7e4fd' visibility='default' filepath='include/media/videobuf2-core.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='state' type-id='550876cf' visibility='default' filepath='include/media/videobuf2-core.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='synced' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='prepared' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='copied_timestamp' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='planes' type-id='105eff46' visibility='default' filepath='include/media/videobuf2-core.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='queued_entry' type-id='72f469ec' visibility='default' filepath='include/media/videobuf2-core.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='done_entry' type-id='72f469ec' visibility='default' filepath='include/media/videobuf2-core.h' line='279' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_queue' size-in-bits='6592' is-struct='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='553' column='1' id='6b30321d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='io_modes' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/media/videobuf2-core.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dma_attrs' type-id='7359adad' visibility='default' filepath='include/media/videobuf2-core.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='bidirectional' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='fileio_read_once' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='fileio_write_immediately' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='allow_zero_bytesused' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='quirk_poll_must_check_waiting_for_buffers' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='supports_requests' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='requires_requests' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='uses_qbuf' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='uses_requests' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='e0ea832a' visibility='default' filepath='include/media/videobuf2-core.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='owner' type-id='eaa32e2f' visibility='default' filepath='include/media/videobuf2-core.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ops' type-id='a1d66c91' visibility='default' filepath='include/media/videobuf2-core.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mem_ops' type-id='15cf8e87' visibility='default' filepath='include/media/videobuf2-core.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='buf_ops' type-id='97b65be3' visibility='default' filepath='include/media/videobuf2-core.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='drv_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/videobuf2-core.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='subsystem_flags' type-id='19c2251e' visibility='default' filepath='include/media/videobuf2-core.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='buf_struct_size' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='timestamp_flags' type-id='19c2251e' visibility='default' filepath='include/media/videobuf2-core.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='gfp_flags' type-id='3eb7c31c' visibility='default' filepath='include/media/videobuf2-core.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='min_buffers_needed' type-id='19c2251e' visibility='default' filepath='include/media/videobuf2-core.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='alloc_devs' type-id='f6e5abef' visibility='default' filepath='include/media/videobuf2-core.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='mmap_lock' type-id='925167dc' visibility='default' filepath='include/media/videobuf2-core.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='memory' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='dma_dir' type-id='eea6b025' visibility='default' filepath='include/media/videobuf2-core.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='bufs' type-id='f989fdcc' visibility='default' filepath='include/media/videobuf2-core.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='num_buffers' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='queued_list' type-id='72f469ec' visibility='default' filepath='include/media/videobuf2-core.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='queued_count' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5984'>
+          <var-decl name='owned_by_drv_count' type-id='49178f86' visibility='default' filepath='include/media/videobuf2-core.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='done_list' type-id='72f469ec' visibility='default' filepath='include/media/videobuf2-core.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='done_lock' type-id='fb4018a0' visibility='default' filepath='include/media/videobuf2-core.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='done_wq' type-id='b5ab048f' visibility='default' filepath='include/media/videobuf2-core.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='streaming' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='start_streaming_called' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='error' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='waiting_for_buffers' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='waiting_in_dqbuf' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='is_multiplanar' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='is_output' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='copy_timestamp' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='last_buffer_dequeued' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='fileio' type-id='372af73d' visibility='default' filepath='include/media/videobuf2-core.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='threadio' type-id='dc2d641b' visibility='default' filepath='include/media/videobuf2-core.h' line='610' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='904f813f' size-in-bits='64' id='4228340f'/>
+      <pointer-type-def type-id='4925ee5b' size-in-bits='64' id='97b65be3'/>
+      <pointer-type-def type-id='23cb2797' size-in-bits='64' id='15cf8e87'/>
+      <pointer-type-def type-id='1f063fe1' size-in-bits='64' id='a1d66c91'/>
+      <array-type-def dimensions='1' type-id='fa0b179b' size-in-bits='512' id='f6e5abef'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <pointer-type-def type-id='08c313b5' size-in-bits='64' id='ac429605'/>
+      <array-type-def dimensions='1' type-id='85535682' size-in-bits='4096' id='f989fdcc'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <pointer-type-def type-id='c1670ffd' size-in-bits='64' id='372af73d'/>
+      <array-type-def dimensions='1' type-id='b3ad2c1c' size-in-bits='3072' id='105eff46'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <pointer-type-def type-id='cca707fb' size-in-bits='64' id='dc2d641b'/>
+      <qualified-type-def type-id='d2613fd6' const='yes' id='904f813f'/>
+      <qualified-type-def type-id='71d68b50' const='yes' id='4925ee5b'/>
+      <qualified-type-def type-id='68597e64' const='yes' id='23cb2797'/>
+      <qualified-type-def type-id='1e4ac06a' const='yes' id='1f063fe1'/>
+      <class-decl name='media_request' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/media/media-request.h' line='62' column='1' id='08c313b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mdev' type-id='e2929c1c' visibility='default' filepath='include/media/media-request.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/media/media-request.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='debug_str' type-id='665c09d8' visibility='default' filepath='include/media/media-request.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state' type-id='f22f33ac' visibility='default' filepath='include/media/media-request.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='updating_count' type-id='f0981eeb' visibility='default' filepath='include/media/media-request.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='access_count' type-id='f0981eeb' visibility='default' filepath='include/media/media-request.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='objects' type-id='72f469ec' visibility='default' filepath='include/media/media-request.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='num_incomplete_objects' type-id='f0981eeb' visibility='default' filepath='include/media/media-request.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='poll_wait' type-id='b5ab048f' visibility='default' filepath='include/media/media-request.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/media/media-request.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_fileio_data' size-in-bits='12608' is-struct='yes' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2434' column='1' id='c1670ffd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='memory' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bufs' type-id='729537cc' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12416'>
+          <var-decl name='cur_index' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12448'>
+          <var-decl name='initial_index' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12480'>
+          <var-decl name='q_count' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12512'>
+          <var-decl name='dq_count' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='read_once' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='write_immediately' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2444' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_plane' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='174' column='1' id='b3ad2c1c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mem_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/videobuf2-core.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dbuf' type-id='5e4f599b' visibility='default' filepath='include/media/videobuf2-core.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dbuf_mapped' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='bytesused' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='length' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='min_length' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='m' type-id='07aa0de4' visibility='default' filepath='include/media/videobuf2-core.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='data_offset' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='186' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_threadio_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2770' column='1' id='cca707fb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='thread' type-id='f23e2572' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fnc' type-id='86e6f91d' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='stop' type-id='b50a4934' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2774' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='216' id='665c09d8'>
+        <subrange length='27' type-id='7ff19f0f' id='fddb82f0'/>
+      </array-type-def>
+      <enum-decl name='media_request_state' filepath='include/media/media-request.h' line='37' column='1' id='f22f33ac'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MEDIA_REQUEST_STATE_IDLE' value='0'/>
+        <enumerator name='MEDIA_REQUEST_STATE_VALIDATING' value='1'/>
+        <enumerator name='MEDIA_REQUEST_STATE_QUEUED' value='2'/>
+        <enumerator name='MEDIA_REQUEST_STATE_COMPLETE' value='3'/>
+        <enumerator name='MEDIA_REQUEST_STATE_CLEANING' value='4'/>
+        <enumerator name='MEDIA_REQUEST_STATE_UPDATING' value='5'/>
+        <enumerator name='NR_OF_MEDIA_REQUEST_STATE' value='6'/>
+      </enum-decl>
+      <pointer-type-def type-id='e4dc0de6' size-in-bits='64' id='e2929c1c'/>
+      <class-decl name='media_request_object_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/media-request.h' line='247' column='1' id='d2613fd6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare' type-id='226f205f' visibility='default' filepath='include/media/media-request.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unprepare' type-id='afb80c18' visibility='default' filepath='include/media/media-request.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='queue' type-id='afb80c18' visibility='default' filepath='include/media/media-request.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unbind' type-id='afb80c18' visibility='default' filepath='include/media/media-request.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='afb80c18' visibility='default' filepath='include/media/media-request.h' line='252' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_buf_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='450' column='1' id='71d68b50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='verify_planes_array' type-id='c4cd4be2' visibility='default' filepath='include/media/videobuf2-core.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init_buffer' type-id='547e4f07' visibility='default' filepath='include/media/videobuf2-core.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fill_user_buffer' type-id='35cea26b' visibility='default' filepath='include/media/videobuf2-core.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fill_vb2_buffer' type-id='9cbbcc93' visibility='default' filepath='include/media/videobuf2-core.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='copy_timestamp' type-id='35cea26b' visibility='default' filepath='include/media/videobuf2-core.h' line='455' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_mem_ops' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='118' column='1' id='68597e64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alloc' type-id='ba09778f' visibility='default' filepath='include/media/videobuf2-core.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='put' type-id='b7f9d8e6' visibility='default' filepath='include/media/videobuf2-core.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_dmabuf' type-id='de210c7e' visibility='default' filepath='include/media/videobuf2-core.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_userptr' type-id='81e32a16' visibility='default' filepath='include/media/videobuf2-core.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='put_userptr' type-id='b7f9d8e6' visibility='default' filepath='include/media/videobuf2-core.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='prepare' type-id='b7f9d8e6' visibility='default' filepath='include/media/videobuf2-core.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='finish' type-id='b7f9d8e6' visibility='default' filepath='include/media/videobuf2-core.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='attach_dmabuf' type-id='5acb9c3c' visibility='default' filepath='include/media/videobuf2-core.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='detach_dmabuf' type-id='b7f9d8e6' visibility='default' filepath='include/media/videobuf2-core.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='map_dmabuf' type-id='b9b212f5' visibility='default' filepath='include/media/videobuf2-core.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='unmap_dmabuf' type-id='b7f9d8e6' visibility='default' filepath='include/media/videobuf2-core.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vaddr' type-id='5ad9edb6' visibility='default' filepath='include/media/videobuf2-core.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='cookie' type-id='5ad9edb6' visibility='default' filepath='include/media/videobuf2-core.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='num_users' type-id='caa804f2' visibility='default' filepath='include/media/videobuf2-core.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='mmap' type-id='f34c7de4' visibility='default' filepath='include/media/videobuf2-core.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_ops' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='411' column='1' id='1e4ac06a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='queue_setup' type-id='f4ef52eb' visibility='default' filepath='include/media/videobuf2-core.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_prepare' type-id='d2e04e44' visibility='default' filepath='include/media/videobuf2-core.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wait_finish' type-id='d2e04e44' visibility='default' filepath='include/media/videobuf2-core.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='buf_out_validate' type-id='85280418' visibility='default' filepath='include/media/videobuf2-core.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='buf_init' type-id='85280418' visibility='default' filepath='include/media/videobuf2-core.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='buf_prepare' type-id='85280418' visibility='default' filepath='include/media/videobuf2-core.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='buf_finish' type-id='547e4f07' visibility='default' filepath='include/media/videobuf2-core.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='buf_cleanup' type-id='547e4f07' visibility='default' filepath='include/media/videobuf2-core.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='start_streaming' type-id='15bfa933' visibility='default' filepath='include/media/videobuf2-core.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='stop_streaming' type-id='d2e04e44' visibility='default' filepath='include/media/videobuf2-core.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='buf_queue' type-id='547e4f07' visibility='default' filepath='include/media/videobuf2-core.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='buf_request_complete' type-id='547e4f07' visibility='default' filepath='include/media/videobuf2-core.h' line='430' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='181' column='1' id='07aa0de4'>
+        <data-member access='private'>
+          <var-decl name='offset' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='userptr' type-id='7359adad' visibility='default' filepath='include/media/videobuf2-core.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fd' type-id='95e97e5e' visibility='default' filepath='include/media/videobuf2-core.h' line='184' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='e4934d54' size-in-bits='64' id='de210c7e'/>
+      <pointer-type-def type-id='d56a4c4b' size-in-bits='64' id='226f205f'/>
+      <pointer-type-def type-id='299608ee' size-in-bits='64' id='85280418'/>
+      <pointer-type-def type-id='1e6604d7' size-in-bits='64' id='9cbbcc93'/>
+      <pointer-type-def type-id='a8a63667' size-in-bits='64' id='15bfa933'/>
+      <pointer-type-def type-id='78b081ff' size-in-bits='64' id='f4ef52eb'/>
+      <pointer-type-def type-id='5329c4da' size-in-bits='64' id='f34c7de4'/>
+      <class-decl name='media_device' size-in-bits='5312' is-struct='yes' visibility='default' filepath='include/media/media-device.h' line='144' column='1' id='e4dc0de6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/media/media-device.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='devnode' type-id='f3496bd3' visibility='default' filepath='include/media/media-device.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='model' type-id='16dc656a' visibility='default' filepath='include/media/media-device.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='driver_name' type-id='16dc656a' visibility='default' filepath='include/media/media-device.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='serial' type-id='36c46961' visibility='default' filepath='include/media/media-device.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bus_info' type-id='16dc656a' visibility='default' filepath='include/media/media-device.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hw_revision' type-id='19c2251e' visibility='default' filepath='include/media/media-device.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='topology_version' type-id='91ce1af9' visibility='default' filepath='include/media/media-device.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/media/media-device.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='entity_internal_idx' type-id='46ce60fb' visibility='default' filepath='include/media/media-device.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='entity_internal_idx_max' type-id='95e97e5e' visibility='default' filepath='include/media/media-device.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='entities' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='interfaces' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='pads' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='links' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='entity_notify' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='graph_mutex' type-id='925167dc' visibility='default' filepath='include/media/media-device.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='pm_count_walk' type-id='32ec86e0' visibility='default' filepath='include/media/media-device.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='source_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/media-device.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='enable_source' type-id='c3e03202' visibility='default' filepath='include/media/media-device.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='disable_source' type-id='35aeb76e' visibility='default' filepath='include/media/media-device.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='ops' type-id='306dc166' visibility='default' filepath='include/media/media-device.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='req_queue_mutex' type-id='925167dc' visibility='default' filepath='include/media/media-device.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='request_id' type-id='49178f86' visibility='default' filepath='include/media/media-device.h' line='181' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='38e7219e' size-in-bits='64' id='afb80c18'/>
+      <pointer-type-def type-id='cd68bc93' size-in-bits='64' id='547e4f07'/>
+      <pointer-type-def type-id='7ec379e7' size-in-bits='64' id='35cea26b'/>
+      <pointer-type-def type-id='9097330a' size-in-bits='64' id='d2e04e44'/>
+      <pointer-type-def type-id='f7cd66fa' size-in-bits='64' id='5acb9c3c'/>
+      <pointer-type-def type-id='a2db2d94' size-in-bits='64' id='81e32a16'/>
+      <pointer-type-def type-id='850738b3' size-in-bits='64' id='ba09778f'/>
+      <pointer-type-def type-id='cd5d79f4' size-in-bits='64' id='5ad9edb6'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='320' id='36c46961'>
+        <subrange length='40' type-id='7ff19f0f' id='8f80b239'/>
+      </array-type-def>
+      <pointer-type-def type-id='71fb30e8' size-in-bits='64' id='306dc166'/>
+      <pointer-type-def type-id='5fbbd9b8' size-in-bits='64' id='c3e03202'/>
+      <pointer-type-def type-id='41cb24b3' size-in-bits='64' id='f3496bd3'/>
+      <class-decl name='media_graph' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='88' column='1' id='32ec86e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stack' type-id='4cb10997' visibility='default' filepath='include/media/media-entity.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ent_enum' type-id='4cd55af5' visibility='default' filepath='include/media/media-entity.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='top' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='cf9a081c' size-in-bits='64' id='35aeb76e'/>
+      <array-type-def dimensions='1' type-id='3ca3bd83' size-in-bits='2048' id='4cb10997'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <qualified-type-def type-id='3d78e975' const='yes' id='71fb30e8'/>
+      <class-decl name='media_devnode' size-in-bits='8832' is-struct='yes' visibility='default' filepath='include/media/media-devnode.h' line='75' column='1' id='41cb24b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='media_dev' type-id='e2929c1c' visibility='default' filepath='include/media/media-devnode.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fops' type-id='1d91e688' visibility='default' filepath='include/media/media-devnode.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/media/media-devnode.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='cdev' type-id='22f86352' visibility='default' filepath='include/media/media-devnode.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/media/media-devnode.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/media/media-devnode.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/media-devnode.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='release' type-id='baa0730e' visibility='default' filepath='include/media/media-devnode.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_entity_enum' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='72' column='1' id='4cd55af5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bmap' type-id='1d2c2b85' visibility='default' filepath='include/media/media-entity.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='idx_max' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4b72b472' size-in-bits='64' id='1d91e688'/>
+      <class-decl name='media_device_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/media-device.h' line='65' column='1' id='3d78e975'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='link_notify' type-id='c4d81ddd' visibility='default' filepath='include/media/media-device.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='req_alloc' type-id='58b0d2ef' visibility='default' filepath='include/media/media-device.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='req_free' type-id='5e611ec0' visibility='default' filepath='include/media/media-device.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='req_validate' type-id='82ec1389' visibility='default' filepath='include/media/media-device.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='req_queue' type-id='5e611ec0' visibility='default' filepath='include/media/media-device.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/media/media-entity.h' line='89' column='1' id='3ca3bd83'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entity' type-id='19e05b5f' visibility='default' filepath='include/media/media-entity.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='link' type-id='e84b031a' visibility='default' filepath='include/media/media-entity.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2ebc1c8c' size-in-bits='64' id='baa0730e'/>
+      <qualified-type-def type-id='f2ce689d' const='yes' id='4b72b472'/>
+      <pointer-type-def type-id='d7de7749' size-in-bits='64' id='c4d81ddd'/>
+      <pointer-type-def type-id='2c3b4d9d' size-in-bits='64' id='82ec1389'/>
+      <pointer-type-def type-id='889856f7' size-in-bits='64' id='19e05b5f'/>
+      <pointer-type-def type-id='3bd753d3' size-in-bits='64' id='58b0d2ef'/>
+      <pointer-type-def type-id='d81a5dde' size-in-bits='64' id='5e611ec0'/>
+      <class-decl name='media_entity' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='289' column='1' id='889856f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='graph_obj' type-id='9fdb75a6' visibility='default' filepath='include/media/media-entity.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/media/media-entity.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='obj_type' type-id='33f4e443' visibility='default' filepath='include/media/media-entity.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='function' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/media-entity.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_pads' type-id='1dc6a898' visibility='default' filepath='include/media/media-entity.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='num_links' type-id='1dc6a898' visibility='default' filepath='include/media/media-entity.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='num_backlinks' type-id='1dc6a898' visibility='default' filepath='include/media/media-entity.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='internal_idx' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pads' type-id='50a51839' visibility='default' filepath='include/media/media-entity.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='links' type-id='72f469ec' visibility='default' filepath='include/media/media-entity.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ops' type-id='94f26cbd' visibility='default' filepath='include/media/media-entity.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='stream_count' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='use_count' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pipe' type-id='4ffae8c8' visibility='default' filepath='include/media/media-entity.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='info' type-id='f22bd336' visibility='default' filepath='include/media/media-entity.h' line='316' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_file_operations' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/media/media-devnode.h' line='47' column='1' id='f2ce689d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/media/media-devnode.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read' type-id='4d8f5625' visibility='default' filepath='include/media/media-devnode.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write' type-id='5f29549c' visibility='default' filepath='include/media/media-devnode.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='poll' type-id='4d01ede7' visibility='default' filepath='include/media/media-devnode.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ioctl' type-id='fc7daf55' visibility='default' filepath='include/media/media-devnode.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='compat_ioctl' type-id='fc7daf55' visibility='default' filepath='include/media/media-devnode.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='open' type-id='4da4101d' visibility='default' filepath='include/media/media-devnode.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='release' type-id='4da4101d' visibility='default' filepath='include/media/media-devnode.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f7d60a45' size-in-bits='64' id='94f26cbd'/>
+      <enum-decl name='media_entity_type' filepath='include/media/media-entity.h' line='243' column='1' id='33f4e443'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MEDIA_ENTITY_TYPE_BASE' value='0'/>
+        <enumerator name='MEDIA_ENTITY_TYPE_VIDEO_DEVICE' value='1'/>
+        <enumerator name='MEDIA_ENTITY_TYPE_V4L2_SUBDEV' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='48b94b91' size-in-bits='64' id='50a51839'/>
+      <pointer-type-def type-id='2783658a' size-in-bits='64' id='4ffae8c8'/>
+      <class-decl name='media_gobj' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='57' column='1' id='9fdb75a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mdev' type-id='e2929c1c' visibility='default' filepath='include/media/media-entity.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/media-entity.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/media-entity.h' line='311' column='1' id='f22bd336'>
+        <data-member access='private'>
+          <var-decl name='dev' type-id='8334ad45' visibility='default' filepath='include/media/media-entity.h' line='315' column='1'/>
+        </data-member>
+      </union-decl>
+      <qualified-type-def type-id='b13ab8d6' const='yes' id='f7d60a45'/>
+      <class-decl name='media_pad' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='189' column='1' id='48b94b91'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='graph_obj' type-id='9fdb75a6' visibility='default' filepath='include/media/media-entity.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='entity' type-id='19e05b5f' visibility='default' filepath='include/media/media-entity.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='index' type-id='1dc6a898' visibility='default' filepath='include/media/media-entity.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='sig_type' type-id='ec7f70f4' visibility='default' filepath='include/media/media-entity.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/media-entity.h' line='194' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_pipeline' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='104' column='1' id='2783658a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='streaming_count' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='graph' type-id='32ec86e0' visibility='default' filepath='include/media/media-entity.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/media/media-entity.h' line='312' column='1' id='8334ad45'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='major' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='minor' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='314' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='media_pad_signal_type' filepath='include/media/media-entity.h' line='171' column='1' id='ec7f70f4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PAD_SIGNAL_DEFAULT' value='0'/>
+        <enumerator name='PAD_SIGNAL_ANALOG' value='1'/>
+        <enumerator name='PAD_SIGNAL_DV' value='2'/>
+        <enumerator name='PAD_SIGNAL_AUDIO' value='3'/>
+      </enum-decl>
+      <class-decl name='media_entity_operations' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='214' column='1' id='b13ab8d6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_fwnode_pad' type-id='3ab939dc' visibility='default' filepath='include/media/media-entity.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='link_setup' type-id='74b6c0a0' visibility='default' filepath='include/media/media-entity.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='link_validate' type-id='5e810368' visibility='default' filepath='include/media/media-entity.h' line='219' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7add78ea' size-in-bits='64' id='3ab939dc'/>
+      <pointer-type-def type-id='835d6aa6' size-in-bits='64' id='74b6c0a0'/>
+      <pointer-type-def type-id='11c513ae' size-in-bits='64' id='5e810368'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/media/common/videobuf2/videobuf2-v4l2.c' language='LANG_C89'>
+      <function-decl name='vb2_querybuf' mangled-name='vb2_querybuf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='632' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_querybuf'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='632' column='1'/>
+        <parameter type-id='a90d9002' name='b' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='632' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_reqbufs' mangled-name='vb2_reqbufs' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='671' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_reqbufs'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='671' column='1'/>
+        <parameter type-id='e4330308' name='req' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='671' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_prepare_buf' mangled-name='vb2_prepare_buf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='680' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_prepare_buf'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='680' column='1'/>
+        <parameter type-id='e2929c1c' name='mdev' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='680' column='1'/>
+        <parameter type-id='a90d9002' name='b' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='681' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_create_bufs' mangled-name='vb2_create_bufs' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='699' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_create_bufs'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='699' column='1'/>
+        <parameter type-id='0bb617a4' name='create' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='699' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_qbuf' mangled-name='vb2_qbuf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='755' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_qbuf'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='755' column='1'/>
+        <parameter type-id='e2929c1c' name='mdev' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='755' column='1'/>
+        <parameter type-id='a90d9002' name='b' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='756' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_dqbuf' mangled-name='vb2_dqbuf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='776' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_dqbuf'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='776' column='1'/>
+        <parameter type-id='a90d9002' name='b' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='776' column='1'/>
+        <parameter type-id='b50a4934' name='nonblocking' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='776' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_streamon' mangled-name='vb2_streamon' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='807' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_streamon'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='807' column='1'/>
+        <parameter type-id='1abf108f' name='type' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='807' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_streamoff' mangled-name='vb2_streamoff' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='817' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_streamoff'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='817' column='1'/>
+        <parameter type-id='1abf108f' name='type' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='817' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_expbuf' mangled-name='vb2_expbuf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='827' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_expbuf'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='827' column='1'/>
+        <parameter type-id='5606e640' name='eb' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='827' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_queue_init' mangled-name='vb2_queue_init' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='834' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_queue_init'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='834' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_queue_release' mangled-name='vb2_queue_release' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='874' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_queue_release'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='874' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vb2_poll' mangled-name='vb2_poll' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='880' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_poll'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='880' column='1'/>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='880' column='1'/>
+        <parameter type-id='a54c778f' name='wait' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='880' column='1'/>
+        <return type-id='8f254b08'/>
+      </function-decl>
+      <function-decl name='vb2_ioctl_reqbufs' mangled-name='vb2_ioctl_reqbufs' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='915' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ioctl_reqbufs'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='915' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='915' column='1'/>
+        <parameter type-id='e4330308' name='p' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='916' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_ioctl_create_bufs' mangled-name='vb2_ioctl_create_bufs' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='935' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ioctl_create_bufs'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='935' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='935' column='1'/>
+        <parameter type-id='0bb617a4' name='p' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='936' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_ioctl_prepare_buf' mangled-name='vb2_ioctl_prepare_buf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='962' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ioctl_prepare_buf'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='962' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='962' column='1'/>
+        <parameter type-id='a90d9002' name='p' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='963' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_ioctl_querybuf' mangled-name='vb2_ioctl_querybuf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='973' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ioctl_querybuf'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='973' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='973' column='1'/>
+        <parameter type-id='a90d9002' name='p' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='973' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_ioctl_qbuf' mangled-name='vb2_ioctl_qbuf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='982' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ioctl_qbuf'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='982' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='982' column='1'/>
+        <parameter type-id='a90d9002' name='p' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='982' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_ioctl_dqbuf' mangled-name='vb2_ioctl_dqbuf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='992' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ioctl_dqbuf'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='992' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='992' column='1'/>
+        <parameter type-id='a90d9002' name='p' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='992' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_ioctl_streamon' mangled-name='vb2_ioctl_streamon' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1002' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ioctl_streamon'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1002' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1002' column='1'/>
+        <parameter type-id='1abf108f' name='i' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1002' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_ioctl_streamoff' mangled-name='vb2_ioctl_streamoff' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1012' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ioctl_streamoff'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1012' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1012' column='1'/>
+        <parameter type-id='1abf108f' name='i' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1012' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_ioctl_expbuf' mangled-name='vb2_ioctl_expbuf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1022' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ioctl_expbuf'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1022' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1022' column='1'/>
+        <parameter type-id='5606e640' name='p' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1022' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_fop_mmap' mangled-name='vb2_fop_mmap' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1034' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_fop_mmap'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1034' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1034' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_fop_release' mangled-name='vb2_fop_release' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1058' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_fop_release'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1058' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_fop_read' mangled-name='vb2_fop_read' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1091' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_fop_read'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1091' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1091' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1092' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1092' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='vb2_fop_poll' mangled-name='vb2_fop_poll' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1115' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_fop_poll'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1115' column='1'/>
+        <parameter type-id='a54c778f' name='wait' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1115' column='1'/>
+        <return type-id='8f254b08'/>
+      </function-decl>
+      <function-decl name='vb2_ops_wait_prepare' mangled-name='vb2_ops_wait_prepare' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1158' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ops_wait_prepare'>
+        <parameter type-id='a05f1ecd' name='vq' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1158' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vb2_ops_wait_finish' mangled-name='vb2_ops_wait_finish' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1164' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ops_wait_finish'>
+        <parameter type-id='a05f1ecd' name='vq' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1164' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <enum-decl name='v4l2_buf_type' filepath='include/uapi/linux/videodev2.h' line='141' column='1' id='1abf108f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_CAPTURE' value='1'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_OUTPUT' value='2'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_OVERLAY' value='3'/>
+        <enumerator name='V4L2_BUF_TYPE_VBI_CAPTURE' value='4'/>
+        <enumerator name='V4L2_BUF_TYPE_VBI_OUTPUT' value='5'/>
+        <enumerator name='V4L2_BUF_TYPE_SLICED_VBI_CAPTURE' value='6'/>
+        <enumerator name='V4L2_BUF_TYPE_SLICED_VBI_OUTPUT' value='7'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY' value='8'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE' value='9'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE' value='10'/>
+        <enumerator name='V4L2_BUF_TYPE_SDR_CAPTURE' value='11'/>
+        <enumerator name='V4L2_BUF_TYPE_SDR_OUTPUT' value='12'/>
+        <enumerator name='V4L2_BUF_TYPE_META_CAPTURE' value='13'/>
+        <enumerator name='V4L2_BUF_TYPE_META_OUTPUT' value='14'/>
+        <enumerator name='V4L2_BUF_TYPE_PRIVATE' value='128'/>
+      </enum-decl>
+      <pointer-type-def type-id='f9b2d12e' size-in-bits='64' id='a54c778f'/>
+      <pointer-type-def type-id='5e2fd874' size-in-bits='64' id='a90d9002'/>
+      <pointer-type-def type-id='20d04fee' size-in-bits='64' id='0bb617a4'/>
+      <pointer-type-def type-id='b201a5c2' size-in-bits='64' id='5606e640'/>
+      <pointer-type-def type-id='879dea4a' size-in-bits='64' id='e4330308'/>
+      <class-decl name='v4l2_buffer' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='995' column='1' id='5e2fd874'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bytesused' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timestamp' type-id='2a693ac3' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='timecode' type-id='5f820012' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='memory' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='m' type-id='09960b26' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='length' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='reserved2' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='' type-id='e0a2553c' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1015' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_create_buffers' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2412' column='1' id='20d04fee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='memory' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='format' type-id='0a5711c9' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='capabilities' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='reserved' type-id='3faaea70' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2418' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_exportbuffer' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1091' column='1' id='b201a5c2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1093' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='plane' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1094' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1095' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1096' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reserved' type-id='9d263779' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1097' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_requestbuffers' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='913' column='1' id='879dea4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='memory' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='capabilities' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='917' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reserved' type-id='439be632' visibility='default' filepath='include/uapi/linux/videodev2.h' line='918' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='poll_table' type-id='415eecf1' filepath='include/linux/poll.h' line='46' column='1' id='f9b2d12e'/>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='352' id='9d263779'>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='32' id='439be632'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <class-decl name='timeval' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/time.h' line='16' column='1' id='2a693ac3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='f7d92306' visibility='default' filepath='include/uapi/linux/time.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tv_usec' type-id='55c6233e' visibility='default' filepath='include/uapi/linux/time.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_format' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2243' column='1' id='0a5711c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fmt' type-id='08bd2345' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2254' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_timecode' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='856' column='1' id='5f820012'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frames' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='seconds' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='minutes' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='hours' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='userbits' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/videodev2.h' line='863' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__9' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1015' column='1' id='e0a2553c'>
+        <data-member access='private'>
+          <var-decl name='request_fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1016' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='reserved' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1017' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__7' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1007' column='1' id='09960b26'>
+        <data-member access='private'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1008' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='userptr' type-id='7359adad' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='planes' type-id='00e8fe5a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1010' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1011' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='__kernel_suseconds_t' type-id='6a11bd61' filepath='include/uapi/asm-generic/posix_types.h' line='41' column='1' id='55c6233e'/>
+      <typedef-decl name='__kernel_time_t' type-id='6a11bd61' filepath='include/uapi/asm-generic/posix_types.h' line='89' column='1' id='f7d92306'/>
+      <union-decl name='__anonymous_union__4' size-in-bits='1600' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2245' column='1' id='08bd2345'>
+        <data-member access='private'>
+          <var-decl name='pix' type-id='e8f6102b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2246' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='pix_mp' type-id='dece967b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2247' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='win' type-id='3a0ab346' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2248' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='vbi' type-id='ae01ca89' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2249' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sliced' type-id='a2be7826' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2250' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sdr' type-id='a37aff65' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2251' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='meta' type-id='1db7c88b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2252' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw_data' type-id='0530f1a6' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2253' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='8cd967bc' size-in-bits='64' id='00e8fe5a'/>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='1600' id='0530f1a6'>
+        <subrange length='200' type-id='7ff19f0f' id='53119c2f'/>
+      </array-type-def>
+      <class-decl name='v4l2_meta_format' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2228' column='1' id='1db7c88b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dataformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='buffersize' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2230' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_pix_format' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='494' column='1' id='e8f6102b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pixelformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bytesperline' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='sizeimage' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='colorspace' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='priv' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='' type-id='930baada' visibility='default' filepath='include/uapi/linux/videodev2.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='quantization' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='xfer_func' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='511' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_pix_format_mplane' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2193' column='1' id='dece967b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pixelformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='colorspace' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='plane_fmt' type-id='15b94482' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='num_planes' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1448'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1456'>
+          <var-decl name='' type-id='29c254d4' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1464'>
+          <var-decl name='quantization' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='xfer_func' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1480'>
+          <var-decl name='reserved' type-id='c20b850f' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_plane' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='951' column='1' id='8cd967bc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bytesused' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='length' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='m' type-id='9942b293' visibility='default' filepath='include/uapi/linux/videodev2.h' line='958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data_offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reserved' type-id='9d263779' visibility='default' filepath='include/uapi/linux/videodev2.h' line='961' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_sdr_format' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2217' column='1' id='a37aff65'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pixelformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='buffersize' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='26f0765c' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2220' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_sliced_vbi_format' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2072' column='1' id='a2be7826'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='service_set' type-id='d315442e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2073' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='service_lines' type-id='025daa6d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='io_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2080' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vbi_format' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2044' column='1' id='ae01ca89'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sampling_rate' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='samples_per_line' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='sample_format' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='start' type-id='e5d37c7b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='count' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2052' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_window' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1143' column='1' id='3a0ab346'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='w' type-id='3dbd4e78' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='chromakey' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='clips' type-id='db634b6a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='clipcount' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bitmap' type-id='eaa32e2f' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='global_alpha' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1150' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='3158a266' size-in-bits='64' id='e5d37c7b'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='d315442e' size-in-bits='768' id='025daa6d'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='24' type-id='7ff19f0f' id='fdd3342b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='192' id='26f0765c'>
+        <subrange length='24' type-id='7ff19f0f' id='fdd3342b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='56' id='c20b850f'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <class-decl name='v4l2_rect' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='412' column='1' id='3dbd4e78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='left' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='top' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='416' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__8' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='954' column='1' id='9942b293'>
+        <data-member access='private'>
+          <var-decl name='mem_offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='955' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='userptr' type-id='7359adad' visibility='default' filepath='include/uapi/linux/videodev2.h' line='956' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='957' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='504' column='1' id='930baada'>
+        <data-member access='private'>
+          <var-decl name='ycbcr_enc' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='hsv_enc' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='508' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='8' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2203' column='1' id='29c254d4'>
+        <data-member access='private'>
+          <var-decl name='ycbcr_enc' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2204' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='hsv_enc' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2205' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='aecf225c' size-in-bits='64' id='db634b6a'/>
+      <array-type-def dimensions='1' type-id='69ab6968' size-in-bits='1280' id='15b94482'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='v4l2_clip' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1138' column='1' id='aecf225c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='c' type-id='3dbd4e78' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='db634b6a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1140' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_plane_pix_format' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2173' column='1' id='69ab6968'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sizeimage' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bytesperline' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='81144473' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2176' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='d315442e' size-in-bits='96' id='81144473'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/media/mc/mc-device.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='3ca3bd83' size-in-bits='2048' id='4cb10997'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='216' id='665c09d8'>
+        <subrange length='27' type-id='7ff19f0f' id='fddb82f0'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='320' id='36c46961'>
+        <subrange length='40' type-id='7ff19f0f' id='8f80b239'/>
+      </array-type-def>
+      <class-decl name='media_device' size-in-bits='5312' is-struct='yes' visibility='default' filepath='include/media/media-device.h' line='144' column='1' id='e4dc0de6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/media/media-device.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='devnode' type-id='f3496bd3' visibility='default' filepath='include/media/media-device.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='model' type-id='16dc656a' visibility='default' filepath='include/media/media-device.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='driver_name' type-id='16dc656a' visibility='default' filepath='include/media/media-device.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='serial' type-id='36c46961' visibility='default' filepath='include/media/media-device.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bus_info' type-id='16dc656a' visibility='default' filepath='include/media/media-device.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hw_revision' type-id='19c2251e' visibility='default' filepath='include/media/media-device.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='topology_version' type-id='91ce1af9' visibility='default' filepath='include/media/media-device.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/media/media-device.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='entity_internal_idx' type-id='46ce60fb' visibility='default' filepath='include/media/media-device.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='entity_internal_idx_max' type-id='95e97e5e' visibility='default' filepath='include/media/media-device.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='entities' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='interfaces' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='pads' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='links' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='entity_notify' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='graph_mutex' type-id='925167dc' visibility='default' filepath='include/media/media-device.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='pm_count_walk' type-id='32ec86e0' visibility='default' filepath='include/media/media-device.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='source_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/media-device.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='enable_source' type-id='c3e03202' visibility='default' filepath='include/media/media-device.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='disable_source' type-id='35aeb76e' visibility='default' filepath='include/media/media-device.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='ops' type-id='306dc166' visibility='default' filepath='include/media/media-device.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='req_queue_mutex' type-id='925167dc' visibility='default' filepath='include/media/media-device.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='request_id' type-id='49178f86' visibility='default' filepath='include/media/media-device.h' line='181' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_devnode' size-in-bits='8832' is-struct='yes' visibility='default' filepath='include/media/media-devnode.h' line='75' column='1' id='41cb24b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='media_dev' type-id='e2929c1c' visibility='default' filepath='include/media/media-devnode.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fops' type-id='1d91e688' visibility='default' filepath='include/media/media-devnode.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/media/media-devnode.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='cdev' type-id='22f86352' visibility='default' filepath='include/media/media-devnode.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/media/media-devnode.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/media/media-devnode.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/media-devnode.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='release' type-id='baa0730e' visibility='default' filepath='include/media/media-devnode.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_file_operations' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/media/media-devnode.h' line='47' column='1' id='f2ce689d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/media/media-devnode.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read' type-id='4d8f5625' visibility='default' filepath='include/media/media-devnode.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write' type-id='5f29549c' visibility='default' filepath='include/media/media-devnode.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='poll' type-id='4d01ede7' visibility='default' filepath='include/media/media-devnode.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ioctl' type-id='fc7daf55' visibility='default' filepath='include/media/media-devnode.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='compat_ioctl' type-id='fc7daf55' visibility='default' filepath='include/media/media-devnode.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='open' type-id='4da4101d' visibility='default' filepath='include/media/media-devnode.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='release' type-id='4da4101d' visibility='default' filepath='include/media/media-devnode.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_graph' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='88' column='1' id='32ec86e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stack' type-id='4cb10997' visibility='default' filepath='include/media/media-entity.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ent_enum' type-id='4cd55af5' visibility='default' filepath='include/media/media-entity.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='top' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/media/media-entity.h' line='89' column='1' id='3ca3bd83'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entity' type-id='19e05b5f' visibility='default' filepath='include/media/media-entity.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='link' type-id='e84b031a' visibility='default' filepath='include/media/media-entity.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_entity' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='289' column='1' id='889856f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='graph_obj' type-id='9fdb75a6' visibility='default' filepath='include/media/media-entity.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/media/media-entity.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='obj_type' type-id='33f4e443' visibility='default' filepath='include/media/media-entity.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='function' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/media-entity.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_pads' type-id='1dc6a898' visibility='default' filepath='include/media/media-entity.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='num_links' type-id='1dc6a898' visibility='default' filepath='include/media/media-entity.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='num_backlinks' type-id='1dc6a898' visibility='default' filepath='include/media/media-entity.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='internal_idx' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pads' type-id='50a51839' visibility='default' filepath='include/media/media-entity.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='links' type-id='72f469ec' visibility='default' filepath='include/media/media-entity.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ops' type-id='94f26cbd' visibility='default' filepath='include/media/media-entity.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='stream_count' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='use_count' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pipe' type-id='4ffae8c8' visibility='default' filepath='include/media/media-entity.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='info' type-id='f22bd336' visibility='default' filepath='include/media/media-entity.h' line='316' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_gobj' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='57' column='1' id='9fdb75a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mdev' type-id='e2929c1c' visibility='default' filepath='include/media/media-entity.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/media-entity.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='media_entity_type' filepath='include/media/media-entity.h' line='243' column='1' id='33f4e443'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MEDIA_ENTITY_TYPE_BASE' value='0'/>
+        <enumerator name='MEDIA_ENTITY_TYPE_VIDEO_DEVICE' value='1'/>
+        <enumerator name='MEDIA_ENTITY_TYPE_V4L2_SUBDEV' value='2'/>
+      </enum-decl>
+      <class-decl name='media_pad' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='189' column='1' id='48b94b91'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='graph_obj' type-id='9fdb75a6' visibility='default' filepath='include/media/media-entity.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='entity' type-id='19e05b5f' visibility='default' filepath='include/media/media-entity.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='index' type-id='1dc6a898' visibility='default' filepath='include/media/media-entity.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='sig_type' type-id='ec7f70f4' visibility='default' filepath='include/media/media-entity.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/media-entity.h' line='194' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='media_pad_signal_type' filepath='include/media/media-entity.h' line='171' column='1' id='ec7f70f4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PAD_SIGNAL_DEFAULT' value='0'/>
+        <enumerator name='PAD_SIGNAL_ANALOG' value='1'/>
+        <enumerator name='PAD_SIGNAL_DV' value='2'/>
+        <enumerator name='PAD_SIGNAL_AUDIO' value='3'/>
+      </enum-decl>
+      <class-decl name='media_entity_operations' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='214' column='1' id='b13ab8d6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_fwnode_pad' type-id='3ab939dc' visibility='default' filepath='include/media/media-entity.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='link_setup' type-id='74b6c0a0' visibility='default' filepath='include/media/media-entity.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='link_validate' type-id='5e810368' visibility='default' filepath='include/media/media-entity.h' line='219' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_link' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='132' column='1' id='876d3bbc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='graph_obj' type-id='9fdb75a6' visibility='default' filepath='include/media/media-entity.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/media-entity.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='' type-id='506a0f90' visibility='default' filepath='include/media/media-entity.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='' type-id='a7b4792d' visibility='default' filepath='include/media/media-entity.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='reverse' type-id='b4de78ea' visibility='default' filepath='include/media/media-entity.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/media-entity.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='is_backlink' type-id='b50a4934' visibility='default' filepath='include/media/media-entity.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/media-entity.h' line='135' column='1' id='506a0f90'>
+        <data-member access='private'>
+          <var-decl name='gobj0' type-id='4077272c' visibility='default' filepath='include/media/media-entity.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='source' type-id='50a51839' visibility='default' filepath='include/media/media-entity.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='intf' type-id='afe1ccd7' visibility='default' filepath='include/media/media-entity.h' line='138' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='media_interface' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='335' column='1' id='5943f90f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='graph_obj' type-id='9fdb75a6' visibility='default' filepath='include/media/media-entity.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='links' type-id='72f469ec' visibility='default' filepath='include/media/media-entity.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='type' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='339' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/media-entity.h' line='140' column='1' id='a7b4792d'>
+        <data-member access='private'>
+          <var-decl name='gobj1' type-id='4077272c' visibility='default' filepath='include/media/media-entity.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sink' type-id='50a51839' visibility='default' filepath='include/media/media-entity.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='entity' type-id='19e05b5f' visibility='default' filepath='include/media/media-entity.h' line='143' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='media_pipeline' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='104' column='1' id='2783658a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='streaming_count' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='graph' type-id='32ec86e0' visibility='default' filepath='include/media/media-entity.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/media-entity.h' line='311' column='1' id='f22bd336'>
+        <data-member access='private'>
+          <var-decl name='dev' type-id='8334ad45' visibility='default' filepath='include/media/media-entity.h' line='315' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/media/media-entity.h' line='312' column='1' id='8334ad45'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='major' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='minor' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='314' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_entity_enum' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='72' column='1' id='4cd55af5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bmap' type-id='1d2c2b85' visibility='default' filepath='include/media/media-entity.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='idx_max' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_device_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/media-device.h' line='65' column='1' id='3d78e975'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='link_notify' type-id='c4d81ddd' visibility='default' filepath='include/media/media-device.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='req_alloc' type-id='58b0d2ef' visibility='default' filepath='include/media/media-device.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='req_free' type-id='5e611ec0' visibility='default' filepath='include/media/media-device.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='req_validate' type-id='82ec1389' visibility='default' filepath='include/media/media-device.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='req_queue' type-id='5e611ec0' visibility='default' filepath='include/media/media-device.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_request' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/media/media-request.h' line='62' column='1' id='08c313b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mdev' type-id='e2929c1c' visibility='default' filepath='include/media/media-request.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/media/media-request.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='debug_str' type-id='665c09d8' visibility='default' filepath='include/media/media-request.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state' type-id='f22f33ac' visibility='default' filepath='include/media/media-request.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='updating_count' type-id='f0981eeb' visibility='default' filepath='include/media/media-request.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='access_count' type-id='f0981eeb' visibility='default' filepath='include/media/media-request.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='objects' type-id='72f469ec' visibility='default' filepath='include/media/media-request.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='num_incomplete_objects' type-id='f0981eeb' visibility='default' filepath='include/media/media-request.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='poll_wait' type-id='b5ab048f' visibility='default' filepath='include/media/media-request.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/media/media-request.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='media_request_state' filepath='include/media/media-request.h' line='37' column='1' id='f22f33ac'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MEDIA_REQUEST_STATE_IDLE' value='0'/>
+        <enumerator name='MEDIA_REQUEST_STATE_VALIDATING' value='1'/>
+        <enumerator name='MEDIA_REQUEST_STATE_QUEUED' value='2'/>
+        <enumerator name='MEDIA_REQUEST_STATE_COMPLETE' value='3'/>
+        <enumerator name='MEDIA_REQUEST_STATE_CLEANING' value='4'/>
+        <enumerator name='MEDIA_REQUEST_STATE_UPDATING' value='5'/>
+        <enumerator name='NR_OF_MEDIA_REQUEST_STATE' value='6'/>
+      </enum-decl>
+      <qualified-type-def type-id='3d78e975' const='yes' id='71fb30e8'/>
+      <pointer-type-def type-id='71fb30e8' size-in-bits='64' id='306dc166'/>
+      <qualified-type-def type-id='b13ab8d6' const='yes' id='f7d60a45'/>
+      <pointer-type-def type-id='f7d60a45' size-in-bits='64' id='94f26cbd'/>
+      <qualified-type-def type-id='f2ce689d' const='yes' id='4b72b472'/>
+      <pointer-type-def type-id='4b72b472' size-in-bits='64' id='1d91e688'/>
+      <qualified-type-def type-id='48b94b91' const='yes' id='d5f12852'/>
+      <pointer-type-def type-id='d5f12852' size-in-bits='64' id='42a2b4e8'/>
+      <pointer-type-def type-id='7add78ea' size-in-bits='64' id='3ab939dc'/>
+      <pointer-type-def type-id='835d6aa6' size-in-bits='64' id='74b6c0a0'/>
+      <pointer-type-def type-id='5fbbd9b8' size-in-bits='64' id='c3e03202'/>
+      <pointer-type-def type-id='11c513ae' size-in-bits='64' id='5e810368'/>
+      <pointer-type-def type-id='d7de7749' size-in-bits='64' id='c4d81ddd'/>
+      <pointer-type-def type-id='2c3b4d9d' size-in-bits='64' id='82ec1389'/>
+      <pointer-type-def type-id='e4dc0de6' size-in-bits='64' id='e2929c1c'/>
+      <pointer-type-def type-id='41cb24b3' size-in-bits='64' id='f3496bd3'/>
+      <pointer-type-def type-id='889856f7' size-in-bits='64' id='19e05b5f'/>
+      <pointer-type-def type-id='9fdb75a6' size-in-bits='64' id='4077272c'/>
+      <pointer-type-def type-id='32ec86e0' size-in-bits='64' id='375e0126'/>
+      <pointer-type-def type-id='5943f90f' size-in-bits='64' id='afe1ccd7'/>
+      <pointer-type-def type-id='876d3bbc' size-in-bits='64' id='b4de78ea'/>
+      <pointer-type-def type-id='48b94b91' size-in-bits='64' id='50a51839'/>
+      <pointer-type-def type-id='2783658a' size-in-bits='64' id='4ffae8c8'/>
+      <pointer-type-def type-id='08c313b5' size-in-bits='64' id='ac429605'/>
+      <pointer-type-def type-id='3bd753d3' size-in-bits='64' id='58b0d2ef'/>
+      <pointer-type-def type-id='2ebc1c8c' size-in-bits='64' id='baa0730e'/>
+      <pointer-type-def type-id='cf9a081c' size-in-bits='64' id='35aeb76e'/>
+      <pointer-type-def type-id='d81a5dde' size-in-bits='64' id='5e611ec0'/>
+      <function-decl name='media_device_init' mangled-name='media_device_init' filepath='drivers/media/mc/mc-device.c' line='703' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_device_init'>
+        <parameter type-id='e2929c1c' name='mdev' filepath='drivers/media/mc/mc-device.c' line='703' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='media_device_register_entity' mangled-name='media_device_register_entity' filepath='drivers/media/mc/mc-device.c' line='615' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_device_register_entity'>
+        <parameter type-id='e2929c1c' name='mdev' filepath='drivers/media/mc/mc-device.c' line='615' column='1'/>
+        <parameter type-id='19e05b5f' name='entity' filepath='drivers/media/mc/mc-device.c' line='616' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='media_graph_walk_init' mangled-name='media_graph_walk_init' filepath='include/media/media-entity.h' line='888' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_graph_walk_init'>
+        <parameter type-id='375e0126'/>
+        <parameter type-id='e2929c1c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='media_device_unregister_entity' mangled-name='media_device_unregister_entity' filepath='drivers/media/mc/mc-device.c' line='680' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_device_unregister_entity'>
+        <parameter type-id='19e05b5f' name='entity' filepath='drivers/media/mc/mc-device.c' line='680' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='media_device_cleanup' mangled-name='media_device_cleanup' filepath='drivers/media/mc/mc-device.c' line='721' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_device_cleanup'>
+        <parameter type-id='e2929c1c' name='mdev' filepath='drivers/media/mc/mc-device.c' line='721' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__media_device_register' mangled-name='__media_device_register' filepath='drivers/media/mc/mc-device.c' line='731' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__media_device_register'>
+        <parameter type-id='e2929c1c' name='mdev' filepath='drivers/media/mc/mc-device.c' line='731' column='1'/>
+        <parameter type-id='2730d016' name='owner' filepath='drivers/media/mc/mc-device.c' line='732' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='media_device_unregister' mangled-name='media_device_unregister' filepath='drivers/media/mc/mc-device.c' line='800' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_device_unregister'>
+        <parameter type-id='e2929c1c' name='mdev' filepath='drivers/media/mc/mc-device.c' line='800' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='media_entity_find_link' mangled-name='media_entity_find_link' filepath='include/media/media-entity.h' line='844' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_entity_find_link'>
+        <parameter type-id='50a51839'/>
+        <parameter type-id='50a51839'/>
+        <return type-id='b4de78ea'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='7add78ea'>
+        <parameter type-id='41b1c13c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='835d6aa6'>
+        <parameter type-id='19e05b5f'/>
+        <parameter type-id='42a2b4e8'/>
+        <parameter type-id='42a2b4e8'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5fbbd9b8'>
+        <parameter type-id='19e05b5f'/>
+        <parameter type-id='4ffae8c8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='11c513ae'>
+        <parameter type-id='b4de78ea'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d7de7749'>
+        <parameter type-id='b4de78ea'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2c3b4d9d'>
+        <parameter type-id='ac429605'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3bd753d3'>
+        <parameter type-id='e2929c1c'/>
+        <return type-id='ac429605'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2ebc1c8c'>
+        <parameter type-id='f3496bd3'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cf9a081c'>
+        <parameter type-id='19e05b5f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d81a5dde'>
+        <parameter type-id='ac429605'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='84a13146' size-in-bits='64' id='41b1c13c'/>
+      <class-decl name='fwnode_endpoint' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fwnode.h' line='35' column='1' id='84a13146'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='f0981eeb' visibility='default' filepath='include/linux/fwnode.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/linux/fwnode.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='local_fwnode' type-id='7837cd88' visibility='default' filepath='include/linux/fwnode.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/media/mc/mc-entity.c' language='LANG_C89'>
+      <class-decl name='media_intf_devnode' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='349' column='1' id='0d853221'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='intf' type-id='5943f90f' visibility='default' filepath='include/media/media-entity.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='major' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='minor' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='354' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='0d853221' size-in-bits='64' id='8114c6c9'/>
+      <function-decl name='media_entity_pads_init' mangled-name='media_entity_pads_init' filepath='drivers/media/mc/mc-entity.c' line='197' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_entity_pads_init'>
+        <parameter type-id='19e05b5f' name='entity' filepath='drivers/media/mc/mc-entity.c' line='197' column='1'/>
+        <parameter type-id='1dc6a898' name='num_pads' filepath='drivers/media/mc/mc-entity.c' line='197' column='1'/>
+        <parameter type-id='50a51839' name='pads' filepath='drivers/media/mc/mc-entity.c' line='198' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='media_graph_walk_start' mangled-name='media_graph_walk_start' filepath='drivers/media/mc/mc-entity.c' line='294' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_graph_walk_start'>
+        <parameter type-id='375e0126' name='graph' filepath='drivers/media/mc/mc-entity.c' line='294' column='1'/>
+        <parameter type-id='19e05b5f' name='entity' filepath='drivers/media/mc/mc-entity.c' line='295' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='media_graph_walk_next' mangled-name='media_graph_walk_next' filepath='drivers/media/mc/mc-entity.c' line='345' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_graph_walk_next'>
+        <parameter type-id='375e0126' name='graph' filepath='drivers/media/mc/mc-entity.c' line='345' column='1'/>
+        <return type-id='19e05b5f'/>
+      </function-decl>
+      <function-decl name='media_create_pad_link' mangled-name='media_create_pad_link' filepath='drivers/media/mc/mc-entity.c' line='659' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_create_pad_link'>
+        <parameter type-id='19e05b5f' name='source' filepath='drivers/media/mc/mc-entity.c' line='659' column='1'/>
+        <parameter type-id='1dc6a898' name='source_pad' filepath='drivers/media/mc/mc-entity.c' line='659' column='1'/>
+        <parameter type-id='19e05b5f' name='sink' filepath='drivers/media/mc/mc-entity.c' line='660' column='1'/>
+        <parameter type-id='1dc6a898' name='sink_pad' filepath='drivers/media/mc/mc-entity.c' line='660' column='1'/>
+        <parameter type-id='19c2251e' name='flags' filepath='drivers/media/mc/mc-entity.c' line='660' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='media_entity_remove_links' mangled-name='media_entity_remove_links' filepath='drivers/media/mc/mc-entity.c' line='787' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_entity_remove_links'>
+        <parameter type-id='19e05b5f' name='entity' filepath='drivers/media/mc/mc-entity.c' line='787' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__media_entity_setup_link' mangled-name='__media_entity_setup_link' filepath='drivers/media/mc/mc-entity.c' line='825' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__media_entity_setup_link'>
+        <parameter type-id='b4de78ea' name='link' filepath='drivers/media/mc/mc-entity.c' line='825' column='1'/>
+        <parameter type-id='19c2251e' name='flags' filepath='drivers/media/mc/mc-entity.c' line='825' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='media_entity_setup_link' mangled-name='media_entity_setup_link' filepath='drivers/media/mc/mc-entity.c' line='871' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_entity_setup_link'>
+        <parameter type-id='b4de78ea' name='link' filepath='drivers/media/mc/mc-entity.c' line='871' column='1'/>
+        <parameter type-id='19c2251e' name='flags' filepath='drivers/media/mc/mc-entity.c' line='871' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='media_entity_remote_pad' mangled-name='media_entity_remote_pad' filepath='drivers/media/mc/mc-entity.c' line='900' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_entity_remote_pad'>
+        <parameter type-id='42a2b4e8' name='pad' filepath='drivers/media/mc/mc-entity.c' line='900' column='1'/>
+        <return type-id='50a51839'/>
+      </function-decl>
+      <function-decl name='media_devnode_create' mangled-name='media_devnode_create' filepath='drivers/media/mc/mc-entity.c' line='934' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_devnode_create'>
+        <parameter type-id='e2929c1c' name='mdev' filepath='drivers/media/mc/mc-entity.c' line='934' column='1'/>
+        <parameter type-id='19c2251e' name='type' filepath='drivers/media/mc/mc-entity.c' line='935' column='1'/>
+        <parameter type-id='19c2251e' name='flags' filepath='drivers/media/mc/mc-entity.c' line='935' column='1'/>
+        <parameter type-id='19c2251e' name='major' filepath='drivers/media/mc/mc-entity.c' line='936' column='1'/>
+        <parameter type-id='19c2251e' name='minor' filepath='drivers/media/mc/mc-entity.c' line='936' column='1'/>
+        <return type-id='8114c6c9'/>
+      </function-decl>
+      <function-decl name='media_devnode_remove' mangled-name='media_devnode_remove' filepath='drivers/media/mc/mc-entity.c' line='954' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_devnode_remove'>
+        <parameter type-id='8114c6c9' name='devnode' filepath='drivers/media/mc/mc-entity.c' line='954' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='media_remove_intf_links' mangled-name='media_remove_intf_links' filepath='drivers/media/mc/mc-entity.c' line='1016' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_remove_intf_links'>
+        <parameter type-id='afe1ccd7' name='intf' filepath='drivers/media/mc/mc-entity.c' line='1016' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='media_create_intf_link' mangled-name='media_create_intf_link' filepath='drivers/media/mc/mc-entity.c' line='962' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_create_intf_link'>
+        <parameter type-id='19e05b5f' name='entity' filepath='drivers/media/mc/mc-entity.c' line='962' column='1'/>
+        <parameter type-id='afe1ccd7' name='intf' filepath='drivers/media/mc/mc-entity.c' line='963' column='1'/>
+        <parameter type-id='19c2251e' name='flags' filepath='drivers/media/mc/mc-entity.c' line='964' column='1'/>
+        <return type-id='b4de78ea'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/media/rc/rc-ir-raw.c' language='LANG_C89'>
+      <class-decl name='ir_raw_timings_manchester' size-in-bits='160' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='200' column='1' id='095cd8ee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='leader_pulse' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='leader_space' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clock' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='invert' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='trailer_space' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='205' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ir_raw_timings_pd' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='250' column='1' id='e5be2360'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header_pulse' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='header_space' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bit_pulse' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bit_space' type-id='0d532ec1' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='trailer_pulse' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='trailer_space' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='msb_first' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='257' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ir_raw_timings_pl' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='272' column='1' id='edbe2ff8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header_pulse' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bit_space' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bit_pulse' type-id='0d532ec1' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='trailer_space' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='msb_first' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='277' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ir_raw_handler' size-in-bits='512' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='33' column='1' id='f7b43f0c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='protocols' type-id='91ce1af9' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='decode' type-id='ddcee1af' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='encode' type-id='9bf2f36c' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='carrier' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='min_timeout' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='raw_register' type-id='7c07671a' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='raw_unregister' type-id='7c07671a' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='095cd8ee' const='yes' id='50f7224d'/>
+      <pointer-type-def type-id='50f7224d' size-in-bits='64' id='dc0b2825'/>
+      <qualified-type-def type-id='e5be2360' const='yes' id='1e0de7fb'/>
+      <pointer-type-def type-id='1e0de7fb' size-in-bits='64' id='20e3ee03'/>
+      <qualified-type-def type-id='edbe2ff8' const='yes' id='160ddb63'/>
+      <pointer-type-def type-id='160ddb63' size-in-bits='64' id='00d033eb'/>
+      <pointer-type-def type-id='3e570d92' size-in-bits='64' id='9bf2f36c'/>
+      <pointer-type-def type-id='e5b46beb' size-in-bits='64' id='ddcee1af'/>
+      <pointer-type-def type-id='4a06e68e' size-in-bits='64' id='2cdd142c'/>
+      <pointer-type-def type-id='f7b43f0c' size-in-bits='64' id='55cfdcaa'/>
+      <function-decl name='ir_raw_gen_manchester' mangled-name='ir_raw_gen_manchester' filepath='drivers/media/rc/rc-ir-raw.c' line='318' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ir_raw_gen_manchester'>
+        <parameter type-id='2cdd142c' name='ev' filepath='drivers/media/rc/rc-ir-raw.c' line='318' column='1'/>
+        <parameter type-id='f0981eeb' name='max' filepath='drivers/media/rc/rc-ir-raw.c' line='318' column='1'/>
+        <parameter type-id='dc0b2825' name='timings' filepath='drivers/media/rc/rc-ir-raw.c' line='319' column='1'/>
+        <parameter type-id='f0981eeb' name='n' filepath='drivers/media/rc/rc-ir-raw.c' line='320' column='1'/>
+        <parameter type-id='91ce1af9' name='data' filepath='drivers/media/rc/rc-ir-raw.c' line='320' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ir_raw_gen_pd' mangled-name='ir_raw_gen_pd' filepath='drivers/media/rc/rc-ir-raw.c' line='400' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ir_raw_gen_pd'>
+        <parameter type-id='2cdd142c' name='ev' filepath='drivers/media/rc/rc-ir-raw.c' line='400' column='1'/>
+        <parameter type-id='f0981eeb' name='max' filepath='drivers/media/rc/rc-ir-raw.c' line='400' column='1'/>
+        <parameter type-id='20e3ee03' name='timings' filepath='drivers/media/rc/rc-ir-raw.c' line='401' column='1'/>
+        <parameter type-id='f0981eeb' name='n' filepath='drivers/media/rc/rc-ir-raw.c' line='402' column='1'/>
+        <parameter type-id='91ce1af9' name='data' filepath='drivers/media/rc/rc-ir-raw.c' line='402' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ir_raw_gen_pl' mangled-name='ir_raw_gen_pl' filepath='drivers/media/rc/rc-ir-raw.c' line='459' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ir_raw_gen_pl'>
+        <parameter type-id='2cdd142c' name='ev' filepath='drivers/media/rc/rc-ir-raw.c' line='459' column='1'/>
+        <parameter type-id='f0981eeb' name='max' filepath='drivers/media/rc/rc-ir-raw.c' line='459' column='1'/>
+        <parameter type-id='00d033eb' name='timings' filepath='drivers/media/rc/rc-ir-raw.c' line='460' column='1'/>
+        <parameter type-id='f0981eeb' name='n' filepath='drivers/media/rc/rc-ir-raw.c' line='461' column='1'/>
+        <parameter type-id='91ce1af9' name='data' filepath='drivers/media/rc/rc-ir-raw.c' line='461' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ir_raw_handler_register' mangled-name='ir_raw_handler_register' filepath='drivers/media/rc/rc-ir-raw.c' line='692' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ir_raw_handler_register'>
+        <parameter type-id='55cfdcaa' name='ir_raw_handler' filepath='drivers/media/rc/rc-ir-raw.c' line='692' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ir_raw_handler_unregister' mangled-name='ir_raw_handler_unregister' filepath='drivers/media/rc/rc-ir-raw.c' line='703' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ir_raw_handler_unregister'>
+        <parameter type-id='55cfdcaa' name='ir_raw_handler' filepath='drivers/media/rc/rc-ir-raw.c' line='703' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='3e570d92'>
+        <parameter type-id='17862576'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='4a06e68e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e5b46beb'>
+        <parameter type-id='75ae4804'/>
+        <parameter type-id='39486498'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/media/rc/rc-main.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='8ff9530e' size-in-bits='320' id='9f18d529'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='39486498' size-in-bits='32768' id='55a95556'>
+        <subrange length='512' type-id='7ff19f0f' id='c11630dd'/>
+      </array-type-def>
+      <class-decl name='rc_map_list' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/rc-map.h' line='124' column='1' id='cadfefb8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/rc-map.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='9ab3364f' visibility='default' filepath='include/media/rc-map.h' line='126' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rc_map' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/rc-map.h' line='108' column='1' id='9ab3364f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scan' type-id='57909d12' visibility='default' filepath='include/media/rc-map.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/media/rc-map.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/media/rc-map.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='alloc' type-id='f0981eeb' visibility='default' filepath='include/media/rc-map.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rc_proto' type-id='17862576' visibility='default' filepath='include/media/rc-map.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/media/rc-map.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/media/rc-map.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rc_map_table' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/rc-map.h' line='91' column='1' id='ae855994'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scancode' type-id='19c2251e' visibility='default' filepath='include/media/rc-map.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='keycode' type-id='19c2251e' visibility='default' filepath='include/media/rc-map.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='rc_proto' filepath='include/uapi/linux/lirc.h' line='200' column='1' id='17862576'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RC_PROTO_UNKNOWN' value='0'/>
+        <enumerator name='RC_PROTO_OTHER' value='1'/>
+        <enumerator name='RC_PROTO_RC5' value='2'/>
+        <enumerator name='RC_PROTO_RC5X_20' value='3'/>
+        <enumerator name='RC_PROTO_RC5_SZ' value='4'/>
+        <enumerator name='RC_PROTO_JVC' value='5'/>
+        <enumerator name='RC_PROTO_SONY12' value='6'/>
+        <enumerator name='RC_PROTO_SONY15' value='7'/>
+        <enumerator name='RC_PROTO_SONY20' value='8'/>
+        <enumerator name='RC_PROTO_NEC' value='9'/>
+        <enumerator name='RC_PROTO_NECX' value='10'/>
+        <enumerator name='RC_PROTO_NEC32' value='11'/>
+        <enumerator name='RC_PROTO_SANYO' value='12'/>
+        <enumerator name='RC_PROTO_MCIR2_KBD' value='13'/>
+        <enumerator name='RC_PROTO_MCIR2_MSE' value='14'/>
+        <enumerator name='RC_PROTO_RC6_0' value='15'/>
+        <enumerator name='RC_PROTO_RC6_6A_20' value='16'/>
+        <enumerator name='RC_PROTO_RC6_6A_24' value='17'/>
+        <enumerator name='RC_PROTO_RC6_6A_32' value='18'/>
+        <enumerator name='RC_PROTO_RC6_MCE' value='19'/>
+        <enumerator name='RC_PROTO_SHARP' value='20'/>
+        <enumerator name='RC_PROTO_XMP' value='21'/>
+        <enumerator name='RC_PROTO_CEC' value='22'/>
+        <enumerator name='RC_PROTO_IMON' value='23'/>
+        <enumerator name='RC_PROTO_RCMM12' value='24'/>
+        <enumerator name='RC_PROTO_RCMM24' value='25'/>
+        <enumerator name='RC_PROTO_RCMM32' value='26'/>
+        <enumerator name='RC_PROTO_XBOX_DVD' value='27'/>
+      </enum-decl>
+      <class-decl name='rc_dev' size-in-bits='20480' is-struct='yes' visibility='default' filepath='include/media/rc-core.h' line='162' column='1' id='7a35a8fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/media/rc-core.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='managed_alloc' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='sysfs_groups' type-id='9f18d529' visibility='default' filepath='include/media/rc-core.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='device_name' type-id='80f4b756' visibility='default' filepath='include/media/rc-core.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='input_phys' type-id='80f4b756' visibility='default' filepath='include/media/rc-core.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='input_id' type-id='d99ed569' visibility='default' filepath='include/media/rc-core.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='driver_name' type-id='80f4b756' visibility='default' filepath='include/media/rc-core.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='map_name' type-id='80f4b756' visibility='default' filepath='include/media/rc-core.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='rc_map' type-id='9ab3364f' visibility='default' filepath='include/media/rc-core.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/media/rc-core.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='minor' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='raw' type-id='696ed472' visibility='default' filepath='include/media/rc-core.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='input_dev' type-id='74b427eb' visibility='default' filepath='include/media/rc-core.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='driver_type' type-id='d4dbe3db' visibility='default' filepath='include/media/rc-core.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8864'>
+          <var-decl name='idle' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8872'>
+          <var-decl name='encode_wakeup' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='allowed_protocols' type-id='91ce1af9' visibility='default' filepath='include/media/rc-core.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='enabled_protocols' type-id='91ce1af9' visibility='default' filepath='include/media/rc-core.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='allowed_wakeup_protocols' type-id='91ce1af9' visibility='default' filepath='include/media/rc-core.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='wakeup_protocol' type-id='17862576' visibility='default' filepath='include/media/rc-core.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9120'>
+          <var-decl name='scancode_filter' type-id='f3a6417e' visibility='default' filepath='include/media/rc-core.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9184'>
+          <var-decl name='scancode_wakeup_filter' type-id='f3a6417e' visibility='default' filepath='include/media/rc-core.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9248'>
+          <var-decl name='scancode_mask' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='users' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/rc-core.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='keylock' type-id='fb4018a0' visibility='default' filepath='include/media/rc-core.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9440'>
+          <var-decl name='keypressed' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='keyup_jiffies' type-id='7359adad' visibility='default' filepath='include/media/rc-core.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='timer_keyup' type-id='abe41e67' visibility='default' filepath='include/media/rc-core.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='timer_repeat' type-id='abe41e67' visibility='default' filepath='include/media/rc-core.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='last_keycode' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10464'>
+          <var-decl name='last_protocol' type-id='17862576' visibility='default' filepath='include/media/rc-core.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='last_scancode' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10528'>
+          <var-decl name='last_toggle' type-id='f9b06939' visibility='default' filepath='include/media/rc-core.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='timeout' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10592'>
+          <var-decl name='min_timeout' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='max_timeout' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10656'>
+          <var-decl name='rx_resolution' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='tx_resolution' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='lirc_dev' type-id='66e487eb' visibility='default' filepath='include/media/rc-core.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18112'>
+          <var-decl name='lirc_cdev' type-id='22f86352' visibility='default' filepath='include/media/rc-core.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19200'>
+          <var-decl name='gap_start' type-id='fbc017ef' visibility='default' filepath='include/media/rc-core.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19264'>
+          <var-decl name='gap_duration' type-id='91ce1af9' visibility='default' filepath='include/media/rc-core.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='gap' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19360'>
+          <var-decl name='lirc_fh_lock' type-id='fb4018a0' visibility='default' filepath='include/media/rc-core.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19392'>
+          <var-decl name='lirc_fh' type-id='72f469ec' visibility='default' filepath='include/media/rc-core.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19520'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19584'>
+          <var-decl name='change_protocol' type-id='a113447f' visibility='default' filepath='include/media/rc-core.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19648'>
+          <var-decl name='open' type-id='7c07671a' visibility='default' filepath='include/media/rc-core.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19712'>
+          <var-decl name='close' type-id='35513fbd' visibility='default' filepath='include/media/rc-core.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19776'>
+          <var-decl name='s_tx_mask' type-id='27b80621' visibility='default' filepath='include/media/rc-core.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='s_tx_carrier' type-id='27b80621' visibility='default' filepath='include/media/rc-core.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19904'>
+          <var-decl name='s_tx_duty_cycle' type-id='27b80621' visibility='default' filepath='include/media/rc-core.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19968'>
+          <var-decl name='s_rx_carrier_range' type-id='03935b08' visibility='default' filepath='include/media/rc-core.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='tx_ir' type-id='86089bb2' visibility='default' filepath='include/media/rc-core.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20096'>
+          <var-decl name='s_idle' type-id='7e6d7408' visibility='default' filepath='include/media/rc-core.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20160'>
+          <var-decl name='s_learning_mode' type-id='0b603cc1' visibility='default' filepath='include/media/rc-core.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20224'>
+          <var-decl name='s_carrier_report' type-id='0b603cc1' visibility='default' filepath='include/media/rc-core.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20288'>
+          <var-decl name='s_filter' type-id='a479b17b' visibility='default' filepath='include/media/rc-core.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20352'>
+          <var-decl name='s_wakeup_filter' type-id='a479b17b' visibility='default' filepath='include/media/rc-core.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20416'>
+          <var-decl name='s_timeout' type-id='efba8d40' visibility='default' filepath='include/media/rc-core.h' line='227' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ir_raw_event_ctrl' size-in-bits='36544' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='48' column='1' id='986a13e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='thread' type-id='f23e2572' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='kfifo' type-id='56fcb682' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33152'>
+          <var-decl name='last_event' type-id='fbc017ef' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33216'>
+          <var-decl name='dev' type-id='75ae4804' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33280'>
+          <var-decl name='edge_spinlock' type-id='fb4018a0' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33344'>
+          <var-decl name='edge_handle' type-id='abe41e67' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33792'>
+          <var-decl name='prev_ev' type-id='39486498' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33856'>
+          <var-decl name='this_ev' type-id='39486498' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33920'>
+          <var-decl name='bpf_sample' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33984'>
+          <var-decl name='progs' type-id='380c7edc' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34048'>
+          <var-decl name='nec' type-id='9f72ab96' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34176'>
+          <var-decl name='rc5' type-id='9f1c8f9e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34304'>
+          <var-decl name='rc6' type-id='ef26ce47' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34496'>
+          <var-decl name='sony' type-id='bec1f309' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34592'>
+          <var-decl name='jvc' type-id='5f32c669' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34752'>
+          <var-decl name='sanyo' type-id='8474b1f2' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34880'>
+          <var-decl name='sharp' type-id='556cd788' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='35008'>
+          <var-decl name='mce_kbd' type-id='d7c6758b' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='35712'>
+          <var-decl name='xmp' type-id='01edcb75' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36288'>
+          <var-decl name='imon' type-id='099324f9' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36448'>
+          <var-decl name='rcmm' type-id='b68be393' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='32960' is-struct='yes' is-anonymous='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1' id='56fcb682'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='4dca854a' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='buf' type-id='55a95556' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1' id='4dca854a'>
+        <data-member access='private'>
+          <var-decl name='kfifo' type-id='bbbc6c1e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='type' type-id='4a06e68e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='const_type' type-id='528735d1' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rectype' type-id='4209d6b5' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ptr' type-id='4a06e68e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ptr_const' type-id='528735d1' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='ir_raw_event' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/rc-core.h' line='299' column='1' id='39486498'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='671d516a' visibility='default' filepath='include/media/rc-core.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='duty_cycle' type-id='f9b06939' visibility='default' filepath='include/media/rc-core.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='pulse' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='reset' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='carrier_report' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='309' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/media/rc-core.h' line='300' column='1' id='671d516a'>
+        <data-member access='private'>
+          <var-decl name='duration' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='carrier' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='302' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='nec_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='67' column='1' id='9f72ab96'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='is_nec_x' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='necx_repeat' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rc5_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='74' column='1' id='9f1c8f9e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='is_rc5x' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rc6_dec' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='80' column='1' id='ef26ce47'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='header' type-id='f9b06939' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='body' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='toggle' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='wanted_bits' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sony_dec' size-in-bits='96' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='88' column='1' id='bec1f309'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='jvc_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='93' column='1' id='5f32c669'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bits' type-id='1dc6a898' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='old_bits' type-id='1dc6a898' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='first' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='toggle' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sanyo_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='101' column='1' id='8474b1f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bits' type-id='91ce1af9' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sharp_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='106' column='1' id='556cd788'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pulse_len' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mce_kbd_dec' size-in-bits='704' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='112' column='1' id='d7c6758b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='keylock' type-id='fb4018a0' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_timeout' type-id='abe41e67' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='header' type-id='f9b06939' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='body' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='wanted_bits' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='120' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xmp_dec' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='122' column='1' id='01edcb75'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='durations' type-id='02fdec64' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='imon_dec' size-in-bits='160' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='127' column='1' id='099324f9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last_chk' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bits' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='stick_keyboard' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcmm_dec' size-in-bits='96' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='134' column='1' id='b68be393'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='rc_driver_type' filepath='include/media/rc-core.h' line='27' column='1' id='d4dbe3db'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RC_DRIVER_SCANCODE' value='0'/>
+        <enumerator name='RC_DRIVER_IR_RAW' value='1'/>
+        <enumerator name='RC_DRIVER_IR_RAW_TX' value='2'/>
+      </enum-decl>
+      <class-decl name='rc_scancode_filter' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/rc-core.h' line='38' column='1' id='f3a6417e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mask' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lirc_scancode' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/lirc.h' line='155' column='1' id='06b530b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timestamp' type-id='d3130597' visibility='default' filepath='include/uapi/linux/lirc.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/uapi/linux/lirc.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='rc_proto' type-id='d315442e' visibility='default' filepath='include/uapi/linux/lirc.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='keycode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/lirc.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='scancode' type-id='d3130597' visibility='default' filepath='include/uapi/linux/lirc.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e84913bd' size-in-bits='64' id='4209d6b5'/>
+      <qualified-type-def type-id='39486498' const='yes' id='f28519a1'/>
+      <pointer-type-def type-id='f28519a1' size-in-bits='64' id='528735d1'/>
+      <pointer-type-def type-id='cd5ad9b0' size-in-bits='64' id='7c07671a'/>
+      <pointer-type-def type-id='05cdb97d' size-in-bits='64' id='0b603cc1'/>
+      <pointer-type-def type-id='51b5f0bf' size-in-bits='64' id='a479b17b'/>
+      <pointer-type-def type-id='6e44244d' size-in-bits='64' id='27b80621'/>
+      <pointer-type-def type-id='ec263c6e' size-in-bits='64' id='03935b08'/>
+      <pointer-type-def type-id='d0615a9b' size-in-bits='64' id='a113447f'/>
+      <pointer-type-def type-id='74912d6e' size-in-bits='64' id='efba8d40'/>
+      <pointer-type-def type-id='a82fc150' size-in-bits='64' id='86089bb2'/>
+      <pointer-type-def type-id='39486498' size-in-bits='64' id='4a06e68e'/>
+      <pointer-type-def type-id='986a13e4' size-in-bits='64' id='696ed472'/>
+      <pointer-type-def type-id='db6d90a1' size-in-bits='64' id='f87a8ad1'/>
+      <pointer-type-def type-id='06b530b2' size-in-bits='64' id='612cbc00'/>
+      <pointer-type-def type-id='7a35a8fe' size-in-bits='64' id='75ae4804'/>
+      <pointer-type-def type-id='cadfefb8' size-in-bits='64' id='31d2664e'/>
+      <pointer-type-def type-id='ae855994' size-in-bits='64' id='57909d12'/>
+      <pointer-type-def type-id='f3a6417e' size-in-bits='64' id='77da1114'/>
+      <pointer-type-def type-id='25048781' size-in-bits='64' id='35513fbd'/>
+      <pointer-type-def type-id='437aead6' size-in-bits='64' id='7e6d7408'/>
+      <function-decl name='rc_map_register' mangled-name='rc_map_register' filepath='drivers/media/rc/rc-main.c' line='135' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rc_map_register'>
+        <parameter type-id='31d2664e' name='map' filepath='drivers/media/rc/rc-main.c' line='135' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rc_map_unregister' mangled-name='rc_map_unregister' filepath='drivers/media/rc/rc-main.c' line='144' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rc_map_unregister'>
+        <parameter type-id='31d2664e' name='map' filepath='drivers/media/rc/rc-main.c' line='144' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='led_trigger_event' mangled-name='led_trigger_event' filepath='include/linux/leds.h' line='377' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_trigger_event'>
+        <parameter type-id='db6d90a1'/>
+        <parameter type-id='fa598f35'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rc_repeat' mangled-name='rc_repeat' filepath='drivers/media/rc/rc-main.c' line='705' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rc_repeat'>
+        <parameter type-id='75ae4804' name='dev' filepath='drivers/media/rc/rc-main.c' line='705' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ir_lirc_scancode_event' mangled-name='ir_lirc_scancode_event' filepath='drivers/media/rc/rc-core-priv.h' line='304' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ir_lirc_scancode_event'>
+        <parameter type-id='75ae4804'/>
+        <parameter type-id='612cbc00'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rc_keydown' mangled-name='rc_keydown' filepath='drivers/media/rc/rc-main.c' line='812' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rc_keydown'>
+        <parameter type-id='75ae4804' name='dev' filepath='drivers/media/rc/rc-main.c' line='812' column='1'/>
+        <parameter type-id='17862576' name='protocol' filepath='drivers/media/rc/rc-main.c' line='812' column='1'/>
+        <parameter type-id='19c2251e' name='scancode' filepath='drivers/media/rc/rc-main.c' line='812' column='1'/>
+        <parameter type-id='f9b06939' name='toggle' filepath='drivers/media/rc/rc-main.c' line='813' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='led_trigger_unregister_simple' mangled-name='led_trigger_unregister_simple' filepath='include/linux/leds.h' line='376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_trigger_unregister_simple'>
+        <parameter type-id='db6d90a1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='led_trigger_register_simple' mangled-name='led_trigger_register_simple' filepath='include/linux/leds.h' line='374' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_trigger_register_simple'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f87a8ad1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='cd5ad9b0'>
+        <parameter type-id='75ae4804'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='05cdb97d'>
+        <parameter type-id='75ae4804'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='51b5f0bf'>
+        <parameter type-id='75ae4804'/>
+        <parameter type-id='77da1114'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6e44244d'>
+        <parameter type-id='75ae4804'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ec263c6e'>
+        <parameter type-id='75ae4804'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d0615a9b'>
+        <parameter type-id='75ae4804'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='74912d6e'>
+        <parameter type-id='75ae4804'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a82fc150'>
+        <parameter type-id='75ae4804'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='25048781'>
+        <parameter type-id='75ae4804' name='dev'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='437aead6'>
+        <parameter type-id='75ae4804'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/media/v4l2-core/v4l2-common.c' language='LANG_C89'>
+      <class-decl name='v4l2_format_info' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/v4l2-common.h' line='486' column='1' id='c151291a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='format' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-common.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pixel_enc' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-common.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='mem_planes' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-common.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='comp_planes' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-common.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='bpp' type-id='931565be' visibility='default' filepath='include/media/v4l2-common.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='hdiv' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-common.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='vdiv' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-common.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='block_w' type-id='931565be' visibility='default' filepath='include/media/v4l2-common.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='block_h' type-id='931565be' visibility='default' filepath='include/media/v4l2-common.h' line='495' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='c151291a' const='yes' id='bccc86df'/>
+      <pointer-type-def type-id='bccc86df' size-in-bits='64' id='2af873af'/>
+      <function-decl name='v4l2_format_info' mangled-name='v4l2_format_info' filepath='drivers/media/v4l2-core/v4l2-common.c' line='235' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_format_info'>
+        <parameter type-id='19c2251e' name='format' filepath='drivers/media/v4l2-core/v4l2-common.c' line='235' column='1'/>
+        <return type-id='2af873af'/>
+      </function-decl>
+      <function-decl name='v4l_bound_align_image' mangled-name='v4l_bound_align_image' filepath='drivers/media/v4l2-core/v4l2-common.c' line='120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l_bound_align_image'>
+        <parameter type-id='f9409001' name='w' filepath='drivers/media/v4l2-core/v4l2-common.c' line='120' column='1'/>
+        <parameter type-id='f0981eeb' name='wmin' filepath='drivers/media/v4l2-core/v4l2-common.c' line='120' column='1'/>
+        <parameter type-id='f0981eeb' name='wmax' filepath='drivers/media/v4l2-core/v4l2-common.c' line='120' column='1'/>
+        <parameter type-id='f0981eeb' name='walign' filepath='drivers/media/v4l2-core/v4l2-common.c' line='121' column='1'/>
+        <parameter type-id='f9409001' name='h' filepath='drivers/media/v4l2-core/v4l2-common.c' line='122' column='1'/>
+        <parameter type-id='f0981eeb' name='hmin' filepath='drivers/media/v4l2-core/v4l2-common.c' line='122' column='1'/>
+        <parameter type-id='f0981eeb' name='hmax' filepath='drivers/media/v4l2-core/v4l2-common.c' line='122' column='1'/>
+        <parameter type-id='f0981eeb' name='halign' filepath='drivers/media/v4l2-core/v4l2-common.c' line='123' column='1'/>
+        <parameter type-id='f0981eeb' name='salign' filepath='drivers/media/v4l2-core/v4l2-common.c' line='123' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/media/v4l2-core/v4l2-ctrls.c' language='LANG_C89'>
+      <class-decl name='v4l2_ctrl_config' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='394' column='1' id='f817de22'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='1086b623' visibility='default' filepath='include/media/v4l2-ctrls.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type_ops' type-id='b076d304' visibility='default' filepath='include/media/v4l2-ctrls.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/media/v4l2-ctrls.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='type' type-id='cf13dc99' visibility='default' filepath='include/media/v4l2-ctrls.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='min' type-id='9b7c55ef' visibility='default' filepath='include/media/v4l2-ctrls.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='max' type-id='9b7c55ef' visibility='default' filepath='include/media/v4l2-ctrls.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='step' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='def' type-id='9b7c55ef' visibility='default' filepath='include/media/v4l2-ctrls.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='p_def' type-id='3f78e6a9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dims' type-id='1c6c0c39' visibility='default' filepath='include/media/v4l2-ctrls.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='elem_size' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='menu_skip_mask' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='qmenu' type-id='13956559' visibility='default' filepath='include/media/v4l2-ctrls.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='qmenu_int' type-id='43ae54cf' visibility='default' filepath='include/media/v4l2-ctrls.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='is_private' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='411' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='f817de22' const='yes' id='a5b2ff47'/>
+      <pointer-type-def type-id='a5b2ff47' size-in-bits='64' id='45c81897'/>
+      <function-decl name='v4l2_ctrl_handler_init_class' mangled-name='v4l2_ctrl_handler_init_class' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2245' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_handler_init_class'>
+        <parameter type-id='2b59fa5e' name='hdl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2245' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_of_controls_hint' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2246' column='1'/>
+        <parameter type-id='a57283f9' name='key' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2247' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2247' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_get_name' mangled-name='v4l2_ctrl_get_name' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='745' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_get_name'>
+        <parameter type-id='19c2251e' name='id' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='745' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_handler_free' mangled-name='v4l2_ctrl_handler_free' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2268' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_handler_free'>
+        <parameter type-id='2b59fa5e' name='hdl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2268' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_find' mangled-name='v4l2_ctrl_find' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_find'>
+        <parameter type-id='2b59fa5e' name='hdl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2376' column='1'/>
+        <parameter type-id='19c2251e' name='id' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2376' column='1'/>
+        <return type-id='4b8b2cf3'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_new_custom' mangled-name='v4l2_ctrl_new_custom' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2663' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_new_custom'>
+        <parameter type-id='2b59fa5e' name='hdl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2663' column='1'/>
+        <parameter type-id='45c81897' name='cfg' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2664' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2664' column='1'/>
+        <return type-id='4b8b2cf3'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_new_std' mangled-name='v4l2_ctrl_new_std' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2707' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_new_std'>
+        <parameter type-id='2b59fa5e' name='hdl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2707' column='1'/>
+        <parameter type-id='1086b623' name='ops' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2708' column='1'/>
+        <parameter type-id='19c2251e' name='id' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2709' column='1'/>
+        <parameter type-id='9b7c55ef' name='min' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2709' column='1'/>
+        <parameter type-id='9b7c55ef' name='max' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2709' column='1'/>
+        <parameter type-id='91ce1af9' name='step' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2709' column='1'/>
+        <parameter type-id='9b7c55ef' name='def' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2709' column='1'/>
+        <return type-id='4b8b2cf3'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_new_std_menu' mangled-name='v4l2_ctrl_new_std_menu' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2729' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_new_std_menu'>
+        <parameter type-id='2b59fa5e' name='hdl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2729' column='1'/>
+        <parameter type-id='1086b623' name='ops' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2730' column='1'/>
+        <parameter type-id='19c2251e' name='id' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2731' column='1'/>
+        <parameter type-id='f9b06939' name='_max' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2731' column='1'/>
+        <parameter type-id='91ce1af9' name='mask' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2731' column='1'/>
+        <parameter type-id='f9b06939' name='_def' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2731' column='1'/>
+        <return type-id='4b8b2cf3'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_new_int_menu' mangled-name='v4l2_ctrl_new_int_menu' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2816' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_new_int_menu'>
+        <parameter type-id='2b59fa5e' name='hdl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2816' column='1'/>
+        <parameter type-id='1086b623' name='ops' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2817' column='1'/>
+        <parameter type-id='19c2251e' name='id' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2818' column='1'/>
+        <parameter type-id='f9b06939' name='_max' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2818' column='1'/>
+        <parameter type-id='f9b06939' name='_def' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2818' column='1'/>
+        <parameter type-id='43ae54cf' name='qmenu_int' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2818' column='1'/>
+        <return type-id='4b8b2cf3'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_cluster' mangled-name='v4l2_ctrl_cluster' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2897' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_cluster'>
+        <parameter type-id='f0981eeb' name='ncontrols' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2897' column='1'/>
+        <parameter type-id='c517999b' name='controls' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2897' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_handler_setup' mangled-name='v4l2_ctrl_handler_setup' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='3081' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_handler_setup'>
+        <parameter type-id='2b59fa5e' name='hdl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='3081' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_g_ctrl' mangled-name='v4l2_ctrl_g_ctrl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='3797' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_g_ctrl'>
+        <parameter type-id='4b8b2cf3' name='ctrl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='3797' column='1'/>
+        <return type-id='a7832498'/>
+      </function-decl>
+      <function-decl name='__v4l2_ctrl_s_ctrl' mangled-name='__v4l2_ctrl_s_ctrl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4218' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__v4l2_ctrl_s_ctrl'>
+        <parameter type-id='4b8b2cf3' name='ctrl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4218' column='1'/>
+        <parameter type-id='a7832498' name='val' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4218' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__v4l2_ctrl_modify_range' mangled-name='__v4l2_ctrl_modify_range' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4441' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__v4l2_ctrl_modify_range'>
+        <parameter type-id='4b8b2cf3' name='ctrl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4441' column='1'/>
+        <parameter type-id='9b7c55ef' name='min' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4442' column='1'/>
+        <parameter type-id='9b7c55ef' name='max' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4442' column='1'/>
+        <parameter type-id='91ce1af9' name='step' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4442' column='1'/>
+        <parameter type-id='9b7c55ef' name='def' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4442' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_replace' mangled-name='v4l2_ctrl_replace' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4535' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_replace'>
+        <parameter type-id='a5c94ccc' name='old' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4535' column='1'/>
+        <parameter type-id='52009e4b' name='new' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4535' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_merge' mangled-name='v4l2_ctrl_merge' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4544' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_merge'>
+        <parameter type-id='52009e4b' name='old' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4544' column='1'/>
+        <parameter type-id='a5c94ccc' name='new' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4544' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_log_status' mangled-name='v4l2_ctrl_log_status' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4558' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_log_status'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4558' column='1'/>
+        <parameter type-id='eaa32e2f' name='fh' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4558' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_subscribe_event' mangled-name='v4l2_ctrl_subscribe_event' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4570' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_subscribe_event'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4570' column='1'/>
+        <parameter type-id='d8c85275' name='sub' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4571' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_subdev_subscribe_event' mangled-name='v4l2_ctrl_subdev_subscribe_event' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4579' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_subdev_subscribe_event'>
+        <parameter type-id='f5438ac7' name='sd' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4579' column='1'/>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4579' column='1'/>
+        <parameter type-id='8edac644' name='sub' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4580' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='d238557f' size-in-bits='64' id='43ae54cf'/>
+      <pointer-type-def type-id='0645931b' size-in-bits='64' id='1086b623'/>
+      <pointer-type-def type-id='d26ed346' size-in-bits='64' id='b076d304'/>
+      <pointer-type-def type-id='cd1fc343' size-in-bits='64' id='52009e4b'/>
+      <pointer-type-def type-id='ef7d00fd' size-in-bits='64' id='d8c85275'/>
+      <enum-decl name='v4l2_ctrl_type' filepath='include/uapi/linux/videodev2.h' line='1718' column='1' id='cf13dc99'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_CTRL_TYPE_INTEGER' value='1'/>
+        <enumerator name='V4L2_CTRL_TYPE_BOOLEAN' value='2'/>
+        <enumerator name='V4L2_CTRL_TYPE_MENU' value='3'/>
+        <enumerator name='V4L2_CTRL_TYPE_BUTTON' value='4'/>
+        <enumerator name='V4L2_CTRL_TYPE_INTEGER64' value='5'/>
+        <enumerator name='V4L2_CTRL_TYPE_CTRL_CLASS' value='6'/>
+        <enumerator name='V4L2_CTRL_TYPE_STRING' value='7'/>
+        <enumerator name='V4L2_CTRL_TYPE_BITMASK' value='8'/>
+        <enumerator name='V4L2_CTRL_TYPE_INTEGER_MENU' value='9'/>
+        <enumerator name='V4L2_CTRL_COMPOUND_TYPES' value='256'/>
+        <enumerator name='V4L2_CTRL_TYPE_U8' value='256'/>
+        <enumerator name='V4L2_CTRL_TYPE_U16' value='257'/>
+        <enumerator name='V4L2_CTRL_TYPE_U32' value='258'/>
+        <enumerator name='V4L2_CTRL_TYPE_AREA' value='262'/>
+      </enum-decl>
+      <union-decl name='v4l2_ctrl_ptr' size-in-bits='64' visibility='default' filepath='include/media/v4l2-ctrls.h' line='61' column='1' id='3f78e6a9'>
+        <data-member access='private'>
+          <var-decl name='p_s32' type-id='9f2cce4b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_s64' type-id='842ac8d6' visibility='default' filepath='include/media/v4l2-ctrls.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_u8' type-id='8bff8096' visibility='default' filepath='include/media/v4l2-ctrls.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_u16' type-id='26d4d46f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_u32' type-id='f9409001' visibility='default' filepath='include/media/v4l2-ctrls.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_char' type-id='26a90f95' visibility='default' filepath='include/media/v4l2-ctrls.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_mpeg2_slice_params' type-id='48bc1523' visibility='default' filepath='include/media/v4l2-ctrls.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_mpeg2_quantization' type-id='fa7d167b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_fwht_params' type-id='efba361c' visibility='default' filepath='include/media/v4l2-ctrls.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_h264_sps' type-id='b9348c47' visibility='default' filepath='include/media/v4l2-ctrls.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_h264_pps' type-id='91e3ab68' visibility='default' filepath='include/media/v4l2-ctrls.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_h264_scaling_matrix' type-id='f7e7b3e8' visibility='default' filepath='include/media/v4l2-ctrls.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_h264_slice_params' type-id='0541bcde' visibility='default' filepath='include/media/v4l2-ctrls.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_h264_decode_params' type-id='47cb2abc' visibility='default' filepath='include/media/v4l2-ctrls.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_vp8_frame_header' type-id='e26652e6' visibility='default' filepath='include/media/v4l2-ctrls.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_hevc_sps' type-id='112f0343' visibility='default' filepath='include/media/v4l2-ctrls.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_hevc_pps' type-id='f9de3b94' visibility='default' filepath='include/media/v4l2-ctrls.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_hevc_slice_params' type-id='2948bd22' visibility='default' filepath='include/media/v4l2-ctrls.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_area' type-id='26385187' visibility='default' filepath='include/media/v4l2-ctrls.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_const' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='82' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='dbc7d793' size-in-bits='64' id='4b8b2cf3'/>
+      <pointer-type-def type-id='4b8b2cf3' size-in-bits='64' id='c517999b'/>
+      <pointer-type-def type-id='d6130048' size-in-bits='64' id='2b59fa5e'/>
+      <pointer-type-def type-id='967c1c06' size-in-bits='64' id='a5c94ccc'/>
+      <pointer-type-def type-id='1251351e' size-in-bits='64' id='8edac644'/>
+      <pointer-type-def type-id='53422e64' size-in-bits='64' id='b7db9582'/>
+      <pointer-type-def type-id='59eccc2f' size-in-bits='64' id='f5438ac7'/>
+      <qualified-type-def type-id='9b7c55ef' const='yes' id='d238557f'/>
+      <qualified-type-def type-id='205c2e40' const='yes' id='0645931b'/>
+      <qualified-type-def type-id='b154eaef' const='yes' id='d26ed346'/>
+      <qualified-type-def type-id='967c1c06' const='yes' id='cd1fc343'/>
+      <qualified-type-def type-id='1251351e' const='yes' id='ef7d00fd'/>
+      <pointer-type-def type-id='9b7c55ef' size-in-bits='64' id='842ac8d6'/>
+      <class-decl name='v4l2_ctrl' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='224' column='1' id='dbc7d793'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ev_subs' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='handler' type-id='2b59fa5e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cluster' type-id='c517999b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ncontrols' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='done' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='is_new' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='has_changed' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='is_private' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='is_auto' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='is_int' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='is_string' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='is_ptr' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='is_array' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='has_volatiles' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='call_notify' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='manual_mode_value' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='1086b623' visibility='default' filepath='include/media/v4l2-ctrls.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='type_ops' type-id='b076d304' visibility='default' filepath='include/media/v4l2-ctrls.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/media/v4l2-ctrls.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='type' type-id='cf13dc99' visibility='default' filepath='include/media/v4l2-ctrls.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='minimum' type-id='9b7c55ef' visibility='default' filepath='include/media/v4l2-ctrls.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='maximum' type-id='9b7c55ef' visibility='default' filepath='include/media/v4l2-ctrls.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='default_value' type-id='9b7c55ef' visibility='default' filepath='include/media/v4l2-ctrls.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='elems' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='elem_size' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dims' type-id='1c6c0c39' visibility='default' filepath='include/media/v4l2-ctrls.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nr_of_dims' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='' type-id='b91b9370' visibility='default' filepath='include/media/v4l2-ctrls.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='' type-id='87415f3a' visibility='default' filepath='include/media/v4l2-ctrls.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/v4l2-ctrls.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='val' type-id='a7832498' visibility='default' filepath='include/media/v4l2-ctrls.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='cur' type-id='b0ee3ba9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='p_def' type-id='3f78e6a9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='p_new' type-id='3f78e6a9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='p_cur' type-id='3f78e6a9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='273' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_handler' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='346' column='1' id='d6130048'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_lock' type-id='925167dc' visibility='default' filepath='include/media/v4l2-ctrls.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='e0ea832a' visibility='default' filepath='include/media/v4l2-ctrls.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ctrls' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ctrl_refs' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cached' type-id='9f3a0131' visibility='default' filepath='include/media/v4l2-ctrls.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='buckets' type-id='c34fbd81' visibility='default' filepath='include/media/v4l2-ctrls.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='notify' type-id='7ec3cb1e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='notify_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_of_buckets' type-id='1dc6a898' visibility='default' filepath='include/media/v4l2-ctrls.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='request_is_queued' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-ctrls.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='requests' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='requests_queued' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='req_obj' type-id='a5b7e4fd' visibility='default' filepath='include/media/v4l2-ctrls.h' line='360' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2331' column='1' id='967c1c06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='u' type-id='454ee2bf' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='timestamp' type-id='a9c79a1f' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='reserved' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2345' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event_subscription' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2351' column='1' id='1251351e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='83a5454e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2355' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_fh' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/media/v4l2-fh.h' line='42' column='1' id='53422e64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-fh.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vdev' type-id='798c29b7' visibility='default' filepath='include/media/v4l2-fh.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ctrl_handler' type-id='2b59fa5e' visibility='default' filepath='include/media/v4l2-fh.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='prio' type-id='8b60a0b9' visibility='default' filepath='include/media/v4l2-fh.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/media/v4l2-fh.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='subscribe_lock' type-id='925167dc' visibility='default' filepath='include/media/v4l2-fh.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='subscribed' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-fh.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='available' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-fh.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='navailable' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-fh.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='sequence' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-fh.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='m2m_ctx' type-id='2c7f1dc4' visibility='default' filepath='include/media/v4l2-fh.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='848' column='1' id='59eccc2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entity' type-id='889856f7' visibility='default' filepath='include/media/v4l2-subdev.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-subdev.h' line='852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/media/v4l2-subdev.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='owner_v4l2_dev' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-subdev.h' line='854' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='v4l2_dev' type-id='ddfb71fa' visibility='default' filepath='include/media/v4l2-subdev.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ops' type-id='040770fb' visibility='default' filepath='include/media/v4l2-subdev.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='internal_ops' type-id='2553c323' visibility='default' filepath='include/media/v4l2-subdev.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ctrl_handler' type-id='2b59fa5e' visibility='default' filepath='include/media/v4l2-subdev.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/media/v4l2-subdev.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='grp_id' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='dev_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-subdev.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='host_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-subdev.h' line='863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='devnode' type-id='798c29b7' visibility='default' filepath='include/media/v4l2-subdev.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/media/v4l2-subdev.h' line='865' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/media/v4l2-subdev.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='async_list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-subdev.h' line='867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='asd' type-id='707be29c' visibility='default' filepath='include/media/v4l2-subdev.h' line='868' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='notifier' type-id='e1a56841' visibility='default' filepath='include/media/v4l2-subdev.h' line='869' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='subdev_notifier' type-id='e1a56841' visibility='default' filepath='include/media/v4l2-subdev.h' line='870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='pdata' type-id='616ec7d2' visibility='default' filepath='include/media/v4l2-subdev.h' line='871' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='baab64cf' size-in-bits='64' id='26385187'/>
+      <pointer-type-def type-id='fcc0eea6' size-in-bits='64' id='efba361c'/>
+      <pointer-type-def type-id='4aef34b6' size-in-bits='64' id='47cb2abc'/>
+      <pointer-type-def type-id='ca2e9cda' size-in-bits='64' id='91e3ab68'/>
+      <pointer-type-def type-id='3a58d3ba' size-in-bits='64' id='f7e7b3e8'/>
+      <pointer-type-def type-id='a44a15b8' size-in-bits='64' id='0541bcde'/>
+      <pointer-type-def type-id='26761b9f' size-in-bits='64' id='b9348c47'/>
+      <pointer-type-def type-id='7458c17e' size-in-bits='64' id='f9de3b94'/>
+      <pointer-type-def type-id='e565fd94' size-in-bits='64' id='2948bd22'/>
+      <pointer-type-def type-id='d36a5b23' size-in-bits='64' id='112f0343'/>
+      <pointer-type-def type-id='2633295b' size-in-bits='64' id='fa7d167b'/>
+      <pointer-type-def type-id='276d5663' size-in-bits='64' id='48bc1523'/>
+      <pointer-type-def type-id='ef5bccc0' size-in-bits='64' id='e26652e6'/>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='160' id='83a5454e'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <pointer-type-def type-id='01e0721b' size-in-bits='64' id='2553c323'/>
+      <pointer-type-def type-id='3a7813d3' size-in-bits='64' id='040770fb'/>
+      <enum-decl name='v4l2_priority' filepath='include/uapi/linux/videodev2.h' line='404' column='1' id='8b60a0b9'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_PRIORITY_UNSET' value='0'/>
+        <enumerator name='V4L2_PRIORITY_BACKGROUND' value='1'/>
+        <enumerator name='V4L2_PRIORITY_INTERACTIVE' value='2'/>
+        <enumerator name='V4L2_PRIORITY_RECORD' value='3'/>
+        <enumerator name='V4L2_PRIORITY_DEFAULT' value='2'/>
+      </enum-decl>
+      <class-decl name='timespec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/time.h' line='10' column='1' id='a9c79a1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='f7d92306' visibility='default' filepath='include/uapi/linux/time.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tv_nsec' type-id='bd54fe1a' visibility='default' filepath='include/uapi/linux/time.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_area' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='424' column='1' id='baab64cf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='426' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_fwht_params' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/fwht-ctrls.h' line='18' column='1' id='fcc0eea6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='backward_ref_ts' type-id='d3130597' visibility='default' filepath='include/media/fwht-ctrls.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='version' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='colorspace' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='xfer_func' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ycbcr_enc' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='quantization' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_h264_decode_params' size-in-bits='3200' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='201' column='1' id='4aef34b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dpb' type-id='eefef0c1' visibility='default' filepath='include/media/h264-ctrls.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='num_slices' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3088'>
+          <var-decl name='nal_ref_idc' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='top_field_order_cnt' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='bottom_field_order_cnt' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3168'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_h264_pps' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='94' column='1' id='ca2e9cda'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pic_parameter_set_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='seq_parameter_set_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='num_slice_groups_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='num_ref_idx_l0_default_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num_ref_idx_l1_default_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='weighted_bipred_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='pic_init_qp_minus26' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='pic_init_qs_minus26' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='chroma_qp_index_offset' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='second_chroma_qp_index_offset' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_h264_scaling_matrix' size-in-bits='3840' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='108' column='1' id='3a58d3ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scaling_list_4x4' type-id='9a59aaef' visibility='default' filepath='include/media/h264-ctrls.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='scaling_list_8x8' type-id='a112b67c' visibility='default' filepath='include/media/h264-ctrls.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_h264_slice_params' size-in-bits='7168' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='137' column='1' id='a44a15b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='start_byte_offset' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='header_bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='first_mb_in_slice' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='slice_type' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='pic_parameter_set_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='colour_plane_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='redundant_pic_cnt' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='frame_num' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='idr_pic_id' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='pic_order_cnt_lsb' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='delta_pic_order_cnt_bottom' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='delta_pic_order_cnt0' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='delta_pic_order_cnt1' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='pred_weight_table' type-id='864d11b6' visibility='default' filepath='include/media/h264-ctrls.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='dec_ref_pic_marking_bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6496'>
+          <var-decl name='pic_order_cnt_bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='cabac_init_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6536'>
+          <var-decl name='slice_qp_delta' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6544'>
+          <var-decl name='slice_qs_delta' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6552'>
+          <var-decl name='disable_deblocking_filter_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6560'>
+          <var-decl name='slice_alpha_c0_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6568'>
+          <var-decl name='slice_beta_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6576'>
+          <var-decl name='num_ref_idx_l0_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6584'>
+          <var-decl name='num_ref_idx_l1_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='slice_group_change_cycle' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6624'>
+          <var-decl name='ref_pic_list0' type-id='7e67d89d' visibility='default' filepath='include/media/h264-ctrls.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6880'>
+          <var-decl name='ref_pic_list1' type-id='7e67d89d' visibility='default' filepath='include/media/h264-ctrls.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7136'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_h264_sps' size-in-bits='8384' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='64' column='1' id='26761b9f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='profile_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='constraint_set_flags' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='level_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='seq_parameter_set_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='chroma_format_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bit_depth_luma_minus8' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bit_depth_chroma_minus8' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='log2_max_frame_num_minus4' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pic_order_cnt_type' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='log2_max_pic_order_cnt_lsb_minus4' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='max_num_ref_frames' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='num_ref_frames_in_pic_order_cnt_cycle' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='offset_for_ref_frame' type-id='29cc01cd' visibility='default' filepath='include/media/h264-ctrls.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='offset_for_non_ref_pic' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8288'>
+          <var-decl name='offset_for_top_to_bottom_field' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='pic_width_in_mbs_minus1' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8336'>
+          <var-decl name='pic_height_in_map_units_minus1' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8352'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_hevc_pps' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='104' column='1' id='7458c17e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_extra_slice_header_bits' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='init_qp_minus26' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='diff_cu_qp_delta_depth' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='pps_cb_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pps_cr_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='num_tile_columns_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='num_tile_rows_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='column_width_minus1' type-id='26fb03b8' visibility='default' filepath='include/media/hevc-ctrls.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='row_height_minus1' type-id='eaf62816' visibility='default' filepath='include/media/hevc-ctrls.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='pps_beta_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='pps_tc_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='408'>
+          <var-decl name='log2_parallel_merge_level_minus2' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='padding' type-id='c213d3d4' visibility='default' filepath='include/media/hevc-ctrls.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flags' type-id='d3130597' visibility='default' filepath='include/media/hevc-ctrls.h' line='120' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_hevc_slice_params' size-in-bits='4224' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='164' column='1' id='e565fd94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/hevc-ctrls.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='data_bit_offset' type-id='3f1a6b60' visibility='default' filepath='include/media/hevc-ctrls.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nal_unit_type' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='nuh_temporal_id_plus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='slice_type' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='colour_plane_id' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='slice_pic_order_cnt' type-id='d315442e' visibility='default' filepath='include/media/hevc-ctrls.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='num_ref_idx_l0_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='num_ref_idx_l1_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='collocated_ref_idx' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='five_minus_max_num_merge_cand' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='slice_qp_delta' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='slice_cb_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='slice_cr_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='slice_act_y_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='slice_act_cb_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='slice_act_cr_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='slice_beta_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='slice_tc_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='pic_struct' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='num_active_dpb_entries' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ref_idx_l0' type-id='9396cabb' visibility='default' filepath='include/media/hevc-ctrls.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='ref_idx_l1' type-id='9396cabb' visibility='default' filepath='include/media/hevc-ctrls.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='num_rps_poc_st_curr_before' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='488'>
+          <var-decl name='num_rps_poc_st_curr_after' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='num_rps_poc_lt_curr' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='504'>
+          <var-decl name='padding' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dpb' type-id='41c4bc5d' visibility='default' filepath='include/media/hevc-ctrls.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='pred_weight_table' type-id='c1b5e872' visibility='default' filepath='include/media/hevc-ctrls.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='flags' type-id='d3130597' visibility='default' filepath='include/media/hevc-ctrls.h' line='209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_hevc_sps' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='55' column='1' id='d36a5b23'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pic_width_in_luma_samples' type-id='d315442e' visibility='default' filepath='include/media/hevc-ctrls.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='pic_height_in_luma_samples' type-id='d315442e' visibility='default' filepath='include/media/hevc-ctrls.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bit_depth_luma_minus8' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bit_depth_chroma_minus8' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='log2_max_pic_order_cnt_lsb_minus4' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='sps_max_dec_pic_buffering_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sps_max_num_reorder_pics' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='sps_max_latency_increase_plus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='log2_min_luma_coding_block_size_minus3' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='log2_diff_max_min_luma_coding_block_size' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='log2_min_luma_transform_block_size_minus2' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='log2_diff_max_min_luma_transform_block_size' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='max_transform_hierarchy_depth_inter' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='max_transform_hierarchy_depth_intra' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pcm_sample_bit_depth_luma_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='pcm_sample_bit_depth_chroma_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='log2_min_pcm_luma_coding_block_size_minus3' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='log2_diff_max_min_pcm_luma_coding_block_size' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='num_short_term_ref_pic_sets' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='num_long_term_ref_pics_sps' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='chroma_format_idc' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='padding' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='d3130597' visibility='default' filepath='include/media/hevc-ctrls.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_mpeg2_quantization' size-in-bits='2080' is-struct='yes' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='69' column='1' id='2633295b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='load_intra_quantiser_matrix' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='load_non_intra_quantiser_matrix' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='load_chroma_intra_quantiser_matrix' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='load_chroma_non_intra_quantiser_matrix' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='intra_quantiser_matrix' type-id='73b95420' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='non_intra_quantiser_matrix' type-id='73b95420' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='chroma_intra_quantiser_matrix' type-id='73b95420' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='chroma_non_intra_quantiser_matrix' type-id='73b95420' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_mpeg2_slice_params' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='56' column='1' id='276d5663'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='data_bit_offset' type-id='3f1a6b60' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='backward_ref_ts' type-id='d3130597' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='forward_ref_ts' type-id='d3130597' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sequence' type-id='ecf565e1' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='picture' type-id='c82910ee' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='quantiser_scale_code' type-id='3f1a6b60' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='99' column='1' id='205c2e40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='g_volatile_ctrl' type-id='4e4de503' visibility='default' filepath='include/media/v4l2-ctrls.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='try_ctrl' type-id='4e4de503' visibility='default' filepath='include/media/v4l2-ctrls.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='s_ctrl' type-id='4e4de503' visibility='default' filepath='include/media/v4l2-ctrls.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_type_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='115' column='1' id='b154eaef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='equal' type-id='f456402b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init' type-id='95625cb2' visibility='default' filepath='include/media/v4l2-ctrls.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='log' type-id='c71b901b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='validate' type-id='f089c08b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='122' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_vp8_frame_header' size-in-bits='9856' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='81' column='1' id='ef5bccc0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='segment_header' type-id='58370a8e' visibility='default' filepath='include/media/vp8-ctrls.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lf_header' type-id='e4362873' visibility='default' filepath='include/media/vp8-ctrls.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='quant_header' type-id='b6008b50' visibility='default' filepath='include/media/vp8-ctrls.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='entropy_header' type-id='2b2e1d12' visibility='default' filepath='include/media/vp8-ctrls.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='coder_state' type-id='e65ce076' visibility='default' filepath='include/media/vp8-ctrls.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9184'>
+          <var-decl name='width' type-id='d315442e' visibility='default' filepath='include/media/vp8-ctrls.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9200'>
+          <var-decl name='height' type-id='d315442e' visibility='default' filepath='include/media/vp8-ctrls.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='horizontal_scale' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9224'>
+          <var-decl name='vertical_scale' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9232'>
+          <var-decl name='version' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9240'>
+          <var-decl name='prob_skip_false' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9248'>
+          <var-decl name='prob_intra' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9256'>
+          <var-decl name='prob_last' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9264'>
+          <var-decl name='prob_gf' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9272'>
+          <var-decl name='num_dct_parts' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='first_part_size' type-id='3f1a6b60' visibility='default' filepath='include/media/vp8-ctrls.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9312'>
+          <var-decl name='first_part_header_bits' type-id='3f1a6b60' visibility='default' filepath='include/media/vp8-ctrls.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='dct_part_sizes' type-id='7f84eb57' visibility='default' filepath='include/media/vp8-ctrls.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='last_frame_ts' type-id='d3130597' visibility='default' filepath='include/media/vp8-ctrls.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='golden_frame_ts' type-id='d3130597' visibility='default' filepath='include/media/vp8-ctrls.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='alt_frame_ts' type-id='d3130597' visibility='default' filepath='include/media/vp8-ctrls.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='flags' type-id='d3130597' visibility='default' filepath='include/media/vp8-ctrls.h' line='109' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='267' column='1' id='b0ee3ba9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='a7832498' visibility='default' filepath='include/media/v4l2-ctrls.h' line='268' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='v4l2_ctrl_notify_fnc' type-id='af2775f4' filepath='include/media/v4l2-ctrls.h' line='136' column='1' id='7ec3cb1e'/>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='260' column='1' id='87415f3a'>
+        <data-member access='private'>
+          <var-decl name='qmenu' type-id='13956559' visibility='default' filepath='include/media/v4l2-ctrls.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='qmenu_int' type-id='43ae54cf' visibility='default' filepath='include/media/v4l2-ctrls.h' line='262' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='256' column='1' id='b91b9370'>
+        <data-member access='private'>
+          <var-decl name='step' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='menu_skip_mask' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='258' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2333' column='1' id='454ee2bf'>
+        <data-member access='private'>
+          <var-decl name='vsync' type-id='cbe6daf0' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2334' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ctrl' type-id='ecd6d55a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2335' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='frame_sync' type-id='101c7fc2' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2336' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='src_change' type-id='af41d400' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2337' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='motion_det' type-id='f95c1b03' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2338' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='data' type-id='73b95420' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2339' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='7e833f79' size-in-bits='64' id='e1a56841'/>
+      <pointer-type-def type-id='c2e9ee66' size-in-bits='64' id='707be29c'/>
+      <pointer-type-def type-id='c19e9dd9' size-in-bits='64' id='9f3a0131'/>
+      <pointer-type-def type-id='9f3a0131' size-in-bits='64' id='c34fbd81'/>
+      <pointer-type-def type-id='f1828bdc' size-in-bits='64' id='ddfb71fa'/>
+      <pointer-type-def type-id='e1b58b0e' size-in-bits='64' id='2c7f1dc4'/>
+      <pointer-type-def type-id='415476f4' size-in-bits='64' id='616ec7d2'/>
+      <pointer-type-def type-id='a4b3744f' size-in-bits='64' id='798c29b7'/>
+      <array-type-def dimensions='1' type-id='3158a266' size-in-bits='8160' id='29cc01cd'>
+        <subrange length='255' type-id='7ff19f0f' id='36e7f891'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='160' id='26fb03b8'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='176' id='eaf62816'>
+        <subrange length='22' type-id='7ff19f0f' id='41cf2209'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='512' id='73b95420'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='768' id='9a59aaef'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='3072' id='a112b67c'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <qualified-type-def type-id='d36f034a' const='yes' id='01e0721b'/>
+      <qualified-type-def type-id='026dac7c' const='yes' id='3a7813d3'/>
+      <pointer-type-def type-id='38cb23df' size-in-bits='64' id='f089c08b'/>
+      <pointer-type-def type-id='5651631f' size-in-bits='64' id='4e4de503'/>
+      <class-decl name='v4l2_async_notifier' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/media/v4l2-async.h' line='129' column='1' id='7e833f79'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='17c9f4a9' visibility='default' filepath='include/media/v4l2-async.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='v4l2_dev' type-id='ddfb71fa' visibility='default' filepath='include/media/v4l2-async.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sd' type-id='f5438ac7' visibility='default' filepath='include/media/v4l2-async.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parent' type-id='e1a56841' visibility='default' filepath='include/media/v4l2-async.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='asd_list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='waiting' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='done' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_async_subdev' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/v4l2-async.h' line='79' column='1' id='c2e9ee66'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='match_type' type-id='d03a4ada' visibility='default' filepath='include/media/v4l2-async.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='match' type-id='5c61413a' visibility='default' filepath='include/media/v4l2-async.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='asd_list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_ref' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='302' column='1' id='c19e9dd9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='9f3a0131' visibility='default' filepath='include/media/v4l2-ctrls.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ctrl' type-id='4b8b2cf3' visibility='default' filepath='include/media/v4l2-ctrls.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='helper' type-id='7308495a' visibility='default' filepath='include/media/v4l2-ctrls.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='from_other_dev' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-ctrls.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='req_done' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-ctrls.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='req' type-id='9f3a0131' visibility='default' filepath='include/media/v4l2-ctrls.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='p_req' type-id='3f78e6a9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='310' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_device' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/media/v4l2-device.h' line='47' column='1' id='f1828bdc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/media/v4l2-device.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mdev' type-id='e2929c1c' visibility='default' filepath='include/media/v4l2-device.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='subdevs' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-device.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/media/v4l2-device.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='name' type-id='16e6f2c6' visibility='default' filepath='include/media/v4l2-device.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='notify' type-id='9f5eb43a' visibility='default' filepath='include/media/v4l2-device.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ctrl_handler' type-id='2b59fa5e' visibility='default' filepath='include/media/v4l2-device.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='prio' type-id='281d3096' visibility='default' filepath='include/media/v4l2-device.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/media/v4l2-device.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='release' type-id='8dfbe74f' visibility='default' filepath='include/media/v4l2-device.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event_ctrl' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2292' column='1' id='ecd6d55a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='changes' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='de5442d3' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='minimum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='maximum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='step' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='default_value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2303' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event_frame_sync' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2306' column='1' id='101c7fc2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frame_sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2307' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event_motion_det' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2325' column='1' id='f95c1b03'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='frame_sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='region_mask' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2328' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event_src_change' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2312' column='1' id='af41d400'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='changes' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2313' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event_vsync' size-in-bits='8' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2282' column='1' id='cbe6daf0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='field' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2284' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_h264_pred_weight_table' size-in-bits='6176' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='120' column='1' id='864d11b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='luma_log2_weight_denom' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='chroma_log2_weight_denom' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='weight_factors' type-id='a4444dc4' visibility='default' filepath='include/media/h264-ctrls.h' line='123' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_hevc_pred_weight_table' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='137' column='1' id='c1b5e872'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='delta_luma_weight_l0' type-id='2d85a215' visibility='default' filepath='include/media/hevc-ctrls.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='luma_offset_l0' type-id='2d85a215' visibility='default' filepath='include/media/hevc-ctrls.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='delta_chroma_weight_l0' type-id='1e28c56f' visibility='default' filepath='include/media/hevc-ctrls.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='chroma_offset_l0' type-id='1e28c56f' visibility='default' filepath='include/media/hevc-ctrls.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='delta_luma_weight_l1' type-id='2d85a215' visibility='default' filepath='include/media/hevc-ctrls.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='luma_offset_l1' type-id='2d85a215' visibility='default' filepath='include/media/hevc-ctrls.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='delta_chroma_weight_l1' type-id='1e28c56f' visibility='default' filepath='include/media/hevc-ctrls.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='chroma_offset_l1' type-id='1e28c56f' visibility='default' filepath='include/media/hevc-ctrls.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='padding' type-id='c60dc9f2' visibility='default' filepath='include/media/hevc-ctrls.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1584'>
+          <var-decl name='luma_log2_weight_denom' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1592'>
+          <var-decl name='delta_chroma_log2_weight_denom' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='151' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_m2m_ctx' size-in-bits='14336' is-struct='yes' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='99' column='1' id='e1b58b0e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q_lock' type-id='e0ea832a' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='new_frame' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='is_draining' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='last_src_buf' type-id='9a42d4cd' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next_buf_last' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='has_stopped' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='m2m_dev' type-id='b50ade7a' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cap_q_ctx' type-id='0651f1ee' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='out_q_ctx' type-id='0651f1ee' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13888'>
+          <var-decl name='queue' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14016'>
+          <var-decl name='job_flags' type-id='7359adad' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14080'>
+          <var-decl name='finished' type-id='b5ab048f' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14272'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='122' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_mpeg2_picture' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='38' column='1' id='c82910ee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='picture_coding_type' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='f_code' type-id='86be53ee' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='intra_dc_precision' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='picture_structure' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='top_field_first' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frame_pred_frame_dct' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='concealment_motion_vectors' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='q_scale_type' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='intra_vlc_format' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='alternate_scan' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='repeat_first_field' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='progressive_frame' type-id='d315442e' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_mpeg2_sequence' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='26' column='1' id='ecf565e1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='horizontal_size' type-id='d315442e' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='vertical_size' type-id='d315442e' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vbv_buffer_size' type-id='3f1a6b60' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='profile_and_level_indication' type-id='d315442e' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='progressive_sequence' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='chroma_format' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_platform_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='797' column='1' id='415476f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='regulators' type-id='776946b4' visibility='default' filepath='include/media/v4l2-subdev.h' line='798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_regulators' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-subdev.h' line='799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='host_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-subdev.h' line='801' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_entropy_coder_state' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='64' column='1' id='e65ce076'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='range' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='value' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bit_count' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='padding' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_entropy_header' size-in-bits='8832' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='56' column='1' id='2b2e1d12'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='coeff_probs' type-id='96a07b89' visibility='default' filepath='include/media/vp8-ctrls.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='y_mode_probs' type-id='c213d3d4' visibility='default' filepath='include/media/vp8-ctrls.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='uv_mode_probs' type-id='c216126b' visibility='default' filepath='include/media/vp8-ctrls.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8504'>
+          <var-decl name='mv_probs' type-id='fa0a1f4c' visibility='default' filepath='include/media/vp8-ctrls.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8808'>
+          <var-decl name='padding' type-id='c216126b' visibility='default' filepath='include/media/vp8-ctrls.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_loopfilter_header' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='37' column='1' id='e4362873'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ref_frm_delta' type-id='87ce7f1e' visibility='default' filepath='include/media/vp8-ctrls.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mb_mode_delta' type-id='87ce7f1e' visibility='default' filepath='include/media/vp8-ctrls.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sharpness_level' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='level' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='padding' type-id='d315442e' visibility='default' filepath='include/media/vp8-ctrls.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/vp8-ctrls.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_quantization_header' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='46' column='1' id='b6008b50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='y_ac_qi' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='y_dc_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='y2_dc_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='y2_ac_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='uv_dc_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='uv_ac_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='padding' type-id='d315442e' visibility='default' filepath='include/media/vp8-ctrls.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_segment_header' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='26' column='1' id='58370a8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='quant_update' type-id='87ce7f1e' visibility='default' filepath='include/media/vp8-ctrls.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lf_update' type-id='87ce7f1e' visibility='default' filepath='include/media/vp8-ctrls.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='segment_probs' type-id='c216126b' visibility='default' filepath='include/media/vp8-ctrls.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='padding' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/vp8-ctrls.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='video_device' size-in-bits='12416' is-struct='yes' visibility='default' filepath='include/media/v4l2-dev.h' line='256' column='1' id='a4b3744f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entity' type-id='889856f7' visibility='default' filepath='include/media/v4l2-dev.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='intf_devnode' type-id='8114c6c9' visibility='default' filepath='include/media/v4l2-dev.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='pipe' type-id='2783658a' visibility='default' filepath='include/media/v4l2-dev.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='fops' type-id='1e4c840c' visibility='default' filepath='include/media/v4l2-dev.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='device_caps' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-dev.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/media/v4l2-dev.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='cdev' type-id='3e6eb93a' visibility='default' filepath='include/media/v4l2-dev.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='v4l2_dev' type-id='ddfb71fa' visibility='default' filepath='include/media/v4l2-dev.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='dev_parent' type-id='fa0b179b' visibility='default' filepath='include/media/v4l2-dev.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='ctrl_handler' type-id='2b59fa5e' visibility='default' filepath='include/media/v4l2-dev.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='queue' type-id='a05f1ece' visibility='default' filepath='include/media/v4l2-dev.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='prio' type-id='2fc4734c' visibility='default' filepath='include/media/v4l2-dev.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/media/v4l2-dev.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='vfl_type' type-id='24df61b5' visibility='default' filepath='include/media/v4l2-dev.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11552'>
+          <var-decl name='vfl_dir' type-id='366ec232' visibility='default' filepath='include/media/v4l2-dev.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-dev.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11616'>
+          <var-decl name='num' type-id='1dc6a898' visibility='default' filepath='include/media/v4l2-dev.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/v4l2-dev.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-dev.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11744'>
+          <var-decl name='fh_lock' type-id='fb4018a0' visibility='default' filepath='include/media/v4l2-dev.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='fh_list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-dev.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='dev_debug' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-dev.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='tvnorms' type-id='692d176e' visibility='default' filepath='include/media/v4l2-dev.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='release' type-id='3007e20a' visibility='default' filepath='include/media/v4l2-dev.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='ioctl_ops' type-id='b94745b1' visibility='default' filepath='include/media/v4l2-dev.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='valid_ioctls' type-id='3461381a' visibility='default' filepath='include/media/v4l2-dev.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='lock' type-id='e0ea832a' visibility='default' filepath='include/media/v4l2-dev.h' line='302' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='596e4a77' size-in-bits='64' id='f456402b'/>
+      <array-type-def dimensions='1' type-id='7a583acc' size-in-bits='3072' id='eefef0c1'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a1f34f28' size-in-bits='2048' id='41c4bc5d'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <pointer-type-def type-id='fee334bf' size-in-bits='64' id='c71b901b'/>
+      <pointer-type-def type-id='dd703408' size-in-bits='64' id='95625cb2'/>
+      <pointer-type-def type-id='d59331c2' size-in-bits='64' id='af2775f4'/>
+      <array-type-def dimensions='1' type-id='8af57d41' size-in-bits='128' id='2d85a215'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8af57d41' size-in-bits='256' id='1e28c56f'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8af57d41' size-in-bits='32' id='87ce7f1e'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='304' id='fa0a1f4c'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='19' type-id='7ff19f0f' id='448ee30f'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='32' id='86be53ee'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='4' type-id='8f048e17' size-in-bits='8448' id='96a07b89'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='288' id='16e6f2c6'>
+        <subrange length='36' type-id='7ff19f0f' id='ae666bde'/>
+      </array-type-def>
+      <pointer-type-def type-id='20400679' size-in-bits='64' id='17c9f4a9'/>
+      <pointer-type-def type-id='9eb7236e' size-in-bits='64' id='1e4c840c'/>
+      <pointer-type-def type-id='39863601' size-in-bits='64' id='b94745b1'/>
+      <enum-decl name='v4l2_async_match_type' filepath='include/media/v4l2-async.h' line='33' column='1' id='d03a4ada'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_ASYNC_MATCH_CUSTOM' value='0'/>
+        <enumerator name='V4L2_ASYNC_MATCH_DEVNAME' value='1'/>
+        <enumerator name='V4L2_ASYNC_MATCH_I2C' value='2'/>
+        <enumerator name='V4L2_ASYNC_MATCH_FWNODE' value='3'/>
+      </enum-decl>
+      <enum-decl name='vfl_devnode_direction' filepath='include/media/v4l2-dev.h' line='55' column='1' id='366ec232'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='VFL_DIR_RX' value='0'/>
+        <enumerator name='VFL_DIR_TX' value='1'/>
+        <enumerator name='VFL_DIR_M2M' value='2'/>
+      </enum-decl>
+      <enum-decl name='vfl_devnode_type' filepath='include/media/v4l2-dev.h' line='35' column='1' id='24df61b5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='VFL_TYPE_GRABBER' value='0'/>
+        <enumerator name='VFL_TYPE_VBI' value='1'/>
+        <enumerator name='VFL_TYPE_RADIO' value='2'/>
+        <enumerator name='VFL_TYPE_SUBDEV' value='3'/>
+        <enumerator name='VFL_TYPE_SDR' value='4'/>
+        <enumerator name='VFL_TYPE_TOUCH' value='5'/>
+        <enumerator name='VFL_TYPE_MAX' value='6'/>
+      </enum-decl>
+      <pointer-type-def type-id='2e3fb70e' size-in-bits='64' id='776946b4'/>
+      <class-decl name='v4l2_h264_dpb_entry' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='189' column='1' id='7a583acc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reference_ts' type-id='d3130597' visibility='default' filepath='include/media/h264-ctrls.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frame_num' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='pic_num' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='top_field_order_cnt' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bottom_field_order_cnt' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='196' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_hevc_dpb_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='129' column='1' id='a1f34f28'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timestamp' type-id='d3130597' visibility='default' filepath='include/media/hevc-ctrls.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rps' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='field_pic' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='pic_order_cnt' type-id='810b4a17' visibility='default' filepath='include/media/hevc-ctrls.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='padding' type-id='0618bc0e' visibility='default' filepath='include/media/hevc-ctrls.h' line='134' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_m2m_queue_ctx' size-in-bits='6784' is-struct='yes' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='65' column='1' id='0651f1ee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q' type-id='6b30321d' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='rdy_queue' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='rdy_spinlock' type-id='fb4018a0' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6752'>
+          <var-decl name='num_rdy' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6760'>
+          <var-decl name='buffered' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_prio_state' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/v4l2-dev.h' line='104' column='1' id='281d3096'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prios' type-id='6ed968f3' visibility='default' filepath='include/media/v4l2-dev.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_internal_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='765' column='1' id='d36f034a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='registered' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unregistered' type-id='1625ce7a' visibility='default' filepath='include/media/v4l2-subdev.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='open' type-id='618f91b8' visibility='default' filepath='include/media/v4l2-subdev.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='close' type-id='618f91b8' visibility='default' filepath='include/media/v4l2-subdev.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='1625ce7a' visibility='default' filepath='include/media/v4l2-subdev.h' line='770' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='727' column='1' id='026dac7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='core' type-id='5317b3cd' visibility='default' filepath='include/media/v4l2-subdev.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tuner' type-id='12d4fd76' visibility='default' filepath='include/media/v4l2-subdev.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='audio' type-id='2d92dd30' visibility='default' filepath='include/media/v4l2-subdev.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='video' type-id='5a7c2847' visibility='default' filepath='include/media/v4l2-subdev.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vbi' type-id='cc679d2b' visibility='default' filepath='include/media/v4l2-subdev.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ir' type-id='7bd796c9' visibility='default' filepath='include/media/v4l2-subdev.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sensor' type-id='b2ac7a1e' visibility='default' filepath='include/media/v4l2-subdev.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pad' type-id='475ad931' visibility='default' filepath='include/media/v4l2-subdev.h' line='735' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='v4l2_std_id' type-id='d3130597' filepath='include/uapi/linux/videodev2.h' line='1219' column='1' id='692d176e'/>
+      <union-decl name='__anonymous_union__6' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2295' column='1' id='de5442d3'>
+        <data-member access='private'>
+          <var-decl name='value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2296' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='value64' type-id='49659421' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2297' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-async.h' line='81' column='1' id='5c61413a'>
+        <data-member access='private'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/media/v4l2-async.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='device_name' type-id='80f4b756' visibility='default' filepath='include/media/v4l2-async.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i2c' type-id='02403573' visibility='default' filepath='include/media/v4l2-async.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='custom' type-id='2e3fe03c' visibility='default' filepath='include/media/v4l2-async.h' line='92' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='8a6e72bc' size-in-bits='64' id='7308495a'/>
+      <array-type-def dimensions='1' type-id='c1c411a0' size-in-bits='6144' id='a4444dc4'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='ba69e54c' size-in-bits='64' id='b50ade7a'/>
+      <pointer-type-def type-id='281d3096' size-in-bits='64' id='2fc4734c'/>
+      <pointer-type-def type-id='6b30321e' size-in-bits='64' id='a05f1ece'/>
+      <pointer-type-def type-id='b8e47b1d' size-in-bits='64' id='9a42d4cd'/>
+      <pointer-type-def type-id='b6a7cdb3' size-in-bits='64' id='8dfbe74f'/>
+      <pointer-type-def type-id='3516ab98' size-in-bits='64' id='9f5eb43a'/>
+      <pointer-type-def type-id='9d4a3248' size-in-bits='64' id='3007e20a'/>
+      <array-type-def dimensions='1' type-id='49178f86' size-in-bits='128' id='6ed968f3'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <qualified-type-def type-id='ca8c574c' const='yes' id='20400679'/>
+      <qualified-type-def type-id='58b9b3eb' const='yes' id='9eb7236e'/>
+      <qualified-type-def type-id='eb7c81d8' const='yes' id='39863601'/>
+      <pointer-type-def type-id='53ecac3a' size-in-bits='64' id='2d92dd30'/>
+      <pointer-type-def type-id='9d085135' size-in-bits='64' id='5317b3cd'/>
+      <pointer-type-def type-id='bf11af99' size-in-bits='64' id='7bd796c9'/>
+      <pointer-type-def type-id='d48e8481' size-in-bits='64' id='475ad931'/>
+      <pointer-type-def type-id='9f25e800' size-in-bits='64' id='b2ac7a1e'/>
+      <pointer-type-def type-id='dc30ce58' size-in-bits='64' id='12d4fd76'/>
+      <pointer-type-def type-id='f5af9523' size-in-bits='64' id='cc679d2b'/>
+      <pointer-type-def type-id='02233ed7' size-in-bits='64' id='5a7c2847'/>
+      <pointer-type-def type-id='77296733' size-in-bits='64' id='a236743f'/>
+      <pointer-type-def type-id='4bd12e16' size-in-bits='64' id='618f91b8'/>
+      <class-decl name='regulator_bulk_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/regulator/consumer.h' line='167' column='1' id='2e3fb70e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supply' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/consumer.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='consumer' type-id='850c13f6' visibility='default' filepath='include/linux/regulator/consumer.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ret' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/consumer.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_helper' is-struct='yes' visibility='default' is-declaration-only='yes' id='8a6e72bc'/>
+      <class-decl name='v4l2_h264_weight_factors' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='113' column='1' id='c1c411a0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='luma_weight' type-id='467f4e10' visibility='default' filepath='include/media/h264-ctrls.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='luma_offset' type-id='467f4e10' visibility='default' filepath='include/media/h264-ctrls.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='chroma_weight' type-id='0399400c' visibility='default' filepath='include/media/h264-ctrls.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='chroma_offset' type-id='0399400c' visibility='default' filepath='include/media/h264-ctrls.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_m2m_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='ba69e54c'/>
+      <class-decl name='vb2_queue' is-struct='yes' visibility='default' is-declaration-only='yes' id='6b30321e'/>
+      <class-decl name='vb2_v4l2_buffer' size-in-bits='7488' is-struct='yes' visibility='default' filepath='include/media/videobuf2-v4l2.h' line='42' column='1' id='b8e47b1d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vb2_buf' type-id='4a078c54' visibility='default' filepath='include/media/videobuf2-v4l2.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/videobuf2-v4l2.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4128'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/media/videobuf2-v4l2.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='timecode' type-id='5f820012' visibility='default' filepath='include/media/videobuf2-v4l2.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='sequence' type-id='3f1a6b60' visibility='default' filepath='include/media/videobuf2-v4l2.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4320'>
+          <var-decl name='request_fd' type-id='3158a266' visibility='default' filepath='include/media/videobuf2-v4l2.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='is_held' type-id='b50a4934' visibility='default' filepath='include/media/videobuf2-v4l2.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='planes' type-id='105eff46' visibility='default' filepath='include/media/videobuf2-v4l2.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-async.h' line='84' column='1' id='02403573'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='adapter_id' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-async.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='address' type-id='8efea9e5' visibility='default' filepath='include/media/v4l2-async.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-async.h' line='88' column='1' id='2e3fe03c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='match' type-id='5c6f8956' visibility='default' filepath='include/media/v4l2-async.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-async.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4bda18f8' size-in-bits='64' id='1625ce7a'/>
+      <array-type-def dimensions='1' type-id='b55def60' size-in-bits='512' id='467f4e10'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='b55def60' size-in-bits='1024' id='0399400c'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <qualified-type-def type-id='e3913a59' const='yes' id='53ecac3a'/>
+      <qualified-type-def type-id='b569b18c' const='yes' id='9d085135'/>
+      <qualified-type-def type-id='77a58158' const='yes' id='bf11af99'/>
+      <qualified-type-def type-id='0382928e' const='yes' id='d48e8481'/>
+      <qualified-type-def type-id='6f6b42ed' const='yes' id='9f25e800'/>
+      <qualified-type-def type-id='40eafb47' const='yes' id='dc30ce58'/>
+      <qualified-type-def type-id='729f8f08' const='yes' id='f5af9523'/>
+      <qualified-type-def type-id='6eadcbe0' const='yes' id='02233ed7'/>
+      <class-decl name='v4l2_async_notifier_operations' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/v4l2-async.h' line='107' column='1' id='ca8c574c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bound' type-id='39e52da2' visibility='default' filepath='include/media/v4l2-async.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='complete' type-id='6f077fdd' visibility='default' filepath='include/media/v4l2-async.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='unbind' type-id='55d37973' visibility='default' filepath='include/media/v4l2-async.h' line='112' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_file_operations' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/media/v4l2-dev.h' line='193' column='1' id='58b9b3eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/media/v4l2-dev.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read' type-id='4d8f5625' visibility='default' filepath='include/media/v4l2-dev.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write' type-id='5f29549c' visibility='default' filepath='include/media/v4l2-dev.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='poll' type-id='4d01ede7' visibility='default' filepath='include/media/v4l2-dev.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unlocked_ioctl' type-id='fc7daf55' visibility='default' filepath='include/media/v4l2-dev.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='compat_ioctl32' type-id='fc7daf55' visibility='default' filepath='include/media/v4l2-dev.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_unmapped_area' type-id='d44a8cec' visibility='default' filepath='include/media/v4l2-dev.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mmap' type-id='8ea2626c' visibility='default' filepath='include/media/v4l2-dev.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='open' type-id='4da4101d' visibility='default' filepath='include/media/v4l2-dev.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='release' type-id='4da4101d' visibility='default' filepath='include/media/v4l2-dev.h' line='206' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ioctl_ops' size-in-bits='7616' is-struct='yes' visibility='default' filepath='include/media/v4l2-ioctl.h' line='296' column='1' id='eb7c81d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vidioc_querycap' type-id='70be41da' visibility='default' filepath='include/media/v4l2-ioctl.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vidioc_enum_fmt_vid_cap' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vidioc_enum_fmt_vid_overlay' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vidioc_enum_fmt_vid_out' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vidioc_enum_fmt_sdr_cap' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='vidioc_enum_fmt_sdr_out' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='vidioc_enum_fmt_meta_cap' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='vidioc_enum_fmt_meta_out' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='vidioc_g_fmt_vid_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='vidioc_g_fmt_vid_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vidioc_g_fmt_vid_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vidioc_g_fmt_vid_out_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='vidioc_g_fmt_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='vidioc_g_fmt_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='vidioc_g_fmt_sliced_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='vidioc_g_fmt_sliced_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='vidioc_g_fmt_vid_cap_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='vidioc_g_fmt_vid_out_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='vidioc_g_fmt_sdr_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='vidioc_g_fmt_sdr_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='vidioc_g_fmt_meta_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='vidioc_g_fmt_meta_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='vidioc_s_fmt_vid_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='vidioc_s_fmt_vid_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='vidioc_s_fmt_vid_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='vidioc_s_fmt_vid_out_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='vidioc_s_fmt_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='vidioc_s_fmt_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='vidioc_s_fmt_sliced_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='vidioc_s_fmt_sliced_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='vidioc_s_fmt_vid_cap_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='vidioc_s_fmt_vid_out_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='vidioc_s_fmt_sdr_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='vidioc_s_fmt_sdr_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='vidioc_s_fmt_meta_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='vidioc_s_fmt_meta_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='vidioc_try_fmt_vid_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='vidioc_try_fmt_vid_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='vidioc_try_fmt_vid_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='vidioc_try_fmt_vid_out_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='vidioc_try_fmt_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='vidioc_try_fmt_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='vidioc_try_fmt_sliced_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='vidioc_try_fmt_sliced_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='vidioc_try_fmt_vid_cap_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='vidioc_try_fmt_vid_out_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='vidioc_try_fmt_sdr_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='vidioc_try_fmt_sdr_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='vidioc_try_fmt_meta_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='vidioc_try_fmt_meta_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='vidioc_reqbufs' type-id='3b472dd8' visibility='default' filepath='include/media/v4l2-ioctl.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='vidioc_querybuf' type-id='6e055dae' visibility='default' filepath='include/media/v4l2-ioctl.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='vidioc_qbuf' type-id='6e055dae' visibility='default' filepath='include/media/v4l2-ioctl.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='vidioc_expbuf' type-id='456a5468' visibility='default' filepath='include/media/v4l2-ioctl.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='vidioc_dqbuf' type-id='6e055dae' visibility='default' filepath='include/media/v4l2-ioctl.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='vidioc_create_bufs' type-id='dd40abb0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='vidioc_prepare_buf' type-id='6e055dae' visibility='default' filepath='include/media/v4l2-ioctl.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='vidioc_overlay' type-id='6f3b229b' visibility='default' filepath='include/media/v4l2-ioctl.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='vidioc_g_fbuf' type-id='15c573bb' visibility='default' filepath='include/media/v4l2-ioctl.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='vidioc_s_fbuf' type-id='117460b0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='vidioc_streamon' type-id='18ff560f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='vidioc_streamoff' type-id='18ff560f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='vidioc_g_std' type-id='0e0c1c5d' visibility='default' filepath='include/media/v4l2-ioctl.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='vidioc_s_std' type-id='a13d0c2c' visibility='default' filepath='include/media/v4l2-ioctl.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='vidioc_querystd' type-id='0e0c1c5d' visibility='default' filepath='include/media/v4l2-ioctl.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='vidioc_enum_input' type-id='243d1e96' visibility='default' filepath='include/media/v4l2-ioctl.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='vidioc_g_input' type-id='c0a3faf5' visibility='default' filepath='include/media/v4l2-ioctl.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='vidioc_s_input' type-id='6f3b229b' visibility='default' filepath='include/media/v4l2-ioctl.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='vidioc_enum_output' type-id='e2f71a2f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='vidioc_g_output' type-id='c0a3faf5' visibility='default' filepath='include/media/v4l2-ioctl.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='vidioc_s_output' type-id='6f3b229b' visibility='default' filepath='include/media/v4l2-ioctl.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='vidioc_queryctrl' type-id='73892d6d' visibility='default' filepath='include/media/v4l2-ioctl.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='vidioc_query_ext_ctrl' type-id='860d0bc4' visibility='default' filepath='include/media/v4l2-ioctl.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='vidioc_g_ctrl' type-id='10f733f9' visibility='default' filepath='include/media/v4l2-ioctl.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='vidioc_s_ctrl' type-id='10f733f9' visibility='default' filepath='include/media/v4l2-ioctl.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='vidioc_g_ext_ctrls' type-id='517d0452' visibility='default' filepath='include/media/v4l2-ioctl.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='vidioc_s_ext_ctrls' type-id='517d0452' visibility='default' filepath='include/media/v4l2-ioctl.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='vidioc_try_ext_ctrls' type-id='517d0452' visibility='default' filepath='include/media/v4l2-ioctl.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='vidioc_querymenu' type-id='81068c97' visibility='default' filepath='include/media/v4l2-ioctl.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='vidioc_enumaudio' type-id='e1c70e28' visibility='default' filepath='include/media/v4l2-ioctl.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='vidioc_g_audio' type-id='e1c70e28' visibility='default' filepath='include/media/v4l2-ioctl.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='vidioc_s_audio' type-id='6a8dfaef' visibility='default' filepath='include/media/v4l2-ioctl.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='vidioc_enumaudout' type-id='4ecb1656' visibility='default' filepath='include/media/v4l2-ioctl.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='vidioc_g_audout' type-id='4ecb1656' visibility='default' filepath='include/media/v4l2-ioctl.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='vidioc_s_audout' type-id='f8e1aa9b' visibility='default' filepath='include/media/v4l2-ioctl.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='vidioc_g_modulator' type-id='24213669' visibility='default' filepath='include/media/v4l2-ioctl.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='vidioc_s_modulator' type-id='b79f9e36' visibility='default' filepath='include/media/v4l2-ioctl.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='vidioc_g_pixelaspect' type-id='0a95e709' visibility='default' filepath='include/media/v4l2-ioctl.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='vidioc_g_selection' type-id='a3948f60' visibility='default' filepath='include/media/v4l2-ioctl.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='vidioc_s_selection' type-id='a3948f60' visibility='default' filepath='include/media/v4l2-ioctl.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='vidioc_g_jpegcomp' type-id='f58cb656' visibility='default' filepath='include/media/v4l2-ioctl.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='vidioc_s_jpegcomp' type-id='ba21bbb1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='vidioc_g_enc_index' type-id='cadab7d6' visibility='default' filepath='include/media/v4l2-ioctl.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='vidioc_encoder_cmd' type-id='7312c953' visibility='default' filepath='include/media/v4l2-ioctl.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='vidioc_try_encoder_cmd' type-id='7312c953' visibility='default' filepath='include/media/v4l2-ioctl.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='vidioc_decoder_cmd' type-id='52e63b6f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='vidioc_try_decoder_cmd' type-id='52e63b6f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='vidioc_g_parm' type-id='41d02516' visibility='default' filepath='include/media/v4l2-ioctl.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='vidioc_s_parm' type-id='41d02516' visibility='default' filepath='include/media/v4l2-ioctl.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='vidioc_g_tuner' type-id='35b8846a' visibility='default' filepath='include/media/v4l2-ioctl.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='vidioc_s_tuner' type-id='aec87d1d' visibility='default' filepath='include/media/v4l2-ioctl.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='vidioc_g_frequency' type-id='7398303c' visibility='default' filepath='include/media/v4l2-ioctl.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='vidioc_s_frequency' type-id='48d231fb' visibility='default' filepath='include/media/v4l2-ioctl.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='vidioc_enum_freq_bands' type-id='771ff1ac' visibility='default' filepath='include/media/v4l2-ioctl.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='vidioc_g_sliced_vbi_cap' type-id='5fa1787f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='vidioc_log_status' type-id='962405e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='vidioc_s_hw_freq_seek' type-id='6cbcc6da' visibility='default' filepath='include/media/v4l2-ioctl.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='vidioc_enum_framesizes' type-id='9822fe67' visibility='default' filepath='include/media/v4l2-ioctl.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='vidioc_enum_frameintervals' type-id='a176c78e' visibility='default' filepath='include/media/v4l2-ioctl.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='vidioc_s_dv_timings' type-id='ce828302' visibility='default' filepath='include/media/v4l2-ioctl.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='vidioc_g_dv_timings' type-id='ce828302' visibility='default' filepath='include/media/v4l2-ioctl.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='vidioc_query_dv_timings' type-id='ce828302' visibility='default' filepath='include/media/v4l2-ioctl.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='vidioc_enum_dv_timings' type-id='fbd9657e' visibility='default' filepath='include/media/v4l2-ioctl.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='vidioc_dv_timings_cap' type-id='1f370097' visibility='default' filepath='include/media/v4l2-ioctl.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='vidioc_g_edid' type-id='d5f67e88' visibility='default' filepath='include/media/v4l2-ioctl.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='vidioc_s_edid' type-id='d5f67e88' visibility='default' filepath='include/media/v4l2-ioctl.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='vidioc_subscribe_event' type-id='081ebe8e' visibility='default' filepath='include/media/v4l2-ioctl.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='vidioc_unsubscribe_event' type-id='081ebe8e' visibility='default' filepath='include/media/v4l2-ioctl.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='vidioc_default' type-id='d2188e4c' visibility='default' filepath='include/media/v4l2-ioctl.h' line='586' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='0b244c64' size-in-bits='64' id='5c6f8956'/>
+      <pointer-type-def type-id='9ed97fed' size-in-bits='64' id='962405e1'/>
+      <pointer-type-def type-id='1601b1ab' size-in-bits='64' id='6a8dfaef'/>
+      <pointer-type-def type-id='24bce3cf' size-in-bits='64' id='f8e1aa9b'/>
+      <pointer-type-def type-id='14617e76' size-in-bits='64' id='117460b0'/>
+      <pointer-type-def type-id='e4960e7f' size-in-bits='64' id='48d231fb'/>
+      <pointer-type-def type-id='3f7bc138' size-in-bits='64' id='6cbcc6da'/>
+      <pointer-type-def type-id='e82a9f1d' size-in-bits='64' id='ba21bbb1'/>
+      <pointer-type-def type-id='ab883904' size-in-bits='64' id='b79f9e36'/>
+      <pointer-type-def type-id='a2b102f9' size-in-bits='64' id='aec87d1d'/>
+      <pointer-type-def type-id='3bb4887b' size-in-bits='64' id='18ff560f'/>
+      <pointer-type-def type-id='7b49a935' size-in-bits='64' id='0a95e709'/>
+      <pointer-type-def type-id='b287e2b2' size-in-bits='64' id='a13d0c2c'/>
+      <pointer-type-def type-id='162c0977' size-in-bits='64' id='6f3b229b'/>
+      <pointer-type-def type-id='9d558819' size-in-bits='64' id='c0a3faf5'/>
+      <pointer-type-def type-id='f155b036' size-in-bits='64' id='e1c70e28'/>
+      <pointer-type-def type-id='13bb6c7c' size-in-bits='64' id='4ecb1656'/>
+      <pointer-type-def type-id='280730d4' size-in-bits='64' id='6e055dae'/>
+      <pointer-type-def type-id='25edcf18' size-in-bits='64' id='70be41da'/>
+      <pointer-type-def type-id='06706e9d' size-in-bits='64' id='10f733f9'/>
+      <pointer-type-def type-id='5178491e' size-in-bits='64' id='dd40abb0'/>
+      <pointer-type-def type-id='4706793b' size-in-bits='64' id='52e63b6f'/>
+      <pointer-type-def type-id='29c6d348' size-in-bits='64' id='ce828302'/>
+      <pointer-type-def type-id='13be673b' size-in-bits='64' id='1f370097'/>
+      <pointer-type-def type-id='30e75f3e' size-in-bits='64' id='d5f67e88'/>
+      <pointer-type-def type-id='7370d1f4' size-in-bits='64' id='cadab7d6'/>
+      <pointer-type-def type-id='8074b8e7' size-in-bits='64' id='7312c953'/>
+      <pointer-type-def type-id='10498fec' size-in-bits='64' id='fbd9657e'/>
+      <pointer-type-def type-id='a2a24eee' size-in-bits='64' id='456a5468'/>
+      <pointer-type-def type-id='28327a10' size-in-bits='64' id='517d0452'/>
+      <pointer-type-def type-id='232e3e4e' size-in-bits='64' id='318389e0'/>
+      <pointer-type-def type-id='302b8c85' size-in-bits='64' id='5797b7e1'/>
+      <pointer-type-def type-id='e64743d7' size-in-bits='64' id='15c573bb'/>
+      <pointer-type-def type-id='e3087f12' size-in-bits='64' id='7398303c'/>
+      <pointer-type-def type-id='dd378762' size-in-bits='64' id='771ff1ac'/>
+      <pointer-type-def type-id='258baccc' size-in-bits='64' id='a176c78e'/>
+      <pointer-type-def type-id='962c09bb' size-in-bits='64' id='9822fe67'/>
+      <pointer-type-def type-id='5895f71c' size-in-bits='64' id='243d1e96'/>
+      <pointer-type-def type-id='c66117cc' size-in-bits='64' id='f58cb656'/>
+      <pointer-type-def type-id='4a1c795d' size-in-bits='64' id='24213669'/>
+      <pointer-type-def type-id='aac69b6b' size-in-bits='64' id='e2f71a2f'/>
+      <pointer-type-def type-id='60d50d6a' size-in-bits='64' id='860d0bc4'/>
+      <pointer-type-def type-id='a73b2f11' size-in-bits='64' id='73892d6d'/>
+      <pointer-type-def type-id='857ecf83' size-in-bits='64' id='81068c97'/>
+      <pointer-type-def type-id='82fca516' size-in-bits='64' id='3b472dd8'/>
+      <pointer-type-def type-id='de826e86' size-in-bits='64' id='a3948f60'/>
+      <pointer-type-def type-id='d5c7d653' size-in-bits='64' id='5fa1787f'/>
+      <pointer-type-def type-id='f16e9b99' size-in-bits='64' id='0e0c1c5d'/>
+      <pointer-type-def type-id='6bb8016c' size-in-bits='64' id='41d02516'/>
+      <pointer-type-def type-id='c49062e0' size-in-bits='64' id='35b8846a'/>
+      <pointer-type-def type-id='17b31231' size-in-bits='64' id='6f077fdd'/>
+      <pointer-type-def type-id='bed27c38' size-in-bits='64' id='39e52da2'/>
+      <pointer-type-def type-id='817d10dc' size-in-bits='64' id='081ebe8e'/>
+      <pointer-type-def type-id='b8dcddba' size-in-bits='64' id='d2188e4c'/>
+      <class-decl name='v4l2_subdev_audio_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='304' column='1' id='e3913a59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='s_clock_freq' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_i2s_clock_freq' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='s_routing' type-id='f9d7b9fc' visibility='default' filepath='include/media/v4l2-subdev.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='s_stream' type-id='6d63cad6' visibility='default' filepath='include/media/v4l2-subdev.h' line='308' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_core_ops' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='188' column='1' id='b569b18c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='log_status' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_io_pin_config' type-id='c52b8c36' visibility='default' filepath='include/media/v4l2-subdev.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='load_fw' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reset' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='s_gpio' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ioctl' type-id='cafb3255' visibility='default' filepath='include/media/v4l2-subdev.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='compat_ioctl32' type-id='efb4ad67' visibility='default' filepath='include/media/v4l2-subdev.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='s_power' type-id='6d63cad6' visibility='default' filepath='include/media/v4l2-subdev.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='interrupt_service_routine' type-id='f3f22912' visibility='default' filepath='include/media/v4l2-subdev.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='subscribe_event' type-id='ae675015' visibility='default' filepath='include/media/v4l2-subdev.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='unsubscribe_event' type-id='ae675015' visibility='default' filepath='include/media/v4l2-subdev.h' line='210' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_ir_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='599' column='1' id='77a58158'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_read' type-id='db3c9452' visibility='default' filepath='include/media/v4l2-subdev.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_g_parameters' type-id='30f63774' visibility='default' filepath='include/media/v4l2-subdev.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx_s_parameters' type-id='30f63774' visibility='default' filepath='include/media/v4l2-subdev.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_write' type-id='db3c9452' visibility='default' filepath='include/media/v4l2-subdev.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_g_parameters' type-id='30f63774' visibility='default' filepath='include/media/v4l2-subdev.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_s_parameters' type-id='30f63774' visibility='default' filepath='include/media/v4l2-subdev.h' line='615' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_pad_ops' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='674' column='1' id='0382928e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init_cfg' type-id='c1d16b36' visibility='default' filepath='include/media/v4l2-subdev.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='enum_mbus_code' type-id='e188da98' visibility='default' filepath='include/media/v4l2-subdev.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='enum_frame_size' type-id='94b3d6fa' visibility='default' filepath='include/media/v4l2-subdev.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enum_frame_interval' type-id='966724ce' visibility='default' filepath='include/media/v4l2-subdev.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_fmt' type-id='3a53e3ec' visibility='default' filepath='include/media/v4l2-subdev.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_fmt' type-id='3a53e3ec' visibility='default' filepath='include/media/v4l2-subdev.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_selection' type-id='a56b7267' visibility='default' filepath='include/media/v4l2-subdev.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_selection' type-id='a56b7267' visibility='default' filepath='include/media/v4l2-subdev.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_edid' type-id='1da53a06' visibility='default' filepath='include/media/v4l2-subdev.h' line='698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_edid' type-id='1da53a06' visibility='default' filepath='include/media/v4l2-subdev.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dv_timings_cap' type-id='2af7cc71' visibility='default' filepath='include/media/v4l2-subdev.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='enum_dv_timings' type-id='d407a0d4' visibility='default' filepath='include/media/v4l2-subdev.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='link_validate' type-id='f73feb66' visibility='default' filepath='include/media/v4l2-subdev.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='get_frame_desc' type-id='f4b0728f' visibility='default' filepath='include/media/v4l2-subdev.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_frame_desc' type-id='f4b0728f' visibility='default' filepath='include/media/v4l2-subdev.h' line='711' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_sensor_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='501' column='1' id='6f6b42ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='g_skip_top_lines' type-id='b530e24b' visibility='default' filepath='include/media/v4l2-subdev.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='g_skip_frames' type-id='b530e24b' visibility='default' filepath='include/media/v4l2-subdev.h' line='503' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_tuner_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='264' column='1' id='40eafb47'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='standby' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_radio' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='s_frequency' type-id='8a4f973d' visibility='default' filepath='include/media/v4l2-subdev.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='g_frequency' type-id='d36d46c6' visibility='default' filepath='include/media/v4l2-subdev.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='enum_freq_bands' type-id='64144346' visibility='default' filepath='include/media/v4l2-subdev.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='g_tuner' type-id='3ac60b54' visibility='default' filepath='include/media/v4l2-subdev.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='s_tuner' type-id='3ba48c9f' visibility='default' filepath='include/media/v4l2-subdev.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='g_modulator' type-id='e60f1e27' visibility='default' filepath='include/media/v4l2-subdev.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='s_modulator' type-id='c99780b4' visibility='default' filepath='include/media/v4l2-subdev.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_type_addr' type-id='0f2da0bb' visibility='default' filepath='include/media/v4l2-subdev.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='s_config' type-id='f8acd34f' visibility='default' filepath='include/media/v4l2-subdev.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_vbi_ops' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='481' column='1' id='729f8f08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='decode_vbi_line' type-id='c6a521af' visibility='default' filepath='include/media/v4l2-subdev.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_vbi_data' type-id='03813572' visibility='default' filepath='include/media/v4l2-subdev.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='g_vbi_data' type-id='a49b3ef9' visibility='default' filepath='include/media/v4l2-subdev.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='g_sliced_vbi_cap' type-id='795cf0d1' visibility='default' filepath='include/media/v4l2-subdev.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='s_raw_fmt' type-id='740a3d8b' visibility='default' filepath='include/media/v4l2-subdev.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='g_sliced_fmt' type-id='b0487488' visibility='default' filepath='include/media/v4l2-subdev.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='s_sliced_fmt' type-id='b0487488' visibility='default' filepath='include/media/v4l2-subdev.h' line='488' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_video_ops' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='415' column='1' id='6eadcbe0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='s_routing' type-id='f9d7b9fc' visibility='default' filepath='include/media/v4l2-subdev.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_crystal_freq' type-id='1825e6b5' visibility='default' filepath='include/media/v4l2-subdev.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='g_std' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='s_std' type-id='1976ccf6' visibility='default' filepath='include/media/v4l2-subdev.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='s_std_output' type-id='1976ccf6' visibility='default' filepath='include/media/v4l2-subdev.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='g_std_output' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='querystd' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='g_tvnorms' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='g_tvnorms_output' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='g_input_status' type-id='b530e24b' visibility='default' filepath='include/media/v4l2-subdev.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='s_stream' type-id='6d63cad6' visibility='default' filepath='include/media/v4l2-subdev.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='g_pixelaspect' type-id='44b18db0' visibility='default' filepath='include/media/v4l2-subdev.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='g_frame_interval' type-id='7bd168bf' visibility='default' filepath='include/media/v4l2-subdev.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='s_frame_interval' type-id='7bd168bf' visibility='default' filepath='include/media/v4l2-subdev.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='s_dv_timings' type-id='afd7b47c' visibility='default' filepath='include/media/v4l2-subdev.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='g_dv_timings' type-id='afd7b47c' visibility='default' filepath='include/media/v4l2-subdev.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='query_dv_timings' type-id='afd7b47c' visibility='default' filepath='include/media/v4l2-subdev.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='g_mbus_config' type-id='ddaeaa9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='s_mbus_config' type-id='7c61dabd' visibility='default' filepath='include/media/v4l2-subdev.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='s_rx_buffer' type-id='02cea60b' visibility='default' filepath='include/media/v4l2-subdev.h' line='442' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='42c66597' size-in-bits='64' id='55d37973'/>
+      <pointer-type-def type-id='822ce289' size-in-bits='64' id='8a4f973d'/>
+      <pointer-type-def type-id='43b517a9' size-in-bits='64' id='7c61dabd'/>
+      <pointer-type-def type-id='3d684a5a' size-in-bits='64' id='c99780b4'/>
+      <pointer-type-def type-id='44ab747b' size-in-bits='64' id='f8acd34f'/>
+      <pointer-type-def type-id='714fe898' size-in-bits='64' id='03813572'/>
+      <pointer-type-def type-id='2966597b' size-in-bits='64' id='3ba48c9f'/>
+      <pointer-type-def type-id='261083fc' size-in-bits='64' id='6d63cad6'/>
+      <pointer-type-def type-id='efa4e33c' size-in-bits='64' id='f73feb66'/>
+      <pointer-type-def type-id='960d41bf' size-in-bits='64' id='0f2da0bb'/>
+      <pointer-type-def type-id='2d6f2c74' size-in-bits='64' id='c52b8c36'/>
+      <pointer-type-def type-id='ad810f54' size-in-bits='64' id='04cc4d9e'/>
+      <pointer-type-def type-id='5ba85b48' size-in-bits='64' id='f3f22912'/>
+      <pointer-type-def type-id='be643611' size-in-bits='64' id='1825e6b5'/>
+      <pointer-type-def type-id='24255cb2' size-in-bits='64' id='f9d7b9fc'/>
+      <pointer-type-def type-id='3d709624' size-in-bits='64' id='1976ccf6'/>
+      <pointer-type-def type-id='20cd6817' size-in-bits='64' id='b530e24b'/>
+      <pointer-type-def type-id='7b74b2c0' size-in-bits='64' id='db3c9452'/>
+      <pointer-type-def type-id='cc85da13' size-in-bits='64' id='f4b0728f'/>
+      <pointer-type-def type-id='8230f98b' size-in-bits='64' id='c6a521af'/>
+      <pointer-type-def type-id='17ae78d2' size-in-bits='64' id='afd7b47c'/>
+      <pointer-type-def type-id='18e34d1d' size-in-bits='64' id='2af7cc71'/>
+      <pointer-type-def type-id='f13a9afc' size-in-bits='64' id='1da53a06'/>
+      <pointer-type-def type-id='c763c2ea' size-in-bits='64' id='d407a0d4'/>
+      <pointer-type-def type-id='52e7eff9' size-in-bits='64' id='ae675015'/>
+      <pointer-type-def type-id='16b2c11e' size-in-bits='64' id='44b18db0'/>
+      <pointer-type-def type-id='354af324' size-in-bits='64' id='d36d46c6'/>
+      <pointer-type-def type-id='21419694' size-in-bits='64' id='64144346'/>
+      <pointer-type-def type-id='78b76b9c' size-in-bits='64' id='ddaeaa9e'/>
+      <pointer-type-def type-id='d2bdcec3' size-in-bits='64' id='e60f1e27'/>
+      <pointer-type-def type-id='0ffa0cdd' size-in-bits='64' id='795cf0d1'/>
+      <pointer-type-def type-id='e3d2455d' size-in-bits='64' id='a49b3ef9'/>
+      <pointer-type-def type-id='1e4a1386' size-in-bits='64' id='b0487488'/>
+      <pointer-type-def type-id='a8ee3f87' size-in-bits='64' id='865e6323'/>
+      <pointer-type-def type-id='1b424123' size-in-bits='64' id='7bd168bf'/>
+      <pointer-type-def type-id='604bba92' size-in-bits='64' id='30f63774'/>
+      <pointer-type-def type-id='122af7a4' size-in-bits='64' id='c1d16b36'/>
+      <pointer-type-def type-id='fea27882' size-in-bits='64' id='3a53e3ec'/>
+      <pointer-type-def type-id='f519d7ec' size-in-bits='64' id='966724ce'/>
+      <pointer-type-def type-id='404f4f30' size-in-bits='64' id='94b3d6fa'/>
+      <pointer-type-def type-id='0fdf477e' size-in-bits='64' id='e188da98'/>
+      <pointer-type-def type-id='fb3ed1d3' size-in-bits='64' id='a56b7267'/>
+      <pointer-type-def type-id='626191ca' size-in-bits='64' id='3ac60b54'/>
+      <pointer-type-def type-id='5cdc243f' size-in-bits='64' id='740a3d8b'/>
+      <pointer-type-def type-id='cfc17f8f' size-in-bits='64' id='02cea60b'/>
+      <pointer-type-def type-id='ea214f7b' size-in-bits='64' id='efb4ad67'/>
+      <pointer-type-def type-id='20a7e419' size-in-bits='64' id='cafb3255'/>
+      <function-type size-in-bits='64' id='52e7eff9'>
+        <parameter type-id='f5438ac7' name='sd'/>
+        <parameter type-id='b7db9582' name='fh'/>
+        <parameter type-id='8edac644' name='sub'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/media/v4l2-core/v4l2-dev.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='3158a266' size-in-bits='64' id='e5d37c7b'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='d315442e' size-in-bits='176' id='b0b8e94f'>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='d315442e' size-in-bits='768' id='025daa6d'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='24' type-id='7ff19f0f' id='fdd3342b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='d315442e' size-in-bits='96' id='81144473'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='352' id='9d263779'>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='512' id='9d2cf33e'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='32' id='439be632'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='1024' id='734a963c'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='288' id='43885e7a'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='1600' id='0530f1a6'>
+        <subrange length='200' type-id='7ff19f0f' id='53119c2f'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='368' id='0ddb15d8'>
+        <subrange length='46' type-id='7ff19f0f' id='8b86bc1b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='384' id='51dffe12'>
+        <subrange length='48' type-id='7ff19f0f' id='8f6d2a81'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='56' id='c20b850f'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='49178f86' size-in-bits='128' id='6ed968f3'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='288' id='16e6f2c6'>
+        <subrange length='36' type-id='7ff19f0f' id='ae666bde'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='480' id='59e5814b'>
+        <subrange length='60' type-id='7ff19f0f' id='b114e3c3'/>
+      </array-type-def>
+      <class-decl name='tuner_setup' is-struct='yes' visibility='default' is-declaration-only='yes' id='de57f169'/>
+      <class-decl name='v4l2_ctrl_handler' is-struct='yes' visibility='default' is-declaration-only='yes' id='d6130049'/>
+      <class-decl name='v4l2_m2m_ctx' size-in-bits='14336' is-struct='yes' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='99' column='1' id='e1b58b0e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q_lock' type-id='e0ea832a' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='new_frame' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='is_draining' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='last_src_buf' type-id='9a42d4cd' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next_buf_last' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='has_stopped' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='m2m_dev' type-id='b50ade7a' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cap_q_ctx' type-id='0651f1ee' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='out_q_ctx' type-id='0651f1ee' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13888'>
+          <var-decl name='queue' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14016'>
+          <var-decl name='job_flags' type-id='7359adad' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14080'>
+          <var-decl name='finished' type-id='b5ab048f' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14272'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='122' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_queue' is-struct='yes' visibility='default' is-declaration-only='yes' id='6b30321e'/>
+      <array-type-def dimensions='1' type-id='59b5b331' size-in-bits='16384' id='faa42463'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f51d9e86' size-in-bits='384' id='085421f4'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='69ab6968' size-in-bits='1280' id='15b94482'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='video_device' size-in-bits='12416' is-struct='yes' visibility='default' filepath='include/media/v4l2-dev.h' line='256' column='1' id='a4b3744f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entity' type-id='889856f7' visibility='default' filepath='include/media/v4l2-dev.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='intf_devnode' type-id='8114c6c9' visibility='default' filepath='include/media/v4l2-dev.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='pipe' type-id='2783658a' visibility='default' filepath='include/media/v4l2-dev.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='fops' type-id='1e4c840c' visibility='default' filepath='include/media/v4l2-dev.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='device_caps' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-dev.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/media/v4l2-dev.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='cdev' type-id='3e6eb93a' visibility='default' filepath='include/media/v4l2-dev.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='v4l2_dev' type-id='ddfb71fa' visibility='default' filepath='include/media/v4l2-dev.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='dev_parent' type-id='fa0b179b' visibility='default' filepath='include/media/v4l2-dev.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='ctrl_handler' type-id='2b59fa5f' visibility='default' filepath='include/media/v4l2-dev.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='queue' type-id='a05f1ece' visibility='default' filepath='include/media/v4l2-dev.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='prio' type-id='2fc4734c' visibility='default' filepath='include/media/v4l2-dev.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/media/v4l2-dev.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='vfl_type' type-id='24df61b5' visibility='default' filepath='include/media/v4l2-dev.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11552'>
+          <var-decl name='vfl_dir' type-id='366ec232' visibility='default' filepath='include/media/v4l2-dev.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-dev.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11616'>
+          <var-decl name='num' type-id='1dc6a898' visibility='default' filepath='include/media/v4l2-dev.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/v4l2-dev.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-dev.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11744'>
+          <var-decl name='fh_lock' type-id='fb4018a0' visibility='default' filepath='include/media/v4l2-dev.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='fh_list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-dev.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='dev_debug' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-dev.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='tvnorms' type-id='692d176e' visibility='default' filepath='include/media/v4l2-dev.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='release' type-id='3007e20a' visibility='default' filepath='include/media/v4l2-dev.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='ioctl_ops' type-id='b94745b1' visibility='default' filepath='include/media/v4l2-dev.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='valid_ioctls' type-id='3461381a' visibility='default' filepath='include/media/v4l2-dev.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='lock' type-id='e0ea832a' visibility='default' filepath='include/media/v4l2-dev.h' line='302' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_file_operations' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/media/v4l2-dev.h' line='193' column='1' id='58b9b3eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/media/v4l2-dev.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read' type-id='4d8f5625' visibility='default' filepath='include/media/v4l2-dev.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write' type-id='5f29549c' visibility='default' filepath='include/media/v4l2-dev.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='poll' type-id='4d01ede7' visibility='default' filepath='include/media/v4l2-dev.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unlocked_ioctl' type-id='fc7daf55' visibility='default' filepath='include/media/v4l2-dev.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='compat_ioctl32' type-id='fc7daf55' visibility='default' filepath='include/media/v4l2-dev.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_unmapped_area' type-id='d44a8cec' visibility='default' filepath='include/media/v4l2-dev.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mmap' type-id='8ea2626c' visibility='default' filepath='include/media/v4l2-dev.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='open' type-id='4da4101d' visibility='default' filepath='include/media/v4l2-dev.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='release' type-id='4da4101d' visibility='default' filepath='include/media/v4l2-dev.h' line='206' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_device' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/media/v4l2-device.h' line='47' column='1' id='f1828bdc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/media/v4l2-device.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mdev' type-id='e2929c1c' visibility='default' filepath='include/media/v4l2-device.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='subdevs' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-device.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/media/v4l2-device.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='name' type-id='16e6f2c6' visibility='default' filepath='include/media/v4l2-device.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='notify' type-id='9f5eb43a' visibility='default' filepath='include/media/v4l2-device.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ctrl_handler' type-id='2b59fa5f' visibility='default' filepath='include/media/v4l2-device.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='prio' type-id='281d3096' visibility='default' filepath='include/media/v4l2-device.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/media/v4l2-device.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='release' type-id='8dfbe74f' visibility='default' filepath='include/media/v4l2-device.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='848' column='1' id='59eccc2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entity' type-id='889856f7' visibility='default' filepath='include/media/v4l2-subdev.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-subdev.h' line='852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/media/v4l2-subdev.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='owner_v4l2_dev' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-subdev.h' line='854' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='v4l2_dev' type-id='ddfb71fa' visibility='default' filepath='include/media/v4l2-subdev.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ops' type-id='040770fb' visibility='default' filepath='include/media/v4l2-subdev.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='internal_ops' type-id='2553c323' visibility='default' filepath='include/media/v4l2-subdev.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ctrl_handler' type-id='2b59fa5f' visibility='default' filepath='include/media/v4l2-subdev.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/media/v4l2-subdev.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='grp_id' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='dev_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-subdev.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='host_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-subdev.h' line='863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='devnode' type-id='798c29b7' visibility='default' filepath='include/media/v4l2-subdev.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/media/v4l2-subdev.h' line='865' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/media/v4l2-subdev.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='async_list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-subdev.h' line='867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='asd' type-id='707be29c' visibility='default' filepath='include/media/v4l2-subdev.h' line='868' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='notifier' type-id='e1a56841' visibility='default' filepath='include/media/v4l2-subdev.h' line='869' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='subdev_notifier' type-id='e1a56841' visibility='default' filepath='include/media/v4l2-subdev.h' line='870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='pdata' type-id='616ec7d2' visibility='default' filepath='include/media/v4l2-subdev.h' line='871' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='727' column='1' id='026dac7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='core' type-id='5317b3cd' visibility='default' filepath='include/media/v4l2-subdev.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tuner' type-id='12d4fd76' visibility='default' filepath='include/media/v4l2-subdev.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='audio' type-id='2d92dd30' visibility='default' filepath='include/media/v4l2-subdev.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='video' type-id='5a7c2847' visibility='default' filepath='include/media/v4l2-subdev.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vbi' type-id='cc679d2b' visibility='default' filepath='include/media/v4l2-subdev.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ir' type-id='7bd796c9' visibility='default' filepath='include/media/v4l2-subdev.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sensor' type-id='b2ac7a1e' visibility='default' filepath='include/media/v4l2-subdev.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pad' type-id='475ad931' visibility='default' filepath='include/media/v4l2-subdev.h' line='735' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_core_ops' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='188' column='1' id='b569b18c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='log_status' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_io_pin_config' type-id='c52b8c36' visibility='default' filepath='include/media/v4l2-subdev.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='load_fw' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reset' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='s_gpio' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ioctl' type-id='cafb3255' visibility='default' filepath='include/media/v4l2-subdev.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='compat_ioctl32' type-id='efb4ad67' visibility='default' filepath='include/media/v4l2-subdev.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='s_power' type-id='6d63cad6' visibility='default' filepath='include/media/v4l2-subdev.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='interrupt_service_routine' type-id='f3f22912' visibility='default' filepath='include/media/v4l2-subdev.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='subscribe_event' type-id='ae675015' visibility='default' filepath='include/media/v4l2-subdev.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='unsubscribe_event' type-id='ae675015' visibility='default' filepath='include/media/v4l2-subdev.h' line='210' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_io_pin_config' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='132' column='1' id='82096067'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pin' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-subdev.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='function' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-subdev.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='value' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-subdev.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='strength' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-subdev.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_fh' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/media/v4l2-fh.h' line='42' column='1' id='53422e64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-fh.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vdev' type-id='798c29b7' visibility='default' filepath='include/media/v4l2-fh.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ctrl_handler' type-id='2b59fa5f' visibility='default' filepath='include/media/v4l2-fh.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='prio' type-id='8b60a0b9' visibility='default' filepath='include/media/v4l2-fh.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/media/v4l2-fh.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='subscribe_lock' type-id='925167dc' visibility='default' filepath='include/media/v4l2-fh.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='subscribed' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-fh.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='available' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-fh.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='navailable' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-fh.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='sequence' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-fh.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='m2m_ctx' type-id='2c7f1dc4' visibility='default' filepath='include/media/v4l2-fh.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='v4l2_priority' filepath='include/uapi/linux/videodev2.h' line='404' column='1' id='8b60a0b9'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_PRIORITY_UNSET' value='0'/>
+        <enumerator name='V4L2_PRIORITY_BACKGROUND' value='1'/>
+        <enumerator name='V4L2_PRIORITY_INTERACTIVE' value='2'/>
+        <enumerator name='V4L2_PRIORITY_RECORD' value='3'/>
+        <enumerator name='V4L2_PRIORITY_DEFAULT' value='2'/>
+      </enum-decl>
+      <class-decl name='v4l2_event_subscription' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2351' column='1' id='1251351e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='83a5454e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2355' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_tuner_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='264' column='1' id='40eafb47'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='standby' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_radio' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='s_frequency' type-id='8a4f973d' visibility='default' filepath='include/media/v4l2-subdev.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='g_frequency' type-id='d36d46c6' visibility='default' filepath='include/media/v4l2-subdev.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='enum_freq_bands' type-id='64144346' visibility='default' filepath='include/media/v4l2-subdev.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='g_tuner' type-id='3ac60b54' visibility='default' filepath='include/media/v4l2-subdev.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='s_tuner' type-id='3ba48c9f' visibility='default' filepath='include/media/v4l2-subdev.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='g_modulator' type-id='e60f1e27' visibility='default' filepath='include/media/v4l2-subdev.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='s_modulator' type-id='c99780b4' visibility='default' filepath='include/media/v4l2-subdev.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_type_addr' type-id='0f2da0bb' visibility='default' filepath='include/media/v4l2-subdev.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='s_config' type-id='f8acd34f' visibility='default' filepath='include/media/v4l2-subdev.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_frequency' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1861' column='1' id='a15ecb0c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tuner' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frequency' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1865' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_frequency_band' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1872' column='1' id='400ed05a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tuner' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1873' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='capability' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rangelow' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1877' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rangehigh' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1878' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='modulation' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='reserved' type-id='43885e7a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1880' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_tuner' size-in-bits='672' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1804' column='1' id='fd240b02'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='capability' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1808' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='rangelow' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1809' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rangehigh' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='rxsubchans' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='audmode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='signal' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1813' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='afc' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='reserved' type-id='3fa29bab' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1815' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_modulator' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1818' column='1' id='7c3a095f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1819' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1820' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='capability' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1821' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rangelow' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1822' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='rangehigh' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1823' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='txsubchans' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1824' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1825' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='reserved' type-id='3fa05d14' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1826' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_priv_tun_config' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/v4l2-common.h' line='335' column='1' id='52c7f7a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tuner' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-common.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-common.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_audio_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='304' column='1' id='e3913a59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='s_clock_freq' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_i2s_clock_freq' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='s_routing' type-id='f9d7b9fc' visibility='default' filepath='include/media/v4l2-subdev.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='s_stream' type-id='6d63cad6' visibility='default' filepath='include/media/v4l2-subdev.h' line='308' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_video_ops' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='415' column='1' id='6eadcbe0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='s_routing' type-id='f9d7b9fc' visibility='default' filepath='include/media/v4l2-subdev.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_crystal_freq' type-id='1825e6b5' visibility='default' filepath='include/media/v4l2-subdev.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='g_std' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='s_std' type-id='1976ccf6' visibility='default' filepath='include/media/v4l2-subdev.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='s_std_output' type-id='1976ccf6' visibility='default' filepath='include/media/v4l2-subdev.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='g_std_output' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='querystd' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='g_tvnorms' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='g_tvnorms_output' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='g_input_status' type-id='b530e24b' visibility='default' filepath='include/media/v4l2-subdev.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='s_stream' type-id='6d63cad6' visibility='default' filepath='include/media/v4l2-subdev.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='g_pixelaspect' type-id='44b18db0' visibility='default' filepath='include/media/v4l2-subdev.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='g_frame_interval' type-id='7bd168bf' visibility='default' filepath='include/media/v4l2-subdev.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='s_frame_interval' type-id='7bd168bf' visibility='default' filepath='include/media/v4l2-subdev.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='s_dv_timings' type-id='afd7b47c' visibility='default' filepath='include/media/v4l2-subdev.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='g_dv_timings' type-id='afd7b47c' visibility='default' filepath='include/media/v4l2-subdev.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='query_dv_timings' type-id='afd7b47c' visibility='default' filepath='include/media/v4l2-subdev.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='g_mbus_config' type-id='ddaeaa9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='s_mbus_config' type-id='7c61dabd' visibility='default' filepath='include/media/v4l2-subdev.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='s_rx_buffer' type-id='02cea60b' visibility='default' filepath='include/media/v4l2-subdev.h' line='442' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='v4l2_std_id' type-id='d3130597' filepath='include/uapi/linux/videodev2.h' line='1219' column='1' id='692d176e'/>
+      <class-decl name='v4l2_fract' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='419' column='1' id='5f37256e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='numerator' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='denominator' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='421' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_frame_interval' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='107' column='1' id='e346e6f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pad' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='interval' type-id='5f37256e' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='43885e7a' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_dv_timings' size-in-bits='1056' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1518' column='1' id='9a25f4b0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='' type-id='d749ec6e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1520' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='1024' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1520' column='1' id='d749ec6e'>
+        <data-member access='private'>
+          <var-decl name='bt' type-id='ecc13ba0' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1521' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='reserved' type-id='734a963c' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1522' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_bt_timings' size-in-bits='992' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1395' column='1' id='ecc13ba0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='interlaced' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='polarities' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pixelclock' type-id='d3130597' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hfrontporch' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='hsync' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='hbackporch' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='vfrontporch' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='vsync' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='vbackporch' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='il_vfrontporch' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='il_vsync' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='il_vbackporch' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='standards' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='picture_aspect' type-id='5f37256e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='cea861_vic' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='616'>
+          <var-decl name='hdmi_vic' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='624'>
+          <var-decl name='reserved' type-id='0ddb15d8' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1415' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_mbus_config' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/v4l2-mediabus.h' line='99' column='1' id='a0776e3c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='e34ed0c3' visibility='default' filepath='include/media/v4l2-mediabus.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-mediabus.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='v4l2_mbus_type' filepath='include/media/v4l2-mediabus.h' line='83' column='1' id='e34ed0c3'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_MBUS_UNKNOWN' value='0'/>
+        <enumerator name='V4L2_MBUS_PARALLEL' value='1'/>
+        <enumerator name='V4L2_MBUS_BT656' value='2'/>
+        <enumerator name='V4L2_MBUS_CSI1' value='3'/>
+        <enumerator name='V4L2_MBUS_CCP2' value='4'/>
+        <enumerator name='V4L2_MBUS_CSI2_DPHY' value='5'/>
+        <enumerator name='V4L2_MBUS_CSI2_CPHY' value='6'/>
+        <enumerator name='V4L2_MBUS_INVALID' value='7'/>
+      </enum-decl>
+      <class-decl name='v4l2_subdev_vbi_ops' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='481' column='1' id='729f8f08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='decode_vbi_line' type-id='c6a521af' visibility='default' filepath='include/media/v4l2-subdev.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_vbi_data' type-id='03813572' visibility='default' filepath='include/media/v4l2-subdev.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='g_vbi_data' type-id='a49b3ef9' visibility='default' filepath='include/media/v4l2-subdev.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='g_sliced_vbi_cap' type-id='795cf0d1' visibility='default' filepath='include/media/v4l2-subdev.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='s_raw_fmt' type-id='740a3d8b' visibility='default' filepath='include/media/v4l2-subdev.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='g_sliced_fmt' type-id='b0487488' visibility='default' filepath='include/media/v4l2-subdev.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='s_sliced_fmt' type-id='b0487488' visibility='default' filepath='include/media/v4l2-subdev.h' line='488' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_decode_vbi_line' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='52' column='1' id='eea20e13'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_second_field' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='p' type-id='8bff8096' visibility='default' filepath='include/media/v4l2-subdev.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='line' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='type' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_sliced_vbi_data' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2107' column='1' id='6fab59d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='line' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='51dffe12' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2112' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_sliced_vbi_cap' size-in-bits='928' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2096' column='1' id='97ed0ee7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='service_set' type-id='d315442e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2097' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='service_lines' type-id='025daa6d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reserved' type-id='3fa05d14' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vbi_format' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2044' column='1' id='ae01ca89'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sampling_rate' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='samples_per_line' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='sample_format' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='start' type-id='e5d37c7b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='count' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2052' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_sliced_vbi_format' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2072' column='1' id='a2be7826'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='service_set' type-id='d315442e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2073' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='service_lines' type-id='025daa6d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='io_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2080' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_ir_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='599' column='1' id='77a58158'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_read' type-id='db3c9452' visibility='default' filepath='include/media/v4l2-subdev.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_g_parameters' type-id='30f63774' visibility='default' filepath='include/media/v4l2-subdev.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx_s_parameters' type-id='30f63774' visibility='default' filepath='include/media/v4l2-subdev.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_write' type-id='db3c9452' visibility='default' filepath='include/media/v4l2-subdev.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_g_parameters' type-id='30f63774' visibility='default' filepath='include/media/v4l2-subdev.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_s_parameters' type-id='30f63774' visibility='default' filepath='include/media/v4l2-subdev.h' line='615' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_ir_parameters' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='540' column='1' id='0b2fc110'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bytes_per_data_element' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-subdev.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mode' type-id='562dbe04' visibility='default' filepath='include/media/v4l2-subdev.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='enable' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-subdev.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='interrupt_enable' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-subdev.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='shutdown' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-subdev.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='modulation' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-subdev.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_pulse_width' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='carrier_freq' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-subdev.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='duty_cycle' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-subdev.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='invert_level' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-subdev.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='invert_carrier_sense' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-subdev.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='noise_filter_min_width' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='carrier_range_lower' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-subdev.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='carrier_range_upper' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-subdev.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resolution' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='561' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='v4l2_subdev_ir_mode' filepath='include/media/v4l2-subdev.h' line='511' column='1' id='562dbe04'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_SUBDEV_IR_MODE_PULSE_WIDTH' value='0'/>
+      </enum-decl>
+      <class-decl name='v4l2_subdev_sensor_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='501' column='1' id='6f6b42ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='g_skip_top_lines' type-id='b530e24b' visibility='default' filepath='include/media/v4l2-subdev.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='g_skip_frames' type-id='b530e24b' visibility='default' filepath='include/media/v4l2-subdev.h' line='503' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_pad_ops' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='674' column='1' id='0382928e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init_cfg' type-id='c1d16b36' visibility='default' filepath='include/media/v4l2-subdev.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='enum_mbus_code' type-id='e188da98' visibility='default' filepath='include/media/v4l2-subdev.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='enum_frame_size' type-id='94b3d6fa' visibility='default' filepath='include/media/v4l2-subdev.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enum_frame_interval' type-id='966724ce' visibility='default' filepath='include/media/v4l2-subdev.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_fmt' type-id='3a53e3ec' visibility='default' filepath='include/media/v4l2-subdev.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_fmt' type-id='3a53e3ec' visibility='default' filepath='include/media/v4l2-subdev.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_selection' type-id='a56b7267' visibility='default' filepath='include/media/v4l2-subdev.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_selection' type-id='a56b7267' visibility='default' filepath='include/media/v4l2-subdev.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_edid' type-id='1da53a06' visibility='default' filepath='include/media/v4l2-subdev.h' line='698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_edid' type-id='1da53a06' visibility='default' filepath='include/media/v4l2-subdev.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dv_timings_cap' type-id='2af7cc71' visibility='default' filepath='include/media/v4l2-subdev.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='enum_dv_timings' type-id='d407a0d4' visibility='default' filepath='include/media/v4l2-subdev.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='link_validate' type-id='f73feb66' visibility='default' filepath='include/media/v4l2-subdev.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='get_frame_desc' type-id='f4b0728f' visibility='default' filepath='include/media/v4l2-subdev.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_frame_desc' type-id='f4b0728f' visibility='default' filepath='include/media/v4l2-subdev.h' line='711' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_pad_config' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='630' column='1' id='d2ffa1e8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='try_fmt' type-id='87dd7486' visibility='default' filepath='include/media/v4l2-subdev.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='try_crop' type-id='3dbd4e78' visibility='default' filepath='include/media/v4l2-subdev.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='try_compose' type-id='3dbd4e78' visibility='default' filepath='include/media/v4l2-subdev.h' line='633' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_mbus_framefmt' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='30' column='1' id='87dd7486'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='code' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='colorspace' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ycbcr_enc' type-id='d315442e' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='quantization' type-id='d315442e' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='xfer_func' type-id='d315442e' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='reserved' type-id='b0b8e94f' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_rect' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='412' column='1' id='3dbd4e78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='left' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='top' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='416' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_mbus_code_enum' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='75' column='1' id='f3aba577'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pad' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='code' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='which' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reserved' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_frame_size_enum' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='90' column='1' id='b9c125a5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pad' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='code' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='min_width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='min_height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='which' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reserved' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_frame_interval_enum' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='123' column='1' id='fb0dbd21'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pad' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='code' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='interval' type-id='5f37256e' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='which' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reserved' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_format' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='48' column='1' id='23f90633'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='which' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pad' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='format' type-id='87dd7486' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='reserved' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_selection' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='149' column='1' id='f4c2725e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='which' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pad' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='target' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='r' type-id='3dbd4e78' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reserved' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='155' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_edid' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/v4l2-common.h' line='87' column='1' id='54bf0f36'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pad' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-common.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='start_block' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-common.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='blocks' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-common.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='83a5454e' visibility='default' filepath='include/uapi/linux/v4l2-common.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='edid' type-id='474e5dcc' visibility='default' filepath='include/uapi/linux/v4l2-common.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_dv_timings_cap' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1582' column='1' id='cdb274e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pad' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='7bbb3c88' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1586' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='1024' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1586' column='1' id='7bbb3c88'>
+        <data-member access='private'>
+          <var-decl name='bt' type-id='e5bfe593' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1587' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw_data' type-id='734a963c' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1588' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_bt_timings_cap' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1555' column='1' id='e5bfe593'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min_height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='min_pixelclock' type-id='d3130597' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_pixelclock' type-id='d3130597' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='standards' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='capabilities' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reserved' type-id='9d2cf33e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1564' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_enum_dv_timings' size-in-bits='1184' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1537' column='1' id='b6da1a0e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pad' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timings' type-id='9a25f4b0' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1541' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_mbus_frame_desc' size-in-bits='416' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='348' column='1' id='9a759b95'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entry' type-id='085421f4' visibility='default' filepath='include/media/v4l2-subdev.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='num_entries' type-id='8efea9e5' visibility='default' filepath='include/media/v4l2-subdev.h' line='350' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_mbus_frame_desc_entry' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='335' column='1' id='f51d9e86'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='97a0eabc' visibility='default' filepath='include/media/v4l2-subdev.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pixelcode' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='length' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='338' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='v4l2_mbus_frame_desc_flags' filepath='include/media/v4l2-subdev.h' line='321' column='1' id='97a0eabc'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_MBUS_FRAME_DESC_FL_LEN_MAX' value='1'/>
+        <enumerator name='V4L2_MBUS_FRAME_DESC_FL_BLOB' value='2'/>
+      </enum-decl>
+      <class-decl name='v4l2_subdev_internal_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='765' column='1' id='d36f034a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='registered' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unregistered' type-id='1625ce7a' visibility='default' filepath='include/media/v4l2-subdev.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='open' type-id='618f91b8' visibility='default' filepath='include/media/v4l2-subdev.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='close' type-id='618f91b8' visibility='default' filepath='include/media/v4l2-subdev.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='1625ce7a' visibility='default' filepath='include/media/v4l2-subdev.h' line='770' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_fh' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='906' column='1' id='43b269de'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vfh' type-id='53422e64' visibility='default' filepath='include/media/v4l2-subdev.h' line='907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/media/v4l2-subdev.h' line='908' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='pad' type-id='288e890e' visibility='default' filepath='include/media/v4l2-subdev.h' line='910' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_async_subdev' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/v4l2-async.h' line='79' column='1' id='c2e9ee66'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='match_type' type-id='d03a4ada' visibility='default' filepath='include/media/v4l2-async.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='match' type-id='5c61413a' visibility='default' filepath='include/media/v4l2-async.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='asd_list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='v4l2_async_match_type' filepath='include/media/v4l2-async.h' line='33' column='1' id='d03a4ada'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_ASYNC_MATCH_CUSTOM' value='0'/>
+        <enumerator name='V4L2_ASYNC_MATCH_DEVNAME' value='1'/>
+        <enumerator name='V4L2_ASYNC_MATCH_I2C' value='2'/>
+        <enumerator name='V4L2_ASYNC_MATCH_FWNODE' value='3'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-async.h' line='81' column='1' id='5c61413a'>
+        <data-member access='private'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/media/v4l2-async.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='device_name' type-id='80f4b756' visibility='default' filepath='include/media/v4l2-async.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i2c' type-id='02403573' visibility='default' filepath='include/media/v4l2-async.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='custom' type-id='2e3fe03c' visibility='default' filepath='include/media/v4l2-async.h' line='92' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-async.h' line='84' column='1' id='02403573'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='adapter_id' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-async.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='address' type-id='8efea9e5' visibility='default' filepath='include/media/v4l2-async.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-async.h' line='88' column='1' id='2e3fe03c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='match' type-id='5c6f8956' visibility='default' filepath='include/media/v4l2-async.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-async.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_async_notifier' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/media/v4l2-async.h' line='129' column='1' id='7e833f79'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='17c9f4a9' visibility='default' filepath='include/media/v4l2-async.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='v4l2_dev' type-id='ddfb71fa' visibility='default' filepath='include/media/v4l2-async.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sd' type-id='f5438ac7' visibility='default' filepath='include/media/v4l2-async.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parent' type-id='e1a56841' visibility='default' filepath='include/media/v4l2-async.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='asd_list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='waiting' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='done' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_async_notifier_operations' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/v4l2-async.h' line='107' column='1' id='ca8c574c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bound' type-id='39e52da2' visibility='default' filepath='include/media/v4l2-async.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='complete' type-id='6f077fdd' visibility='default' filepath='include/media/v4l2-async.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='unbind' type-id='55d37973' visibility='default' filepath='include/media/v4l2-async.h' line='112' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_platform_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='797' column='1' id='415476f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='regulators' type-id='776946b4' visibility='default' filepath='include/media/v4l2-subdev.h' line='798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_regulators' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-subdev.h' line='799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='host_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-subdev.h' line='801' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_prio_state' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/v4l2-dev.h' line='104' column='1' id='281d3096'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prios' type-id='6ed968f3' visibility='default' filepath='include/media/v4l2-dev.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='vfl_devnode_type' filepath='include/media/v4l2-dev.h' line='35' column='1' id='24df61b5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='VFL_TYPE_GRABBER' value='0'/>
+        <enumerator name='VFL_TYPE_VBI' value='1'/>
+        <enumerator name='VFL_TYPE_RADIO' value='2'/>
+        <enumerator name='VFL_TYPE_SUBDEV' value='3'/>
+        <enumerator name='VFL_TYPE_SDR' value='4'/>
+        <enumerator name='VFL_TYPE_TOUCH' value='5'/>
+        <enumerator name='VFL_TYPE_MAX' value='6'/>
+      </enum-decl>
+      <enum-decl name='vfl_devnode_direction' filepath='include/media/v4l2-dev.h' line='55' column='1' id='366ec232'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='VFL_DIR_RX' value='0'/>
+        <enumerator name='VFL_DIR_TX' value='1'/>
+        <enumerator name='VFL_DIR_M2M' value='2'/>
+      </enum-decl>
+      <class-decl name='v4l2_ioctl_ops' size-in-bits='7616' is-struct='yes' visibility='default' filepath='include/media/v4l2-ioctl.h' line='296' column='1' id='eb7c81d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vidioc_querycap' type-id='70be41da' visibility='default' filepath='include/media/v4l2-ioctl.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vidioc_enum_fmt_vid_cap' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vidioc_enum_fmt_vid_overlay' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vidioc_enum_fmt_vid_out' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vidioc_enum_fmt_sdr_cap' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='vidioc_enum_fmt_sdr_out' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='vidioc_enum_fmt_meta_cap' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='vidioc_enum_fmt_meta_out' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='vidioc_g_fmt_vid_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='vidioc_g_fmt_vid_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vidioc_g_fmt_vid_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vidioc_g_fmt_vid_out_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='vidioc_g_fmt_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='vidioc_g_fmt_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='vidioc_g_fmt_sliced_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='vidioc_g_fmt_sliced_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='vidioc_g_fmt_vid_cap_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='vidioc_g_fmt_vid_out_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='vidioc_g_fmt_sdr_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='vidioc_g_fmt_sdr_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='vidioc_g_fmt_meta_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='vidioc_g_fmt_meta_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='vidioc_s_fmt_vid_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='vidioc_s_fmt_vid_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='vidioc_s_fmt_vid_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='vidioc_s_fmt_vid_out_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='vidioc_s_fmt_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='vidioc_s_fmt_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='vidioc_s_fmt_sliced_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='vidioc_s_fmt_sliced_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='vidioc_s_fmt_vid_cap_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='vidioc_s_fmt_vid_out_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='vidioc_s_fmt_sdr_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='vidioc_s_fmt_sdr_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='vidioc_s_fmt_meta_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='vidioc_s_fmt_meta_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='vidioc_try_fmt_vid_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='vidioc_try_fmt_vid_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='vidioc_try_fmt_vid_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='vidioc_try_fmt_vid_out_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='vidioc_try_fmt_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='vidioc_try_fmt_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='vidioc_try_fmt_sliced_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='vidioc_try_fmt_sliced_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='vidioc_try_fmt_vid_cap_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='vidioc_try_fmt_vid_out_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='vidioc_try_fmt_sdr_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='vidioc_try_fmt_sdr_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='vidioc_try_fmt_meta_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='vidioc_try_fmt_meta_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='vidioc_reqbufs' type-id='3b472dd8' visibility='default' filepath='include/media/v4l2-ioctl.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='vidioc_querybuf' type-id='6e055dae' visibility='default' filepath='include/media/v4l2-ioctl.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='vidioc_qbuf' type-id='6e055dae' visibility='default' filepath='include/media/v4l2-ioctl.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='vidioc_expbuf' type-id='456a5468' visibility='default' filepath='include/media/v4l2-ioctl.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='vidioc_dqbuf' type-id='6e055dae' visibility='default' filepath='include/media/v4l2-ioctl.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='vidioc_create_bufs' type-id='dd40abb0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='vidioc_prepare_buf' type-id='6e055dae' visibility='default' filepath='include/media/v4l2-ioctl.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='vidioc_overlay' type-id='6f3b229b' visibility='default' filepath='include/media/v4l2-ioctl.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='vidioc_g_fbuf' type-id='15c573bb' visibility='default' filepath='include/media/v4l2-ioctl.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='vidioc_s_fbuf' type-id='117460b0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='vidioc_streamon' type-id='18ff560f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='vidioc_streamoff' type-id='18ff560f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='vidioc_g_std' type-id='0e0c1c5d' visibility='default' filepath='include/media/v4l2-ioctl.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='vidioc_s_std' type-id='a13d0c2c' visibility='default' filepath='include/media/v4l2-ioctl.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='vidioc_querystd' type-id='0e0c1c5d' visibility='default' filepath='include/media/v4l2-ioctl.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='vidioc_enum_input' type-id='243d1e96' visibility='default' filepath='include/media/v4l2-ioctl.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='vidioc_g_input' type-id='c0a3faf5' visibility='default' filepath='include/media/v4l2-ioctl.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='vidioc_s_input' type-id='6f3b229b' visibility='default' filepath='include/media/v4l2-ioctl.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='vidioc_enum_output' type-id='e2f71a2f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='vidioc_g_output' type-id='c0a3faf5' visibility='default' filepath='include/media/v4l2-ioctl.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='vidioc_s_output' type-id='6f3b229b' visibility='default' filepath='include/media/v4l2-ioctl.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='vidioc_queryctrl' type-id='73892d6d' visibility='default' filepath='include/media/v4l2-ioctl.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='vidioc_query_ext_ctrl' type-id='860d0bc4' visibility='default' filepath='include/media/v4l2-ioctl.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='vidioc_g_ctrl' type-id='10f733f9' visibility='default' filepath='include/media/v4l2-ioctl.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='vidioc_s_ctrl' type-id='10f733f9' visibility='default' filepath='include/media/v4l2-ioctl.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='vidioc_g_ext_ctrls' type-id='517d0452' visibility='default' filepath='include/media/v4l2-ioctl.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='vidioc_s_ext_ctrls' type-id='517d0452' visibility='default' filepath='include/media/v4l2-ioctl.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='vidioc_try_ext_ctrls' type-id='517d0452' visibility='default' filepath='include/media/v4l2-ioctl.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='vidioc_querymenu' type-id='81068c97' visibility='default' filepath='include/media/v4l2-ioctl.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='vidioc_enumaudio' type-id='e1c70e28' visibility='default' filepath='include/media/v4l2-ioctl.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='vidioc_g_audio' type-id='e1c70e28' visibility='default' filepath='include/media/v4l2-ioctl.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='vidioc_s_audio' type-id='6a8dfaef' visibility='default' filepath='include/media/v4l2-ioctl.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='vidioc_enumaudout' type-id='4ecb1656' visibility='default' filepath='include/media/v4l2-ioctl.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='vidioc_g_audout' type-id='4ecb1656' visibility='default' filepath='include/media/v4l2-ioctl.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='vidioc_s_audout' type-id='f8e1aa9b' visibility='default' filepath='include/media/v4l2-ioctl.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='vidioc_g_modulator' type-id='24213669' visibility='default' filepath='include/media/v4l2-ioctl.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='vidioc_s_modulator' type-id='b79f9e36' visibility='default' filepath='include/media/v4l2-ioctl.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='vidioc_g_pixelaspect' type-id='0a95e709' visibility='default' filepath='include/media/v4l2-ioctl.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='vidioc_g_selection' type-id='a3948f60' visibility='default' filepath='include/media/v4l2-ioctl.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='vidioc_s_selection' type-id='a3948f60' visibility='default' filepath='include/media/v4l2-ioctl.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='vidioc_g_jpegcomp' type-id='f58cb656' visibility='default' filepath='include/media/v4l2-ioctl.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='vidioc_s_jpegcomp' type-id='ba21bbb1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='vidioc_g_enc_index' type-id='cadab7d6' visibility='default' filepath='include/media/v4l2-ioctl.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='vidioc_encoder_cmd' type-id='7312c953' visibility='default' filepath='include/media/v4l2-ioctl.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='vidioc_try_encoder_cmd' type-id='7312c953' visibility='default' filepath='include/media/v4l2-ioctl.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='vidioc_decoder_cmd' type-id='52e63b6f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='vidioc_try_decoder_cmd' type-id='52e63b6f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='vidioc_g_parm' type-id='41d02516' visibility='default' filepath='include/media/v4l2-ioctl.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='vidioc_s_parm' type-id='41d02516' visibility='default' filepath='include/media/v4l2-ioctl.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='vidioc_g_tuner' type-id='35b8846a' visibility='default' filepath='include/media/v4l2-ioctl.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='vidioc_s_tuner' type-id='aec87d1d' visibility='default' filepath='include/media/v4l2-ioctl.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='vidioc_g_frequency' type-id='7398303c' visibility='default' filepath='include/media/v4l2-ioctl.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='vidioc_s_frequency' type-id='48d231fb' visibility='default' filepath='include/media/v4l2-ioctl.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='vidioc_enum_freq_bands' type-id='771ff1ac' visibility='default' filepath='include/media/v4l2-ioctl.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='vidioc_g_sliced_vbi_cap' type-id='5fa1787f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='vidioc_log_status' type-id='962405e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='vidioc_s_hw_freq_seek' type-id='6cbcc6da' visibility='default' filepath='include/media/v4l2-ioctl.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='vidioc_enum_framesizes' type-id='9822fe67' visibility='default' filepath='include/media/v4l2-ioctl.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='vidioc_enum_frameintervals' type-id='a176c78e' visibility='default' filepath='include/media/v4l2-ioctl.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='vidioc_s_dv_timings' type-id='ce828302' visibility='default' filepath='include/media/v4l2-ioctl.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='vidioc_g_dv_timings' type-id='ce828302' visibility='default' filepath='include/media/v4l2-ioctl.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='vidioc_query_dv_timings' type-id='ce828302' visibility='default' filepath='include/media/v4l2-ioctl.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='vidioc_enum_dv_timings' type-id='fbd9657e' visibility='default' filepath='include/media/v4l2-ioctl.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='vidioc_dv_timings_cap' type-id='1f370097' visibility='default' filepath='include/media/v4l2-ioctl.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='vidioc_g_edid' type-id='d5f67e88' visibility='default' filepath='include/media/v4l2-ioctl.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='vidioc_s_edid' type-id='d5f67e88' visibility='default' filepath='include/media/v4l2-ioctl.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='vidioc_subscribe_event' type-id='081ebe8e' visibility='default' filepath='include/media/v4l2-ioctl.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='vidioc_unsubscribe_event' type-id='081ebe8e' visibility='default' filepath='include/media/v4l2-ioctl.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='vidioc_default' type-id='d2188e4c' visibility='default' filepath='include/media/v4l2-ioctl.h' line='586' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_capability' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='440' column='1' id='a874cee0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver' type-id='9396cabb' visibility='default' filepath='include/uapi/linux/videodev2.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='card' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bus_info' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='version' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='capabilities' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='device_caps' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='reserved' type-id='3fa05d14' visibility='default' filepath='include/uapi/linux/videodev2.h' line='447' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_fmtdesc' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='772' column='1' id='4c772628'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='description' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='pixelformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='reserved' type-id='3fa29bab' visibility='default' filepath='include/uapi/linux/videodev2.h' line='778' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_format' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2243' column='1' id='0a5711c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fmt' type-id='08bd2345' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2254' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='1600' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2245' column='1' id='08bd2345'>
+        <data-member access='private'>
+          <var-decl name='pix' type-id='e8f6102b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2246' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='pix_mp' type-id='dece967b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2247' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='win' type-id='3a0ab346' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2248' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='vbi' type-id='ae01ca89' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2249' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sliced' type-id='a2be7826' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2250' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sdr' type-id='a37aff65' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2251' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='meta' type-id='1db7c88b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2252' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw_data' type-id='0530f1a6' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2253' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_pix_format' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='494' column='1' id='e8f6102b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pixelformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bytesperline' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='sizeimage' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='colorspace' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='priv' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='' type-id='930baada' visibility='default' filepath='include/uapi/linux/videodev2.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='quantization' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='xfer_func' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='511' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='504' column='1' id='930baada'>
+        <data-member access='private'>
+          <var-decl name='ycbcr_enc' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='hsv_enc' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='508' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_pix_format_mplane' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2193' column='1' id='dece967b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pixelformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='colorspace' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='plane_fmt' type-id='15b94482' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='num_planes' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1448'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1456'>
+          <var-decl name='' type-id='29c254d4' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1464'>
+          <var-decl name='quantization' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='xfer_func' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1480'>
+          <var-decl name='reserved' type-id='c20b850f' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_plane_pix_format' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2173' column='1' id='69ab6968'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sizeimage' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bytesperline' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='81144473' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2176' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='8' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2203' column='1' id='29c254d4'>
+        <data-member access='private'>
+          <var-decl name='ycbcr_enc' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2204' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='hsv_enc' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2205' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_window' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1143' column='1' id='3a0ab346'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='w' type-id='3dbd4e78' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='chromakey' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='clips' type-id='db634b6a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='clipcount' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bitmap' type-id='eaa32e2f' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='global_alpha' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_clip' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1138' column='1' id='aecf225c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='c' type-id='3dbd4e78' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='db634b6a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1140' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_sdr_format' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2217' column='1' id='a37aff65'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pixelformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='buffersize' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='26f0765c' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2220' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_meta_format' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2228' column='1' id='1db7c88b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dataformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='buffersize' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2230' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_requestbuffers' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='913' column='1' id='879dea4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='memory' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='capabilities' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='917' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reserved' type-id='439be632' visibility='default' filepath='include/uapi/linux/videodev2.h' line='918' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_buffer' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='995' column='1' id='5e2fd874'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bytesused' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timestamp' type-id='2a693ac3' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='timecode' type-id='5f820012' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='memory' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='m' type-id='09960b26' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='length' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='reserved2' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='' type-id='e0a2553c' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1015' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_timecode' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='856' column='1' id='5f820012'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frames' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='seconds' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='minutes' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='hours' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='userbits' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/videodev2.h' line='863' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__7' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1007' column='1' id='09960b26'>
+        <data-member access='private'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1008' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='userptr' type-id='7359adad' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='planes' type-id='00e8fe5a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1010' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1011' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_plane' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='951' column='1' id='8cd967bc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bytesused' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='length' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='m' type-id='9942b293' visibility='default' filepath='include/uapi/linux/videodev2.h' line='958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data_offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reserved' type-id='9d263779' visibility='default' filepath='include/uapi/linux/videodev2.h' line='961' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__8' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='954' column='1' id='9942b293'>
+        <data-member access='private'>
+          <var-decl name='mem_offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='955' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='userptr' type-id='7359adad' visibility='default' filepath='include/uapi/linux/videodev2.h' line='956' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='957' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__9' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1015' column='1' id='e0a2553c'>
+        <data-member access='private'>
+          <var-decl name='request_fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1016' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='reserved' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1017' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_exportbuffer' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1091' column='1' id='b201a5c2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1093' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='plane' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1094' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1095' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1096' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reserved' type-id='9d263779' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1097' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_create_buffers' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2412' column='1' id='20d04fee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='memory' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='format' type-id='0a5711c9' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='capabilities' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='reserved' type-id='3faaea70' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2418' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_framebuffer' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1103' column='1' id='e2103cb1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capability' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='base' type-id='eaa32e2f' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fmt' type-id='dbebd65f' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1118' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1109' column='1' id='dbebd65f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pixelformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bytesperline' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='sizeimage' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='colorspace' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='priv' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1117' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='v4l2_buf_type' filepath='include/uapi/linux/videodev2.h' line='141' column='1' id='1abf108f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_CAPTURE' value='1'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_OUTPUT' value='2'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_OVERLAY' value='3'/>
+        <enumerator name='V4L2_BUF_TYPE_VBI_CAPTURE' value='4'/>
+        <enumerator name='V4L2_BUF_TYPE_VBI_OUTPUT' value='5'/>
+        <enumerator name='V4L2_BUF_TYPE_SLICED_VBI_CAPTURE' value='6'/>
+        <enumerator name='V4L2_BUF_TYPE_SLICED_VBI_OUTPUT' value='7'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY' value='8'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE' value='9'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE' value='10'/>
+        <enumerator name='V4L2_BUF_TYPE_SDR_CAPTURE' value='11'/>
+        <enumerator name='V4L2_BUF_TYPE_SDR_OUTPUT' value='12'/>
+        <enumerator name='V4L2_BUF_TYPE_META_CAPTURE' value='13'/>
+        <enumerator name='V4L2_BUF_TYPE_META_OUTPUT' value='14'/>
+        <enumerator name='V4L2_BUF_TYPE_PRIVATE' value='128'/>
+      </enum-decl>
+      <class-decl name='v4l2_input' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1596' column='1' id='f1bdbe5e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='audioset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='tuner' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='std' type-id='692d176e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='status' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='capabilities' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='reserved' type-id='3fa05d14' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1605' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_output' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1648' column='1' id='97abd73b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='audioset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='modulator' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='std' type-id='692d176e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='capabilities' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='reserved' type-id='3fa05d14' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1656' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_queryctrl' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1738' column='1' id='e162c03f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='minimum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='maximum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='step' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='default_value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1747' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_query_ext_ctrl' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1751' column='1' id='92bf903a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='minimum' type-id='49659421' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='maximum' type-id='49659421' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='step' type-id='d3130597' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='default_value' type-id='49659421' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='elem_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='elems' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='nr_of_dims' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dims' type-id='3fa29bab' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reserved' type-id='734a963c' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1764' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_control' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1672' column='1' id='d6a7cd6f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1674' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ext_controls' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1693' column='1' id='1a041cb4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='3e79fede' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='error_idx' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='request_fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reserved' type-id='439be632' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='controls' type-id='264baaf7' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1704' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__10' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1694' column='1' id='3e79fede'>
+        <data-member access='private'>
+          <var-decl name='which' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1698' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_ext_control' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1677' column='1' id='99cd308f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1678' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved2' type-id='439be632' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='' type-id='56e9fb5b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1681' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__11' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1681' column='1' id='56e9fb5b'>
+        <data-member access='private'>
+          <var-decl name='value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1682' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='value64' type-id='49659421' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1683' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='string' type-id='26a90f95' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1684' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_u8' type-id='474e5dcc' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1685' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_u16' type-id='2e5e3725' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1686' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_u32' type-id='cd1b45ab' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1687' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_area' type-id='26385187' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1688' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ptr' type-id='eaa32e2f' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1689' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_area' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='424' column='1' id='baab64cf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='426' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_querymenu' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1768' column='1' id='7647d8c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='3cef873b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reserved' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1775' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__12' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1771' column='1' id='3cef873b'>
+        <data-member access='private'>
+          <var-decl name='name' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1772' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='value' type-id='49659421' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1773' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_audio' size-in-bits='416' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1918' column='1' id='014e0a24'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1919' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1920' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='capability' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1923' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_audioout' size-in-bits='416' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1933' column='1' id='5b3ea0c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='capability' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1938' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_selection' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1206' column='1' id='676b848c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='target' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='r' type-id='3dbd4e78' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='reserved' type-id='43885e7a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1211' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_jpegcompression' size-in-bits='1120' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='881' column='1' id='da1685e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='quality' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='APPn' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='APP_len' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='APP_data' type-id='59e5814b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='COM_len' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='COM_data' type-id='59e5814b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='jpeg_markers' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='892' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_enc_idx' size-in-bits='16576' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1959' column='1' id='e5f6c4d2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entries' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1960' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='entries_cap' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1961' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='3fa29bab' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1962' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='entry' type-id='faa42463' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1963' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_enc_idx_entry' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1950' column='1' id='59b5b331'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='offset' type-id='d3130597' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1951' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pts' type-id='d3130597' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='length' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1955' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_encoder_cmd' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1975' column='1' id='769f1ed1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='96b0dd6a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1978' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__13' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1978' column='1' id='96b0dd6a'>
+        <data-member access='private'>
+          <var-decl name='raw' type-id='f1fdc4dc' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1981' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1979' column='1' id='f1fdc4dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1980' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_decoder_cmd' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2011' column='1' id='440818bd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='ddc566bc' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2014' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__14' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2014' column='1' id='ddc566bc'>
+        <data-member access='private'>
+          <var-decl name='stop' type-id='e0122dec' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2017' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='start' type-id='98d68d57' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2027' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw' type-id='62956517' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2031' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__4' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2015' column='1' id='e0122dec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pts' type-id='d3130597' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2016' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2019' column='1' id='98d68d57'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='speed' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='format' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2026' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__6' size-in-bits='512' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2029' column='1' id='62956517'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='9d2cf33e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2030' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_streamparm' size-in-bits='1632' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2259' column='1' id='2f896428'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='parm' type-id='1ccea1b5' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2265' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__15' size-in-bits='1600' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2261' column='1' id='1ccea1b5'>
+        <data-member access='private'>
+          <var-decl name='capture' type-id='f88a5c22' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2262' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='output' type-id='b573e9f1' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2263' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw_data' type-id='0530f1a6' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2264' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_captureparm' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1156' column='1' id='f88a5c22'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capability' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='capturemode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='timeperframe' type-id='5f37256e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='extendedmode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='readbuffers' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reserved' type-id='3fa29bab' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_outputparm' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1169' column='1' id='b573e9f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capability' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='outputmode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='timeperframe' type-id='5f37256e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='extendedmode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='writebuffers' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reserved' type-id='3fa29bab' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1175' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_hw_freq_seek' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1883' column='1' id='a5eead8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tuner' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seek_upward' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='wrap_around' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='spacing' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rangelow' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rangehigh' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='reserved' type-id='83a5454e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1891' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_frmsizeenum' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='810' column='1' id='aba31911'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pixel_format' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='813' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='' type-id='8e6aae74' visibility='default' filepath='include/uapi/linux/videodev2.h' line='815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='820' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__16' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='815' column='1' id='8e6aae74'>
+        <data-member access='private'>
+          <var-decl name='discrete' type-id='10186cf6' visibility='default' filepath='include/uapi/linux/videodev2.h' line='816' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='stepwise' type-id='5a62dd2b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='817' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_frmsize_discrete' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='796' column='1' id='10186cf6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='797' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='798' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_frmsize_stepwise' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='801' column='1' id='5a62dd2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='step_width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='min_height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='step_height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='807' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_frmivalenum' size-in-bits='416' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='838' column='1' id='7caad7ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pixel_format' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='' type-id='cfd72743' visibility='default' filepath='include/uapi/linux/videodev2.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='850' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__17' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='845' column='1' id='cfd72743'>
+        <data-member access='private'>
+          <var-decl name='discrete' type-id='5f37256e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='846' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='stepwise' type-id='99cd0646' visibility='default' filepath='include/uapi/linux/videodev2.h' line='847' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_frmival_stepwise' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='832' column='1' id='99cd0646'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min' type-id='5f37256e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='833' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max' type-id='5f37256e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='834' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='step' type-id='5f37256e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='835' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='ca8c574c' const='yes' id='20400679'/>
+      <pointer-type-def type-id='20400679' size-in-bits='64' id='17c9f4a9'/>
+      <qualified-type-def type-id='014e0a24' const='yes' id='adff645d'/>
+      <pointer-type-def type-id='adff645d' size-in-bits='64' id='600b2755'/>
+      <qualified-type-def type-id='5b3ea0c8' const='yes' id='2fecddf7'/>
+      <pointer-type-def type-id='2fecddf7' size-in-bits='64' id='4ee142e7'/>
+      <qualified-type-def type-id='1251351e' const='yes' id='ef7d00fd'/>
+      <pointer-type-def type-id='ef7d00fd' size-in-bits='64' id='d8c85275'/>
+      <qualified-type-def type-id='58b9b3eb' const='yes' id='9eb7236e'/>
+      <pointer-type-def type-id='9eb7236e' size-in-bits='64' id='1e4c840c'/>
+      <qualified-type-def type-id='e2103cb1' const='yes' id='8b69ca04'/>
+      <pointer-type-def type-id='8b69ca04' size-in-bits='64' id='a589466a'/>
+      <qualified-type-def type-id='a15ecb0c' const='yes' id='4a35e585'/>
+      <pointer-type-def type-id='4a35e585' size-in-bits='64' id='81d8927d'/>
+      <qualified-type-def type-id='a5eead8f' const='yes' id='63b32204'/>
+      <pointer-type-def type-id='63b32204' size-in-bits='64' id='20fece6a'/>
+      <qualified-type-def type-id='eb7c81d8' const='yes' id='39863601'/>
+      <pointer-type-def type-id='39863601' size-in-bits='64' id='b94745b1'/>
+      <qualified-type-def type-id='da1685e2' const='yes' id='b0e90747'/>
+      <pointer-type-def type-id='b0e90747' size-in-bits='64' id='ebd6b097'/>
+      <qualified-type-def type-id='a0776e3c' const='yes' id='9313318d'/>
+      <pointer-type-def type-id='9313318d' size-in-bits='64' id='2e3729e5'/>
+      <qualified-type-def type-id='7c3a095f' const='yes' id='d97eb63a'/>
+      <pointer-type-def type-id='d97eb63a' size-in-bits='64' id='72789b30'/>
+      <qualified-type-def type-id='52c7f7a2' const='yes' id='bdd1d6eb'/>
+      <pointer-type-def type-id='bdd1d6eb' size-in-bits='64' id='925511d3'/>
+      <qualified-type-def type-id='6fab59d9' const='yes' id='e682e2f0'/>
+      <pointer-type-def type-id='e682e2f0' size-in-bits='64' id='ba0b1d2e'/>
+      <qualified-type-def type-id='e3913a59' const='yes' id='53ecac3a'/>
+      <pointer-type-def type-id='53ecac3a' size-in-bits='64' id='2d92dd30'/>
+      <qualified-type-def type-id='b569b18c' const='yes' id='9d085135'/>
+      <pointer-type-def type-id='9d085135' size-in-bits='64' id='5317b3cd'/>
+      <qualified-type-def type-id='d36f034a' const='yes' id='01e0721b'/>
+      <pointer-type-def type-id='01e0721b' size-in-bits='64' id='2553c323'/>
+      <qualified-type-def type-id='77a58158' const='yes' id='bf11af99'/>
+      <pointer-type-def type-id='bf11af99' size-in-bits='64' id='7bd796c9'/>
+      <qualified-type-def type-id='026dac7c' const='yes' id='3a7813d3'/>
+      <pointer-type-def type-id='3a7813d3' size-in-bits='64' id='040770fb'/>
+      <qualified-type-def type-id='0382928e' const='yes' id='d48e8481'/>
+      <pointer-type-def type-id='d48e8481' size-in-bits='64' id='475ad931'/>
+      <qualified-type-def type-id='6f6b42ed' const='yes' id='9f25e800'/>
+      <pointer-type-def type-id='9f25e800' size-in-bits='64' id='b2ac7a1e'/>
+      <qualified-type-def type-id='40eafb47' const='yes' id='dc30ce58'/>
+      <pointer-type-def type-id='dc30ce58' size-in-bits='64' id='12d4fd76'/>
+      <qualified-type-def type-id='729f8f08' const='yes' id='f5af9523'/>
+      <pointer-type-def type-id='f5af9523' size-in-bits='64' id='cc679d2b'/>
+      <qualified-type-def type-id='6eadcbe0' const='yes' id='02233ed7'/>
+      <pointer-type-def type-id='02233ed7' size-in-bits='64' id='5a7c2847'/>
+      <qualified-type-def type-id='fd240b02' const='yes' id='bd2407df'/>
+      <pointer-type-def type-id='bd2407df' size-in-bits='64' id='b4b886af'/>
+      <pointer-type-def type-id='9ed97fed' size-in-bits='64' id='962405e1'/>
+      <pointer-type-def type-id='1601b1ab' size-in-bits='64' id='6a8dfaef'/>
+      <pointer-type-def type-id='24bce3cf' size-in-bits='64' id='f8e1aa9b'/>
+      <pointer-type-def type-id='14617e76' size-in-bits='64' id='117460b0'/>
+      <pointer-type-def type-id='e4960e7f' size-in-bits='64' id='48d231fb'/>
+      <pointer-type-def type-id='3f7bc138' size-in-bits='64' id='6cbcc6da'/>
+      <pointer-type-def type-id='e82a9f1d' size-in-bits='64' id='ba21bbb1'/>
+      <pointer-type-def type-id='ab883904' size-in-bits='64' id='b79f9e36'/>
+      <pointer-type-def type-id='a2b102f9' size-in-bits='64' id='aec87d1d'/>
+      <pointer-type-def type-id='3bb4887b' size-in-bits='64' id='18ff560f'/>
+      <pointer-type-def type-id='7b49a935' size-in-bits='64' id='0a95e709'/>
+      <pointer-type-def type-id='b287e2b2' size-in-bits='64' id='a13d0c2c'/>
+      <pointer-type-def type-id='162c0977' size-in-bits='64' id='6f3b229b'/>
+      <pointer-type-def type-id='9d558819' size-in-bits='64' id='c0a3faf5'/>
+      <pointer-type-def type-id='f155b036' size-in-bits='64' id='e1c70e28'/>
+      <pointer-type-def type-id='13bb6c7c' size-in-bits='64' id='4ecb1656'/>
+      <pointer-type-def type-id='280730d4' size-in-bits='64' id='6e055dae'/>
+      <pointer-type-def type-id='25edcf18' size-in-bits='64' id='70be41da'/>
+      <pointer-type-def type-id='06706e9d' size-in-bits='64' id='10f733f9'/>
+      <pointer-type-def type-id='5178491e' size-in-bits='64' id='dd40abb0'/>
+      <pointer-type-def type-id='4706793b' size-in-bits='64' id='52e63b6f'/>
+      <pointer-type-def type-id='29c6d348' size-in-bits='64' id='ce828302'/>
+      <pointer-type-def type-id='13be673b' size-in-bits='64' id='1f370097'/>
+      <pointer-type-def type-id='30e75f3e' size-in-bits='64' id='d5f67e88'/>
+      <pointer-type-def type-id='7370d1f4' size-in-bits='64' id='cadab7d6'/>
+      <pointer-type-def type-id='8074b8e7' size-in-bits='64' id='7312c953'/>
+      <pointer-type-def type-id='10498fec' size-in-bits='64' id='fbd9657e'/>
+      <pointer-type-def type-id='a2a24eee' size-in-bits='64' id='456a5468'/>
+      <pointer-type-def type-id='28327a10' size-in-bits='64' id='517d0452'/>
+      <pointer-type-def type-id='232e3e4e' size-in-bits='64' id='318389e0'/>
+      <pointer-type-def type-id='302b8c85' size-in-bits='64' id='5797b7e1'/>
+      <pointer-type-def type-id='e64743d7' size-in-bits='64' id='15c573bb'/>
+      <pointer-type-def type-id='e3087f12' size-in-bits='64' id='7398303c'/>
+      <pointer-type-def type-id='dd378762' size-in-bits='64' id='771ff1ac'/>
+      <pointer-type-def type-id='258baccc' size-in-bits='64' id='a176c78e'/>
+      <pointer-type-def type-id='962c09bb' size-in-bits='64' id='9822fe67'/>
+      <pointer-type-def type-id='5895f71c' size-in-bits='64' id='243d1e96'/>
+      <pointer-type-def type-id='c66117cc' size-in-bits='64' id='f58cb656'/>
+      <pointer-type-def type-id='4a1c795d' size-in-bits='64' id='24213669'/>
+      <pointer-type-def type-id='aac69b6b' size-in-bits='64' id='e2f71a2f'/>
+      <pointer-type-def type-id='60d50d6a' size-in-bits='64' id='860d0bc4'/>
+      <pointer-type-def type-id='a73b2f11' size-in-bits='64' id='73892d6d'/>
+      <pointer-type-def type-id='857ecf83' size-in-bits='64' id='81068c97'/>
+      <pointer-type-def type-id='82fca516' size-in-bits='64' id='3b472dd8'/>
+      <pointer-type-def type-id='de826e86' size-in-bits='64' id='a3948f60'/>
+      <pointer-type-def type-id='d5c7d653' size-in-bits='64' id='5fa1787f'/>
+      <pointer-type-def type-id='f16e9b99' size-in-bits='64' id='0e0c1c5d'/>
+      <pointer-type-def type-id='6bb8016c' size-in-bits='64' id='41d02516'/>
+      <pointer-type-def type-id='c49062e0' size-in-bits='64' id='35b8846a'/>
+      <pointer-type-def type-id='17b31231' size-in-bits='64' id='6f077fdd'/>
+      <pointer-type-def type-id='bed27c38' size-in-bits='64' id='39e52da2'/>
+      <pointer-type-def type-id='817d10dc' size-in-bits='64' id='081ebe8e'/>
+      <pointer-type-def type-id='77296733' size-in-bits='64' id='a236743f'/>
+      <pointer-type-def type-id='822ce289' size-in-bits='64' id='8a4f973d'/>
+      <pointer-type-def type-id='43b517a9' size-in-bits='64' id='7c61dabd'/>
+      <pointer-type-def type-id='3d684a5a' size-in-bits='64' id='c99780b4'/>
+      <pointer-type-def type-id='44ab747b' size-in-bits='64' id='f8acd34f'/>
+      <pointer-type-def type-id='714fe898' size-in-bits='64' id='03813572'/>
+      <pointer-type-def type-id='2966597b' size-in-bits='64' id='3ba48c9f'/>
+      <pointer-type-def type-id='261083fc' size-in-bits='64' id='6d63cad6'/>
+      <pointer-type-def type-id='efa4e33c' size-in-bits='64' id='f73feb66'/>
+      <pointer-type-def type-id='960d41bf' size-in-bits='64' id='0f2da0bb'/>
+      <pointer-type-def type-id='2d6f2c74' size-in-bits='64' id='c52b8c36'/>
+      <pointer-type-def type-id='ad810f54' size-in-bits='64' id='04cc4d9e'/>
+      <pointer-type-def type-id='5ba85b48' size-in-bits='64' id='f3f22912'/>
+      <pointer-type-def type-id='be643611' size-in-bits='64' id='1825e6b5'/>
+      <pointer-type-def type-id='24255cb2' size-in-bits='64' id='f9d7b9fc'/>
+      <pointer-type-def type-id='3d709624' size-in-bits='64' id='1976ccf6'/>
+      <pointer-type-def type-id='20cd6817' size-in-bits='64' id='b530e24b'/>
+      <pointer-type-def type-id='7b74b2c0' size-in-bits='64' id='db3c9452'/>
+      <pointer-type-def type-id='cc85da13' size-in-bits='64' id='f4b0728f'/>
+      <pointer-type-def type-id='8230f98b' size-in-bits='64' id='c6a521af'/>
+      <pointer-type-def type-id='17ae78d2' size-in-bits='64' id='afd7b47c'/>
+      <pointer-type-def type-id='18e34d1d' size-in-bits='64' id='2af7cc71'/>
+      <pointer-type-def type-id='f13a9afc' size-in-bits='64' id='1da53a06'/>
+      <pointer-type-def type-id='c763c2ea' size-in-bits='64' id='d407a0d4'/>
+      <pointer-type-def type-id='52e7eff9' size-in-bits='64' id='ae675015'/>
+      <pointer-type-def type-id='16b2c11e' size-in-bits='64' id='44b18db0'/>
+      <pointer-type-def type-id='354af324' size-in-bits='64' id='d36d46c6'/>
+      <pointer-type-def type-id='21419694' size-in-bits='64' id='64144346'/>
+      <pointer-type-def type-id='78b76b9c' size-in-bits='64' id='ddaeaa9e'/>
+      <pointer-type-def type-id='d2bdcec3' size-in-bits='64' id='e60f1e27'/>
+      <pointer-type-def type-id='0ffa0cdd' size-in-bits='64' id='795cf0d1'/>
+      <pointer-type-def type-id='e3d2455d' size-in-bits='64' id='a49b3ef9'/>
+      <pointer-type-def type-id='1e4a1386' size-in-bits='64' id='b0487488'/>
+      <pointer-type-def type-id='a8ee3f87' size-in-bits='64' id='865e6323'/>
+      <pointer-type-def type-id='4bd12e16' size-in-bits='64' id='618f91b8'/>
+      <pointer-type-def type-id='1b424123' size-in-bits='64' id='7bd168bf'/>
+      <pointer-type-def type-id='604bba92' size-in-bits='64' id='30f63774'/>
+      <pointer-type-def type-id='122af7a4' size-in-bits='64' id='c1d16b36'/>
+      <pointer-type-def type-id='fea27882' size-in-bits='64' id='3a53e3ec'/>
+      <pointer-type-def type-id='f519d7ec' size-in-bits='64' id='966724ce'/>
+      <pointer-type-def type-id='404f4f30' size-in-bits='64' id='94b3d6fa'/>
+      <pointer-type-def type-id='0fdf477e' size-in-bits='64' id='e188da98'/>
+      <pointer-type-def type-id='fb3ed1d3' size-in-bits='64' id='a56b7267'/>
+      <pointer-type-def type-id='626191ca' size-in-bits='64' id='3ac60b54'/>
+      <pointer-type-def type-id='5cdc243f' size-in-bits='64' id='740a3d8b'/>
+      <pointer-type-def type-id='cfc17f8f' size-in-bits='64' id='02cea60b'/>
+      <pointer-type-def type-id='b8dcddba' size-in-bits='64' id='d2188e4c'/>
+      <pointer-type-def type-id='ea214f7b' size-in-bits='64' id='efb4ad67'/>
+      <pointer-type-def type-id='20a7e419' size-in-bits='64' id='cafb3255'/>
+      <pointer-type-def type-id='79a0948f' size-in-bits='64' id='3f9bbdb6'/>
+      <pointer-type-def type-id='de57f169' size-in-bits='64' id='a6265381'/>
+      <pointer-type-def type-id='0b244c64' size-in-bits='64' id='5c6f8956'/>
+      <pointer-type-def type-id='baab64cf' size-in-bits='64' id='26385187'/>
+      <pointer-type-def type-id='7e833f79' size-in-bits='64' id='e1a56841'/>
+      <pointer-type-def type-id='c2e9ee66' size-in-bits='64' id='707be29c'/>
+      <pointer-type-def type-id='014e0a24' size-in-bits='64' id='3c8a5f42'/>
+      <pointer-type-def type-id='5b3ea0c8' size-in-bits='64' id='d2063c9e'/>
+      <pointer-type-def type-id='5e2fd874' size-in-bits='64' id='a90d9002'/>
+      <pointer-type-def type-id='a874cee0' size-in-bits='64' id='d8a61886'/>
+      <pointer-type-def type-id='aecf225c' size-in-bits='64' id='db634b6a'/>
+      <pointer-type-def type-id='d6a7cd6f' size-in-bits='64' id='bcd28457'/>
+      <pointer-type-def type-id='20d04fee' size-in-bits='64' id='0bb617a4'/>
+      <pointer-type-def type-id='d6130049' size-in-bits='64' id='2b59fa5f'/>
+      <pointer-type-def type-id='eea20e13' size-in-bits='64' id='98eca9c3'/>
+      <pointer-type-def type-id='440818bd' size-in-bits='64' id='750dbc1d'/>
+      <pointer-type-def type-id='f1828bdc' size-in-bits='64' id='ddfb71fa'/>
+      <pointer-type-def type-id='9a25f4b0' size-in-bits='64' id='e3ba02e6'/>
+      <pointer-type-def type-id='cdb274e3' size-in-bits='64' id='f60348b3'/>
+      <pointer-type-def type-id='54bf0f36' size-in-bits='64' id='b29a990c'/>
+      <pointer-type-def type-id='e5f6c4d2' size-in-bits='64' id='5fe73d20'/>
+      <pointer-type-def type-id='769f1ed1' size-in-bits='64' id='f79a6dd9'/>
+      <pointer-type-def type-id='b6da1a0e' size-in-bits='64' id='c28fe484'/>
+      <pointer-type-def type-id='1251351e' size-in-bits='64' id='8edac644'/>
+      <pointer-type-def type-id='b201a5c2' size-in-bits='64' id='5606e640'/>
+      <pointer-type-def type-id='99cd308f' size-in-bits='64' id='264baaf7'/>
+      <pointer-type-def type-id='1a041cb4' size-in-bits='64' id='a4cdda22'/>
+      <pointer-type-def type-id='53422e64' size-in-bits='64' id='b7db9582'/>
+      <pointer-type-def type-id='4c772628' size-in-bits='64' id='3c28582e'/>
+      <pointer-type-def type-id='0a5711c9' size-in-bits='64' id='a4ca87c1'/>
+      <pointer-type-def type-id='5f37256e' size-in-bits='64' id='413f0ce4'/>
+      <pointer-type-def type-id='e2103cb1' size-in-bits='64' id='a52f8809'/>
+      <pointer-type-def type-id='a15ecb0c' size-in-bits='64' id='7bc9606a'/>
+      <pointer-type-def type-id='400ed05a' size-in-bits='64' id='0200a298'/>
+      <pointer-type-def type-id='7caad7ca' size-in-bits='64' id='a65dd5e8'/>
+      <pointer-type-def type-id='aba31911' size-in-bits='64' id='99c70b49'/>
+      <pointer-type-def type-id='f1bdbe5e' size-in-bits='64' id='4110d6d4'/>
+      <pointer-type-def type-id='da1685e2' size-in-bits='64' id='0bb81b50'/>
+      <pointer-type-def type-id='e1b58b0e' size-in-bits='64' id='2c7f1dc4'/>
+      <pointer-type-def type-id='a0776e3c' size-in-bits='64' id='8c46546a'/>
+      <pointer-type-def type-id='9a759b95' size-in-bits='64' id='6b4e8585'/>
+      <pointer-type-def type-id='7c3a095f' size-in-bits='64' id='6f262307'/>
+      <pointer-type-def type-id='97abd73b' size-in-bits='64' id='ffc7dc3b'/>
+      <pointer-type-def type-id='8cd967bc' size-in-bits='64' id='00e8fe5a'/>
+      <pointer-type-def type-id='281d3096' size-in-bits='64' id='2fc4734c'/>
+      <pointer-type-def type-id='92bf903a' size-in-bits='64' id='6e39d7a8'/>
+      <pointer-type-def type-id='e162c03f' size-in-bits='64' id='69a3afa7'/>
+      <pointer-type-def type-id='7647d8c9' size-in-bits='64' id='4394e2c1'/>
+      <pointer-type-def type-id='879dea4a' size-in-bits='64' id='e4330308'/>
+      <pointer-type-def type-id='676b848c' size-in-bits='64' id='2f4512ea'/>
+      <pointer-type-def type-id='97ed0ee7' size-in-bits='64' id='13f343ef'/>
+      <pointer-type-def type-id='6fab59d9' size-in-bits='64' id='cc2ef0d1'/>
+      <pointer-type-def type-id='a2be7826' size-in-bits='64' id='2451ca6c'/>
+      <pointer-type-def type-id='692d176e' size-in-bits='64' id='6ab01e59'/>
+      <pointer-type-def type-id='2f896428' size-in-bits='64' id='cd10cf8e'/>
+      <pointer-type-def type-id='59eccc2f' size-in-bits='64' id='f5438ac7'/>
+      <pointer-type-def type-id='43b269de' size-in-bits='64' id='56ec2114'/>
+      <pointer-type-def type-id='23f90633' size-in-bits='64' id='cdea97c3'/>
+      <pointer-type-def type-id='e346e6f3' size-in-bits='64' id='75099793'/>
+      <pointer-type-def type-id='fb0dbd21' size-in-bits='64' id='f93f4e09'/>
+      <pointer-type-def type-id='b9c125a5' size-in-bits='64' id='86f9d4a5'/>
+      <pointer-type-def type-id='82096067' size-in-bits='64' id='67d1ebff'/>
+      <pointer-type-def type-id='0b2fc110' size-in-bits='64' id='fac731d6'/>
+      <pointer-type-def type-id='f3aba577' size-in-bits='64' id='98671e4f'/>
+      <pointer-type-def type-id='d2ffa1e8' size-in-bits='64' id='288e890e'/>
+      <pointer-type-def type-id='415476f4' size-in-bits='64' id='616ec7d2'/>
+      <pointer-type-def type-id='f4c2725e' size-in-bits='64' id='498944b4'/>
+      <pointer-type-def type-id='fd240b02' size-in-bits='64' id='ad168a80'/>
+      <pointer-type-def type-id='ae01ca89' size-in-bits='64' id='aa06f721'/>
+      <pointer-type-def type-id='6b30321e' size-in-bits='64' id='a05f1ece'/>
+      <pointer-type-def type-id='a4b3744f' size-in-bits='64' id='798c29b7'/>
+      <pointer-type-def type-id='42c66597' size-in-bits='64' id='55d37973'/>
+      <pointer-type-def type-id='b6a7cdb3' size-in-bits='64' id='8dfbe74f'/>
+      <pointer-type-def type-id='4bda18f8' size-in-bits='64' id='1625ce7a'/>
+      <pointer-type-def type-id='3516ab98' size-in-bits='64' id='9f5eb43a'/>
+      <pointer-type-def type-id='9d4a3248' size-in-bits='64' id='3007e20a'/>
+      <function-decl name='video_device_alloc' mangled-name='video_device_alloc' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='144' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='video_device_alloc'>
+        <return type-id='798c29b7'/>
+      </function-decl>
+      <function-decl name='video_device_release' mangled-name='video_device_release' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='150' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='video_device_release'>
+        <parameter type-id='798c29b7' name='vdev' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='150' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='video_device_release_empty' mangled-name='video_device_release_empty' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='156' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='video_device_release_empty'>
+        <parameter type-id='798c29b7' name='vdev' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='156' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='video_devdata' mangled-name='video_devdata' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='234' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='video_devdata'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='234' column='1'/>
+        <return type-id='798c29b7'/>
+      </function-decl>
+      <function-decl name='v4l2_prio_init' mangled-name='v4l2_prio_init' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='250' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_prio_init'>
+        <parameter type-id='2fc4734c' name='global' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='250' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__video_register_device' mangled-name='__video_register_device' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='863' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__video_register_device'>
+        <parameter type-id='798c29b7' name='vdev' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='863' column='1'/>
+        <parameter type-id='24df61b5' name='type' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='864' column='1'/>
+        <parameter type-id='95e97e5e' name='nr' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='865' column='1'/>
+        <parameter type-id='95e97e5e' name='warn_if_nr_in_use' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='865' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='866' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_device_put' mangled-name='v4l2_device_put' filepath='include/media/v4l2-device.h' line='82' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_device_put'>
+        <parameter type-id='ddfb71fa'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='video_unregister_device' mangled-name='video_unregister_device' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='1064' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='video_unregister_device'>
+        <parameter type-id='798c29b7' name='vdev' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='1064' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='3f1a6b60' size-in-bits='64' id='cd1b45ab'/>
+      <function-type size-in-bits='64' id='9ed97fed'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1601b1ab'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='600b2755'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24bce3cf'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='4ee142e7'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='14617e76'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='a589466a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e4960e7f'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='81d8927d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3f7bc138'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='20fece6a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e82a9f1d'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='ebd6b097'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ab883904'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='72789b30'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2b102f9'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b4b886af'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3bb4887b'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='1abf108f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7b49a935'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='413f0ce4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b287e2b2'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='692d176e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='162c0977'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9d558819'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f155b036'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='3c8a5f42'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='13bb6c7c'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='d2063c9e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='280730d4'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='a90d9002'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='25edcf18'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='d8a61886'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06706e9d'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='bcd28457'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5178491e'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='0bb617a4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4706793b'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='750dbc1d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='29c6d348'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='e3ba02e6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='13be673b'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f60348b3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='30e75f3e'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b29a990c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7370d1f4'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='5fe73d20'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8074b8e7'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f79a6dd9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='10498fec'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='c28fe484'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2a24eee'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='5606e640'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='28327a10'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='a4cdda22'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='232e3e4e'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='3c28582e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='302b8c85'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='a4ca87c1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e64743d7'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='a52f8809'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e3087f12'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7bc9606a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dd378762'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='0200a298'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='258baccc'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='a65dd5e8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='962c09bb'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='99c70b49'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5895f71c'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='4110d6d4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c66117cc'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='0bb81b50'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4a1c795d'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='6f262307'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aac69b6b'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='ffc7dc3b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='60d50d6a'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='6e39d7a8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a73b2f11'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='69a3afa7'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='857ecf83'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='4394e2c1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='82fca516'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='e4330308'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='de826e86'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='2f4512ea'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d5c7d653'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='13f343ef'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f16e9b99'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='6ab01e59'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6bb8016c'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='cd10cf8e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c49062e0'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='ad168a80'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='17b31231'>
+        <parameter type-id='e1a56841'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bed27c38'>
+        <parameter type-id='e1a56841'/>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='707be29c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='817d10dc'>
+        <parameter type-id='b7db9582'/>
+        <parameter type-id='d8c85275'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='77296733'>
+        <parameter type-id='f5438ac7'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='822ce289'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='81d8927d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='43b517a9'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='2e3729e5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3d684a5a'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='72789b30'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='44ab747b'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='925511d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='714fe898'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='ba0b1d2e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2966597b'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='b4b886af'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='261083fc'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='efa4e33c'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='b4de78ea'/>
+        <parameter type-id='cdea97c3'/>
+        <parameter type-id='cdea97c3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='960d41bf'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='a6265381'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2d6f2c74'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='67d1ebff'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ad810f54'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5ba85b48'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='d8e6b335'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='be643611'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24255cb2'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3d709624'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='692d176e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='20cd6817'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7b74b2c0'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='3f9bbdb6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cc85da13'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='6b4e8585'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8230f98b'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='98eca9c3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='17ae78d2'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='e3ba02e6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='18e34d1d'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='f60348b3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f13a9afc'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='b29a990c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c763c2ea'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='c28fe484'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='16b2c11e'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='413f0ce4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='354af324'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='7bc9606a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='21419694'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='0200a298'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78b76b9c'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='8c46546a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d2bdcec3'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='6f262307'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ffa0cdd'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='13f343ef'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e3d2455d'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='cc2ef0d1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1e4a1386'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='2451ca6c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a8ee3f87'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='6ab01e59'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4bd12e16'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='56ec2114'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1b424123'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='75099793'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='604bba92'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='fac731d6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='122af7a4'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='288e890e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fea27882'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='288e890e'/>
+        <parameter type-id='cdea97c3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f519d7ec'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='288e890e'/>
+        <parameter type-id='f93f4e09'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='404f4f30'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='288e890e'/>
+        <parameter type-id='86f9d4a5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0fdf477e'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='288e890e'/>
+        <parameter type-id='98671e4f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fb3ed1d3'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='288e890e'/>
+        <parameter type-id='498944b4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='626191ca'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='ad168a80'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5cdc243f'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='aa06f721'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cfc17f8f'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b8dcddba'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ea214f7b'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='20a7e419'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0b244c64'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='707be29c'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='42c66597'>
+        <parameter type-id='e1a56841'/>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='707be29c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b6a7cdb3'>
+        <parameter type-id='ddfb71fa'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4bda18f8'>
+        <parameter type-id='f5438ac7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3516ab98'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9d4a3248'>
+        <parameter type-id='798c29b7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/media/v4l2-core/v4l2-device.c' language='LANG_C89'>
+      <function-decl name='v4l2_device_register' mangled-name='v4l2_device_register' filepath='drivers/media/v4l2-core/v4l2-device.c' line='17' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_device_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/media/v4l2-core/v4l2-device.c' line='17' column='1'/>
+        <parameter type-id='ddfb71fa' name='v4l2_dev' filepath='drivers/media/v4l2-core/v4l2-device.c' line='17' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_device_disconnect' mangled-name='v4l2_device_disconnect' filepath='drivers/media/v4l2-core/v4l2-device.c' line='76' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_device_disconnect'>
+        <parameter type-id='ddfb71fa' name='v4l2_dev' filepath='drivers/media/v4l2-core/v4l2-device.c' line='76' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_device_unregister' mangled-name='v4l2_device_unregister' filepath='drivers/media/v4l2-core/v4l2-device.c' line='88' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_device_unregister'>
+        <parameter type-id='ddfb71fa' name='v4l2_dev' filepath='drivers/media/v4l2-core/v4l2-device.c' line='88' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_device_unregister_subdev' mangled-name='v4l2_device_unregister_subdev' filepath='drivers/media/v4l2-core/v4l2-device.c' line='260' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_device_unregister_subdev'>
+        <parameter type-id='f5438ac7' name='sd' filepath='drivers/media/v4l2-core/v4l2-device.c' line='260' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_device_register_subdev' mangled-name='v4l2_device_register_subdev' filepath='drivers/media/v4l2-core/v4l2-device.c' line='111' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_device_register_subdev'>
+        <parameter type-id='ddfb71fa' name='v4l2_dev' filepath='drivers/media/v4l2-core/v4l2-device.c' line='111' column='1'/>
+        <parameter type-id='f5438ac7' name='sd' filepath='drivers/media/v4l2-core/v4l2-device.c' line='112' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_device_register_subdev_nodes' mangled-name='v4l2_device_register_subdev_nodes' filepath='drivers/media/v4l2-core/v4l2-device.c' line='192' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_device_register_subdev_nodes'>
+        <parameter type-id='ddfb71fa' name='v4l2_dev' filepath='drivers/media/v4l2-core/v4l2-device.c' line='192' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/media/v4l2-core/v4l2-event.c' language='LANG_C89'>
+      <class-decl name='media_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='e4dc0de7'/>
+      <class-decl name='v4l2_subdev' is-struct='yes' visibility='default' is-declaration-only='yes' id='59eccc30'/>
+      <array-type-def dimensions='1' type-id='9ac9cd61' size-in-bits='infinite' id='a892e311'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='v4l2_subscribed_event_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/media/v4l2-event.h' line='46' column='1' id='a81e67e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='add' type-id='5c4b80ab' visibility='default' filepath='include/media/v4l2-event.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='del' type-id='d9659030' visibility='default' filepath='include/media/v4l2-event.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='replace' type-id='bdf745d1' visibility='default' filepath='include/media/v4l2-event.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='merge' type-id='6780605f' visibility='default' filepath='include/media/v4l2-event.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subscribed_event' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/media/v4l2-event.h' line='70' column='1' id='0c33dc69'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-event.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-event.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-event.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-event.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fh' type-id='b7db9582' visibility='default' filepath='include/media/v4l2-event.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-event.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='d66d2cad' visibility='default' filepath='include/media/v4l2-event.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='elems' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-event.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='first' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-event.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='in_use' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-event.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='events' type-id='a892e311' visibility='default' filepath='include/media/v4l2-event.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_kevent' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/media/v4l2-event.h' line='31' column='1' id='9ac9cd61'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-event.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sev' type-id='6ec0fd31' visibility='default' filepath='include/media/v4l2-event.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='event' type-id='967c1c06' visibility='default' filepath='include/media/v4l2-event.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ts' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-event.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='967c1c06' const='yes' id='cd1fc343'/>
+      <pointer-type-def type-id='cd1fc343' size-in-bits='64' id='52009e4b'/>
+      <qualified-type-def type-id='a81e67e2' const='yes' id='de640095'/>
+      <pointer-type-def type-id='de640095' size-in-bits='64' id='d66d2cad'/>
+      <pointer-type-def type-id='782095e7' size-in-bits='64' id='5c4b80ab'/>
+      <pointer-type-def type-id='e4dc0de7' size-in-bits='64' id='e2929c1d'/>
+      <pointer-type-def type-id='59eccc30' size-in-bits='64' id='f5438ac8'/>
+      <pointer-type-def type-id='0c33dc69' size-in-bits='64' id='6ec0fd31'/>
+      <pointer-type-def type-id='2c1be8c3' size-in-bits='64' id='6780605f'/>
+      <pointer-type-def type-id='b95f4e75' size-in-bits='64' id='bdf745d1'/>
+      <pointer-type-def type-id='26c7d506' size-in-bits='64' id='d9659030'/>
+      <function-decl name='v4l2_event_queue' mangled-name='v4l2_event_queue' filepath='drivers/media/v4l2-core/v4l2-event.c' line='150' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_event_queue'>
+        <parameter type-id='798c29b7' name='vdev' filepath='drivers/media/v4l2-core/v4l2-event.c' line='150' column='1'/>
+        <parameter type-id='52009e4b' name='ev' filepath='drivers/media/v4l2-core/v4l2-event.c' line='150' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_event_queue_fh' mangled-name='v4l2_event_queue_fh' filepath='drivers/media/v4l2-core/v4l2-event.c' line='170' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_event_queue_fh'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-event.c' line='170' column='1'/>
+        <parameter type-id='52009e4b' name='ev' filepath='drivers/media/v4l2-core/v4l2-event.c' line='170' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_event_pending' mangled-name='v4l2_event_pending' filepath='drivers/media/v4l2-core/v4l2-event.c' line='181' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_event_pending'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-event.c' line='181' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_event_subscribe' mangled-name='v4l2_event_subscribe' filepath='drivers/media/v4l2-core/v4l2-event.c' line='203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_event_subscribe'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-event.c' line='203' column='1'/>
+        <parameter type-id='d8c85275' name='sub' filepath='drivers/media/v4l2-core/v4l2-event.c' line='204' column='1'/>
+        <parameter type-id='f0981eeb' name='elems' filepath='drivers/media/v4l2-core/v4l2-event.c' line='204' column='1'/>
+        <parameter type-id='d66d2cad' name='ops' filepath='drivers/media/v4l2-core/v4l2-event.c' line='205' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_event_unsubscribe' mangled-name='v4l2_event_unsubscribe' filepath='drivers/media/v4l2-core/v4l2-event.c' line='280' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_event_unsubscribe'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-event.c' line='280' column='1'/>
+        <parameter type-id='d8c85275' name='sub' filepath='drivers/media/v4l2-core/v4l2-event.c' line='281' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_event_subdev_unsubscribe' mangled-name='v4l2_event_subdev_unsubscribe' filepath='drivers/media/v4l2-core/v4l2-event.c' line='312' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_event_subdev_unsubscribe'>
+        <parameter type-id='f5438ac8' name='sd' filepath='drivers/media/v4l2-core/v4l2-event.c' line='312' column='1'/>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-event.c' line='312' column='1'/>
+        <parameter type-id='8edac644' name='sub' filepath='drivers/media/v4l2-core/v4l2-event.c' line='313' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='782095e7'>
+        <parameter type-id='6ec0fd31'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2c1be8c3'>
+        <parameter type-id='52009e4b'/>
+        <parameter type-id='a5c94ccc'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b95f4e75'>
+        <parameter type-id='a5c94ccc'/>
+        <parameter type-id='52009e4b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='26c7d506'>
+        <parameter type-id='6ec0fd31'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/media/v4l2-core/v4l2-fh.c' language='LANG_C89'>
+      <class-decl name='v4l2_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='f1828bdd'/>
+      <pointer-type-def type-id='f1828bdd' size-in-bits='64' id='ddfb71fb'/>
+      <function-decl name='v4l2_fh_init' mangled-name='v4l2_fh_init' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_fh_init'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='21' column='1'/>
+        <parameter type-id='798c29b7' name='vdev' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='21' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_fh_add' mangled-name='v4l2_fh_add' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='44' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_fh_add'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='44' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_fh_open' mangled-name='v4l2_fh_open' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_fh_open'>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='55' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_fh_del' mangled-name='v4l2_fh_del' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='69' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_fh_del'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='69' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_fh_exit' mangled-name='v4l2_fh_exit' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='80' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_fh_exit'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='80' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_fh_release' mangled-name='v4l2_fh_release' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='91' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_fh_release'>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='91' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/media/v4l2-core/v4l2-i2c.c' language='LANG_C89'>
+      <function-decl name='v4l2_i2c_subdev_init' mangled-name='v4l2_i2c_subdev_init' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='45' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_i2c_subdev_init'>
+        <parameter type-id='f5438ac7' name='sd' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='45' column='1'/>
+        <parameter type-id='3e31633b' name='client' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='45' column='1'/>
+        <parameter type-id='040770fb' name='ops' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='46' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_i2c_new_subdev' mangled-name='v4l2_i2c_new_subdev' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='119' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_i2c_new_subdev'>
+        <parameter type-id='ddfb71fa' name='v4l2_dev' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='119' column='1'/>
+        <parameter type-id='b9af02c3' name='adapter' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='120' column='1'/>
+        <parameter type-id='80f4b756' name='client_type' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='121' column='1'/>
+        <parameter type-id='f9b06939' name='addr' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='122' column='1'/>
+        <parameter type-id='31347b7a' name='probe_addrs' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='123' column='1'/>
+        <return type-id='f5438ac7'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/media/v4l2-core/v4l2-ioctl.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='b55def60' size-in-bits='512' id='467f4e10'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='b55def60' size-in-bits='1024' id='0399400c'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3158a266' size-in-bits='8160' id='29cc01cd'>
+        <subrange length='255' type-id='7ff19f0f' id='36e7f891'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8af57d41' size-in-bits='128' id='2d85a215'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8af57d41' size-in-bits='256' id='1e28c56f'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8af57d41' size-in-bits='32' id='87ce7f1e'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='160' id='26fb03b8'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='176' id='eaf62816'>
+        <subrange length='22' type-id='7ff19f0f' id='41cf2209'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='304' id='fa0a1f4c'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='19' type-id='7ff19f0f' id='448ee30f'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='32' id='86be53ee'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='4' type-id='8f048e17' size-in-bits='8448' id='96a07b89'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='512' id='73b95420'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='768' id='9a59aaef'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='3072' id='a112b67c'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <class-decl name='v4l2_ctrl_helper' is-struct='yes' visibility='default' is-declaration-only='yes' id='8a6e72bc'/>
+      <class-decl name='v4l2_m2m_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='ba69e54c'/>
+      <class-decl name='vb2_fileio_data' size-in-bits='12608' is-struct='yes' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2434' column='1' id='c1670ffd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='memory' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bufs' type-id='729537cc' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12416'>
+          <var-decl name='cur_index' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12448'>
+          <var-decl name='initial_index' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12480'>
+          <var-decl name='q_count' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12512'>
+          <var-decl name='dq_count' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='read_once' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='write_immediately' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2444' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_threadio_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2770' column='1' id='cca707fb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='thread' type-id='f23e2572' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fnc' type-id='86e6f91d' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='stop' type-id='b50a4934' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2774' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='80f4b756' size-in-bits='960' id='35f5fc88'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='fa0b179b' size-in-bits='512' id='f6e5abef'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7a583acc' size-in-bits='3072' id='eefef0c1'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='c1c411a0' size-in-bits='6144' id='a4444dc4'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a1f34f28' size-in-bits='2048' id='41c4bc5d'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='85535682' size-in-bits='4096' id='f989fdcc'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b3ad2c1c' size-in-bits='3072' id='105eff46'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <union-decl name='v4l2_ctrl_ptr' size-in-bits='64' visibility='default' filepath='include/media/v4l2-ctrls.h' line='61' column='1' id='3f78e6a9'>
+        <data-member access='private'>
+          <var-decl name='p_s32' type-id='9f2cce4b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_s64' type-id='842ac8d6' visibility='default' filepath='include/media/v4l2-ctrls.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_u8' type-id='8bff8096' visibility='default' filepath='include/media/v4l2-ctrls.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_u16' type-id='26d4d46f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_u32' type-id='f9409001' visibility='default' filepath='include/media/v4l2-ctrls.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_char' type-id='26a90f95' visibility='default' filepath='include/media/v4l2-ctrls.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_mpeg2_slice_params' type-id='48bc1523' visibility='default' filepath='include/media/v4l2-ctrls.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_mpeg2_quantization' type-id='fa7d167b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_fwht_params' type-id='efba361c' visibility='default' filepath='include/media/v4l2-ctrls.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_h264_sps' type-id='b9348c47' visibility='default' filepath='include/media/v4l2-ctrls.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_h264_pps' type-id='91e3ab68' visibility='default' filepath='include/media/v4l2-ctrls.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_h264_scaling_matrix' type-id='f7e7b3e8' visibility='default' filepath='include/media/v4l2-ctrls.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_h264_slice_params' type-id='0541bcde' visibility='default' filepath='include/media/v4l2-ctrls.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_h264_decode_params' type-id='47cb2abc' visibility='default' filepath='include/media/v4l2-ctrls.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_vp8_frame_header' type-id='e26652e6' visibility='default' filepath='include/media/v4l2-ctrls.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_hevc_sps' type-id='112f0343' visibility='default' filepath='include/media/v4l2-ctrls.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_hevc_pps' type-id='f9de3b94' visibility='default' filepath='include/media/v4l2-ctrls.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_hevc_slice_params' type-id='2948bd22' visibility='default' filepath='include/media/v4l2-ctrls.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_area' type-id='26385187' visibility='default' filepath='include/media/v4l2-ctrls.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p_const' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='82' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_ctrl_handler' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='346' column='1' id='d6130048'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_lock' type-id='925167dc' visibility='default' filepath='include/media/v4l2-ctrls.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='e0ea832a' visibility='default' filepath='include/media/v4l2-ctrls.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ctrls' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ctrl_refs' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cached' type-id='9f3a0131' visibility='default' filepath='include/media/v4l2-ctrls.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='buckets' type-id='c34fbd81' visibility='default' filepath='include/media/v4l2-ctrls.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='notify' type-id='7ec3cb1e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='notify_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_of_buckets' type-id='1dc6a898' visibility='default' filepath='include/media/v4l2-ctrls.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='request_is_queued' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-ctrls.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='requests' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='requests_queued' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='req_obj' type-id='a5b7e4fd' visibility='default' filepath='include/media/v4l2-ctrls.h' line='360' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_ref' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='302' column='1' id='c19e9dd9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='9f3a0131' visibility='default' filepath='include/media/v4l2-ctrls.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ctrl' type-id='4b8b2cf3' visibility='default' filepath='include/media/v4l2-ctrls.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='helper' type-id='7308495a' visibility='default' filepath='include/media/v4l2-ctrls.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='from_other_dev' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-ctrls.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='req_done' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-ctrls.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='req' type-id='9f3a0131' visibility='default' filepath='include/media/v4l2-ctrls.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='p_req' type-id='3f78e6a9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='310' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='224' column='1' id='dbc7d793'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ev_subs' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='handler' type-id='2b59fa5e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cluster' type-id='c517999b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ncontrols' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='done' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='is_new' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='has_changed' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='is_private' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='is_auto' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='is_int' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='is_string' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='is_ptr' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='is_array' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='has_volatiles' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='call_notify' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='manual_mode_value' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='1086b623' visibility='default' filepath='include/media/v4l2-ctrls.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='type_ops' type-id='b076d304' visibility='default' filepath='include/media/v4l2-ctrls.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/media/v4l2-ctrls.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='type' type-id='cf13dc99' visibility='default' filepath='include/media/v4l2-ctrls.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='minimum' type-id='9b7c55ef' visibility='default' filepath='include/media/v4l2-ctrls.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='maximum' type-id='9b7c55ef' visibility='default' filepath='include/media/v4l2-ctrls.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='default_value' type-id='9b7c55ef' visibility='default' filepath='include/media/v4l2-ctrls.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='elems' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='elem_size' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dims' type-id='1c6c0c39' visibility='default' filepath='include/media/v4l2-ctrls.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nr_of_dims' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='' type-id='b91b9370' visibility='default' filepath='include/media/v4l2-ctrls.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='' type-id='87415f3a' visibility='default' filepath='include/media/v4l2-ctrls.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/v4l2-ctrls.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='val' type-id='a7832498' visibility='default' filepath='include/media/v4l2-ctrls.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='cur' type-id='b0ee3ba9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='p_def' type-id='3f78e6a9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='p_new' type-id='3f78e6a9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='p_cur' type-id='3f78e6a9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='273' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='99' column='1' id='205c2e40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='g_volatile_ctrl' type-id='4e4de503' visibility='default' filepath='include/media/v4l2-ctrls.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='try_ctrl' type-id='4e4de503' visibility='default' filepath='include/media/v4l2-ctrls.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='s_ctrl' type-id='4e4de503' visibility='default' filepath='include/media/v4l2-ctrls.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_type_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='115' column='1' id='b154eaef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='equal' type-id='f456402b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init' type-id='95625cb2' visibility='default' filepath='include/media/v4l2-ctrls.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='log' type-id='c71b901b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='validate' type-id='f089c08b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='122' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_mpeg2_slice_params' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='56' column='1' id='276d5663'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='data_bit_offset' type-id='3f1a6b60' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='backward_ref_ts' type-id='d3130597' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='forward_ref_ts' type-id='d3130597' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sequence' type-id='ecf565e1' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='picture' type-id='c82910ee' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='quantiser_scale_code' type-id='3f1a6b60' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_mpeg2_sequence' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='26' column='1' id='ecf565e1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='horizontal_size' type-id='d315442e' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='vertical_size' type-id='d315442e' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vbv_buffer_size' type-id='3f1a6b60' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='profile_and_level_indication' type-id='d315442e' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='progressive_sequence' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='chroma_format' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_mpeg2_picture' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='38' column='1' id='c82910ee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='picture_coding_type' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='f_code' type-id='86be53ee' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='intra_dc_precision' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='picture_structure' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='top_field_first' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frame_pred_frame_dct' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='concealment_motion_vectors' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='q_scale_type' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='intra_vlc_format' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='alternate_scan' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='repeat_first_field' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='progressive_frame' type-id='d315442e' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_mpeg2_quantization' size-in-bits='2080' is-struct='yes' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='69' column='1' id='2633295b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='load_intra_quantiser_matrix' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='load_non_intra_quantiser_matrix' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='load_chroma_intra_quantiser_matrix' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='load_chroma_non_intra_quantiser_matrix' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='intra_quantiser_matrix' type-id='73b95420' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='non_intra_quantiser_matrix' type-id='73b95420' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='chroma_intra_quantiser_matrix' type-id='73b95420' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='chroma_non_intra_quantiser_matrix' type-id='73b95420' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_fwht_params' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/fwht-ctrls.h' line='18' column='1' id='fcc0eea6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='backward_ref_ts' type-id='d3130597' visibility='default' filepath='include/media/fwht-ctrls.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='version' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='colorspace' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='xfer_func' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ycbcr_enc' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='quantization' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_h264_sps' size-in-bits='8384' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='64' column='1' id='26761b9f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='profile_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='constraint_set_flags' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='level_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='seq_parameter_set_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='chroma_format_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bit_depth_luma_minus8' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bit_depth_chroma_minus8' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='log2_max_frame_num_minus4' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pic_order_cnt_type' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='log2_max_pic_order_cnt_lsb_minus4' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='max_num_ref_frames' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='num_ref_frames_in_pic_order_cnt_cycle' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='offset_for_ref_frame' type-id='29cc01cd' visibility='default' filepath='include/media/h264-ctrls.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='offset_for_non_ref_pic' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8288'>
+          <var-decl name='offset_for_top_to_bottom_field' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='pic_width_in_mbs_minus1' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8336'>
+          <var-decl name='pic_height_in_map_units_minus1' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8352'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_h264_pps' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='94' column='1' id='ca2e9cda'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pic_parameter_set_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='seq_parameter_set_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='num_slice_groups_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='num_ref_idx_l0_default_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num_ref_idx_l1_default_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='weighted_bipred_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='pic_init_qp_minus26' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='pic_init_qs_minus26' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='chroma_qp_index_offset' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='second_chroma_qp_index_offset' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_h264_scaling_matrix' size-in-bits='3840' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='108' column='1' id='3a58d3ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scaling_list_4x4' type-id='9a59aaef' visibility='default' filepath='include/media/h264-ctrls.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='scaling_list_8x8' type-id='a112b67c' visibility='default' filepath='include/media/h264-ctrls.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_h264_slice_params' size-in-bits='7168' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='137' column='1' id='a44a15b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='start_byte_offset' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='header_bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='first_mb_in_slice' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='slice_type' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='pic_parameter_set_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='colour_plane_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='redundant_pic_cnt' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='frame_num' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='idr_pic_id' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='pic_order_cnt_lsb' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='delta_pic_order_cnt_bottom' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='delta_pic_order_cnt0' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='delta_pic_order_cnt1' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='pred_weight_table' type-id='864d11b6' visibility='default' filepath='include/media/h264-ctrls.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='dec_ref_pic_marking_bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6496'>
+          <var-decl name='pic_order_cnt_bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='cabac_init_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6536'>
+          <var-decl name='slice_qp_delta' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6544'>
+          <var-decl name='slice_qs_delta' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6552'>
+          <var-decl name='disable_deblocking_filter_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6560'>
+          <var-decl name='slice_alpha_c0_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6568'>
+          <var-decl name='slice_beta_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6576'>
+          <var-decl name='num_ref_idx_l0_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6584'>
+          <var-decl name='num_ref_idx_l1_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='slice_group_change_cycle' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6624'>
+          <var-decl name='ref_pic_list0' type-id='7e67d89d' visibility='default' filepath='include/media/h264-ctrls.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6880'>
+          <var-decl name='ref_pic_list1' type-id='7e67d89d' visibility='default' filepath='include/media/h264-ctrls.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7136'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_h264_pred_weight_table' size-in-bits='6176' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='120' column='1' id='864d11b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='luma_log2_weight_denom' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='chroma_log2_weight_denom' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='weight_factors' type-id='a4444dc4' visibility='default' filepath='include/media/h264-ctrls.h' line='123' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_h264_weight_factors' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='113' column='1' id='c1c411a0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='luma_weight' type-id='467f4e10' visibility='default' filepath='include/media/h264-ctrls.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='luma_offset' type-id='467f4e10' visibility='default' filepath='include/media/h264-ctrls.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='chroma_weight' type-id='0399400c' visibility='default' filepath='include/media/h264-ctrls.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='chroma_offset' type-id='0399400c' visibility='default' filepath='include/media/h264-ctrls.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_h264_decode_params' size-in-bits='3200' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='201' column='1' id='4aef34b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dpb' type-id='eefef0c1' visibility='default' filepath='include/media/h264-ctrls.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='num_slices' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3088'>
+          <var-decl name='nal_ref_idc' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='top_field_order_cnt' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='bottom_field_order_cnt' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3168'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_h264_dpb_entry' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='189' column='1' id='7a583acc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reference_ts' type-id='d3130597' visibility='default' filepath='include/media/h264-ctrls.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frame_num' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='pic_num' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='top_field_order_cnt' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bottom_field_order_cnt' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='196' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_vp8_frame_header' size-in-bits='9856' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='81' column='1' id='ef5bccc0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='segment_header' type-id='58370a8e' visibility='default' filepath='include/media/vp8-ctrls.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lf_header' type-id='e4362873' visibility='default' filepath='include/media/vp8-ctrls.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='quant_header' type-id='b6008b50' visibility='default' filepath='include/media/vp8-ctrls.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='entropy_header' type-id='2b2e1d12' visibility='default' filepath='include/media/vp8-ctrls.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='coder_state' type-id='e65ce076' visibility='default' filepath='include/media/vp8-ctrls.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9184'>
+          <var-decl name='width' type-id='d315442e' visibility='default' filepath='include/media/vp8-ctrls.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9200'>
+          <var-decl name='height' type-id='d315442e' visibility='default' filepath='include/media/vp8-ctrls.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='horizontal_scale' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9224'>
+          <var-decl name='vertical_scale' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9232'>
+          <var-decl name='version' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9240'>
+          <var-decl name='prob_skip_false' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9248'>
+          <var-decl name='prob_intra' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9256'>
+          <var-decl name='prob_last' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9264'>
+          <var-decl name='prob_gf' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9272'>
+          <var-decl name='num_dct_parts' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='first_part_size' type-id='3f1a6b60' visibility='default' filepath='include/media/vp8-ctrls.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9312'>
+          <var-decl name='first_part_header_bits' type-id='3f1a6b60' visibility='default' filepath='include/media/vp8-ctrls.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='dct_part_sizes' type-id='7f84eb57' visibility='default' filepath='include/media/vp8-ctrls.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='last_frame_ts' type-id='d3130597' visibility='default' filepath='include/media/vp8-ctrls.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='golden_frame_ts' type-id='d3130597' visibility='default' filepath='include/media/vp8-ctrls.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='alt_frame_ts' type-id='d3130597' visibility='default' filepath='include/media/vp8-ctrls.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='flags' type-id='d3130597' visibility='default' filepath='include/media/vp8-ctrls.h' line='109' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_segment_header' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='26' column='1' id='58370a8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='quant_update' type-id='87ce7f1e' visibility='default' filepath='include/media/vp8-ctrls.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lf_update' type-id='87ce7f1e' visibility='default' filepath='include/media/vp8-ctrls.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='segment_probs' type-id='c216126b' visibility='default' filepath='include/media/vp8-ctrls.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='padding' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/vp8-ctrls.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_loopfilter_header' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='37' column='1' id='e4362873'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ref_frm_delta' type-id='87ce7f1e' visibility='default' filepath='include/media/vp8-ctrls.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mb_mode_delta' type-id='87ce7f1e' visibility='default' filepath='include/media/vp8-ctrls.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sharpness_level' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='level' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='padding' type-id='d315442e' visibility='default' filepath='include/media/vp8-ctrls.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/vp8-ctrls.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_quantization_header' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='46' column='1' id='b6008b50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='y_ac_qi' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='y_dc_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='y2_dc_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='y2_ac_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='uv_dc_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='uv_ac_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='padding' type-id='d315442e' visibility='default' filepath='include/media/vp8-ctrls.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_entropy_header' size-in-bits='8832' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='56' column='1' id='2b2e1d12'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='coeff_probs' type-id='96a07b89' visibility='default' filepath='include/media/vp8-ctrls.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='y_mode_probs' type-id='c213d3d4' visibility='default' filepath='include/media/vp8-ctrls.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='uv_mode_probs' type-id='c216126b' visibility='default' filepath='include/media/vp8-ctrls.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8504'>
+          <var-decl name='mv_probs' type-id='fa0a1f4c' visibility='default' filepath='include/media/vp8-ctrls.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8808'>
+          <var-decl name='padding' type-id='c216126b' visibility='default' filepath='include/media/vp8-ctrls.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_entropy_coder_state' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='64' column='1' id='e65ce076'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='range' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='value' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bit_count' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='padding' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_hevc_sps' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='55' column='1' id='d36a5b23'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pic_width_in_luma_samples' type-id='d315442e' visibility='default' filepath='include/media/hevc-ctrls.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='pic_height_in_luma_samples' type-id='d315442e' visibility='default' filepath='include/media/hevc-ctrls.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bit_depth_luma_minus8' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bit_depth_chroma_minus8' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='log2_max_pic_order_cnt_lsb_minus4' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='sps_max_dec_pic_buffering_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sps_max_num_reorder_pics' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='sps_max_latency_increase_plus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='log2_min_luma_coding_block_size_minus3' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='log2_diff_max_min_luma_coding_block_size' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='log2_min_luma_transform_block_size_minus2' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='log2_diff_max_min_luma_transform_block_size' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='max_transform_hierarchy_depth_inter' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='max_transform_hierarchy_depth_intra' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pcm_sample_bit_depth_luma_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='pcm_sample_bit_depth_chroma_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='log2_min_pcm_luma_coding_block_size_minus3' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='log2_diff_max_min_pcm_luma_coding_block_size' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='num_short_term_ref_pic_sets' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='num_long_term_ref_pics_sps' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='chroma_format_idc' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='padding' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='d3130597' visibility='default' filepath='include/media/hevc-ctrls.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_hevc_pps' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='104' column='1' id='7458c17e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_extra_slice_header_bits' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='init_qp_minus26' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='diff_cu_qp_delta_depth' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='pps_cb_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pps_cr_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='num_tile_columns_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='num_tile_rows_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='column_width_minus1' type-id='26fb03b8' visibility='default' filepath='include/media/hevc-ctrls.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='row_height_minus1' type-id='eaf62816' visibility='default' filepath='include/media/hevc-ctrls.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='pps_beta_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='pps_tc_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='408'>
+          <var-decl name='log2_parallel_merge_level_minus2' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='padding' type-id='c213d3d4' visibility='default' filepath='include/media/hevc-ctrls.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flags' type-id='d3130597' visibility='default' filepath='include/media/hevc-ctrls.h' line='120' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_hevc_slice_params' size-in-bits='4224' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='164' column='1' id='e565fd94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/hevc-ctrls.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='data_bit_offset' type-id='3f1a6b60' visibility='default' filepath='include/media/hevc-ctrls.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nal_unit_type' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='nuh_temporal_id_plus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='slice_type' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='colour_plane_id' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='slice_pic_order_cnt' type-id='d315442e' visibility='default' filepath='include/media/hevc-ctrls.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='num_ref_idx_l0_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='num_ref_idx_l1_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='collocated_ref_idx' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='five_minus_max_num_merge_cand' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='slice_qp_delta' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='slice_cb_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='slice_cr_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='slice_act_y_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='slice_act_cb_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='slice_act_cr_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='slice_beta_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='slice_tc_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='pic_struct' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='num_active_dpb_entries' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ref_idx_l0' type-id='9396cabb' visibility='default' filepath='include/media/hevc-ctrls.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='ref_idx_l1' type-id='9396cabb' visibility='default' filepath='include/media/hevc-ctrls.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='num_rps_poc_st_curr_before' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='488'>
+          <var-decl name='num_rps_poc_st_curr_after' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='num_rps_poc_lt_curr' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='504'>
+          <var-decl name='padding' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dpb' type-id='41c4bc5d' visibility='default' filepath='include/media/hevc-ctrls.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='pred_weight_table' type-id='c1b5e872' visibility='default' filepath='include/media/hevc-ctrls.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='flags' type-id='d3130597' visibility='default' filepath='include/media/hevc-ctrls.h' line='209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_hevc_dpb_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='129' column='1' id='a1f34f28'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timestamp' type-id='d3130597' visibility='default' filepath='include/media/hevc-ctrls.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rps' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='field_pic' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='pic_order_cnt' type-id='810b4a17' visibility='default' filepath='include/media/hevc-ctrls.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='padding' type-id='0618bc0e' visibility='default' filepath='include/media/hevc-ctrls.h' line='134' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_hevc_pred_weight_table' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='137' column='1' id='c1b5e872'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='delta_luma_weight_l0' type-id='2d85a215' visibility='default' filepath='include/media/hevc-ctrls.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='luma_offset_l0' type-id='2d85a215' visibility='default' filepath='include/media/hevc-ctrls.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='delta_chroma_weight_l0' type-id='1e28c56f' visibility='default' filepath='include/media/hevc-ctrls.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='chroma_offset_l0' type-id='1e28c56f' visibility='default' filepath='include/media/hevc-ctrls.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='delta_luma_weight_l1' type-id='2d85a215' visibility='default' filepath='include/media/hevc-ctrls.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='luma_offset_l1' type-id='2d85a215' visibility='default' filepath='include/media/hevc-ctrls.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='delta_chroma_weight_l1' type-id='1e28c56f' visibility='default' filepath='include/media/hevc-ctrls.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='chroma_offset_l1' type-id='1e28c56f' visibility='default' filepath='include/media/hevc-ctrls.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='padding' type-id='c60dc9f2' visibility='default' filepath='include/media/hevc-ctrls.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1584'>
+          <var-decl name='luma_log2_weight_denom' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1592'>
+          <var-decl name='delta_chroma_log2_weight_denom' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='151' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='v4l2_ctrl_type' filepath='include/uapi/linux/videodev2.h' line='1718' column='1' id='cf13dc99'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_CTRL_TYPE_INTEGER' value='1'/>
+        <enumerator name='V4L2_CTRL_TYPE_BOOLEAN' value='2'/>
+        <enumerator name='V4L2_CTRL_TYPE_MENU' value='3'/>
+        <enumerator name='V4L2_CTRL_TYPE_BUTTON' value='4'/>
+        <enumerator name='V4L2_CTRL_TYPE_INTEGER64' value='5'/>
+        <enumerator name='V4L2_CTRL_TYPE_CTRL_CLASS' value='6'/>
+        <enumerator name='V4L2_CTRL_TYPE_STRING' value='7'/>
+        <enumerator name='V4L2_CTRL_TYPE_BITMASK' value='8'/>
+        <enumerator name='V4L2_CTRL_TYPE_INTEGER_MENU' value='9'/>
+        <enumerator name='V4L2_CTRL_COMPOUND_TYPES' value='256'/>
+        <enumerator name='V4L2_CTRL_TYPE_U8' value='256'/>
+        <enumerator name='V4L2_CTRL_TYPE_U16' value='257'/>
+        <enumerator name='V4L2_CTRL_TYPE_U32' value='258'/>
+        <enumerator name='V4L2_CTRL_TYPE_AREA' value='262'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='256' column='1' id='b91b9370'>
+        <data-member access='private'>
+          <var-decl name='step' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='menu_skip_mask' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='258' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='260' column='1' id='87415f3a'>
+        <data-member access='private'>
+          <var-decl name='qmenu' type-id='13956559' visibility='default' filepath='include/media/v4l2-ctrls.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='qmenu_int' type-id='43ae54cf' visibility='default' filepath='include/media/v4l2-ctrls.h' line='262' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='267' column='1' id='b0ee3ba9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='a7832498' visibility='default' filepath='include/media/v4l2-ctrls.h' line='268' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='v4l2_ctrl_notify_fnc' type-id='af2775f4' filepath='include/media/v4l2-ctrls.h' line='136' column='1' id='7ec3cb1e'/>
+      <class-decl name='media_request_object' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/media/media-request.h' line='269' column='1' id='a5b7e4fd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='4228340f' visibility='default' filepath='include/media/media-request.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/media-request.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='req' type-id='ac429605' visibility='default' filepath='include/media/media-request.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/media-request.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/media/media-request.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='completed' type-id='b50a4934' visibility='default' filepath='include/media/media-request.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_request_object_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/media-request.h' line='247' column='1' id='d2613fd6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare' type-id='226f205f' visibility='default' filepath='include/media/media-request.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unprepare' type-id='afb80c18' visibility='default' filepath='include/media/media-request.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='queue' type-id='afb80c18' visibility='default' filepath='include/media/media-request.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unbind' type-id='afb80c18' visibility='default' filepath='include/media/media-request.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='afb80c18' visibility='default' filepath='include/media/media-request.h' line='252' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_queue' size-in-bits='6592' is-struct='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='553' column='1' id='6b30321d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='io_modes' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/media/videobuf2-core.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dma_attrs' type-id='7359adad' visibility='default' filepath='include/media/videobuf2-core.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='bidirectional' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='fileio_read_once' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='fileio_write_immediately' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='allow_zero_bytesused' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='quirk_poll_must_check_waiting_for_buffers' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='supports_requests' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='requires_requests' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='uses_qbuf' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='uses_requests' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='e0ea832a' visibility='default' filepath='include/media/videobuf2-core.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='owner' type-id='eaa32e2f' visibility='default' filepath='include/media/videobuf2-core.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ops' type-id='a1d66c91' visibility='default' filepath='include/media/videobuf2-core.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mem_ops' type-id='15cf8e87' visibility='default' filepath='include/media/videobuf2-core.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='buf_ops' type-id='97b65be3' visibility='default' filepath='include/media/videobuf2-core.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='drv_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/videobuf2-core.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='subsystem_flags' type-id='19c2251e' visibility='default' filepath='include/media/videobuf2-core.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='buf_struct_size' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='timestamp_flags' type-id='19c2251e' visibility='default' filepath='include/media/videobuf2-core.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='gfp_flags' type-id='3eb7c31c' visibility='default' filepath='include/media/videobuf2-core.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='min_buffers_needed' type-id='19c2251e' visibility='default' filepath='include/media/videobuf2-core.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='alloc_devs' type-id='f6e5abef' visibility='default' filepath='include/media/videobuf2-core.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='mmap_lock' type-id='925167dc' visibility='default' filepath='include/media/videobuf2-core.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='memory' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='dma_dir' type-id='eea6b025' visibility='default' filepath='include/media/videobuf2-core.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='bufs' type-id='f989fdcc' visibility='default' filepath='include/media/videobuf2-core.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='num_buffers' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='queued_list' type-id='72f469ec' visibility='default' filepath='include/media/videobuf2-core.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='queued_count' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5984'>
+          <var-decl name='owned_by_drv_count' type-id='49178f86' visibility='default' filepath='include/media/videobuf2-core.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='done_list' type-id='72f469ec' visibility='default' filepath='include/media/videobuf2-core.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='done_lock' type-id='fb4018a0' visibility='default' filepath='include/media/videobuf2-core.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='done_wq' type-id='b5ab048f' visibility='default' filepath='include/media/videobuf2-core.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='streaming' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='start_streaming_called' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='error' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='waiting_for_buffers' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='waiting_in_dqbuf' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='is_multiplanar' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='is_output' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='copy_timestamp' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='last_buffer_dequeued' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='fileio' type-id='372af73d' visibility='default' filepath='include/media/videobuf2-core.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='threadio' type-id='dc2d641b' visibility='default' filepath='include/media/videobuf2-core.h' line='610' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_ops' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='411' column='1' id='1e4ac06a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='queue_setup' type-id='f4ef52eb' visibility='default' filepath='include/media/videobuf2-core.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_prepare' type-id='d2e04e44' visibility='default' filepath='include/media/videobuf2-core.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wait_finish' type-id='d2e04e44' visibility='default' filepath='include/media/videobuf2-core.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='buf_out_validate' type-id='85280418' visibility='default' filepath='include/media/videobuf2-core.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='buf_init' type-id='85280418' visibility='default' filepath='include/media/videobuf2-core.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='buf_prepare' type-id='85280418' visibility='default' filepath='include/media/videobuf2-core.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='buf_finish' type-id='547e4f07' visibility='default' filepath='include/media/videobuf2-core.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='buf_cleanup' type-id='547e4f07' visibility='default' filepath='include/media/videobuf2-core.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='start_streaming' type-id='15bfa933' visibility='default' filepath='include/media/videobuf2-core.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='stop_streaming' type-id='d2e04e44' visibility='default' filepath='include/media/videobuf2-core.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='buf_queue' type-id='547e4f07' visibility='default' filepath='include/media/videobuf2-core.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='buf_request_complete' type-id='547e4f07' visibility='default' filepath='include/media/videobuf2-core.h' line='430' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_buffer' size-in-bits='4096' is-struct='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='245' column='1' id='4a078c54'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vb2_queue' type-id='a05f1ecd' visibility='default' filepath='include/media/videobuf2-core.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='memory' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='num_planes' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timestamp' type-id='91ce1af9' visibility='default' filepath='include/media/videobuf2-core.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='request' type-id='ac429605' visibility='default' filepath='include/media/videobuf2-core.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='req_obj' type-id='a5b7e4fd' visibility='default' filepath='include/media/videobuf2-core.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='state' type-id='550876cf' visibility='default' filepath='include/media/videobuf2-core.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='synced' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='prepared' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='copied_timestamp' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='planes' type-id='105eff46' visibility='default' filepath='include/media/videobuf2-core.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='queued_entry' type-id='72f469ec' visibility='default' filepath='include/media/videobuf2-core.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='done_entry' type-id='72f469ec' visibility='default' filepath='include/media/videobuf2-core.h' line='279' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='vb2_buffer_state' filepath='include/media/videobuf2-core.h' line='219' column='1' id='550876cf'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='VB2_BUF_STATE_DEQUEUED' value='0'/>
+        <enumerator name='VB2_BUF_STATE_IN_REQUEST' value='1'/>
+        <enumerator name='VB2_BUF_STATE_PREPARING' value='2'/>
+        <enumerator name='VB2_BUF_STATE_QUEUED' value='3'/>
+        <enumerator name='VB2_BUF_STATE_ACTIVE' value='4'/>
+        <enumerator name='VB2_BUF_STATE_DONE' value='5'/>
+        <enumerator name='VB2_BUF_STATE_ERROR' value='6'/>
+      </enum-decl>
+      <class-decl name='vb2_plane' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='174' column='1' id='b3ad2c1c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mem_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/videobuf2-core.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dbuf' type-id='5e4f599b' visibility='default' filepath='include/media/videobuf2-core.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dbuf_mapped' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='bytesused' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='length' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='min_length' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='m' type-id='07aa0de4' visibility='default' filepath='include/media/videobuf2-core.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='data_offset' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='186' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='181' column='1' id='07aa0de4'>
+        <data-member access='private'>
+          <var-decl name='offset' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='userptr' type-id='7359adad' visibility='default' filepath='include/media/videobuf2-core.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fd' type-id='95e97e5e' visibility='default' filepath='include/media/videobuf2-core.h' line='184' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='vb2_mem_ops' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='118' column='1' id='68597e64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alloc' type-id='ba09778f' visibility='default' filepath='include/media/videobuf2-core.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='put' type-id='b7f9d8e6' visibility='default' filepath='include/media/videobuf2-core.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_dmabuf' type-id='de210c7e' visibility='default' filepath='include/media/videobuf2-core.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_userptr' type-id='81e32a16' visibility='default' filepath='include/media/videobuf2-core.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='put_userptr' type-id='b7f9d8e6' visibility='default' filepath='include/media/videobuf2-core.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='prepare' type-id='b7f9d8e6' visibility='default' filepath='include/media/videobuf2-core.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='finish' type-id='b7f9d8e6' visibility='default' filepath='include/media/videobuf2-core.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='attach_dmabuf' type-id='5acb9c3c' visibility='default' filepath='include/media/videobuf2-core.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='detach_dmabuf' type-id='b7f9d8e6' visibility='default' filepath='include/media/videobuf2-core.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='map_dmabuf' type-id='b9b212f5' visibility='default' filepath='include/media/videobuf2-core.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='unmap_dmabuf' type-id='b7f9d8e6' visibility='default' filepath='include/media/videobuf2-core.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vaddr' type-id='5ad9edb6' visibility='default' filepath='include/media/videobuf2-core.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='cookie' type-id='5ad9edb6' visibility='default' filepath='include/media/videobuf2-core.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='num_users' type-id='caa804f2' visibility='default' filepath='include/media/videobuf2-core.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='mmap' type-id='f34c7de4' visibility='default' filepath='include/media/videobuf2-core.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_buf_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='450' column='1' id='71d68b50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='verify_planes_array' type-id='c4cd4be2' visibility='default' filepath='include/media/videobuf2-core.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init_buffer' type-id='547e4f07' visibility='default' filepath='include/media/videobuf2-core.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fill_user_buffer' type-id='35cea26b' visibility='default' filepath='include/media/videobuf2-core.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fill_vb2_buffer' type-id='9cbbcc93' visibility='default' filepath='include/media/videobuf2-core.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='copy_timestamp' type-id='35cea26b' visibility='default' filepath='include/media/videobuf2-core.h' line='455' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_v4l2_buffer' size-in-bits='7488' is-struct='yes' visibility='default' filepath='include/media/videobuf2-v4l2.h' line='42' column='1' id='b8e47b1d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vb2_buf' type-id='4a078c54' visibility='default' filepath='include/media/videobuf2-v4l2.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/videobuf2-v4l2.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4128'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/media/videobuf2-v4l2.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='timecode' type-id='5f820012' visibility='default' filepath='include/media/videobuf2-v4l2.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='sequence' type-id='3f1a6b60' visibility='default' filepath='include/media/videobuf2-v4l2.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4320'>
+          <var-decl name='request_fd' type-id='3158a266' visibility='default' filepath='include/media/videobuf2-v4l2.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='is_held' type-id='b50a4934' visibility='default' filepath='include/media/videobuf2-v4l2.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='planes' type-id='105eff46' visibility='default' filepath='include/media/videobuf2-v4l2.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_m2m_queue_ctx' size-in-bits='6784' is-struct='yes' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='65' column='1' id='0651f1ee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q' type-id='6b30321d' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='rdy_queue' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='rdy_spinlock' type-id='fb4018a0' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6752'>
+          <var-decl name='num_rdy' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6760'>
+          <var-decl name='buffered' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-mem2mem.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2331' column='1' id='967c1c06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='u' type-id='454ee2bf' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='timestamp' type-id='a9c79a1f' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='reserved' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2345' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2333' column='1' id='454ee2bf'>
+        <data-member access='private'>
+          <var-decl name='vsync' type-id='cbe6daf0' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2334' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ctrl' type-id='ecd6d55a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2335' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='frame_sync' type-id='101c7fc2' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2336' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='src_change' type-id='af41d400' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2337' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='motion_det' type-id='f95c1b03' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2338' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='data' type-id='73b95420' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2339' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_event_vsync' size-in-bits='8' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2282' column='1' id='cbe6daf0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='field' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2284' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event_ctrl' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2292' column='1' id='ecd6d55a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='changes' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='de5442d3' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='minimum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='maximum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='step' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='default_value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2303' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2295' column='1' id='de5442d3'>
+        <data-member access='private'>
+          <var-decl name='value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2296' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='value64' type-id='49659421' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2297' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_event_frame_sync' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2306' column='1' id='101c7fc2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frame_sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2307' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event_src_change' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2312' column='1' id='af41d400'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='changes' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2313' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event_motion_det' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2325' column='1' id='f95c1b03'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='frame_sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='region_mask' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2328' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='d2613fd6' const='yes' id='904f813f'/>
+      <pointer-type-def type-id='904f813f' size-in-bits='64' id='4228340f'/>
+      <pointer-type-def type-id='d238557f' size-in-bits='64' id='43ae54cf'/>
+      <qualified-type-def type-id='dbc7d793' const='yes' id='01863b98'/>
+      <pointer-type-def type-id='01863b98' size-in-bits='64' id='184ff936'/>
+      <qualified-type-def type-id='205c2e40' const='yes' id='0645931b'/>
+      <pointer-type-def type-id='0645931b' size-in-bits='64' id='1086b623'/>
+      <qualified-type-def type-id='b154eaef' const='yes' id='d26ed346'/>
+      <pointer-type-def type-id='d26ed346' size-in-bits='64' id='b076d304'/>
+      <qualified-type-def type-id='71d68b50' const='yes' id='4925ee5b'/>
+      <pointer-type-def type-id='4925ee5b' size-in-bits='64' id='97b65be3'/>
+      <qualified-type-def type-id='68597e64' const='yes' id='23cb2797'/>
+      <pointer-type-def type-id='23cb2797' size-in-bits='64' id='15cf8e87'/>
+      <qualified-type-def type-id='1e4ac06a' const='yes' id='1f063fe1'/>
+      <pointer-type-def type-id='1f063fe1' size-in-bits='64' id='a1d66c91'/>
+      <pointer-type-def type-id='fa0b179b' size-in-bits='64' id='50764ba3'/>
+      <pointer-type-def type-id='e4934d54' size-in-bits='64' id='de210c7e'/>
+      <pointer-type-def type-id='38cb23df' size-in-bits='64' id='f089c08b'/>
+      <pointer-type-def type-id='d56a4c4b' size-in-bits='64' id='226f205f'/>
+      <pointer-type-def type-id='5651631f' size-in-bits='64' id='4e4de503'/>
+      <pointer-type-def type-id='299608ee' size-in-bits='64' id='85280418'/>
+      <pointer-type-def type-id='1e6604d7' size-in-bits='64' id='9cbbcc93'/>
+      <pointer-type-def type-id='f9bc47e0' size-in-bits='64' id='c4cd4be2'/>
+      <pointer-type-def type-id='a8a63667' size-in-bits='64' id='15bfa933'/>
+      <pointer-type-def type-id='78b081ff' size-in-bits='64' id='f4ef52eb'/>
+      <pointer-type-def type-id='5329c4da' size-in-bits='64' id='f34c7de4'/>
+      <pointer-type-def type-id='a5b7e4fd' size-in-bits='64' id='347d8ccd'/>
+      <pointer-type-def type-id='9b7c55ef' size-in-bits='64' id='842ac8d6'/>
+      <pointer-type-def type-id='596e4a77' size-in-bits='64' id='f456402b'/>
+      <pointer-type-def type-id='dbc7d793' size-in-bits='64' id='4b8b2cf3'/>
+      <pointer-type-def type-id='4b8b2cf3' size-in-bits='64' id='c517999b'/>
+      <pointer-type-def type-id='fcc0eea6' size-in-bits='64' id='efba361c'/>
+      <pointer-type-def type-id='4aef34b6' size-in-bits='64' id='47cb2abc'/>
+      <pointer-type-def type-id='ca2e9cda' size-in-bits='64' id='91e3ab68'/>
+      <pointer-type-def type-id='3a58d3ba' size-in-bits='64' id='f7e7b3e8'/>
+      <pointer-type-def type-id='a44a15b8' size-in-bits='64' id='0541bcde'/>
+      <pointer-type-def type-id='26761b9f' size-in-bits='64' id='b9348c47'/>
+      <pointer-type-def type-id='d6130048' size-in-bits='64' id='2b59fa5e'/>
+      <pointer-type-def type-id='8a6e72bc' size-in-bits='64' id='7308495a'/>
+      <pointer-type-def type-id='7458c17e' size-in-bits='64' id='f9de3b94'/>
+      <pointer-type-def type-id='e565fd94' size-in-bits='64' id='2948bd22'/>
+      <pointer-type-def type-id='d36a5b23' size-in-bits='64' id='112f0343'/>
+      <pointer-type-def type-id='2633295b' size-in-bits='64' id='fa7d167b'/>
+      <pointer-type-def type-id='276d5663' size-in-bits='64' id='48bc1523'/>
+      <pointer-type-def type-id='c19e9dd9' size-in-bits='64' id='9f3a0131'/>
+      <pointer-type-def type-id='9f3a0131' size-in-bits='64' id='c34fbd81'/>
+      <pointer-type-def type-id='ef5bccc0' size-in-bits='64' id='e26652e6'/>
+      <pointer-type-def type-id='967c1c06' size-in-bits='64' id='a5c94ccc'/>
+      <pointer-type-def type-id='ba69e54c' size-in-bits='64' id='b50ade7a'/>
+      <pointer-type-def type-id='4a078c54' size-in-bits='64' id='85535682'/>
+      <pointer-type-def type-id='c1670ffd' size-in-bits='64' id='372af73d'/>
+      <pointer-type-def type-id='b3ad2c1c' size-in-bits='64' id='5de22dda'/>
+      <pointer-type-def type-id='6b30321d' size-in-bits='64' id='a05f1ecd'/>
+      <pointer-type-def type-id='cca707fb' size-in-bits='64' id='dc2d641b'/>
+      <pointer-type-def type-id='b8e47b1d' size-in-bits='64' id='9a42d4cd'/>
+      <pointer-type-def type-id='fee334bf' size-in-bits='64' id='c71b901b'/>
+      <pointer-type-def type-id='dd703408' size-in-bits='64' id='95625cb2'/>
+      <pointer-type-def type-id='38e7219e' size-in-bits='64' id='afb80c18'/>
+      <pointer-type-def type-id='d59331c2' size-in-bits='64' id='af2775f4'/>
+      <pointer-type-def type-id='cd68bc93' size-in-bits='64' id='547e4f07'/>
+      <pointer-type-def type-id='7ec379e7' size-in-bits='64' id='35cea26b'/>
+      <pointer-type-def type-id='9097330a' size-in-bits='64' id='d2e04e44'/>
+      <pointer-type-def type-id='f7cd66fa' size-in-bits='64' id='5acb9c3c'/>
+      <pointer-type-def type-id='a2db2d94' size-in-bits='64' id='81e32a16'/>
+      <pointer-type-def type-id='850738b3' size-in-bits='64' id='ba09778f'/>
+      <pointer-type-def type-id='cd5d79f4' size-in-bits='64' id='5ad9edb6'/>
+      <var-decl name='v4l2_type_names' type-id='35f5fc88' mangled-name='v4l2_type_names' visibility='default' filepath='drivers/media/v4l2-core/v4l2-ioctl.c' line='178' column='1' elf-symbol-id='v4l2_type_names'/>
+      <function-decl name='video_ioctl2' mangled-name='video_ioctl2' filepath='drivers/media/v4l2-core/v4l2-ioctl.c' line='3147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='video_ioctl2'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/v4l2-core/v4l2-ioctl.c' line='3147' column='1'/>
+        <parameter type-id='f0981eeb' name='cmd' filepath='drivers/media/v4l2-core/v4l2-ioctl.c' line='3148' column='1'/>
+        <parameter type-id='7359adad' name='arg' filepath='drivers/media/v4l2-core/v4l2-ioctl.c' line='3148' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='v4l2_g_ctrl' mangled-name='v4l2_g_ctrl' filepath='include/media/v4l2-ctrls.h' line='1325' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_g_ctrl'>
+        <parameter type-id='2b59fa5e'/>
+        <parameter type-id='bcd28457'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_s_ctrl' mangled-name='v4l2_s_ctrl' filepath='include/media/v4l2-ctrls.h' line='1338' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_s_ctrl'>
+        <parameter type-id='b7db9582'/>
+        <parameter type-id='2b59fa5e'/>
+        <parameter type-id='bcd28457'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_event_dequeue' mangled-name='v4l2_event_dequeue' filepath='include/media/v4l2-event.h' line='91' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_event_dequeue'>
+        <parameter type-id='b7db9582'/>
+        <parameter type-id='a5c94ccc'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='e4934d54'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='5e4f599b'/>
+      </function-type>
+      <function-type size-in-bits='64' id='38cb23df'>
+        <parameter type-id='184ff936'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='3f78e6a9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d56a4c4b'>
+        <parameter type-id='347d8ccd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5651631f'>
+        <parameter type-id='4b8b2cf3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='299608ee'>
+        <parameter type-id='85535682'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1e6604d7'>
+        <parameter type-id='85535682'/>
+        <parameter type-id='5de22dda'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f9bc47e0'>
+        <parameter type-id='85535682'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a8a63667'>
+        <parameter type-id='a05f1ecd'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78b081ff'>
+        <parameter type-id='a05f1ecd'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='50764ba3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5329c4da'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='596e4a77'>
+        <parameter type-id='184ff936'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='3f78e6a9'/>
+        <parameter type-id='3f78e6a9'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fee334bf'>
+        <parameter type-id='184ff936'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dd703408'>
+        <parameter type-id='184ff936'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='3f78e6a9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='38e7219e'>
+        <parameter type-id='347d8ccd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d59331c2'>
+        <parameter type-id='4b8b2cf3'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cd68bc93'>
+        <parameter type-id='85535682'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7ec379e7'>
+        <parameter type-id='85535682'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9097330a'>
+        <parameter type-id='a05f1ecd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f7cd66fa'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2db2d94'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='850738b3'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eea6b025'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cd5d79f4'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/media/v4l2-core/v4l2-spi.c' language='LANG_C89'>
+      <class-decl name='spi_board_info' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/spi/spi.h' line='1319' column='1' id='12ab03ef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='modalias' type-id='16dc656a' visibility='default' filepath='include/linux/spi/spi.h' line='1328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='platform_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='1329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='properties' type-id='9e1d140c' visibility='default' filepath='include/linux/spi/spi.h' line='1330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='controller_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='1331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/spi/spi.h' line='1332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='max_speed_hz' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='1335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='bus_num' type-id='1dc6a898' visibility='default' filepath='include/linux/spi/spi.h' line='1344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='chip_select' type-id='1dc6a898' visibility='default' filepath='include/linux/spi/spi.h' line='1345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='mode' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='1350' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='12ab03ef' size-in-bits='64' id='71dcfea7'/>
+      <function-decl name='v4l2_spi_new_subdev' mangled-name='v4l2_spi_new_subdev' filepath='drivers/media/v4l2-core/v4l2-spi.c' line='36' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_spi_new_subdev'>
+        <parameter type-id='ddfb71fa' name='v4l2_dev' filepath='drivers/media/v4l2-core/v4l2-spi.c' line='36' column='1'/>
+        <parameter type-id='f22e4524' name='master' filepath='drivers/media/v4l2-core/v4l2-spi.c' line='37' column='1'/>
+        <parameter type-id='71dcfea7' name='info' filepath='drivers/media/v4l2-core/v4l2-spi.c' line='38' column='1'/>
+        <return type-id='f5438ac7'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/media/v4l2-core/v4l2-subdev.c' language='LANG_C89'>
+      <var-decl name='v4l2_subdev_call_wrappers' type-id='3a7813d3' mangled-name='v4l2_subdev_call_wrappers' visibility='default' filepath='drivers/media/v4l2-core/v4l2-subdev.c' line='321' column='1' elf-symbol-id='v4l2_subdev_call_wrappers'/>
+      <function-decl name='v4l2_subdev_init' mangled-name='v4l2_subdev_init' filepath='drivers/media/v4l2-core/v4l2-subdev.c' line='777' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_subdev_init'>
+        <parameter type-id='f5438ac7' name='sd' filepath='drivers/media/v4l2-core/v4l2-subdev.c' line='777' column='1'/>
+        <parameter type-id='040770fb' name='ops' filepath='drivers/media/v4l2-core/v4l2-subdev.c' line='777' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/mfd/act8945a.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='272' id='ba592c87'>
+        <subrange length='34' type-id='7ff19f0f' id='6a6a7e00'/>
+      </array-type-def>
+      <class-decl name='vm_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='5f2f8da5'/>
+      <class-decl name='i2c_driver' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='253' column='1' id='66237bd2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='class' type-id='f0981eeb' visibility='default' filepath='include/linux/i2c.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='probe' type-id='37ec0ebd' visibility='default' filepath='include/linux/i2c.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='remove' type-id='e6e946ad' visibility='default' filepath='include/linux/i2c.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='probe_new' type-id='e6e946ad' visibility='default' filepath='include/linux/i2c.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='shutdown' type-id='d839e3f6' visibility='default' filepath='include/linux/i2c.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='alert' type-id='e9f334cb' visibility='default' filepath='include/linux/i2c.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='command' type-id='bbfd7f03' visibility='default' filepath='include/linux/i2c.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/i2c.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='id_table' type-id='49e46a4d' visibility='default' filepath='include/linux/i2c.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='detect' type-id='770b2313' visibility='default' filepath='include/linux/i2c.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='address_list' type-id='31347b7a' visibility='default' filepath='include/linux/i2c.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='clients' type-id='72f469ec' visibility='default' filepath='include/linux/i2c.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='disable_i2c_core_irq_mapping' type-id='b50a4934' visibility='default' filepath='include/linux/i2c.h' line='291' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='i2c_client' size-in-bits='7808' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='313' column='1' id='a9cdb48b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/linux/i2c.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='addr' type-id='8efea9e5' visibility='default' filepath='include/linux/i2c.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/linux/i2c.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='adapter' type-id='b9af02c3' visibility='default' filepath='include/linux/i2c.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/i2c.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='init_irq' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='detected' type-id='72f469ec' visibility='default' filepath='include/linux/i2c.h' line='332' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='i2c_adapter' size-in-bits='9600' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='685' column='1' id='ec5384d3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/i2c.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='class' type-id='f0981eeb' visibility='default' filepath='include/linux/i2c.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='algo' type-id='e93ce0cc' visibility='default' filepath='include/linux/i2c.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='algo_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/i2c.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock_ops' type-id='16d08491' visibility='default' filepath='include/linux/i2c.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bus_lock' type-id='dd823037' visibility='default' filepath='include/linux/i2c.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mux_lock' type-id='dd823037' visibility='default' filepath='include/linux/i2c.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='timeout' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='retries' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/i2c.h' line='698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='locked_flags' type-id='7359adad' visibility='default' filepath='include/linux/i2c.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='nr' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8352'>
+          <var-decl name='name' type-id='36d7f119' visibility='default' filepath='include/linux/i2c.h' line='704' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='dev_released' type-id='f9fef04f' visibility='default' filepath='include/linux/i2c.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='userspace_clients_lock' type-id='925167dc' visibility='default' filepath='include/linux/i2c.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='userspace_clients' type-id='72f469ec' visibility='default' filepath='include/linux/i2c.h' line='708' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='bus_recovery_info' type-id='f1537b61' visibility='default' filepath='include/linux/i2c.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='quirks' type-id='398e6008' visibility='default' filepath='include/linux/i2c.h' line='711' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='host_notify_domain' type-id='7544e825' visibility='default' filepath='include/linux/i2c.h' line='713' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='i2c_algorithm' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='526' column='1' id='547b1199'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='master_xfer' type-id='4813c4da' visibility='default' filepath='include/linux/i2c.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='master_xfer_atomic' type-id='4813c4da' visibility='default' filepath='include/linux/i2c.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='smbus_xfer' type-id='99dc8ee7' visibility='default' filepath='include/linux/i2c.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='smbus_xfer_atomic' type-id='99dc8ee7' visibility='default' filepath='include/linux/i2c.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='functionality' type-id='d0ff2b97' visibility='default' filepath='include/linux/i2c.h' line='548' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='i2c_msg' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/i2c.h' line='69' column='1' id='56ed3a25'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='d315442e' visibility='default' filepath='include/uapi/linux/i2c.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/uapi/linux/i2c.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='d315442e' visibility='default' filepath='include/uapi/linux/i2c.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='buf' type-id='474e5dcc' visibility='default' filepath='include/uapi/linux/i2c.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='i2c_lock_operations' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='564' column='1' id='a94a041a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock_bus' type-id='6523d744' visibility='default' filepath='include/linux/i2c.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='trylock_bus' type-id='3d5afe0d' visibility='default' filepath='include/linux/i2c.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='unlock_bus' type-id='6523d744' visibility='default' filepath='include/linux/i2c.h' line='567' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rt_mutex' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/rtmutex.h' line='30' column='1' id='dd823037'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wait_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/rtmutex.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='waiters' type-id='6fe1603d' visibility='default' filepath='include/linux/rtmutex.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='owner' type-id='f23e2572' visibility='default' filepath='include/linux/rtmutex.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='i2c_smbus_data' size-in-bits='272' visibility='default' filepath='include/uapi/linux/i2c.h' line='135' column='1' id='1a96c066'>
+        <data-member access='private'>
+          <var-decl name='byte' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/i2c.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='word' type-id='d315442e' visibility='default' filepath='include/uapi/linux/i2c.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='block' type-id='ba592c87' visibility='default' filepath='include/uapi/linux/i2c.h' line='138' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='i2c_bus_recovery_info' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='611' column='1' id='d5526a99'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='recover_bus' type-id='6ae2afd7' visibility='default' filepath='include/linux/i2c.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_scl' type-id='6ae2afd7' visibility='default' filepath='include/linux/i2c.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_scl' type-id='8f19938d' visibility='default' filepath='include/linux/i2c.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_sda' type-id='6ae2afd7' visibility='default' filepath='include/linux/i2c.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_sda' type-id='8f19938d' visibility='default' filepath='include/linux/i2c.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_bus_free' type-id='6ae2afd7' visibility='default' filepath='include/linux/i2c.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='prepare_recovery' type-id='8616a4a6' visibility='default' filepath='include/linux/i2c.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unprepare_recovery' type-id='8616a4a6' visibility='default' filepath='include/linux/i2c.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='scl_gpiod' type-id='26760480' visibility='default' filepath='include/linux/i2c.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sda_gpiod' type-id='26760480' visibility='default' filepath='include/linux/i2c.h' line='625' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='i2c_adapter_quirks' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='654' column='1' id='21fe2d6b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='91ce1af9' visibility='default' filepath='include/linux/i2c.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_num_msgs' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_write_len' type-id='1dc6a898' visibility='default' filepath='include/linux/i2c.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='max_read_len' type-id='1dc6a898' visibility='default' filepath='include/linux/i2c.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_comb_1st_msg_len' type-id='1dc6a898' visibility='default' filepath='include/linux/i2c.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='max_comb_2nd_msg_len' type-id='1dc6a898' visibility='default' filepath='include/linux/i2c.h' line='660' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='i2c_device_id' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='455' column='1' id='3db54816'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/linux/mod_devicetable.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_data' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='457' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='i2c_alert_protocol' filepath='include/linux/i2c.h' line='212' column='1' id='113aadc2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='I2C_PROTOCOL_SMBUS_ALERT' value='0'/>
+        <enumerator name='I2C_PROTOCOL_SMBUS_HOST_NOTIFY' value='1'/>
+      </enum-decl>
+      <class-decl name='i2c_board_info' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='409' column='1' id='f95bfc29'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='664ac0b7' visibility='default' filepath='include/linux/i2c.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/linux/i2c.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='addr' type-id='8efea9e5' visibility='default' filepath='include/linux/i2c.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev_name' type-id='80f4b756' visibility='default' filepath='include/linux/i2c.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='platform_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/i2c.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/i2c.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/i2c.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='properties' type-id='9e1d140c' visibility='default' filepath='include/linux/i2c.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='resources' type-id='e153f6de' visibility='default' filepath='include/linux/i2c.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='num_resources' type-id='f0981eeb' visibility='default' filepath='include/linux/i2c.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='420' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mfd_cell_acpi_match' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mfd/core.h' line='19' column='1' id='7fe6c639'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pnpid' type-id='80f4b756' visibility='default' filepath='include/linux/mfd/core.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='adr' type-id='340461fe' visibility='default' filepath='include/linux/mfd/core.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='8f048e17' size-in-bits='64' id='474e5dcc'/>
+      <qualified-type-def type-id='21fe2d6b' const='yes' id='d79644f2'/>
+      <pointer-type-def type-id='d79644f2' size-in-bits='64' id='398e6008'/>
+      <qualified-type-def type-id='547b1199' const='yes' id='9be24bae'/>
+      <pointer-type-def type-id='9be24bae' size-in-bits='64' id='e93ce0cc'/>
+      <qualified-type-def type-id='3db54816' const='yes' id='2174d0b5'/>
+      <pointer-type-def type-id='2174d0b5' size-in-bits='64' id='49e46a4d'/>
+      <qualified-type-def type-id='a94a041a' const='yes' id='00d2c7e1'/>
+      <pointer-type-def type-id='00d2c7e1' size-in-bits='64' id='16d08491'/>
+      <qualified-type-def type-id='3a47d82b' const='yes' id='340461fe'/>
+      <qualified-type-def type-id='54cc740b' const='yes' id='dbc3320a'/>
+      <pointer-type-def type-id='dbc3320a' size-in-bits='64' id='1447e860'/>
+      <qualified-type-def type-id='7fe6c639' const='yes' id='7a7796b6'/>
+      <pointer-type-def type-id='7a7796b6' size-in-bits='64' id='66421794'/>
+      <qualified-type-def type-id='822bf95b' const='yes' id='283e536e'/>
+      <pointer-type-def type-id='283e536e' size-in-bits='64' id='9e1d140c'/>
+      <qualified-type-def type-id='8efea9e5' const='yes' id='3beb2af4'/>
+      <pointer-type-def type-id='3beb2af4' size-in-bits='64' id='31347b7a'/>
+      <pointer-type-def type-id='ec5384d3' size-in-bits='64' id='b9af02c3'/>
+      <pointer-type-def type-id='f95bfc29' size-in-bits='64' id='fae597a1'/>
+      <pointer-type-def type-id='d5526a99' size-in-bits='64' id='f1537b61'/>
+      <pointer-type-def type-id='a9cdb48b' size-in-bits='64' id='3e31633b'/>
+      <pointer-type-def type-id='66237bd2' size-in-bits='64' id='29ffcb70'/>
+      <pointer-type-def type-id='56ed3a25' size-in-bits='64' id='cd44bc95'/>
+      <pointer-type-def type-id='1a96c066' size-in-bits='64' id='a556dccb'/>
+      <pointer-type-def type-id='4033dd6b' size-in-bits='64' id='6ae2afd7'/>
+      <pointer-type-def type-id='674bdea8' size-in-bits='64' id='4813c4da'/>
+      <pointer-type-def type-id='86768fbb' size-in-bits='64' id='99dc8ee7'/>
+      <pointer-type-def type-id='5d16c291' size-in-bits='64' id='3d5afe0d'/>
+      <pointer-type-def type-id='42fd5899' size-in-bits='64' id='e6e946ad'/>
+      <pointer-type-def type-id='7fa2fd91' size-in-bits='64' id='37ec0ebd'/>
+      <pointer-type-def type-id='9f57d337' size-in-bits='64' id='770b2313'/>
+      <pointer-type-def type-id='73b9a01f' size-in-bits='64' id='bbfd7f03'/>
+      <pointer-type-def type-id='64f1e67b' size-in-bits='64' id='d0ff2b97'/>
+      <pointer-type-def type-id='5f2f8da5' size-in-bits='64' id='d295dab3'/>
+      <pointer-type-def type-id='d385bfac' size-in-bits='64' id='8616a4a6'/>
+      <pointer-type-def type-id='d6574e69' size-in-bits='64' id='8f19938d'/>
+      <pointer-type-def type-id='9d4721a2' size-in-bits='64' id='6523d744'/>
+      <pointer-type-def type-id='4322685c' size-in-bits='64' id='d839e3f6'/>
+      <pointer-type-def type-id='7f779b3f' size-in-bits='64' id='e9f334cb'/>
+      <function-decl name='i2c_del_driver' mangled-name='i2c_del_driver' filepath='include/linux/i2c.h' line='841' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_del_driver'>
+        <parameter type-id='29ffcb70'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_mfd_add_devices' mangled-name='devm_mfd_add_devices' filepath='include/linux/mfd/core.h' line='130' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_mfd_add_devices'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='1447e860'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='c9d64c0d'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7544e825'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_register_driver' mangled-name='i2c_register_driver' filepath='include/linux/i2c.h' line='840' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_register_driver'>
+        <parameter type-id='2730d015'/>
+        <parameter type-id='29ffcb70'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='4033dd6b'>
+        <parameter type-id='b9af02c3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='674bdea8'>
+        <parameter type-id='b9af02c3'/>
+        <parameter type-id='cd44bc95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='86768fbb'>
+        <parameter type-id='b9af02c3'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='a84c031d'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='a556dccb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5d16c291'>
+        <parameter type-id='b9af02c3'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='42fd5899'>
+        <parameter type-id='3e31633b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7fa2fd91'>
+        <parameter type-id='3e31633b'/>
+        <parameter type-id='49e46a4d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9f57d337'>
+        <parameter type-id='3e31633b'/>
+        <parameter type-id='fae597a1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='73b9a01f'>
+        <parameter type-id='3e31633b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='64f1e67b'>
+        <parameter type-id='b9af02c3'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d385bfac'>
+        <parameter type-id='b9af02c3'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d6574e69'>
+        <parameter type-id='b9af02c3'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9d4721a2'>
+        <parameter type-id='b9af02c3'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4322685c'>
+        <parameter type-id='3e31633b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7f779b3f'>
+        <parameter type-id='3e31633b'/>
+        <parameter type-id='113aadc2'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/mfd/mfd-core.c' language='LANG_C89'>
+      <function-decl name='mfd_add_devices' mangled-name='mfd_add_devices' filepath='drivers/mfd/mfd-core.c' line='292' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mfd_add_devices'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/mfd/mfd-core.c' line='292' column='1'/>
+        <parameter type-id='95e97e5e' name='id' filepath='drivers/mfd/mfd-core.c' line='292' column='1'/>
+        <parameter type-id='1447e860' name='cells' filepath='drivers/mfd/mfd-core.c' line='293' column='1'/>
+        <parameter type-id='95e97e5e' name='n_devs' filepath='drivers/mfd/mfd-core.c' line='293' column='1'/>
+        <parameter type-id='c9d64c0d' name='mem_base' filepath='drivers/mfd/mfd-core.c' line='294' column='1'/>
+        <parameter type-id='95e97e5e' name='irq_base' filepath='drivers/mfd/mfd-core.c' line='295' column='1'/>
+        <parameter type-id='7544e825' name='domain' filepath='drivers/mfd/mfd-core.c' line='295' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mfd_remove_devices' mangled-name='mfd_remove_devices' filepath='drivers/mfd/mfd-core.c' line='348' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mfd_remove_devices'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/mfd/mfd-core.c' line='348' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/mfd/syscon.c' language='LANG_C89'>
+      <function-decl name='syscon_regmap_lookup_by_phandle_args' mangled-name='syscon_regmap_lookup_by_phandle_args' filepath='drivers/mfd/syscon.c' line='228' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='syscon_regmap_lookup_by_phandle_args'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/mfd/syscon.c' line='228' column='1'/>
+        <parameter type-id='80f4b756' name='property' filepath='drivers/mfd/syscon.c' line='229' column='1'/>
+        <parameter type-id='95e97e5e' name='arg_count' filepath='drivers/mfd/syscon.c' line='230' column='1'/>
+        <parameter type-id='807869d3' name='out_args' filepath='drivers/mfd/syscon.c' line='231' column='1'/>
+        <return type-id='29af9a72'/>
+      </function-decl>
+      <function-decl name='of_hwspin_lock_get_id' mangled-name='of_hwspin_lock_get_id' filepath='include/linux/hwspinlock.h' line='64' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_hwspin_lock_get_id'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/mmc/core/bus.c' language='LANG_C89'>
+      <class-decl name='mmc_driver' size-in-bits='1600' is-struct='yes' visibility='default' filepath='drivers/mmc/core/bus.h' line='32' column='1' id='8956d73b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='drv' type-id='fe007c02' visibility='default' filepath='drivers/mmc/core/bus.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='probe' type-id='27bdd081' visibility='default' filepath='drivers/mmc/core/bus.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='remove' type-id='81b1af2a' visibility='default' filepath='drivers/mmc/core/bus.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='shutdown' type-id='81b1af2a' visibility='default' filepath='drivers/mmc/core/bus.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d1bbb6dd' size-in-bits='64' id='27bdd081'/>
+      <pointer-type-def type-id='8956d73b' size-in-bits='64' id='a46f3b5b'/>
+      <pointer-type-def type-id='98654b30' size-in-bits='64' id='81b1af2a'/>
+      <function-decl name='mmc_register_driver' mangled-name='mmc_register_driver' filepath='drivers/mmc/core/bus.c' line='227' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_register_driver'>
+        <parameter type-id='a46f3b5b' name='drv' filepath='drivers/mmc/core/bus.c' line='227' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_unregister_driver' mangled-name='mmc_unregister_driver' filepath='drivers/mmc/core/bus.c' line='239' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_unregister_driver'>
+        <parameter type-id='a46f3b5b' name='drv' filepath='drivers/mmc/core/bus.c' line='239' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='d1bbb6dd'>
+        <parameter type-id='13d38dcb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='98654b30'>
+        <parameter type-id='13d38dcb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/mmc/core/core.c' language='LANG_C89'>
+      <class-decl name='sdio_func' is-struct='yes' visibility='default' is-declaration-only='yes' id='4073d266'/>
+      <class-decl name='mmc_pwrseq' size-in-bits='320' is-struct='yes' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='23' column='1' id='bed6720a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='0fbcba93' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pwrseq_node' type-id='72f469ec' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_pwrseq_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='16' column='1' id='e67a5dc2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pre_power_on' type-id='fa3ed3a2' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='post_power_on' type-id='fa3ed3a2' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='power_off' type-id='fa3ed3a2' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reset' type-id='fa3ed3a2' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='b0f558fb' const='yes' id='a6dc8192'/>
+      <pointer-type-def type-id='a6dc8192' size-in-bits='64' id='652034a8'/>
+      <qualified-type-def type-id='e67a5dc2' const='yes' id='c968032b'/>
+      <pointer-type-def type-id='c968032b' size-in-bits='64' id='0fbcba93'/>
+      <pointer-type-def type-id='bed6720a' size-in-bits='64' id='0d786922'/>
+      <pointer-type-def type-id='4073d266' size-in-bits='64' id='c1880946'/>
+      <function-decl name='mmc_request_done' mangled-name='mmc_request_done' filepath='drivers/mmc/core/core.c' line='138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_request_done'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='138' column='1'/>
+        <parameter type-id='47f117d4' name='mrq' filepath='drivers/mmc/core/core.c' line='138' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_start_request' mangled-name='mmc_start_request' filepath='drivers/mmc/core/core.c' line='335' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_start_request'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='335' column='1'/>
+        <parameter type-id='47f117d4' name='mrq' filepath='drivers/mmc/core/core.c' line='335' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_retune_release' mangled-name='mmc_retune_release' filepath='drivers/mmc/core/host.h' line='19' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_retune_release'>
+        <parameter type-id='dd575c43'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_cqe_start_req' mangled-name='mmc_cqe_start_req' filepath='drivers/mmc/core/core.c' line='448' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_cqe_start_req'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='448' column='1'/>
+        <parameter type-id='47f117d4' name='mrq' filepath='drivers/mmc/core/core.c' line='448' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_cqe_request_done' mangled-name='mmc_cqe_request_done' filepath='drivers/mmc/core/core.c' line='498' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_cqe_request_done'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='498' column='1'/>
+        <parameter type-id='47f117d4' name='mrq' filepath='drivers/mmc/core/core.c' line='498' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_cqe_post_req' mangled-name='mmc_cqe_post_req' filepath='drivers/mmc/core/core.c' line='532' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_cqe_post_req'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='532' column='1'/>
+        <parameter type-id='47f117d4' name='mrq' filepath='drivers/mmc/core/core.c' line='532' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_cqe_recovery' mangled-name='mmc_cqe_recovery' filepath='drivers/mmc/core/core.c' line='551' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_cqe_recovery'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='551' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_wait_for_req' mangled-name='mmc_wait_for_req' filepath='drivers/mmc/core/core.c' line='619' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_wait_for_req'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='619' column='1'/>
+        <parameter type-id='47f117d4' name='mrq' filepath='drivers/mmc/core/core.c' line='619' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_wait_for_cmd' mangled-name='mmc_wait_for_cmd' filepath='drivers/mmc/core/core.c' line='638' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_wait_for_cmd'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='638' column='1'/>
+        <parameter type-id='6df3750c' name='cmd' filepath='drivers/mmc/core/core.c' line='638' column='1'/>
+        <parameter type-id='95e97e5e' name='retries' filepath='drivers/mmc/core/core.c' line='638' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_set_data_timeout' mangled-name='mmc_set_data_timeout' filepath='drivers/mmc/core/core.c' line='665' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_set_data_timeout'>
+        <parameter type-id='6de64ec1' name='data' filepath='drivers/mmc/core/core.c' line='665' column='1'/>
+        <parameter type-id='652034a8' name='card' filepath='drivers/mmc/core/core.c' line='665' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__mmc_claim_host' mangled-name='__mmc_claim_host' filepath='drivers/mmc/core/core.c' line='796' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__mmc_claim_host'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='796' column='1'/>
+        <parameter type-id='f1e196e0' name='ctx' filepath='drivers/mmc/core/core.c' line='796' column='1'/>
+        <parameter type-id='8a47abc3' name='abort' filepath='drivers/mmc/core/core.c' line='797' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_release_host' mangled-name='mmc_release_host' filepath='drivers/mmc/core/core.c' line='844' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_release_host'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='844' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_get_card' mangled-name='mmc_get_card' filepath='drivers/mmc/core/core.c' line='873' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_get_card'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/core.c' line='873' column='1'/>
+        <parameter type-id='f1e196e0' name='ctx' filepath='drivers/mmc/core/core.c' line='873' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_put_card' mangled-name='mmc_put_card' filepath='drivers/mmc/core/core.c' line='884' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_put_card'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/core.c' line='884' column='1'/>
+        <parameter type-id='f1e196e0' name='ctx' filepath='drivers/mmc/core/core.c' line='884' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_detect_change' mangled-name='mmc_detect_change' filepath='drivers/mmc/core/core.c' line='1496' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_detect_change'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='1496' column='1'/>
+        <parameter type-id='7359adad' name='delay' filepath='drivers/mmc/core/core.c' line='1496' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_erase' mangled-name='mmc_erase' filepath='drivers/mmc/core/core.c' line='1861' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_erase'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/core.c' line='1861' column='1'/>
+        <parameter type-id='f0981eeb' name='from' filepath='drivers/mmc/core/core.c' line='1861' column='1'/>
+        <parameter type-id='f0981eeb' name='nr' filepath='drivers/mmc/core/core.c' line='1861' column='1'/>
+        <parameter type-id='f0981eeb' name='arg' filepath='drivers/mmc/core/core.c' line='1862' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_can_erase' mangled-name='mmc_can_erase' filepath='drivers/mmc/core/core.c' line='1922' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_can_erase'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/core.c' line='1922' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_can_trim' mangled-name='mmc_can_trim' filepath='drivers/mmc/core/core.c' line='1931' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_can_trim'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/core.c' line='1931' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_can_sanitize' mangled-name='mmc_can_sanitize' filepath='drivers/mmc/core/core.c' line='1952' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_can_sanitize'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/core.c' line='1952' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_can_secure_erase_trim' mangled-name='mmc_can_secure_erase_trim' filepath='drivers/mmc/core/core.c' line='1962' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_can_secure_erase_trim'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/core.c' line='1962' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_erase_group_aligned' mangled-name='mmc_erase_group_aligned' filepath='drivers/mmc/core/core.c' line='1971' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_erase_group_aligned'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/core.c' line='1971' column='1'/>
+        <parameter type-id='f0981eeb' name='from' filepath='drivers/mmc/core/core.c' line='1971' column='1'/>
+        <parameter type-id='f0981eeb' name='nr' filepath='drivers/mmc/core/core.c' line='1972' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_calc_max_discard' mangled-name='mmc_calc_max_discard' filepath='drivers/mmc/core/core.c' line='2060' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_calc_max_discard'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/core.c' line='2060' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='mmc_hw_reset' mangled-name='mmc_hw_reset' filepath='drivers/mmc/core/core.c' line='2118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_hw_reset'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='2118' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_detect_card_removed' mangled-name='mmc_detect_card_removed' filepath='drivers/mmc/core/core.c' line='2241' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_detect_card_removed'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='2241' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_gpiod_request_cd_irq' mangled-name='mmc_gpiod_request_cd_irq' filepath='include/linux/mmc/slot-gpio.h' line='27' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_gpiod_request_cd_irq'>
+        <parameter type-id='dd575c43'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/mmc/core/host.c' language='LANG_C89'>
+      <function-decl name='mmc_alloc_host' mangled-name='mmc_alloc_host' filepath='drivers/mmc/core/host.c' line='396' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_alloc_host'>
+        <parameter type-id='95e97e5e' name='extra' filepath='drivers/mmc/core/host.c' line='396' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/mmc/core/host.c' line='396' column='1'/>
+        <return type-id='dd575c43'/>
+      </function-decl>
+      <function-decl name='mmc_retune_pause' mangled-name='mmc_retune_pause' filepath='drivers/mmc/core/host.c' line='70' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_retune_pause'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/host.c' line='70' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_retune_unpause' mangled-name='mmc_retune_unpause' filepath='drivers/mmc/core/host.c' line='80' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_retune_unpause'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/host.c' line='80' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_of_parse' mangled-name='mmc_of_parse' filepath='drivers/mmc/core/host.c' line='173' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_of_parse'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/host.c' line='173' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_gpiod_request_cd' mangled-name='mmc_gpiod_request_cd' filepath='include/linux/mmc/slot-gpio.h' line='18' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_gpiod_request_cd'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='c894953d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='d8e6b336'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_gpiod_request_ro' mangled-name='mmc_gpiod_request_ro' filepath='include/linux/mmc/slot-gpio.h' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_gpiod_request_ro'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='d8e6b336'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_of_parse_voltage' mangled-name='mmc_of_parse_voltage' filepath='drivers/mmc/core/host.c' line='354' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_of_parse_voltage'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/mmc/core/host.c' line='354' column='1'/>
+        <parameter type-id='f9409001' name='mask' filepath='drivers/mmc/core/host.c' line='354' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_add_host' mangled-name='mmc_add_host' filepath='drivers/mmc/core/host.c' line='462' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_add_host'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/host.c' line='462' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_remove_host' mangled-name='mmc_remove_host' filepath='drivers/mmc/core/host.c' line='496' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_remove_host'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/host.c' line='496' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_free_host' mangled-name='mmc_free_host' filepath='drivers/mmc/core/host.c' line='519' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_free_host'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/host.c' line='519' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/mmc/core/mmc.c' language='LANG_C89'>
+      <function-decl name='mmc_get_ext_csd' mangled-name='mmc_get_ext_csd' filepath='drivers/mmc/core/mmc_ops.h' line='31' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_get_ext_csd'>
+        <parameter type-id='13d38dcb'/>
+        <parameter type-id='ae4d32ca'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_cmdq_enable' mangled-name='mmc_cmdq_enable' filepath='drivers/mmc/core/mmc_ops.h' line='41' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_cmdq_enable'>
+        <parameter type-id='13d38dcb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_send_status' mangled-name='mmc_send_status' filepath='drivers/mmc/core/mmc_ops.h' line='24' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_send_status'>
+        <parameter type-id='13d38dcb'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_flush_cache' mangled-name='mmc_flush_cache' filepath='drivers/mmc/core/mmc_ops.h' line='40' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_flush_cache'>
+        <parameter type-id='13d38dcb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='cf536864' size-in-bits='64' id='ae4d32ca'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/mmc/core/mmc_ops.c' language='LANG_C89'>
+      <function-decl name='__mmc_send_status' mangled-name='__mmc_send_status' filepath='drivers/mmc/core/mmc_ops.c' line='54' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__mmc_send_status'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/mmc_ops.c' line='54' column='1'/>
+        <parameter type-id='f9409001' name='status' filepath='drivers/mmc/core/mmc_ops.c' line='54' column='1'/>
+        <parameter type-id='f0981eeb' name='retries' filepath='drivers/mmc/core/mmc_ops.c' line='54' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_switch' mangled-name='mmc_switch' filepath='drivers/mmc/core/mmc_ops.c' line='603' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_switch'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/mmc_ops.c' line='603' column='1'/>
+        <parameter type-id='f9b06939' name='set' filepath='drivers/mmc/core/mmc_ops.c' line='603' column='1'/>
+        <parameter type-id='f9b06939' name='index' filepath='drivers/mmc/core/mmc_ops.c' line='603' column='1'/>
+        <parameter type-id='f9b06939' name='value' filepath='drivers/mmc/core/mmc_ops.c' line='603' column='1'/>
+        <parameter type-id='f0981eeb' name='timeout_ms' filepath='drivers/mmc/core/mmc_ops.c' line='604' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_send_tuning' mangled-name='mmc_send_tuning' filepath='drivers/mmc/core/mmc_ops.c' line='611' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_send_tuning'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/mmc_ops.c' line='611' column='1'/>
+        <parameter type-id='19c2251e' name='opcode' filepath='drivers/mmc/core/mmc_ops.c' line='611' column='1'/>
+        <parameter type-id='7292109c' name='cmd_error' filepath='drivers/mmc/core/mmc_ops.c' line='611' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_run_bkops' mangled-name='mmc_run_bkops' filepath='drivers/mmc/core/mmc_ops.c' line='920' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_run_bkops'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/mmc_ops.c' line='920' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_cmdq_disable' mangled-name='mmc_cmdq_disable' filepath='drivers/mmc/core/mmc_ops.c' line='998' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_cmdq_disable'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/mmc_ops.c' line='998' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/mmc/core/regulator.c' language='LANG_C89'>
+      <function-decl name='mmc_regulator_set_ocr' mangled-name='mmc_regulator_set_ocr' filepath='drivers/mmc/core/regulator.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_regulator_set_ocr'>
+        <parameter type-id='dd575c43' name='mmc' filepath='drivers/mmc/core/regulator.c' line='106' column='1'/>
+        <parameter type-id='850c13f6' name='supply' filepath='drivers/mmc/core/regulator.c' line='107' column='1'/>
+        <parameter type-id='8efea9e5' name='vdd_bit' filepath='drivers/mmc/core/regulator.c' line='108' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_regulator_set_vqmmc' mangled-name='mmc_regulator_set_vqmmc' filepath='drivers/mmc/core/regulator.c' line='167' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_regulator_set_vqmmc'>
+        <parameter type-id='dd575c43' name='mmc' filepath='drivers/mmc/core/regulator.c' line='167' column='1'/>
+        <parameter type-id='3b590e48' name='ios' filepath='drivers/mmc/core/regulator.c' line='167' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_regulator_get_supply' mangled-name='mmc_regulator_get_supply' filepath='drivers/mmc/core/regulator.c' line='232' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_regulator_get_supply'>
+        <parameter type-id='dd575c43' name='mmc' filepath='drivers/mmc/core/regulator.c' line='232' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/mmc/core/sd_ops.c' language='LANG_C89'>
+      <function-decl name='mmc_app_cmd' mangled-name='mmc_app_cmd' filepath='drivers/mmc/core/sd_ops.c' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_app_cmd'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/sd_ops.c' line='21' column='1'/>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/sd_ops.c' line='21' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/mmc/core/sdio_bus.c' language='LANG_C89'>
+      <function-decl name='sdio_set_block_size' mangled-name='sdio_set_block_size' filepath='include/linux/mmc/sdio_func.h' line='131' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_set_block_size'>
+        <parameter type-id='c1880945'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/mmc/core/sdio_io.c' language='LANG_C89'>
+      <function-decl name='sdio_align_size' mangled-name='sdio_align_size' filepath='drivers/mmc/core/sdio_io.c' line='233' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_align_size'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='233' column='1'/>
+        <parameter type-id='f0981eeb' name='sz' filepath='drivers/mmc/core/sdio_io.c' line='233' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='sdio_memcpy_fromio' mangled-name='sdio_memcpy_fromio' filepath='drivers/mmc/core/sdio_io.c' line='468' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_memcpy_fromio'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='468' column='1'/>
+        <parameter type-id='eaa32e2f' name='dst' filepath='drivers/mmc/core/sdio_io.c' line='468' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='469' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='drivers/mmc/core/sdio_io.c' line='469' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdio_memcpy_toio' mangled-name='sdio_memcpy_toio' filepath='drivers/mmc/core/sdio_io.c' line='485' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_memcpy_toio'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='485' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='485' column='1'/>
+        <parameter type-id='eaa32e2f' name='src' filepath='drivers/mmc/core/sdio_io.c' line='486' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='drivers/mmc/core/sdio_io.c' line='486' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdio_readw' mangled-name='sdio_readw' filepath='drivers/mmc/core/sdio_io.c' line='536' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_readw'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='536' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='536' column='1'/>
+        <parameter type-id='7292109c' name='err_ret' filepath='drivers/mmc/core/sdio_io.c' line='536' column='1'/>
+        <return type-id='1dc6a898'/>
+      </function-decl>
+      <function-decl name='sdio_writew' mangled-name='sdio_writew' filepath='drivers/mmc/core/sdio_io.c' line='561' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_writew'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='561' column='1'/>
+        <parameter type-id='1dc6a898' name='b' filepath='drivers/mmc/core/sdio_io.c' line='561' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='561' column='1'/>
+        <parameter type-id='7292109c' name='err_ret' filepath='drivers/mmc/core/sdio_io.c' line='561' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdio_readl' mangled-name='sdio_readl' filepath='drivers/mmc/core/sdio_io.c' line='584' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_readl'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='584' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='584' column='1'/>
+        <parameter type-id='7292109c' name='err_ret' filepath='drivers/mmc/core/sdio_io.c' line='584' column='1'/>
+        <return type-id='19c2251e'/>
+      </function-decl>
+      <function-decl name='sdio_writel' mangled-name='sdio_writel' filepath='drivers/mmc/core/sdio_io.c' line='609' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_writel'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='609' column='1'/>
+        <parameter type-id='19c2251e' name='b' filepath='drivers/mmc/core/sdio_io.c' line='609' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='609' column='1'/>
+        <parameter type-id='7292109c' name='err_ret' filepath='drivers/mmc/core/sdio_io.c' line='609' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdio_f0_readb' mangled-name='sdio_f0_readb' filepath='drivers/mmc/core/sdio_io.c' line='631' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_f0_readb'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='631' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='631' column='1'/>
+        <parameter type-id='7292109c' name='err_ret' filepath='drivers/mmc/core/sdio_io.c' line='632' column='1'/>
+        <return type-id='002ac4a6'/>
+      </function-decl>
+      <function-decl name='sdio_f0_writeb' mangled-name='sdio_f0_writeb' filepath='drivers/mmc/core/sdio_io.c' line='667' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_f0_writeb'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='667' column='1'/>
+        <parameter type-id='002ac4a6' name='b' filepath='drivers/mmc/core/sdio_io.c' line='667' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='667' column='1'/>
+        <parameter type-id='7292109c' name='err_ret' filepath='drivers/mmc/core/sdio_io.c' line='668' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdio_get_host_pm_caps' mangled-name='sdio_get_host_pm_caps' filepath='drivers/mmc/core/sdio_io.c' line='700' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_get_host_pm_caps'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='700' column='1'/>
+        <return type-id='208a5a8d'/>
+      </function-decl>
+      <function-decl name='sdio_set_host_pm_flags' mangled-name='sdio_set_host_pm_flags' filepath='drivers/mmc/core/sdio_io.c' line='721' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_set_host_pm_flags'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='721' column='1'/>
+        <parameter type-id='208a5a8d' name='flags' filepath='drivers/mmc/core/sdio_io.c' line='721' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/mmc/core/sdio_irq.c' language='LANG_C89'>
+      <function-decl name='sdio_signal_irq' mangled-name='sdio_signal_irq' filepath='drivers/mmc/core/sdio_irq.c' line='132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_signal_irq'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/sdio_irq.c' line='132' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/mmc/core/slot-gpio.c' language='LANG_C89'>
+      <function-decl name='mmc_gpio_get_ro' mangled-name='mmc_gpio_get_ro' filepath='drivers/mmc/core/slot-gpio.c' line='63' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_gpio_get_ro'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/slot-gpio.c' line='63' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_gpio_get_cd' mangled-name='mmc_gpio_get_cd' filepath='drivers/mmc/core/slot-gpio.c' line='74' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_gpio_get_cd'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/slot-gpio.c' line='74' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_can_gpio_cd' mangled-name='mmc_can_gpio_cd' filepath='drivers/mmc/core/slot-gpio.c' line='207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_can_gpio_cd'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/slot-gpio.c' line='207' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/mmc/host/sdhci-pltfm.c' language='LANG_C89'>
+      <class-decl name='sdhci_pltfm_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/mmc/host/sdhci-pltfm.h' line='15' column='1' id='5864e8c1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='4ba2bd6c' visibility='default' filepath='drivers/mmc/host/sdhci-pltfm.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='quirks' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci-pltfm.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='quirks2' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci-pltfm.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='5864e8c1' const='yes' id='59a625dc'/>
+      <pointer-type-def type-id='59a625dc' size-in-bits='64' id='168dc242'/>
+      <function-decl name='sdhci_get_property' mangled-name='sdhci_get_property' filepath='drivers/mmc/host/sdhci-pltfm.c' line='79' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_get_property'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/mmc/host/sdhci-pltfm.c' line='79' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_pltfm_init' mangled-name='sdhci_pltfm_init' filepath='drivers/mmc/host/sdhci-pltfm.c' line='116' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_pltfm_init'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/mmc/host/sdhci-pltfm.c' line='116' column='1'/>
+        <parameter type-id='168dc242' name='pdata' filepath='drivers/mmc/host/sdhci-pltfm.c' line='117' column='1'/>
+        <parameter type-id='b59d7dce' name='priv_size' filepath='drivers/mmc/host/sdhci-pltfm.c' line='118' column='1'/>
+        <return type-id='2661e0d9'/>
+      </function-decl>
+      <function-decl name='sdhci_pltfm_free' mangled-name='sdhci_pltfm_free' filepath='drivers/mmc/host/sdhci-pltfm.c' line='165' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_pltfm_free'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/mmc/host/sdhci-pltfm.c' line='165' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='cfa9604e' size-in-bits='64' id='4ba2bd6c'/>
+      <pointer-type-def type-id='9d22e201' size-in-bits='64' id='2661e0d9'/>
+      <qualified-type-def type-id='63b6be81' const='yes' id='cfa9604e'/>
+      <class-decl name='sdhci_host' size-in-bits='9728' is-struct='yes' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='372' column='1' id='9d22e201'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hw_name' type-id='80f4b756' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='quirks' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='quirks2' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ioaddr' type-id='eaa32e2f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bounce_buffer' type-id='26a90f95' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bounce_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bounce_buffer_size' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='4ba2bd6c' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mmc' type-id='dd575c43' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mmc_host_ops' type-id='f2d6d1c0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='dma_mask' type-id='91ce1af9' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='led' type-id='6e0e17b0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='led_name' type-id='16dc656a' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5408'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='version' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5472'>
+          <var-decl name='max_clk' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='timeout_clk' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5536'>
+          <var-decl name='clk_mul' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='clock' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5600'>
+          <var-decl name='pwr' type-id='f9b06939' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5608'>
+          <var-decl name='runtime_suspended' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5616'>
+          <var-decl name='bus_on' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5624'>
+          <var-decl name='preset_enabled' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='pending_reset' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5640'>
+          <var-decl name='irq_wake_enabled' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5648'>
+          <var-decl name='v4_mode' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5656'>
+          <var-decl name='always_defer_done' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='mrqs_done' type-id='c2c0ece0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='cmd' type-id='6df3750c' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='data_cmd' type-id='6df3750c' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='deferred_cmd' type-id='6df3750c' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='data' type-id='6de64ec1' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='data_early' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='sg_miter' type-id='52378ac1' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='blocks' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6752'>
+          <var-decl name='sg_count' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='adma_table' type-id='eaa32e2f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='align_buffer' type-id='eaa32e2f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='adma_table_sz' type-id='b59d7dce' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='align_buffer_sz' type-id='b59d7dce' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='adma_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='align_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='desc_sz' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7200'>
+          <var-decl name='alloc_desc_sz' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='complete_wq' type-id='242e3d19' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='complete_work' type-id='ef9025d0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='data_timer' type-id='abe41e67' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='caps' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8608'>
+          <var-decl name='caps1' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='read_caps' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8672'>
+          <var-decl name='ocr_avail_sdio' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='ocr_avail_sd' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8736'>
+          <var-decl name='ocr_avail_mmc' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='ocr_mask' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8800'>
+          <var-decl name='timing' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='thread_isr' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8864'>
+          <var-decl name='ier' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='cqe_on' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8928'>
+          <var-decl name='cqe_ier' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='cqe_err_ier' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='buf_ready_int' type-id='b5ab048f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='tuning_done' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9248'>
+          <var-decl name='tuning_count' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='tuning_mode' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9312'>
+          <var-decl name='tuning_err' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='tuning_delay' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9376'>
+          <var-decl name='tuning_loop_count' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='sdma_boundary' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9440'>
+          <var-decl name='adma_table_cnt' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='data_timeout' type-id='91ce1af9' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='private' type-id='c99b5ecd' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='611' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='47f117d4' size-in-bits='128' id='c2c0ece0'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='sdhci_ops' size-in-bits='1856' is-struct='yes' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='614' column='1' id='63b6be81'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read_l' type-id='06b0c85e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read_w' type-id='c7990768' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read_b' type-id='8715d191' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write_l' type-id='b291458e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write_w' type-id='c8439540' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write_b' type-id='3cf0497b' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_clock' type-id='98dbb7da' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_power' type-id='71399c6f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irq' type-id='02663b56' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_dma_mask' type-id='a9d7e307' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='enable_dma' type-id='a9d7e307' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_max_clock' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_min_clock' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='get_timeout_clock' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='get_max_timeout_count' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_timeout' type-id='3fec7331' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='set_bus_width' type-id='288e0067' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='platform_send_init_74_clocks' type-id='30c362fc' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='get_ro' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='reset' type-id='30c362fc' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='platform_execute_tuning' type-id='d846c996' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='set_uhs_signaling' type-id='98dbb7da' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='hw_reset' type-id='13daec78' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='adma_workaround' type-id='bb4db0f7' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='card_event' type-id='13daec78' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='voltage_switch' type-id='13daec78' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='adma_write_desc' type-id='7a3863fd' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='request_done' type-id='d17e9a1d' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='dump_vendor_regs' type-id='13daec78' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='654' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d3baf253' size-in-bits='64' id='a9d7e307'/>
+      <pointer-type-def type-id='17a0b6f4' size-in-bits='64' id='d846c996'/>
+      <pointer-type-def type-id='a7132e26' size-in-bits='64' id='c7990768'/>
+      <pointer-type-def type-id='256a6e6c' size-in-bits='64' id='06b0c85e'/>
+      <pointer-type-def type-id='9bbd94a4' size-in-bits='64' id='02663b56'/>
+      <pointer-type-def type-id='182265d5' size-in-bits='64' id='8715d191'/>
+      <pointer-type-def type-id='aac6e642' size-in-bits='64' id='601d7eac'/>
+      <pointer-type-def type-id='846120de' size-in-bits='64' id='13daec78'/>
+      <pointer-type-def type-id='859caa73' size-in-bits='64' id='288e0067'/>
+      <pointer-type-def type-id='380397d5' size-in-bits='64' id='3fec7331'/>
+      <pointer-type-def type-id='b3f5a3c1' size-in-bits='64' id='d17e9a1d'/>
+      <pointer-type-def type-id='21f3c22e' size-in-bits='64' id='c8439540'/>
+      <pointer-type-def type-id='afcc3ab3' size-in-bits='64' id='bb4db0f7'/>
+      <pointer-type-def type-id='6b401e7c' size-in-bits='64' id='b291458e'/>
+      <pointer-type-def type-id='173ca462' size-in-bits='64' id='30c362fc'/>
+      <pointer-type-def type-id='7fdfc457' size-in-bits='64' id='3cf0497b'/>
+      <pointer-type-def type-id='17d4a823' size-in-bits='64' id='71399c6f'/>
+      <pointer-type-def type-id='05cc5338' size-in-bits='64' id='98dbb7da'/>
+      <pointer-type-def type-id='4d5c3e51' size-in-bits='64' id='7a3863fd'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/mmc/host/sdhci.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='47f117d4' size-in-bits='128' id='c2c0ece0'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='sdhci_host' size-in-bits='9728' is-struct='yes' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='372' column='1' id='9d22e201'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hw_name' type-id='80f4b756' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='quirks' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='quirks2' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ioaddr' type-id='eaa32e2f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bounce_buffer' type-id='26a90f95' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bounce_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bounce_buffer_size' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='4ba2bd6c' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mmc' type-id='dd575c43' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mmc_host_ops' type-id='f2d6d1c0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='dma_mask' type-id='91ce1af9' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='led' type-id='6e0e17b0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='led_name' type-id='16dc656a' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5408'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='version' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5472'>
+          <var-decl name='max_clk' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='timeout_clk' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5536'>
+          <var-decl name='clk_mul' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='clock' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5600'>
+          <var-decl name='pwr' type-id='f9b06939' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5608'>
+          <var-decl name='runtime_suspended' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5616'>
+          <var-decl name='bus_on' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5624'>
+          <var-decl name='preset_enabled' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='pending_reset' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5640'>
+          <var-decl name='irq_wake_enabled' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5648'>
+          <var-decl name='v4_mode' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5656'>
+          <var-decl name='always_defer_done' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='mrqs_done' type-id='c2c0ece0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='cmd' type-id='6df3750c' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='data_cmd' type-id='6df3750c' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='deferred_cmd' type-id='6df3750c' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='data' type-id='6de64ec1' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='data_early' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='sg_miter' type-id='52378ac1' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='blocks' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6752'>
+          <var-decl name='sg_count' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='adma_table' type-id='eaa32e2f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='align_buffer' type-id='eaa32e2f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='adma_table_sz' type-id='b59d7dce' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='align_buffer_sz' type-id='b59d7dce' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='adma_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='align_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='desc_sz' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7200'>
+          <var-decl name='alloc_desc_sz' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='complete_wq' type-id='242e3d19' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='complete_work' type-id='ef9025d0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='data_timer' type-id='abe41e67' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='caps' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8608'>
+          <var-decl name='caps1' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='read_caps' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8672'>
+          <var-decl name='ocr_avail_sdio' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='ocr_avail_sd' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8736'>
+          <var-decl name='ocr_avail_mmc' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='ocr_mask' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8800'>
+          <var-decl name='timing' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='thread_isr' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8864'>
+          <var-decl name='ier' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='cqe_on' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8928'>
+          <var-decl name='cqe_ier' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='cqe_err_ier' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='buf_ready_int' type-id='b5ab048f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='tuning_done' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9248'>
+          <var-decl name='tuning_count' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='tuning_mode' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9312'>
+          <var-decl name='tuning_err' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='tuning_delay' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9376'>
+          <var-decl name='tuning_loop_count' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='sdma_boundary' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9440'>
+          <var-decl name='adma_table_cnt' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='data_timeout' type-id='91ce1af9' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='private' type-id='c99b5ecd' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='611' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sdhci_ops' size-in-bits='1856' is-struct='yes' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='614' column='1' id='63b6be81'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read_l' type-id='06b0c85e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read_w' type-id='c7990768' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read_b' type-id='8715d191' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write_l' type-id='b291458e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write_w' type-id='c8439540' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write_b' type-id='3cf0497b' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_clock' type-id='98dbb7da' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_power' type-id='71399c6f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irq' type-id='02663b56' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_dma_mask' type-id='a9d7e307' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='enable_dma' type-id='a9d7e307' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_max_clock' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_min_clock' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='get_timeout_clock' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='get_max_timeout_count' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_timeout' type-id='3fec7331' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='set_bus_width' type-id='288e0067' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='platform_send_init_74_clocks' type-id='30c362fc' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='get_ro' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='reset' type-id='30c362fc' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='platform_execute_tuning' type-id='d846c996' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='set_uhs_signaling' type-id='98dbb7da' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='hw_reset' type-id='13daec78' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='adma_workaround' type-id='bb4db0f7' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='card_event' type-id='13daec78' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='voltage_switch' type-id='13daec78' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='adma_write_desc' type-id='7a3863fd' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='request_done' type-id='d17e9a1d' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='dump_vendor_regs' type-id='13daec78' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='654' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='63b6be81' const='yes' id='cfa9604e'/>
+      <pointer-type-def type-id='cfa9604e' size-in-bits='64' id='4ba2bd6c'/>
+      <pointer-type-def type-id='d3baf253' size-in-bits='64' id='a9d7e307'/>
+      <pointer-type-def type-id='17a0b6f4' size-in-bits='64' id='d846c996'/>
+      <pointer-type-def type-id='9d22e201' size-in-bits='64' id='2661e0d9'/>
+      <pointer-type-def type-id='a7132e26' size-in-bits='64' id='c7990768'/>
+      <pointer-type-def type-id='256a6e6c' size-in-bits='64' id='06b0c85e'/>
+      <pointer-type-def type-id='9bbd94a4' size-in-bits='64' id='02663b56'/>
+      <pointer-type-def type-id='182265d5' size-in-bits='64' id='8715d191'/>
+      <pointer-type-def type-id='aac6e642' size-in-bits='64' id='601d7eac'/>
+      <pointer-type-def type-id='846120de' size-in-bits='64' id='13daec78'/>
+      <pointer-type-def type-id='859caa73' size-in-bits='64' id='288e0067'/>
+      <pointer-type-def type-id='380397d5' size-in-bits='64' id='3fec7331'/>
+      <pointer-type-def type-id='b3f5a3c1' size-in-bits='64' id='d17e9a1d'/>
+      <pointer-type-def type-id='21f3c22e' size-in-bits='64' id='c8439540'/>
+      <pointer-type-def type-id='afcc3ab3' size-in-bits='64' id='bb4db0f7'/>
+      <pointer-type-def type-id='6b401e7c' size-in-bits='64' id='b291458e'/>
+      <pointer-type-def type-id='173ca462' size-in-bits='64' id='30c362fc'/>
+      <pointer-type-def type-id='7fdfc457' size-in-bits='64' id='3cf0497b'/>
+      <pointer-type-def type-id='17d4a823' size-in-bits='64' id='71399c6f'/>
+      <pointer-type-def type-id='05cc5338' size-in-bits='64' id='98dbb7da'/>
+      <pointer-type-def type-id='4d5c3e51' size-in-bits='64' id='7a3863fd'/>
+      <function-decl name='__sdhci_add_host' mangled-name='__sdhci_add_host' filepath='drivers/mmc/host/sdhci.c' line='4415' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sdhci_add_host'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='4415' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdhci_enable_v4_mode' mangled-name='sdhci_enable_v4_mode' filepath='drivers/mmc/host/sdhci.c' line='141' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_enable_v4_mode'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='141' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_reset' mangled-name='sdhci_reset' filepath='drivers/mmc/host/sdhci.c' line='201' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_reset'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='201' column='1'/>
+        <parameter type-id='f9b06939' name='mask' filepath='drivers/mmc/host/sdhci.c' line='201' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_enable_clk' mangled-name='sdhci_enable_clk' filepath='drivers/mmc/host/sdhci.c' line='1716' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_enable_clk'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='1716' column='1'/>
+        <parameter type-id='1dc6a898' name='clk' filepath='drivers/mmc/host/sdhci.c' line='1716' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_request' mangled-name='sdhci_request' filepath='drivers/mmc/host/sdhci.c' line='1887' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_request'>
+        <parameter type-id='dd575c43' name='mmc' filepath='drivers/mmc/host/sdhci.c' line='1887' column='1'/>
+        <parameter type-id='47f117d4' name='mrq' filepath='drivers/mmc/host/sdhci.c' line='1887' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_request_atomic' mangled-name='sdhci_request_atomic' filepath='drivers/mmc/host/sdhci.c' line='1931' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_request_atomic'>
+        <parameter type-id='dd575c43' name='mmc' filepath='drivers/mmc/host/sdhci.c' line='1931' column='1'/>
+        <parameter type-id='47f117d4' name='mrq' filepath='drivers/mmc/host/sdhci.c' line='1931' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdhci_set_bus_width' mangled-name='sdhci_set_bus_width' filepath='drivers/mmc/host/sdhci.c' line='1965' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_set_bus_width'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='1965' column='1'/>
+        <parameter type-id='95e97e5e' name='width' filepath='drivers/mmc/host/sdhci.c' line='1965' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_runtime_suspend_host' mangled-name='sdhci_runtime_suspend_host' filepath='drivers/mmc/host/sdhci.c' line='3468' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_runtime_suspend_host'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='3468' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdhci_runtime_resume_host' mangled-name='sdhci_runtime_resume_host' filepath='drivers/mmc/host/sdhci.c' line='3490' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_runtime_resume_host'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='3490' column='1'/>
+        <parameter type-id='95e97e5e' name='soft_reset' filepath='drivers/mmc/host/sdhci.c' line='3490' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdhci_cqe_enable' mangled-name='sdhci_cqe_enable' filepath='drivers/mmc/host/sdhci.c' line='3548' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_cqe_enable'>
+        <parameter type-id='dd575c43' name='mmc' filepath='drivers/mmc/host/sdhci.c' line='3548' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_cqe_disable' mangled-name='sdhci_cqe_disable' filepath='drivers/mmc/host/sdhci.c' line='3592' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_cqe_disable'>
+        <parameter type-id='dd575c43' name='mmc' filepath='drivers/mmc/host/sdhci.c' line='3592' column='1'/>
+        <parameter type-id='b50a4934' name='recovery' filepath='drivers/mmc/host/sdhci.c' line='3592' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_cqe_irq' mangled-name='sdhci_cqe_irq' filepath='drivers/mmc/host/sdhci.c' line='3616' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_cqe_irq'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='3616' column='1'/>
+        <parameter type-id='19c2251e' name='intmask' filepath='drivers/mmc/host/sdhci.c' line='3616' column='1'/>
+        <parameter type-id='7292109c' name='cmd_error' filepath='drivers/mmc/host/sdhci.c' line='3616' column='1'/>
+        <parameter type-id='7292109c' name='data_error' filepath='drivers/mmc/host/sdhci.c' line='3617' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='sdhci_setup_host' mangled-name='sdhci_setup_host' filepath='drivers/mmc/host/sdhci.c' line='3863' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_setup_host'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='3863' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdhci_cleanup_host' mangled-name='sdhci_cleanup_host' filepath='drivers/mmc/host/sdhci.c' line='4399' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_cleanup_host'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='4399' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_add_host' mangled-name='sdhci_add_host' filepath='drivers/mmc/host/sdhci.c' line='4483' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_add_host'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='4483' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdhci_remove_host' mangled-name='sdhci_remove_host' filepath='drivers/mmc/host/sdhci.c' line='4504' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_remove_host'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='4504' column='1'/>
+        <parameter type-id='95e97e5e' name='dead' filepath='drivers/mmc/host/sdhci.c' line='4504' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='d3baf253'>
+        <parameter type-id='2661e0d9' name='host'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='17a0b6f4'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a7132e26'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='1dc6a898'/>
+      </function-type>
+      <function-type size-in-bits='64' id='256a6e6c'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9bbd94a4'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='182265d5'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='f9b06939'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aac6e642'>
+        <parameter type-id='2661e0d9'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='846120de'>
+        <parameter type-id='2661e0d9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='859caa73'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='380397d5'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='6df3750c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b3f5a3c1'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='47f117d4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='21f3c22e'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='afcc3ab3'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6b401e7c'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='173ca462'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7fdfc457'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='17d4a823'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='8efea9e5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='05cc5338'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4d5c3e51'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='63e171df'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/net/dummy.c' language='LANG_C89'>
+      <class-decl name='rtnl_link_ops' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/net/rtnetlink.h' line='59' column='1' id='6696ef7a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/rtnetlink.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kind' type-id='80f4b756' visibility='default' filepath='include/net/rtnetlink.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='priv_size' type-id='b59d7dce' visibility='default' filepath='include/net/rtnetlink.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='setup' type-id='548eee3a' visibility='default' filepath='include/net/rtnetlink.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='maxtype' type-id='f0981eeb' visibility='default' filepath='include/net/rtnetlink.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='policy' type-id='109cdb66' visibility='default' filepath='include/net/rtnetlink.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='validate' type-id='69d3de54' visibility='default' filepath='include/net/rtnetlink.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='newlink' type-id='234d802d' visibility='default' filepath='include/net/rtnetlink.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='changelink' type-id='66b76584' visibility='default' filepath='include/net/rtnetlink.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dellink' type-id='3778bdcd' visibility='default' filepath='include/net/rtnetlink.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_size' type-id='c65c1382' visibility='default' filepath='include/net/rtnetlink.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fill_info' type-id='922133c6' visibility='default' filepath='include/net/rtnetlink.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='get_xstats_size' type-id='c65c1382' visibility='default' filepath='include/net/rtnetlink.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fill_xstats' type-id='922133c6' visibility='default' filepath='include/net/rtnetlink.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='get_num_tx_queues' type-id='0838a534' visibility='default' filepath='include/net/rtnetlink.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_num_rx_queues' type-id='0838a534' visibility='default' filepath='include/net/rtnetlink.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='slave_maxtype' type-id='f0981eeb' visibility='default' filepath='include/net/rtnetlink.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='slave_policy' type-id='109cdb66' visibility='default' filepath='include/net/rtnetlink.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='slave_changelink' type-id='a6c912f4' visibility='default' filepath='include/net/rtnetlink.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='get_slave_size' type-id='c297924f' visibility='default' filepath='include/net/rtnetlink.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fill_slave_info' type-id='f3e878cb' visibility='default' filepath='include/net/rtnetlink.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='get_link_net' type-id='13b49faa' visibility='default' filepath='include/net/rtnetlink.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='get_linkxstats_size' type-id='d3210449' visibility='default' filepath='include/net/rtnetlink.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='fill_linkxstats' type-id='c11c2e76' visibility='default' filepath='include/net/rtnetlink.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nla_policy' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/netlink.h' line='291' column='1' id='ca7a1741'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f9b06939' visibility='default' filepath='include/net/netlink.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='validation_type' type-id='f9b06939' visibility='default' filepath='include/net/netlink.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='len' type-id='1dc6a898' visibility='default' filepath='include/net/netlink.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='4a3999ba' visibility='default' filepath='include/net/netlink.h' line='295' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/netlink.h' line='295' column='1' id='4a3999ba'>
+        <data-member access='private'>
+          <var-decl name='validation_data' type-id='eaa32e2f' visibility='default' filepath='include/net/netlink.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='46901745' visibility='default' filepath='include/net/netlink.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='validate' type-id='9c9480f6' visibility='default' filepath='include/net/netlink.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='strict_start_type' type-id='1dc6a898' visibility='default' filepath='include/net/netlink.h' line='319' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netlink.h' line='297' column='1' id='46901745'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min' type-id='9b7e9486' visibility='default' filepath='include/net/netlink.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='max' type-id='9b7e9486' visibility='default' filepath='include/net/netlink.h' line='298' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='skb_shared_hwtstamps' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/skbuff.h' line='417' column='1' id='c148e595'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hwtstamp' type-id='fbc017ef' visibility='default' filepath='include/linux/skbuff.h' line='418' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='ca7a1741' const='yes' id='8967eee8'/>
+      <pointer-type-def type-id='8967eee8' size-in-bits='64' id='109cdb66'/>
+      <qualified-type-def type-id='6696ef7a' const='yes' id='ab23f61b'/>
+      <pointer-type-def type-id='ab23f61b' size-in-bits='64' id='999c8d91'/>
+      <pointer-type-def type-id='627c50fc' size-in-bits='64' id='9c9480f6'/>
+      <pointer-type-def type-id='4ea599f1' size-in-bits='64' id='234d802d'/>
+      <pointer-type-def type-id='0ff60dc2' size-in-bits='64' id='a6c912f4'/>
+      <pointer-type-def type-id='86c85b12' size-in-bits='64' id='66b76584'/>
+      <pointer-type-def type-id='898c19a2' size-in-bits='64' id='69d3de54'/>
+      <pointer-type-def type-id='ca6c3304' size-in-bits='64' id='922133c6'/>
+      <pointer-type-def type-id='f962dd87' size-in-bits='64' id='f3e878cb'/>
+      <pointer-type-def type-id='729b729c' size-in-bits='64' id='c11c2e76'/>
+      <pointer-type-def type-id='75a3ad48' size-in-bits='64' id='13b49faa'/>
+      <pointer-type-def type-id='6696ef7a' size-in-bits='64' id='959ab461'/>
+      <pointer-type-def type-id='c148e595' size-in-bits='64' id='68197365'/>
+      <pointer-type-def type-id='fa5149d8' size-in-bits='64' id='c65c1382'/>
+      <pointer-type-def type-id='dd9a5153' size-in-bits='64' id='c297924f'/>
+      <pointer-type-def type-id='80310425' size-in-bits='64' id='d3210449'/>
+      <pointer-type-def type-id='ae2eaa42' size-in-bits='64' id='0838a534'/>
+      <pointer-type-def type-id='d31161f1' size-in-bits='64' id='3778bdcd'/>
+      <function-decl name='rtnl_link_unregister' mangled-name='rtnl_link_unregister' filepath='include/net/rtnetlink.h' line='119' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_link_unregister'>
+        <parameter type-id='959ab461'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ether_setup' mangled-name='ether_setup' filepath='include/linux/netdevice.h' line='4138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ether_setup'>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_tstamp_tx' mangled-name='skb_tstamp_tx' filepath='include/linux/skbuff.h' line='3838' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_tstamp_tx'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='68197365'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='consume_skb' mangled-name='consume_skb' filepath='include/linux/skbuff.h' line='1031' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='consume_skb'>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netif_carrier_on' mangled-name='netif_carrier_on' filepath='include/linux/netdevice.h' line='3832' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_carrier_on'>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netif_carrier_off' mangled-name='netif_carrier_off' filepath='include/linux/netdevice.h' line='3834' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_carrier_off'>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rtnl_lock' mangled-name='rtnl_lock' filepath='include/linux/rtnetlink.h' line='33' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_lock'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rtnl_unlock' mangled-name='rtnl_unlock' filepath='include/linux/rtnetlink.h' line='34' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_unlock'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='alloc_netdev_mqs' mangled-name='alloc_netdev_mqs' filepath='include/linux/netdevice.h' line='4141' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_netdev_mqs'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='548eee3a'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='68a2d05c'/>
+      </function-decl>
+      <function-decl name='register_netdevice' mangled-name='register_netdevice' filepath='include/linux/netdevice.h' line='2688' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_netdevice'>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='free_netdev' mangled-name='free_netdev' filepath='include/linux/netdevice.h' line='2697' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_netdev'>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='627c50fc'>
+        <parameter type-id='0f2a7ce5'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4ea599f1'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ff60dc2'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='86c85b12'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='898c19a2'>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ca6c3304'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='2ce52478'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f962dd87'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='2ce52478'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='729b729c'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='75a3ad48'>
+        <parameter type-id='2ce52478'/>
+        <return type-id='a2bff677'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fa5149d8'>
+        <parameter type-id='2ce52478'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dd9a5153'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='2ce52478'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='80310425'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ae2eaa42'>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d31161f1'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='e84b031a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/net/mii.c' language='LANG_C89'>
+      <class-decl name='ethtool_cmd' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='96' column='1' id='4e13c9d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='supported' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='advertising' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='speed' type-id='d315442e' visibility='default' filepath='include/uapi/linux/ethtool.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='duplex' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='port' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='phy_address' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='transceiver' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='autoneg' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='mdio_support' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='maxtxpkt' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='maxrxpkt' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='speed_hi' type-id='d315442e' visibility='default' filepath='include/uapi/linux/ethtool.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='eth_tp_mdix' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='248'>
+          <var-decl name='eth_tp_mdix_ctrl' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lp_advertising' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/ethtool.h' line='113' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mii_ioctl_data' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/mii.h' line='159' column='1' id='535834b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='phy_id' type-id='d315442e' visibility='default' filepath='include/uapi/linux/mii.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='reg_num' type-id='d315442e' visibility='default' filepath='include/uapi/linux/mii.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='val_in' type-id='d315442e' visibility='default' filepath='include/uapi/linux/mii.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='val_out' type-id='d315442e' visibility='default' filepath='include/uapi/linux/mii.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4e13c9d9' size-in-bits='64' id='d064f511'/>
+      <pointer-type-def type-id='535834b5' size-in-bits='64' id='eb5662e5'/>
+      <function-decl name='mii_ethtool_gset' mangled-name='mii_ethtool_gset' filepath='drivers/net/mii.c' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mii_ethtool_gset'>
+        <parameter type-id='f0150b1d' name='mii' filepath='drivers/net/mii.c' line='55' column='1'/>
+        <parameter type-id='d064f511' name='ecmd' filepath='drivers/net/mii.c' line='55' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mii_ethtool_set_link_ksettings' mangled-name='mii_ethtool_set_link_ksettings' filepath='drivers/net/mii.c' line='329' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mii_ethtool_set_link_ksettings'>
+        <parameter type-id='f0150b1d' name='mii' filepath='drivers/net/mii.c' line='329' column='1'/>
+        <parameter type-id='b2c34f11' name='cmd' filepath='drivers/net/mii.c' line='330' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mii_link_ok' mangled-name='mii_link_ok' filepath='drivers/net/mii.c' line='444' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mii_link_ok'>
+        <parameter type-id='f0150b1d' name='mii' filepath='drivers/net/mii.c' line='444' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mii_check_media' mangled-name='mii_check_media' filepath='drivers/net/mii.c' line='504' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mii_check_media'>
+        <parameter type-id='f0150b1d' name='mii' filepath='drivers/net/mii.c' line='504' column='1'/>
+        <parameter type-id='f0981eeb' name='ok_to_print' filepath='drivers/net/mii.c' line='505' column='1'/>
+        <parameter type-id='f0981eeb' name='init_media' filepath='drivers/net/mii.c' line='506' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='generic_mii_ioctl' mangled-name='generic_mii_ioctl' filepath='drivers/net/mii.c' line='584' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_mii_ioctl'>
+        <parameter type-id='f0150b1d' name='mii_if' filepath='drivers/net/mii.c' line='584' column='1'/>
+        <parameter type-id='eb5662e5' name='mii_data' filepath='drivers/net/mii.c' line='585' column='1'/>
+        <parameter type-id='95e97e5e' name='cmd' filepath='drivers/net/mii.c' line='585' column='1'/>
+        <parameter type-id='807869d3' name='duplex_chg_out' filepath='drivers/net/mii.c' line='586' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='a9918a4d' size-in-bits='64' id='f0150b1d'/>
+      <class-decl name='mii_if_info' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/mii.h' line='18' column='1' id='a9918a4d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='phy_id' type-id='95e97e5e' visibility='default' filepath='include/linux/mii.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='advertising' type-id='95e97e5e' visibility='default' filepath='include/linux/mii.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phy_id_mask' type-id='95e97e5e' visibility='default' filepath='include/linux/mii.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reg_num_mask' type-id='95e97e5e' visibility='default' filepath='include/linux/mii.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='full_duplex' type-id='f0981eeb' visibility='default' filepath='include/linux/mii.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='force_media' type-id='f0981eeb' visibility='default' filepath='include/linux/mii.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='supports_gmii' type-id='f0981eeb' visibility='default' filepath='include/linux/mii.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/linux/mii.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mdio_read' type-id='b54cfa0f' visibility='default' filepath='include/linux/mii.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mdio_write' type-id='af22e097' visibility='default' filepath='include/linux/mii.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='58725ef3' size-in-bits='64' id='af22e097'/>
+      <function-type size-in-bits='64' id='58725ef3'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/net/phy/mdio_bus.c' language='LANG_C89'>
+      <function-decl name='__mdiobus_register' mangled-name='__mdiobus_register' filepath='drivers/net/phy/mdio_bus.c' line='369' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__mdiobus_register'>
+        <parameter type-id='ff47b24b' name='bus' filepath='drivers/net/phy/mdio_bus.c' line='369' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/net/phy/mdio_bus.c' line='369' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mdiobus_alloc_size' mangled-name='mdiobus_alloc_size' filepath='drivers/net/phy/mdio_bus.c' line='146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mdiobus_alloc_size'>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/net/phy/mdio_bus.c' line='146' column='1'/>
+        <return type-id='ff47b24b'/>
+      </function-decl>
+      <function-decl name='mdiobus_unregister' mangled-name='mdiobus_unregister' filepath='drivers/net/phy/mdio_bus.c' line='451' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mdiobus_unregister'>
+        <parameter type-id='ff47b24b' name='bus' filepath='drivers/net/phy/mdio_bus.c' line='451' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mdiobus_free' mangled-name='mdiobus_free' filepath='drivers/net/phy/mdio_bus.c' line='487' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mdiobus_free'>
+        <parameter type-id='ff47b24b' name='bus' filepath='drivers/net/phy/mdio_bus.c' line='487' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='ed5381db' size-in-bits='64' id='ff47b24b'/>
+      <class-decl name='mii_bus' size-in-bits='11904' is-struct='yes' visibility='default' filepath='include/linux/phy.h' line='213' column='1' id='ed5381db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/phy.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/phy.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='1de7616e' visibility='default' filepath='include/linux/phy.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/phy.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='read' type-id='22ad5849' visibility='default' filepath='include/linux/phy.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='write' type-id='e10d6bae' visibility='default' filepath='include/linux/phy.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reset' type-id='6edade7b' visibility='default' filepath='include/linux/phy.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='mdio_lock' type-id='925167dc' visibility='default' filepath='include/linux/phy.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/phy.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='state' type-id='08f5ca1b' visibility='default' filepath='include/linux/phy.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/phy.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='mdio_map' type-id='70a48c94' visibility='default' filepath='include/linux/phy.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='phy_mask' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10720'>
+          <var-decl name='phy_ignore_ta_mask' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='irq' type-id='9e942f0d' visibility='default' filepath='include/linux/phy.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='reset_delay_us' type-id='95e97e5e' visibility='default' filepath='include/linux/phy.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='reset_gpiod' type-id='26760480' visibility='default' filepath='include/linux/phy.h' line='255' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='488' id='1de7616e'>
+        <subrange length='61' type-id='7ff19f0f' id='b51728a6'/>
+      </array-type-def>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/linux/phy.h' line='229' column='1' id='08f5ca1b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MDIOBUS_ALLOCATED' value='1'/>
+        <enumerator name='MDIOBUS_REGISTERED' value='2'/>
+        <enumerator name='MDIOBUS_UNREGISTERED' value='3'/>
+        <enumerator name='MDIOBUS_RELEASED' value='4'/>
+      </enum-decl>
+      <pointer-type-def type-id='07b37f3f' size-in-bits='64' id='6edade7b'/>
+      <pointer-type-def type-id='07dc6635' size-in-bits='64' id='22ad5849'/>
+      <pointer-type-def type-id='c85b8434' size-in-bits='64' id='e10d6bae'/>
+      <array-type-def dimensions='1' type-id='efa21d3b' size-in-bits='2048' id='70a48c94'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <pointer-type-def type-id='f3a32dbb' size-in-bits='64' id='efa21d3b'/>
+      <class-decl name='mdio_device' size-in-bits='8128' is-struct='yes' visibility='default' filepath='include/linux/mdio.h' line='26' column='1' id='f3a32dbb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/mdio.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='bus' type-id='ff47b24b' visibility='default' filepath='include/linux/mdio.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='modalias' type-id='16dc656a' visibility='default' filepath='include/linux/mdio.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='bus_match' type-id='2f28f04c' visibility='default' filepath='include/linux/mdio.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='device_free' type-id='a5490056' visibility='default' filepath='include/linux/mdio.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='device_remove' type-id='a5490056' visibility='default' filepath='include/linux/mdio.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='addr' type-id='95e97e5e' visibility='default' filepath='include/linux/mdio.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7904'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/mdio.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='reset_gpio' type-id='26760480' visibility='default' filepath='include/linux/mdio.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='reset_ctrl' type-id='9f9b8114' visibility='default' filepath='include/linux/mdio.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='reset_assert_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/mdio.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8096'>
+          <var-decl name='reset_deassert_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/mdio.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='cdc9541e' size-in-bits='64' id='9f9b8114'/>
+      <pointer-type-def type-id='a733634c' size-in-bits='64' id='a5490056'/>
+      <class-decl name='reset_control' size-in-bits='384' is-struct='yes' visibility='default' filepath='drivers/reset/core.c' line='40' column='1' id='cdc9541e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcdev' type-id='775147d9' visibility='default' filepath='drivers/reset/core.c' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/reset/core.c' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='drivers/reset/core.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='refcnt' type-id='400fb07b' visibility='default' filepath='drivers/reset/core.c' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='acquired' type-id='b50a4934' visibility='default' filepath='drivers/reset/core.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='shared' type-id='b50a4934' visibility='default' filepath='drivers/reset/core.c' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='array' type-id='b50a4934' visibility='default' filepath='drivers/reset/core.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='deassert_count' type-id='49178f86' visibility='default' filepath='drivers/reset/core.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='triggered_count' type-id='49178f86' visibility='default' filepath='drivers/reset/core.c' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a5e8d9a1' size-in-bits='64' id='775147d9'/>
+      <class-decl name='reset_controller_dev' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/reset-controller.h' line='68' column='1' id='a5e8d9a1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='cfc6a130' visibility='default' filepath='include/linux/reset-controller.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/reset-controller.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/reset-controller.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reset_control_head' type-id='72f469ec' visibility='default' filepath='include/linux/reset-controller.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/reset-controller.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/reset-controller.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='of_reset_n_cells' type-id='95e97e5e' visibility='default' filepath='include/linux/reset-controller.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='of_xlate' type-id='81145c38' visibility='default' filepath='include/linux/reset-controller.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='nr_resets' type-id='f0981eeb' visibility='default' filepath='include/linux/reset-controller.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b954583a' size-in-bits='64' id='cfc6a130'/>
+      <pointer-type-def type-id='137e352e' size-in-bits='64' id='81145c38'/>
+      <qualified-type-def type-id='ac76d92d' const='yes' id='b954583a'/>
+      <class-decl name='reset_control_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/reset-controller.h' line='18' column='1' id='ac76d92d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reset' type-id='c637b701' visibility='default' filepath='include/linux/reset-controller.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='assert' type-id='c637b701' visibility='default' filepath='include/linux/reset-controller.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='deassert' type-id='c637b701' visibility='default' filepath='include/linux/reset-controller.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='status' type-id='c637b701' visibility='default' filepath='include/linux/reset-controller.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d0d01815' size-in-bits='64' id='c637b701'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/net/phy/phy.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='488' id='1de7616e'>
+        <subrange length='61' type-id='7ff19f0f' id='b51728a6'/>
+      </array-type-def>
+      <class-decl name='phylink' is-struct='yes' visibility='default' is-declaration-only='yes' id='7d5dfb1c'/>
+      <array-type-def dimensions='1' type-id='efa21d3b' size-in-bits='2048' id='70a48c94'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <class-decl name='phy_device' size-in-bits='11328' is-struct='yes' visibility='default' filepath='include/linux/phy.h' line='361' column='1' id='7c1f8188'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mdio' type-id='f3a32dbb' visibility='default' filepath='include/linux/phy.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='drv' type-id='e812884b' visibility='default' filepath='include/linux/phy.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='phy_id' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8224'>
+          <var-decl name='c45_ids' type-id='0463cbfd' visibility='default' filepath='include/linux/phy.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='is_c45' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='is_internal' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='is_pseudo_fixed_link' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='is_gigabit_capable' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='has_fixups' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='suspended' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='suspended_by_mdio_bus' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='sysfs_links' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='loopback_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='autoneg' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='link' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='autoneg_complete' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='interrupts' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8544'>
+          <var-decl name='state' type-id='d29ba889' visibility='default' filepath='include/linux/phy.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='dev_flags' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8608'>
+          <var-decl name='interface' type-id='d61bf978' visibility='default' filepath='include/linux/phy.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='speed' type-id='95e97e5e' visibility='default' filepath='include/linux/phy.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8672'>
+          <var-decl name='duplex' type-id='95e97e5e' visibility='default' filepath='include/linux/phy.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='pause' type-id='95e97e5e' visibility='default' filepath='include/linux/phy.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8736'>
+          <var-decl name='asym_pause' type-id='95e97e5e' visibility='default' filepath='include/linux/phy.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='supported' type-id='f05e8e77' visibility='default' filepath='include/linux/phy.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='advertising' type-id='f05e8e77' visibility='default' filepath='include/linux/phy.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='lp_advertising' type-id='f05e8e77' visibility='default' filepath='include/linux/phy.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='adv_old' type-id='f05e8e77' visibility='default' filepath='include/linux/phy.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='eee_broken_modes' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9312'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/phy.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/phy.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='state_queue' type-id='5ad6e0ef' visibility='default' filepath='include/linux/phy.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/phy.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='phylink' type-id='56f3c6ca' visibility='default' filepath='include/linux/phy.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='attached_dev' type-id='68a2d05c' visibility='default' filepath='include/linux/phy.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='mdix' type-id='f9b06939' visibility='default' filepath='include/linux/phy.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10888'>
+          <var-decl name='mdix_ctrl' type-id='f9b06939' visibility='default' filepath='include/linux/phy.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='phy_link_change' type-id='8a09feb6' visibility='default' filepath='include/linux/phy.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='adjust_link' type-id='548eee3a' visibility='default' filepath='include/linux/phy.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/phy.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/phy.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/phy.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/phy.h' line='450' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mdio_device' size-in-bits='8128' is-struct='yes' visibility='default' filepath='include/linux/mdio.h' line='26' column='1' id='f3a32dbb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/mdio.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='bus' type-id='ff47b24b' visibility='default' filepath='include/linux/mdio.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='modalias' type-id='16dc656a' visibility='default' filepath='include/linux/mdio.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='bus_match' type-id='2f28f04c' visibility='default' filepath='include/linux/mdio.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='device_free' type-id='a5490056' visibility='default' filepath='include/linux/mdio.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='device_remove' type-id='a5490056' visibility='default' filepath='include/linux/mdio.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='addr' type-id='95e97e5e' visibility='default' filepath='include/linux/mdio.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7904'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/mdio.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='reset_gpio' type-id='26760480' visibility='default' filepath='include/linux/mdio.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='reset_ctrl' type-id='9f9b8114' visibility='default' filepath='include/linux/mdio.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='reset_assert_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/mdio.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8096'>
+          <var-decl name='reset_deassert_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/mdio.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mii_bus' size-in-bits='11904' is-struct='yes' visibility='default' filepath='include/linux/phy.h' line='213' column='1' id='ed5381db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/phy.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/phy.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='1de7616e' visibility='default' filepath='include/linux/phy.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/phy.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='read' type-id='22ad5849' visibility='default' filepath='include/linux/phy.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='write' type-id='e10d6bae' visibility='default' filepath='include/linux/phy.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reset' type-id='6edade7b' visibility='default' filepath='include/linux/phy.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='mdio_lock' type-id='925167dc' visibility='default' filepath='include/linux/phy.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/phy.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='state' type-id='08f5ca1b' visibility='default' filepath='include/linux/phy.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/phy.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='mdio_map' type-id='70a48c94' visibility='default' filepath='include/linux/phy.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='phy_mask' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10720'>
+          <var-decl name='phy_ignore_ta_mask' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='irq' type-id='9e942f0d' visibility='default' filepath='include/linux/phy.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='reset_delay_us' type-id='95e97e5e' visibility='default' filepath='include/linux/phy.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='reset_gpiod' type-id='26760480' visibility='default' filepath='include/linux/phy.h' line='255' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/linux/phy.h' line='229' column='1' id='08f5ca1b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MDIOBUS_ALLOCATED' value='1'/>
+        <enumerator name='MDIOBUS_REGISTERED' value='2'/>
+        <enumerator name='MDIOBUS_UNREGISTERED' value='3'/>
+        <enumerator name='MDIOBUS_RELEASED' value='4'/>
+      </enum-decl>
+      <class-decl name='phy_driver' size-in-bits='4160' is-struct='yes' visibility='default' filepath='include/linux/phy.h' line='476' column='1' id='84a0e7ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mdiodrv' type-id='7eda6831' visibility='default' filepath='include/linux/phy.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='phy_id' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/phy.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='phy_id_mask' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='features' type-id='3635993f' visibility='default' filepath='include/linux/phy.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/phy.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='soft_reset' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='config_init' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='probe' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='get_features' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='suspend' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='resume' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='config_aneg' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='aneg_done' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='read_status' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='ack_interrupt' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='config_intr' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='did_interrupt' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='handle_interrupt' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='remove' type-id='0634414a' visibility='default' filepath='include/linux/phy.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='match_phy_device' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='ts_info' type-id='21cdc373' visibility='default' filepath='include/linux/phy.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='hwtstamp' type-id='f2c45924' visibility='default' filepath='include/linux/phy.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='rxtstamp' type-id='bce7b4e2' visibility='default' filepath='include/linux/phy.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='txtstamp' type-id='b8bd68c5' visibility='default' filepath='include/linux/phy.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='set_wol' type-id='47f66a6b' visibility='default' filepath='include/linux/phy.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='get_wol' type-id='887cf9b8' visibility='default' filepath='include/linux/phy.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='link_change_notify' type-id='0634414a' visibility='default' filepath='include/linux/phy.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='read_mmd' type-id='3eb4a20d' visibility='default' filepath='include/linux/phy.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='write_mmd' type-id='4c9695fa' visibility='default' filepath='include/linux/phy.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='read_page' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='write_page' type-id='b1be7154' visibility='default' filepath='include/linux/phy.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='module_info' type-id='930fcda9' visibility='default' filepath='include/linux/phy.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='module_eeprom' type-id='51f1236c' visibility='default' filepath='include/linux/phy.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='get_sset_count' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='get_strings' type-id='0cce9961' visibility='default' filepath='include/linux/phy.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='get_stats' type-id='44fd4636' visibility='default' filepath='include/linux/phy.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='get_tunable' type-id='1cc860f2' visibility='default' filepath='include/linux/phy.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='set_tunable' type-id='1cc860f2' visibility='default' filepath='include/linux/phy.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='set_loopback' type-id='f727c4d8' visibility='default' filepath='include/linux/phy.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/phy.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/phy.h' line='642' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mdio_driver_common' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/mdio.h' line='47' column='1' id='7eda6831'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/mdio.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/mdio.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='phy_c45_device_ids' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/linux/phy.h' line='324' column='1' id='0463cbfd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='devices_in_package' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='device_ids' type-id='1c6311dd' visibility='default' filepath='include/linux/phy.h' line='326' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='phy_state' filepath='include/linux/phy.h' line='310' column='1' id='d29ba889'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PHY_DOWN' value='0'/>
+        <enumerator name='PHY_READY' value='1'/>
+        <enumerator name='PHY_HALTED' value='2'/>
+        <enumerator name='PHY_UP' value='3'/>
+        <enumerator name='PHY_RUNNING' value='4'/>
+        <enumerator name='PHY_NOLINK' value='5'/>
+      </enum-decl>
+      <typedef-decl name='phy_interface_t' type-id='3eed36ac' filepath='include/linux/phy.h' line='107' column='1' id='d61bf978'/>
+      <enum-decl name='__anonymous_enum__3' is-anonymous='yes' filepath='include/linux/phy.h' line='80' column='1' id='3eed36ac'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PHY_INTERFACE_MODE_NA' value='0'/>
+        <enumerator name='PHY_INTERFACE_MODE_INTERNAL' value='1'/>
+        <enumerator name='PHY_INTERFACE_MODE_MII' value='2'/>
+        <enumerator name='PHY_INTERFACE_MODE_GMII' value='3'/>
+        <enumerator name='PHY_INTERFACE_MODE_SGMII' value='4'/>
+        <enumerator name='PHY_INTERFACE_MODE_TBI' value='5'/>
+        <enumerator name='PHY_INTERFACE_MODE_REVMII' value='6'/>
+        <enumerator name='PHY_INTERFACE_MODE_RMII' value='7'/>
+        <enumerator name='PHY_INTERFACE_MODE_RGMII' value='8'/>
+        <enumerator name='PHY_INTERFACE_MODE_RGMII_ID' value='9'/>
+        <enumerator name='PHY_INTERFACE_MODE_RGMII_RXID' value='10'/>
+        <enumerator name='PHY_INTERFACE_MODE_RGMII_TXID' value='11'/>
+        <enumerator name='PHY_INTERFACE_MODE_RTBI' value='12'/>
+        <enumerator name='PHY_INTERFACE_MODE_SMII' value='13'/>
+        <enumerator name='PHY_INTERFACE_MODE_XGMII' value='14'/>
+        <enumerator name='PHY_INTERFACE_MODE_MOCA' value='15'/>
+        <enumerator name='PHY_INTERFACE_MODE_QSGMII' value='16'/>
+        <enumerator name='PHY_INTERFACE_MODE_TRGMII' value='17'/>
+        <enumerator name='PHY_INTERFACE_MODE_1000BASEX' value='18'/>
+        <enumerator name='PHY_INTERFACE_MODE_2500BASEX' value='19'/>
+        <enumerator name='PHY_INTERFACE_MODE_RXAUI' value='20'/>
+        <enumerator name='PHY_INTERFACE_MODE_XAUI' value='21'/>
+        <enumerator name='PHY_INTERFACE_MODE_10GKR' value='22'/>
+        <enumerator name='PHY_INTERFACE_MODE_USXGMII' value='23'/>
+        <enumerator name='PHY_INTERFACE_MODE_MAX' value='24'/>
+      </enum-decl>
+      <qualified-type-def type-id='f9b37274' const='yes' id='3635993f'/>
+      <pointer-type-def type-id='89f717fe' size-in-bits='64' id='40c31434'/>
+      <pointer-type-def type-id='07b37f3f' size-in-bits='64' id='6edade7b'/>
+      <pointer-type-def type-id='07dc6635' size-in-bits='64' id='22ad5849'/>
+      <pointer-type-def type-id='c85b8434' size-in-bits='64' id='e10d6bae'/>
+      <pointer-type-def type-id='c657e2b9' size-in-bits='64' id='aa2748ad'/>
+      <pointer-type-def type-id='918531c2' size-in-bits='64' id='51f1236c'/>
+      <pointer-type-def type-id='26a5fedd' size-in-bits='64' id='930fcda9'/>
+      <pointer-type-def type-id='4f200117' size-in-bits='64' id='21cdc373'/>
+      <pointer-type-def type-id='b69cad70' size-in-bits='64' id='1cc860f2'/>
+      <pointer-type-def type-id='43ffd497' size-in-bits='64' id='47f66a6b'/>
+      <pointer-type-def type-id='78ee2032' size-in-bits='64' id='f2c45924'/>
+      <pointer-type-def type-id='c76bfb3a' size-in-bits='64' id='b1be7154'/>
+      <pointer-type-def type-id='501579d1' size-in-bits='64' id='3eb4a20d'/>
+      <pointer-type-def type-id='a5dc8838' size-in-bits='64' id='4c9695fa'/>
+      <pointer-type-def type-id='05cd341e' size-in-bits='64' id='f727c4d8'/>
+      <pointer-type-def type-id='f3a32dbb' size-in-bits='64' id='efa21d3b'/>
+      <pointer-type-def type-id='ed5381db' size-in-bits='64' id='ff47b24b'/>
+      <pointer-type-def type-id='7c1f8188' size-in-bits='64' id='7efbcab0'/>
+      <pointer-type-def type-id='84a0e7ab' size-in-bits='64' id='e812884b'/>
+      <pointer-type-def type-id='7d5dfb1c' size-in-bits='64' id='56f3c6ca'/>
+      <pointer-type-def type-id='8abd4c90' size-in-bits='64' id='bce7b4e2'/>
+      <pointer-type-def type-id='a733634c' size-in-bits='64' id='a5490056'/>
+      <pointer-type-def type-id='6909d288' size-in-bits='64' id='0634414a'/>
+      <pointer-type-def type-id='2bb0168c' size-in-bits='64' id='44fd4636'/>
+      <pointer-type-def type-id='226cc4c6' size-in-bits='64' id='887cf9b8'/>
+      <pointer-type-def type-id='20948739' size-in-bits='64' id='b8bd68c5'/>
+      <pointer-type-def type-id='8999d61c' size-in-bits='64' id='8a09feb6'/>
+      <pointer-type-def type-id='31fdacad' size-in-bits='64' id='0cce9961'/>
+      <function-decl name='phy_print_status' mangled-name='phy_print_status' filepath='drivers/net/phy/phy.c' line='94' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_print_status'>
+        <parameter type-id='7efbcab0' name='phydev' filepath='drivers/net/phy/phy.c' line='94' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='phy_mii_ioctl' mangled-name='phy_mii_ioctl' filepath='drivers/net/phy/phy.c' line='398' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_mii_ioctl'>
+        <parameter type-id='7efbcab0' name='phydev' filepath='drivers/net/phy/phy.c' line='398' column='1'/>
+        <parameter type-id='d494b97c' name='ifr' filepath='drivers/net/phy/phy.c' line='398' column='1'/>
+        <parameter type-id='95e97e5e' name='cmd' filepath='drivers/net/phy/phy.c' line='398' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_stop' mangled-name='phy_stop' filepath='drivers/net/phy/phy.c' line='835' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_stop'>
+        <parameter type-id='7efbcab0' name='phydev' filepath='drivers/net/phy/phy.c' line='835' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='phy_start' mangled-name='phy_start' filepath='drivers/net/phy/phy.c' line='869' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_start'>
+        <parameter type-id='7efbcab0' name='phydev' filepath='drivers/net/phy/phy.c' line='869' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='phy_ethtool_get_link_ksettings' mangled-name='phy_ethtool_get_link_ksettings' filepath='drivers/net/phy/phy.c' line='1190' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_ethtool_get_link_ksettings'>
+        <parameter type-id='68a2d05c' name='ndev' filepath='drivers/net/phy/phy.c' line='1190' column='1'/>
+        <parameter type-id='70de91e2' name='cmd' filepath='drivers/net/phy/phy.c' line='1191' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_ethtool_set_link_ksettings' mangled-name='phy_ethtool_set_link_ksettings' filepath='drivers/net/phy/phy.c' line='1204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_ethtool_set_link_ksettings'>
+        <parameter type-id='68a2d05c' name='ndev' filepath='drivers/net/phy/phy.c' line='1204' column='1'/>
+        <parameter type-id='b2c34f11' name='cmd' filepath='drivers/net/phy/phy.c' line='1205' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_ethtool_nway_reset' mangled-name='phy_ethtool_nway_reset' filepath='drivers/net/phy/phy.c' line='1216' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_ethtool_nway_reset'>
+        <parameter type-id='68a2d05c' name='ndev' filepath='drivers/net/phy/phy.c' line='1216' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='07b37f3f'>
+        <parameter type-id='ff47b24b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='07dc6635'>
+        <parameter type-id='ff47b24b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c85b8434'>
+        <parameter type-id='ff47b24b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c657e2b9'>
+        <parameter type-id='7efbcab0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='918531c2'>
+        <parameter type-id='7efbcab0'/>
+        <parameter type-id='02557527'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='26a5fedd'>
+        <parameter type-id='7efbcab0'/>
+        <parameter type-id='b1e844c1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f200117'>
+        <parameter type-id='7efbcab0'/>
+        <parameter type-id='fa058983'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b69cad70'>
+        <parameter type-id='7efbcab0'/>
+        <parameter type-id='40c31434'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='43ffd497'>
+        <parameter type-id='7efbcab0'/>
+        <parameter type-id='fde1bbcb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78ee2032'>
+        <parameter type-id='7efbcab0'/>
+        <parameter type-id='d494b97c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c76bfb3a'>
+        <parameter type-id='7efbcab0'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='501579d1'>
+        <parameter type-id='7efbcab0'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a5dc8838'>
+        <parameter type-id='7efbcab0'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='05cd341e'>
+        <parameter type-id='7efbcab0'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8abd4c90'>
+        <parameter type-id='7efbcab0'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a733634c'>
+        <parameter type-id='efa21d3b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6909d288'>
+        <parameter type-id='7efbcab0' name='phydev'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2bb0168c'>
+        <parameter type-id='7efbcab0'/>
+        <parameter type-id='33e1dfe4'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='226cc4c6'>
+        <parameter type-id='7efbcab0'/>
+        <parameter type-id='fde1bbcb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='20948739'>
+        <parameter type-id='7efbcab0'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8999d61c'>
+        <parameter type-id='7efbcab0'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='31fdacad'>
+        <parameter type-id='7efbcab0'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='256' id='1c6311dd'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/net/phy/phy_device.c' language='LANG_C89'>
+      <function-decl name='phy_connect' mangled-name='phy_connect' filepath='drivers/net/phy/phy_device.c' line='991' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_connect'>
+        <parameter type-id='68a2d05c' name='dev' filepath='drivers/net/phy/phy_device.c' line='991' column='1'/>
+        <parameter type-id='80f4b756' name='bus_id' filepath='drivers/net/phy/phy_device.c' line='991' column='1'/>
+        <parameter type-id='548eee3a' name='handler' filepath='drivers/net/phy/phy_device.c' line='992' column='1'/>
+        <parameter type-id='d61bf978' name='interface' filepath='drivers/net/phy/phy_device.c' line='993' column='1'/>
+        <return type-id='7efbcab0'/>
+      </function-decl>
+      <function-decl name='phy_disconnect' mangled-name='phy_disconnect' filepath='drivers/net/phy/phy_device.c' line='1023' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_disconnect'>
+        <parameter type-id='7efbcab0' name='phydev' filepath='drivers/net/phy/phy_device.c' line='1023' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='genphy_resume' mangled-name='genphy_resume' filepath='drivers/net/phy/phy_device.c' line='2006' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='genphy_resume'>
+        <parameter type-id='7efbcab0' name='phydev' filepath='drivers/net/phy/phy_device.c' line='2006' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/net/ppp/bsd_comp.c' language='LANG_C89'>
+      <type-decl name='double' size-in-bits='64' id='a0eb0f08'/>
+      <class-decl name='compressor' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/ppp-comp.h' line='33' column='1' id='fd122cd4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='compress_proto' type-id='95e97e5e' visibility='default' filepath='include/linux/ppp-comp.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='comp_alloc' type-id='26560df0' visibility='default' filepath='include/linux/ppp-comp.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='comp_free' type-id='b7f9d8e6' visibility='default' filepath='include/linux/ppp-comp.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='comp_init' type-id='03237108' visibility='default' filepath='include/linux/ppp-comp.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='comp_reset' type-id='b7f9d8e6' visibility='default' filepath='include/linux/ppp-comp.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='compress' type-id='c35da6ff' visibility='default' filepath='include/linux/ppp-comp.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='comp_stat' type-id='20cd282d' visibility='default' filepath='include/linux/ppp-comp.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='decomp_alloc' type-id='26560df0' visibility='default' filepath='include/linux/ppp-comp.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='decomp_free' type-id='b7f9d8e6' visibility='default' filepath='include/linux/ppp-comp.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='decomp_init' type-id='eef261f7' visibility='default' filepath='include/linux/ppp-comp.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='decomp_reset' type-id='b7f9d8e6' visibility='default' filepath='include/linux/ppp-comp.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='decompress' type-id='836fd925' visibility='default' filepath='include/linux/ppp-comp.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='incomp' type-id='15f4611e' visibility='default' filepath='include/linux/ppp-comp.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='decomp_stat' type-id='20cd282d' visibility='default' filepath='include/linux/ppp-comp.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/ppp-comp.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='comp_extra' type-id='f0981eeb' visibility='default' filepath='include/linux/ppp-comp.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='compstat' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='117' column='1' id='3e92d9e8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='unc_bytes' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='unc_packets' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='comp_bytes' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='comp_packets' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='inc_bytes' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='inc_packets' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='in_count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='bytes_out' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ratio' type-id='a0eb0f08' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='129' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='fd122cd4' size-in-bits='64' id='a3e624c2'/>
+      <pointer-type-def type-id='3e92d9e8' size-in-bits='64' id='3fc786be'/>
+      <pointer-type-def type-id='e9a8dd3e' size-in-bits='64' id='03237108'/>
+      <pointer-type-def type-id='624c84d3' size-in-bits='64' id='eef261f7'/>
+      <pointer-type-def type-id='43e9dd11' size-in-bits='64' id='836fd925'/>
+      <pointer-type-def type-id='3d8098a3' size-in-bits='64' id='c35da6ff'/>
+      <pointer-type-def type-id='2c09b409' size-in-bits='64' id='20cd282d'/>
+      <pointer-type-def type-id='7591d8fc' size-in-bits='64' id='15f4611e'/>
+      <pointer-type-def type-id='ee9a0086' size-in-bits='64' id='26560df0'/>
+      <function-decl name='ppp_unregister_compressor' mangled-name='ppp_unregister_compressor' filepath='drivers/net/ppp/bsd_comp.c' line='193' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_unregister_compressor'>
+        <parameter type-id='a3e624c2'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ppp_register_compressor' mangled-name='ppp_register_compressor' filepath='drivers/net/ppp/bsd_comp.c' line='192' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_register_compressor'>
+        <parameter type-id='a3e624c2'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='e9a8dd3e'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='624c84d3'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='43e9dd11'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3d8098a3'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2c09b409'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='3fc786be'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7591d8fc'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ee9a0086'>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/net/ppp/ppp_generic.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='512' id='b1888bf8'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <class-decl name='slcompress' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/slhc_vj.h' line='143' column='1' id='5accd2c2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tstate' type-id='15436247' visibility='default' filepath='include/net/slhc_vj.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rstate' type-id='15436247' visibility='default' filepath='include/net/slhc_vj.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tslot_limit' type-id='b937765d' visibility='default' filepath='include/net/slhc_vj.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='rslot_limit' type-id='b937765d' visibility='default' filepath='include/net/slhc_vj.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='xmit_oldest' type-id='b937765d' visibility='default' filepath='include/net/slhc_vj.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='xmit_current' type-id='b937765d' visibility='default' filepath='include/net/slhc_vj.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='recv_current' type-id='b937765d' visibility='default' filepath='include/net/slhc_vj.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='flags' type-id='b937765d' visibility='default' filepath='include/net/slhc_vj.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sls_o_nontcp' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='sls_o_tcp' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sls_o_uncompressed' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='sls_o_compressed' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sls_o_searches' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='sls_o_misses' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sls_i_uncompressed' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sls_i_compressed' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sls_i_error' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='sls_i_tossed' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sls_i_runt' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='sls_i_badcheck' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cstate' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/net/slhc_vj.h' line='128' column='1' id='dd60e4df'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cs_this' type-id='b937765d' visibility='default' filepath='include/net/slhc_vj.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='initialized' type-id='b50a4934' visibility='default' filepath='include/net/slhc_vj.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='15436247' visibility='default' filepath='include/net/slhc_vj.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cs_ip' type-id='1edbefa6' visibility='default' filepath='include/net/slhc_vj.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='cs_tcp' type-id='7d506d7a' visibility='default' filepath='include/net/slhc_vj.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cs_ipopt' type-id='b1888bf8' visibility='default' filepath='include/net/slhc_vj.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='cs_tcpopt' type-id='b1888bf8' visibility='default' filepath='include/net/slhc_vj.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='cs_hsize' type-id='95e97e5e' visibility='default' filepath='include/net/slhc_vj.h' line='136' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='byte_t' type-id='8f048e17' filepath='include/net/slhc_vj.h' line='119' column='1' id='b937765d'/>
+      <class-decl name='tcphdr' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/tcp.h' line='25' column='1' id='7d506d7a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='source' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/tcp.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='dest' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/tcp.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='seq' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/tcp.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ack_seq' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/tcp.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='res1' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='doff' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='fin' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='syn' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='rst' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='psh' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='ack' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='urg' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='ece' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='cwr' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='window' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/tcp.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='check' type-id='7dac1e36' visibility='default' filepath='include/uapi/linux/tcp.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='urg_ptr' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/tcp.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='int32' type-id='3f1a6b60' filepath='include/net/slhc_vj.h' line='120' column='1' id='93e3c360'/>
+      <pointer-type-def type-id='dd60e4df' size-in-bits='64' id='15436247'/>
+      <pointer-type-def type-id='5accd2c2' size-in-bits='64' id='b87ee0a0'/>
+      <pointer-type-def type-id='cf536864' size-in-bits='64' id='ae4d32ca'/>
+      <function-decl name='slhc_toss' mangled-name='slhc_toss' filepath='include/net/slhc_vj.h' line='182' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='slhc_toss'>
+        <parameter type-id='b87ee0a0'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='slhc_remember' mangled-name='slhc_remember' filepath='include/net/slhc_vj.h' line='181' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='slhc_remember'>
+        <parameter type-id='b87ee0a0'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='slhc_uncompress' mangled-name='slhc_uncompress' filepath='include/net/slhc_vj.h' line='180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='slhc_uncompress'>
+        <parameter type-id='b87ee0a0'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_pull_rcsum' mangled-name='skb_pull_rcsum' filepath='include/linux/skbuff.h' line='3369' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_pull_rcsum'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='netdev_printk' mangled-name='netdev_printk' filepath='include/linux/netdevice.h' line='4764' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_printk'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ppp_input_error' mangled-name='ppp_input_error' filepath='drivers/net/ppp/ppp_generic.c' line='2044' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_input_error'>
+        <parameter type-id='b8e94b0b' name='chan' filepath='drivers/net/ppp/ppp_generic.c' line='2044' column='1'/>
+        <parameter type-id='95e97e5e' name='code' filepath='drivers/net/ppp/ppp_generic.c' line='2044' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ppp_channel_index' mangled-name='ppp_channel_index' filepath='drivers/net/ppp/ppp_generic.c' line='2636' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_channel_index'>
+        <parameter type-id='b8e94b0b' name='chan' filepath='drivers/net/ppp/ppp_generic.c' line='2636' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ppp_unit_number' mangled-name='ppp_unit_number' filepath='drivers/net/ppp/ppp_generic.c' line='2648' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_unit_number'>
+        <parameter type-id='b8e94b0b' name='chan' filepath='drivers/net/ppp/ppp_generic.c' line='2648' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ppp_unregister_channel' mangled-name='ppp_unregister_channel' filepath='drivers/net/ppp/ppp_generic.c' line='2685' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_unregister_channel'>
+        <parameter type-id='b8e94b0b' name='chan' filepath='drivers/net/ppp/ppp_generic.c' line='2685' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ppp_output_wakeup' mangled-name='ppp_output_wakeup' filepath='drivers/net/ppp/ppp_generic.c' line='2722' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_output_wakeup'>
+        <parameter type-id='b8e94b0b' name='chan' filepath='drivers/net/ppp/ppp_generic.c' line='2722' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='slhc_compress' mangled-name='slhc_compress' filepath='include/net/slhc_vj.h' line='178' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='slhc_compress'>
+        <parameter type-id='b87ee0a0'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='ae4d32ca'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='slhc_free' mangled-name='slhc_free' filepath='include/net/slhc_vj.h' line='176' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='slhc_free'>
+        <parameter type-id='b87ee0a0'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='slhc_init' mangled-name='slhc_init' filepath='include/net/slhc_vj.h' line='175' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='slhc_init'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='b87ee0a0'/>
+      </function-decl>
+      <pointer-type-def type-id='21893e8b' size-in-bits='64' id='b8e94b0b'/>
+      <class-decl name='iphdr' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/ip.h' line='86' column='1' id='1edbefa6'>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='ihl' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ip.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ip.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='tos' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ip.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='tot_len' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ip.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ip.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='frag_off' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ip.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ttl' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ip.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='protocol' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ip.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='check' type-id='7dac1e36' visibility='default' filepath='include/uapi/linux/ip.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='saddr' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ip.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='daddr' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ip.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__sum16' type-id='d315442e' filepath='include/uapi/linux/types.h' line='36' column='1' id='7dac1e36'/>
+      <class-decl name='ppp_channel' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/ppp_channel.h' line='33' column='1' id='21893e8b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/ppp_channel.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='d65a12b3' visibility='default' filepath='include/linux/ppp_channel.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mtu' type-id='95e97e5e' visibility='default' filepath='include/linux/ppp_channel.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='hdrlen' type-id='95e97e5e' visibility='default' filepath='include/linux/ppp_channel.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ppp' type-id='eaa32e2f' visibility='default' filepath='include/linux/ppp_channel.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='speed' type-id='95e97e5e' visibility='default' filepath='include/linux/ppp_channel.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='latency' type-id='95e97e5e' visibility='default' filepath='include/linux/ppp_channel.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2994de4b' size-in-bits='64' id='d65a12b3'/>
+      <qualified-type-def type-id='2134e0b8' const='yes' id='2994de4b'/>
+      <class-decl name='ppp_channel_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/ppp_channel.h' line='25' column='1' id='2134e0b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_xmit' type-id='7c56bbaf' visibility='default' filepath='include/linux/ppp_channel.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ioctl' type-id='a7844efb' visibility='default' filepath='include/linux/ppp_channel.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='fca2ff53' size-in-bits='64' id='7c56bbaf'/>
+      <pointer-type-def type-id='4f40b107' size-in-bits='64' id='a7844efb'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/net/ppp/ppp_mppe.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='8192' id='ee5ba316'>
+        <subrange length='256' type-id='7ff19f0f' id='36e5b9fa'/>
+      </array-type-def>
+      <class-decl name='arc4_ctx' size-in-bits='8256' is-struct='yes' visibility='default' filepath='include/crypto/arc4.h' line='15' column='1' id='f5dcfad3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='S' type-id='ee5ba316' visibility='default' filepath='include/crypto/arc4.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='x' type-id='19c2251e' visibility='default' filepath='include/crypto/arc4.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8224'>
+          <var-decl name='y' type-id='19c2251e' visibility='default' filepath='include/crypto/arc4.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f5dcfad3' size-in-bits='64' id='980c37b3'/>
+      <function-decl name='arc4_crypt' mangled-name='arc4_crypt' filepath='include/crypto/arc4.h' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='arc4_crypt'>
+        <parameter type-id='980c37b3'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='arc4_setkey' mangled-name='arc4_setkey' filepath='include/crypto/arc4.h' line='20' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='arc4_setkey'>
+        <parameter type-id='980c37b3'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_has_ahash' mangled-name='crypto_has_ahash' filepath='include/crypto/hash.h' line='279' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_has_ahash'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/net/ppp/pppox.c' language='LANG_C89'>
+      <function-decl name='pppox_ioctl' mangled-name='pppox_ioctl' filepath='drivers/net/ppp/pppox.c' line='67' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pppox_ioctl'>
+        <parameter type-id='13103032' name='sock' filepath='drivers/net/ppp/pppox.c' line='67' column='1'/>
+        <parameter type-id='f0981eeb' name='cmd' filepath='drivers/net/ppp/pppox.c' line='67' column='1'/>
+        <parameter type-id='7359adad' name='arg' filepath='drivers/net/ppp/pppox.c' line='67' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pppox_compat_ioctl' mangled-name='pppox_compat_ioctl' filepath='drivers/net/ppp/pppox.c' line='103' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pppox_compat_ioctl'>
+        <parameter type-id='13103032' name='sock' filepath='drivers/net/ppp/pppox.c' line='103' column='1'/>
+        <parameter type-id='f0981eeb' name='cmd' filepath='drivers/net/ppp/pppox.c' line='103' column='1'/>
+        <parameter type-id='7359adad' name='arg' filepath='drivers/net/ppp/pppox.c' line='103' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='ee14fd94' size-in-bits='64' id='13103032'/>
+      <class-decl name='socket' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='114' column='1' id='ee14fd94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='ee2ecafb' visibility='default' filepath='include/linux/net.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='a2185560' visibility='default' filepath='include/linux/net.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/net.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/net.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sk' type-id='f772df6e' visibility='default' filepath='include/linux/net.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ops' type-id='38a81521' visibility='default' filepath='include/linux/net.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wq' type-id='8bd06fd9' visibility='default' filepath='include/linux/net.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a87d8ed1' size-in-bits='64' id='38a81521'/>
+      <pointer-type-def type-id='a240f41e' size-in-bits='64' id='f772df6e'/>
+      <class-decl name='socket_wq' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='96' column='1' id='8bd06fd9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/net.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fasync_list' type-id='5bb9c75d' visibility='default' filepath='include/linux/net.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/net.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/net.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='socket_state' type-id='08f5ca1c' filepath='include/uapi/linux/net.h' line='54' column='1' id='ee2ecafb'/>
+      <qualified-type-def type-id='4e0399c2' const='yes' id='a87d8ed1'/>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/uapi/linux/net.h' line='48' column='1' id='08f5ca1c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SS_FREE' value='0'/>
+        <enumerator name='SS_UNCONNECTED' value='1'/>
+        <enumerator name='SS_CONNECTING' value='2'/>
+        <enumerator name='SS_CONNECTED' value='3'/>
+        <enumerator name='SS_DISCONNECTING' value='4'/>
+      </enum-decl>
+      <class-decl name='sock' size-in-bits='6656' is-struct='yes' visibility='default' filepath='include/net/sock.h' line='325' column='1' id='a240f41e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__sk_common' type-id='5999c5f7' visibility='default' filepath='include/net/sock.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sk_lock' type-id='40d8a3da' visibility='default' filepath='include/net/sock.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='sk_drops' type-id='49178f86' visibility='default' filepath='include/net/sock.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='sk_rcvlowat' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='sk_error_queue' type-id='e61c85d0' visibility='default' filepath='include/net/sock.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='sk_rx_skb_cache' type-id='0fbf3cfd' visibility='default' filepath='include/net/sock.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='sk_receive_queue' type-id='e61c85d0' visibility='default' filepath='include/net/sock.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='sk_backlog' type-id='6a96185e' visibility='default' filepath='include/net/sock.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sk_forward_alloc' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='sk_ll_usec' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sk_napi_id' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='sk_rcvbuf' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='sk_filter' type-id='90956edc' visibility='default' filepath='include/net/sock.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='' type-id='a29f8367' visibility='default' filepath='include/net/sock.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='sk_policy' type-id='eb61ae4b' visibility='default' filepath='include/net/sock.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='sk_rx_dst' type-id='141b6427' visibility='default' filepath='include/net/sock.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='sk_dst_cache' type-id='141b6427' visibility='default' filepath='include/net/sock.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='sk_omem_alloc' type-id='49178f86' visibility='default' filepath='include/net/sock.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='sk_sndbuf' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='sk_wmem_queued' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='sk_wmem_alloc' type-id='64615833' visibility='default' filepath='include/net/sock.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='sk_tsq_flags' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='' type-id='fc714247' visibility='default' filepath='include/net/sock.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='sk_tx_skb_cache' type-id='0fbf3cfd' visibility='default' filepath='include/net/sock.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='sk_write_queue' type-id='e61c85d0' visibility='default' filepath='include/net/sock.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='sk_peek_off' type-id='3158a266' visibility='default' filepath='include/net/sock.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='sk_write_pending' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='sk_dst_pending_confirm' type-id='3f1a6b60' visibility='default' filepath='include/net/sock.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3168'>
+          <var-decl name='sk_pacing_status' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='sk_sndtimeo' type-id='bd54fe1a' visibility='default' filepath='include/net/sock.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='sk_timer' type-id='abe41e67' visibility='default' filepath='include/net/sock.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='sk_priority' type-id='3f1a6b60' visibility='default' filepath='include/net/sock.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3744'>
+          <var-decl name='sk_mark' type-id='3f1a6b60' visibility='default' filepath='include/net/sock.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='sk_pacing_rate' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='sk_max_pacing_rate' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='sk_frag' type-id='06c0432f' visibility='default' filepath='include/net/sock.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='sk_route_caps' type-id='f9f4b16f' visibility='default' filepath='include/net/sock.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='sk_route_nocaps' type-id='f9f4b16f' visibility='default' filepath='include/net/sock.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='sk_route_forced_caps' type-id='f9f4b16f' visibility='default' filepath='include/net/sock.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='sk_gso_type' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4256'>
+          <var-decl name='sk_gso_max_size' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='sk_allocation' type-id='3eb7c31c' visibility='default' filepath='include/net/sock.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4320'>
+          <var-decl name='sk_txhash' type-id='3f1a6b60' visibility='default' filepath='include/net/sock.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='__sk_flags_offset' type-id='c764d637' visibility='default' filepath='include/net/sock.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='sk_padding' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='sk_kern_sock' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='sk_no_check_tx' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='sk_no_check_rx' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='sk_userlocks' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sk_protocol' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='sk_type' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4384'>
+          <var-decl name='sk_gso_max_segs' type-id='1dc6a898' visibility='default' filepath='include/net/sock.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4400'>
+          <var-decl name='sk_pacing_shift' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='sk_lingertime' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='sk_prot_creator' type-id='d2524501' visibility='default' filepath='include/net/sock.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='sk_callback_lock' type-id='ac16795b' visibility='default' filepath='include/net/sock.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='sk_err' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4640'>
+          <var-decl name='sk_err_soft' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='sk_ack_backlog' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4704'>
+          <var-decl name='sk_max_ack_backlog' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='sk_uid' type-id='d80b72e6' visibility='default' filepath='include/net/sock.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='sk_peer_pid' type-id='b94e5398' visibility='default' filepath='include/net/sock.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='sk_peer_cred' type-id='bc33861a' visibility='default' filepath='include/net/sock.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='sk_rcvtimeo' type-id='bd54fe1a' visibility='default' filepath='include/net/sock.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='sk_stamp' type-id='fbc017ef' visibility='default' filepath='include/net/sock.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='sk_tsflags' type-id='1dc6a898' visibility='default' filepath='include/net/sock.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5072'>
+          <var-decl name='sk_shutdown' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5088'>
+          <var-decl name='sk_tskey' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='sk_zckey' type-id='49178f86' visibility='default' filepath='include/net/sock.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5152'>
+          <var-decl name='sk_clockid' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='sk_txtime_deadline_mode' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='sk_txtime_report_errors' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5160'>
+          <var-decl name='sk_txtime_unused' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='sk_socket' type-id='13103032' visibility='default' filepath='include/net/sock.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='sk_user_data' type-id='eaa32e2f' visibility='default' filepath='include/net/sock.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='sk_security' type-id='eaa32e2f' visibility='default' filepath='include/net/sock.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='sk_cgrp_data' type-id='8544f103' visibility='default' filepath='include/net/sock.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='sk_memcg' type-id='223696fc' visibility='default' filepath='include/net/sock.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='sk_state_change' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='sk_data_ready' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='sk_write_space' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='sk_error_report' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='sk_backlog_rcv' type-id='a0f5247f' visibility='default' filepath='include/net/sock.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='sk_destruct' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='sk_reuseport_cb' type-id='1d22b7e5' visibility='default' filepath='include/net/sock.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='sk_bpf_storage' type-id='f3f553e2' visibility='default' filepath='include/net/sock.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='sk_rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sock.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='android_kabi_reserved5' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='android_kabi_reserved6' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='android_kabi_reserved7' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='android_kabi_reserved8' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='523' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='36313ee4' size-in-bits='64' id='f3f553e2'/>
+      <pointer-type-def type-id='772a4ddf' size-in-bits='64' id='141b6427'/>
+      <pointer-type-def type-id='0be333ab' size-in-bits='64' id='a0f5247f'/>
+      <pointer-type-def type-id='7203ee09' size-in-bits='64' id='d2524501'/>
+      <pointer-type-def type-id='dbc9a936' size-in-bits='64' id='90956edc'/>
+      <pointer-type-def type-id='ff751355' size-in-bits='64' id='1d22b7e5'/>
+      <class-decl name='proto_ops' size-in-bits='2112' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='137' column='1' id='4e0399c2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/linux/net.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/net.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='release' type-id='27936440' visibility='default' filepath='include/linux/net.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bind' type-id='c9664af8' visibility='default' filepath='include/linux/net.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connect' type-id='be6c7be7' visibility='default' filepath='include/linux/net.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='socketpair' type-id='be3a232b' visibility='default' filepath='include/linux/net.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='accept' type-id='2136470b' visibility='default' filepath='include/linux/net.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='getname' type-id='c9664af8' visibility='default' filepath='include/linux/net.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='poll' type-id='e93ad56e' visibility='default' filepath='include/linux/net.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ioctl' type-id='82a9a11e' visibility='default' filepath='include/linux/net.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='compat_ioctl' type-id='82a9a11e' visibility='default' filepath='include/linux/net.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='gettstamp' type-id='d78dd406' visibility='default' filepath='include/linux/net.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='listen' type-id='6dfd92af' visibility='default' filepath='include/linux/net.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='shutdown' type-id='6dfd92af' visibility='default' filepath='include/linux/net.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='setsockopt' type-id='82ffa5a0' visibility='default' filepath='include/linux/net.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='getsockopt' type-id='a9c0cdab' visibility='default' filepath='include/linux/net.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='compat_setsockopt' type-id='82ffa5a0' visibility='default' filepath='include/linux/net.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='compat_getsockopt' type-id='a9c0cdab' visibility='default' filepath='include/linux/net.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='sendmsg' type-id='f38728c0' visibility='default' filepath='include/linux/net.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='recvmsg' type-id='93abc02f' visibility='default' filepath='include/linux/net.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mmap' type-id='3eef3bc7' visibility='default' filepath='include/linux/net.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='sendpage' type-id='42b02383' visibility='default' filepath='include/linux/net.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='splice_read' type-id='21641a6b' visibility='default' filepath='include/linux/net.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='set_peek_off' type-id='95208a5e' visibility='default' filepath='include/linux/net.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='peek_len' type-id='27936440' visibility='default' filepath='include/linux/net.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='read_sock' type-id='8755cc63' visibility='default' filepath='include/linux/net.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='sendpage_locked' type-id='65399e23' visibility='default' filepath='include/linux/net.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='sendmsg_locked' type-id='1df08751' visibility='default' filepath='include/linux/net.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='set_rcvlowat' type-id='95208a5e' visibility='default' filepath='include/linux/net.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/net.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/net.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/net.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/net.h' line='211' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sock_cgroup_data' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='796' column='1' id='8544f103'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='de05b94c' visibility='default' filepath='include/linux/cgroup-defs.h' line='797' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sock_common' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/net/sock.h' line='148' column='1' id='5999c5f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='f126afef' visibility='default' filepath='include/net/sock.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='5d6a1e78' visibility='default' filepath='include/net/sock.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='' type-id='d1c6b54d' visibility='default' filepath='include/net/sock.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='skc_family' type-id='8efea9e5' visibility='default' filepath='include/net/sock.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='skc_state' type-id='75a392dc' visibility='default' filepath='include/net/sock.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='skc_reuse' type-id='002ac4a6' visibility='default' filepath='include/net/sock.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='skc_reuseport' type-id='002ac4a6' visibility='default' filepath='include/net/sock.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='skc_ipv6only' type-id='002ac4a6' visibility='default' filepath='include/net/sock.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='skc_net_refcnt' type-id='002ac4a6' visibility='default' filepath='include/net/sock.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='skc_bound_dev_if' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='9e20c58f' visibility='default' filepath='include/net/sock.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='skc_prot' type-id='d2524501' visibility='default' filepath='include/net/sock.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='skc_net' type-id='c9df1e6c' visibility='default' filepath='include/net/sock.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='skc_v6_daddr' type-id='f6ed712a' visibility='default' filepath='include/net/sock.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='skc_v6_rcv_saddr' type-id='f6ed712a' visibility='default' filepath='include/net/sock.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='skc_cookie' type-id='28ee064c' visibility='default' filepath='include/net/sock.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='' type-id='56935795' visibility='default' filepath='include/net/sock.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='skc_dontcopy_begin' type-id='1fdc7fa6' visibility='default' filepath='include/net/sock.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='' type-id='38f5bda8' visibility='default' filepath='include/net/sock.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='skc_tx_queue_mapping' type-id='8efea9e5' visibility='default' filepath='include/net/sock.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='skc_rx_queue_mapping' type-id='8efea9e5' visibility='default' filepath='include/net/sock.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='' type-id='9e121764' visibility='default' filepath='include/net/sock.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='skc_refcnt' type-id='64615833' visibility='default' filepath='include/net/sock.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='skc_dontcopy_end' type-id='1fdc7fa6' visibility='default' filepath='include/net/sock.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='' type-id='5547e6b1' visibility='default' filepath='include/net/sock.h' line='227' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__10' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='379' column='1' id='6a96185e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rmem_alloc' type-id='49178f86' visibility='default' filepath='include/net/sock.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='0fbf3cfd' visibility='default' filepath='include/net/sock.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tail' type-id='0fbf3cfd' visibility='default' filepath='include/net/sock.h' line='383' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='socket_lock_t' type-id='a865a4bb' filepath='include/net/sock.h' line='109' column='1' id='40d8a3da'/>
+      <union-decl name='__anonymous_union__18' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='412' column='1' id='fc714247'>
+        <data-member access='private'>
+          <var-decl name='sk_send_head' type-id='0fbf3cfd' visibility='default' filepath='include/net/sock.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tcp_rtx_queue' type-id='dec44472' visibility='default' filepath='include/net/sock.h' line='414' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__17' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='396' column='1' id='a29f8367'>
+        <data-member access='private'>
+          <var-decl name='sk_wq' type-id='99f34ac1' visibility='default' filepath='include/net/sock.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sk_wq_raw' type-id='99f34ac1' visibility='default' filepath='include/net/sock.h' line='398' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='8b66a21e' size-in-bits='64' id='841969d0'/>
+      <array-type-def dimensions='1' type-id='ae4d1761' size-in-bits='128' id='eb61ae4b'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='47308153' size-in-bits='64' id='3eef3bc7'/>
+      <pointer-type-def type-id='ca0a6184' size-in-bits='64' id='95208a5e'/>
+      <pointer-type-def type-id='476a87f5' size-in-bits='64' id='1df08751'/>
+      <pointer-type-def type-id='6858ea97' size-in-bits='64' id='65399e23'/>
+      <pointer-type-def type-id='0f40f777' size-in-bits='64' id='8755cc63'/>
+      <pointer-type-def type-id='b86ed83e' size-in-bits='64' id='27936440'/>
+      <pointer-type-def type-id='88b7b5d3' size-in-bits='64' id='6dfd92af'/>
+      <pointer-type-def type-id='202f00af' size-in-bits='64' id='a9c0cdab'/>
+      <pointer-type-def type-id='708a4426' size-in-bits='64' id='82ffa5a0'/>
+      <pointer-type-def type-id='5dc99a0e' size-in-bits='64' id='f38728c0'/>
+      <pointer-type-def type-id='cce3f5a3' size-in-bits='64' id='93abc02f'/>
+      <pointer-type-def type-id='a6ad86be' size-in-bits='64' id='c9664af8'/>
+      <pointer-type-def type-id='3a5c2153' size-in-bits='64' id='be6c7be7'/>
+      <pointer-type-def type-id='abc85e8f' size-in-bits='64' id='be3a232b'/>
+      <pointer-type-def type-id='9d9592f7' size-in-bits='64' id='2136470b'/>
+      <pointer-type-def type-id='bf6a2c5c' size-in-bits='64' id='82a9a11e'/>
+      <pointer-type-def type-id='d11dd9c4' size-in-bits='64' id='d78dd406'/>
+      <pointer-type-def type-id='8bd06fd9' size-in-bits='64' id='99f34ac1'/>
+      <class-decl name='bpf_sk_storage' is-struct='yes' visibility='default' is-declaration-only='yes' id='36313ee4'/>
+      <class-decl name='proto' size-in-bits='3392' is-struct='yes' visibility='default' filepath='include/net/sock.h' line='1086' column='1' id='7203ee09'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='close' type-id='09f3a86b' visibility='default' filepath='include/net/sock.h' line='1087' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pre_connect' type-id='c25ed103' visibility='default' filepath='include/net/sock.h' line='1089' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='connect' type-id='c25ed103' visibility='default' filepath='include/net/sock.h' line='1092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='disconnect' type-id='95208a5e' visibility='default' filepath='include/net/sock.h' line='1095' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='accept' type-id='67adf9a9' visibility='default' filepath='include/net/sock.h' line='1097' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ioctl' type-id='08113f0a' visibility='default' filepath='include/net/sock.h' line='1100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='init' type-id='55530c47' visibility='default' filepath='include/net/sock.h' line='1102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='destroy' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='shutdown' type-id='e937debf' visibility='default' filepath='include/net/sock.h' line='1104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='setsockopt' type-id='bc1bf185' visibility='default' filepath='include/net/sock.h' line='1105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='getsockopt' type-id='e0fadd76' visibility='default' filepath='include/net/sock.h' line='1108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='keepalive' type-id='e937debf' visibility='default' filepath='include/net/sock.h' line='1111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='compat_setsockopt' type-id='bc1bf185' visibility='default' filepath='include/net/sock.h' line='1113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='compat_getsockopt' type-id='e0fadd76' visibility='default' filepath='include/net/sock.h' line='1117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compat_ioctl' type-id='20da830b' visibility='default' filepath='include/net/sock.h' line='1121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='sendmsg' type-id='1df08751' visibility='default' filepath='include/net/sock.h' line='1124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='recvmsg' type-id='74e71fae' visibility='default' filepath='include/net/sock.h' line='1126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sendpage' type-id='65399e23' visibility='default' filepath='include/net/sock.h' line='1129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='bind' type-id='c25ed103' visibility='default' filepath='include/net/sock.h' line='1131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='backlog_rcv' type-id='a0f5247f' visibility='default' filepath='include/net/sock.h' line='1134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='release_cb' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='hash' type-id='55530c47' visibility='default' filepath='include/net/sock.h' line='1140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='unhash' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rehash' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='get_port' type-id='078de3a3' visibility='default' filepath='include/net/sock.h' line='1143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='inuse_idx' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='1147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='stream_memory_free' type-id='bf751261' visibility='default' filepath='include/net/sock.h' line='1150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='stream_memory_read' type-id='3d4d3aba' visibility='default' filepath='include/net/sock.h' line='1151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='enter_memory_pressure' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='leave_memory_pressure' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='memory_allocated' type-id='5403cb36' visibility='default' filepath='include/net/sock.h' line='1155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sockets_allocated' type-id='84c6078d' visibility='default' filepath='include/net/sock.h' line='1156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='memory_pressure' type-id='1d2c2b85' visibility='default' filepath='include/net/sock.h' line='1163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sysctl_mem' type-id='3ccc2590' visibility='default' filepath='include/net/sock.h' line='1164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='sysctl_wmem' type-id='7292109c' visibility='default' filepath='include/net/sock.h' line='1166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='sysctl_rmem' type-id='7292109c' visibility='default' filepath='include/net/sock.h' line='1167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='sysctl_wmem_offset' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='1168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='sysctl_rmem_offset' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='1169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='max_header' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='1171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='no_autobind' type-id='b50a4934' visibility='default' filepath='include/net/sock.h' line='1172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='slab' type-id='f3b4aca8' visibility='default' filepath='include/net/sock.h' line='1174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='obj_size' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='1175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='slab_flags' type-id='f7fe96cb' visibility='default' filepath='include/net/sock.h' line='1176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='useroffset' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='1177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='usersize' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='1178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='orphan_count' type-id='84c6078d' visibility='default' filepath='include/net/sock.h' line='1180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='rsk_prot' type-id='db994912' visibility='default' filepath='include/net/sock.h' line='1182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='twsk_prot' type-id='d68ad8b5' visibility='default' filepath='include/net/sock.h' line='1183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='h' type-id='adf5bf47' visibility='default' filepath='include/net/sock.h' line='1190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/sock.h' line='1192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/net/sock.h' line='1194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/net/sock.h' line='1196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='diag_destroy' type-id='95208a5e' visibility='default' filepath='include/net/sock.h' line='1200' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sk_filter' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/filter.h' line='553' column='1' id='dbc9a936'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/linux/filter.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/filter.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prog' type-id='bdcee7af' visibility='default' filepath='include/linux/filter.h' line='556' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sock_reuseport' is-struct='yes' visibility='default' is-declaration-only='yes' id='ff751355'/>
+      <class-decl name='__anonymous_struct__9' size-in-bits='256' is-struct='yes' is-anonymous='yes' naming-typedef-id='40d8a3da' visibility='default' filepath='include/net/sock.h' line='96' column='1' id='a865a4bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='slock' type-id='fb4018a0' visibility='default' filepath='include/net/sock.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='owned' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wq' type-id='b5ab048f' visibility='default' filepath='include/net/sock.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='c9a7d694' size-in-bits='64' id='e93ad56e'/>
+      <pointer-type-def type-id='c87333bf' size-in-bits='64' id='21641a6b'/>
+      <pointer-type-def type-id='217933b7' size-in-bits='64' id='42b02383'/>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='152' column='1' id='f126afef'>
+        <data-member access='private'>
+          <var-decl name='skc_addrpair' type-id='d17a6eed' visibility='default' filepath='include/net/sock.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='7eabe5fc' visibility='default' filepath='include/net/sock.h' line='154' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='164' column='1' id='d1c6b54d'>
+        <data-member access='private'>
+          <var-decl name='skc_portpair' type-id='e7c2a649' visibility='default' filepath='include/net/sock.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='a414c3c0' visibility='default' filepath='include/net/sock.h' line='166' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='179' column='1' id='9e20c58f'>
+        <data-member access='private'>
+          <var-decl name='skc_bind_node' type-id='03a4a074' visibility='default' filepath='include/net/sock.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='skc_portaddr_node' type-id='03a4a074' visibility='default' filepath='include/net/sock.h' line='181' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__14' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='210' column='1' id='38f5bda8'>
+        <data-member access='private'>
+          <var-decl name='skc_node' type-id='03a4a074' visibility='default' filepath='include/net/sock.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='skc_nulls_node' type-id='5bd248e7' visibility='default' filepath='include/net/sock.h' line='212' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__15' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='218' column='1' id='9e121764'>
+        <data-member access='private'>
+          <var-decl name='skc_incoming_cpu' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='skc_rcv_wnd' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='skc_tw_rcv_nxt' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='221' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__40' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='797' column='1' id='de05b94c'>
+        <data-member access='private'>
+          <var-decl name='' type-id='16b0d6e5' visibility='default' filepath='include/linux/cgroup-defs.h' line='799' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='val' type-id='91ce1af9' visibility='default' filepath='include/linux/cgroup-defs.h' line='817' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__16' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='227' column='1' id='5547e6b1'>
+        <data-member access='private'>
+          <var-decl name='skc_rxhash' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='skc_window_clamp' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='skc_tw_snd_nxt' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='230' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='159' column='1' id='5d6a1e78'>
+        <data-member access='private'>
+          <var-decl name='skc_hash' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='skc_u16hashes' type-id='810b4a17' visibility='default' filepath='include/net/sock.h' line='161' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__13' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='198' column='1' id='56935795'>
+        <data-member access='private'>
+          <var-decl name='skc_flags' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='skc_listener' type-id='f772df6e' visibility='default' filepath='include/net/sock.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='skc_tw_dr' type-id='b7ab21fc' visibility='default' filepath='include/net/sock.h' line='201' column='1'/>
+        </data-member>
+      </union-decl>
+      <qualified-type-def type-id='002ac4a6' volatile='yes' id='75a392dc'/>
+      <pointer-type-def type-id='ccf6c819' size-in-bits='64' id='ae4d1761'/>
+      <pointer-type-def type-id='facd5339' size-in-bits='64' id='bdcee7af'/>
+      <pointer-type-def type-id='af2c6a56' size-in-bits='64' id='b7ab21fc'/>
+      <pointer-type-def type-id='3c813efb' size-in-bits='64' id='55530c47'/>
+      <pointer-type-def type-id='1f17d624' size-in-bits='64' id='e0fadd76'/>
+      <pointer-type-def type-id='bcdeebc9' size-in-bits='64' id='bc1bf185'/>
+      <pointer-type-def type-id='ec50bf48' size-in-bits='64' id='08113f0a'/>
+      <pointer-type-def type-id='ce67f06c' size-in-bits='64' id='74e71fae'/>
+      <pointer-type-def type-id='eb19b127' size-in-bits='64' id='c25ed103'/>
+      <pointer-type-def type-id='6f52f27f' size-in-bits='64' id='20da830b'/>
+      <pointer-type-def type-id='4d6fc4c7' size-in-bits='64' id='078de3a3'/>
+      <pointer-type-def type-id='b92c8d0d' size-in-bits='64' id='84c6078d'/>
+      <pointer-type-def type-id='ad499564' size-in-bits='64' id='db994912'/>
+      <pointer-type-def type-id='aec72305' size-in-bits='64' id='67adf9a9'/>
+      <class-decl name='xfrm_policy' size-in-bits='6656' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='499' column='1' id='ccf6c819'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xp_net' type-id='c9df1e6c' visibility='default' filepath='include/net/xfrm.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bydst' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='byidx' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/xfrm.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/xfrm.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='pos' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/net/xfrm.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='genid' type-id='49178f86' visibility='default' filepath='include/net/xfrm.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='priority' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='index' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='if_id' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mark' type-id='0084df72' visibility='default' filepath='include/net/xfrm.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='selector' type-id='8eb3b1fe' visibility='default' filepath='include/net/xfrm.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='lft' type-id='4ca5f2ad' visibility='default' filepath='include/net/xfrm.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='curlft' type-id='29d519c9' visibility='default' filepath='include/net/xfrm.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='walk' type-id='e8e96050' visibility='default' filepath='include/net/xfrm.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='polq' type-id='d15e38d5' visibility='default' filepath='include/net/xfrm.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='bydst_reinsert' type-id='b50a4934' visibility='default' filepath='include/net/xfrm.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3208'>
+          <var-decl name='type' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3216'>
+          <var-decl name='action' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3224'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3232'>
+          <var-decl name='xfrm_nr' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3248'>
+          <var-decl name='family' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='security' type-id='b07c2494' visibility='default' filepath='include/net/xfrm.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='xfrm_vec' type-id='41cc9498' visibility='default' filepath='include/net/xfrm.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='bydst_inexact_list' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/xfrm.h' line='529' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='166' column='1' id='a414c3c0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='skc_dport' type-id='84a5c3d4' visibility='default' filepath='include/net/sock.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='skc_num' type-id='d315442e' visibility='default' filepath='include/net/sock.h' line='168' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='154' column='1' id='7eabe5fc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='skc_daddr' type-id='78a133c2' visibility='default' filepath='include/net/sock.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='skc_rcv_saddr' type-id='78a133c2' visibility='default' filepath='include/net/sock.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__17' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='799' column='1' id='16b0d6e5'>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='is_data' type-id='f9b06939' visibility='default' filepath='include/linux/cgroup-defs.h' line='800' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='no_refcnt' type-id='f9b06939' visibility='default' filepath='include/linux/cgroup-defs.h' line='801' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='unused' type-id='f9b06939' visibility='default' filepath='include/linux/cgroup-defs.h' line='802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='padding' type-id='f9b06939' visibility='default' filepath='include/linux/cgroup-defs.h' line='803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='prioidx' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='classid' type-id='19c2251e' visibility='default' filepath='include/linux/cgroup-defs.h' line='805' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b8765d15' size-in-bits='64' id='d68ad8b5'/>
+      <typedef-decl name='__addrpair' type-id='d3130597' filepath='include/net/sock.h' line='116' column='1' id='d17a6eed'/>
+      <typedef-decl name='__portpair' type-id='3f1a6b60' filepath='include/net/sock.h' line='115' column='1' id='e7c2a649'/>
+      <pointer-type-def type-id='7e5ce7a8' size-in-bits='64' id='3d4d3aba'/>
+      <pointer-type-def type-id='7ad36775' size-in-bits='64' id='bf751261'/>
+      <union-decl name='__anonymous_union__12' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='1185' column='1' id='adf5bf47'>
+        <data-member access='private'>
+          <var-decl name='hashinfo' type-id='d7a1e3c2' visibility='default' filepath='include/net/sock.h' line='1186' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='udp_table' type-id='115daa23' visibility='default' filepath='include/net/sock.h' line='1187' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw_hash' type-id='eb2c56dc' visibility='default' filepath='include/net/sock.h' line='1188' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='smc_hash' type-id='aa8162a3' visibility='default' filepath='include/net/sock.h' line='1189' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='9263c6b3' size-in-bits='64' id='e937debf'/>
+      <pointer-type-def type-id='4e62b18f' size-in-bits='64' id='09f3a86b'/>
+      <pointer-type-def type-id='51ee3086' size-in-bits='64' id='eb2c56dc'/>
+      <pointer-type-def type-id='adb1d973' size-in-bits='64' id='aa8162a3'/>
+      <class-decl name='bpf_prog' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/filter.h' line='525' column='1' id='facd5339'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pages' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='jited' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='jit_requested' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='gpl_compatible' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='cb_access' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='dst_needed' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='blinded' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='is_func' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='kprobe_override' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='has_callchain_buf' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='enforce_expected_attach_type' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='b80df76a' visibility='default' filepath='include/linux/filter.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='expected_attach_type' type-id='67ce11ed' visibility='default' filepath='include/linux/filter.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='19c2251e' visibility='default' filepath='include/linux/filter.h' line='539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='jited_len' type-id='19c2251e' visibility='default' filepath='include/linux/filter.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tag' type-id='d2f7b56a' visibility='default' filepath='include/linux/filter.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='aux' type-id='1e6beae1' visibility='default' filepath='include/linux/filter.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='orig_prog' type-id='e93ad915' visibility='default' filepath='include/linux/filter.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bpf_func' type-id='531a7450' visibility='default' filepath='include/linux/filter.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='' type-id='fe772793' visibility='default' filepath='include/linux/filter.h' line='547' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request_sock_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/request_sock.h' line='27' column='1' id='ad499564'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/net/request_sock.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='obj_size' type-id='f0981eeb' visibility='default' filepath='include/net/request_sock.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='slab' type-id='f3b4aca8' visibility='default' filepath='include/net/request_sock.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='slab_name' type-id='26a90f95' visibility='default' filepath='include/net/request_sock.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rtx_syn_ack' type-id='cd05c94e' visibility='default' filepath='include/net/request_sock.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='send_ack' type-id='d3d20d73' visibility='default' filepath='include/net/request_sock.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='send_reset' type-id='c9214b77' visibility='default' filepath='include/net/request_sock.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='destructor' type-id='b249945a' visibility='default' filepath='include/net/request_sock.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='syn_ack_timeout' type-id='29e425c9' visibility='default' filepath='include/net/request_sock.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timewait_sock_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/timewait_sock.h' line='14' column='1' id='b8765d15'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='twsk_slab' type-id='f3b4aca8' visibility='default' filepath='include/net/timewait_sock.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='twsk_slab_name' type-id='26a90f95' visibility='default' filepath='include/net/timewait_sock.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='twsk_obj_size' type-id='f0981eeb' visibility='default' filepath='include/net/timewait_sock.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='twsk_unique' type-id='1d8e5a11' visibility='default' filepath='include/net/timewait_sock.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='twsk_destructor' type-id='841969d0' visibility='default' filepath='include/net/timewait_sock.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_policy_queue' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='493' column='1' id='d15e38d5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hold_queue' type-id='e61c85d0' visibility='default' filepath='include/net/xfrm.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hold_timer' type-id='abe41e67' visibility='default' filepath='include/net/xfrm.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='timeout' type-id='7359adad' visibility='default' filepath='include/net/xfrm.h' line='496' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_policy_walk_entry' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='482' column='1' id='e8e96050'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='all' type-id='72f469ec' visibility='default' filepath='include/net/xfrm.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dead' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='484' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9a516b13' size-in-bits='64' id='115daa23'/>
+      <array-type-def dimensions='1' type-id='a30f25c8' size-in-bits='3072' id='41cc9498'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <pointer-type-def type-id='09d9fab9' size-in-bits='64' id='1e6beae1'/>
+      <enum-decl name='bpf_attach_type' filepath='include/uapi/linux/bpf.h' line='178' column='1' id='67ce11ed'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BPF_CGROUP_INET_INGRESS' value='0'/>
+        <enumerator name='BPF_CGROUP_INET_EGRESS' value='1'/>
+        <enumerator name='BPF_CGROUP_INET_SOCK_CREATE' value='2'/>
+        <enumerator name='BPF_CGROUP_SOCK_OPS' value='3'/>
+        <enumerator name='BPF_SK_SKB_STREAM_PARSER' value='4'/>
+        <enumerator name='BPF_SK_SKB_STREAM_VERDICT' value='5'/>
+        <enumerator name='BPF_CGROUP_DEVICE' value='6'/>
+        <enumerator name='BPF_SK_MSG_VERDICT' value='7'/>
+        <enumerator name='BPF_CGROUP_INET4_BIND' value='8'/>
+        <enumerator name='BPF_CGROUP_INET6_BIND' value='9'/>
+        <enumerator name='BPF_CGROUP_INET4_CONNECT' value='10'/>
+        <enumerator name='BPF_CGROUP_INET6_CONNECT' value='11'/>
+        <enumerator name='BPF_CGROUP_INET4_POST_BIND' value='12'/>
+        <enumerator name='BPF_CGROUP_INET6_POST_BIND' value='13'/>
+        <enumerator name='BPF_CGROUP_UDP4_SENDMSG' value='14'/>
+        <enumerator name='BPF_CGROUP_UDP6_SENDMSG' value='15'/>
+        <enumerator name='BPF_LIRC_MODE2' value='16'/>
+        <enumerator name='BPF_FLOW_DISSECTOR' value='17'/>
+        <enumerator name='BPF_CGROUP_SYSCTL' value='18'/>
+        <enumerator name='BPF_CGROUP_UDP4_RECVMSG' value='19'/>
+        <enumerator name='BPF_CGROUP_UDP6_RECVMSG' value='20'/>
+        <enumerator name='BPF_CGROUP_GETSOCKOPT' value='21'/>
+        <enumerator name='BPF_CGROUP_SETSOCKOPT' value='22'/>
+        <enumerator name='__MAX_BPF_ATTACH_TYPE' value='23'/>
+      </enum-decl>
+      <enum-decl name='bpf_prog_type' filepath='include/uapi/linux/bpf.h' line='149' column='1' id='b80df76a'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BPF_PROG_TYPE_UNSPEC' value='0'/>
+        <enumerator name='BPF_PROG_TYPE_SOCKET_FILTER' value='1'/>
+        <enumerator name='BPF_PROG_TYPE_KPROBE' value='2'/>
+        <enumerator name='BPF_PROG_TYPE_SCHED_CLS' value='3'/>
+        <enumerator name='BPF_PROG_TYPE_SCHED_ACT' value='4'/>
+        <enumerator name='BPF_PROG_TYPE_TRACEPOINT' value='5'/>
+        <enumerator name='BPF_PROG_TYPE_XDP' value='6'/>
+        <enumerator name='BPF_PROG_TYPE_PERF_EVENT' value='7'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_SKB' value='8'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_SOCK' value='9'/>
+        <enumerator name='BPF_PROG_TYPE_LWT_IN' value='10'/>
+        <enumerator name='BPF_PROG_TYPE_LWT_OUT' value='11'/>
+        <enumerator name='BPF_PROG_TYPE_LWT_XMIT' value='12'/>
+        <enumerator name='BPF_PROG_TYPE_SOCK_OPS' value='13'/>
+        <enumerator name='BPF_PROG_TYPE_SK_SKB' value='14'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_DEVICE' value='15'/>
+        <enumerator name='BPF_PROG_TYPE_SK_MSG' value='16'/>
+        <enumerator name='BPF_PROG_TYPE_RAW_TRACEPOINT' value='17'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_SOCK_ADDR' value='18'/>
+        <enumerator name='BPF_PROG_TYPE_LWT_SEG6LOCAL' value='19'/>
+        <enumerator name='BPF_PROG_TYPE_LIRC_MODE2' value='20'/>
+        <enumerator name='BPF_PROG_TYPE_SK_REUSEPORT' value='21'/>
+        <enumerator name='BPF_PROG_TYPE_FLOW_DISSECTOR' value='22'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_SYSCTL' value='23'/>
+        <enumerator name='BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE' value='24'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_SOCKOPT' value='25'/>
+      </enum-decl>
+      <pointer-type-def type-id='d328415c' size-in-bits='64' id='cd05c94e'/>
+      <pointer-type-def type-id='e8300215' size-in-bits='64' id='1d8e5a11'/>
+      <pointer-type-def type-id='f29d9605' size-in-bits='64' id='e93ad915'/>
+      <class-decl name='raw_hashinfo' size-in-bits='16448' is-struct='yes' visibility='default' filepath='include/net/raw.h' line='35' column='1' id='51ee3086'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/raw.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ht' type-id='a7c26c7b' visibility='default' filepath='include/net/raw.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='smc_hashinfo' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/smc.h' line='16' column='1' id='adb1d973'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/smc.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ht' type-id='e151255a' visibility='default' filepath='include/net/smc.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='udp_table' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/udp.h' line='71' column='1' id='9a516b13'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='9cc41107' visibility='default' filepath='include/net/udp.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hash2' type-id='9cc41107' visibility='default' filepath='include/net/udp.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/net/udp.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='log' type-id='f0981eeb' visibility='default' filepath='include/net/udp.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_tmpl' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='445' column='1' id='a30f25c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='d07aeeaa' visibility='default' filepath='include/net/xfrm.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='saddr' type-id='c210d497' visibility='default' filepath='include/net/xfrm.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='encap_family' type-id='8efea9e5' visibility='default' filepath='include/net/xfrm.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='reqid' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mode' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='share' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='optional' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='408'>
+          <var-decl name='allalgs' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='aalgos' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ealgos' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='calgos' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='476' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__33' is-anonymous='yes' visibility='default' filepath='include/linux/filter.h' line='547' column='1' id='fe772793'>
+        <data-member access='private'>
+          <var-decl name='insns' type-id='4967766c' visibility='default' filepath='include/linux/filter.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='insnsi' type-id='b50399da' visibility='default' filepath='include/linux/filter.h' line='549' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='98b2ffae' size-in-bits='64' id='531a7450'/>
+      <pointer-type-def type-id='557c51cd' size-in-bits='64' id='29e425c9'/>
+      <pointer-type-def type-id='33ca674b' size-in-bits='64' id='c9214b77'/>
+      <pointer-type-def type-id='a41f849f' size-in-bits='64' id='d3d20d73'/>
+      <pointer-type-def type-id='22814d90' size-in-bits='64' id='b249945a'/>
+      <array-type-def dimensions='1' type-id='8c2bf2b2' size-in-bits='infinite' id='b50399da'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='16384' id='a7c26c7b'>
+        <subrange length='256' type-id='7ff19f0f' id='36e5b9fa'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f588f6e0' size-in-bits='infinite' id='4967766c'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='bpf_prog_aux' size-in-bits='2496' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='368' column='1' id='09d9fab9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcnt' type-id='49178f86' visibility='default' filepath='include/linux/bpf.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='used_map_cnt' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_ctx_offset' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_pkt_offset' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_tp_access' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='stack_depth' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='func_cnt' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='func_idx' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='verifier_zext' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='offload_requested' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='func' type-id='50b674cc' visibility='default' filepath='include/linux/bpf.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='jit_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ksym_tnode' type-id='dc9cc7c7' visibility='default' filepath='include/linux/bpf.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ksym_lnode' type-id='72f469ec' visibility='default' filepath='include/linux/bpf.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ops' type-id='330c0db4' visibility='default' filepath='include/linux/bpf.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='used_maps' type-id='0928d5d6' visibility='default' filepath='include/linux/bpf.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='prog' type-id='bdcee7af' visibility='default' filepath='include/linux/bpf.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='user' type-id='273a7d34' visibility='default' filepath='include/linux/bpf.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='load_time' type-id='91ce1af9' visibility='default' filepath='include/linux/bpf.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='cgroup_storage' type-id='f57e9a44' visibility='default' filepath='include/linux/bpf.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/bpf.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='offload' type-id='11f19dd0' visibility='default' filepath='include/linux/bpf.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='btf' type-id='a469220f' visibility='default' filepath='include/linux/bpf.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='func_info' type-id='368d43d3' visibility='default' filepath='include/linux/bpf.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='linfo' type-id='2fcb9b17' visibility='default' filepath='include/linux/bpf.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='jited_linfo' type-id='63e171df' visibility='default' filepath='include/linux/bpf.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='func_info_cnt' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='nr_linfo' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='linfo_idx' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='stats' type-id='fbf2ba3a' visibility='default' filepath='include/linux/bpf.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='' type-id='b597c0fa' visibility='default' filepath='include/linux/bpf.h' line='420' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sock_fprog_kern' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/filter.h' line='509' column='1' id='f29d9605'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='filter' type-id='e1ea11f6' visibility='default' filepath='include/linux/filter.h' line='511' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='fa07ab8f' size-in-bits='64' id='9cc41107'/>
+      <pointer-type-def type-id='8a1373a3' size-in-bits='64' id='368d43d3'/>
+      <pointer-type-def type-id='88565f1f' size-in-bits='64' id='2fcb9b17'/>
+      <pointer-type-def type-id='00ee50b8' size-in-bits='64' id='0928d5d6'/>
+      <array-type-def dimensions='1' type-id='00ee50b8' size-in-bits='128' id='f57e9a44'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='bdcee7af' size-in-bits='64' id='50b674cc'/>
+      <pointer-type-def type-id='eef53362' size-in-bits='64' id='11f19dd0'/>
+      <pointer-type-def type-id='7af446cc' size-in-bits='64' id='fbf2ba3a'/>
+      <pointer-type-def type-id='b9a01bd6' size-in-bits='64' id='330c0db4'/>
+      <pointer-type-def type-id='f588f6e0' size-in-bits='64' id='e1ea11f6'/>
+      <class-decl name='sock_filter' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/filter.h' line='24' column='1' id='f588f6e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='code' type-id='d315442e' visibility='default' filepath='include/uapi/linux/filter.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='jt' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/filter.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='jf' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/filter.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='k' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/filter.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='udp_hslot' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/udp.h' line='57' column='1' id='fa07ab8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='e151255a' visibility='default' filepath='include/net/udp.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/net/udp.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/udp.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__32' size-in-bits='384' is-anonymous='yes' visibility='default' filepath='include/linux/bpf.h' line='420' column='1' id='b597c0fa'>
+        <data-member access='private'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/bpf.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/bpf.h' line='422' column='1'/>
+        </data-member>
+      </union-decl>
+      <qualified-type-def type-id='9a1fed7b' const='yes' id='b9a01bd6'/>
+      <class-decl name='bpf_func_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='3603' column='1' id='8a1373a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='insn_off' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3605' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_line_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='3611' column='1' id='88565f1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='insn_off' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='file_name_off' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='line_off' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='line_col' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3615' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog_offload' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='342' column='1' id='eef53362'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog' type-id='bdcee7af' visibility='default' filepath='include/linux/bpf.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='netdev' type-id='68a2d05c' visibility='default' filepath='include/linux/bpf.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='offdev' type-id='d079c835' visibility='default' filepath='include/linux/bpf.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='offloads' type-id='72f469ec' visibility='default' filepath='include/linux/bpf.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev_state' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='opt_failed' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='jited_image' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='jited_len' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='351' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog_stats' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='362' column='1' id='7af446cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cnt' type-id='91ce1af9' visibility='default' filepath='include/linux/bpf.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nsecs' type-id='91ce1af9' visibility='default' filepath='include/linux/bpf.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='syncp' type-id='e4d85780' visibility='default' filepath='include/linux/bpf.h' line='365' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='22474385' size-in-bits='64' id='d079c835'/>
+      <class-decl name='bpf_prog_ops' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='300' column='1' id='9a1fed7b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='test_run' type-id='eddbe2ad' visibility='default' filepath='include/linux/bpf.h' line='301' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='87461f69' size-in-bits='64' id='eddbe2ad'/>
+      <class-decl name='bpf_offload_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='22474385'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/net/ppp/pptp.c' language='LANG_C89'>
+      <class-decl name='xfrm_policy' is-struct='yes' visibility='default' is-declaration-only='yes' id='ccf6c81a'/>
+      <class-decl name='xfrm_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='cb961c69'/>
+      <union-decl name='__anonymous_union__5' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/net/netns/generic.h' line='29' column='1' id='1a99b3b8'>
+        <data-member access='private'>
+          <var-decl name='s' type-id='88d8a388' visibility='default' filepath='include/net/netns/generic.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ptr' type-id='baf98fd3' visibility='default' filepath='include/net/netns/generic.h' line='35' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netns/generic.h' line='30' column='1' id='88d8a388'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/net/netns/generic.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/netns/generic.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gre_protocol' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/gre.h' line='27' column='1' id='e9928c10'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='handler' type-id='d2e00785' visibility='default' filepath='include/net/gre.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='err_handler' type-id='e4b24123' visibility='default' filepath='include/net/gre.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_conntrack' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='26' column='1' id='d9fc42c3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='use' type-id='49178f86' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pppox_proto' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/if_pppox.h' line='72' column='1' id='6f9bf471'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='create' type-id='f4306620' visibility='default' filepath='include/linux/if_pppox.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ioctl' type-id='82a9a11e' visibility='default' filepath='include/linux/if_pppox.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/if_pppox.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ppp_channel' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/ppp_channel.h' line='33' column='1' id='21893e8b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/ppp_channel.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='d65a12b3' visibility='default' filepath='include/linux/ppp_channel.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mtu' type-id='95e97e5e' visibility='default' filepath='include/linux/ppp_channel.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='hdrlen' type-id='95e97e5e' visibility='default' filepath='include/linux/ppp_channel.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ppp' type-id='eaa32e2f' visibility='default' filepath='include/linux/ppp_channel.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='speed' type-id='95e97e5e' visibility='default' filepath='include/linux/ppp_channel.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='latency' type-id='95e97e5e' visibility='default' filepath='include/linux/ppp_channel.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ppp_channel_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/ppp_channel.h' line='25' column='1' id='2134e0b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_xmit' type-id='7c56bbaf' visibility='default' filepath='include/linux/ppp_channel.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ioctl' type-id='a7844efb' visibility='default' filepath='include/linux/ppp_channel.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iphdr' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/ip.h' line='86' column='1' id='1edbefa6'>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='ihl' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ip.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ip.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='tos' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ip.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='tot_len' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ip.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ip.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='frag_off' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ip.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ttl' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ip.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='protocol' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ip.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='check' type-id='7dac1e36' visibility='default' filepath='include/uapi/linux/ip.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='saddr' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ip.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='daddr' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ip.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__sum16' type-id='d315442e' filepath='include/uapi/linux/types.h' line='36' column='1' id='7dac1e36'/>
+      <qualified-type-def type-id='e9928c10' const='yes' id='b053b689'/>
+      <pointer-type-def type-id='b053b689' size-in-bits='64' id='36c88299'/>
+      <qualified-type-def type-id='2134e0b8' const='yes' id='2994de4b'/>
+      <pointer-type-def type-id='2994de4b' size-in-bits='64' id='d65a12b3'/>
+      <qualified-type-def type-id='6f9bf471' const='yes' id='2f8dd5c2'/>
+      <pointer-type-def type-id='2f8dd5c2' size-in-bits='64' id='c447bc38'/>
+      <pointer-type-def type-id='5f8f2c58' size-in-bits='64' id='a198549e'/>
+      <pointer-type-def type-id='a45265de' size-in-bits='64' id='f4306620'/>
+      <pointer-type-def type-id='fca2ff53' size-in-bits='64' id='7c56bbaf'/>
+      <pointer-type-def type-id='4f40b107' size-in-bits='64' id='a7844efb'/>
+      <pointer-type-def type-id='1edbefa6' size-in-bits='64' id='53be694c'/>
+      <pointer-type-def type-id='d9fc42c3' size-in-bits='64' id='96b07343'/>
+      <pointer-type-def type-id='21893e8b' size-in-bits='64' id='b8e94b0b'/>
+      <pointer-type-def type-id='e61c85d0' size-in-bits='64' id='03c386c6'/>
+      <pointer-type-def type-id='4157d9cf' size-in-bits='64' id='e4b24123'/>
+      <pointer-type-def type-id='ccf6c81a' size-in-bits='64' id='ae4d1762'/>
+      <pointer-type-def type-id='cb961c69' size-in-bits='64' id='328dda6f'/>
+      <function-decl name='unregister_pppox_proto' mangled-name='unregister_pppox_proto' filepath='include/linux/if_pppox.h' line='80' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_pppox_proto'>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='proto_unregister' mangled-name='proto_unregister' filepath='include/net/sock.h' line='1204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proto_unregister'>
+        <parameter type-id='d2524501'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gre_del_protocol' mangled-name='gre_del_protocol' filepath='include/net/gre.h' line='33' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gre_del_protocol'>
+        <parameter type-id='36c88299'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dst_release' mangled-name='dst_release' filepath='include/net/dst.h' line='252' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dst_release'>
+        <parameter type-id='141b6427'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='nf_conntrack_destroy' mangled-name='nf_conntrack_destroy' filepath='include/linux/netfilter/nf_conntrack_common.h' line='30' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nf_conntrack_destroy'>
+        <parameter type-id='96b07343'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gre_add_protocol' mangled-name='gre_add_protocol' filepath='include/net/gre.h' line='32' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gre_add_protocol'>
+        <parameter type-id='36c88299'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='proto_register' mangled-name='proto_register' filepath='include/net/sock.h' line='1203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proto_register'>
+        <parameter type-id='d2524501'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='register_pppox_proto' mangled-name='register_pppox_proto' filepath='include/linux/if_pppox.h' line='79' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_pppox_proto'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='c447bc38'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sk_alloc' mangled-name='sk_alloc' filepath='include/net/sock.h' line='1616' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sk_alloc'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='d2524501'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='f772df6e'/>
+      </function-decl>
+      <function-decl name='sock_init_data' mangled-name='sock_init_data' filepath='include/net/sock.h' line='1718' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_init_data'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='f772df6e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sock_queue_rcv_skb' mangled-name='sock_queue_rcv_skb' filepath='include/net/sock.h' line='2173' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_queue_rcv_skb'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_pull' mangled-name='skb_pull' filepath='include/linux/skbuff.h' line='2278' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_pull'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='ppp_input' mangled-name='ppp_input' filepath='include/linux/ppp_channel.h' line='50' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_input'>
+        <parameter type-id='b8e94b0b'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pppox_unbind_sock' mangled-name='pppox_unbind_sock' filepath='include/linux/if_pppox.h' line='81' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pppox_unbind_sock'>
+        <parameter type-id='f772df6e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_queue_purge' mangled-name='skb_queue_purge' filepath='include/linux/skbuff.h' line='2781' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_queue_purge'>
+        <parameter type-id='03c386c6'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='lock_sock_nested' mangled-name='lock_sock_nested' filepath='include/net/sock.h' line='1542' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lock_sock_nested'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='synchronize_rcu' mangled-name='synchronize_rcu' filepath='include/linux/rcupdate.h' line='40' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='synchronize_rcu'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_write_lock_bh' mangled-name='_raw_write_lock_bh' filepath='include/linux/rwlock_api_smp.h' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_write_lock_bh'>
+        <parameter type-id='8567d8b1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_write_unlock_bh' mangled-name='_raw_write_unlock_bh' filepath='include/linux/rwlock_api_smp.h' line='33' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_write_unlock_bh'>
+        <parameter type-id='8567d8b1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='release_sock' mangled-name='release_sock' filepath='include/net/sock.h' line='1550' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='release_sock'>
+        <parameter type-id='f772df6e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sk_free' mangled-name='sk_free' filepath='include/net/sock.h' line='1618' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sk_free'>
+        <parameter type-id='f772df6e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='security_sk_classify_flow' mangled-name='security_sk_classify_flow' filepath='include/linux/security.h' line='1304' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='security_sk_classify_flow'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='b1fd62ba'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ip_route_output_flow' mangled-name='ip_route_output_flow' filepath='include/net/route.h' line='129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip_route_output_flow'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='a198549e'/>
+        <parameter type-id='78e7cf52'/>
+        <return type-id='c8f5869f'/>
+      </function-decl>
+      <function-decl name='sk_setup_caps' mangled-name='sk_setup_caps' filepath='include/net/sock.h' line='1986' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sk_setup_caps'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='141b6427'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ppp_register_channel' mangled-name='ppp_register_channel' filepath='include/linux/ppp_channel.h' line='60' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_register_channel'>
+        <parameter type-id='b8e94b0b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_realloc_headroom' mangled-name='skb_realloc_headroom' filepath='include/linux/skbuff.h' line='1125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_realloc_headroom'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='skb_set_owner_w' mangled-name='skb_set_owner_w' filepath='include/net/sock.h' line='2144' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_set_owner_w'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f772df6e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_push' mangled-name='skb_push' filepath='include/linux/skbuff.h' line='2270' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_push'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='ip_send_check' mangled-name='ip_send_check' filepath='include/net/ip.h' line='203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip_send_check'>
+        <parameter type-id='53be694c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ip_local_out' mangled-name='ip_local_out' filepath='include/net/ip.h' line='205' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip_local_out'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='find_next_zero_bit' mangled-name='find_next_zero_bit' filepath='include/asm-generic/bitops/find.h' line='45' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='find_next_zero_bit'>
+        <parameter type-id='f9b37274'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <pointer-type-def type-id='d7ab0a14' size-in-bits='64' id='8567d8b1'/>
+      <pointer-type-def type-id='17644e8c' size-in-bits='64' id='78e7cf52'/>
+      <pointer-type-def type-id='2117397c' size-in-bits='64' id='b1fd62ba'/>
+      <function-type size-in-bits='64' id='a45265de'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='13103032'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fca2ff53'>
+        <parameter type-id='b8e94b0b'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f40b107'>
+        <parameter type-id='b8e94b0b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4157d9cf'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <class-decl name='flowi4' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='70' column='1' id='5f8f2c58'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__fl_common' type-id='184ee240' visibility='default' filepath='include/net/flow.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='saddr' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='daddr' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='uli' type-id='76355708' visibility='default' filepath='include/net/flow.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='a240f41e' const='yes' id='17644e8c'/>
+      <class-decl name='flowi' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='174' column='1' id='2117397c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='u' type-id='e9bb6246' visibility='default' filepath='include/net/flow.h' line='180' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='flowi_common' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='29' column='1' id='184ee240'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flowic_oif' type-id='95e97e5e' visibility='default' filepath='include/net/flow.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flowic_iif' type-id='95e97e5e' visibility='default' filepath='include/net/flow.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flowic_mark' type-id='3f1a6b60' visibility='default' filepath='include/net/flow.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flowic_tos' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='flowic_scope' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='flowic_proto' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='flowic_flags' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flowic_secid' type-id='3f1a6b60' visibility='default' filepath='include/net/flow.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flowic_uid' type-id='d80b72e6' visibility='default' filepath='include/net/flow.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flowic_tun_key' type-id='46ff7b8b' visibility='default' filepath='include/net/flow.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flowic_multipath_hash' type-id='3f1a6b60' visibility='default' filepath='include/net/flow.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='flowi_uli' size-in-bits='32' visibility='default' filepath='include/net/flow.h' line='46' column='1' id='76355708'>
+        <data-member access='private'>
+          <var-decl name='ports' type-id='1a8a9bd4' visibility='default' filepath='include/net/flow.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='icmpt' type-id='217fb848' visibility='default' filepath='include/net/flow.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dnports' type-id='b1169d60' visibility='default' filepath='include/net/flow.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='spi' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='gre_key' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='mht' type-id='97a0d733' visibility='default' filepath='include/net/flow.h' line='67' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='flowi_tunnel' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='25' column='1' id='46ff7b8b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tun_id' type-id='0899c7ad' visibility='default' filepath='include/net/flow.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__12' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='47' column='1' id='1a8a9bd4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dport' type-id='84a5c3d4' visibility='default' filepath='include/net/flow.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sport' type-id='84a5c3d4' visibility='default' filepath='include/net/flow.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__14' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='57' column='1' id='b1169d60'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dport' type-id='23119536' visibility='default' filepath='include/net/flow.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sport' type-id='23119536' visibility='default' filepath='include/net/flow.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__13' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='52' column='1' id='217fb848'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='code' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__15' size-in-bits='8' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='65' column='1' id='97a0d733'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__37' size-in-bits='704' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='175' column='1' id='e9bb6246'>
+        <data-member access='private'>
+          <var-decl name='__fl_common' type-id='184ee240' visibility='default' filepath='include/net/flow.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ip4' type-id='5f8f2c58' visibility='default' filepath='include/net/flow.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ip6' type-id='618f2f7e' visibility='default' filepath='include/net/flow.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dn' type-id='83eba552' visibility='default' filepath='include/net/flow.h' line='179' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='flowi6' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='133' column='1' id='618f2f7e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__fl_common' type-id='184ee240' visibility='default' filepath='include/net/flow.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='daddr' type-id='f6ed712a' visibility='default' filepath='include/net/flow.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='saddr' type-id='f6ed712a' visibility='default' filepath='include/net/flow.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='flowlabel' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='uli' type-id='76355708' visibility='default' filepath='include/net/flow.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mp_hash' type-id='3f1a6b60' visibility='default' filepath='include/net/flow.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='flowidn' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='159' column='1' id='83eba552'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__fl_common' type-id='184ee240' visibility='default' filepath='include/net/flow.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='daddr' type-id='23119536' visibility='default' filepath='include/net/flow.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='saddr' type-id='23119536' visibility='default' filepath='include/net/flow.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='uli' type-id='76355708' visibility='default' filepath='include/net/flow.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/net/tun.c' language='LANG_C89'>
+      <pointer-type-def type-id='06c0432f' size-in-bits='64' id='a8d434b7'/>
+      <function-decl name='netdev_alloc_frag' mangled-name='netdev_alloc_frag' filepath='include/linux/skbuff.h' line='2785' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_alloc_frag'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='netif_receive_skb' mangled-name='netif_receive_skb' filepath='include/linux/netdevice.h' line='3682' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_receive_skb'>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_page_frag_refill' mangled-name='skb_page_frag_refill' filepath='include/linux/skbuff.h' line='3079' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_page_frag_refill'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='a8d434b7'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='skb_partial_csum_set' mangled-name='skb_partial_csum_set' filepath='include/linux/skbuff.h' line='4499' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_partial_csum_set'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='8efea9e5'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='netif_set_real_num_tx_queues' mangled-name='netif_set_real_num_tx_queues' filepath='include/linux/netdevice.h' line='3597' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_set_real_num_tx_queues'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netif_set_real_num_rx_queues' mangled-name='netif_set_real_num_rx_queues' filepath='include/linux/netdevice.h' line='3600' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_set_real_num_rx_queues'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netif_tx_stop_all_queues' mangled-name='netif_tx_stop_all_queues' filepath='include/linux/netdevice.h' line='3191' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_tx_stop_all_queues'>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/net/usb/r8152.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='2f162548' size-in-bits='32' id='df785d68'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <class-decl name='ep_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='7eea96b3'/>
+      <class-decl name='usb_tt' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/usb/hcd.h' line='563' column='1' id='7dda8bf2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hub' type-id='25e60cb2' visibility='default' filepath='include/linux/usb/hcd.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='multi' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/hcd.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='think_time' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hcpriv' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/hcd.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/usb/hcd.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='clear_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/hcd.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='clear_work' type-id='ef9025d0' visibility='default' filepath='include/linux/usb/hcd.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='577' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wusb_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='bb4afb30'/>
+      <array-type-def dimensions='1' type-id='15adb516' size-in-bits='1024' id='cfc91983'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b7481dd4' size-in-bits='infinite' id='26179f78'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8bf48c31' size-in-bits='2048' id='a2aad346'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e4a73b37' size-in-bits='1024' id='3e3c9632'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='723114f6' size-in-bits='2048' id='11a8d8e5'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='fc6d031c' size-in-bits='infinite' id='b585dd30'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='usb_driver' size-in-bits='2688' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='1204' column='1' id='1ab3428c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb.h' line='1205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='probe' type-id='a324decb' visibility='default' filepath='include/linux/usb.h' line='1207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='disconnect' type-id='b6566954' visibility='default' filepath='include/linux/usb.h' line='1210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unlocked_ioctl' type-id='52006477' visibility='default' filepath='include/linux/usb.h' line='1212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='suspend' type-id='31eb8cc0' visibility='default' filepath='include/linux/usb.h' line='1215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resume' type-id='46d1c941' visibility='default' filepath='include/linux/usb.h' line='1216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='reset_resume' type-id='46d1c941' visibility='default' filepath='include/linux/usb.h' line='1217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pre_reset' type-id='46d1c941' visibility='default' filepath='include/linux/usb.h' line='1219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='post_reset' type-id='46d1c941' visibility='default' filepath='include/linux/usb.h' line='1220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='id_table' type-id='bc57058f' visibility='default' filepath='include/linux/usb.h' line='1222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dev_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/usb.h' line='1223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dynids' type-id='cb08bae1' visibility='default' filepath='include/linux/usb.h' line='1225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='drvwrap' type-id='33780378' visibility='default' filepath='include/linux/usb.h' line='1226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='no_dynamic_id' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='supports_autosuspend' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='disable_hub_initiated_lpm' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='soft_unbind' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='1232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='1233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='1234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='1235' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_interface' size-in-bits='8448' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='233' column='1' id='5b653fc9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='altsetting' type-id='2ac920d2' visibility='default' filepath='include/linux/usb.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cur_altsetting' type-id='2ac920d2' visibility='default' filepath='include/linux/usb.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_altsetting' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='intf_assoc' type-id='e4a73b37' visibility='default' filepath='include/linux/usb.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='condition' type-id='3cabc9fc' visibility='default' filepath='include/linux/usb.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='sysfs_files_created' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='ep_devs_created' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='unregistering' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='needs_remote_wakeup' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='needs_altsetting0' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='needs_binding' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='resetting_device' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='authorized' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/usb.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='usb_dev' type-id='fa0b179b' visibility='default' filepath='include/linux/usb.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='reset_ws' type-id='ef9025d0' visibility='default' filepath='include/linux/usb.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='265' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_host_interface' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='83' column='1' id='b7481dd4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='6be9d6a7' visibility='default' filepath='include/linux/usb.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='extralen' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='extra' type-id='cf536864' visibility='default' filepath='include/linux/usb.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='endpoint' type-id='15adb516' visibility='default' filepath='include/linux/usb.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='string' type-id='26a90f95' visibility='default' filepath='include/linux/usb.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_interface_descriptor' size-in-bits='72' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='382' column='1' id='6be9d6a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bInterfaceNumber' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bAlternateSetting' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bNumEndpoints' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bInterfaceClass' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bInterfaceSubClass' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='bInterfaceProtocol' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iInterface' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='392' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_host_endpoint' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='68' column='1' id='325f6f30'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='2b1e6e59' visibility='default' filepath='include/linux/usb.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='ss_ep_comp' type-id='1f03d7fe' visibility='default' filepath='include/linux/usb.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='ssp_isoc_ep_comp' type-id='a7a7a133' visibility='default' filepath='include/linux/usb.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='urb_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hcpriv' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ep_dev' type-id='7b923743' visibility='default' filepath='include/linux/usb.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='extra' type-id='cf536864' visibility='default' filepath='include/linux/usb.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='extralen' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='enabled' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='streams' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_endpoint_descriptor' size-in-bits='72' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='400' column='1' id='2b1e6e59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bEndpointAddress' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bmAttributes' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wMaxPacketSize' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bInterval' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='bRefresh' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bSynchAddress' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='412' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ss_ep_comp_descriptor' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='682' column='1' id='1f03d7fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bMaxBurst' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bmAttributes' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wBytesPerInterval' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='688' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ssp_isoc_ep_comp_descriptor' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='670' column='1' id='a7a7a133'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='wReseved' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dwBytesPerInterval' type-id='2f162548' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='674' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_interface_assoc_descriptor' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='776' column='1' id='d1a7f9af'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bFirstInterface' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bInterfaceCount' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bFunctionClass' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bFunctionSubClass' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bFunctionProtocol' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='iFunction' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='785' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb_interface_condition' filepath='include/linux/usb.h' line='97' column='1' id='3cabc9fc'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USB_INTERFACE_UNBOUND' value='0'/>
+        <enumerator name='USB_INTERFACE_BINDING' value='1'/>
+        <enumerator name='USB_INTERFACE_BOUND' value='2'/>
+        <enumerator name='USB_INTERFACE_UNBINDING' value='3'/>
+      </enum-decl>
+      <class-decl name='usb_device_id' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='121' column='1' id='391a9024'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='match_flags' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='idVendor' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='idProduct' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bcdDevice_lo' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bcdDevice_hi' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='bDeviceClass' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='bDeviceSubClass' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bDeviceProtocol' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='bInterfaceClass' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='bInterfaceSubClass' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='bInterfaceProtocol' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bInterfaceNumber' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_info' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='145' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_dynids' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='1111' column='1' id='cb08bae1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/usb.h' line='1112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/usb.h' line='1113' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usbdrv_wrap' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='1133' column='1' id='33780378'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/usb.h' line='1134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='for_devices' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1135' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_device' size-in-bits='12672' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='647' column='1' id='39b596d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='devnum' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='devpath' type-id='ac1fa8c0' visibility='default' filepath='include/linux/usb.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='route' type-id='19c2251e' visibility='default' filepath='include/linux/usb.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='state' type-id='901a91cb' visibility='default' filepath='include/linux/usb.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='speed' type-id='4e532009' visibility='default' filepath='include/linux/usb.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_lanes' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tx_lanes' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tt' type-id='bf95a8f0' visibility='default' filepath='include/linux/usb.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ttport' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='toggle' type-id='0d532ec1' visibility='default' filepath='include/linux/usb.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='parent' type-id='25e60cb2' visibility='default' filepath='include/linux/usb.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bus' type-id='3ab7d422' visibility='default' filepath='include/linux/usb.h' line='662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ep0' type-id='325f6f30' visibility='default' filepath='include/linux/usb.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/usb.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='descriptor' type-id='582de67c' visibility='default' filepath='include/linux/usb.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='bos' type-id='ea484b4b' visibility='default' filepath='include/linux/usb.h' line='668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='config' type-id='2ba3cceb' visibility='default' filepath='include/linux/usb.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='actconfig' type-id='2ba3cceb' visibility='default' filepath='include/linux/usb.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='ep_in' type-id='cfc91983' visibility='default' filepath='include/linux/usb.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='ep_out' type-id='cfc91983' visibility='default' filepath='include/linux/usb.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='rawdescriptors' type-id='9b23c9ad' visibility='default' filepath='include/linux/usb.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='bus_mA' type-id='8efea9e5' visibility='default' filepath='include/linux/usb.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11152'>
+          <var-decl name='portnum' type-id='f9b06939' visibility='default' filepath='include/linux/usb.h' line='678' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11160'>
+          <var-decl name='level' type-id='f9b06939' visibility='default' filepath='include/linux/usb.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11168'>
+          <var-decl name='devaddr' type-id='f9b06939' visibility='default' filepath='include/linux/usb.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='can_submit' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='persist_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='have_langid' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='authorized' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='authenticated' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='wusb' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='lpm_capable' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='usb2_hw_lpm_capable' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='usb2_hw_lpm_besl_capable' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='usb2_hw_lpm_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='usb2_hw_lpm_allowed' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='usb3_lpm_u1_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='usb3_lpm_u2_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='string_langid' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='product' type-id='26a90f95' visibility='default' filepath='include/linux/usb.h' line='698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='manufacturer' type-id='26a90f95' visibility='default' filepath='include/linux/usb.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='serial' type-id='26a90f95' visibility='default' filepath='include/linux/usb.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11456'>
+          <var-decl name='filelist' type-id='72f469ec' visibility='default' filepath='include/linux/usb.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='maxchild' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='704' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11616'>
+          <var-decl name='quirks' type-id='19c2251e' visibility='default' filepath='include/linux/usb.h' line='706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='urbnum' type-id='49178f86' visibility='default' filepath='include/linux/usb.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='active_duration' type-id='7359adad' visibility='default' filepath='include/linux/usb.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='connect_time' type-id='7359adad' visibility='default' filepath='include/linux/usb.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='do_remote_wakeup' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='reset_resume' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='715' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='port_is_suspended' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='716' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='wusb_dev' type-id='ca0a9af6' visibility='default' filepath='include/linux/usb.h' line='718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='slot_id' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12000'>
+          <var-decl name='removable' type-id='b9886e9f' visibility='default' filepath='include/linux/usb.h' line='720' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='l1_params' type-id='07c4f5ca' visibility='default' filepath='include/linux/usb.h' line='721' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='u1_params' type-id='34bd0a0b' visibility='default' filepath='include/linux/usb.h' line='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='u2_params' type-id='34bd0a0b' visibility='default' filepath='include/linux/usb.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='lpm_disable_count' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12384'>
+          <var-decl name='hub_delay' type-id='1dc6a898' visibility='default' filepath='include/linux/usb.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12416'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12480'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12544'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12608'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='731' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb_device_state' filepath='include/uapi/linux/usb/ch9.h' line='1149' column='1' id='901a91cb'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USB_STATE_NOTATTACHED' value='0'/>
+        <enumerator name='USB_STATE_ATTACHED' value='1'/>
+        <enumerator name='USB_STATE_POWERED' value='2'/>
+        <enumerator name='USB_STATE_RECONNECTING' value='3'/>
+        <enumerator name='USB_STATE_UNAUTHENTICATED' value='4'/>
+        <enumerator name='USB_STATE_DEFAULT' value='5'/>
+        <enumerator name='USB_STATE_ADDRESS' value='6'/>
+        <enumerator name='USB_STATE_CONFIGURED' value='7'/>
+        <enumerator name='USB_STATE_SUSPENDED' value='8'/>
+      </enum-decl>
+      <enum-decl name='usb_device_speed' filepath='include/uapi/linux/usb/ch9.h' line='1139' column='1' id='4e532009'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USB_SPEED_UNKNOWN' value='0'/>
+        <enumerator name='USB_SPEED_LOW' value='1'/>
+        <enumerator name='USB_SPEED_FULL' value='2'/>
+        <enumerator name='USB_SPEED_HIGH' value='3'/>
+        <enumerator name='USB_SPEED_WIRELESS' value='4'/>
+        <enumerator name='USB_SPEED_SUPER' value='5'/>
+        <enumerator name='USB_SPEED_SUPER_PLUS' value='6'/>
+      </enum-decl>
+      <class-decl name='usb_bus' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='435' column='1' id='fa4d7704'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='controller' type-id='fa0b179b' visibility='default' filepath='include/linux/usb.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sysdev' type-id='fa0b179b' visibility='default' filepath='include/linux/usb.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='busnum' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bus_name' type-id='80f4b756' visibility='default' filepath='include/linux/usb.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='uses_pio_for_control' type-id='f9b06939' visibility='default' filepath='include/linux/usb.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='otg_port' type-id='f9b06939' visibility='default' filepath='include/linux/usb.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='is_b_host' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='b_hnp_enable' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='no_stop_on_short' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='no_sg_constraint' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='sg_tablesize' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='devnum_next' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='devnum_next_mutex' type-id='925167dc' visibility='default' filepath='include/linux/usb.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='devmap' type-id='d78885c5' visibility='default' filepath='include/linux/usb.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='root_hub' type-id='25e60cb2' visibility='default' filepath='include/linux/usb.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='hs_companion' type-id='3ab7d422' visibility='default' filepath='include/linux/usb.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='bandwidth_allocated' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='bandwidth_int_reqs' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bandwidth_isoc_reqs' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='resuming_ports' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='483' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_devmap' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='428' column='1' id='d78885c5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='devicemap' type-id='f05e8e77' visibility='default' filepath='include/linux/usb.h' line='429' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_device_descriptor' size-in-bits='144' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='289' column='1' id='582de67c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bcdUSB' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bDeviceClass' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bDeviceSubClass' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bDeviceProtocol' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='bMaxPacketSize0' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='idVendor' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='idProduct' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bcdDevice' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='iManufacturer' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='iProduct' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='iSerialNumber' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='bNumConfigurations' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='304' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_host_bos' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='402' column='1' id='40f66efb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='d42add34' visibility='default' filepath='include/linux/usb.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ext_cap' type-id='95e6deec' visibility='default' filepath='include/linux/usb.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ss_cap' type-id='653a1605' visibility='default' filepath='include/linux/usb.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ssp_cap' type-id='9d8ff465' visibility='default' filepath='include/linux/usb.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ss_id' type-id='4373df76' visibility='default' filepath='include/linux/usb.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ptm_cap' type-id='9d94f8e4' visibility='default' filepath='include/linux/usb.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='415' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_bos_descriptor' size-in-bits='40' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='837' column='1' id='9bcc816e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='wTotalLength' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bNumDeviceCaps' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='842' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ext_cap_descriptor' size-in-bits='56' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='888' column='1' id='21767af6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDevCapabilityType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bmAttributes' type-id='2f162548' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='892' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ss_cap_descriptor' size-in-bits='80' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='910' column='1' id='c6cecc55'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDevCapabilityType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='913' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bmAttributes' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wSpeedSupported' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bFunctionalitySupport' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='bU1devExitLat' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bU2DevExitLat' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='923' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ssp_cap_descriptor' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='948' column='1' id='eaa06085'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='949' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='950' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDevCapabilityType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='951' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bReserved' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bmAttributes' type-id='2f162548' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wFunctionalitySupport' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='956' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='wReserved' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='960' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bmSublinkSpeedAttr' type-id='df785d68' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='961' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ss_container_id_descriptor' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='933' column='1' id='4f5dfff0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDevCapabilityType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bReserved' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ContainerID' type-id='9396cabb' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='938' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ptm_cap_descriptor' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='1073' column='1' id='9c52cc4e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='1074' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='1075' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDevCapabilityType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='1076' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_host_config' size-in-bits='5440' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='380' column='1' id='2df0328b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='372ebfa4' visibility='default' filepath='include/linux/usb.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='string' type-id='26a90f95' visibility='default' filepath='include/linux/usb.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='intf_assoc' type-id='3e3c9632' visibility='default' filepath='include/linux/usb.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='interface' type-id='a2aad346' visibility='default' filepath='include/linux/usb.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='intf_cache' type-id='11a8d8e5' visibility='default' filepath='include/linux/usb.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='extra' type-id='cf536864' visibility='default' filepath='include/linux/usb.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='extralen' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='398' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_config_descriptor' size-in-bits='72' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='345' column='1' id='372ebfa4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='wTotalLength' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bNumInterfaces' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bConfigurationValue' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='iConfiguration' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='bmAttributes' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bMaxPower' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='354' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_interface_cache' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='328' column='1' id='dbbc1900'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_altsetting' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/linux/usb.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='altsetting' type-id='26179f78' visibility='default' filepath='include/linux/usb.h' line='334' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb_device_removable' filepath='include/linux/usb.h' line='492' column='1' id='b9886e9f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USB_DEVICE_REMOVABLE_UNKNOWN' value='0'/>
+        <enumerator name='USB_DEVICE_REMOVABLE' value='1'/>
+        <enumerator name='USB_DEVICE_FIXED' value='2'/>
+      </enum-decl>
+      <class-decl name='usb2_lpm_parameters' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='518' column='1' id='07c4f5ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='besl' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='timeout' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='528' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb3_lpm_parameters' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='538' column='1' id='34bd0a0b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mel' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pel' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sel' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='timeout' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='567' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tasklet_struct' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/interrupt.h' line='592' column='1' id='7a7ea727'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='59f1923f' visibility='default' filepath='include/linux/interrupt.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/interrupt.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/interrupt.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='func' type-id='08b16374' visibility='default' filepath='include/linux/interrupt.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='7359adad' visibility='default' filepath='include/linux/interrupt.h' line='598' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='urb' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='1576' column='1' id='b209b4e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/usb.h' line='1578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='unlinked' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hcpriv' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb.h' line='1580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='use_count' type-id='49178f86' visibility='default' filepath='include/linux/usb.h' line='1581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reject' type-id='49178f86' visibility='default' filepath='include/linux/usb.h' line='1582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='urb_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb.h' line='1585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='anchor_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb.h' line='1587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='anchor' type-id='bd300bf3' visibility='default' filepath='include/linux/usb.h' line='1588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev' type-id='25e60cb2' visibility='default' filepath='include/linux/usb.h' line='1589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ep' type-id='15adb516' visibility='default' filepath='include/linux/usb.h' line='1590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='pipe' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='stream_id' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='status' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='transfer_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='transfer_buffer' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb.h' line='1595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='transfer_dma' type-id='cf29c9b3' visibility='default' filepath='include/linux/usb.h' line='1596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='sg' type-id='bf3ef905' visibility='default' filepath='include/linux/usb.h' line='1597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='num_mapped_sgs' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='num_sgs' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='transfer_buffer_length' type-id='19c2251e' visibility='default' filepath='include/linux/usb.h' line='1600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='actual_length' type-id='19c2251e' visibility='default' filepath='include/linux/usb.h' line='1601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='setup_packet' type-id='cf536864' visibility='default' filepath='include/linux/usb.h' line='1602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='setup_dma' type-id='cf29c9b3' visibility='default' filepath='include/linux/usb.h' line='1603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='start_frame' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='number_of_packets' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='interval' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='error_count' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='context' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb.h' line='1609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='complete' type-id='4086973b' visibility='default' filepath='include/linux/usb.h' line='1610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='iso_frame_desc' type-id='b585dd30' visibility='default' filepath='include/linux/usb.h' line='1611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='1613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='1614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='1615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='1616' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_anchor' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='1375' column='1' id='b3bcc053'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='urb_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb.h' line='1376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/usb.h' line='1377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/usb.h' line='1378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='suspend_wakeups' type-id='49178f86' visibility='default' filepath='include/linux/usb.h' line='1379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='poisoned' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1380' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='usb_complete_t' type-id='79dbccfb' filepath='include/linux/usb.h' line='1391' column='1' id='4086973b'/>
+      <class-decl name='usb_iso_packet_descriptor' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='1366' column='1' id='fc6d031c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='offset' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='length' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='actual_length' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='status' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1370' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mii_if_info' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/mii.h' line='18' column='1' id='a9918a4d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='phy_id' type-id='95e97e5e' visibility='default' filepath='include/linux/mii.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='advertising' type-id='95e97e5e' visibility='default' filepath='include/linux/mii.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phy_id_mask' type-id='95e97e5e' visibility='default' filepath='include/linux/mii.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reg_num_mask' type-id='95e97e5e' visibility='default' filepath='include/linux/mii.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='full_duplex' type-id='f0981eeb' visibility='default' filepath='include/linux/mii.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='force_media' type-id='f0981eeb' visibility='default' filepath='include/linux/mii.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='supports_gmii' type-id='f0981eeb' visibility='default' filepath='include/linux/mii.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/linux/mii.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mdio_read' type-id='b54cfa0f' visibility='default' filepath='include/linux/mii.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mdio_write' type-id='af22e097' visibility='default' filepath='include/linux/mii.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='f6ed712a' const='yes' id='ce076883'/>
+      <pointer-type-def type-id='ce076883' size-in-bits='64' id='fea9c20b'/>
+      <qualified-type-def type-id='391a9024' const='yes' id='244e59bf'/>
+      <pointer-type-def type-id='244e59bf' size-in-bits='64' id='bc57058f'/>
+      <pointer-type-def type-id='7eea96b3' size-in-bits='64' id='7b923743'/>
+      <pointer-type-def type-id='4b2a0d9d' size-in-bits='64' id='46d1c941'/>
+      <pointer-type-def type-id='84e4381f' size-in-bits='64' id='a324decb'/>
+      <pointer-type-def type-id='284cd8d6' size-in-bits='64' id='31eb8cc0'/>
+      <pointer-type-def type-id='25c33493' size-in-bits='64' id='52006477'/>
+      <pointer-type-def type-id='a9918a4d' size-in-bits='64' id='f0150b1d'/>
+      <pointer-type-def type-id='7a7ea727' size-in-bits='64' id='59f1923f'/>
+      <pointer-type-def type-id='b209b4e4' size-in-bits='64' id='ab85b8f2'/>
+      <pointer-type-def type-id='b3bcc053' size-in-bits='64' id='bd300bf3'/>
+      <pointer-type-def type-id='9bcc816e' size-in-bits='64' id='d42add34'/>
+      <pointer-type-def type-id='fa4d7704' size-in-bits='64' id='3ab7d422'/>
+      <pointer-type-def type-id='39b596d4' size-in-bits='64' id='25e60cb2'/>
+      <pointer-type-def type-id='1ab3428c' size-in-bits='64' id='46ae908a'/>
+      <pointer-type-def type-id='21767af6' size-in-bits='64' id='95e6deec'/>
+      <pointer-type-def type-id='40f66efb' size-in-bits='64' id='ea484b4b'/>
+      <pointer-type-def type-id='2df0328b' size-in-bits='64' id='2ba3cceb'/>
+      <pointer-type-def type-id='325f6f30' size-in-bits='64' id='15adb516'/>
+      <pointer-type-def type-id='b7481dd4' size-in-bits='64' id='2ac920d2'/>
+      <pointer-type-def type-id='5b653fc9' size-in-bits='64' id='8bf48c31'/>
+      <pointer-type-def type-id='d1a7f9af' size-in-bits='64' id='e4a73b37'/>
+      <pointer-type-def type-id='dbbc1900' size-in-bits='64' id='723114f6'/>
+      <pointer-type-def type-id='9c52cc4e' size-in-bits='64' id='9d94f8e4'/>
+      <pointer-type-def type-id='c6cecc55' size-in-bits='64' id='653a1605'/>
+      <pointer-type-def type-id='4f5dfff0' size-in-bits='64' id='4373df76'/>
+      <pointer-type-def type-id='eaa06085' size-in-bits='64' id='9d8ff465'/>
+      <pointer-type-def type-id='7dda8bf2' size-in-bits='64' id='bf95a8f0'/>
+      <pointer-type-def type-id='58725ef3' size-in-bits='64' id='af22e097'/>
+      <pointer-type-def type-id='5bbf1052' size-in-bits='64' id='08b16374'/>
+      <pointer-type-def type-id='d800b1bf' size-in-bits='64' id='79dbccfb'/>
+      <pointer-type-def type-id='3434ed92' size-in-bits='64' id='b6566954'/>
+      <pointer-type-def type-id='bb4afb30' size-in-bits='64' id='ca0a9af6'/>
+      <function-decl name='usb_deregister' mangled-name='usb_deregister' filepath='include/linux/usb.h' line='1307' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_deregister'>
+        <parameter type-id='46ae908a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_control_msg' mangled-name='usb_control_msg' filepath='include/linux/usb.h' line='1813' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_control_msg'>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_reset_device' mangled-name='usb_reset_device' filepath='include/linux/usb.h' line='766' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_reset_device'>
+        <parameter type-id='25e60cb2'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='alloc_etherdev_mqs' mangled-name='alloc_etherdev_mqs' filepath='include/linux/etherdevice.h' line='49' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_etherdev_mqs'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='68a2d05c'/>
+      </function-decl>
+      <function-decl name='tasklet_init' mangled-name='tasklet_init' filepath='include/linux/interrupt.h' line='673' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tasklet_init'>
+        <parameter type-id='59f1923f'/>
+        <parameter type-id='08b16374'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='register_netdev' mangled-name='register_netdev' filepath='include/linux/netdevice.h' line='4155' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_netdev'>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tasklet_kill' mangled-name='tasklet_kill' filepath='include/linux/interrupt.h' line='671' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tasklet_kill'>
+        <parameter type-id='59f1923f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_set_wakeup_enable' mangled-name='device_set_wakeup_enable' filepath='include/linux/pm_wakeup.h' line='99' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_set_wakeup_enable'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netdev_err' mangled-name='netdev_err' filepath='include/linux/netdevice.h' line='4773' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_err'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netdev_info' mangled-name='netdev_info' filepath='include/linux/netdevice.h' line='4779' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_info'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='unregister_netdev' mangled-name='unregister_netdev' filepath='include/linux/netdevice.h' line='4156' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_netdev'>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cancel_delayed_work_sync' mangled-name='cancel_delayed_work_sync' filepath='include/linux/workqueue.h' line='472' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cancel_delayed_work_sync'>
+        <parameter type-id='1a7ee447'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='usb_kill_urb' mangled-name='usb_kill_urb' filepath='include/linux/usb.h' line='1742' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_kill_urb'>
+        <parameter type-id='ab85b8f2'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_set_mac_address' mangled-name='dev_set_mac_address' filepath='include/linux/netdevice.h' line='3730' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_set_mac_address'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='5c0abad8'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netif_tx_wake_queue' mangled-name='netif_tx_wake_queue' filepath='include/linux/netdevice.h' line='3150' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_tx_wake_queue'>
+        <parameter type-id='35b28c4f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_submit_urb' mangled-name='usb_submit_urb' filepath='include/linux/usb.h' line='1740' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_submit_urb'>
+        <parameter type-id='ab85b8f2'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netif_device_detach' mangled-name='netif_device_detach' filepath='include/linux/netdevice.h' line='3901' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_device_detach'>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ktime_get_mono_fast_ns' mangled-name='ktime_get_mono_fast_ns' filepath='include/linux/timekeeping.h' line='177' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get_mono_fast_ns'>
+        <return type-id='3a47d82b'/>
+      </function-decl>
+      <function-decl name='net_ratelimit' mangled-name='net_ratelimit' filepath='include/linux/net.h' line='251' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='net_ratelimit'>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netdev_warn' mangled-name='netdev_warn' filepath='include/linux/netdevice.h' line='4775' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_warn'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_autopm_get_interface' mangled-name='usb_autopm_get_interface' filepath='include/linux/usb.h' line='785' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_autopm_get_interface'>
+        <parameter type-id='8bf48c31'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_autopm_put_interface' mangled-name='usb_autopm_put_interface' filepath='include/linux/usb.h' line='786' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_autopm_put_interface'>
+        <parameter type-id='8bf48c31'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netif_device_attach' mangled-name='netif_device_attach' filepath='include/linux/netdevice.h' line='3903' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_device_attach'>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='work_busy' mangled-name='work_busy' filepath='include/linux/workqueue.h' line='481' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='work_busy'>
+        <parameter type-id='83c1bde6'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='usb_free_urb' mangled-name='usb_free_urb' filepath='include/linux/usb.h' line='1737' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_free_urb'>
+        <parameter type-id='ab85b8f2'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mutex_trylock' mangled-name='mutex_trylock' filepath='include/linux/mutex.h' line='183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_trylock'>
+        <parameter type-id='e0ea832a'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_add_rx_frag' mangled-name='skb_add_rx_frag' filepath='include/linux/skbuff.h' line='2167' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_add_rx_frag'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_alloc_urb' mangled-name='usb_alloc_urb' filepath='include/linux/usb.h' line='1736' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_alloc_urb'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='ab85b8f2'/>
+      </function-decl>
+      <function-decl name='mii_nway_restart' mangled-name='mii_nway_restart' filepath='include/linux/mii.h' line='34' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mii_nway_restart'>
+        <parameter type-id='f0150b1d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mii_ethtool_get_link_ksettings' mangled-name='mii_ethtool_get_link_ksettings' filepath='include/linux/mii.h' line='36' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mii_ethtool_get_link_ksettings'>
+        <parameter type-id='f0150b1d'/>
+        <parameter type-id='70de91e2'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='register_pm_notifier' mangled-name='register_pm_notifier' filepath='include/linux/suspend.h' line='482' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_pm_notifier'>
+        <parameter type-id='d504f73d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_pm_notifier' mangled-name='unregister_pm_notifier' filepath='include/linux/suspend.h' line='483' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_pm_notifier'>
+        <parameter type-id='d504f73d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_queue_tail' mangled-name='skb_queue_tail' filepath='include/linux/skbuff.h' line='2036' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_queue_tail'>
+        <parameter type-id='03c386c6'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='capable' mangled-name='capable' filepath='include/linux/capability.h' line='210' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='capable'>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='pskb_expand_head' mangled-name='pskb_expand_head' filepath='include/linux/skbuff.h' line='1124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pskb_expand_head'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='csum_ipv6_magic' mangled-name='csum_ipv6_magic' filepath='include/net/ip6_checksum.h' line='34' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='csum_ipv6_magic'>
+        <parameter type-id='fea9c20b'/>
+        <parameter type-id='fea9c20b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='8efea9e5'/>
+      </function-decl>
+      <function-decl name='skb_checksum_help' mangled-name='skb_checksum_help' filepath='include/linux/netdevice.h' line='4395' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_checksum_help'>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netif_schedule_queue' mangled-name='netif_schedule_queue' filepath='include/linux/netdevice.h' line='3114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_schedule_queue'>
+        <parameter type-id='35b28c4f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_autopm_get_interface_async' mangled-name='usb_autopm_get_interface_async' filepath='include/linux/usb.h' line='787' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_autopm_get_interface_async'>
+        <parameter type-id='8bf48c31'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_autopm_put_interface_async' mangled-name='usb_autopm_put_interface_async' filepath='include/linux/usb.h' line='788' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_autopm_put_interface_async'>
+        <parameter type-id='8bf48c31'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_register_driver' mangled-name='usb_register_driver' filepath='include/linux/usb.h' line='1300' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_register_driver'>
+        <parameter type-id='46ae908a'/>
+        <parameter type-id='2730d015'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='4b2a0d9d'>
+        <parameter type-id='8bf48c31'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='84e4381f'>
+        <parameter type-id='8bf48c31'/>
+        <parameter type-id='bc57058f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='284cd8d6'>
+        <parameter type-id='8bf48c31'/>
+        <parameter type-id='08496218'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='25c33493'>
+        <parameter type-id='8bf48c31'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5bbf1052'>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d800b1bf'>
+        <parameter type-id='ab85b8f2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3434ed92'>
+        <parameter type-id='8bf48c31'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='5221b18a' size-in-bits='64' id='5c0abad8'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/net/usb/usbnet.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='320' id='f06fd798'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <class-decl name='usbnet' size-in-bits='5248' is-struct='yes' visibility='default' filepath='include/linux/usb/usbnet.h' line='29' column='1' id='53f069ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='udev' type-id='25e60cb2' visibility='default' filepath='include/linux/usb/usbnet.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='intf' type-id='8bf48c31' visibility='default' filepath='include/linux/usb/usbnet.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver_info' type-id='541453cb' visibility='default' filepath='include/linux/usb/usbnet.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/usbnet.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='driver_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/usbnet.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/usb/usbnet.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='phy_mutex' type-id='925167dc' visibility='default' filepath='include/linux/usb/usbnet.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='suspend_count' type-id='002ac4a6' visibility='default' filepath='include/linux/usb/usbnet.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='776'>
+          <var-decl name='pkt_cnt' type-id='002ac4a6' visibility='default' filepath='include/linux/usb/usbnet.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='pkt_err' type-id='002ac4a6' visibility='default' filepath='include/linux/usb/usbnet.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='rx_qlen' type-id='8efea9e5' visibility='default' filepath='include/linux/usb/usbnet.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='816'>
+          <var-decl name='tx_qlen' type-id='8efea9e5' visibility='default' filepath='include/linux/usb/usbnet.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='can_dma_sg' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/usbnet.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='in' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/usbnet.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='out' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/usbnet.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='status' type-id='15adb516' visibility='default' filepath='include/linux/usb/usbnet.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='maxpacket' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/usbnet.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='delay' type-id='abe41e67' visibility='default' filepath='include/linux/usb/usbnet.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='padding_pkt' type-id='80f4b756' visibility='default' filepath='include/linux/usb/usbnet.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='net' type-id='68a2d05c' visibility='default' filepath='include/linux/usb/usbnet.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='msg_enable' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/usbnet.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='data' type-id='f06fd798' visibility='default' filepath='include/linux/usb/usbnet.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='xid' type-id='19c2251e' visibility='default' filepath='include/linux/usb/usbnet.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='hard_mtu' type-id='19c2251e' visibility='default' filepath='include/linux/usb/usbnet.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='rx_urb_size' type-id='b59d7dce' visibility='default' filepath='include/linux/usb/usbnet.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='mii' type-id='a9918a4d' visibility='default' filepath='include/linux/usb/usbnet.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='rxq' type-id='e61c85d0' visibility='default' filepath='include/linux/usb/usbnet.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='txq' type-id='e61c85d0' visibility='default' filepath='include/linux/usb/usbnet.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='done' type-id='e61c85d0' visibility='default' filepath='include/linux/usb/usbnet.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='rxq_pause' type-id='e61c85d0' visibility='default' filepath='include/linux/usb/usbnet.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='interrupt' type-id='ab85b8f2' visibility='default' filepath='include/linux/usb/usbnet.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='interrupt_count' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/usbnet.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='interrupt_mutex' type-id='925167dc' visibility='default' filepath='include/linux/usb/usbnet.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='deferred' type-id='b3bcc053' visibility='default' filepath='include/linux/usb/usbnet.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='bh' type-id='7a7ea727' visibility='default' filepath='include/linux/usb/usbnet.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='stats64' type-id='90cd86e5' visibility='default' filepath='include/linux/usb/usbnet.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='kevent' type-id='ef9025d0' visibility='default' filepath='include/linux/usb/usbnet.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/usb/usbnet.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/usbnet.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/usbnet.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/usbnet.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/usbnet.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='driver_info' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/usb/usbnet.h' line='101' column='1' id='39a9bc04'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='26a90f95' visibility='default' filepath='include/linux/usb/usbnet.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/usbnet.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bind' type-id='a4de1198' visibility='default' filepath='include/linux/usb/usbnet.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unbind' type-id='e8ad2523' visibility='default' filepath='include/linux/usb/usbnet.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reset' type-id='3b49ed88' visibility='default' filepath='include/linux/usb/usbnet.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='stop' type-id='3b49ed88' visibility='default' filepath='include/linux/usb/usbnet.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='check_connect' type-id='3b49ed88' visibility='default' filepath='include/linux/usb/usbnet.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='manage_power' type-id='984ab777' visibility='default' filepath='include/linux/usb/usbnet.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='status' type-id='1483bbe4' visibility='default' filepath='include/linux/usb/usbnet.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='link_reset' type-id='3b49ed88' visibility='default' filepath='include/linux/usb/usbnet.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rx_fixup' type-id='f98203c0' visibility='default' filepath='include/linux/usb/usbnet.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tx_fixup' type-id='fb29201e' visibility='default' filepath='include/linux/usb/usbnet.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='recover' type-id='20f9ae8b' visibility='default' filepath='include/linux/usb/usbnet.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='early_init' type-id='3b49ed88' visibility='default' filepath='include/linux/usb/usbnet.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='indication' type-id='a426551e' visibility='default' filepath='include/linux/usb/usbnet.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_rx_mode' type-id='20f9ae8b' visibility='default' filepath='include/linux/usb/usbnet.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='in' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/usbnet.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='out' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/usbnet.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='data' type-id='7359adad' visibility='default' filepath='include/linux/usb/usbnet.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/usbnet.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/usbnet.h' line='184' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='39a9bc04' const='yes' id='6544a7c3'/>
+      <pointer-type-def type-id='6544a7c3' size-in-bits='64' id='541453cb'/>
+      <pointer-type-def type-id='5e0713ae' size-in-bits='64' id='3b49ed88'/>
+      <pointer-type-def type-id='2d770943' size-in-bits='64' id='984ab777'/>
+      <pointer-type-def type-id='6b532d3e' size-in-bits='64' id='f98203c0'/>
+      <pointer-type-def type-id='53e8ab6e' size-in-bits='64' id='a4de1198'/>
+      <pointer-type-def type-id='ec664304' size-in-bits='64' id='fb29201e'/>
+      <pointer-type-def type-id='53f069ac' size-in-bits='64' id='12884b9a'/>
+      <pointer-type-def type-id='a2c297ff' size-in-bits='64' id='20f9ae8b'/>
+      <pointer-type-def type-id='b47ad2f2' size-in-bits='64' id='1483bbe4'/>
+      <pointer-type-def type-id='1c800c47' size-in-bits='64' id='e8ad2523'/>
+      <pointer-type-def type-id='6a162484' size-in-bits='64' id='a426551e'/>
+      <function-decl name='usbnet_probe' mangled-name='usbnet_probe' filepath='drivers/net/usb/usbnet.c' line='1654' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_probe'>
+        <parameter type-id='8bf48c31' name='udev' filepath='drivers/net/usb/usbnet.c' line='1654' column='1'/>
+        <parameter type-id='bc57058f' name='prod' filepath='drivers/net/usb/usbnet.c' line='1654' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_get_endpoints' mangled-name='usbnet_get_endpoints' filepath='drivers/net/usb/usbnet.c' line='81' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_get_endpoints'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='81' column='1'/>
+        <parameter type-id='8bf48c31' name='intf' filepath='drivers/net/usb/usbnet.c' line='81' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_string' mangled-name='usb_string' filepath='include/linux/usb.h' line='1841' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_string'>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_skb_return' mangled-name='usbnet_skb_return' filepath='drivers/net/usb/usbnet.c' line='308' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_skb_return'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='308' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='drivers/net/usb/usbnet.c' line='308' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usbnet_update_max_qlen' mangled-name='usbnet_update_max_qlen' filepath='drivers/net/usb/usbnet.c' line='343' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_update_max_qlen'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='343' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usbnet_change_mtu' mangled-name='usbnet_change_mtu' filepath='drivers/net/usb/usbnet.c' line='378' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_change_mtu'>
+        <parameter type-id='68a2d05c' name='net' filepath='drivers/net/usb/usbnet.c' line='378' column='1'/>
+        <parameter type-id='95e97e5e' name='new_mtu' filepath='drivers/net/usb/usbnet.c' line='378' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_unlink_rx_urbs' mangled-name='usbnet_unlink_rx_urbs' filepath='drivers/net/usb/usbnet.c' line='752' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_unlink_rx_urbs'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='752' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usbnet_stop' mangled-name='usbnet_stop' filepath='drivers/net/usb/usbnet.c' line='799' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_stop'>
+        <parameter type-id='68a2d05c' name='net' filepath='drivers/net/usb/usbnet.c' line='799' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_open' mangled-name='usbnet_open' filepath='drivers/net/usb/usbnet.c' line='861' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_open'>
+        <parameter type-id='68a2d05c' name='net' filepath='drivers/net/usb/usbnet.c' line='861' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_get_link_ksettings' mangled-name='usbnet_get_link_ksettings' filepath='drivers/net/usb/usbnet.c' line='950' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_get_link_ksettings'>
+        <parameter type-id='68a2d05c' name='net' filepath='drivers/net/usb/usbnet.c' line='950' column='1'/>
+        <parameter type-id='70de91e2' name='cmd' filepath='drivers/net/usb/usbnet.c' line='951' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_set_link_ksettings' mangled-name='usbnet_set_link_ksettings' filepath='drivers/net/usb/usbnet.c' line='964' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_set_link_ksettings'>
+        <parameter type-id='68a2d05c' name='net' filepath='drivers/net/usb/usbnet.c' line='964' column='1'/>
+        <parameter type-id='b2c34f11' name='cmd' filepath='drivers/net/usb/usbnet.c' line='965' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_get_stats64' mangled-name='usbnet_get_stats64' filepath='drivers/net/usb/usbnet.c' line='986' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_get_stats64'>
+        <parameter type-id='68a2d05c' name='net' filepath='drivers/net/usb/usbnet.c' line='986' column='1'/>
+        <parameter type-id='bd3860fe' name='stats' filepath='drivers/net/usb/usbnet.c' line='986' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usbnet_get_link' mangled-name='usbnet_get_link' filepath='drivers/net/usb/usbnet.c' line='1017' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_get_link'>
+        <parameter type-id='68a2d05c' name='net' filepath='drivers/net/usb/usbnet.c' line='1017' column='1'/>
+        <return type-id='19c2251e'/>
+      </function-decl>
+      <function-decl name='ethtool_op_get_link' mangled-name='ethtool_op_get_link' filepath='include/linux/ethtool.h' line='87' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ethtool_op_get_link'>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='usbnet_nway_reset' mangled-name='usbnet_nway_reset' filepath='drivers/net/usb/usbnet.c' line='1034' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_nway_reset'>
+        <parameter type-id='68a2d05c' name='net' filepath='drivers/net/usb/usbnet.c' line='1034' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_get_drvinfo' mangled-name='usbnet_get_drvinfo' filepath='drivers/net/usb/usbnet.c' line='1045' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_get_drvinfo'>
+        <parameter type-id='68a2d05c' name='net' filepath='drivers/net/usb/usbnet.c' line='1045' column='1'/>
+        <parameter type-id='8c4c4029' name='info' filepath='drivers/net/usb/usbnet.c' line='1045' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usbnet_get_msglevel' mangled-name='usbnet_get_msglevel' filepath='drivers/net/usb/usbnet.c' line='1057' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_get_msglevel'>
+        <parameter type-id='68a2d05c' name='net' filepath='drivers/net/usb/usbnet.c' line='1057' column='1'/>
+        <return type-id='19c2251e'/>
+      </function-decl>
+      <function-decl name='usbnet_set_msglevel' mangled-name='usbnet_set_msglevel' filepath='drivers/net/usb/usbnet.c' line='1065' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_set_msglevel'>
+        <parameter type-id='68a2d05c' name='net' filepath='drivers/net/usb/usbnet.c' line='1065' column='1'/>
+        <parameter type-id='19c2251e' name='level' filepath='drivers/net/usb/usbnet.c' line='1065' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usbnet_tx_timeout' mangled-name='usbnet_tx_timeout' filepath='drivers/net/usb/usbnet.c' line='1296' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_tx_timeout'>
+        <parameter type-id='68a2d05c' name='net' filepath='drivers/net/usb/usbnet.c' line='1296' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usbnet_start_xmit' mangled-name='usbnet_start_xmit' filepath='drivers/net/usb/usbnet.c' line='1346' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_start_xmit'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='drivers/net/usb/usbnet.c' line='1346' column='1'/>
+        <parameter type-id='68a2d05c' name='net' filepath='drivers/net/usb/usbnet.c' line='1347' column='1'/>
+        <return type-id='6849a88c'/>
+      </function-decl>
+      <function-decl name='usbnet_disconnect' mangled-name='usbnet_disconnect' filepath='drivers/net/usb/usbnet.c' line='1592' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_disconnect'>
+        <parameter type-id='8bf48c31' name='intf' filepath='drivers/net/usb/usbnet.c' line='1592' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usbnet_link_change' mangled-name='usbnet_link_change' filepath='drivers/net/usb/usbnet.c' line='1965' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_link_change'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='1965' column='1'/>
+        <parameter type-id='b50a4934' name='link' filepath='drivers/net/usb/usbnet.c' line='1965' column='1'/>
+        <parameter type-id='b50a4934' name='need_reset' filepath='drivers/net/usb/usbnet.c' line='1965' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usbnet_suspend' mangled-name='usbnet_suspend' filepath='drivers/net/usb/usbnet.c' line='1855' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_suspend'>
+        <parameter type-id='8bf48c31' name='intf' filepath='drivers/net/usb/usbnet.c' line='1855' column='1'/>
+        <parameter type-id='08496218' name='message' filepath='drivers/net/usb/usbnet.c' line='1855' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_resume' mangled-name='usbnet_resume' filepath='drivers/net/usb/usbnet.c' line='1888' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_resume'>
+        <parameter type-id='8bf48c31' name='intf' filepath='drivers/net/usb/usbnet.c' line='1888' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_read_cmd' mangled-name='usbnet_read_cmd' filepath='drivers/net/usb/usbnet.c' line='2048' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_read_cmd'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='2048' column='1'/>
+        <parameter type-id='f9b06939' name='cmd' filepath='drivers/net/usb/usbnet.c' line='2048' column='1'/>
+        <parameter type-id='f9b06939' name='reqtype' filepath='drivers/net/usb/usbnet.c' line='2048' column='1'/>
+        <parameter type-id='1dc6a898' name='value' filepath='drivers/net/usb/usbnet.c' line='2049' column='1'/>
+        <parameter type-id='1dc6a898' name='index' filepath='drivers/net/usb/usbnet.c' line='2049' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/net/usb/usbnet.c' line='2049' column='1'/>
+        <parameter type-id='1dc6a898' name='size' filepath='drivers/net/usb/usbnet.c' line='2049' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_write_cmd' mangled-name='usbnet_write_cmd' filepath='drivers/net/usb/usbnet.c' line='2066' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_write_cmd'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='2066' column='1'/>
+        <parameter type-id='f9b06939' name='cmd' filepath='drivers/net/usb/usbnet.c' line='2066' column='1'/>
+        <parameter type-id='f9b06939' name='reqtype' filepath='drivers/net/usb/usbnet.c' line='2066' column='1'/>
+        <parameter type-id='1dc6a898' name='value' filepath='drivers/net/usb/usbnet.c' line='2067' column='1'/>
+        <parameter type-id='1dc6a898' name='index' filepath='drivers/net/usb/usbnet.c' line='2067' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/net/usb/usbnet.c' line='2067' column='1'/>
+        <parameter type-id='1dc6a898' name='size' filepath='drivers/net/usb/usbnet.c' line='2067' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_read_cmd_nopm' mangled-name='usbnet_read_cmd_nopm' filepath='drivers/net/usb/usbnet.c' line='2084' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_read_cmd_nopm'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='2084' column='1'/>
+        <parameter type-id='f9b06939' name='cmd' filepath='drivers/net/usb/usbnet.c' line='2084' column='1'/>
+        <parameter type-id='f9b06939' name='reqtype' filepath='drivers/net/usb/usbnet.c' line='2084' column='1'/>
+        <parameter type-id='1dc6a898' name='value' filepath='drivers/net/usb/usbnet.c' line='2085' column='1'/>
+        <parameter type-id='1dc6a898' name='index' filepath='drivers/net/usb/usbnet.c' line='2085' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/net/usb/usbnet.c' line='2085' column='1'/>
+        <parameter type-id='1dc6a898' name='size' filepath='drivers/net/usb/usbnet.c' line='2085' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_write_cmd_nopm' mangled-name='usbnet_write_cmd_nopm' filepath='drivers/net/usb/usbnet.c' line='2096' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_write_cmd_nopm'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='2096' column='1'/>
+        <parameter type-id='f9b06939' name='cmd' filepath='drivers/net/usb/usbnet.c' line='2096' column='1'/>
+        <parameter type-id='f9b06939' name='reqtype' filepath='drivers/net/usb/usbnet.c' line='2096' column='1'/>
+        <parameter type-id='1dc6a898' name='value' filepath='drivers/net/usb/usbnet.c' line='2097' column='1'/>
+        <parameter type-id='1dc6a898' name='index' filepath='drivers/net/usb/usbnet.c' line='2097' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/net/usb/usbnet.c' line='2097' column='1'/>
+        <parameter type-id='1dc6a898' name='size' filepath='drivers/net/usb/usbnet.c' line='2098' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_write_cmd_async' mangled-name='usbnet_write_cmd_async' filepath='drivers/net/usb/usbnet.c' line='2122' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_write_cmd_async'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='2122' column='1'/>
+        <parameter type-id='f9b06939' name='cmd' filepath='drivers/net/usb/usbnet.c' line='2122' column='1'/>
+        <parameter type-id='f9b06939' name='reqtype' filepath='drivers/net/usb/usbnet.c' line='2122' column='1'/>
+        <parameter type-id='1dc6a898' name='value' filepath='drivers/net/usb/usbnet.c' line='2123' column='1'/>
+        <parameter type-id='1dc6a898' name='index' filepath='drivers/net/usb/usbnet.c' line='2123' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/net/usb/usbnet.c' line='2123' column='1'/>
+        <parameter type-id='1dc6a898' name='size' filepath='drivers/net/usb/usbnet.c' line='2123' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='5e0713ae'>
+        <parameter type-id='12884b9a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2d770943'>
+        <parameter type-id='12884b9a'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6b532d3e'>
+        <parameter type-id='12884b9a'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='53e8ab6e'>
+        <parameter type-id='12884b9a' name='dev'/>
+        <parameter type-id='8bf48c31' name='intf'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ec664304'>
+        <parameter type-id='12884b9a'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='0fbf3cfd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2c297ff'>
+        <parameter type-id='12884b9a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b47ad2f2'>
+        <parameter type-id='12884b9a'/>
+        <parameter type-id='ab85b8f2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1c800c47'>
+        <parameter type-id='12884b9a'/>
+        <parameter type-id='8bf48c31'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6a162484'>
+        <parameter type-id='12884b9a'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/net/veth.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='384' id='72bb5580'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8c2bf2b2' size-in-bits='infinite' id='b50399da'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='00ee50b8' size-in-bits='128' id='f57e9a44'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='bpf_offload_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='22474385'/>
+      <class-decl name='bpf_sk_storage' is-struct='yes' visibility='default' is-declaration-only='yes' id='36313ee4'/>
+      <class-decl name='lwtunnel_state' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/lwtunnel.h' line='25' column='1' id='44644afc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='d315442e' visibility='default' filepath='include/net/lwtunnel.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/net/lwtunnel.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='headroom' type-id='d315442e' visibility='default' filepath='include/net/lwtunnel.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='refcnt' type-id='49178f86' visibility='default' filepath='include/net/lwtunnel.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='orig_output' type-id='0023218e' visibility='default' filepath='include/net/lwtunnel.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='orig_input' type-id='d2e00785' visibility='default' filepath='include/net/lwtunnel.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/lwtunnel.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='data' type-id='167619f6' visibility='default' filepath='include/net/lwtunnel.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='net_rate_estimator' is-struct='yes' visibility='default' is-declaration-only='yes' id='51dbeb7e'/>
+      <class-decl name='nexthop' is-struct='yes' visibility='default' is-declaration-only='yes' id='b754514f'/>
+      <class-decl name='prefix_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='a7502152'/>
+      <class-decl name='qdisc_walker' is-struct='yes' visibility='default' is-declaration-only='yes' id='7f36a7f0'/>
+      <class-decl name='raw_hashinfo' size-in-bits='16448' is-struct='yes' visibility='default' filepath='include/net/raw.h' line='35' column='1' id='51ee3086'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/raw.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ht' type-id='a7c26c7b' visibility='default' filepath='include/net/raw.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sock_reuseport' is-struct='yes' visibility='default' is-declaration-only='yes' id='ff751355'/>
+      <class-decl name='tcf_walker' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/pkt_cls.h' line='16' column='1' id='9a9d8c1d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stop' type-id='95e97e5e' visibility='default' filepath='include/net/pkt_cls.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='skip' type-id='95e97e5e' visibility='default' filepath='include/net/pkt_cls.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/net/pkt_cls.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nonempty' type-id='b50a4934' visibility='default' filepath='include/net/pkt_cls.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cookie' type-id='7359adad' visibility='default' filepath='include/net/pkt_cls.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fn' type-id='1583af75' visibility='default' filepath='include/net/pkt_cls.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='udp_table' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/udp.h' line='71' column='1' id='9a516b13'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='9cc41107' visibility='default' filepath='include/net/udp.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hash2' type-id='9cc41107' visibility='default' filepath='include/net/udp.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/net/udp.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='log' type-id='f0981eeb' visibility='default' filepath='include/net/udp.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uncached_list' size-in-bits='192' is-struct='yes' visibility='default' filepath='net/ipv4/route.c' line='1502' column='1' id='6b1203e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='net/ipv4/route.c' line='1503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='net/ipv4/route.c' line='1504' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='979d5bbb' size-in-bits='infinite' id='7be723ef'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b9535066' size-in-bits='1536' id='91671be8'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='8192' id='64f4baeb'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='416' id='77ba73f2'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='aa79f31a' size-in-bits='960' id='1d16a23c'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0f8b1896' size-in-bits='infinite' id='7c792e5e'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f588f6e0' size-in-bits='infinite' id='4967766c'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='544' id='46fc18d9'>
+        <subrange length='17' type-id='7ff19f0f' id='888ad0ed'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='64' id='d2f7b56a'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='ae4d1761' size-in-bits='128' id='eb61ae4b'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a30f25c8' size-in-bits='3072' id='41cc9498'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <class-decl name='nd_opt_hdr' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/net/ndisc.h' line='105' column='1' id='c966252c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nd_opt_type' type-id='8f048e17' visibility='default' filepath='include/net/ndisc.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='nd_opt_len' type-id='8f048e17' visibility='default' filepath='include/net/ndisc.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ndisc_options' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/net/ndisc.h' line='111' column='1' id='5919d6b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nd_opt_array' type-id='1d16a23c' visibility='default' filepath='include/net/ndisc.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nd_opts_ri' type-id='aa79f31a' visibility='default' filepath='include/net/ndisc.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='nd_opts_ri_end' type-id='aa79f31a' visibility='default' filepath='include/net/ndisc.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='nd_useropts' type-id='aa79f31a' visibility='default' filepath='include/net/ndisc.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nd_useropts_end' type-id='aa79f31a' visibility='default' filepath='include/net/ndisc.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neighbour' size-in-bits='2944' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='134' column='1' id='da0e76a1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='3c330067' visibility='default' filepath='include/net/neighbour.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tbl' type-id='6bbe39a7' visibility='default' filepath='include/net/neighbour.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parms' type-id='affe0fe3' visibility='default' filepath='include/net/neighbour.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='confirmed' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='updated' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/neighbour.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/neighbour.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='arp_queue_len_bytes' type-id='f0981eeb' visibility='default' filepath='include/net/neighbour.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='arp_queue' type-id='e61c85d0' visibility='default' filepath='include/net/neighbour.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/net/neighbour.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='used' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='probes' type-id='49178f86' visibility='default' filepath='include/net/neighbour.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/net/neighbour.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1192'>
+          <var-decl name='nud_state' type-id='8f048e17' visibility='default' filepath='include/net/neighbour.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1200'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/net/neighbour.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1208'>
+          <var-decl name='dead' type-id='8f048e17' visibility='default' filepath='include/net/neighbour.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='protocol' type-id='f9b06939' visibility='default' filepath='include/net/neighbour.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='ha_lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/neighbour.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ha' type-id='fc872715' visibility='default' filepath='include/net/neighbour.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='hh' type-id='0db936dc' visibility='default' filepath='include/net/neighbour.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='output' type-id='a57789c2' visibility='default' filepath='include/net/neighbour.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='ops' type-id='66fa472a' visibility='default' filepath='include/net/neighbour.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='gc_list' type-id='72f469ec' visibility='default' filepath='include/net/neighbour.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/neighbour.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/net/neighbour.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='primary_key' type-id='29c3368c' visibility='default' filepath='include/net/neighbour.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neigh_table' size-in-bits='4416' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='194' column='1' id='aebe1cff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='entry_size' type-id='f0981eeb' visibility='default' filepath='include/net/neighbour.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key_len' type-id='f0981eeb' visibility='default' filepath='include/net/neighbour.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='protocol' type-id='84a5c3d4' visibility='default' filepath='include/net/neighbour.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hash' type-id='f60e04ee' visibility='default' filepath='include/net/neighbour.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='key_eq' type-id='8fbb31d1' visibility='default' filepath='include/net/neighbour.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='constructor' type-id='8eff9c66' visibility='default' filepath='include/net/neighbour.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pconstructor' type-id='9264da33' visibility='default' filepath='include/net/neighbour.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pdestructor' type-id='5c4c6144' visibility='default' filepath='include/net/neighbour.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='proxy_redo' type-id='0ef96694' visibility='default' filepath='include/net/neighbour.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='is_multicast' type-id='b9b212f5' visibility='default' filepath='include/net/neighbour.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='allow_add' type-id='6ade418d' visibility='default' filepath='include/net/neighbour.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='id' type-id='26a90f95' visibility='default' filepath='include/net/neighbour.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='parms' type-id='1429eee5' visibility='default' filepath='include/net/neighbour.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='parms_list' type-id='72f469ec' visibility='default' filepath='include/net/neighbour.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='gc_interval' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='gc_thresh1' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='gc_thresh2' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='gc_thresh3' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='last_flush' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='gc_work' type-id='5ad6e0ef' visibility='default' filepath='include/net/neighbour.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='proxy_timer' type-id='abe41e67' visibility='default' filepath='include/net/neighbour.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='proxy_queue' type-id='e61c85d0' visibility='default' filepath='include/net/neighbour.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='entries' type-id='49178f86' visibility='default' filepath='include/net/neighbour.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3936'>
+          <var-decl name='gc_entries' type-id='49178f86' visibility='default' filepath='include/net/neighbour.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='gc_list' type-id='72f469ec' visibility='default' filepath='include/net/neighbour.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/neighbour.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='last_rand' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='stats' type-id='3a0389d8' visibility='default' filepath='include/net/neighbour.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='nht' type-id='0d378d14' visibility='default' filepath='include/net/neighbour.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='phash_buckets' type-id='62c51a1d' visibility='default' filepath='include/net/neighbour.h' line='228' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pneigh_entry' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='171' column='1' id='fff56995'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='12f283a5' visibility='default' filepath='include/net/neighbour.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='net' type-id='c9df1e6c' visibility='default' filepath='include/net/neighbour.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/net/neighbour.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/neighbour.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='protocol' type-id='f9b06939' visibility='default' filepath='include/net/neighbour.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='key' type-id='29c3368c' visibility='default' filepath='include/net/neighbour.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sock' size-in-bits='6656' is-struct='yes' visibility='default' filepath='include/net/sock.h' line='325' column='1' id='a240f41e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__sk_common' type-id='5999c5f7' visibility='default' filepath='include/net/sock.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sk_lock' type-id='40d8a3da' visibility='default' filepath='include/net/sock.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='sk_drops' type-id='49178f86' visibility='default' filepath='include/net/sock.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='sk_rcvlowat' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='sk_error_queue' type-id='e61c85d0' visibility='default' filepath='include/net/sock.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='sk_rx_skb_cache' type-id='0fbf3cfd' visibility='default' filepath='include/net/sock.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='sk_receive_queue' type-id='e61c85d0' visibility='default' filepath='include/net/sock.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='sk_backlog' type-id='6a96185e' visibility='default' filepath='include/net/sock.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sk_forward_alloc' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='sk_ll_usec' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sk_napi_id' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='sk_rcvbuf' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='sk_filter' type-id='90956edc' visibility='default' filepath='include/net/sock.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='' type-id='a29f8367' visibility='default' filepath='include/net/sock.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='sk_policy' type-id='eb61ae4b' visibility='default' filepath='include/net/sock.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='sk_rx_dst' type-id='141b6427' visibility='default' filepath='include/net/sock.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='sk_dst_cache' type-id='141b6427' visibility='default' filepath='include/net/sock.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='sk_omem_alloc' type-id='49178f86' visibility='default' filepath='include/net/sock.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='sk_sndbuf' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='sk_wmem_queued' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='sk_wmem_alloc' type-id='64615833' visibility='default' filepath='include/net/sock.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='sk_tsq_flags' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='' type-id='fc714247' visibility='default' filepath='include/net/sock.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='sk_tx_skb_cache' type-id='0fbf3cfd' visibility='default' filepath='include/net/sock.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='sk_write_queue' type-id='e61c85d0' visibility='default' filepath='include/net/sock.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='sk_peek_off' type-id='3158a266' visibility='default' filepath='include/net/sock.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='sk_write_pending' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='sk_dst_pending_confirm' type-id='3f1a6b60' visibility='default' filepath='include/net/sock.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3168'>
+          <var-decl name='sk_pacing_status' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='sk_sndtimeo' type-id='bd54fe1a' visibility='default' filepath='include/net/sock.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='sk_timer' type-id='abe41e67' visibility='default' filepath='include/net/sock.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='sk_priority' type-id='3f1a6b60' visibility='default' filepath='include/net/sock.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3744'>
+          <var-decl name='sk_mark' type-id='3f1a6b60' visibility='default' filepath='include/net/sock.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='sk_pacing_rate' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='sk_max_pacing_rate' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='sk_frag' type-id='06c0432f' visibility='default' filepath='include/net/sock.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='sk_route_caps' type-id='f9f4b16f' visibility='default' filepath='include/net/sock.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='sk_route_nocaps' type-id='f9f4b16f' visibility='default' filepath='include/net/sock.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='sk_route_forced_caps' type-id='f9f4b16f' visibility='default' filepath='include/net/sock.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='sk_gso_type' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4256'>
+          <var-decl name='sk_gso_max_size' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='sk_allocation' type-id='3eb7c31c' visibility='default' filepath='include/net/sock.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4320'>
+          <var-decl name='sk_txhash' type-id='3f1a6b60' visibility='default' filepath='include/net/sock.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='__sk_flags_offset' type-id='c764d637' visibility='default' filepath='include/net/sock.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='sk_padding' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='sk_kern_sock' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='sk_no_check_tx' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='sk_no_check_rx' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='sk_userlocks' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sk_protocol' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='sk_type' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4384'>
+          <var-decl name='sk_gso_max_segs' type-id='1dc6a898' visibility='default' filepath='include/net/sock.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4400'>
+          <var-decl name='sk_pacing_shift' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='sk_lingertime' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='sk_prot_creator' type-id='d2524501' visibility='default' filepath='include/net/sock.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='sk_callback_lock' type-id='ac16795b' visibility='default' filepath='include/net/sock.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='sk_err' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4640'>
+          <var-decl name='sk_err_soft' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='sk_ack_backlog' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4704'>
+          <var-decl name='sk_max_ack_backlog' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='sk_uid' type-id='d80b72e6' visibility='default' filepath='include/net/sock.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='sk_peer_pid' type-id='b94e5398' visibility='default' filepath='include/net/sock.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='sk_peer_cred' type-id='bc33861a' visibility='default' filepath='include/net/sock.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='sk_rcvtimeo' type-id='bd54fe1a' visibility='default' filepath='include/net/sock.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='sk_stamp' type-id='fbc017ef' visibility='default' filepath='include/net/sock.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='sk_tsflags' type-id='1dc6a898' visibility='default' filepath='include/net/sock.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5072'>
+          <var-decl name='sk_shutdown' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5088'>
+          <var-decl name='sk_tskey' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='sk_zckey' type-id='49178f86' visibility='default' filepath='include/net/sock.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5152'>
+          <var-decl name='sk_clockid' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='sk_txtime_deadline_mode' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='sk_txtime_report_errors' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5160'>
+          <var-decl name='sk_txtime_unused' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='sk_socket' type-id='13103032' visibility='default' filepath='include/net/sock.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='sk_user_data' type-id='eaa32e2f' visibility='default' filepath='include/net/sock.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='sk_security' type-id='eaa32e2f' visibility='default' filepath='include/net/sock.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='sk_cgrp_data' type-id='8544f103' visibility='default' filepath='include/net/sock.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='sk_memcg' type-id='223696fc' visibility='default' filepath='include/net/sock.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='sk_state_change' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='sk_data_ready' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='sk_write_space' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='sk_error_report' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='sk_backlog_rcv' type-id='a0f5247f' visibility='default' filepath='include/net/sock.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='sk_destruct' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='sk_reuseport_cb' type-id='1d22b7e5' visibility='default' filepath='include/net/sock.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='sk_bpf_storage' type-id='f3f553e2' visibility='default' filepath='include/net/sock.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='sk_rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sock.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='android_kabi_reserved5' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='android_kabi_reserved6' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='android_kabi_reserved7' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='android_kabi_reserved8' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='523' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sock_common' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/net/sock.h' line='148' column='1' id='5999c5f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='f126afef' visibility='default' filepath='include/net/sock.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='5d6a1e78' visibility='default' filepath='include/net/sock.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='' type-id='d1c6b54d' visibility='default' filepath='include/net/sock.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='skc_family' type-id='8efea9e5' visibility='default' filepath='include/net/sock.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='skc_state' type-id='75a392dc' visibility='default' filepath='include/net/sock.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='skc_reuse' type-id='002ac4a6' visibility='default' filepath='include/net/sock.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='skc_reuseport' type-id='002ac4a6' visibility='default' filepath='include/net/sock.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='skc_ipv6only' type-id='002ac4a6' visibility='default' filepath='include/net/sock.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='skc_net_refcnt' type-id='002ac4a6' visibility='default' filepath='include/net/sock.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='skc_bound_dev_if' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='9e20c58f' visibility='default' filepath='include/net/sock.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='skc_prot' type-id='d2524501' visibility='default' filepath='include/net/sock.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='skc_net' type-id='c9df1e6c' visibility='default' filepath='include/net/sock.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='skc_v6_daddr' type-id='f6ed712a' visibility='default' filepath='include/net/sock.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='skc_v6_rcv_saddr' type-id='f6ed712a' visibility='default' filepath='include/net/sock.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='skc_cookie' type-id='28ee064c' visibility='default' filepath='include/net/sock.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='' type-id='56935795' visibility='default' filepath='include/net/sock.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='skc_dontcopy_begin' type-id='1fdc7fa6' visibility='default' filepath='include/net/sock.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='' type-id='38f5bda8' visibility='default' filepath='include/net/sock.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='skc_tx_queue_mapping' type-id='8efea9e5' visibility='default' filepath='include/net/sock.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='skc_rx_queue_mapping' type-id='8efea9e5' visibility='default' filepath='include/net/sock.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='' type-id='9e121764' visibility='default' filepath='include/net/sock.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='skc_refcnt' type-id='64615833' visibility='default' filepath='include/net/sock.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='skc_dontcopy_end' type-id='1fdc7fa6' visibility='default' filepath='include/net/sock.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='' type-id='5547e6b1' visibility='default' filepath='include/net/sock.h' line='227' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='152' column='1' id='f126afef'>
+        <data-member access='private'>
+          <var-decl name='skc_addrpair' type-id='d17a6eed' visibility='default' filepath='include/net/sock.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='7eabe5fc' visibility='default' filepath='include/net/sock.h' line='154' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='__addrpair' type-id='d3130597' filepath='include/net/sock.h' line='116' column='1' id='d17a6eed'/>
+      <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='154' column='1' id='7eabe5fc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='skc_daddr' type-id='78a133c2' visibility='default' filepath='include/net/sock.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='skc_rcv_saddr' type-id='78a133c2' visibility='default' filepath='include/net/sock.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='159' column='1' id='5d6a1e78'>
+        <data-member access='private'>
+          <var-decl name='skc_hash' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='skc_u16hashes' type-id='810b4a17' visibility='default' filepath='include/net/sock.h' line='161' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='164' column='1' id='d1c6b54d'>
+        <data-member access='private'>
+          <var-decl name='skc_portpair' type-id='e7c2a649' visibility='default' filepath='include/net/sock.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='a414c3c0' visibility='default' filepath='include/net/sock.h' line='166' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='__portpair' type-id='3f1a6b60' filepath='include/net/sock.h' line='115' column='1' id='e7c2a649'/>
+      <class-decl name='__anonymous_struct__2' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='166' column='1' id='a414c3c0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='skc_dport' type-id='84a5c3d4' visibility='default' filepath='include/net/sock.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='skc_num' type-id='d315442e' visibility='default' filepath='include/net/sock.h' line='168' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='179' column='1' id='9e20c58f'>
+        <data-member access='private'>
+          <var-decl name='skc_bind_node' type-id='03a4a074' visibility='default' filepath='include/net/sock.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='skc_portaddr_node' type-id='03a4a074' visibility='default' filepath='include/net/sock.h' line='181' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='proto' size-in-bits='3392' is-struct='yes' visibility='default' filepath='include/net/sock.h' line='1086' column='1' id='7203ee09'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='close' type-id='09f3a86b' visibility='default' filepath='include/net/sock.h' line='1087' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pre_connect' type-id='c25ed103' visibility='default' filepath='include/net/sock.h' line='1089' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='connect' type-id='c25ed103' visibility='default' filepath='include/net/sock.h' line='1092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='disconnect' type-id='95208a5e' visibility='default' filepath='include/net/sock.h' line='1095' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='accept' type-id='67adf9a9' visibility='default' filepath='include/net/sock.h' line='1097' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ioctl' type-id='08113f0a' visibility='default' filepath='include/net/sock.h' line='1100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='init' type-id='55530c47' visibility='default' filepath='include/net/sock.h' line='1102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='destroy' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='shutdown' type-id='e937debf' visibility='default' filepath='include/net/sock.h' line='1104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='setsockopt' type-id='bc1bf185' visibility='default' filepath='include/net/sock.h' line='1105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='getsockopt' type-id='e0fadd76' visibility='default' filepath='include/net/sock.h' line='1108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='keepalive' type-id='e937debf' visibility='default' filepath='include/net/sock.h' line='1111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='compat_setsockopt' type-id='bc1bf185' visibility='default' filepath='include/net/sock.h' line='1113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='compat_getsockopt' type-id='e0fadd76' visibility='default' filepath='include/net/sock.h' line='1117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compat_ioctl' type-id='20da830b' visibility='default' filepath='include/net/sock.h' line='1121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='sendmsg' type-id='1df08751' visibility='default' filepath='include/net/sock.h' line='1124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='recvmsg' type-id='74e71fae' visibility='default' filepath='include/net/sock.h' line='1126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sendpage' type-id='65399e23' visibility='default' filepath='include/net/sock.h' line='1129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='bind' type-id='c25ed103' visibility='default' filepath='include/net/sock.h' line='1131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='backlog_rcv' type-id='a0f5247f' visibility='default' filepath='include/net/sock.h' line='1134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='release_cb' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='hash' type-id='55530c47' visibility='default' filepath='include/net/sock.h' line='1140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='unhash' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rehash' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='get_port' type-id='078de3a3' visibility='default' filepath='include/net/sock.h' line='1143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='inuse_idx' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='1147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='stream_memory_free' type-id='bf751261' visibility='default' filepath='include/net/sock.h' line='1150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='stream_memory_read' type-id='3d4d3aba' visibility='default' filepath='include/net/sock.h' line='1151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='enter_memory_pressure' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='leave_memory_pressure' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='memory_allocated' type-id='5403cb36' visibility='default' filepath='include/net/sock.h' line='1155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sockets_allocated' type-id='84c6078d' visibility='default' filepath='include/net/sock.h' line='1156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='memory_pressure' type-id='1d2c2b85' visibility='default' filepath='include/net/sock.h' line='1163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sysctl_mem' type-id='3ccc2590' visibility='default' filepath='include/net/sock.h' line='1164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='sysctl_wmem' type-id='7292109c' visibility='default' filepath='include/net/sock.h' line='1166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='sysctl_rmem' type-id='7292109c' visibility='default' filepath='include/net/sock.h' line='1167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='sysctl_wmem_offset' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='1168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='sysctl_rmem_offset' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='1169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='max_header' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='1171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='no_autobind' type-id='b50a4934' visibility='default' filepath='include/net/sock.h' line='1172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='slab' type-id='f3b4aca8' visibility='default' filepath='include/net/sock.h' line='1174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='obj_size' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='1175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='slab_flags' type-id='f7fe96cb' visibility='default' filepath='include/net/sock.h' line='1176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='useroffset' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='1177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='usersize' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='1178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='orphan_count' type-id='84c6078d' visibility='default' filepath='include/net/sock.h' line='1180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='rsk_prot' type-id='db994912' visibility='default' filepath='include/net/sock.h' line='1182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='twsk_prot' type-id='d68ad8b5' visibility='default' filepath='include/net/sock.h' line='1183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='h' type-id='adf5bf47' visibility='default' filepath='include/net/sock.h' line='1190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/sock.h' line='1192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/net/sock.h' line='1194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/net/sock.h' line='1196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='diag_destroy' type-id='95208a5e' visibility='default' filepath='include/net/sock.h' line='1200' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='msghdr' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/socket.h' line='49' column='1' id='ab94745c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='msg_name' type-id='eaa32e2f' visibility='default' filepath='include/linux/socket.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='msg_namelen' type-id='95e97e5e' visibility='default' filepath='include/linux/socket.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='msg_iter' type-id='f2b4d088' visibility='default' filepath='include/linux/socket.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='msg_control' type-id='eaa32e2f' visibility='default' filepath='include/linux/socket.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='msg_controllen' type-id='9e19ad6e' visibility='default' filepath='include/linux/socket.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='msg_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/socket.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='msg_iocb' type-id='80f25feb' visibility='default' filepath='include/linux/socket.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__20' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='708' column='1' id='a6d66545'>
+        <data-member access='private'>
+          <var-decl name='sk' type-id='f772df6e' visibility='default' filepath='include/linux/skbuff.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ip_defrag_offset' type-id='95e97e5e' visibility='default' filepath='include/linux/skbuff.h' line='710' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='slab_flags_t' type-id='f0981eeb' filepath='include/linux/types.h' line='154' column='1' id='f7fe96cb'/>
+      <class-decl name='request_sock_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/request_sock.h' line='27' column='1' id='ad499564'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/net/request_sock.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='obj_size' type-id='f0981eeb' visibility='default' filepath='include/net/request_sock.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='slab' type-id='f3b4aca8' visibility='default' filepath='include/net/request_sock.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='slab_name' type-id='26a90f95' visibility='default' filepath='include/net/request_sock.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rtx_syn_ack' type-id='cd05c94e' visibility='default' filepath='include/net/request_sock.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='send_ack' type-id='d3d20d73' visibility='default' filepath='include/net/request_sock.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='send_reset' type-id='c9214b77' visibility='default' filepath='include/net/request_sock.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='destructor' type-id='b249945a' visibility='default' filepath='include/net/request_sock.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='syn_ack_timeout' type-id='29e425c9' visibility='default' filepath='include/net/request_sock.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request_sock' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/net/request_sock.h' line='46' column='1' id='1c03d197'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__req_common' type-id='5999c5f7' visibility='default' filepath='include/net/request_sock.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='dl_next' type-id='94c948ef' visibility='default' filepath='include/net/request_sock.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='mss' type-id='1dc6a898' visibility='default' filepath='include/net/request_sock.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1168'>
+          <var-decl name='num_retrans' type-id='f9b06939' visibility='default' filepath='include/net/request_sock.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='cookie_ts' type-id='f9b06939' visibility='default' filepath='include/net/request_sock.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1176'>
+          <var-decl name='num_timeout' type-id='f9b06939' visibility='default' filepath='include/net/request_sock.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='ts_recent' type-id='19c2251e' visibility='default' filepath='include/net/request_sock.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='rsk_timer' type-id='abe41e67' visibility='default' filepath='include/net/request_sock.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='rsk_ops' type-id='e7c1a985' visibility='default' filepath='include/net/request_sock.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='sk' type-id='f772df6e' visibility='default' filepath='include/net/request_sock.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='saved_syn' type-id='f9409001' visibility='default' filepath='include/net/request_sock.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='secid' type-id='19c2251e' visibility='default' filepath='include/net/request_sock.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='peer_secid' type-id='19c2251e' visibility='default' filepath='include/net/request_sock.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timewait_sock_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/timewait_sock.h' line='14' column='1' id='b8765d15'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='twsk_slab' type-id='f3b4aca8' visibility='default' filepath='include/net/timewait_sock.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='twsk_slab_name' type-id='26a90f95' visibility='default' filepath='include/net/timewait_sock.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='twsk_obj_size' type-id='f0981eeb' visibility='default' filepath='include/net/timewait_sock.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='twsk_unique' type-id='1d8e5a11' visibility='default' filepath='include/net/timewait_sock.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='twsk_destructor' type-id='841969d0' visibility='default' filepath='include/net/timewait_sock.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__27' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='1185' column='1' id='adf5bf47'>
+        <data-member access='private'>
+          <var-decl name='hashinfo' type-id='d7a1e3c2' visibility='default' filepath='include/net/sock.h' line='1186' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='udp_table' type-id='115daa23' visibility='default' filepath='include/net/sock.h' line='1187' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw_hash' type-id='eb2c56dc' visibility='default' filepath='include/net/sock.h' line='1188' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='smc_hash' type-id='aa8162a3' visibility='default' filepath='include/net/sock.h' line='1189' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='smc_hashinfo' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/smc.h' line='16' column='1' id='adb1d973'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/smc.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ht' type-id='e151255a' visibility='default' filepath='include/net/smc.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__28' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='198' column='1' id='56935795'>
+        <data-member access='private'>
+          <var-decl name='skc_flags' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='skc_listener' type-id='f772df6e' visibility='default' filepath='include/net/sock.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='skc_tw_dr' type-id='b7ab21fc' visibility='default' filepath='include/net/sock.h' line='201' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__29' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='210' column='1' id='38f5bda8'>
+        <data-member access='private'>
+          <var-decl name='skc_node' type-id='03a4a074' visibility='default' filepath='include/net/sock.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='skc_nulls_node' type-id='5bd248e7' visibility='default' filepath='include/net/sock.h' line='212' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__30' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='218' column='1' id='9e121764'>
+        <data-member access='private'>
+          <var-decl name='skc_incoming_cpu' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='skc_rcv_wnd' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='skc_tw_rcv_nxt' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='221' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__31' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='227' column='1' id='5547e6b1'>
+        <data-member access='private'>
+          <var-decl name='skc_rxhash' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='skc_window_clamp' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='skc_tw_snd_nxt' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='230' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='socket_lock_t' type-id='a865a4bb' filepath='include/net/sock.h' line='109' column='1' id='40d8a3da'/>
+      <class-decl name='__anonymous_struct__9' size-in-bits='256' is-struct='yes' is-anonymous='yes' naming-typedef-id='40d8a3da' visibility='default' filepath='include/net/sock.h' line='96' column='1' id='a865a4bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='slock' type-id='fb4018a0' visibility='default' filepath='include/net/sock.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='owned' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wq' type-id='b5ab048f' visibility='default' filepath='include/net/sock.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__10' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='379' column='1' id='6a96185e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rmem_alloc' type-id='49178f86' visibility='default' filepath='include/net/sock.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='0fbf3cfd' visibility='default' filepath='include/net/sock.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tail' type-id='0fbf3cfd' visibility='default' filepath='include/net/sock.h' line='383' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sk_filter' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/filter.h' line='553' column='1' id='dbc9a936'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/linux/filter.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/filter.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prog' type-id='bdcee7af' visibility='default' filepath='include/linux/filter.h' line='556' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/filter.h' line='525' column='1' id='facd5339'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pages' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='jited' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='jit_requested' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='gpl_compatible' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='cb_access' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='dst_needed' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='blinded' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='is_func' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='kprobe_override' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='has_callchain_buf' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='enforce_expected_attach_type' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='b80df76a' visibility='default' filepath='include/linux/filter.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='expected_attach_type' type-id='67ce11ed' visibility='default' filepath='include/linux/filter.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='19c2251e' visibility='default' filepath='include/linux/filter.h' line='539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='jited_len' type-id='19c2251e' visibility='default' filepath='include/linux/filter.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tag' type-id='d2f7b56a' visibility='default' filepath='include/linux/filter.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='aux' type-id='1e6beae1' visibility='default' filepath='include/linux/filter.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='orig_prog' type-id='e93ad915' visibility='default' filepath='include/linux/filter.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bpf_func' type-id='531a7450' visibility='default' filepath='include/linux/filter.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='' type-id='fe772793' visibility='default' filepath='include/linux/filter.h' line='547' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='bpf_prog_type' filepath='include/uapi/linux/bpf.h' line='149' column='1' id='b80df76a'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BPF_PROG_TYPE_UNSPEC' value='0'/>
+        <enumerator name='BPF_PROG_TYPE_SOCKET_FILTER' value='1'/>
+        <enumerator name='BPF_PROG_TYPE_KPROBE' value='2'/>
+        <enumerator name='BPF_PROG_TYPE_SCHED_CLS' value='3'/>
+        <enumerator name='BPF_PROG_TYPE_SCHED_ACT' value='4'/>
+        <enumerator name='BPF_PROG_TYPE_TRACEPOINT' value='5'/>
+        <enumerator name='BPF_PROG_TYPE_XDP' value='6'/>
+        <enumerator name='BPF_PROG_TYPE_PERF_EVENT' value='7'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_SKB' value='8'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_SOCK' value='9'/>
+        <enumerator name='BPF_PROG_TYPE_LWT_IN' value='10'/>
+        <enumerator name='BPF_PROG_TYPE_LWT_OUT' value='11'/>
+        <enumerator name='BPF_PROG_TYPE_LWT_XMIT' value='12'/>
+        <enumerator name='BPF_PROG_TYPE_SOCK_OPS' value='13'/>
+        <enumerator name='BPF_PROG_TYPE_SK_SKB' value='14'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_DEVICE' value='15'/>
+        <enumerator name='BPF_PROG_TYPE_SK_MSG' value='16'/>
+        <enumerator name='BPF_PROG_TYPE_RAW_TRACEPOINT' value='17'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_SOCK_ADDR' value='18'/>
+        <enumerator name='BPF_PROG_TYPE_LWT_SEG6LOCAL' value='19'/>
+        <enumerator name='BPF_PROG_TYPE_LIRC_MODE2' value='20'/>
+        <enumerator name='BPF_PROG_TYPE_SK_REUSEPORT' value='21'/>
+        <enumerator name='BPF_PROG_TYPE_FLOW_DISSECTOR' value='22'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_SYSCTL' value='23'/>
+        <enumerator name='BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE' value='24'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_SOCKOPT' value='25'/>
+      </enum-decl>
+      <enum-decl name='bpf_attach_type' filepath='include/uapi/linux/bpf.h' line='178' column='1' id='67ce11ed'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BPF_CGROUP_INET_INGRESS' value='0'/>
+        <enumerator name='BPF_CGROUP_INET_EGRESS' value='1'/>
+        <enumerator name='BPF_CGROUP_INET_SOCK_CREATE' value='2'/>
+        <enumerator name='BPF_CGROUP_SOCK_OPS' value='3'/>
+        <enumerator name='BPF_SK_SKB_STREAM_PARSER' value='4'/>
+        <enumerator name='BPF_SK_SKB_STREAM_VERDICT' value='5'/>
+        <enumerator name='BPF_CGROUP_DEVICE' value='6'/>
+        <enumerator name='BPF_SK_MSG_VERDICT' value='7'/>
+        <enumerator name='BPF_CGROUP_INET4_BIND' value='8'/>
+        <enumerator name='BPF_CGROUP_INET6_BIND' value='9'/>
+        <enumerator name='BPF_CGROUP_INET4_CONNECT' value='10'/>
+        <enumerator name='BPF_CGROUP_INET6_CONNECT' value='11'/>
+        <enumerator name='BPF_CGROUP_INET4_POST_BIND' value='12'/>
+        <enumerator name='BPF_CGROUP_INET6_POST_BIND' value='13'/>
+        <enumerator name='BPF_CGROUP_UDP4_SENDMSG' value='14'/>
+        <enumerator name='BPF_CGROUP_UDP6_SENDMSG' value='15'/>
+        <enumerator name='BPF_LIRC_MODE2' value='16'/>
+        <enumerator name='BPF_FLOW_DISSECTOR' value='17'/>
+        <enumerator name='BPF_CGROUP_SYSCTL' value='18'/>
+        <enumerator name='BPF_CGROUP_UDP4_RECVMSG' value='19'/>
+        <enumerator name='BPF_CGROUP_UDP6_RECVMSG' value='20'/>
+        <enumerator name='BPF_CGROUP_GETSOCKOPT' value='21'/>
+        <enumerator name='BPF_CGROUP_SETSOCKOPT' value='22'/>
+        <enumerator name='__MAX_BPF_ATTACH_TYPE' value='23'/>
+      </enum-decl>
+      <class-decl name='bpf_prog_aux' size-in-bits='2496' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='368' column='1' id='09d9fab9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcnt' type-id='49178f86' visibility='default' filepath='include/linux/bpf.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='used_map_cnt' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_ctx_offset' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_pkt_offset' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_tp_access' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='stack_depth' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='func_cnt' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='func_idx' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='verifier_zext' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='offload_requested' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='func' type-id='50b674cc' visibility='default' filepath='include/linux/bpf.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='jit_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ksym_tnode' type-id='dc9cc7c7' visibility='default' filepath='include/linux/bpf.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ksym_lnode' type-id='72f469ec' visibility='default' filepath='include/linux/bpf.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ops' type-id='330c0db4' visibility='default' filepath='include/linux/bpf.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='used_maps' type-id='0928d5d6' visibility='default' filepath='include/linux/bpf.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='prog' type-id='bdcee7af' visibility='default' filepath='include/linux/bpf.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='user' type-id='273a7d34' visibility='default' filepath='include/linux/bpf.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='load_time' type-id='91ce1af9' visibility='default' filepath='include/linux/bpf.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='cgroup_storage' type-id='f57e9a44' visibility='default' filepath='include/linux/bpf.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/bpf.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='offload' type-id='11f19dd0' visibility='default' filepath='include/linux/bpf.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='btf' type-id='a469220f' visibility='default' filepath='include/linux/bpf.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='func_info' type-id='368d43d3' visibility='default' filepath='include/linux/bpf.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='linfo' type-id='2fcb9b17' visibility='default' filepath='include/linux/bpf.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='jited_linfo' type-id='63e171df' visibility='default' filepath='include/linux/bpf.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='func_info_cnt' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='nr_linfo' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='linfo_idx' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='stats' type-id='fbf2ba3a' visibility='default' filepath='include/linux/bpf.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='' type-id='b597c0fa' visibility='default' filepath='include/linux/bpf.h' line='420' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog_ops' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='300' column='1' id='9a1fed7b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='test_run' type-id='eddbe2ad' visibility='default' filepath='include/linux/bpf.h' line='301' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog_offload' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='342' column='1' id='eef53362'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog' type-id='bdcee7af' visibility='default' filepath='include/linux/bpf.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='netdev' type-id='68a2d05c' visibility='default' filepath='include/linux/bpf.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='offdev' type-id='d079c835' visibility='default' filepath='include/linux/bpf.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='offloads' type-id='72f469ec' visibility='default' filepath='include/linux/bpf.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev_state' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='opt_failed' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='jited_image' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='jited_len' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='351' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_func_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='3603' column='1' id='8a1373a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='insn_off' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3605' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_line_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='3611' column='1' id='88565f1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='insn_off' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='file_name_off' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='line_off' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='line_col' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3615' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog_stats' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='362' column='1' id='7af446cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cnt' type-id='91ce1af9' visibility='default' filepath='include/linux/bpf.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nsecs' type-id='91ce1af9' visibility='default' filepath='include/linux/bpf.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='syncp' type-id='e4d85780' visibility='default' filepath='include/linux/bpf.h' line='365' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__32' size-in-bits='384' is-anonymous='yes' visibility='default' filepath='include/linux/bpf.h' line='420' column='1' id='b597c0fa'>
+        <data-member access='private'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/bpf.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/bpf.h' line='422' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='sock_fprog_kern' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/filter.h' line='509' column='1' id='f29d9605'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='filter' type-id='e1ea11f6' visibility='default' filepath='include/linux/filter.h' line='511' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sock_filter' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/filter.h' line='24' column='1' id='f588f6e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='code' type-id='d315442e' visibility='default' filepath='include/uapi/linux/filter.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='jt' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/filter.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='jf' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/filter.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='k' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/filter.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__33' is-anonymous='yes' visibility='default' filepath='include/linux/filter.h' line='547' column='1' id='fe772793'>
+        <data-member access='private'>
+          <var-decl name='insns' type-id='4967766c' visibility='default' filepath='include/linux/filter.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='insnsi' type-id='b50399da' visibility='default' filepath='include/linux/filter.h' line='549' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__34' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='396' column='1' id='a29f8367'>
+        <data-member access='private'>
+          <var-decl name='sk_wq' type-id='99f34ac1' visibility='default' filepath='include/net/sock.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sk_wq_raw' type-id='99f34ac1' visibility='default' filepath='include/net/sock.h' line='398' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='socket_wq' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='96' column='1' id='8bd06fd9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/net.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fasync_list' type-id='5bb9c75d' visibility='default' filepath='include/linux/net.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/net.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/net.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_policy' size-in-bits='6656' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='499' column='1' id='ccf6c819'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xp_net' type-id='c9df1e6c' visibility='default' filepath='include/net/xfrm.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bydst' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='byidx' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/xfrm.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/xfrm.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='pos' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/net/xfrm.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='genid' type-id='49178f86' visibility='default' filepath='include/net/xfrm.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='priority' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='index' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='if_id' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mark' type-id='0084df72' visibility='default' filepath='include/net/xfrm.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='selector' type-id='8eb3b1fe' visibility='default' filepath='include/net/xfrm.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='lft' type-id='4ca5f2ad' visibility='default' filepath='include/net/xfrm.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='curlft' type-id='29d519c9' visibility='default' filepath='include/net/xfrm.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='walk' type-id='e8e96050' visibility='default' filepath='include/net/xfrm.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='polq' type-id='d15e38d5' visibility='default' filepath='include/net/xfrm.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='bydst_reinsert' type-id='b50a4934' visibility='default' filepath='include/net/xfrm.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3208'>
+          <var-decl name='type' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3216'>
+          <var-decl name='action' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3224'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3232'>
+          <var-decl name='xfrm_nr' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3248'>
+          <var-decl name='family' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='security' type-id='b07c2494' visibility='default' filepath='include/net/xfrm.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='xfrm_vec' type-id='41cc9498' visibility='default' filepath='include/net/xfrm.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='bydst_inexact_list' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/xfrm.h' line='529' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_mark' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='317' column='1' id='0084df72'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='v' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='m' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='319' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_selector' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='49' column='1' id='8eb3b1fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='daddr' type-id='c210d497' visibility='default' filepath='include/uapi/linux/xfrm.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='saddr' type-id='c210d497' visibility='default' filepath='include/uapi/linux/xfrm.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dport' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/xfrm.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='dport_mask' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/xfrm.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='sport' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/xfrm.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='sport_mask' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/xfrm.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='family' type-id='d315442e' visibility='default' filepath='include/uapi/linux/xfrm.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='prefixlen_d' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='prefixlen_s' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='proto' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ifindex' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/xfrm.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='user' type-id='70734f24' visibility='default' filepath='include/uapi/linux/xfrm.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='xfrm_address_t' type-id='eba8a6fd' filepath='include/uapi/linux/xfrm.h' line='19' column='1' id='c210d497'/>
+      <union-decl name='__anonymous_union__35' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='15' column='1' id='eba8a6fd'>
+        <data-member access='private'>
+          <var-decl name='a4' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/xfrm.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='a6' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/xfrm.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='in6' type-id='f6ed712a' visibility='default' filepath='include/uapi/linux/xfrm.h' line='18' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='xfrm_lifetime_cfg' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='66' column='1' id='4ca5f2ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='soft_byte_limit' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hard_byte_limit' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='soft_packet_limit' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hard_packet_limit' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='soft_add_expires_seconds' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hard_add_expires_seconds' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='soft_use_expires_seconds' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hard_use_expires_seconds' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_lifetime_cur' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='77' column='1' id='29d519c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bytes' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='packets' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='add_time' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='use_time' type-id='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_policy_walk_entry' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='482' column='1' id='e8e96050'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='all' type-id='72f469ec' visibility='default' filepath='include/net/xfrm.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dead' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='484' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_policy_queue' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='493' column='1' id='d15e38d5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hold_queue' type-id='e61c85d0' visibility='default' filepath='include/net/xfrm.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hold_timer' type-id='abe41e67' visibility='default' filepath='include/net/xfrm.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='timeout' type-id='7359adad' visibility='default' filepath='include/net/xfrm.h' line='496' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_sec_ctx' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='31' column='1' id='cddfb84e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctx_doi' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='ctx_alg' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ctx_len' type-id='d315442e' visibility='default' filepath='include/uapi/linux/xfrm.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ctx_sid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ctx_str' type-id='e84913bd' visibility='default' filepath='include/uapi/linux/xfrm.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_tmpl' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='445' column='1' id='a30f25c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='d07aeeaa' visibility='default' filepath='include/net/xfrm.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='saddr' type-id='c210d497' visibility='default' filepath='include/net/xfrm.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='encap_family' type-id='8efea9e5' visibility='default' filepath='include/net/xfrm.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='reqid' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mode' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='share' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='optional' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='408'>
+          <var-decl name='allalgs' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='aalgos' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ealgos' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='calgos' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='476' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_id' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='25' column='1' id='d07aeeaa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='daddr' type-id='c210d497' visibility='default' filepath='include/uapi/linux/xfrm.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='spi' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/xfrm.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='proto' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dst_entry' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/dst.h' line='24' column='1' id='772a4ddf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/net/dst.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='6d30564f' visibility='default' filepath='include/net/dst.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_metrics' type-id='7359adad' visibility='default' filepath='include/net/dst.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='expires' type-id='7359adad' visibility='default' filepath='include/net/dst.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xfrm' type-id='328dda6e' visibility='default' filepath='include/net/dst.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='input' type-id='d2e00785' visibility='default' filepath='include/net/dst.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='output' type-id='0023218e' visibility='default' filepath='include/net/dst.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/net/dst.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='obsolete' type-id='a2185560' visibility='default' filepath='include/net/dst.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='header_len' type-id='8efea9e5' visibility='default' filepath='include/net/dst.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='trailer_len' type-id='8efea9e5' visibility='default' filepath='include/net/dst.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='__refcnt' type-id='49178f86' visibility='default' filepath='include/net/dst.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='__use' type-id='95e97e5e' visibility='default' filepath='include/net/dst.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='lastuse' type-id='7359adad' visibility='default' filepath='include/net/dst.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='lwtstate' type-id='d19f4fca' visibility='default' filepath='include/net/dst.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/dst.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='error' type-id='a2185560' visibility='default' filepath='include/net/dst.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='848'>
+          <var-decl name='__pad' type-id='a2185560' visibility='default' filepath='include/net/dst.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='tclassid' type-id='3f1a6b60' visibility='default' filepath='include/net/dst.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_state' size-in-bits='5824' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='147' column='1' id='cb961c68'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xs_net' type-id='c9df1e6c' visibility='default' filepath='include/net/xfrm.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='fc320d58' visibility='default' filepath='include/net/xfrm.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bysrc' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='byspi' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/xfrm.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/xfrm.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='id' type-id='d07aeeaa' visibility='default' filepath='include/net/xfrm.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sel' type-id='8eb3b1fe' visibility='default' filepath='include/net/xfrm.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='mark' type-id='0084df72' visibility='default' filepath='include/net/xfrm.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='if_id' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='tfcpad' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='genid' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='km' type-id='12872440' visibility='default' filepath='include/net/xfrm.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='props' type-id='35535e57' visibility='default' filepath='include/net/xfrm.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='lft' type-id='4ca5f2ad' visibility='default' filepath='include/net/xfrm.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='aalg' type-id='255e0487' visibility='default' filepath='include/net/xfrm.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='ealg' type-id='1663a26e' visibility='default' filepath='include/net/xfrm.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='calg' type-id='1663a26e' visibility='default' filepath='include/net/xfrm.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='aead' type-id='c56b5ee4' visibility='default' filepath='include/net/xfrm.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='geniv' type-id='80f4b756' visibility='default' filepath='include/net/xfrm.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='encap' type-id='47541e34' visibility='default' filepath='include/net/xfrm.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='coaddr' type-id='47a1c9f4' visibility='default' filepath='include/net/xfrm.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='tunnel' type-id='328dda6e' visibility='default' filepath='include/net/xfrm.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='tunnel_users' type-id='49178f86' visibility='default' filepath='include/net/xfrm.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='replay' type-id='c59d261e' visibility='default' filepath='include/net/xfrm.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='replay_esn' type-id='71411b0f' visibility='default' filepath='include/net/xfrm.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='preplay' type-id='c59d261e' visibility='default' filepath='include/net/xfrm.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='preplay_esn' type-id='71411b0f' visibility='default' filepath='include/net/xfrm.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='repl' type-id='400b9143' visibility='default' filepath='include/net/xfrm.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='xflags' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='replay_maxage' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='replay_maxdiff' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='rtimer' type-id='abe41e67' visibility='default' filepath='include/net/xfrm.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='stats' type-id='c1960caa' visibility='default' filepath='include/net/xfrm.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='curlft' type-id='29d519c9' visibility='default' filepath='include/net/xfrm.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='mtimer' type-id='b6993efc' visibility='default' filepath='include/net/xfrm.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='xso' type-id='f5284c72' visibility='default' filepath='include/net/xfrm.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='saved_tmo' type-id='bd54fe1a' visibility='default' filepath='include/net/xfrm.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='lastused' type-id='1afd27ac' visibility='default' filepath='include/net/xfrm.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='xfrag' type-id='06c0432f' visibility='default' filepath='include/net/xfrm.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='type' type-id='4e812b7a' visibility='default' filepath='include/net/xfrm.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='inner_mode' type-id='fdc52c40' visibility='default' filepath='include/net/xfrm.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5528'>
+          <var-decl name='inner_mode_iaf' type-id='fdc52c40' visibility='default' filepath='include/net/xfrm.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5552'>
+          <var-decl name='outer_mode' type-id='fdc52c40' visibility='default' filepath='include/net/xfrm.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='type_offload' type-id='2f8b61b4' visibility='default' filepath='include/net/xfrm.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='security' type-id='b07c2494' visibility='default' filepath='include/net/xfrm.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/net/xfrm.h' line='259' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__36' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/xfrm.h' line='149' column='1' id='fc320d58'>
+        <data-member access='private'>
+          <var-decl name='gclist' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='bydst' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='151' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='xfrm_state_walk' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='119' column='1' id='12872440'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='all' type-id='72f469ec' visibility='default' filepath='include/net/xfrm.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='dying' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='proto' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='seq' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='filter' type-id='14a0013e' visibility='default' filepath='include/net/xfrm.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_address_filter' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='495' column='1' id='b4a65d38'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='saddr' type-id='c210d497' visibility='default' filepath='include/uapi/linux/xfrm.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='daddr' type-id='c210d497' visibility='default' filepath='include/uapi/linux/xfrm.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='family' type-id='d315442e' visibility='default' filepath='include/uapi/linux/xfrm.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='splen' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='280'>
+          <var-decl name='dplen' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='500' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__11' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/xfrm.h' line='171' column='1' id='35535e57'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reqid' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mode' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='replay_window' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='aalgo' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='ealgo' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='calgo' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='family' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='saddr' type-id='c210d497' visibility='default' filepath='include/net/xfrm.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='header_len' type-id='95e97e5e' visibility='default' filepath='include/net/xfrm.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='trailer_len' type-id='95e97e5e' visibility='default' filepath='include/net/xfrm.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='extra_flags' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='smark' type-id='0084df72' visibility='default' filepath='include/net/xfrm.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_algo_auth' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='108' column='1' id='faa1424f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg_name' type-id='59daf3ef' visibility='default' filepath='include/uapi/linux/xfrm.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='alg_key_len' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/xfrm.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='alg_trunc_len' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/xfrm.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='alg_key' type-id='e84913bd' visibility='default' filepath='include/uapi/linux/xfrm.h' line='112' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_algo' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='102' column='1' id='4da03818'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg_name' type-id='59daf3ef' visibility='default' filepath='include/uapi/linux/xfrm.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='alg_key_len' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/xfrm.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='alg_key' type-id='e84913bd' visibility='default' filepath='include/uapi/linux/xfrm.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_algo_aead' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='115' column='1' id='307587ae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg_name' type-id='59daf3ef' visibility='default' filepath='include/uapi/linux/xfrm.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='alg_key_len' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/xfrm.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='alg_icv_len' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/xfrm.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='alg_key' type-id='e84913bd' visibility='default' filepath='include/uapi/linux/xfrm.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_encap_tmpl' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='249' column='1' id='f9cce85e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='encap_type' type-id='d315442e' visibility='default' filepath='include/uapi/linux/xfrm.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='encap_sport' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/xfrm.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='encap_dport' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/xfrm.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encap_oa' type-id='c210d497' visibility='default' filepath='include/uapi/linux/xfrm.h' line='253' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_replay_state' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='84' column='1' id='c59d261e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='oseq' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='seq' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bitmap' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_replay_state_esn' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='92' column='1' id='b3f5c5f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bmp_len' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/xfrm.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='oseq' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seq' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='oseq_hi' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq_hi' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='replay_window' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bmp' type-id='d5016f6f' visibility='default' filepath='include/uapi/linux/xfrm.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_replay' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='296' column='1' id='9a401bb0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='advance' type-id='7e17c1b8' visibility='default' filepath='include/net/xfrm.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='check' type-id='796b13b7' visibility='default' filepath='include/net/xfrm.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='recheck' type-id='796b13b7' visibility='default' filepath='include/net/xfrm.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='notify' type-id='b2edd032' visibility='default' filepath='include/net/xfrm.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='overflow' type-id='5e185d4c' visibility='default' filepath='include/net/xfrm.h' line='305' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_stats' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='122' column='1' id='c1960caa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='replay_window' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='replay' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='integrity_failed' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_state_offload' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='128' column='1' id='f5284c72'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/net/xfrm.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offload_handle' type-id='7359adad' visibility='default' filepath='include/net/xfrm.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_exthdrs' type-id='f0981eeb' visibility='default' filepath='include/net/xfrm.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_type' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='390' column='1' id='972f40bf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='26a90f95' visibility='default' filepath='include/net/xfrm.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/xfrm.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='proto' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='init_state' type-id='0642cb3c' visibility='default' filepath='include/net/xfrm.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='destructor' type-id='d507826b' visibility='default' filepath='include/net/xfrm.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='input' type-id='5e185d4c' visibility='default' filepath='include/net/xfrm.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='output' type-id='5e185d4c' visibility='default' filepath='include/net/xfrm.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='reject' type-id='ae9790c6' visibility='default' filepath='include/net/xfrm.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='hdr_offset' type-id='d236d29d' visibility='default' filepath='include/net/xfrm.h' line='406' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='flowi' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='174' column='1' id='2117397c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='u' type-id='e9bb6246' visibility='default' filepath='include/net/flow.h' line='180' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__37' size-in-bits='704' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='175' column='1' id='e9bb6246'>
+        <data-member access='private'>
+          <var-decl name='__fl_common' type-id='184ee240' visibility='default' filepath='include/net/flow.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ip4' type-id='5f8f2c58' visibility='default' filepath='include/net/flow.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ip6' type-id='618f2f7e' visibility='default' filepath='include/net/flow.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dn' type-id='83eba552' visibility='default' filepath='include/net/flow.h' line='179' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='flowi_common' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='29' column='1' id='184ee240'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flowic_oif' type-id='95e97e5e' visibility='default' filepath='include/net/flow.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flowic_iif' type-id='95e97e5e' visibility='default' filepath='include/net/flow.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flowic_mark' type-id='3f1a6b60' visibility='default' filepath='include/net/flow.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flowic_tos' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='flowic_scope' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='flowic_proto' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='flowic_flags' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flowic_secid' type-id='3f1a6b60' visibility='default' filepath='include/net/flow.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flowic_uid' type-id='d80b72e6' visibility='default' filepath='include/net/flow.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flowic_tun_key' type-id='46ff7b8b' visibility='default' filepath='include/net/flow.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flowic_multipath_hash' type-id='3f1a6b60' visibility='default' filepath='include/net/flow.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='flowi_tunnel' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='25' column='1' id='46ff7b8b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tun_id' type-id='0899c7ad' visibility='default' filepath='include/net/flow.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__be64' type-id='d3130597' filepath='include/uapi/linux/types.h' line='34' column='1' id='0899c7ad'/>
+      <class-decl name='flowi4' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='70' column='1' id='5f8f2c58'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__fl_common' type-id='184ee240' visibility='default' filepath='include/net/flow.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='saddr' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='daddr' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='uli' type-id='76355708' visibility='default' filepath='include/net/flow.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='flowi_uli' size-in-bits='32' visibility='default' filepath='include/net/flow.h' line='46' column='1' id='76355708'>
+        <data-member access='private'>
+          <var-decl name='ports' type-id='1a8a9bd4' visibility='default' filepath='include/net/flow.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='icmpt' type-id='217fb848' visibility='default' filepath='include/net/flow.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dnports' type-id='b1169d60' visibility='default' filepath='include/net/flow.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='spi' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='gre_key' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='mht' type-id='97a0d733' visibility='default' filepath='include/net/flow.h' line='67' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__12' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='47' column='1' id='1a8a9bd4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dport' type-id='84a5c3d4' visibility='default' filepath='include/net/flow.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sport' type-id='84a5c3d4' visibility='default' filepath='include/net/flow.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__13' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='52' column='1' id='217fb848'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='code' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__14' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='57' column='1' id='b1169d60'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dport' type-id='23119536' visibility='default' filepath='include/net/flow.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sport' type-id='23119536' visibility='default' filepath='include/net/flow.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__15' size-in-bits='8' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='65' column='1' id='97a0d733'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='flowi6' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='133' column='1' id='618f2f7e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__fl_common' type-id='184ee240' visibility='default' filepath='include/net/flow.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='daddr' type-id='f6ed712a' visibility='default' filepath='include/net/flow.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='saddr' type-id='f6ed712a' visibility='default' filepath='include/net/flow.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='flowlabel' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='uli' type-id='76355708' visibility='default' filepath='include/net/flow.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mp_hash' type-id='3f1a6b60' visibility='default' filepath='include/net/flow.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='flowidn' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='159' column='1' id='83eba552'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__fl_common' type-id='184ee240' visibility='default' filepath='include/net/flow.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='daddr' type-id='23119536' visibility='default' filepath='include/net/flow.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='saddr' type-id='23119536' visibility='default' filepath='include/net/flow.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='uli' type-id='76355708' visibility='default' filepath='include/net/flow.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_mode' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='135' column='1' id='fdc52c40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='encap' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='family' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_type_offload' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='412' column='1' id='faf1ab29'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='26a90f95' visibility='default' filepath='include/net/xfrm.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/xfrm.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='proto' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='encap' type-id='a81671bb' visibility='default' filepath='include/net/xfrm.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='input_tail' type-id='5e185d4c' visibility='default' filepath='include/net/xfrm.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xmit' type-id='231269da' visibility='default' filepath='include/net/xfrm.h' line='418' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__38' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='412' column='1' id='fc714247'>
+        <data-member access='private'>
+          <var-decl name='sk_send_head' type-id='0fbf3cfd' visibility='default' filepath='include/net/sock.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tcp_rtx_queue' type-id='dec44472' visibility='default' filepath='include/net/sock.h' line='414' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='socket' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='114' column='1' id='ee14fd94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='ee2ecafb' visibility='default' filepath='include/linux/net.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='a2185560' visibility='default' filepath='include/linux/net.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/net.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/net.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sk' type-id='f772df6e' visibility='default' filepath='include/linux/net.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ops' type-id='38a81521' visibility='default' filepath='include/linux/net.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wq' type-id='8bd06fd9' visibility='default' filepath='include/linux/net.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='socket_state' type-id='08f5ca1c' filepath='include/uapi/linux/net.h' line='54' column='1' id='ee2ecafb'/>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/uapi/linux/net.h' line='48' column='1' id='08f5ca1c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SS_FREE' value='0'/>
+        <enumerator name='SS_UNCONNECTED' value='1'/>
+        <enumerator name='SS_CONNECTING' value='2'/>
+        <enumerator name='SS_CONNECTED' value='3'/>
+        <enumerator name='SS_DISCONNECTING' value='4'/>
+      </enum-decl>
+      <class-decl name='proto_ops' size-in-bits='2112' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='137' column='1' id='4e0399c2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/linux/net.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/net.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='release' type-id='27936440' visibility='default' filepath='include/linux/net.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bind' type-id='c9664af8' visibility='default' filepath='include/linux/net.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connect' type-id='be6c7be7' visibility='default' filepath='include/linux/net.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='socketpair' type-id='be3a232b' visibility='default' filepath='include/linux/net.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='accept' type-id='2136470b' visibility='default' filepath='include/linux/net.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='getname' type-id='c9664af8' visibility='default' filepath='include/linux/net.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='poll' type-id='e93ad56e' visibility='default' filepath='include/linux/net.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ioctl' type-id='82a9a11e' visibility='default' filepath='include/linux/net.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='compat_ioctl' type-id='82a9a11e' visibility='default' filepath='include/linux/net.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='gettstamp' type-id='d78dd406' visibility='default' filepath='include/linux/net.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='listen' type-id='6dfd92af' visibility='default' filepath='include/linux/net.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='shutdown' type-id='6dfd92af' visibility='default' filepath='include/linux/net.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='setsockopt' type-id='82ffa5a0' visibility='default' filepath='include/linux/net.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='getsockopt' type-id='a9c0cdab' visibility='default' filepath='include/linux/net.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='compat_setsockopt' type-id='82ffa5a0' visibility='default' filepath='include/linux/net.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='compat_getsockopt' type-id='a9c0cdab' visibility='default' filepath='include/linux/net.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='sendmsg' type-id='f38728c0' visibility='default' filepath='include/linux/net.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='recvmsg' type-id='93abc02f' visibility='default' filepath='include/linux/net.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mmap' type-id='3eef3bc7' visibility='default' filepath='include/linux/net.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='sendpage' type-id='42b02383' visibility='default' filepath='include/linux/net.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='splice_read' type-id='21641a6b' visibility='default' filepath='include/linux/net.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='set_peek_off' type-id='95208a5e' visibility='default' filepath='include/linux/net.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='peek_len' type-id='27936440' visibility='default' filepath='include/linux/net.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='read_sock' type-id='8755cc63' visibility='default' filepath='include/linux/net.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='sendpage_locked' type-id='65399e23' visibility='default' filepath='include/linux/net.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='sendmsg_locked' type-id='1df08751' visibility='default' filepath='include/linux/net.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='set_rcvlowat' type-id='95208a5e' visibility='default' filepath='include/linux/net.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/net.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/net.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/net.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/net.h' line='211' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='read_descriptor_t' type-id='bad61846' filepath='include/linux/fs.h' line='364' column='1' id='2d58d013'/>
+      <class-decl name='__anonymous_struct__16' size-in-bits='256' is-struct='yes' is-anonymous='yes' naming-typedef-id='2d58d013' visibility='default' filepath='include/linux/fs.h' line='356' column='1' id='bad61846'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='written' type-id='b59d7dce' visibility='default' filepath='include/linux/fs.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='b59d7dce' visibility='default' filepath='include/linux/fs.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='arg' type-id='8dda450b' visibility='default' filepath='include/linux/fs.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='363' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__39' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='359' column='1' id='8dda450b'>
+        <data-member access='private'>
+          <var-decl name='buf' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='361' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='sk_read_actor_t' type-id='0c197ddf' filepath='include/linux/net.h' line='134' column='1' id='514d4e0e'/>
+      <class-decl name='sock_cgroup_data' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='796' column='1' id='8544f103'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='de05b94c' visibility='default' filepath='include/linux/cgroup-defs.h' line='797' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__40' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='797' column='1' id='de05b94c'>
+        <data-member access='private'>
+          <var-decl name='' type-id='16b0d6e5' visibility='default' filepath='include/linux/cgroup-defs.h' line='799' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='val' type-id='91ce1af9' visibility='default' filepath='include/linux/cgroup-defs.h' line='817' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__17' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='799' column='1' id='16b0d6e5'>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='is_data' type-id='f9b06939' visibility='default' filepath='include/linux/cgroup-defs.h' line='800' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='no_refcnt' type-id='f9b06939' visibility='default' filepath='include/linux/cgroup-defs.h' line='801' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='unused' type-id='f9b06939' visibility='default' filepath='include/linux/cgroup-defs.h' line='802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='padding' type-id='f9b06939' visibility='default' filepath='include/linux/cgroup-defs.h' line='803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='prioidx' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='classid' type-id='19c2251e' visibility='default' filepath='include/linux/cgroup-defs.h' line='805' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip_ra_chain' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/ip.h' line='121' column='1' id='4816a147'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='00c4cbad' visibility='default' filepath='include/net/ip.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sk' type-id='f772df6e' visibility='default' filepath='include/net/ip.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='4fa91678' visibility='default' filepath='include/net/ip.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__41' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/ip.h' line='124' column='1' id='4fa91678'>
+        <data-member access='private'>
+          <var-decl name='destructor' type-id='841969d0' visibility='default' filepath='include/net/ip.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='saved_sk' type-id='f772df6e' visibility='default' filepath='include/net/ip.h' line='126' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='fib_rules_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/net/fib_rules.h' line='59' column='1' id='e079fe2a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/net/fib_rules.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/fib_rules.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rule_size' type-id='95e97e5e' visibility='default' filepath='include/net/fib_rules.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='addr_size' type-id='95e97e5e' visibility='default' filepath='include/net/fib_rules.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unresolved_rules' type-id='95e97e5e' visibility='default' filepath='include/net/fib_rules.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='nr_goto_rules' type-id='95e97e5e' visibility='default' filepath='include/net/fib_rules.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fib_rules_seq' type-id='f0981eeb' visibility='default' filepath='include/net/fib_rules.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='action' type-id='33356d2c' visibility='default' filepath='include/net/fib_rules.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='suppress' type-id='6b0f20ae' visibility='default' filepath='include/net/fib_rules.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='match' type-id='9ce2e6e7' visibility='default' filepath='include/net/fib_rules.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='configure' type-id='41323fc2' visibility='default' filepath='include/net/fib_rules.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='delete' type-id='42bc911b' visibility='default' filepath='include/net/fib_rules.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='compare' type-id='98a3b427' visibility='default' filepath='include/net/fib_rules.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fill' type-id='72fd300e' visibility='default' filepath='include/net/fib_rules.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nlmsg_payload' type-id='b3002d4b' visibility='default' filepath='include/net/fib_rules.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flush_cache' type-id='28375890' visibility='default' filepath='include/net/fib_rules.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nlgroup' type-id='95e97e5e' visibility='default' filepath='include/net/fib_rules.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='policy' type-id='109cdb66' visibility='default' filepath='include/net/fib_rules.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rules_list' type-id='72f469ec' visibility='default' filepath='include/net/fib_rules.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/fib_rules.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='fro_net' type-id='a2bff677' visibility='default' filepath='include/net/fib_rules.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/fib_rules.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_rule' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/net/fib_rules.h' line='19' column='1' id='94b5478d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/fib_rules.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='iifindex' type-id='95e97e5e' visibility='default' filepath='include/net/fib_rules.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='oifindex' type-id='95e97e5e' visibility='default' filepath='include/net/fib_rules.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mark' type-id='19c2251e' visibility='default' filepath='include/net/fib_rules.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='mark_mask' type-id='19c2251e' visibility='default' filepath='include/net/fib_rules.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/fib_rules.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='table' type-id='19c2251e' visibility='default' filepath='include/net/fib_rules.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='action' type-id='f9b06939' visibility='default' filepath='include/net/fib_rules.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='l3mdev' type-id='f9b06939' visibility='default' filepath='include/net/fib_rules.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='proto' type-id='f9b06939' visibility='default' filepath='include/net/fib_rules.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='ip_proto' type-id='f9b06939' visibility='default' filepath='include/net/fib_rules.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='target' type-id='19c2251e' visibility='default' filepath='include/net/fib_rules.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='tun_id' type-id='0899c7ad' visibility='default' filepath='include/net/fib_rules.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ctarget' type-id='87447c2d' visibility='default' filepath='include/net/fib_rules.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fr_net' type-id='a2bff677' visibility='default' filepath='include/net/fib_rules.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/fib_rules.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='pref' type-id='19c2251e' visibility='default' filepath='include/net/fib_rules.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='suppress_ifgroup' type-id='95e97e5e' visibility='default' filepath='include/net/fib_rules.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='suppress_prefixlen' type-id='95e97e5e' visibility='default' filepath='include/net/fib_rules.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='iifname' type-id='ac1fa8c0' visibility='default' filepath='include/net/fib_rules.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='oifname' type-id='ac1fa8c0' visibility='default' filepath='include/net/fib_rules.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='uid_range' type-id='c76a5484' visibility='default' filepath='include/net/fib_rules.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='sport_range' type-id='c27f07e7' visibility='default' filepath='include/net/fib_rules.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='dport_range' type-id='c27f07e7' visibility='default' filepath='include/net/fib_rules.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/fib_rules.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_kuid_range' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/fib_rules.h' line='14' column='1' id='c76a5484'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='d80b72e6' visibility='default' filepath='include/net/fib_rules.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='end' type-id='d80b72e6' visibility='default' filepath='include/net/fib_rules.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_rule_port_range' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='38' column='1' id='c27f07e7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='d315442e' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='end' type-id='d315442e' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_lookup_arg' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/fib_rules.h' line='48' column='1' id='18f5da66'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lookup_ptr' type-id='eaa32e2f' visibility='default' filepath='include/net/fib_rules.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lookup_data' type-id='eaa32e2f' visibility='default' filepath='include/net/fib_rules.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='result' type-id='eaa32e2f' visibility='default' filepath='include/net/fib_rules.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rule' type-id='87447c2d' visibility='default' filepath='include/net/fib_rules.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='table' type-id='19c2251e' visibility='default' filepath='include/net/fib_rules.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/net/fib_rules.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_rule_hdr' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='19' column='1' id='284260b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dst_len' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='src_len' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='tos' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='table' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='res1' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='res2' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='action' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rhash_lock_head' is-struct='yes' visibility='default' filepath='include/linux/rhashtable.h' line='47' column='1' id='c0065bf0'/>
+      <class-decl name='fib_notifier_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/fib_notifier.h' line='29' column='1' id='ef45f063'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/net/fib_notifier.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/fib_notifier.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fib_seq_read' type-id='3a0c781f' visibility='default' filepath='include/net/fib_notifier.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fib_dump' type-id='9def3eca' visibility='default' filepath='include/net/fib_notifier.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/fib_notifier.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/fib_notifier.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_stable_secret' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/ipv6.h' line='65' column='1' id='b2fc06b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='initialized' type-id='b50a4934' visibility='default' filepath='include/linux/ipv6.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='secret' type-id='f6ed712a' visibility='default' filepath='include/linux/ipv6.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib6_info' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='136' column='1' id='faaac7a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fib6_table' type-id='7156b317' visibility='default' filepath='include/net/ip6_fib.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fib6_next' type-id='fe454a76' visibility='default' filepath='include/net/ip6_fib.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fib6_node' type-id='f7b83e6d' visibility='default' filepath='include/net/ip6_fib.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='faf198da' visibility='default' filepath='include/net/ip6_fib.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fib6_nsiblings' type-id='f0981eeb' visibility='default' filepath='include/net/ip6_fib.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='fib6_ref' type-id='64615833' visibility='default' filepath='include/net/ip6_fib.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='expires' type-id='7359adad' visibility='default' filepath='include/net/ip6_fib.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fib6_metrics' type-id='8eff91b0' visibility='default' filepath='include/net/ip6_fib.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fib6_dst' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='fib6_flags' type-id='19c2251e' visibility='default' filepath='include/net/ip6_fib.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fib6_src' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='fib6_prefsrc' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fib6_metric' type-id='19c2251e' visibility='default' filepath='include/net/ip6_fib.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='fib6_protocol' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1064'>
+          <var-decl name='fib6_type' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='should_flush' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='dst_nocount' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='dst_nopolicy' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='dst_host' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='fib6_destroying' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1072'>
+          <var-decl name='unused' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip6_fib.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='nh' type-id='f32120a7' visibility='default' filepath='include/net/ip6_fib.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='fib6_nh' type-id='7be723ef' visibility='default' filepath='include/net/ip6_fib.h' line='174' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib6_node' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='70' column='1' id='9f30e4ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent' type-id='f7b83e6d' visibility='default' filepath='include/net/ip6_fib.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='left' type-id='f7b83e6d' visibility='default' filepath='include/net/ip6_fib.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='right' type-id='f7b83e6d' visibility='default' filepath='include/net/ip6_fib.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='leaf' type-id='fe454a76' visibility='default' filepath='include/net/ip6_fib.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fn_bit' type-id='d315442e' visibility='default' filepath='include/net/ip6_fib.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='fn_flags' type-id='d315442e' visibility='default' filepath='include/net/ip6_fib.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='fn_sernum' type-id='95e97e5e' visibility='default' filepath='include/net/ip6_fib.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rr_ptr' type-id='fe454a76' visibility='default' filepath='include/net/ip6_fib.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip6_fib.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__42' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/ip6_fib.h' line='146' column='1' id='faf198da'>
+        <data-member access='private'>
+          <var-decl name='fib6_siblings' type-id='72f469ec' visibility='default' filepath='include/net/ip6_fib.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nh_list' type-id='72f469ec' visibility='default' filepath='include/net/ip6_fib.h' line='148' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='dst_metrics' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/dst.h' line='82' column='1' id='e51de182'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='metrics' type-id='46fc18d9' visibility='default' filepath='include/net/dst.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/dst.h' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rt6key' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='102' column='1' id='d7f36d8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='f6ed712a' visibility='default' filepath='include/net/ip6_fib.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='plen' type-id='95e97e5e' visibility='default' filepath='include/net/ip6_fib.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib6_nh' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='125' column='1' id='979d5bbb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nh_common' type-id='e1f89457' visibility='default' filepath='include/net/ip6_fib.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='last_probe' type-id='7359adad' visibility='default' filepath='include/net/ip6_fib.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rt6i_pcpu' type-id='1ead5d78' visibility='default' filepath='include/net/ip6_fib.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rt6i_exception_bucket' type-id='cc9f99b2' visibility='default' filepath='include/net/ip6_fib.h' line='133' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_nh_common' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='80' column='1' id='e1f89457'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nhc_dev' type-id='68a2d05c' visibility='default' filepath='include/net/ip_fib.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nhc_oif' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nhc_scope' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='nhc_family' type-id='f9b06939' visibility='default' filepath='include/net/ip_fib.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='nhc_gw_family' type-id='f9b06939' visibility='default' filepath='include/net/ip_fib.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='nhc_flags' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nhc_lwtstate' type-id='d19f4fca' visibility='default' filepath='include/net/ip_fib.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nhc_gw' type-id='37def4b7' visibility='default' filepath='include/net/ip_fib.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nhc_weight' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='nhc_upper_bound' type-id='49178f86' visibility='default' filepath='include/net/ip_fib.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nhc_pcpu_rth_output' type-id='0f830eef' visibility='default' filepath='include/net/ip_fib.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nhc_rth_input' type-id='c8f5869f' visibility='default' filepath='include/net/ip_fib.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='nhc_exceptions' type-id='09c59e98' visibility='default' filepath='include/net/ip_fib.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__43' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/ip_fib.h' line='89' column='1' id='37def4b7'>
+        <data-member access='private'>
+          <var-decl name='ipv4' type-id='78a133c2' visibility='default' filepath='include/net/ip_fib.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ipv6' type-id='f6ed712a' visibility='default' filepath='include/net/ip_fib.h' line='91' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='rtable' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/net/route.h' line='49' column='1' id='6aebc4a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dst' type-id='772a4ddf' visibility='default' filepath='include/net/route.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rt_genid' type-id='95e97e5e' visibility='default' filepath='include/net/route.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='rt_flags' type-id='f0981eeb' visibility='default' filepath='include/net/route.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rt_type' type-id='d315442e' visibility='default' filepath='include/net/route.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='rt_is_input' type-id='8f048e17' visibility='default' filepath='include/net/route.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='984'>
+          <var-decl name='rt_uses_gateway' type-id='8f048e17' visibility='default' filepath='include/net/route.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='rt_iif' type-id='95e97e5e' visibility='default' filepath='include/net/route.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='rt_gw_family' type-id='f9b06939' visibility='default' filepath='include/net/route.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='' type-id='77077303' visibility='default' filepath='include/net/route.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='rt_mtu_locked' type-id='19c2251e' visibility='default' filepath='include/net/route.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='rt_pmtu' type-id='19c2251e' visibility='default' filepath='include/net/route.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='rt_uncached' type-id='72f469ec' visibility='default' filepath='include/net/route.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rt_uncached_list' type-id='e9bf5d35' visibility='default' filepath='include/net/route.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__44' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/route.h' line='62' column='1' id='77077303'>
+        <data-member access='private'>
+          <var-decl name='rt_gw4' type-id='78a133c2' visibility='default' filepath='include/net/route.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rt_gw6' type-id='f6ed712a' visibility='default' filepath='include/net/route.h' line='64' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='fnhe_hash_bucket' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='72' column='1' id='ba046e9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chain' type-id='aa804387' visibility='default' filepath='include/net/ip_fib.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_nh_exception' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='58' column='1' id='e92f1a2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fnhe_next' type-id='aa804387' visibility='default' filepath='include/net/ip_fib.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fnhe_genid' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fnhe_daddr' type-id='78a133c2' visibility='default' filepath='include/net/ip_fib.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fnhe_pmtu' type-id='19c2251e' visibility='default' filepath='include/net/ip_fib.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='fnhe_mtu_locked' type-id='b50a4934' visibility='default' filepath='include/net/ip_fib.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fnhe_gw' type-id='78a133c2' visibility='default' filepath='include/net/ip_fib.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fnhe_expires' type-id='7359adad' visibility='default' filepath='include/net/ip_fib.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fnhe_rth_input' type-id='c8f5869f' visibility='default' filepath='include/net/ip_fib.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fnhe_rth_output' type-id='c8f5869f' visibility='default' filepath='include/net/ip_fib.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fnhe_stamp' type-id='7359adad' visibility='default' filepath='include/net/ip_fib.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip_fib.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rt6_info' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='177' column='1' id='384b6d85'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dst' type-id='772a4ddf' visibility='default' filepath='include/net/ip6_fib.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='from' type-id='fe454a76' visibility='default' filepath='include/net/ip6_fib.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='sernum' type-id='95e97e5e' visibility='default' filepath='include/net/ip6_fib.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='rt6i_dst' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rt6i_src' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='rt6i_gateway' type-id='f6ed712a' visibility='default' filepath='include/net/ip6_fib.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rt6i_idev' type-id='f026b16c' visibility='default' filepath='include/net/ip6_fib.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='rt6i_flags' type-id='19c2251e' visibility='default' filepath='include/net/ip6_fib.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='rt6i_uncached' type-id='72f469ec' visibility='default' filepath='include/net/ip6_fib.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='rt6i_uncached_list' type-id='e9bf5d35' visibility='default' filepath='include/net/ip6_fib.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='rt6i_nfheader_len' type-id='8efea9e5' visibility='default' filepath='include/net/ip6_fib.h' line='192' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet6_dev' size-in-bits='5632' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='163' column='1' id='8db8de2c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/net/if_inet6.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr_list' type-id='72f469ec' visibility='default' filepath='include/net/if_inet6.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mc_list' type-id='d1ca3a89' visibility='default' filepath='include/net/if_inet6.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mc_tomb' type-id='d1ca3a89' visibility='default' filepath='include/net/if_inet6.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mc_lock' type-id='fb4018a0' visibility='default' filepath='include/net/if_inet6.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='mc_qrv' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='mc_gq_running' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='mc_ifc_count' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='376'>
+          <var-decl name='mc_dad_count' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mc_v1_seen' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mc_qi' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mc_qri' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mc_maxdelay' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mc_gq_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mc_ifc_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='mc_dad_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ac_list' type-id='034d7ded' visibility='default' filepath='include/net/if_inet6.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/if_inet6.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/if_inet6.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='if_flags' type-id='3f1a6b60' visibility='default' filepath='include/net/if_inet6.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='dead' type-id='95e97e5e' visibility='default' filepath='include/net/if_inet6.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='desync_factor' type-id='19c2251e' visibility='default' filepath='include/net/if_inet6.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='rndid' type-id='d2f7b56a' visibility='default' filepath='include/net/if_inet6.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='tempaddr_list' type-id='72f469ec' visibility='default' filepath='include/net/if_inet6.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='token' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='nd_parms' type-id='affe0fe3' visibility='default' filepath='include/net/if_inet6.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='cnf' type-id='55e8af82' visibility='default' filepath='include/net/if_inet6.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='stats' type-id='0e97f526' visibility='default' filepath='include/net/if_inet6.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='rs_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='rs_interval' type-id='3158a266' visibility='default' filepath='include/net/if_inet6.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5408'>
+          <var-decl name='rs_probes' type-id='8f048e17' visibility='default' filepath='include/net/if_inet6.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='tstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/if_inet6.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ifmcaddr6' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='114' column='1' id='cc23d6f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mca_addr' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idev' type-id='f026b16c' visibility='default' filepath='include/net/if_inet6.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='d1ca3a89' visibility='default' filepath='include/net/if_inet6.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mca_sources' type-id='60f4096f' visibility='default' filepath='include/net/if_inet6.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mca_tomb' type-id='60f4096f' visibility='default' filepath='include/net/if_inet6.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mca_sfmode' type-id='f0981eeb' visibility='default' filepath='include/net/if_inet6.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='mca_crcount' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mca_sfcount' type-id='f05e8e77' visibility='default' filepath='include/net/if_inet6.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mca_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mca_flags' type-id='f0981eeb' visibility='default' filepath='include/net/if_inet6.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='mca_users' type-id='95e97e5e' visibility='default' filepath='include/net/if_inet6.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mca_refcnt' type-id='64615833' visibility='default' filepath='include/net/if_inet6.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='mca_lock' type-id='fb4018a0' visibility='default' filepath='include/net/if_inet6.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='mca_cstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='mca_tstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='129' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip6_sf_list' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='99' column='1' id='b83c8287'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sf_next' type-id='60f4096f' visibility='default' filepath='include/net/if_inet6.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sf_addr' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sf_count' type-id='f05e8e77' visibility='default' filepath='include/net/if_inet6.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sf_gsresp' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='sf_oldin' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='sf_crcount' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ifacaddr6' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='140' column='1' id='1883cd3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='aca_addr' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='aca_rt' type-id='fe454a76' visibility='default' filepath='include/net/if_inet6.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='aca_next' type-id='034d7ded' visibility='default' filepath='include/net/if_inet6.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='aca_addr_lst' type-id='03a4a074' visibility='default' filepath='include/net/if_inet6.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='aca_users' type-id='95e97e5e' visibility='default' filepath='include/net/if_inet6.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='aca_refcnt' type-id='64615833' visibility='default' filepath='include/net/if_inet6.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='aca_cstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='aca_tstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/if_inet6.h' line='149' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neigh_parms' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='70' column='1' id='1429eee5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='net' type-id='c9df1e6c' visibility='default' filepath='include/net/neighbour.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/net/neighbour.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/neighbour.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='neigh_setup' type-id='8eff9c66' visibility='default' filepath='include/net/neighbour.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tbl' type-id='6bbe39a7' visibility='default' filepath='include/net/neighbour.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sysctl_table' type-id='eaa32e2f' visibility='default' filepath='include/net/neighbour.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dead' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/neighbour.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/neighbour.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='reachable_time' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='data' type-id='77ba73f2' visibility='default' filepath='include/net/neighbour.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='data_state' type-id='f066dd3c' visibility='default' filepath='include/net/neighbour.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_devstat' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='156' column='1' id='0e97f526'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='proc_dir_entry' type-id='d077e928' visibility='default' filepath='include/net/if_inet6.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ipv6' type-id='30897c4e' visibility='default' filepath='include/net/if_inet6.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='icmpv6dev' type-id='6551bd60' visibility='default' filepath='include/net/if_inet6.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='icmpv6msgdev' type-id='793f0d19' visibility='default' filepath='include/net/if_inet6.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icmpv6_mib_device' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='75' column='1' id='1b8801b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='72bb5580' visibility='default' filepath='include/net/snmp.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icmpv6msg_mib_device' size-in-bits='32768' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='85' column='1' id='e4ca98d1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='61cd76ae' visibility='default' filepath='include/net/snmp.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rt6_exception_bucket' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='109' column='1' id='db281924'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chain' type-id='e151255a' visibility='default' filepath='include/net/ip6_fib.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='depth' type-id='95e97e5e' visibility='default' filepath='include/net/ip6_fib.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neigh_statistics' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='112' column='1' id='59a2e4aa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='allocs' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='destroys' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hash_grows' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='res_failed' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lookups' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hits' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcv_probes_mcast' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rcv_probes_ucast' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='periodic_gc_runs' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='forced_gc_runs' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='unres_discards' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='table_fulls' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='129' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neigh_hash_table' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='186' column='1' id='1f305e7e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash_buckets' type-id='104977a4' visibility='default' filepath='include/net/neighbour.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hash_shift' type-id='f0981eeb' visibility='default' filepath='include/net/neighbour.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hash_rnd' type-id='3fa29bab' visibility='default' filepath='include/net/neighbour.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/neighbour.h' line='190' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neigh_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='163' column='1' id='06dfa6bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='solicit' type-id='8e78f753' visibility='default' filepath='include/net/neighbour.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='error_report' type-id='8e78f753' visibility='default' filepath='include/net/neighbour.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='output' type-id='a57789c2' visibility='default' filepath='include/net/neighbour.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connected_output' type-id='a57789c2' visibility='default' filepath='include/net/neighbour.h' line='168' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mini_Qdisc' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='1255' column='1' id='b10d5830'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filter_list' type-id='6dca061b' visibility='default' filepath='include/net/sch_generic.h' line='1256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cpu_bstats' type-id='b3542b31' visibility='default' filepath='include/net/sch_generic.h' line='1257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpu_qstats' type-id='338303f5' visibility='default' filepath='include/net/sch_generic.h' line='1258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sch_generic.h' line='1259' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_proto' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='349' column='1' id='17992e3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='6dca061b' visibility='default' filepath='include/net/sch_generic.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='root' type-id='eaa32e2f' visibility='default' filepath='include/net/sch_generic.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='classify' type-id='624375a3' visibility='default' filepath='include/net/sch_generic.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='protocol' type-id='84a5c3d4' visibility='default' filepath='include/net/sch_generic.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='prio' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/net/sch_generic.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ops' type-id='e12279e7' visibility='default' filepath='include/net/sch_generic.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='chain' type-id='45305972' visibility='default' filepath='include/net/sch_generic.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/sch_generic.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='deleting' type-id='b50a4934' visibility='default' filepath='include/net/sch_generic.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/sch_generic.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sch_generic.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='destroy_ht_node' type-id='03a4a074' visibility='default' filepath='include/net/sch_generic.h' line='372' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_result' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='272' column='1' id='68d8e236'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='e686dd16' visibility='default' filepath='include/net/sch_generic.h' line='273' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__45' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/sch_generic.h' line='273' column='1' id='e686dd16'>
+        <data-member access='private'>
+          <var-decl name='' type-id='a2699296' visibility='default' filepath='include/net/sch_generic.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='goto_tp' type-id='122b71ba' visibility='default' filepath='include/net/sch_generic.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='c2617f12' visibility='default' filepath='include/net/sch_generic.h' line='281' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__18' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sch_generic.h' line='274' column='1' id='a2699296'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='class' type-id='7359adad' visibility='default' filepath='include/net/sch_generic.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='classid' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='276' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__19' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sch_generic.h' line='281' column='1' id='c2617f12'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ingress' type-id='b50a4934' visibility='default' filepath='include/net/sch_generic.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='qstats' type-id='338303f5' visibility='default' filepath='include/net/sch_generic.h' line='283' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gnet_stats_queue' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='62' column='1' id='a212a715'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='qlen' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='backlog' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='drops' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='requeues' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='overlimits' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_proto_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='290' column='1' id='bd4e4ac8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/net/sch_generic.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kind' type-id='ac1fa8c0' visibility='default' filepath='include/net/sch_generic.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='classify' type-id='624375a3' visibility='default' filepath='include/net/sch_generic.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='init' type-id='98f35cbb' visibility='default' filepath='include/net/sch_generic.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='destroy' type-id='59f6a07a' visibility='default' filepath='include/net/sch_generic.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get' type-id='94c16fa5' visibility='default' filepath='include/net/sch_generic.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='put' type-id='825ef190' visibility='default' filepath='include/net/sch_generic.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='change' type-id='6266601d' visibility='default' filepath='include/net/sch_generic.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='delete' type-id='42c362d1' visibility='default' filepath='include/net/sch_generic.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='delete_empty' type-id='a4cbdcd9' visibility='default' filepath='include/net/sch_generic.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='walk' type-id='4ffa0523' visibility='default' filepath='include/net/sch_generic.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reoffload' type-id='a852a9de' visibility='default' filepath='include/net/sch_generic.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='hw_add' type-id='825ef190' visibility='default' filepath='include/net/sch_generic.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hw_del' type-id='825ef190' visibility='default' filepath='include/net/sch_generic.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bind_class' type-id='f590d4d9' visibility='default' filepath='include/net/sch_generic.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='tmplt_create' type-id='938abf68' visibility='default' filepath='include/net/sch_generic.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tmplt_destroy' type-id='b7f9d8e6' visibility='default' filepath='include/net/sch_generic.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='dump' type-id='69b48c13' visibility='default' filepath='include/net/sch_generic.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='tmplt_dump' type-id='d18dbee4' visibility='default' filepath='include/net/sch_generic.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/sch_generic.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/net/sch_generic.h' line='338' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='flow_setup_cb_t' type-id='1322ddb6' filepath='include/net/flow_offload.h' line='300' column='1' id='11d6bd91'/>
+      <class-decl name='tcf_chain' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='387' column='1' id='1546c604'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filter_chain_lock' type-id='925167dc' visibility='default' filepath='include/net/sch_generic.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='filter_chain' type-id='6dca061b' visibility='default' filepath='include/net/sch_generic.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/sch_generic.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='block' type-id='13ef4686' visibility='default' filepath='include/net/sch_generic.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='index' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='refcnt' type-id='f0981eeb' visibility='default' filepath='include/net/sch_generic.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='action_refcnt' type-id='f0981eeb' visibility='default' filepath='include/net/sch_generic.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='explicitly_created' type-id='b50a4934' visibility='default' filepath='include/net/sch_generic.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='616'>
+          <var-decl name='flushing' type-id='b50a4934' visibility='default' filepath='include/net/sch_generic.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tmplt_ops' type-id='e12279e7' visibility='default' filepath='include/net/sch_generic.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tmplt_priv' type-id='eaa32e2f' visibility='default' filepath='include/net/sch_generic.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sch_generic.h' line='400' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_block' size-in-bits='10176' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='403' column='1' id='16c50f80'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/net/sch_generic.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='chain_list' type-id='72f469ec' visibility='default' filepath='include/net/sch_generic.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='index' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='classid' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/sch_generic.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='net' type-id='a2bff677' visibility='default' filepath='include/net/sch_generic.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='q' type-id='ee40620a' visibility='default' filepath='include/net/sch_generic.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cb_lock' type-id='f19fdb93' visibility='default' filepath='include/net/sch_generic.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='flow_block' type-id='bc545b43' visibility='default' filepath='include/net/sch_generic.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='owner_list' type-id='72f469ec' visibility='default' filepath='include/net/sch_generic.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='keep_dst' type-id='b50a4934' visibility='default' filepath='include/net/sch_generic.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='offloadcnt' type-id='49178f86' visibility='default' filepath='include/net/sch_generic.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='nooffloaddevcnt' type-id='f0981eeb' visibility='default' filepath='include/net/sch_generic.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='lockeddevcnt' type-id='f0981eeb' visibility='default' filepath='include/net/sch_generic.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='chain0' type-id='894533b3' visibility='default' filepath='include/net/sch_generic.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sch_generic.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='proto_destroy_ht' type-id='64f4baeb' visibility='default' filepath='include/net/sch_generic.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='proto_destroy_lock' type-id='925167dc' visibility='default' filepath='include/net/sch_generic.h' line='427' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='Qdisc' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='57' column='1' id='85c22422'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enqueue' type-id='3d6e005b' visibility='default' filepath='include/net/sch_generic.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dequeue' type-id='3d95b5f6' visibility='default' filepath='include/net/sch_generic.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/net/sch_generic.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='limit' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='aa7f9205' visibility='default' filepath='include/net/sch_generic.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='stab' type-id='2e2106be' visibility='default' filepath='include/net/sch_generic.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hash' type-id='03a4a074' visibility='default' filepath='include/net/sch_generic.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='handle' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='parent' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev_queue' type-id='35b28c4f' visibility='default' filepath='include/net/sch_generic.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rate_est' type-id='8c1bb0b4' visibility='default' filepath='include/net/sch_generic.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cpu_bstats' type-id='b3542b31' visibility='default' filepath='include/net/sch_generic.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='cpu_qstats' type-id='338303f5' visibility='default' filepath='include/net/sch_generic.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='padded' type-id='95e97e5e' visibility='default' filepath='include/net/sch_generic.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/sch_generic.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='gso_skb' type-id='e61c85d0' visibility='default' filepath='include/net/sch_generic.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='q' type-id='d34f2f01' visibility='default' filepath='include/net/sch_generic.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='bstats' type-id='1f9b1a31' visibility='default' filepath='include/net/sch_generic.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='running' type-id='e14c3b11' visibility='default' filepath='include/net/sch_generic.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='qstats' type-id='a212a715' visibility='default' filepath='include/net/sch_generic.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/net/sch_generic.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='next_sched' type-id='ee40620a' visibility='default' filepath='include/net/sch_generic.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='skb_bad_txq' type-id='e61c85d0' visibility='default' filepath='include/net/sch_generic.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='busylock' type-id='fb4018a0' visibility='default' filepath='include/net/sch_generic.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='seqlock' type-id='fb4018a0' visibility='default' filepath='include/net/sch_generic.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='empty' type-id='b50a4934' visibility='default' filepath='include/net/sch_generic.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sch_generic.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='Qdisc_ops' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='235' column='1' id='47692c1a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='d6369c88' visibility='default' filepath='include/net/sch_generic.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cl_ops' type-id='bb5ee79c' visibility='default' filepath='include/net/sch_generic.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='ac1fa8c0' visibility='default' filepath='include/net/sch_generic.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='priv_size' type-id='95e97e5e' visibility='default' filepath='include/net/sch_generic.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='static_flags' type-id='f0981eeb' visibility='default' filepath='include/net/sch_generic.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='enqueue' type-id='3d6e005b' visibility='default' filepath='include/net/sch_generic.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dequeue' type-id='3d95b5f6' visibility='default' filepath='include/net/sch_generic.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='peek' type-id='3d95b5f6' visibility='default' filepath='include/net/sch_generic.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='init' type-id='a84eb241' visibility='default' filepath='include/net/sch_generic.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reset' type-id='5b4e5af0' visibility='default' filepath='include/net/sch_generic.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='destroy' type-id='5b4e5af0' visibility='default' filepath='include/net/sch_generic.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='change' type-id='a84eb241' visibility='default' filepath='include/net/sch_generic.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='attach' type-id='5b4e5af0' visibility='default' filepath='include/net/sch_generic.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='change_tx_queue_len' type-id='a959128b' visibility='default' filepath='include/net/sch_generic.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dump' type-id='612567ad' visibility='default' filepath='include/net/sch_generic.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dump_stats' type-id='edfa28b2' visibility='default' filepath='include/net/sch_generic.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ingress_block_set' type-id='03862e5f' visibility='default' filepath='include/net/sch_generic.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='egress_block_set' type-id='03862e5f' visibility='default' filepath='include/net/sch_generic.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ingress_block_get' type-id='c021fd31' visibility='default' filepath='include/net/sch_generic.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='egress_block_get' type-id='c021fd31' visibility='default' filepath='include/net/sch_generic.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/sch_generic.h' line='268' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='Qdisc_class_ops' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='195' column='1' id='d9ceb659'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/net/sch_generic.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='select_queue' type-id='98ff7360' visibility='default' filepath='include/net/sch_generic.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='graft' type-id='19bc34e4' visibility='default' filepath='include/net/sch_generic.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='leaf' type-id='c4d81be6' visibility='default' filepath='include/net/sch_generic.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='qlen_notify' type-id='0fb373c0' visibility='default' filepath='include/net/sch_generic.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='find' type-id='b95e1b8d' visibility='default' filepath='include/net/sch_generic.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='change' type-id='c0073bf3' visibility='default' filepath='include/net/sch_generic.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='delete' type-id='d60d5a0f' visibility='default' filepath='include/net/sch_generic.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='walk' type-id='154ec6df' visibility='default' filepath='include/net/sch_generic.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='tcf_block' type-id='da0b22b2' visibility='default' filepath='include/net/sch_generic.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bind_tcf' type-id='4c592849' visibility='default' filepath='include/net/sch_generic.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='unbind_tcf' type-id='0fb373c0' visibility='default' filepath='include/net/sch_generic.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dump' type-id='3c31c59b' visibility='default' filepath='include/net/sch_generic.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dump_stats' type-id='6313cef0' visibility='default' filepath='include/net/sch_generic.h' line='224' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcmsg' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='560' column='1' id='22e47c79'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tcm_family' type-id='002ac4a6' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='tcm__pad1' type-id='002ac4a6' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='tcm__pad2' type-id='8efea9e5' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tcm_ifindex' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tcm_handle' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tcm_parent' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tcm_info' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='571' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gnet_dump' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/gen_stats.h' line='17' column='1' id='65baad60'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='cff2d845' visibility='default' filepath='include/net/gen_stats.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='skb' type-id='0fbf3cfd' visibility='default' filepath='include/net/gen_stats.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tail' type-id='6fcaf91e' visibility='default' filepath='include/net/gen_stats.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='compat_tc_stats' type-id='95e97e5e' visibility='default' filepath='include/net/gen_stats.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='compat_xstats' type-id='95e97e5e' visibility='default' filepath='include/net/gen_stats.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='padattr' type-id='95e97e5e' visibility='default' filepath='include/net/gen_stats.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xstats' type-id='eaa32e2f' visibility='default' filepath='include/net/gen_stats.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='xstats_len' type-id='95e97e5e' visibility='default' filepath='include/net/gen_stats.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tc_stats' type-id='7bef637c' visibility='default' filepath='include/net/gen_stats.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tc_stats' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='34' column='1' id='7bef637c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bytes' type-id='d3130597' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='packets' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='drops' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='overlimits' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='bps' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pps' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='qlen' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='backlog' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qdisc_size_table' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='41' column='1' id='bd1d1d08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sch_generic.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/sch_generic.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='szopts' type-id='c7a2cf9f' visibility='default' filepath='include/net/sch_generic.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcnt' type-id='95e97e5e' visibility='default' filepath='include/net/sch_generic.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='data' type-id='0f300383' visibility='default' filepath='include/net/sch_generic.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tc_sizespec' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='102' column='1' id='c7a2cf9f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cell_log' type-id='002ac4a6' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='size_log' type-id='002ac4a6' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='cell_align' type-id='a2185560' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='overhead' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='linklayer' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mpu' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mtu' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tsize' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gnet_stats_basic_cpu' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/gen_stats.h' line='10' column='1' id='c026ae59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bstats' type-id='1f9b1a31' visibility='default' filepath='include/net/gen_stats.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='syncp' type-id='e4d85780' visibility='default' filepath='include/net/gen_stats.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gnet_stats_basic_packed' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='29' column='1' id='1f9b1a31'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bytes' type-id='d3130597' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='packets' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qdisc_skb_head' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='50' column='1' id='d34f2f01'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='0fbf3cfd' visibility='default' filepath='include/net/sch_generic.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tail' type-id='0fbf3cfd' visibility='default' filepath='include/net/sch_generic.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='qlen' type-id='3f1a6b60' visibility='default' filepath='include/net/sch_generic.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/sch_generic.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='flow_block' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/flow_offload.h' line='281' column='1' id='bc545b43'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cb_list' type-id='72f469ec' visibility='default' filepath='include/net/flow_offload.h' line='282' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__20' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sch_generic.h' line='421' column='1' id='894533b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chain' type-id='45305972' visibility='default' filepath='include/net/sch_generic.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='filter_chain_list' type-id='72f469ec' visibility='default' filepath='include/net/sch_generic.h' line='423' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='__anonymous_enum__1' is-anonymous='yes' filepath='include/linux/netdevice.h' line='2030' column='1' id='40ed39d3'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NETREG_UNINITIALIZED' value='0'/>
+        <enumerator name='NETREG_REGISTERED' value='1'/>
+        <enumerator name='NETREG_UNREGISTERING' value='2'/>
+        <enumerator name='NETREG_UNREGISTERED' value='3'/>
+        <enumerator name='NETREG_RELEASED' value='4'/>
+        <enumerator name='NETREG_DUMMY' value='5'/>
+      </enum-decl>
+      <enum-decl name='__anonymous_enum__2' is-anonymous='yes' filepath='include/linux/netdevice.h' line='2040' column='1' id='3fed383f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RTNL_LINK_INITIALIZED' value='0'/>
+        <enumerator name='RTNL_LINK_INITIALIZING' value='1'/>
+      </enum-decl>
+      <class-decl name='napi_struct' size-in-bits='3392' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='322' column='1' id='291e3bb5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='poll_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='weight' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='gro_bitmask' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='poll' type-id='f07d90b4' visibility='default' filepath='include/linux/netdevice.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/linux/netdevice.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='gro_hash' type-id='91671be8' visibility='default' filepath='include/linux/netdevice.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='skb' type-id='0fbf3cfd' visibility='default' filepath='include/linux/netdevice.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='rx_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='rx_count' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='timer' type-id='b6993efc' visibility='default' filepath='include/linux/netdevice.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='dev_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='napi_hash_node' type-id='03a4a074' visibility='default' filepath='include/linux/netdevice.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='napi_id' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='351' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gro_list' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='308' column='1' id='b9535066'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='310' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='xdp_mem_type' filepath='include/net/xdp.h' line='36' column='1' id='8abc4a7f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MEM_TYPE_PAGE_SHARED' value='0'/>
+        <enumerator name='MEM_TYPE_PAGE_ORDER0' value='1'/>
+        <enumerator name='MEM_TYPE_PAGE_POOL' value='2'/>
+        <enumerator name='MEM_TYPE_ZERO_COPY' value='3'/>
+        <enumerator name='MEM_TYPE_MAX' value='4'/>
+      </enum-decl>
+      <enum-decl name='gro_result' filepath='include/linux/netdevice.h' line='374' column='1' id='3facc5aa'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='GRO_MERGED' value='0'/>
+        <enumerator name='GRO_MERGED_FREE' value='1'/>
+        <enumerator name='GRO_HELD' value='2'/>
+        <enumerator name='GRO_NORMAL' value='3'/>
+        <enumerator name='GRO_DROP' value='4'/>
+        <enumerator name='GRO_CONSUMED' value='5'/>
+      </enum-decl>
+      <class-decl name='xdp_buff' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/xdp.h' line='66' column='1' id='175944cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/net/xdp.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data_end' type-id='eaa32e2f' visibility='default' filepath='include/net/xdp.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data_meta' type-id='eaa32e2f' visibility='default' filepath='include/net/xdp.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data_hard_start' type-id='eaa32e2f' visibility='default' filepath='include/net/xdp.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='handle' type-id='7359adad' visibility='default' filepath='include/net/xdp.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rxq' type-id='8e35a44c' visibility='default' filepath='include/net/xdp.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='85c22422' size-in-bits='64' id='ee40620a'/>
+      <pointer-type-def type-id='77780344' size-in-bits='64' id='c4d81be6'/>
+      <pointer-type-def type-id='ee40620a' size-in-bits='64' id='325a7d19'/>
+      <pointer-type-def type-id='47692c1a' size-in-bits='64' id='d6369c88'/>
+      <pointer-type-def type-id='8a1373a3' size-in-bits='64' id='368d43d3'/>
+      <pointer-type-def type-id='88565f1f' size-in-bits='64' id='2fcb9b17'/>
+      <pointer-type-def type-id='00ee50b8' size-in-bits='64' id='0928d5d6'/>
+      <pointer-type-def type-id='22474385' size-in-bits='64' id='d079c835'/>
+      <pointer-type-def type-id='facd5339' size-in-bits='64' id='bdcee7af'/>
+      <pointer-type-def type-id='bdcee7af' size-in-bits='64' id='50b674cc'/>
+      <pointer-type-def type-id='09d9fab9' size-in-bits='64' id='1e6beae1'/>
+      <pointer-type-def type-id='eef53362' size-in-bits='64' id='11f19dd0'/>
+      <pointer-type-def type-id='7af446cc' size-in-bits='64' id='fbf2ba3a'/>
+      <pointer-type-def type-id='36313ee4' size-in-bits='64' id='f3f553e2'/>
+      <qualified-type-def type-id='d9ceb659' const='yes' id='170bab5e'/>
+      <pointer-type-def type-id='170bab5e' size-in-bits='64' id='bb5ee79c'/>
+      <qualified-type-def type-id='47692c1a' const='yes' id='2212bd2d'/>
+      <pointer-type-def type-id='2212bd2d' size-in-bits='64' id='aa7f9205'/>
+      <qualified-type-def type-id='8eb8eec2' const='yes' id='326f37e2'/>
+      <pointer-type-def type-id='326f37e2' size-in-bits='64' id='2d14cfd8'/>
+      <qualified-type-def type-id='8c2bf2b2' const='yes' id='cfd499ab'/>
+      <pointer-type-def type-id='cfd499ab' size-in-bits='64' id='acada613'/>
+      <qualified-type-def type-id='facd5339' const='yes' id='728100fd'/>
+      <pointer-type-def type-id='728100fd' size-in-bits='64' id='18145275'/>
+      <qualified-type-def type-id='9a1fed7b' const='yes' id='b9a01bd6'/>
+      <pointer-type-def type-id='b9a01bd6' size-in-bits='64' id='330c0db4'/>
+      <qualified-type-def type-id='2117397c' const='yes' id='7d20a6e7'/>
+      <pointer-type-def type-id='7d20a6e7' size-in-bits='64' id='c76694b7'/>
+      <qualified-type-def type-id='5919d6b5' const='yes' id='3d647412'/>
+      <pointer-type-def type-id='3d647412' size-in-bits='64' id='dd22f428'/>
+      <qualified-type-def type-id='06dfa6bb' const='yes' id='e4083e44'/>
+      <pointer-type-def type-id='e4083e44' size-in-bits='64' id='66fa472a'/>
+      <qualified-type-def type-id='da0e76a1' const='yes' id='e5d19dc8'/>
+      <pointer-type-def type-id='e5d19dc8' size-in-bits='64' id='b5fb9c18'/>
+      <qualified-type-def type-id='a7502152' const='yes' id='9df06605'/>
+      <pointer-type-def type-id='9df06605' size-in-bits='64' id='d070dbfd'/>
+      <qualified-type-def type-id='4e0399c2' const='yes' id='a87d8ed1'/>
+      <pointer-type-def type-id='a87d8ed1' size-in-bits='64' id='38a81521'/>
+      <qualified-type-def type-id='1c03d197' const='yes' id='aa2a8a9e'/>
+      <pointer-type-def type-id='aa2a8a9e' size-in-bits='64' id='94f8595c'/>
+      <qualified-type-def type-id='ad499564' const='yes' id='9954f7ad'/>
+      <pointer-type-def type-id='9954f7ad' size-in-bits='64' id='e7c1a985'/>
+      <qualified-type-def type-id='a240f41e' const='yes' id='17644e8c'/>
+      <pointer-type-def type-id='17644e8c' size-in-bits='64' id='78e7cf52'/>
+      <qualified-type-def type-id='17992e3b' const='yes' id='59db43b4'/>
+      <pointer-type-def type-id='59db43b4' size-in-bits='64' id='122b71ba'/>
+      <qualified-type-def type-id='bd4e4ac8' const='yes' id='94052af7'/>
+      <pointer-type-def type-id='94052af7' size-in-bits='64' id='e12279e7'/>
+      <qualified-type-def type-id='9a401bb0' const='yes' id='3d6abfbb'/>
+      <pointer-type-def type-id='3d6abfbb' size-in-bits='64' id='400b9143'/>
+      <qualified-type-def type-id='972f40bf' const='yes' id='9819baf4'/>
+      <pointer-type-def type-id='9819baf4' size-in-bits='64' id='4e812b7a'/>
+      <qualified-type-def type-id='faf1ab29' const='yes' id='9d07f7d6'/>
+      <pointer-type-def type-id='9d07f7d6' size-in-bits='64' id='2f8b61b4'/>
+      <pointer-type-def type-id='772a4ddf' size-in-bits='64' id='141b6427'/>
+      <pointer-type-def type-id='e51de182' size-in-bits='64' id='8eff91b0'/>
+      <pointer-type-def type-id='faaac7a6' size-in-bits='64' id='fe454a76'/>
+      <pointer-type-def type-id='9f30e4ad' size-in-bits='64' id='f7b83e6d'/>
+      <pointer-type-def type-id='18f5da66' size-in-bits='64' id='e6f0ce4c'/>
+      <pointer-type-def type-id='e92f1a2f' size-in-bits='64' id='aa804387'/>
+      <pointer-type-def type-id='ef45f063' size-in-bits='64' id='74f101b1'/>
+      <pointer-type-def type-id='94b5478d' size-in-bits='64' id='87447c2d'/>
+      <pointer-type-def type-id='284260b8' size-in-bits='64' id='cba1f2de'/>
+      <pointer-type-def type-id='e079fe2a' size-in-bits='64' id='a68064b2'/>
+      <pointer-type-def type-id='11d6bd91' size-in-bits='64' id='18a1ba64'/>
+      <pointer-type-def type-id='2117397c' size-in-bits='64' id='b1fd62ba'/>
+      <pointer-type-def type-id='ba046e9a' size-in-bits='64' id='09c59e98'/>
+      <pointer-type-def type-id='65baad60' size-in-bits='64' id='7ca29816'/>
+      <pointer-type-def type-id='c026ae59' size-in-bits='64' id='b3542b31'/>
+      <pointer-type-def type-id='a212a715' size-in-bits='64' id='338303f5'/>
+      <pointer-type-def type-id='1b8801b2' size-in-bits='64' id='6551bd60'/>
+      <pointer-type-def type-id='e4ca98d1' size-in-bits='64' id='793f0d19'/>
+      <pointer-type-def type-id='1883cd3d' size-in-bits='64' id='034d7ded'/>
+      <pointer-type-def type-id='cc23d6f1' size-in-bits='64' id='d1ca3a89'/>
+      <pointer-type-def type-id='f6ed712a' size-in-bits='64' id='ed512028'/>
+      <pointer-type-def type-id='8db8de2c' size-in-bits='64' id='f026b16c'/>
+      <pointer-type-def type-id='af2c6a56' size-in-bits='64' id='b7ab21fc'/>
+      <pointer-type-def type-id='12afeb30' size-in-bits='64' id='edfa28b2'/>
+      <pointer-type-def type-id='15aa5ecd' size-in-bits='64' id='a84eb241'/>
+      <pointer-type-def type-id='1d4f5209' size-in-bits='64' id='612567ad'/>
+      <pointer-type-def type-id='9c757b77' size-in-bits='64' id='c0073bf3'/>
+      <pointer-type-def type-id='a46a9227' size-in-bits='64' id='a959128b'/>
+      <pointer-type-def type-id='c393ee9b' size-in-bits='64' id='d60d5a0f'/>
+      <pointer-type-def type-id='74c76c4a' size-in-bits='64' id='19bc34e4'/>
+      <pointer-type-def type-id='83d13e0e' size-in-bits='64' id='6313cef0'/>
+      <pointer-type-def type-id='23ce80b7' size-in-bits='64' id='3c31c59b'/>
+      <pointer-type-def type-id='87461f69' size-in-bits='64' id='eddbe2ad'/>
+      <pointer-type-def type-id='5931aad5' size-in-bits='64' id='58505a39'/>
+      <pointer-type-def type-id='5fffc559' size-in-bits='64' id='beb4f24d'/>
+      <pointer-type-def type-id='d328415c' size-in-bits='64' id='cd05c94e'/>
+      <pointer-type-def type-id='df587ad7' size-in-bits='64' id='42bc911b'/>
+      <pointer-type-def type-id='0477141b' size-in-bits='64' id='98a3b427'/>
+      <pointer-type-def type-id='a72f8b53' size-in-bits='64' id='9ce2e6e7'/>
+      <pointer-type-def type-id='648adb0a' size-in-bits='64' id='33356d2c'/>
+      <pointer-type-def type-id='fe695434' size-in-bits='64' id='72fd300e'/>
+      <pointer-type-def type-id='7a3aa0c8' size-in-bits='64' id='41323fc2'/>
+      <pointer-type-def type-id='47308153' size-in-bits='64' id='3eef3bc7'/>
+      <pointer-type-def type-id='016b3662' size-in-bits='64' id='f07d90b4'/>
+      <pointer-type-def type-id='4eb067f4' size-in-bits='64' id='8eff9c66'/>
+      <pointer-type-def type-id='38a112d0' size-in-bits='64' id='a57789c2'/>
+      <pointer-type-def type-id='a39e0090' size-in-bits='64' id='9def3eca'/>
+      <pointer-type-def type-id='7ae39c29' size-in-bits='64' id='6266601d'/>
+      <pointer-type-def type-id='f3f27ff7' size-in-bits='64' id='69b48c13'/>
+      <pointer-type-def type-id='f18c6e1f' size-in-bits='64' id='9264da33'/>
+      <pointer-type-def type-id='86a0b663' size-in-bits='64' id='0c197ddf'/>
+      <pointer-type-def type-id='918604f1' size-in-bits='64' id='d2e00785'/>
+      <pointer-type-def type-id='972398b7' size-in-bits='64' id='3d6e005b'/>
+      <pointer-type-def type-id='bd9eea97' size-in-bits='64' id='624375a3'/>
+      <pointer-type-def type-id='0332edd2' size-in-bits='64' id='d18dbee4'/>
+      <pointer-type-def type-id='3c813efb' size-in-bits='64' id='55530c47'/>
+      <pointer-type-def type-id='ca0a6184' size-in-bits='64' id='95208a5e'/>
+      <pointer-type-def type-id='1f17d624' size-in-bits='64' id='e0fadd76'/>
+      <pointer-type-def type-id='bcdeebc9' size-in-bits='64' id='bc1bf185'/>
+      <pointer-type-def type-id='ec50bf48' size-in-bits='64' id='08113f0a'/>
+      <pointer-type-def type-id='476a87f5' size-in-bits='64' id='1df08751'/>
+      <pointer-type-def type-id='ce67f06c' size-in-bits='64' id='74e71fae'/>
+      <pointer-type-def type-id='6858ea97' size-in-bits='64' id='65399e23'/>
+      <pointer-type-def type-id='0f40f777' size-in-bits='64' id='8755cc63'/>
+      <pointer-type-def type-id='0be333ab' size-in-bits='64' id='a0f5247f'/>
+      <pointer-type-def type-id='e8300215' size-in-bits='64' id='1d8e5a11'/>
+      <pointer-type-def type-id='eb19b127' size-in-bits='64' id='c25ed103'/>
+      <pointer-type-def type-id='6f52f27f' size-in-bits='64' id='20da830b'/>
+      <pointer-type-def type-id='4d6fc4c7' size-in-bits='64' id='078de3a3'/>
+      <pointer-type-def type-id='b86ed83e' size-in-bits='64' id='27936440'/>
+      <pointer-type-def type-id='88b7b5d3' size-in-bits='64' id='6dfd92af'/>
+      <pointer-type-def type-id='202f00af' size-in-bits='64' id='a9c0cdab'/>
+      <pointer-type-def type-id='708a4426' size-in-bits='64' id='82ffa5a0'/>
+      <pointer-type-def type-id='5dc99a0e' size-in-bits='64' id='f38728c0'/>
+      <pointer-type-def type-id='cce3f5a3' size-in-bits='64' id='93abc02f'/>
+      <pointer-type-def type-id='a6ad86be' size-in-bits='64' id='c9664af8'/>
+      <pointer-type-def type-id='3a5c2153' size-in-bits='64' id='be6c7be7'/>
+      <pointer-type-def type-id='abc85e8f' size-in-bits='64' id='be3a232b'/>
+      <pointer-type-def type-id='9d9592f7' size-in-bits='64' id='2136470b'/>
+      <pointer-type-def type-id='bf6a2c5c' size-in-bits='64' id='82a9a11e'/>
+      <pointer-type-def type-id='d11dd9c4' size-in-bits='64' id='d78dd406'/>
+      <pointer-type-def type-id='d8488877' size-in-bits='64' id='98f35cbb'/>
+      <pointer-type-def type-id='6cb7d4e4' size-in-bits='64' id='a852a9de'/>
+      <pointer-type-def type-id='21f5310d' size-in-bits='64' id='42c362d1'/>
+      <pointer-type-def type-id='18da11bd' size-in-bits='64' id='c1655339'/>
+      <pointer-type-def type-id='1b8c67aa' size-in-bits='64' id='0642cb3c'/>
+      <pointer-type-def type-id='389d1e82' size-in-bits='64' id='5e185d4c'/>
+      <pointer-type-def type-id='0286989c' size-in-bits='64' id='ae9790c6'/>
+      <pointer-type-def type-id='65fbb133' size-in-bits='64' id='796b13b7'/>
+      <pointer-type-def type-id='08abca50' size-in-bits='64' id='231269da'/>
+      <pointer-type-def type-id='06b4cb39' size-in-bits='64' id='d236d29d'/>
+      <pointer-type-def type-id='b83c8287' size-in-bits='64' id='60f4096f'/>
+      <pointer-type-def type-id='4816a147' size-in-bits='64' id='00c4cbad'/>
+      <pointer-type-def type-id='bd54fe1a' size-in-bits='64' id='3ccc2590'/>
+      <pointer-type-def type-id='44644afc' size-in-bits='64' id='d19f4fca'/>
+      <pointer-type-def type-id='b10d5830' size-in-bits='64' id='b70f37f8'/>
+      <pointer-type-def type-id='ab94745c' size-in-bits='64' id='6b9b777a'/>
+      <pointer-type-def type-id='291e3bb5' size-in-bits='64' id='c50361c5'/>
+      <pointer-type-def type-id='c966252c' size-in-bits='64' id='aa79f31a'/>
+      <pointer-type-def type-id='5919d6b5' size-in-bits='64' id='1bf68965'/>
+      <pointer-type-def type-id='1f305e7e' size-in-bits='64' id='0d378d14'/>
+      <pointer-type-def type-id='1429eee5' size-in-bits='64' id='affe0fe3'/>
+      <pointer-type-def type-id='59a2e4aa' size-in-bits='64' id='3a0389d8'/>
+      <pointer-type-def type-id='aebe1cff' size-in-bits='64' id='6bbe39a7'/>
+      <pointer-type-def type-id='da0e76a1' size-in-bits='64' id='3c330067'/>
+      <pointer-type-def type-id='3c330067' size-in-bits='64' id='104977a4'/>
+      <pointer-type-def type-id='51dbeb7e' size-in-bits='64' id='8c1bb0b4'/>
+      <pointer-type-def type-id='1a196c3e' size-in-bits='64' id='98ff7360'/>
+      <pointer-type-def type-id='b754514f' size-in-bits='64' id='f32120a7'/>
+      <pointer-type-def type-id='b92c8d0d' size-in-bits='64' id='84c6078d'/>
+      <pointer-type-def type-id='fff56995' size-in-bits='64' id='12f283a5'/>
+      <pointer-type-def type-id='12f283a5' size-in-bits='64' id='62c51a1d'/>
+      <pointer-type-def type-id='7203ee09' size-in-bits='64' id='d2524501'/>
+      <pointer-type-def type-id='bd1d1d08' size-in-bits='64' id='2e2106be'/>
+      <pointer-type-def type-id='7f36a7f0' size-in-bits='64' id='a63f3a26'/>
+      <pointer-type-def type-id='51ee3086' size-in-bits='64' id='eb2c56dc'/>
+      <pointer-type-def type-id='2d58d013' size-in-bits='64' id='267580ce'/>
+      <pointer-type-def type-id='1c03d197' size-in-bits='64' id='94c948ef'/>
+      <pointer-type-def type-id='ad499564' size-in-bits='64' id='db994912'/>
+      <pointer-type-def type-id='c0065bf0' size-in-bits='64' id='0f8b1896'/>
+      <pointer-type-def type-id='db281924' size-in-bits='64' id='cc9f99b2'/>
+      <pointer-type-def type-id='384b6d85' size-in-bits='64' id='6ceb7783'/>
+      <pointer-type-def type-id='6ceb7783' size-in-bits='64' id='1ead5d78'/>
+      <pointer-type-def type-id='6aebc4a7' size-in-bits='64' id='c8f5869f'/>
+      <pointer-type-def type-id='c8f5869f' size-in-bits='64' id='0f830eef'/>
+      <pointer-type-def type-id='8470101c' size-in-bits='64' id='3d95b5f6'/>
+      <pointer-type-def type-id='dbc9a936' size-in-bits='64' id='90956edc'/>
+      <pointer-type-def type-id='adb1d973' size-in-bits='64' id='aa8162a3'/>
+      <pointer-type-def type-id='a240f41e' size-in-bits='64' id='f772df6e'/>
+      <pointer-type-def type-id='aec72305' size-in-bits='64' id='67adf9a9'/>
+      <pointer-type-def type-id='f772df6e' size-in-bits='64' id='d0d57cc6'/>
+      <pointer-type-def type-id='f588f6e0' size-in-bits='64' id='e1ea11f6'/>
+      <pointer-type-def type-id='f29d9605' size-in-bits='64' id='e93ad915'/>
+      <pointer-type-def type-id='ff751355' size-in-bits='64' id='1d22b7e5'/>
+      <pointer-type-def type-id='5221b18a' size-in-bits='64' id='5c0abad8'/>
+      <pointer-type-def type-id='ee14fd94' size-in-bits='64' id='13103032'/>
+      <pointer-type-def type-id='8bd06fd9' size-in-bits='64' id='99f34ac1'/>
+      <pointer-type-def type-id='16c50f80' size-in-bits='64' id='13ef4686'/>
+      <pointer-type-def type-id='daae3cc8' size-in-bits='64' id='da0b22b2'/>
+      <pointer-type-def type-id='1546c604' size-in-bits='64' id='45305972'/>
+      <pointer-type-def type-id='17992e3b' size-in-bits='64' id='6dca061b'/>
+      <pointer-type-def type-id='68d8e236' size-in-bits='64' id='e638cd0c'/>
+      <pointer-type-def type-id='9a9d8c1d' size-in-bits='64' id='4c98e95d'/>
+      <pointer-type-def type-id='22e47c79' size-in-bits='64' id='12c1f7e1'/>
+      <pointer-type-def type-id='b8765d15' size-in-bits='64' id='d68ad8b5'/>
+      <pointer-type-def type-id='c9a7d694' size-in-bits='64' id='e93ad56e'/>
+      <pointer-type-def type-id='b9c5fbfc' size-in-bits='64' id='f60e04ee'/>
+      <pointer-type-def type-id='8e2d4615' size-in-bits='64' id='8fbb31d1'/>
+      <pointer-type-def type-id='7c9213d1' size-in-bits='64' id='6ade418d'/>
+      <pointer-type-def type-id='7e5ce7a8' size-in-bits='64' id='3d4d3aba'/>
+      <pointer-type-def type-id='7ad36775' size-in-bits='64' id='bf751261'/>
+      <pointer-type-def type-id='8d6d779c' size-in-bits='64' id='6b0f20ae'/>
+      <pointer-type-def type-id='93a4c7d5' size-in-bits='64' id='a4cbdcd9'/>
+      <pointer-type-def type-id='3ad2f92f' size-in-bits='64' id='b3002d4b'/>
+      <pointer-type-def type-id='c87333bf' size-in-bits='64' id='21641a6b'/>
+      <pointer-type-def type-id='217933b7' size-in-bits='64' id='42b02383'/>
+      <pointer-type-def type-id='756696ad' size-in-bits='64' id='c021fd31'/>
+      <pointer-type-def type-id='8bff8096' size-in-bits='64' id='1f37a7f4'/>
+      <pointer-type-def type-id='9a516b13' size-in-bits='64' id='115daa23'/>
+      <pointer-type-def type-id='6b1203e5' size-in-bits='64' id='e9bf5d35'/>
+      <pointer-type-def type-id='02138eb3' size-in-bits='64' id='3a0c781f'/>
+      <pointer-type-def type-id='98b2ffae' size-in-bits='64' id='531a7450'/>
+      <pointer-type-def type-id='c02c4ff1' size-in-bits='64' id='b95e1b8d'/>
+      <pointer-type-def type-id='da14b6a5' size-in-bits='64' id='4c592849'/>
+      <pointer-type-def type-id='63c3ee86' size-in-bits='64' id='5b4e5af0'/>
+      <pointer-type-def type-id='2707fa43' size-in-bits='64' id='154ec6df'/>
+      <pointer-type-def type-id='58e5bb8b' size-in-bits='64' id='03862e5f'/>
+      <pointer-type-def type-id='5257f496' size-in-bits='64' id='0fb373c0'/>
+      <pointer-type-def type-id='c2e47616' size-in-bits='64' id='0feea528'/>
+      <pointer-type-def type-id='4d3ea3f3' size-in-bits='64' id='b78e9a0f'/>
+      <pointer-type-def type-id='557c51cd' size-in-bits='64' id='29e425c9'/>
+      <pointer-type-def type-id='33ca674b' size-in-bits='64' id='c9214b77'/>
+      <pointer-type-def type-id='a41f849f' size-in-bits='64' id='d3d20d73'/>
+      <pointer-type-def type-id='d8579536' size-in-bits='64' id='28375890'/>
+      <pointer-type-def type-id='6415147f' size-in-bits='64' id='8e78f753'/>
+      <pointer-type-def type-id='99690429' size-in-bits='64' id='1cebc84d'/>
+      <pointer-type-def type-id='d66ae2ca' size-in-bits='64' id='5c4c6144'/>
+      <pointer-type-def type-id='22814d90' size-in-bits='64' id='b249945a'/>
+      <pointer-type-def type-id='8b66a21e' size-in-bits='64' id='841969d0'/>
+      <pointer-type-def type-id='9263c6b3' size-in-bits='64' id='e937debf'/>
+      <pointer-type-def type-id='4e62b18f' size-in-bits='64' id='09f3a86b'/>
+      <pointer-type-def type-id='187fa8c7' size-in-bits='64' id='4ffa0523'/>
+      <pointer-type-def type-id='46adf4c0' size-in-bits='64' id='59f6a07a'/>
+      <pointer-type-def type-id='09f0c826' size-in-bits='64' id='825ef190'/>
+      <pointer-type-def type-id='4aa54e65' size-in-bits='64' id='f590d4d9'/>
+      <pointer-type-def type-id='8edc59cf' size-in-bits='64' id='d507826b'/>
+      <pointer-type-def type-id='751b0878' size-in-bits='64' id='b2edd032'/>
+      <pointer-type-def type-id='bf7aaec7' size-in-bits='64' id='a81671bb'/>
+      <pointer-type-def type-id='f85fb8c6' size-in-bits='64' id='7e17c1b8'/>
+      <pointer-type-def type-id='30a49526' size-in-bits='64' id='938abf68'/>
+      <pointer-type-def type-id='4ede01e9' size-in-bits='64' id='94c16fa5'/>
+      <qualified-type-def type-id='002ac4a6' volatile='yes' id='75a392dc'/>
+      <pointer-type-def type-id='175944cd' size-in-bits='64' id='38ed603d'/>
+      <pointer-type-def type-id='eb0d6f26' size-in-bits='64' id='8e35a44c'/>
+      <pointer-type-def type-id='b4a65d38' size-in-bits='64' id='14a0013e'/>
+      <pointer-type-def type-id='c210d497' size-in-bits='64' id='47a1c9f4'/>
+      <pointer-type-def type-id='4da03818' size-in-bits='64' id='1663a26e'/>
+      <pointer-type-def type-id='307587ae' size-in-bits='64' id='c56b5ee4'/>
+      <pointer-type-def type-id='faa1424f' size-in-bits='64' id='255e0487'/>
+      <pointer-type-def type-id='f9cce85e' size-in-bits='64' id='47541e34'/>
+      <pointer-type-def type-id='ccf6c819' size-in-bits='64' id='ae4d1761'/>
+      <pointer-type-def type-id='b3f5c5f7' size-in-bits='64' id='71411b0f'/>
+      <pointer-type-def type-id='cddfb84e' size-in-bits='64' id='b07c2494'/>
+      <pointer-type-def type-id='cb961c68' size-in-bits='64' id='328dda6e'/>
+      <function-decl name='nla_strlcpy' mangled-name='nla_strlcpy' filepath='include/net/netlink.h' line='442' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nla_strlcpy'>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='0f2a7ce5'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='unregister_netdevice_queue' mangled-name='unregister_netdevice_queue' filepath='include/linux/netdevice.h' line='2689' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_netdevice_queue'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='e84b031a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='napi_schedule_prep' mangled-name='napi_schedule_prep' filepath='include/linux/netdevice.h' line='442' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_schedule_prep'>
+        <parameter type-id='c50361c5'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='netif_rx' mangled-name='netif_rx' filepath='include/linux/netdevice.h' line='3680' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_rx'>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kfree_skb' mangled-name='kfree_skb' filepath='include/linux/skbuff.h' line='1027' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kfree_skb'>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_prog_put' mangled-name='bpf_prog_put' filepath='include/linux/bpf.h' line='643' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_prog_put'>
+        <parameter type-id='bdcee7af'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xdp_return_frame_rx_napi' mangled-name='xdp_return_frame_rx_napi' filepath='include/net/xdp.h' line='129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_return_frame_rx_napi'>
+        <parameter type-id='cb1c5129'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xdp_rxq_info_reg' mangled-name='xdp_rxq_info_reg' filepath='include/net/xdp.h' line='147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_rxq_info_reg'>
+        <parameter type-id='8e35a44c'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xdp_rxq_info_reg_mem_model' mangled-name='xdp_rxq_info_reg_mem_model' filepath='include/net/xdp.h' line='152' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_rxq_info_reg_mem_model'>
+        <parameter type-id='8e35a44c'/>
+        <parameter type-id='8abc4a7f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xdp_rxq_info_unreg' mangled-name='xdp_rxq_info_unreg' filepath='include/net/xdp.h' line='149' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_rxq_info_unreg'>
+        <parameter type-id='8e35a44c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='napi_disable' mangled-name='napi_disable' filepath='include/linux/netdevice.h' line='514' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_disable'>
+        <parameter type-id='c50361c5'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='napi_hash_del' mangled-name='napi_hash_del' filepath='include/linux/netdevice.h' line='505' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_hash_del'>
+        <parameter type-id='c50361c5'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='synchronize_net' mangled-name='synchronize_net' filepath='include/linux/netdevice.h' line='2699' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='synchronize_net'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netif_napi_del' mangled-name='netif_napi_del' filepath='include/linux/netdevice.h' line='2294' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_napi_del'>
+        <parameter type-id='c50361c5'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xdp_return_frame' mangled-name='xdp_return_frame' filepath='include/net/xdp.h' line='128' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_return_frame'>
+        <parameter type-id='cb1c5129'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netif_napi_add' mangled-name='netif_napi_add' filepath='include/linux/netdevice.h' line='2265' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_napi_add'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='c50361c5'/>
+        <parameter type-id='f07d90b4'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='napi_gro_receive' mangled-name='napi_gro_receive' filepath='include/linux/netdevice.h' line='3685' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_gro_receive'>
+        <parameter type-id='c50361c5'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='3facc5aa'/>
+      </function-decl>
+      <function-decl name='napi_complete_done' mangled-name='napi_complete_done' filepath='include/linux/netdevice.h' line='479' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_complete_done'>
+        <parameter type-id='c50361c5'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='xdp_do_flush_map' mangled-name='xdp_do_flush_map' filepath='include/linux/filter.h' line='977' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_do_flush_map'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='arch_bpf_jit_check_func' mangled-name='arch_bpf_jit_check_func' filepath='include/linux/filter.h' line='568' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='arch_bpf_jit_check_func'>
+        <parameter type-id='18145275'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='build_skb' mangled-name='build_skb' filepath='include/linux/skbuff.h' line='1043' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='build_skb'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='skb_put' mangled-name='skb_put' filepath='include/linux/skbuff.h' line='2214' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_put'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='eth_type_trans' mangled-name='eth_type_trans' filepath='include/linux/etherdevice.h' line='32' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='eth_type_trans'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='8efea9e5'/>
+      </function-decl>
+      <function-decl name='xdp_do_redirect' mangled-name='xdp_do_redirect' filepath='include/linux/filter.h' line='974' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_do_redirect'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='38ed603d'/>
+        <parameter type-id='bdcee7af'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xdp_convert_zc_to_xdp_frame' mangled-name='xdp_convert_zc_to_xdp_frame' filepath='include/net/xdp.h' line='94' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_convert_zc_to_xdp_frame'>
+        <parameter type-id='38ed603d'/>
+        <return type-id='cb1c5129'/>
+      </function-decl>
+      <function-decl name='sched_clock' mangled-name='sched_clock' filepath='include/linux/sched/clock.h' line='15' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sched_clock'>
+        <return type-id='3a47d82b'/>
+      </function-decl>
+      <function-decl name='bpf_warn_invalid_xdp_action' mangled-name='bpf_warn_invalid_xdp_action' filepath='include/linux/filter.h' line='979' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_warn_invalid_xdp_action'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_copy_bits' mangled-name='skb_copy_bits' filepath='include/linux/skbuff.h' line='3533' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_copy_bits'>
+        <parameter type-id='11f4a000'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rtnl_link_register' mangled-name='rtnl_link_register' filepath='include/net/rtnetlink.h' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_link_register'>
+        <parameter type-id='959ab461'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='77780344'>
+        <parameter type-id='ee40620a'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='ee40620a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='12afeb30'>
+        <parameter type-id='ee40620a'/>
+        <parameter type-id='7ca29816'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='15aa5ecd'>
+        <parameter type-id='ee40620a'/>
+        <parameter type-id='6fcaf91e'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1d4f5209'>
+        <parameter type-id='ee40620a'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9c757b77'>
+        <parameter type-id='ee40620a'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a46a9227'>
+        <parameter type-id='ee40620a'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c393ee9b'>
+        <parameter type-id='ee40620a'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='74c76c4a'>
+        <parameter type-id='ee40620a'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='ee40620a'/>
+        <parameter type-id='325a7d19'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='83d13e0e'>
+        <parameter type-id='ee40620a'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7ca29816'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='23ce80b7'>
+        <parameter type-id='ee40620a'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='12c1f7e1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='87461f69'>
+        <parameter type-id='bdcee7af'/>
+        <parameter type-id='2d14cfd8'/>
+        <parameter type-id='231422bf'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5931aad5'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='aa79f31a'/>
+        <parameter type-id='1bf68965'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5fffc559'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='3c330067'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='1f37a7f4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d328415c'>
+        <parameter type-id='78e7cf52'/>
+        <parameter type-id='94c948ef'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1322ddb6'>
+        <parameter type-id='b3e12f1c'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='df587ad7'>
+        <parameter type-id='87447c2d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0477141b'>
+        <parameter type-id='87447c2d'/>
+        <parameter type-id='cba1f2de'/>
+        <parameter type-id='30864cdc'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a72f8b53'>
+        <parameter type-id='87447c2d'/>
+        <parameter type-id='b1fd62ba'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='648adb0a'>
+        <parameter type-id='87447c2d'/>
+        <parameter type-id='b1fd62ba'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='e6f0ce4c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fe695434'>
+        <parameter type-id='87447c2d'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='cba1f2de'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7a3aa0c8'>
+        <parameter type-id='87447c2d'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='cba1f2de'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='47308153'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='13103032'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='016b3662'>
+        <parameter type-id='c50361c5'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4eb067f4'>
+        <parameter type-id='3c330067'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='38a112d0'>
+        <parameter type-id='3c330067'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a39e0090'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='d504f73d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7ae39c29'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='63e171df'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f3f27ff7'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='12c1f7e1'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f18c6e1f'>
+        <parameter type-id='12f283a5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='86a0b663'>
+        <parameter type-id='267580ce'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='918604f1'>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='972398b7'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='ee40620a'/>
+        <parameter type-id='a10cc675'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bd9eea97'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='122b71ba'/>
+        <parameter type-id='e638cd0c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0332edd2'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3c813efb'>
+        <parameter type-id='f772df6e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ca0a6184'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1f17d624'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bcdeebc9'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ec50bf48'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='476a87f5'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='6b9b777a'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ce67f06c'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='6b9b777a'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6858ea97'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0f40f777'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='267580ce'/>
+        <parameter type-id='514d4e0e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0be333ab'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e8300215'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eb19b127'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='5c0abad8'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6f52f27f'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4d6fc4c7'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='8efea9e5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b86ed83e'>
+        <parameter type-id='13103032'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='88b7b5d3'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='202f00af'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='708a4426'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5dc99a0e'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='6b9b777a'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cce3f5a3'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='6b9b777a'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a6ad86be'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='5c0abad8'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3a5c2153'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='5c0abad8'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='abc85e8f'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='13103032'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9d9592f7'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='13103032'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bf6a2c5c'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d11dd9c4'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d8488877'>
+        <parameter type-id='6dca061b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6cb7d4e4'>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='18a1ba64'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='21f5310d'>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='d8e6b335'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='18da11bd'>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1b8c67aa'>
+        <parameter type-id='328dda6e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='389d1e82'>
+        <parameter type-id='328dda6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0286989c'>
+        <parameter type-id='328dda6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='c76694b7'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='65fbb133'>
+        <parameter type-id='328dda6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='78a133c2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08abca50'>
+        <parameter type-id='328dda6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f9f4b16f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06b4cb39'>
+        <parameter type-id='328dda6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='1f37a7f4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1a196c3e'>
+        <parameter type-id='ee40620a'/>
+        <parameter type-id='12c1f7e1'/>
+        <return type-id='35b28c4f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8470101c'>
+        <parameter type-id='ee40620a'/>
+        <return type-id='0fbf3cfd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aec72305'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='f772df6e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='daae3cc8'>
+        <parameter type-id='ee40620a'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='13ef4686'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c9a7d694'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='13103032'/>
+        <parameter type-id='f0acc909'/>
+        <return type-id='8f254b08'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b9c5fbfc'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='cd1b45ab'/>
+        <return type-id='3f1a6b60'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8e2d4615'>
+        <parameter type-id='b5fb9c18'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7c9213d1'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7e5ce7a8'>
+        <parameter type-id='78e7cf52'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7ad36775'>
+        <parameter type-id='78e7cf52'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8d6d779c'>
+        <parameter type-id='87447c2d'/>
+        <parameter type-id='e6f0ce4c'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='93a4c7d5'>
+        <parameter type-id='6dca061b'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3ad2f92f'>
+        <parameter type-id='87447c2d'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c87333bf'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='b53e8dbb'/>
+        <parameter type-id='15d29710'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='217933b7'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='756696ad'>
+        <parameter type-id='ee40620a'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='02138eb3'>
+        <parameter type-id='a2bff677'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='98b2ffae'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='acada613'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c02c4ff1'>
+        <parameter type-id='ee40620a'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da14b6a5'>
+        <parameter type-id='ee40620a'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='63c3ee86'>
+        <parameter type-id='ee40620a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2707fa43'>
+        <parameter type-id='ee40620a'/>
+        <parameter type-id='a63f3a26'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='58e5bb8b'>
+        <parameter type-id='ee40620a'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5257f496'>
+        <parameter type-id='ee40620a'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c2e47616'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='3c330067'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='dd22f428'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4d3ea3f3'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='bbaf3419'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='557c51cd'>
+        <parameter type-id='94f8595c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='33ca674b'>
+        <parameter type-id='78e7cf52'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a41f849f'>
+        <parameter type-id='78e7cf52'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='94c948ef'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d8579536'>
+        <parameter type-id='a68064b2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6415147f'>
+        <parameter type-id='3c330067'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='99690429'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='d070dbfd'/>
+        <parameter type-id='f026b16c'/>
+        <parameter type-id='ed512028'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='3f1a6b60'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d66ae2ca'>
+        <parameter type-id='12f283a5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='22814d90'>
+        <parameter type-id='94c948ef'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8b66a21e'>
+        <parameter type-id='f772df6e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9263c6b3'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4e62b18f'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='187fa8c7'>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='4c98e95d'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='46adf4c0'>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='09f0c826'>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4aa54e65'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8edc59cf'>
+        <parameter type-id='328dda6e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='751b0878'>
+        <parameter type-id='328dda6e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bf7aaec7'>
+        <parameter type-id='328dda6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f85fb8c6'>
+        <parameter type-id='328dda6e'/>
+        <parameter type-id='78a133c2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='30a49526'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='45305972'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4ede01e9'>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <pointer-type-def type-id='504ee449' size-in-bits='64' id='1583af75'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/net/wireguard/netlink.c' language='LANG_C89'>
+      <function-decl name='genl_unregister_family' mangled-name='genl_unregister_family' filepath='include/net/genetlink.h' line='146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='genl_unregister_family'>
+        <parameter type-id='63d7819b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_get_by_name' mangled-name='dev_get_by_name' filepath='include/linux/netdevice.h' line='2672' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_get_by_name'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='68a2d05c'/>
+      </function-decl>
+      <pointer-type-def type-id='c35ca4f3' size-in-bits='64' id='63d7819b'/>
+      <qualified-type-def type-id='278d8d7c' const='yes' id='c35ca4f3'/>
+      <class-decl name='genl_family' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/genetlink.h' line='46' column='1' id='278d8d7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/net/genetlink.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='hdrsize' type-id='f0981eeb' visibility='default' filepath='include/net/genetlink.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/net/genetlink.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='version' type-id='f0981eeb' visibility='default' filepath='include/net/genetlink.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='maxattr' type-id='f0981eeb' visibility='default' filepath='include/net/genetlink.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='netnsok' type-id='b50a4934' visibility='default' filepath='include/net/genetlink.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='parallel_ops' type-id='b50a4934' visibility='default' filepath='include/net/genetlink.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='policy' type-id='109cdb66' visibility='default' filepath='include/net/genetlink.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pre_doit' type-id='a45ad774' visibility='default' filepath='include/net/genetlink.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='post_doit' type-id='14ba77ef' visibility='default' filepath='include/net/genetlink.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='attrbuf' type-id='30864cdc' visibility='default' filepath='include/net/genetlink.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ops' type-id='8ba26d85' visibility='default' filepath='include/net/genetlink.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mcgrps' type-id='f4bc933f' visibility='default' filepath='include/net/genetlink.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='n_ops' type-id='f0981eeb' visibility='default' filepath='include/net/genetlink.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='n_mcgrps' type-id='f0981eeb' visibility='default' filepath='include/net/genetlink.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mcgrp_offset' type-id='f0981eeb' visibility='default' filepath='include/net/genetlink.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/net/genetlink.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='0aade30f' size-in-bits='64' id='f4bc933f'/>
+      <pointer-type-def type-id='f67ba3ad' size-in-bits='64' id='8ba26d85'/>
+      <pointer-type-def type-id='94bbdcaa' size-in-bits='64' id='a45ad774'/>
+      <pointer-type-def type-id='e1834a73' size-in-bits='64' id='14ba77ef'/>
+      <qualified-type-def type-id='486f930e' const='yes' id='0aade30f'/>
+      <qualified-type-def type-id='83b59630' const='yes' id='f67ba3ad'/>
+      <class-decl name='genl_multicast_group' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/genetlink.h' line='15' column='1' id='486f930e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/net/genetlink.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='genl_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/genetlink.h' line='132' column='1' id='83b59630'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='doit' type-id='8f8224f6' visibility='default' filepath='include/net/genetlink.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='start' type-id='eca40b6e' visibility='default' filepath='include/net/genetlink.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dumpit' type-id='32a663ca' visibility='default' filepath='include/net/genetlink.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='done' type-id='eca40b6e' visibility='default' filepath='include/net/genetlink.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cmd' type-id='f9b06939' visibility='default' filepath='include/net/genetlink.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='internal_flags' type-id='f9b06939' visibility='default' filepath='include/net/genetlink.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/genetlink.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='280'>
+          <var-decl name='validate' type-id='f9b06939' visibility='default' filepath='include/net/genetlink.h' line='142' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7b76bae4' size-in-bits='64' id='8f8224f6'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/net/wireguard/send.c' language='LANG_C89'>
+      <function-decl name='skb_cow_data' mangled-name='skb_cow_data' filepath='include/linux/skbuff.h' line='1133' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_cow_data'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='a10cc675'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_to_sgvec' mangled-name='skb_to_sgvec' filepath='include/linux/skbuff.h' line='1131' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_to_sgvec'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/nvdimm/of_pmem.c' language='LANG_C89'>
+      <class-decl name='nd_region' is-struct='yes' visibility='default' is-declaration-only='yes' id='c7bd5f5c'/>
+      <class-decl name='nvdimm' is-struct='yes' visibility='default' is-declaration-only='yes' id='a1b485c4'/>
+      <class-decl name='nvdimm_bus' is-struct='yes' visibility='default' is-declaration-only='yes' id='e9630e15'/>
+      <class-decl name='nvdimm_bus_descriptor' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/libnvdimm.h' line='82' column='1' id='1b1c4a63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/libnvdimm.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bus_dsm_mask' type-id='7359adad' visibility='default' filepath='include/linux/libnvdimm.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cmd_mask' type-id='7359adad' visibility='default' filepath='include/linux/libnvdimm.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/linux/libnvdimm.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='provider_name' type-id='26a90f95' visibility='default' filepath='include/linux/libnvdimm.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/libnvdimm.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ndctl' type-id='c87493cc' visibility='default' filepath='include/linux/libnvdimm.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flush_probe' type-id='4a00a0f7' visibility='default' filepath='include/linux/libnvdimm.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='clear_to_send' type-id='40b285e2' visibility='default' filepath='include/linux/libnvdimm.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='ndctl_fn' type-id='b4da87d9' filepath='include/linux/libnvdimm.h' line='77' column='1' id='c87493cc'/>
+      <class-decl name='nd_region_desc' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/libnvdimm.h' line='121' column='1' id='c4369844'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='res' type-id='c9d64c0d' visibility='default' filepath='include/linux/libnvdimm.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mapping' type-id='9ac7bdcc' visibility='default' filepath='include/linux/libnvdimm.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_mappings' type-id='1dc6a898' visibility='default' filepath='include/linux/libnvdimm.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='attr_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/libnvdimm.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nd_set' type-id='90e3bb60' visibility='default' filepath='include/linux/libnvdimm.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='provider_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/libnvdimm.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='num_lanes' type-id='95e97e5e' visibility='default' filepath='include/linux/libnvdimm.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='numa_node' type-id='95e97e5e' visibility='default' filepath='include/linux/libnvdimm.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='target_node' type-id='95e97e5e' visibility='default' filepath='include/linux/libnvdimm.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/libnvdimm.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/libnvdimm.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flush' type-id='e8c1d90e' visibility='default' filepath='include/linux/libnvdimm.h' line='133' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nd_mapping_desc' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/libnvdimm.h' line='113' column='1' id='da878766'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nvdimm' type-id='67d012a2' visibility='default' filepath='include/linux/libnvdimm.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='start' type-id='91ce1af9' visibility='default' filepath='include/linux/libnvdimm.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='91ce1af9' visibility='default' filepath='include/linux/libnvdimm.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='position' type-id='95e97e5e' visibility='default' filepath='include/linux/libnvdimm.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nd_interleave_set' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/libnvdimm.h' line='102' column='1' id='f6610cc2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cookie1' type-id='91ce1af9' visibility='default' filepath='include/linux/libnvdimm.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cookie2' type-id='91ce1af9' visibility='default' filepath='include/linux/libnvdimm.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='altcookie' type-id='91ce1af9' visibility='default' filepath='include/linux/libnvdimm.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='type_guid' type-id='7ae02c0a' visibility='default' filepath='include/linux/libnvdimm.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='guid_t' type-id='8425539a' filepath='include/uapi/linux/uuid.h' line='25' column='1' id='7ae02c0a'/>
+      <pointer-type-def type-id='b713976c' size-in-bits='64' id='e8c1d90e'/>
+      <pointer-type-def type-id='f06f451b' size-in-bits='64' id='4a00a0f7'/>
+      <pointer-type-def type-id='411421c8' size-in-bits='64' id='40b285e2'/>
+      <pointer-type-def type-id='3419e4c5' size-in-bits='64' id='b4da87d9'/>
+      <pointer-type-def type-id='f6610cc2' size-in-bits='64' id='90e3bb60'/>
+      <pointer-type-def type-id='da878766' size-in-bits='64' id='9ac7bdcc'/>
+      <pointer-type-def type-id='c7bd5f5c' size-in-bits='64' id='14dc741a'/>
+      <pointer-type-def type-id='c4369844' size-in-bits='64' id='22ab35e2'/>
+      <pointer-type-def type-id='a1b485c4' size-in-bits='64' id='67d012a2'/>
+      <pointer-type-def type-id='e9630e15' size-in-bits='64' id='c7ee6915'/>
+      <pointer-type-def type-id='1b1c4a63' size-in-bits='64' id='0e23c133'/>
+      <function-decl name='nvdimm_bus_register' mangled-name='nvdimm_bus_register' filepath='include/linux/libnvdimm.h' line='213' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvdimm_bus_register'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='0e23c133'/>
+        <return type-id='c7ee6915'/>
+      </function-decl>
+      <function-decl name='nvdimm_pmem_region_create' mangled-name='nvdimm_pmem_region_create' filepath='include/linux/libnvdimm.h' line='250' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvdimm_pmem_region_create'>
+        <parameter type-id='c7ee6915'/>
+        <parameter type-id='22ab35e2'/>
+        <return type-id='14dc741a'/>
+      </function-decl>
+      <function-decl name='nvdimm_bus_unregister' mangled-name='nvdimm_bus_unregister' filepath='include/linux/libnvdimm.h' line='215' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvdimm_bus_unregister'>
+        <parameter type-id='c7ee6915'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='b713976c'>
+        <parameter type-id='14dc741a'/>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f06f451b'>
+        <parameter type-id='0e23c133'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='411421c8'>
+        <parameter type-id='0e23c133'/>
+        <parameter type-id='67d012a2'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3419e4c5'>
+        <parameter type-id='0e23c133'/>
+        <parameter type-id='67d012a2'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/nvdimm/pmem.c' language='LANG_C89'>
+      <class-decl name='blk_mq_tags' is-struct='yes' visibility='default' is-declaration-only='yes' id='8efd3866'/>
+      <class-decl name='badblocks' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/badblocks.h' line='27' column='1' id='cacf0f57'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/badblocks.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/badblocks.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='unacked_exist' type-id='95e97e5e' visibility='default' filepath='include/linux/badblocks.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shift' type-id='95e97e5e' visibility='default' filepath='include/linux/badblocks.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='page' type-id='3df9fd28' visibility='default' filepath='include/linux/badblocks.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='changed' type-id='95e97e5e' visibility='default' filepath='include/linux/badblocks.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/linux/badblocks.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sector' type-id='a42536cd' visibility='default' filepath='include/linux/badblocks.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='size' type-id='a42536cd' visibility='default' filepath='include/linux/badblocks.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__7' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='39' column='1' id='9b26deee'>
+        <data-member access='private'>
+          <var-decl name='iov' type-id='2c556848' visibility='default' filepath='include/linux/uio.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='kvec' type-id='5199c30d' visibility='default' filepath='include/linux/uio.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='bvec' type-id='15c9a01b' visibility='default' filepath='include/linux/uio.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='pipe' type-id='15d29711' visibility='default' filepath='include/linux/uio.h' line='43' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='cacf0f57' size-in-bits='64' id='5760652d'/>
+      <pointer-type-def type-id='9a335021' size-in-bits='64' id='c9c70152'/>
+      <pointer-type-def type-id='8efd3866' size-in-bits='64' id='0461ecf6'/>
+      <pointer-type-def type-id='0461ecf6' size-in-bits='64' id='c527e30e'/>
+      <pointer-type-def type-id='354cb4f1' size-in-bits='64' id='e2656c95'/>
+      <function-decl name='driver_unregister' mangled-name='driver_unregister' filepath='include/linux/device.h' line='424' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='driver_unregister'>
+        <parameter type-id='00c7b870'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_add_action' mangled-name='devm_add_action' filepath='include/linux/device.h' line='987' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_add_action'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='b7f9d8e6'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_cleanup_queue' mangled-name='blk_cleanup_queue' filepath='include/linux/blkdev.h' line='1076' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_cleanup_queue'>
+        <parameter type-id='e7d2a5fd'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_memremap' mangled-name='devm_memremap' filepath='include/linux/io.h' line='78' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_memremap'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='blk_queue_write_cache' mangled-name='blk_queue_write_cache' filepath='include/linux/blkdev.h' line='1118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_write_cache'>
+        <parameter type-id='e7d2a5fd'/>
+        <parameter type-id='c894953d'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_make_request' mangled-name='blk_queue_make_request' filepath='include/linux/blkdev.h' line='1077' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_make_request'>
+        <parameter type-id='e7d2a5fd'/>
+        <parameter type-id='e2656c95'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_physical_block_size' mangled-name='blk_queue_physical_block_size' filepath='include/linux/blkdev.h' line='1092' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_physical_block_size'>
+        <parameter type-id='e7d2a5fd'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_logical_block_size' mangled-name='blk_queue_logical_block_size' filepath='include/linux/blkdev.h' line='1091' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_logical_block_size'>
+        <parameter type-id='e7d2a5fd'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_max_hw_sectors' mangled-name='blk_queue_max_hw_sectors' filepath='include/linux/blkdev.h' line='1079' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_max_hw_sectors'>
+        <parameter type-id='e7d2a5fd'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_flag_set' mangled-name='blk_queue_flag_set' filepath='include/linux/blkdev.h' line='632' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_flag_set'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='e7d2a5fd'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_add_disk' mangled-name='device_add_disk' filepath='include/linux/genhd.h' line='440' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_add_disk'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='33c599db'/>
+        <parameter type-id='c97de1ac'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='del_gendisk' mangled-name='del_gendisk' filepath='include/linux/genhd.h' line='452' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='del_gendisk'>
+        <parameter type-id='33c599db'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='put_disk' mangled-name='put_disk' filepath='include/linux/genhd.h' line='653' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='put_disk'>
+        <parameter type-id='33c599db'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='revalidate_disk' mangled-name='revalidate_disk' filepath='include/linux/fs.h' line='2797' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='revalidate_disk'>
+        <parameter type-id='33c599db'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kernfs_find_and_get_ns' mangled-name='kernfs_find_and_get_ns' filepath='include/linux/kernfs.h' line='336' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernfs_find_and_get_ns'>
+        <parameter type-id='150efd3f'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='150efd3f'/>
+      </function-decl>
+      <function-decl name='kernfs_put' mangled-name='kernfs_put' filepath='include/linux/kernfs.h' line='341' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernfs_put'>
+        <parameter type-id='150efd3f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kernfs_notify' mangled-name='kernfs_notify' filepath='include/linux/kernfs.h' line='381' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernfs_notify'>
+        <parameter type-id='150efd3f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='generic_start_io_acct' mangled-name='generic_start_io_acct' filepath='include/linux/bio.h' line='460' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_start_io_acct'>
+        <parameter type-id='e7d2a5fd'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='84dc82b8'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='generic_end_io_acct' mangled-name='generic_end_io_acct' filepath='include/linux/bio.h' line='462' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_end_io_acct'>
+        <parameter type-id='e7d2a5fd'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='84dc82b8'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bio_endio' mangled-name='bio_endio' filepath='include/linux/bio.h' line='415' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bio_endio'>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_copy_to_iter' mangled-name='_copy_to_iter' filepath='include/linux/uio.h' line='126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_copy_to_iter'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='4fa10f9e'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='page_endio' mangled-name='page_endio' filepath='include/linux/pagemap.h' line='546' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='page_endio'>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='c894953d'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_status_to_errno' mangled-name='blk_status_to_errno' filepath='include/linux/blkdev.h' line='901' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_status_to_errno'>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='badblocks_clear' mangled-name='badblocks_clear' filepath='include/linux/badblocks.h' line='48' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='badblocks_clear'>
+        <parameter type-id='5760652d'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_freeze_queue_start' mangled-name='blk_freeze_queue_start' filepath='include/linux/blk-mq.h' line='334' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_freeze_queue_start'>
+        <parameter type-id='e7d2a5fd'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='354cb4f1'>
+        <parameter type-id='e7d2a5fd'/>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/nvmem/core.c' language='LANG_C89'>
+      <function-decl name='devm_nvmem_device_get' mangled-name='devm_nvmem_device_get' filepath='drivers/nvmem/core.c' line='691' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_nvmem_device_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/nvmem/core.c' line='691' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/nvmem/core.c' line='691' column='1'/>
+        <return type-id='8179bc49'/>
+      </function-decl>
+      <function-decl name='of_nvmem_cell_get' mangled-name='of_nvmem_cell_get' filepath='drivers/nvmem/core.c' line='781' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_nvmem_cell_get'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/nvmem/core.c' line='781' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/nvmem/core.c' line='781' column='1'/>
+        <return type-id='4a4ce85f'/>
+      </function-decl>
+      <function-decl name='devm_nvmem_cell_get' mangled-name='devm_nvmem_cell_get' filepath='drivers/nvmem/core.c' line='861' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_nvmem_cell_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/nvmem/core.c' line='861' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/nvmem/core.c' line='861' column='1'/>
+        <return type-id='4a4ce85f'/>
+      </function-decl>
+      <function-decl name='nvmem_cell_put' mangled-name='nvmem_cell_put' filepath='drivers/nvmem/core.c' line='914' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvmem_cell_put'>
+        <parameter type-id='4a4ce85f' name='cell' filepath='drivers/nvmem/core.c' line='914' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='nvmem_cell_write' mangled-name='nvmem_cell_write' filepath='drivers/nvmem/core.c' line='1070' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvmem_cell_write'>
+        <parameter type-id='4a4ce85f' name='cell' filepath='drivers/nvmem/core.c' line='1070' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='drivers/nvmem/core.c' line='1070' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/nvmem/core.c' line='1070' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='nvmem_cell_read_u32' mangled-name='nvmem_cell_read_u32' filepath='drivers/nvmem/core.c' line='1144' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvmem_cell_read_u32'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/nvmem/core.c' line='1144' column='1'/>
+        <parameter type-id='80f4b756' name='cell_id' filepath='drivers/nvmem/core.c' line='1144' column='1'/>
+        <parameter type-id='f9409001' name='val' filepath='drivers/nvmem/core.c' line='1144' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/of/base.c' language='LANG_C89'>
+      <var-decl name='of_root' type-id='9a537bbe' mangled-name='of_root' visibility='default' filepath='drivers/of/base.c' line='36' column='1' elf-symbol-id='of_root'/>
+      <function-decl name='of_get_compatible_child' mangled-name='of_get_compatible_child' filepath='drivers/of/base.c' line='860' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_compatible_child'>
+        <parameter type-id='0afa6ea3' name='parent' filepath='drivers/of/base.c' line='860' column='1'/>
+        <parameter type-id='80f4b756' name='compatible' filepath='drivers/of/base.c' line='861' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_find_node_by_type' mangled-name='of_find_node_by_type' filepath='drivers/of/base.c' line='1037' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_node_by_type'>
+        <parameter type-id='9a537bbe' name='from' filepath='drivers/of/base.c' line='1037' column='1'/>
+        <parameter type-id='80f4b756' name='type' filepath='drivers/of/base.c' line='1038' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/of/device.c' language='LANG_C89'>
+      <function-decl name='of_dev_put' mangled-name='of_dev_put' filepath='drivers/of/device.c' line='49' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_dev_put'>
+        <parameter type-id='db362995' name='dev' filepath='drivers/of/device.c' line='49' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_device_request_module' mangled-name='of_device_request_module' filepath='drivers/of/device.c' line='239' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_device_request_module'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/of/device.c' line='239' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/of/fdt.c' language='LANG_C89'>
+      <pointer-type-def type-id='9a537bbe' size-in-bits='64' id='856b89fc'/>
+      <function-decl name='of_fdt_unflatten_tree' mangled-name='of_fdt_unflatten_tree' filepath='drivers/of/fdt.c' line='448' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_fdt_unflatten_tree'>
+        <parameter type-id='f9b37274' name='blob' filepath='drivers/of/fdt.c' line='448' column='1'/>
+        <parameter type-id='9a537bbe' name='dad' filepath='drivers/of/fdt.c' line='449' column='1'/>
+        <parameter type-id='856b89fc' name='mynodes' filepath='drivers/of/fdt.c' line='450' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/of/irq.c' language='LANG_C89'>
+      <function-decl name='of_irq_find_parent' mangled-name='of_irq_find_parent' filepath='drivers/of/irq.c' line='54' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_irq_find_parent'>
+        <parameter type-id='9a537bbe' name='child' filepath='drivers/of/irq.c' line='54' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_irq_to_resource' mangled-name='of_irq_to_resource' filepath='drivers/of/irq.c' line='349' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_irq_to_resource'>
+        <parameter type-id='9a537bbe' name='dev' filepath='drivers/of/irq.c' line='349' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/of/irq.c' line='349' column='1'/>
+        <parameter type-id='c9d64c0d' name='r' filepath='drivers/of/irq.c' line='349' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/of/of_reserved_mem.c' language='LANG_C89'>
+      <class-decl name='reserved_mem' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/of_reserved_mem.h' line='10' column='1' id='4fc2605b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/of_reserved_mem.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fdt_node' type-id='7359adad' visibility='default' filepath='include/linux/of_reserved_mem.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='phandle' type-id='7359adad' visibility='default' filepath='include/linux/of_reserved_mem.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='372c0155' visibility='default' filepath='include/linux/of_reserved_mem.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='base' type-id='2522883d' visibility='default' filepath='include/linux/of_reserved_mem.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='size' type-id='2522883d' visibility='default' filepath='include/linux/of_reserved_mem.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/of_reserved_mem.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='reserved_mem_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/of_reserved_mem.h' line='20' column='1' id='9d0cc828'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='device_init' type-id='c3f1f74d' visibility='default' filepath='include/linux/of_reserved_mem.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='device_release' type-id='8e91ceac' visibility='default' filepath='include/linux/of_reserved_mem.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='9d0cc828' const='yes' id='80cb625d'/>
+      <pointer-type-def type-id='80cb625d' size-in-bits='64' id='372c0155'/>
+      <pointer-type-def type-id='76b325f9' size-in-bits='64' id='c3f1f74d'/>
+      <pointer-type-def type-id='4fc2605b' size-in-bits='64' id='f7f718cb'/>
+      <pointer-type-def type-id='24a92232' size-in-bits='64' id='8e91ceac'/>
+      <function-decl name='of_reserved_mem_device_init_by_idx' mangled-name='of_reserved_mem_device_init_by_idx' filepath='drivers/of/of_reserved_mem.c' line='321' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_reserved_mem_device_init_by_idx'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/of/of_reserved_mem.c' line='321' column='1'/>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/of/of_reserved_mem.c' line='322' column='1'/>
+        <parameter type-id='95e97e5e' name='idx' filepath='drivers/of/of_reserved_mem.c' line='322' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_reserved_mem_device_release' mangled-name='of_reserved_mem_device_release' filepath='drivers/of/of_reserved_mem.c' line='376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_reserved_mem_device_release'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/of/of_reserved_mem.c' line='376' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_reserved_mem_lookup' mangled-name='of_reserved_mem_lookup' filepath='drivers/of/of_reserved_mem.c' line='408' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_reserved_mem_lookup'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/of/of_reserved_mem.c' line='408' column='1'/>
+        <return type-id='f7f718cb'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='76b325f9'>
+        <parameter type-id='f7f718cb'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24a92232'>
+        <parameter type-id='f7f718cb'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/of/property.c' language='LANG_C89'>
+      <var-decl name='of_fwnode_ops' type-id='2eb8da02' mangled-name='of_fwnode_ops' visibility='default' filepath='drivers/of/property.c' line='1348' column='1' elf-symbol-id='of_fwnode_ops'/>
+      <function-decl name='of_property_read_variable_u16_array' mangled-name='of_property_read_variable_u16_array' filepath='drivers/of/property.c' line='232' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_read_variable_u16_array'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/property.c' line='232' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/of/property.c' line='233' column='1'/>
+        <parameter type-id='26d4d46f' name='out_values' filepath='drivers/of/property.c' line='233' column='1'/>
+        <parameter type-id='b59d7dce' name='sz_min' filepath='drivers/of/property.c' line='234' column='1'/>
+        <parameter type-id='b59d7dce' name='sz_max' filepath='drivers/of/property.c' line='234' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_property_read_variable_u64_array' mangled-name='of_property_read_variable_u64_array' filepath='drivers/of/property.c' line='351' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_read_variable_u64_array'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/property.c' line='351' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/of/property.c' line='352' column='1'/>
+        <parameter type-id='3df9fd28' name='out_values' filepath='drivers/of/property.c' line='352' column='1'/>
+        <parameter type-id='b59d7dce' name='sz_min' filepath='drivers/of/property.c' line='353' column='1'/>
+        <parameter type-id='b59d7dce' name='sz_max' filepath='drivers/of/property.c' line='353' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_graph_get_endpoint_by_regs' mangled-name='of_graph_get_endpoint_by_regs' filepath='drivers/of/property.c' line='665' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_graph_get_endpoint_by_regs'>
+        <parameter type-id='0afa6ea3' name='parent' filepath='drivers/of/property.c' line='666' column='1'/>
+        <parameter type-id='95e97e5e' name='port_reg' filepath='drivers/of/property.c' line='666' column='1'/>
+        <parameter type-id='95e97e5e' name='reg' filepath='drivers/of/property.c' line='666' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/opp/core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='2040' id='11641789'>
+        <subrange length='255' type-id='7ff19f0f' id='36e7f891'/>
+      </array-type-def>
+      <class-decl name='dev_pm_opp_supply' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/pm_opp.h' line='36' column='1' id='c1ac25a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='u_volt' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='u_volt_min' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='u_volt_max' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='u_amp' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='opp_table_access' filepath='drivers/opp/opp.h' line='115' column='1' id='943b03b5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='OPP_TABLE_ACCESS_UNKNOWN' value='0'/>
+        <enumerator name='OPP_TABLE_ACCESS_EXCLUSIVE' value='1'/>
+        <enumerator name='OPP_TABLE_ACCESS_SHARED' value='2'/>
+      </enum-decl>
+      <class-decl name='dev_pm_set_opp_data' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/pm_opp.h' line='66' column='1' id='d48383c4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='old_opp' type-id='de175b0d' visibility='default' filepath='include/linux/pm_opp.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='new_opp' type-id='de175b0d' visibility='default' filepath='include/linux/pm_opp.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='regulators' type-id='4e034354' visibility='default' filepath='include/linux/pm_opp.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='regulator_count' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_opp.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='include/linux/pm_opp.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/pm_opp.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_opp_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pm_opp.h' line='50' column='1' id='de175b0d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rate' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supplies' type-id='614c5efc' visibility='default' filepath='include/linux/pm_opp.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='02e48bc6' size-in-bits='64' id='79c84484'/>
+      <pointer-type-def type-id='c1ac25a6' size-in-bits='64' id='614c5efc'/>
+      <pointer-type-def type-id='d48383c4' size-in-bits='64' id='7727bbf2'/>
+      <pointer-type-def type-id='4b3ae594' size-in-bits='64' id='c1433076'/>
+      <pointer-type-def type-id='e62a60bd' size-in-bits='64' id='ebb60db5'/>
+      <pointer-type-def type-id='850c13f6' size-in-bits='64' id='4e034354'/>
+      <function-decl name='dev_pm_opp_get_freq' mangled-name='dev_pm_opp_get_freq' filepath='drivers/opp/core.c' line='119' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_get_freq'>
+        <parameter type-id='02e48bc6' name='opp' filepath='drivers/opp/core.c' line='119' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_get_level' mangled-name='dev_pm_opp_get_level' filepath='drivers/opp/core.c' line='137' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_get_level'>
+        <parameter type-id='02e48bc6' name='opp' filepath='drivers/opp/core.c' line='137' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_get_max_transition_latency' mangled-name='dev_pm_opp_get_max_transition_latency' filepath='drivers/opp/core.c' line='270' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_get_max_transition_latency'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='270' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_get_suspend_opp_freq' mangled-name='dev_pm_opp_get_suspend_opp_freq' filepath='drivers/opp/core.c' line='284' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_get_suspend_opp_freq'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='284' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_set_rate' mangled-name='dev_pm_opp_set_rate' filepath='drivers/opp/core.c' line='805' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_set_rate'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='805' column='1'/>
+        <parameter type-id='7359adad' name='target_freq' filepath='drivers/opp/core.c' line='805' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_get_opp_table' mangled-name='dev_pm_opp_get_opp_table' filepath='drivers/opp/core.c' line='1032' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_get_opp_table'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='1032' column='1'/>
+        <return type-id='e62a60bd'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_set_supported_hw' mangled-name='dev_pm_opp_set_supported_hw' filepath='drivers/opp/core.c' line='1433' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_set_supported_hw'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='1433' column='1'/>
+        <parameter type-id='aded214c' name='versions' filepath='drivers/opp/core.c' line='1434' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='drivers/opp/core.c' line='1434' column='1'/>
+        <return type-id='e62a60bd'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_set_regulators' mangled-name='dev_pm_opp_set_regulators' filepath='drivers/opp/core.c' line='1582' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_set_regulators'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='1582' column='1'/>
+        <parameter type-id='13956559' name='names' filepath='drivers/opp/core.c' line='1583' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='drivers/opp/core.c' line='1584' column='1'/>
+        <return type-id='e62a60bd'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_put_regulators' mangled-name='dev_pm_opp_put_regulators' filepath='drivers/opp/core.c' line='1652' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_put_regulators'>
+        <parameter type-id='e62a60bd' name='opp_table' filepath='drivers/opp/core.c' line='1652' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_disable' mangled-name='dev_pm_opp_disable' filepath='drivers/opp/core.c' line='2137' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_disable'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='2137' column='1'/>
+        <parameter type-id='7359adad' name='freq' filepath='drivers/opp/core.c' line='2137' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_register_notifier' mangled-name='dev_pm_opp_register_notifier' filepath='drivers/opp/core.c' line='2150' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_register_notifier'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='2150' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/opp/core.c' line='2150' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_unregister_notifier' mangled-name='dev_pm_opp_unregister_notifier' filepath='drivers/opp/core.c' line='2174' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_unregister_notifier'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='2174' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/opp/core.c' line='2175' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='4b3ae594'>
+        <parameter type-id='7727bbf2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/opp/cpu.c' language='LANG_C89'>
+      <function-decl name='dev_pm_opp_get_sharing_cpus' mangled-name='dev_pm_opp_get_sharing_cpus' filepath='drivers/opp/cpu.c' line='205' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_get_sharing_cpus'>
+        <parameter type-id='fa0b179b' name='cpu_dev' filepath='drivers/opp/cpu.c' line='205' column='1'/>
+        <parameter type-id='74bccedd' name='cpumask' filepath='drivers/opp/cpu.c' line='205' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/opp/of.c' language='LANG_C89'>
+      <function-decl name='dev_pm_opp_of_remove_table' mangled-name='dev_pm_opp_of_remove_table' filepath='drivers/opp/of.c' line='518' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_of_remove_table'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/of.c' line='518' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_of_cpumask_remove_table' mangled-name='dev_pm_opp_of_cpumask_remove_table' filepath='drivers/opp/of.c' line='856' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_of_cpumask_remove_table'>
+        <parameter type-id='5f8a1ac4' name='cpumask' filepath='drivers/opp/of.c' line='856' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_of_cpumask_add_table' mangled-name='dev_pm_opp_of_cpumask_add_table' filepath='drivers/opp/of.c' line='868' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_of_cpumask_add_table'>
+        <parameter type-id='5f8a1ac4' name='cpumask' filepath='drivers/opp/of.c' line='868' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_of_get_sharing_cpus' mangled-name='dev_pm_opp_of_get_sharing_cpus' filepath='drivers/opp/of.c' line='925' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_of_get_sharing_cpus'>
+        <parameter type-id='fa0b179b' name='cpu_dev' filepath='drivers/opp/of.c' line='925' column='1'/>
+        <parameter type-id='74bccedd' name='cpumask' filepath='drivers/opp/of.c' line='926' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/access.c' language='LANG_C89'>
+      <function-decl name='pcie_capability_read_word' mangled-name='pcie_capability_read_word' filepath='drivers/pci/access.c' line='402' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pcie_capability_read_word'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/access.c' line='402' column='1'/>
+        <parameter type-id='95e97e5e' name='pos' filepath='drivers/pci/access.c' line='402' column='1'/>
+        <parameter type-id='26d4d46f' name='val' filepath='drivers/pci/access.c' line='402' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pcie_capability_read_dword' mangled-name='pcie_capability_read_dword' filepath='drivers/pci/access.c' line='437' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pcie_capability_read_dword'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/access.c' line='437' column='1'/>
+        <parameter type-id='95e97e5e' name='pos' filepath='drivers/pci/access.c' line='437' column='1'/>
+        <parameter type-id='f9409001' name='val' filepath='drivers/pci/access.c' line='437' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pcie_capability_write_word' mangled-name='pcie_capability_write_word' filepath='drivers/pci/access.c' line='465' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pcie_capability_write_word'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/access.c' line='465' column='1'/>
+        <parameter type-id='95e97e5e' name='pos' filepath='drivers/pci/access.c' line='465' column='1'/>
+        <parameter type-id='1dc6a898' name='val' filepath='drivers/pci/access.c' line='465' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_write_config_word' mangled-name='pci_write_config_word' filepath='drivers/pci/access.c' line='562' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_write_config_word'>
+        <parameter type-id='947f31e6' name='dev' filepath='drivers/pci/access.c' line='562' column='1'/>
+        <parameter type-id='95e97e5e' name='where' filepath='drivers/pci/access.c' line='562' column='1'/>
+        <parameter type-id='1dc6a898' name='val' filepath='drivers/pci/access.c' line='562' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_write_config_dword' mangled-name='pci_write_config_dword' filepath='drivers/pci/access.c' line='570' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_write_config_dword'>
+        <parameter type-id='947f31e6' name='dev' filepath='drivers/pci/access.c' line='570' column='1'/>
+        <parameter type-id='95e97e5e' name='where' filepath='drivers/pci/access.c' line='570' column='1'/>
+        <parameter type-id='19c2251e' name='val' filepath='drivers/pci/access.c' line='571' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='b86c4e68' size-in-bits='64' id='947f31e6'/>
+      <qualified-type-def type-id='5c93f9a7' const='yes' id='b86c4e68'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/bus.c' language='LANG_C89'>
+      <class-decl name='msi_controller' is-struct='yes' visibility='default' is-declaration-only='yes' id='1f8bceda'/>
+      <qualified-type-def type-id='7e8e008e' const='yes' id='d1ae25b5'/>
+      <pointer-type-def type-id='d1ae25b5' size-in-bits='64' id='b425394d'/>
+      <pointer-type-def type-id='1f8bceda' size-in-bits='64' id='b9526cc2'/>
+      <function-decl name='devm_request_pci_bus_resources' mangled-name='devm_request_pci_bus_resources' filepath='drivers/pci/bus.c' line='93' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_request_pci_bus_resources'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pci/bus.c' line='93' column='1'/>
+        <parameter type-id='e84b031a' name='resources' filepath='drivers/pci/bus.c' line='94' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_bus_add_devices' mangled-name='pci_bus_add_devices' filepath='drivers/pci/bus.c' line='338' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_bus_add_devices'>
+        <parameter type-id='b425394d' name='bus' filepath='drivers/pci/bus.c' line='338' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/controller/dwc/pcie-designware-ep.c' language='LANG_C89'>
+      <function-decl name='of_property_read_variable_u8_array' mangled-name='of_property_read_variable_u8_array' filepath='include/linux/of.h' line='315' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_read_variable_u8_array'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/controller/dwc/pcie-designware-plat.c' language='LANG_C89'>
+      <function-decl name='of_match_device' mangled-name='of_match_device' filepath='include/linux/of_device.h' line='15' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_match_device'>
+        <parameter type-id='e5ce629e'/>
+        <parameter type-id='8df61054'/>
+        <return type-id='e5ce629e'/>
+      </function-decl>
+      <function-decl name='platform_get_resource_byname' mangled-name='platform_get_resource_byname' filepath='include/linux/platform_device.h' line='63' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_get_resource_byname'>
+        <parameter type-id='db362995'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='c9d64c0d'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/controller/dwc/pcie-kirin.c' language='LANG_C89'>
+      <class-decl name='regmap' is-struct='yes' visibility='default' is-declaration-only='yes' id='ddf1687a'/>
+      <enum-decl name='of_gpio_flags' filepath='include/linux/of_gpio.h' line='26' column='1' id='be0d5cf5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='OF_GPIO_ACTIVE_LOW' value='1'/>
+        <enumerator name='OF_GPIO_SINGLE_ENDED' value='2'/>
+        <enumerator name='OF_GPIO_OPEN_DRAIN' value='4'/>
+        <enumerator name='OF_GPIO_TRANSITORY' value='8'/>
+        <enumerator name='OF_GPIO_PULL_UP' value='16'/>
+        <enumerator name='OF_GPIO_PULL_DOWN' value='32'/>
+      </enum-decl>
+      <pointer-type-def type-id='be0d5cf5' size-in-bits='64' id='38fe9344'/>
+      <pointer-type-def type-id='ddf1687a' size-in-bits='64' id='29af9a72'/>
+      <function-decl name='of_get_named_gpio_flags' mangled-name='of_get_named_gpio_flags' filepath='include/linux/of_gpio.h' line='51' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_named_gpio_flags'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='38fe9344'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_write' mangled-name='regmap_write' filepath='include/linux/regmap.h' line='1009' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_write'>
+        <parameter type-id='29af9a72'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_read' mangled-name='regmap_read' filepath='include/linux/regmap.h' line='1024' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_read'>
+        <parameter type-id='29af9a72'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_set_rate' mangled-name='clk_set_rate' filepath='include/linux/clk.h' line='632' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_set_rate'>
+        <parameter type-id='7d0bc0eb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpio_request' mangled-name='gpio_request' filepath='include/asm-generic/gpio.h' line='67' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpio_request'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpio_to_desc' mangled-name='gpio_to_desc' filepath='include/linux/gpio/consumer.h' line='170' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpio_to_desc'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='26760480'/>
+      </function-decl>
+      <function-decl name='gpiod_direction_output_raw' mangled-name='gpiod_direction_output_raw' filepath='include/linux/gpio/consumer.h' line='113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_direction_output_raw'>
+        <parameter type-id='26760480'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dw_pcie_read' mangled-name='dw_pcie_read' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='266' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dw_pcie_read'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dw_pcie_write' mangled-name='dw_pcie_write' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='267' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dw_pcie_write'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/controller/dwc/pcie-qcom.c' language='LANG_C89'>
+      <class-decl name='config_group' is-struct='yes' visibility='default' is-declaration-only='yes' id='f05eea43'/>
+      <class-decl name='gpio_desc' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/gpio/gpiolib.h' line='96' column='1' id='63b74212'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gdev' type-id='fb7dc22d' visibility='default' filepath='drivers/gpio/gpiolib.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='drivers/gpio/gpiolib.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='drivers/gpio/gpiolib.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/gpio/gpiolib.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator' is-struct='yes' visibility='default' is-declaration-only='yes' id='b06eb6f0'/>
+      <class-decl name='reset_control' size-in-bits='384' is-struct='yes' visibility='default' filepath='drivers/reset/core.c' line='40' column='1' id='cdc9541e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcdev' type-id='775147d9' visibility='default' filepath='drivers/reset/core.c' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/reset/core.c' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='drivers/reset/core.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='refcnt' type-id='400fb07b' visibility='default' filepath='drivers/reset/core.c' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='acquired' type-id='b50a4934' visibility='default' filepath='drivers/reset/core.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='shared' type-id='b50a4934' visibility='default' filepath='drivers/reset/core.c' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='array' type-id='b50a4934' visibility='default' filepath='drivers/reset/core.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='deassert_count' type-id='49178f86' visibility='default' filepath='drivers/reset/core.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='triggered_count' type-id='49178f86' visibility='default' filepath='drivers/reset/core.c' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='256' id='1c6311dd'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='384' id='64acd4ce'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='48' id='cf1a4160'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <enum-decl name='gpiod_flags' filepath='include/linux/gpio/consumer.h' line='48' column='1' id='38d4936d'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='GPIOD_ASIS' value='0'/>
+        <enumerator name='GPIOD_IN' value='1'/>
+        <enumerator name='GPIOD_OUT_LOW' value='3'/>
+        <enumerator name='GPIOD_OUT_HIGH' value='7'/>
+        <enumerator name='GPIOD_OUT_LOW_OPEN_DRAIN' value='11'/>
+        <enumerator name='GPIOD_OUT_HIGH_OPEN_DRAIN' value='15'/>
+      </enum-decl>
+      <class-decl name='phy' size-in-bits='7936' is-struct='yes' visibility='default' filepath='include/linux/phy/phy.h' line='130' column='1' id='da10e34c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/phy/phy.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/phy/phy.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='ops' type-id='5424a63a' visibility='default' filepath='include/linux/phy/phy.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/phy/phy.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='init_count' type-id='95e97e5e' visibility='default' filepath='include/linux/phy/phy.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='power_count' type-id='95e97e5e' visibility='default' filepath='include/linux/phy/phy.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='attrs' type-id='2bd806af' visibility='default' filepath='include/linux/phy/phy.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='pwr' type-id='850c13f6' visibility='default' filepath='include/linux/phy/phy.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='phy_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/phy/phy.h' line='66' column='1' id='d4f8274f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init' type-id='83078c32' visibility='default' filepath='include/linux/phy/phy.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='exit' type-id='83078c32' visibility='default' filepath='include/linux/phy/phy.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='power_on' type-id='83078c32' visibility='default' filepath='include/linux/phy/phy.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='power_off' type-id='83078c32' visibility='default' filepath='include/linux/phy/phy.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_mode' type-id='e6dafa73' visibility='default' filepath='include/linux/phy/phy.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='configure' type-id='3f29b13b' visibility='default' filepath='include/linux/phy/phy.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='validate' type-id='dd0d6c38' visibility='default' filepath='include/linux/phy/phy.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='reset' type-id='83078c32' visibility='default' filepath='include/linux/phy/phy.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='calibrate' type-id='83078c32' visibility='default' filepath='include/linux/phy/phy.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='release' type-id='64c19e8b' visibility='default' filepath='include/linux/phy/phy.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/linux/phy/phy.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='phy_mode' filepath='include/linux/phy/phy.h' line='23' column='1' id='79ba09b7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PHY_MODE_INVALID' value='0'/>
+        <enumerator name='PHY_MODE_USB_HOST' value='1'/>
+        <enumerator name='PHY_MODE_USB_HOST_LS' value='2'/>
+        <enumerator name='PHY_MODE_USB_HOST_FS' value='3'/>
+        <enumerator name='PHY_MODE_USB_HOST_HS' value='4'/>
+        <enumerator name='PHY_MODE_USB_HOST_SS' value='5'/>
+        <enumerator name='PHY_MODE_USB_DEVICE' value='6'/>
+        <enumerator name='PHY_MODE_USB_DEVICE_LS' value='7'/>
+        <enumerator name='PHY_MODE_USB_DEVICE_FS' value='8'/>
+        <enumerator name='PHY_MODE_USB_DEVICE_HS' value='9'/>
+        <enumerator name='PHY_MODE_USB_DEVICE_SS' value='10'/>
+        <enumerator name='PHY_MODE_USB_OTG' value='11'/>
+        <enumerator name='PHY_MODE_UFS_HS_A' value='12'/>
+        <enumerator name='PHY_MODE_UFS_HS_B' value='13'/>
+        <enumerator name='PHY_MODE_PCIE' value='14'/>
+        <enumerator name='PHY_MODE_ETHERNET' value='15'/>
+        <enumerator name='PHY_MODE_MIPI_DPHY' value='16'/>
+        <enumerator name='PHY_MODE_SATA' value='17'/>
+      </enum-decl>
+      <class-decl name='phy_configure_opts_mipi_dphy' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='15' column='1' id='b277cad4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clk_miss' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='clk_post' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clk_pre' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='clk_prepare' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='clk_settle' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='clk_term_en' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='clk_trail' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='clk_zero' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='d_term_en' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='eot' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hs_exit' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='hs_prepare' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='hs_settle' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='hs_skip' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hs_trail' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='hs_zero' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='init' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='lpx' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ta_get' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='ta_go' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ta_sure' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='wakeup' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='hs_clk_rate' type-id='7359adad' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='lp_clk_rate' type-id='7359adad' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='lanes' type-id='002ac4a6' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='phy_attrs' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/phy/phy.h' line='114' column='1' id='2bd806af'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bus_width' type-id='19c2251e' visibility='default' filepath='include/linux/phy/phy.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mode' type-id='79ba09b7' visibility='default' filepath='include/linux/phy/phy.h' line='116' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pcie_port' size-in-bits='2304' is-struct='yes' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='165' column='1' id='69ba9ebc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root_bus_nr' type-id='f9b06939' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cfg0_base' type-id='91ce1af9' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='va_cfg0_base' type-id='eaa32e2f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cfg0_size' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cfg1_base' type-id='91ce1af9' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='va_cfg1_base' type-id='eaa32e2f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cfg1_size' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_base' type-id='acc63fdf' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='io_bus_addr' type-id='2522883d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='io_size' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mem_base' type-id='91ce1af9' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='mem_bus_addr' type-id='2522883d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mem_size' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cfg' type-id='c9d64c0d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='io' type-id='c9d64c0d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mem' type-id='c9d64c0d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='busn' type-id='c9d64c0d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ops' type-id='19739a37' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='msi_irq' type-id='95e97e5e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='irq_domain' type-id='7544e825' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='msi_domain' type-id='7544e825' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='msi_data' type-id='cf29c9b3' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='msi_page' type-id='02f11ed4' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='msi_irq_chip' type-id='8846a616' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='num_vectors' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='irq_mask' type-id='1c6311dd' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='root_bus' type-id='d1feb554' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='msi_irq_in_use' type-id='f46d9f4d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='195' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dw_pcie_host_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='152' column='1' id='0647d262'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rd_own_conf' type-id='91669ea4' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wr_own_conf' type-id='01d30b6f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rd_other_conf' type-id='ca79aa7b' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='wr_other_conf' type-id='0f78538e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='host_init' type-id='0681bc12' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='scan_bus' type-id='0603ffcb' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_num_vectors' type-id='0603ffcb' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='msi_host_init' type-id='0681bc12' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='phy_configure_opts' size-in-bits='896' visibility='default' filepath='include/linux/phy/phy.h' line='50' column='1' id='2c7a2d9f'>
+        <data-member access='private'>
+          <var-decl name='mipi_dphy' type-id='b277cad4' visibility='default' filepath='include/linux/phy/phy.h' line='51' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='regulator_bulk_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/regulator/consumer.h' line='167' column='1' id='2e3fb70e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supply' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/consumer.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='consumer' type-id='850c13f6' visibility='default' filepath='include/linux/regulator/consumer.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ret' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/consumer.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clk_bulk_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/clk.h' line='87' column='1' id='158c8c35'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='80f4b756' visibility='default' filepath='include/linux/clk.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='include/linux/clk.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dw_pcie' size-in-bits='3584' is-struct='yes' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='244' column='1' id='1f13c53a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dbi_base' type-id='eaa32e2f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dbi_base2' type-id='eaa32e2f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='atu_base' type-id='eaa32e2f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_viewport' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='iatu_unroll_enabled' type-id='f9b06939' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pp' type-id='69ba9ebc' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='ep' type-id='6d93aa3a' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='ops' type-id='60824330' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='version' type-id='f0981eeb' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='255' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dw_pcie_ep' size-in-bits='832' is-struct='yes' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='211' column='1' id='6d93aa3a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='epc' type-id='108dbc98' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='2beae3fa' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='phys_base' type-id='2522883d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='addr_size' type-id='b59d7dce' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='page_size' type-id='b59d7dce' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bar_to_atu' type-id='cf1a4160' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='outbound_addr' type-id='ff752d64' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ib_window_map' type-id='1d2c2b85' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ob_window_map' type-id='1d2c2b85' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='num_ib_windows' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='num_ob_windows' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='msi_mem' type-id='eaa32e2f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='msi_mem_phys' type-id='2522883d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='msi_cap' type-id='f9b06939' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='776'>
+          <var-decl name='msix_cap' type-id='f9b06939' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='226' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_epc' size-in-bits='7808' is-struct='yes' visibility='default' filepath='include/linux/pci-epc.h' line='96' column='1' id='dc5abf9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/pci-epc.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='pci_epf' type-id='72f469ec' visibility='default' filepath='include/linux/pci-epc.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='ops' type-id='ca58690c' visibility='default' filepath='include/linux/pci-epc.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='mem' type-id='409d248a' visibility='default' filepath='include/linux/pci-epc.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='max_functions' type-id='f9b06939' visibility='default' filepath='include/linux/pci-epc.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='group' type-id='97aff453' visibility='default' filepath='include/linux/pci-epc.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/pci-epc.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_epc_ops' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/pci-epc.h' line='43' column='1' id='f69b84e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='write_header' type-id='11490396' visibility='default' filepath='include/linux/pci-epc.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_bar' type-id='2f3c74d6' visibility='default' filepath='include/linux/pci-epc.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='clear_bar' type-id='8c67687b' visibility='default' filepath='include/linux/pci-epc.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='map_addr' type-id='6e30384b' visibility='default' filepath='include/linux/pci-epc.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unmap_addr' type-id='d21964af' visibility='default' filepath='include/linux/pci-epc.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_msi' type-id='90ba6558' visibility='default' filepath='include/linux/pci-epc.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_msi' type-id='517d281c' visibility='default' filepath='include/linux/pci-epc.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_msix' type-id='4b11c9a5' visibility='default' filepath='include/linux/pci-epc.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_msix' type-id='517d281c' visibility='default' filepath='include/linux/pci-epc.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='raise_irq' type-id='762aacc9' visibility='default' filepath='include/linux/pci-epc.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='start' type-id='5bd7ff98' visibility='default' filepath='include/linux/pci-epc.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='stop' type-id='b9f28869' visibility='default' filepath='include/linux/pci-epc.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_features' type-id='9c05c933' visibility='default' filepath='include/linux/pci-epc.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/linux/pci-epc.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_epf_header' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/pci-epf.h' line='40' column='1' id='a8a68c63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vendorid' type-id='1dc6a898' visibility='default' filepath='include/linux/pci-epf.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='deviceid' type-id='1dc6a898' visibility='default' filepath='include/linux/pci-epf.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='revid' type-id='f9b06939' visibility='default' filepath='include/linux/pci-epf.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='progif_code' type-id='f9b06939' visibility='default' filepath='include/linux/pci-epf.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='subclass_code' type-id='f9b06939' visibility='default' filepath='include/linux/pci-epf.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='baseclass_code' type-id='f9b06939' visibility='default' filepath='include/linux/pci-epf.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cache_line_size' type-id='f9b06939' visibility='default' filepath='include/linux/pci-epf.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='subsys_vendor_id' type-id='1dc6a898' visibility='default' filepath='include/linux/pci-epf.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='subsys_id' type-id='1dc6a898' visibility='default' filepath='include/linux/pci-epf.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='interrupt_pin' type-id='ca830344' visibility='default' filepath='include/linux/pci-epf.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='pci_interrupt_pin' filepath='include/linux/pci.h' line='122' column='1' id='ca830344'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PCI_INTERRUPT_UNKNOWN' value='0'/>
+        <enumerator name='PCI_INTERRUPT_INTA' value='1'/>
+        <enumerator name='PCI_INTERRUPT_INTB' value='2'/>
+        <enumerator name='PCI_INTERRUPT_INTC' value='3'/>
+        <enumerator name='PCI_INTERRUPT_INTD' value='4'/>
+      </enum-decl>
+      <class-decl name='pci_epf_bar' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pci-epf.h' line='97' column='1' id='676dd99b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='phys_addr' type-id='cf29c9b3' visibility='default' filepath='include/linux/pci-epf.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/pci-epf.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='barno' type-id='ba7a26c1' visibility='default' filepath='include/linux/pci-epf.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/pci-epf.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='pci_barno' filepath='include/linux/pci-epf.h' line='18' column='1' id='ba7a26c1'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BAR_0' value='0'/>
+        <enumerator name='BAR_1' value='1'/>
+        <enumerator name='BAR_2' value='2'/>
+        <enumerator name='BAR_3' value='3'/>
+        <enumerator name='BAR_4' value='4'/>
+        <enumerator name='BAR_5' value='5'/>
+      </enum-decl>
+      <enum-decl name='pci_epc_irq_type' filepath='include/linux/pci-epc.h' line='16' column='1' id='94eb9e95'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PCI_EPC_IRQ_UNKNOWN' value='0'/>
+        <enumerator name='PCI_EPC_IRQ_LEGACY' value='1'/>
+        <enumerator name='PCI_EPC_IRQ_MSI' value='2'/>
+        <enumerator name='PCI_EPC_IRQ_MSIX' value='3'/>
+      </enum-decl>
+      <class-decl name='pci_epc_features' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/pci-epc.h' line='117' column='1' id='4e25a330'>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='linkup_notifier' type-id='f0981eeb' visibility='default' filepath='include/linux/pci-epc.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='msi_capable' type-id='f0981eeb' visibility='default' filepath='include/linux/pci-epc.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='msix_capable' type-id='f0981eeb' visibility='default' filepath='include/linux/pci-epc.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='reserved_bar' type-id='f9b06939' visibility='default' filepath='include/linux/pci-epc.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bar_fixed_64bit' type-id='f9b06939' visibility='default' filepath='include/linux/pci-epc.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bar_fixed_size' type-id='64acd4ce' visibility='default' filepath='include/linux/pci-epc.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='align' type-id='b59d7dce' visibility='default' filepath='include/linux/pci-epc.h' line='124' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_epc_mem' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/pci-epc.h' line='76' column='1' id='c9ea62cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='phys_base' type-id='2522883d' visibility='default' filepath='include/linux/pci-epc.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/pci-epc.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bitmap' type-id='1d2c2b85' visibility='default' filepath='include/linux/pci-epc.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='page_size' type-id='b59d7dce' visibility='default' filepath='include/linux/pci-epc.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pages' type-id='95e97e5e' visibility='default' filepath='include/linux/pci-epc.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/pci-epc.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dw_pcie_ep_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='204' column='1' id='84390049'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ep_init' type-id='08ed88d1' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='raise_irq' type-id='f2ccca1f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_features' type-id='19d36127' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='208' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dw_pcie_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='229' column='1' id='785fcb49'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_addr_fixup' type-id='198dd6d9' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read_dbi' type-id='139a279e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write_dbi' type-id='f87f885a' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read_dbi2' type-id='139a279e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write_dbi2' type-id='f87f885a' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='link_up' type-id='470be30c' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='start_link' type-id='470be30c' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='stop_link' type-id='5c683561' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='241' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='158c8c35' size-in-bits='64' id='2942e355'/>
+      <pointer-type-def type-id='f05eea43' size-in-bits='64' id='97aff453'/>
+      <qualified-type-def type-id='158c8c35' const='yes' id='38a035e6'/>
+      <pointer-type-def type-id='38a035e6' size-in-bits='64' id='f034b024'/>
+      <qualified-type-def type-id='84390049' const='yes' id='aa1e7074'/>
+      <pointer-type-def type-id='aa1e7074' size-in-bits='64' id='2beae3fa'/>
+      <qualified-type-def type-id='0647d262' const='yes' id='7a78fb67'/>
+      <pointer-type-def type-id='7a78fb67' size-in-bits='64' id='19739a37'/>
+      <qualified-type-def type-id='785fcb49' const='yes' id='e9f76e3a'/>
+      <pointer-type-def type-id='e9f76e3a' size-in-bits='64' id='60824330'/>
+      <qualified-type-def type-id='4e25a330' const='yes' id='a50e69e9'/>
+      <pointer-type-def type-id='a50e69e9' size-in-bits='64' id='98b07df9'/>
+      <pointer-type-def type-id='ffd077eb' size-in-bits='64' id='19d36127'/>
+      <pointer-type-def type-id='22bf175f' size-in-bits='64' id='9c05c933'/>
+      <qualified-type-def type-id='f69b84e9' const='yes' id='7ebeca6e'/>
+      <pointer-type-def type-id='7ebeca6e' size-in-bits='64' id='ca58690c'/>
+      <qualified-type-def type-id='d4f8274f' const='yes' id='fbb00d34'/>
+      <pointer-type-def type-id='fbb00d34' size-in-bits='64' id='5424a63a'/>
+      <pointer-type-def type-id='1f13c53a' size-in-bits='64' id='8bf55d78'/>
+      <pointer-type-def type-id='6d93aa3a' size-in-bits='64' id='69a866d8'/>
+      <pointer-type-def type-id='63b74212' size-in-bits='64' id='26760480'/>
+      <pointer-type-def type-id='f8ec0262' size-in-bits='64' id='470be30c'/>
+      <pointer-type-def type-id='8d04d39b' size-in-bits='64' id='f2ccca1f'/>
+      <pointer-type-def type-id='08cc17f6' size-in-bits='64' id='5bd7ff98'/>
+      <pointer-type-def type-id='ee21f28a' size-in-bits='64' id='517d281c'/>
+      <pointer-type-def type-id='756c36fd' size-in-bits='64' id='762aacc9'/>
+      <pointer-type-def type-id='8c6e144c' size-in-bits='64' id='2f3c74d6'/>
+      <pointer-type-def type-id='5ff29c2c' size-in-bits='64' id='11490396'/>
+      <pointer-type-def type-id='ac107737' size-in-bits='64' id='6e30384b'/>
+      <pointer-type-def type-id='72ec4a41' size-in-bits='64' id='4b11c9a5'/>
+      <pointer-type-def type-id='a47ced76' size-in-bits='64' id='90ba6558'/>
+      <pointer-type-def type-id='9defd450' size-in-bits='64' id='0681bc12'/>
+      <pointer-type-def type-id='fc9c6a93' size-in-bits='64' id='01d30b6f'/>
+      <pointer-type-def type-id='490169aa' size-in-bits='64' id='91669ea4'/>
+      <pointer-type-def type-id='89e11e34' size-in-bits='64' id='0f78538e'/>
+      <pointer-type-def type-id='2ddd86f7' size-in-bits='64' id='ca79aa7b'/>
+      <pointer-type-def type-id='7fb3af70' size-in-bits='64' id='83078c32'/>
+      <pointer-type-def type-id='3b6188e7' size-in-bits='64' id='e6dafa73'/>
+      <pointer-type-def type-id='a51eeb2e' size-in-bits='64' id='dd0d6c38'/>
+      <pointer-type-def type-id='849373e7' size-in-bits='64' id='3f29b13b'/>
+      <pointer-type-def type-id='dc5abf9a' size-in-bits='64' id='108dbc98'/>
+      <pointer-type-def type-id='c9ea62cc' size-in-bits='64' id='409d248a'/>
+      <pointer-type-def type-id='676dd99b' size-in-bits='64' id='0f1b379b'/>
+      <pointer-type-def type-id='a8a68c63' size-in-bits='64' id='0ce81823'/>
+      <pointer-type-def type-id='69ba9ebc' size-in-bits='64' id='d91dfd7a'/>
+      <pointer-type-def type-id='da10e34c' size-in-bits='64' id='503ff1ba'/>
+      <pointer-type-def type-id='2c7a2d9f' size-in-bits='64' id='9d3cfa5c'/>
+      <pointer-type-def type-id='2522883d' size-in-bits='64' id='ff752d64'/>
+      <pointer-type-def type-id='b06eb6f0' size-in-bits='64' id='850c13f6'/>
+      <pointer-type-def type-id='2e3fb70e' size-in-bits='64' id='776946b4'/>
+      <pointer-type-def type-id='cdc9541e' size-in-bits='64' id='9f9b8114'/>
+      <pointer-type-def type-id='d1e608d4' size-in-bits='64' id='139a279e'/>
+      <pointer-type-def type-id='aa1606dd' size-in-bits='64' id='198dd6d9'/>
+      <pointer-type-def type-id='842232f5' size-in-bits='64' id='5c683561'/>
+      <pointer-type-def type-id='47344208' size-in-bits='64' id='f87f885a'/>
+      <pointer-type-def type-id='195ce0ad' size-in-bits='64' id='08ed88d1'/>
+      <pointer-type-def type-id='2bf8974d' size-in-bits='64' id='b9f28869'/>
+      <pointer-type-def type-id='2719d167' size-in-bits='64' id='8c67687b'/>
+      <pointer-type-def type-id='3c21941b' size-in-bits='64' id='d21964af'/>
+      <pointer-type-def type-id='dd8af1a7' size-in-bits='64' id='0603ffcb'/>
+      <pointer-type-def type-id='1ee07c27' size-in-bits='64' id='64c19e8b'/>
+      <function-decl name='pm_runtime_enable' mangled-name='pm_runtime_enable' filepath='include/linux/pm_runtime.h' line='45' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_enable'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_gpiod_get_optional' mangled-name='devm_gpiod_get_optional' filepath='include/linux/gpio/consumer.h' line='94' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_gpiod_get_optional'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='38d4936d'/>
+        <return type-id='26760480'/>
+      </function-decl>
+      <function-decl name='platform_get_irq_byname' mangled-name='platform_get_irq_byname' filepath='include/linux/platform_device.h' line='66' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_get_irq_byname'>
+        <parameter type-id='db362995'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_init' mangled-name='phy_init' filepath='include/linux/phy/phy.h' line='203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_init'>
+        <parameter type-id='503ff1ba'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dw_pcie_host_init' mangled-name='dw_pcie_host_init' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='363' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dw_pcie_host_init'>
+        <parameter type-id='d91dfd7a'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_regulator_bulk_get' mangled-name='devm_regulator_bulk_get' filepath='include/linux/regulator/consumer.h' line='230' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regulator_bulk_get'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='776946b4'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_clk_bulk_get' mangled-name='devm_clk_bulk_get' filepath='include/linux/clk.h' line='359' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_clk_bulk_get'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='2942e355'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_bulk_enable' mangled-name='regulator_bulk_enable' filepath='include/linux/regulator/consumer.h' line='232' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_bulk_enable'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='776946b4'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_bulk_prepare' mangled-name='clk_bulk_prepare' filepath='include/linux/clk.h' line='233' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_bulk_prepare'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f034b024'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_bulk_enable' mangled-name='clk_bulk_enable' filepath='include/linux/clk.h' line='502' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_bulk_enable'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f034b024'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_bulk_unprepare' mangled-name='clk_bulk_unprepare' filepath='include/linux/clk.h' line='261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_bulk_unprepare'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f034b024'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='reset_control_assert' mangled-name='reset_control_assert' filepath='include/linux/reset.h' line='16' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reset_control_assert'>
+        <parameter type-id='9f9b8114'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='msleep' mangled-name='msleep' filepath='include/linux/delay.h' line='59' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='msleep'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='reset_control_deassert' mangled-name='reset_control_deassert' filepath='include/linux/reset.h' line='17' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reset_control_deassert'>
+        <parameter type-id='9f9b8114'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_bulk_disable' mangled-name='clk_bulk_disable' filepath='include/linux/clk.h' line='537' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_bulk_disable'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f034b024'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='regulator_bulk_disable' mangled-name='regulator_bulk_disable' filepath='include/linux/regulator/consumer.h' line='234' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_bulk_disable'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='776946b4'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_device_is_compatible' mangled-name='of_device_is_compatible' filepath='include/linux/of.h' line='343' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_device_is_compatible'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_clk_get_optional' mangled-name='devm_clk_get_optional' filepath='include/linux/clk.h' line='430' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_clk_get_optional'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='devm_regulator_get' mangled-name='devm_regulator_get' filepath='include/linux/regulator/consumer.h' line='180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regulator_get'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='850c13f6'/>
+      </function-decl>
+      <function-decl name='regulator_enable' mangled-name='regulator_enable' filepath='include/linux/regulator/consumer.h' line='222' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_enable'>
+        <parameter type-id='850c13f6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_disable' mangled-name='regulator_disable' filepath='include/linux/regulator/consumer.h' line='223' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_disable'>
+        <parameter type-id='850c13f6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_set_value_cansleep' mangled-name='gpiod_set_value_cansleep' filepath='include/linux/gpio/consumer.h' line='143' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_set_value_cansleep'>
+        <parameter type-id='26760480'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='phy_power_on' mangled-name='phy_power_on' filepath='include/linux/phy/phy.h' line='205' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_power_on'>
+        <parameter type-id='503ff1ba'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_power_off' mangled-name='phy_power_off' filepath='include/linux/phy/phy.h' line='206' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_power_off'>
+        <parameter type-id='503ff1ba'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dw_pcie_setup_rc' mangled-name='dw_pcie_setup_rc' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='362' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dw_pcie_setup_rc'>
+        <parameter type-id='d91dfd7a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dw_pcie_msi_init' mangled-name='dw_pcie_msi_init' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='360' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dw_pcie_msi_init'>
+        <parameter type-id='d91dfd7a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dw_pcie_wait_for_link' mangled-name='dw_pcie_wait_for_link' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='276' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dw_pcie_wait_for_link'>
+        <parameter type-id='8bf55d78'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='ffd077eb'>
+        <parameter type-id='69a866d8'/>
+        <return type-id='98b07df9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='22bf175f'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='98b07df9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8ec0262'>
+        <parameter type-id='8bf55d78'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8d04d39b'>
+        <parameter type-id='69a866d8'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='94eb9e95'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08cc17f6'>
+        <parameter type-id='108dbc98'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ee21f28a'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='756c36fd'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='94eb9e95'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8c6e144c'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='0f1b379b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5ff29c2c'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='0ce81823'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ac107737'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='2522883d'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='72ec4a41'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a47ced76'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9defd450'>
+        <parameter type-id='d91dfd7a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fc9c6a93'>
+        <parameter type-id='d91dfd7a'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='490169aa'>
+        <parameter type-id='d91dfd7a'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='89e11e34'>
+        <parameter type-id='d91dfd7a'/>
+        <parameter type-id='d1feb554'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2ddd86f7'>
+        <parameter type-id='d91dfd7a'/>
+        <parameter type-id='d1feb554'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7fb3af70'>
+        <parameter type-id='503ff1ba'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3b6188e7'>
+        <parameter type-id='503ff1ba'/>
+        <parameter type-id='79ba09b7'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a51eeb2e'>
+        <parameter type-id='503ff1ba'/>
+        <parameter type-id='79ba09b7'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='9d3cfa5c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='849373e7'>
+        <parameter type-id='503ff1ba'/>
+        <parameter type-id='9d3cfa5c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d1e608d4'>
+        <parameter type-id='8bf55d78'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aa1606dd'>
+        <parameter type-id='8bf55d78'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='91ce1af9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='842232f5'>
+        <parameter type-id='8bf55d78'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='47344208'>
+        <parameter type-id='8bf55d78'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='195ce0ad'>
+        <parameter type-id='69a866d8'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2bf8974d'>
+        <parameter type-id='108dbc98'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2719d167'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='0f1b379b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3c21941b'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='2522883d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dd8af1a7'>
+        <parameter type-id='d91dfd7a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1ee07c27'>
+        <parameter type-id='503ff1ba'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/controller/pci-host-generic.c' language='LANG_C89'>
+      <function-decl name='of_match_node' mangled-name='of_match_node' filepath='include/linux/of.h' line='360' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_match_node'>
+        <parameter type-id='e5ce629e'/>
+        <parameter type-id='0afa6ea3'/>
+        <return type-id='e5ce629e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/irq.c' language='LANG_C89'>
+      <function-decl name='pci_request_irq' mangled-name='pci_request_irq' filepath='drivers/pci/irq.c' line='83' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_request_irq'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/irq.c' line='83' column='1'/>
+        <parameter type-id='f0981eeb' name='nr' filepath='drivers/pci/irq.c' line='83' column='1'/>
+        <parameter type-id='29591c9a' name='handler' filepath='drivers/pci/irq.c' line='83' column='1'/>
+        <parameter type-id='29591c9a' name='thread_fn' filepath='drivers/pci/irq.c' line='84' column='1'/>
+        <parameter type-id='eaa32e2f' name='dev_id' filepath='drivers/pci/irq.c' line='84' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/pci/irq.c' line='84' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_irq_vector' mangled-name='pci_irq_vector' filepath='include/linux/pci.h' line='1471' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_irq_vector'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_free_irq' mangled-name='pci_free_irq' filepath='drivers/pci/irq.c' line='120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_free_irq'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/irq.c' line='120' column='1'/>
+        <parameter type-id='f0981eeb' name='nr' filepath='drivers/pci/irq.c' line='120' column='1'/>
+        <parameter type-id='eaa32e2f' name='dev_id' filepath='drivers/pci/irq.c' line='120' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/msi.c' language='LANG_C89'>
+      <class-decl name='msix_entry' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='1443' column='1' id='6d6fcd23'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vector' type-id='19c2251e' visibility='default' filepath='include/linux/pci.h' line='1444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='entry' type-id='1dc6a898' visibility='default' filepath='include/linux/pci.h' line='1445' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='6d6fcd23' size-in-bits='64' id='682fb763'/>
+      <function-decl name='pci_enable_msi' mangled-name='pci_enable_msi' filepath='drivers/pci/msi.c' line='1107' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_enable_msi'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/msi.c' line='1107' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_enable_msix_range' mangled-name='pci_enable_msix_range' filepath='drivers/pci/msi.c' line='1164' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_enable_msix_range'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/msi.c' line='1164' column='1'/>
+        <parameter type-id='682fb763' name='entries' filepath='drivers/pci/msi.c' line='1164' column='1'/>
+        <parameter type-id='95e97e5e' name='minvec' filepath='drivers/pci/msi.c' line='1165' column='1'/>
+        <parameter type-id='95e97e5e' name='maxvec' filepath='drivers/pci/msi.c' line='1165' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_free_irq_vectors' mangled-name='pci_free_irq_vectors' filepath='drivers/pci/msi.c' line='1246' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_free_irq_vectors'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/msi.c' line='1246' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/of.c' language='LANG_C89'>
+      <function-decl name='devm_of_pci_get_host_bridge_resources' mangled-name='devm_of_pci_get_host_bridge_resources' filepath='drivers/pci/of.c' line='258' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_of_pci_get_host_bridge_resources'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pci/of.c' line='258' column='1'/>
+        <parameter type-id='002ac4a6' name='busno' filepath='drivers/pci/of.c' line='259' column='1'/>
+        <parameter type-id='002ac4a6' name='bus_max' filepath='drivers/pci/of.c' line='259' column='1'/>
+        <parameter type-id='e84b031a' name='resources' filepath='drivers/pci/of.c' line='260' column='1'/>
+        <parameter type-id='9e6a6c02' name='io_base' filepath='drivers/pci/of.c' line='260' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_irq_parse_and_map_pci' mangled-name='of_irq_parse_and_map_pci' filepath='drivers/pci/of.c' line='469' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_irq_parse_and_map_pci'>
+        <parameter type-id='947f31e6' name='dev' filepath='drivers/pci/of.c' line='469' column='1'/>
+        <parameter type-id='f9b06939' name='slot' filepath='drivers/pci/of.c' line='469' column='1'/>
+        <parameter type-id='f9b06939' name='pin' filepath='drivers/pci/of.c' line='469' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_irq_parse_one' mangled-name='of_irq_parse_one' filepath='include/linux/of_irq.h' line='36' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_irq_parse_one'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='51a94113'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='acc63fdf' size-in-bits='64' id='9e6a6c02'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/pci-driver.c' language='LANG_C89'>
+      <var-decl name='pci_bus_type' type-id='b31bfc8a' mangled-name='pci_bus_type' visibility='default' filepath='drivers/pci/pci-driver.c' line='1655' column='1' elf-symbol-id='pci_bus_type'/>
+      <function-decl name='__pci_register_driver' mangled-name='__pci_register_driver' filepath='drivers/pci/pci-driver.c' line='1435' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pci_register_driver'>
+        <parameter type-id='85b59624' name='drv' filepath='drivers/pci/pci-driver.c' line='1435' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/pci/pci-driver.c' line='1435' column='1'/>
+        <parameter type-id='80f4b756' name='mod_name' filepath='drivers/pci/pci-driver.c' line='1436' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='driver_register' mangled-name='driver_register' filepath='include/linux/device.h' line='423' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='driver_register'>
+        <parameter type-id='00c7b870'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_dma_configure' mangled-name='of_dma_configure' filepath='include/linux/of_device.h' line='58' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_dma_configure'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/pci-sysfs.c' language='LANG_C89'>
+      <function-decl name='device_remove_file_self' mangled-name='device_remove_file_self' filepath='include/linux/device.h' line='891' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_remove_file_self'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='de63df21'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <pointer-type-def type-id='fad8dcd1' size-in-bits='64' id='de63df21'/>
+      <qualified-type-def type-id='dbf3947c' const='yes' id='fad8dcd1'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/pci.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='ac1c7ae1' size-in-bits='infinite' id='5f7bfbc1'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='pci_saved_state' size-in-bits='512' is-struct='yes' visibility='default' filepath='drivers/pci/pci.c' line='1490' column='1' id='bdbf2231'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='config_space' type-id='02fdec64' visibility='default' filepath='drivers/pci/pci.c' line='1491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cap' type-id='5f7bfbc1' visibility='default' filepath='drivers/pci/pci.c' line='1492' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_cap_saved_data' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='272' column='1' id='ac1c7ae1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap_nr' type-id='1dc6a898' visibility='default' filepath='include/linux/pci.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='cap_extended' type-id='b50a4934' visibility='default' filepath='include/linux/pci.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='c165e8b9' visibility='default' filepath='include/linux/pci.h' line='276' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='bdbf2231' size-in-bits='64' id='e4acc659'/>
+      <pointer-type-def type-id='e4acc659' size-in-bits='64' id='6efc6709'/>
+      <function-decl name='pci_disable_device' mangled-name='pci_disable_device' filepath='drivers/pci/pci.c' line='1935' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_disable_device'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='1935' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_ioremap_bar' mangled-name='pci_ioremap_bar' filepath='drivers/pci/pci.c' line='169' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_ioremap_bar'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pci.c' line='169' column='1'/>
+        <parameter type-id='95e97e5e' name='bar' filepath='drivers/pci/pci.c' line='169' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='pci_ioremap_wc_bar' mangled-name='pci_ioremap_wc_bar' filepath='drivers/pci/pci.c' line='184' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_ioremap_wc_bar'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pci.c' line='184' column='1'/>
+        <parameter type-id='95e97e5e' name='bar' filepath='drivers/pci/pci.c' line='184' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='pci_find_next_capability' mangled-name='pci_find_next_capability' filepath='drivers/pci/pci.c' line='394' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_find_next_capability'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='394' column='1'/>
+        <parameter type-id='f9b06939' name='pos' filepath='drivers/pci/pci.c' line='394' column='1'/>
+        <parameter type-id='95e97e5e' name='cap' filepath='drivers/pci/pci.c' line='394' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_device_is_present' mangled-name='pci_device_is_present' filepath='drivers/pci/pci.c' line='6063' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_device_is_present'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pci.c' line='6063' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='pci_set_power_state' mangled-name='pci_set_power_state' filepath='drivers/pci/pci.c' line='1098' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_set_power_state'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='1098' column='1'/>
+        <parameter type-id='49c32219' name='state' filepath='drivers/pci/pci.c' line='1098' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_save_state' mangled-name='pci_save_state' filepath='drivers/pci/pci.c' line='1345' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_save_state'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='1345' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_restore_state' mangled-name='pci_restore_state' filepath='drivers/pci/pci.c' line='1456' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_restore_state'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='1456' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_store_saved_state' mangled-name='pci_store_saved_state' filepath='drivers/pci/pci.c' line='1502' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_store_saved_state'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='1502' column='1'/>
+        <return type-id='e4acc659'/>
+      </function-decl>
+      <function-decl name='pci_load_saved_state' mangled-name='pci_load_saved_state' filepath='drivers/pci/pci.c' line='1541' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_load_saved_state'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='1541' column='1'/>
+        <parameter type-id='e4acc659' name='state' filepath='drivers/pci/pci.c' line='1542' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_load_and_free_saved_state' mangled-name='pci_load_and_free_saved_state' filepath='drivers/pci/pci.c' line='1578' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_load_and_free_saved_state'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='1578' column='1'/>
+        <parameter type-id='6efc6709' name='state' filepath='drivers/pci/pci.c' line='1579' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_enable_device_mem' mangled-name='pci_enable_device_mem' filepath='drivers/pci/pci.c' line='1725' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_enable_device_mem'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='1725' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_enable_device' mangled-name='pci_enable_device' filepath='drivers/pci/pci.c' line='1742' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_enable_device'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='1742' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_enable_wake' mangled-name='pci_enable_wake' filepath='drivers/pci/pci.c' line='2284' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_enable_wake'>
+        <parameter type-id='85196e3f' name='pci_dev' filepath='drivers/pci/pci.c' line='2284' column='1'/>
+        <parameter type-id='49c32219' name='state' filepath='drivers/pci/pci.c' line='2284' column='1'/>
+        <parameter type-id='b50a4934' name='enable' filepath='drivers/pci/pci.c' line='2284' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_runtime_barrier' mangled-name='pm_runtime_barrier' filepath='include/linux/pm_runtime.h' line='44' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_barrier'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_d3cold_disable' mangled-name='pci_d3cold_disable' filepath='drivers/pci/pci.c' line='2772' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_d3cold_disable'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='2772' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_common_swizzle' mangled-name='pci_common_swizzle' filepath='drivers/pci/pci.c' line='3646' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_common_swizzle'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='3646' column='1'/>
+        <parameter type-id='8bff8096' name='pinp' filepath='drivers/pci/pci.c' line='3646' column='1'/>
+        <return type-id='f9b06939'/>
+      </function-decl>
+      <function-decl name='pci_request_region' mangled-name='pci_request_region' filepath='drivers/pci/pci.c' line='3752' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_request_region'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pci.c' line='3752' column='1'/>
+        <parameter type-id='95e97e5e' name='bar' filepath='drivers/pci/pci.c' line='3752' column='1'/>
+        <parameter type-id='80f4b756' name='res_name' filepath='drivers/pci/pci.c' line='3752' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_request_selected_regions' mangled-name='pci_request_selected_regions' filepath='drivers/pci/pci.c' line='3802' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_request_selected_regions'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pci.c' line='3802' column='1'/>
+        <parameter type-id='95e97e5e' name='bars' filepath='drivers/pci/pci.c' line='3802' column='1'/>
+        <parameter type-id='80f4b756' name='res_name' filepath='drivers/pci/pci.c' line='3803' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_release_regions' mangled-name='pci_release_regions' filepath='drivers/pci/pci.c' line='3827' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_release_regions'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pci.c' line='3827' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_request_regions' mangled-name='pci_request_regions' filepath='drivers/pci/pci.c' line='3846' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_request_regions'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pci.c' line='3846' column='1'/>
+        <parameter type-id='80f4b756' name='res_name' filepath='drivers/pci/pci.c' line='3846' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_clear_master' mangled-name='pci_clear_master' filepath='drivers/pci/pci.c' line='4177' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_clear_master'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='4177' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_intx' mangled-name='pci_intx' filepath='drivers/pci/pci.c' line='4319' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_intx'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pci.c' line='4319' column='1'/>
+        <parameter type-id='95e97e5e' name='enable' filepath='drivers/pci/pci.c' line='4319' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_check_and_mask_intx' mangled-name='pci_check_and_mask_intx' filepath='drivers/pci/pci.c' line='4396' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_check_and_mask_intx'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='4396' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='pci_check_and_unmask_intx' mangled-name='pci_check_and_unmask_intx' filepath='drivers/pci/pci.c' line='4410' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_check_and_unmask_intx'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='4410' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='pci_reset_function' mangled-name='pci_reset_function' filepath='drivers/pci/pci.c' line='5067' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_reset_function'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='5067' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_select_bars' mangled-name='pci_select_bars' filepath='drivers/pci/pci.c' line='5912' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_select_bars'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='5912' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/pci/pci.c' line='5912' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_disable_msi' mangled-name='pci_disable_msi' filepath='include/linux/pci.h' line='1450' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_disable_msi'>
+        <parameter type-id='85196e3f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_disable_msix' mangled-name='pci_disable_msix' filepath='include/linux/pci.h' line='1452' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_disable_msix'>
+        <parameter type-id='85196e3f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='infinite' id='c165e8b9'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/pcie/aspm.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='d0622163' size-in-bits='512' id='fa0d0a7f'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='aspm_latency' size-in-bits='64' is-struct='yes' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='44' column='1' id='d0622163'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='l0s' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='l1' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='79' column='1' id='a1d8a938'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='up_cap_ptr' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dw_cap_ptr' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ctl1' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ctl2' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <function-decl name='pcie_aspm_enabled' mangled-name='pcie_aspm_enabled' filepath='drivers/pci/pcie/aspm.c' line='1171' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pcie_aspm_enabled'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pcie/aspm.c' line='1171' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/pcie/portdrv_core.c' language='LANG_C89'>
+      <function-decl name='pci_alloc_irq_vectors_affinity' mangled-name='pci_alloc_irq_vectors_affinity' filepath='include/linux/pci.h' line='1466' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_alloc_irq_vectors_affinity'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='8a876638'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='bf33c00a' size-in-bits='64' id='8a876638'/>
+      <class-decl name='irq_affinity' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/interrupt.h' line='279' column='1' id='bf33c00a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pre_vectors' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='post_vectors' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_sets' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='set_size' type-id='49580a63' visibility='default' filepath='include/linux/interrupt.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='calc_sets' type-id='887112a7' visibility='default' filepath='include/linux/interrupt.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/interrupt.h' line='285' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ec180093' size-in-bits='64' id='887112a7'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/probe.c' language='LANG_C89'>
+      <class-decl name='pci_host_bridge' size-in-bits='8704' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='499' column='1' id='32ed9316'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/pci.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='bus' type-id='d1feb554' visibility='default' filepath='include/linux/pci.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='ops' type-id='2058826a' visibility='default' filepath='include/linux/pci.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='sysdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/pci.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='busnr' type-id='95e97e5e' visibility='default' filepath='include/linux/pci.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='windows' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='dma_ranges' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='swizzle_irq' type-id='af56cb43' visibility='default' filepath='include/linux/pci.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='map_irq' type-id='fa35bf16' visibility='default' filepath='include/linux/pci.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='release_fn' type-id='53955211' visibility='default' filepath='include/linux/pci.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='release_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/pci.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='msi' type-id='b9526cc1' visibility='default' filepath='include/linux/pci.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='ignore_reset_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='no_ext_tags' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='native_aer' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='native_pcie_hotplug' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='native_shpc_hotplug' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='native_pme' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='native_ltr' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='preserve_config' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='align_resource' type-id='482ccc39' visibility='default' filepath='include/linux/pci.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='private' type-id='c99b5ecd' visibility='default' filepath='include/linux/pci.h' line='527' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hotplug_slot_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/pci_hotplug.h' line='38' column='1' id='8d2c0dd2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enable_slot' type-id='1617c63b' visibility='default' filepath='include/linux/pci_hotplug.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable_slot' type-id='1617c63b' visibility='default' filepath='include/linux/pci_hotplug.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_attention_status' type-id='4b81d8e7' visibility='default' filepath='include/linux/pci_hotplug.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hardware_test' type-id='b3f54aba' visibility='default' filepath='include/linux/pci_hotplug.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_power_status' type-id='db02d786' visibility='default' filepath='include/linux/pci_hotplug.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_attention_status' type-id='db02d786' visibility='default' filepath='include/linux/pci_hotplug.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_latch_status' type-id='db02d786' visibility='default' filepath='include/linux/pci_hotplug.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_adapter_status' type-id='db02d786' visibility='default' filepath='include/linux/pci_hotplug.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='reset_slot' type-id='3801bb42' visibility='default' filepath='include/linux/pci_hotplug.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='8d2c0dd2' const='yes' id='61872327'/>
+      <pointer-type-def type-id='61872327' size-in-bits='64' id='94bc2d77'/>
+      <pointer-type-def type-id='c2603804' size-in-bits='64' id='fa35bf16'/>
+      <pointer-type-def type-id='d9435f47' size-in-bits='64' id='1617c63b'/>
+      <pointer-type-def type-id='b6b1bef0' size-in-bits='64' id='3801bb42'/>
+      <pointer-type-def type-id='9d9db488' size-in-bits='64' id='b3f54aba'/>
+      <pointer-type-def type-id='025c78c3' size-in-bits='64' id='4b81d8e7'/>
+      <pointer-type-def type-id='ad4c5814' size-in-bits='64' id='db02d786'/>
+      <pointer-type-def type-id='32ed9316' size-in-bits='64' id='cb0dbc3c'/>
+      <pointer-type-def type-id='08594205' size-in-bits='64' id='482ccc39'/>
+      <pointer-type-def type-id='ff18d40f' size-in-bits='64' id='af56cb43'/>
+      <pointer-type-def type-id='1d8506ad' size-in-bits='64' id='53955211'/>
+      <function-decl name='bus_find_device' mangled-name='bus_find_device' filepath='include/linux/device.h' line='190' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bus_find_device'>
+        <parameter type-id='5e2671f8'/>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='92d15ae9'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='devm_pci_alloc_host_bridge' mangled-name='devm_pci_alloc_host_bridge' filepath='drivers/pci/probe.c' line='617' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_pci_alloc_host_bridge'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pci/probe.c' line='617' column='1'/>
+        <parameter type-id='b59d7dce' name='priv' filepath='drivers/pci/probe.c' line='618' column='1'/>
+        <return type-id='cb0dbc3c'/>
+      </function-decl>
+      <function-decl name='pci_find_pcie_root_port' mangled-name='pci_find_pcie_root_port' filepath='include/linux/pci.h' line='1034' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_find_pcie_root_port'>
+        <parameter type-id='85196e3f'/>
+        <return type-id='85196e3f'/>
+      </function-decl>
+      <function-decl name='pci_get_slot' mangled-name='pci_get_slot' filepath='include/linux/pci.h' line='1073' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_get_slot'>
+        <parameter type-id='d1feb554'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='85196e3f'/>
+      </function-decl>
+      <function-decl name='pci_dev_put' mangled-name='pci_dev_put' filepath='include/linux/pci.h' line='1039' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_dev_put'>
+        <parameter type-id='85196e3f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_find_ext_capability' mangled-name='pci_find_ext_capability' filepath='include/linux/pci.h' line='1062' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_find_ext_capability'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pcie_bus_configure_settings' mangled-name='pcie_bus_configure_settings' filepath='drivers/pci/probe.c' line='2705' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pcie_bus_configure_settings'>
+        <parameter type-id='d1feb554' name='bus' filepath='drivers/pci/probe.c' line='2705' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_scan_child_bus' mangled-name='pci_scan_child_bus' filepath='drivers/pci/probe.c' line='2897' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_scan_child_bus'>
+        <parameter type-id='d1feb554' name='bus' filepath='drivers/pci/probe.c' line='2897' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='of_find_compatible_node' mangled-name='of_find_compatible_node' filepath='include/linux/of.h' line='271' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_compatible_node'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='pci_scan_root_bus_bridge' mangled-name='pci_scan_root_bus_bridge' filepath='drivers/pci/probe.c' line='3046' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_scan_root_bus_bridge'>
+        <parameter type-id='cb0dbc3c' name='bridge' filepath='drivers/pci/probe.c' line='3046' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_rescan_bus' mangled-name='pci_rescan_bus' filepath='drivers/pci/probe.c' line='3172' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_rescan_bus'>
+        <parameter type-id='d1feb554' name='bus' filepath='drivers/pci/probe.c' line='3172' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='pci_assign_unassigned_bus_resources' mangled-name='pci_assign_unassigned_bus_resources' filepath='include/linux/pci.h' line='1292' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_assign_unassigned_bus_resources'>
+        <parameter type-id='d1feb554'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_lock_rescan_remove' mangled-name='pci_lock_rescan_remove' filepath='drivers/pci/probe.c' line='3190' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_lock_rescan_remove'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_unlock_rescan_remove' mangled-name='pci_unlock_rescan_remove' filepath='drivers/pci/probe.c' line='3196' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_unlock_rescan_remove'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='c2603804'>
+        <parameter type-id='947f31e6'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d9435f47'>
+        <parameter type-id='b47b0d41'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b6b1bef0'>
+        <parameter type-id='b47b0d41'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9d9db488'>
+        <parameter type-id='b47b0d41'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='025c78c3'>
+        <parameter type-id='b47b0d41'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ad4c5814'>
+        <parameter type-id='b47b0d41'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08594205'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='e153f6de'/>
+        <parameter type-id='acc63fdf'/>
+        <parameter type-id='acc63fdf'/>
+        <parameter type-id='acc63fdf'/>
+        <return type-id='acc63fdf'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ff18d40f'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='f9b06939'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1d8506ad'>
+        <parameter type-id='cb0dbc3c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/remove.c' language='LANG_C89'>
+      <function-decl name='pci_stop_and_remove_bus_device' mangled-name='pci_stop_and_remove_bus_device' filepath='drivers/pci/remove.c' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_stop_and_remove_bus_device'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/remove.c' line='114' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/rom.c' language='LANG_C89'>
+      <function-decl name='pci_assign_resource' mangled-name='pci_assign_resource' filepath='include/linux/pci.h' line='1218' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_assign_resource'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pci/search.c' language='LANG_C89'>
+      <function-decl name='pci_get_device' mangled-name='pci_get_device' filepath='drivers/pci/search.c' line='327' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_get_device'>
+        <parameter type-id='f0981eeb' name='vendor' filepath='drivers/pci/search.c' line='327' column='1'/>
+        <parameter type-id='f0981eeb' name='device' filepath='drivers/pci/search.c' line='327' column='1'/>
+        <parameter type-id='85196e3f' name='from' filepath='drivers/pci/search.c' line='328' column='1'/>
+        <return type-id='85196e3f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/phy/phy-core.c' language='LANG_C89'>
+      <class-decl name='phy_provider' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/phy/phy.h' line='149' column='1' id='e3536b30'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/phy/phy.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='children' type-id='9a537bbe' visibility='default' filepath='include/linux/phy/phy.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/phy/phy.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/phy/phy.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_xlate' type-id='df697557' visibility='default' filepath='include/linux/phy/phy.h' line='154' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='5efd72bb' size-in-bits='64' id='df697557'/>
+      <pointer-type-def type-id='e3536b30' size-in-bits='64' id='3608d096'/>
+      <function-decl name='phy_pm_runtime_get_sync' mangled-name='phy_pm_runtime_get_sync' filepath='drivers/phy/phy-core.c' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_pm_runtime_get_sync'>
+        <parameter type-id='503ff1ba' name='phy' filepath='drivers/phy/phy-core.c' line='166' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_pm_runtime_put_sync' mangled-name='phy_pm_runtime_put_sync' filepath='drivers/phy/phy-core.c' line='196' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_pm_runtime_put_sync'>
+        <parameter type-id='503ff1ba' name='phy' filepath='drivers/phy/phy-core.c' line='196' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_exit' mangled-name='phy_exit' filepath='drivers/phy/phy-core.c' line='261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_exit'>
+        <parameter type-id='503ff1ba' name='phy' filepath='drivers/phy/phy-core.c' line='261' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_set_mode_ext' mangled-name='phy_set_mode_ext' filepath='drivers/phy/phy-core.c' line='359' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_set_mode_ext'>
+        <parameter type-id='503ff1ba' name='phy' filepath='drivers/phy/phy-core.c' line='359' column='1'/>
+        <parameter type-id='79ba09b7' name='mode' filepath='drivers/phy/phy-core.c' line='359' column='1'/>
+        <parameter type-id='95e97e5e' name='submode' filepath='drivers/phy/phy-core.c' line='359' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_reset' mangled-name='phy_reset' filepath='drivers/phy/phy-core.c' line='376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_reset'>
+        <parameter type-id='503ff1ba' name='phy' filepath='drivers/phy/phy-core.c' line='376' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_calibrate' mangled-name='phy_calibrate' filepath='drivers/phy/phy-core.c' line='407' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_calibrate'>
+        <parameter type-id='503ff1ba' name='phy' filepath='drivers/phy/phy-core.c' line='407' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_property_match_string' mangled-name='of_property_match_string' filepath='include/linux/of.h' line='337' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_match_string'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_phy_simple_xlate' mangled-name='of_phy_simple_xlate' filepath='drivers/phy/phy-core.c' line='619' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_phy_simple_xlate'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/phy/phy-core.c' line='619' column='1'/>
+        <parameter type-id='51a94113' name='args' filepath='drivers/phy/phy-core.c' line='620' column='1'/>
+        <return type-id='503ff1ba'/>
+      </function-decl>
+      <function-decl name='devm_phy_get' mangled-name='devm_phy_get' filepath='drivers/phy/phy-core.c' line='710' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_phy_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/phy/phy-core.c' line='710' column='1'/>
+        <parameter type-id='80f4b756' name='string' filepath='drivers/phy/phy-core.c' line='710' column='1'/>
+        <return type-id='503ff1ba'/>
+      </function-decl>
+      <function-decl name='pm_runtime_no_callbacks' mangled-name='pm_runtime_no_callbacks' filepath='include/linux/pm_runtime.h' line='49' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_no_callbacks'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_phy_create' mangled-name='devm_phy_create' filepath='drivers/phy/phy-core.c' line='910' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_phy_create'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/phy/phy-core.c' line='910' column='1'/>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/phy/phy-core.c' line='910' column='1'/>
+        <parameter type-id='5424a63a' name='ops' filepath='drivers/phy/phy-core.c' line='911' column='1'/>
+        <return type-id='503ff1ba'/>
+      </function-decl>
+      <function-decl name='__devm_of_phy_provider_register' mangled-name='__devm_of_phy_provider_register' filepath='drivers/phy/phy-core.c' line='1041' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__devm_of_phy_provider_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/phy/phy-core.c' line='1041' column='1'/>
+        <parameter type-id='9a537bbe' name='children' filepath='drivers/phy/phy-core.c' line='1042' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/phy/phy-core.c' line='1042' column='1'/>
+        <parameter type-id='df697557' name='of_xlate' filepath='drivers/phy/phy-core.c' line='1043' column='1'/>
+        <return type-id='3608d096'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='5efd72bb'>
+        <parameter type-id='fa0b179b' name='dev'/>
+        <parameter type-id='51a94113' name='args'/>
+        <return type-id='503ff1ba'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pinctrl/core.c' language='LANG_C89'>
+      <class-decl name='device_link' size-in-bits='8320' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='1366' column='1' id='b52abcec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supplier' type-id='fa0b179b' visibility='default' filepath='include/linux/device.h' line='1367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_node' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='consumer' type-id='fa0b179b' visibility='default' filepath='include/linux/device.h' line='1369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='c_node' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='link_dev' type-id='66e487eb' visibility='default' filepath='include/linux/device.h' line='1371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='status' type-id='3f7ac0c9' visibility='default' filepath='include/linux/device.h' line='1372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/device.h' line='1373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='rpm_active' type-id='64615833' visibility='default' filepath='include/linux/device.h' line='1374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7840'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/device.h' line='1375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/device.h' line='1377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='supplier_preactivated' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1384' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='device_link_state' filepath='include/linux/device.h' line='1096' column='1' id='3f7ac0c9'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DL_STATE_NONE' value='-1'/>
+        <enumerator name='DL_STATE_DORMANT' value='0'/>
+        <enumerator name='DL_STATE_AVAILABLE' value='1'/>
+        <enumerator name='DL_STATE_CONSUMER_PROBE' value='2'/>
+        <enumerator name='DL_STATE_ACTIVE' value='3'/>
+        <enumerator name='DL_STATE_SUPPLIER_UNBIND' value='4'/>
+      </enum-decl>
+      <pointer-type-def type-id='b52abcec' size-in-bits='64' id='7acfb3fa'/>
+      <function-decl name='pin_get_name' mangled-name='pin_get_name' filepath='drivers/pinctrl/core.c' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pin_get_name'>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/core.c' line='166' column='1'/>
+        <parameter type-id='20f5f452' name='pin' filepath='drivers/pinctrl/core.c' line='166' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='pinctrl_add_gpio_range' mangled-name='pinctrl_add_gpio_range' filepath='drivers/pinctrl/core.c' line='402' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_add_gpio_range'>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/core.c' line='402' column='1'/>
+        <parameter type-id='e7faa6fb' name='range' filepath='drivers/pinctrl/core.c' line='403' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pinctrl_remove_gpio_range' mangled-name='pinctrl_remove_gpio_range' filepath='drivers/pinctrl/core.c' line='508' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_remove_gpio_range'>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/core.c' line='508' column='1'/>
+        <parameter type-id='e7faa6fb' name='range' filepath='drivers/pinctrl/core.c' line='509' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gpiod_to_chip' mangled-name='gpiod_to_chip' filepath='include/linux/gpio/driver.h' line='726' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_to_chip'>
+        <parameter type-id='5bed570d'/>
+        <return type-id='e324928d'/>
+      </function-decl>
+      <function-decl name='pinctrl_gpio_set_config' mangled-name='pinctrl_gpio_set_config' filepath='drivers/pinctrl/core.c' line='893' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_gpio_set_config'>
+        <parameter type-id='f0981eeb' name='gpio' filepath='drivers/pinctrl/core.c' line='893' column='1'/>
+        <parameter type-id='7359adad' name='config' filepath='drivers/pinctrl/core.c' line='893' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pinctrl_get' mangled-name='pinctrl_get' filepath='drivers/pinctrl/core.c' line='1113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pinctrl/core.c' line='1113' column='1'/>
+        <return type-id='73ea90c5'/>
+      </function-decl>
+      <function-decl name='pinctrl_put' mangled-name='pinctrl_put' filepath='drivers/pinctrl/core.c' line='1193' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_put'>
+        <parameter type-id='73ea90c5' name='p' filepath='drivers/pinctrl/core.c' line='1193' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pinctrl_lookup_state' mangled-name='pinctrl_lookup_state' filepath='drivers/pinctrl/core.c' line='1204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_lookup_state'>
+        <parameter type-id='73ea90c5' name='p' filepath='drivers/pinctrl/core.c' line='1204' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/pinctrl/core.c' line='1205' column='1'/>
+        <return type-id='f418ceb3'/>
+      </function-decl>
+      <function-decl name='pinctrl_select_state' mangled-name='pinctrl_select_state' filepath='drivers/pinctrl/core.c' line='1317' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_select_state'>
+        <parameter type-id='73ea90c5' name='p' filepath='drivers/pinctrl/core.c' line='1317' column='1'/>
+        <parameter type-id='f418ceb3' name='state' filepath='drivers/pinctrl/core.c' line='1317' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_link_add' mangled-name='device_link_add' filepath='include/linux/device.h' line='1729' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_link_add'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='7acfb3fa'/>
+      </function-decl>
+      <function-decl name='devm_pinctrl_get' mangled-name='devm_pinctrl_get' filepath='drivers/pinctrl/core.c' line='1338' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_pinctrl_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pinctrl/core.c' line='1338' column='1'/>
+        <return type-id='73ea90c5'/>
+      </function-decl>
+      <function-decl name='devm_pinctrl_put' mangled-name='devm_pinctrl_put' filepath='drivers/pinctrl/core.c' line='1373' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_pinctrl_put'>
+        <parameter type-id='73ea90c5' name='p' filepath='drivers/pinctrl/core.c' line='1373' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pinctrl_pm_select_idle_state' mangled-name='pinctrl_pm_select_idle_state' filepath='drivers/pinctrl/core.c' line='1591' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_pm_select_idle_state'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pinctrl/core.c' line='1591' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pinctrl_register' mangled-name='pinctrl_register' filepath='drivers/pinctrl/core.c' line='2086' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_register'>
+        <parameter type-id='d4682107' name='pctldesc' filepath='drivers/pinctrl/core.c' line='2086' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pinctrl/core.c' line='2087' column='1'/>
+        <parameter type-id='eaa32e2f' name='driver_data' filepath='drivers/pinctrl/core.c' line='2087' column='1'/>
+        <return type-id='10216dc5'/>
+      </function-decl>
+      <pointer-type-def type-id='51195455' size-in-bits='64' id='73ea90c5'/>
+      <pointer-type-def type-id='25e1863f' size-in-bits='64' id='d4682107'/>
+      <pointer-type-def type-id='b5990c25' size-in-bits='64' id='10216dc5'/>
+      <pointer-type-def type-id='5cb32b9b' size-in-bits='64' id='e7faa6fb'/>
+      <pointer-type-def type-id='f66244c3' size-in-bits='64' id='f418ceb3'/>
+      <class-decl name='pinctrl' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/pinctrl/core.h' line='77' column='1' id='51195455'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/pinctrl/core.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='states' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state' type-id='f418ceb3' visibility='default' filepath='drivers/pinctrl/core.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dt_maps' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='users' type-id='400fb07b' visibility='default' filepath='drivers/pinctrl/core.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_desc' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='130' column='1' id='25e1863f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pins' type-id='caec04a4' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='npins' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pctlops' type-id='0ec7edd9' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pmxops' type-id='6780b0ea' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='confops' type-id='ddf6796c' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_custom_params' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='custom_params' type-id='5198b4a4' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='custom_conf_items' type-id='67b214d6' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='link_consumers' type-id='b50a4934' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='143' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_dev' size-in-bits='1536' is-struct='yes' visibility='default' filepath='drivers/pinctrl/core.h' line='42' column='1' id='b5990c25'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='desc' type-id='d4682107' visibility='default' filepath='drivers/pinctrl/core.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pin_desc_tree' type-id='d39738ac' visibility='default' filepath='drivers/pinctrl/core.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pin_group_tree' type-id='d39738ac' visibility='default' filepath='drivers/pinctrl/core.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_groups' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/core.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pin_function_tree' type-id='d39738ac' visibility='default' filepath='drivers/pinctrl/core.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='num_functions' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/core.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='gpio_ranges' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/pinctrl/core.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='drivers/pinctrl/core.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='drivers/pinctrl/core.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='p' type-id='73ea90c5' visibility='default' filepath='drivers/pinctrl/core.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='hog_default' type-id='f418ceb3' visibility='default' filepath='drivers/pinctrl/core.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hog_sleep' type-id='f418ceb3' visibility='default' filepath='drivers/pinctrl/core.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='drivers/pinctrl/core.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='device_root' type-id='27675065' visibility='default' filepath='drivers/pinctrl/core.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_gpio_range' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='58' column='1' id='5cb32b9b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='base' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pin_base' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pins' type-id='5b2fd8e8' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='npins' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='gc' type-id='e324928d' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_state' size-in-bits='320' is-struct='yes' visibility='default' filepath='drivers/pinctrl/core.h' line='92' column='1' id='f66244c3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/pinctrl/core.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='settings' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='16c375b8' size-in-bits='64' id='67b214d6'/>
+      <pointer-type-def type-id='ff60ef66' size-in-bits='64' id='5198b4a4'/>
+      <pointer-type-def type-id='364c344e' size-in-bits='64' id='ddf6796c'/>
+      <pointer-type-def type-id='eb76a649' size-in-bits='64' id='0ec7edd9'/>
+      <pointer-type-def type-id='56125f66' size-in-bits='64' id='caec04a4'/>
+      <pointer-type-def type-id='1a814584' size-in-bits='64' id='6780b0ea'/>
+      <qualified-type-def type-id='6a8fbda3' const='yes' id='16c375b8'/>
+      <qualified-type-def type-id='b5cf31bb' const='yes' id='ff60ef66'/>
+      <qualified-type-def type-id='b488fcb9' const='yes' id='364c344e'/>
+      <qualified-type-def type-id='ed4a990e' const='yes' id='eb76a649'/>
+      <qualified-type-def type-id='8347d13f' const='yes' id='56125f66'/>
+      <qualified-type-def type-id='c20dd28d' const='yes' id='1a814584'/>
+      <class-decl name='pin_config_item' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='171' column='1' id='6a8fbda3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='param' type-id='2d24e48c' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='display' type-id='b99c00c9' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='format' type-id='b99c00c9' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='has_arg' type-id='b50a4934' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='175' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinconf_generic_params' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='178' column='1' id='b5cf31bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='property' type-id='b99c00c9' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='param' type-id='b486b770' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='default_value' type-id='19c2251e' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='181' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinconf_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='38' column='1' id='b488fcb9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_generic' type-id='b50a4934' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pin_config_get' type-id='12d26e9b' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pin_config_set' type-id='d02d53e9' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pin_config_group_get' type-id='12d26e9b' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pin_config_group_set' type-id='d02d53e9' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pin_config_dbg_show' type-id='60403ce4' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pin_config_group_dbg_show' type-id='60403ce4' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pin_config_config_dbg_show' type-id='fb17c5d2' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='88' column='1' id='ed4a990e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_groups_count' type-id='9b3cc28d' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_group_name' type-id='6fd7b107' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_group_pins' type-id='8aae90f2' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pin_dbg_show' type-id='60403ce4' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dt_node_to_map' type-id='8679be0f' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dt_free_map' type-id='4a390f11' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_pin_desc' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='36' column='1' id='8347d13f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='number' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='drv_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinmux_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='60' column='1' id='c20dd28d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='request' type-id='fdb631af' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='free' type-id='fdb631af' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_functions_count' type-id='9b3cc28d' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_function_name' type-id='6fd7b107' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_function_groups' type-id='43f4ef15' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_mux' type-id='1f7349e5' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='gpio_request_enable' type-id='eadc8303' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='gpio_disable_free' type-id='b23189b4' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='gpio_set_direction' type-id='0a3de906' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='strict' type-id='b50a4934' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7fa63f43' size-in-bits='64' id='6fd7b107'/>
+      <qualified-type-def type-id='b486b770' const='yes' id='2d24e48c'/>
+      <enum-decl name='pin_config_param' filepath='include/linux/pinctrl/pinconf-generic.h' line='111' column='1' id='b486b770'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PIN_CONFIG_BIAS_BUS_HOLD' value='0'/>
+        <enumerator name='PIN_CONFIG_BIAS_DISABLE' value='1'/>
+        <enumerator name='PIN_CONFIG_BIAS_HIGH_IMPEDANCE' value='2'/>
+        <enumerator name='PIN_CONFIG_BIAS_PULL_DOWN' value='3'/>
+        <enumerator name='PIN_CONFIG_BIAS_PULL_PIN_DEFAULT' value='4'/>
+        <enumerator name='PIN_CONFIG_BIAS_PULL_UP' value='5'/>
+        <enumerator name='PIN_CONFIG_DRIVE_OPEN_DRAIN' value='6'/>
+        <enumerator name='PIN_CONFIG_DRIVE_OPEN_SOURCE' value='7'/>
+        <enumerator name='PIN_CONFIG_DRIVE_PUSH_PULL' value='8'/>
+        <enumerator name='PIN_CONFIG_DRIVE_STRENGTH' value='9'/>
+        <enumerator name='PIN_CONFIG_DRIVE_STRENGTH_UA' value='10'/>
+        <enumerator name='PIN_CONFIG_INPUT_DEBOUNCE' value='11'/>
+        <enumerator name='PIN_CONFIG_INPUT_ENABLE' value='12'/>
+        <enumerator name='PIN_CONFIG_INPUT_SCHMITT' value='13'/>
+        <enumerator name='PIN_CONFIG_INPUT_SCHMITT_ENABLE' value='14'/>
+        <enumerator name='PIN_CONFIG_LOW_POWER_MODE' value='15'/>
+        <enumerator name='PIN_CONFIG_OUTPUT_ENABLE' value='16'/>
+        <enumerator name='PIN_CONFIG_OUTPUT' value='17'/>
+        <enumerator name='PIN_CONFIG_POWER_SOURCE' value='18'/>
+        <enumerator name='PIN_CONFIG_SLEEP_HARDWARE_STATE' value='19'/>
+        <enumerator name='PIN_CONFIG_SLEW_RATE' value='20'/>
+        <enumerator name='PIN_CONFIG_SKEW_DELAY' value='21'/>
+        <enumerator name='PIN_CONFIG_PERSIST_STATE' value='22'/>
+        <enumerator name='PIN_CONFIG_END' value='127'/>
+        <enumerator name='PIN_CONFIG_MAX' value='255'/>
+      </enum-decl>
+      <pointer-type-def type-id='9dcba7d1' size-in-bits='64' id='9b3cc28d'/>
+      <pointer-type-def type-id='ea4ec523' size-in-bits='64' id='8679be0f'/>
+      <pointer-type-def type-id='a38ff96f' size-in-bits='64' id='eadc8303'/>
+      <pointer-type-def type-id='aa0df914' size-in-bits='64' id='0a3de906'/>
+      <pointer-type-def type-id='9ee64233' size-in-bits='64' id='fdb631af'/>
+      <pointer-type-def type-id='e1fc3fb1' size-in-bits='64' id='43f4ef15'/>
+      <pointer-type-def type-id='5a602650' size-in-bits='64' id='8aae90f2'/>
+      <pointer-type-def type-id='8a1ce1f9' size-in-bits='64' id='1f7349e5'/>
+      <pointer-type-def type-id='eb53191f' size-in-bits='64' id='12d26e9b'/>
+      <pointer-type-def type-id='f56eb14d' size-in-bits='64' id='d02d53e9'/>
+      <pointer-type-def type-id='20b2126a' size-in-bits='64' id='b23189b4'/>
+      <pointer-type-def type-id='a9cba835' size-in-bits='64' id='4a390f11'/>
+      <pointer-type-def type-id='df58f5a2' size-in-bits='64' id='60403ce4'/>
+      <pointer-type-def type-id='71fa1210' size-in-bits='64' id='fb17c5d2'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pinctrl/pinconf-generic.c' language='LANG_C89'>
+      <pointer-type-def type-id='1d2c2b85' size-in-bits='64' id='9b88c47d'/>
+      <function-decl name='pinconf_generic_parse_dt_config' mangled-name='pinconf_generic_parse_dt_config' filepath='drivers/pinctrl/pinconf-generic.c' line='238' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinconf_generic_parse_dt_config'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/pinctrl/pinconf-generic.c' line='238' column='1'/>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/pinconf-generic.c' line='239' column='1'/>
+        <parameter type-id='9b88c47d' name='configs' filepath='drivers/pinctrl/pinconf-generic.c' line='240' column='1'/>
+        <parameter type-id='807869d3' name='nconfigs' filepath='drivers/pinctrl/pinconf-generic.c' line='241' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_prop_next_string' mangled-name='of_prop_next_string' filepath='include/linux/of.h' line='549' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_prop_next_string'>
+        <parameter type-id='ddcd89c6'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pinctrl/pinctrl-amd.c' language='LANG_C89'>
+      <class-decl name='gpio_device' size-in-bits='9216' is-struct='yes' visibility='default' filepath='drivers/gpio/gpiolib.h' line='44' column='1' id='e32a05ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='drivers/gpio/gpiolib.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/gpio/gpiolib.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='chrdev' type-id='22f86352' visibility='default' filepath='drivers/gpio/gpiolib.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='mockdev' type-id='fa0b179b' visibility='default' filepath='drivers/gpio/gpiolib.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='drivers/gpio/gpiolib.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='chip' type-id='e324928d' visibility='default' filepath='drivers/gpio/gpiolib.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='descs' type-id='26760480' visibility='default' filepath='drivers/gpio/gpiolib.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='base' type-id='95e97e5e' visibility='default' filepath='drivers/gpio/gpiolib.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8800'>
+          <var-decl name='ngpio' type-id='1dc6a898' visibility='default' filepath='drivers/gpio/gpiolib.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='drivers/gpio/gpiolib.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='drivers/gpio/gpiolib.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/gpio/gpiolib.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='pin_ranges' type-id='72f469ec' visibility='default' filepath='drivers/gpio/gpiolib.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinmux_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='60' column='1' id='c20dd28d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='request' type-id='fdb631af' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='free' type-id='fdb631af' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_functions_count' type-id='9b3cc28d' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_function_name' type-id='6fd7b107' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_function_groups' type-id='43f4ef15' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_mux' type-id='1f7349e5' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='gpio_request_enable' type-id='eadc8303' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='gpio_disable_free' type-id='b23189b4' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='gpio_set_direction' type-id='0a3de906' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='strict' type-id='b50a4934' visibility='default' filepath='include/linux/pinctrl/pinmux.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pin_info' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/devinfo.h' line='30' column='1' id='038d05be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='p' type-id='73ea90c5' visibility='default' filepath='include/linux/pinctrl/devinfo.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='default_state' type-id='f418ceb3' visibility='default' filepath='include/linux/pinctrl/devinfo.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init_state' type-id='f418ceb3' visibility='default' filepath='include/linux/pinctrl/devinfo.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sleep_state' type-id='f418ceb3' visibility='default' filepath='include/linux/pinctrl/devinfo.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='idle_state' type-id='f418ceb3' visibility='default' filepath='include/linux/pinctrl/devinfo.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/pinctrl/core.h' line='77' column='1' id='51195455'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/pinctrl/core.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='states' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state' type-id='f418ceb3' visibility='default' filepath='drivers/pinctrl/core.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dt_maps' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='users' type-id='400fb07b' visibility='default' filepath='drivers/pinctrl/core.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_state' size-in-bits='320' is-struct='yes' visibility='default' filepath='drivers/pinctrl/core.h' line='92' column='1' id='f66244c3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/pinctrl/core.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='settings' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_dev' size-in-bits='1536' is-struct='yes' visibility='default' filepath='drivers/pinctrl/core.h' line='42' column='1' id='b5990c25'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='desc' type-id='d4682107' visibility='default' filepath='drivers/pinctrl/core.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pin_desc_tree' type-id='d39738ac' visibility='default' filepath='drivers/pinctrl/core.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pin_group_tree' type-id='d39738ac' visibility='default' filepath='drivers/pinctrl/core.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_groups' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/core.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pin_function_tree' type-id='d39738ac' visibility='default' filepath='drivers/pinctrl/core.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='num_functions' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/core.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='gpio_ranges' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/pinctrl/core.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='drivers/pinctrl/core.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='drivers/pinctrl/core.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='p' type-id='73ea90c5' visibility='default' filepath='drivers/pinctrl/core.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='hog_default' type-id='f418ceb3' visibility='default' filepath='drivers/pinctrl/core.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hog_sleep' type-id='f418ceb3' visibility='default' filepath='drivers/pinctrl/core.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='drivers/pinctrl/core.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='device_root' type-id='27675065' visibility='default' filepath='drivers/pinctrl/core.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_desc' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='130' column='1' id='25e1863f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pins' type-id='caec04a4' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='npins' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pctlops' type-id='0ec7edd9' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pmxops' type-id='6780b0ea' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='confops' type-id='ddf6796c' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_custom_params' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='custom_params' type-id='5198b4a4' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='custom_conf_items' type-id='67b214d6' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='link_consumers' type-id='b50a4934' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='143' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_pin_desc' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='36' column='1' id='8347d13f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='number' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='drv_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='88' column='1' id='ed4a990e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_groups_count' type-id='9b3cc28d' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_group_name' type-id='6fd7b107' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_group_pins' type-id='8aae90f2' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pin_dbg_show' type-id='60403ce4' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dt_node_to_map' type-id='8679be0f' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dt_free_map' type-id='4a390f11' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_map' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/machine.h' line='67' column='1' id='c34e46f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_name' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/machine.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/machine.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='95da6d1c' visibility='default' filepath='include/linux/pinctrl/machine.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ctrl_dev_name' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/machine.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='2789d524' visibility='default' filepath='include/linux/pinctrl/machine.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='pinctrl_map_type' filepath='include/linux/pinctrl/machine.h' line='18' column='1' id='95da6d1c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PIN_MAP_TYPE_INVALID' value='0'/>
+        <enumerator name='PIN_MAP_TYPE_DUMMY_STATE' value='1'/>
+        <enumerator name='PIN_MAP_TYPE_MUX_GROUP' value='2'/>
+        <enumerator name='PIN_MAP_TYPE_CONFIGS_PIN' value='3'/>
+        <enumerator name='PIN_MAP_TYPE_CONFIGS_GROUP' value='4'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/pinctrl/machine.h' line='72' column='1' id='2789d524'>
+        <data-member access='private'>
+          <var-decl name='mux' type-id='ad4dd73d' visibility='default' filepath='include/linux/pinctrl/machine.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='configs' type-id='687781fc' visibility='default' filepath='include/linux/pinctrl/machine.h' line='74' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='pinctrl_map_mux' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/machine.h' line='33' column='1' id='ad4dd73d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='group' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/machine.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='function' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/machine.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_map_configs' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/machine.h' line='47' column='1' id='687781fc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='group_or_pin' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/machine.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='configs' type-id='1d2c2b85' visibility='default' filepath='include/linux/pinctrl/machine.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_configs' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/machine.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinconf_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='38' column='1' id='b488fcb9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_generic' type-id='b50a4934' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pin_config_get' type-id='12d26e9b' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pin_config_set' type-id='d02d53e9' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pin_config_group_get' type-id='12d26e9b' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pin_config_group_set' type-id='d02d53e9' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pin_config_dbg_show' type-id='60403ce4' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pin_config_group_dbg_show' type-id='60403ce4' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pin_config_config_dbg_show' type-id='fb17c5d2' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinconf_generic_params' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='178' column='1' id='b5cf31bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='property' type-id='b99c00c9' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='param' type-id='b486b770' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='default_value' type-id='19c2251e' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='181' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='pin_config_param' filepath='include/linux/pinctrl/pinconf-generic.h' line='111' column='1' id='b486b770'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PIN_CONFIG_BIAS_BUS_HOLD' value='0'/>
+        <enumerator name='PIN_CONFIG_BIAS_DISABLE' value='1'/>
+        <enumerator name='PIN_CONFIG_BIAS_HIGH_IMPEDANCE' value='2'/>
+        <enumerator name='PIN_CONFIG_BIAS_PULL_DOWN' value='3'/>
+        <enumerator name='PIN_CONFIG_BIAS_PULL_PIN_DEFAULT' value='4'/>
+        <enumerator name='PIN_CONFIG_BIAS_PULL_UP' value='5'/>
+        <enumerator name='PIN_CONFIG_DRIVE_OPEN_DRAIN' value='6'/>
+        <enumerator name='PIN_CONFIG_DRIVE_OPEN_SOURCE' value='7'/>
+        <enumerator name='PIN_CONFIG_DRIVE_PUSH_PULL' value='8'/>
+        <enumerator name='PIN_CONFIG_DRIVE_STRENGTH' value='9'/>
+        <enumerator name='PIN_CONFIG_DRIVE_STRENGTH_UA' value='10'/>
+        <enumerator name='PIN_CONFIG_INPUT_DEBOUNCE' value='11'/>
+        <enumerator name='PIN_CONFIG_INPUT_ENABLE' value='12'/>
+        <enumerator name='PIN_CONFIG_INPUT_SCHMITT' value='13'/>
+        <enumerator name='PIN_CONFIG_INPUT_SCHMITT_ENABLE' value='14'/>
+        <enumerator name='PIN_CONFIG_LOW_POWER_MODE' value='15'/>
+        <enumerator name='PIN_CONFIG_OUTPUT_ENABLE' value='16'/>
+        <enumerator name='PIN_CONFIG_OUTPUT' value='17'/>
+        <enumerator name='PIN_CONFIG_POWER_SOURCE' value='18'/>
+        <enumerator name='PIN_CONFIG_SLEEP_HARDWARE_STATE' value='19'/>
+        <enumerator name='PIN_CONFIG_SLEW_RATE' value='20'/>
+        <enumerator name='PIN_CONFIG_SKEW_DELAY' value='21'/>
+        <enumerator name='PIN_CONFIG_PERSIST_STATE' value='22'/>
+        <enumerator name='PIN_CONFIG_END' value='127'/>
+        <enumerator name='PIN_CONFIG_MAX' value='255'/>
+      </enum-decl>
+      <class-decl name='pin_config_item' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='171' column='1' id='6a8fbda3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='param' type-id='2d24e48c' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='display' type-id='b99c00c9' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='format' type-id='b99c00c9' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='has_arg' type-id='b50a4934' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='175' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gpio_chip' size-in-bits='3712' is-struct='yes' visibility='default' filepath='include/linux/gpio/driver.h' line='340' column='1' id='59f9f35d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='include/linux/gpio/driver.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gpiodev' type-id='fb7dc22d' visibility='default' filepath='include/linux/gpio/driver.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/gpio/driver.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/gpio/driver.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='request' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='free' type-id='d2a48436' visibility='default' filepath='include/linux/gpio/driver.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_direction' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='direction_input' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='direction_output' type-id='9d5147b2' visibility='default' filepath='include/linux/gpio/driver.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_multiple' type-id='ea666691' visibility='default' filepath='include/linux/gpio/driver.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set' type-id='7c70f4dd' visibility='default' filepath='include/linux/gpio/driver.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='set_multiple' type-id='f471a8cc' visibility='default' filepath='include/linux/gpio/driver.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_config' type-id='49728c6d' visibility='default' filepath='include/linux/gpio/driver.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='to_irq' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dbg_show' type-id='2c6d11fe' visibility='default' filepath='include/linux/gpio/driver.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='init_valid_mask' type-id='0084e9cb' visibility='default' filepath='include/linux/gpio/driver.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='base' type-id='95e97e5e' visibility='default' filepath='include/linux/gpio/driver.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='ngpio' type-id='1dc6a898' visibility='default' filepath='include/linux/gpio/driver.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='names' type-id='13956559' visibility='default' filepath='include/linux/gpio/driver.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='can_sleep' type-id='b50a4934' visibility='default' filepath='include/linux/gpio/driver.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='irq' type-id='31045126' visibility='default' filepath='include/linux/gpio/driver.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='valid_mask' type-id='1d2c2b85' visibility='default' filepath='include/linux/gpio/driver.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/gpio/driver.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='of_gpio_n_cells' type-id='f0981eeb' visibility='default' filepath='include/linux/gpio/driver.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='of_xlate' type-id='fdd04afe' visibility='default' filepath='include/linux/gpio/driver.h' line='449' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gpio_irq_chip' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/gpio/driver.h' line='28' column='1' id='31045126'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chip' type-id='8846a616' visibility='default' filepath='include/linux/gpio/driver.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='domain' type-id='7544e825' visibility='default' filepath='include/linux/gpio/driver.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='domain_ops' type-id='2c202856' visibility='default' filepath='include/linux/gpio/driver.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/gpio/driver.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parent_domain' type-id='7544e825' visibility='default' filepath='include/linux/gpio/driver.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='child_to_parent_hwirq' type-id='391871d1' visibility='default' filepath='include/linux/gpio/driver.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='populate_parent_fwspec' type-id='c12d7269' visibility='default' filepath='include/linux/gpio/driver.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='child_offset_to_irq' type-id='f5b0f2f2' visibility='default' filepath='include/linux/gpio/driver.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='child_irq_domain_ops' type-id='0926e4bd' visibility='default' filepath='include/linux/gpio/driver.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='handler' type-id='cdb741d3' visibility='default' filepath='include/linux/gpio/driver.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='default_type' type-id='f0981eeb' visibility='default' filepath='include/linux/gpio/driver.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='lock_key' type-id='a57283f9' visibility='default' filepath='include/linux/gpio/driver.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='request_key' type-id='a57283f9' visibility='default' filepath='include/linux/gpio/driver.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='parent_handler' type-id='cdb741d3' visibility='default' filepath='include/linux/gpio/driver.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='parent_handler_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/gpio/driver.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='num_parents' type-id='f0981eeb' visibility='default' filepath='include/linux/gpio/driver.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='parents' type-id='807869d3' visibility='default' filepath='include/linux/gpio/driver.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='map' type-id='807869d3' visibility='default' filepath='include/linux/gpio/driver.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='threaded' type-id='b50a4934' visibility='default' filepath='include/linux/gpio/driver.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='init_hw' type-id='26bfaed1' visibility='default' filepath='include/linux/gpio/driver.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='init_valid_mask' type-id='bb3baa4e' visibility='default' filepath='include/linux/gpio/driver.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='valid_mask' type-id='1d2c2b85' visibility='default' filepath='include/linux/gpio/driver.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='first' type-id='f0981eeb' visibility='default' filepath='include/linux/gpio/driver.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='irq_enable' type-id='185ccd91' visibility='default' filepath='include/linux/gpio/driver.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='irq_disable' type-id='185ccd91' visibility='default' filepath='include/linux/gpio/driver.h' line='253' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7fa63f43' size-in-bits='64' id='6fd7b107'/>
+      <qualified-type-def type-id='fbff4263' const='yes' id='bde36be8'/>
+      <pointer-type-def type-id='bde36be8' size-in-bits='64' id='af02a266'/>
+      <qualified-type-def type-id='6a8fbda3' const='yes' id='16c375b8'/>
+      <pointer-type-def type-id='16c375b8' size-in-bits='64' id='67b214d6'/>
+      <qualified-type-def type-id='b486b770' const='yes' id='2d24e48c'/>
+      <qualified-type-def type-id='b5cf31bb' const='yes' id='ff60ef66'/>
+      <pointer-type-def type-id='ff60ef66' size-in-bits='64' id='5198b4a4'/>
+      <qualified-type-def type-id='b488fcb9' const='yes' id='364c344e'/>
+      <pointer-type-def type-id='364c344e' size-in-bits='64' id='ddf6796c'/>
+      <qualified-type-def type-id='ed4a990e' const='yes' id='eb76a649'/>
+      <pointer-type-def type-id='eb76a649' size-in-bits='64' id='0ec7edd9'/>
+      <qualified-type-def type-id='8347d13f' const='yes' id='56125f66'/>
+      <pointer-type-def type-id='56125f66' size-in-bits='64' id='caec04a4'/>
+      <qualified-type-def type-id='c20dd28d' const='yes' id='1a814584'/>
+      <pointer-type-def type-id='1a814584' size-in-bits='64' id='6780b0ea'/>
+      <pointer-type-def type-id='5b2fd8e8' size-in-bits='64' id='4e523966'/>
+      <qualified-type-def type-id='d39738ac' const='yes' id='9bc083a1'/>
+      <pointer-type-def type-id='9bc083a1' size-in-bits='64' id='bb0f13d1'/>
+      <pointer-type-def type-id='038d05be' size-in-bits='64' id='fa43ef1e'/>
+      <pointer-type-def type-id='ba05298e' size-in-bits='64' id='ff9465c8'/>
+      <pointer-type-def type-id='59f9f35d' size-in-bits='64' id='e324928d'/>
+      <pointer-type-def type-id='e32a05ed' size-in-bits='64' id='fb7dc22d'/>
+      <pointer-type-def type-id='33c534fd' size-in-bits='64' id='26bfaed1'/>
+      <pointer-type-def type-id='95abac74' size-in-bits='64' id='fdd04afe'/>
+      <pointer-type-def type-id='e19b8aa7' size-in-bits='64' id='9f2634eb'/>
+      <pointer-type-def type-id='40afefd0' size-in-bits='64' id='9d5147b2'/>
+      <pointer-type-def type-id='d35840cd' size-in-bits='64' id='391871d1'/>
+      <pointer-type-def type-id='706f3909' size-in-bits='64' id='49728c6d'/>
+      <pointer-type-def type-id='068d5e4f' size-in-bits='64' id='0084e9cb'/>
+      <pointer-type-def type-id='4cbeea4d' size-in-bits='64' id='ea666691'/>
+      <pointer-type-def type-id='9dcba7d1' size-in-bits='64' id='9b3cc28d'/>
+      <pointer-type-def type-id='ea4ec523' size-in-bits='64' id='8679be0f'/>
+      <pointer-type-def type-id='5a602650' size-in-bits='64' id='8aae90f2'/>
+      <pointer-type-def type-id='eb53191f' size-in-bits='64' id='12d26e9b'/>
+      <pointer-type-def type-id='f56eb14d' size-in-bits='64' id='d02d53e9'/>
+      <pointer-type-def type-id='51195455' size-in-bits='64' id='73ea90c5'/>
+      <pointer-type-def type-id='25e1863f' size-in-bits='64' id='d4682107'/>
+      <pointer-type-def type-id='b5990c25' size-in-bits='64' id='10216dc5'/>
+      <pointer-type-def type-id='c34e46f8' size-in-bits='64' id='9638d26e'/>
+      <pointer-type-def type-id='9638d26e' size-in-bits='64' id='bf73010c'/>
+      <pointer-type-def type-id='f66244c3' size-in-bits='64' id='f418ceb3'/>
+      <pointer-type-def type-id='74b5d8d8' size-in-bits='64' id='f5b0f2f2'/>
+      <pointer-type-def type-id='0d702425' size-in-bits='64' id='c12d7269'/>
+      <pointer-type-def type-id='bd08cd5c' size-in-bits='64' id='d2a48436'/>
+      <pointer-type-def type-id='e30804d9' size-in-bits='64' id='7c70f4dd'/>
+      <pointer-type-def type-id='0863015c' size-in-bits='64' id='bb3baa4e'/>
+      <pointer-type-def type-id='8a70282a' size-in-bits='64' id='f471a8cc'/>
+      <pointer-type-def type-id='a9cba835' size-in-bits='64' id='4a390f11'/>
+      <pointer-type-def type-id='df58f5a2' size-in-bits='64' id='60403ce4'/>
+      <pointer-type-def type-id='71fa1210' size-in-bits='64' id='fb17c5d2'/>
+      <pointer-type-def type-id='92920004' size-in-bits='64' id='2c6d11fe'/>
+      <function-decl name='devm_ioremap_nocache' mangled-name='devm_ioremap_nocache' filepath='include/linux/io.h' line='69' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_ioremap_nocache'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='3a47d82b'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='platform_get_irq' mangled-name='platform_get_irq' filepath='include/linux/platform_device.h' line='60' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_get_irq'>
+        <parameter type-id='db362995'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_pinctrl_register' mangled-name='devm_pinctrl_register' filepath='include/linux/pinctrl/pinctrl.h' line='165' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_pinctrl_register'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='d4682107'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='10216dc5'/>
+      </function-decl>
+      <function-decl name='gpiochip_add_data_with_key' mangled-name='gpiochip_add_data_with_key' filepath='include/linux/gpio/driver.h' line='458' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_add_data_with_key'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='a57283f9'/>
+        <parameter type-id='a57283f9'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiochip_add_pin_range' mangled-name='gpiochip_add_pin_range' filepath='include/linux/gpio/driver.h' line='678' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_add_pin_range'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_request_threaded_irq' mangled-name='devm_request_threaded_irq' filepath='include/linux/interrupt.h' line='184' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_request_threaded_irq'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='ff9465c8'/>
+        <parameter type-id='ff9465c8'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiochip_remove' mangled-name='gpiochip_remove' filepath='include/linux/gpio/driver.h' line='500' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_remove'>
+        <parameter type-id='e324928d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='radix_tree_lookup' mangled-name='radix_tree_lookup' filepath='include/linux/radix-tree.h' line='211' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='radix_tree_lookup'>
+        <parameter type-id='bb0f13d1'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='gpiochip_line_is_irq' mangled-name='gpiochip_line_is_irq' filepath='include/linux/gpio/driver.h' line='507' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_line_is_irq'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='gpiochip_get_data' mangled-name='gpiochip_get_data' filepath='include/linux/gpio/driver.h' line='522' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_get_data'>
+        <parameter type-id='e324928d'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='pinctrl_dev_get_drvdata' mangled-name='pinctrl_dev_get_drvdata' filepath='include/linux/pinctrl/pinctrl.h' line='201' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_dev_get_drvdata'>
+        <parameter type-id='10216dc5'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='pinconf_generic_dt_node_to_map' mangled-name='pinconf_generic_dt_node_to_map' filepath='include/linux/pinctrl/pinconf-generic.h' line='188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinconf_generic_dt_node_to_map'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='bf73010c'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='95da6d1c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='7fa63f43'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='80f4b756'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ba05298e'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='8086ea38'/>
+      </function-type>
+      <function-type size-in-bits='64' id='33c534fd'>
+        <parameter type-id='e324928d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='95abac74'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='af02a266'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e19b8aa7'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='40afefd0'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d35840cd'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='706f3909'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='068d5e4f'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4cbeea4d'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9dcba7d1'>
+        <parameter type-id='10216dc5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ea4ec523'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='bf73010c'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5a602650'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='4e523966'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eb53191f'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f56eb14d'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='74b5d8d8'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0d702425'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='2869bb38'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bd08cd5c'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e30804d9'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0863015c'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8a70282a'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a9cba835'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='9638d26e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='df58f5a2'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='f8dc9df0'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='71fa1210'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='f8dc9df0'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='92920004'>
+        <parameter type-id='f8dc9df0'/>
+        <parameter type-id='e324928d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pinctrl/pinctrl-single.c' language='LANG_C89'>
+      <class-decl name='gpio_chip' is-struct='yes' visibility='default' is-declaration-only='yes' id='59f9f35e'/>
+      <class-decl name='pinctrl_gpio_range' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='58' column='1' id='5cb32b9b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='base' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pin_base' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pins' type-id='5b2fd8e8' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='npins' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='gc' type-id='e324928e' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='13956559' size-in-bits='64' id='472eb409'/>
+      <pointer-type-def type-id='59f9f35e' size-in-bits='64' id='e324928e'/>
+      <pointer-type-def type-id='a38ff96f' size-in-bits='64' id='eadc8303'/>
+      <pointer-type-def type-id='aa0df914' size-in-bits='64' id='0a3de906'/>
+      <pointer-type-def type-id='9ee64233' size-in-bits='64' id='fdb631af'/>
+      <pointer-type-def type-id='e1fc3fb1' size-in-bits='64' id='43f4ef15'/>
+      <pointer-type-def type-id='8a1ce1f9' size-in-bits='64' id='1f7349e5'/>
+      <pointer-type-def type-id='5cb32b9b' size-in-bits='64' id='e7faa6fb'/>
+      <pointer-type-def type-id='20b2126a' size-in-bits='64' id='b23189b4'/>
+      <function-decl name='of_device_get_match_data' mangled-name='of_device_get_match_data' filepath='include/linux/of_device.h' line='36' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_device_get_match_data'>
+        <parameter type-id='8df61054'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='_dev_warn' mangled-name='_dev_warn' filepath='include/linux/device.h' line='1760' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_dev_warn'>
+        <parameter type-id='8df61054'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_kstrdup' mangled-name='devm_kstrdup' filepath='include/linux/device.h' line='969' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_kstrdup'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='request_threaded_irq' mangled-name='request_threaded_irq' filepath='include/linux/interrupt.h' line='139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='request_threaded_irq'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='ff9465c8'/>
+        <parameter type-id='ff9465c8'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pinctrl_force_sleep' mangled-name='pinctrl_force_sleep' filepath='drivers/pinctrl/core.h' line='243' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_force_sleep'>
+        <parameter type-id='10216dc5'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='free_irq' mangled-name='free_irq' filepath='include/linux/interrupt.h' line='175' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_irq'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='pinctrl_unregister' mangled-name='pinctrl_unregister' filepath='include/linux/pinctrl/pinctrl.h' line='157' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_unregister'>
+        <parameter type-id='10216dc5'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_set_chip_data' mangled-name='irq_set_chip_data' filepath='include/linux/irq.h' line='779' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_chip_data'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_kfree' mangled-name='devm_kfree' filepath='include/linux/device.h' line='968' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_kfree'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='a38ff96f'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='e7faa6fb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aa0df914'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='e7faa6fb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9ee64233'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e1fc3fb1'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='472eb409'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8a1ce1f9'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='20b2126a'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='e7faa6fb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pinctrl/pinctrl-utils.c' language='LANG_C89'>
+      <function-decl name='pinctrl_utils_reserve_map' mangled-name='pinctrl_utils_reserve_map' filepath='drivers/pinctrl/pinctrl-utils.c' line='31' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_utils_reserve_map'>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/pinctrl-utils.c' line='31' column='1'/>
+        <parameter type-id='bf73010c' name='map' filepath='drivers/pinctrl/pinctrl-utils.c' line='32' column='1'/>
+        <parameter type-id='807869d3' name='reserved_maps' filepath='drivers/pinctrl/pinctrl-utils.c' line='32' column='1'/>
+        <parameter type-id='807869d3' name='num_maps' filepath='drivers/pinctrl/pinctrl-utils.c' line='33' column='1'/>
+        <parameter type-id='f0981eeb' name='reserve' filepath='drivers/pinctrl/pinctrl-utils.c' line='33' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pinctrl_utils_add_map_mux' mangled-name='pinctrl_utils_add_map_mux' filepath='drivers/pinctrl/pinctrl-utils.c' line='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_utils_add_map_mux'>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/pinctrl-utils.c' line='56' column='1'/>
+        <parameter type-id='bf73010c' name='map' filepath='drivers/pinctrl/pinctrl-utils.c' line='57' column='1'/>
+        <parameter type-id='807869d3' name='reserved_maps' filepath='drivers/pinctrl/pinctrl-utils.c' line='57' column='1'/>
+        <parameter type-id='807869d3' name='num_maps' filepath='drivers/pinctrl/pinctrl-utils.c' line='58' column='1'/>
+        <parameter type-id='80f4b756' name='group' filepath='drivers/pinctrl/pinctrl-utils.c' line='58' column='1'/>
+        <parameter type-id='80f4b756' name='function' filepath='drivers/pinctrl/pinctrl-utils.c' line='59' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pinctrl_utils_add_map_configs' mangled-name='pinctrl_utils_add_map_configs' filepath='drivers/pinctrl/pinctrl-utils.c' line='73' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_utils_add_map_configs'>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/pinctrl-utils.c' line='73' column='1'/>
+        <parameter type-id='bf73010c' name='map' filepath='drivers/pinctrl/pinctrl-utils.c' line='74' column='1'/>
+        <parameter type-id='807869d3' name='reserved_maps' filepath='drivers/pinctrl/pinctrl-utils.c' line='74' column='1'/>
+        <parameter type-id='807869d3' name='num_maps' filepath='drivers/pinctrl/pinctrl-utils.c' line='75' column='1'/>
+        <parameter type-id='80f4b756' name='group' filepath='drivers/pinctrl/pinctrl-utils.c' line='75' column='1'/>
+        <parameter type-id='1d2c2b85' name='configs' filepath='drivers/pinctrl/pinctrl-utils.c' line='76' column='1'/>
+        <parameter type-id='f0981eeb' name='num_configs' filepath='drivers/pinctrl/pinctrl-utils.c' line='76' column='1'/>
+        <parameter type-id='95da6d1c' name='type' filepath='drivers/pinctrl/pinctrl-utils.c' line='77' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pinctrl_utils_free_map' mangled-name='pinctrl_utils_free_map' filepath='drivers/pinctrl/pinctrl-utils.c' line='123' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_utils_free_map'>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/pinctrl-utils.c' line='123' column='1'/>
+        <parameter type-id='9638d26e' name='map' filepath='drivers/pinctrl/pinctrl-utils.c' line='124' column='1'/>
+        <parameter type-id='f0981eeb' name='num_maps' filepath='drivers/pinctrl/pinctrl-utils.c' line='124' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pinctrl/qcom/pinctrl-msm.c' language='LANG_C89'>
+      <class-decl name='msm_pinctrl_soc_data' size-in-bits='768' is-struct='yes' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='119' column='1' id='4c1ad966'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pins' type-id='caec04a4' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='npins' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='functions' type-id='fbebff4e' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nfunctions' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='groups' type-id='7dfd260c' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ngroups' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='ngpios' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pull_no_keeper' type-id='b50a4934' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tiles' type-id='13956559' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ntiles' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reserved_gpios' type-id='6d60f45d' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='wakeirq_map' type-id='3be741ab' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='nwakeirq_map' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='msm_function' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='18' column='1' id='77eb4ead'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='groups' type-id='13956559' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ngroups' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='msm_pingroup' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='59' column='1' id='944d6deb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pins' type-id='5b2fd8e8' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='npins' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='funcs' type-id='807869d3' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nfuncs' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='ctl_reg' type-id='19c2251e' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='io_reg' type-id='19c2251e' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='intr_cfg_reg' type-id='19c2251e' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='intr_status_reg' type-id='19c2251e' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='intr_target_reg' type-id='19c2251e' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='tile' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='mux_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='pull_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='drv_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='oe_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='in_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='out_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='intr_enable_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='intr_status_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='intr_ack_high' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='intr_target_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='intr_target_kpss_val' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='intr_raw_status_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='intr_polarity_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='intr_detection_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='intr_detection_width' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='msm_gpio_wakeirq_map' size-in-bits='64' is-struct='yes' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='101' column='1' id='a90c9006'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gpio' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wakeirq' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2448a865' size-in-bits='64' id='6d60f45d'/>
+      <qualified-type-def type-id='77eb4ead' const='yes' id='f13c4c10'/>
+      <pointer-type-def type-id='f13c4c10' size-in-bits='64' id='fbebff4e'/>
+      <qualified-type-def type-id='a90c9006' const='yes' id='1daa2ea3'/>
+      <pointer-type-def type-id='1daa2ea3' size-in-bits='64' id='3be741ab'/>
+      <qualified-type-def type-id='4c1ad966' const='yes' id='178bc70f'/>
+      <pointer-type-def type-id='178bc70f' size-in-bits='64' id='360a7f3f'/>
+      <qualified-type-def type-id='944d6deb' const='yes' id='31b1396e'/>
+      <pointer-type-def type-id='31b1396e' size-in-bits='64' id='7dfd260c'/>
+      <var-decl name='msm_pinctrl_dev_pm_ops' type-id='86af1d10' mangled-name='msm_pinctrl_dev_pm_ops' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.c' line='1240' column='1' elf-symbol-id='msm_pinctrl_dev_pm_ops'/>
+      <function-decl name='msm_pinctrl_probe' mangled-name='msm_pinctrl_probe' filepath='drivers/pinctrl/qcom/pinctrl-msm.c' line='1245' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='msm_pinctrl_probe'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/pinctrl/qcom/pinctrl-msm.c' line='1245' column='1'/>
+        <parameter type-id='360a7f3f' name='soc_data' filepath='drivers/pinctrl/qcom/pinctrl-msm.c' line='1246' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='msm_pinctrl_remove' mangled-name='msm_pinctrl_remove' filepath='drivers/pinctrl/qcom/pinctrl-msm.c' line='1310' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='msm_pinctrl_remove'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/pinctrl/qcom/pinctrl-msm.c' line='1310' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiochip_lock_as_irq' mangled-name='gpiochip_lock_as_irq' filepath='include/linux/gpio/driver.h' line='722' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_lock_as_irq'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiochip_unlock_as_irq' mangled-name='gpiochip_unlock_as_irq' filepath='include/linux/gpio/driver.h' line='723' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_unlock_as_irq'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pinctrl/sunxi/pinctrl-sunxi.c' language='LANG_C89'>
+      <function-decl name='of_count_phandle_with_args' mangled-name='of_count_phandle_with_args' filepath='include/linux/of.h' line='376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_count_phandle_with_args'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_get_voltage' mangled-name='regulator_get_voltage' filepath='include/linux/regulator/consumer.h' line='249' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_get_voltage'>
+        <parameter type-id='850c13f6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/power/reset/hisi-reboot.c' language='LANG_C89'>
+      <function-decl name='register_restart_handler' mangled-name='register_restart_handler' filepath='include/linux/reboot.h' line='48' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_restart_handler'>
+        <parameter type-id='d504f73d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_update_bits_base' mangled-name='regmap_update_bits_base' filepath='include/linux/regmap.h' line='1031' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_update_bits_base'>
+        <parameter type-id='29af9a72'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='d8e6b335'/>
+        <parameter type-id='c894953d'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/power/supply/power_supply_core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='640' id='4725c728'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='be6833bc' size-in-bits='1280' id='774ff726'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <class-decl name='power_supply_battery_info' size-in-bits='3008' is-struct='yes' visibility='default' filepath='include/linux/power_supply.h' line='359' column='1' id='4b60a147'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='energy_full_design_uwh' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='charge_full_design_uah' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='voltage_min_design_uv' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='voltage_max_design_uv' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='precharge_current_ua' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='charge_term_current_ua' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='constant_charge_current_max_ua' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='constant_charge_voltage_max_uv' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='factory_internal_resistance_uohm' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='ocv_temp' type-id='4725c728' visibility='default' filepath='include/linux/power_supply.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ocv_table' type-id='774ff726' visibility='default' filepath='include/linux/power_supply.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='ocv_table_size' type-id='4725c728' visibility='default' filepath='include/linux/power_supply.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='resist_table' type-id='1fba25e2' visibility='default' filepath='include/linux/power_supply.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='resist_table_size' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='373' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='power_supply_battery_ocv_table' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/power_supply.h' line='338' column='1' id='3faa6906'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ocv' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='capacity' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='340' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='power_supply_resistance_temp_table' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/power_supply.h' line='343' column='1' id='98e1bfb4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='temp' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='resistance' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='345' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4b60a147' size-in-bits='64' id='78ba63ff'/>
+      <pointer-type-def type-id='3faa6906' size-in-bits='64' id='be6833bc'/>
+      <pointer-type-def type-id='98e1bfb4' size-in-bits='64' id='1fba25e2'/>
+      <function-decl name='power_supply_get_by_name' mangled-name='power_supply_get_by_name' filepath='drivers/power/supply/power_supply_core.c' line='458' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_get_by_name'>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/power/supply/power_supply_core.c' line='458' column='1'/>
+        <return type-id='c0c93c9e'/>
+      </function-decl>
+      <function-decl name='power_supply_put' mangled-name='power_supply_put' filepath='drivers/power/supply/power_supply_core.c' line='480' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_put'>
+        <parameter type-id='c0c93c9e' name='psy' filepath='drivers/power/supply/power_supply_core.c' line='480' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_power_supply_get_by_phandle' mangled-name='devm_power_supply_get_by_phandle' filepath='drivers/power/supply/power_supply_core.c' line='619' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_power_supply_get_by_phandle'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/power/supply/power_supply_core.c' line='619' column='1'/>
+        <parameter type-id='80f4b756' name='property' filepath='drivers/power/supply/power_supply_core.c' line='620' column='1'/>
+        <return type-id='c0c93c9e'/>
+      </function-decl>
+      <function-decl name='power_supply_get_battery_info' mangled-name='power_supply_get_battery_info' filepath='drivers/power/supply/power_supply_core.c' line='643' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_get_battery_info'>
+        <parameter type-id='c0c93c9e' name='psy' filepath='drivers/power/supply/power_supply_core.c' line='643' column='1'/>
+        <parameter type-id='78ba63ff' name='info' filepath='drivers/power/supply/power_supply_core.c' line='644' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='power_supply_put_battery_info' mangled-name='power_supply_put_battery_info' filepath='drivers/power/supply/power_supply_core.c' line='786' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_put_battery_info'>
+        <parameter type-id='c0c93c9e' name='psy' filepath='drivers/power/supply/power_supply_core.c' line='786' column='1'/>
+        <parameter type-id='78ba63ff' name='info' filepath='drivers/power/supply/power_supply_core.c' line='787' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='power_supply_temp2resist_simple' mangled-name='power_supply_temp2resist_simple' filepath='drivers/power/supply/power_supply_core.c' line='815' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_temp2resist_simple'>
+        <parameter type-id='1fba25e2' name='table' filepath='drivers/power/supply/power_supply_core.c' line='815' column='1'/>
+        <parameter type-id='95e97e5e' name='table_len' filepath='drivers/power/supply/power_supply_core.c' line='816' column='1'/>
+        <parameter type-id='95e97e5e' name='temp' filepath='drivers/power/supply/power_supply_core.c' line='816' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='power_supply_ocv2cap_simple' mangled-name='power_supply_ocv2cap_simple' filepath='drivers/power/supply/power_supply_core.c' line='853' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_ocv2cap_simple'>
+        <parameter type-id='be6833bc' name='table' filepath='drivers/power/supply/power_supply_core.c' line='853' column='1'/>
+        <parameter type-id='95e97e5e' name='table_len' filepath='drivers/power/supply/power_supply_core.c' line='854' column='1'/>
+        <parameter type-id='95e97e5e' name='ocv' filepath='drivers/power/supply/power_supply_core.c' line='854' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='power_supply_find_ocv2cap_table' mangled-name='power_supply_find_ocv2cap_table' filepath='drivers/power/supply/power_supply_core.c' line='878' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_find_ocv2cap_table'>
+        <parameter type-id='78ba63ff' name='info' filepath='drivers/power/supply/power_supply_core.c' line='878' column='1'/>
+        <parameter type-id='95e97e5e' name='temp' filepath='drivers/power/supply/power_supply_core.c' line='879' column='1'/>
+        <parameter type-id='7292109c' name='table_len' filepath='drivers/power/supply/power_supply_core.c' line='879' column='1'/>
+        <return type-id='be6833bc'/>
+      </function-decl>
+      <function-decl name='power_supply_get_property' mangled-name='power_supply_get_property' filepath='drivers/power/supply/power_supply_core.c' line='915' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_get_property'>
+        <parameter type-id='c0c93c9e' name='psy' filepath='drivers/power/supply/power_supply_core.c' line='915' column='1'/>
+        <parameter type-id='5f78aa17' name='psp' filepath='drivers/power/supply/power_supply_core.c' line='916' column='1'/>
+        <parameter type-id='2e53d20f' name='val' filepath='drivers/power/supply/power_supply_core.c' line='917' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='power_supply_set_property' mangled-name='power_supply_set_property' filepath='drivers/power/supply/power_supply_core.c' line='929' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_set_property'>
+        <parameter type-id='c0c93c9e' name='psy' filepath='drivers/power/supply/power_supply_core.c' line='929' column='1'/>
+        <parameter type-id='5f78aa17' name='psp' filepath='drivers/power/supply/power_supply_core.c' line='930' column='1'/>
+        <parameter type-id='f3abafd4' name='val' filepath='drivers/power/supply/power_supply_core.c' line='931' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='power_supply_reg_notifier' mangled-name='power_supply_reg_notifier' filepath='drivers/power/supply/power_supply_core.c' line='974' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_reg_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/power/supply/power_supply_core.c' line='974' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='power_supply_unreg_notifier' mangled-name='power_supply_unreg_notifier' filepath='drivers/power/supply/power_supply_core.c' line='980' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_unreg_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/power/supply/power_supply_core.c' line='980' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='thermal_cooling_device_unregister' mangled-name='thermal_cooling_device_unregister' filepath='include/linux/thermal.h' line='455' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_cooling_device_unregister'>
+        <parameter type-id='2feec21f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='thermal_zone_device_unregister' mangled-name='thermal_zone_device_unregister' filepath='include/linux/thermal.h' line='433' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_zone_device_unregister'>
+        <parameter type-id='404b1301'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='thermal_zone_device_register' mangled-name='thermal_zone_device_register' filepath='include/linux/thermal.h' line='430' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_zone_device_register'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='1e6fe389'/>
+        <parameter type-id='e2cbf964'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='404b1301'/>
+      </function-decl>
+      <pointer-type-def type-id='82084f53' size-in-bits='64' id='404b1301'/>
+      <pointer-type-def type-id='cf7993c1' size-in-bits='64' id='1e6fe389'/>
+      <pointer-type-def type-id='d6772b4e' size-in-bits='64' id='e2cbf964'/>
+      <class-decl name='thermal_zone_device' size-in-bits='10624' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='191' column='1' id='82084f53'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='664ac0b7' visibility='default' filepath='include/linux/thermal.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device' type-id='66e487eb' visibility='default' filepath='include/linux/thermal.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='trips_attribute_group' type-id='e4af473b' visibility='default' filepath='include/linux/thermal.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='trip_temp_attrs' type-id='fd801eb0' visibility='default' filepath='include/linux/thermal.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='trip_type_attrs' type-id='fd801eb0' visibility='default' filepath='include/linux/thermal.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='trip_hyst_attrs' type-id='fd801eb0' visibility='default' filepath='include/linux/thermal.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='devdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/thermal.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='trips' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='trips_disabled' type-id='7359adad' visibility='default' filepath='include/linux/thermal.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='passive_delay' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8288'>
+          <var-decl name='polling_delay' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='temperature' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8352'>
+          <var-decl name='last_temperature' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='emul_temperature' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8416'>
+          <var-decl name='passive' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='prev_low_trip' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='prev_high_trip' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='forced_passive' type-id='f0981eeb' visibility='default' filepath='include/linux/thermal.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8544'>
+          <var-decl name='need_update' type-id='49178f86' visibility='default' filepath='include/linux/thermal.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='ops' type-id='1e6fe389' visibility='default' filepath='include/linux/thermal.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='tzp' type-id='e2cbf964' visibility='default' filepath='include/linux/thermal.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='governor' type-id='6def7c4b' visibility='default' filepath='include/linux/thermal.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='governor_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/thermal.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='thermal_instances' type-id='72f469ec' visibility='default' filepath='include/linux/thermal.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='ida' type-id='46ce60fb' visibility='default' filepath='include/linux/thermal.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/thermal.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/thermal.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='poll_queue' type-id='5ad6e0ef' visibility='default' filepath='include/linux/thermal.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='notify_event' type-id='b5808f5e' visibility='default' filepath='include/linux/thermal.h' line='221' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thermal_zone_device_ops' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='93' column='1' id='cf7993c1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bind' type-id='911521f6' visibility='default' filepath='include/linux/thermal.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unbind' type-id='911521f6' visibility='default' filepath='include/linux/thermal.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_temp' type-id='b09cd03d' visibility='default' filepath='include/linux/thermal.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_trips' type-id='9a2b46ca' visibility='default' filepath='include/linux/thermal.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_mode' type-id='67f4c28a' visibility='default' filepath='include/linux/thermal.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_mode' type-id='dee53645' visibility='default' filepath='include/linux/thermal.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_trip_type' type-id='5e1def9d' visibility='default' filepath='include/linux/thermal.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_trip_temp' type-id='01443742' visibility='default' filepath='include/linux/thermal.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_trip_temp' type-id='9a2b46ca' visibility='default' filepath='include/linux/thermal.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_trip_hyst' type-id='01443742' visibility='default' filepath='include/linux/thermal.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_trip_hyst' type-id='9a2b46ca' visibility='default' filepath='include/linux/thermal.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_crit_temp' type-id='b09cd03d' visibility='default' filepath='include/linux/thermal.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='set_emul_temp' type-id='336c2e63' visibility='default' filepath='include/linux/thermal.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='get_trend' type-id='11d0d204' visibility='default' filepath='include/linux/thermal.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='notify' type-id='3fbbdf8e' visibility='default' filepath='include/linux/thermal.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thermal_zone_params' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='280' column='1' id='d6772b4e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='governor_name' type-id='664ac0b7' visibility='default' filepath='include/linux/thermal.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='no_hwmon' type-id='b50a4934' visibility='default' filepath='include/linux/thermal.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_tbps' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tbp' type-id='825b5cd1' visibility='default' filepath='include/linux/thermal.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sustainable_power' type-id='19c2251e' visibility='default' filepath='include/linux/thermal.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='k_po' type-id='a7832498' visibility='default' filepath='include/linux/thermal.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='k_pu' type-id='a7832498' visibility='default' filepath='include/linux/thermal.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='k_i' type-id='a7832498' visibility='default' filepath='include/linux/thermal.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='k_d' type-id='a7832498' visibility='default' filepath='include/linux/thermal.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='integral_cutoff' type-id='a7832498' visibility='default' filepath='include/linux/thermal.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='slope' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='offset' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='329' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='thermal_notify_event' filepath='include/linux/thermal.h' line='82' column='1' id='b5808f5e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='THERMAL_EVENT_UNSPECIFIED' value='0'/>
+        <enumerator name='THERMAL_EVENT_TEMP_SAMPLE' value='1'/>
+        <enumerator name='THERMAL_TRIP_VIOLATED' value='2'/>
+        <enumerator name='THERMAL_TRIP_CHANGED' value='3'/>
+        <enumerator name='THERMAL_DEVICE_DOWN' value='4'/>
+        <enumerator name='THERMAL_DEVICE_UP' value='5'/>
+        <enumerator name='THERMAL_DEVICE_POWER_CAPABILITY_CHANGED' value='6'/>
+        <enumerator name='THERMAL_TABLE_CHANGED' value='7'/>
+      </enum-decl>
+      <pointer-type-def type-id='48d225c1' size-in-bits='64' id='dee53645'/>
+      <pointer-type-def type-id='1d34d2c7' size-in-bits='64' id='336c2e63'/>
+      <pointer-type-def type-id='002a7109' size-in-bits='64' id='b09cd03d'/>
+      <pointer-type-def type-id='abcb190c' size-in-bits='64' id='3fbbdf8e'/>
+      <pointer-type-def type-id='c7253970' size-in-bits='64' id='9a2b46ca'/>
+      <pointer-type-def type-id='38a09a00' size-in-bits='64' id='01443742'/>
+      <pointer-type-def type-id='c505fce2' size-in-bits='64' id='11d0d204'/>
+      <pointer-type-def type-id='24451821' size-in-bits='64' id='5e1def9d'/>
+      <pointer-type-def type-id='a2b185bc' size-in-bits='64' id='911521f6'/>
+      <pointer-type-def type-id='69649a08' size-in-bits='64' id='67f4c28a'/>
+      <pointer-type-def type-id='0f035502' size-in-bits='64' id='fd801eb0'/>
+      <pointer-type-def type-id='1e0c0ad9' size-in-bits='64' id='825b5cd1'/>
+      <pointer-type-def type-id='2901941b' size-in-bits='64' id='6def7c4b'/>
+      <class-decl name='thermal_attr' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='144' column='1' id='0f035502'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='dbf3947c' visibility='default' filepath='include/linux/thermal.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/linux/thermal.h' line='146' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thermal_bind_params' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='245' column='1' id='1e0c0ad9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cdev' type-id='2feec21f' visibility='default' filepath='include/linux/thermal.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='weight' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='trip_mask' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='binding_limits' type-id='1d2c2b85' visibility='default' filepath='include/linux/thermal.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='match' type-id='911521f6' visibility='default' filepath='include/linux/thermal.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thermal_governor' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='236' column='1' id='2901941b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/linux/thermal.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bind_to_tz' type-id='50293ce4' visibility='default' filepath='include/linux/thermal.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unbind_from_tz' type-id='7a1ba1ed' visibility='default' filepath='include/linux/thermal.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='throttle' type-id='336c2e63' visibility='default' filepath='include/linux/thermal.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='governor_list' type-id='72f469ec' visibility='default' filepath='include/linux/thermal.h' line='241' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='dc678892' size-in-bits='64' id='50293ce4'/>
+      <pointer-type-def type-id='e1de5cb1' size-in-bits='64' id='7a1ba1ed'/>
+      <function-type size-in-bits='64' id='e1de5cb1'>
+        <parameter type-id='404b1301'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pwm/core.c' language='LANG_C89'>
+      <class-decl name='pwm_device' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/pwm.h' line='88' column='1' id='a94236e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='include/linux/pwm.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/pwm.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hwpwm' type-id='f0981eeb' visibility='default' filepath='include/linux/pwm.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='pwm' type-id='f0981eeb' visibility='default' filepath='include/linux/pwm.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='chip' type-id='00cf0c80' visibility='default' filepath='include/linux/pwm.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='chip_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/pwm.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='args' type-id='5331ada5' visibility='default' filepath='include/linux/pwm.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='state' type-id='0dbd43cd' visibility='default' filepath='include/linux/pwm.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pwm_chip' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/pwm.h' line='315' column='1' id='0336f8f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/pwm.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='e26114df' visibility='default' filepath='include/linux/pwm.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='base' type-id='95e97e5e' visibility='default' filepath='include/linux/pwm.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='npwm' type-id='f0981eeb' visibility='default' filepath='include/linux/pwm.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='of_xlate' type-id='09a20593' visibility='default' filepath='include/linux/pwm.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='of_pwm_n_cells' type-id='f0981eeb' visibility='default' filepath='include/linux/pwm.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/pwm.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pwms' type-id='f06adae0' visibility='default' filepath='include/linux/pwm.h' line='327' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pwm_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/pwm.h' line='282' column='1' id='a31cf734'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='request' type-id='45fc9a43' visibility='default' filepath='include/linux/pwm.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='free' type-id='e09d9aea' visibility='default' filepath='include/linux/pwm.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='capture' type-id='7763914e' visibility='default' filepath='include/linux/pwm.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='apply' type-id='4edf040a' visibility='default' filepath='include/linux/pwm.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_state' type-id='06f3ff9e' visibility='default' filepath='include/linux/pwm.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_output_type_supported' type-id='45fc9a43' visibility='default' filepath='include/linux/pwm.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/pwm.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='config' type-id='d13e4d11' visibility='default' filepath='include/linux/pwm.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_polarity' type-id='4b3074a5' visibility='default' filepath='include/linux/pwm.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='enable' type-id='45fc9a43' visibility='default' filepath='include/linux/pwm.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='disable' type-id='e09d9aea' visibility='default' filepath='include/linux/pwm.h' line='301' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pwm_capture' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pwm.h' line='335' column='1' id='a52958fa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='period' type-id='91ce1af9' visibility='default' filepath='include/linux/pwm.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='duty_cycle' type-id='91ce1af9' visibility='default' filepath='include/linux/pwm.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pwm_state' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/pwm.h' line='69' column='1' id='0dbd43cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='period' type-id='91ce1af9' visibility='default' filepath='include/linux/pwm.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='duty_cycle' type-id='91ce1af9' visibility='default' filepath='include/linux/pwm.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='polarity' type-id='c2c81069' visibility='default' filepath='include/linux/pwm.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='output_type' type-id='5e486969' visibility='default' filepath='include/linux/pwm.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enabled' type-id='b50a4934' visibility='default' filepath='include/linux/pwm.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='pwm_polarity' filepath='include/linux/pwm.h' line='23' column='1' id='c2c81069'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PWM_POLARITY_NORMAL' value='0'/>
+        <enumerator name='PWM_POLARITY_INVERSED' value='1'/>
+      </enum-decl>
+      <enum-decl name='pwm_output_type' filepath='include/linux/pwm.h' line='57' column='1' id='5e486969'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PWM_OUTPUT_FIXED' value='1'/>
+        <enumerator name='PWM_OUTPUT_MODULATED' value='2'/>
+      </enum-decl>
+      <class-decl name='pwm_args' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pwm.h' line='41' column='1' id='5331ada5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='period' type-id='91ce1af9' visibility='default' filepath='include/linux/pwm.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='polarity' type-id='c2c81069' visibility='default' filepath='include/linux/pwm.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='a31cf734' const='yes' id='bd36df2f'/>
+      <pointer-type-def type-id='bd36df2f' size-in-bits='64' id='e26114df'/>
+      <qualified-type-def type-id='0dbd43cd' const='yes' id='ca0dbd4a'/>
+      <pointer-type-def type-id='ca0dbd4a' size-in-bits='64' id='73a11e20'/>
+      <pointer-type-def type-id='a8f464b7' size-in-bits='64' id='45fc9a43'/>
+      <pointer-type-def type-id='f45624e0' size-in-bits='64' id='4edf040a'/>
+      <pointer-type-def type-id='8634a879' size-in-bits='64' id='4b3074a5'/>
+      <pointer-type-def type-id='3a5cf22d' size-in-bits='64' id='d13e4d11'/>
+      <pointer-type-def type-id='3ae10cc4' size-in-bits='64' id='7763914e'/>
+      <pointer-type-def type-id='a52958fa' size-in-bits='64' id='d5211638'/>
+      <pointer-type-def type-id='0336f8f2' size-in-bits='64' id='00cf0c80'/>
+      <pointer-type-def type-id='a94236e2' size-in-bits='64' id='f06adae0'/>
+      <pointer-type-def type-id='10c448af' size-in-bits='64' id='09a20593'/>
+      <pointer-type-def type-id='0dbd43cd' size-in-bits='64' id='7ee8ef4d'/>
+      <pointer-type-def type-id='a4666910' size-in-bits='64' id='e09d9aea'/>
+      <pointer-type-def type-id='d24e4794' size-in-bits='64' id='06f3ff9e'/>
+      <function-decl name='of_pwm_xlate_with_flags' mangled-name='of_pwm_xlate_with_flags' filepath='drivers/pwm/core.c' line='124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_pwm_xlate_with_flags'>
+        <parameter type-id='00cf0c80' name='pc' filepath='drivers/pwm/core.c' line='124' column='1'/>
+        <parameter type-id='af02a266' name='args' filepath='drivers/pwm/core.c' line='124' column='1'/>
+        <return type-id='f06adae0'/>
+      </function-decl>
+      <function-decl name='pwm_set_chip_data' mangled-name='pwm_set_chip_data' filepath='drivers/pwm/core.c' line='204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pwm_set_chip_data'>
+        <parameter type-id='f06adae0' name='pwm' filepath='drivers/pwm/core.c' line='204' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/pwm/core.c' line='204' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pwm_get_chip_data' mangled-name='pwm_get_chip_data' filepath='drivers/pwm/core.c' line='221' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pwm_get_chip_data'>
+        <parameter type-id='f06adae0' name='pwm' filepath='drivers/pwm/core.c' line='221' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='pwmchip_add' mangled-name='pwmchip_add' filepath='drivers/pwm/core.c' line='322' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pwmchip_add'>
+        <parameter type-id='00cf0c80' name='chip' filepath='drivers/pwm/core.c' line='322' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pwmchip_remove' mangled-name='pwmchip_remove' filepath='drivers/pwm/core.c' line='337' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pwmchip_remove'>
+        <parameter type-id='00cf0c80' name='chip' filepath='drivers/pwm/core.c' line='337' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pwm_request' mangled-name='pwm_request' filepath='drivers/pwm/core.c' line='378' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pwm_request'>
+        <parameter type-id='95e97e5e' name='pwm' filepath='drivers/pwm/core.c' line='378' column='1'/>
+        <parameter type-id='80f4b756' name='label' filepath='drivers/pwm/core.c' line='378' column='1'/>
+        <return type-id='f06adae0'/>
+      </function-decl>
+      <function-decl name='pwm_free' mangled-name='pwm_free' filepath='drivers/pwm/core.c' line='443' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pwm_free'>
+        <parameter type-id='f06adae0' name='pwm' filepath='drivers/pwm/core.c' line='443' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pwm_apply_state' mangled-name='pwm_apply_state' filepath='drivers/pwm/core.c' line='454' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pwm_apply_state'>
+        <parameter type-id='f06adae0' name='pwm' filepath='drivers/pwm/core.c' line='454' column='1'/>
+        <parameter type-id='73a11e20' name='state' filepath='drivers/pwm/core.c' line='454' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_pwm_get' mangled-name='of_pwm_get' filepath='drivers/pwm/core.c' line='678' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_pwm_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pwm/core.c' line='678' column='1'/>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/pwm/core.c' line='678' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/pwm/core.c' line='679' column='1'/>
+        <return type-id='f06adae0'/>
+      </function-decl>
+      <function-decl name='devm_pwm_get' mangled-name='devm_pwm_get' filepath='drivers/pwm/core.c' line='1025' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_pwm_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pwm/core.c' line='1025' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/pwm/core.c' line='1025' column='1'/>
+        <return type-id='f06adae0'/>
+      </function-decl>
+      <function-decl name='devm_of_pwm_get' mangled-name='devm_of_pwm_get' filepath='drivers/pwm/core.c' line='1057' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_of_pwm_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pwm/core.c' line='1057' column='1'/>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/pwm/core.c' line='1057' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/pwm/core.c' line='1058' column='1'/>
+        <return type-id='f06adae0'/>
+      </function-decl>
+      <function-decl name='devm_pwm_put' mangled-name='devm_pwm_put' filepath='drivers/pwm/core.c' line='1135' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_pwm_put'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pwm/core.c' line='1135' column='1'/>
+        <parameter type-id='f06adae0' name='pwm' filepath='drivers/pwm/core.c' line='1135' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='a8f464b7'>
+        <parameter type-id='00cf0c80'/>
+        <parameter type-id='f06adae0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f45624e0'>
+        <parameter type-id='00cf0c80'/>
+        <parameter type-id='f06adae0'/>
+        <parameter type-id='73a11e20'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8634a879'>
+        <parameter type-id='00cf0c80'/>
+        <parameter type-id='f06adae0'/>
+        <parameter type-id='c2c81069'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3a5cf22d'>
+        <parameter type-id='00cf0c80'/>
+        <parameter type-id='f06adae0'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3ae10cc4'>
+        <parameter type-id='00cf0c80'/>
+        <parameter type-id='f06adae0'/>
+        <parameter type-id='d5211638'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='10c448af'>
+        <parameter type-id='00cf0c80' name='pc'/>
+        <parameter type-id='af02a266' name='args'/>
+        <return type-id='f06adae0'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a4666910'>
+        <parameter type-id='00cf0c80'/>
+        <parameter type-id='f06adae0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d24e4794'>
+        <parameter type-id='00cf0c80'/>
+        <parameter type-id='f06adae0'/>
+        <parameter type-id='7ee8ef4d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/pwm/sysfs.c' language='LANG_C89'>
+      <function-decl name='device_find_child' mangled-name='device_find_child' filepath='include/linux/device.h' line='1583' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_find_child'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='92d15ae9'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='sysfs_streq' mangled-name='sysfs_streq' filepath='include/linux/string.h' line='191' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_streq'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/regulator/core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='712d28ed' size-in-bits='320' id='06883fa0'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <class-decl name='regulator' size-in-bits='1088' is-struct='yes' visibility='default' filepath='drivers/regulator/internal.h' line='34' column='1' id='b06eb6f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/regulator/internal.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/regulator/internal.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='always_on' type-id='f0981eeb' visibility='default' filepath='drivers/regulator/internal.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='bypass' type-id='f0981eeb' visibility='default' filepath='drivers/regulator/internal.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='device_link' type-id='f0981eeb' visibility='default' filepath='drivers/regulator/internal.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='uA_load' type-id='95e97e5e' visibility='default' filepath='drivers/regulator/internal.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='enable_count' type-id='f0981eeb' visibility='default' filepath='drivers/regulator/internal.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='deferred_disables' type-id='f0981eeb' visibility='default' filepath='drivers/regulator/internal.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='voltage' type-id='06883fa0' visibility='default' filepath='drivers/regulator/internal.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='supply_name' type-id='80f4b756' visibility='default' filepath='drivers/regulator/internal.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dev_attr' type-id='dbf3947c' visibility='default' filepath='drivers/regulator/internal.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rdev' type-id='43c38462' visibility='default' filepath='drivers/regulator/internal.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='debugfs' type-id='27675065' visibility='default' filepath='drivers/regulator/internal.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_voltage' size-in-bits='64' is-struct='yes' visibility='default' filepath='drivers/regulator/internal.h' line='18' column='1' id='712d28ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_uV' type-id='95e97e5e' visibility='default' filepath='drivers/regulator/internal.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_uV' type-id='95e97e5e' visibility='default' filepath='drivers/regulator/internal.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4c0e45bc' size-in-bits='64' id='55a10ce6'/>
+      <pointer-type-def type-id='7be36c00' size-in-bits='64' id='08b1f4aa'/>
+      <pointer-type-def type-id='b06eb6f1' size-in-bits='64' id='850c13f7'/>
+      <function-decl name='regulator_register' mangled-name='regulator_register' filepath='drivers/regulator/core.c' line='5038' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_register'>
+        <parameter type-id='5629bd41' name='regulator_desc' filepath='drivers/regulator/core.c' line='5038' column='1'/>
+        <parameter type-id='661ccd0c' name='cfg' filepath='drivers/regulator/core.c' line='5039' column='1'/>
+        <return type-id='43c38462'/>
+      </function-decl>
+      <function-decl name='regulator_lock' mangled-name='regulator_lock' filepath='drivers/regulator/core.c' line='192' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_lock'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/core.c' line='192' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='regulator_unlock' mangled-name='regulator_unlock' filepath='drivers/regulator/core.c' line='205' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_unlock'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/core.c' line='205' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='regulator_get' mangled-name='regulator_get' filepath='drivers/regulator/core.c' line='2012' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/regulator/core.c' line='2012' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/regulator/core.c' line='2012' column='1'/>
+        <return type-id='850c13f7'/>
+      </function-decl>
+      <function-decl name='regulator_get_optional' mangled-name='regulator_get_optional' filepath='drivers/regulator/core.c' line='2065' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_get_optional'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/regulator/core.c' line='2065' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/regulator/core.c' line='2065' column='1'/>
+        <return type-id='850c13f7'/>
+      </function-decl>
+      <function-decl name='regulator_put' mangled-name='regulator_put' filepath='drivers/regulator/core.c' line='2118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_put'>
+        <parameter type-id='850c13f7' name='regulator' filepath='drivers/regulator/core.c' line='2118' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='regulator_force_disable' mangled-name='regulator_force_disable' filepath='drivers/regulator/core.c' line='2753' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_force_disable'>
+        <parameter type-id='850c13f7' name='regulator' filepath='drivers/regulator/core.c' line='2753' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_disable_deferred' mangled-name='regulator_disable_deferred' filepath='drivers/regulator/core.c' line='2834' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_disable_deferred'>
+        <parameter type-id='850c13f7' name='regulator' filepath='drivers/regulator/core.c' line='2834' column='1'/>
+        <parameter type-id='95e97e5e' name='ms' filepath='drivers/regulator/core.c' line='2834' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_is_enabled' mangled-name='regulator_is_enabled' filepath='drivers/regulator/core.c' line='2910' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_is_enabled'>
+        <parameter type-id='850c13f7' name='regulator' filepath='drivers/regulator/core.c' line='2910' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_count_voltages' mangled-name='regulator_count_voltages' filepath='drivers/regulator/core.c' line='2933' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_count_voltages'>
+        <parameter type-id='850c13f7' name='regulator' filepath='drivers/regulator/core.c' line='2933' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_list_voltage' mangled-name='regulator_list_voltage' filepath='drivers/regulator/core.c' line='2957' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_list_voltage'>
+        <parameter type-id='850c13f7' name='regulator' filepath='drivers/regulator/core.c' line='2957' column='1'/>
+        <parameter type-id='f0981eeb' name='selector' filepath='drivers/regulator/core.c' line='2957' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_get_linear_step' mangled-name='regulator_get_linear_step' filepath='drivers/regulator/core.c' line='3041' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_get_linear_step'>
+        <parameter type-id='850c13f7' name='regulator' filepath='drivers/regulator/core.c' line='3041' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='regulator_is_supported_voltage' mangled-name='regulator_is_supported_voltage' filepath='drivers/regulator/core.c' line='3058' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_is_supported_voltage'>
+        <parameter type-id='850c13f7' name='regulator' filepath='drivers/regulator/core.c' line='3058' column='1'/>
+        <parameter type-id='95e97e5e' name='min_uV' filepath='drivers/regulator/core.c' line='3059' column='1'/>
+        <parameter type-id='95e97e5e' name='max_uV' filepath='drivers/regulator/core.c' line='3059' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_map_voltage_linear' mangled-name='regulator_map_voltage_linear' filepath='include/linux/regulator/driver.h' line='515' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_map_voltage_linear'>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_set_voltage' mangled-name='regulator_set_voltage' filepath='drivers/regulator/core.c' line='3808' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_set_voltage'>
+        <parameter type-id='850c13f7' name='regulator' filepath='drivers/regulator/core.c' line='3808' column='1'/>
+        <parameter type-id='95e97e5e' name='min_uV' filepath='drivers/regulator/core.c' line='3808' column='1'/>
+        <parameter type-id='95e97e5e' name='max_uV' filepath='drivers/regulator/core.c' line='3808' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_set_voltage_time_sel' mangled-name='regulator_set_voltage_time_sel' filepath='drivers/regulator/core.c' line='3969' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_set_voltage_time_sel'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/core.c' line='3969' column='1'/>
+        <parameter type-id='f0981eeb' name='old_selector' filepath='drivers/regulator/core.c' line='3970' column='1'/>
+        <parameter type-id='f0981eeb' name='new_selector' filepath='drivers/regulator/core.c' line='3971' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_set_current_limit' mangled-name='regulator_set_current_limit' filepath='drivers/regulator/core.c' line='4122' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_set_current_limit'>
+        <parameter type-id='850c13f7' name='regulator' filepath='drivers/regulator/core.c' line='4122' column='1'/>
+        <parameter type-id='95e97e5e' name='min_uA' filepath='drivers/regulator/core.c' line='4123' column='1'/>
+        <parameter type-id='95e97e5e' name='max_uA' filepath='drivers/regulator/core.c' line='4123' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_get_current_limit' mangled-name='regulator_get_current_limit' filepath='drivers/regulator/core.c' line='4177' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_get_current_limit'>
+        <parameter type-id='850c13f7' name='regulator' filepath='drivers/regulator/core.c' line='4177' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_set_mode' mangled-name='regulator_set_mode' filepath='drivers/regulator/core.c' line='4194' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_set_mode'>
+        <parameter type-id='850c13f7' name='regulator' filepath='drivers/regulator/core.c' line='4194' column='1'/>
+        <parameter type-id='f0981eeb' name='mode' filepath='drivers/regulator/core.c' line='4194' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_get_mode' mangled-name='regulator_get_mode' filepath='drivers/regulator/core.c' line='4255' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_get_mode'>
+        <parameter type-id='850c13f7' name='regulator' filepath='drivers/regulator/core.c' line='4255' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='regulator_set_load' mangled-name='regulator_set_load' filepath='drivers/regulator/core.c' line='4328' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_set_load'>
+        <parameter type-id='850c13f7' name='regulator' filepath='drivers/regulator/core.c' line='4328' column='1'/>
+        <parameter type-id='95e97e5e' name='uA_load' filepath='drivers/regulator/core.c' line='4328' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_register_notifier' mangled-name='regulator_register_notifier' filepath='drivers/regulator/core.c' line='4407' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_register_notifier'>
+        <parameter type-id='850c13f7' name='regulator' filepath='drivers/regulator/core.c' line='4407' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/regulator/core.c' line='4408' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_unregister_notifier' mangled-name='regulator_unregister_notifier' filepath='drivers/regulator/core.c' line='4422' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_unregister_notifier'>
+        <parameter type-id='850c13f7' name='regulator' filepath='drivers/regulator/core.c' line='4422' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/regulator/core.c' line='4423' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_notifier_call_chain' mangled-name='regulator_notifier_call_chain' filepath='drivers/regulator/core.c' line='4649' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_notifier_call_chain'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/core.c' line='4649' column='1'/>
+        <parameter type-id='7359adad' name='event' filepath='drivers/regulator/core.c' line='4650' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/regulator/core.c' line='4650' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_get_regmap' mangled-name='dev_get_regmap' filepath='include/linux/regmap.h' line='1007' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_get_regmap'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='29af9a72'/>
+      </function-decl>
+      <function-decl name='regulator_unregister' mangled-name='regulator_unregister' filepath='drivers/regulator/core.c' line='5280' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_unregister'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/core.c' line='5280' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='regulator_get_drvdata' mangled-name='regulator_get_drvdata' filepath='drivers/regulator/core.c' line='5408' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_get_drvdata'>
+        <parameter type-id='850c13f7' name='regulator' filepath='drivers/regulator/core.c' line='5408' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='rdev_get_id' mangled-name='rdev_get_id' filepath='drivers/regulator/core.c' line='5429' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rdev_get_id'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/core.c' line='5429' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='e937566e' size-in-bits='64' id='661ccd0c'/>
+      <pointer-type-def type-id='0a26da71' size-in-bits='64' id='5629bd41'/>
+      <function-type size-in-bits='64' id='4c0e45bc'>
+        <parameter type-id='d1347205'/>
+        <parameter type-id='43c38462'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7be36c00'>
+        <parameter type-id='d1347205'/>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='e884daa5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <pointer-type-def type-id='7dfdcc84' size-in-bits='64' id='43c38462'/>
+      <qualified-type-def type-id='973b98af' const='yes' id='e937566e'/>
+      <qualified-type-def type-id='45814d78' const='yes' id='0a26da71'/>
+      <pointer-type-def type-id='4ceb5ab5' size-in-bits='64' id='d1347205'/>
+      <class-decl name='regulator_dev' size-in-bits='10624' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='446' column='1' id='7dfdcc84'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='5629bd41' visibility='default' filepath='include/linux/regulator/driver.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='exclusive' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='use_count' type-id='19c2251e' visibility='default' filepath='include/linux/regulator/driver.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='open_count' type-id='19c2251e' visibility='default' filepath='include/linux/regulator/driver.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='bypass_count' type-id='19c2251e' visibility='default' filepath='include/linux/regulator/driver.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/regulator/driver.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='consumer_list' type-id='72f469ec' visibility='default' filepath='include/linux/regulator/driver.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='coupling_desc' type-id='3ce445fe' visibility='default' filepath='include/linux/regulator/driver.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='notifier' type-id='708c2394' visibility='default' filepath='include/linux/regulator/driver.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mutex' type-id='45793a97' visibility='default' filepath='include/linux/regulator/driver.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='mutex_owner' type-id='f23e2572' visibility='default' filepath='include/linux/regulator/driver.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ref_cnt' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/regulator/driver.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/regulator/driver.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='constraints' type-id='2fed99fc' visibility='default' filepath='include/linux/regulator/driver.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='supply' type-id='850c13f7' visibility='default' filepath='include/linux/regulator/driver.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='supply_name' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='regmap' type-id='29af9a72' visibility='default' filepath='include/linux/regulator/driver.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='disable_work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/regulator/driver.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='reg_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/regulator/driver.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='debugfs' type-id='27675065' visibility='default' filepath='include/linux/regulator/driver.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='ena_pin' type-id='6045f216' visibility='default' filepath='include/linux/regulator/driver.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='ena_gpio_state' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='is_switch' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='last_off_jiffy' type-id='7359adad' visibility='default' filepath='include/linux/regulator/driver.h' line='484' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='suspend_state_t' type-id='95e97e5e' filepath='include/linux/suspend.h' line='34' column='1' id='e884daa5'/>
+      <pointer-type-def type-id='d0b77cf6' size-in-bits='64' id='2fed99fc'/>
+      <pointer-type-def type-id='616cdd90' size-in-bits='64' id='6045f216'/>
+      <class-decl name='coupling_desc' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='429' column='1' id='3ce445fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='coupled_rdevs' type-id='f4c93d58' visibility='default' filepath='include/linux/regulator/driver.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='coupler' type-id='d1347205' visibility='default' filepath='include/linux/regulator/driver.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n_resolved' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='n_coupled' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='433' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_config' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='411' column='1' id='973b98af'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/regulator/driver.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init_data' type-id='103dcfdf' visibility='default' filepath='include/linux/regulator/driver.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/regulator/driver.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/regulator/driver.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='regmap' type-id='29af9a72' visibility='default' filepath='include/linux/regulator/driver.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ena_gpiod' type-id='26760480' visibility='default' filepath='include/linux/regulator/driver.h' line='418' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_coupler' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/regulator/coupler.h' line='41' column='1' id='4ceb5ab5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/regulator/coupler.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attach_regulator' type-id='55a10ce6' visibility='default' filepath='include/linux/regulator/coupler.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='detach_regulator' type-id='55a10ce6' visibility='default' filepath='include/linux/regulator/coupler.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='balance_voltage' type-id='08b1f4aa' visibility='default' filepath='include/linux/regulator/coupler.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_desc' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='327' column='1' id='45814d78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supply_name' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='of_match' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='regulators_node' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='of_parse_cb' type-id='62e9cc9c' visibility='default' filepath='include/linux/regulator/driver.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='continuous_voltage_range' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='n_voltages' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='n_current_limits' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='b4605ad2' visibility='default' filepath='include/linux/regulator/driver.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='type' type-id='b9a524a4' visibility='default' filepath='include/linux/regulator/driver.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/regulator/driver.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='min_uV' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='uV_step' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='linear_min_sel' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='fixed_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ramp_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='min_dropout_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='linear_ranges' type-id='ae51eb5f' visibility='default' filepath='include/linux/regulator/driver.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='linear_range_selectors' type-id='5b2fd8e8' visibility='default' filepath='include/linux/regulator/driver.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='n_linear_ranges' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='volt_table' type-id='5b2fd8e8' visibility='default' filepath='include/linux/regulator/driver.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='curr_table' type-id='5b2fd8e8' visibility='default' filepath='include/linux/regulator/driver.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='vsel_range_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='vsel_range_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='vsel_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='vsel_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='vsel_step' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='csel_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='csel_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='apply_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='apply_bit' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='enable_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='enable_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='enable_val' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='disable_val' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='enable_is_inverted' type-id='b50a4934' visibility='default' filepath='include/linux/regulator/driver.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='bypass_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='bypass_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='bypass_val_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='bypass_val_off' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='active_discharge_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='active_discharge_off' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='active_discharge_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='active_discharge_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='soft_start_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='soft_start_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='soft_start_val_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='pull_down_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='pull_down_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='pull_down_val_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='enable_time' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='off_on_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='of_map_mode' type-id='17a94daa' visibility='default' filepath='include/linux/regulator/driver.h' line='392' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='1788182f' size-in-bits='64' id='103dcfdf'/>
+      <pointer-type-def type-id='6702beaf' size-in-bits='64' id='ae51eb5f'/>
+      <pointer-type-def type-id='a06ec50c' size-in-bits='64' id='b4605ad2'/>
+      <enum-decl name='regulator_type' filepath='include/linux/regulator/driver.h' line='227' column='1' id='b9a524a4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='REGULATOR_VOLTAGE' value='0'/>
+        <enumerator name='REGULATOR_CURRENT' value='1'/>
+      </enum-decl>
+      <pointer-type-def type-id='46155a72' size-in-bits='64' id='62e9cc9c'/>
+      <pointer-type-def type-id='43c38462' size-in-bits='64' id='f4c93d58'/>
+      <class-decl name='regulation_constraints' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/linux/regulator/machine.h' line='138' column='1' id='d0b77cf6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/machine.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uV_offset' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='min_uA' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_uA' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ilim_uA' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='system_load' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_spread' type-id='f9409001' visibility='default' filepath='include/linux/regulator/machine.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='max_uV_step' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='valid_modes_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='valid_ops_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='input_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='state_disk' type-id='7fe6815e' visibility='default' filepath='include/linux/regulator/machine.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='state_mem' type-id='7fe6815e' visibility='default' filepath='include/linux/regulator/machine.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='state_standby' type-id='7fe6815e' visibility='default' filepath='include/linux/regulator/machine.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='initial_state' type-id='e884daa5' visibility='default' filepath='include/linux/regulator/machine.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='initial_mode' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ramp_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='settling_time' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='settling_time_up' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='settling_time_down' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='enable_time' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='active_discharge' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='always_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='boot_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='apply_uV' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='ramp_disable' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='soft_start' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='pull_down' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='over_current_protection' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='194' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_enable_gpio' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/regulator/core.c' line='75' column='1' id='616cdd90'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/regulator/core.c' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gpiod' type-id='26760480' visibility='default' filepath='drivers/regulator/core.c' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enable_count' type-id='19c2251e' visibility='default' filepath='drivers/regulator/core.c' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='request_count' type-id='19c2251e' visibility='default' filepath='drivers/regulator/core.c' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='435002d4' const='yes' id='1788182f'/>
+      <qualified-type-def type-id='618915a2' const='yes' id='6702beaf'/>
+      <qualified-type-def type-id='707f0173' const='yes' id='a06ec50c'/>
+      <class-decl name='regulator_state' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/regulator/machine.h' line='77' column='1' id='7fe6815e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='min_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mode' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='enabled' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='changeable' type-id='b50a4934' visibility='default' filepath='include/linux/regulator/machine.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_init_data' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/regulator/machine.h' line='235' column='1' id='435002d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supply_regulator' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/machine.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='constraints' type-id='d0b77cf6' visibility='default' filepath='include/linux/regulator/machine.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='num_consumer_supplies' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='consumer_supplies' type-id='857611a9' visibility='default' filepath='include/linux/regulator/machine.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='regulator_init' type-id='b9b212f5' visibility='default' filepath='include/linux/regulator/machine.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/regulator/machine.h' line='245' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_linear_range' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='53' column='1' id='618915a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_uV' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='min_sel' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_sel' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='uV_step' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_ops' size-in-bits='2112' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='144' column='1' id='707f0173'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list_voltage' type-id='bfb02820' visibility='default' filepath='include/linux/regulator/driver.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_voltage' type-id='e83ba222' visibility='default' filepath='include/linux/regulator/driver.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_voltage' type-id='caa0e368' visibility='default' filepath='include/linux/regulator/driver.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_voltage_sel' type-id='bfb02820' visibility='default' filepath='include/linux/regulator/driver.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_voltage' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_voltage_sel' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_current_limit' type-id='caa0e368' visibility='default' filepath='include/linux/regulator/driver.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_current_limit' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_input_current_limit' type-id='12239021' visibility='default' filepath='include/linux/regulator/driver.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_over_current_protection' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_active_discharge' type-id='2b6bf4a3' visibility='default' filepath='include/linux/regulator/driver.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='enable' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='disable' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='is_enabled' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_mode' type-id='bfb02820' visibility='default' filepath='include/linux/regulator/driver.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='get_mode' type-id='383e66df' visibility='default' filepath='include/linux/regulator/driver.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_error_flags' type-id='7ef3bbb0' visibility='default' filepath='include/linux/regulator/driver.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='enable_time' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='set_ramp_delay' type-id='12239021' visibility='default' filepath='include/linux/regulator/driver.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='set_voltage_time' type-id='caa0e368' visibility='default' filepath='include/linux/regulator/driver.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='set_voltage_time_sel' type-id='ec23f0e2' visibility='default' filepath='include/linux/regulator/driver.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='set_soft_start' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='get_status' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='get_optimum_mode' type-id='f14ddf44' visibility='default' filepath='include/linux/regulator/driver.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='set_load' type-id='12239021' visibility='default' filepath='include/linux/regulator/driver.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='set_bypass' type-id='2b6bf4a3' visibility='default' filepath='include/linux/regulator/driver.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='get_bypass' type-id='43934166' visibility='default' filepath='include/linux/regulator/driver.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='set_suspend_voltage' type-id='12239021' visibility='default' filepath='include/linux/regulator/driver.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='set_suspend_enable' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='set_suspend_disable' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='set_suspend_mode' type-id='bfb02820' visibility='default' filepath='include/linux/regulator/driver.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='resume' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='set_pull_down' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='221' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='13b1c3f8' size-in-bits='64' id='c3db487a'/>
+      <pointer-type-def type-id='dfce8aa4' size-in-bits='64' id='43934166'/>
+      <pointer-type-def type-id='25e34545' size-in-bits='64' id='12239021'/>
+      <pointer-type-def type-id='387ddca6' size-in-bits='64' id='caa0e368'/>
+      <pointer-type-def type-id='72a2bb90' size-in-bits='64' id='e83ba222'/>
+      <pointer-type-def type-id='2ab93737' size-in-bits='64' id='2b6bf4a3'/>
+      <pointer-type-def type-id='1c9f9836' size-in-bits='64' id='bfb02820'/>
+      <pointer-type-def type-id='0639fb3e' size-in-bits='64' id='7ef3bbb0'/>
+      <pointer-type-def type-id='fdb31210' size-in-bits='64' id='ec23f0e2'/>
+      <pointer-type-def type-id='1b8fa461' size-in-bits='64' id='857611a9'/>
+      <pointer-type-def type-id='c1a2f7eb' size-in-bits='64' id='383e66df'/>
+      <pointer-type-def type-id='a7b38e12' size-in-bits='64' id='f14ddf44'/>
+      <class-decl name='regulator_consumer_supply' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/regulator/machine.h' line='206' column='1' id='1b8fa461'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_name' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/machine.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supply' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/machine.h' line='208' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/regulator/devres.c' language='LANG_C89'>
+      <function-decl name='devm_regulator_get_exclusive' mangled-name='devm_regulator_get_exclusive' filepath='drivers/regulator/devres.c' line='66' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regulator_get_exclusive'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/regulator/devres.c' line='66' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/regulator/devres.c' line='67' column='1'/>
+        <return type-id='850c13f7'/>
+      </function-decl>
+      <function-decl name='devm_regulator_get_optional' mangled-name='devm_regulator_get_optional' filepath='drivers/regulator/devres.c' line='82' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regulator_get_optional'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/regulator/devres.c' line='82' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/regulator/devres.c' line='83' column='1'/>
+        <return type-id='850c13f7'/>
+      </function-decl>
+      <function-decl name='devm_regulator_put' mangled-name='devm_regulator_put' filepath='drivers/regulator/devres.c' line='107' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regulator_put'>
+        <parameter type-id='850c13f7' name='regulator' filepath='drivers/regulator/devres.c' line='107' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_regulator_register_notifier' mangled-name='devm_regulator_register_notifier' filepath='drivers/regulator/devres.c' line='429' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regulator_register_notifier'>
+        <parameter type-id='850c13f7' name='regulator' filepath='drivers/regulator/devres.c' line='429' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/regulator/devres.c' line='430' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/regulator/fixed-helper.c' language='LANG_C89'>
+      <function-decl name='platform_device_register' mangled-name='platform_device_register' filepath='include/linux/platform_device.h' line='46' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_register'>
+        <parameter type-id='db362995'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/regulator/fixed.c' language='LANG_C89'>
+      <class-decl name='regulator_coupler' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/regulator/coupler.h' line='41' column='1' id='4ceb5ab5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/regulator/coupler.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attach_regulator' type-id='55a10ce6' visibility='default' filepath='include/linux/regulator/coupler.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='detach_regulator' type-id='55a10ce6' visibility='default' filepath='include/linux/regulator/coupler.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='balance_voltage' type-id='08b1f4aa' visibility='default' filepath='include/linux/regulator/coupler.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_enable_gpio' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/regulator/core.c' line='75' column='1' id='616cdd90'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/regulator/core.c' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gpiod' type-id='26760480' visibility='default' filepath='drivers/regulator/core.c' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enable_count' type-id='19c2251e' visibility='default' filepath='drivers/regulator/core.c' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='request_count' type-id='19c2251e' visibility='default' filepath='drivers/regulator/core.c' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_init_data' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/regulator/machine.h' line='235' column='1' id='435002d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supply_regulator' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/machine.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='constraints' type-id='d0b77cf6' visibility='default' filepath='include/linux/regulator/machine.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='num_consumer_supplies' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='consumer_supplies' type-id='857611a9' visibility='default' filepath='include/linux/regulator/machine.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='regulator_init' type-id='b9b212f5' visibility='default' filepath='include/linux/regulator/machine.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/regulator/machine.h' line='245' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulation_constraints' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/linux/regulator/machine.h' line='138' column='1' id='d0b77cf6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/machine.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uV_offset' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='min_uA' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_uA' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ilim_uA' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='system_load' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_spread' type-id='f9409001' visibility='default' filepath='include/linux/regulator/machine.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='max_uV_step' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='valid_modes_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='valid_ops_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='input_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='state_disk' type-id='7fe6815e' visibility='default' filepath='include/linux/regulator/machine.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='state_mem' type-id='7fe6815e' visibility='default' filepath='include/linux/regulator/machine.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='state_standby' type-id='7fe6815e' visibility='default' filepath='include/linux/regulator/machine.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='initial_state' type-id='e884daa5' visibility='default' filepath='include/linux/regulator/machine.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='initial_mode' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ramp_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='settling_time' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='settling_time_up' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='settling_time_down' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='enable_time' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='active_discharge' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='always_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='boot_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='apply_uV' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='ramp_disable' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='soft_start' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='pull_down' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='over_current_protection' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='194' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_state' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/regulator/machine.h' line='77' column='1' id='7fe6815e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='min_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mode' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='enabled' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='changeable' type-id='b50a4934' visibility='default' filepath='include/linux/regulator/machine.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='suspend_state_t' type-id='95e97e5e' filepath='include/linux/suspend.h' line='34' column='1' id='e884daa5'/>
+      <class-decl name='regulator_consumer_supply' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/regulator/machine.h' line='206' column='1' id='1b8fa461'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_name' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/machine.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supply' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/machine.h' line='208' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_desc' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='327' column='1' id='45814d78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supply_name' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='of_match' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='regulators_node' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='of_parse_cb' type-id='62e9cc9c' visibility='default' filepath='include/linux/regulator/driver.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='continuous_voltage_range' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='n_voltages' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='n_current_limits' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='b4605ad2' visibility='default' filepath='include/linux/regulator/driver.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='type' type-id='b9a524a4' visibility='default' filepath='include/linux/regulator/driver.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/regulator/driver.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='min_uV' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='uV_step' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='linear_min_sel' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='fixed_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ramp_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='min_dropout_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='linear_ranges' type-id='ae51eb5f' visibility='default' filepath='include/linux/regulator/driver.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='linear_range_selectors' type-id='5b2fd8e8' visibility='default' filepath='include/linux/regulator/driver.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='n_linear_ranges' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='volt_table' type-id='5b2fd8e8' visibility='default' filepath='include/linux/regulator/driver.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='curr_table' type-id='5b2fd8e8' visibility='default' filepath='include/linux/regulator/driver.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='vsel_range_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='vsel_range_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='vsel_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='vsel_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='vsel_step' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='csel_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='csel_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='apply_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='apply_bit' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='enable_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='enable_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='enable_val' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='disable_val' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='enable_is_inverted' type-id='b50a4934' visibility='default' filepath='include/linux/regulator/driver.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='bypass_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='bypass_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='bypass_val_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='bypass_val_off' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='active_discharge_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='active_discharge_off' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='active_discharge_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='active_discharge_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='soft_start_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='soft_start_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='soft_start_val_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='pull_down_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='pull_down_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='pull_down_val_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='enable_time' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='off_on_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='of_map_mode' type-id='17a94daa' visibility='default' filepath='include/linux/regulator/driver.h' line='392' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_config' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='411' column='1' id='973b98af'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/regulator/driver.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init_data' type-id='103dcfdf' visibility='default' filepath='include/linux/regulator/driver.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/regulator/driver.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/regulator/driver.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='regmap' type-id='29af9a72' visibility='default' filepath='include/linux/regulator/driver.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ena_gpiod' type-id='26760480' visibility='default' filepath='include/linux/regulator/driver.h' line='418' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_ops' size-in-bits='2112' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='144' column='1' id='707f0173'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list_voltage' type-id='bfb02820' visibility='default' filepath='include/linux/regulator/driver.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_voltage' type-id='e83ba222' visibility='default' filepath='include/linux/regulator/driver.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_voltage' type-id='caa0e368' visibility='default' filepath='include/linux/regulator/driver.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_voltage_sel' type-id='bfb02820' visibility='default' filepath='include/linux/regulator/driver.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_voltage' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_voltage_sel' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_current_limit' type-id='caa0e368' visibility='default' filepath='include/linux/regulator/driver.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_current_limit' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_input_current_limit' type-id='12239021' visibility='default' filepath='include/linux/regulator/driver.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_over_current_protection' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_active_discharge' type-id='2b6bf4a3' visibility='default' filepath='include/linux/regulator/driver.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='enable' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='disable' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='is_enabled' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_mode' type-id='bfb02820' visibility='default' filepath='include/linux/regulator/driver.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='get_mode' type-id='383e66df' visibility='default' filepath='include/linux/regulator/driver.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_error_flags' type-id='7ef3bbb0' visibility='default' filepath='include/linux/regulator/driver.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='enable_time' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='set_ramp_delay' type-id='12239021' visibility='default' filepath='include/linux/regulator/driver.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='set_voltage_time' type-id='caa0e368' visibility='default' filepath='include/linux/regulator/driver.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='set_voltage_time_sel' type-id='ec23f0e2' visibility='default' filepath='include/linux/regulator/driver.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='set_soft_start' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='get_status' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='get_optimum_mode' type-id='f14ddf44' visibility='default' filepath='include/linux/regulator/driver.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='set_load' type-id='12239021' visibility='default' filepath='include/linux/regulator/driver.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='set_bypass' type-id='2b6bf4a3' visibility='default' filepath='include/linux/regulator/driver.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='get_bypass' type-id='43934166' visibility='default' filepath='include/linux/regulator/driver.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='set_suspend_voltage' type-id='12239021' visibility='default' filepath='include/linux/regulator/driver.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='set_suspend_enable' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='set_suspend_disable' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='set_suspend_mode' type-id='bfb02820' visibility='default' filepath='include/linux/regulator/driver.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='resume' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='set_pull_down' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='221' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_dev' size-in-bits='10624' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='446' column='1' id='7dfdcc84'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='5629bd41' visibility='default' filepath='include/linux/regulator/driver.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='exclusive' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='use_count' type-id='19c2251e' visibility='default' filepath='include/linux/regulator/driver.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='open_count' type-id='19c2251e' visibility='default' filepath='include/linux/regulator/driver.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='bypass_count' type-id='19c2251e' visibility='default' filepath='include/linux/regulator/driver.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/regulator/driver.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='consumer_list' type-id='72f469ec' visibility='default' filepath='include/linux/regulator/driver.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='coupling_desc' type-id='3ce445fe' visibility='default' filepath='include/linux/regulator/driver.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='notifier' type-id='708c2394' visibility='default' filepath='include/linux/regulator/driver.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mutex' type-id='45793a97' visibility='default' filepath='include/linux/regulator/driver.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='mutex_owner' type-id='f23e2572' visibility='default' filepath='include/linux/regulator/driver.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ref_cnt' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/regulator/driver.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/regulator/driver.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='constraints' type-id='2fed99fc' visibility='default' filepath='include/linux/regulator/driver.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='supply' type-id='850c13f6' visibility='default' filepath='include/linux/regulator/driver.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='supply_name' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='regmap' type-id='29af9a72' visibility='default' filepath='include/linux/regulator/driver.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='disable_work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/regulator/driver.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='reg_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/regulator/driver.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='debugfs' type-id='27675065' visibility='default' filepath='include/linux/regulator/driver.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='ena_pin' type-id='6045f216' visibility='default' filepath='include/linux/regulator/driver.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='ena_gpio_state' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='is_switch' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='last_off_jiffy' type-id='7359adad' visibility='default' filepath='include/linux/regulator/driver.h' line='484' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='coupling_desc' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='429' column='1' id='3ce445fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='coupled_rdevs' type-id='f4c93d58' visibility='default' filepath='include/linux/regulator/driver.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='coupler' type-id='d1347205' visibility='default' filepath='include/linux/regulator/driver.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n_resolved' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='n_coupled' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='433' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ww_mutex' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/ww_mutex.h' line='51' column='1' id='45793a97'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='925167dc' visibility='default' filepath='include/linux/ww_mutex.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ctx' type-id='c1d02a64' visibility='default' filepath='include/linux/ww_mutex.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ww_acquire_ctx' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/ww_mutex.h' line='31' column='1' id='2c45f76e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/ww_mutex.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stamp' type-id='7359adad' visibility='default' filepath='include/linux/ww_mutex.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='acquired' type-id='f0981eeb' visibility='default' filepath='include/linux/ww_mutex.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='wounded' type-id='8efea9e5' visibility='default' filepath='include/linux/ww_mutex.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='is_wait_die' type-id='8efea9e5' visibility='default' filepath='include/linux/ww_mutex.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='regulator_type' filepath='include/linux/regulator/driver.h' line='227' column='1' id='b9a524a4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='REGULATOR_VOLTAGE' value='0'/>
+        <enumerator name='REGULATOR_CURRENT' value='1'/>
+      </enum-decl>
+      <class-decl name='regulator_linear_range' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='53' column='1' id='618915a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_uV' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='min_sel' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_sel' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='uV_step' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='973b98af' const='yes' id='e937566e'/>
+      <pointer-type-def type-id='e937566e' size-in-bits='64' id='661ccd0c'/>
+      <qualified-type-def type-id='45814d78' const='yes' id='0a26da71'/>
+      <pointer-type-def type-id='0a26da71' size-in-bits='64' id='5629bd41'/>
+      <qualified-type-def type-id='435002d4' const='yes' id='1788182f'/>
+      <pointer-type-def type-id='1788182f' size-in-bits='64' id='103dcfdf'/>
+      <qualified-type-def type-id='618915a2' const='yes' id='6702beaf'/>
+      <pointer-type-def type-id='6702beaf' size-in-bits='64' id='ae51eb5f'/>
+      <qualified-type-def type-id='707f0173' const='yes' id='a06ec50c'/>
+      <pointer-type-def type-id='a06ec50c' size-in-bits='64' id='b4605ad2'/>
+      <pointer-type-def type-id='46155a72' size-in-bits='64' id='62e9cc9c'/>
+      <pointer-type-def type-id='13b1c3f8' size-in-bits='64' id='c3db487a'/>
+      <pointer-type-def type-id='dfce8aa4' size-in-bits='64' id='43934166'/>
+      <pointer-type-def type-id='25e34545' size-in-bits='64' id='12239021'/>
+      <pointer-type-def type-id='387ddca6' size-in-bits='64' id='caa0e368'/>
+      <pointer-type-def type-id='72a2bb90' size-in-bits='64' id='e83ba222'/>
+      <pointer-type-def type-id='2ab93737' size-in-bits='64' id='2b6bf4a3'/>
+      <pointer-type-def type-id='1c9f9836' size-in-bits='64' id='bfb02820'/>
+      <pointer-type-def type-id='0639fb3e' size-in-bits='64' id='7ef3bbb0'/>
+      <pointer-type-def type-id='fdb31210' size-in-bits='64' id='ec23f0e2'/>
+      <pointer-type-def type-id='d0b77cf6' size-in-bits='64' id='2fed99fc'/>
+      <pointer-type-def type-id='973b98af' size-in-bits='64' id='37265457'/>
+      <pointer-type-def type-id='1b8fa461' size-in-bits='64' id='857611a9'/>
+      <pointer-type-def type-id='4ceb5ab5' size-in-bits='64' id='d1347205'/>
+      <pointer-type-def type-id='7dfdcc84' size-in-bits='64' id='43c38462'/>
+      <pointer-type-def type-id='43c38462' size-in-bits='64' id='f4c93d58'/>
+      <pointer-type-def type-id='616cdd90' size-in-bits='64' id='6045f216'/>
+      <pointer-type-def type-id='435002d4' size-in-bits='64' id='d287fe92'/>
+      <pointer-type-def type-id='c1a2f7eb' size-in-bits='64' id='383e66df'/>
+      <pointer-type-def type-id='a7b38e12' size-in-bits='64' id='f14ddf44'/>
+      <pointer-type-def type-id='32efe300' size-in-bits='64' id='17a94daa'/>
+      <pointer-type-def type-id='2c45f76e' size-in-bits='64' id='c1d02a64'/>
+      <function-decl name='of_get_regulator_init_data' mangled-name='of_get_regulator_init_data' filepath='include/linux/regulator/of_regulator.h' line='22' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_regulator_init_data'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='5629bd41'/>
+        <return type-id='d287fe92'/>
+      </function-decl>
+      <function-decl name='gpiod_get_optional' mangled-name='gpiod_get_optional' filepath='include/linux/gpio/consumer.h' line='71' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_get_optional'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='38d4936d'/>
+        <return type-id='26760480'/>
+      </function-decl>
+      <function-decl name='devm_regulator_register' mangled-name='devm_regulator_register' filepath='include/linux/regulator/driver.h' line='491' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regulator_register'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='5629bd41'/>
+        <parameter type-id='661ccd0c'/>
+        <return type-id='43c38462'/>
+      </function-decl>
+      <function-decl name='rdev_get_drvdata' mangled-name='rdev_get_drvdata' filepath='include/linux/regulator/driver.h' line='500' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rdev_get_drvdata'>
+        <parameter type-id='43c38462'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='46155a72'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='5629bd41'/>
+        <parameter type-id='37265457'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='13b1c3f8'>
+        <parameter type-id='43c38462'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dfce8aa4'>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='d8e6b335'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='25e34545'>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='387ddca6'>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='72a2bb90'>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2ab93737'>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1c9f9836'>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0639fb3e'>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fdb31210'>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c1a2f7eb'>
+        <parameter type-id='43c38462'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a7b38e12'>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='32efe300'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/regulator/helpers.c' language='LANG_C89'>
+      <function-decl name='regulator_is_enabled_regmap' mangled-name='regulator_is_enabled_regmap' filepath='drivers/regulator/helpers.c' line='27' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_is_enabled_regmap'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/helpers.c' line='27' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_enable_regmap' mangled-name='regulator_enable_regmap' filepath='drivers/regulator/helpers.c' line='59' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_enable_regmap'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/helpers.c' line='59' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_disable_regmap' mangled-name='regulator_disable_regmap' filepath='drivers/regulator/helpers.c' line='85' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_disable_regmap'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/helpers.c' line='85' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_get_voltage_sel_regmap' mangled-name='regulator_get_voltage_sel_regmap' filepath='drivers/regulator/helpers.c' line='233' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_get_voltage_sel_regmap'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/helpers.c' line='233' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_set_voltage_sel_regmap' mangled-name='regulator_set_voltage_sel_regmap' filepath='drivers/regulator/helpers.c' line='259' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_set_voltage_sel_regmap'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/helpers.c' line='259' column='1'/>
+        <parameter type-id='f0981eeb' name='sel' filepath='drivers/regulator/helpers.c' line='259' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_map_voltage_ascend' mangled-name='regulator_map_voltage_ascend' filepath='drivers/regulator/helpers.c' line='328' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_map_voltage_ascend'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/helpers.c' line='328' column='1'/>
+        <parameter type-id='95e97e5e' name='min_uV' filepath='drivers/regulator/helpers.c' line='329' column='1'/>
+        <parameter type-id='95e97e5e' name='max_uV' filepath='drivers/regulator/helpers.c' line='329' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_list_voltage_linear' mangled-name='regulator_list_voltage_linear' filepath='drivers/regulator/helpers.c' line='538' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_list_voltage_linear'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/helpers.c' line='538' column='1'/>
+        <parameter type-id='f0981eeb' name='selector' filepath='drivers/regulator/helpers.c' line='539' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_list_voltage_linear_range' mangled-name='regulator_list_voltage_linear_range' filepath='drivers/regulator/helpers.c' line='641' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_list_voltage_linear_range'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/helpers.c' line='641' column='1'/>
+        <parameter type-id='f0981eeb' name='selector' filepath='drivers/regulator/helpers.c' line='642' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_list_voltage_table' mangled-name='regulator_list_voltage_table' filepath='drivers/regulator/helpers.c' line='658' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_list_voltage_table'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/helpers.c' line='658' column='1'/>
+        <parameter type-id='f0981eeb' name='selector' filepath='drivers/regulator/helpers.c' line='659' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/remoteproc/remoteproc_core.c' language='LANG_C89'>
+      <class-decl name='rproc' size-in-bits='10176' is-struct='yes' visibility='default' filepath='include/linux/remoteproc.h' line='485' column='1' id='40822039'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/remoteproc.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='domain' type-id='bff05edb' visibility='default' filepath='include/linux/remoteproc.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/remoteproc.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='firmware' type-id='26a90f95' visibility='default' filepath='include/linux/remoteproc.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/remoteproc.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ops' type-id='c79d9b20' visibility='default' filepath='include/linux/remoteproc.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/remoteproc.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='power' type-id='49178f86' visibility='default' filepath='include/linux/remoteproc.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7840'>
+          <var-decl name='state' type-id='f0981eeb' visibility='default' filepath='include/linux/remoteproc.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/remoteproc.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='dbg_dir' type-id='27675065' visibility='default' filepath='include/linux/remoteproc.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='traces' type-id='72f469ec' visibility='default' filepath='include/linux/remoteproc.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='num_traces' type-id='95e97e5e' visibility='default' filepath='include/linux/remoteproc.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='carveouts' type-id='72f469ec' visibility='default' filepath='include/linux/remoteproc.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='mappings' type-id='72f469ec' visibility='default' filepath='include/linux/remoteproc.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='bootaddr' type-id='19c2251e' visibility='default' filepath='include/linux/remoteproc.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='rvdevs' type-id='72f469ec' visibility='default' filepath='include/linux/remoteproc.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='subdevs' type-id='72f469ec' visibility='default' filepath='include/linux/remoteproc.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='notifyids' type-id='37ce495e' visibility='default' filepath='include/linux/remoteproc.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/linux/remoteproc.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='crash_handler' type-id='ef9025d0' visibility='default' filepath='include/linux/remoteproc.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='crash_cnt' type-id='f0981eeb' visibility='default' filepath='include/linux/remoteproc.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9632'>
+          <var-decl name='recovery_disabled' type-id='b50a4934' visibility='default' filepath='include/linux/remoteproc.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='max_notifyid' type-id='95e97e5e' visibility='default' filepath='include/linux/remoteproc.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='table_ptr' type-id='954953c8' visibility='default' filepath='include/linux/remoteproc.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='cached_table' type-id='954953c8' visibility='default' filepath='include/linux/remoteproc.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='table_sz' type-id='b59d7dce' visibility='default' filepath='include/linux/remoteproc.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='has_iommu' type-id='b50a4934' visibility='default' filepath='include/linux/remoteproc.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9928'>
+          <var-decl name='auto_boot' type-id='b50a4934' visibility='default' filepath='include/linux/remoteproc.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='dump_segments' type-id='72f469ec' visibility='default' filepath='include/linux/remoteproc.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='nb_vdev' type-id='95e97e5e' visibility='default' filepath='include/linux/remoteproc.h' line='516' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rproc_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/remoteproc.h' line='373' column='1' id='fb6b0a12'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='64c391d1' visibility='default' filepath='include/linux/remoteproc.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stop' type-id='64c391d1' visibility='default' filepath='include/linux/remoteproc.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kick' type-id='c6485e8f' visibility='default' filepath='include/linux/remoteproc.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='da_to_va' type-id='af6d77bb' visibility='default' filepath='include/linux/remoteproc.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parse_fw' type-id='39d0366f' visibility='default' filepath='include/linux/remoteproc.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='handle_rsc' type-id='b104e6b0' visibility='default' filepath='include/linux/remoteproc.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='find_loaded_rsc_table' type-id='0d07dca9' visibility='default' filepath='include/linux/remoteproc.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='load' type-id='39d0366f' visibility='default' filepath='include/linux/remoteproc.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sanity_check' type-id='39d0366f' visibility='default' filepath='include/linux/remoteproc.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_boot_addr' type-id='e6171aaf' visibility='default' filepath='include/linux/remoteproc.h' line='385' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='resource_table' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/remoteproc.h' line='72' column='1' id='1fc04c6a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ver' type-id='19c2251e' visibility='default' filepath='include/linux/remoteproc.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num' type-id='19c2251e' visibility='default' filepath='include/linux/remoteproc.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='1872161b' visibility='default' filepath='include/linux/remoteproc.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='offset' type-id='c165e8b9' visibility='default' filepath='include/linux/remoteproc.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rproc_subdev' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/remoteproc.h' line='528' column='1' id='835b9b57'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/remoteproc.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='prepare' type-id='5afa70dd' visibility='default' filepath='include/linux/remoteproc.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='start' type-id='5afa70dd' visibility='default' filepath='include/linux/remoteproc.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='stop' type-id='03676ee7' visibility='default' filepath='include/linux/remoteproc.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='unprepare' type-id='2859cc56' visibility='default' filepath='include/linux/remoteproc.h' line='534' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rproc_dump_segment' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/remoteproc.h' line='439' column='1' id='4187a976'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/remoteproc.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='da' type-id='cf29c9b3' visibility='default' filepath='include/linux/remoteproc.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/remoteproc.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/remoteproc.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dump' type-id='90cfc081' visibility='default' filepath='include/linux/remoteproc.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='offset' type-id='69bf7bee' visibility='default' filepath='include/linux/remoteproc.h' line='448' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='rproc_crash_type' filepath='include/linux/remoteproc.h' line='424' column='1' id='25751b8f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RPROC_MMUFAULT' value='0'/>
+        <enumerator name='RPROC_WATCHDOG' value='1'/>
+        <enumerator name='RPROC_FATAL_ERROR' value='2'/>
+      </enum-decl>
+      <qualified-type-def type-id='fb6b0a12' const='yes' id='0e143c35'/>
+      <pointer-type-def type-id='0e143c35' size-in-bits='64' id='48daa4cd'/>
+      <pointer-type-def type-id='99438dcd' size-in-bits='64' id='64c391d1'/>
+      <pointer-type-def type-id='36ccbfa3' size-in-bits='64' id='39d0366f'/>
+      <pointer-type-def type-id='405001ce' size-in-bits='64' id='b104e6b0'/>
+      <pointer-type-def type-id='86607661' size-in-bits='64' id='5afa70dd'/>
+      <pointer-type-def type-id='1fc04c6a' size-in-bits='64' id='954953c8'/>
+      <pointer-type-def type-id='5198bc0d' size-in-bits='64' id='0d07dca9'/>
+      <pointer-type-def type-id='40822039' size-in-bits='64' id='5771c601'/>
+      <pointer-type-def type-id='4187a976' size-in-bits='64' id='9381c60c'/>
+      <pointer-type-def type-id='fb6b0a12' size-in-bits='64' id='c79d9b20'/>
+      <pointer-type-def type-id='835b9b57' size-in-bits='64' id='3591079f'/>
+      <pointer-type-def type-id='0f0c58b3' size-in-bits='64' id='e6171aaf'/>
+      <pointer-type-def type-id='22ddde2b' size-in-bits='64' id='c6485e8f'/>
+      <pointer-type-def type-id='911f5535' size-in-bits='64' id='90cfc081'/>
+      <pointer-type-def type-id='2f07c2f4' size-in-bits='64' id='2859cc56'/>
+      <pointer-type-def type-id='f2c03b9b' size-in-bits='64' id='03676ee7'/>
+      <pointer-type-def type-id='bce0b727' size-in-bits='64' id='af6d77bb'/>
+      <function-decl name='rproc_alloc' mangled-name='rproc_alloc' filepath='drivers/remoteproc/remoteproc_core.c' line='1989' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_alloc'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/remoteproc/remoteproc_core.c' line='1989' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/remoteproc/remoteproc_core.c' line='1989' column='1'/>
+        <parameter type-id='48daa4cd' name='ops' filepath='drivers/remoteproc/remoteproc_core.c' line='1990' column='1'/>
+        <parameter type-id='80f4b756' name='firmware' filepath='drivers/remoteproc/remoteproc_core.c' line='1991' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='drivers/remoteproc/remoteproc_core.c' line='1991' column='1'/>
+        <return type-id='5771c601'/>
+      </function-decl>
+      <function-decl name='rproc_remove_subdev' mangled-name='rproc_remove_subdev' filepath='drivers/remoteproc/remoteproc_core.c' line='2170' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_remove_subdev'>
+        <parameter type-id='5771c601' name='rproc' filepath='drivers/remoteproc/remoteproc_core.c' line='2170' column='1'/>
+        <parameter type-id='3591079f' name='subdev' filepath='drivers/remoteproc/remoteproc_core.c' line='2170' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rproc_coredump_add_segment' mangled-name='rproc_coredump_add_segment' filepath='drivers/remoteproc/remoteproc_core.c' line='1503' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_coredump_add_segment'>
+        <parameter type-id='5771c601' name='rproc' filepath='drivers/remoteproc/remoteproc_core.c' line='1503' column='1'/>
+        <parameter type-id='cf29c9b3' name='da' filepath='drivers/remoteproc/remoteproc_core.c' line='1503' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/remoteproc/remoteproc_core.c' line='1503' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rproc_coredump_add_custom_segment' mangled-name='rproc_coredump_add_custom_segment' filepath='drivers/remoteproc/remoteproc_core.c' line='1534' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_coredump_add_custom_segment'>
+        <parameter type-id='5771c601' name='rproc' filepath='drivers/remoteproc/remoteproc_core.c' line='1534' column='1'/>
+        <parameter type-id='cf29c9b3' name='da' filepath='drivers/remoteproc/remoteproc_core.c' line='1535' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/remoteproc/remoteproc_core.c' line='1535' column='1'/>
+        <parameter type-id='90cfc081' name='dumpfn' filepath='drivers/remoteproc/remoteproc_core.c' line='1536' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/remoteproc/remoteproc_core.c' line='1539' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rproc_add' mangled-name='rproc_add' filepath='drivers/remoteproc/remoteproc_core.c' line='1906' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_add'>
+        <parameter type-id='5771c601' name='rproc' filepath='drivers/remoteproc/remoteproc_core.c' line='1906' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rproc_free' mangled-name='rproc_free' filepath='drivers/remoteproc/remoteproc_core.c' line='2088' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_free'>
+        <parameter type-id='5771c601' name='rproc' filepath='drivers/remoteproc/remoteproc_core.c' line='2088' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rproc_del' mangled-name='rproc_del' filepath='drivers/remoteproc/remoteproc_core.c' line='2125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_del'>
+        <parameter type-id='5771c601' name='rproc' filepath='drivers/remoteproc/remoteproc_core.c' line='2125' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rproc_add_subdev' mangled-name='rproc_add_subdev' filepath='drivers/remoteproc/remoteproc_core.c' line='2159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_add_subdev'>
+        <parameter type-id='5771c601' name='rproc' filepath='drivers/remoteproc/remoteproc_core.c' line='2159' column='1'/>
+        <parameter type-id='3591079f' name='subdev' filepath='drivers/remoteproc/remoteproc_core.c' line='2159' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rproc_get_by_child' mangled-name='rproc_get_by_child' filepath='drivers/remoteproc/remoteproc_core.c' line='2182' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_get_by_child'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/remoteproc/remoteproc_core.c' line='2182' column='1'/>
+        <return type-id='5771c601'/>
+      </function-decl>
+      <function-decl name='rproc_report_crash' mangled-name='rproc_report_crash' filepath='drivers/remoteproc/remoteproc_core.c' line='2204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_report_crash'>
+        <parameter type-id='5771c601' name='rproc' filepath='drivers/remoteproc/remoteproc_core.c' line='2204' column='1'/>
+        <parameter type-id='25751b8f' name='type' filepath='drivers/remoteproc/remoteproc_core.c' line='2204' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='99438dcd'>
+        <parameter type-id='5771c601'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='36ccbfa3'>
+        <parameter type-id='5771c601'/>
+        <parameter type-id='fce0537d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='405001ce'>
+        <parameter type-id='5771c601'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='86607661'>
+        <parameter type-id='3591079f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5198bc0d'>
+        <parameter type-id='5771c601'/>
+        <parameter type-id='fce0537d'/>
+        <return type-id='954953c8'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0f0c58b3'>
+        <parameter type-id='5771c601'/>
+        <parameter type-id='fce0537d'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='22ddde2b'>
+        <parameter type-id='5771c601'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='911f5535'>
+        <parameter type-id='5771c601'/>
+        <parameter type-id='9381c60c'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2f07c2f4'>
+        <parameter type-id='3591079f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f2c03b9b'>
+        <parameter type-id='3591079f'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bce0b727'>
+        <parameter type-id='5771c601'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/remoteproc/remoteproc_elf_loader.c' language='LANG_C89'>
+      <class-decl name='iommu_domain' is-struct='yes' visibility='default' is-declaration-only='yes' id='80ef8fec'/>
+      <pointer-type-def type-id='80ef8fec' size-in-bits='64' id='bff05edc'/>
+      <function-decl name='rproc_elf_get_boot_addr' mangled-name='rproc_elf_get_boot_addr' filepath='drivers/remoteproc/remoteproc_elf_loader.c' line='105' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_elf_get_boot_addr'>
+        <parameter type-id='5771c601' name='rproc' filepath='drivers/remoteproc/remoteproc_elf_loader.c' line='105' column='1'/>
+        <parameter type-id='fce0537d' name='fw' filepath='drivers/remoteproc/remoteproc_elf_loader.c' line='105' column='1'/>
+        <return type-id='19c2251e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/reset/core.c' language='LANG_C89'>
+      <function-decl name='__of_reset_control_get' mangled-name='__of_reset_control_get' filepath='drivers/reset/core.c' line='600' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__of_reset_control_get'>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/reset/core.c' line='600' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/reset/core.c' line='601' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/reset/core.c' line='601' column='1'/>
+        <parameter type-id='b50a4934' name='shared' filepath='drivers/reset/core.c' line='601' column='1'/>
+        <parameter type-id='b50a4934' name='optional' filepath='drivers/reset/core.c' line='602' column='1'/>
+        <parameter type-id='b50a4934' name='acquired' filepath='drivers/reset/core.c' line='602' column='1'/>
+        <return type-id='9f9b8114'/>
+      </function-decl>
+      <function-decl name='__devm_reset_control_get' mangled-name='__devm_reset_control_get' filepath='drivers/reset/core.c' line='778' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__devm_reset_control_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/reset/core.c' line='778' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/reset/core.c' line='779' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/reset/core.c' line='779' column='1'/>
+        <parameter type-id='b50a4934' name='shared' filepath='drivers/reset/core.c' line='779' column='1'/>
+        <parameter type-id='b50a4934' name='optional' filepath='drivers/reset/core.c' line='780' column='1'/>
+        <parameter type-id='b50a4934' name='acquired' filepath='drivers/reset/core.c' line='780' column='1'/>
+        <return type-id='9f9b8114'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/reset/hisilicon/hi6220_reset.c' language='LANG_C89'>
+      <class-decl name='reset_controller_dev' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/reset-controller.h' line='68' column='1' id='a5e8d9a1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='cfc6a130' visibility='default' filepath='include/linux/reset-controller.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/reset-controller.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/reset-controller.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reset_control_head' type-id='72f469ec' visibility='default' filepath='include/linux/reset-controller.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/reset-controller.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/reset-controller.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='of_reset_n_cells' type-id='95e97e5e' visibility='default' filepath='include/linux/reset-controller.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='of_xlate' type-id='81145c38' visibility='default' filepath='include/linux/reset-controller.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='nr_resets' type-id='f0981eeb' visibility='default' filepath='include/linux/reset-controller.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='reset_control_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/reset-controller.h' line='18' column='1' id='ac76d92d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reset' type-id='c637b701' visibility='default' filepath='include/linux/reset-controller.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='assert' type-id='c637b701' visibility='default' filepath='include/linux/reset-controller.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='deassert' type-id='c637b701' visibility='default' filepath='include/linux/reset-controller.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='status' type-id='c637b701' visibility='default' filepath='include/linux/reset-controller.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='ac76d92d' const='yes' id='b954583a'/>
+      <pointer-type-def type-id='b954583a' size-in-bits='64' id='cfc6a130'/>
+      <pointer-type-def type-id='137e352e' size-in-bits='64' id='81145c38'/>
+      <pointer-type-def type-id='d0d01815' size-in-bits='64' id='c637b701'/>
+      <pointer-type-def type-id='a5e8d9a1' size-in-bits='64' id='775147d9'/>
+      <function-decl name='syscon_node_to_regmap' mangled-name='syscon_node_to_regmap' filepath='include/linux/mfd/syscon.h' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='syscon_node_to_regmap'>
+        <parameter type-id='9a537bbe'/>
+        <return type-id='29af9a72'/>
+      </function-decl>
+      <function-decl name='reset_controller_register' mangled-name='reset_controller_register' filepath='include/linux/reset-controller.h' line='81' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reset_controller_register'>
+        <parameter type-id='775147d9'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='137e352e'>
+        <parameter type-id='775147d9'/>
+        <parameter type-id='af02a266'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d0d01815'>
+        <parameter type-id='775147d9'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/reset/reset-scmi.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='1024' id='c497958f'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <class-decl name='scmi_driver' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='274' column='1' id='35ff1d34'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/scmi_protocol.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='probe' type-id='fa2519a6' visibility='default' filepath='include/linux/scmi_protocol.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='remove' type-id='6219347f' visibility='default' filepath='include/linux/scmi_protocol.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id_table' type-id='2d81b115' visibility='default' filepath='include/linux/scmi_protocol.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/scmi_protocol.h' line='280' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_device' size-in-bits='7488' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='257' column='1' id='c016a1fc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/linux/scmi_protocol.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='protocol_id' type-id='f9b06939' visibility='default' filepath='include/linux/scmi_protocol.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/scmi_protocol.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='handle' type-id='94f1df82' visibility='default' filepath='include/linux/scmi_protocol.h' line='261' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_handle' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='231' column='1' id='ee54f9d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/scmi_protocol.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='version' type-id='3f2d9c8e' visibility='default' filepath='include/linux/scmi_protocol.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='perf_ops' type-id='d41d707c' visibility='default' filepath='include/linux/scmi_protocol.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='clk_ops' type-id='deb758b1' visibility='default' filepath='include/linux/scmi_protocol.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='power_ops' type-id='9df94d5e' visibility='default' filepath='include/linux/scmi_protocol.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sensor_ops' type-id='07ed7d97' visibility='default' filepath='include/linux/scmi_protocol.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='reset_ops' type-id='bdcbf34c' visibility='default' filepath='include/linux/scmi_protocol.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='perf_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/scmi_protocol.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='clk_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/scmi_protocol.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='power_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/scmi_protocol.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sensor_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/scmi_protocol.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='reset_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/scmi_protocol.h' line='244' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_revision_info' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='27' column='1' id='889b9d08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='major_ver' type-id='1dc6a898' visibility='default' filepath='include/linux/scmi_protocol.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='minor_ver' type-id='1dc6a898' visibility='default' filepath='include/linux/scmi_protocol.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num_protocols' type-id='f9b06939' visibility='default' filepath='include/linux/scmi_protocol.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='num_agents' type-id='f9b06939' visibility='default' filepath='include/linux/scmi_protocol.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='impl_ver' type-id='19c2251e' visibility='default' filepath='include/linux/scmi_protocol.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='vendor_id' type-id='ac1fa8c0' visibility='default' filepath='include/linux/scmi_protocol.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='sub_vendor_id' type-id='ac1fa8c0' visibility='default' filepath='include/linux/scmi_protocol.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_perf_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='97' column='1' id='9ea32b06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='limits_set' type-id='215d9248' visibility='default' filepath='include/linux/scmi_protocol.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='limits_get' type-id='6168f65a' visibility='default' filepath='include/linux/scmi_protocol.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='level_set' type-id='136ee384' visibility='default' filepath='include/linux/scmi_protocol.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='level_get' type-id='26b60b43' visibility='default' filepath='include/linux/scmi_protocol.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='device_domain_id' type-id='613d39f5' visibility='default' filepath='include/linux/scmi_protocol.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='transition_latency_get' type-id='47997eaf' visibility='default' filepath='include/linux/scmi_protocol.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='device_opps_add' type-id='47997eaf' visibility='default' filepath='include/linux/scmi_protocol.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='freq_set' type-id='f85d5c07' visibility='default' filepath='include/linux/scmi_protocol.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='freq_get' type-id='2ac6d817' visibility='default' filepath='include/linux/scmi_protocol.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='est_power_get' type-id='920227ca' visibility='default' filepath='include/linux/scmi_protocol.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_clk_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='66' column='1' id='970c0c79'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count_get' type-id='312a095b' visibility='default' filepath='include/linux/scmi_protocol.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='info_get' type-id='aa9bd9ec' visibility='default' filepath='include/linux/scmi_protocol.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rate_get' type-id='d7c1813f' visibility='default' filepath='include/linux/scmi_protocol.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rate_set' type-id='7d95ee32' visibility='default' filepath='include/linux/scmi_protocol.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='enable' type-id='29a23a5a' visibility='default' filepath='include/linux/scmi_protocol.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='disable' type-id='29a23a5a' visibility='default' filepath='include/linux/scmi_protocol.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_clock_info' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='37' column='1' id='093b20f9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/scmi_protocol.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rate_discrete' type-id='b50a4934' visibility='default' filepath='include/linux/scmi_protocol.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='1d28b625' visibility='default' filepath='include/linux/scmi_protocol.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='1088' is-anonymous='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='40' column='1' id='1d28b625'>
+        <data-member access='private'>
+          <var-decl name='list' type-id='fe492253' visibility='default' filepath='include/linux/scmi_protocol.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='range' type-id='099e357b' visibility='default' filepath='include/linux/scmi_protocol.h' line='49' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='1088' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='41' column='1' id='fe492253'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_rates' type-id='95e97e5e' visibility='default' filepath='include/linux/scmi_protocol.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rates' type-id='c497958f' visibility='default' filepath='include/linux/scmi_protocol.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='45' column='1' id='099e357b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_rate' type-id='91ce1af9' visibility='default' filepath='include/linux/scmi_protocol.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_rate' type-id='91ce1af9' visibility='default' filepath='include/linux/scmi_protocol.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='step_size' type-id='91ce1af9' visibility='default' filepath='include/linux/scmi_protocol.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_power_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='128' column='1' id='daeb4148'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_domains_get' type-id='312a095b' visibility='default' filepath='include/linux/scmi_protocol.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name_get' type-id='d48a05c7' visibility='default' filepath='include/linux/scmi_protocol.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state_set' type-id='6bdbc3e1' visibility='default' filepath='include/linux/scmi_protocol.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='state_get' type-id='48dcc51a' visibility='default' filepath='include/linux/scmi_protocol.h' line='140' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_sensor_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='177' column='1' id='6f985b0f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count_get' type-id='312a095b' visibility='default' filepath='include/linux/scmi_protocol.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='info_get' type-id='822b6136' visibility='default' filepath='include/linux/scmi_protocol.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='trip_point_notify' type-id='74bca203' visibility='default' filepath='include/linux/scmi_protocol.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='trip_point_config' type-id='204c0f62' visibility='default' filepath='include/linux/scmi_protocol.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reading_get' type-id='d7c1813f' visibility='default' filepath='include/linux/scmi_protocol.h' line='186' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_sensor_info' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='144' column='1' id='39094ad1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/linux/scmi_protocol.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='f9b06939' visibility='default' filepath='include/linux/scmi_protocol.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='scale' type-id='fdbf7a0f' visibility='default' filepath='include/linux/scmi_protocol.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='num_trip_points' type-id='f9b06939' visibility='default' filepath='include/linux/scmi_protocol.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='async' type-id='b50a4934' visibility='default' filepath='include/linux/scmi_protocol.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/scmi_protocol.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_reset_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='201' column='1' id='6e3a91a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_domains_get' type-id='312a095b' visibility='default' filepath='include/linux/scmi_protocol.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name_get' type-id='d48a05c7' visibility='default' filepath='include/linux/scmi_protocol.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='latency_get' type-id='29a23a5a' visibility='default' filepath='include/linux/scmi_protocol.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reset' type-id='29a23a5a' visibility='default' filepath='include/linux/scmi_protocol.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='assert' type-id='29a23a5a' visibility='default' filepath='include/linux/scmi_protocol.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='deassert' type-id='29a23a5a' visibility='default' filepath='include/linux/scmi_protocol.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_device_id' size-in-bits='8' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='270' column='1' id='9aefc15c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='protocol_id' type-id='f9b06939' visibility='default' filepath='include/linux/scmi_protocol.h' line='271' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2664d053' size-in-bits='64' id='d48a05c7'/>
+      <qualified-type-def type-id='093b20f9' const='yes' id='331f9762'/>
+      <pointer-type-def type-id='331f9762' size-in-bits='64' id='c2bb2658'/>
+      <pointer-type-def type-id='c9cbe27a' size-in-bits='64' id='aa9bd9ec'/>
+      <qualified-type-def type-id='9aefc15c' const='yes' id='425bcb9d'/>
+      <pointer-type-def type-id='425bcb9d' size-in-bits='64' id='2d81b115'/>
+      <qualified-type-def type-id='ee54f9d4' const='yes' id='970fe03f'/>
+      <pointer-type-def type-id='970fe03f' size-in-bits='64' id='e2fdc10f'/>
+      <qualified-type-def type-id='39094ad1' const='yes' id='ff01e92c'/>
+      <pointer-type-def type-id='ff01e92c' size-in-bits='64' id='7601d472'/>
+      <pointer-type-def type-id='a67f4304' size-in-bits='64' id='822b6136'/>
+      <pointer-type-def type-id='81051a5f' size-in-bits='64' id='312a095b'/>
+      <pointer-type-def type-id='8b0e312b' size-in-bits='64' id='47997eaf'/>
+      <pointer-type-def type-id='f8fe36b0' size-in-bits='64' id='29a23a5a'/>
+      <pointer-type-def type-id='ddc750bf' size-in-bits='64' id='74bca203'/>
+      <pointer-type-def type-id='d9a2db4d' size-in-bits='64' id='6bdbc3e1'/>
+      <pointer-type-def type-id='64d703ca' size-in-bits='64' id='136ee384'/>
+      <pointer-type-def type-id='fc54416e' size-in-bits='64' id='215d9248'/>
+      <pointer-type-def type-id='6dc62d08' size-in-bits='64' id='7d95ee32'/>
+      <pointer-type-def type-id='1e616050' size-in-bits='64' id='204c0f62'/>
+      <pointer-type-def type-id='fce30fc0' size-in-bits='64' id='48dcc51a'/>
+      <pointer-type-def type-id='dc794d6f' size-in-bits='64' id='26b60b43'/>
+      <pointer-type-def type-id='7123c5b0' size-in-bits='64' id='6168f65a'/>
+      <pointer-type-def type-id='c201cf9b' size-in-bits='64' id='d7c1813f'/>
+      <pointer-type-def type-id='0aeff443' size-in-bits='64' id='2ac6d817'/>
+      <pointer-type-def type-id='c9491b60' size-in-bits='64' id='920227ca'/>
+      <pointer-type-def type-id='76871c3b' size-in-bits='64' id='f85d5c07'/>
+      <pointer-type-def type-id='0d3f29fc' size-in-bits='64' id='fa2519a6'/>
+      <pointer-type-def type-id='970c0c79' size-in-bits='64' id='deb758b1'/>
+      <pointer-type-def type-id='c016a1fc' size-in-bits='64' id='260390aa'/>
+      <pointer-type-def type-id='35ff1d34' size-in-bits='64' id='7f2f8862'/>
+      <pointer-type-def type-id='ee54f9d4' size-in-bits='64' id='94f1df82'/>
+      <pointer-type-def type-id='9ea32b06' size-in-bits='64' id='d41d707c'/>
+      <pointer-type-def type-id='daeb4148' size-in-bits='64' id='9df94d5e'/>
+      <pointer-type-def type-id='6e3a91a6' size-in-bits='64' id='bdcbf34c'/>
+      <pointer-type-def type-id='889b9d08' size-in-bits='64' id='3f2d9c8e'/>
+      <pointer-type-def type-id='6f985b0f' size-in-bits='64' id='07ed7d97'/>
+      <pointer-type-def type-id='a35f0003' size-in-bits='64' id='6219347f'/>
+      <function-decl name='scmi_driver_unregister' mangled-name='scmi_driver_unregister' filepath='include/linux/scmi_protocol.h' line='288' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scmi_driver_unregister'>
+        <parameter type-id='7f2f8862'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_reset_controller_register' mangled-name='devm_reset_controller_register' filepath='include/linux/reset-controller.h' line='85' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_reset_controller_register'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='775147d9'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='scmi_driver_register' mangled-name='scmi_driver_register' filepath='include/linux/scmi_protocol.h' line='286' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scmi_driver_register'>
+        <parameter type-id='7f2f8862'/>
+        <parameter type-id='2730d015'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='2664d053'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='26a90f95'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c9cbe27a'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='c2bb2658'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a67f4304'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='7601d472'/>
+      </function-type>
+      <function-type size-in-bits='64' id='81051a5f'>
+        <parameter type-id='e2fdc10f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8b0e312b'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8fe36b0'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ddc750bf'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d9a2db4d'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='64d703ca'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fc54416e'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6dc62d08'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1e616050'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fce30fc0'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dc794d6f'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7123c5b0'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c201cf9b'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0aeff443'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c9491b60'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='76871c3b'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0d3f29fc'>
+        <parameter type-id='260390aa'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a35f0003'>
+        <parameter type-id='260390aa'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/rpmsg/rpmsg_char.c' language='LANG_C89'>
+      <class-decl name='rpmsg_endpoint' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/rpmsg.h' line='90' column='1' id='f4f25674'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rpdev' type-id='41ebc58b' visibility='default' filepath='include/linux/rpmsg.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/linux/rpmsg.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cb' type-id='f0966175' visibility='default' filepath='include/linux/rpmsg.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cb_lock' type-id='925167dc' visibility='default' filepath='include/linux/rpmsg.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sig_cb' type-id='646ceeb7' visibility='default' filepath='include/linux/rpmsg.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='addr' type-id='19c2251e' visibility='default' filepath='include/linux/rpmsg.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/rpmsg.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ops' type-id='50233074' visibility='default' filepath='include/linux/rpmsg.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rpmsg_device' size-in-bits='7936' is-struct='yes' visibility='default' filepath='include/linux/rpmsg.h' line='51' column='1' id='aac7cb3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/rpmsg.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='id' type-id='40980961' visibility='default' filepath='include/linux/rpmsg.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='driver_override' type-id='26a90f95' visibility='default' filepath='include/linux/rpmsg.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='src' type-id='19c2251e' visibility='default' filepath='include/linux/rpmsg.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='dst' type-id='19c2251e' visibility='default' filepath='include/linux/rpmsg.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='ept' type-id='feb59272' visibility='default' filepath='include/linux/rpmsg.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='announce' type-id='b50a4934' visibility='default' filepath='include/linux/rpmsg.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='ops' type-id='d884146d' visibility='default' filepath='include/linux/rpmsg.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rpmsg_device_id' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='446' column='1' id='40980961'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/linux/mod_devicetable.h' line='447' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rpmsg_device_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='32' column='1' id='f809b7c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='create_ept' type-id='90e68757' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='announce_create' type-id='f853ae55' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='announce_destroy' type-id='f853ae55' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='rpmsg_rx_cb_t' type-id='2a873f51' filepath='include/linux/rpmsg.h' line='63' column='1' id='f0966175'/>
+      <class-decl name='rpmsg_channel_info' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/rpmsg.h' line='35' column='1' id='e2b27ed1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/linux/rpmsg.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='src' type-id='19c2251e' visibility='default' filepath='include/linux/rpmsg.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='dst' type-id='19c2251e' visibility='default' filepath='include/linux/rpmsg.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='rpmsg_rx_sig_t' type-id='3362870f' filepath='include/linux/rpmsg.h' line='64' column='1' id='646ceeb7'/>
+      <class-decl name='rpmsg_endpoint_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='58' column='1' id='a3285bb7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='destroy_ept' type-id='91ea7193' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='send' type-id='17d22855' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sendto' type-id='3339fe1c' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='send_offchannel' type-id='96afd393' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='trysend' type-id='17d22855' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='trysendto' type-id='3339fe1c' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='trysend_offchannel' type-id='96afd393' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='poll' type-id='00cfc612' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_signals' type-id='ded4959c' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_signals' type-id='edf18c5a' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='poll_table' type-id='415eecf1' filepath='include/linux/poll.h' line='46' column='1' id='f9b2d12e'/>
+      <class-decl name='rpmsg_driver' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/rpmsg.h' line='111' column='1' id='234005a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='drv' type-id='fe007c02' visibility='default' filepath='include/linux/rpmsg.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='id_table' type-id='ac456034' visibility='default' filepath='include/linux/rpmsg.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='probe' type-id='f853ae55' visibility='default' filepath='include/linux/rpmsg.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='remove' type-id='170fcd6a' visibility='default' filepath='include/linux/rpmsg.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='callback' type-id='2a873f51' visibility='default' filepath='include/linux/rpmsg.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='signals' type-id='3362870f' visibility='default' filepath='include/linux/rpmsg.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='40980961' const='yes' id='1f3f0f56'/>
+      <pointer-type-def type-id='1f3f0f56' size-in-bits='64' id='ac456034'/>
+      <qualified-type-def type-id='f809b7c8' const='yes' id='30d151d5'/>
+      <pointer-type-def type-id='30d151d5' size-in-bits='64' id='d884146d'/>
+      <qualified-type-def type-id='a3285bb7' const='yes' id='68dd2616'/>
+      <pointer-type-def type-id='68dd2616' size-in-bits='64' id='50233074'/>
+      <pointer-type-def type-id='e6c6c6cd' size-in-bits='64' id='92d15ae9'/>
+      <pointer-type-def type-id='db61d4a1' size-in-bits='64' id='f853ae55'/>
+      <pointer-type-def type-id='a97c4265' size-in-bits='64' id='2a873f51'/>
+      <pointer-type-def type-id='2e17690b' size-in-bits='64' id='3362870f'/>
+      <pointer-type-def type-id='fc0b88d2' size-in-bits='64' id='ded4959c'/>
+      <pointer-type-def type-id='eb77f338' size-in-bits='64' id='edf18c5a'/>
+      <pointer-type-def type-id='e7de3d97' size-in-bits='64' id='96afd393'/>
+      <pointer-type-def type-id='0fa325e9' size-in-bits='64' id='17d22855'/>
+      <pointer-type-def type-id='9c7c185a' size-in-bits='64' id='3339fe1c'/>
+      <pointer-type-def type-id='f9b2d12e' size-in-bits='64' id='a54c778f'/>
+      <pointer-type-def type-id='aac7cb3b' size-in-bits='64' id='41ebc58b'/>
+      <pointer-type-def type-id='234005a7' size-in-bits='64' id='7331a99f'/>
+      <pointer-type-def type-id='f4f25674' size-in-bits='64' id='feb59272'/>
+      <pointer-type-def type-id='925166cb' size-in-bits='64' id='90e68757'/>
+      <pointer-type-def type-id='bd8642d8' size-in-bits='64' id='00cfc612'/>
+      <pointer-type-def type-id='4aa2ba58' size-in-bits='64' id='170fcd6a'/>
+      <pointer-type-def type-id='d919518f' size-in-bits='64' id='91ea7193'/>
+      <function-decl name='alloc_chrdev_region' mangled-name='alloc_chrdev_region' filepath='include/linux/fs.h' line='2752' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_chrdev_region'>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_chrdev_region' mangled-name='unregister_chrdev_region' filepath='include/linux/fs.h' line='2759' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_chrdev_region'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cdev_add' mangled-name='cdev_add' filepath='include/linux/cdev.h' line='29' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdev_add'>
+        <parameter type-id='3e6eb93a'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_add' mangled-name='device_add' filepath='include/linux/device.h' line='1577' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_add'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_for_each_child' mangled-name='device_for_each_child' filepath='include/linux/device.h' line='1579' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_for_each_child'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='92d15ae9'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_del' mangled-name='device_del' filepath='include/linux/device.h' line='1578' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_del'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cdev_del' mangled-name='cdev_del' filepath='include/linux/cdev.h' line='35' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdev_del'>
+        <parameter type-id='3e6eb93a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_copy_from_iter_full' mangled-name='_copy_from_iter_full' filepath='include/linux/uio.h' line='128' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_copy_from_iter_full'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='4fa10f9e'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='rpmsg_send' mangled-name='rpmsg_send' filepath='include/linux/rpmsg.h' line='132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rpmsg_send'>
+        <parameter type-id='feb59272'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rpmsg_trysend' mangled-name='rpmsg_trysend' filepath='include/linux/rpmsg.h' line='137' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rpmsg_trysend'>
+        <parameter type-id='feb59272'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_rpmsg_driver' mangled-name='unregister_rpmsg_driver' filepath='include/linux/rpmsg.h' line='126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_rpmsg_driver'>
+        <parameter type-id='7331a99f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='db61d4a1'>
+        <parameter type-id='41ebc58b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a97c4265'>
+        <parameter type-id='41ebc58b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2e17690b'>
+        <parameter type-id='41ebc58b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fc0b88d2'>
+        <parameter type-id='feb59272'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eb77f338'>
+        <parameter type-id='feb59272'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e7de3d97'>
+        <parameter type-id='feb59272'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0fa325e9'>
+        <parameter type-id='feb59272'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9c7c185a'>
+        <parameter type-id='feb59272'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='925166cb'>
+        <parameter type-id='41ebc58b'/>
+        <parameter type-id='f0966175'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='e2b27ed1'/>
+        <return type-id='feb59272'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bd8642d8'>
+        <parameter type-id='feb59272'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='a54c778f'/>
+        <return type-id='8f254b08'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4aa2ba58'>
+        <parameter type-id='41ebc58b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d919518f'>
+        <parameter type-id='feb59272'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/rpmsg/rpmsg_core.c' language='LANG_C89'>
+      <pointer-type-def type-id='e2b27ed1' size-in-bits='64' id='cc769659'/>
+      <function-decl name='rpmsg_register_device' mangled-name='rpmsg_register_device' filepath='drivers/rpmsg/rpmsg_core.c' line='556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rpmsg_register_device'>
+        <parameter type-id='41ebc58b' name='rpdev' filepath='drivers/rpmsg/rpmsg_core.c' line='556' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rpmsg_unregister_device' mangled-name='rpmsg_unregister_device' filepath='drivers/rpmsg/rpmsg_core.c' line='580' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rpmsg_unregister_device'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/rpmsg/rpmsg_core.c' line='580' column='1'/>
+        <parameter type-id='cc769659' name='chinfo' filepath='drivers/rpmsg/rpmsg_core.c' line='581' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__register_rpmsg_driver' mangled-name='__register_rpmsg_driver' filepath='drivers/rpmsg/rpmsg_core.c' line='604' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__register_rpmsg_driver'>
+        <parameter type-id='7331a99f' name='rpdrv' filepath='drivers/rpmsg/rpmsg_core.c' line='604' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/rpmsg/rpmsg_core.c' line='604' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/rtc/class.c' language='LANG_C89'>
+      <function-decl name='__rtc_register_device' mangled-name='__rtc_register_device' filepath='drivers/rtc/class.c' line='344' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__rtc_register_device'>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/rtc/class.c' line='344' column='1'/>
+        <parameter type-id='5992ae83' name='rtc' filepath='drivers/rtc/class.c' line='344' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_rtc_device_register' mangled-name='devm_rtc_device_register' filepath='drivers/rtc/class.c' line='401' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_rtc_device_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/rtc/class.c' line='401' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/rtc/class.c' line='402' column='1'/>
+        <parameter type-id='b902d9c7' name='ops' filepath='drivers/rtc/class.c' line='403' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/rtc/class.c' line='404' column='1'/>
+        <return type-id='5992ae83'/>
+      </function-decl>
+      <pointer-type-def type-id='aed6b757' size-in-bits='64' id='b902d9c7'/>
+      <pointer-type-def type-id='89ae06e3' size-in-bits='64' id='5992ae83'/>
+      <qualified-type-def type-id='fd1fa73c' const='yes' id='aed6b757'/>
+      <class-decl name='rtc_device' size-in-bits='12160' is-struct='yes' visibility='default' filepath='include/linux/rtc.h' line='100' column='1' id='89ae06e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/rtc.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/rtc.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='ops' type-id='b902d9c7' visibility='default' filepath='include/linux/rtc.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='ops_lock' type-id='925167dc' visibility='default' filepath='include/linux/rtc.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='char_dev' type-id='22f86352' visibility='default' filepath='include/linux/rtc.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/rtc.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='irq_data' type-id='7359adad' visibility='default' filepath='include/linux/rtc.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='irq_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/rtc.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='irq_queue' type-id='b5ab048f' visibility='default' filepath='include/linux/rtc.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='async_queue' type-id='5bb9c75d' visibility='default' filepath='include/linux/rtc.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='irq_freq' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9376'>
+          <var-decl name='max_user_freq' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='timerqueue' type-id='ff3c7f20' visibility='default' filepath='include/linux/rtc.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='aie_timer' type-id='01786452' visibility='default' filepath='include/linux/rtc.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='uie_rtctimer' type-id='01786452' visibility='default' filepath='include/linux/rtc.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='pie_timer' type-id='b6993efc' visibility='default' filepath='include/linux/rtc.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='pie_enabled' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='irqwork' type-id='ef9025d0' visibility='default' filepath='include/linux/rtc.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='uie_unsupported' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='set_offset_nsec' type-id='bd54fe1a' visibility='default' filepath='include/linux/rtc.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/linux/rtc.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11720'>
+          <var-decl name='nvram_old_abi' type-id='b50a4934' visibility='default' filepath='include/linux/rtc.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='nvram' type-id='c0e2acc9' visibility='default' filepath='include/linux/rtc.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='range_min' type-id='1afd27ac' visibility='default' filepath='include/linux/rtc.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='range_max' type-id='13afd1c1' visibility='default' filepath='include/linux/rtc.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='start_secs' type-id='1afd27ac' visibility='default' filepath='include/linux/rtc.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='offset_secs' type-id='1afd27ac' visibility='default' filepath='include/linux/rtc.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='set_start_time' type-id='b50a4934' visibility='default' filepath='include/linux/rtc.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rtc_class_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/rtc.h' line='75' column='1' id='fd1fa73c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ioctl' type-id='05594c99' visibility='default' filepath='include/linux/rtc.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read_time' type-id='57d10d30' visibility='default' filepath='include/linux/rtc.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_time' type-id='57d10d30' visibility='default' filepath='include/linux/rtc.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read_alarm' type-id='d3769ffd' visibility='default' filepath='include/linux/rtc.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_alarm' type-id='d3769ffd' visibility='default' filepath='include/linux/rtc.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='proc' type-id='103ef621' visibility='default' filepath='include/linux/rtc.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='alarm_irq_enable' type-id='7b683b77' visibility='default' filepath='include/linux/rtc.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='read_offset' type-id='ab7ca002' visibility='default' filepath='include/linux/rtc.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_offset' type-id='3b25b30a' visibility='default' filepath='include/linux/rtc.h' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rtc_timer' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/rtc.h' line='89' column='1' id='01786452'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='fe3acb42' visibility='default' filepath='include/linux/rtc.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='period' type-id='fbc017ef' visibility='default' filepath='include/linux/rtc.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='func' type-id='85dc754e' visibility='default' filepath='include/linux/rtc.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rtc' type-id='5992ae83' visibility='default' filepath='include/linux/rtc.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='enabled' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='timeu64_t' type-id='d3130597' filepath='include/linux/time64.h' line='9' column='1' id='13afd1c1'/>
+      <pointer-type-def type-id='0506cdd8' size-in-bits='64' id='3b25b30a'/>
+      <pointer-type-def type-id='5abdb7a8' size-in-bits='64' id='ab7ca002'/>
+      <pointer-type-def type-id='2b4e6dbe' size-in-bits='64' id='57d10d30'/>
+      <pointer-type-def type-id='0ad12489' size-in-bits='64' id='d3769ffd'/>
+      <pointer-type-def type-id='415e4835' size-in-bits='64' id='103ef621'/>
+      <pointer-type-def type-id='8edd926b' size-in-bits='64' id='7b683b77'/>
+      <pointer-type-def type-id='23f8b0bd' size-in-bits='64' id='05594c99'/>
+      <pointer-type-def type-id='dad263ec' size-in-bits='64' id='85dc754e'/>
+      <function-type size-in-bits='64' id='dad263ec'>
+        <parameter type-id='5992ae83'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/rtc/hctosys.c' language='LANG_C89'>
+      <function-decl name='rtc_class_open' mangled-name='rtc_class_open' filepath='include/linux/rtc.h' line='189' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_class_open'>
+        <parameter type-id='80f4b756'/>
+        <return type-id='5992ae83'/>
+      </function-decl>
+      <function-decl name='rtc_class_close' mangled-name='rtc_class_close' filepath='include/linux/rtc.h' line='190' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_class_close'>
+        <parameter type-id='5992ae83'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/rtc/lib.c' language='LANG_C89'>
+      <function-decl name='rtc_ktime_to_tm' mangled-name='rtc_ktime_to_tm' filepath='drivers/rtc/lib.c' line='134' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_ktime_to_tm'>
+        <parameter type-id='fbc017ef' name='kt' filepath='drivers/rtc/lib.c' line='134' column='1'/>
+        <return type-id='fa8285d4'/>
+      </function-decl>
+      <class-decl name='rtc_time' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/uapi/linux/rtc.h' line='21' column='1' id='fa8285d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tm_sec' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tm_min' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tm_hour' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tm_mday' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tm_mon' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tm_year' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tm_wday' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='tm_yday' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tm_isdst' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/rtc/nvmem.c' language='LANG_C89'>
+      <class-decl name='nvmem_device' size-in-bits='8576' is-struct='yes' visibility='default' filepath='drivers/nvmem/nvmem.h' line='13' column='1' id='77aad2d1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='drivers/nvmem/nvmem.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/nvmem/nvmem.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='stride' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/nvmem.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7456'>
+          <var-decl name='word_size' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/nvmem.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/nvmem.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7520'>
+          <var-decl name='refcnt' type-id='400fb07b' visibility='default' filepath='drivers/nvmem/nvmem.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='drivers/nvmem/nvmem.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='read_only' type-id='b50a4934' visibility='default' filepath='drivers/nvmem/nvmem.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/nvmem.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='type' type-id='0c30c73e' visibility='default' filepath='drivers/nvmem/nvmem.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='eeprom' type-id='d83a2db1' visibility='default' filepath='drivers/nvmem/nvmem.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='base_dev' type-id='fa0b179b' visibility='default' filepath='drivers/nvmem/nvmem.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='cells' type-id='72f469ec' visibility='default' filepath='drivers/nvmem/nvmem.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='reg_read' type-id='b3e77ef6' visibility='default' filepath='drivers/nvmem/nvmem.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='reg_write' type-id='020bf95f' visibility='default' filepath='drivers/nvmem/nvmem.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='drivers/nvmem/nvmem.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nvmem_config' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/nvmem-provider.h' line='56' column='1' id='945c0b49'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/nvmem-provider.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/nvmem-provider.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/nvmem-provider.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/linux/nvmem-provider.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cells' type-id='ac5f2363' visibility='default' filepath='include/linux/nvmem-provider.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ncells' type-id='95e97e5e' visibility='default' filepath='include/linux/nvmem-provider.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='type' type-id='0c30c73e' visibility='default' filepath='include/linux/nvmem-provider.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read_only' type-id='b50a4934' visibility='default' filepath='include/linux/nvmem-provider.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='root_only' type-id='b50a4934' visibility='default' filepath='include/linux/nvmem-provider.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='no_of_node' type-id='b50a4934' visibility='default' filepath='include/linux/nvmem-provider.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='reg_read' type-id='b3e77ef6' visibility='default' filepath='include/linux/nvmem-provider.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='reg_write' type-id='020bf95f' visibility='default' filepath='include/linux/nvmem-provider.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='size' type-id='95e97e5e' visibility='default' filepath='include/linux/nvmem-provider.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='word_size' type-id='95e97e5e' visibility='default' filepath='include/linux/nvmem-provider.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='stride' type-id='95e97e5e' visibility='default' filepath='include/linux/nvmem-provider.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/nvmem-provider.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='compat' type-id='b50a4934' visibility='default' filepath='include/linux/nvmem-provider.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='base_dev' type-id='fa0b179b' visibility='default' filepath='include/linux/nvmem-provider.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nvmem_cell_info' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/nvmem-consumer.h' line='22' column='1' id='cf20ba04'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/nvmem-consumer.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='f0981eeb' visibility='default' filepath='include/linux/nvmem-consumer.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bytes' type-id='f0981eeb' visibility='default' filepath='include/linux/nvmem-consumer.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bit_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/nvmem-consumer.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nbits' type-id='f0981eeb' visibility='default' filepath='include/linux/nvmem-consumer.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nvmem_type' filepath='include/linux/nvmem-provider.h' line='22' column='1' id='0c30c73e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NVMEM_TYPE_UNKNOWN' value='0'/>
+        <enumerator name='NVMEM_TYPE_EEPROM' value='1'/>
+        <enumerator name='NVMEM_TYPE_OTP' value='2'/>
+        <enumerator name='NVMEM_TYPE_BATTERY_BACKED' value='3'/>
+      </enum-decl>
+      <typedef-decl name='nvmem_reg_read_t' type-id='3ba5153c' filepath='include/linux/nvmem-provider.h' line='17' column='1' id='b3e77ef6'/>
+      <typedef-decl name='nvmem_reg_write_t' type-id='3ba5153c' filepath='include/linux/nvmem-provider.h' line='19' column='1' id='020bf95f'/>
+      <qualified-type-def type-id='cf20ba04' const='yes' id='b254b8db'/>
+      <pointer-type-def type-id='b254b8db' size-in-bits='64' id='ac5f2363'/>
+      <qualified-type-def type-id='945c0b49' const='yes' id='a9ae7f74'/>
+      <pointer-type-def type-id='a9ae7f74' size-in-bits='64' id='7bb280fa'/>
+      <pointer-type-def type-id='dfed847a' size-in-bits='64' id='3ba5153c'/>
+      <pointer-type-def type-id='77aad2d1' size-in-bits='64' id='8179bc49'/>
+      <function-decl name='devm_nvmem_register' mangled-name='devm_nvmem_register' filepath='include/linux/nvmem-provider.h' line='102' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_nvmem_register'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='7bb280fa'/>
+        <return type-id='8179bc49'/>
+      </function-decl>
+      <function-decl name='nvmem_device_read' mangled-name='nvmem_device_read' filepath='include/linux/nvmem-consumer.h' line='73' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvmem_device_read'>
+        <parameter type-id='8179bc49'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='nvmem_device_write' mangled-name='nvmem_device_write' filepath='include/linux/nvmem-consumer.h' line='75' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvmem_device_write'>
+        <parameter type-id='8179bc49'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='dfed847a'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/rtc/rtc-pl030.c' language='LANG_C89'>
+      <class-decl name='rtc_device' size-in-bits='12160' is-struct='yes' visibility='default' filepath='include/linux/rtc.h' line='100' column='1' id='89ae06e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/rtc.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/rtc.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='ops' type-id='b902d9c7' visibility='default' filepath='include/linux/rtc.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='ops_lock' type-id='925167dc' visibility='default' filepath='include/linux/rtc.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='char_dev' type-id='22f86352' visibility='default' filepath='include/linux/rtc.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/rtc.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='irq_data' type-id='7359adad' visibility='default' filepath='include/linux/rtc.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='irq_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/rtc.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='irq_queue' type-id='b5ab048f' visibility='default' filepath='include/linux/rtc.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='async_queue' type-id='5bb9c75d' visibility='default' filepath='include/linux/rtc.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='irq_freq' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9376'>
+          <var-decl name='max_user_freq' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='timerqueue' type-id='ff3c7f20' visibility='default' filepath='include/linux/rtc.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='aie_timer' type-id='01786452' visibility='default' filepath='include/linux/rtc.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='uie_rtctimer' type-id='01786452' visibility='default' filepath='include/linux/rtc.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='pie_timer' type-id='b6993efc' visibility='default' filepath='include/linux/rtc.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='pie_enabled' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='irqwork' type-id='ef9025d0' visibility='default' filepath='include/linux/rtc.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='uie_unsupported' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='set_offset_nsec' type-id='bd54fe1a' visibility='default' filepath='include/linux/rtc.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/linux/rtc.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11720'>
+          <var-decl name='nvram_old_abi' type-id='b50a4934' visibility='default' filepath='include/linux/rtc.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='nvram' type-id='c0e2acc9' visibility='default' filepath='include/linux/rtc.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='range_min' type-id='1afd27ac' visibility='default' filepath='include/linux/rtc.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='range_max' type-id='13afd1c1' visibility='default' filepath='include/linux/rtc.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='start_secs' type-id='1afd27ac' visibility='default' filepath='include/linux/rtc.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='offset_secs' type-id='1afd27ac' visibility='default' filepath='include/linux/rtc.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='set_start_time' type-id='b50a4934' visibility='default' filepath='include/linux/rtc.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rtc_class_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/rtc.h' line='75' column='1' id='fd1fa73c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ioctl' type-id='05594c99' visibility='default' filepath='include/linux/rtc.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read_time' type-id='57d10d30' visibility='default' filepath='include/linux/rtc.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_time' type-id='57d10d30' visibility='default' filepath='include/linux/rtc.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read_alarm' type-id='d3769ffd' visibility='default' filepath='include/linux/rtc.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_alarm' type-id='d3769ffd' visibility='default' filepath='include/linux/rtc.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='proc' type-id='103ef621' visibility='default' filepath='include/linux/rtc.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='alarm_irq_enable' type-id='7b683b77' visibility='default' filepath='include/linux/rtc.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='read_offset' type-id='ab7ca002' visibility='default' filepath='include/linux/rtc.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_offset' type-id='3b25b30a' visibility='default' filepath='include/linux/rtc.h' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rtc_time' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/uapi/linux/rtc.h' line='21' column='1' id='fa8285d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tm_sec' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tm_min' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tm_hour' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tm_mday' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tm_mon' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tm_year' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tm_wday' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='tm_yday' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tm_isdst' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rtc_wkalrm' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/rtc.h' line='37' column='1' id='e05187bf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enabled' type-id='002ac4a6' visibility='default' filepath='include/uapi/linux/rtc.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='pending' type-id='002ac4a6' visibility='default' filepath='include/uapi/linux/rtc.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='time' type-id='fa8285d4' visibility='default' filepath='include/uapi/linux/rtc.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rtc_timer' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/rtc.h' line='89' column='1' id='01786452'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='fe3acb42' visibility='default' filepath='include/linux/rtc.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='period' type-id='fbc017ef' visibility='default' filepath='include/linux/rtc.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='func' type-id='85dc754e' visibility='default' filepath='include/linux/rtc.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rtc' type-id='5992ae83' visibility='default' filepath='include/linux/rtc.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='enabled' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='timeu64_t' type-id='d3130597' filepath='include/linux/time64.h' line='9' column='1' id='13afd1c1'/>
+      <qualified-type-def type-id='fd1fa73c' const='yes' id='aed6b757'/>
+      <pointer-type-def type-id='aed6b757' size-in-bits='64' id='b902d9c7'/>
+      <pointer-type-def type-id='0506cdd8' size-in-bits='64' id='3b25b30a'/>
+      <pointer-type-def type-id='5abdb7a8' size-in-bits='64' id='ab7ca002'/>
+      <pointer-type-def type-id='2b4e6dbe' size-in-bits='64' id='57d10d30'/>
+      <pointer-type-def type-id='0ad12489' size-in-bits='64' id='d3769ffd'/>
+      <pointer-type-def type-id='415e4835' size-in-bits='64' id='103ef621'/>
+      <pointer-type-def type-id='8edd926b' size-in-bits='64' id='7b683b77'/>
+      <pointer-type-def type-id='23f8b0bd' size-in-bits='64' id='05594c99'/>
+      <pointer-type-def type-id='89ae06e3' size-in-bits='64' id='5992ae83'/>
+      <pointer-type-def type-id='fa8285d4' size-in-bits='64' id='2b8e7a42'/>
+      <pointer-type-def type-id='e05187bf' size-in-bits='64' id='6d120807'/>
+      <pointer-type-def type-id='dad263ec' size-in-bits='64' id='85dc754e'/>
+      <function-decl name='amba_request_regions' mangled-name='amba_request_regions' filepath='include/linux/amba/bus.h' line='133' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='amba_request_regions'>
+        <parameter type-id='ddd322c1'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_rtc_allocate_device' mangled-name='devm_rtc_allocate_device' filepath='include/linux/rtc.h' line='173' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_rtc_allocate_device'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='5992ae83'/>
+      </function-decl>
+      <function-decl name='amba_release_regions' mangled-name='amba_release_regions' filepath='include/linux/amba/bus.h' line='134' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='amba_release_regions'>
+        <parameter type-id='ddd322c1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rtc_time64_to_tm' mangled-name='rtc_time64_to_tm' filepath='include/linux/rtc.h' line='25' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_time64_to_tm'>
+        <parameter type-id='1eb56b1e'/>
+        <parameter type-id='2b8e7a42'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rtc_tm_to_time64' mangled-name='rtc_tm_to_time64' filepath='include/linux/rtc.h' line='24' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_tm_to_time64'>
+        <parameter type-id='2b8e7a42'/>
+        <return type-id='1eb56b1e'/>
+      </function-decl>
+      <function-decl name='rtc_valid_tm' mangled-name='rtc_valid_tm' filepath='include/linux/rtc.h' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_valid_tm'>
+        <parameter type-id='2b8e7a42'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='0506cdd8'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5abdb7a8'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='3ccc2590'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2b4e6dbe'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='2b8e7a42'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ad12489'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='6d120807'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='415e4835'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='f8dc9df0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8edd926b'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='23f8b0bd'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/rtc/rtc-pl031.c' language='LANG_C89'>
+      <function-decl name='devm_kmemdup' mangled-name='devm_kmemdup' filepath='include/linux/device.h' line='972' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_kmemdup'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='dev_pm_set_wake_irq' mangled-name='dev_pm_set_wake_irq' filepath='include/linux/pm_wakeirq.h' line='19' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_set_wake_irq'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_clear_wake_irq' mangled-name='dev_pm_clear_wake_irq' filepath='include/linux/pm_wakeirq.h' line='22' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_clear_wake_irq'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_bin2bcd' mangled-name='_bin2bcd' filepath='include/linux/bcd.h' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_bin2bcd'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='002ac4a6'/>
+      </function-decl>
+      <function-decl name='_bcd2bin' mangled-name='_bcd2bin' filepath='include/linux/bcd.h' line='20' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_bcd2bin'>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='rtc_year_days' mangled-name='rtc_year_days' filepath='include/linux/rtc.h' line='22' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_year_days'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rtc_update_irq' mangled-name='rtc_update_irq' filepath='include/linux/rtc.h' line='186' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_update_irq'>
+        <parameter type-id='5992ae83'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/scsi/scsi.c' language='LANG_C89'>
+      <function-decl name='scsi_device_get' mangled-name='scsi_device_get' filepath='drivers/scsi/scsi.c' line='531' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_device_get'>
+        <parameter type-id='eb572b74' name='sdev' filepath='drivers/scsi/scsi.c' line='531' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='scsi_device_put' mangled-name='scsi_device_put' filepath='drivers/scsi/scsi.c' line='556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_device_put'>
+        <parameter type-id='eb572b74' name='sdev' filepath='drivers/scsi/scsi.c' line='556' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__scsi_device_lookup_by_target' mangled-name='__scsi_device_lookup_by_target' filepath='drivers/scsi/scsi.c' line='655' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__scsi_device_lookup_by_target'>
+        <parameter type-id='4cb5819d' name='starget' filepath='drivers/scsi/scsi.c' line='655' column='1'/>
+        <parameter type-id='91ce1af9' name='lun' filepath='drivers/scsi/scsi.c' line='656' column='1'/>
+        <return type-id='eb572b74'/>
+      </function-decl>
+      <pointer-type-def type-id='e07b5dbe' size-in-bits='64' id='eb572b74'/>
+      <pointer-type-def type-id='148c2b1d' size-in-bits='64' id='4cb5819d'/>
+      <class-decl name='scsi_device' size-in-bits='19456' is-struct='yes' visibility='default' filepath='include/scsi/scsi_device.h' line='102' column='1' id='e07b5dbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='host' type-id='a970a64c' visibility='default' filepath='include/scsi/scsi_device.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='request_queue' type-id='e7d2a5fd' visibility='default' filepath='include/scsi/scsi_device.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='siblings' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='same_target_siblings' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='device_busy' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='device_blocked' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='list_lock' type-id='fb4018a0' visibility='default' filepath='include/scsi/scsi_device.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cmd_list' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='starved_entry' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='queue_depth' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_device.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='max_queue_depth' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_device.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='last_queue_full_depth' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_device.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='816'>
+          <var-decl name='last_queue_full_count' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_device.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='last_queue_full_time' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_device.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='queue_ramp_up_period' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_device.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='last_queue_ramp_up' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_device.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='channel' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='lun' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_device.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='manufacturer' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='sector_size' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hostdata' type-id='eaa32e2f' visibility='default' filepath='include/scsi/scsi_device.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='type' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_device.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1288'>
+          <var-decl name='scsi_level' type-id='a84c031d' visibility='default' filepath='include/scsi/scsi_device.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1296'>
+          <var-decl name='inq_periph_qual' type-id='a84c031d' visibility='default' filepath='include/scsi/scsi_device.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='inquiry_mutex' type-id='925167dc' visibility='default' filepath='include/scsi/scsi_device.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='inquiry_len' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_device.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='inquiry' type-id='cf536864' visibility='default' filepath='include/scsi/scsi_device.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='vendor' type-id='80f4b756' visibility='default' filepath='include/scsi/scsi_device.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='model' type-id='80f4b756' visibility='default' filepath='include/scsi/scsi_device.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='rev' type-id='80f4b756' visibility='default' filepath='include/scsi/scsi_device.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='vpd_pg83' type-id='2b88fa00' visibility='default' filepath='include/scsi/scsi_device.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='vpd_pg80' type-id='2b88fa00' visibility='default' filepath='include/scsi/scsi_device.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='current_tag' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_device.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sdev_target' type-id='4cb5819d' visibility='default' filepath='include/scsi/scsi_device.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='sdev_bflags' type-id='ec838379' visibility='default' filepath='include/scsi/scsi_device.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='eh_timeout' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='removable' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='changed' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='busy' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='lockable' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='locked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='borken' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='disconnect' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='soft_reset' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='sdtr' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='wdtr' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='ppr' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='tagged_supported' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='simple_tags' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='was_reset' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='expecting_cc_ua' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='use_10_for_rw' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='use_10_for_ms' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='set_dbd_for_ms' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='no_report_opcodes' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='no_write_same' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='use_16_for_rw' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='skip_ms_page_8' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='skip_ms_page_3f' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='skip_vpd_pages' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='try_vpd_pages' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='use_192_bytes_for_3f' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='no_start_on_add' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='allow_restart' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='manage_start_stop' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='start_stop_pwr_cond' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='no_uld_attach' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='select_no_atn' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='fix_capacity' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='guess_capacity' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='retry_hwerror' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='last_sector_bug' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='no_read_disc_info' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='no_read_capacity_16' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='try_rc_10_first' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='security_supported' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='is_visible' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='wce_default_on' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='no_dif' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='broken_fua' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='lun_in_cdb' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='unmap_limit_for_ws' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='rpm_autosuspend' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='disk_events_disable_depth' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='supported_events' type-id='f066dd3c' visibility='default' filepath='include/scsi/scsi_device.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='pending_events' type-id='f066dd3c' visibility='default' filepath='include/scsi/scsi_device.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='event_work' type-id='ef9025d0' visibility='default' filepath='include/scsi/scsi_device.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='max_device_blocked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='iorequest_cnt' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='iodone_cnt' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='ioerr_cnt' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='sdev_gendev' type-id='66e487eb' visibility='default' filepath='include/scsi/scsi_device.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='sdev_dev' type-id='66e487eb' visibility='default' filepath='include/scsi/scsi_device.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17856'>
+          <var-decl name='ew' type-id='53f7ea88' visibility='default' filepath='include/scsi/scsi_device.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18240'>
+          <var-decl name='requeue_work' type-id='ef9025d0' visibility='default' filepath='include/scsi/scsi_device.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18624'>
+          <var-decl name='handler' type-id='0a0775b5' visibility='default' filepath='include/scsi/scsi_device.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18688'>
+          <var-decl name='handler_data' type-id='eaa32e2f' visibility='default' filepath='include/scsi/scsi_device.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18752'>
+          <var-decl name='access_state' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_device.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18816'>
+          <var-decl name='state_mutex' type-id='925167dc' visibility='default' filepath='include/scsi/scsi_device.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19072'>
+          <var-decl name='sdev_state' type-id='7e4b2e83' visibility='default' filepath='include/scsi/scsi_device.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19136'>
+          <var-decl name='quiesced_by' type-id='f23e2572' visibility='default' filepath='include/scsi/scsi_device.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19200'>
+          <var-decl name='sdev_data' type-id='c99b5ecd' visibility='default' filepath='include/scsi/scsi_device.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19200'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_device.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19264'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_device.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_device.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19392'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_device.h' line='238' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_target' size-in-bits='8064' is-struct='yes' visibility='default' filepath='include/scsi/scsi_device.h' line='287' column='1' id='148c2b1d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='starget_sdev_user' type-id='eb572b74' visibility='default' filepath='include/scsi/scsi_device.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='siblings' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='devices' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/scsi/scsi_device.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='reap_ref' type-id='400fb07b' visibility='default' filepath='include/scsi/scsi_device.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='channel' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='create' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='single_lun' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='pdt_1f_for_no_lun' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='no_report_luns' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='expecting_lun_change' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='target_busy' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7840'>
+          <var-decl name='target_blocked' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='can_queue' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7904'>
+          <var-decl name='max_target_blocked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='scsi_level' type-id='a84c031d' visibility='default' filepath='include/scsi/scsi_device.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7968'>
+          <var-decl name='state' type-id='0e1b99c8' visibility='default' filepath='include/scsi/scsi_device.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='hostdata' type-id='eaa32e2f' visibility='default' filepath='include/scsi/scsi_device.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='starget_data' type-id='c99b5ecd' visibility='default' filepath='include/scsi/scsi_device.h' line='322' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='83cec606' size-in-bits='64' id='a970a64c'/>
+      <enum-decl name='scsi_device_state' filepath='include/scsi/scsi_device.h' line='37' column='1' id='7e4b2e83'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SDEV_CREATED' value='1'/>
+        <enumerator name='SDEV_RUNNING' value='2'/>
+        <enumerator name='SDEV_CANCEL' value='3'/>
+        <enumerator name='SDEV_DEL' value='4'/>
+        <enumerator name='SDEV_QUIESCE' value='5'/>
+        <enumerator name='SDEV_OFFLINE' value='6'/>
+        <enumerator name='SDEV_TRANSPORT_OFFLINE' value='7'/>
+        <enumerator name='SDEV_BLOCK' value='8'/>
+        <enumerator name='SDEV_CREATED_BLOCK' value='9'/>
+      </enum-decl>
+      <enum-decl name='scsi_target_state' filepath='include/scsi/scsi_device.h' line='274' column='1' id='0e1b99c8'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='STARGET_CREATED' value='1'/>
+        <enumerator name='STARGET_RUNNING' value='2'/>
+        <enumerator name='STARGET_REMOVE' value='3'/>
+        <enumerator name='STARGET_CREATED_REMOVE' value='4'/>
+        <enumerator name='STARGET_DEL' value='5'/>
+      </enum-decl>
+      <pointer-type-def type-id='4e8a6f85' size-in-bits='64' id='0a0775b5'/>
+      <pointer-type-def type-id='4399e1b2' size-in-bits='64' id='2b88fa00'/>
+      <class-decl name='execute_work' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='174' column='1' id='53f7ea88'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/workqueue.h' line='175' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='blist_flags_t' type-id='d3130597' filepath='include/scsi/scsi_device.h' line='19' column='1' id='ec838379'/>
+      <class-decl name='Scsi_Host' size-in-bits='19008' is-struct='yes' visibility='default' filepath='include/scsi/scsi_host.h' line='533' column='1' id='83cec606'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__devices' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_host.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__targets' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_host.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='starved_list' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_host.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='default_lock' type-id='fb4018a0' visibility='default' filepath='include/scsi/scsi_host.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='host_lock' type-id='cff2d845' visibility='default' filepath='include/scsi/scsi_host.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='scan_mutex' type-id='925167dc' visibility='default' filepath='include/scsi/scsi_host.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='eh_cmd_q' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_host.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ehandler' type-id='f23e2572' visibility='default' filepath='include/scsi/scsi_host.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='eh_action' type-id='389faaf7' visibility='default' filepath='include/scsi/scsi_host.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='host_wait' type-id='b5ab048f' visibility='default' filepath='include/scsi/scsi_host.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hostt' type-id='36265581' visibility='default' filepath='include/scsi/scsi_host.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='transportt' type-id='498f47da' visibility='default' filepath='include/scsi/scsi_host.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='tag_set' type-id='651086d8' visibility='default' filepath='include/scsi/scsi_host.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='host_busy' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_host.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='host_blocked' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_host.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='host_failed' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='host_eh_scheduled' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='host_no' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2784'>
+          <var-decl name='eh_deadline' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='last_reset' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='max_channel' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='max_id' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='max_lun' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='unique_id' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='max_cmd_len' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='this_id' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='can_queue' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='cmd_per_lun' type-id='a2185560' visibility='default' filepath='include/scsi/scsi_host.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3152'>
+          <var-decl name='sg_tablesize' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3168'>
+          <var-decl name='sg_prot_tablesize' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='max_sectors' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3232'>
+          <var-decl name='max_segment_size' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='dma_boundary' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='virt_boundary_mask' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='nr_hw_queues' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='active_mode' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='unchecked_isa_dma' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='host_self_blocked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='reverse_ordering' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='tmf_in_progress' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='async_scan' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='eh_noresume' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='no_write_same' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='use_cmd_list' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='short_inquiry' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='no_scsi2_lun_in_cdb' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3440'>
+          <var-decl name='work_q_name' type-id='664ac0b7' visibility='default' filepath='include/scsi/scsi_host.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='work_q' type-id='242e3d19' visibility='default' filepath='include/scsi/scsi_host.h' line='662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='tmf_work_q' type-id='242e3d19' visibility='default' filepath='include/scsi/scsi_host.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='max_host_blocked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3808'>
+          <var-decl name='prot_capabilities' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='prot_guard_type' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_host.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='base' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='io_port' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='n_io_port' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_host.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4040'>
+          <var-decl name='dma_channel' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_host.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4064'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='shost_state' type-id='e41e14c7' visibility='default' filepath='include/scsi/scsi_host.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='shost_gendev' type-id='66e487eb' visibility='default' filepath='include/scsi/scsi_host.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='shost_dev' type-id='66e487eb' visibility='default' filepath='include/scsi/scsi_host.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18880'>
+          <var-decl name='shost_data' type-id='eaa32e2f' visibility='default' filepath='include/scsi/scsi_host.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18944'>
+          <var-decl name='dma_dev' type-id='fa0b179b' visibility='default' filepath='include/scsi/scsi_host.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19008'>
+          <var-decl name='hostdata' type-id='c99b5ecd' visibility='default' filepath='include/scsi/scsi_host.h' line='708' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_device_handler' is-struct='yes' visibility='default' is-declaration-only='yes' id='4e8a6f85'/>
+      <class-decl name='scsi_vpd' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/scsi/scsi_device.h' line='96' column='1' id='4399e1b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/scsi/scsi_device.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_device.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='data' type-id='5e6516ee' visibility='default' filepath='include/scsi/scsi_device.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='scsi_host_state' filepath='include/scsi/scsi_host.h' line='523' column='1' id='e41e14c7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SHOST_CREATED' value='1'/>
+        <enumerator name='SHOST_RUNNING' value='2'/>
+        <enumerator name='SHOST_CANCEL' value='3'/>
+        <enumerator name='SHOST_DEL' value='4'/>
+        <enumerator name='SHOST_RECOVERY' value='5'/>
+        <enumerator name='SHOST_CANCEL_RECOVERY' value='6'/>
+        <enumerator name='SHOST_DEL_RECOVERY' value='7'/>
+      </enum-decl>
+      <pointer-type-def type-id='1a0d5389' size-in-bits='64' id='36265581'/>
+      <pointer-type-def type-id='0e15337c' size-in-bits='64' id='498f47da'/>
+      <class-decl name='scsi_host_template' size-in-bits='3008' is-struct='yes' visibility='default' filepath='include/scsi/scsi_host.h' line='46' column='1' id='1a0d5389'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/scsi/scsi_host.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/scsi/scsi_host.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='info' type-id='91464e34' visibility='default' filepath='include/scsi/scsi_host.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ioctl' type-id='73550cb4' visibility='default' filepath='include/scsi/scsi_host.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='compat_ioctl' type-id='73550cb4' visibility='default' filepath='include/scsi/scsi_host.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='queuecommand' type-id='5e9804d5' visibility='default' filepath='include/scsi/scsi_host.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='commit_rqs' type-id='fddad99e' visibility='default' filepath='include/scsi/scsi_host.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='eh_abort_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='eh_device_reset_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='eh_target_reset_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='eh_bus_reset_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='eh_host_reset_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='slave_alloc' type-id='4fae2c98' visibility='default' filepath='include/scsi/scsi_host.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='slave_configure' type-id='4fae2c98' visibility='default' filepath='include/scsi/scsi_host.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='slave_destroy' type-id='38c41fe1' visibility='default' filepath='include/scsi/scsi_host.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='target_alloc' type-id='55bb6559' visibility='default' filepath='include/scsi/scsi_host.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='target_destroy' type-id='36e7f8ac' visibility='default' filepath='include/scsi/scsi_host.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='scan_finished' type-id='07445d6c' visibility='default' filepath='include/scsi/scsi_host.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='scan_start' type-id='7fc5dc19' visibility='default' filepath='include/scsi/scsi_host.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='change_queue_depth' type-id='38313007' visibility='default' filepath='include/scsi/scsi_host.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='map_queues' type-id='1a9d259c' visibility='default' filepath='include/scsi/scsi_host.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='bios_param' type-id='4c72f20d' visibility='default' filepath='include/scsi/scsi_host.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='unlock_native_capacity' type-id='38c41fe1' visibility='default' filepath='include/scsi/scsi_host.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='show_info' type-id='b9e33ab0' visibility='default' filepath='include/scsi/scsi_host.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='write_info' type-id='ff0f7577' visibility='default' filepath='include/scsi/scsi_host.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='eh_timed_out' type-id='7114e104' visibility='default' filepath='include/scsi/scsi_host.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='host_reset' type-id='203d9a9b' visibility='default' filepath='include/scsi/scsi_host.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='proc_name' type-id='80f4b756' visibility='default' filepath='include/scsi/scsi_host.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='proc_dir' type-id='d077e928' visibility='default' filepath='include/scsi/scsi_host.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='can_queue' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='this_id' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='sg_tablesize' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1936'>
+          <var-decl name='sg_prot_tablesize' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='max_sectors' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='max_segment_size' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dma_boundary' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='virt_boundary_mask' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='cmd_per_lun' type-id='a2185560' visibility='default' filepath='include/scsi/scsi_host.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2192'>
+          <var-decl name='present' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_host.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='tag_alloc_policy' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='track_queue_depth' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='supported_mode' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='unchecked_isa_dma' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='emulated' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='skip_settle_delay' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='no_write_same' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='force_blk_mq' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='max_host_blocked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='shost_attrs' type-id='aa9eb300' visibility='default' filepath='include/scsi/scsi_host.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='sdev_attrs' type-id='aa9eb300' visibility='default' filepath='include/scsi/scsi_host.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='sdev_groups' type-id='c97de1ac' visibility='default' filepath='include/scsi/scsi_host.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='vendor_id' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='cmd_size' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='cmd_pool' type-id='4783492e' visibility='default' filepath='include/scsi/scsi_host.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='rpm_autosuspend_delay' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='497' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_transport_template' is-struct='yes' visibility='default' is-declaration-only='yes' id='0e15337c'/>
+      <pointer-type-def type-id='369a41ea' size-in-bits='64' id='91464e34'/>
+      <pointer-type-def type-id='89a2612a' size-in-bits='64' id='aa9eb300'/>
+      <pointer-type-def type-id='291d9c02' size-in-bits='64' id='7114e104'/>
+      <pointer-type-def type-id='fb9c833a' size-in-bits='64' id='1a9d259c'/>
+      <pointer-type-def type-id='20affdf3' size-in-bits='64' id='ff0f7577'/>
+      <pointer-type-def type-id='d2f6c36f' size-in-bits='64' id='203d9a9b'/>
+      <pointer-type-def type-id='d15eda11' size-in-bits='64' id='5e9804d5'/>
+      <pointer-type-def type-id='9423c42a' size-in-bits='64' id='07445d6c'/>
+      <pointer-type-def type-id='97ca9b12' size-in-bits='64' id='0786894c'/>
+      <pointer-type-def type-id='53efb49e' size-in-bits='64' id='4fae2c98'/>
+      <pointer-type-def type-id='8ff31849' size-in-bits='64' id='4c72f20d'/>
+      <pointer-type-def type-id='686e5e33' size-in-bits='64' id='38313007'/>
+      <pointer-type-def type-id='ec8e7b62' size-in-bits='64' id='73550cb4'/>
+      <pointer-type-def type-id='af8a50f5' size-in-bits='64' id='55bb6559'/>
+      <pointer-type-def type-id='f680e13e' size-in-bits='64' id='b9e33ab0'/>
+      <pointer-type-def type-id='94982f58' size-in-bits='64' id='4783492e'/>
+      <pointer-type-def type-id='d7413fe5' size-in-bits='64' id='7fc5dc19'/>
+      <pointer-type-def type-id='0457ac44' size-in-bits='64' id='fddad99e'/>
+      <pointer-type-def type-id='9102a0ad' size-in-bits='64' id='38c41fe1'/>
+      <pointer-type-def type-id='ed6fc6ea' size-in-bits='64' id='36e7f8ac'/>
+      <class-decl name='scsi_host_cmd_pool' is-struct='yes' visibility='default' is-declaration-only='yes' id='94982f58'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/scsi/scsi_error.c' language='LANG_C89'>
+      <class-decl name='scsi_sense_hdr' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/scsi/scsi_common.h' line='50' column='1' id='d6746ce3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='response_code' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='sense_key' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='asc' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='ascq' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='byte4' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='byte5' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='byte6' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='additional_length' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_transport_template' size-in-bits='2816' is-struct='yes' visibility='default' filepath='include/scsi/scsi_transport.h' line='16' column='1' id='0e15337d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='host_attrs' type-id='2af4292a' visibility='default' filepath='include/scsi/scsi_transport.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='target_attrs' type-id='2af4292a' visibility='default' filepath='include/scsi/scsi_transport.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='device_attrs' type-id='2af4292a' visibility='default' filepath='include/scsi/scsi_transport.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='user_scan' type-id='3b3fe200' visibility='default' filepath='include/scsi/scsi_transport.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='device_size' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_transport.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='device_private_offset' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_transport.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='target_size' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_transport.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='target_private_offset' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_transport.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='host_size' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_transport.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='create_work_queue' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_transport.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='eh_strategy_handler' type-id='7fc5dc19' visibility='default' filepath='include/scsi/scsi_transport.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='transport_container' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/transport_class.h' line='56' column='1' id='2af4292a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ac' type-id='52bea74f' visibility='default' filepath='include/linux/transport_class.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='statistics' type-id='8ff9530e' visibility='default' filepath='include/linux/transport_class.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='attribute_container' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/attribute_container.h' line='16' column='1' id='52bea74f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/attribute_container.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='containers' type-id='6160a6ce' visibility='default' filepath='include/linux/attribute_container.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='class' type-id='67aca04f' visibility='default' filepath='include/linux/attribute_container.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='grp' type-id='8ff9530e' visibility='default' filepath='include/linux/attribute_container.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='attrs' type-id='aa9eb300' visibility='default' filepath='include/linux/attribute_container.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='match' type-id='341171ef' visibility='default' filepath='include/linux/attribute_container.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/attribute_container.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='uint' type-id='f0981eeb' filepath='include/linux/types.h' line='92' column='1' id='6e160b14'/>
+      <class-decl name='scsi_device_handler' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/scsi/scsi_dh.h' line='48' column='1' id='4e8a6f86'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_dh.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/scsi/scsi_dh.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/scsi/scsi_dh.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='check_sense' type-id='a263aa4a' visibility='default' filepath='include/scsi/scsi_dh.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='attach' type-id='4fae2c98' visibility='default' filepath='include/scsi/scsi_dh.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='detach' type-id='38c41fe1' visibility='default' filepath='include/scsi/scsi_dh.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='activate' type-id='81d19a12' visibility='default' filepath='include/scsi/scsi_dh.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='prep_fn' type-id='04d17276' visibility='default' filepath='include/scsi/scsi_dh.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_params' type-id='b25d7387' visibility='default' filepath='include/scsi/scsi_dh.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rescan' type-id='38c41fe1' visibility='default' filepath='include/scsi/scsi_dh.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='activate_complete' type-id='1ed1e4cd' filepath='include/scsi/scsi_dh.h' line='47' column='1' id='0b6eba4d'/>
+      <class-decl name='scsi_eh_save' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/scsi/scsi_eh.h' line='32' column='1' id='2ee43d37'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='result' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_eh.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='resid_len' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_eh.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='eh_eflags' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_eh.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='data_direction' type-id='eea6b025' visibility='default' filepath='include/scsi/scsi_eh.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='underflow' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_eh.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='cmd_len' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_eh.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='prot_op' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_eh.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cmnd' type-id='cf536864' visibility='default' filepath='include/scsi/scsi_eh.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sdb' type-id='9f8b0d0f' visibility='default' filepath='include/scsi/scsi_eh.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='eh_cmnd' type-id='92a46553' visibility='default' filepath='include/scsi/scsi_eh.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sense_sgl' type-id='663acc25' visibility='default' filepath='include/scsi/scsi_eh.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='52bea74f' size-in-bits='64' id='3257bfe7'/>
+      <pointer-type-def type-id='6831a786' size-in-bits='64' id='3b3fe200'/>
+      <pointer-type-def type-id='1120d7bb' size-in-bits='64' id='341171ef'/>
+      <pointer-type-def type-id='d591777b' size-in-bits='64' id='b25d7387'/>
+      <pointer-type-def type-id='08decef0' size-in-bits='64' id='a263aa4a'/>
+      <pointer-type-def type-id='1d3d5bb0' size-in-bits='64' id='81d19a12'/>
+      <pointer-type-def type-id='4e8a6f86' size-in-bits='64' id='0a0775b6'/>
+      <pointer-type-def type-id='2ee43d37' size-in-bits='64' id='075d8b9f'/>
+      <pointer-type-def type-id='d6746ce3' size-in-bits='64' id='991b8213'/>
+      <pointer-type-def type-id='0e15337d' size-in-bits='64' id='498f47db'/>
+      <pointer-type-def type-id='f7146e24' size-in-bits='64' id='04d17276'/>
+      <pointer-type-def type-id='2922fb19' size-in-bits='64' id='1ed1e4cd'/>
+      <function-decl name='scsi_normalize_sense' mangled-name='scsi_normalize_sense' filepath='include/scsi/scsi_common.h' line='69' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_normalize_sense'>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='991b8213'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='scsi_eh_prep_cmnd' mangled-name='scsi_eh_prep_cmnd' filepath='drivers/scsi/scsi_error.c' line='953' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_eh_prep_cmnd'>
+        <parameter type-id='0b8718c0' name='scmd' filepath='drivers/scsi/scsi_error.c' line='953' column='1'/>
+        <parameter type-id='075d8b9f' name='ses' filepath='drivers/scsi/scsi_error.c' line='953' column='1'/>
+        <parameter type-id='cf536864' name='cmnd' filepath='drivers/scsi/scsi_error.c' line='954' column='1'/>
+        <parameter type-id='95e97e5e' name='cmnd_size' filepath='drivers/scsi/scsi_error.c' line='954' column='1'/>
+        <parameter type-id='f0981eeb' name='sense_bytes' filepath='drivers/scsi/scsi_error.c' line='954' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_eh_restore_cmnd' mangled-name='scsi_eh_restore_cmnd' filepath='drivers/scsi/scsi_error.c' line='1024' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_eh_restore_cmnd'>
+        <parameter type-id='0b8718c0' name='scmd' filepath='drivers/scsi/scsi_error.c' line='1024' column='1'/>
+        <parameter type-id='075d8b9f' name='ses' filepath='drivers/scsi/scsi_error.c' line='1024' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_report_device_reset' mangled-name='scsi_report_device_reset' filepath='drivers/scsi/scsi_error.c' line='2305' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_report_device_reset'>
+        <parameter type-id='a970a64c' name='shost' filepath='drivers/scsi/scsi_error.c' line='2305' column='1'/>
+        <parameter type-id='95e97e5e' name='channel' filepath='drivers/scsi/scsi_error.c' line='2305' column='1'/>
+        <parameter type-id='95e97e5e' name='target' filepath='drivers/scsi/scsi_error.c' line='2305' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_sense_desc_find' mangled-name='scsi_sense_desc_find' filepath='include/scsi/scsi_common.h' line='75' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_sense_desc_find'>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='354f7eb9'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='6831a786'>
+        <parameter type-id='a970a64c'/>
+        <parameter type-id='6e160b14'/>
+        <parameter type-id='6e160b14'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1120d7bb'>
+        <parameter type-id='3257bfe7'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d591777b'>
+        <parameter type-id='eb572b74'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08decef0'>
+        <parameter type-id='eb572b74'/>
+        <parameter type-id='991b8213'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1d3d5bb0'>
+        <parameter type-id='eb572b74'/>
+        <parameter type-id='0b6eba4d'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f7146e24'>
+        <parameter type-id='eb572b74'/>
+        <parameter type-id='3dad1a48'/>
+        <return type-id='f4e2facd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2922fb19'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='fe7ab802' size-in-bits='64' id='0b8718c0'/>
+      <class-decl name='scsi_data_buffer' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='36' column='1' id='9f8b0d0f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='table' type-id='c59e4f4c' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='length' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='128' id='92a46553'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <class-decl name='scsi_cmnd' size-in-bits='3904' is-struct='yes' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='68' column='1' id='fe7ab802'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='req' type-id='dec7ed8d' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='device' type-id='eb572b74' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='eh_entry' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='abort_work' type-id='5ad6e0ef' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='eh_eflags' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='jiffies_at_alloc' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='retries' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='allowed' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='prot_op' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2184'>
+          <var-decl name='prot_type' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2192'>
+          <var-decl name='prot_flags' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='cmd_len' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='sc_data_direction' type-id='eea6b025' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='cmnd' type-id='cf536864' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='sdb' type-id='9f8b0d0f' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='prot_sdb' type-id='8502fa27' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='underflow' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='transfersize' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='request' type-id='3dad1a48' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='sense_buffer' type-id='cf536864' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='scsi_done' type-id='466c873d' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='SCp' type-id='fd44f8bd' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='host_scribble' type-id='cf536864' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='result' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='tag' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='149' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9f8b0d0f' size-in-bits='64' id='8502fa27'/>
+      <class-decl name='scsi_pointer' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='42' column='1' id='fd44f8bd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='26a90f95' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='this_residual' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buffer' type-id='bf3ef905' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='buffers_residual' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dma_handle' type-id='cf29c9b3' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='Status' type-id='e024ff18' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='Message' type-id='e024ff18' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='have_data_in' type-id='e024ff18' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sent_command' type-id='e024ff18' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='phase' type-id='e024ff18' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_request' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/scsi/scsi_request.h' line='9' column='1' id='dec7ed8d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__cmd' type-id='92a46553' visibility='default' filepath='include/scsi/scsi_request.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cmd' type-id='cf536864' visibility='default' filepath='include/scsi/scsi_request.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cmd_len' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_request.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='result' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_request.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sense_len' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_request.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='resid_len' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_request.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='retries' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_request.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sense' type-id='eaa32e2f' visibility='default' filepath='include/scsi/scsi_request.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='57109d59' size-in-bits='64' id='466c873d'/>
+      <qualified-type-def type-id='95e97e5e' volatile='yes' id='e024ff18'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/scsi/scsi_ioctl.c' language='LANG_C89'>
+      <function-decl name='scsi_ioctl' mangled-name='scsi_ioctl' filepath='drivers/scsi/scsi_ioctl.c' line='202' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_ioctl'>
+        <parameter type-id='eb572b74' name='sdev' filepath='drivers/scsi/scsi_ioctl.c' line='202' column='1'/>
+        <parameter type-id='95e97e5e' name='cmd' filepath='drivers/scsi/scsi_ioctl.c' line='202' column='1'/>
+        <parameter type-id='eaa32e2f' name='arg' filepath='drivers/scsi/scsi_ioctl.c' line='202' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='scsi_ioctl_block_when_processing_errors' mangled-name='scsi_ioctl_block_when_processing_errors' filepath='drivers/scsi/scsi_ioctl.c' line='280' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_ioctl_block_when_processing_errors'>
+        <parameter type-id='eb572b74' name='sdev' filepath='drivers/scsi/scsi_ioctl.c' line='280' column='1'/>
+        <parameter type-id='95e97e5e' name='cmd' filepath='drivers/scsi/scsi_ioctl.c' line='280' column='1'/>
+        <parameter type-id='b50a4934' name='ndelay' filepath='drivers/scsi/scsi_ioctl.c' line='281' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='scsi_block_when_processing_errors' mangled-name='scsi_block_when_processing_errors' filepath='include/scsi/scsi_eh.h' line='17' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_block_when_processing_errors'>
+        <parameter type-id='eb572b74'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/scsi/scsi_lib.c' language='LANG_C89'>
+      <function-decl name='__scsi_execute' mangled-name='__scsi_execute' filepath='drivers/scsi/scsi_lib.c' line='248' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__scsi_execute'>
+        <parameter type-id='eb572b74' name='sdev' filepath='drivers/scsi/scsi_lib.c' line='248' column='1'/>
+        <parameter type-id='354f7eb9' name='cmd' filepath='drivers/scsi/scsi_lib.c' line='248' column='1'/>
+        <parameter type-id='95e97e5e' name='data_direction' filepath='drivers/scsi/scsi_lib.c' line='249' column='1'/>
+        <parameter type-id='eaa32e2f' name='buffer' filepath='drivers/scsi/scsi_lib.c' line='249' column='1'/>
+        <parameter type-id='f0981eeb' name='bufflen' filepath='drivers/scsi/scsi_lib.c' line='249' column='1'/>
+        <parameter type-id='cf536864' name='sense' filepath='drivers/scsi/scsi_lib.c' line='250' column='1'/>
+        <parameter type-id='991b8213' name='sshdr' filepath='drivers/scsi/scsi_lib.c' line='250' column='1'/>
+        <parameter type-id='95e97e5e' name='timeout' filepath='drivers/scsi/scsi_lib.c' line='251' column='1'/>
+        <parameter type-id='95e97e5e' name='retries' filepath='drivers/scsi/scsi_lib.c' line='251' column='1'/>
+        <parameter type-id='91ce1af9' name='flags' filepath='drivers/scsi/scsi_lib.c' line='251' column='1'/>
+        <parameter type-id='3b445e53' name='rq_flags' filepath='drivers/scsi/scsi_lib.c' line='251' column='1'/>
+        <parameter type-id='7292109c' name='resid' filepath='drivers/scsi/scsi_lib.c' line='252' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/scsi/scsi_logging.c' language='LANG_C89'>
+      <class-decl name='Scsi_Host' is-struct='yes' visibility='default' is-declaration-only='yes' id='83cec607'/>
+      <pointer-type-def type-id='83cec607' size-in-bits='64' id='a970a64d'/>
+      <qualified-type-def type-id='d6746ce3' const='yes' id='f64a160a'/>
+      <pointer-type-def type-id='f64a160a' size-in-bits='64' id='d6a0d460'/>
+      <function-decl name='scsi_print_sense_hdr' mangled-name='scsi_print_sense_hdr' filepath='drivers/scsi/scsi_logging.c' line='362' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_print_sense_hdr'>
+        <parameter type-id='0f176ec1' name='sdev' filepath='drivers/scsi/scsi_logging.c' line='362' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/scsi/scsi_logging.c' line='362' column='1'/>
+        <parameter type-id='d6a0d460' name='sshdr' filepath='drivers/scsi/scsi_logging.c' line='363' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__scsi_print_sense' mangled-name='__scsi_print_sense' filepath='drivers/scsi/scsi_logging.c' line='370' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__scsi_print_sense'>
+        <parameter type-id='0f176ec1' name='sdev' filepath='drivers/scsi/scsi_logging.c' line='370' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/scsi/scsi_logging.c' line='370' column='1'/>
+        <parameter type-id='354f7eb9' name='sense_buffer' filepath='drivers/scsi/scsi_logging.c' line='371' column='1'/>
+        <parameter type-id='95e97e5e' name='sense_len' filepath='drivers/scsi/scsi_logging.c' line='371' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='cf3752f1' size-in-bits='64' id='0f176ec1'/>
+      <qualified-type-def type-id='e07b5dbe' const='yes' id='cf3752f1'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/scsi/scsi_pm.c' language='LANG_C89'>
+      <function-decl name='scsi_autopm_put_device' mangled-name='scsi_autopm_put_device' filepath='drivers/scsi/scsi_pm.c' line='311' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_autopm_put_device'>
+        <parameter type-id='eb572b74' name='sdev' filepath='drivers/scsi/scsi_pm.c' line='311' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/scsi/scsi_scan.c' language='LANG_C89'>
+      <function-decl name='scsi_get_host_dev' mangled-name='scsi_get_host_dev' filepath='drivers/scsi/scsi_scan.c' line='1896' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_get_host_dev'>
+        <parameter type-id='a970a64c' name='shost' filepath='drivers/scsi/scsi_scan.c' line='1896' column='1'/>
+        <return type-id='eb572b74'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/scsi/scsi_sysfs.c' language='LANG_C89'>
+      <function-decl name='scsi_autopm_get_device' mangled-name='scsi_autopm_get_device' filepath='include/scsi/scsi_device.h' line='468' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_autopm_get_device'>
+        <parameter type-id='eb572b74'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='scsi_register_interface' mangled-name='scsi_register_interface' filepath='drivers/scsi/scsi_sysfs.c' line='1529' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_register_interface'>
+        <parameter type-id='ec167ceb' name='intf' filepath='drivers/scsi/scsi_sysfs.c' line='1529' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='aba1d11b' size-in-bits='64' id='ec167ceb'/>
+      <class-decl name='class_interface' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='792' column='1' id='aba1d11b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='class' type-id='67aca04f' visibility='default' filepath='include/linux/device.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='add_dev' type-id='6da1022f' visibility='default' filepath='include/linux/device.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='remove_dev' type-id='0bd06100' visibility='default' filepath='include/linux/device.h' line='797' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='fa712c1b' size-in-bits='64' id='6da1022f'/>
+      <pointer-type-def type-id='391f1e06' size-in-bits='64' id='0bd06100'/>
+      <function-type size-in-bits='64' id='fa712c1b'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='ec167ceb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='391f1e06'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='ec167ceb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/scsi/ufs/tc-dwc-g210-pltfrm.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='78a133c2' size-in-bits='96' id='3015ceb4'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='2f162548' size-in-bits='1024' id='28645bde'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <class-decl name='devfreq_governor' size-in-bits='448' is-struct='yes' visibility='default' filepath='drivers/devfreq/governor.h' line='47' column='1' id='6d54709d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/devfreq/governor.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='8d43b1f5' visibility='default' filepath='drivers/devfreq/governor.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='immutable' type-id='20f5f452' visibility='default' filepath='drivers/devfreq/governor.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_target_freq' type-id='b2610cc8' visibility='default' filepath='drivers/devfreq/governor.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='event_handler' type-id='10b92604' visibility='default' filepath='drivers/devfreq/governor.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_device_handler' is-struct='yes' visibility='default' is-declaration-only='yes' id='4e8a6f85'/>
+      <class-decl name='scsi_host_cmd_pool' is-struct='yes' visibility='default' is-declaration-only='yes' id='94982f58'/>
+      <class-decl name='scsi_transport_template' is-struct='yes' visibility='default' is-declaration-only='yes' id='0e15337c'/>
+      <array-type-def dimensions='1' type-id='fbc017ef' size-in-bits='512' id='3276578a'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='144' id='09617d27'>
+        <subrange length='18' type-id='7ff19f0f' id='489127f2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='16' id='cf114704'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='4096' id='d1f32e0e'>
+        <subrange length='512' type-id='7ff19f0f' id='c11630dd'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='448' id='01f8d131'>
+        <subrange length='56' type-id='7ff19f0f' id='f8137894'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='infinite' id='29c3368c'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='128' id='92a46553'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='infinite' id='5e6516ee'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='ufs_hba_variant_ops' size-in-bits='1856' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='337' column='1' id='ee22abe8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init' type-id='30b66f41' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='exit' type-id='2e320710' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_ufs_hci_version' type-id='ae17b581' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='clk_scale_notify' type-id='47e17209' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='setup_clocks' type-id='47e17209' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='setup_regulators' type-id='e15aece4' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hce_enable_notify' type-id='e5b0996e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='link_startup_notify' type-id='e5b0996e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pwr_change_notify' type-id='571aaf76' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='setup_xfer_req' type-id='a06238fa' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='setup_task_mgmt' type-id='ed89b003' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='hibern8_notify' type-id='4ec7a2d9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='apply_dev_quirks' type-id='30b66f41' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fixup_dev_quirks' type-id='2e320710' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='suspend' type-id='e684e5d4' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='resume' type-id='e684e5d4' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='dbg_register_dump' type-id='2e320710' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='phy_initialization' type-id='30b66f41' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='device_reset' type-id='2e320710' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='config_scaling_param' type-id='39d771f3' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='program_key' type-id='53c91149' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='fill_prdt' type-id='086f8c15' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='prepare_command' type-id='cf0ca710' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='update_sysfs' type-id='30b66f41' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='380' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_hba' size-in-bits='33088' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='589' column='1' id='bc6d8611'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mmio_base' type-id='eaa32e2f' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ucdl_base_addr' type-id='84caa74f' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='utrdl_base_addr' type-id='1852fc77' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='utmrdl_base_addr' type-id='0c025d55' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ucdl_dma_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='utrdl_dma_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='utmrdl_dma_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='host' type-id='a970a64c' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sdev_ufs_device' type-id='eb572b74' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='curr_dev_pwr_mode' type-id='748f6f00' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='uic_link_state' type-id='a1b5abd2' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rpm_lvl' type-id='812ff8cb' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='spm_lvl' type-id='812ff8cb' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rpm_lvl_attr' type-id='dbf3947c' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='spm_lvl_attr' type-id='dbf3947c' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='pm_op_in_progress' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='ahit' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='lrb' type-id='6ca6fa6d' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='lrb_in_use' type-id='7359adad' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='outstanding_tasks' type-id='7359adad' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='outstanding_reqs' type-id='7359adad' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='capabilities' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='nutrs' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='nutmrs' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='ufs_version' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='vops' type-id='52ab0d0f' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='vps' type-id='aec2c278' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='sg_entry_size' type-id='b59d7dce' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='is_irq_enabled' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dev_ref_clk_freq' type-id='56d5992c' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='quirks' type-id='f0981eeb' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='dev_quirks' type-id='f0981eeb' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='tm_wq' type-id='b5ab048f' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='tm_tag_wq' type-id='b5ab048f' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='tm_condition' type-id='7359adad' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='tm_slots_in_use' type-id='7359adad' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='active_uic_cmd' type-id='cdf785b8' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='uic_cmd_mutex' type-id='925167dc' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='uic_async_done' type-id='389faaf7' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='ufshcd_state' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='eh_flags' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='intr_mask' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3168'>
+          <var-decl name='ee_ctrl_mask' type-id='1dc6a898' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3184'>
+          <var-decl name='is_powered' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='eh_wq' type-id='242e3d19' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='eh_work' type-id='ef9025d0' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='eeh_work' type-id='ef9025d0' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='errors' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4064'>
+          <var-decl name='uic_error' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='saved_err' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4128'>
+          <var-decl name='saved_uic_err' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='ufs_stats' type-id='e7596927' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15232'>
+          <var-decl name='force_reset' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15240'>
+          <var-decl name='force_pmc' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15248'>
+          <var-decl name='silence_err_logs' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15296'>
+          <var-decl name='dev_cmd' type-id='19098804' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16320'>
+          <var-decl name='last_dme_cmd_tstamp' type-id='fbc017ef' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16384'>
+          <var-decl name='dev_info' type-id='e3428c48' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16704'>
+          <var-decl name='auto_bkops_enabled' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16768'>
+          <var-decl name='vreg_info' type-id='c9a4cbd1' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17024'>
+          <var-decl name='clk_list_head' type-id='72f469ec' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17152'>
+          <var-decl name='wlun_dev_clr_ua' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17184'>
+          <var-decl name='req_abort_count' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17216'>
+          <var-decl name='lanes_per_direction' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17248'>
+          <var-decl name='pwr_info' type-id='4020579d' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17472'>
+          <var-decl name='max_pwr_info' type-id='9b642532' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17728'>
+          <var-decl name='clk_gating' type-id='0eeb0815' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='caps' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20096'>
+          <var-decl name='devfreq' type-id='f66fa7f4' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20160'>
+          <var-decl name='clk_scaling' type-id='ab4dad02' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='832' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21824'>
+          <var-decl name='is_sys_suspended' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='833' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21856'>
+          <var-decl name='urgent_bkops_lvl' type-id='462d2624' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='835' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21888'>
+          <var-decl name='is_urgent_bkops_lvl_checked' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='836' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21952'>
+          <var-decl name='clk_scaling_lock' type-id='f19fdb93' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22336'>
+          <var-decl name='desc_size' type-id='b10d66b7' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22560'>
+          <var-decl name='scsi_block_reqs_cnt' type-id='49178f86' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22592'>
+          <var-decl name='bsg_dev' type-id='66e487eb' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29952'>
+          <var-decl name='bsg_queue' type-id='e7d2a5fd' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30016'>
+          <var-decl name='wb_buf_flush_enabled' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30024'>
+          <var-decl name='wb_enabled' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30080'>
+          <var-decl name='rpm_dev_flush_recheck_work' type-id='5ad6e0ef' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31168'>
+          <var-decl name='crypto_capabilities' type-id='4721c843' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31232'>
+          <var-decl name='crypto_cap_array' type-id='d43dc76d' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='851' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31296'>
+          <var-decl name='crypto_cfg_register' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31360'>
+          <var-decl name='ksm' type-id='13fcfe64' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32832'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32896'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32960'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33024'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='859' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='utp_transfer_cmd_desc' size-in-bits='8192' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='459' column='1' id='f660d147'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='command_upiu' type-id='d1f32e0e' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='response_upiu' type-id='d1f32e0e' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='prd_table' type-id='29c3368c' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='462' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='utp_transfer_req_desc' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='492' column='1' id='20f0d8ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='746bbed6' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='command_desc_base_addr_lo' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='command_desc_base_addr_hi' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='response_upiu_length' type-id='23119536' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='response_upiu_offset' type-id='23119536' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='prd_table_length' type-id='23119536' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='prd_table_offset' type-id='23119536' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='507' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request_desc_header' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='475' column='1' id='746bbed6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dword_0' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dword_1' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dword_2' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dword_3' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='479' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__le16' type-id='d315442e' filepath='include/uapi/linux/types.h' line='29' column='1' id='23119536'/>
+      <class-decl name='utp_task_req_desc' size-in-bits='640' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='513' column='1' id='a73e5d15'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='746bbed6' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='req_header' type-id='b010cb22' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='input_param1' type-id='78a133c2' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='input_param2' type-id='78a133c2' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='input_param3' type-id='78a133c2' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='__reserved1' type-id='f41331a9' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rsp_header' type-id='b010cb22' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='output_param1' type-id='78a133c2' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='output_param2' type-id='78a133c2' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='__reserved2' type-id='3015ceb4' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='528' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='utp_upiu_header' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='27' column='1' id='b010cb22'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dword_0' type-id='78a133c2' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dword_1' type-id='78a133c2' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dword_2' type-id='78a133c2' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='Scsi_Host' size-in-bits='19008' is-struct='yes' visibility='default' filepath='include/scsi/scsi_host.h' line='533' column='1' id='83cec606'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__devices' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_host.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__targets' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_host.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='starved_list' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_host.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='default_lock' type-id='fb4018a0' visibility='default' filepath='include/scsi/scsi_host.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='host_lock' type-id='cff2d845' visibility='default' filepath='include/scsi/scsi_host.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='scan_mutex' type-id='925167dc' visibility='default' filepath='include/scsi/scsi_host.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='eh_cmd_q' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_host.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ehandler' type-id='f23e2572' visibility='default' filepath='include/scsi/scsi_host.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='eh_action' type-id='389faaf7' visibility='default' filepath='include/scsi/scsi_host.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='host_wait' type-id='b5ab048f' visibility='default' filepath='include/scsi/scsi_host.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hostt' type-id='36265581' visibility='default' filepath='include/scsi/scsi_host.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='transportt' type-id='498f47da' visibility='default' filepath='include/scsi/scsi_host.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='tag_set' type-id='651086d8' visibility='default' filepath='include/scsi/scsi_host.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='host_busy' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_host.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='host_blocked' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_host.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='host_failed' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='host_eh_scheduled' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='host_no' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2784'>
+          <var-decl name='eh_deadline' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='last_reset' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='max_channel' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='max_id' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='max_lun' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='unique_id' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='max_cmd_len' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='this_id' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='can_queue' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='cmd_per_lun' type-id='a2185560' visibility='default' filepath='include/scsi/scsi_host.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3152'>
+          <var-decl name='sg_tablesize' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3168'>
+          <var-decl name='sg_prot_tablesize' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='max_sectors' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3232'>
+          <var-decl name='max_segment_size' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='dma_boundary' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='virt_boundary_mask' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='nr_hw_queues' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='active_mode' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='unchecked_isa_dma' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='host_self_blocked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='reverse_ordering' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='tmf_in_progress' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='async_scan' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='eh_noresume' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='no_write_same' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='use_cmd_list' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='short_inquiry' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='no_scsi2_lun_in_cdb' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3440'>
+          <var-decl name='work_q_name' type-id='664ac0b7' visibility='default' filepath='include/scsi/scsi_host.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='work_q' type-id='242e3d19' visibility='default' filepath='include/scsi/scsi_host.h' line='662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='tmf_work_q' type-id='242e3d19' visibility='default' filepath='include/scsi/scsi_host.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='max_host_blocked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3808'>
+          <var-decl name='prot_capabilities' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='prot_guard_type' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_host.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='base' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='io_port' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='n_io_port' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_host.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4040'>
+          <var-decl name='dma_channel' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_host.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4064'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='shost_state' type-id='e41e14c7' visibility='default' filepath='include/scsi/scsi_host.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='shost_gendev' type-id='66e487eb' visibility='default' filepath='include/scsi/scsi_host.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='shost_dev' type-id='66e487eb' visibility='default' filepath='include/scsi/scsi_host.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18880'>
+          <var-decl name='shost_data' type-id='eaa32e2f' visibility='default' filepath='include/scsi/scsi_host.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18944'>
+          <var-decl name='dma_dev' type-id='fa0b179b' visibility='default' filepath='include/scsi/scsi_host.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19008'>
+          <var-decl name='hostdata' type-id='c99b5ecd' visibility='default' filepath='include/scsi/scsi_host.h' line='708' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_ksm_ll_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/keyslot-manager.h' line='39' column='1' id='85385c54'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='keyslot_program' type-id='c1e89b34' visibility='default' filepath='include/linux/keyslot-manager.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='keyslot_evict' type-id='c1e89b34' visibility='default' filepath='include/linux/keyslot-manager.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='derive_raw_secret' type-id='9f82b8fd' visibility='default' filepath='include/linux/keyslot-manager.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_host_template' size-in-bits='3008' is-struct='yes' visibility='default' filepath='include/scsi/scsi_host.h' line='46' column='1' id='1a0d5389'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/scsi/scsi_host.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/scsi/scsi_host.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='info' type-id='91464e34' visibility='default' filepath='include/scsi/scsi_host.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ioctl' type-id='73550cb4' visibility='default' filepath='include/scsi/scsi_host.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='compat_ioctl' type-id='73550cb4' visibility='default' filepath='include/scsi/scsi_host.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='queuecommand' type-id='5e9804d5' visibility='default' filepath='include/scsi/scsi_host.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='commit_rqs' type-id='fddad99e' visibility='default' filepath='include/scsi/scsi_host.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='eh_abort_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='eh_device_reset_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='eh_target_reset_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='eh_bus_reset_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='eh_host_reset_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='slave_alloc' type-id='4fae2c98' visibility='default' filepath='include/scsi/scsi_host.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='slave_configure' type-id='4fae2c98' visibility='default' filepath='include/scsi/scsi_host.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='slave_destroy' type-id='38c41fe1' visibility='default' filepath='include/scsi/scsi_host.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='target_alloc' type-id='55bb6559' visibility='default' filepath='include/scsi/scsi_host.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='target_destroy' type-id='36e7f8ac' visibility='default' filepath='include/scsi/scsi_host.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='scan_finished' type-id='07445d6c' visibility='default' filepath='include/scsi/scsi_host.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='scan_start' type-id='7fc5dc19' visibility='default' filepath='include/scsi/scsi_host.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='change_queue_depth' type-id='38313007' visibility='default' filepath='include/scsi/scsi_host.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='map_queues' type-id='1a9d259c' visibility='default' filepath='include/scsi/scsi_host.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='bios_param' type-id='4c72f20d' visibility='default' filepath='include/scsi/scsi_host.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='unlock_native_capacity' type-id='38c41fe1' visibility='default' filepath='include/scsi/scsi_host.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='show_info' type-id='b9e33ab0' visibility='default' filepath='include/scsi/scsi_host.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='write_info' type-id='ff0f7577' visibility='default' filepath='include/scsi/scsi_host.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='eh_timed_out' type-id='7114e104' visibility='default' filepath='include/scsi/scsi_host.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='host_reset' type-id='203d9a9b' visibility='default' filepath='include/scsi/scsi_host.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='proc_name' type-id='80f4b756' visibility='default' filepath='include/scsi/scsi_host.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='proc_dir' type-id='d077e928' visibility='default' filepath='include/scsi/scsi_host.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='can_queue' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='this_id' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='sg_tablesize' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1936'>
+          <var-decl name='sg_prot_tablesize' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='max_sectors' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='max_segment_size' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dma_boundary' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='virt_boundary_mask' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='cmd_per_lun' type-id='a2185560' visibility='default' filepath='include/scsi/scsi_host.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2192'>
+          <var-decl name='present' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_host.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='tag_alloc_policy' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='track_queue_depth' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='supported_mode' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='unchecked_isa_dma' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='emulated' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='skip_settle_delay' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='no_write_same' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='force_blk_mq' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='max_host_blocked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='shost_attrs' type-id='aa9eb300' visibility='default' filepath='include/scsi/scsi_host.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='sdev_attrs' type-id='aa9eb300' visibility='default' filepath='include/scsi/scsi_host.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='sdev_groups' type-id='c97de1ac' visibility='default' filepath='include/scsi/scsi_host.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='vendor_id' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='cmd_size' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='cmd_pool' type-id='4783492e' visibility='default' filepath='include/scsi/scsi_host.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='rpm_autosuspend_delay' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='497' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_device' size-in-bits='19456' is-struct='yes' visibility='default' filepath='include/scsi/scsi_device.h' line='102' column='1' id='e07b5dbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='host' type-id='a970a64c' visibility='default' filepath='include/scsi/scsi_device.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='request_queue' type-id='e7d2a5fd' visibility='default' filepath='include/scsi/scsi_device.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='siblings' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='same_target_siblings' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='device_busy' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='device_blocked' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='list_lock' type-id='fb4018a0' visibility='default' filepath='include/scsi/scsi_device.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cmd_list' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='starved_entry' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='queue_depth' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_device.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='max_queue_depth' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_device.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='last_queue_full_depth' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_device.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='816'>
+          <var-decl name='last_queue_full_count' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_device.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='last_queue_full_time' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_device.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='queue_ramp_up_period' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_device.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='last_queue_ramp_up' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_device.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='channel' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='lun' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_device.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='manufacturer' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='sector_size' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hostdata' type-id='eaa32e2f' visibility='default' filepath='include/scsi/scsi_device.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='type' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_device.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1288'>
+          <var-decl name='scsi_level' type-id='a84c031d' visibility='default' filepath='include/scsi/scsi_device.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1296'>
+          <var-decl name='inq_periph_qual' type-id='a84c031d' visibility='default' filepath='include/scsi/scsi_device.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='inquiry_mutex' type-id='925167dc' visibility='default' filepath='include/scsi/scsi_device.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='inquiry_len' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_device.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='inquiry' type-id='cf536864' visibility='default' filepath='include/scsi/scsi_device.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='vendor' type-id='80f4b756' visibility='default' filepath='include/scsi/scsi_device.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='model' type-id='80f4b756' visibility='default' filepath='include/scsi/scsi_device.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='rev' type-id='80f4b756' visibility='default' filepath='include/scsi/scsi_device.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='vpd_pg83' type-id='2b88fa00' visibility='default' filepath='include/scsi/scsi_device.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='vpd_pg80' type-id='2b88fa00' visibility='default' filepath='include/scsi/scsi_device.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='current_tag' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_device.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sdev_target' type-id='4cb5819d' visibility='default' filepath='include/scsi/scsi_device.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='sdev_bflags' type-id='ec838379' visibility='default' filepath='include/scsi/scsi_device.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='eh_timeout' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='removable' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='changed' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='busy' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='lockable' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='locked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='borken' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='disconnect' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='soft_reset' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='sdtr' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='wdtr' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='ppr' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='tagged_supported' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='simple_tags' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='was_reset' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='expecting_cc_ua' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='use_10_for_rw' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='use_10_for_ms' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='set_dbd_for_ms' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='no_report_opcodes' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='no_write_same' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='use_16_for_rw' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='skip_ms_page_8' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='skip_ms_page_3f' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='skip_vpd_pages' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='try_vpd_pages' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='use_192_bytes_for_3f' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='no_start_on_add' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='allow_restart' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='manage_start_stop' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='start_stop_pwr_cond' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='no_uld_attach' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='select_no_atn' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='fix_capacity' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='guess_capacity' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='retry_hwerror' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='last_sector_bug' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='no_read_disc_info' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='no_read_capacity_16' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='try_rc_10_first' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='security_supported' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='is_visible' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='wce_default_on' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='no_dif' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='broken_fua' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='lun_in_cdb' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='unmap_limit_for_ws' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='rpm_autosuspend' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='disk_events_disable_depth' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='supported_events' type-id='f066dd3c' visibility='default' filepath='include/scsi/scsi_device.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='pending_events' type-id='f066dd3c' visibility='default' filepath='include/scsi/scsi_device.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='event_work' type-id='ef9025d0' visibility='default' filepath='include/scsi/scsi_device.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='max_device_blocked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='iorequest_cnt' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='iodone_cnt' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='ioerr_cnt' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='sdev_gendev' type-id='66e487eb' visibility='default' filepath='include/scsi/scsi_device.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='sdev_dev' type-id='66e487eb' visibility='default' filepath='include/scsi/scsi_device.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17856'>
+          <var-decl name='ew' type-id='53f7ea88' visibility='default' filepath='include/scsi/scsi_device.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18240'>
+          <var-decl name='requeue_work' type-id='ef9025d0' visibility='default' filepath='include/scsi/scsi_device.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18624'>
+          <var-decl name='handler' type-id='0a0775b5' visibility='default' filepath='include/scsi/scsi_device.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18688'>
+          <var-decl name='handler_data' type-id='eaa32e2f' visibility='default' filepath='include/scsi/scsi_device.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18752'>
+          <var-decl name='access_state' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_device.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18816'>
+          <var-decl name='state_mutex' type-id='925167dc' visibility='default' filepath='include/scsi/scsi_device.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19072'>
+          <var-decl name='sdev_state' type-id='7e4b2e83' visibility='default' filepath='include/scsi/scsi_device.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19136'>
+          <var-decl name='quiesced_by' type-id='f23e2572' visibility='default' filepath='include/scsi/scsi_device.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19200'>
+          <var-decl name='sdev_data' type-id='c99b5ecd' visibility='default' filepath='include/scsi/scsi_device.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19200'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_device.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19264'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_device.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_device.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19392'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_device.h' line='238' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='ufs_crypto_capabilities' size-in-bits='32' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='327' column='1' id='4721c843'>
+        <data-member access='private'>
+          <var-decl name='reg_val' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='e15f514f' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='329' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='ufs_crypto_cap_entry' size-in-bits='32' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='353' column='1' id='f81b67f4'>
+        <data-member access='private'>
+          <var-decl name='reg_val' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='7db2e6af' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='355' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='scsi_vpd' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/scsi/scsi_device.h' line='96' column='1' id='4399e1b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/scsi/scsi_device.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_device.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='data' type-id='5e6516ee' visibility='default' filepath='include/scsi/scsi_device.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_target' size-in-bits='8064' is-struct='yes' visibility='default' filepath='include/scsi/scsi_device.h' line='287' column='1' id='148c2b1d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='starget_sdev_user' type-id='eb572b74' visibility='default' filepath='include/scsi/scsi_device.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='siblings' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='devices' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/scsi/scsi_device.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='reap_ref' type-id='400fb07b' visibility='default' filepath='include/scsi/scsi_device.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='channel' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='create' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='single_lun' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='pdt_1f_for_no_lun' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='no_report_luns' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='expecting_lun_change' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='target_busy' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7840'>
+          <var-decl name='target_blocked' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='can_queue' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7904'>
+          <var-decl name='max_target_blocked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='scsi_level' type-id='a84c031d' visibility='default' filepath='include/scsi/scsi_device.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7968'>
+          <var-decl name='state' type-id='0e1b99c8' visibility='default' filepath='include/scsi/scsi_device.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='hostdata' type-id='eaa32e2f' visibility='default' filepath='include/scsi/scsi_device.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='starget_data' type-id='c99b5ecd' visibility='default' filepath='include/scsi/scsi_device.h' line='322' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='scsi_target_state' filepath='include/scsi/scsi_device.h' line='274' column='1' id='0e1b99c8'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='STARGET_CREATED' value='1'/>
+        <enumerator name='STARGET_RUNNING' value='2'/>
+        <enumerator name='STARGET_REMOVE' value='3'/>
+        <enumerator name='STARGET_CREATED_REMOVE' value='4'/>
+        <enumerator name='STARGET_DEL' value='5'/>
+      </enum-decl>
+      <typedef-decl name='blist_flags_t' type-id='d3130597' filepath='include/scsi/scsi_device.h' line='19' column='1' id='ec838379'/>
+      <class-decl name='execute_work' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='174' column='1' id='53f7ea88'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/workqueue.h' line='175' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='scsi_device_state' filepath='include/scsi/scsi_device.h' line='37' column='1' id='7e4b2e83'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SDEV_CREATED' value='1'/>
+        <enumerator name='SDEV_RUNNING' value='2'/>
+        <enumerator name='SDEV_CANCEL' value='3'/>
+        <enumerator name='SDEV_DEL' value='4'/>
+        <enumerator name='SDEV_QUIESCE' value='5'/>
+        <enumerator name='SDEV_OFFLINE' value='6'/>
+        <enumerator name='SDEV_TRANSPORT_OFFLINE' value='7'/>
+        <enumerator name='SDEV_BLOCK' value='8'/>
+        <enumerator name='SDEV_CREATED_BLOCK' value='9'/>
+      </enum-decl>
+      <class-decl name='scsi_cmnd' size-in-bits='3904' is-struct='yes' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='68' column='1' id='fe7ab802'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='req' type-id='dec7ed8d' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='device' type-id='eb572b74' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='eh_entry' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='abort_work' type-id='5ad6e0ef' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='eh_eflags' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='jiffies_at_alloc' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='retries' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='allowed' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='prot_op' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2184'>
+          <var-decl name='prot_type' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2192'>
+          <var-decl name='prot_flags' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='cmd_len' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='sc_data_direction' type-id='eea6b025' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='cmnd' type-id='cf536864' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='sdb' type-id='9f8b0d0f' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='prot_sdb' type-id='8502fa27' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='underflow' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='transfersize' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='request' type-id='3dad1a48' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='sense_buffer' type-id='cf536864' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='scsi_done' type-id='466c873d' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='SCp' type-id='fd44f8bd' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='host_scribble' type-id='cf536864' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='result' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='tag' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='149' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_request' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/scsi/scsi_request.h' line='9' column='1' id='dec7ed8d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__cmd' type-id='92a46553' visibility='default' filepath='include/scsi/scsi_request.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cmd' type-id='cf536864' visibility='default' filepath='include/scsi/scsi_request.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cmd_len' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_request.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='result' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_request.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sense_len' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_request.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='resid_len' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_request.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='retries' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_request.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sense' type-id='eaa32e2f' visibility='default' filepath='include/scsi/scsi_request.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_data_buffer' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='36' column='1' id='9f8b0d0f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='table' type-id='c59e4f4c' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='length' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_pointer' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='42' column='1' id='fd44f8bd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='26a90f95' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='this_residual' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buffer' type-id='bf3ef905' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='buffers_residual' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dma_handle' type-id='cf29c9b3' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='Status' type-id='e024ff18' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='Message' type-id='e024ff18' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='have_data_in' type-id='e024ff18' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sent_command' type-id='e024ff18' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='phase' type-id='e024ff18' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_attribute' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='837' column='1' id='dbf3947c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' visibility='default' filepath='include/linux/device.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='3dcc4acf' visibility='default' filepath='include/linux/device.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='839105d3' visibility='default' filepath='include/linux/device.h' line='841' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='scsi_host_state' filepath='include/scsi/scsi_host.h' line='523' column='1' id='e41e14c7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SHOST_CREATED' value='1'/>
+        <enumerator name='SHOST_RUNNING' value='2'/>
+        <enumerator name='SHOST_CANCEL' value='3'/>
+        <enumerator name='SHOST_DEL' value='4'/>
+        <enumerator name='SHOST_RECOVERY' value='5'/>
+        <enumerator name='SHOST_CANCEL_RECOVERY' value='6'/>
+        <enumerator name='SHOST_DEL_RECOVERY' value='7'/>
+      </enum-decl>
+      <enum-decl name='ufs_dev_pwr_mode' filepath='drivers/scsi/ufs/ufs.h' line='476' column='1' id='748f6f00'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UFS_ACTIVE_PWR_MODE' value='1'/>
+        <enumerator name='UFS_SLEEP_PWR_MODE' value='2'/>
+        <enumerator name='UFS_POWERDOWN_PWR_MODE' value='3'/>
+      </enum-decl>
+      <enum-decl name='uic_link_state' filepath='drivers/scsi/ufs/ufshcd.h' line='119' column='1' id='a1b5abd2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UIC_LINK_OFF_STATE' value='0'/>
+        <enumerator name='UIC_LINK_ACTIVE_STATE' value='1'/>
+        <enumerator name='UIC_LINK_HIBERN8_STATE' value='2'/>
+        <enumerator name='UIC_LINK_BROKEN_STATE' value='3'/>
+      </enum-decl>
+      <enum-decl name='ufs_pm_level' filepath='drivers/scsi/ufs/ufshcd.h' line='158' column='1' id='812ff8cb'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UFS_PM_LVL_0' value='0'/>
+        <enumerator name='UFS_PM_LVL_1' value='1'/>
+        <enumerator name='UFS_PM_LVL_2' value='2'/>
+        <enumerator name='UFS_PM_LVL_3' value='3'/>
+        <enumerator name='UFS_PM_LVL_4' value='4'/>
+        <enumerator name='UFS_PM_LVL_5' value='5'/>
+        <enumerator name='UFS_PM_LVL_MAX' value='6'/>
+      </enum-decl>
+      <class-decl name='ufshcd_lrb' size-in-bits='1152' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='197' column='1' id='93b4100d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='utr_descriptor_ptr' type-id='1852fc77' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ucd_req_ptr' type-id='c61ee7a1' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ucd_rsp_ptr' type-id='68e72116' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ucd_prdt_ptr' type-id='696df79c' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='utrd_dma_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ucd_req_dma_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ucd_rsp_dma_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ucd_prdt_dma_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cmd' type-id='0b8718c0' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sense_buffer' type-id='8bff8096' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sense_bufflen' type-id='f0981eeb' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='scsi_status' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='command_type' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='task_tag' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='lun' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='776'>
+          <var-decl name='intr_cmd' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='issue_time_stamp' type-id='fbc017ef' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compl_time_stamp' type-id='fbc017ef' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='crypto_key_slot' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='data_unit_num' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='req_abort_skip' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='224' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='utp_upiu_req' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='72' column='1' id='f3866749'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='b010cb22' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='' type-id='d67af9b5' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='160' is-anonymous='yes' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='74' column='1' id='d67af9b5'>
+        <data-member access='private'>
+          <var-decl name='sc' type-id='498490b9' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='qr' type-id='5fc79e81' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tr' type-id='5fc79e81' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='uc' type-id='5fc79e81' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='79' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='utp_upiu_cmd' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='61' column='1' id='498490b9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='exp_data_transfer_len' type-id='78a133c2' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cdb' type-id='9396cabb' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='utp_upiu_query' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='45' column='1' id='5fc79e81'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='opcode' type-id='8f048e17' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='idn' type-id='8f048e17' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='index' type-id='8f048e17' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='selector' type-id='8f048e17' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='reserved_osf' type-id='84a5c3d4' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='length' type-id='84a5c3d4' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='value' type-id='78a133c2' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='f41331a9' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='utp_upiu_rsp' size-in-bits='416' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='504' column='1' id='ee504570'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='b010cb22' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='' type-id='0b42cb04' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='506' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='506' column='1' id='0b42cb04'>
+        <data-member access='private'>
+          <var-decl name='sr' type-id='18119fa5' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='qr' type-id='5fc79e81' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='508' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='utp_cmd_rsp' size-in-bits='320' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='491' column='1' id='18119fa5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='residual_transfer_count' type-id='78a133c2' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='reserved' type-id='30180d4b' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='sense_data_len' type-id='84a5c3d4' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='sense_data' type-id='09617d27' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='495' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufshcd_sg_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='441' column='1' id='c372d726'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base_addr' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='upper_addr' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='445' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_hba_variant_params' size-in-bits='640' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='520' column='1' id='15d562ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='devfreq_profile' type-id='c9196d18' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ondemand_data' type-id='d21d90ad' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='hba_enable_delay_us' type-id='1dc6a898' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='wb_flush_threshold' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='524' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='devfreq_dev_profile' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/devfreq.h' line='95' column='1' id='c9196d18'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='initial_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='polling_ms' type-id='f0981eeb' visibility='default' filepath='include/linux/devfreq.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='target' type-id='70283254' visibility='default' filepath='include/linux/devfreq.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_dev_status' type-id='676fff47' visibility='default' filepath='include/linux/devfreq.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_cur_freq' type-id='0e18d3fd' visibility='default' filepath='include/linux/devfreq.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='exit' type-id='dd787f72' visibility='default' filepath='include/linux/devfreq.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='freq_table' type-id='1d2c2b85' visibility='default' filepath='include/linux/devfreq.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='max_state' type-id='f0981eeb' visibility='default' filepath='include/linux/devfreq.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='devfreq_dev_status' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/devfreq.h' line='51' column='1' id='49266711'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='total_time' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='busy_time' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='current_frequency' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/devfreq.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='devfreq_simple_ondemand_data' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/devfreq.h' line='258' column='1' id='d21d90ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='upthreshold' type-id='f0981eeb' visibility='default' filepath='include/linux/devfreq.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='downdifferential' type-id='f0981eeb' visibility='default' filepath='include/linux/devfreq.h' line='260' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ufs_ref_clk_freq' filepath='drivers/scsi/ufs/ufs.h' line='414' column='1' id='56d5992c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='REF_CLK_FREQ_19_2_MHZ' value='0'/>
+        <enumerator name='REF_CLK_FREQ_26_MHZ' value='1'/>
+        <enumerator name='REF_CLK_FREQ_38_4_MHZ' value='2'/>
+        <enumerator name='REF_CLK_FREQ_52_MHZ' value='3'/>
+        <enumerator name='REF_CLK_FREQ_INVAL' value='-1'/>
+      </enum-decl>
+      <class-decl name='uic_command' size-in-bits='448' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='97' column='1' id='52999e5a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='command' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='argument1' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='argument2' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='argument3' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cmd_active' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='result' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='done' type-id='f9fef04f' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_stats' size-in-bits='11072' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='493' column='1' id='e7596927'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='last_intr_status' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last_intr_ts' type-id='fbc017ef' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hibern8_exit_cnt' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_hibern8_exit_tstamp' type-id='fbc017ef' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pa_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='dl_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='nl_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='tl_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='dme_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='auto_hibern8_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='fatal_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='link_startup_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='resume_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='suspend_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='dev_reset' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='host_reset' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='task_abort' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='517' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_err_reg_hist' size-in-bits='832' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='465' column='1' id='19164baf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pos' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='reg' type-id='1c6311dd' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tstamp' type-id='3276578a' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='468' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_dev_cmd' size-in-bits='1024' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='246' column='1' id='19098804'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='e2ef9cb5' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='complete' type-id='389faaf7' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='tag_wq' type-id='b5ab048f' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='query' type-id='913c3f48' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='251' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dev_cmd_type' filepath='drivers/scsi/ufs/ufshcd.h' line='82' column='1' id='e2ef9cb5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DEV_CMD_TYPE_NOP' value='0'/>
+        <enumerator name='DEV_CMD_TYPE_QUERY' value='1'/>
+      </enum-decl>
+      <class-decl name='ufs_query' size-in-bits='448' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='233' column='1' id='913c3f48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='request' type-id='1f574743' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='descriptor' type-id='8bff8096' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='response' type-id='21574a69' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='236' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_query_req' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='517' column='1' id='1f574743'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='query_func' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='upiu_req' type-id='5fc79e81' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='519' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_query_res' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='527' column='1' id='21574a69'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='response' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='upiu_res' type-id='5fc79e81' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='529' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_dev_info' size-in-bits='320' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='563' column='1' id='e3428c48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='f_power_on_wp_en' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='is_lu_power_on_wp' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='max_lu_supported' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='wb_dedicated_lu' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wmanufacturerid' type-id='1dc6a898' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='model' type-id='8bff8096' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wspecversion' type-id='1dc6a898' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='clk_gating_wait_us' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='d_ext_ufs_feature_sup' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='b_wb_buffer_type' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='d_wb_alloc_units' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='b_rpm_dev_flush_capable' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='b_presrv_uspc_en' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='579' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_vreg_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='556' column='1' id='c9a4cbd1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vcc' type-id='ae670bfa' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vccq' type-id='ae670bfa' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vccq2' type-id='ae670bfa' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vdd_hba' type-id='ae670bfa' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='560' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_vreg' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='547' column='1' id='d6b2bd0c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reg' type-id='850c13f6' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='enabled' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='min_uV' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_uV' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_uA' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='553' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_pa_layer_attr' size-in-bits='224' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='289' column='1' id='4020579d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gear_rx' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='gear_tx' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lane_rx' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='lane_tx' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pwr_rx' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='pwr_tx' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hs_rate' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='296' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_pwr_mode_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='299' column='1' id='9b642532'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_valid' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='info' type-id='4020579d' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='301' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_clk_gating' size-in-bits='2304' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='407' column='1' id='0eeb0815'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gate_work' type-id='5ad6e0ef' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='ungate_work' type-id='ef9025d0' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='state' type-id='8bfed557' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='delay_ms' type-id='7359adad' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='is_suspended' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='delay_attr' type-id='dbf3947c' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='enable_attr' type-id='dbf3947c' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='is_enabled' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='active_reqs' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='clk_gating_workq' type-id='242e3d19' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='417' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='clk_gating_state' filepath='drivers/scsi/ufs/ufshcd.h' line='384' column='1' id='8bfed557'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='CLKS_OFF' value='0'/>
+        <enumerator name='CLKS_ON' value='1'/>
+        <enumerator name='REQ_CLKS_OFF' value='2'/>
+        <enumerator name='REQ_CLKS_ON' value='3'/>
+      </enum-decl>
+      <class-decl name='devfreq' size-in-bits='15872' is-struct='yes' visibility='default' filepath='include/linux/devfreq.h' line='148' column='1' id='f80c018e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/devfreq.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/devfreq.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/devfreq.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='profile' type-id='cba10b6e' visibility='default' filepath='include/linux/devfreq.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='governor' type-id='f627870a' visibility='default' filepath='include/linux/devfreq.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='governor_name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/devfreq.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='nb' type-id='9b08f7cd' visibility='default' filepath='include/linux/devfreq.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/devfreq.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='previous_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='last_status' type-id='49266711' visibility='default' filepath='include/linux/devfreq.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/devfreq.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='min_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='max_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='scaling_min_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='scaling_max_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='stop_polling' type-id='b50a4934' visibility='default' filepath='include/linux/devfreq.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='suspend_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='resume_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='suspend_count' type-id='49178f86' visibility='default' filepath='include/linux/devfreq.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10144'>
+          <var-decl name='total_trans' type-id='f0981eeb' visibility='default' filepath='include/linux/devfreq.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='trans_table' type-id='807869d3' visibility='default' filepath='include/linux/devfreq.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='time_in_state' type-id='1d2c2b85' visibility='default' filepath='include/linux/devfreq.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='last_stat_updated' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='transition_notifier_list' type-id='ffc4a47a' visibility='default' filepath='include/linux/devfreq.h' line='180' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='srcu_notifier_head' size-in-bits='5504' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='74' column='1' id='ffc4a47a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/notifier.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='srcu' type-id='e4a7867c' visibility='default' filepath='include/linux/notifier.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='head' type-id='d504f73d' visibility='default' filepath='include/linux/notifier.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_clk_scaling' size-in-bits='1664' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='443' column='1' id='ab4dad02'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='active_reqs' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tot_busy_t' type-id='7359adad' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='window_start_t' type-id='fbc017ef' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='busy_start_t' type-id='fbc017ef' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='enable_attr' type-id='dbf3947c' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='saved_pwr_info' type-id='ba896956' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='workq' type-id='242e3d19' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='suspend_work' type-id='ef9025d0' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='resume_work' type-id='ef9025d0' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='is_allowed' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1608'>
+          <var-decl name='is_busy_started' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1616'>
+          <var-decl name='is_suspended' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='455' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_saved_pwr_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='420' column='1' id='ba896956'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='info' type-id='4020579d' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='is_valid' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='422' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='bkops_status' filepath='drivers/scsi/ufs/ufs.h' line='392' column='1' id='462d2624'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BKOPS_STATUS_NO_OP' value='0'/>
+        <enumerator name='BKOPS_STATUS_NON_CRITICAL' value='1'/>
+        <enumerator name='BKOPS_STATUS_PERF_IMPACT' value='2'/>
+        <enumerator name='BKOPS_STATUS_CRITICAL' value='3'/>
+        <enumerator name='BKOPS_STATUS_MAX' value='3'/>
+      </enum-decl>
+      <class-decl name='ufs_desc_size' size-in-bits='224' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='254' column='1' id='b10d66b7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_desc' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pwr_desc' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='geom_desc' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='interc_desc' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='unit_desc' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='conf_desc' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hlth_desc' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='261' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='329' column='1' id='e15f514f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_crypto_cap' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='config_count' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='reserved' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='config_array_ptr' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='333' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='355' column='1' id='7db2e6af'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='algorithm_id' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='sdus_mask' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='key_size' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='reserved' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='359' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ufs_notify_change_status' filepath='drivers/scsi/ufs/ufshcd.h' line='284' column='1' id='bbeb954c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PRE_CHANGE' value='0'/>
+        <enumerator name='POST_CHANGE' value='1'/>
+      </enum-decl>
+      <enum-decl name='uic_cmd_dme' filepath='drivers/scsi/ufs/ufshci.h' line='276' column='1' id='47e46889'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UIC_CMD_DME_GET' value='1'/>
+        <enumerator name='UIC_CMD_DME_SET' value='2'/>
+        <enumerator name='UIC_CMD_DME_PEER_GET' value='3'/>
+        <enumerator name='UIC_CMD_DME_PEER_SET' value='4'/>
+        <enumerator name='UIC_CMD_DME_POWERON' value='16'/>
+        <enumerator name='UIC_CMD_DME_POWEROFF' value='17'/>
+        <enumerator name='UIC_CMD_DME_ENABLE' value='18'/>
+        <enumerator name='UIC_CMD_DME_RESET' value='20'/>
+        <enumerator name='UIC_CMD_DME_END_PT_RST' value='21'/>
+        <enumerator name='UIC_CMD_DME_LINK_STARTUP' value='22'/>
+        <enumerator name='UIC_CMD_DME_HIBER_ENTER' value='23'/>
+        <enumerator name='UIC_CMD_DME_HIBER_EXIT' value='24'/>
+        <enumerator name='UIC_CMD_DME_TEST_MODE' value='26'/>
+      </enum-decl>
+      <enum-decl name='ufs_pm_op' filepath='drivers/scsi/ufs/ufshcd.h' line='108' column='1' id='bfc022f4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UFS_RUNTIME_PM' value='0'/>
+        <enumerator name='UFS_SYSTEM_PM' value='1'/>
+        <enumerator name='UFS_SHUTDOWN_PM' value='2'/>
+      </enum-decl>
+      <union-decl name='ufs_crypto_cfg_entry' size-in-bits='1024' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='366' column='1' id='a722d386'>
+        <data-member access='private'>
+          <var-decl name='reg_val' type-id='28645bde' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='335c32d9' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='368' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='1024' is-struct='yes' is-anonymous='yes' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='368' column='1' id='335c32d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crypto_key' type-id='47ba3182' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='data_unit_size' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='520'>
+          <var-decl name='crypto_cap_idx' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='reserved_1' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='536'>
+          <var-decl name='config_enable' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='reserved_multi_host' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='552'>
+          <var-decl name='reserved_2' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='560'>
+          <var-decl name='vsb' type-id='cf114704' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reserved_3' type-id='01f8d131' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='377' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='83cec606' size-in-bits='64' id='a970a64c'/>
+      <pointer-type-def type-id='369a41ea' size-in-bits='64' id='91464e34'/>
+      <qualified-type-def type-id='6d54709d' const='yes' id='e5e56b24'/>
+      <pointer-type-def type-id='e5e56b24' size-in-bits='64' id='f627870a'/>
+      <qualified-type-def type-id='a722d386' const='yes' id='02ac86a6'/>
+      <pointer-type-def type-id='02ac86a6' size-in-bits='64' id='c197ce64'/>
+      <qualified-type-def type-id='ee22abe8' const='yes' id='8d2ce43f'/>
+      <pointer-type-def type-id='8d2ce43f' size-in-bits='64' id='52ab0d0f'/>
+      <pointer-type-def type-id='f80c018e' size-in-bits='64' id='f66fa7f4'/>
+      <pointer-type-def type-id='c9196d18' size-in-bits='64' id='cba10b6e'/>
+      <pointer-type-def type-id='49266711' size-in-bits='64' id='4f1d3179'/>
+      <pointer-type-def type-id='dbf3947c' size-in-bits='64' id='89a2612a'/>
+      <pointer-type-def type-id='89a2612a' size-in-bits='64' id='aa9eb300'/>
+      <pointer-type-def type-id='291d9c02' size-in-bits='64' id='7114e104'/>
+      <pointer-type-def type-id='fb9c833a' size-in-bits='64' id='1a9d259c'/>
+      <pointer-type-def type-id='20affdf3' size-in-bits='64' id='ff0f7577'/>
+      <pointer-type-def type-id='d2f6c36f' size-in-bits='64' id='203d9a9b'/>
+      <pointer-type-def type-id='d15eda11' size-in-bits='64' id='5e9804d5'/>
+      <pointer-type-def type-id='9423c42a' size-in-bits='64' id='07445d6c'/>
+      <pointer-type-def type-id='24254372' size-in-bits='64' id='c1e89b34'/>
+      <pointer-type-def type-id='bba85209' size-in-bits='64' id='9f82b8fd'/>
+      <pointer-type-def type-id='2873dcbb' size-in-bits='64' id='676fff47'/>
+      <pointer-type-def type-id='4e3cc2a9' size-in-bits='64' id='0e18d3fd'/>
+      <pointer-type-def type-id='6788fb9a' size-in-bits='64' id='70283254'/>
+      <pointer-type-def type-id='97ca9b12' size-in-bits='64' id='0786894c'/>
+      <pointer-type-def type-id='53efb49e' size-in-bits='64' id='4fae2c98'/>
+      <pointer-type-def type-id='8ff31849' size-in-bits='64' id='4c72f20d'/>
+      <pointer-type-def type-id='686e5e33' size-in-bits='64' id='38313007'/>
+      <pointer-type-def type-id='ec8e7b62' size-in-bits='64' id='73550cb4'/>
+      <pointer-type-def type-id='af8a50f5' size-in-bits='64' id='55bb6559'/>
+      <pointer-type-def type-id='f680e13e' size-in-bits='64' id='b9e33ab0'/>
+      <pointer-type-def type-id='d1d0945d' size-in-bits='64' id='30b66f41'/>
+      <pointer-type-def type-id='5cf9392d' size-in-bits='64' id='53c91149'/>
+      <pointer-type-def type-id='423ef8f4' size-in-bits='64' id='e5b0996e'/>
+      <pointer-type-def type-id='4c42814c' size-in-bits='64' id='571aaf76'/>
+      <pointer-type-def type-id='9146866a' size-in-bits='64' id='e684e5d4'/>
+      <pointer-type-def type-id='4ea9f2b6' size-in-bits='64' id='cf0ca710'/>
+      <pointer-type-def type-id='59aa7dba' size-in-bits='64' id='e15aece4'/>
+      <pointer-type-def type-id='3b5e43e5' size-in-bits='64' id='47e17209'/>
+      <pointer-type-def type-id='7cf66c09' size-in-bits='64' id='086f8c15'/>
+      <pointer-type-def type-id='fe7ab802' size-in-bits='64' id='0b8718c0'/>
+      <pointer-type-def type-id='9f8b0d0f' size-in-bits='64' id='8502fa27'/>
+      <pointer-type-def type-id='e07b5dbe' size-in-bits='64' id='eb572b74'/>
+      <pointer-type-def type-id='4e8a6f85' size-in-bits='64' id='0a0775b5'/>
+      <pointer-type-def type-id='94982f58' size-in-bits='64' id='4783492e'/>
+      <pointer-type-def type-id='1a0d5389' size-in-bits='64' id='36265581'/>
+      <pointer-type-def type-id='148c2b1d' size-in-bits='64' id='4cb5819d'/>
+      <pointer-type-def type-id='0e15337c' size-in-bits='64' id='498f47da'/>
+      <pointer-type-def type-id='4399e1b2' size-in-bits='64' id='2b88fa00'/>
+      <pointer-type-def type-id='4bbe36cb' size-in-bits='64' id='3dcc4acf'/>
+      <pointer-type-def type-id='50bd3cc7' size-in-bits='64' id='839105d3'/>
+      <pointer-type-def type-id='edae512d' size-in-bits='64' id='ae17b581'/>
+      <pointer-type-def type-id='f81b67f4' size-in-bits='64' id='d43dc76d'/>
+      <pointer-type-def type-id='bc6d8611' size-in-bits='64' id='442b8d89'/>
+      <pointer-type-def type-id='15d562ba' size-in-bits='64' id='aec2c278'/>
+      <pointer-type-def type-id='4020579d' size-in-bits='64' id='35f4156d'/>
+      <pointer-type-def type-id='d6b2bd0c' size-in-bits='64' id='ae670bfa'/>
+      <pointer-type-def type-id='93b4100d' size-in-bits='64' id='6ca6fa6d'/>
+      <pointer-type-def type-id='c372d726' size-in-bits='64' id='696df79c'/>
+      <pointer-type-def type-id='52999e5a' size-in-bits='64' id='cdf785b8'/>
+      <pointer-type-def type-id='a73e5d15' size-in-bits='64' id='0c025d55'/>
+      <pointer-type-def type-id='f660d147' size-in-bits='64' id='84caa74f'/>
+      <pointer-type-def type-id='20f0d8ff' size-in-bits='64' id='1852fc77'/>
+      <pointer-type-def type-id='f3866749' size-in-bits='64' id='c61ee7a1'/>
+      <pointer-type-def type-id='ee504570' size-in-bits='64' id='68e72116'/>
+      <pointer-type-def type-id='d7413fe5' size-in-bits='64' id='7fc5dc19'/>
+      <pointer-type-def type-id='0457ac44' size-in-bits='64' id='fddad99e'/>
+      <pointer-type-def type-id='57109d59' size-in-bits='64' id='466c873d'/>
+      <pointer-type-def type-id='9102a0ad' size-in-bits='64' id='38c41fe1'/>
+      <pointer-type-def type-id='ed6fc6ea' size-in-bits='64' id='36e7f8ac'/>
+      <pointer-type-def type-id='ac28b246' size-in-bits='64' id='2e320710'/>
+      <pointer-type-def type-id='5415f247' size-in-bits='64' id='39d771f3'/>
+      <pointer-type-def type-id='7d117ac5' size-in-bits='64' id='4ec7a2d9'/>
+      <pointer-type-def type-id='b1c57c88' size-in-bits='64' id='a06238fa'/>
+      <pointer-type-def type-id='d59c0ecf' size-in-bits='64' id='ed89b003'/>
+      <qualified-type-def type-id='95e97e5e' volatile='yes' id='e024ff18'/>
+      <function-decl name='ufshcd_pltfrm_init' mangled-name='ufshcd_pltfrm_init' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='31' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_pltfrm_init'>
+        <parameter type-id='db362995'/>
+        <parameter type-id='52ab0d0f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_remove' mangled-name='ufshcd_remove' filepath='drivers/scsi/ufs/ufshcd.h' line='941' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_remove'>
+        <parameter type-id='442b8d89'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='369a41ea'>
+        <parameter type-id='a970a64c'/>
+        <return type-id='80f4b756'/>
+      </function-type>
+      <function-type size-in-bits='64' id='291d9c02'>
+        <parameter type-id='0b8718c0'/>
+        <return type-id='0f4f6276'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fb9c833a'>
+        <parameter type-id='a970a64c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='20affdf3'>
+        <parameter type-id='a970a64c'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d2f6c36f'>
+        <parameter type-id='a970a64c'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d15eda11'>
+        <parameter type-id='a970a64c'/>
+        <parameter type-id='0b8718c0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9423c42a'>
+        <parameter type-id='a970a64c'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24254372'>
+        <parameter type-id='bf8a20d2'/>
+        <parameter type-id='9baaf905'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bba85209'>
+        <parameter type-id='bf8a20d2'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2873dcbb'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='4f1d3179'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4e3cc2a9'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6788fb9a'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='97ca9b12'>
+        <parameter type-id='0b8718c0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='53efb49e'>
+        <parameter type-id='eb572b74'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8ff31849'>
+        <parameter type-id='eb572b74'/>
+        <parameter type-id='b88dd945'/>
+        <parameter type-id='a42536cd'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='686e5e33'>
+        <parameter type-id='eb572b74'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ec8e7b62'>
+        <parameter type-id='eb572b74'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='af8a50f5'>
+        <parameter type-id='4cb5819d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f680e13e'>
+        <parameter type-id='f8dc9df0'/>
+        <parameter type-id='a970a64c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d1d0945d'>
+        <parameter type-id='442b8d89'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5cf9392d'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='c197ce64'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='423ef8f4'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='bbeb954c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4c42814c'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='bbeb954c'/>
+        <parameter type-id='35f4156d'/>
+        <parameter type-id='35f4156d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9146866a'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='bfc022f4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4ea9f2b6'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='6ca6fa6d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='59aa7dba'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3b5e43e5'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='bbeb954c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7cf66c09'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='6ca6fa6d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='edae512d'>
+        <parameter type-id='442b8d89'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d7413fe5'>
+        <parameter type-id='a970a64c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0457ac44'>
+        <parameter type-id='a970a64c'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='57109d59'>
+        <parameter type-id='0b8718c0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9102a0ad'>
+        <parameter type-id='eb572b74'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ed6fc6ea'>
+        <parameter type-id='4cb5819d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ac28b246'>
+        <parameter type-id='442b8d89'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5415f247'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='cba10b6e'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7d117ac5'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='47e46889'/>
+        <parameter type-id='bbeb954c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b1c57c88'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d59c0ecf'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/scsi/ufs/ufs-hisi.c' language='LANG_C89'>
+      <class-decl name='ufs_dev_params' size-in-bits='384' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='13' column='1' id='3c0943b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pwm_rx_gear' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pwm_tx_gear' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hs_rx_gear' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hs_tx_gear' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx_lanes' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tx_lanes' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rx_pwr_pwm' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='tx_pwr_pwm' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_pwr_hs' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tx_pwr_hs' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hs_rate' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='desired_working_mode' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3c0943b2' size-in-bits='64' id='9c02cf50'/>
+      <function-decl name='ufshcd_get_pwr_dev_param' mangled-name='ufshcd_get_pwr_dev_param' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='28' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_get_pwr_dev_param'>
+        <parameter type-id='9c02cf50'/>
+        <parameter type-id='35f4156d'/>
+        <parameter type-id='35f4156d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_platform_ioremap_resource' mangled-name='devm_platform_ioremap_resource' filepath='include/linux/platform_device.h' line='58' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_platform_ioremap_resource'>
+        <parameter type-id='db362995'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/scsi/ufs/ufshcd-pci.c' language='LANG_C89'>
+      <function-decl name='pci_unregister_driver' mangled-name='pci_unregister_driver' filepath='include/linux/pci.h' line='1370' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_unregister_driver'>
+        <parameter type-id='85b59624'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pcim_enable_device' mangled-name='pcim_enable_device' filepath='include/linux/pci.h' line='1155' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pcim_enable_device'>
+        <parameter type-id='85196e3f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_set_master' mangled-name='pci_set_master' filepath='include/linux/pci.h' line='1180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_set_master'>
+        <parameter type-id='85196e3f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_runtime_allow' mangled-name='pm_runtime_allow' filepath='include/linux/pm_runtime.h' line='47' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_allow'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_runtime_forbid' mangled-name='pm_runtime_forbid' filepath='include/linux/pm_runtime.h' line='48' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_forbid'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ufshcd_dme_get_attr' mangled-name='ufshcd_dme_get_attr' filepath='drivers/scsi/ufs/ufshcd.h' line='998' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_dme_get_attr'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_dme_set_attr' mangled-name='ufshcd_dme_set_attr' filepath='drivers/scsi/ufs/ufshcd.h' line='996' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_dme_set_attr'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/scsi/ufs/ufshcd-pltfrm.c' language='LANG_C89'>
+      <function-decl name='ufshcd_pltfrm_suspend' mangled-name='ufshcd_pltfrm_suspend' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='225' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_pltfrm_suspend'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='225' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_pltfrm_resume' mangled-name='ufshcd_pltfrm_resume' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='238' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_pltfrm_resume'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='238' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_pltfrm_runtime_suspend' mangled-name='ufshcd_pltfrm_runtime_suspend' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='244' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_pltfrm_runtime_suspend'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='244' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_pltfrm_runtime_resume' mangled-name='ufshcd_pltfrm_runtime_resume' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='250' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_pltfrm_runtime_resume'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='250' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_pltfrm_runtime_idle' mangled-name='ufshcd_pltfrm_runtime_idle' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='256' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_pltfrm_runtime_idle'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='256' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_pltfrm_shutdown' mangled-name='ufshcd_pltfrm_shutdown' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='264' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_pltfrm_shutdown'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='264' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/scsi/ufs/ufshcd.c' language='LANG_C89'>
+      <function-decl name='ufshcd_dump_regs' mangled-name='ufshcd_dump_regs' filepath='drivers/scsi/ufs/ufshcd.c' line='124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_dump_regs'>
+        <parameter type-id='442b8d89' name='hba' filepath='drivers/scsi/ufs/ufshcd.c' line='124' column='1'/>
+        <parameter type-id='b59d7dce' name='offset' filepath='drivers/scsi/ufs/ufshcd.c' line='124' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/scsi/ufs/ufshcd.c' line='124' column='1'/>
+        <parameter type-id='80f4b756' name='prefix' filepath='drivers/scsi/ufs/ufshcd.c' line='125' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_get_local_unipro_ver' mangled-name='ufshcd_get_local_unipro_ver' filepath='drivers/scsi/ufs/ufshcd.c' line='947' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_get_local_unipro_ver'>
+        <parameter type-id='442b8d89' name='hba' filepath='drivers/scsi/ufs/ufshcd.c' line='947' column='1'/>
+        <return type-id='19c2251e'/>
+      </function-decl>
+      <function-decl name='ufshcd_uic_hibern8_enter' mangled-name='ufshcd_uic_hibern8_enter' filepath='drivers/scsi/ufs/ufshcd.c' line='4096' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_uic_hibern8_enter'>
+        <parameter type-id='442b8d89' name='hba' filepath='drivers/scsi/ufs/ufshcd.c' line='4096' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_uic_hibern8_exit' mangled-name='ufshcd_uic_hibern8_exit' filepath='drivers/scsi/ufs/ufshcd.c' line='4120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_uic_hibern8_exit'>
+        <parameter type-id='442b8d89' name='hba' filepath='drivers/scsi/ufs/ufshcd.c' line='4120' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devfreq_suspend_device' mangled-name='devfreq_suspend_device' filepath='include/linux/devfreq.h' line='202' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_suspend_device'>
+        <parameter type-id='f66fa7f4'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devfreq_resume_device' mangled-name='devfreq_resume_device' filepath='include/linux/devfreq.h' line='203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_resume_device'>
+        <parameter type-id='f66fa7f4'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devfreq_remove_device' mangled-name='devfreq_remove_device' filepath='include/linux/devfreq.h' line='193' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_remove_device'>
+        <parameter type-id='f66fa7f4'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devfreq_add_device' mangled-name='devfreq_add_device' filepath='include/linux/devfreq.h' line='189' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_add_device'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='cba10b6e'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='f66fa7f4'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/soc/qcom/smem_state.c' language='LANG_C89'>
+      <class-decl name='qcom_smem_state' size-in-bits='384' is-struct='yes' visibility='default' filepath='drivers/soc/qcom/smem_state.c' line='25' column='1' id='0c2997ce'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='drivers/soc/qcom/smem_state.c' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='orphan' type-id='b50a4934' visibility='default' filepath='drivers/soc/qcom/smem_state.c' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/soc/qcom/smem_state.c' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='drivers/soc/qcom/smem_state.c' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='drivers/soc/qcom/smem_state.c' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ops' type-id='3419b67d' visibility='default' filepath='drivers/soc/qcom/smem_state.c' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qcom_smem_state_ops' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/soc/qcom/smem_state.h' line='10' column='1' id='3419b67d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='update_bits' type-id='2e5880fb' visibility='default' filepath='include/linux/soc/qcom/smem_state.h' line='11' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='3419b67d' const='yes' id='b121efca'/>
+      <pointer-type-def type-id='b121efca' size-in-bits='64' id='b86c9da0'/>
+      <pointer-type-def type-id='ea5fdc37' size-in-bits='64' id='2e5880fb'/>
+      <pointer-type-def type-id='0c2997ce' size-in-bits='64' id='01df4674'/>
+      <function-decl name='qcom_smem_state_update_bits' mangled-name='qcom_smem_state_update_bits' filepath='drivers/soc/qcom/smem_state.c' line='45' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='qcom_smem_state_update_bits'>
+        <parameter type-id='01df4674' name='state' filepath='drivers/soc/qcom/smem_state.c' line='45' column='1'/>
+        <parameter type-id='19c2251e' name='mask' filepath='drivers/soc/qcom/smem_state.c' line='46' column='1'/>
+        <parameter type-id='19c2251e' name='value' filepath='drivers/soc/qcom/smem_state.c' line='47' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='qcom_smem_state_get' mangled-name='qcom_smem_state_get' filepath='drivers/soc/qcom/smem_state.c' line='88' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='qcom_smem_state_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/soc/qcom/smem_state.c' line='88' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/soc/qcom/smem_state.c' line='89' column='1'/>
+        <parameter type-id='807869d3' name='bit' filepath='drivers/soc/qcom/smem_state.c' line='90' column='1'/>
+        <return type-id='01df4674'/>
+      </function-decl>
+      <function-decl name='qcom_smem_state_register' mangled-name='qcom_smem_state_register' filepath='drivers/soc/qcom/smem_state.c' line='160' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='qcom_smem_state_register'>
+        <parameter type-id='9a537bbe' name='of_node' filepath='drivers/soc/qcom/smem_state.c' line='160' column='1'/>
+        <parameter type-id='b86c9da0' name='ops' filepath='drivers/soc/qcom/smem_state.c' line='161' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/soc/qcom/smem_state.c' line='162' column='1'/>
+        <return type-id='01df4674'/>
+      </function-decl>
+      <function-decl name='qcom_smem_state_unregister' mangled-name='qcom_smem_state_unregister' filepath='drivers/soc/qcom/smem_state.c' line='188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='qcom_smem_state_unregister'>
+        <parameter type-id='01df4674' name='state' filepath='drivers/soc/qcom/smem_state.c' line='188' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='ea5fdc37'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/soc/sunxi/sunxi_sram.c' language='LANG_C89'>
+      <function-decl name='of_get_address' mangled-name='of_get_address' filepath='include/linux/of_address.h' line='49' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_address'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='c0190993'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='5b2fd8e8'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/spi/spi.c' language='LANG_C89'>
+      <class-decl name='spi_mem' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='182' column='1' id='f8eaf96b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='spi' type-id='e90f4666' visibility='default' filepath='include/linux/spi/spi-mem.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='drvpriv' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi-mem.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/spi/spi-mem.h' line='185' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spi_mem_op' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='91' column='1' id='8f68aa3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='84f00e1d' visibility='default' filepath='include/linux/spi/spi-mem.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr' type-id='1550533b' visibility='default' filepath='include/linux/spi/spi-mem.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dummy' type-id='f3823a84' visibility='default' filepath='include/linux/spi/spi-mem.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='aaf63164' visibility='default' filepath='include/linux/spi/spi-mem.h' line='116' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='92' column='1' id='84f00e1d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buswidth' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi-mem.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='opcode' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi-mem.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='97' column='1' id='1550533b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nbytes' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi-mem.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='buswidth' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi-mem.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='val' type-id='91ce1af9' visibility='default' filepath='include/linux/spi/spi-mem.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='103' column='1' id='f3823a84'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nbytes' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi-mem.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='buswidth' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi-mem.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='108' column='1' id='aaf63164'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buswidth' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi-mem.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dir' type-id='af2d0d95' visibility='default' filepath='include/linux/spi/spi-mem.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nbytes' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi-mem.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buf' type-id='ed606d8b' visibility='default' filepath='include/linux/spi/spi-mem.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='spi_mem_data_dir' filepath='include/linux/spi/spi-mem.h' line='64' column='1' id='af2d0d95'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SPI_MEM_NO_DATA' value='0'/>
+        <enumerator name='SPI_MEM_DATA_IN' value='1'/>
+        <enumerator name='SPI_MEM_DATA_OUT' value='2'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='112' column='1' id='ed606d8b'>
+        <data-member access='private'>
+          <var-decl name='in' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi-mem.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='out' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi-mem.h' line='114' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='spi_mem_dirmap_desc' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='163' column='1' id='8df2bc75'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mem' type-id='33dc3b1b' visibility='default' filepath='include/linux/spi/spi-mem.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='info' type-id='bec3f688' visibility='default' filepath='include/linux/spi/spi-mem.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='nodirmap' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi-mem.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi-mem.h' line='167' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spi_mem_dirmap_info' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='140' column='1' id='bec3f688'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='op_tmpl' type-id='8f68aa3b' visibility='default' filepath='include/linux/spi/spi-mem.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='offset' type-id='91ce1af9' visibility='default' filepath='include/linux/spi/spi-mem.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='length' type-id='91ce1af9' visibility='default' filepath='include/linux/spi/spi-mem.h' line='143' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spi_driver' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/spi/spi.h' line='259' column='1' id='29290a00'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id_table' type-id='07695d8b' visibility='default' filepath='include/linux/spi/spi.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='probe' type-id='4f312040' visibility='default' filepath='include/linux/spi/spi.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='remove' type-id='4f312040' visibility='default' filepath='include/linux/spi/spi.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='shutdown' type-id='c965bc43' visibility='default' filepath='include/linux/spi/spi.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/spi/spi.h' line='264' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spi_device_id' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='492' column='1' id='e2d49ab8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/linux/mod_devicetable.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='driver_data' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='494' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='1c210187' size-in-bits='64' id='149deb03'/>
+      <qualified-type-def type-id='e2d49ab8' const='yes' id='41588f03'/>
+      <pointer-type-def type-id='41588f03' size-in-bits='64' id='07695d8b'/>
+      <qualified-type-def type-id='8f68aa3b' const='yes' id='2ef05706'/>
+      <pointer-type-def type-id='2ef05706' size-in-bits='64' id='10593a44'/>
+      <pointer-type-def type-id='96fe8392' size-in-bits='64' id='80f1f854'/>
+      <pointer-type-def type-id='e2270bc3' size-in-bits='64' id='c1205b1f'/>
+      <pointer-type-def type-id='78c92961' size-in-bits='64' id='dfa456d5'/>
+      <pointer-type-def type-id='29290a00' size-in-bits='64' id='d9c194a6'/>
+      <pointer-type-def type-id='f8eaf96b' size-in-bits='64' id='33dc3b1b'/>
+      <pointer-type-def type-id='8df2bc75' size-in-bits='64' id='4f4f2d55'/>
+      <pointer-type-def type-id='8f68aa3b' size-in-bits='64' id='1cf47bfb'/>
+      <pointer-type-def type-id='7983eff8' size-in-bits='64' id='3d444e9a'/>
+      <pointer-type-def type-id='5460fbd3' size-in-bits='64' id='79b4ee7f'/>
+      <pointer-type-def type-id='262d57ae' size-in-bits='64' id='12e56aa0'/>
+      <var-decl name='spi_bus_type' type-id='b31bfc8a' mangled-name='spi_bus_type' visibility='default' filepath='drivers/spi/spi.c' line='377' column='1' elf-symbol-id='spi_bus_type'/>
+      <function-decl name='spi_register_controller' mangled-name='spi_register_controller' filepath='drivers/spi/spi.c' line='2443' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_register_controller'>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='2443' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__spi_register_driver' mangled-name='__spi_register_driver' filepath='drivers/spi/spi.c' line='444' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__spi_register_driver'>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/spi/spi.c' line='444' column='1'/>
+        <parameter type-id='d9c194a6' name='sdrv' filepath='drivers/spi/spi.c' line='444' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spi_setup' mangled-name='spi_setup' filepath='drivers/spi/spi.c' line='3116' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_setup'>
+        <parameter type-id='e90f4666' name='spi' filepath='drivers/spi/spi.c' line='3116' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spi_unregister_device' mangled-name='spi_unregister_device' filepath='drivers/spi/spi.c' line='702' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_unregister_device'>
+        <parameter type-id='e90f4666' name='spi' filepath='drivers/spi/spi.c' line='702' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='spi_finalize_current_transfer' mangled-name='spi_finalize_current_transfer' filepath='drivers/spi/spi.c' line='1258' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_finalize_current_transfer'>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='1258' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='spi_get_next_queued_message' mangled-name='spi_get_next_queued_message' filepath='drivers/spi/spi.c' line='1493' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_get_next_queued_message'>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='1493' column='1'/>
+        <return type-id='bb7889ed'/>
+      </function-decl>
+      <function-decl name='spi_finalize_current_message' mangled-name='spi_finalize_current_message' filepath='drivers/spi/spi.c' line='1515' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_finalize_current_message'>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='1515' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__spi_alloc_controller' mangled-name='__spi_alloc_controller' filepath='drivers/spi/spi.c' line='2232' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__spi_alloc_controller'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/spi/spi.c' line='2232' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='drivers/spi/spi.c' line='2233' column='1'/>
+        <parameter type-id='b50a4934' name='slave' filepath='drivers/spi/spi.c' line='2233' column='1'/>
+        <return type-id='f22e4524'/>
+      </function-decl>
+      <function-decl name='devm_spi_register_controller' mangled-name='devm_spi_register_controller' filepath='drivers/spi/spi.c' line='2601' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_spi_register_controller'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/spi/spi.c' line='2601' column='1'/>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='2602' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spi_unregister_controller' mangled-name='spi_unregister_controller' filepath='drivers/spi/spi.c' line='2646' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_unregister_controller'>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='2646' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='spi_controller_suspend' mangled-name='spi_controller_suspend' filepath='drivers/spi/spi.c' line='2689' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_controller_suspend'>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='2689' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spi_controller_resume' mangled-name='spi_controller_resume' filepath='drivers/spi/spi.c' line='2705' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_controller_resume'>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='2705' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spi_busnum_to_master' mangled-name='spi_busnum_to_master' filepath='drivers/spi/spi.c' line='2741' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_busnum_to_master'>
+        <parameter type-id='1dc6a898' name='bus_num' filepath='drivers/spi/spi.c' line='2741' column='1'/>
+        <return type-id='f22e4524'/>
+      </function-decl>
+      <function-decl name='spi_sync_locked' mangled-name='spi_sync_locked' filepath='drivers/spi/spi.c' line='3619' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_sync_locked'>
+        <parameter type-id='e90f4666' name='spi' filepath='drivers/spi/spi.c' line='3619' column='1'/>
+        <parameter type-id='bb7889ed' name='message' filepath='drivers/spi/spi.c' line='3619' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spi_bus_lock' mangled-name='spi_bus_lock' filepath='drivers/spi/spi.c' line='3640' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_bus_lock'>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='3640' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spi_bus_unlock' mangled-name='spi_bus_unlock' filepath='drivers/spi/spi.c' line='3669' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_bus_unlock'>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='3669' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='1c210187'>
+        <parameter type-id='33dc3b1b'/>
+        <return type-id='80f4b756'/>
+      </function-type>
+      <function-type size-in-bits='64' id='96fe8392'>
+        <parameter type-id='33dc3b1b'/>
+        <parameter type-id='10593a44'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e2270bc3'>
+        <parameter type-id='33dc3b1b'/>
+        <parameter type-id='1cf47bfb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78c92961'>
+        <parameter type-id='4f4f2d55'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7983eff8'>
+        <parameter type-id='33dc3b1b'/>
+        <parameter type-id='10593a44'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5460fbd3'>
+        <parameter type-id='4f4f2d55'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='262d57ae'>
+        <parameter type-id='4f4f2d55'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/spmi/spmi.c' language='LANG_C89'>
+      <class-decl name='spmi_device' size-in-bits='7488' is-struct='yes' visibility='default' filepath='include/linux/spmi.h' line='39' column='1' id='a659afcb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/spmi.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='ctrl' type-id='d5cbf711' visibility='default' filepath='include/linux/spmi.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='usid' type-id='f9b06939' visibility='default' filepath='include/linux/spmi.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spmi_controller' size-in-bits='7616' is-struct='yes' visibility='default' filepath='include/linux/spmi.h' line='80' column='1' id='0d22ecf9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/spmi.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='nr' type-id='f0981eeb' visibility='default' filepath='include/linux/spmi.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='cmd' type-id='a93a5fe1' visibility='default' filepath='include/linux/spmi.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='read_cmd' type-id='e12cb9fe' visibility='default' filepath='include/linux/spmi.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='write_cmd' type-id='4496b625' visibility='default' filepath='include/linux/spmi.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spmi_driver' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/spmi.h' line='137' column='1' id='94c01877'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/spmi.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='probe' type-id='ef014987' visibility='default' filepath='include/linux/spmi.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='remove' type-id='f29648fe' visibility='default' filepath='include/linux/spmi.h' line='140' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='02bc074d' size-in-bits='64' id='a93a5fe1'/>
+      <pointer-type-def type-id='6430ea09' size-in-bits='64' id='4496b625'/>
+      <pointer-type-def type-id='6a251384' size-in-bits='64' id='e12cb9fe'/>
+      <pointer-type-def type-id='5df6ba5b' size-in-bits='64' id='ef014987'/>
+      <pointer-type-def type-id='0d22ecf9' size-in-bits='64' id='d5cbf711'/>
+      <pointer-type-def type-id='a659afcb' size-in-bits='64' id='893447fb'/>
+      <pointer-type-def type-id='94c01877' size-in-bits='64' id='34066f8f'/>
+      <pointer-type-def type-id='893b3284' size-in-bits='64' id='f29648fe'/>
+      <function-decl name='spmi_register_read' mangled-name='spmi_register_read' filepath='drivers/spmi/spmi.c' line='140' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_register_read'>
+        <parameter type-id='893447fb' name='sdev' filepath='drivers/spmi/spmi.c' line='140' column='1'/>
+        <parameter type-id='f9b06939' name='addr' filepath='drivers/spmi/spmi.c' line='140' column='1'/>
+        <parameter type-id='8bff8096' name='buf' filepath='drivers/spmi/spmi.c' line='140' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spmi_ext_register_read' mangled-name='spmi_ext_register_read' filepath='drivers/spmi/spmi.c' line='161' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_ext_register_read'>
+        <parameter type-id='893447fb' name='sdev' filepath='drivers/spmi/spmi.c' line='161' column='1'/>
+        <parameter type-id='f9b06939' name='addr' filepath='drivers/spmi/spmi.c' line='161' column='1'/>
+        <parameter type-id='8bff8096' name='buf' filepath='drivers/spmi/spmi.c' line='161' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/spmi/spmi.c' line='162' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spmi_ext_register_readl' mangled-name='spmi_ext_register_readl' filepath='drivers/spmi/spmi.c' line='183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_ext_register_readl'>
+        <parameter type-id='893447fb' name='sdev' filepath='drivers/spmi/spmi.c' line='183' column='1'/>
+        <parameter type-id='1dc6a898' name='addr' filepath='drivers/spmi/spmi.c' line='183' column='1'/>
+        <parameter type-id='8bff8096' name='buf' filepath='drivers/spmi/spmi.c' line='183' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/spmi/spmi.c' line='184' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spmi_register_write' mangled-name='spmi_register_write' filepath='drivers/spmi/spmi.c' line='203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_register_write'>
+        <parameter type-id='893447fb' name='sdev' filepath='drivers/spmi/spmi.c' line='203' column='1'/>
+        <parameter type-id='f9b06939' name='addr' filepath='drivers/spmi/spmi.c' line='203' column='1'/>
+        <parameter type-id='f9b06939' name='data' filepath='drivers/spmi/spmi.c' line='203' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spmi_register_zero_write' mangled-name='spmi_register_zero_write' filepath='drivers/spmi/spmi.c' line='221' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_register_zero_write'>
+        <parameter type-id='893447fb' name='sdev' filepath='drivers/spmi/spmi.c' line='221' column='1'/>
+        <parameter type-id='f9b06939' name='data' filepath='drivers/spmi/spmi.c' line='221' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spmi_ext_register_write' mangled-name='spmi_ext_register_write' filepath='drivers/spmi/spmi.c' line='238' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_ext_register_write'>
+        <parameter type-id='893447fb' name='sdev' filepath='drivers/spmi/spmi.c' line='238' column='1'/>
+        <parameter type-id='f9b06939' name='addr' filepath='drivers/spmi/spmi.c' line='238' column='1'/>
+        <parameter type-id='bbaf3419' name='buf' filepath='drivers/spmi/spmi.c' line='238' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/spmi/spmi.c' line='239' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spmi_ext_register_writel' mangled-name='spmi_ext_register_writel' filepath='drivers/spmi/spmi.c' line='260' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_ext_register_writel'>
+        <parameter type-id='893447fb' name='sdev' filepath='drivers/spmi/spmi.c' line='260' column='1'/>
+        <parameter type-id='1dc6a898' name='addr' filepath='drivers/spmi/spmi.c' line='260' column='1'/>
+        <parameter type-id='bbaf3419' name='buf' filepath='drivers/spmi/spmi.c' line='260' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/spmi/spmi.c' line='261' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spmi_controller_alloc' mangled-name='spmi_controller_alloc' filepath='drivers/spmi/spmi.c' line='413' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_controller_alloc'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/spmi/spmi.c' line='413' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/spmi/spmi.c' line='414' column='1'/>
+        <return type-id='d5cbf711'/>
+      </function-decl>
+      <function-decl name='spmi_controller_add' mangled-name='spmi_controller_add' filepath='drivers/spmi/spmi.c' line='508' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_controller_add'>
+        <parameter type-id='d5cbf711' name='ctrl' filepath='drivers/spmi/spmi.c' line='508' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spmi_controller_remove' mangled-name='spmi_controller_remove' filepath='drivers/spmi/spmi.c' line='546' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_controller_remove'>
+        <parameter type-id='d5cbf711' name='ctrl' filepath='drivers/spmi/spmi.c' line='546' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__spmi_driver_register' mangled-name='__spmi_driver_register' filepath='drivers/spmi/spmi.c' line='566' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__spmi_driver_register'>
+        <parameter type-id='34066f8f' name='sdrv' filepath='drivers/spmi/spmi.c' line='566' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/spmi/spmi.c' line='566' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='02bc074d'>
+        <parameter type-id='d5cbf711'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6430ea09'>
+        <parameter type-id='d5cbf711'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6a251384'>
+        <parameter type-id='d5cbf711'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5df6ba5b'>
+        <parameter type-id='893447fb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='893b3284'>
+        <parameter type-id='893447fb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/staging/android/ashmem.c' language='LANG_C89'>
+      <function-decl name='register_shrinker' mangled-name='register_shrinker' filepath='include/linux/shrinker.h' line='92' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_shrinker'>
+        <parameter type-id='4be14597'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vfs_llseek' mangled-name='vfs_llseek' filepath='include/linux/fs.h' line='3113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_llseek'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='1eb56b1e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='1eb56b1e'/>
+      </function-decl>
+      <function-decl name='strncpy_from_user' mangled-name='strncpy_from_user' filepath='arch/arm64/include/asm/uaccess.h' line='431' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strncpy_from_user'>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='shmem_file_setup' mangled-name='shmem_file_setup' filepath='include/linux/shmem_fs.h' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='shmem_file_setup'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='1eb56b1e'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='77e79a4b'/>
+      </function-decl>
+      <function-decl name='generic_file_open' mangled-name='generic_file_open' filepath='include/linux/fs.h' line='3240' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_file_open'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/staging/android/ion/heaps/ion_system_heap.c' language='LANG_C89'>
+      <class-decl name='dma_resv' is-struct='yes' visibility='default' is-declaration-only='yes' id='d06fbf67'/>
+      <class-decl name='ion_heap' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/linux/ion.h' line='117' column='1' id='c49a08f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='e3a91a7c' visibility='default' filepath='include/linux/ion.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='type' type-id='3616fd96' visibility='default' filepath='include/linux/ion.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ops' type-id='14bad32f' visibility='default' filepath='include/linux/ion.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='buf_ops' type-id='3f8b3d98' visibility='default' filepath='include/linux/ion.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/ion.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/linux/ion.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/ion.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/ion.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='shrinker' type-id='27cb404f' visibility='default' filepath='include/linux/ion.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='free_list' type-id='72f469ec' visibility='default' filepath='include/linux/ion.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='free_list_size' type-id='b59d7dce' visibility='default' filepath='include/linux/ion.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='free_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/ion.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='waitqueue' type-id='b5ab048f' visibility='default' filepath='include/linux/ion.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/ion.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='num_of_buffers' type-id='91ce1af9' visibility='default' filepath='include/linux/ion.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='num_of_alloc_bytes' type-id='91ce1af9' visibility='default' filepath='include/linux/ion.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='alloc_bytes_wm' type-id='91ce1af9' visibility='default' filepath='include/linux/ion.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='stat_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/ion.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/ion.h' line='144' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ion_heap_type' filepath='include/uapi/linux/ion.h' line='25' column='1' id='3616fd96'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ION_HEAP_TYPE_SYSTEM' value='0'/>
+        <enumerator name='ION_HEAP_TYPE_DMA' value='2'/>
+        <enumerator name='ION_HEAP_TYPE_CUSTOM' value='16'/>
+        <enumerator name='ION_HEAP_TYPE_MAX' value='31'/>
+      </enum-decl>
+      <class-decl name='ion_heap_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/ion.h' line='65' column='1' id='6038b637'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='allocate' type-id='ee920f43' visibility='default' filepath='include/linux/ion.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='free' type-id='62243d87' visibility='default' filepath='include/linux/ion.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shrink' type-id='82b66a0c' visibility='default' filepath='include/linux/ion.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_pool_size' type-id='242fbf2c' visibility='default' filepath='include/linux/ion.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ion_buffer' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/ion.h' line='38' column='1' id='43ebe0a8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/ion.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='heap' type-id='ac7bd9a2' visibility='default' filepath='include/linux/ion.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/ion.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='private_flags' type-id='7359adad' visibility='default' filepath='include/linux/ion.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/ion.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv_virt' type-id='eaa32e2f' visibility='default' filepath='include/linux/ion.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/ion.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='kmap_cnt' type-id='95e97e5e' visibility='default' filepath='include/linux/ion.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='vaddr' type-id='eaa32e2f' visibility='default' filepath='include/linux/ion.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='sg_table' type-id='4adb0e6a' visibility='default' filepath='include/linux/ion.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='attachments' type-id='72f469ec' visibility='default' filepath='include/linux/ion.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_buf_ops' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='35' column='1' id='3f8b3d98'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cache_sgt_mapping' type-id='b50a4934' visibility='default' filepath='include/linux/dma-buf.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='attach' type-id='b512ba7d' visibility='default' filepath='include/linux/dma-buf.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='detach' type-id='f191792a' visibility='default' filepath='include/linux/dma-buf.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='map_dma_buf' type-id='2d7508a9' visibility='default' filepath='include/linux/dma-buf.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unmap_dma_buf' type-id='0b475e59' visibility='default' filepath='include/linux/dma-buf.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='release' type-id='4e7b299a' visibility='default' filepath='include/linux/dma-buf.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='begin_cpu_access' type-id='127a97dd' visibility='default' filepath='include/linux/dma-buf.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='begin_cpu_access_partial' type-id='5299fb35' visibility='default' filepath='include/linux/dma-buf.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='end_cpu_access' type-id='127a97dd' visibility='default' filepath='include/linux/dma-buf.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='end_cpu_access_partial' type-id='5299fb35' visibility='default' filepath='include/linux/dma-buf.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mmap' type-id='68074686' visibility='default' filepath='include/linux/dma-buf.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='map' type-id='02838dc6' visibility='default' filepath='include/linux/dma-buf.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='unmap' type-id='632039f8' visibility='default' filepath='include/linux/dma-buf.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='vmap' type-id='a298286a' visibility='default' filepath='include/linux/dma-buf.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='vunmap' type-id='eb050ad4' visibility='default' filepath='include/linux/dma-buf.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='get_uuid' type-id='24dc58c9' visibility='default' filepath='include/linux/dma-buf.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_flags' type-id='97a03e57' visibility='default' filepath='include/linux/dma-buf.h' line='349' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_buf' size-in-bits='3392' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='388' column='1' id='c201baab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/dma-buf.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/dma-buf.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attachments' type-id='72f469ec' visibility='default' filepath='include/linux/dma-buf.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ops' type-id='c248c11b' visibility='default' filepath='include/linux/dma-buf.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/dma-buf.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='vmapping_counter' type-id='f0981eeb' visibility='default' filepath='include/linux/dma-buf.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vmap_ptr' type-id='eaa32e2f' visibility='default' filepath='include/linux/dma-buf.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='exp_name' type-id='80f4b756' visibility='default' filepath='include/linux/dma-buf.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/dma-buf.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='name_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/dma-buf.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/dma-buf.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='list_node' type-id='72f469ec' visibility='default' filepath='include/linux/dma-buf.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/dma-buf.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='resv' type-id='340cea9d' visibility='default' filepath='include/linux/dma-buf.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='poll' type-id='b5ab048f' visibility='default' filepath='include/linux/dma-buf.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='cb_excl' type-id='d5acde18' visibility='default' filepath='include/linux/dma-buf.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='cb_shared' type-id='d5acde18' visibility='default' filepath='include/linux/dma-buf.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sysfs_entry' type-id='bd60ed15' visibility='default' filepath='include/linux/dma-buf.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='mmap_count' type-id='95e97e5e' visibility='default' filepath='include/linux/dma-buf.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='exp_vm_ops' type-id='9be87662' visibility='default' filepath='include/linux/dma-buf.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='vm_ops' type-id='19795245' visibility='default' filepath='include/linux/dma-buf.h' line='423' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_buf_poll_cb_t' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='407' column='1' id='d5acde18'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cb' type-id='54c5dd35' visibility='default' filepath='include/linux/dma-buf.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='poll' type-id='03d48e96' visibility='default' filepath='include/linux/dma-buf.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active' type-id='8f254b08' visibility='default' filepath='include/linux/dma-buf.h' line='411' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_fence_cb' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/dma-fence.h' line='116' column='1' id='54c5dd35'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/dma-fence.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='func' type-id='9c175524' visibility='default' filepath='include/linux/dma-fence.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dma_fence_func_t' type-id='75d065d2' filepath='include/linux/dma-fence.h' line='105' column='1' id='9c175524'/>
+      <class-decl name='dma_fence' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/dma-fence.h' line='65' column='1' id='ce8c45a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='cff2d845' visibility='default' filepath='include/linux/dma-fence.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='13d85783' visibility='default' filepath='include/linux/dma-fence.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='9d063591' visibility='default' filepath='include/linux/dma-fence.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='context' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-fence.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='seqno' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-fence.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/dma-fence.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/linux/dma-fence.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/linux/dma-fence.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_fence_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/dma-fence.h' line='125' column='1' id='65d79a70'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='use_64bit_seqno' type-id='b50a4934' visibility='default' filepath='include/linux/dma-fence.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_driver_name' type-id='0c4b82c7' visibility='default' filepath='include/linux/dma-fence.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_timeline_name' type-id='0c4b82c7' visibility='default' filepath='include/linux/dma-fence.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enable_signaling' type-id='e33a30a5' visibility='default' filepath='include/linux/dma-fence.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='signaled' type-id='e33a30a5' visibility='default' filepath='include/linux/dma-fence.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wait' type-id='c82424f9' visibility='default' filepath='include/linux/dma-fence.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='release' type-id='90d4d75e' visibility='default' filepath='include/linux/dma-fence.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fence_value_str' type-id='0f859ff9' visibility='default' filepath='include/linux/dma-fence.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='timeline_value_str' type-id='0f859ff9' visibility='default' filepath='include/linux/dma-fence.h' line='262' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dma-fence.h' line='84' column='1' id='9d063591'>
+        <data-member access='private'>
+          <var-decl name='cb_list' type-id='72f469ec' visibility='default' filepath='include/linux/dma-fence.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='timestamp' type-id='fbc017ef' visibility='default' filepath='include/linux/dma-fence.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/dma-fence.h' line='89' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='dma_buf_sysfs_entry' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='415' column='1' id='36721cc5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/dma-buf.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dmabuf' type-id='5e4f599b' visibility='default' filepath='include/linux/dma-buf.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='attachment_uid' type-id='f0981eeb' visibility='default' filepath='include/linux/dma-buf.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='attach_stats_kset' type-id='89b70200' visibility='default' filepath='include/linux/dma-buf.h' line='419' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_buf_attachment' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='448' column='1' id='f01bc09a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dmabuf' type-id='5e4f599b' visibility='default' filepath='include/linux/dma-buf.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/dma-buf.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/dma-buf.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sgt' type-id='4adb0e6a' visibility='default' filepath='include/linux/dma-buf.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dir' type-id='eea6b025' visibility='default' filepath='include/linux/dma-buf.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/dma-buf.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dma_map_attrs' type-id='7359adad' visibility='default' filepath='include/linux/dma-buf.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sysfs_entry' type-id='39154bd3' visibility='default' filepath='include/linux/dma-buf.h' line='461' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_buf_attach_sysfs_entry' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='458' column='1' id='26832c63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/dma-buf.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='map_counter' type-id='f0981eeb' visibility='default' filepath='include/linux/dma-buf.h' line='460' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a62a5dcb' size-in-bits='64' id='0c4b82c7'/>
+      <qualified-type-def type-id='3f8b3d98' const='yes' id='38cc1773'/>
+      <pointer-type-def type-id='38cc1773' size-in-bits='64' id='c248c11b'/>
+      <qualified-type-def type-id='65d79a70' const='yes' id='ee0fc87b'/>
+      <pointer-type-def type-id='ee0fc87b' size-in-bits='64' id='13d85783'/>
+      <pointer-type-def type-id='c201baab' size-in-bits='64' id='5e4f599b'/>
+      <pointer-type-def type-id='26832c63' size-in-bits='64' id='39154bd3'/>
+      <pointer-type-def type-id='f01bc09a' size-in-bits='64' id='e68e04c2'/>
+      <pointer-type-def type-id='36721cc5' size-in-bits='64' id='bd60ed15'/>
+      <pointer-type-def type-id='ce8c45a3' size-in-bits='64' id='28271da3'/>
+      <pointer-type-def type-id='54c5dd35' size-in-bits='64' id='a47516e5'/>
+      <pointer-type-def type-id='d06fbf67' size-in-bits='64' id='340cea9d'/>
+      <pointer-type-def type-id='9977c731' size-in-bits='64' id='b512ba7d'/>
+      <pointer-type-def type-id='88776799' size-in-bits='64' id='127a97dd'/>
+      <pointer-type-def type-id='c3e60881' size-in-bits='64' id='5299fb35'/>
+      <pointer-type-def type-id='8b9912bb' size-in-bits='64' id='97a03e57'/>
+      <pointer-type-def type-id='440843bd' size-in-bits='64' id='24dc58c9'/>
+      <pointer-type-def type-id='70e959e4' size-in-bits='64' id='68074686'/>
+      <pointer-type-def type-id='be9f972f' size-in-bits='64' id='ee920f43'/>
+      <pointer-type-def type-id='2a7fd552' size-in-bits='64' id='82b66a0c'/>
+      <pointer-type-def type-id='43ebe0a8' size-in-bits='64' id='64915dde'/>
+      <pointer-type-def type-id='c49a08f4' size-in-bits='64' id='ac7bd9a2'/>
+      <pointer-type-def type-id='6038b637' size-in-bits='64' id='14bad32f'/>
+      <pointer-type-def type-id='0c98f83d' size-in-bits='64' id='c82424f9'/>
+      <pointer-type-def type-id='2c810892' size-in-bits='64' id='242fbf2c'/>
+      <pointer-type-def type-id='efdb04f5' size-in-bits='64' id='2d7508a9'/>
+      <pointer-type-def type-id='8cdee791' size-in-bits='64' id='e33a30a5'/>
+      <pointer-type-def type-id='ec55eb74' size-in-bits='64' id='f1397309'/>
+      <pointer-type-def type-id='7908d890' size-in-bits='64' id='4e7b299a'/>
+      <pointer-type-def type-id='d299a9b0' size-in-bits='64' id='f191792a'/>
+      <pointer-type-def type-id='45d6b556' size-in-bits='64' id='632039f8'/>
+      <pointer-type-def type-id='9a321b4a' size-in-bits='64' id='eb050ad4'/>
+      <pointer-type-def type-id='7e5de8f5' size-in-bits='64' id='0b475e59'/>
+      <pointer-type-def type-id='da94e28c' size-in-bits='64' id='90d4d75e'/>
+      <pointer-type-def type-id='9a809cc5' size-in-bits='64' id='0f859ff9'/>
+      <pointer-type-def type-id='18c89148' size-in-bits='64' id='75d065d2'/>
+      <pointer-type-def type-id='1971ed3b' size-in-bits='64' id='62243d87'/>
+      <pointer-type-def type-id='a1b495b8' size-in-bits='64' id='a298286a'/>
+      <pointer-type-def type-id='ddfa4afc' size-in-bits='64' id='02838dc6'/>
+      <function-decl name='ion_device_remove_heap' mangled-name='ion_device_remove_heap' filepath='include/linux/ion.h' line='178' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ion_device_remove_heap'>
+        <parameter type-id='ac7bd9a2'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sg_alloc_table' mangled-name='sg_alloc_table' filepath='include/linux/scatterlist.h' line='288' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_alloc_table'>
+        <parameter type-id='4adb0e6a'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ion_buffer_prep_noncached' mangled-name='ion_buffer_prep_noncached' filepath='include/linux/ion.h' line='304' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ion_buffer_prep_noncached'>
+        <parameter type-id='64915dde'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ion_buffer_zero' mangled-name='ion_buffer_zero' filepath='include/linux/ion.h' line='291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ion_buffer_zero'>
+        <parameter type-id='64915dde'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sg_free_table' mangled-name='sg_free_table' filepath='include/linux/scatterlist.h' line='285' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_free_table'>
+        <parameter type-id='4adb0e6a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='a62a5dcb'>
+        <parameter type-id='28271da3'/>
+        <return type-id='80f4b756'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9977c731'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='e68e04c2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='88776799'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c3e60881'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='eea6b025'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8b9912bb'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='440843bd'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='f1397309'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='70e959e4'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='be9f972f'>
+        <parameter type-id='ac7bd9a2'/>
+        <parameter type-id='64915dde'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2a7fd552'>
+        <parameter type-id='ac7bd9a2'/>
+        <parameter type-id='3eb7c31c'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0c98f83d'>
+        <parameter type-id='28271da3'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2c810892'>
+        <parameter type-id='ac7bd9a2'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='efdb04f5'>
+        <parameter type-id='e68e04c2'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='4adb0e6a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8cdee791'>
+        <parameter type-id='28271da3'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7908d890'>
+        <parameter type-id='5e4f599b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d299a9b0'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='e68e04c2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='45d6b556'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9a321b4a'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7e5de8f5'>
+        <parameter type-id='e68e04c2'/>
+        <parameter type-id='4adb0e6a'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da94e28c'>
+        <parameter type-id='28271da3'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9a809cc5'>
+        <parameter type-id='28271da3'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='18c89148'>
+        <parameter type-id='28271da3'/>
+        <parameter type-id='a47516e5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1971ed3b'>
+        <parameter type-id='64915dde'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a1b495b8'>
+        <parameter type-id='5e4f599b'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ddfa4afc'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/staging/android/ion/ion.c' language='LANG_C89'>
+      <class-decl name='ion_heap_data' size-in-bits='416' is-struct='yes' visibility='default' filepath='include/uapi/linux/ion.h' line='101' column='1' id='e608a5c1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/uapi/linux/ion.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ion.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='heap_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ion.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reserved0' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ion.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='reserved1' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ion.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='reserved2' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ion.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e608a5c1' size-in-bits='64' id='10ff3799'/>
+      <function-decl name='ion_alloc' mangled-name='ion_alloc' filepath='drivers/staging/android/ion/ion.c' line='35' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ion_alloc'>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/staging/android/ion/ion.c' line='35' column='1'/>
+        <parameter type-id='f0981eeb' name='heap_id_mask' filepath='drivers/staging/android/ion/ion.c' line='35' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='drivers/staging/android/ion/ion.c' line='36' column='1'/>
+        <return type-id='5e4f599b'/>
+      </function-decl>
+      <function-decl name='ion_free' mangled-name='ion_free' filepath='drivers/staging/android/ion/ion.c' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ion_free'>
+        <parameter type-id='64915dde' name='buffer' filepath='drivers/staging/android/ion/ion.c' line='42' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ion_query_heaps_kernel' mangled-name='ion_query_heaps_kernel' filepath='drivers/staging/android/ion/ion.c' line='65' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ion_query_heaps_kernel'>
+        <parameter type-id='10ff3799' name='hdata' filepath='drivers/staging/android/ion/ion.c' line='65' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/staging/android/ion/ion.c' line='65' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='__ion_device_add_heap' mangled-name='__ion_device_add_heap' filepath='drivers/staging/android/ion/ion.c' line='314' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ion_device_add_heap'>
+        <parameter type-id='ac7bd9a2' name='heap' filepath='drivers/staging/android/ion/ion.c' line='314' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/staging/android/ion/ion.c' line='314' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/staging/android/ion/ion_buffer.c' language='LANG_C89'>
+      <function-decl name='ion_heap_map_kernel' mangled-name='ion_heap_map_kernel' filepath='include/linux/ion.h' line='260' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ion_heap_map_kernel'>
+        <parameter type-id='ac7bd9a2'/>
+        <parameter type-id='64915dde'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/staging/android/ion/ion_dma_buf.c' language='LANG_C89'>
+      <function-decl name='ion_heap_map_user' mangled-name='ion_heap_map_user' filepath='include/linux/ion.h' line='282' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ion_heap_map_user'>
+        <parameter type-id='ac7bd9a2'/>
+        <parameter type-id='64915dde'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/staging/android/ion/ion_heap.c' language='LANG_C89'>
+      <function-decl name='ion_heap_unmap_kernel' mangled-name='ion_heap_unmap_kernel' filepath='drivers/staging/android/ion/ion_heap.c' line='164' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ion_heap_unmap_kernel'>
+        <parameter type-id='ac7bd9a2' name='heap' filepath='drivers/staging/android/ion/ion_heap.c' line='164' column='1'/>
+        <parameter type-id='64915dde' name='buffer' filepath='drivers/staging/android/ion/ion_heap.c' line='165' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/thermal/cpu_cooling.c' language='LANG_C89'>
+      <function-decl name='dev_pm_opp_find_freq_ceil' mangled-name='dev_pm_opp_find_freq_ceil' filepath='include/linux/pm_opp.h' line='107' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_find_freq_ceil'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='02e48bc6'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_get_voltage' mangled-name='dev_pm_opp_get_voltage' filepath='include/linux/pm_opp.h' line='82' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_get_voltage'>
+        <parameter type-id='02e48bc6'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='cpufreq_quick_get' mangled-name='cpufreq_quick_get' filepath='include/linux/cpufreq.h' line='206' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_quick_get'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='get_cpu_idle_time' mangled-name='get_cpu_idle_time' filepath='include/linux/cpufreq.h' line='210' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_cpu_idle_time'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='c0190993'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='3a47d82b'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/thermal/devfreq_cooling.c' language='LANG_C89'>
+      <class-decl name='devfreq_cooling_power' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/devfreq_cooling.h' line='55' column='1' id='3f6ca798'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_static_power' type-id='a7add4f1' visibility='default' filepath='include/linux/devfreq_cooling.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_dynamic_power' type-id='68fba90f' visibility='default' filepath='include/linux/devfreq_cooling.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_real_power' type-id='d4cfedac' visibility='default' filepath='include/linux/devfreq_cooling.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dyn_power_coeff' type-id='7359adad' visibility='default' filepath='include/linux/devfreq_cooling.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3f6ca798' size-in-bits='64' id='0b660ebe'/>
+      <pointer-type-def type-id='1966792a' size-in-bits='64' id='d4cfedac'/>
+      <pointer-type-def type-id='b264761d' size-in-bits='64' id='a7add4f1'/>
+      <pointer-type-def type-id='ebe674bb' size-in-bits='64' id='68fba90f'/>
+      <function-decl name='of_devfreq_cooling_register_power' mangled-name='of_devfreq_cooling_register_power' filepath='drivers/thermal/devfreq_cooling.c' line='505' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_devfreq_cooling_register_power'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/thermal/devfreq_cooling.c' line='505' column='1'/>
+        <parameter type-id='f66fa7f4' name='df' filepath='drivers/thermal/devfreq_cooling.c' line='505' column='1'/>
+        <parameter type-id='0b660ebe' name='dfc_power' filepath='drivers/thermal/devfreq_cooling.c' line='506' column='1'/>
+        <return type-id='2feec21f'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_find_freq_floor' mangled-name='dev_pm_opp_find_freq_floor' filepath='include/linux/pm_opp.h' line='102' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_find_freq_floor'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='02e48bc6'/>
+      </function-decl>
+      <function-decl name='of_devfreq_cooling_register' mangled-name='of_devfreq_cooling_register' filepath='drivers/thermal/devfreq_cooling.c' line='572' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_devfreq_cooling_register'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/thermal/devfreq_cooling.c' line='572' column='1'/>
+        <parameter type-id='f66fa7f4' name='df' filepath='drivers/thermal/devfreq_cooling.c' line='572' column='1'/>
+        <return type-id='2feec21f'/>
+      </function-decl>
+      <function-decl name='devfreq_cooling_unregister' mangled-name='devfreq_cooling_unregister' filepath='drivers/thermal/devfreq_cooling.c' line='592' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_cooling_unregister'>
+        <parameter type-id='2feec21f' name='cdev' filepath='drivers/thermal/devfreq_cooling.c' line='592' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_find_freq_exact' mangled-name='dev_pm_opp_find_freq_exact' filepath='include/linux/pm_opp.h' line='96' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_find_freq_exact'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='02e48bc6'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='1966792a'>
+        <parameter type-id='f66fa7f4'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b264761d'>
+        <parameter type-id='f66fa7f4'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ebe674bb'>
+        <parameter type-id='f66fa7f4'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/thermal/hisi_thermal.c' language='LANG_C89'>
+      <class-decl name='thermal_zone_of_device_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='353' column='1' id='67409b07'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_temp' type-id='bbaaa2c4' visibility='default' filepath='include/linux/thermal.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_trend' type-id='a2abe05f' visibility='default' filepath='include/linux/thermal.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_trips' type-id='ccb77b5b' visibility='default' filepath='include/linux/thermal.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_emul_temp' type-id='dbff155c' visibility='default' filepath='include/linux/thermal.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_trip_temp' type-id='ccb77b5b' visibility='default' filepath='include/linux/thermal.h' line='358' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thermal_trip' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='369' column='1' id='ef6b4e3a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='np' type-id='9a537bbe' visibility='default' filepath='include/linux/thermal.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='temperature' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hysteresis' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='57e8e954' visibility='default' filepath='include/linux/thermal.h' line='373' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='ef6b4e3a' const='yes' id='35306a57'/>
+      <pointer-type-def type-id='35306a57' size-in-bits='64' id='3837a2c7'/>
+      <qualified-type-def type-id='67409b07' const='yes' id='45f3f04e'/>
+      <pointer-type-def type-id='45f3f04e' size-in-bits='64' id='83036d6c'/>
+      <pointer-type-def type-id='dd42ab12' size-in-bits='64' id='dbff155c'/>
+      <pointer-type-def type-id='12f09262' size-in-bits='64' id='bbaaa2c4'/>
+      <pointer-type-def type-id='0c319a47' size-in-bits='64' id='ccb77b5b'/>
+      <pointer-type-def type-id='3f0a3b53' size-in-bits='64' id='a2abe05f'/>
+      <function-decl name='devm_thermal_zone_of_sensor_register' mangled-name='devm_thermal_zone_of_sensor_register' filepath='include/linux/thermal.h' line='383' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_thermal_zone_of_sensor_register'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='83036d6c'/>
+        <return type-id='404b1301'/>
+      </function-decl>
+      <function-decl name='of_thermal_get_trip_points' mangled-name='of_thermal_get_trip_points' filepath='drivers/thermal/thermal_core.h' line='99' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_thermal_get_trip_points'>
+        <parameter type-id='404b1301'/>
+        <return type-id='3837a2c7'/>
+      </function-decl>
+      <function-decl name='of_thermal_get_ntrips' mangled-name='of_thermal_get_ntrips' filepath='drivers/thermal/thermal_core.h' line='96' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_thermal_get_ntrips'>
+        <parameter type-id='404b1301'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='_dev_crit' mangled-name='_dev_crit' filepath='include/linux/device.h' line='1756' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_dev_crit'>
+        <parameter type-id='8df61054'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='thermal_zone_device_update' mangled-name='thermal_zone_device_update' filepath='include/linux/thermal.h' line='441' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_zone_device_update'>
+        <parameter type-id='404b1301'/>
+        <parameter type-id='b5808f5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <enum-decl name='thermal_trip_type' filepath='include/linux/thermal.h' line='66' column='1' id='57e8e954'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='THERMAL_TRIP_ACTIVE' value='0'/>
+        <enumerator name='THERMAL_TRIP_PASSIVE' value='1'/>
+        <enumerator name='THERMAL_TRIP_HOT' value='2'/>
+        <enumerator name='THERMAL_TRIP_CRITICAL' value='3'/>
+      </enum-decl>
+      <function-type size-in-bits='64' id='dd42ab12'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='12f09262'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0c319a47'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3f0a3b53'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='4983ea36'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <pointer-type-def type-id='0ca326b7' size-in-bits='64' id='4983ea36'/>
+      <enum-decl name='thermal_trend' filepath='include/linux/thermal.h' line='73' column='1' id='0ca326b7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='THERMAL_TREND_STABLE' value='0'/>
+        <enumerator name='THERMAL_TREND_RAISING' value='1'/>
+        <enumerator name='THERMAL_TREND_DROPPING' value='2'/>
+        <enumerator name='THERMAL_TREND_RAISE_FULL' value='3'/>
+        <enumerator name='THERMAL_TREND_DROP_FULL' value='4'/>
+      </enum-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/thermal/of-thermal.c' language='LANG_C89'>
+      <function-decl name='of_thermal_is_trip_valid' mangled-name='of_thermal_is_trip_valid' filepath='drivers/thermal/of-thermal.c' line='142' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_thermal_is_trip_valid'>
+        <parameter type-id='404b1301' name='tz' filepath='drivers/thermal/of-thermal.c' line='142' column='1'/>
+        <parameter type-id='95e97e5e' name='trip' filepath='drivers/thermal/of-thermal.c' line='142' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='thermal_zone_of_sensor_register' mangled-name='thermal_zone_of_sensor_register' filepath='drivers/thermal/of-thermal.c' line='484' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_zone_of_sensor_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/thermal/of-thermal.c' line='484' column='1'/>
+        <parameter type-id='95e97e5e' name='sensor_id' filepath='drivers/thermal/of-thermal.c' line='484' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/thermal/of-thermal.c' line='484' column='1'/>
+        <parameter type-id='83036d6c' name='ops' filepath='drivers/thermal/of-thermal.c' line='485' column='1'/>
+        <return type-id='404b1301'/>
+      </function-decl>
+      <function-decl name='of_find_node_by_name' mangled-name='of_find_node_by_name' filepath='include/linux/of.h' line='267' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_node_by_name'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='thermal_zone_of_sensor_unregister' mangled-name='thermal_zone_of_sensor_unregister' filepath='drivers/thermal/of-thermal.c' line='556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_zone_of_sensor_unregister'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/thermal/of-thermal.c' line='556' column='1'/>
+        <parameter type-id='404b1301' name='tzd' filepath='drivers/thermal/of-thermal.c' line='557' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_thermal_zone_of_sensor_unregister' mangled-name='devm_thermal_zone_of_sensor_unregister' filepath='drivers/thermal/of-thermal.c' line='654' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_thermal_zone_of_sensor_unregister'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/thermal/of-thermal.c' line='654' column='1'/>
+        <parameter type-id='404b1301' name='tzd' filepath='drivers/thermal/of-thermal.c' line='655' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/thermal/step_wise.c' language='LANG_C89'>
+      <class-decl name='thermal_cooling_device' size-in-bits='8384' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='130' column='1' id='3ae87f87'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='664ac0b7' visibility='default' filepath='include/linux/thermal.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device' type-id='66e487eb' visibility='default' filepath='include/linux/thermal.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='np' type-id='9a537bbe' visibility='default' filepath='include/linux/thermal.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='devdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/thermal.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='stats' type-id='eaa32e2f' visibility='default' filepath='include/linux/thermal.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='ops' type-id='6f4dc085' visibility='default' filepath='include/linux/thermal.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='updated' type-id='b50a4934' visibility='default' filepath='include/linux/thermal.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/thermal.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='thermal_instances' type-id='72f469ec' visibility='default' filepath='include/linux/thermal.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/thermal.h' line='141' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thermal_cooling_device_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='118' column='1' id='ff1a03f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_max_state' type-id='ff2d9ea5' visibility='default' filepath='include/linux/thermal.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_cur_state' type-id='ff2d9ea5' visibility='default' filepath='include/linux/thermal.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_cur_state' type-id='4b4c62ab' visibility='default' filepath='include/linux/thermal.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_requested_power' type-id='6f31af4c' visibility='default' filepath='include/linux/thermal.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='state2power' type-id='4692f31c' visibility='default' filepath='include/linux/thermal.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='power2state' type-id='c1eac593' visibility='default' filepath='include/linux/thermal.h' line='126' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thermal_zone_device' size-in-bits='10624' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='191' column='1' id='82084f53'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='664ac0b7' visibility='default' filepath='include/linux/thermal.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device' type-id='66e487eb' visibility='default' filepath='include/linux/thermal.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='trips_attribute_group' type-id='e4af473b' visibility='default' filepath='include/linux/thermal.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='trip_temp_attrs' type-id='fd801eb0' visibility='default' filepath='include/linux/thermal.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='trip_type_attrs' type-id='fd801eb0' visibility='default' filepath='include/linux/thermal.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='trip_hyst_attrs' type-id='fd801eb0' visibility='default' filepath='include/linux/thermal.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='devdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/thermal.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='trips' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='trips_disabled' type-id='7359adad' visibility='default' filepath='include/linux/thermal.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='passive_delay' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8288'>
+          <var-decl name='polling_delay' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='temperature' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8352'>
+          <var-decl name='last_temperature' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='emul_temperature' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8416'>
+          <var-decl name='passive' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='prev_low_trip' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='prev_high_trip' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='forced_passive' type-id='f0981eeb' visibility='default' filepath='include/linux/thermal.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8544'>
+          <var-decl name='need_update' type-id='49178f86' visibility='default' filepath='include/linux/thermal.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='ops' type-id='1e6fe389' visibility='default' filepath='include/linux/thermal.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='tzp' type-id='e2cbf964' visibility='default' filepath='include/linux/thermal.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='governor' type-id='6def7c4b' visibility='default' filepath='include/linux/thermal.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='governor_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/thermal.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='thermal_instances' type-id='72f469ec' visibility='default' filepath='include/linux/thermal.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='ida' type-id='46ce60fb' visibility='default' filepath='include/linux/thermal.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/thermal.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/thermal.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='poll_queue' type-id='5ad6e0ef' visibility='default' filepath='include/linux/thermal.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='notify_event' type-id='b5808f5e' visibility='default' filepath='include/linux/thermal.h' line='221' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thermal_attr' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='144' column='1' id='0f035502'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='dbf3947c' visibility='default' filepath='include/linux/thermal.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/linux/thermal.h' line='146' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thermal_zone_device_ops' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='93' column='1' id='cf7993c1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bind' type-id='911521f6' visibility='default' filepath='include/linux/thermal.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unbind' type-id='911521f6' visibility='default' filepath='include/linux/thermal.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_temp' type-id='b09cd03d' visibility='default' filepath='include/linux/thermal.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_trips' type-id='9a2b46ca' visibility='default' filepath='include/linux/thermal.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_mode' type-id='67f4c28a' visibility='default' filepath='include/linux/thermal.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_mode' type-id='dee53645' visibility='default' filepath='include/linux/thermal.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_trip_type' type-id='5e1def9d' visibility='default' filepath='include/linux/thermal.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_trip_temp' type-id='01443742' visibility='default' filepath='include/linux/thermal.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_trip_temp' type-id='9a2b46ca' visibility='default' filepath='include/linux/thermal.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_trip_hyst' type-id='01443742' visibility='default' filepath='include/linux/thermal.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_trip_hyst' type-id='9a2b46ca' visibility='default' filepath='include/linux/thermal.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_crit_temp' type-id='b09cd03d' visibility='default' filepath='include/linux/thermal.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='set_emul_temp' type-id='336c2e63' visibility='default' filepath='include/linux/thermal.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='get_trend' type-id='11d0d204' visibility='default' filepath='include/linux/thermal.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='notify' type-id='3fbbdf8e' visibility='default' filepath='include/linux/thermal.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='thermal_device_mode' filepath='include/linux/thermal.h' line='61' column='1' id='45492188'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='THERMAL_DEVICE_DISABLED' value='0'/>
+        <enumerator name='THERMAL_DEVICE_ENABLED' value='1'/>
+      </enum-decl>
+      <enum-decl name='thermal_trip_type' filepath='include/linux/thermal.h' line='66' column='1' id='57e8e954'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='THERMAL_TRIP_ACTIVE' value='0'/>
+        <enumerator name='THERMAL_TRIP_PASSIVE' value='1'/>
+        <enumerator name='THERMAL_TRIP_HOT' value='2'/>
+        <enumerator name='THERMAL_TRIP_CRITICAL' value='3'/>
+      </enum-decl>
+      <enum-decl name='thermal_trend' filepath='include/linux/thermal.h' line='73' column='1' id='0ca326b7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='THERMAL_TREND_STABLE' value='0'/>
+        <enumerator name='THERMAL_TREND_RAISING' value='1'/>
+        <enumerator name='THERMAL_TREND_DROPPING' value='2'/>
+        <enumerator name='THERMAL_TREND_RAISE_FULL' value='3'/>
+        <enumerator name='THERMAL_TREND_DROP_FULL' value='4'/>
+      </enum-decl>
+      <class-decl name='thermal_zone_params' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='280' column='1' id='d6772b4e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='governor_name' type-id='664ac0b7' visibility='default' filepath='include/linux/thermal.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='no_hwmon' type-id='b50a4934' visibility='default' filepath='include/linux/thermal.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_tbps' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tbp' type-id='825b5cd1' visibility='default' filepath='include/linux/thermal.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sustainable_power' type-id='19c2251e' visibility='default' filepath='include/linux/thermal.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='k_po' type-id='a7832498' visibility='default' filepath='include/linux/thermal.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='k_pu' type-id='a7832498' visibility='default' filepath='include/linux/thermal.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='k_i' type-id='a7832498' visibility='default' filepath='include/linux/thermal.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='k_d' type-id='a7832498' visibility='default' filepath='include/linux/thermal.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='integral_cutoff' type-id='a7832498' visibility='default' filepath='include/linux/thermal.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='slope' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='offset' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='329' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thermal_bind_params' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='245' column='1' id='1e0c0ad9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cdev' type-id='2feec21f' visibility='default' filepath='include/linux/thermal.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='weight' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='trip_mask' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='binding_limits' type-id='1d2c2b85' visibility='default' filepath='include/linux/thermal.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='match' type-id='911521f6' visibility='default' filepath='include/linux/thermal.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thermal_governor' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='236' column='1' id='2901941b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/linux/thermal.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bind_to_tz' type-id='50293ce4' visibility='default' filepath='include/linux/thermal.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unbind_from_tz' type-id='7a1ba1ed' visibility='default' filepath='include/linux/thermal.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='throttle' type-id='336c2e63' visibility='default' filepath='include/linux/thermal.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='governor_list' type-id='72f469ec' visibility='default' filepath='include/linux/thermal.h' line='241' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ida' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/idr.h' line='244' column='1' id='46ce60fb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xa' type-id='d39738ac' visibility='default' filepath='include/linux/idr.h' line='245' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='thermal_notify_event' filepath='include/linux/thermal.h' line='82' column='1' id='b5808f5e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='THERMAL_EVENT_UNSPECIFIED' value='0'/>
+        <enumerator name='THERMAL_EVENT_TEMP_SAMPLE' value='1'/>
+        <enumerator name='THERMAL_TRIP_VIOLATED' value='2'/>
+        <enumerator name='THERMAL_TRIP_CHANGED' value='3'/>
+        <enumerator name='THERMAL_DEVICE_DOWN' value='4'/>
+        <enumerator name='THERMAL_DEVICE_UP' value='5'/>
+        <enumerator name='THERMAL_DEVICE_POWER_CAPABILITY_CHANGED' value='6'/>
+        <enumerator name='THERMAL_TABLE_CHANGED' value='7'/>
+      </enum-decl>
+      <qualified-type-def type-id='ff1a03f4' const='yes' id='e542e4ad'/>
+      <pointer-type-def type-id='e542e4ad' size-in-bits='64' id='6f4dc085'/>
+      <pointer-type-def type-id='51dca1f7' size-in-bits='64' id='c1eac593'/>
+      <pointer-type-def type-id='9762f152' size-in-bits='64' id='6f31af4c'/>
+      <pointer-type-def type-id='35aa2942' size-in-bits='64' id='4692f31c'/>
+      <pointer-type-def type-id='e7176377' size-in-bits='64' id='4b4c62ab'/>
+      <pointer-type-def type-id='7fd43619' size-in-bits='64' id='ff2d9ea5'/>
+      <pointer-type-def type-id='dc678892' size-in-bits='64' id='50293ce4'/>
+      <pointer-type-def type-id='48d225c1' size-in-bits='64' id='dee53645'/>
+      <pointer-type-def type-id='1d34d2c7' size-in-bits='64' id='336c2e63'/>
+      <pointer-type-def type-id='002a7109' size-in-bits='64' id='b09cd03d'/>
+      <pointer-type-def type-id='abcb190c' size-in-bits='64' id='3fbbdf8e'/>
+      <pointer-type-def type-id='c7253970' size-in-bits='64' id='9a2b46ca'/>
+      <pointer-type-def type-id='38a09a00' size-in-bits='64' id='01443742'/>
+      <pointer-type-def type-id='c505fce2' size-in-bits='64' id='11d0d204'/>
+      <pointer-type-def type-id='24451821' size-in-bits='64' id='5e1def9d'/>
+      <pointer-type-def type-id='a2b185bc' size-in-bits='64' id='911521f6'/>
+      <pointer-type-def type-id='69649a08' size-in-bits='64' id='67f4c28a'/>
+      <pointer-type-def type-id='0f035502' size-in-bits='64' id='fd801eb0'/>
+      <pointer-type-def type-id='1e0c0ad9' size-in-bits='64' id='825b5cd1'/>
+      <pointer-type-def type-id='3ae87f87' size-in-bits='64' id='2feec21f'/>
+      <pointer-type-def type-id='45492188' size-in-bits='64' id='1d81d2cf'/>
+      <pointer-type-def type-id='2901941b' size-in-bits='64' id='6def7c4b'/>
+      <pointer-type-def type-id='0ca326b7' size-in-bits='64' id='4983ea36'/>
+      <pointer-type-def type-id='57e8e954' size-in-bits='64' id='478384af'/>
+      <pointer-type-def type-id='82084f53' size-in-bits='64' id='404b1301'/>
+      <pointer-type-def type-id='cf7993c1' size-in-bits='64' id='1e6fe389'/>
+      <pointer-type-def type-id='d6772b4e' size-in-bits='64' id='e2cbf964'/>
+      <pointer-type-def type-id='e1de5cb1' size-in-bits='64' id='7a1ba1ed'/>
+      <function-decl name='thermal_cdev_update' mangled-name='thermal_cdev_update' filepath='include/linux/thermal.h' line='464' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_cdev_update'>
+        <parameter type-id='2feec21f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='51dca1f7'>
+        <parameter type-id='2feec21f'/>
+        <parameter type-id='404b1301'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9762f152'>
+        <parameter type-id='2feec21f'/>
+        <parameter type-id='404b1301'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='35aa2942'>
+        <parameter type-id='2feec21f'/>
+        <parameter type-id='404b1301'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e7176377'>
+        <parameter type-id='2feec21f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7fd43619'>
+        <parameter type-id='2feec21f'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dc678892'>
+        <parameter type-id='404b1301'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='48d225c1'>
+        <parameter type-id='404b1301'/>
+        <parameter type-id='45492188'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1d34d2c7'>
+        <parameter type-id='404b1301'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='002a7109'>
+        <parameter type-id='404b1301'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='abcb190c'>
+        <parameter type-id='404b1301'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='57e8e954'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c7253970'>
+        <parameter type-id='404b1301'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='38a09a00'>
+        <parameter type-id='404b1301'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c505fce2'>
+        <parameter type-id='404b1301'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='4983ea36'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24451821'>
+        <parameter type-id='404b1301'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='478384af'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2b185bc'>
+        <parameter type-id='404b1301'/>
+        <parameter type-id='2feec21f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='69649a08'>
+        <parameter type-id='404b1301'/>
+        <parameter type-id='1d81d2cf'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/thermal/thermal_core.c' language='LANG_C89'>
+      <function-decl name='thermal_zone_get_temp' mangled-name='thermal_zone_get_temp' filepath='include/linux/thermal.h' line='457' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_zone_get_temp'>
+        <parameter type-id='404b1301'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='thermal_cooling_device_register' mangled-name='thermal_cooling_device_register' filepath='drivers/thermal/thermal_core.c' line='1024' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_cooling_device_register'>
+        <parameter type-id='80f4b756' name='type' filepath='drivers/thermal/thermal_core.c' line='1024' column='1'/>
+        <parameter type-id='eaa32e2f' name='devdata' filepath='drivers/thermal/thermal_core.c' line='1024' column='1'/>
+        <parameter type-id='6f4dc085' name='ops' filepath='drivers/thermal/thermal_core.c' line='1025' column='1'/>
+        <return type-id='2feec21f'/>
+      </function-decl>
+      <function-decl name='thermal_of_cooling_device_register' mangled-name='thermal_of_cooling_device_register' filepath='drivers/thermal/thermal_core.c' line='1047' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_of_cooling_device_register'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/thermal/thermal_core.c' line='1047' column='1'/>
+        <parameter type-id='80f4b756' name='type' filepath='drivers/thermal/thermal_core.c' line='1048' column='1'/>
+        <parameter type-id='eaa32e2f' name='devdata' filepath='drivers/thermal/thermal_core.c' line='1048' column='1'/>
+        <parameter type-id='6f4dc085' name='ops' filepath='drivers/thermal/thermal_core.c' line='1049' column='1'/>
+        <return type-id='2feec21f'/>
+      </function-decl>
+      <function-decl name='devm_thermal_of_cooling_device_register' mangled-name='devm_thermal_of_cooling_device_register' filepath='drivers/thermal/thermal_core.c' line='1079' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_thermal_of_cooling_device_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/thermal/thermal_core.c' line='1079' column='1'/>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/thermal/thermal_core.c' line='1080' column='1'/>
+        <parameter type-id='26a90f95' name='type' filepath='drivers/thermal/thermal_core.c' line='1081' column='1'/>
+        <parameter type-id='eaa32e2f' name='devdata' filepath='drivers/thermal/thermal_core.c' line='1081' column='1'/>
+        <parameter type-id='6f4dc085' name='ops' filepath='drivers/thermal/thermal_core.c' line='1082' column='1'/>
+        <return type-id='2feec21f'/>
+      </function-decl>
+      <function-decl name='thermal_zone_get_zone_by_name' mangled-name='thermal_zone_get_zone_by_name' filepath='drivers/thermal/thermal_core.c' line='1439' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_zone_get_zone_by_name'>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/thermal/thermal_core.c' line='1439' column='1'/>
+        <return type-id='404b1301'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/thermal/user_space.c' language='LANG_C89'>
+      <enum-decl name='kobject_action' filepath='include/linux/kobject.h' line='54' column='1' id='7d635811'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='KOBJ_ADD' value='0'/>
+        <enumerator name='KOBJ_REMOVE' value='1'/>
+        <enumerator name='KOBJ_CHANGE' value='2'/>
+        <enumerator name='KOBJ_MOVE' value='3'/>
+        <enumerator name='KOBJ_ONLINE' value='4'/>
+        <enumerator name='KOBJ_OFFLINE' value='5'/>
+        <enumerator name='KOBJ_BIND' value='6'/>
+        <enumerator name='KOBJ_UNBIND' value='7'/>
+        <enumerator name='KOBJ_MAX' value='8'/>
+      </enum-decl>
+      <function-decl name='kobject_uevent_env' mangled-name='kobject_uevent_env' filepath='include/linux/kobject.h' line='257' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_uevent_env'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='7d635811'/>
+        <parameter type-id='9b23c9ad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/tty/hvc/hvc_console.c' language='LANG_C89'>
+      <class-decl name='hv_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='54' column='1' id='06b0b498'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_chars' type-id='b925d171' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='put_chars' type-id='cbcd023c' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flush' type-id='6d72cd27' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='notifier_add' type-id='38ea827b' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='notifier_del' type-id='4b6c509a' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='notifier_hangup' type-id='4b6c509a' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='tiocmget' type-id='6cd5b5fc' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tiocmset' type-id='7d48d834' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dtr_rts' type-id='4b6c509a' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hvc_struct' size-in-bits='4032' is-struct='yes' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='35' column='1' id='79ba66e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='7e1e521a' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2976'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='do_wakeup' type-id='95e97e5e' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='outbuf' type-id='26a90f95' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='outbuf_size' type-id='95e97e5e' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3168'>
+          <var-decl name='n_outbuf' type-id='95e97e5e' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='vtermno' type-id='8f92235e' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='ops' type-id='f319e2c5' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='irq_requested' type-id='95e97e5e' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3360'>
+          <var-decl name='data' type-id='95e97e5e' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='ws' type-id='a818b7a0' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='tty_resize' type-id='ef9025d0' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='next' type-id='72f469ec' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='06b0b498' const='yes' id='09f4a16d'/>
+      <pointer-type-def type-id='09f4a16d' size-in-bits='64' id='f319e2c5'/>
+      <pointer-type-def type-id='79ba66e0' size-in-bits='64' id='352b95f6'/>
+      <pointer-type-def type-id='7f3ed7a2' size-in-bits='64' id='6cd5b5fc'/>
+      <pointer-type-def type-id='a0807697' size-in-bits='64' id='38ea827b'/>
+      <pointer-type-def type-id='4e3458ca' size-in-bits='64' id='7d48d834'/>
+      <pointer-type-def type-id='86933835' size-in-bits='64' id='b925d171'/>
+      <pointer-type-def type-id='de7351ca' size-in-bits='64' id='cbcd023c'/>
+      <pointer-type-def type-id='66781033' size-in-bits='64' id='6d72cd27'/>
+      <pointer-type-def type-id='8cfd5cb8' size-in-bits='64' id='4b6c509a'/>
+      <function-decl name='hvc_instantiate' mangled-name='hvc_instantiate' filepath='drivers/tty/hvc/hvc_console.c' line='285' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hvc_instantiate'>
+        <parameter type-id='8f92235e' name='vtermno' filepath='drivers/tty/hvc/hvc_console.c' line='285' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/tty/hvc/hvc_console.c' line='285' column='1'/>
+        <parameter type-id='f319e2c5' name='ops' filepath='drivers/tty/hvc/hvc_console.c' line='285' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hvc_kick' mangled-name='hvc_kick' filepath='drivers/tty/hvc/hvc_console.c' line='313' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hvc_kick'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='hvc_poll' mangled-name='hvc_poll' filepath='drivers/tty/hvc/hvc_console.c' line='762' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hvc_poll'>
+        <parameter type-id='352b95f6' name='hp' filepath='drivers/tty/hvc/hvc_console.c' line='762' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__hvc_resize' mangled-name='__hvc_resize' filepath='drivers/tty/hvc/hvc_console.c' line='778' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__hvc_resize'>
+        <parameter type-id='352b95f6' name='hp' filepath='drivers/tty/hvc/hvc_console.c' line='778' column='1'/>
+        <parameter type-id='a818b7a0' name='ws' filepath='drivers/tty/hvc/hvc_console.c' line='778' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='hvc_alloc' mangled-name='hvc_alloc' filepath='drivers/tty/hvc/hvc_console.c' line='911' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hvc_alloc'>
+        <parameter type-id='8f92235e' name='vtermno' filepath='drivers/tty/hvc/hvc_console.c' line='911' column='1'/>
+        <parameter type-id='95e97e5e' name='data' filepath='drivers/tty/hvc/hvc_console.c' line='911' column='1'/>
+        <parameter type-id='f319e2c5' name='ops' filepath='drivers/tty/hvc/hvc_console.c' line='912' column='1'/>
+        <parameter type-id='95e97e5e' name='outbuf_size' filepath='drivers/tty/hvc/hvc_console.c' line='913' column='1'/>
+        <return type-id='352b95f6'/>
+      </function-decl>
+      <function-decl name='hvc_remove' mangled-name='hvc_remove' filepath='drivers/tty/hvc/hvc_console.c' line='979' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hvc_remove'>
+        <parameter type-id='352b95f6' name='hp' filepath='drivers/tty/hvc/hvc_console.c' line='979' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='7f3ed7a2'>
+        <parameter type-id='352b95f6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a0807697'>
+        <parameter type-id='352b95f6'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4e3458ca'>
+        <parameter type-id='352b95f6'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='86933835'>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='de7351ca'>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='66781033'>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8cfd5cb8'>
+        <parameter type-id='352b95f6'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <class-decl name='tty_port' size-in-bits='2944' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='230' column='1' id='7e1e521a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='6b1bde38' visibility='default' filepath='include/linux/tty.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tty' type-id='572fbdcb' visibility='default' filepath='include/linux/tty.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='itty' type-id='572fbdcb' visibility='default' filepath='include/linux/tty.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ops' type-id='103756a0' visibility='default' filepath='include/linux/tty.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='client_ops' type-id='8cd9dbc0' visibility='default' filepath='include/linux/tty.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/tty.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='blocked_open' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='open_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/tty.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='delta_msr_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/tty.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='iflags' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='console' type-id='002ac4a6' visibility='default' filepath='include/linux/tty.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='low_latency' type-id='002ac4a6' visibility='default' filepath='include/linux/tty.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='buf_mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='xmit_buf' type-id='cf536864' visibility='default' filepath='include/linux/tty.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='close_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/tty.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2784'>
+          <var-decl name='closing_wait' type-id='f0981eeb' visibility='default' filepath='include/linux/tty.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='drain_delay' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/tty.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='client_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/tty.h' line='254' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='winsize' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/asm-generic/termios.h' line='15' column='1' id='a818b7a0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ws_row' type-id='8efea9e5' visibility='default' filepath='include/uapi/asm-generic/termios.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ws_col' type-id='8efea9e5' visibility='default' filepath='include/uapi/asm-generic/termios.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ws_xpixel' type-id='8efea9e5' visibility='default' filepath='include/uapi/asm-generic/termios.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='ws_ypixel' type-id='8efea9e5' visibility='default' filepath='include/uapi/asm-generic/termios.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='cf470d6a' size-in-bits='64' id='8cd9dbc0'/>
+      <pointer-type-def type-id='6e03f2ca' size-in-bits='64' id='103756a0'/>
+      <class-decl name='tty_bufhead' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='85' column='1' id='6b1bde38'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='a150e667' visibility='default' filepath='include/linux/tty.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/tty.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='priority' type-id='49178f86' visibility='default' filepath='include/linux/tty.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='sentinel' type-id='2f351d1f' visibility='default' filepath='include/linux/tty.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='free' type-id='77df194e' visibility='default' filepath='include/linux/tty.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mem_used' type-id='49178f86' visibility='default' filepath='include/linux/tty.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='mem_limit' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tail' type-id='a150e667' visibility='default' filepath='include/linux/tty.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4c8d9cad' size-in-bits='64' id='572fbdcb'/>
+      <qualified-type-def type-id='2a8ca227' const='yes' id='cf470d6a'/>
+      <qualified-type-def type-id='7778009d' const='yes' id='6e03f2ca'/>
+      <class-decl name='tty_buffer' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='58' column='1' id='2f351d1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='053892cc' visibility='default' filepath='include/linux/tty.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='used' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='size' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='commit' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='read' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='c99b5ecd' visibility='default' filepath='include/linux/tty.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_struct' size-in-bits='5952' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='285' column='1' id='4c8d9cad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/tty.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/tty.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver' type-id='c2b4b27b' visibility='default' filepath='include/linux/tty.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='f2c18b44' visibility='default' filepath='include/linux/tty.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ldisc_sem' type-id='d3aa38f0' visibility='default' filepath='include/linux/tty.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ldisc' type-id='e0bbd59c' visibility='default' filepath='include/linux/tty.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_write_lock' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='legacy_mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='throttle_mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='termios_rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/tty.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='winsize_mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='ctrl_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/tty.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='flow_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/tty.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='termios' type-id='2f8662b5' visibility='default' filepath='include/linux/tty.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='termios_locked' type-id='2f8662b5' visibility='default' filepath='include/linux/tty.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='termiox' type-id='684d860d' visibility='default' filepath='include/linux/tty.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='name' type-id='59daf3ef' visibility='default' filepath='include/linux/tty.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='pgrp' type-id='b94e5398' visibility='default' filepath='include/linux/tty.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='session' type-id='b94e5398' visibility='default' filepath='include/linux/tty.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3744'>
+          <var-decl name='winsize' type-id='a818b7a0' visibility='default' filepath='include/linux/tty.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='stopped' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='flow_stopped' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='unused' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='hw_stopped' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='ctrl_status' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='packet' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='unused_ctrl' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='receive_room' type-id='f0981eeb' visibility='default' filepath='include/linux/tty.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4064'>
+          <var-decl name='flow_change' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='link' type-id='572fbdcb' visibility='default' filepath='include/linux/tty.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='fasync' type-id='5bb9c75d' visibility='default' filepath='include/linux/tty.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='write_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/tty.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='read_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/tty.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='hangup_work' type-id='ef9025d0' visibility='default' filepath='include/linux/tty.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='disc_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/tty.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/tty.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='files_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/tty.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='tty_files' type-id='72f469ec' visibility='default' filepath='include/linux/tty.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='closing' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='write_buf' type-id='cf536864' visibility='default' filepath='include/linux/tty.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='write_cnt' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='SAK_work' type-id='ef9025d0' visibility='default' filepath='include/linux/tty.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='port' type-id='ec77b5b8' visibility='default' filepath='include/linux/tty.h' line='344' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2f351d1f' size-in-bits='64' id='a150e667'/>
+      <pointer-type-def type-id='559d6206' size-in-bits='64' id='f2c18b44'/>
+      <class-decl name='ktermios' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='32' column='1' id='2f8662b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='c_iflag' type-id='241ce6f8' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='c_oflag' type-id='241ce6f8' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='c_cflag' type-id='241ce6f8' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='c_lflag' type-id='241ce6f8' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='c_line' type-id='fb7c6451' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='c_cc' type-id='8f04ba62' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='c_ispeed' type-id='6a8e8a14' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='c_ospeed' type-id='6a8e8a14' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ld_semaphore' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/tty_ldisc.h' line='133' column='1' id='d3aa38f0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f22a8abb' visibility='default' filepath='include/linux/tty_ldisc.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/tty_ldisc.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='wait_readers' type-id='f0981eeb' visibility='default' filepath='include/linux/tty_ldisc.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read_wait' type-id='72f469ec' visibility='default' filepath='include/linux/tty_ldisc.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write_wait' type-id='72f469ec' visibility='default' filepath='include/linux/tty_ldisc.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_port_client_operations' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='223' column='1' id='2a8ca227'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='receive_buf' type-id='1a7b1e1d' visibility='default' filepath='include/linux/tty.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write_wakeup' type-id='7e5b379d' visibility='default' filepath='include/linux/tty.h' line='225' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_port_operations' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='205' column='1' id='7778009d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='carrier_raised' type-id='5626e636' visibility='default' filepath='include/linux/tty.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dtr_rts' type-id='21b6f944' visibility='default' filepath='include/linux/tty.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shutdown' type-id='7e5b379d' visibility='default' filepath='include/linux/tty.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='activate' type-id='62d26ff9' visibility='default' filepath='include/linux/tty.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='destruct' type-id='7e5b379d' visibility='default' filepath='include/linux/tty.h' line='220' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b855e40d' size-in-bits='64' id='684d860d'/>
+      <pointer-type-def type-id='9b27c78b' size-in-bits='64' id='c2b4b27b'/>
+      <pointer-type-def type-id='f87db0b6' size-in-bits='64' id='e0bbd59c'/>
+      <pointer-type-def type-id='7e1e521a' size-in-bits='64' id='ec77b5b8'/>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/tty.h' line='59' column='1' id='053892cc'>
+        <data-member access='private'>
+          <var-decl name='next' type-id='a150e667' visibility='default' filepath='include/linux/tty.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='free' type-id='c5ccfee8' visibility='default' filepath='include/linux/tty.h' line='61' column='1'/>
+        </data-member>
+      </union-decl>
+      <array-type-def dimensions='1' type-id='fb7c6451' size-in-bits='152' id='8f04ba62'>
+        <subrange length='19' type-id='7ff19f0f' id='448ee30f'/>
+      </array-type-def>
+      <qualified-type-def type-id='b8553c6b' const='yes' id='559d6206'/>
+      <pointer-type-def type-id='c443a9fc' size-in-bits='64' id='5626e636'/>
+      <pointer-type-def type-id='266b9741' size-in-bits='64' id='1a7b1e1d'/>
+      <pointer-type-def type-id='4aaf059d' size-in-bits='64' id='62d26ff9'/>
+      <class-decl name='termiox' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/termios.h' line='10' column='1' id='b855e40d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x_hflag' type-id='d315442e' visibility='default' filepath='include/uapi/linux/termios.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='x_cflag' type-id='d315442e' visibility='default' filepath='include/uapi/linux/termios.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='x_rflag' type-id='811c9338' visibility='default' filepath='include/uapi/linux/termios.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='x_sflag' type-id='d315442e' visibility='default' filepath='include/uapi/linux/termios.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_driver' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/tty_driver.h' line='302' column='1' id='9b27c78b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_driver.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/tty_driver.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cdevs' type-id='5b4d58e9' visibility='default' filepath='include/linux/tty_driver.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/linux/tty_driver.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_name' type-id='80f4b756' visibility='default' filepath='include/linux/tty_driver.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/tty_driver.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='name_base' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_driver.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='major' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_driver.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='minor_start' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_driver.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='num' type-id='f0981eeb' visibility='default' filepath='include/linux/tty_driver.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='type' type-id='a2185560' visibility='default' filepath='include/linux/tty_driver.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='subtype' type-id='a2185560' visibility='default' filepath='include/linux/tty_driver.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='init_termios' type-id='2f8662b5' visibility='default' filepath='include/linux/tty_driver.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/tty_driver.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='proc_entry' type-id='d077e928' visibility='default' filepath='include/linux/tty_driver.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='other' type-id='c2b4b27b' visibility='default' filepath='include/linux/tty_driver.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ttys' type-id='2027e7a0' visibility='default' filepath='include/linux/tty_driver.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='ports' type-id='d272d4d6' visibility='default' filepath='include/linux/tty_driver.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='termios' type-id='d910a7dd' visibility='default' filepath='include/linux/tty_driver.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='driver_state' type-id='eaa32e2f' visibility='default' filepath='include/linux/tty_driver.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ops' type-id='f2c18b44' visibility='default' filepath='include/linux/tty_driver.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='tty_drivers' type-id='72f469ec' visibility='default' filepath='include/linux/tty_driver.h' line='333' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_ldisc' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/tty_ldisc.h' line='215' column='1' id='f87db0b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='9d632ac5' visibility='default' filepath='include/linux/tty_ldisc.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tty' type-id='572fbdcb' visibility='default' filepath='include/linux/tty_ldisc.h' line='217' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='cc_t' type-id='002ac4a6' filepath='include/uapi/asm-generic/termbits.h' line='7' column='1' id='fb7c6451'/>
+      <typedef-decl name='speed_t' type-id='f0981eeb' filepath='include/uapi/asm-generic/termbits.h' line='8' column='1' id='6a8e8a14'/>
+      <typedef-decl name='tcflag_t' type-id='f0981eeb' filepath='include/uapi/asm-generic/termbits.h' line='9' column='1' id='241ce6f8'/>
+      <pointer-type-def type-id='d7741e39' size-in-bits='64' id='7e5b379d'/>
+      <pointer-type-def type-id='74edcdba' size-in-bits='64' id='21b6f944'/>
+      <array-type-def dimensions='1' type-id='d315442e' size-in-bits='80' id='811c9338'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <pointer-type-def type-id='3e6eb93a' size-in-bits='64' id='5b4d58e9'/>
+      <pointer-type-def type-id='e55856e5' size-in-bits='64' id='d910a7dd'/>
+      <class-decl name='tty_operations' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/tty_driver.h' line='254' column='1' id='b8553c6b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lookup' type-id='dd354844' visibility='default' filepath='include/linux/tty_driver.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='install' type-id='b8fa1170' visibility='default' filepath='include/linux/tty_driver.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='remove' type-id='8127e1dd' visibility='default' filepath='include/linux/tty_driver.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='open' type-id='574ff926' visibility='default' filepath='include/linux/tty_driver.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='close' type-id='35f07b8f' visibility='default' filepath='include/linux/tty_driver.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='shutdown' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cleanup' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='write' type-id='74005b57' visibility='default' filepath='include/linux/tty_driver.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='put_char' type-id='20a1c8e7' visibility='default' filepath='include/linux/tty_driver.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='flush_chars' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='write_room' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_driver.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='chars_in_buffer' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_driver.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ioctl' type-id='18d7129a' visibility='default' filepath='include/linux/tty_driver.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='compat_ioctl' type-id='0b8da5f6' visibility='default' filepath='include/linux/tty_driver.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_termios' type-id='1779e61d' visibility='default' filepath='include/linux/tty_driver.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='throttle' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='unthrottle' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='stop' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='start' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hangup' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='break_ctl' type-id='61019833' visibility='default' filepath='include/linux/tty_driver.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='flush_buffer' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='set_ldisc' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='wait_until_sent' type-id='bc0ca82e' visibility='default' filepath='include/linux/tty_driver.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='send_xchar' type-id='f3d2e9a7' visibility='default' filepath='include/linux/tty_driver.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='tiocmget' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_driver.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='tiocmset' type-id='24725b0c' visibility='default' filepath='include/linux/tty_driver.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='resize' type-id='20174b1f' visibility='default' filepath='include/linux/tty_driver.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='set_termiox' type-id='ebf0489c' visibility='default' filepath='include/linux/tty_driver.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='get_icount' type-id='9cc1e100' visibility='default' filepath='include/linux/tty_driver.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='get_serial' type-id='dc2036b2' visibility='default' filepath='include/linux/tty_driver.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='set_serial' type-id='dc2036b2' visibility='default' filepath='include/linux/tty_driver.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='show_fdinfo' type-id='25c6126f' visibility='default' filepath='include/linux/tty_driver.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='proc_show' type-id='0131eb61' visibility='default' filepath='include/linux/tty_driver.h' line='299' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='053f72e5' size-in-bits='64' id='9d632ac5'/>
+      <pointer-type-def type-id='ec77b5b8' size-in-bits='64' id='d272d4d6'/>
+      <pointer-type-def type-id='572fbdcb' size-in-bits='64' id='2027e7a0'/>
+      <pointer-type-def type-id='439a4d86' size-in-bits='64' id='b8fa1170'/>
+      <pointer-type-def type-id='0f590202' size-in-bits='64' id='84d8e9b4'/>
+      <pointer-type-def type-id='1e330b13' size-in-bits='64' id='74005b57'/>
+      <pointer-type-def type-id='1621811c' size-in-bits='64' id='574ff926'/>
+      <pointer-type-def type-id='39fc1af7' size-in-bits='64' id='61019833'/>
+      <pointer-type-def type-id='53878b76' size-in-bits='64' id='9cc1e100'/>
+      <pointer-type-def type-id='f139a2f0' size-in-bits='64' id='dc2036b2'/>
+      <pointer-type-def type-id='e03cf6d2' size-in-bits='64' id='ebf0489c'/>
+      <pointer-type-def type-id='c6077113' size-in-bits='64' id='20a1c8e7'/>
+      <pointer-type-def type-id='3e33342a' size-in-bits='64' id='24725b0c'/>
+      <pointer-type-def type-id='31975058' size-in-bits='64' id='18d7129a'/>
+      <pointer-type-def type-id='a721b4ab' size-in-bits='64' id='20174b1f'/>
+      <pointer-type-def type-id='2f8662b5' size-in-bits='64' id='e55856e5'/>
+      <pointer-type-def type-id='b8a3dbd4' size-in-bits='64' id='0b8da5f6'/>
+      <class-decl name='tty_ldisc_ops' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/tty_ldisc.h' line='175' column='1' id='053f72e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_ldisc.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/tty_ldisc.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_ldisc.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_ldisc.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='open' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_ldisc.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='close' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_ldisc.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flush_buffer' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_ldisc.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read' type-id='ac9bc941' visibility='default' filepath='include/linux/tty_ldisc.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='write' type-id='01db3d7c' visibility='default' filepath='include/linux/tty_ldisc.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ioctl' type-id='1f6f58f4' visibility='default' filepath='include/linux/tty_ldisc.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='compat_ioctl' type-id='1f6f58f4' visibility='default' filepath='include/linux/tty_ldisc.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_termios' type-id='1779e61d' visibility='default' filepath='include/linux/tty_ldisc.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='poll' type-id='9fe65c08' visibility='default' filepath='include/linux/tty_ldisc.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='hangup' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_ldisc.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='receive_buf' type-id='71f0211c' visibility='default' filepath='include/linux/tty_ldisc.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='write_wakeup' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_ldisc.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dcd_change' type-id='aef0224d' visibility='default' filepath='include/linux/tty_ldisc.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='receive_buf2' type-id='c6e84913' visibility='default' filepath='include/linux/tty_ldisc.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='owner' type-id='2730d016' visibility='default' filepath='include/linux/tty_ldisc.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='refcount' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_ldisc.h' line='212' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9728e02a' size-in-bits='64' id='dd354844'/>
+      <pointer-type-def type-id='ac104281' size-in-bits='64' id='8127e1dd'/>
+      <pointer-type-def type-id='9f5ca0a3' size-in-bits='64' id='1ee0b597'/>
+      <pointer-type-def type-id='46af63cb' size-in-bits='64' id='f3d2e9a7'/>
+      <pointer-type-def type-id='2914f7c3' size-in-bits='64' id='35f07b8f'/>
+      <pointer-type-def type-id='c83cb72c' size-in-bits='64' id='bc0ca82e'/>
+      <pointer-type-def type-id='ecd721d1' size-in-bits='64' id='1779e61d'/>
+      <pointer-type-def type-id='117b6b23' size-in-bits='64' id='25c6126f'/>
+      <pointer-type-def type-id='86ee0347' size-in-bits='64' id='c6e84913'/>
+      <pointer-type-def type-id='b99a3102' size-in-bits='64' id='1f6f58f4'/>
+      <pointer-type-def type-id='39ed8dbe' size-in-bits='64' id='9fe65c08'/>
+      <pointer-type-def type-id='9babdafa' size-in-bits='64' id='01db3d7c'/>
+      <pointer-type-def type-id='1f060985' size-in-bits='64' id='ac9bc941'/>
+      <pointer-type-def type-id='da22736a' size-in-bits='64' id='71f0211c'/>
+      <pointer-type-def type-id='3f9037c9' size-in-bits='64' id='aef0224d'/>
+      <function-type size-in-bits='64' id='86ee0347'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b99a3102'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='39ed8dbe'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f0acc909'/>
+        <return type-id='8f254b08'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9babdafa'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1f060985'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da22736a'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3f9037c9'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/tty/n_null.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='d315442e' size-in-bits='80' id='811c9338'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='fb7c6451' size-in-bits='152' id='8f04ba62'>
+        <subrange length='19' type-id='7ff19f0f' id='448ee30f'/>
+      </array-type-def>
+      <class-decl name='fwnode_handle' is-struct='yes' visibility='default' is-declaration-only='yes' id='d5ace206'/>
+      <class-decl name='serial_icounter_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='8816ddc1'/>
+      <class-decl name='serial_struct' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/uapi/linux/serial.h' line='19' column='1' id='cc72711f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/serial.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='line' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/serial.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='port' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/serial.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/serial.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/serial.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='xmit_fifo_size' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/serial.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='custom_divisor' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/serial.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='baud_base' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/serial.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='close_delay' type-id='8efea9e5' visibility='default' filepath='include/uapi/linux/serial.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='io_type' type-id='a84c031d' visibility='default' filepath='include/uapi/linux/serial.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='280'>
+          <var-decl name='reserved_char' type-id='89feb1ec' visibility='default' filepath='include/uapi/linux/serial.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='hub6' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/serial.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='closing_wait' type-id='8efea9e5' visibility='default' filepath='include/uapi/linux/serial.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='closing_wait2' type-id='8efea9e5' visibility='default' filepath='include/uapi/linux/serial.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='iomem_base' type-id='cf536864' visibility='default' filepath='include/uapi/linux/serial.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='iomem_reg_shift' type-id='8efea9e5' visibility='default' filepath='include/uapi/linux/serial.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='port_high' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/serial.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='iomap_base' type-id='7359adad' visibility='default' filepath='include/uapi/linux/serial.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_ldisc_ops' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/tty_ldisc.h' line='175' column='1' id='053f72e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_ldisc.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/tty_ldisc.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_ldisc.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_ldisc.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='open' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_ldisc.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='close' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_ldisc.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flush_buffer' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_ldisc.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read' type-id='ac9bc941' visibility='default' filepath='include/linux/tty_ldisc.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='write' type-id='01db3d7c' visibility='default' filepath='include/linux/tty_ldisc.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ioctl' type-id='1f6f58f4' visibility='default' filepath='include/linux/tty_ldisc.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='compat_ioctl' type-id='1f6f58f4' visibility='default' filepath='include/linux/tty_ldisc.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_termios' type-id='1779e61d' visibility='default' filepath='include/linux/tty_ldisc.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='poll' type-id='9fe65c08' visibility='default' filepath='include/linux/tty_ldisc.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='hangup' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_ldisc.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='receive_buf' type-id='71f0211c' visibility='default' filepath='include/linux/tty_ldisc.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='write_wakeup' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_ldisc.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dcd_change' type-id='aef0224d' visibility='default' filepath='include/linux/tty_ldisc.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='receive_buf2' type-id='c6e84913' visibility='default' filepath='include/linux/tty_ldisc.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/tty_ldisc.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='refcount' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_ldisc.h' line='212' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_struct' size-in-bits='5952' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='285' column='1' id='4c8d9cad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/tty.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/tty.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver' type-id='c2b4b27b' visibility='default' filepath='include/linux/tty.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='f2c18b44' visibility='default' filepath='include/linux/tty.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ldisc_sem' type-id='d3aa38f0' visibility='default' filepath='include/linux/tty.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ldisc' type-id='e0bbd59c' visibility='default' filepath='include/linux/tty.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_write_lock' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='legacy_mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='throttle_mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='termios_rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/tty.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='winsize_mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='ctrl_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/tty.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='flow_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/tty.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='termios' type-id='2f8662b5' visibility='default' filepath='include/linux/tty.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='termios_locked' type-id='2f8662b5' visibility='default' filepath='include/linux/tty.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='termiox' type-id='684d860d' visibility='default' filepath='include/linux/tty.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='name' type-id='59daf3ef' visibility='default' filepath='include/linux/tty.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='pgrp' type-id='b94e5398' visibility='default' filepath='include/linux/tty.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='session' type-id='b94e5398' visibility='default' filepath='include/linux/tty.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3744'>
+          <var-decl name='winsize' type-id='a818b7a0' visibility='default' filepath='include/linux/tty.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='stopped' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='flow_stopped' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='unused' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='hw_stopped' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='ctrl_status' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='packet' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='unused_ctrl' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='receive_room' type-id='f0981eeb' visibility='default' filepath='include/linux/tty.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4064'>
+          <var-decl name='flow_change' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='link' type-id='572fbdcb' visibility='default' filepath='include/linux/tty.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='fasync' type-id='5bb9c75d' visibility='default' filepath='include/linux/tty.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='write_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/tty.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='read_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/tty.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='hangup_work' type-id='ef9025d0' visibility='default' filepath='include/linux/tty.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='disc_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/tty.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/tty.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='files_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/tty.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='tty_files' type-id='72f469ec' visibility='default' filepath='include/linux/tty.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='closing' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='write_buf' type-id='cf536864' visibility='default' filepath='include/linux/tty.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='write_cnt' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='SAK_work' type-id='ef9025d0' visibility='default' filepath='include/linux/tty.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='port' type-id='ec77b5b8' visibility='default' filepath='include/linux/tty.h' line='344' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_driver' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/tty_driver.h' line='302' column='1' id='9b27c78b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_driver.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/tty_driver.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cdevs' type-id='5b4d58e9' visibility='default' filepath='include/linux/tty_driver.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/tty_driver.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_name' type-id='80f4b756' visibility='default' filepath='include/linux/tty_driver.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/tty_driver.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='name_base' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_driver.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='major' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_driver.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='minor_start' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_driver.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='num' type-id='f0981eeb' visibility='default' filepath='include/linux/tty_driver.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='type' type-id='a2185560' visibility='default' filepath='include/linux/tty_driver.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='subtype' type-id='a2185560' visibility='default' filepath='include/linux/tty_driver.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='init_termios' type-id='2f8662b5' visibility='default' filepath='include/linux/tty_driver.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/tty_driver.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='proc_entry' type-id='d077e928' visibility='default' filepath='include/linux/tty_driver.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='other' type-id='c2b4b27b' visibility='default' filepath='include/linux/tty_driver.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ttys' type-id='2027e7a0' visibility='default' filepath='include/linux/tty_driver.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='ports' type-id='d272d4d6' visibility='default' filepath='include/linux/tty_driver.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='termios' type-id='d910a7dd' visibility='default' filepath='include/linux/tty_driver.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='driver_state' type-id='eaa32e2f' visibility='default' filepath='include/linux/tty_driver.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ops' type-id='f2c18b44' visibility='default' filepath='include/linux/tty_driver.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='tty_drivers' type-id='72f469ec' visibility='default' filepath='include/linux/tty_driver.h' line='333' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cdev' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/cdev.h' line='14' column='1' id='22f86352'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/cdev.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/cdev.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ops' type-id='61758ee5' visibility='default' filepath='include/linux/cdev.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/cdev.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dev' type-id='8504f260' visibility='default' filepath='include/linux/cdev.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/linux/cdev.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ktermios' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='32' column='1' id='2f8662b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='c_iflag' type-id='241ce6f8' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='c_oflag' type-id='241ce6f8' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='c_cflag' type-id='241ce6f8' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='c_lflag' type-id='241ce6f8' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='c_line' type-id='fb7c6451' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='c_cc' type-id='8f04ba62' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='c_ispeed' type-id='6a8e8a14' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='c_ospeed' type-id='6a8e8a14' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='tcflag_t' type-id='f0981eeb' filepath='include/uapi/asm-generic/termbits.h' line='9' column='1' id='241ce6f8'/>
+      <typedef-decl name='cc_t' type-id='002ac4a6' filepath='include/uapi/asm-generic/termbits.h' line='7' column='1' id='fb7c6451'/>
+      <typedef-decl name='speed_t' type-id='f0981eeb' filepath='include/uapi/asm-generic/termbits.h' line='8' column='1' id='6a8e8a14'/>
+      <class-decl name='tty_port' size-in-bits='2944' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='230' column='1' id='7e1e521a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='6b1bde38' visibility='default' filepath='include/linux/tty.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tty' type-id='572fbdcb' visibility='default' filepath='include/linux/tty.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='itty' type-id='572fbdcb' visibility='default' filepath='include/linux/tty.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ops' type-id='103756a0' visibility='default' filepath='include/linux/tty.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='client_ops' type-id='8cd9dbc0' visibility='default' filepath='include/linux/tty.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/tty.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='blocked_open' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='open_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/tty.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='delta_msr_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/tty.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='iflags' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='console' type-id='002ac4a6' visibility='default' filepath='include/linux/tty.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='low_latency' type-id='002ac4a6' visibility='default' filepath='include/linux/tty.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='buf_mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='xmit_buf' type-id='cf536864' visibility='default' filepath='include/linux/tty.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='close_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/tty.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2784'>
+          <var-decl name='closing_wait' type-id='f0981eeb' visibility='default' filepath='include/linux/tty.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='drain_delay' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/tty.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='client_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/tty.h' line='254' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_bufhead' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='85' column='1' id='6b1bde38'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='a150e667' visibility='default' filepath='include/linux/tty.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/tty.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='priority' type-id='49178f86' visibility='default' filepath='include/linux/tty.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='sentinel' type-id='2f351d1f' visibility='default' filepath='include/linux/tty.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='free' type-id='77df194e' visibility='default' filepath='include/linux/tty.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mem_used' type-id='49178f86' visibility='default' filepath='include/linux/tty.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='mem_limit' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tail' type-id='a150e667' visibility='default' filepath='include/linux/tty.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_buffer' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='58' column='1' id='2f351d1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='053892cc' visibility='default' filepath='include/linux/tty.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='used' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='size' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='commit' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='read' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='c99b5ecd' visibility='default' filepath='include/linux/tty.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/tty.h' line='59' column='1' id='053892cc'>
+        <data-member access='private'>
+          <var-decl name='next' type-id='a150e667' visibility='default' filepath='include/linux/tty.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='free' type-id='c5ccfee8' visibility='default' filepath='include/linux/tty.h' line='61' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='tty_port_operations' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='205' column='1' id='7778009d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='carrier_raised' type-id='5626e636' visibility='default' filepath='include/linux/tty.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dtr_rts' type-id='21b6f944' visibility='default' filepath='include/linux/tty.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shutdown' type-id='7e5b379d' visibility='default' filepath='include/linux/tty.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='activate' type-id='62d26ff9' visibility='default' filepath='include/linux/tty.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='destruct' type-id='7e5b379d' visibility='default' filepath='include/linux/tty.h' line='220' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_port_client_operations' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='223' column='1' id='2a8ca227'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='receive_buf' type-id='1a7b1e1d' visibility='default' filepath='include/linux/tty.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write_wakeup' type-id='7e5b379d' visibility='default' filepath='include/linux/tty.h' line='225' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_operations' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/tty_driver.h' line='254' column='1' id='b8553c6b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lookup' type-id='dd354844' visibility='default' filepath='include/linux/tty_driver.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='install' type-id='b8fa1170' visibility='default' filepath='include/linux/tty_driver.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='remove' type-id='8127e1dd' visibility='default' filepath='include/linux/tty_driver.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='open' type-id='574ff926' visibility='default' filepath='include/linux/tty_driver.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='close' type-id='35f07b8f' visibility='default' filepath='include/linux/tty_driver.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='shutdown' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cleanup' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='write' type-id='74005b57' visibility='default' filepath='include/linux/tty_driver.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='put_char' type-id='20a1c8e7' visibility='default' filepath='include/linux/tty_driver.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='flush_chars' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='write_room' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_driver.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='chars_in_buffer' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_driver.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ioctl' type-id='18d7129a' visibility='default' filepath='include/linux/tty_driver.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='compat_ioctl' type-id='0b8da5f6' visibility='default' filepath='include/linux/tty_driver.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_termios' type-id='1779e61d' visibility='default' filepath='include/linux/tty_driver.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='throttle' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='unthrottle' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='stop' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='start' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hangup' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='break_ctl' type-id='61019833' visibility='default' filepath='include/linux/tty_driver.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='flush_buffer' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='set_ldisc' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='wait_until_sent' type-id='bc0ca82e' visibility='default' filepath='include/linux/tty_driver.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='send_xchar' type-id='f3d2e9a7' visibility='default' filepath='include/linux/tty_driver.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='tiocmget' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_driver.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='tiocmset' type-id='24725b0c' visibility='default' filepath='include/linux/tty_driver.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='resize' type-id='20174b1f' visibility='default' filepath='include/linux/tty_driver.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='set_termiox' type-id='ebf0489c' visibility='default' filepath='include/linux/tty_driver.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='get_icount' type-id='9cc1e100' visibility='default' filepath='include/linux/tty_driver.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='get_serial' type-id='dc2036b2' visibility='default' filepath='include/linux/tty_driver.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='set_serial' type-id='dc2036b2' visibility='default' filepath='include/linux/tty_driver.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='show_fdinfo' type-id='25c6126f' visibility='default' filepath='include/linux/tty_driver.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='proc_show' type-id='0131eb61' visibility='default' filepath='include/linux/tty_driver.h' line='299' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='winsize' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/asm-generic/termios.h' line='15' column='1' id='a818b7a0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ws_row' type-id='8efea9e5' visibility='default' filepath='include/uapi/asm-generic/termios.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ws_col' type-id='8efea9e5' visibility='default' filepath='include/uapi/asm-generic/termios.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ws_xpixel' type-id='8efea9e5' visibility='default' filepath='include/uapi/asm-generic/termios.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='ws_ypixel' type-id='8efea9e5' visibility='default' filepath='include/uapi/asm-generic/termios.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='termiox' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/termios.h' line='10' column='1' id='b855e40d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x_hflag' type-id='d315442e' visibility='default' filepath='include/uapi/linux/termios.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='x_cflag' type-id='d315442e' visibility='default' filepath='include/uapi/linux/termios.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='x_rflag' type-id='811c9338' visibility='default' filepath='include/uapi/linux/termios.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='x_sflag' type-id='d315442e' visibility='default' filepath='include/uapi/linux/termios.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ld_semaphore' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/tty_ldisc.h' line='133' column='1' id='d3aa38f0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f22a8abb' visibility='default' filepath='include/linux/tty_ldisc.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/tty_ldisc.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='wait_readers' type-id='f0981eeb' visibility='default' filepath='include/linux/tty_ldisc.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read_wait' type-id='72f469ec' visibility='default' filepath='include/linux/tty_ldisc.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write_wait' type-id='72f469ec' visibility='default' filepath='include/linux/tty_ldisc.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_ldisc' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/tty_ldisc.h' line='215' column='1' id='f87db0b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='9d632ac5' visibility='default' filepath='include/linux/tty_ldisc.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tty' type-id='572fbdcb' visibility='default' filepath='include/linux/tty_ldisc.h' line='217' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='22f86352' size-in-bits='64' id='3e6eb93a'/>
+      <pointer-type-def type-id='3e6eb93a' size-in-bits='64' id='5b4d58e9'/>
+      <qualified-type-def type-id='b8553c6b' const='yes' id='559d6206'/>
+      <pointer-type-def type-id='559d6206' size-in-bits='64' id='f2c18b44'/>
+      <qualified-type-def type-id='2a8ca227' const='yes' id='cf470d6a'/>
+      <pointer-type-def type-id='cf470d6a' size-in-bits='64' id='8cd9dbc0'/>
+      <qualified-type-def type-id='7778009d' const='yes' id='6e03f2ca'/>
+      <pointer-type-def type-id='6e03f2ca' size-in-bits='64' id='103756a0'/>
+      <pointer-type-def type-id='d5ace206' size-in-bits='64' id='4a935626'/>
+      <pointer-type-def type-id='439a4d86' size-in-bits='64' id='b8fa1170'/>
+      <pointer-type-def type-id='c443a9fc' size-in-bits='64' id='5626e636'/>
+      <pointer-type-def type-id='266b9741' size-in-bits='64' id='1a7b1e1d'/>
+      <pointer-type-def type-id='4aaf059d' size-in-bits='64' id='62d26ff9'/>
+      <pointer-type-def type-id='0f590202' size-in-bits='64' id='84d8e9b4'/>
+      <pointer-type-def type-id='86ee0347' size-in-bits='64' id='c6e84913'/>
+      <pointer-type-def type-id='1e330b13' size-in-bits='64' id='74005b57'/>
+      <pointer-type-def type-id='1621811c' size-in-bits='64' id='574ff926'/>
+      <pointer-type-def type-id='b99a3102' size-in-bits='64' id='1f6f58f4'/>
+      <pointer-type-def type-id='39fc1af7' size-in-bits='64' id='61019833'/>
+      <pointer-type-def type-id='53878b76' size-in-bits='64' id='9cc1e100'/>
+      <pointer-type-def type-id='f139a2f0' size-in-bits='64' id='dc2036b2'/>
+      <pointer-type-def type-id='e03cf6d2' size-in-bits='64' id='ebf0489c'/>
+      <pointer-type-def type-id='c6077113' size-in-bits='64' id='20a1c8e7'/>
+      <pointer-type-def type-id='3e33342a' size-in-bits='64' id='24725b0c'/>
+      <pointer-type-def type-id='31975058' size-in-bits='64' id='18d7129a'/>
+      <pointer-type-def type-id='a721b4ab' size-in-bits='64' id='20174b1f'/>
+      <pointer-type-def type-id='2f8662b5' size-in-bits='64' id='e55856e5'/>
+      <pointer-type-def type-id='e55856e5' size-in-bits='64' id='d910a7dd'/>
+      <pointer-type-def type-id='b8a3dbd4' size-in-bits='64' id='0b8da5f6'/>
+      <pointer-type-def type-id='8816ddc1' size-in-bits='64' id='f1c1e0f9'/>
+      <pointer-type-def type-id='cc72711f' size-in-bits='64' id='a72a4e27'/>
+      <pointer-type-def type-id='b855e40d' size-in-bits='64' id='684d860d'/>
+      <pointer-type-def type-id='2f351d1f' size-in-bits='64' id='a150e667'/>
+      <pointer-type-def type-id='9b27c78b' size-in-bits='64' id='c2b4b27b'/>
+      <pointer-type-def type-id='f87db0b6' size-in-bits='64' id='e0bbd59c'/>
+      <pointer-type-def type-id='053f72e5' size-in-bits='64' id='9d632ac5'/>
+      <pointer-type-def type-id='7e1e521a' size-in-bits='64' id='ec77b5b8'/>
+      <pointer-type-def type-id='ec77b5b8' size-in-bits='64' id='d272d4d6'/>
+      <pointer-type-def type-id='4c8d9cad' size-in-bits='64' id='572fbdcb'/>
+      <pointer-type-def type-id='9728e02a' size-in-bits='64' id='dd354844'/>
+      <pointer-type-def type-id='572fbdcb' size-in-bits='64' id='2027e7a0'/>
+      <pointer-type-def type-id='39ed8dbe' size-in-bits='64' id='9fe65c08'/>
+      <pointer-type-def type-id='9babdafa' size-in-bits='64' id='01db3d7c'/>
+      <pointer-type-def type-id='1f060985' size-in-bits='64' id='ac9bc941'/>
+      <pointer-type-def type-id='ac104281' size-in-bits='64' id='8127e1dd'/>
+      <pointer-type-def type-id='d7741e39' size-in-bits='64' id='7e5b379d'/>
+      <pointer-type-def type-id='74edcdba' size-in-bits='64' id='21b6f944'/>
+      <pointer-type-def type-id='9f5ca0a3' size-in-bits='64' id='1ee0b597'/>
+      <pointer-type-def type-id='46af63cb' size-in-bits='64' id='f3d2e9a7'/>
+      <pointer-type-def type-id='da22736a' size-in-bits='64' id='71f0211c'/>
+      <pointer-type-def type-id='2914f7c3' size-in-bits='64' id='35f07b8f'/>
+      <pointer-type-def type-id='c83cb72c' size-in-bits='64' id='bc0ca82e'/>
+      <pointer-type-def type-id='ecd721d1' size-in-bits='64' id='1779e61d'/>
+      <pointer-type-def type-id='117b6b23' size-in-bits='64' id='25c6126f'/>
+      <pointer-type-def type-id='3f9037c9' size-in-bits='64' id='aef0224d'/>
+      <pointer-type-def type-id='a818b7a0' size-in-bits='64' id='7fa79446'/>
+      <function-decl name='tty_unregister_ldisc' mangled-name='tty_unregister_ldisc' filepath='include/linux/tty.h' line='715' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_unregister_ldisc'>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tty_register_ldisc' mangled-name='tty_register_ldisc' filepath='include/linux/tty.h' line='714' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_register_ldisc'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='9d632ac5'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='8' id='89feb1ec'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <function-type size-in-bits='64' id='439a4d86'>
+        <parameter type-id='c2b4b27b'/>
+        <parameter type-id='572fbdcb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c443a9fc'>
+        <parameter type-id='ec77b5b8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='266b9741'>
+        <parameter type-id='ec77b5b8'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4aaf059d'>
+        <parameter type-id='ec77b5b8'/>
+        <parameter type-id='572fbdcb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0f590202'>
+        <parameter type-id='572fbdcb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1e330b13'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1621811c'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='39fc1af7'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='53878b76'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='f1c1e0f9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f139a2f0'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='a72a4e27'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e03cf6d2'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='684d860d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c6077113'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3e33342a'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='31975058'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a721b4ab'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='7fa79446'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b8a3dbd4'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9728e02a'>
+        <parameter type-id='c2b4b27b'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='572fbdcb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ac104281'>
+        <parameter type-id='c2b4b27b'/>
+        <parameter type-id='572fbdcb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d7741e39'>
+        <parameter type-id='ec77b5b8'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='74edcdba'>
+        <parameter type-id='ec77b5b8'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9f5ca0a3'>
+        <parameter type-id='572fbdcb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='46af63cb'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='a84c031d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2914f7c3'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c83cb72c'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ecd721d1'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='e55856e5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='117b6b23'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='f8dc9df0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/tty/n_tty.c' language='LANG_C89'>
+      <function-decl name='tty_unthrottle' mangled-name='tty_unthrottle' filepath='include/linux/tty.h' line='499' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_unthrottle'>
+        <parameter type-id='572fbdcb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='n_tty_ioctl_helper' mangled-name='n_tty_ioctl_helper' filepath='include/linux/tty.h' line='761' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='n_tty_ioctl_helper'>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/tty/serdev/core.c' language='LANG_C89'>
+      <class-decl name='serdev_device' size-in-bits='8064' is-struct='yes' visibility='default' filepath='include/linux/serdev.h' line='41' column='1' id='84bb5b7f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/serdev.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='nr' type-id='95e97e5e' visibility='default' filepath='include/linux/serdev.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='ctrl' type-id='30a11035' visibility='default' filepath='include/linux/serdev.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='ops' type-id='45b5656b' visibility='default' filepath='include/linux/serdev.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='write_comp' type-id='f9fef04f' visibility='default' filepath='include/linux/serdev.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='write_lock' type-id='925167dc' visibility='default' filepath='include/linux/serdev.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='serdev_controller' size-in-bits='7552' is-struct='yes' visibility='default' filepath='include/linux/serdev.h' line='103' column='1' id='6c569e75'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/serdev.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='nr' type-id='f0981eeb' visibility='default' filepath='include/linux/serdev.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='serdev' type-id='97fbef77' visibility='default' filepath='include/linux/serdev.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='ops' type-id='0c0416e5' visibility='default' filepath='include/linux/serdev.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='serdev_controller_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/serdev.h' line='82' column='1' id='06ea3aee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='write_buf' type-id='31ca1cfa' visibility='default' filepath='include/linux/serdev.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write_flush' type-id='a0974a4c' visibility='default' filepath='include/linux/serdev.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write_room' type-id='2deec881' visibility='default' filepath='include/linux/serdev.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='open' type-id='2deec881' visibility='default' filepath='include/linux/serdev.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='close' type-id='a0974a4c' visibility='default' filepath='include/linux/serdev.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_flow_control' type-id='1aec71d5' visibility='default' filepath='include/linux/serdev.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_parity' type-id='eea9f8db' visibility='default' filepath='include/linux/serdev.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_baudrate' type-id='5bc4fd6a' visibility='default' filepath='include/linux/serdev.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wait_until_sent' type-id='802491cf' visibility='default' filepath='include/linux/serdev.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_tiocm' type-id='2deec881' visibility='default' filepath='include/linux/serdev.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_tiocm' type-id='1bdcd289' visibility='default' filepath='include/linux/serdev.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='serdev_parity' filepath='include/linux/serdev.h' line='73' column='1' id='4a8b8edb'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SERDEV_PARITY_NONE' value='0'/>
+        <enumerator name='SERDEV_PARITY_EVEN' value='1'/>
+        <enumerator name='SERDEV_PARITY_ODD' value='2'/>
+      </enum-decl>
+      <class-decl name='serdev_device_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/serdev.h' line='27' column='1' id='dc25ec6c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='receive_buf' type-id='2ff23ad4' visibility='default' filepath='include/linux/serdev.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write_wakeup' type-id='e61cb0da' visibility='default' filepath='include/linux/serdev.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='06ea3aee' const='yes' id='b91ab08d'/>
+      <pointer-type-def type-id='b91ab08d' size-in-bits='64' id='0c0416e5'/>
+      <qualified-type-def type-id='dc25ec6c' const='yes' id='57f8d3e3'/>
+      <pointer-type-def type-id='57f8d3e3' size-in-bits='64' id='45b5656b'/>
+      <pointer-type-def type-id='f8cf7305' size-in-bits='64' id='2deec881'/>
+      <pointer-type-def type-id='23a55350' size-in-bits='64' id='31ca1cfa'/>
+      <pointer-type-def type-id='afdad9ef' size-in-bits='64' id='eea9f8db'/>
+      <pointer-type-def type-id='7b29d65d' size-in-bits='64' id='1bdcd289'/>
+      <pointer-type-def type-id='4d6ef9da' size-in-bits='64' id='2ff23ad4'/>
+      <pointer-type-def type-id='6c569e75' size-in-bits='64' id='30a11035'/>
+      <pointer-type-def type-id='84bb5b7f' size-in-bits='64' id='97fbef77'/>
+      <pointer-type-def type-id='8d8b68e8' size-in-bits='64' id='5bc4fd6a'/>
+      <pointer-type-def type-id='ba2a46a2' size-in-bits='64' id='a0974a4c'/>
+      <pointer-type-def type-id='ace9a76b' size-in-bits='64' id='802491cf'/>
+      <pointer-type-def type-id='ef83ffb9' size-in-bits='64' id='1aec71d5'/>
+      <pointer-type-def type-id='35213710' size-in-bits='64' id='e61cb0da'/>
+      <function-decl name='serdev_device_open' mangled-name='serdev_device_open' filepath='drivers/tty/serdev/core.c' line='168' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serdev_device_open'>
+        <parameter type-id='97fbef77' name='serdev' filepath='drivers/tty/serdev/core.c' line='168' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='serdev_device_close' mangled-name='serdev_device_close' filepath='drivers/tty/serdev/core.c' line='196' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serdev_device_close'>
+        <parameter type-id='97fbef77' name='serdev' filepath='drivers/tty/serdev/core.c' line='196' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='serdev_device_write_wakeup' mangled-name='serdev_device_write_wakeup' filepath='drivers/tty/serdev/core.c' line='236' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serdev_device_write_wakeup'>
+        <parameter type-id='97fbef77' name='serdev' filepath='drivers/tty/serdev/core.c' line='236' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='serdev_device_write' mangled-name='serdev_device_write' filepath='drivers/tty/serdev/core.c' line='291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serdev_device_write'>
+        <parameter type-id='97fbef77' name='serdev' filepath='drivers/tty/serdev/core.c' line='291' column='1'/>
+        <parameter type-id='354f7eb9' name='buf' filepath='drivers/tty/serdev/core.c' line='292' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='drivers/tty/serdev/core.c' line='292' column='1'/>
+        <parameter type-id='bd54fe1a' name='timeout' filepath='drivers/tty/serdev/core.c' line='293' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='serdev_device_set_baudrate' mangled-name='serdev_device_set_baudrate' filepath='drivers/tty/serdev/core.c' line='361' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serdev_device_set_baudrate'>
+        <parameter type-id='97fbef77' name='serdev' filepath='drivers/tty/serdev/core.c' line='361' column='1'/>
+        <parameter type-id='f0981eeb' name='speed' filepath='drivers/tty/serdev/core.c' line='361' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='serdev_device_set_flow_control' mangled-name='serdev_device_set_flow_control' filepath='drivers/tty/serdev/core.c' line='373' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serdev_device_set_flow_control'>
+        <parameter type-id='97fbef77' name='serdev' filepath='drivers/tty/serdev/core.c' line='373' column='1'/>
+        <parameter type-id='b50a4934' name='enable' filepath='drivers/tty/serdev/core.c' line='373' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='serdev_device_wait_until_sent' mangled-name='serdev_device_wait_until_sent' filepath='drivers/tty/serdev/core.c' line='396' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serdev_device_wait_until_sent'>
+        <parameter type-id='97fbef77' name='serdev' filepath='drivers/tty/serdev/core.c' line='396' column='1'/>
+        <parameter type-id='bd54fe1a' name='timeout' filepath='drivers/tty/serdev/core.c' line='396' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_device_uevent_modalias' mangled-name='of_device_uevent_modalias' filepath='include/linux/of_device.h' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_device_uevent_modalias'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='d9d65b21'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_device_modalias' mangled-name='of_device_modalias' filepath='include/linux/of_device.h' line='38' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_device_modalias'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='f8cf7305'>
+        <parameter type-id='30a11035'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='23a55350'>
+        <parameter type-id='30a11035'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='afdad9ef'>
+        <parameter type-id='30a11035'/>
+        <parameter type-id='4a8b8edb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7b29d65d'>
+        <parameter type-id='30a11035'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4d6ef9da'>
+        <parameter type-id='97fbef77'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8d8b68e8'>
+        <parameter type-id='30a11035'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ba2a46a2'>
+        <parameter type-id='30a11035'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ace9a76b'>
+        <parameter type-id='30a11035'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ef83ffb9'>
+        <parameter type-id='30a11035'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='35213710'>
+        <parameter type-id='97fbef77'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/tty/serial/8250/8250_fsl.c' language='LANG_C89'>
+      <function-decl name='fsl8250_handle_irq' mangled-name='fsl8250_handle_irq' filepath='drivers/tty/serial/8250/8250_fsl.c' line='27' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fsl8250_handle_irq'>
+        <parameter type-id='af051c69' name='port' filepath='drivers/tty/serial/8250/8250_fsl.c' line='27' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='b0063b51' size-in-bits='64' id='af051c69'/>
+      <class-decl name='uart_port' size-in-bits='3712' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='105' column='1' id='b0063b51'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/serial_core.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iobase' type-id='7359adad' visibility='default' filepath='include/linux/serial_core.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='membase' type-id='cf536864' visibility='default' filepath='include/linux/serial_core.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='serial_in' type-id='d8385083' visibility='default' filepath='include/linux/serial_core.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='serial_out' type-id='041f6b76' visibility='default' filepath='include/linux/serial_core.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_termios' type-id='97d53fc8' visibility='default' filepath='include/linux/serial_core.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_ldisc' type-id='92c1d524' visibility='default' filepath='include/linux/serial_core.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_mctrl' type-id='d8d26684' visibility='default' filepath='include/linux/serial_core.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_mctrl' type-id='898b0c52' visibility='default' filepath='include/linux/serial_core.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_divisor' type-id='dece2c04' visibility='default' filepath='include/linux/serial_core.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_divisor' type-id='a902ee5a' visibility='default' filepath='include/linux/serial_core.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='startup' type-id='45d07221' visibility='default' filepath='include/linux/serial_core.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='shutdown' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='throttle' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='unthrottle' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='handle_irq' type-id='45d07221' visibility='default' filepath='include/linux/serial_core.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pm' type-id='c805a6f8' visibility='default' filepath='include/linux/serial_core.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='handle_break' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rs485_config' type-id='bee2fad0' visibility='default' filepath='include/linux/serial_core.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='iso7816_config' type-id='34aa5735' visibility='default' filepath='include/linux/serial_core.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='irqflags' type-id='7359adad' visibility='default' filepath='include/linux/serial_core.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='uartclk' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='fifosize' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='x_char' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1480'>
+          <var-decl name='regshift' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1488'>
+          <var-decl name='iotype' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1496'>
+          <var-decl name='quirks' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='read_status_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='ignore_status_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='state' type-id='533b348b' visibility='default' filepath='include/linux/serial_core.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='icount' type-id='3f76087c' visibility='default' filepath='include/linux/serial_core.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='cons' type-id='b9aa0100' visibility='default' filepath='include/linux/serial_core.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sysrq' type-id='7359adad' visibility='default' filepath='include/linux/serial_core.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='sysrq_ch' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='flags' type-id='5d1b117e' visibility='default' filepath='include/linux/serial_core.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='status' type-id='9fe5c270' visibility='default' filepath='include/linux/serial_core.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='hw_stopped' type-id='95e97e5e' visibility='default' filepath='include/linux/serial_core.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='mctrl' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='ops' type-id='7e03a5bb' visibility='default' filepath='include/linux/serial_core.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='custom_divisor' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='line' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='minor' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='mapbase' type-id='acc63fdf' visibility='default' filepath='include/linux/serial_core.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='mapsize' type-id='acc63fdf' visibility='default' filepath='include/linux/serial_core.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/serial_core.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='hub6' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2824'>
+          <var-decl name='suspended' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2832'>
+          <var-decl name='unused' type-id='4d050576' visibility='default' filepath='include/linux/serial_core.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/serial_core.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='attr_group' type-id='aad24a5b' visibility='default' filepath='include/linux/serial_core.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='tty_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/serial_core.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='rs485' type-id='fc72f170' visibility='default' filepath='include/linux/serial_core.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='iso7816' type-id='5a449113' visibility='default' filepath='include/linux/serial_core.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/serial_core.h' line='255' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d8b78162' size-in-bits='64' id='b9aa0100'/>
+      <pointer-type-def type-id='f92f0413' size-in-bits='64' id='7e03a5bb'/>
+      <pointer-type-def type-id='03dc20ed' size-in-bits='64' id='45d07221'/>
+      <pointer-type-def type-id='ee6561a9' size-in-bits='64' id='34aa5735'/>
+      <pointer-type-def type-id='e1d0c03e' size-in-bits='64' id='bee2fad0'/>
+      <class-decl name='serial_iso7816' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/serial.h' line='140' column='1' id='5a449113'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tg' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sc_fi' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='sc_di' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='clk' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reserved' type-id='83a5454e' visibility='default' filepath='include/uapi/linux/serial.h' line='149' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='serial_rs485' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/serial.h' line='117' column='1' id='fc72f170'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='delay_rts_before_send' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='delay_rts_after_send' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='padding' type-id='83a5454e' visibility='default' filepath='include/uapi/linux/serial.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_icount' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='88' column='1' id='3f76087c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cts' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dsr' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rng' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dcd' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tx' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='frame' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='overrun' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parity' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='brk' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='buf_overrun' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='upf_t' type-id='f0981eeb' filepath='include/linux/serial_core.h' line='102' column='1' id='5d1b117e'/>
+      <typedef-decl name='upstat_t' type-id='f0981eeb' filepath='include/linux/serial_core.h' line='103' column='1' id='9fe5c270'/>
+      <pointer-type-def type-id='8f17759b' size-in-bits='64' id='533b348b'/>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='16' id='4d050576'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='5fa1c03a' size-in-bits='64' id='d8d26684'/>
+      <pointer-type-def type-id='41df3a6f' size-in-bits='64' id='d8385083'/>
+      <pointer-type-def type-id='41c81272' size-in-bits='64' id='dece2c04'/>
+      <pointer-type-def type-id='89397116' size-in-bits='64' id='ed415bf0'/>
+      <pointer-type-def type-id='e6fe4054' size-in-bits='64' id='041f6b76'/>
+      <pointer-type-def type-id='2cebef22' size-in-bits='64' id='92c1d524'/>
+      <pointer-type-def type-id='b1b5c3fe' size-in-bits='64' id='97d53fc8'/>
+      <pointer-type-def type-id='d4c94570' size-in-bits='64' id='898b0c52'/>
+      <pointer-type-def type-id='aa99b0ae' size-in-bits='64' id='c805a6f8'/>
+      <pointer-type-def type-id='3636c828' size-in-bits='64' id='a902ee5a'/>
+      <qualified-type-def type-id='95388a16' const='yes' id='f92f0413'/>
+      <class-decl name='console' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/console.h' line='145' column='1' id='d8b78162'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/console.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write' type-id='94639d2a' visibility='default' filepath='include/linux/console.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read' type-id='57c9915e' visibility='default' filepath='include/linux/console.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='device' type-id='3805964c' visibility='default' filepath='include/linux/console.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='unblank' type-id='953b12f8' visibility='default' filepath='include/linux/console.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='setup' type-id='304a6cc4' visibility='default' filepath='include/linux/console.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='match' type-id='c859c465' visibility='default' filepath='include/linux/console.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='flags' type-id='a2185560' visibility='default' filepath='include/linux/console.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='index' type-id='a2185560' visibility='default' filepath='include/linux/console.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='cflag' type-id='95e97e5e' visibility='default' filepath='include/linux/console.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/console.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='next' type-id='b9aa0100' visibility='default' filepath='include/linux/console.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_state' size-in-bits='3456' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='283' column='1' id='8f17759b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='7e1e521a' visibility='default' filepath='include/linux/serial_core.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='pm_state' type-id='4e1a3570' visibility='default' filepath='include/linux/serial_core.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='xmit' type-id='40d6f574' visibility='default' filepath='include/linux/serial_core.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='refcount' type-id='49178f86' visibility='default' filepath='include/linux/serial_core.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='remove_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/serial_core.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='uart_port' type-id='af051c69' visibility='default' filepath='include/linux/serial_core.h' line='291' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='uart_pm_state' filepath='include/linux/serial_core.h' line='274' column='1' id='4e1a3570'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UART_PM_STATE_ON' value='0'/>
+        <enumerator name='UART_PM_STATE_OFF' value='3'/>
+        <enumerator name='UART_PM_STATE_UNDEFINED' value='4'/>
+      </enum-decl>
+      <pointer-type-def type-id='0da72d62' size-in-bits='64' id='304a6cc4'/>
+      <pointer-type-def type-id='1b343ea9' size-in-bits='64' id='c859c465'/>
+      <pointer-type-def type-id='92a295b4' size-in-bits='64' id='57c9915e'/>
+      <class-decl name='circ_buf' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/circ_buf.h' line='9' column='1' id='40d6f574'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='26a90f95' visibility='default' filepath='include/linux/circ_buf.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='95e97e5e' visibility='default' filepath='include/linux/circ_buf.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tail' type-id='95e97e5e' visibility='default' filepath='include/linux/circ_buf.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='37' column='1' id='95388a16'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_empty' type-id='d8d26684' visibility='default' filepath='include/linux/serial_core.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_mctrl' type-id='898b0c52' visibility='default' filepath='include/linux/serial_core.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_mctrl' type-id='d8d26684' visibility='default' filepath='include/linux/serial_core.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='stop_tx' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='start_tx' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='throttle' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='unthrottle' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='send_xchar' type-id='511c33f4' visibility='default' filepath='include/linux/serial_core.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='stop_rx' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='enable_ms' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='break_ctl' type-id='c6b7d75f' visibility='default' filepath='include/linux/serial_core.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='startup' type-id='45d07221' visibility='default' filepath='include/linux/serial_core.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='shutdown' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='flush_buffer' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_termios' type-id='97d53fc8' visibility='default' filepath='include/linux/serial_core.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_ldisc' type-id='92c1d524' visibility='default' filepath='include/linux/serial_core.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pm' type-id='c805a6f8' visibility='default' filepath='include/linux/serial_core.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='type' type-id='df58a979' visibility='default' filepath='include/linux/serial_core.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='release_port' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='request_port' type-id='45d07221' visibility='default' filepath='include/linux/serial_core.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='config_port' type-id='c6b7d75f' visibility='default' filepath='include/linux/serial_core.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='verify_port' type-id='6850d327' visibility='default' filepath='include/linux/serial_core.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='ioctl' type-id='34fdc91d' visibility='default' filepath='include/linux/serial_core.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='c0f05602' size-in-bits='64' id='3805964c'/>
+      <pointer-type-def type-id='06177fb0' size-in-bits='64' id='94639d2a'/>
+      <pointer-type-def type-id='c14fce5d' size-in-bits='64' id='df58a979'/>
+      <pointer-type-def type-id='2b18e57b' size-in-bits='64' id='6850d327'/>
+      <pointer-type-def type-id='eac2b7d9' size-in-bits='64' id='34fdc91d'/>
+      <pointer-type-def type-id='c463253a' size-in-bits='64' id='511c33f4'/>
+      <pointer-type-def type-id='0834640b' size-in-bits='64' id='c6b7d75f'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/tty/serial/8250/8250_of.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='160' id='83a5454e'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='8' id='89feb1ec'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <class-decl name='mctrl_gpios' is-struct='yes' visibility='default' is-declaration-only='yes' id='31bf052e'/>
+      <array-type-def dimensions='1' type-id='7fdcd183' size-in-bits='infinite' id='e5c7d3c7'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='cf29c9b3' size-in-bits='infinite' id='55685a92'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='16' id='4d050576'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='uart_8250_port' size-in-bits='6144' is-struct='yes' visibility='default' filepath='include/linux/serial_8250.h' line='92' column='1' id='d7d97b09'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='b0063b51' visibility='default' filepath='include/linux/serial_8250.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/linux/serial_8250.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/serial_8250.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='capabilities' type-id='19c2251e' visibility='default' filepath='include/linux/serial_8250.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4320'>
+          <var-decl name='bugs' type-id='8efea9e5' visibility='default' filepath='include/linux/serial_8250.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4336'>
+          <var-decl name='fifo_bug' type-id='b50a4934' visibility='default' filepath='include/linux/serial_8250.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='tx_loadsz' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_8250.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4384'>
+          <var-decl name='acr' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4392'>
+          <var-decl name='fcr' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4400'>
+          <var-decl name='ier' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4408'>
+          <var-decl name='lcr' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='mcr' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4424'>
+          <var-decl name='mcr_mask' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4432'>
+          <var-decl name='mcr_force' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4440'>
+          <var-decl name='cur_iotype' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4448'>
+          <var-decl name='rpm_tx_active' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_8250.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='canary' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4488'>
+          <var-decl name='probe' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='gpios' type-id='967c9384' visibility='default' filepath='include/linux/serial_8250.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='lsr_saved_flags' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4616'>
+          <var-decl name='msr_saved_flags' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='dma' type-id='22a9463e' visibility='default' filepath='include/linux/serial_8250.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='ops' type-id='37dfab81' visibility='default' filepath='include/linux/serial_8250.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='dl_read' type-id='58f84083' visibility='default' filepath='include/linux/serial_8250.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='dl_write' type-id='ce713533' visibility='default' filepath='include/linux/serial_8250.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='em485' type-id='06d9380f' visibility='default' filepath='include/linux/serial_8250.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='overrun_backoff' type-id='5ad6e0ef' visibility='default' filepath='include/linux/serial_8250.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='overrun_backoff_time_ms' type-id='19c2251e' visibility='default' filepath='include/linux/serial_8250.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_port' size-in-bits='3712' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='105' column='1' id='b0063b51'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/serial_core.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iobase' type-id='7359adad' visibility='default' filepath='include/linux/serial_core.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='membase' type-id='cf536864' visibility='default' filepath='include/linux/serial_core.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='serial_in' type-id='d8385083' visibility='default' filepath='include/linux/serial_core.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='serial_out' type-id='041f6b76' visibility='default' filepath='include/linux/serial_core.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_termios' type-id='97d53fc8' visibility='default' filepath='include/linux/serial_core.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_ldisc' type-id='92c1d524' visibility='default' filepath='include/linux/serial_core.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_mctrl' type-id='d8d26684' visibility='default' filepath='include/linux/serial_core.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_mctrl' type-id='898b0c52' visibility='default' filepath='include/linux/serial_core.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_divisor' type-id='dece2c04' visibility='default' filepath='include/linux/serial_core.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_divisor' type-id='a902ee5a' visibility='default' filepath='include/linux/serial_core.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='startup' type-id='45d07221' visibility='default' filepath='include/linux/serial_core.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='shutdown' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='throttle' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='unthrottle' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='handle_irq' type-id='45d07221' visibility='default' filepath='include/linux/serial_core.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pm' type-id='c805a6f8' visibility='default' filepath='include/linux/serial_core.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='handle_break' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rs485_config' type-id='bee2fad0' visibility='default' filepath='include/linux/serial_core.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='iso7816_config' type-id='34aa5735' visibility='default' filepath='include/linux/serial_core.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='irqflags' type-id='7359adad' visibility='default' filepath='include/linux/serial_core.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='uartclk' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='fifosize' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='x_char' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1480'>
+          <var-decl name='regshift' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1488'>
+          <var-decl name='iotype' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1496'>
+          <var-decl name='quirks' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='read_status_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='ignore_status_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='state' type-id='533b348b' visibility='default' filepath='include/linux/serial_core.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='icount' type-id='3f76087c' visibility='default' filepath='include/linux/serial_core.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='cons' type-id='b9aa0100' visibility='default' filepath='include/linux/serial_core.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sysrq' type-id='7359adad' visibility='default' filepath='include/linux/serial_core.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='sysrq_ch' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='flags' type-id='5d1b117e' visibility='default' filepath='include/linux/serial_core.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='status' type-id='9fe5c270' visibility='default' filepath='include/linux/serial_core.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='hw_stopped' type-id='95e97e5e' visibility='default' filepath='include/linux/serial_core.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='mctrl' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='ops' type-id='7e03a5bb' visibility='default' filepath='include/linux/serial_core.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='custom_divisor' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='line' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='minor' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='mapbase' type-id='acc63fdf' visibility='default' filepath='include/linux/serial_core.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='mapsize' type-id='acc63fdf' visibility='default' filepath='include/linux/serial_core.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/serial_core.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='hub6' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2824'>
+          <var-decl name='suspended' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2832'>
+          <var-decl name='unused' type-id='4d050576' visibility='default' filepath='include/linux/serial_core.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/serial_core.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='attr_group' type-id='aad24a5b' visibility='default' filepath='include/linux/serial_core.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='tty_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/serial_core.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='rs485' type-id='fc72f170' visibility='default' filepath='include/linux/serial_core.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='iso7816' type-id='5a449113' visibility='default' filepath='include/linux/serial_core.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/serial_core.h' line='255' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='serial_rs485' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/serial.h' line='117' column='1' id='fc72f170'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='delay_rts_before_send' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='delay_rts_after_send' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='padding' type-id='83a5454e' visibility='default' filepath='include/uapi/linux/serial.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='serial_iso7816' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/serial.h' line='140' column='1' id='5a449113'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tg' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sc_fi' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='sc_di' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='clk' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reserved' type-id='83a5454e' visibility='default' filepath='include/uapi/linux/serial.h' line='149' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_state' size-in-bits='3456' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='283' column='1' id='8f17759b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='7e1e521a' visibility='default' filepath='include/linux/serial_core.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='pm_state' type-id='4e1a3570' visibility='default' filepath='include/linux/serial_core.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='xmit' type-id='40d6f574' visibility='default' filepath='include/linux/serial_core.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='refcount' type-id='49178f86' visibility='default' filepath='include/linux/serial_core.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='remove_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/serial_core.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='uart_port' type-id='af051c69' visibility='default' filepath='include/linux/serial_core.h' line='291' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='uart_pm_state' filepath='include/linux/serial_core.h' line='274' column='1' id='4e1a3570'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UART_PM_STATE_ON' value='0'/>
+        <enumerator name='UART_PM_STATE_OFF' value='3'/>
+        <enumerator name='UART_PM_STATE_UNDEFINED' value='4'/>
+      </enum-decl>
+      <class-decl name='circ_buf' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/circ_buf.h' line='9' column='1' id='40d6f574'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='26a90f95' visibility='default' filepath='include/linux/circ_buf.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='95e97e5e' visibility='default' filepath='include/linux/circ_buf.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tail' type-id='95e97e5e' visibility='default' filepath='include/linux/circ_buf.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_icount' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='88' column='1' id='3f76087c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cts' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dsr' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rng' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dcd' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tx' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='frame' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='overrun' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parity' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='brk' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='buf_overrun' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='console' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/console.h' line='145' column='1' id='d8b78162'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/console.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write' type-id='94639d2a' visibility='default' filepath='include/linux/console.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read' type-id='57c9915e' visibility='default' filepath='include/linux/console.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='device' type-id='3805964c' visibility='default' filepath='include/linux/console.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='unblank' type-id='953b12f8' visibility='default' filepath='include/linux/console.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='setup' type-id='304a6cc4' visibility='default' filepath='include/linux/console.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='match' type-id='c859c465' visibility='default' filepath='include/linux/console.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='flags' type-id='a2185560' visibility='default' filepath='include/linux/console.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='index' type-id='a2185560' visibility='default' filepath='include/linux/console.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='cflag' type-id='95e97e5e' visibility='default' filepath='include/linux/console.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/console.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='next' type-id='b9aa0100' visibility='default' filepath='include/linux/console.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='upf_t' type-id='f0981eeb' filepath='include/linux/serial_core.h' line='102' column='1' id='5d1b117e'/>
+      <typedef-decl name='upstat_t' type-id='f0981eeb' filepath='include/linux/serial_core.h' line='103' column='1' id='9fe5c270'/>
+      <class-decl name='uart_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='37' column='1' id='95388a16'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_empty' type-id='d8d26684' visibility='default' filepath='include/linux/serial_core.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_mctrl' type-id='898b0c52' visibility='default' filepath='include/linux/serial_core.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_mctrl' type-id='d8d26684' visibility='default' filepath='include/linux/serial_core.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='stop_tx' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='start_tx' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='throttle' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='unthrottle' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='send_xchar' type-id='511c33f4' visibility='default' filepath='include/linux/serial_core.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='stop_rx' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='enable_ms' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='break_ctl' type-id='c6b7d75f' visibility='default' filepath='include/linux/serial_core.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='startup' type-id='45d07221' visibility='default' filepath='include/linux/serial_core.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='shutdown' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='flush_buffer' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_termios' type-id='97d53fc8' visibility='default' filepath='include/linux/serial_core.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_ldisc' type-id='92c1d524' visibility='default' filepath='include/linux/serial_core.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pm' type-id='c805a6f8' visibility='default' filepath='include/linux/serial_core.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='type' type-id='df58a979' visibility='default' filepath='include/linux/serial_core.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='release_port' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='request_port' type-id='45d07221' visibility='default' filepath='include/linux/serial_core.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='config_port' type-id='c6b7d75f' visibility='default' filepath='include/linux/serial_core.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='verify_port' type-id='6850d327' visibility='default' filepath='include/linux/serial_core.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='ioctl' type-id='34fdc91d' visibility='default' filepath='include/linux/serial_core.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_8250_dma' size-in-bits='1920' is-struct='yes' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='16' column='1' id='aec34ed8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_dma' type-id='58f84083' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_dma' type-id='58f84083' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fn' type-id='55f53546' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rx_param' type-id='eaa32e2f' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_param' type-id='eaa32e2f' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rxconf' type-id='d356829c' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='txconf' type-id='d356829c' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='rxchan' type-id='27f3f5d9' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='txchan' type-id='27f3f5d9' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rx_dma_addr' type-id='2522883d' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='tx_dma_addr' type-id='2522883d' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rx_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='tx_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='rx_cookie' type-id='6478ea0a' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='tx_cookie' type-id='6478ea0a' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='rx_buf' type-id='eaa32e2f' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='rx_size' type-id='b59d7dce' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='tx_size' type-id='b59d7dce' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='tx_running' type-id='002ac4a6' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1864'>
+          <var-decl name='tx_err' type-id='002ac4a6' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1872'>
+          <var-decl name='rx_running' type-id='002ac4a6' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_chan' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='253' column='1' id='5e3b10ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='device' type-id='c60ba652' visibility='default' filepath='include/linux/dmaengine.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cookie' type-id='6478ea0a' visibility='default' filepath='include/linux/dmaengine.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='completed_cookie' type-id='6478ea0a' visibility='default' filepath='include/linux/dmaengine.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='chan_id' type-id='95e97e5e' visibility='default' filepath='include/linux/dmaengine.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='114d14e4' visibility='default' filepath='include/linux/dmaengine.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='device_node' type-id='72f469ec' visibility='default' filepath='include/linux/dmaengine.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='local' type-id='f8c8e796' visibility='default' filepath='include/linux/dmaengine.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='client_count' type-id='95e97e5e' visibility='default' filepath='include/linux/dmaengine.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='table_count' type-id='95e97e5e' visibility='default' filepath='include/linux/dmaengine.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='router' type-id='70a92833' visibility='default' filepath='include/linux/dmaengine.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='route_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/dmaengine.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/dmaengine.h' line='271' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_device' size-in-bits='2432' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='723' column='1' id='0dcaa1e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chancnt' type-id='f0981eeb' visibility='default' filepath='include/linux/dmaengine.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='privatecnt' type-id='f0981eeb' visibility='default' filepath='include/linux/dmaengine.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='channels' type-id='72f469ec' visibility='default' filepath='include/linux/dmaengine.h' line='727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='global_node' type-id='72f469ec' visibility='default' filepath='include/linux/dmaengine.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='filter' type-id='d914dc7c' visibility='default' filepath='include/linux/dmaengine.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cap_mask' type-id='3fb29acd' visibility='default' filepath='include/linux/dmaengine.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_xor' type-id='8efea9e5' visibility='default' filepath='include/linux/dmaengine.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='592'>
+          <var-decl name='max_pq' type-id='8efea9e5' visibility='default' filepath='include/linux/dmaengine.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='copy_align' type-id='ec506a0a' visibility='default' filepath='include/linux/dmaengine.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='xor_align' type-id='ec506a0a' visibility='default' filepath='include/linux/dmaengine.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='pq_align' type-id='ec506a0a' visibility='default' filepath='include/linux/dmaengine.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fill_align' type-id='ec506a0a' visibility='default' filepath='include/linux/dmaengine.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='dev_id' type-id='95e97e5e' visibility='default' filepath='include/linux/dmaengine.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/dmaengine.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/dmaengine.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='src_addr_widths' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='dst_addr_widths' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='directions' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='max_burst' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='descriptor_reuse' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='residue_granularity' type-id='cad02db3' visibility='default' filepath='include/linux/dmaengine.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='device_alloc_chan_resources' type-id='8425c356' visibility='default' filepath='include/linux/dmaengine.h' line='750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='device_free_chan_resources' type-id='42e84365' visibility='default' filepath='include/linux/dmaengine.h' line='751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='device_prep_dma_memcpy' type-id='16a27d24' visibility='default' filepath='include/linux/dmaengine.h' line='753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='device_prep_dma_xor' type-id='d37a2705' visibility='default' filepath='include/linux/dmaengine.h' line='756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='device_prep_dma_xor_val' type-id='187c2c79' visibility='default' filepath='include/linux/dmaengine.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='device_prep_dma_pq' type-id='2fa81f80' visibility='default' filepath='include/linux/dmaengine.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='device_prep_dma_pq_val' type-id='35da6582' visibility='default' filepath='include/linux/dmaengine.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='device_prep_dma_memset' type-id='9c36e869' visibility='default' filepath='include/linux/dmaengine.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='device_prep_dma_memset_sg' type-id='81ec80b0' visibility='default' filepath='include/linux/dmaengine.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='device_prep_dma_interrupt' type-id='37513679' visibility='default' filepath='include/linux/dmaengine.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='device_prep_slave_sg' type-id='3cbeb812' visibility='default' filepath='include/linux/dmaengine.h' line='779' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='device_prep_dma_cyclic' type-id='f166bad0' visibility='default' filepath='include/linux/dmaengine.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='device_prep_interleaved_dma' type-id='3e2efc02' visibility='default' filepath='include/linux/dmaengine.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='device_prep_dma_imm_data' type-id='7be3d1f9' visibility='default' filepath='include/linux/dmaengine.h' line='790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='device_config' type-id='81aefe59' visibility='default' filepath='include/linux/dmaengine.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='device_pause' type-id='8425c356' visibility='default' filepath='include/linux/dmaengine.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='device_resume' type-id='8425c356' visibility='default' filepath='include/linux/dmaengine.h' line='797' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='device_terminate_all' type-id='8425c356' visibility='default' filepath='include/linux/dmaengine.h' line='798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='device_synchronize' type-id='42e84365' visibility='default' filepath='include/linux/dmaengine.h' line='799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='device_tx_status' type-id='e4038107' visibility='default' filepath='include/linux/dmaengine.h' line='801' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='device_issue_pending' type-id='42e84365' visibility='default' filepath='include/linux/dmaengine.h' line='804' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_filter' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='655' column='1' id='d914dc7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fn' type-id='55f53546' visibility='default' filepath='include/linux/dmaengine.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mapcnt' type-id='95e97e5e' visibility='default' filepath='include/linux/dmaengine.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='06cc3383' visibility='default' filepath='include/linux/dmaengine.h' line='658' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dma_filter_fn' type-id='aa8ac136' filepath='include/linux/dmaengine.h' line='444' column='1' id='55f53546'/>
+      <class-decl name='dma_slave_map' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='642' column='1' id='848612dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='devname' type-id='80f4b756' visibility='default' filepath='include/linux/dmaengine.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='slave' type-id='80f4b756' visibility='default' filepath='include/linux/dmaengine.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='param' type-id='eaa32e2f' visibility='default' filepath='include/linux/dmaengine.h' line='645' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dma_cap_mask_t' type-id='24d23dab' filepath='include/linux/dmaengine.h' line='214' column='1' id='3fb29acd'/>
+      <enum-decl name='dmaengine_alignment' filepath='include/linux/dmaengine.h' line='625' column='1' id='ec506a0a'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DMAENGINE_ALIGN_1_BYTE' value='0'/>
+        <enumerator name='DMAENGINE_ALIGN_2_BYTES' value='1'/>
+        <enumerator name='DMAENGINE_ALIGN_4_BYTES' value='2'/>
+        <enumerator name='DMAENGINE_ALIGN_8_BYTES' value='3'/>
+        <enumerator name='DMAENGINE_ALIGN_16_BYTES' value='4'/>
+        <enumerator name='DMAENGINE_ALIGN_32_BYTES' value='5'/>
+        <enumerator name='DMAENGINE_ALIGN_64_BYTES' value='6'/>
+      </enum-decl>
+      <enum-decl name='dma_residue_granularity' filepath='include/linux/dmaengine.h' line='389' column='1' id='cad02db3'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DMA_RESIDUE_GRANULARITY_DESCRIPTOR' value='0'/>
+        <enumerator name='DMA_RESIDUE_GRANULARITY_SEGMENT' value='1'/>
+        <enumerator name='DMA_RESIDUE_GRANULARITY_BURST' value='2'/>
+      </enum-decl>
+      <class-decl name='dma_async_tx_descriptor' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='496' column='1' id='b50ce591'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cookie' type-id='6478ea0a' visibility='default' filepath='include/linux/dmaengine.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='04baee86' visibility='default' filepath='include/linux/dmaengine.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phys' type-id='cf29c9b3' visibility='default' filepath='include/linux/dmaengine.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='chan' type-id='27f3f5d9' visibility='default' filepath='include/linux/dmaengine.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_submit' type-id='fb8c75c5' visibility='default' filepath='include/linux/dmaengine.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='desc_free' type-id='dccdb2b1' visibility='default' filepath='include/linux/dmaengine.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='callback' type-id='ee3f36d4' visibility='default' filepath='include/linux/dmaengine.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='callback_result' type-id='82615040' visibility='default' filepath='include/linux/dmaengine.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='callback_param' type-id='eaa32e2f' visibility='default' filepath='include/linux/dmaengine.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='unmap' type-id='e220a5e2' visibility='default' filepath='include/linux/dmaengine.h' line='506' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dma_cookie_t' type-id='a7832498' filepath='include/linux/dmaengine.h' line='22' column='1' id='6478ea0a'/>
+      <enum-decl name='dma_ctrl_flags' filepath='include/linux/dmaengine.h' line='180' column='1' id='04baee86'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DMA_PREP_INTERRUPT' value='1'/>
+        <enumerator name='DMA_CTRL_ACK' value='2'/>
+        <enumerator name='DMA_PREP_PQ_DISABLE_P' value='4'/>
+        <enumerator name='DMA_PREP_PQ_DISABLE_Q' value='8'/>
+        <enumerator name='DMA_PREP_CONTINUE' value='16'/>
+        <enumerator name='DMA_PREP_FENCE' value='32'/>
+        <enumerator name='DMA_CTRL_REUSE' value='64'/>
+        <enumerator name='DMA_PREP_CMD' value='128'/>
+      </enum-decl>
+      <typedef-decl name='dma_async_tx_callback' type-id='b7f9d8e6' filepath='include/linux/dmaengine.h' line='446' column='1' id='ee3f36d4'/>
+      <typedef-decl name='dma_async_tx_callback_result' type-id='31316b61' filepath='include/linux/dmaengine.h' line='460' column='1' id='82615040'/>
+      <class-decl name='dmaengine_result' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='455' column='1' id='931aa361'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='result' type-id='c2154237' visibility='default' filepath='include/linux/dmaengine.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='residue' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='457' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dmaengine_tx_result' filepath='include/linux/dmaengine.h' line='448' column='1' id='c2154237'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DMA_TRANS_NOERROR' value='0'/>
+        <enumerator name='DMA_TRANS_READ_FAILED' value='1'/>
+        <enumerator name='DMA_TRANS_WRITE_FAILED' value='2'/>
+        <enumerator name='DMA_TRANS_ABORTED' value='3'/>
+      </enum-decl>
+      <class-decl name='dmaengine_unmap_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='463' column='1' id='b32b9ce4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map_cnt' type-id='f9b06939' visibility='default' filepath='include/linux/dmaengine.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='to_cnt' type-id='f9b06939' visibility='default' filepath='include/linux/dmaengine.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='from_cnt' type-id='f9b06939' visibility='default' filepath='include/linux/dmaengine.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bidi_cnt' type-id='f9b06939' visibility='default' filepath='include/linux/dmaengine.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/dmaengine.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/dmaengine.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='len' type-id='b59d7dce' visibility='default' filepath='include/linux/dmaengine.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='addr' type-id='55685a92' visibility='default' filepath='include/linux/dmaengine.h' line='475' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='sum_check_flags' filepath='include/linux/dmaengine.h' line='204' column='1' id='a46c8018'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SUM_CHECK_P_RESULT' value='1'/>
+        <enumerator name='SUM_CHECK_Q_RESULT' value='2'/>
+      </enum-decl>
+      <enum-decl name='dma_transfer_direction' filepath='include/linux/dmaengine.h' line='75' column='1' id='941ca9e2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DMA_MEM_TO_MEM' value='0'/>
+        <enumerator name='DMA_MEM_TO_DEV' value='1'/>
+        <enumerator name='DMA_DEV_TO_MEM' value='2'/>
+        <enumerator name='DMA_DEV_TO_DEV' value='3'/>
+        <enumerator name='DMA_TRANS_NONE' value='4'/>
+      </enum-decl>
+      <class-decl name='dma_interleaved_template' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='146' column='1' id='543d1e64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='src_start' type-id='cf29c9b3' visibility='default' filepath='include/linux/dmaengine.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dst_start' type-id='cf29c9b3' visibility='default' filepath='include/linux/dmaengine.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dir' type-id='941ca9e2' visibility='default' filepath='include/linux/dmaengine.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='src_inc' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='dst_inc' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='src_sgl' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='dst_sgl' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='numf' type-id='b59d7dce' visibility='default' filepath='include/linux/dmaengine.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='frame_size' type-id='b59d7dce' visibility='default' filepath='include/linux/dmaengine.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sgl' type-id='e5c7d3c7' visibility='default' filepath='include/linux/dmaengine.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='data_chunk' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='121' column='1' id='7fdcd183'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/dmaengine.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='icg' type-id='b59d7dce' visibility='default' filepath='include/linux/dmaengine.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dst_icg' type-id='b59d7dce' visibility='default' filepath='include/linux/dmaengine.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='src_icg' type-id='b59d7dce' visibility='default' filepath='include/linux/dmaengine.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_slave_config' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='355' column='1' id='d356829c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='direction' type-id='941ca9e2' visibility='default' filepath='include/linux/dmaengine.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='src_addr' type-id='2522883d' visibility='default' filepath='include/linux/dmaengine.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dst_addr' type-id='2522883d' visibility='default' filepath='include/linux/dmaengine.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='src_addr_width' type-id='270e7659' visibility='default' filepath='include/linux/dmaengine.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='dst_addr_width' type-id='270e7659' visibility='default' filepath='include/linux/dmaengine.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='src_maxburst' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='dst_maxburst' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='src_port_window_size' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='dst_port_window_size' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='device_fc' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='slave_id' type-id='f0981eeb' visibility='default' filepath='include/linux/dmaengine.h' line='366' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dma_slave_buswidth' filepath='include/linux/dmaengine.h' line='292' column='1' id='270e7659'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DMA_SLAVE_BUSWIDTH_UNDEFINED' value='0'/>
+        <enumerator name='DMA_SLAVE_BUSWIDTH_1_BYTE' value='1'/>
+        <enumerator name='DMA_SLAVE_BUSWIDTH_2_BYTES' value='2'/>
+        <enumerator name='DMA_SLAVE_BUSWIDTH_3_BYTES' value='3'/>
+        <enumerator name='DMA_SLAVE_BUSWIDTH_4_BYTES' value='4'/>
+        <enumerator name='DMA_SLAVE_BUSWIDTH_8_BYTES' value='8'/>
+        <enumerator name='DMA_SLAVE_BUSWIDTH_16_BYTES' value='16'/>
+        <enumerator name='DMA_SLAVE_BUSWIDTH_32_BYTES' value='32'/>
+        <enumerator name='DMA_SLAVE_BUSWIDTH_64_BYTES' value='64'/>
+      </enum-decl>
+      <enum-decl name='dma_status' filepath='include/linux/dmaengine.h' line='37' column='1' id='02ac9d9d'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DMA_COMPLETE' value='0'/>
+        <enumerator name='DMA_IN_PROGRESS' value='1'/>
+        <enumerator name='DMA_PAUSED' value='2'/>
+        <enumerator name='DMA_ERROR' value='3'/>
+      </enum-decl>
+      <class-decl name='dma_tx_state' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='615' column='1' id='66bc63b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='last' type-id='6478ea0a' visibility='default' filepath='include/linux/dmaengine.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='used' type-id='6478ea0a' visibility='default' filepath='include/linux/dmaengine.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='residue' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='618' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_chan_dev' size-in-bits='7552' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='281' column='1' id='2765d8de'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chan' type-id='27f3f5d9' visibility='default' filepath='include/linux/dmaengine.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='device' type-id='66e487eb' visibility='default' filepath='include/linux/dmaengine.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='dev_id' type-id='95e97e5e' visibility='default' filepath='include/linux/dmaengine.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='idr_ref' type-id='8a47abc3' visibility='default' filepath='include/linux/dmaengine.h' line='285' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_chan_percpu' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='222' column='1' id='ea186880'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='memcpy_count' type-id='7359adad' visibility='default' filepath='include/linux/dmaengine.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bytes_transferred' type-id='7359adad' visibility='default' filepath='include/linux/dmaengine.h' line='225' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_router' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='233' column='1' id='bfd10d03'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/dmaengine.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='route_free' type-id='680bf43c' visibility='default' filepath='include/linux/dmaengine.h' line='235' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_8250_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/serial_8250.h' line='73' column='1' id='ed38bc9e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setup_irq' type-id='58f84083' visibility='default' filepath='include/linux/serial_8250.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release_irq' type-id='4d2e08b4' visibility='default' filepath='include/linux/serial_8250.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_8250_em485' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/serial_8250.h' line='78' column='1' id='6f81c9e7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_tx_timer' type-id='b6993efc' visibility='default' filepath='include/linux/serial_8250.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='stop_tx_timer' type-id='b6993efc' visibility='default' filepath='include/linux/serial_8250.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='active_timer' type-id='08c8d0fa' visibility='default' filepath='include/linux/serial_8250.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='port' type-id='b26c7631' visibility='default' filepath='include/linux/serial_8250.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='49178f86' size-in-bits='64' id='8a47abc3'/>
+      <pointer-type-def type-id='e4af473b' size-in-bits='64' id='aad24a5b'/>
+      <pointer-type-def type-id='d8b78162' size-in-bits='64' id='b9aa0100'/>
+      <pointer-type-def type-id='c14fce5d' size-in-bits='64' id='df58a979'/>
+      <qualified-type-def type-id='848612dc' const='yes' id='de25fc7b'/>
+      <pointer-type-def type-id='de25fc7b' size-in-bits='64' id='06cc3383'/>
+      <qualified-type-def type-id='931aa361' const='yes' id='921fbfdc'/>
+      <pointer-type-def type-id='921fbfdc' size-in-bits='64' id='fdfb3042'/>
+      <qualified-type-def type-id='ed38bc9e' const='yes' id='75971b31'/>
+      <pointer-type-def type-id='75971b31' size-in-bits='64' id='37dfab81'/>
+      <qualified-type-def type-id='95388a16' const='yes' id='f92f0413'/>
+      <pointer-type-def type-id='f92f0413' size-in-bits='64' id='7e03a5bb'/>
+      <pointer-type-def type-id='b50ce591' size-in-bits='64' id='0e3f80d9'/>
+      <pointer-type-def type-id='81e2e960' size-in-bits='64' id='35da6582'/>
+      <pointer-type-def type-id='bbe0df86' size-in-bits='64' id='2fa81f80'/>
+      <pointer-type-def type-id='22b04425' size-in-bits='64' id='187c2c79'/>
+      <pointer-type-def type-id='d42dfd68' size-in-bits='64' id='3e2efc02'/>
+      <pointer-type-def type-id='c9c16460' size-in-bits='64' id='3cbeb812'/>
+      <pointer-type-def type-id='494c865e' size-in-bits='64' id='81ec80b0'/>
+      <pointer-type-def type-id='08dd4249' size-in-bits='64' id='d37a2705'/>
+      <pointer-type-def type-id='e070d395' size-in-bits='64' id='9c36e869'/>
+      <pointer-type-def type-id='1d86628a' size-in-bits='64' id='16a27d24'/>
+      <pointer-type-def type-id='68595236' size-in-bits='64' id='f166bad0'/>
+      <pointer-type-def type-id='13de152d' size-in-bits='64' id='7be3d1f9'/>
+      <pointer-type-def type-id='e4bb0da5' size-in-bits='64' id='37513679'/>
+      <pointer-type-def type-id='5e3b10ab' size-in-bits='64' id='27f3f5d9'/>
+      <pointer-type-def type-id='2765d8de' size-in-bits='64' id='114d14e4'/>
+      <pointer-type-def type-id='ea186880' size-in-bits='64' id='f8c8e796'/>
+      <pointer-type-def type-id='0dcaa1e4' size-in-bits='64' id='c60ba652'/>
+      <pointer-type-def type-id='543d1e64' size-in-bits='64' id='a987c462'/>
+      <pointer-type-def type-id='bfd10d03' size-in-bits='64' id='70a92833'/>
+      <pointer-type-def type-id='d356829c' size-in-bits='64' id='4f22192a'/>
+      <pointer-type-def type-id='66bc63b4' size-in-bits='64' id='98d7a132'/>
+      <pointer-type-def type-id='b32b9ce4' size-in-bits='64' id='e220a5e2'/>
+      <pointer-type-def type-id='261b7c73' size-in-bits='64' id='e4038107'/>
+      <pointer-type-def type-id='0da72d62' size-in-bits='64' id='304a6cc4'/>
+      <pointer-type-def type-id='1b343ea9' size-in-bits='64' id='c859c465'/>
+      <pointer-type-def type-id='92a295b4' size-in-bits='64' id='57c9915e'/>
+      <pointer-type-def type-id='6dd06c9d' size-in-bits='64' id='dccdb2b1'/>
+      <pointer-type-def type-id='04c69dd4' size-in-bits='64' id='8425c356'/>
+      <pointer-type-def type-id='dfde97ed' size-in-bits='64' id='81aefe59'/>
+      <pointer-type-def type-id='c3b2916f' size-in-bits='64' id='58f84083'/>
+      <pointer-type-def type-id='03dc20ed' size-in-bits='64' id='45d07221'/>
+      <pointer-type-def type-id='ee6561a9' size-in-bits='64' id='34aa5735'/>
+      <pointer-type-def type-id='e1d0c03e' size-in-bits='64' id='bee2fad0'/>
+      <pointer-type-def type-id='2b18e57b' size-in-bits='64' id='6850d327'/>
+      <pointer-type-def type-id='eac2b7d9' size-in-bits='64' id='34fdc91d'/>
+      <pointer-type-def type-id='31bf052e' size-in-bits='64' id='967c9384'/>
+      <pointer-type-def type-id='5a449113' size-in-bits='64' id='fbc594d3'/>
+      <pointer-type-def type-id='fc72f170' size-in-bits='64' id='48268ca6'/>
+      <pointer-type-def type-id='a46c8018' size-in-bits='64' id='b0e7dbd3'/>
+      <pointer-type-def type-id='c0f05602' size-in-bits='64' id='3805964c'/>
+      <pointer-type-def type-id='ccee3154' size-in-bits='64' id='aa8ac136'/>
+      <pointer-type-def type-id='d9866c79' size-in-bits='64' id='fb8c75c5'/>
+      <pointer-type-def type-id='aec34ed8' size-in-bits='64' id='22a9463e'/>
+      <pointer-type-def type-id='6f81c9e7' size-in-bits='64' id='06d9380f'/>
+      <pointer-type-def type-id='d7d97b09' size-in-bits='64' id='b26c7631'/>
+      <pointer-type-def type-id='b0063b51' size-in-bits='64' id='af051c69'/>
+      <pointer-type-def type-id='8f17759b' size-in-bits='64' id='533b348b'/>
+      <pointer-type-def type-id='5fa1c03a' size-in-bits='64' id='d8d26684'/>
+      <pointer-type-def type-id='41df3a6f' size-in-bits='64' id='d8385083'/>
+      <pointer-type-def type-id='41c81272' size-in-bits='64' id='dece2c04'/>
+      <pointer-type-def type-id='06177fb0' size-in-bits='64' id='94639d2a'/>
+      <pointer-type-def type-id='b5d4a6d2' size-in-bits='64' id='680bf43c'/>
+      <pointer-type-def type-id='a198c269' size-in-bits='64' id='42e84365'/>
+      <pointer-type-def type-id='3191191a' size-in-bits='64' id='4d2e08b4'/>
+      <pointer-type-def type-id='20047fcf' size-in-bits='64' id='ce713533'/>
+      <pointer-type-def type-id='89397116' size-in-bits='64' id='ed415bf0'/>
+      <pointer-type-def type-id='c463253a' size-in-bits='64' id='511c33f4'/>
+      <pointer-type-def type-id='0834640b' size-in-bits='64' id='c6b7d75f'/>
+      <pointer-type-def type-id='e6fe4054' size-in-bits='64' id='041f6b76'/>
+      <pointer-type-def type-id='2cebef22' size-in-bits='64' id='92c1d524'/>
+      <pointer-type-def type-id='b1b5c3fe' size-in-bits='64' id='97d53fc8'/>
+      <pointer-type-def type-id='d4c94570' size-in-bits='64' id='898b0c52'/>
+      <pointer-type-def type-id='aa99b0ae' size-in-bits='64' id='c805a6f8'/>
+      <pointer-type-def type-id='3636c828' size-in-bits='64' id='a902ee5a'/>
+      <pointer-type-def type-id='1c2e282d' size-in-bits='64' id='31316b61'/>
+      <function-decl name='clk_get_rate' mangled-name='clk_get_rate' filepath='include/linux/clk.h' line='544' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_get_rate'>
+        <parameter type-id='7d0bc0eb'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='of_device_is_big_endian' mangled-name='of_device_is_big_endian' filepath='include/linux/of.h' line='348' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_device_is_big_endian'>
+        <parameter type-id='0afa6ea3'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='of_alias_get_id' mangled-name='of_alias_get_id' filepath='include/linux/of.h' line='392' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_alias_get_id'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_irq_get' mangled-name='of_irq_get' filepath='include/linux/of_irq.h' line='46' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_irq_get'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='serial8250_register_8250_port' mangled-name='serial8250_register_8250_port' filepath='include/linux/serial_8250.h' line='145' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serial8250_register_8250_port'>
+        <parameter type-id='b26c7631'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_dispose_mapping' mangled-name='irq_dispose_mapping' filepath='include/linux/irqdomain.h' line='396' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_dispose_mapping'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='serial8250_unregister_port' mangled-name='serial8250_unregister_port' filepath='include/linux/serial_8250.h' line='146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serial8250_unregister_port'>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='serial8250_get_port' mangled-name='serial8250_get_port' filepath='drivers/tty/serial/8250/8250.h' line='151' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serial8250_get_port'>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='b26c7631'/>
+      </function-decl>
+      <function-decl name='serial8250_suspend_port' mangled-name='serial8250_suspend_port' filepath='include/linux/serial_8250.h' line='147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serial8250_suspend_port'>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='serial8250_resume_port' mangled-name='serial8250_resume_port' filepath='include/linux/serial_8250.h' line='148' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serial8250_resume_port'>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='c14fce5d'>
+        <parameter type-id='af051c69'/>
+        <return type-id='80f4b756'/>
+      </function-type>
+      <function-type size-in-bits='64' id='81e2e960'>
+        <parameter type-id='27f3f5d9'/>
+        <parameter type-id='e835b5d8'/>
+        <parameter type-id='e835b5d8'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b0e7dbd3'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bbe0df86'>
+        <parameter type-id='27f3f5d9'/>
+        <parameter type-id='e835b5d8'/>
+        <parameter type-id='e835b5d8'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='22b04425'>
+        <parameter type-id='27f3f5d9'/>
+        <parameter type-id='e835b5d8'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b0e7dbd3'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d42dfd68'>
+        <parameter type-id='27f3f5d9'/>
+        <parameter type-id='a987c462'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c9c16460'>
+        <parameter type-id='27f3f5d9'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='941ca9e2'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='494c865e'>
+        <parameter type-id='27f3f5d9'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08dd4249'>
+        <parameter type-id='27f3f5d9'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='e835b5d8'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e070d395'>
+        <parameter type-id='27f3f5d9'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1d86628a'>
+        <parameter type-id='27f3f5d9'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='68595236'>
+        <parameter type-id='27f3f5d9'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='941ca9e2'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='13de152d'>
+        <parameter type-id='27f3f5d9'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e4bb0da5'>
+        <parameter type-id='27f3f5d9'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='261b7c73'>
+        <parameter type-id='27f3f5d9'/>
+        <parameter type-id='6478ea0a'/>
+        <parameter type-id='98d7a132'/>
+        <return type-id='02ac9d9d'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0da72d62'>
+        <parameter type-id='b9aa0100'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1b343ea9'>
+        <parameter type-id='b9aa0100'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='92a295b4'>
+        <parameter type-id='b9aa0100'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6dd06c9d'>
+        <parameter type-id='0e3f80d9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='04c69dd4'>
+        <parameter type-id='27f3f5d9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dfde97ed'>
+        <parameter type-id='27f3f5d9'/>
+        <parameter type-id='4f22192a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c3b2916f'>
+        <parameter type-id='b26c7631'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='03dc20ed'>
+        <parameter type-id='af051c69'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ee6561a9'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='fbc594d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e1d0c03e'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='48268ca6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2b18e57b'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='a72a4e27'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eac2b7d9'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c0f05602'>
+        <parameter type-id='b9aa0100'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='c2b4b27b'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ccee3154'>
+        <parameter type-id='27f3f5d9'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d9866c79'>
+        <parameter type-id='0e3f80d9'/>
+        <return type-id='6478ea0a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5fa1c03a'>
+        <parameter type-id='af051c69'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='41df3a6f'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='41c81272'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06177fb0'>
+        <parameter type-id='b9aa0100'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b5d4a6d2'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a198c269'>
+        <parameter type-id='27f3f5d9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3191191a'>
+        <parameter type-id='b26c7631'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='20047fcf'>
+        <parameter type-id='b26c7631'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='89397116'>
+        <parameter type-id='af051c69'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c463253a'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='a84c031d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0834640b'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e6fe4054'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2cebef22'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='e55856e5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b1b5c3fe'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='e55856e5'/>
+        <parameter type-id='e55856e5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d4c94570'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aa99b0ae'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3636c828'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1c2e282d'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='fdfb3042'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/tty/serial/amba-pl011.c' language='LANG_C89'>
+      <class-decl name='uart_driver' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='303' column='1' id='89f1cbf8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/serial_core.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='driver_name' type-id='80f4b756' visibility='default' filepath='include/linux/serial_core.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev_name' type-id='80f4b756' visibility='default' filepath='include/linux/serial_core.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='major' type-id='95e97e5e' visibility='default' filepath='include/linux/serial_core.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/linux/serial_core.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nr' type-id='95e97e5e' visibility='default' filepath='include/linux/serial_core.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cons' type-id='b9aa0100' visibility='default' filepath='include/linux/serial_core.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='state' type-id='533b348b' visibility='default' filepath='include/linux/serial_core.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tty_driver' type-id='c2b4b27b' visibility='default' filepath='include/linux/serial_core.h' line='317' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_slave_caps' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='414' column='1' id='08e15723'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='src_addr_widths' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dst_addr_widths' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='directions' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_burst' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cmd_pause' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='cmd_resume' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='cmd_terminate' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='residue_granularity' type-id='cad02db3' visibility='default' filepath='include/linux/dmaengine.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='descriptor_reuse' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='423' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='08e15723' size-in-bits='64' id='d9f19b23'/>
+      <pointer-type-def type-id='89f1cbf8' size-in-bits='64' id='04a219de'/>
+      <function-decl name='amba_driver_unregister' mangled-name='amba_driver_unregister' filepath='include/linux/amba/bus.h' line='108' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='amba_driver_unregister'>
+        <parameter type-id='6e829429'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='uart_remove_one_port' mangled-name='uart_remove_one_port' filepath='include/linux/serial_core.h' line='413' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_remove_one_port'>
+        <parameter type-id='04a219de'/>
+        <parameter type-id='af051c69'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_release_channel' mangled-name='dma_release_channel' filepath='include/linux/dmaengine.h' line='1314' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_release_channel'>
+        <parameter type-id='27f3f5d9'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='uart_unregister_driver' mangled-name='uart_unregister_driver' filepath='include/linux/serial_core.h' line='411' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_unregister_driver'>
+        <parameter type-id='04a219de'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_spin_trylock' mangled-name='_raw_spin_trylock' filepath='include/linux/spinlock_api_smp.h' line='37' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_trylock'>
+        <parameter type-id='538ece95'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='uart_console_write' mangled-name='uart_console_write' filepath='include/linux/serial_core.h' line='403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_console_write'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='c6b7d75f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pinctrl_pm_select_default_state' mangled-name='pinctrl_pm_select_default_state' filepath='include/linux/pinctrl/consumer.h' line='45' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_pm_select_default_state'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='uart_parse_options' mangled-name='uart_parse_options' filepath='include/linux/serial_core.h' line='398' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_parse_options'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='uart_set_options' mangled-name='uart_set_options' filepath='include/linux/serial_core.h' line='400' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_set_options'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='b9aa0100'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='uart_register_driver' mangled-name='uart_register_driver' filepath='include/linux/serial_core.h' line='410' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_register_driver'>
+        <parameter type-id='04a219de'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='uart_add_one_port' mangled-name='uart_add_one_port' filepath='include/linux/serial_core.h' line='412' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_add_one_port'>
+        <parameter type-id='04a219de'/>
+        <parameter type-id='af051c69'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='_raw_spin_lock_irq' mangled-name='_raw_spin_lock_irq' filepath='include/linux/spinlock_api_smp.h' line='29' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_lock_irq'>
+        <parameter type-id='538ece95'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_spin_unlock_irq' mangled-name='_raw_spin_unlock_irq' filepath='include/linux/spinlock_api_smp.h' line='41' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_unlock_irq'>
+        <parameter type-id='538ece95'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_alloc_attrs' mangled-name='dma_alloc_attrs' filepath='include/linux/dma-mapping.h' line='451' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_alloc_attrs'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='c0190993'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='mod_timer' mangled-name='mod_timer' filepath='include/linux/timer.h' line='176' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mod_timer'>
+        <parameter type-id='9248e67f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_free_attrs' mangled-name='dma_free_attrs' filepath='include/linux/dma-mapping.h' line='453' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_free_attrs'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_direct_unmap_sg' mangled-name='dma_direct_unmap_sg' filepath='include/linux/dma-mapping.h' line='239' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_direct_unmap_sg'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eea6b025'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='del_timer_sync' mangled-name='del_timer_sync' filepath='include/linux/timer.h' line='191' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='del_timer_sync'>
+        <parameter type-id='9248e67f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pinctrl_pm_select_sleep_state' mangled-name='pinctrl_pm_select_sleep_state' filepath='include/linux/pinctrl/consumer.h' line='46' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_pm_select_sleep_state'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='uart_get_baud_rate' mangled-name='uart_get_baud_rate' filepath='include/linux/serial_core.h' line='327' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_get_baud_rate'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='e55856e5'/>
+        <parameter type-id='e55856e5'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='uart_update_timeout' mangled-name='uart_update_timeout' filepath='include/linux/serial_core.h' line='325' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_update_timeout'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_flip_buffer_push' mangled-name='tty_flip_buffer_push' filepath='include/linux/tty_flip.h' line='14' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_flip_buffer_push'>
+        <parameter type-id='ec77b5b8'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='uart_handle_dcd_change' mangled-name='uart_handle_dcd_change' filepath='include/linux/serial_core.h' line='455' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_handle_dcd_change'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='uart_handle_cts_change' mangled-name='uart_handle_cts_change' filepath='include/linux/serial_core.h' line='457' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_handle_cts_change'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_request_chan' mangled-name='dma_request_chan' filepath='include/linux/dmaengine.h' line='1311' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_request_chan'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='27f3f5d9'/>
+      </function-decl>
+      <function-decl name='dma_request_slave_channel' mangled-name='dma_request_slave_channel' filepath='include/linux/dmaengine.h' line='1309' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_request_slave_channel'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='27f3f5d9'/>
+      </function-decl>
+      <function-decl name='dma_get_slave_caps' mangled-name='dma_get_slave_caps' filepath='include/linux/dmaengine.h' line='1315' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_get_slave_caps'>
+        <parameter type-id='27f3f5d9'/>
+        <parameter type-id='d9f19b23'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tty_insert_flip_string_fixed_flag' mangled-name='tty_insert_flip_string_fixed_flag' filepath='include/linux/tty_flip.h' line='10' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_insert_flip_string_fixed_flag'>
+        <parameter type-id='ec77b5b8'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='a84c031d'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='del_timer' mangled-name='del_timer' filepath='include/linux/timer.h' line='175' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='del_timer'>
+        <parameter type-id='9248e67f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='uart_insert_char' mangled-name='uart_insert_char' filepath='include/linux/serial_core.h' line='460' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_insert_char'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='handle_sysrq' mangled-name='handle_sysrq' filepath='include/linux/sysrq.h' line='46' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='handle_sysrq'>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='do_SAK' mangled-name='do_SAK' filepath='include/linux/tty.h' line='508' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='do_SAK'>
+        <parameter type-id='572fbdcb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='uart_write_wakeup' mangled-name='uart_write_wakeup' filepath='include/linux/serial_core.h' line='320' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_write_wakeup'>
+        <parameter type-id='af051c69'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_direct_map_sg' mangled-name='dma_direct_map_sg' filepath='include/linux/dma-mapping.h' line='212' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_direct_map_sg'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eea6b025'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='uart_suspend_port' mangled-name='uart_suspend_port' filepath='include/linux/serial_core.h' line='419' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_suspend_port'>
+        <parameter type-id='04a219de'/>
+        <parameter type-id='af051c69'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='uart_resume_port' mangled-name='uart_resume_port' filepath='include/linux/serial_core.h' line='420' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_resume_port'>
+        <parameter type-id='04a219de'/>
+        <parameter type-id='af051c69'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tty_termios_encode_baud_rate' mangled-name='tty_termios_encode_baud_rate' filepath='include/linux/tty.h' line='523' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_termios_encode_baud_rate'>
+        <parameter type-id='e55856e5'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/tty/serial/samsung_tty.c' language='LANG_C89'>
+      <function-decl name='clk_get' mangled-name='clk_get' filepath='include/linux/clk.h' line='290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_get'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='clk_put' mangled-name='clk_put' filepath='include/linux/clk.h' line='556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_put'>
+        <parameter type-id='7d0bc0eb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='disable_irq_nosync' mangled-name='disable_irq_nosync' filepath='include/linux/interrupt.h' line='222' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='disable_irq_nosync'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_direct_sync_single_for_cpu' mangled-name='dma_direct_sync_single_for_cpu' filepath='include/linux/dma-mapping.h' line='241' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_direct_sync_single_for_cpu'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='enable_irq' mangled-name='enable_irq' filepath='include/linux/interrupt.h' line='226' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='enable_irq'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_direct_unmap_page' mangled-name='dma_direct_unmap_page' filepath='include/linux/dma-mapping.h' line='237' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_direct_unmap_page'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eea6b025'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_port_tty_get' mangled-name='tty_port_tty_get' filepath='include/linux/tty.h' line='690' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_tty_get'>
+        <parameter type-id='ec77b5b8'/>
+        <return type-id='572fbdcb'/>
+      </function-decl>
+      <function-decl name='tty_kref_put' mangled-name='tty_kref_put' filepath='include/linux/tty.h' line='410' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_kref_put'>
+        <parameter type-id='572fbdcb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_direct_sync_single_for_device' mangled-name='dma_direct_sync_single_for_device' filepath='include/linux/dma-mapping.h' line='219' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_direct_sync_single_for_device'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_direct_map_page' mangled-name='dma_direct_map_page' filepath='include/linux/dma-mapping.h' line='209' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_direct_map_page'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eea6b025'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='3a47d82b'/>
+      </function-decl>
+      <function-decl name='dev_driver_string' mangled-name='dev_driver_string' filepath='include/linux/device.h' line='1726' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_driver_string'>
+        <parameter type-id='8df61054'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='register_console' mangled-name='register_console' filepath='include/linux/console.h' line='175' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_console'>
+        <parameter type-id='b9aa0100'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/tty/serial/serial_core.c' language='LANG_C89'>
+      <function-decl name='uart_get_divisor' mangled-name='uart_get_divisor' filepath='drivers/tty/serial/serial_core.c' line='482' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_get_divisor'>
+        <parameter type-id='af051c69' name='port' filepath='drivers/tty/serial/serial_core.c' line='482' column='1'/>
+        <parameter type-id='f0981eeb' name='baud' filepath='drivers/tty/serial/serial_core.c' line='482' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='uart_console_device' mangled-name='uart_console_device' filepath='drivers/tty/serial/serial_core.c' line='2604' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_console_device'>
+        <parameter type-id='b9aa0100' name='co' filepath='drivers/tty/serial/serial_core.c' line='2604' column='1'/>
+        <parameter type-id='7292109c' name='index' filepath='drivers/tty/serial/serial_core.c' line='2604' column='1'/>
+        <return type-id='c2b4b27b'/>
+      </function-decl>
+      <function-decl name='_dev_notice' mangled-name='_dev_notice' filepath='include/linux/device.h' line='1762' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_dev_notice'>
+        <parameter type-id='8df61054'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/tty/serial/sprd_serial.c' language='LANG_C89'>
+      <function-decl name='clk_set_parent' mangled-name='clk_set_parent' filepath='include/linux/clk.h' line='698' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_set_parent'>
+        <parameter type-id='7d0bc0eb'/>
+        <parameter type-id='7d0bc0eb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_free_irq' mangled-name='devm_free_irq' filepath='include/linux/interrupt.h' line='202' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_free_irq'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_termios_baud_rate' mangled-name='tty_termios_baud_rate' filepath='include/linux/tty.h' line='521' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_termios_baud_rate'>
+        <parameter type-id='e55856e5'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/tty/sysrq.c' language='LANG_C89'>
+      <function-decl name='of_find_node_opts_by_path' mangled-name='of_find_node_opts_by_path' filepath='include/linux/of.h' line='278' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_node_opts_by_path'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7d3cd834'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/tty/tty_buffer.c' language='LANG_C89'>
+      <function-decl name='__tty_insert_flip_char' mangled-name='__tty_insert_flip_char' filepath='drivers/tty/tty_buffer.c' line='379' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__tty_insert_flip_char'>
+        <parameter type-id='ec77b5b8' name='port' filepath='drivers/tty/tty_buffer.c' line='379' column='1'/>
+        <parameter type-id='002ac4a6' name='ch' filepath='drivers/tty/tty_buffer.c' line='379' column='1'/>
+        <parameter type-id='a84c031d' name='flag' filepath='drivers/tty/tty_buffer.c' line='379' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tty_schedule_flip' mangled-name='tty_schedule_flip' filepath='drivers/tty/tty_buffer.c' line='405' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_schedule_flip'>
+        <parameter type-id='ec77b5b8' name='port' filepath='drivers/tty/tty_buffer.c' line='405' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/tty/tty_io.c' language='LANG_C89'>
+      <var-decl name='tty_std_termios' type-id='2f8662b5' mangled-name='tty_std_termios' visibility='default' filepath='drivers/tty/tty_io.c' line='121' column='1' elf-symbol-id='tty_std_termios'/>
+      <function-decl name='tty_wakeup' mangled-name='tty_wakeup' filepath='drivers/tty/tty_io.c' line='527' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_wakeup'>
+        <parameter type-id='572fbdcb' name='tty' filepath='drivers/tty/tty_io.c' line='527' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_ldisc_ref' mangled-name='tty_ldisc_ref' filepath='include/linux/tty.h' line='547' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_ldisc_ref'>
+        <parameter type-id='572fbdcb'/>
+        <return type-id='e0bbd59c'/>
+      </function-decl>
+      <function-decl name='tty_hangup' mangled-name='tty_hangup' filepath='drivers/tty/tty_io.c' line='677' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_hangup'>
+        <parameter type-id='572fbdcb' name='tty' filepath='drivers/tty/tty_io.c' line='677' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='stop_tty' mangled-name='stop_tty' filepath='drivers/tty/tty_io.c' line='778' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='stop_tty'>
+        <parameter type-id='572fbdcb' name='tty' filepath='drivers/tty/tty_io.c' line='778' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='start_tty' mangled-name='start_tty' filepath='drivers/tty/tty_io.c' line='810' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='start_tty'>
+        <parameter type-id='572fbdcb' name='tty' filepath='drivers/tty/tty_io.c' line='810' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__tty_alloc_driver' mangled-name='__tty_alloc_driver' filepath='drivers/tty/tty_io.c' line='3210' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__tty_alloc_driver'>
+        <parameter type-id='f0981eeb' name='lines' filepath='drivers/tty/tty_io.c' line='3210' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/tty/tty_io.c' line='3210' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/tty/tty_io.c' line='3211' column='1'/>
+        <return type-id='c2b4b27b'/>
+      </function-decl>
+      <function-decl name='device_create_with_groups' mangled-name='device_create_with_groups' filepath='include/linux/device.h' line='1657' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_create_with_groups'>
+        <parameter type-id='67aca04f'/>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='c97de1ac'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/tty/tty_ioctl.c' language='LANG_C89'>
+      <function-decl name='tty_termios_copy_hw' mangled-name='tty_termios_copy_hw' filepath='drivers/tty/tty_ioctl.c' line='273' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_termios_copy_hw'>
+        <parameter type-id='e55856e5' name='new' filepath='drivers/tty/tty_ioctl.c' line='273' column='1'/>
+        <parameter type-id='e55856e5' name='old' filepath='drivers/tty/tty_ioctl.c' line='273' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_mode_ioctl' mangled-name='tty_mode_ioctl' filepath='drivers/tty/tty_ioctl.c' line='708' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_mode_ioctl'>
+        <parameter type-id='572fbdcb' name='tty' filepath='drivers/tty/tty_ioctl.c' line='708' column='1'/>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/tty/tty_ioctl.c' line='708' column='1'/>
+        <parameter type-id='f0981eeb' name='cmd' filepath='drivers/tty/tty_ioctl.c' line='709' column='1'/>
+        <parameter type-id='7359adad' name='arg' filepath='drivers/tty/tty_ioctl.c' line='709' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/tty/tty_ldisc.c' language='LANG_C89'>
+      <function-decl name='tty_ldisc_deref' mangled-name='tty_ldisc_deref' filepath='drivers/tty/tty_ldisc.c' line='310' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_ldisc_deref'>
+        <parameter type-id='e0bbd59c' name='ld' filepath='drivers/tty/tty_ldisc.c' line='310' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/tty/tty_port.c' language='LANG_C89'>
+      <function-decl name='tty_port_link_device' mangled-name='tty_port_link_device' filepath='drivers/tty/tty_port.c' line='88' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_link_device'>
+        <parameter type-id='ec77b5b8' name='port' filepath='drivers/tty/tty_port.c' line='88' column='1'/>
+        <parameter type-id='c2b4b27b' name='driver' filepath='drivers/tty/tty_port.c' line='89' column='1'/>
+        <parameter type-id='f0981eeb' name='index' filepath='drivers/tty/tty_port.c' line='89' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_port_destroy' mangled-name='tty_port_destroy' filepath='drivers/tty/tty_port.c' line='246' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_destroy'>
+        <parameter type-id='ec77b5b8' name='port' filepath='drivers/tty/tty_port.c' line='246' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/uio/uio.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='c067c68a' size-in-bits='2240' id='1afbfcb5'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='4a82abb2' size-in-bits='1600' id='712dd60d'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <class-decl name='uio_info' size-in-bits='4544' is-struct='yes' visibility='default' filepath='include/linux/uio_driver.h' line='98' column='1' id='f9c1a8c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uio_dev' type-id='776fd487' visibility='default' filepath='include/linux/uio_driver.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/uio_driver.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='version' type-id='80f4b756' visibility='default' filepath='include/linux/uio_driver.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mem' type-id='1afbfcb5' visibility='default' filepath='include/linux/uio_driver.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='port' type-id='712dd60d' visibility='default' filepath='include/linux/uio_driver.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='irq' type-id='bd54fe1a' visibility='default' filepath='include/linux/uio_driver.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='irq_flags' type-id='7359adad' visibility='default' filepath='include/linux/uio_driver.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/uio_driver.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='handler' type-id='83705195' visibility='default' filepath='include/linux/uio_driver.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='mmap' type-id='011c3e5a' visibility='default' filepath='include/linux/uio_driver.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='open' type-id='71c75804' visibility='default' filepath='include/linux/uio_driver.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='release' type-id='71c75804' visibility='default' filepath='include/linux/uio_driver.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='irqcontrol' type-id='e5635fec' visibility='default' filepath='include/linux/uio_driver.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uio_device' size-in-bits='8192' is-struct='yes' visibility='default' filepath='include/linux/uio_driver.h' line='69' column='1' id='1fbf855f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/uio_driver.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/uio_driver.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/linux/uio_driver.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7456'>
+          <var-decl name='event' type-id='49178f86' visibility='default' filepath='include/linux/uio_driver.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='async_queue' type-id='5bb9c75d' visibility='default' filepath='include/linux/uio_driver.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/uio_driver.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='info' type-id='fb1092f1' visibility='default' filepath='include/linux/uio_driver.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='info_lock' type-id='925167dc' visibility='default' filepath='include/linux/uio_driver.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='map_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/uio_driver.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='portio_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/uio_driver.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uio_mem' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/uio_driver.h' line='37' column='1' id='c067c68a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/uio_driver.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr' type-id='2522883d' visibility='default' filepath='include/linux/uio_driver.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='offs' type-id='7359adad' visibility='default' filepath='include/linux/uio_driver.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='acc63fdf' visibility='default' filepath='include/linux/uio_driver.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='memtype' type-id='95e97e5e' visibility='default' filepath='include/linux/uio_driver.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='internal_addr' type-id='eaa32e2f' visibility='default' filepath='include/linux/uio_driver.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='map' type-id='722604ad' visibility='default' filepath='include/linux/uio_driver.h' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uio_map' size-in-bits='832' is-struct='yes' visibility='default' filepath='drivers/uio/uio.c' line='42' column='1' id='dd72818d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='drivers/uio/uio.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mem' type-id='93b82798' visibility='default' filepath='drivers/uio/uio.c' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uio_port' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/uio_driver.h' line='59' column='1' id='4a82abb2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/uio_driver.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='start' type-id='7359adad' visibility='default' filepath='include/linux/uio_driver.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='7359adad' visibility='default' filepath='include/linux/uio_driver.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='porttype' type-id='95e97e5e' visibility='default' filepath='include/linux/uio_driver.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='portio' type-id='e190fb78' visibility='default' filepath='include/linux/uio_driver.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uio_portio' size-in-bits='832' is-struct='yes' visibility='default' filepath='drivers/uio/uio.c' line='125' column='1' id='9c34bcea'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='drivers/uio/uio.c' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='port' type-id='c62e6860' visibility='default' filepath='drivers/uio/uio.c' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f347e46a' size-in-bits='64' id='71c75804'/>
+      <pointer-type-def type-id='52c77032' size-in-bits='64' id='e5635fec'/>
+      <pointer-type-def type-id='46c85660' size-in-bits='64' id='011c3e5a'/>
+      <pointer-type-def type-id='707953c1' size-in-bits='64' id='83705195'/>
+      <pointer-type-def type-id='1fbf855f' size-in-bits='64' id='776fd487'/>
+      <pointer-type-def type-id='f9c1a8c9' size-in-bits='64' id='fb1092f1'/>
+      <pointer-type-def type-id='dd72818d' size-in-bits='64' id='722604ad'/>
+      <pointer-type-def type-id='c067c68a' size-in-bits='64' id='93b82798'/>
+      <pointer-type-def type-id='4a82abb2' size-in-bits='64' id='c62e6860'/>
+      <pointer-type-def type-id='9c34bcea' size-in-bits='64' id='e190fb78'/>
+      <function-decl name='__uio_register_device' mangled-name='__uio_register_device' filepath='drivers/uio/uio.c' line='916' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__uio_register_device'>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/uio/uio.c' line='916' column='1'/>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/uio/uio.c' line='917' column='1'/>
+        <parameter type-id='fb1092f1' name='info' filepath='drivers/uio/uio.c' line='918' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='uio_unregister_device' mangled-name='uio_unregister_device' filepath='drivers/uio/uio.c' line='1004' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uio_unregister_device'>
+        <parameter type-id='fb1092f1' name='info' filepath='drivers/uio/uio.c' line='1004' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='f347e46a'>
+        <parameter type-id='fb1092f1'/>
+        <parameter type-id='7e666abe'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='52c77032'>
+        <parameter type-id='fb1092f1'/>
+        <parameter type-id='a7832498'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='46c85660'>
+        <parameter type-id='fb1092f1'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='707953c1'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='fb1092f1'/>
+        <return type-id='4bdecfd7'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/class/cdc-acm.c' language='LANG_C89'>
+      <class-decl name='usb_cdc_parsed_header' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/usb/cdc.h' line='26' column='1' id='10a51b66'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usb_cdc_union_desc' type-id='b7f056d4' visibility='default' filepath='include/linux/usb/cdc.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='usb_cdc_header_desc' type-id='015a0234' visibility='default' filepath='include/linux/usb/cdc.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usb_cdc_call_mgmt_descriptor' type-id='93edac17' visibility='default' filepath='include/linux/usb/cdc.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='usb_cdc_acm_descriptor' type-id='6f7e8184' visibility='default' filepath='include/linux/usb/cdc.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='usb_cdc_country_functional_desc' type-id='1654068f' visibility='default' filepath='include/linux/usb/cdc.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='usb_cdc_network_terminal_desc' type-id='b6bc3316' visibility='default' filepath='include/linux/usb/cdc.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='usb_cdc_ether_desc' type-id='a9c8654f' visibility='default' filepath='include/linux/usb/cdc.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='usb_cdc_dmm_desc' type-id='0c1984e5' visibility='default' filepath='include/linux/usb/cdc.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='usb_cdc_mdlm_desc' type-id='94bfb8eb' visibility='default' filepath='include/linux/usb/cdc.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='usb_cdc_mdlm_detail_desc' type-id='8b42c33d' visibility='default' filepath='include/linux/usb/cdc.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='usb_cdc_obex_desc' type-id='4875dd9d' visibility='default' filepath='include/linux/usb/cdc.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='usb_cdc_ncm_desc' type-id='7041aa49' visibility='default' filepath='include/linux/usb/cdc.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='usb_cdc_mbim_desc' type-id='31efb644' visibility='default' filepath='include/linux/usb/cdc.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='usb_cdc_mbim_extended_desc' type-id='6253b388' visibility='default' filepath='include/linux/usb/cdc.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='phonet_magic_present' type-id='b50a4934' visibility='default' filepath='include/linux/usb/cdc.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_union_desc' size-in-bits='40' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='101' column='1' id='d37cd54e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bMasterInterface0' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bSlaveInterface0' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_header_desc' size-in-bits='40' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='63' column='1' id='d285082e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bcdCDC' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_call_mgmt_descriptor' size-in-bits='40' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='72' column='1' id='42b001af'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bmCapabilities' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bDataInterface' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_acm_descriptor' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='85' column='1' id='f0029b4e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bmCapabilities' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_country_functional_desc' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='112' column='1' id='62e0e7f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='iCountryCodeRelDate' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wCountyCode0' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_network_terminal_desc' size-in-bits='56' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='123' column='1' id='19834fe0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bEntityId' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='iName' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bChannelIndex' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bPhysicalInterface' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_ether_desc' size-in-bits='104' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='135' column='1' id='0e5b8ca7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='iMACAddress' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bmEthernetStatistics' type-id='2f162548' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wMaxSegmentSize' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='wNumberMCFilters' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bNumberPowerFilters' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='144' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_dmm_desc' size-in-bits='56' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='148' column='1' id='5e084b85'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bFunctionLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubtype' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bcdVersion' type-id='d315442e' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='wMaxCommand' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='153' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_mdlm_desc' size-in-bits='168' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='157' column='1' id='9d7259bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bcdVersion' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bGUID' type-id='9396cabb' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_mdlm_detail_desc' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='167' column='1' id='31e0f35d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bGuidDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bDetailData' type-id='167619f6' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='174' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_obex_desc' size-in-bits='40' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='178' column='1' id='8ebff3ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bcdVersion' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='183' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_ncm_desc' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='187' column='1' id='bdcf5751'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bcdNcmVersion' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bmNetworkCapabilities' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='193' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_mbim_desc' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='197' column='1' id='0570fd5e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bcdMBIMVersion' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='wMaxControlMessage' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='bNumberFilters' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bMaxFilterSize' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='wMaxSegmentSize' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='bmNetworkCapabilities' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_mbim_extended_desc' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='211' column='1' id='3093472a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bcdMBIMExtendedVersion' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bMaxOutstandingCommandMessages' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='wMTU' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='218' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='dbf3947c' const='yes' id='fad8dcd1'/>
+      <pointer-type-def type-id='fad8dcd1' size-in-bits='64' id='de63df21'/>
+      <qualified-type-def type-id='37ce495e' const='yes' id='1e6236d9'/>
+      <pointer-type-def type-id='1e6236d9' size-in-bits='64' id='c79c8089'/>
+      <qualified-type-def type-id='39b596d4' const='yes' id='0e085d99'/>
+      <pointer-type-def type-id='0e085d99' size-in-bits='64' id='ca2b80c9'/>
+      <pointer-type-def type-id='37ce495e' size-in-bits='64' id='301185b4'/>
+      <pointer-type-def type-id='f0029b4e' size-in-bits='64' id='6f7e8184'/>
+      <pointer-type-def type-id='42b001af' size-in-bits='64' id='93edac17'/>
+      <pointer-type-def type-id='62e0e7f7' size-in-bits='64' id='1654068f'/>
+      <pointer-type-def type-id='5e084b85' size-in-bits='64' id='0c1984e5'/>
+      <pointer-type-def type-id='0e5b8ca7' size-in-bits='64' id='a9c8654f'/>
+      <pointer-type-def type-id='d285082e' size-in-bits='64' id='015a0234'/>
+      <pointer-type-def type-id='0570fd5e' size-in-bits='64' id='31efb644'/>
+      <pointer-type-def type-id='3093472a' size-in-bits='64' id='6253b388'/>
+      <pointer-type-def type-id='9d7259bb' size-in-bits='64' id='94bfb8eb'/>
+      <pointer-type-def type-id='31e0f35d' size-in-bits='64' id='8b42c33d'/>
+      <pointer-type-def type-id='bdcf5751' size-in-bits='64' id='7041aa49'/>
+      <pointer-type-def type-id='19834fe0' size-in-bits='64' id='b6bc3316'/>
+      <pointer-type-def type-id='8ebff3ed' size-in-bits='64' id='4875dd9d'/>
+      <pointer-type-def type-id='10a51b66' size-in-bits='64' id='16f45b2c'/>
+      <pointer-type-def type-id='d37cd54e' size-in-bits='64' id='b7f056d4'/>
+      <pointer-type-def type-id='2b1e6e59' size-in-bits='64' id='a07d0491'/>
+      <pointer-type-def type-id='a07d0491' size-in-bits='64' id='5fce7261'/>
+      <pointer-type-def type-id='cff07063' size-in-bits='64' id='3f8b2ed3'/>
+      <function-decl name='tty_unregister_driver' mangled-name='tty_unregister_driver' filepath='include/linux/tty.h' line='484' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_unregister_driver'>
+        <parameter type-id='c2b4b27b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='put_tty_driver' mangled-name='put_tty_driver' filepath='include/linux/tty_driver.h' line='340' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='put_tty_driver'>
+        <parameter type-id='c2b4b27b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='idr_destroy' mangled-name='idr_destroy' filepath='include/linux/idr.h' line='125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_destroy'>
+        <parameter type-id='301185b4'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_ifnum_to_if' mangled-name='usb_ifnum_to_if' filepath='include/linux/usb.h' line='892' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ifnum_to_if'>
+        <parameter type-id='ca2b80c9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='8bf48c31'/>
+      </function-decl>
+      <function-decl name='cdc_parse_cdc_header' mangled-name='cdc_parse_cdc_header' filepath='include/linux/usb/cdc.h' line='47' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdc_parse_cdc_header'>
+        <parameter type-id='16f45b2c'/>
+        <parameter type-id='8bf48c31'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_find_common_endpoints' mangled-name='usb_find_common_endpoints' filepath='include/linux/usb.h' line='105' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_find_common_endpoints'>
+        <parameter type-id='2ac920d2'/>
+        <parameter type-id='5fce7261'/>
+        <parameter type-id='5fce7261'/>
+        <parameter type-id='5fce7261'/>
+        <parameter type-id='5fce7261'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tty_port_init' mangled-name='tty_port_init' filepath='include/linux/tty.h' line='580' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_init'>
+        <parameter type-id='ec77b5b8'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_get_intf' mangled-name='usb_get_intf' filepath='include/linux/usb.h' line='279' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_get_intf'>
+        <parameter type-id='8bf48c31'/>
+        <return type-id='8bf48c31'/>
+      </function-decl>
+      <function-decl name='idr_alloc' mangled-name='idr_alloc' filepath='include/linux/idr.h' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_alloc'>
+        <parameter type-id='301185b4'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_alloc_coherent' mangled-name='usb_alloc_coherent' filepath='include/linux/usb.h' line='1788' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_alloc_coherent'>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='c0190993'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='usb_free_coherent' mangled-name='usb_free_coherent' filepath='include/linux/usb.h' line='1790' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_free_coherent'>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='3a47d82b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_create_file' mangled-name='device_create_file' filepath='include/linux/device.h' line='887' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_create_file'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='de63df21'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tty_port_put' mangled-name='tty_port_put' filepath='include/linux/tty.h' line='602' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_put'>
+        <parameter type-id='ec77b5b8'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_remove_file' mangled-name='device_remove_file' filepath='include/linux/device.h' line='889' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_remove_file'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='de63df21'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_driver_claim_interface' mangled-name='usb_driver_claim_interface' filepath='include/linux/usb.h' line='861' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_driver_claim_interface'>
+        <parameter type-id='46ae908a'/>
+        <parameter type-id='8bf48c31'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tty_port_register_device' mangled-name='tty_port_register_device' filepath='include/linux/tty.h' line='583' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_register_device'>
+        <parameter type-id='ec77b5b8'/>
+        <parameter type-id='c2b4b27b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='usb_clear_halt' mangled-name='usb_clear_halt' filepath='include/linux/usb.h' line='1845' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_clear_halt'>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tty_vhangup' mangled-name='tty_vhangup' filepath='include/linux/tty.h' line='505' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_vhangup'>
+        <parameter type-id='572fbdcb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_unregister_device' mangled-name='tty_unregister_device' filepath='include/linux/tty.h' line='491' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_unregister_device'>
+        <parameter type-id='c2b4b27b'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_driver_release_interface' mangled-name='usb_driver_release_interface' filepath='include/linux/usb.h' line='882' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_driver_release_interface'>
+        <parameter type-id='46ae908a'/>
+        <parameter type-id='8bf48c31'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_get_from_anchor' mangled-name='usb_get_from_anchor' filepath='include/linux/usb.h' line='1756' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_get_from_anchor'>
+        <parameter type-id='bd300bf3'/>
+        <return type-id='ab85b8f2'/>
+      </function-decl>
+      <function-decl name='tty_port_tty_hangup' mangled-name='tty_port_tty_hangup' filepath='include/linux/tty.h' line='696' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_tty_hangup'>
+        <parameter type-id='ec77b5b8'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_port_tty_wakeup' mangled-name='tty_port_tty_wakeup' filepath='include/linux/tty.h' line='697' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_tty_wakeup'>
+        <parameter type-id='ec77b5b8'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='krealloc' mangled-name='krealloc' filepath='include/linux/slab.h' line='188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='krealloc'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='usb_autopm_get_interface_no_resume' mangled-name='usb_autopm_get_interface_no_resume' filepath='include/linux/usb.h' line='789' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_autopm_get_interface_no_resume'>
+        <parameter type-id='8bf48c31'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='idr_remove' mangled-name='idr_remove' filepath='include/linux/idr.h' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_remove'>
+        <parameter type-id='301185b4'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='usb_put_intf' mangled-name='usb_put_intf' filepath='include/linux/usb.h' line='280' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_put_intf'>
+        <parameter type-id='8bf48c31'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_set_operations' mangled-name='tty_set_operations' filepath='include/linux/tty_driver.h' line='341' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_set_operations'>
+        <parameter type-id='c2b4b27b'/>
+        <parameter type-id='f2c18b44'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_register_driver' mangled-name='tty_register_driver' filepath='include/linux/tty.h' line='483' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_register_driver'>
+        <parameter type-id='c2b4b27b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='idr_find' mangled-name='idr_find' filepath='include/linux/idr.h' line='119' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_find'>
+        <parameter type-id='c79c8089'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='refcount_inc_not_zero_checked' mangled-name='refcount_inc_not_zero_checked' filepath='include/linux/refcount.h' line='49' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='refcount_inc_not_zero_checked'>
+        <parameter type-id='74c91557'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='tty_standard_install' mangled-name='tty_standard_install' filepath='include/linux/tty.h' line='573' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_standard_install'>
+        <parameter type-id='c2b4b27b'/>
+        <parameter type-id='572fbdcb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tty_port_open' mangled-name='tty_port_open' filepath='include/linux/tty.h' line='707' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_open'>
+        <parameter type-id='ec77b5b8'/>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tty_port_close' mangled-name='tty_port_close' filepath='include/linux/tty.h' line='703' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_close'>
+        <parameter type-id='ec77b5b8'/>
+        <parameter type-id='572fbdcb'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_anchor_urb' mangled-name='usb_anchor_urb' filepath='include/linux/usb.h' line='1752' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_anchor_urb'>
+        <parameter type-id='ab85b8f2'/>
+        <parameter type-id='bd300bf3'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='add_wait_queue' mangled-name='add_wait_queue' filepath='include/linux/wait.h' line='163' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='add_wait_queue'>
+        <parameter type-id='3f8b2ed3'/>
+        <parameter type-id='db9d03e3'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='schedule' mangled-name='schedule' filepath='include/linux/sched.h' line='226' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='schedule'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='remove_wait_queue' mangled-name='remove_wait_queue' filepath='include/linux/wait.h' line='165' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='remove_wait_queue'>
+        <parameter type-id='3f8b2ed3'/>
+        <parameter type-id='db9d03e3'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_port_hangup' mangled-name='tty_port_hangup' filepath='include/linux/tty.h' line='695' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_hangup'>
+        <parameter type-id='ec77b5b8'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='637cfeaf' size-in-bits='64' id='74c91557'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/common/common.c' language='LANG_C89'>
+      <function-decl name='usb_otg_state_string' mangled-name='usb_otg_state_string' filepath='drivers/usb/common/common.c' line='37' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_otg_state_string'>
+        <parameter type-id='4c0c8157' name='state' filepath='drivers/usb/common/common.c' line='37' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='usb_speed_string' mangled-name='usb_speed_string' filepath='drivers/usb/common/common.c' line='72' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_speed_string'>
+        <parameter type-id='4e532009' name='speed' filepath='drivers/usb/common/common.c' line='72' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='usb_get_maximum_speed' mangled-name='usb_get_maximum_speed' filepath='drivers/usb/common/common.c' line='80' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_get_maximum_speed'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/common/common.c' line='80' column='1'/>
+        <return type-id='4e532009'/>
+      </function-decl>
+      <function-decl name='of_find_node_with_property' mangled-name='of_find_node_with_property' filepath='include/linux/of.h' line='301' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_node_with_property'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <enum-decl name='usb_otg_state' filepath='include/linux/usb/phy.h' line='43' column='1' id='4c0c8157'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='OTG_STATE_UNDEFINED' value='0'/>
+        <enumerator name='OTG_STATE_B_IDLE' value='1'/>
+        <enumerator name='OTG_STATE_B_SRP_INIT' value='2'/>
+        <enumerator name='OTG_STATE_B_PERIPHERAL' value='3'/>
+        <enumerator name='OTG_STATE_B_WAIT_ACON' value='4'/>
+        <enumerator name='OTG_STATE_B_HOST' value='5'/>
+        <enumerator name='OTG_STATE_A_IDLE' value='6'/>
+        <enumerator name='OTG_STATE_A_WAIT_VRISE' value='7'/>
+        <enumerator name='OTG_STATE_A_WAIT_BCON' value='8'/>
+        <enumerator name='OTG_STATE_A_HOST' value='9'/>
+        <enumerator name='OTG_STATE_A_SUSPEND' value='10'/>
+        <enumerator name='OTG_STATE_A_PERIPHERAL' value='11'/>
+        <enumerator name='OTG_STATE_A_WAIT_VFALL' value='12'/>
+        <enumerator name='OTG_STATE_A_VBUS_ERR' value='13'/>
+      </enum-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/common/debug.c' language='LANG_C89'>
+      <function-decl name='usb_decode_ctrl' mangled-name='usb_decode_ctrl' filepath='drivers/usb/common/debug.c' line='213' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_decode_ctrl'>
+        <parameter type-id='26a90f95' name='str' filepath='drivers/usb/common/debug.c' line='213' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/usb/common/debug.c' line='213' column='1'/>
+        <parameter type-id='8f048e17' name='bRequestType' filepath='drivers/usb/common/debug.c' line='213' column='1'/>
+        <parameter type-id='8f048e17' name='bRequest' filepath='drivers/usb/common/debug.c' line='214' column='1'/>
+        <parameter type-id='d315442e' name='wValue' filepath='drivers/usb/common/debug.c' line='214' column='1'/>
+        <parameter type-id='d315442e' name='wIndex' filepath='drivers/usb/common/debug.c' line='214' column='1'/>
+        <parameter type-id='d315442e' name='wLength' filepath='drivers/usb/common/debug.c' line='215' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/core/driver.c' language='LANG_C89'>
+      <pointer-type-def type-id='cb08bae1' size-in-bits='64' id='32c73a29'/>
+      <function-decl name='usb_store_new_id' mangled-name='usb_store_new_id' filepath='drivers/usb/core/driver.c' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_store_new_id'>
+        <parameter type-id='32c73a29' name='dynids' filepath='drivers/usb/core/driver.c' line='42' column='1'/>
+        <parameter type-id='bc57058f' name='id_table' filepath='drivers/usb/core/driver.c' line='43' column='1'/>
+        <parameter type-id='00c7b870' name='driver' filepath='drivers/usb/core/driver.c' line='44' column='1'/>
+        <parameter type-id='80f4b756' name='buf' filepath='drivers/usb/core/driver.c' line='45' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='drivers/usb/core/driver.c' line='45' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='usb_show_dynids' mangled-name='usb_show_dynids' filepath='drivers/usb/core/driver.c' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_show_dynids'>
+        <parameter type-id='32c73a29' name='dynids' filepath='drivers/usb/core/driver.c' line='114' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='drivers/usb/core/driver.c' line='114' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='usb_match_one_id' mangled-name='usb_match_one_id' filepath='drivers/usb/core/driver.c' line='678' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_match_one_id'>
+        <parameter type-id='8bf48c31' name='interface' filepath='drivers/usb/core/driver.c' line='678' column='1'/>
+        <parameter type-id='bc57058f' name='id' filepath='drivers/usb/core/driver.c' line='679' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_match_id' mangled-name='usb_match_id' filepath='drivers/usb/core/driver.c' line='771' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_match_id'>
+        <parameter type-id='8bf48c31' name='interface' filepath='drivers/usb/core/driver.c' line='771' column='1'/>
+        <parameter type-id='bc57058f' name='id' filepath='drivers/usb/core/driver.c' line='772' column='1'/>
+        <return type-id='bc57058f'/>
+      </function-decl>
+      <function-decl name='usb_enable_autosuspend' mangled-name='usb_enable_autosuspend' filepath='drivers/usb/core/driver.c' line='1529' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_enable_autosuspend'>
+        <parameter type-id='25e60cb2' name='udev' filepath='drivers/usb/core/driver.c' line='1529' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/core/hcd-pci.c' language='LANG_C89'>
+      <var-decl name='usb_hcd_pci_pm_ops' type-id='86af1d10' mangled-name='usb_hcd_pci_pm_ops' visibility='default' filepath='drivers/usb/core/hcd-pci.c' line='602' column='1' elf-symbol-id='usb_hcd_pci_pm_ops'/>
+      <function-decl name='usb_hcd_pci_shutdown' mangled-name='usb_hcd_pci_shutdown' filepath='drivers/usb/core/hcd-pci.c' line='353' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_pci_shutdown'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/usb/core/hcd-pci.c' line='353' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/core/hcd.c' language='LANG_C89'>
+      <function-decl name='usb_hcd_map_urb_for_dma' mangled-name='usb_hcd_map_urb_for_dma' filepath='drivers/usb/core/hcd.c' line='1397' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_map_urb_for_dma'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='1397' column='1'/>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/hcd.c' line='1397' column='1'/>
+        <parameter type-id='3eb7c31c' name='mem_flags' filepath='drivers/usb/core/hcd.c' line='1398' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <var-decl name='usb_hcds_loaded' type-id='7359adad' mangled-name='usb_hcds_loaded' visibility='default' filepath='drivers/usb/core/hcd.c' line='80' column='1' elf-symbol-id='usb_hcds_loaded'/>
+      <function-decl name='usb_hcd_start_port_resume' mangled-name='usb_hcd_start_port_resume' filepath='drivers/usb/core/hcd.c' line='1037' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_start_port_resume'>
+        <parameter type-id='3ab7d422' name='bus' filepath='drivers/usb/core/hcd.c' line='1037' column='1'/>
+        <parameter type-id='95e97e5e' name='portnum' filepath='drivers/usb/core/hcd.c' line='1037' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hcd_end_port_resume' mangled-name='usb_hcd_end_port_resume' filepath='drivers/usb/core/hcd.c' line='1059' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_end_port_resume'>
+        <parameter type-id='3ab7d422' name='bus' filepath='drivers/usb/core/hcd.c' line='1059' column='1'/>
+        <parameter type-id='95e97e5e' name='portnum' filepath='drivers/usb/core/hcd.c' line='1059' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_calc_bus_time' mangled-name='usb_calc_bus_time' filepath='drivers/usb/core/hcd.c' line='1085' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_calc_bus_time'>
+        <parameter type-id='95e97e5e' name='speed' filepath='drivers/usb/core/hcd.c' line='1085' column='1'/>
+        <parameter type-id='95e97e5e' name='is_input' filepath='drivers/usb/core/hcd.c' line='1085' column='1'/>
+        <parameter type-id='95e97e5e' name='isoc' filepath='drivers/usb/core/hcd.c' line='1085' column='1'/>
+        <parameter type-id='95e97e5e' name='bytecount' filepath='drivers/usb/core/hcd.c' line='1085' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='usb_hcd_unmap_urb_for_dma' mangled-name='usb_hcd_unmap_urb_for_dma' filepath='drivers/usb/core/hcd.c' line='1350' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_unmap_urb_for_dma'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='1350' column='1'/>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/hcd.c' line='1350' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hc_died' mangled-name='usb_hc_died' filepath='drivers/usb/core/hcd.c' line='2360' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hc_died'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='2360' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hcd_platform_shutdown' mangled-name='usb_hcd_platform_shutdown' filepath='drivers/usb/core/hcd.c' line='2909' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_platform_shutdown'>
+        <parameter type-id='db362995' name='dev' filepath='drivers/usb/core/hcd.c' line='2909' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='392af4e9' size-in-bits='64' id='fc4f83c1'/>
+      <class-decl name='usb_hcd' size-in-bits='5632' is-struct='yes' visibility='default' filepath='include/linux/usb/hcd.h' line='82' column='1' id='392af4e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='self' type-id='fa4d7704' visibility='default' filepath='include/linux/usb/hcd.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/usb/hcd.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='product_desc' type-id='80f4b756' visibility='default' filepath='include/linux/usb/hcd.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='speed' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/hcd.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='irq_descr' type-id='6653bb13' visibility='default' filepath='include/linux/usb/hcd.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='rh_timer' type-id='abe41e67' visibility='default' filepath='include/linux/usb/hcd.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='status_urb' type-id='ab85b8f2' visibility='default' filepath='include/linux/usb/hcd.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='wakeup_work' type-id='ef9025d0' visibility='default' filepath='include/linux/usb/hcd.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='died_work' type-id='ef9025d0' visibility='default' filepath='include/linux/usb/hcd.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='driver' type-id='5aa12c86' visibility='default' filepath='include/linux/usb/hcd.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='usb_phy' type-id='ca9354d1' visibility='default' filepath='include/linux/usb/hcd.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='phy_roothub' type-id='7befabdd' visibility='default' filepath='include/linux/usb/hcd.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/usb/hcd.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='dev_policy' type-id='7e6e640d' visibility='default' filepath='include/linux/usb/hcd.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='rh_registered' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='rh_pollable' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='msix_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='msi_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='skip_phy_initialization' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='uses_new_polling' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='wireless' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='has_tt' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='amd_resume_bug' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='can_do_streams' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='tpl_support' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='cant_recv_wakeups' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='regs' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/hcd.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='rsrc_start' type-id='acc63fdf' visibility='default' filepath='include/linux/usb/hcd.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='rsrc_len' type-id='acc63fdf' visibility='default' filepath='include/linux/usb/hcd.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='power_budget' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='high_prio_bh' type-id='63972aea' visibility='default' filepath='include/linux/usb/hcd.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='low_prio_bh' type-id='63972aea' visibility='default' filepath='include/linux/usb/hcd.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='address0_mutex' type-id='e0ea832a' visibility='default' filepath='include/linux/usb/hcd.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='bandwidth_mutex' type-id='e0ea832a' visibility='default' filepath='include/linux/usb/hcd.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='shared_hcd' type-id='fc4f83c1' visibility='default' filepath='include/linux/usb/hcd.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='primary_hcd' type-id='fc4f83c1' visibility='default' filepath='include/linux/usb/hcd.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='pool' type-id='9d8055ec' visibility='default' filepath='include/linux/usb/hcd.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/hcd.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='localmem_pool' type-id='75b9415a' visibility='default' filepath='include/linux/usb/hcd.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='hcd_priv' type-id='c99b5ecd' visibility='default' filepath='include/linux/usb/hcd.h' line='237' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='8f118d08' size-in-bits='64' id='5aa12c86'/>
+      <array-type-def dimensions='1' type-id='ab33c616' size-in-bits='256' id='9d8055ec'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <enum-decl name='usb_dev_authorize_policy' filepath='include/linux/usb/hcd.h' line='76' column='1' id='7e6e640d'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USB_DEVICE_AUTHORIZE_NONE' value='0'/>
+        <enumerator name='USB_DEVICE_AUTHORIZE_ALL' value='1'/>
+        <enumerator name='USB_DEVICE_AUTHORIZE_INTERNAL' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='171b0f6c' size-in-bits='64' id='75b9415a'/>
+      <class-decl name='giveback_urb_bh' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/usb/hcd.h' line='68' column='1' id='63972aea'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='running' type-id='b50a4934' visibility='default' filepath='include/linux/usb/hcd.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/usb/hcd.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/linux/usb/hcd.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bh' type-id='7a7ea727' visibility='default' filepath='include/linux/usb/hcd.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='completing_ep' type-id='15adb516' visibility='default' filepath='include/linux/usb/hcd.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f7de2149' size-in-bits='64' id='ca9354d1'/>
+      <pointer-type-def type-id='ceda742d' size-in-bits='64' id='7befabdd'/>
+      <qualified-type-def type-id='519497e3' const='yes' id='8f118d08'/>
+      <pointer-type-def type-id='2bf33030' size-in-bits='64' id='ab33c616'/>
+      <class-decl name='gen_pool' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/genalloc.h' line='58' column='1' id='171b0f6c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/genalloc.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='chunks' type-id='72f469ec' visibility='default' filepath='include/linux/genalloc.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_alloc_order' type-id='95e97e5e' visibility='default' filepath='include/linux/genalloc.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='algo' type-id='00278b91' visibility='default' filepath='include/linux/genalloc.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/genalloc.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/genalloc.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_phy' size-in-bits='2816' is-struct='yes' visibility='default' filepath='include/linux/usb/phy.h' line='88' column='1' id='f7de2149'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/usb/phy.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='include/linux/usb/phy.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='type' type-id='d95f4827' visibility='default' filepath='include/linux/usb/phy.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_event' type-id='278dd9ca' visibility='default' filepath='include/linux/usb/phy.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='otg' type-id='22be78e8' visibility='default' filepath='include/linux/usb/phy.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='io_dev' type-id='fa0b179b' visibility='default' filepath='include/linux/usb/phy.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='io_ops' type-id='aae1a0f1' visibility='default' filepath='include/linux/usb/phy.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/phy.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='edev' type-id='c0d6fadb' visibility='default' filepath='include/linux/usb/phy.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='id_edev' type-id='c0d6fadb' visibility='default' filepath='include/linux/usb/phy.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vbus_nb' type-id='9b08f7cd' visibility='default' filepath='include/linux/usb/phy.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='id_nb' type-id='9b08f7cd' visibility='default' filepath='include/linux/usb/phy.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='type_nb' type-id='9b08f7cd' visibility='default' filepath='include/linux/usb/phy.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='chg_type' type-id='eba182c8' visibility='default' filepath='include/linux/usb/phy.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='chg_state' type-id='6d659af5' visibility='default' filepath='include/linux/usb/phy.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='chg_cur' type-id='c1a2a792' visibility='default' filepath='include/linux/usb/phy.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='chg_work' type-id='ef9025d0' visibility='default' filepath='include/linux/usb/phy.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='notifier' type-id='dbd58f6e' visibility='default' filepath='include/linux/usb/phy.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='port_status' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/phy.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2064'>
+          <var-decl name='port_change' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/phy.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/linux/usb/phy.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='init' type-id='dd6ccf15' visibility='default' filepath='include/linux/usb/phy.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='shutdown' type-id='6cd1df94' visibility='default' filepath='include/linux/usb/phy.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='set_vbus' type-id='fc1fbe7c' visibility='default' filepath='include/linux/usb/phy.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='set_power' type-id='2d642297' visibility='default' filepath='include/linux/usb/phy.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='set_suspend' type-id='fc1fbe7c' visibility='default' filepath='include/linux/usb/phy.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='set_wakeup' type-id='523228f0' visibility='default' filepath='include/linux/usb/phy.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='notify_connect' type-id='2f4077f3' visibility='default' filepath='include/linux/usb/phy.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='notify_disconnect' type-id='2f4077f3' visibility='default' filepath='include/linux/usb/phy.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='charger_detect' type-id='c4884d33' visibility='default' filepath='include/linux/usb/phy.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_phy_roothub' is-struct='yes' visibility='default' is-declaration-only='yes' id='ceda742d'/>
+      <enum-decl name='usb_charger_state' filepath='include/uapi/linux/usb/charger.h' line='25' column='1' id='6d659af5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USB_CHARGER_DEFAULT' value='0'/>
+        <enumerator name='USB_CHARGER_PRESENT' value='1'/>
+        <enumerator name='USB_CHARGER_ABSENT' value='2'/>
+      </enum-decl>
+      <enum-decl name='usb_charger_type' filepath='include/uapi/linux/usb/charger.h' line='16' column='1' id='eba182c8'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UNKNOWN_TYPE' value='0'/>
+        <enumerator name='SDP_TYPE' value='1'/>
+        <enumerator name='DCP_TYPE' value='2'/>
+        <enumerator name='CDP_TYPE' value='3'/>
+        <enumerator name='ACA_TYPE' value='4'/>
+      </enum-decl>
+      <pointer-type-def type-id='b7022237' size-in-bits='64' id='c4884d33'/>
+      <enum-decl name='usb_phy_events' filepath='include/linux/usb/phy.h' line='27' column='1' id='278dd9ca'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USB_EVENT_NONE' value='0'/>
+        <enumerator name='USB_EVENT_VBUS' value='1'/>
+        <enumerator name='USB_EVENT_ID' value='2'/>
+        <enumerator name='USB_EVENT_CHARGER' value='3'/>
+        <enumerator name='USB_EVENT_ENUMERATED' value='4'/>
+      </enum-decl>
+      <enum-decl name='usb_phy_type' filepath='include/linux/usb/phy.h' line='36' column='1' id='d95f4827'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USB_PHY_TYPE_UNDEFINED' value='0'/>
+        <enumerator name='USB_PHY_TYPE_USB2' value='1'/>
+        <enumerator name='USB_PHY_TYPE_USB3' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='87a2d33d' size-in-bits='64' id='c0d6fadb'/>
+      <pointer-type-def type-id='fa93dbe1' size-in-bits='64' id='dd6ccf15'/>
+      <pointer-type-def type-id='9502627f' size-in-bits='64' id='2f4077f3'/>
+      <pointer-type-def type-id='9b07d522' size-in-bits='64' id='fc1fbe7c'/>
+      <pointer-type-def type-id='5c3855b6' size-in-bits='64' id='523228f0'/>
+      <pointer-type-def type-id='154f1323' size-in-bits='64' id='2d642297'/>
+      <class-decl name='dma_pool' size-in-bits='832' is-struct='yes' visibility='default' filepath='mm/dmapool.c' line='42' column='1' id='2bf33030'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page_list' type-id='72f469ec' visibility='default' filepath='mm/dmapool.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='mm/dmapool.c' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='mm/dmapool.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='mm/dmapool.c' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='allocation' type-id='b59d7dce' visibility='default' filepath='mm/dmapool.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='boundary' type-id='b59d7dce' visibility='default' filepath='mm/dmapool.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='mm/dmapool.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='pools' type-id='72f469ec' visibility='default' filepath='mm/dmapool.c' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hc_driver' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/linux/usb/hcd.h' line='255' column='1' id='519497e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='80f4b756' visibility='default' filepath='include/linux/usb/hcd.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='product_desc' type-id='80f4b756' visibility='default' filepath='include/linux/usb/hcd.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hcd_priv_size' type-id='b59d7dce' visibility='default' filepath='include/linux/usb/hcd.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='irq' type-id='a4e9cbb0' visibility='default' filepath='include/linux/usb/hcd.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/hcd.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reset' type-id='3d4f6569' visibility='default' filepath='include/linux/usb/hcd.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='start' type-id='3d4f6569' visibility='default' filepath='include/linux/usb/hcd.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pci_suspend' type-id='f49825dc' visibility='default' filepath='include/linux/usb/hcd.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pci_resume' type-id='f49825dc' visibility='default' filepath='include/linux/usb/hcd.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='stop' type-id='2638ad78' visibility='default' filepath='include/linux/usb/hcd.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='shutdown' type-id='2638ad78' visibility='default' filepath='include/linux/usb/hcd.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_frame_number' type-id='3d4f6569' visibility='default' filepath='include/linux/usb/hcd.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='urb_enqueue' type-id='26f734e7' visibility='default' filepath='include/linux/usb/hcd.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='urb_dequeue' type-id='909b5775' visibility='default' filepath='include/linux/usb/hcd.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='map_urb_for_dma' type-id='26f734e7' visibility='default' filepath='include/linux/usb/hcd.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='unmap_urb_for_dma' type-id='da12244f' visibility='default' filepath='include/linux/usb/hcd.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='endpoint_disable' type-id='e1007da7' visibility='default' filepath='include/linux/usb/hcd.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='endpoint_reset' type-id='e1007da7' visibility='default' filepath='include/linux/usb/hcd.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hub_status_data' type-id='34083223' visibility='default' filepath='include/linux/usb/hcd.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hub_control' type-id='82a5e0a9' visibility='default' filepath='include/linux/usb/hcd.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='bus_suspend' type-id='3d4f6569' visibility='default' filepath='include/linux/usb/hcd.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='bus_resume' type-id='3d4f6569' visibility='default' filepath='include/linux/usb/hcd.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='start_port_reset' type-id='52f4f223' visibility='default' filepath='include/linux/usb/hcd.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='get_resuming_ports' type-id='3e34b3ae' visibility='default' filepath='include/linux/usb/hcd.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='relinquish_port' type-id='0d7f0367' visibility='default' filepath='include/linux/usb/hcd.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='port_handed_over' type-id='ef2f6230' visibility='default' filepath='include/linux/usb/hcd.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='clear_tt_buffer_complete' type-id='e1007da7' visibility='default' filepath='include/linux/usb/hcd.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='alloc_dev' type-id='530cb308' visibility='default' filepath='include/linux/usb/hcd.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='free_dev' type-id='b48dadb7' visibility='default' filepath='include/linux/usb/hcd.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='alloc_streams' type-id='c1729c2a' visibility='default' filepath='include/linux/usb/hcd.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='free_streams' type-id='473afbc8' visibility='default' filepath='include/linux/usb/hcd.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='add_endpoint' type-id='2c3372f7' visibility='default' filepath='include/linux/usb/hcd.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='drop_endpoint' type-id='2c3372f7' visibility='default' filepath='include/linux/usb/hcd.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='check_bandwidth' type-id='530cb308' visibility='default' filepath='include/linux/usb/hcd.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='reset_bandwidth' type-id='b48dadb7' visibility='default' filepath='include/linux/usb/hcd.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='address_device' type-id='530cb308' visibility='default' filepath='include/linux/usb/hcd.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='enable_device' type-id='530cb308' visibility='default' filepath='include/linux/usb/hcd.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='update_hub_device' type-id='cf0b24c2' visibility='default' filepath='include/linux/usb/hcd.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='reset_device' type-id='530cb308' visibility='default' filepath='include/linux/usb/hcd.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='update_device' type-id='530cb308' visibility='default' filepath='include/linux/usb/hcd.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='set_usb2_hw_lpm' type-id='8ceda7f7' visibility='default' filepath='include/linux/usb/hcd.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='enable_usb3_lpm_timeout' type-id='280dcd9f' visibility='default' filepath='include/linux/usb/hcd.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='disable_usb3_lpm_timeout' type-id='280dcd9f' visibility='default' filepath='include/linux/usb/hcd.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='find_raw_port_number' type-id='ef2f6230' visibility='default' filepath='include/linux/usb/hcd.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='port_power' type-id='57938551' visibility='default' filepath='include/linux/usb/hcd.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='422' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_charger_current' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/usb/phy.h' line='77' column='1' id='c1a2a792'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sdp_min' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='sdp_max' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dcp_min' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dcp_max' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cdp_min' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='cdp_max' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='aca_min' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='aca_max' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='genpool_algo_t' type-id='f54ae583' filepath='include/linux/genalloc.h' line='48' column='1' id='00278b91'/>
+      <pointer-type-def type-id='6e3d524a' size-in-bits='64' id='22be78e8'/>
+      <pointer-type-def type-id='b6b55329' size-in-bits='64' id='aae1a0f1'/>
+      <pointer-type-def type-id='f65a797a' size-in-bits='64' id='6cd1df94'/>
+      <pointer-type-def type-id='84096265' size-in-bits='64' id='3d4f6569'/>
+      <pointer-type-def type-id='7f416417' size-in-bits='64' id='34083223'/>
+      <pointer-type-def type-id='e86b7946' size-in-bits='64' id='ef2f6230'/>
+      <pointer-type-def type-id='2457cbe5' size-in-bits='64' id='57938551'/>
+      <pointer-type-def type-id='b0922992' size-in-bits='64' id='f49825dc'/>
+      <pointer-type-def type-id='0b4fb7b5' size-in-bits='64' id='82a5e0a9'/>
+      <pointer-type-def type-id='285e362f' size-in-bits='64' id='52f4f223'/>
+      <pointer-type-def type-id='3e298e69' size-in-bits='64' id='909b5775'/>
+      <pointer-type-def type-id='58c82a2b' size-in-bits='64' id='26f734e7'/>
+      <pointer-type-def type-id='f8b5874e' size-in-bits='64' id='530cb308'/>
+      <pointer-type-def type-id='a24a51b3' size-in-bits='64' id='280dcd9f'/>
+      <pointer-type-def type-id='e09dbee3' size-in-bits='64' id='8ceda7f7'/>
+      <pointer-type-def type-id='a8fc2a93' size-in-bits='64' id='2c3372f7'/>
+      <pointer-type-def type-id='96a19766' size-in-bits='64' id='473afbc8'/>
+      <pointer-type-def type-id='84ec62b0' size-in-bits='64' id='c1729c2a'/>
+      <pointer-type-def type-id='98789900' size-in-bits='64' id='cf0b24c2'/>
+      <class-decl name='extcon_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='87a2d33d'/>
+      <class-decl name='usb_otg' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/usb/otg.h' line='16' column='1' id='6e3d524a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='default_a' type-id='f9b06939' visibility='default' filepath='include/linux/usb/otg.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phy' type-id='503ff1ba' visibility='default' filepath='include/linux/usb/otg.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usb_phy' type-id='ca9354d1' visibility='default' filepath='include/linux/usb/otg.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='host' type-id='3ab7d422' visibility='default' filepath='include/linux/usb/otg.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='gadget' type-id='49a58c0c' visibility='default' filepath='include/linux/usb/otg.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state' type-id='4c0c8157' visibility='default' filepath='include/linux/usb/otg.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_host' type-id='40b8ad2b' visibility='default' filepath='include/linux/usb/otg.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_peripheral' type-id='ba1d878d' visibility='default' filepath='include/linux/usb/otg.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_vbus' type-id='c1ee9321' visibility='default' filepath='include/linux/usb/otg.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='start_srp' type-id='988d1520' visibility='default' filepath='include/linux/usb/otg.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='start_hnp' type-id='988d1520' visibility='default' filepath='include/linux/usb/otg.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_phy_io_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb/phy.h' line='72' column='1' id='b6b55329'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read' type-id='90c0e85c' visibility='default' filepath='include/linux/usb/phy.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write' type-id='a52d0b9b' visibility='default' filepath='include/linux/usb/phy.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3a0b2d1e' size-in-bits='64' id='a4e9cbb0'/>
+      <pointer-type-def type-id='713ac427' size-in-bits='64' id='f54ae583'/>
+      <pointer-type-def type-id='78932bbc' size-in-bits='64' id='3e34b3ae'/>
+      <pointer-type-def type-id='54b8f32e' size-in-bits='64' id='2638ad78'/>
+      <pointer-type-def type-id='3870c7c3' size-in-bits='64' id='0d7f0367'/>
+      <pointer-type-def type-id='c51e5ffb' size-in-bits='64' id='da12244f'/>
+      <pointer-type-def type-id='6cef7733' size-in-bits='64' id='b48dadb7'/>
+      <pointer-type-def type-id='f4bdc973' size-in-bits='64' id='e1007da7'/>
+      <pointer-type-def type-id='db1d8e86' size-in-bits='64' id='988d1520'/>
+      <pointer-type-def type-id='d2460aa5' size-in-bits='64' id='c1ee9321'/>
+      <pointer-type-def type-id='82014c8f' size-in-bits='64' id='40b8ad2b'/>
+      <pointer-type-def type-id='d9609309' size-in-bits='64' id='ba1d878d'/>
+      <pointer-type-def type-id='3e0660a2' size-in-bits='64' id='90c0e85c'/>
+      <pointer-type-def type-id='277480c7' size-in-bits='64' id='a52d0b9b'/>
+      <pointer-type-def type-id='54f638e6' size-in-bits='64' id='49a58c0c'/>
+      <class-decl name='usb_gadget' is-struct='yes' visibility='default' is-declaration-only='yes' id='54f638e6'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/core/hub.c' language='LANG_C89'>
+      <var-decl name='ehci_cf_port_reset_rwsem' type-id='f19fdb93' mangled-name='ehci_cf_port_reset_rwsem' visibility='default' filepath='drivers/usb/core/hub.c' line='105' column='1' elf-symbol-id='ehci_cf_port_reset_rwsem'/>
+      <function-decl name='usb_wakeup_notification' mangled-name='usb_wakeup_notification' filepath='drivers/usb/core/hub.c' line='689' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_wakeup_notification'>
+        <parameter type-id='25e60cb2' name='hdev' filepath='drivers/usb/core/hub.c' line='689' column='1'/>
+        <parameter type-id='f0981eeb' name='portnum' filepath='drivers/usb/core/hub.c' line='690' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hub_clear_tt_buffer' mangled-name='usb_hub_clear_tt_buffer' filepath='drivers/usb/core/hub.c' line='858' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hub_clear_tt_buffer'>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/hub.c' line='858' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_set_device_state' mangled-name='usb_set_device_state' filepath='drivers/usb/core/hub.c' line='2036' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_set_device_state'>
+        <parameter type-id='25e60cb2' name='udev' filepath='drivers/usb/core/hub.c' line='2036' column='1'/>
+        <parameter type-id='901a91cb' name='new_state' filepath='drivers/usb/core/hub.c' line='2037' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_root_hub_lost_power' mangled-name='usb_root_hub_lost_power' filepath='drivers/usb/core/hub.c' line='3822' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_root_hub_lost_power'>
+        <parameter type-id='25e60cb2' name='rhdev' filepath='drivers/usb/core/hub.c' line='3822' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hub_find_child' mangled-name='usb_hub_find_child' filepath='drivers/usb/core/hub.c' line='6010' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hub_find_child'>
+        <parameter type-id='25e60cb2' name='hdev' filepath='drivers/usb/core/hub.c' line='6010' column='1'/>
+        <parameter type-id='95e97e5e' name='port1' filepath='drivers/usb/core/hub.c' line='6011' column='1'/>
+        <return type-id='25e60cb2'/>
+      </function-decl>
+      <function-decl name='usb_autopm_put_interface_no_suspend' mangled-name='usb_autopm_put_interface_no_suspend' filepath='include/linux/usb.h' line='790' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_autopm_put_interface_no_suspend'>
+        <parameter type-id='8bf48c31'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/core/message.c' language='LANG_C89'>
+      <class-decl name='usb_sg_request' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='1883' column='1' id='f14efa5e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='status' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bytes' type-id='b59d7dce' visibility='default' filepath='include/linux/usb.h' line='1885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/usb.h' line='1891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='25e60cb2' visibility='default' filepath='include/linux/usb.h' line='1893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pipe' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='entries' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1896' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='urbs' type-id='db81fc08' visibility='default' filepath='include/linux/usb.h' line='1897' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1899' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='complete' type-id='f9fef04f' visibility='default' filepath='include/linux/usb.h' line='1900' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ab85b8f2' size-in-bits='64' id='db81fc08'/>
+      <pointer-type-def type-id='f14efa5e' size-in-bits='64' id='56f81414'/>
+      <function-decl name='usb_bulk_msg' mangled-name='usb_bulk_msg' filepath='drivers/usb/core/message.c' line='229' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_bulk_msg'>
+        <parameter type-id='25e60cb2' name='usb_dev' filepath='drivers/usb/core/message.c' line='229' column='1'/>
+        <parameter type-id='f0981eeb' name='pipe' filepath='drivers/usb/core/message.c' line='229' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/usb/core/message.c' line='230' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='drivers/usb/core/message.c' line='230' column='1'/>
+        <parameter type-id='7292109c' name='actual_length' filepath='drivers/usb/core/message.c' line='230' column='1'/>
+        <parameter type-id='95e97e5e' name='timeout' filepath='drivers/usb/core/message.c' line='230' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_sg_init' mangled-name='usb_sg_init' filepath='drivers/usb/core/message.c' line='367' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_sg_init'>
+        <parameter type-id='56f81414' name='io' filepath='drivers/usb/core/message.c' line='367' column='1'/>
+        <parameter type-id='25e60cb2' name='dev' filepath='drivers/usb/core/message.c' line='367' column='1'/>
+        <parameter type-id='f0981eeb' name='pipe' filepath='drivers/usb/core/message.c' line='368' column='1'/>
+        <parameter type-id='f0981eeb' name='period' filepath='drivers/usb/core/message.c' line='368' column='1'/>
+        <parameter type-id='bf3ef905' name='sg' filepath='drivers/usb/core/message.c' line='368' column='1'/>
+        <parameter type-id='95e97e5e' name='nents' filepath='drivers/usb/core/message.c' line='369' column='1'/>
+        <parameter type-id='b59d7dce' name='length' filepath='drivers/usb/core/message.c' line='369' column='1'/>
+        <parameter type-id='3eb7c31c' name='mem_flags' filepath='drivers/usb/core/message.c' line='369' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_sg_wait' mangled-name='usb_sg_wait' filepath='drivers/usb/core/message.c' line='515' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_sg_wait'>
+        <parameter type-id='56f81414' name='io' filepath='drivers/usb/core/message.c' line='515' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_sg_cancel' mangled-name='usb_sg_cancel' filepath='drivers/usb/core/message.c' line='585' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_sg_cancel'>
+        <parameter type-id='56f81414' name='io' filepath='drivers/usb/core/message.c' line='585' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_reset_endpoint' mangled-name='usb_reset_endpoint' filepath='drivers/usb/core/message.c' line='1170' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_reset_endpoint'>
+        <parameter type-id='25e60cb2' name='dev' filepath='drivers/usb/core/message.c' line='1170' column='1'/>
+        <parameter type-id='f0981eeb' name='epaddr' filepath='drivers/usb/core/message.c' line='1170' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_reset_configuration' mangled-name='usb_reset_configuration' filepath='drivers/usb/core/message.c' line='1541' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_reset_configuration'>
+        <parameter type-id='25e60cb2' name='dev' filepath='drivers/usb/core/message.c' line='1541' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/core/notify.c' language='LANG_C89'>
+      <function-decl name='usb_register_notify' mangled-name='usb_register_notify' filepath='drivers/usb/core/notify.c' line='29' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_register_notify'>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/usb/core/notify.c' line='29' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_unregister_notify' mangled-name='usb_unregister_notify' filepath='drivers/usb/core/notify.c' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_unregister_notify'>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/usb/core/notify.c' line='42' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/core/urb.c' language='LANG_C89'>
+      <function-decl name='usb_poison_urb' mangled-name='usb_poison_urb' filepath='drivers/usb/core/urb.c' line='729' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_poison_urb'>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/urb.c' line='729' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_unpoison_urb' mangled-name='usb_unpoison_urb' filepath='drivers/usb/core/urb.c' line='744' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_unpoison_urb'>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/urb.c' line='744' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/core/usb.c' language='LANG_C89'>
+      <pointer-type-def type-id='9a602380' size-in-bits='64' id='b86ec3b2'/>
+      <function-decl name='usb_for_each_dev' mangled-name='usb_for_each_dev' filepath='drivers/usb/core/usb.c' line='395' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_for_each_dev'>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/usb/core/usb.c' line='395' column='1'/>
+        <parameter type-id='b86ec3b2' name='fn' filepath='drivers/usb/core/usb.c' line='395' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_alloc_dev' mangled-name='usb_alloc_dev' filepath='drivers/usb/core/usb.c' line='575' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_alloc_dev'>
+        <parameter type-id='25e60cb2' name='parent' filepath='drivers/usb/core/usb.c' line='575' column='1'/>
+        <parameter type-id='3ab7d422' name='bus' filepath='drivers/usb/core/usb.c' line='576' column='1'/>
+        <parameter type-id='f0981eeb' name='port1' filepath='drivers/usb/core/usb.c' line='576' column='1'/>
+        <return type-id='25e60cb2'/>
+      </function-decl>
+      <function-decl name='usb_get_current_frame_number' mangled-name='usb_get_current_frame_number' filepath='drivers/usb/core/usb.c' line='841' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_get_current_frame_number'>
+        <parameter type-id='25e60cb2' name='dev' filepath='drivers/usb/core/usb.c' line='841' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__usb_get_extra_descriptor' mangled-name='__usb_get_extra_descriptor' filepath='drivers/usb/core/usb.c' line='853' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__usb_get_extra_descriptor'>
+        <parameter type-id='26a90f95' name='buffer' filepath='drivers/usb/core/usb.c' line='853' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='drivers/usb/core/usb.c' line='853' column='1'/>
+        <parameter type-id='002ac4a6' name='type' filepath='drivers/usb/core/usb.c' line='854' column='1'/>
+        <parameter type-id='63e171df' name='ptr' filepath='drivers/usb/core/usb.c' line='854' column='1'/>
+        <parameter type-id='b59d7dce' name='minsize' filepath='drivers/usb/core/usb.c' line='854' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='9a602380'>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/dwc3/drd.c' language='LANG_C89'>
+      <class-decl name='usb_role_switch' size-in-bits='8064' is-struct='yes' visibility='default' filepath='drivers/usb/roles/class.c' line='19' column='1' id='3b2a0df7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/usb/roles/class.c' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='drivers/usb/roles/class.c' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='role' type-id='c675b073' visibility='default' filepath='drivers/usb/roles/class.c' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='usb2_port' type-id='fa0b179b' visibility='default' filepath='drivers/usb/roles/class.c' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='usb3_port' type-id='fa0b179b' visibility='default' filepath='drivers/usb/roles/class.c' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='udc' type-id='fa0b179b' visibility='default' filepath='drivers/usb/roles/class.c' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='set' type-id='265b58a4' visibility='default' filepath='drivers/usb/roles/class.c' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='get' type-id='3341a400' visibility='default' filepath='drivers/usb/roles/class.c' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='allow_userspace_control' type-id='b50a4934' visibility='default' filepath='drivers/usb/roles/class.c' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_role_switch_desc' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/usb/role.h' line='35' column='1' id='6d84fe29'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/usb/role.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='usb2_port' type-id='fa0b179b' visibility='default' filepath='include/linux/usb/role.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usb3_port' type-id='fa0b179b' visibility='default' filepath='include/linux/usb/role.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='udc' type-id='fa0b179b' visibility='default' filepath='include/linux/usb/role.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set' type-id='265b58a4' visibility='default' filepath='include/linux/usb/role.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get' type-id='3341a400' visibility='default' filepath='include/linux/usb/role.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='allow_userspace_control' type-id='b50a4934' visibility='default' filepath='include/linux/usb/role.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='usb_role_switch_set_t' type-id='91d6713d' filepath='include/linux/usb/role.h' line='16' column='1' id='265b58a4'/>
+      <enum-decl name='usb_role' filepath='include/linux/usb/role.h' line='10' column='1' id='c675b073'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USB_ROLE_NONE' value='0'/>
+        <enumerator name='USB_ROLE_HOST' value='1'/>
+        <enumerator name='USB_ROLE_DEVICE' value='2'/>
+      </enum-decl>
+      <typedef-decl name='usb_role_switch_get_t' type-id='be8d9c5e' filepath='include/linux/usb/role.h' line='17' column='1' id='3341a400'/>
+      <qualified-type-def type-id='6d84fe29' const='yes' id='40fcf9ec'/>
+      <pointer-type-def type-id='40fcf9ec' size-in-bits='64' id='143d32b2'/>
+      <pointer-type-def type-id='c598cb04' size-in-bits='64' id='be8d9c5e'/>
+      <pointer-type-def type-id='53f72e39' size-in-bits='64' id='91d6713d'/>
+      <pointer-type-def type-id='3b2a0df7' size-in-bits='64' id='3e3cd44f'/>
+      <function-decl name='extcon_find_edev_by_node' mangled-name='extcon_find_edev_by_node' filepath='include/linux/extcon.h' line='225' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_find_edev_by_node'>
+        <parameter type-id='9a537bbe'/>
+        <return type-id='c0d6fadb'/>
+      </function-decl>
+      <function-decl name='extcon_get_extcon_dev' mangled-name='extcon_get_extcon_dev' filepath='include/linux/extcon.h' line='224' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_get_extcon_dev'>
+        <parameter type-id='80f4b756'/>
+        <return type-id='c0d6fadb'/>
+      </function-decl>
+      <function-decl name='extcon_register_notifier' mangled-name='extcon_register_notifier' filepath='include/linux/extcon.h' line='199' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_register_notifier'>
+        <parameter type-id='c0d6fadb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='d504f73d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_role_switch_register' mangled-name='usb_role_switch_register' filepath='include/linux/usb/role.h' line='54' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_role_switch_register'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='143d32b2'/>
+        <return type-id='3e3cd44f'/>
+      </function-decl>
+      <function-decl name='usb_role_switch_unregister' mangled-name='usb_role_switch_unregister' filepath='include/linux/usb/role.h' line='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_role_switch_unregister'>
+        <parameter type-id='3e3cd44f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='extcon_unregister_notifier' mangled-name='extcon_unregister_notifier' filepath='include/linux/extcon.h' line='201' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_unregister_notifier'>
+        <parameter type-id='c0d6fadb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='d504f73d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='c598cb04'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='c675b073'/>
+      </function-type>
+      <function-type size-in-bits='64' id='53f72e39'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='c675b073'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/dwc3/dwc3-haps.c' language='LANG_C89'>
+      <function-decl name='platform_device_alloc' mangled-name='platform_device_alloc' filepath='include/linux/platform_device.h' line='178' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_alloc'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='db362995'/>
+      </function-decl>
+      <function-decl name='platform_device_add_resources' mangled-name='platform_device_add_resources' filepath='include/linux/platform_device.h' line='179' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_add_resources'>
+        <parameter type-id='db362995'/>
+        <parameter type-id='e153f6de'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='platform_device_add_properties' mangled-name='platform_device_add_properties' filepath='include/linux/platform_device.h' line='184' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_add_properties'>
+        <parameter type-id='db362995'/>
+        <parameter type-id='9e1d140c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='platform_device_put' mangled-name='platform_device_put' filepath='include/linux/platform_device.h' line='188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_put'>
+        <parameter type-id='db362995'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='platform_device_add' mangled-name='platform_device_add' filepath='include/linux/platform_device.h' line='186' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_add'>
+        <parameter type-id='db362995'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/dwc3/dwc3-of-simple.c' language='LANG_C89'>
+      <class-decl name='of_dev_auxdata' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/of_platform.h' line='37' column='1' id='c0d13b05'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='compatible' type-id='26a90f95' visibility='default' filepath='include/linux/of_platform.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phys_addr' type-id='acc63fdf' visibility='default' filepath='include/linux/of_platform.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/of_platform.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='platform_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/of_platform.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2942e355' size-in-bits='64' id='734c20ed'/>
+      <qualified-type-def type-id='c0d13b05' const='yes' id='1f54f780'/>
+      <pointer-type-def type-id='1f54f780' size-in-bits='64' id='fcc1e09e'/>
+      <function-decl name='of_reset_control_array_get' mangled-name='of_reset_control_array_get' filepath='include/linux/reset.h' line='36' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_reset_control_array_get'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='c894953d'/>
+        <parameter type-id='c894953d'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='9f9b8114'/>
+      </function-decl>
+      <function-decl name='reset_control_reset' mangled-name='reset_control_reset' filepath='include/linux/reset.h' line='15' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reset_control_reset'>
+        <parameter type-id='9f9b8114'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_bulk_get_all' mangled-name='clk_bulk_get_all' filepath='include/linux/clk.h' line='332' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_bulk_get_all'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='734c20ed'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='reset_control_put' mangled-name='reset_control_put' filepath='include/linux/reset.h' line='28' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reset_control_put'>
+        <parameter type-id='9f9b8114'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_platform_populate' mangled-name='of_platform_populate' filepath='include/linux/of_platform.h' line='74' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_platform_populate'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='e5ce629e'/>
+        <parameter type-id='fcc1e09e'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_bulk_put_all' mangled-name='clk_bulk_put_all' filepath='include/linux/clk.h' line='582' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_bulk_put_all'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='2942e355'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_platform_depopulate' mangled-name='of_platform_depopulate' filepath='include/linux/of_platform.h' line='81' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_platform_depopulate'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/dwc3/dwc3-qcom.c' language='LANG_C89'>
+      <class-decl name='extcon_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='87a2d33d'/>
+      <enum-decl name='usb_dr_mode' filepath='include/linux/usb/otg.h' line='116' column='1' id='d291aaf1'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USB_DR_MODE_UNKNOWN' value='0'/>
+        <enumerator name='USB_DR_MODE_HOST' value='1'/>
+        <enumerator name='USB_DR_MODE_PERIPHERAL' value='2'/>
+        <enumerator name='USB_DR_MODE_OTG' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='87a2d33d' size-in-bits='64' id='c0d6fadb'/>
+      <function-decl name='devm_reset_control_array_get' mangled-name='devm_reset_control_array_get' filepath='include/linux/reset.h' line='34' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_reset_control_array_get'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='c894953d'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='9f9b8114'/>
+      </function-decl>
+      <function-decl name='of_clk_get_parent_count' mangled-name='of_clk_get_parent_count' filepath='include/linux/of_clk.h' line='11' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_get_parent_count'>
+        <parameter type-id='9a537bbe'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='of_clk_get' mangled-name='of_clk_get' filepath='include/linux/clk.h' line='966' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_get'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='device_property_present' mangled-name='device_property_present' filepath='include/linux/property.h' line='36' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_property_present'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='of_find_device_by_node' mangled-name='of_find_device_by_node' filepath='include/linux/of_platform.h' line='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_device_by_node'>
+        <parameter type-id='9a537bbe'/>
+        <return type-id='db362995'/>
+      </function-decl>
+      <function-decl name='usb_get_dr_mode' mangled-name='usb_get_dr_mode' filepath='include/linux/usb/otg.h' line='130' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_get_dr_mode'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='d291aaf1'/>
+      </function-decl>
+      <function-decl name='extcon_get_edev_by_phandle' mangled-name='extcon_get_edev_by_phandle' filepath='include/linux/extcon.h' line='226' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_get_edev_by_phandle'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='c0d6fadb'/>
+      </function-decl>
+      <function-decl name='devm_extcon_register_notifier' mangled-name='devm_extcon_register_notifier' filepath='include/linux/extcon.h' line='203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_extcon_register_notifier'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='c0d6fadb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='d504f73d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='extcon_get_state' mangled-name='extcon_get_state' filepath='include/linux/extcon.h' line='173' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_get_state'>
+        <parameter type-id='c0d6fadb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_init_wakeup' mangled-name='device_init_wakeup' filepath='include/linux/pm_wakeup.h' line='98' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_init_wakeup'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/dwc3/gadget.c' language='LANG_C89'>
+      <function-decl name='usb_gadget_unmap_request_by_dev' mangled-name='usb_gadget_unmap_request_by_dev' filepath='include/linux/usb/gadget.h' line='831' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_unmap_request_by_dev'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='1a494567'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_gadget_map_request_by_dev' mangled-name='usb_gadget_map_request_by_dev' filepath='include/linux/usb/gadget.h' line='826' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_map_request_by_dev'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='1a494567'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_gadget_set_state' mangled-name='usb_gadget_set_state' filepath='include/linux/usb/gadget.h' line='851' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_set_state'>
+        <parameter type-id='49a58c0d'/>
+        <parameter type-id='901a91cb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='54f638e7' size-in-bits='64' id='49a58c0d'/>
+      <pointer-type-def type-id='43806adf' size-in-bits='64' id='1a494567'/>
+      <class-decl name='usb_gadget' size-in-bits='8768' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='397' column='1' id='54f638e7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/usb/gadget.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='udc' type-id='d872b366' visibility='default' filepath='include/linux/usb/gadget.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='1d94d806' visibility='default' filepath='include/linux/usb/gadget.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ep0' type-id='63a08bf7' visibility='default' filepath='include/linux/usb/gadget.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ep_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/gadget.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='speed' type-id='4e532009' visibility='default' filepath='include/linux/usb/gadget.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_speed' type-id='4e532009' visibility='default' filepath='include/linux/usb/gadget.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='state' type-id='901a91cb' visibility='default' filepath='include/linux/usb/gadget.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/gadget.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/usb/gadget.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='isoch_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8288'>
+          <var-decl name='out_epnum' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='in_epnum' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8352'>
+          <var-decl name='mA' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='otg_caps' type-id='451a0588' visibility='default' filepath='include/linux/usb/gadget.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='sg_supported' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='is_otg' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='is_a_peripheral' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='b_hnp_enable' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='a_hnp_support' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='a_alt_hnp_support' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='hnp_polling_support' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='host_request_flag' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='quirk_ep_out_aligned_size' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='quirk_altset_not_supp' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='quirk_stall_not_supp' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='quirk_zlp_not_supp' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='quirk_avoids_skb_reserve' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='is_selfpowered' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='deactivated' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='connected' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='lpm_capable' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/gadget.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='437' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_request' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='98' column='1' id='43806adf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/gadget.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='length' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dma' type-id='cf29c9b3' visibility='default' filepath='include/linux/usb/gadget.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sg' type-id='bf3ef905' visibility='default' filepath='include/linux/usb/gadget.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_sgs' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='num_mapped_sgs' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='stream_id' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='no_interrupt' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='zero' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='short_not_ok' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='dma_mapped' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='complete' type-id='2dfafd2c' visibility='default' filepath='include/linux/usb/gadget.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='context' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/gadget.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/gadget.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='frame_number' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='status' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/gadget.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='actual' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='121' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='54286388' size-in-bits='64' id='1d94d806'/>
+      <pointer-type-def type-id='8005701f' size-in-bits='64' id='63a08bf7'/>
+      <pointer-type-def type-id='e994232a' size-in-bits='64' id='451a0588'/>
+      <pointer-type-def type-id='1ee0d0f0' size-in-bits='64' id='d872b366'/>
+      <pointer-type-def type-id='192c003a' size-in-bits='64' id='2dfafd2c'/>
+      <qualified-type-def type-id='83cac475' const='yes' id='54286388'/>
+      <class-decl name='usb_ep' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='223' column='1' id='8005701f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/gadget.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/gadget.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='ea2a1f7d' visibility='default' filepath='include/linux/usb/gadget.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ep_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/gadget.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='caps' type-id='14d94f61' visibility='default' filepath='include/linux/usb/gadget.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='claimed' type-id='b50a4934' visibility='default' filepath='include/linux/usb/gadget.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='enabled' type-id='b50a4934' visibility='default' filepath='include/linux/usb/gadget.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='maxpacket' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='maxpacket_limit' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='max_streams' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='mult' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='maxburst' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='424'>
+          <var-decl name='address' type-id='f9b06939' visibility='default' filepath='include/linux/usb/gadget.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='desc' type-id='428819c0' visibility='default' filepath='include/linux/usb/gadget.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='comp_desc' type-id='c6228d99' visibility='default' filepath='include/linux/usb/gadget.h' line='239' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_otg_caps' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/linux/usb/otg.h' line='53' column='1' id='e994232a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='otg_rev' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/otg.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='hnp_support' type-id='b50a4934' visibility='default' filepath='include/linux/usb/otg.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='srp_support' type-id='b50a4934' visibility='default' filepath='include/linux/usb/otg.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='adp_support' type-id='b50a4934' visibility='default' filepath='include/linux/usb/otg.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_udc' size-in-bits='7680' is-struct='yes' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='36' column='1' id='1ee0d0f0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver' type-id='9762ede1' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gadget' type-id='49a58c0d' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='vbus' type-id='b50a4934' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e03e976a' size-in-bits='64' id='428819c0'/>
+      <pointer-type-def type-id='090a4485' size-in-bits='64' id='ea2a1f7d'/>
+      <pointer-type-def type-id='1ac45f89' size-in-bits='64' id='c6228d99'/>
+      <class-decl name='usb_ep_caps' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='163' column='1' id='14d94f61'>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='type_control' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='type_iso' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='type_bulk' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='type_int' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='dir_in' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='dir_out' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_gadget_ops' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='308' column='1' id='83cac475'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_frame' type-id='42262596' visibility='default' filepath='include/linux/usb/gadget.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wakeup' type-id='42262596' visibility='default' filepath='include/linux/usb/gadget.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_selfpowered' type-id='2b8a73bd' visibility='default' filepath='include/linux/usb/gadget.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vbus_session' type-id='2b8a73bd' visibility='default' filepath='include/linux/usb/gadget.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vbus_draw' type-id='86ec8614' visibility='default' filepath='include/linux/usb/gadget.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pullup' type-id='2b8a73bd' visibility='default' filepath='include/linux/usb/gadget.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ioctl' type-id='11f75c44' visibility='default' filepath='include/linux/usb/gadget.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_config_params' type-id='b90a2617' visibility='default' filepath='include/linux/usb/gadget.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='udc_start' type-id='3e610606' visibility='default' filepath='include/linux/usb/gadget.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='udc_stop' type-id='42262596' visibility='default' filepath='include/linux/usb/gadget.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='udc_set_speed' type-id='20950ec7' visibility='default' filepath='include/linux/usb/gadget.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='match_ep' type-id='9f35b348' visibility='default' filepath='include/linux/usb/gadget.h' line='323' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b718d3f9' size-in-bits='64' id='9762ede1'/>
+      <qualified-type-def type-id='2b1e6e59' const='yes' id='e03e976a'/>
+      <qualified-type-def type-id='e094094c' const='yes' id='090a4485'/>
+      <qualified-type-def type-id='1f03d7fe' const='yes' id='1ac45f89'/>
+      <pointer-type-def type-id='90e882dc' size-in-bits='64' id='42262596'/>
+      <pointer-type-def type-id='b845c559' size-in-bits='64' id='2b8a73bd'/>
+      <pointer-type-def type-id='5f4720b2' size-in-bits='64' id='86ec8614'/>
+      <pointer-type-def type-id='3ba00442' size-in-bits='64' id='11f75c44'/>
+      <pointer-type-def type-id='e7d8509c' size-in-bits='64' id='3e610606'/>
+      <class-decl name='usb_gadget_driver' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='680' column='1' id='b718d3f9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='function' type-id='26a90f95' visibility='default' filepath='include/linux/usb/gadget.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_speed' type-id='4e532009' visibility='default' filepath='include/linux/usb/gadget.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bind' type-id='3e610606' visibility='default' filepath='include/linux/usb/gadget.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unbind' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='setup' type-id='54a734c8' visibility='default' filepath='include/linux/usb/gadget.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='disconnect' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='suspend' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='resume' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='reset' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/usb/gadget.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='udc_name' type-id='26a90f95' visibility='default' filepath='include/linux/usb/gadget.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='pending' type-id='72f469ec' visibility='default' filepath='include/linux/usb/gadget.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='match_existing_only' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='698' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='8684c7e6' size-in-bits='64' id='9f35b348'/>
+      <pointer-type-def type-id='f089a11b' size-in-bits='64' id='20950ec7'/>
+      <pointer-type-def type-id='f5213d9b' size-in-bits='64' id='b90a2617'/>
+      <pointer-type-def type-id='c70cf626' size-in-bits='64' id='54a734c8'/>
+      <class-decl name='usb_ep_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='133' column='1' id='e094094c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enable' type-id='4426dbe0' visibility='default' filepath='include/linux/usb/gadget.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable' type-id='99f649a9' visibility='default' filepath='include/linux/usb/gadget.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dispose' type-id='b1c1788a' visibility='default' filepath='include/linux/usb/gadget.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='alloc_request' type-id='37593c93' visibility='default' filepath='include/linux/usb/gadget.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='free_request' type-id='2dfafd2c' visibility='default' filepath='include/linux/usb/gadget.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='queue' type-id='bbe8d894' visibility='default' filepath='include/linux/usb/gadget.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dequeue' type-id='487818e7' visibility='default' filepath='include/linux/usb/gadget.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_halt' type-id='807f0070' visibility='default' filepath='include/linux/usb/gadget.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_wedge' type-id='99f649a9' visibility='default' filepath='include/linux/usb/gadget.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fifo_status' type-id='99f649a9' visibility='default' filepath='include/linux/usb/gadget.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fifo_flush' type-id='b1c1788a' visibility='default' filepath='include/linux/usb/gadget.h' line='151' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d6bdcb4d' size-in-bits='64' id='a915fb99'/>
+      <pointer-type-def type-id='72e0b98d' size-in-bits='64' id='99f649a9'/>
+      <pointer-type-def type-id='c112c396' size-in-bits='64' id='4426dbe0'/>
+      <pointer-type-def type-id='5f81edee' size-in-bits='64' id='807f0070'/>
+      <pointer-type-def type-id='23420063' size-in-bits='64' id='487818e7'/>
+      <pointer-type-def type-id='f1c2900a' size-in-bits='64' id='bbe8d894'/>
+      <pointer-type-def type-id='cd4cfe6f' size-in-bits='64' id='37593c93'/>
+      <pointer-type-def type-id='e72900f8' size-in-bits='64' id='b1c1788a'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/gadget/composite.c' language='LANG_C89'>
+      <function-decl name='usb_add_function' mangled-name='usb_add_function' filepath='drivers/usb/gadget/composite.c' line='300' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_add_function'>
+        <parameter type-id='ee27b7c6' name='config' filepath='drivers/usb/gadget/composite.c' line='300' column='1'/>
+        <parameter type-id='e5411c2c' name='function' filepath='drivers/usb/gadget/composite.c' line='301' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_gadget_vbus_draw' mangled-name='usb_gadget_vbus_draw' filepath='include/linux/usb/gadget.h' line='574' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_vbus_draw'>
+        <parameter type-id='49a58c0d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_gadget_probe_driver' mangled-name='usb_gadget_probe_driver' filepath='include/linux/usb/gadget.h' line='723' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_probe_driver'>
+        <parameter type-id='9762ede1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_gadget_unregister_driver' mangled-name='usb_gadget_unregister_driver' filepath='include/linux/usb/gadget.h' line='738' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_unregister_driver'>
+        <parameter type-id='9762ede1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_composite_setup_continue' mangled-name='usb_composite_setup_continue' filepath='drivers/usb/gadget/composite.c' line='2453' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_composite_setup_continue'>
+        <parameter type-id='2a895c01' name='cdev' filepath='drivers/usb/gadget/composite.c' line='2453' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='e9546509' size-in-bits='64' id='2a895c01'/>
+      <pointer-type-def type-id='85c151d0' size-in-bits='64' id='ee27b7c6'/>
+      <pointer-type-def type-id='d6a54726' size-in-bits='64' id='e5411c2c'/>
+      <class-decl name='usb_composite_dev' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='478' column='1' id='e9546509'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gadget' type-id='49a58c0d' visibility='default' filepath='include/linux/usb/composite.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='req' type-id='1a494567' visibility='default' filepath='include/linux/usb/composite.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='os_desc_req' type-id='1a494567' visibility='default' filepath='include/linux/usb/composite.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='config' type-id='ee27b7c6' visibility='default' filepath='include/linux/usb/composite.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='qw_sign' type-id='497ff6fb' visibility='default' filepath='include/linux/usb/composite.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='b_vendor_code' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='os_desc_config' type-id='ee27b7c6' visibility='default' filepath='include/linux/usb/composite.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='use_os_string' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='suspended' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='desc' type-id='582de67c' visibility='default' filepath='include/linux/usb/composite.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='configs' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='gstrings' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='driver' type-id='c64e62ba' visibility='default' filepath='include/linux/usb/composite.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='next_string_id' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='def_manufacturer' type-id='26a90f95' visibility='default' filepath='include/linux/usb/composite.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='deactivations' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='delayed_status' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/composite.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/usb/composite.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='setup_pending' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='os_desc_pending' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='516' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_configuration' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='302' column='1' id='85c151d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='include/linux/usb/composite.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='strings' type-id='fa0eba8f' visibility='default' filepath='include/linux/usb/composite.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='descriptors' type-id='1993c682' visibility='default' filepath='include/linux/usb/composite.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unbind' type-id='b7daa1eb' visibility='default' filepath='include/linux/usb/composite.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='setup' type-id='04b7616c' visibility='default' filepath='include/linux/usb/composite.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bConfigurationValue' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='iConfiguration' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='bmAttributes' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='MaxPower' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/composite.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cdev' type-id='2a895c01' visibility='default' filepath='include/linux/usb/composite.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='functions' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='next_interface_id' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='superspeed' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='highspeed' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='fullspeed' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='superspeed_plus' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='interface' type-id='9c207f89' visibility='default' filepath='include/linux/usb/composite.h' line='334' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_function' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='191' column='1' id='d6a54726'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/composite.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='strings' type-id='fa0eba8f' visibility='default' filepath='include/linux/usb/composite.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fs_descriptors' type-id='f363a725' visibility='default' filepath='include/linux/usb/composite.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hs_descriptors' type-id='f363a725' visibility='default' filepath='include/linux/usb/composite.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ss_descriptors' type-id='f363a725' visibility='default' filepath='include/linux/usb/composite.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ssp_descriptors' type-id='f363a725' visibility='default' filepath='include/linux/usb/composite.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='config' type-id='ee27b7c6' visibility='default' filepath='include/linux/usb/composite.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='os_desc_table' type-id='fed2517b' visibility='default' filepath='include/linux/usb/composite.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='os_desc_n' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bind' type-id='3b615603' visibility='default' filepath='include/linux/usb/composite.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='unbind' type-id='d44ba07c' visibility='default' filepath='include/linux/usb/composite.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='free_func' type-id='0da78fa5' visibility='default' filepath='include/linux/usb/composite.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/usb/composite.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_alt' type-id='addd4a1a' visibility='default' filepath='include/linux/usb/composite.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='get_alt' type-id='01481038' visibility='default' filepath='include/linux/usb/composite.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='disable' type-id='0da78fa5' visibility='default' filepath='include/linux/usb/composite.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='setup' type-id='b9adeaf4' visibility='default' filepath='include/linux/usb/composite.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='req_match' type-id='dc59a00f' visibility='default' filepath='include/linux/usb/composite.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='suspend' type-id='0da78fa5' visibility='default' filepath='include/linux/usb/composite.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='resume' type-id='0da78fa5' visibility='default' filepath='include/linux/usb/composite.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='get_status' type-id='58d59612' visibility='default' filepath='include/linux/usb/composite.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='func_suspend' type-id='dcad5492' visibility='default' filepath='include/linux/usb/composite.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='endpoints' type-id='f066dd3c' visibility='default' filepath='include/linux/usb/composite.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='fi' type-id='2abcd7ef' visibility='default' filepath='include/linux/usb/composite.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='bind_deactivated' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='242' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9e6bb89c' size-in-bits='64' id='1993c682'/>
+      <pointer-type-def type-id='1a56399f' size-in-bits='64' id='2abcd7ef'/>
+      <pointer-type-def type-id='f154f192' size-in-bits='64' id='04b7616c'/>
+      <pointer-type-def type-id='7c02f62f' size-in-bits='64' id='3b615603'/>
+      <pointer-type-def type-id='0965e7f8' size-in-bits='64' id='58d59612'/>
+      <pointer-type-def type-id='6d86a332' size-in-bits='64' id='b9adeaf4'/>
+      <pointer-type-def type-id='3ec9b040' size-in-bits='64' id='dcad5492'/>
+      <pointer-type-def type-id='6c6f1c36' size-in-bits='64' id='01481038'/>
+      <pointer-type-def type-id='476ef610' size-in-bits='64' id='addd4a1a'/>
+      <pointer-type-def type-id='16eae85b' size-in-bits='64' id='dc59a00f'/>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='112' id='497ff6fb'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <pointer-type-def type-id='692fa8cc' size-in-bits='64' id='c64e62ba'/>
+      <pointer-type-def type-id='5948074d' size-in-bits='64' id='f363a725'/>
+      <array-type-def dimensions='1' type-id='e5411c2c' size-in-bits='1024' id='9c207f89'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <pointer-type-def type-id='9a9cf0bf' size-in-bits='64' id='fa0eba8f'/>
+      <pointer-type-def type-id='ee0eb9bb' size-in-bits='64' id='fed2517b'/>
+      <pointer-type-def type-id='faebaea7' size-in-bits='64' id='b7daa1eb'/>
+      <pointer-type-def type-id='b86ce2e2' size-in-bits='64' id='d44ba07c'/>
+      <pointer-type-def type-id='d7b840f9' size-in-bits='64' id='0da78fa5'/>
+      <pointer-type-def type-id='5352365e' size-in-bits='64' id='9e6bb89c'/>
+      <qualified-type-def type-id='364ef168' const='yes' id='1a56399f'/>
+      <class-decl name='usb_composite_driver' size-in-bits='2816' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='388' column='1' id='692fa8cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/composite.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='b5c13ec7' visibility='default' filepath='include/linux/usb/composite.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='strings' type-id='fa0eba8f' visibility='default' filepath='include/linux/usb/composite.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_speed' type-id='4e532009' visibility='default' filepath='include/linux/usb/composite.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='needs_serial' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bind' type-id='ced7d449' visibility='default' filepath='include/linux/usb/composite.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='unbind' type-id='ced7d449' visibility='default' filepath='include/linux/usb/composite.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='disconnect' type-id='b2a3307c' visibility='default' filepath='include/linux/usb/composite.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='suspend' type-id='b2a3307c' visibility='default' filepath='include/linux/usb/composite.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='resume' type-id='b2a3307c' visibility='default' filepath='include/linux/usb/composite.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='gadget_driver' type-id='b718d3f9' visibility='default' filepath='include/linux/usb/composite.h' line='403' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_os_desc_table' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='113' column='1' id='ee0eb9bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='if_id' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/composite.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='os_desc' type-id='5260af22' visibility='default' filepath='include/linux/usb/composite.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4cd738bd' size-in-bits='64' id='5948074d'/>
+      <pointer-type-def type-id='4b365417' size-in-bits='64' id='9a9cf0bf'/>
+      <qualified-type-def type-id='4cd738bd' const='yes' id='5352365e'/>
+      <pointer-type-def type-id='d4f1de57' size-in-bits='64' id='b5c13ec7'/>
+      <pointer-type-def type-id='9a22e8f5' size-in-bits='64' id='ced7d449'/>
+      <class-decl name='usb_descriptor_header' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='280' column='1' id='4cd738bd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='282' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_function_instance' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='589' column='1' id='364ef168'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='group' type-id='f05eea44' visibility='default' filepath='include/linux/usb/composite.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cfs_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fd' type-id='f666bcc1' visibility='default' filepath='include/linux/usb/composite.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='f' type-id='e5411c2c' visibility='default' filepath='include/linux/usb/composite.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='set_inst_name' type-id='f0f4c2cd' visibility='default' filepath='include/linux/usb/composite.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='free_func_inst' type-id='f16bd93b' visibility='default' filepath='include/linux/usb/composite.h' line='596' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_gadget_strings' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='771' column='1' id='4b365417'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='language' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/gadget.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='strings' type-id='3b7e997b' visibility='default' filepath='include/linux/usb/gadget.h' line='773' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e5af4d64' size-in-bits='64' id='5260af22'/>
+      <pointer-type-def type-id='90df3e0a' size-in-bits='64' id='b2a3307c'/>
+      <qualified-type-def type-id='582de67c' const='yes' id='d4f1de57'/>
+      <pointer-type-def type-id='306fcd19' size-in-bits='64' id='f0f4c2cd'/>
+      <class-decl name='config_group' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='79' column='1' id='f05eea44'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cg_item' type-id='79236ccf' visibility='default' filepath='include/linux/configfs.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cg_children' type-id='72f469ec' visibility='default' filepath='include/linux/configfs.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='cg_subsys' type-id='598755ca' visibility='default' filepath='include/linux/configfs.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='default_groups' type-id='72f469ec' visibility='default' filepath='include/linux/configfs.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='group_entry' type-id='72f469ec' visibility='default' filepath='include/linux/configfs.h' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_os_desc' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='93' column='1' id='e5af4d64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ext_compat_id' type-id='26a90f95' visibility='default' filepath='include/linux/usb/composite.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ext_prop' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ext_prop_len' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/composite.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ext_prop_count' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/composite.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='opts_mutex' type-id='e0ea832a' visibility='default' filepath='include/linux/usb/composite.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='group' type-id='f05eea44' visibility='default' filepath='include/linux/usb/composite.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/usb/composite.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='38df0539' size-in-bits='64' id='f666bcc1'/>
+      <pointer-type-def type-id='2bc124cb' size-in-bits='64' id='3b7e997b'/>
+      <pointer-type-def type-id='b297b72f' size-in-bits='64' id='f16bd93b'/>
+      <pointer-type-def type-id='4bdc1a8c' size-in-bits='64' id='598755ca'/>
+      <class-decl name='config_item' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='40' column='1' id='79236ccf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ci_name' type-id='26a90f95' visibility='default' filepath='include/linux/configfs.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ci_namebuf' type-id='664ac0b7' visibility='default' filepath='include/linux/configfs.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ci_kref' type-id='400fb07b' visibility='default' filepath='include/linux/configfs.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ci_entry' type-id='72f469ec' visibility='default' filepath='include/linux/configfs.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ci_parent' type-id='7a29ff27' visibility='default' filepath='include/linux/configfs.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ci_group' type-id='97aff454' visibility='default' filepath='include/linux/configfs.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ci_type' type-id='596e8e55' visibility='default' filepath='include/linux/configfs.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ci_dentry' type-id='27675065' visibility='default' filepath='include/linux/configfs.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_function_driver' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='581' column='1' id='38df0539'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/composite.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/usb/composite.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='alloc_inst' type-id='20644ce5' visibility='default' filepath='include/linux/usb/composite.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='alloc_func' type-id='ae795a50' visibility='default' filepath='include/linux/usb/composite.h' line='586' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_string' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='758' column='1' id='2bc124cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='f9b06939' visibility='default' filepath='include/linux/usb/gadget.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s' type-id='80f4b756' visibility='default' filepath='include/linux/usb/gadget.h' line='760' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f05eea44' size-in-bits='64' id='97aff454'/>
+      <pointer-type-def type-id='79236ccf' size-in-bits='64' id='7a29ff27'/>
+      <pointer-type-def type-id='d88ac15d' size-in-bits='64' id='596e8e55'/>
+      <class-decl name='configfs_subsystem' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='226' column='1' id='4bdc1a8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='su_group' type-id='f05eea44' visibility='default' filepath='include/linux/configfs.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='su_mutex' type-id='925167dc' visibility='default' filepath='include/linux/configfs.h' line='228' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a6d40256' size-in-bits='64' id='ae795a50'/>
+      <pointer-type-def type-id='54544021' size-in-bits='64' id='20644ce5'/>
+      <qualified-type-def type-id='d6939bb8' const='yes' id='d88ac15d'/>
+      <class-decl name='config_item_type' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='67' column='1' id='d6939bb8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ct_owner' type-id='2730d015' visibility='default' filepath='include/linux/configfs.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ct_item_ops' type-id='603e39d9' visibility='default' filepath='include/linux/configfs.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ct_group_ops' type-id='e8051adb' visibility='default' filepath='include/linux/configfs.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ct_attrs' type-id='bbec9157' visibility='default' filepath='include/linux/configfs.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ct_bin_attrs' type-id='07234631' visibility='default' filepath='include/linux/configfs.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='32db1b87' size-in-bits='64' id='bbec9157'/>
+      <pointer-type-def type-id='9bdc8381' size-in-bits='64' id='07234631'/>
+      <pointer-type-def type-id='6d5a1dab' size-in-bits='64' id='e8051adb'/>
+      <pointer-type-def type-id='a60315e1' size-in-bits='64' id='603e39d9'/>
+      <pointer-type-def type-id='5f2e9b8f' size-in-bits='64' id='32db1b87'/>
+      <pointer-type-def type-id='77d12c79' size-in-bits='64' id='9bdc8381'/>
+      <class-decl name='configfs_group_operations' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='218' column='1' id='6d5a1dab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='make_item' type-id='263d54b5' visibility='default' filepath='include/linux/configfs.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='make_group' type-id='45c2a1d1' visibility='default' filepath='include/linux/configfs.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='commit_item' type-id='d841f43f' visibility='default' filepath='include/linux/configfs.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='disconnect_notify' type-id='ee7d45c8' visibility='default' filepath='include/linux/configfs.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='drop_item' type-id='ee7d45c8' visibility='default' filepath='include/linux/configfs.h' line='223' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='configfs_item_operations' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='212' column='1' id='a60315e1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='release' type-id='62924a52' visibility='default' filepath='include/linux/configfs.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='allow_link' type-id='dbb91d59' visibility='default' filepath='include/linux/configfs.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='drop_link' type-id='63faaa44' visibility='default' filepath='include/linux/configfs.h' line='215' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='18ab9185' size-in-bits='64' id='45c2a1d1'/>
+      <pointer-type-def type-id='34f1eb39' size-in-bits='64' id='263d54b5'/>
+      <pointer-type-def type-id='72ce0fb3' size-in-bits='64' id='d841f43f'/>
+      <pointer-type-def type-id='8b1bf035' size-in-bits='64' id='dbb91d59'/>
+      <class-decl name='configfs_attribute' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='117' column='1' id='5f2e9b8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ca_name' type-id='80f4b756' visibility='default' filepath='include/linux/configfs.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ca_owner' type-id='2730d015' visibility='default' filepath='include/linux/configfs.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ca_mode' type-id='2594b00f' visibility='default' filepath='include/linux/configfs.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='show' type-id='03385b06' visibility='default' filepath='include/linux/configfs.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='store' type-id='f2e3940a' visibility='default' filepath='include/linux/configfs.h' line='122' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='configfs_bin_attribute' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='153' column='1' id='77d12c79'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cb_attr' type-id='5f2e9b8f' visibility='default' filepath='include/linux/configfs.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cb_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/configfs.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cb_max_size' type-id='b59d7dce' visibility='default' filepath='include/linux/configfs.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='read' type-id='8d4ac8c3' visibility='default' filepath='include/linux/configfs.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='write' type-id='8d4ac8c3' visibility='default' filepath='include/linux/configfs.h' line='158' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='0f872816' size-in-bits='64' id='ee7d45c8'/>
+      <pointer-type-def type-id='d724f4d0' size-in-bits='64' id='62924a52'/>
+      <pointer-type-def type-id='e29a2892' size-in-bits='64' id='63faaa44'/>
+      <pointer-type-def type-id='7f00154c' size-in-bits='64' id='03385b06'/>
+      <pointer-type-def type-id='0bb075d8' size-in-bits='64' id='f2e3940a'/>
+      <pointer-type-def type-id='baf016ef' size-in-bits='64' id='8d4ac8c3'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/gadget/configfs.c' language='LANG_C89'>
+      <function-decl name='unregister_gadget_item' mangled-name='unregister_gadget_item' filepath='drivers/usb/gadget/configfs.c' line='1895' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_gadget_item'>
+        <parameter type-id='7a29ff27' name='item' filepath='drivers/usb/gadget/configfs.c' line='1895' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/gadget/function/f_acm.c' language='LANG_C89'>
+      <class-decl name='gs_port' is-struct='yes' visibility='default' is-declaration-only='yes' id='4788f063'/>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='112' id='497ff6fb'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e5411c2c' size-in-bits='1024' id='9c207f89'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <class-decl name='usb_function_driver' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='581' column='1' id='38df0539'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/composite.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/usb/composite.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='alloc_inst' type-id='20644ce5' visibility='default' filepath='include/linux/usb/composite.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='alloc_func' type-id='ae795a50' visibility='default' filepath='include/linux/usb/composite.h' line='586' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_function_instance' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='589' column='1' id='364ef168'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='group' type-id='f05eea44' visibility='default' filepath='include/linux/usb/composite.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cfs_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fd' type-id='f666bcc1' visibility='default' filepath='include/linux/usb/composite.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='f' type-id='e5411c2c' visibility='default' filepath='include/linux/usb/composite.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='set_inst_name' type-id='f0f4c2cd' visibility='default' filepath='include/linux/usb/composite.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='free_func_inst' type-id='f16bd93b' visibility='default' filepath='include/linux/usb/composite.h' line='596' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='config_group' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='79' column='1' id='f05eea44'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cg_item' type-id='79236ccf' visibility='default' filepath='include/linux/configfs.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cg_children' type-id='72f469ec' visibility='default' filepath='include/linux/configfs.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='cg_subsys' type-id='598755ca' visibility='default' filepath='include/linux/configfs.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='default_groups' type-id='72f469ec' visibility='default' filepath='include/linux/configfs.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='group_entry' type-id='72f469ec' visibility='default' filepath='include/linux/configfs.h' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='config_item' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='40' column='1' id='79236ccf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ci_name' type-id='26a90f95' visibility='default' filepath='include/linux/configfs.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ci_namebuf' type-id='664ac0b7' visibility='default' filepath='include/linux/configfs.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ci_kref' type-id='400fb07b' visibility='default' filepath='include/linux/configfs.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ci_entry' type-id='72f469ec' visibility='default' filepath='include/linux/configfs.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ci_parent' type-id='7a29ff27' visibility='default' filepath='include/linux/configfs.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ci_group' type-id='97aff454' visibility='default' filepath='include/linux/configfs.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ci_type' type-id='596e8e55' visibility='default' filepath='include/linux/configfs.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ci_dentry' type-id='27675065' visibility='default' filepath='include/linux/configfs.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='config_item_type' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='67' column='1' id='d6939bb8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ct_owner' type-id='2730d015' visibility='default' filepath='include/linux/configfs.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ct_item_ops' type-id='603e39d9' visibility='default' filepath='include/linux/configfs.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ct_group_ops' type-id='e8051adb' visibility='default' filepath='include/linux/configfs.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ct_attrs' type-id='bbec9157' visibility='default' filepath='include/linux/configfs.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ct_bin_attrs' type-id='07234631' visibility='default' filepath='include/linux/configfs.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='configfs_item_operations' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='212' column='1' id='a60315e1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='release' type-id='62924a52' visibility='default' filepath='include/linux/configfs.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='allow_link' type-id='dbb91d59' visibility='default' filepath='include/linux/configfs.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='drop_link' type-id='63faaa44' visibility='default' filepath='include/linux/configfs.h' line='215' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='configfs_group_operations' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='218' column='1' id='6d5a1dab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='make_item' type-id='263d54b5' visibility='default' filepath='include/linux/configfs.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='make_group' type-id='45c2a1d1' visibility='default' filepath='include/linux/configfs.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='commit_item' type-id='d841f43f' visibility='default' filepath='include/linux/configfs.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='disconnect_notify' type-id='ee7d45c8' visibility='default' filepath='include/linux/configfs.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='drop_item' type-id='ee7d45c8' visibility='default' filepath='include/linux/configfs.h' line='223' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='configfs_attribute' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='117' column='1' id='5f2e9b8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ca_name' type-id='80f4b756' visibility='default' filepath='include/linux/configfs.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ca_owner' type-id='2730d015' visibility='default' filepath='include/linux/configfs.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ca_mode' type-id='2594b00f' visibility='default' filepath='include/linux/configfs.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='show' type-id='03385b06' visibility='default' filepath='include/linux/configfs.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='store' type-id='f2e3940a' visibility='default' filepath='include/linux/configfs.h' line='122' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='configfs_bin_attribute' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='153' column='1' id='77d12c79'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cb_attr' type-id='5f2e9b8f' visibility='default' filepath='include/linux/configfs.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cb_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/configfs.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cb_max_size' type-id='b59d7dce' visibility='default' filepath='include/linux/configfs.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='read' type-id='8d4ac8c3' visibility='default' filepath='include/linux/configfs.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='write' type-id='8d4ac8c3' visibility='default' filepath='include/linux/configfs.h' line='158' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='configfs_subsystem' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='226' column='1' id='4bdc1a8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='su_group' type-id='f05eea44' visibility='default' filepath='include/linux/configfs.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='su_mutex' type-id='925167dc' visibility='default' filepath='include/linux/configfs.h' line='228' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_function' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='191' column='1' id='d6a54726'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/composite.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='strings' type-id='fa0eba8f' visibility='default' filepath='include/linux/usb/composite.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fs_descriptors' type-id='f363a725' visibility='default' filepath='include/linux/usb/composite.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hs_descriptors' type-id='f363a725' visibility='default' filepath='include/linux/usb/composite.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ss_descriptors' type-id='f363a725' visibility='default' filepath='include/linux/usb/composite.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ssp_descriptors' type-id='f363a725' visibility='default' filepath='include/linux/usb/composite.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='config' type-id='ee27b7c6' visibility='default' filepath='include/linux/usb/composite.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='os_desc_table' type-id='fed2517b' visibility='default' filepath='include/linux/usb/composite.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='os_desc_n' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bind' type-id='3b615603' visibility='default' filepath='include/linux/usb/composite.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='unbind' type-id='d44ba07c' visibility='default' filepath='include/linux/usb/composite.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='free_func' type-id='0da78fa5' visibility='default' filepath='include/linux/usb/composite.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/usb/composite.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_alt' type-id='addd4a1a' visibility='default' filepath='include/linux/usb/composite.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='get_alt' type-id='01481038' visibility='default' filepath='include/linux/usb/composite.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='disable' type-id='0da78fa5' visibility='default' filepath='include/linux/usb/composite.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='setup' type-id='b9adeaf4' visibility='default' filepath='include/linux/usb/composite.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='req_match' type-id='dc59a00f' visibility='default' filepath='include/linux/usb/composite.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='suspend' type-id='0da78fa5' visibility='default' filepath='include/linux/usb/composite.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='resume' type-id='0da78fa5' visibility='default' filepath='include/linux/usb/composite.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='get_status' type-id='58d59612' visibility='default' filepath='include/linux/usb/composite.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='func_suspend' type-id='dcad5492' visibility='default' filepath='include/linux/usb/composite.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='endpoints' type-id='f066dd3c' visibility='default' filepath='include/linux/usb/composite.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='fi' type-id='2abcd7ef' visibility='default' filepath='include/linux/usb/composite.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='bind_deactivated' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='242' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_gadget_strings' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='771' column='1' id='4b365417'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='language' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/gadget.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='strings' type-id='3b7e997b' visibility='default' filepath='include/linux/usb/gadget.h' line='773' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_string' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='758' column='1' id='2bc124cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='f9b06939' visibility='default' filepath='include/linux/usb/gadget.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s' type-id='80f4b756' visibility='default' filepath='include/linux/usb/gadget.h' line='760' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_descriptor_header' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='280' column='1' id='4cd738bd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='282' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_configuration' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='302' column='1' id='85c151d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='include/linux/usb/composite.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='strings' type-id='fa0eba8f' visibility='default' filepath='include/linux/usb/composite.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='descriptors' type-id='1993c682' visibility='default' filepath='include/linux/usb/composite.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unbind' type-id='b7daa1eb' visibility='default' filepath='include/linux/usb/composite.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='setup' type-id='04b7616c' visibility='default' filepath='include/linux/usb/composite.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bConfigurationValue' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='iConfiguration' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='bmAttributes' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='MaxPower' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/composite.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cdev' type-id='2a895c01' visibility='default' filepath='include/linux/usb/composite.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='functions' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='next_interface_id' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='superspeed' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='highspeed' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='fullspeed' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='superspeed_plus' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='interface' type-id='9c207f89' visibility='default' filepath='include/linux/usb/composite.h' line='334' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_composite_dev' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='478' column='1' id='e9546509'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gadget' type-id='49a58c0d' visibility='default' filepath='include/linux/usb/composite.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='req' type-id='1a494567' visibility='default' filepath='include/linux/usb/composite.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='os_desc_req' type-id='1a494567' visibility='default' filepath='include/linux/usb/composite.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='config' type-id='ee27b7c6' visibility='default' filepath='include/linux/usb/composite.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='qw_sign' type-id='497ff6fb' visibility='default' filepath='include/linux/usb/composite.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='b_vendor_code' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='os_desc_config' type-id='ee27b7c6' visibility='default' filepath='include/linux/usb/composite.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='use_os_string' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='suspended' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='desc' type-id='582de67c' visibility='default' filepath='include/linux/usb/composite.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='configs' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='gstrings' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='driver' type-id='c64e62ba' visibility='default' filepath='include/linux/usb/composite.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='next_string_id' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='def_manufacturer' type-id='26a90f95' visibility='default' filepath='include/linux/usb/composite.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='deactivations' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='delayed_status' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/composite.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/usb/composite.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='setup_pending' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='os_desc_pending' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='516' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_composite_driver' size-in-bits='2816' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='388' column='1' id='692fa8cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/composite.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='b5c13ec7' visibility='default' filepath='include/linux/usb/composite.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='strings' type-id='fa0eba8f' visibility='default' filepath='include/linux/usb/composite.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_speed' type-id='4e532009' visibility='default' filepath='include/linux/usb/composite.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='needs_serial' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bind' type-id='ced7d449' visibility='default' filepath='include/linux/usb/composite.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='unbind' type-id='ced7d449' visibility='default' filepath='include/linux/usb/composite.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='disconnect' type-id='b2a3307c' visibility='default' filepath='include/linux/usb/composite.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='suspend' type-id='b2a3307c' visibility='default' filepath='include/linux/usb/composite.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='resume' type-id='b2a3307c' visibility='default' filepath='include/linux/usb/composite.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='gadget_driver' type-id='b718d3f9' visibility='default' filepath='include/linux/usb/composite.h' line='403' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_os_desc_table' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='113' column='1' id='ee0eb9bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='if_id' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/composite.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='os_desc' type-id='5260af22' visibility='default' filepath='include/linux/usb/composite.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_os_desc' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='93' column='1' id='e5af4d64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ext_compat_id' type-id='26a90f95' visibility='default' filepath='include/linux/usb/composite.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ext_prop' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ext_prop_len' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/composite.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ext_prop_count' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/composite.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='opts_mutex' type-id='e0ea832a' visibility='default' filepath='include/linux/usb/composite.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='group' type-id='f05eea44' visibility='default' filepath='include/linux/usb/composite.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/usb/composite.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gserial' size-in-bits='2176' is-struct='yes' visibility='default' filepath='drivers/usb/gadget/function/u_serial.h' line='34' column='1' id='11f6cc62'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='func' type-id='d6a54726' visibility='default' filepath='drivers/usb/gadget/function/u_serial.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='ioport' type-id='c10e36d3' visibility='default' filepath='drivers/usb/gadget/function/u_serial.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='in' type-id='63a08bf7' visibility='default' filepath='drivers/usb/gadget/function/u_serial.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='out' type-id='63a08bf7' visibility='default' filepath='drivers/usb/gadget/function/u_serial.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='port_line_coding' type-id='d4a32434' visibility='default' filepath='drivers/usb/gadget/function/u_serial.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='connect' type-id='cad718c1' visibility='default' filepath='drivers/usb/gadget/function/u_serial.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='disconnect' type-id='cad718c1' visibility='default' filepath='drivers/usb/gadget/function/u_serial.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='send_break' type-id='4980d45f' visibility='default' filepath='drivers/usb/gadget/function/u_serial.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_line_coding' size-in-bits='56' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='257' column='1' id='d4a32434'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dwDTERate' type-id='2f162548' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bCharFormat' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bParityType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bDataBits' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='271' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f05eea44' size-in-bits='64' id='97aff454'/>
+      <pointer-type-def type-id='18ab9185' size-in-bits='64' id='45c2a1d1'/>
+      <pointer-type-def type-id='79236ccf' size-in-bits='64' id='7a29ff27'/>
+      <pointer-type-def type-id='34f1eb39' size-in-bits='64' id='263d54b5'/>
+      <pointer-type-def type-id='5f2e9b8f' size-in-bits='64' id='32db1b87'/>
+      <pointer-type-def type-id='32db1b87' size-in-bits='64' id='bbec9157'/>
+      <pointer-type-def type-id='77d12c79' size-in-bits='64' id='9bdc8381'/>
+      <pointer-type-def type-id='9bdc8381' size-in-bits='64' id='07234631'/>
+      <pointer-type-def type-id='6d5a1dab' size-in-bits='64' id='e8051adb'/>
+      <pointer-type-def type-id='a60315e1' size-in-bits='64' id='603e39d9'/>
+      <pointer-type-def type-id='4bdc1a8c' size-in-bits='64' id='598755ca'/>
+      <qualified-type-def type-id='d6939bb8' const='yes' id='d88ac15d'/>
+      <pointer-type-def type-id='d88ac15d' size-in-bits='64' id='596e8e55'/>
+      <qualified-type-def type-id='4cd738bd' const='yes' id='5352365e'/>
+      <pointer-type-def type-id='5352365e' size-in-bits='64' id='9e6bb89c'/>
+      <pointer-type-def type-id='9e6bb89c' size-in-bits='64' id='1993c682'/>
+      <qualified-type-def type-id='582de67c' const='yes' id='d4f1de57'/>
+      <pointer-type-def type-id='d4f1de57' size-in-bits='64' id='b5c13ec7'/>
+      <qualified-type-def type-id='364ef168' const='yes' id='1a56399f'/>
+      <pointer-type-def type-id='1a56399f' size-in-bits='64' id='2abcd7ef'/>
+      <pointer-type-def type-id='4788f063' size-in-bits='64' id='c10e36d3'/>
+      <pointer-type-def type-id='11f6cc62' size-in-bits='64' id='3921c1a0'/>
+      <pointer-type-def type-id='72ce0fb3' size-in-bits='64' id='d841f43f'/>
+      <pointer-type-def type-id='8b1bf035' size-in-bits='64' id='dbb91d59'/>
+      <pointer-type-def type-id='8b226e8b' size-in-bits='64' id='4980d45f'/>
+      <pointer-type-def type-id='9a22e8f5' size-in-bits='64' id='ced7d449'/>
+      <pointer-type-def type-id='f154f192' size-in-bits='64' id='04b7616c'/>
+      <pointer-type-def type-id='7c02f62f' size-in-bits='64' id='3b615603'/>
+      <pointer-type-def type-id='0965e7f8' size-in-bits='64' id='58d59612'/>
+      <pointer-type-def type-id='6d86a332' size-in-bits='64' id='b9adeaf4'/>
+      <pointer-type-def type-id='3ec9b040' size-in-bits='64' id='dcad5492'/>
+      <pointer-type-def type-id='6c6f1c36' size-in-bits='64' id='01481038'/>
+      <pointer-type-def type-id='476ef610' size-in-bits='64' id='addd4a1a'/>
+      <pointer-type-def type-id='306fcd19' size-in-bits='64' id='f0f4c2cd'/>
+      <pointer-type-def type-id='16eae85b' size-in-bits='64' id='dc59a00f'/>
+      <pointer-type-def type-id='7f00154c' size-in-bits='64' id='03385b06'/>
+      <pointer-type-def type-id='0bb075d8' size-in-bits='64' id='f2e3940a'/>
+      <pointer-type-def type-id='baf016ef' size-in-bits='64' id='8d4ac8c3'/>
+      <pointer-type-def type-id='e9546509' size-in-bits='64' id='2a895c01'/>
+      <pointer-type-def type-id='692fa8cc' size-in-bits='64' id='c64e62ba'/>
+      <pointer-type-def type-id='85c151d0' size-in-bits='64' id='ee27b7c6'/>
+      <pointer-type-def type-id='4cd738bd' size-in-bits='64' id='5948074d'/>
+      <pointer-type-def type-id='5948074d' size-in-bits='64' id='f363a725'/>
+      <pointer-type-def type-id='d6a54726' size-in-bits='64' id='e5411c2c'/>
+      <pointer-type-def type-id='a6d40256' size-in-bits='64' id='ae795a50'/>
+      <pointer-type-def type-id='38df0539' size-in-bits='64' id='f666bcc1'/>
+      <pointer-type-def type-id='364ef168' size-in-bits='64' id='6614aa5e'/>
+      <pointer-type-def type-id='54544021' size-in-bits='64' id='20644ce5'/>
+      <pointer-type-def type-id='4b365417' size-in-bits='64' id='9a9cf0bf'/>
+      <pointer-type-def type-id='9a9cf0bf' size-in-bits='64' id='fa0eba8f'/>
+      <pointer-type-def type-id='e5af4d64' size-in-bits='64' id='5260af22'/>
+      <pointer-type-def type-id='ee0eb9bb' size-in-bits='64' id='fed2517b'/>
+      <pointer-type-def type-id='2bc124cb' size-in-bits='64' id='3b7e997b'/>
+      <pointer-type-def type-id='0f872816' size-in-bits='64' id='ee7d45c8'/>
+      <pointer-type-def type-id='d724f4d0' size-in-bits='64' id='62924a52'/>
+      <pointer-type-def type-id='e29a2892' size-in-bits='64' id='63faaa44'/>
+      <pointer-type-def type-id='b086bddd' size-in-bits='64' id='cad718c1'/>
+      <pointer-type-def type-id='90df3e0a' size-in-bits='64' id='b2a3307c'/>
+      <pointer-type-def type-id='faebaea7' size-in-bits='64' id='b7daa1eb'/>
+      <pointer-type-def type-id='b86ce2e2' size-in-bits='64' id='d44ba07c'/>
+      <pointer-type-def type-id='d7b840f9' size-in-bits='64' id='0da78fa5'/>
+      <pointer-type-def type-id='b297b72f' size-in-bits='64' id='f16bd93b'/>
+      <function-decl name='usb_function_unregister' mangled-name='usb_function_unregister' filepath='include/linux/usb/composite.h' line='599' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_function_unregister'>
+        <parameter type-id='f666bcc1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gserial_alloc_line' mangled-name='gserial_alloc_line' filepath='drivers/usb/gadget/function/u_serial.h' line='57' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gserial_alloc_line'>
+        <parameter type-id='cf536864'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='config_group_init_type_name' mangled-name='config_group_init_type_name' filepath='include/linux/configfs.h' line='88' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='config_group_init_type_name'>
+        <parameter type-id='97aff454'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='596e8e55'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_gstrings_attach' mangled-name='usb_gstrings_attach' filepath='include/linux/usb/composite.h' line='522' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gstrings_attach'>
+        <parameter type-id='2a895c01'/>
+        <parameter type-id='fa0eba8f'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='3b7e997b'/>
+      </function-decl>
+      <function-decl name='usb_interface_id' mangled-name='usb_interface_id' filepath='include/linux/usb/composite.h' line='250' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_interface_id'>
+        <parameter type-id='ee27b7c6'/>
+        <parameter type-id='e5411c2c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_ep_autoconfig' mangled-name='usb_ep_autoconfig' filepath='include/linux/usb/gadget.h' line='891' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_autoconfig'>
+        <parameter type-id='49a58c0d'/>
+        <parameter type-id='a07d0491'/>
+        <return type-id='63a08bf7'/>
+      </function-decl>
+      <function-decl name='gs_alloc_req' mangled-name='gs_alloc_req' filepath='drivers/usb/gadget/function/u_serial.h' line='53' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gs_alloc_req'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='1a494567'/>
+      </function-decl>
+      <function-decl name='usb_assign_descriptors' mangled-name='usb_assign_descriptors' filepath='include/linux/usb/gadget.h' line='810' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_assign_descriptors'>
+        <parameter type-id='e5411c2c'/>
+        <parameter type-id='f363a725'/>
+        <parameter type-id='f363a725'/>
+        <parameter type-id='f363a725'/>
+        <parameter type-id='f363a725'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gs_free_req' mangled-name='gs_free_req' filepath='drivers/usb/gadget/function/u_serial.h' line='54' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gs_free_req'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='1a494567'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_ep_disable' mangled-name='usb_ep_disable' filepath='include/linux/usb/gadget.h' line='247' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_disable'>
+        <parameter type-id='63a08bf7'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_ep_enable' mangled-name='usb_ep_enable' filepath='include/linux/usb/gadget.h' line='246' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_enable'>
+        <parameter type-id='63a08bf7'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gserial_disconnect' mangled-name='gserial_disconnect' filepath='drivers/usb/gadget/function/u_serial.h' line='62' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gserial_disconnect'>
+        <parameter type-id='3921c1a0'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='config_ep_by_speed' mangled-name='config_ep_by_speed' filepath='include/linux/usb/composite.h' line='255' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='config_ep_by_speed'>
+        <parameter type-id='49a58c0d'/>
+        <parameter type-id='e5411c2c'/>
+        <parameter type-id='63a08bf7'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gserial_connect' mangled-name='gserial_connect' filepath='drivers/usb/gadget/function/u_serial.h' line='61' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gserial_connect'>
+        <parameter type-id='3921c1a0'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_ep_queue' mangled-name='usb_ep_queue' filepath='include/linux/usb/gadget.h' line='250' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_queue'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='1a494567'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_free_all_descriptors' mangled-name='usb_free_all_descriptors' filepath='include/linux/usb/gadget.h' line='815' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_free_all_descriptors'>
+        <parameter type-id='e5411c2c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_ep_set_halt' mangled-name='usb_ep_set_halt' filepath='include/linux/usb/gadget.h' line='252' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_set_halt'>
+        <parameter type-id='63a08bf7'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gserial_free_line' mangled-name='gserial_free_line' filepath='drivers/usb/gadget/function/u_serial.h' line='58' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gserial_free_line'>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_put_function_instance' mangled-name='usb_put_function_instance' filepath='include/linux/usb/composite.h' line='601' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_put_function_instance'>
+        <parameter type-id='6614aa5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_function_register' mangled-name='usb_function_register' filepath='include/linux/usb/composite.h' line='600' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_function_register'>
+        <parameter type-id='f666bcc1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='18ab9185'>
+        <parameter type-id='97aff454'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='97aff454'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34f1eb39'>
+        <parameter type-id='97aff454'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='7a29ff27'/>
+      </function-type>
+      <function-type size-in-bits='64' id='72ce0fb3'>
+        <parameter type-id='7a29ff27'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8b1bf035'>
+        <parameter type-id='7a29ff27'/>
+        <parameter type-id='7a29ff27'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8b226e8b'>
+        <parameter type-id='3921c1a0'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9a22e8f5'>
+        <parameter type-id='2a895c01'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f154f192'>
+        <parameter type-id='ee27b7c6'/>
+        <parameter type-id='5b4bef1f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7c02f62f'>
+        <parameter type-id='ee27b7c6'/>
+        <parameter type-id='e5411c2c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0965e7f8'>
+        <parameter type-id='e5411c2c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6d86a332'>
+        <parameter type-id='e5411c2c'/>
+        <parameter type-id='5b4bef1f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3ec9b040'>
+        <parameter type-id='e5411c2c'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6c6f1c36'>
+        <parameter type-id='e5411c2c'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='476ef610'>
+        <parameter type-id='e5411c2c'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='306fcd19'>
+        <parameter type-id='6614aa5e'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='16eae85b'>
+        <parameter type-id='e5411c2c'/>
+        <parameter type-id='5b4bef1f'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7f00154c'>
+        <parameter type-id='7a29ff27'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0bb075d8'>
+        <parameter type-id='7a29ff27'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='baf016ef'>
+        <parameter type-id='7a29ff27'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a6d40256'>
+        <parameter type-id='6614aa5e'/>
+        <return type-id='e5411c2c'/>
+      </function-type>
+      <function-type size-in-bits='64' id='54544021'>
+        <return type-id='6614aa5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0f872816'>
+        <parameter type-id='97aff454'/>
+        <parameter type-id='7a29ff27'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d724f4d0'>
+        <parameter type-id='7a29ff27'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e29a2892'>
+        <parameter type-id='7a29ff27'/>
+        <parameter type-id='7a29ff27'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b086bddd'>
+        <parameter type-id='3921c1a0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='90df3e0a'>
+        <parameter type-id='2a895c01'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='faebaea7'>
+        <parameter type-id='ee27b7c6'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b86ce2e2'>
+        <parameter type-id='ee27b7c6'/>
+        <parameter type-id='e5411c2c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d7b840f9'>
+        <parameter type-id='e5411c2c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b297b72f'>
+        <parameter type-id='6614aa5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='946203ef' size-in-bits='64' id='5b4bef1f'/>
+      <qualified-type-def type-id='fd7e7994' const='yes' id='946203ef'/>
+      <class-decl name='usb_ctrlrequest' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='213' column='1' id='fd7e7994'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bRequestType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bRequest' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='wValue' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wIndex' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='wLength' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='218' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/gadget/function/f_audio_source.c' language='LANG_C89'>
+      <class-decl name='snd_kcontrol' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/sound/control.h' line='54' column='1' id='8755a6ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/control.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='abbbeccc' visibility='default' filepath='include/sound/control.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/sound/control.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='info' type-id='e79cb28f' visibility='default' filepath='include/sound/control.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get' type-id='5553210f' visibility='default' filepath='include/sound/control.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='put' type-id='e149b058' visibility='default' filepath='include/sound/control.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='tlv' type-id='e3dd1f94' visibility='default' filepath='include/sound/control.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='private_value' type-id='7359adad' visibility='default' filepath='include/sound/control.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/control.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='private_free' type-id='56fe8aea' visibility='default' filepath='include/sound/control.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='vd' type-id='bfd02128' visibility='default' filepath='include/sound/control.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_timer' is-struct='yes' visibility='default' is-declaration-only='yes' id='73595e52'/>
+      <array-type-def dimensions='1' type-id='d6b43ca8' size-in-bits='1152' id='9625c091'>
+        <subrange length='12' type-id='7ff19f0f' id='84827bdc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='d6b43ca8' size-in-bits='864' id='3871823f'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7e480899' size-in-bits='768' id='2acd76fe'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7e480899' size-in-bits='1280' id='66c7c544'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='5d633b6b' size-in-bits='15360' id='5e28cc39'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8efea9e5' size-in-bits='128' id='ff13edc1'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='snd_pcm' size-in-bits='17472' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='505' column='1' id='76f8f8bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='card' type-id='52704eb7' visibility='default' filepath='include/sound/pcm.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/pcm.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='info_flags' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev_class' type-id='8efea9e5' visibility='default' filepath='include/sound/pcm.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='dev_subclass' type-id='8efea9e5' visibility='default' filepath='include/sound/pcm.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='id' type-id='59daf3ef' visibility='default' filepath='include/sound/pcm.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='name' type-id='aa5ff375' visibility='default' filepath='include/sound/pcm.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='streams' type-id='5e28cc39' visibility='default' filepath='include/sound/pcm.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16832'>
+          <var-decl name='open_mutex' type-id='925167dc' visibility='default' filepath='include/sound/pcm.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17088'>
+          <var-decl name='open_wait' type-id='b5ab048f' visibility='default' filepath='include/sound/pcm.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17280'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/pcm.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17344'>
+          <var-decl name='private_free' type-id='182096ce' visibility='default' filepath='include/sound/pcm.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17408'>
+          <var-decl name='internal' type-id='b50a4934' visibility='default' filepath='include/sound/pcm.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17416'>
+          <var-decl name='nonatomic' type-id='b50a4934' visibility='default' filepath='include/sound/pcm.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17424'>
+          <var-decl name='no_device_suspend' type-id='b50a4934' visibility='default' filepath='include/sound/pcm.h' line='521' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_str' size-in-bits='7680' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='484' column='1' id='5d633b6b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stream' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pcm' type-id='4c9f335b' visibility='default' filepath='include/sound/pcm.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='substream_count' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='substream_opened' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='substream' type-id='06b2cd14' visibility='default' filepath='include/sound/pcm.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='chmap_kctl' type-id='7a5054b7' visibility='default' filepath='include/sound/pcm.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/sound/pcm.h' line='502' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_substream' size-in-bits='3904' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='438' column='1' id='362eec9e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pcm' type-id='4c9f335b' visibility='default' filepath='include/sound/pcm.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pstr' type-id='e5ffb4bb' visibility='default' filepath='include/sound/pcm.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/pcm.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='number' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/sound/pcm.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='stream' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='latency_pm_qos_req' type-id='cd6fc142' visibility='default' filepath='include/sound/pcm.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='buffer_bytes_max' type-id='b59d7dce' visibility='default' filepath='include/sound/pcm.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dma_buffer' type-id='c5addfb4' visibility='default' filepath='include/sound/pcm.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dma_max' type-id='b59d7dce' visibility='default' filepath='include/sound/pcm.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='ops' type-id='f63b1a17' visibility='default' filepath='include/sound/pcm.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='runtime' type-id='17a05af6' visibility='default' filepath='include/sound/pcm.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='timer' type-id='6ee1a870' visibility='default' filepath='include/sound/pcm.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='timer_running' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='wait_time' type-id='bd54fe1a' visibility='default' filepath='include/sound/pcm.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='next' type-id='06b2cd14' visibility='default' filepath='include/sound/pcm.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='link_list' type-id='72f469ec' visibility='default' filepath='include/sound/pcm.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='self_group' type-id='5e60e97f' visibility='default' filepath='include/sound/pcm.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='group' type-id='8042a887' visibility='default' filepath='include/sound/pcm.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='ref_count' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3616'>
+          <var-decl name='mmap_count' type-id='49178f86' visibility='default' filepath='include/sound/pcm.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='f_flags' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='pcm_release' type-id='897d1b6d' visibility='default' filepath='include/sound/pcm.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='pid' type-id='b94e5398' visibility='default' filepath='include/sound/pcm.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='hw_opened' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='hw_no_buffer' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='478' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_dma_buffer' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/sound/memalloc.h' line='51' column='1' id='c5addfb4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='724d481c' visibility='default' filepath='include/sound/memalloc.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='area' type-id='cf536864' visibility='default' filepath='include/sound/memalloc.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='addr' type-id='cf29c9b3' visibility='default' filepath='include/sound/memalloc.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bytes' type-id='b59d7dce' visibility='default' filepath='include/sound/memalloc.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/memalloc.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_dma_device' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/sound/memalloc.h' line='19' column='1' id='724d481c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/sound/memalloc.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/memalloc.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_ops' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='52' column='1' id='73803d48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='ab756384' visibility='default' filepath='include/sound/pcm.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='close' type-id='ab756384' visibility='default' filepath='include/sound/pcm.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ioctl' type-id='b47996f0' visibility='default' filepath='include/sound/pcm.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hw_params' type-id='2b3f1c33' visibility='default' filepath='include/sound/pcm.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='hw_free' type-id='ab756384' visibility='default' filepath='include/sound/pcm.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='prepare' type-id='ab756384' visibility='default' filepath='include/sound/pcm.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='trigger' type-id='898a0783' visibility='default' filepath='include/sound/pcm.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pointer' type-id='e17d6b77' visibility='default' filepath='include/sound/pcm.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_time_info' type-id='e915c45c' visibility='default' filepath='include/sound/pcm.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fill_silence' type-id='4dbb0953' visibility='default' filepath='include/sound/pcm.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='copy_user' type-id='7e4306d7' visibility='default' filepath='include/sound/pcm.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='copy_kernel' type-id='7e4306d7' visibility='default' filepath='include/sound/pcm.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='page' type-id='df9eab8a' visibility='default' filepath='include/sound/pcm.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='mmap' type-id='3d7033ef' visibility='default' filepath='include/sound/pcm.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ack' type-id='ab756384' visibility='default' filepath='include/sound/pcm.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_hw_params' size-in-bits='4864' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='396' column='1' id='6c57d4a8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='masks' type-id='2acd76fe' visibility='default' filepath='include/uapi/sound/asound.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='mres' type-id='66c7c544' visibility='default' filepath='include/uapi/sound/asound.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='intervals' type-id='9625c091' visibility='default' filepath='include/uapi/sound/asound.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3232'>
+          <var-decl name='ires' type-id='3871823f' visibility='default' filepath='include/uapi/sound/asound.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='rmask' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4128'>
+          <var-decl name='cmask' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='info' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4192'>
+          <var-decl name='msbits' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='rate_num' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4256'>
+          <var-decl name='rate_den' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='fifo_size' type-id='df412e35' visibility='default' filepath='include/uapi/sound/asound.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='reserved' type-id='b1888bf8' visibility='default' filepath='include/uapi/sound/asound.h' line='411' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_mask' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='392' column='1' id='7e480899'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bits' type-id='7f84eb57' visibility='default' filepath='include/uapi/sound/asound.h' line='393' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_interval' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='382' column='1' id='d6b43ca8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='openmin' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='openmax' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='integer' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='empty' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='387' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='snd_pcm_uframes_t' type-id='7359adad' filepath='include/uapi/sound/asound.h' line='159' column='1' id='df412e35'/>
+      <class-decl name='snd_pcm_audio_tstamp_config' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='294' column='1' id='cf2e67bb'>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='type_requested' type-id='19c2251e' visibility='default' filepath='include/sound/pcm.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='report_delay' type-id='19c2251e' visibility='default' filepath='include/sound/pcm.h' line='297' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_audio_tstamp_report' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='311' column='1' id='7cd8db07'>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='valid' type-id='19c2251e' visibility='default' filepath='include/sound/pcm.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='actual_type' type-id='19c2251e' visibility='default' filepath='include/sound/pcm.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='accuracy_report' type-id='19c2251e' visibility='default' filepath='include/sound/pcm.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='accuracy' type-id='19c2251e' visibility='default' filepath='include/sound/pcm.h' line='322' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_runtime' size-in-bits='6080' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='342' column='1' id='bc78c060'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='trigger_master' type-id='06b2cd14' visibility='default' filepath='include/sound/pcm.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='trigger_tstamp' type-id='a9c79a1f' visibility='default' filepath='include/sound/pcm.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='trigger_tstamp_latched' type-id='b50a4934' visibility='default' filepath='include/sound/pcm.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='overrange' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='avail_max' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hw_ptr_base' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='hw_ptr_interrupt' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hw_ptr_jiffies' type-id='7359adad' visibility='default' filepath='include/sound/pcm.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='hw_ptr_buffer_jiffies' type-id='7359adad' visibility='default' filepath='include/sound/pcm.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='delay' type-id='721b74e7' visibility='default' filepath='include/sound/pcm.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='hw_ptr_wrap' type-id='91ce1af9' visibility='default' filepath='include/sound/pcm.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='access' type-id='6459083c' visibility='default' filepath='include/sound/pcm.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='format' type-id='67fa9bd5' visibility='default' filepath='include/sound/pcm.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='subformat' type-id='2bc87435' visibility='default' filepath='include/sound/pcm.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='rate' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='channels' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='period_size' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='periods' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='buffer_size' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='min_align' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='byte_align' type-id='b59d7dce' visibility='default' filepath='include/sound/pcm.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='frame_bits' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='sample_bits' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='info' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='rate_num' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rate_den' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='no_period_wakeup' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='tstamp_mode' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='period_step' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='start_threshold' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='stop_threshold' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='silence_threshold' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='silence_size' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='boundary' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='silence_start' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='silence_filled' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='sync' type-id='85b4e5de' visibility='default' filepath='include/sound/pcm.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='status' type-id='25b56694' visibility='default' filepath='include/sound/pcm.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='control' type-id='87a69661' visibility='default' filepath='include/sound/pcm.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='twake' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='sleep' type-id='b5ab048f' visibility='default' filepath='include/sound/pcm.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='tsleep' type-id='b5ab048f' visibility='default' filepath='include/sound/pcm.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='fasync' type-id='5bb9c75d' visibility='default' filepath='include/sound/pcm.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/pcm.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='private_free' type-id='c61a7923' visibility='default' filepath='include/sound/pcm.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='hw' type-id='eacd353c' visibility='default' filepath='include/sound/pcm.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='hw_constraints' type-id='82c7680e' visibility='default' filepath='include/sound/pcm.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='timer_resolution' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5536'>
+          <var-decl name='tstamp_type' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='dma_area' type-id='cf536864' visibility='default' filepath='include/sound/pcm.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='dma_addr' type-id='cf29c9b3' visibility='default' filepath='include/sound/pcm.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='dma_bytes' type-id='b59d7dce' visibility='default' filepath='include/sound/pcm.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='dma_buffer_p' type-id='a02b8cd2' visibility='default' filepath='include/sound/pcm.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='audio_tstamp_config' type-id='cf2e67bb' visibility='default' filepath='include/sound/pcm.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5856'>
+          <var-decl name='audio_tstamp_report' type-id='7cd8db07' visibility='default' filepath='include/sound/pcm.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='driver_tstamp' type-id='a9c79a1f' visibility='default' filepath='include/sound/pcm.h' line='421' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='snd_pcm_sframes_t' type-id='bd54fe1a' filepath='include/uapi/sound/asound.h' line='160' column='1' id='721b74e7'/>
+      <typedef-decl name='snd_pcm_access_t' type-id='95e97e5e' filepath='include/uapi/sound/asound.h' line='184' column='1' id='6459083c'/>
+      <typedef-decl name='snd_pcm_format_t' type-id='95e97e5e' filepath='include/uapi/sound/asound.h' line='192' column='1' id='67fa9bd5'/>
+      <typedef-decl name='snd_pcm_subformat_t' type-id='95e97e5e' filepath='include/uapi/sound/asound.h' line='275' column='1' id='2bc87435'/>
+      <class-decl name='snd_pcm_mmap_status' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='477' column='1' id='6ae96bbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='33158de9' visibility='default' filepath='include/uapi/sound/asound.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pad1' type-id='95e97e5e' visibility='default' filepath='include/uapi/sound/asound.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hw_ptr' type-id='df412e35' visibility='default' filepath='include/uapi/sound/asound.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tstamp' type-id='a9c79a1f' visibility='default' filepath='include/uapi/sound/asound.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='suspended_state' type-id='33158de9' visibility='default' filepath='include/uapi/sound/asound.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='audio_tstamp' type-id='a9c79a1f' visibility='default' filepath='include/uapi/sound/asound.h' line='483' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='snd_pcm_state_t' type-id='95e97e5e' filepath='include/uapi/sound/asound.h' line='306' column='1' id='33158de9'/>
+      <class-decl name='snd_pcm_mmap_control' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='486' column='1' id='3a3e1b69'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='appl_ptr' type-id='df412e35' visibility='default' filepath='include/uapi/sound/asound.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='avail_min' type-id='df412e35' visibility='default' filepath='include/uapi/sound/asound.h' line='488' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_hardware' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='31' column='1' id='eacd353c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='info' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='formats' type-id='91ce1af9' visibility='default' filepath='include/sound/pcm.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rates' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rate_min' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rate_max' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='channels_min' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='channels_max' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='buffer_bytes_max' type-id='b59d7dce' visibility='default' filepath='include/sound/pcm.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='period_bytes_min' type-id='b59d7dce' visibility='default' filepath='include/sound/pcm.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='period_bytes_max' type-id='b59d7dce' visibility='default' filepath='include/sound/pcm.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='periods_min' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='periods_max' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fifo_size' type-id='b59d7dce' visibility='default' filepath='include/sound/pcm.h' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_hw_constraints' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='236' column='1' id='82c7680e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='masks' type-id='2acd76fe' visibility='default' filepath='include/sound/pcm.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='intervals' type-id='9625c091' visibility='default' filepath='include/sound/pcm.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='rules_num' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='rules_all' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='rules' type-id='3cc81bea' visibility='default' filepath='include/sound/pcm.h' line='243' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_hw_rule' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='227' column='1' id='015799ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cond' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='var' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='deps' type-id='2020bac4' visibility='default' filepath='include/sound/pcm.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='func' type-id='58d3b2a5' visibility='default' filepath='include/sound/pcm.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/sound/pcm.h' line='233' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='snd_pcm_hw_rule_func_t' type-id='657a5cf1' filepath='include/sound/pcm.h' line='224' column='1' id='58d3b2a5'/>
+      <class-decl name='snd_pcm_group' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='429' column='1' id='5e60e97f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/sound/pcm.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/sound/pcm.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='substreams' type-id='72f469ec' visibility='default' filepath='include/sound/pcm.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refs' type-id='64615833' visibility='default' filepath='include/sound/pcm.h' line='433' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='snd_pcm_sync_id' size-in-bits='128' visibility='default' filepath='include/uapi/sound/asound.h' line='324' column='1' id='85b4e5de'>
+        <data-member access='private'>
+          <var-decl name='id' type-id='92a46553' visibility='default' filepath='include/uapi/sound/asound.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='id16' type-id='ff13edc1' visibility='default' filepath='include/uapi/sound/asound.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='id32' type-id='49580a63' visibility='default' filepath='include/uapi/sound/asound.h' line='327' column='1'/>
+        </data-member>
+      </union-decl>
+      <qualified-type-def type-id='73803d48' const='yes' id='71bae7c7'/>
+      <pointer-type-def type-id='71bae7c7' size-in-bits='64' id='f63b1a17'/>
+      <pointer-type-def type-id='5ec4fc8d' size-in-bits='64' id='657a5cf1'/>
+      <pointer-type-def type-id='7d4ff292' size-in-bits='64' id='ab756384'/>
+      <pointer-type-def type-id='49a390c7' size-in-bits='64' id='898a0783'/>
+      <pointer-type-def type-id='289e9467' size-in-bits='64' id='4dbb0953'/>
+      <pointer-type-def type-id='0d01392b' size-in-bits='64' id='7e4306d7'/>
+      <pointer-type-def type-id='f8f2633f' size-in-bits='64' id='2b3f1c33'/>
+      <pointer-type-def type-id='d843d992' size-in-bits='64' id='e915c45c'/>
+      <pointer-type-def type-id='5786af66' size-in-bits='64' id='b47996f0'/>
+      <pointer-type-def type-id='024a8f8b' size-in-bits='64' id='3d7033ef'/>
+      <pointer-type-def type-id='93db4230' size-in-bits='64' id='df9eab8a'/>
+      <pointer-type-def type-id='c5addfb4' size-in-bits='64' id='a02b8cd2'/>
+      <pointer-type-def type-id='8755a6ff' size-in-bits='64' id='7a5054b7'/>
+      <pointer-type-def type-id='76f8f8bb' size-in-bits='64' id='4c9f335b'/>
+      <pointer-type-def type-id='cf2e67bb' size-in-bits='64' id='fbaba52b'/>
+      <pointer-type-def type-id='7cd8db07' size-in-bits='64' id='730ae11f'/>
+      <pointer-type-def type-id='5e60e97f' size-in-bits='64' id='8042a887'/>
+      <pointer-type-def type-id='6c57d4a8' size-in-bits='64' id='363a995e'/>
+      <pointer-type-def type-id='015799ac' size-in-bits='64' id='3cc81bea'/>
+      <pointer-type-def type-id='3a3e1b69' size-in-bits='64' id='87a69661'/>
+      <pointer-type-def type-id='6ae96bbe' size-in-bits='64' id='25b56694'/>
+      <pointer-type-def type-id='bc78c060' size-in-bits='64' id='17a05af6'/>
+      <pointer-type-def type-id='5d633b6b' size-in-bits='64' id='e5ffb4bb'/>
+      <pointer-type-def type-id='362eec9e' size-in-bits='64' id='06b2cd14'/>
+      <pointer-type-def type-id='73595e52' size-in-bits='64' id='6ee1a870'/>
+      <pointer-type-def type-id='a9c79a1f' size-in-bits='64' id='3d83ba87'/>
+      <pointer-type-def type-id='747e7623' size-in-bits='64' id='e17d6b77'/>
+      <pointer-type-def type-id='9f77c6d4' size-in-bits='64' id='182096ce'/>
+      <pointer-type-def type-id='2c85e41f' size-in-bits='64' id='c61a7923'/>
+      <pointer-type-def type-id='130ae6d1' size-in-bits='64' id='897d1b6d'/>
+      <function-decl name='snd_pcm_set_ops' mangled-name='snd_pcm_set_ops' filepath='include/sound/pcm.h' line='1055' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_set_ops'>
+        <parameter type-id='4c9f335b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f63b1a17'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_pcm_lib_preallocate_pages_for_all' mangled-name='snd_pcm_lib_preallocate_pages_for_all' filepath='include/sound/pcm.h' line='1184' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_lib_preallocate_pages_for_all'>
+        <parameter type-id='4c9f335b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_pcm_period_elapsed' mangled-name='snd_pcm_period_elapsed' filepath='include/sound/pcm.h' line='1060' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_period_elapsed'>
+        <parameter type-id='06b2cd14'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_pcm_limit_hw_rates' mangled-name='snd_pcm_limit_hw_rates' filepath='include/sound/pcm.h' line='1121' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_limit_hw_rates'>
+        <parameter type-id='17a05af6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='5ec4fc8d'>
+        <parameter type-id='363a995e'/>
+        <parameter type-id='3cc81bea'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7d4ff292'>
+        <parameter type-id='06b2cd14'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='49a390c7'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='289e9467'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0d01392b'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8f2633f'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='363a995e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d843d992'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='3d83ba87'/>
+        <parameter type-id='3d83ba87'/>
+        <parameter type-id='fbaba52b'/>
+        <parameter type-id='730ae11f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5786af66'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='024a8f8b'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='93db4230'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='02f11ed4'/>
+      </function-type>
+      <function-type size-in-bits='64' id='747e7623'>
+        <parameter type-id='06b2cd14'/>
+        <return type-id='df412e35'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9f77c6d4'>
+        <parameter type-id='4c9f335b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2c85e41f'>
+        <parameter type-id='17a05af6'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='130ae6d1'>
+        <parameter type-id='06b2cd14'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='73fb632a' size-in-bits='64' id='5553210f'/>
+      <pointer-type-def type-id='180e16b0' size-in-bits='64' id='e79cb28f'/>
+      <pointer-type-def type-id='db992ec7' size-in-bits='64' id='e149b058'/>
+      <array-type-def dimensions='1' type-id='9cd807f4' size-in-bits='infinite' id='bfd02128'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='pm_qos_request' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='43' column='1' id='cd6fc142'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='e3a91a7c' visibility='default' filepath='include/linux/pm_qos.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pm_qos_class' type-id='95e97e5e' visibility='default' filepath='include/linux/pm_qos.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/pm_qos.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_ctl_elem_id' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='885' column='1' id='abbbeccc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='numid' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='iface' type-id='4143fc17' visibility='default' filepath='include/uapi/sound/asound.h' line='887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='device' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='subdevice' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='4ff588ae' visibility='default' filepath='include/uapi/sound/asound.h' line='890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='891' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__7' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/sound/control.h' line='61' column='1' id='e3dd1f94'>
+        <data-member access='private'>
+          <var-decl name='c' type-id='bf7b4ec3' visibility='default' filepath='include/sound/control.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p' type-id='5b2fd8e8' visibility='default' filepath='include/sound/control.h' line='63' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='4baf5c00' size-in-bits='64' id='56fe8aea'/>
+      <pointer-type-def type-id='ba5ca324' size-in-bits='64' id='bf7b4ec3'/>
+      <class-decl name='snd_kcontrol_volatile' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/sound/control.h' line='49' column='1' id='9cd807f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='ed27ccc9' visibility='default' filepath='include/sound/control.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='access' type-id='f0981eeb' visibility='default' filepath='include/sound/control.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='snd_ctl_elem_iface_t' type-id='95e97e5e' filepath='include/uapi/sound/asound.h' line='849' column='1' id='4143fc17'/>
+      <typedef-decl name='snd_kcontrol_get_t' type-id='84147814' filepath='include/sound/control.h' line='18' column='1' id='73fb632a'/>
+      <typedef-decl name='snd_kcontrol_info_t' type-id='fa75c86d' filepath='include/sound/control.h' line='17' column='1' id='180e16b0'/>
+      <typedef-decl name='snd_kcontrol_put_t' type-id='84147814' filepath='include/sound/control.h' line='19' column='1' id='db992ec7'/>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='352' id='4ff588ae'>
+        <subrange length='44' type-id='7ff19f0f' id='cf8ba455'/>
+      </array-type-def>
+      <pointer-type-def type-id='7c055541' size-in-bits='64' id='ed27ccc9'/>
+      <typedef-decl name='snd_kcontrol_tlv_rw_t' type-id='54d4fbda' filepath='include/sound/control.h' line='20' column='1' id='ba5ca324'/>
+      <class-decl name='snd_ctl_file' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/sound/control.h' line='89' column='1' id='7c055541'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/control.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='card' type-id='52704eb7' visibility='default' filepath='include/sound/control.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pid' type-id='b94e5398' visibility='default' filepath='include/sound/control.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='preferred_subdevice' type-id='e4266c7e' visibility='default' filepath='include/sound/control.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='change_sleep' type-id='b5ab048f' visibility='default' filepath='include/sound/control.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='read_lock' type-id='fb4018a0' visibility='default' filepath='include/sound/control.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fasync' type-id='5bb9c75d' visibility='default' filepath='include/sound/control.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='subscribed' type-id='95e97e5e' visibility='default' filepath='include/sound/control.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='events' type-id='72f469ec' visibility='default' filepath='include/sound/control.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/gadget/function/f_midi.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='640' id='aa5ff375'>
+        <subrange length='80' type-id='7ff19f0f' id='b4129fbd'/>
+      </array-type-def>
+      <class-decl name='snd_info_entry' is-struct='yes' visibility='default' is-declaration-only='yes' id='48ad5fc6'/>
+      <class-decl name='snd_shutdown_f_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='30b9286d'/>
+      <class-decl name='snd_card' size-in-bits='20288' is-struct='yes' visibility='default' filepath='include/sound/core.h' line='79' column='1' id='5ef8814f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='number' type-id='95e97e5e' visibility='default' filepath='include/sound/core.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='ac1fa8c0' visibility='default' filepath='include/sound/core.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='driver' type-id='ac1fa8c0' visibility='default' filepath='include/sound/core.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='shortname' type-id='16dc656a' visibility='default' filepath='include/sound/core.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='longname' type-id='aa5ff375' visibility='default' filepath='include/sound/core.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='irq_descr' type-id='16dc656a' visibility='default' filepath='include/sound/core.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='mixername' type-id='aa5ff375' visibility='default' filepath='include/sound/core.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='components' type-id='e3204322' visibility='default' filepath='include/sound/core.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/sound/core.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/core.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='private_free' type-id='fde42bf2' visibility='default' filepath='include/sound/core.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='devices' type-id='72f469ec' visibility='default' filepath='include/sound/core.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='ctl_dev' type-id='66e487eb' visibility='default' filepath='include/sound/core.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='last_numid' type-id='f0981eeb' visibility='default' filepath='include/sound/core.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='controls_rwsem' type-id='f19fdb93' visibility='default' filepath='include/sound/core.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='ctl_files_rwlock' type-id='ac16795b' visibility='default' filepath='include/sound/core.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='controls_count' type-id='95e97e5e' visibility='default' filepath='include/sound/core.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11360'>
+          <var-decl name='user_ctl_count' type-id='95e97e5e' visibility='default' filepath='include/sound/core.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='controls' type-id='72f469ec' visibility='default' filepath='include/sound/core.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='ctl_files' type-id='72f469ec' visibility='default' filepath='include/sound/core.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='proc_root' type-id='b9608bfc' visibility='default' filepath='include/sound/core.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='proc_root_link' type-id='d077e928' visibility='default' filepath='include/sound/core.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='files_list' type-id='72f469ec' visibility='default' filepath='include/sound/core.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='s_f_ops' type-id='df5f3f5d' visibility='default' filepath='include/sound/core.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='files_lock' type-id='fb4018a0' visibility='default' filepath='include/sound/core.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12000'>
+          <var-decl name='shutdown' type-id='95e97e5e' visibility='default' filepath='include/sound/core.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='release_completion' type-id='389faaf7' visibility='default' filepath='include/sound/core.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/core.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='card_dev' type-id='66e487eb' visibility='default' filepath='include/sound/core.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19520'>
+          <var-decl name='dev_groups' type-id='db1b7234' visibility='default' filepath='include/sound/core.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19776'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/sound/core.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='remove_sleep' type-id='b5ab048f' visibility='default' filepath='include/sound/core.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='power_state' type-id='f0981eeb' visibility='default' filepath='include/sound/core.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20096'>
+          <var-decl name='power_sleep' type-id='b5ab048f' visibility='default' filepath='include/sound/core.h' line='124' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_device_type' filepath='include/sound/core.h' line='37' column='1' id='43cb465b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SNDRV_DEV_LOWLEVEL' value='0'/>
+        <enumerator name='SNDRV_DEV_INFO' value='1'/>
+        <enumerator name='SNDRV_DEV_BUS' value='2'/>
+        <enumerator name='SNDRV_DEV_CODEC' value='3'/>
+        <enumerator name='SNDRV_DEV_PCM' value='4'/>
+        <enumerator name='SNDRV_DEV_COMPRESS' value='5'/>
+        <enumerator name='SNDRV_DEV_RAWMIDI' value='6'/>
+        <enumerator name='SNDRV_DEV_TIMER' value='7'/>
+        <enumerator name='SNDRV_DEV_SEQUENCER' value='8'/>
+        <enumerator name='SNDRV_DEV_HWDEP' value='9'/>
+        <enumerator name='SNDRV_DEV_JACK' value='10'/>
+        <enumerator name='SNDRV_DEV_CONTROL' value='11'/>
+      </enum-decl>
+      <class-decl name='snd_device_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/sound/core.h' line='60' column='1' id='8a1bdab0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_free' type-id='e23829bd' visibility='default' filepath='include/sound/core.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev_register' type-id='e23829bd' visibility='default' filepath='include/sound/core.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev_disconnect' type-id='e23829bd' visibility='default' filepath='include/sound/core.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_device' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/sound/core.h' line='66' column='1' id='ced794e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/core.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='card' type-id='52704eb7' visibility='default' filepath='include/sound/core.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='state' type-id='9c857434' visibility='default' filepath='include/sound/core.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='type' type-id='43cb465b' visibility='default' filepath='include/sound/core.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='device_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/core.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ops' type-id='f6020a16' visibility='default' filepath='include/sound/core.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_device_state' filepath='include/sound/core.h' line='52' column='1' id='9c857434'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SNDRV_DEV_BUILD' value='0'/>
+        <enumerator name='SNDRV_DEV_REGISTERED' value='1'/>
+        <enumerator name='SNDRV_DEV_DISCONNECTED' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='4b6b0e29' size-in-bits='64' id='e23829bd'/>
+      <pointer-type-def type-id='5ef8814f' size-in-bits='64' id='52704eb7'/>
+      <pointer-type-def type-id='52704eb7' size-in-bits='64' id='63cbc127'/>
+      <pointer-type-def type-id='ced794e3' size-in-bits='64' id='5c745bb3'/>
+      <pointer-type-def type-id='8a1bdab0' size-in-bits='64' id='f6020a16'/>
+      <pointer-type-def type-id='48ad5fc6' size-in-bits='64' id='b9608bfc'/>
+      <pointer-type-def type-id='30b9286d' size-in-bits='64' id='df5f3f5d'/>
+      <pointer-type-def type-id='593d8168' size-in-bits='64' id='fde42bf2'/>
+      <function-decl name='device_destroy' mangled-name='device_destroy' filepath='include/linux/device.h' line='1661' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_destroy'>
+        <parameter type-id='67aca04f'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_card_new' mangled-name='snd_card_new' filepath='include/sound/core.h' line='222' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_card_new'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='2730d015'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='63cbc127'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_device_new' mangled-name='snd_device_new' filepath='include/sound/core.h' line='257' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_device_new'>
+        <parameter type-id='52704eb7'/>
+        <parameter type-id='43cb465b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f6020a16'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_component_add' mangled-name='snd_component_add' filepath='include/sound/core.h' line='235' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_component_add'>
+        <parameter type-id='52704eb7'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_card_register' mangled-name='snd_card_register' filepath='include/sound/core.h' line='231' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_card_register'>
+        <parameter type-id='52704eb7'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_copy_descriptors' mangled-name='usb_copy_descriptors' filepath='include/linux/usb/gadget.h' line='797' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_copy_descriptors'>
+        <parameter type-id='f363a725'/>
+        <return type-id='f363a725'/>
+      </function-decl>
+      <function-decl name='snd_card_free' mangled-name='snd_card_free' filepath='include/sound/core.h' line='228' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_card_free'>
+        <parameter type-id='52704eb7'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrndup' mangled-name='kstrndup' filepath='include/linux/string.h' line='184' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrndup'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='kstrtouint' mangled-name='kstrtouint' filepath='include/linux/kernel.h' line='403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtouint'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='4b6b0e29'>
+        <parameter type-id='5c745bb3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='593d8168'>
+        <parameter type-id='52704eb7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/gadget/function/f_ncm.c' language='LANG_C89'>
+      <enum-decl name='hrtimer_mode' filepath='include/linux/hrtimer.h' line='39' column='1' id='88326653'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HRTIMER_MODE_ABS' value='0'/>
+        <enumerator name='HRTIMER_MODE_REL' value='1'/>
+        <enumerator name='HRTIMER_MODE_PINNED' value='2'/>
+        <enumerator name='HRTIMER_MODE_SOFT' value='4'/>
+        <enumerator name='HRTIMER_MODE_HARD' value='8'/>
+        <enumerator name='HRTIMER_MODE_ABS_PINNED' value='2'/>
+        <enumerator name='HRTIMER_MODE_REL_PINNED' value='3'/>
+        <enumerator name='HRTIMER_MODE_ABS_SOFT' value='4'/>
+        <enumerator name='HRTIMER_MODE_REL_SOFT' value='5'/>
+        <enumerator name='HRTIMER_MODE_ABS_PINNED_SOFT' value='6'/>
+        <enumerator name='HRTIMER_MODE_REL_PINNED_SOFT' value='7'/>
+        <enumerator name='HRTIMER_MODE_ABS_HARD' value='8'/>
+        <enumerator name='HRTIMER_MODE_REL_HARD' value='9'/>
+        <enumerator name='HRTIMER_MODE_ABS_PINNED_HARD' value='10'/>
+        <enumerator name='HRTIMER_MODE_REL_PINNED_HARD' value='11'/>
+      </enum-decl>
+      <pointer-type-def type-id='5260af22' size-in-bits='64' id='b6338998'/>
+      <function-decl name='usb_os_desc_prepare_interf_dir' mangled-name='usb_os_desc_prepare_interf_dir' filepath='drivers/usb/gadget/configfs.h' line='9' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_os_desc_prepare_interf_dir'>
+        <parameter type-id='97aff454'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b6338998'/>
+        <parameter type-id='9b23c9ad'/>
+        <parameter type-id='2730d015'/>
+        <return type-id='97aff454'/>
+      </function-decl>
+      <function-decl name='usb_ep_alloc_request' mangled-name='usb_ep_alloc_request' filepath='include/linux/usb/gadget.h' line='248' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_alloc_request'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='1a494567'/>
+      </function-decl>
+      <function-decl name='hrtimer_init' mangled-name='hrtimer_init' filepath='include/linux/hrtimer.h' line='378' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hrtimer_init'>
+        <parameter type-id='08c8d0fa'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='88326653'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_ep_free_request' mangled-name='usb_ep_free_request' filepath='include/linux/usb/gadget.h' line='249' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_free_request'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='1a494567'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='hrtimer_cancel' mangled-name='hrtimer_cancel' filepath='include/linux/hrtimer.h' line='427' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hrtimer_cancel'>
+        <parameter type-id='08c8d0fa'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_ep_dequeue' mangled-name='usb_ep_dequeue' filepath='include/linux/usb/gadget.h' line='251' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_dequeue'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='1a494567'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hrtimer_start_range_ns' mangled-name='hrtimer_start_range_ns' filepath='include/linux/hrtimer.h' line='410' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hrtimer_start_range_ns'>
+        <parameter type-id='08c8d0fa'/>
+        <parameter type-id='1eb56b1e'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='88326653'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='hrtimer_try_to_cancel' mangled-name='hrtimer_try_to_cancel' filepath='include/linux/hrtimer.h' line='428' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hrtimer_try_to_cancel'>
+        <parameter type-id='08c8d0fa'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtou8' mangled-name='kstrtou8' filepath='include/linux/kernel.h' line='428' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtou8'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='cf536864'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/gadget/function/f_serial.c' language='LANG_C89'>
+      <function-decl name='usb_string_id' mangled-name='usb_string_id' filepath='include/linux/usb/composite.h' line='519' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_string_id'>
+        <parameter type-id='2a895c01'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/gadget/function/rndis.c' language='LANG_C89'>
+      <function-decl name='dev_get_stats' mangled-name='dev_get_stats' filepath='include/linux/netdevice.h' line='4288' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_get_stats'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='bd3860fe'/>
+        <return type-id='bd3860fe'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/gadget/udc/core.c' language='LANG_C89'>
+      <function-decl name='usb_ep_clear_halt' mangled-name='usb_ep_clear_halt' filepath='drivers/usb/gadget/udc/core.c' line='367' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_clear_halt'>
+        <parameter type-id='63a08bf7' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='367' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_ep_set_wedge' mangled-name='usb_ep_set_wedge' filepath='drivers/usb/gadget/udc/core.c' line='390' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_set_wedge'>
+        <parameter type-id='63a08bf7' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='390' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_ep_fifo_status' mangled-name='usb_ep_fifo_status' filepath='drivers/usb/gadget/udc/core.c' line='422' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_fifo_status'>
+        <parameter type-id='63a08bf7' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='422' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_ep_fifo_flush' mangled-name='usb_ep_fifo_flush' filepath='drivers/usb/gadget/udc/core.c' line='448' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_fifo_flush'>
+        <parameter type-id='63a08bf7' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='448' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_gadget_wakeup' mangled-name='usb_gadget_wakeup' filepath='drivers/usb/gadget/udc/core.c' line='491' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_wakeup'>
+        <parameter type-id='49a58c0d' name='gadget' filepath='drivers/usb/gadget/udc/core.c' line='491' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_gadget_vbus_connect' mangled-name='usb_gadget_vbus_connect' filepath='drivers/usb/gadget/udc/core.c' line='577' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_vbus_connect'>
+        <parameter type-id='49a58c0d' name='gadget' filepath='drivers/usb/gadget/udc/core.c' line='577' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_gadget_vbus_disconnect' mangled-name='usb_gadget_vbus_disconnect' filepath='drivers/usb/gadget/udc/core.c' line='638' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_vbus_disconnect'>
+        <parameter type-id='49a58c0d' name='gadget' filepath='drivers/usb/gadget/udc/core.c' line='638' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_get_gadget_udc_name' mangled-name='usb_get_gadget_udc_name' filepath='drivers/usb/gadget/udc/core.c' line='1260' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_get_gadget_udc_name'>
+        <return type-id='26a90f95'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/gadget/udc/dummy_hcd.c' language='LANG_C89'>
+      <class-decl name='usb_otg_caps' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/linux/usb/otg.h' line='53' column='1' id='e994232a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='otg_rev' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/otg.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='hnp_support' type-id='b50a4934' visibility='default' filepath='include/linux/usb/otg.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='srp_support' type-id='b50a4934' visibility='default' filepath='include/linux/usb/otg.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='adp_support' type-id='b50a4934' visibility='default' filepath='include/linux/usb/otg.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_phy' is-struct='yes' visibility='default' is-declaration-only='yes' id='f7de214a'/>
+      <class-decl name='usb_udc' size-in-bits='7680' is-struct='yes' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='36' column='1' id='1ee0d0f0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver' type-id='9762ede1' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gadget' type-id='49a58c0d' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='vbus' type-id='b50a4934' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ep' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='223' column='1' id='8005701f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/gadget.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/gadget.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='ea2a1f7d' visibility='default' filepath='include/linux/usb/gadget.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ep_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/gadget.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='caps' type-id='14d94f61' visibility='default' filepath='include/linux/usb/gadget.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='claimed' type-id='b50a4934' visibility='default' filepath='include/linux/usb/gadget.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='enabled' type-id='b50a4934' visibility='default' filepath='include/linux/usb/gadget.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='maxpacket' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='maxpacket_limit' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='max_streams' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='mult' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='maxburst' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='424'>
+          <var-decl name='address' type-id='f9b06939' visibility='default' filepath='include/linux/usb/gadget.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='desc' type-id='428819c0' visibility='default' filepath='include/linux/usb/gadget.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='comp_desc' type-id='c6228d99' visibility='default' filepath='include/linux/usb/gadget.h' line='239' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ep_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='133' column='1' id='e094094c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enable' type-id='4426dbe0' visibility='default' filepath='include/linux/usb/gadget.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable' type-id='99f649a9' visibility='default' filepath='include/linux/usb/gadget.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dispose' type-id='b1c1788a' visibility='default' filepath='include/linux/usb/gadget.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='alloc_request' type-id='37593c93' visibility='default' filepath='include/linux/usb/gadget.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='free_request' type-id='2dfafd2c' visibility='default' filepath='include/linux/usb/gadget.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='queue' type-id='bbe8d894' visibility='default' filepath='include/linux/usb/gadget.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dequeue' type-id='487818e7' visibility='default' filepath='include/linux/usb/gadget.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_halt' type-id='807f0070' visibility='default' filepath='include/linux/usb/gadget.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_wedge' type-id='99f649a9' visibility='default' filepath='include/linux/usb/gadget.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fifo_status' type-id='99f649a9' visibility='default' filepath='include/linux/usb/gadget.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fifo_flush' type-id='b1c1788a' visibility='default' filepath='include/linux/usb/gadget.h' line='151' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_request' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='98' column='1' id='43806adf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/gadget.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='length' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dma' type-id='cf29c9b3' visibility='default' filepath='include/linux/usb/gadget.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sg' type-id='bf3ef905' visibility='default' filepath='include/linux/usb/gadget.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_sgs' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='num_mapped_sgs' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='stream_id' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='no_interrupt' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='zero' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='short_not_ok' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='dma_mapped' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='complete' type-id='2dfafd2c' visibility='default' filepath='include/linux/usb/gadget.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='context' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/gadget.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/gadget.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='frame_number' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='status' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/gadget.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='actual' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='121' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ep_caps' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='163' column='1' id='14d94f61'>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='type_control' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='type_iso' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='type_bulk' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='type_int' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='dir_in' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='dir_out' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_gadget' size-in-bits='8768' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='397' column='1' id='54f638e7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/usb/gadget.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='udc' type-id='d872b366' visibility='default' filepath='include/linux/usb/gadget.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='1d94d806' visibility='default' filepath='include/linux/usb/gadget.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ep0' type-id='63a08bf7' visibility='default' filepath='include/linux/usb/gadget.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ep_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/gadget.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='speed' type-id='4e532009' visibility='default' filepath='include/linux/usb/gadget.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_speed' type-id='4e532009' visibility='default' filepath='include/linux/usb/gadget.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='state' type-id='901a91cb' visibility='default' filepath='include/linux/usb/gadget.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/gadget.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/usb/gadget.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='isoch_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8288'>
+          <var-decl name='out_epnum' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='in_epnum' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8352'>
+          <var-decl name='mA' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='otg_caps' type-id='451a0588' visibility='default' filepath='include/linux/usb/gadget.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='sg_supported' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='is_otg' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='is_a_peripheral' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='b_hnp_enable' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='a_hnp_support' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='a_alt_hnp_support' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='hnp_polling_support' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='host_request_flag' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='quirk_ep_out_aligned_size' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='quirk_altset_not_supp' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='quirk_stall_not_supp' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='quirk_zlp_not_supp' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='quirk_avoids_skb_reserve' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='is_selfpowered' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='deactivated' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='connected' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='lpm_capable' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/gadget.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='437' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_gadget_ops' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='308' column='1' id='83cac475'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_frame' type-id='42262596' visibility='default' filepath='include/linux/usb/gadget.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wakeup' type-id='42262596' visibility='default' filepath='include/linux/usb/gadget.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_selfpowered' type-id='2b8a73bd' visibility='default' filepath='include/linux/usb/gadget.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vbus_session' type-id='2b8a73bd' visibility='default' filepath='include/linux/usb/gadget.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vbus_draw' type-id='86ec8614' visibility='default' filepath='include/linux/usb/gadget.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pullup' type-id='2b8a73bd' visibility='default' filepath='include/linux/usb/gadget.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ioctl' type-id='11f75c44' visibility='default' filepath='include/linux/usb/gadget.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_config_params' type-id='b90a2617' visibility='default' filepath='include/linux/usb/gadget.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='udc_start' type-id='3e610606' visibility='default' filepath='include/linux/usb/gadget.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='udc_stop' type-id='42262596' visibility='default' filepath='include/linux/usb/gadget.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='udc_set_speed' type-id='20950ec7' visibility='default' filepath='include/linux/usb/gadget.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='match_ep' type-id='9f35b348' visibility='default' filepath='include/linux/usb/gadget.h' line='323' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_dcd_config_params' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='290' column='1' id='5c44a483'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bU1devExitLat' type-id='8f048e17' visibility='default' filepath='include/linux/usb/gadget.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bU2DevExitLat' type-id='23119536' visibility='default' filepath='include/linux/usb/gadget.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='besl_baseline' type-id='8f048e17' visibility='default' filepath='include/linux/usb/gadget.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='besl_deep' type-id='8f048e17' visibility='default' filepath='include/linux/usb/gadget.h' line='296' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_gadget_driver' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='680' column='1' id='b718d3f9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='function' type-id='26a90f95' visibility='default' filepath='include/linux/usb/gadget.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_speed' type-id='4e532009' visibility='default' filepath='include/linux/usb/gadget.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bind' type-id='3e610606' visibility='default' filepath='include/linux/usb/gadget.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unbind' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='setup' type-id='54a734c8' visibility='default' filepath='include/linux/usb/gadget.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='disconnect' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='suspend' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='resume' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='reset' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/usb/gadget.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='udc_name' type-id='26a90f95' visibility='default' filepath='include/linux/usb/gadget.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='pending' type-id='72f469ec' visibility='default' filepath='include/linux/usb/gadget.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='match_existing_only' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='698' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ctrlrequest' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='213' column='1' id='fd7e7994'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bRequestType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bRequest' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='wValue' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wIndex' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='wLength' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='218' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='fd7e7994' const='yes' id='946203ef'/>
+      <pointer-type-def type-id='946203ef' size-in-bits='64' id='5b4bef1f'/>
+      <qualified-type-def type-id='2b1e6e59' const='yes' id='e03e976a'/>
+      <pointer-type-def type-id='e03e976a' size-in-bits='64' id='428819c0'/>
+      <qualified-type-def type-id='e094094c' const='yes' id='090a4485'/>
+      <pointer-type-def type-id='090a4485' size-in-bits='64' id='ea2a1f7d'/>
+      <qualified-type-def type-id='83cac475' const='yes' id='54286388'/>
+      <pointer-type-def type-id='54286388' size-in-bits='64' id='1d94d806'/>
+      <qualified-type-def type-id='1f03d7fe' const='yes' id='1ac45f89'/>
+      <pointer-type-def type-id='1ac45f89' size-in-bits='64' id='c6228d99'/>
+      <pointer-type-def type-id='72e0b98d' size-in-bits='64' id='99f649a9'/>
+      <pointer-type-def type-id='c112c396' size-in-bits='64' id='4426dbe0'/>
+      <pointer-type-def type-id='5f81edee' size-in-bits='64' id='807f0070'/>
+      <pointer-type-def type-id='23420063' size-in-bits='64' id='487818e7'/>
+      <pointer-type-def type-id='f1c2900a' size-in-bits='64' id='bbe8d894'/>
+      <pointer-type-def type-id='90e882dc' size-in-bits='64' id='42262596'/>
+      <pointer-type-def type-id='c70cf626' size-in-bits='64' id='54a734c8'/>
+      <pointer-type-def type-id='b845c559' size-in-bits='64' id='2b8a73bd'/>
+      <pointer-type-def type-id='5f4720b2' size-in-bits='64' id='86ec8614'/>
+      <pointer-type-def type-id='3ba00442' size-in-bits='64' id='11f75c44'/>
+      <pointer-type-def type-id='e7d8509c' size-in-bits='64' id='3e610606'/>
+      <pointer-type-def type-id='5c44a483' size-in-bits='64' id='c23646a3'/>
+      <pointer-type-def type-id='8005701f' size-in-bits='64' id='63a08bf7'/>
+      <pointer-type-def type-id='8684c7e6' size-in-bits='64' id='9f35b348'/>
+      <pointer-type-def type-id='54f638e7' size-in-bits='64' id='49a58c0d'/>
+      <pointer-type-def type-id='b718d3f9' size-in-bits='64' id='9762ede1'/>
+      <pointer-type-def type-id='e994232a' size-in-bits='64' id='451a0588'/>
+      <pointer-type-def type-id='f7de214a' size-in-bits='64' id='ca9354d2'/>
+      <pointer-type-def type-id='43806adf' size-in-bits='64' id='1a494567'/>
+      <pointer-type-def type-id='cd4cfe6f' size-in-bits='64' id='37593c93'/>
+      <pointer-type-def type-id='1f03d7fe' size-in-bits='64' id='dd810384'/>
+      <pointer-type-def type-id='1ee0d0f0' size-in-bits='64' id='d872b366'/>
+      <pointer-type-def type-id='e72900f8' size-in-bits='64' id='b1c1788a'/>
+      <pointer-type-def type-id='192c003a' size-in-bits='64' id='2dfafd2c'/>
+      <pointer-type-def type-id='d6bdcb4d' size-in-bits='64' id='a915fb99'/>
+      <pointer-type-def type-id='f089a11b' size-in-bits='64' id='20950ec7'/>
+      <pointer-type-def type-id='f5213d9b' size-in-bits='64' id='b90a2617'/>
+      <function-decl name='usb_hcd_poll_rh_status' mangled-name='usb_hcd_poll_rh_status' filepath='include/linux/usb/hcd.h' line='517' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_poll_rh_status'>
+        <parameter type-id='fc4f83c1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ktime_get_ts64' mangled-name='ktime_get_ts64' filepath='include/linux/timekeeping.h' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get_ts64'>
+        <parameter type-id='4151733d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hcd_link_urb_to_ep' mangled-name='usb_hcd_link_urb_to_ep' filepath='include/linux/usb/hcd.h' line='441' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_link_urb_to_ep'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='ab85b8f2'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_get_dev' mangled-name='usb_get_dev' filepath='include/linux/usb.h' line='740' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_get_dev'>
+        <parameter type-id='25e60cb2'/>
+        <return type-id='25e60cb2'/>
+      </function-decl>
+      <function-decl name='usb_hcd_check_unlink_urb' mangled-name='usb_hcd_check_unlink_urb' filepath='include/linux/usb/hcd.h' line='442' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_check_unlink_urb'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='ab85b8f2'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_hcd_resume_root_hub' mangled-name='usb_hcd_resume_root_hub' filepath='include/linux/usb/hcd.h' line='689' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_resume_root_hub'>
+        <parameter type-id='fc4f83c1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_gadget_giveback_request' mangled-name='usb_gadget_giveback_request' filepath='include/linux/usb/gadget.h' line='864' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_giveback_request'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='1a494567'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_gadget_udc_reset' mangled-name='usb_gadget_udc_reset' filepath='include/linux/usb/gadget.h' line='857' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_udc_reset'>
+        <parameter type-id='49a58c0d'/>
+        <parameter type-id='9762ede1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hcd_unlink_urb_from_ep' mangled-name='usb_hcd_unlink_urb_from_ep' filepath='include/linux/usb/hcd.h' line='444' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_unlink_urb_from_ep'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='ab85b8f2'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hcd_giveback_urb' mangled-name='usb_hcd_giveback_urb' filepath='include/linux/usb/hcd.h' line='448' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_giveback_urb'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='ab85b8f2'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_put_dev' mangled-name='usb_put_dev' filepath='include/linux/usb.h' line='741' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_put_dev'>
+        <parameter type-id='25e60cb2'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_ep_set_maxpacket_limit' mangled-name='usb_ep_set_maxpacket_limit' filepath='include/linux/usb/gadget.h' line='245' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_set_maxpacket_limit'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_add_gadget_udc' mangled-name='usb_add_gadget_udc' filepath='include/linux/usb/gadget.h' line='742' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_add_gadget_udc'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='49a58c0d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_del_gadget_udc' mangled-name='usb_del_gadget_udc' filepath='include/linux/usb/gadget.h' line='743' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_del_gadget_udc'>
+        <parameter type-id='49a58c0d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='platform_device_add_data' mangled-name='platform_device_add_data' filepath='include/linux/platform_device.h' line='182' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_add_data'>
+        <parameter type-id='db362995'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='platform_device_del' mangled-name='platform_device_del' filepath='include/linux/platform_device.h' line='187' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_del'>
+        <parameter type-id='db362995'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='72e0b98d'>
+        <parameter type-id='63a08bf7'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c112c396'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='428819c0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5f81edee'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='23420063'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='1a494567'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f1c2900a'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='1a494567'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='90e882dc'>
+        <parameter type-id='49a58c0d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c70cf626'>
+        <parameter type-id='49a58c0d'/>
+        <parameter type-id='5b4bef1f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b845c559'>
+        <parameter type-id='49a58c0d'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5f4720b2'>
+        <parameter type-id='49a58c0d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3ba00442'>
+        <parameter type-id='49a58c0d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e7d8509c'>
+        <parameter type-id='49a58c0d'/>
+        <parameter type-id='9762ede1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8684c7e6'>
+        <parameter type-id='49a58c0d'/>
+        <parameter type-id='a07d0491'/>
+        <parameter type-id='dd810384'/>
+        <return type-id='63a08bf7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cd4cfe6f'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='1a494567'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e72900f8'>
+        <parameter type-id='63a08bf7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='192c003a'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='1a494567'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d6bdcb4d'>
+        <parameter type-id='49a58c0d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f089a11b'>
+        <parameter type-id='49a58c0d'/>
+        <parameter type-id='4e532009'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f5213d9b'>
+        <parameter type-id='49a58c0d'/>
+        <parameter type-id='c23646a3'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/host/ehci-pci.c' language='LANG_C89'>
+      <qualified-type-def type-id='5c93f9a7' const='yes' id='b86c4e68'/>
+      <pointer-type-def type-id='b86c4e68' size-in-bits='64' id='947f31e6'/>
+      <function-decl name='pci_match_id' mangled-name='pci_match_id' filepath='include/linux/pci.h' line='1400' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_match_id'>
+        <parameter type-id='92fc8aa5'/>
+        <parameter type-id='85196e3f'/>
+        <return type-id='92fc8aa5'/>
+      </function-decl>
+      <function-decl name='usb_hcd_pci_probe' mangled-name='usb_hcd_pci_probe' filepath='include/linux/usb/hcd.h' line='491' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_pci_probe'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='92fc8aa5'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_clear_mwi' mangled-name='pci_clear_mwi' filepath='include/linux/pci.h' line='1189' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_clear_mwi'>
+        <parameter type-id='85196e3f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hcd_pci_remove' mangled-name='usb_hcd_pci_remove' filepath='include/linux/usb/hcd.h' line='493' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_pci_remove'>
+        <parameter type-id='85196e3f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_disabled' mangled-name='usb_disabled' filepath='include/linux/usb.h' line='1330' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_disabled'>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_set_mwi' mangled-name='pci_set_mwi' filepath='include/linux/pci.h' line='1186' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_set_mwi'>
+        <parameter type-id='85196e3f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_amd_quirk_pll_check' mangled-name='usb_amd_quirk_pll_check' filepath='drivers/usb/host/pci-quirks.h' line='12' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_amd_quirk_pll_check'>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='usb_amd_hang_symptom_quirk' mangled-name='usb_amd_hang_symptom_quirk' filepath='drivers/usb/host/pci-quirks.h' line='9' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_amd_hang_symptom_quirk'>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='pci_read_config_byte' mangled-name='pci_read_config_byte' filepath='include/linux/pci.h' line='1103' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_read_config_byte'>
+        <parameter type-id='947f31e6'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='cf536864'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_write_config_byte' mangled-name='pci_write_config_byte' filepath='include/linux/pci.h' line='1106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_write_config_byte'>
+        <parameter type-id='947f31e6'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_set_coherent_mask' mangled-name='dma_set_coherent_mask' filepath='include/linux/dma-mapping.h' line='470' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_set_coherent_mask'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='3a47d82b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_find_capability' mangled-name='pci_find_capability' filepath='include/linux/pci.h' line='1060' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_find_capability'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_read_config_dword' mangled-name='pci_read_config_dword' filepath='include/linux/pci.h' line='1105' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_read_config_dword'>
+        <parameter type-id='947f31e6'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_read_config_word' mangled-name='pci_read_config_word' filepath='include/linux/pci.h' line='1104' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_read_config_word'>
+        <parameter type-id='947f31e6'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='e9e550dd'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_set_wakeup_capable' mangled-name='device_set_wakeup_capable' filepath='include/linux/pm_wakeup.h' line='97' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_set_wakeup_capable'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='8efea9e5' size-in-bits='64' id='e9e550dd'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/host/ehci-platform.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='192' id='6653bb13'>
+        <subrange length='24' type-id='7ff19f0f' id='fdd3342b'/>
+      </array-type-def>
+      <class-decl name='dma_pool' size-in-bits='832' is-struct='yes' visibility='default' filepath='mm/dmapool.c' line='42' column='1' id='2bf33030'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page_list' type-id='72f469ec' visibility='default' filepath='mm/dmapool.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='mm/dmapool.c' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='mm/dmapool.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='mm/dmapool.c' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='allocation' type-id='b59d7dce' visibility='default' filepath='mm/dmapool.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='boundary' type-id='b59d7dce' visibility='default' filepath='mm/dmapool.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='mm/dmapool.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='pools' type-id='72f469ec' visibility='default' filepath='mm/dmapool.c' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gen_pool' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/genalloc.h' line='58' column='1' id='171b0f6c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/genalloc.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='chunks' type-id='72f469ec' visibility='default' filepath='include/linux/genalloc.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_alloc_order' type-id='95e97e5e' visibility='default' filepath='include/linux/genalloc.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='algo' type-id='00278b91' visibility='default' filepath='include/linux/genalloc.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/genalloc.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/genalloc.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_gadget' is-struct='yes' visibility='default' is-declaration-only='yes' id='54f638e6'/>
+      <class-decl name='usb_phy_roothub' is-struct='yes' visibility='default' is-declaration-only='yes' id='ceda742d'/>
+      <array-type-def dimensions='1' type-id='ab33c616' size-in-bits='256' id='9d8055ec'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='usb_hcd' size-in-bits='5632' is-struct='yes' visibility='default' filepath='include/linux/usb/hcd.h' line='82' column='1' id='392af4e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='self' type-id='fa4d7704' visibility='default' filepath='include/linux/usb/hcd.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/usb/hcd.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='product_desc' type-id='80f4b756' visibility='default' filepath='include/linux/usb/hcd.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='speed' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/hcd.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='irq_descr' type-id='6653bb13' visibility='default' filepath='include/linux/usb/hcd.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='rh_timer' type-id='abe41e67' visibility='default' filepath='include/linux/usb/hcd.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='status_urb' type-id='ab85b8f2' visibility='default' filepath='include/linux/usb/hcd.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='wakeup_work' type-id='ef9025d0' visibility='default' filepath='include/linux/usb/hcd.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='died_work' type-id='ef9025d0' visibility='default' filepath='include/linux/usb/hcd.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='driver' type-id='5aa12c86' visibility='default' filepath='include/linux/usb/hcd.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='usb_phy' type-id='ca9354d1' visibility='default' filepath='include/linux/usb/hcd.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='phy_roothub' type-id='7befabdd' visibility='default' filepath='include/linux/usb/hcd.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/usb/hcd.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='dev_policy' type-id='7e6e640d' visibility='default' filepath='include/linux/usb/hcd.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='rh_registered' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='rh_pollable' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='msix_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='msi_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='skip_phy_initialization' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='uses_new_polling' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='wireless' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='has_tt' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='amd_resume_bug' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='can_do_streams' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='tpl_support' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='cant_recv_wakeups' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='regs' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/hcd.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='rsrc_start' type-id='acc63fdf' visibility='default' filepath='include/linux/usb/hcd.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='rsrc_len' type-id='acc63fdf' visibility='default' filepath='include/linux/usb/hcd.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='power_budget' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='high_prio_bh' type-id='63972aea' visibility='default' filepath='include/linux/usb/hcd.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='low_prio_bh' type-id='63972aea' visibility='default' filepath='include/linux/usb/hcd.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='address0_mutex' type-id='e0ea832a' visibility='default' filepath='include/linux/usb/hcd.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='bandwidth_mutex' type-id='e0ea832a' visibility='default' filepath='include/linux/usb/hcd.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='shared_hcd' type-id='fc4f83c1' visibility='default' filepath='include/linux/usb/hcd.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='primary_hcd' type-id='fc4f83c1' visibility='default' filepath='include/linux/usb/hcd.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='pool' type-id='9d8055ec' visibility='default' filepath='include/linux/usb/hcd.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/hcd.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='localmem_pool' type-id='75b9415a' visibility='default' filepath='include/linux/usb/hcd.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='hcd_priv' type-id='c99b5ecd' visibility='default' filepath='include/linux/usb/hcd.h' line='237' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hc_driver' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/linux/usb/hcd.h' line='255' column='1' id='519497e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='80f4b756' visibility='default' filepath='include/linux/usb/hcd.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='product_desc' type-id='80f4b756' visibility='default' filepath='include/linux/usb/hcd.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hcd_priv_size' type-id='b59d7dce' visibility='default' filepath='include/linux/usb/hcd.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='irq' type-id='a4e9cbb0' visibility='default' filepath='include/linux/usb/hcd.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/hcd.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reset' type-id='3d4f6569' visibility='default' filepath='include/linux/usb/hcd.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='start' type-id='3d4f6569' visibility='default' filepath='include/linux/usb/hcd.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pci_suspend' type-id='f49825dc' visibility='default' filepath='include/linux/usb/hcd.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pci_resume' type-id='f49825dc' visibility='default' filepath='include/linux/usb/hcd.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='stop' type-id='2638ad78' visibility='default' filepath='include/linux/usb/hcd.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='shutdown' type-id='2638ad78' visibility='default' filepath='include/linux/usb/hcd.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_frame_number' type-id='3d4f6569' visibility='default' filepath='include/linux/usb/hcd.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='urb_enqueue' type-id='26f734e7' visibility='default' filepath='include/linux/usb/hcd.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='urb_dequeue' type-id='909b5775' visibility='default' filepath='include/linux/usb/hcd.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='map_urb_for_dma' type-id='26f734e7' visibility='default' filepath='include/linux/usb/hcd.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='unmap_urb_for_dma' type-id='da12244f' visibility='default' filepath='include/linux/usb/hcd.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='endpoint_disable' type-id='e1007da7' visibility='default' filepath='include/linux/usb/hcd.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='endpoint_reset' type-id='e1007da7' visibility='default' filepath='include/linux/usb/hcd.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hub_status_data' type-id='34083223' visibility='default' filepath='include/linux/usb/hcd.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hub_control' type-id='82a5e0a9' visibility='default' filepath='include/linux/usb/hcd.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='bus_suspend' type-id='3d4f6569' visibility='default' filepath='include/linux/usb/hcd.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='bus_resume' type-id='3d4f6569' visibility='default' filepath='include/linux/usb/hcd.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='start_port_reset' type-id='52f4f223' visibility='default' filepath='include/linux/usb/hcd.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='get_resuming_ports' type-id='3e34b3ae' visibility='default' filepath='include/linux/usb/hcd.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='relinquish_port' type-id='0d7f0367' visibility='default' filepath='include/linux/usb/hcd.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='port_handed_over' type-id='ef2f6230' visibility='default' filepath='include/linux/usb/hcd.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='clear_tt_buffer_complete' type-id='e1007da7' visibility='default' filepath='include/linux/usb/hcd.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='alloc_dev' type-id='530cb308' visibility='default' filepath='include/linux/usb/hcd.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='free_dev' type-id='b48dadb7' visibility='default' filepath='include/linux/usb/hcd.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='alloc_streams' type-id='c1729c2a' visibility='default' filepath='include/linux/usb/hcd.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='free_streams' type-id='473afbc8' visibility='default' filepath='include/linux/usb/hcd.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='add_endpoint' type-id='2c3372f7' visibility='default' filepath='include/linux/usb/hcd.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='drop_endpoint' type-id='2c3372f7' visibility='default' filepath='include/linux/usb/hcd.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='check_bandwidth' type-id='530cb308' visibility='default' filepath='include/linux/usb/hcd.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='reset_bandwidth' type-id='b48dadb7' visibility='default' filepath='include/linux/usb/hcd.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='address_device' type-id='530cb308' visibility='default' filepath='include/linux/usb/hcd.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='enable_device' type-id='530cb308' visibility='default' filepath='include/linux/usb/hcd.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='update_hub_device' type-id='cf0b24c2' visibility='default' filepath='include/linux/usb/hcd.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='reset_device' type-id='530cb308' visibility='default' filepath='include/linux/usb/hcd.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='update_device' type-id='530cb308' visibility='default' filepath='include/linux/usb/hcd.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='set_usb2_hw_lpm' type-id='8ceda7f7' visibility='default' filepath='include/linux/usb/hcd.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='enable_usb3_lpm_timeout' type-id='280dcd9f' visibility='default' filepath='include/linux/usb/hcd.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='disable_usb3_lpm_timeout' type-id='280dcd9f' visibility='default' filepath='include/linux/usb/hcd.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='find_raw_port_number' type-id='ef2f6230' visibility='default' filepath='include/linux/usb/hcd.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='port_power' type-id='57938551' visibility='default' filepath='include/linux/usb/hcd.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='422' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb3_link_state' filepath='include/uapi/linux/usb/ch9.h' line='1174' column='1' id='cee9c4f2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USB3_LPM_U0' value='0'/>
+        <enumerator name='USB3_LPM_U1' value='1'/>
+        <enumerator name='USB3_LPM_U2' value='2'/>
+        <enumerator name='USB3_LPM_U3' value='3'/>
+      </enum-decl>
+      <class-decl name='usb_phy' size-in-bits='2816' is-struct='yes' visibility='default' filepath='include/linux/usb/phy.h' line='88' column='1' id='f7de2149'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/usb/phy.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='include/linux/usb/phy.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='type' type-id='d95f4827' visibility='default' filepath='include/linux/usb/phy.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_event' type-id='278dd9ca' visibility='default' filepath='include/linux/usb/phy.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='otg' type-id='22be78e8' visibility='default' filepath='include/linux/usb/phy.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='io_dev' type-id='fa0b179b' visibility='default' filepath='include/linux/usb/phy.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='io_ops' type-id='aae1a0f1' visibility='default' filepath='include/linux/usb/phy.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/phy.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='edev' type-id='c0d6fadb' visibility='default' filepath='include/linux/usb/phy.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='id_edev' type-id='c0d6fadb' visibility='default' filepath='include/linux/usb/phy.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vbus_nb' type-id='9b08f7cd' visibility='default' filepath='include/linux/usb/phy.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='id_nb' type-id='9b08f7cd' visibility='default' filepath='include/linux/usb/phy.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='type_nb' type-id='9b08f7cd' visibility='default' filepath='include/linux/usb/phy.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='chg_type' type-id='eba182c8' visibility='default' filepath='include/linux/usb/phy.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='chg_state' type-id='6d659af5' visibility='default' filepath='include/linux/usb/phy.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='chg_cur' type-id='c1a2a792' visibility='default' filepath='include/linux/usb/phy.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='chg_work' type-id='ef9025d0' visibility='default' filepath='include/linux/usb/phy.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='notifier' type-id='dbd58f6e' visibility='default' filepath='include/linux/usb/phy.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='port_status' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/phy.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2064'>
+          <var-decl name='port_change' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/phy.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/linux/usb/phy.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='init' type-id='dd6ccf15' visibility='default' filepath='include/linux/usb/phy.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='shutdown' type-id='6cd1df94' visibility='default' filepath='include/linux/usb/phy.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='set_vbus' type-id='fc1fbe7c' visibility='default' filepath='include/linux/usb/phy.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='set_power' type-id='2d642297' visibility='default' filepath='include/linux/usb/phy.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='set_suspend' type-id='fc1fbe7c' visibility='default' filepath='include/linux/usb/phy.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='set_wakeup' type-id='523228f0' visibility='default' filepath='include/linux/usb/phy.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='notify_connect' type-id='2f4077f3' visibility='default' filepath='include/linux/usb/phy.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='notify_disconnect' type-id='2f4077f3' visibility='default' filepath='include/linux/usb/phy.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='charger_detect' type-id='c4884d33' visibility='default' filepath='include/linux/usb/phy.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb_phy_type' filepath='include/linux/usb/phy.h' line='36' column='1' id='d95f4827'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USB_PHY_TYPE_UNDEFINED' value='0'/>
+        <enumerator name='USB_PHY_TYPE_USB2' value='1'/>
+        <enumerator name='USB_PHY_TYPE_USB3' value='2'/>
+      </enum-decl>
+      <enum-decl name='usb_phy_events' filepath='include/linux/usb/phy.h' line='27' column='1' id='278dd9ca'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USB_EVENT_NONE' value='0'/>
+        <enumerator name='USB_EVENT_VBUS' value='1'/>
+        <enumerator name='USB_EVENT_ID' value='2'/>
+        <enumerator name='USB_EVENT_CHARGER' value='3'/>
+        <enumerator name='USB_EVENT_ENUMERATED' value='4'/>
+      </enum-decl>
+      <class-decl name='usb_otg' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/usb/otg.h' line='16' column='1' id='6e3d524a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='default_a' type-id='f9b06939' visibility='default' filepath='include/linux/usb/otg.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phy' type-id='503ff1ba' visibility='default' filepath='include/linux/usb/otg.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usb_phy' type-id='ca9354d1' visibility='default' filepath='include/linux/usb/otg.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='host' type-id='3ab7d422' visibility='default' filepath='include/linux/usb/otg.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='gadget' type-id='49a58c0c' visibility='default' filepath='include/linux/usb/otg.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state' type-id='4c0c8157' visibility='default' filepath='include/linux/usb/otg.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_host' type-id='40b8ad2b' visibility='default' filepath='include/linux/usb/otg.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_peripheral' type-id='ba1d878d' visibility='default' filepath='include/linux/usb/otg.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_vbus' type-id='c1ee9321' visibility='default' filepath='include/linux/usb/otg.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='start_srp' type-id='988d1520' visibility='default' filepath='include/linux/usb/otg.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='start_hnp' type-id='988d1520' visibility='default' filepath='include/linux/usb/otg.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb_otg_state' filepath='include/linux/usb/phy.h' line='43' column='1' id='4c0c8157'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='OTG_STATE_UNDEFINED' value='0'/>
+        <enumerator name='OTG_STATE_B_IDLE' value='1'/>
+        <enumerator name='OTG_STATE_B_SRP_INIT' value='2'/>
+        <enumerator name='OTG_STATE_B_PERIPHERAL' value='3'/>
+        <enumerator name='OTG_STATE_B_WAIT_ACON' value='4'/>
+        <enumerator name='OTG_STATE_B_HOST' value='5'/>
+        <enumerator name='OTG_STATE_A_IDLE' value='6'/>
+        <enumerator name='OTG_STATE_A_WAIT_VRISE' value='7'/>
+        <enumerator name='OTG_STATE_A_WAIT_BCON' value='8'/>
+        <enumerator name='OTG_STATE_A_HOST' value='9'/>
+        <enumerator name='OTG_STATE_A_SUSPEND' value='10'/>
+        <enumerator name='OTG_STATE_A_PERIPHERAL' value='11'/>
+        <enumerator name='OTG_STATE_A_WAIT_VFALL' value='12'/>
+        <enumerator name='OTG_STATE_A_VBUS_ERR' value='13'/>
+      </enum-decl>
+      <class-decl name='usb_phy_io_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb/phy.h' line='72' column='1' id='b6b55329'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read' type-id='90c0e85c' visibility='default' filepath='include/linux/usb/phy.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write' type-id='a52d0b9b' visibility='default' filepath='include/linux/usb/phy.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb_charger_type' filepath='include/uapi/linux/usb/charger.h' line='16' column='1' id='eba182c8'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UNKNOWN_TYPE' value='0'/>
+        <enumerator name='SDP_TYPE' value='1'/>
+        <enumerator name='DCP_TYPE' value='2'/>
+        <enumerator name='CDP_TYPE' value='3'/>
+        <enumerator name='ACA_TYPE' value='4'/>
+      </enum-decl>
+      <enum-decl name='usb_charger_state' filepath='include/uapi/linux/usb/charger.h' line='25' column='1' id='6d659af5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USB_CHARGER_DEFAULT' value='0'/>
+        <enumerator name='USB_CHARGER_PRESENT' value='1'/>
+        <enumerator name='USB_CHARGER_ABSENT' value='2'/>
+      </enum-decl>
+      <class-decl name='usb_charger_current' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/usb/phy.h' line='77' column='1' id='c1a2a792'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sdp_min' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='sdp_max' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dcp_min' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dcp_max' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cdp_min' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='cdp_max' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='aca_min' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='aca_max' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='atomic_notifier_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='60' column='1' id='dbd58f6e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/notifier.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='d504f73d' visibility='default' filepath='include/linux/notifier.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb_dev_authorize_policy' filepath='include/linux/usb/hcd.h' line='76' column='1' id='7e6e640d'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USB_DEVICE_AUTHORIZE_NONE' value='0'/>
+        <enumerator name='USB_DEVICE_AUTHORIZE_ALL' value='1'/>
+        <enumerator name='USB_DEVICE_AUTHORIZE_INTERNAL' value='2'/>
+      </enum-decl>
+      <class-decl name='giveback_urb_bh' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/usb/hcd.h' line='68' column='1' id='63972aea'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='running' type-id='b50a4934' visibility='default' filepath='include/linux/usb/hcd.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/usb/hcd.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/linux/usb/hcd.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bh' type-id='7a7ea727' visibility='default' filepath='include/linux/usb/hcd.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='completing_ep' type-id='15adb516' visibility='default' filepath='include/linux/usb/hcd.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='soc_device_attribute' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/sys_soc.h' line='11' column='1' id='81954c90'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='machine' type-id='80f4b756' visibility='default' filepath='include/linux/sys_soc.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='family' type-id='80f4b756' visibility='default' filepath='include/linux/sys_soc.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='revision' type-id='80f4b756' visibility='default' filepath='include/linux/sys_soc.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='serial_number' type-id='80f4b756' visibility='default' filepath='include/linux/sys_soc.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='soc_id' type-id='80f4b756' visibility='default' filepath='include/linux/sys_soc.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/sys_soc.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='custom_attr_group' type-id='8ff9530e' visibility='default' filepath='include/linux/sys_soc.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='519497e3' const='yes' id='8f118d08'/>
+      <pointer-type-def type-id='8f118d08' size-in-bits='64' id='5aa12c86'/>
+      <qualified-type-def type-id='81954c90' const='yes' id='9a2ef795'/>
+      <pointer-type-def type-id='9a2ef795' size-in-bits='64' id='76f001ad'/>
+      <pointer-type-def type-id='2bf33030' size-in-bits='64' id='ab33c616'/>
+      <pointer-type-def type-id='b7022237' size-in-bits='64' id='c4884d33'/>
+      <pointer-type-def type-id='171b0f6c' size-in-bits='64' id='75b9415a'/>
+      <pointer-type-def type-id='84096265' size-in-bits='64' id='3d4f6569'/>
+      <pointer-type-def type-id='7f416417' size-in-bits='64' id='34083223'/>
+      <pointer-type-def type-id='e86b7946' size-in-bits='64' id='ef2f6230'/>
+      <pointer-type-def type-id='2457cbe5' size-in-bits='64' id='57938551'/>
+      <pointer-type-def type-id='b0922992' size-in-bits='64' id='f49825dc'/>
+      <pointer-type-def type-id='0b4fb7b5' size-in-bits='64' id='82a5e0a9'/>
+      <pointer-type-def type-id='285e362f' size-in-bits='64' id='52f4f223'/>
+      <pointer-type-def type-id='3e298e69' size-in-bits='64' id='909b5775'/>
+      <pointer-type-def type-id='58c82a2b' size-in-bits='64' id='26f734e7'/>
+      <pointer-type-def type-id='f8b5874e' size-in-bits='64' id='530cb308'/>
+      <pointer-type-def type-id='a24a51b3' size-in-bits='64' id='280dcd9f'/>
+      <pointer-type-def type-id='e09dbee3' size-in-bits='64' id='8ceda7f7'/>
+      <pointer-type-def type-id='a8fc2a93' size-in-bits='64' id='2c3372f7'/>
+      <pointer-type-def type-id='96a19766' size-in-bits='64' id='473afbc8'/>
+      <pointer-type-def type-id='84ec62b0' size-in-bits='64' id='c1729c2a'/>
+      <pointer-type-def type-id='98789900' size-in-bits='64' id='cf0b24c2'/>
+      <pointer-type-def type-id='db1d8e86' size-in-bits='64' id='988d1520'/>
+      <pointer-type-def type-id='d2460aa5' size-in-bits='64' id='c1ee9321'/>
+      <pointer-type-def type-id='82014c8f' size-in-bits='64' id='40b8ad2b'/>
+      <pointer-type-def type-id='d9609309' size-in-bits='64' id='ba1d878d'/>
+      <pointer-type-def type-id='fa93dbe1' size-in-bits='64' id='dd6ccf15'/>
+      <pointer-type-def type-id='9502627f' size-in-bits='64' id='2f4077f3'/>
+      <pointer-type-def type-id='9b07d522' size-in-bits='64' id='fc1fbe7c'/>
+      <pointer-type-def type-id='5c3855b6' size-in-bits='64' id='523228f0'/>
+      <pointer-type-def type-id='3e0660a2' size-in-bits='64' id='90c0e85c'/>
+      <pointer-type-def type-id='277480c7' size-in-bits='64' id='a52d0b9b'/>
+      <pointer-type-def type-id='154f1323' size-in-bits='64' id='2d642297'/>
+      <pointer-type-def type-id='3a0b2d1e' size-in-bits='64' id='a4e9cbb0'/>
+      <pointer-type-def type-id='78932bbc' size-in-bits='64' id='3e34b3ae'/>
+      <pointer-type-def type-id='54f638e6' size-in-bits='64' id='49a58c0c'/>
+      <pointer-type-def type-id='392af4e9' size-in-bits='64' id='fc4f83c1'/>
+      <pointer-type-def type-id='15adb516' size-in-bits='64' id='5c744d74'/>
+      <pointer-type-def type-id='6e3d524a' size-in-bits='64' id='22be78e8'/>
+      <pointer-type-def type-id='f7de2149' size-in-bits='64' id='ca9354d1'/>
+      <pointer-type-def type-id='b6b55329' size-in-bits='64' id='aae1a0f1'/>
+      <pointer-type-def type-id='ceda742d' size-in-bits='64' id='7befabdd'/>
+      <pointer-type-def type-id='54b8f32e' size-in-bits='64' id='2638ad78'/>
+      <pointer-type-def type-id='3870c7c3' size-in-bits='64' id='0d7f0367'/>
+      <pointer-type-def type-id='c51e5ffb' size-in-bits='64' id='da12244f'/>
+      <pointer-type-def type-id='6cef7733' size-in-bits='64' id='b48dadb7'/>
+      <pointer-type-def type-id='f4bdc973' size-in-bits='64' id='e1007da7'/>
+      <pointer-type-def type-id='f65a797a' size-in-bits='64' id='6cd1df94'/>
+      <function-decl name='dma_set_mask' mangled-name='dma_set_mask' filepath='include/linux/dma-mapping.h' line='469' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_set_mask'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='3a47d82b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_create_hcd' mangled-name='usb_create_hcd' filepath='include/linux/usb/hcd.h' line='470' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_create_hcd'>
+        <parameter type-id='5aa12c86'/>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='fc4f83c1'/>
+      </function-decl>
+      <function-decl name='soc_device_match' mangled-name='soc_device_match' filepath='include/linux/sys_soc.h' line='41' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='soc_device_match'>
+        <parameter type-id='76f001ad'/>
+        <return type-id='76f001ad'/>
+      </function-decl>
+      <function-decl name='usb_add_hcd' mangled-name='usb_add_hcd' filepath='include/linux/usb/hcd.h' line='478' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_add_hcd'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_wakeup_enable' mangled-name='device_wakeup_enable' filepath='include/linux/pm_wakeup.h' line='95' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_wakeup_enable'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_put_hcd' mangled-name='usb_put_hcd' filepath='include/linux/usb/hcd.h' line='476' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_put_hcd'>
+        <parameter type-id='fc4f83c1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cancel_delayed_work' mangled-name='cancel_delayed_work' filepath='include/linux/workqueue.h' line='471' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cancel_delayed_work'>
+        <parameter type-id='1a7ee447'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='usb_remove_hcd' mangled-name='usb_remove_hcd' filepath='include/linux/usb/hcd.h' line='480' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_remove_hcd'>
+        <parameter type-id='fc4f83c1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_of_get_companion_dev' mangled-name='usb_of_get_companion_dev' filepath='include/linux/usb/of.h' line='26' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_of_get_companion_dev'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='device_pm_wait_for_dev' mangled-name='device_pm_wait_for_dev' filepath='include/linux/pm.h' line='735' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_pm_wait_for_dev'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='put_device' mangled-name='put_device' filepath='include/linux/device.h' line='1709' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='put_device'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_release_driver' mangled-name='device_release_driver' filepath='include/linux/device.h' line='1637' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_release_driver'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_attach' mangled-name='device_attach' filepath='include/linux/device.h' line='1638' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_attach'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='b7022237'>
+        <parameter type-id='ca9354d1'/>
+        <return type-id='eba182c8'/>
+      </function-type>
+      <function-type size-in-bits='64' id='84096265'>
+        <parameter type-id='fc4f83c1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7f416417'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e86b7946'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2457cbe5'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b0922992'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0b4fb7b5'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='285e362f'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3e298e69'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='ab85b8f2'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='58c82a2b'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='ab85b8f2'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8b5874e'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='25e60cb2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a24a51b3'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='cee9c4f2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e09dbee3'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a8fc2a93'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='15adb516'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='96a19766'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='5c744d74'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='84ec62b0'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='5c744d74'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='98789900'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='bf95a8f0'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='db1d8e86'>
+        <parameter type-id='22be78e8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d2460aa5'>
+        <parameter type-id='22be78e8'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='82014c8f'>
+        <parameter type-id='22be78e8'/>
+        <parameter type-id='3ab7d422'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d9609309'>
+        <parameter type-id='22be78e8'/>
+        <parameter type-id='49a58c0c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fa93dbe1'>
+        <parameter type-id='ca9354d1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9502627f'>
+        <parameter type-id='ca9354d1'/>
+        <parameter type-id='4e532009'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9b07d522'>
+        <parameter type-id='ca9354d1'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5c3855b6'>
+        <parameter type-id='ca9354d1'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3e0660a2'>
+        <parameter type-id='ca9354d1'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='277480c7'>
+        <parameter type-id='ca9354d1'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='154f1323'>
+        <parameter type-id='ca9354d1'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3a0b2d1e'>
+        <parameter type-id='fc4f83c1'/>
+        <return type-id='4bdecfd7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78932bbc'>
+        <parameter type-id='fc4f83c1'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='54b8f32e'>
+        <parameter type-id='fc4f83c1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3870c7c3'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c51e5ffb'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='ab85b8f2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6cef7733'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='25e60cb2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f4bdc973'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='15adb516'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f65a797a'>
+        <parameter type-id='ca9354d1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/host/pci-quirks.c' language='LANG_C89'>
+      <function-decl name='sb800_prefetch' mangled-name='sb800_prefetch' filepath='drivers/usb/host/pci-quirks.c' line='191' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sb800_prefetch'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/host/pci-quirks.c' line='191' column='1'/>
+        <parameter type-id='95e97e5e' name='on' filepath='drivers/usb/host/pci-quirks.c' line='191' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_amd_prefetch_quirk' mangled-name='usb_amd_prefetch_quirk' filepath='drivers/usb/host/pci-quirks.c' line='312' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_amd_prefetch_quirk'>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='usb_amd_quirk_pll_disable' mangled-name='usb_amd_quirk_pll_disable' filepath='drivers/usb/host/pci-quirks.c' line='454' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_amd_quirk_pll_disable'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_asmedia_modifyflowcontrol' mangled-name='usb_asmedia_modifyflowcontrol' filepath='drivers/usb/host/pci-quirks.c' line='484' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_asmedia_modifyflowcontrol'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/usb/host/pci-quirks.c' line='484' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_amd_quirk_pll_enable' mangled-name='usb_amd_quirk_pll_enable' filepath='drivers/usb/host/pci-quirks.c' line='504' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_amd_quirk_pll_enable'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_amd_dev_put' mangled-name='usb_amd_dev_put' filepath='drivers/usb/host/pci-quirks.c' line='510' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_amd_dev_put'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_amd_pt_check_port' mangled-name='usb_amd_pt_check_port' filepath='drivers/usb/host/pci-quirks.c' line='547' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_amd_pt_check_port'>
+        <parameter type-id='fa0b179b' name='device' filepath='drivers/usb/host/pci-quirks.c' line='547' column='1'/>
+        <parameter type-id='95e97e5e' name='port' filepath='drivers/usb/host/pci-quirks.c' line='547' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='usb_enable_intel_xhci_ports' mangled-name='usb_enable_intel_xhci_ports' filepath='drivers/usb/host/pci-quirks.c' line='1041' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_enable_intel_xhci_ports'>
+        <parameter type-id='85196e3f' name='xhci_pdev' filepath='drivers/usb/host/pci-quirks.c' line='1041' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_disable_xhci_ports' mangled-name='usb_disable_xhci_ports' filepath='drivers/usb/host/pci-quirks.c' line='1126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_disable_xhci_ports'>
+        <parameter type-id='85196e3f' name='xhci_pdev' filepath='drivers/usb/host/pci-quirks.c' line='1126' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/host/xhci-plat.c' language='LANG_C89'>
+      <function-decl name='usb_hcd_is_primary_hcd' mangled-name='usb_hcd_is_primary_hcd' filepath='include/linux/usb/hcd.h' line='477' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_is_primary_hcd'>
+        <parameter type-id='fc4f83c1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_property_read_u32_array' mangled-name='device_property_read_u32_array' filepath='include/linux/property.h' line='41' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_property_read_u32_array'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_usb_get_phy_by_phandle' mangled-name='devm_usb_get_phy_by_phandle' filepath='include/linux/usb/phy.h' line='221' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_usb_get_phy_by_phandle'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='ca9354d1'/>
+      </function-decl>
+      <function-decl name='of_usb_host_tpl_support' mangled-name='of_usb_host_tpl_support' filepath='include/linux/usb/of.h' line='19' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_usb_host_tpl_support'>
+        <parameter type-id='9a537bbe'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/phy/of.c' language='LANG_C89'>
+      <enum-decl name='usb_phy_interface' filepath='include/linux/usb/phy.h' line='18' column='1' id='46b5771e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USBPHY_INTERFACE_MODE_UNKNOWN' value='0'/>
+        <enumerator name='USBPHY_INTERFACE_MODE_UTMI' value='1'/>
+        <enumerator name='USBPHY_INTERFACE_MODE_UTMIW' value='2'/>
+        <enumerator name='USBPHY_INTERFACE_MODE_ULPI' value='3'/>
+        <enumerator name='USBPHY_INTERFACE_MODE_SERIAL' value='4'/>
+        <enumerator name='USBPHY_INTERFACE_MODE_HSIC' value='5'/>
+      </enum-decl>
+      <function-decl name='of_usb_get_phy_mode' mangled-name='of_usb_get_phy_mode' filepath='drivers/usb/phy/of.c' line='28' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_usb_get_phy_mode'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/usb/phy/of.c' line='28' column='1'/>
+        <return type-id='46b5771e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/phy/phy.c' language='LANG_C89'>
+      <function-decl name='usb_phy_set_charger_current' mangled-name='usb_phy_set_charger_current' filepath='drivers/usb/phy/phy.c' line='182' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_phy_set_charger_current'>
+        <parameter type-id='ca9354d1' name='usb_phy' filepath='drivers/usb/phy/phy.c' line='182' column='1'/>
+        <parameter type-id='f0981eeb' name='mA' filepath='drivers/usb/phy/phy.c' line='182' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_phy_get_charger_current' mangled-name='usb_phy_get_charger_current' filepath='drivers/usb/phy/phy.c' line='231' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_phy_get_charger_current'>
+        <parameter type-id='ca9354d1' name='usb_phy' filepath='drivers/usb/phy/phy.c' line='231' column='1'/>
+        <parameter type-id='807869d3' name='min' filepath='drivers/usb/phy/phy.c' line='232' column='1'/>
+        <parameter type-id='807869d3' name='max' filepath='drivers/usb/phy/phy.c' line='232' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_phy_set_charger_state' mangled-name='usb_phy_set_charger_state' filepath='drivers/usb/phy/phy.c' line='268' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_phy_set_charger_state'>
+        <parameter type-id='ca9354d1' name='usb_phy' filepath='drivers/usb/phy/phy.c' line='268' column='1'/>
+        <parameter type-id='6d659af5' name='state' filepath='drivers/usb/phy/phy.c' line='269' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_usb_get_phy' mangled-name='devm_usb_get_phy' filepath='drivers/usb/phy/phy.c' line='415' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_usb_get_phy'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/phy/phy.c' line='415' column='1'/>
+        <parameter type-id='d95f4827' name='type' filepath='drivers/usb/phy/phy.c' line='415' column='1'/>
+        <return type-id='ca9354d1'/>
+      </function-decl>
+      <function-decl name='usb_add_phy_dev' mangled-name='usb_add_phy_dev' filepath='drivers/usb/phy/phy.c' line='661' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_add_phy_dev'>
+        <parameter type-id='ca9354d1' name='x' filepath='drivers/usb/phy/phy.c' line='661' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_remove_phy' mangled-name='usb_remove_phy' filepath='drivers/usb/phy/phy.c' line='692' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_remove_phy'>
+        <parameter type-id='ca9354d1' name='x' filepath='drivers/usb/phy/phy.c' line='692' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/roles/class.c' language='LANG_C89'>
+      <function-decl name='usb_role_switch_get_role' mangled-name='usb_role_switch_get_role' filepath='drivers/usb/roles/class.c' line='68' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_role_switch_get_role'>
+        <parameter type-id='3e3cd44f' name='sw' filepath='drivers/usb/roles/class.c' line='68' column='1'/>
+        <return type-id='c675b073'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/storage/uas.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='64' id='0209ab38'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='scsi_lun' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/scsi/scsi_proto.h' line='287' column='1' id='a955150b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scsi_lun' type-id='0209ab38' visibility='default' filepath='include/scsi/scsi_proto.h' line='288' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='fe7ab802' const='yes' id='0ebf66e5'/>
+      <pointer-type-def type-id='0ebf66e5' size-in-bits='64' id='064ed7dd'/>
+      <qualified-type-def type-id='e07b5dbe' const='yes' id='cf3752f1'/>
+      <pointer-type-def type-id='cf3752f1' size-in-bits='64' id='0f176ec1'/>
+      <qualified-type-def type-id='5b653fc9' const='yes' id='4e9f87c2'/>
+      <pointer-type-def type-id='4e9f87c2' size-in-bits='64' id='ad22f238'/>
+      <pointer-type-def type-id='a955150b' size-in-bits='64' id='a9aa3e2b'/>
+      <function-decl name='destroy_workqueue' mangled-name='destroy_workqueue' filepath='include/linux/workqueue.h' line='442' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='destroy_workqueue'>
+        <parameter type-id='242e3d19'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_set_interface' mangled-name='usb_set_interface' filepath='include/linux/usb.h' line='1847' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_set_interface'>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='scsi_host_alloc' mangled-name='scsi_host_alloc' filepath='include/scsi/scsi_host.h' line='746' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_host_alloc'>
+        <parameter type-id='36265581'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='a970a64c'/>
+      </function-decl>
+      <function-decl name='scsi_add_host_with_dma' mangled-name='scsi_add_host_with_dma' filepath='include/scsi/scsi_host.h' line='747' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_add_host_with_dma'>
+        <parameter type-id='a970a64c'/>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_free_streams' mangled-name='usb_free_streams' filepath='include/linux/usb.h' line='856' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_free_streams'>
+        <parameter type-id='8bf48c31'/>
+        <parameter type-id='5c744d74'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='scsi_host_put' mangled-name='scsi_host_put' filepath='include/scsi/scsi_host.h' line='755' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_host_put'>
+        <parameter type-id='a970a64c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_kill_anchored_urbs' mangled-name='usb_kill_anchored_urbs' filepath='include/linux/usb.h' line='1746' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_kill_anchored_urbs'>
+        <parameter type-id='bd300bf3'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scmd_printk' mangled-name='scmd_printk' filepath='include/scsi/scsi_device.h' line='263' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scmd_printk'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='064ed7dd'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_print_command' mangled-name='scsi_print_command' filepath='include/scsi/scsi_dbg.h' line='9' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_print_command'>
+        <parameter type-id='0b8718c0'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_remove_host' mangled-name='scsi_remove_host' filepath='include/scsi/scsi_host.h' line='752' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_remove_host'>
+        <parameter type-id='a970a64c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_printk' mangled-name='dev_printk' filepath='include/linux/device.h' line='1749' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_printk'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='8df61054'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_report_bus_reset' mangled-name='scsi_report_bus_reset' filepath='include/scsi/scsi_eh.h' line='15' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_report_bus_reset'>
+        <parameter type-id='a970a64c'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_block_requests' mangled-name='scsi_block_requests' filepath='include/scsi/scsi_host.h' line='781' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_block_requests'>
+        <parameter type-id='a970a64c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_unblock_requests' mangled-name='scsi_unblock_requests' filepath='include/scsi/scsi_host.h' line='780' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_unblock_requests'>
+        <parameter type-id='a970a64c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_alloc_streams' mangled-name='usb_alloc_streams' filepath='include/linux/usb.h' line='851' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_alloc_streams'>
+        <parameter type-id='8bf48c31'/>
+        <parameter type-id='5c744d74'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_wait_anchor_empty_timeout' mangled-name='usb_wait_anchor_empty_timeout' filepath='include/linux/usb.h' line='1754' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_wait_anchor_empty_timeout'>
+        <parameter type-id='bd300bf3'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='scsi_scan_host' mangled-name='scsi_scan_host' filepath='include/scsi/scsi_host.h' line='750' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_scan_host'>
+        <parameter type-id='a970a64c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_unanchor_urb' mangled-name='usb_unanchor_urb' filepath='include/linux/usb.h' line='1753' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_unanchor_urb'>
+        <parameter type-id='ab85b8f2'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='int_to_scsilun' mangled-name='int_to_scsilun' filepath='include/scsi/scsi_common.h' line='38' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='int_to_scsilun'>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='a9aa3e2b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_unlink_urb' mangled-name='usb_unlink_urb' filepath='include/linux/usb.h' line='1741' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_unlink_urb'>
+        <parameter type-id='ab85b8f2'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdev_prefix_printk' mangled-name='sdev_prefix_printk' filepath='include/scsi/scsi_device.h' line='256' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdev_prefix_printk'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='0f176ec1'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_get_urb' mangled-name='usb_get_urb' filepath='include/linux/usb.h' line='1739' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_get_urb'>
+        <parameter type-id='ab85b8f2'/>
+        <return type-id='ab85b8f2'/>
+      </function-decl>
+      <function-decl name='usb_lock_device_for_reset' mangled-name='usb_lock_device_for_reset' filepath='include/linux/usb.h' line='762' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_lock_device_for_reset'>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='ad22f238'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_queue_update_dma_alignment' mangled-name='blk_queue_update_dma_alignment' filepath='include/linux/blkdev.h' line='1116' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_update_dma_alignment'>
+        <parameter type-id='e7d2a5fd'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_change_queue_depth' mangled-name='scsi_change_queue_depth' filepath='include/scsi/scsi_device.h' line='397' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_change_queue_depth'>
+        <parameter type-id='eb572b74'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='scsi_is_host_device' mangled-name='scsi_is_host_device' filepath='include/scsi/scsi_host.h' line='723' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_is_host_device'>
+        <parameter type-id='8df61054'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='alloc_workqueue' mangled-name='alloc_workqueue' filepath='include/linux/workqueue.h' line='413' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_workqueue'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='242e3d19'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/typec/bus.c' language='LANG_C89'>
+      <qualified-type-def type-id='17a13961' const='yes' id='2974aa72'/>
+      <pointer-type-def type-id='2974aa72' size-in-bits='64' id='9aa82888'/>
+      <function-decl name='typec_altmode_notify' mangled-name='typec_altmode_notify' filepath='drivers/usb/typec/bus.c' line='51' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_altmode_notify'>
+        <parameter type-id='02913b69' name='adev' filepath='drivers/usb/typec/bus.c' line='51' column='1'/>
+        <parameter type-id='7359adad' name='conf' filepath='drivers/usb/typec/bus.c' line='52' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/usb/typec/bus.c' line='52' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='typec_altmode_attention' mangled-name='typec_altmode_attention' filepath='drivers/usb/typec/bus.c' line='149' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_altmode_attention'>
+        <parameter type-id='02913b69' name='adev' filepath='drivers/usb/typec/bus.c' line='149' column='1'/>
+        <parameter type-id='19c2251e' name='vdo' filepath='drivers/usb/typec/bus.c' line='149' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='typec_altmode_vdm' mangled-name='typec_altmode_vdm' filepath='drivers/usb/typec/bus.c' line='169' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_altmode_vdm'>
+        <parameter type-id='02913b69' name='adev' filepath='drivers/usb/typec/bus.c' line='169' column='1'/>
+        <parameter type-id='51bb592e' name='header' filepath='drivers/usb/typec/bus.c' line='170' column='1'/>
+        <parameter type-id='aded214c' name='vdo' filepath='drivers/usb/typec/bus.c' line='170' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='drivers/usb/typec/bus.c' line='170' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='typec_altmode_get_partner' mangled-name='typec_altmode_get_partner' filepath='drivers/usb/typec/bus.c' line='193' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_altmode_get_partner'>
+        <parameter type-id='02913b69' name='adev' filepath='drivers/usb/typec/bus.c' line='193' column='1'/>
+        <return type-id='9aa82888'/>
+      </function-decl>
+      <class-decl name='typec_altmode' size-in-bits='7616' is-struct='yes' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='24' column='1' id='17a13961'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='svid' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7392'>
+          <var-decl name='mode' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='vdo' type-id='19c2251e' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='desc' type-id='26a90f95' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='ops' type-id='536df0d1' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='17a13961' size-in-bits='64' id='02913b69'/>
+      <pointer-type-def type-id='bbe452a1' size-in-bits='64' id='536df0d1'/>
+      <qualified-type-def type-id='62ec705a' const='yes' id='bbe452a1'/>
+      <class-decl name='typec_altmode_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='57' column='1' id='62ec705a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enter' type-id='f9431329' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='exit' type-id='f9431329' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attention' type-id='2227a3ab' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vdm' type-id='cc114ffc' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='notify' type-id='822493cb' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='activate' type-id='d65efcf0' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='db2d72d5' size-in-bits='64' id='f9431329'/>
+      <pointer-type-def type-id='1f31ad12' size-in-bits='64' id='cc114ffc'/>
+      <pointer-type-def type-id='e6fedf36' size-in-bits='64' id='d65efcf0'/>
+      <pointer-type-def type-id='42a0ecc7' size-in-bits='64' id='822493cb'/>
+      <pointer-type-def type-id='345f1a5f' size-in-bits='64' id='2227a3ab'/>
+      <function-type size-in-bits='64' id='1f31ad12'>
+        <parameter type-id='02913b69' name='adev'/>
+        <parameter type-id='51bb592e' name='header'/>
+        <parameter type-id='aded214c' name='vdo'/>
+        <parameter type-id='95e97e5e' name='count'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='42a0ecc7'>
+        <parameter type-id='02913b69' name='adev'/>
+        <parameter type-id='7359adad' name='conf'/>
+        <parameter type-id='eaa32e2f' name='data'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='345f1a5f'>
+        <parameter type-id='02913b69' name='adev'/>
+        <parameter type-id='19c2251e' name='vdo'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/typec/class.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='357a6a78' size-in-bits='96' alignment-in-bits='32' id='ee8e0be0'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <class-decl name='typec_port' size-in-bits='8320' is-struct='yes' visibility='default' filepath='drivers/usb/typec/class.c' line='38' column='1' id='1b0b5250'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/class.c' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/usb/typec/class.c' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='mode_ids' type-id='46ce60fb' visibility='default' filepath='drivers/usb/typec/class.c' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='prefer_role' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/class.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7584'>
+          <var-decl name='data_role' type-id='e453a0cb' visibility='default' filepath='drivers/usb/typec/class.c' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='pwr_role' type-id='ad61830a' visibility='default' filepath='drivers/usb/typec/class.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='vconn_role' type-id='ad61830a' visibility='default' filepath='drivers/usb/typec/class.c' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='pwr_opmode' type-id='44ea1984' visibility='default' filepath='drivers/usb/typec/class.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='port_type' type-id='0a19b04e' visibility='default' filepath='drivers/usb/typec/class.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='port_type_lock' type-id='925167dc' visibility='default' filepath='drivers/usb/typec/class.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='orientation' type-id='131b0a9c' visibility='default' filepath='drivers/usb/typec/class.c' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='sw' type-id='5d33005f' visibility='default' filepath='drivers/usb/typec/class.c' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='mux' type-id='374b228b' visibility='default' filepath='drivers/usb/typec/class.c' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='cap' type-id='287e28ea' visibility='default' filepath='drivers/usb/typec/class.c' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='ops' type-id='ebbbab1e' visibility='default' filepath='drivers/usb/typec/class.c' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='typec_data_role' filepath='include/linux/usb/typec.h' line='41' column='1' id='e453a0cb'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TYPEC_DEVICE' value='0'/>
+        <enumerator name='TYPEC_HOST' value='1'/>
+      </enum-decl>
+      <enum-decl name='typec_role' filepath='include/linux/usb/typec.h' line='46' column='1' id='ad61830a'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TYPEC_SINK' value='0'/>
+        <enumerator name='TYPEC_SOURCE' value='1'/>
+      </enum-decl>
+      <enum-decl name='typec_pwr_opmode' filepath='include/linux/usb/typec.h' line='51' column='1' id='44ea1984'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TYPEC_PWR_MODE_USB' value='0'/>
+        <enumerator name='TYPEC_PWR_MODE_1_5A' value='1'/>
+        <enumerator name='TYPEC_PWR_MODE_3_0A' value='2'/>
+        <enumerator name='TYPEC_PWR_MODE_PD' value='3'/>
+      </enum-decl>
+      <enum-decl name='typec_port_type' filepath='include/linux/usb/typec.h' line='21' column='1' id='0a19b04e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TYPEC_PORT_SRC' value='0'/>
+        <enumerator name='TYPEC_PORT_SNK' value='1'/>
+        <enumerator name='TYPEC_PORT_DRP' value='2'/>
+      </enum-decl>
+      <enum-decl name='typec_orientation' filepath='include/linux/usb/typec.h' line='66' column='1' id='131b0a9c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TYPEC_ORIENTATION_NONE' value='0'/>
+        <enumerator name='TYPEC_ORIENTATION_NORMAL' value='1'/>
+        <enumerator name='TYPEC_ORIENTATION_REVERSE' value='2'/>
+      </enum-decl>
+      <class-decl name='typec_switch' size-in-bits='7424' is-struct='yes' visibility='default' filepath='drivers/usb/typec/bus.h' line='40' column='1' id='eca93177'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/usb/typec/bus.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='set' type-id='d08a3e2d' visibility='default' filepath='drivers/usb/typec/bus.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='typec_switch_set_fn_t' type-id='a16f8ee4' filepath='include/linux/usb/typec_mux.h' line='13' column='1' id='d08a3e2d'/>
+      <class-decl name='typec_mux' size-in-bits='7424' is-struct='yes' visibility='default' filepath='drivers/usb/typec/bus.h' line='45' column='1' id='20494abb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/usb/typec/bus.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='set' type-id='43788717' visibility='default' filepath='drivers/usb/typec/bus.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='typec_mux_set_fn_t' type-id='2be74e8a' filepath='include/linux/usb/typec_mux.h' line='32' column='1' id='43788717'/>
+      <class-decl name='typec_capability' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/usb/typec.h' line='204' column='1' id='1f2b9a61'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='0a19b04e' visibility='default' filepath='include/linux/usb/typec.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='data' type-id='89aae82e' visibility='default' filepath='include/linux/usb/typec.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='revision' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/typec.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='pd_revision' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/typec.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='prefer_role' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/typec.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='accessory' type-id='ee8e0be0' visibility='default' filepath='include/linux/usb/typec.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sw' type-id='5d33005f' visibility='default' filepath='include/linux/usb/typec.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mux' type-id='374b228b' visibility='default' filepath='include/linux/usb/typec.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/usb/typec.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/typec.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ops' type-id='ebbbab1e' visibility='default' filepath='include/linux/usb/typec.h' line='217' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='typec_port_data' filepath='include/linux/usb/typec.h' line='27' column='1' id='89aae82e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TYPEC_PORT_DFP' value='0'/>
+        <enumerator name='TYPEC_PORT_UFP' value='1'/>
+        <enumerator name='TYPEC_PORT_DRD' value='2'/>
+      </enum-decl>
+      <enum-decl name='typec_accessory' filepath='include/linux/usb/typec.h' line='58' column='1' id='357a6a78'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TYPEC_ACCESSORY_NONE' value='0'/>
+        <enumerator name='TYPEC_ACCESSORY_AUDIO' value='1'/>
+        <enumerator name='TYPEC_ACCESSORY_DEBUG' value='2'/>
+      </enum-decl>
+      <class-decl name='typec_operations' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/usb/typec.h' line='179' column='1' id='d3860975'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='try_role' type-id='d7a90e3b' visibility='default' filepath='include/linux/usb/typec.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dr_set' type-id='55ebe352' visibility='default' filepath='include/linux/usb/typec.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pr_set' type-id='331e3ac7' visibility='default' filepath='include/linux/usb/typec.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vconn_set' type-id='331e3ac7' visibility='default' filepath='include/linux/usb/typec.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='port_type_set' type-id='6507da23' visibility='default' filepath='include/linux/usb/typec.h' line='184' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='typec_altmode' size-in-bits='7616' is-struct='yes' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='24' column='1' id='17a13961'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='svid' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7392'>
+          <var-decl name='mode' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='vdo' type-id='19c2251e' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='desc' type-id='26a90f95' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='ops' type-id='536df0d1' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='typec_altmode_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='57' column='1' id='62ec705a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enter' type-id='f9431329' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='exit' type-id='f9431329' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attention' type-id='2227a3ab' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vdm' type-id='cc114ffc' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='notify' type-id='822493cb' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='activate' type-id='d65efcf0' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='typec_partner' size-in-bits='7680' is-struct='yes' visibility='default' filepath='drivers/usb/typec/class.c' line='30' column='1' id='7940281b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/usb/typec/class.c' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='usb_pd' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/class.c' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='identity' type-id='09dbca85' visibility='default' filepath='drivers/usb/typec/class.c' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='accessory' type-id='357a6a78' visibility='default' filepath='drivers/usb/typec/class.c' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='mode_ids' type-id='46ce60fb' visibility='default' filepath='drivers/usb/typec/class.c' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_pd_identity' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/usb/typec.h' line='83' column='1' id='57bfbe05'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id_header' type-id='19c2251e' visibility='default' filepath='include/linux/usb/typec.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cert_stat' type-id='19c2251e' visibility='default' filepath='include/linux/usb/typec.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='product' type-id='19c2251e' visibility='default' filepath='include/linux/usb/typec.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='typec_altmode_desc' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/usb/typec.h' line='102' column='1' id='968d5b5b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='svid' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/typec.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='mode' type-id='f9b06939' visibility='default' filepath='include/linux/usb/typec.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vdo' type-id='19c2251e' visibility='default' filepath='include/linux/usb/typec.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='roles' type-id='89aae82e' visibility='default' filepath='include/linux/usb/typec.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='typec_partner_desc' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb/typec.h' line='165' column='1' id='3ad5d94d'>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='usb_pd' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/typec.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='accessory' type-id='357a6a78' visibility='default' filepath='include/linux/usb/typec.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='identity' type-id='09dbca85' visibility='default' filepath='include/linux/usb/typec.h' line='168' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='968d5b5b' const='yes' id='4cf04ec2'/>
+      <pointer-type-def type-id='4cf04ec2' size-in-bits='64' id='064c3738'/>
+      <qualified-type-def type-id='62ec705a' const='yes' id='bbe452a1'/>
+      <pointer-type-def type-id='bbe452a1' size-in-bits='64' id='536df0d1'/>
+      <qualified-type-def type-id='1f2b9a61' const='yes' id='67d8ed84'/>
+      <pointer-type-def type-id='67d8ed84' size-in-bits='64' id='287e28ea'/>
+      <qualified-type-def type-id='d3860975' const='yes' id='105c9300'/>
+      <pointer-type-def type-id='105c9300' size-in-bits='64' id='ebbbab1e'/>
+      <pointer-type-def type-id='db2d72d5' size-in-bits='64' id='f9431329'/>
+      <pointer-type-def type-id='1f31ad12' size-in-bits='64' id='cc114ffc'/>
+      <pointer-type-def type-id='e6fedf36' size-in-bits='64' id='d65efcf0'/>
+      <pointer-type-def type-id='42a0ecc7' size-in-bits='64' id='822493cb'/>
+      <pointer-type-def type-id='da263080' size-in-bits='64' id='2be74e8a'/>
+      <pointer-type-def type-id='b1e1f550' size-in-bits='64' id='55ebe352'/>
+      <pointer-type-def type-id='bca3f647' size-in-bits='64' id='6507da23'/>
+      <pointer-type-def type-id='0a7e93ab' size-in-bits='64' id='331e3ac7'/>
+      <pointer-type-def type-id='4e214e97' size-in-bits='64' id='d7a90e3b'/>
+      <pointer-type-def type-id='8a7e9d52' size-in-bits='64' id='a16f8ee4'/>
+      <pointer-type-def type-id='17a13961' size-in-bits='64' id='02913b69'/>
+      <pointer-type-def type-id='20494abb' size-in-bits='64' id='374b228b'/>
+      <pointer-type-def type-id='7940281b' size-in-bits='64' id='33ca4bbb'/>
+      <pointer-type-def type-id='3ad5d94d' size-in-bits='64' id='a5263fbd'/>
+      <pointer-type-def type-id='1b0b5250' size-in-bits='64' id='b977ca56'/>
+      <pointer-type-def type-id='eca93177' size-in-bits='64' id='5d33005f'/>
+      <pointer-type-def type-id='57bfbe05' size-in-bits='64' id='09dbca85'/>
+      <pointer-type-def type-id='345f1a5f' size-in-bits='64' id='2227a3ab'/>
+      <function-decl name='typec_register_port' mangled-name='typec_register_port' filepath='drivers/usb/typec/class.c' line='1542' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_register_port'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/usb/typec/class.c' line='1542' column='1'/>
+        <parameter type-id='287e28ea' name='cap' filepath='drivers/usb/typec/class.c' line='1543' column='1'/>
+        <return type-id='b977ca56'/>
+      </function-decl>
+      <function-decl name='typec_altmode_update_active' mangled-name='typec_altmode_update_active' filepath='drivers/usb/typec/class.c' line='280' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_altmode_update_active'>
+        <parameter type-id='02913b69' name='adev' filepath='drivers/usb/typec/class.c' line='280' column='1'/>
+        <parameter type-id='b50a4934' name='active' filepath='drivers/usb/typec/class.c' line='280' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='typec_unregister_altmode' mangled-name='typec_unregister_altmode' filepath='drivers/usb/typec/class.c' line='547' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_unregister_altmode'>
+        <parameter type-id='02913b69' name='adev' filepath='drivers/usb/typec/class.c' line='547' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='typec_partner_register_altmode' mangled-name='typec_partner_register_altmode' filepath='drivers/usb/typec/class.c' line='630' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_partner_register_altmode'>
+        <parameter type-id='33ca4bbb' name='partner' filepath='drivers/usb/typec/class.c' line='630' column='1'/>
+        <parameter type-id='064c3738' name='desc' filepath='drivers/usb/typec/class.c' line='631' column='1'/>
+        <return type-id='02913b69'/>
+      </function-decl>
+      <function-decl name='typec_register_partner' mangled-name='typec_register_partner' filepath='drivers/usb/typec/class.c' line='646' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_register_partner'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='646' column='1'/>
+        <parameter type-id='a5263fbd' name='desc' filepath='drivers/usb/typec/class.c' line='647' column='1'/>
+        <return type-id='33ca4bbb'/>
+      </function-decl>
+      <function-decl name='typec_unregister_partner' mangled-name='typec_unregister_partner' filepath='drivers/usb/typec/class.c' line='691' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_unregister_partner'>
+        <parameter type-id='33ca4bbb' name='partner' filepath='drivers/usb/typec/class.c' line='691' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='typec_set_data_role' mangled-name='typec_set_data_role' filepath='drivers/usb/typec/class.c' line='1304' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_set_data_role'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='1304' column='1'/>
+        <parameter type-id='e453a0cb' name='role' filepath='drivers/usb/typec/class.c' line='1304' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='typec_set_pwr_role' mangled-name='typec_set_pwr_role' filepath='drivers/usb/typec/class.c' line='1322' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_set_pwr_role'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='1322' column='1'/>
+        <parameter type-id='ad61830a' name='role' filepath='drivers/usb/typec/class.c' line='1322' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='typec_set_vconn_role' mangled-name='typec_set_vconn_role' filepath='drivers/usb/typec/class.c' line='1341' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_set_vconn_role'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='1341' column='1'/>
+        <parameter type-id='ad61830a' name='role' filepath='drivers/usb/typec/class.c' line='1341' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='typec_set_pwr_opmode' mangled-name='typec_set_pwr_opmode' filepath='drivers/usb/typec/class.c' line='1367' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_set_pwr_opmode'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='1367' column='1'/>
+        <parameter type-id='44ea1984' name='opmode' filepath='drivers/usb/typec/class.c' line='1368' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='typec_set_orientation' mangled-name='typec_set_orientation' filepath='drivers/usb/typec/class.c' line='1447' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_set_orientation'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='1447' column='1'/>
+        <parameter type-id='131b0a9c' name='orientation' filepath='drivers/usb/typec/class.c' line='1448' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='typec_set_mode' mangled-name='typec_set_mode' filepath='drivers/usb/typec/class.c' line='1484' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_set_mode'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='1484' column='1'/>
+        <parameter type-id='95e97e5e' name='mode' filepath='drivers/usb/typec/class.c' line='1484' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='typec_get_drvdata' mangled-name='typec_get_drvdata' filepath='drivers/usb/typec/class.c' line='1496' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_get_drvdata'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='1496' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='typec_port_register_altmode' mangled-name='typec_port_register_altmode' filepath='drivers/usb/typec/class.c' line='1513' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_port_register_altmode'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='1513' column='1'/>
+        <parameter type-id='064c3738' name='desc' filepath='drivers/usb/typec/class.c' line='1514' column='1'/>
+        <return type-id='02913b69'/>
+      </function-decl>
+      <function-decl name='typec_unregister_port' mangled-name='typec_unregister_port' filepath='drivers/usb/typec/class.c' line='1644' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_unregister_port'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='1644' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='db2d72d5'>
+        <parameter type-id='02913b69'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e6fedf36'>
+        <parameter type-id='02913b69'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da263080'>
+        <parameter type-id='374b228b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b1e1f550'>
+        <parameter type-id='b977ca56'/>
+        <parameter type-id='e453a0cb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bca3f647'>
+        <parameter type-id='b977ca56'/>
+        <parameter type-id='0a19b04e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0a7e93ab'>
+        <parameter type-id='b977ca56'/>
+        <parameter type-id='ad61830a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4e214e97'>
+        <parameter type-id='b977ca56'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8a7e9d52'>
+        <parameter type-id='5d33005f'/>
+        <parameter type-id='131b0a9c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/usb/typec/tcpm/tcpm.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='2f162548' size-in-bits='224' id='e369592a'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='02913b69' size-in-bits='6144' id='6fcbfa84'>
+        <subrange length='96' type-id='7ff19f0f' id='1df62250'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='968d5b5b' size-in-bits='9216' id='589abf66'>
+        <subrange length='96' type-id='7ff19f0f' id='1df62250'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='1dc6a898' size-in-bits='256' id='42c6815a'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='224' id='1c69cda2'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8bff8096' size-in-bits='65536' id='bad1511f'>
+        <subrange length='1024' type-id='7ff19f0f' id='c60446f8'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='208' id='50390288'>
+        <subrange length='26' type-id='7ff19f0f' id='41d81c65'/>
+      </array-type-def>
+      <class-decl name='tcpm_port' size-in-bits='97216' is-struct='yes' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='194' column='1' id='902061bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wq' type-id='242e3d19' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='typec_caps' type-id='1f2b9a61' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='typec_port' type-id='b977ca56' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='tcpc' type-id='15b1f129' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='role_sw' type-id='3e3cd44f' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='vconn_role' type-id='ad61830a' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='pwr_role' type-id='ad61830a' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='data_role' type-id='e453a0cb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='pwr_opmode' type-id='44ea1984' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='partner_ident' type-id='57bfbe05' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='partner_desc' type-id='3ad5d94d' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='partner' type-id='33ca4bbb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='cc_req' type-id='c2d135ef' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='cc1' type-id='c2d135ef' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='cc2' type-id='c2d135ef' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='polarity' type-id='551eebc9' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='attached' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1736'>
+          <var-decl name='connected' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='port_type' type-id='0a19b04e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='vbus_present' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1800'>
+          <var-decl name='vbus_never_low' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1808'>
+          <var-decl name='vbus_source' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1816'>
+          <var-decl name='vbus_charge' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='send_discover' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1832'>
+          <var-decl name='op_vsafe5v' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='try_role' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='try_snk_count' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='try_src_count' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='queued_message' type-id='1d843e9c' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='enter_state' type-id='c698cee4' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='prev_state' type-id='c698cee4' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='state' type-id='c698cee4' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='delayed_state' type-id='c698cee4' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='delayed_runtime' type-id='7359adad' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='delay_ms' type-id='7359adad' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='pd_event_lock' type-id='fb4018a0' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='pd_events' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='event_work' type-id='ef9025d0' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='state_machine' type-id='5ad6e0ef' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='vdm_state_machine' type-id='5ad6e0ef' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='state_machine_running' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='tx_complete' type-id='f9fef04f' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='tx_status' type-id='a2f9e316' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='swap_lock' type-id='925167dc' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='swap_pending' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5512'>
+          <var-decl name='non_pd_role_swap' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='swap_complete' type-id='f9fef04f' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='swap_status' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5856'>
+          <var-decl name='negotiated_rev' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='message_id' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5920'>
+          <var-decl name='caps_count' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='hard_reset_count' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5984'>
+          <var-decl name='pd_capable' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5992'>
+          <var-decl name='explicit_contract' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='rx_msgid' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6048'>
+          <var-decl name='sink_request' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='source_caps' type-id='1c69cda2' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6304'>
+          <var-decl name='nr_source_caps' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='sink_caps' type-id='1c69cda2' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6560'>
+          <var-decl name='nr_sink_caps' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='src_pdo' type-id='1c69cda2' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6816'>
+          <var-decl name='nr_src_pdo' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='snk_pdo' type-id='1c69cda2' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7072'>
+          <var-decl name='nr_snk_pdo' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='snk_vdo' type-id='5867ed7f' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='nr_snk_vdo' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7328'>
+          <var-decl name='operating_snk_mw' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='update_sink_caps' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7392'>
+          <var-decl name='current_limit' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='supply_voltage' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='psy' type-id='c0c93c9e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='psy_desc' type-id='6d39b2d0' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='usb_type' type-id='1f7f0095' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8352'>
+          <var-decl name='bist_request' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='vdm_state' type-id='da4a4188' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8416'>
+          <var-decl name='vdm_retries' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='vdo_data' type-id='1c69cda2' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8672'>
+          <var-decl name='vdo_count' type-id='f9b06939' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='vdo_retry' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8736'>
+          <var-decl name='pps_data' type-id='4ff0f7bc' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='pps_complete' type-id='f9fef04f' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='pps_pending' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9248'>
+          <var-decl name='pps_status' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='mode_data' type-id='1d816e22' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18880'>
+          <var-decl name='partner_altmode' type-id='6fcbfa84' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25024'>
+          <var-decl name='port_altmode' type-id='6fcbfa84' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31168'>
+          <var-decl name='max_wait' type-id='7359adad' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31232'>
+          <var-decl name='self_powered' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31296'>
+          <var-decl name='dentry' type-id='27675065' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31360'>
+          <var-decl name='logbuffer_lock' type-id='925167dc' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31616'>
+          <var-decl name='logbuffer_head' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31648'>
+          <var-decl name='logbuffer_tail' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31680'>
+          <var-decl name='logbuffer' type-id='bad1511f' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='330' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcpc_dev' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/usb/tcpm.h' line='123' column='1' id='3a8363f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='config' type-id='4682930f' visibility='default' filepath='include/linux/usb/tcpm.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/usb/tcpm.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='f581f1cf' visibility='default' filepath='include/linux/usb/tcpm.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_vbus' type-id='f581f1cf' visibility='default' filepath='include/linux/usb/tcpm.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_current_limit' type-id='f581f1cf' visibility='default' filepath='include/linux/usb/tcpm.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_cc' type-id='8a62cb71' visibility='default' filepath='include/linux/usb/tcpm.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_cc' type-id='fac661b7' visibility='default' filepath='include/linux/usb/tcpm.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_polarity' type-id='0123907b' visibility='default' filepath='include/linux/usb/tcpm.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_vconn' type-id='7f6ac72a' visibility='default' filepath='include/linux/usb/tcpm.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_vbus' type-id='7a202df3' visibility='default' filepath='include/linux/usb/tcpm.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_current_limit' type-id='f24f1c45' visibility='default' filepath='include/linux/usb/tcpm.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set_pd_rx' type-id='7f6ac72a' visibility='default' filepath='include/linux/usb/tcpm.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='set_roles' type-id='8ca76d9f' visibility='default' filepath='include/linux/usb/tcpm.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='start_toggling' type-id='926bf87a' visibility='default' filepath='include/linux/usb/tcpm.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='try_role' type-id='e5015ca6' visibility='default' filepath='include/linux/usb/tcpm.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='pd_transmit' type-id='cc0a6f53' visibility='default' filepath='include/linux/usb/tcpm.h' line='145' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcpc_config' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/usb/tcpm.h' line='67' column='1' id='a63ee284'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='src_pdo' type-id='aded214c' visibility='default' filepath='include/linux/usb/tcpm.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_src_pdo' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/tcpm.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='snk_pdo' type-id='aded214c' visibility='default' filepath='include/linux/usb/tcpm.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_snk_pdo' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/tcpm.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='snk_vdo' type-id='aded214c' visibility='default' filepath='include/linux/usb/tcpm.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nr_snk_vdo' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/tcpm.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='operating_snk_mw' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/tcpm.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='type' type-id='0a19b04e' visibility='default' filepath='include/linux/usb/tcpm.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='data' type-id='89aae82e' visibility='default' filepath='include/linux/usb/tcpm.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='default_role' type-id='ad61830a' visibility='default' filepath='include/linux/usb/tcpm.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='try_role_hw' type-id='b50a4934' visibility='default' filepath='include/linux/usb/tcpm.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='488'>
+          <var-decl name='self_powered' type-id='b50a4934' visibility='default' filepath='include/linux/usb/tcpm.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='alt_modes' type-id='064c3738' visibility='default' filepath='include/linux/usb/tcpm.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='typec_cc_status' filepath='include/linux/usb/tcpm.h' line='13' column='1' id='c2d135ef'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TYPEC_CC_OPEN' value='0'/>
+        <enumerator name='TYPEC_CC_RA' value='1'/>
+        <enumerator name='TYPEC_CC_RD' value='2'/>
+        <enumerator name='TYPEC_CC_RP_DEF' value='3'/>
+        <enumerator name='TYPEC_CC_RP_1_5' value='4'/>
+        <enumerator name='TYPEC_CC_RP_3_0' value='5'/>
+      </enum-decl>
+      <enum-decl name='typec_cc_polarity' filepath='include/linux/usb/tcpm.h' line='22' column='1' id='551eebc9'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TYPEC_POLARITY_CC1' value='0'/>
+        <enumerator name='TYPEC_POLARITY_CC2' value='1'/>
+      </enum-decl>
+      <enum-decl name='tcpm_transmit_type' filepath='include/linux/usb/tcpm.h' line='38' column='1' id='c2132904'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TCPC_TX_SOP' value='0'/>
+        <enumerator name='TCPC_TX_SOP_PRIME' value='1'/>
+        <enumerator name='TCPC_TX_SOP_PRIME_PRIME' value='2'/>
+        <enumerator name='TCPC_TX_SOP_DEBUG_PRIME' value='3'/>
+        <enumerator name='TCPC_TX_SOP_DEBUG_PRIME_PRIME' value='4'/>
+        <enumerator name='TCPC_TX_HARD_RESET' value='5'/>
+        <enumerator name='TCPC_TX_CABLE_RESET' value='6'/>
+        <enumerator name='TCPC_TX_BIST_MODE_2' value='7'/>
+      </enum-decl>
+      <class-decl name='pd_message' size-in-bits='240' is-struct='yes' visibility='default' filepath='include/linux/usb/pd.h' line='194' column='1' id='144ab5f9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='23119536' visibility='default' filepath='include/linux/usb/pd.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='' type-id='7ea82a00' visibility='default' filepath='include/linux/usb/pd.h' line='196' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='224' is-anonymous='yes' visibility='default' filepath='include/linux/usb/pd.h' line='196' column='1' id='7ea82a00'>
+        <data-member access='private'>
+          <var-decl name='payload' type-id='e369592a' visibility='default' filepath='include/linux/usb/pd.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ext_msg' type-id='9d90420f' visibility='default' filepath='include/linux/usb/pd.h' line='198' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='pd_chunked_ext_message_data' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/linux/usb/pd.h' line='183' column='1' id='9d90420f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='23119536' visibility='default' filepath='include/linux/usb/pd.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='data' type-id='50390288' visibility='default' filepath='include/linux/usb/pd.h' line='185' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='pd_msg_request' filepath='drivers/usb/typec/tcpm/tcpm.c' line='153' column='1' id='1d843e9c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PD_MSG_NONE' value='0'/>
+        <enumerator name='PD_MSG_CTRL_REJECT' value='1'/>
+        <enumerator name='PD_MSG_CTRL_WAIT' value='2'/>
+        <enumerator name='PD_MSG_CTRL_NOT_SUPP' value='3'/>
+        <enumerator name='PD_MSG_DATA_SINK_CAP' value='4'/>
+        <enumerator name='PD_MSG_DATA_SOURCE_CAP' value='5'/>
+      </enum-decl>
+      <enum-decl name='tcpm_state' filepath='drivers/usb/typec/tcpm/tcpm.c' line='134' column='1' id='c698cee4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='INVALID_STATE' value='0'/>
+        <enumerator name='TOGGLING' value='1'/>
+        <enumerator name='SRC_UNATTACHED' value='2'/>
+        <enumerator name='SRC_ATTACH_WAIT' value='3'/>
+        <enumerator name='SRC_ATTACHED' value='4'/>
+        <enumerator name='SRC_STARTUP' value='5'/>
+        <enumerator name='SRC_SEND_CAPABILITIES' value='6'/>
+        <enumerator name='SRC_SEND_CAPABILITIES_TIMEOUT' value='7'/>
+        <enumerator name='SRC_NEGOTIATE_CAPABILITIES' value='8'/>
+        <enumerator name='SRC_TRANSITION_SUPPLY' value='9'/>
+        <enumerator name='SRC_READY' value='10'/>
+        <enumerator name='SRC_WAIT_NEW_CAPABILITIES' value='11'/>
+        <enumerator name='SNK_UNATTACHED' value='12'/>
+        <enumerator name='SNK_ATTACH_WAIT' value='13'/>
+        <enumerator name='SNK_DEBOUNCED' value='14'/>
+        <enumerator name='SNK_ATTACHED' value='15'/>
+        <enumerator name='SNK_STARTUP' value='16'/>
+        <enumerator name='SNK_DISCOVERY' value='17'/>
+        <enumerator name='SNK_DISCOVERY_DEBOUNCE' value='18'/>
+        <enumerator name='SNK_DISCOVERY_DEBOUNCE_DONE' value='19'/>
+        <enumerator name='SNK_WAIT_CAPABILITIES' value='20'/>
+        <enumerator name='SNK_NEGOTIATE_CAPABILITIES' value='21'/>
+        <enumerator name='SNK_NEGOTIATE_PPS_CAPABILITIES' value='22'/>
+        <enumerator name='SNK_TRANSITION_SINK' value='23'/>
+        <enumerator name='SNK_TRANSITION_SINK_VBUS' value='24'/>
+        <enumerator name='SNK_READY' value='25'/>
+        <enumerator name='ACC_UNATTACHED' value='26'/>
+        <enumerator name='DEBUG_ACC_ATTACHED' value='27'/>
+        <enumerator name='AUDIO_ACC_ATTACHED' value='28'/>
+        <enumerator name='AUDIO_ACC_DEBOUNCE' value='29'/>
+        <enumerator name='HARD_RESET_SEND' value='30'/>
+        <enumerator name='HARD_RESET_START' value='31'/>
+        <enumerator name='SRC_HARD_RESET_VBUS_OFF' value='32'/>
+        <enumerator name='SRC_HARD_RESET_VBUS_ON' value='33'/>
+        <enumerator name='SNK_HARD_RESET_SINK_OFF' value='34'/>
+        <enumerator name='SNK_HARD_RESET_WAIT_VBUS' value='35'/>
+        <enumerator name='SNK_HARD_RESET_SINK_ON' value='36'/>
+        <enumerator name='SOFT_RESET' value='37'/>
+        <enumerator name='SOFT_RESET_SEND' value='38'/>
+        <enumerator name='DR_SWAP_ACCEPT' value='39'/>
+        <enumerator name='DR_SWAP_SEND' value='40'/>
+        <enumerator name='DR_SWAP_SEND_TIMEOUT' value='41'/>
+        <enumerator name='DR_SWAP_CANCEL' value='42'/>
+        <enumerator name='DR_SWAP_CHANGE_DR' value='43'/>
+        <enumerator name='PR_SWAP_ACCEPT' value='44'/>
+        <enumerator name='PR_SWAP_SEND' value='45'/>
+        <enumerator name='PR_SWAP_SEND_TIMEOUT' value='46'/>
+        <enumerator name='PR_SWAP_CANCEL' value='47'/>
+        <enumerator name='PR_SWAP_START' value='48'/>
+        <enumerator name='PR_SWAP_SRC_SNK_TRANSITION_OFF' value='49'/>
+        <enumerator name='PR_SWAP_SRC_SNK_SOURCE_OFF' value='50'/>
+        <enumerator name='PR_SWAP_SRC_SNK_SOURCE_OFF_CC_DEBOUNCED' value='51'/>
+        <enumerator name='PR_SWAP_SRC_SNK_SINK_ON' value='52'/>
+        <enumerator name='PR_SWAP_SNK_SRC_SINK_OFF' value='53'/>
+        <enumerator name='PR_SWAP_SNK_SRC_SOURCE_ON' value='54'/>
+        <enumerator name='PR_SWAP_SNK_SRC_SOURCE_ON_VBUS_RAMPED_UP' value='55'/>
+        <enumerator name='VCONN_SWAP_ACCEPT' value='56'/>
+        <enumerator name='VCONN_SWAP_SEND' value='57'/>
+        <enumerator name='VCONN_SWAP_SEND_TIMEOUT' value='58'/>
+        <enumerator name='VCONN_SWAP_CANCEL' value='59'/>
+        <enumerator name='VCONN_SWAP_START' value='60'/>
+        <enumerator name='VCONN_SWAP_WAIT_FOR_VCONN' value='61'/>
+        <enumerator name='VCONN_SWAP_TURN_ON_VCONN' value='62'/>
+        <enumerator name='VCONN_SWAP_TURN_OFF_VCONN' value='63'/>
+        <enumerator name='SNK_TRY' value='64'/>
+        <enumerator name='SNK_TRY_WAIT' value='65'/>
+        <enumerator name='SNK_TRY_WAIT_DEBOUNCE' value='66'/>
+        <enumerator name='SNK_TRY_WAIT_DEBOUNCE_CHECK_VBUS' value='67'/>
+        <enumerator name='SRC_TRYWAIT' value='68'/>
+        <enumerator name='SRC_TRYWAIT_DEBOUNCE' value='69'/>
+        <enumerator name='SRC_TRYWAIT_UNATTACHED' value='70'/>
+        <enumerator name='SRC_TRY' value='71'/>
+        <enumerator name='SRC_TRY_WAIT' value='72'/>
+        <enumerator name='SRC_TRY_DEBOUNCE' value='73'/>
+        <enumerator name='SNK_TRYWAIT' value='74'/>
+        <enumerator name='SNK_TRYWAIT_DEBOUNCE' value='75'/>
+        <enumerator name='SNK_TRYWAIT_VBUS' value='76'/>
+        <enumerator name='BIST_RX' value='77'/>
+        <enumerator name='GET_STATUS_SEND' value='78'/>
+        <enumerator name='GET_STATUS_SEND_TIMEOUT' value='79'/>
+        <enumerator name='GET_PPS_STATUS_SEND' value='80'/>
+        <enumerator name='GET_PPS_STATUS_SEND_TIMEOUT' value='81'/>
+        <enumerator name='ERROR_RECOVERY' value='82'/>
+        <enumerator name='PORT_RESET' value='83'/>
+        <enumerator name='PORT_RESET_WAIT_OFF' value='84'/>
+      </enum-decl>
+      <enum-decl name='tcpm_transmit_status' filepath='include/linux/usb/tcpm.h' line='32' column='1' id='a2f9e316'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TCPC_TX_SUCCESS' value='0'/>
+        <enumerator name='TCPC_TX_DISCARDED' value='1'/>
+        <enumerator name='TCPC_TX_FAILED' value='2'/>
+      </enum-decl>
+      <enum-decl name='vdm_states' filepath='drivers/usb/typec/tcpm/tcpm.c' line='142' column='1' id='da4a4188'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='VDM_STATE_ERR_BUSY' value='-3'/>
+        <enumerator name='VDM_STATE_ERR_SEND' value='-2'/>
+        <enumerator name='VDM_STATE_ERR_TMOUT' value='-1'/>
+        <enumerator name='VDM_STATE_DONE' value='0'/>
+        <enumerator name='VDM_STATE_READY' value='1'/>
+        <enumerator name='VDM_STATE_BUSY' value='2'/>
+        <enumerator name='VDM_STATE_WAIT_RSP_BUSY' value='3'/>
+      </enum-decl>
+      <class-decl name='pd_pps_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='184' column='1' id='4ff0f7bc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_volt' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_volt' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_curr' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='out_volt' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='op_curr' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='supported' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='active' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='191' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pd_mode_data' size-in-bits='9568' is-struct='yes' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='176' column='1' id='1d816e22'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='svid_index' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nsvids' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='svids' type-id='42c6815a' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='altmodes' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='altmode_desc' type-id='589abf66' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='181' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='144ab5f9' const='yes' id='d9c5862c'/>
+      <pointer-type-def type-id='d9c5862c' size-in-bits='64' id='d7f1fb72'/>
+      <qualified-type-def type-id='a63ee284' const='yes' id='1843063f'/>
+      <pointer-type-def type-id='1843063f' size-in-bits='64' id='4682930f'/>
+      <pointer-type-def type-id='cb593833' size-in-bits='64' id='f581f1cf'/>
+      <pointer-type-def type-id='e1106ed7' size-in-bits='64' id='cc0a6f53'/>
+      <pointer-type-def type-id='e1d380a7' size-in-bits='64' id='0123907b'/>
+      <pointer-type-def type-id='198938b5' size-in-bits='64' id='8a62cb71'/>
+      <pointer-type-def type-id='aeac61b0' size-in-bits='64' id='926bf87a'/>
+      <pointer-type-def type-id='e073b6fc' size-in-bits='64' id='e5015ca6'/>
+      <pointer-type-def type-id='1fbc513b' size-in-bits='64' id='fac661b7'/>
+      <pointer-type-def type-id='daf63770' size-in-bits='64' id='7f6ac72a'/>
+      <pointer-type-def type-id='a08a663b' size-in-bits='64' id='8ca76d9f'/>
+      <pointer-type-def type-id='7adec5ff' size-in-bits='64' id='7a202df3'/>
+      <pointer-type-def type-id='e6814f11' size-in-bits='64' id='f24f1c45'/>
+      <pointer-type-def type-id='3a8363f1' size-in-bits='64' id='15b1f129'/>
+      <pointer-type-def type-id='902061bb' size-in-bits='64' id='426e425b'/>
+      <pointer-type-def type-id='c2d135ef' size-in-bits='64' id='741cc96e'/>
+      <function-decl name='tcpm_register_port' mangled-name='tcpm_register_port' filepath='drivers/usb/typec/tcpm/tcpm.c' line='4750' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcpm_register_port'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/typec/tcpm/tcpm.c' line='4750' column='1'/>
+        <parameter type-id='15b1f129' name='tcpc' filepath='drivers/usb/typec/tcpm/tcpm.c' line='4750' column='1'/>
+        <return type-id='426e425b'/>
+      </function-decl>
+      <function-decl name='tcpm_pd_transmit_complete' mangled-name='tcpm_pd_transmit_complete' filepath='drivers/usb/typec/tcpm/tcpm.c' line='641' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcpm_pd_transmit_complete'>
+        <parameter type-id='426e425b' name='port' filepath='drivers/usb/typec/tcpm/tcpm.c' line='641' column='1'/>
+        <parameter type-id='a2f9e316' name='status' filepath='drivers/usb/typec/tcpm/tcpm.c' line='642' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tcpm_pd_receive' mangled-name='tcpm_pd_receive' filepath='drivers/usb/typec/tcpm/tcpm.c' line='1991' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcpm_pd_receive'>
+        <parameter type-id='426e425b' name='port' filepath='drivers/usb/typec/tcpm/tcpm.c' line='1991' column='1'/>
+        <parameter type-id='d7f1fb72' name='msg' filepath='drivers/usb/typec/tcpm/tcpm.c' line='1991' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tcpm_cc_change' mangled-name='tcpm_cc_change' filepath='drivers/usb/typec/tcpm/tcpm.c' line='3966' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcpm_cc_change'>
+        <parameter type-id='426e425b' name='port' filepath='drivers/usb/typec/tcpm/tcpm.c' line='3966' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tcpm_vbus_change' mangled-name='tcpm_vbus_change' filepath='drivers/usb/typec/tcpm/tcpm.c' line='3975' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcpm_vbus_change'>
+        <parameter type-id='426e425b' name='port' filepath='drivers/usb/typec/tcpm/tcpm.c' line='3975' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tcpm_pd_hard_reset' mangled-name='tcpm_pd_hard_reset' filepath='drivers/usb/typec/tcpm/tcpm.c' line='3984' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcpm_pd_hard_reset'>
+        <parameter type-id='426e425b' name='port' filepath='drivers/usb/typec/tcpm/tcpm.c' line='3984' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tcpm_tcpc_reset' mangled-name='tcpm_tcpc_reset' filepath='drivers/usb/typec/tcpm/tcpm.c' line='4386' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcpm_tcpc_reset'>
+        <parameter type-id='426e425b' name='port' filepath='drivers/usb/typec/tcpm/tcpm.c' line='4386' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_role_switch_get' mangled-name='usb_role_switch_get' filepath='include/linux/usb/role.h' line='49' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_role_switch_get'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='3e3cd44f'/>
+      </function-decl>
+      <function-decl name='usb_role_switch_put' mangled-name='usb_role_switch_put' filepath='include/linux/usb/role.h' line='51' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_role_switch_put'>
+        <parameter type-id='3e3cd44f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tcpm_unregister_port' mangled-name='tcpm_unregister_port' filepath='drivers/usb/typec/tcpm/tcpm.c' line='4860' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcpm_unregister_port'>
+        <parameter type-id='426e425b' name='port' filepath='drivers/usb/typec/tcpm/tcpm.c' line='4860' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_role_switch_set_role' mangled-name='usb_role_switch_set_role' filepath='include/linux/usb/role.h' line='47' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_role_switch_set_role'>
+        <parameter type-id='3e3cd44f'/>
+        <parameter type-id='c675b073'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='cb593833'>
+        <parameter type-id='15b1f129'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e1106ed7'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='c2132904'/>
+        <parameter type-id='d7f1fb72'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e1d380a7'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='551eebc9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='198938b5'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='c2d135ef'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aeac61b0'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='0a19b04e'/>
+        <parameter type-id='c2d135ef'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e073b6fc'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1fbc513b'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='741cc96e'/>
+        <parameter type-id='741cc96e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='daf63770'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a08a663b'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='ad61830a'/>
+        <parameter type-id='e453a0cb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7adec5ff'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e6814f11'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/vhost/vsock.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='32' id='09001d3c'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='vsock_transport' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/net/af_vsock.h' line='102' column='1' id='7a801157'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/net/af_vsock.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init' type-id='3c29ea97' visibility='default' filepath='include/net/af_vsock.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destruct' type-id='ef2258e1' visibility='default' filepath='include/net/af_vsock.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='release' type-id='ef2258e1' visibility='default' filepath='include/net/af_vsock.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cancel_pkt' type-id='19880752' visibility='default' filepath='include/net/af_vsock.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='connect' type-id='19880752' visibility='default' filepath='include/net/af_vsock.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dgram_bind' type-id='99dd37d7' visibility='default' filepath='include/net/af_vsock.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dgram_dequeue' type-id='842e09cd' visibility='default' filepath='include/net/af_vsock.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dgram_enqueue' type-id='353a4421' visibility='default' filepath='include/net/af_vsock.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dgram_allow' type-id='a8a77b69' visibility='default' filepath='include/net/af_vsock.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='stream_dequeue' type-id='99dd2b5e' visibility='default' filepath='include/net/af_vsock.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='stream_enqueue' type-id='42dad747' visibility='default' filepath='include/net/af_vsock.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='stream_has_data' type-id='1db22091' visibility='default' filepath='include/net/af_vsock.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='stream_has_space' type-id='1db22091' visibility='default' filepath='include/net/af_vsock.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='stream_rcvhiwat' type-id='84a80557' visibility='default' filepath='include/net/af_vsock.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='stream_is_active' type-id='e4dceff4' visibility='default' filepath='include/net/af_vsock.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='stream_allow' type-id='a8a77b69' visibility='default' filepath='include/net/af_vsock.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='notify_poll_in' type-id='7b5a288b' visibility='default' filepath='include/net/af_vsock.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='notify_poll_out' type-id='7b5a288b' visibility='default' filepath='include/net/af_vsock.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='notify_recv_init' type-id='bebbea3f' visibility='default' filepath='include/net/af_vsock.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='notify_recv_pre_block' type-id='bebbea3f' visibility='default' filepath='include/net/af_vsock.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='notify_recv_pre_dequeue' type-id='bebbea3f' visibility='default' filepath='include/net/af_vsock.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='notify_recv_post_dequeue' type-id='2ba71990' visibility='default' filepath='include/net/af_vsock.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='notify_send_init' type-id='bfa7bda0' visibility='default' filepath='include/net/af_vsock.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='notify_send_pre_block' type-id='bfa7bda0' visibility='default' filepath='include/net/af_vsock.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='notify_send_pre_enqueue' type-id='bfa7bda0' visibility='default' filepath='include/net/af_vsock.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='notify_send_post_enqueue' type-id='61ae4386' visibility='default' filepath='include/net/af_vsock.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='notify_buffer_size' type-id='1ee1b664' visibility='default' filepath='include/net/af_vsock.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='shutdown' type-id='f4617859' visibility='default' filepath='include/net/af_vsock.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='get_local_cid' type-id='d91eb3a5' visibility='default' filepath='include/net/af_vsock.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vsock_sock' size-in-bits='11456' is-struct='yes' visibility='default' filepath='include/net/af_vsock.h' line='27' column='1' id='f0c6a3fa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sk' type-id='a240f41e' visibility='default' filepath='include/net/af_vsock.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='transport' type-id='c6c5bd96' visibility='default' filepath='include/net/af_vsock.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='local_addr' type-id='d15eade2' visibility='default' filepath='include/net/af_vsock.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='remote_addr' type-id='d15eade2' visibility='default' filepath='include/net/af_vsock.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='bound_table' type-id='72f469ec' visibility='default' filepath='include/net/af_vsock.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='connected_table' type-id='72f469ec' visibility='default' filepath='include/net/af_vsock.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='trusted' type-id='b50a4934' visibility='default' filepath='include/net/af_vsock.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7240'>
+          <var-decl name='cached_peer_allow_dgram' type-id='b50a4934' visibility='default' filepath='include/net/af_vsock.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7264'>
+          <var-decl name='cached_peer' type-id='19c2251e' visibility='default' filepath='include/net/af_vsock.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='owner' type-id='bc33861a' visibility='default' filepath='include/net/af_vsock.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='connect_timeout' type-id='bd54fe1a' visibility='default' filepath='include/net/af_vsock.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='listener' type-id='f772df6e' visibility='default' filepath='include/net/af_vsock.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='pending_links' type-id='72f469ec' visibility='default' filepath='include/net/af_vsock.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='accept_queue' type-id='72f469ec' visibility='default' filepath='include/net/af_vsock.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='rejected' type-id='b50a4934' visibility='default' filepath='include/net/af_vsock.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='connect_work' type-id='5ad6e0ef' visibility='default' filepath='include/net/af_vsock.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='pending_work' type-id='5ad6e0ef' visibility='default' filepath='include/net/af_vsock.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='close_work' type-id='5ad6e0ef' visibility='default' filepath='include/net/af_vsock.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='close_work_scheduled' type-id='b50a4934' visibility='default' filepath='include/net/af_vsock.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11104'>
+          <var-decl name='peer_shutdown' type-id='19c2251e' visibility='default' filepath='include/net/af_vsock.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='sent_request' type-id='b50a4934' visibility='default' filepath='include/net/af_vsock.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11144'>
+          <var-decl name='ignore_connecting_rst' type-id='b50a4934' visibility='default' filepath='include/net/af_vsock.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='buffer_size' type-id='91ce1af9' visibility='default' filepath='include/net/af_vsock.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='buffer_min_size' type-id='91ce1af9' visibility='default' filepath='include/net/af_vsock.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='buffer_max_size' type-id='91ce1af9' visibility='default' filepath='include/net/af_vsock.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='trans' type-id='eaa32e2f' visibility='default' filepath='include/net/af_vsock.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sockaddr_vm' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/vm_sockets.h' line='144' column='1' id='d15eade2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='svm_family' type-id='93d679c6' visibility='default' filepath='include/uapi/linux/vm_sockets.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='svm_reserved1' type-id='8efea9e5' visibility='default' filepath='include/uapi/linux/vm_sockets.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='svm_port' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/vm_sockets.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='svm_cid' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/vm_sockets.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='svm_zero' type-id='09001d3c' visibility='default' filepath='include/uapi/linux/vm_sockets.h' line='149' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vsock_transport_recv_notify_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/af_vsock.h' line='83' column='1' id='5e9a41e1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data1' type-id='91ce1af9' visibility='default' filepath='include/net/af_vsock.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data2' type-id='91ce1af9' visibility='default' filepath='include/net/af_vsock.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='notify_on_block' type-id='b50a4934' visibility='default' filepath='include/net/af_vsock.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vsock_transport_send_notify_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/af_vsock.h' line='89' column='1' id='19810f43'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data1' type-id='91ce1af9' visibility='default' filepath='include/net/af_vsock.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data2' type-id='91ce1af9' visibility='default' filepath='include/net/af_vsock.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='virtio_vsock_pkt' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/virtio_vsock.h' line='41' column='1' id='5ebf3387'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hdr' type-id='c96be70a' visibility='default' filepath='include/linux/virtio_vsock.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/virtio_vsock.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='vsk' type-id='ecb0ce18' visibility='default' filepath='include/linux/virtio_vsock.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='buf' type-id='eaa32e2f' visibility='default' filepath='include/linux/virtio_vsock.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='buf_len' type-id='19c2251e' visibility='default' filepath='include/linux/virtio_vsock.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='len' type-id='19c2251e' visibility='default' filepath='include/linux/virtio_vsock.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='off' type-id='19c2251e' visibility='default' filepath='include/linux/virtio_vsock.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='reply' type-id='b50a4934' visibility='default' filepath='include/linux/virtio_vsock.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='virtio_vsock_hdr' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='53' column='1' id='c96be70a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='src_cid' type-id='a30e8d1f' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dst_cid' type-id='a30e8d1f' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='src_port' type-id='2f162548' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='dst_port' type-id='2f162548' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='len' type-id='2f162548' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='type' type-id='23119536' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='op' type-id='23119536' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='2f162548' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='buf_alloc' type-id='2f162548' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fwd_cnt' type-id='2f162548' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__le64' type-id='d3130597' filepath='include/uapi/linux/types.h' line='33' column='1' id='a30e8d1f'/>
+      <class-decl name='virtio_transport' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/linux/virtio_vsock.h' line='64' column='1' id='22bb2e78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='transport' type-id='7a801157' visibility='default' filepath='include/linux/virtio_vsock.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='send_pkt' type-id='8c4ea251' visibility='default' filepath='include/linux/virtio_vsock.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='7a801157' const='yes' id='757da1f8'/>
+      <pointer-type-def type-id='757da1f8' size-in-bits='64' id='c6c5bd96'/>
+      <pointer-type-def type-id='45af6e9d' size-in-bits='64' id='8c4ea251'/>
+      <pointer-type-def type-id='24e53f78' size-in-bits='64' id='19880752'/>
+      <pointer-type-def type-id='17dad7c5' size-in-bits='64' id='f4617859'/>
+      <pointer-type-def type-id='b8e69071' size-in-bits='64' id='842e09cd'/>
+      <pointer-type-def type-id='f58c1a1b' size-in-bits='64' id='99dd37d7'/>
+      <pointer-type-def type-id='dc8bbdd5' size-in-bits='64' id='353a4421'/>
+      <pointer-type-def type-id='ebf8e47f' size-in-bits='64' id='7b5a288b'/>
+      <pointer-type-def type-id='0b5c3086' size-in-bits='64' id='2ba71990'/>
+      <pointer-type-def type-id='4c1698f3' size-in-bits='64' id='bebbea3f'/>
+      <pointer-type-def type-id='4aa6929c' size-in-bits='64' id='61ae4386'/>
+      <pointer-type-def type-id='01bd77f3' size-in-bits='64' id='3c29ea97'/>
+      <pointer-type-def type-id='aecc739e' size-in-bits='64' id='bfa7bda0'/>
+      <pointer-type-def type-id='d15eade2' size-in-bits='64' id='b6a6ca60'/>
+      <pointer-type-def type-id='d865022d' size-in-bits='64' id='a8a77b69'/>
+      <pointer-type-def type-id='6acd3f8a' size-in-bits='64' id='e4dceff4'/>
+      <pointer-type-def type-id='841ff6b5' size-in-bits='64' id='1db22091'/>
+      <pointer-type-def type-id='8e71aea3' size-in-bits='64' id='42dad747'/>
+      <pointer-type-def type-id='de28612c' size-in-bits='64' id='99dd2b5e'/>
+      <pointer-type-def type-id='428b7011' size-in-bits='64' id='d91eb3a5'/>
+      <pointer-type-def type-id='c6c057c3' size-in-bits='64' id='84a80557'/>
+      <pointer-type-def type-id='22bb2e78' size-in-bits='64' id='2bfa174e'/>
+      <pointer-type-def type-id='5ebf3387' size-in-bits='64' id='ac22ee2f'/>
+      <pointer-type-def type-id='418a6dbd' size-in-bits='64' id='ef2258e1'/>
+      <pointer-type-def type-id='8e3bf7d2' size-in-bits='64' id='1ee1b664'/>
+      <pointer-type-def type-id='f0c6a3fa' size-in-bits='64' id='ecb0ce18'/>
+      <pointer-type-def type-id='5e9a41e1' size-in-bits='64' id='c777e389'/>
+      <pointer-type-def type-id='19810f43' size-in-bits='64' id='6f074813'/>
+      <function-decl name='vsock_core_unregister' mangled-name='vsock_core_unregister' filepath='include/net/af_vsock.h' line='168' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vsock_core_unregister'>
+        <parameter type-id='c6c5bd96'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtio_transport_free_pkt' mangled-name='virtio_transport_free_pkt' filepath='include/linux/virtio_vsock.h' line='142' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_free_pkt'>
+        <parameter type-id='ac22ee2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vsock_for_each_connected_socket' mangled-name='vsock_for_each_connected_socket' filepath='include/net/af_vsock.h' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vsock_for_each_connected_socket'>
+        <parameter type-id='841969d0'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iov_iter_init' mangled-name='iov_iter_init' filepath='include/linux/uio.h' line='216' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iov_iter_init'>
+        <parameter type-id='4fa10f9e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='2c556848'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtio_transport_deliver_tap_pkt' mangled-name='virtio_transport_deliver_tap_pkt' filepath='include/linux/virtio_vsock.h' line='146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_deliver_tap_pkt'>
+        <parameter type-id='ac22ee2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtio_transport_recv_pkt' mangled-name='virtio_transport_recv_pkt' filepath='include/linux/virtio_vsock.h' line='140' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_recv_pkt'>
+        <parameter type-id='2bfa174e'/>
+        <parameter type-id='ac22ee2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vsock_core_register' mangled-name='vsock_core_register' filepath='include/net/af_vsock.h' line='167' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vsock_core_register'>
+        <parameter type-id='c6c5bd96'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='45af6e9d'>
+        <parameter type-id='ac22ee2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24e53f78'>
+        <parameter type-id='ecb0ce18'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='17dad7c5'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b8e69071'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='6b9b777a'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f58c1a1b'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='b6a6ca60'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dc8bbdd5'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='b6a6ca60'/>
+        <parameter type-id='6b9b777a'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ebf8e47f'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='d8e6b335'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0b5c3086'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='79a0948f'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='c777e389'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4c1698f3'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='c777e389'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4aa6929c'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='79a0948f'/>
+        <parameter type-id='6f074813'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='01bd77f3'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='ecb0ce18'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aecc739e'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='6f074813'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d865022d'>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6acd3f8a'>
+        <parameter type-id='ecb0ce18'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='841ff6b5'>
+        <parameter type-id='ecb0ce18'/>
+        <return type-id='9b7c55ef'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8e71aea3'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='6b9b777a'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='de28612c'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='6b9b777a'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c6c057c3'>
+        <parameter type-id='ecb0ce18'/>
+        <return type-id='91ce1af9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='418a6dbd'>
+        <parameter type-id='ecb0ce18'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8e3bf7d2'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/video/backlight/backlight.c' language='LANG_C89'>
+      <function-decl name='backlight_device_register' mangled-name='backlight_device_register' filepath='drivers/video/backlight/backlight.c' line='351' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='backlight_device_register'>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/video/backlight/backlight.c' line='351' column='1'/>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/video/backlight/backlight.c' line='352' column='1'/>
+        <parameter type-id='eaa32e2f' name='devdata' filepath='drivers/video/backlight/backlight.c' line='352' column='1'/>
+        <parameter type-id='a3d6b1c0' name='ops' filepath='drivers/video/backlight/backlight.c' line='352' column='1'/>
+        <parameter type-id='f46152e7' name='props' filepath='drivers/video/backlight/backlight.c' line='353' column='1'/>
+        <return type-id='7a76d041'/>
+      </function-decl>
+      <function-decl name='backlight_device_set_brightness' mangled-name='backlight_device_set_brightness' filepath='drivers/video/backlight/backlight.c' line='180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='backlight_device_set_brightness'>
+        <parameter type-id='7a76d041' name='bd' filepath='drivers/video/backlight/backlight.c' line='180' column='1'/>
+        <parameter type-id='7359adad' name='brightness' filepath='drivers/video/backlight/backlight.c' line='181' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='backlight_device_get_by_type' mangled-name='backlight_device_get_by_type' filepath='drivers/video/backlight/backlight.c' line='417' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='backlight_device_get_by_type'>
+        <parameter type-id='e7dc2d8e' name='type' filepath='drivers/video/backlight/backlight.c' line='417' column='1'/>
+        <return type-id='7a76d041'/>
+      </function-decl>
+      <function-decl name='backlight_device_unregister' mangled-name='backlight_device_unregister' filepath='drivers/video/backlight/backlight.c' line='441' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='backlight_device_unregister'>
+        <parameter type-id='7a76d041' name='bd' filepath='drivers/video/backlight/backlight.c' line='441' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_find_backlight_by_node' mangled-name='of_find_backlight_by_node' filepath='drivers/video/backlight/backlight.c' line='592' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_backlight_by_node'>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/video/backlight/backlight.c' line='592' column='1'/>
+        <return type-id='7a76d041'/>
+      </function-decl>
+      <pointer-type-def type-id='a858ced9' size-in-bits='64' id='7a76d041'/>
+      <pointer-type-def type-id='4b349f6a' size-in-bits='64' id='a3d6b1c0'/>
+      <pointer-type-def type-id='28b68df7' size-in-bits='64' id='f46152e7'/>
+      <enum-decl name='backlight_type' filepath='include/linux/backlight.h' line='37' column='1' id='e7dc2d8e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BACKLIGHT_RAW' value='1'/>
+        <enumerator name='BACKLIGHT_PLATFORM' value='2'/>
+        <enumerator name='BACKLIGHT_FIRMWARE' value='3'/>
+        <enumerator name='BACKLIGHT_TYPE_MAX' value='4'/>
+      </enum-decl>
+      <qualified-type-def type-id='69a7508d' const='yes' id='4b349f6a'/>
+      <qualified-type-def type-id='8802968a' const='yes' id='28b68df7'/>
+      <class-decl name='backlight_device' size-in-bits='8832' is-struct='yes' visibility='default' filepath='include/linux/backlight.h' line='97' column='1' id='a858ced9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='props' type-id='8802968a' visibility='default' filepath='include/linux/backlight.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='update_lock' type-id='925167dc' visibility='default' filepath='include/linux/backlight.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ops_lock' type-id='925167dc' visibility='default' filepath='include/linux/backlight.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ops' type-id='a3d6b1c0' visibility='default' filepath='include/linux/backlight.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='fb_notif' type-id='9b08f7cd' visibility='default' filepath='include/linux/backlight.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/backlight.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/backlight.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='fb_bl_on' type-id='6e32320a' visibility='default' filepath='include/linux/backlight.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='use_count' type-id='95e97e5e' visibility='default' filepath='include/linux/backlight.h' line='121' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='b50a4934' size-in-bits='256' id='6e32320a'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <class-decl name='backlight_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/backlight.h' line='58' column='1' id='69a7508d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='options' type-id='f0981eeb' visibility='default' filepath='include/linux/backlight.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='update_status' type-id='53f7c7e3' visibility='default' filepath='include/linux/backlight.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_brightness' type-id='53f7c7e3' visibility='default' filepath='include/linux/backlight.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='check_fb' type-id='317f203e' visibility='default' filepath='include/linux/backlight.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='backlight_properties' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/linux/backlight.h' line='74' column='1' id='8802968a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='brightness' type-id='95e97e5e' visibility='default' filepath='include/linux/backlight.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_brightness' type-id='95e97e5e' visibility='default' filepath='include/linux/backlight.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='power' type-id='95e97e5e' visibility='default' filepath='include/linux/backlight.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fb_blank' type-id='95e97e5e' visibility='default' filepath='include/linux/backlight.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='e7dc2d8e' visibility='default' filepath='include/linux/backlight.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='state' type-id='f0981eeb' visibility='default' filepath='include/linux/backlight.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='scale' type-id='15b3610c' visibility='default' filepath='include/linux/backlight.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='backlight_scale' filepath='include/linux/backlight.h' line='49' column='1' id='15b3610c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BACKLIGHT_SCALE_UNKNOWN' value='0'/>
+        <enumerator name='BACKLIGHT_SCALE_LINEAR' value='1'/>
+        <enumerator name='BACKLIGHT_SCALE_NON_LINEAR' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='fb246cd7' size-in-bits='64' id='53f7c7e3'/>
+      <pointer-type-def type-id='47a16dfc' size-in-bits='64' id='317f203e'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/video/backlight/generic_bl.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='d315442e' size-in-bits='32' id='810b4a17'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='128' id='3fa29bab'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='112' id='579c7c75'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='87647851' size-in-bits='infinite' id='f13afa51'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b50a4934' size-in-bits='256' id='6e32320a'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <class-decl name='backlight_device' size-in-bits='8832' is-struct='yes' visibility='default' filepath='include/linux/backlight.h' line='97' column='1' id='a858ced9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='props' type-id='8802968a' visibility='default' filepath='include/linux/backlight.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='update_lock' type-id='925167dc' visibility='default' filepath='include/linux/backlight.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ops_lock' type-id='925167dc' visibility='default' filepath='include/linux/backlight.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ops' type-id='a3d6b1c0' visibility='default' filepath='include/linux/backlight.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='fb_notif' type-id='9b08f7cd' visibility='default' filepath='include/linux/backlight.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/backlight.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/backlight.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='fb_bl_on' type-id='6e32320a' visibility='default' filepath='include/linux/backlight.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='use_count' type-id='95e97e5e' visibility='default' filepath='include/linux/backlight.h' line='121' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='backlight_properties' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/linux/backlight.h' line='74' column='1' id='8802968a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='brightness' type-id='95e97e5e' visibility='default' filepath='include/linux/backlight.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_brightness' type-id='95e97e5e' visibility='default' filepath='include/linux/backlight.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='power' type-id='95e97e5e' visibility='default' filepath='include/linux/backlight.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fb_blank' type-id='95e97e5e' visibility='default' filepath='include/linux/backlight.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='e7dc2d8e' visibility='default' filepath='include/linux/backlight.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='state' type-id='f0981eeb' visibility='default' filepath='include/linux/backlight.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='scale' type-id='15b3610c' visibility='default' filepath='include/linux/backlight.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='backlight_type' filepath='include/linux/backlight.h' line='37' column='1' id='e7dc2d8e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BACKLIGHT_RAW' value='1'/>
+        <enumerator name='BACKLIGHT_PLATFORM' value='2'/>
+        <enumerator name='BACKLIGHT_FIRMWARE' value='3'/>
+        <enumerator name='BACKLIGHT_TYPE_MAX' value='4'/>
+      </enum-decl>
+      <enum-decl name='backlight_scale' filepath='include/linux/backlight.h' line='49' column='1' id='15b3610c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BACKLIGHT_SCALE_UNKNOWN' value='0'/>
+        <enumerator name='BACKLIGHT_SCALE_LINEAR' value='1'/>
+        <enumerator name='BACKLIGHT_SCALE_NON_LINEAR' value='2'/>
+      </enum-decl>
+      <class-decl name='backlight_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/backlight.h' line='58' column='1' id='69a7508d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='options' type-id='f0981eeb' visibility='default' filepath='include/linux/backlight.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='update_status' type-id='53f7c7e3' visibility='default' filepath='include/linux/backlight.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_brightness' type-id='53f7c7e3' visibility='default' filepath='include/linux/backlight.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='check_fb' type-id='317f203e' visibility='default' filepath='include/linux/backlight.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_info' size-in-bits='6272' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='437' column='1' id='f546887a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/fb.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='node' type-id='95e97e5e' visibility='default' filepath='include/linux/fb.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/fb.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fbcon_rotate_hint' type-id='95e97e5e' visibility='default' filepath='include/linux/fb.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/fb.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mm_lock' type-id='925167dc' visibility='default' filepath='include/linux/fb.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='var' type-id='87e42d48' visibility='default' filepath='include/linux/fb.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='fix' type-id='1cead55a' visibility='default' filepath='include/linux/fb.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='monspecs' type-id='ee529a90' visibility='default' filepath='include/linux/fb.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='queue' type-id='ef9025d0' visibility='default' filepath='include/linux/fb.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='pixmap' type-id='0a45c8ef' visibility='default' filepath='include/linux/fb.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='sprite' type-id='0a45c8ef' visibility='default' filepath='include/linux/fb.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='cmap' type-id='be9adbe3' visibility='default' filepath='include/linux/fb.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='modelist' type-id='72f469ec' visibility='default' filepath='include/linux/fb.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='mode' type-id='c03076ec' visibility='default' filepath='include/linux/fb.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='fbops' type-id='33dff390' visibility='default' filepath='include/linux/fb.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='device' type-id='fa0b179b' visibility='default' filepath='include/linux/fb.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/fb.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='class_flag' type-id='95e97e5e' visibility='default' filepath='include/linux/fb.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='' type-id='145b6d9f' visibility='default' filepath='include/linux/fb.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='screen_size' type-id='7359adad' visibility='default' filepath='include/linux/fb.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='pseudo_palette' type-id='eaa32e2f' visibility='default' filepath='include/linux/fb.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='state' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='fbcon_par' type-id='eaa32e2f' visibility='default' filepath='include/linux/fb.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='par' type-id='eaa32e2f' visibility='default' filepath='include/linux/fb.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='apertures' type-id='3dc7db80' visibility='default' filepath='include/linux/fb.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='skip_vt_switch' type-id='b50a4934' visibility='default' filepath='include/linux/fb.h' line='503' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_var_screeninfo' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='241' column='1' id='87e42d48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xres' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='yres' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='xres_virtual' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='yres_virtual' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='xoffset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='yoffset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bits_per_pixel' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='grayscale' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='red' type-id='2d123a1f' visibility='default' filepath='include/uapi/linux/fb.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='green' type-id='2d123a1f' visibility='default' filepath='include/uapi/linux/fb.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='blue' type-id='2d123a1f' visibility='default' filepath='include/uapi/linux/fb.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='transp' type-id='2d123a1f' visibility='default' filepath='include/uapi/linux/fb.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='nonstd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='activate' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='accel_flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='pixclock' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='left_margin' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='right_margin' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='upper_margin' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='lower_margin' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hsync_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='vsync_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='sync' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='vmode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rotate' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='colorspace' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='reserved' type-id='3fa29bab' visibility='default' filepath='include/uapi/linux/fb.h' line='278' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_bitfield' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='188' column='1' id='2d123a1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='length' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='msb_right' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='191' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_fix_screeninfo' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='157' column='1' id='1cead55a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/fb.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='smem_start' type-id='7359adad' visibility='default' filepath='include/uapi/linux/fb.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='smem_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='type_aux' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='visual' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xpanstep' type-id='d315442e' visibility='default' filepath='include/uapi/linux/fb.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='ypanstep' type-id='d315442e' visibility='default' filepath='include/uapi/linux/fb.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='ywrapstep' type-id='d315442e' visibility='default' filepath='include/uapi/linux/fb.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='line_length' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mmio_start' type-id='7359adad' visibility='default' filepath='include/uapi/linux/fb.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mmio_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='accel' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='capabilities' type-id='d315442e' visibility='default' filepath='include/uapi/linux/fb.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='592'>
+          <var-decl name='reserved' type-id='810b4a17' visibility='default' filepath='include/uapi/linux/fb.h' line='175' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_monspecs' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='63' column='1' id='ee529a90'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chroma' type-id='1c76a224' visibility='default' filepath='include/linux/fb.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='modedb' type-id='c03076ec' visibility='default' filepath='include/linux/fb.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='manufacturer' type-id='c213d3d4' visibility='default' filepath='include/linux/fb.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='monitor' type-id='579c7c75' visibility='default' filepath='include/linux/fb.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='serial_no' type-id='579c7c75' visibility='default' filepath='include/linux/fb.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ascii' type-id='579c7c75' visibility='default' filepath='include/linux/fb.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='modedb_len' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='model' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='serial' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='year' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='week' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='hfmin' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='hfmax' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='dclkmin' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dclkmax' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='input' type-id='d315442e' visibility='default' filepath='include/linux/fb.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='dpms' type-id='d315442e' visibility='default' filepath='include/linux/fb.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='signal' type-id='d315442e' visibility='default' filepath='include/linux/fb.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='vfmin' type-id='d315442e' visibility='default' filepath='include/linux/fb.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='vfmax' type-id='d315442e' visibility='default' filepath='include/linux/fb.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1072'>
+          <var-decl name='gamma' type-id='d315442e' visibility='default' filepath='include/linux/fb.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='gtf' type-id='d315442e' visibility='default' filepath='include/linux/fb.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1104'>
+          <var-decl name='misc' type-id='d315442e' visibility='default' filepath='include/linux/fb.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='version' type-id='8f048e17' visibility='default' filepath='include/linux/fb.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1128'>
+          <var-decl name='revision' type-id='8f048e17' visibility='default' filepath='include/linux/fb.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1136'>
+          <var-decl name='max_x' type-id='8f048e17' visibility='default' filepath='include/linux/fb.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1144'>
+          <var-decl name='max_y' type-id='8f048e17' visibility='default' filepath='include/linux/fb.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_chroma' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='52' column='1' id='1c76a224'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='redx' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='greenx' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bluex' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='whitex' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='redy' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='greeny' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bluey' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='whitey' type-id='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_videomode' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='765' column='1' id='e3dece26'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/fb.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='refresh' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='xres' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='yres' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='pixclock' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='left_margin' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='right_margin' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='upper_margin' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='lower_margin' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hsync_len' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='vsync_len' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sync' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='vmode' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flag' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='779' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_pixmap' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='185' column='1' id='0a45c8ef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='8bff8096' visibility='default' filepath='include/linux/fb.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='offset' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buf_align' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='scan_align' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='access_align' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='blit_x' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='blit_y' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='writeio' type-id='888567bf' visibility='default' filepath='include/linux/fb.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='readio' type-id='888567bf' visibility='default' filepath='include/linux/fb.h' line='199' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_cmap' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='281' column='1' id='be9adbe3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='red' type-id='2e5e3725' visibility='default' filepath='include/uapi/linux/fb.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='green' type-id='2e5e3725' visibility='default' filepath='include/uapi/linux/fb.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='blue' type-id='2e5e3725' visibility='default' filepath='include/uapi/linux/fb.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='transp' type-id='2e5e3725' visibility='default' filepath='include/uapi/linux/fb.h' line='287' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='228' column='1' id='88ac6962'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/fb.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fb_open' type-id='5173cfa7' visibility='default' filepath='include/linux/fb.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fb_release' type-id='5173cfa7' visibility='default' filepath='include/linux/fb.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fb_read' type-id='c523819e' visibility='default' filepath='include/linux/fb.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fb_write' type-id='b90c8c47' visibility='default' filepath='include/linux/fb.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fb_check_var' type-id='325e877b' visibility='default' filepath='include/linux/fb.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fb_set_par' type-id='de0565b8' visibility='default' filepath='include/linux/fb.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fb_setcolreg' type-id='47150d4e' visibility='default' filepath='include/linux/fb.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fb_setcmap' type-id='6cae92ea' visibility='default' filepath='include/linux/fb.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fb_blank' type-id='264d5ec9' visibility='default' filepath='include/linux/fb.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fb_pan_display' type-id='325e877b' visibility='default' filepath='include/linux/fb.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fb_fillrect' type-id='e6c64d04' visibility='default' filepath='include/linux/fb.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fb_copyarea' type-id='2fff15e1' visibility='default' filepath='include/linux/fb.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='fb_imageblit' type-id='c72645fa' visibility='default' filepath='include/linux/fb.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fb_cursor' type-id='f03e9a5b' visibility='default' filepath='include/linux/fb.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fb_sync' type-id='de0565b8' visibility='default' filepath='include/linux/fb.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fb_ioctl' type-id='20b881b6' visibility='default' filepath='include/linux/fb.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fb_compat_ioctl' type-id='20b881b6' visibility='default' filepath='include/linux/fb.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='fb_mmap' type-id='17d72e03' visibility='default' filepath='include/linux/fb.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fb_get_caps' type-id='3e6ac796' visibility='default' filepath='include/linux/fb.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='fb_destroy' type-id='37191bbd' visibility='default' filepath='include/linux/fb.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fb_debug_enter' type-id='de0565b8' visibility='default' filepath='include/linux/fb.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='fb_debug_leave' type-id='de0565b8' visibility='default' filepath='include/linux/fb.h' line='295' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_fillrect' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='350' column='1' id='76f58541'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dx' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dy' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='color' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rop' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='356' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_copyarea' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='341' column='1' id='3345b082'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dx' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dy' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sx' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='sy' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='347' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_image' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='359' column='1' id='c4601f87'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dx' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dy' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fg_color' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='bg_color' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='depth' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fb.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='80f4b756' visibility='default' filepath='include/uapi/linux/fb.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cmap' type-id='be9adbe3' visibility='default' filepath='include/uapi/linux/fb.h' line='368' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_cursor' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='387' column='1' id='cc3fe760'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='set' type-id='d315442e' visibility='default' filepath='include/uapi/linux/fb.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='enable' type-id='d315442e' visibility='default' filepath='include/uapi/linux/fb.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rop' type-id='d315442e' visibility='default' filepath='include/uapi/linux/fb.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask' type-id='80f4b756' visibility='default' filepath='include/uapi/linux/fb.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hot' type-id='fc4b98cd' visibility='default' filepath='include/uapi/linux/fb.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='image' type-id='c4601f87' visibility='default' filepath='include/uapi/linux/fb.h' line='393' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fbcurpos' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/fb.h' line='383' column='1' id='fc4b98cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='d315442e' visibility='default' filepath='include/uapi/linux/fb.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='y' type-id='d315442e' visibility='default' filepath='include/uapi/linux/fb.h' line='384' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_blit_caps' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='144' column='1' id='cc1cf303'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='y' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='148' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fb.h' line='480' column='1' id='145b6d9f'>
+        <data-member access='private'>
+          <var-decl name='screen_base' type-id='26a90f95' visibility='default' filepath='include/linux/fb.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='screen_buffer' type-id='26a90f95' visibility='default' filepath='include/linux/fb.h' line='482' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='apertures_struct' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='495' column='1' id='d3638b22'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/linux/fb.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ranges' type-id='f13afa51' visibility='default' filepath='include/linux/fb.h' line='500' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='aperture' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='497' column='1' id='87647851'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='acc63fdf' visibility='default' filepath='include/linux/fb.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='acc63fdf' visibility='default' filepath='include/linux/fb.h' line='499' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d315442e' size-in-bits='64' id='2e5e3725'/>
+      <pointer-type-def type-id='d3638b22' size-in-bits='64' id='3dc7db80'/>
+      <pointer-type-def type-id='a858ced9' size-in-bits='64' id='7a76d041'/>
+      <qualified-type-def type-id='69a7508d' const='yes' id='4b349f6a'/>
+      <pointer-type-def type-id='4b349f6a' size-in-bits='64' id='a3d6b1c0'/>
+      <qualified-type-def type-id='8802968a' const='yes' id='28b68df7'/>
+      <pointer-type-def type-id='28b68df7' size-in-bits='64' id='f46152e7'/>
+      <qualified-type-def type-id='3345b082' const='yes' id='9c20d241'/>
+      <pointer-type-def type-id='9c20d241' size-in-bits='64' id='32ab3e71'/>
+      <qualified-type-def type-id='76f58541' const='yes' id='7bfbb42a'/>
+      <pointer-type-def type-id='7bfbb42a' size-in-bits='64' id='2d3c5c00'/>
+      <qualified-type-def type-id='c4601f87' const='yes' id='7bacac96'/>
+      <pointer-type-def type-id='7bacac96' size-in-bits='64' id='6cd3ebf4'/>
+      <pointer-type-def type-id='cc1cf303' size-in-bits='64' id='85e33ca3'/>
+      <pointer-type-def type-id='be9adbe3' size-in-bits='64' id='2080bed3'/>
+      <pointer-type-def type-id='cc3fe760' size-in-bits='64' id='670156c6'/>
+      <pointer-type-def type-id='f546887a' size-in-bits='64' id='9f763fd8'/>
+      <pointer-type-def type-id='88ac6962' size-in-bits='64' id='33dff390'/>
+      <pointer-type-def type-id='87e42d48' size-in-bits='64' id='dd75e72e'/>
+      <pointer-type-def type-id='e3dece26' size-in-bits='64' id='c03076ec'/>
+      <pointer-type-def type-id='fb246cd7' size-in-bits='64' id='53f7c7e3'/>
+      <pointer-type-def type-id='47a16dfc' size-in-bits='64' id='317f203e'/>
+      <pointer-type-def type-id='32037540' size-in-bits='64' id='6cae92ea'/>
+      <pointer-type-def type-id='32ea5aae' size-in-bits='64' id='de0565b8'/>
+      <pointer-type-def type-id='20919507' size-in-bits='64' id='f03e9a5b'/>
+      <pointer-type-def type-id='b0471e43' size-in-bits='64' id='5173cfa7'/>
+      <pointer-type-def type-id='f65c27ec' size-in-bits='64' id='20b881b6'/>
+      <pointer-type-def type-id='29599587' size-in-bits='64' id='17d72e03'/>
+      <pointer-type-def type-id='24762397' size-in-bits='64' id='325e877b'/>
+      <pointer-type-def type-id='29c8c1c5' size-in-bits='64' id='264d5ec9'/>
+      <pointer-type-def type-id='c89dc0a4' size-in-bits='64' id='47150d4e'/>
+      <pointer-type-def type-id='de345e44' size-in-bits='64' id='c523819e'/>
+      <pointer-type-def type-id='6c6bf843' size-in-bits='64' id='b90c8c47'/>
+      <pointer-type-def type-id='cfe09901' size-in-bits='64' id='37191bbd'/>
+      <pointer-type-def type-id='ef65541d' size-in-bits='64' id='2fff15e1'/>
+      <pointer-type-def type-id='f036a6aa' size-in-bits='64' id='e6c64d04'/>
+      <pointer-type-def type-id='78de7510' size-in-bits='64' id='c72645fa'/>
+      <pointer-type-def type-id='200520c4' size-in-bits='64' id='3e6ac796'/>
+      <pointer-type-def type-id='e2245803' size-in-bits='64' id='888567bf'/>
+      <function-decl name='devm_backlight_device_register' mangled-name='devm_backlight_device_register' filepath='include/linux/backlight.h' line='181' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_backlight_device_register'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='a3d6b1c0'/>
+        <parameter type-id='f46152e7'/>
+        <return type-id='7a76d041'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='fb246cd7'>
+        <parameter type-id='7a76d041'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='47a16dfc'>
+        <parameter type-id='7a76d041'/>
+        <parameter type-id='9f763fd8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='32037540'>
+        <parameter type-id='2080bed3'/>
+        <parameter type-id='9f763fd8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='32ea5aae'>
+        <parameter type-id='9f763fd8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='20919507'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='670156c6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b0471e43'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f65c27ec'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='29599587'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24762397'>
+        <parameter type-id='dd75e72e'/>
+        <parameter type-id='9f763fd8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='29c8c1c5'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='9f763fd8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c89dc0a4'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='9f763fd8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='de345e44'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6c6bf843'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cfe09901'>
+        <parameter type-id='9f763fd8'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ef65541d'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='32ab3e71'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f036a6aa'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='2d3c5c00'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78de7510'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='6cd3ebf4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='200520c4'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='85e33ca3'/>
+        <parameter type-id='dd75e72e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e2245803'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/video/hdmi.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='7567d0f8' size-in-bits='96' id='b7bcaa67'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <class-decl name='hdmi_avi_infoframe' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='168' column='1' id='4536ce10'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c573b339' visibility='default' filepath='include/linux/hdmi.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='length' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='colorspace' type-id='c86f38e4' visibility='default' filepath='include/linux/hdmi.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='scan_mode' type-id='aaafc218' visibility='default' filepath='include/linux/hdmi.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='colorimetry' type-id='8df1782c' visibility='default' filepath='include/linux/hdmi.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='picture_aspect' type-id='a30ccd44' visibility='default' filepath='include/linux/hdmi.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='active_aspect' type-id='90bbc2e6' visibility='default' filepath='include/linux/hdmi.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='itc' type-id='b50a4934' visibility='default' filepath='include/linux/hdmi.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='extended_colorimetry' type-id='b8a53560' visibility='default' filepath='include/linux/hdmi.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='quantization_range' type-id='5c444b2c' visibility='default' filepath='include/linux/hdmi.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nups' type-id='a84bbd3b' visibility='default' filepath='include/linux/hdmi.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='video_code' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ycc_quantization_range' type-id='569eefca' visibility='default' filepath='include/linux/hdmi.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='content_type' type-id='6cedbf81' visibility='default' filepath='include/linux/hdmi.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pixel_repeat' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='top_bar' type-id='8efea9e5' visibility='default' filepath='include/linux/hdmi.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='bottom_bar' type-id='8efea9e5' visibility='default' filepath='include/linux/hdmi.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='left_bar' type-id='8efea9e5' visibility='default' filepath='include/linux/hdmi.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='right_bar' type-id='8efea9e5' visibility='default' filepath='include/linux/hdmi.h' line='188' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='hdmi_infoframe_type' filepath='include/linux/hdmi.h' line='45' column='1' id='c573b339'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_VENDOR' value='129'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_AVI' value='130'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_SPD' value='131'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_AUDIO' value='132'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_DRM' value='135'/>
+      </enum-decl>
+      <enum-decl name='hdmi_colorspace' filepath='include/linux/hdmi.h' line='70' column='1' id='c86f38e4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_COLORSPACE_RGB' value='0'/>
+        <enumerator name='HDMI_COLORSPACE_YUV422' value='1'/>
+        <enumerator name='HDMI_COLORSPACE_YUV444' value='2'/>
+        <enumerator name='HDMI_COLORSPACE_YUV420' value='3'/>
+        <enumerator name='HDMI_COLORSPACE_RESERVED4' value='4'/>
+        <enumerator name='HDMI_COLORSPACE_RESERVED5' value='5'/>
+        <enumerator name='HDMI_COLORSPACE_RESERVED6' value='6'/>
+        <enumerator name='HDMI_COLORSPACE_IDO_DEFINED' value='7'/>
+      </enum-decl>
+      <enum-decl name='hdmi_scan_mode' filepath='include/linux/hdmi.h' line='81' column='1' id='aaafc218'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_SCAN_MODE_NONE' value='0'/>
+        <enumerator name='HDMI_SCAN_MODE_OVERSCAN' value='1'/>
+        <enumerator name='HDMI_SCAN_MODE_UNDERSCAN' value='2'/>
+        <enumerator name='HDMI_SCAN_MODE_RESERVED' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_colorimetry' filepath='include/linux/hdmi.h' line='88' column='1' id='8df1782c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_COLORIMETRY_NONE' value='0'/>
+        <enumerator name='HDMI_COLORIMETRY_ITU_601' value='1'/>
+        <enumerator name='HDMI_COLORIMETRY_ITU_709' value='2'/>
+        <enumerator name='HDMI_COLORIMETRY_EXTENDED' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_picture_aspect' filepath='include/linux/hdmi.h' line='95' column='1' id='a30ccd44'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_PICTURE_ASPECT_NONE' value='0'/>
+        <enumerator name='HDMI_PICTURE_ASPECT_4_3' value='1'/>
+        <enumerator name='HDMI_PICTURE_ASPECT_16_9' value='2'/>
+        <enumerator name='HDMI_PICTURE_ASPECT_64_27' value='3'/>
+        <enumerator name='HDMI_PICTURE_ASPECT_256_135' value='4'/>
+        <enumerator name='HDMI_PICTURE_ASPECT_RESERVED' value='5'/>
+      </enum-decl>
+      <enum-decl name='hdmi_active_aspect' filepath='include/linux/hdmi.h' line='104' column='1' id='90bbc2e6'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9_TOP' value='2'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_14_9_TOP' value='3'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9_CENTER' value='4'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_PICTURE' value='8'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_4_3' value='9'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9' value='10'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_14_9' value='11'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_4_3_SP_14_9' value='13'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9_SP_14_9' value='14'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9_SP_4_3' value='15'/>
+      </enum-decl>
+      <enum-decl name='hdmi_extended_colorimetry' filepath='include/linux/hdmi.h' line='117' column='1' id='b8a53560'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_XV_YCC_601' value='0'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_XV_YCC_709' value='1'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_S_YCC_601' value='2'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_OPYCC_601' value='3'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_OPRGB' value='4'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_BT2020_CONST_LUM' value='5'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_BT2020' value='6'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_RESERVED' value='7'/>
+      </enum-decl>
+      <enum-decl name='hdmi_quantization_range' filepath='include/linux/hdmi.h' line='130' column='1' id='5c444b2c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_QUANTIZATION_RANGE_DEFAULT' value='0'/>
+        <enumerator name='HDMI_QUANTIZATION_RANGE_LIMITED' value='1'/>
+        <enumerator name='HDMI_QUANTIZATION_RANGE_FULL' value='2'/>
+        <enumerator name='HDMI_QUANTIZATION_RANGE_RESERVED' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_nups' filepath='include/linux/hdmi.h' line='138' column='1' id='a84bbd3b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_NUPS_UNKNOWN' value='0'/>
+        <enumerator name='HDMI_NUPS_HORIZONTAL' value='1'/>
+        <enumerator name='HDMI_NUPS_VERTICAL' value='2'/>
+        <enumerator name='HDMI_NUPS_BOTH' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_ycc_quantization_range' filepath='include/linux/hdmi.h' line='145' column='1' id='569eefca'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_YCC_QUANTIZATION_RANGE_LIMITED' value='0'/>
+        <enumerator name='HDMI_YCC_QUANTIZATION_RANGE_FULL' value='1'/>
+      </enum-decl>
+      <enum-decl name='hdmi_content_type' filepath='include/linux/hdmi.h' line='150' column='1' id='6cedbf81'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_CONTENT_TYPE_GRAPHICS' value='0'/>
+        <enumerator name='HDMI_CONTENT_TYPE_PHOTO' value='1'/>
+        <enumerator name='HDMI_CONTENT_TYPE_CINEMA' value='2'/>
+        <enumerator name='HDMI_CONTENT_TYPE_GAME' value='3'/>
+      </enum-decl>
+      <class-decl name='hdmi_audio_infoframe' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='316' column='1' id='b4a1ba48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c573b339' visibility='default' filepath='include/linux/hdmi.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='length' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='channels' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='coding_type' type-id='3fe6d7c3' visibility='default' filepath='include/linux/hdmi.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='sample_size' type-id='73deb9e6' visibility='default' filepath='include/linux/hdmi.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sample_frequency' type-id='75c2c977' visibility='default' filepath='include/linux/hdmi.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='coding_type_ext' type-id='795120af' visibility='default' filepath='include/linux/hdmi.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='channel_allocation' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='level_shift_value' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='downmix_inhibit' type-id='b50a4934' visibility='default' filepath='include/linux/hdmi.h' line='327' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='hdmi_audio_coding_type' filepath='include/linux/hdmi.h' line='257' column='1' id='3fe6d7c3'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_STREAM' value='0'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_PCM' value='1'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_AC3' value='2'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_MPEG1' value='3'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_MP3' value='4'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_MPEG2' value='5'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_AAC_LC' value='6'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_DTS' value='7'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_ATRAC' value='8'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_DSD' value='9'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EAC3' value='10'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_DTS_HD' value='11'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_MLP' value='12'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_DST' value='13'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_WMA_PRO' value='14'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_CXT' value='15'/>
+      </enum-decl>
+      <enum-decl name='hdmi_audio_sample_size' filepath='include/linux/hdmi.h' line='276' column='1' id='73deb9e6'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_SIZE_STREAM' value='0'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_SIZE_16' value='1'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_SIZE_20' value='2'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_SIZE_24' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_audio_sample_frequency' filepath='include/linux/hdmi.h' line='283' column='1' id='75c2c977'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_FREQUENCY_STREAM' value='0'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_FREQUENCY_32000' value='1'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_FREQUENCY_44100' value='2'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_FREQUENCY_48000' value='3'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_FREQUENCY_88200' value='4'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_FREQUENCY_96000' value='5'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_FREQUENCY_176400' value='6'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_FREQUENCY_192000' value='7'/>
+      </enum-decl>
+      <enum-decl name='hdmi_audio_coding_type_ext' filepath='include/linux/hdmi.h' line='294' column='1' id='795120af'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_CT' value='0'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC' value='1'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC_V2' value='2'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_MPEG_SURROUND' value='3'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC' value='4'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_V2' value='5'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC' value='6'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_DRA' value='7'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_SURROUND' value='8'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC_SURROUND' value='10'/>
+      </enum-decl>
+      <union-decl name='hdmi_infoframe' size-in-bits='544' visibility='default' filepath='include/linux/hdmi.h' line='418' column='1' id='da92e008'>
+        <data-member access='private'>
+          <var-decl name='any' type-id='13c06ba8' visibility='default' filepath='include/linux/hdmi.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='avi' type-id='4536ce10' visibility='default' filepath='include/linux/hdmi.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='spd' type-id='9729258f' visibility='default' filepath='include/linux/hdmi.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='vendor' type-id='12153196' visibility='default' filepath='include/linux/hdmi.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='audio' type-id='b4a1ba48' visibility='default' filepath='include/linux/hdmi.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='drm' type-id='9ebab137' visibility='default' filepath='include/linux/hdmi.h' line='424' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='hdmi_any_infoframe' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='64' column='1' id='13c06ba8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c573b339' visibility='default' filepath='include/linux/hdmi.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='length' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hdmi_spd_infoframe' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='240' column='1' id='9729258f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c573b339' visibility='default' filepath='include/linux/hdmi.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='length' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='vendor' type-id='8e100159' visibility='default' filepath='include/linux/hdmi.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='product' type-id='ac1fa8c0' visibility='default' filepath='include/linux/hdmi.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sdi' type-id='163c5ead' visibility='default' filepath='include/linux/hdmi.h' line='246' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='hdmi_spd_sdi' filepath='include/linux/hdmi.h' line='223' column='1' id='163c5ead'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_SPD_SDI_UNKNOWN' value='0'/>
+        <enumerator name='HDMI_SPD_SDI_DSTB' value='1'/>
+        <enumerator name='HDMI_SPD_SDI_DVDP' value='2'/>
+        <enumerator name='HDMI_SPD_SDI_DVHS' value='3'/>
+        <enumerator name='HDMI_SPD_SDI_HDDVR' value='4'/>
+        <enumerator name='HDMI_SPD_SDI_DVC' value='5'/>
+        <enumerator name='HDMI_SPD_SDI_DSC' value='6'/>
+        <enumerator name='HDMI_SPD_SDI_VCD' value='7'/>
+        <enumerator name='HDMI_SPD_SDI_GAME' value='8'/>
+        <enumerator name='HDMI_SPD_SDI_PC' value='9'/>
+        <enumerator name='HDMI_SPD_SDI_BD' value='10'/>
+        <enumerator name='HDMI_SPD_SDI_SACD' value='11'/>
+        <enumerator name='HDMI_SPD_SDI_HDDVD' value='12'/>
+        <enumerator name='HDMI_SPD_SDI_PMP' value='13'/>
+      </enum-decl>
+      <union-decl name='hdmi_vendor_any_infoframe' size-in-bits='192' visibility='default' filepath='include/linux/hdmi.h' line='395' column='1' id='12153196'>
+        <data-member access='private'>
+          <var-decl name='any' type-id='3fda67d9' visibility='default' filepath='include/linux/hdmi.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='hdmi' type-id='4db10e5c' visibility='default' filepath='include/linux/hdmi.h' line='402' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/hdmi.h' line='396' column='1' id='3fda67d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c573b339' visibility='default' filepath='include/linux/hdmi.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='length' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='oui' type-id='f0981eeb' visibility='default' filepath='include/linux/hdmi.h' line='400' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hdmi_vendor_infoframe' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='351' column='1' id='4db10e5c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c573b339' visibility='default' filepath='include/linux/hdmi.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='length' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='oui' type-id='f0981eeb' visibility='default' filepath='include/linux/hdmi.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='vic' type-id='f9b06939' visibility='default' filepath='include/linux/hdmi.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='s3d_struct' type-id='7c6e6e72' visibility='default' filepath='include/linux/hdmi.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='s3d_ext_data' type-id='f0981eeb' visibility='default' filepath='include/linux/hdmi.h' line='358' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='hdmi_3d_structure' filepath='include/linux/hdmi.h' line='338' column='1' id='7c6e6e72'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_3D_STRUCTURE_INVALID' value='-1'/>
+        <enumerator name='HDMI_3D_STRUCTURE_FRAME_PACKING' value='0'/>
+        <enumerator name='HDMI_3D_STRUCTURE_FIELD_ALTERNATIVE' value='1'/>
+        <enumerator name='HDMI_3D_STRUCTURE_LINE_ALTERNATIVE' value='2'/>
+        <enumerator name='HDMI_3D_STRUCTURE_SIDE_BY_SIDE_FULL' value='3'/>
+        <enumerator name='HDMI_3D_STRUCTURE_L_DEPTH' value='4'/>
+        <enumerator name='HDMI_3D_STRUCTURE_L_DEPTH_GFX_GFX_DEPTH' value='5'/>
+        <enumerator name='HDMI_3D_STRUCTURE_TOP_AND_BOTTOM' value='6'/>
+        <enumerator name='HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF' value='8'/>
+      </enum-decl>
+      <class-decl name='hdmi_drm_infoframe' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='192' column='1' id='9ebab137'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c573b339' visibility='default' filepath='include/linux/hdmi.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='length' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='eotf' type-id='7b330cb5' visibility='default' filepath='include/linux/hdmi.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='metadata_type' type-id='46a5cd93' visibility='default' filepath='include/linux/hdmi.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='display_primaries' type-id='b7bcaa67' visibility='default' filepath='include/linux/hdmi.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='white_point' type-id='7567d0f8' visibility='default' filepath='include/linux/hdmi.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='max_display_mastering_luminance' type-id='1dc6a898' visibility='default' filepath='include/linux/hdmi.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='min_display_mastering_luminance' type-id='1dc6a898' visibility='default' filepath='include/linux/hdmi.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='max_cll' type-id='1dc6a898' visibility='default' filepath='include/linux/hdmi.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='max_fall' type-id='1dc6a898' visibility='default' filepath='include/linux/hdmi.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='hdmi_eotf' filepath='include/linux/hdmi.h' line='161' column='1' id='7b330cb5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_EOTF_TRADITIONAL_GAMMA_SDR' value='0'/>
+        <enumerator name='HDMI_EOTF_TRADITIONAL_GAMMA_HDR' value='1'/>
+        <enumerator name='HDMI_EOTF_SMPTE_ST2084' value='2'/>
+        <enumerator name='HDMI_EOTF_BT_2100_HLG' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_metadata_type' filepath='include/linux/hdmi.h' line='157' column='1' id='46a5cd93'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_STATIC_METADATA_TYPE1' value='0'/>
+      </enum-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/hdmi.h' line='198' column='1' id='7567d0f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='1dc6a898' visibility='default' filepath='include/linux/hdmi.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='y' type-id='1dc6a898' visibility='default' filepath='include/linux/hdmi.h' line='199' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b4a1ba48' size-in-bits='64' id='309bd9ee'/>
+      <pointer-type-def type-id='4536ce10' size-in-bits='64' id='19ddc3a6'/>
+      <pointer-type-def type-id='da92e008' size-in-bits='64' id='885b5549'/>
+      <function-decl name='hdmi_avi_infoframe_init' mangled-name='hdmi_avi_infoframe_init' filepath='drivers/video/hdmi.c' line='59' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hdmi_avi_infoframe_init'>
+        <parameter type-id='19ddc3a6' name='frame' filepath='drivers/video/hdmi.c' line='59' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hdmi_avi_infoframe_pack' mangled-name='hdmi_avi_infoframe_pack' filepath='drivers/video/hdmi.c' line='204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hdmi_avi_infoframe_pack'>
+        <parameter type-id='19ddc3a6' name='frame' filepath='drivers/video/hdmi.c' line='204' column='1'/>
+        <parameter type-id='eaa32e2f' name='buffer' filepath='drivers/video/hdmi.c' line='205' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/video/hdmi.c' line='205' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='hdmi_audio_infoframe_init' mangled-name='hdmi_audio_infoframe_init' filepath='drivers/video/hdmi.c' line='353' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hdmi_audio_infoframe_init'>
+        <parameter type-id='309bd9ee' name='frame' filepath='drivers/video/hdmi.c' line='353' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hdmi_audio_infoframe_pack' mangled-name='hdmi_audio_infoframe_pack' filepath='drivers/video/hdmi.c' line='469' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hdmi_audio_infoframe_pack'>
+        <parameter type-id='309bd9ee' name='frame' filepath='drivers/video/hdmi.c' line='469' column='1'/>
+        <parameter type-id='eaa32e2f' name='buffer' filepath='drivers/video/hdmi.c' line='470' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/video/hdmi.c' line='470' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='hdmi_infoframe_pack' mangled-name='hdmi_infoframe_pack' filepath='drivers/video/hdmi.c' line='948' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hdmi_infoframe_pack'>
+        <parameter type-id='885b5549' name='frame' filepath='drivers/video/hdmi.c' line='948' column='1'/>
+        <parameter type-id='eaa32e2f' name='buffer' filepath='drivers/video/hdmi.c' line='949' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/video/hdmi.c' line='949' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/virtio/virtio.c' language='LANG_C89'>
+      <qualified-type-def type-id='a23921c9' const='yes' id='e98a103e'/>
+      <pointer-type-def type-id='e98a103e' size-in-bits='64' id='b8574f7c'/>
+      <function-decl name='virtio_check_driver_offered_feature' mangled-name='virtio_check_driver_offered_feature' filepath='drivers/virtio/virtio.c' line='104' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_check_driver_offered_feature'>
+        <parameter type-id='b8574f7c' name='vdev' filepath='drivers/virtio/virtio.c' line='104' column='1'/>
+        <parameter type-id='f0981eeb' name='fbit' filepath='drivers/virtio/virtio.c' line='105' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtio_config_changed' mangled-name='virtio_config_changed' filepath='drivers/virtio/virtio.c' line='134' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_config_changed'>
+        <parameter type-id='5dbfcbb1' name='dev' filepath='drivers/virtio/virtio.c' line='134' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='register_virtio_device' mangled-name='register_virtio_device' filepath='drivers/virtio/virtio.c' line='318' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_virtio_device'>
+        <parameter type-id='5dbfcbb1' name='dev' filepath='drivers/virtio/virtio.c' line='318' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_virtio_device' mangled-name='unregister_virtio_device' filepath='drivers/virtio/virtio.c' line='360' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_virtio_device'>
+        <parameter type-id='5dbfcbb1' name='dev' filepath='drivers/virtio/virtio.c' line='360' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtio_device_freeze' mangled-name='virtio_device_freeze' filepath='drivers/virtio/virtio.c' line='370' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_device_freeze'>
+        <parameter type-id='5dbfcbb1' name='dev' filepath='drivers/virtio/virtio.c' line='370' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_device_restore' mangled-name='virtio_device_restore' filepath='drivers/virtio/virtio.c' line='385' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_device_restore'>
+        <parameter type-id='5dbfcbb1' name='dev' filepath='drivers/virtio/virtio.c' line='385' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/virtio/virtio_ring.c' language='LANG_C89'>
+      <pointer-type-def type-id='1697786f' size-in-bits='64' id='3098d84b'/>
+      <function-decl name='virtio_max_dma_size' mangled-name='virtio_max_dma_size' filepath='drivers/virtio/virtio_ring.c' line='261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_max_dma_size'>
+        <parameter type-id='5dbfcbb1' name='vdev' filepath='drivers/virtio/virtio_ring.c' line='261' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='virtqueue_kick' mangled-name='virtqueue_kick' filepath='drivers/virtio/virtio_ring.c' line='1869' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_kick'>
+        <parameter type-id='91d0de51' name='vq' filepath='drivers/virtio/virtio_ring.c' line='1869' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='virtqueue_add_outbuf' mangled-name='virtqueue_add_outbuf' filepath='drivers/virtio/virtio_ring.c' line='1758' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_add_outbuf'>
+        <parameter type-id='91d0de51' name='vq' filepath='drivers/virtio/virtio_ring.c' line='1758' column='1'/>
+        <parameter type-id='bf3ef905' name='sg' filepath='drivers/virtio/virtio_ring.c' line='1759' column='1'/>
+        <parameter type-id='f0981eeb' name='num' filepath='drivers/virtio/virtio_ring.c' line='1759' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/virtio/virtio_ring.c' line='1760' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='drivers/virtio/virtio_ring.c' line='1761' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtqueue_add_inbuf' mangled-name='virtqueue_add_inbuf' filepath='drivers/virtio/virtio_ring.c' line='1780' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_add_inbuf'>
+        <parameter type-id='91d0de51' name='vq' filepath='drivers/virtio/virtio_ring.c' line='1780' column='1'/>
+        <parameter type-id='bf3ef905' name='sg' filepath='drivers/virtio/virtio_ring.c' line='1781' column='1'/>
+        <parameter type-id='f0981eeb' name='num' filepath='drivers/virtio/virtio_ring.c' line='1781' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/virtio/virtio_ring.c' line='1782' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='drivers/virtio/virtio_ring.c' line='1783' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtqueue_add_inbuf_ctx' mangled-name='virtqueue_add_inbuf_ctx' filepath='drivers/virtio/virtio_ring.c' line='1803' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_add_inbuf_ctx'>
+        <parameter type-id='91d0de51' name='vq' filepath='drivers/virtio/virtio_ring.c' line='1803' column='1'/>
+        <parameter type-id='bf3ef905' name='sg' filepath='drivers/virtio/virtio_ring.c' line='1804' column='1'/>
+        <parameter type-id='f0981eeb' name='num' filepath='drivers/virtio/virtio_ring.c' line='1804' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/virtio/virtio_ring.c' line='1805' column='1'/>
+        <parameter type-id='eaa32e2f' name='ctx' filepath='drivers/virtio/virtio_ring.c' line='1806' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='drivers/virtio/virtio_ring.c' line='1807' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtqueue_get_buf_ctx' mangled-name='virtqueue_get_buf_ctx' filepath='drivers/virtio/virtio_ring.c' line='1894' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_get_buf_ctx'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='1894' column='1'/>
+        <parameter type-id='807869d3' name='len' filepath='drivers/virtio/virtio_ring.c' line='1894' column='1'/>
+        <parameter type-id='63e171df' name='ctx' filepath='drivers/virtio/virtio_ring.c' line='1895' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='virtqueue_enable_cb_prepare' mangled-name='virtqueue_enable_cb_prepare' filepath='drivers/virtio/virtio_ring.c' line='1941' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_enable_cb_prepare'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='1941' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='virtqueue_poll' mangled-name='virtqueue_poll' filepath='drivers/virtio/virtio_ring.c' line='1959' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_poll'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='1959' column='1'/>
+        <parameter type-id='f0981eeb' name='last_used_idx' filepath='drivers/virtio/virtio_ring.c' line='1959' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='virtqueue_enable_cb_delayed' mangled-name='virtqueue_enable_cb_delayed' filepath='drivers/virtio/virtio_ring.c' line='2004' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_enable_cb_delayed'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='2004' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='virtqueue_detach_unused_buf' mangled-name='virtqueue_detach_unused_buf' filepath='drivers/virtio/virtio_ring.c' line='2021' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_detach_unused_buf'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='2021' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='vring_interrupt' mangled-name='vring_interrupt' filepath='drivers/virtio/virtio_ring.c' line='2035' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vring_interrupt'>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/virtio/virtio_ring.c' line='2035' column='1'/>
+        <parameter type-id='eaa32e2f' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='2035' column='1'/>
+        <return type-id='4bdecfd7'/>
+      </function-decl>
+      <function-decl name='vring_create_virtqueue' mangled-name='vring_create_virtqueue' filepath='drivers/virtio/virtio_ring.c' line='2134' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vring_create_virtqueue'>
+        <parameter type-id='f0981eeb' name='index' filepath='drivers/virtio/virtio_ring.c' line='2135' column='1'/>
+        <parameter type-id='f0981eeb' name='num' filepath='drivers/virtio/virtio_ring.c' line='2136' column='1'/>
+        <parameter type-id='f0981eeb' name='vring_align' filepath='drivers/virtio/virtio_ring.c' line='2137' column='1'/>
+        <parameter type-id='5dbfcbb1' name='vdev' filepath='drivers/virtio/virtio_ring.c' line='2138' column='1'/>
+        <parameter type-id='b50a4934' name='weak_barriers' filepath='drivers/virtio/virtio_ring.c' line='2139' column='1'/>
+        <parameter type-id='b50a4934' name='may_reduce_num' filepath='drivers/virtio/virtio_ring.c' line='2140' column='1'/>
+        <parameter type-id='b50a4934' name='context' filepath='drivers/virtio/virtio_ring.c' line='2141' column='1'/>
+        <parameter type-id='3098d84b' name='notify' filepath='drivers/virtio/virtio_ring.c' line='2142' column='1'/>
+        <parameter type-id='c881e0a0' name='callback' filepath='drivers/virtio/virtio_ring.c' line='2143' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/virtio/virtio_ring.c' line='2144' column='1'/>
+        <return type-id='91d0de51'/>
+      </function-decl>
+      <function-decl name='vring_new_virtqueue' mangled-name='vring_new_virtqueue' filepath='drivers/virtio/virtio_ring.c' line='2159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vring_new_virtqueue'>
+        <parameter type-id='f0981eeb' name='index' filepath='drivers/virtio/virtio_ring.c' line='2159' column='1'/>
+        <parameter type-id='f0981eeb' name='num' filepath='drivers/virtio/virtio_ring.c' line='2160' column='1'/>
+        <parameter type-id='f0981eeb' name='vring_align' filepath='drivers/virtio/virtio_ring.c' line='2161' column='1'/>
+        <parameter type-id='5dbfcbb1' name='vdev' filepath='drivers/virtio/virtio_ring.c' line='2162' column='1'/>
+        <parameter type-id='b50a4934' name='weak_barriers' filepath='drivers/virtio/virtio_ring.c' line='2163' column='1'/>
+        <parameter type-id='b50a4934' name='context' filepath='drivers/virtio/virtio_ring.c' line='2164' column='1'/>
+        <parameter type-id='eaa32e2f' name='pages' filepath='drivers/virtio/virtio_ring.c' line='2165' column='1'/>
+        <parameter type-id='3098d84b' name='notify' filepath='drivers/virtio/virtio_ring.c' line='2166' column='1'/>
+        <parameter type-id='c881e0a0' name='callback' filepath='drivers/virtio/virtio_ring.c' line='2167' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/virtio/virtio_ring.c' line='2168' column='1'/>
+        <return type-id='91d0de51'/>
+      </function-decl>
+      <function-decl name='vring_del_virtqueue' mangled-name='vring_del_virtqueue' filepath='drivers/virtio/virtio_ring.c' line='2181' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vring_del_virtqueue'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='2181' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vring_transport_features' mangled-name='vring_transport_features' filepath='drivers/virtio/virtio_ring.c' line='2219' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vring_transport_features'>
+        <parameter type-id='5dbfcbb1' name='vdev' filepath='drivers/virtio/virtio_ring.c' line='2219' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtqueue_get_vring_size' mangled-name='virtqueue_get_vring_size' filepath='drivers/virtio/virtio_ring.c' line='2252' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_get_vring_size'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='2252' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='virtio_break_device' mangled-name='virtio_break_device' filepath='drivers/virtio/virtio_ring.c' line='2273' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_break_device'>
+        <parameter type-id='5dbfcbb1' name='dev' filepath='drivers/virtio/virtio_ring.c' line='2273' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtqueue_get_desc_addr' mangled-name='virtqueue_get_desc_addr' filepath='drivers/virtio/virtio_ring.c' line='2284' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_get_desc_addr'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='2284' column='1'/>
+        <return type-id='cf29c9b3'/>
+      </function-decl>
+      <function-decl name='virtqueue_get_avail_addr' mangled-name='virtqueue_get_avail_addr' filepath='drivers/virtio/virtio_ring.c' line='2297' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_get_avail_addr'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='2297' column='1'/>
+        <return type-id='cf29c9b3'/>
+      </function-decl>
+      <function-decl name='virtqueue_get_used_addr' mangled-name='virtqueue_get_used_addr' filepath='drivers/virtio/virtio_ring.c' line='2311' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_get_used_addr'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='2311' column='1'/>
+        <return type-id='cf29c9b3'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='1697786f'>
+        <parameter type-id='91d0de51' name='_vq'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <pointer-type-def type-id='d7c60ba9' size-in-bits='64' id='91d0de51'/>
+      <pointer-type-def type-id='efc29a3e' size-in-bits='64' id='c881e0a0'/>
+      <class-decl name='virtqueue' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/virtio.h' line='28' column='1' id='d7c60ba9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/virtio.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='callback' type-id='c881e0a0' visibility='default' filepath='include/linux/virtio.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/virtio.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vdev' type-id='5dbfcbb1' visibility='default' filepath='include/linux/virtio.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/linux/virtio.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='num_free' type-id='f0981eeb' visibility='default' filepath='include/linux/virtio.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/virtio.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='drivers/watchdog/watchdog_core.c' language='LANG_C89'>
+      <class-decl name='watchdog_core_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='1d334f81'/>
+      <class-decl name='watchdog_governor' is-struct='yes' visibility='default' is-declaration-only='yes' id='b07b6d69'/>
+      <class-decl name='watchdog_device' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/watchdog.h' line='94' column='1' id='b370f5a5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/watchdog.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/watchdog.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/watchdog.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='info' type-id='9800391a' visibility='default' filepath='include/linux/watchdog.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ops' type-id='7365a3da' visibility='default' filepath='include/linux/watchdog.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='gov' type-id='22358840' visibility='default' filepath='include/linux/watchdog.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bootstatus' type-id='f0981eeb' visibility='default' filepath='include/linux/watchdog.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/watchdog.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pretimeout' type-id='f0981eeb' visibility='default' filepath='include/linux/watchdog.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='min_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/watchdog.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='max_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/watchdog.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='min_hw_heartbeat_ms' type-id='f0981eeb' visibility='default' filepath='include/linux/watchdog.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_hw_heartbeat_ms' type-id='f0981eeb' visibility='default' filepath='include/linux/watchdog.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='reboot_nb' type-id='9b08f7cd' visibility='default' filepath='include/linux/watchdog.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='restart_nb' type-id='9b08f7cd' visibility='default' filepath='include/linux/watchdog.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/watchdog.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='wd_data' type-id='daa81219' visibility='default' filepath='include/linux/watchdog.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='status' type-id='7359adad' visibility='default' filepath='include/linux/watchdog.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='deferred' type-id='72f469ec' visibility='default' filepath='include/linux/watchdog.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='watchdog_info' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/watchdog.h' line='18' column='1' id='5da1665b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='options' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/watchdog.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='firmware_version' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/watchdog.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='identity' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/watchdog.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='watchdog_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/watchdog.h' line='43' column='1' id='27dec419'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/watchdog.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='start' type-id='26989ff9' visibility='default' filepath='include/linux/watchdog.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='stop' type-id='26989ff9' visibility='default' filepath='include/linux/watchdog.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ping' type-id='26989ff9' visibility='default' filepath='include/linux/watchdog.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='status' type-id='d601a214' visibility='default' filepath='include/linux/watchdog.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_timeout' type-id='b535be93' visibility='default' filepath='include/linux/watchdog.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_pretimeout' type-id='b535be93' visibility='default' filepath='include/linux/watchdog.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_timeleft' type-id='d601a214' visibility='default' filepath='include/linux/watchdog.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='restart' type-id='8899c21b' visibility='default' filepath='include/linux/watchdog.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ioctl' type-id='07da4e39' visibility='default' filepath='include/linux/watchdog.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='b07b6d69' const='yes' id='359a7eea'/>
+      <pointer-type-def type-id='359a7eea' size-in-bits='64' id='22358840'/>
+      <qualified-type-def type-id='5da1665b' const='yes' id='45257a94'/>
+      <pointer-type-def type-id='45257a94' size-in-bits='64' id='9800391a'/>
+      <qualified-type-def type-id='27dec419' const='yes' id='d8e81cd4'/>
+      <pointer-type-def type-id='d8e81cd4' size-in-bits='64' id='7365a3da'/>
+      <pointer-type-def type-id='066f541d' size-in-bits='64' id='26989ff9'/>
+      <pointer-type-def type-id='78d147c7' size-in-bits='64' id='b535be93'/>
+      <pointer-type-def type-id='102202df' size-in-bits='64' id='8899c21b'/>
+      <pointer-type-def type-id='b4a1f53d' size-in-bits='64' id='07da4e39'/>
+      <pointer-type-def type-id='62d1e232' size-in-bits='64' id='d601a214'/>
+      <pointer-type-def type-id='1d334f81' size-in-bits='64' id='daa81219'/>
+      <pointer-type-def type-id='b370f5a5' size-in-bits='64' id='7bf5a5e5'/>
+      <function-decl name='watchdog_init_timeout' mangled-name='watchdog_init_timeout' filepath='drivers/watchdog/watchdog_core.c' line='110' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='watchdog_init_timeout'>
+        <parameter type-id='7bf5a5e5' name='wdd' filepath='drivers/watchdog/watchdog_core.c' line='110' column='1'/>
+        <parameter type-id='f0981eeb' name='timeout_parm' filepath='drivers/watchdog/watchdog_core.c' line='111' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/watchdog/watchdog_core.c' line='111' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='watchdog_set_restart_priority' mangled-name='watchdog_set_restart_priority' filepath='drivers/watchdog/watchdog_core.c' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='watchdog_set_restart_priority'>
+        <parameter type-id='7bf5a5e5' name='wdd' filepath='drivers/watchdog/watchdog_core.c' line='198' column='1'/>
+        <parameter type-id='95e97e5e' name='priority' filepath='drivers/watchdog/watchdog_core.c' line='198' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='watchdog_register_device' mangled-name='watchdog_register_device' filepath='drivers/watchdog/watchdog_core.c' line='297' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='watchdog_register_device'>
+        <parameter type-id='7bf5a5e5' name='wdd' filepath='drivers/watchdog/watchdog_core.c' line='297' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='watchdog_unregister_device' mangled-name='watchdog_unregister_device' filepath='drivers/watchdog/watchdog_core.c' line='343' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='watchdog_unregister_device'>
+        <parameter type-id='7bf5a5e5' name='wdd' filepath='drivers/watchdog/watchdog_core.c' line='343' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_watchdog_register_device' mangled-name='devm_watchdog_register_device' filepath='drivers/watchdog/watchdog_core.c' line='369' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_watchdog_register_device'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/watchdog/watchdog_core.c' line='369' column='1'/>
+        <parameter type-id='7bf5a5e5' name='wdd' filepath='drivers/watchdog/watchdog_core.c' line='370' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='066f541d'>
+        <parameter type-id='7bf5a5e5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78d147c7'>
+        <parameter type-id='7bf5a5e5'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='102202df'>
+        <parameter type-id='7bf5a5e5'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b4a1f53d'>
+        <parameter type-id='7bf5a5e5'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='62d1e232'>
+        <parameter type-id='7bf5a5e5'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/aio.c' language='LANG_C89'>
+      <typedef-decl name='kiocb_cancel_fn' type-id='5f9b036f' filepath='include/linux/aio.h' line='11' column='1' id='3bdd01dc'/>
+      <pointer-type-def type-id='3bdd01dc' size-in-bits='64' id='09896a23'/>
+      <function-decl name='kiocb_set_cancel_fn' mangled-name='kiocb_set_cancel_fn' filepath='fs/aio.c' line='565' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kiocb_set_cancel_fn'>
+        <parameter type-id='80f25feb' name='iocb' filepath='fs/aio.c' line='565' column='1'/>
+        <parameter type-id='09896a23' name='cancel' filepath='fs/aio.c' line='565' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='5f9b036f'>
+        <parameter type-id='80f25feb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/bad_inode.c' language='LANG_C89'>
+      <function-decl name='make_bad_inode' mangled-name='make_bad_inode' filepath='fs/bad_inode.c' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='make_bad_inode'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/bad_inode.c' line='198' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='is_bad_inode' mangled-name='is_bad_inode' filepath='fs/bad_inode.c' line='224' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='is_bad_inode'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/bad_inode.c' line='224' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/binfmt_elf.c' language='LANG_C89'>
+      <class-decl name='timeval' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/time.h' line='16' column='1' id='2a693ac3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='f7d92306' visibility='default' filepath='include/uapi/linux/time.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tv_usec' type-id='55c6233e' visibility='default' filepath='include/uapi/linux/time.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__kernel_time_t' type-id='6a11bd61' filepath='include/uapi/asm-generic/posix_types.h' line='89' column='1' id='f7d92306'/>
+      <typedef-decl name='__kernel_suseconds_t' type-id='6a11bd61' filepath='include/uapi/asm-generic/posix_types.h' line='41' column='1' id='55c6233e'/>
+      <function-decl name='vm_mmap' mangled-name='vm_mmap' filepath='include/linux/mm.h' line='2469' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vm_mmap'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='kvmalloc_node' mangled-name='kvmalloc_node' filepath='include/linux/mm.h' line='748' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kvmalloc_node'>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='kvfree' mangled-name='kvfree' filepath='include/linux/mm.h' line='777' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kvfree'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ns_to_timeval' mangled-name='ns_to_timeval' filepath='include/linux/time32.h' line='207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ns_to_timeval'>
+        <parameter type-id='1eb56b1e'/>
+        <return type-id='2a693ac3'/>
+      </function-decl>
+      <function-decl name='file_path' mangled-name='file_path' filepath='include/linux/fs.h' line='3106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='file_path'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='get_random_bytes' mangled-name='get_random_bytes' filepath='include/linux/random.h' line='38' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_random_bytes'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/binfmt_misc.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='26a90f95' size-in-bits='512' id='460b55b1'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='audit_names' is-struct='yes' visibility='default' is-declaration-only='yes' id='90177497'/>
+      <array-type-def dimensions='1' type-id='9b45d938' size-in-bits='infinite' id='0904d1cc'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='fs_context' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/fs_context.h' line='86' column='1' id='8d0295a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='7536fa28' visibility='default' filepath='include/linux/fs_context.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='uapi_mutex' type-id='925167dc' visibility='default' filepath='include/linux/fs_context.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fs_type' type-id='21e53d44' visibility='default' filepath='include/linux/fs_context.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fs_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs_context.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sget_key' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs_context.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='root' type-id='27675065' visibility='default' filepath='include/linux/fs_context.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='user_ns' type-id='c0ced321' visibility='default' filepath='include/linux/fs_context.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='net_ns' type-id='a2bff676' visibility='default' filepath='include/linux/fs_context.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='cred' type-id='bc33861a' visibility='default' filepath='include/linux/fs_context.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='log' type-id='d1a78aeb' visibility='default' filepath='include/linux/fs_context.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='source' type-id='80f4b756' visibility='default' filepath='include/linux/fs_context.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs_context.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='s_fs_info' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs_context.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='sb_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs_context.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='sb_flags_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/fs_context.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='s_iflags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs_context.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='lsm_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs_context.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='purpose' type-id='4171a6be' visibility='default' filepath='include/linux/fs_context.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='phase' type-id='de54989f' visibility='default' filepath='include/linux/fs_context.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='need_free' type-id='b50a4934' visibility='default' filepath='include/linux/fs_context.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='global' type-id='b50a4934' visibility='default' filepath='include/linux/fs_context.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fs_context_operations' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/fs_context.h' line='110' column='1' id='d2bd1e05'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='free' type-id='18811e61' visibility='default' filepath='include/linux/fs_context.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dup' type-id='0177caaf' visibility='default' filepath='include/linux/fs_context.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parse_param' type-id='7af12c47' visibility='default' filepath='include/linux/fs_context.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parse_monolithic' type-id='33c348f4' visibility='default' filepath='include/linux/fs_context.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_tree' type-id='57f0383a' visibility='default' filepath='include/linux/fs_context.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reconfigure' type-id='57f0383a' visibility='default' filepath='include/linux/fs_context.h' line='116' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fs_parameter' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/fs_context.h' line='64' column='1' id='f3f97f82'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='80f4b756' visibility='default' filepath='include/linux/fs_context.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='type' type-id='7f8e7476' visibility='default' filepath='include/linux/fs_context.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='f7274614' visibility='default' filepath='include/linux/fs_context.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/fs_context.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dirfd' type-id='95e97e5e' visibility='default' filepath='include/linux/fs_context.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='fs_value_type' filepath='include/linux/fs_context.h' line='51' column='1' id='7f8e7476'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='fs_value_is_undefined' value='0'/>
+        <enumerator name='fs_value_is_flag' value='1'/>
+        <enumerator name='fs_value_is_string' value='2'/>
+        <enumerator name='fs_value_is_blob' value='3'/>
+        <enumerator name='fs_value_is_filename' value='4'/>
+        <enumerator name='fs_value_is_filename_empty' value='5'/>
+        <enumerator name='fs_value_is_file' value='6'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs_context.h' line='67' column='1' id='f7274614'>
+        <data-member access='private'>
+          <var-decl name='string' type-id='26a90f95' visibility='default' filepath='include/linux/fs_context.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='blob' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs_context.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='name' type-id='e9d22a06' visibility='default' filepath='include/linux/fs_context.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/fs_context.h' line='71' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='filename' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='2599' column='1' id='63fc6210'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/fs.h' line='2600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='uptr' type-id='80f4b756' visibility='default' filepath='include/linux/fs.h' line='2601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='refcnt' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='2602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='aname' type-id='5acb442f' visibility='default' filepath='include/linux/fs.h' line='2603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='iname' type-id='0904d1cc' visibility='default' filepath='include/linux/fs.h' line='2604' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vfsmount' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/mount.h' line='69' column='1' id='19e88833'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mnt_root' type-id='27675065' visibility='default' filepath='include/linux/mount.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mnt_sb' type-id='42c8f564' visibility='default' filepath='include/linux/mount.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mnt_flags' type-id='95e97e5e' visibility='default' filepath='include/linux/mount.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mount.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mount.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/mount.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/mount.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fc_log' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/fs_context.h' line='176' column='1' id='fb4c7dfb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='include/linux/fs_context.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='head' type-id='f9b06939' visibility='default' filepath='include/linux/fs_context.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='tail' type-id='f9b06939' visibility='default' filepath='include/linux/fs_context.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='need_free' type-id='f9b06939' visibility='default' filepath='include/linux/fs_context.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/fs_context.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buffer' type-id='460b55b1' visibility='default' filepath='include/linux/fs_context.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='fs_context_purpose' filepath='include/linux/fs_context.h' line='29' column='1' id='4171a6be'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='FS_CONTEXT_FOR_MOUNT' value='0'/>
+        <enumerator name='FS_CONTEXT_FOR_SUBMOUNT' value='1'/>
+        <enumerator name='FS_CONTEXT_FOR_RECONFIGURE' value='2'/>
+      </enum-decl>
+      <enum-decl name='fs_context_phase' filepath='include/linux/fs_context.h' line='38' column='1' id='de54989f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='FS_CONTEXT_CREATE_PARAMS' value='0'/>
+        <enumerator name='FS_CONTEXT_CREATING' value='1'/>
+        <enumerator name='FS_CONTEXT_AWAITING_MOUNT' value='2'/>
+        <enumerator name='FS_CONTEXT_AWAITING_RECONF' value='3'/>
+        <enumerator name='FS_CONTEXT_RECONF_PARAMS' value='4'/>
+        <enumerator name='FS_CONTEXT_RECONFIGURING' value='5'/>
+        <enumerator name='FS_CONTEXT_FAILED' value='6'/>
+      </enum-decl>
+      <class-decl name='tree_descr' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='3424' column='1' id='3f4c2b2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/fs.h' line='3424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='61758ee5' visibility='default' filepath='include/linux/fs.h' line='3424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='3424' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d7ab0a14' size-in-bits='64' id='8567d8b1'/>
+      <pointer-type-def type-id='90177497' size-in-bits='64' id='5acb442f'/>
+      <qualified-type-def type-id='80f4b756' const='yes' id='b99c00c9'/>
+      <pointer-type-def type-id='b99c00c9' size-in-bits='64' id='13956559'/>
+      <qualified-type-def type-id='d2bd1e05' const='yes' id='4b1c1612'/>
+      <pointer-type-def type-id='4b1c1612' size-in-bits='64' id='7536fa28'/>
+      <qualified-type-def type-id='3f4c2b2f' const='yes' id='dc1327b2'/>
+      <pointer-type-def type-id='dc1327b2' size-in-bits='64' id='0a275448'/>
+      <pointer-type-def type-id='fb4c7dfb' size-in-bits='64' id='d1a78aeb'/>
+      <pointer-type-def type-id='63fc6210' size-in-bits='64' id='e9d22a06'/>
+      <pointer-type-def type-id='8d0295a3' size-in-bits='64' id='5760dcb1'/>
+      <pointer-type-def type-id='f3f97f82' size-in-bits='64' id='75615bf0'/>
+      <pointer-type-def type-id='135a5d4b' size-in-bits='64' id='0177caaf'/>
+      <pointer-type-def type-id='c44bfbeb' size-in-bits='64' id='7af12c47'/>
+      <pointer-type-def type-id='91015ee2' size-in-bits='64' id='33c348f4'/>
+      <pointer-type-def type-id='845f3205' size-in-bits='64' id='30341fa1'/>
+      <pointer-type-def type-id='60efdfd3' size-in-bits='64' id='5bfdb453'/>
+      <pointer-type-def type-id='f19fdb93' size-in-bits='64' id='9b58df93'/>
+      <pointer-type-def type-id='19e88833' size-in-bits='64' id='549da823'/>
+      <pointer-type-def type-id='549da823' size-in-bits='64' id='3d2f862b'/>
+      <pointer-type-def type-id='41f25325' size-in-bits='64' id='18811e61'/>
+      <function-decl name='unregister_binfmt' mangled-name='unregister_binfmt' filepath='include/linux/binfmts.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_binfmt'>
+        <parameter type-id='7cc59444'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='get_tree_single' mangled-name='get_tree_single' filepath='include/linux/fs_context.h' line='155' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_tree_single'>
+        <parameter type-id='5760dcb1'/>
+        <parameter type-id='30341fa1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='simple_fill_super' mangled-name='simple_fill_super' filepath='include/linux/fs.h' line='3426' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_fill_super'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='0a275448'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clear_inode' mangled-name='clear_inode' filepath='include/linux/fs.h' line='3159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clear_inode'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kstrtoint' mangled-name='kstrtoint' filepath='include/linux/kernel.h' line='404' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtoint'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='string_unescape' mangled-name='string_unescape' filepath='include/linux/string_helpers.h' line='27' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='string_unescape'>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='down_write' mangled-name='down_write' filepath='include/linux/rwsem.h' line='141' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='down_write'>
+        <parameter type-id='9b58df93'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='lookup_one_len' mangled-name='lookup_one_len' filepath='include/linux/namei.h' line='61' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lookup_one_len'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='dput' mangled-name='dput' filepath='include/linux/dcache.h' line='382' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dput'>
+        <parameter type-id='27675065'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='up_write' mangled-name='up_write' filepath='include/linux/rwsem.h' line='157' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='up_write'>
+        <parameter type-id='9b58df93'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='get_next_ino' mangled-name='get_next_ino' filepath='include/linux/fs.h' line='3154' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_next_ino'>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='current_time' mangled-name='current_time' filepath='include/linux/fs.h' line='1635' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='current_time'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='40a816ad'/>
+      </function-decl>
+      <function-decl name='simple_pin_fs' mangled-name='simple_pin_fs' filepath='include/linux/fs.h' line='3428' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_pin_fs'>
+        <parameter type-id='21e53d44'/>
+        <parameter type-id='3d2f862b'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iput' mangled-name='iput' filepath='include/linux/fs.h' line='2415' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iput'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='open_exec' mangled-name='open_exec' filepath='include/linux/fs.h' line='3100' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='open_exec'>
+        <parameter type-id='80f4b756'/>
+        <return type-id='77e79a4b'/>
+      </function-decl>
+      <function-decl name='lockref_get' mangled-name='lockref_get' filepath='include/linux/lockref.h' line='37' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lockref_get'>
+        <parameter type-id='5bfdb453'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='d_instantiate' mangled-name='d_instantiate' filepath='include/linux/dcache.h' line='236' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_instantiate'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='7e666abe'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_write_lock' mangled-name='_raw_write_lock' filepath='include/linux/rwlock_api_smp.h' line='19' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_write_lock'>
+        <parameter type-id='8567d8b1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_write_unlock' mangled-name='_raw_write_unlock' filepath='include/linux/rwlock_api_smp.h' line='31' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_write_unlock'>
+        <parameter type-id='8567d8b1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='simple_release_fs' mangled-name='simple_release_fs' filepath='include/linux/fs.h' line='3429' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_release_fs'>
+        <parameter type-id='3d2f862b'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bin2hex' mangled-name='bin2hex' filepath='include/linux/kernel.h' line='632' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bin2hex'>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='free_pages' mangled-name='free_pages' filepath='include/linux/gfp.h' line='574' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_pages'>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drop_nlink' mangled-name='drop_nlink' filepath='include/linux/fs.h' line='2258' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drop_nlink'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='d_drop' mangled-name='d_drop' filepath='include/linux/dcache.h' line='241' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_drop'>
+        <parameter type-id='27675065'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_read_lock' mangled-name='_raw_read_lock' filepath='include/linux/rwlock_api_smp.h' line='18' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_read_lock'>
+        <parameter type-id='8567d8b1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_read_unlock' mangled-name='_raw_read_unlock' filepath='include/linux/rwlock_api_smp.h' line='30' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_read_unlock'>
+        <parameter type-id='8567d8b1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='remove_arg_zero' mangled-name='remove_arg_zero' filepath='include/linux/binfmts.h' line='127' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='remove_arg_zero'>
+        <parameter type-id='8912440a'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='fput' mangled-name='fput' filepath='include/linux/file.h' line='15' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fput'>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='get_unused_fd_flags' mangled-name='get_unused_fd_flags' filepath='include/linux/file.h' line='86' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_unused_fd_flags'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='fd_install' mangled-name='fd_install' filepath='include/linux/file.h' line='89' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fd_install'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='would_dump' mangled-name='would_dump' filepath='include/linux/binfmts.h' line='132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='would_dump'>
+        <parameter type-id='8912440a'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='copy_strings_kernel' mangled-name='copy_strings_kernel' filepath='include/linux/binfmts.h' line='147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='copy_strings_kernel'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='13956559'/>
+        <parameter type-id='8912440a'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bprm_change_interp' mangled-name='bprm_change_interp' filepath='include/linux/binfmts.h' line='146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bprm_change_interp'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='8912440a'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dentry_open' mangled-name='dentry_open' filepath='include/linux/fs.h' line='2619' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dentry_open'>
+        <parameter type-id='a77efac3'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='bc33861a'/>
+        <return type-id='77e79a4b'/>
+      </function-decl>
+      <function-decl name='prepare_binprm' mangled-name='prepare_binprm' filepath='include/linux/binfmts.h' line='126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='prepare_binprm'>
+        <parameter type-id='8912440a'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='search_binary_handler' mangled-name='search_binary_handler' filepath='include/linux/binfmts.h' line='128' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='search_binary_handler'>
+        <parameter type-id='8912440a'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='135a5d4b'>
+        <parameter type-id='5760dcb1'/>
+        <parameter type-id='5760dcb1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c44bfbeb'>
+        <parameter type-id='5760dcb1'/>
+        <parameter type-id='75615bf0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='91015ee2'>
+        <parameter type-id='5760dcb1'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='845f3205'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='5760dcb1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='41f25325'>
+        <parameter type-id='5760dcb1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='2376c3ec' size-in-bits='64' id='8912440a'/>
+      <class-decl name='linux_binprm' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/linux/binfmts.h' line='17' column='1' id='2376c3ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vma' type-id='2ae08426' visibility='default' filepath='include/linux/binfmts.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vma_pages' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mm' type-id='df4b7819' visibility='default' filepath='include/linux/binfmts.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='p' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='argmin' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='called_set_creds' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='cap_elevated' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='secureexec' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='called_exec_mmap' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='recursion_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/binfmts.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cred' type-id='10cfb911' visibility='default' filepath='include/linux/binfmts.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='unsafe' type-id='95e97e5e' visibility='default' filepath='include/linux/binfmts.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='per_clear' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='argc' type-id='95e97e5e' visibility='default' filepath='include/linux/binfmts.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='envc' type-id='95e97e5e' visibility='default' filepath='include/linux/binfmts.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='filename' type-id='80f4b756' visibility='default' filepath='include/linux/binfmts.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='interp' type-id='80f4b756' visibility='default' filepath='include/linux/binfmts.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='interp_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='interp_data' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='loader' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='exec' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rlim_stack' type-id='60dcbf6c' visibility='default' filepath='include/linux/binfmts.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='buf' type-id='d1617432' visibility='default' filepath='include/linux/binfmts.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='2048' id='d1617432'>
+        <subrange length='256' type-id='7ff19f0f' id='36e5b9fa'/>
+      </array-type-def>
+      <pointer-type-def type-id='6739dd09' size-in-bits='64' id='10cfb911'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/binfmt_script.c' language='LANG_C89'>
+      <function-decl name='strnchr' mangled-name='strnchr' filepath='include/linux/string.h' line='66' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strnchr'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/block_dev.c' language='LANG_C89'>
+      <pointer-type-def type-id='607b8856' size-in-bits='64' id='cfed8d40'/>
+      <function-decl name='fsync_bdev' mangled-name='fsync_bdev' filepath='fs/block_dev.c' line='510' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fsync_bdev'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/block_dev.c' line='510' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bdput' mangled-name='bdput' filepath='fs/block_dev.c' line='959' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bdput'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/block_dev.c' line='959' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bdget_disk' mangled-name='bdget_disk' filepath='include/linux/genhd.h' line='454' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bdget_disk'>
+        <parameter type-id='33c599db'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='b88dd945'/>
+      </function-decl>
+      <function-decl name='bd_link_disk_holder' mangled-name='bd_link_disk_holder' filepath='fs/block_dev.c' line='1303' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bd_link_disk_holder'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/block_dev.c' line='1303' column='1'/>
+        <parameter type-id='33c599db' name='disk' filepath='fs/block_dev.c' line='1303' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bd_unlink_disk_holder' mangled-name='bd_unlink_disk_holder' filepath='fs/block_dev.c' line='1368' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bd_unlink_disk_holder'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/block_dev.c' line='1368' column='1'/>
+        <parameter type-id='33c599db' name='disk' filepath='fs/block_dev.c' line='1368' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='check_disk_change' mangled-name='check_disk_change' filepath='fs/block_dev.c' line='1483' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='check_disk_change'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/block_dev.c' line='1483' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blkdev_get_by_dev' mangled-name='blkdev_get_by_dev' filepath='fs/block_dev.c' line='1807' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blkdev_get_by_dev'>
+        <parameter type-id='8504f260' name='dev' filepath='fs/block_dev.c' line='1807' column='1'/>
+        <parameter type-id='2665334e' name='mode' filepath='fs/block_dev.c' line='1807' column='1'/>
+        <parameter type-id='eaa32e2f' name='holder' filepath='fs/block_dev.c' line='1807' column='1'/>
+        <return type-id='b88dd945'/>
+      </function-decl>
+      <function-decl name='bdevname' mangled-name='bdevname' filepath='include/linux/fs.h' line='2780' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bdevname'>
+        <parameter type-id='b88dd945'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='mpage_readpages' mangled-name='mpage_readpages' filepath='include/linux/mpage.h' line='17' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mpage_readpages'>
+        <parameter type-id='f57039f0'/>
+        <parameter type-id='e84b031a'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='cfed8d40'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bio_init' mangled-name='bio_init' filepath='include/linux/bio.h' line='434' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bio_init'>
+        <parameter type-id='fb55efa1'/>
+        <parameter type-id='cddcb53e'/>
+        <parameter type-id='8efea9e5'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='607b8856'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='c485c22c'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <pointer-type-def type-id='4943c066' size-in-bits='64' id='c485c22c'/>
+      <class-decl name='buffer_head' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/buffer_head.h' line='63' column='1' id='4943c066'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='b_state' type-id='7359adad' visibility='default' filepath='include/linux/buffer_head.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='b_this_page' type-id='c485c22c' visibility='default' filepath='include/linux/buffer_head.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='b_page' type-id='02f11ed4' visibility='default' filepath='include/linux/buffer_head.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='b_blocknr' type-id='a42536cd' visibility='default' filepath='include/linux/buffer_head.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='b_size' type-id='b59d7dce' visibility='default' filepath='include/linux/buffer_head.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='b_data' type-id='26a90f95' visibility='default' filepath='include/linux/buffer_head.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='b_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/buffer_head.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='b_end_io' type-id='7874b245' visibility='default' filepath='include/linux/buffer_head.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='b_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/buffer_head.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='b_assoc_buffers' type-id='72f469ec' visibility='default' filepath='include/linux/buffer_head.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='b_assoc_map' type-id='f57039f0' visibility='default' filepath='include/linux/buffer_head.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='b_count' type-id='49178f86' visibility='default' filepath='include/linux/buffer_head.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='6797a3ea' size-in-bits='64' id='7874b245'/>
+      <typedef-decl name='bh_end_io_t' type-id='e1740daa' filepath='include/linux/buffer_head.h' line='52' column='1' id='6797a3ea'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/buffer.c' language='LANG_C89'>
+      <typedef-decl name='get_block_t' type-id='45550f94' filepath='include/linux/fs.h' line='91' column='1' id='4316c9c9'/>
+      <enum-decl name='writeback_sync_modes' filepath='include/linux/writeback.h' line='41' column='1' id='cf92d981'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='WB_SYNC_NONE' value='0'/>
+        <enumerator name='WB_SYNC_ALL' value='1'/>
+      </enum-decl>
+      <pointer-type-def type-id='c485c22c' size-in-bits='64' id='64906f72'/>
+      <pointer-type-def type-id='4316c9c9' size-in-bits='64' id='05ca8778'/>
+      <function-decl name='touch_buffer' mangled-name='touch_buffer' filepath='fs/buffer.c' line='58' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='touch_buffer'>
+        <parameter type-id='c485c22c' name='bh' filepath='fs/buffer.c' line='58' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__lock_buffer' mangled-name='__lock_buffer' filepath='fs/buffer.c' line='65' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__lock_buffer'>
+        <parameter type-id='c485c22c' name='bh' filepath='fs/buffer.c' line='65' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__wait_on_buffer' mangled-name='__wait_on_buffer' filepath='fs/buffer.c' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__wait_on_buffer'>
+        <parameter type-id='c485c22c' name='bh' filepath='fs/buffer.c' line='118' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='end_buffer_read_sync' mangled-name='end_buffer_read_sync' filepath='fs/buffer.c' line='163' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='end_buffer_read_sync'>
+        <parameter type-id='c485c22c' name='bh' filepath='fs/buffer.c' line='163' column='1'/>
+        <parameter type-id='95e97e5e' name='uptodate' filepath='fs/buffer.c' line='163' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__find_get_block' mangled-name='__find_get_block' filepath='fs/buffer.c' line='1291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__find_get_block'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/buffer.c' line='1291' column='1'/>
+        <parameter type-id='a42536cd' name='block' filepath='fs/buffer.c' line='1291' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='fs/buffer.c' line='1291' column='1'/>
+        <return type-id='c485c22c'/>
+      </function-decl>
+      <function-decl name='ll_rw_block' mangled-name='ll_rw_block' filepath='fs/buffer.c' line='3106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ll_rw_block'>
+        <parameter type-id='95e97e5e' name='op' filepath='fs/buffer.c' line='3106' column='1'/>
+        <parameter type-id='95e97e5e' name='op_flags' filepath='fs/buffer.c' line='3106' column='1'/>
+        <parameter type-id='95e97e5e' name='nr' filepath='fs/buffer.c' line='3106' column='1'/>
+        <parameter type-id='64906f72' name='bhs' filepath='fs/buffer.c' line='3106' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mark_buffer_dirty' mangled-name='mark_buffer_dirty' filepath='fs/buffer.c' line='1087' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mark_buffer_dirty'>
+        <parameter type-id='c485c22c' name='bh' filepath='fs/buffer.c' line='1087' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='invalidate_inode_buffers' mangled-name='invalidate_inode_buffers' filepath='fs/buffer.c' line='762' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='invalidate_inode_buffers'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/buffer.c' line='762' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='alloc_page_buffers' mangled-name='alloc_page_buffers' filepath='fs/buffer.c' line='815' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_page_buffers'>
+        <parameter type-id='02f11ed4' name='page' filepath='fs/buffer.c' line='815' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='fs/buffer.c' line='815' column='1'/>
+        <parameter type-id='b50a4934' name='retry' filepath='fs/buffer.c' line='816' column='1'/>
+        <return type-id='c485c22c'/>
+      </function-decl>
+      <function-decl name='free_buffer_head' mangled-name='free_buffer_head' filepath='fs/buffer.c' line='3364' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_buffer_head'>
+        <parameter type-id='c485c22c' name='bh' filepath='fs/buffer.c' line='3364' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__brelse' mangled-name='__brelse' filepath='fs/buffer.c' line='1140' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__brelse'>
+        <parameter type-id='c485c22c' name='buf' filepath='fs/buffer.c' line='1140' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__getblk_gfp' mangled-name='__getblk_gfp' filepath='fs/buffer.c' line='1316' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__getblk_gfp'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/buffer.c' line='1316' column='1'/>
+        <parameter type-id='a42536cd' name='block' filepath='fs/buffer.c' line='1316' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='fs/buffer.c' line='1317' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='fs/buffer.c' line='1317' column='1'/>
+        <return type-id='c485c22c'/>
+      </function-decl>
+      <function-decl name='__breadahead' mangled-name='__breadahead' filepath='fs/buffer.c' line='1331' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__breadahead'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/buffer.c' line='1331' column='1'/>
+        <parameter type-id='a42536cd' name='block' filepath='fs/buffer.c' line='1331' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='fs/buffer.c' line='1331' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__bread_gfp' mangled-name='__bread_gfp' filepath='fs/buffer.c' line='1365' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__bread_gfp'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/buffer.c' line='1365' column='1'/>
+        <parameter type-id='a42536cd' name='block' filepath='fs/buffer.c' line='1365' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='fs/buffer.c' line='1366' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='fs/buffer.c' line='1366' column='1'/>
+        <return type-id='c485c22c'/>
+      </function-decl>
+      <function-decl name='create_empty_buffers' mangled-name='create_empty_buffers' filepath='fs/buffer.c' line='1525' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='create_empty_buffers'>
+        <parameter type-id='02f11ed4' name='page' filepath='fs/buffer.c' line='1525' column='1'/>
+        <parameter type-id='7359adad' name='blocksize' filepath='fs/buffer.c' line='1526' column='1'/>
+        <parameter type-id='7359adad' name='b_state' filepath='fs/buffer.c' line='1526' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='generic_write_end' mangled-name='generic_write_end' filepath='fs/buffer.c' line='2137' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_write_end'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/buffer.c' line='2137' column='1'/>
+        <parameter type-id='f57039f0' name='mapping' filepath='fs/buffer.c' line='2137' column='1'/>
+        <parameter type-id='69bf7bee' name='pos' filepath='fs/buffer.c' line='2138' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='fs/buffer.c' line='2138' column='1'/>
+        <parameter type-id='f0981eeb' name='copied' filepath='fs/buffer.c' line='2138' column='1'/>
+        <parameter type-id='02f11ed4' name='page' filepath='fs/buffer.c' line='2139' column='1'/>
+        <parameter type-id='eaa32e2f' name='fsdata' filepath='fs/buffer.c' line='2139' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='block_is_partially_uptodate' mangled-name='block_is_partially_uptodate' filepath='fs/buffer.c' line='2183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='block_is_partially_uptodate'>
+        <parameter type-id='02f11ed4' name='page' filepath='fs/buffer.c' line='2183' column='1'/>
+        <parameter type-id='7359adad' name='from' filepath='fs/buffer.c' line='2183' column='1'/>
+        <parameter type-id='7359adad' name='count' filepath='fs/buffer.c' line='2184' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='submit_bh' mangled-name='submit_bh' filepath='fs/buffer.c' line='3074' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='submit_bh'>
+        <parameter type-id='95e97e5e' name='op' filepath='fs/buffer.c' line='3074' column='1'/>
+        <parameter type-id='95e97e5e' name='op_flags' filepath='fs/buffer.c' line='3074' column='1'/>
+        <parameter type-id='c485c22c' name='bh' filepath='fs/buffer.c' line='3074' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='generic_cont_expand_simple' mangled-name='generic_cont_expand_simple' filepath='fs/buffer.c' line='2318' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_cont_expand_simple'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/buffer.c' line='2318' column='1'/>
+        <parameter type-id='69bf7bee' name='size' filepath='fs/buffer.c' line='2318' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cont_write_begin' mangled-name='cont_write_begin' filepath='fs/buffer.c' line='2418' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cont_write_begin'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/buffer.c' line='2418' column='1'/>
+        <parameter type-id='f57039f0' name='mapping' filepath='fs/buffer.c' line='2418' column='1'/>
+        <parameter type-id='69bf7bee' name='pos' filepath='fs/buffer.c' line='2419' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='fs/buffer.c' line='2419' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='fs/buffer.c' line='2419' column='1'/>
+        <parameter type-id='9f93c9da' name='pagep' filepath='fs/buffer.c' line='2420' column='1'/>
+        <parameter type-id='63e171df' name='fsdata' filepath='fs/buffer.c' line='2420' column='1'/>
+        <parameter type-id='05ca8778' name='get_block' filepath='fs/buffer.c' line='2421' column='1'/>
+        <parameter type-id='b53e8dbb' name='bytes' filepath='fs/buffer.c' line='2421' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='block_write_full_page' mangled-name='block_write_full_page' filepath='fs/buffer.c' line='2921' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='block_write_full_page'>
+        <parameter type-id='02f11ed4' name='page' filepath='fs/buffer.c' line='2921' column='1'/>
+        <parameter type-id='05ca8778' name='get_block' filepath='fs/buffer.c' line='2921' column='1'/>
+        <parameter type-id='c2c60445' name='wbc' filepath='fs/buffer.c' line='2922' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='generic_block_bmap' mangled-name='generic_block_bmap' filepath='fs/buffer.c' line='2954' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_block_bmap'>
+        <parameter type-id='f57039f0' name='mapping' filepath='fs/buffer.c' line='2954' column='1'/>
+        <parameter type-id='a42536cd' name='block' filepath='fs/buffer.c' line='2954' column='1'/>
+        <parameter type-id='05ca8778' name='get_block' filepath='fs/buffer.c' line='2955' column='1'/>
+        <return type-id='a42536cd'/>
+      </function-decl>
+      <function-decl name='__sync_dirty_buffer' mangled-name='__sync_dirty_buffer' filepath='fs/buffer.c' line='3153' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sync_dirty_buffer'>
+        <parameter type-id='c485c22c' name='bh' filepath='fs/buffer.c' line='3153' column='1'/>
+        <parameter type-id='95e97e5e' name='op_flags' filepath='fs/buffer.c' line='3153' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='45550f94'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='a42536cd'/>
+        <parameter type-id='c485c22c'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/char_dev.c' language='LANG_C89'>
+      <function-decl name='register_chrdev_region' mangled-name='register_chrdev_region' filepath='fs/char_dev.c' line='200' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_chrdev_region'>
+        <parameter type-id='8504f260' name='from' filepath='fs/char_dev.c' line='200' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='fs/char_dev.c' line='200' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='fs/char_dev.c' line='200' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__register_chrdev' mangled-name='__register_chrdev' filepath='fs/char_dev.c' line='268' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__register_chrdev'>
+        <parameter type-id='f0981eeb' name='major' filepath='fs/char_dev.c' line='268' column='1'/>
+        <parameter type-id='f0981eeb' name='baseminor' filepath='fs/char_dev.c' line='268' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='fs/char_dev.c' line='269' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='fs/char_dev.c' line='269' column='1'/>
+        <parameter type-id='61758ee5' name='fops' filepath='fs/char_dev.c' line='270' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cdev_alloc' mangled-name='cdev_alloc' filepath='fs/char_dev.c' line='630' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdev_alloc'>
+        <return type-id='3e6eb93a'/>
+      </function-decl>
+      <function-decl name='__unregister_chrdev' mangled-name='__unregister_chrdev' filepath='fs/char_dev.c' line='335' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__unregister_chrdev'>
+        <parameter type-id='f0981eeb' name='major' filepath='fs/char_dev.c' line='335' column='1'/>
+        <parameter type-id='f0981eeb' name='baseminor' filepath='fs/char_dev.c' line='335' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='fs/char_dev.c' line='336' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='fs/char_dev.c' line='336' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/configfs/dir.c' language='LANG_C89'>
+      <function-decl name='configfs_register_subsystem' mangled-name='configfs_register_subsystem' filepath='fs/configfs/dir.c' line='1864' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='configfs_register_subsystem'>
+        <parameter type-id='598755ca' name='subsys' filepath='fs/configfs/dir.c' line='1864' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='configfs_unregister_subsystem' mangled-name='configfs_unregister_subsystem' filepath='fs/configfs/dir.c' line='1920' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='configfs_unregister_subsystem'>
+        <parameter type-id='598755ca' name='subsys' filepath='fs/configfs/dir.c' line='1920' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/configfs/file.c' language='LANG_C89'>
+      <function-decl name='config_item_put' mangled-name='config_item_put' filepath='include/linux/configfs.h' line='65' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='config_item_put'>
+        <parameter type-id='7a29ff27'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/configfs/mount.c' language='LANG_C89'>
+      <function-decl name='config_group_init' mangled-name='config_group_init' filepath='include/linux/configfs.h' line='87' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='config_group_init'>
+        <parameter type-id='97aff454'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/crypto/bio.c' language='LANG_C89'>
+      <function-decl name='submit_bio_wait' mangled-name='submit_bio_wait' filepath='include/linux/bio.h' line='431' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='submit_bio_wait'>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/crypto/inline_crypt.c' language='LANG_C89'>
+      <class-decl name='fscrypt_direct_key' is-struct='yes' visibility='default' is-declaration-only='yes' id='9df4c74e'/>
+      <array-type-def dimensions='1' type-id='e7d2a5fd' size-in-bits='infinite' id='60a540a8'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='fscrypt_prepared_key' size-in-bits='128' is-struct='yes' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='181' column='1' id='a28355c2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tfm' type-id='72bb8c36' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='blk_key' type-id='cb6e5180' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='184' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fscrypt_blk_crypto_key' size-in-bits='1280' is-struct='yes' visibility='default' filepath='fs/crypto/inline_crypt.c' line='24' column='1' id='d509ab32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='7b61b7b4' visibility='default' filepath='fs/crypto/inline_crypt.c' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='num_devs' type-id='95e97e5e' visibility='default' filepath='fs/crypto/inline_crypt.c' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='devs' type-id='60a540a8' visibility='default' filepath='fs/crypto/inline_crypt.c' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fscrypt_mode' size-in-bits='256' is-struct='yes' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='580' column='1' id='80a367ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='friendly_name' type-id='80f4b756' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cipher_str' type-id='80f4b756' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='keysize' type-id='95e97e5e' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ivsize' type-id='95e97e5e' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='logged_impl_name' type-id='95e97e5e' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='blk_crypto_mode' type-id='e951e732' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='586' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='fscrypt_policy' size-in-bits='192' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='105' column='1' id='61227238'>
+        <data-member access='private'>
+          <var-decl name='version' type-id='f9b06939' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='v1' type-id='74e2c23b' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='v2' type-id='75e2c3ce' visibility='default' filepath='fs/crypto/fscrypt_private.h' line='108' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='fscrypt_policy_v1' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='40' column='1' id='74e2c23b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='contents_encryption_mode' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='filenames_encryption_mode' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='master_key_descriptor' type-id='0209ab38' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fscrypt_policy_v2' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='66' column='1' id='75e2c3ce'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='contents_encryption_mode' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='filenames_encryption_mode' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='__reserved' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='master_key_identifier' type-id='9396cabb' visibility='default' filepath='include/uapi/linux/fscrypt.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d509ab32' size-in-bits='64' id='cb6e5180'/>
+      <pointer-type-def type-id='9df4c74e' size-in-bits='64' id='8ce270a4'/>
+      <pointer-type-def type-id='80a367ec' size-in-bits='64' id='65936caa'/>
+      <function-decl name='blk_get_queue' mangled-name='blk_get_queue' filepath='include/linux/blkdev.h' line='1153' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_get_queue'>
+        <parameter type-id='e7d2a5fd'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/crypto/keyring.c' language='LANG_C89'>
+      <function-decl name='key_invalidate' mangled-name='key_invalidate' filepath='include/linux/key.h' line='274' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='key_invalidate'>
+        <parameter type-id='204a4632'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='register_key_type' mangled-name='register_key_type' filepath='include/linux/key-type.h' line='165' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_key_type'>
+        <parameter type-id='d0a699d1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_key_type' mangled-name='unregister_key_type' filepath='include/linux/key-type.h' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_key_type'>
+        <parameter type-id='d0a699d1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/dcache.c' language='LANG_C89'>
+      <function-decl name='d_alloc_name' mangled-name='d_alloc_name' filepath='fs/dcache.c' line='1825' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_alloc_name'>
+        <parameter type-id='27675065' name='parent' filepath='fs/dcache.c' line='1825' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='fs/dcache.c' line='1825' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='d_obtain_alias' mangled-name='d_obtain_alias' filepath='fs/dcache.c' line='2090' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_obtain_alias'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/dcache.c' line='2090' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='d_add_ci' mangled-name='d_add_ci' filepath='fs/dcache.c' line='2133' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_add_ci'>
+        <parameter type-id='27675065' name='dentry' filepath='fs/dcache.c' line='2133' column='1'/>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/dcache.c' line='2133' column='1'/>
+        <parameter type-id='b316d9a3' name='name' filepath='fs/dcache.c' line='2134' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='d_add' mangled-name='d_add' filepath='fs/dcache.c' line='2676' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_add'>
+        <parameter type-id='27675065' name='entry' filepath='fs/dcache.c' line='2676' column='1'/>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/dcache.c' line='2676' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/debugfs/file.c' language='LANG_C89'>
+      <function-decl name='debugfs_attr_read' mangled-name='debugfs_attr_read' filepath='fs/debugfs/file.c' line='361' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_attr_read'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/debugfs/file.c' line='361' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='fs/debugfs/file.c' line='361' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='fs/debugfs/file.c' line='362' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='fs/debugfs/file.c' line='362' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='debugfs_attr_write' mangled-name='debugfs_attr_write' filepath='fs/debugfs/file.c' line='376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_attr_write'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/debugfs/file.c' line='376' column='1'/>
+        <parameter type-id='80f4b756' name='buf' filepath='fs/debugfs/file.c' line='376' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='fs/debugfs/file.c' line='377' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='fs/debugfs/file.c' line='377' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='debugfs_create_u32' mangled-name='debugfs_create_u32' filepath='fs/debugfs/file.c' line='536' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_u32'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/debugfs/file.c' line='536' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/debugfs/file.c' line='536' column='1'/>
+        <parameter type-id='27675065' name='parent' filepath='fs/debugfs/file.c' line='537' column='1'/>
+        <parameter type-id='f9409001' name='value' filepath='fs/debugfs/file.c' line='537' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='debugfs_create_x32' mangled-name='debugfs_create_x32' filepath='fs/debugfs/file.c' line='712' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_x32'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/debugfs/file.c' line='712' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/debugfs/file.c' line='712' column='1'/>
+        <parameter type-id='27675065' name='parent' filepath='fs/debugfs/file.c' line='713' column='1'/>
+        <parameter type-id='f9409001' name='value' filepath='fs/debugfs/file.c' line='713' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='debugfs_create_size_t' mangled-name='debugfs_create_size_t' filepath='fs/debugfs/file.c' line='764' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_size_t'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/debugfs/file.c' line='764' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/debugfs/file.c' line='764' column='1'/>
+        <parameter type-id='27675065' name='parent' filepath='fs/debugfs/file.c' line='765' column='1'/>
+        <parameter type-id='78c01427' name='value' filepath='fs/debugfs/file.c' line='765' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='kstrtobool_from_user' mangled-name='kstrtobool_from_user' filepath='include/linux/kernel.h' line='442' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtobool_from_user'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='d8e6b336'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/debugfs/inode.c' language='LANG_C89'>
+      <function-decl name='debugfs_create_file_unsafe' mangled-name='debugfs_create_file_unsafe' filepath='fs/debugfs/inode.c' line='475' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_file_unsafe'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/debugfs/inode.c' line='475' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/debugfs/inode.c' line='475' column='1'/>
+        <parameter type-id='27675065' name='parent' filepath='fs/debugfs/inode.c' line='476' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/debugfs/inode.c' line='476' column='1'/>
+        <parameter type-id='61758ee5' name='fops' filepath='fs/debugfs/inode.c' line='477' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='debugfs_remove' mangled-name='debugfs_remove' filepath='fs/debugfs/inode.c' line='725' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_remove'>
+        <parameter type-id='27675065' name='dentry' filepath='fs/debugfs/inode.c' line='725' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/devpts/inode.c' language='LANG_C89'>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/parser.h' line='25' column='1' id='52365588'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='from' type-id='26a90f95' visibility='default' filepath='include/linux/parser.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='to' type-id='26a90f95' visibility='default' filepath='include/linux/parser.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='52365588' size-in-bits='64' id='8567d8b2'/>
+      <function-decl name='match_int' mangled-name='match_int' filepath='include/linux/parser.h' line='31' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='match_int'>
+        <parameter type-id='8567d8b2'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='match_octal' mangled-name='match_octal' filepath='include/linux/parser.h' line='33' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='match_octal'>
+        <parameter type-id='8567d8b2'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/direct-io.c' language='LANG_C89'>
+      <typedef-decl name='dio_iodone_t' type-id='7702511a' filepath='include/linux/fs.h' line='93' column='1' id='4904ecea'/>
+      <typedef-decl name='dio_submit_t' type-id='6d229cce' filepath='include/linux/fs.h' line='3245' column='1' id='27d499b2'/>
+      <pointer-type-def type-id='4904ecea' size-in-bits='64' id='f0934dcb'/>
+      <pointer-type-def type-id='27d499b2' size-in-bits='64' id='13e0bcaf'/>
+      <function-decl name='__blockdev_direct_IO' mangled-name='__blockdev_direct_IO' filepath='fs/direct-io.c' line='1407' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__blockdev_direct_IO'>
+        <parameter type-id='80f25feb' name='iocb' filepath='fs/direct-io.c' line='1407' column='1'/>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/direct-io.c' line='1407' column='1'/>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/direct-io.c' line='1408' column='1'/>
+        <parameter type-id='4fa10f9e' name='iter' filepath='fs/direct-io.c' line='1408' column='1'/>
+        <parameter type-id='05ca8778' name='get_block' filepath='fs/direct-io.c' line='1409' column='1'/>
+        <parameter type-id='f0934dcb' name='end_io' filepath='fs/direct-io.c' line='1410' column='1'/>
+        <parameter type-id='13e0bcaf' name='submit_io' filepath='fs/direct-io.c' line='1410' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='fs/direct-io.c' line='1411' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='7702511a'>
+        <parameter type-id='80f25feb'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='79a0948f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6d229cce'>
+        <parameter type-id='fb55efa1'/>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='69bf7bee'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/exec.c' language='LANG_C89'>
+      <function-decl name='__register_binfmt' mangled-name='__register_binfmt' filepath='fs/exec.c' line='81' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__register_binfmt'>
+        <parameter type-id='7cc59444' name='fmt' filepath='fs/exec.c' line='81' column='1'/>
+        <parameter type-id='95e97e5e' name='insert' filepath='fs/exec.c' line='81' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__get_task_comm' mangled-name='__get_task_comm' filepath='fs/exec.c' line='1254' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__get_task_comm'>
+        <parameter type-id='26a90f95' name='buf' filepath='fs/exec.c' line='1254' column='1'/>
+        <parameter type-id='b59d7dce' name='buf_size' filepath='fs/exec.c' line='1254' column='1'/>
+        <parameter type-id='f23e2572' name='tsk' filepath='fs/exec.c' line='1254' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/ext4/bitmap.c' language='LANG_C89'>
+      <function-decl name='memweight' mangled-name='memweight' filepath='include/linux/string.h' line='231' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memweight'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/f2fs/compress.c' language='LANG_C89'>
+      <function-decl name='lzo1x_decompress_safe' mangled-name='lzo1x_decompress_safe' filepath='include/linux/lzo.h' line='32' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzo1x_decompress_safe'>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/fat/dir.c' language='LANG_C89'>
+      <function-decl name='utf16s_to_utf8s' mangled-name='utf16s_to_utf8s' filepath='include/linux/nls.h' line='59' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='utf16s_to_utf8s'>
+        <parameter type-id='31347b7a'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='11d12470'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <enum-decl name='utf16_endian' filepath='include/linux/nls.h' line='41' column='1' id='11d12470'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UTF16_HOST_ENDIAN' value='0'/>
+        <enumerator name='UTF16_LITTLE_ENDIAN' value='1'/>
+        <enumerator name='UTF16_BIG_ENDIAN' value='2'/>
+      </enum-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/fat/namei_vfat.c' language='LANG_C89'>
+      <class-decl name='buffer_head' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/buffer_head.h' line='63' column='1' id='4943c066'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='b_state' type-id='7359adad' visibility='default' filepath='include/linux/buffer_head.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='b_this_page' type-id='c485c22c' visibility='default' filepath='include/linux/buffer_head.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='b_page' type-id='02f11ed4' visibility='default' filepath='include/linux/buffer_head.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='b_blocknr' type-id='a42536cd' visibility='default' filepath='include/linux/buffer_head.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='b_size' type-id='b59d7dce' visibility='default' filepath='include/linux/buffer_head.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='b_data' type-id='26a90f95' visibility='default' filepath='include/linux/buffer_head.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='b_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/buffer_head.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='b_end_io' type-id='7874b245' visibility='default' filepath='include/linux/buffer_head.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='b_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/buffer_head.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='b_assoc_buffers' type-id='72f469ec' visibility='default' filepath='include/linux/buffer_head.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='b_assoc_map' type-id='f57039f0' visibility='default' filepath='include/linux/buffer_head.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='b_count' type-id='49178f86' visibility='default' filepath='include/linux/buffer_head.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='bh_end_io_t' type-id='e1740daa' filepath='include/linux/buffer_head.h' line='52' column='1' id='6797a3ea'/>
+      <enum-decl name='utf16_endian' filepath='include/linux/nls.h' line='41' column='1' id='11d12470'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UTF16_HOST_ENDIAN' value='0'/>
+        <enumerator name='UTF16_LITTLE_ENDIAN' value='1'/>
+        <enumerator name='UTF16_BIG_ENDIAN' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='6797a3ea' size-in-bits='64' id='7874b245'/>
+      <pointer-type-def type-id='4943c066' size-in-bits='64' id='c485c22c'/>
+      <pointer-type-def type-id='925167dc' size-in-bits='64' id='e0ea832a'/>
+      <pointer-type-def type-id='8efea9e5' size-in-bits='64' id='e9e550dd'/>
+      <function-decl name='full_name_hash' mangled-name='full_name_hash' filepath='include/linux/stringhash.h' line='66' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='full_name_hash'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='mutex_lock' mangled-name='mutex_lock' filepath='include/linux/mutex.h' line='165' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_lock'>
+        <parameter type-id='e0ea832a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mutex_unlock' mangled-name='mutex_unlock' filepath='include/linux/mutex.h' line='184' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_unlock'>
+        <parameter type-id='e0ea832a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='d_find_alias' mangled-name='d_find_alias' filepath='include/linux/dcache.h' line='269' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_find_alias'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='d_move' mangled-name='d_move' filepath='include/linux/dcache.h' line='283' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_move'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='27675065'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='inc_nlink' mangled-name='inc_nlink' filepath='include/linux/fs.h' line='2257' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inc_nlink'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sync_dirty_buffer' mangled-name='sync_dirty_buffer' filepath='include/linux/buffer_head.h' line='202' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sync_dirty_buffer'>
+        <parameter type-id='c485c22c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kmem_cache_alloc' mangled-name='kmem_cache_alloc' filepath='include/linux/slab.h' line='394' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_alloc'>
+        <parameter type-id='f3b4aca8'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='hex2bin' mangled-name='hex2bin' filepath='include/linux/kernel.h' line='631' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hex2bin'>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='utf8s_to_utf16s' mangled-name='utf8s_to_utf16s' filepath='include/linux/nls.h' line='57' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='utf8s_to_utf16s'>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='11d12470'/>
+        <parameter type-id='e9e550dd'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kmem_cache_free' mangled-name='kmem_cache_free' filepath='include/linux/slab.h' line='395' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_free'>
+        <parameter type-id='f3b4aca8'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='e1740daa'>
+        <parameter type-id='c485c22c'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/file.c' language='LANG_C89'>
+      <pointer-type-def type-id='8b73b897' size-in-bits='64' id='d092647b'/>
+      <function-decl name='__close_fd' mangled-name='__close_fd' filepath='fs/file.c' line='621' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__close_fd'>
+        <parameter type-id='16c53417' name='files' filepath='fs/file.c' line='621' column='1'/>
+        <parameter type-id='f0981eeb' name='fd' filepath='fs/file.c' line='621' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iterate_fd' mangled-name='iterate_fd' filepath='fs/file.c' line='996' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iterate_fd'>
+        <parameter type-id='16c53417' name='files' filepath='fs/file.c' line='996' column='1'/>
+        <parameter type-id='f0981eeb' name='n' filepath='fs/file.c' line='996' column='1'/>
+        <parameter type-id='d092647b' name='f' filepath='fs/file.c' line='997' column='1'/>
+        <parameter type-id='eaa32e2f' name='p' filepath='fs/file.c' line='998' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='bccdf331' size-in-bits='64' id='16c53417'/>
+      <function-type size-in-bits='64' id='8b73b897'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <class-decl name='files_struct' size-in-bits='5632' is-struct='yes' visibility='default' filepath='include/linux/fdtable.h' line='48' column='1' id='bccdf331'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/fdtable.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='resize_in_progress' type-id='b50a4934' visibility='default' filepath='include/linux/fdtable.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='resize_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/fdtable.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fdt' type-id='02b857a9' visibility='default' filepath='include/linux/fdtable.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fdtab' type-id='ff35cfe1' visibility='default' filepath='include/linux/fdtable.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='file_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fdtable.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='next_fd' type-id='f0981eeb' visibility='default' filepath='include/linux/fdtable.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='close_on_exec_init' type-id='f066dd3c' visibility='default' filepath='include/linux/fdtable.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='open_fds_init' type-id='f066dd3c' visibility='default' filepath='include/linux/fdtable.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='full_fds_bits_init' type-id='f066dd3c' visibility='default' filepath='include/linux/fdtable.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='fd_array' type-id='d2c516bd' visibility='default' filepath='include/linux/fdtable.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ff35cfe1' size-in-bits='64' id='02b857a9'/>
+      <array-type-def dimensions='1' type-id='77e79a4b' size-in-bits='4096' id='d2c516bd'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <class-decl name='fdtable' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fdtable.h' line='26' column='1' id='ff35cfe1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_fds' type-id='f0981eeb' visibility='default' filepath='include/linux/fdtable.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fd' type-id='229806b3' visibility='default' filepath='include/linux/fdtable.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='close_on_exec' type-id='1d2c2b85' visibility='default' filepath='include/linux/fdtable.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='open_fds' type-id='1d2c2b85' visibility='default' filepath='include/linux/fdtable.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='full_fds_bits' type-id='1d2c2b85' visibility='default' filepath='include/linux/fdtable.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/fdtable.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='77e79a4b' size-in-bits='64' id='229806b3'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/fs-writeback.c' language='LANG_C89'>
+      <function-decl name='__mark_inode_dirty' mangled-name='__mark_inode_dirty' filepath='fs/fs-writeback.c' line='2247' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__mark_inode_dirty'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/fs-writeback.c' line='2247' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='fs/fs-writeback.c' line='2247' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/fs_context.c' language='LANG_C89'>
+      <function-decl name='kvasprintf' mangled-name='kvasprintf' filepath='include/linux/kernel.h' line='489' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kvasprintf'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='5f919c1f'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/fuse/inode.c' language='LANG_C89'>
+      <function-decl name='fuse_free_conn' mangled-name='fuse_free_conn' filepath='fs/fuse/inode.c' line='1046' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_free_conn'>
+        <parameter type-id='03e54357' name='fc' filepath='fs/fuse/inode.c' line='1046' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='3c92f97f' size-in-bits='64' id='03e54357'/>
+      <class-decl name='fuse_conn' size-in-bits='4224' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='518' column='1' id='3c92f97f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='fs/fuse/fuse_i.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='64615833' visibility='default' filepath='fs/fuse/fuse_i.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev_count' type-id='49178f86' visibility='default' filepath='fs/fuse/fuse_i.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='fs/fuse/fuse_i.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='user_id' type-id='d80b72e6' visibility='default' filepath='fs/fuse/fuse_i.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='group_id' type-id='094d8048' visibility='default' filepath='fs/fuse/fuse_i.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pid_ns' type-id='b816e1d0' visibility='default' filepath='fs/fuse/fuse_i.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='user_ns' type-id='c0ced321' visibility='default' filepath='fs/fuse/fuse_i.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='max_read' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='max_write' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='max_pages' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='iq' type-id='118eb0ab' visibility='default' filepath='fs/fuse/fuse_i.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='khctr' type-id='28ee064c' visibility='default' filepath='fs/fuse/fuse_i.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='polled_files' type-id='dec44472' visibility='default' filepath='fs/fuse/fuse_i.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='max_background' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='congestion_threshold' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='num_background' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='active_background' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='bg_queue' type-id='72f469ec' visibility='default' filepath='fs/fuse/fuse_i.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='bg_lock' type-id='fb4018a0' visibility='default' filepath='fs/fuse/fuse_i.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='initialized' type-id='95e97e5e' visibility='default' filepath='fs/fuse/fuse_i.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='blocked' type-id='95e97e5e' visibility='default' filepath='fs/fuse/fuse_i.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='blocked_waitq' type-id='b5ab048f' visibility='default' filepath='fs/fuse/fuse_i.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='connected' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='aborted' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='conn_error' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='conn_init' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='async_read' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='abort_err' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='atomic_o_trunc' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='export_support' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='writeback_cache' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='parallel_dirops' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='handle_killpriv' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='cache_symlinks' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='no_open' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='no_opendir' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='no_fsync' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='no_fsyncdir' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='no_flush' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='no_setxattr' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='no_getxattr' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='no_listxattr' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='no_removexattr' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='no_lock' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='no_access' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='no_create' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='no_interrupt' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='no_bmap' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='no_poll' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='678' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='big_writes' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='dont_mask' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='no_flock' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='no_fallocate' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='no_rename2' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='auto_inval_data' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='explicit_inval_data' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='do_readdirplus' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='readdirplus_auto' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='async_dio' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='708' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='no_lseek' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='711' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='posix_acl' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='default_permissions' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='allow_other' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='720' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='no_copy_file_range' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='destroy' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='delete_stale' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='no_control' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='no_force_umount' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='no_mount_options' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='passthrough' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2464'>
+          <var-decl name='num_waiting' type-id='49178f86' visibility='default' filepath='fs/fuse/fuse_i.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='minor' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='fs/fuse/fuse_i.h' line='750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='dev' type-id='8504f260' visibility='default' filepath='fs/fuse/fuse_i.h' line='753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='ctl_dentry' type-id='a5475460' visibility='default' filepath='fs/fuse/fuse_i.h' line='756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='ctl_ndents' type-id='95e97e5e' visibility='default' filepath='fs/fuse/fuse_i.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='scramble_key' type-id='1c6c0c39' visibility='default' filepath='fs/fuse/fuse_i.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='attr_version' type-id='28ee064c' visibility='default' filepath='fs/fuse/fuse_i.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='release' type-id='a270218e' visibility='default' filepath='fs/fuse/fuse_i.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='sb' type-id='42c8f564' visibility='default' filepath='fs/fuse/fuse_i.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='killsb' type-id='f19fdb93' visibility='default' filepath='fs/fuse/fuse_i.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='devices' type-id='72f469ec' visibility='default' filepath='fs/fuse/fuse_i.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='passthrough_req' type-id='37ce495e' visibility='default' filepath='fs/fuse/fuse_i.h' line='780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='passthrough_req_lock' type-id='fb4018a0' visibility='default' filepath='fs/fuse/fuse_i.h' line='783' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='27675065' size-in-bits='320' id='a5475460'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <class-decl name='fuse_iqueue' size-in-bits='1088' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='420' column='1' id='118eb0ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='connected' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='fs/fuse/fuse_i.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='waitq' type-id='b5ab048f' visibility='default' filepath='fs/fuse/fuse_i.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reqctr' type-id='91ce1af9' visibility='default' filepath='fs/fuse/fuse_i.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pending' type-id='72f469ec' visibility='default' filepath='fs/fuse/fuse_i.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='interrupts' type-id='72f469ec' visibility='default' filepath='fs/fuse/fuse_i.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='forget_list_head' type-id='8942565d' visibility='default' filepath='fs/fuse/fuse_i.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='forget_list_tail' type-id='69f5e8dd' visibility='default' filepath='fs/fuse/fuse_i.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='forget_batch' type-id='95e97e5e' visibility='default' filepath='fs/fuse/fuse_i.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fasync' type-id='5bb9c75d' visibility='default' filepath='fs/fuse/fuse_i.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ops' type-id='c2954caf' visibility='default' filepath='fs/fuse/fuse_i.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='fs/fuse/fuse_i.h' line='453' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7d909a8c' size-in-bits='64' id='a270218e'/>
+      <pointer-type-def type-id='6e67e9df' size-in-bits='64' id='c2954caf'/>
+      <pointer-type-def type-id='8942565d' size-in-bits='64' id='69f5e8dd'/>
+      <class-decl name='fuse_forget_link' size-in-bits='192' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='61' column='1' id='8942565d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='forget_one' type-id='21b88183' visibility='default' filepath='fs/fuse/fuse_i.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='69f5e8dd' visibility='default' filepath='fs/fuse/fuse_i.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='80719398' const='yes' id='6e67e9df'/>
+      <class-decl name='fuse_forget_one' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/fuse.h' line='509' column='1' id='21b88183'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nodeid' type-id='9c313c2d' visibility='default' filepath='include/uapi/linux/fuse.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nlookup' type-id='9c313c2d' visibility='default' filepath='include/uapi/linux/fuse.h' line='511' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fuse_iqueue_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='392' column='1' id='80719398'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wake_forget_and_unlock' type-id='cf198722' visibility='default' filepath='fs/fuse/fuse_i.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wake_interrupt_and_unlock' type-id='cf198722' visibility='default' filepath='fs/fuse/fuse_i.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wake_pending_and_unlock' type-id='cf198722' visibility='default' filepath='fs/fuse/fuse_i.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='release' type-id='cf198722' visibility='default' filepath='fs/fuse/fuse_i.h' line='414' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='0996f100' size-in-bits='64' id='cf198722'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/fuse/virtio_fs.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='b7a93b96' size-in-bits='infinite' id='5f759053'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='27675065' size-in-bits='320' id='a5475460'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='570f5567' size-in-bits='256' id='73e86bf5'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='aa6f88b1' size-in-bits='384' id='ae9f3896'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='128' id='1c6c0c39'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='128' id='49580a63'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f1f6cfe9' size-in-bits='infinite' id='59d36c99'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='virtio_driver' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/virtio.h' line='165' column='1' id='f8d99df1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/virtio.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='id_table' type-id='3049673c' visibility='default' filepath='include/linux/virtio.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='feature_table' type-id='5b2fd8e8' visibility='default' filepath='include/linux/virtio.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='feature_table_size' type-id='f0981eeb' visibility='default' filepath='include/linux/virtio.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='feature_table_legacy' type-id='5b2fd8e8' visibility='default' filepath='include/linux/virtio.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='feature_table_size_legacy' type-id='f0981eeb' visibility='default' filepath='include/linux/virtio.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='validate' type-id='b89d0409' visibility='default' filepath='include/linux/virtio.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='probe' type-id='b89d0409' visibility='default' filepath='include/linux/virtio.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='scan' type-id='33d93b18' visibility='default' filepath='include/linux/virtio.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='remove' type-id='33d93b18' visibility='default' filepath='include/linux/virtio.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='config_changed' type-id='33d93b18' visibility='default' filepath='include/linux/virtio.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='freeze' type-id='b89d0409' visibility='default' filepath='include/linux/virtio.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='restore' type-id='b89d0409' visibility='default' filepath='include/linux/virtio.h' line='179' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='virtio_device_id' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='427' column='1' id='7462f12f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='device' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vendor' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='429' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='virtio_device' size-in-bits='7936' is-struct='yes' visibility='default' filepath='include/linux/virtio.h' line='108' column='1' id='a23921c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/linux/virtio.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='failed' type-id='b50a4934' visibility='default' filepath='include/linux/virtio.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='config_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/virtio.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='config_change_pending' type-id='b50a4934' visibility='default' filepath='include/linux/virtio.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='config_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/virtio.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/virtio.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='id' type-id='7462f12f' visibility='default' filepath='include/linux/virtio.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='config' type-id='afc22511' visibility='default' filepath='include/linux/virtio.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='vringh_config' type-id='f9c3a0be' visibility='default' filepath='include/linux/virtio.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='vqs' type-id='72f469ec' visibility='default' filepath='include/linux/virtio.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='features' type-id='91ce1af9' visibility='default' filepath='include/linux/virtio.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/virtio.h' line='120' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='virtio_config_ops' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/virtio_config.h' line='70' column='1' id='d70a473a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get' type-id='b22e78ee' visibility='default' filepath='include/linux/virtio_config.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set' type-id='b22e78ee' visibility='default' filepath='include/linux/virtio_config.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='generation' type-id='fe5a9a49' visibility='default' filepath='include/linux/virtio_config.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_status' type-id='bbefcc2a' visibility='default' filepath='include/linux/virtio_config.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_status' type-id='3dc18b9c' visibility='default' filepath='include/linux/virtio_config.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reset' type-id='33d93b18' visibility='default' filepath='include/linux/virtio_config.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='find_vqs' type-id='17035a6b' visibility='default' filepath='include/linux/virtio_config.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='del_vqs' type-id='33d93b18' visibility='default' filepath='include/linux/virtio_config.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_features' type-id='f428336a' visibility='default' filepath='include/linux/virtio_config.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='finalize_features' type-id='b89d0409' visibility='default' filepath='include/linux/virtio_config.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bus_name' type-id='eb8aa2f1' visibility='default' filepath='include/linux/virtio_config.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set_vq_affinity' type-id='53a5ad54' visibility='default' filepath='include/linux/virtio_config.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_vq_affinity' type-id='7642cce6' visibility='default' filepath='include/linux/virtio_config.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='virtqueue' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/virtio.h' line='28' column='1' id='d7c60ba9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/virtio.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='callback' type-id='c881e0a0' visibility='default' filepath='include/linux/virtio.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/virtio.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vdev' type-id='5dbfcbb1' visibility='default' filepath='include/linux/virtio.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/linux/virtio.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='num_free' type-id='f0981eeb' visibility='default' filepath='include/linux/virtio.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/virtio.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='vq_callback_t' type-id='efc29a3e' filepath='include/linux/virtio_config.h' line='69' column='1' id='b1376802'/>
+      <class-decl name='irq_affinity' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/interrupt.h' line='279' column='1' id='bf33c00a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pre_vectors' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='post_vectors' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_sets' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='set_size' type-id='49580a63' visibility='default' filepath='include/linux/interrupt.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='calc_sets' type-id='887112a7' visibility='default' filepath='include/linux/interrupt.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/interrupt.h' line='285' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vringh_config_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/vringh.h' line='59' column='1' id='b16ef9f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='find_vrhs' type-id='7035601e' visibility='default' filepath='include/linux/vringh.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='del_vrhs' type-id='33d93b18' visibility='default' filepath='include/linux/vringh.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vringh' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/vringh.h' line='20' column='1' id='499b654d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='little_endian' type-id='b50a4934' visibility='default' filepath='include/linux/vringh.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='event_indices' type-id='b50a4934' visibility='default' filepath='include/linux/vringh.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='weak_barriers' type-id='b50a4934' visibility='default' filepath='include/linux/vringh.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='last_avail_idx' type-id='1dc6a898' visibility='default' filepath='include/linux/vringh.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='last_used_idx' type-id='1dc6a898' visibility='default' filepath='include/linux/vringh.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='completed' type-id='19c2251e' visibility='default' filepath='include/linux/vringh.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vring' type-id='83eac9f7' visibility='default' filepath='include/linux/vringh.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='notify' type-id='f6482e38' visibility='default' filepath='include/linux/vringh.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vring' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='121' column='1' id='83eac9f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='desc' type-id='a5e666e1' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='avail' type-id='79c5fcaf' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='used' type-id='00f2075d' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vring_desc' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='90' column='1' id='f0783229'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='b7a6fcff' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='43ae9528' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='b7a93b96' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='next' type-id='b7a93b96' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__virtio64' type-id='d3130597' filepath='include/uapi/linux/virtio_types.h' line='44' column='1' id='b7a6fcff'/>
+      <typedef-decl name='__virtio32' type-id='3f1a6b60' filepath='include/uapi/linux/virtio_types.h' line='43' column='1' id='43ae9528'/>
+      <typedef-decl name='__virtio16' type-id='d315442e' filepath='include/uapi/linux/virtio_types.h' line='42' column='1' id='b7a93b96'/>
+      <class-decl name='vring_avail' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='101' column='1' id='b3f6da27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='b7a93b96' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='idx' type-id='b7a93b96' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ring' type-id='5f759053' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vring_used' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='115' column='1' id='83e62d3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='b7a93b96' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='idx' type-id='b7a93b96' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ring' type-id='59d36c99' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vring_used_elem' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='108' column='1' id='f1f6cfe9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='43ae9528' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='43ae9528' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='112' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='vrh_callback_t' type-id='7af6d412' filepath='include/linux/vringh.h' line='58' column='1' id='63a70519'/>
+      <class-decl name='fuse_conn' size-in-bits='4224' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='518' column='1' id='3c92f97f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='fs/fuse/fuse_i.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='64615833' visibility='default' filepath='fs/fuse/fuse_i.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev_count' type-id='49178f86' visibility='default' filepath='fs/fuse/fuse_i.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='fs/fuse/fuse_i.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='user_id' type-id='d80b72e6' visibility='default' filepath='fs/fuse/fuse_i.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='group_id' type-id='094d8048' visibility='default' filepath='fs/fuse/fuse_i.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pid_ns' type-id='b816e1d0' visibility='default' filepath='fs/fuse/fuse_i.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='user_ns' type-id='c0ced321' visibility='default' filepath='fs/fuse/fuse_i.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='max_read' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='max_write' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='max_pages' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='iq' type-id='118eb0ab' visibility='default' filepath='fs/fuse/fuse_i.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='khctr' type-id='28ee064c' visibility='default' filepath='fs/fuse/fuse_i.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='polled_files' type-id='dec44472' visibility='default' filepath='fs/fuse/fuse_i.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='max_background' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='congestion_threshold' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='num_background' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='active_background' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='bg_queue' type-id='72f469ec' visibility='default' filepath='fs/fuse/fuse_i.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='bg_lock' type-id='fb4018a0' visibility='default' filepath='fs/fuse/fuse_i.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='initialized' type-id='95e97e5e' visibility='default' filepath='fs/fuse/fuse_i.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='blocked' type-id='95e97e5e' visibility='default' filepath='fs/fuse/fuse_i.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='blocked_waitq' type-id='b5ab048f' visibility='default' filepath='fs/fuse/fuse_i.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='connected' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='aborted' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='conn_error' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='conn_init' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='async_read' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='abort_err' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='atomic_o_trunc' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='export_support' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='writeback_cache' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='parallel_dirops' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='handle_killpriv' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='cache_symlinks' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='no_open' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='no_opendir' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='no_fsync' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='no_fsyncdir' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='no_flush' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='no_setxattr' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='no_getxattr' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='no_listxattr' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='no_removexattr' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='no_lock' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='no_access' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='no_create' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='no_interrupt' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='no_bmap' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='no_poll' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='678' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='big_writes' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='dont_mask' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='no_flock' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='no_fallocate' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='no_rename2' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='auto_inval_data' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='explicit_inval_data' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='do_readdirplus' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='readdirplus_auto' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='async_dio' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='708' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='no_lseek' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='711' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='posix_acl' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='default_permissions' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='allow_other' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='720' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='no_copy_file_range' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='destroy' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='delete_stale' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='no_control' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='no_force_umount' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='no_mount_options' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='passthrough' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2464'>
+          <var-decl name='num_waiting' type-id='49178f86' visibility='default' filepath='fs/fuse/fuse_i.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='minor' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='fs/fuse/fuse_i.h' line='750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='dev' type-id='8504f260' visibility='default' filepath='fs/fuse/fuse_i.h' line='753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='ctl_dentry' type-id='a5475460' visibility='default' filepath='fs/fuse/fuse_i.h' line='756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='ctl_ndents' type-id='95e97e5e' visibility='default' filepath='fs/fuse/fuse_i.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='scramble_key' type-id='1c6c0c39' visibility='default' filepath='fs/fuse/fuse_i.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='attr_version' type-id='28ee064c' visibility='default' filepath='fs/fuse/fuse_i.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='release' type-id='a270218e' visibility='default' filepath='fs/fuse/fuse_i.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='sb' type-id='42c8f564' visibility='default' filepath='fs/fuse/fuse_i.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='killsb' type-id='f19fdb93' visibility='default' filepath='fs/fuse/fuse_i.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='devices' type-id='72f469ec' visibility='default' filepath='fs/fuse/fuse_i.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='passthrough_req' type-id='37ce495e' visibility='default' filepath='fs/fuse/fuse_i.h' line='780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='passthrough_req_lock' type-id='fb4018a0' visibility='default' filepath='fs/fuse/fuse_i.h' line='783' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='737' column='1' id='d1afa4fe'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29711' visibility='default' filepath='include/linux/fs.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb939' visibility='default' filepath='include/linux/fs.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_dir_seq' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='742' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='fuse_iqueue' size-in-bits='1088' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='420' column='1' id='118eb0ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='connected' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='fs/fuse/fuse_i.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='waitq' type-id='b5ab048f' visibility='default' filepath='fs/fuse/fuse_i.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reqctr' type-id='91ce1af9' visibility='default' filepath='fs/fuse/fuse_i.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pending' type-id='72f469ec' visibility='default' filepath='fs/fuse/fuse_i.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='interrupts' type-id='72f469ec' visibility='default' filepath='fs/fuse/fuse_i.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='forget_list_head' type-id='8942565d' visibility='default' filepath='fs/fuse/fuse_i.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='forget_list_tail' type-id='69f5e8dd' visibility='default' filepath='fs/fuse/fuse_i.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='forget_batch' type-id='95e97e5e' visibility='default' filepath='fs/fuse/fuse_i.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fasync' type-id='5bb9c75d' visibility='default' filepath='fs/fuse/fuse_i.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ops' type-id='c2954caf' visibility='default' filepath='fs/fuse/fuse_i.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='fs/fuse/fuse_i.h' line='453' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fuse_forget_link' size-in-bits='192' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='61' column='1' id='8942565d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='forget_one' type-id='21b88183' visibility='default' filepath='fs/fuse/fuse_i.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='69f5e8dd' visibility='default' filepath='fs/fuse/fuse_i.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fuse_forget_one' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/fuse.h' line='509' column='1' id='21b88183'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nodeid' type-id='9c313c2d' visibility='default' filepath='include/uapi/linux/fuse.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nlookup' type-id='9c313c2d' visibility='default' filepath='include/uapi/linux/fuse.h' line='511' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fuse_iqueue_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='392' column='1' id='80719398'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wake_forget_and_unlock' type-id='cf198722' visibility='default' filepath='fs/fuse/fuse_i.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wake_interrupt_and_unlock' type-id='cf198722' visibility='default' filepath='fs/fuse/fuse_i.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wake_pending_and_unlock' type-id='cf198722' visibility='default' filepath='fs/fuse/fuse_i.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='release' type-id='cf198722' visibility='default' filepath='fs/fuse/fuse_i.h' line='414' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fuse_req' size-in-bits='1152' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='348' column='1' id='46948733'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='fs/fuse/fuse_i.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='intr_entry' type-id='72f469ec' visibility='default' filepath='fs/fuse/fuse_i.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='args' type-id='7515b73a' visibility='default' filepath='fs/fuse/fuse_i.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='count' type-id='64615833' visibility='default' filepath='fs/fuse/fuse_i.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='fs/fuse/fuse_i.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='in' type-id='92194fcd' visibility='default' filepath='fs/fuse/fuse_i.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='out' type-id='084af460' visibility='default' filepath='fs/fuse/fuse_i.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='waitq' type-id='b5ab048f' visibility='default' filepath='fs/fuse/fuse_i.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='argbuf' type-id='eaa32e2f' visibility='default' filepath='fs/fuse/fuse_i.h' line='379' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fuse_args' size-in-bits='960' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='255' column='1' id='2122ee7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nodeid' type-id='9c313c2d' visibility='default' filepath='fs/fuse/fuse_i.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='opcode' type-id='8f92235e' visibility='default' filepath='fs/fuse/fuse_i.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='in_numargs' type-id='8efea9e5' visibility='default' filepath='fs/fuse/fuse_i.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='out_numargs' type-id='8efea9e5' visibility='default' filepath='fs/fuse/fuse_i.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='force' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='noreply' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='nocreds' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='in_pages' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='out_pages' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='out_argvar' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='page_zeroing' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='page_replace' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='may_block' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='in_args' type-id='ae9f3896' visibility='default' filepath='fs/fuse/fuse_i.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='out_args' type-id='73e86bf5' visibility='default' filepath='fs/fuse/fuse_i.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='end' type-id='7dacec18' visibility='default' filepath='fs/fuse/fuse_i.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='canonical_path' type-id='bcfe6314' visibility='default' filepath='fs/fuse/fuse_i.h' line='274' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fuse_in_arg' size-in-bits='128' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='238' column='1' id='aa6f88b1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='value' type-id='eaa32e2f' visibility='default' filepath='fs/fuse/fuse_i.h' line='240' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fuse_arg' size-in-bits='128' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='244' column='1' id='570f5567'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='value' type-id='eaa32e2f' visibility='default' filepath='fs/fuse/fuse_i.h' line='246' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='366' column='1' id='92194fcd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='h' type-id='0cffcac2' visibility='default' filepath='fs/fuse/fuse_i.h' line='367' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fuse_in_header' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/fuse.h' line='788' column='1' id='0cffcac2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='8f92235e' visibility='default' filepath='include/uapi/linux/fuse.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='opcode' type-id='8f92235e' visibility='default' filepath='include/uapi/linux/fuse.h' line='790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unique' type-id='9c313c2d' visibility='default' filepath='include/uapi/linux/fuse.h' line='791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nodeid' type-id='9c313c2d' visibility='default' filepath='include/uapi/linux/fuse.h' line='792' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='uid' type-id='8f92235e' visibility='default' filepath='include/uapi/linux/fuse.h' line='793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='gid' type-id='8f92235e' visibility='default' filepath='include/uapi/linux/fuse.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pid' type-id='8f92235e' visibility='default' filepath='include/uapi/linux/fuse.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='padding' type-id='8f92235e' visibility='default' filepath='include/uapi/linux/fuse.h' line='796' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='371' column='1' id='084af460'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='h' type-id='b97a4255' visibility='default' filepath='fs/fuse/fuse_i.h' line='372' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fuse_out_header' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/fuse.h' line='807' column='1' id='b97a4255'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='8f92235e' visibility='default' filepath='include/uapi/linux/fuse.h' line='808' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='error' type-id='3ff5601b' visibility='default' filepath='include/uapi/linux/fuse.h' line='809' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unique' type-id='9c313c2d' visibility='default' filepath='include/uapi/linux/fuse.h' line='810' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fuse_dev' size-in-bits='448' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='476' column='1' id='f07291fc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fc' type-id='03e54357' visibility='default' filepath='fs/fuse/fuse_i.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pq' type-id='03df99e6' visibility='default' filepath='fs/fuse/fuse_i.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='fs/fuse/fuse_i.h' line='484' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fuse_pqueue' size-in-bits='256' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='459' column='1' id='03df99e6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='connected' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='fs/fuse/fuse_i.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='processing' type-id='e84b031a' visibility='default' filepath='fs/fuse/fuse_i.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='io' type-id='72f469ec' visibility='default' filepath='fs/fuse/fuse_i.h' line='470' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fuse_fs_context' size-in-bits='384' is-struct='yes' visibility='default' filepath='fs/fuse/fuse_i.h' line='487' column='1' id='002fb2fa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fd' type-id='95e97e5e' visibility='default' filepath='fs/fuse/fuse_i.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rootmode' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='user_id' type-id='d80b72e6' visibility='default' filepath='fs/fuse/fuse_i.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='group_id' type-id='094d8048' visibility='default' filepath='fs/fuse/fuse_i.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='is_bdev' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='fd_present' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='rootmode_present' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='user_id_present' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='group_id_present' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='default_permissions' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='allow_other' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destroy' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='no_control' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='no_force_umount' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='no_mount_options' type-id='b50a4934' visibility='default' filepath='fs/fuse/fuse_i.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_read' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='blksize' type-id='f0981eeb' visibility='default' filepath='fs/fuse/fuse_i.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='subtype' type-id='80f4b756' visibility='default' filepath='fs/fuse/fuse_i.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fudptr' type-id='63e171df' visibility='default' filepath='fs/fuse/fuse_i.h' line='508' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='b50a4934' const='yes' id='4ab96a04'/>
+      <pointer-type-def type-id='4ab96a04' size-in-bits='64' id='cfe2266a'/>
+      <pointer-type-def type-id='f2207a6d' size-in-bits='64' id='eb8aa2f1'/>
+      <pointer-type-def type-id='ba92be9c' size-in-bits='64' id='7642cce6'/>
+      <qualified-type-def type-id='80719398' const='yes' id='6e67e9df'/>
+      <pointer-type-def type-id='6e67e9df' size-in-bits='64' id='c2954caf'/>
+      <pointer-type-def type-id='20f5f452' size-in-bits='64' id='5b2fd8e8'/>
+      <qualified-type-def type-id='d70a473a' const='yes' id='17c0f561'/>
+      <pointer-type-def type-id='17c0f561' size-in-bits='64' id='afc22511'/>
+      <qualified-type-def type-id='7462f12f' const='yes' id='106d717e'/>
+      <pointer-type-def type-id='106d717e' size-in-bits='64' id='3049673c'/>
+      <qualified-type-def type-id='b16ef9f3' const='yes' id='79eccb20'/>
+      <pointer-type-def type-id='79eccb20' size-in-bits='64' id='f9c3a0be'/>
+      <pointer-type-def type-id='5ad6e0ef' size-in-bits='64' id='1a7ee447'/>
+      <pointer-type-def type-id='570f5567' size-in-bits='64' id='fb28cf3f'/>
+      <pointer-type-def type-id='2122ee7c' size-in-bits='64' id='7515b73a'/>
+      <pointer-type-def type-id='3c92f97f' size-in-bits='64' id='03e54357'/>
+      <pointer-type-def type-id='f07291fc' size-in-bits='64' id='f925394a'/>
+      <pointer-type-def type-id='8942565d' size-in-bits='64' id='69f5e8dd'/>
+      <pointer-type-def type-id='002fb2fa' size-in-bits='64' id='d9e5bb28'/>
+      <pointer-type-def type-id='118eb0ab' size-in-bits='64' id='f4792d9b'/>
+      <pointer-type-def type-id='46948733' size-in-bits='64' id='73c6d043'/>
+      <pointer-type-def type-id='e2da4ade' size-in-bits='64' id='d5f76b20'/>
+      <pointer-type-def type-id='f214de7d' size-in-bits='64' id='b89d0409'/>
+      <pointer-type-def type-id='e636858f' size-in-bits='64' id='17035a6b'/>
+      <pointer-type-def type-id='b70014f4' size-in-bits='64' id='7035601e'/>
+      <pointer-type-def type-id='628f102a' size-in-bits='64' id='53a5ad54'/>
+      <pointer-type-def type-id='bf33c00a' size-in-bits='64' id='8a876638'/>
+      <pointer-type-def type-id='47479831' size-in-bits='64' id='a57283f9'/>
+      <pointer-type-def type-id='637cfeaf' size-in-bits='64' id='74c91557'/>
+      <pointer-type-def type-id='bf3ef905' size-in-bits='64' id='3f2244fd'/>
+      <pointer-type-def type-id='916c4095' size-in-bits='64' id='439be051'/>
+      <pointer-type-def type-id='1e91d6cd' size-in-bits='64' id='fe5a9a49'/>
+      <pointer-type-def type-id='70a1a668' size-in-bits='64' id='f428336a'/>
+      <pointer-type-def type-id='983b8510' size-in-bits='64' id='bbefcc2a'/>
+      <pointer-type-def type-id='a23921c9' size-in-bits='64' id='5dbfcbb1'/>
+      <pointer-type-def type-id='f8d99df1' size-in-bits='64' id='f350dc99'/>
+      <pointer-type-def type-id='d7c60ba9' size-in-bits='64' id='91d0de51'/>
+      <pointer-type-def type-id='91d0de51' size-in-bits='64' id='06ce3ba1'/>
+      <pointer-type-def type-id='7d909a8c' size-in-bits='64' id='a270218e'/>
+      <pointer-type-def type-id='419fe15e' size-in-bits='64' id='7dacec18'/>
+      <pointer-type-def type-id='0996f100' size-in-bits='64' id='cf198722'/>
+      <pointer-type-def type-id='ec180093' size-in-bits='64' id='887112a7'/>
+      <pointer-type-def type-id='bbf47576' size-in-bits='64' id='33d93b18'/>
+      <pointer-type-def type-id='83c3d80a' size-in-bits='64' id='3dc18b9c'/>
+      <pointer-type-def type-id='6c0f5f3c' size-in-bits='64' id='b22e78ee'/>
+      <pointer-type-def type-id='efc29a3e' size-in-bits='64' id='c881e0a0'/>
+      <pointer-type-def type-id='af1578f6' size-in-bits='64' id='f6482e38'/>
+      <pointer-type-def type-id='b1376802' size-in-bits='64' id='14cefd25'/>
+      <pointer-type-def type-id='14cefd25' size-in-bits='64' id='d0d85e9d'/>
+      <pointer-type-def type-id='63a70519' size-in-bits='64' id='250d5c0a'/>
+      <pointer-type-def type-id='250d5c0a' size-in-bits='64' id='74080660'/>
+      <pointer-type-def type-id='b3f6da27' size-in-bits='64' id='79c5fcaf'/>
+      <pointer-type-def type-id='f0783229' size-in-bits='64' id='a5e666e1'/>
+      <pointer-type-def type-id='83e62d3d' size-in-bits='64' id='00f2075d'/>
+      <pointer-type-def type-id='499b654d' size-in-bits='64' id='05a6a00d'/>
+      <pointer-type-def type-id='05a6a00d' size-in-bits='64' id='0c4e1d65'/>
+      <function-decl name='unregister_virtio_driver' mangled-name='unregister_virtio_driver' filepath='include/linux/virtio.h' line='189' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_virtio_driver'>
+        <parameter type-id='f350dc99'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_kmalloc' mangled-name='devm_kmalloc' filepath='include/linux/device.h' line='943' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_kmalloc'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='init_timer_key' mangled-name='init_timer_key' filepath='include/linux/timer.h' line='94' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='init_timer_key'>
+        <parameter type-id='9248e67f'/>
+        <parameter type-id='9582ad9a'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='a57283f9'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='refcount_dec_and_test_checked' mangled-name='refcount_dec_and_test_checked' filepath='include/linux/refcount.h' line='54' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='refcount_dec_and_test_checked'>
+        <parameter type-id='74c91557'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='flush_work' mangled-name='flush_work' filepath='include/linux/workqueue.h' line='467' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='flush_work'>
+        <parameter type-id='83c1bde6'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='flush_delayed_work' mangled-name='flush_delayed_work' filepath='include/linux/workqueue.h' line='470' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='flush_delayed_work'>
+        <parameter type-id='1a7ee447'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='usleep_range' mangled-name='usleep_range' filepath='include/linux/delay.h' line='61' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usleep_range'>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtqueue_disable_cb' mangled-name='virtqueue_disable_cb' filepath='include/linux/virtio.h' line='72' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_disable_cb'>
+        <parameter type-id='91d0de51'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtqueue_get_buf' mangled-name='virtqueue_get_buf' filepath='include/linux/virtio.h' line='67' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_get_buf'>
+        <parameter type-id='91d0de51'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='virtqueue_enable_cb' mangled-name='virtqueue_enable_cb' filepath='include/linux/virtio.h' line='74' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_enable_cb'>
+        <parameter type-id='91d0de51'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='virtqueue_is_broken' mangled-name='virtqueue_is_broken' filepath='include/linux/virtio.h' line='86' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_is_broken'>
+        <parameter type-id='91d0de51'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='sg_init_one' mangled-name='sg_init_one' filepath='include/linux/scatterlist.h' line='273' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_init_one'>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtqueue_add_sgs' mangled-name='virtqueue_add_sgs' filepath='include/linux/virtio.h' line='54' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_add_sgs'>
+        <parameter type-id='91d0de51'/>
+        <parameter type-id='3f2244fd'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtqueue_kick_prepare' mangled-name='virtqueue_kick_prepare' filepath='include/linux/virtio.h' line='63' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_kick_prepare'>
+        <parameter type-id='91d0de51'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='virtqueue_notify' mangled-name='virtqueue_notify' filepath='include/linux/virtio.h' line='65' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_notify'>
+        <parameter type-id='91d0de51'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='queue_delayed_work_on' mangled-name='queue_delayed_work_on' filepath='include/linux/workqueue.h' line='454' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='queue_delayed_work_on'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='242e3d19'/>
+        <parameter type-id='1a7ee447'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='fuse_request_end' mangled-name='fuse_request_end' filepath='fs/fuse/fuse_i.h' line='962' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_request_end'>
+        <parameter type-id='03e54357'/>
+        <parameter type-id='73c6d043'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='fuse_len_args' mangled-name='fuse_len_args' filepath='fs/fuse/fuse_i.h' line='1124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_len_args'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='fb28cf3f'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='sg_init_table' mangled-name='sg_init_table' filepath='include/linux/scatterlist.h' line='272' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_init_table'>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='flush_dcache_page' mangled-name='flush_dcache_page' filepath='arch/arm64/include/asm/cacheflush.h' line='146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='flush_dcache_page'>
+        <parameter type-id='02f11ed4'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='preempt_schedule' mangled-name='preempt_schedule' filepath='arch/arm64/include/asm/preempt.h' line='83' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='preempt_schedule'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='fuse_kill_sb_anon' mangled-name='fuse_kill_sb_anon' filepath='fs/fuse/fuse_i.h' line='1014' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_kill_sb_anon'>
+        <parameter type-id='42c8f564'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='fuse_dev_free' mangled-name='fuse_dev_free' filepath='fs/fuse/fuse_i.h' line='999' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_dev_free'>
+        <parameter type-id='f925394a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='refcount_inc_checked' mangled-name='refcount_inc_checked' filepath='include/linux/refcount.h' line='50' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='refcount_inc_checked'>
+        <parameter type-id='74c91557'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='fuse_conn_init' mangled-name='fuse_conn_init' filepath='fs/fuse/fuse_i.h' line='988' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_conn_init'>
+        <parameter type-id='03e54357'/>
+        <parameter type-id='c0ced321'/>
+        <parameter type-id='c2954caf'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sget_fc' mangled-name='sget_fc' filepath='include/linux/fs.h' line='2365' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sget_fc'>
+        <parameter type-id='5760dcb1'/>
+        <parameter type-id='30341fa1'/>
+        <parameter type-id='30341fa1'/>
+        <return type-id='42c8f564'/>
+      </function-decl>
+      <function-decl name='fuse_conn_put' mangled-name='fuse_conn_put' filepath='fs/fuse/fuse_i.h' line='994' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_conn_put'>
+        <parameter type-id='03e54357'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='fuse_dev_alloc' mangled-name='fuse_dev_alloc' filepath='fs/fuse/fuse_i.h' line='997' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_dev_alloc'>
+        <return type-id='f925394a'/>
+      </function-decl>
+      <function-decl name='fuse_fill_super_common' mangled-name='fuse_fill_super_common' filepath='fs/fuse/fuse_i.h' line='1007' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_fill_super_common'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='d9e5bb28'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='fuse_dev_install' mangled-name='fuse_dev_install' filepath='fs/fuse/fuse_i.h' line='998' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_dev_install'>
+        <parameter type-id='f925394a'/>
+        <parameter type-id='03e54357'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='fuse_send_init' mangled-name='fuse_send_init' filepath='fs/fuse/fuse_i.h' line='1000' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_send_init'>
+        <parameter type-id='03e54357'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='deactivate_locked_super' mangled-name='deactivate_locked_super' filepath='include/linux/fs.h' line='2360' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='deactivate_locked_super'>
+        <parameter type-id='42c8f564'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='get_anon_bdev' mangled-name='get_anon_bdev' filepath='include/linux/fs.h' line='2363' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_anon_bdev'>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='fuse_conn_get' mangled-name='fuse_conn_get' filepath='fs/fuse/fuse_i.h' line='983' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_conn_get'>
+        <parameter type-id='03e54357'/>
+        <return type-id='03e54357'/>
+      </function-decl>
+      <function-decl name='fuse_dequeue_forget' mangled-name='fuse_dequeue_forget' filepath='fs/fuse/fuse_i.h' line='855' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_dequeue_forget'>
+        <parameter type-id='f4792d9b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='69f5e8dd'/>
+      </function-decl>
+      <function-decl name='fuse_get_unique' mangled-name='fuse_get_unique' filepath='fs/fuse/fuse_i.h' line='1129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fuse_get_unique'>
+        <parameter type-id='f4792d9b'/>
+        <return type-id='3a47d82b'/>
+      </function-decl>
+      <function-decl name='register_virtio_driver' mangled-name='register_virtio_driver' filepath='include/linux/virtio.h' line='188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_virtio_driver'>
+        <parameter type-id='f350dc99'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='f2207a6d'>
+        <parameter type-id='5dbfcbb1'/>
+        <return type-id='80f4b756'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ba92be9c'>
+        <parameter type-id='5dbfcbb1'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='5f8a1ac4'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e2da4ade'>
+        <parameter type-id='6a54ab42'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f214de7d'>
+        <parameter type-id='5dbfcbb1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e636858f'>
+        <parameter type-id='5dbfcbb1'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='06ce3ba1'/>
+        <parameter type-id='d0d85e9d'/>
+        <parameter type-id='13956559'/>
+        <parameter type-id='cfe2266a'/>
+        <parameter type-id='8a876638'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b70014f4'>
+        <parameter type-id='5dbfcbb1'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='0c4e1d65'/>
+        <parameter type-id='74080660'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='628f102a'>
+        <parameter type-id='91d0de51'/>
+        <parameter type-id='5f8a1ac4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='916c4095'>
+        <parameter type-id='27675065'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1e91d6cd'>
+        <parameter type-id='5dbfcbb1'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='70a1a668'>
+        <parameter type-id='5dbfcbb1'/>
+        <return type-id='91ce1af9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='983b8510'>
+        <parameter type-id='5dbfcbb1'/>
+        <return type-id='f9b06939'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7d909a8c'>
+        <parameter type-id='03e54357'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='419fe15e'>
+        <parameter type-id='03e54357'/>
+        <parameter type-id='7515b73a'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0996f100'>
+        <parameter type-id='f4792d9b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ec180093'>
+        <parameter type-id='8a876638'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bbf47576'>
+        <parameter type-id='5dbfcbb1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='83c3d80a'>
+        <parameter type-id='5dbfcbb1'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6c0f5f3c'>
+        <parameter type-id='5dbfcbb1'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7af6d412'>
+        <parameter type-id='5dbfcbb1'/>
+        <parameter type-id='05a6a00d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='efc29a3e'>
+        <parameter type-id='91d0de51'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='af1578f6'>
+        <parameter type-id='05a6a00d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/incfs/main.c' language='LANG_C89'>
+      <function-decl name='sysfs_remove_group' mangled-name='sysfs_remove_group' filepath='include/linux/sysfs.h' line='284' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_remove_group'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='8ff9530e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kobject_put' mangled-name='kobject_put' filepath='include/linux/kobject.h' line='121' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_put'>
+        <parameter type-id='d30bdc51'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kobject_create_and_add' mangled-name='kobject_create_and_add' filepath='include/linux/kobject.h' line='112' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_create_and_add'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='d30bdc51'/>
+        <return type-id='d30bdc51'/>
+      </function-decl>
+      <function-decl name='sysfs_create_group' mangled-name='sysfs_create_group' filepath='include/linux/sysfs.h' line='276' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_create_group'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='8ff9530e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/inode.c' language='LANG_C89'>
+      <typedef-decl name='ino_t' type-id='4e22818f' filepath='include/linux/types.h' line='17' column='1' id='2aa75eef'/>
+      <typedef-decl name='__kernel_ino_t' type-id='447da2ae' filepath='include/uapi/asm-generic/posix_types.h' line='20' column='1' id='4e22818f'/>
+      <pointer-type-def type-id='79faeff3' size-in-bits='64' id='8567d8b3'/>
+      <pointer-type-def type-id='53fb272e' size-in-bits='64' id='34e69a54'/>
+      <function-decl name='iunique' mangled-name='iunique' filepath='fs/inode.c' line='1273' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iunique'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/inode.c' line='1273' column='1'/>
+        <parameter type-id='2aa75eef' name='max_reserved' filepath='fs/inode.c' line='1273' column='1'/>
+        <return type-id='2aa75eef'/>
+      </function-decl>
+      <function-decl name='__insert_inode_hash' mangled-name='__insert_inode_hash' filepath='fs/inode.c' line='494' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__insert_inode_hash'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='494' column='1'/>
+        <parameter type-id='7359adad' name='hashval' filepath='fs/inode.c' line='494' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__remove_inode_hash' mangled-name='__remove_inode_hash' filepath='fs/inode.c' line='512' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__remove_inode_hash'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='512' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_atomic_dec_and_lock' mangled-name='_atomic_dec_and_lock' filepath='include/linux/spinlock.h' line='454' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_atomic_dec_and_lock'>
+        <parameter type-id='8567d8b3'/>
+        <parameter type-id='34e69a54'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='write_inode_now' mangled-name='write_inode_now' filepath='include/linux/fs.h' line='2814' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='write_inode_now'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iget_locked' mangled-name='iget_locked' filepath='fs/inode.c' line='1174' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iget_locked'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/inode.c' line='1174' column='1'/>
+        <parameter type-id='7359adad' name='ino' filepath='fs/inode.c' line='1174' column='1'/>
+        <return type-id='7e666abe'/>
+      </function-decl>
+      <function-decl name='ilookup' mangled-name='ilookup' filepath='fs/inode.c' line='1387' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ilookup'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/inode.c' line='1387' column='1'/>
+        <parameter type-id='7359adad' name='ino' filepath='fs/inode.c' line='1387' column='1'/>
+        <return type-id='7e666abe'/>
+      </function-decl>
+      <function-decl name='generic_delete_inode' mangled-name='generic_delete_inode' filepath='fs/inode.c' line='1523' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_delete_inode'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='1523' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/io_uring.c' language='LANG_C89'>
+      <function-decl name='sock_release' mangled-name='sock_release' filepath='include/linux/net.h' line='244' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_release'>
+        <parameter type-id='13103032'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/jbd2/commit.c' language='LANG_C89'>
+      <function-decl name='crc32_be' mangled-name='crc32_be' filepath='include/linux/crc32.h' line='12' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crc32_be'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/libfs.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='256' id='5d4602e8'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='5049bff3' size-in-bits='64' id='14a7c87f'/>
+      <var-decl name='simple_dir_operations' type-id='b8ae588d' mangled-name='simple_dir_operations' visibility='default' filepath='fs/libfs.c' line='229' column='1' elf-symbol-id='simple_dir_operations'/>
+      <var-decl name='simple_dir_inode_operations' type-id='c8e0fb8e' mangled-name='simple_dir_inode_operations' visibility='default' filepath='fs/libfs.c' line='239' column='1' elf-symbol-id='simple_dir_inode_operations'/>
+      <function-decl name='simple_statfs' mangled-name='simple_statfs' filepath='fs/libfs.c' line='39' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_statfs'>
+        <parameter type-id='27675065' name='dentry' filepath='fs/libfs.c' line='39' column='1'/>
+        <parameter type-id='087d687b' name='buf' filepath='fs/libfs.c' line='39' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='simple_open' mangled-name='simple_open' filepath='fs/libfs.c' line='315' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_open'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/libfs.c' line='315' column='1'/>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/libfs.c' line='315' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='simple_write_to_buffer' mangled-name='simple_write_to_buffer' filepath='fs/libfs.c' line='682' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_write_to_buffer'>
+        <parameter type-id='eaa32e2f' name='to' filepath='fs/libfs.c' line='682' column='1'/>
+        <parameter type-id='b59d7dce' name='available' filepath='fs/libfs.c' line='682' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='fs/libfs.c' line='682' column='1'/>
+        <parameter type-id='eaa32e2f' name='from' filepath='fs/libfs.c' line='683' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='fs/libfs.c' line='683' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='simple_attr_release' mangled-name='simple_attr_release' filepath='fs/libfs.c' line='842' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_attr_release'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/libfs.c' line='842' column='1'/>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/libfs.c' line='842' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='simple_attr_read' mangled-name='simple_attr_read' filepath='fs/libfs.c' line='850' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_attr_read'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/libfs.c' line='850' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='fs/libfs.c' line='850' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='fs/libfs.c' line='851' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='fs/libfs.c' line='851' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='simple_attr_write' mangled-name='simple_attr_write' filepath='fs/libfs.c' line='888' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_attr_write'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/libfs.c' line='888' column='1'/>
+        <parameter type-id='80f4b756' name='buf' filepath='fs/libfs.c' line='888' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='fs/libfs.c' line='889' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='fs/libfs.c' line='889' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='generic_fh_to_dentry' mangled-name='generic_fh_to_dentry' filepath='fs/libfs.c' line='934' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_fh_to_dentry'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/libfs.c' line='934' column='1'/>
+        <parameter type-id='f7d748c2' name='fid' filepath='fs/libfs.c' line='934' column='1'/>
+        <parameter type-id='95e97e5e' name='fh_len' filepath='fs/libfs.c' line='935' column='1'/>
+        <parameter type-id='95e97e5e' name='fh_type' filepath='fs/libfs.c' line='935' column='1'/>
+        <parameter type-id='14a7c87f' name='get_inode' filepath='fs/libfs.c' line='935' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='generic_fh_to_parent' mangled-name='generic_fh_to_parent' filepath='fs/libfs.c' line='967' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_fh_to_parent'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/libfs.c' line='967' column='1'/>
+        <parameter type-id='f7d748c2' name='fid' filepath='fs/libfs.c' line='967' column='1'/>
+        <parameter type-id='95e97e5e' name='fh_len' filepath='fs/libfs.c' line='968' column='1'/>
+        <parameter type-id='95e97e5e' name='fh_type' filepath='fs/libfs.c' line='968' column='1'/>
+        <parameter type-id='14a7c87f' name='get_inode' filepath='fs/libfs.c' line='968' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='sync_mapping_buffers' mangled-name='sync_mapping_buffers' filepath='include/linux/buffer_head.h' line='174' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sync_mapping_buffers'>
+        <parameter type-id='f57039f0'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='generic_file_fsync' mangled-name='generic_file_fsync' filepath='fs/libfs.c' line='1041' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_file_fsync'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/libfs.c' line='1041' column='1'/>
+        <parameter type-id='69bf7bee' name='start' filepath='fs/libfs.c' line='1041' column='1'/>
+        <parameter type-id='69bf7bee' name='end' filepath='fs/libfs.c' line='1041' column='1'/>
+        <parameter type-id='95e97e5e' name='datasync' filepath='fs/libfs.c' line='1042' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blkdev_issue_flush' mangled-name='blkdev_issue_flush' filepath='include/linux/blkdev.h' line='1218' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blkdev_issue_flush'>
+        <parameter type-id='b88dd945'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='c0190993'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='2437c5c4' size-in-bits='64' id='f7d748c2'/>
+      <function-type size-in-bits='64' id='5049bff3'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='7e666abe'/>
+      </function-type>
+      <class-decl name='fid' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/exportfs.h' line='113' column='1' id='2437c5c4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='0394b7eb' visibility='default' filepath='include/linux/exportfs.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='160' is-anonymous='yes' visibility='default' filepath='include/linux/exportfs.h' line='114' column='1' id='0394b7eb'>
+        <data-member access='private'>
+          <var-decl name='i32' type-id='273ef6eb' visibility='default' filepath='include/linux/exportfs.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='udf' type-id='2d08566e' visibility='default' filepath='include/linux/exportfs.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw' type-id='d5016f6f' visibility='default' filepath='include/linux/exportfs.h' line='129' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='160' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/exportfs.h' line='121' column='1' id='2d08566e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='block' type-id='19c2251e' visibility='default' filepath='include/linux/exportfs.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='partref' type-id='1dc6a898' visibility='default' filepath='include/linux/exportfs.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='parent_partref' type-id='1dc6a898' visibility='default' filepath='include/linux/exportfs.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='generation' type-id='19c2251e' visibility='default' filepath='include/linux/exportfs.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='parent_block' type-id='19c2251e' visibility='default' filepath='include/linux/exportfs.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parent_generation' type-id='19c2251e' visibility='default' filepath='include/linux/exportfs.h' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/exportfs.h' line='115' column='1' id='273ef6eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ino' type-id='19c2251e' visibility='default' filepath='include/linux/exportfs.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='gen' type-id='19c2251e' visibility='default' filepath='include/linux/exportfs.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parent_ino' type-id='19c2251e' visibility='default' filepath='include/linux/exportfs.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='parent_gen' type-id='19c2251e' visibility='default' filepath='include/linux/exportfs.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/mpage.c' language='LANG_C89'>
+      <function-decl name='mpage_readpage' mangled-name='mpage_readpage' filepath='fs/mpage.c' line='454' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mpage_readpage'>
+        <parameter type-id='02f11ed4' name='page' filepath='fs/mpage.c' line='454' column='1'/>
+        <parameter type-id='05ca8778' name='get_block' filepath='fs/mpage.c' line='454' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mpage_writepages' mangled-name='mpage_writepages' filepath='fs/mpage.c' line='748' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mpage_writepages'>
+        <parameter type-id='f57039f0' name='mapping' filepath='fs/mpage.c' line='748' column='1'/>
+        <parameter type-id='c2c60445' name='wbc' filepath='fs/mpage.c' line='749' column='1'/>
+        <parameter type-id='05ca8778' name='get_block' filepath='fs/mpage.c' line='749' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/namei.c' language='LANG_C89'>
+      <function-decl name='d_delete' mangled-name='d_delete' filepath='include/linux/dcache.h' line='242' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_delete'>
+        <parameter type-id='27675065'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/namespace.c' language='LANG_C89'>
+      <function-decl name='kern_unmount' mangled-name='kern_unmount' filepath='fs/namespace.c' line='3806' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kern_unmount'>
+        <parameter type-id='549da823' name='mnt' filepath='fs/namespace.c' line='3806' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/nls/nls_base.c' language='LANG_C89'>
+      <function-decl name='load_nls_default' mangled-name='load_nls_default' filepath='fs/nls/nls_base.c' line='532' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='load_nls_default'>
+        <return type-id='b084f8bb'/>
+      </function-decl>
+      <pointer-type-def type-id='5a3379ab' size-in-bits='64' id='b084f8bb'/>
+      <class-decl name='nls_table' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/nls.h' line='25' column='1' id='5a3379ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='charset' type-id='80f4b756' visibility='default' filepath='include/linux/nls.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='alias' type-id='80f4b756' visibility='default' filepath='include/linux/nls.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uni2char' type-id='66ebcd54' visibility='default' filepath='include/linux/nls.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='char2uni' type-id='5201f65c' visibility='default' filepath='include/linux/nls.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='charset2lower' type-id='354f7eb9' visibility='default' filepath='include/linux/nls.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='charset2upper' type-id='354f7eb9' visibility='default' filepath='include/linux/nls.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/nls.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='next' type-id='b084f8bb' visibility='default' filepath='include/linux/nls.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4e9708ea' size-in-bits='64' id='5201f65c'/>
+      <pointer-type-def type-id='cb341b9a' size-in-bits='64' id='66ebcd54'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/nls/nls_euc-jp.c' language='LANG_C89'>
+      <class-decl name='nls_table' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/nls.h' line='25' column='1' id='5a3379ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='charset' type-id='80f4b756' visibility='default' filepath='include/linux/nls.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='alias' type-id='80f4b756' visibility='default' filepath='include/linux/nls.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uni2char' type-id='66ebcd54' visibility='default' filepath='include/linux/nls.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='char2uni' type-id='5201f65c' visibility='default' filepath='include/linux/nls.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='charset2lower' type-id='354f7eb9' visibility='default' filepath='include/linux/nls.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='charset2upper' type-id='354f7eb9' visibility='default' filepath='include/linux/nls.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/nls.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='next' type-id='b084f8bb' visibility='default' filepath='include/linux/nls.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='wchar_t' type-id='1dc6a898' filepath='include/linux/nls.h' line='19' column='1' id='928221d2'/>
+      <pointer-type-def type-id='4e9708ea' size-in-bits='64' id='5201f65c'/>
+      <pointer-type-def type-id='cb341b9a' size-in-bits='64' id='66ebcd54'/>
+      <pointer-type-def type-id='5a3379ab' size-in-bits='64' id='b084f8bb'/>
+      <pointer-type-def type-id='928221d2' size-in-bits='64' id='323d93c1'/>
+      <function-decl name='unload_nls' mangled-name='unload_nls' filepath='include/linux/nls.h' line='51' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unload_nls'>
+        <parameter type-id='b084f8bb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='load_nls' mangled-name='load_nls' filepath='include/linux/nls.h' line='50' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='load_nls'>
+        <parameter type-id='26a90f95'/>
+        <return type-id='b084f8bb'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='4e9708ea'>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='323d93c1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cb341b9a'>
+        <parameter type-id='928221d2'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/notify/inotify/inotify_fsnotify.c' language='LANG_C89'>
+      <pointer-type-def type-id='8852d0d2' size-in-bits='64' id='f4f5b664'/>
+      <function-decl name='idr_for_each' mangled-name='idr_for_each' filepath='include/linux/idr.h' line='120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_for_each'>
+        <parameter type-id='c79c8089'/>
+        <parameter type-id='f4f5b664'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='8852d0d2'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/notify/mark.c' language='LANG_C89'>
+      <function-decl name='refcount_dec_and_lock' mangled-name='refcount_dec_and_lock' filepath='include/linux/refcount.h' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='refcount_dec_and_lock'>
+        <parameter type-id='74c91557'/>
+        <parameter type-id='34e69a54'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/open.c' language='LANG_C89'>
+      <class-decl name='fsnotify_mark_connector' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fsnotify_backend.h' line='292' column='1' id='aadc8cea'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fsnotify_backend.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='8efea9e5' visibility='default' filepath='include/linux/fsnotify_backend.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/linux/fsnotify_backend.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fsid' type-id='ac895711' visibility='default' filepath='include/linux/fsnotify_backend.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='9114ebb7' visibility='default' filepath='include/linux/fsnotify_backend.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='e151255a' visibility='default' filepath='include/linux/fsnotify_backend.h' line='304' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__kernel_fsid_t' type-id='b55219f8' filepath='include/uapi/asm-generic/posix_types.h' line='81' column='1' id='ac895711'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='ac895711' visibility='default' filepath='include/uapi/asm-generic/posix_types.h' line='79' column='1' id='b55219f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='e4266c7e' visibility='default' filepath='include/uapi/asm-generic/posix_types.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fsnotify_backend.h' line='298' column='1' id='9114ebb7'>
+        <data-member access='private'>
+          <var-decl name='obj' type-id='c66f5ec5' visibility='default' filepath='include/linux/fsnotify_backend.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='destroy_next' type-id='994d9d62' visibility='default' filepath='include/linux/fsnotify_backend.h' line='302' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='fsnotify_connp_t' type-id='994d9d62' filepath='include/linux/fsnotify_backend.h' line='284' column='1' id='dc5fa7f0'/>
+      <pointer-type-def type-id='dc5fa7f0' size-in-bits='64' id='c66f5ec5'/>
+      <pointer-type-def type-id='aadc8cea' size-in-bits='64' id='994d9d62'/>
+      <function-decl name='nonseekable_open' mangled-name='nonseekable_open' filepath='fs/open.c' line='1235' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nonseekable_open'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/open.c' line='1235' column='1'/>
+        <parameter type-id='77e79a4b' name='filp' filepath='fs/open.c' line='1235' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/overlayfs/super.c' language='LANG_C89'>
+      <class-decl name='iomap' is-struct='yes' visibility='default' is-declaration-only='yes' id='3b326cb5'/>
+      <array-type-def dimensions='1' type-id='05438640' size-in-bits='infinite' id='a51f6b3c'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='posix_acl_entry' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/posix_acl.h' line='18' column='1' id='05438640'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='e_tag' type-id='a2185560' visibility='default' filepath='include/linux/posix_acl.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='e_perm' type-id='8efea9e5' visibility='default' filepath='include/linux/posix_acl.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='' type-id='21c0164a' visibility='default' filepath='include/linux/posix_acl.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/posix_acl.h' line='21' column='1' id='21c0164a'>
+        <data-member access='private'>
+          <var-decl name='e_uid' type-id='d80b72e6' visibility='default' filepath='include/linux/posix_acl.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='e_gid' type-id='094d8048' visibility='default' filepath='include/linux/posix_acl.h' line='23' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='fid' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/exportfs.h' line='113' column='1' id='2437c5c4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='0394b7eb' visibility='default' filepath='include/linux/exportfs.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='160' is-anonymous='yes' visibility='default' filepath='include/linux/exportfs.h' line='114' column='1' id='0394b7eb'>
+        <data-member access='private'>
+          <var-decl name='i32' type-id='273ef6eb' visibility='default' filepath='include/linux/exportfs.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='udf' type-id='2d08566e' visibility='default' filepath='include/linux/exportfs.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='raw' type-id='d5016f6f' visibility='default' filepath='include/linux/exportfs.h' line='129' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/exportfs.h' line='115' column='1' id='273ef6eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ino' type-id='19c2251e' visibility='default' filepath='include/linux/exportfs.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='gen' type-id='19c2251e' visibility='default' filepath='include/linux/exportfs.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parent_ino' type-id='19c2251e' visibility='default' filepath='include/linux/exportfs.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='parent_gen' type-id='19c2251e' visibility='default' filepath='include/linux/exportfs.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='160' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/exportfs.h' line='121' column='1' id='2d08566e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='block' type-id='19c2251e' visibility='default' filepath='include/linux/exportfs.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='partref' type-id='1dc6a898' visibility='default' filepath='include/linux/exportfs.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='parent_partref' type-id='1dc6a898' visibility='default' filepath='include/linux/exportfs.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='generation' type-id='19c2251e' visibility='default' filepath='include/linux/exportfs.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='parent_block' type-id='19c2251e' visibility='default' filepath='include/linux/exportfs.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parent_generation' type-id='19c2251e' visibility='default' filepath='include/linux/exportfs.h' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3f1a6b60' size-in-bits='64' id='cd1b45ab'/>
+      <pointer-type-def type-id='39d64410' size-in-bits='64' id='36ed3b9a'/>
+      <pointer-type-def type-id='5d64147c' size-in-bits='64' id='9b9ccb86'/>
+      <pointer-type-def type-id='2437c5c4' size-in-bits='64' id='f7d748c2'/>
+      <pointer-type-def type-id='96658a93' size-in-bits='64' id='cb0ca137'/>
+      <pointer-type-def type-id='91de15a8' size-in-bits='64' id='2cdfbf0a'/>
+      <pointer-type-def type-id='91b0693b' size-in-bits='64' id='30144f27'/>
+      <pointer-type-def type-id='a48b0884' size-in-bits='64' id='35d085ce'/>
+      <pointer-type-def type-id='657fbd80' size-in-bits='64' id='547aa7d2'/>
+      <pointer-type-def type-id='3b326cb5' size-in-bits='64' id='07751825'/>
+      <function-decl name='kmem_cache_destroy' mangled-name='kmem_cache_destroy' filepath='include/linux/slab.h' line='155' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_destroy'>
+        <parameter type-id='f3b4aca8'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kern_path' mangled-name='kern_path' filepath='include/linux/namei.h' line='52' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kern_path'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='bcfe6314'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kfree_call_rcu' mangled-name='kfree_call_rcu' filepath='include/linux/rcutree.h' line='36' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kfree_call_rcu'>
+        <parameter type-id='69c138b1'/>
+        <parameter type-id='eb839374'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='in_group_p' mangled-name='in_group_p' filepath='include/linux/cred.h' line='61' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='in_group_p'>
+        <parameter type-id='bac1227a'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sync_filesystem' mangled-name='sync_filesystem' filepath='include/linux/fs.h' line='2705' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sync_filesystem'>
+        <parameter type-id='42c8f564'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kmem_cache_create' mangled-name='kmem_cache_create' filepath='include/linux/slab.h' line='147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_create'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='b7f9d8e6'/>
+        <return type-id='f3b4aca8'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='39d64410'>
+        <parameter type-id='27675065'/>
+        <return type-id='27675065'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5d64147c'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='f7d748c2'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='27675065'/>
+      </function-type>
+      <function-type size-in-bits='64' id='96658a93'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='27675065'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='91de15a8'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='cd1b45ab'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='7e666abe'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='91b0693b'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='07751825'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='ab7bbd67'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a48b0884'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='07751825'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='657fbd80'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/pipe.c' language='LANG_C89'>
+      <function-decl name='pipe_lock' mangled-name='pipe_lock' filepath='fs/pipe.c' line='66' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pipe_lock'>
+        <parameter type-id='15d29710' name='pipe' filepath='fs/pipe.c' line='66' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pipe_unlock' mangled-name='pipe_unlock' filepath='fs/pipe.c' line='75' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pipe_unlock'>
+        <parameter type-id='15d29710' name='pipe' filepath='fs/pipe.c' line='75' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/proc/base.c' language='LANG_C89'>
+      <function-decl name='kstrtouint_from_user' mangled-name='kstrtouint_from_user' filepath='include/linux/kernel.h' line='436' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtouint_from_user'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtoull_from_user' mangled-name='kstrtoull_from_user' filepath='include/linux/kernel.h' line='432' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtoull_from_user'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='c0190993'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/proc/cmdline.c' language='LANG_C89'>
+      <class-decl name='iov_iter' is-struct='yes' visibility='default' is-declaration-only='yes' id='f2b4d089'/>
+      <class-decl name='module' is-struct='yes' visibility='default' is-declaration-only='yes' id='29476916'/>
+      <class-decl name='pipe_inode_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='bed94323'/>
+      <pointer-type-def type-id='f2b4d089' size-in-bits='64' id='4fa10f9f'/>
+      <pointer-type-def type-id='29476916' size-in-bits='64' id='2730d016'/>
+      <pointer-type-def type-id='bed94323' size-in-bits='64' id='15d29711'/>
+      <function-decl name='proc_create_single_data' mangled-name='proc_create_single_data' filepath='include/linux/proc_fs.h' line='39' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_create_single_data'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='d077e928'/>
+        <parameter type-id='0131eb61'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='d077e928'/>
+      </function-decl>
+      <function-decl name='seq_puts' mangled-name='seq_puts' filepath='include/linux/seq_file.h' line='120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_puts'>
+        <parameter type-id='f8dc9df0'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='seq_putc' mangled-name='seq_putc' filepath='include/linux/seq_file.h' line='119' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_putc'>
+        <parameter type-id='f8dc9df0'/>
+        <parameter type-id='a84c031d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/proc/consoles.c' language='LANG_C89'>
+      <function-decl name='console_lock' mangled-name='console_lock' filepath='include/linux/console.h' line='178' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='console_lock'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='console_unlock' mangled-name='console_unlock' filepath='include/linux/console.h' line='180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='console_unlock'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/proc/cpuinfo.c' language='LANG_C89'>
+      <function-decl name='seq_open' mangled-name='seq_open' filepath='include/linux/seq_file.h' line='109' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_open'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='943a1b48'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/proc/generic.c' language='LANG_C89'>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='fs/proc/internal.h' line='44' column='1' id='1371a02f'>
+        <data-member access='private'>
+          <var-decl name='seq_ops' type-id='943a1b48' visibility='default' filepath='fs/proc/internal.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='single_show' type-id='0131eb61' visibility='default' filepath='fs/proc/internal.h' line='46' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='proc_write_t' type-id='f71f3e00' filepath='include/linux/proc_fs.h' line='17' column='1' id='7c2b18ab'/>
+      <typedef-decl name='nlink_t' type-id='19c2251e' filepath='include/linux/types.h' line='20' column='1' id='6fa67d85'/>
+      <pointer-type-def type-id='56b34f46' size-in-bits='64' id='f71f3e00'/>
+      <function-decl name='proc_mkdir_data' mangled-name='proc_mkdir_data' filepath='fs/proc/generic.c' line='499' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_mkdir_data'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/proc/generic.c' line='499' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/proc/generic.c' line='499' column='1'/>
+        <parameter type-id='d077e928' name='parent' filepath='fs/proc/generic.c' line='500' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/proc/generic.c' line='500' column='1'/>
+        <return type-id='d077e928'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='56b34f46'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/proc/meminfo.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='447da2ae' size-in-bits='192' id='d371d064'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <class-decl name='sysinfo' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='8' column='1' id='3c95971e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uptime' type-id='6a11bd61' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='loads' type-id='d371d064' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='totalram' type-id='447da2ae' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='freeram' type-id='447da2ae' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sharedram' type-id='447da2ae' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bufferram' type-id='447da2ae' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='totalswap' type-id='447da2ae' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='freeswap' type-id='447da2ae' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='procs' type-id='d315442e' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='656'>
+          <var-decl name='pad' type-id='d315442e' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='totalhigh' type-id='447da2ae' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='freehigh' type-id='447da2ae' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='mem_unit' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='_f' type-id='e84913bd' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3c95971e' size-in-bits='64' id='0f561784'/>
+      <function-decl name='si_meminfo' mangled-name='si_meminfo' filepath='include/linux/mm.h' line='2308' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='si_meminfo'>
+        <parameter type-id='0f561784'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='si_mem_available' mangled-name='si_mem_available' filepath='include/linux/mm.h' line='2307' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='si_mem_available'>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='seq_write' mangled-name='seq_write' filepath='include/linux/seq_file.h' line='113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_write'>
+        <parameter type-id='f8dc9df0'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/proc/proc_net.c' language='LANG_C89'>
+      <function-decl name='proc_create_net_single' mangled-name='proc_create_net_single' filepath='fs/proc/proc_net.c' line='178' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_create_net_single'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/proc/proc_net.c' line='178' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/proc/proc_net.c' line='178' column='1'/>
+        <parameter type-id='d077e928' name='parent' filepath='fs/proc/proc_net.c' line='179' column='1'/>
+        <parameter type-id='0131eb61' name='show' filepath='fs/proc/proc_net.c' line='180' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/proc/proc_net.c' line='180' column='1'/>
+        <return type-id='d077e928'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/proc/proc_sysctl.c' language='LANG_C89'>
+      <function-decl name='register_sysctl_table' mangled-name='register_sysctl_table' filepath='fs/proc/proc_sysctl.c' line='1605' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_sysctl_table'>
+        <parameter type-id='631dc3c1' name='table' filepath='fs/proc/proc_sysctl.c' line='1605' column='1'/>
+        <return type-id='11b101bb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/proc/stat.c' language='LANG_C89'>
+      <function-decl name='getboottime64' mangled-name='getboottime64' filepath='include/linux/timekeeping.h' line='47' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getboottime64'>
+        <parameter type-id='4151733d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/proc/uptime.c' language='LANG_C89'>
+      <enum-decl name='tk_offsets' filepath='include/linux/timekeeping.h' line='60' column='1' id='73bb584e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TK_OFFS_REAL' value='0'/>
+        <enumerator name='TK_OFFS_BOOT' value='1'/>
+        <enumerator name='TK_OFFS_TAI' value='2'/>
+        <enumerator name='TK_OFFS_MAX' value='3'/>
+      </enum-decl>
+      <function-decl name='ktime_get_with_offset' mangled-name='ktime_get_with_offset' filepath='include/linux/timekeeping.h' line='68' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get_with_offset'>
+        <parameter type-id='73bb584e'/>
+        <return type-id='1eb56b1e'/>
+      </function-decl>
+      <function-decl name='ns_to_timespec64' mangled-name='ns_to_timespec64' filepath='include/linux/time64.h' line='140' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ns_to_timespec64'>
+        <parameter type-id='1eb56b1e'/>
+        <return type-id='40a816ad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/pstore/platform.c' language='LANG_C89'>
+      <function-decl name='crypto_has_alg' mangled-name='crypto_has_alg' filepath='include/linux/crypto.h' line='710' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_has_alg'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/pstore/ram.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='160' id='664ac0b7'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <class-decl name='mfd_cell' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/mfd/core.h' line='29' column='1' id='54cc740b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/mfd/core.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/mfd/core.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usage_count' type-id='8a47abc3' visibility='default' filepath='include/linux/mfd/core.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enable' type-id='e05ae2cd' visibility='default' filepath='include/linux/mfd/core.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='disable' type-id='e05ae2cd' visibility='default' filepath='include/linux/mfd/core.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='suspend' type-id='e05ae2cd' visibility='default' filepath='include/linux/mfd/core.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='resume' type-id='e05ae2cd' visibility='default' filepath='include/linux/mfd/core.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='platform_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mfd/core.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pdata_size' type-id='b59d7dce' visibility='default' filepath='include/linux/mfd/core.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='properties' type-id='6db3218b' visibility='default' filepath='include/linux/mfd/core.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='of_compatible' type-id='80f4b756' visibility='default' filepath='include/linux/mfd/core.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='acpi_match' type-id='66421794' visibility='default' filepath='include/linux/mfd/core.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='num_resources' type-id='95e97e5e' visibility='default' filepath='include/linux/mfd/core.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='resources' type-id='e153f6de' visibility='default' filepath='include/linux/mfd/core.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ignore_resource_conflicts' type-id='b50a4934' visibility='default' filepath='include/linux/mfd/core.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='904'>
+          <var-decl name='pm_runtime_no_callbacks' type-id='b50a4934' visibility='default' filepath='include/linux/mfd/core.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='parent_supplies' type-id='13956559' visibility='default' filepath='include/linux/mfd/core.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='num_parent_supplies' type-id='95e97e5e' visibility='default' filepath='include/linux/mfd/core.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='platform_driver' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/linux/platform_device.h' line='190' column='1' id='0742eda5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='probe' type-id='e05ae2cd' visibility='default' filepath='include/linux/platform_device.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='remove' type-id='e05ae2cd' visibility='default' filepath='include/linux/platform_device.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shutdown' type-id='2cbd236c' visibility='default' filepath='include/linux/platform_device.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='suspend' type-id='5a92c1cc' visibility='default' filepath='include/linux/platform_device.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='resume' type-id='e05ae2cd' visibility='default' filepath='include/linux/platform_device.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/platform_device.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='id_table' type-id='79c2f4f8' visibility='default' filepath='include/linux/platform_device.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='prevent_deferred_probe' type-id='b50a4934' visibility='default' filepath='include/linux/platform_device.h' line='198' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='platform_device' size-in-bits='7872' is-struct='yes' visibility='default' filepath='include/linux/platform_device.h' line='22' column='1' id='7bb4e525'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/platform_device.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/platform_device.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='id_auto' type-id='b50a4934' visibility='default' filepath='include/linux/platform_device.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/platform_device.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='platform_dma_mask' type-id='91ce1af9' visibility='default' filepath='include/linux/platform_device.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='num_resources' type-id='19c2251e' visibility='default' filepath='include/linux/platform_device.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='resource' type-id='c9d64c0d' visibility='default' filepath='include/linux/platform_device.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='id_entry' type-id='79c2f4f8' visibility='default' filepath='include/linux/platform_device.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='driver_override' type-id='26a90f95' visibility='default' filepath='include/linux/platform_device.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='mfd_cell' type-id='fb02122b' visibility='default' filepath='include/linux/platform_device.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='archdata' type-id='89ee2f2f' visibility='default' filepath='include/linux/platform_device.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='platform_device_id' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='582' column='1' id='c4ec4353'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/linux/mod_devicetable.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_data' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='584' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pdev_archdata' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/device.h' line='14' column='1' id='89ee2f2f'/>
+      <class-decl name='platform_device_info' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/platform_device.h' line='71' column='1' id='b4a2c74e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/platform_device.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/platform_device.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='of_node_reused' type-id='b50a4934' visibility='default' filepath='include/linux/platform_device.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/platform_device.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/platform_device.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='res' type-id='e153f6de' visibility='default' filepath='include/linux/platform_device.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='num_res' type-id='f0981eeb' visibility='default' filepath='include/linux/platform_device.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/platform_device.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='size_data' type-id='b59d7dce' visibility='default' filepath='include/linux/platform_device.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dma_mask' type-id='91ce1af9' visibility='default' filepath='include/linux/platform_device.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='properties' type-id='6db3218b' visibility='default' filepath='include/linux/platform_device.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='property_entry' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/property.h' line='231' column='1' id='822bf95b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/property.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='length' type-id='b59d7dce' visibility='default' filepath='include/linux/property.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='is_array' type-id='b50a4934' visibility='default' filepath='include/linux/property.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='type' type-id='fec738e2' visibility='default' filepath='include/linux/property.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='7f9d5221' visibility='default' filepath='include/linux/property.h' line='236' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dev_prop_type' filepath='include/linux/property.h' line='19' column='1' id='fec738e2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DEV_PROP_U8' value='0'/>
+        <enumerator name='DEV_PROP_U16' value='1'/>
+        <enumerator name='DEV_PROP_U32' value='2'/>
+        <enumerator name='DEV_PROP_U64' value='3'/>
+        <enumerator name='DEV_PROP_STRING' value='4'/>
+        <enumerator name='DEV_PROP_MAX' value='5'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/property.h' line='236' column='1' id='7f9d5221'>
+        <data-member access='private'>
+          <var-decl name='pointer' type-id='cbb0e2f4' visibility='default' filepath='include/linux/property.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='value' type-id='8e9a613b' visibility='default' filepath='include/linux/property.h' line='250' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/property.h' line='237' column='1' id='cbb0e2f4'>
+        <data-member access='private'>
+          <var-decl name='u8_data' type-id='bbaf3419' visibility='default' filepath='include/linux/property.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u16_data' type-id='80455526' visibility='default' filepath='include/linux/property.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u32_data' type-id='aded214c' visibility='default' filepath='include/linux/property.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u64_data' type-id='c8fec899' visibility='default' filepath='include/linux/property.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='str' type-id='13956559' visibility='default' filepath='include/linux/property.h' line='242' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/property.h' line='244' column='1' id='8e9a613b'>
+        <data-member access='private'>
+          <var-decl name='u8_data' type-id='f9b06939' visibility='default' filepath='include/linux/property.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u16_data' type-id='1dc6a898' visibility='default' filepath='include/linux/property.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u32_data' type-id='19c2251e' visibility='default' filepath='include/linux/property.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u64_data' type-id='91ce1af9' visibility='default' filepath='include/linux/property.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='str' type-id='80f4b756' visibility='default' filepath='include/linux/property.h' line='249' column='1'/>
+        </data-member>
+      </union-decl>
+      <qualified-type-def type-id='6661a698' const='yes' id='5558489b'/>
+      <pointer-type-def type-id='5558489b' size-in-bits='64' id='0afa6ea3'/>
+      <qualified-type-def type-id='c4ec4353' const='yes' id='213c3202'/>
+      <pointer-type-def type-id='213c3202' size-in-bits='64' id='79c2f4f8'/>
+      <qualified-type-def type-id='b4a2c74e' const='yes' id='d0fea0bb'/>
+      <pointer-type-def type-id='d0fea0bb' size-in-bits='64' id='91d6c443'/>
+      <qualified-type-def type-id='5218160d' const='yes' id='20b17040'/>
+      <pointer-type-def type-id='20b17040' size-in-bits='64' id='e153f6de'/>
+      <pointer-type-def type-id='d5c0a628' size-in-bits='64' id='80455526'/>
+      <qualified-type-def type-id='19c2251e' const='yes' id='51bb592e'/>
+      <pointer-type-def type-id='51bb592e' size-in-bits='64' id='aded214c'/>
+      <qualified-type-def type-id='91ce1af9' const='yes' id='49c81889'/>
+      <pointer-type-def type-id='49c81889' size-in-bits='64' id='c8fec899'/>
+      <pointer-type-def type-id='b083f9b9' size-in-bits='64' id='e05ae2cd'/>
+      <pointer-type-def type-id='90220a52' size-in-bits='64' id='5a92c1cc'/>
+      <pointer-type-def type-id='54cc740b' size-in-bits='64' id='fb02122b'/>
+      <pointer-type-def type-id='7bb4e525' size-in-bits='64' id='db362995'/>
+      <pointer-type-def type-id='0742eda5' size-in-bits='64' id='d53c2eb5'/>
+      <pointer-type-def type-id='822bf95b' size-in-bits='64' id='6db3218b'/>
+      <pointer-type-def type-id='cfb839d2' size-in-bits='64' id='2cbd236c'/>
+      <function-decl name='platform_driver_unregister' mangled-name='platform_driver_unregister' filepath='include/linux/platform_device.h' line='211' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_driver_unregister'>
+        <parameter type-id='d53c2eb5'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='platform_device_unregister' mangled-name='platform_device_unregister' filepath='include/linux/platform_device.h' line='47' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_unregister'>
+        <parameter type-id='db362995'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='platform_get_resource' mangled-name='platform_get_resource' filepath='include/linux/platform_device.h' line='52' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_get_resource'>
+        <parameter type-id='db362995'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='c9d64c0d'/>
+      </function-decl>
+      <function-decl name='of_find_property' mangled-name='of_find_property' filepath='include/linux/of.h' line='304' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_property'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='ddcd89c6'/>
+      </function-decl>
+      <function-decl name='of_property_read_variable_u32_array' mangled-name='of_property_read_variable_u32_array' filepath='include/linux/of.h' line='321' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_read_variable_u32_array'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_get_parent' mangled-name='of_get_parent' filepath='include/linux/of.h' line='286' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_parent'>
+        <parameter type-id='0afa6ea3'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_node_name_eq' mangled-name='of_node_name_eq' filepath='include/linux/of.h' line='256' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_node_name_eq'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='_dev_err' mangled-name='_dev_err' filepath='include/linux/device.h' line='1758' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_dev_err'>
+        <parameter type-id='8df61054'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scnprintf' mangled-name='scnprintf' filepath='include/linux/kernel.h' line='483' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scnprintf'>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kasprintf' mangled-name='kasprintf' filepath='include/linux/kernel.h' line='487' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kasprintf'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='platform_device_register_full' mangled-name='platform_device_register_full' filepath='include/linux/platform_device.h' line='88' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_register_full'>
+        <parameter type-id='91d6c443'/>
+        <return type-id='db362995'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='b083f9b9'>
+        <parameter type-id='db362995'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='90220a52'>
+        <parameter type-id='db362995'/>
+        <parameter type-id='08496218'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cfb839d2'>
+        <parameter type-id='db362995'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/quota/quota_v2.c' language='LANG_C89'>
+      <pointer-type-def type-id='f106d0e5' size-in-bits='64' id='538ece95'/>
+      <function-decl name='down_read' mangled-name='down_read' filepath='include/linux/rwsem.h' line='129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='down_read'>
+        <parameter type-id='9b58df93'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='up_read' mangled-name='up_read' filepath='include/linux/rwsem.h' line='152' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='up_read'>
+        <parameter type-id='9b58df93'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_spin_lock' mangled-name='_raw_spin_lock' filepath='include/linux/spinlock_api_smp.h' line='22' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_lock'>
+        <parameter type-id='538ece95'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_spin_unlock' mangled-name='_raw_spin_unlock' filepath='include/linux/spinlock_api_smp.h' line='39' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_unlock'>
+        <parameter type-id='538ece95'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/read_write.c' language='LANG_C89'>
+      <function-decl name='generic_file_llseek' mangled-name='generic_file_llseek' filepath='fs/read_write.c' line='144' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_file_llseek'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/read_write.c' line='144' column='1'/>
+        <parameter type-id='69bf7bee' name='offset' filepath='fs/read_write.c' line='144' column='1'/>
+        <parameter type-id='95e97e5e' name='whence' filepath='fs/read_write.c' line='144' column='1'/>
+        <return type-id='69bf7bee'/>
+      </function-decl>
+      <function-decl name='no_seek_end_llseek' mangled-name='no_seek_end_llseek' filepath='fs/read_write.c' line='181' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='no_seek_end_llseek'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/read_write.c' line='181' column='1'/>
+        <parameter type-id='69bf7bee' name='offset' filepath='fs/read_write.c' line='181' column='1'/>
+        <parameter type-id='95e97e5e' name='whence' filepath='fs/read_write.c' line='181' column='1'/>
+        <return type-id='69bf7bee'/>
+      </function-decl>
+      <function-decl name='noop_llseek' mangled-name='noop_llseek' filepath='fs/read_write.c' line='224' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='noop_llseek'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/read_write.c' line='224' column='1'/>
+        <parameter type-id='69bf7bee' name='offset' filepath='fs/read_write.c' line='224' column='1'/>
+        <parameter type-id='95e97e5e' name='whence' filepath='fs/read_write.c' line='224' column='1'/>
+        <return type-id='69bf7bee'/>
+      </function-decl>
+      <function-decl name='no_llseek' mangled-name='no_llseek' filepath='fs/read_write.c' line='230' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='no_llseek'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/read_write.c' line='230' column='1'/>
+        <parameter type-id='69bf7bee' name='offset' filepath='fs/read_write.c' line='230' column='1'/>
+        <parameter type-id='95e97e5e' name='whence' filepath='fs/read_write.c' line='230' column='1'/>
+        <return type-id='69bf7bee'/>
+      </function-decl>
+      <function-decl name='default_llseek' mangled-name='default_llseek' filepath='fs/read_write.c' line='236' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='default_llseek'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/read_write.c' line='236' column='1'/>
+        <parameter type-id='69bf7bee' name='offset' filepath='fs/read_write.c' line='236' column='1'/>
+        <parameter type-id='95e97e5e' name='whence' filepath='fs/read_write.c' line='236' column='1'/>
+        <return type-id='69bf7bee'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/seq_file.c' language='LANG_C89'>
+      <function-decl name='seq_read' mangled-name='seq_read' filepath='fs/seq_file.c' line='153' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_read'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/seq_file.c' line='153' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='fs/seq_file.c' line='153' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='fs/seq_file.c' line='153' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='fs/seq_file.c' line='153' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='seq_file_path' mangled-name='seq_file_path' filepath='fs/seq_file.c' line='492' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_file_path'>
+        <parameter type-id='f8dc9df0' name='m' filepath='fs/seq_file.c' line='492' column='1'/>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/seq_file.c' line='492' column='1'/>
+        <parameter type-id='80f4b756' name='esc' filepath='fs/seq_file.c' line='492' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__seq_open_private' mangled-name='__seq_open_private' filepath='fs/seq_file.c' line='624' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__seq_open_private'>
+        <parameter type-id='77e79a4b' name='f' filepath='fs/seq_file.c' line='624' column='1'/>
+        <parameter type-id='943a1b48' name='ops' filepath='fs/seq_file.c' line='624' column='1'/>
+        <parameter type-id='95e97e5e' name='psize' filepath='fs/seq_file.c' line='625' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='seq_open_private' mangled-name='seq_open_private' filepath='fs/seq_file.c' line='650' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_open_private'>
+        <parameter type-id='77e79a4b' name='filp' filepath='fs/seq_file.c' line='650' column='1'/>
+        <parameter type-id='943a1b48' name='ops' filepath='fs/seq_file.c' line='650' column='1'/>
+        <parameter type-id='95e97e5e' name='psize' filepath='fs/seq_file.c' line='651' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='seq_hex_dump' mangled-name='seq_hex_dump' filepath='fs/seq_file.c' line='857' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_hex_dump'>
+        <parameter type-id='f8dc9df0' name='m' filepath='fs/seq_file.c' line='857' column='1'/>
+        <parameter type-id='80f4b756' name='prefix_str' filepath='fs/seq_file.c' line='857' column='1'/>
+        <parameter type-id='95e97e5e' name='prefix_type' filepath='fs/seq_file.c' line='857' column='1'/>
+        <parameter type-id='95e97e5e' name='rowsize' filepath='fs/seq_file.c' line='858' column='1'/>
+        <parameter type-id='95e97e5e' name='groupsize' filepath='fs/seq_file.c' line='858' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='fs/seq_file.c' line='858' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='fs/seq_file.c' line='858' column='1'/>
+        <parameter type-id='b50a4934' name='ascii' filepath='fs/seq_file.c' line='859' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='hex_dump_to_buffer' mangled-name='hex_dump_to_buffer' filepath='include/linux/printk.h' line='482' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hex_dump_to_buffer'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/splice.c' language='LANG_C89'>
+      <class-decl name='splice_desc' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/splice.h' line='29' column='1' id='41838567'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='total_len' type-id='b59d7dce' visibility='default' filepath='include/linux/splice.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/linux/splice.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/splice.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='u' type-id='1851a81a' visibility='default' filepath='include/linux/splice.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pos' type-id='69bf7bee' visibility='default' filepath='include/linux/splice.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='opos' type-id='b53e8dbb' visibility='default' filepath='include/linux/splice.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_spliced' type-id='b59d7dce' visibility='default' filepath='include/linux/splice.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='need_wakeup' type-id='b50a4934' visibility='default' filepath='include/linux/splice.h' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/splice.h' line='36' column='1' id='1851a81a'>
+        <data-member access='private'>
+          <var-decl name='userptr' type-id='eaa32e2f' visibility='default' filepath='include/linux/splice.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/splice.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/splice.h' line='39' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='splice_actor' type-id='69c72ccd' filepath='include/linux/splice.h' line='65' column='1' id='99adf786'/>
+      <pointer-type-def type-id='99adf786' size-in-bits='64' id='05903717'/>
+      <pointer-type-def type-id='41838567' size-in-bits='64' id='f5bc338f'/>
+      <function-decl name='generic_file_splice_read' mangled-name='generic_file_splice_read' filepath='fs/splice.c' line='295' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_file_splice_read'>
+        <parameter type-id='77e79a4b' name='in' filepath='fs/splice.c' line='295' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='fs/splice.c' line='295' column='1'/>
+        <parameter type-id='15d29710' name='pipe' filepath='fs/splice.c' line='296' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='fs/splice.c' line='296' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='fs/splice.c' line='297' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='__splice_from_pipe' mangled-name='__splice_from_pipe' filepath='fs/splice.c' line='614' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__splice_from_pipe'>
+        <parameter type-id='15d29710' name='pipe' filepath='fs/splice.c' line='614' column='1'/>
+        <parameter type-id='f5bc338f' name='sd' filepath='fs/splice.c' line='614' column='1'/>
+        <parameter type-id='05903717' name='actor' filepath='fs/splice.c' line='615' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='69c72ccd'>
+        <parameter type-id='15d29710'/>
+        <parameter type-id='e15f3242'/>
+        <parameter type-id='f5bc338f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/super.c' language='LANG_C89'>
+      <union-decl name='fscrypt_policy' visibility='default' is-declaration-only='yes' id='61227239'/>
+      <union-decl name='__anonymous_union__10' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fsnotify_backend.h' line='298' column='1' id='9114ebb8'>
+        <data-member access='private'>
+          <var-decl name='obj' type-id='c66f5ec6' visibility='default' filepath='include/linux/fsnotify_backend.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='destroy_next' type-id='994d9d61' visibility='default' filepath='include/linux/fsnotify_backend.h' line='302' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='fsnotify_connp_t' type-id='994d9d61' filepath='include/linux/fsnotify_backend.h' line='284' column='1' id='dc5fa7f1'/>
+      <qualified-type-def type-id='61227239' const='yes' id='268fa5d8'/>
+      <pointer-type-def type-id='268fa5d8' size-in-bits='64' id='a6223bf6'/>
+      <pointer-type-def type-id='4b7af74a' size-in-bits='64' id='c0135c9c'/>
+      <pointer-type-def type-id='dc5fa7f1' size-in-bits='64' id='c66f5ec6'/>
+      <pointer-type-def type-id='7a6178ff' size-in-bits='64' id='c60354f3'/>
+      <pointer-type-def type-id='4f0fdafb' size-in-bits='64' id='ef75df1f'/>
+      <pointer-type-def type-id='e7d2a5fc' size-in-bits='64' id='c69b0fe2'/>
+      <pointer-type-def type-id='e74568be' size-in-bits='64' id='deb31178'/>
+      <pointer-type-def type-id='3e80a1bc' size-in-bits='64' id='3b2da7a6'/>
+      <pointer-type-def type-id='64604191' size-in-bits='64' id='c95d966d'/>
+      <pointer-type-def type-id='a96e8cde' size-in-bits='64' id='b0ddaf40'/>
+      <function-decl name='bdev_read_only' mangled-name='bdev_read_only' filepath='include/linux/fs.h' line='3183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bdev_read_only'>
+        <parameter type-id='b88dd945'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='invalidate_bdev' mangled-name='invalidate_bdev' filepath='include/linux/fs.h' line='2659' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='invalidate_bdev'>
+        <parameter type-id='b88dd945'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kill_anon_super' mangled-name='kill_anon_super' filepath='fs/super.c' line='1105' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kill_anon_super'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/super.c' line='1105' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kill_litter_super' mangled-name='kill_litter_super' filepath='fs/super.c' line='1113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kill_litter_super'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/super.c' line='1113' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='get_tree_bdev' mangled-name='get_tree_bdev' filepath='fs/super.c' line='1277' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_tree_bdev'>
+        <parameter type-id='5760dcb1' name='fc' filepath='fs/super.c' line='1277' column='1'/>
+        <parameter type-id='30341fa1' name='fill_super' filepath='fs/super.c' line='1278' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blkdev_get_by_path' mangled-name='blkdev_get_by_path' filepath='include/linux/fs.h' line='2713' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blkdev_get_by_path'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='b88dd945'/>
+      </function-decl>
+      <function-decl name='sync_blockdev' mangled-name='sync_blockdev' filepath='include/linux/fs.h' line='2661' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sync_blockdev'>
+        <parameter type-id='b88dd945'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='4b7af74a'>
+        <parameter type-id='42c8f564'/>
+        <return type-id='a6223bf6'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7a6178ff'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f0fdafb'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e74568be'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3e80a1bc'>
+        <parameter type-id='42c8f564'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='64604191'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a96e8cde'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='c69b0fe2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/sync.c' language='LANG_C89'>
+      <function-decl name='vfs_fsync' mangled-name='vfs_fsync' filepath='fs/sync.c' line='211' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_fsync'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/sync.c' line='211' column='1'/>
+        <parameter type-id='95e97e5e' name='datasync' filepath='fs/sync.c' line='211' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/sysfs/file.c' language='LANG_C89'>
+      <qualified-type-def type-id='cfe4f8a2' const='yes' id='cb71e1ad'/>
+      <pointer-type-def type-id='cb71e1ad' size-in-bits='64' id='cb460785'/>
+      <function-decl name='sysfs_create_files' mangled-name='sysfs_create_files' filepath='fs/sysfs/file.c' line='337' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_create_files'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/file.c' line='337' column='1'/>
+        <parameter type-id='cb460785' name='ptr' filepath='fs/sysfs/file.c' line='337' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sysfs_add_file_to_group' mangled-name='sysfs_add_file_to_group' filepath='fs/sysfs/file.c' line='357' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_add_file_to_group'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/file.c' line='357' column='1'/>
+        <parameter type-id='cfe4f8a2' name='attr' filepath='fs/sysfs/file.c' line='358' column='1'/>
+        <parameter type-id='80f4b756' name='group' filepath='fs/sysfs/file.c' line='358' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sysfs_remove_files' mangled-name='sysfs_remove_files' filepath='fs/sysfs/file.c' line='496' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_remove_files'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/file.c' line='496' column='1'/>
+        <parameter type-id='cb460785' name='ptr' filepath='fs/sysfs/file.c' line='496' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sysfs_remove_file_from_group' mangled-name='sysfs_remove_file_from_group' filepath='fs/sysfs/file.c' line='511' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_remove_file_from_group'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/file.c' line='511' column='1'/>
+        <parameter type-id='cfe4f8a2' name='attr' filepath='fs/sysfs/file.c' line='512' column='1'/>
+        <parameter type-id='80f4b756' name='group' filepath='fs/sysfs/file.c' line='512' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='fs/sysfs/group.c' language='LANG_C89'>
+      <function-decl name='sysfs_remove_groups' mangled-name='sysfs_remove_groups' filepath='fs/sysfs/group.c' line='304' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_remove_groups'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/group.c' line='304' column='1'/>
+        <parameter type-id='c97de1ac' name='groups' filepath='fs/sysfs/group.c' line='305' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__compat_only_sysfs_link_entry_to_kobj' mangled-name='__compat_only_sysfs_link_entry_to_kobj' filepath='fs/sysfs/group.c' line='424' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__compat_only_sysfs_link_entry_to_kobj'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/group.c' line='424' column='1'/>
+        <parameter type-id='d30bdc51' name='target_kobj' filepath='fs/sysfs/group.c' line='425' column='1'/>
+        <parameter type-id='80f4b756' name='target_name' filepath='fs/sysfs/group.c' line='426' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='init/do_mounts.c' language='LANG_C89'>
+      <function-decl name='class_find_device' mangled-name='class_find_device' filepath='include/linux/device.h' line='668' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='class_find_device'>
+        <parameter type-id='67aca04f'/>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='92d15ae9'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='blk_lookup_devt' mangled-name='blk_lookup_devt' filepath='include/linux/genhd.h' line='636' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_lookup_devt'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='init/do_mounts_initrd.c' language='LANG_C89'>
+      <function-decl name='memparse' mangled-name='memparse' filepath='include/linux/kernel.h' line='500' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memparse'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='9b23c9ad'/>
+        <return type-id='3a47d82b'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='init/init_task.c' language='LANG_C89'>
+      <var-decl name='init_task' type-id='bc3f1924' mangled-name='init_task' visibility='default' filepath='init/init_task.c' line='58' column='1' elf-symbol-id='init_task'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='init/initramfs.c' language='LANG_C89'>
+      <class-decl name='kmem_cache' size-in-bits='3712' is-struct='yes' visibility='default' filepath='include/linux/slub_def.h' line='82' column='1' id='a3119fea'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_slab' type-id='75f3cc0b' visibility='default' filepath='include/linux/slub_def.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='f7fe96cb' visibility='default' filepath='include/linux/slub_def.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='min_partial' type-id='7359adad' visibility='default' filepath='include/linux/slub_def.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='object_size' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='offset' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='cpu_partial' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='oo' type-id='dfc42026' visibility='default' filepath='include/linux/slub_def.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='max' type-id='dfc42026' visibility='default' filepath='include/linux/slub_def.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='min' type-id='dfc42026' visibility='default' filepath='include/linux/slub_def.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='allocflags' type-id='3eb7c31c' visibility='default' filepath='include/linux/slub_def.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcount' type-id='95e97e5e' visibility='default' filepath='include/linux/slub_def.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ctor' type-id='b7f9d8e6' visibility='default' filepath='include/linux/slub_def.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='inuse' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='align' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='red_left_pad' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/slub_def.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/slub_def.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/slub_def.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='kobj_remove_work' type-id='ef9025d0' visibility='default' filepath='include/linux/slub_def.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='memcg_params' type-id='f36112b4' visibility='default' filepath='include/linux/slub_def.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='max_attr_size' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='memcg_kset' type-id='89b70200' visibility='default' filepath='include/linux/slub_def.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='random' type-id='7359adad' visibility='default' filepath='include/linux/slub_def.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='random_seq' type-id='807869d3' visibility='default' filepath='include/linux/slub_def.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='useroffset' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3616'>
+          <var-decl name='usersize' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='node' type-id='425436e6' visibility='default' filepath='include/linux/slub_def.h' line='142' column='1'/>
+        </data-member>
+      </class-decl>
+      <type-decl name='unsigned int' size-in-bits='32' id='f0981eeb'/>
+      <type-decl name='variadic parameter type' id='2c1145c5'/>
+      <pointer-type-def type-id='26a90f95' size-in-bits='64' id='9b23c9ad'/>
+      <pointer-type-def type-id='a3119fea' size-in-bits='64' id='f3b4aca8'/>
+      <function-decl name='printk' mangled-name='printk' filepath='include/linux/printk.h' line='171' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='printk'>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='panic' mangled-name='panic' filepath='include/linux/kernel.h' line='322' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='panic'>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kmem_cache_alloc_trace' mangled-name='kmem_cache_alloc_trace' filepath='include/linux/slab.h' line='432' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_alloc_trace'>
+        <parameter type-id='f3b4aca8'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='kmalloc_order_trace' mangled-name='kmalloc_order_trace' filepath='include/linux/slab.h' line='473' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmalloc_order_trace'>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='kfree' mangled-name='kfree' filepath='include/linux/slab.h' line='189' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kfree'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kstrdup' mangled-name='kstrdup' filepath='include/linux/string.h' line='182' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrdup'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='simple_strtoul' mangled-name='simple_strtoul' filepath='include/linux/kernel.h' line='466' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_strtoul'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='9b23c9ad'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='init/main.c' language='LANG_C89'>
+      <class-decl name='trace_subsystem_dir' size-in-bits='384' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='1381' column='1' id='10143522'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='1382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='subsystem' type-id='841939f3' visibility='default' filepath='kernel/trace/trace.h' line='1383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tr' type-id='898c1076' visibility='default' filepath='kernel/trace/trace.h' line='1384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='entry' type-id='27675065' visibility='default' filepath='kernel/trace/trace.h' line='1385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ref_count' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='1386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='nr_events' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='1387' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='infinite' id='c165e8b9'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <enum-decl name='system_states' filepath='include/linux/kernel.h' line='569' column='1' id='2ead22b4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SYSTEM_BOOTING' value='0'/>
+        <enumerator name='SYSTEM_SCHEDULING' value='1'/>
+        <enumerator name='SYSTEM_RUNNING' value='2'/>
+        <enumerator name='SYSTEM_HALT' value='3'/>
+        <enumerator name='SYSTEM_POWER_OFF' value='4'/>
+        <enumerator name='SYSTEM_RESTART' value='5'/>
+        <enumerator name='SYSTEM_SUSPEND' value='6'/>
+      </enum-decl>
+      <enum-decl name='event_trigger_type' filepath='include/linux/trace_events.h' line='430' column='1' id='21b4096c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ETT_NONE' value='0'/>
+        <enumerator name='ETT_TRACE_ONOFF' value='1'/>
+        <enumerator name='ETT_SNAPSHOT' value='2'/>
+        <enumerator name='ETT_STACKTRACE' value='4'/>
+        <enumerator name='ETT_EVENT_ENABLE' value='8'/>
+        <enumerator name='ETT_EVENT_HIST' value='16'/>
+        <enumerator name='ETT_HIST_ENABLE' value='32'/>
+      </enum-decl>
+      <class-decl name='trace_event_file' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='375' column='1' id='155948e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/trace_events.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='event_call' type-id='23d6768d' visibility='default' filepath='include/linux/trace_events.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='filter' type-id='26461068' visibility='default' filepath='include/linux/trace_events.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dir' type-id='27675065' visibility='default' filepath='include/linux/trace_events.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tr' type-id='898c1076' visibility='default' filepath='include/linux/trace_events.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='system' type-id='f4f46ed0' visibility='default' filepath='include/linux/trace_events.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='triggers' type-id='72f469ec' visibility='default' filepath='include/linux/trace_events.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/trace_events.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sm_ref' type-id='49178f86' visibility='default' filepath='include/linux/trace_events.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='tm_ref' type-id='49178f86' visibility='default' filepath='include/linux/trace_events.h' line='402' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='737' column='1' id='d1afa501'>
+        <data-member access='private'>
+          <var-decl name='i_pipe' type-id='15d29711' visibility='default' filepath='include/linux/fs.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_cdev' type-id='3e6eb93a' visibility='default' filepath='include/linux/fs.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='i_dir_seq' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='742' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='ring_buffer_event' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/ring_buffer.h' line='15' column='1' id='a7242c81'>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='type_len' type-id='19c2251e' visibility='default' filepath='include/linux/ring_buffer.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='time_delta' type-id='19c2251e' visibility='default' filepath='include/linux/ring_buffer.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='array' type-id='c165e8b9' visibility='default' filepath='include/linux/ring_buffer.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_event_buffer' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='207' column='1' id='933375ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buffer' type-id='8462bc54' visibility='default' filepath='include/linux/trace_events.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='event' type-id='3275e929' visibility='default' filepath='include/linux/trace_events.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='trace_file' type-id='3d4ca6d2' visibility='default' filepath='include/linux/trace_events.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='entry' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/trace_events.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pc' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='213' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d0d650b9' size-in-bits='64' id='d23fe9bd'/>
+      <pointer-type-def type-id='99f367f2' size-in-bits='64' id='37a6b980'/>
+      <pointer-type-def type-id='b0f27198' size-in-bits='64' id='e0677422'/>
+      <pointer-type-def type-id='32f8fd62' size-in-bits='64' id='3e644294'/>
+      <pointer-type-def type-id='4616a179' size-in-bits='64' id='a89ff5a9'/>
+      <pointer-type-def type-id='a7242c81' size-in-bits='64' id='3275e929'/>
+      <pointer-type-def type-id='933375ec' size-in-bits='64' id='9f548f9a'/>
+      <pointer-type-def type-id='155948e4' size-in-bits='64' id='3d4ca6d2'/>
+      <pointer-type-def type-id='c5078f42' size-in-bits='64' id='fc932690'/>
+      <pointer-type-def type-id='10143522' size-in-bits='64' id='f4f46ed0'/>
+      <pointer-type-def type-id='61062930' size-in-bits='64' id='6fa26802'/>
+      <pointer-type-def type-id='107219ed' size-in-bits='64' id='277e3361'/>
+      <var-decl name='loops_per_jiffy' type-id='7359adad' mangled-name='loops_per_jiffy' visibility='default' filepath='init/main.c' line='225' column='1' elf-symbol-id='loops_per_jiffy'/>
+      <var-decl name='system_state' type-id='2ead22b4' mangled-name='system_state' visibility='default' filepath='init/main.c' line='123' column='1' elf-symbol-id='system_state'/>
+      <var-decl name='static_key_initialized' type-id='b50a4934' mangled-name='static_key_initialized' visibility='default' filepath='init/main.c' line='163' column='1' elf-symbol-id='static_key_initialized'/>
+      <function-decl name='event_triggers_call' mangled-name='event_triggers_call' filepath='include/linux/trace_events.h' line='443' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='event_triggers_call'>
+        <parameter type-id='3d4ca6d2'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='3275e929'/>
+        <return type-id='21b4096c'/>
+      </function-decl>
+      <function-decl name='trace_event_ignore_this_pid' mangled-name='trace_event_ignore_this_pid' filepath='include/linux/trace_events.h' line='449' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_event_ignore_this_pid'>
+        <parameter type-id='3d4ca6d2'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='trace_event_buffer_reserve' mangled-name='trace_event_buffer_reserve' filepath='include/linux/trace_events.h' line='216' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_event_buffer_reserve'>
+        <parameter type-id='9f548f9a'/>
+        <parameter type-id='3d4ca6d2'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='trace_event_buffer_commit' mangled-name='trace_event_buffer_commit' filepath='include/linux/trace_events.h' line='220' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_event_buffer_commit'>
+        <parameter type-id='9f548f9a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='perf_trace_buf_alloc' mangled-name='perf_trace_buf_alloc' filepath='include/linux/trace_events.h' line='603' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='perf_trace_buf_alloc'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='a89ff5a9'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='perf_trace_run_bpf_submit' mangled-name='perf_trace_run_bpf_submit' filepath='include/linux/trace_events.h' line='632' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='perf_trace_run_bpf_submit'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='23d6768d'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='4616a179'/>
+        <parameter type-id='030d0b18'/>
+        <parameter type-id='f23e2572'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='trace_define_field' mangled-name='trace_define_field' filepath='include/linux/trace_events.h' line='542' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_define_field'>
+        <parameter type-id='23d6768d'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run1' mangled-name='bpf_trace_run1' filepath='include/linux/trace_events.h' line='605' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run1'>
+        <parameter type-id='bdcee7ae'/>
+        <parameter type-id='3a47d82b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run2' mangled-name='bpf_trace_run2' filepath='include/linux/trace_events.h' line='606' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run2'>
+        <parameter type-id='bdcee7ae'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='3a47d82b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='get_option' mangled-name='get_option' filepath='include/linux/kernel.h' line='498' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_option'>
+        <parameter type-id='9b23c9ad'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='find_last_bit' mangled-name='find_last_bit' filepath='include/linux/bitops.h' line='284' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='find_last_bit'>
+        <parameter type-id='f9b37274'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='add_device_randomness' mangled-name='add_device_randomness' filepath='include/linux/random.h' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='add_device_randomness'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='strreplace' mangled-name='strreplace' filepath='include/linux/string.h' line='178' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strreplace'>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='a84c031d'/>
+        <parameter type-id='a84c031d'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='trace_raw_output_prep' mangled-name='trace_raw_output_prep' filepath='include/linux/trace_events.h' line='51' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_raw_output_prep'>
+        <parameter type-id='18881289'/>
+        <parameter type-id='fb7d87a1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='trace_seq_printf' mangled-name='trace_seq_printf' filepath='include/linux/trace_seq.h' line='77' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_seq_printf'>
+        <parameter type-id='fc932690'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='trace_handle_return' mangled-name='trace_handle_return' filepath='include/linux/trace_events.h' line='142' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_handle_return'>
+        <parameter type-id='fc932690'/>
+        <return type-id='b1a0a119'/>
+      </function-decl>
+      <enum-decl name='print_line_t' filepath='include/linux/trace_events.h' line='135' column='1' id='b1a0a119'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TRACE_TYPE_PARTIAL_LINE' value='0'/>
+        <enumerator name='TRACE_TYPE_HANDLED' value='1'/>
+        <enumerator name='TRACE_TYPE_UNHANDLED' value='2'/>
+        <enumerator name='TRACE_TYPE_NO_CONSUME' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='ba400603' size-in-bits='64' id='841939f3'/>
+      <function-type size-in-bits='64' id='d0d650b9'>
+        <parameter type-id='dc5ce118'/>
+        <parameter type-id='37a6b980'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b0f27198'>
+        <parameter type-id='37a6b980'/>
+        <return type-id='37a6b980'/>
+      </function-type>
+      <function-type size-in-bits='64' id='32f8fd62'>
+        <parameter type-id='f23e2572'/>
+        <return type-id='37a6b980'/>
+      </function-type>
+      <function-type size-in-bits='64' id='61062930'>
+        <parameter type-id='37a6b980'/>
+        <return type-id='c0ced321'/>
+      </function-type>
+      <function-type size-in-bits='64' id='107219ed'>
+        <parameter type-id='37a6b980'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='0d029111' size-in-bits='64' id='4616a179'/>
+      <pointer-type-def type-id='e27b4e90' size-in-bits='64' id='898c1076'/>
+      <pointer-type-def type-id='78b26ac9' size-in-bits='64' id='fb7d87a1'/>
+      <pointer-type-def type-id='60588bb1' size-in-bits='64' id='18881289'/>
+      <class-decl name='event_subsystem' size-in-bits='320' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='1374' column='1' id='ba400603'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='1375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='kernel/trace/trace.h' line='1376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='filter' type-id='26461068' visibility='default' filepath='kernel/trace/trace.h' line='1377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ref_count' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='1378' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pt_regs' size-in-bits='2560' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='160' column='1' id='0d029111'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='dcc4b447' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='orig_x0' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='syscallno' type-id='a7832498' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='unused2' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='orig_addr_limit' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='pmr_save' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='stackframe' type-id='24a375b2' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_array' size-in-bits='2368' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='246' column='1' id='e27b4e90'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='kernel/trace/trace.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='trace_buffer' type-id='72093c11' visibility='default' filepath='kernel/trace/trace.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='filtered_pids' type-id='1f6324ad' visibility='default' filepath='kernel/trace/trace.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_lock' type-id='641c41d1' visibility='default' filepath='kernel/trace/trace.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='buffer_disabled' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='stop_count' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='clock_id' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='nr_topts' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='clear_trace' type-id='b50a4934' visibility='default' filepath='kernel/trace/trace.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='buffer_percent' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='n_err_log_entries' type-id='f0981eeb' visibility='default' filepath='kernel/trace/trace.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='current_trace' type-id='0a18715a' visibility='default' filepath='kernel/trace/trace.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='trace_flags' type-id='f0981eeb' visibility='default' filepath='kernel/trace/trace.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='trace_flags_index' type-id='fc872715' visibility='default' filepath='kernel/trace/trace.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='kernel/trace/trace.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='start_lock' type-id='f5c90b3f' visibility='default' filepath='kernel/trace/trace.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='err_log' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='dir' type-id='27675065' visibility='default' filepath='kernel/trace/trace.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='options' type-id='27675065' visibility='default' filepath='kernel/trace/trace.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='percpu_dir' type-id='27675065' visibility='default' filepath='kernel/trace/trace.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='event_dir' type-id='27675065' visibility='default' filepath='kernel/trace/trace.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='topts' type-id='e9037327' visibility='default' filepath='kernel/trace/trace.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='systems' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='events' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='trace_marker_file' type-id='3d4ca6d2' visibility='default' filepath='kernel/trace/trace.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='tracing_cpumask' type-id='b16b461b' visibility='default' filepath='kernel/trace/trace.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='ref' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='trace_ref' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='time_stamp_abs_ref' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='hist_vars' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='326' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_iterator' size-in-bits='67456' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='74' column='1' id='60588bb1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tr' type-id='898c1076' visibility='default' filepath='include/linux/trace_events.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='trace' type-id='0a18715a' visibility='default' filepath='include/linux/trace_events.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='trace_buffer' type-id='573a5ee9' visibility='default' filepath='include/linux/trace_events.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cpu_file' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/trace_events.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='buffer_iter' type-id='93407a41' visibility='default' filepath='include/linux/trace_events.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='iter_flags' type-id='7359adad' visibility='default' filepath='include/linux/trace_events.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tmp_seq' type-id='c5078f42' visibility='default' filepath='include/linux/trace_events.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33792'>
+          <var-decl name='started' type-id='b16b461b' visibility='default' filepath='include/linux/trace_events.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33856'>
+          <var-decl name='snapshot' type-id='b50a4934' visibility='default' filepath='include/linux/trace_events.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33920'>
+          <var-decl name='seq' type-id='c5078f42' visibility='default' filepath='include/linux/trace_events.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67008'>
+          <var-decl name='ent' type-id='aa4b1eb5' visibility='default' filepath='include/linux/trace_events.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67072'>
+          <var-decl name='lost_events' type-id='7359adad' visibility='default' filepath='include/linux/trace_events.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67136'>
+          <var-decl name='leftover' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67168'>
+          <var-decl name='ent_size' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67200'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67264'>
+          <var-decl name='ts' type-id='91ce1af9' visibility='default' filepath='include/linux/trace_events.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67328'>
+          <var-decl name='pos' type-id='69bf7bee' visibility='default' filepath='include/linux/trace_events.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67392'>
+          <var-decl name='idx' type-id='bd54fe1a' visibility='default' filepath='include/linux/trace_events.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3d1f4971' size-in-bits='64' id='93407a41'/>
+      <class-decl name='trace_buffer' size-in-bits='320' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='176' column='1' id='72093c11'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tr' type-id='898c1076' visibility='default' filepath='kernel/trace/trace.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='buffer' type-id='8462bc54' visibility='default' filepath='kernel/trace/trace.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='17642359' visibility='default' filepath='kernel/trace/trace.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='time_start' type-id='91ce1af9' visibility='default' filepath='kernel/trace/trace.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='181' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='72093c11' size-in-bits='64' id='573a5ee9'/>
+      <pointer-type-def type-id='1986ca65' size-in-bits='64' id='aa4b1eb5'/>
+      <pointer-type-def type-id='882c3f1f' size-in-bits='64' id='e9037327'/>
+      <pointer-type-def type-id='b17e4f4d' size-in-bits='64' id='1f6324ad'/>
+      <pointer-type-def type-id='fd1f8b7c' size-in-bits='64' id='0a18715a'/>
+      <union-decl name='__anonymous_union__7' size-in-bits='2176' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='161' column='1' id='dcc4b447'>
+        <data-member access='private'>
+          <var-decl name='user_regs' type-id='cedec667' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='de6df8b1' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='163' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='563595d9' size-in-bits='64' id='3d1f4971'/>
+      <class-decl name='trace_entry' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='60' column='1' id='1986ca65'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='8efea9e5' visibility='default' filepath='include/linux/trace_events.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='002ac4a6' visibility='default' filepath='include/linux/trace_events.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='preempt_count' type-id='002ac4a6' visibility='default' filepath='include/linux/trace_events.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pid' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_options' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='186' column='1' id='882c3f1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tracer' type-id='0a18715a' visibility='default' filepath='kernel/trace/trace.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='topts' type-id='2473b64b' visibility='default' filepath='kernel/trace/trace.h' line='188' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_pid_list' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='191' column='1' id='b17e4f4d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pid_max' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pids' type-id='1d2c2b85' visibility='default' filepath='kernel/trace/trace.h' line='193' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tracer' size-in-bits='1216' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='467' column='1' id='fd1f8b7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='kernel/trace/trace.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init' type-id='30b9fb16' visibility='default' filepath='kernel/trace/trace.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reset' type-id='578c706b' visibility='default' filepath='kernel/trace/trace.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='start' type-id='578c706b' visibility='default' filepath='kernel/trace/trace.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='stop' type-id='578c706b' visibility='default' filepath='kernel/trace/trace.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='update_thresh' type-id='30b9fb16' visibility='default' filepath='kernel/trace/trace.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='open' type-id='29bf40b4' visibility='default' filepath='kernel/trace/trace.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pipe_open' type-id='29bf40b4' visibility='default' filepath='kernel/trace/trace.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='close' type-id='29bf40b4' visibility='default' filepath='kernel/trace/trace.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pipe_close' type-id='29bf40b4' visibility='default' filepath='kernel/trace/trace.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='read' type-id='43a53075' visibility='default' filepath='kernel/trace/trace.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='splice_read' type-id='0d8953a0' visibility='default' filepath='kernel/trace/trace.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='print_header' type-id='0f294852' visibility='default' filepath='kernel/trace/trace.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='print_line' type-id='cfbdf512' visibility='default' filepath='kernel/trace/trace.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_flag' type-id='d01e1ab3' visibility='default' filepath='kernel/trace/trace.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='flag_changed' type-id='e3e70e04' visibility='default' filepath='kernel/trace/trace.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='next' type-id='0a18715a' visibility='default' filepath='kernel/trace/trace.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='flags' type-id='aef13606' visibility='default' filepath='kernel/trace/trace.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='enabled' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='print_max' type-id='b50a4934' visibility='default' filepath='kernel/trace/trace.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1192'>
+          <var-decl name='allow_instances' type-id='b50a4934' visibility='default' filepath='kernel/trace/trace.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1200'>
+          <var-decl name='noboot' type-id='b50a4934' visibility='default' filepath='kernel/trace/trace.h' line='508' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='user_pt_regs' size-in-bits='2176' is-struct='yes' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='75' column='1' id='cedec667'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='regs' type-id='cb6b7280' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sp' type-id='d3130597' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='pc' type-id='d3130597' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='pstate' type-id='d3130597' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__6' size-in-bits='2176' is-struct='yes' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='163' column='1' id='de6df8b1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='regs' type-id='2f7ab612' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sp' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='pc' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='pstate' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='167' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='adff6731' size-in-bits='64' id='17642359'/>
+      <array-type-def dimensions='1' type-id='d3130597' size-in-bits='1984' id='cb6b7280'>
+        <subrange length='31' type-id='7ff19f0f' id='ae5e1d19'/>
+      </array-type-def>
+      <pointer-type-def type-id='94dd3300' size-in-bits='64' id='cfbdf512'/>
+      <pointer-type-def type-id='8d6f7724' size-in-bits='64' id='30b9fb16'/>
+      <pointer-type-def type-id='e5117942' size-in-bits='64' id='e3e70e04'/>
+      <pointer-type-def type-id='ca83d937' size-in-bits='64' id='d01e1ab3'/>
+      <class-decl name='ring_buffer_iter' is-struct='yes' visibility='default' is-declaration-only='yes' id='563595d9'/>
+      <class-decl name='trace_array_cpu' size-in-bits='1024' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='149' column='1' id='adff6731'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='disabled' type-id='49178f86' visibility='default' filepath='kernel/trace/trace.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='buffer_page' type-id='eaa32e2f' visibility='default' filepath='kernel/trace/trace.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entries' type-id='7359adad' visibility='default' filepath='kernel/trace/trace.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='saved_latency' type-id='7359adad' visibility='default' filepath='kernel/trace/trace.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='critical_start' type-id='7359adad' visibility='default' filepath='kernel/trace/trace.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='critical_end' type-id='7359adad' visibility='default' filepath='kernel/trace/trace.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='critical_sequence' type-id='7359adad' visibility='default' filepath='kernel/trace/trace.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nice' type-id='7359adad' visibility='default' filepath='kernel/trace/trace.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='policy' type-id='7359adad' visibility='default' filepath='kernel/trace/trace.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rt_priority' type-id='7359adad' visibility='default' filepath='kernel/trace/trace.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='skipped_entries' type-id='7359adad' visibility='default' filepath='kernel/trace/trace.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='preempt_timestamp' type-id='91ce1af9' visibility='default' filepath='kernel/trace/trace.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='pid' type-id='587f89d2' visibility='default' filepath='kernel/trace/trace.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='kernel/trace/trace.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='comm' type-id='ac1fa8c0' visibility='default' filepath='kernel/trace/trace.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ignore_pid' type-id='b50a4934' visibility='default' filepath='kernel/trace/trace.h' line='167' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='56d268db' size-in-bits='64' id='2473b64b'/>
+      <pointer-type-def type-id='e32a3610' size-in-bits='64' id='aef13606'/>
+      <pointer-type-def type-id='e5fd9491' size-in-bits='64' id='43a53075'/>
+      <pointer-type-def type-id='02b70d8e' size-in-bits='64' id='0d8953a0'/>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='1984' id='2f7ab612'>
+        <subrange length='31' type-id='7ff19f0f' id='ae5e1d19'/>
+      </array-type-def>
+      <pointer-type-def type-id='3dbb7e50' size-in-bits='64' id='0f294852'/>
+      <pointer-type-def type-id='c64b743f' size-in-bits='64' id='578c706b'/>
+      <pointer-type-def type-id='b44140ca' size-in-bits='64' id='29bf40b4'/>
+      <class-decl name='trace_option_dentry' size-in-bits='256' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='440' column='1' id='56d268db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='opt' type-id='a0260edc' visibility='default' filepath='kernel/trace/trace.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='aef13606' visibility='default' filepath='kernel/trace/trace.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tr' type-id='898c1076' visibility='default' filepath='kernel/trace/trace.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='entry' type-id='27675065' visibility='default' filepath='kernel/trace/trace.h' line='444' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tracer_flags' size-in-bits='192' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='430' column='1' id='e32a3610'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='19c2251e' visibility='default' filepath='kernel/trace/trace.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='opts' type-id='a0260edc' visibility='default' filepath='kernel/trace/trace.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='trace' type-id='0a18715a' visibility='default' filepath='kernel/trace/trace.h' line='433' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f20168e6' size-in-bits='64' id='a0260edc'/>
+      <class-decl name='tracer_opt' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='421' column='1' id='f20168e6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='kernel/trace/trace.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bit' type-id='19c2251e' visibility='default' filepath='kernel/trace/trace.h' line='423' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='init/version.c' language='LANG_C89'>
+      <var-decl name='init_uts_ns' type-id='44f52e9e' mangled-name='init_uts_ns' visibility='default' filepath='init/version.c' line='27' column='1' elf-symbol-id='init_uts_ns'/>
+      <class-decl name='uts_namespace' size-in-bits='3520' is-struct='yes' visibility='default' filepath='include/linux/utsname.h' line='24' column='1' id='44f52e9e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/utsname.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='ee2746d3' visibility='default' filepath='include/linux/utsname.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/utsname.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='ucounts' type-id='b1d4934a' visibility='default' filepath='include/linux/utsname.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='ns' type-id='99f367f2' visibility='default' filepath='include/linux/utsname.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='new_utsname' size-in-bits='3120' is-struct='yes' visibility='default' filepath='include/uapi/linux/utsname.h' line='25' column='1' id='ee2746d3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysname' type-id='5ddd38d2' visibility='default' filepath='include/uapi/linux/utsname.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='520'>
+          <var-decl name='nodename' type-id='5ddd38d2' visibility='default' filepath='include/uapi/linux/utsname.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='release' type-id='5ddd38d2' visibility='default' filepath='include/uapi/linux/utsname.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1560'>
+          <var-decl name='version' type-id='5ddd38d2' visibility='default' filepath='include/uapi/linux/utsname.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='machine' type-id='5ddd38d2' visibility='default' filepath='include/uapi/linux/utsname.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2600'>
+          <var-decl name='domainname' type-id='5ddd38d2' visibility='default' filepath='include/uapi/linux/utsname.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='520' id='5ddd38d2'>
+        <subrange length='65' type-id='7ff19f0f' id='b50e2e4a'/>
+      </array-type-def>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/async.c' language='LANG_C89'>
+      <typedef-decl name='async_cookie_t' type-id='91ce1af9' filepath='include/linux/async.h' line='16' column='1' id='a7465fe4'/>
+      <typedef-decl name='async_func_t' type-id='56ccc407' filepath='include/linux/async.h' line='17' column='1' id='5c19cb0c'/>
+      <pointer-type-def type-id='8800ed53' size-in-bits='64' id='56ccc407'/>
+      <function-decl name='async_schedule_node' mangled-name='async_schedule_node' filepath='kernel/async.c' line='231' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='async_schedule_node'>
+        <parameter type-id='5c19cb0c' name='func' filepath='kernel/async.c' line='231' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='kernel/async.c' line='231' column='1'/>
+        <parameter type-id='95e97e5e' name='node' filepath='kernel/async.c' line='231' column='1'/>
+        <return type-id='a7465fe4'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='8800ed53'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='a7465fe4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/audit.c' language='LANG_C89'>
+      <function-decl name='netlink_kernel_release' mangled-name='netlink_kernel_release' filepath='include/linux/netlink.h' line='122' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netlink_kernel_release'>
+        <parameter type-id='f772df6e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netlink_capable' mangled-name='netlink_capable' filepath='include/linux/netlink.h' line='249' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netlink_capable'>
+        <parameter type-id='11f4a000'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='netlink_has_listeners' mangled-name='netlink_has_listeners' filepath='include/linux/netlink.h' line='128' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netlink_has_listeners'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/bpf/core.c' language='LANG_C89'>
+      <var-decl name='bpf_stats_enabled_key' type-id='237c0d27' mangled-name='bpf_stats_enabled_key' visibility='default' filepath='kernel/bpf/core.c' line='2118' column='1' elf-symbol-id='bpf_stats_enabled_key'/>
+      <var-decl name='__tracepoint_xdp_exception' type-id='4ca0c298' mangled-name='__tracepoint_xdp_exception' visibility='default' filepath='include/trace/events/xdp.h' line='28' column='1' elf-symbol-id='__tracepoint_xdp_exception'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/bpf/cpumap.c' language='LANG_C89'>
+      <function-decl name='kmem_cache_alloc_bulk' mangled-name='kmem_cache_alloc_bulk' filepath='include/linux/slab.h' line='405' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_alloc_bulk'>
+        <parameter type-id='f3b4aca8'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='63e171df'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/bpf/devmap.c' language='LANG_C89'>
+      <function-decl name='dev_get_by_index' mangled-name='dev_get_by_index' filepath='include/linux/netdevice.h' line='2702' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_get_by_index'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='68a2d05c'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/bpf/offload.c' language='LANG_C89'>
+      <qualified-type-def type-id='984972f4' const='yes' id='3944ca69'/>
+      <pointer-type-def type-id='3944ca69' size-in-bits='64' id='6a4a6779'/>
+      <qualified-type-def type-id='e4c11782' const='yes' id='83967635'/>
+      <pointer-type-def type-id='83967635' size-in-bits='64' id='44dbf2cd'/>
+      <pointer-type-def type-id='0f8b1896' size-in-bits='64' id='33f7eff4'/>
+      <function-decl name='rht_bucket_nested' mangled-name='rht_bucket_nested' filepath='include/linux/rhashtable.h' line='264' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rht_bucket_nested'>
+        <parameter type-id='6a4a6779'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='33f7eff4'/>
+      </function-decl>
+      <function-decl name='rhashtable_init' mangled-name='rhashtable_init' filepath='include/linux/rhashtable-types.h' line='130' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rhashtable_init'>
+        <parameter type-id='e6726ce3'/>
+        <parameter type-id='44dbf2cd'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rhashtable_insert_slow' mangled-name='rhashtable_insert_slow' filepath='include/linux/rhashtable.h' line='242' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rhashtable_insert_slow'>
+        <parameter type-id='e6726ce3'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='3cc8739a'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='rht_bucket_nested_insert' mangled-name='rht_bucket_nested_insert' filepath='include/linux/rhashtable.h' line='268' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rht_bucket_nested_insert'>
+        <parameter type-id='e6726ce3'/>
+        <parameter type-id='35e7a722'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='33f7eff4'/>
+      </function-decl>
+      <pointer-type-def type-id='f68e0adc' size-in-bits='64' id='3cc8739a'/>
+      <pointer-type-def type-id='9e095f93' size-in-bits='64' id='e6726ce3'/>
+      <class-decl name='rhash_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/rhashtable-types.h' line='17' column='1' id='f68e0adc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='3cc8739a' visibility='default' filepath='include/linux/rhashtable-types.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/bpf/syscall.c' language='LANG_C89'>
+      <function-decl name='bpf_prog_add' mangled-name='bpf_prog_add' filepath='kernel/bpf/syscall.c' line='1462' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_prog_add'>
+        <parameter type-id='bdcee7af' name='prog' filepath='kernel/bpf/syscall.c' line='1462' column='1'/>
+        <parameter type-id='95e97e5e' name='i' filepath='kernel/bpf/syscall.c' line='1462' column='1'/>
+        <return type-id='bdcee7af'/>
+      </function-decl>
+      <function-decl name='bpf_prog_sub' mangled-name='bpf_prog_sub' filepath='kernel/bpf/syscall.c' line='1472' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_prog_sub'>
+        <parameter type-id='bdcee7af' name='prog' filepath='kernel/bpf/syscall.c' line='1472' column='1'/>
+        <parameter type-id='95e97e5e' name='i' filepath='kernel/bpf/syscall.c' line='1472' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/cfi.c' language='LANG_C89'>
+      <function-decl name='__cfi_slowpath' mangled-name='__cfi_slowpath' filepath='kernel/cfi.c' line='296' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cfi_slowpath'>
+        <parameter type-id='9c313c2d' name='id' filepath='kernel/cfi.c' line='296' column='1'/>
+        <parameter type-id='eaa32e2f' name='ptr' filepath='kernel/cfi.c' line='296' column='1'/>
+        <parameter type-id='eaa32e2f' name='diag' filepath='kernel/cfi.c' line='296' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__ubsan_handle_cfi_check_fail_abort' mangled-name='__ubsan_handle_cfi_check_fail_abort' filepath='kernel/cfi.c' line='308' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ubsan_handle_cfi_check_fail_abort'>
+        <parameter type-id='eaa32e2f' name='data' filepath='kernel/cfi.c' line='308' column='1'/>
+        <parameter type-id='eaa32e2f' name='ptr' filepath='kernel/cfi.c' line='308' column='1'/>
+        <parameter type-id='eaa32e2f' name='vtable' filepath='kernel/cfi.c' line='308' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/cgroup/cgroup-v1.c' language='LANG_C89'>
+      <class-decl name='fs_parameter_spec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fs_parser.h' line='47' column='1' id='077208d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/fs_parser.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='opt' type-id='f9b06939' visibility='default' filepath='include/linux/fs_parser.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='type' type-id='ef73e3d4' visibility='default' filepath='include/linux/fs_parser.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/linux/fs_parser.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='fs_parameter_type' filepath='include/linux/fs_parser.h' line='23' column='1' id='ef73e3d4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='__fs_param_wasnt_defined' value='0'/>
+        <enumerator name='fs_param_is_flag' value='1'/>
+        <enumerator name='fs_param_is_bool' value='2'/>
+        <enumerator name='fs_param_is_u32' value='3'/>
+        <enumerator name='fs_param_is_u32_octal' value='4'/>
+        <enumerator name='fs_param_is_u32_hex' value='5'/>
+        <enumerator name='fs_param_is_s32' value='6'/>
+        <enumerator name='fs_param_is_u64' value='7'/>
+        <enumerator name='fs_param_is_enum' value='8'/>
+        <enumerator name='fs_param_is_string' value='9'/>
+        <enumerator name='fs_param_is_blob' value='10'/>
+        <enumerator name='fs_param_is_blockdev' value='11'/>
+        <enumerator name='fs_param_is_path' value='12'/>
+        <enumerator name='fs_param_is_fd' value='13'/>
+        <enumerator name='nr__fs_parameter_type' value='14'/>
+      </enum-decl>
+      <class-decl name='fs_parameter_enum' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fs_parser.h' line='58' column='1' id='1a71e14e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='opt' type-id='f9b06939' visibility='default' filepath='include/linux/fs_parser.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='name' type-id='f01a039e' visibility='default' filepath='include/linux/fs_parser.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='value' type-id='f9b06939' visibility='default' filepath='include/linux/fs_parser.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='1a71e14e' const='yes' id='e76b9b35'/>
+      <pointer-type-def type-id='e76b9b35' size-in-bits='64' id='6d6531cd'/>
+      <qualified-type-def type-id='077208d0' const='yes' id='a6f56593'/>
+      <pointer-type-def type-id='a6f56593' size-in-bits='64' id='8d4f223b'/>
+      <function-decl name='logfc' mangled-name='logfc' filepath='include/linux/fs_context.h' line='186' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='logfc'>
+        <parameter type-id='5760dcb1'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/cgroup/cgroup.c' language='LANG_C89'>
+      <pointer-type-def type-id='96650caf' size-in-bits='64' id='08873c53'/>
+      <function-decl name='percpu_ref_init' mangled-name='percpu_ref_init' filepath='include/linux/percpu-refcount.h' line='109' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='percpu_ref_init'>
+        <parameter type-id='60219102'/>
+        <parameter type-id='08873c53'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='percpu_ref_exit' mangled-name='percpu_ref_exit' filepath='include/linux/percpu-refcount.h' line='112' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='percpu_ref_exit'>
+        <parameter type-id='60219102'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='percpu_ref_kill_and_confirm' mangled-name='percpu_ref_kill_and_confirm' filepath='include/linux/percpu-refcount.h' line='117' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='percpu_ref_kill_and_confirm'>
+        <parameter type-id='60219102'/>
+        <parameter type-id='08873c53'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='refcount_dec_not_one' mangled-name='refcount_dec_not_one' filepath='include/linux/refcount.h' line='112' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='refcount_dec_not_one'>
+        <parameter type-id='74c91557'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/compat.c' language='LANG_C89'>
+      <function-decl name='compat_alloc_user_space' mangled-name='compat_alloc_user_space' filepath='kernel/compat.c' line='365' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='compat_alloc_user_space'>
+        <parameter type-id='7359adad' name='len' filepath='kernel/compat.c' line='365' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/configs.c' language='LANG_C89'>
+      <pointer-type-def type-id='1eb56b1e' size-in-bits='64' id='8b97c2dc'/>
+      <function-decl name='remove_proc_entry' mangled-name='remove_proc_entry' filepath='include/linux/proc_fs.h' line='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='remove_proc_entry'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='d077e928'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='proc_create' mangled-name='proc_create' filepath='include/linux/proc_fs.h' line='50' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_create'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='d077e928'/>
+        <parameter type-id='61758ee5'/>
+        <return type-id='d077e928'/>
+      </function-decl>
+      <function-decl name='simple_read_from_buffer' mangled-name='simple_read_from_buffer' filepath='include/linux/fs.h' line='3431' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_read_from_buffer'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='8b97c2dc'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/cpu.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='9cbd1c16' size-in-bits='64' id='afe549fd'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='9cbd1c16' size-in-bits='4160' id='f959706c'>
+        <subrange length='65' type-id='7ff19f0f' id='b50e2e4a'/>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <class-decl name='smp_hotplug_thread' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/smpboot.h' line='31' column='1' id='889a8a64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='store' type-id='afd4c988' visibility='default' filepath='include/linux/smpboot.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/smpboot.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='thread_should_run' type-id='f02a5e83' visibility='default' filepath='include/linux/smpboot.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='thread_fn' type-id='4a84e7de' visibility='default' filepath='include/linux/smpboot.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='create' type-id='4a84e7de' visibility='default' filepath='include/linux/smpboot.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='setup' type-id='4a84e7de' visibility='default' filepath='include/linux/smpboot.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cleanup' type-id='5c86fa1f' visibility='default' filepath='include/linux/smpboot.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='park' type-id='4a84e7de' visibility='default' filepath='include/linux/smpboot.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='unpark' type-id='4a84e7de' visibility='default' filepath='include/linux/smpboot.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='selfparking' type-id='b50a4934' visibility='default' filepath='include/linux/smpboot.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='thread_comm' type-id='80f4b756' visibility='default' filepath='include/linux/smpboot.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='cpuhp_state' filepath='include/linux/cpuhotplug.h' line='25' column='1' id='245a0e38'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='CPUHP_INVALID' value='-1'/>
+        <enumerator name='CPUHP_OFFLINE' value='0'/>
+        <enumerator name='CPUHP_CREATE_THREADS' value='1'/>
+        <enumerator name='CPUHP_PERF_PREPARE' value='2'/>
+        <enumerator name='CPUHP_PERF_X86_PREPARE' value='3'/>
+        <enumerator name='CPUHP_PERF_X86_AMD_UNCORE_PREP' value='4'/>
+        <enumerator name='CPUHP_PERF_POWER' value='5'/>
+        <enumerator name='CPUHP_PERF_SUPERH' value='6'/>
+        <enumerator name='CPUHP_X86_HPET_DEAD' value='7'/>
+        <enumerator name='CPUHP_X86_APB_DEAD' value='8'/>
+        <enumerator name='CPUHP_X86_MCE_DEAD' value='9'/>
+        <enumerator name='CPUHP_VIRT_NET_DEAD' value='10'/>
+        <enumerator name='CPUHP_SLUB_DEAD' value='11'/>
+        <enumerator name='CPUHP_MM_WRITEBACK_DEAD' value='12'/>
+        <enumerator name='CPUHP_MM_VMSTAT_DEAD' value='13'/>
+        <enumerator name='CPUHP_SOFTIRQ_DEAD' value='14'/>
+        <enumerator name='CPUHP_NET_MVNETA_DEAD' value='15'/>
+        <enumerator name='CPUHP_CPUIDLE_DEAD' value='16'/>
+        <enumerator name='CPUHP_ARM64_FPSIMD_DEAD' value='17'/>
+        <enumerator name='CPUHP_ARM_OMAP_WAKE_DEAD' value='18'/>
+        <enumerator name='CPUHP_IRQ_POLL_DEAD' value='19'/>
+        <enumerator name='CPUHP_BLOCK_SOFTIRQ_DEAD' value='20'/>
+        <enumerator name='CPUHP_ACPI_CPUDRV_DEAD' value='21'/>
+        <enumerator name='CPUHP_S390_PFAULT_DEAD' value='22'/>
+        <enumerator name='CPUHP_BLK_MQ_DEAD' value='23'/>
+        <enumerator name='CPUHP_FS_BUFF_DEAD' value='24'/>
+        <enumerator name='CPUHP_PRINTK_DEAD' value='25'/>
+        <enumerator name='CPUHP_MM_MEMCQ_DEAD' value='26'/>
+        <enumerator name='CPUHP_PERCPU_CNT_DEAD' value='27'/>
+        <enumerator name='CPUHP_RADIX_DEAD' value='28'/>
+        <enumerator name='CPUHP_PAGE_ALLOC_DEAD' value='29'/>
+        <enumerator name='CPUHP_NET_DEV_DEAD' value='30'/>
+        <enumerator name='CPUHP_PCI_XGENE_DEAD' value='31'/>
+        <enumerator name='CPUHP_IOMMU_INTEL_DEAD' value='32'/>
+        <enumerator name='CPUHP_LUSTRE_CFS_DEAD' value='33'/>
+        <enumerator name='CPUHP_AP_ARM_CACHE_B15_RAC_DEAD' value='34'/>
+        <enumerator name='CPUHP_PADATA_DEAD' value='35'/>
+        <enumerator name='CPUHP_WORKQUEUE_PREP' value='36'/>
+        <enumerator name='CPUHP_POWER_NUMA_PREPARE' value='37'/>
+        <enumerator name='CPUHP_HRTIMERS_PREPARE' value='38'/>
+        <enumerator name='CPUHP_PROFILE_PREPARE' value='39'/>
+        <enumerator name='CPUHP_X2APIC_PREPARE' value='40'/>
+        <enumerator name='CPUHP_SMPCFD_PREPARE' value='41'/>
+        <enumerator name='CPUHP_RELAY_PREPARE' value='42'/>
+        <enumerator name='CPUHP_SLAB_PREPARE' value='43'/>
+        <enumerator name='CPUHP_MD_RAID5_PREPARE' value='44'/>
+        <enumerator name='CPUHP_RCUTREE_PREP' value='45'/>
+        <enumerator name='CPUHP_CPUIDLE_COUPLED_PREPARE' value='46'/>
+        <enumerator name='CPUHP_POWERPC_PMAC_PREPARE' value='47'/>
+        <enumerator name='CPUHP_POWERPC_MMU_CTX_PREPARE' value='48'/>
+        <enumerator name='CPUHP_XEN_PREPARE' value='49'/>
+        <enumerator name='CPUHP_XEN_EVTCHN_PREPARE' value='50'/>
+        <enumerator name='CPUHP_ARM_SHMOBILE_SCU_PREPARE' value='51'/>
+        <enumerator name='CPUHP_SH_SH3X_PREPARE' value='52'/>
+        <enumerator name='CPUHP_NET_FLOW_PREPARE' value='53'/>
+        <enumerator name='CPUHP_TOPOLOGY_PREPARE' value='54'/>
+        <enumerator name='CPUHP_NET_IUCV_PREPARE' value='55'/>
+        <enumerator name='CPUHP_ARM_BL_PREPARE' value='56'/>
+        <enumerator name='CPUHP_TRACE_RB_PREPARE' value='57'/>
+        <enumerator name='CPUHP_MM_ZS_PREPARE' value='58'/>
+        <enumerator name='CPUHP_MM_ZSWP_MEM_PREPARE' value='59'/>
+        <enumerator name='CPUHP_MM_ZSWP_POOL_PREPARE' value='60'/>
+        <enumerator name='CPUHP_KVM_PPC_BOOK3S_PREPARE' value='61'/>
+        <enumerator name='CPUHP_ZCOMP_PREPARE' value='62'/>
+        <enumerator name='CPUHP_TIMERS_PREPARE' value='63'/>
+        <enumerator name='CPUHP_MIPS_SOC_PREPARE' value='64'/>
+        <enumerator name='CPUHP_BP_PREPARE_DYN' value='65'/>
+        <enumerator name='CPUHP_BP_PREPARE_DYN_END' value='85'/>
+        <enumerator name='CPUHP_BRINGUP_CPU' value='86'/>
+        <enumerator name='CPUHP_AP_IDLE_DEAD' value='87'/>
+        <enumerator name='CPUHP_AP_OFFLINE' value='88'/>
+        <enumerator name='CPUHP_AP_SCHED_STARTING' value='89'/>
+        <enumerator name='CPUHP_AP_RCUTREE_DYING' value='90'/>
+        <enumerator name='CPUHP_AP_IRQ_GIC_STARTING' value='91'/>
+        <enumerator name='CPUHP_AP_IRQ_HIP04_STARTING' value='92'/>
+        <enumerator name='CPUHP_AP_IRQ_ARMADA_XP_STARTING' value='93'/>
+        <enumerator name='CPUHP_AP_IRQ_BCM2836_STARTING' value='94'/>
+        <enumerator name='CPUHP_AP_IRQ_MIPS_GIC_STARTING' value='95'/>
+        <enumerator name='CPUHP_AP_ARM_MVEBU_COHERENCY' value='96'/>
+        <enumerator name='CPUHP_AP_MICROCODE_LOADER' value='97'/>
+        <enumerator name='CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING' value='98'/>
+        <enumerator name='CPUHP_AP_PERF_X86_STARTING' value='99'/>
+        <enumerator name='CPUHP_AP_PERF_X86_AMD_IBS_STARTING' value='100'/>
+        <enumerator name='CPUHP_AP_PERF_X86_CQM_STARTING' value='101'/>
+        <enumerator name='CPUHP_AP_PERF_X86_CSTATE_STARTING' value='102'/>
+        <enumerator name='CPUHP_AP_PERF_XTENSA_STARTING' value='103'/>
+        <enumerator name='CPUHP_AP_MIPS_OP_LOONGSON3_STARTING' value='104'/>
+        <enumerator name='CPUHP_AP_ARM_SDEI_STARTING' value='105'/>
+        <enumerator name='CPUHP_AP_ARM_VFP_STARTING' value='106'/>
+        <enumerator name='CPUHP_AP_ARM64_DEBUG_MONITORS_STARTING' value='107'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_HW_BREAKPOINT_STARTING' value='108'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_ACPI_STARTING' value='109'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_STARTING' value='110'/>
+        <enumerator name='CPUHP_AP_ARM_L2X0_STARTING' value='111'/>
+        <enumerator name='CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING' value='112'/>
+        <enumerator name='CPUHP_AP_ARM_ARCH_TIMER_STARTING' value='113'/>
+        <enumerator name='CPUHP_AP_ARM_GLOBAL_TIMER_STARTING' value='114'/>
+        <enumerator name='CPUHP_AP_JCORE_TIMER_STARTING' value='115'/>
+        <enumerator name='CPUHP_AP_ARM_TWD_STARTING' value='116'/>
+        <enumerator name='CPUHP_AP_QCOM_TIMER_STARTING' value='117'/>
+        <enumerator name='CPUHP_AP_TEGRA_TIMER_STARTING' value='118'/>
+        <enumerator name='CPUHP_AP_ARMADA_TIMER_STARTING' value='119'/>
+        <enumerator name='CPUHP_AP_MARCO_TIMER_STARTING' value='120'/>
+        <enumerator name='CPUHP_AP_MIPS_GIC_TIMER_STARTING' value='121'/>
+        <enumerator name='CPUHP_AP_ARC_TIMER_STARTING' value='122'/>
+        <enumerator name='CPUHP_AP_RISCV_TIMER_STARTING' value='123'/>
+        <enumerator name='CPUHP_AP_CSKY_TIMER_STARTING' value='124'/>
+        <enumerator name='CPUHP_AP_KVM_STARTING' value='125'/>
+        <enumerator name='CPUHP_AP_KVM_ARM_VGIC_INIT_STARTING' value='126'/>
+        <enumerator name='CPUHP_AP_KVM_ARM_VGIC_STARTING' value='127'/>
+        <enumerator name='CPUHP_AP_KVM_ARM_TIMER_STARTING' value='128'/>
+        <enumerator name='CPUHP_AP_DUMMY_TIMER_STARTING' value='129'/>
+        <enumerator name='CPUHP_AP_ARM_XEN_STARTING' value='130'/>
+        <enumerator name='CPUHP_AP_ARM_CORESIGHT_STARTING' value='131'/>
+        <enumerator name='CPUHP_AP_ARM64_ISNDEP_STARTING' value='132'/>
+        <enumerator name='CPUHP_AP_SMPCFD_DYING' value='133'/>
+        <enumerator name='CPUHP_AP_X86_TBOOT_DYING' value='134'/>
+        <enumerator name='CPUHP_AP_ARM_CACHE_B15_RAC_DYING' value='135'/>
+        <enumerator name='CPUHP_AP_ONLINE' value='136'/>
+        <enumerator name='CPUHP_TEARDOWN_CPU' value='137'/>
+        <enumerator name='CPUHP_AP_ONLINE_IDLE' value='138'/>
+        <enumerator name='CPUHP_AP_SMPBOOT_THREADS' value='139'/>
+        <enumerator name='CPUHP_AP_X86_VDSO_VMA_ONLINE' value='140'/>
+        <enumerator name='CPUHP_AP_IRQ_AFFINITY_ONLINE' value='141'/>
+        <enumerator name='CPUHP_AP_ARM_MVEBU_SYNC_CLOCKS' value='142'/>
+        <enumerator name='CPUHP_AP_X86_INTEL_EPB_ONLINE' value='143'/>
+        <enumerator name='CPUHP_AP_PERF_ONLINE' value='144'/>
+        <enumerator name='CPUHP_AP_PERF_X86_ONLINE' value='145'/>
+        <enumerator name='CPUHP_AP_PERF_X86_UNCORE_ONLINE' value='146'/>
+        <enumerator name='CPUHP_AP_PERF_X86_AMD_UNCORE_ONLINE' value='147'/>
+        <enumerator name='CPUHP_AP_PERF_X86_AMD_POWER_ONLINE' value='148'/>
+        <enumerator name='CPUHP_AP_PERF_X86_RAPL_ONLINE' value='149'/>
+        <enumerator name='CPUHP_AP_PERF_X86_CQM_ONLINE' value='150'/>
+        <enumerator name='CPUHP_AP_PERF_X86_CSTATE_ONLINE' value='151'/>
+        <enumerator name='CPUHP_AP_PERF_S390_CF_ONLINE' value='152'/>
+        <enumerator name='CPUHP_AP_PERF_S390_SF_ONLINE' value='153'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_CCI_ONLINE' value='154'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_CCN_ONLINE' value='155'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE' value='156'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_HISI_HHA_ONLINE' value='157'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_HISI_L3_ONLINE' value='158'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_L2X0_ONLINE' value='159'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE' value='160'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_QCOM_L3_ONLINE' value='161'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_APM_XGENE_ONLINE' value='162'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_CAVIUM_TX2_UNCORE_ONLINE' value='163'/>
+        <enumerator name='CPUHP_AP_PERF_POWERPC_NEST_IMC_ONLINE' value='164'/>
+        <enumerator name='CPUHP_AP_PERF_POWERPC_CORE_IMC_ONLINE' value='165'/>
+        <enumerator name='CPUHP_AP_PERF_POWERPC_THREAD_IMC_ONLINE' value='166'/>
+        <enumerator name='CPUHP_AP_PERF_POWERPC_TRACE_IMC_ONLINE' value='167'/>
+        <enumerator name='CPUHP_AP_WATCHDOG_ONLINE' value='168'/>
+        <enumerator name='CPUHP_AP_WORKQUEUE_ONLINE' value='169'/>
+        <enumerator name='CPUHP_AP_RCUTREE_ONLINE' value='170'/>
+        <enumerator name='CPUHP_AP_BASE_CACHEINFO_ONLINE' value='171'/>
+        <enumerator name='CPUHP_AP_ONLINE_DYN' value='172'/>
+        <enumerator name='CPUHP_AP_ONLINE_DYN_END' value='202'/>
+        <enumerator name='CPUHP_AP_X86_HPET_ONLINE' value='203'/>
+        <enumerator name='CPUHP_AP_X86_KVM_CLK_ONLINE' value='204'/>
+        <enumerator name='CPUHP_AP_ACTIVE' value='205'/>
+        <enumerator name='CPUHP_ONLINE' value='206'/>
+      </enum-decl>
+      <pointer-type-def type-id='db7d07ef' size-in-bits='64' id='f02a5e83'/>
+      <pointer-type-def type-id='889a8a64' size-in-bits='64' id='150fd0b2'/>
+      <pointer-type-def type-id='f23e2572' size-in-bits='64' id='afd4c988'/>
+      <pointer-type-def type-id='32ca6abb' size-in-bits='64' id='5c86fa1f'/>
+      <var-decl name='cpu_bit_bitmap' type-id='f959706c' mangled-name='cpu_bit_bitmap' visibility='default' filepath='kernel/cpu.c' line='2310' column='1' elf-symbol-id='cpu_bit_bitmap'/>
+      <var-decl name='cpu_all_bits' type-id='afe549fd' mangled-name='cpu_all_bits' visibility='default' filepath='kernel/cpu.c' line='2321' column='1' elf-symbol-id='cpu_all_bits'/>
+      <var-decl name='cpuhp_tasks_frozen' type-id='b50a4934' mangled-name='cpuhp_tasks_frozen' visibility='default' filepath='kernel/cpu.c' line='264' column='1' elf-symbol-id='cpuhp_tasks_frozen'/>
+      <var-decl name='__cpu_possible_mask' type-id='1354385d' mangled-name='__cpu_possible_mask' visibility='default' filepath='kernel/cpu.c' line='2328' column='1' elf-symbol-id='__cpu_possible_mask'/>
+      <var-decl name='__cpu_online_mask' type-id='1354385d' mangled-name='__cpu_online_mask' visibility='default' filepath='kernel/cpu.c' line='2332' column='1' elf-symbol-id='__cpu_online_mask'/>
+      <var-decl name='__cpu_present_mask' type-id='1354385d' mangled-name='__cpu_present_mask' visibility='default' filepath='kernel/cpu.c' line='2335' column='1' elf-symbol-id='__cpu_present_mask'/>
+      <var-decl name='__cpu_active_mask' type-id='1354385d' mangled-name='__cpu_active_mask' visibility='default' filepath='kernel/cpu.c' line='2338' column='1' elf-symbol-id='__cpu_active_mask'/>
+      <var-decl name='__num_online_cpus' type-id='49178f86' mangled-name='__num_online_cpus' visibility='default' filepath='kernel/cpu.c' line='2341' column='1' elf-symbol-id='__num_online_cpus'/>
+      <function-decl name='bpf_trace_run5' mangled-name='bpf_trace_run5' filepath='include/linux/trace_events.h' line='611' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run5'>
+        <parameter type-id='bdcee7ae'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='3a47d82b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='smpboot_register_percpu_thread' mangled-name='smpboot_register_percpu_thread' filepath='include/linux/smpboot.h' line='45' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='smpboot_register_percpu_thread'>
+        <parameter type-id='150fd0b2'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kthread_unpark' mangled-name='kthread_unpark' filepath='include/linux/kthread.h' line='66' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_unpark'>
+        <parameter type-id='f23e2572'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpu_down' mangled-name='cpu_down' filepath='kernel/cpu.c' line='1074' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpu_down'>
+        <parameter type-id='f0981eeb' name='cpu' filepath='kernel/cpu.c' line='1074' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpu_up' mangled-name='cpu_up' filepath='kernel/cpu.c' line='1226' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpu_up'>
+        <parameter type-id='f0981eeb' name='cpu' filepath='kernel/cpu.c' line='1226' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__cpuhp_state_add_instance' mangled-name='__cpuhp_state_add_instance' filepath='kernel/cpu.c' line='1746' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cpuhp_state_add_instance'>
+        <parameter type-id='245a0e38' name='state' filepath='kernel/cpu.c' line='1746' column='1'/>
+        <parameter type-id='08cbad52' name='node' filepath='kernel/cpu.c' line='1746' column='1'/>
+        <parameter type-id='b50a4934' name='invoke' filepath='kernel/cpu.c' line='1747' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__cpuhp_setup_state_cpuslocked' mangled-name='__cpuhp_setup_state_cpuslocked' filepath='kernel/cpu.c' line='1775' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cpuhp_setup_state_cpuslocked'>
+        <parameter type-id='245a0e38' name='state' filepath='kernel/cpu.c' line='1775' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/cpu.c' line='1776' column='1'/>
+        <parameter type-id='b50a4934' name='invoke' filepath='kernel/cpu.c' line='1776' column='1'/>
+        <parameter type-id='f02a5e83' name='startup' filepath='kernel/cpu.c' line='1777' column='1'/>
+        <parameter type-id='f02a5e83' name='teardown' filepath='kernel/cpu.c' line='1778' column='1'/>
+        <parameter type-id='b50a4934' name='multi_instance' filepath='kernel/cpu.c' line='1779' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__cpuhp_setup_state' mangled-name='__cpuhp_setup_state' filepath='kernel/cpu.c' line='1834' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cpuhp_setup_state'>
+        <parameter type-id='245a0e38' name='state' filepath='kernel/cpu.c' line='1834' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/cpu.c' line='1835' column='1'/>
+        <parameter type-id='b50a4934' name='invoke' filepath='kernel/cpu.c' line='1835' column='1'/>
+        <parameter type-id='f02a5e83' name='startup' filepath='kernel/cpu.c' line='1836' column='1'/>
+        <parameter type-id='f02a5e83' name='teardown' filepath='kernel/cpu.c' line='1837' column='1'/>
+        <parameter type-id='b50a4934' name='multi_instance' filepath='kernel/cpu.c' line='1838' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__cpuhp_state_remove_instance' mangled-name='__cpuhp_state_remove_instance' filepath='kernel/cpu.c' line='1850' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cpuhp_state_remove_instance'>
+        <parameter type-id='245a0e38' name='state' filepath='kernel/cpu.c' line='1850' column='1'/>
+        <parameter type-id='08cbad52' name='node' filepath='kernel/cpu.c' line='1851' column='1'/>
+        <parameter type-id='b50a4934' name='invoke' filepath='kernel/cpu.c' line='1851' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__cpuhp_remove_state' mangled-name='__cpuhp_remove_state' filepath='kernel/cpu.c' line='1936' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cpuhp_remove_state'>
+        <parameter type-id='245a0e38' name='state' filepath='kernel/cpu.c' line='1936' column='1'/>
+        <parameter type-id='b50a4934' name='invoke' filepath='kernel/cpu.c' line='1936' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='db7d07ef'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='32ca6abb'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/cpu_pm.c' language='LANG_C89'>
+      <function-decl name='cpu_pm_unregister_notifier' mangled-name='cpu_pm_unregister_notifier' filepath='kernel/cpu_pm.c' line='60' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpu_pm_unregister_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='kernel/cpu_pm.c' line='60' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/cred.c' language='LANG_C89'>
+      <function-decl name='__put_cred' mangled-name='__put_cred' filepath='kernel/cred.c' line='132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__put_cred'>
+        <parameter type-id='10cfb911' name='cred' filepath='kernel/cred.c' line='132' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/dma/contiguous.c' language='LANG_C89'>
+      <qualified-type-def type-id='a25ce1be' const='yes' id='3d71d2d7'/>
+      <pointer-type-def type-id='3d71d2d7' size-in-bits='64' id='b72f2447'/>
+      <var-decl name='dma_contiguous_default_area' type-id='6f67b38a' mangled-name='dma_contiguous_default_area' visibility='default' filepath='kernel/dma/contiguous.c' line='33' column='1' elf-symbol-id='dma_contiguous_default_area'/>
+      <function-decl name='cma_alloc' mangled-name='cma_alloc' filepath='include/linux/cma.h' line='35' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cma_alloc'>
+        <parameter type-id='6f67b38a'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='02f11ed4'/>
+      </function-decl>
+      <function-decl name='cma_release' mangled-name='cma_release' filepath='include/linux/cma.h' line='37' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cma_release'>
+        <parameter type-id='6f67b38a'/>
+        <parameter type-id='b72f2447'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/dma/direct.c' language='LANG_C89'>
+      <function-decl name='dma_direct_sync_sg_for_device' mangled-name='dma_direct_sync_sg_for_device' filepath='kernel/dma/direct.c' line='242' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_direct_sync_sg_for_device'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/direct.c' line='242' column='1'/>
+        <parameter type-id='bf3ef905' name='sgl' filepath='kernel/dma/direct.c' line='243' column='1'/>
+        <parameter type-id='95e97e5e' name='nents' filepath='kernel/dma/direct.c' line='243' column='1'/>
+        <parameter type-id='eea6b025' name='dir' filepath='kernel/dma/direct.c' line='243' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_direct_sync_sg_for_cpu' mangled-name='dma_direct_sync_sg_for_cpu' filepath='kernel/dma/direct.c' line='281' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_direct_sync_sg_for_cpu'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/direct.c' line='281' column='1'/>
+        <parameter type-id='bf3ef905' name='sgl' filepath='kernel/dma/direct.c' line='282' column='1'/>
+        <parameter type-id='95e97e5e' name='nents' filepath='kernel/dma/direct.c' line='282' column='1'/>
+        <parameter type-id='eea6b025' name='dir' filepath='kernel/dma/direct.c' line='282' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_direct_map_resource' mangled-name='dma_direct_map_resource' filepath='kernel/dma/direct.c' line='377' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_direct_map_resource'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/direct.c' line='377' column='1'/>
+        <parameter type-id='2522883d' name='paddr' filepath='kernel/dma/direct.c' line='377' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='kernel/dma/direct.c' line='378' column='1'/>
+        <parameter type-id='eea6b025' name='dir' filepath='kernel/dma/direct.c' line='378' column='1'/>
+        <parameter type-id='7359adad' name='attrs' filepath='kernel/dma/direct.c' line='378' column='1'/>
+        <return type-id='cf29c9b3'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/dma/mapping.c' language='LANG_C89'>
+      <function-decl name='dmam_free_coherent' mangled-name='dmam_free_coherent' filepath='kernel/dma/mapping.c' line='57' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dmam_free_coherent'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/mapping.c' line='57' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='kernel/dma/mapping.c' line='57' column='1'/>
+        <parameter type-id='eaa32e2f' name='vaddr' filepath='kernel/dma/mapping.c' line='57' column='1'/>
+        <parameter type-id='cf29c9b3' name='dma_handle' filepath='kernel/dma/mapping.c' line='58' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dmam_alloc_attrs' mangled-name='dmam_alloc_attrs' filepath='kernel/dma/mapping.c' line='81' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dmam_alloc_attrs'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/mapping.c' line='81' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='kernel/dma/mapping.c' line='81' column='1'/>
+        <parameter type-id='e835b5d8' name='dma_handle' filepath='kernel/dma/mapping.c' line='81' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='kernel/dma/mapping.c' line='82' column='1'/>
+        <parameter type-id='7359adad' name='attrs' filepath='kernel/dma/mapping.c' line='82' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='dma_get_sgtable_attrs' mangled-name='dma_get_sgtable_attrs' filepath='kernel/dma/mapping.c' line='151' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_get_sgtable_attrs'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/mapping.c' line='151' column='1'/>
+        <parameter type-id='4adb0e6a' name='sgt' filepath='kernel/dma/mapping.c' line='151' column='1'/>
+        <parameter type-id='eaa32e2f' name='cpu_addr' filepath='kernel/dma/mapping.c' line='152' column='1'/>
+        <parameter type-id='cf29c9b3' name='dma_addr' filepath='kernel/dma/mapping.c' line='152' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='kernel/dma/mapping.c' line='152' column='1'/>
+        <parameter type-id='7359adad' name='attrs' filepath='kernel/dma/mapping.c' line='153' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='remap_pfn_range' mangled-name='remap_pfn_range' filepath='include/linux/mm.h' line='2635' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='remap_pfn_range'>
+        <parameter type-id='2ae08426'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='051883a9'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_mmap_attrs' mangled-name='dma_mmap_attrs' filepath='kernel/dma/mapping.c' line='263' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_mmap_attrs'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/mapping.c' line='263' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='kernel/dma/mapping.c' line='263' column='1'/>
+        <parameter type-id='eaa32e2f' name='cpu_addr' filepath='kernel/dma/mapping.c' line='264' column='1'/>
+        <parameter type-id='cf29c9b3' name='dma_addr' filepath='kernel/dma/mapping.c' line='264' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='kernel/dma/mapping.c' line='264' column='1'/>
+        <parameter type-id='7359adad' name='attrs' filepath='kernel/dma/mapping.c' line='265' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_max_mapping_size' mangled-name='dma_max_mapping_size' filepath='kernel/dma/mapping.c' line='419' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_max_mapping_size'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/mapping.c' line='419' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='dma_get_merge_boundary' mangled-name='dma_get_merge_boundary' filepath='kernel/dma/mapping.c' line='433' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_get_merge_boundary'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/mapping.c' line='433' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/dma/remap.c' language='LANG_C89'>
+      <typedef-decl name='genpool_algo_t' type-id='f54ae583' filepath='include/linux/genalloc.h' line='48' column='1' id='00278b91'/>
+      <pointer-type-def type-id='713ac427' size-in-bits='64' id='f54ae583'/>
+      <function-decl name='gen_pool_create' mangled-name='gen_pool_create' filepath='include/linux/genalloc.h' line='96' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_create'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='75b9415a'/>
+      </function-decl>
+      <function-decl name='gen_pool_add_owner' mangled-name='gen_pool_add_owner' filepath='include/linux/genalloc.h' line='98' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_add_owner'>
+        <parameter type-id='75b9415a'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='3a47d82b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gen_pool_set_algo' mangled-name='gen_pool_set_algo' filepath='include/linux/genalloc.h' line='180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_set_algo'>
+        <parameter type-id='75b9415a'/>
+        <parameter type-id='f54ae583'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gen_pool_destroy' mangled-name='gen_pool_destroy' filepath='include/linux/genalloc.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_destroy'>
+        <parameter type-id='75b9415a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gen_pool_alloc_algo_owner' mangled-name='gen_pool_alloc_algo_owner' filepath='include/linux/genalloc.h' line='125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_alloc_algo_owner'>
+        <parameter type-id='75b9415a'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f54ae583'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='63e171df'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='gen_pool_virt_to_phys' mangled-name='gen_pool_virt_to_phys' filepath='include/linux/genalloc.h' line='97' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_virt_to_phys'>
+        <parameter type-id='75b9415a'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='3a47d82b'/>
+      </function-decl>
+      <function-decl name='gen_pool_free_owner' mangled-name='gen_pool_free_owner' filepath='include/linux/genalloc.h' line='167' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_free_owner'>
+        <parameter type-id='75b9415a'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='63e171df'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='713ac427'>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='75b9415a'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/dma/swiotlb.c' language='LANG_C89'>
+      <function-decl name='swiotlb_max_segment' mangled-name='swiotlb_max_segment' filepath='kernel/dma/swiotlb.c' line='140' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='swiotlb_max_segment'>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/events/core.c' language='LANG_C89'>
+      <function-decl name='bus_register' mangled-name='bus_register' filepath='include/linux/device.h' line='163' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bus_register'>
+        <parameter type-id='5e2671f8'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/events/ring_buffer.c' language='LANG_C89'>
+      <function-decl name='split_page' mangled-name='split_page' filepath='include/linux/mm.h' line='848' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='split_page'>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/events/uprobes.c' language='LANG_C89'>
+      <class-decl name='capture_control' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/events/../../mm/internal.h' line='212' column='1' id='978e8e28'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cc' type-id='cdea3372' visibility='default' filepath='kernel/events/../../mm/internal.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='page' type-id='02f11ed4' visibility='default' filepath='kernel/events/../../mm/internal.h' line='214' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='compact_control' size-in-bits='1024' is-struct='yes' visibility='default' filepath='kernel/events/../../mm/internal.h' line='180' column='1' id='16773614'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='freepages' type-id='72f469ec' visibility='default' filepath='kernel/events/../../mm/internal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='migratepages' type-id='72f469ec' visibility='default' filepath='kernel/events/../../mm/internal.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nr_freepages' type-id='f0981eeb' visibility='default' filepath='kernel/events/../../mm/internal.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='nr_migratepages' type-id='f0981eeb' visibility='default' filepath='kernel/events/../../mm/internal.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='free_pfn' type-id='7359adad' visibility='default' filepath='kernel/events/../../mm/internal.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='migrate_pfn' type-id='7359adad' visibility='default' filepath='kernel/events/../../mm/internal.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fast_start_pfn' type-id='7359adad' visibility='default' filepath='kernel/events/../../mm/internal.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='zone' type-id='0a0aff97' visibility='default' filepath='kernel/events/../../mm/internal.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='total_migrate_scanned' type-id='7359adad' visibility='default' filepath='kernel/events/../../mm/internal.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='total_free_scanned' type-id='7359adad' visibility='default' filepath='kernel/events/../../mm/internal.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fast_search_fail' type-id='8efea9e5' visibility='default' filepath='kernel/events/../../mm/internal.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='720'>
+          <var-decl name='search_order' type-id='a2185560' visibility='default' filepath='kernel/events/../../mm/internal.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='gfp_mask' type-id='96d7cfec' visibility='default' filepath='kernel/events/../../mm/internal.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='order' type-id='95e97e5e' visibility='default' filepath='kernel/events/../../mm/internal.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='migratetype' type-id='95e97e5e' visibility='default' filepath='kernel/events/../../mm/internal.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='alloc_flags' type-id='20f5f452' visibility='default' filepath='kernel/events/../../mm/internal.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='classzone_idx' type-id='2448a865' visibility='default' filepath='kernel/events/../../mm/internal.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='mode' type-id='157252dd' visibility='default' filepath='kernel/events/../../mm/internal.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='ignore_skip_hint' type-id='b50a4934' visibility='default' filepath='kernel/events/../../mm/internal.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='936'>
+          <var-decl name='no_set_skip_hint' type-id='b50a4934' visibility='default' filepath='kernel/events/../../mm/internal.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='944'>
+          <var-decl name='ignore_block_suitable' type-id='b50a4934' visibility='default' filepath='kernel/events/../../mm/internal.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='952'>
+          <var-decl name='direct_compaction' type-id='b50a4934' visibility='default' filepath='kernel/events/../../mm/internal.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='whole_zone' type-id='b50a4934' visibility='default' filepath='kernel/events/../../mm/internal.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='968'>
+          <var-decl name='contended' type-id='b50a4934' visibility='default' filepath='kernel/events/../../mm/internal.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='rescan' type-id='b50a4934' visibility='default' filepath='kernel/events/../../mm/internal.h' line='205' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uprobe_consumer' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/uprobes.h' line='36' column='1' id='fdd49c5f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='handler' type-id='37058a7f' visibility='default' filepath='include/linux/uprobes.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ret_handler' type-id='529ca3c5' visibility='default' filepath='include/linux/uprobes.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='filter' type-id='c6810324' visibility='default' filepath='include/linux/uprobes.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='af0533e7' visibility='default' filepath='include/linux/uprobes.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='uprobe_filter_ctx' filepath='include/linux/uprobes.h' line='30' column='1' id='2840efdc'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UPROBE_FILTER_REGISTER' value='0'/>
+        <enumerator name='UPROBE_FILTER_UNREGISTER' value='1'/>
+        <enumerator name='UPROBE_FILTER_MMAP' value='2'/>
+      </enum-decl>
+      <class-decl name='arch_uprobe' size-in-bits='384' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/uprobes.h' line='24' column='1' id='0b6ba789'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='e021ecb2' visibility='default' filepath='arch/arm64/include/asm/uprobes.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='api' type-id='f21a6717' visibility='default' filepath='arch/arm64/include/asm/uprobes.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='simulate' type-id='b50a4934' visibility='default' filepath='arch/arm64/include/asm/uprobes.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__10' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/uprobes.h' line='25' column='1' id='e021ecb2'>
+        <data-member access='private'>
+          <var-decl name='insn' type-id='931565be' visibility='default' filepath='arch/arm64/include/asm/uprobes.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ixol' type-id='931565be' visibility='default' filepath='arch/arm64/include/asm/uprobes.h' line='27' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='arch_probe_insn' size-in-bits='256' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/probes.h' line='14' column='1' id='f21a6717'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='insn' type-id='0abee587' visibility='default' filepath='arch/arm64/include/asm/probes.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pstate_cc' type-id='452b34c2' visibility='default' filepath='arch/arm64/include/asm/probes.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='handler' type-id='0e87d404' visibility='default' filepath='arch/arm64/include/asm/probes.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='restore' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/probes.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='probe_opcode_t' type-id='19c2251e' filepath='arch/arm64/include/asm/probes.h' line='10' column='1' id='170c8692'/>
+      <typedef-decl name='pstate_check_t' type-id='b21b8f21' filepath='arch/arm64/include/asm/insn.h' line='477' column='1' id='470b0e09'/>
+      <typedef-decl name='probes_handler_t' type-id='ae26a81a' filepath='arch/arm64/include/asm/probes.h' line='11' column='1' id='34a2420f'/>
+      <pointer-type-def type-id='978e8e28' size-in-bits='64' id='f8866970'/>
+      <pointer-type-def type-id='16773614' size-in-bits='64' id='cdea3372'/>
+      <qualified-type-def type-id='3eb7c31c' const='yes' id='96d7cfec'/>
+      <qualified-type-def type-id='95e97e5e' const='yes' id='2448a865'/>
+      <pointer-type-def type-id='f1bc64d3' size-in-bits='64' id='37058a7f'/>
+      <pointer-type-def type-id='c387f6d1' size-in-bits='64' id='529ca3c5'/>
+      <pointer-type-def type-id='170c8692' size-in-bits='64' id='0abee587'/>
+      <pointer-type-def type-id='34a2420f' size-in-bits='64' id='0e87d404'/>
+      <pointer-type-def type-id='470b0e09' size-in-bits='64' id='452b34c2'/>
+      <pointer-type-def type-id='c02bc58a' size-in-bits='64' id='c6810324'/>
+      <pointer-type-def type-id='fdd49c5f' size-in-bits='64' id='af0533e7'/>
+      <function-decl name='get_user_pages_remote' mangled-name='get_user_pages_remote' filepath='include/linux/mm.h' line='1613' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_user_pages_remote'>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='df4b7819'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='9f93c9da'/>
+        <parameter type-id='8b6fdee4'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='mm_trace_rss_stat' mangled-name='mm_trace_rss_stat' filepath='include/linux/mm.h' line='1739' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mm_trace_rss_stat'>
+        <parameter type-id='df4b7819'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='bd54fe1a'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rb_prev' mangled-name='rb_prev' filepath='include/linux/rbtree.h' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rb_prev'>
+        <parameter type-id='47b73425'/>
+        <return type-id='e6532500'/>
+      </function-decl>
+      <function-decl name='shmem_read_mapping_page_gfp' mangled-name='shmem_read_mapping_page_gfp' filepath='include/linux/shmem_fs.h' line='74' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='shmem_read_mapping_page_gfp'>
+        <parameter type-id='f57039f0'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='02f11ed4'/>
+      </function-decl>
+      <pointer-type-def type-id='8552664d' size-in-bits='64' id='47b73425'/>
+      <function-type size-in-bits='64' id='f1bc64d3'>
+        <parameter type-id='af0533e7'/>
+        <parameter type-id='4616a179'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c387f6d1'>
+        <parameter type-id='af0533e7'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='4616a179'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b21b8f21'>
+        <parameter type-id='7359adad'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c02bc58a'>
+        <parameter type-id='af0533e7'/>
+        <parameter type-id='2840efdc'/>
+        <parameter type-id='df4b7819'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ae26a81a'>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='bd54fe1a'/>
+        <parameter type-id='4616a179'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <qualified-type-def type-id='2a8a6332' const='yes' id='8552664d'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/exit.c' language='LANG_C89'>
+      <function-decl name='blocking_notifier_call_chain' mangled-name='blocking_notifier_call_chain' filepath='include/linux/notifier.h' line='170' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blocking_notifier_call_chain'>
+        <parameter type-id='282b7312'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='complete_and_exit' mangled-name='complete_and_exit' filepath='kernel/exit.c' line='868' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='complete_and_exit'>
+        <parameter type-id='389faaf7' name='comp' filepath='kernel/exit.c' line='868' column='1'/>
+        <parameter type-id='bd54fe1a' name='code' filepath='kernel/exit.c' line='868' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/fork.c' language='LANG_C89'>
+      <function-decl name='__mmdrop' mangled-name='__mmdrop' filepath='kernel/fork.c' line='689' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__mmdrop'>
+        <parameter type-id='df4b7819' name='mm' filepath='kernel/fork.c' line='689' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__put_task_struct' mangled-name='__put_task_struct' filepath='kernel/fork.c' line='738' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__put_task_struct'>
+        <parameter type-id='f23e2572' name='tsk' filepath='kernel/fork.c' line='738' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmput' mangled-name='mmput' filepath='kernel/fork.c' line='1105' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmput'>
+        <parameter type-id='df4b7819' name='mm' filepath='kernel/fork.c' line='1105' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='get_task_exe_file' mangled-name='get_task_exe_file' filepath='kernel/fork.c' line='1187' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_task_exe_file'>
+        <parameter type-id='f23e2572' name='task' filepath='kernel/fork.c' line='1187' column='1'/>
+        <return type-id='77e79a4b'/>
+      </function-decl>
+      <function-decl name='get_task_mm' mangled-name='get_task_mm' filepath='kernel/fork.c' line='1212' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_task_mm'>
+        <parameter type-id='f23e2572' name='task' filepath='kernel/fork.c' line='1212' column='1'/>
+        <return type-id='df4b7819'/>
+      </function-decl>
+      <function-decl name='pid_task' mangled-name='pid_task' filepath='include/linux/pid.h' line='87' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pid_task'>
+        <parameter type-id='b94e5398'/>
+        <parameter type-id='ce78cf46'/>
+        <return type-id='f23e2572'/>
+      </function-decl>
+      <function-decl name='_raw_write_lock_irq' mangled-name='_raw_write_lock_irq' filepath='include/linux/rwlock_api_smp.h' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_write_lock_irq'>
+        <parameter type-id='8567d8b1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_write_unlock_irq' mangled-name='_raw_write_unlock_irq' filepath='include/linux/rwlock_api_smp.h' line='35' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_write_unlock_irq'>
+        <parameter type-id='8567d8b1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='wait_for_completion_killable' mangled-name='wait_for_completion_killable' filepath='include/linux/completion.h' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wait_for_completion_killable'>
+        <parameter type-id='389faaf7'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='freezing_slow_path' mangled-name='freezing_slow_path' filepath='include/linux/freezer.h' line='30' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='freezing_slow_path'>
+        <parameter type-id='f23e2572'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/freezer.c' language='LANG_C89'>
+      <var-decl name='system_freezing_cnt' type-id='49178f86' mangled-name='system_freezing_cnt' visibility='default' filepath='kernel/freezer.c' line='16' column='1' elf-symbol-id='system_freezing_cnt'/>
+      <function-decl name='__refrigerator' mangled-name='__refrigerator' filepath='kernel/freezer.c' line='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__refrigerator'>
+        <parameter type-id='b50a4934' name='check_kthr_stop' filepath='kernel/freezer.c' line='56' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/futex.c' language='LANG_C89'>
+      <function-decl name='get_user_pages_fast' mangled-name='get_user_pages_fast' filepath='include/linux/mm.h' line='1625' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_user_pages_fast'>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='9f93c9da'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unlock_page' mangled-name='unlock_page' filepath='include/linux/pagemap.h' line='465' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unlock_page'>
+        <parameter type-id='02f11ed4'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/groups.c' language='LANG_C89'>
+      <function-decl name='in_egroup_p' mangled-name='in_egroup_p' filepath='kernel/groups.c' line='231' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='in_egroup_p'>
+        <parameter type-id='094d8048' name='grp' filepath='kernel/groups.c' line='231' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/irq/chip.c' language='LANG_C89'>
+      <function-decl name='irq_set_handler_data' mangled-name='irq_set_handler_data' filepath='kernel/irq/chip.c' line='91' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_handler_data'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/chip.c' line='91' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='kernel/irq/chip.c' line='91' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='handle_nested_irq' mangled-name='handle_nested_irq' filepath='kernel/irq/chip.c' line='459' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='handle_nested_irq'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/chip.c' line='459' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='handle_simple_irq' mangled-name='handle_simple_irq' filepath='kernel/irq/chip.c' line='553' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='handle_simple_irq'>
+        <parameter type-id='76c7d88b' name='desc' filepath='kernel/irq/chip.c' line='553' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='handle_level_irq' mangled-name='handle_level_irq' filepath='kernel/irq/chip.c' line='645' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='handle_level_irq'>
+        <parameter type-id='76c7d88b' name='desc' filepath='kernel/irq/chip.c' line='645' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='handle_fasteoi_irq' mangled-name='handle_fasteoi_irq' filepath='kernel/irq/chip.c' line='714' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='handle_fasteoi_irq'>
+        <parameter type-id='76c7d88b' name='desc' filepath='kernel/irq/chip.c' line='714' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='handle_edge_irq' mangled-name='handle_edge_irq' filepath='kernel/irq/chip.c' line='801' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='handle_edge_irq'>
+        <parameter type-id='76c7d88b' name='desc' filepath='kernel/irq/chip.c' line='801' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_chip_set_parent_state' mangled-name='irq_chip_set_parent_state' filepath='kernel/irq/chip.c' line='1324' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_set_parent_state'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1324' column='1'/>
+        <parameter type-id='0187da1b' name='which' filepath='kernel/irq/chip.c' line='1325' column='1'/>
+        <parameter type-id='b50a4934' name='val' filepath='kernel/irq/chip.c' line='1326' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_chip_get_parent_state' mangled-name='irq_chip_get_parent_state' filepath='kernel/irq/chip.c' line='1346' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_get_parent_state'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1346' column='1'/>
+        <parameter type-id='0187da1b' name='which' filepath='kernel/irq/chip.c' line='1347' column='1'/>
+        <parameter type-id='d8e6b335' name='state' filepath='kernel/irq/chip.c' line='1348' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_chip_enable_parent' mangled-name='irq_chip_enable_parent' filepath='kernel/irq/chip.c' line='1364' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_enable_parent'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1364' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_chip_disable_parent' mangled-name='irq_chip_disable_parent' filepath='kernel/irq/chip.c' line='1379' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_disable_parent'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1379' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_chip_ack_parent' mangled-name='irq_chip_ack_parent' filepath='kernel/irq/chip.c' line='1393' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_ack_parent'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1393' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_chip_eoi_parent' mangled-name='irq_chip_eoi_parent' filepath='kernel/irq/chip.c' line='1437' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_eoi_parent'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1437' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_chip_set_affinity_parent' mangled-name='irq_chip_set_affinity_parent' filepath='kernel/irq/chip.c' line='1452' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_set_affinity_parent'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1452' column='1'/>
+        <parameter type-id='5f8a1ac4' name='dest' filepath='kernel/irq/chip.c' line='1453' column='1'/>
+        <parameter type-id='b50a4934' name='force' filepath='kernel/irq/chip.c' line='1453' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_chip_set_type_parent' mangled-name='irq_chip_set_type_parent' filepath='kernel/irq/chip.c' line='1470' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_set_type_parent'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1470' column='1'/>
+        <parameter type-id='f0981eeb' name='type' filepath='kernel/irq/chip.c' line='1470' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_chip_retrigger_hierarchy' mangled-name='irq_chip_retrigger_hierarchy' filepath='kernel/irq/chip.c' line='1488' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_retrigger_hierarchy'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1488' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_chip_set_vcpu_affinity_parent' mangled-name='irq_chip_set_vcpu_affinity_parent' filepath='kernel/irq/chip.c' line='1503' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_set_vcpu_affinity_parent'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1503' column='1'/>
+        <parameter type-id='eaa32e2f' name='vcpu_info' filepath='kernel/irq/chip.c' line='1503' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_chip_set_wake_parent' mangled-name='irq_chip_set_wake_parent' filepath='kernel/irq/chip.c' line='1519' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_set_wake_parent'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1519' column='1'/>
+        <parameter type-id='f0981eeb' name='on' filepath='kernel/irq/chip.c' line='1519' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/irq/handle.c' language='LANG_C89'>
+      <function-decl name='handle_bad_irq' mangled-name='handle_bad_irq' filepath='kernel/irq/handle.c' line='31' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='handle_bad_irq'>
+        <parameter type-id='76c7d88b' name='desc' filepath='kernel/irq/handle.c' line='31' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/irq/irqdesc.c' language='LANG_C89'>
+      <qualified-type-def type-id='bab69d9a' const='yes' id='cc519b49'/>
+      <pointer-type-def type-id='cc519b49' size-in-bits='64' id='07779cd9'/>
+      <pointer-type-def type-id='d39738ac' size-in-bits='64' id='60075f2a'/>
+      <var-decl name='nr_irqs' type-id='95e97e5e' mangled-name='nr_irqs' visibility='default' filepath='kernel/irq/irqdesc.c' line='130' column='1' elf-symbol-id='nr_irqs'/>
+      <function-decl name='radix_tree_insert' mangled-name='radix_tree_insert' filepath='include/linux/radix-tree.h' line='207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='radix_tree_insert'>
+        <parameter type-id='60075f2a'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__irq_alloc_descs' mangled-name='__irq_alloc_descs' filepath='kernel/irq/irqdesc.c' line='766' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__irq_alloc_descs'>
+        <parameter type-id='95e97e5e' name='irq' filepath='kernel/irq/irqdesc.c' line='766' column='1'/>
+        <parameter type-id='f0981eeb' name='from' filepath='kernel/irq/irqdesc.c' line='766' column='1'/>
+        <parameter type-id='f0981eeb' name='cnt' filepath='kernel/irq/irqdesc.c' line='766' column='1'/>
+        <parameter type-id='95e97e5e' name='node' filepath='kernel/irq/irqdesc.c' line='766' column='1'/>
+        <parameter type-id='2730d016' name='owner' filepath='kernel/irq/irqdesc.c' line='767' column='1'/>
+        <parameter type-id='07779cd9' name='affinity' filepath='kernel/irq/irqdesc.c' line='767' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bitmap_find_next_zero_area_off' mangled-name='bitmap_find_next_zero_area_off' filepath='include/linux/bitmap.h' line='149' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bitmap_find_next_zero_area_off'>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/irq/irqdomain.c' language='LANG_C89'>
+      <pointer-type-def type-id='88370ce9' size-in-bits='64' id='ebc26324'/>
+      <function-decl name='__irq_domain_add' mangled-name='__irq_domain_add' filepath='kernel/irq/irqdomain.c' line='130' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__irq_domain_add'>
+        <parameter type-id='4a935625' name='fwnode' filepath='kernel/irq/irqdomain.c' line='130' column='1'/>
+        <parameter type-id='95e97e5e' name='size' filepath='kernel/irq/irqdomain.c' line='130' column='1'/>
+        <parameter type-id='88370ce9' name='hwirq_max' filepath='kernel/irq/irqdomain.c' line='131' column='1'/>
+        <parameter type-id='95e97e5e' name='direct_max' filepath='kernel/irq/irqdomain.c' line='131' column='1'/>
+        <parameter type-id='2c202856' name='ops' filepath='kernel/irq/irqdomain.c' line='132' column='1'/>
+        <parameter type-id='eaa32e2f' name='host_data' filepath='kernel/irq/irqdomain.c' line='133' column='1'/>
+        <return type-id='7544e825'/>
+      </function-decl>
+      <function-decl name='irq_create_of_mapping' mangled-name='irq_create_of_mapping' filepath='kernel/irq/irqdomain.c' line='856' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_create_of_mapping'>
+        <parameter type-id='51a94113' name='irq_data' filepath='kernel/irq/irqdomain.c' line='856' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='irq_domain_xlate_onecell' mangled-name='irq_domain_xlate_onecell' filepath='kernel/irq/irqdomain.c' line='931' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_xlate_onecell'>
+        <parameter type-id='7544e825' name='d' filepath='kernel/irq/irqdomain.c' line='931' column='1'/>
+        <parameter type-id='9a537bbe' name='ctrlr' filepath='kernel/irq/irqdomain.c' line='931' column='1'/>
+        <parameter type-id='aded214c' name='intspec' filepath='kernel/irq/irqdomain.c' line='932' column='1'/>
+        <parameter type-id='f0981eeb' name='intsize' filepath='kernel/irq/irqdomain.c' line='932' column='1'/>
+        <parameter type-id='1d2c2b85' name='out_hwirq' filepath='kernel/irq/irqdomain.c' line='933' column='1'/>
+        <parameter type-id='807869d3' name='out_type' filepath='kernel/irq/irqdomain.c' line='933' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_domain_xlate_twocell' mangled-name='irq_domain_xlate_twocell' filepath='kernel/irq/irqdomain.c' line='950' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_xlate_twocell'>
+        <parameter type-id='7544e825' name='d' filepath='kernel/irq/irqdomain.c' line='950' column='1'/>
+        <parameter type-id='9a537bbe' name='ctrlr' filepath='kernel/irq/irqdomain.c' line='950' column='1'/>
+        <parameter type-id='aded214c' name='intspec' filepath='kernel/irq/irqdomain.c' line='951' column='1'/>
+        <parameter type-id='f0981eeb' name='intsize' filepath='kernel/irq/irqdomain.c' line='951' column='1'/>
+        <parameter type-id='ebc26324' name='out_hwirq' filepath='kernel/irq/irqdomain.c' line='952' column='1'/>
+        <parameter type-id='807869d3' name='out_type' filepath='kernel/irq/irqdomain.c' line='952' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_domain_xlate_onetwocell' mangled-name='irq_domain_xlate_onetwocell' filepath='kernel/irq/irqdomain.c' line='972' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_xlate_onetwocell'>
+        <parameter type-id='7544e825' name='d' filepath='kernel/irq/irqdomain.c' line='972' column='1'/>
+        <parameter type-id='9a537bbe' name='ctrlr' filepath='kernel/irq/irqdomain.c' line='973' column='1'/>
+        <parameter type-id='aded214c' name='intspec' filepath='kernel/irq/irqdomain.c' line='974' column='1'/>
+        <parameter type-id='f0981eeb' name='intsize' filepath='kernel/irq/irqdomain.c' line='974' column='1'/>
+        <parameter type-id='1d2c2b85' name='out_hwirq' filepath='kernel/irq/irqdomain.c' line='975' column='1'/>
+        <parameter type-id='807869d3' name='out_type' filepath='kernel/irq/irqdomain.c' line='975' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_domain_create_hierarchy' mangled-name='irq_domain_create_hierarchy' filepath='kernel/irq/irqdomain.c' line='1053' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_create_hierarchy'>
+        <parameter type-id='7544e825' name='parent' filepath='kernel/irq/irqdomain.c' line='1053' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='kernel/irq/irqdomain.c' line='1054' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='kernel/irq/irqdomain.c' line='1055' column='1'/>
+        <parameter type-id='4a935625' name='fwnode' filepath='kernel/irq/irqdomain.c' line='1056' column='1'/>
+        <parameter type-id='2c202856' name='ops' filepath='kernel/irq/irqdomain.c' line='1057' column='1'/>
+        <parameter type-id='eaa32e2f' name='host_data' filepath='kernel/irq/irqdomain.c' line='1058' column='1'/>
+        <return type-id='7544e825'/>
+      </function-decl>
+      <function-decl name='irq_domain_free_irqs_common' mangled-name='irq_domain_free_irqs_common' filepath='kernel/irq/irqdomain.c' line='1255' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_free_irqs_common'>
+        <parameter type-id='7544e825' name='domain' filepath='kernel/irq/irqdomain.c' line='1255' column='1'/>
+        <parameter type-id='f0981eeb' name='virq' filepath='kernel/irq/irqdomain.c' line='1255' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_irqs' filepath='kernel/irq/irqdomain.c' line='1256' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_domain_free_irqs_parent' mangled-name='irq_domain_free_irqs_parent' filepath='kernel/irq/irqdomain.c' line='1609' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_free_irqs_parent'>
+        <parameter type-id='7544e825' name='domain' filepath='kernel/irq/irqdomain.c' line='1609' column='1'/>
+        <parameter type-id='f0981eeb' name='irq_base' filepath='kernel/irq/irqdomain.c' line='1610' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_irqs' filepath='kernel/irq/irqdomain.c' line='1610' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_domain_alloc_irqs_parent' mangled-name='irq_domain_alloc_irqs_parent' filepath='kernel/irq/irqdomain.c' line='1589' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_alloc_irqs_parent'>
+        <parameter type-id='7544e825' name='domain' filepath='kernel/irq/irqdomain.c' line='1589' column='1'/>
+        <parameter type-id='f0981eeb' name='irq_base' filepath='kernel/irq/irqdomain.c' line='1590' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_irqs' filepath='kernel/irq/irqdomain.c' line='1590' column='1'/>
+        <parameter type-id='eaa32e2f' name='arg' filepath='kernel/irq/irqdomain.c' line='1591' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/irq/manage.c' language='LANG_C89'>
+      <function-decl name='synchronize_hardirq' mangled-name='synchronize_hardirq' filepath='kernel/irq/manage.c' line='98' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='synchronize_hardirq'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='98' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='synchronize_irq' mangled-name='synchronize_irq' filepath='kernel/irq/manage.c' line='126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='synchronize_irq'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='126' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_set_affinity_hint' mangled-name='irq_set_affinity_hint' filepath='kernel/irq/manage.c' line='350' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_affinity_hint'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='350' column='1'/>
+        <parameter type-id='5f8a1ac4' name='m' filepath='kernel/irq/manage.c' line='350' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_set_affinity_notifier' mangled-name='irq_set_affinity_notifier' filepath='kernel/irq/manage.c' line='403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_affinity_notifier'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='403' column='1'/>
+        <parameter type-id='7ca8e198' name='notify' filepath='kernel/irq/manage.c' line='403' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_set_parent' mangled-name='irq_set_parent' filepath='kernel/irq/manage.c' line='849' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_parent'>
+        <parameter type-id='95e97e5e' name='irq' filepath='kernel/irq/manage.c' line='849' column='1'/>
+        <parameter type-id='95e97e5e' name='parent_irq' filepath='kernel/irq/manage.c' line='849' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='setup_irq' mangled-name='setup_irq' filepath='kernel/irq/manage.c' line='1691' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='setup_irq'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='1691' column='1'/>
+        <parameter type-id='ba361e53' name='act' filepath='kernel/irq/manage.c' line='1691' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='proc_remove' mangled-name='proc_remove' filepath='include/linux/proc_fs.h' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_remove'>
+        <parameter type-id='d077e928'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__request_percpu_irq' mangled-name='__request_percpu_irq' filepath='kernel/irq/manage.c' line='2452' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__request_percpu_irq'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='2452' column='1'/>
+        <parameter type-id='29591c9a' name='handler' filepath='kernel/irq/manage.c' line='2452' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='kernel/irq/manage.c' line='2453' column='1'/>
+        <parameter type-id='80f4b756' name='devname' filepath='kernel/irq/manage.c' line='2453' column='1'/>
+        <parameter type-id='eaa32e2f' name='dev_id' filepath='kernel/irq/manage.c' line='2454' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/kallsyms.c' language='LANG_C89'>
+      <function-decl name='sprint_symbol' mangled-name='sprint_symbol' filepath='kernel/kallsyms.c' line='435' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sprint_symbol'>
+        <parameter type-id='26a90f95' name='buffer' filepath='kernel/kallsyms.c' line='435' column='1'/>
+        <parameter type-id='7359adad' name='address' filepath='kernel/kallsyms.c' line='435' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/kheaders.c' language='LANG_C89'>
+      <qualified-type-def type-id='d83a2db1' const='yes' id='dbce337a'/>
+      <pointer-type-def type-id='dbce337a' size-in-bits='64' id='559ac6f0'/>
+      <function-decl name='sysfs_remove_bin_file' mangled-name='sysfs_remove_bin_file' filepath='include/linux/sysfs.h' line='259' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_remove_bin_file'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='559ac6f0'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sysfs_create_bin_file' mangled-name='sysfs_create_bin_file' filepath='include/linux/sysfs.h' line='257' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_create_bin_file'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='559ac6f0'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/kmod.c' language='LANG_C89'>
+      <function-decl name='__request_module' mangled-name='__request_module' filepath='kernel/kmod.c' line='125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__request_module'>
+        <parameter type-id='b50a4934' name='wait' filepath='kernel/kmod.c' line='125' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='kernel/kmod.c' line='125' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/ksysfs.c' language='LANG_C89'>
+      <var-decl name='kernel_kobj' type-id='d30bdc51' mangled-name='kernel_kobj' visibility='default' filepath='kernel/ksysfs.c' line='208' column='1' elf-symbol-id='kernel_kobj'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/kthread.c' language='LANG_C89'>
+      <class-decl name='sched_param' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/sched/types.h' line='7' column='1' id='0897719a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sched_priority' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/sched/types.h' line='8' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kthread_worker' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/kthread.h' line='89' column='1' id='62968721'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/kthread.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/kthread.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='work_list' type-id='72f469ec' visibility='default' filepath='include/linux/kthread.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='delayed_work_list' type-id='72f469ec' visibility='default' filepath='include/linux/kthread.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/kthread.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='current_work' type-id='401eb95c' visibility='default' filepath='include/linux/kthread.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kthread_work' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/kthread.h' line='98' column='1' id='ac165296'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/kthread.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='func' type-id='a785c7fd' visibility='default' filepath='include/linux/kthread.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='worker' type-id='c41f4539' visibility='default' filepath='include/linux/kthread.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='canceling' type-id='95e97e5e' visibility='default' filepath='include/linux/kthread.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='kthread_work_func_t' type-id='2a5d0ea1' filepath='include/linux/kthread.h' line='82' column='1' id='a785c7fd'/>
+      <class-decl name='kthread_delayed_work' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/kthread.h' line='106' column='1' id='8fb867c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ac165296' visibility='default' filepath='include/linux/kthread.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/linux/kthread.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='0897719a' const='yes' id='c4a7b189'/>
+      <pointer-type-def type-id='c4a7b189' size-in-bits='64' id='36fca399'/>
+      <pointer-type-def type-id='8fb867c9' size-in-bits='64' id='d56697f1'/>
+      <pointer-type-def type-id='ac165296' size-in-bits='64' id='401eb95c'/>
+      <pointer-type-def type-id='62968721' size-in-bits='64' id='c41f4539'/>
+      <pointer-type-def type-id='38d1cb6d' size-in-bits='64' id='2a5d0ea1'/>
+      <function-decl name='kthread_should_park' mangled-name='kthread_should_park' filepath='kernel/kthread.c' line='124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_should_park'>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='kthread_freezable_should_stop' mangled-name='kthread_freezable_should_stop' filepath='kernel/kthread.c' line='139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_freezable_should_stop'>
+        <parameter type-id='d8e6b335' name='was_frozen' filepath='kernel/kthread.c' line='139' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='sched_setscheduler_nocheck' mangled-name='sched_setscheduler_nocheck' filepath='include/linux/sched.h' line='1650' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sched_setscheduler_nocheck'>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='36fca399'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kthread_bind' mangled-name='kthread_bind' filepath='kernel/kthread.c' line='443' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_bind'>
+        <parameter type-id='f23e2572' name='p' filepath='kernel/kthread.c' line='443' column='1'/>
+        <parameter type-id='f0981eeb' name='cpu' filepath='kernel/kthread.c' line='443' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__kthread_init_worker' mangled-name='__kthread_init_worker' filepath='kernel/kthread.c' line='644' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kthread_init_worker'>
+        <parameter type-id='c41f4539' name='worker' filepath='kernel/kthread.c' line='644' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/kthread.c' line='645' column='1'/>
+        <parameter type-id='a57283f9' name='key' filepath='kernel/kthread.c' line='646' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kthread_worker_fn' mangled-name='kthread_worker_fn' filepath='kernel/kthread.c' line='671' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_worker_fn'>
+        <parameter type-id='eaa32e2f' name='worker_ptr' filepath='kernel/kthread.c' line='671' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='set_freezable' mangled-name='set_freezable' filepath='include/linux/freezer.h' line='71' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_freezable'>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='kthread_create_worker' mangled-name='kthread_create_worker' filepath='kernel/kthread.c' line='764' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_create_worker'>
+        <parameter type-id='f0981eeb' name='flags' filepath='kernel/kthread.c' line='764' column='1'/>
+        <parameter type-id='80f4b756' name='namefmt' filepath='kernel/kthread.c' line='764' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='c41f4539'/>
+      </function-decl>
+      <function-decl name='kthread_queue_work' mangled-name='kthread_queue_work' filepath='kernel/kthread.c' line='856' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_queue_work'>
+        <parameter type-id='c41f4539' name='worker' filepath='kernel/kthread.c' line='856' column='1'/>
+        <parameter type-id='401eb95c' name='work' filepath='kernel/kthread.c' line='857' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='kthread_delayed_work_timer_fn' mangled-name='kthread_delayed_work_timer_fn' filepath='kernel/kthread.c' line='880' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_delayed_work_timer_fn'>
+        <parameter type-id='9248e67f' name='t' filepath='kernel/kthread.c' line='880' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kthread_queue_delayed_work' mangled-name='kthread_queue_delayed_work' filepath='kernel/kthread.c' line='954' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_queue_delayed_work'>
+        <parameter type-id='c41f4539' name='worker' filepath='kernel/kthread.c' line='954' column='1'/>
+        <parameter type-id='d56697f1' name='dwork' filepath='kernel/kthread.c' line='955' column='1'/>
+        <parameter type-id='7359adad' name='delay' filepath='kernel/kthread.c' line='956' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='kthread_flush_work' mangled-name='kthread_flush_work' filepath='kernel/kthread.c' line='992' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_flush_work'>
+        <parameter type-id='401eb95c' name='work' filepath='kernel/kthread.c' line='992' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kthread_mod_delayed_work' mangled-name='kthread_mod_delayed_work' filepath='kernel/kthread.c' line='1091' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_mod_delayed_work'>
+        <parameter type-id='c41f4539' name='worker' filepath='kernel/kthread.c' line='1091' column='1'/>
+        <parameter type-id='d56697f1' name='dwork' filepath='kernel/kthread.c' line='1092' column='1'/>
+        <parameter type-id='7359adad' name='delay' filepath='kernel/kthread.c' line='1093' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='kthread_cancel_work_sync' mangled-name='kthread_cancel_work_sync' filepath='kernel/kthread.c' line='1171' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_cancel_work_sync'>
+        <parameter type-id='401eb95c' name='work' filepath='kernel/kthread.c' line='1171' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='kthread_cancel_delayed_work_sync' mangled-name='kthread_cancel_delayed_work_sync' filepath='kernel/kthread.c' line='1186' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_cancel_delayed_work_sync'>
+        <parameter type-id='d56697f1' name='dwork' filepath='kernel/kthread.c' line='1186' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='kthread_flush_worker' mangled-name='kthread_flush_worker' filepath='kernel/kthread.c' line='1199' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_flush_worker'>
+        <parameter type-id='c41f4539' name='worker' filepath='kernel/kthread.c' line='1199' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kthread_destroy_worker' mangled-name='kthread_destroy_worker' filepath='kernel/kthread.c' line='1219' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_destroy_worker'>
+        <parameter type-id='c41f4539' name='worker' filepath='kernel/kthread.c' line='1219' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='38d1cb6d'>
+        <parameter type-id='401eb95c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/locking/mutex.c' language='LANG_C89'>
+      <enum-decl name='mutex_trylock_recursive_enum' filepath='include/linux/mutex.h' line='192' column='1' id='9a6ea243'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MUTEX_TRYLOCK_FAILED' value='0'/>
+        <enumerator name='MUTEX_TRYLOCK_SUCCESS' value='1'/>
+        <enumerator name='MUTEX_TRYLOCK_RECURSIVE' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='45793a97' size-in-bits='64' id='7533ba6f'/>
+      <function-decl name='__mutex_init' mangled-name='__mutex_init' filepath='kernel/locking/mutex.c' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__mutex_init'>
+        <parameter type-id='e0ea832a' name='lock' filepath='kernel/locking/mutex.c' line='42' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/locking/mutex.c' line='42' column='1'/>
+        <parameter type-id='a57283f9' name='key' filepath='kernel/locking/mutex.c' line='42' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mutex_trylock_recursive' mangled-name='mutex_trylock_recursive' filepath='kernel/locking/mutex.c' line='92' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_trylock_recursive'>
+        <parameter type-id='e0ea832a' name='lock' filepath='kernel/locking/mutex.c' line='92' column='1'/>
+        <return type-id='9a6ea243'/>
+      </function-decl>
+      <function-decl name='ww_mutex_unlock' mangled-name='ww_mutex_unlock' filepath='kernel/locking/mutex.c' line='757' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ww_mutex_unlock'>
+        <parameter type-id='7533ba6f' name='lock' filepath='kernel/locking/mutex.c' line='757' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ww_mutex_lock' mangled-name='ww_mutex_lock' filepath='kernel/locking/mutex.c' line='1433' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ww_mutex_lock'>
+        <parameter type-id='7533ba6f' name='lock' filepath='kernel/locking/mutex.c' line='1433' column='1'/>
+        <parameter type-id='c1d02a64' name='ctx' filepath='kernel/locking/mutex.c' line='1433' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ww_mutex_lock_interruptible' mangled-name='ww_mutex_lock_interruptible' filepath='kernel/locking/mutex.c' line='1448' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ww_mutex_lock_interruptible'>
+        <parameter type-id='7533ba6f' name='lock' filepath='kernel/locking/mutex.c' line='1448' column='1'/>
+        <parameter type-id='c1d02a64' name='ctx' filepath='kernel/locking/mutex.c' line='1448' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/locking/rtmutex.c' language='LANG_C89'>
+      <pointer-type-def type-id='dd823037' size-in-bits='64' id='3992a90f'/>
+      <function-decl name='rt_mutex_trylock' mangled-name='rt_mutex_trylock' filepath='kernel/locking/rtmutex.c' line='1581' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rt_mutex_trylock'>
+        <parameter type-id='3992a90f' name='lock' filepath='kernel/locking/rtmutex.c' line='1581' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/locking/rwsem.c' language='LANG_C89'>
+      <function-decl name='__init_rwsem' mangled-name='__init_rwsem' filepath='kernel/locking/rwsem.c' line='327' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__init_rwsem'>
+        <parameter type-id='9b58df93' name='sem' filepath='kernel/locking/rwsem.c' line='327' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/locking/rwsem.c' line='327' column='1'/>
+        <parameter type-id='a57283f9' name='key' filepath='kernel/locking/rwsem.c' line='328' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='downgrade_write' mangled-name='downgrade_write' filepath='kernel/locking/rwsem.c' line='1643' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='downgrade_write'>
+        <parameter type-id='9b58df93' name='sem' filepath='kernel/locking/rwsem.c' line='1643' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/locking/semaphore.c' language='LANG_C89'>
+      <function-decl name='down_interruptible' mangled-name='down_interruptible' filepath='kernel/locking/semaphore.c' line='75' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='down_interruptible'>
+        <parameter type-id='a965a5b5' name='sem' filepath='kernel/locking/semaphore.c' line='75' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='down_trylock' mangled-name='down_trylock' filepath='kernel/locking/semaphore.c' line='130' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='down_trylock'>
+        <parameter type-id='a965a5b5' name='sem' filepath='kernel/locking/semaphore.c' line='130' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='down_timeout' mangled-name='down_timeout' filepath='kernel/locking/semaphore.c' line='155' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='down_timeout'>
+        <parameter type-id='a965a5b5' name='sem' filepath='kernel/locking/semaphore.c' line='155' column='1'/>
+        <parameter type-id='bd54fe1a' name='timeout' filepath='kernel/locking/semaphore.c' line='155' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/locking/spinlock.c' language='LANG_C89'>
+      <pointer-type-def type-id='f5c90b3f' size-in-bits='64' id='704982b4'/>
+      <pointer-type-def type-id='ac16795b' size-in-bits='64' id='6a6de1b0'/>
+      <function-decl name='_raw_spin_trylock_bh' mangled-name='_raw_spin_trylock_bh' filepath='kernel/locking/spinlock.c' line='141' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_trylock_bh'>
+        <parameter type-id='704982b4' name='lock' filepath='kernel/locking/spinlock.c' line='141' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='_raw_read_lock_irqsave' mangled-name='_raw_read_lock_irqsave' filepath='kernel/locking/spinlock.c' line='229' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_read_lock_irqsave'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='229' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='_raw_read_lock_irq' mangled-name='_raw_read_lock_irq' filepath='kernel/locking/spinlock.c' line='237' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_read_lock_irq'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='237' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_read_unlock_irqrestore' mangled-name='_raw_read_unlock_irqrestore' filepath='kernel/locking/spinlock.c' line='261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_read_unlock_irqrestore'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='261' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='kernel/locking/spinlock.c' line='261' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_read_unlock_irq' mangled-name='_raw_read_unlock_irq' filepath='kernel/locking/spinlock.c' line='269' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_read_unlock_irq'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='269' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_write_lock_irqsave' mangled-name='_raw_write_lock_irqsave' filepath='kernel/locking/spinlock.c' line='301' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_write_lock_irqsave'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='301' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='_raw_write_unlock_irqrestore' mangled-name='_raw_write_unlock_irqrestore' filepath='kernel/locking/spinlock.c' line='333' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_write_unlock_irqrestore'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='333' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='kernel/locking/spinlock.c' line='333' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/module.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='d83a2db1' size-in-bits='infinite' id='7cfae8e1'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='def413c9' size-in-bits='infinite' id='ae08da59'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='module_sect_attr' size-in-bits='512' is-struct='yes' visibility='default' filepath='kernel/module.c' line='1538' column='1' id='def413c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='battr' type-id='d83a2db1' visibility='default' filepath='kernel/module.c' line='1539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='address' type-id='7359adad' visibility='default' filepath='kernel/module.c' line='1540' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='modversion_info' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='36' column='1' id='68a2869e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crc' type-id='7359adad' visibility='default' filepath='include/linux/module.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='6093ff7c' visibility='default' filepath='include/linux/module.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9493d3c9' size-in-bits='64' id='eefd7061'/>
+      <pointer-type-def type-id='68a2869e' size-in-bits='64' id='3a498c74'/>
+      <pointer-type-def type-id='d2d812d1' size-in-bits='64' id='e525e121'/>
+      <function-decl name='__module_get' mangled-name='__module_get' filepath='kernel/module.c' line='1117' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__module_get'>
+        <parameter type-id='2730d015' name='module' filepath='kernel/module.c' line='1117' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='module_layout' mangled-name='module_layout' filepath='kernel/module.c' line='4616' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='module_layout'>
+        <parameter type-id='2730d015' name='mod' filepath='kernel/module.c' line='4616' column='1'/>
+        <parameter type-id='3a498c74' name='ver' filepath='kernel/module.c' line='4617' column='1'/>
+        <parameter type-id='a7c6e908' name='kp' filepath='kernel/module.c' line='4618' column='1'/>
+        <parameter type-id='eefd7061' name='ks' filepath='kernel/module.c' line='4619' column='1'/>
+        <parameter type-id='e525e121' name='tp' filepath='kernel/module.c' line='4620' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sysfs_remove_link' mangled-name='sysfs_remove_link' filepath='include/linux/sysfs.h' line='267' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_remove_link'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sysfs_create_link' mangled-name='sysfs_create_link' filepath='include/linux/sysfs.h' line='262' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_create_link'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/notifier.c' language='LANG_C89'>
+      <class-decl name='raw_notifier_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='70' column='1' id='96e74f5f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='d504f73d' visibility='default' filepath='include/linux/notifier.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='96e74f5f' size-in-bits='64' id='dc20ab67'/>
+      <pointer-type-def type-id='ffc4a47a' size-in-bits='64' id='b2cb1838'/>
+      <function-decl name='srcu_init_notifier_head' mangled-name='srcu_init_notifier_head' filepath='kernel/notifier.c' line='528' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='srcu_init_notifier_head'>
+        <parameter type-id='b2cb1838' name='nh' filepath='kernel/notifier.c' line='528' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='raw_notifier_chain_register' mangled-name='raw_notifier_chain_register' filepath='kernel/notifier.c' line='352' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='raw_notifier_chain_register'>
+        <parameter type-id='dc20ab67' name='nh' filepath='kernel/notifier.c' line='352' column='1'/>
+        <parameter type-id='d504f73d' name='n' filepath='kernel/notifier.c' line='353' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='raw_notifier_chain_unregister' mangled-name='raw_notifier_chain_unregister' filepath='kernel/notifier.c' line='369' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='raw_notifier_chain_unregister'>
+        <parameter type-id='dc20ab67' name='nh' filepath='kernel/notifier.c' line='369' column='1'/>
+        <parameter type-id='d504f73d' name='n' filepath='kernel/notifier.c' line='370' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__raw_notifier_call_chain' mangled-name='__raw_notifier_call_chain' filepath='kernel/notifier.c' line='395' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__raw_notifier_call_chain'>
+        <parameter type-id='dc20ab67' name='nh' filepath='kernel/notifier.c' line='395' column='1'/>
+        <parameter type-id='7359adad' name='val' filepath='kernel/notifier.c' line='396' column='1'/>
+        <parameter type-id='eaa32e2f' name='v' filepath='kernel/notifier.c' line='396' column='1'/>
+        <parameter type-id='95e97e5e' name='nr_to_call' filepath='kernel/notifier.c' line='397' column='1'/>
+        <parameter type-id='7292109c' name='nr_calls' filepath='kernel/notifier.c' line='397' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='raw_notifier_call_chain' mangled-name='raw_notifier_call_chain' filepath='kernel/notifier.c' line='403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='raw_notifier_call_chain'>
+        <parameter type-id='dc20ab67' name='nh' filepath='kernel/notifier.c' line='403' column='1'/>
+        <parameter type-id='7359adad' name='val' filepath='kernel/notifier.c' line='404' column='1'/>
+        <parameter type-id='eaa32e2f' name='v' filepath='kernel/notifier.c' line='404' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='srcu_notifier_chain_register' mangled-name='srcu_notifier_chain_register' filepath='kernel/notifier.c' line='426' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='srcu_notifier_chain_register'>
+        <parameter type-id='b2cb1838' name='nh' filepath='kernel/notifier.c' line='426' column='1'/>
+        <parameter type-id='d504f73d' name='n' filepath='kernel/notifier.c' line='427' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='srcu_notifier_chain_unregister' mangled-name='srcu_notifier_chain_unregister' filepath='kernel/notifier.c' line='456' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='srcu_notifier_chain_unregister'>
+        <parameter type-id='b2cb1838' name='nh' filepath='kernel/notifier.c' line='456' column='1'/>
+        <parameter type-id='d504f73d' name='n' filepath='kernel/notifier.c' line='457' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='srcu_notifier_call_chain' mangled-name='srcu_notifier_call_chain' filepath='kernel/notifier.c' line='509' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='srcu_notifier_call_chain'>
+        <parameter type-id='b2cb1838' name='nh' filepath='kernel/notifier.c' line='509' column='1'/>
+        <parameter type-id='7359adad' name='val' filepath='kernel/notifier.c' line='510' column='1'/>
+        <parameter type-id='eaa32e2f' name='v' filepath='kernel/notifier.c' line='510' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='register_die_notifier' mangled-name='register_die_notifier' filepath='kernel/notifier.c' line='558' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_die_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='kernel/notifier.c' line='558' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/panic.c' language='LANG_C89'>
+      <class-decl name='__va_list' size-in-bits='256' is-struct='yes' visibility='default' filepath='kernel/panic.c' line='170' column='1' id='5f919c1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__stack' type-id='eaa32e2f' visibility='default' filepath='kernel/panic.c' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='__gr_top' type-id='eaa32e2f' visibility='default' filepath='kernel/panic.c' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__vr_top' type-id='eaa32e2f' visibility='default' filepath='kernel/panic.c' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='__gr_offs' type-id='95e97e5e' visibility='default' filepath='kernel/panic.c' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='__vr_offs' type-id='95e97e5e' visibility='default' filepath='kernel/panic.c' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+      <var-decl name='panic_timeout' type-id='95e97e5e' mangled-name='panic_timeout' visibility='default' filepath='kernel/panic.c' line='48' column='1' elf-symbol-id='panic_timeout'/>
+      <var-decl name='panic_notifier_list' type-id='dbd58f6e' mangled-name='panic_notifier_list' visibility='default' filepath='kernel/panic.c' line='59' column='1' elf-symbol-id='panic_notifier_list'/>
+      <function-decl name='vscnprintf' mangled-name='vscnprintf' filepath='include/linux/kernel.h' line='485' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vscnprintf'>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='5f919c1f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dump_stack' mangled-name='dump_stack' filepath='include/linux/printk.h' line='204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dump_stack'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='touch_softlockup_watchdog' mangled-name='touch_softlockup_watchdog' filepath='include/linux/nmi.h' line='44' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='touch_softlockup_watchdog'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vprintk' mangled-name='vprintk' filepath='include/linux/printk.h' line='168' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vprintk'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='5f919c1f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__warn_printk' mangled-name='__warn_printk' filepath='kernel/panic.c' line='621' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__warn_printk'>
+        <parameter type-id='80f4b756' name='fmt' filepath='kernel/panic.c' line='621' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__stack_chk_fail' mangled-name='__stack_chk_fail' filepath='kernel/panic.c' line='665' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__stack_chk_fail'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/params.c' language='LANG_C89'>
+      <var-decl name='param_ops_byte' type-id='95d0d4e8' mangled-name='param_ops_byte' visibility='default' filepath='kernel/params.c' line='236' column='1' elf-symbol-id='param_ops_byte'/>
+      <var-decl name='param_ops_ushort' type-id='95d0d4e8' mangled-name='param_ops_ushort' visibility='default' filepath='kernel/params.c' line='238' column='1' elf-symbol-id='param_ops_ushort'/>
+      <var-decl name='param_ops_int' type-id='95d0d4e8' mangled-name='param_ops_int' visibility='default' filepath='kernel/params.c' line='239' column='1' elf-symbol-id='param_ops_int'/>
+      <var-decl name='param_ops_uint' type-id='95d0d4e8' mangled-name='param_ops_uint' visibility='default' filepath='kernel/params.c' line='240' column='1' elf-symbol-id='param_ops_uint'/>
+      <var-decl name='param_ops_long' type-id='95d0d4e8' mangled-name='param_ops_long' visibility='default' filepath='kernel/params.c' line='241' column='1' elf-symbol-id='param_ops_long'/>
+      <var-decl name='param_ops_ulong' type-id='95d0d4e8' mangled-name='param_ops_ulong' visibility='default' filepath='kernel/params.c' line='242' column='1' elf-symbol-id='param_ops_ulong'/>
+      <var-decl name='param_ops_ullong' type-id='95d0d4e8' mangled-name='param_ops_ullong' visibility='default' filepath='kernel/params.c' line='243' column='1' elf-symbol-id='param_ops_ullong'/>
+      <var-decl name='param_ops_charp' type-id='95d0d4e8' mangled-name='param_ops_charp' visibility='default' filepath='kernel/params.c' line='280' column='1' elf-symbol-id='param_ops_charp'/>
+      <var-decl name='param_ops_bool' type-id='95d0d4e8' mangled-name='param_ops_bool' visibility='default' filepath='kernel/params.c' line='305' column='1' elf-symbol-id='param_ops_bool'/>
+      <var-decl name='param_ops_bint' type-id='95d0d4e8' mangled-name='param_ops_bint' visibility='default' filepath='kernel/params.c' line='386' column='1' elf-symbol-id='param_ops_bint'/>
+      <var-decl name='param_array_ops' type-id='95d0d4e8' mangled-name='param_array_ops' visibility='default' filepath='kernel/params.c' line='484' column='1' elf-symbol-id='param_array_ops'/>
+      <var-decl name='param_ops_string' type-id='95d0d4e8' mangled-name='param_ops_string' visibility='default' filepath='kernel/params.c' line='512' column='1' elf-symbol-id='param_ops_string'/>
+      <function-decl name='kstrtou16' mangled-name='kstrtou16' filepath='include/linux/kernel.h' line='426' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtou16'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='e9e550dd'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='param_set_int' mangled-name='param_set_int' filepath='kernel/params.c' line='239' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='param_set_int'>
+        <parameter type-id='80f4b756' name='val' filepath='kernel/params.c' line='239' column='1'/>
+        <parameter type-id='edcbd723' name='kp' filepath='kernel/params.c' line='239' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='param_get_int' mangled-name='param_get_int' filepath='kernel/params.c' line='239' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='param_get_int'>
+        <parameter type-id='26a90f95' name='buffer' filepath='kernel/params.c' line='239' column='1'/>
+        <parameter type-id='edcbd723' name='kp' filepath='kernel/params.c' line='239' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtoll' mangled-name='kstrtoll' filepath='include/linux/kernel.h' line='343' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtoll'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='8b97c2dc'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='param_set_copystring' mangled-name='param_set_copystring' filepath='kernel/params.c' line='491' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='param_set_copystring'>
+        <parameter type-id='80f4b756' name='val' filepath='kernel/params.c' line='491' column='1'/>
+        <parameter type-id='edcbd723' name='kp' filepath='kernel/params.c' line='491' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='param_get_string' mangled-name='param_get_string' filepath='kernel/params.c' line='505' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='param_get_string'>
+        <parameter type-id='26a90f95' name='buffer' filepath='kernel/params.c' line='505' column='1'/>
+        <parameter type-id='edcbd723' name='kp' filepath='kernel/params.c' line='505' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kernel_param_lock' mangled-name='kernel_param_lock' filepath='kernel/params.c' line='583' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_param_lock'>
+        <parameter type-id='2730d015' name='mod' filepath='kernel/params.c' line='583' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kernel_param_unlock' mangled-name='kernel_param_unlock' filepath='kernel/params.c' line='588' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_param_unlock'>
+        <parameter type-id='2730d015' name='mod' filepath='kernel/params.c' line='588' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kset_create_and_add' mangled-name='kset_create_and_add' filepath='include/linux/kobject.h' line='219' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kset_create_and_add'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='86462700'/>
+        <parameter type-id='d30bdc51'/>
+        <return type-id='89b70200'/>
+      </function-decl>
+      <function-decl name='kobject_init_and_add' mangled-name='kobject_init_and_add' filepath='include/linux/kobject.h' line='105' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_init_and_add'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='c48b394e'/>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kobject_get' mangled-name='kobject_get' filepath='include/linux/kobject.h' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_get'>
+        <parameter type-id='d30bdc51'/>
+        <return type-id='d30bdc51'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/pid.c' language='LANG_C89'>
+      <function-decl name='idr_preload' mangled-name='idr_preload' filepath='include/linux/idr.h' line='112' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_preload'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__task_pid_nr_ns' mangled-name='__task_pid_nr_ns' filepath='kernel/pid.c' line='426' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__task_pid_nr_ns'>
+        <parameter type-id='f23e2572' name='task' filepath='kernel/pid.c' line='426' column='1'/>
+        <parameter type-id='ce78cf46' name='type' filepath='kernel/pid.c' line='426' column='1'/>
+        <parameter type-id='b816e1d0' name='ns' filepath='kernel/pid.c' line='427' column='1'/>
+        <return type-id='587f89d2'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/power/main.c' language='LANG_C89'>
+      <function-decl name='sysfs_create_groups' mangled-name='sysfs_create_groups' filepath='include/linux/sysfs.h' line='278' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_create_groups'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='c97de1ac'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_print_active_wakeup_sources' mangled-name='pm_print_active_wakeup_sources' filepath='include/linux/suspend.h' line='505' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_print_active_wakeup_sources'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/power/poweroff.c' language='LANG_C89'>
+      <function-decl name='queue_work_on' mangled-name='queue_work_on' filepath='include/linux/workqueue.h' line='450' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='queue_work_on'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='242e3d19'/>
+        <parameter type-id='83c1bde6'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='kernel_power_off' mangled-name='kernel_power_off' filepath='include/linux/reboot.h' line='72' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_power_off'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/power/qos.c' language='LANG_C89'>
+      <class-decl name='pm_qos_request' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='43' column='1' id='cd6fc142'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='e3a91a7c' visibility='default' filepath='include/linux/pm_qos.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pm_qos_class' type-id='95e97e5e' visibility='default' filepath='include/linux/pm_qos.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/pm_qos.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='cd6fc142' size-in-bits='64' id='221c3010'/>
+      <function-decl name='pm_qos_request_active' mangled-name='pm_qos_request_active' filepath='kernel/power/qos.c' line='344' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_qos_request_active'>
+        <parameter type-id='221c3010' name='req' filepath='kernel/power/qos.c' line='344' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_qos_add_request' mangled-name='pm_qos_add_request' filepath='kernel/power/qos.c' line='389' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_qos_add_request'>
+        <parameter type-id='221c3010' name='req' filepath='kernel/power/qos.c' line='389' column='1'/>
+        <parameter type-id='95e97e5e' name='pm_qos_class' filepath='kernel/power/qos.c' line='390' column='1'/>
+        <parameter type-id='a7832498' name='value' filepath='kernel/power/qos.c' line='390' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_qos_update_request' mangled-name='pm_qos_update_request' filepath='kernel/power/qos.c' line='417' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_qos_update_request'>
+        <parameter type-id='221c3010' name='req' filepath='kernel/power/qos.c' line='417' column='1'/>
+        <parameter type-id='a7832498' name='new_value' filepath='kernel/power/qos.c' line='418' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_qos_remove_request' mangled-name='pm_qos_remove_request' filepath='kernel/power/qos.c' line='470' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_qos_remove_request'>
+        <parameter type-id='221c3010' name='req' filepath='kernel/power/qos.c' line='470' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_qos_add_notifier' mangled-name='pm_qos_add_notifier' filepath='kernel/power/qos.c' line='499' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_qos_add_notifier'>
+        <parameter type-id='95e97e5e' name='pm_qos_class' filepath='kernel/power/qos.c' line='499' column='1'/>
+        <parameter type-id='d504f73d' name='notifier' filepath='kernel/power/qos.c' line='499' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_qos_remove_notifier' mangled-name='pm_qos_remove_notifier' filepath='kernel/power/qos.c' line='519' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_qos_remove_notifier'>
+        <parameter type-id='95e97e5e' name='pm_qos_class' filepath='kernel/power/qos.c' line='519' column='1'/>
+        <parameter type-id='d504f73d' name='notifier' filepath='kernel/power/qos.c' line='519' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='freq_qos_add_request' mangled-name='freq_qos_add_request' filepath='kernel/power/qos.c' line='755' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='freq_qos_add_request'>
+        <parameter type-id='1351457a' name='qos' filepath='kernel/power/qos.c' line='755' column='1'/>
+        <parameter type-id='3fdf7ca3' name='req' filepath='kernel/power/qos.c' line='756' column='1'/>
+        <parameter type-id='1df5cca8' name='type' filepath='kernel/power/qos.c' line='757' column='1'/>
+        <parameter type-id='a7832498' name='value' filepath='kernel/power/qos.c' line='757' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='freq_qos_update_request' mangled-name='freq_qos_update_request' filepath='kernel/power/qos.c' line='791' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='freq_qos_update_request'>
+        <parameter type-id='3fdf7ca3' name='req' filepath='kernel/power/qos.c' line='791' column='1'/>
+        <parameter type-id='a7832498' name='new_value' filepath='kernel/power/qos.c' line='791' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='freq_qos_remove_request' mangled-name='freq_qos_remove_request' filepath='kernel/power/qos.c' line='817' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='freq_qos_remove_request'>
+        <parameter type-id='3fdf7ca3' name='req' filepath='kernel/power/qos.c' line='817' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtoint_from_user' mangled-name='kstrtoint_from_user' filepath='include/linux/kernel.h' line='437' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtoint_from_user'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/power/suspend.c' language='LANG_C89'>
+      <var-decl name='pm_suspend_global_flags' type-id='f0981eeb' mangled-name='pm_suspend_global_flags' visibility='default' filepath='kernel/power/suspend.c' line='55' column='1' elf-symbol-id='pm_suspend_global_flags'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/power/wakelock.c' language='LANG_C89'>
+      <function-decl name='wakeup_source_register' mangled-name='wakeup_source_register' filepath='include/linux/pm_wakeup.h' line='92' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wakeup_source_register'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='1ea237a6'/>
+      </function-decl>
+      <function-decl name='pm_wakeup_ws_event' mangled-name='pm_wakeup_ws_event' filepath='include/linux/pm_wakeup.h' line='104' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_wakeup_ws_event'>
+        <parameter type-id='1ea237a6'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/printk/printk.c' language='LANG_C89'>
+      <var-decl name='console_printk' type-id='2020bac4' mangled-name='console_printk' visibility='default' filepath='kernel/printk/printk.c' line='63' column='1' elf-symbol-id='console_printk'/>
+      <var-decl name='ignore_console_lock_warning' type-id='49178f86' mangled-name='ignore_console_lock_warning' visibility='default' filepath='kernel/printk/printk.c' line='71' column='1' elf-symbol-id='ignore_console_lock_warning'/>
+      <var-decl name='console_suspend_enabled' type-id='b50a4934' mangled-name='console_suspend_enabled' visibility='default' filepath='kernel/printk/printk.c' line='2251' column='1' elf-symbol-id='console_suspend_enabled'/>
+      <var-decl name='oops_in_progress' type-id='95e97e5e' mangled-name='oops_in_progress' visibility='default' filepath='kernel/printk/printk.c' line='78' column='1' elf-symbol-id='oops_in_progress'/>
+      <function-decl name='console_trylock' mangled-name='console_trylock' filepath='kernel/printk/printk.c' line='2336' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='console_trylock'>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='is_console_locked' mangled-name='is_console_locked' filepath='kernel/printk/printk.c' line='2350' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='is_console_locked'>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='console_stop' mangled-name='console_stop' filepath='kernel/printk/printk.c' line='2632' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='console_stop'>
+        <parameter type-id='b9aa0100' name='console' filepath='kernel/printk/printk.c' line='2632' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='unregister_console' mangled-name='unregister_console' filepath='kernel/printk/printk.c' line='2845' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_console'>
+        <parameter type-id='b9aa0100' name='console' filepath='kernel/printk/printk.c' line='2845' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__printk_ratelimit' mangled-name='__printk_ratelimit' filepath='kernel/printk/printk.c' line='3052' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__printk_ratelimit'>
+        <parameter type-id='80f4b756' name='func' filepath='kernel/printk/printk.c' line='3052' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='printk_timed_ratelimit' mangled-name='printk_timed_ratelimit' filepath='kernel/printk/printk.c' line='3067' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='printk_timed_ratelimit'>
+        <parameter type-id='1d2c2b85' name='caller_jiffies' filepath='kernel/printk/printk.c' line='3067' column='1'/>
+        <parameter type-id='f0981eeb' name='interval_msecs' filepath='kernel/printk/printk.c' line='3068' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/ptrace.c' language='LANG_C89'>
+      <pointer-type-def type-id='38ef7882' size-in-bits='64' id='0effb5d0'/>
+      <function-decl name='send_sig_info' mangled-name='send_sig_info' filepath='include/linux/sched/signal.h' line='337' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='send_sig_info'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='0effb5d0'/>
+        <parameter type-id='f23e2572'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/rcu/srcutree.c' language='LANG_C89'>
+      <function-decl name='init_srcu_struct' mangled-name='init_srcu_struct' filepath='kernel/rcu/srcutree.c' line='210' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='init_srcu_struct'>
+        <parameter type-id='f7d7131a' name='ssp' filepath='kernel/rcu/srcutree.c' line='210' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/rcu/tree.c' language='LANG_C89'>
+      <function-decl name='__rcu_read_lock' mangled-name='__rcu_read_lock' filepath='kernel/rcu/tree_plugin.h' line='356' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__rcu_read_lock'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__rcu_read_unlock' mangled-name='__rcu_read_unlock' filepath='kernel/rcu/tree_plugin.h' line='372' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__rcu_read_unlock'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='round_jiffies' mangled-name='round_jiffies' filepath='include/linux/timer.h' line='214' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='round_jiffies'>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/reboot.c' language='LANG_C89'>
+      <enum-decl name='reboot_mode' filepath='include/linux/reboot.h' line='16' column='1' id='fdb20761'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='REBOOT_UNDEFINED' value='-1'/>
+        <enumerator name='REBOOT_COLD' value='0'/>
+        <enumerator name='REBOOT_WARM' value='1'/>
+        <enumerator name='REBOOT_HARD' value='2'/>
+        <enumerator name='REBOOT_SOFT' value='3'/>
+        <enumerator name='REBOOT_GPIO' value='4'/>
+      </enum-decl>
+      <var-decl name='reboot_mode' type-id='fdb20761' mangled-name='reboot_mode' visibility='default' filepath='kernel/reboot.c' line='34' column='1' elf-symbol-id='reboot_mode'/>
+      <function-decl name='register_reboot_notifier' mangled-name='register_reboot_notifier' filepath='kernel/reboot.c' line='91' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_reboot_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='kernel/reboot.c' line='91' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_reboot_notifier' mangled-name='unregister_reboot_notifier' filepath='kernel/reboot.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_reboot_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='kernel/reboot.c' line='106' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_restart_handler' mangled-name='unregister_restart_handler' filepath='kernel/reboot.c' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_restart_handler'>
+        <parameter type-id='d504f73d' name='nb' filepath='kernel/reboot.c' line='198' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='orderly_poweroff' mangled-name='orderly_poweroff' filepath='kernel/reboot.c' line='496' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='orderly_poweroff'>
+        <parameter type-id='b50a4934' name='force' filepath='kernel/reboot.c' line='496' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/resource.c' language='LANG_C89'>
+      <pointer-type-def type-id='0fa06c89' size-in-bits='64' id='7e69f315'/>
+      <var-decl name='iomem_resource' type-id='5218160d' mangled-name='iomem_resource' visibility='default' filepath='kernel/resource.c' line='38' column='1' elf-symbol-id='iomem_resource'/>
+      <function-decl name='__request_region' mangled-name='__request_region' filepath='kernel/resource.c' line='1123' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__request_region'>
+        <parameter type-id='c9d64c0d' name='parent' filepath='kernel/resource.c' line='1123' column='1'/>
+        <parameter type-id='acc63fdf' name='start' filepath='kernel/resource.c' line='1124' column='1'/>
+        <parameter type-id='acc63fdf' name='n' filepath='kernel/resource.c' line='1124' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/resource.c' line='1125' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='kernel/resource.c' line='1125' column='1'/>
+        <return type-id='c9d64c0d'/>
+      </function-decl>
+      <function-decl name='__release_region' mangled-name='__release_region' filepath='kernel/resource.c' line='1196' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__release_region'>
+        <parameter type-id='c9d64c0d' name='parent' filepath='kernel/resource.c' line='1196' column='1'/>
+        <parameter type-id='acc63fdf' name='start' filepath='kernel/resource.c' line='1196' column='1'/>
+        <parameter type-id='acc63fdf' name='n' filepath='kernel/resource.c' line='1197' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devres_alloc_node' mangled-name='devres_alloc_node' filepath='include/linux/device.h' line='910' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devres_alloc_node'>
+        <parameter type-id='680bf43c'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='devres_add' mangled-name='devres_add' filepath='include/linux/device.h' line='923' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devres_add'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devres_free' mangled-name='devres_free' filepath='include/linux/device.h' line='922' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devres_free'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devres_release' mangled-name='devres_release' filepath='include/linux/device.h' line='932' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devres_release'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='680bf43c'/>
+        <parameter type-id='7e69f315'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__devm_request_region' mangled-name='__devm_request_region' filepath='kernel/resource.c' line='1451' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__devm_request_region'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/resource.c' line='1451' column='1'/>
+        <parameter type-id='c9d64c0d' name='parent' filepath='kernel/resource.c' line='1451' column='1'/>
+        <parameter type-id='acc63fdf' name='start' filepath='kernel/resource.c' line='1452' column='1'/>
+        <parameter type-id='acc63fdf' name='n' filepath='kernel/resource.c' line='1452' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/resource.c' line='1452' column='1'/>
+        <return type-id='c9d64c0d'/>
+      </function-decl>
+      <function-decl name='__devm_release_region' mangled-name='__devm_release_region' filepath='kernel/resource.c' line='1476' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__devm_release_region'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/resource.c' line='1476' column='1'/>
+        <parameter type-id='c9d64c0d' name='parent' filepath='kernel/resource.c' line='1476' column='1'/>
+        <parameter type-id='acc63fdf' name='start' filepath='kernel/resource.c' line='1477' column='1'/>
+        <parameter type-id='acc63fdf' name='n' filepath='kernel/resource.c' line='1477' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devres_destroy' mangled-name='devres_destroy' filepath='include/linux/device.h' line='930' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devres_destroy'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='680bf43c'/>
+        <parameter type-id='7e69f315'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='0fa06c89'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/sched/completion.c' language='LANG_C89'>
+      <function-decl name='wait_for_completion_io_timeout' mangled-name='wait_for_completion_io_timeout' filepath='kernel/sched/completion.c' line='187' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wait_for_completion_io_timeout'>
+        <parameter type-id='389faaf7' name='x' filepath='kernel/sched/completion.c' line='187' column='1'/>
+        <parameter type-id='7359adad' name='timeout' filepath='kernel/sched/completion.c' line='187' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='wait_for_completion_interruptible' mangled-name='wait_for_completion_interruptible' filepath='kernel/sched/completion.c' line='202' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wait_for_completion_interruptible'>
+        <parameter type-id='389faaf7' name='x' filepath='kernel/sched/completion.c' line='202' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='wait_for_completion_interruptible_timeout' mangled-name='wait_for_completion_interruptible_timeout' filepath='kernel/sched/completion.c' line='223' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wait_for_completion_interruptible_timeout'>
+        <parameter type-id='389faaf7' name='x' filepath='kernel/sched/completion.c' line='223' column='1'/>
+        <parameter type-id='7359adad' name='timeout' filepath='kernel/sched/completion.c' line='224' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='try_wait_for_completion' mangled-name='try_wait_for_completion' filepath='kernel/sched/completion.c' line='280' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='try_wait_for_completion'>
+        <parameter type-id='389faaf7' name='x' filepath='kernel/sched/completion.c' line='280' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='completion_done' mangled-name='completion_done' filepath='kernel/sched/completion.c' line='313' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='completion_done'>
+        <parameter type-id='389faaf7' name='x' filepath='kernel/sched/completion.c' line='313' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/sched/core.c' language='LANG_C89'>
+      <class-decl name='kernel_stat' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/kernel_stat.h' line='38' column='1' id='153750ef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='irqs_sum' type-id='7359adad' visibility='default' filepath='include/linux/kernel_stat.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='softirqs' type-id='67c1c82c' visibility='default' filepath='include/linux/kernel_stat.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_attr' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/uapi/linux/sched/types.h' line='100' column='1' id='6a32253a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/sched/types.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='sched_policy' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/sched/types.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sched_flags' type-id='d3130597' visibility='default' filepath='include/uapi/linux/sched/types.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sched_nice' type-id='3158a266' visibility='default' filepath='include/uapi/linux/sched/types.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='sched_priority' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/sched/types.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sched_runtime' type-id='d3130597' visibility='default' filepath='include/uapi/linux/sched/types.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sched_deadline' type-id='d3130597' visibility='default' filepath='include/uapi/linux/sched/types.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sched_period' type-id='d3130597' visibility='default' filepath='include/uapi/linux/sched/types.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sched_util_min' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/sched/types.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sched_util_max' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/sched/types.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='b6993efc' const='yes' id='545b687b'/>
+      <pointer-type-def type-id='545b687b' size-in-bits='64' id='1ce53783'/>
+      <qualified-type-def type-id='6a32253a' const='yes' id='9a07743b'/>
+      <pointer-type-def type-id='9a07743b' size-in-bits='64' id='8abbb6c3'/>
+      <pointer-type-def type-id='77df194e' size-in-bits='64' id='b0222d74'/>
+      <pointer-type-def type-id='fe794aa9' size-in-bits='64' id='ba9aa326'/>
+      <var-decl name='kstat' type-id='153750ef' mangled-name='kstat' visibility='default' filepath='kernel/sched/core.c' line='3724' column='1' elf-symbol-id='kstat'/>
+      <function-decl name='set_cpus_allowed_ptr' mangled-name='set_cpus_allowed_ptr' filepath='kernel/sched/core.c' line='1893' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_cpus_allowed_ptr'>
+        <parameter type-id='f23e2572' name='p' filepath='kernel/sched/core.c' line='1893' column='1'/>
+        <parameter type-id='5f8a1ac4' name='new_mask' filepath='kernel/sched/core.c' line='1893' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hrtimer_active' mangled-name='hrtimer_active' filepath='include/linux/hrtimer.h' line='460' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hrtimer_active'>
+        <parameter type-id='1ce53783'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='default_wake_function' mangled-name='default_wake_function' filepath='kernel/sched/core.c' line='4548' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='default_wake_function'>
+        <parameter type-id='ba9aa326' name='curr' filepath='kernel/sched/core.c' line='4548' column='1'/>
+        <parameter type-id='f0981eeb' name='mode' filepath='kernel/sched/core.c' line='4548' column='1'/>
+        <parameter type-id='95e97e5e' name='wake_flags' filepath='kernel/sched/core.c' line='4548' column='1'/>
+        <parameter type-id='eaa32e2f' name='key' filepath='kernel/sched/core.c' line='4549' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sched_setscheduler' mangled-name='sched_setscheduler' filepath='kernel/sched/core.c' line='5253' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sched_setscheduler'>
+        <parameter type-id='f23e2572' name='p' filepath='kernel/sched/core.c' line='5253' column='1'/>
+        <parameter type-id='95e97e5e' name='policy' filepath='kernel/sched/core.c' line='5253' column='1'/>
+        <parameter type-id='36fca399' name='param' filepath='kernel/sched/core.c' line='5254' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sched_setattr' mangled-name='sched_setattr' filepath='kernel/sched/core.c' line='5260' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sched_setattr'>
+        <parameter type-id='f23e2572' name='p' filepath='kernel/sched/core.c' line='5260' column='1'/>
+        <parameter type-id='8abbb6c3' name='attr' filepath='kernel/sched/core.c' line='5260' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='io_schedule' mangled-name='io_schedule' filepath='kernel/sched/core.c' line='5989' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='io_schedule'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sched_show_task' mangled-name='sched_show_task' filepath='kernel/sched/core.c' line='6124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sched_show_task'>
+        <parameter type-id='f23e2572' name='p' filepath='kernel/sched/core.c' line='6124' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='llist_add_batch' mangled-name='llist_add_batch' filepath='include/linux/llist.h' line='197' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='llist_add_batch'>
+        <parameter type-id='023b769e'/>
+        <parameter type-id='023b769e'/>
+        <parameter type-id='b0222d74'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='strim' mangled-name='strim' filepath='include/linux/string.h' line='73' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strim'>
+        <parameter type-id='26a90f95'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/sched/cpufreq.c' language='LANG_C89'>
+      <class-decl name='update_util_data' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/sched/cpufreq.h' line='17' column='1' id='f24c165e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='func' type-id='2cd87b91' visibility='default' filepath='include/linux/sched/cpufreq.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f24c165e' size-in-bits='64' id='f681f934'/>
+      <pointer-type-def type-id='9b3d9f4d' size-in-bits='64' id='2cd87b91'/>
+      <function-decl name='cpufreq_add_update_util_hook' mangled-name='cpufreq_add_update_util_hook' filepath='kernel/sched/cpufreq.c' line='32' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_add_update_util_hook'>
+        <parameter type-id='95e97e5e' name='cpu' filepath='kernel/sched/cpufreq.c' line='32' column='1'/>
+        <parameter type-id='f681f934' name='data' filepath='kernel/sched/cpufreq.c' line='32' column='1'/>
+        <parameter type-id='2cd87b91' name='func' filepath='kernel/sched/cpufreq.c' line='33' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpufreq_remove_update_util_hook' mangled-name='cpufreq_remove_update_util_hook' filepath='kernel/sched/cpufreq.c' line='57' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_remove_update_util_hook'>
+        <parameter type-id='95e97e5e' name='cpu' filepath='kernel/sched/cpufreq.c' line='57' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='9b3d9f4d'>
+        <parameter type-id='f681f934'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/sched/cpufreq_schedutil.c' language='LANG_C89'>
+      <class-decl name='gov_attr_set' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='587' column='1' id='32d20c8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/cpufreq.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='policy_list' type-id='72f469ec' visibility='default' filepath='include/linux/cpufreq.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='update_lock' type-id='925167dc' visibility='default' filepath='include/linux/cpufreq.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='usage_count' type-id='95e97e5e' visibility='default' filepath='include/linux/cpufreq.h' line='591' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='32d20c8c' size-in-bits='64' id='902fed1a'/>
+      <function-decl name='have_governor_per_policy' mangled-name='have_governor_per_policy' filepath='include/linux/cpufreq.h' line='218' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='have_governor_per_policy'>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='gov_attr_set_get' mangled-name='gov_attr_set_get' filepath='include/linux/cpufreq.h' line='598' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gov_attr_set_get'>
+        <parameter type-id='902fed1a'/>
+        <parameter type-id='e84b031a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gov_attr_set_init' mangled-name='gov_attr_set_init' filepath='include/linux/cpufreq.h' line='597' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gov_attr_set_init'>
+        <parameter type-id='902fed1a'/>
+        <parameter type-id='e84b031a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='get_governor_parent_kobj' mangled-name='get_governor_parent_kobj' filepath='include/linux/cpufreq.h' line='219' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_governor_parent_kobj'>
+        <parameter type-id='343c3ae4'/>
+        <return type-id='d30bdc51'/>
+      </function-decl>
+      <function-decl name='gov_attr_set_put' mangled-name='gov_attr_set_put' filepath='include/linux/cpufreq.h' line='599' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gov_attr_set_put'>
+        <parameter type-id='902fed1a'/>
+        <parameter type-id='e84b031a'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='irq_work_sync' mangled-name='irq_work_sync' filepath='include/linux/irq_work.h' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_work_sync'>
+        <parameter type-id='44bef697'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_work_queue' mangled-name='irq_work_queue' filepath='include/linux/irq_work.h' line='39' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_work_queue'>
+        <parameter type-id='44bef697'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='cpufreq_driver_resolve_freq' mangled-name='cpufreq_driver_resolve_freq' filepath='include/linux/cpufreq.h' line='569' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_driver_resolve_freq'>
+        <parameter type-id='343c3ae4'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <pointer-type-def type-id='9281c70f' size-in-bits='64' id='44bef697'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/sched/debug.c' language='LANG_C89'>
+      <function-decl name='match_string' mangled-name='match_string' filepath='include/linux/string.h' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='match_string'>
+        <parameter type-id='13956559'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='single_open' mangled-name='single_open' filepath='include/linux/seq_file.h' line='142' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='single_open'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='0131eb61'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/sched/fair.c' language='LANG_C89'>
+      <function-decl name='rb_last' mangled-name='rb_last' filepath='include/linux/rbtree.h' line='57' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rb_last'>
+        <parameter type-id='c4139a7d'/>
+        <return type-id='e6532500'/>
+      </function-decl>
+      <function-decl name='cpumask_next_wrap' mangled-name='cpumask_next_wrap' filepath='include/linux/cpumask.h' line='273' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpumask_next_wrap'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='5f8a1ac4'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='f213bd85' size-in-bits='64' id='c4139a7d'/>
+      <qualified-type-def type-id='dec44472' const='yes' id='f213bd85'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/sched/psi.c' language='LANG_C89'>
+      <function-decl name='single_release' mangled-name='single_release' filepath='include/linux/seq_file.h' line='144' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='single_release'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/sched/stats.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='84a5c3d4' size-in-bits='128' id='7f112b69'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='78a133c2' size-in-bits='128' id='30180d4b'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='d3130597' size-in-bits='1984' id='cb6b7280'>
+        <subrange length='31' type-id='7ff19f0f' id='ae5e1d19'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='d3130597' size-in-bits='infinite' id='52cd3f2c'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='192' id='26f0765c'>
+        <subrange length='24' type-id='7ff19f0f' id='fdd3342b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='24' id='c216126b'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='32' id='c213d3d4'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='72' id='060772ed'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='28ee064c' size-in-bits='320' id='39e531ac'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='896' id='80b13f9b'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='2048' id='99d12d7b'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='2432' id='9dc2293d'>
+        <subrange length='38' type-id='7ff19f0f' id='aa4ccdac'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='32768' id='61cd76ae'>
+        <subrange length='512' type-id='7ff19f0f' id='c11630dd'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='3584' id='37ece551'>
+        <subrange length='56' type-id='7ff19f0f' id='f8137894'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='448' id='76b91d35'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='infinite' id='a922812c'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='49178f86' size-in-bits='288' id='32e5d672'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='40af3608' size-in-bits='infinite' id='7289e834'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a3274c4b' size-in-bits='5120' id='8574e02e'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0f8f80b0' size-in-bits='320' id='39e1fe03'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3213e875' size-in-bits='320' id='f5665670'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='531c24d0' size-in-bits='128' id='dcd9fb4c'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='380c7edc' size-in-bits='1472' id='47645c1d'>
+        <subrange length='23' type-id='7ff19f0f' id='fdd0f594'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f67e137c' size-in-bits='infinite' id='3f814540'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='cfff5953' size-in-bits='384' id='7975e215'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='176' id='aa4fa8f1'>
+        <subrange length='22' type-id='7ff19f0f' id='41cf2209'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='2048' id='d1617432'>
+        <subrange length='256' type-id='7ff19f0f' id='36e5b9fa'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='296' id='12e4ade3'>
+        <subrange length='37' type-id='7ff19f0f' id='aa6426fb'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='32768' id='d16c6df4'>
+        <subrange length='4096' type-id='7ff19f0f' id='bc1b5ddc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='512' id='59daf3ef'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='520' id='5ddd38d2'>
+        <subrange length='65' type-id='7ff19f0f' id='b50e2e4a'/>
+      </array-type-def>
+      <class-decl name='badblocks' is-struct='yes' visibility='default' is-declaration-only='yes' id='cacf0f56'/>
+      <class-decl name='bio_crypt_ctx' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/blk-crypto.h' line='71' column='1' id='b545ce08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bc_key' type-id='9baaf905' visibility='default' filepath='include/linux/blk-crypto.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bc_dun' type-id='20b279f0' visibility='default' filepath='include/linux/blk-crypto.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_flush_queue' is-struct='yes' visibility='default' is-declaration-only='yes' id='1d120221'/>
+      <class-decl name='blk_keyslot_manager' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/keyslot-manager.h' line='52' column='1' id='13fcfe64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ksm_ll_ops' type-id='85385c54' visibility='default' filepath='include/linux/keyslot-manager.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_dun_bytes_supported' type-id='f0981eeb' visibility='default' filepath='include/linux/keyslot-manager.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='features' type-id='f0981eeb' visibility='default' filepath='include/linux/keyslot-manager.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='crypto_modes_supported' type-id='49580a63' visibility='default' filepath='include/linux/keyslot-manager.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/keyslot-manager.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_slots' type-id='f0981eeb' visibility='default' filepath='include/linux/keyslot-manager.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='lock' type-id='f19fdb93' visibility='default' filepath='include/linux/keyslot-manager.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='idle_slots_wait_queue' type-id='b5ab048f' visibility='default' filepath='include/linux/keyslot-manager.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='idle_slots' type-id='72f469ec' visibility='default' filepath='include/linux/keyslot-manager.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='idle_slots_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/keyslot-manager.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='slot_hashtable' type-id='030d0b18' visibility='default' filepath='include/linux/keyslot-manager.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='log_slot_ht_size' type-id='f0981eeb' visibility='default' filepath='include/linux/keyslot-manager.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='slots' type-id='5b559658' visibility='default' filepath='include/linux/keyslot-manager.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_ksm_keyslot' is-struct='yes' visibility='default' is-declaration-only='yes' id='479d017a'/>
+      <class-decl name='blk_mq_alloc_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='afd9eb4a'/>
+      <class-decl name='blk_mq_ctx' is-struct='yes' visibility='default' is-declaration-only='yes' id='cde99b39'/>
+      <class-decl name='blk_mq_debugfs_attr' size-in-bits='320' is-struct='yes' visibility='default' filepath='block/blk-mq-debugfs.h' line='9' column='1' id='d53ee986'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='block/blk-mq-debugfs.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='block/blk-mq-debugfs.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='5694e921' visibility='default' filepath='block/blk-mq-debugfs.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write' type-id='9682fd8c' visibility='default' filepath='block/blk-mq-debugfs.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='seq_ops' type-id='943a1b48' visibility='default' filepath='block/blk-mq-debugfs.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_hw_ctx' is-struct='yes' visibility='default' is-declaration-only='yes' id='e063028f'/>
+      <class-decl name='blk_mq_ops' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='146' column='1' id='b785b938'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='queue_rq' type-id='cf544519' visibility='default' filepath='include/linux/blk-mq.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='commit_rqs' type-id='10b13b44' visibility='default' filepath='include/linux/blk-mq.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_budget' type-id='9712eb54' visibility='default' filepath='include/linux/blk-mq.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='put_budget' type-id='247cb56b' visibility='default' filepath='include/linux/blk-mq.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='timeout' type-id='23816d7d' visibility='default' filepath='include/linux/blk-mq.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='poll' type-id='969a6bcd' visibility='default' filepath='include/linux/blk-mq.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='complete' type-id='681aaa17' visibility='default' filepath='include/linux/blk-mq.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='init_hctx' type-id='e1f2504c' visibility='default' filepath='include/linux/blk-mq.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='exit_hctx' type-id='1fb247c2' visibility='default' filepath='include/linux/blk-mq.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='init_request' type-id='57e65d80' visibility='default' filepath='include/linux/blk-mq.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='exit_request' type-id='9a2e43a6' visibility='default' filepath='include/linux/blk-mq.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='initialize_rq_fn' type-id='bbf015cd' visibility='default' filepath='include/linux/blk-mq.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='cleanup_rq' type-id='ac8cd584' visibility='default' filepath='include/linux/blk-mq.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='busy' type-id='65c718a5' visibility='default' filepath='include/linux/blk-mq.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='map_queues' type-id='06a241cf' visibility='default' filepath='include/linux/blk-mq.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='show_rq' type-id='05a372cf' visibility='default' filepath='include/linux/blk-mq.h' line='222' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_tag_set' is-struct='yes' visibility='default' is-declaration-only='yes' id='651086d7'/>
+      <class-decl name='blk_queue_stats' is-struct='yes' visibility='default' is-declaration-only='yes' id='99d089ec'/>
+      <class-decl name='blk_stat_callback' size-in-bits='1088' is-struct='yes' visibility='default' filepath='block/blk-stat.h' line='19' column='1' id='be8f4983'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='block/blk-stat.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='block/blk-stat.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cpu_stat' type-id='253d2bfb' visibility='default' filepath='block/blk-stat.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bucket_fn' type-id='484cd9e5' visibility='default' filepath='block/blk-stat.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='buckets' type-id='f0981eeb' visibility='default' filepath='block/blk-stat.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='stat' type-id='253d2bfb' visibility='default' filepath='block/blk-stat.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='timer_fn' type-id='454b8f82' visibility='default' filepath='block/blk-stat.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='block/blk-stat.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='block/blk-stat.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_cgroup_storage_map' is-struct='yes' visibility='default' is-declaration-only='yes' id='0ad68707'/>
+      <class-decl name='bpf_prog' is-struct='yes' visibility='default' is-declaration-only='yes' id='facd5338'/>
+      <class-decl name='bucket_table' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/rhashtable.h' line='76' column='1' id='984972f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nest' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hash_rnd' type-id='19c2251e' visibility='default' filepath='include/linux/rhashtable.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='walkers' type-id='72f469ec' visibility='default' filepath='include/linux/rhashtable.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/rhashtable.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='future_tbl' type-id='35e7a722' visibility='default' filepath='include/linux/rhashtable.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dep_map' type-id='d34a605e' visibility='default' filepath='include/linux/rhashtable.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='buckets' type-id='7c792e5e' visibility='default' filepath='include/linux/rhashtable.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_taskset' is-struct='yes' visibility='default' is-declaration-only='yes' id='19596889'/>
+      <class-decl name='cma' size-in-bits='576' is-struct='yes' visibility='default' filepath='mm/cma.h' line='5' column='1' id='6110442c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base_pfn' type-id='7359adad' visibility='default' filepath='mm/cma.h' line='6' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='7359adad' visibility='default' filepath='mm/cma.h' line='7' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bitmap' type-id='1d2c2b85' visibility='default' filepath='mm/cma.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='order_per_bit' type-id='f0981eeb' visibility='default' filepath='mm/cma.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='mm/cma.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='mm/cma.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpu_stop_done' is-struct='yes' visibility='default' is-declaration-only='yes' id='64c36f53'/>
+      <class-decl name='cpuidle_device_kobj' is-struct='yes' visibility='default' is-declaration-only='yes' id='25ee3a49'/>
+      <class-decl name='cpuidle_driver_kobj' is-struct='yes' visibility='default' is-declaration-only='yes' id='cf6b9835'/>
+      <class-decl name='cpuidle_state_kobj' is-struct='yes' visibility='default' is-declaration-only='yes' id='22d74cfc'/>
+      <class-decl name='dev_pin_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='038d05bd'/>
+      <class-decl name='device_private' is-struct='yes' visibility='default' is-declaration-only='yes' id='d066d157'/>
+      <class-decl name='disk_events' size-in-bits='1792' is-struct='yes' visibility='default' filepath='block/genhd.c' line='1624' column='1' id='ec1aac50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='block/genhd.c' line='1625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='disk' type-id='33c599db' visibility='default' filepath='block/genhd.c' line='1626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='block/genhd.c' line='1627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='block_mutex' type-id='925167dc' visibility='default' filepath='block/genhd.c' line='1629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='block' type-id='95e97e5e' visibility='default' filepath='block/genhd.c' line='1630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='pending' type-id='f0981eeb' visibility='default' filepath='block/genhd.c' line='1631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='clearing' type-id='f0981eeb' visibility='default' filepath='block/genhd.c' line='1632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='poll_msecs' type-id='bd54fe1a' visibility='default' filepath='block/genhd.c' line='1634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dwork' type-id='5ad6e0ef' visibility='default' filepath='block/genhd.c' line='1635' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_coherent_mem' is-struct='yes' visibility='default' is-declaration-only='yes' id='5d5ff7f6'/>
+      <class-decl name='driver_private' is-struct='yes' visibility='default' is-declaration-only='yes' id='e44b8083'/>
+      <class-decl name='dst_entry' is-struct='yes' visibility='default' is-declaration-only='yes' id='772a4de0'/>
+      <class-decl name='event_filter' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='1369' column='1' id='5ff1273a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog' type-id='efd0fdec' visibility='default' filepath='kernel/trace/trace.h' line='1370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='filter_string' type-id='26a90f95' visibility='default' filepath='kernel/trace/trace.h' line='1371' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='eventfd_ctx' is-struct='yes' visibility='default' is-declaration-only='yes' id='77dc8383'/>
+      <class-decl name='fib6_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='faaac7a5'/>
+      <class-decl name='fib6_table' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='350' column='1' id='7147e7ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tb6_hlist' type-id='03a4a074' visibility='default' filepath='include/net/ip6_fib.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tb6_id' type-id='19c2251e' visibility='default' filepath='include/net/ip6_fib.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tb6_lock' type-id='fb4018a0' visibility='default' filepath='include/net/ip6_fib.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tb6_root' type-id='9f30e4ad' visibility='default' filepath='include/net/ip6_fib.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tb6_peers' type-id='27ebfa24' visibility='default' filepath='include/net/ip6_fib.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/net/ip6_fib.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='fib_seq' type-id='f0981eeb' visibility='default' filepath='include/net/ip6_fib.h' line='357' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_notifier_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='ef45f062'/>
+      <class-decl name='fib_rules_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='e079fe29'/>
+      <class-decl name='fib_table' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='234' column='1' id='a2b406b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tb_hlist' type-id='03a4a074' visibility='default' filepath='include/net/ip_fib.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tb_id' type-id='19c2251e' visibility='default' filepath='include/net/ip_fib.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tb_num_default' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip_fib.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tb_data' type-id='1d2c2b85' visibility='default' filepath='include/net/ip_fib.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='__data' type-id='c99b5ecd' visibility='default' filepath='include/net/ip_fib.h' line='240' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hd_geometry' is-struct='yes' visibility='default' is-declaration-only='yes' id='28e89e7e'/>
+      <class-decl name='inet_hashinfo' size-in-bits='4608' is-struct='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='124' column='1' id='3482ac54'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ehash' type-id='77011cbc' visibility='default' filepath='include/net/inet_hashtables.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ehash_locks' type-id='cff2d845' visibility='default' filepath='include/net/inet_hashtables.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ehash_mask' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ehash_locks_mask' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bind_bucket_cachep' type-id='f3b4aca8' visibility='default' filepath='include/net/inet_hashtables.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bhash' type-id='fd53db64' visibility='default' filepath='include/net/inet_hashtables.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bhash_size' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='lhash2_mask' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lhash2' type-id='e0087b68' visibility='default' filepath='include/net/inet_hashtables.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='listening_hash' type-id='e3638da9' visibility='default' filepath='include/net/inet_hashtables.h' line='159' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_peer_base' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/inetpeer.h' line='61' column='1' id='27ebfa24'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_root' type-id='dec44472' visibility='default' filepath='include/net/inetpeer.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/inetpeer.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='total' type-id='95e97e5e' visibility='default' filepath='include/net/inetpeer.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_fwspec' is-struct='yes' visibility='default' is-declaration-only='yes' id='0d6f83ff'/>
+      <class-decl name='iommu_group' size-in-bits='2048' is-struct='yes' visibility='default' filepath='drivers/iommu/iommu.c' line='35' column='1' id='2352f3ae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='drivers/iommu/iommu.c' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='devices_kobj' type-id='d30bdc51' visibility='default' filepath='drivers/iommu/iommu.c' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='devices' type-id='72f469ec' visibility='default' filepath='drivers/iommu/iommu.c' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='drivers/iommu/iommu.c' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='notifier' type-id='708c2394' visibility='default' filepath='drivers/iommu/iommu.c' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='iommu_data' type-id='eaa32e2f' visibility='default' filepath='drivers/iommu/iommu.c' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='iommu_data_release' type-id='b7f9d8e6' visibility='default' filepath='drivers/iommu/iommu.c' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='drivers/iommu/iommu.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='drivers/iommu/iommu.c' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='default_domain' type-id='bff05edb' visibility='default' filepath='drivers/iommu/iommu.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='domain' type-id='bff05edb' visibility='default' filepath='drivers/iommu/iommu.c' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='8b7a2cd1'/>
+      <class-decl name='iommu_param' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='366' column='1' id='6c784694'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/iommu.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fault_param' type-id='0a9b173b' visibility='default' filepath='include/linux/iommu.h' line='368' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip_ra_chain' is-struct='yes' visibility='default' is-declaration-only='yes' id='4816a146'/>
+      <class-decl name='ipv4_devconf' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/inetdevice.h' line='17' column='1' id='c2c09950'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysctl' type-id='eaa32e2f' visibility='default' filepath='include/linux/inetdevice.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='9e942f0d' visibility='default' filepath='include/linux/inetdevice.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='state' type-id='f066dd3c' visibility='default' filepath='include/linux/inetdevice.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_devconf' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/ipv6.h' line='13' column='1' id='55e8af82'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='forwarding' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='hop_limit' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mtu6' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='accept_ra' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='accept_redirects' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='autoconf' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dad_transmits' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='rtr_solicits' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rtr_solicit_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='rtr_solicit_max_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rtr_solicit_delay' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='force_mld_version' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mldv1_unsolicited_report_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='mldv2_unsolicited_report_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='use_tempaddr' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='temp_valid_lft' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='temp_prefered_lft' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='regen_max_retry' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_desync_factor' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='max_addresses' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='accept_ra_defrtr' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='accept_ra_min_hop_limit' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='accept_ra_pinfo' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='ignore_routes_with_linkdown' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='accept_ra_rtr_pref' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='rtr_probe_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='accept_ra_rt_info_min_plen' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='accept_ra_rt_info_max_plen' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='accept_ra_rt_table' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='proxy_ndp' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='accept_source_route' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='accept_ra_from_local' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='optimistic_dad' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='use_optimistic' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='disable_ipv6' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='drop_unicast_in_l2_multicast' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='accept_dad' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='force_tllao' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ndisc_notify' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='suppress_frag_ndisc' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='accept_ra_mtu' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='drop_unsolicited_na' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='stable_secret' type-id='b2fc06b3' visibility='default' filepath='include/linux/ipv6.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='use_oif_addrs_only' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='keep_addr_on_down' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='seg6_enabled' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='enhanced_dad' type-id='3f1a6b60' visibility='default' filepath='include/linux/ipv6.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='addr_gen_mode' type-id='3f1a6b60' visibility='default' filepath='include/linux/ipv6.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='disable_policy' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='ndisc_tclass' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='sysctl_header' type-id='11b101bb' visibility='default' filepath='include/linux/ipv6.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/ipv6.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/ipv6.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/ipv6.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/ipv6.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_domain' is-struct='yes' visibility='default' is-declaration-only='yes' id='a667f60e'/>
+      <class-decl name='neighbour' is-struct='yes' visibility='default' is-declaration-only='yes' id='da0e76a0'/>
+      <class-decl name='net_generic' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/netns/generic.h' line='28' column='1' id='8e5f5512'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='1a99b3b8' visibility='default' filepath='include/net/netns/generic.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_ct_event_notifier' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='75' column='1' id='a27aef61'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fcn' type-id='117abbea' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_exp_event_notifier' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='161' column='1' id='602fd1a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fcn' type-id='c8fa3070' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_hook_entries' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/netfilter.h' line='100' column='1' id='85c08b52'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_hook_entries' type-id='1dc6a898' visibility='default' filepath='include/linux/netfilter.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hooks' type-id='84607bca' visibility='default' filepath='include/linux/netfilter.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_logger' is-struct='yes' visibility='default' is-declaration-only='yes' id='01c546da'/>
+      <class-decl name='nf_queue_handler' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='27' column='1' id='b77325d2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='outfn' type-id='c2147f48' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nf_hook_drop' type-id='9b92b29b' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pm_domain_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pm_domain.h' line='172' column='1' id='3bf19710'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list_node' type-id='72f469ec' visibility='default' filepath='include/linux/pm_domain.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/pm_domain.h' line='174' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pr_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='b45c773c'/>
+      <class-decl name='proc_dir_entry' size-in-bits='1408' is-struct='yes' visibility='default' filepath='fs/proc/internal.h' line='30' column='1' id='fe4ffa7a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='in_use' type-id='49178f86' visibility='default' filepath='fs/proc/internal.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='fs/proc/internal.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pde_openers' type-id='72f469ec' visibility='default' filepath='fs/proc/internal.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pde_unload_lock' type-id='fb4018a0' visibility='default' filepath='fs/proc/internal.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pde_unload_completion' type-id='389faaf7' visibility='default' filepath='fs/proc/internal.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='proc_iops' type-id='de2c232c' visibility='default' filepath='fs/proc/internal.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='proc_fops' type-id='61758ee5' visibility='default' filepath='fs/proc/internal.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='proc_dops' type-id='1ee57353' visibility='default' filepath='fs/proc/internal.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='' type-id='1371a02f' visibility='default' filepath='fs/proc/internal.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='write' type-id='7c2b18ab' visibility='default' filepath='fs/proc/internal.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='fs/proc/internal.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='state_size' type-id='f0981eeb' visibility='default' filepath='fs/proc/internal.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='low_ino' type-id='f0981eeb' visibility='default' filepath='fs/proc/internal.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nlink' type-id='6fa67d85' visibility='default' filepath='fs/proc/internal.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='fs/proc/internal.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='gid' type-id='094d8048' visibility='default' filepath='fs/proc/internal.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='size' type-id='69bf7bee' visibility='default' filepath='fs/proc/internal.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='parent' type-id='d077e928' visibility='default' filepath='fs/proc/internal.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='subdir' type-id='dec44472' visibility='default' filepath='fs/proc/internal.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='subdir_node' type-id='2a8a6332' visibility='default' filepath='fs/proc/internal.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='fs/proc/internal.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='fs/proc/internal.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1360'>
+          <var-decl name='namelen' type-id='f9b06939' visibility='default' filepath='fs/proc/internal.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1368'>
+          <var-decl name='inline_name' type-id='e84913bd' visibility='default' filepath='fs/proc/internal.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='prot_inuse' size-in-bits='2048' is-struct='yes' visibility='default' filepath='net/core/sock.c' line='3244' column='1' id='ac763c5d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='93e41790' visibility='default' filepath='net/core/sock.c' line='3245' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ring_buffer' is-struct='yes' visibility='default' is-declaration-only='yes' id='6efee8be'/>
+      <class-decl name='ring_buffer_iter' is-struct='yes' visibility='default' is-declaration-only='yes' id='563595d9'/>
+      <class-decl name='rq_qos' is-struct='yes' visibility='default' is-declaration-only='yes' id='e0a68fea'/>
+      <class-decl name='rt6_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='384b6d84'/>
+      <class-decl name='rt6_statistics' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='328' column='1' id='aa112583'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fib_nodes' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fib_route_nodes' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fib_rt_entries' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fib_rt_cache' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fib_discarded_routes' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='fib_rt_alloc' type-id='49178f86' visibility='default' filepath='include/net/ip6_fib.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fib_rt_uncache' type-id='49178f86' visibility='default' filepath='include/net/ip6_fib.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='seg6_pernet_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='990cce78'/>
+      <class-decl name='subsys_private' is-struct='yes' visibility='default' is-declaration-only='yes' id='4a19d21e'/>
+      <class-decl name='tcp_congestion_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='54718f09'/>
+      <class-decl name='tcp_fastopen_context' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/tcp.h' line='1671' column='1' id='f77d4717'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='5b02a6fc' visibility='default' filepath='include/net/tcp.h' line='1672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num' type-id='95e97e5e' visibility='default' filepath='include/net/tcp.h' line='1673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/tcp.h' line='1674' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timer_rand_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='f308a7ce'/>
+      <class-decl name='trace_array' size-in-bits='2368' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='246' column='1' id='e27b4e90'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='kernel/trace/trace.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='trace_buffer' type-id='72093c11' visibility='default' filepath='kernel/trace/trace.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='filtered_pids' type-id='1f6324ad' visibility='default' filepath='kernel/trace/trace.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_lock' type-id='641c41d1' visibility='default' filepath='kernel/trace/trace.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='buffer_disabled' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='stop_count' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='clock_id' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='nr_topts' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='clear_trace' type-id='b50a4934' visibility='default' filepath='kernel/trace/trace.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='buffer_percent' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='n_err_log_entries' type-id='f0981eeb' visibility='default' filepath='kernel/trace/trace.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='current_trace' type-id='0a18715a' visibility='default' filepath='kernel/trace/trace.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='trace_flags' type-id='f0981eeb' visibility='default' filepath='kernel/trace/trace.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='trace_flags_index' type-id='fc872715' visibility='default' filepath='kernel/trace/trace.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='kernel/trace/trace.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='start_lock' type-id='f5c90b3f' visibility='default' filepath='kernel/trace/trace.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='err_log' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='dir' type-id='27675065' visibility='default' filepath='kernel/trace/trace.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='options' type-id='27675065' visibility='default' filepath='kernel/trace/trace.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='percpu_dir' type-id='27675065' visibility='default' filepath='kernel/trace/trace.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='event_dir' type-id='27675065' visibility='default' filepath='kernel/trace/trace.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='topts' type-id='e9037327' visibility='default' filepath='kernel/trace/trace.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='systems' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='events' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='trace_marker_file' type-id='3d4ca6d2' visibility='default' filepath='kernel/trace/trace.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='tracing_cpumask' type-id='b16b461b' visibility='default' filepath='kernel/trace/trace.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='ref' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='trace_ref' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='time_stamp_abs_ref' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='hist_vars' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='326' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_buffer' size-in-bits='320' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='176' column='1' id='72093c11'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tr' type-id='898c1076' visibility='default' filepath='kernel/trace/trace.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='buffer' type-id='8462bc54' visibility='default' filepath='kernel/trace/trace.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='17642359' visibility='default' filepath='kernel/trace/trace.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='time_start' type-id='91ce1af9' visibility='default' filepath='kernel/trace/trace.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='181' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tracer' size-in-bits='1216' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='467' column='1' id='fd1f8b7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='kernel/trace/trace.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init' type-id='30b9fb16' visibility='default' filepath='kernel/trace/trace.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reset' type-id='578c706b' visibility='default' filepath='kernel/trace/trace.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='start' type-id='578c706b' visibility='default' filepath='kernel/trace/trace.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='stop' type-id='578c706b' visibility='default' filepath='kernel/trace/trace.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='update_thresh' type-id='30b9fb16' visibility='default' filepath='kernel/trace/trace.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='open' type-id='29bf40b4' visibility='default' filepath='kernel/trace/trace.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pipe_open' type-id='29bf40b4' visibility='default' filepath='kernel/trace/trace.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='close' type-id='29bf40b4' visibility='default' filepath='kernel/trace/trace.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pipe_close' type-id='29bf40b4' visibility='default' filepath='kernel/trace/trace.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='read' type-id='43a53075' visibility='default' filepath='kernel/trace/trace.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='splice_read' type-id='0d8953a0' visibility='default' filepath='kernel/trace/trace.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='print_header' type-id='0f294852' visibility='default' filepath='kernel/trace/trace.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='print_line' type-id='cfbdf512' visibility='default' filepath='kernel/trace/trace.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_flag' type-id='d01e1ab3' visibility='default' filepath='kernel/trace/trace.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='flag_changed' type-id='e3e70e04' visibility='default' filepath='kernel/trace/trace.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='next' type-id='0a18715a' visibility='default' filepath='kernel/trace/trace.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='flags' type-id='aef13606' visibility='default' filepath='kernel/trace/trace.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='enabled' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='print_max' type-id='b50a4934' visibility='default' filepath='kernel/trace/trace.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1192'>
+          <var-decl name='allow_instances' type-id='b50a4934' visibility='default' filepath='kernel/trace/trace.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1200'>
+          <var-decl name='noboot' type-id='b50a4934' visibility='default' filepath='kernel/trace/trace.h' line='508' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uevent_sock' is-struct='yes' visibility='default' is-declaration-only='yes' id='0c7ab04d'/>
+      <class-decl name='wake_irq' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/base/power/power.h' line='31' column='1' id='4657336c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/base/power/power.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='status' type-id='f0981eeb' visibility='default' filepath='drivers/base/power/power.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='drivers/base/power/power.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/base/power/power.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xt_table' is-struct='yes' visibility='default' is-declaration-only='yes' id='469df90e'/>
+      <array-type-def dimensions='1' type-id='30e60925' size-in-bits='832' id='e521ce61'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='97aa083d' size-in-bits='7680' id='d91bb67a'>
+        <subrange length='10' type-id='7ff19f0f' id='487da03a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='103da70a' size-in-bits='640' id='7b1498fd'>
+        <subrange length='10' type-id='7ff19f0f' id='487da03a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='2e1b0751' size-in-bits='4480' id='b25dce46'>
+        <subrange length='10' type-id='7ff19f0f' id='487da03a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='1354385d' size-in-bits='64' id='db98c084'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a7623477' size-in-bits='13056' id='f88f3d38'>
+        <subrange length='102' type-id='7ff19f0f' id='8590b11a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='39ec6fe5' size-in-bits='9152' id='be1ad65f'>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='84dc82b8' size-in-bits='infinite' id='f7aeb09b'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='192' id='fc293b5f'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='4096' id='53b70d6c'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='64' id='e4266c7e'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='96' id='e024279b'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='288' id='e415235d'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='infinite' id='1fdc7fa6'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='094d8048' size-in-bits='64' id='5fd0d2fb'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='12800' id='6f53db1b'>
+        <subrange length='100' type-id='7ff19f0f' id='4196563c'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='1664' id='5e747b58'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='2944' id='a835e1f5'>
+        <subrange length='23' type-id='7ff19f0f' id='fdd0f594'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='512' id='a8e1fb22'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='640' id='e4e01aff'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='768' id='e4e6d6c4'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='dd91f264' size-in-bits='128' id='efa46f39'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='2048' id='52f6d451'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='2432' id='4f05d88f'>
+        <subrange length='38' type-id='7ff19f0f' id='aa4ccdac'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='192' id='5d34b9c7'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='97851996' size-in-bits='infinite' id='687d975e'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e0324306' size-in-bits='1664' id='d1982c82'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='ad98c82f' size-in-bits='infinite' id='31f1649b'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='aac38d0b' size-in-bits='1280' id='f53c5bdb'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='39a43b40' size-in-bits='192' id='d82cf371'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='39a43b40' size-in-bits='320' id='94310593'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b92c8d0d' size-in-bits='1280' id='aca5b9e5'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b92c8d0d' size-in-bits='1600' id='68a92070'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='c25adaa0' size-in-bits='infinite' id='6b9809bc'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='fdbf7a0f' size-in-bits='112' id='a2b7d295'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='fdbf7a0f' size-in-bits='256' id='c8478d3d'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='736' id='bd44dad8'>
+        <subrange length='23' type-id='7ff19f0f' id='fdd0f594'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='19c2251e' size-in-bits='384' id='4e00dfcd'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='160' id='586ea944'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='192' id='5867ed7f'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='91ce1af9' size-in-bits='640' id='a4295685'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='1984' id='2f7ab612'>
+        <subrange length='31' type-id='7ff19f0f' id='ae5e1d19'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='2368' id='2b89ba50'>
+        <subrange length='37' type-id='7ff19f0f' id='aa6426fb'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='192' id='20a130cf'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='320' id='64af1365'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='512' id='6094c99c'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='512' id='47ba3182'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='ab0c2f56' size-in-bits='320' id='ec2b1499'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='30847fcd' size-in-bits='768' id='cf2a9adf'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a9d71093' size-in-bits='480' id='df6d2206'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='320' id='67c1c82c'>
+        <subrange length='10' type-id='7ff19f0f' id='487da03a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='448' id='27cbf0c8'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='64' id='0d532ec1'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='96' id='0955670c'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='192' id='0d5c291d'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='7680' id='1868bbfa'>
+        <subrange length='120' type-id='7ff19f0f' id='1ec4f032'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='1024' id='d2baa450'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='1792' id='8bbc0f7f'>
+        <subrange length='28' type-id='7ff19f0f' id='3db583d7'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='1856' id='4fbdefa2'>
+        <subrange length='29' type-id='7ff19f0f' id='01b8f6fa'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='192' id='3461381a'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='7359adad' size-in-bits='960' id='aa6663dd'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='3584' id='45f161cc'>
+        <subrange length='56' type-id='7ff19f0f' id='f8137894'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='7359adad' size-in-bits='960' id='625e8699'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='384' id='f0691bd3'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='576' id='307ac9b4'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='128' id='24ae0315'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='9b61d1a6' size-in-bits='384' id='bd1ec77b'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='be9189df' size-in-bits='39936' id='83aedf28'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='459f31a7' size-in-bits='512' id='9509a9de'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='caf9c470' size-in-bits='512' id='c2eeb70e'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='seq_operations' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/seq_file.h' line='32' column='1' id='c4b04493'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='a46b05a0' visibility='default' filepath='include/linux/seq_file.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stop' type-id='6ba28d1c' visibility='default' filepath='include/linux/seq_file.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='b6ba26fa' visibility='default' filepath='include/linux/seq_file.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='show' type-id='0131eb61' visibility='default' filepath='include/linux/seq_file.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='seq_file' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/seq_file.h' line='16' column='1' id='f3415518'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='26a90f95' visibility='default' filepath='include/linux/seq_file.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/seq_file.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='from' type-id='b59d7dce' visibility='default' filepath='include/linux/seq_file.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='count' type-id='b59d7dce' visibility='default' filepath='include/linux/seq_file.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pad_until' type-id='b59d7dce' visibility='default' filepath='include/linux/seq_file.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='index' type-id='69bf7bee' visibility='default' filepath='include/linux/seq_file.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read_pos' type-id='69bf7bee' visibility='default' filepath='include/linux/seq_file.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='version' type-id='91ce1af9' visibility='default' filepath='include/linux/seq_file.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/seq_file.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='op' type-id='943a1b48' visibility='default' filepath='include/linux/seq_file.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='poll_event' type-id='95e97e5e' visibility='default' filepath='include/linux/seq_file.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='file' type-id='5d92c9e0' visibility='default' filepath='include/linux/seq_file.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/seq_file.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bdi_writeback' size-in-bits='6080' is-struct='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='130' column='1' id='ac0aeb1d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bdi' type-id='ef4fae1c' visibility='default' filepath='include/linux/backing-dev-defs.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='last_old_flush' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='b_dirty' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='b_io' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='b_more_io' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='b_dirty_time' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/backing-dev-defs.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='stat' type-id='aca5b9e5' visibility='default' filepath='include/linux/backing-dev-defs.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='congested' type-id='d97a04ce' visibility='default' filepath='include/linux/backing-dev-defs.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='bw_time_stamp' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='dirtied_stamp' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='written_stamp' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='write_bandwidth' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='avg_write_bandwidth' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dirty_ratelimit' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='balanced_dirty_ratelimit' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='completions' type-id='587caff2' visibility='default' filepath='include/linux/backing-dev-defs.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='dirty_exceeded' type-id='95e97e5e' visibility='default' filepath='include/linux/backing-dev-defs.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2976'>
+          <var-decl name='start_all_reason' type-id='c1602c7a' visibility='default' filepath='include/linux/backing-dev-defs.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='work_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/backing-dev-defs.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='work_list' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='dwork' type-id='5ad6e0ef' visibility='default' filepath='include/linux/backing-dev-defs.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='dirty_sleep' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='bdi_node' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='include/linux/backing-dev-defs.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='memcg_completions' type-id='587caff2' visibility='default' filepath='include/linux/backing-dev-defs.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='memcg_css' type-id='cfff5953' visibility='default' filepath='include/linux/backing-dev-defs.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='blkcg_css' type-id='cfff5953' visibility='default' filepath='include/linux/backing-dev-defs.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='memcg_node' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='blkcg_node' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='' type-id='93944b10' visibility='default' filepath='include/linux/backing-dev-defs.h' line='181' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='backing_dev_info' size-in-bits='9344' is-struct='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='188' column='1' id='c0badb3c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='91ce1af9' visibility='default' filepath='include/linux/backing-dev-defs.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='include/linux/backing-dev-defs.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bdi_list' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ra_pages' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_pages' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='congested_fn' type-id='84127e50' visibility='default' filepath='include/linux/backing-dev-defs.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='congested_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/backing-dev-defs.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/backing-dev-defs.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='refcnt' type-id='400fb07b' visibility='default' filepath='include/linux/backing-dev-defs.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='capabilities' type-id='f0981eeb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='min_ratio' type-id='f0981eeb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='max_ratio' type-id='f0981eeb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='max_prop_frac' type-id='f0981eeb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='tot_write_bandwidth' type-id='f22a8abb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='wb' type-id='ac0aeb1d' visibility='default' filepath='include/linux/backing-dev-defs.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='wb_list' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='cgwb_tree' type-id='d39738ac' visibility='default' filepath='include/linux/backing-dev-defs.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='cgwb_congested_tree' type-id='dec44472' visibility='default' filepath='include/linux/backing-dev-defs.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='cgwb_release_mutex' type-id='925167dc' visibility='default' filepath='include/linux/backing-dev-defs.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='wb_switch_rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/backing-dev-defs.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='wb_waitq' type-id='b5ab048f' visibility='default' filepath='include/linux/backing-dev-defs.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/backing-dev-defs.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='dev_name' type-id='59daf3ef' visibility='default' filepath='include/linux/backing-dev-defs.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='owner' type-id='fa0b179b' visibility='default' filepath='include/linux/backing-dev-defs.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='laptop_mode_wb_timer' type-id='abe41e67' visibility='default' filepath='include/linux/backing-dev-defs.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='debug_dir' type-id='27675065' visibility='default' filepath='include/linux/backing-dev-defs.h' line='229' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='congested_fn' type-id='dd42ab12' filepath='include/linux/backing-dev-defs.h' line='36' column='1' id='6e3695a3'/>
+      <class-decl name='device' size-in-bits='7360' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='1251' column='1' id='66e487eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/device.h' line='1252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/device.h' line='1253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='p' type-id='0d3b0dcf' visibility='default' filepath='include/linux/device.h' line='1255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='init_name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='1257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='type' type-id='cd28613b' visibility='default' filepath='include/linux/device.h' line='1258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bus' type-id='5e2671f8' visibility='default' filepath='include/linux/device.h' line='1260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='driver' type-id='00c7b870' visibility='default' filepath='include/linux/device.h' line='1261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='platform_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/device.h' line='1263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/device.h' line='1265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/device.h' line='1270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='links' type-id='2d178f63' visibility='default' filepath='include/linux/device.h' line='1274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='power' type-id='f3166b6b' visibility='default' filepath='include/linux/device.h' line='1275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='pm_domain' type-id='a4375c03' visibility='default' filepath='include/linux/device.h' line='1276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='msi_domain' type-id='7544e824' visibility='default' filepath='include/linux/device.h' line='1279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='pins' type-id='fa43ef1d' visibility='default' filepath='include/linux/device.h' line='1282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='msi_list' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='dma_ops' type-id='ac58af12' visibility='default' filepath='include/linux/device.h' line='1288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='dma_mask' type-id='3df9fd28' visibility='default' filepath='include/linux/device.h' line='1289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='coherent_dma_mask' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='bus_dma_mask' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='dma_pfn_offset' type-id='7359adad' visibility='default' filepath='include/linux/device.h' line='1296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='dma_parms' type-id='9b4aaf1f' visibility='default' filepath='include/linux/device.h' line='1298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='dma_pools' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='dma_mem' type-id='5bfba86c' visibility='default' filepath='include/linux/device.h' line='1303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='cma_area' type-id='6f67b38a' visibility='default' filepath='include/linux/device.h' line='1307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='archdata' type-id='d3e142f5' visibility='default' filepath='include/linux/device.h' line='1311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/device.h' line='1313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/device.h' line='1314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='devt' type-id='8504f260' visibility='default' filepath='include/linux/device.h' line='1319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/linux/device.h' line='1320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='devres_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/device.h' line='1322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='devres_head' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='class' type-id='67aca04f' visibility='default' filepath='include/linux/device.h' line='1325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='1326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='release' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='1328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='iommu_group' type-id='0b19fc54' visibility='default' filepath='include/linux/device.h' line='1329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='iommu_fwspec' type-id='1979c577' visibility='default' filepath='include/linux/device.h' line='1330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='iommu_param' type-id='506df562' visibility='default' filepath='include/linux/device.h' line='1331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='offline_disabled' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='offline' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='of_node_reused' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='state_synced' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='dma_coherent' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='android_kabi_reserved5' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='android_kabi_reserved6' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='android_kabi_reserved7' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='android_kabi_reserved8' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1349' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_type' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='825' column='1' id='bdae35f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='826' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='827' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uevent' type-id='22deb949' visibility='default' filepath='include/linux/device.h' line='828' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='devnode' type-id='b72fdee5' visibility='default' filepath='include/linux/device.h' line='829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pm' type-id='3fab024e' visibility='default' filepath='include/linux/device.h' line='833' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='278' column='1' id='3ea82289'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='complete' type-id='dd787f72' visibility='default' filepath='include/linux/pm.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='suspend' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='resume' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='freeze' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='thaw' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='poweroff' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='restore' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='suspend_late' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='resume_early' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='freeze_late' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='thaw_early' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='poweroff_late' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='restore_early' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='suspend_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='resume_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='freeze_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='thaw_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='poweroff_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='restore_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='runtime_suspend' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='runtime_resume' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='runtime_idle' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='301' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bus_type' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='123' column='1' id='b31bfc8a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev_name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev_root' type-id='fa0b179b' visibility='default' filepath='include/linux/device.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bus_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='drv_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='match' type-id='2f28f04c' visibility='default' filepath='include/linux/device.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='uevent' type-id='22deb949' visibility='default' filepath='include/linux/device.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='probe' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sync_state' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='remove' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='shutdown' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='online' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='offline' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='suspend' type-id='df416a94' visibility='default' filepath='include/linux/device.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='resume' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='num_vf' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='dma_configure' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='pm' type-id='3fab024e' visibility='default' filepath='include/linux/device.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='iommu_ops' type-id='f1ac64d0' visibility='default' filepath='include/linux/device.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='p' type-id='5da77304' visibility='default' filepath='include/linux/device.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='lock_key' type-id='47479831' visibility='default' filepath='include/linux/device.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='need_parent_lock' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_driver' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='389' column='1' id='fe007c02'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bus' type-id='5e2671f8' visibility='default' filepath='include/linux/device.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/device.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mod_name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='suppress_bind_attrs' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='probe_type' type-id='171c98b7' visibility='default' filepath='include/linux/device.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_match_table' type-id='e5ce629e' visibility='default' filepath='include/linux/device.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='acpi_match_table' type-id='5b62aa60' visibility='default' filepath='include/linux/device.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='probe' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sync_state' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='remove' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='shutdown' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='suspend' type-id='df416a94' visibility='default' filepath='include/linux/device.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='resume' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dev_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='pm' type-id='3fab024e' visibility='default' filepath='include/linux/device.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='coredump' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='p' type-id='52abf1d3' visibility='default' filepath='include/linux/device.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='419' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_event_call' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='254' column='1' id='fd48a6e7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/trace_events.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='class' type-id='3570c570' visibility='default' filepath='include/linux/trace_events.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='7d3eb798' visibility='default' filepath='include/linux/trace_events.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='event' type-id='78b26ac9' visibility='default' filepath='include/linux/trace_events.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='print_fmt' type-id='26a90f95' visibility='default' filepath='include/linux/trace_events.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='filter' type-id='26461068' visibility='default' filepath='include/linux/trace_events.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mod' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='perf_refcount' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='perf_events' type-id='030d0b18' visibility='default' filepath='include/linux/trace_events.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='prog_array' type-id='380c7edc' visibility='default' filepath='include/linux/trace_events.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='perf_perm' type-id='7fa32aba' visibility='default' filepath='include/linux/trace_events.h' line='283' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_event_class' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='190' column='1' id='a2689372'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='system' type-id='80f4b756' visibility='default' filepath='include/linux/trace_events.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='probe' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='perf_probe' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reg' type-id='50ec573b' visibility='default' filepath='include/linux/trace_events.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='define_fields' type-id='9a5ed472' visibility='default' filepath='include/linux/trace_events.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_fields' type-id='17898fce' visibility='default' filepath='include/linux/trace_events.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fields' type-id='72f469ec' visibility='default' filepath='include/linux/trace_events.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='raw_init' type-id='9a5ed472' visibility='default' filepath='include/linux/trace_events.h' line='201' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='trace_reg' filepath='include/linux/trace_events.h' line='170' column='1' id='7fa6eeb8'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TRACE_REG_REGISTER' value='0'/>
+        <enumerator name='TRACE_REG_UNREGISTER' value='1'/>
+        <enumerator name='TRACE_REG_PERF_REGISTER' value='2'/>
+        <enumerator name='TRACE_REG_PERF_UNREGISTER' value='3'/>
+        <enumerator name='TRACE_REG_PERF_OPEN' value='4'/>
+        <enumerator name='TRACE_REG_PERF_CLOSE' value='5'/>
+        <enumerator name='TRACE_REG_PERF_ADD' value='6'/>
+        <enumerator name='TRACE_REG_PERF_DEL' value='7'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/trace_events.h' line='257' column='1' id='7d3eb798'>
+        <data-member access='private'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/trace_events.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tp' type-id='08e531de' visibility='default' filepath='include/linux/trace_events.h' line='260' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='trace_event' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='124' column='1' id='78b26ac9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='03a4a074' visibility='default' filepath='include/linux/trace_events.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/trace_events.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='funcs' type-id='d6d37d27' visibility='default' filepath='include/linux/trace_events.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_event_functions' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='117' column='1' id='195ea87f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='trace' type-id='8e7f627c' visibility='default' filepath='include/linux/trace_events.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='raw' type-id='8e7f627c' visibility='default' filepath='include/linux/trace_events.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hex' type-id='8e7f627c' visibility='default' filepath='include/linux/trace_events.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='binary' type-id='8e7f627c' visibility='default' filepath='include/linux/trace_events.h' line='121' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='trace_print_func' type-id='ff826f29' filepath='include/linux/trace_events.h' line='114' column='1' id='8e7f627c'/>
+      <enum-decl name='print_line_t' filepath='include/linux/trace_events.h' line='135' column='1' id='b1a0a119'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TRACE_TYPE_PARTIAL_LINE' value='0'/>
+        <enumerator name='TRACE_TYPE_HANDLED' value='1'/>
+        <enumerator name='TRACE_TYPE_UNHANDLED' value='2'/>
+        <enumerator name='TRACE_TYPE_NO_CONSUME' value='3'/>
+      </enum-decl>
+      <class-decl name='trace_iterator' size-in-bits='67456' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='74' column='1' id='60588bb1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tr' type-id='898c1076' visibility='default' filepath='include/linux/trace_events.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='trace' type-id='0a18715a' visibility='default' filepath='include/linux/trace_events.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='trace_buffer' type-id='573a5ee9' visibility='default' filepath='include/linux/trace_events.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cpu_file' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/trace_events.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='buffer_iter' type-id='93407a41' visibility='default' filepath='include/linux/trace_events.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='iter_flags' type-id='7359adad' visibility='default' filepath='include/linux/trace_events.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tmp_seq' type-id='c5078f42' visibility='default' filepath='include/linux/trace_events.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33792'>
+          <var-decl name='started' type-id='b16b461b' visibility='default' filepath='include/linux/trace_events.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33856'>
+          <var-decl name='snapshot' type-id='b50a4934' visibility='default' filepath='include/linux/trace_events.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33920'>
+          <var-decl name='seq' type-id='c5078f42' visibility='default' filepath='include/linux/trace_events.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67008'>
+          <var-decl name='ent' type-id='aa4b1eb5' visibility='default' filepath='include/linux/trace_events.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67072'>
+          <var-decl name='lost_events' type-id='7359adad' visibility='default' filepath='include/linux/trace_events.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67136'>
+          <var-decl name='leftover' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67168'>
+          <var-decl name='ent_size' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67200'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67264'>
+          <var-decl name='ts' type-id='91ce1af9' visibility='default' filepath='include/linux/trace_events.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67328'>
+          <var-decl name='pos' type-id='69bf7bee' visibility='default' filepath='include/linux/trace_events.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='67392'>
+          <var-decl name='idx' type-id='bd54fe1a' visibility='default' filepath='include/linux/trace_events.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_seq' size-in-bits='33088' is-struct='yes' visibility='default' filepath='include/linux/trace_seq.h' line='14' column='1' id='c5078f42'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buffer' type-id='d16c6df4' visibility='default' filepath='include/linux/trace_seq.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32768'>
+          <var-decl name='seq' type-id='857188d6' visibility='default' filepath='include/linux/trace_seq.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33024'>
+          <var-decl name='full' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_seq.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='seq_buf' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/seq_buf.h' line='19' column='1' id='857188d6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buffer' type-id='26a90f95' visibility='default' filepath='include/linux/seq_buf.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/seq_buf.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='b59d7dce' visibility='default' filepath='include/linux/seq_buf.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='readpos' type-id='69bf7bee' visibility='default' filepath='include/linux/seq_buf.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='cpumask_var_t' type-id='db98c084' filepath='include/linux/cpumask.h' line='751' column='1' id='b16b461b'/>
+      <class-decl name='trace_entry' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/trace_events.h' line='60' column='1' id='1986ca65'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='8efea9e5' visibility='default' filepath='include/linux/trace_events.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='002ac4a6' visibility='default' filepath='include/linux/trace_events.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='preempt_count' type-id='002ac4a6' visibility='default' filepath='include/linux/trace_events.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pid' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog_array' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='516' column='1' id='c75c7b06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/bpf.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='items' type-id='3f814540' visibility='default' filepath='include/linux/bpf.h' line='518' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog_array_item' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='511' column='1' id='f67e137c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog' type-id='bdcee7ae' visibility='default' filepath='include/linux/bpf.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cgroup_storage' type-id='dcd9fb4c' visibility='default' filepath='include/linux/bpf.h' line='513' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_cgroup_storage' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/bpf-cgroup.h' line='42' column='1' id='15881542'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='dad3eb71' visibility='default' filepath='include/linux/bpf-cgroup.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='map' type-id='b6a33eaf' visibility='default' filepath='include/linux/bpf-cgroup.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='key' type-id='d8d7111e' visibility='default' filepath='include/linux/bpf-cgroup.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/bpf-cgroup.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='node' type-id='2a8a6332' visibility='default' filepath='include/linux/bpf-cgroup.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/bpf-cgroup.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/bpf-cgroup.h' line='43' column='1' id='dad3eb71'>
+        <data-member access='private'>
+          <var-decl name='buf' type-id='b1253746' visibility='default' filepath='include/linux/bpf-cgroup.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='percpu_buf' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf-cgroup.h' line='45' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='bpf_storage_buffer' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bpf-cgroup.h' line='37' column='1' id='0ef5c7e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/bpf-cgroup.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='e84913bd' visibility='default' filepath='include/linux/bpf-cgroup.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_cgroup_storage_key' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='79' column='1' id='d8d7111e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cgroup_inode_id' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='attach_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_event' size-in-bits='7872' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='575' column='1' id='7263c472'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sibling_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='group_node' type-id='2a8a6332' visibility='default' filepath='include/linux/perf_event.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='group_index' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='migrate_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='hlist_entry' type-id='03a4a074' visibility='default' filepath='include/linux/perf_event.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='active_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='nr_siblings' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='event_caps' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='group_caps' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='group_leader' type-id='2bf16f5a' visibility='default' filepath='include/linux/perf_event.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='pmu' type-id='0906f5b9' visibility='default' filepath='include/linux/perf_event.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='pmu_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='state' type-id='31fdb95a' visibility='default' filepath='include/linux/perf_event.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='attach_state' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='count' type-id='7da7300e' visibility='default' filepath='include/linux/perf_event.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='child_count' type-id='28ee064c' visibility='default' filepath='include/linux/perf_event.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='total_time_enabled' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='total_time_running' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='tstamp' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='shadow_ctx_time' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='attr' type-id='e57536d9' visibility='default' filepath='include/linux/perf_event.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='header_size' type-id='1dc6a898' visibility='default' filepath='include/linux/perf_event.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2704'>
+          <var-decl name='id_header_size' type-id='1dc6a898' visibility='default' filepath='include/linux/perf_event.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='read_size' type-id='1dc6a898' visibility='default' filepath='include/linux/perf_event.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='hw' type-id='b594b0c9' visibility='default' filepath='include/linux/perf_event.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='ctx' type-id='b9419dc6' visibility='default' filepath='include/linux/perf_event.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='refcount' type-id='f22a8abb' visibility='default' filepath='include/linux/perf_event.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='child_total_time_enabled' type-id='28ee064c' visibility='default' filepath='include/linux/perf_event.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='child_total_time_running' type-id='28ee064c' visibility='default' filepath='include/linux/perf_event.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='child_mutex' type-id='925167dc' visibility='default' filepath='include/linux/perf_event.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='child_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='parent' type-id='2bf16f5a' visibility='default' filepath='include/linux/perf_event.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='oncpu' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5024'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='owner_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='owner' type-id='f23e2572' visibility='default' filepath='include/linux/perf_event.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='mmap_mutex' type-id='925167dc' visibility='default' filepath='include/linux/perf_event.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='mmap_count' type-id='49178f86' visibility='default' filepath='include/linux/perf_event.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='rb' type-id='8462bc54' visibility='default' filepath='include/linux/perf_event.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='rb_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='674' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='rcu_batches' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='rcu_pending' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='waitq' type-id='b5ab048f' visibility='default' filepath='include/linux/perf_event.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='fasync' type-id='5bb9c75d' visibility='default' filepath='include/linux/perf_event.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='pending_wakeup' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='pending_kill' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='pending_disable' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='pending' type-id='9281c70f' visibility='default' filepath='include/linux/perf_event.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='event_limit' type-id='49178f86' visibility='default' filepath='include/linux/perf_event.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='addr_filters' type-id='54885433' visibility='default' filepath='include/linux/perf_event.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='addr_filter_ranges' type-id='200ffa89' visibility='default' filepath='include/linux/perf_event.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='addr_filters_gen' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='aux_event' type-id='2bf16f5a' visibility='default' filepath='include/linux/perf_event.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='destroy' type-id='aed2baa8' visibility='default' filepath='include/linux/perf_event.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/perf_event.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='ns' type-id='b816e1d0' visibility='default' filepath='include/linux/perf_event.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='id' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='clock' type-id='0e70db3e' visibility='default' filepath='include/linux/perf_event.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='overflow_handler' type-id='20a2e4e6' visibility='default' filepath='include/linux/perf_event.h' line='706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='overflow_handler_context' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='orig_overflow_handler' type-id='20a2e4e6' visibility='default' filepath='include/linux/perf_event.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='prog' type-id='bdcee7ae' visibility='default' filepath='include/linux/perf_event.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='tp_event' type-id='23d6768d' visibility='default' filepath='include/linux/perf_event.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='filter' type-id='26461068' visibility='default' filepath='include/linux/perf_event.h' line='715' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='sb_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='728' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pmu' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='255' column='1' id='e205b6f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/linux/perf_event.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/perf_event.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='attr_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/perf_event.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='attr_update' type-id='c97de1ac' visibility='default' filepath='include/linux/perf_event.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/perf_event.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='capabilities' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pmu_disable_count' type-id='7292109c' visibility='default' filepath='include/linux/perf_event.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pmu_cpu_context' type-id='090503c3' visibility='default' filepath='include/linux/perf_event.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='exclusive_cnt' type-id='49178f86' visibility='default' filepath='include/linux/perf_event.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='task_ctx_nr' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='hrtimer_interval_ms' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='nr_addr_filters' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='pmu_enable' type-id='dae07608' visibility='default' filepath='include/linux/perf_event.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pmu_disable' type-id='dae07608' visibility='default' filepath='include/linux/perf_event.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='event_init' type-id='8d78edef' visibility='default' filepath='include/linux/perf_event.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='event_mapped' type-id='eddb9394' visibility='default' filepath='include/linux/perf_event.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='event_unmapped' type-id='eddb9394' visibility='default' filepath='include/linux/perf_event.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='add' type-id='afc38bc6' visibility='default' filepath='include/linux/perf_event.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='del' type-id='6c534e17' visibility='default' filepath='include/linux/perf_event.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='start' type-id='6c534e17' visibility='default' filepath='include/linux/perf_event.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='stop' type-id='6c534e17' visibility='default' filepath='include/linux/perf_event.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='read' type-id='aed2baa8' visibility='default' filepath='include/linux/perf_event.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='start_txn' type-id='f865774a' visibility='default' filepath='include/linux/perf_event.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='commit_txn' type-id='0cd76695' visibility='default' filepath='include/linux/perf_event.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='cancel_txn' type-id='dae07608' visibility='default' filepath='include/linux/perf_event.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='event_idx' type-id='8d78edef' visibility='default' filepath='include/linux/perf_event.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='sched_task' type-id='54df184d' visibility='default' filepath='include/linux/perf_event.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='task_ctx_size' type-id='b59d7dce' visibility='default' filepath='include/linux/perf_event.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='setup_aux' type-id='e91cc304' visibility='default' filepath='include/linux/perf_event.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='free_aux' type-id='b7f9d8e6' visibility='default' filepath='include/linux/perf_event.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='addr_filters_validate' type-id='6668d13a' visibility='default' filepath='include/linux/perf_event.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='addr_filters_sync' type-id='aed2baa8' visibility='default' filepath='include/linux/perf_event.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='aux_output_match' type-id='8d78edef' visibility='default' filepath='include/linux/perf_event.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='filter_match' type-id='8d78edef' visibility='default' filepath='include/linux/perf_event.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='check_period' type-id='36f91979' visibility='default' filepath='include/linux/perf_event.h' line='469' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_cpu_context' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='809' column='1' id='4448fdd3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctx' type-id='9d67acd6' visibility='default' filepath='include/linux/perf_event.h' line='810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='task_ctx' type-id='b9419dc6' visibility='default' filepath='include/linux/perf_event.h' line='811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='active_oncpu' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='exclusive' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='813' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='hrtimer_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/perf_event.h' line='815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='hrtimer' type-id='b6993efc' visibility='default' filepath='include/linux/perf_event.h' line='816' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='hrtimer_interval' type-id='fbc017ef' visibility='default' filepath='include/linux/perf_event.h' line='817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='hrtimer_active' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='818' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='sched_cb_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='825' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='sched_cb_usage' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='826' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='online' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='828' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_event_context' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='743' column='1' id='9d67acd6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pmu' type-id='0906f5b9' visibility='default' filepath='include/linux/perf_event.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/perf_event.h' line='749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/perf_event.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='active_ctx_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pinned_groups' type-id='3643bc2a' visibility='default' filepath='include/linux/perf_event.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flexible_groups' type-id='3643bc2a' visibility='default' filepath='include/linux/perf_event.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pinned_active' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='flexible_active' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nr_events' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='nr_active' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='is_active' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='nr_stat' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='nr_freq' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='rotate_disable' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rotate_necessary' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='refcount' type-id='64615833' visibility='default' filepath='include/linux/perf_event.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/perf_event.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='time' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='timestamp' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='parent_ctx' type-id='b9419dc6' visibility='default' filepath='include/linux/perf_event.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='parent_gen' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='generation' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='pin_count' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='792' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='task_ctx_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/perf_event.h' line='797' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_event_groups' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='733' column='1' id='3643bc2a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tree' type-id='dec44472' visibility='default' filepath='include/linux/perf_event.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='index' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='735' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rq' size-in-bits='25088' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='859' column='1' id='d5ee6a94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last_load_update_tick' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='last_blocked_load_update_tick' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='has_blocked_load' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='877' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='nohz_tick_stopped' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nohz_flags' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='880' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nr_load_updates' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nr_switches' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='uclamp' type-id='cf2a9adf' visibility='default' filepath='kernel/sched/sched.h' line='888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='uclamp_flags' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='cfs' type-id='feeb4c2f' visibility='default' filepath='kernel/sched/sched.h' line='893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='rt' type-id='e648d771' visibility='default' filepath='kernel/sched/sched.h' line='894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18240'>
+          <var-decl name='dl' type-id='53d038df' visibility='default' filepath='kernel/sched/sched.h' line='895' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19072'>
+          <var-decl name='leaf_cfs_rq_list' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='899' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19200'>
+          <var-decl name='tmp_alone_branch' type-id='e84b031a' visibility='default' filepath='kernel/sched/sched.h' line='900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19264'>
+          <var-decl name='nr_uninterruptible' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='curr' type-id='f23e2572' visibility='default' filepath='kernel/sched/sched.h' line='911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19392'>
+          <var-decl name='idle' type-id='f23e2572' visibility='default' filepath='kernel/sched/sched.h' line='912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19456'>
+          <var-decl name='stop' type-id='f23e2572' visibility='default' filepath='kernel/sched/sched.h' line='913' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19520'>
+          <var-decl name='next_balance' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19584'>
+          <var-decl name='prev_mm' type-id='df4b7819' visibility='default' filepath='kernel/sched/sched.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19648'>
+          <var-decl name='clock_update_flags' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='917' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19712'>
+          <var-decl name='clock' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19968'>
+          <var-decl name='clock_task' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='920' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='clock_pelt' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20096'>
+          <var-decl name='lost_idle_time' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20160'>
+          <var-decl name='nr_iowait' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='924' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20192'>
+          <var-decl name='membarrier_state' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20224'>
+          <var-decl name='rd' type-id='c13bca88' visibility='default' filepath='kernel/sched/sched.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20288'>
+          <var-decl name='sd' type-id='e9d32201' visibility='default' filepath='kernel/sched/sched.h' line='932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20352'>
+          <var-decl name='cpu_capacity' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20416'>
+          <var-decl name='cpu_capacity_orig' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20480'>
+          <var-decl name='balance_callback' type-id='69c138b1' visibility='default' filepath='kernel/sched/sched.h' line='937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20544'>
+          <var-decl name='idle_balance' type-id='002ac4a6' visibility='default' filepath='kernel/sched/sched.h' line='939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20608'>
+          <var-decl name='misfit_task_load' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20672'>
+          <var-decl name='active_balance' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20704'>
+          <var-decl name='push_cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20736'>
+          <var-decl name='active_balance_work' type-id='8eb07132' visibility='default' filepath='kernel/sched/sched.h' line='946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21056'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='949' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21088'>
+          <var-decl name='online' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='950' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21120'>
+          <var-decl name='cfs_tasks' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21504'>
+          <var-decl name='avg_rt' type-id='629c8d83' visibility='default' filepath='kernel/sched/sched.h' line='954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22016'>
+          <var-decl name='avg_dl' type-id='629c8d83' visibility='default' filepath='kernel/sched/sched.h' line='955' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22528'>
+          <var-decl name='avg_irq' type-id='629c8d83' visibility='default' filepath='kernel/sched/sched.h' line='957' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23040'>
+          <var-decl name='idle_stamp' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23104'>
+          <var-decl name='avg_idle' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='960' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23168'>
+          <var-decl name='max_idle_balance_cost' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='963' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23232'>
+          <var-decl name='prev_irq_time' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='967' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23296'>
+          <var-decl name='prev_steal_time' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='970' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23360'>
+          <var-decl name='calc_load_update' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23424'>
+          <var-decl name='calc_load_active' type-id='bd54fe1a' visibility='default' filepath='kernel/sched/sched.h' line='978' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23488'>
+          <var-decl name='hrtick_csd_pending' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23552'>
+          <var-decl name='hrtick_csd' type-id='223a68bd' visibility='default' filepath='kernel/sched/sched.h' line='983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23808'>
+          <var-decl name='hrtick_timer' type-id='b6993efc' visibility='default' filepath='kernel/sched/sched.h' line='985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24384'>
+          <var-decl name='rq_sched_info' type-id='59ddd03d' visibility='default' filepath='kernel/sched/sched.h' line='990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24640'>
+          <var-decl name='rq_cpu_time' type-id='3a47d82b' visibility='default' filepath='kernel/sched/sched.h' line='991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24704'>
+          <var-decl name='yld_count' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24736'>
+          <var-decl name='sched_count' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24768'>
+          <var-decl name='sched_goidle' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24800'>
+          <var-decl name='ttwu_count' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24832'>
+          <var-decl name='ttwu_local' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24896'>
+          <var-decl name='wake_list' type-id='77df194e' visibility='default' filepath='kernel/sched/sched.h' line='1007' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24960'>
+          <var-decl name='idle_state' type-id='2e3e746d' visibility='default' filepath='kernel/sched/sched.h' line='1012' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uclamp_rq' size-in-bits='384' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='844' column='1' id='30847fcd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bucket' type-id='ec2b1499' visibility='default' filepath='kernel/sched/sched.h' line='846' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uclamp_bucket' size-in-bits='64' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='817' column='1' id='ab0c2f56'>
+        <data-member access='public' layout-offset-in-bits='53'>
+          <var-decl name='value' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='818' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tasks' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='819' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='512' is-struct='yes' is-anonymous='yes' visibility='default' filepath='kernel/sched/sched.h' line='528' column='1' id='dbb6a82c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='load_avg' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='util_avg' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='runnable_sum' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='533' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_subsys_state' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='133' column='1' id='7f3df443'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cgroup' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ss' type-id='dc91d125' visibility='default' filepath='include/linux/cgroup-defs.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='include/linux/cgroup-defs.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sibling' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rstat_css_node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='serial_nr' type-id='91ce1af9' visibility='default' filepath='include/linux/cgroup-defs.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='online_cnt' type-id='49178f86' visibility='default' filepath='include/linux/cgroup-defs.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='destroy_work' type-id='ef9025d0' visibility='default' filepath='include/linux/cgroup-defs.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='destroy_rwork' type-id='7c0b9fdb' visibility='default' filepath='include/linux/cgroup-defs.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='parent' type-id='cfff5953' visibility='default' filepath='include/linux/cgroup-defs.h' line='180' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup' size-in-bits='18624' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='351' column='1' id='ab9643dd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='self' type-id='7f3df443' visibility='default' filepath='include/linux/cgroup-defs.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/cgroup-defs.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='level' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='max_depth' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='nr_descendants' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='nr_dying_descendants' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='max_descendants' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='nr_populated_csets' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2464'>
+          <var-decl name='nr_populated_domain_children' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='nr_populated_threaded_children' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='nr_threaded_children' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='kn' type-id='150efd3f' visibility='default' filepath='include/linux/cgroup-defs.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='procs_file' type-id='37a4ee40' visibility='default' filepath='include/linux/cgroup-defs.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='events_file' type-id='37a4ee40' visibility='default' filepath='include/linux/cgroup-defs.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='subtree_control' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3792'>
+          <var-decl name='subtree_ss_mask' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3808'>
+          <var-decl name='old_subtree_control' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3824'>
+          <var-decl name='old_subtree_ss_mask' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='subsys' type-id='7975e215' visibility='default' filepath='include/linux/cgroup-defs.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='root' type-id='aede2cf0' visibility='default' filepath='include/linux/cgroup-defs.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='cset_links' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='e_csets' type-id='e4e6d6c4' visibility='default' filepath='include/linux/cgroup-defs.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='dom_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='old_dom_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='rstat_cpu' type-id='d8e759a7' visibility='default' filepath='include/linux/cgroup-defs.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='rstat_css_list' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='pending_bstat' type-id='cfd8587e' visibility='default' filepath='include/linux/cgroup-defs.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='bstat' type-id='cfd8587e' visibility='default' filepath='include/linux/cgroup-defs.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='prev_cputime' type-id='9c7bf560' visibility='default' filepath='include/linux/cgroup-defs.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='pidlists' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='pidlist_mutex' type-id='925167dc' visibility='default' filepath='include/linux/cgroup-defs.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='offline_waitq' type-id='b5ab048f' visibility='default' filepath='include/linux/cgroup-defs.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='release_agent_work' type-id='ef9025d0' visibility='default' filepath='include/linux/cgroup-defs.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='psi' type-id='12878ab3' visibility='default' filepath='include/linux/cgroup-defs.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='bpf' type-id='b80e3996' visibility='default' filepath='include/linux/cgroup-defs.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18432'>
+          <var-decl name='congestion_count' type-id='49178f86' visibility='default' filepath='include/linux/cgroup-defs.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18464'>
+          <var-decl name='freezer' type-id='ad50988b' visibility='default' filepath='include/linux/cgroup-defs.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18592'>
+          <var-decl name='ancestor_ids' type-id='1fdc7fa6' visibility='default' filepath='include/linux/cgroup-defs.h' line='491' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_file' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='119' column='1' id='37a4ee40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kn' type-id='150efd3f' visibility='default' filepath='include/linux/cgroup-defs.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='notified_at' type-id='7359adad' visibility='default' filepath='include/linux/cgroup-defs.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='notify_timer' type-id='abe41e67' visibility='default' filepath='include/linux/cgroup-defs.h' line='123' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_root' size-in-bits='52480' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='499' column='1' id='66f1e832'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kf_root' type-id='e18defdb' visibility='default' filepath='include/linux/cgroup-defs.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='subsys_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hierarchy_id' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cgrp' type-id='ab9643dd' visibility='default' filepath='include/linux/cgroup-defs.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18752'>
+          <var-decl name='cgrp_ancestor_id_storage' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18784'>
+          <var-decl name='nr_cgrps' type-id='49178f86' visibility='default' filepath='include/linux/cgroup-defs.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18816'>
+          <var-decl name='root_list' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18944'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19008'>
+          <var-decl name='cgroup_idr' type-id='37ce495e' visibility='default' filepath='include/linux/cgroup-defs.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19200'>
+          <var-decl name='release_agent_path' type-id='d16c6df4' visibility='default' filepath='include/linux/cgroup-defs.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='51968'>
+          <var-decl name='name' type-id='59daf3ef' visibility='default' filepath='include/linux/cgroup-defs.h' line='530' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_rstat_cpu' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='303' column='1' id='a73d96cf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bsync' type-id='e4d85780' visibility='default' filepath='include/linux/cgroup-defs.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bstat' type-id='cfd8587e' visibility='default' filepath='include/linux/cgroup-defs.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_bstat' type-id='cfd8587e' visibility='default' filepath='include/linux/cgroup-defs.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='updated_children' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='updated_next' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='329' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='u64_stats_sync' is-struct='yes' visibility='default' filepath='include/linux/u64_stats_sync.h' line='65' column='1' id='e4d85780'/>
+      <class-decl name='cgroup_base_stat' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='279' column='1' id='cfd8587e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cputime' type-id='ad6873f4' visibility='default' filepath='include/linux/cgroup-defs.h' line='280' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_cputime' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/sched/types.h' line='17' column='1' id='ad6873f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/types.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='utime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/types.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sum_exec_runtime' type-id='3a47d82b' visibility='default' filepath='include/linux/sched/types.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='psi_group' size-in-bits='5312' is-struct='yes' visibility='default' filepath='include/linux/psi_types.h' line='128' column='1' id='12878ab3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='avgs_lock' type-id='925167dc' visibility='default' filepath='include/linux/psi_types.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pcpu' type-id='9dc40234' visibility='default' filepath='include/linux/psi_types.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='avg_total' type-id='64af1365' visibility='default' filepath='include/linux/psi_types.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='avg_last_update' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='avg_next_update' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='avgs_work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/psi_types.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='total' type-id='a4295685' visibility='default' filepath='include/linux/psi_types.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='avg' type-id='625e8699' visibility='default' filepath='include/linux/psi_types.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='poll_task' type-id='f23e2572' visibility='default' filepath='include/linux/psi_types.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='poll_timer' type-id='abe41e67' visibility='default' filepath='include/linux/psi_types.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='poll_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/psi_types.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='poll_wakeup' type-id='49178f86' visibility='default' filepath='include/linux/psi_types.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='trigger_lock' type-id='925167dc' visibility='default' filepath='include/linux/psi_types.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='triggers' type-id='72f469ec' visibility='default' filepath='include/linux/psi_types.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='nr_triggers' type-id='586ea944' visibility='default' filepath='include/linux/psi_types.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4768'>
+          <var-decl name='poll_states' type-id='19c2251e' visibility='default' filepath='include/linux/psi_types.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='poll_min_period' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='polling_total' type-id='64af1365' visibility='default' filepath='include/linux/psi_types.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='polling_next_update' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='polling_until' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='165' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='psi_group_cpu' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/psi_types.h' line='56' column='1' id='956e764e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seq' type-id='e14c3b11' visibility='default' filepath='include/linux/psi_types.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tasks' type-id='0955670c' visibility='default' filepath='include/linux/psi_types.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state_mask' type-id='19c2251e' visibility='default' filepath='include/linux/psi_types.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='times' type-id='5867ed7f' visibility='default' filepath='include/linux/psi_types.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='state_start' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='times_prev' type-id='4e00dfcd' visibility='default' filepath='include/linux/psi_types.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_bpf' size-in-bits='6080' is-struct='yes' visibility='default' filepath='include/linux/bpf-cgroup.h' line='62' column='1' id='b80e3996'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='effective' type-id='47645c1d' visibility='default' filepath='include/linux/bpf-cgroup.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='progs' type-id='a835e1f5' visibility='default' filepath='include/linux/bpf-cgroup.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='flags' type-id='bd44dad8' visibility='default' filepath='include/linux/bpf-cgroup.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='inactive' type-id='380c7edc' visibility='default' filepath='include/linux/bpf-cgroup.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='include/linux/bpf-cgroup.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='release_work' type-id='ef9025d0' visibility='default' filepath='include/linux/bpf-cgroup.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_freezer_state' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='332' column='1' id='ad50988b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='freeze' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='e_freeze' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_frozen_descendants' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nr_frozen_tasks' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='348' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_subsys' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='629' column='1' id='1d115fd5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='css_alloc' type-id='a87691ee' visibility='default' filepath='include/linux/cgroup-defs.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='css_online' type-id='8bdbbb63' visibility='default' filepath='include/linux/cgroup-defs.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='css_offline' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='css_released' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='css_free' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='css_reset' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='css_rstat_flush' type-id='fe17c379' visibility='default' filepath='include/linux/cgroup-defs.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='css_extra_stat_show' type-id='f22a42d7' visibility='default' filepath='include/linux/cgroup-defs.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='can_attach' type-id='354bcec3' visibility='default' filepath='include/linux/cgroup-defs.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cancel_attach' type-id='6484073c' visibility='default' filepath='include/linux/cgroup-defs.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='attach' type-id='6484073c' visibility='default' filepath='include/linux/cgroup-defs.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='post_attach' type-id='953b12f8' visibility='default' filepath='include/linux/cgroup-defs.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='can_fork' type-id='2c2624ea' visibility='default' filepath='include/linux/cgroup-defs.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cancel_fork' type-id='1c9e19fb' visibility='default' filepath='include/linux/cgroup-defs.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fork' type-id='1c9e19fb' visibility='default' filepath='include/linux/cgroup-defs.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='exit' type-id='1c9e19fb' visibility='default' filepath='include/linux/cgroup-defs.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='release' type-id='1c9e19fb' visibility='default' filepath='include/linux/cgroup-defs.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='bind' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='early_init' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='implicit_on_dfl' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='threaded' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='broken_hierarchy' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='warned_broken_hierarchy' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/cgroup-defs.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='legacy_name' type-id='80f4b756' visibility='default' filepath='include/linux/cgroup-defs.h' line='698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='root' type-id='aede2cf0' visibility='default' filepath='include/linux/cgroup-defs.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='css_idr' type-id='37ce495e' visibility='default' filepath='include/linux/cgroup-defs.h' line='704' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='cfts' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='dfl_cftypes' type-id='03054cfa' visibility='default' filepath='include/linux/cgroup-defs.h' line='716' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='legacy_cftypes' type-id='03054cfa' visibility='default' filepath='include/linux/cgroup-defs.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='depends_on' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='726' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cftype' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='540' column='1' id='ea2ebeac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='59daf3ef' visibility='default' filepath='include/linux/cgroup-defs.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='private' type-id='7359adad' visibility='default' filepath='include/linux/cgroup-defs.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_write_len' type-id='b59d7dce' visibility='default' filepath='include/linux/cgroup-defs.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='file_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ss' type-id='dc91d125' visibility='default' filepath='include/linux/cgroup-defs.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='kf_ops' type-id='1f2a8949' visibility='default' filepath='include/linux/cgroup-defs.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='open' type-id='964d2eb6' visibility='default' filepath='include/linux/cgroup-defs.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='release' type-id='f1825e09' visibility='default' filepath='include/linux/cgroup-defs.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='read_u64' type-id='ad13fd93' visibility='default' filepath='include/linux/cgroup-defs.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='read_s64' type-id='ae18a37d' visibility='default' filepath='include/linux/cgroup-defs.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='seq_show' type-id='0131eb61' visibility='default' filepath='include/linux/cgroup-defs.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='seq_start' type-id='a46b05a0' visibility='default' filepath='include/linux/cgroup-defs.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='seq_next' type-id='b6ba26fa' visibility='default' filepath='include/linux/cgroup-defs.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='seq_stop' type-id='6ba28d1c' visibility='default' filepath='include/linux/cgroup-defs.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='write_u64' type-id='3e9fac96' visibility='default' filepath='include/linux/cgroup-defs.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='write_s64' type-id='2b0348f0' visibility='default' filepath='include/linux/cgroup-defs.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='write' type-id='17b1add7' visibility='default' filepath='include/linux/cgroup-defs.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='poll' type-id='b347e5ac' visibility='default' filepath='include/linux/cgroup-defs.h' line='617' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='poll_queue_proc' type-id='4aecccbd' filepath='include/linux/poll.h' line='37' column='1' id='650104ba'/>
+      <class-decl name='rcu_work' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='130' column='1' id='7c0b9fdb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/workqueue.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/workqueue.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wq' type-id='242e3d19' visibility='default' filepath='include/linux/workqueue.h' line='135' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfs_bandwidth' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='331' column='1' id='68e4a3af'/>
+      <class-decl name='rt_rq' size-in-bits='13632' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='593' column='1' id='e648d771'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='active' type-id='3ac6deac' visibility='default' filepath='kernel/sched/sched.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='rt_nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12960'>
+          <var-decl name='rr_nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12992'>
+          <var-decl name='highest_prio' type-id='8f548118' visibility='default' filepath='kernel/sched/sched.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='rt_nr_migratory' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='rt_nr_total' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='overloaded' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='pushable_tasks' type-id='57b0eed2' visibility='default' filepath='kernel/sched/sched.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='rt_queued' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13408'>
+          <var-decl name='rt_throttled' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13440'>
+          <var-decl name='rt_time' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='rt_runtime' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13568'>
+          <var-decl name='rt_runtime_lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='618' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rt_prio_array' size-in-bits='12928' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='234' column='1' id='3ac6deac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bitmap' type-id='f05e8e77' visibility='default' filepath='kernel/sched/sched.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='queue' type-id='6f53db1b' visibility='default' filepath='kernel/sched/sched.h' line='236' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='kernel/sched/sched.h' line='598' column='1' id='8f548118'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='curr' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='next' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='601' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='plist_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/plist.h' line='79' column='1' id='57b0eed2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node_list' type-id='72f469ec' visibility='default' filepath='include/linux/plist.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dl_rq' size-in-bits='832' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='634' column='1' id='53d038df'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root' type-id='6fe1603d' visibility='default' filepath='kernel/sched/sched.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dl_nr_running' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='earliest_dl' type-id='8c6b5470' visibility='default' filepath='kernel/sched/sched.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dl_nr_migratory' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='overloaded' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pushable_dl_tasks_root' type-id='6fe1603d' visibility='default' filepath='kernel/sched/sched.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='running_bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='this_bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='extra_bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bw_ratio' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='687' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='kernel/sched/sched.h' line='647' column='1' id='8c6b5470'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='curr' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='649' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='7232' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='386' column='1' id='37b0b96a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mmap' type-id='2ae08426' visibility='default' filepath='include/linux/mm_types.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mm_rb' type-id='dec44472' visibility='default' filepath='include/linux/mm_types.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vmacache_seqnum' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_unmapped_area' type-id='d44a8cec' visibility='default' filepath='include/linux/mm_types.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mmap_base' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mmap_legacy_base' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='task_size' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='highest_vm_end' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pgd' type-id='2e97ceaf' visibility='default' filepath='include/linux/mm_types.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='membarrier_state' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='mm_users' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mm_count' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='pgtables_bytes' type-id='f22a8abb' visibility='default' filepath='include/linux/mm_types.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='map_count' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='page_table_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mm_types.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='mmap_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/mm_types.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='mmlist' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='hiwater_rss' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='hiwater_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='total_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='locked_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='pinned_vm' type-id='28ee064c' visibility='default' filepath='include/linux/mm_types.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='data_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='exec_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='stack_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='def_flags' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='arg_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mm_types.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='start_code' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='end_code' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='start_data' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='end_data' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='start_brk' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='brk' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='start_stack' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='arg_start' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='arg_end' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='env_start' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='env_end' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='saved_auxv' type-id='d964a553' visibility='default' filepath='include/linux/mm_types.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='rss_stat' type-id='2235a2cb' visibility='default' filepath='include/linux/mm_types.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='binfmt' type-id='7cc59444' visibility='default' filepath='include/linux/mm_types.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='context' type-id='0eb9c3fd' visibility='default' filepath='include/linux/mm_types.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='core_state' type-id='90ad83aa' visibility='default' filepath='include/linux/mm_types.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='ioctx_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mm_types.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='ioctx_table' type-id='122191b2' visibility='default' filepath='include/linux/mm_types.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='owner' type-id='f23e2572' visibility='default' filepath='include/linux/mm_types.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='user_ns' type-id='c0ced321' visibility='default' filepath='include/linux/mm_types.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='exe_file' type-id='77e79a4b' visibility='default' filepath='include/linux/mm_types.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='mmu_notifier_mm' type-id='cc546a3e' visibility='default' filepath='include/linux/mm_types.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='tlb_flush_pending' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='uprobes_state' type-id='6308a819' visibility='default' filepath='include/linux/mm_types.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='async_put_work' type-id='ef9025d0' visibility='default' filepath='include/linux/mm_types.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='android_vendor_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='542' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='linux_binprm' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/linux/binfmts.h' line='17' column='1' id='2376c3ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vma' type-id='2ae08426' visibility='default' filepath='include/linux/binfmts.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vma_pages' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mm' type-id='df4b7819' visibility='default' filepath='include/linux/binfmts.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='p' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='argmin' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='called_set_creds' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='cap_elevated' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='secureexec' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='called_exec_mmap' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='recursion_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/binfmts.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cred' type-id='10cfb911' visibility='default' filepath='include/linux/binfmts.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='unsafe' type-id='95e97e5e' visibility='default' filepath='include/linux/binfmts.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='per_clear' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='argc' type-id='95e97e5e' visibility='default' filepath='include/linux/binfmts.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='envc' type-id='95e97e5e' visibility='default' filepath='include/linux/binfmts.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='filename' type-id='80f4b756' visibility='default' filepath='include/linux/binfmts.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='interp' type-id='80f4b756' visibility='default' filepath='include/linux/binfmts.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='interp_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='interp_data' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='loader' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='exec' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rlim_stack' type-id='60dcbf6c' visibility='default' filepath='include/linux/binfmts.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='buf' type-id='d1617432' visibility='default' filepath='include/linux/binfmts.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='user_namespace' size-in-bits='4544' is-struct='yes' visibility='default' filepath='include/linux/user_namespace.h' line='56' column='1' id='8c178e23'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uid_map' type-id='f179bf1b' visibility='default' filepath='include/linux/user_namespace.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='gid_map' type-id='f179bf1b' visibility='default' filepath='include/linux/user_namespace.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='projid_map' type-id='f179bf1b' visibility='default' filepath='include/linux/user_namespace.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/user_namespace.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='parent' type-id='c0ced321' visibility='default' filepath='include/linux/user_namespace.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='level' type-id='95e97e5e' visibility='default' filepath='include/linux/user_namespace.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='owner' type-id='d80b72e6' visibility='default' filepath='include/linux/user_namespace.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='group' type-id='094d8048' visibility='default' filepath='include/linux/user_namespace.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ns' type-id='99f367f2' visibility='default' filepath='include/linux/user_namespace.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/user_namespace.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='keyring_name_list' type-id='72f469ec' visibility='default' filepath='include/linux/user_namespace.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='user_keyring_register' type-id='204a4632' visibility='default' filepath='include/linux/user_namespace.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='keyring_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/user_namespace.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/user_namespace.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='set' type-id='3fc3d262' visibility='default' filepath='include/linux/user_namespace.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='sysctls' type-id='11b101bb' visibility='default' filepath='include/linux/user_namespace.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='ucounts' type-id='b1d4934a' visibility='default' filepath='include/linux/user_namespace.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='ucount_max' type-id='e415235d' visibility='default' filepath='include/linux/user_namespace.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/user_namespace.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/user_namespace.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uid_gid_map' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/user_namespace.h' line='24' column='1' id='f179bf1b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_extents' type-id='19c2251e' visibility='default' filepath='include/linux/user_namespace.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='c3ec14d0' visibility='default' filepath='include/linux/user_namespace.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/linux/user_namespace.h' line='26' column='1' id='c3ec14d0'>
+        <data-member access='private'>
+          <var-decl name='extent' type-id='df6d2206' visibility='default' filepath='include/linux/user_namespace.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='e873af3e' visibility='default' filepath='include/linux/user_namespace.h' line='28' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='uid_gid_extent' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/user_namespace.h' line='18' column='1' id='a9d71093'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='19c2251e' visibility='default' filepath='include/linux/user_namespace.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lower_first' type-id='19c2251e' visibility='default' filepath='include/linux/user_namespace.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='19c2251e' visibility='default' filepath='include/linux/user_namespace.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__4' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/user_namespace.h' line='28' column='1' id='e873af3e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='forward' type-id='9b105293' visibility='default' filepath='include/linux/user_namespace.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reverse' type-id='9b105293' visibility='default' filepath='include/linux/user_namespace.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ctl_table_set' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='169' column='1' id='3fc3d262'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_seen' type-id='35e8c658' visibility='default' filepath='include/linux/sysctl.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dir' type-id='7c7d6006' visibility='default' filepath='include/linux/sysctl.h' line='171' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ctl_dir' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='163' column='1' id='7c7d6006'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='ed51618b' visibility='default' filepath='include/linux/sysctl.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='root' type-id='dec44472' visibility='default' filepath='include/linux/sysctl.h' line='166' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ctl_table_header' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='143' column='1' id='ed51618b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='201d54e5' visibility='default' filepath='include/linux/sysctl.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unregistering' type-id='389faaf7' visibility='default' filepath='include/linux/sysctl.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ctl_table_arg' type-id='631dc3c1' visibility='default' filepath='include/linux/sysctl.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='root' type-id='2993adbc' visibility='default' filepath='include/linux/sysctl.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set' type-id='42988600' visibility='default' filepath='include/linux/sysctl.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parent' type-id='1c66bddc' visibility='default' filepath='include/linux/sysctl.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='node' type-id='a586bbcf' visibility='default' filepath='include/linux/sysctl.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='inodes' type-id='e151255a' visibility='default' filepath='include/linux/sysctl.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/sysctl.h' line='145' column='1' id='201d54e5'>
+        <data-member access='private'>
+          <var-decl name='' type-id='1acab550' visibility='default' filepath='include/linux/sysctl.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/sysctl.h' line='152' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/sysctl.h' line='146' column='1' id='1acab550'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctl_table' type-id='631dc3c1' visibility='default' filepath='include/linux/sysctl.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='used' type-id='95e97e5e' visibility='default' filepath='include/linux/sysctl.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/sysctl.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nreg' type-id='95e97e5e' visibility='default' filepath='include/linux/sysctl.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ctl_table' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='123' column='1' id='91a515f9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='procname' type-id='80f4b756' visibility='default' filepath='include/linux/sysctl.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/sysctl.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='maxlen' type-id='95e97e5e' visibility='default' filepath='include/linux/sysctl.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='include/linux/sysctl.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='child' type-id='631dc3c1' visibility='default' filepath='include/linux/sysctl.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='proc_handler' type-id='66032958' visibility='default' filepath='include/linux/sysctl.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='poll' type-id='4dec003b' visibility='default' filepath='include/linux/sysctl.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='extra1' type-id='eaa32e2f' visibility='default' filepath='include/linux/sysctl.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='extra2' type-id='eaa32e2f' visibility='default' filepath='include/linux/sysctl.h' line='133' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='proc_handler' type-id='99803d40' filepath='include/linux/sysctl.h' line='47' column='1' id='8cf4128f'/>
+      <class-decl name='ctl_table_poll' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='105' column='1' id='d39c42ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event' type-id='49178f86' visibility='default' filepath='include/linux/sysctl.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/sysctl.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ctl_table_root' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='174' column='1' id='d83969a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='default_set' type-id='3fc3d262' visibility='default' filepath='include/linux/sysctl.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='lookup' type-id='50abd760' visibility='default' filepath='include/linux/sysctl.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_ownership' type-id='47727520' visibility='default' filepath='include/linux/sysctl.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='permissions' type-id='7bada959' visibility='default' filepath='include/linux/sysctl.h' line='180' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ctl_node' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='136' column='1' id='beafd747'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='2a8a6332' visibility='default' filepath='include/linux/sysctl.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='header' type-id='11b101bb' visibility='default' filepath='include/linux/sysctl.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='coredump_params' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/binfmts.h' line='88' column='1' id='3288a0f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='siginfo' type-id='ffa0418a' visibility='default' filepath='include/linux/binfmts.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='regs' type-id='4616a179' visibility='default' filepath='include/linux/binfmts.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/binfmts.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='limit' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mm_flags' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='written' type-id='69bf7bee' visibility='default' filepath='include/linux/binfmts.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pos' type-id='69bf7bee' visibility='default' filepath='include/linux/binfmts.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pt_regs' size-in-bits='2560' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='160' column='1' id='0d029111'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='dcc4b447' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='orig_x0' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='syscallno' type-id='a7832498' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='unused2' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='orig_addr_limit' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='pmr_save' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='stackframe' type-id='24a375b2' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__7' size-in-bits='2176' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='161' column='1' id='dcc4b447'>
+        <data-member access='private'>
+          <var-decl name='user_regs' type-id='cedec667' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='de6df8b1' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='163' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='user_pt_regs' size-in-bits='2176' is-struct='yes' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='75' column='1' id='cedec667'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='regs' type-id='cb6b7280' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sp' type-id='d3130597' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='pc' type-id='d3130597' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='pstate' type-id='d3130597' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__6' size-in-bits='2176' is-struct='yes' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='163' column='1' id='de6df8b1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='regs' type-id='2f7ab612' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sp' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='pc' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='pstate' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='167' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='root_domain' size-in-bits='14720' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='740' column='1' id='9cdca91a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rto_count' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/sched/sched.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='span' type-id='b16b461b' visibility='default' filepath='kernel/sched/sched.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='online' type-id='b16b461b' visibility='default' filepath='kernel/sched/sched.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='overload' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='overutilized' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dlo_mask' type-id='b16b461b' visibility='default' filepath='kernel/sched/sched.h' line='761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dlo_count' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dl_bw' type-id='51a92649' visibility='default' filepath='kernel/sched/sched.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='cpudl' type-id='a9cef929' visibility='default' filepath='kernel/sched/sched.h' line='764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rto_push_work' type-id='9281c70f' visibility='default' filepath='kernel/sched/sched.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rto_lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='rto_loop' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rto_cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='rto_loop_next' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='rto_loop_start' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='rto_mask' type-id='b16b461b' visibility='default' filepath='kernel/sched/sched.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='cpupri' type-id='afe3b3de' visibility='default' filepath='kernel/sched/sched.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14464'>
+          <var-decl name='max_cpu_capacity' type-id='12dbc6b5' visibility='default' filepath='kernel/sched/sched.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14656'>
+          <var-decl name='pd' type-id='30f9749f' visibility='default' filepath='kernel/sched/sched.h' line='793' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dl_bw' size-in-bits='192' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='279' column='1' id='51a92649'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='total_bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='282' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpudl' size-in-bits='192' is-struct='yes' visibility='default' filepath='kernel/sched/cpudeadline.h' line='11' column='1' id='a9cef929'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/cpudeadline.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='95e97e5e' visibility='default' filepath='kernel/sched/cpudeadline.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='free_cpus' type-id='b16b461b' visibility='default' filepath='kernel/sched/cpudeadline.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='elements' type-id='9bf95e81' visibility='default' filepath='kernel/sched/cpudeadline.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpudl_item' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/sched/cpudeadline.h' line='5' column='1' id='4dc01f59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dl' type-id='91ce1af9' visibility='default' filepath='kernel/sched/cpudeadline.h' line='6' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/cpudeadline.h' line='7' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='idx' type-id='95e97e5e' visibility='default' filepath='kernel/sched/cpudeadline.h' line='8' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_work' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/irq_work.h' line='24' column='1' id='9281c70f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/irq_work.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='llnode' type-id='c5ccfee8' visibility='default' filepath='include/linux/irq_work.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='func' type-id='f48b73f6' visibility='default' filepath='include/linux/irq_work.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpupri' size-in-bits='13120' is-struct='yes' visibility='default' filepath='kernel/sched/cpupri.h' line='15' column='1' id='afe3b3de'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pri_to_cpu' type-id='f88f3d38' visibility='default' filepath='kernel/sched/cpupri.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='cpu_to_pri' type-id='7292109c' visibility='default' filepath='kernel/sched/cpupri.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpupri_vec' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/sched/cpupri.h' line='10' column='1' id='a7623477'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='kernel/sched/cpupri.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask' type-id='b16b461b' visibility='default' filepath='kernel/sched/cpupri.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='max_cpu_capacity' size-in-bits='192' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='722' column='1' id='12dbc6b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='val' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='725' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_domain' size-in-bits='256' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='716' column='1' id='f2e22af7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='em_pd' type-id='ce714046' visibility='default' filepath='kernel/sched/sched.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='30f9749f' visibility='default' filepath='kernel/sched/sched.h' line='718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/sched/sched.h' line='719' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='em_perf_domain' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/energy_model.h' line='37' column='1' id='f8d03d40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='table' type-id='57c51e1c' visibility='default' filepath='include/linux/energy_model.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_cap_states' type-id='95e97e5e' visibility='default' filepath='include/linux/energy_model.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpus' type-id='c99b5ecd' visibility='default' filepath='include/linux/energy_model.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='em_cap_state' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/energy_model.h' line='20' column='1' id='44399e16'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frequency' type-id='7359adad' visibility='default' filepath='include/linux/energy_model.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='power' type-id='7359adad' visibility='default' filepath='include/linux/energy_model.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cost' type-id='7359adad' visibility='default' filepath='include/linux/energy_model.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_domain' size-in-bits='2432' is-struct='yes' visibility='default' filepath='include/linux/sched/topology.h' line='72' column='1' id='1706cf19'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent' type-id='e9d32201' visibility='default' filepath='include/linux/sched/topology.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='child' type-id='e9d32201' visibility='default' filepath='include/linux/sched/topology.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='groups' type-id='f3dcd492' visibility='default' filepath='include/linux/sched/topology.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_interval' type-id='7359adad' visibility='default' filepath='include/linux/sched/topology.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='max_interval' type-id='7359adad' visibility='default' filepath='include/linux/sched/topology.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='busy_factor' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='imbalance_pct' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cache_nice_tries' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='nohz_idle' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/topology.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/topology.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='level' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/topology.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='last_balance' type-id='7359adad' visibility='default' filepath='include/linux/sched/topology.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='balance_interval' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='nr_balance_failed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='max_newidle_lb_cost' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/topology.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='next_decay_max_lb_cost' type-id='7359adad' visibility='default' filepath='include/linux/sched/topology.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='avg_scan_cost' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/topology.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='lb_count' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='lb_failed' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='lb_balanced' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='lb_imbalance' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='lb_gained' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='lb_hot_gained' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='lb_nobusyg' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='lb_nobusyq' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='alb_count' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='alb_failed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='alb_pushed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='sbe_count' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='sbe_balanced' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='sbe_pushed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='sbf_count' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='sbf_balanced' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='sbf_pushed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='ttwu_wake_remote' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ttwu_move_affine' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='ttwu_move_balance' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/sched/topology.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='' type-id='52c6c1a9' visibility='default' filepath='include/linux/sched/topology.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='shared' type-id='774b23cf' visibility='default' filepath='include/linux/sched/topology.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='span_weight' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/topology.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/topology.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='span' type-id='c99b5ecd' visibility='default' filepath='include/linux/sched/topology.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_group' size-in-bits='256' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='1414' column='1' id='8b6491f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='f3dcd492' visibility='default' filepath='kernel/sched/sched.h' line='1415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ref' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='1416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='group_weight' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sgc' type-id='29a48d3d' visibility='default' filepath='kernel/sched/sched.h' line='1419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='asym_prefer_cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='1420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cpumask' type-id='c99b5ecd' visibility='default' filepath='kernel/sched/sched.h' line='1429' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_group_capacity' size-in-bits='384' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='1395' column='1' id='ea3de64d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ref' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='1396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='capacity' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='1401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='min_capacity' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='1402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_capacity' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='1403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='next_update' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='1404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='imbalance' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='1405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='1408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cpumask' type-id='c99b5ecd' visibility='default' filepath='kernel/sched/sched.h' line='1411' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__8' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/sched/topology.h' line='132' column='1' id='52c6c1a9'>
+        <data-member access='private'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/sched/topology.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/sched/topology.h' line='134' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='sched_domain_shared' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/sched/topology.h' line='66' column='1' id='ccc53977'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ref' type-id='49178f86' visibility='default' filepath='include/linux/sched/topology.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr_busy_cpus' type-id='49178f86' visibility='default' filepath='include/linux/sched/topology.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='has_idle_cores' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/topology.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpu_stop_work' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/stop_machine.h' line='24' column='1' id='8eb07132'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/stop_machine.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fn' type-id='87dfefa3' visibility='default' filepath='include/linux/stop_machine.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='arg' type-id='eaa32e2f' visibility='default' filepath='include/linux/stop_machine.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='done' type-id='d589c913' visibility='default' filepath='include/linux/stop_machine.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='cpu_stop_fn_t' type-id='b9b212f5' filepath='include/linux/stop_machine.h' line='20' column='1' id='87dfefa3'/>
+      <typedef-decl name='call_single_data_t' type-id='bb75ea85' filepath='include/linux/smp.h' line='26' column='1' id='223a68bd'/>
+      <class-decl name='__call_single_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/smp.h' line='18' column='1' id='bb75ea85'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='llist' type-id='c5ccfee8' visibility='default' filepath='include/linux/smp.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='89714567' visibility='default' filepath='include/linux/smp.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='info' type-id='eaa32e2f' visibility='default' filepath='include/linux/smp.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/smp.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='smp_call_func_t' type-id='b7f9d8e6' filepath='include/linux/smp.h' line='17' column='1' id='89714567'/>
+      <class-decl name='llist_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/llist.h' line='54' column='1' id='77df194e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='023b769e' visibility='default' filepath='include/linux/llist.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpuidle_state' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/cpuidle.h' line='44' column='1' id='97aa083d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/cpuidle.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='desc' type-id='16dc656a' visibility='default' filepath='include/linux/cpuidle.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='exit_latency' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='power_usage' type-id='95e97e5e' visibility='default' filepath='include/linux/cpuidle.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='target_residency' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='disabled' type-id='b50a4934' visibility='default' filepath='include/linux/cpuidle.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='enter' type-id='738b5bc2' visibility='default' filepath='include/linux/cpuidle.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='enter_dead' type-id='0ba194b9' visibility='default' filepath='include/linux/cpuidle.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='enter_s2idle' type-id='738b5bc2' visibility='default' filepath='include/linux/cpuidle.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpuidle_device' size-in-bits='5632' is-struct='yes' visibility='default' filepath='include/linux/cpuidle.h' line='83' column='1' id='14ba1df2'>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='registered' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='use_deepest_state' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='poll_time_limit' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next_hrtimer' type-id='fbc017ef' visibility='default' filepath='include/linux/cpuidle.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='last_state_idx' type-id='95e97e5e' visibility='default' filepath='include/linux/cpuidle.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='last_residency' type-id='95e97e5e' visibility='default' filepath='include/linux/cpuidle.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='poll_limit_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/cpuidle.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='states_usage' type-id='b25dce46' visibility='default' filepath='include/linux/cpuidle.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='kobjs' type-id='7b1498fd' visibility='default' filepath='include/linux/cpuidle.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='kobj_driver' type-id='a49b2975' visibility='default' filepath='include/linux/cpuidle.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='kobj_dev' type-id='d4f9dda1' visibility='default' filepath='include/linux/cpuidle.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='device_list' type-id='72f469ec' visibility='default' filepath='include/linux/cpuidle.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpuidle_state_usage' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/cpuidle.h' line='32' column='1' id='2e1b0751'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='disable' type-id='3a47d82b' visibility='default' filepath='include/linux/cpuidle.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='usage' type-id='3a47d82b' visibility='default' filepath='include/linux/cpuidle.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='time' type-id='3a47d82b' visibility='default' filepath='include/linux/cpuidle.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='above' type-id='3a47d82b' visibility='default' filepath='include/linux/cpuidle.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='below' type-id='3a47d82b' visibility='default' filepath='include/linux/cpuidle.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='s2idle_usage' type-id='3a47d82b' visibility='default' filepath='include/linux/cpuidle.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='s2idle_time' type-id='3a47d82b' visibility='default' filepath='include/linux/cpuidle.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpuidle_driver' size-in-bits='8064' is-struct='yes' visibility='default' filepath='include/linux/cpuidle.h' line='113' column='1' id='9488f766'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/cpuidle.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/cpuidle.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='refcnt' type-id='95e97e5e' visibility='default' filepath='include/linux/cpuidle.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='bctimer' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='states' type-id='d91bb67a' visibility='default' filepath='include/linux/cpuidle.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='state_count' type-id='95e97e5e' visibility='default' filepath='include/linux/cpuidle.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7904'>
+          <var-decl name='safe_state_index' type-id='95e97e5e' visibility='default' filepath='include/linux/cpuidle.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='cpumask' type-id='74bccedd' visibility='default' filepath='include/linux/cpuidle.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='governor' type-id='80f4b756' visibility='default' filepath='include/linux/cpuidle.h' line='129' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rq_flags' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='1138' column='1' id='16588ac8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='1139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cookie' type-id='3cb90f9b' visibility='default' filepath='kernel/sched/sched.h' line='1140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clock_update_flags' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pin_cookie' is-struct='yes' visibility='default' filepath='include/linux/lockdep.h' line='485' column='1' id='3cb90f9b'/>
+      <class-decl name='uts_namespace' size-in-bits='3520' is-struct='yes' visibility='default' filepath='include/linux/utsname.h' line='24' column='1' id='44f52e9e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/utsname.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='ee2746d3' visibility='default' filepath='include/linux/utsname.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='user_ns' type-id='c0ced321' visibility='default' filepath='include/linux/utsname.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='ucounts' type-id='b1d4934a' visibility='default' filepath='include/linux/utsname.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='ns' type-id='99f367f2' visibility='default' filepath='include/linux/utsname.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='new_utsname' size-in-bits='3120' is-struct='yes' visibility='default' filepath='include/uapi/linux/utsname.h' line='25' column='1' id='ee2746d3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysname' type-id='5ddd38d2' visibility='default' filepath='include/uapi/linux/utsname.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='520'>
+          <var-decl name='nodename' type-id='5ddd38d2' visibility='default' filepath='include/uapi/linux/utsname.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='release' type-id='5ddd38d2' visibility='default' filepath='include/uapi/linux/utsname.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1560'>
+          <var-decl name='version' type-id='5ddd38d2' visibility='default' filepath='include/uapi/linux/utsname.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='machine' type-id='5ddd38d2' visibility='default' filepath='include/uapi/linux/utsname.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2600'>
+          <var-decl name='domainname' type-id='5ddd38d2' visibility='default' filepath='include/uapi/linux/utsname.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='net' size-in-bits='33280' is-struct='yes' visibility='default' filepath='include/net/net_namespace.h' line='54' column='1' id='bd965181'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='passive' type-id='64615833' visibility='default' filepath='include/net/net_namespace.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='64615833' visibility='default' filepath='include/net/net_namespace.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rules_mod_lock' type-id='fb4018a0' visibility='default' filepath='include/net/net_namespace.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dev_unreg_count' type-id='f0981eeb' visibility='default' filepath='include/net/net_namespace.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev_base_seq' type-id='f0981eeb' visibility='default' filepath='include/net/net_namespace.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ifindex' type-id='95e97e5e' visibility='default' filepath='include/net/net_namespace.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nsid_lock' type-id='fb4018a0' visibility='default' filepath='include/net/net_namespace.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='fnhe_genid' type-id='49178f86' visibility='default' filepath='include/net/net_namespace.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/net_namespace.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='exit_list' type-id='72f469ec' visibility='default' filepath='include/net/net_namespace.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cleanup_list' type-id='c5ccfee8' visibility='default' filepath='include/net/net_namespace.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='key_domain' type-id='fce14c5f' visibility='default' filepath='include/net/net_namespace.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='user_ns' type-id='c0ced321' visibility='default' filepath='include/net/net_namespace.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ucounts' type-id='b1d4934a' visibility='default' filepath='include/net/net_namespace.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='netns_ids' type-id='37ce495e' visibility='default' filepath='include/net/net_namespace.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ns' type-id='99f367f2' visibility='default' filepath='include/net/net_namespace.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='dev_base_head' type-id='72f469ec' visibility='default' filepath='include/net/net_namespace.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='proc_net' type-id='d077e928' visibility='default' filepath='include/net/net_namespace.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='proc_net_stat' type-id='d077e928' visibility='default' filepath='include/net/net_namespace.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='sysctls' type-id='3fc3d262' visibility='default' filepath='include/net/net_namespace.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='rtnl' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='genl_sock' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='uevent_sock' type-id='5224788d' visibility='default' filepath='include/net/net_namespace.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='dev_name_head' type-id='030d0b18' visibility='default' filepath='include/net/net_namespace.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dev_index_head' type-id='030d0b18' visibility='default' filepath='include/net/net_namespace.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='hash_mix' type-id='19c2251e' visibility='default' filepath='include/net/net_namespace.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='loopback_dev' type-id='68a2d05b' visibility='default' filepath='include/net/net_namespace.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='rules_ops' type-id='72f469ec' visibility='default' filepath='include/net/net_namespace.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='core' type-id='7436aa2b' visibility='default' filepath='include/net/net_namespace.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='mib' type-id='870ef624' visibility='default' filepath='include/net/net_namespace.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='packet' type-id='49d7aa74' visibility='default' filepath='include/net/net_namespace.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='unx' type-id='6e306fde' visibility='default' filepath='include/net/net_namespace.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='nexthop' type-id='03364088' visibility='default' filepath='include/net/net_namespace.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='ipv4' type-id='dba1641f' visibility='default' filepath='include/net/net_namespace.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='ipv6' type-id='dda16745' visibility='default' filepath='include/net/net_namespace.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17920'>
+          <var-decl name='nf' type-id='0a6298e0' visibility='default' filepath='include/net/net_namespace.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='xt' type-id='288fe7b8' visibility='default' filepath='include/net/net_namespace.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21568'>
+          <var-decl name='ct' type-id='2a831eeb' visibility='default' filepath='include/net/net_namespace.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24896'>
+          <var-decl name='nf_frag' type-id='ebd39a5d' visibility='default' filepath='include/net/net_namespace.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24960'>
+          <var-decl name='nf_frag_frags_hdr' type-id='11b101bb' visibility='default' filepath='include/net/net_namespace.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25024'>
+          <var-decl name='nfnl' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25088'>
+          <var-decl name='nfnl_stash' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25152'>
+          <var-decl name='wext_nlevents' type-id='e61c85d0' visibility='default' filepath='include/net/net_namespace.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25344'>
+          <var-decl name='gen' type-id='871fd930' visibility='default' filepath='include/net/net_namespace.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25408'>
+          <var-decl name='flow_dissector_prog' type-id='bdcee7ae' visibility='default' filepath='include/net/net_namespace.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25600'>
+          <var-decl name='xfrm' type-id='3d2d291b' visibility='default' filepath='include/net/net_namespace.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32768'>
+          <var-decl name='xdp' type-id='a2b0ef48' visibility='default' filepath='include/net/net_namespace.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33088'>
+          <var-decl name='diag_nlsk' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='183' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_core' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/netns/core.h' line='8' column='1' id='7436aa2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysctl_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/core.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sysctl_somaxconn' type-id='95e97e5e' visibility='default' filepath='include/net/netns/core.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sock_inuse' type-id='7292109c' visibility='default' filepath='include/net/netns/core.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prot_inuse' type-id='a06a810d' visibility='default' filepath='include/net/netns/core.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_mib' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/netns/mib.h' line='7' column='1' id='870ef624'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tcp_statistics' type-id='19a26ee3' visibility='default' filepath='include/net/netns/mib.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ip_statistics' type-id='30897c4e' visibility='default' filepath='include/net/netns/mib.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='net_statistics' type-id='016811bc' visibility='default' filepath='include/net/netns/mib.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='udp_statistics' type-id='d1440a9f' visibility='default' filepath='include/net/netns/mib.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='udplite_statistics' type-id='d1440a9f' visibility='default' filepath='include/net/netns/mib.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='icmp_statistics' type-id='c085a9fb' visibility='default' filepath='include/net/netns/mib.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='icmpmsg_statistics' type-id='0296b670' visibility='default' filepath='include/net/netns/mib.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='proc_net_devsnmp6' type-id='d077e928' visibility='default' filepath='include/net/netns/mib.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='udp_stats_in6' type-id='d1440a9f' visibility='default' filepath='include/net/netns/mib.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='udplite_stats_in6' type-id='d1440a9f' visibility='default' filepath='include/net/netns/mib.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ipv6_statistics' type-id='30897c4e' visibility='default' filepath='include/net/netns/mib.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='icmpv6_statistics' type-id='1a16368f' visibility='default' filepath='include/net/netns/mib.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='icmpv6msg_statistics' type-id='bf0465ec' visibility='default' filepath='include/net/netns/mib.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='xfrm_statistics' type-id='f43a2d4c' visibility='default' filepath='include/net/netns/mib.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcp_mib' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='92' column='1' id='e1f906a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='d2baa450' visibility='default' filepath='include/net/snmp.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipstats_mib' size-in-bits='2368' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='51' column='1' id='f52a1ce8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='2b89ba50' visibility='default' filepath='include/net/snmp.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='syncp' type-id='e4d85780' visibility='default' filepath='include/net/snmp.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='linux_mib' size-in-bits='7680' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='104' column='1' id='e222a326'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='1868bbfa' visibility='default' filepath='include/net/snmp.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='udp_mib' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='98' column='1' id='89e527b7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='307ac9b4' visibility='default' filepath='include/net/snmp.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icmp_mib' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='59' column='1' id='bd4dc4cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='8bbc0f7f' visibility='default' filepath='include/net/snmp.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icmpmsg_mib' size-in-bits='32768' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='64' column='1' id='b4bfe052'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='61cd76ae' visibility='default' filepath='include/net/snmp.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icmpv6_mib' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='71' column='1' id='c7afdfb7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='f0691bd3' visibility='default' filepath='include/net/snmp.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icmpv6msg_mib' size-in-bits='32768' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='81' column='1' id='1f91fd06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='61cd76ae' visibility='default' filepath='include/net/snmp.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='linux_xfrm_mib' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='110' column='1' id='7f2c5e96'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='4fbdefa2' visibility='default' filepath='include/net/snmp.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_packet' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/netns/packet.h' line='11' column='1' id='49d7aa74'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sklist_lock' type-id='925167dc' visibility='default' filepath='include/net/netns/packet.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sklist' type-id='e151255a' visibility='default' filepath='include/net/netns/packet.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_unix' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/netns/unix.h' line='9' column='1' id='6e306fde'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysctl_max_dgram_qlen' type-id='95e97e5e' visibility='default' filepath='include/net/netns/unix.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ctl' type-id='11b101bb' visibility='default' filepath='include/net/netns/unix.h' line='11' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_nexthop' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/netns/nexthop.h' line='11' column='1' id='03364088'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_root' type-id='dec44472' visibility='default' filepath='include/net/netns/nexthop.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='devhash' type-id='030d0b18' visibility='default' filepath='include/net/netns/nexthop.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq' type-id='f0981eeb' visibility='default' filepath='include/net/netns/nexthop.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='last_id_allocated' type-id='19c2251e' visibility='default' filepath='include/net/netns/nexthop.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_ipv4' size-in-bits='7168' is-struct='yes' visibility='default' filepath='include/net/netns/ipv4.h' line='43' column='1' id='dba1641f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='forw_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frags_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ipv4_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='route_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xfrm4_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='devconf_all' type-id='e963f446' visibility='default' filepath='include/net/netns/ipv4.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='devconf_dflt' type-id='e963f446' visibility='default' filepath='include/net/netns/ipv4.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ra_chain' type-id='00c4cbac' visibility='default' filepath='include/net/netns/ipv4.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ra_mutex' type-id='925167dc' visibility='default' filepath='include/net/netns/ipv4.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rules_ops' type-id='a68064b1' visibility='default' filepath='include/net/netns/ipv4.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='fib_has_custom_rules' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv4.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='fib_rules_require_fldissect' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fib_main' type-id='107630a5' visibility='default' filepath='include/net/netns/ipv4.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fib_default' type-id='107630a5' visibility='default' filepath='include/net/netns/ipv4.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fib_has_custom_local_routes' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv4.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fib_table_hash' type-id='030d0b18' visibility='default' filepath='include/net/netns/ipv4.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='fib_offload_disabled' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv4.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fibnl' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv4.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='icmp_sk' type-id='d0d57cc5' visibility='default' filepath='include/net/netns/ipv4.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='mc_autojoin_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv4.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='peers' type-id='01d310c2' visibility='default' filepath='include/net/netns/ipv4.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='tcp_sk' type-id='d0d57cc5' visibility='default' filepath='include/net/netns/ipv4.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='fqdir' type-id='943ad75f' visibility='default' filepath='include/net/netns/ipv4.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='iptable_filter' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='iptable_mangle' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='iptable_raw' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='arptable_filter' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='iptable_security' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='nat_table' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sysctl_icmp_echo_ignore_all' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='sysctl_icmp_echo_ignore_broadcasts' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sysctl_icmp_ignore_bogus_error_responses' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='sysctl_icmp_ratelimit' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sysctl_icmp_ratemask' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='sysctl_icmp_errors_use_inbound_ifaddr' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='ip_local_ports' type-id='93d4ab27' visibility='default' filepath='include/net/netns/ipv4.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='sysctl_tcp_ecn' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='sysctl_tcp_ecn_fallback' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='sysctl_ip_default_ttl' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='sysctl_ip_no_pmtu_disc' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2464'>
+          <var-decl name='sysctl_ip_fwd_use_pmtu' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='sysctl_ip_fwd_update_priority' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='sysctl_ip_nonlocal_bind' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='sysctl_ip_dynaddr' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='sysctl_ip_early_demux' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='sysctl_tcp_early_demux' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='sysctl_udp_early_demux' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='sysctl_fwmark_reflect' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='sysctl_tcp_fwmark_accept' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='sysctl_tcp_mtu_probing' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2784'>
+          <var-decl name='sysctl_tcp_mtu_probe_floor' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='sysctl_tcp_base_mss' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='sysctl_tcp_min_snd_mss' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='sysctl_tcp_probe_threshold' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='sysctl_tcp_probe_interval' type-id='19c2251e' visibility='default' filepath='include/net/netns/ipv4.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='sysctl_tcp_keepalive_time' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2976'>
+          <var-decl name='sysctl_tcp_keepalive_probes' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='sysctl_tcp_keepalive_intvl' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='sysctl_tcp_syn_retries' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='sysctl_tcp_synack_retries' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='sysctl_tcp_syncookies' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='sysctl_tcp_reordering' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3168'>
+          <var-decl name='sysctl_tcp_retries1' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='sysctl_tcp_retries2' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3232'>
+          <var-decl name='sysctl_tcp_orphan_retries' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='sysctl_tcp_fin_timeout' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3296'>
+          <var-decl name='sysctl_tcp_notsent_lowat' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='sysctl_tcp_tw_reuse' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3360'>
+          <var-decl name='sysctl_tcp_sack' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='sysctl_tcp_window_scaling' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3424'>
+          <var-decl name='sysctl_tcp_timestamps' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='sysctl_tcp_early_retrans' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='sysctl_tcp_recovery' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='sysctl_tcp_thin_linear_timeouts' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3552'>
+          <var-decl name='sysctl_tcp_slow_start_after_idle' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='sysctl_tcp_retrans_collapse' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3616'>
+          <var-decl name='sysctl_tcp_stdurg' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='sysctl_tcp_rfc1337' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3680'>
+          <var-decl name='sysctl_tcp_abort_on_overflow' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='sysctl_tcp_fack' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3744'>
+          <var-decl name='sysctl_tcp_max_reordering' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='sysctl_tcp_dsack' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3808'>
+          <var-decl name='sysctl_tcp_app_win' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='sysctl_tcp_adv_win_scale' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3872'>
+          <var-decl name='sysctl_tcp_frto' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='sysctl_tcp_nometrics_save' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3936'>
+          <var-decl name='sysctl_tcp_moderate_rcvbuf' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='sysctl_tcp_tso_win_divisor' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4000'>
+          <var-decl name='sysctl_tcp_workaround_signed_windows' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='sysctl_tcp_limit_output_bytes' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4064'>
+          <var-decl name='sysctl_tcp_challenge_ack_limit' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='sysctl_tcp_min_tso_segs' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4128'>
+          <var-decl name='sysctl_tcp_min_rtt_wlen' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='sysctl_tcp_autocorking' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4192'>
+          <var-decl name='sysctl_tcp_invalid_ratelimit' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='sysctl_tcp_pacing_ss_ratio' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4256'>
+          <var-decl name='sysctl_tcp_pacing_ca_ratio' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='sysctl_tcp_wmem' type-id='e024279b' visibility='default' filepath='include/net/netns/ipv4.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4384'>
+          <var-decl name='sysctl_tcp_rmem' type-id='e024279b' visibility='default' filepath='include/net/netns/ipv4.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='sysctl_tcp_comp_sack_nr' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='sysctl_tcp_comp_sack_delay_ns' type-id='7359adad' visibility='default' filepath='include/net/netns/ipv4.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='tcp_death_row' type-id='af2c6a56' visibility='default' filepath='include/net/netns/ipv4.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='sysctl_max_syn_backlog' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5664'>
+          <var-decl name='sysctl_tcp_fastopen' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='tcp_congestion_control' type-id='b3ef56ee' visibility='default' filepath='include/net/netns/ipv4.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='tcp_fastopen_ctx' type-id='104fa32f' visibility='default' filepath='include/net/netns/ipv4.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='tcp_fastopen_ctx_lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/ipv4.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5856'>
+          <var-decl name='sysctl_tcp_fastopen_blackhole_timeout' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='tfo_active_disable_times' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv4.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='tfo_active_disable_stamp' type-id='7359adad' visibility='default' filepath='include/net/netns/ipv4.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='sysctl_udp_wmem_min' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6048'>
+          <var-decl name='sysctl_udp_rmem_min' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='sysctl_igmp_max_memberships' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6112'>
+          <var-decl name='sysctl_igmp_max_msf' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='sysctl_igmp_llm_reports' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='sysctl_igmp_qrv' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='ping_group_range' type-id='89d35c53' visibility='default' filepath='include/net/netns/ipv4.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='dev_addr_genid' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv4.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='sysctl_local_reserved_ports' type-id='1d2c2b85' visibility='default' filepath='include/net/netns/ipv4.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='sysctl_local_unbindable_ports' type-id='1d2c2b85' visibility='default' filepath='include/net/netns/ipv4.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='sysctl_ip_prot_sock' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='notifier_ops' type-id='74f101b0' visibility='default' filepath='include/net/netns/ipv4.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='fib_seq' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='ipmr_notifier_ops' type-id='74f101b0' visibility='default' filepath='include/net/netns/ipv4.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='ipmr_seq' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6816'>
+          <var-decl name='rt_genid' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv4.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='ip_id_key' type-id='7799da43' visibility='default' filepath='include/net/netns/ipv4.h' line='224' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fqdir' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/net/inet_frag.h' line='9' column='1' id='84dbb257'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='high_thresh' type-id='bd54fe1a' visibility='default' filepath='include/net/inet_frag.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='low_thresh' type-id='bd54fe1a' visibility='default' filepath='include/net/inet_frag.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timeout' type-id='95e97e5e' visibility='default' filepath='include/net/inet_frag.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_dist' type-id='95e97e5e' visibility='default' filepath='include/net/inet_frag.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='f' type-id='f6c3a7a5' visibility='default' filepath='include/net/inet_frag.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='net' type-id='a2bff677' visibility='default' filepath='include/net/inet_frag.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dead' type-id='b50a4934' visibility='default' filepath='include/net/inet_frag.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rhashtable' type-id='9e095f93' visibility='default' filepath='include/net/inet_frag.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='mem' type-id='f22a8abb' visibility='default' filepath='include/net/inet_frag.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='destroy_work' type-id='ef9025d0' visibility='default' filepath='include/net/inet_frag.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_frags' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/net/inet_frag.h' line='98' column='1' id='e56bc2e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='qsize' type-id='f0981eeb' visibility='default' filepath='include/net/inet_frag.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='constructor' type-id='82a6d477' visibility='default' filepath='include/net/inet_frag.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destructor' type-id='7e20177b' visibility='default' filepath='include/net/inet_frag.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='frag_expire' type-id='9582ad9a' visibility='default' filepath='include/net/inet_frag.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='frags_cachep' type-id='f3b4aca8' visibility='default' filepath='include/net/inet_frag.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='frags_cache_name' type-id='80f4b756' visibility='default' filepath='include/net/inet_frag.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rhash_params' type-id='e4c11782' visibility='default' filepath='include/net/inet_frag.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/inet_frag.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='completion' type-id='f9fef04f' visibility='default' filepath='include/net/inet_frag.h' line='109' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_frag_queue' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/net/inet_frag.h' line='77' column='1' id='b5a731bc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='f68e0adc' visibility='default' filepath='include/net/inet_frag.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key' type-id='41d7e522' visibility='default' filepath='include/net/inet_frag.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/net/inet_frag.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/inet_frag.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/inet_frag.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rb_fragments' type-id='dec44472' visibility='default' filepath='include/net/inet_frag.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fragments_tail' type-id='0fbf3cfd' visibility='default' filepath='include/net/inet_frag.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='last_run_head' type-id='0fbf3cfd' visibility='default' filepath='include/net/inet_frag.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='stamp' type-id='fbc017ef' visibility='default' filepath='include/net/inet_frag.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='len' type-id='95e97e5e' visibility='default' filepath='include/net/inet_frag.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='meat' type-id='95e97e5e' visibility='default' filepath='include/net/inet_frag.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/net/inet_frag.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1296'>
+          <var-decl name='max_size' type-id='1dc6a898' visibility='default' filepath='include/net/inet_frag.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fqdir' type-id='943ad75f' visibility='default' filepath='include/net/inet_frag.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/inet_frag.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rhash_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/rhashtable-types.h' line='17' column='1' id='f68e0adc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='3cc8739a' visibility='default' filepath='include/linux/rhashtable-types.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__10' size-in-bits='352' is-anonymous='yes' visibility='default' filepath='include/net/inet_frag.h' line='79' column='1' id='41d7e522'>
+        <data-member access='private'>
+          <var-decl name='v4' type-id='c3a8bbbc' visibility='default' filepath='include/net/inet_frag.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='v6' type-id='c67e16a2' visibility='default' filepath='include/net/inet_frag.h' line='81' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='frag_v4_compare_key' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/inet_frag.h' line='41' column='1' id='c3a8bbbc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='saddr' type-id='78a133c2' visibility='default' filepath='include/net/inet_frag.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='daddr' type-id='78a133c2' visibility='default' filepath='include/net/inet_frag.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='user' type-id='19c2251e' visibility='default' filepath='include/net/inet_frag.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='vif' type-id='19c2251e' visibility='default' filepath='include/net/inet_frag.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='84a5c3d4' visibility='default' filepath='include/net/inet_frag.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='protocol' type-id='1dc6a898' visibility='default' filepath='include/net/inet_frag.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__be32' type-id='3f1a6b60' filepath='include/uapi/linux/types.h' line='32' column='1' id='78a133c2'/>
+      <class-decl name='frag_v6_compare_key' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/net/inet_frag.h' line='50' column='1' id='c67e16a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='saddr' type-id='f6ed712a' visibility='default' filepath='include/net/inet_frag.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='daddr' type-id='f6ed712a' visibility='default' filepath='include/net/inet_frag.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='user' type-id='19c2251e' visibility='default' filepath='include/net/inet_frag.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='id' type-id='78a133c2' visibility='default' filepath='include/net/inet_frag.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='iif' type-id='19c2251e' visibility='default' filepath='include/net/inet_frag.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='in6_addr' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/in6.h' line='33' column='1' id='f6ed712a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='in6_u' type-id='0efc37b8' visibility='default' filepath='include/uapi/linux/in6.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__11' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/in6.h' line='34' column='1' id='0efc37b8'>
+        <data-member access='private'>
+          <var-decl name='u6_addr8' type-id='9396cabb' visibility='default' filepath='include/uapi/linux/in6.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u6_addr16' type-id='7f112b69' visibility='default' filepath='include/uapi/linux/in6.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='u6_addr32' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/in6.h' line='38' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='rhashtable_params' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/rhashtable-types.h' line='56' column='1' id='e4c11782'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nelem_hint' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='key_len' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='key_offset' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='head_offset' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_size' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable-types.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='min_size' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='automatic_shrinking' type-id='b50a4934' visibility='default' filepath='include/linux/rhashtable-types.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hashfn' type-id='07fa0d18' visibility='default' filepath='include/linux/rhashtable-types.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='obj_hashfn' type-id='365fa902' visibility='default' filepath='include/linux/rhashtable-types.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='obj_cmpfn' type-id='a8e15d8c' visibility='default' filepath='include/linux/rhashtable-types.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='rht_hashfn_t' type-id='bc00c03b' filepath='include/linux/rhashtable-types.h' line='38' column='1' id='07fa0d18'/>
+      <typedef-decl name='rht_obj_hashfn_t' type-id='bc00c03b' filepath='include/linux/rhashtable-types.h' line='39' column='1' id='365fa902'/>
+      <typedef-decl name='rht_obj_cmpfn_t' type-id='d8c458ae' filepath='include/linux/rhashtable-types.h' line='40' column='1' id='a8e15d8c'/>
+      <class-decl name='rhashtable_compare_arg' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/rhashtable-types.h' line='33' column='1' id='9f7fd760'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ht' type-id='e6726ce3' visibility='default' filepath='include/linux/rhashtable-types.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key' type-id='eaa32e2f' visibility='default' filepath='include/linux/rhashtable-types.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rhashtable' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/rhashtable-types.h' line='81' column='1' id='9e095f93'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tbl' type-id='35e7a722' visibility='default' filepath='include/linux/rhashtable-types.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key_len' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable-types.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_elems' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable-types.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='p' type-id='e4c11782' visibility='default' filepath='include/linux/rhashtable-types.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rhlist' type-id='b50a4934' visibility='default' filepath='include/linux/rhashtable-types.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='run_work' type-id='ef9025d0' visibility='default' filepath='include/linux/rhashtable-types.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/rhashtable-types.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/rhashtable-types.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='nelems' type-id='49178f86' visibility='default' filepath='include/linux/rhashtable-types.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='local_ports' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/netns/ipv4.h' line='21' column='1' id='93d4ab27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/netns/ipv4.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='range' type-id='e4266c7e' visibility='default' filepath='include/net/netns/ipv4.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='warned' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv4.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_timewait_death_row' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/net/netns/ipv4.h' line='34' column='1' id='af2c6a56'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tw_count' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv4.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='hashinfo' type-id='d7a1e3c2' visibility='default' filepath='include/net/netns/ipv4.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sysctl_max_tw_buckets' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ping_group_range' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/netns/ipv4.h' line='27' column='1' id='89d35c53'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/netns/ipv4.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='range' type-id='5fd0d2fb' visibility='default' filepath='include/net/netns/ipv4.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='siphash_key_t' type-id='a1908dcc' filepath='include/linux/siphash.h' line='22' column='1' id='7799da43'/>
+      <class-decl name='__anonymous_struct__8' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='7799da43' visibility='default' filepath='include/linux/siphash.h' line='20' column='1' id='a1908dcc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='24a375b2' visibility='default' filepath='include/linux/siphash.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_ipv6' size-in-bits='6144' is-struct='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='56' column='1' id='dda16745'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysctl' type-id='6c13064a' visibility='default' filepath='include/net/netns/ipv6.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='devconf_all' type-id='ca399350' visibility='default' filepath='include/net/netns/ipv6.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='devconf_dflt' type-id='ca399350' visibility='default' filepath='include/net/netns/ipv6.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='peers' type-id='01d310c2' visibility='default' filepath='include/net/netns/ipv6.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='fqdir' type-id='943ad75f' visibility='default' filepath='include/net/netns/ipv6.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='ip6table_filter' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ip6table_mangle' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ip6table_raw' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ip6table_security' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='ip6table_nat' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='fib6_null_entry' type-id='fe454a75' visibility='default' filepath='include/net/netns/ipv6.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='ip6_null_entry' type-id='6ceb7782' visibility='default' filepath='include/net/netns/ipv6.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='rt6_stats' type-id='aca8a113' visibility='default' filepath='include/net/netns/ipv6.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ip6_fib_timer' type-id='abe41e67' visibility='default' filepath='include/net/netns/ipv6.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='fib_table_hash' type-id='030d0b18' visibility='default' filepath='include/net/netns/ipv6.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='fib6_main_tbl' type-id='7156b317' visibility='default' filepath='include/net/netns/ipv6.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='fib6_walkers' type-id='72f469ec' visibility='default' filepath='include/net/netns/ipv6.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='ip6_dst_ops' type-id='32358857' visibility='default' filepath='include/net/netns/ipv6.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='fib6_walker_lock' type-id='ac16795b' visibility='default' filepath='include/net/netns/ipv6.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='fib6_gc_lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/ipv6.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4704'>
+          <var-decl name='ip6_rt_gc_expire' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv6.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='ip6_rt_last_gc' type-id='7359adad' visibility='default' filepath='include/net/netns/ipv6.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='fib6_rules_require_fldissect' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv6.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4832'>
+          <var-decl name='fib6_has_custom_rules' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv6.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='ip6_prohibit_entry' type-id='6ceb7782' visibility='default' filepath='include/net/netns/ipv6.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='ip6_blk_hole_entry' type-id='6ceb7782' visibility='default' filepath='include/net/netns/ipv6.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='fib6_local_tbl' type-id='7156b317' visibility='default' filepath='include/net/netns/ipv6.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='fib6_rules_ops' type-id='a68064b1' visibility='default' filepath='include/net/netns/ipv6.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='icmp_sk' type-id='d0d57cc5' visibility='default' filepath='include/net/netns/ipv6.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='ndisc_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv6.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='tcp_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv6.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='igmp_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv6.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='mc_autojoin_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv6.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='dev_addr_genid' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv6.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5472'>
+          <var-decl name='fib6_sernum' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv6.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='seg6_data' type-id='15b8a3be' visibility='default' filepath='include/net/netns/ipv6.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='notifier_ops' type-id='74f101b0' visibility='default' filepath='include/net/netns/ipv6.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='ip6mr_notifier_ops' type-id='74f101b0' visibility='default' filepath='include/net/netns/ipv6.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='ipmr_seq' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv6.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='ip6addrlbl_table' type-id='a03c964b' visibility='default' filepath='include/net/netns/ipv6.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_sysctl_ipv6' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='15' column='1' id='6c13064a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='route_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='icmp_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='frags_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xfrm6_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bindv6only' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='flush_delay' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ip6_rt_max_size' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='ip6_rt_gc_min_interval' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ip6_rt_gc_timeout' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='ip6_rt_gc_interval' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ip6_rt_gc_elasticity' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='ip6_rt_mtu_expires' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ip6_rt_min_advmss' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='multipath_hash_policy' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flowlabel_consistency' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='auto_flowlabels' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='icmpv6_time' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='icmpv6_echo_ignore_all' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='icmpv6_echo_ignore_multicast' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='icmpv6_echo_ignore_anycast' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='icmpv6_ratemask' type-id='f46d9f4d' visibility='default' filepath='include/net/netns/ipv6.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='icmpv6_ratemask_ptr' type-id='1d2c2b85' visibility='default' filepath='include/net/netns/ipv6.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='anycast_src_echo_reply' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='ip_nonlocal_bind' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fwmark_reflect' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='idgen_retries' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='idgen_delay' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='flowlabel_state_ranges' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='flowlabel_reflect' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='max_dst_opts_cnt' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='max_hbh_opts_cnt' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='max_dst_opts_len' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='max_hbh_opts_len' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='seg6_flowlabel' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='skip_notify_on_dev_down' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv6.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dst_ops' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/net/dst_ops.h' line='15' column='1' id='32358857'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='8efea9e5' visibility='default' filepath='include/net/dst_ops.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='gc_thresh' type-id='f0981eeb' visibility='default' filepath='include/net/dst_ops.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gc' type-id='79efa3b3' visibility='default' filepath='include/net/dst_ops.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='check' type-id='d7c38177' visibility='default' filepath='include/net/dst_ops.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='default_advmss' type-id='34c443b7' visibility='default' filepath='include/net/dst_ops.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mtu' type-id='34c443b7' visibility='default' filepath='include/net/dst_ops.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cow_metrics' type-id='9917918c' visibility='default' filepath='include/net/dst_ops.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='destroy' type-id='d6965222' visibility='default' filepath='include/net/dst_ops.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ifdown' type-id='ce828d9f' visibility='default' filepath='include/net/dst_ops.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='negative_advice' type-id='3ce3447a' visibility='default' filepath='include/net/dst_ops.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='link_failure' type-id='0ef96694' visibility='default' filepath='include/net/dst_ops.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='update_pmtu' type-id='79b8da5c' visibility='default' filepath='include/net/dst_ops.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='redirect' type-id='9f403612' visibility='default' filepath='include/net/dst_ops.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='local_out' type-id='0023218e' visibility='default' filepath='include/net/dst_ops.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='neigh_lookup' type-id='950eceb8' visibility='default' filepath='include/net/dst_ops.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='confirm_neigh' type-id='7e5b15cf' visibility='default' filepath='include/net/dst_ops.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='kmem_cachep' type-id='f3b4aca8' visibility='default' filepath='include/net/dst_ops.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pcpuc_entries' type-id='b92c8d0d' visibility='default' filepath='include/net/dst_ops.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='percpu_counter' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/percpu_counter.h' line='20' column='1' id='b92c8d0d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/percpu_counter.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='9b7c55ef' visibility='default' filepath='include/linux/percpu_counter.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/percpu_counter.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='counters' type-id='9f2cce4b' visibility='default' filepath='include/linux/percpu_counter.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__9' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='110' column='1' id='a03c964b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='e151255a' visibility='default' filepath='include/net/netns/ipv6.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/ipv6.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='seq' type-id='19c2251e' visibility='default' filepath='include/net/netns/ipv6.h' line='113' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_nf' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/net/netns/netfilter.h' line='11' column='1' id='0a6298e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='proc_netfilter' type-id='d077e928' visibility='default' filepath='include/net/netns/netfilter.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='queue_handler' type-id='67f12fe3' visibility='default' filepath='include/net/netns/netfilter.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nf_loggers' type-id='e521ce61' visibility='default' filepath='include/net/netns/netfilter.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nf_log_dir_header' type-id='11b101bb' visibility='default' filepath='include/net/netns/netfilter.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='hooks_ipv4' type-id='94310593' visibility='default' filepath='include/net/netns/netfilter.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='hooks_ipv6' type-id='94310593' visibility='default' filepath='include/net/netns/netfilter.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='hooks_arp' type-id='d82cf371' visibility='default' filepath='include/net/netns/netfilter.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='defrag_ipv4' type-id='b50a4934' visibility='default' filepath='include/net/netns/netfilter.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1864'>
+          <var-decl name='defrag_ipv6' type-id='b50a4934' visibility='default' filepath='include/net/netns/netfilter.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_xt' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/net/netns/x_tables.h' line='10' column='1' id='288fe7b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tables' type-id='5e747b58' visibility='default' filepath='include/net/netns/x_tables.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='notrack_deprecated_warning' type-id='b50a4934' visibility='default' filepath='include/net/netns/x_tables.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1672'>
+          <var-decl name='clusterip_deprecated_warning' type-id='b50a4934' visibility='default' filepath='include/net/netns/x_tables.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_ct' size-in-bits='3328' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='95' column='1' id='2a831eeb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/net/netns/conntrack.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='expect_count' type-id='f0981eeb' visibility='default' filepath='include/net/netns/conntrack.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ecache_dwork' type-id='5ad6e0ef' visibility='default' filepath='include/net/netns/conntrack.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ecache_dwork_pending' type-id='b50a4934' visibility='default' filepath='include/net/netns/conntrack.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='auto_assign_helper_warned' type-id='b50a4934' visibility='default' filepath='include/net/netns/conntrack.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='sysctl_header' type-id='11b101bb' visibility='default' filepath='include/net/netns/conntrack.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='sysctl_log_invalid' type-id='f0981eeb' visibility='default' filepath='include/net/netns/conntrack.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='sysctl_events' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='sysctl_acct' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='sysctl_auto_assign_helper' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='sysctl_tstamp' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='sysctl_checksum' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='pcpu_lists' type-id='b2bcb5d9' visibility='default' filepath='include/net/netns/conntrack.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='stat' type-id='e46089fd' visibility='default' filepath='include/net/netns/conntrack.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='nf_conntrack_event_cb' type-id='2db792b9' visibility='default' filepath='include/net/netns/conntrack.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='nf_expect_event_cb' type-id='bb6de7e1' visibility='default' filepath='include/net/netns/conntrack.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='nf_ct_proto' type-id='7f3015f3' visibility='default' filepath='include/net/netns/conntrack.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ct_pcpu' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='89' column='1' id='4ec43a31'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/conntrack.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unconfirmed' type-id='af86905d' visibility='default' filepath='include/net/netns/conntrack.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dying' type-id='af86905d' visibility='default' filepath='include/net/netns/conntrack.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hlist_nulls_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/list_nulls.h' line='21' column='1' id='af86905d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='6cf6468f' visibility='default' filepath='include/linux/list_nulls.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hlist_nulls_node' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/list_nulls.h' line='25' column='1' id='5bd248e7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='6cf6468f' visibility='default' filepath='include/linux/list_nulls.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pprev' type-id='2cb135bf' visibility='default' filepath='include/linux/list_nulls.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip_conntrack_stat' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='8' column='1' id='be50a64d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='found' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='invalid' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ignore' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='insert' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='insert_failed' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='drop' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='early_drop' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='error' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='expect_new' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='expect_create' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='expect_delete' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='search_restart' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_ip_net' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='72' column='1' id='7f3015f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='generic' type-id='80487c53' visibility='default' filepath='include/net/netns/conntrack.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tcp' type-id='a2e01929' visibility='default' filepath='include/net/netns/conntrack.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='udp' type-id='328aff41' visibility='default' filepath='include/net/netns/conntrack.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='icmp' type-id='8cc9c55b' visibility='default' filepath='include/net/netns/conntrack.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='icmpv6' type-id='8cc9c55b' visibility='default' filepath='include/net/netns/conntrack.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dccp' type-id='ddb2f0ec' visibility='default' filepath='include/net/netns/conntrack.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='sctp' type-id='c91839d0' visibility='default' filepath='include/net/netns/conntrack.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='gre' type-id='ef266e4a' visibility='default' filepath='include/net/netns/conntrack.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_generic_net' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='21' column='1' id='80487c53'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/net/netns/conntrack.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_tcp_net' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='25' column='1' id='a2e01929'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeouts' type-id='27cbf0c8' visibility='default' filepath='include/net/netns/conntrack.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tcp_loose' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='tcp_be_liberal' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='tcp_max_retrans' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_udp_net' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='38' column='1' id='328aff41'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeouts' type-id='0d532ec1' visibility='default' filepath='include/net/netns/conntrack.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_icmp_net' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='42' column='1' id='8cc9c55b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/net/netns/conntrack.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_dccp_net' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='47' column='1' id='ddb2f0ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dccp_loose' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dccp_timeout' type-id='67c1c82c' visibility='default' filepath='include/net/netns/conntrack.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_sctp_net' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='54' column='1' id='c91839d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeouts' type-id='67c1c82c' visibility='default' filepath='include/net/netns/conntrack.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_gre_net' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='66' column='1' id='ef266e4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='keymap_list' type-id='72f469ec' visibility='default' filepath='include/net/netns/conntrack.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timeouts' type-id='0d532ec1' visibility='default' filepath='include/net/netns/conntrack.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_nf_frag' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='118' column='1' id='ebd39a5d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fqdir' type-id='943ad75f' visibility='default' filepath='include/net/netns/ipv6.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sk_buff_head' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/skbuff.h' line='290' column='1' id='e61c85d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prev' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='qlen' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/skbuff.h' line='296' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_xfrm' size-in-bits='7168' is-struct='yes' visibility='default' filepath='include/net/netns/xfrm.h' line='32' column='1' id='3d2d291b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state_all' type-id='72f469ec' visibility='default' filepath='include/net/netns/xfrm.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state_bydst' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='state_bysrc' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='state_byspi' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state_hmask' type-id='f0981eeb' visibility='default' filepath='include/net/netns/xfrm.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='state_num' type-id='f0981eeb' visibility='default' filepath='include/net/netns/xfrm.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='state_hash_work' type-id='ef9025d0' visibility='default' filepath='include/net/netns/xfrm.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='policy_all' type-id='72f469ec' visibility='default' filepath='include/net/netns/xfrm.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='policy_byidx' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='policy_idx_hmask' type-id='f0981eeb' visibility='default' filepath='include/net/netns/xfrm.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='policy_inexact' type-id='fc293b5f' visibility='default' filepath='include/net/netns/xfrm.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='policy_bydst' type-id='bd1ec77b' visibility='default' filepath='include/net/netns/xfrm.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='policy_count' type-id='0d5c291d' visibility='default' filepath='include/net/netns/xfrm.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='policy_hash_work' type-id='ef9025d0' visibility='default' filepath='include/net/netns/xfrm.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='policy_hthresh' type-id='52aaaba4' visibility='default' filepath='include/net/netns/xfrm.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='inexact_bins' type-id='72f469ec' visibility='default' filepath='include/net/netns/xfrm.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='nlsk' type-id='f772df6d' visibility='default' filepath='include/net/netns/xfrm.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='nlsk_stash' type-id='f772df6d' visibility='default' filepath='include/net/netns/xfrm.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='sysctl_aevent_etime' type-id='19c2251e' visibility='default' filepath='include/net/netns/xfrm.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2976'>
+          <var-decl name='sysctl_aevent_rseqth' type-id='19c2251e' visibility='default' filepath='include/net/netns/xfrm.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='sysctl_larval_drop' type-id='95e97e5e' visibility='default' filepath='include/net/netns/xfrm.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='sysctl_acq_expires' type-id='19c2251e' visibility='default' filepath='include/net/netns/xfrm.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='sysctl_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/xfrm.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='xfrm4_dst_ops' type-id='32358857' visibility='default' filepath='include/net/netns/xfrm.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='xfrm6_dst_ops' type-id='32358857' visibility='default' filepath='include/net/netns/xfrm.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='xfrm_state_lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/xfrm.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6688'>
+          <var-decl name='xfrm_policy_lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/xfrm.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='xfrm_cfg_mutex' type-id='925167dc' visibility='default' filepath='include/net/netns/xfrm.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_policy_hash' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/netns/xfrm.h' line='14' column='1' id='9b61d1a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='table' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hmask' type-id='f0981eeb' visibility='default' filepath='include/net/netns/xfrm.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dbits4' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='sbits4' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='dbits6' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='sbits6' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_policy_hthresh' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/netns/xfrm.h' line='23' column='1' id='52aaaba4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/net/netns/xfrm.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/netns/xfrm.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lbits4' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='rbits4' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='lbits6' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='472'>
+          <var-decl name='rbits6' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_xdp' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/netns/xdp.h' line='8' column='1' id='a2b0ef48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/net/netns/xdp.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='e151255a' visibility='default' filepath='include/net/netns/xdp.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_namespace' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/cgroup.h' line='856' column='1' id='e54806c6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='64615833' visibility='default' filepath='include/linux/cgroup.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ns' type-id='99f367f2' visibility='default' filepath='include/linux/cgroup.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='user_ns' type-id='c0ced321' visibility='default' filepath='include/linux/cgroup.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ucounts' type-id='b1d4934a' visibility='default' filepath='include/linux/cgroup.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='root_cset' type-id='85d57723' visibility='default' filepath='include/linux/cgroup.h' line='861' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bio_list' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bio.h' line='580' column='1' id='096280bf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='fb55efa1' visibility='default' filepath='include/linux/bio.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tail' type-id='fb55efa1' visibility='default' filepath='include/linux/bio.h' line='582' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bio' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/blk_types.h' line='146' column='1' id='f3e87129'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bi_next' type-id='fb55efa1' visibility='default' filepath='include/linux/blk_types.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bi_disk' type-id='33c599db' visibility='default' filepath='include/linux/blk_types.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bi_opf' type-id='f0981eeb' visibility='default' filepath='include/linux/blk_types.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='bi_flags' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='bi_ioprio' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bi_write_hint' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='bi_status' type-id='f4e2facd' visibility='default' filepath='include/linux/blk_types.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='bi_partno' type-id='f9b06939' visibility='default' filepath='include/linux/blk_types.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bi_iter' type-id='9e0198d8' visibility='default' filepath='include/linux/blk_types.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='__bi_remaining' type-id='49178f86' visibility='default' filepath='include/linux/blk_types.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='bi_end_io' type-id='8213bb9f' visibility='default' filepath='include/linux/blk_types.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bi_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/blk_types.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bi_blkg' type-id='1146dea3' visibility='default' filepath='include/linux/blk_types.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='bi_issue' type-id='a9b0f4f1' visibility='default' filepath='include/linux/blk_types.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bi_crypt_context' type-id='9d1360ce' visibility='default' filepath='include/linux/blk_types.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='bi_skip_dm_default_key' type-id='b50a4934' visibility='default' filepath='include/linux/blk_types.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='840'>
+          <var-decl name='' type-id='2a125a28' visibility='default' filepath='include/linux/blk_types.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='848'>
+          <var-decl name='bi_vcnt' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='bi_max_vecs' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='__bi_cnt' type-id='49178f86' visibility='default' filepath='include/linux/blk_types.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bi_io_vec' type-id='cddcb53e' visibility='default' filepath='include/linux/blk_types.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bi_pool' type-id='38b1e3a0' visibility='default' filepath='include/linux/blk_types.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='bi_inline_vecs' type-id='7289e834' visibility='default' filepath='include/linux/blk_types.h' line='214' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gendisk' size-in-bits='11136' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='191' column='1' id='4f60ffbd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='major' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='first_minor' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='minors' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='disk_name' type-id='16dc656a' visibility='default' filepath='include/linux/genhd.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='devnode' type-id='b160f6ba' visibility='default' filepath='include/linux/genhd.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='events' type-id='8efea9e5' visibility='default' filepath='include/linux/genhd.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='event_flags' type-id='8efea9e5' visibility='default' filepath='include/linux/genhd.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='part_tbl' type-id='af836b25' visibility='default' filepath='include/linux/genhd.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='part0' type-id='2473bc20' visibility='default' filepath='include/linux/genhd.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='fops' type-id='6829b047' visibility='default' filepath='include/linux/genhd.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='queue' type-id='e7d2a5fd' visibility='default' filepath='include/linux/genhd.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/genhd.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='lookup_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/genhd.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='slave_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/genhd.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='random' type-id='22aa3c54' visibility='default' filepath='include/linux/genhd.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='sync_io' type-id='49178f86' visibility='default' filepath='include/linux/genhd.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='ev' type-id='26f00576' visibility='default' filepath='include/linux/genhd.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='node_id' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='bb' type-id='5760652c' visibility='default' filepath='include/linux/genhd.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='lockdep_map' type-id='d34a605e' visibility='default' filepath='include/linux/genhd.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='235' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='disk_part_tbl' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='166' column='1' id='a8d380d5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/genhd.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_lookup' type-id='84dc82b8' visibility='default' filepath='include/linux/genhd.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='part' type-id='f7aeb09b' visibility='default' filepath='include/linux/genhd.h' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hd_struct' size-in-bits='9280' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='109' column='1' id='2473bc20'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_sect' type-id='a42536cd' visibility='default' filepath='include/linux/genhd.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_sects' type-id='a42536cd' visibility='default' filepath='include/linux/genhd.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nr_sects_seq' type-id='e14c3b11' visibility='default' filepath='include/linux/genhd.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='alignment_offset' type-id='a42536cd' visibility='default' filepath='include/linux/genhd.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='discard_alignment' type-id='f0981eeb' visibility='default' filepath='include/linux/genhd.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='__dev' type-id='66e487eb' visibility='default' filepath='include/linux/genhd.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='holder_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/genhd.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='policy' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='partno' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='info' type-id='d4f2b9b2' visibility='default' filepath='include/linux/genhd.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='stamp' type-id='7359adad' visibility='default' filepath='include/linux/genhd.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='dkstats' type-id='70f1634e' visibility='default' filepath='include/linux/genhd.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='ref' type-id='818799b4' visibility='default' filepath='include/linux/genhd.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='rcu_work' type-id='7c0b9fdb' visibility='default' filepath='include/linux/genhd.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='139' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='partition_meta_info' size-in-bits='808' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='104' column='1' id='a388c264'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uuid' type-id='12e4ade3' visibility='default' filepath='include/linux/genhd.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='volname' type-id='47ba3182' visibility='default' filepath='include/linux/genhd.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='disk_stats' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='87' column='1' id='acfd9368'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nsecs' type-id='20a130cf' visibility='default' filepath='include/linux/genhd.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sectors' type-id='3461381a' visibility='default' filepath='include/linux/genhd.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ios' type-id='3461381a' visibility='default' filepath='include/linux/genhd.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='merges' type-id='3461381a' visibility='default' filepath='include/linux/genhd.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='io_ticks' type-id='7359adad' visibility='default' filepath='include/linux/genhd.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='time_in_queue' type-id='7359adad' visibility='default' filepath='include/linux/genhd.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='in_flight' type-id='efa46f39' visibility='default' filepath='include/linux/genhd.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='local_t' type-id='de878dd6' filepath='include/asm-generic/local.h' line='25' column='1' id='dd91f264'/>
+      <class-decl name='__anonymous_struct__10' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='dd91f264' visibility='default' filepath='include/asm-generic/local.h' line='22' column='1' id='de878dd6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='a' type-id='f22a8abb' visibility='default' filepath='include/asm-generic/local.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='block_device_operations' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='1734' column='1' id='dbd58b50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='2207988a' visibility='default' filepath='include/linux/blkdev.h' line='1735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release' type-id='156433b6' visibility='default' filepath='include/linux/blkdev.h' line='1736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rw_page' type-id='55f833ce' visibility='default' filepath='include/linux/blkdev.h' line='1737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ioctl' type-id='6ed32e60' visibility='default' filepath='include/linux/blkdev.h' line='1738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='compat_ioctl' type-id='6ed32e60' visibility='default' filepath='include/linux/blkdev.h' line='1739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='check_events' type-id='4bf65d9d' visibility='default' filepath='include/linux/blkdev.h' line='1740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='media_changed' type-id='f220106e' visibility='default' filepath='include/linux/blkdev.h' line='1743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unlock_native_capacity' type-id='dabeff1b' visibility='default' filepath='include/linux/blkdev.h' line='1744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='revalidate_disk' type-id='f220106e' visibility='default' filepath='include/linux/blkdev.h' line='1745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='getgeo' type-id='68a88aaa' visibility='default' filepath='include/linux/blkdev.h' line='1746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='swap_slot_free_notify' type-id='c4cac78c' visibility='default' filepath='include/linux/blkdev.h' line='1748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='report_zones' type-id='8eee5b07' visibility='default' filepath='include/linux/blkdev.h' line='1749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/blkdev.h' line='1751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pr_ops' type-id='08d45f21' visibility='default' filepath='include/linux/blkdev.h' line='1752' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request_queue' size-in-bits='16448' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='400' column='1' id='caf652c7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='last_merge' type-id='3dad1a48' visibility='default' filepath='include/linux/blkdev.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='elevator' type-id='07d0a3e7' visibility='default' filepath='include/linux/blkdev.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='stats' type-id='a0408c5a' visibility='default' filepath='include/linux/blkdev.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rq_qos' type-id='c3a28778' visibility='default' filepath='include/linux/blkdev.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='make_request_fn' type-id='8f01ad5c' visibility='default' filepath='include/linux/blkdev.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dma_drain_needed' type-id='1b19faa1' visibility='default' filepath='include/linux/blkdev.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mq_ops' type-id='e1962c5d' visibility='default' filepath='include/linux/blkdev.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='queue_ctx' type-id='9a335021' visibility='default' filepath='include/linux/blkdev.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='nr_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='queue_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='queue_hw_ctx' type-id='3e195537' visibility='default' filepath='include/linux/blkdev.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='nr_hw_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='backing_dev_info' type-id='ef4fae1c' visibility='default' filepath='include/linux/blkdev.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='queuedata' type-id='eaa32e2f' visibility='default' filepath='include/linux/blkdev.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='queue_flags' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pm_only' type-id='49178f86' visibility='default' filepath='include/linux/blkdev.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bounce_gfp' type-id='3eb7c31c' visibility='default' filepath='include/linux/blkdev.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='queue_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blkdev.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/blkdev.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='mq_kobj' type-id='d30bdc51' visibility='default' filepath='include/linux/blkdev.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/blkdev.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='rpm_status' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='nr_pending' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='nr_requests' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dma_drain_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='dma_drain_buffer' type-id='eaa32e2f' visibility='default' filepath='include/linux/blkdev.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='dma_pad_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='dma_alignment' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='ksm' type-id='bf8a20d2' visibility='default' filepath='include/linux/blkdev.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='rq_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='poll_nsec' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='poll_cb' type-id='1f98c663' visibility='default' filepath='include/linux/blkdev.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='poll_stat' type-id='8574e02e' visibility='default' filepath='include/linux/blkdev.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='timeout' type-id='abe41e67' visibility='default' filepath='include/linux/blkdev.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='timeout_work' type-id='ef9025d0' visibility='default' filepath='include/linux/blkdev.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='icq_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='blkcg_pols' type-id='f066dd3c' visibility='default' filepath='include/linux/blkdev.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='root_blkg' type-id='1146dea3' visibility='default' filepath='include/linux/blkdev.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='blkg_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='limits' type-id='f0966d3d' visibility='default' filepath='include/linux/blkdev.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='required_elevator_features' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9632'>
+          <var-decl name='sg_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='sg_reserved_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9696'>
+          <var-decl name='node' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='fq' type-id='e118aff9' visibility='default' filepath='include/linux/blkdev.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='requeue_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='requeue_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blkdev.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='requeue_work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/blkdev.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='sysfs_lock' type-id='925167dc' visibility='default' filepath='include/linux/blkdev.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='sysfs_dir_lock' type-id='925167dc' visibility='default' filepath='include/linux/blkdev.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='unused_hctx_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='unused_hctx_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blkdev.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11744'>
+          <var-decl name='mq_freeze_depth' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='bsg_dev' type-id='6a3af55b' visibility='default' filepath='include/linux/blkdev.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/blkdev.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='mq_freeze_wq' type-id='b5ab048f' visibility='default' filepath='include/linux/blkdev.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='mq_freeze_lock' type-id='925167dc' visibility='default' filepath='include/linux/blkdev.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12608'>
+          <var-decl name='q_usage_counter' type-id='818799b4' visibility='default' filepath='include/linux/blkdev.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='tag_set' type-id='cc26d15f' visibility='default' filepath='include/linux/blkdev.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='tag_set_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='bio_split' type-id='dfa886b2' visibility='default' filepath='include/linux/blkdev.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15424'>
+          <var-decl name='debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blkdev.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15488'>
+          <var-decl name='sched_debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blkdev.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15552'>
+          <var-decl name='rqos_debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blkdev.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15616'>
+          <var-decl name='mq_sysfs_init_done' type-id='b50a4934' visibility='default' filepath='include/linux/blkdev.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15680'>
+          <var-decl name='cmd_size' type-id='b59d7dce' visibility='default' filepath='include/linux/blkdev.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15744'>
+          <var-decl name='release_work' type-id='ef9025d0' visibility='default' filepath='include/linux/blkdev.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16128'>
+          <var-decl name='write_hints' type-id='64af1365' visibility='default' filepath='include/linux/blkdev.h' line='597' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request' size-in-bits='2368' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='133' column='1' id='ceee71ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q' type-id='e7d2a5fd' visibility='default' filepath='include/linux/blkdev.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mq_ctx' type-id='9a335021' visibility='default' filepath='include/linux/blkdev.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mq_hctx' type-id='a47d3467' visibility='default' filepath='include/linux/blkdev.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cmd_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='rq_flags' type-id='3b445e53' visibility='default' filepath='include/linux/blkdev.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tag' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='internal_tag' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='__data_len' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='__sector' type-id='a42536cd' visibility='default' filepath='include/linux/blkdev.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bio' type-id='fb55efa1' visibility='default' filepath='include/linux/blkdev.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='biotail' type-id='fb55efa1' visibility='default' filepath='include/linux/blkdev.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='queuelist' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='' type-id='2f76bc4b' visibility='default' filepath='include/linux/blkdev.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='' type-id='df8866ad' visibility='default' filepath='include/linux/blkdev.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='' type-id='7fc3d482' visibility='default' filepath='include/linux/blkdev.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='rq_disk' type-id='33c599db' visibility='default' filepath='include/linux/blkdev.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='part' type-id='84dc82b8' visibility='default' filepath='include/linux/blkdev.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='start_time_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='io_start_time_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='stats_sectors' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1552'>
+          <var-decl name='nr_phys_segments' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='crypt_ctx' type-id='9d1360ce' visibility='default' filepath='include/linux/blkdev.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='crypt_keyslot' type-id='5b559658' visibility='default' filepath='include/linux/blkdev.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='write_hint' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1744'>
+          <var-decl name='ioprio' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='extra_len' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='state' type-id='4df77f20' visibility='default' filepath='include/linux/blkdev.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='ref' type-id='64615833' visibility='default' filepath='include/linux/blkdev.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='deadline' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='' type-id='097c5bdb' visibility='default' filepath='include/linux/blkdev.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='end_io' type-id='5afdaa66' visibility='default' filepath='include/linux/blkdev.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='end_io_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blkdev.h' line='252' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='req_flags_t' type-id='3f1a6b60' filepath='include/linux/blkdev.h' line='67' column='1' id='3b445e53'/>
+      <union-decl name='__anonymous_union__12' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='160' column='1' id='2f76bc4b'>
+        <data-member access='private'>
+          <var-decl name='hash' type-id='03a4a074' visibility='default' filepath='include/linux/blkdev.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ipi_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='162' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__13' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='170' column='1' id='df8866ad'>
+        <data-member access='private'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='include/linux/blkdev.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='special_vec' type-id='40af3608' visibility='default' filepath='include/linux/blkdev.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='completion_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blkdev.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='error_count' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='174' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__14' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='183' column='1' id='7fc3d482'>
+        <data-member access='private'>
+          <var-decl name='elv' type-id='6d001302' visibility='default' filepath='include/linux/blkdev.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='flush' type-id='5596717b' visibility='default' filepath='include/linux/blkdev.h' line='193' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__11' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='184' column='1' id='6d001302'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='icq' type-id='7c6e0e0c' visibility='default' filepath='include/linux/blkdev.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='24ae0315' visibility='default' filepath='include/linux/blkdev.h' line='186' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__12' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='189' column='1' id='5596717b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seq' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='saved_end_io' type-id='5afdaa66' visibility='default' filepath='include/linux/blkdev.h' line='192' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='rq_end_io_fn' type-id='06c207bd' filepath='include/linux/blkdev.h' line='63' column='1' id='537d88b1'/>
+      <typedef-decl name='blk_status_t' type-id='f9b06939' filepath='include/linux/blk_types.h' line='31' column='1' id='f4e2facd'/>
+      <enum-decl name='mq_rq_state' filepath='include/linux/blkdev.h' line='121' column='1' id='4df77f20'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MQ_RQ_IDLE' value='0'/>
+        <enumerator name='MQ_RQ_IN_FLIGHT' value='1'/>
+        <enumerator name='MQ_RQ_COMPLETE' value='2'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__17' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='243' column='1' id='097c5bdb'>
+        <data-member access='private'>
+          <var-decl name='csd' type-id='bb75ea85' visibility='default' filepath='include/linux/blkdev.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fifo_time' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='245' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='elevator_queue' size-in-bits='5312' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='110' column='1' id='fc87d78f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='4a89adae' visibility='default' filepath='include/linux/elevator.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='elevator_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/elevator.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/elevator.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='sysfs_lock' type-id='925167dc' visibility='default' filepath='include/linux/elevator.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='registered' type-id='f0981eeb' visibility='default' filepath='include/linux/elevator.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hash' type-id='53b70d6c' visibility='default' filepath='include/linux/elevator.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='elevator_type' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='72' column='1' id='2731de48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='icq_cache' type-id='f3b4aca8' visibility='default' filepath='include/linux/elevator.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='386fe521' visibility='default' filepath='include/linux/elevator.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='icq_size' type-id='b59d7dce' visibility='default' filepath='include/linux/elevator.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='icq_align' type-id='b59d7dce' visibility='default' filepath='include/linux/elevator.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='elevator_attrs' type-id='177a4437' visibility='default' filepath='include/linux/elevator.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='elevator_name' type-id='80f4b756' visibility='default' filepath='include/linux/elevator.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='elevator_alias' type-id='80f4b756' visibility='default' filepath='include/linux/elevator.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='elevator_features' type-id='20f5f452' visibility='default' filepath='include/linux/elevator.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='elevator_owner' type-id='2730d015' visibility='default' filepath='include/linux/elevator.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='queue_debugfs_attrs' type-id='e649198d' visibility='default' filepath='include/linux/elevator.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='hctx_debugfs_attrs' type-id='e649198d' visibility='default' filepath='include/linux/elevator.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='icq_cache_name' type-id='aa4fa8f1' visibility='default' filepath='include/linux/elevator.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/elevator.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='elevator_mq_ops' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='30' column='1' id='386fe521'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init_sched' type-id='c2889977' visibility='default' filepath='include/linux/elevator.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='exit_sched' type-id='89340c26' visibility='default' filepath='include/linux/elevator.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init_hctx' type-id='a2abb549' visibility='default' filepath='include/linux/elevator.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='exit_hctx' type-id='66288ae4' visibility='default' filepath='include/linux/elevator.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='depth_updated' type-id='a75080c6' visibility='default' filepath='include/linux/elevator.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='allow_merge' type-id='1734c68b' visibility='default' filepath='include/linux/elevator.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bio_merge' type-id='c2644e83' visibility='default' filepath='include/linux/elevator.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='request_merge' type-id='f72cc247' visibility='default' filepath='include/linux/elevator.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='request_merged' type-id='b615a053' visibility='default' filepath='include/linux/elevator.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='requests_merged' type-id='40f624e9' visibility='default' filepath='include/linux/elevator.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='limit_depth' type-id='e46f66f3' visibility='default' filepath='include/linux/elevator.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='prepare_request' type-id='639b44d1' visibility='default' filepath='include/linux/elevator.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='finish_request' type-id='bbf015cd' visibility='default' filepath='include/linux/elevator.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='insert_requests' type-id='60c9df2c' visibility='default' filepath='include/linux/elevator.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dispatch_request' type-id='a66a8231' visibility='default' filepath='include/linux/elevator.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='has_work' type-id='6ca30b05' visibility='default' filepath='include/linux/elevator.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='completed_request' type-id='300d6413' visibility='default' filepath='include/linux/elevator.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='requeue_request' type-id='bbf015cd' visibility='default' filepath='include/linux/elevator.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='former_request' type-id='27bb8677' visibility='default' filepath='include/linux/elevator.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='next_request' type-id='27bb8677' visibility='default' filepath='include/linux/elevator.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='init_icq' type-id='fedb17fd' visibility='default' filepath='include/linux/elevator.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='exit_icq' type-id='fedb17fd' visibility='default' filepath='include/linux/elevator.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='elv_merge' filepath='include/linux/elevator.h' line='20' column='1' id='6bb0a326'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ELEVATOR_NO_MERGE' value='0'/>
+        <enumerator name='ELEVATOR_FRONT_MERGE' value='1'/>
+        <enumerator name='ELEVATOR_BACK_MERGE' value='2'/>
+        <enumerator name='ELEVATOR_DISCARD_MERGE' value='3'/>
+      </enum-decl>
+      <class-decl name='elv_fs_entry' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='63' column='1' id='aaa166ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' visibility='default' filepath='include/linux/elevator.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='a2178c8a' visibility='default' filepath='include/linux/elevator.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='1854489e' visibility='default' filepath='include/linux/elevator.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='make_request_fn' type-id='f8561c55' filepath='include/linux/blkdev.h' line='296' column='1' id='99cd4891'/>
+      <typedef-decl name='blk_qc_t' type-id='f0981eeb' filepath='include/linux/blk_types.h' line='465' column='1' id='041bc907'/>
+      <typedef-decl name='dma_drain_needed_fn' type-id='59bb6212' filepath='include/linux/blkdev.h' line='299' column='1' id='0128515a'/>
+      <class-decl name='blk_rq_stat' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/blk_types.h' line='491' column='1' id='a3274c4b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mean' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_samples' type-id='19c2251e' visibility='default' filepath='include/linux/blk_types.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='batch' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='496' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcg_gq' size-in-bits='6208' is-struct='yes' visibility='default' filepath='include/linux/blk-cgroup.h' line='108' column='1' id='9467b853'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q' type-id='e7d2a5fd' visibility='default' filepath='include/linux/blk-cgroup.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='q_node' type-id='72f469ec' visibility='default' filepath='include/linux/blk-cgroup.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='blkcg_node' type-id='03a4a074' visibility='default' filepath='include/linux/blk-cgroup.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='blkcg' type-id='11bff950' visibility='default' filepath='include/linux/blk-cgroup.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='wb_congested' type-id='d97a04ce' visibility='default' filepath='include/linux/blk-cgroup.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parent' type-id='1146dea3' visibility='default' filepath='include/linux/blk-cgroup.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='include/linux/blk-cgroup.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='online' type-id='b50a4934' visibility='default' filepath='include/linux/blk-cgroup.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='stat_bytes' type-id='247d0323' visibility='default' filepath='include/linux/blk-cgroup.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='stat_ios' type-id='247d0323' visibility='default' filepath='include/linux/blk-cgroup.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='pd' type-id='f5665670' visibility='default' filepath='include/linux/blk-cgroup.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='async_bio_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blk-cgroup.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='async_bios' type-id='096280bf' visibility='default' filepath='include/linux/blk-cgroup.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='async_bio_work' type-id='ef9025d0' visibility='default' filepath='include/linux/blk-cgroup.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='use_delay' type-id='49178f86' visibility='default' filepath='include/linux/blk-cgroup.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='delay_nsec' type-id='28ee064c' visibility='default' filepath='include/linux/blk-cgroup.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='delay_start' type-id='28ee064c' visibility='default' filepath='include/linux/blk-cgroup.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='last_delay' type-id='91ce1af9' visibility='default' filepath='include/linux/blk-cgroup.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='last_use' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-cgroup.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/blk-cgroup.h' line='145' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcg' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/linux/blk-cgroup.h' line='47' column='1' id='19b26952'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='css' type-id='7f3df443' visibility='default' filepath='include/linux/blk-cgroup.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blk-cgroup.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='blkg_tree' type-id='d39738ac' visibility='default' filepath='include/linux/blk-cgroup.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='blkg_hint' type-id='1146dea3' visibility='default' filepath='include/linux/blk-cgroup.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='blkg_list' type-id='e151255a' visibility='default' filepath='include/linux/blk-cgroup.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='cpd' type-id='39e1fe03' visibility='default' filepath='include/linux/blk-cgroup.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='all_blkcgs_node' type-id='72f469ec' visibility='default' filepath='include/linux/blk-cgroup.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='cgwb_list' type-id='72f469ec' visibility='default' filepath='include/linux/blk-cgroup.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='cgwb_refcnt' type-id='64615833' visibility='default' filepath='include/linux/blk-cgroup.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcg_policy_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/blk-cgroup.h' line='101' column='1' id='11fd1392'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='blkcg' type-id='11bff950' visibility='default' filepath='include/linux/blk-cgroup.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='plid' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-cgroup.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bdi_writeback_congested' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='98' column='1' id='87886298'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/linux/backing-dev-defs.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__bdi' type-id='ef4fae1c' visibility='default' filepath='include/linux/backing-dev-defs.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='blkcg_id' type-id='95e97e5e' visibility='default' filepath='include/linux/backing-dev-defs.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='include/linux/backing-dev-defs.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkg_rwstat' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/blk-cgroup.h' line='68' column='1' id='247d0323'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_cnt' type-id='68a92070' visibility='default' filepath='include/linux/blk-cgroup.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='aux_cnt' type-id='39e531ac' visibility='default' filepath='include/linux/blk-cgroup.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkg_policy_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/blk-cgroup.h' line='88' column='1' id='55eaf925'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='blkg' type-id='1146dea3' visibility='default' filepath='include/linux/blk-cgroup.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='plid' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-cgroup.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='queue_limits' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='326' column='1' id='f0966d3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bounce_pfn' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seg_boundary_mask' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='virt_boundary_mask' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_hw_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_dev_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='chunk_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='max_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_segment_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='physical_block_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='logical_block_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='alignment_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_min' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='io_opt' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='max_discard_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='max_hw_discard_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_write_same_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='max_write_zeroes_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='discard_granularity' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='discard_alignment' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='max_segments' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='720'>
+          <var-decl name='max_integrity_segments' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_discard_segments' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='752'>
+          <var-decl name='misaligned' type-id='002ac4a6' visibility='default' filepath='include/linux/blkdev.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='760'>
+          <var-decl name='discard_misaligned' type-id='002ac4a6' visibility='default' filepath='include/linux/blkdev.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='raid_partial_stripes_expensive' type-id='002ac4a6' visibility='default' filepath='include/linux/blkdev.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='zoned' type-id='a48b5528' visibility='default' filepath='include/linux/blkdev.h' line='355' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='blk_zoned_model' filepath='include/linux/blkdev.h' line='320' column='1' id='a48b5528'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BLK_ZONED_NONE' value='0'/>
+        <enumerator name='BLK_ZONED_HA' value='1'/>
+        <enumerator name='BLK_ZONED_HM' value='2'/>
+      </enum-decl>
+      <class-decl name='bsg_class_device' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/bsg.h' line='18' column='1' id='6a3af55b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='class_dev' type-id='fa0b179b' visibility='default' filepath='include/linux/bsg.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/linux/bsg.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='queue' type-id='e7d2a5fd' visibility='default' filepath='include/linux/bsg.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='1a0da7f7' visibility='default' filepath='include/linux/bsg.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bsg_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/bsg.h' line='10' column='1' id='ebd46aa4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='check_proto' type-id='22aed5fd' visibility='default' filepath='include/linux/bsg.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fill_hdr' type-id='b31b5e29' visibility='default' filepath='include/linux/bsg.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='complete_rq' type-id='f45f2842' visibility='default' filepath='include/linux/bsg.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='free_rq' type-id='bbf015cd' visibility='default' filepath='include/linux/bsg.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sg_io_v4' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/uapi/linux/bsg.h' line='22' column='1' id='73142703'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='guard' type-id='3158a266' visibility='default' filepath='include/uapi/linux/bsg.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='protocol' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='subprotocol' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='request_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='request' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bsg.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='request_tag' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bsg.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='request_attr' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='request_priority' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='request_extra' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='max_response_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='response' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bsg.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dout_iovec_count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='dout_xfer_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='din_iovec_count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='din_xfer_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dout_xferp' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bsg.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='din_xferp' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bsg.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='timeout' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='usr_ptr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bsg.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='spare_in' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='driver_status' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='transport_status' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='device_status' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='retry_delay' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='info' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='duration' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='response_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='din_resid' type-id='3158a266' visibility='default' filepath='include/uapi/linux/bsg.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='dout_resid' type-id='3158a266' visibility='default' filepath='include/uapi/linux/bsg.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='generated_tag' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bsg.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='spare_out' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='padding' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bio_set' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/bio.h' line='708' column='1' id='dfa886b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bio_slab' type-id='f3b4aca8' visibility='default' filepath='include/linux/bio.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='front_pad' type-id='f0981eeb' visibility='default' filepath='include/linux/bio.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bio_pool' type-id='2745fad8' visibility='default' filepath='include/linux/bio.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='bvec_pool' type-id='2745fad8' visibility='default' filepath='include/linux/bio.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='rescue_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/bio.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rescue_list' type-id='096280bf' visibility='default' filepath='include/linux/bio.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rescue_work' type-id='ef9025d0' visibility='default' filepath='include/linux/bio.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='rescue_workqueue' type-id='242e3d19' visibility='default' filepath='include/linux/bio.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/bio.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/bio.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/bio.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/bio.h' line='731' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='mempool_t' type-id='5932767e' filepath='include/linux/mempool.h' line='26' column='1' id='2745fad8'/>
+      <class-decl name='mempool_s' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/mempool.h' line='16' column='1' id='5932767e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mempool.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='min_nr' type-id='95e97e5e' visibility='default' filepath='include/linux/mempool.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='curr_nr' type-id='95e97e5e' visibility='default' filepath='include/linux/mempool.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='elements' type-id='63e171df' visibility='default' filepath='include/linux/mempool.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pool_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mempool.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='alloc' type-id='8bf6d789' visibility='default' filepath='include/linux/mempool.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='free' type-id='a4c19f22' visibility='default' filepath='include/linux/mempool.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/mempool.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='mempool_alloc_t' type-id='6f7f4c91' filepath='include/linux/mempool.h' line='13' column='1' id='94d117ca'/>
+      <typedef-decl name='mempool_free_t' type-id='c039af2e' filepath='include/linux/mempool.h' line='14' column='1' id='27f2e0d9'/>
+      <typedef-decl name='report_zones_cb' type-id='785bacaf' filepath='include/linux/blkdev.h' line='358' column='1' id='313c6196'/>
+      <class-decl name='blk_zone' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='103' column='1' id='c46c1f27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='d3130597' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='d3130597' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wp' type-id='d3130597' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='cond' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='non_seq' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='reset' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='resv' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='capacity' type-id='d3130597' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reserved' type-id='26f0765c' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='113' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lockdep_map' is-struct='yes' visibility='default' filepath='include/linux/lockdep.h' line='472' column='1' id='d34a605e'/>
+      <class-decl name='bvec_iter' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/bvec.h' line='24' column='1' id='9e0198d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bi_sector' type-id='a42536cd' visibility='default' filepath='include/linux/bvec.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bi_size' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bi_idx' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bi_bvec_done' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='bio_end_io_t' type-id='98617d6e' filepath='include/linux/blk_types.h' line='21' column='1' id='2ec4b2ae'/>
+      <class-decl name='bio_issue' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/blk_types.h' line='114' column='1' id='a9b0f4f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__18' is-anonymous='yes' visibility='default' filepath='include/linux/blk_types.h' line='186' column='1' id='2a125a28'/>
+      <class-decl name='compat_robust_list' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/compat.h' line='374' column='1' id='bd51dd4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='782d78af' visibility='default' filepath='include/linux/compat.h' line='375' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='compat_uptr_t' type-id='19c2251e' filepath='include/asm-generic/compat.h' line='22' column='1' id='782d78af'/>
+      <typedef-decl name='compat_long_t' type-id='a7832498' filepath='include/asm-generic/compat.h' line='18' column='1' id='abb906de'/>
+      <class-decl name='mem_cgroup' size-in-bits='21504' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='208' column='1' id='11c8601c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='css' type-id='7f3df443' visibility='default' filepath='include/linux/memcontrol.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='id' type-id='18f7b101' visibility='default' filepath='include/linux/memcontrol.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='memory' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='swap' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='memsw' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='kmem' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='tcpmem' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='high' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='high_work' type-id='ef9025d0' visibility='default' filepath='include/linux/memcontrol.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='soft_limit' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='vmpressure' type-id='d6294af7' visibility='default' filepath='include/linux/memcontrol.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='use_hierarchy' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8008'>
+          <var-decl name='oom_group' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8016'>
+          <var-decl name='oom_lock' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8032'>
+          <var-decl name='under_oom' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='swappiness' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8096'>
+          <var-decl name='oom_kill_disable' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='events_file' type-id='37a4ee40' visibility='default' filepath='include/linux/memcontrol.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='events_local_file' type-id='37a4ee40' visibility='default' filepath='include/linux/memcontrol.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='swap_events_file' type-id='37a4ee40' visibility='default' filepath='include/linux/memcontrol.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='thresholds_lock' type-id='925167dc' visibility='default' filepath='include/linux/memcontrol.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='thresholds' type-id='a38368d4' visibility='default' filepath='include/linux/memcontrol.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='memsw_thresholds' type-id='a38368d4' visibility='default' filepath='include/linux/memcontrol.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='oom_notify' type-id='72f469ec' visibility='default' filepath='include/linux/memcontrol.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='move_charge_at_immigrate' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='move_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/memcontrol.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='move_lock_flags' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='_pad1_' type-id='4f5a0c96' visibility='default' filepath='include/linux/memcontrol.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='moving_account' type-id='49178f86' visibility='default' filepath='include/linux/memcontrol.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='move_lock_task' type-id='f23e2572' visibility='default' filepath='include/linux/memcontrol.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='vmstats_local' type-id='a0d3a64b' visibility='default' filepath='include/linux/memcontrol.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='vmstats_percpu' type-id='a0d3a64b' visibility='default' filepath='include/linux/memcontrol.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='_pad2_' type-id='4f5a0c96' visibility='default' filepath='include/linux/memcontrol.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='vmstats' type-id='9dc2293d' visibility='default' filepath='include/linux/memcontrol.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13696'>
+          <var-decl name='vmevents' type-id='37ece551' visibility='default' filepath='include/linux/memcontrol.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17280'>
+          <var-decl name='memory_events' type-id='76b91d35' visibility='default' filepath='include/linux/memcontrol.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17728'>
+          <var-decl name='memory_events_local' type-id='76b91d35' visibility='default' filepath='include/linux/memcontrol.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18176'>
+          <var-decl name='socket_pressure' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18240'>
+          <var-decl name='tcpmem_active' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18272'>
+          <var-decl name='tcpmem_pressure' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18304'>
+          <var-decl name='kmemcg_id' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18336'>
+          <var-decl name='kmem_state' type-id='def0995c' visibility='default' filepath='include/linux/memcontrol.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18368'>
+          <var-decl name='kmem_caches' type-id='72f469ec' visibility='default' filepath='include/linux/memcontrol.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18496'>
+          <var-decl name='last_scanned_node' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18560'>
+          <var-decl name='cgwb_list' type-id='72f469ec' visibility='default' filepath='include/linux/memcontrol.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18688'>
+          <var-decl name='cgwb_domain' type-id='960bf1fd' visibility='default' filepath='include/linux/memcontrol.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19776'>
+          <var-decl name='cgwb_frn' type-id='f53c5bdb' visibility='default' filepath='include/linux/memcontrol.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21056'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='include/linux/memcontrol.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21184'>
+          <var-decl name='event_list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/memcontrol.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21248'>
+          <var-decl name='nodeinfo' type-id='687d975e' visibility='default' filepath='include/linux/memcontrol.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_id' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='70' column='1' id='18f7b101'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ref' type-id='64615833' visibility='default' filepath='include/linux/memcontrol.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='page_counter' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/page_counter.h' line='9' column='1' id='635c3685'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='f22a8abb' visibility='default' filepath='include/linux/page_counter.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min' type-id='7359adad' visibility='default' filepath='include/linux/page_counter.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='low' type-id='7359adad' visibility='default' filepath='include/linux/page_counter.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max' type-id='7359adad' visibility='default' filepath='include/linux/page_counter.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parent' type-id='ea7fad85' visibility='default' filepath='include/linux/page_counter.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='emin' type-id='7359adad' visibility='default' filepath='include/linux/page_counter.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='min_usage' type-id='f22a8abb' visibility='default' filepath='include/linux/page_counter.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='children_min_usage' type-id='f22a8abb' visibility='default' filepath='include/linux/page_counter.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='elow' type-id='7359adad' visibility='default' filepath='include/linux/page_counter.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='low_usage' type-id='f22a8abb' visibility='default' filepath='include/linux/page_counter.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='children_low_usage' type-id='f22a8abb' visibility='default' filepath='include/linux/page_counter.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='watermark' type-id='7359adad' visibility='default' filepath='include/linux/page_counter.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='failcnt' type-id='7359adad' visibility='default' filepath='include/linux/page_counter.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vmpressure' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/vmpressure.h' line='13' column='1' id='d6294af7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scanned' type-id='7359adad' visibility='default' filepath='include/linux/vmpressure.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reclaimed' type-id='7359adad' visibility='default' filepath='include/linux/vmpressure.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tree_scanned' type-id='7359adad' visibility='default' filepath='include/linux/vmpressure.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tree_reclaimed' type-id='7359adad' visibility='default' filepath='include/linux/vmpressure.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sr_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/vmpressure.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='events' type-id='72f469ec' visibility='default' filepath='include/linux/vmpressure.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='events_lock' type-id='925167dc' visibility='default' filepath='include/linux/vmpressure.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/vmpressure.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_thresholds' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='159' column='1' id='a38368d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='primary' type-id='4ec56f94' visibility='default' filepath='include/linux/memcontrol.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='spare' type-id='4ec56f94' visibility='default' filepath='include/linux/memcontrol.h' line='167' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_threshold_ary' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='150' column='1' id='413be38e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='current_threshold' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/memcontrol.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entries' type-id='31f1649b' visibility='default' filepath='include/linux/memcontrol.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_threshold' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='144' column='1' id='ad98c82f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='eventfd' type-id='71f2e203' visibility='default' filepath='include/linux/memcontrol.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='threshold' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='146' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_padding' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='177' column='1' id='4f5a0c96'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='e84913bd' visibility='default' filepath='include/linux/memcontrol.h' line='178' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_vmstats_percpu' size-in-bits='6272' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='88' column='1' id='6aac043b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stat' type-id='4f05d88f' visibility='default' filepath='include/linux/memcontrol.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='events' type-id='45f161cc' visibility='default' filepath='include/linux/memcontrol.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='nr_page_events' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='targets' type-id='3461381a' visibility='default' filepath='include/linux/memcontrol.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='memcg_kmem_state' filepath='include/linux/memcontrol.h' line='170' column='1' id='def0995c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='KMEM_NONE' value='0'/>
+        <enumerator name='KMEM_ALLOCATED' value='1'/>
+        <enumerator name='KMEM_ONLINE' value='2'/>
+      </enum-decl>
+      <class-decl name='wb_domain' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/writeback.h' line='129' column='1' id='960bf1fd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/writeback.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='completions' type-id='7dc82ec2' visibility='default' filepath='include/linux/writeback.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='period_timer' type-id='abe41e67' visibility='default' filepath='include/linux/writeback.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='period_time' type-id='7359adad' visibility='default' filepath='include/linux/writeback.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dirty_limit_tstamp' type-id='7359adad' visibility='default' filepath='include/linux/writeback.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dirty_limit' type-id='7359adad' visibility='default' filepath='include/linux/writeback.h' line='164' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fprop_global' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/flex_proportions.h' line='28' column='1' id='7dc82ec2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='events' type-id='b92c8d0d' visibility='default' filepath='include/linux/flex_proportions.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='period' type-id='f0981eeb' visibility='default' filepath='include/linux/flex_proportions.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='sequence' type-id='e14c3b11' visibility='default' filepath='include/linux/flex_proportions.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_cgwb_frn' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='195' column='1' id='aac38d0b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bdi_id' type-id='91ce1af9' visibility='default' filepath='include/linux/memcontrol.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='memcg_id' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='at' type-id='91ce1af9' visibility='default' filepath='include/linux/memcontrol.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='done' type-id='9eb3e00b' visibility='default' filepath='include/linux/memcontrol.h' line='199' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wb_completion' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='71' column='1' id='9eb3e00b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cnt' type-id='49178f86' visibility='default' filepath='include/linux/backing-dev-defs.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='waitq' type-id='03d48e96' visibility='default' filepath='include/linux/backing-dev-defs.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_per_node' size-in-bits='6336' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='117' column='1' id='2e6f3990'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lruvec' type-id='9e8c0698' visibility='default' filepath='include/linux/memcontrol.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='lruvec_stat_local' type-id='208b18ef' visibility='default' filepath='include/linux/memcontrol.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='lruvec_stat_cpu' type-id='208b18ef' visibility='default' filepath='include/linux/memcontrol.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='lruvec_stat' type-id='99d12d7b' visibility='default' filepath='include/linux/memcontrol.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='lru_zone_size' type-id='aa6663dd' visibility='default' filepath='include/linux/memcontrol.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='iter' type-id='d1982c82' visibility='default' filepath='include/linux/memcontrol.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='shrinker_map' type-id='09f6e9a4' visibility='default' filepath='include/linux/memcontrol.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='tree_node' type-id='2a8a6332' visibility='default' filepath='include/linux/memcontrol.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='usage_in_excess' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='on_tree' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6216'>
+          <var-decl name='congested' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='memcg' type-id='223696fc' visibility='default' filepath='include/linux/memcontrol.h' line='140' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lruvec' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='302' column='1' id='9e8c0698'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lists' type-id='e4e01aff' visibility='default' filepath='include/linux/mmzone.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='reclaim_stat' type-id='1f1f4d8e' visibility='default' filepath='include/linux/mmzone.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='inactive_age' type-id='f22a8abb' visibility='default' filepath='include/linux/mmzone.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='refaults' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pgdat' type-id='c876a7a5' visibility='default' filepath='include/linux/mmzone.h' line='310' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='zone_reclaim_stat' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='289' column='1' id='1f1f4d8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='recent_rotated' type-id='f05e8e77' visibility='default' filepath='include/linux/mmzone.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='recent_scanned' type-id='f05e8e77' visibility='default' filepath='include/linux/mmzone.h' line='299' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pglist_data' size-in-bits='46080' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='711' column='1' id='54406315'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node_zones' type-id='83aedf28' visibility='default' filepath='include/linux/mmzone.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='39936'>
+          <var-decl name='node_zonelists' type-id='9509a9de' visibility='default' filepath='include/linux/mmzone.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40448'>
+          <var-decl name='nr_zones' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40480'>
+          <var-decl name='node_size_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmzone.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40512'>
+          <var-decl name='node_start_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40576'>
+          <var-decl name='node_present_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40640'>
+          <var-decl name='node_spanned_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40704'>
+          <var-decl name='node_id' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40768'>
+          <var-decl name='kswapd_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/mmzone.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40960'>
+          <var-decl name='pfmemalloc_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/mmzone.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41152'>
+          <var-decl name='kswapd' type-id='f23e2572' visibility='default' filepath='include/linux/mmzone.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41216'>
+          <var-decl name='kswapd_order' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41248'>
+          <var-decl name='kswapd_classzone_idx' type-id='d278ff03' visibility='default' filepath='include/linux/mmzone.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41280'>
+          <var-decl name='kswapd_failures' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41312'>
+          <var-decl name='kcompactd_max_order' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41344'>
+          <var-decl name='kcompactd_classzone_idx' type-id='d278ff03' visibility='default' filepath='include/linux/mmzone.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41408'>
+          <var-decl name='kcompactd_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/mmzone.h' line='753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41600'>
+          <var-decl name='kcompactd' type-id='f23e2572' visibility='default' filepath='include/linux/mmzone.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41664'>
+          <var-decl name='totalreserve_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41984'>
+          <var-decl name='_pad1_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41984'>
+          <var-decl name='lru_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmzone.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='42048'>
+          <var-decl name='lruvec' type-id='9e8c0698' visibility='default' filepath='include/linux/mmzone.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43136'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43520'>
+          <var-decl name='_pad2_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43520'>
+          <var-decl name='per_cpu_nodestats' type-id='36700cde' visibility='default' filepath='include/linux/mmzone.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43584'>
+          <var-decl name='vm_stat' type-id='99d12d7b' visibility='default' filepath='include/linux/mmzone.h' line='795' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='zone' size-in-bits='13312' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='421' column='1' id='be9189df'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_watermark' type-id='3461381a' visibility='default' filepath='include/linux/mmzone.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='watermark_boost' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nr_reserved_highatomic' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lowmem_reserve' type-id='5d34b9c7' visibility='default' filepath='include/linux/mmzone.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='zone_pgdat' type-id='c876a7a5' visibility='default' filepath='include/linux/mmzone.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pageset' type-id='16cfe92b' visibility='default' filepath='include/linux/mmzone.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cma_alloc' type-id='b50a4934' visibility='default' filepath='include/linux/mmzone.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='zone_start_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='managed_pages' type-id='f22a8abb' visibility='default' filepath='include/linux/mmzone.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='spanned_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='present_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/mmzone.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='nr_isolate_pageblock' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='span_seqlock' type-id='e6cd5ecf' visibility='default' filepath='include/linux/mmzone.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='initialized' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='_pad1_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='free_area' type-id='be1ad65f' visibility='default' filepath='include/linux/mmzone.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmzone.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='_pad2_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='percpu_drift_mark' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='compact_cached_free_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='compact_cached_migrate_pfn' type-id='f05e8e77' visibility='default' filepath='include/linux/mmzone.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='compact_init_migrate_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='compact_init_free_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='compact_considered' type-id='f0981eeb' visibility='default' filepath='include/linux/mmzone.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11680'>
+          <var-decl name='compact_defer_shift' type-id='f0981eeb' visibility='default' filepath='include/linux/mmzone.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='compact_order_failed' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11744'>
+          <var-decl name='compact_blockskip_flush' type-id='b50a4934' visibility='default' filepath='include/linux/mmzone.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11752'>
+          <var-decl name='contiguous' type-id='b50a4934' visibility='default' filepath='include/linux/mmzone.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='_pad3_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='vm_stat' type-id='80b13f9b' visibility='default' filepath='include/linux/mmzone.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='vm_numa_stat' type-id='a922812c' visibility='default' filepath='include/linux/mmzone.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mmzone.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mmzone.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/mmzone.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12864'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/mmzone.h' line='576' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='per_cpu_pageset' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='345' column='1' id='23a849db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pcp' type-id='3572f41a' visibility='default' filepath='include/linux/mmzone.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='stat_threshold' type-id='fdbf7a0f' visibility='default' filepath='include/linux/mmzone.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='648'>
+          <var-decl name='vm_stat_diff' type-id='a2b7d295' visibility='default' filepath='include/linux/mmzone.h' line='353' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='per_cpu_pages' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='336' column='1' id='3572f41a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='high' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='batch' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lists' type-id='a8e1fb22' visibility='default' filepath='include/linux/mmzone.h' line='342' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='zone_padding' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='171' column='1' id='6041cd25'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='e84913bd' visibility='default' filepath='include/linux/mmzone.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='free_area' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='101' column='1' id='39ec6fe5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='free_list' type-id='e4e6d6c4' visibility='default' filepath='include/linux/mmzone.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nr_free' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='zonelist' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='685' column='1' id='459f31a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_zonerefs' type-id='c2eeb70e' visibility='default' filepath='include/linux/mmzone.h' line='686' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='zoneref' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='666' column='1' id='caf9c470'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='zone' type-id='0a0aff97' visibility='default' filepath='include/linux/mmzone.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='zone_idx' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='668' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='zone_type' filepath='include/linux/mmzone.h' line='364' column='1' id='d278ff03'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ZONE_DMA32' value='0'/>
+        <enumerator name='ZONE_NORMAL' value='1'/>
+        <enumerator name='ZONE_MOVABLE' value='2'/>
+        <enumerator name='__MAX_NR_ZONES' value='3'/>
+      </enum-decl>
+      <class-decl name='per_cpu_nodestat' size-in-bits='264' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='357' column='1' id='d84ae668'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stat_threshold' type-id='fdbf7a0f' visibility='default' filepath='include/linux/mmzone.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='vm_node_stat_diff' type-id='c8478d3d' visibility='default' filepath='include/linux/mmzone.h' line='359' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lruvec_stat' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='101' column='1' id='f8009817'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='52f6d451' visibility='default' filepath='include/linux/memcontrol.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_reclaim_iter' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='95' column='1' id='e0324306'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='position' type-id='223696fc' visibility='default' filepath='include/linux/memcontrol.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='generation' type-id='f0981eeb' visibility='default' filepath='include/linux/memcontrol.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_shrinker_map' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='109' column='1' id='366e0ade'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/memcontrol.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='c99b5ecd' visibility='default' filepath='include/linux/memcontrol.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='perf_event_state' filepath='include/linux/perf_event.h' line='520' column='1' id='31fdb95a'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PERF_EVENT_STATE_DEAD' value='-4'/>
+        <enumerator name='PERF_EVENT_STATE_EXIT' value='-3'/>
+        <enumerator name='PERF_EVENT_STATE_ERROR' value='-2'/>
+        <enumerator name='PERF_EVENT_STATE_OFF' value='-1'/>
+        <enumerator name='PERF_EVENT_STATE_INACTIVE' value='0'/>
+        <enumerator name='PERF_EVENT_STATE_ACTIVE' value='1'/>
+      </enum-decl>
+      <typedef-decl name='local64_t' type-id='2b04c975' filepath='include/asm-generic/local64.h' line='26' column='1' id='7da7300e'/>
+      <class-decl name='__anonymous_struct__13' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='7da7300e' visibility='default' filepath='include/asm-generic/local64.h' line='24' column='1' id='2b04c975'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='a' type-id='dd91f264' visibility='default' filepath='include/asm-generic/local64.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_event_attr' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='310' column='1' id='e57536d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='config' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='de6d2b01' visibility='default' filepath='include/uapi/linux/perf_event.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sample_type' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read_format' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='63'>
+          <var-decl name='disabled' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='62'>
+          <var-decl name='inherit' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='61'>
+          <var-decl name='pinned' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='60'>
+          <var-decl name='exclusive' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='59'>
+          <var-decl name='exclude_user' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='58'>
+          <var-decl name='exclude_kernel' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='57'>
+          <var-decl name='exclude_hv' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='exclude_idle' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='55'>
+          <var-decl name='mmap' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='54'>
+          <var-decl name='comm' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='53'>
+          <var-decl name='freq' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='52'>
+          <var-decl name='inherit_stat' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='51'>
+          <var-decl name='enable_on_exec' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='50'>
+          <var-decl name='task' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='49'>
+          <var-decl name='watermark' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='47'>
+          <var-decl name='precise_ip' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='46'>
+          <var-decl name='mmap_data' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='45'>
+          <var-decl name='sample_id_all' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44'>
+          <var-decl name='exclude_host' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43'>
+          <var-decl name='exclude_guest' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='42'>
+          <var-decl name='exclude_callchain_kernel' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41'>
+          <var-decl name='exclude_callchain_user' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='mmap2' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='39'>
+          <var-decl name='comm_exec' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38'>
+          <var-decl name='use_clockid' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='37'>
+          <var-decl name='context_switch' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36'>
+          <var-decl name='write_backward' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='35'>
+          <var-decl name='namespaces' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34'>
+          <var-decl name='ksymbol' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33'>
+          <var-decl name='bpf_event' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='aux_output' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='__reserved_1' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='' type-id='051df3c3' visibility='default' filepath='include/uapi/linux/perf_event.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='bp_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='' type-id='3089c176' visibility='default' filepath='include/uapi/linux/perf_event.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='' type-id='38c76117' visibility='default' filepath='include/uapi/linux/perf_event.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='branch_sample_type' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sample_regs_user' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sample_stack_user' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='clockid' type-id='3158a266' visibility='default' filepath='include/uapi/linux/perf_event.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='sample_regs_intr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='aux_watermark' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='sample_max_stack' type-id='d315442e' visibility='default' filepath='include/uapi/linux/perf_event.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='880'>
+          <var-decl name='__reserved_2' type-id='d315442e' visibility='default' filepath='include/uapi/linux/perf_event.h' line='427' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__20' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='327' column='1' id='de6d2b01'>
+        <data-member access='private'>
+          <var-decl name='sample_period' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sample_freq' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='329' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__21' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='380' column='1' id='051df3c3'>
+        <data-member access='private'>
+          <var-decl name='wakeup_events' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='wakeup_watermark' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='382' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__22' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='386' column='1' id='3089c176'>
+        <data-member access='private'>
+          <var-decl name='bp_addr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='kprobe_func' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='uprobe_path' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='config1' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='390' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__23' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='392' column='1' id='38c76117'>
+        <data-member access='private'>
+          <var-decl name='bp_len' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='kprobe_addr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='probe_offset' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='config2' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='396' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='hw_perf_event' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='122' column='1' id='b594b0c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='47a85f98' visibility='default' filepath='include/linux/perf_event.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='target' type-id='f23e2572' visibility='default' filepath='include/linux/perf_event.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='addr_filters' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='addr_filters_gen' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='prev_count' type-id='7da7300e' visibility='default' filepath='include/linux/perf_event.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sample_period' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='last_period' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='period_left' type-id='7da7300e' visibility='default' filepath='include/linux/perf_event.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='interrupts_seq' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='interrupts' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='freq_time_stamp' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='freq_count_stamp' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='227' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__24' size-in-bits='768' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='124' column='1' id='47a85f98'>
+        <data-member access='private'>
+          <var-decl name='' type-id='e816fcaa' visibility='default' filepath='include/linux/perf_event.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='35e31cc2' visibility='default' filepath='include/linux/perf_event.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='17578164' visibility='default' filepath='include/linux/perf_event.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='f9c5ea3e' visibility='default' filepath='include/linux/perf_event.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='c0044425' visibility='default' filepath='include/linux/perf_event.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='7a56104f' visibility='default' filepath='include/linux/perf_event.h' line='160' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__14' size-in-bits='768' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='125' column='1' id='e816fcaa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='config' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last_tag' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='config_base' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='event_base' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='event_base_rdpmc' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='idx' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='last_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='extra_reg' type-id='a80839c0' visibility='default' filepath='include/linux/perf_event.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='branch_reg' type-id='a80839c0' visibility='default' filepath='include/linux/perf_event.h' line='136' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hw_perf_event_extra' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='112' column='1' id='a80839c0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='config' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='alloc' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idx' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='116' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__15' size-in-bits='576' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='138' column='1' id='35e31cc2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hrtimer' type-id='b6993efc' visibility='default' filepath='include/linux/perf_event.h' line='139' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__16' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='141' column='1' id='17578164'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tp_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='143' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__17' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='145' column='1' id='f9c5ea3e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pwr_acc' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ptsc' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__18' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='150' column='1' id='c0044425'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='info' type-id='b61f34eb' visibility='default' filepath='include/linux/perf_event.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bp_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='arch_hw_breakpoint' size-in-bits='192' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='21' column='1' id='b61f34eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='address' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='trigger' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ctrl' type-id='2633d065' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='arch_hw_breakpoint_ctrl' size-in-bits='32' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='13' column='1' id='2633d065'>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='__reserved' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='len' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='type' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='privilege' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enabled' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__19' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='160' column='1' id='7a56104f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iommu_bank' type-id='f9b06939' visibility='default' filepath='include/linux/perf_event.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='iommu_cntr' type-id='f9b06939' visibility='default' filepath='include/linux/perf_event.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='padding' type-id='1dc6a898' visibility='default' filepath='include/linux/perf_event.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='conf' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='conf1' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='165' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_addr_filters_head' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='506' column='1' id='54885433'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/perf_event.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nr_file_filters' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='509' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_addr_filter_range' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='512' column='1' id='3490ee41'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='514' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='perf_overflow_handler_t' type-id='a8564695' filepath='include/linux/perf_event.h' line='532' column='1' id='20a2e4e6'/>
+      <class-decl name='perf_sample_data' size-in-bits='4096' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='936' column='1' id='2b3d4ba2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='raw' type-id='f4a67529' visibility='default' filepath='include/linux/perf_event.h' line='942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='br_stack' type-id='070ae8d2' visibility='default' filepath='include/linux/perf_event.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='period' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='weight' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='txn' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='data_src' type-id='2be3cc53' visibility='default' filepath='include/linux/perf_event.h' line='947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='type' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ip' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='tid_entry' type-id='0e48f9a5' visibility='default' filepath='include/linux/perf_event.h' line='958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='time' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='id' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='960' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='stream_id' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='961' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cpu_entry' type-id='3851c7bb' visibility='default' filepath='include/linux/perf_event.h' line='965' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='callchain' type-id='cd3a82e3' visibility='default' filepath='include/linux/perf_event.h' line='966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='regs_user' type-id='85b37ab4' visibility='default' filepath='include/linux/perf_event.h' line='972' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='regs_user_copy' type-id='0d029111' visibility='default' filepath='include/linux/perf_event.h' line='973' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='regs_intr' type-id='85b37ab4' visibility='default' filepath='include/linux/perf_event.h' line='975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='stack_user_size' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='phys_addr' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='978' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_raw_record' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='88' column='1' id='40ea9ac1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frag' type-id='a5007ad0' visibility='default' filepath='include/linux/perf_event.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='size' type-id='19c2251e' visibility='default' filepath='include/linux/perf_event.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_raw_frag' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='78' column='1' id='a5007ad0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='9bc43e27' visibility='default' filepath='include/linux/perf_event.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='copy' type-id='b468b440' visibility='default' filepath='include/linux/perf_event.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='19c2251e' visibility='default' filepath='include/linux/perf_event.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__25' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='79' column='1' id='9bc43e27'>
+        <data-member access='private'>
+          <var-decl name='next' type-id='2aa2e156' visibility='default' filepath='include/linux/perf_event.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='pad' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='81' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='perf_copy_f' type-id='a056c492' filepath='include/linux/perf_event.h' line='75' column='1' id='b468b440'/>
+      <class-decl name='perf_branch_stack' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='102' column='1' id='524b1234'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr' type-id='d3130597' visibility='default' filepath='include/linux/perf_event.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entries' type-id='6b9809bc' visibility='default' filepath='include/linux/perf_event.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_branch_entry' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1170' column='1' id='c25adaa0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='from' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='to' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='63'>
+          <var-decl name='mispred' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='62'>
+          <var-decl name='predicted' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='61'>
+          <var-decl name='in_tx' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='60'>
+          <var-decl name='abort' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44'>
+          <var-decl name='cycles' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='type' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reserved' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1179' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='perf_mem_data_src' size-in-bits='64' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1050' column='1' id='2be3cc53'>
+        <data-member access='private'>
+          <var-decl name='val' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1051' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='579bdebd' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1052' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__20' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1052' column='1' id='579bdebd'>
+        <data-member access='public' layout-offset-in-bits='59'>
+          <var-decl name='mem_op' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='45'>
+          <var-decl name='mem_lvl' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1054' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='mem_snoop' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1055' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38'>
+          <var-decl name='mem_lock' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1056' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='mem_dtlb' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1057' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='mem_lvl_num' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1058' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='mem_remote' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1059' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='mem_snoopx' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1060' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mem_rsvd' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1061' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__21' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='955' column='1' id='0e48f9a5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pid' type-id='19c2251e' visibility='default' filepath='include/linux/perf_event.h' line='956' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tid' type-id='19c2251e' visibility='default' filepath='include/linux/perf_event.h' line='957' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__22' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='962' column='1' id='3851c7bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu' type-id='19c2251e' visibility='default' filepath='include/linux/perf_event.h' line='963' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='reserved' type-id='19c2251e' visibility='default' filepath='include/linux/perf_event.h' line='964' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_callchain_entry' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='62' column='1' id='16650a93'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr' type-id='d3130597' visibility='default' filepath='include/linux/perf_event.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ip' type-id='52cd3f2c' visibility='default' filepath='include/linux/perf_event.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_regs' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/perf_regs.h' line='7' column='1' id='85b37ab4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='abi' type-id='d3130597' visibility='default' filepath='include/linux/perf_regs.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='regs' type-id='4616a179' visibility='default' filepath='include/linux/perf_regs.h' line='9' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='probe_type' filepath='include/linux/device.h' line='338' column='1' id='171c98b7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PROBE_DEFAULT_STRATEGY' value='0'/>
+        <enumerator name='PROBE_PREFER_ASYNCHRONOUS' value='1'/>
+        <enumerator name='PROBE_FORCE_SYNCHRONOUS' value='2'/>
+      </enum-decl>
+      <class-decl name='of_device_id' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='260' column='1' id='8bb45a31'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/linux/mod_devicetable.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='type' type-id='16dc656a' visibility='default' filepath='include/linux/mod_devicetable.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='compatible' type-id='e3204322' visibility='default' filepath='include/linux/mod_devicetable.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mod_devicetable.h' line='264' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='acpi_device_id' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='210' column='1' id='ad95e21b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='060772ed' visibility='default' filepath='include/linux/mod_devicetable.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver_data' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cls' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='cls_msk' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='214' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='kernel_ulong_t' type-id='7359adad' filepath='include/linux/mod_devicetable.h' line='14' column='1' id='0791d6c8'/>
+      <typedef-decl name='pm_message_t' type-id='c120b5da' filepath='include/linux/pm.h' line='52' column='1' id='08496218'/>
+      <class-decl name='pm_message' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='50' column='1' id='c120b5da'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event' type-id='95e97e5e' visibility='default' filepath='include/linux/pm.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_links_info' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='1151' column='1' id='2d178f63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='suppliers' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='consumers' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='needs_suppliers' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='defer_hook' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='need_for_probe' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='status' type-id='070abca2' visibility='default' filepath='include/linux/device.h' line='1157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1162' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dl_dev_state' filepath='include/linux/device.h' line='1133' column='1' id='070abca2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DL_DEV_NO_DRIVER' value='0'/>
+        <enumerator name='DL_DEV_PROBING' value='1'/>
+        <enumerator name='DL_DEV_DRIVER_BOUND' value='2'/>
+        <enumerator name='DL_DEV_UNBINDING' value='3'/>
+      </enum-decl>
+      <class-decl name='dev_pm_info' size-in-bits='2624' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='573' column='1' id='f3166b6b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power_state' type-id='08496218' visibility='default' filepath='include/linux/pm.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='can_wakeup' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='async_suspend' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='in_dpm_list' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='is_prepared' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='is_suspended' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='is_noirq_suspended' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='is_late_suspended' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='no_pm' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='early_init' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='direct_complete' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='driver_flags' type-id='19c2251e' visibility='default' filepath='include/linux/pm.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/pm.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/pm.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='completion' type-id='f9fef04f' visibility='default' filepath='include/linux/pm.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wakeup' type-id='1ea237a6' visibility='default' filepath='include/linux/pm.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='wakeup_path' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='syscore' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='no_pm_callbacks' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='must_resume' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='may_skip_resume' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='suspend_timer' type-id='b6993efc' visibility='default' filepath='include/linux/pm.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='timer_expires' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/pm.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='wait_queue' type-id='b5ab048f' visibility='default' filepath='include/linux/pm.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='wakeirq' type-id='303e01fa' visibility='default' filepath='include/linux/pm.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='usage_count' type-id='49178f86' visibility='default' filepath='include/linux/pm.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='child_count' type-id='49178f86' visibility='default' filepath='include/linux/pm.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='disable_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='idle_notification' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='request_pending' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='deferred_resume' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='runtime_auto' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ignore_children' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='no_callbacks' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='irq_safe' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='use_autosuspend' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='timer_autosuspends' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='memalloc_noio' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='links_count' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='request' type-id='2418515b' visibility='default' filepath='include/linux/pm.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='runtime_status' type-id='3c1b7fd8' visibility='default' filepath='include/linux/pm.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='runtime_error' type-id='95e97e5e' visibility='default' filepath='include/linux/pm.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='autosuspend_delay' type-id='95e97e5e' visibility='default' filepath='include/linux/pm.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='last_busy' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='active_time' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='suspended_time' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='accounting_timestamp' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='subsys_data' type-id='77415389' visibility='default' filepath='include/linux/pm.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='set_latency_tolerance' type-id='c3d2558f' visibility='default' filepath='include/linux/pm.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='qos' type-id='b991f562' visibility='default' filepath='include/linux/pm.h' line='630' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wakeup_source' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/pm_wakeup.h' line='43' column='1' id='152cd1b0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pm_wakeup.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/pm_wakeup.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/pm_wakeup.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/pm_wakeup.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wakeirq' type-id='303e01fa' visibility='default' filepath='include/linux/pm_wakeup.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/linux/pm_wakeup.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='timer_expires' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='total_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='max_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='last_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='start_prevent_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='prevent_sleep_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='event_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='active_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='relax_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='expire_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='wakeup_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/pm_wakeup.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='active' type-id='b50a4934' visibility='default' filepath='include/linux/pm_wakeup.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='autosleep_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/pm_wakeup.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='rpm_request' filepath='include/linux/pm.h' line='518' column='1' id='2418515b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RPM_REQ_NONE' value='0'/>
+        <enumerator name='RPM_REQ_IDLE' value='1'/>
+        <enumerator name='RPM_REQ_SUSPEND' value='2'/>
+        <enumerator name='RPM_REQ_AUTOSUSPEND' value='3'/>
+        <enumerator name='RPM_REQ_RESUME' value='4'/>
+      </enum-decl>
+      <enum-decl name='rpm_status' filepath='include/linux/pm.h' line='496' column='1' id='3c1b7fd8'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RPM_ACTIVE' value='0'/>
+        <enumerator name='RPM_RESUMING' value='1'/>
+        <enumerator name='RPM_SUSPENDED' value='2'/>
+        <enumerator name='RPM_SUSPENDING' value='3'/>
+      </enum-decl>
+      <class-decl name='pm_subsys_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='530' column='1' id='1269b801'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/pm.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='refcount' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clock_list' type-id='72f469ec' visibility='default' filepath='include/linux/pm.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='domain_data' type-id='53e3a7d6' visibility='default' filepath='include/linux/pm.h' line='537' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_qos' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='121' column='1' id='7d93f824'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='resume_latency' type-id='4ad5b81b' visibility='default' filepath='include/linux/pm_qos.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='latency_tolerance' type-id='4ad5b81b' visibility='default' filepath='include/linux/pm_qos.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='freq' type-id='7ca99f8c' visibility='default' filepath='include/linux/pm_qos.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='flags' type-id='e0a9bd3c' visibility='default' filepath='include/linux/pm_qos.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='resume_latency_req' type-id='a80fd1bc' visibility='default' filepath='include/linux/pm_qos.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='latency_tolerance_req' type-id='a80fd1bc' visibility='default' filepath='include/linux/pm_qos.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='flags_req' type-id='a80fd1bc' visibility='default' filepath='include/linux/pm_qos.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pm_qos_constraints' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='66' column='1' id='4ad5b81b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='57b0eed2' visibility='default' filepath='include/linux/pm_qos.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='target_value' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='default_value' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='no_constraint_value' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='type' type-id='1389f6b6' visibility='default' filepath='include/linux/pm_qos.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='notifiers' type-id='282b7312' visibility='default' filepath='include/linux/pm_qos.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='pm_qos_type' filepath='include/linux/pm_qos.h' line='54' column='1' id='1389f6b6'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PM_QOS_UNITIALIZED' value='0'/>
+        <enumerator name='PM_QOS_MAX' value='1'/>
+        <enumerator name='PM_QOS_MIN' value='2'/>
+        <enumerator name='PM_QOS_SUM' value='3'/>
+      </enum-decl>
+      <class-decl name='blocking_notifier_head' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='65' column='1' id='708c2394'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/notifier.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='head' type-id='d504f73d' visibility='default' filepath='include/linux/notifier.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='notifier_block' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='54' column='1' id='9b08f7cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='notifier_call' type-id='0ec8c658' visibility='default' filepath='include/linux/notifier.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='d504f73d' visibility='default' filepath='include/linux/notifier.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='priority' type-id='95e97e5e' visibility='default' filepath='include/linux/notifier.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='notifier_fn_t' type-id='38a7cb79' filepath='include/linux/notifier.h' line='51' column='1' id='0ec8c658'/>
+      <class-decl name='freq_constraints' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='89' column='1' id='7ca99f8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_freq' type-id='4ad5b81b' visibility='default' filepath='include/linux/pm_qos.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='min_freq_notifiers' type-id='708c2394' visibility='default' filepath='include/linux/pm_qos.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='max_freq' type-id='4ad5b81b' visibility='default' filepath='include/linux/pm_qos.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='max_freq_notifiers' type-id='708c2394' visibility='default' filepath='include/linux/pm_qos.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pm_qos_flags' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='75' column='1' id='e0a9bd3c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/pm_qos.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='effective_flags' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_qos_request' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='111' column='1' id='32536656'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c47ba023' visibility='default' filepath='include/linux/pm_qos.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='5d6ef881' visibility='default' filepath='include/linux/pm_qos.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/pm_qos.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dev_pm_qos_req_type' filepath='include/linux/pm_qos.h' line='103' column='1' id='c47ba023'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DEV_PM_QOS_RESUME_LATENCY' value='1'/>
+        <enumerator name='DEV_PM_QOS_LATENCY_TOLERANCE' value='2'/>
+        <enumerator name='DEV_PM_QOS_MIN_FREQUENCY' value='3'/>
+        <enumerator name='DEV_PM_QOS_MAX_FREQUENCY' value='4'/>
+        <enumerator name='DEV_PM_QOS_FLAGS' value='5'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__26' size-in-bits='448' is-anonymous='yes' visibility='default' filepath='include/linux/pm_qos.h' line='113' column='1' id='5d6ef881'>
+        <data-member access='private'>
+          <var-decl name='pnode' type-id='e3a91a7c' visibility='default' filepath='include/linux/pm_qos.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='flr' type-id='a70ae6be' visibility='default' filepath='include/linux/pm_qos.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='freq' type-id='da4cc8f3' visibility='default' filepath='include/linux/pm_qos.h' line='116' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='pm_qos_flags_request' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='49' column='1' id='a70ae6be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/pm_qos.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='freq_qos_request' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='96' column='1' id='da4cc8f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='1df5cca8' visibility='default' filepath='include/linux/pm_qos.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pnode' type-id='e3a91a7c' visibility='default' filepath='include/linux/pm_qos.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='qos' type-id='1351457a' visibility='default' filepath='include/linux/pm_qos.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='freq_qos_req_type' filepath='include/linux/pm_qos.h' line='84' column='1' id='1df5cca8'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='FREQ_QOS_MIN' value='1'/>
+        <enumerator name='FREQ_QOS_MAX' value='2'/>
+      </enum-decl>
+      <class-decl name='dev_pm_domain' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='649' column='1' id='7c94eaa3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='3ea82289' visibility='default' filepath='include/linux/pm.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='detach' type-id='7d18218b' visibility='default' filepath='include/linux/pm.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='activate' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='sync' type-id='dd787f72' visibility='default' filepath='include/linux/pm.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dismiss' type-id='dd787f72' visibility='default' filepath='include/linux/pm.h' line='654' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_map_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/dma-mapping.h' line='80' column='1' id='d45f2b4f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alloc' type-id='06c31e09' visibility='default' filepath='include/linux/dma-mapping.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='free' type-id='d7b98f89' visibility='default' filepath='include/linux/dma-mapping.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mmap' type-id='f7114ca5' visibility='default' filepath='include/linux/dma-mapping.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_sgtable' type-id='295a92ed' visibility='default' filepath='include/linux/dma-mapping.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='map_page' type-id='7855184a' visibility='default' filepath='include/linux/dma-mapping.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='unmap_page' type-id='6407fd0f' visibility='default' filepath='include/linux/dma-mapping.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='map_sg' type-id='64452f48' visibility='default' filepath='include/linux/dma-mapping.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unmap_sg' type-id='772c77c9' visibility='default' filepath='include/linux/dma-mapping.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='map_resource' type-id='66c8694d' visibility='default' filepath='include/linux/dma-mapping.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='unmap_resource' type-id='6407fd0f' visibility='default' filepath='include/linux/dma-mapping.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sync_single_for_cpu' type-id='b97350f1' visibility='default' filepath='include/linux/dma-mapping.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sync_single_for_device' type-id='b97350f1' visibility='default' filepath='include/linux/dma-mapping.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='sync_sg_for_cpu' type-id='9ed36ca7' visibility='default' filepath='include/linux/dma-mapping.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='sync_sg_for_device' type-id='9ed36ca7' visibility='default' filepath='include/linux/dma-mapping.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='cache_sync' type-id='4935400d' visibility='default' filepath='include/linux/dma-mapping.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dma_supported' type-id='5aa1f3eb' visibility='default' filepath='include/linux/dma-mapping.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_required_mask' type-id='5dee5830' visibility='default' filepath='include/linux/dma-mapping.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='max_mapping_size' type-id='49f5e2e5' visibility='default' filepath='include/linux/dma-mapping.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='get_merge_boundary' type-id='1588722c' visibility='default' filepath='include/linux/dma-mapping.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-mapping.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-mapping.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-mapping.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-mapping.h' line='140' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sg_table' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/scatterlist.h' line='42' column='1' id='c59e4f4c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sgl' type-id='bf3ef905' visibility='default' filepath='include/linux/scatterlist.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nents' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='orig_nents' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dma_data_direction' filepath='include/linux/dma-direction.h' line='5' column='1' id='eea6b025'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DMA_BIDIRECTIONAL' value='0'/>
+        <enumerator name='DMA_TO_DEVICE' value='1'/>
+        <enumerator name='DMA_FROM_DEVICE' value='2'/>
+        <enumerator name='DMA_NONE' value='3'/>
+      </enum-decl>
+      <class-decl name='device_dma_parameters' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='1022' column='1' id='37251e77'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_segment_size' type-id='f0981eeb' visibility='default' filepath='include/linux/device.h' line='1027' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='segment_boundary_mask' type-id='7359adad' visibility='default' filepath='include/linux/device.h' line='1028' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_archdata' size-in-bits='64' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/device.h' line='8' column='1' id='d3e142f5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iommu' type-id='eaa32e2f' visibility='default' filepath='arch/arm64/include/asm/device.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_node' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/linux/of.h' line='51' column='1' id='6661a698'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/of.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phandle' type-id='6e394fba' visibility='default' filepath='include/linux/of.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='full_name' type-id='80f4b756' visibility='default' filepath='include/linux/of.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fwnode' type-id='d5ace205' visibility='default' filepath='include/linux/of.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='properties' type-id='ddcd89c6' visibility='default' filepath='include/linux/of.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='deadprops' type-id='ddcd89c6' visibility='default' filepath='include/linux/of.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='parent' type-id='9a537bbe' visibility='default' filepath='include/linux/of.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='child' type-id='9a537bbe' visibility='default' filepath='include/linux/of.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='sibling' type-id='9a537bbe' visibility='default' filepath='include/linux/of.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/of.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='_flags' type-id='7359adad' visibility='default' filepath='include/linux/of.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/of.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='phandle' type-id='19c2251e' filepath='include/linux/of.h' line='28' column='1' id='6e394fba'/>
+      <class-decl name='fwnode_handle' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fwnode.h' line='18' column='1' id='d5ace205'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='secondary' type-id='4a935625' visibility='default' filepath='include/linux/fwnode.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='b4ff6cf8' visibility='default' filepath='include/linux/fwnode.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/fwnode.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fwnode.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fwnode.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fwnode.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fwnode.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fwnode_operations' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/fwnode.h' line='114' column='1' id='f45a6a89'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get' type-id='e3a3f61a' visibility='default' filepath='include/linux/fwnode.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='put' type-id='c379ce2c' visibility='default' filepath='include/linux/fwnode.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='device_is_available' type-id='e4913062' visibility='default' filepath='include/linux/fwnode.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device_get_match_data' type-id='def135ae' visibility='default' filepath='include/linux/fwnode.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='property_present' type-id='a9ee1319' visibility='default' filepath='include/linux/fwnode.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='property_read_int_array' type-id='15f6292e' visibility='default' filepath='include/linux/fwnode.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='property_read_string_array' type-id='841b4311' visibility='default' filepath='include/linux/fwnode.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_parent' type-id='e9910ceb' visibility='default' filepath='include/linux/fwnode.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_next_child_node' type-id='900dcb03' visibility='default' filepath='include/linux/fwnode.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_named_child_node' type-id='c297681a' visibility='default' filepath='include/linux/fwnode.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_reference_args' type-id='4324a0e5' visibility='default' filepath='include/linux/fwnode.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='graph_get_next_endpoint' type-id='900dcb03' visibility='default' filepath='include/linux/fwnode.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='graph_get_remote_endpoint' type-id='e9910ceb' visibility='default' filepath='include/linux/fwnode.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='graph_get_port_parent' type-id='e3a3f61a' visibility='default' filepath='include/linux/fwnode.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='graph_parse_endpoint' type-id='bde527e9' visibility='default' filepath='include/linux/fwnode.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='add_links' type-id='5eff49b2' visibility='default' filepath='include/linux/fwnode.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fwnode_reference_args' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/fwnode.h' line='49' column='1' id='8dbba1ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/fwnode.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nargs' type-id='f0981eeb' visibility='default' filepath='include/linux/fwnode.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='args' type-id='6094c99c' visibility='default' filepath='include/linux/fwnode.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fwnode_endpoint' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fwnode.h' line='35' column='1' id='84a13146'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='f0981eeb' visibility='default' filepath='include/linux/fwnode.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/linux/fwnode.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='local_fwnode' type-id='7837cd88' visibility='default' filepath='include/linux/fwnode.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='property' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/of.h' line='31' column='1' id='ebe3ac70'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/of.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='length' type-id='95e97e5e' visibility='default' filepath='include/linux/of.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='value' type-id='eaa32e2f' visibility='default' filepath='include/linux/of.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='ddcd89c6' visibility='default' filepath='include/linux/of.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='attr' type-id='d83a2db1' visibility='default' filepath='include/linux/of.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='class' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='600' column='1' id='fd48a067'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/device.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='class_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev_kobj' type-id='d30bdc51' visibility='default' filepath='include/linux/device.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev_uevent' type-id='22deb949' visibility='default' filepath='include/linux/device.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='devnode' type-id='8cd77b5f' visibility='default' filepath='include/linux/device.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='class_release' type-id='bea4d586' visibility='default' filepath='include/linux/device.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev_release' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='shutdown_pre' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ns_type' type-id='47547dee' visibility='default' filepath='include/linux/device.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='namespace' type-id='e6c297c2' visibility='default' filepath='include/linux/device.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_ownership' type-id='f5f7cbd4' visibility='default' filepath='include/linux/device.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pm' type-id='3fab024e' visibility='default' filepath='include/linux/device.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='p' type-id='5da77304' visibility='default' filepath='include/linux/device.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='628' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fprop_local_percpu' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/flex_proportions.h' line='76' column='1' id='587caff2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='events' type-id='b92c8d0d' visibility='default' filepath='include/linux/flex_proportions.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='period' type-id='f0981eeb' visibility='default' filepath='include/linux/flex_proportions.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/flex_proportions.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='wb_reason' filepath='include/linux/backing-dev-defs.h' line='51' column='1' id='c1602c7a'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='WB_REASON_BACKGROUND' value='0'/>
+        <enumerator name='WB_REASON_VMSCAN' value='1'/>
+        <enumerator name='WB_REASON_SYNC' value='2'/>
+        <enumerator name='WB_REASON_PERIODIC' value='3'/>
+        <enumerator name='WB_REASON_LAPTOP_TIMER' value='4'/>
+        <enumerator name='WB_REASON_FREE_MORE_MEM' value='5'/>
+        <enumerator name='WB_REASON_FS_FREE_SPACE' value='6'/>
+        <enumerator name='WB_REASON_FORKER_THREAD' value='7'/>
+        <enumerator name='WB_REASON_FOREIGN_FLUSH' value='8'/>
+        <enumerator name='WB_REASON_MAX' value='9'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__27' size-in-bits='384' is-anonymous='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='181' column='1' id='93944b10'>
+        <data-member access='private'>
+          <var-decl name='release_work' type-id='ef9025d0' visibility='default' filepath='include/linux/backing-dev-defs.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/backing-dev-defs.h' line='183' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='c0badb3c' size-in-bits='64' id='ef4fae1c'/>
+      <pointer-type-def type-id='cacf0f56' size-in-bits='64' id='5760652c'/>
+      <pointer-type-def type-id='ac0aeb1d' size-in-bits='64' id='f885ca7d'/>
+      <pointer-type-def type-id='87886298' size-in-bits='64' id='d97a04ce'/>
+      <pointer-type-def type-id='f3e87129' size-in-bits='64' id='fb55efa1'/>
+      <pointer-type-def type-id='b545ce08' size-in-bits='64' id='9d1360ce'/>
+      <pointer-type-def type-id='2ec4b2ae' size-in-bits='64' id='8213bb9f'/>
+      <pointer-type-def type-id='096280bf' size-in-bits='64' id='ee802605'/>
+      <pointer-type-def type-id='dfa886b2' size-in-bits='64' id='38b1e3a0'/>
+      <pointer-type-def type-id='40af3608' size-in-bits='64' id='cddcb53e'/>
+      <pointer-type-def type-id='1d120221' size-in-bits='64' id='e118aff9'/>
+      <pointer-type-def type-id='13fcfe64' size-in-bits='64' id='bf8a20d2'/>
+      <pointer-type-def type-id='479d017a' size-in-bits='64' id='5b559658'/>
+      <pointer-type-def type-id='afd9eb4a' size-in-bits='64' id='3620a178'/>
+      <pointer-type-def type-id='cde99b39' size-in-bits='64' id='9a335021'/>
+      <pointer-type-def type-id='e063028f' size-in-bits='64' id='a47d3467'/>
+      <pointer-type-def type-id='a47d3467' size-in-bits='64' id='3e195537'/>
+      <pointer-type-def type-id='651086d7' size-in-bits='64' id='cc26d15f'/>
+      <pointer-type-def type-id='99d089ec' size-in-bits='64' id='a0408c5a'/>
+      <pointer-type-def type-id='be8f4983' size-in-bits='64' id='1f98c663'/>
+      <pointer-type-def type-id='c46c1f27' size-in-bits='64' id='60a257ef'/>
+      <pointer-type-def type-id='19b26952' size-in-bits='64' id='11bff950'/>
+      <pointer-type-def type-id='9467b853' size-in-bits='64' id='1146dea3'/>
+      <pointer-type-def type-id='11fd1392' size-in-bits='64' id='0f8f80b0'/>
+      <pointer-type-def type-id='55eaf925' size-in-bits='64' id='3213e875'/>
+      <pointer-type-def type-id='708c2394' size-in-bits='64' id='282b7312'/>
+      <pointer-type-def type-id='15881542' size-in-bits='64' id='531c24d0'/>
+      <pointer-type-def type-id='0ad68707' size-in-bits='64' id='b6a33eaf'/>
+      <pointer-type-def type-id='facd5338' size-in-bits='64' id='bdcee7ae'/>
+      <pointer-type-def type-id='c75c7b06' size-in-bits='64' id='380c7edc'/>
+      <pointer-type-def type-id='0ef5c7e0' size-in-bits='64' id='b1253746'/>
+      <pointer-type-def type-id='984972f4' size-in-bits='64' id='35e7a722'/>
+      <pointer-type-def type-id='b31bfc8a' size-in-bits='64' id='5e2671f8'/>
+      <pointer-type-def type-id='a6892387' size-in-bits='64' id='d6e32957'/>
+      <pointer-type-def type-id='ea2ebeac' size-in-bits='64' id='03054cfa'/>
+      <pointer-type-def type-id='ab9643dd' size-in-bits='64' id='46ff135d'/>
+      <pointer-type-def type-id='e54806c6' size-in-bits='64' id='f774a956'/>
+      <pointer-type-def type-id='66f1e832' size-in-bits='64' id='aede2cf0'/>
+      <pointer-type-def type-id='a73d96cf' size-in-bits='64' id='d8e759a7'/>
+      <pointer-type-def type-id='1d115fd5' size-in-bits='64' id='dc91d125'/>
+      <pointer-type-def type-id='7f3df443' size-in-bits='64' id='cfff5953'/>
+      <pointer-type-def type-id='5332c7dc' size-in-bits='64' id='a87691ee'/>
+      <pointer-type-def type-id='19596889' size-in-bits='64' id='8cffa561'/>
+      <pointer-type-def type-id='6a18482b' size-in-bits='64' id='8cd77b5f'/>
+      <pointer-type-def type-id='7e6588d9' size-in-bits='64' id='b72fdee5'/>
+      <pointer-type-def type-id='24c24978' size-in-bits='64' id='b160f6ba'/>
+      <pointer-type-def type-id='fd48a067' size-in-bits='64' id='67aca04f'/>
+      <pointer-type-def type-id='6110442c' size-in-bits='64' id='6f67b38a'/>
+      <pointer-type-def type-id='6e3695a3' size-in-bits='64' id='84127e50'/>
+      <qualified-type-def type-id='ad95e21b' const='yes' id='3c7ea80a'/>
+      <pointer-type-def type-id='3c7ea80a' size-in-bits='64' id='5b62aa60'/>
+      <qualified-type-def type-id='d53ee986' const='yes' id='9bf7ec75'/>
+      <pointer-type-def type-id='9bf7ec75' size-in-bits='64' id='e649198d'/>
+      <qualified-type-def type-id='b785b938' const='yes' id='c3619065'/>
+      <pointer-type-def type-id='c3619065' size-in-bits='64' id='e1962c5d'/>
+      <qualified-type-def type-id='dbd58b50' const='yes' id='425496d7'/>
+      <pointer-type-def type-id='425496d7' size-in-bits='64' id='6829b047'/>
+      <qualified-type-def type-id='ebd46aa4' const='yes' id='e4664ea7'/>
+      <pointer-type-def type-id='e4664ea7' size-in-bits='64' id='1a0da7f7'/>
+      <qualified-type-def type-id='1354385d' const='yes' id='6b2a4486'/>
+      <pointer-type-def type-id='6b2a4486' size-in-bits='64' id='5f8a1ac4'/>
+      <qualified-type-def type-id='3ea82289' const='yes' id='86af1d10'/>
+      <pointer-type-def type-id='86af1d10' size-in-bits='64' id='3fab024e'/>
+      <qualified-type-def type-id='66e487eb' const='yes' id='a78232f6'/>
+      <pointer-type-def type-id='a78232f6' size-in-bits='64' id='8df61054'/>
+      <qualified-type-def type-id='bdae35f4' const='yes' id='683a8a93'/>
+      <pointer-type-def type-id='683a8a93' size-in-bits='64' id='cd28613b'/>
+      <qualified-type-def type-id='d45f2b4f' const='yes' id='512ac7cc'/>
+      <pointer-type-def type-id='512ac7cc' size-in-bits='64' id='ac58af12'/>
+      <qualified-type-def type-id='772a4de0' const='yes' id='ff1ab2e4'/>
+      <pointer-type-def type-id='ff1ab2e4' size-in-bits='64' id='65077a4a'/>
+      <qualified-type-def type-id='b4b8adeb' const='yes' id='09ffba8a'/>
+      <pointer-type-def type-id='09ffba8a' size-in-bits='64' id='5d92c9e0'/>
+      <qualified-type-def type-id='d5ace205' const='yes' id='03419172'/>
+      <pointer-type-def type-id='03419172' size-in-bits='64' id='7837cd88'/>
+      <qualified-type-def type-id='f45a6a89' const='yes' id='2eb8da02'/>
+      <pointer-type-def type-id='2eb8da02' size-in-bits='64' id='b4ff6cf8'/>
+      <qualified-type-def type-id='8b7a2cd1' const='yes' id='9ce849da'/>
+      <pointer-type-def type-id='9ce849da' size-in-bits='64' id='f1ac64d0'/>
+      <qualified-type-def type-id='22ec9634' const='yes' id='d98856a4'/>
+      <pointer-type-def type-id='d98856a4' size-in-bits='64' id='ffa0418a'/>
+      <qualified-type-def type-id='01c546da' const='yes' id='f1415d4d'/>
+      <pointer-type-def type-id='f1415d4d' size-in-bits='64' id='30e60925'/>
+      <qualified-type-def type-id='b77325d2' const='yes' id='2d144a5b'/>
+      <pointer-type-def type-id='2d144a5b' size-in-bits='64' id='67f12fe3'/>
+      <qualified-type-def type-id='8bb45a31' const='yes' id='c46fad80'/>
+      <pointer-type-def type-id='c46fad80' size-in-bits='64' id='e5ce629e'/>
+      <qualified-type-def type-id='b45c773c' const='yes' id='8ef65cd1'/>
+      <pointer-type-def type-id='8ef65cd1' size-in-bits='64' id='08d45f21'/>
+      <qualified-type-def type-id='c4b04493' const='yes' id='b64da4b2'/>
+      <pointer-type-def type-id='b64da4b2' size-in-bits='64' id='943a1b48'/>
+      <qualified-type-def type-id='54718f09' const='yes' id='c408da30'/>
+      <pointer-type-def type-id='c408da30' size-in-bits='64' id='b3ef56ee'/>
+      <pointer-type-def type-id='9cbd1c16' size-in-bits='64' id='f9b37274'/>
+      <pointer-type-def type-id='3288a0f7' size-in-bits='64' id='581abdef'/>
+      <pointer-type-def type-id='64c36f53' size-in-bits='64' id='d589c913'/>
+      <pointer-type-def type-id='4dc01f59' size-in-bits='64' id='9bf95e81'/>
+      <pointer-type-def type-id='14ba1df2' size-in-bits='64' id='1b0e1d00'/>
+      <pointer-type-def type-id='25ee3a49' size-in-bits='64' id='d4f9dda1'/>
+      <pointer-type-def type-id='9488f766' size-in-bits='64' id='809cdefc'/>
+      <pointer-type-def type-id='cf6b9835' size-in-bits='64' id='a49b2975'/>
+      <pointer-type-def type-id='97aa083d' size-in-bits='64' id='2e3e746d'/>
+      <pointer-type-def type-id='22d74cfc' size-in-bits='64' id='103da70a'/>
+      <pointer-type-def type-id='1354385d' size-in-bits='64' id='74bccedd'/>
+      <pointer-type-def type-id='6739dd09' size-in-bits='64' id='10cfb911'/>
+      <pointer-type-def type-id='4ec43a31' size-in-bits='64' id='b2bcb5d9'/>
+      <pointer-type-def type-id='7c7d6006' size-in-bits='64' id='1c66bddc'/>
+      <pointer-type-def type-id='beafd747' size-in-bits='64' id='a586bbcf'/>
+      <pointer-type-def type-id='91a515f9' size-in-bits='64' id='631dc3c1'/>
+      <pointer-type-def type-id='ed51618b' size-in-bits='64' id='11b101bb'/>
+      <pointer-type-def type-id='d39c42ab' size-in-bits='64' id='4dec003b'/>
+      <pointer-type-def type-id='d83969a6' size-in-bits='64' id='2993adbc'/>
+      <pointer-type-def type-id='3fc3d262' size-in-bits='64' id='42988600'/>
+      <pointer-type-def type-id='7552fc26' size-in-bits='64' id='50abd760'/>
+      <pointer-type-def type-id='038d05bd' size-in-bits='64' id='fa43ef1d'/>
+      <pointer-type-def type-id='7c94eaa3' size-in-bits='64' id='a4375c03'/>
+      <pointer-type-def type-id='7d93f824' size-in-bits='64' id='b991f562'/>
+      <pointer-type-def type-id='32536656' size-in-bits='64' id='a80fd1bc'/>
+      <pointer-type-def type-id='66e487eb' size-in-bits='64' id='fa0b179b'/>
+      <pointer-type-def type-id='37251e77' size-in-bits='64' id='9b4aaf1f'/>
+      <pointer-type-def type-id='fe007c02' size-in-bits='64' id='00c7b870'/>
+      <pointer-type-def type-id='6661a698' size-in-bits='64' id='9a537bbe'/>
+      <pointer-type-def type-id='d066d157' size-in-bits='64' id='0d3b0dcf'/>
+      <pointer-type-def type-id='ec1aac50' size-in-bits='64' id='26f00576'/>
+      <pointer-type-def type-id='a8d380d5' size-in-bits='64' id='af836b25'/>
+      <pointer-type-def type-id='acfd9368' size-in-bits='64' id='70f1634e'/>
+      <pointer-type-def type-id='cf29c9b3' size-in-bits='64' id='e835b5d8'/>
+      <pointer-type-def type-id='5d5ff7f6' size-in-bits='64' id='5bfba86c'/>
+      <pointer-type-def type-id='0128515a' size-in-bits='64' id='1b19faa1'/>
+      <pointer-type-def type-id='e44b8083' size-in-bits='64' id='52abf1d3'/>
+      <pointer-type-def type-id='772a4de0' size-in-bits='64' id='141b6428'/>
+      <pointer-type-def type-id='c21690c0' size-in-bits='64' id='3ce3447a'/>
+      <pointer-type-def type-id='7f4a5e53' size-in-bits='64' id='d7c38177'/>
+      <pointer-type-def type-id='32358857' size-in-bits='64' id='6d30564f'/>
+      <pointer-type-def type-id='fc87d78f' size-in-bits='64' id='07d0a3e7'/>
+      <pointer-type-def type-id='2731de48' size-in-bits='64' id='4a89adae'/>
+      <pointer-type-def type-id='aaa166ff' size-in-bits='64' id='177a4437'/>
+      <pointer-type-def type-id='44399e16' size-in-bits='64' id='57c51e1c'/>
+      <pointer-type-def type-id='f8d03d40' size-in-bits='64' id='ce714046'/>
+      <pointer-type-def type-id='a43a9295' size-in-bits='64' id='ff826f29'/>
+      <pointer-type-def type-id='5ff1273a' size-in-bits='64' id='26461068'/>
+      <pointer-type-def type-id='77dc8383' size-in-bits='64' id='71f2e203'/>
+      <pointer-type-def type-id='faaac7a5' size-in-bits='64' id='fe454a75'/>
+      <pointer-type-def type-id='7147e7ff' size-in-bits='64' id='7156b317'/>
+      <pointer-type-def type-id='ef45f062' size-in-bits='64' id='74f101b0'/>
+      <pointer-type-def type-id='e079fe29' size-in-bits='64' id='a68064b1'/>
+      <pointer-type-def type-id='a2b406b5' size-in-bits='64' id='107630a5'/>
+      <pointer-type-def type-id='84dbb257' size-in-bits='64' id='943ad75f'/>
+      <pointer-type-def type-id='7ca99f8c' size-in-bits='64' id='1351457a'/>
+      <pointer-type-def type-id='84a13146' size-in-bits='64' id='41b1c13c'/>
+      <pointer-type-def type-id='d5ace205' size-in-bits='64' id='4a935625'/>
+      <pointer-type-def type-id='d4693377' size-in-bits='64' id='e9910ceb'/>
+      <pointer-type-def type-id='cbab5390' size-in-bits='64' id='c297681a'/>
+      <pointer-type-def type-id='34e265cf' size-in-bits='64' id='900dcb03'/>
+      <pointer-type-def type-id='8f5d4d00' size-in-bits='64' id='e3a3f61a'/>
+      <pointer-type-def type-id='8dbba1ec' size-in-bits='64' id='861f302a'/>
+      <pointer-type-def type-id='4f60ffbd' size-in-bits='64' id='33c599db'/>
+      <pointer-type-def type-id='28e89e7e' size-in-bits='64' id='10a7f6b4'/>
+      <pointer-type-def type-id='2473bc20' size-in-bits='64' id='84dc82b8'/>
+      <pointer-type-def type-id='e151255a' size-in-bits='64' id='030d0b18'/>
+      <pointer-type-def type-id='5bd248e7' size-in-bits='64' id='6cf6468f'/>
+      <pointer-type-def type-id='6cf6468f' size-in-bits='64' id='2cb135bf'/>
+      <pointer-type-def type-id='bd4dc4cb' size-in-bits='64' id='c085a9fb'/>
+      <pointer-type-def type-id='b4bfe052' size-in-bits='64' id='0296b670'/>
+      <pointer-type-def type-id='c7afdfb7' size-in-bits='64' id='1a16368f'/>
+      <pointer-type-def type-id='1f91fd06' size-in-bits='64' id='bf0465ec'/>
+      <pointer-type-def type-id='b5a731bc' size-in-bits='64' id='93762a0a'/>
+      <pointer-type-def type-id='e56bc2e5' size-in-bits='64' id='f6c3a7a5'/>
+      <pointer-type-def type-id='3482ac54' size-in-bits='64' id='d7a1e3c2'/>
+      <pointer-type-def type-id='27ebfa24' size-in-bits='64' id='01d310c2'/>
+      <pointer-type-def type-id='203c1d4d' size-in-bits='64' id='a2abb549'/>
+      <pointer-type-def type-id='b1517543' size-in-bits='64' id='785bacaf'/>
+      <pointer-type-def type-id='9e22fc50' size-in-bits='64' id='68a88aaa'/>
+      <pointer-type-def type-id='0afc6f78' size-in-bits='64' id='2207988a'/>
+      <pointer-type-def type-id='806a4586' size-in-bits='64' id='6ed32e60'/>
+      <pointer-type-def type-id='1ee59844' size-in-bits='64' id='55f833ce'/>
+      <pointer-type-def type-id='749ee287' size-in-bits='64' id='8bdbbb63'/>
+      <pointer-type-def type-id='969fc316' size-in-bits='64' id='2b0348f0'/>
+      <pointer-type-def type-id='2cfafd1c' size-in-bits='64' id='3e9fac96'/>
+      <pointer-type-def type-id='28d1931f' size-in-bits='64' id='354bcec3'/>
+      <pointer-type-def type-id='bde8b845' size-in-bits='64' id='841b4311'/>
+      <pointer-type-def type-id='2a123bf1' size-in-bits='64' id='4324a0e5'/>
+      <pointer-type-def type-id='630a7fa4' size-in-bits='64' id='15f6292e'/>
+      <pointer-type-def type-id='00631170' size-in-bits='64' id='5eff49b2'/>
+      <pointer-type-def type-id='41d25fad' size-in-bits='64' id='bde527e9'/>
+      <pointer-type-def type-id='28cb132f' size-in-bits='64' id='be2c124b'/>
+      <pointer-type-def type-id='2d2d4460' size-in-bits='64' id='738b5bc2'/>
+      <pointer-type-def type-id='0174792d' size-in-bits='64' id='0ba194b9'/>
+      <pointer-type-def type-id='d99ae68d' size-in-bits='64' id='7bada959'/>
+      <pointer-type-def type-id='647d371e' size-in-bits='64' id='35e8c658'/>
+      <pointer-type-def type-id='374a88a9' size-in-bits='64' id='613d39f5'/>
+      <pointer-type-def type-id='63217e72' size-in-bits='64' id='2f28f04c'/>
+      <pointer-type-def type-id='9c1f445d' size-in-bits='64' id='22deb949'/>
+      <pointer-type-def type-id='a301f696' size-in-bits='64' id='64452f48'/>
+      <pointer-type-def type-id='dccf0381' size-in-bits='64' id='295a92ed'/>
+      <pointer-type-def type-id='aa70b8e2' size-in-bits='64' id='df416a94'/>
+      <pointer-type-def type-id='8ab5a2af' size-in-bits='64' id='5aa1f3eb'/>
+      <pointer-type-def type-id='a2ac80c1' size-in-bits='64' id='f7114ca5'/>
+      <pointer-type-def type-id='923a53bf' size-in-bits='64' id='79efa3b3'/>
+      <pointer-type-def type-id='d07af849' size-in-bits='64' id='4da4101d'/>
+      <pointer-type-def type-id='4ed460e4' size-in-bits='64' id='f220106e'/>
+      <pointer-type-def type-id='603a76bb' size-in-bits='64' id='8eee5b07'/>
+      <pointer-type-def type-id='17f2d2f2' size-in-bits='64' id='c5c535b4'/>
+      <pointer-type-def type-id='ed4be5c0' size-in-bits='64' id='6668d13a'/>
+      <pointer-type-def type-id='fc8b497c' size-in-bits='64' id='0023218e'/>
+      <pointer-type-def type-id='294be38d' size-in-bits='64' id='38a7cb79'/>
+      <pointer-type-def type-id='9b94c22b' size-in-bits='64' id='8d78edef'/>
+      <pointer-type-def type-id='87732674' size-in-bits='64' id='afc38bc6'/>
+      <pointer-type-def type-id='6ad7a215' size-in-bits='64' id='36f91979'/>
+      <pointer-type-def type-id='6d544aa1' size-in-bits='64' id='0cd76695'/>
+      <pointer-type-def type-id='a21db860' size-in-bits='64' id='f45f2842'/>
+      <pointer-type-def type-id='4e83077d' size-in-bits='64' id='b31b5e29'/>
+      <pointer-type-def type-id='62855293' size-in-bits='64' id='c2889977'/>
+      <pointer-type-def type-id='081f19f3' size-in-bits='64' id='f72cc247'/>
+      <pointer-type-def type-id='b4bb7eac' size-in-bits='64' id='d8c458ae'/>
+      <pointer-type-def type-id='2fa2db94' size-in-bits='64' id='5346c726'/>
+      <pointer-type-def type-id='b52da57b' size-in-bits='64' id='f22a42d7'/>
+      <pointer-type-def type-id='0f83e831' size-in-bits='64' id='22aed5fd'/>
+      <pointer-type-def type-id='595c4720' size-in-bits='64' id='2c2624ea'/>
+      <pointer-type-def type-id='5dcc12a3' size-in-bits='64' id='c3408547'/>
+      <pointer-type-def type-id='abe3ca10' size-in-bits='64' id='9a5ed472'/>
+      <pointer-type-def type-id='287b404f' size-in-bits='64' id='50ec573b'/>
+      <pointer-type-def type-id='ca8c1528' size-in-bits='64' id='7fa32aba'/>
+      <pointer-type-def type-id='9efbfb11' size-in-bits='64' id='b9b212f5'/>
+      <pointer-type-def type-id='0d6f83ff' size-in-bits='64' id='1979c577'/>
+      <pointer-type-def type-id='2352f3ae' size-in-bits='64' id='0b19fc54'/>
+      <pointer-type-def type-id='6c784694' size-in-bits='64' id='506df562'/>
+      <pointer-type-def type-id='be50a64d' size-in-bits='64' id='e46089fd'/>
+      <pointer-type-def type-id='4816a146' size-in-bits='64' id='00c4cbac'/>
+      <pointer-type-def type-id='f52a1ce8' size-in-bits='64' id='30897c4e'/>
+      <pointer-type-def type-id='c2c09950' size-in-bits='64' id='e963f446'/>
+      <pointer-type-def type-id='55e8af82' size-in-bits='64' id='ca399350'/>
+      <pointer-type-def type-id='a667f60e' size-in-bits='64' id='7544e824'/>
+      <pointer-type-def type-id='9281c70f' size-in-bits='64' id='44bef697'/>
+      <pointer-type-def type-id='ae89b201' size-in-bits='64' id='1f2a8949'/>
+      <pointer-type-def type-id='2376c3ec' size-in-bits='64' id='8912440a'/>
+      <pointer-type-def type-id='e222a326' size-in-bits='64' id='016811bc'/>
+      <pointer-type-def type-id='7f2c5e96' size-in-bits='64' id='f43a2d4c'/>
+      <pointer-type-def type-id='08694484' size-in-bits='64' id='17898fce'/>
+      <pointer-type-def type-id='f8009817' size-in-bits='64' id='208b18ef'/>
+      <pointer-type-def type-id='99cd4891' size-in-bits='64' id='8f01ad5c'/>
+      <pointer-type-def type-id='11c8601c' size-in-bits='64' id='223696fc'/>
+      <pointer-type-def type-id='2e6f3990' size-in-bits='64' id='97851996'/>
+      <pointer-type-def type-id='413be38e' size-in-bits='64' id='4ec56f94'/>
+      <pointer-type-def type-id='366e0ade' size-in-bits='64' id='09f6e9a4'/>
+      <pointer-type-def type-id='6aac043b' size-in-bits='64' id='a0d3a64b'/>
+      <pointer-type-def type-id='94d117ca' size-in-bits='64' id='8bf6d789'/>
+      <pointer-type-def type-id='27f2e0d9' size-in-bits='64' id='a4c19f22'/>
+      <pointer-type-def type-id='da0e76a0' size-in-bits='64' id='3c330066'/>
+      <pointer-type-def type-id='37688d8e' size-in-bits='64' id='950eceb8'/>
+      <pointer-type-def type-id='bd965181' size-in-bits='64' id='a2bff677'/>
+      <pointer-type-def type-id='8e5f5512' size-in-bits='64' id='871fd930'/>
+      <pointer-type-def type-id='a27aef61' size-in-bits='64' id='2db792b9'/>
+      <pointer-type-def type-id='602fd1a9' size-in-bits='64' id='bb6de7e1'/>
+      <pointer-type-def type-id='85c08b52' size-in-bits='64' id='39a43b40'/>
+      <pointer-type-def type-id='9b08f7cd' size-in-bits='64' id='d504f73d'/>
+      <pointer-type-def type-id='635c3685' size-in-bits='64' id='ea7fad85'/>
+      <pointer-type-def type-id='a388c264' size-in-bits='64' id='d4f2b9b2'/>
+      <pointer-type-def type-id='d84ae668' size-in-bits='64' id='36700cde'/>
+      <pointer-type-def type-id='23a849db' size-in-bits='64' id='16cfe92b'/>
+      <pointer-type-def type-id='3490ee41' size-in-bits='64' id='200ffa89'/>
+      <pointer-type-def type-id='524b1234' size-in-bits='64' id='070ae8d2'/>
+      <pointer-type-def type-id='16650a93' size-in-bits='64' id='cd3a82e3'/>
+      <pointer-type-def type-id='4448fdd3' size-in-bits='64' id='090503c3'/>
+      <pointer-type-def type-id='f2e22af7' size-in-bits='64' id='30f9749f'/>
+      <pointer-type-def type-id='7263c472' size-in-bits='64' id='2bf16f5a'/>
+      <pointer-type-def type-id='9d67acd6' size-in-bits='64' id='b9419dc6'/>
+      <pointer-type-def type-id='a5007ad0' size-in-bits='64' id='2aa2e156'/>
+      <pointer-type-def type-id='40ea9ac1' size-in-bits='64' id='f4a67529'/>
+      <pointer-type-def type-id='2b3d4ba2' size-in-bits='64' id='bd83ae50'/>
+      <pointer-type-def type-id='54406315' size-in-bits='64' id='c876a7a5'/>
+      <pointer-type-def type-id='3bf19710' size-in-bits='64' id='53e3a7d6'/>
+      <pointer-type-def type-id='1269b801' size-in-bits='64' id='77415389'/>
+      <pointer-type-def type-id='e205b6f1' size-in-bits='64' id='0906f5b9'/>
+      <pointer-type-def type-id='fe4ffa7a' size-in-bits='64' id='d077e928'/>
+      <pointer-type-def type-id='8cf4128f' size-in-bits='64' id='66032958'/>
+      <pointer-type-def type-id='ebe3ac70' size-in-bits='64' id='ddcd89c6'/>
+      <pointer-type-def type-id='ac763c5d' size-in-bits='64' id='a06a810d'/>
+      <pointer-type-def type-id='956e764e' size-in-bits='64' id='9dc40234'/>
+      <pointer-type-def type-id='0d029111' size-in-bits='64' id='4616a179'/>
+      <pointer-type-def type-id='ceee71ca' size-in-bits='64' id='3dad1a48'/>
+      <pointer-type-def type-id='b715cae5' size-in-bits='64' id='a66a8231'/>
+      <pointer-type-def type-id='f111d4f3' size-in-bits='64' id='27bb8677'/>
+      <pointer-type-def type-id='3dad1a48' size-in-bits='64' id='79808846'/>
+      <pointer-type-def type-id='caf652c7' size-in-bits='64' id='e7d2a5fd'/>
+      <pointer-type-def type-id='f68e0adc' size-in-bits='64' id='3cc8739a'/>
+      <pointer-type-def type-id='9e095f93' size-in-bits='64' id='e6726ce3'/>
+      <pointer-type-def type-id='9f7fd760' size-in-bits='64' id='2facc7e6'/>
+      <pointer-type-def type-id='6efee8be' size-in-bits='64' id='8462bc54'/>
+      <pointer-type-def type-id='563595d9' size-in-bits='64' id='3d1f4971'/>
+      <pointer-type-def type-id='3d1f4971' size-in-bits='64' id='93407a41'/>
+      <pointer-type-def type-id='9cdca91a' size-in-bits='64' id='c13bca88'/>
+      <pointer-type-def type-id='d5ee6a94' size-in-bits='64' id='6ed6b432'/>
+      <pointer-type-def type-id='537d88b1' size-in-bits='64' id='5afdaa66'/>
+      <pointer-type-def type-id='16588ac8' size-in-bits='64' id='d0163a5e'/>
+      <pointer-type-def type-id='e0a68fea' size-in-bits='64' id='c3a28778'/>
+      <pointer-type-def type-id='384b6d84' size-in-bits='64' id='6ceb7782'/>
+      <pointer-type-def type-id='aa112583' size-in-bits='64' id='aca8a113'/>
+      <pointer-type-def type-id='a7832498' size-in-bits='64' id='9f2cce4b'/>
+      <pointer-type-def type-id='1706cf19' size-in-bits='64' id='e9d32201'/>
+      <pointer-type-def type-id='ccc53977' size-in-bits='64' id='774b23cf'/>
+      <pointer-type-def type-id='ff2b3d10' size-in-bits='64' id='eb11624e'/>
+      <pointer-type-def type-id='8b6491f4' size-in-bits='64' id='f3dcd492'/>
+      <pointer-type-def type-id='ea3de64d' size-in-bits='64' id='29a48d3d'/>
+      <pointer-type-def type-id='990cce78' size-in-bits='64' id='15b8a3be'/>
+      <pointer-type-def type-id='f3415518' size-in-bits='64' id='f8dc9df0'/>
+      <pointer-type-def type-id='73142703' size-in-bits='64' id='8b175043'/>
+      <pointer-type-def type-id='c59e4f4c' size-in-bits='64' id='4adb0e6a'/>
+      <pointer-type-def type-id='b59d7dce' size-in-bits='64' id='78c01427'/>
+      <pointer-type-def type-id='f772df6d' size-in-bits='64' id='d0d57cc5'/>
+      <pointer-type-def type-id='4a19d21e' size-in-bits='64' id='5da77304'/>
+      <pointer-type-def type-id='158e8b98' size-in-bits='64' id='2a7b00f2'/>
+      <pointer-type-def type-id='f77d4717' size-in-bits='64' id='104fa32f'/>
+      <pointer-type-def type-id='e1f906a3' size-in-bits='64' id='19a26ee3'/>
+      <pointer-type-def type-id='f308a7ce' size-in-bits='64' id='22aa3c54'/>
+      <pointer-type-def type-id='e27b4e90' size-in-bits='64' id='898c1076'/>
+      <pointer-type-def type-id='72093c11' size-in-bits='64' id='573a5ee9'/>
+      <pointer-type-def type-id='1986ca65' size-in-bits='64' id='aa4b1eb5'/>
+      <pointer-type-def type-id='78b26ac9' size-in-bits='64' id='fb7d87a1'/>
+      <pointer-type-def type-id='fd48a6e7' size-in-bits='64' id='23d6768d'/>
+      <pointer-type-def type-id='23d6768d' size-in-bits='64' id='109cc753'/>
+      <pointer-type-def type-id='a2689372' size-in-bits='64' id='3570c570'/>
+      <pointer-type-def type-id='195ea87f' size-in-bits='64' id='d6d37d27'/>
+      <pointer-type-def type-id='60588bb1' size-in-bits='64' id='18881289'/>
+      <pointer-type-def type-id='fd1f8b7c' size-in-bits='64' id='0a18715a'/>
+      <pointer-type-def type-id='c2be64d2' size-in-bits='64' id='6ca30b05'/>
+      <pointer-type-def type-id='da68c5d7' size-in-bits='64' id='c2644e83'/>
+      <pointer-type-def type-id='f611d028' size-in-bits='64' id='e4913062'/>
+      <pointer-type-def type-id='19bf080d' size-in-bits='64' id='a9ee1319'/>
+      <pointer-type-def type-id='b911101f' size-in-bits='64' id='1734c68b'/>
+      <pointer-type-def type-id='5753d902' size-in-bits='64' id='c4b7e554'/>
+      <pointer-type-def type-id='b39453c8' size-in-bits='64' id='7855184a'/>
+      <pointer-type-def type-id='ea038279' size-in-bits='64' id='66c8694d'/>
+      <pointer-type-def type-id='59145b91' size-in-bits='64' id='ae18a37d'/>
+      <pointer-type-def type-id='7df55081' size-in-bits='64' id='49f5e2e5'/>
+      <pointer-type-def type-id='30247438' size-in-bits='64' id='a2178c8a'/>
+      <pointer-type-def type-id='54c5fdf4' size-in-bits='64' id='1854489e'/>
+      <pointer-type-def type-id='243799e7' size-in-bits='64' id='bc00c03b'/>
+      <pointer-type-def type-id='8804cbe4' size-in-bits='64' id='0e70db3e'/>
+      <pointer-type-def type-id='90c1df7f' size-in-bits='64' id='ad13fd93'/>
+      <pointer-type-def type-id='1f1ec116' size-in-bits='64' id='5dee5830'/>
+      <pointer-type-def type-id='b5975902' size-in-bits='64' id='9917918c'/>
+      <pointer-type-def type-id='89e527b7' size-in-bits='64' id='d1440a9f'/>
+      <pointer-type-def type-id='0c7ab04d' size-in-bits='64' id='5224788d'/>
+      <pointer-type-def type-id='a9d71093' size-in-bits='64' id='9b105293'/>
+      <pointer-type-def type-id='2594b00f' size-in-bits='64' id='c484cc9e'/>
+      <pointer-type-def type-id='6d22a61b' size-in-bits='64' id='34c443b7'/>
+      <pointer-type-def type-id='ad4a13f9' size-in-bits='64' id='4bf65d9d'/>
+      <pointer-type-def type-id='45660d72' size-in-bits='64' id='c79c9f4c'/>
+      <pointer-type-def type-id='38b33cba' size-in-bits='64' id='1588722c'/>
+      <pointer-type-def type-id='4851ce38' size-in-bits='64' id='a056c492'/>
+      <pointer-type-def type-id='7359adad' size-in-bits='64' id='1d2c2b85'/>
+      <pointer-type-def type-id='8c178e23' size-in-bits='64' id='c0ced321'/>
+      <pointer-type-def type-id='44f52e9e' size-in-bits='64' id='9d5923ee'/>
+      <pointer-type-def type-id='4e7ef9a5' size-in-bits='64' id='a75080c6'/>
+      <pointer-type-def type-id='607834f2' size-in-bits='64' id='60c9df2c'/>
+      <pointer-type-def type-id='4f1e6b9b' size-in-bits='64' id='66288ae4'/>
+      <pointer-type-def type-id='5d58e1d2' size-in-bits='64' id='c4cac78c'/>
+      <pointer-type-def type-id='07c30a78' size-in-bits='64' id='f65daff2'/>
+      <pointer-type-def type-id='d71978c5' size-in-bits='64' id='fe17c379'/>
+      <pointer-type-def type-id='03d219e2' size-in-bits='64' id='6484073c'/>
+      <pointer-type-def type-id='59bcd074' size-in-bits='64' id='bea4d586'/>
+      <pointer-type-def type-id='a66ce823' size-in-bits='64' id='7e5b15cf'/>
+      <pointer-type-def type-id='6d41ed4e' size-in-bits='64' id='47727520'/>
+      <pointer-type-def type-id='fb2144e8' size-in-bits='64' id='dd787f72'/>
+      <pointer-type-def type-id='630e0832' size-in-bits='64' id='f5f7cbd4'/>
+      <pointer-type-def type-id='dd082beb' size-in-bits='64' id='9ed36ca7'/>
+      <pointer-type-def type-id='2157493d' size-in-bits='64' id='772c77c9'/>
+      <pointer-type-def type-id='0a84ab07' size-in-bits='64' id='7d18218b'/>
+      <pointer-type-def type-id='08cd0705' size-in-bits='64' id='b97350f1'/>
+      <pointer-type-def type-id='09c8f1a3' size-in-bits='64' id='6407fd0f'/>
+      <pointer-type-def type-id='766eac03' size-in-bits='64' id='c3d2558f'/>
+      <pointer-type-def type-id='8741a34d' size-in-bits='64' id='d7b98f89'/>
+      <pointer-type-def type-id='e76f1d29' size-in-bits='64' id='4935400d'/>
+      <pointer-type-def type-id='b98b24d0' size-in-bits='64' id='d6965222'/>
+      <pointer-type-def type-id='56958353' size-in-bits='64' id='ce828d9f'/>
+      <pointer-type-def type-id='165b46a0' size-in-bits='64' id='9f403612'/>
+      <pointer-type-def type-id='4c671f3a' size-in-bits='64' id='79b8da5c'/>
+      <pointer-type-def type-id='ff15393c' size-in-bits='64' id='89340c26'/>
+      <pointer-type-def type-id='c5392ac1' size-in-bits='64' id='4aecccbd'/>
+      <pointer-type-def type-id='d8fd579a' size-in-bits='64' id='c379ce2c'/>
+      <pointer-type-def type-id='3683b7e7' size-in-bits='64' id='dabeff1b'/>
+      <pointer-type-def type-id='bc51cf2c' size-in-bits='64' id='156433b6'/>
+      <pointer-type-def type-id='b6c1136f' size-in-bits='64' id='7e20177b'/>
+      <pointer-type-def type-id='54b1caeb' size-in-bits='64' id='82a6d477'/>
+      <pointer-type-def type-id='8eeb5a69' size-in-bits='64' id='fedb17fd'/>
+      <pointer-type-def type-id='8e9eec3c' size-in-bits='64' id='f48b73f6'/>
+      <pointer-type-def type-id='a79c760e' size-in-bits='64' id='aed2baa8'/>
+      <pointer-type-def type-id='078589a3' size-in-bits='64' id='6c534e17'/>
+      <pointer-type-def type-id='e589860a' size-in-bits='64' id='eddb9394'/>
+      <pointer-type-def type-id='7a592779' size-in-bits='64' id='a8564695'/>
+      <pointer-type-def type-id='d725da49' size-in-bits='64' id='54df184d'/>
+      <pointer-type-def type-id='2a275b06' size-in-bits='64' id='dae07608'/>
+      <pointer-type-def type-id='88d4f840' size-in-bits='64' id='f865774a'/>
+      <pointer-type-def type-id='45e743e9' size-in-bits='64' id='bbf015cd'/>
+      <pointer-type-def type-id='90d2ca45' size-in-bits='64' id='639b44d1'/>
+      <pointer-type-def type-id='820ec76f' size-in-bits='64' id='300d6413'/>
+      <pointer-type-def type-id='1ee46c97' size-in-bits='64' id='b615a053'/>
+      <pointer-type-def type-id='2572f485' size-in-bits='64' id='40f624e9'/>
+      <pointer-type-def type-id='82e3e1cf' size-in-bits='64' id='d846ae3b'/>
+      <pointer-type-def type-id='47d2043e' size-in-bits='64' id='604374c8'/>
+      <pointer-type-def type-id='f67639d3' size-in-bits='64' id='7bca30b7'/>
+      <pointer-type-def type-id='f83bf2cd' size-in-bits='64' id='f13b7179'/>
+      <pointer-type-def type-id='1c0f29cf' size-in-bits='64' id='1c9e19fb'/>
+      <pointer-type-def type-id='24bb49a8' size-in-bits='64' id='54777a92'/>
+      <pointer-type-def type-id='ca7f7878' size-in-bits='64' id='9d640202'/>
+      <pointer-type-def type-id='07c93537' size-in-bits='64' id='e46f66f3'/>
+      <pointer-type-def type-id='c00013f4' size-in-bits='64' id='def135ae'/>
+      <pointer-type-def type-id='f8c641b0' size-in-bits='64' id='e6c297c2'/>
+      <pointer-type-def type-id='066ca455' size-in-bits='64' id='06c31e09'/>
+      <pointer-type-def type-id='f9617b12' size-in-bits='64' id='e91cc304'/>
+      <pointer-type-def type-id='4657336c' size-in-bits='64' id='303e01fa'/>
+      <pointer-type-def type-id='152cd1b0' size-in-bits='64' id='1ea237a6'/>
+      <pointer-type-def type-id='469df90e' size-in-bits='64' id='95610bd4'/>
+      <pointer-type-def type-id='be9189df' size-in-bits='64' id='0a0aff97'/>
+      <function-decl name='proc_create_seq_private' mangled-name='proc_create_seq_private' filepath='include/linux/proc_fs.h' line='32' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_create_seq_private'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='d077e928'/>
+        <parameter type-id='943a1b48'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='d077e928'/>
+      </function-decl>
+      <function-decl name='find_next_bit' mangled-name='find_next_bit' filepath='include/asm-generic/bitops/find.h' line='15' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='find_next_bit'>
+        <parameter type-id='f9b37274'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='cpumask_next' mangled-name='cpumask_next' filepath='include/linux/cpumask.h' line='228' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpumask_next'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='5f8a1ac4'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='seq_printf' mangled-name='seq_printf' filepath='include/linux/seq_file.h' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_printf'>
+        <parameter type-id='f8dc9df0'/>
+        <parameter type-id='80f4b756'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='5332c7dc'>
+        <parameter type-id='cfff5953'/>
+        <return type-id='cfff5953'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6a18482b'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='c484cc9e'/>
+        <return type-id='26a90f95'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7e6588d9'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='c484cc9e'/>
+        <parameter type-id='2168a3eb'/>
+        <parameter type-id='acd96ee1'/>
+        <return type-id='26a90f95'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24c24978'>
+        <parameter type-id='33c599db'/>
+        <parameter type-id='c484cc9e'/>
+        <return type-id='26a90f95'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7552fc26'>
+        <parameter type-id='2993adbc'/>
+        <return type-id='42988600'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c21690c0'>
+        <parameter type-id='141b6428'/>
+        <return type-id='141b6428'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7f4a5e53'>
+        <parameter type-id='141b6428'/>
+        <parameter type-id='3f1a6b60'/>
+        <return type-id='141b6428'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a43a9295'>
+        <parameter type-id='18881289'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='fb7d87a1'/>
+        <return type-id='b1a0a119'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d4693377'>
+        <parameter type-id='7837cd88'/>
+        <return type-id='4a935625'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cbab5390'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='4a935625'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34e265cf'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='4a935625'/>
+        <return type-id='4a935625'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8f5d4d00'>
+        <parameter type-id='4a935625'/>
+        <return type-id='4a935625'/>
+      </function-type>
+      <function-type size-in-bits='64' id='203c1d4d'>
+        <parameter type-id='a47d3467'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b1517543'>
+        <parameter type-id='60a257ef'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9e22fc50'>
+        <parameter type-id='b88dd945'/>
+        <parameter type-id='10a7f6b4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0afc6f78'>
+        <parameter type-id='b88dd945'/>
+        <parameter type-id='2665334e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='806a4586'>
+        <parameter type-id='b88dd945'/>
+        <parameter type-id='2665334e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1ee59844'>
+        <parameter type-id='b88dd945'/>
+        <parameter type-id='a42536cd'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='749ee287'>
+        <parameter type-id='cfff5953'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='969fc316'>
+        <parameter type-id='cfff5953'/>
+        <parameter type-id='03054cfa'/>
+        <parameter type-id='9b7c55ef'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2cfafd1c'>
+        <parameter type-id='cfff5953'/>
+        <parameter type-id='03054cfa'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='28d1931f'>
+        <parameter type-id='8cffa561'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bde8b845'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7d3cd834'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2a123bf1'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='861f302a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='630a7fa4'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='00631170'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='41d25fad'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='41b1c13c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='28cb132f'>
+        <parameter type-id='581abdef'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2d2d4460'>
+        <parameter type-id='1b0e1d00'/>
+        <parameter type-id='809cdefc'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0174792d'>
+        <parameter type-id='1b0e1d00'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='99803d40'>
+        <parameter type-id='631dc3c1'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='78c01427'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d99ae68d'>
+        <parameter type-id='11b101bb'/>
+        <parameter type-id='631dc3c1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='647d371e'>
+        <parameter type-id='42988600'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='374a88a9'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='63217e72'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='00c7b870'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9c1f445d'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='d9d65b21'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a301f696'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eea6b025'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dccf0381'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='4adb0e6a'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aa70b8e2'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='08496218'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8ab5a2af'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2ac80c1'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='2ae08426'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='923a53bf'>
+        <parameter type-id='6d30564f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d07af849'>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4ed460e4'>
+        <parameter type-id='33c599db'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='603a76bb'>
+        <parameter type-id='33c599db'/>
+        <parameter type-id='a42536cd'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='313c6196'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='17f2d2f2'>
+        <parameter type-id='8912440a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ed4be5c0'>
+        <parameter type-id='e84b031a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fc8b497c'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='294be38d'>
+        <parameter type-id='d504f73d'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9b94c22b'>
+        <parameter type-id='2bf16f5a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='87732674'>
+        <parameter type-id='2bf16f5a'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6ad7a215'>
+        <parameter type-id='2bf16f5a'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6d544aa1'>
+        <parameter type-id='0906f5b9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='59bb6212'>
+        <parameter type-id='3dad1a48'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a21db860'>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='8b175043'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4e83077d'>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='8b175043'/>
+        <parameter type-id='2665334e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='62855293'>
+        <parameter type-id='e7d2a5fd'/>
+        <parameter type-id='4a89adae'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='081f19f3'>
+        <parameter type-id='e7d2a5fd'/>
+        <parameter type-id='79808846'/>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b4bb7eac'>
+        <parameter type-id='2facc7e6'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2fa2db94'>
+        <parameter type-id='6ed6b432'/>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='d0163a5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b52da57b'>
+        <parameter type-id='f8dc9df0'/>
+        <parameter type-id='cfff5953'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0f83e831'>
+        <parameter type-id='8b175043'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='595c4720'>
+        <parameter type-id='f23e2572'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5dcc12a3'>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='abe3ca10'>
+        <parameter type-id='23d6768d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='287b404f'>
+        <parameter type-id='23d6768d'/>
+        <parameter type-id='7fa6eeb8'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ca8c1528'>
+        <parameter type-id='23d6768d'/>
+        <parameter type-id='2bf16f5a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9efbfb11'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08694484'>
+        <parameter type-id='23d6768d'/>
+        <return type-id='e84b031a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='37688d8e'>
+        <parameter type-id='65077a4a'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='3c330066'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b715cae5'>
+        <parameter type-id='a47d3467'/>
+        <return type-id='3dad1a48'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f111d4f3'>
+        <parameter type-id='e7d2a5fd'/>
+        <parameter type-id='3dad1a48'/>
+        <return type-id='3dad1a48'/>
+      </function-type>
+      <function-type size-in-bits='64' id='158e8b98'>
+        <parameter type-id='6ed6b432'/>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='d0163a5e'/>
+        <return type-id='f23e2572'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8561c55'>
+        <parameter type-id='e7d2a5fd'/>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='041bc907'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c2be64d2'>
+        <parameter type-id='a47d3467'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da68c5d7'>
+        <parameter type-id='a47d3467'/>
+        <parameter type-id='fb55efa1'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f611d028'>
+        <parameter type-id='7837cd88'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='19bf080d'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b911101f'>
+        <parameter type-id='e7d2a5fd'/>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5753d902'>
+        <parameter type-id='6ed6b432'/>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b39453c8'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eea6b025'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='cf29c9b3'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ea038279'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='2522883d'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eea6b025'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='cf29c9b3'/>
+      </function-type>
+      <function-type size-in-bits='64' id='59145b91'>
+        <parameter type-id='cfff5953'/>
+        <parameter type-id='03054cfa'/>
+        <return type-id='9b7c55ef'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7df55081'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='30247438'>
+        <parameter type-id='07d0a3e7'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='54c5fdf4'>
+        <parameter type-id='07d0a3e7'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='243799e7'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8804cbe4'>
+        <return type-id='91ce1af9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='90c1df7f'>
+        <parameter type-id='cfff5953'/>
+        <parameter type-id='03054cfa'/>
+        <return type-id='91ce1af9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1f1ec116'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='91ce1af9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b5975902'>
+        <parameter type-id='141b6428'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='f9409001'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6d22a61b'>
+        <parameter type-id='65077a4a'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ad4a13f9'>
+        <parameter type-id='33c599db'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='45660d72'>
+        <parameter type-id='6ed6b432'/>
+        <parameter type-id='f23e2572'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='38b33cba'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4851ce38'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='98617d6e'>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4e7ef9a5'>
+        <parameter type-id='a47d3467'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='607834f2'>
+        <parameter type-id='a47d3467'/>
+        <parameter type-id='e84b031a'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f1e6b9b'>
+        <parameter type-id='a47d3467'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5d58e1d2'>
+        <parameter type-id='b88dd945'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='07c30a78'>
+        <parameter type-id='cfff5953'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d71978c5'>
+        <parameter type-id='cfff5953'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='03d219e2'>
+        <parameter type-id='8cffa561'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='59bcd074'>
+        <parameter type-id='67aca04f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a66ce823'>
+        <parameter type-id='65077a4a'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6d41ed4e'>
+        <parameter type-id='11b101bb'/>
+        <parameter type-id='631dc3c1'/>
+        <parameter type-id='2168a3eb'/>
+        <parameter type-id='acd96ee1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fb2144e8'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='630e0832'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='2168a3eb'/>
+        <parameter type-id='acd96ee1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dd082beb'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2157493d'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eea6b025'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0a84ab07'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08cd0705'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='09c8f1a3'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eea6b025'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='766eac03'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='a7832498'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8741a34d'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e76f1d29'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b98b24d0'>
+        <parameter type-id='141b6428'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='56958353'>
+        <parameter type-id='141b6428'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='165b46a0'>
+        <parameter type-id='141b6428'/>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4c671f3a'>
+        <parameter type-id='141b6428'/>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ff15393c'>
+        <parameter type-id='07d0a3e7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c5392ac1'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='03d48e96'/>
+        <parameter type-id='f0acc909'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d8fd579a'>
+        <parameter type-id='4a935625'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3683b7e7'>
+        <parameter type-id='33c599db'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bc51cf2c'>
+        <parameter type-id='33c599db'/>
+        <parameter type-id='2665334e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b6c1136f'>
+        <parameter type-id='93762a0a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='54b1caeb'>
+        <parameter type-id='93762a0a'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8eeb5a69'>
+        <parameter type-id='7c6e0e0c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8e9eec3c'>
+        <parameter type-id='44bef697'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a79c760e'>
+        <parameter type-id='2bf16f5a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='078589a3'>
+        <parameter type-id='2bf16f5a'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e589860a'>
+        <parameter type-id='2bf16f5a'/>
+        <parameter type-id='df4b7819'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7a592779'>
+        <parameter type-id='2bf16f5a'/>
+        <parameter type-id='bd83ae50'/>
+        <parameter type-id='4616a179'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d725da49'>
+        <parameter type-id='b9419dc6'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2a275b06'>
+        <parameter type-id='0906f5b9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='88d4f840'>
+        <parameter type-id='0906f5b9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='90d2ca45'>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06c207bd'>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='f4e2facd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='820ec76f'>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1ee46c97'>
+        <parameter type-id='e7d2a5fd'/>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='6bb0a326'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2572f485'>
+        <parameter type-id='e7d2a5fd'/>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='3dad1a48'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='82e3e1cf'>
+        <parameter type-id='6ed6b432'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='47d2043e'>
+        <parameter type-id='6ed6b432'/>
+        <parameter type-id='f23e2572'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f67639d3'>
+        <parameter type-id='6ed6b432'/>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f83bf2cd'>
+        <parameter type-id='6ed6b432'/>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1c0f29cf'>
+        <parameter type-id='f23e2572'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24bb49a8'>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='5f8a1ac4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ca7f7878'>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='07c93537'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='3620a178'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c039af2e'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c00013f4'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='8df61054'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8c641b0'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='066ca455'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='e835b5d8'/>
+        <parameter type-id='3eb7c31c'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f9617b12'>
+        <parameter type-id='2bf16f5a'/>
+        <parameter type-id='63e171df'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6f7f4c91'>
+        <parameter type-id='3eb7c31c'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/sched/topology.c' language='LANG_C89'>
+      <function-decl name='cpufreq_cpu_get' mangled-name='cpufreq_cpu_get' filepath='include/linux/cpufreq.h' line='180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_cpu_get'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='343c3ae4'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/sched/wait.c' language='LANG_C89'>
+      <function-decl name='__init_waitqueue_head' mangled-name='__init_waitqueue_head' filepath='kernel/sched/wait.c' line='9' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__init_waitqueue_head'>
+        <parameter type-id='3f8b2ed3' name='wq_head' filepath='kernel/sched/wait.c' line='9' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/sched/wait.c' line='9' column='1'/>
+        <parameter type-id='a57283f9' name='key' filepath='kernel/sched/wait.c' line='9' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__wake_up' mangled-name='__wake_up' filepath='kernel/sched/wait.c' line='139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__wake_up'>
+        <parameter type-id='3f8b2ed3' name='wq_head' filepath='kernel/sched/wait.c' line='139' column='1'/>
+        <parameter type-id='f0981eeb' name='mode' filepath='kernel/sched/wait.c' line='139' column='1'/>
+        <parameter type-id='95e97e5e' name='nr_exclusive' filepath='kernel/sched/wait.c' line='140' column='1'/>
+        <parameter type-id='eaa32e2f' name='key' filepath='kernel/sched/wait.c' line='140' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='do_wait_intr' mangled-name='do_wait_intr' filepath='kernel/sched/wait.c' line='301' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='do_wait_intr'>
+        <parameter type-id='03d48e96' name='wq' filepath='kernel/sched/wait.c' line='301' column='1'/>
+        <parameter type-id='ba9aa326' name='wait' filepath='kernel/sched/wait.c' line='301' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='wait_woken' mangled-name='wait_woken' filepath='kernel/sched/wait.c' line='406' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wait_woken'>
+        <parameter type-id='db9d03e3' name='wq_entry' filepath='kernel/sched/wait.c' line='406' column='1'/>
+        <parameter type-id='f0981eeb' name='mode' filepath='kernel/sched/wait.c' line='406' column='1'/>
+        <parameter type-id='bd54fe1a' name='timeout' filepath='kernel/sched/wait.c' line='406' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='woken_wake_function' mangled-name='woken_wake_function' filepath='kernel/sched/wait.c' line='431' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='woken_wake_function'>
+        <parameter type-id='db9d03e3' name='wq_entry' filepath='kernel/sched/wait.c' line='431' column='1'/>
+        <parameter type-id='f0981eeb' name='mode' filepath='kernel/sched/wait.c' line='431' column='1'/>
+        <parameter type-id='95e97e5e' name='sync' filepath='kernel/sched/wait.c' line='431' column='1'/>
+        <parameter type-id='eaa32e2f' name='key' filepath='kernel/sched/wait.c' line='431' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/signal.c' language='LANG_C89'>
+      <pointer-type-def type-id='daf33c64' size-in-bits='64' id='9e80f729'/>
+      <function-decl name='flush_signals' mangled-name='flush_signals' filepath='kernel/signal.c' line='476' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='flush_signals'>
+        <parameter type-id='f23e2572' name='t' filepath='kernel/signal.c' line='476' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dequeue_signal' mangled-name='dequeue_signal' filepath='kernel/signal.c' line='629' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dequeue_signal'>
+        <parameter type-id='f23e2572' name='tsk' filepath='kernel/signal.c' line='629' column='1'/>
+        <parameter type-id='9e80f729' name='mask' filepath='kernel/signal.c' line='629' column='1'/>
+        <parameter type-id='3638c201' name='info' filepath='kernel/signal.c' line='629' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kill_pid' mangled-name='kill_pid' filepath='kernel/signal.c' line='1798' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kill_pid'>
+        <parameter type-id='b94e5398' name='pid' filepath='kernel/signal.c' line='1798' column='1'/>
+        <parameter type-id='95e97e5e' name='sig' filepath='kernel/signal.c' line='1798' column='1'/>
+        <parameter type-id='95e97e5e' name='priv' filepath='kernel/signal.c' line='1798' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='find_vpid' mangled-name='find_vpid' filepath='include/linux/pid.h' line='115' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='find_vpid'>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='b94e5398'/>
+      </function-decl>
+      <function-decl name='kernel_sigaction' mangled-name='kernel_sigaction' filepath='kernel/signal.c' line='3937' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_sigaction'>
+        <parameter type-id='95e97e5e' name='sig' filepath='kernel/signal.c' line='3937' column='1'/>
+        <parameter type-id='8cdd9566' name='action' filepath='kernel/signal.c' line='3937' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/smp.c' language='LANG_C89'>
+      <var-decl name='nr_cpu_ids' type-id='f0981eeb' mangled-name='nr_cpu_ids' visibility='default' filepath='kernel/smp.c' line='568' column='1' elf-symbol-id='nr_cpu_ids'/>
+      <function-decl name='smp_call_function' mangled-name='smp_call_function' filepath='kernel/smp.c' line='506' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='smp_call_function'>
+        <parameter type-id='89714567' name='func' filepath='kernel/smp.c' line='506' column='1'/>
+        <parameter type-id='eaa32e2f' name='info' filepath='kernel/smp.c' line='506' column='1'/>
+        <parameter type-id='95e97e5e' name='wait' filepath='kernel/smp.c' line='506' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/smpboot.c' language='LANG_C89'>
+      <function-decl name='schedule_timeout_uninterruptible' mangled-name='schedule_timeout_uninterruptible' filepath='include/linux/sched.h' line='224' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='schedule_timeout_uninterruptible'>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/softirq.c' language='LANG_C89'>
+      <function-decl name='__local_bh_enable_ip' mangled-name='__local_bh_enable_ip' filepath='kernel/softirq.c' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__local_bh_enable_ip'>
+        <parameter type-id='7359adad' name='ip' filepath='kernel/softirq.c' line='166' column='1'/>
+        <parameter type-id='f0981eeb' name='cnt' filepath='kernel/softirq.c' line='166' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__tasklet_schedule' mangled-name='__tasklet_schedule' filepath='kernel/softirq.c' line='487' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__tasklet_schedule'>
+        <parameter type-id='59f1923f' name='t' filepath='kernel/softirq.c' line='487' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__tasklet_hi_schedule' mangled-name='__tasklet_hi_schedule' filepath='kernel/softirq.c' line='494' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__tasklet_hi_schedule'>
+        <parameter type-id='59f1923f' name='t' filepath='kernel/softirq.c' line='494' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/stacktrace.c' language='LANG_C89'>
+      <function-decl name='stack_trace_print' mangled-name='stack_trace_print' filepath='kernel/stacktrace.c' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='stack_trace_print'>
+        <parameter type-id='f9b37274' name='entries' filepath='kernel/stacktrace.c' line='23' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_entries' filepath='kernel/stacktrace.c' line='23' column='1'/>
+        <parameter type-id='95e97e5e' name='spaces' filepath='kernel/stacktrace.c' line='24' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/sys.c' language='LANG_C89'>
+      <var-decl name='overflowuid' type-id='95e97e5e' mangled-name='overflowuid' visibility='default' filepath='kernel/sys.c' line='135' column='1' elf-symbol-id='overflowuid'/>
+      <var-decl name='overflowgid' type-id='95e97e5e' mangled-name='overflowgid' visibility='default' filepath='kernel/sys.c' line='136' column='1' elf-symbol-id='overflowgid'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/sysctl.c' language='LANG_C89'>
+      <function-decl name='skip_spaces' mangled-name='skip_spaces' filepath='include/linux/string.h' line='71' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skip_spaces'>
+        <parameter type-id='80f4b756'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/taskstats.c' language='LANG_C89'>
+      <class-decl name='genl_family' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/genetlink.h' line='46' column='1' id='278d8d7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/net/genetlink.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='hdrsize' type-id='f0981eeb' visibility='default' filepath='include/net/genetlink.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/net/genetlink.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='version' type-id='f0981eeb' visibility='default' filepath='include/net/genetlink.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='maxattr' type-id='f0981eeb' visibility='default' filepath='include/net/genetlink.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='netnsok' type-id='b50a4934' visibility='default' filepath='include/net/genetlink.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='parallel_ops' type-id='b50a4934' visibility='default' filepath='include/net/genetlink.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='policy' type-id='109cdb66' visibility='default' filepath='include/net/genetlink.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pre_doit' type-id='a45ad774' visibility='default' filepath='include/net/genetlink.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='post_doit' type-id='14ba77ef' visibility='default' filepath='include/net/genetlink.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='attrbuf' type-id='30864cdc' visibility='default' filepath='include/net/genetlink.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ops' type-id='8ba26d85' visibility='default' filepath='include/net/genetlink.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mcgrps' type-id='f4bc933f' visibility='default' filepath='include/net/genetlink.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='n_ops' type-id='f0981eeb' visibility='default' filepath='include/net/genetlink.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='n_mcgrps' type-id='f0981eeb' visibility='default' filepath='include/net/genetlink.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mcgrp_offset' type-id='f0981eeb' visibility='default' filepath='include/net/genetlink.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='module' type-id='2730d016' visibility='default' filepath='include/net/genetlink.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='genl_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/genetlink.h' line='132' column='1' id='83b59630'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='doit' type-id='8f8224f6' visibility='default' filepath='include/net/genetlink.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='start' type-id='eca40b6e' visibility='default' filepath='include/net/genetlink.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dumpit' type-id='32a663ca' visibility='default' filepath='include/net/genetlink.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='done' type-id='eca40b6e' visibility='default' filepath='include/net/genetlink.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cmd' type-id='f9b06939' visibility='default' filepath='include/net/genetlink.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='internal_flags' type-id='f9b06939' visibility='default' filepath='include/net/genetlink.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/genetlink.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='280'>
+          <var-decl name='validate' type-id='f9b06939' visibility='default' filepath='include/net/genetlink.h' line='142' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='genl_info' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/genetlink.h' line='84' column='1' id='fbcd72c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='snd_seq' type-id='19c2251e' visibility='default' filepath='include/net/genetlink.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='snd_portid' type-id='19c2251e' visibility='default' filepath='include/net/genetlink.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nlhdr' type-id='c2074578' visibility='default' filepath='include/net/genetlink.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='genlhdr' type-id='db93e57c' visibility='default' filepath='include/net/genetlink.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='userhdr' type-id='eaa32e2f' visibility='default' filepath='include/net/genetlink.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='attrs' type-id='30864cdc' visibility='default' filepath='include/net/genetlink.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='_net' type-id='c9df1e6c' visibility='default' filepath='include/net/genetlink.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='user_ptr' type-id='24ae0315' visibility='default' filepath='include/net/genetlink.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='extack' type-id='5799dc94' visibility='default' filepath='include/net/genetlink.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='genlmsghdr' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/genetlink.h' line='13' column='1' id='8fadaaa6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/genetlink.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='version' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/genetlink.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='reserved' type-id='d315442e' visibility='default' filepath='include/uapi/linux/genetlink.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='genl_multicast_group' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/genetlink.h' line='15' column='1' id='486f930e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/net/genetlink.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='278d8d7c' const='yes' id='c35ca4f3'/>
+      <pointer-type-def type-id='c35ca4f3' size-in-bits='64' id='63d7819b'/>
+      <qualified-type-def type-id='486f930e' const='yes' id='0aade30f'/>
+      <pointer-type-def type-id='0aade30f' size-in-bits='64' id='f4bc933f'/>
+      <qualified-type-def type-id='83b59630' const='yes' id='f67ba3ad'/>
+      <pointer-type-def type-id='f67ba3ad' size-in-bits='64' id='8ba26d85'/>
+      <pointer-type-def type-id='278d8d7c' size-in-bits='64' id='8f6b937a'/>
+      <pointer-type-def type-id='fbcd72c8' size-in-bits='64' id='31b542ce'/>
+      <pointer-type-def type-id='8fadaaa6' size-in-bits='64' id='db93e57c'/>
+      <pointer-type-def type-id='94bbdcaa' size-in-bits='64' id='a45ad774'/>
+      <pointer-type-def type-id='7b76bae4' size-in-bits='64' id='8f8224f6'/>
+      <pointer-type-def type-id='e1834a73' size-in-bits='64' id='14ba77ef'/>
+      <function-decl name='genlmsg_put' mangled-name='genlmsg_put' filepath='include/net/genetlink.h' line='150' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='genlmsg_put'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='63d7819b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='genl_register_family' mangled-name='genl_register_family' filepath='include/net/genetlink.h' line='145' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='genl_register_family'>
+        <parameter type-id='8f6b937a'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='94bbdcaa'>
+        <parameter type-id='8ba26d85'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='31b542ce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7b76bae4'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='31b542ce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e1834a73'>
+        <parameter type-id='8ba26d85'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='31b542ce'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/time/alarmtimer.c' language='LANG_C89'>
+      <class-decl name='alarm' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/alarmtimer.h' line='42' column='1' id='f6b32752'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='fe3acb42' visibility='default' filepath='include/linux/alarmtimer.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='timer' type-id='b6993efc' visibility='default' filepath='include/linux/alarmtimer.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='function' type-id='7432d5be' visibility='default' filepath='include/linux/alarmtimer.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='type' type-id='6b8d4b77' visibility='default' filepath='include/linux/alarmtimer.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='include/linux/alarmtimer.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/alarmtimer.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='alarmtimer_restart' filepath='include/linux/alarmtimer.h' line='23' column='1' id='c3082d06'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ALARMTIMER_NORESTART' value='0'/>
+        <enumerator name='ALARMTIMER_RESTART' value='1'/>
+      </enum-decl>
+      <enum-decl name='alarmtimer_type' filepath='include/linux/alarmtimer.h' line='11' column='1' id='6b8d4b77'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ALARM_REALTIME' value='0'/>
+        <enumerator name='ALARM_BOOTTIME' value='1'/>
+        <enumerator name='ALARM_NUMTYPE' value='2'/>
+        <enumerator name='ALARM_REALTIME_FREEZER' value='3'/>
+        <enumerator name='ALARM_BOOTTIME_FREEZER' value='4'/>
+      </enum-decl>
+      <class-decl name='class_interface' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='792' column='1' id='aba1d11b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='class' type-id='67aca04f' visibility='default' filepath='include/linux/device.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='add_dev' type-id='6da1022f' visibility='default' filepath='include/linux/device.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='remove_dev' type-id='0bd06100' visibility='default' filepath='include/linux/device.h' line='797' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f6b32752' size-in-bits='64' id='be65fdd0'/>
+      <pointer-type-def type-id='aba1d11b' size-in-bits='64' id='ec167ceb'/>
+      <qualified-type-def type-id='f6b32752' const='yes' id='dba44491'/>
+      <pointer-type-def type-id='dba44491' size-in-bits='64' id='7e983261'/>
+      <pointer-type-def type-id='63df6bcc' size-in-bits='64' id='7432d5be'/>
+      <pointer-type-def type-id='fa712c1b' size-in-bits='64' id='6da1022f'/>
+      <pointer-type-def type-id='391f1e06' size-in-bits='64' id='0bd06100'/>
+      <function-decl name='alarmtimer_get_rtcdev' mangled-name='alarmtimer_get_rtcdev' filepath='kernel/time/alarmtimer.c' line='72' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alarmtimer_get_rtcdev'>
+        <return type-id='5992ae83'/>
+      </function-decl>
+      <function-decl name='alarm_expires_remaining' mangled-name='alarm_expires_remaining' filepath='kernel/time/alarmtimer.c' line='234' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alarm_expires_remaining'>
+        <parameter type-id='7e983261' name='alarm' filepath='kernel/time/alarmtimer.c' line='234' column='1'/>
+        <return type-id='fbc017ef'/>
+      </function-decl>
+      <function-decl name='alarm_init' mangled-name='alarm_init' filepath='kernel/time/alarmtimer.c' line='351' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alarm_init'>
+        <parameter type-id='be65fdd0' name='alarm' filepath='kernel/time/alarmtimer.c' line='351' column='1'/>
+        <parameter type-id='6b8d4b77' name='type' filepath='kernel/time/alarmtimer.c' line='351' column='1'/>
+        <parameter type-id='7432d5be' name='function' filepath='kernel/time/alarmtimer.c' line='352' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='alarm_start' mangled-name='alarm_start' filepath='kernel/time/alarmtimer.c' line='365' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alarm_start'>
+        <parameter type-id='be65fdd0' name='alarm' filepath='kernel/time/alarmtimer.c' line='365' column='1'/>
+        <parameter type-id='fbc017ef' name='start' filepath='kernel/time/alarmtimer.c' line='365' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='alarm_start_relative' mangled-name='alarm_start_relative' filepath='kernel/time/alarmtimer.c' line='385' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alarm_start_relative'>
+        <parameter type-id='be65fdd0' name='alarm' filepath='kernel/time/alarmtimer.c' line='385' column='1'/>
+        <parameter type-id='fbc017ef' name='start' filepath='kernel/time/alarmtimer.c' line='385' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='alarm_cancel' mangled-name='alarm_cancel' filepath='kernel/time/alarmtimer.c' line='438' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alarm_cancel'>
+        <parameter type-id='be65fdd0' name='alarm' filepath='kernel/time/alarmtimer.c' line='438' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='class_interface_unregister' mangled-name='class_interface_unregister' filepath='include/linux/device.h' line='801' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='class_interface_unregister'>
+        <parameter type-id='ec167ceb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='wakeup_source_unregister' mangled-name='wakeup_source_unregister' filepath='include/linux/pm_wakeup.h' line='94' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wakeup_source_unregister'>
+        <parameter type-id='1ea237a6'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rtc_read_time' mangled-name='rtc_read_time' filepath='include/linux/rtc.h' line='176' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_read_time'>
+        <parameter type-id='5992ae83'/>
+        <parameter type-id='2b8e7a42'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='63df6bcc'>
+        <parameter type-id='be65fdd0'/>
+        <parameter type-id='fbc017ef'/>
+        <return type-id='c3082d06'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/time/clocksource.c' language='LANG_C89'>
+      <function-decl name='__clocksource_register_scale' mangled-name='__clocksource_register_scale' filepath='kernel/time/clocksource.c' line='925' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__clocksource_register_scale'>
+        <parameter type-id='4dfe71de' name='cs' filepath='kernel/time/clocksource.c' line='925' column='1'/>
+        <parameter type-id='19c2251e' name='scale' filepath='kernel/time/clocksource.c' line='925' column='1'/>
+        <parameter type-id='19c2251e' name='freq' filepath='kernel/time/clocksource.c' line='925' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='90d08a78' size-in-bits='64' id='4dfe71de'/>
+      <class-decl name='clocksource' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/clocksource.h' line='82' column='1' id='90d08a78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read' type-id='34fd0229' visibility='default' filepath='include/linux/clocksource.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask' type-id='91ce1af9' visibility='default' filepath='include/linux/clocksource.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mult' type-id='19c2251e' visibility='default' filepath='include/linux/clocksource.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='shift' type-id='19c2251e' visibility='default' filepath='include/linux/clocksource.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_idle_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/clocksource.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='maxadj' type-id='19c2251e' visibility='default' filepath='include/linux/clocksource.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='archdata' type-id='e596acfa' visibility='default' filepath='include/linux/clocksource.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_cycles' type-id='91ce1af9' visibility='default' filepath='include/linux/clocksource.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/clocksource.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/clocksource.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rating' type-id='95e97e5e' visibility='default' filepath='include/linux/clocksource.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='enable' type-id='b4ade13a' visibility='default' filepath='include/linux/clocksource.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='disable' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/clocksource.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='suspend' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='resume' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mark_unstable' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='tick_stable' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/clocksource.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='27fe31c0' size-in-bits='64' id='b4ade13a'/>
+      <class-decl name='arch_clocksource_data' size-in-bits='32' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/clocksource.h' line='7' column='1' id='e596acfa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clock_mode' type-id='5c3b1f01' visibility='default' filepath='arch/arm64/include/asm/clocksource.h' line='9' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4993d1b5' size-in-bits='64' id='34fd0229'/>
+      <pointer-type-def type-id='a628efab' size-in-bits='64' id='1f93431f'/>
+      <enum-decl name='vdso_clock_mode' filepath='include/vdso/clocksource.h' line='11' column='1' id='5c3b1f01'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='VDSO_CLOCKMODE_NONE' value='0'/>
+        <enumerator name='VDSO_CLOCKMODE_ARCHTIMER' value='1'/>
+        <enumerator name='VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT' value='2'/>
+        <enumerator name='VDSO_CLOCKMODE_MAX' value='3'/>
+        <enumerator name='VDSO_CLOCKMODE_TIMENS' value='2147483647'/>
+      </enum-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/time/hrtimer.c' language='LANG_C89'>
+      <qualified-type-def type-id='fbc017ef' const='yes' id='ddb8523f'/>
+      <function-decl name='ktime_add_safe' mangled-name='ktime_add_safe' filepath='kernel/time/hrtimer.c' line='323' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_add_safe'>
+        <parameter type-id='ddb8523f' name='lhs' filepath='kernel/time/hrtimer.c' line='323' column='1'/>
+        <parameter type-id='ddb8523f' name='rhs' filepath='kernel/time/hrtimer.c' line='323' column='1'/>
+        <return type-id='fbc017ef'/>
+      </function-decl>
+      <function-decl name='__hrtimer_get_remaining' mangled-name='__hrtimer_get_remaining' filepath='kernel/time/hrtimer.c' line='1292' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__hrtimer_get_remaining'>
+        <parameter type-id='1ce53783' name='timer' filepath='kernel/time/hrtimer.c' line='1292' column='1'/>
+        <parameter type-id='b50a4934' name='adjust' filepath='kernel/time/hrtimer.c' line='1292' column='1'/>
+        <return type-id='fbc017ef'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/time/posix-clock.c' language='LANG_C89'>
+      <function-decl name='fget' mangled-name='fget' filepath='include/linux/file.h' line='47' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fget'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='77e79a4b'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/time/time.c' language='LANG_C89'>
+      <class-decl name='timezone' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/time.h' line='21' column='1' id='6751193a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tz_minuteswest' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/time.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tz_dsttime' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/time.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timespec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/time.h' line='10' column='1' id='a9c79a1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='f7d92306' visibility='default' filepath='include/uapi/linux/time.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tv_nsec' type-id='bd54fe1a' visibility='default' filepath='include/uapi/linux/time.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='9b7c55ef' const='yes' id='d238557f'/>
+      <var-decl name='sys_tz' type-id='6751193a' mangled-name='sys_tz' visibility='default' filepath='kernel/time/time.c' line='50' column='1' elf-symbol-id='sys_tz'/>
+      <function-decl name='mktime64' mangled-name='mktime64' filepath='kernel/time/time.c' line='433' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mktime64'>
+        <parameter type-id='20f5f452' name='year0' filepath='kernel/time/time.c' line='433' column='1'/>
+        <parameter type-id='20f5f452' name='mon0' filepath='kernel/time/time.c' line='433' column='1'/>
+        <parameter type-id='20f5f452' name='day' filepath='kernel/time/time.c' line='434' column='1'/>
+        <parameter type-id='20f5f452' name='hour' filepath='kernel/time/time.c' line='434' column='1'/>
+        <parameter type-id='20f5f452' name='min' filepath='kernel/time/time.c' line='435' column='1'/>
+        <parameter type-id='20f5f452' name='sec' filepath='kernel/time/time.c' line='435' column='1'/>
+        <return type-id='1afd27ac'/>
+      </function-decl>
+      <function-decl name='ns_to_timespec' mangled-name='ns_to_timespec' filepath='kernel/time/time.c' line='460' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ns_to_timespec'>
+        <parameter type-id='d238557f' name='nsec' filepath='kernel/time/time.c' line='460' column='1'/>
+        <return type-id='a9c79a1f'/>
+      </function-decl>
+      <function-decl name='__msecs_to_jiffies' mangled-name='__msecs_to_jiffies' filepath='kernel/time/time.c' line='594' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__msecs_to_jiffies'>
+        <parameter type-id='20f5f452' name='m' filepath='kernel/time/time.c' line='594' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='__usecs_to_jiffies' mangled-name='__usecs_to_jiffies' filepath='kernel/time/time.c' line='605' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__usecs_to_jiffies'>
+        <parameter type-id='20f5f452' name='u' filepath='kernel/time/time.c' line='605' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='jiffies_64_to_clock_t' mangled-name='jiffies_64_to_clock_t' filepath='kernel/time/time.c' line='742' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='jiffies_64_to_clock_t'>
+        <parameter type-id='91ce1af9' name='x' filepath='kernel/time/time.c' line='742' column='1'/>
+        <return type-id='91ce1af9'/>
+      </function-decl>
+      <function-decl name='nsecs_to_jiffies' mangled-name='nsecs_to_jiffies' filepath='kernel/time/time.c' line='845' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nsecs_to_jiffies'>
+        <parameter type-id='91ce1af9' name='n' filepath='kernel/time/time.c' line='845' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='ktime_get_real_ts64' mangled-name='ktime_get_real_ts64' filepath='include/linux/timekeeping.h' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get_real_ts64'>
+        <parameter type-id='4151733d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/time/timeconv.c' language='LANG_C89'>
+      <class-decl name='tm' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/time.h' line='49' column='1' id='dddf6ca2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tm_sec' type-id='95e97e5e' visibility='default' filepath='include/linux/time.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tm_min' type-id='95e97e5e' visibility='default' filepath='include/linux/time.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tm_hour' type-id='95e97e5e' visibility='default' filepath='include/linux/time.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tm_mday' type-id='95e97e5e' visibility='default' filepath='include/linux/time.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tm_mon' type-id='95e97e5e' visibility='default' filepath='include/linux/time.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tm_year' type-id='bd54fe1a' visibility='default' filepath='include/linux/time.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tm_wday' type-id='95e97e5e' visibility='default' filepath='include/linux/time.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tm_yday' type-id='95e97e5e' visibility='default' filepath='include/linux/time.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='dddf6ca2' size-in-bits='64' id='d915a820'/>
+      <function-decl name='time64_to_tm' mangled-name='time64_to_tm' filepath='kernel/time/timeconv.c' line='78' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='time64_to_tm'>
+        <parameter type-id='1afd27ac' name='totalsecs' filepath='kernel/time/timeconv.c' line='78' column='1'/>
+        <parameter type-id='95e97e5e' name='offset' filepath='kernel/time/timeconv.c' line='78' column='1'/>
+        <parameter type-id='d915a820' name='result' filepath='kernel/time/timeconv.c' line='78' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/time/timecounter.c' language='LANG_C89'>
+      <class-decl name='timecounter' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/timecounter.h' line='55' column='1' id='5a81cef0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cc' type-id='51a502f8' visibility='default' filepath='include/linux/timecounter.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cycle_last' type-id='91ce1af9' visibility='default' filepath='include/linux/timecounter.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nsec' type-id='91ce1af9' visibility='default' filepath='include/linux/timecounter.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mask' type-id='91ce1af9' visibility='default' filepath='include/linux/timecounter.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='frac' type-id='91ce1af9' visibility='default' filepath='include/linux/timecounter.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cyclecounter' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/timecounter.h' line='30' column='1' id='1d7ba247'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read' type-id='57309e07' visibility='default' filepath='include/linux/timecounter.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask' type-id='91ce1af9' visibility='default' filepath='include/linux/timecounter.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mult' type-id='19c2251e' visibility='default' filepath='include/linux/timecounter.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='shift' type-id='19c2251e' visibility='default' filepath='include/linux/timecounter.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='1d7ba247' const='yes' id='6ad2ac02'/>
+      <pointer-type-def type-id='6ad2ac02' size-in-bits='64' id='51a502f8'/>
+      <pointer-type-def type-id='5a81cef0' size-in-bits='64' id='b548a676'/>
+      <pointer-type-def type-id='6fca7363' size-in-bits='64' id='57309e07'/>
+      <function-decl name='timecounter_init' mangled-name='timecounter_init' filepath='kernel/time/timecounter.c' line='8' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='timecounter_init'>
+        <parameter type-id='b548a676' name='tc' filepath='kernel/time/timecounter.c' line='8' column='1'/>
+        <parameter type-id='51a502f8' name='cc' filepath='kernel/time/timecounter.c' line='9' column='1'/>
+        <parameter type-id='91ce1af9' name='start_tstamp' filepath='kernel/time/timecounter.c' line='10' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='timecounter_read' mangled-name='timecounter_read' filepath='kernel/time/timecounter.c' line='52' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='timecounter_read'>
+        <parameter type-id='b548a676' name='tc' filepath='kernel/time/timecounter.c' line='52' column='1'/>
+        <return type-id='91ce1af9'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='6fca7363'>
+        <parameter type-id='51a502f8'/>
+        <return type-id='91ce1af9'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/time/timekeeping.c' language='LANG_C89'>
+      <class-decl name='system_counterval_t' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/timekeeping.h' line='262' column='1' id='2a0f1e3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cycles' type-id='91ce1af9' visibility='default' filepath='include/linux/timekeeping.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cs' type-id='4dfe71de' visibility='default' filepath='include/linux/timekeeping.h' line='264' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clocksource' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/clocksource.h' line='82' column='1' id='90d08a78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read' type-id='34fd0229' visibility='default' filepath='include/linux/clocksource.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask' type-id='91ce1af9' visibility='default' filepath='include/linux/clocksource.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mult' type-id='19c2251e' visibility='default' filepath='include/linux/clocksource.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='shift' type-id='19c2251e' visibility='default' filepath='include/linux/clocksource.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_idle_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/clocksource.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='maxadj' type-id='19c2251e' visibility='default' filepath='include/linux/clocksource.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='archdata' type-id='e596acfa' visibility='default' filepath='include/linux/clocksource.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_cycles' type-id='91ce1af9' visibility='default' filepath='include/linux/clocksource.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/clocksource.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/clocksource.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rating' type-id='95e97e5e' visibility='default' filepath='include/linux/clocksource.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='enable' type-id='b4ade13a' visibility='default' filepath='include/linux/clocksource.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='disable' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/clocksource.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='suspend' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='resume' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mark_unstable' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='tick_stable' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/clocksource.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='arch_clocksource_data' size-in-bits='32' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/clocksource.h' line='7' column='1' id='e596acfa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clock_mode' type-id='5c3b1f01' visibility='default' filepath='arch/arm64/include/asm/clocksource.h' line='9' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='vdso_clock_mode' filepath='include/vdso/clocksource.h' line='11' column='1' id='5c3b1f01'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='VDSO_CLOCKMODE_NONE' value='0'/>
+        <enumerator name='VDSO_CLOCKMODE_ARCHTIMER' value='1'/>
+        <enumerator name='VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT' value='2'/>
+        <enumerator name='VDSO_CLOCKMODE_MAX' value='3'/>
+        <enumerator name='VDSO_CLOCKMODE_TIMENS' value='2147483647'/>
+      </enum-decl>
+      <class-decl name='system_time_snapshot' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/timekeeping.h' line='234' column='1' id='6d06c6cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cycles' type-id='91ce1af9' visibility='default' filepath='include/linux/timekeeping.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='real' type-id='fbc017ef' visibility='default' filepath='include/linux/timekeeping.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='raw' type-id='fbc017ef' visibility='default' filepath='include/linux/timekeeping.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='clock_was_set_seq' type-id='f0981eeb' visibility='default' filepath='include/linux/timekeeping.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='cs_was_changed_seq' type-id='f9b06939' visibility='default' filepath='include/linux/timekeeping.h' line='239' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='system_device_crosststamp' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/timekeeping.h' line='249' column='1' id='61fea883'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='device' type-id='fbc017ef' visibility='default' filepath='include/linux/timekeeping.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sys_realtime' type-id='fbc017ef' visibility='default' filepath='include/linux/timekeeping.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sys_monoraw' type-id='fbc017ef' visibility='default' filepath='include/linux/timekeeping.h' line='252' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='90d08a78' size-in-bits='64' id='4dfe71de'/>
+      <pointer-type-def type-id='27fe31c0' size-in-bits='64' id='b4ade13a'/>
+      <pointer-type-def type-id='c40caf76' size-in-bits='64' id='d5d36d38'/>
+      <pointer-type-def type-id='fbc017ef' size-in-bits='64' id='44372936'/>
+      <pointer-type-def type-id='2a0f1e3d' size-in-bits='64' id='2a14aacd'/>
+      <pointer-type-def type-id='61fea883' size-in-bits='64' id='587b4de3'/>
+      <pointer-type-def type-id='6d06c6cd' size-in-bits='64' id='9e33b18d'/>
+      <pointer-type-def type-id='4993d1b5' size-in-bits='64' id='34fd0229'/>
+      <pointer-type-def type-id='a628efab' size-in-bits='64' id='1f93431f'/>
+      <function-decl name='ktime_get_boot_fast_ns' mangled-name='ktime_get_boot_fast_ns' filepath='kernel/time/timekeeping.c' line='505' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get_boot_fast_ns'>
+        <return type-id='91ce1af9'/>
+      </function-decl>
+      <function-decl name='ktime_get_raw' mangled-name='ktime_get_raw' filepath='kernel/time/timekeeping.c' line='854' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get_raw'>
+        <return type-id='fbc017ef'/>
+      </function-decl>
+      <function-decl name='get_device_system_crosststamp' mangled-name='get_device_system_crosststamp' filepath='kernel/time/timekeeping.c' line='1116' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_device_system_crosststamp'>
+        <parameter type-id='d5d36d38' name='get_time_fn' filepath='kernel/time/timekeeping.c' line='1116' column='1'/>
+        <parameter type-id='eaa32e2f' name='ctx' filepath='kernel/time/timekeeping.c' line='1120' column='1'/>
+        <parameter type-id='9e33b18d' name='history_begin' filepath='kernel/time/timekeeping.c' line='1121' column='1'/>
+        <parameter type-id='587b4de3' name='xtstamp' filepath='kernel/time/timekeeping.c' line='1122' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ktime_get_raw_ts64' mangled-name='ktime_get_raw_ts64' filepath='kernel/time/timekeeping.c' line='1418' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get_raw_ts64'>
+        <parameter type-id='4151733d' name='ts' filepath='kernel/time/timekeeping.c' line='1418' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='27fe31c0'>
+        <parameter type-id='4dfe71de'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c40caf76'>
+        <parameter type-id='44372936'/>
+        <parameter type-id='2a14aacd'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4993d1b5'>
+        <parameter type-id='4dfe71de'/>
+        <return type-id='91ce1af9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a628efab'>
+        <parameter type-id='4dfe71de'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/time/timer.c' language='LANG_C89'>
+      <var-decl name='jiffies_64' type-id='91ce1af9' mangled-name='jiffies_64' visibility='default' filepath='kernel/time/timer.c' line='59' column='1' elf-symbol-id='jiffies_64'/>
+      <function-decl name='round_jiffies_relative' mangled-name='round_jiffies_relative' filepath='kernel/time/timer.c' line='405' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='round_jiffies_relative'>
+        <parameter type-id='7359adad' name='j' filepath='kernel/time/timer.c' line='405' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='round_jiffies_up' mangled-name='round_jiffies_up' filepath='kernel/time/timer.c' line='455' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='round_jiffies_up'>
+        <parameter type-id='7359adad' name='j' filepath='kernel/time/timer.c' line='455' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='msleep_interruptible' mangled-name='msleep_interruptible' filepath='kernel/time/timer.c' line='2069' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='msleep_interruptible'>
+        <parameter type-id='f0981eeb' name='msecs' filepath='kernel/time/timer.c' line='2069' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/time/timer_list.c' language='LANG_C89'>
+      <function-decl name='seq_vprintf' mangled-name='seq_vprintf' filepath='include/linux/seq_file.h' line='116' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_vprintf'>
+        <parameter type-id='f8dc9df0'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='5f919c1f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/trace/bpf_trace.c' language='LANG_C89'>
+      <function-decl name='bpf_trace_run6' mangled-name='bpf_trace_run6' filepath='kernel/trace/bpf_trace.c' line='1380' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run6'>
+        <parameter type-id='bdcee7af' name='prog' filepath='kernel/trace/bpf_trace.c' line='1380' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1380' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1380' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1380' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1380' column='1'/>
+        <parameter type-id='91ce1af9' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1380' column='1'/>
+        <parameter type-id='91ce1af9' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1380' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run7' mangled-name='bpf_trace_run7' filepath='kernel/trace/bpf_trace.c' line='1381' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run7'>
+        <parameter type-id='bdcee7af' name='prog' filepath='kernel/trace/bpf_trace.c' line='1381' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1381' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1381' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1381' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1381' column='1'/>
+        <parameter type-id='91ce1af9' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1381' column='1'/>
+        <parameter type-id='91ce1af9' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1381' column='1'/>
+        <parameter type-id='91ce1af9' name='arg6' filepath='kernel/trace/bpf_trace.c' line='1381' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run8' mangled-name='bpf_trace_run8' filepath='kernel/trace/bpf_trace.c' line='1382' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run8'>
+        <parameter type-id='bdcee7af' name='prog' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <parameter type-id='91ce1af9' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <parameter type-id='91ce1af9' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <parameter type-id='91ce1af9' name='arg6' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <parameter type-id='91ce1af9' name='arg7' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run9' mangled-name='bpf_trace_run9' filepath='kernel/trace/bpf_trace.c' line='1383' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run9'>
+        <parameter type-id='bdcee7af' name='prog' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <parameter type-id='91ce1af9' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <parameter type-id='91ce1af9' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <parameter type-id='91ce1af9' name='arg6' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <parameter type-id='91ce1af9' name='arg7' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <parameter type-id='91ce1af9' name='arg8' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run10' mangled-name='bpf_trace_run10' filepath='kernel/trace/bpf_trace.c' line='1384' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run10'>
+        <parameter type-id='bdcee7af' name='prog' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg6' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg7' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg8' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg9' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run11' mangled-name='bpf_trace_run11' filepath='kernel/trace/bpf_trace.c' line='1385' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run11'>
+        <parameter type-id='bdcee7af' name='prog' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg6' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg7' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg8' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg9' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg10' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run12' mangled-name='bpf_trace_run12' filepath='kernel/trace/bpf_trace.c' line='1386' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run12'>
+        <parameter type-id='bdcee7af' name='prog' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg6' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg7' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg8' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg9' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg10' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg11' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/trace/ring_buffer.c' language='LANG_C89'>
+      <function-decl name='trace_seq_putc' mangled-name='trace_seq_putc' filepath='include/linux/trace_seq.h' line='86' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_seq_putc'>
+        <parameter type-id='fc932690'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/trace/trace.c' language='LANG_C89'>
+      <function-decl name='__trace_puts' mangled-name='__trace_puts' filepath='kernel/trace/trace.c' line='834' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__trace_puts'>
+        <parameter type-id='7359adad' name='ip' filepath='kernel/trace/trace.c' line='834' column='1'/>
+        <parameter type-id='80f4b756' name='str' filepath='kernel/trace/trace.c' line='834' column='1'/>
+        <parameter type-id='95e97e5e' name='size' filepath='kernel/trace/trace.c' line='834' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='seq_lseek' mangled-name='seq_lseek' filepath='include/linux/seq_file.h' line='111' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_lseek'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='1eb56b1e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='1eb56b1e'/>
+      </function-decl>
+      <function-decl name='kstrtoul_from_user' mangled-name='kstrtoul_from_user' filepath='include/linux/kernel.h' line='434' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtoul_from_user'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='seq_release' mangled-name='seq_release' filepath='include/linux/seq_file.h' line='112' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_release'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='seq_release_private' mangled-name='seq_release_private' filepath='include/linux/seq_file.h' line='147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_release_private'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/trace/trace_events.c' language='LANG_C89'>
+      <function-decl name='trace_event_raw_init' mangled-name='trace_event_raw_init' filepath='kernel/trace/trace_events.c' line='218' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_event_raw_init'>
+        <parameter type-id='23d6768d' name='call' filepath='kernel/trace/trace_events.c' line='218' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='trace_event_reg' mangled-name='trace_event_reg' filepath='kernel/trace/trace_events.c' line='280' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_event_reg'>
+        <parameter type-id='23d6768d' name='call' filepath='kernel/trace/trace_events.c' line='280' column='1'/>
+        <parameter type-id='7fa6eeb8' name='type' filepath='kernel/trace/trace_events.c' line='281' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='kernel/trace/trace_events.c' line='281' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='trace_set_clr_event' mangled-name='trace_set_clr_event' filepath='kernel/trace/trace_events.c' line='844' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_set_clr_event'>
+        <parameter type-id='80f4b756' name='system' filepath='kernel/trace/trace_events.c' line='844' column='1'/>
+        <parameter type-id='80f4b756' name='event' filepath='kernel/trace/trace_events.c' line='844' column='1'/>
+        <parameter type-id='95e97e5e' name='set' filepath='kernel/trace/trace_events.c' line='844' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kfree_const' mangled-name='kfree_const' filepath='include/linux/string.h' line='180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kfree_const'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kstrdup_const' mangled-name='kstrdup_const' filepath='include/linux/string.h' line='183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrdup_const'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/trace/trace_events_filter.c' language='LANG_C89'>
+      <function-decl name='kmemdup_nul' mangled-name='kmemdup_nul' filepath='include/linux/string.h' line='186' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmemdup_nul'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/trace/trace_output.c' language='LANG_C89'>
+      <class-decl name='prog_entry' is-struct='yes' visibility='default' is-declaration-only='yes' id='da952956'/>
+      <class-decl name='trace_array_cpu' size-in-bits='1024' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='149' column='1' id='adff6731'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='disabled' type-id='49178f86' visibility='default' filepath='kernel/trace/trace.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='buffer_page' type-id='eaa32e2f' visibility='default' filepath='kernel/trace/trace.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entries' type-id='7359adad' visibility='default' filepath='kernel/trace/trace.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='saved_latency' type-id='7359adad' visibility='default' filepath='kernel/trace/trace.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='critical_start' type-id='7359adad' visibility='default' filepath='kernel/trace/trace.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='critical_end' type-id='7359adad' visibility='default' filepath='kernel/trace/trace.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='critical_sequence' type-id='7359adad' visibility='default' filepath='kernel/trace/trace.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nice' type-id='7359adad' visibility='default' filepath='kernel/trace/trace.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='policy' type-id='7359adad' visibility='default' filepath='kernel/trace/trace.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rt_priority' type-id='7359adad' visibility='default' filepath='kernel/trace/trace.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='skipped_entries' type-id='7359adad' visibility='default' filepath='kernel/trace/trace.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='preempt_timestamp' type-id='91ce1af9' visibility='default' filepath='kernel/trace/trace.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='pid' type-id='587f89d2' visibility='default' filepath='kernel/trace/trace.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='kernel/trace/trace.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='comm' type-id='ac1fa8c0' visibility='default' filepath='kernel/trace/trace.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ignore_pid' type-id='b50a4934' visibility='default' filepath='kernel/trace/trace.h' line='167' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_pid_list' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='191' column='1' id='b17e4f4d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pid_max' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pids' type-id='1d2c2b85' visibility='default' filepath='kernel/trace/trace.h' line='193' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tracer_flags' size-in-bits='192' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='430' column='1' id='e32a3610'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='19c2251e' visibility='default' filepath='kernel/trace/trace.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='opts' type-id='a0260edc' visibility='default' filepath='kernel/trace/trace.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='trace' type-id='0a18715a' visibility='default' filepath='kernel/trace/trace.h' line='433' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tracer_opt' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='421' column='1' id='f20168e6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='kernel/trace/trace.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bit' type-id='19c2251e' visibility='default' filepath='kernel/trace/trace.h' line='423' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_options' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='186' column='1' id='882c3f1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tracer' type-id='0a18715a' visibility='default' filepath='kernel/trace/trace.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='topts' type-id='2473b64b' visibility='default' filepath='kernel/trace/trace.h' line='188' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_option_dentry' size-in-bits='256' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='440' column='1' id='56d268db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='opt' type-id='a0260edc' visibility='default' filepath='kernel/trace/trace.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='aef13606' visibility='default' filepath='kernel/trace/trace.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tr' type-id='898c1076' visibility='default' filepath='kernel/trace/trace.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='entry' type-id='27675065' visibility='default' filepath='kernel/trace/trace.h' line='444' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='event_subsystem' size-in-bits='320' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='1374' column='1' id='ba400603'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='1375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='kernel/trace/trace.h' line='1376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='filter' type-id='26461068' visibility='default' filepath='kernel/trace/trace.h' line='1377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ref_count' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='1378' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='94dd3300' size-in-bits='64' id='cfbdf512'/>
+      <pointer-type-def type-id='ba400603' size-in-bits='64' id='841939f3'/>
+      <pointer-type-def type-id='8d6f7724' size-in-bits='64' id='30b9fb16'/>
+      <pointer-type-def type-id='e5117942' size-in-bits='64' id='e3e70e04'/>
+      <pointer-type-def type-id='ca83d937' size-in-bits='64' id='d01e1ab3'/>
+      <pointer-type-def type-id='da952956' size-in-bits='64' id='efd0fdec'/>
+      <pointer-type-def type-id='adff6731' size-in-bits='64' id='17642359'/>
+      <pointer-type-def type-id='56d268db' size-in-bits='64' id='2473b64b'/>
+      <pointer-type-def type-id='882c3f1f' size-in-bits='64' id='e9037327'/>
+      <pointer-type-def type-id='b17e4f4d' size-in-bits='64' id='1f6324ad'/>
+      <pointer-type-def type-id='e32a3610' size-in-bits='64' id='aef13606'/>
+      <pointer-type-def type-id='f20168e6' size-in-bits='64' id='a0260edc'/>
+      <pointer-type-def type-id='e5fd9491' size-in-bits='64' id='43a53075'/>
+      <pointer-type-def type-id='02b70d8e' size-in-bits='64' id='0d8953a0'/>
+      <pointer-type-def type-id='3dbb7e50' size-in-bits='64' id='0f294852'/>
+      <pointer-type-def type-id='c64b743f' size-in-bits='64' id='578c706b'/>
+      <pointer-type-def type-id='b44140ca' size-in-bits='64' id='29bf40b4'/>
+      <function-decl name='trace_print_hex_seq' mangled-name='trace_print_hex_seq' filepath='kernel/trace/trace_output.c' line='217' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_print_hex_seq'>
+        <parameter type-id='fc932690' name='p' filepath='kernel/trace/trace_output.c' line='217' column='1'/>
+        <parameter type-id='354f7eb9' name='buf' filepath='kernel/trace/trace_output.c' line='217' column='1'/>
+        <parameter type-id='95e97e5e' name='buf_len' filepath='kernel/trace/trace_output.c' line='217' column='1'/>
+        <parameter type-id='b50a4934' name='concatenate' filepath='kernel/trace/trace_output.c' line='218' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='trace_output_call' mangled-name='trace_output_call' filepath='kernel/trace/trace_output.c' line='311' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_output_call'>
+        <parameter type-id='18881289' name='iter' filepath='kernel/trace/trace_output.c' line='311' column='1'/>
+        <parameter type-id='26a90f95' name='name' filepath='kernel/trace/trace_output.c' line='311' column='1'/>
+        <parameter type-id='26a90f95' name='fmt' filepath='kernel/trace/trace_output.c' line='311' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='94dd3300'>
+        <parameter type-id='18881289'/>
+        <return type-id='b1a0a119'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8d6f7724'>
+        <parameter type-id='898c1076'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e5117942'>
+        <parameter type-id='898c1076'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ca83d937'>
+        <parameter type-id='898c1076'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e5fd9491'>
+        <parameter type-id='18881289'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='02b70d8e'>
+        <parameter type-id='18881289'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='b53e8dbb'/>
+        <parameter type-id='15d29711'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3dbb7e50'>
+        <parameter type-id='f8dc9df0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c64b743f'>
+        <parameter type-id='898c1076'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b44140ca'>
+        <parameter type-id='18881289'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/trace/trace_printk.c' language='LANG_C89'>
+      <function-decl name='__trace_bprintk' mangled-name='__trace_bprintk' filepath='kernel/trace/trace_printk.c' line='200' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__trace_bprintk'>
+        <parameter type-id='7359adad' name='ip' filepath='kernel/trace/trace_printk.c' line='200' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='kernel/trace/trace_printk.c' line='200' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/ucount.c' language='LANG_C89'>
+      <function-decl name='unregister_sysctl_table' mangled-name='unregister_sysctl_table' filepath='include/linux/sysctl.h' line='208' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_sysctl_table'>
+        <parameter type-id='11b101bb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/umh.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='77e79a4b' size-in-bits='4096' id='d2c516bd'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <class-decl name='files_struct' size-in-bits='5632' is-struct='yes' visibility='default' filepath='include/linux/fdtable.h' line='48' column='1' id='bccdf331'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/fdtable.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='resize_in_progress' type-id='b50a4934' visibility='default' filepath='include/linux/fdtable.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='resize_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/fdtable.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fdt' type-id='02b857a9' visibility='default' filepath='include/linux/fdtable.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fdtab' type-id='ff35cfe1' visibility='default' filepath='include/linux/fdtable.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='file_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fdtable.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='next_fd' type-id='f0981eeb' visibility='default' filepath='include/linux/fdtable.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='close_on_exec_init' type-id='f066dd3c' visibility='default' filepath='include/linux/fdtable.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='open_fds_init' type-id='f066dd3c' visibility='default' filepath='include/linux/fdtable.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='full_fds_bits_init' type-id='f066dd3c' visibility='default' filepath='include/linux/fdtable.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='fd_array' type-id='d2c516bd' visibility='default' filepath='include/linux/fdtable.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fdtable' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fdtable.h' line='26' column='1' id='ff35cfe1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_fds' type-id='f0981eeb' visibility='default' filepath='include/linux/fdtable.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fd' type-id='229806b3' visibility='default' filepath='include/linux/fdtable.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='close_on_exec' type-id='1d2c2b85' visibility='default' filepath='include/linux/fdtable.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='open_fds' type-id='1d2c2b85' visibility='default' filepath='include/linux/fdtable.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='full_fds_bits' type-id='1d2c2b85' visibility='default' filepath='include/linux/fdtable.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/fdtable.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ff35cfe1' size-in-bits='64' id='02b857a9'/>
+      <pointer-type-def type-id='77e79a4b' size-in-bits='64' id='229806b3'/>
+      <pointer-type-def type-id='bccdf331' size-in-bits='64' id='16c53417'/>
+      <function-decl name='prepare_to_wait' mangled-name='prepare_to_wait' filepath='include/linux/wait.h' line='1123' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='prepare_to_wait'>
+        <parameter type-id='3f8b2ed3'/>
+        <parameter type-id='db9d03e3'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='prepare_kernel_cred' mangled-name='prepare_kernel_cred' filepath='include/linux/cred.h' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='prepare_kernel_cred'>
+        <parameter type-id='f23e2572'/>
+        <return type-id='10cfb911'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/user.c' language='LANG_C89'>
+      <var-decl name='init_user_ns' type-id='8c178e23' mangled-name='init_user_ns' visibility='default' filepath='kernel/user.c' line='27' column='1' elf-symbol-id='init_user_ns'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='kernel/workqueue.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='480' id='73c97830'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a7a31b92' size-in-bits='infinite' id='55b5dc02'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='wq_flusher' size-in-bits='448' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='230' column='1' id='c8eb0f4f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flush_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='done' type-id='f9fef04f' visibility='default' filepath='kernel/workqueue.c' line='233' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='worker' size-in-bits='1216' is-struct='yes' visibility='default' filepath='kernel/workqueue_internal.h' line='24' column='1' id='146df21f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='d331b3a2' visibility='default' filepath='kernel/workqueue_internal.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='current_work' type-id='83c1bde6' visibility='default' filepath='kernel/workqueue_internal.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='current_func' type-id='72666d3f' visibility='default' filepath='kernel/workqueue_internal.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='current_pwq' type-id='a7a31b92' visibility='default' filepath='kernel/workqueue_internal.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='scheduled' type-id='72f469ec' visibility='default' filepath='kernel/workqueue_internal.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='kernel/workqueue_internal.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pool' type-id='1ce8c5e4' visibility='default' filepath='kernel/workqueue_internal.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='kernel/workqueue_internal.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='last_active' type-id='7359adad' visibility='default' filepath='kernel/workqueue_internal.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='kernel/workqueue_internal.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue_internal.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='sleeping' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue_internal.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='desc' type-id='6653bb13' visibility='default' filepath='kernel/workqueue_internal.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rescue_wq' type-id='242e3d19' visibility='default' filepath='kernel/workqueue_internal.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='last_func' type-id='72666d3f' visibility='default' filepath='kernel/workqueue_internal.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='kernel/workqueue_internal.h' line='26' column='1' id='d331b3a2'>
+        <data-member access='private'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='kernel/workqueue_internal.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='hentry' type-id='03a4a074' visibility='default' filepath='kernel/workqueue_internal.h' line='28' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='pool_workqueue' size-in-bits='2048' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='203' column='1' id='b0355154'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pool' type-id='1ce8c5e4' visibility='default' filepath='kernel/workqueue.c' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wq' type-id='242e3d19' visibility='default' filepath='kernel/workqueue.c' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='work_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flush_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='refcnt' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='nr_in_flight' type-id='73c97830' visibility='default' filepath='kernel/workqueue.c' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='nr_active' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_active' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='delayed_works' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pwqs_node' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mayday_node' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='unbound_release_work' type-id='ef9025d0' visibility='default' filepath='kernel/workqueue.c' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/workqueue.c' line='224' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='worker_pool' size-in-bits='7168' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='151' column='1' id='19ea21fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='kernel/workqueue.c' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='node' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='kernel/workqueue.c' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='watchdog_ts' type-id='7359adad' visibility='default' filepath='kernel/workqueue.c' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='worklist' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nr_workers' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='nr_idle' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='idle_list' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='idle_timer' type-id='abe41e67' visibility='default' filepath='kernel/workqueue.c' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mayday_timer' type-id='abe41e67' visibility='default' filepath='kernel/workqueue.c' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='busy_hash' type-id='53b70d6c' visibility='default' filepath='kernel/workqueue.c' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='manager' type-id='50a159c7' visibility='default' filepath='kernel/workqueue.c' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='workers' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='detach_completion' type-id='389faaf7' visibility='default' filepath='kernel/workqueue.c' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='worker_ida' type-id='46ce60fb' visibility='default' filepath='kernel/workqueue.c' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='attrs' type-id='cfd15e7e' visibility='default' filepath='kernel/workqueue.c' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='hash_node' type-id='03a4a074' visibility='default' filepath='kernel/workqueue.c' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='refcnt' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='nr_running' type-id='49178f86' visibility='default' filepath='kernel/workqueue.c' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/workqueue.c' line='194' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='workqueue_attrs' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='143' column='1' id='2fe6f208'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nice' type-id='95e97e5e' visibility='default' filepath='include/linux/workqueue.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cpumask' type-id='b16b461b' visibility='default' filepath='include/linux/workqueue.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='no_numa' type-id='b50a4934' visibility='default' filepath='include/linux/workqueue.h' line='161' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wq_device' size-in-bits='7424' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='5349' column='1' id='a88ecfc8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wq' type-id='242e3d19' visibility='default' filepath='kernel/workqueue.c' line='5350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='kernel/workqueue.c' line='5351' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b0355154' size-in-bits='64' id='a7a31b92'/>
+      <pointer-type-def type-id='146df21f' size-in-bits='64' id='50a159c7'/>
+      <pointer-type-def type-id='19ea21fe' size-in-bits='64' id='1ce8c5e4'/>
+      <pointer-type-def type-id='2fe6f208' size-in-bits='64' id='cfd15e7e'/>
+      <pointer-type-def type-id='a88ecfc8' size-in-bits='64' id='5cebc26e'/>
+      <pointer-type-def type-id='c8eb0f4f' size-in-bits='64' id='ec037527'/>
+      <var-decl name='system_wq' type-id='242e3d19' mangled-name='system_wq' visibility='default' filepath='kernel/workqueue.c' line='345' column='1' elf-symbol-id='system_wq'/>
+      <var-decl name='system_highpri_wq' type-id='242e3d19' mangled-name='system_highpri_wq' visibility='default' filepath='kernel/workqueue.c' line='347' column='1' elf-symbol-id='system_highpri_wq'/>
+      <var-decl name='system_long_wq' type-id='242e3d19' mangled-name='system_long_wq' visibility='default' filepath='kernel/workqueue.c' line='349' column='1' elf-symbol-id='system_long_wq'/>
+      <var-decl name='system_unbound_wq' type-id='242e3d19' mangled-name='system_unbound_wq' visibility='default' filepath='kernel/workqueue.c' line='351' column='1' elf-symbol-id='system_unbound_wq'/>
+      <var-decl name='system_freezable_wq' type-id='242e3d19' mangled-name='system_freezable_wq' visibility='default' filepath='kernel/workqueue.c' line='353' column='1' elf-symbol-id='system_freezable_wq'/>
+      <var-decl name='system_power_efficient_wq' type-id='242e3d19' mangled-name='system_power_efficient_wq' visibility='default' filepath='kernel/workqueue.c' line='355' column='1' elf-symbol-id='system_power_efficient_wq'/>
+      <function-decl name='delayed_work_timer_fn' mangled-name='delayed_work_timer_fn' filepath='kernel/workqueue.c' line='1620' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='delayed_work_timer_fn'>
+        <parameter type-id='9248e67f' name='t' filepath='kernel/workqueue.c' line='1620' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='add_timer_on' mangled-name='add_timer_on' filepath='include/linux/timer.h' line='174' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='add_timer_on'>
+        <parameter type-id='9248e67f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drain_workqueue' mangled-name='drain_workqueue' filepath='kernel/workqueue.c' line='2938' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drain_workqueue'>
+        <parameter type-id='242e3d19' name='wq' filepath='kernel/workqueue.c' line='2938' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_unregister' mangled-name='device_unregister' filepath='include/linux/device.h' line='1575' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_unregister'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='idr_get_next' mangled-name='idr_get_next' filepath='include/linux/idr.h' line='122' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_get_next'>
+        <parameter type-id='301185b4'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='current_work' mangled-name='current_work' filepath='kernel/workqueue.c' line='4473' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='current_work'>
+        <return type-id='83c1bde6'/>
+      </function-decl>
+      <function-decl name='strscpy' mangled-name='strscpy' filepath='include/linux/string.h' line='32' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strscpy'>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='autoremove_wake_function' mangled-name='autoremove_wake_function' filepath='include/linux/wait.h' line='1129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='autoremove_wake_function'>
+        <parameter type-id='db9d03e3'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='schedule_timeout_interruptible' mangled-name='schedule_timeout_interruptible' filepath='include/linux/sched.h' line='222' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='schedule_timeout_interruptible'>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='strchrnul' mangled-name='strchrnul' filepath='include/linux/string.h' line='63' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strchrnul'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/bitmap.c' language='LANG_C89'>
+      <function-decl name='__bitmap_andnot' mangled-name='__bitmap_andnot' filepath='lib/bitmap.c' line='209' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__bitmap_andnot'>
+        <parameter type-id='1d2c2b85' name='dst' filepath='lib/bitmap.c' line='209' column='1'/>
+        <parameter type-id='f9b37274' name='bitmap1' filepath='lib/bitmap.c' line='209' column='1'/>
+        <parameter type-id='f9b37274' name='bitmap2' filepath='lib/bitmap.c' line='210' column='1'/>
+        <parameter type-id='f0981eeb' name='bits' filepath='lib/bitmap.c' line='210' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__bitmap_subset' mangled-name='__bitmap_subset' filepath='lib/bitmap.c' line='240' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__bitmap_subset'>
+        <parameter type-id='f9b37274' name='bitmap1' filepath='lib/bitmap.c' line='240' column='1'/>
+        <parameter type-id='f9b37274' name='bitmap2' filepath='lib/bitmap.c' line='241' column='1'/>
+        <parameter type-id='f0981eeb' name='bits' filepath='lib/bitmap.c' line='241' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__bitmap_weight' mangled-name='__bitmap_weight' filepath='lib/bitmap.c' line='255' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__bitmap_weight'>
+        <parameter type-id='f9b37274' name='bitmap' filepath='lib/bitmap.c' line='255' column='1'/>
+        <parameter type-id='f0981eeb' name='bits' filepath='lib/bitmap.c' line='255' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__bitmap_set' mangled-name='__bitmap_set' filepath='lib/bitmap.c' line='270' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__bitmap_set'>
+        <parameter type-id='1d2c2b85' name='map' filepath='lib/bitmap.c' line='270' column='1'/>
+        <parameter type-id='f0981eeb' name='start' filepath='lib/bitmap.c' line='270' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='lib/bitmap.c' line='270' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__bitmap_clear' mangled-name='__bitmap_clear' filepath='lib/bitmap.c' line='291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__bitmap_clear'>
+        <parameter type-id='1d2c2b85' name='map' filepath='lib/bitmap.c' line='291' column='1'/>
+        <parameter type-id='f0981eeb' name='start' filepath='lib/bitmap.c' line='291' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='lib/bitmap.c' line='291' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__bitmap_parse' mangled-name='__bitmap_parse' filepath='lib/bitmap.c' line='376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__bitmap_parse'>
+        <parameter type-id='80f4b756' name='buf' filepath='lib/bitmap.c' line='376' column='1'/>
+        <parameter type-id='f0981eeb' name='buflen' filepath='lib/bitmap.c' line='376' column='1'/>
+        <parameter type-id='95e97e5e' name='is_user' filepath='lib/bitmap.c' line='377' column='1'/>
+        <parameter type-id='1d2c2b85' name='maskp' filepath='lib/bitmap.c' line='377' column='1'/>
+        <parameter type-id='95e97e5e' name='nmaskbits' filepath='lib/bitmap.c' line='378' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/checksum.c' language='LANG_C89'>
+      <function-decl name='ip_compute_csum' mangled-name='ip_compute_csum' filepath='lib/checksum.c' line='142' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip_compute_csum'>
+        <parameter type-id='eaa32e2f' name='buff' filepath='lib/checksum.c' line='142' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='lib/checksum.c' line='142' column='1'/>
+        <return type-id='7dac1e36'/>
+      </function-decl>
+      <function-decl name='csum_tcpudp_nofold' mangled-name='csum_tcpudp_nofold' filepath='lib/checksum.c' line='189' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='csum_tcpudp_nofold'>
+        <parameter type-id='78a133c2' name='saddr' filepath='lib/checksum.c' line='189' column='1'/>
+        <parameter type-id='78a133c2' name='daddr' filepath='lib/checksum.c' line='189' column='1'/>
+        <parameter type-id='3f1a6b60' name='len' filepath='lib/checksum.c' line='190' column='1'/>
+        <parameter type-id='8f048e17' name='proto' filepath='lib/checksum.c' line='190' column='1'/>
+        <parameter type-id='fbd88bba' name='sum' filepath='lib/checksum.c' line='190' column='1'/>
+        <return type-id='fbd88bba'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/crc-ccitt.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='d5c0a628' size-in-bits='4096' id='765f36d9'>
+        <subrange length='256' type-id='7ff19f0f' id='36e5b9fa'/>
+      </array-type-def>
+      <var-decl name='crc_ccitt_table' type-id='765f36d9' mangled-name='crc_ccitt_table' visibility='default' filepath='lib/crc-ccitt.c' line='16' column='1' elf-symbol-id='crc_ccitt_table'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/crc8.c' language='LANG_C89'>
+      <function-decl name='crc8_populate_msb' mangled-name='crc8_populate_msb' filepath='lib/crc8.c' line='29' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crc8_populate_msb'>
+        <parameter type-id='8bff8096' name='table' filepath='lib/crc8.c' line='29' column='1'/>
+        <parameter type-id='f9b06939' name='polynomial' filepath='lib/crc8.c' line='29' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crc8' mangled-name='crc8' filepath='lib/crc8.c' line='74' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crc8'>
+        <parameter type-id='bbaf3419' name='table' filepath='lib/crc8.c' line='74' column='1'/>
+        <parameter type-id='8bff8096' name='pdata' filepath='lib/crc8.c' line='74' column='1'/>
+        <parameter type-id='b59d7dce' name='nbytes' filepath='lib/crc8.c' line='74' column='1'/>
+        <parameter type-id='f9b06939' name='crc' filepath='lib/crc8.c' line='74' column='1'/>
+        <return type-id='f9b06939'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/ctype.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='ea86de29' size-in-bits='2048' id='9941c99e'>
+        <subrange length='256' type-id='7ff19f0f' id='36e5b9fa'/>
+      </array-type-def>
+      <var-decl name='_ctype' type-id='9941c99e' mangled-name='_ctype' visibility='default' filepath='lib/ctype.c' line='12' column='1' elf-symbol-id='_ctype'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/devres.c' language='LANG_C89'>
+      <pointer-type-def type-id='acc63fdf' size-in-bits='64' id='9e6a6c02'/>
+      <function-decl name='devm_ioremap_wc' mangled-name='devm_ioremap_wc' filepath='lib/devres.c' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_ioremap_wc'>
+        <parameter type-id='fa0b179b' name='dev' filepath='lib/devres.c' line='114' column='1'/>
+        <parameter type-id='acc63fdf' name='offset' filepath='lib/devres.c' line='114' column='1'/>
+        <parameter type-id='acc63fdf' name='size' filepath='lib/devres.c' line='115' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='devm_iounmap' mangled-name='devm_iounmap' filepath='lib/devres.c' line='128' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_iounmap'>
+        <parameter type-id='fa0b179b' name='dev' filepath='lib/devres.c' line='128' column='1'/>
+        <parameter type-id='eaa32e2f' name='addr' filepath='lib/devres.c' line='128' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_of_iomap' mangled-name='devm_of_iomap' filepath='lib/devres.c' line='215' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_of_iomap'>
+        <parameter type-id='fa0b179b' name='dev' filepath='lib/devres.c' line='215' column='1'/>
+        <parameter type-id='9a537bbe' name='node' filepath='lib/devres.c' line='215' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='lib/devres.c' line='215' column='1'/>
+        <parameter type-id='9e6a6c02' name='size' filepath='lib/devres.c' line='216' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='pci_release_region' mangled-name='pci_release_region' filepath='include/linux/pci.h' line='1304' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_release_region'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_release_selected_regions' mangled-name='pci_release_selected_regions' filepath='include/linux/pci.h' line='1307' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_release_selected_regions'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/dynamic_debug.c' language='LANG_C89'>
+      <class-decl name='_ddebug' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/dynamic_debug.h' line='14' column='1' id='a88f76f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='modname' type-id='80f4b756' visibility='default' filepath='include/linux/dynamic_debug.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='function' type-id='80f4b756' visibility='default' filepath='include/linux/dynamic_debug.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='filename' type-id='80f4b756' visibility='default' filepath='include/linux/dynamic_debug.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='format' type-id='80f4b756' visibility='default' filepath='include/linux/dynamic_debug.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='lineno' type-id='f0981eeb' visibility='default' filepath='include/linux/dynamic_debug.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/dynamic_debug.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='key' type-id='0efd7880' visibility='default' filepath='include/linux/dynamic_debug.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dynamic_debug.h' line='42' column='1' id='0efd7880'>
+        <data-member access='private'>
+          <var-decl name='dd_key_true' type-id='49a0ad34' visibility='default' filepath='include/linux/dynamic_debug.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dd_key_false' type-id='237c0d27' visibility='default' filepath='include/linux/dynamic_debug.h' line='44' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='a88f76f1' size-in-bits='64' id='7c67ab39'/>
+      <function-decl name='__dynamic_pr_debug' mangled-name='__dynamic_pr_debug' filepath='lib/dynamic_debug.c' line='552' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__dynamic_pr_debug'>
+        <parameter type-id='7c67ab39' name='descriptor' filepath='lib/dynamic_debug.c' line='552' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/dynamic_debug.c' line='552' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__dynamic_dev_dbg' mangled-name='__dynamic_dev_dbg' filepath='lib/dynamic_debug.c' line='572' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__dynamic_dev_dbg'>
+        <parameter type-id='7c67ab39' name='descriptor' filepath='lib/dynamic_debug.c' line='572' column='1'/>
+        <parameter type-id='8df61054' name='dev' filepath='lib/dynamic_debug.c' line='573' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/dynamic_debug.c' line='573' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <class-decl name='static_key_true' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/jump_label.h' line='346' column='1' id='49a0ad34'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='00205383' visibility='default' filepath='include/linux/jump_label.h' line='347' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/fdt.c' language='LANG_C89'>
+      <function-decl name='memmove' filepath='arch/arm64/include/asm/string.h' line='39' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/fdt_ro.c' language='LANG_C89'>
+      <function-decl name='memchr' filepath='arch/arm64/include/asm/string.h' line='31' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='strrchr' filepath='arch/arm64/include/asm/string.h' line='10' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='strnlen' filepath='arch/arm64/include/asm/string.h' line='25' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/fdt_rw.c' language='LANG_C89'>
+      <function-decl name='memset' filepath='arch/arm64/include/asm/string.h' line='43' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/genalloc.c' language='LANG_C89'>
+      <function-decl name='gen_pool_dma_alloc_align' mangled-name='gen_pool_dma_alloc_align' filepath='lib/genalloc.c' line='394' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_dma_alloc_align'>
+        <parameter type-id='75b9415a' name='pool' filepath='lib/genalloc.c' line='394' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='lib/genalloc.c' line='394' column='1'/>
+        <parameter type-id='e835b5d8' name='dma' filepath='lib/genalloc.c' line='395' column='1'/>
+        <parameter type-id='95e97e5e' name='align' filepath='lib/genalloc.c' line='395' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='gen_pool_dma_zalloc_align' mangled-name='gen_pool_dma_zalloc_align' filepath='lib/genalloc.c' line='465' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_dma_zalloc_align'>
+        <parameter type-id='75b9415a' name='pool' filepath='lib/genalloc.c' line='465' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='lib/genalloc.c' line='465' column='1'/>
+        <parameter type-id='e835b5d8' name='dma' filepath='lib/genalloc.c' line='466' column='1'/>
+        <parameter type-id='95e97e5e' name='align' filepath='lib/genalloc.c' line='466' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='gen_pool_avail' mangled-name='gen_pool_avail' filepath='lib/genalloc.c' line='578' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_avail'>
+        <parameter type-id='75b9415a' name='pool' filepath='lib/genalloc.c' line='578' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='gen_pool_size' mangled-name='gen_pool_size' filepath='lib/genalloc.c' line='597' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_size'>
+        <parameter type-id='75b9415a' name='pool' filepath='lib/genalloc.c' line='597' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='gen_pool_best_fit' mangled-name='gen_pool_best_fit' filepath='lib/genalloc.c' line='747' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_best_fit'>
+        <parameter type-id='1d2c2b85' name='map' filepath='lib/genalloc.c' line='747' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='lib/genalloc.c' line='747' column='1'/>
+        <parameter type-id='7359adad' name='start' filepath='lib/genalloc.c' line='748' column='1'/>
+        <parameter type-id='f0981eeb' name='nr' filepath='lib/genalloc.c' line='748' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='lib/genalloc.c' line='748' column='1'/>
+        <parameter type-id='75b9415a' name='pool' filepath='lib/genalloc.c' line='749' column='1'/>
+        <parameter type-id='7359adad' name='start_addr' filepath='lib/genalloc.c' line='749' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='of_property_read_string' mangled-name='of_property_read_string' filepath='include/linux/of.h' line='334' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_read_string'>
+        <parameter type-id='0afa6ea3'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7d3cd834'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/hweight.c' language='LANG_C89'>
+      <function-decl name='__sw_hweight32' mangled-name='__sw_hweight32' filepath='lib/hweight.c' line='13' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sw_hweight32'>
+        <parameter type-id='f0981eeb' name='w' filepath='lib/hweight.c' line='13' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='__sw_hweight16' mangled-name='__sw_hweight16' filepath='lib/hweight.c' line='30' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sw_hweight16'>
+        <parameter type-id='f0981eeb' name='w' filepath='lib/hweight.c' line='30' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='__sw_hweight8' mangled-name='__sw_hweight8' filepath='lib/hweight.c' line='39' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sw_hweight8'>
+        <parameter type-id='f0981eeb' name='w' filepath='lib/hweight.c' line='39' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='__sw_hweight64' mangled-name='__sw_hweight64' filepath='lib/hweight.c' line='47' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sw_hweight64'>
+        <parameter type-id='d3130597' name='w' filepath='lib/hweight.c' line='47' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/iomap_copy.c' language='LANG_C89'>
+      <function-decl name='__iowrite32_copy' mangled-name='__iowrite32_copy' filepath='lib/iomap_copy.c' line='19' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__iowrite32_copy'>
+        <parameter type-id='eaa32e2f' name='to' filepath='lib/iomap_copy.c' line='19' column='1'/>
+        <parameter type-id='eaa32e2f' name='from' filepath='lib/iomap_copy.c' line='20' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/iomap_copy.c' line='21' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__ioread32_copy' mangled-name='__ioread32_copy' filepath='lib/iomap_copy.c' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ioread32_copy'>
+        <parameter type-id='eaa32e2f' name='to' filepath='lib/iomap_copy.c' line='42' column='1'/>
+        <parameter type-id='eaa32e2f' name='from' filepath='lib/iomap_copy.c' line='42' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/iomap_copy.c' line='42' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/iov_iter.c' language='LANG_C89'>
+      <function-decl name='dup_iter' mangled-name='dup_iter' filepath='lib/iov_iter.c' line='1600' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dup_iter'>
+        <parameter type-id='4fa10f9e' name='new' filepath='lib/iov_iter.c' line='1600' column='1'/>
+        <parameter type-id='4fa10f9e' name='old' filepath='lib/iov_iter.c' line='1600' column='1'/>
+        <parameter type-id='3eb7c31c' name='flags' filepath='lib/iov_iter.c' line='1600' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/kfifo.c' language='LANG_C89'>
+      <class-decl name='__kfifo' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/kfifo.h' line='44' column='1' id='bbbc6c1e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='in' type-id='f0981eeb' visibility='default' filepath='include/linux/kfifo.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='out' type-id='f0981eeb' visibility='default' filepath='include/linux/kfifo.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/linux/kfifo.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='esize' type-id='f0981eeb' visibility='default' filepath='include/linux/kfifo.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/kfifo.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='bbbc6c1e' size-in-bits='64' id='f3207f74'/>
+      <function-decl name='__kfifo_alloc' mangled-name='__kfifo_alloc' filepath='lib/kfifo.c' line='24' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_alloc'>
+        <parameter type-id='f3207f74' name='fifo' filepath='lib/kfifo.c' line='24' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='lib/kfifo.c' line='24' column='1'/>
+        <parameter type-id='b59d7dce' name='esize' filepath='lib/kfifo.c' line='25' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='lib/kfifo.c' line='25' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__kfifo_free' mangled-name='__kfifo_free' filepath='lib/kfifo.c' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_free'>
+        <parameter type-id='f3207f74' name='fifo' filepath='lib/kfifo.c' line='55' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__kfifo_init' mangled-name='__kfifo_init' filepath='lib/kfifo.c' line='66' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_init'>
+        <parameter type-id='f3207f74' name='fifo' filepath='lib/kfifo.c' line='66' column='1'/>
+        <parameter type-id='eaa32e2f' name='buffer' filepath='lib/kfifo.c' line='66' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='lib/kfifo.c' line='67' column='1'/>
+        <parameter type-id='b59d7dce' name='esize' filepath='lib/kfifo.c' line='67' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__kfifo_in' mangled-name='__kfifo_in' filepath='lib/kfifo.c' line='113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_in'>
+        <parameter type-id='f3207f74' name='fifo' filepath='lib/kfifo.c' line='113' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='lib/kfifo.c' line='114' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='lib/kfifo.c' line='114' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='__kfifo_out' mangled-name='__kfifo_out' filepath='lib/kfifo.c' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_out'>
+        <parameter type-id='f3207f74' name='fifo' filepath='lib/kfifo.c' line='166' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='lib/kfifo.c' line='167' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='lib/kfifo.c' line='167' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='__kfifo_to_user' mangled-name='__kfifo_to_user' filepath='lib/kfifo.c' line='270' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_to_user'>
+        <parameter type-id='f3207f74' name='fifo' filepath='lib/kfifo.c' line='270' column='1'/>
+        <parameter type-id='eaa32e2f' name='to' filepath='lib/kfifo.c' line='270' column='1'/>
+        <parameter type-id='7359adad' name='len' filepath='lib/kfifo.c' line='271' column='1'/>
+        <parameter type-id='807869d3' name='copied' filepath='lib/kfifo.c' line='271' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__kfifo_from_user_r' mangled-name='__kfifo_from_user_r' filepath='lib/kfifo.c' line='499' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_from_user_r'>
+        <parameter type-id='f3207f74' name='fifo' filepath='lib/kfifo.c' line='499' column='1'/>
+        <parameter type-id='eaa32e2f' name='from' filepath='lib/kfifo.c' line='499' column='1'/>
+        <parameter type-id='7359adad' name='len' filepath='lib/kfifo.c' line='500' column='1'/>
+        <parameter type-id='807869d3' name='copied' filepath='lib/kfifo.c' line='500' column='1'/>
+        <parameter type-id='b59d7dce' name='recsize' filepath='lib/kfifo.c' line='500' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__kfifo_to_user_r' mangled-name='__kfifo_to_user_r' filepath='lib/kfifo.c' line='523' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_to_user_r'>
+        <parameter type-id='f3207f74' name='fifo' filepath='lib/kfifo.c' line='523' column='1'/>
+        <parameter type-id='eaa32e2f' name='to' filepath='lib/kfifo.c' line='523' column='1'/>
+        <parameter type-id='7359adad' name='len' filepath='lib/kfifo.c' line='524' column='1'/>
+        <parameter type-id='807869d3' name='copied' filepath='lib/kfifo.c' line='524' column='1'/>
+        <parameter type-id='b59d7dce' name='recsize' filepath='lib/kfifo.c' line='524' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/kobject_uevent.c' language='LANG_C89'>
+      <function-decl name='kobject_uevent' mangled-name='kobject_uevent' filepath='lib/kobject_uevent.c' line='639' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_uevent'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='lib/kobject_uevent.c' line='639' column='1'/>
+        <parameter type-id='7d635811' name='action' filepath='lib/kobject_uevent.c' line='639' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/kstrtox.c' language='LANG_C89'>
+      <pointer-type-def type-id='fdbf7a0f' size-in-bits='64' id='01b75fec'/>
+      <pointer-type-def type-id='1dc6a898' size-in-bits='64' id='26d4d46f'/>
+      <function-decl name='kstrtos8' mangled-name='kstrtos8' filepath='lib/kstrtox.c' line='308' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtos8'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='308' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/kstrtox.c' line='308' column='1'/>
+        <parameter type-id='01b75fec' name='res' filepath='lib/kstrtox.c' line='308' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtou16_from_user' mangled-name='kstrtou16_from_user' filepath='lib/kstrtox.c' line='407' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtou16_from_user'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='407' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/kstrtox.c' line='407' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/kstrtox.c' line='407' column='1'/>
+        <parameter type-id='26d4d46f' name='res' filepath='lib/kstrtox.c' line='407' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtou8_from_user' mangled-name='kstrtou8_from_user' filepath='lib/kstrtox.c' line='409' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtou8_from_user'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='409' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/kstrtox.c' line='409' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/kstrtox.c' line='409' column='1'/>
+        <parameter type-id='8bff8096' name='res' filepath='lib/kstrtox.c' line='409' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtos8_from_user' mangled-name='kstrtos8_from_user' filepath='lib/kstrtox.c' line='410' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtos8_from_user'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='410' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/kstrtox.c' line='410' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/kstrtox.c' line='410' column='1'/>
+        <parameter type-id='01b75fec' name='res' filepath='lib/kstrtox.c' line='410' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/list_debug.c' language='LANG_C89'>
+      <function-decl name='__list_add_valid' mangled-name='__list_add_valid' filepath='lib/list_debug.c' line='20' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__list_add_valid'>
+        <parameter type-id='e84b031a' name='new' filepath='lib/list_debug.c' line='20' column='1'/>
+        <parameter type-id='e84b031a' name='prev' filepath='lib/list_debug.c' line='20' column='1'/>
+        <parameter type-id='e84b031a' name='next' filepath='lib/list_debug.c' line='21' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='__list_del_entry_valid' mangled-name='__list_del_entry_valid' filepath='lib/list_debug.c' line='38' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__list_del_entry_valid'>
+        <parameter type-id='e84b031a' name='entry' filepath='lib/list_debug.c' line='38' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/lzo/lzo1x_compress.c' language='LANG_C89'>
+      <function-decl name='lzo1x_1_compress' mangled-name='lzo1x_1_compress' filepath='lib/lzo/lzo1x_compress.c' line='381' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzo1x_1_compress'>
+        <parameter type-id='354f7eb9' name='in' filepath='lib/lzo/lzo1x_compress.c' line='381' column='1'/>
+        <parameter type-id='b59d7dce' name='in_len' filepath='lib/lzo/lzo1x_compress.c' line='381' column='1'/>
+        <parameter type-id='cf536864' name='out' filepath='lib/lzo/lzo1x_compress.c' line='382' column='1'/>
+        <parameter type-id='78c01427' name='out_len' filepath='lib/lzo/lzo1x_compress.c' line='382' column='1'/>
+        <parameter type-id='eaa32e2f' name='wrkmem' filepath='lib/lzo/lzo1x_compress.c' line='383' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='lzorle1x_1_compress' mangled-name='lzorle1x_1_compress' filepath='lib/lzo/lzo1x_compress.c' line='388' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzorle1x_1_compress'>
+        <parameter type-id='354f7eb9' name='in' filepath='lib/lzo/lzo1x_compress.c' line='388' column='1'/>
+        <parameter type-id='b59d7dce' name='in_len' filepath='lib/lzo/lzo1x_compress.c' line='388' column='1'/>
+        <parameter type-id='cf536864' name='out' filepath='lib/lzo/lzo1x_compress.c' line='389' column='1'/>
+        <parameter type-id='78c01427' name='out_len' filepath='lib/lzo/lzo1x_compress.c' line='389' column='1'/>
+        <parameter type-id='eaa32e2f' name='wrkmem' filepath='lib/lzo/lzo1x_compress.c' line='390' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/math/gcd.c' language='LANG_C89'>
+      <function-decl name='gcd' mangled-name='gcd' filepath='lib/math/gcd.c' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gcd'>
+        <parameter type-id='7359adad' name='a' filepath='lib/math/gcd.c' line='23' column='1'/>
+        <parameter type-id='7359adad' name='b' filepath='lib/math/gcd.c' line='23' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/math/int_pow.c' language='LANG_C89'>
+      <function-decl name='int_pow' mangled-name='int_pow' filepath='lib/math/int_pow.c' line='19' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='int_pow'>
+        <parameter type-id='91ce1af9' name='base' filepath='lib/math/int_pow.c' line='19' column='1'/>
+        <parameter type-id='f0981eeb' name='exp' filepath='lib/math/int_pow.c' line='19' column='1'/>
+        <return type-id='91ce1af9'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/math/rational.c' language='LANG_C89'>
+      <function-decl name='rational_best_approximation' mangled-name='rational_best_approximation' filepath='lib/math/rational.c' line='31' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rational_best_approximation'>
+        <parameter type-id='7359adad' name='given_numerator' filepath='lib/math/rational.c' line='32' column='1'/>
+        <parameter type-id='7359adad' name='given_denominator' filepath='lib/math/rational.c' line='32' column='1'/>
+        <parameter type-id='7359adad' name='max_numerator' filepath='lib/math/rational.c' line='33' column='1'/>
+        <parameter type-id='7359adad' name='max_denominator' filepath='lib/math/rational.c' line='33' column='1'/>
+        <parameter type-id='1d2c2b85' name='best_numerator' filepath='lib/math/rational.c' line='34' column='1'/>
+        <parameter type-id='1d2c2b85' name='best_denominator' filepath='lib/math/rational.c' line='34' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/net_utils.c' language='LANG_C89'>
+      <function-decl name='mac_pton' mangled-name='mac_pton' filepath='lib/net_utils.c' line='7' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mac_pton'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/net_utils.c' line='7' column='1'/>
+        <parameter type-id='8bff8096' name='mac' filepath='lib/net_utils.c' line='7' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/nlattr.c' language='LANG_C89'>
+      <function-decl name='__nla_parse' mangled-name='__nla_parse' filepath='lib/nlattr.c' line='473' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__nla_parse'>
+        <parameter type-id='30864cdc' name='tb' filepath='lib/nlattr.c' line='473' column='1'/>
+        <parameter type-id='95e97e5e' name='maxtype' filepath='lib/nlattr.c' line='473' column='1'/>
+        <parameter type-id='0f2a7ce5' name='head' filepath='lib/nlattr.c' line='474' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='lib/nlattr.c' line='474' column='1'/>
+        <parameter type-id='109cdb66' name='policy' filepath='lib/nlattr.c' line='475' column='1'/>
+        <parameter type-id='f0981eeb' name='validate' filepath='lib/nlattr.c' line='475' column='1'/>
+        <parameter type-id='5799dc94' name='extack' filepath='lib/nlattr.c' line='476' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='nla_put_nohdr' mangled-name='nla_put_nohdr' filepath='lib/nlattr.c' line='876' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nla_put_nohdr'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='lib/nlattr.c' line='876' column='1'/>
+        <parameter type-id='95e97e5e' name='attrlen' filepath='lib/nlattr.c' line='876' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='lib/nlattr.c' line='876' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/once.c' language='LANG_C89'>
+      <class-decl name='static_key_true' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/jump_label.h' line='346' column='1' id='49a0ad34'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='00205383' visibility='default' filepath='include/linux/jump_label.h' line='347' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='49a0ad34' size-in-bits='64' id='ac6963b2'/>
+      <function-decl name='__do_once_start' mangled-name='__do_once_start' filepath='lib/once.c' line='37' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__do_once_start'>
+        <parameter type-id='d8e6b335' name='done' filepath='lib/once.c' line='37' column='1'/>
+        <parameter type-id='1d2c2b85' name='flags' filepath='lib/once.c' line='37' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='__do_once_done' mangled-name='__do_once_done' filepath='lib/once.c' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__do_once_done'>
+        <parameter type-id='d8e6b335' name='done' filepath='lib/once.c' line='55' column='1'/>
+        <parameter type-id='ac6963b2' name='once_key' filepath='lib/once.c' line='55' column='1'/>
+        <parameter type-id='1d2c2b85' name='flags' filepath='lib/once.c' line='56' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/pci_iomap.c' language='LANG_C89'>
+      <function-decl name='pci_iomap_range' mangled-name='pci_iomap_range' filepath='lib/pci_iomap.c' line='28' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_iomap_range'>
+        <parameter type-id='85196e3f' name='dev' filepath='lib/pci_iomap.c' line='28' column='1'/>
+        <parameter type-id='95e97e5e' name='bar' filepath='lib/pci_iomap.c' line='29' column='1'/>
+        <parameter type-id='7359adad' name='offset' filepath='lib/pci_iomap.c' line='30' column='1'/>
+        <parameter type-id='7359adad' name='maxlen' filepath='lib/pci_iomap.c' line='31' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='pci_iomap' mangled-name='pci_iomap' filepath='lib/pci_iomap.c' line='111' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_iomap'>
+        <parameter type-id='85196e3f' name='dev' filepath='lib/pci_iomap.c' line='111' column='1'/>
+        <parameter type-id='95e97e5e' name='bar' filepath='lib/pci_iomap.c' line='111' column='1'/>
+        <parameter type-id='7359adad' name='maxlen' filepath='lib/pci_iomap.c' line='111' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/radix-tree.c' language='LANG_C89'>
+      <function-decl name='radix_tree_iter_delete' mangled-name='radix_tree_iter_delete' filepath='lib/radix-tree.c' line='1403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='radix_tree_iter_delete'>
+        <parameter type-id='60075f2a' name='root' filepath='lib/radix-tree.c' line='1403' column='1'/>
+        <parameter type-id='0cbbabe1' name='iter' filepath='lib/radix-tree.c' line='1404' column='1'/>
+        <parameter type-id='63e171df' name='slot' filepath='lib/radix-tree.c' line='1404' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='radix_tree_delete' mangled-name='radix_tree_delete' filepath='lib/radix-tree.c' line='1454' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='radix_tree_delete'>
+        <parameter type-id='60075f2a' name='root' filepath='lib/radix-tree.c' line='1454' column='1'/>
+        <parameter type-id='7359adad' name='index' filepath='lib/radix-tree.c' line='1454' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <pointer-type-def type-id='c7ead0f9' size-in-bits='64' id='0cbbabe1'/>
+      <class-decl name='radix_tree_iter' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/radix-tree.h' line='94' column='1' id='c7ead0f9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='7359adad' visibility='default' filepath='include/linux/radix-tree.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next_index' type-id='7359adad' visibility='default' filepath='include/linux/radix-tree.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tags' type-id='7359adad' visibility='default' filepath='include/linux/radix-tree.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='node' type-id='83f45767' visibility='default' filepath='include/linux/radix-tree.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9a218d2f' size-in-bits='64' id='83f45767'/>
+      <class-decl name='xa_node' size-in-bits='4608' is-struct='yes' visibility='default' filepath='include/linux/xarray.h' line='1087' column='1' id='9a218d2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='shift' type-id='002ac4a6' visibility='default' filepath='include/linux/xarray.h' line='1088' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='offset' type-id='002ac4a6' visibility='default' filepath='include/linux/xarray.h' line='1089' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='count' type-id='002ac4a6' visibility='default' filepath='include/linux/xarray.h' line='1090' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='nr_values' type-id='002ac4a6' visibility='default' filepath='include/linux/xarray.h' line='1091' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parent' type-id='83f45767' visibility='default' filepath='include/linux/xarray.h' line='1092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='array' type-id='60075f2a' visibility='default' filepath='include/linux/xarray.h' line='1093' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='2db4cfe9' visibility='default' filepath='include/linux/xarray.h' line='1094' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='slots' type-id='56f066f9' visibility='default' filepath='include/linux/xarray.h' line='1098' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='' type-id='65594137' visibility='default' filepath='include/linux/xarray.h' line='1099' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/xarray.h' line='1094' column='1' id='2db4cfe9'>
+        <data-member access='private'>
+          <var-decl name='private_list' type-id='72f469ec' visibility='default' filepath='include/linux/xarray.h' line='1095' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/xarray.h' line='1096' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/xarray.h' line='1099' column='1' id='65594137'>
+        <data-member access='private'>
+          <var-decl name='tags' type-id='aa5bd681' visibility='default' filepath='include/linux/xarray.h' line='1100' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='marks' type-id='aa5bd681' visibility='default' filepath='include/linux/xarray.h' line='1101' column='1'/>
+        </data-member>
+      </union-decl>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='4096' id='56f066f9'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='7359adad' size-in-bits='192' id='aa5bd681'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/ratelimit.c' language='LANG_C89'>
+      <pointer-type-def type-id='8b829a50' size-in-bits='64' id='ccb97366'/>
+      <function-decl name='___ratelimit' mangled-name='___ratelimit' filepath='lib/ratelimit.c' line='27' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='___ratelimit'>
+        <parameter type-id='ccb97366' name='rs' filepath='lib/ratelimit.c' line='27' column='1'/>
+        <parameter type-id='80f4b756' name='func' filepath='lib/ratelimit.c' line='27' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/rhashtable.c' language='LANG_C89'>
+      <function-decl name='__rht_bucket_nested' mangled-name='__rht_bucket_nested' filepath='lib/rhashtable.c' line='1167' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__rht_bucket_nested'>
+        <parameter type-id='6a4a6779' name='tbl' filepath='lib/rhashtable.c' line='1167' column='1'/>
+        <parameter type-id='f0981eeb' name='hash' filepath='lib/rhashtable.c' line='1168' column='1'/>
+        <return type-id='33f7eff4'/>
+      </function-decl>
+      <function-decl name='rhashtable_destroy' mangled-name='rhashtable_destroy' filepath='lib/rhashtable.c' line='1161' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rhashtable_destroy'>
+        <parameter type-id='e6726ce3' name='ht' filepath='lib/rhashtable.c' line='1161' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/scatterlist.c' language='LANG_C89'>
+      <typedef-decl name='off_t' type-id='8dda407a' filepath='include/linux/types.h' line='21' column='1' id='ad707ada'/>
+      <typedef-decl name='__kernel_off_t' type-id='6a11bd61' filepath='include/uapi/asm-generic/posix_types.h' line='87' column='1' id='8dda407a'/>
+      <pointer-type-def type-id='78e3e1d2' size-in-bits='64' id='06f723f0'/>
+      <function-decl name='__sg_alloc_table_from_pages' mangled-name='__sg_alloc_table_from_pages' filepath='lib/scatterlist.c' line='389' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sg_alloc_table_from_pages'>
+        <parameter type-id='4adb0e6a' name='sgt' filepath='lib/scatterlist.c' line='389' column='1'/>
+        <parameter type-id='9f93c9da' name='pages' filepath='lib/scatterlist.c' line='389' column='1'/>
+        <parameter type-id='f0981eeb' name='n_pages' filepath='lib/scatterlist.c' line='390' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='lib/scatterlist.c' line='390' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='lib/scatterlist.c' line='391' column='1'/>
+        <parameter type-id='f0981eeb' name='max_segment' filepath='lib/scatterlist.c' line='391' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='lib/scatterlist.c' line='392' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sg_alloc_table_from_pages' mangled-name='sg_alloc_table_from_pages' filepath='lib/scatterlist.c' line='464' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_alloc_table_from_pages'>
+        <parameter type-id='4adb0e6a' name='sgt' filepath='lib/scatterlist.c' line='464' column='1'/>
+        <parameter type-id='9f93c9da' name='pages' filepath='lib/scatterlist.c' line='464' column='1'/>
+        <parameter type-id='f0981eeb' name='n_pages' filepath='lib/scatterlist.c' line='465' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='lib/scatterlist.c' line='465' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='lib/scatterlist.c' line='466' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='lib/scatterlist.c' line='466' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sgl_alloc' mangled-name='sgl_alloc' filepath='lib/scatterlist.c' line='540' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sgl_alloc'>
+        <parameter type-id='3a47d82b' name='length' filepath='lib/scatterlist.c' line='540' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='lib/scatterlist.c' line='540' column='1'/>
+        <parameter type-id='807869d3' name='nent_p' filepath='lib/scatterlist.c' line='541' column='1'/>
+        <return type-id='bf3ef905'/>
+      </function-decl>
+      <function-decl name='sgl_free' mangled-name='sgl_free' filepath='lib/scatterlist.c' line='592' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sgl_free'>
+        <parameter type-id='bf3ef905' name='sgl' filepath='lib/scatterlist.c' line='592' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__sg_page_iter_start' mangled-name='__sg_page_iter_start' filepath='lib/scatterlist.c' line='600' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sg_page_iter_start'>
+        <parameter type-id='06f723f0' name='piter' filepath='lib/scatterlist.c' line='600' column='1'/>
+        <parameter type-id='bf3ef905' name='sglist' filepath='lib/scatterlist.c' line='601' column='1'/>
+        <parameter type-id='f0981eeb' name='nents' filepath='lib/scatterlist.c' line='601' column='1'/>
+        <parameter type-id='7359adad' name='pgoffset' filepath='lib/scatterlist.c' line='602' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__sg_page_iter_next' mangled-name='__sg_page_iter_next' filepath='lib/scatterlist.c' line='617' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sg_page_iter_next'>
+        <parameter type-id='06f723f0' name='piter' filepath='lib/scatterlist.c' line='617' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='sg_miter_skip' mangled-name='sg_miter_skip' filepath='lib/scatterlist.c' line='726' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_miter_skip'>
+        <parameter type-id='a462f2f9' name='miter' filepath='lib/scatterlist.c' line='726' column='1'/>
+        <parameter type-id='ad707ada' name='offset' filepath='lib/scatterlist.c' line='726' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='sg_pcopy_from_buffer' mangled-name='sg_pcopy_from_buffer' filepath='lib/scatterlist.c' line='921' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_pcopy_from_buffer'>
+        <parameter type-id='bf3ef905' name='sgl' filepath='lib/scatterlist.c' line='921' column='1'/>
+        <parameter type-id='f0981eeb' name='nents' filepath='lib/scatterlist.c' line='921' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='lib/scatterlist.c' line='922' column='1'/>
+        <parameter type-id='b59d7dce' name='buflen' filepath='lib/scatterlist.c' line='922' column='1'/>
+        <parameter type-id='ad707ada' name='skip' filepath='lib/scatterlist.c' line='922' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='sg_pcopy_to_buffer' mangled-name='sg_pcopy_to_buffer' filepath='lib/scatterlist.c' line='939' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_pcopy_to_buffer'>
+        <parameter type-id='bf3ef905' name='sgl' filepath='lib/scatterlist.c' line='939' column='1'/>
+        <parameter type-id='f0981eeb' name='nents' filepath='lib/scatterlist.c' line='939' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='lib/scatterlist.c' line='940' column='1'/>
+        <parameter type-id='b59d7dce' name='buflen' filepath='lib/scatterlist.c' line='940' column='1'/>
+        <parameter type-id='ad707ada' name='skip' filepath='lib/scatterlist.c' line='940' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='sg_zero_buffer' mangled-name='sg_zero_buffer' filepath='lib/scatterlist.c' line='955' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_zero_buffer'>
+        <parameter type-id='bf3ef905' name='sgl' filepath='lib/scatterlist.c' line='955' column='1'/>
+        <parameter type-id='f0981eeb' name='nents' filepath='lib/scatterlist.c' line='955' column='1'/>
+        <parameter type-id='b59d7dce' name='buflen' filepath='lib/scatterlist.c' line='956' column='1'/>
+        <parameter type-id='ad707ada' name='skip' filepath='lib/scatterlist.c' line='956' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/string.c' language='LANG_C89'>
+      <function-decl name='strncasecmp' mangled-name='strncasecmp' filepath='lib/string.c' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strncasecmp'>
+        <parameter type-id='80f4b756' name='s1' filepath='lib/string.c' line='43' column='1'/>
+        <parameter type-id='80f4b756' name='s2' filepath='lib/string.c' line='43' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='lib/string.c' line='43' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='strcasecmp' mangled-name='strcasecmp' filepath='lib/string.c' line='69' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strcasecmp'>
+        <parameter type-id='80f4b756' name='s1' filepath='lib/string.c' line='69' column='1'/>
+        <parameter type-id='80f4b756' name='s2' filepath='lib/string.c' line='69' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='strcpy' mangled-name='strcpy' filepath='lib/string.c' line='89' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strcpy'>
+        <parameter type-id='26a90f95' name='dest' filepath='lib/string.c' line='89' column='1'/>
+        <parameter type-id='80f4b756' name='src' filepath='lib/string.c' line='89' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='strncpy' mangled-name='strncpy' filepath='lib/string.c' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strncpy'>
+        <parameter type-id='26a90f95' name='dest' filepath='lib/string.c' line='114' column='1'/>
+        <parameter type-id='80f4b756' name='src' filepath='lib/string.c' line='114' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/string.c' line='114' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='strlcpy' mangled-name='strlcpy' filepath='lib/string.c' line='141' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strlcpy'>
+        <parameter type-id='26a90f95' name='dest' filepath='lib/string.c' line='141' column='1'/>
+        <parameter type-id='80f4b756' name='src' filepath='lib/string.c' line='141' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='lib/string.c' line='141' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='strcat' mangled-name='strcat' filepath='lib/string.c' line='306' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strcat'>
+        <parameter type-id='26a90f95' name='dest' filepath='lib/string.c' line='306' column='1'/>
+        <parameter type-id='80f4b756' name='src' filepath='lib/string.c' line='306' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='strncat' mangled-name='strncat' filepath='lib/string.c' line='329' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strncat'>
+        <parameter type-id='26a90f95' name='dest' filepath='lib/string.c' line='329' column='1'/>
+        <parameter type-id='80f4b756' name='src' filepath='lib/string.c' line='329' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/string.c' line='329' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='strlcat' mangled-name='strlcat' filepath='lib/string.c' line='355' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strlcat'>
+        <parameter type-id='26a90f95' name='dest' filepath='lib/string.c' line='355' column='1'/>
+        <parameter type-id='80f4b756' name='src' filepath='lib/string.c' line='355' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/string.c' line='355' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='strcspn' mangled-name='strcspn' filepath='lib/string.c' line='608' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strcspn'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/string.c' line='608' column='1'/>
+        <parameter type-id='80f4b756' name='reject' filepath='lib/string.c' line='608' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='strpbrk' mangled-name='strpbrk' filepath='lib/string.c' line='632' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strpbrk'>
+        <parameter type-id='80f4b756' name='cs' filepath='lib/string.c' line='632' column='1'/>
+        <parameter type-id='80f4b756' name='ct' filepath='lib/string.c' line='632' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='__sysfs_match_string' mangled-name='__sysfs_match_string' filepath='lib/string.c' line='738' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sysfs_match_string'>
+        <parameter type-id='13956559' name='array' filepath='lib/string.c' line='738' column='1'/>
+        <parameter type-id='b59d7dce' name='n' filepath='lib/string.c' line='738' column='1'/>
+        <parameter type-id='80f4b756' name='str' filepath='lib/string.c' line='738' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='memset32' mangled-name='memset32' filepath='lib/string.c' line='808' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memset32'>
+        <parameter type-id='90421557' name='s' filepath='lib/string.c' line='808' column='1'/>
+        <parameter type-id='8f92235e' name='v' filepath='lib/string.c' line='808' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/string.c' line='808' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='memset64' mangled-name='memset64' filepath='lib/string.c' line='830' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memset64'>
+        <parameter type-id='5d6479ae' name='s' filepath='lib/string.c' line='830' column='1'/>
+        <parameter type-id='9c313c2d' name='v' filepath='lib/string.c' line='830' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/string.c' line='830' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='bcmp' mangled-name='bcmp' filepath='lib/string.c' line='929' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bcmp'>
+        <parameter type-id='eaa32e2f' name='a' filepath='lib/string.c' line='929' column='1'/>
+        <parameter type-id='eaa32e2f' name='b' filepath='lib/string.c' line='929' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='lib/string.c' line='929' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='memchr_inv' mangled-name='memchr_inv' filepath='lib/string.c' line='1054' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memchr_inv'>
+        <parameter type-id='eaa32e2f' name='start' filepath='lib/string.c' line='1054' column='1'/>
+        <parameter type-id='95e97e5e' name='c' filepath='lib/string.c' line='1054' column='1'/>
+        <parameter type-id='b59d7dce' name='bytes' filepath='lib/string.c' line='1054' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/string_helpers.c' language='LANG_C89'>
+      <enum-decl name='string_size_units' filepath='include/linux/string_helpers.h' line='12' column='1' id='62b4b863'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='STRING_UNITS_10' value='0'/>
+        <enumerator name='STRING_UNITS_2' value='1'/>
+      </enum-decl>
+      <qualified-type-def type-id='62b4b863' const='yes' id='5a685f5f'/>
+      <function-decl name='string_get_size' mangled-name='string_get_size' filepath='lib/string_helpers.c' line='34' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='string_get_size'>
+        <parameter type-id='91ce1af9' name='size' filepath='lib/string_helpers.c' line='34' column='1'/>
+        <parameter type-id='91ce1af9' name='blk_size' filepath='lib/string_helpers.c' line='34' column='1'/>
+        <parameter type-id='5a685f5f' name='units' filepath='lib/string_helpers.c' line='34' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='lib/string_helpers.c' line='35' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='lib/string_helpers.c' line='35' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kstrdup_quotable_cmdline' mangled-name='kstrdup_quotable_cmdline' filepath='lib/string_helpers.c' line='597' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrdup_quotable_cmdline'>
+        <parameter type-id='f23e2572' name='task' filepath='lib/string_helpers.c' line='597' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='lib/string_helpers.c' line='597' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/uuid.c' language='LANG_C89'>
+      <qualified-type-def type-id='ec55eb74' const='yes' id='21109a44'/>
+      <var-decl name='uuid_null' type-id='21109a44' mangled-name='uuid_null' visibility='default' filepath='lib/uuid.c' line='18' column='1' elf-symbol-id='uuid_null'/>
+      <function-decl name='uuid_parse' mangled-name='uuid_parse' filepath='lib/uuid.c' line='119' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uuid_parse'>
+        <parameter type-id='80f4b756' name='uuid' filepath='lib/uuid.c' line='119' column='1'/>
+        <parameter type-id='f1397309' name='u' filepath='lib/uuid.c' line='119' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/vsprintf.c' language='LANG_C89'>
+      <function-decl name='vsnprintf' mangled-name='vsnprintf' filepath='lib/vsprintf.c' line='2465' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vsnprintf'>
+        <parameter type-id='26a90f95' name='buf' filepath='lib/vsprintf.c' line='2465' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='lib/vsprintf.c' line='2465' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/vsprintf.c' line='2465' column='1'/>
+        <parameter type-id='2aee9912' name='args' filepath='lib/vsprintf.c' line='2465' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snprintf' mangled-name='snprintf' filepath='lib/vsprintf.c' line='2662' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snprintf'>
+        <parameter type-id='26a90f95' name='buf' filepath='lib/vsprintf.c' line='2662' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='lib/vsprintf.c' line='2662' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/vsprintf.c' line='2662' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vsprintf' mangled-name='vsprintf' filepath='lib/vsprintf.c' line='2713' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vsprintf'>
+        <parameter type-id='26a90f95' name='buf' filepath='lib/vsprintf.c' line='2713' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/vsprintf.c' line='2713' column='1'/>
+        <parameter type-id='2aee9912' name='args' filepath='lib/vsprintf.c' line='2713' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sprintf' mangled-name='sprintf' filepath='lib/vsprintf.c' line='2731' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sprintf'>
+        <parameter type-id='26a90f95' name='buf' filepath='lib/vsprintf.c' line='2731' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/vsprintf.c' line='2731' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vsscanf' mangled-name='vsscanf' filepath='lib/vsprintf.c' line='3149' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vsscanf'>
+        <parameter type-id='80f4b756' name='buf' filepath='lib/vsprintf.c' line='3149' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/vsprintf.c' line='3149' column='1'/>
+        <parameter type-id='2aee9912' name='args' filepath='lib/vsprintf.c' line='3149' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sscanf' mangled-name='sscanf' filepath='lib/vsprintf.c' line='3436' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sscanf'>
+        <parameter type-id='80f4b756' name='buf' filepath='lib/vsprintf.c' line='3436' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/vsprintf.c' line='3436' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='lib/zlib_inflate/inflate.c' language='LANG_C89'>
+      <typedef-decl name='z_stream' type-id='d19a2f20' filepath='include/linux/zlib.h' line='101' column='1' id='59efae17'/>
+      <pointer-type-def type-id='59efae17' size-in-bits='64' id='369435a4'/>
+      <function-decl name='zlib_inflateIncomp' mangled-name='zlib_inflateIncomp' filepath='lib/zlib_inflate/inflate.c' line='769' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_inflateIncomp'>
+        <parameter type-id='369435a4' name='z' filepath='lib/zlib_inflate/inflate.c' line='769' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/backing-dev.c' language='LANG_C89'>
+      <array-type-def dimensions='2' type-id='7359adad' size-in-bits='192' id='aa5bd681'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='4096' id='56f066f9'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <class-decl name='radix_tree_iter' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/radix-tree.h' line='94' column='1' id='c7ead0f9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='7359adad' visibility='default' filepath='include/linux/radix-tree.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next_index' type-id='7359adad' visibility='default' filepath='include/linux/radix-tree.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tags' type-id='7359adad' visibility='default' filepath='include/linux/radix-tree.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='node' type-id='83f45767' visibility='default' filepath='include/linux/radix-tree.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xa_node' size-in-bits='4608' is-struct='yes' visibility='default' filepath='include/linux/xarray.h' line='1087' column='1' id='9a218d2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='shift' type-id='002ac4a6' visibility='default' filepath='include/linux/xarray.h' line='1088' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='offset' type-id='002ac4a6' visibility='default' filepath='include/linux/xarray.h' line='1089' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='count' type-id='002ac4a6' visibility='default' filepath='include/linux/xarray.h' line='1090' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='nr_values' type-id='002ac4a6' visibility='default' filepath='include/linux/xarray.h' line='1091' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parent' type-id='83f45767' visibility='default' filepath='include/linux/xarray.h' line='1092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='array' type-id='60075f2a' visibility='default' filepath='include/linux/xarray.h' line='1093' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='2db4cfe9' visibility='default' filepath='include/linux/xarray.h' line='1094' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='slots' type-id='56f066f9' visibility='default' filepath='include/linux/xarray.h' line='1098' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='' type-id='65594137' visibility='default' filepath='include/linux/xarray.h' line='1099' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/xarray.h' line='1094' column='1' id='2db4cfe9'>
+        <data-member access='private'>
+          <var-decl name='private_list' type-id='72f469ec' visibility='default' filepath='include/linux/xarray.h' line='1095' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/xarray.h' line='1096' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/xarray.h' line='1099' column='1' id='65594137'>
+        <data-member access='private'>
+          <var-decl name='tags' type-id='aa5bd681' visibility='default' filepath='include/linux/xarray.h' line='1100' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='marks' type-id='aa5bd681' visibility='default' filepath='include/linux/xarray.h' line='1101' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='c7ead0f9' size-in-bits='64' id='0cbbabe1'/>
+      <pointer-type-def type-id='9a218d2f' size-in-bits='64' id='83f45767'/>
+      <function-decl name='radix_tree_next_chunk' mangled-name='radix_tree_next_chunk' filepath='include/linux/radix-tree.h' line='297' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='radix_tree_next_chunk'>
+        <parameter type-id='bb0f13d1'/>
+        <parameter type-id='0cbbabe1'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='63e171df'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/cleancache.c' language='LANG_C89'>
+      <function-decl name='debugfs_create_u64' mangled-name='debugfs_create_u64' filepath='include/linux/debugfs.h' line='107' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_u64'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='c0190993'/>
+        <return type-id='27675065'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/cma.c' language='LANG_C89'>
+      <qualified-type-def type-id='6110442c' const='yes' id='4b11cd33'/>
+      <pointer-type-def type-id='4b11cd33' size-in-bits='64' id='4605de5b'/>
+      <pointer-type-def type-id='135de8a2' size-in-bits='64' id='0b3f2e4c'/>
+      <function-decl name='cma_get_name' mangled-name='cma_get_name' filepath='mm/cma.c' line='54' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cma_get_name'>
+        <parameter type-id='4605de5b' name='cma' filepath='mm/cma.c' line='54' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='cma_for_each_area' mangled-name='cma_for_each_area' filepath='mm/cma.c' line='534' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cma_for_each_area'>
+        <parameter type-id='0b3f2e4c' name='it' filepath='mm/cma.c' line='534' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='mm/cma.c' line='534' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='135de8a2'>
+        <parameter type-id='6f67b38a'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/compaction.c' language='LANG_C89'>
+      <function-decl name='__SetPageMovable' mangled-name='__SetPageMovable' filepath='mm/compaction.c' line='112' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__SetPageMovable'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/compaction.c' line='112' column='1'/>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/compaction.c' line='112' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__ClearPageMovable' mangled-name='__ClearPageMovable' filepath='mm/compaction.c' line='120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ClearPageMovable'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/compaction.c' line='120' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/debug.c' language='LANG_C89'>
+      <function-decl name='dump_page' mangled-name='dump_page' filepath='mm/debug.c' line='111' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dump_page'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/debug.c' line='111' column='1'/>
+        <parameter type-id='80f4b756' name='reason' filepath='mm/debug.c' line='111' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/dmapool.c' language='LANG_C89'>
+      <function-decl name='dma_pool_create' mangled-name='dma_pool_create' filepath='mm/dmapool.c' line='130' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_pool_create'>
+        <parameter type-id='80f4b756' name='name' filepath='mm/dmapool.c' line='130' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='mm/dmapool.c' line='130' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='mm/dmapool.c' line='131' column='1'/>
+        <parameter type-id='b59d7dce' name='align' filepath='mm/dmapool.c' line='131' column='1'/>
+        <parameter type-id='b59d7dce' name='boundary' filepath='mm/dmapool.c' line='131' column='1'/>
+        <return type-id='ab33c616'/>
+      </function-decl>
+      <function-decl name='dma_pool_destroy' mangled-name='dma_pool_destroy' filepath='mm/dmapool.c' line='269' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_pool_destroy'>
+        <parameter type-id='ab33c616' name='pool' filepath='mm/dmapool.c' line='269' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_pool_alloc' mangled-name='dma_pool_alloc' filepath='mm/dmapool.c' line='319' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_pool_alloc'>
+        <parameter type-id='ab33c616' name='pool' filepath='mm/dmapool.c' line='319' column='1'/>
+        <parameter type-id='3eb7c31c' name='mem_flags' filepath='mm/dmapool.c' line='319' column='1'/>
+        <parameter type-id='e835b5d8' name='handle' filepath='mm/dmapool.c' line='320' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='dma_pool_free' mangled-name='dma_pool_free' filepath='mm/dmapool.c' line='410' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_pool_free'>
+        <parameter type-id='ab33c616' name='pool' filepath='mm/dmapool.c' line='410' column='1'/>
+        <parameter type-id='eaa32e2f' name='vaddr' filepath='mm/dmapool.c' line='410' column='1'/>
+        <parameter type-id='cf29c9b3' name='dma' filepath='mm/dmapool.c' line='410' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dmam_pool_create' mangled-name='dmam_pool_create' filepath='mm/dmapool.c' line='506' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dmam_pool_create'>
+        <parameter type-id='80f4b756' name='name' filepath='mm/dmapool.c' line='506' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='mm/dmapool.c' line='506' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='mm/dmapool.c' line='507' column='1'/>
+        <parameter type-id='b59d7dce' name='align' filepath='mm/dmapool.c' line='507' column='1'/>
+        <parameter type-id='b59d7dce' name='allocation' filepath='mm/dmapool.c' line='507' column='1'/>
+        <return type-id='ab33c616'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/filemap.c' language='LANG_C89'>
+      <function-decl name='page_mapping' mangled-name='page_mapping' filepath='include/linux/mm.h' line='1469' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='page_mapping'>
+        <parameter type-id='02f11ed4'/>
+        <return type-id='f57039f0'/>
+      </function-decl>
+      <function-decl name='filemap_fdatawrite_range' mangled-name='filemap_fdatawrite_range' filepath='mm/filemap.c' line='438' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='filemap_fdatawrite_range'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/filemap.c' line='438' column='1'/>
+        <parameter type-id='69bf7bee' name='start' filepath='mm/filemap.c' line='438' column='1'/>
+        <parameter type-id='69bf7bee' name='end' filepath='mm/filemap.c' line='439' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='filemap_fdatawait_range' mangled-name='filemap_fdatawait_range' filepath='mm/filemap.c' line='550' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='filemap_fdatawait_range'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/filemap.c' line='550' column='1'/>
+        <parameter type-id='69bf7bee' name='start_byte' filepath='mm/filemap.c' line='550' column='1'/>
+        <parameter type-id='69bf7bee' name='end_byte' filepath='mm/filemap.c' line='551' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__lock_page' mangled-name='__lock_page' filepath='mm/filemap.c' line='1379' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__lock_page'>
+        <parameter type-id='02f11ed4' name='__page' filepath='mm/filemap.c' line='1379' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='generic_file_read_iter' mangled-name='generic_file_read_iter' filepath='mm/filemap.c' line='2274' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_file_read_iter'>
+        <parameter type-id='80f25feb' name='iocb' filepath='mm/filemap.c' line='2274' column='1'/>
+        <parameter type-id='4fa10f9e' name='iter' filepath='mm/filemap.c' line='2274' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='set_page_dirty' mangled-name='set_page_dirty' filepath='include/linux/mm.h' line='1692' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_page_dirty'>
+        <parameter type-id='02f11ed4'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='generic_file_mmap' mangled-name='generic_file_mmap' filepath='mm/filemap.c' line='2705' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_file_mmap'>
+        <parameter type-id='77e79a4b' name='file' filepath='mm/filemap.c' line='2705' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='mm/filemap.c' line='2705' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='invalidate_mapping_pages' mangled-name='invalidate_mapping_pages' filepath='include/linux/fs.h' line='2802' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='invalidate_mapping_pages'>
+        <parameter type-id='f57039f0'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='generic_file_write_iter' mangled-name='generic_file_write_iter' filepath='mm/filemap.c' line='3444' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_file_write_iter'>
+        <parameter type-id='80f25feb' name='iocb' filepath='mm/filemap.c' line='3444' column='1'/>
+        <parameter type-id='4fa10f9e' name='from' filepath='mm/filemap.c' line='3444' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/frame_vector.c' language='LANG_C89'>
+      <class-decl name='frame_vector' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mm.h' line='1633' column='1' id='df80a1e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_allocated' type-id='f0981eeb' visibility='default' filepath='include/linux/mm.h' line='1634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr_frames' type-id='f0981eeb' visibility='default' filepath='include/linux/mm.h' line='1635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='got_ref' type-id='b50a4934' visibility='default' filepath='include/linux/mm.h' line='1636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='is_pfns' type-id='b50a4934' visibility='default' filepath='include/linux/mm.h' line='1637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ptrs' type-id='baf98fd3' visibility='default' filepath='include/linux/mm.h' line='1638' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='df80a1e0' size-in-bits='64' id='d9fbdc06'/>
+      <function-decl name='get_vaddr_frames' mangled-name='get_vaddr_frames' filepath='mm/frame_vector.c' line='34' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_vaddr_frames'>
+        <parameter type-id='7359adad' name='start' filepath='mm/frame_vector.c' line='34' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_frames' filepath='mm/frame_vector.c' line='34' column='1'/>
+        <parameter type-id='f0981eeb' name='gup_flags' filepath='mm/frame_vector.c' line='35' column='1'/>
+        <parameter type-id='d9fbdc06' name='vec' filepath='mm/frame_vector.c' line='35' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='put_vaddr_frames' mangled-name='put_vaddr_frames' filepath='mm/frame_vector.c' line='123' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='put_vaddr_frames'>
+        <parameter type-id='d9fbdc06' name='vec' filepath='mm/frame_vector.c' line='123' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='frame_vector_to_pages' mangled-name='frame_vector_to_pages' filepath='mm/frame_vector.c' line='154' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='frame_vector_to_pages'>
+        <parameter type-id='d9fbdc06' name='vec' filepath='mm/frame_vector.c' line='154' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='frame_vector_to_pfns' mangled-name='frame_vector_to_pfns' filepath='mm/frame_vector.c' line='180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='frame_vector_to_pfns'>
+        <parameter type-id='d9fbdc06' name='vec' filepath='mm/frame_vector.c' line='180' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='frame_vector_create' mangled-name='frame_vector_create' filepath='mm/frame_vector.c' line='203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='frame_vector_create'>
+        <parameter type-id='f0981eeb' name='nr_frames' filepath='mm/frame_vector.c' line='203' column='1'/>
+        <return type-id='d9fbdc06'/>
+      </function-decl>
+      <function-decl name='frame_vector_destroy' mangled-name='frame_vector_destroy' filepath='mm/frame_vector.c' line='235' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='frame_vector_destroy'>
+        <parameter type-id='d9fbdc06' name='vec' filepath='mm/frame_vector.c' line='235' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/memblock.c' language='LANG_C89'>
+      <var-decl name='contig_page_data' type-id='54406315' mangled-name='contig_page_data' visibility='default' filepath='mm/memblock.c' line='99' column='1' elf-symbol-id='contig_page_data'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/memory.c' language='LANG_C89'>
+      <typedef-decl name='pfn_t' type-id='8444d1f8' filepath='include/linux/pfn.h' line='15' column='1' id='abe59ef3'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='abe59ef3' visibility='default' filepath='include/linux/pfn.h' line='13' column='1' id='8444d1f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='91ce1af9' visibility='default' filepath='include/linux/pfn.h' line='14' column='1'/>
+        </data-member>
+      </class-decl>
+      <function-decl name='vm_insert_page' mangled-name='vm_insert_page' filepath='mm/memory.c' line='1515' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vm_insert_page'>
+        <parameter type-id='2ae08426' name='vma' filepath='mm/memory.c' line='1515' column='1'/>
+        <parameter type-id='7359adad' name='addr' filepath='mm/memory.c' line='1515' column='1'/>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/memory.c' line='1516' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vm_map_pages' mangled-name='vm_map_pages' filepath='mm/memory.c' line='1585' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vm_map_pages'>
+        <parameter type-id='2ae08426' name='vma' filepath='mm/memory.c' line='1585' column='1'/>
+        <parameter type-id='9f93c9da' name='pages' filepath='mm/memory.c' line='1585' column='1'/>
+        <parameter type-id='7359adad' name='num' filepath='mm/memory.c' line='1586' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vmf_insert_pfn_prot' mangled-name='vmf_insert_pfn_prot' filepath='mm/memory.c' line='1683' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vmf_insert_pfn_prot'>
+        <parameter type-id='2ae08426' name='vma' filepath='mm/memory.c' line='1683' column='1'/>
+        <parameter type-id='7359adad' name='addr' filepath='mm/memory.c' line='1683' column='1'/>
+        <parameter type-id='7359adad' name='pfn' filepath='mm/memory.c' line='1684' column='1'/>
+        <parameter type-id='2e2dcbd3' name='pgprot' filepath='mm/memory.c' line='1684' column='1'/>
+        <return type-id='e9265215'/>
+      </function-decl>
+      <function-decl name='vmf_insert_pfn' mangled-name='vmf_insert_pfn' filepath='mm/memory.c' line='1731' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vmf_insert_pfn'>
+        <parameter type-id='2ae08426' name='vma' filepath='mm/memory.c' line='1731' column='1'/>
+        <parameter type-id='7359adad' name='addr' filepath='mm/memory.c' line='1731' column='1'/>
+        <parameter type-id='7359adad' name='pfn' filepath='mm/memory.c' line='1732' column='1'/>
+        <return type-id='e9265215'/>
+      </function-decl>
+      <function-decl name='vmf_insert_mixed' mangled-name='vmf_insert_mixed' filepath='mm/memory.c' line='1798' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vmf_insert_mixed'>
+        <parameter type-id='2ae08426' name='vma' filepath='mm/memory.c' line='1798' column='1'/>
+        <parameter type-id='7359adad' name='addr' filepath='mm/memory.c' line='1798' column='1'/>
+        <parameter type-id='abe59ef3' name='pfn' filepath='mm/memory.c' line='1799' column='1'/>
+        <return type-id='e9265215'/>
+      </function-decl>
+      <function-decl name='vm_iomap_memory' mangled-name='vm_iomap_memory' filepath='mm/memory.c' line='2001' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vm_iomap_memory'>
+        <parameter type-id='2ae08426' name='vma' filepath='mm/memory.c' line='2001' column='1'/>
+        <parameter type-id='2522883d' name='start' filepath='mm/memory.c' line='2001' column='1'/>
+        <parameter type-id='7359adad' name='len' filepath='mm/memory.c' line='2001' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/mempool.c' language='LANG_C89'>
+      <pointer-type-def type-id='2745fad8' size-in-bits='64' id='78713e8f'/>
+      <function-decl name='mempool_destroy' mangled-name='mempool_destroy' filepath='mm/mempool.c' line='170' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mempool_destroy'>
+        <parameter type-id='78713e8f' name='pool' filepath='mm/mempool.c' line='170' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mempool_create' mangled-name='mempool_create' filepath='mm/mempool.c' line='253' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mempool_create'>
+        <parameter type-id='95e97e5e' name='min_nr' filepath='mm/mempool.c' line='253' column='1'/>
+        <parameter type-id='8bf6d789' name='alloc_fn' filepath='mm/mempool.c' line='253' column='1'/>
+        <parameter type-id='a4c19f22' name='free_fn' filepath='mm/mempool.c' line='254' column='1'/>
+        <parameter type-id='eaa32e2f' name='pool_data' filepath='mm/mempool.c' line='254' column='1'/>
+        <return type-id='78713e8f'/>
+      </function-decl>
+      <function-decl name='mempool_create_node' mangled-name='mempool_create_node' filepath='mm/mempool.c' line='261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mempool_create_node'>
+        <parameter type-id='95e97e5e' name='min_nr' filepath='mm/mempool.c' line='261' column='1'/>
+        <parameter type-id='8bf6d789' name='alloc_fn' filepath='mm/mempool.c' line='261' column='1'/>
+        <parameter type-id='a4c19f22' name='free_fn' filepath='mm/mempool.c' line='262' column='1'/>
+        <parameter type-id='eaa32e2f' name='pool_data' filepath='mm/mempool.c' line='262' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='mm/mempool.c' line='263' column='1'/>
+        <parameter type-id='95e97e5e' name='node_id' filepath='mm/mempool.c' line='263' column='1'/>
+        <return type-id='78713e8f'/>
+      </function-decl>
+      <function-decl name='mempool_alloc_slab' mangled-name='mempool_alloc_slab' filepath='mm/mempool.c' line='509' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mempool_alloc_slab'>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='mm/mempool.c' line='509' column='1'/>
+        <parameter type-id='eaa32e2f' name='pool_data' filepath='mm/mempool.c' line='509' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='mempool_free_slab' mangled-name='mempool_free_slab' filepath='mm/mempool.c' line='517' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mempool_free_slab'>
+        <parameter type-id='eaa32e2f' name='element' filepath='mm/mempool.c' line='517' column='1'/>
+        <parameter type-id='eaa32e2f' name='pool_data' filepath='mm/mempool.c' line='517' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mempool_kmalloc' mangled-name='mempool_kmalloc' filepath='mm/mempool.c' line='528' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mempool_kmalloc'>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='mm/mempool.c' line='528' column='1'/>
+        <parameter type-id='eaa32e2f' name='pool_data' filepath='mm/mempool.c' line='528' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='mempool_kfree' mangled-name='mempool_kfree' filepath='mm/mempool.c' line='535' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mempool_kfree'>
+        <parameter type-id='eaa32e2f' name='element' filepath='mm/mempool.c' line='535' column='1'/>
+        <parameter type-id='eaa32e2f' name='pool_data' filepath='mm/mempool.c' line='535' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/migrate.c' language='LANG_C89'>
+      <function-decl name='buffer_migrate_page' mangled-name='buffer_migrate_page' filepath='mm/migrate.c' line='826' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='buffer_migrate_page'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/migrate.c' line='826' column='1'/>
+        <parameter type-id='02f11ed4' name='newpage' filepath='mm/migrate.c' line='827' column='1'/>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/migrate.c' line='827' column='1'/>
+        <parameter type-id='157252dd' name='mode' filepath='mm/migrate.c' line='827' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unlock_buffer' mangled-name='unlock_buffer' filepath='include/linux/buffer_head.h' line='199' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unlock_buffer'>
+        <parameter type-id='c485c22c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/mmap.c' language='LANG_C89'>
+      <function-decl name='vm_get_page_prot' mangled-name='vm_get_page_prot' filepath='mm/mmap.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vm_get_page_prot'>
+        <parameter type-id='7359adad' name='vm_flags' filepath='mm/mmap.c' line='106' column='1'/>
+        <return type-id='2e2dcbd3'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/mmu_context.c' language='LANG_C89'>
+      <function-decl name='use_mm' mangled-name='use_mm' filepath='mm/mmu_context.c' line='22' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='use_mm'>
+        <parameter type-id='df4b7819' name='mm' filepath='mm/mmu_context.c' line='22' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='unuse_mm' mangled-name='unuse_mm' filepath='mm/mmu_context.c' line='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unuse_mm'>
+        <parameter type-id='df4b7819' name='mm' filepath='mm/mmu_context.c' line='56' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/page-writeback.c' language='LANG_C89'>
+      <function-decl name='dec_zone_page_state' mangled-name='dec_zone_page_state' filepath='include/linux/vmstat.h' line='253' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dec_zone_page_state'>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='a1f2d9a1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='set_page_dirty_lock' mangled-name='set_page_dirty_lock' filepath='mm/page-writeback.c' line='2592' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_page_dirty_lock'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/page-writeback.c' line='2592' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/page_alloc.c' language='LANG_C89'>
+      <pointer-type-def type-id='6a7d16bb' size-in-bits='64' id='f461c050'/>
+      <var-decl name='_totalram_pages' type-id='f22a8abb' mangled-name='_totalram_pages' visibility='default' filepath='mm/page_alloc.c' line='132' column='1' elf-symbol-id='_totalram_pages'/>
+      <function-decl name='__free_pages' mangled-name='__free_pages' filepath='mm/page_alloc.c' line='4920' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__free_pages'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/page_alloc.c' line='4920' column='1'/>
+        <parameter type-id='f0981eeb' name='order' filepath='mm/page_alloc.c' line='4920' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='adjust_managed_page_count' mangled-name='adjust_managed_page_count' filepath='mm/page_alloc.c' line='7594' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='adjust_managed_page_count'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/page_alloc.c' line='7594' column='1'/>
+        <parameter type-id='bd54fe1a' name='count' filepath='mm/page_alloc.c' line='7594' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__alloc_pages_nodemask' mangled-name='__alloc_pages_nodemask' filepath='mm/page_alloc.c' line='4824' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__alloc_pages_nodemask'>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='mm/page_alloc.c' line='4824' column='1'/>
+        <parameter type-id='f0981eeb' name='order' filepath='mm/page_alloc.c' line='4824' column='1'/>
+        <parameter type-id='95e97e5e' name='preferred_nid' filepath='mm/page_alloc.c' line='4824' column='1'/>
+        <parameter type-id='f461c050' name='nodemask' filepath='mm/page_alloc.c' line='4825' column='1'/>
+        <return type-id='02f11ed4'/>
+      </function-decl>
+      <function-decl name='__get_free_pages' mangled-name='__get_free_pages' filepath='mm/page_alloc.c' line='4895' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__get_free_pages'>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='mm/page_alloc.c' line='4895' column='1'/>
+        <parameter type-id='f0981eeb' name='order' filepath='mm/page_alloc.c' line='4895' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/page_io.c' language='LANG_C89'>
+      <function-decl name='bmap' mangled-name='bmap' filepath='include/linux/fs.h' line='2967' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bmap'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='3a47d82b'/>
+        <return type-id='3a47d82b'/>
+      </function-decl>
+      <function-decl name='iov_iter_bvec' mangled-name='iov_iter_bvec' filepath='include/linux/uio.h' line='220' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iov_iter_bvec'>
+        <parameter type-id='4fa10f9e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='15c9a01b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='submit_bio' mangled-name='submit_bio' filepath='include/linux/bio.h' line='413' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='submit_bio'>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='blk_poll' mangled-name='blk_poll' filepath='include/linux/blkdev.h' line='904' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_poll'>
+        <parameter type-id='e7d2a5fd'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/percpu.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='2048' id='bc3af5fa'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <var-decl name='__per_cpu_offset' type-id='bc3af5fa' mangled-name='__per_cpu_offset' visibility='default' filepath='mm/percpu.c' line='2946' column='1' elf-symbol-id='__per_cpu_offset'/>
+      <function-decl name='__alloc_percpu' mangled-name='__alloc_percpu' filepath='mm/percpu.c' line='1794' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__alloc_percpu'>
+        <parameter type-id='b59d7dce' name='size' filepath='mm/percpu.c' line='1794' column='1'/>
+        <parameter type-id='b59d7dce' name='align' filepath='mm/percpu.c' line='1794' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/process_vm_access.c' language='LANG_C89'>
+      <class-decl name='bio_vec' is-struct='yes' visibility='default' is-declaration-only='yes' id='40af3609'/>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='39' column='1' id='9b26deef'>
+        <data-member access='private'>
+          <var-decl name='iov' type-id='2c556848' visibility='default' filepath='include/linux/uio.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='kvec' type-id='5199c30d' visibility='default' filepath='include/linux/uio.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='bvec' type-id='15c9a01c' visibility='default' filepath='include/linux/uio.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='pipe' type-id='15d29711' visibility='default' filepath='include/linux/uio.h' line='43' column='1'/>
+        </data-member>
+      </union-decl>
+      <qualified-type-def type-id='40af3609' const='yes' id='e70f1c74'/>
+      <pointer-type-def type-id='e70f1c74' size-in-bits='64' id='15c9a01c'/>
+      <pointer-type-def type-id='0f042891' size-in-bits='64' id='cc4b1be9'/>
+      <pointer-type-def type-id='cc4b1be9' size-in-bits='64' id='5d3cb3f9'/>
+      <function-decl name='import_iovec' mangled-name='import_iovec' filepath='include/linux/uio.h' line='276' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='import_iovec'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='2c556848'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='5d3cb3f9'/>
+        <parameter type-id='4fa10f9e'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/shmem.c' language='LANG_C89'>
+      <pointer-type-def type-id='8425539a' size-in-bits='64' id='8567d8b4'/>
+      <qualified-type-def type-id='a9ef191f' const='yes' id='66bd4388'/>
+      <pointer-type-def type-id='66bd4388' size-in-bits='64' id='5df17806'/>
+      <function-decl name='shmem_truncate_range' mangled-name='shmem_truncate_range' filepath='mm/shmem.c' line='990' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='shmem_truncate_range'>
+        <parameter type-id='7e666abe' name='inode' filepath='mm/shmem.c' line='990' column='1'/>
+        <parameter type-id='69bf7bee' name='lstart' filepath='mm/shmem.c' line='990' column='1'/>
+        <parameter type-id='69bf7bee' name='lend' filepath='mm/shmem.c' line='990' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kern_mount' mangled-name='kern_mount' filepath='include/linux/fs.h' line='2392' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kern_mount'>
+        <parameter type-id='21e53d44'/>
+        <return type-id='549da823'/>
+      </function-decl>
+      <function-decl name='uuid_gen' mangled-name='uuid_gen' filepath='include/linux/uuid.h' line='69' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uuid_gen'>
+        <parameter type-id='8567d8b4'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='setattr_copy' mangled-name='setattr_copy' filepath='include/linux/fs.h' line='3462' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='setattr_copy'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='5df17806'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ihold' mangled-name='ihold' filepath='include/linux/fs.h' line='2414' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ihold'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/slab_common.c' language='LANG_C89'>
+      <array-type-def dimensions='2' type-id='f3b4aca8' size-in-bits='1792' id='5a527497'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f3b4aca8' size-in-bits='infinite' id='c66d33bc'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='42c7aae7' size-in-bits='64' id='425436e6'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <class-decl name='kmem_cache_cpu' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/slub_def.h' line='41' column='1' id='8696da2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='freelist' type-id='63e171df' visibility='default' filepath='include/linux/slub_def.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tid' type-id='7359adad' visibility='default' filepath='include/linux/slub_def.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='page' type-id='02f11ed4' visibility='default' filepath='include/linux/slub_def.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='partial' type-id='02f11ed4' visibility='default' filepath='include/linux/slub_def.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kmem_cache_order_objects' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/slub_def.h' line='75' column='1' id='dfc42026'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_cache_params' size-in-bits='1280' is-struct='yes' visibility='default' filepath='mm/slab.h' line='73' column='1' id='f36112b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root_cache' type-id='f3b4aca8' visibility='default' filepath='mm/slab.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='8305e8d4' visibility='default' filepath='mm/slab.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='1216' is-anonymous='yes' visibility='default' filepath='mm/slab.h' line='75' column='1' id='8305e8d4'>
+        <data-member access='private'>
+          <var-decl name='' type-id='22e2627b' visibility='default' filepath='mm/slab.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='b5fecf67' visibility='default' filepath='mm/slab.h' line='82' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='mm/slab.h' line='76' column='1' id='22e2627b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='memcg_caches' type-id='2c8ce02f' visibility='default' filepath='mm/slab.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='__root_caches_node' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dying' type-id='b50a4934' visibility='default' filepath='mm/slab.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_cache_array' size-in-bits='128' is-struct='yes' visibility='default' filepath='mm/slab.h' line='35' column='1' id='dbef6377'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='mm/slab.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entries' type-id='c66d33bc' visibility='default' filepath='mm/slab.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='1216' is-struct='yes' is-anonymous='yes' visibility='default' filepath='mm/slab.h' line='82' column='1' id='b5fecf67'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='memcg' type-id='223696fc' visibility='default' filepath='mm/slab.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='children_node' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='kmem_caches_node' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='mm/slab.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='work_fn' type-id='8a4f2b79' visibility='default' filepath='mm/slab.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='' type-id='436b4ed4' visibility='default' filepath='mm/slab.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='384' is-anonymous='yes' visibility='default' filepath='mm/slab.h' line='89' column='1' id='436b4ed4'>
+        <data-member access='private'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='mm/slab.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='mm/slab.h' line='91' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='kmem_cache_node' size-in-bits='512' is-struct='yes' visibility='default' filepath='mm/slab.h' line='598' column='1' id='edac1e8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list_lock' type-id='fb4018a0' visibility='default' filepath='mm/slab.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_partial' type-id='7359adad' visibility='default' filepath='mm/slab.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='partial' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nr_slabs' type-id='f22a8abb' visibility='default' filepath='mm/slab.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='total_objects' type-id='f22a8abb' visibility='default' filepath='mm/slab.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='full' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='622' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='8696da2b' size-in-bits='64' id='75f3cc0b'/>
+      <pointer-type-def type-id='edac1e8f' size-in-bits='64' id='42c7aae7'/>
+      <pointer-type-def type-id='dbef6377' size-in-bits='64' id='2c8ce02f'/>
+      <pointer-type-def type-id='ad0ff4ed' size-in-bits='64' id='8a4f2b79'/>
+      <var-decl name='kmalloc_caches' type-id='5a527497' mangled-name='kmalloc_caches' visibility='default' filepath='mm/slab_common.c' line='1115' column='1' elf-symbol-id='kmalloc_caches'/>
+      <function-decl name='kmalloc_order' mangled-name='kmalloc_order' filepath='mm/slab_common.c' line='1335' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmalloc_order'>
+        <parameter type-id='b59d7dce' name='size' filepath='mm/slab_common.c' line='1335' column='1'/>
+        <parameter type-id='3eb7c31c' name='flags' filepath='mm/slab_common.c' line='1335' column='1'/>
+        <parameter type-id='f0981eeb' name='order' filepath='mm/slab_common.c' line='1335' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='ksize' mangled-name='ksize' filepath='mm/slab_common.c' line='1786' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ksize'>
+        <parameter type-id='eaa32e2f' name='objp' filepath='mm/slab_common.c' line='1786' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='ad0ff4ed'>
+        <parameter type-id='f3b4aca8'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/slub.c' language='LANG_C89'>
+      <function-decl name='kmem_cache_free_bulk' mangled-name='kmem_cache_free_bulk' filepath='mm/slub.c' line='3192' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_free_bulk'>
+        <parameter type-id='f3b4aca8' name='s' filepath='mm/slub.c' line='3192' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='mm/slub.c' line='3192' column='1'/>
+        <parameter type-id='63e171df' name='p' filepath='mm/slub.c' line='3192' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__kmalloc' mangled-name='__kmalloc' filepath='mm/slub.c' line='3886' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kmalloc'>
+        <parameter type-id='b59d7dce' name='size' filepath='mm/slub.c' line='3886' column='1'/>
+        <parameter type-id='3eb7c31c' name='flags' filepath='mm/slub.c' line='3886' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='kset_unregister' mangled-name='kset_unregister' filepath='include/linux/kobject.h' line='218' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kset_unregister'>
+        <parameter type-id='89b70200'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/swap.c' language='LANG_C89'>
+      <function-decl name='__put_page' mangled-name='__put_page' filepath='mm/swap.c' line='100' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__put_page'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/swap.c' line='100' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='release_pages' mangled-name='release_pages' filepath='mm/swap.c' line='760' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='release_pages'>
+        <parameter type-id='9f93c9da' name='pages' filepath='mm/swap.c' line='760' column='1'/>
+        <parameter type-id='95e97e5e' name='nr' filepath='mm/swap.c' line='760' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/swapfile.c' language='LANG_C89'>
+      <var-decl name='nr_swap_pages' type-id='f22a8abb' mangled-name='nr_swap_pages' visibility='default' filepath='mm/swapfile.c' line='55' column='1' elf-symbol-id='nr_swap_pages'/>
+      <function-decl name='blkdev_put' mangled-name='blkdev_put' filepath='include/linux/fs.h' line='2723' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blkdev_put'>
+        <parameter type-id='b88dd945'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/truncate.c' language='LANG_C89'>
+      <function-decl name='generic_error_remove_page' mangled-name='generic_error_remove_page' filepath='mm/truncate.c' line='235' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_error_remove_page'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/truncate.c' line='235' column='1'/>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/truncate.c' line='235' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='truncate_inode_pages_final' mangled-name='truncate_inode_pages_final' filepath='mm/truncate.c' line='489' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='truncate_inode_pages_final'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/truncate.c' line='489' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='truncate_pagecache' mangled-name='truncate_pagecache' filepath='mm/truncate.c' line='802' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='truncate_pagecache'>
+        <parameter type-id='7e666abe' name='inode' filepath='mm/truncate.c' line='802' column='1'/>
+        <parameter type-id='69bf7bee' name='newsize' filepath='mm/truncate.c' line='802' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='unmap_mapping_range' mangled-name='unmap_mapping_range' filepath='include/linux/mm.h' line='1576' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unmap_mapping_range'>
+        <parameter type-id='f57039f0'/>
+        <parameter type-id='1eb56b1e'/>
+        <parameter type-id='1eb56b1e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/usercopy.c' language='LANG_C89'>
+      <function-decl name='__check_object_size' mangled-name='__check_object_size' filepath='mm/usercopy.c' line='256' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__check_object_size'>
+        <parameter type-id='eaa32e2f' name='ptr' filepath='mm/usercopy.c' line='256' column='1'/>
+        <parameter type-id='7359adad' name='n' filepath='mm/usercopy.c' line='256' column='1'/>
+        <parameter type-id='b50a4934' name='to_user' filepath='mm/usercopy.c' line='256' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/util.c' language='LANG_C89'>
+      <function-decl name='kmemdup' mangled-name='kmemdup' filepath='mm/util.c' line='123' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmemdup'>
+        <parameter type-id='eaa32e2f' name='src' filepath='mm/util.c' line='123' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='mm/util.c' line='123' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='mm/util.c' line='123' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/vmalloc.c' language='LANG_C89'>
+      <function-decl name='register_vmap_purge_notifier' mangled-name='register_vmap_purge_notifier' filepath='mm/vmalloc.c' line='1155' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_vmap_purge_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='mm/vmalloc.c' line='1155' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_vmap_purge_notifier' mangled-name='unregister_vmap_purge_notifier' filepath='mm/vmalloc.c' line='1161' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_vmap_purge_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='mm/vmalloc.c' line='1161' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vmap' mangled-name='vmap' filepath='mm/vmalloc.c' line='2372' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vmap'>
+        <parameter type-id='9f93c9da' name='pages' filepath='mm/vmalloc.c' line='2372' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='mm/vmalloc.c' line='2372' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='mm/vmalloc.c' line='2373' column='1'/>
+        <parameter type-id='2e2dcbd3' name='prot' filepath='mm/vmalloc.c' line='2373' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='__vmalloc' mangled-name='__vmalloc' filepath='mm/vmalloc.c' line='2558' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__vmalloc'>
+        <parameter type-id='7359adad' name='size' filepath='mm/vmalloc.c' line='2558' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='mm/vmalloc.c' line='2558' column='1'/>
+        <parameter type-id='2e2dcbd3' name='prot' filepath='mm/vmalloc.c' line='2558' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='vmalloc_user' mangled-name='vmalloc_user' filepath='mm/vmalloc.c' line='2627' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vmalloc_user'>
+        <parameter type-id='7359adad' name='size' filepath='mm/vmalloc.c' line='2627' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='remap_vmalloc_range' mangled-name='remap_vmalloc_range' filepath='mm/vmalloc.c' line='3055' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='remap_vmalloc_range'>
+        <parameter type-id='2ae08426' name='vma' filepath='mm/vmalloc.c' line='3055' column='1'/>
+        <parameter type-id='eaa32e2f' name='addr' filepath='mm/vmalloc.c' line='3055' column='1'/>
+        <parameter type-id='7359adad' name='pgoff' filepath='mm/vmalloc.c' line='3056' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/vmscan.c' language='LANG_C89'>
+      <function-decl name='unregister_shrinker' mangled-name='unregister_shrinker' filepath='mm/vmscan.c' line='446' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_shrinker'>
+        <parameter type-id='4be14597' name='shrinker' filepath='mm/vmscan.c' line='446' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='mm/vmstat.c' language='LANG_C89'>
+      <enum-decl name='node_stat_item' filepath='include/linux/mmzone.h' line='215' column='1' id='93f9c3d3'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NR_LRU_BASE' value='0'/>
+        <enumerator name='NR_INACTIVE_ANON' value='0'/>
+        <enumerator name='NR_ACTIVE_ANON' value='1'/>
+        <enumerator name='NR_INACTIVE_FILE' value='2'/>
+        <enumerator name='NR_ACTIVE_FILE' value='3'/>
+        <enumerator name='NR_UNEVICTABLE' value='4'/>
+        <enumerator name='NR_SLAB_RECLAIMABLE' value='5'/>
+        <enumerator name='NR_SLAB_UNRECLAIMABLE' value='6'/>
+        <enumerator name='NR_ISOLATED_ANON' value='7'/>
+        <enumerator name='NR_ISOLATED_FILE' value='8'/>
+        <enumerator name='WORKINGSET_NODES' value='9'/>
+        <enumerator name='WORKINGSET_REFAULT' value='10'/>
+        <enumerator name='WORKINGSET_ACTIVATE' value='11'/>
+        <enumerator name='WORKINGSET_RESTORE' value='12'/>
+        <enumerator name='WORKINGSET_NODERECLAIM' value='13'/>
+        <enumerator name='NR_ANON_MAPPED' value='14'/>
+        <enumerator name='NR_FILE_MAPPED' value='15'/>
+        <enumerator name='NR_FILE_PAGES' value='16'/>
+        <enumerator name='NR_FILE_DIRTY' value='17'/>
+        <enumerator name='NR_WRITEBACK' value='18'/>
+        <enumerator name='NR_WRITEBACK_TEMP' value='19'/>
+        <enumerator name='NR_SHMEM' value='20'/>
+        <enumerator name='NR_SHMEM_THPS' value='21'/>
+        <enumerator name='NR_SHMEM_PMDMAPPED' value='22'/>
+        <enumerator name='NR_FILE_THPS' value='23'/>
+        <enumerator name='NR_FILE_PMDMAPPED' value='24'/>
+        <enumerator name='NR_ANON_THPS' value='25'/>
+        <enumerator name='NR_UNSTABLE_NFS' value='26'/>
+        <enumerator name='NR_VMSCAN_WRITE' value='27'/>
+        <enumerator name='NR_VMSCAN_IMMEDIATE' value='28'/>
+        <enumerator name='NR_DIRTIED' value='29'/>
+        <enumerator name='NR_WRITTEN' value='30'/>
+        <enumerator name='NR_KERNEL_MISC_RECLAIMABLE' value='31'/>
+        <enumerator name='NR_VM_NODE_STAT_ITEMS' value='32'/>
+      </enum-decl>
+      <function-decl name='mod_node_page_state' mangled-name='mod_node_page_state' filepath='mm/vmstat.c' line='575' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mod_node_page_state'>
+        <parameter type-id='c876a7a5' name='pgdat' filepath='mm/vmstat.c' line='575' column='1'/>
+        <parameter type-id='93f9c3d3' name='item' filepath='mm/vmstat.c' line='575' column='1'/>
+        <parameter type-id='bd54fe1a' name='delta' filepath='mm/vmstat.c' line='576' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/bluetooth/hci_core.c' language='LANG_C89'>
+      <class-decl name='rfkill' size-in-bits='10304' is-struct='yes' visibility='default' filepath='net/rfkill/core.c' line='37' column='1' id='6b60ef45'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='net/rfkill/core.c' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='6bac1cb5' visibility='default' filepath='net/rfkill/core.c' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='net/rfkill/core.c' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idx' type-id='19c2251e' visibility='default' filepath='net/rfkill/core.c' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='net/rfkill/core.c' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='persistent' type-id='b50a4934' visibility='default' filepath='net/rfkill/core.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='polling_paused' type-id='b50a4934' visibility='default' filepath='net/rfkill/core.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='suspended' type-id='b50a4934' visibility='default' filepath='net/rfkill/core.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='6a6a70e7' visibility='default' filepath='net/rfkill/core.c' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='net/rfkill/core.c' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='led_trigger' type-id='7bcbad99' visibility='default' filepath='net/rfkill/core.c' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ledtrigname' type-id='80f4b756' visibility='default' filepath='net/rfkill/core.c' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='net/rfkill/core.c' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='net/rfkill/core.c' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='poll_work' type-id='5ad6e0ef' visibility='default' filepath='net/rfkill/core.c' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='uevent_work' type-id='ef9025d0' visibility='default' filepath='net/rfkill/core.c' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='sync_work' type-id='ef9025d0' visibility='default' filepath='net/rfkill/core.c' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='name' type-id='e84913bd' visibility='default' filepath='net/rfkill/core.c' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='rfkill_type' filepath='include/uapi/linux/rfkill.h' line='43' column='1' id='6bac1cb5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RFKILL_TYPE_ALL' value='0'/>
+        <enumerator name='RFKILL_TYPE_WLAN' value='1'/>
+        <enumerator name='RFKILL_TYPE_BLUETOOTH' value='2'/>
+        <enumerator name='RFKILL_TYPE_UWB' value='3'/>
+        <enumerator name='RFKILL_TYPE_WIMAX' value='4'/>
+        <enumerator name='RFKILL_TYPE_WWAN' value='5'/>
+        <enumerator name='RFKILL_TYPE_GPS' value='6'/>
+        <enumerator name='RFKILL_TYPE_FM' value='7'/>
+        <enumerator name='RFKILL_TYPE_NFC' value='8'/>
+        <enumerator name='NUM_RFKILL_TYPES' value='9'/>
+      </enum-decl>
+      <class-decl name='rfkill_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/rfkill.h' line='61' column='1' id='1e4ae69e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='poll' type-id='d78909c6' visibility='default' filepath='include/linux/rfkill.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='query' type-id='d78909c6' visibility='default' filepath='include/linux/rfkill.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_block' type-id='f08d4e50' visibility='default' filepath='include/linux/rfkill.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='1e4ae69e' const='yes' id='5433b7f7'/>
+      <pointer-type-def type-id='5433b7f7' size-in-bits='64' id='6a6a70e7'/>
+      <pointer-type-def type-id='b69e3ec6' size-in-bits='64' id='f08d4e50'/>
+      <pointer-type-def type-id='6b60ef45' size-in-bits='64' id='c5b94c75'/>
+      <pointer-type-def type-id='182ef894' size-in-bits='64' id='d78909c6'/>
+      <function-decl name='rfkill_alloc' mangled-name='rfkill_alloc' filepath='include/linux/rfkill.h' line='79' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rfkill_alloc'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='6bac1cb5'/>
+        <parameter type-id='6a6a70e7'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='c5b94c75'/>
+      </function-decl>
+      <function-decl name='rfkill_register' mangled-name='rfkill_register' filepath='include/linux/rfkill.h' line='100' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rfkill_register'>
+        <parameter type-id='c5b94c75'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rfkill_destroy' mangled-name='rfkill_destroy' filepath='include/linux/rfkill.h' line='138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rfkill_destroy'>
+        <parameter type-id='c5b94c75'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rfkill_unregister' mangled-name='rfkill_unregister' filepath='include/linux/rfkill.h' line='130' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rfkill_unregister'>
+        <parameter type-id='c5b94c75'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='b69e3ec6'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='182ef894'>
+        <parameter type-id='c5b94c75'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/datagram.c' language='LANG_C89'>
+      <function-decl name='datagram_poll' mangled-name='datagram_poll' filepath='net/core/datagram.c' line='776' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='datagram_poll'>
+        <parameter type-id='77e79a4b' name='file' filepath='net/core/datagram.c' line='776' column='1'/>
+        <parameter type-id='13103032' name='sock' filepath='net/core/datagram.c' line='776' column='1'/>
+        <parameter type-id='a54c778f' name='wait' filepath='net/core/datagram.c' line='777' column='1'/>
+        <return type-id='8f254b08'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/dev.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='bb08c7e1' size-in-bits='infinite' id='f443352a'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='libipw_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='9c91a761'/>
+      <array-type-def dimensions='1' type-id='aa80c027' size-in-bits='256' id='c73a16a3'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='1dc6a898' size-in-bits='2048' id='13faf778'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b151a3a8' size-in-bits='64' id='4a744ea1'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='b151a3a8' size-in-bits='384' id='2d507faf'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <typedef-decl name='iw_handler' type-id='2c8ff697' filepath='include/net/iw_handler.h' line='315' column='1' id='bcc5cab3'/>
+      <class-decl name='iw_request_info' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/iw_handler.h' line='304' column='1' id='e90b3b44'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='d315442e' visibility='default' filepath='include/net/iw_handler.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/net/iw_handler.h' line='306' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='iwreq_data' size-in-bits='128' visibility='default' filepath='include/uapi/linux/wireless.h' line='902' column='1' id='ed626d0d'>
+        <data-member access='private'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/wireless.h' line='904' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='essid' type-id='db4e746c' visibility='default' filepath='include/uapi/linux/wireless.h' line='908' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nwid' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='909' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='freq' type-id='bc1ac22c' visibility='default' filepath='include/uapi/linux/wireless.h' line='910' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sens' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='bitrate' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='txpower' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='rts' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='917' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='frag' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='mode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/wireless.h' line='919' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='retry' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='920' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='encoding' type-id='db4e746c' visibility='default' filepath='include/uapi/linux/wireless.h' line='922' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='power' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='923' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='qual' type-id='aa80c027' visibility='default' filepath='include/uapi/linux/wireless.h' line='924' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ap_addr' type-id='5221b18a' visibility='default' filepath='include/uapi/linux/wireless.h' line='926' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='addr' type-id='5221b18a' visibility='default' filepath='include/uapi/linux/wireless.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='param' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='929' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='data' type-id='db4e746c' visibility='default' filepath='include/uapi/linux/wireless.h' line='930' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='iw_point' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/wireless.h' line='691' column='1' id='db4e746c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pointer' type-id='eaa32e2f' visibility='default' filepath='include/uapi/linux/wireless.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='length' type-id='d315442e' visibility='default' filepath='include/uapi/linux/wireless.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/uapi/linux/wireless.h' line='694' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_param' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/wireless.h' line='680' column='1' id='b024252b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/wireless.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fixed' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='disabled' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/uapi/linux/wireless.h' line='684' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_freq' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/wireless.h' line='706' column='1' id='bc1ac22c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='m' type-id='3158a266' visibility='default' filepath='include/uapi/linux/wireless.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='e' type-id='b55def60' visibility='default' filepath='include/uapi/linux/wireless.h' line='708' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='i' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='710' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_quality' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/wireless.h' line='716' column='1' id='aa80c027'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='qual' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='level' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='noise' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='720' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='updated' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='721' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_priv_args' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/wireless.h' line='1063' column='1' id='0c842ad9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/wireless.h' line='1064' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='set_args' type-id='d315442e' visibility='default' filepath='include/uapi/linux/wireless.h' line='1065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='get_args' type-id='d315442e' visibility='default' filepath='include/uapi/linux/wireless.h' line='1066' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/wireless.h' line='1067' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_statistics' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/wireless.h' line='881' column='1' id='1c8cc2fd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='status' type-id='d315442e' visibility='default' filepath='include/uapi/linux/wireless.h' line='882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='qual' type-id='aa80c027' visibility='default' filepath='include/uapi/linux/wireless.h' line='885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='discard' type-id='832938ed' visibility='default' filepath='include/uapi/linux/wireless.h' line='887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='miss' type-id='6a2a3473' visibility='default' filepath='include/uapi/linux/wireless.h' line='888' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_discarded' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/wireless.h' line='731' column='1' id='832938ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nwid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/wireless.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='code' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/wireless.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fragment' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/wireless.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='retries' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/wireless.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='misc' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/wireless.h' line='736' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_missed' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/wireless.h' line='743' column='1' id='6a2a3473'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='beacon' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/wireless.h' line='744' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_spy_data' size-in-bits='800' is-struct='yes' visibility='default' filepath='include/net/iw_handler.h' line='396' column='1' id='f8292115'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='spy_number' type-id='95e97e5e' visibility='default' filepath='include/net/iw_handler.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='spy_address' type-id='2d507faf' visibility='default' filepath='include/net/iw_handler.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='spy_stat' type-id='c73a16a3' visibility='default' filepath='include/net/iw_handler.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='spy_thr_low' type-id='aa80c027' visibility='default' filepath='include/net/iw_handler.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='spy_thr_high' type-id='aa80c027' visibility='default' filepath='include/net/iw_handler.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='spy_thr_under' type-id='4a744ea1' visibility='default' filepath='include/net/iw_handler.h' line='404' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='u_char' type-id='002ac4a6' filepath='include/linux/types.h' line='84' column='1' id='b151a3a8'/>
+      <class-decl name='__anonymous_struct__1' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/cpu_rmap.h' line='28' column='1' id='bb08c7e1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='1dc6a898' visibility='default' filepath='include/linux/cpu_rmap.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='dist' type-id='1dc6a898' visibility='default' filepath='include/linux/cpu_rmap.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='softnet_data' size-in-bits='5632' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='3031' column='1' id='035aa62d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='poll_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='3032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='process_queue' type-id='e61c85d0' visibility='default' filepath='include/linux/netdevice.h' line='3033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='processed' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='3036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='time_squeeze' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='3037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='received_rps' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='3038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rps_ipi_list' type-id='80c9c0cd' visibility='default' filepath='include/linux/netdevice.h' line='3040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='flow_limit' type-id='4c83bbe7' visibility='default' filepath='include/linux/netdevice.h' line='3043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='output_queue' type-id='ee40620a' visibility='default' filepath='include/linux/netdevice.h' line='3045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='output_queue_tailp' type-id='325a7d19' visibility='default' filepath='include/linux/netdevice.h' line='3046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='completion_queue' type-id='0fbf3cfd' visibility='default' filepath='include/linux/netdevice.h' line='3047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='xmit' type-id='75fc4829' visibility='default' filepath='include/linux/netdevice.h' line='3055' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='input_queue_head' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='3060' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='csd' type-id='223a68bd' visibility='default' filepath='include/linux/netdevice.h' line='3063' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='rps_ipi_next' type-id='80c9c0cd' visibility='default' filepath='include/linux/netdevice.h' line='3064' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='3065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='input_queue_tail' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='3066' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='dropped' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='3068' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='input_pkt_queue' type-id='e61c85d0' visibility='default' filepath='include/linux/netdevice.h' line='3069' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='backlog' type-id='291e3bb5' visibility='default' filepath='include/linux/netdevice.h' line='3070' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sd_flow_limit' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='3017' column='1' id='7ba771af'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='3018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_buckets' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='3019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='history_head' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='3020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='history' type-id='13faf778' visibility='default' filepath='include/linux/netdevice.h' line='3021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='buckets' type-id='29c3368c' visibility='default' filepath='include/linux/netdevice.h' line='3022' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='3052' column='1' id='75fc4829'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='recursion' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='3053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='more' type-id='f9b06939' visibility='default' filepath='include/linux/netdevice.h' line='3054' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='packet_type' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='2399' column='1' id='164a08b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='84a5c3d4' visibility='default' filepath='include/linux/netdevice.h' line='2400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ignore_outgoing' type-id='b50a4934' visibility='default' filepath='include/linux/netdevice.h' line='2401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/linux/netdevice.h' line='2402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='func' type-id='29242f3e' visibility='default' filepath='include/linux/netdevice.h' line='2403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list_func' type-id='af0e0afc' visibility='default' filepath='include/linux/netdevice.h' line='2407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='id_match' type-id='ca97eb2a' visibility='default' filepath='include/linux/netdevice.h' line='2410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='af_packet_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/netdevice.h' line='2412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='2413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2418' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='skb_free_reason' filepath='include/linux/netdevice.h' line='3631' column='1' id='1f17c6b4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SKB_REASON_CONSUMED' value='0'/>
+        <enumerator name='SKB_REASON_DROPPED' value='1'/>
+      </enum-decl>
+      <qualified-type-def type-id='bcc5cab3' const='yes' id='208298e3'/>
+      <pointer-type-def type-id='208298e3' size-in-bits='64' id='f696846b'/>
+      <qualified-type-def type-id='0c842ad9' const='yes' id='afa36b70'/>
+      <pointer-type-def type-id='afa36b70' size-in-bits='64' id='d841feae'/>
+      <pointer-type-def type-id='97488913' size-in-bits='64' id='2c8ff697'/>
+      <pointer-type-def type-id='3a60b114' size-in-bits='64' id='29242f3e'/>
+      <pointer-type-def type-id='e90b3b44' size-in-bits='64' id='4780e252'/>
+      <pointer-type-def type-id='f8292115' size-in-bits='64' id='96efb615'/>
+      <pointer-type-def type-id='1c8cc2fd' size-in-bits='64' id='003642fd'/>
+      <pointer-type-def type-id='cfdbff8a' size-in-bits='64' id='55e2a83c'/>
+      <pointer-type-def type-id='ed626d0d' size-in-bits='64' id='00e2a7ce'/>
+      <pointer-type-def type-id='9c91a761' size-in-bits='64' id='29244949'/>
+      <pointer-type-def type-id='164a08b2' size-in-bits='64' id='1c079e60'/>
+      <pointer-type-def type-id='7ba771af' size-in-bits='64' id='4c83bbe7'/>
+      <pointer-type-def type-id='035aa62d' size-in-bits='64' id='80c9c0cd'/>
+      <pointer-type-def type-id='e91cb1f0' size-in-bits='64' id='ca97eb2a'/>
+      <pointer-type-def type-id='950dfd7a' size-in-bits='64' id='af0e0afc'/>
+      <function-decl name='netdev_rx_handler_unregister' mangled-name='netdev_rx_handler_unregister' filepath='net/core/dev.c' line='4668' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_rx_handler_unregister'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/dev.c' line='4668' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netdev_upper_dev_unlink' mangled-name='netdev_upper_dev_unlink' filepath='net/core/dev.c' line='7398' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_upper_dev_unlink'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/dev.c' line='7398' column='1'/>
+        <parameter type-id='68a2d05c' name='upper_dev' filepath='net/core/dev.c' line='7399' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netdev_lower_state_changed' mangled-name='netdev_lower_state_changed' filepath='net/core/dev.c' line='7631' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_lower_state_changed'>
+        <parameter type-id='68a2d05c' name='lower_dev' filepath='net/core/dev.c' line='7631' column='1'/>
+        <parameter type-id='eaa32e2f' name='lower_state_info' filepath='net/core/dev.c' line='7632' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <var-decl name='softnet_data' type-id='035aa62d' mangled-name='softnet_data' visibility='default' filepath='net/core/dev.c' line='278' column='1' elf-symbol-id='softnet_data'/>
+      <var-decl name='rps_needed' type-id='237c0d27' mangled-name='rps_needed' visibility='default' filepath='net/core/dev.c' line='3897' column='1' elf-symbol-id='rps_needed'/>
+      <function-decl name='dev_add_pack' mangled-name='dev_add_pack' filepath='net/core/dev.c' line='332' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_add_pack'>
+        <parameter type-id='1c079e60' name='pt' filepath='net/core/dev.c' line='332' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_remove_pack' mangled-name='dev_remove_pack' filepath='net/core/dev.c' line='387' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_remove_pack'>
+        <parameter type-id='1c079e60' name='pt' filepath='net/core/dev.c' line='387' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__dev_get_by_name' mangled-name='__dev_get_by_name' filepath='net/core/dev.c' line='660' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__dev_get_by_name'>
+        <parameter type-id='a2bff677' name='net' filepath='net/core/dev.c' line='660' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='net/core/dev.c' line='660' column='1'/>
+        <return type-id='68a2d05c'/>
+      </function-decl>
+      <function-decl name='__dev_get_by_index' mangled-name='__dev_get_by_index' filepath='net/core/dev.c' line='735' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__dev_get_by_index'>
+        <parameter type-id='a2bff677' name='net' filepath='net/core/dev.c' line='735' column='1'/>
+        <parameter type-id='95e97e5e' name='ifindex' filepath='net/core/dev.c' line='735' column='1'/>
+        <return type-id='68a2d05c'/>
+      </function-decl>
+      <function-decl name='dev_get_by_index_rcu' mangled-name='dev_get_by_index_rcu' filepath='net/core/dev.c' line='759' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_get_by_index_rcu'>
+        <parameter type-id='a2bff677' name='net' filepath='net/core/dev.c' line='759' column='1'/>
+        <parameter type-id='95e97e5e' name='ifindex' filepath='net/core/dev.c' line='759' column='1'/>
+        <return type-id='68a2d05c'/>
+      </function-decl>
+      <function-decl name='dev_alloc_name' mangled-name='dev_alloc_name' filepath='net/core/dev.c' line='1059' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_alloc_name'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/dev.c' line='1059' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='net/core/dev.c' line='1059' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='call_netdevice_notifiers' mangled-name='call_netdevice_notifiers' filepath='net/core/dev.c' line='1694' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='call_netdevice_notifiers'>
+        <parameter type-id='7359adad' name='val' filepath='net/core/dev.c' line='1694' column='1'/>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/dev.c' line='1694' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netdev_notify_peers' mangled-name='netdev_notify_peers' filepath='net/core/dev.c' line='1290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_notify_peers'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/dev.c' line='1290' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_open' mangled-name='dev_open' filepath='net/core/dev.c' line='1355' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_open'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/dev.c' line='1355' column='1'/>
+        <parameter type-id='5799dc94' name='extack' filepath='net/core/dev.c' line='1355' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_close' mangled-name='dev_close' filepath='net/core/dev.c' line='1455' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_close'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/dev.c' line='1455' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__netif_set_xps_queue' mangled-name='__netif_set_xps_queue' filepath='net/core/dev.c' line='2243' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__netif_set_xps_queue'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/dev.c' line='2243' column='1'/>
+        <parameter type-id='f9b37274' name='mask' filepath='net/core/dev.c' line='2243' column='1'/>
+        <parameter type-id='1dc6a898' name='index' filepath='net/core/dev.c' line='2244' column='1'/>
+        <parameter type-id='b50a4934' name='is_rxqs_map' filepath='net/core/dev.c' line='2244' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__dev_kfree_skb_irq' mangled-name='__dev_kfree_skb_irq' filepath='net/core/dev.c' line='2717' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__dev_kfree_skb_irq'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/dev.c' line='2717' column='1'/>
+        <parameter type-id='1f17c6b4' name='reason' filepath='net/core/dev.c' line='2717' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__dev_kfree_skb_any' mangled-name='__dev_kfree_skb_any' filepath='net/core/dev.c' line='2739' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__dev_kfree_skb_any'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/dev.c' line='2739' column='1'/>
+        <parameter type-id='1f17c6b4' name='reason' filepath='net/core/dev.c' line='2739' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__skb_gso_segment' mangled-name='__skb_gso_segment' filepath='net/core/dev.c' line='2997' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__skb_gso_segment'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/dev.c' line='2997' column='1'/>
+        <parameter type-id='f9f4b16f' name='features' filepath='net/core/dev.c' line='2998' column='1'/>
+        <parameter type-id='b50a4934' name='tx_path' filepath='net/core/dev.c' line='2998' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='passthru_features_check' mangled-name='passthru_features_check' filepath='net/core/dev.c' line='3114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='passthru_features_check'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/dev.c' line='3114' column='1'/>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/dev.c' line='3115' column='1'/>
+        <parameter type-id='f9f4b16f' name='features' filepath='net/core/dev.c' line='3116' column='1'/>
+        <return type-id='f9f4b16f'/>
+      </function-decl>
+      <function-decl name='netif_rx_ni' mangled-name='netif_rx_ni' filepath='net/core/dev.c' line='4467' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_rx_ni'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/dev.c' line='4467' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netdev_pick_tx' mangled-name='netdev_pick_tx' filepath='net/core/dev.c' line='3622' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_pick_tx'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/dev.c' line='3622' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/dev.c' line='3622' column='1'/>
+        <parameter type-id='68a2d05c' name='sb_dev' filepath='net/core/dev.c' line='3623' column='1'/>
+        <return type-id='1dc6a898'/>
+      </function-decl>
+      <function-decl name='dev_queue_xmit' mangled-name='dev_queue_xmit' filepath='net/core/dev.c' line='3809' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_queue_xmit'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/dev.c' line='3809' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netdev_rx_handler_register' mangled-name='netdev_rx_handler_register' filepath='net/core/dev.c' line='4642' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_rx_handler_register'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/dev.c' line='4642' column='1'/>
+        <parameter type-id='da1cb816' name='rx_handler' filepath='net/core/dev.c' line='4643' column='1'/>
+        <parameter type-id='eaa32e2f' name='rx_handler_data' filepath='net/core/dev.c' line='4644' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='napi_gro_flush' mangled-name='napi_gro_flush' filepath='net/core/dev.c' line='5354' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_gro_flush'>
+        <parameter type-id='c50361c5' name='napi' filepath='net/core/dev.c' line='5354' column='1'/>
+        <parameter type-id='b50a4934' name='flush_old' filepath='net/core/dev.c' line='5354' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__napi_schedule' mangled-name='__napi_schedule' filepath='net/core/dev.c' line='5915' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__napi_schedule'>
+        <parameter type-id='c50361c5' name='n' filepath='net/core/dev.c' line='5915' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netdev_upper_dev_link' mangled-name='netdev_upper_dev_link' filepath='net/core/dev.c' line='7357' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_upper_dev_link'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/dev.c' line='7357' column='1'/>
+        <parameter type-id='68a2d05c' name='upper_dev' filepath='net/core/dev.c' line='7358' column='1'/>
+        <parameter type-id='5799dc94' name='extack' filepath='net/core/dev.c' line='7359' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netdev_master_upper_dev_link' mangled-name='netdev_master_upper_dev_link' filepath='net/core/dev.c' line='7380' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_master_upper_dev_link'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/dev.c' line='7380' column='1'/>
+        <parameter type-id='68a2d05c' name='upper_dev' filepath='net/core/dev.c' line='7381' column='1'/>
+        <parameter type-id='eaa32e2f' name='upper_priv' filepath='net/core/dev.c' line='7382' column='1'/>
+        <parameter type-id='eaa32e2f' name='upper_info' filepath='net/core/dev.c' line='7382' column='1'/>
+        <parameter type-id='5799dc94' name='extack' filepath='net/core/dev.c' line='7383' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_set_mtu' mangled-name='dev_set_mtu' filepath='net/core/dev.c' line='8044' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_set_mtu'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/dev.c' line='8044' column='1'/>
+        <parameter type-id='95e97e5e' name='new_mtu' filepath='net/core/dev.c' line='8044' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netdev_change_features' mangled-name='netdev_change_features' filepath='net/core/dev.c' line='8828' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_change_features'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/dev.c' line='8828' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netif_stacked_transfer_operstate' mangled-name='netif_stacked_transfer_operstate' filepath='net/core/dev.c' line='8844' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_stacked_transfer_operstate'>
+        <parameter type-id='2ce52478' name='rootdev' filepath='net/core/dev.c' line='8844' column='1'/>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/dev.c' line='8845' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='init_dummy_netdev' mangled-name='init_dummy_netdev' filepath='net/core/dev.c' line='9172' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='init_dummy_netdev'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/dev.c' line='9172' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netdev_increment_features' mangled-name='netdev_increment_features' filepath='net/core/dev.c' line='9920' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_increment_features'>
+        <parameter type-id='f9f4b16f' name='all' filepath='net/core/dev.c' line='9920' column='1'/>
+        <parameter type-id='f9f4b16f' name='one' filepath='net/core/dev.c' line='9921' column='1'/>
+        <parameter type-id='f9f4b16f' name='mask' filepath='net/core/dev.c' line='9921' column='1'/>
+        <return type-id='f9f4b16f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='97488913'>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='4780e252'/>
+        <parameter type-id='00e2a7ce'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3a60b114'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='1c079e60'/>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cfdbff8a'>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='003642fd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e91cb1f0'>
+        <parameter type-id='1c079e60'/>
+        <parameter type-id='f772df6e'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='950dfd7a'>
+        <parameter type-id='e84b031a'/>
+        <parameter type-id='1c079e60'/>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/dev_addr_lists.c' language='LANG_C89'>
+      <pointer-type-def type-id='44a1ec32' size-in-bits='64' id='9ed060a0'/>
+      <function-decl name='__hw_addr_sync' mangled-name='__hw_addr_sync' filepath='net/core/dev_addr_lists.c' line='192' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__hw_addr_sync'>
+        <parameter type-id='9ed060a0' name='to_list' filepath='net/core/dev_addr_lists.c' line='192' column='1'/>
+        <parameter type-id='9ed060a0' name='from_list' filepath='net/core/dev_addr_lists.c' line='193' column='1'/>
+        <parameter type-id='95e97e5e' name='addr_len' filepath='net/core/dev_addr_lists.c' line='194' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__hw_addr_unsync' mangled-name='__hw_addr_unsync' filepath='net/core/dev_addr_lists.c' line='211' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__hw_addr_unsync'>
+        <parameter type-id='9ed060a0' name='to_list' filepath='net/core/dev_addr_lists.c' line='211' column='1'/>
+        <parameter type-id='9ed060a0' name='from_list' filepath='net/core/dev_addr_lists.c' line='212' column='1'/>
+        <parameter type-id='95e97e5e' name='addr_len' filepath='net/core/dev_addr_lists.c' line='213' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__hw_addr_init' mangled-name='__hw_addr_init' filepath='net/core/dev_addr_lists.c' line='417' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__hw_addr_init'>
+        <parameter type-id='9ed060a0' name='list' filepath='net/core/dev_addr_lists.c' line='417' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_uc_sync_multiple' mangled-name='dev_uc_sync_multiple' filepath='net/core/dev_addr_lists.c' line='663' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_uc_sync_multiple'>
+        <parameter type-id='68a2d05c' name='to' filepath='net/core/dev_addr_lists.c' line='663' column='1'/>
+        <parameter type-id='68a2d05c' name='from' filepath='net/core/dev_addr_lists.c' line='663' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_uc_unsync' mangled-name='dev_uc_unsync' filepath='net/core/dev_addr_lists.c' line='688' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_uc_unsync'>
+        <parameter type-id='68a2d05c' name='to' filepath='net/core/dev_addr_lists.c' line='688' column='1'/>
+        <parameter type-id='68a2d05c' name='from' filepath='net/core/dev_addr_lists.c' line='688' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_mc_sync_multiple' mangled-name='dev_mc_sync_multiple' filepath='net/core/dev_addr_lists.c' line='884' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_mc_sync_multiple'>
+        <parameter type-id='68a2d05c' name='to' filepath='net/core/dev_addr_lists.c' line='884' column='1'/>
+        <parameter type-id='68a2d05c' name='from' filepath='net/core/dev_addr_lists.c' line='884' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_mc_unsync' mangled-name='dev_mc_unsync' filepath='net/core/dev_addr_lists.c' line='909' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_mc_unsync'>
+        <parameter type-id='68a2d05c' name='to' filepath='net/core/dev_addr_lists.c' line='909' column='1'/>
+        <parameter type-id='68a2d05c' name='from' filepath='net/core/dev_addr_lists.c' line='909' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/ethtool.c' language='LANG_C89'>
+      <class-decl name='xsk_queue' is-struct='yes' visibility='default' is-declaration-only='yes' id='7f424251'/>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='infinite' id='09b35382'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='xdp_umem_page' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/xdp_sock.h' line='26' column='1' id='8ea64c8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='eaa32e2f' visibility='default' filepath='include/net/xdp_sock.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dma' type-id='cf29c9b3' visibility='default' filepath='include/net/xdp_sock.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xdp_umem_fq_reuse' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/xdp_sock.h' line='31' column='1' id='c06daf3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nentries' type-id='19c2251e' visibility='default' filepath='include/net/xdp_sock.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='length' type-id='19c2251e' visibility='default' filepath='include/net/xdp_sock.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='handles' type-id='09b35382' visibility='default' filepath='include/net/xdp_sock.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='c06daf3b' size-in-bits='64' id='b925f68b'/>
+      <pointer-type-def type-id='8ea64c8e' size-in-bits='64' id='48e57944'/>
+      <pointer-type-def type-id='7f424251' size-in-bits='64' id='9fa25a99'/>
+      <function-decl name='__ethtool_get_link_ksettings' mangled-name='__ethtool_get_link_ksettings' filepath='net/core/ethtool.c' line='544' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ethtool_get_link_ksettings'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/ethtool.c' line='544' column='1'/>
+        <parameter type-id='70de91e2' name='link_ksettings' filepath='net/core/ethtool.c' line='545' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ethtool_op_get_ts_info' mangled-name='ethtool_op_get_ts_info' filepath='net/core/ethtool.c' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ethtool_op_get_ts_info'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/ethtool.c' line='42' column='1'/>
+        <parameter type-id='fa058983' name='info' filepath='net/core/ethtool.c' line='42' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/flow_dissector.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='8efea9e5' size-in-bits='432' id='b48ea880'>
+        <subrange length='27' type-id='7ff19f0f' id='fddb82f0'/>
+      </array-type-def>
+      <class-decl name='flow_dissector' size-in-bits='480' is-struct='yes' visibility='default' filepath='include/net/flow_dissector.h' line='269' column='1' id='379be6ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='used_keys' type-id='f0981eeb' visibility='default' filepath='include/net/flow_dissector.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='offset' type-id='b48ea880' visibility='default' filepath='include/net/flow_dissector.h' line='271' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='__anonymous_enum__2' is-anonymous='yes' filepath='include/linux/phy.h' line='229' column='1' id='3fed3840'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MDIOBUS_ALLOCATED' value='1'/>
+        <enumerator name='MDIOBUS_REGISTERED' value='2'/>
+        <enumerator name='MDIOBUS_UNREGISTERED' value='3'/>
+        <enumerator name='MDIOBUS_RELEASED' value='4'/>
+      </enum-decl>
+      <pointer-type-def type-id='379be6ec' size-in-bits='64' id='0b8ca8fa'/>
+      <var-decl name='flow_keys_basic_dissector' type-id='379be6ec' mangled-name='flow_keys_basic_dissector' visibility='default' filepath='net/core/flow_dissector.c' line='1764' column='1' elf-symbol-id='flow_keys_basic_dissector'/>
+      <function-decl name='__skb_flow_dissect' mangled-name='__skb_flow_dissect' filepath='net/core/flow_dissector.c' line='893' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__skb_flow_dissect'>
+        <parameter type-id='f91cf277' name='net' filepath='net/core/flow_dissector.c' line='893' column='1'/>
+        <parameter type-id='11f4a000' name='skb' filepath='net/core/flow_dissector.c' line='894' column='1'/>
+        <parameter type-id='0b8ca8fa' name='flow_dissector' filepath='net/core/flow_dissector.c' line='895' column='1'/>
+        <parameter type-id='eaa32e2f' name='target_container' filepath='net/core/flow_dissector.c' line='896' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='net/core/flow_dissector.c' line='897' column='1'/>
+        <parameter type-id='84a5c3d4' name='proto' filepath='net/core/flow_dissector.c' line='897' column='1'/>
+        <parameter type-id='95e97e5e' name='nhoff' filepath='net/core/flow_dissector.c' line='897' column='1'/>
+        <parameter type-id='95e97e5e' name='hlen' filepath='net/core/flow_dissector.c' line='897' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='net/core/flow_dissector.c' line='898' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='__skb_get_hash' mangled-name='__skb_get_hash' filepath='net/core/flow_dissector.c' line='1576' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__skb_get_hash'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/flow_dissector.c' line='1576' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='e8726a27' size-in-bits='64' id='f91cf277'/>
+      <qualified-type-def type-id='bd965181' const='yes' id='e8726a27'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/gro_cells.c' language='LANG_C89'>
+      <function-decl name='gro_cells_receive' mangled-name='gro_cells_receive' filepath='net/core/gro_cells.c' line='12' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gro_cells_receive'>
+        <parameter type-id='2c36d3bb' name='gcells' filepath='net/core/gro_cells.c' line='12' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/gro_cells.c' line='12' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='5b4eef8b' size-in-bits='64' id='2c36d3bb'/>
+      <class-decl name='gro_cells' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/gro_cells.h' line='11' column='1' id='5b4eef8b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cells' type-id='69646708' visibility='default' filepath='include/net/gro_cells.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='001ff55a' size-in-bits='64' id='69646708'/>
+      <class-decl name='gro_cell' size-in-bits='3584' is-struct='yes' visibility='default' filepath='net/core/gro_cells.c' line='7' column='1' id='001ff55a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='napi_skbs' type-id='e61c85d0' visibility='default' filepath='net/core/gro_cells.c' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='napi' type-id='291e3bb5' visibility='default' filepath='net/core/gro_cells.c' line='9' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/net_namespace.c' language='LANG_C89'>
+      <var-decl name='net_namespace_list' type-id='72f469ec' mangled-name='net_namespace_list' visibility='default' filepath='net/core/net_namespace.c' line='35' column='1' elf-symbol-id='net_namespace_list'/>
+      <var-decl name='init_net' type-id='bd965181' mangled-name='init_net' visibility='default' filepath='net/core/net_namespace.c' line='46' column='1' elf-symbol-id='init_net'/>
+      <function-decl name='__put_net' mangled-name='__put_net' filepath='net/core/net_namespace.c' line='638' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__put_net'>
+        <parameter type-id='a2bff677' name='net' filepath='net/core/net_namespace.c' line='638' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/netevent.c' language='LANG_C89'>
+      <function-decl name='register_netevent_notifier' mangled-name='register_netevent_notifier' filepath='net/core/netevent.c' line='28' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_netevent_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='net/core/netevent.c' line='28' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_netevent_notifier' mangled-name='unregister_netevent_notifier' filepath='net/core/netevent.c' line='44' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_netevent_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='net/core/netevent.c' line='44' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/rtnetlink.c' language='LANG_C89'>
+      <typedef-decl name='rtnl_doit_func' type-id='1b2282db' filepath='include/net/rtnetlink.h' line='8' column='1' id='ad8f197c'/>
+      <typedef-decl name='rtnl_dumpit_func' type-id='32a663ca' filepath='include/net/rtnetlink.h' line='10' column='1' id='5b4c0375'/>
+      <pointer-type-def type-id='f3fa895f' size-in-bits='64' id='1b2282db'/>
+      <function-decl name='rtnl_trylock' mangled-name='rtnl_trylock' filepath='net/core/rtnetlink.c' line='116' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_trylock'>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rtnl_register_module' mangled-name='rtnl_register_module' filepath='net/core/rtnetlink.c' line='241' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_register_module'>
+        <parameter type-id='2730d015' name='owner' filepath='net/core/rtnetlink.c' line='241' column='1'/>
+        <parameter type-id='95e97e5e' name='protocol' filepath='net/core/rtnetlink.c' line='242' column='1'/>
+        <parameter type-id='95e97e5e' name='msgtype' filepath='net/core/rtnetlink.c' line='242' column='1'/>
+        <parameter type-id='ad8f197c' name='doit' filepath='net/core/rtnetlink.c' line='243' column='1'/>
+        <parameter type-id='5b4c0375' name='dumpit' filepath='net/core/rtnetlink.c' line='243' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='net/core/rtnetlink.c' line='244' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rtnl_unregister' mangled-name='rtnl_unregister' filepath='net/core/rtnetlink.c' line='287' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_unregister'>
+        <parameter type-id='95e97e5e' name='protocol' filepath='net/core/rtnetlink.c' line='287' column='1'/>
+        <parameter type-id='95e97e5e' name='msgtype' filepath='net/core/rtnetlink.c' line='287' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rtnl_unregister_all' mangled-name='rtnl_unregister_all' filepath='net/core/rtnetlink.c' line='319' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_unregister_all'>
+        <parameter type-id='95e97e5e' name='protocol' filepath='net/core/rtnetlink.c' line='319' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='f3fa895f'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='c2074578'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/skbuff.c' language='LANG_C89'>
+      <function-decl name='__alloc_skb' mangled-name='__alloc_skb' filepath='net/core/skbuff.c' line='182' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__alloc_skb'>
+        <parameter type-id='f0981eeb' name='size' filepath='net/core/skbuff.c' line='182' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='net/core/skbuff.c' line='182' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/core/skbuff.c' line='183' column='1'/>
+        <parameter type-id='95e97e5e' name='node' filepath='net/core/skbuff.c' line='183' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='__netdev_alloc_skb' mangled-name='__netdev_alloc_skb' filepath='net/core/skbuff.c' line='425' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__netdev_alloc_skb'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/core/skbuff.c' line='425' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='net/core/skbuff.c' line='425' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='net/core/skbuff.c' line='426' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='__napi_alloc_skb' mangled-name='__napi_alloc_skb' filepath='net/core/skbuff.c' line='501' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__napi_alloc_skb'>
+        <parameter type-id='c50361c5' name='napi' filepath='net/core/skbuff.c' line='501' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='net/core/skbuff.c' line='501' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='net/core/skbuff.c' line='502' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='skb_coalesce_rx_frag' mangled-name='skb_coalesce_rx_frag' filepath='net/core/skbuff.c' line='563' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_coalesce_rx_frag'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='563' column='1'/>
+        <parameter type-id='95e97e5e' name='i' filepath='net/core/skbuff.c' line='563' column='1'/>
+        <parameter type-id='95e97e5e' name='size' filepath='net/core/skbuff.c' line='563' column='1'/>
+        <parameter type-id='f0981eeb' name='truesize' filepath='net/core/skbuff.c' line='564' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='napi_consume_skb' mangled-name='napi_consume_skb' filepath='net/core/skbuff.c' line='906' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_consume_skb'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='906' column='1'/>
+        <parameter type-id='95e97e5e' name='budget' filepath='net/core/skbuff.c' line='906' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='___pskb_trim' mangled-name='___pskb_trim' filepath='net/core/skbuff.c' line='1936' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='___pskb_trim'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='1936' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='net/core/skbuff.c' line='1936' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__pskb_pull_tail' mangled-name='__pskb_pull_tail' filepath='net/core/skbuff.c' line='2067' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pskb_pull_tail'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='2067' column='1'/>
+        <parameter type-id='95e97e5e' name='delta' filepath='net/core/skbuff.c' line='2067' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='__pskb_copy_fclone' mangled-name='__pskb_copy_fclone' filepath='net/core/skbuff.c' line='1559' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pskb_copy_fclone'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='1559' column='1'/>
+        <parameter type-id='95e97e5e' name='headroom' filepath='net/core/skbuff.c' line='1559' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='net/core/skbuff.c' line='1560' column='1'/>
+        <parameter type-id='b50a4934' name='fclone' filepath='net/core/skbuff.c' line='1560' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='__skb_pad' mangled-name='__skb_pad' filepath='net/core/skbuff.c' line='1803' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__skb_pad'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='1803' column='1'/>
+        <parameter type-id='95e97e5e' name='pad' filepath='net/core/skbuff.c' line='1803' column='1'/>
+        <parameter type-id='b50a4934' name='free_on_error' filepath='net/core/skbuff.c' line='1803' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pskb_trim_rcsum_slow' mangled-name='pskb_trim_rcsum_slow' filepath='net/core/skbuff.c' line='2023' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pskb_trim_rcsum_slow'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='2023' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='net/core/skbuff.c' line='2023' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_store_bits' mangled-name='skb_store_bits' filepath='net/core/skbuff.c' line='2567' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_store_bits'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='2567' column='1'/>
+        <parameter type-id='95e97e5e' name='offset' filepath='net/core/skbuff.c' line='2567' column='1'/>
+        <parameter type-id='eaa32e2f' name='from' filepath='net/core/skbuff.c' line='2567' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='net/core/skbuff.c' line='2567' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_unlink' mangled-name='skb_unlink' filepath='net/core/skbuff.c' line='3177' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_unlink'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='3177' column='1'/>
+        <parameter type-id='03c386c6' name='list' filepath='net/core/skbuff.c' line='3177' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_append_pagefrags' mangled-name='skb_append_pagefrags' filepath='net/core/skbuff.c' line='3605' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_append_pagefrags'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='3605' column='1'/>
+        <parameter type-id='02f11ed4' name='page' filepath='net/core/skbuff.c' line='3605' column='1'/>
+        <parameter type-id='95e97e5e' name='offset' filepath='net/core/skbuff.c' line='3606' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='net/core/skbuff.c' line='3606' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_to_sgvec_nomark' mangled-name='skb_to_sgvec_nomark' filepath='net/core/skbuff.c' line='4386' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_to_sgvec_nomark'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='4386' column='1'/>
+        <parameter type-id='bf3ef905' name='sg' filepath='net/core/skbuff.c' line='4386' column='1'/>
+        <parameter type-id='95e97e5e' name='offset' filepath='net/core/skbuff.c' line='4387' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='net/core/skbuff.c' line='4387' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__skb_ext_put' mangled-name='__skb_ext_put' filepath='net/core/skbuff.c' line='6213' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__skb_ext_put'>
+        <parameter type-id='374692c7' name='ext' filepath='net/core/skbuff.c' line='6213' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/sock.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='2048' id='93e41790'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <function-decl name='__sk_receive_skb' mangled-name='__sk_receive_skb' filepath='net/core/sock.c' line='498' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sk_receive_skb'>
+        <parameter type-id='f772df6e' name='sk' filepath='net/core/sock.c' line='498' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/sock.c' line='498' column='1'/>
+        <parameter type-id='2448a865' name='nested' filepath='net/core/sock.c' line='499' column='1'/>
+        <parameter type-id='f0981eeb' name='trim_cap' filepath='net/core/sock.c' line='499' column='1'/>
+        <parameter type-id='b50a4934' name='refcounted' filepath='net/core/sock.c' line='499' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_get_by_name_rcu' mangled-name='dev_get_by_name_rcu' filepath='include/linux/netdevice.h' line='2673' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_get_by_name_rcu'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='68a2d05c'/>
+      </function-decl>
+      <function-decl name='sock_efree' mangled-name='sock_efree' filepath='net/core/sock.c' line='2059' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_efree'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/sock.c' line='2059' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='alloc_skb_with_frags' mangled-name='alloc_skb_with_frags' filepath='include/linux/skbuff.h' line='1060' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_skb_with_frags'>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='sock_alloc_send_skb' mangled-name='sock_alloc_send_skb' filepath='net/core/sock.c' line='2258' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_alloc_send_skb'>
+        <parameter type-id='f772df6e' name='sk' filepath='net/core/sock.c' line='2258' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='net/core/sock.c' line='2258' column='1'/>
+        <parameter type-id='95e97e5e' name='noblock' filepath='net/core/sock.c' line='2259' column='1'/>
+        <parameter type-id='7292109c' name='errcode' filepath='net/core/sock.c' line='2259' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='sock_no_bind' mangled-name='sock_no_bind' filepath='net/core/sock.c' line='2643' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_bind'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2643' column='1'/>
+        <parameter type-id='5c0abad8' name='saddr' filepath='net/core/sock.c' line='2643' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='net/core/sock.c' line='2643' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_connect' mangled-name='sock_no_connect' filepath='net/core/sock.c' line='2649' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_connect'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2649' column='1'/>
+        <parameter type-id='5c0abad8' name='saddr' filepath='net/core/sock.c' line='2649' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='net/core/sock.c' line='2650' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/core/sock.c' line='2650' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_socketpair' mangled-name='sock_no_socketpair' filepath='net/core/sock.c' line='2656' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_socketpair'>
+        <parameter type-id='13103032' name='sock1' filepath='net/core/sock.c' line='2656' column='1'/>
+        <parameter type-id='13103032' name='sock2' filepath='net/core/sock.c' line='2656' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_accept' mangled-name='sock_no_accept' filepath='net/core/sock.c' line='2662' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_accept'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2662' column='1'/>
+        <parameter type-id='13103032' name='newsock' filepath='net/core/sock.c' line='2662' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/core/sock.c' line='2662' column='1'/>
+        <parameter type-id='b50a4934' name='kern' filepath='net/core/sock.c' line='2663' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_getname' mangled-name='sock_no_getname' filepath='net/core/sock.c' line='2669' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_getname'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2669' column='1'/>
+        <parameter type-id='5c0abad8' name='saddr' filepath='net/core/sock.c' line='2669' column='1'/>
+        <parameter type-id='95e97e5e' name='peer' filepath='net/core/sock.c' line='2670' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_ioctl' mangled-name='sock_no_ioctl' filepath='net/core/sock.c' line='2676' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_ioctl'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2676' column='1'/>
+        <parameter type-id='f0981eeb' name='cmd' filepath='net/core/sock.c' line='2676' column='1'/>
+        <parameter type-id='7359adad' name='arg' filepath='net/core/sock.c' line='2676' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_listen' mangled-name='sock_no_listen' filepath='net/core/sock.c' line='2682' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_listen'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2682' column='1'/>
+        <parameter type-id='95e97e5e' name='backlog' filepath='net/core/sock.c' line='2682' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_shutdown' mangled-name='sock_no_shutdown' filepath='net/core/sock.c' line='2688' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_shutdown'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2688' column='1'/>
+        <parameter type-id='95e97e5e' name='how' filepath='net/core/sock.c' line='2688' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_setsockopt' mangled-name='sock_no_setsockopt' filepath='net/core/sock.c' line='2694' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_setsockopt'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2694' column='1'/>
+        <parameter type-id='95e97e5e' name='level' filepath='net/core/sock.c' line='2694' column='1'/>
+        <parameter type-id='95e97e5e' name='optname' filepath='net/core/sock.c' line='2694' column='1'/>
+        <parameter type-id='26a90f95' name='optval' filepath='net/core/sock.c' line='2695' column='1'/>
+        <parameter type-id='f0981eeb' name='optlen' filepath='net/core/sock.c' line='2695' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_getsockopt' mangled-name='sock_no_getsockopt' filepath='net/core/sock.c' line='2701' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_getsockopt'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2701' column='1'/>
+        <parameter type-id='95e97e5e' name='level' filepath='net/core/sock.c' line='2701' column='1'/>
+        <parameter type-id='95e97e5e' name='optname' filepath='net/core/sock.c' line='2701' column='1'/>
+        <parameter type-id='26a90f95' name='optval' filepath='net/core/sock.c' line='2702' column='1'/>
+        <parameter type-id='7292109c' name='optlen' filepath='net/core/sock.c' line='2702' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_sendmsg' mangled-name='sock_no_sendmsg' filepath='net/core/sock.c' line='2708' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_sendmsg'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2708' column='1'/>
+        <parameter type-id='6b9b777a' name='m' filepath='net/core/sock.c' line='2708' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/core/sock.c' line='2708' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_recvmsg' mangled-name='sock_no_recvmsg' filepath='net/core/sock.c' line='2720' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_recvmsg'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2720' column='1'/>
+        <parameter type-id='6b9b777a' name='m' filepath='net/core/sock.c' line='2720' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/core/sock.c' line='2720' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/core/sock.c' line='2721' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_mmap' mangled-name='sock_no_mmap' filepath='net/core/sock.c' line='2727' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_mmap'>
+        <parameter type-id='77e79a4b' name='file' filepath='net/core/sock.c' line='2727' column='1'/>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2727' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='net/core/sock.c' line='2727' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_gettstamp' mangled-name='sock_gettstamp' filepath='net/core/sock.c' line='3027' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_gettstamp'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='3027' column='1'/>
+        <parameter type-id='eaa32e2f' name='userstamp' filepath='net/core/sock.c' line='3027' column='1'/>
+        <parameter type-id='b50a4934' name='timeval' filepath='net/core/sock.c' line='3028' column='1'/>
+        <parameter type-id='b50a4934' name='time32' filepath='net/core/sock.c' line='3028' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/core/utils.c' language='LANG_C89'>
+      <function-decl name='in4_pton' mangled-name='in4_pton' filepath='net/core/utils.c' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='in4_pton'>
+        <parameter type-id='80f4b756' name='src' filepath='net/core/utils.c' line='118' column='1'/>
+        <parameter type-id='95e97e5e' name='srclen' filepath='net/core/utils.c' line='118' column='1'/>
+        <parameter type-id='8bff8096' name='dst' filepath='net/core/utils.c' line='119' column='1'/>
+        <parameter type-id='95e97e5e' name='delim' filepath='net/core/utils.c' line='120' column='1'/>
+        <parameter type-id='7d3cd834' name='end' filepath='net/core/utils.c' line='120' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='in6_pton' mangled-name='in6_pton' filepath='net/core/utils.c' line='184' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='in6_pton'>
+        <parameter type-id='80f4b756' name='src' filepath='net/core/utils.c' line='184' column='1'/>
+        <parameter type-id='95e97e5e' name='srclen' filepath='net/core/utils.c' line='184' column='1'/>
+        <parameter type-id='8bff8096' name='dst' filepath='net/core/utils.c' line='185' column='1'/>
+        <parameter type-id='95e97e5e' name='delim' filepath='net/core/utils.c' line='186' column='1'/>
+        <parameter type-id='7d3cd834' name='end' filepath='net/core/utils.c' line='186' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ethernet/eth.c' language='LANG_C89'>
+      <function-decl name='eth_prepare_mac_addr_change' mangled-name='eth_prepare_mac_addr_change' filepath='net/ethernet/eth.c' line='291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='eth_prepare_mac_addr_change'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/ethernet/eth.c' line='291' column='1'/>
+        <parameter type-id='eaa32e2f' name='p' filepath='net/ethernet/eth.c' line='291' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='eth_commit_mac_addr_change' mangled-name='eth_commit_mac_addr_change' filepath='net/ethernet/eth.c' line='308' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='eth_commit_mac_addr_change'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/ethernet/eth.c' line='308' column='1'/>
+        <parameter type-id='eaa32e2f' name='p' filepath='net/ethernet/eth.c' line='308' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='eth_mac_addr' mangled-name='eth_mac_addr' filepath='net/ethernet/eth.c' line='326' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='eth_mac_addr'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/ethernet/eth.c' line='326' column='1'/>
+        <parameter type-id='eaa32e2f' name='p' filepath='net/ethernet/eth.c' line='326' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='eth_validate_addr' mangled-name='eth_validate_addr' filepath='net/ethernet/eth.c' line='354' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='eth_validate_addr'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/ethernet/eth.c' line='354' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='eth_platform_get_mac_address' mangled-name='eth_platform_get_mac_address' filepath='net/ethernet/eth.c' line='551' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='eth_platform_get_mac_address'>
+        <parameter type-id='fa0b179b' name='dev' filepath='net/ethernet/eth.c' line='551' column='1'/>
+        <parameter type-id='8bff8096' name='mac_addr' filepath='net/ethernet/eth.c' line='551' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv4/arp.c' language='LANG_C89'>
+      <var-decl name='arp_tbl' type-id='aebe1cff' mangled-name='arp_tbl' visibility='default' filepath='net/ipv4/arp.c' line='152' column='1' elf-symbol-id='arp_tbl'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv4/devinet.c' language='LANG_C89'>
+      <function-decl name='register_inetaddr_notifier' mangled-name='register_inetaddr_notifier' filepath='net/ipv4/devinet.c' line='1451' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_inetaddr_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='net/ipv4/devinet.c' line='1451' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_inetaddr_notifier' mangled-name='unregister_inetaddr_notifier' filepath='net/ipv4/devinet.c' line='1457' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_inetaddr_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='net/ipv4/devinet.c' line='1457' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv4/esp4.c' language='LANG_C89'>
+      <function-decl name='xfrm_output_resume' mangled-name='xfrm_output_resume' filepath='include/net/xfrm.h' line='1554' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_output_resume'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv4/fib_frontend.c' language='LANG_C89'>
+      <function-decl name='inet_dev_addr_type' mangled-name='inet_dev_addr_type' filepath='net/ipv4/fib_frontend.c' line='258' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inet_dev_addr_type'>
+        <parameter type-id='a2bff677' name='net' filepath='net/ipv4/fib_frontend.c' line='258' column='1'/>
+        <parameter type-id='2ce52478' name='dev' filepath='net/ipv4/fib_frontend.c' line='258' column='1'/>
+        <parameter type-id='78a133c2' name='addr' filepath='net/ipv4/fib_frontend.c' line='259' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv4/gre_offload.c' language='LANG_C89'>
+      <function-decl name='csum_partial' mangled-name='csum_partial' filepath='include/asm-generic/checksum.h' line='17' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='csum_partial'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='skb_checksum' mangled-name='skb_checksum' filepath='include/linux/skbuff.h' line='3587' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_checksum'>
+        <parameter type-id='11f4a000'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv4/ip_vti.c' language='LANG_C89'>
+      <class-decl name='xfrm4_protocol' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='1396' column='1' id='bf8af843'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='handler' type-id='d2e00785' visibility='default' filepath='include/net/xfrm.h' line='1397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='input_handler' type-id='ec71052e' visibility='default' filepath='include/net/xfrm.h' line='1398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cb_handler' type-id='0aeca82c' visibility='default' filepath='include/net/xfrm.h' line='1400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='err_handler' type-id='5cacf26c' visibility='default' filepath='include/net/xfrm.h' line='1401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='next' type-id='5a0e9b53' visibility='default' filepath='include/net/xfrm.h' line='1403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='priority' type-id='95e97e5e' visibility='default' filepath='include/net/xfrm.h' line='1404' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='eba8a6fd' const='yes' id='befdc6b5'/>
+      <pointer-type-def type-id='befdc6b5' size-in-bits='64' id='487fac4d'/>
+      <pointer-type-def type-id='618f2f7e' size-in-bits='64' id='a99cde64'/>
+      <pointer-type-def type-id='0b1ae172' size-in-bits='64' id='0aeca82c'/>
+      <pointer-type-def type-id='1e37318c' size-in-bits='64' id='ec71052e'/>
+      <pointer-type-def type-id='bf8af843' size-in-bits='64' id='5a0e9b53'/>
+      <function-decl name='xfrm4_protocol_deregister' mangled-name='xfrm4_protocol_deregister' filepath='include/net/xfrm.h' line='1582' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm4_protocol_deregister'>
+        <parameter type-id='5a0e9b53'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_scrub_packet' mangled-name='skb_scrub_packet' filepath='include/linux/skbuff.h' line='3548' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_scrub_packet'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xfrm_state_lookup' mangled-name='xfrm_state_lookup' filepath='include/net/xfrm.h' line='1496' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_state_lookup'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='487fac4d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='8efea9e5'/>
+        <return type-id='328dda6e'/>
+      </function-decl>
+      <function-decl name='xfrm_input' mangled-name='xfrm_input' filepath='include/net/xfrm.h' line='1549' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_input'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ip6_route_output_flags' mangled-name='ip6_route_output_flags' filepath='include/net/ip6_route.h' line='91' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip6_route_output_flags'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='78e7cf52'/>
+        <parameter type-id='a99cde64'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='141b6427'/>
+      </function-decl>
+      <function-decl name='xfrm_lookup' mangled-name='xfrm_lookup' filepath='include/net/dst.h' line='501' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_lookup'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='141b6427'/>
+        <parameter type-id='c76694b7'/>
+        <parameter type-id='78e7cf52'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='141b6427'/>
+      </function-decl>
+      <function-decl name='icmpv6_send' mangled-name='icmpv6_send' filepath='include/linux/icmpv6.h' line='16' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icmpv6_send'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xfrm4_protocol_register' mangled-name='xfrm4_protocol_register' filepath='include/net/xfrm.h' line='1581' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm4_protocol_register'>
+        <parameter type-id='5a0e9b53'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='0b1ae172'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1e37318c'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='78a133c2'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <pointer-type-def type-id='ef4bec92' size-in-bits='64' id='5cacf26c'/>
+      <function-type size-in-bits='64' id='ef4bec92'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv4/ipip.c' language='LANG_C89'>
+      <class-decl name='xfrm_tunnel' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='1418' column='1' id='3c05ad89'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='handler' type-id='d2e00785' visibility='default' filepath='include/net/xfrm.h' line='1419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='err_handler' type-id='5cacf26c' visibility='default' filepath='include/net/xfrm.h' line='1420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='f68cfba1' visibility='default' filepath='include/net/xfrm.h' line='1422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='priority' type-id='95e97e5e' visibility='default' filepath='include/net/xfrm.h' line='1423' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ef4bec92' size-in-bits='64' id='5cacf26c'/>
+      <pointer-type-def type-id='3c05ad89' size-in-bits='64' id='f68cfba1'/>
+      <function-decl name='xfrm4_tunnel_deregister' mangled-name='xfrm4_tunnel_deregister' filepath='include/net/xfrm.h' line='1584' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm4_tunnel_deregister'>
+        <parameter type-id='f68cfba1'/>
+        <parameter type-id='8efea9e5'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_pernet_device' mangled-name='unregister_pernet_device' filepath='include/net/net_namespace.h' line='404' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_pernet_device'>
+        <parameter type-id='d6907f4c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ipv4_redirect' mangled-name='ipv4_redirect' filepath='include/net/route.h' line='208' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipv4_redirect'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ipv4_update_pmtu' mangled-name='ipv4_update_pmtu' filepath='include/net/route.h' line='205' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipv4_update_pmtu'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='register_pernet_device' mangled-name='register_pernet_device' filepath='include/net/net_namespace.h' line='403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_pernet_device'>
+        <parameter type-id='d6907f4c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xfrm4_tunnel_register' mangled-name='xfrm4_tunnel_register' filepath='include/net/xfrm.h' line='1583' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm4_tunnel_register'>
+        <parameter type-id='f68cfba1'/>
+        <parameter type-id='8efea9e5'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='68f5a646' size-in-bits='64' id='d6907f4c'/>
+      <class-decl name='pernet_operations' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/net_namespace.h' line='350' column='1' id='68f5a646'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/net_namespace.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='e83d6bbe' visibility='default' filepath='include/net/net_namespace.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pre_exit' type-id='9b92b29b' visibility='default' filepath='include/net/net_namespace.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='exit' type-id='9b92b29b' visibility='default' filepath='include/net/net_namespace.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='exit_batch' type-id='29f83363' visibility='default' filepath='include/net/net_namespace.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='id' type-id='807869d3' visibility='default' filepath='include/net/net_namespace.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/net/net_namespace.h' line='379' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='0790750c' size-in-bits='64' id='e83d6bbe'/>
+      <pointer-type-def type-id='c7e57ee7' size-in-bits='64' id='29f83363'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv4/netfilter/iptable_filter.c' language='LANG_C89'>
+      <class-decl name='nf_hook_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/netfilter.h' line='79' column='1' id='63d6992a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hook' type-id='c8f8b049' visibility='default' filepath='include/linux/netfilter.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/linux/netfilter.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pf' type-id='892641a4' visibility='default' filepath='include/linux/netfilter.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='hooknum' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='priority' type-id='95e97e5e' visibility='default' filepath='include/linux/netfilter.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='469df90f' const='yes' id='3d24528f'/>
+      <pointer-type-def type-id='3d24528f' size-in-bits='64' id='e52e19bf'/>
+      <pointer-type-def type-id='63d6992a' size-in-bits='64' id='f7d53868'/>
+      <pointer-type-def type-id='272e7e29' size-in-bits='64' id='5182f495'/>
+      <function-decl name='xt_hook_ops_alloc' mangled-name='xt_hook_ops_alloc' filepath='include/linux/netfilter/x_tables.h' line='449' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xt_hook_ops_alloc'>
+        <parameter type-id='e52e19bf'/>
+        <parameter type-id='5182f495'/>
+        <return type-id='f7d53868'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='272e7e29'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='309a5a26'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <class-decl name='xt_table' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='223' column='1' id='469df90f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='valid_hooks' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private' type-id='b6316a7f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='me' type-id='2730d015' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='af' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='priority' type-id='95e97e5e' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='table_init' type-id='e83d6bbe' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='639bec1b' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='242' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='u_int8_t' type-id='f9b06939' filepath='include/linux/types.h' line='98' column='1' id='892641a4'/>
+      <array-type-def dimensions='1' type-id='9b45d938' size-in-bits='256' id='639bec1b'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <pointer-type-def type-id='3a8ead28' size-in-bits='64' id='309a5a26'/>
+      <pointer-type-def type-id='68a72cd7' size-in-bits='64' id='b6316a7f'/>
+      <qualified-type-def type-id='89d4ce3f' const='yes' id='3a8ead28'/>
+      <class-decl name='xt_table_info' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='248' column='1' id='68a72cd7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='number' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='initial_entries' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hook_entry' type-id='4d5a4f46' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='underflow' type-id='4d5a4f46' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='stacksize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='jumpstack' type-id='30e664af' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='entries' type-id='5e6516ee' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='267' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_hook_state' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/netfilter.h' line='66' column='1' id='89d4ce3f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hook' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pf' type-id='892641a4' visibility='default' filepath='include/linux/netfilter.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='in' type-id='68a2d05c' visibility='default' filepath='include/linux/netfilter.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='out' type-id='68a2d05c' visibility='default' filepath='include/linux/netfilter.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sk' type-id='f772df6e' visibility='default' filepath='include/linux/netfilter.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='net' type-id='a2bff677' visibility='default' filepath='include/linux/netfilter.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='okfn' type-id='0023218e' visibility='default' filepath='include/linux/netfilter.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='160' id='4d5a4f46'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <pointer-type-def type-id='63e171df' size-in-bits='64' id='30e664af'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv4/raw.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='16384' id='a7c26c7b'>
+        <subrange length='256' type-id='7ff19f0f' id='36e5b9fa'/>
+      </array-type-def>
+      <class-decl name='udp_hslot' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/udp.h' line='57' column='1' id='fa07ab8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='e151255a' visibility='default' filepath='include/net/udp.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/net/udp.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/udp.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='fa07ab8f' size-in-bits='64' id='9cc41107'/>
+      <var-decl name='raw_v4_hashinfo' type-id='51ee3086' mangled-name='raw_v4_hashinfo' visibility='default' filepath='net/ipv4/raw.c' line='88' column='1' elf-symbol-id='raw_v4_hashinfo'/>
+      <function-decl name='__raw_v4_lookup' mangled-name='__raw_v4_lookup' filepath='net/ipv4/raw.c' line='120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__raw_v4_lookup'>
+        <parameter type-id='a2bff677' name='net' filepath='net/ipv4/raw.c' line='120' column='1'/>
+        <parameter type-id='f772df6e' name='sk' filepath='net/ipv4/raw.c' line='120' column='1'/>
+        <parameter type-id='8efea9e5' name='num' filepath='net/ipv4/raw.c' line='121' column='1'/>
+        <parameter type-id='78a133c2' name='raddr' filepath='net/ipv4/raw.c' line='121' column='1'/>
+        <parameter type-id='78a133c2' name='laddr' filepath='net/ipv4/raw.c' line='121' column='1'/>
+        <parameter type-id='95e97e5e' name='dif' filepath='net/ipv4/raw.c' line='122' column='1'/>
+        <parameter type-id='95e97e5e' name='sdif' filepath='net/ipv4/raw.c' line='122' column='1'/>
+        <return type-id='f772df6e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv4/route.c' language='LANG_C89'>
+      <function-decl name='__ip_select_ident' mangled-name='__ip_select_ident' filepath='net/ipv4/route.c' line='507' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ip_select_ident'>
+        <parameter type-id='a2bff677' name='net' filepath='net/ipv4/route.c' line='507' column='1'/>
+        <parameter type-id='53be694c' name='iph' filepath='net/ipv4/route.c' line='507' column='1'/>
+        <parameter type-id='95e97e5e' name='segs' filepath='net/ipv4/route.c' line='507' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv4/sysctl_net_ipv4.c' language='LANG_C89'>
+      <function-decl name='register_net_sysctl' mangled-name='register_net_sysctl' filepath='include/net/net_namespace.h' line='411' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_net_sysctl'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='631dc3c1'/>
+        <return type-id='11b101bb'/>
+      </function-decl>
+      <function-decl name='proc_dointvec' mangled-name='proc_dointvec' filepath='include/linux/sysctl.h' line='52' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_dointvec'>
+        <parameter type-id='631dc3c1'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='8b97c2dc'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv4/tcp_diag.c' language='LANG_C89'>
+      <class-decl name='inet_diag_handler' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/inet_diag.h' line='10' column='1' id='a8966aec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dump' type-id='ccda370f' visibility='default' filepath='include/linux/inet_diag.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dump_one' type-id='1ae236b0' visibility='default' filepath='include/linux/inet_diag.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idiag_get_info' type-id='3e22b2b6' visibility='default' filepath='include/linux/inet_diag.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='idiag_get_aux' type-id='98dc4446' visibility='default' filepath='include/linux/inet_diag.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='idiag_get_aux_size' type-id='5db8f742' visibility='default' filepath='include/linux/inet_diag.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='destroy' type-id='6d1cf440' visibility='default' filepath='include/linux/inet_diag.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='idiag_type' type-id='d315442e' visibility='default' filepath='include/linux/inet_diag.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='idiag_info_size' type-id='d315442e' visibility='default' filepath='include/linux/inet_diag.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_diag_req_v2' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='38' column='1' id='98bb2d81'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sdiag_family' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='sdiag_protocol' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='idiag_ext' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='pad' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='idiag_states' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='b73cf3f5' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_diag_sockid' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='14' column='1' id='b73cf3f5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idiag_sport' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='idiag_dport' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='idiag_src' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='idiag_dst' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='idiag_if' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='idiag_cookie' type-id='839e8989' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_diag_msg' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='113' column='1' id='1bead3e1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idiag_family' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='idiag_state' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='idiag_timer' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='idiag_retrans' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='b73cf3f5' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='idiag_expires' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='idiag_rqueue' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='idiag_wqueue' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='idiag_uid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='idiag_inode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='a8966aec' const='yes' id='00dd00af'/>
+      <pointer-type-def type-id='00dd00af' size-in-bits='64' id='e0e7d15f'/>
+      <qualified-type-def type-id='98bb2d81' const='yes' id='b1eae038'/>
+      <pointer-type-def type-id='b1eae038' size-in-bits='64' id='26bebc56'/>
+      <pointer-type-def type-id='1bead3e1' size-in-bits='64' id='36b74cb9'/>
+      <pointer-type-def type-id='15d70b96' size-in-bits='64' id='6d1cf440'/>
+      <pointer-type-def type-id='72c03956' size-in-bits='64' id='1ae236b0'/>
+      <pointer-type-def type-id='457c9dbc' size-in-bits='64' id='98dc4446'/>
+      <pointer-type-def type-id='62313820' size-in-bits='64' id='5db8f742'/>
+      <pointer-type-def type-id='c42215fb' size-in-bits='64' id='ccda370f'/>
+      <pointer-type-def type-id='15df0404' size-in-bits='64' id='3e22b2b6'/>
+      <function-decl name='inet_diag_unregister' mangled-name='inet_diag_unregister' filepath='include/linux/inet_diag.h' line='76' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inet_diag_unregister'>
+        <parameter type-id='e0e7d15f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sock_diag_destroy' mangled-name='sock_diag_destroy' filepath='include/linux/sock_diag.h' line='80' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_diag_destroy'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='inet_diag_register' mangled-name='inet_diag_register' filepath='include/linux/inet_diag.h' line='75' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inet_diag_register'>
+        <parameter type-id='e0e7d15f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='15d70b96'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='26bebc56'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='72c03956'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='390fbe8f'/>
+        <parameter type-id='26bebc56'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='457c9dbc'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='62313820'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c42215fb'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='07b9ee34'/>
+        <parameter type-id='26bebc56'/>
+        <parameter type-id='6fcaf91e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='15df0404'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='36b74cb9'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv4/udp_diag.c' language='LANG_C89'>
+      <class-decl name='inet_bind_bucket' is-struct='yes' visibility='default' is-declaration-only='yes' id='1251126e'/>
+      <class-decl name='ip_mc_socklist' is-struct='yes' visibility='default' is-declaration-only='yes' id='42cd489a'/>
+      <class-decl name='tcp_ulp_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='fccb029f'/>
+      <array-type-def dimensions='1' type-id='f6ed712a' size-in-bits='infinite' id='0fdf6c82'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='832' id='08a4cc8e'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <class-decl name='inet_connection_sock' size-in-bits='11904' is-struct='yes' visibility='default' filepath='include/net/inet_connection_sock.h' line='89' column='1' id='2a0babad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='icsk_inet' type-id='cec16d30' visibility='default' filepath='include/net/inet_connection_sock.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='icsk_accept_queue' type-id='a6c77117' visibility='default' filepath='include/net/inet_connection_sock.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='icsk_bind_hash' type-id='d535b874' visibility='default' filepath='include/net/inet_connection_sock.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='icsk_timeout' type-id='7359adad' visibility='default' filepath='include/net/inet_connection_sock.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='icsk_retransmit_timer' type-id='abe41e67' visibility='default' filepath='include/net/inet_connection_sock.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='icsk_delack_timer' type-id='abe41e67' visibility='default' filepath='include/net/inet_connection_sock.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='icsk_rto' type-id='3f1a6b60' visibility='default' filepath='include/net/inet_connection_sock.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10016'>
+          <var-decl name='icsk_pmtu_cookie' type-id='3f1a6b60' visibility='default' filepath='include/net/inet_connection_sock.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='icsk_ca_ops' type-id='b3ef56ee' visibility='default' filepath='include/net/inet_connection_sock.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='icsk_af_ops' type-id='d23c2125' visibility='default' filepath='include/net/inet_connection_sock.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='icsk_ulp_ops' type-id='c23fc09a' visibility='default' filepath='include/net/inet_connection_sock.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='icsk_ulp_data' type-id='eaa32e2f' visibility='default' filepath='include/net/inet_connection_sock.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='icsk_clean_acked' type-id='815f64bf' visibility='default' filepath='include/net/inet_connection_sock.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='icsk_listen_portaddr_node' type-id='03a4a074' visibility='default' filepath='include/net/inet_connection_sock.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='icsk_sync_mss' type-id='de90632b' visibility='default' filepath='include/net/inet_connection_sock.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='icsk_ca_state' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='icsk_ca_setsockopt' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='icsk_ca_dst_locked' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10568'>
+          <var-decl name='icsk_retransmits' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10576'>
+          <var-decl name='icsk_pending' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10584'>
+          <var-decl name='icsk_backoff' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10592'>
+          <var-decl name='icsk_syn_retries' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10600'>
+          <var-decl name='icsk_probes_out' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10608'>
+          <var-decl name='icsk_ext_hdr_len' type-id='d315442e' visibility='default' filepath='include/net/inet_connection_sock.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='icsk_ack' type-id='a2193a7c' visibility='default' filepath='include/net/inet_connection_sock.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='icsk_mtup' type-id='5e0338e2' visibility='default' filepath='include/net/inet_connection_sock.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10976'>
+          <var-decl name='icsk_probes_tstamp' type-id='19c2251e' visibility='default' filepath='include/net/inet_connection_sock.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='icsk_user_timeout' type-id='19c2251e' visibility='default' filepath='include/net/inet_connection_sock.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='icsk_ca_priv' type-id='08a4cc8e' visibility='default' filepath='include/net/inet_connection_sock.h' line='141' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_sock' size-in-bits='8320' is-struct='yes' visibility='default' filepath='include/net/inet_sock.h' line='195' column='1' id='cec16d30'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sk' type-id='a240f41e' visibility='default' filepath='include/net/inet_sock.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='pinet6' type-id='6d320b83' visibility='default' filepath='include/net/inet_sock.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='inet_saddr' type-id='78a133c2' visibility='default' filepath='include/net/inet_sock.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6752'>
+          <var-decl name='uc_ttl' type-id='b55def60' visibility='default' filepath='include/net/inet_sock.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6768'>
+          <var-decl name='cmsg_flags' type-id='d315442e' visibility='default' filepath='include/net/inet_sock.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='inet_sport' type-id='84a5c3d4' visibility='default' filepath='include/net/inet_sock.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6800'>
+          <var-decl name='inet_id' type-id='d315442e' visibility='default' filepath='include/net/inet_sock.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='inet_opt' type-id='70119ea2' visibility='default' filepath='include/net/inet_sock.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='rx_dst_ifindex' type-id='95e97e5e' visibility='default' filepath='include/net/inet_sock.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6944'>
+          <var-decl name='tos' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6952'>
+          <var-decl name='min_ttl' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6960'>
+          <var-decl name='mc_ttl' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6968'>
+          <var-decl name='pmtudisc' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='recverr' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='is_icsk' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='freebind' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='hdrincl' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='mc_loop' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='transparent' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='mc_all' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='nodefrag' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='bind_address_no_port' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='defer_connect' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6992'>
+          <var-decl name='rcv_tos' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7000'>
+          <var-decl name='convert_csum' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7008'>
+          <var-decl name='uc_index' type-id='95e97e5e' visibility='default' filepath='include/net/inet_sock.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='mc_index' type-id='95e97e5e' visibility='default' filepath='include/net/inet_sock.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7072'>
+          <var-decl name='mc_addr' type-id='78a133c2' visibility='default' filepath='include/net/inet_sock.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='mc_list' type-id='b49efd08' visibility='default' filepath='include/net/inet_sock.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='cork' type-id='da785a0b' visibility='default' filepath='include/net/inet_sock.h' line='238' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_pinfo' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/ipv6.h' line='219' column='1' id='bcad3f73'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='saddr' type-id='f6ed712a' visibility='default' filepath='include/linux/ipv6.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sticky_pktinfo' type-id='91b426fc' visibility='default' filepath='include/linux/ipv6.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='daddr_cache' type-id='fea9c20b' visibility='default' filepath='include/linux/ipv6.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flow_label' type-id='78a133c2' visibility='default' filepath='include/linux/ipv6.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='frag_size' type-id='3f1a6b60' visibility='default' filepath='include/linux/ipv6.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='__unused_1' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hop_limit' type-id='b55def60' visibility='default' filepath='include/linux/ipv6.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='mc_loop' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='__unused_2' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='mcast_hops' type-id='b55def60' visibility='default' filepath='include/linux/ipv6.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='ucast_oif' type-id='95e97e5e' visibility='default' filepath='include/linux/ipv6.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mcast_oif' type-id='95e97e5e' visibility='default' filepath='include/linux/ipv6.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='rxopt' type-id='23d43bd5' visibility='default' filepath='include/linux/ipv6.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='recverr' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='sndflow' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='repflow' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='pmtudisc' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='padding' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='srcprefs' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='dontfrag' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='autoflowlabel' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='autoflowlabel_set' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='mc_all' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='rtalert_isolate' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='min_hopcount' type-id='8f048e17' visibility='default' filepath='include/linux/ipv6.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='584'>
+          <var-decl name='tclass' type-id='8f048e17' visibility='default' filepath='include/linux/ipv6.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='rcv_flowinfo' type-id='78a133c2' visibility='default' filepath='include/linux/ipv6.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dst_cookie' type-id='3f1a6b60' visibility='default' filepath='include/linux/ipv6.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='rx_dst_cookie' type-id='3f1a6b60' visibility='default' filepath='include/linux/ipv6.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ipv6_mc_list' type-id='3d802c7c' visibility='default' filepath='include/linux/ipv6.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ipv6_ac_list' type-id='0d2afef8' visibility='default' filepath='include/linux/ipv6.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ipv6_fl_list' type-id='3a14a5ee' visibility='default' filepath='include/linux/ipv6.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='opt' type-id='d4145729' visibility='default' filepath='include/linux/ipv6.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='pktoptions' type-id='0fbf3cfd' visibility='default' filepath='include/linux/ipv6.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='rxpmtu' type-id='0fbf3cfd' visibility='default' filepath='include/linux/ipv6.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cork' type-id='79e3d9fd' visibility='default' filepath='include/linux/ipv6.h' line='307' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='in6_pktinfo' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/ipv6.h' line='21' column='1' id='91b426fc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ipi6_addr' type-id='f6ed712a' visibility='default' filepath='include/uapi/linux/ipv6.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ipi6_ifindex' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/ipv6.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__8' size-in-bits='16' is-anonymous='yes' visibility='default' filepath='include/linux/ipv6.h' line='256' column='1' id='23d43bd5'>
+        <data-member access='private'>
+          <var-decl name='bits' type-id='9ebd5abd' visibility='default' filepath='include/linux/ipv6.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='all' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='275' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ipv6.h' line='257' column='1' id='9ebd5abd'>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='srcrt' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='osrcrt' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='rxinfo' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='rxoinfo' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='rxhlim' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='rxohlim' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='hopopts' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='ohopopts' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='dstopts' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='odstopts' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='rxflow' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='rxtclass' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='rxpmtu' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='rxorigdstaddr' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='recvfragsize' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='272' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_mc_socklist' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='89' column='1' id='8f725b86'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ifindex' type-id='95e97e5e' visibility='default' filepath='include/net/if_inet6.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='sfmode' type-id='f0981eeb' visibility='default' filepath='include/net/if_inet6.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='3d802c7c' visibility='default' filepath='include/net/if_inet6.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sflock' type-id='ac16795b' visibility='default' filepath='include/net/if_inet6.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sflist' type-id='b25391b7' visibility='default' filepath='include/net/if_inet6.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/if_inet6.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip6_sf_socklist' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='78' column='1' id='3df0f7af'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sl_max' type-id='f0981eeb' visibility='default' filepath='include/net/if_inet6.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='sl_count' type-id='f0981eeb' visibility='default' filepath='include/net/if_inet6.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sl_addr' type-id='0fdf6c82' visibility='default' filepath='include/net/if_inet6.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_ac_socklist' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='134' column='1' id='dcf61f1a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='acl_addr' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='acl_ifindex' type-id='95e97e5e' visibility='default' filepath='include/net/if_inet6.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='acl_next' type-id='0d2afef8' visibility='default' filepath='include/net/if_inet6.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_fl_socklist' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/ipv6.h' line='337' column='1' id='05198978'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='3a14a5ee' visibility='default' filepath='include/net/ipv6.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fl' type-id='e90fa847' visibility='default' filepath='include/net/ipv6.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ipv6.h' line='340' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip6_flowlabel' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/net/ipv6.h' line='312' column='1' id='55fcdb4f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='e90fa847' visibility='default' filepath='include/net/ipv6.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='label' type-id='78a133c2' visibility='default' filepath='include/net/ipv6.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='users' type-id='49178f86' visibility='default' filepath='include/net/ipv6.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dst' type-id='f6ed712a' visibility='default' filepath='include/net/ipv6.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='opt' type-id='d4145729' visibility='default' filepath='include/net/ipv6.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='linger' type-id='7359adad' visibility='default' filepath='include/net/ipv6.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ipv6.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='share' type-id='f9b06939' visibility='default' filepath='include/net/ipv6.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='owner' type-id='f3980da2' visibility='default' filepath='include/net/ipv6.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='lastuse' type-id='7359adad' visibility='default' filepath='include/net/ipv6.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='expires' type-id='7359adad' visibility='default' filepath='include/net/ipv6.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fl_net' type-id='a2bff677' visibility='default' filepath='include/net/ipv6.h' line='327' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_txoptions' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/ipv6.h' line='287' column='1' id='03e12711'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/ipv6.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tot_len' type-id='95e97e5e' visibility='default' filepath='include/net/ipv6.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='opt_flen' type-id='d315442e' visibility='default' filepath='include/net/ipv6.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='opt_nflen' type-id='d315442e' visibility='default' filepath='include/net/ipv6.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hopopt' type-id='edff578b' visibility='default' filepath='include/net/ipv6.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dst0opt' type-id='edff578b' visibility='default' filepath='include/net/ipv6.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='srcrt' type-id='40629354' visibility='default' filepath='include/net/ipv6.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dst1opt' type-id='edff578b' visibility='default' filepath='include/net/ipv6.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ipv6.h' line='301' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_opt_hdr' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/uapi/linux/ipv6.h' line='61' column='1' id='5510bbdb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nexthdr' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ipv6.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='hdrlen' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ipv6.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_rt_hdr' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/ipv6.h' line='48' column='1' id='0eae882e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nexthdr' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ipv6.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='hdrlen' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ipv6.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ipv6.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='segments_left' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ipv6.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__9' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/ipv6.h' line='321' column='1' id='f3980da2'>
+        <data-member access='private'>
+          <var-decl name='pid' type-id='b94e5398' visibility='default' filepath='include/net/ipv6.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/net/ipv6.h' line='323' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='inet6_cork' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/ipv6.h' line='205' column='1' id='79e3d9fd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='opt' type-id='d4145729' visibility='default' filepath='include/linux/ipv6.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hop_limit' type-id='f9b06939' visibility='default' filepath='include/linux/ipv6.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='tclass' type-id='f9b06939' visibility='default' filepath='include/linux/ipv6.h' line='208' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip_options_rcu' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/inet_sock.h' line='58' column='1' id='0786b8b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/inet_sock.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='opt' type-id='fa35cea9' visibility='default' filepath='include/net/inet_sock.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip_options' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/inet_sock.h' line='39' column='1' id='fa35cea9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='faddr' type-id='78a133c2' visibility='default' filepath='include/net/inet_sock.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nexthop' type-id='78a133c2' visibility='default' filepath='include/net/inet_sock.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='optlen' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='srr' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='rr' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='ts' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='is_strictroute' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='srr_is_hit' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='is_changed' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='rr_needaddr' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='ts_needtime' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='ts_needaddr' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='router_alert' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='cipso' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='__pad2' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__data' type-id='5e6516ee' visibility='default' filepath='include/net/inet_sock.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_cork_full' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/net/inet_sock.h' line='166' column='1' id='da785a0b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='c466cd59' visibility='default' filepath='include/net/inet_sock.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fl' type-id='2117397c' visibility='default' filepath='include/net/inet_sock.h' line='168' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_cork' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/inet_sock.h' line='150' column='1' id='c466cd59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/net/inet_sock.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='addr' type-id='78a133c2' visibility='default' filepath='include/net/inet_sock.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='opt' type-id='57b94931' visibility='default' filepath='include/net/inet_sock.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fragsize' type-id='f0981eeb' visibility='default' filepath='include/net/inet_sock.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='length' type-id='95e97e5e' visibility='default' filepath='include/net/inet_sock.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dst' type-id='141b6427' visibility='default' filepath='include/net/inet_sock.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_flags' type-id='f9b06939' visibility='default' filepath='include/net/inet_sock.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='ttl' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='tos' type-id='b55def60' visibility='default' filepath='include/net/inet_sock.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='priority' type-id='a84c031d' visibility='default' filepath='include/net/inet_sock.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='gso_size' type-id='d315442e' visibility='default' filepath='include/net/inet_sock.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='transmit_time' type-id='91ce1af9' visibility='default' filepath='include/net/inet_sock.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mark' type-id='19c2251e' visibility='default' filepath='include/net/inet_sock.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request_sock_queue' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/net/request_sock.h' line='166' column='1' id='a6c77117'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rskq_lock' type-id='fb4018a0' visibility='default' filepath='include/net/request_sock.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rskq_defer_accept' type-id='f9b06939' visibility='default' filepath='include/net/request_sock.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='synflood_warned' type-id='19c2251e' visibility='default' filepath='include/net/request_sock.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='qlen' type-id='49178f86' visibility='default' filepath='include/net/request_sock.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='young' type-id='49178f86' visibility='default' filepath='include/net/request_sock.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rskq_accept_head' type-id='94c948ef' visibility='default' filepath='include/net/request_sock.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rskq_accept_tail' type-id='94c948ef' visibility='default' filepath='include/net/request_sock.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fastopenq' type-id='a5c461a3' visibility='default' filepath='include/net/request_sock.h' line='176' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fastopen_queue' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/request_sock.h' line='146' column='1' id='a5c461a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rskq_rst_head' type-id='94c948ef' visibility='default' filepath='include/net/request_sock.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rskq_rst_tail' type-id='94c948ef' visibility='default' filepath='include/net/request_sock.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/request_sock.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='qlen' type-id='95e97e5e' visibility='default' filepath='include/net/request_sock.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_qlen' type-id='95e97e5e' visibility='default' filepath='include/net/request_sock.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ctx' type-id='104fa32f' visibility='default' filepath='include/net/request_sock.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_connection_sock_af_ops' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/net/inet_connection_sock.h' line='33' column='1' id='d334c4a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='queue_xmit' type-id='52980ce4' visibility='default' filepath='include/net/inet_connection_sock.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='send_check' type-id='765eef68' visibility='default' filepath='include/net/inet_connection_sock.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rebuild_header' type-id='55530c47' visibility='default' filepath='include/net/inet_connection_sock.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sk_rx_dst_set' type-id='b087f139' visibility='default' filepath='include/net/inet_connection_sock.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='conn_request' type-id='a0f5247f' visibility='default' filepath='include/net/inet_connection_sock.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='syn_recv_sock' type-id='8aa28e29' visibility='default' filepath='include/net/inet_connection_sock.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='net_header_len' type-id='1dc6a898' visibility='default' filepath='include/net/inet_connection_sock.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='net_frag_header_len' type-id='1dc6a898' visibility='default' filepath='include/net/inet_connection_sock.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sockaddr_len' type-id='1dc6a898' visibility='default' filepath='include/net/inet_connection_sock.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='setsockopt' type-id='bc1bf185' visibility='default' filepath='include/net/inet_connection_sock.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='getsockopt' type-id='e0fadd76' visibility='default' filepath='include/net/inet_connection_sock.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='compat_setsockopt' type-id='bc1bf185' visibility='default' filepath='include/net/inet_connection_sock.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='compat_getsockopt' type-id='e0fadd76' visibility='default' filepath='include/net/inet_connection_sock.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='addr2sockaddr' type-id='d9587521' visibility='default' filepath='include/net/inet_connection_sock.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mtu_reduced' type-id='841969d0' visibility='default' filepath='include/net/inet_connection_sock.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/inet_connection_sock.h' line='115' column='1' id='a2193a7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pending' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='quick' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='pingpong' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='blocked' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ato' type-id='3f1a6b60' visibility='default' filepath='include/net/inet_connection_sock.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='timeout' type-id='7359adad' visibility='default' filepath='include/net/inet_connection_sock.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lrcvtime' type-id='3f1a6b60' visibility='default' filepath='include/net/inet_connection_sock.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='last_seg_size' type-id='d315442e' visibility='default' filepath='include/net/inet_connection_sock.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='rcv_mss' type-id='d315442e' visibility='default' filepath='include/net/inet_connection_sock.h' line='124' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='160' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/inet_connection_sock.h' line='126' column='1' id='5e0338e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enabled' type-id='95e97e5e' visibility='default' filepath='include/net/inet_connection_sock.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='search_high' type-id='95e97e5e' visibility='default' filepath='include/net/inet_connection_sock.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='search_low' type-id='95e97e5e' visibility='default' filepath='include/net/inet_connection_sock.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='probe_size' type-id='95e97e5e' visibility='default' filepath='include/net/inet_connection_sock.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='probe_timestamp' type-id='19c2251e' visibility='default' filepath='include/net/inet_connection_sock.h' line='136' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='d334c4a2' const='yes' id='1ec1e54d'/>
+      <pointer-type-def type-id='1ec1e54d' size-in-bits='64' id='d23c2125'/>
+      <qualified-type-def type-id='fccb029f' const='yes' id='cb9a8514'/>
+      <pointer-type-def type-id='cb9a8514' size-in-bits='64' id='c23fc09a'/>
+      <pointer-type-def type-id='1251126e' size-in-bits='64' id='d535b874'/>
+      <pointer-type-def type-id='2a0babad' size-in-bits='64' id='774fc7fd'/>
+      <pointer-type-def type-id='ba5db8ea' size-in-bits='64' id='52980ce4'/>
+      <pointer-type-def type-id='55fcdb4f' size-in-bits='64' id='e90fa847'/>
+      <pointer-type-def type-id='3df0f7af' size-in-bits='64' id='b25391b7'/>
+      <pointer-type-def type-id='42cd489a' size-in-bits='64' id='b49efd08'/>
+      <pointer-type-def type-id='fa35cea9' size-in-bits='64' id='57b94931'/>
+      <pointer-type-def type-id='0786b8b4' size-in-bits='64' id='70119ea2'/>
+      <pointer-type-def type-id='dcf61f1a' size-in-bits='64' id='0d2afef8'/>
+      <pointer-type-def type-id='05198978' size-in-bits='64' id='3a14a5ee'/>
+      <pointer-type-def type-id='8f725b86' size-in-bits='64' id='3d802c7c'/>
+      <pointer-type-def type-id='5510bbdb' size-in-bits='64' id='edff578b'/>
+      <pointer-type-def type-id='bcad3f73' size-in-bits='64' id='6d320b83'/>
+      <pointer-type-def type-id='0eae882e' size-in-bits='64' id='40629354'/>
+      <pointer-type-def type-id='03e12711' size-in-bits='64' id='d4145729'/>
+      <pointer-type-def type-id='34dda955' size-in-bits='64' id='8aa28e29'/>
+      <pointer-type-def type-id='d23b37cf' size-in-bits='64' id='de90632b'/>
+      <pointer-type-def type-id='1945ad2d' size-in-bits='64' id='b087f139'/>
+      <pointer-type-def type-id='f69f6d0e' size-in-bits='64' id='765eef68'/>
+      <pointer-type-def type-id='dae66efd' size-in-bits='64' id='d9587521'/>
+      <function-decl name='netlink_net_capable' mangled-name='netlink_net_capable' filepath='include/linux/netlink.h' line='250' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netlink_net_capable'>
+        <parameter type-id='11f4a000'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='inet_sk_diag_fill' mangled-name='inet_sk_diag_fill' filepath='include/linux/inet_diag.h' line='39' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inet_sk_diag_fill'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='774fc7fd'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='26bebc56'/>
+        <parameter type-id='c0ced321'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='390fbe8f'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='inet_diag_bc_sk' mangled-name='inet_diag_bc_sk' filepath='include/linux/inet_diag.h' line='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inet_diag_bc_sk'>
+        <parameter type-id='0f2a7ce5'/>
+        <parameter type-id='f772df6e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='ba5db8ea'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='b1fd62ba'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34dda955'>
+        <parameter type-id='78e7cf52'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='94c948ef'/>
+        <parameter type-id='141b6427'/>
+        <parameter type-id='94c948ef'/>
+        <parameter type-id='d8e6b335'/>
+        <return type-id='f772df6e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d23b37cf'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1945ad2d'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='11f4a000'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f69f6d0e'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dae66efd'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='5c0abad8'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='fa7c8a73' size-in-bits='64' id='815f64bf'/>
+      <function-type size-in-bits='64' id='fa7c8a73'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv4/xfrm4_input.c' language='LANG_C89'>
+      <function-decl name='xfrm4_rcv' mangled-name='xfrm4_rcv' filepath='net/ipv4/xfrm4_input.c' line='173' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm4_rcv'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/ipv4/xfrm4_input.c' line='173' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv6/addrconf.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='1024' id='6dcfc3c6'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <class-decl name='wpan_phy' size-in-bits='9472' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='176' column='1' id='0a042b05'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='privid' type-id='eaa32e2f' visibility='default' filepath='include/net/cfg802154.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg802154.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='current_channel' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='current_page' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='supported' type-id='7b03c2a4' visibility='default' filepath='include/net/cfg802154.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='transmit_power' type-id='a7832498' visibility='default' filepath='include/net/cfg802154.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='cca' type-id='51a1cee7' visibility='default' filepath='include/net/cfg802154.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='perm_extended_addr' type-id='a30e8d1f' visibility='default' filepath='include/net/cfg802154.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='cca_ed_level' type-id='a7832498' visibility='default' filepath='include/net/cfg802154.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='symbol_duration' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1840'>
+          <var-decl name='lifs_period' type-id='1dc6a898' visibility='default' filepath='include/net/cfg802154.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='sifs_period' type-id='1dc6a898' visibility='default' filepath='include/net/cfg802154.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/net/cfg802154.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='_net' type-id='c9df1e6c' visibility='default' filepath='include/net/cfg802154.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='priv' type-id='e84913bd' visibility='default' filepath='include/net/cfg802154.h' line='217' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wpan_phy_supported' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='134' column='1' id='7b03c2a4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channels' type-id='6dcfc3c6' visibility='default' filepath='include/net/cfg802154.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='cca_modes' type-id='19c2251e' visibility='default' filepath='include/net/cfg802154.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='cca_opts' type-id='19c2251e' visibility='default' filepath='include/net/cfg802154.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='iftypes' type-id='19c2251e' visibility='default' filepath='include/net/cfg802154.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='lbt' type-id='c78c6f33' visibility='default' filepath='include/net/cfg802154.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='min_minbe' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='max_minbe' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1168'>
+          <var-decl name='min_maxbe' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1176'>
+          <var-decl name='max_maxbe' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='min_csma_backoffs' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1192'>
+          <var-decl name='max_csma_backoffs' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1200'>
+          <var-decl name='min_frame_retries' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg802154.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1208'>
+          <var-decl name='max_frame_retries' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg802154.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tx_powers_size' type-id='b59d7dce' visibility='default' filepath='include/net/cfg802154.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='cca_ed_levels_size' type-id='b59d7dce' visibility='default' filepath='include/net/cfg802154.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='tx_powers' type-id='e0a2e3a6' visibility='default' filepath='include/net/cfg802154.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='cca_ed_levels' type-id='e0a2e3a6' visibility='default' filepath='include/net/cfg802154.h' line='142' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl802154_supported_bool_states' filepath='include/net/nl802154.h' line='273' column='1' id='c78c6f33'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL802154_SUPPORTED_BOOL_FALSE' value='0'/>
+        <enumerator name='NL802154_SUPPORTED_BOOL_TRUE' value='1'/>
+        <enumerator name='__NL802154_SUPPORTED_BOOL_INVALD' value='2'/>
+        <enumerator name='NL802154_SUPPORTED_BOOL_BOTH' value='3'/>
+        <enumerator name='__NL802154_SUPPORTED_BOOL_AFTER_LAST' value='4'/>
+        <enumerator name='NL802154_SUPPORTED_BOOL_MAX' value='3'/>
+      </enum-decl>
+      <class-decl name='wpan_phy_cca' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='145' column='1' id='51a1cee7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mode' type-id='59ec32df' visibility='default' filepath='include/net/cfg802154.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='opt' type-id='ef15418f' visibility='default' filepath='include/net/cfg802154.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl802154_cca_modes' filepath='include/net/nl802154.h' line='234' column='1' id='59ec32df'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='__NL802154_CCA_INVALID' value='0'/>
+        <enumerator name='NL802154_CCA_ENERGY' value='1'/>
+        <enumerator name='NL802154_CCA_CARRIER' value='2'/>
+        <enumerator name='NL802154_CCA_ENERGY_CARRIER' value='3'/>
+        <enumerator name='NL802154_CCA_ALOHA' value='4'/>
+        <enumerator name='NL802154_CCA_UWB_SHR' value='5'/>
+        <enumerator name='NL802154_CCA_UWB_MULTIPLEXED' value='6'/>
+        <enumerator name='__NL802154_CCA_ATTR_AFTER_LAST' value='7'/>
+        <enumerator name='NL802154_CCA_ATTR_MAX' value='6'/>
+      </enum-decl>
+      <enum-decl name='nl802154_cca_opts' filepath='include/net/nl802154.h' line='254' column='1' id='ef15418f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL802154_CCA_OPT_ENERGY_CARRIER_AND' value='0'/>
+        <enumerator name='NL802154_CCA_OPT_ENERGY_CARRIER_OR' value='1'/>
+        <enumerator name='__NL802154_CCA_OPT_ATTR_AFTER_LAST' value='2'/>
+        <enumerator name='NL802154_CCA_OPT_ATTR_MAX' value='1'/>
+      </enum-decl>
+      <class-decl name='wpan_dev_header_ops' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='315' column='1' id='95fcbc94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='create' type-id='5afbd3c3' visibility='default' filepath='include/net/cfg802154.h' line='320' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee802154_addr' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='230' column='1' id='57d8dd3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mode' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='pan_id' type-id='23119536' visibility='default' filepath='include/net/cfg802154.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='25cb4d60' visibility='default' filepath='include/net/cfg802154.h' line='233' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/cfg802154.h' line='233' column='1' id='25cb4d60'>
+        <data-member access='private'>
+          <var-decl name='short_addr' type-id='23119536' visibility='default' filepath='include/net/cfg802154.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='extended_addr' type-id='a30e8d1f' visibility='default' filepath='include/net/cfg802154.h' line='235' column='1'/>
+        </data-member>
+      </union-decl>
+      <qualified-type-def type-id='57d8dd3d' const='yes' id='d37aa9fa'/>
+      <pointer-type-def type-id='d37aa9fa' size-in-bits='64' id='ba195270'/>
+      <qualified-type-def type-id='95fcbc94' const='yes' id='ff37489f'/>
+      <pointer-type-def type-id='ff37489f' size-in-bits='64' id='790774ef'/>
+      <pointer-type-def type-id='bb1a67f7' size-in-bits='64' id='5afbd3c3'/>
+      <pointer-type-def type-id='0a042b05' size-in-bits='64' id='82398c35'/>
+      <function-decl name='ipv6_chk_addr' mangled-name='ipv6_chk_addr' filepath='net/ipv6/addrconf.c' line='1890' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipv6_chk_addr'>
+        <parameter type-id='a2bff677' name='net' filepath='net/ipv6/addrconf.c' line='1890' column='1'/>
+        <parameter type-id='fea9c20b' name='addr' filepath='net/ipv6/addrconf.c' line='1890' column='1'/>
+        <parameter type-id='2ce52478' name='dev' filepath='net/ipv6/addrconf.c' line='1891' column='1'/>
+        <parameter type-id='95e97e5e' name='strict' filepath='net/ipv6/addrconf.c' line='1891' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='bb1a67f7'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='ba195270'/>
+        <parameter type-id='ba195270'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv6/addrconf_core.c' language='LANG_C89'>
+      <function-decl name='__ipv6_addr_type' mangled-name='__ipv6_addr_type' filepath='net/ipv6/addrconf_core.c' line='38' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ipv6_addr_type'>
+        <parameter type-id='fea9c20b' name='addr' filepath='net/ipv6/addrconf_core.c' line='38' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='register_inet6addr_notifier' mangled-name='register_inet6addr_notifier' filepath='net/ipv6/addrconf_core.c' line='95' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_inet6addr_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='net/ipv6/addrconf_core.c' line='95' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_inet6addr_notifier' mangled-name='unregister_inet6addr_notifier' filepath='net/ipv6/addrconf_core.c' line='101' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_inet6addr_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='net/ipv6/addrconf_core.c' line='101' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv6/exthdrs_core.c' language='LANG_C89'>
+      <function-decl name='ipv6_ext_hdr' mangled-name='ipv6_ext_hdr' filepath='net/ipv6/exthdrs_core.c' line='13' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipv6_ext_hdr'>
+        <parameter type-id='f9b06939' name='nexthdr' filepath='net/ipv6/exthdrs_core.c' line='13' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv6/ip6_offload.c' language='LANG_C89'>
+      <function-decl name='kfree_skb_list' mangled-name='kfree_skb_list' filepath='include/linux/skbuff.h' line='1028' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kfree_skb_list'>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv6/ip6_output.c' language='LANG_C89'>
+      <function-decl name='ip6_local_out' mangled-name='ip6_local_out' filepath='include/net/ipv6.h' line='1040' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip6_local_out'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv6/ip6_vti.c' language='LANG_C89'>
+      <function-decl name='ns_capable' mangled-name='ns_capable' filepath='include/linux/capability.h' line='211' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ns_capable'>
+        <parameter type-id='c0ced321'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='rt6_lookup' mangled-name='rt6_lookup' filepath='include/net/ip6_route.h' line='150' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rt6_lookup'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='fea9c20b'/>
+        <parameter type-id='fea9c20b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='11f4a000'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='6ceb7783'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv6/ipcomp6.c' language='LANG_C89'>
+      <function-decl name='xfrm_unregister_type' mangled-name='xfrm_unregister_type' filepath='include/net/xfrm.h' line='410' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_unregister_type'>
+        <parameter type-id='4e812b7a'/>
+        <parameter type-id='8efea9e5'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ipcomp_init_state' mangled-name='ipcomp_init_state' filepath='include/net/ipcomp.h' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipcomp_init_state'>
+        <parameter type-id='328dda6e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xfrm_state_alloc' mangled-name='xfrm_state_alloc' filepath='include/net/xfrm.h' line='1477' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_state_alloc'>
+        <parameter type-id='a2bff677'/>
+        <return type-id='328dda6e'/>
+      </function-decl>
+      <function-decl name='xfrm_init_state' mangled-name='xfrm_init_state' filepath='include/net/xfrm.h' line='1548' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_init_state'>
+        <parameter type-id='328dda6e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xfrm_state_insert' mangled-name='xfrm_state_insert' filepath='include/net/xfrm.h' line='1493' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_state_insert'>
+        <parameter type-id='328dda6e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xfrm_register_type' mangled-name='xfrm_register_type' filepath='include/net/xfrm.h' line='409' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_register_type'>
+        <parameter type-id='4e812b7a'/>
+        <parameter type-id='8efea9e5'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv6/ndisc.c' language='LANG_C89'>
+      <var-decl name='nd_tbl' type-id='aebe1cff' mangled-name='nd_tbl' visibility='default' filepath='net/ipv6/ndisc.c' line='109' column='1' elf-symbol-id='nd_tbl'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv6/netfilter/ip6table_filter.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='5c902035' size-in-bits='infinite' id='897aa90d'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='ip6t_replace' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='219' column='1' id='fdaf7365'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='valid_hooks' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='num_entries' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='hook_entry' type-id='4d5a4f46' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='underflow' type-id='4d5a4f46' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='num_counters' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='counters' type-id='14e4adab' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='entries' type-id='897aa90d' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='246' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xt_counters' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/netfilter/x_tables.h' line='110' column='1' id='f3def31b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pcnt' type-id='d3130597' visibility='default' filepath='include/uapi/linux/netfilter/x_tables.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bcnt' type-id='d3130597' visibility='default' filepath='include/uapi/linux/netfilter/x_tables.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip6t_entry' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='110' column='1' id='5c902035'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ipv6' type-id='3c253edc' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='nfcache' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='target_offset' type-id='d315442e' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1136'>
+          <var-decl name='next_offset' type-id='d315442e' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='comefrom' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='counters' type-id='f3def31b' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='elems' type-id='5e6516ee' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip6t_ip6' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='64' column='1' id='3c253edc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='src' type-id='f6ed712a' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dst' type-id='f6ed712a' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='smsk' type-id='f6ed712a' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dmsk' type-id='f6ed712a' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='iniface' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='outiface' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='iniface_mask' type-id='92a46553' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='outiface_mask' type-id='92a46553' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='proto' type-id='d315442e' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='tos' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1048'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='invflags' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='fdaf7365' const='yes' id='3390cea8'/>
+      <pointer-type-def type-id='3390cea8' size-in-bits='64' id='aef516a6'/>
+      <qualified-type-def type-id='63d6992a' const='yes' id='af1e6651'/>
+      <pointer-type-def type-id='af1e6651' size-in-bits='64' id='27db53a1'/>
+      <pointer-type-def type-id='f3def31b' size-in-bits='64' id='14e4adab'/>
+      <pointer-type-def type-id='95610bd5' size-in-bits='64' id='25c5e0da'/>
+      <function-decl name='ip6t_alloc_initial_table' mangled-name='ip6t_alloc_initial_table' filepath='include/linux/netfilter_ipv6/ip6_tables.h' line='25' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip6t_alloc_initial_table'>
+        <parameter type-id='e52e19bf'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='ip6t_register_table' mangled-name='ip6t_register_table' filepath='include/linux/netfilter_ipv6/ip6_tables.h' line='27' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip6t_register_table'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='e52e19bf'/>
+        <parameter type-id='aef516a6'/>
+        <parameter type-id='27db53a1'/>
+        <parameter type-id='25c5e0da'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ip6t_unregister_table' mangled-name='ip6t_unregister_table' filepath='include/linux/netfilter_ipv6/ip6_tables.h' line='30' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip6t_unregister_table'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='95610bd5'/>
+        <parameter type-id='27db53a1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ip6t_do_table' mangled-name='ip6t_do_table' filepath='include/linux/netfilter_ipv6/ip6_tables.h' line='32' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip6t_do_table'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='309a5a26'/>
+        <parameter type-id='95610bd5'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <pointer-type-def type-id='469df90f' size-in-bits='64' id='95610bd5'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv6/raw.c' language='LANG_C89'>
+      <var-decl name='raw_v6_hashinfo' type-id='51ee3086' mangled-name='raw_v6_hashinfo' visibility='default' filepath='net/ipv6/raw.c' line='64' column='1' elf-symbol-id='raw_v6_hashinfo'/>
+      <function-decl name='__raw_v6_lookup' mangled-name='__raw_v6_lookup' filepath='net/ipv6/raw.c' line='69' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__raw_v6_lookup'>
+        <parameter type-id='a2bff677' name='net' filepath='net/ipv6/raw.c' line='69' column='1'/>
+        <parameter type-id='f772df6e' name='sk' filepath='net/ipv6/raw.c' line='69' column='1'/>
+        <parameter type-id='8efea9e5' name='num' filepath='net/ipv6/raw.c' line='70' column='1'/>
+        <parameter type-id='fea9c20b' name='loc_addr' filepath='net/ipv6/raw.c' line='70' column='1'/>
+        <parameter type-id='fea9c20b' name='rmt_addr' filepath='net/ipv6/raw.c' line='71' column='1'/>
+        <parameter type-id='95e97e5e' name='dif' filepath='net/ipv6/raw.c' line='71' column='1'/>
+        <parameter type-id='95e97e5e' name='sdif' filepath='net/ipv6/raw.c' line='71' column='1'/>
+        <return type-id='f772df6e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv6/sit.c' language='LANG_C89'>
+      <function-decl name='neigh_destroy' mangled-name='neigh_destroy' filepath='include/net/neighbour.h' line='326' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='neigh_destroy'>
+        <parameter type-id='3c330067'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv6/xfrm6_input.c' language='LANG_C89'>
+      <function-decl name='xfrm6_rcv' mangled-name='xfrm6_rcv' filepath='net/ipv6/xfrm6_input.c' line='79' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm6_rcv'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/ipv6/xfrm6_input.c' line='79' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/ipv6/xfrm6_output.c' language='LANG_C89'>
+      <function-decl name='xfrm6_find_1stfragopt' mangled-name='xfrm6_find_1stfragopt' filepath='net/ipv6/xfrm6_output.c' line='19' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm6_find_1stfragopt'>
+        <parameter type-id='328dda6e' name='x' filepath='net/ipv6/xfrm6_output.c' line='19' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/ipv6/xfrm6_output.c' line='19' column='1'/>
+        <parameter type-id='1f37a7f4' name='prevhdr' filepath='net/ipv6/xfrm6_output.c' line='20' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/key/af_key.c' language='LANG_C89'>
+      <class-decl name='xfrm_algo_desc' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='1381' column='1' id='e8649a20'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/net/xfrm.h' line='1382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='compat' type-id='26a90f95' visibility='default' filepath='include/net/xfrm.h' line='1383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='available' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='1384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='pfkey_supported' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='1385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='uinfo' type-id='2169229a' visibility='default' filepath='include/net/xfrm.h' line='1391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='desc' type-id='731caba6' visibility='default' filepath='include/net/xfrm.h' line='1392' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/xfrm.h' line='1386' column='1' id='2169229a'>
+        <data-member access='private'>
+          <var-decl name='aead' type-id='71694cb7' visibility='default' filepath='include/net/xfrm.h' line='1387' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='auth' type-id='8408b0cc' visibility='default' filepath='include/net/xfrm.h' line='1388' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='encr' type-id='9dbf2e50' visibility='default' filepath='include/net/xfrm.h' line='1389' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='comp' type-id='b9ac86db' visibility='default' filepath='include/net/xfrm.h' line='1390' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='xfrm_algo_aead_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='1361' column='1' id='71694cb7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='geniv' type-id='26a90f95' visibility='default' filepath='include/net/xfrm.h' line='1362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='icv_truncbits' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='1363' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_algo_auth_info' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='1366' column='1' id='8408b0cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='icv_truncbits' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='1367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='icv_fullbits' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='1368' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_algo_encr_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='1371' column='1' id='9dbf2e50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='geniv' type-id='26a90f95' visibility='default' filepath='include/net/xfrm.h' line='1372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='blockbits' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='1373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='defkeybits' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='1374' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_algo_comp_info' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='1377' column='1' id='b9ac86db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='threshold' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='1378' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sadb_alg' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/pfkeyv2.h' line='142' column='1' id='731caba6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sadb_alg_id' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/pfkeyv2.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='sadb_alg_ivlen' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/pfkeyv2.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sadb_alg_minbits' type-id='d315442e' visibility='default' filepath='include/uapi/linux/pfkeyv2.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='sadb_alg_maxbits' type-id='d315442e' visibility='default' filepath='include/uapi/linux/pfkeyv2.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='sadb_alg_reserved' type-id='d315442e' visibility='default' filepath='include/uapi/linux/pfkeyv2.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='net_proto_family' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='217' column='1' id='89303496'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/linux/net.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='create' type-id='d128cc8f' visibility='default' filepath='include/linux/net.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/net.h' line='221' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='89303496' const='yes' id='7f9fdab3'/>
+      <pointer-type-def type-id='7f9fdab3' size-in-bits='64' id='81a51edb'/>
+      <pointer-type-def type-id='c7873973' size-in-bits='64' id='d128cc8f'/>
+      <pointer-type-def type-id='e8649a20' size-in-bits='64' id='dc64b956'/>
+      <function-decl name='sock_unregister' mangled-name='sock_unregister' filepath='include/linux/net.h' line='236' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_unregister'>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sock_i_ino' mangled-name='sock_i_ino' filepath='include/net/sock.h' line='1857' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_i_ino'>
+        <parameter type-id='f772df6e'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='skb_clone' mangled-name='skb_clone' filepath='include/linux/skbuff.h' line='1113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_clone'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='xfrm_aalg_get_byname' mangled-name='xfrm_aalg_get_byname' filepath='include/net/xfrm.h' line='1692' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_aalg_get_byname'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='dc64b956'/>
+      </function-decl>
+      <function-decl name='sock_register' mangled-name='sock_register' filepath='include/linux/net.h' line='235' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_register'>
+        <parameter type-id='81a51edb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='refcount_dec_checked' mangled-name='refcount_dec_checked' filepath='include/linux/refcount.h' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='refcount_dec_checked'>
+        <parameter type-id='74c91557'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_recv_datagram' mangled-name='skb_recv_datagram' filepath='include/linux/skbuff.h' line='3506' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_recv_datagram'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='skb_copy_datagram_iter' mangled-name='skb_copy_datagram_iter' filepath='include/linux/skbuff.h' line='3510' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_copy_datagram_iter'>
+        <parameter type-id='11f4a000'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='4fa10f9e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_free_datagram' mangled-name='skb_free_datagram' filepath='include/linux/skbuff.h' line='3525' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_free_datagram'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_copy' mangled-name='skb_copy' filepath='include/linux/skbuff.h' line='1115' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_copy'>
+        <parameter type-id='11f4a000'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='c7873973'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='13103032'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/l2tp/l2tp_ppp.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='b96825af' size-in-bits='infinite' id='048fe7bc'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='l2tp_session' size-in-bits='2624' is-struct='yes' visibility='default' filepath='net/l2tp/l2tp_core.h' line='71' column='1' id='9726f99c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dead' type-id='bd54fe1a' visibility='default' filepath='net/l2tp/l2tp_core.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tunnel' type-id='2d83a1b8' visibility='default' filepath='net/l2tp/l2tp_core.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='session_id' type-id='19c2251e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='peer_session_id' type-id='19c2251e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cookie' type-id='d2f7b56a' visibility='default' filepath='net/l2tp/l2tp_core.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cookie_len' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='peer_cookie' type-id='d2f7b56a' visibility='default' filepath='net/l2tp/l2tp_core.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='peer_cookie_len' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='l2specific_type' type-id='1dc6a898' visibility='default' filepath='net/l2tp/l2tp_core.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='hdr_len' type-id='1dc6a898' visibility='default' filepath='net/l2tp/l2tp_core.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='nr' type-id='19c2251e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ns' type-id='19c2251e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reorder_q' type-id='e61c85d0' visibility='default' filepath='net/l2tp/l2tp_core.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nr_max' type-id='19c2251e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='nr_window_size' type-id='19c2251e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_oos' type-id='19c2251e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='nr_oos_count' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='nr_oos_count_max' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hlist' type-id='03a4a074' visibility='default' filepath='net/l2tp/l2tp_core.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='ref_count' type-id='64615833' visibility='default' filepath='net/l2tp/l2tp_core.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='net/l2tp/l2tp_core.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='ifname' type-id='ac1fa8c0' visibility='default' filepath='net/l2tp/l2tp_core.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='recv_seq' type-id='f0981eeb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='send_seq' type-id='f0981eeb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='lns_mode' type-id='f0981eeb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='debug' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='reorder_timeout' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='reorder_skip' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='pwtype' type-id='748fba12' visibility='default' filepath='net/l2tp/l2tp_core.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='stats' type-id='33e678c3' visibility='default' filepath='net/l2tp/l2tp_core.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='global_hlist' type-id='03a4a074' visibility='default' filepath='net/l2tp/l2tp_core.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='build_header' type-id='837076a2' visibility='default' filepath='net/l2tp/l2tp_core.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='recv_skb' type-id='7d671c0a' visibility='default' filepath='net/l2tp/l2tp_core.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='session_close' type-id='901b6973' visibility='default' filepath='net/l2tp/l2tp_core.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='show' type-id='6ba28d1c' visibility='default' filepath='net/l2tp/l2tp_core.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='priv' type-id='048fe7bc' visibility='default' filepath='net/l2tp/l2tp_core.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='l2tp_tunnel' size-in-bits='3136' is-struct='yes' visibility='default' filepath='net/l2tp/l2tp_core.h' line='144' column='1' id='0a3ca20a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dead' type-id='7359adad' visibility='default' filepath='net/l2tp/l2tp_core.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='net/l2tp/l2tp_core.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='hlist_lock' type-id='ac16795b' visibility='default' filepath='net/l2tp/l2tp_core.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='acpt_newsess' type-id='b50a4934' visibility='default' filepath='net/l2tp/l2tp_core.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='session_hlist' type-id='ccfd385f' visibility='default' filepath='net/l2tp/l2tp_core.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='tunnel_id' type-id='19c2251e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='peer_tunnel_id' type-id='19c2251e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='version' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='net/l2tp/l2tp_core.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='debug' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='encap' type-id='eab21901' visibility='default' filepath='net/l2tp/l2tp_core.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='stats' type-id='33e678c3' visibility='default' filepath='net/l2tp/l2tp_core.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='net/l2tp/l2tp_core.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='l2tp_net' type-id='a2bff677' visibility='default' filepath='net/l2tp/l2tp_core.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='ref_count' type-id='64615833' visibility='default' filepath='net/l2tp/l2tp_core.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='old_sk_destruct' type-id='841969d0' visibility='default' filepath='net/l2tp/l2tp_core.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='sock' type-id='f772df6e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='fd' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='del_work' type-id='ef9025d0' visibility='default' filepath='net/l2tp/l2tp_core.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='l2tp_encap_type' filepath='include/uapi/linux/l2tp.h' line='167' column='1' id='eab21901'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='L2TP_ENCAPTYPE_UDP' value='0'/>
+        <enumerator name='L2TP_ENCAPTYPE_IP' value='1'/>
+      </enum-decl>
+      <class-decl name='l2tp_stats' size-in-bits='576' is-struct='yes' visibility='default' filepath='net/l2tp/l2tp_core.h' line='33' column='1' id='33e678c3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_packets' type-id='f22a8abb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tx_bytes' type-id='f22a8abb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_errors' type-id='f22a8abb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rx_packets' type-id='f22a8abb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_bytes' type-id='f22a8abb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rx_seq_discards' type-id='f22a8abb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rx_oos_packets' type-id='f22a8abb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rx_errors' type-id='f22a8abb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rx_cookie_discards' type-id='f22a8abb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='l2tp_pwtype' filepath='include/uapi/linux/l2tp.h' line='152' column='1' id='748fba12'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='L2TP_PWTYPE_NONE' value='0'/>
+        <enumerator name='L2TP_PWTYPE_ETH_VLAN' value='4'/>
+        <enumerator name='L2TP_PWTYPE_ETH' value='5'/>
+        <enumerator name='L2TP_PWTYPE_PPP' value='7'/>
+        <enumerator name='L2TP_PWTYPE_PPP_AC' value='8'/>
+        <enumerator name='L2TP_PWTYPE_IP' value='11'/>
+        <enumerator name='__L2TP_PWTYPE_MAX' value='12'/>
+      </enum-decl>
+      <typedef-decl name='uint8_t' type-id='f9b06939' filepath='include/linux/types.h' line='107' column='1' id='b96825af'/>
+      <class-decl name='l2tp_session_cfg' size-in-bits='448' is-struct='yes' visibility='default' filepath='net/l2tp/l2tp_core.h' line='50' column='1' id='68f8e66d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pw_type' type-id='748fba12' visibility='default' filepath='net/l2tp/l2tp_core.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='recv_seq' type-id='f0981eeb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='send_seq' type-id='f0981eeb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='lns_mode' type-id='f0981eeb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='debug' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='l2specific_type' type-id='1dc6a898' visibility='default' filepath='net/l2tp/l2tp_core.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='cookie' type-id='d2f7b56a' visibility='default' filepath='net/l2tp/l2tp_core.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cookie_len' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='peer_cookie' type-id='d2f7b56a' visibility='default' filepath='net/l2tp/l2tp_core.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='peer_cookie_len' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reorder_timeout' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ifname' type-id='26a90f95' visibility='default' filepath='net/l2tp/l2tp_core.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='l2tp_tunnel_cfg' size-in-bits='320' is-struct='yes' visibility='default' filepath='net/l2tp/l2tp_core.h' line='125' column='1' id='c5b77cb3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='debug' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='encap' type-id='eab21901' visibility='default' filepath='net/l2tp/l2tp_core.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='local_ip' type-id='34f03654' visibility='default' filepath='net/l2tp/l2tp_core.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='peer_ip' type-id='34f03654' visibility='default' filepath='net/l2tp/l2tp_core.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='local_ip6' type-id='ed512028' visibility='default' filepath='net/l2tp/l2tp_core.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='peer_ip6' type-id='ed512028' visibility='default' filepath='net/l2tp/l2tp_core.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='local_udp_port' type-id='1dc6a898' visibility='default' filepath='net/l2tp/l2tp_core.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='peer_udp_port' type-id='1dc6a898' visibility='default' filepath='net/l2tp/l2tp_core.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='use_udp_checksums' type-id='f0981eeb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='udp6_zero_tx_checksums' type-id='f0981eeb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='udp6_zero_rx_checksums' type-id='f0981eeb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='141' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='bd965181' const='yes' id='e8726a27'/>
+      <pointer-type-def type-id='e8726a27' size-in-bits='64' id='f91cf277'/>
+      <pointer-type-def type-id='368f1cf0' size-in-bits='64' id='837076a2'/>
+      <pointer-type-def type-id='9726f99c' size-in-bits='64' id='d35aee0a'/>
+      <pointer-type-def type-id='68f8e66d' size-in-bits='64' id='0357a19d'/>
+      <pointer-type-def type-id='0a3ca20a' size-in-bits='64' id='2d83a1b8'/>
+      <pointer-type-def type-id='2d83a1b8' size-in-bits='64' id='383758d6'/>
+      <pointer-type-def type-id='c5b77cb3' size-in-bits='64' id='88850643'/>
+      <pointer-type-def type-id='70a034c7' size-in-bits='64' id='901b6973'/>
+      <pointer-type-def type-id='679f0c08' size-in-bits='64' id='7d671c0a'/>
+      <function-decl name='l2tp_session_free' mangled-name='l2tp_session_free' filepath='net/l2tp/l2tp_core.h' line='220' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_session_free'>
+        <parameter type-id='d35aee0a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='l2tp_session_get_nth' mangled-name='l2tp_session_get_nth' filepath='net/l2tp/l2tp_core.h' line='200' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_session_get_nth'>
+        <parameter type-id='2d83a1b8'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='d35aee0a'/>
+      </function-decl>
+      <function-decl name='l2tp_tunnel_free' mangled-name='l2tp_tunnel_free' filepath='net/l2tp/l2tp_core.h' line='197' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_tunnel_free'>
+        <parameter type-id='2d83a1b8'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ppp_dev_name' mangled-name='ppp_dev_name' filepath='include/linux/ppp_channel.h' line='72' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_dev_name'>
+        <parameter type-id='b8e94b0b'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='l2tp_tunnel_get_nth' mangled-name='l2tp_tunnel_get_nth' filepath='net/l2tp/l2tp_core.h' line='193' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_tunnel_get_nth'>
+        <parameter type-id='f91cf277'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='2d83a1b8'/>
+      </function-decl>
+      <function-decl name='l2tp_tunnel_get_session' mangled-name='l2tp_tunnel_get_session' filepath='net/l2tp/l2tp_core.h' line='194' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_tunnel_get_session'>
+        <parameter type-id='2d83a1b8'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='d35aee0a'/>
+      </function-decl>
+      <function-decl name='l2tp_udp_encap_recv' mangled-name='l2tp_udp_encap_recv' filepath='net/l2tp/l2tp_core.h' line='224' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_udp_encap_recv'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='l2tp_session_delete' mangled-name='l2tp_session_delete' filepath='net/l2tp/l2tp_core.h' line='219' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_session_delete'>
+        <parameter type-id='d35aee0a'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='l2tp_tunnel_get' mangled-name='l2tp_tunnel_get' filepath='net/l2tp/l2tp_core.h' line='192' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_tunnel_get'>
+        <parameter type-id='f91cf277'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='2d83a1b8'/>
+      </function-decl>
+      <function-decl name='l2tp_session_create' mangled-name='l2tp_session_create' filepath='net/l2tp/l2tp_core.h' line='211' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_session_create'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='2d83a1b8'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='0357a19d'/>
+        <return type-id='d35aee0a'/>
+      </function-decl>
+      <function-decl name='l2tp_tunnel_delete' mangled-name='l2tp_tunnel_delete' filepath='net/l2tp/l2tp_core.h' line='210' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_tunnel_delete'>
+        <parameter type-id='2d83a1b8'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='l2tp_tunnel_create' mangled-name='l2tp_tunnel_create' filepath='net/l2tp/l2tp_core.h' line='204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_tunnel_create'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='88850643'/>
+        <parameter type-id='383758d6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='l2tp_tunnel_register' mangled-name='l2tp_tunnel_register' filepath='net/l2tp/l2tp_core.h' line='207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_tunnel_register'>
+        <parameter type-id='2d83a1b8'/>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='88850643'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='l2tp_session_register' mangled-name='l2tp_session_register' filepath='net/l2tp/l2tp_core.h' line='215' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_session_register'>
+        <parameter type-id='d35aee0a'/>
+        <parameter type-id='2d83a1b8'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ppp_register_net_channel' mangled-name='ppp_register_net_channel' filepath='include/linux/ppp_channel.h' line='57' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_register_net_channel'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='b8e94b0b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='l2tp_session_set_header_len' mangled-name='l2tp_session_set_header_len' filepath='net/l2tp/l2tp_core.h' line='225' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_session_set_header_len'>
+        <parameter type-id='d35aee0a'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sock_wmalloc' mangled-name='sock_wmalloc' filepath='include/net/sock.h' line='1623' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_wmalloc'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='l2tp_xmit_skb' mangled-name='l2tp_xmit_skb' filepath='net/l2tp/l2tp_core.h' line='227' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_xmit_skb'>
+        <parameter type-id='d35aee0a'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='368f1cf0'>
+        <parameter type-id='d35aee0a'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='70a034c7'>
+        <parameter type-id='d35aee0a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='679f0c08'>
+        <parameter type-id='d35aee0a'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <class-decl name='in_addr' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/in.h' line='85' column='1' id='34f03654'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='s_addr' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/in.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/mac80211/agg-rx.c' language='LANG_C89'>
+      <function-decl name='ieee80211_stop_rx_ba_session' mangled-name='ieee80211_stop_rx_ba_session' filepath='net/mac80211/agg-rx.c' line='125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_stop_rx_ba_session'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/agg-rx.c' line='125' column='1'/>
+        <parameter type-id='1dc6a898' name='ba_rx_bitmap' filepath='net/mac80211/agg-rx.c' line='125' column='1'/>
+        <parameter type-id='bbaf3419' name='addr' filepath='net/mac80211/agg-rx.c' line='126' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_manage_rx_ba_offl' mangled-name='ieee80211_manage_rx_ba_offl' filepath='net/mac80211/agg-rx.c' line='509' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_manage_rx_ba_offl'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/agg-rx.c' line='509' column='1'/>
+        <parameter type-id='bbaf3419' name='addr' filepath='net/mac80211/agg-rx.c' line='510' column='1'/>
+        <parameter type-id='f0981eeb' name='tid' filepath='net/mac80211/agg-rx.c' line='510' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='b4ae7345' size-in-bits='64' id='3a1577c5'/>
+      <class-decl name='ieee80211_vif' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1609' column='1' id='b4ae7345'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='86505f90' visibility='default' filepath='include/net/mac80211.h' line='1610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bss_conf' type-id='0f8e82db' visibility='default' filepath='include/net/mac80211.h' line='1611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='addr' type-id='cf1a4160' visibility='default' filepath='include/net/mac80211.h' line='1612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2800'>
+          <var-decl name='p2p' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2808'>
+          <var-decl name='csa_active' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='mu_mimo_owner' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2824'>
+          <var-decl name='cab_queue' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2832'>
+          <var-decl name='hw_queue' type-id='931565be' visibility='default' filepath='include/net/mac80211.h' line='1618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='txq' type-id='cde83d0f' visibility='default' filepath='include/net/mac80211.h' line='1620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='chanctx_conf' type-id='9a58f9aa' visibility='default' filepath='include/net/mac80211.h' line='1622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='driver_flags' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='probe_req_reg' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='1630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='txqs_stopped' type-id='4ad33d9d' visibility='default' filepath='include/net/mac80211.h' line='1632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='drv_priv' type-id='29c3368c' visibility='default' filepath='include/net/mac80211.h' line='1635' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='b50a4934' size-in-bits='32' id='4ad33d9d'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <enum-decl name='nl80211_iftype' filepath='include/uapi/linux/nl80211.h' line='2933' column='1' id='86505f90'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_IFTYPE_UNSPECIFIED' value='0'/>
+        <enumerator name='NL80211_IFTYPE_ADHOC' value='1'/>
+        <enumerator name='NL80211_IFTYPE_STATION' value='2'/>
+        <enumerator name='NL80211_IFTYPE_AP' value='3'/>
+        <enumerator name='NL80211_IFTYPE_AP_VLAN' value='4'/>
+        <enumerator name='NL80211_IFTYPE_WDS' value='5'/>
+        <enumerator name='NL80211_IFTYPE_MONITOR' value='6'/>
+        <enumerator name='NL80211_IFTYPE_MESH_POINT' value='7'/>
+        <enumerator name='NL80211_IFTYPE_P2P_CLIENT' value='8'/>
+        <enumerator name='NL80211_IFTYPE_P2P_GO' value='9'/>
+        <enumerator name='NL80211_IFTYPE_P2P_DEVICE' value='10'/>
+        <enumerator name='NL80211_IFTYPE_OCB' value='11'/>
+        <enumerator name='NL80211_IFTYPE_NAN' value='12'/>
+        <enumerator name='NUM_NL80211_IFTYPES' value='13'/>
+        <enumerator name='NL80211_IFTYPE_MAX' value='12'/>
+      </enum-decl>
+      <pointer-type-def type-id='9dcec05c' size-in-bits='64' id='9a58f9aa'/>
+      <pointer-type-def type-id='fa01d8f7' size-in-bits='64' id='cde83d0f'/>
+      <class-decl name='ieee80211_bss_conf' size-in-bits='2688' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='608' column='1' id='0f8e82db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bssid' type-id='bbaf3419' visibility='default' filepath='include/net/mac80211.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bss_color' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='htc_trig_based_pkt_ext' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='multi_sta_back_32bit' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='uora_exists' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ack_enabled' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='uora_ocw_range' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='frame_time_rts_th' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='he_support' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='twt_requester' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='twt_responder' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='assoc' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ibss_joined' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='ibss_creator' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='aid' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='use_cts_prot' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='use_short_preamble' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='use_short_slot' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='enable_beacon' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='dtim_period' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='beacon_int' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='assoc_capability' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sync_tsf' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sync_device_ts' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sync_dtim_count' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='basic_rates' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='beacon_rate' type-id='4343d470' visibility='default' filepath='include/net/mac80211.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mcast_rate' type-id='2020bac4' visibility='default' filepath='include/net/mac80211.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ht_operation_mode' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='cqm_rssi_thold' type-id='a7832498' visibility='default' filepath='include/net/mac80211.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='cqm_rssi_hyst' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='cqm_rssi_low' type-id='a7832498' visibility='default' filepath='include/net/mac80211.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cqm_rssi_high' type-id='a7832498' visibility='default' filepath='include/net/mac80211.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/mac80211.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='mu_group' type-id='082b33cf' visibility='default' filepath='include/net/mac80211.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='arp_addr_list' type-id='30180d4b' visibility='default' filepath='include/net/mac80211.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='arp_addr_cnt' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='qos' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1512'>
+          <var-decl name='idle' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1520'>
+          <var-decl name='ps' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1528'>
+          <var-decl name='ssid' type-id='e3dc4fdb' visibility='default' filepath='include/net/mac80211.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='ssid_len' type-id='b59d7dce' visibility='default' filepath='include/net/mac80211.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='hidden_ssid' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='txpower' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='txpower_type' type-id='d46e3e96' visibility='default' filepath='include/net/mac80211.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='p2p_noa_attr' type-id='8ed5c74b' visibility='default' filepath='include/net/mac80211.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2384'>
+          <var-decl name='allow_p2p_go_ps' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='max_idle_period' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2416'>
+          <var-decl name='protected_keep_alive' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2424'>
+          <var-decl name='ftm_responder' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='ftmr_params' type-id='d203221f' visibility='default' filepath='include/net/mac80211.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='nontransmitted' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2504'>
+          <var-decl name='transmitter_bssid' type-id='cf1a4160' visibility='default' filepath='include/net/mac80211.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2552'>
+          <var-decl name='bssid_index' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='bssid_indicator' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2568'>
+          <var-decl name='ema_ap' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2576'>
+          <var-decl name='profile_periodicity' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2584'>
+          <var-decl name='he_operation' type-id='ae6fa461' visibility='default' filepath='include/net/mac80211.h' line='668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2632'>
+          <var-decl name='he_obss_pd' type-id='198fcd88' visibility='default' filepath='include/net/mac80211.h' line='669' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_tx_power_setting' filepath='include/uapi/linux/nl80211.h' line='4678' column='1' id='d46e3e96'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_TX_POWER_AUTOMATIC' value='0'/>
+        <enumerator name='NL80211_TX_POWER_LIMITED' value='1'/>
+        <enumerator name='NL80211_TX_POWER_FIXED' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='a4a20ee7' size-in-bits='64' id='d203221f'/>
+      <pointer-type-def type-id='ce30b5d2' size-in-bits='64' id='4343d470'/>
+      <class-decl name='cfg80211_chan_def' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='617' column='1' id='e07d69c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chan' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='width' type-id='e043cccc' visibility='default' filepath='include/net/cfg80211.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='center_freq1' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='center_freq2' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='edmg' type-id='d87e6929' visibility='default' filepath='include/net/cfg80211.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='freq1_offset' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='623' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_chanctx_conf' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='225' column='1' id='9dcec05c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='def' type-id='e07d69c8' visibility='default' filepath='include/net/mac80211.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='min_def' type-id='e07d69c8' visibility='default' filepath='include/net/mac80211.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rx_chains_static' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='520'>
+          <var-decl name='rx_chains_dynamic' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='radar_enabled' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='drv_priv' type-id='29c3368c' visibility='default' filepath='include/net/mac80211.h' line='233' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_he_obss_pd' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='258' column='1' id='198fcd88'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enable' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='min_offset' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='max_offset' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='261' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_he_operation' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1640' column='1' id='ae6fa461'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='he_oper_params' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='he_mcs_nss_set' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='optional' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1644' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_mu_group_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='471' column='1' id='082b33cf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='membership' type-id='d2f7b56a' visibility='default' filepath='include/net/mac80211.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='position' type-id='0d8415b5' visibility='default' filepath='include/net/mac80211.h' line='473' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_p2p_noa_attr' size-in-bits='432' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1243' column='1' id='8ed5c74b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='oppps_ctwindow' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='desc' type-id='350eac09' visibility='default' filepath='include/linux/ieee80211.h' line='1246' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_txq' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='2056' column='1' id='fa01d8f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vif' type-id='3a1577c5' visibility='default' filepath='include/net/mac80211.h' line='2057' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sta' type-id='f27bb1b0' visibility='default' filepath='include/net/mac80211.h' line='2058' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tid' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2059' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='ac' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2060' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='drv_priv' type-id='29c3368c' visibility='default' filepath='include/net/mac80211.h' line='2063' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='256' id='e3dc4fdb'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <enum-decl name='nl80211_chan_width' filepath='include/uapi/linux/nl80211.h' line='4287' column='1' id='e043cccc'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_CHAN_WIDTH_20_NOHT' value='0'/>
+        <enumerator name='NL80211_CHAN_WIDTH_20' value='1'/>
+        <enumerator name='NL80211_CHAN_WIDTH_40' value='2'/>
+        <enumerator name='NL80211_CHAN_WIDTH_80' value='3'/>
+        <enumerator name='NL80211_CHAN_WIDTH_80P80' value='4'/>
+        <enumerator name='NL80211_CHAN_WIDTH_160' value='5'/>
+        <enumerator name='NL80211_CHAN_WIDTH_5' value='6'/>
+        <enumerator name='NL80211_CHAN_WIDTH_10' value='7'/>
+      </enum-decl>
+      <pointer-type-def type-id='839b249b' size-in-bits='64' id='ec00acfb'/>
+      <array-type-def dimensions='1' type-id='46ac9319' size-in-bits='416' id='350eac09'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='9188aa82' size-in-bits='64' id='f27bb1b0'/>
+      <class-decl name='ieee80211_edmg' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='387' column='1' id='d87e6929'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channels' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bw_config' type-id='51403231' visibility='default' filepath='include/net/cfg80211.h' line='389' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_ftm_responder_params' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='484' column='1' id='a4a20ee7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lci' type-id='bbaf3419' visibility='default' filepath='include/net/mac80211.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='civicloc' type-id='bbaf3419' visibility='default' filepath='include/net/mac80211.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lci_len' type-id='b59d7dce' visibility='default' filepath='include/net/mac80211.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='civicloc_len' type-id='b59d7dce' visibility='default' filepath='include/net/mac80211.h' line='488' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_rate' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='245' column='1' id='ce30b5d2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bitrate' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='hw_value' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hw_value_short' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='248' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_edmg_bw_config' filepath='include/net/cfg80211.h' line='359' column='1' id='51403231'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_4' value='4'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_5' value='5'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_6' value='6'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_7' value='7'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_8' value='8'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_9' value='9'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_10' value='10'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_11' value='11'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_12' value='12'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_13' value='13'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_14' value='14'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_15' value='15'/>
+      </enum-decl>
+      <class-decl name='ieee80211_channel' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='148' column='1' id='839b249b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='band' type-id='3eaa0294' visibility='default' filepath='include/net/cfg80211.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='center_freq' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='freq_offset' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='hw_value' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_antenna_gain' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_power' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_reg_power' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='beacon_found' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='orig_flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='orig_mag' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='orig_mpwr' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='dfs_state' type-id='996e1634' visibility='default' filepath='include/net/cfg80211.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dfs_state_entered' type-id='7359adad' visibility='default' filepath='include/net/cfg80211.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dfs_cac_ms' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_p2p_noa_desc' size-in-bits='104' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1236' column='1' id='46ac9319'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='duration' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='interval' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='start_time' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1240' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sta' size-in-bits='2688' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1973' column='1' id='9188aa82'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supp_rates' type-id='1c6c0c39' visibility='default' filepath='include/net/mac80211.h' line='1974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='addr' type-id='cf1a4160' visibility='default' filepath='include/net/mac80211.h' line='1975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='aid' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ht_cap' type-id='a041735c' visibility='default' filepath='include/net/mac80211.h' line='1977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='vht_cap' type-id='c994e9c8' visibility='default' filepath='include/net/mac80211.h' line='1978' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='he_cap' type-id='0056bfcb' visibility='default' filepath='include/net/mac80211.h' line='1979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='max_rx_aggregation_subframes' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1980' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='wme' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='984'>
+          <var-decl name='uapsd_queues' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='max_sp' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1000'>
+          <var-decl name='rx_nss' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bandwidth' type-id='99b24396' visibility='default' filepath='include/net/mac80211.h' line='1985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='smps_mode' type-id='5e2794d2' visibility='default' filepath='include/net/mac80211.h' line='1986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rates' type-id='88f13db8' visibility='default' filepath='include/net/mac80211.h' line='1987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tdls' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='tdls_initiator' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1168'>
+          <var-decl name='mfp' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1176'>
+          <var-decl name='max_amsdu_subframes' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='max_amsdu_len' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1200'>
+          <var-decl name='support_p2p_ps' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='2009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='max_rc_amsdu_len' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1232'>
+          <var-decl name='max_tid_amsdu_len' type-id='42c6815a' visibility='default' filepath='include/net/mac80211.h' line='2011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='txpwr' type-id='b18b35b8' visibility='default' filepath='include/net/mac80211.h' line='2012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='txq' type-id='c4105027' visibility='default' filepath='include/net/mac80211.h' line='2014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='drv_priv' type-id='29c3368c' visibility='default' filepath='include/net/mac80211.h' line='2017' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_smps_mode' filepath='include/net/mac80211.h' line='1460' column='1' id='5e2794d2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_SMPS_AUTOMATIC' value='0'/>
+        <enumerator name='IEEE80211_SMPS_OFF' value='1'/>
+        <enumerator name='IEEE80211_SMPS_STATIC' value='2'/>
+        <enumerator name='IEEE80211_SMPS_DYNAMIC' value='3'/>
+        <enumerator name='IEEE80211_SMPS_NUM_MODES' value='4'/>
+      </enum-decl>
+      <enum-decl name='ieee80211_sta_rx_bandwidth' filepath='include/net/mac80211.h' line='1883' column='1' id='99b24396'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_STA_RX_BW_20' value='0'/>
+        <enumerator name='IEEE80211_STA_RX_BW_40' value='1'/>
+        <enumerator name='IEEE80211_STA_RX_BW_80' value='2'/>
+        <enumerator name='IEEE80211_STA_RX_BW_160' value='3'/>
+      </enum-decl>
+      <enum-decl name='nl80211_band' filepath='include/uapi/linux/nl80211.h' line='4588' column='1' id='3eaa0294'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_BAND_2GHZ' value='0'/>
+        <enumerator name='NL80211_BAND_5GHZ' value='1'/>
+        <enumerator name='NL80211_BAND_60GHZ' value='2'/>
+        <enumerator name='NL80211_BAND_6GHZ' value='3'/>
+        <enumerator name='NUM_NL80211_BANDS' value='4'/>
+      </enum-decl>
+      <enum-decl name='nl80211_dfs_state' filepath='include/uapi/linux/nl80211.h' line='5746' column='1' id='996e1634'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_DFS_USABLE' value='0'/>
+        <enumerator name='NL80211_DFS_UNAVAILABLE' value='1'/>
+        <enumerator name='NL80211_DFS_AVAILABLE' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='05fba71a' size-in-bits='64' id='88f13db8'/>
+      <array-type-def dimensions='1' type-id='cde83d0f' size-in-bits='1088' id='c4105027'>
+        <subrange length='17' type-id='7ff19f0f' id='888ad0ed'/>
+      </array-type-def>
+      <class-decl name='ieee80211_sta_he_cap' size-in-bits='440' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='313' column='1' id='0056bfcb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='has_he' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='he_cap_elem' type-id='4dffc3f2' visibility='default' filepath='include/net/cfg80211.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='he_mcs_nss_supp' type-id='b1f4f4c7' visibility='default' filepath='include/net/cfg80211.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='ppe_thres' type-id='5030b3c3' visibility='default' filepath='include/net/cfg80211.h' line='317' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sta_ht_cap' size-in-bits='176' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='276' column='1' id='a041735c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ht_supported' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='ampdu_factor' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ampdu_density' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='mcs' type-id='835fe4c6' visibility='default' filepath='include/net/cfg80211.h' line='281' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sta_txpwr' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1921' column='1' id='b18b35b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power' type-id='9b7e9486' visibility='default' filepath='include/net/mac80211.h' line='1922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='d46e3e96' visibility='default' filepath='include/net/mac80211.h' line='1923' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sta_vht_cap' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='294' column='1' id='c994e9c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vht_supported' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cap' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vht_mcs' type-id='830056b5' visibility='default' filepath='include/net/cfg80211.h' line='297' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_he_cap_elem' size-in-bits='136' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1578' column='1' id='4dffc3f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mac_cap_info' type-id='cf1a4160' visibility='default' filepath='include/linux/ieee80211.h' line='1579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='phy_cap_info' type-id='4d77ae82' visibility='default' filepath='include/linux/ieee80211.h' line='1580' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_he_mcs_nss_supp' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1625' column='1' id='b1f4f4c7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_mcs_80' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='tx_mcs_80' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rx_mcs_160' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='tx_mcs_160' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_mcs_80p80' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='tx_mcs_80p80' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1631' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_mcs_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1285' column='1' id='835fe4c6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_mask' type-id='097504df' visibility='default' filepath='include/linux/ieee80211.h' line='1286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='rx_highest' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tx_params' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='reserved' type-id='930ea9f9' visibility='default' filepath='include/linux/ieee80211.h' line='1289' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sta_rates' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1897' column='1' id='05fba71a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/mac80211.h' line='1898' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rate' type-id='b7cdf388' visibility='default' filepath='include/net/mac80211.h' line='1905' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_vht_mcs_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1492' column='1' id='830056b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_mcs_map' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='rx_highest' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tx_mcs_map' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='tx_highest' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1496' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='200' id='5030b3c3'>
+        <subrange length='25' type-id='7ff19f0f' id='41d5ddce'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='53a31c26' size-in-bits='192' id='b7cdf388'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='80' id='097504df'>
+        <subrange length='10' type-id='7ff19f0f' id='487da03a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='88' id='4d77ae82'>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <class-decl name='__anonymous_struct__1' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1899' column='1' id='53a31c26'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idx' type-id='fdbf7a0f' visibility='default' filepath='include/net/mac80211.h' line='1900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='count' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='count_cts' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1902' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='count_rts' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1903' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1904' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/mac80211/agg-tx.c' language='LANG_C89'>
+      <function-decl name='ieee80211_start_tx_ba_cb_irqsafe' mangled-name='ieee80211_start_tx_ba_cb_irqsafe' filepath='net/mac80211/agg-tx.c' line='780' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_start_tx_ba_cb_irqsafe'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/agg-tx.c' line='780' column='1'/>
+        <parameter type-id='bbaf3419' name='ra' filepath='net/mac80211/agg-tx.c' line='781' column='1'/>
+        <parameter type-id='1dc6a898' name='tid' filepath='net/mac80211/agg-tx.c' line='781' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_stop_tx_ba_cb_irqsafe' mangled-name='ieee80211_stop_tx_ba_cb_irqsafe' filepath='net/mac80211/agg-tx.c' line='889' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_stop_tx_ba_cb_irqsafe'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/agg-tx.c' line='889' column='1'/>
+        <parameter type-id='bbaf3419' name='ra' filepath='net/mac80211/agg-tx.c' line='890' column='1'/>
+        <parameter type-id='1dc6a898' name='tid' filepath='net/mac80211/agg-tx.c' line='890' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/mac80211/cfg.c' language='LANG_C89'>
+      <function-decl name='ieee80211_csa_finish' mangled-name='ieee80211_csa_finish' filepath='net/mac80211/cfg.c' line='3052' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_csa_finish'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/cfg.c' line='3052' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/mac80211/chan.c' language='LANG_C89'>
+      <pointer-type-def type-id='fb1ffc17' size-in-bits='64' id='41e149d3'/>
+      <function-decl name='ieee80211_iter_chan_contexts_atomic' mangled-name='ieee80211_iter_chan_contexts_atomic' filepath='net/mac80211/chan.c' line='1781' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_iter_chan_contexts_atomic'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/chan.c' line='1782' column='1'/>
+        <parameter type-id='41e149d3' name='iter' filepath='net/mac80211/chan.c' line='1783' column='1'/>
+        <parameter type-id='eaa32e2f' name='iter_data' filepath='net/mac80211/chan.c' line='1786' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='fb1ffc17'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='9a58f9aa'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='3d75a1cd' size-in-bits='64' id='1905517d'/>
+      <class-decl name='ieee80211_hw' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='2469' column='1' id='3d75a1cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='conf' type-id='09b6f516' visibility='default' filepath='include/net/mac80211.h' line='2470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wiphy' type-id='666fb412' visibility='default' filepath='include/net/mac80211.h' line='2471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rate_control_algorithm' type-id='80f4b756' visibility='default' filepath='include/net/mac80211.h' line='2472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/net/mac80211.h' line='2473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='flags' type-id='f066dd3c' visibility='default' filepath='include/net/mac80211.h' line='2474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='extra_tx_headroom' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='2475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='extra_beacon_tailroom' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='2476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='vif_data_size' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='sta_data_size' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='chanctx_data_size' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='txq_data_size' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='queues' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='max_listen_interval' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='max_signal' type-id='fdbf7a0f' visibility='default' filepath='include/net/mac80211.h' line='2483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1000'>
+          <var-decl name='max_rates' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='max_report_rates' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1016'>
+          <var-decl name='max_rate_tries' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='max_rx_aggregation_subframes' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='max_tx_aggregation_subframes' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='max_tx_fragments' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1064'>
+          <var-decl name='offchannel_tx_hw_queue' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1072'>
+          <var-decl name='radiotap_mcs_details' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='radiotap_vht_details' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='radiotap_timestamp' type-id='cbf4d865' visibility='default' filepath='include/net/mac80211.h' line='2496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='netdev_features' type-id='f9f4b16f' visibility='default' filepath='include/net/mac80211.h' line='2497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='uapsd_queues' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1288'>
+          <var-decl name='uapsd_max_sp_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1296'>
+          <var-decl name='n_cipher_schemes' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='cipher_schemes' type-id='0faa7e32' visibility='default' filepath='include/net/mac80211.h' line='2501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='max_nan_de_entries' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1416'>
+          <var-decl name='tx_sk_pacing_shift' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1424'>
+          <var-decl name='weight_multiplier' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='max_mtu' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='2505' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='0637b06c' size-in-bits='64' id='0faa7e32'/>
+      <class-decl name='ieee80211_conf' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1504' column='1' id='09b6f516'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='power_level' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='1506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dynamic_ps_timeout' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='1506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='listen_interval' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='ps_dtim_period' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='long_frame_max_tx_count' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='short_frame_max_tx_count' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/mac80211.h' line='1513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='radar_enabled' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='smps_mode' type-id='5e2794d2' visibility='default' filepath='include/net/mac80211.h' line='1515' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='2493' column='1' id='cbf4d865'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='units_pos' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='accuracy' type-id='9b7e9486' visibility='default' filepath='include/net/mac80211.h' line='2495' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='68523a94' size-in-bits='64' id='666fb412'/>
+      <qualified-type-def type-id='68ce81a7' const='yes' id='0637b06c'/>
+      <class-decl name='wiphy' size-in-bits='11008' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4571' column='1' id='68523a94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='perm_addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='4575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='addr_mask' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='4576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='addresses' type-id='01b378ab' visibility='default' filepath='include/net/cfg80211.h' line='4578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mgmt_stypes' type-id='0cda9080' visibility='default' filepath='include/net/cfg80211.h' line='4580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='iface_combinations' type-id='fa32a449' visibility='default' filepath='include/net/cfg80211.h' line='4582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='n_iface_combinations' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='software_iftypes' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='n_addresses' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='interface_modes' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='max_acl_mac_addrs' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='regulatory_flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='features' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ext_features' type-id='8f1320db' visibility='default' filepath='include/net/cfg80211.h' line='4594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ap_sme_capa' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='signal_type' type-id='b8524648' visibility='default' filepath='include/net/cfg80211.h' line='4598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bss_priv_size' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='max_scan_ssids' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='680'>
+          <var-decl name='max_sched_scan_reqs' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='688'>
+          <var-decl name='max_sched_scan_ssids' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='696'>
+          <var-decl name='max_match_sets' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='max_scan_ie_len' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='720'>
+          <var-decl name='max_sched_scan_ie_len' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_sched_scan_plans' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='max_sched_scan_plan_interval' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='max_sched_scan_plan_iterations' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='n_cipher_suites' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='cipher_suites' type-id='aded214c' visibility='default' filepath='include/net/cfg80211.h' line='4612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='n_akm_suites' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='akm_suites' type-id='aded214c' visibility='default' filepath='include/net/cfg80211.h' line='4615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='retry_short' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1096'>
+          <var-decl name='retry_long' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='frag_threshold' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rts_threshold' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='coverage_class' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1192'>
+          <var-decl name='fw_version' type-id='16dc656a' visibility='default' filepath='include/net/cfg80211.h' line='4623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='hw_version' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='wowlan' type-id='78a34b70' visibility='default' filepath='include/net/cfg80211.h' line='4627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='wowlan_config' type-id='9d025b00' visibility='default' filepath='include/net/cfg80211.h' line='4628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='max_remain_on_channel_duration' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1680'>
+          <var-decl name='max_num_pmkids' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='available_antennas_tx' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='available_antennas_rx' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='probe_resp_offload' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='extended_capabilities' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='4645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='extended_capabilities_mask' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='4645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='extended_capabilities_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='iftype_ext_capab' type-id='3ca25343' visibility='default' filepath='include/net/cfg80211.h' line='4648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='num_iftype_ext_capab' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='4649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='privid' type-id='eaa32e2f' visibility='default' filepath='include/net/cfg80211.h' line='4656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='bands' type-id='641ce2e8' visibility='default' filepath='include/net/cfg80211.h' line='4658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='reg_notifier' type-id='39ee8359' visibility='default' filepath='include/net/cfg80211.h' line='4661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='regd' type-id='4e819401' visibility='default' filepath='include/net/cfg80211.h' line='4666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/net/cfg80211.h' line='4670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='debugfsdir' type-id='27675065' visibility='default' filepath='include/net/cfg80211.h' line='4676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='ht_capa_mod_mask' type-id='81f1a1a8' visibility='default' filepath='include/net/cfg80211.h' line='4678' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='vht_capa_mod_mask' type-id='fffb07a4' visibility='default' filepath='include/net/cfg80211.h' line='4679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='wdev_list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='4681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='_net' type-id='c9df1e6c' visibility='default' filepath='include/net/cfg80211.h' line='4684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='coalesce' type-id='9ef499bf' visibility='default' filepath='include/net/cfg80211.h' line='4690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='vendor_commands' type-id='41e3f782' visibility='default' filepath='include/net/cfg80211.h' line='4692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='vendor_events' type-id='b188cc4f' visibility='default' filepath='include/net/cfg80211.h' line='4693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='n_vendor_commands' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10592'>
+          <var-decl name='n_vendor_events' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='max_ap_assoc_sta' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10640'>
+          <var-decl name='max_num_csa_counters' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10648'>
+          <var-decl name='max_adj_channel_rssi_comp' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10656'>
+          <var-decl name='bss_select_support' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='nan_supported_bands' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10720'>
+          <var-decl name='txq_limit' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='txq_memory_limit' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10784'>
+          <var-decl name='txq_quantum' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='support_mbssid' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='support_only_he_mbssid' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='pmsr_capa' type-id='5abfac26' visibility='default' filepath='include/net/cfg80211.h' line='4712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='priv' type-id='e84913bd' visibility='default' filepath='include/net/cfg80211.h' line='4714' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='80126e32' size-in-bits='64' id='9d025b00'/>
+      <pointer-type-def type-id='a0ef5328' size-in-bits='64' id='5abfac26'/>
+      <pointer-type-def type-id='269d8092' size-in-bits='64' id='81f1a1a8'/>
+      <pointer-type-def type-id='29c8dc19' size-in-bits='64' id='fa32a449'/>
+      <pointer-type-def type-id='5960e0b1' size-in-bits='64' id='4e819401'/>
+      <pointer-type-def type-id='64b77daa' size-in-bits='64' id='0cda9080'/>
+      <pointer-type-def type-id='46f53066' size-in-bits='64' id='fffb07a4'/>
+      <pointer-type-def type-id='af3cafff' size-in-bits='64' id='b188cc4f'/>
+      <pointer-type-def type-id='7253d28f' size-in-bits='64' id='9ef499bf'/>
+      <pointer-type-def type-id='703a35bb' size-in-bits='64' id='3ca25343'/>
+      <pointer-type-def type-id='2ffd639c' size-in-bits='64' id='41e3f782'/>
+      <pointer-type-def type-id='93286cfa' size-in-bits='64' id='78a34b70'/>
+      <enum-decl name='cfg80211_signal_type' filepath='include/net/cfg80211.h' line='2143' column='1' id='b8524648'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='CFG80211_SIGNAL_TYPE_NONE' value='0'/>
+        <enumerator name='CFG80211_SIGNAL_TYPE_MBM' value='1'/>
+        <enumerator name='CFG80211_SIGNAL_TYPE_UNSPEC' value='2'/>
+      </enum-decl>
+      <array-type-def dimensions='1' type-id='3cad9e1a' size-in-bits='256' id='641ce2e8'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='6d8d26fb' size-in-bits='64' id='01b378ab'/>
+      <class-decl name='ieee80211_cipher_scheme' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1828' column='1' id='68ce81a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cipher' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='iftype' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1830' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='hdr_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='pn_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1832' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pn_off' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1833' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='key_idx_off' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1834' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='key_idx_mask' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1835' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='key_idx_shift' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1836' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mic_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1837' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='40' id='8f1320db'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <pointer-type-def type-id='10781bfd' size-in-bits='64' id='39ee8359'/>
+      <qualified-type-def type-id='e9bb2749' const='yes' id='a0ef5328'/>
+      <qualified-type-def type-id='16e7829f' const='yes' id='269d8092'/>
+      <qualified-type-def type-id='1179f27e' const='yes' id='29c8dc19'/>
+      <qualified-type-def type-id='5c28f25e' const='yes' id='5960e0b1'/>
+      <qualified-type-def type-id='21301fc9' const='yes' id='64b77daa'/>
+      <qualified-type-def type-id='2eec6999' const='yes' id='46f53066'/>
+      <qualified-type-def type-id='e223f110' const='yes' id='af3cafff'/>
+      <qualified-type-def type-id='7124a2a6' const='yes' id='7253d28f'/>
+      <qualified-type-def type-id='378a6c5a' const='yes' id='703a35bb'/>
+      <qualified-type-def type-id='fc206ed1' const='yes' id='2ffd639c'/>
+      <qualified-type-def type-id='5bbd300b' const='yes' id='93286cfa'/>
+      <pointer-type-def type-id='f7e1259c' size-in-bits='64' id='3cad9e1a'/>
+      <class-decl name='cfg80211_wowlan' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2734' column='1' id='80126e32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='any' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='disconnect' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='magic_pkt' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='gtk_rekey_failure' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='eap_identity_req' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='four_way_handshake' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='rfkill_release' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='patterns' type-id='1ed3660c' visibility='default' filepath='include/net/cfg80211.h' line='2738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tcp' type-id='e0c1c1b8' visibility='default' filepath='include/net/cfg80211.h' line='2739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='n_patterns' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nd_config' type-id='9e4995c7' visibility='default' filepath='include/net/cfg80211.h' line='2741' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mac_address' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='943' column='1' id='6d8d26fb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='944' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='76959226' size-in-bits='64' id='1ed3660c'/>
+      <pointer-type-def type-id='12a2e88f' size-in-bits='64' id='9e4995c7'/>
+      <pointer-type-def type-id='1752769a' size-in-bits='64' id='e0c1c1b8'/>
+      <class-decl name='cfg80211_pmsr_capabilities' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4379' column='1' id='e9bb2749'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_peers' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='4380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='report_ap_tsf' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='randomize_mac_addr' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ftm' type-id='0de9002c' visibility='default' filepath='include/net/cfg80211.h' line='4394' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_ht_cap' size-in-bits='208' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1319' column='1' id='16e7829f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ampdu_params_info' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='mcs' type-id='835fe4c6' visibility='default' filepath='include/linux/ieee80211.h' line='1324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='extended_ht_cap_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='tx_BF_cap_info' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='antenna_selection_info' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1328' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_iface_combination' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4126' column='1' id='1179f27e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='limits' type-id='2fde6795' visibility='default' filepath='include/net/cfg80211.h' line='4131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_different_channels' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_interfaces' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='n_limits' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='beacon_int_infra_match' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='radar_detect_widths' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='radar_detect_regions' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='beacon_int_min_gcd' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4181' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_regdomain' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='226' column='1' id='5c28f25e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/regulatory.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n_reg_rules' type-id='19c2251e' visibility='default' filepath='include/net/regulatory.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='alpha2' type-id='4df9d64a' visibility='default' filepath='include/net/regulatory.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dfs_region' type-id='5a85c988' visibility='default' filepath='include/net/regulatory.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='reg_rules' type-id='9195bab1' visibility='default' filepath='include/net/regulatory.h' line='231' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_supported_band' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='415' column='1' id='f7e1259c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channels' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bitrates' type-id='4343d470' visibility='default' filepath='include/net/cfg80211.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='band' type-id='3eaa0294' visibility='default' filepath='include/net/cfg80211.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='n_channels' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='n_bitrates' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ht_cap' type-id='a041735c' visibility='default' filepath='include/net/cfg80211.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='vht_cap' type-id='c994e9c8' visibility='default' filepath='include/net/cfg80211.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='edmg_cap' type-id='d87e6929' visibility='default' filepath='include/net/cfg80211.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='n_iftype_data' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='iftype_data' type-id='e76a43c4' visibility='default' filepath='include/net/cfg80211.h' line='425' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_txrx_stypes' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4184' column='1' id='21301fc9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='rx' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4185' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_vht_cap' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1535' column='1' id='2eec6999'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vht_cap_info' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='supp_mcs' type-id='830056b5' visibility='default' filepath='include/linux/ieee80211.h' line='1537' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nl80211_vendor_cmd_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/nl80211.h' line='5816' column='1' id='e223f110'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vendor_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='5817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='subcmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='5818' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wiphy_coalesce_support' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4260' column='1' id='7124a2a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='n_rules' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_delay' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_patterns' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pattern_max_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pattern_min_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_pkt_offset' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4266' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wiphy_iftype_ext_capab' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4354' column='1' id='378a6c5a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iftype' type-id='86505f90' visibility='default' filepath='include/net/cfg80211.h' line='4355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='extended_capabilities' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='4356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='extended_capabilities_mask' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='4357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='extended_capabilities_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4358' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wiphy_vendor_command' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4331' column='1' id='fc206ed1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='info' type-id='e223f110' visibility='default' filepath='include/net/cfg80211.h' line='4332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='doit' type-id='a9032da3' visibility='default' filepath='include/net/cfg80211.h' line='4334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dumpit' type-id='dcf81beb' visibility='default' filepath='include/net/cfg80211.h' line='4336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='policy' type-id='109cdb66' visibility='default' filepath='include/net/cfg80211.h' line='4339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='maxattr' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='4340' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wiphy_wowlan_support' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4240' column='1' id='5bbd300b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='n_patterns' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pattern_max_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pattern_min_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_pkt_offset' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_nd_match_sets' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tcp' type-id='b3ebc0a8' visibility='default' filepath='include/net/cfg80211.h' line='4247' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='24' id='4df9d64a'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='06f84b1d' size-in-bits='64' id='2fde6795'/>
+      <pointer-type-def type-id='36c71786' size-in-bits='64' id='e76a43c4'/>
+      <pointer-type-def type-id='bd4a4592' size-in-bits='64' id='b3ebc0a8'/>
+      <enum-decl name='nl80211_dfs_regions' filepath='include/uapi/linux/nl80211.h' line='3828' column='1' id='5a85c988'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_DFS_UNSET' value='0'/>
+        <enumerator name='NL80211_DFS_FCC' value='1'/>
+        <enumerator name='NL80211_DFS_ETSI' value='2'/>
+        <enumerator name='NL80211_DFS_JP' value='3'/>
+      </enum-decl>
+      <array-type-def dimensions='1' type-id='a9d5f761' size-in-bits='infinite' id='9195bab1'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='d91d4c07' size-in-bits='64' id='dcf81beb'/>
+      <pointer-type-def type-id='c756879f' size-in-bits='64' id='a9032da3'/>
+      <class-decl name='cfg80211_pkt_pattern' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2675' column='1' id='76959226'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pattern' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pattern_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='pkt_offset' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2678' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_sched_scan_request' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2099' column='1' id='12a2e88f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reqid' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ssids' type-id='a1fa7fb7' visibility='default' filepath='include/net/cfg80211.h' line='2101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n_ssids' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='n_channels' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='scan_width' type-id='95d46034' visibility='default' filepath='include/net/cfg80211.h' line='2104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='match_sets' type-id='ea00c914' visibility='default' filepath='include/net/cfg80211.h' line='2108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='n_match_sets' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='min_rssi_thold' type-id='a7832498' visibility='default' filepath='include/net/cfg80211.h' line='2110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='delay' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='scan_plans' type-id='302e9391' visibility='default' filepath='include/net/cfg80211.h' line='2112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='n_scan_plans' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='mac_addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='mac_addr_mask' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='relative_rssi_set' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='840'>
+          <var-decl name='relative_rssi' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='2119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='rssi_adjust' type-id='5da08e25' visibility='default' filepath='include/net/cfg80211.h' line='2120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='wiphy' type-id='666fb412' visibility='default' filepath='include/net/cfg80211.h' line='2123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/net/cfg80211.h' line='2124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='scan_start' type-id='7359adad' visibility='default' filepath='include/net/cfg80211.h' line='2125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='report_results' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/cfg80211.h' line='2127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='owner_nlportid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='nl_owner_dead' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='2130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='channels' type-id='14cad687' visibility='default' filepath='include/net/cfg80211.h' line='2133' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_wowlan_tcp' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2700' column='1' id='1752769a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sock' type-id='13103032' visibility='default' filepath='include/net/cfg80211.h' line='2701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='src' type-id='78a133c2' visibility='default' filepath='include/net/cfg80211.h' line='2702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dst' type-id='78a133c2' visibility='default' filepath='include/net/cfg80211.h' line='2702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='src_port' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='dst_port' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='dst_mac' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2704' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='payload_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='payload' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='payload_seq' type-id='d5a1b375' visibility='default' filepath='include/net/cfg80211.h' line='2707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='data_interval' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2708' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='wake_len' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wake_data' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wake_mask' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tokens_size' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2711' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='payload_tok' type-id='2868c21b' visibility='default' filepath='include/net/cfg80211.h' line='2713' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/cfg80211.h' line='4384' column='1' id='0de9002c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='preambles' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bandwidths' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_bursts_exponent' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='4387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='max_ftms_per_burst' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='supported' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='asap' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='non_asap' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='request_lci' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='request_civicloc' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4393' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7430554e' size-in-bits='64' id='ea00c914'/>
+      <pointer-type-def type-id='391881a9' size-in-bits='64' id='302e9391'/>
+      <pointer-type-def type-id='0c960fcf' size-in-bits='64' id='a1fa7fb7'/>
+      <qualified-type-def type-id='e47a5a92' const='yes' id='06f84b1d'/>
+      <qualified-type-def type-id='1ffb3281' const='yes' id='36c71786'/>
+      <qualified-type-def type-id='557bca33' const='yes' id='bd4a4592'/>
+      <enum-decl name='nl80211_bss_scan_width' filepath='include/uapi/linux/nl80211.h' line='4307' column='1' id='95d46034'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_BSS_CHAN_WIDTH_20' value='0'/>
+        <enumerator name='NL80211_BSS_CHAN_WIDTH_10' value='1'/>
+        <enumerator name='NL80211_BSS_CHAN_WIDTH_5' value='2'/>
+      </enum-decl>
+      <array-type-def dimensions='1' type-id='ec00acfb' size-in-bits='infinite' id='14cad687'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='cfg80211_bss_select_adjust' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2044' column='1' id='5da08e25'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='band' type-id='3eaa0294' visibility='default' filepath='include/net/cfg80211.h' line='2045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='delta' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='2046' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_reg_rule' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='217' column='1' id='a9d5f761'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='freq_range' type-id='a81053d4' visibility='default' filepath='include/net/regulatory.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='power_rule' type-id='736b3d64' visibility='default' filepath='include/net/regulatory.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='wmm_rule' type-id='8eec5cae' visibility='default' filepath='include/net/regulatory.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/regulatory.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dfs_cac_ms' type-id='19c2251e' visibility='default' filepath='include/net/regulatory.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='has_wmm' type-id='b50a4934' visibility='default' filepath='include/net/regulatory.h' line='223' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nl80211_wowlan_tcp_data_seq' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4893' column='1' id='d5a1b375'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4894' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nl80211_wowlan_tcp_data_token' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4904' column='1' id='2868c21b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='token_stream' type-id='167619f6' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4906' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_match_set' size-in-bits='480' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2017' column='1' id='7430554e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ssid' type-id='0c960fcf' visibility='default' filepath='include/net/cfg80211.h' line='2018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rssi_thold' type-id='a7832498' visibility='default' filepath='include/net/cfg80211.h' line='2020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='per_band_rssi_thold' type-id='68c8d0cb' visibility='default' filepath='include/net/cfg80211.h' line='2021' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_sched_scan_plan' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2033' column='1' id='391881a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='interval' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2034' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='iterations' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2035' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_ssid' size-in-bits='264' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1911' column='1' id='0c960fcf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ssid' type-id='e3dc4fdb' visibility='default' filepath='include/net/cfg80211.h' line='1912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ssid_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1913' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_freq_range' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='181' column='1' id='a81053d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_freq_khz' type-id='19c2251e' visibility='default' filepath='include/net/regulatory.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='end_freq_khz' type-id='19c2251e' visibility='default' filepath='include/net/regulatory.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_bandwidth_khz' type-id='19c2251e' visibility='default' filepath='include/net/regulatory.h' line='184' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_iface_limit' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4062' column='1' id='e47a5a92'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4063' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='types' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4064' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_power_rule' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='187' column='1' id='736b3d64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_antenna_gain' type-id='19c2251e' visibility='default' filepath='include/net/regulatory.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_eirp' type-id='19c2251e' visibility='default' filepath='include/net/regulatory.h' line='189' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sband_iftype_data' size-in-bits='480' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='332' column='1' id='1ffb3281'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='types_mask' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='he_cap' type-id='0056bfcb' visibility='default' filepath='include/net/cfg80211.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='he_6ghz_capa' type-id='192864a5' visibility='default' filepath='include/net/cfg80211.h' line='335' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_wmm_rule' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='212' column='1' id='8eec5cae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='client' type-id='00286dfe' visibility='default' filepath='include/net/regulatory.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ap' type-id='00286dfe' visibility='default' filepath='include/net/regulatory.h' line='214' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wiphy_wowlan_tcp_support' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4217' column='1' id='557bca33'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tok' type-id='6a8cbf59' visibility='default' filepath='include/net/cfg80211.h' line='4218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data_payload_max' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='data_interval_max' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wake_payload_max' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='seq' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4222' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ed477ec9' size-in-bits='64' id='6a8cbf59'/>
+      <array-type-def dimensions='1' type-id='86d70780' size-in-bits='256' id='00286dfe'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a7832498' size-in-bits='128' id='68c8d0cb'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='ieee80211_he_6ghz_capa' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='3160' column='1' id='192864a5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capa' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='3162' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='0dd56ffa' const='yes' id='ed477ec9'/>
+      <class-decl name='ieee80211_wmm_ac' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='205' column='1' id='86d70780'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cw_min' type-id='1dc6a898' visibility='default' filepath='include/net/regulatory.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='cw_max' type-id='1dc6a898' visibility='default' filepath='include/net/regulatory.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cot' type-id='1dc6a898' visibility='default' filepath='include/net/regulatory.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='aifsn' type-id='f9b06939' visibility='default' filepath='include/net/regulatory.h' line='209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nl80211_wowlan_tcp_data_token_feature' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4915' column='1' id='0dd56ffa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bufsize' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4916' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/mac80211/main.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='53a31c26' size-in-bits='192' id='b7cdf388'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b50a4934' size-in-bits='32' id='4ad33d9d'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='bbaf3419' size-in-bits='256' id='a9f93891'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='46ac9319' size-in-bits='416' id='350eac09'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='cde83d0f' size-in-bits='1088' id='c4105027'>
+        <subrange length='17' type-id='7ff19f0f' id='888ad0ed'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b59d7dce' size-in-bits='256' id='314f9837'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='ieee80211_hw' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='2469' column='1' id='3d75a1cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='conf' type-id='09b6f516' visibility='default' filepath='include/net/mac80211.h' line='2470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wiphy' type-id='666fb412' visibility='default' filepath='include/net/mac80211.h' line='2471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rate_control_algorithm' type-id='80f4b756' visibility='default' filepath='include/net/mac80211.h' line='2472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/net/mac80211.h' line='2473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='flags' type-id='f066dd3c' visibility='default' filepath='include/net/mac80211.h' line='2474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='extra_tx_headroom' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='2475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='extra_beacon_tailroom' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='2476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='vif_data_size' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='sta_data_size' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='chanctx_data_size' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='txq_data_size' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='queues' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='max_listen_interval' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='max_signal' type-id='fdbf7a0f' visibility='default' filepath='include/net/mac80211.h' line='2483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1000'>
+          <var-decl name='max_rates' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='max_report_rates' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1016'>
+          <var-decl name='max_rate_tries' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='max_rx_aggregation_subframes' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='max_tx_aggregation_subframes' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='max_tx_fragments' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1064'>
+          <var-decl name='offchannel_tx_hw_queue' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1072'>
+          <var-decl name='radiotap_mcs_details' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='radiotap_vht_details' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='radiotap_timestamp' type-id='cbf4d865' visibility='default' filepath='include/net/mac80211.h' line='2496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='netdev_features' type-id='f9f4b16f' visibility='default' filepath='include/net/mac80211.h' line='2497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='uapsd_queues' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1288'>
+          <var-decl name='uapsd_max_sp_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1296'>
+          <var-decl name='n_cipher_schemes' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='cipher_schemes' type-id='0faa7e32' visibility='default' filepath='include/net/mac80211.h' line='2501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='max_nan_de_entries' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1416'>
+          <var-decl name='tx_sk_pacing_shift' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1424'>
+          <var-decl name='weight_multiplier' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='max_mtu' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='2505' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_conf' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1504' column='1' id='09b6f516'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='power_level' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='1506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dynamic_ps_timeout' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='1506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='listen_interval' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='ps_dtim_period' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='long_frame_max_tx_count' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='short_frame_max_tx_count' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/mac80211.h' line='1513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='radar_enabled' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='smps_mode' type-id='5e2794d2' visibility='default' filepath='include/net/mac80211.h' line='1515' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_smps_mode' filepath='include/net/mac80211.h' line='1460' column='1' id='5e2794d2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_SMPS_AUTOMATIC' value='0'/>
+        <enumerator name='IEEE80211_SMPS_OFF' value='1'/>
+        <enumerator name='IEEE80211_SMPS_STATIC' value='2'/>
+        <enumerator name='IEEE80211_SMPS_DYNAMIC' value='3'/>
+        <enumerator name='IEEE80211_SMPS_NUM_MODES' value='4'/>
+      </enum-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='2493' column='1' id='cbf4d865'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='units_pos' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='accuracy' type-id='9b7e9486' visibility='default' filepath='include/net/mac80211.h' line='2495' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_cipher_scheme' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1828' column='1' id='68ce81a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cipher' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='iftype' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1830' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='hdr_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='pn_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1832' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pn_off' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1833' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='key_idx_off' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1834' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='key_idx_mask' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1835' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='key_idx_shift' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1836' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mic_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1837' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_ops' size-in-bits='6336' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='3756' column='1' id='686b8abc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx' type-id='f333b0ad' visibility='default' filepath='include/net/mac80211.h' line='3757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='start' type-id='230ee907' visibility='default' filepath='include/net/mac80211.h' line='3760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='stop' type-id='b6c3d24c' visibility='default' filepath='include/net/mac80211.h' line='3761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='suspend' type-id='64be16ce' visibility='default' filepath='include/net/mac80211.h' line='3763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='resume' type-id='230ee907' visibility='default' filepath='include/net/mac80211.h' line='3764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_wakeup' type-id='b735b9d5' visibility='default' filepath='include/net/mac80211.h' line='3765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='add_interface' type-id='d251af87' visibility='default' filepath='include/net/mac80211.h' line='3767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='change_interface' type-id='bddccc89' visibility='default' filepath='include/net/mac80211.h' line='3769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='remove_interface' type-id='13137614' visibility='default' filepath='include/net/mac80211.h' line='3772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='config' type-id='a17a9b96' visibility='default' filepath='include/net/mac80211.h' line='3774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bss_info_changed' type-id='0efb02f1' visibility='default' filepath='include/net/mac80211.h' line='3775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='start_ap' type-id='d251af87' visibility='default' filepath='include/net/mac80211.h' line='3780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='stop_ap' type-id='13137614' visibility='default' filepath='include/net/mac80211.h' line='3781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='prepare_multicast' type-id='a6d679d3' visibility='default' filepath='include/net/mac80211.h' line='3783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='configure_filter' type-id='08e5e0c8' visibility='default' filepath='include/net/mac80211.h' line='3785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='config_iface_filter' type-id='d49fb76c' visibility='default' filepath='include/net/mac80211.h' line='3789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='set_tim' type-id='3e699d2b' visibility='default' filepath='include/net/mac80211.h' line='3793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='set_key' type-id='a0c22185' visibility='default' filepath='include/net/mac80211.h' line='3795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='update_tkip_key' type-id='a41843a9' visibility='default' filepath='include/net/mac80211.h' line='3798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='set_rekey_data' type-id='285dfd8f' visibility='default' filepath='include/net/mac80211.h' line='3803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='set_default_unicast_key' type-id='cc8dd693' visibility='default' filepath='include/net/mac80211.h' line='3806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='hw_scan' type-id='8944911f' visibility='default' filepath='include/net/mac80211.h' line='3808' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='cancel_hw_scan' type-id='13137614' visibility='default' filepath='include/net/mac80211.h' line='3810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='sched_scan_start' type-id='333f7dcb' visibility='default' filepath='include/net/mac80211.h' line='3812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='sched_scan_stop' type-id='d251af87' visibility='default' filepath='include/net/mac80211.h' line='3816' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='sw_scan_start' type-id='80b2002c' visibility='default' filepath='include/net/mac80211.h' line='3818' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='sw_scan_complete' type-id='13137614' visibility='default' filepath='include/net/mac80211.h' line='3821' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='get_stats' type-id='885e570d' visibility='default' filepath='include/net/mac80211.h' line='3823' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='get_key_seq' type-id='a486176f' visibility='default' filepath='include/net/mac80211.h' line='3825' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='set_frag_threshold' type-id='a17a9b96' visibility='default' filepath='include/net/mac80211.h' line='3828' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='set_rts_threshold' type-id='a17a9b96' visibility='default' filepath='include/net/mac80211.h' line='3829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sta_add' type-id='47abf612' visibility='default' filepath='include/net/mac80211.h' line='3830' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sta_remove' type-id='47abf612' visibility='default' filepath='include/net/mac80211.h' line='3832' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sta_notify' type-id='6aed11b9' visibility='default' filepath='include/net/mac80211.h' line='3840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='sta_set_txpwr' type-id='47abf612' visibility='default' filepath='include/net/mac80211.h' line='3842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='sta_state' type-id='ccb4b446' visibility='default' filepath='include/net/mac80211.h' line='3845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='sta_pre_rcu_remove' type-id='8a57bbf1' visibility='default' filepath='include/net/mac80211.h' line='3849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='sta_rc_update' type-id='f261f678' visibility='default' filepath='include/net/mac80211.h' line='3852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='sta_rate_tbl_update' type-id='8a57bbf1' visibility='default' filepath='include/net/mac80211.h' line='3856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='sta_statistics' type-id='bd8d3954' visibility='default' filepath='include/net/mac80211.h' line='3859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='conf_tx' type-id='1d9ce797' visibility='default' filepath='include/net/mac80211.h' line='3863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='get_tsf' type-id='4c58212a' visibility='default' filepath='include/net/mac80211.h' line='3866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='set_tsf' type-id='62a26160' visibility='default' filepath='include/net/mac80211.h' line='3867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='offset_tsf' type-id='df80a246' visibility='default' filepath='include/net/mac80211.h' line='3869' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='reset_tsf' type-id='13137614' visibility='default' filepath='include/net/mac80211.h' line='3871' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='tx_last_beacon' type-id='230ee907' visibility='default' filepath='include/net/mac80211.h' line='3872' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='ampdu_action' type-id='6488c982' visibility='default' filepath='include/net/mac80211.h' line='3902' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='get_survey' type-id='89841ba1' visibility='default' filepath='include/net/mac80211.h' line='3905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='rfkill_poll' type-id='b6c3d24c' visibility='default' filepath='include/net/mac80211.h' line='3907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='set_coverage_class' type-id='a22252ab' visibility='default' filepath='include/net/mac80211.h' line='3908' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='flush' type-id='74819aa6' visibility='default' filepath='include/net/mac80211.h' line='3916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='channel_switch' type-id='5fce9027' visibility='default' filepath='include/net/mac80211.h' line='3918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='set_antenna' type-id='49d216dd' visibility='default' filepath='include/net/mac80211.h' line='3921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='get_antenna' type-id='5045387f' visibility='default' filepath='include/net/mac80211.h' line='3922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='remain_on_channel' type-id='37497cfd' visibility='default' filepath='include/net/mac80211.h' line='3924' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='cancel_remain_on_channel' type-id='d251af87' visibility='default' filepath='include/net/mac80211.h' line='3929' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='set_ringparam' type-id='49d216dd' visibility='default' filepath='include/net/mac80211.h' line='3931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='get_ringparam' type-id='9511263c' visibility='default' filepath='include/net/mac80211.h' line='3932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='tx_frames_pending' type-id='d32f401d' visibility='default' filepath='include/net/mac80211.h' line='3934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='set_bitrate_mask' type-id='b5d1fe23' visibility='default' filepath='include/net/mac80211.h' line='3935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='event_callback' type-id='96a99dd2' visibility='default' filepath='include/net/mac80211.h' line='3937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='allow_buffered_frames' type-id='e4575f22' visibility='default' filepath='include/net/mac80211.h' line='3941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='release_buffered_frames' type-id='e4575f22' visibility='default' filepath='include/net/mac80211.h' line='3946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='get_et_sset_count' type-id='72b3df9e' visibility='default' filepath='include/net/mac80211.h' line='3952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='get_et_stats' type-id='dca42ce8' visibility='default' filepath='include/net/mac80211.h' line='3954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='get_et_strings' type-id='c3cc3c4e' visibility='default' filepath='include/net/mac80211.h' line='3957' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='mgd_prepare_tx' type-id='1c6d0c4d' visibility='default' filepath='include/net/mac80211.h' line='3961' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='mgd_protect_tdls_discover' type-id='13137614' visibility='default' filepath='include/net/mac80211.h' line='3965' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='add_chanctx' type-id='8fa2f562' visibility='default' filepath='include/net/mac80211.h' line='3968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='remove_chanctx' type-id='f04be99f' visibility='default' filepath='include/net/mac80211.h' line='3970' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='change_chanctx' type-id='8595687e' visibility='default' filepath='include/net/mac80211.h' line='3972' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='assign_vif_chanctx' type-id='969740e2' visibility='default' filepath='include/net/mac80211.h' line='3975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='unassign_vif_chanctx' type-id='3bd13fe7' visibility='default' filepath='include/net/mac80211.h' line='3978' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='switch_vif_chanctx' type-id='5f071c93' visibility='default' filepath='include/net/mac80211.h' line='3981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='reconfig_complete' type-id='065f4ac6' visibility='default' filepath='include/net/mac80211.h' line='3986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='ipv6_addr_change' type-id='d50707ae' visibility='default' filepath='include/net/mac80211.h' line='3990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='channel_switch_beacon' type-id='add8debb' visibility='default' filepath='include/net/mac80211.h' line='3994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='pre_channel_switch' type-id='c7bc5836' visibility='default' filepath='include/net/mac80211.h' line='3997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='post_channel_switch' type-id='d251af87' visibility='default' filepath='include/net/mac80211.h' line='4001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='abort_channel_switch' type-id='13137614' visibility='default' filepath='include/net/mac80211.h' line='4003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='channel_switch_rx_beacon' type-id='5fce9027' visibility='default' filepath='include/net/mac80211.h' line='4005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='join_ibss' type-id='d251af87' visibility='default' filepath='include/net/mac80211.h' line='4009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='leave_ibss' type-id='13137614' visibility='default' filepath='include/net/mac80211.h' line='4010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='get_expected_throughput' type-id='4c6dab52' visibility='default' filepath='include/net/mac80211.h' line='4011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='get_txpower' type-id='830f4cee' visibility='default' filepath='include/net/mac80211.h' line='4013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='tdls_channel_switch' type-id='27dc45b4' visibility='default' filepath='include/net/mac80211.h' line='4016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='tdls_cancel_channel_switch' type-id='8a57bbf1' visibility='default' filepath='include/net/mac80211.h' line='4021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='tdls_recv_channel_switch' type-id='bfaf027a' visibility='default' filepath='include/net/mac80211.h' line='4024' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='wake_tx_queue' type-id='5ee1d5b2' visibility='default' filepath='include/net/mac80211.h' line='4028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='sync_rx_queues' type-id='b6c3d24c' visibility='default' filepath='include/net/mac80211.h' line='4030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='start_nan' type-id='d8175730' visibility='default' filepath='include/net/mac80211.h' line='4032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='stop_nan' type-id='d251af87' visibility='default' filepath='include/net/mac80211.h' line='4035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='nan_change_conf' type-id='cf93231f' visibility='default' filepath='include/net/mac80211.h' line='4037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='add_nan_func' type-id='2cd242d5' visibility='default' filepath='include/net/mac80211.h' line='4040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='del_nan_func' type-id='c69188a0' visibility='default' filepath='include/net/mac80211.h' line='4043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='can_aggregate_in_amsdu' type-id='7ceee79d' visibility='default' filepath='include/net/mac80211.h' line='4046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='get_ftm_responder_stats' type-id='0891de36' visibility='default' filepath='include/net/mac80211.h' line='4049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='start_pmsr' type-id='62f61ae0' visibility='default' filepath='include/net/mac80211.h' line='4052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='abort_pmsr' type-id='fdeb8c83' visibility='default' filepath='include/net/mac80211.h' line='4054' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_tx_control' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='2039' column='1' id='14120a32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sta' type-id='f27bb1b0' visibility='default' filepath='include/net/mac80211.h' line='2040' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sta' size-in-bits='2688' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1973' column='1' id='9188aa82'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supp_rates' type-id='1c6c0c39' visibility='default' filepath='include/net/mac80211.h' line='1974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='addr' type-id='cf1a4160' visibility='default' filepath='include/net/mac80211.h' line='1975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='aid' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ht_cap' type-id='a041735c' visibility='default' filepath='include/net/mac80211.h' line='1977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='vht_cap' type-id='c994e9c8' visibility='default' filepath='include/net/mac80211.h' line='1978' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='he_cap' type-id='0056bfcb' visibility='default' filepath='include/net/mac80211.h' line='1979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='max_rx_aggregation_subframes' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1980' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='wme' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='984'>
+          <var-decl name='uapsd_queues' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='max_sp' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1000'>
+          <var-decl name='rx_nss' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bandwidth' type-id='99b24396' visibility='default' filepath='include/net/mac80211.h' line='1985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='smps_mode' type-id='5e2794d2' visibility='default' filepath='include/net/mac80211.h' line='1986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rates' type-id='88f13db8' visibility='default' filepath='include/net/mac80211.h' line='1987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tdls' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='tdls_initiator' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1168'>
+          <var-decl name='mfp' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1176'>
+          <var-decl name='max_amsdu_subframes' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='max_amsdu_len' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1200'>
+          <var-decl name='support_p2p_ps' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='2009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='max_rc_amsdu_len' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1232'>
+          <var-decl name='max_tid_amsdu_len' type-id='42c6815a' visibility='default' filepath='include/net/mac80211.h' line='2011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='txpwr' type-id='b18b35b8' visibility='default' filepath='include/net/mac80211.h' line='2012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='txq' type-id='c4105027' visibility='default' filepath='include/net/mac80211.h' line='2014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='drv_priv' type-id='29c3368c' visibility='default' filepath='include/net/mac80211.h' line='2017' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_sta_rx_bandwidth' filepath='include/net/mac80211.h' line='1883' column='1' id='99b24396'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_STA_RX_BW_20' value='0'/>
+        <enumerator name='IEEE80211_STA_RX_BW_40' value='1'/>
+        <enumerator name='IEEE80211_STA_RX_BW_80' value='2'/>
+        <enumerator name='IEEE80211_STA_RX_BW_160' value='3'/>
+      </enum-decl>
+      <class-decl name='ieee80211_sta_rates' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1897' column='1' id='05fba71a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/mac80211.h' line='1898' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rate' type-id='b7cdf388' visibility='default' filepath='include/net/mac80211.h' line='1905' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1899' column='1' id='53a31c26'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idx' type-id='fdbf7a0f' visibility='default' filepath='include/net/mac80211.h' line='1900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='count' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='count_cts' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1902' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='count_rts' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1903' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1904' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sta_txpwr' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1921' column='1' id='b18b35b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power' type-id='9b7e9486' visibility='default' filepath='include/net/mac80211.h' line='1922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='d46e3e96' visibility='default' filepath='include/net/mac80211.h' line='1923' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_txq' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='2056' column='1' id='fa01d8f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vif' type-id='3a1577c5' visibility='default' filepath='include/net/mac80211.h' line='2057' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sta' type-id='f27bb1b0' visibility='default' filepath='include/net/mac80211.h' line='2058' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tid' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2059' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='ac' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2060' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='drv_priv' type-id='29c3368c' visibility='default' filepath='include/net/mac80211.h' line='2063' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_vif' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1609' column='1' id='b4ae7345'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='86505f90' visibility='default' filepath='include/net/mac80211.h' line='1610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bss_conf' type-id='0f8e82db' visibility='default' filepath='include/net/mac80211.h' line='1611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='addr' type-id='cf1a4160' visibility='default' filepath='include/net/mac80211.h' line='1612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2800'>
+          <var-decl name='p2p' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2808'>
+          <var-decl name='csa_active' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='mu_mimo_owner' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2824'>
+          <var-decl name='cab_queue' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2832'>
+          <var-decl name='hw_queue' type-id='931565be' visibility='default' filepath='include/net/mac80211.h' line='1618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='txq' type-id='cde83d0f' visibility='default' filepath='include/net/mac80211.h' line='1620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='chanctx_conf' type-id='9a58f9aa' visibility='default' filepath='include/net/mac80211.h' line='1622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='driver_flags' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='probe_req_reg' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='1630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='txqs_stopped' type-id='4ad33d9d' visibility='default' filepath='include/net/mac80211.h' line='1632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='drv_priv' type-id='29c3368c' visibility='default' filepath='include/net/mac80211.h' line='1635' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_bss_conf' size-in-bits='2688' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='608' column='1' id='0f8e82db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bssid' type-id='bbaf3419' visibility='default' filepath='include/net/mac80211.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bss_color' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='htc_trig_based_pkt_ext' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='multi_sta_back_32bit' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='uora_exists' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ack_enabled' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='uora_ocw_range' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='frame_time_rts_th' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='he_support' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='twt_requester' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='twt_responder' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='assoc' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ibss_joined' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='ibss_creator' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='aid' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='use_cts_prot' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='use_short_preamble' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='use_short_slot' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='enable_beacon' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='dtim_period' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='beacon_int' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='assoc_capability' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sync_tsf' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sync_device_ts' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sync_dtim_count' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='basic_rates' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='beacon_rate' type-id='4343d470' visibility='default' filepath='include/net/mac80211.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mcast_rate' type-id='2020bac4' visibility='default' filepath='include/net/mac80211.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ht_operation_mode' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='cqm_rssi_thold' type-id='a7832498' visibility='default' filepath='include/net/mac80211.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='cqm_rssi_hyst' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='cqm_rssi_low' type-id='a7832498' visibility='default' filepath='include/net/mac80211.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cqm_rssi_high' type-id='a7832498' visibility='default' filepath='include/net/mac80211.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/mac80211.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='mu_group' type-id='082b33cf' visibility='default' filepath='include/net/mac80211.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='arp_addr_list' type-id='30180d4b' visibility='default' filepath='include/net/mac80211.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='arp_addr_cnt' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='qos' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1512'>
+          <var-decl name='idle' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1520'>
+          <var-decl name='ps' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1528'>
+          <var-decl name='ssid' type-id='e3dc4fdb' visibility='default' filepath='include/net/mac80211.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='ssid_len' type-id='b59d7dce' visibility='default' filepath='include/net/mac80211.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='hidden_ssid' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='txpower' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='txpower_type' type-id='d46e3e96' visibility='default' filepath='include/net/mac80211.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='p2p_noa_attr' type-id='8ed5c74b' visibility='default' filepath='include/net/mac80211.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2384'>
+          <var-decl name='allow_p2p_go_ps' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='max_idle_period' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2416'>
+          <var-decl name='protected_keep_alive' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2424'>
+          <var-decl name='ftm_responder' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='ftmr_params' type-id='d203221f' visibility='default' filepath='include/net/mac80211.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='nontransmitted' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2504'>
+          <var-decl name='transmitter_bssid' type-id='cf1a4160' visibility='default' filepath='include/net/mac80211.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2552'>
+          <var-decl name='bssid_index' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='bssid_indicator' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2568'>
+          <var-decl name='ema_ap' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2576'>
+          <var-decl name='profile_periodicity' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2584'>
+          <var-decl name='he_operation' type-id='ae6fa461' visibility='default' filepath='include/net/mac80211.h' line='668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2632'>
+          <var-decl name='he_obss_pd' type-id='198fcd88' visibility='default' filepath='include/net/mac80211.h' line='669' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_mu_group_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='471' column='1' id='082b33cf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='membership' type-id='d2f7b56a' visibility='default' filepath='include/net/mac80211.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='position' type-id='0d8415b5' visibility='default' filepath='include/net/mac80211.h' line='473' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_p2p_noa_attr' size-in-bits='432' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1243' column='1' id='8ed5c74b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='oppps_ctwindow' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='desc' type-id='350eac09' visibility='default' filepath='include/linux/ieee80211.h' line='1246' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_p2p_noa_desc' size-in-bits='104' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1236' column='1' id='46ac9319'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='duration' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='interval' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='start_time' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1240' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_ftm_responder_params' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='484' column='1' id='a4a20ee7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lci' type-id='bbaf3419' visibility='default' filepath='include/net/mac80211.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='civicloc' type-id='bbaf3419' visibility='default' filepath='include/net/mac80211.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lci_len' type-id='b59d7dce' visibility='default' filepath='include/net/mac80211.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='civicloc_len' type-id='b59d7dce' visibility='default' filepath='include/net/mac80211.h' line='488' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_he_operation' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1640' column='1' id='ae6fa461'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='he_oper_params' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='he_mcs_nss_set' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='optional' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1644' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_chanctx_conf' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='225' column='1' id='9dcec05c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='def' type-id='e07d69c8' visibility='default' filepath='include/net/mac80211.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='min_def' type-id='e07d69c8' visibility='default' filepath='include/net/mac80211.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rx_chains_static' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='520'>
+          <var-decl name='rx_chains_dynamic' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='radar_enabled' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='drv_priv' type-id='29c3368c' visibility='default' filepath='include/net/mac80211.h' line='233' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='set_key_cmd' filepath='include/net/mac80211.h' line='1849' column='1' id='4c14bbdf'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SET_KEY' value='0'/>
+        <enumerator name='DISABLE_KEY' value='1'/>
+      </enum-decl>
+      <class-decl name='ieee80211_key_conf' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1754' column='1' id='12b6a8d6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_pn' type-id='28ee064c' visibility='default' filepath='include/net/mac80211.h' line='1755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cipher' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='icv_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='iv_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='hw_key_idx' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='keyidx' type-id='fdbf7a0f' visibility='default' filepath='include/net/mac80211.h' line='1760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='keylen' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='key' type-id='29c3368c' visibility='default' filepath='include/net/mac80211.h' line='1763' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_scan_request' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='2528' column='1' id='e827ee6f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ies' type-id='80d7b69d' visibility='default' filepath='include/net/mac80211.h' line='2529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='req' type-id='6834abc3' visibility='default' filepath='include/net/mac80211.h' line='2532' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_scan_ies' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1088' column='1' id='80d7b69d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ies' type-id='a9f93891' visibility='default' filepath='include/net/mac80211.h' line='1089' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='len' type-id='314f9837' visibility='default' filepath='include/net/mac80211.h' line='1090' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='common_ies' type-id='bbaf3419' visibility='default' filepath='include/net/mac80211.h' line='1091' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='common_ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/mac80211.h' line='1092' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_low_level_stats' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='184' column='1' id='835416bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dot11ACKFailureCount' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dot11RTSFailureCount' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dot11FCSErrorCount' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dot11RTSSuccessCount' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='188' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_key_seq' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1785' column='1' id='27ba2d9f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='eb542e10' visibility='default' filepath='include/net/mac80211.h' line='1786' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__8' size-in-bits='160' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1786' column='1' id='eb542e10'>
+        <data-member access='private'>
+          <var-decl name='tkip' type-id='5a0ae575' visibility='default' filepath='include/net/mac80211.h' line='1790' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ccmp' type-id='71c656e5' visibility='default' filepath='include/net/mac80211.h' line='1793' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='aes_cmac' type-id='71c656e5' visibility='default' filepath='include/net/mac80211.h' line='1796' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='aes_gmac' type-id='71c656e5' visibility='default' filepath='include/net/mac80211.h' line='1799' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='gcmp' type-id='71c656e5' visibility='default' filepath='include/net/mac80211.h' line='1802' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='hw' type-id='ea135534' visibility='default' filepath='include/net/mac80211.h' line='1806' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1787' column='1' id='5a0ae575'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iv32' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='iv16' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1789' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1791' column='1' id='71c656e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pn' type-id='cf1a4160' visibility='default' filepath='include/net/mac80211.h' line='1792' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__7' size-in-bits='136' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1803' column='1' id='ea135534'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seq' type-id='0d8415b5' visibility='default' filepath='include/net/mac80211.h' line='1804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1805' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='sta_notify_cmd' filepath='include/net/mac80211.h' line='2029' column='1' id='2c2fe365'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='STA_NOTIFY_SLEEP' value='0'/>
+        <enumerator name='STA_NOTIFY_AWAKE' value='1'/>
+      </enum-decl>
+      <enum-decl name='ieee80211_sta_state' filepath='include/net/mac80211.h' line='1863' column='1' id='59cd43cb'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_STA_NOTEXIST' value='0'/>
+        <enumerator name='IEEE80211_STA_NONE' value='1'/>
+        <enumerator name='IEEE80211_STA_AUTH' value='2'/>
+        <enumerator name='IEEE80211_STA_ASSOC' value='3'/>
+        <enumerator name='IEEE80211_STA_AUTHORIZED' value='4'/>
+      </enum-decl>
+      <class-decl name='ieee80211_tx_queue_params' size-in-bits='112' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='173' column='1' id='b26908c7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='txop' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='cw_min' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cw_max' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='aifs' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='acm' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='uapsd' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='mu_edca' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='mu_edca_param_rec' type-id='59362a78' visibility='default' filepath='include/net/mac80211.h' line='181' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_he_mu_edca_param_ac_rec' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1665' column='1' id='59362a78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='aifsn' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='ecw_min_max' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='mu_edca_timer' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1668' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_ampdu_params' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='3139' column='1' id='adc74f98'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action' type-id='1498f653' visibility='default' filepath='include/net/mac80211.h' line='3140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sta' type-id='f27bb1b0' visibility='default' filepath='include/net/mac80211.h' line='3141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tid' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='3142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='ssn' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='3143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='buf_size' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='3144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='amsdu' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='3145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timeout' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='3146' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_ampdu_mlme_action' filepath='include/net/mac80211.h' line='3112' column='1' id='1498f653'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_AMPDU_RX_START' value='0'/>
+        <enumerator name='IEEE80211_AMPDU_RX_STOP' value='1'/>
+        <enumerator name='IEEE80211_AMPDU_TX_START' value='2'/>
+        <enumerator name='IEEE80211_AMPDU_TX_STOP_CONT' value='3'/>
+        <enumerator name='IEEE80211_AMPDU_TX_STOP_FLUSH' value='4'/>
+        <enumerator name='IEEE80211_AMPDU_TX_STOP_FLUSH_CONT' value='5'/>
+        <enumerator name='IEEE80211_AMPDU_TX_OPERATIONAL' value='6'/>
+      </enum-decl>
+      <class-decl name='ieee80211_channel_switch' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1538' column='1' id='3e5b2db8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timestamp' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='1539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='device_timestamp' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='block_tx' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/mac80211.h' line='1542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='count' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='delay' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1544' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_roc_type' filepath='include/net/mac80211.h' line='3194' column='1' id='b72e5cc4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_ROC_TYPE_NORMAL' value='0'/>
+        <enumerator name='IEEE80211_ROC_TYPE_MGMT_TX' value='1'/>
+      </enum-decl>
+      <class-decl name='ieee80211_event' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='454' column='1' id='f08a13f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='703e082c' visibility='default' filepath='include/net/mac80211.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='u' type-id='2a1a3e21' visibility='default' filepath='include/net/mac80211.h' line='460' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_event_type' filepath='include/net/mac80211.h' line='371' column='1' id='703e082c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RSSI_EVENT' value='0'/>
+        <enumerator name='MLME_EVENT' value='1'/>
+        <enumerator name='BAR_RX_EVENT' value='2'/>
+        <enumerator name='BA_FRAME_TIMEOUT' value='3'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__9' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='456' column='1' id='2a1a3e21'>
+        <data-member access='private'>
+          <var-decl name='rssi' type-id='1569e170' visibility='default' filepath='include/net/mac80211.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='mlme' type-id='46d0b18c' visibility='default' filepath='include/net/mac80211.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ba' type-id='0da711ca' visibility='default' filepath='include/net/mac80211.h' line='459' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='ieee80211_rssi_event' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='392' column='1' id='1569e170'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='2ff52c3e' visibility='default' filepath='include/net/mac80211.h' line='393' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_rssi_event_data' filepath='include/net/mac80211.h' line='383' column='1' id='2ff52c3e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RSSI_EVENT_HIGH' value='0'/>
+        <enumerator name='RSSI_EVENT_LOW' value='1'/>
+      </enum-decl>
+      <class-decl name='ieee80211_mlme_event' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='428' column='1' id='46d0b18c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='919b8752' visibility='default' filepath='include/net/mac80211.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='status' type-id='0503712c' visibility='default' filepath='include/net/mac80211.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reason' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='431' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_mlme_event_data' filepath='include/net/mac80211.h' line='403' column='1' id='919b8752'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='AUTH_EVENT' value='0'/>
+        <enumerator name='ASSOC_EVENT' value='1'/>
+        <enumerator name='DEAUTH_RX_EVENT' value='2'/>
+        <enumerator name='DEAUTH_TX_EVENT' value='3'/>
+      </enum-decl>
+      <enum-decl name='ieee80211_mlme_event_status' filepath='include/net/mac80211.h' line='416' column='1' id='0503712c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MLME_SUCCESS' value='0'/>
+        <enumerator name='MLME_DENIED' value='1'/>
+        <enumerator name='MLME_TIMEOUT' value='2'/>
+      </enum-decl>
+      <class-decl name='ieee80211_ba_event' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='440' column='1' id='0da711ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sta' type-id='f27bb1b0' visibility='default' filepath='include/net/mac80211.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tid' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='ssn' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='443' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_frame_release_type' filepath='include/net/mac80211.h' line='3155' column='1' id='2d72d269'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_FRAME_RELEASE_PSPOLL' value='0'/>
+        <enumerator name='IEEE80211_FRAME_RELEASE_UAPSD' value='1'/>
+      </enum-decl>
+      <class-decl name='ieee80211_vif_chanctx_switch' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='267' column='1' id='1693dce0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vif' type-id='3a1577c5' visibility='default' filepath='include/net/mac80211.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='old_ctx' type-id='9a58f9aa' visibility='default' filepath='include/net/mac80211.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='new_ctx' type-id='9a58f9aa' visibility='default' filepath='include/net/mac80211.h' line='270' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_chanctx_switch_mode' filepath='include/net/mac80211.h' line='250' column='1' id='6d6a8077'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='CHANCTX_SWMODE_REASSIGN_VIF' value='0'/>
+        <enumerator name='CHANCTX_SWMODE_SWAP_CONTEXTS' value='1'/>
+      </enum-decl>
+      <enum-decl name='ieee80211_reconfig_type' filepath='include/net/mac80211.h' line='3210' column='1' id='1ca6ddb7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_RECONFIG_TYPE_RESTART' value='0'/>
+        <enumerator name='IEEE80211_RECONFIG_TYPE_SUSPEND' value='1'/>
+      </enum-decl>
+      <class-decl name='ieee80211_tdls_ch_sw_params' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='2548' column='1' id='7a2960eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sta' type-id='f27bb1b0' visibility='default' filepath='include/net/mac80211.h' line='2549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='chandef' type-id='0953fbfe' visibility='default' filepath='include/net/mac80211.h' line='2550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='status' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='2552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timestamp' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='2553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='switch_time' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='switch_timeout' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tmpl_skb' type-id='0fbf3cfd' visibility='default' filepath='include/net/mac80211.h' line='2556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ch_sw_tm_ie' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='2557' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='f3945544' const='yes' id='d51a347b'/>
+      <pointer-type-def type-id='d51a347b' size-in-bits='64' id='c9405b83'/>
+      <qualified-type-def type-id='68ce81a7' const='yes' id='0637b06c'/>
+      <pointer-type-def type-id='0637b06c' size-in-bits='64' id='0faa7e32'/>
+      <qualified-type-def type-id='f08a13f8' const='yes' id='da9606ef'/>
+      <pointer-type-def type-id='da9606ef' size-in-bits='64' id='df2ca81f'/>
+      <qualified-type-def type-id='686b8abc' const='yes' id='6ffc942b'/>
+      <pointer-type-def type-id='6ffc942b' size-in-bits='64' id='4b9cfd93'/>
+      <qualified-type-def type-id='b26908c7' const='yes' id='385cd4fc'/>
+      <pointer-type-def type-id='385cd4fc' size-in-bits='64' id='90230ce2'/>
+      <pointer-type-def type-id='adc74f98' size-in-bits='64' id='545d8e6e'/>
+      <pointer-type-def type-id='0f8e82db' size-in-bits='64' id='1ffaca3b'/>
+      <pointer-type-def type-id='9dcec05c' size-in-bits='64' id='9a58f9aa'/>
+      <pointer-type-def type-id='3e5b2db8' size-in-bits='64' id='0822e26e'/>
+      <pointer-type-def type-id='a4a20ee7' size-in-bits='64' id='d203221f'/>
+      <pointer-type-def type-id='3d75a1cd' size-in-bits='64' id='1905517d'/>
+      <pointer-type-def type-id='12b6a8d6' size-in-bits='64' id='43c1ffec'/>
+      <pointer-type-def type-id='27ba2d9f' size-in-bits='64' id='6b7f94b7'/>
+      <pointer-type-def type-id='835416bb' size-in-bits='64' id='5ee25cfb'/>
+      <pointer-type-def type-id='80d7b69d' size-in-bits='64' id='4f46520d'/>
+      <pointer-type-def type-id='e827ee6f' size-in-bits='64' id='49908b87'/>
+      <pointer-type-def type-id='9188aa82' size-in-bits='64' id='f27bb1b0'/>
+      <pointer-type-def type-id='05fba71a' size-in-bits='64' id='88f13db8'/>
+      <pointer-type-def type-id='7a2960eb' size-in-bits='64' id='6a6bb60b'/>
+      <pointer-type-def type-id='14120a32' size-in-bits='64' id='70e99510'/>
+      <pointer-type-def type-id='fa01d8f7' size-in-bits='64' id='cde83d0f'/>
+      <pointer-type-def type-id='b4ae7345' size-in-bits='64' id='3a1577c5'/>
+      <pointer-type-def type-id='1693dce0' size-in-bits='64' id='5ea19606'/>
+      <pointer-type-def type-id='7107744b' size-in-bits='64' id='230ee907'/>
+      <pointer-type-def type-id='944e9b5c' size-in-bits='64' id='64be16ce'/>
+      <pointer-type-def type-id='8236d2f1' size-in-bits='64' id='a0c22185'/>
+      <pointer-type-def type-id='f2908740' size-in-bits='64' id='8fa2f562'/>
+      <pointer-type-def type-id='8163cba1' size-in-bits='64' id='885e570d'/>
+      <pointer-type-def type-id='f05ececf' size-in-bits='64' id='3e699d2b'/>
+      <pointer-type-def type-id='531211f3' size-in-bits='64' id='d251af87'/>
+      <pointer-type-def type-id='2c87adcc' size-in-bits='64' id='0891de36'/>
+      <pointer-type-def type-id='f8076de6' size-in-bits='64' id='d8175730'/>
+      <pointer-type-def type-id='7d88aceb' size-in-bits='64' id='cf93231f'/>
+      <pointer-type-def type-id='602864f6' size-in-bits='64' id='62f61ae0'/>
+      <pointer-type-def type-id='d7ec658f' size-in-bits='64' id='333f7dcb'/>
+      <pointer-type-def type-id='88007fe7' size-in-bits='64' id='b5d1fe23'/>
+      <pointer-type-def type-id='171d2db1' size-in-bits='64' id='2cd242d5'/>
+      <pointer-type-def type-id='ff64924d' size-in-bits='64' id='bddccc89'/>
+      <pointer-type-def type-id='2c28f1e0' size-in-bits='64' id='6488c982'/>
+      <pointer-type-def type-id='3d5ddc48' size-in-bits='64' id='969740e2'/>
+      <pointer-type-def type-id='d98a9fd9' size-in-bits='64' id='37497cfd'/>
+      <pointer-type-def type-id='07b9565c' size-in-bits='64' id='c7bc5836'/>
+      <pointer-type-def type-id='3eb76b2b' size-in-bits='64' id='8944911f'/>
+      <pointer-type-def type-id='19891358' size-in-bits='64' id='47abf612'/>
+      <pointer-type-def type-id='117ec4b4' size-in-bits='64' id='ccb4b446'/>
+      <pointer-type-def type-id='5a6783ba' size-in-bits='64' id='27dc45b4'/>
+      <pointer-type-def type-id='882f71bc' size-in-bits='64' id='72b3df9e'/>
+      <pointer-type-def type-id='77b752d4' size-in-bits='64' id='830f4cee'/>
+      <pointer-type-def type-id='3ac4d0fb' size-in-bits='64' id='1d9ce797'/>
+      <pointer-type-def type-id='b61634d7' size-in-bits='64' id='5f071c93'/>
+      <pointer-type-def type-id='6f975fc5' size-in-bits='64' id='89841ba1'/>
+      <pointer-type-def type-id='c1b980bc' size-in-bits='64' id='a17a9b96'/>
+      <pointer-type-def type-id='15fb9d09' size-in-bits='64' id='49d216dd'/>
+      <pointer-type-def type-id='400ae043' size-in-bits='64' id='5045387f'/>
+      <pointer-type-def type-id='e8f55bb1' size-in-bits='64' id='d32f401d'/>
+      <pointer-type-def type-id='7ff9b331' size-in-bits='64' id='7ceee79d'/>
+      <pointer-type-def type-id='83200b90' size-in-bits='64' id='4c6dab52'/>
+      <pointer-type-def type-id='fce05b30' size-in-bits='64' id='4c58212a'/>
+      <pointer-type-def type-id='ae337b27' size-in-bits='64' id='a6d679d3'/>
+      <pointer-type-def type-id='27cc9612' size-in-bits='64' id='b6c3d24c'/>
+      <pointer-type-def type-id='f159f1b4' size-in-bits='64' id='065f4ac6'/>
+      <pointer-type-def type-id='c1fb2203' size-in-bits='64' id='f04be99f'/>
+      <pointer-type-def type-id='06b296c4' size-in-bits='64' id='8595687e'/>
+      <pointer-type-def type-id='dfab805b' size-in-bits='64' id='a486176f'/>
+      <pointer-type-def type-id='a1494618' size-in-bits='64' id='e4575f22'/>
+      <pointer-type-def type-id='ad4fc2f9' size-in-bits='64' id='f333b0ad'/>
+      <pointer-type-def type-id='f0418540' size-in-bits='64' id='5ee1d5b2'/>
+      <pointer-type-def type-id='4a332832' size-in-bits='64' id='13137614'/>
+      <pointer-type-def type-id='bf9132e7' size-in-bits='64' id='add8debb'/>
+      <pointer-type-def type-id='dd77c0eb' size-in-bits='64' id='285dfd8f'/>
+      <pointer-type-def type-id='20d6ba97' size-in-bits='64' id='fdeb8c83'/>
+      <pointer-type-def type-id='2b1fdd50' size-in-bits='64' id='96a99dd2'/>
+      <pointer-type-def type-id='900eb96a' size-in-bits='64' id='80b2002c'/>
+      <pointer-type-def type-id='b69ec80d' size-in-bits='64' id='6aed11b9'/>
+      <pointer-type-def type-id='430b9b5e' size-in-bits='64' id='dca42ce8'/>
+      <pointer-type-def type-id='d33c76ed' size-in-bits='64' id='0efb02f1'/>
+      <pointer-type-def type-id='94fb86a3' size-in-bits='64' id='3bd13fe7'/>
+      <pointer-type-def type-id='6fd909cb' size-in-bits='64' id='5fce9027'/>
+      <pointer-type-def type-id='25e76c45' size-in-bits='64' id='a41843a9'/>
+      <pointer-type-def type-id='d87f449d' size-in-bits='64' id='8a57bbf1'/>
+      <pointer-type-def type-id='d23ecc82' size-in-bits='64' id='bd8d3954'/>
+      <pointer-type-def type-id='5182ec9e' size-in-bits='64' id='f261f678'/>
+      <pointer-type-def type-id='b3cab718' size-in-bits='64' id='bfaf027a'/>
+      <pointer-type-def type-id='b8bd1d94' size-in-bits='64' id='d50707ae'/>
+      <pointer-type-def type-id='170653e7' size-in-bits='64' id='cc8dd693'/>
+      <pointer-type-def type-id='085f950c' size-in-bits='64' id='df80a246'/>
+      <pointer-type-def type-id='76916f79' size-in-bits='64' id='1c6d0c4d'/>
+      <pointer-type-def type-id='0a3bbc4c' size-in-bits='64' id='74819aa6'/>
+      <pointer-type-def type-id='7310e2e4' size-in-bits='64' id='c3cc3c4e'/>
+      <pointer-type-def type-id='f0c7f006' size-in-bits='64' id='62a26160'/>
+      <pointer-type-def type-id='6d55644e' size-in-bits='64' id='c69188a0'/>
+      <pointer-type-def type-id='9297809a' size-in-bits='64' id='d49fb76c'/>
+      <pointer-type-def type-id='6b5fe1c9' size-in-bits='64' id='b735b9d5'/>
+      <pointer-type-def type-id='a0886c67' size-in-bits='64' id='a22252ab'/>
+      <pointer-type-def type-id='fd931742' size-in-bits='64' id='9511263c'/>
+      <pointer-type-def type-id='2c15778e' size-in-bits='64' id='08e5e0c8'/>
+      <function-decl name='ieee80211_alloc_hw_nm' mangled-name='ieee80211_alloc_hw_nm' filepath='net/mac80211/main.c' line='507' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_alloc_hw_nm'>
+        <parameter type-id='b59d7dce' name='priv_data_len' filepath='net/mac80211/main.c' line='507' column='1'/>
+        <parameter type-id='4b9cfd93' name='ops' filepath='net/mac80211/main.c' line='508' column='1'/>
+        <parameter type-id='80f4b756' name='requested_name' filepath='net/mac80211/main.c' line='509' column='1'/>
+        <return type-id='1905517d'/>
+      </function-decl>
+      <function-decl name='ieee80211_restart_hw' mangled-name='ieee80211_restart_hw' filepath='net/mac80211/main.c' line='292' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_restart_hw'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/main.c' line='292' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_tx_status' mangled-name='ieee80211_tx_status' filepath='include/net/mac80211.h' line='4555' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_tx_status'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_rx_napi' mangled-name='ieee80211_rx_napi' filepath='include/net/mac80211.h' line='4313' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_rx_napi'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='f27bb1b0'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='c50361c5'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_register_hw' mangled-name='ieee80211_register_hw' filepath='net/mac80211/main.c' line='862' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_register_hw'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/main.c' line='862' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ieee80211_unregister_hw' mangled-name='ieee80211_unregister_hw' filepath='net/mac80211/main.c' line='1311' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_unregister_hw'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/main.c' line='1311' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_free_hw' mangled-name='ieee80211_free_hw' filepath='net/mac80211/main.c' line='1367' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_free_hw'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/main.c' line='1367' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='e07d69c8' size-in-bits='64' id='0953fbfe'/>
+      <function-type size-in-bits='64' id='7107744b'>
+        <parameter type-id='1905517d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='944e9b5c'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='9d025b00'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8236d2f1'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='4c14bbdf'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f27bb1b0'/>
+        <parameter type-id='43c1ffec'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f2908740'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='9a58f9aa'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8163cba1'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='5ee25cfb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f05ececf'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='f27bb1b0'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='531211f3'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2c87adcc'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f7cfb49a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8076de6'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='d458dfce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7d88aceb'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='d458dfce'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='602864f6'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='6951bca2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d7ec658f'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='9e4995c7'/>
+        <parameter type-id='4f46520d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='88007fe7'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='d74690fd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='171d2db1'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='c9405b83'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ff64924d'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='86505f90'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2c28f1e0'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='545d8e6e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3d5ddc48'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='9a58f9aa'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d98a9fd9'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='ec00acfb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b72e5cc4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='07b9565c'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='0822e26e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3eb76b2b'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='49908b87'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='19891358'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f27bb1b0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='117ec4b4'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f27bb1b0'/>
+        <parameter type-id='59cd43cb'/>
+        <parameter type-id='59cd43cb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5a6783ba'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f27bb1b0'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='0953fbfe'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='882f71bc'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='77b752d4'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3ac4d0fb'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='90230ce2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b61634d7'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='5ea19606'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='6d6a8077'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6f975fc5'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='6f439e9a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c1b980bc'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='15fb9d09'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='400ae043'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e8f55bb1'>
+        <parameter type-id='1905517d'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7ff9b331'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='83200b90'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='f27bb1b0'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fce05b30'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <return type-id='91ce1af9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ae337b27'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='9ed060a0'/>
+        <return type-id='91ce1af9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='27cc9612'>
+        <parameter type-id='1905517d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f159f1b4'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='1ca6ddb7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c1fb2203'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='9a58f9aa'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06b296c4'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='9a58f9aa'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dfab805b'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='43c1ffec'/>
+        <parameter type-id='6b7f94b7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a1494618'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='f27bb1b0'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='2d72d269'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ad4fc2f9'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='70e99510'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f0418540'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='cde83d0f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4a332832'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bf9132e7'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='0953fbfe'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dd77c0eb'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='6f33eada'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='20d6ba97'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='6951bca2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2b1fdd50'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='df2ca81f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='900eb96a'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='bbaf3419'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b69ec80d'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='2c2fe365'/>
+        <parameter type-id='f27bb1b0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='430b9b5e'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='33e1dfe4'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d33c76ed'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='1ffaca3b'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='94fb86a3'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='9a58f9aa'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6fd909cb'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='0822e26e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='25e76c45'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='43c1ffec'/>
+        <parameter type-id='f27bb1b0'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='26d4d46f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d87f449d'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f27bb1b0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d23ecc82'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f27bb1b0'/>
+        <parameter type-id='7af1dc96'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5182ec9e'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f27bb1b0'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b3cab718'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='6a6bb60b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b8bd1d94'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f026b16c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='170653e7'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='085f950c'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='9b7c55ef'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='76916f79'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0a3bbc4c'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7310e2e4'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f0c7f006'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6d55644e'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9297809a'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6b5fe1c9'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a0886c67'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='9b7e9486'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fd931742'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2c15778e'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <class-decl name='cfg80211_nan_func' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2997' column='1' id='f3945544'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f796e63e' visibility='default' filepath='include/net/cfg80211.h' line='2998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='service_id' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='publish_type' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='close_range' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='3001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='publish_bcast' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='3002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='subscribe_active' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='3003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='followup_id' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='followup_reqid' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='followup_dest' type-id='6d8d26fb' visibility='default' filepath='include/net/cfg80211.h' line='3006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ttl' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3007' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='serv_spec_info' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='3008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='serv_spec_info_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='srf_include' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='3010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='srf_bf' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='3011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='srf_bf_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='srf_bf_idx' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='srf_macs' type-id='01b378ab' visibility='default' filepath='include/net/cfg80211.h' line='3014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='srf_num_macs' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='3015' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rx_filters' type-id='ee7e85c3' visibility='default' filepath='include/net/cfg80211.h' line='3016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tx_filters' type-id='ee7e85c3' visibility='default' filepath='include/net/cfg80211.h' line='3017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='num_tx_filters' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='776'>
+          <var-decl name='num_rx_filters' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='instance_id' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cookie' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='3021' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_scan_request' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1960' column='1' id='6834abc3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ssids' type-id='a1fa7fb7' visibility='default' filepath='include/net/cfg80211.h' line='1961' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_ssids' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1962' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='n_channels' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1963' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='scan_width' type-id='95d46034' visibility='default' filepath='include/net/cfg80211.h' line='1964' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1965' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='1966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='duration' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1967' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='duration_mandatory' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1969' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rates' type-id='1c6c0c39' visibility='default' filepath='include/net/cfg80211.h' line='1971' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wdev' type-id='63c7e8e2' visibility='default' filepath='include/net/cfg80211.h' line='1973' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mac_addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='1975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='624'>
+          <var-decl name='mac_addr_mask' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='1976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='1977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='wiphy' type-id='666fb412' visibility='default' filepath='include/net/cfg80211.h' line='1980' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='scan_start' type-id='7359adad' visibility='default' filepath='include/net/cfg80211.h' line='1981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='info' type-id='b1493ece' visibility='default' filepath='include/net/cfg80211.h' line='1982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='notified' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1032'>
+          <var-decl name='no_cck' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='channels' type-id='14cad687' visibility='default' filepath='include/net/cfg80211.h' line='1987' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4f719aac' size-in-bits='64' id='f7cfb49a'/>
+      <pointer-type-def type-id='f569a53c' size-in-bits='64' id='6f33eada'/>
+      <pointer-type-def type-id='7fec8d58' size-in-bits='64' id='d458dfce'/>
+      <pointer-type-def type-id='fef37f13' size-in-bits='64' id='ee7e85c3'/>
+      <pointer-type-def type-id='fe64f3b4' size-in-bits='64' id='6951bca2'/>
+      <pointer-type-def type-id='d168fd05' size-in-bits='64' id='d74690fd'/>
+      <enum-decl name='nl80211_nan_function_type' filepath='include/uapi/linux/nl80211.h' line='5915' column='1' id='f796e63e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_NAN_FUNC_PUBLISH' value='0'/>
+        <enumerator name='NL80211_NAN_FUNC_SUBSCRIBE' value='1'/>
+        <enumerator name='NL80211_NAN_FUNC_FOLLOW_UP' value='2'/>
+        <enumerator name='__NL80211_NAN_FUNC_TYPE_AFTER_LAST' value='3'/>
+        <enumerator name='NL80211_NAN_FUNC_MAX_TYPE' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='214ce930' size-in-bits='64' id='7af1dc96'/>
+      <class-decl name='cfg80211_scan_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1925' column='1' id='b1493ece'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scan_start_tsf' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1926' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tsf_bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='1927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='aborted' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1928' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='8cd7231c' size-in-bits='64' id='6f439e9a'/>
+      <pointer-type-def type-id='3ce3a3ea' size-in-bits='64' id='63c7e8e2'/>
+      <qualified-type-def type-id='febb0cbe' const='yes' id='d168fd05'/>
+      <class-decl name='cfg80211_ftm_responder_stats' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3091' column='1' id='4f719aac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='success_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3093' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='partial_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3094' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='failed_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3095' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='asap_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3096' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='non_asap_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3097' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='total_duration_ms' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='3098' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unknown_triggers_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3099' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='reschedule_requests_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='out_of_window_triggers_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3101' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_gtk_rekey_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2840' column='1' id='f569a53c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kek' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kck' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='replay_ctr' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2841' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_nan_conf' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2940' column='1' id='7fec8d58'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='master_pref' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bands' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2942' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_nan_func_filter' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2963' column='1' id='fef37f13'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filter' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2964' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2965' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_pmsr_request' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3272' column='1' id='fe64f3b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cookie' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='3273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='drv_data' type-id='eaa32e2f' visibility='default' filepath='include/net/cfg80211.h' line='3274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n_peers' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nl_portid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timeout' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='mac_addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='3280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='mac_addr_mask' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='3281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='3283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='peers' type-id='42a2e39d' visibility='default' filepath='include/net/cfg80211.h' line='3285' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='station_info' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1502' column='1' id='214ce930'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='connected_time' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='inactive_time' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='assoc_at' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rx_bytes' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_bytes' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='llid' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='plid' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='plink_state' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='signal' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='signal_avg' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='376'>
+          <var-decl name='chains' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='chain_signal' type-id='da004b74' visibility='default' filepath='include/net/cfg80211.h' line='1516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='chain_signal_avg' type-id='da004b74' visibility='default' filepath='include/net/cfg80211.h' line='1517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='txrate' type-id='5ece574c' visibility='default' filepath='include/net/cfg80211.h' line='1519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='rxrate' type-id='5ece574c' visibility='default' filepath='include/net/cfg80211.h' line='1520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='rx_packets' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tx_packets' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='tx_retries' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tx_failed' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='rx_dropped_misc' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bss_param' type-id='ca45acc3' visibility='default' filepath='include/net/cfg80211.h' line='1526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='sta_flags' type-id='8d118865' visibility='default' filepath='include/net/cfg80211.h' line='1527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='generation' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='assoc_req_ies' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='assoc_req_ies_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='1532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='beacon_loss_count' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='t_offset' type-id='9b7c55ef' visibility='default' filepath='include/net/cfg80211.h' line='1535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='local_pm' type-id='8fbf0816' visibility='default' filepath='include/net/cfg80211.h' line='1536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='peer_pm' type-id='8fbf0816' visibility='default' filepath='include/net/cfg80211.h' line='1537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='nonpeer_pm' type-id='8fbf0816' visibility='default' filepath='include/net/cfg80211.h' line='1538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='expected_throughput' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='tx_duration' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rx_duration' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='rx_beacon' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rx_beacon_signal_avg' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1480'>
+          <var-decl name='connected_to_gate' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='pertid' type-id='718fbcad' visibility='default' filepath='include/net/cfg80211.h' line='1548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='ack_signal' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1608'>
+          <var-decl name='avg_ack_signal' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1616'>
+          <var-decl name='airtime_weight' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='rx_mpdu_count' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='fcs_err_count' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='airtime_link_metric' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1557' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='survey_info' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='837' column='1' id='8cd7231c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channel' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='time' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='time_busy' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='time_ext_busy' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='time_rx' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='time_tx' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='time_scan' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='time_bss_rx' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='filled' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='noise' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='847' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wireless_dev' size-in-bits='3584' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4931' column='1' id='3ce3a3ea'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wiphy' type-id='666fb412' visibility='default' filepath='include/net/cfg80211.h' line='4932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iftype' type-id='86505f90' visibility='default' filepath='include/net/cfg80211.h' line='4933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='4936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='netdev' type-id='68a2d05c' visibility='default' filepath='include/net/cfg80211.h' line='4937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='identifier' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mgmt_registrations' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='4941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mgmt_registrations_lock' type-id='fb4018a0' visibility='default' filepath='include/net/cfg80211.h' line='4942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mtx' type-id='925167dc' visibility='default' filepath='include/net/cfg80211.h' line='4944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='use_4addr' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='840'>
+          <var-decl name='is_running' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='848'>
+          <var-decl name='address' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='4948' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ssid' type-id='e3dc4fdb' visibility='default' filepath='include/net/cfg80211.h' line='4951' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ssid_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='mesh_id_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1168'>
+          <var-decl name='mesh_id_up_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='conn' type-id='6dbc8e18' visibility='default' filepath='include/net/cfg80211.h' line='4953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='connect_keys' type-id='561a36db' visibility='default' filepath='include/net/cfg80211.h' line='4954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='conn_bss_type' type-id='cb952348' visibility='default' filepath='include/net/cfg80211.h' line='4955' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='conn_owner_nlportid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4956' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='disconnect_wk' type-id='ef9025d0' visibility='default' filepath='include/net/cfg80211.h' line='4958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='disconnect_bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='4959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='4961' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='event_lock' type-id='fb4018a0' visibility='default' filepath='include/net/cfg80211.h' line='4962' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='current_bss' type-id='1819dec8' visibility='default' filepath='include/net/cfg80211.h' line='4964' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='preset_chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='4965' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='4966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='ibss_fixed' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2632'>
+          <var-decl name='ibss_dfs_possible' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4969' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2640'>
+          <var-decl name='ps' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4971' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='ps_timeout' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4972' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='beacon_interval' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='ap_unexpected_nlportid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='owner_nlportid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4978' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2784'>
+          <var-decl name='nl_owner_dead' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2792'>
+          <var-decl name='cac_started' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='cac_start_time' type-id='7359adad' visibility='default' filepath='include/net/cfg80211.h' line='4982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='cac_time_ms' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='4983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='cqm_config' type-id='ee527710' visibility='default' filepath='include/net/cfg80211.h' line='5001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='pmsr_list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='5003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='pmsr_lock' type-id='fb4018a0' visibility='default' filepath='include/net/cfg80211.h' line='5004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='pmsr_free_wk' type-id='ef9025d0' visibility='default' filepath='include/net/cfg80211.h' line='5005' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='1540019b' size-in-bits='64' id='561a36db'/>
+      <pointer-type-def type-id='43420c6a' size-in-bits='64' id='6dbc8e18'/>
+      <pointer-type-def type-id='2e77eb82' size-in-bits='64' id='ee527710'/>
+      <pointer-type-def type-id='2baffd9a' size-in-bits='64' id='1819dec8'/>
+      <array-type-def dimensions='1' type-id='167153b5' size-in-bits='infinite' id='42a2e39d'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='af09339d' size-in-bits='64' id='718fbcad'/>
+      <enum-decl name='ieee80211_bss_type' filepath='include/net/cfg80211.h' line='207' column='1' id='cb952348'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_BSS_TYPE_ESS' value='0'/>
+        <enumerator name='IEEE80211_BSS_TYPE_PBSS' value='1'/>
+        <enumerator name='IEEE80211_BSS_TYPE_IBSS' value='2'/>
+        <enumerator name='IEEE80211_BSS_TYPE_MBSS' value='3'/>
+        <enumerator name='IEEE80211_BSS_TYPE_ANY' value='4'/>
+      </enum-decl>
+      <enum-decl name='nl80211_mesh_power_mode' filepath='include/uapi/linux/nl80211.h' line='3964' column='1' id='8fbf0816'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_MESH_POWER_UNKNOWN' value='0'/>
+        <enumerator name='NL80211_MESH_POWER_ACTIVE' value='1'/>
+        <enumerator name='NL80211_MESH_POWER_LIGHT_SLEEP' value='2'/>
+        <enumerator name='NL80211_MESH_POWER_DEEP_SLEEP' value='3'/>
+        <enumerator name='__NL80211_MESH_POWER_AFTER_LAST' value='4'/>
+        <enumerator name='NL80211_MESH_POWER_MAX' value='3'/>
+      </enum-decl>
+      <array-type-def dimensions='1' type-id='fdbf7a0f' size-in-bits='32' id='da004b74'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='cfg80211_bitrate_mask' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='966' column='1' id='febb0cbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='control' type-id='b7cdf389' visibility='default' filepath='include/net/cfg80211.h' line='972' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nl80211_sta_flag_update' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/nl80211.h' line='3015' column='1' id='8d118865'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='3016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='set' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='3017' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rate_info' size-in-bits='80' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1340' column='1' id='5ece574c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='mcs' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='legacy' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nss' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bw' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='he_gi' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='he_dcm' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='he_ru_alloc' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='n_bonded_ch' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1349' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sta_bss_parameters' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1377' column='1' id='ca45acc3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dtim_period' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='beacon_interval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1380' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='5b11c736' size-in-bits='1152' id='b7cdf389'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='cfg80211_cached_keys' size-in-bits='1472' is-struct='yes' visibility='default' filepath='net/wireless/core.h' line='273' column='1' id='1540019b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='params' type-id='248874df' visibility='default' filepath='net/wireless/core.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='data' type-id='b726c152' visibility='default' filepath='net/wireless/core.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='def' type-id='95e97e5e' visibility='default' filepath='net/wireless/core.h' line='276' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_conn' size-in-bits='3264' is-struct='yes' visibility='default' filepath='net/wireless/sme.c' line='31' column='1' id='43420c6a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='params' type-id='1291defd' visibility='default' filepath='net/wireless/sme.c' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='state' type-id='08f5ca1d' visibility='default' filepath='net/wireless/sme.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2976'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='net/wireless/sme.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3024'>
+          <var-decl name='prev_bssid' type-id='cf1a4160' visibility='default' filepath='net/wireless/sme.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='net/wireless/sme.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='net/wireless/sme.c' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='auto_auth' type-id='b50a4934' visibility='default' filepath='net/wireless/sme.c' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3208'>
+          <var-decl name='prev_bssid_valid' type-id='b50a4934' visibility='default' filepath='net/wireless/sme.c' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_cqm_config' size-in-bits='96' is-struct='yes' visibility='default' filepath='net/wireless/core.h' line='290' column='1' id='2e77eb82'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rssi_hyst' type-id='19c2251e' visibility='default' filepath='net/wireless/core.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='last_rssi_event_value' type-id='a7832498' visibility='default' filepath='net/wireless/core.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_rssi_thresholds' type-id='95e97e5e' visibility='default' filepath='net/wireless/core.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='rssi_thresholds' type-id='a4bfb48f' visibility='default' filepath='net/wireless/core.h' line='294' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_internal_bss' size-in-bits='1600' is-struct='yes' visibility='default' filepath='net/wireless/core.h' line='152' column='1' id='2baffd9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='net/wireless/core.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hidden_list' type-id='72f469ec' visibility='default' filepath='net/wireless/core.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rbn' type-id='2a8a6332' visibility='default' filepath='net/wireless/core.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ts_boottime' type-id='91ce1af9' visibility='default' filepath='net/wireless/core.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ts' type-id='7359adad' visibility='default' filepath='net/wireless/core.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='refcount' type-id='7359adad' visibility='default' filepath='net/wireless/core.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='hold' type-id='49178f86' visibility='default' filepath='net/wireless/core.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='parent_tsf' type-id='91ce1af9' visibility='default' filepath='net/wireless/core.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='parent_bssid' type-id='cf1a4160' visibility='default' filepath='net/wireless/core.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pub' type-id='5f145050' visibility='default' filepath='net/wireless/core.h' line='174' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_pmsr_request_peer' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3249' column='1' id='167153b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='3250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='3251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='report_ap_tsf' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='ftm' type-id='b60e74e3' visibility='default' filepath='include/net/cfg80211.h' line='3253' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_tid_stats' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1425' column='1' id='af09339d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_msdu' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_msdu' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_msdu_retries' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_msdu_failed' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='txq_stats' type-id='14305947' visibility='default' filepath='include/net/cfg80211.h' line='1431' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='net/wireless/sme.c' line='34' column='1' id='08f5ca1d'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='CFG80211_CONN_SCANNING' value='0'/>
+        <enumerator name='CFG80211_CONN_SCAN_AGAIN' value='1'/>
+        <enumerator name='CFG80211_CONN_AUTHENTICATE_NEXT' value='2'/>
+        <enumerator name='CFG80211_CONN_AUTHENTICATING' value='3'/>
+        <enumerator name='CFG80211_CONN_AUTH_FAILED_TIMEOUT' value='4'/>
+        <enumerator name='CFG80211_CONN_ASSOCIATE_NEXT' value='5'/>
+        <enumerator name='CFG80211_CONN_ASSOCIATING' value='6'/>
+        <enumerator name='CFG80211_CONN_ASSOC_FAILED' value='7'/>
+        <enumerator name='CFG80211_CONN_ASSOC_FAILED_TIMEOUT' value='8'/>
+        <enumerator name='CFG80211_CONN_DEAUTH' value='9'/>
+        <enumerator name='CFG80211_CONN_ABANDON' value='10'/>
+        <enumerator name='CFG80211_CONN_CONNECTED' value='11'/>
+      </enum-decl>
+      <array-type-def dimensions='1' type-id='45947737' size-in-bits='1024' id='248874df'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a7832498' size-in-bits='infinite' id='a4bfb48f'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='cfg80211_bss' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2231' column='1' id='5f145050'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channel' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='2232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='scan_width' type-id='95d46034' visibility='default' filepath='include/net/cfg80211.h' line='2233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ies' type-id='f344e815' visibility='default' filepath='include/net/cfg80211.h' line='2235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='beacon_ies' type-id='f344e815' visibility='default' filepath='include/net/cfg80211.h' line='2236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='proberesp_ies' type-id='f344e815' visibility='default' filepath='include/net/cfg80211.h' line='2237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hidden_beacon_bss' type-id='bda81d86' visibility='default' filepath='include/net/cfg80211.h' line='2239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='transmitted_bss' type-id='bda81d86' visibility='default' filepath='include/net/cfg80211.h' line='2240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nontrans_list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='2241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='signal' type-id='a7832498' visibility='default' filepath='include/net/cfg80211.h' line='2243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='beacon_interval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='624'>
+          <var-decl name='capability' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='688'>
+          <var-decl name='chains' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='696'>
+          <var-decl name='chain_signal' type-id='da004b74' visibility='default' filepath='include/net/cfg80211.h' line='2250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='728'>
+          <var-decl name='bssid_index' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_bssid_indicator' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='priv' type-id='29c3368c' visibility='default' filepath='include/net/cfg80211.h' line='2255' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_connect_params' size-in-bits='2944' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2557' column='1' id='1291defd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channel' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='2558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='channel_hint' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='2559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bssid_hint' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ssid_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='auth_type' type-id='f7dadf06' visibility='default' filepath='include/net/cfg80211.h' line='2564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='privacy' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='mfp' type-id='dfb2486c' visibility='default' filepath='include/net/cfg80211.h' line='2568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='crypto' type-id='f81bbd3b' visibility='default' filepath='include/net/cfg80211.h' line='2569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='key' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='key_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1480'>
+          <var-decl name='key_idx' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='bg_scan_period' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='ht_capa' type-id='16e7829f' visibility='default' filepath='include/net/cfg80211.h' line='2574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1776'>
+          <var-decl name='ht_capa_mask' type-id='16e7829f' visibility='default' filepath='include/net/cfg80211.h' line='2575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='vht_capa' type-id='2eec6999' visibility='default' filepath='include/net/cfg80211.h' line='2576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='vht_capa_mask' type-id='2eec6999' visibility='default' filepath='include/net/cfg80211.h' line='2577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='pbss' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='bss_select' type-id='d24a933d' visibility='default' filepath='include/net/cfg80211.h' line='2579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='prev_bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='fils_erp_username' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='fils_erp_username_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='fils_erp_realm' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='fils_erp_realm_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='fils_erp_next_seq_num' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='fils_erp_rrk' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='fils_erp_rrk_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='want_1x' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='edmg' type-id='d87e6929' visibility='default' filepath='include/net/cfg80211.h' line='2589' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_pmsr_ftm_request_peer' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3229' column='1' id='b60e74e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='preamble' type-id='62746bd7' visibility='default' filepath='include/net/cfg80211.h' line='3230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='burst_period' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='3231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='requested' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='asap' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='request_lci' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='request_civicloc' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='num_bursts_exp' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='burst_duration' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='ftms_per_burst' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='ftmr_retries' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3239' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_txq_stats' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1399' column='1' id='14305947'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='backlog_bytes' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='backlog_packets' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flows' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='drops' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ecn_marks' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='overlimit' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='overmemory' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='collisions' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tx_bytes' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_packets' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='max_flows' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1411' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='288' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/cfg80211.h' line='967' column='1' id='5b11c736'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='legacy' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ht_mcs' type-id='097504df' visibility='default' filepath='include/net/cfg80211.h' line='969' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='vht_mcs' type-id='c24d1a13' visibility='default' filepath='include/net/cfg80211.h' line='970' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='gi' type-id='4170ee5e' visibility='default' filepath='include/net/cfg80211.h' line='971' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='2' type-id='f9b06939' size-in-bits='416' id='b726c152'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <pointer-type-def type-id='5f145050' size-in-bits='64' id='bda81d86'/>
+      <pointer-type-def type-id='5e2a189d' size-in-bits='64' id='f344e815'/>
+      <enum-decl name='nl80211_auth_type' filepath='include/uapi/linux/nl80211.h' line='4427' column='1' id='f7dadf06'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_AUTHTYPE_OPEN_SYSTEM' value='0'/>
+        <enumerator name='NL80211_AUTHTYPE_SHARED_KEY' value='1'/>
+        <enumerator name='NL80211_AUTHTYPE_FT' value='2'/>
+        <enumerator name='NL80211_AUTHTYPE_NETWORK_EAP' value='3'/>
+        <enumerator name='NL80211_AUTHTYPE_SAE' value='4'/>
+        <enumerator name='NL80211_AUTHTYPE_FILS_SK' value='5'/>
+        <enumerator name='NL80211_AUTHTYPE_FILS_SK_PFS' value='6'/>
+        <enumerator name='NL80211_AUTHTYPE_FILS_PK' value='7'/>
+        <enumerator name='__NL80211_AUTHTYPE_NUM' value='8'/>
+        <enumerator name='NL80211_AUTHTYPE_MAX' value='7'/>
+        <enumerator name='NL80211_AUTHTYPE_AUTOMATIC' value='8'/>
+      </enum-decl>
+      <enum-decl name='nl80211_mfp' filepath='include/uapi/linux/nl80211.h' line='4464' column='1' id='dfb2486c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_MFP_NO' value='0'/>
+        <enumerator name='NL80211_MFP_REQUIRED' value='1'/>
+        <enumerator name='NL80211_MFP_OPTIONAL' value='2'/>
+      </enum-decl>
+      <enum-decl name='nl80211_preamble' filepath='include/uapi/linux/nl80211.h' line='6163' column='1' id='62746bd7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_PREAMBLE_LEGACY' value='0'/>
+        <enumerator name='NL80211_PREAMBLE_HT' value='1'/>
+        <enumerator name='NL80211_PREAMBLE_VHT' value='2'/>
+        <enumerator name='NL80211_PREAMBLE_DMG' value='3'/>
+      </enum-decl>
+      <enum-decl name='nl80211_txrate_gi' filepath='include/uapi/linux/nl80211.h' line='4573' column='1' id='4170ee5e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_TXRATE_DEFAULT_GI' value='0'/>
+        <enumerator name='NL80211_TXRATE_FORCE_SGI' value='1'/>
+        <enumerator name='NL80211_TXRATE_FORCE_LGI' value='2'/>
+      </enum-decl>
+      <class-decl name='cfg80211_bss_selection' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2486' column='1' id='d24a933d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='behaviour' type-id='10fd9108' visibility='default' filepath='include/net/cfg80211.h' line='2487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='param' type-id='0532d6f6' visibility='default' filepath='include/net/cfg80211.h' line='2491' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_crypto_settings' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='879' column='1' id='f81bbd3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wpa_versions' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='880' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cipher_group' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_ciphers_pairwise' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ciphers_pairwise' type-id='586ea944' visibility='default' filepath='include/net/cfg80211.h' line='883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='n_akm_suites' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='akm_suites' type-id='1872161b' visibility='default' filepath='include/net/cfg80211.h' line='885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='control_port' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='control_port_ethertype' type-id='84a5c3d4' visibility='default' filepath='include/net/cfg80211.h' line='887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='control_port_no_encrypt' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='control_port_over_nl80211' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='wep_keys' type-id='706d79ff' visibility='default' filepath='include/net/cfg80211.h' line='890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wep_tx_key' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='psk' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='892' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sae_pwd' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sae_pwd_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='894' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key_params' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='595' column='1' id='45947737'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seq' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='key_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='seq_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cipher' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='mode' type-id='30430d28' visibility='default' filepath='include/net/cfg80211.h' line='601' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='7eedb398' const='yes' id='5e2a189d'/>
+      <enum-decl name='nl80211_bss_select_attr' filepath='include/uapi/linux/nl80211.h' line='5895' column='1' id='10fd9108'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='__NL80211_BSS_SELECT_ATTR_INVALID' value='0'/>
+        <enumerator name='NL80211_BSS_SELECT_ATTR_RSSI' value='1'/>
+        <enumerator name='NL80211_BSS_SELECT_ATTR_BAND_PREF' value='2'/>
+        <enumerator name='NL80211_BSS_SELECT_ATTR_RSSI_ADJUST' value='3'/>
+        <enumerator name='__NL80211_BSS_SELECT_ATTR_AFTER_LAST' value='4'/>
+        <enumerator name='NL80211_BSS_SELECT_ATTR_MAX' value='3'/>
+      </enum-decl>
+      <enum-decl name='nl80211_key_mode' filepath='include/uapi/linux/nl80211.h' line='4262' column='1' id='30430d28'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_KEY_RX_TX' value='0'/>
+        <enumerator name='NL80211_KEY_NO_TX' value='1'/>
+        <enumerator name='NL80211_KEY_SET_TX' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='45947737' size-in-bits='64' id='706d79ff'/>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/cfg80211.h' line='2488' column='1' id='0532d6f6'>
+        <data-member access='private'>
+          <var-decl name='band_pref' type-id='3eaa0294' visibility='default' filepath='include/net/cfg80211.h' line='2489' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='adjust' type-id='5da08e25' visibility='default' filepath='include/net/cfg80211.h' line='2490' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='cfg80211_bss_ies' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2188' column='1' id='7eedb398'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tsf' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/cfg80211.h' line='2190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='from_beacon' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='232'>
+          <var-decl name='data' type-id='29c3368c' visibility='default' filepath='include/net/cfg80211.h' line='2193' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/mac80211/mlme.c' language='LANG_C89'>
+      <function-decl name='ieee80211_ap_probereq_get' mangled-name='ieee80211_ap_probereq_get' filepath='net/mac80211/mlme.c' line='2613' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_ap_probereq_get'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/mlme.c' line='2613' column='1'/>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/mlme.c' line='2614' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='ieee80211_chswitch_done' mangled-name='ieee80211_chswitch_done' filepath='net/mac80211/mlme.c' line='1234' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_chswitch_done'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/mlme.c' line='1234' column='1'/>
+        <parameter type-id='b50a4934' name='success' filepath='net/mac80211/mlme.c' line='1234' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_beacon_loss' mangled-name='ieee80211_beacon_loss' filepath='net/mac80211/mlme.c' line='2740' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_beacon_loss'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/mlme.c' line='2740' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_connection_loss' mangled-name='ieee80211_connection_loss' filepath='net/mac80211/mlme.c' line='2752' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_connection_loss'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/mlme.c' line='2752' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_cqm_rssi_notify' mangled-name='ieee80211_cqm_rssi_notify' filepath='net/mac80211/mlme.c' line='5672' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_cqm_rssi_notify'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/mlme.c' line='5672' column='1'/>
+        <parameter type-id='b8189423' name='rssi_event' filepath='net/mac80211/mlme.c' line='5673' column='1'/>
+        <parameter type-id='a7832498' name='rssi_level' filepath='net/mac80211/mlme.c' line='5674' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/mac80211/mlme.c' line='5675' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_cqm_beacon_loss_notify' mangled-name='ieee80211_cqm_beacon_loss_notify' filepath='net/mac80211/mlme.c' line='5685' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_cqm_beacon_loss_notify'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/mlme.c' line='5685' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/mac80211/mlme.c' line='5685' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <enum-decl name='nl80211_cqm_rssi_threshold_event' filepath='include/uapi/linux/nl80211.h' line='4665' column='1' id='b8189423'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW' value='0'/>
+        <enumerator name='NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH' value='1'/>
+        <enumerator name='NL80211_CQM_RSSI_BEACON_LOSS_EVENT' value='2'/>
+      </enum-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/mac80211/offchannel.c' language='LANG_C89'>
+      <function-decl name='ieee80211_ready_on_channel' mangled-name='ieee80211_ready_on_channel' filepath='net/mac80211/offchannel.c' line='298' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_ready_on_channel'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/offchannel.c' line='298' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_remain_on_channel_expired' mangled-name='ieee80211_remain_on_channel_expired' filepath='net/mac80211/offchannel.c' line='497' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_remain_on_channel_expired'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/offchannel.c' line='497' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/mac80211/rate.c' language='LANG_C89'>
+      <pointer-type-def type-id='c94cc2cb' size-in-bits='64' id='0f82eceb'/>
+      <function-decl name='ieee80211_get_tx_rates' mangled-name='ieee80211_get_tx_rates' filepath='net/mac80211/rate.c' line='840' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_get_tx_rates'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/rate.c' line='840' column='1'/>
+        <parameter type-id='f27bb1b0' name='sta' filepath='net/mac80211/rate.c' line='841' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/mac80211/rate.c' line='842' column='1'/>
+        <parameter type-id='0f82eceb' name='dest' filepath='net/mac80211/rate.c' line='843' column='1'/>
+        <parameter type-id='95e97e5e' name='max_rates' filepath='net/mac80211/rate.c' line='844' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <class-decl name='ieee80211_tx_rate' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='930' column='1' id='c94cc2cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idx' type-id='fdbf7a0f' visibility='default' filepath='include/net/mac80211.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='count' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18446744073709551608'>
+          <var-decl name='flags' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='933' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/mac80211/rx.c' language='LANG_C89'>
+      <function-decl name='ieee80211_sta_ps_transition' mangled-name='ieee80211_sta_ps_transition' filepath='net/mac80211/rx.c' line='1626' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_sta_ps_transition'>
+        <parameter type-id='f27bb1b0' name='pubsta' filepath='net/mac80211/rx.c' line='1626' column='1'/>
+        <parameter type-id='b50a4934' name='start' filepath='net/mac80211/rx.c' line='1626' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ieee80211_rx_irqsafe' mangled-name='ieee80211_rx_irqsafe' filepath='net/mac80211/rx.c' line='4675' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_rx_irqsafe'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/rx.c' line='4675' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/mac80211/rx.c' line='4675' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/mac80211/scan.c' language='LANG_C89'>
+      <function-decl name='ieee80211_scan_completed' mangled-name='ieee80211_scan_completed' filepath='net/mac80211/scan.c' line='465' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_scan_completed'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/scan.c' line='465' column='1'/>
+        <parameter type-id='40cd17b4' name='info' filepath='net/mac80211/scan.c' line='466' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_queue_delayed_work' mangled-name='ieee80211_queue_delayed_work' filepath='include/net/mac80211.h' line='5358' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_queue_delayed_work'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='1a7ee447'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_sched_scan_results' mangled-name='ieee80211_sched_scan_results' filepath='net/mac80211/scan.c' line='1341' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_sched_scan_results'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/scan.c' line='1341' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_sched_scan_stopped' mangled-name='ieee80211_sched_scan_stopped' filepath='net/mac80211/scan.c' line='1379' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_sched_scan_stopped'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/scan.c' line='1379' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='b1493ece' size-in-bits='64' id='40cd17b4'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/mac80211/sta_info.c' language='LANG_C89'>
+      <function-decl name='ieee80211_find_sta_by_ifaddr' mangled-name='ieee80211_find_sta_by_ifaddr' filepath='net/mac80211/sta_info.c' line='1238' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_find_sta_by_ifaddr'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/sta_info.c' line='1238' column='1'/>
+        <parameter type-id='bbaf3419' name='addr' filepath='net/mac80211/sta_info.c' line='1239' column='1'/>
+        <parameter type-id='bbaf3419' name='localaddr' filepath='net/mac80211/sta_info.c' line='1240' column='1'/>
+        <return type-id='f27bb1b0'/>
+      </function-decl>
+      <function-decl name='ieee80211_find_sta' mangled-name='ieee80211_find_sta' filepath='net/mac80211/sta_info.c' line='1263' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_find_sta'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/sta_info.c' line='1263' column='1'/>
+        <parameter type-id='bbaf3419' name='addr' filepath='net/mac80211/sta_info.c' line='1264' column='1'/>
+        <return type-id='f27bb1b0'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/mac80211/status.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='c94cc2cb' size-in-bits='96' id='bd01d8eb'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='192' id='20b03b60'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='320' id='e4a26562'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <class-decl name='ieee80211_tx_info' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1003' column='1' id='221c4941'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='band' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='hw_queue' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='ack_frame_id' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='b384c13d' visibility='default' filepath='include/net/mac80211.h' line='1012' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__8' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1012' column='1' id='b384c13d'>
+        <data-member access='private'>
+          <var-decl name='control' type-id='e261a812' visibility='default' filepath='include/net/mac80211.h' line='1034' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ack' type-id='992e24f3' visibility='default' filepath='include/net/mac80211.h' line='1037' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='status' type-id='908cb35a' visibility='default' filepath='include/net/mac80211.h' line='1047' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='' type-id='cc5c15dd' visibility='default' filepath='include/net/mac80211.h' line='1048' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='driver_data' type-id='e4a26562' visibility='default' filepath='include/net/mac80211.h' line='1056' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1013' column='1' id='e261a812'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='780d16e3' visibility='default' filepath='include/net/mac80211.h' line='1014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vif' type-id='3a1577c5' visibility='default' filepath='include/net/mac80211.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hw_key' type-id='43c1ffec' visibility='default' filepath='include/net/mac80211.h' line='1031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='enqueue_time' type-id='989b7c52' visibility='default' filepath='include/net/mac80211.h' line='1033' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__9' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1014' column='1' id='780d16e3'>
+        <data-member access='private'>
+          <var-decl name='' type-id='d4e4741c' visibility='default' filepath='include/net/mac80211.h' line='1016' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='jiffies' type-id='7359adad' visibility='default' filepath='include/net/mac80211.h' line='1027' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='112' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1016' column='1' id='d4e4741c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rates' type-id='bd01d8eb' visibility='default' filepath='include/net/mac80211.h' line='1017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='rts_cts_rate_idx' type-id='fdbf7a0f' visibility='default' filepath='include/net/mac80211.h' line='1019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='use_rts' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='use_cts_prot' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='short_preamble' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1022' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='skip_table' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1023' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_tx_rate' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='930' column='1' id='c94cc2cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idx' type-id='fdbf7a0f' visibility='default' filepath='include/net/mac80211.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='count' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18446744073709551608'>
+          <var-decl name='flags' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='933' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='codel_time_t' type-id='19c2251e' filepath='include/net/codel.h' line='62' column='1' id='989b7c52'/>
+      <class-decl name='__anonymous_struct__2' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1035' column='1' id='992e24f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cookie' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='1036' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1038' column='1' id='908cb35a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rates' type-id='bd01d8eb' visibility='default' filepath='include/net/mac80211.h' line='1039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ack_signal' type-id='a7832498' visibility='default' filepath='include/net/mac80211.h' line='1040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ampdu_ack_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='ampdu_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1042' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='antenna' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tx_time' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='is_valid_ack_signal' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='status_driver_data' type-id='24ae0315' visibility='default' filepath='include/net/mac80211.h' line='1046' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__4' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1048' column='1' id='cc5c15dd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver_rates' type-id='bd01d8eb' visibility='default' filepath='include/net/mac80211.h' line='1049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pad' type-id='931565be' visibility='default' filepath='include/net/mac80211.h' line='1051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rate_driver_data' type-id='20b03b60' visibility='default' filepath='include/net/mac80211.h' line='1053' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='221c4941' size-in-bits='64' id='16734b39'/>
+      <function-decl name='ieee80211_tx_status_irqsafe' mangled-name='ieee80211_tx_status_irqsafe' filepath='net/mac80211/status.c' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_tx_status_irqsafe'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/status.c' line='21' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/mac80211/status.c' line='22' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_free_txskb' mangled-name='ieee80211_free_txskb' filepath='net/mac80211/status.c' line='1188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_free_txskb'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/status.c' line='1188' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/mac80211/status.c' line='1188' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_queue_work' mangled-name='ieee80211_queue_work' filepath='include/net/mac80211.h' line='5346' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_queue_work'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='83c1bde6'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_sta_register_airtime' mangled-name='ieee80211_sta_register_airtime' filepath='include/net/mac80211.h' line='5556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_sta_register_airtime'>
+        <parameter type-id='f27bb1b0'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_tx_rate_update' mangled-name='ieee80211_tx_rate_update' filepath='net/mac80211/status.c' line='1161' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_tx_rate_update'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/status.c' line='1161' column='1'/>
+        <parameter type-id='f27bb1b0' name='pubsta' filepath='net/mac80211/status.c' line='1162' column='1'/>
+        <parameter type-id='16734b39' name='info' filepath='net/mac80211/status.c' line='1163' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_report_low_ack' mangled-name='ieee80211_report_low_ack' filepath='net/mac80211/status.c' line='1180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_report_low_ack'>
+        <parameter type-id='f27bb1b0' name='pubsta' filepath='net/mac80211/status.c' line='1180' column='1'/>
+        <parameter type-id='19c2251e' name='num_packets' filepath='net/mac80211/status.c' line='1180' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/mac80211/tdls.c' language='LANG_C89'>
+      <function-decl name='ieee80211_tdls_oper_request' mangled-name='ieee80211_tdls_oper_request' filepath='net/mac80211/tdls.c' line='1442' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_tdls_oper_request'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tdls.c' line='1442' column='1'/>
+        <parameter type-id='bbaf3419' name='peer' filepath='net/mac80211/tdls.c' line='1442' column='1'/>
+        <parameter type-id='ee1b00fc' name='oper' filepath='net/mac80211/tdls.c' line='1443' column='1'/>
+        <parameter type-id='1dc6a898' name='reason_code' filepath='net/mac80211/tdls.c' line='1444' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/mac80211/tdls.c' line='1444' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <enum-decl name='nl80211_tdls_operation' filepath='include/uapi/linux/nl80211.h' line='5243' column='1' id='ee1b00fc'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_TDLS_DISCOVERY_REQ' value='0'/>
+        <enumerator name='NL80211_TDLS_SETUP' value='1'/>
+        <enumerator name='NL80211_TDLS_TEARDOWN' value='2'/>
+        <enumerator name='NL80211_TDLS_ENABLE_LINK' value='3'/>
+        <enumerator name='NL80211_TDLS_DISABLE_LINK' value='4'/>
+      </enum-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/mac80211/tx.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='1dc6a898' size-in-bits='32' id='c666b845'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='ieee80211_mutable_offsets' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='4659' column='1' id='7db7e025'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tim_offset' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='4660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='tim_length' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='4661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='csa_counter_offs' type-id='c666b845' visibility='default' filepath='include/net/mac80211.h' line='4663' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7db7e025' size-in-bits='64' id='080a0935'/>
+      <function-decl name='ieee80211_tx_dequeue' mangled-name='ieee80211_tx_dequeue' filepath='net/mac80211/tx.c' line='3562' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_tx_dequeue'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='3562' column='1'/>
+        <parameter type-id='cde83d0f' name='txq' filepath='net/mac80211/tx.c' line='3563' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='ieee80211_next_txq' mangled-name='ieee80211_next_txq' filepath='net/mac80211/tx.c' line='3715' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_next_txq'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='3715' column='1'/>
+        <parameter type-id='f9b06939' name='ac' filepath='net/mac80211/tx.c' line='3715' column='1'/>
+        <return type-id='cde83d0f'/>
+      </function-decl>
+      <function-decl name='__ieee80211_schedule_txq' mangled-name='__ieee80211_schedule_txq' filepath='net/mac80211/tx.c' line='3757' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ieee80211_schedule_txq'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='3757' column='1'/>
+        <parameter type-id='cde83d0f' name='txq' filepath='net/mac80211/tx.c' line='3758' column='1'/>
+        <parameter type-id='b50a4934' name='force' filepath='net/mac80211/tx.c' line='3759' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_txq_may_transmit' mangled-name='ieee80211_txq_may_transmit' filepath='net/mac80211/tx.c' line='3790' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_txq_may_transmit'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='3790' column='1'/>
+        <parameter type-id='cde83d0f' name='txq' filepath='net/mac80211/tx.c' line='3791' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='ieee80211_txq_schedule_start' mangled-name='ieee80211_txq_schedule_start' filepath='net/mac80211/tx.c' line='3840' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_txq_schedule_start'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='3840' column='1'/>
+        <parameter type-id='f9b06939' name='ac' filepath='net/mac80211/tx.c' line='3840' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_csa_update_counter' mangled-name='ieee80211_csa_update_counter' filepath='net/mac80211/tx.c' line='4368' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_csa_update_counter'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tx.c' line='4368' column='1'/>
+        <return type-id='f9b06939'/>
+      </function-decl>
+      <function-decl name='ieee80211_csa_is_complete' mangled-name='ieee80211_csa_is_complete' filepath='net/mac80211/tx.c' line='4419' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_csa_is_complete'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tx.c' line='4419' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='ieee80211_beacon_get_template' mangled-name='ieee80211_beacon_get_template' filepath='net/mac80211/tx.c' line='4659' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_beacon_get_template'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='4659' column='1'/>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tx.c' line='4660' column='1'/>
+        <parameter type-id='080a0935' name='offs' filepath='net/mac80211/tx.c' line='4661' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='ieee80211_beacon_get_tim' mangled-name='ieee80211_beacon_get_tim' filepath='net/mac80211/tx.c' line='4667' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_beacon_get_tim'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='4667' column='1'/>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tx.c' line='4668' column='1'/>
+        <parameter type-id='26d4d46f' name='tim_offset' filepath='net/mac80211/tx.c' line='4669' column='1'/>
+        <parameter type-id='26d4d46f' name='tim_length' filepath='net/mac80211/tx.c' line='4669' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='ieee80211_proberesp_get' mangled-name='ieee80211_proberesp_get' filepath='net/mac80211/tx.c' line='4707' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_proberesp_get'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='4707' column='1'/>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tx.c' line='4708' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='ieee80211_pspoll_get' mangled-name='ieee80211_pspoll_get' filepath='net/mac80211/tx.c' line='4741' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_pspoll_get'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='4741' column='1'/>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tx.c' line='4742' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='ieee80211_nullfunc_get' mangled-name='ieee80211_nullfunc_get' filepath='net/mac80211/tx.c' line='4778' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_nullfunc_get'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='4778' column='1'/>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tx.c' line='4779' column='1'/>
+        <parameter type-id='b50a4934' name='qos_ok' filepath='net/mac80211/tx.c' line='4780' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='ieee80211_probereq_get' mangled-name='ieee80211_probereq_get' filepath='net/mac80211/tx.c' line='4837' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_probereq_get'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='4837' column='1'/>
+        <parameter type-id='bbaf3419' name='src_addr' filepath='net/mac80211/tx.c' line='4838' column='1'/>
+        <parameter type-id='bbaf3419' name='ssid' filepath='net/mac80211/tx.c' line='4839' column='1'/>
+        <parameter type-id='b59d7dce' name='ssid_len' filepath='net/mac80211/tx.c' line='4839' column='1'/>
+        <parameter type-id='b59d7dce' name='tailroom' filepath='net/mac80211/tx.c' line='4840' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/mac80211/util.c' language='LANG_C89'>
+      <pointer-type-def type-id='10bb70af' size-in-bits='64' id='9d7b1183'/>
+      <pointer-type-def type-id='aa02e5c5' size-in-bits='64' id='4e5f84b1'/>
+      <function-decl name='wiphy_to_ieee80211_hw' mangled-name='wiphy_to_ieee80211_hw' filepath='net/mac80211/util.c' line='39' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wiphy_to_ieee80211_hw'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/mac80211/util.c' line='39' column='1'/>
+        <return type-id='1905517d'/>
+      </function-decl>
+      <function-decl name='ieee80211_wake_queue' mangled-name='ieee80211_wake_queue' filepath='net/mac80211/util.c' line='445' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_wake_queue'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/util.c' line='445' column='1'/>
+        <parameter type-id='95e97e5e' name='queue' filepath='net/mac80211/util.c' line='445' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_stop_queue' mangled-name='ieee80211_stop_queue' filepath='net/mac80211/util.c' line='512' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_stop_queue'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/util.c' line='512' column='1'/>
+        <parameter type-id='95e97e5e' name='queue' filepath='net/mac80211/util.c' line='512' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_stop_queues' mangled-name='ieee80211_stop_queues' filepath='net/mac80211/util.c' line='592' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_stop_queues'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/util.c' line='592' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_wake_queues' mangled-name='ieee80211_wake_queues' filepath='net/mac80211/util.c' line='634' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_wake_queues'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/util.c' line='634' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_iterate_interfaces' mangled-name='ieee80211_iterate_interfaces' filepath='net/mac80211/util.c' line='751' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_iterate_interfaces'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/util.c' line='752' column='1'/>
+        <parameter type-id='19c2251e' name='iter_flags' filepath='net/mac80211/util.c' line='752' column='1'/>
+        <parameter type-id='4e5f84b1' name='iterator' filepath='net/mac80211/util.c' line='753' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='net/mac80211/util.c' line='755' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_iterate_active_interfaces_atomic' mangled-name='ieee80211_iterate_active_interfaces_atomic' filepath='net/mac80211/util.c' line='765' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_iterate_active_interfaces_atomic'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/util.c' line='766' column='1'/>
+        <parameter type-id='19c2251e' name='iter_flags' filepath='net/mac80211/util.c' line='766' column='1'/>
+        <parameter type-id='4e5f84b1' name='iterator' filepath='net/mac80211/util.c' line='767' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='net/mac80211/util.c' line='769' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_iterate_stations_atomic' mangled-name='ieee80211_iterate_stations_atomic' filepath='net/mac80211/util.c' line='810' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_iterate_stations_atomic'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/util.c' line='810' column='1'/>
+        <parameter type-id='9d7b1183' name='iterator' filepath='net/mac80211/util.c' line='811' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='net/mac80211/util.c' line='813' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_radar_detected' mangled-name='ieee80211_radar_detected' filepath='net/mac80211/util.c' line='3443' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_radar_detected'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/util.c' line='3443' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_txq_get_depth' mangled-name='ieee80211_txq_get_depth' filepath='net/mac80211/util.c' line='4053' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_txq_get_depth'>
+        <parameter type-id='cde83d0f' name='txq' filepath='net/mac80211/util.c' line='4053' column='1'/>
+        <parameter type-id='1d2c2b85' name='frame_cnt' filepath='net/mac80211/util.c' line='4054' column='1'/>
+        <parameter type-id='1d2c2b85' name='byte_cnt' filepath='net/mac80211/util.c' line='4055' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='10bb70af'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f27bb1b0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aa02e5c5'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='3a1577c5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netfilter/nf_conntrack_core.c' language='LANG_C89'>
+      <function-decl name='nf_ct_invert_tuple' mangled-name='nf_ct_invert_tuple' filepath='net/netfilter/nf_conntrack_core.c' line='410' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nf_ct_invert_tuple'>
+        <parameter type-id='66d2e8f0' name='inverse' filepath='net/netfilter/nf_conntrack_core.c' line='410' column='1'/>
+        <parameter type-id='5a1b3f53' name='orig' filepath='net/netfilter/nf_conntrack_core.c' line='411' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <pointer-type-def type-id='90e5636b' size-in-bits='64' id='5a1b3f53'/>
+      <pointer-type-def type-id='9805d802' size-in-bits='64' id='66d2e8f0'/>
+      <qualified-type-def type-id='9805d802' const='yes' id='90e5636b'/>
+      <class-decl name='nf_conntrack_tuple' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='37' column='1' id='9805d802'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='src' type-id='bd087e00' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='dst' type-id='ac5824ad' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_conntrack_man' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='29' column='1' id='bd087e00'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='u3' type-id='8c17f46b' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='u' type-id='cfd75634' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='l3num' type-id='ea2e3595' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__6' size-in-bits='160' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='41' column='1' id='ac5824ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='u3' type-id='8c17f46b' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='u' type-id='3dee4294' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='protonum' type-id='892641a4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='dir' type-id='892641a4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='u_int16_t' type-id='1dc6a898' filepath='include/linux/types.h' line='100' column='1' id='ea2e3595'/>
+      <union-decl name='nf_conntrack_man_proto' size-in-bits='16' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='20' column='1' id='cfd75634'>
+        <data-member access='private'>
+          <var-decl name='all' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tcp' type-id='6a7a7fe9' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='udp' type-id='6a7a7fe9' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='icmp' type-id='05cd0c57' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dccp' type-id='6a7a7fe9' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sctp' type-id='6a7a7fe9' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='gre' type-id='29e36f6d' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='41' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='nf_inet_addr' size-in-bits='128' visibility='default' filepath='include/uapi/linux/netfilter.h' line='68' column='1' id='8c17f46b'>
+        <data-member access='private'>
+          <var-decl name='all' type-id='3fa29bab' visibility='default' filepath='include/uapi/linux/netfilter.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ip' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/netfilter.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ip6' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/netfilter.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='in' type-id='34f03654' visibility='default' filepath='include/uapi/linux/netfilter.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='in6' type-id='f6ed712a' visibility='default' filepath='include/uapi/linux/netfilter.h' line='73' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='16' is-anonymous='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='43' column='1' id='3dee4294'>
+        <data-member access='private'>
+          <var-decl name='all' type-id='84a5c3d4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tcp' type-id='6a7a7fe9' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='udp' type-id='6a7a7fe9' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='icmp' type-id='40dd2ad6' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dccp' type-id='6a7a7fe9' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sctp' type-id='6a7a7fe9' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='gre' type-id='29e36f6d' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='64' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='30' column='1' id='05cd0c57'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='39' column='1' id='29e36f6d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='24' column='1' id='6a7a7fe9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__9' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='53' column='1' id='40dd2ad6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='892641a4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='code' type-id='892641a4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netfilter/nf_conntrack_netlink.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='702d8a24' size-in-bits='320' id='80542108'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='80b664d7' size-in-bits='896' id='379a2915'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='40' id='8f1320db'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='892641a4' size-in-bits='16' id='a212abfb'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='nf_conntrack_tuple_hash' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='119' column='1' id='80b664d7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hnnode' type-id='5bd248e7' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tuple' type-id='9805d802' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='121' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_conntrack_tuple' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='37' column='1' id='9805d802'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='src' type-id='bd087e00' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='dst' type-id='ac5824ad' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_conntrack_man' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='29' column='1' id='bd087e00'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='u3' type-id='8c17f46b' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='u' type-id='cfd75634' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='l3num' type-id='ea2e3595' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='nf_inet_addr' size-in-bits='128' visibility='default' filepath='include/uapi/linux/netfilter.h' line='68' column='1' id='8c17f46b'>
+        <data-member access='private'>
+          <var-decl name='all' type-id='3fa29bab' visibility='default' filepath='include/uapi/linux/netfilter.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ip' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/netfilter.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ip6' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/netfilter.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='in' type-id='34f03654' visibility='default' filepath='include/uapi/linux/netfilter.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='in6' type-id='f6ed712a' visibility='default' filepath='include/uapi/linux/netfilter.h' line='73' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='in_addr' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/in.h' line='85' column='1' id='34f03654'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='s_addr' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/in.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='nf_conntrack_man_proto' size-in-bits='16' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='20' column='1' id='cfd75634'>
+        <data-member access='private'>
+          <var-decl name='all' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tcp' type-id='6a7a7fe9' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='udp' type-id='6a7a7fe9' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='icmp' type-id='05cd0c57' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dccp' type-id='6a7a7fe9' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sctp' type-id='6a7a7fe9' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='gre' type-id='29e36f6d' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='41' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='24' column='1' id='6a7a7fe9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='30' column='1' id='05cd0c57'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='39' column='1' id='29e36f6d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='u_int16_t' type-id='1dc6a898' filepath='include/linux/types.h' line='100' column='1' id='ea2e3595'/>
+      <class-decl name='__anonymous_struct__6' size-in-bits='160' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='41' column='1' id='ac5824ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='u3' type-id='8c17f46b' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='u' type-id='3dee4294' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='protonum' type-id='892641a4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='dir' type-id='892641a4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='16' is-anonymous='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='43' column='1' id='3dee4294'>
+        <data-member access='private'>
+          <var-decl name='all' type-id='84a5c3d4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tcp' type-id='6a7a7fe9' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='udp' type-id='6a7a7fe9' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='icmp' type-id='40dd2ad6' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='dccp' type-id='6a7a7fe9' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sctp' type-id='6a7a7fe9' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='gre' type-id='29e36f6d' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='64' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__9' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='53' column='1' id='40dd2ad6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='892641a4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='code' type-id='892641a4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_ct_event' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='69' column='1' id='d3056556'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ct' type-id='8c493d8a' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='portid' type-id='19c2251e' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='report' type-id='95e97e5e' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_conn' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='58' column='1' id='cf9b45ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ct_general' type-id='d9fc42c3' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='timeout' type-id='19c2251e' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tuplehash' type-id='379a2915' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='status' type-id='7359adad' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cpu' type-id='1dc6a898' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ct_net' type-id='c9df1e6c' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='nat_bysource' type-id='03a4a074' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='__nfct_init_offset' type-id='cdd897ad' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='master' type-id='8c493d8a' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='mark' type-id='9586cc7b' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='secmark' type-id='9586cc7b' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ext' type-id='3ba63619' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='proto' type-id='1f42e327' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__13' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='90' column='1' id='cdd897ad'/>
+      <typedef-decl name='u_int32_t' type-id='19c2251e' filepath='include/linux/types.h' line='102' column='1' id='9586cc7b'/>
+      <class-decl name='nf_ct_ext' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_extend.h' line='45' column='1' id='f54c6661'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/netfilter/nf_conntrack_extend.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='offset' type-id='8f1320db' visibility='default' filepath='include/net/netfilter/nf_conntrack_extend.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='len' type-id='f9b06939' visibility='default' filepath='include/net/netfilter/nf_conntrack_extend.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='data' type-id='e84913bd' visibility='default' filepath='include/net/netfilter/nf_conntrack_extend.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='nf_conntrack_proto' size-in-bits='512' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='32' column='1' id='1f42e327'>
+        <data-member access='private'>
+          <var-decl name='dccp' type-id='f0e59128' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sctp' type-id='6bb7a9ad' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tcp' type-id='3ffb049e' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='udp' type-id='21861431' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='gre' type-id='0b2cc27e' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tmpl_padto' type-id='f0981eeb' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='39' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='nf_ct_dccp' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/netfilter/nf_conntrack_dccp.h' line='30' column='1' id='f0e59128'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='role' type-id='a212abfb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_dccp.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='state' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_dccp.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='last_pkt' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_dccp.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='last_dir' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_dccp.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='handshake_seq' type-id='f1f7b9a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_dccp.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='u_int64_t' type-id='91ce1af9' filepath='include/linux/types.h' line='113' column='1' id='f1f7b9a4'/>
+      <class-decl name='ip_ct_sctp' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/netfilter/nf_conntrack_sctp.h' line='8' column='1' id='6bb7a9ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='e8eb3890' visibility='default' filepath='include/linux/netfilter/nf_conntrack_sctp.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vtag' type-id='f41331a9' visibility='default' filepath='include/linux/netfilter/nf_conntrack_sctp.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='last_dir' type-id='f9b06939' visibility='default' filepath='include/linux/netfilter/nf_conntrack_sctp.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/linux/netfilter/nf_conntrack_sctp.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='sctp_conntrack' filepath='include/uapi/linux/netfilter/nf_conntrack_sctp.h' line='8' column='1' id='e8eb3890'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SCTP_CONNTRACK_NONE' value='0'/>
+        <enumerator name='SCTP_CONNTRACK_CLOSED' value='1'/>
+        <enumerator name='SCTP_CONNTRACK_COOKIE_WAIT' value='2'/>
+        <enumerator name='SCTP_CONNTRACK_COOKIE_ECHOED' value='3'/>
+        <enumerator name='SCTP_CONNTRACK_ESTABLISHED' value='4'/>
+        <enumerator name='SCTP_CONNTRACK_SHUTDOWN_SENT' value='5'/>
+        <enumerator name='SCTP_CONNTRACK_SHUTDOWN_RECD' value='6'/>
+        <enumerator name='SCTP_CONNTRACK_SHUTDOWN_ACK_SENT' value='7'/>
+        <enumerator name='SCTP_CONNTRACK_HEARTBEAT_SENT' value='8'/>
+        <enumerator name='SCTP_CONNTRACK_HEARTBEAT_ACKED' value='9'/>
+        <enumerator name='SCTP_CONNTRACK_MAX' value='10'/>
+      </enum-decl>
+      <class-decl name='ip_ct_tcp' size-in-bits='480' is-struct='yes' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='17' column='1' id='3ffb049e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seen' type-id='80542108' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='last_dir' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='retrans' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='last_index' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='last_seq' type-id='9586cc7b' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='last_ack' type-id='9586cc7b' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='last_end' type-id='9586cc7b' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='last_win' type-id='ea2e3595' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='last_wscale' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='472'>
+          <var-decl name='last_flags' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip_ct_tcp_state' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='8' column='1' id='702d8a24'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='td_end' type-id='9586cc7b' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='td_maxend' type-id='9586cc7b' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='td_maxwin' type-id='9586cc7b' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='td_maxack' type-id='9586cc7b' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='td_scale' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='flags' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='14' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_ct_udp' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='27' column='1' id='21861431'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stream_ts' type-id='7359adad' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_ct_gre' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/netfilter/nf_conntrack_proto_gre.h' line='8' column='1' id='0b2cc27e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stream_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_proto_gre.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_proto_gre.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_exp_event' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='155' column='1' id='2c98045e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='exp' type-id='b7982cd5' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='portid' type-id='19c2251e' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='report' type-id='95e97e5e' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='158' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_conntrack_expect' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='18' column='1' id='c2dc4615'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lnode' type-id='03a4a074' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hnode' type-id='03a4a074' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tuple' type-id='9805d802' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mask' type-id='97e29523' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='expectfn' type-id='6c8c82c7' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='helper' type-id='a1a282ea' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='master' type-id='8c493d8a' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='timeout' type-id='abe41e67' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='use' type-id='64615833' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='class' type-id='f0981eeb' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='saved_addr' type-id='8c17f46b' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='saved_proto' type-id='cfd75634' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dir' type-id='bbbf8507' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_conntrack_tuple_mask' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='75' column='1' id='97e29523'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='src' type-id='90eb4133' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__14' size-in-bits='160' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='76' column='1' id='90eb4133'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='u3' type-id='8c17f46b' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='u' type-id='cfd75634' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_conntrack_helper' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_helper.h' line='32' column='1' id='c54a70ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hnode' type-id='03a4a074' visibility='default' filepath='include/net/netfilter/nf_conntrack_helper.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/net/netfilter/nf_conntrack_helper.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/netfilter/nf_conntrack_helper.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='me' type-id='2730d015' visibility='default' filepath='include/net/netfilter/nf_conntrack_helper.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='expect_policy' type-id='95862269' visibility='default' filepath='include/net/netfilter/nf_conntrack_helper.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tuple' type-id='9805d802' visibility='default' filepath='include/net/netfilter/nf_conntrack_helper.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='help' type-id='c75f0801' visibility='default' filepath='include/net/netfilter/nf_conntrack_helper.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='destroy' type-id='eb7a991f' visibility='default' filepath='include/net/netfilter/nf_conntrack_helper.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='from_nlattr' type-id='da825f8b' visibility='default' filepath='include/net/netfilter/nf_conntrack_helper.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='to_nlattr' type-id='0aa1c7c3' visibility='default' filepath='include/net/netfilter/nf_conntrack_helper.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='expect_class_max' type-id='f0981eeb' visibility='default' filepath='include/net/netfilter/nf_conntrack_helper.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/net/netfilter/nf_conntrack_helper.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='queue_num' type-id='f0981eeb' visibility='default' filepath='include/net/netfilter/nf_conntrack_helper.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='data_len' type-id='1dc6a898' visibility='default' filepath='include/net/netfilter/nf_conntrack_helper.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1136'>
+          <var-decl name='nat_mod_name' type-id='ac1fa8c0' visibility='default' filepath='include/net/netfilter/nf_conntrack_helper.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_conntrack_expect_policy' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='70' column='1' id='28525fe0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_expected' type-id='f0981eeb' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ip_conntrack_info' filepath='include/uapi/linux/netfilter/nf_conntrack_common.h' line='7' column='1' id='405b934c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IP_CT_ESTABLISHED' value='0'/>
+        <enumerator name='IP_CT_RELATED' value='1'/>
+        <enumerator name='IP_CT_NEW' value='2'/>
+        <enumerator name='IP_CT_IS_REPLY' value='3'/>
+        <enumerator name='IP_CT_ESTABLISHED_REPLY' value='3'/>
+        <enumerator name='IP_CT_RELATED_REPLY' value='4'/>
+        <enumerator name='IP_CT_NUMBER' value='5'/>
+        <enumerator name='IP_CT_UNTRACKED' value='7'/>
+      </enum-decl>
+      <enum-decl name='ip_conntrack_dir' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='11' column='1' id='bbbf8507'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IP_CT_DIR_ORIGINAL' value='0'/>
+        <enumerator name='IP_CT_DIR_REPLY' value='1'/>
+        <enumerator name='IP_CT_DIR_MAX' value='2'/>
+      </enum-decl>
+      <class-decl name='nf_conntrack_zone' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/netfilter/nf_conntrack_zones_common.h' line='16' column='1' id='bf11b8f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='1dc6a898' visibility='default' filepath='include/linux/netfilter/nf_conntrack_zones_common.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/linux/netfilter/nf_conntrack_zones_common.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='dir' type-id='f9b06939' visibility='default' filepath='include/linux/netfilter/nf_conntrack_zones_common.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_conntrack_l4proto' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='20' column='1' id='0af737ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='l4proto' type-id='892641a4' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='allow_clash' type-id='b50a4934' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='nlattr_size' type-id='1dc6a898' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='can_early_drop' type-id='72720131' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='to_nlattr' type-id='e1690fff' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='from_nlattr' type-id='871d04db' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tuple_to_nlattr' type-id='97a14109' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nlattr_tuple_size' type-id='0838a534' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nlattr_to_tuple' type-id='71cd3841' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nla_policy' type-id='109cdb66' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ctnl_timeout' type-id='96c35bb4' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='print_conntrack' type-id='cfb1203d' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__15' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='48' column='1' id='96c35bb4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nlattr_to_obj' type-id='3de28d43' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='obj_to_nlattr' type-id='a6ebc0f9' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='obj_size' type-id='1dc6a898' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='nlattr_max' type-id='1dc6a898' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nla_policy' type-id='109cdb66' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='cf9b45ac' const='yes' id='49b990e7'/>
+      <pointer-type-def type-id='49b990e7' size-in-bits='64' id='dc1ef2b7'/>
+      <qualified-type-def type-id='28525fe0' const='yes' id='de56b9b9'/>
+      <pointer-type-def type-id='de56b9b9' size-in-bits='64' id='95862269'/>
+      <qualified-type-def type-id='0af737ca' const='yes' id='3b79f40f'/>
+      <pointer-type-def type-id='3b79f40f' size-in-bits='64' id='c5fb563f'/>
+      <qualified-type-def type-id='9805d802' const='yes' id='90e5636b'/>
+      <pointer-type-def type-id='90e5636b' size-in-bits='64' id='5a1b3f53'/>
+      <qualified-type-def type-id='bf11b8f2' const='yes' id='8c09cc61'/>
+      <pointer-type-def type-id='8c09cc61' size-in-bits='64' id='be6c9a11'/>
+      <pointer-type-def type-id='21872e57' size-in-bits='64' id='3de28d43'/>
+      <pointer-type-def type-id='c4f5a87f' size-in-bits='64' id='871d04db'/>
+      <pointer-type-def type-id='c7c5fb95' size-in-bits='64' id='71cd3841'/>
+      <pointer-type-def type-id='83fbdc47' size-in-bits='64' id='da825f8b'/>
+      <pointer-type-def type-id='1a8ed7df' size-in-bits='64' id='0aa1c7c3'/>
+      <pointer-type-def type-id='14a454b5' size-in-bits='64' id='97a14109'/>
+      <pointer-type-def type-id='ca492abb' size-in-bits='64' id='e1690fff'/>
+      <pointer-type-def type-id='00017875' size-in-bits='64' id='c75f0801'/>
+      <pointer-type-def type-id='75489b85' size-in-bits='64' id='a6ebc0f9'/>
+      <pointer-type-def type-id='ad974870' size-in-bits='64' id='117abbea'/>
+      <pointer-type-def type-id='27ca88ce' size-in-bits='64' id='c8fa3070'/>
+      <pointer-type-def type-id='cf9b45ac' size-in-bits='64' id='8c493d8a'/>
+      <pointer-type-def type-id='c2dc4615' size-in-bits='64' id='b7982cd5'/>
+      <pointer-type-def type-id='c54a70ec' size-in-bits='64' id='a1a282ea'/>
+      <pointer-type-def type-id='9805d802' size-in-bits='64' id='66d2e8f0'/>
+      <pointer-type-def type-id='80b664d7' size-in-bits='64' id='60eba7df'/>
+      <pointer-type-def type-id='d3056556' size-in-bits='64' id='bccf9b1c'/>
+      <pointer-type-def type-id='f54c6661' size-in-bits='64' id='3ba63619'/>
+      <pointer-type-def type-id='2c98045e' size-in-bits='64' id='16990944'/>
+      <pointer-type-def type-id='55274865' size-in-bits='64' id='72720131'/>
+      <pointer-type-def type-id='8fc71db3' size-in-bits='64' id='eb7a991f'/>
+      <pointer-type-def type-id='75c2ad3b' size-in-bits='64' id='6c8c82c7'/>
+      <pointer-type-def type-id='d5408851' size-in-bits='64' id='cfb1203d'/>
+      <function-decl name='nf_conntrack_find_get' mangled-name='nf_conntrack_find_get' filepath='include/net/netfilter/nf_conntrack_core.h' line='49' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nf_conntrack_find_get'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='be6c9a11'/>
+        <parameter type-id='5a1b3f53'/>
+        <return type-id='60eba7df'/>
+      </function-decl>
+      <function-decl name='netlink_unicast' mangled-name='netlink_unicast' filepath='include/linux/netlink.h' line='131' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netlink_unicast'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='nf_ct_l4proto_find' mangled-name='nf_ct_l4proto_find' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='149' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nf_ct_l4proto_find'>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='c5fb563f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='21872e57'>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c4f5a87f'>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='8c493d8a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c7c5fb95'>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='66d2e8f0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='83fbdc47'>
+        <parameter type-id='6fcaf91e'/>
+        <parameter type-id='8c493d8a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1a8ed7df'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='dc1ef2b7'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='14a454b5'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='5a1b3f53'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ca492abb'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='6fcaf91e'/>
+        <parameter type-id='8c493d8a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='00017875'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='8c493d8a'/>
+        <parameter type-id='405b934c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='75489b85'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ad974870'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='bccf9b1c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='27ca88ce'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='16990944'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='55274865'>
+        <parameter type-id='dc1ef2b7'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8fc71db3'>
+        <parameter type-id='8c493d8a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='75c2ad3b'>
+        <parameter type-id='8c493d8a'/>
+        <parameter type-id='b7982cd5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d5408851'>
+        <parameter type-id='f8dc9df0'/>
+        <parameter type-id='8c493d8a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netfilter/nf_nat_masquerade.c' language='LANG_C89'>
+      <function-decl name='inet_select_addr' mangled-name='inet_select_addr' filepath='include/linux/inetdevice.h' line='183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inet_select_addr'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='ipv6_dev_get_saddr' mangled-name='ipv6_dev_get_saddr' filepath='include/net/addrconf.h' line='103' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipv6_dev_get_saddr'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='fea9c20b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='ed512028'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netfilter/nfnetlink_log.c' language='LANG_C89'>
+      <function-decl name='add_timer' mangled-name='add_timer' filepath='include/linux/timer.h' line='186' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='add_timer'>
+        <parameter type-id='9248e67f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netfilter/nfnetlink_queue.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='9b45d938' size-in-bits='256' id='639bec1b'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='deb3203d' size-in-bits='infinite' id='c094d415'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7a1bc3c2' size-in-bits='infinite' id='84607bca'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f59a8358' size-in-bits='infinite' id='720e3ec4'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7799da43' size-in-bits='256' id='5b02a6fc'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <union-decl name='tcp_cc_info' visibility='default' is-declaration-only='yes' id='83c3a083'/>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='160' id='4d5a4f46'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <class-decl name='pernet_operations' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/net_namespace.h' line='350' column='1' id='68f5a646'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/net_namespace.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='e83d6bbe' visibility='default' filepath='include/net/net_namespace.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pre_exit' type-id='9b92b29b' visibility='default' filepath='include/net/net_namespace.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='exit' type-id='9b92b29b' visibility='default' filepath='include/net/net_namespace.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='exit_batch' type-id='29f83363' visibility='default' filepath='include/net/net_namespace.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='id' type-id='807869d3' visibility='default' filepath='include/net/net_namespace.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/net/net_namespace.h' line='379' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_hook_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/netfilter.h' line='90' column='1' id='7a1bc3c2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hook' type-id='c8f8b049' visibility='default' filepath='include/linux/netfilter.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='nf_hookfn' type-id='272e7e29' filepath='include/linux/netfilter.h' line='76' column='1' id='0331c4d6'/>
+      <class-decl name='nf_hook_state' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/netfilter.h' line='66' column='1' id='89d4ce3f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hook' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pf' type-id='892641a4' visibility='default' filepath='include/linux/netfilter.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='in' type-id='68a2d05c' visibility='default' filepath='include/linux/netfilter.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='out' type-id='68a2d05c' visibility='default' filepath='include/linux/netfilter.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sk' type-id='f772df6e' visibility='default' filepath='include/linux/netfilter.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='net' type-id='a2bff677' visibility='default' filepath='include/linux/netfilter.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='okfn' type-id='0023218e' visibility='default' filepath='include/linux/netfilter.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='u_int8_t' type-id='f9b06939' filepath='include/linux/types.h' line='98' column='1' id='892641a4'/>
+      <class-decl name='xt_table' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='223' column='1' id='469df90f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='valid_hooks' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private' type-id='b6316a7f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='me' type-id='2730d015' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='af' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='priority' type-id='95e97e5e' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='table_init' type-id='e83d6bbe' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='639bec1b' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='242' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xt_table_info' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='248' column='1' id='68a72cd7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='number' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='initial_entries' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hook_entry' type-id='4d5a4f46' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='underflow' type-id='4d5a4f46' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='stacksize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='jumpstack' type-id='30e664af' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='entries' type-id='5e6516ee' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='267' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcp_congestion_ops' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/net/tcp.h' line='1038' column='1' id='54718f0a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/tcp.h' line='1039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='key' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='init' type-id='841969d0' visibility='default' filepath='include/net/tcp.h' line='1044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='841969d0' visibility='default' filepath='include/net/tcp.h' line='1046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ssthresh' type-id='8af06487' visibility='default' filepath='include/net/tcp.h' line='1049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cong_avoid' type-id='ece3af1e' visibility='default' filepath='include/net/tcp.h' line='1051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_state' type-id='f5feb7a4' visibility='default' filepath='include/net/tcp.h' line='1053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cwnd_event' type-id='bfacbc7a' visibility='default' filepath='include/net/tcp.h' line='1055' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='in_ack_event' type-id='815f64bf' visibility='default' filepath='include/net/tcp.h' line='1057' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='undo_cwnd' type-id='8af06487' visibility='default' filepath='include/net/tcp.h' line='1059' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='pkts_acked' type-id='bffb5883' visibility='default' filepath='include/net/tcp.h' line='1061' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='min_tso_segs' type-id='8af06487' visibility='default' filepath='include/net/tcp.h' line='1063' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='sndbuf_expand' type-id='8af06487' visibility='default' filepath='include/net/tcp.h' line='1065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='cong_control' type-id='636d3a20' visibility='default' filepath='include/net/tcp.h' line='1069' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='get_info' type-id='14ca5c08' visibility='default' filepath='include/net/tcp.h' line='1071' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/net/tcp.h' line='1074' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/tcp.h' line='1075' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='tcp_ca_event' filepath='include/net/tcp.h' line='976' column='1' id='5f51e977'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='CA_EVENT_TX_START' value='0'/>
+        <enumerator name='CA_EVENT_CWND_RESTART' value='1'/>
+        <enumerator name='CA_EVENT_COMPLETE_CWR' value='2'/>
+        <enumerator name='CA_EVENT_LOSS' value='3'/>
+        <enumerator name='CA_EVENT_ECN_NO_CE' value='4'/>
+        <enumerator name='CA_EVENT_ECN_IS_CE' value='5'/>
+      </enum-decl>
+      <class-decl name='ack_sample' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/tcp.h' line='1008' column='1' id='cd7d3c9d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pkts_acked' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rtt_us' type-id='a7832498' visibility='default' filepath='include/net/tcp.h' line='1010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='in_flight' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1011' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rate_sample' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/tcp.h' line='1022' column='1' id='a084c932'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prior_mstamp' type-id='91ce1af9' visibility='default' filepath='include/net/tcp.h' line='1023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prior_delivered' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1024' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='delivered' type-id='a7832498' visibility='default' filepath='include/net/tcp.h' line='1025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='interval_us' type-id='bd54fe1a' visibility='default' filepath='include/net/tcp.h' line='1026' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='snd_interval_us' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1027' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='rcv_interval_us' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rtt_us' type-id='bd54fe1a' visibility='default' filepath='include/net/tcp.h' line='1029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='losses' type-id='95e97e5e' visibility='default' filepath='include/net/tcp.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='acked_sacked' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='prior_in_flight' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='is_app_limited' type-id='b50a4934' visibility='default' filepath='include/net/tcp.h' line='1033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='424'>
+          <var-decl name='is_retrans' type-id='b50a4934' visibility='default' filepath='include/net/tcp.h' line='1034' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='432'>
+          <var-decl name='is_ack_delayed' type-id='b50a4934' visibility='default' filepath='include/net/tcp.h' line='1035' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nexthop' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/net/nexthop.h' line='80' column='1' id='b7545150'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='include/net/nexthop.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fi_list' type-id='72f469ec' visibility='default' filepath='include/net/nexthop.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='f6i_list' type-id='72f469ec' visibility='default' filepath='include/net/nexthop.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='grp_list' type-id='72f469ec' visibility='default' filepath='include/net/nexthop.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='net' type-id='a2bff677' visibility='default' filepath='include/net/nexthop.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/net/nexthop.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='protocol' type-id='f9b06939' visibility='default' filepath='include/net/nexthop.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='680'>
+          <var-decl name='nh_flags' type-id='f9b06939' visibility='default' filepath='include/net/nexthop.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='688'>
+          <var-decl name='is_group' type-id='b50a4934' visibility='default' filepath='include/net/nexthop.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/nexthop.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/nexthop.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='' type-id='21fca59c' visibility='default' filepath='include/net/nexthop.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/nexthop.h' line='96' column='1' id='21fca59c'>
+        <data-member access='private'>
+          <var-decl name='nh_info' type-id='e55edb2e' visibility='default' filepath='include/net/nexthop.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nh_grp' type-id='c5ff416f' visibility='default' filepath='include/net/nexthop.h' line='98' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='nh_info' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/net/nexthop.h' line='49' column='1' id='3f017308'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_hash' type-id='03a4a074' visibility='default' filepath='include/net/nexthop.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nh_parent' type-id='f32120a8' visibility='default' filepath='include/net/nexthop.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='family' type-id='f9b06939' visibility='default' filepath='include/net/nexthop.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='reject_nh' type-id='b50a4934' visibility='default' filepath='include/net/nexthop.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='757a0dbc' visibility='default' filepath='include/net/nexthop.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='832' is-anonymous='yes' visibility='default' filepath='include/net/nexthop.h' line='56' column='1' id='757a0dbc'>
+        <data-member access='private'>
+          <var-decl name='fib_nhc' type-id='e1f89457' visibility='default' filepath='include/net/nexthop.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fib_nh' type-id='deb3203d' visibility='default' filepath='include/net/nexthop.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='fib6_nh' type-id='979d5bbb' visibility='default' filepath='include/net/nexthop.h' line='59' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='fib_nh' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='103' column='1' id='deb3203d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nh_common' type-id='e1f89457' visibility='default' filepath='include/net/ip_fib.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='nh_hash' type-id='03a4a074' visibility='default' filepath='include/net/ip_fib.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='nh_parent' type-id='09dcd1bf' visibility='default' filepath='include/net/ip_fib.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nh_saddr' type-id='78a133c2' visibility='default' filepath='include/net/ip_fib.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='nh_saddr_genid' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_info' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='131' column='1' id='85bdf127'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fib_hash' type-id='03a4a074' visibility='default' filepath='include/net/ip_fib.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fib_lhash' type-id='03a4a074' visibility='default' filepath='include/net/ip_fib.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nh_list' type-id='72f469ec' visibility='default' filepath='include/net/ip_fib.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fib_net' type-id='a2bff677' visibility='default' filepath='include/net/ip_fib.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fib_treeref' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='fib_clntref' type-id='64615833' visibility='default' filepath='include/net/ip_fib.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fib_flags' type-id='f0981eeb' visibility='default' filepath='include/net/ip_fib.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='fib_dead' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='552'>
+          <var-decl name='fib_protocol' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='560'>
+          <var-decl name='fib_scope' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='568'>
+          <var-decl name='fib_type' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fib_prefsrc' type-id='78a133c2' visibility='default' filepath='include/net/ip_fib.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='fib_tb_id' type-id='19c2251e' visibility='default' filepath='include/net/ip_fib.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fib_priority' type-id='19c2251e' visibility='default' filepath='include/net/ip_fib.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fib_metrics' type-id='8eff91b0' visibility='default' filepath='include/net/ip_fib.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fib_nhs' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='fib_nh_is_v6' type-id='b50a4934' visibility='default' filepath='include/net/ip_fib.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='808'>
+          <var-decl name='nh_updated' type-id='b50a4934' visibility='default' filepath='include/net/ip_fib.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nh' type-id='f32120a8' visibility='default' filepath='include/net/ip_fib.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip_fib.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fib_nh' type-id='c094d415' visibility='default' filepath='include/net/ip_fib.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nh_group' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/nexthop.h' line='72' column='1' id='6ed3e587'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='spare' type-id='c5ff416f' visibility='default' filepath='include/net/nexthop.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_nh' type-id='1dc6a898' visibility='default' filepath='include/net/nexthop.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='mpath' type-id='b50a4934' visibility='default' filepath='include/net/nexthop.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='has_v4' type-id='b50a4934' visibility='default' filepath='include/net/nexthop.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nh_entries' type-id='720e3ec4' visibility='default' filepath='include/net/nexthop.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nh_grp_entry' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/nexthop.h' line='63' column='1' id='f59a8358'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nh' type-id='f32120a8' visibility='default' filepath='include/net/nexthop.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='weight' type-id='f9b06939' visibility='default' filepath='include/net/nexthop.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='upper_bound' type-id='49178f86' visibility='default' filepath='include/net/nexthop.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nh_list' type-id='72f469ec' visibility='default' filepath='include/net/nexthop.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nh_parent' type-id='f32120a8' visibility='default' filepath='include/net/nexthop.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_queue_entry' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='12' column='1' id='a73b7dc2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='skb' type-id='0fbf3cfd' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='hook_index' type-id='f0981eeb' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='state' type-id='89d4ce3f' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='size' type-id='1dc6a898' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='cd7d3c9d' const='yes' id='67a1c23c'/>
+      <pointer-type-def type-id='67a1c23c' size-in-bits='64' id='39a488a2'/>
+      <qualified-type-def type-id='89d4ce3f' const='yes' id='3a8ead28'/>
+      <pointer-type-def type-id='3a8ead28' size-in-bits='64' id='309a5a26'/>
+      <qualified-type-def type-id='a084c932' const='yes' id='5420d2f9'/>
+      <pointer-type-def type-id='5420d2f9' size-in-bits='64' id='42abe229'/>
+      <qualified-type-def type-id='54718f0a' const='yes' id='c408da31'/>
+      <pointer-type-def type-id='c408da31' size-in-bits='64' id='b3ef56ef'/>
+      <pointer-type-def type-id='85bdf127' size-in-bits='64' id='09dcd1bf'/>
+      <pointer-type-def type-id='0790750c' size-in-bits='64' id='e83d6bbe'/>
+      <pointer-type-def type-id='33f50c8e' size-in-bits='64' id='c2147f48'/>
+      <pointer-type-def type-id='b7545150' size-in-bits='64' id='f32120a8'/>
+      <pointer-type-def type-id='0331c4d6' size-in-bits='64' id='c8f8b049'/>
+      <pointer-type-def type-id='a73b7dc2' size-in-bits='64' id='ef706860'/>
+      <pointer-type-def type-id='6ed3e587' size-in-bits='64' id='c5ff416f'/>
+      <pointer-type-def type-id='3f017308' size-in-bits='64' id='e55edb2e'/>
+      <pointer-type-def type-id='68f5a646' size-in-bits='64' id='d6907f4c'/>
+      <pointer-type-def type-id='83c3a083' size-in-bits='64' id='2cbe71ce'/>
+      <pointer-type-def type-id='fe1697ae' size-in-bits='64' id='14ca5c08'/>
+      <pointer-type-def type-id='50acc06b' size-in-bits='64' id='8af06487'/>
+      <pointer-type-def type-id='c7e57ee7' size-in-bits='64' id='29f83363'/>
+      <pointer-type-def type-id='6ddd203f' size-in-bits='64' id='9b92b29b'/>
+      <pointer-type-def type-id='c9315117' size-in-bits='64' id='bffb5883'/>
+      <pointer-type-def type-id='aa95bc9e' size-in-bits='64' id='636d3a20'/>
+      <pointer-type-def type-id='84f0d8f8' size-in-bits='64' id='bfacbc7a'/>
+      <pointer-type-def type-id='fa7c8a73' size-in-bits='64' id='815f64bf'/>
+      <pointer-type-def type-id='77618c14' size-in-bits='64' id='ece3af1e'/>
+      <pointer-type-def type-id='7e2beda2' size-in-bits='64' id='f5feb7a4'/>
+      <pointer-type-def type-id='63e171df' size-in-bits='64' id='30e664af'/>
+      <pointer-type-def type-id='469df90f' size-in-bits='64' id='95610bd5'/>
+      <pointer-type-def type-id='68a72cd7' size-in-bits='64' id='b6316a7f'/>
+      <function-decl name='unregister_netdevice_notifier' mangled-name='unregister_netdevice_notifier' filepath='include/linux/netdevice.h' line='2545' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_netdevice_notifier'>
+        <parameter type-id='d504f73d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netlink_unregister_notifier' mangled-name='netlink_unregister_notifier' filepath='include/linux/netlink.h' line='140' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netlink_unregister_notifier'>
+        <parameter type-id='d504f73d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_pernet_subsys' mangled-name='unregister_pernet_subsys' filepath='include/net/net_namespace.h' line='402' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_pernet_subsys'>
+        <parameter type-id='d6907f4c'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='proc_create_net_data' mangled-name='proc_create_net_data' filepath='include/linux/proc_fs.h' line='59' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_create_net_data'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='d077e928'/>
+        <parameter type-id='943a1b48'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='d077e928'/>
+      </function-decl>
+      <function-decl name='_raw_read_lock_bh' mangled-name='_raw_read_lock_bh' filepath='include/linux/rwlock_api_smp.h' line='20' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_read_lock_bh'>
+        <parameter type-id='8567d8b1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_read_unlock_bh' mangled-name='_raw_read_unlock_bh' filepath='include/linux/rwlock_api_smp.h' line='32' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_read_unlock_bh'>
+        <parameter type-id='8567d8b1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_copy_expand' mangled-name='skb_copy_expand' filepath='include/linux/skbuff.h' line='1127' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_copy_expand'>
+        <parameter type-id='11f4a000'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='skb_ensure_writable' mangled-name='skb_ensure_writable' filepath='include/linux/skbuff.h' line='3555' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_ensure_writable'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='register_pernet_subsys' mangled-name='register_pernet_subsys' filepath='include/net/net_namespace.h' line='401' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_pernet_subsys'>
+        <parameter type-id='d6907f4c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netlink_register_notifier' mangled-name='netlink_register_notifier' filepath='include/linux/netlink.h' line='139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netlink_register_notifier'>
+        <parameter type-id='d504f73d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='register_netdevice_notifier' mangled-name='register_netdevice_notifier' filepath='include/linux/netdevice.h' line='2544' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_netdevice_notifier'>
+        <parameter type-id='d504f73d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='0790750c'>
+        <parameter type-id='a2bff677'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='33f50c8e'>
+        <parameter type-id='ef706860'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fe1697ae'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='2cbe71ce'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='50acc06b'>
+        <parameter type-id='f772df6e'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c7e57ee7'>
+        <parameter type-id='e84b031a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6ddd203f'>
+        <parameter type-id='a2bff677'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c9315117'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='39a488a2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aa95bc9e'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='42abe229'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='84f0d8f8'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='5f51e977'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='77618c14'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7e2beda2'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netfilter/x_tables.c' language='LANG_C89'>
+      <var-decl name='xt_tee_enabled' type-id='00205383' mangled-name='xt_tee_enabled' visibility='default' filepath='net/netfilter/x_tables.c' line='1291' column='1' elf-symbol-id='xt_tee_enabled'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netfilter/xt_IDLETIMER.c' language='LANG_C89'>
+      <qualified-type-def type-id='a6222917' const='yes' id='be65923c'/>
+      <pointer-type-def type-id='be65923c' size-in-bits='64' id='cfe4f8a2'/>
+      <qualified-type-def type-id='40a816ad' const='yes' id='5487ffdc'/>
+      <pointer-type-def type-id='5487ffdc' size-in-bits='64' id='0817f042'/>
+      <function-decl name='sysfs_create_file_ns' mangled-name='sysfs_create_file_ns' filepath='include/linux/sysfs.h' line='242' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_create_file_ns'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='cfe4f8a2'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sysfs_remove_file_ns' mangled-name='sysfs_remove_file_ns' filepath='include/linux/sysfs.h' line='252' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_remove_file_ns'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='cfe4f8a2'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='set_normalized_timespec64' mangled-name='set_normalized_timespec64' filepath='include/linux/time64.h' line='61' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_normalized_timespec64'>
+        <parameter type-id='4151733d'/>
+        <parameter type-id='1eb56b1e'/>
+        <parameter type-id='1eb56b1e'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='timespec64_to_jiffies' mangled-name='timespec64_to_jiffies' filepath='include/linux/jiffies.h' line='420' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='timespec64_to_jiffies'>
+        <parameter type-id='0817f042'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='sysfs_notify' mangled-name='sysfs_notify' filepath='include/linux/sysfs.h' line='304' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_notify'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netfilter/xt_NFQUEUE.c' language='LANG_C89'>
+      <function-decl name='prandom_u32' mangled-name='prandom_u32' filepath='include/linux/prandom.h' line='14' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='prandom_u32'>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netfilter/xt_TCPMSS.c' language='LANG_C89'>
+      <function-decl name='ipv6_skip_exthdr' mangled-name='ipv6_skip_exthdr' filepath='include/net/ipv6.h' line='1052' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipv6_skip_exthdr'>
+        <parameter type-id='11f4a000'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='e9e550dd'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='inet_proto_csum_replace4' mangled-name='inet_proto_csum_replace4' filepath='include/net/checksum.h' line='143' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inet_proto_csum_replace4'>
+        <parameter type-id='e9e550dd'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netfilter/xt_TPROXY.c' language='LANG_C89'>
+      <class-decl name='ip_mc_list' is-struct='yes' visibility='default' is-declaration-only='yes' id='c2a59aaa'/>
+      <array-type-def dimensions='1' type-id='42b16dba' size-in-bits='4096' id='e3638da9'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='1024' id='9e942f0d'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f772df6e' size-in-bits='infinite' id='5be9db8d'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='in_device' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/linux/inetdevice.h' line='25' column='1' id='4234e232'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/linux/inetdevice.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/linux/inetdevice.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dead' type-id='95e97e5e' visibility='default' filepath='include/linux/inetdevice.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ifa_list' type-id='3a639063' visibility='default' filepath='include/linux/inetdevice.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mc_list' type-id='26479c18' visibility='default' filepath='include/linux/inetdevice.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mc_hash' type-id='74bae2b6' visibility='default' filepath='include/linux/inetdevice.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mc_count' type-id='95e97e5e' visibility='default' filepath='include/linux/inetdevice.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='mc_tomb_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/inetdevice.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mc_tomb' type-id='26479c18' visibility='default' filepath='include/linux/inetdevice.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mr_v1_seen' type-id='7359adad' visibility='default' filepath='include/linux/inetdevice.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mr_v2_seen' type-id='7359adad' visibility='default' filepath='include/linux/inetdevice.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mr_maxdelay' type-id='7359adad' visibility='default' filepath='include/linux/inetdevice.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mr_qi' type-id='7359adad' visibility='default' filepath='include/linux/inetdevice.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='mr_qri' type-id='7359adad' visibility='default' filepath='include/linux/inetdevice.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mr_qrv' type-id='002ac4a6' visibility='default' filepath='include/linux/inetdevice.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='776'>
+          <var-decl name='mr_gq_running' type-id='002ac4a6' visibility='default' filepath='include/linux/inetdevice.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='mr_ifc_count' type-id='002ac4a6' visibility='default' filepath='include/linux/inetdevice.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='mr_gq_timer' type-id='abe41e67' visibility='default' filepath='include/linux/inetdevice.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mr_ifc_timer' type-id='abe41e67' visibility='default' filepath='include/linux/inetdevice.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='arp_parms' type-id='affe0fe3' visibility='default' filepath='include/linux/inetdevice.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='cnf' type-id='c2c09950' visibility='default' filepath='include/linux/inetdevice.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/inetdevice.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='in_ifaddr' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/inetdevice.h' line='137' column='1' id='b95a5ed3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='03a4a074' visibility='default' filepath='include/linux/inetdevice.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ifa_next' type-id='3a639063' visibility='default' filepath='include/linux/inetdevice.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ifa_dev' type-id='fc6f14aa' visibility='default' filepath='include/linux/inetdevice.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/inetdevice.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ifa_local' type-id='78a133c2' visibility='default' filepath='include/linux/inetdevice.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='ifa_address' type-id='78a133c2' visibility='default' filepath='include/linux/inetdevice.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ifa_mask' type-id='78a133c2' visibility='default' filepath='include/linux/inetdevice.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='ifa_rt_priority' type-id='3f1a6b60' visibility='default' filepath='include/linux/inetdevice.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ifa_broadcast' type-id='78a133c2' visibility='default' filepath='include/linux/inetdevice.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='ifa_scope' type-id='002ac4a6' visibility='default' filepath='include/linux/inetdevice.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='552'>
+          <var-decl name='ifa_prefixlen' type-id='002ac4a6' visibility='default' filepath='include/linux/inetdevice.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ifa_flags' type-id='3f1a6b60' visibility='default' filepath='include/linux/inetdevice.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='ifa_label' type-id='ac1fa8c0' visibility='default' filepath='include/linux/inetdevice.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='ifa_valid_lft' type-id='3f1a6b60' visibility='default' filepath='include/linux/inetdevice.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ifa_preferred_lft' type-id='3f1a6b60' visibility='default' filepath='include/linux/inetdevice.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ifa_cstamp' type-id='7359adad' visibility='default' filepath='include/linux/inetdevice.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ifa_tstamp' type-id='7359adad' visibility='default' filepath='include/linux/inetdevice.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sock_reuseport' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/sock_reuseport.h' line='13' column='1' id='ff751356'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sock_reuseport.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_socks' type-id='1dc6a898' visibility='default' filepath='include/net/sock_reuseport.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='num_socks' type-id='1dc6a898' visibility='default' filepath='include/net/sock_reuseport.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='synq_overflow_ts' type-id='f0981eeb' visibility='default' filepath='include/net/sock_reuseport.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reuseport_id' type-id='f0981eeb' visibility='default' filepath='include/net/sock_reuseport.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='bind_inany' type-id='f0981eeb' visibility='default' filepath='include/net/sock_reuseport.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='has_conns' type-id='f0981eeb' visibility='default' filepath='include/net/sock_reuseport.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='prog' type-id='bdcee7af' visibility='default' filepath='include/net/sock_reuseport.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='socks' type-id='5be9db8d' visibility='default' filepath='include/net/sock_reuseport.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_ehash_bucket' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='38' column='1' id='08400b46'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chain' type-id='af86905d' visibility='default' filepath='include/net/inet_hashtables.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_bind_hashbucket' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='101' column='1' id='082b64be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/inet_hashtables.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='chain' type-id='e151255a' visibility='default' filepath='include/net/inet_hashtables.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_listen_hashbucket' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='112' column='1' id='42b16dba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/inet_hashtables.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='ba169a6c' visibility='default' filepath='include/net/inet_hashtables.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='115' column='1' id='ba169a6c'>
+        <data-member access='private'>
+          <var-decl name='head' type-id='e151255a' visibility='default' filepath='include/net/inet_hashtables.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='nulls_head' type-id='af86905d' visibility='default' filepath='include/net/inet_hashtables.h' line='117' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='4234e232' size-in-bits='64' id='fc6f14aa'/>
+      <pointer-type-def type-id='b95a5ed3' size-in-bits='64' id='3a639063'/>
+      <pointer-type-def type-id='082b64be' size-in-bits='64' id='fd53db64'/>
+      <pointer-type-def type-id='08400b46' size-in-bits='64' id='77011cbc'/>
+      <pointer-type-def type-id='42b16dba' size-in-bits='64' id='e0087b68'/>
+      <pointer-type-def type-id='c2a59aaa' size-in-bits='64' id='26479c18'/>
+      <pointer-type-def type-id='26479c18' size-in-bits='64' id='74bae2b6'/>
+      <pointer-type-def type-id='ff751356' size-in-bits='64' id='1d22b7e6'/>
+      <function-decl name='ipv6_find_hdr' mangled-name='ipv6_find_hdr' filepath='include/net/ipv6.h' line='1064' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipv6_find_hdr'>
+        <parameter type-id='11f4a000'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='e9e550dd'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netfilter/xt_connlimit.c' language='LANG_C89'>
+      <function-decl name='nf_ct_get_tuplepr' mangled-name='nf_ct_get_tuplepr' filepath='include/net/netfilter/nf_conntrack.h' line='182' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nf_ct_get_tuplepr'>
+        <parameter type-id='11f4a000'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='66d2e8f0'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netfilter/xt_connmark.c' language='LANG_C89'>
+      <function-decl name='xt_unregister_targets' mangled-name='xt_unregister_targets' filepath='include/linux/netfilter/x_tables.h' line='273' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xt_unregister_targets'>
+        <parameter type-id='49ac960b'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xt_register_targets' mangled-name='xt_register_targets' filepath='include/linux/netfilter/x_tables.h' line='272' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xt_register_targets'>
+        <parameter type-id='49ac960b'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='60289ffb' size-in-bits='64' id='49ac960b'/>
+      <class-decl name='xt_target' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='182' column='1' id='60289ffb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='cff94a5f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='revision' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='target' type-id='73cc7ee4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='checkentry' type-id='ef16e31e' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='destroy' type-id='6307fc3e' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='compat_from_user' type-id='debb4ee8' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='compat_to_user' type-id='585e1de9' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='me' type-id='2730d015' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='table' type-id='80f4b756' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='targetsize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='usersize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compatsize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='hooks' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='proto' type-id='8efea9e5' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='family' type-id='8efea9e5' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='219' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='9b45d938' size-in-bits='232' id='cff94a5f'>
+        <subrange length='29' type-id='7ff19f0f' id='01b8f6fa'/>
+      </array-type-def>
+      <pointer-type-def type-id='eeef65e4' size-in-bits='64' id='ef16e31e'/>
+      <pointer-type-def type-id='4446be8a' size-in-bits='64' id='73cc7ee4'/>
+      <pointer-type-def type-id='29ca5ed4' size-in-bits='64' id='6307fc3e'/>
+      <pointer-type-def type-id='c039af2e' size-in-bits='64' id='debb4ee8'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netfilter/xt_hashlimit.c' language='LANG_C89'>
+      <function-decl name='proc_mkdir' mangled-name='proc_mkdir' filepath='include/linux/proc_fs.h' line='25' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_mkdir'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='d077e928'/>
+        <return type-id='d077e928'/>
+      </function-decl>
+      <function-decl name='refcount_dec_and_mutex_lock' mangled-name='refcount_dec_and_mutex_lock' filepath='include/linux/refcount.h' line='113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='refcount_dec_and_mutex_lock'>
+        <parameter type-id='74c91557'/>
+        <parameter type-id='e0ea832a'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='PDE_DATA' mangled-name='PDE_DATA' filepath='include/linux/proc_fs.h' line='53' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PDE_DATA'>
+        <parameter type-id='c5a4eb7f'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netfilter/xt_mark.c' language='LANG_C89'>
+      <pointer-type-def type-id='60289ffb' size-in-bits='64' id='49ac960b'/>
+      <function-decl name='xt_unregister_match' mangled-name='xt_unregister_match' filepath='include/linux/netfilter/x_tables.h' line='276' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xt_unregister_match'>
+        <parameter type-id='e25f5feb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xt_unregister_target' mangled-name='xt_unregister_target' filepath='include/linux/netfilter/x_tables.h' line='271' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xt_unregister_target'>
+        <parameter type-id='49ac960b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xt_register_target' mangled-name='xt_register_target' filepath='include/linux/netfilter/x_tables.h' line='270' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xt_register_target'>
+        <parameter type-id='49ac960b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xt_register_match' mangled-name='xt_register_match' filepath='include/linux/netfilter/x_tables.h' line='275' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xt_register_match'>
+        <parameter type-id='e25f5feb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='9399d16b' size-in-bits='64' id='e25f5feb'/>
+      <class-decl name='xt_match' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='142' column='1' id='9399d16b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='cff94a5f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='revision' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='match' type-id='78abc667' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='checkentry' type-id='f6865b36' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='destroy' type-id='f0385e42' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='compat_from_user' type-id='debb4ee8' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='compat_to_user' type-id='585e1de9' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='me' type-id='2730d015' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='table' type-id='80f4b756' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='matchsize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='usersize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compatsize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='hooks' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='proto' type-id='8efea9e5' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='family' type-id='8efea9e5' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='178' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='156670bc' size-in-bits='64' id='f6865b36'/>
+      <pointer-type-def type-id='11ce232b' size-in-bits='64' id='78abc667'/>
+      <pointer-type-def type-id='26b6dfe0' size-in-bits='64' id='f0385e42'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netfilter/xt_quota2.c' language='LANG_C89'>
+      <function-decl name='netlink_broadcast' mangled-name='netlink_broadcast' filepath='include/linux/netlink.h' line='132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netlink_broadcast'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='proc_create_data' mangled-name='proc_create_data' filepath='include/linux/proc_fs.h' line='45' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_create_data'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='d077e928'/>
+        <parameter type-id='61758ee5'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='d077e928'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netfilter/xt_tcpudp.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='9b45d938' size-in-bits='232' id='cff94a5f'>
+        <subrange length='29' type-id='7ff19f0f' id='01b8f6fa'/>
+      </array-type-def>
+      <class-decl name='xt_match' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='142' column='1' id='9399d16b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='cff94a5f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='revision' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='match' type-id='78abc667' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='checkentry' type-id='f6865b36' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='destroy' type-id='f0385e42' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='compat_from_user' type-id='debb4ee8' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='compat_to_user' type-id='585e1de9' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='me' type-id='2730d015' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='table' type-id='80f4b756' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='matchsize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='usersize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compatsize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='hooks' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='proto' type-id='8efea9e5' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='family' type-id='8efea9e5' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='178' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xt_action_param' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='30' column='1' id='edb04712'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='3db026b2' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='71be3d11' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state' type-id='309a5a26' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fragoff' type-id='95e97e5e' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='thoff' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='hotdrop' type-id='b50a4934' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__10' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='31' column='1' id='3db026b2'>
+        <data-member access='private'>
+          <var-decl name='match' type-id='1ecd1044' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='target' type-id='b7f14b36' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='33' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='xt_target' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='182' column='1' id='60289ffb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='cff94a5f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='revision' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='target' type-id='73cc7ee4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='checkentry' type-id='ef16e31e' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='destroy' type-id='6307fc3e' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='compat_from_user' type-id='debb4ee8' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='compat_to_user' type-id='585e1de9' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='me' type-id='2730d015' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='table' type-id='80f4b756' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='targetsize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='usersize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compatsize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='hooks' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='proto' type-id='8efea9e5' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='family' type-id='8efea9e5' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='219' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xt_tgchk_param' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='123' column='1' id='fa0eab7f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='net' type-id='a2bff677' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='table' type-id='80f4b756' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entryinfo' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='target' type-id='b7f14b36' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='targinfo' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hook_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='family' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='nft_compat' type-id='b50a4934' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xt_tgdtor_param' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='135' column='1' id='6cd62070'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='net' type-id='a2bff677' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='target' type-id='b7f14b36' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='targinfo' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='family' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='139' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__11' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='35' column='1' id='71be3d11'>
+        <data-member access='private'>
+          <var-decl name='matchinfo' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='targinfo' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='36' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='xt_mtchk_param' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='92' column='1' id='b30ae843'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='net' type-id='a2bff677' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='table' type-id='80f4b756' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entryinfo' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='match' type-id='1ecd1044' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='matchinfo' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hook_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='family' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='nft_compat' type-id='b50a4934' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xt_mtdtor_param' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='107' column='1' id='7ad52504'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='net' type-id='a2bff677' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='match' type-id='1ecd1044' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='matchinfo' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='family' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='edb04712' const='yes' id='70660701'/>
+      <pointer-type-def type-id='70660701' size-in-bits='64' id='1b9d48b1'/>
+      <qualified-type-def type-id='9399d16b' const='yes' id='1beae906'/>
+      <pointer-type-def type-id='1beae906' size-in-bits='64' id='1ecd1044'/>
+      <qualified-type-def type-id='b30ae843' const='yes' id='7be051de'/>
+      <pointer-type-def type-id='7be051de' size-in-bits='64' id='f621031c'/>
+      <qualified-type-def type-id='7ad52504' const='yes' id='2d4ad53b'/>
+      <pointer-type-def type-id='2d4ad53b' size-in-bits='64' id='5dcd69c3'/>
+      <qualified-type-def type-id='60289ffb' const='yes' id='79fae198'/>
+      <pointer-type-def type-id='79fae198' size-in-bits='64' id='b7f14b36'/>
+      <qualified-type-def type-id='fa0eab7f' const='yes' id='19952db6'/>
+      <pointer-type-def type-id='19952db6' size-in-bits='64' id='e1d6cc94'/>
+      <qualified-type-def type-id='6cd62070' const='yes' id='38e0f6d3'/>
+      <pointer-type-def type-id='38e0f6d3' size-in-bits='64' id='8324c9fb'/>
+      <pointer-type-def type-id='156670bc' size-in-bits='64' id='f6865b36'/>
+      <pointer-type-def type-id='eeef65e4' size-in-bits='64' id='ef16e31e'/>
+      <pointer-type-def type-id='11ce232b' size-in-bits='64' id='78abc667'/>
+      <pointer-type-def type-id='4446be8a' size-in-bits='64' id='73cc7ee4'/>
+      <pointer-type-def type-id='26b6dfe0' size-in-bits='64' id='f0385e42'/>
+      <pointer-type-def type-id='29ca5ed4' size-in-bits='64' id='6307fc3e'/>
+      <pointer-type-def type-id='c039af2e' size-in-bits='64' id='debb4ee8'/>
+      <pointer-type-def type-id='edb04712' size-in-bits='64' id='64ed5260'/>
+      <pointer-type-def type-id='9399d16b' size-in-bits='64' id='e25f5feb'/>
+      <function-decl name='xt_unregister_matches' mangled-name='xt_unregister_matches' filepath='include/linux/netfilter/x_tables.h' line='278' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xt_unregister_matches'>
+        <parameter type-id='e25f5feb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xt_register_matches' mangled-name='xt_register_matches' filepath='include/linux/netfilter/x_tables.h' line='277' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xt_register_matches'>
+        <parameter type-id='e25f5feb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='156670bc'>
+        <parameter type-id='f621031c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eeef65e4'>
+        <parameter type-id='e1d6cc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='11ce232b'>
+        <parameter type-id='11f4a000'/>
+        <parameter type-id='64ed5260'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4446be8a'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='1b9d48b1'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='26b6dfe0'>
+        <parameter type-id='5dcd69c3'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='29ca5ed4'>
+        <parameter type-id='8324c9fb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netlink/af_netlink.c' language='LANG_C89'>
+      <class-decl name='netlink_kernel_cfg' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/netlink.h' line='44' column='1' id='f7a1d399'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='groups' type-id='f0981eeb' visibility='default' filepath='include/linux/netlink.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/netlink.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='input' type-id='0ef96694' visibility='default' filepath='include/linux/netlink.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cb_mutex' type-id='e0ea832a' visibility='default' filepath='include/linux/netlink.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bind' type-id='e77f5b05' visibility='default' filepath='include/linux/netlink.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unbind' type-id='493b1d22' visibility='default' filepath='include/linux/netlink.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='compare' type-id='bfc146e4' visibility='default' filepath='include/linux/netlink.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netlink_dump_control' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/netlink.h' line='214' column='1' id='21ec1a55'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='eca40b6e' visibility='default' filepath='include/linux/netlink.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dump' type-id='32a663ca' visibility='default' filepath='include/linux/netlink.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='done' type-id='eca40b6e' visibility='default' filepath='include/linux/netlink.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/netlink.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/linux/netlink.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='min_dump_alloc' type-id='1dc6a898' visibility='default' filepath='include/linux/netlink.h' line='220' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='339a9d49' size-in-bits='64' id='e77f5b05'/>
+      <pointer-type-def type-id='21ec1a55' size-in-bits='64' id='6984e365'/>
+      <pointer-type-def type-id='f7a1d399' size-in-bits='64' id='8438f281'/>
+      <pointer-type-def type-id='64a9bab2' size-in-bits='64' id='bfc146e4'/>
+      <pointer-type-def type-id='5ae55c68' size-in-bits='64' id='493b1d22'/>
+      <function-decl name='__netlink_kernel_create' mangled-name='__netlink_kernel_create' filepath='net/netlink/af_netlink.c' line='2026' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__netlink_kernel_create'>
+        <parameter type-id='a2bff677' name='net' filepath='net/netlink/af_netlink.c' line='2026' column='1'/>
+        <parameter type-id='95e97e5e' name='unit' filepath='net/netlink/af_netlink.c' line='2026' column='1'/>
+        <parameter type-id='2730d015' name='module' filepath='net/netlink/af_netlink.c' line='2026' column='1'/>
+        <parameter type-id='8438f281' name='cfg' filepath='net/netlink/af_netlink.c' line='2027' column='1'/>
+        <return type-id='f772df6e'/>
+      </function-decl>
+      <function-decl name='__nlmsg_put' mangled-name='__nlmsg_put' filepath='net/netlink/af_netlink.c' line='2166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__nlmsg_put'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/netlink/af_netlink.c' line='2166' column='1'/>
+        <parameter type-id='19c2251e' name='portid' filepath='net/netlink/af_netlink.c' line='2166' column='1'/>
+        <parameter type-id='19c2251e' name='seq' filepath='net/netlink/af_netlink.c' line='2166' column='1'/>
+        <parameter type-id='95e97e5e' name='type' filepath='net/netlink/af_netlink.c' line='2166' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='net/netlink/af_netlink.c' line='2166' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/netlink/af_netlink.c' line='2166' column='1'/>
+        <return type-id='c2074578'/>
+      </function-decl>
+      <function-decl name='__netlink_dump_start' mangled-name='__netlink_dump_start' filepath='net/netlink/af_netlink.c' line='2299' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__netlink_dump_start'>
+        <parameter type-id='f772df6e' name='ssk' filepath='net/netlink/af_netlink.c' line='2299' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/netlink/af_netlink.c' line='2299' column='1'/>
+        <parameter type-id='390fbe8f' name='nlh' filepath='net/netlink/af_netlink.c' line='2300' column='1'/>
+        <parameter type-id='6984e365' name='control' filepath='net/netlink/af_netlink.c' line='2301' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='339a9d49'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='64a9bab2'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='f772df6e'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5ae55c68'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/netlink/genetlink.c' language='LANG_C89'>
+      <function-decl name='genl_notify' mangled-name='genl_notify' filepath='net/netlink/genetlink.c' line='1109' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='genl_notify'>
+        <parameter type-id='63d7819b' name='family' filepath='net/netlink/genetlink.c' line='1109' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/netlink/genetlink.c' line='1109' column='1'/>
+        <parameter type-id='31b542ce' name='info' filepath='net/netlink/genetlink.c' line='1110' column='1'/>
+        <parameter type-id='19c2251e' name='group' filepath='net/netlink/genetlink.c' line='1110' column='1'/>
+        <parameter type-id='3eb7c31c' name='flags' filepath='net/netlink/genetlink.c' line='1110' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/rfkill/core.c' language='LANG_C89'>
+      <function-decl name='rfkill_init_sw_state' mangled-name='rfkill_init_sw_state' filepath='net/rfkill/core.c' line='592' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rfkill_init_sw_state'>
+        <parameter type-id='c5b94c75' name='rfkill' filepath='net/rfkill/core.c' line='592' column='1'/>
+        <parameter type-id='b50a4934' name='blocked' filepath='net/rfkill/core.c' line='592' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rfkill_find_type' mangled-name='rfkill_find_type' filepath='net/rfkill/core.c' line='653' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rfkill_find_type'>
+        <parameter type-id='80f4b756' name='name' filepath='net/rfkill/core.c' line='653' column='1'/>
+        <return type-id='6bac1cb5'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/sched/cls_bpf.c' language='LANG_C89'>
+      <function-decl name='bpf_prog_create' mangled-name='bpf_prog_create' filepath='include/linux/filter.h' line='889' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_prog_create'>
+        <parameter type-id='50b674cc'/>
+        <parameter type-id='e93ad915'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bpf_prog_destroy' mangled-name='bpf_prog_destroy' filepath='include/linux/filter.h' line='892' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_prog_destroy'>
+        <parameter type-id='bdcee7af'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/sched/cls_u32.c' language='LANG_C89'>
+      <class-decl name='psample_group' is-struct='yes' visibility='default' is-declaration-only='yes' id='b845c891'/>
+      <class-decl name='tc_action' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/net/act_api.h' line='23' column='1' id='8e5ae04f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='bdbd4b03' visibility='default' filepath='include/net/act_api.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/net/act_api.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='order' type-id='3f1a6b60' visibility='default' filepath='include/net/act_api.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idrinfo' type-id='5eeecdaa' visibility='default' filepath='include/net/act_api.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tcfa_index' type-id='19c2251e' visibility='default' filepath='include/net/act_api.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='tcfa_refcnt' type-id='64615833' visibility='default' filepath='include/net/act_api.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tcfa_bindcnt' type-id='49178f86' visibility='default' filepath='include/net/act_api.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tcfa_action' type-id='95e97e5e' visibility='default' filepath='include/net/act_api.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tcfa_tm' type-id='195c8601' visibility='default' filepath='include/net/act_api.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='tcfa_bstats' type-id='1f9b1a31' visibility='default' filepath='include/net/act_api.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='tcfa_bstats_hw' type-id='1f9b1a31' visibility='default' filepath='include/net/act_api.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='tcfa_qstats' type-id='a212a715' visibility='default' filepath='include/net/act_api.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='tcfa_rate_est' type-id='8c1bb0b4' visibility='default' filepath='include/net/act_api.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='tcfa_lock' type-id='fb4018a0' visibility='default' filepath='include/net/act_api.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cpu_bstats' type-id='b3542b31' visibility='default' filepath='include/net/act_api.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='cpu_bstats_hw' type-id='b3542b31' visibility='default' filepath='include/net/act_api.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='cpu_qstats' type-id='338303f5' visibility='default' filepath='include/net/act_api.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='act_cookie' type-id='6fcb14d7' visibility='default' filepath='include/net/act_api.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='goto_chain' type-id='45305972' visibility='default' filepath='include/net/act_api.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tc_action_ops' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/net/act_api.h' line='84' column='1' id='6e5d2bdc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/net/act_api.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kind' type-id='ac1fa8c0' visibility='default' filepath='include/net/act_api.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='id' type-id='618a2054' visibility='default' filepath='include/net/act_api.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/net/act_api.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/act_api.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='act' type-id='8e7e5b0b' visibility='default' filepath='include/net/act_api.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dump' type-id='14aa811d' visibility='default' filepath='include/net/act_api.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cleanup' type-id='3107ecae' visibility='default' filepath='include/net/act_api.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='lookup' type-id='adec6207' visibility='default' filepath='include/net/act_api.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='init' type-id='31425e3a' visibility='default' filepath='include/net/act_api.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='walk' type-id='8a8c0471' visibility='default' filepath='include/net/act_api.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='stats_update' type-id='4e77e8d6' visibility='default' filepath='include/net/act_api.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='get_fill_size' type-id='342e75b6' visibility='default' filepath='include/net/act_api.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='get_dev' type-id='a3b5aa5f' visibility='default' filepath='include/net/act_api.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_psample_group' type-id='8421b09d' visibility='default' filepath='include/net/act_api.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='tca_id' filepath='include/uapi/linux/pkt_cls.h' line='88' column='1' id='618a2054'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TCA_ID_UNSPEC' value='0'/>
+        <enumerator name='TCA_ID_POLICE' value='1'/>
+        <enumerator name='TCA_ID_GACT' value='5'/>
+        <enumerator name='TCA_ID_IPT' value='6'/>
+        <enumerator name='TCA_ID_PEDIT' value='7'/>
+        <enumerator name='TCA_ID_MIRRED' value='8'/>
+        <enumerator name='TCA_ID_NAT' value='9'/>
+        <enumerator name='TCA_ID_XT' value='10'/>
+        <enumerator name='TCA_ID_SKBEDIT' value='11'/>
+        <enumerator name='TCA_ID_VLAN' value='12'/>
+        <enumerator name='TCA_ID_BPF' value='13'/>
+        <enumerator name='TCA_ID_CONNMARK' value='14'/>
+        <enumerator name='TCA_ID_SKBMOD' value='15'/>
+        <enumerator name='TCA_ID_CSUM' value='16'/>
+        <enumerator name='TCA_ID_TUNNEL_KEY' value='17'/>
+        <enumerator name='TCA_ID_SIMP' value='22'/>
+        <enumerator name='TCA_ID_IFE' value='25'/>
+        <enumerator name='TCA_ID_SAMPLE' value='26'/>
+        <enumerator name='TCA_ID_CTINFO' value='27'/>
+        <enumerator name='TCA_ID_MPLS' value='28'/>
+        <enumerator name='TCA_ID_CT' value='29'/>
+        <enumerator name='__TCA_ID_MAX' value='255'/>
+      </enum-decl>
+      <typedef-decl name='tc_action_priv_destructor' type-id='b7f9d8e6' filepath='include/net/act_api.h' line='82' column='1' id='a2874d8a'/>
+      <class-decl name='tcf_idrinfo' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/act_api.h' line='15' column='1' id='8182ca8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/net/act_api.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='action_idr' type-id='37ce495e' visibility='default' filepath='include/net/act_api.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='net' type-id='a2bff677' visibility='default' filepath='include/net/act_api.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_t' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/pkt_cls.h' line='135' column='1' id='195c8601'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='install' type-id='d3130597' visibility='default' filepath='include/uapi/linux/pkt_cls.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lastuse' type-id='d3130597' visibility='default' filepath='include/uapi/linux/pkt_cls.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='expires' type-id='d3130597' visibility='default' filepath='include/uapi/linux/pkt_cls.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='firstuse' type-id='d3130597' visibility='default' filepath='include/uapi/linux/pkt_cls.h' line='139' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tc_cookie' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/pkt_cls.h' line='683' column='1' id='8eedee6f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='8bff8096' visibility='default' filepath='include/net/pkt_cls.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='19c2251e' visibility='default' filepath='include/net/pkt_cls.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/pkt_cls.h' line='686' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_exts' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/pkt_cls.h' line='189' column='1' id='6e2b0753'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/net/pkt_cls.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr_actions' type-id='95e97e5e' visibility='default' filepath='include/net/pkt_cls.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='actions' type-id='981420b7' visibility='default' filepath='include/net/pkt_cls.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='net' type-id='a2bff677' visibility='default' filepath='include/net/pkt_cls.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='action' type-id='95e97e5e' visibility='default' filepath='include/net/pkt_cls.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='police' type-id='95e97e5e' visibility='default' filepath='include/net/pkt_cls.h' line='200' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='8e5ae04f' const='yes' id='7f2104b8'/>
+      <pointer-type-def type-id='7f2104b8' size-in-bits='64' id='b2fa31d6'/>
+      <qualified-type-def type-id='6e5d2bdc' const='yes' id='7e5d36fb'/>
+      <pointer-type-def type-id='7e5d36fb' size-in-bits='64' id='bdbd4b03'/>
+      <pointer-type-def type-id='218d3568' size-in-bits='64' id='31425e3a'/>
+      <pointer-type-def type-id='2ed857dd' size-in-bits='64' id='8a8c0471'/>
+      <pointer-type-def type-id='1302297b' size-in-bits='64' id='adec6207'/>
+      <pointer-type-def type-id='7be84b87' size-in-bits='64' id='8e7e5b0b'/>
+      <pointer-type-def type-id='b2ea0ff9' size-in-bits='64' id='14aa811d'/>
+      <pointer-type-def type-id='504ee449' size-in-bits='64' id='1583af75'/>
+      <pointer-type-def type-id='eb99238b' size-in-bits='64' id='a3b5aa5f'/>
+      <pointer-type-def type-id='b845c891' size-in-bits='64' id='c9042c89'/>
+      <pointer-type-def type-id='f51d2b61' size-in-bits='64' id='8421b09d'/>
+      <pointer-type-def type-id='7c0b9fdb' size-in-bits='64' id='b325c82b'/>
+      <pointer-type-def type-id='8e5ae04f' size-in-bits='64' id='3f646ae7'/>
+      <pointer-type-def type-id='3f646ae7' size-in-bits='64' id='981420b7'/>
+      <pointer-type-def type-id='a2874d8a' size-in-bits='64' id='a53db4f5'/>
+      <pointer-type-def type-id='8eedee6f' size-in-bits='64' id='6fcb14d7'/>
+      <pointer-type-def type-id='6e2b0753' size-in-bits='64' id='6c257353'/>
+      <pointer-type-def type-id='8182ca8c' size-in-bits='64' id='5eeecdaa'/>
+      <pointer-type-def type-id='bd4e4ac8' size-in-bits='64' id='84c1f5fe'/>
+      <pointer-type-def type-id='ead01d34' size-in-bits='64' id='342e75b6'/>
+      <pointer-type-def type-id='082d8e2c' size-in-bits='64' id='3107ecae'/>
+      <pointer-type-def type-id='9b4ee41c' size-in-bits='64' id='4e77e8d6'/>
+      <function-decl name='unregister_tcf_proto_ops' mangled-name='unregister_tcf_proto_ops' filepath='include/net/pkt_cls.h' line='26' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_tcf_proto_ops'>
+        <parameter type-id='84c1f5fe'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tcf_action_exec' mangled-name='tcf_action_exec' filepath='include/net/act_api.h' line='173' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcf_action_exec'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='981420b7'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='e638cd0c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='idr_alloc_cyclic' mangled-name='idr_alloc_cyclic' filepath='include/linux/idr.h' line='117' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_alloc_cyclic'>
+        <parameter type-id='301185b4'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tcf_exts_destroy' mangled-name='tcf_exts_destroy' filepath='include/net/pkt_cls.h' line='309' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcf_exts_destroy'>
+        <parameter type-id='6c257353'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='idr_alloc_u32' mangled-name='idr_alloc_u32' filepath='include/linux/idr.h' line='115' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_alloc_u32'>
+        <parameter type-id='301185b4'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='idr_replace' mangled-name='idr_replace' filepath='include/linux/idr.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_replace'>
+        <parameter type-id='301185b4'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='tcf_queue_work' mangled-name='tcf_queue_work' filepath='include/net/pkt_cls.h' line='36' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcf_queue_work'>
+        <parameter type-id='b325c82b'/>
+        <parameter type-id='939280af'/>
+        <return type-id='c894953d'/>
+      </function-decl>
+      <function-decl name='tcf_exts_dump' mangled-name='tcf_exts_dump' filepath='include/net/pkt_cls.h' line='311' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcf_exts_dump'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='6c257353'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tcf_exts_dump_stats' mangled-name='tcf_exts_dump_stats' filepath='include/net/pkt_cls.h' line='312' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcf_exts_dump_stats'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='6c257353'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tcf_exts_validate' mangled-name='tcf_exts_validate' filepath='include/net/pkt_cls.h' line='305' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcf_exts_validate'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='6fcaf91e'/>
+        <parameter type-id='6c257353'/>
+        <parameter type-id='c894953d'/>
+        <parameter type-id='c894953d'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='register_tcf_proto_ops' mangled-name='register_tcf_proto_ops' filepath='include/net/pkt_cls.h' line='25' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_tcf_proto_ops'>
+        <parameter type-id='84c1f5fe'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='218d3568'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='6fcaf91e'/>
+        <parameter type-id='6fcaf91e'/>
+        <parameter type-id='981420b7'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2ed857dd'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='07b9ee34'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='bdbd4b03'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1302297b'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='981420b7'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7be84b87'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='b2fa31d6'/>
+        <parameter type-id='e638cd0c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b2ea0ff9'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='3f646ae7'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='504ee449'>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='4c98e95d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eb99238b'>
+        <parameter type-id='b2fa31d6'/>
+        <parameter type-id='a53db4f5'/>
+        <return type-id='68a2d05c'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f51d2b61'>
+        <parameter type-id='b2fa31d6'/>
+        <parameter type-id='a53db4f5'/>
+        <return type-id='c9042c89'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ead01d34'>
+        <parameter type-id='b2fa31d6'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='082d8e2c'>
+        <parameter type-id='3f646ae7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9b4ee41c'>
+        <parameter type-id='3f646ae7'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/sched/sch_htb.c' language='LANG_C89'>
+      <function-decl name='qdisc_reset' mangled-name='qdisc_reset' filepath='include/net/sch_generic.h' line='640' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='qdisc_reset'>
+        <parameter type-id='ee40620a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rtnl_is_locked' mangled-name='rtnl_is_locked' filepath='include/linux/rtnetlink.h' line='36' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_is_locked'>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='nla_put' mangled-name='nla_put' filepath='include/net/netlink.h' line='460' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nla_put'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_trim' mangled-name='skb_trim' filepath='include/linux/skbuff.h' line='2677' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_trim'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='nla_memcpy' mangled-name='nla_memcpy' filepath='include/net/netlink.h' line='444' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nla_memcpy'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='0f2a7ce5'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='nla_put_64bit' mangled-name='nla_put_64bit' filepath='include/net/netlink.h' line='461' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nla_put_64bit'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/socket.c' language='LANG_C89'>
+      <pointer-type-def type-id='cd5915d8' size-in-bits='64' id='9c68341e'/>
+      <pointer-type-def type-id='13103032' size-in-bits='64' id='1a7bb5c8'/>
+      <function-decl name='__sock_tx_timestamp' mangled-name='__sock_tx_timestamp' filepath='net/socket.c' line='615' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sock_tx_timestamp'>
+        <parameter type-id='d315442e' name='tsflags' filepath='net/socket.c' line='615' column='1'/>
+        <parameter type-id='474e5dcc' name='tx_flags' filepath='net/socket.c' line='615' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kernel_sendmsg' mangled-name='kernel_sendmsg' filepath='net/socket.c' line='674' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_sendmsg'>
+        <parameter type-id='13103032' name='sock' filepath='net/socket.c' line='674' column='1'/>
+        <parameter type-id='6b9b777a' name='msg' filepath='net/socket.c' line='674' column='1'/>
+        <parameter type-id='9c68341e' name='vec' filepath='net/socket.c' line='675' column='1'/>
+        <parameter type-id='b59d7dce' name='num' filepath='net/socket.c' line='675' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='net/socket.c' line='675' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__sock_recv_ts_and_drops' mangled-name='__sock_recv_ts_and_drops' filepath='net/socket.c' line='857' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sock_recv_ts_and_drops'>
+        <parameter type-id='6b9b777a' name='msg' filepath='net/socket.c' line='857' column='1'/>
+        <parameter type-id='f772df6e' name='sk' filepath='net/socket.c' line='857' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/socket.c' line='858' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kernel_recvmsg' mangled-name='kernel_recvmsg' filepath='net/socket.c' line='910' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_recvmsg'>
+        <parameter type-id='13103032' name='sock' filepath='net/socket.c' line='910' column='1'/>
+        <parameter type-id='6b9b777a' name='msg' filepath='net/socket.c' line='910' column='1'/>
+        <parameter type-id='9c68341e' name='vec' filepath='net/socket.c' line='911' column='1'/>
+        <parameter type-id='b59d7dce' name='num' filepath='net/socket.c' line='911' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='net/socket.c' line='911' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/socket.c' line='911' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_create_kern' mangled-name='sock_create_kern' filepath='net/socket.c' line='1486' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_create_kern'>
+        <parameter type-id='a2bff677' name='net' filepath='net/socket.c' line='1486' column='1'/>
+        <parameter type-id='95e97e5e' name='family' filepath='net/socket.c' line='1486' column='1'/>
+        <parameter type-id='95e97e5e' name='type' filepath='net/socket.c' line='1486' column='1'/>
+        <parameter type-id='95e97e5e' name='protocol' filepath='net/socket.c' line='1486' column='1'/>
+        <parameter type-id='1a7bb5c8' name='res' filepath='net/socket.c' line='1486' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kernel_connect' mangled-name='kernel_connect' filepath='net/socket.c' line='3647' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_connect'>
+        <parameter type-id='13103032' name='sock' filepath='net/socket.c' line='3647' column='1'/>
+        <parameter type-id='5c0abad8' name='addr' filepath='net/socket.c' line='3647' column='1'/>
+        <parameter type-id='95e97e5e' name='addrlen' filepath='net/socket.c' line='3647' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/socket.c' line='3648' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kernel_getsockname' mangled-name='kernel_getsockname' filepath='net/socket.c' line='3663' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_getsockname'>
+        <parameter type-id='13103032' name='sock' filepath='net/socket.c' line='3663' column='1'/>
+        <parameter type-id='5c0abad8' name='addr' filepath='net/socket.c' line='3663' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_sendpage' mangled-name='sock_no_sendpage' filepath='include/net/sock.h' line='1691' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_sendpage'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/tipc/diag.c' language='LANG_C89'>
+      <class-decl name='sock_diag_handler' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/sock_diag.h' line='15' column='1' id='caff6eaa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='8f048e17' visibility='default' filepath='include/linux/sock_diag.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dump' type-id='7710808a' visibility='default' filepath='include/linux/sock_diag.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_info' type-id='48faa79b' visibility='default' filepath='include/linux/sock_diag.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='destroy' type-id='7710808a' visibility='default' filepath='include/linux/sock_diag.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='caff6eaa' const='yes' id='68eec231'/>
+      <pointer-type-def type-id='68eec231' size-in-bits='64' id='4adb9081'/>
+      <pointer-type-def type-id='26e0d4f0' size-in-bits='64' id='7710808a'/>
+      <pointer-type-def type-id='5f92413f' size-in-bits='64' id='48faa79b'/>
+      <function-decl name='sock_diag_unregister' mangled-name='sock_diag_unregister' filepath='include/linux/sock_diag.h' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_diag_unregister'>
+        <parameter type-id='4adb9081'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sock_diag_save_cookie' mangled-name='sock_diag_save_cookie' filepath='include/linux/sock_diag.h' line='30' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_diag_save_cookie'>
+        <parameter type-id='f772df6e'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sock_diag_register' mangled-name='sock_diag_register' filepath='include/linux/sock_diag.h' line='22' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_diag_register'>
+        <parameter type-id='4adb9081'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='26e0d4f0'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='c2074578'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5f92413f'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f772df6e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/vmw_vsock/virtio_transport_common.c' language='LANG_C89'>
+      <function-decl name='virtio_transport_stream_dequeue' mangled-name='virtio_transport_stream_dequeue' filepath='net/vmw_vsock/virtio_transport_common.c' line='351' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_stream_dequeue'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='351' column='1'/>
+        <parameter type-id='6b9b777a' name='msg' filepath='net/vmw_vsock/virtio_transport_common.c' line='352' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/vmw_vsock/virtio_transport_common.c' line='353' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/vmw_vsock/virtio_transport_common.c' line='353' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='virtio_transport_dgram_dequeue' mangled-name='virtio_transport_dgram_dequeue' filepath='net/vmw_vsock/virtio_transport_common.c' line='363' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_dgram_dequeue'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='363' column='1'/>
+        <parameter type-id='6b9b777a' name='msg' filepath='net/vmw_vsock/virtio_transport_common.c' line='364' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/vmw_vsock/virtio_transport_common.c' line='365' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/vmw_vsock/virtio_transport_common.c' line='365' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_stream_has_data' mangled-name='virtio_transport_stream_has_data' filepath='net/vmw_vsock/virtio_transport_common.c' line='371' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_stream_has_data'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='371' column='1'/>
+        <return type-id='9b7c55ef'/>
+      </function-decl>
+      <function-decl name='virtio_transport_stream_has_space' mangled-name='virtio_transport_stream_has_space' filepath='net/vmw_vsock/virtio_transport_common.c' line='396' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_stream_has_space'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='396' column='1'/>
+        <return type-id='9b7c55ef'/>
+      </function-decl>
+      <function-decl name='virtio_transport_do_socket_init' mangled-name='virtio_transport_do_socket_init' filepath='net/vmw_vsock/virtio_transport_common.c' line='409' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_do_socket_init'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='409' column='1'/>
+        <parameter type-id='ecb0ce18' name='psk' filepath='net/vmw_vsock/virtio_transport_common.c' line='410' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_buffer_size' mangled-name='virtio_transport_notify_buffer_size' filepath='net/vmw_vsock/virtio_transport_common.c' line='440' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_buffer_size'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='440' column='1'/>
+        <parameter type-id='3df9fd28' name='val' filepath='net/vmw_vsock/virtio_transport_common.c' line='440' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_poll_in' mangled-name='virtio_transport_notify_poll_in' filepath='net/vmw_vsock/virtio_transport_common.c' line='455' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_poll_in'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='455' column='1'/>
+        <parameter type-id='b59d7dce' name='target' filepath='net/vmw_vsock/virtio_transport_common.c' line='456' column='1'/>
+        <parameter type-id='d8e6b335' name='data_ready_now' filepath='net/vmw_vsock/virtio_transport_common.c' line='457' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_poll_out' mangled-name='virtio_transport_notify_poll_out' filepath='net/vmw_vsock/virtio_transport_common.c' line='469' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_poll_out'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='469' column='1'/>
+        <parameter type-id='b59d7dce' name='target' filepath='net/vmw_vsock/virtio_transport_common.c' line='470' column='1'/>
+        <parameter type-id='d8e6b335' name='space_avail_now' filepath='net/vmw_vsock/virtio_transport_common.c' line='471' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_recv_init' mangled-name='virtio_transport_notify_recv_init' filepath='net/vmw_vsock/virtio_transport_common.c' line='485' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_recv_init'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='485' column='1'/>
+        <parameter type-id='b59d7dce' name='target' filepath='net/vmw_vsock/virtio_transport_common.c' line='486' column='1'/>
+        <parameter type-id='c777e389' name='data' filepath='net/vmw_vsock/virtio_transport_common.c' line='486' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_recv_pre_block' mangled-name='virtio_transport_notify_recv_pre_block' filepath='net/vmw_vsock/virtio_transport_common.c' line='492' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_recv_pre_block'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='492' column='1'/>
+        <parameter type-id='b59d7dce' name='target' filepath='net/vmw_vsock/virtio_transport_common.c' line='493' column='1'/>
+        <parameter type-id='c777e389' name='data' filepath='net/vmw_vsock/virtio_transport_common.c' line='493' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_recv_pre_dequeue' mangled-name='virtio_transport_notify_recv_pre_dequeue' filepath='net/vmw_vsock/virtio_transport_common.c' line='499' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_recv_pre_dequeue'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='499' column='1'/>
+        <parameter type-id='b59d7dce' name='target' filepath='net/vmw_vsock/virtio_transport_common.c' line='500' column='1'/>
+        <parameter type-id='c777e389' name='data' filepath='net/vmw_vsock/virtio_transport_common.c' line='500' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_recv_post_dequeue' mangled-name='virtio_transport_notify_recv_post_dequeue' filepath='net/vmw_vsock/virtio_transport_common.c' line='506' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_recv_post_dequeue'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='506' column='1'/>
+        <parameter type-id='b59d7dce' name='target' filepath='net/vmw_vsock/virtio_transport_common.c' line='507' column='1'/>
+        <parameter type-id='79a0948f' name='copied' filepath='net/vmw_vsock/virtio_transport_common.c' line='507' column='1'/>
+        <parameter type-id='b50a4934' name='data_read' filepath='net/vmw_vsock/virtio_transport_common.c' line='507' column='1'/>
+        <parameter type-id='c777e389' name='data' filepath='net/vmw_vsock/virtio_transport_common.c' line='508' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_send_init' mangled-name='virtio_transport_notify_send_init' filepath='net/vmw_vsock/virtio_transport_common.c' line='514' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_send_init'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='514' column='1'/>
+        <parameter type-id='6f074813' name='data' filepath='net/vmw_vsock/virtio_transport_common.c' line='515' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_send_pre_block' mangled-name='virtio_transport_notify_send_pre_block' filepath='net/vmw_vsock/virtio_transport_common.c' line='521' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_send_pre_block'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='521' column='1'/>
+        <parameter type-id='6f074813' name='data' filepath='net/vmw_vsock/virtio_transport_common.c' line='522' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_send_pre_enqueue' mangled-name='virtio_transport_notify_send_pre_enqueue' filepath='net/vmw_vsock/virtio_transport_common.c' line='528' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_send_pre_enqueue'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='528' column='1'/>
+        <parameter type-id='6f074813' name='data' filepath='net/vmw_vsock/virtio_transport_common.c' line='529' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_send_post_enqueue' mangled-name='virtio_transport_notify_send_post_enqueue' filepath='net/vmw_vsock/virtio_transport_common.c' line='535' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_send_post_enqueue'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='535' column='1'/>
+        <parameter type-id='79a0948f' name='written' filepath='net/vmw_vsock/virtio_transport_common.c' line='536' column='1'/>
+        <parameter type-id='6f074813' name='data' filepath='net/vmw_vsock/virtio_transport_common.c' line='536' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_stream_rcvhiwat' mangled-name='virtio_transport_stream_rcvhiwat' filepath='net/vmw_vsock/virtio_transport_common.c' line='542' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_stream_rcvhiwat'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='542' column='1'/>
+        <return type-id='91ce1af9'/>
+      </function-decl>
+      <function-decl name='virtio_transport_stream_is_active' mangled-name='virtio_transport_stream_is_active' filepath='net/vmw_vsock/virtio_transport_common.c' line='548' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_stream_is_active'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='548' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='virtio_transport_stream_allow' mangled-name='virtio_transport_stream_allow' filepath='net/vmw_vsock/virtio_transport_common.c' line='554' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_stream_allow'>
+        <parameter type-id='19c2251e' name='cid' filepath='net/vmw_vsock/virtio_transport_common.c' line='554' column='1'/>
+        <parameter type-id='19c2251e' name='port' filepath='net/vmw_vsock/virtio_transport_common.c' line='554' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='virtio_transport_dgram_bind' mangled-name='virtio_transport_dgram_bind' filepath='net/vmw_vsock/virtio_transport_common.c' line='560' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_dgram_bind'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='560' column='1'/>
+        <parameter type-id='b6a6ca60' name='addr' filepath='net/vmw_vsock/virtio_transport_common.c' line='561' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_dgram_allow' mangled-name='virtio_transport_dgram_allow' filepath='net/vmw_vsock/virtio_transport_common.c' line='567' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_dgram_allow'>
+        <parameter type-id='19c2251e' name='cid' filepath='net/vmw_vsock/virtio_transport_common.c' line='567' column='1'/>
+        <parameter type-id='19c2251e' name='port' filepath='net/vmw_vsock/virtio_transport_common.c' line='567' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='virtio_transport_connect' mangled-name='virtio_transport_connect' filepath='net/vmw_vsock/virtio_transport_common.c' line='573' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_connect'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='573' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_shutdown' mangled-name='virtio_transport_shutdown' filepath='net/vmw_vsock/virtio_transport_common.c' line='585' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_shutdown'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='585' column='1'/>
+        <parameter type-id='95e97e5e' name='mode' filepath='net/vmw_vsock/virtio_transport_common.c' line='585' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_dgram_enqueue' mangled-name='virtio_transport_dgram_enqueue' filepath='net/vmw_vsock/virtio_transport_common.c' line='602' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_dgram_enqueue'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='602' column='1'/>
+        <parameter type-id='b6a6ca60' name='remote_addr' filepath='net/vmw_vsock/virtio_transport_common.c' line='603' column='1'/>
+        <parameter type-id='6b9b777a' name='msg' filepath='net/vmw_vsock/virtio_transport_common.c' line='604' column='1'/>
+        <parameter type-id='b59d7dce' name='dgram_len' filepath='net/vmw_vsock/virtio_transport_common.c' line='605' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_stream_enqueue' mangled-name='virtio_transport_stream_enqueue' filepath='net/vmw_vsock/virtio_transport_common.c' line='612' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_stream_enqueue'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='612' column='1'/>
+        <parameter type-id='6b9b777a' name='msg' filepath='net/vmw_vsock/virtio_transport_common.c' line='613' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/vmw_vsock/virtio_transport_common.c' line='614' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='virtio_transport_destruct' mangled-name='virtio_transport_destruct' filepath='net/vmw_vsock/virtio_transport_common.c' line='628' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_destruct'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='628' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtio_transport_release' mangled-name='virtio_transport_release' filepath='net/vmw_vsock/virtio_transport_common.c' line='779' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_release'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='779' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/wireless/core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='5b11c736' size-in-bits='1152' id='b7cdf389'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='c0e72c08' size-in-bits='336' id='113a8bef'>
+        <subrange length='21' type-id='7ff19f0f' id='01cc7eb2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0f438714' size-in-bits='128' id='62f1ceae'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='167153b5' size-in-bits='infinite' id='42a2e39d'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='24' id='4df9d64a'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <class-decl name='cfg80211_conn' size-in-bits='3264' is-struct='yes' visibility='default' filepath='net/wireless/sme.c' line='31' column='1' id='43420c6a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='params' type-id='1291defd' visibility='default' filepath='net/wireless/sme.c' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='state' type-id='08f5ca1d' visibility='default' filepath='net/wireless/sme.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2976'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='net/wireless/sme.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3024'>
+          <var-decl name='prev_bssid' type-id='cf1a4160' visibility='default' filepath='net/wireless/sme.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='net/wireless/sme.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='net/wireless/sme.c' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='auto_auth' type-id='b50a4934' visibility='default' filepath='net/wireless/sme.c' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3208'>
+          <var-decl name='prev_bssid_valid' type-id='b50a4934' visibility='default' filepath='net/wireless/sme.c' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='ec00acfb' size-in-bits='infinite' id='14cad687'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a9d5f761' size-in-bits='infinite' id='9195bab1'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3cad9e1a' size-in-bits='256' id='641ce2e8'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='86d70780' size-in-bits='256' id='00286dfe'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='45947737' size-in-bits='1024' id='248874df'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='6d8d26fb' size-in-bits='infinite' id='a099b86f'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a7832498' size-in-bits='128' id='68c8d0cb'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a7832498' size-in-bits='infinite' id='a4bfb48f'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='fdbf7a0f' size-in-bits='32' id='da004b74'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='80' id='097504df'>
+        <subrange length='10' type-id='7ff19f0f' id='487da03a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='88' id='4d77ae82'>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='200' id='5030b3c3'>
+        <subrange length='25' type-id='7ff19f0f' id='41d5ddce'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='256' id='e3dc4fdb'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='f9b06939' size-in-bits='416' id='b726c152'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <class-decl name='wiphy' size-in-bits='11008' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4571' column='1' id='68523a94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='perm_addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='4575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='addr_mask' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='4576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='addresses' type-id='01b378ab' visibility='default' filepath='include/net/cfg80211.h' line='4578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mgmt_stypes' type-id='0cda9080' visibility='default' filepath='include/net/cfg80211.h' line='4580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='iface_combinations' type-id='fa32a449' visibility='default' filepath='include/net/cfg80211.h' line='4582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='n_iface_combinations' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='software_iftypes' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='n_addresses' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='interface_modes' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='max_acl_mac_addrs' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='regulatory_flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='features' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ext_features' type-id='8f1320db' visibility='default' filepath='include/net/cfg80211.h' line='4594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ap_sme_capa' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='signal_type' type-id='b8524648' visibility='default' filepath='include/net/cfg80211.h' line='4598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bss_priv_size' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='max_scan_ssids' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='680'>
+          <var-decl name='max_sched_scan_reqs' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='688'>
+          <var-decl name='max_sched_scan_ssids' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='696'>
+          <var-decl name='max_match_sets' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='max_scan_ie_len' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='720'>
+          <var-decl name='max_sched_scan_ie_len' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_sched_scan_plans' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='max_sched_scan_plan_interval' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='max_sched_scan_plan_iterations' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='n_cipher_suites' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='cipher_suites' type-id='aded214c' visibility='default' filepath='include/net/cfg80211.h' line='4612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='n_akm_suites' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='akm_suites' type-id='aded214c' visibility='default' filepath='include/net/cfg80211.h' line='4615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='retry_short' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1096'>
+          <var-decl name='retry_long' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='frag_threshold' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rts_threshold' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='coverage_class' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1192'>
+          <var-decl name='fw_version' type-id='16dc656a' visibility='default' filepath='include/net/cfg80211.h' line='4623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='hw_version' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='wowlan' type-id='78a34b70' visibility='default' filepath='include/net/cfg80211.h' line='4627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='wowlan_config' type-id='9d025b00' visibility='default' filepath='include/net/cfg80211.h' line='4628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='max_remain_on_channel_duration' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1680'>
+          <var-decl name='max_num_pmkids' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='available_antennas_tx' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='available_antennas_rx' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='probe_resp_offload' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='extended_capabilities' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='4645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='extended_capabilities_mask' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='4645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='extended_capabilities_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='iftype_ext_capab' type-id='3ca25343' visibility='default' filepath='include/net/cfg80211.h' line='4648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='num_iftype_ext_capab' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='4649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='privid' type-id='eaa32e2f' visibility='default' filepath='include/net/cfg80211.h' line='4656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='bands' type-id='641ce2e8' visibility='default' filepath='include/net/cfg80211.h' line='4658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='reg_notifier' type-id='39ee8359' visibility='default' filepath='include/net/cfg80211.h' line='4661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='regd' type-id='4e819401' visibility='default' filepath='include/net/cfg80211.h' line='4666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/net/cfg80211.h' line='4670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='debugfsdir' type-id='27675065' visibility='default' filepath='include/net/cfg80211.h' line='4676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='ht_capa_mod_mask' type-id='81f1a1a8' visibility='default' filepath='include/net/cfg80211.h' line='4678' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='vht_capa_mod_mask' type-id='fffb07a4' visibility='default' filepath='include/net/cfg80211.h' line='4679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='wdev_list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='4681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='_net' type-id='c9df1e6c' visibility='default' filepath='include/net/cfg80211.h' line='4684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='coalesce' type-id='9ef499bf' visibility='default' filepath='include/net/cfg80211.h' line='4690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='vendor_commands' type-id='41e3f782' visibility='default' filepath='include/net/cfg80211.h' line='4692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='vendor_events' type-id='b188cc4f' visibility='default' filepath='include/net/cfg80211.h' line='4693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='n_vendor_commands' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10592'>
+          <var-decl name='n_vendor_events' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='max_ap_assoc_sta' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10640'>
+          <var-decl name='max_num_csa_counters' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10648'>
+          <var-decl name='max_adj_channel_rssi_comp' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10656'>
+          <var-decl name='bss_select_support' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='nan_supported_bands' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10720'>
+          <var-decl name='txq_limit' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='txq_memory_limit' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10784'>
+          <var-decl name='txq_quantum' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='support_mbssid' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='support_only_he_mbssid' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='pmsr_capa' type-id='5abfac26' visibility='default' filepath='include/net/cfg80211.h' line='4712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='priv' type-id='e84913bd' visibility='default' filepath='include/net/cfg80211.h' line='4714' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mac_address' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='943' column='1' id='6d8d26fb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='944' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_txrx_stypes' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4184' column='1' id='21301fc9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='rx' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4185' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_iface_combination' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4126' column='1' id='1179f27e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='limits' type-id='2fde6795' visibility='default' filepath='include/net/cfg80211.h' line='4131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_different_channels' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_interfaces' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='n_limits' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='beacon_int_infra_match' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='radar_detect_widths' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='radar_detect_regions' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='beacon_int_min_gcd' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4181' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_iface_limit' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4062' column='1' id='e47a5a92'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4063' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='types' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4064' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='cfg80211_signal_type' filepath='include/net/cfg80211.h' line='2143' column='1' id='b8524648'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='CFG80211_SIGNAL_TYPE_NONE' value='0'/>
+        <enumerator name='CFG80211_SIGNAL_TYPE_MBM' value='1'/>
+        <enumerator name='CFG80211_SIGNAL_TYPE_UNSPEC' value='2'/>
+      </enum-decl>
+      <class-decl name='wiphy_wowlan_support' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4240' column='1' id='5bbd300b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='n_patterns' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pattern_max_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pattern_min_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_pkt_offset' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_nd_match_sets' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tcp' type-id='b3ebc0a8' visibility='default' filepath='include/net/cfg80211.h' line='4247' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wiphy_wowlan_tcp_support' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4217' column='1' id='557bca33'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tok' type-id='6a8cbf59' visibility='default' filepath='include/net/cfg80211.h' line='4218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data_payload_max' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='data_interval_max' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wake_payload_max' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='seq' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4222' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nl80211_wowlan_tcp_data_token_feature' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4915' column='1' id='0dd56ffa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bufsize' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4916' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_wowlan' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2734' column='1' id='80126e32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='any' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='disconnect' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='magic_pkt' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='gtk_rekey_failure' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='eap_identity_req' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='four_way_handshake' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='rfkill_release' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='patterns' type-id='1ed3660c' visibility='default' filepath='include/net/cfg80211.h' line='2738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tcp' type-id='e0c1c1b8' visibility='default' filepath='include/net/cfg80211.h' line='2739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='n_patterns' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nd_config' type-id='9e4995c7' visibility='default' filepath='include/net/cfg80211.h' line='2741' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_pkt_pattern' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2675' column='1' id='76959226'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pattern' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pattern_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='pkt_offset' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2678' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_wowlan_tcp' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2700' column='1' id='1752769a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sock' type-id='13103032' visibility='default' filepath='include/net/cfg80211.h' line='2701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='src' type-id='78a133c2' visibility='default' filepath='include/net/cfg80211.h' line='2702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dst' type-id='78a133c2' visibility='default' filepath='include/net/cfg80211.h' line='2702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='src_port' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='dst_port' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='dst_mac' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2704' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='payload_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='payload' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='payload_seq' type-id='d5a1b375' visibility='default' filepath='include/net/cfg80211.h' line='2707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='data_interval' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2708' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='wake_len' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wake_data' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wake_mask' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tokens_size' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2711' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='payload_tok' type-id='2868c21b' visibility='default' filepath='include/net/cfg80211.h' line='2713' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nl80211_wowlan_tcp_data_seq' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4893' column='1' id='d5a1b375'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4894' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nl80211_wowlan_tcp_data_token' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4904' column='1' id='2868c21b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='token_stream' type-id='167619f6' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4906' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_sched_scan_request' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2099' column='1' id='12a2e88f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reqid' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ssids' type-id='a1fa7fb7' visibility='default' filepath='include/net/cfg80211.h' line='2101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n_ssids' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='n_channels' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='scan_width' type-id='95d46034' visibility='default' filepath='include/net/cfg80211.h' line='2104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='match_sets' type-id='ea00c914' visibility='default' filepath='include/net/cfg80211.h' line='2108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='n_match_sets' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='min_rssi_thold' type-id='a7832498' visibility='default' filepath='include/net/cfg80211.h' line='2110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='delay' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='scan_plans' type-id='302e9391' visibility='default' filepath='include/net/cfg80211.h' line='2112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='n_scan_plans' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='mac_addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='mac_addr_mask' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='relative_rssi_set' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='840'>
+          <var-decl name='relative_rssi' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='2119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='rssi_adjust' type-id='5da08e25' visibility='default' filepath='include/net/cfg80211.h' line='2120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='wiphy' type-id='666fb412' visibility='default' filepath='include/net/cfg80211.h' line='2123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dev' type-id='68a2d05c' visibility='default' filepath='include/net/cfg80211.h' line='2124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='scan_start' type-id='7359adad' visibility='default' filepath='include/net/cfg80211.h' line='2125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='report_results' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/cfg80211.h' line='2127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='owner_nlportid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='nl_owner_dead' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='2130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='channels' type-id='14cad687' visibility='default' filepath='include/net/cfg80211.h' line='2133' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_ssid' size-in-bits='264' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1911' column='1' id='0c960fcf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ssid' type-id='e3dc4fdb' visibility='default' filepath='include/net/cfg80211.h' line='1912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ssid_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1913' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_bss_scan_width' filepath='include/uapi/linux/nl80211.h' line='4307' column='1' id='95d46034'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_BSS_CHAN_WIDTH_20' value='0'/>
+        <enumerator name='NL80211_BSS_CHAN_WIDTH_10' value='1'/>
+        <enumerator name='NL80211_BSS_CHAN_WIDTH_5' value='2'/>
+      </enum-decl>
+      <class-decl name='cfg80211_match_set' size-in-bits='480' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2017' column='1' id='7430554e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ssid' type-id='0c960fcf' visibility='default' filepath='include/net/cfg80211.h' line='2018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rssi_thold' type-id='a7832498' visibility='default' filepath='include/net/cfg80211.h' line='2020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='per_band_rssi_thold' type-id='68c8d0cb' visibility='default' filepath='include/net/cfg80211.h' line='2021' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_sched_scan_plan' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2033' column='1' id='391881a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='interval' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2034' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='iterations' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2035' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_bss_select_adjust' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2044' column='1' id='5da08e25'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='band' type-id='3eaa0294' visibility='default' filepath='include/net/cfg80211.h' line='2045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='delta' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='2046' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_band' filepath='include/uapi/linux/nl80211.h' line='4588' column='1' id='3eaa0294'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_BAND_2GHZ' value='0'/>
+        <enumerator name='NL80211_BAND_5GHZ' value='1'/>
+        <enumerator name='NL80211_BAND_60GHZ' value='2'/>
+        <enumerator name='NL80211_BAND_6GHZ' value='3'/>
+        <enumerator name='NUM_NL80211_BANDS' value='4'/>
+      </enum-decl>
+      <class-decl name='wireless_dev' size-in-bits='3584' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4931' column='1' id='3ce3a3ea'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wiphy' type-id='666fb412' visibility='default' filepath='include/net/cfg80211.h' line='4932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iftype' type-id='86505f90' visibility='default' filepath='include/net/cfg80211.h' line='4933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='4936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='netdev' type-id='68a2d05c' visibility='default' filepath='include/net/cfg80211.h' line='4937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='identifier' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mgmt_registrations' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='4941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mgmt_registrations_lock' type-id='fb4018a0' visibility='default' filepath='include/net/cfg80211.h' line='4942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mtx' type-id='925167dc' visibility='default' filepath='include/net/cfg80211.h' line='4944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='use_4addr' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='840'>
+          <var-decl name='is_running' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='848'>
+          <var-decl name='address' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='4948' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ssid' type-id='e3dc4fdb' visibility='default' filepath='include/net/cfg80211.h' line='4951' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ssid_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='mesh_id_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1168'>
+          <var-decl name='mesh_id_up_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='conn' type-id='6dbc8e18' visibility='default' filepath='include/net/cfg80211.h' line='4953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='connect_keys' type-id='561a36db' visibility='default' filepath='include/net/cfg80211.h' line='4954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='conn_bss_type' type-id='cb952348' visibility='default' filepath='include/net/cfg80211.h' line='4955' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='conn_owner_nlportid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4956' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='disconnect_wk' type-id='ef9025d0' visibility='default' filepath='include/net/cfg80211.h' line='4958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='disconnect_bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='4959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='4961' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='event_lock' type-id='fb4018a0' visibility='default' filepath='include/net/cfg80211.h' line='4962' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='current_bss' type-id='1819dec8' visibility='default' filepath='include/net/cfg80211.h' line='4964' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='preset_chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='4965' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='4966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='ibss_fixed' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2632'>
+          <var-decl name='ibss_dfs_possible' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4969' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2640'>
+          <var-decl name='ps' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4971' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='ps_timeout' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4972' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='beacon_interval' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='ap_unexpected_nlportid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='owner_nlportid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4978' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2784'>
+          <var-decl name='nl_owner_dead' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2792'>
+          <var-decl name='cac_started' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='cac_start_time' type-id='7359adad' visibility='default' filepath='include/net/cfg80211.h' line='4982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='cac_time_ms' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='4983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='cqm_config' type-id='ee527710' visibility='default' filepath='include/net/cfg80211.h' line='5001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='pmsr_list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='5003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='pmsr_lock' type-id='fb4018a0' visibility='default' filepath='include/net/cfg80211.h' line='5004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='pmsr_free_wk' type-id='ef9025d0' visibility='default' filepath='include/net/cfg80211.h' line='5005' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_iftype' filepath='include/uapi/linux/nl80211.h' line='2933' column='1' id='86505f90'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_IFTYPE_UNSPECIFIED' value='0'/>
+        <enumerator name='NL80211_IFTYPE_ADHOC' value='1'/>
+        <enumerator name='NL80211_IFTYPE_STATION' value='2'/>
+        <enumerator name='NL80211_IFTYPE_AP' value='3'/>
+        <enumerator name='NL80211_IFTYPE_AP_VLAN' value='4'/>
+        <enumerator name='NL80211_IFTYPE_WDS' value='5'/>
+        <enumerator name='NL80211_IFTYPE_MONITOR' value='6'/>
+        <enumerator name='NL80211_IFTYPE_MESH_POINT' value='7'/>
+        <enumerator name='NL80211_IFTYPE_P2P_CLIENT' value='8'/>
+        <enumerator name='NL80211_IFTYPE_P2P_GO' value='9'/>
+        <enumerator name='NL80211_IFTYPE_P2P_DEVICE' value='10'/>
+        <enumerator name='NL80211_IFTYPE_OCB' value='11'/>
+        <enumerator name='NL80211_IFTYPE_NAN' value='12'/>
+        <enumerator name='NUM_NL80211_IFTYPES' value='13'/>
+        <enumerator name='NL80211_IFTYPE_MAX' value='12'/>
+      </enum-decl>
+      <class-decl name='cfg80211_cached_keys' size-in-bits='1472' is-struct='yes' visibility='default' filepath='net/wireless/core.h' line='273' column='1' id='1540019b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='params' type-id='248874df' visibility='default' filepath='net/wireless/core.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='data' type-id='b726c152' visibility='default' filepath='net/wireless/core.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='def' type-id='95e97e5e' visibility='default' filepath='net/wireless/core.h' line='276' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key_params' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='595' column='1' id='45947737'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seq' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='key_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='seq_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cipher' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='mode' type-id='30430d28' visibility='default' filepath='include/net/cfg80211.h' line='601' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_key_mode' filepath='include/uapi/linux/nl80211.h' line='4262' column='1' id='30430d28'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_KEY_RX_TX' value='0'/>
+        <enumerator name='NL80211_KEY_NO_TX' value='1'/>
+        <enumerator name='NL80211_KEY_SET_TX' value='2'/>
+      </enum-decl>
+      <enum-decl name='ieee80211_bss_type' filepath='include/net/cfg80211.h' line='207' column='1' id='cb952348'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_BSS_TYPE_ESS' value='0'/>
+        <enumerator name='IEEE80211_BSS_TYPE_PBSS' value='1'/>
+        <enumerator name='IEEE80211_BSS_TYPE_IBSS' value='2'/>
+        <enumerator name='IEEE80211_BSS_TYPE_MBSS' value='3'/>
+        <enumerator name='IEEE80211_BSS_TYPE_ANY' value='4'/>
+      </enum-decl>
+      <class-decl name='cfg80211_internal_bss' size-in-bits='1600' is-struct='yes' visibility='default' filepath='net/wireless/core.h' line='152' column='1' id='2baffd9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='net/wireless/core.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hidden_list' type-id='72f469ec' visibility='default' filepath='net/wireless/core.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rbn' type-id='2a8a6332' visibility='default' filepath='net/wireless/core.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ts_boottime' type-id='91ce1af9' visibility='default' filepath='net/wireless/core.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ts' type-id='7359adad' visibility='default' filepath='net/wireless/core.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='refcount' type-id='7359adad' visibility='default' filepath='net/wireless/core.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='hold' type-id='49178f86' visibility='default' filepath='net/wireless/core.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='parent_tsf' type-id='91ce1af9' visibility='default' filepath='net/wireless/core.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='parent_bssid' type-id='cf1a4160' visibility='default' filepath='net/wireless/core.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pub' type-id='5f145050' visibility='default' filepath='net/wireless/core.h' line='174' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_bss' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2231' column='1' id='5f145050'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channel' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='2232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='scan_width' type-id='95d46034' visibility='default' filepath='include/net/cfg80211.h' line='2233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ies' type-id='f344e815' visibility='default' filepath='include/net/cfg80211.h' line='2235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='beacon_ies' type-id='f344e815' visibility='default' filepath='include/net/cfg80211.h' line='2236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='proberesp_ies' type-id='f344e815' visibility='default' filepath='include/net/cfg80211.h' line='2237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hidden_beacon_bss' type-id='bda81d86' visibility='default' filepath='include/net/cfg80211.h' line='2239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='transmitted_bss' type-id='bda81d86' visibility='default' filepath='include/net/cfg80211.h' line='2240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nontrans_list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='2241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='signal' type-id='a7832498' visibility='default' filepath='include/net/cfg80211.h' line='2243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='beacon_interval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='624'>
+          <var-decl name='capability' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='688'>
+          <var-decl name='chains' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='696'>
+          <var-decl name='chain_signal' type-id='da004b74' visibility='default' filepath='include/net/cfg80211.h' line='2250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='728'>
+          <var-decl name='bssid_index' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_bssid_indicator' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='priv' type-id='29c3368c' visibility='default' filepath='include/net/cfg80211.h' line='2255' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_channel' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='148' column='1' id='839b249b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='band' type-id='3eaa0294' visibility='default' filepath='include/net/cfg80211.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='center_freq' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='freq_offset' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='hw_value' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_antenna_gain' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_power' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_reg_power' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='beacon_found' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='orig_flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='orig_mag' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='orig_mpwr' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='dfs_state' type-id='996e1634' visibility='default' filepath='include/net/cfg80211.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dfs_state_entered' type-id='7359adad' visibility='default' filepath='include/net/cfg80211.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dfs_cac_ms' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_dfs_state' filepath='include/uapi/linux/nl80211.h' line='5746' column='1' id='996e1634'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_DFS_USABLE' value='0'/>
+        <enumerator name='NL80211_DFS_UNAVAILABLE' value='1'/>
+        <enumerator name='NL80211_DFS_AVAILABLE' value='2'/>
+      </enum-decl>
+      <class-decl name='cfg80211_bss_ies' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2188' column='1' id='7eedb398'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tsf' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/cfg80211.h' line='2190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='from_beacon' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='232'>
+          <var-decl name='data' type-id='29c3368c' visibility='default' filepath='include/net/cfg80211.h' line='2193' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_chan_def' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='617' column='1' id='e07d69c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chan' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='width' type-id='e043cccc' visibility='default' filepath='include/net/cfg80211.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='center_freq1' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='center_freq2' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='edmg' type-id='d87e6929' visibility='default' filepath='include/net/cfg80211.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='freq1_offset' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='623' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_chan_width' filepath='include/uapi/linux/nl80211.h' line='4287' column='1' id='e043cccc'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_CHAN_WIDTH_20_NOHT' value='0'/>
+        <enumerator name='NL80211_CHAN_WIDTH_20' value='1'/>
+        <enumerator name='NL80211_CHAN_WIDTH_40' value='2'/>
+        <enumerator name='NL80211_CHAN_WIDTH_80' value='3'/>
+        <enumerator name='NL80211_CHAN_WIDTH_80P80' value='4'/>
+        <enumerator name='NL80211_CHAN_WIDTH_160' value='5'/>
+        <enumerator name='NL80211_CHAN_WIDTH_5' value='6'/>
+        <enumerator name='NL80211_CHAN_WIDTH_10' value='7'/>
+      </enum-decl>
+      <class-decl name='ieee80211_edmg' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='387' column='1' id='d87e6929'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channels' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bw_config' type-id='51403231' visibility='default' filepath='include/net/cfg80211.h' line='389' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_edmg_bw_config' filepath='include/net/cfg80211.h' line='359' column='1' id='51403231'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_4' value='4'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_5' value='5'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_6' value='6'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_7' value='7'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_8' value='8'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_9' value='9'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_10' value='10'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_11' value='11'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_12' value='12'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_13' value='13'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_14' value='14'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_15' value='15'/>
+      </enum-decl>
+      <class-decl name='cfg80211_cqm_config' size-in-bits='96' is-struct='yes' visibility='default' filepath='net/wireless/core.h' line='290' column='1' id='2e77eb82'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rssi_hyst' type-id='19c2251e' visibility='default' filepath='net/wireless/core.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='last_rssi_event_value' type-id='a7832498' visibility='default' filepath='net/wireless/core.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_rssi_thresholds' type-id='95e97e5e' visibility='default' filepath='net/wireless/core.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='rssi_thresholds' type-id='a4bfb48f' visibility='default' filepath='net/wireless/core.h' line='294' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wiphy_iftype_ext_capab' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4354' column='1' id='378a6c5a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iftype' type-id='86505f90' visibility='default' filepath='include/net/cfg80211.h' line='4355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='extended_capabilities' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='4356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='extended_capabilities_mask' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='4357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='extended_capabilities_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4358' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_supported_band' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='415' column='1' id='f7e1259c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channels' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bitrates' type-id='4343d470' visibility='default' filepath='include/net/cfg80211.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='band' type-id='3eaa0294' visibility='default' filepath='include/net/cfg80211.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='n_channels' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='n_bitrates' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ht_cap' type-id='a041735c' visibility='default' filepath='include/net/cfg80211.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='vht_cap' type-id='c994e9c8' visibility='default' filepath='include/net/cfg80211.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='edmg_cap' type-id='d87e6929' visibility='default' filepath='include/net/cfg80211.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='n_iftype_data' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='iftype_data' type-id='e76a43c4' visibility='default' filepath='include/net/cfg80211.h' line='425' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_rate' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='245' column='1' id='ce30b5d2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bitrate' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='hw_value' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hw_value_short' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='248' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sta_ht_cap' size-in-bits='176' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='276' column='1' id='a041735c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ht_supported' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='ampdu_factor' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ampdu_density' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='mcs' type-id='835fe4c6' visibility='default' filepath='include/net/cfg80211.h' line='281' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_mcs_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1285' column='1' id='835fe4c6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_mask' type-id='097504df' visibility='default' filepath='include/linux/ieee80211.h' line='1286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='rx_highest' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tx_params' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='reserved' type-id='930ea9f9' visibility='default' filepath='include/linux/ieee80211.h' line='1289' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sta_vht_cap' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='294' column='1' id='c994e9c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vht_supported' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cap' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vht_mcs' type-id='830056b5' visibility='default' filepath='include/net/cfg80211.h' line='297' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_vht_mcs_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1492' column='1' id='830056b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_mcs_map' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='rx_highest' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tx_mcs_map' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='tx_highest' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1496' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sband_iftype_data' size-in-bits='480' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='332' column='1' id='1ffb3281'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='types_mask' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='he_cap' type-id='0056bfcb' visibility='default' filepath='include/net/cfg80211.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='he_6ghz_capa' type-id='192864a5' visibility='default' filepath='include/net/cfg80211.h' line='335' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sta_he_cap' size-in-bits='440' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='313' column='1' id='0056bfcb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='has_he' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='he_cap_elem' type-id='4dffc3f2' visibility='default' filepath='include/net/cfg80211.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='he_mcs_nss_supp' type-id='b1f4f4c7' visibility='default' filepath='include/net/cfg80211.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='ppe_thres' type-id='5030b3c3' visibility='default' filepath='include/net/cfg80211.h' line='317' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_he_cap_elem' size-in-bits='136' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1578' column='1' id='4dffc3f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mac_cap_info' type-id='cf1a4160' visibility='default' filepath='include/linux/ieee80211.h' line='1579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='phy_cap_info' type-id='4d77ae82' visibility='default' filepath='include/linux/ieee80211.h' line='1580' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_he_mcs_nss_supp' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1625' column='1' id='b1f4f4c7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_mcs_80' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='tx_mcs_80' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rx_mcs_160' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='tx_mcs_160' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_mcs_80p80' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='tx_mcs_80p80' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1631' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_he_6ghz_capa' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='3160' column='1' id='192864a5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capa' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='3162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulatory_request' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='77' column='1' id='8c70c365'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/regulatory.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wiphy_idx' type-id='95e97e5e' visibility='default' filepath='include/net/regulatory.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='initiator' type-id='790cc131' visibility='default' filepath='include/net/regulatory.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='user_reg_hint_type' type-id='b833d4ac' visibility='default' filepath='include/net/regulatory.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='alpha2' type-id='4df9d64a' visibility='default' filepath='include/net/regulatory.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dfs_region' type-id='5a85c988' visibility='default' filepath='include/net/regulatory.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='intersect' type-id='b50a4934' visibility='default' filepath='include/net/regulatory.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='processed' type-id='b50a4934' visibility='default' filepath='include/net/regulatory.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='country_ie_env' type-id='e0964c8a' visibility='default' filepath='include/net/regulatory.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/regulatory.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_reg_initiator' filepath='include/uapi/linux/nl80211.h' line='3643' column='1' id='790cc131'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_REGDOM_SET_BY_CORE' value='0'/>
+        <enumerator name='NL80211_REGDOM_SET_BY_USER' value='1'/>
+        <enumerator name='NL80211_REGDOM_SET_BY_DRIVER' value='2'/>
+        <enumerator name='NL80211_REGDOM_SET_BY_COUNTRY_IE' value='3'/>
+      </enum-decl>
+      <enum-decl name='nl80211_user_reg_hint_type' filepath='include/uapi/linux/nl80211.h' line='3852' column='1' id='b833d4ac'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_USER_REG_HINT_USER' value='0'/>
+        <enumerator name='NL80211_USER_REG_HINT_CELL_BASE' value='1'/>
+        <enumerator name='NL80211_USER_REG_HINT_INDOOR' value='2'/>
+      </enum-decl>
+      <enum-decl name='nl80211_dfs_regions' filepath='include/uapi/linux/nl80211.h' line='3828' column='1' id='5a85c988'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_DFS_UNSET' value='0'/>
+        <enumerator name='NL80211_DFS_FCC' value='1'/>
+        <enumerator name='NL80211_DFS_ETSI' value='2'/>
+        <enumerator name='NL80211_DFS_JP' value='3'/>
+      </enum-decl>
+      <enum-decl name='environment_cap' filepath='include/net/regulatory.h' line='31' column='1' id='e0964c8a'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ENVIRON_ANY' value='0'/>
+        <enumerator name='ENVIRON_INDOOR' value='1'/>
+        <enumerator name='ENVIRON_OUTDOOR' value='2'/>
+      </enum-decl>
+      <class-decl name='ieee80211_regdomain' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='226' column='1' id='5c28f25e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/regulatory.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n_reg_rules' type-id='19c2251e' visibility='default' filepath='include/net/regulatory.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='alpha2' type-id='4df9d64a' visibility='default' filepath='include/net/regulatory.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dfs_region' type-id='5a85c988' visibility='default' filepath='include/net/regulatory.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='reg_rules' type-id='9195bab1' visibility='default' filepath='include/net/regulatory.h' line='231' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_reg_rule' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='217' column='1' id='a9d5f761'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='freq_range' type-id='a81053d4' visibility='default' filepath='include/net/regulatory.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='power_rule' type-id='736b3d64' visibility='default' filepath='include/net/regulatory.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='wmm_rule' type-id='8eec5cae' visibility='default' filepath='include/net/regulatory.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/regulatory.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dfs_cac_ms' type-id='19c2251e' visibility='default' filepath='include/net/regulatory.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='has_wmm' type-id='b50a4934' visibility='default' filepath='include/net/regulatory.h' line='223' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_freq_range' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='181' column='1' id='a81053d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_freq_khz' type-id='19c2251e' visibility='default' filepath='include/net/regulatory.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='end_freq_khz' type-id='19c2251e' visibility='default' filepath='include/net/regulatory.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_bandwidth_khz' type-id='19c2251e' visibility='default' filepath='include/net/regulatory.h' line='184' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_power_rule' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='187' column='1' id='736b3d64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_antenna_gain' type-id='19c2251e' visibility='default' filepath='include/net/regulatory.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_eirp' type-id='19c2251e' visibility='default' filepath='include/net/regulatory.h' line='189' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_wmm_rule' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='212' column='1' id='8eec5cae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='client' type-id='00286dfe' visibility='default' filepath='include/net/regulatory.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ap' type-id='00286dfe' visibility='default' filepath='include/net/regulatory.h' line='214' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_wmm_ac' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/regulatory.h' line='205' column='1' id='86d70780'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cw_min' type-id='1dc6a898' visibility='default' filepath='include/net/regulatory.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='cw_max' type-id='1dc6a898' visibility='default' filepath='include/net/regulatory.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cot' type-id='1dc6a898' visibility='default' filepath='include/net/regulatory.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='aifsn' type-id='f9b06939' visibility='default' filepath='include/net/regulatory.h' line='209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_ht_cap' size-in-bits='208' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1319' column='1' id='16e7829f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ampdu_params_info' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='mcs' type-id='835fe4c6' visibility='default' filepath='include/linux/ieee80211.h' line='1324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='extended_ht_cap_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='tx_BF_cap_info' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='antenna_selection_info' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1328' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_vht_cap' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1535' column='1' id='2eec6999'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vht_cap_info' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='supp_mcs' type-id='830056b5' visibility='default' filepath='include/linux/ieee80211.h' line='1537' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wiphy_coalesce_support' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4260' column='1' id='7124a2a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='n_rules' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_delay' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_patterns' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pattern_max_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pattern_min_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_pkt_offset' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4266' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wiphy_vendor_command' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4331' column='1' id='fc206ed1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='info' type-id='e223f110' visibility='default' filepath='include/net/cfg80211.h' line='4332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='doit' type-id='a9032da3' visibility='default' filepath='include/net/cfg80211.h' line='4334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dumpit' type-id='dcf81beb' visibility='default' filepath='include/net/cfg80211.h' line='4336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='policy' type-id='109cdb66' visibility='default' filepath='include/net/cfg80211.h' line='4339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='maxattr' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='4340' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nl80211_vendor_cmd_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/nl80211.h' line='5816' column='1' id='e223f110'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vendor_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='5817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='subcmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='5818' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_pmsr_capabilities' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4379' column='1' id='e9bb2749'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_peers' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='4380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='report_ap_tsf' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='randomize_mac_addr' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ftm' type-id='0de9002c' visibility='default' filepath='include/net/cfg80211.h' line='4394' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/cfg80211.h' line='4384' column='1' id='0de9002c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='preambles' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bandwidths' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_bursts_exponent' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='4387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='max_ftms_per_burst' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='supported' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='asap' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='non_asap' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='request_lci' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='request_civicloc' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4393' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_ops' size-in-bits='6976' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3662' column='1' id='8035b730'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='suspend' type-id='48b6113f' visibility='default' filepath='include/net/cfg80211.h' line='3663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='resume' type-id='518c633a' visibility='default' filepath='include/net/cfg80211.h' line='3664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_wakeup' type-id='dea9803a' visibility='default' filepath='include/net/cfg80211.h' line='3665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='add_virtual_intf' type-id='d0299fd8' visibility='default' filepath='include/net/cfg80211.h' line='3667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='del_virtual_intf' type-id='242a426a' visibility='default' filepath='include/net/cfg80211.h' line='3672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='change_virtual_intf' type-id='9e135c1b' visibility='default' filepath='include/net/cfg80211.h' line='3674' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='add_key' type-id='ad666b67' visibility='default' filepath='include/net/cfg80211.h' line='3679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_key' type-id='a9103ada' visibility='default' filepath='include/net/cfg80211.h' line='3682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='del_key' type-id='5bb4e7cf' visibility='default' filepath='include/net/cfg80211.h' line='3686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_default_key' type-id='3e5d8250' visibility='default' filepath='include/net/cfg80211.h' line='3688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_default_mgmt_key' type-id='a1fc1aec' visibility='default' filepath='include/net/cfg80211.h' line='3691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='start_ap' type-id='c64be45e' visibility='default' filepath='include/net/cfg80211.h' line='3695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='change_beacon' type-id='2ae5992c' visibility='default' filepath='include/net/cfg80211.h' line='3697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='stop_ap' type-id='85316748' visibility='default' filepath='include/net/cfg80211.h' line='3699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='add_station' type-id='cf6c6fcb' visibility='default' filepath='include/net/cfg80211.h' line='3702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='del_station' type-id='ce1d0c65' visibility='default' filepath='include/net/cfg80211.h' line='3705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='change_station' type-id='cf6c6fcb' visibility='default' filepath='include/net/cfg80211.h' line='3707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='get_station' type-id='8ae117f3' visibility='default' filepath='include/net/cfg80211.h' line='3710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='dump_station' type-id='ecbadb29' visibility='default' filepath='include/net/cfg80211.h' line='3712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='add_mpath' type-id='117ab738' visibility='default' filepath='include/net/cfg80211.h' line='3715' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='del_mpath' type-id='e8733840' visibility='default' filepath='include/net/cfg80211.h' line='3717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='change_mpath' type-id='117ab738' visibility='default' filepath='include/net/cfg80211.h' line='3719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='get_mpath' type-id='b916eba5' visibility='default' filepath='include/net/cfg80211.h' line='3721' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='dump_mpath' type-id='add0c1a4' visibility='default' filepath='include/net/cfg80211.h' line='3723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='get_mpp' type-id='b916eba5' visibility='default' filepath='include/net/cfg80211.h' line='3726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='dump_mpp' type-id='add0c1a4' visibility='default' filepath='include/net/cfg80211.h' line='3728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='get_mesh_config' type-id='f1dac4d6' visibility='default' filepath='include/net/cfg80211.h' line='3731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='update_mesh_config' type-id='39979680' visibility='default' filepath='include/net/cfg80211.h' line='3734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='join_mesh' type-id='840c4ecb' visibility='default' filepath='include/net/cfg80211.h' line='3737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='leave_mesh' type-id='85316748' visibility='default' filepath='include/net/cfg80211.h' line='3740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='join_ocb' type-id='8afbb034' visibility='default' filepath='include/net/cfg80211.h' line='3742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='leave_ocb' type-id='85316748' visibility='default' filepath='include/net/cfg80211.h' line='3744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='change_bss' type-id='b7589fb3' visibility='default' filepath='include/net/cfg80211.h' line='3746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='set_txq_params' type-id='626eee7d' visibility='default' filepath='include/net/cfg80211.h' line='3749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='libertas_set_mesh_channel' type-id='1ad767ce' visibility='default' filepath='include/net/cfg80211.h' line='3752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='set_monitor_channel' type-id='40a250d9' visibility='default' filepath='include/net/cfg80211.h' line='3756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='scan' type-id='f6d3f940' visibility='default' filepath='include/net/cfg80211.h' line='3759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='abort_scan' type-id='c62f28a1' visibility='default' filepath='include/net/cfg80211.h' line='3761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='auth' type-id='7bc524a3' visibility='default' filepath='include/net/cfg80211.h' line='3763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='assoc' type-id='683d81d8' visibility='default' filepath='include/net/cfg80211.h' line='3765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='deauth' type-id='cdbc24fe' visibility='default' filepath='include/net/cfg80211.h' line='3767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='disassoc' type-id='6430463c' visibility='default' filepath='include/net/cfg80211.h' line='3769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='connect' type-id='b074b5d4' visibility='default' filepath='include/net/cfg80211.h' line='3772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='update_connect_params' type-id='bcf952e3' visibility='default' filepath='include/net/cfg80211.h' line='3774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='disconnect' type-id='bb2acc29' visibility='default' filepath='include/net/cfg80211.h' line='3778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='join_ibss' type-id='ead2af37' visibility='default' filepath='include/net/cfg80211.h' line='3781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='leave_ibss' type-id='85316748' visibility='default' filepath='include/net/cfg80211.h' line='3783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='set_mcast_rate' type-id='c5fb4eb9' visibility='default' filepath='include/net/cfg80211.h' line='3785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='set_wiphy_params' type-id='bba0f341' visibility='default' filepath='include/net/cfg80211.h' line='3788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='set_tx_power' type-id='fffcbb90' visibility='default' filepath='include/net/cfg80211.h' line='3790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='get_tx_power' type-id='030fbe7b' visibility='default' filepath='include/net/cfg80211.h' line='3792' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='set_wds_peer' type-id='e8733840' visibility='default' filepath='include/net/cfg80211.h' line='3795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='rfkill_poll' type-id='03a67bbf' visibility='default' filepath='include/net/cfg80211.h' line='3798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='set_bitrate_mask' type-id='95464a70' visibility='default' filepath='include/net/cfg80211.h' line='3808' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='dump_survey' type-id='95a1c330' visibility='default' filepath='include/net/cfg80211.h' line='3813' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='set_pmksa' type-id='e227fe73' visibility='default' filepath='include/net/cfg80211.h' line='3816' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='del_pmksa' type-id='e227fe73' visibility='default' filepath='include/net/cfg80211.h' line='3818' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='flush_pmksa' type-id='85316748' visibility='default' filepath='include/net/cfg80211.h' line='3820' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='remain_on_channel' type-id='e4776627' visibility='default' filepath='include/net/cfg80211.h' line='3822' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='cancel_remain_on_channel' type-id='6a7c3ba2' visibility='default' filepath='include/net/cfg80211.h' line='3827' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='mgmt_tx' type-id='654eb68b' visibility='default' filepath='include/net/cfg80211.h' line='3831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='mgmt_tx_cancel_wait' type-id='6a7c3ba2' visibility='default' filepath='include/net/cfg80211.h' line='3834' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='set_power_mgmt' type-id='00ca7240' visibility='default' filepath='include/net/cfg80211.h' line='3838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='set_cqm_rssi_config' type-id='d170fd68' visibility='default' filepath='include/net/cfg80211.h' line='3841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='set_cqm_rssi_range_config' type-id='841c4b1a' visibility='default' filepath='include/net/cfg80211.h' line='3845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='set_cqm_txe_config' type-id='e279af7d' visibility='default' filepath='include/net/cfg80211.h' line='3849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='mgmt_frame_register' type-id='585d0267' visibility='default' filepath='include/net/cfg80211.h' line='3853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='set_antenna' type-id='5e89e128' visibility='default' filepath='include/net/cfg80211.h' line='3857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='get_antenna' type-id='22c1973a' visibility='default' filepath='include/net/cfg80211.h' line='3858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='sched_scan_start' type-id='672436e6' visibility='default' filepath='include/net/cfg80211.h' line='3860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='sched_scan_stop' type-id='f7f7a1c4' visibility='default' filepath='include/net/cfg80211.h' line='3863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='set_rekey_data' type-id='f76a2553' visibility='default' filepath='include/net/cfg80211.h' line='3866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='tdls_mgmt' type-id='d6ca98e4' visibility='default' filepath='include/net/cfg80211.h' line='3869' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='tdls_oper' type-id='7f8a52ed' visibility='default' filepath='include/net/cfg80211.h' line='3873' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='probe_client' type-id='3c511dc5' visibility='default' filepath='include/net/cfg80211.h' line='3876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='set_noack_map' type-id='bb2acc29' visibility='default' filepath='include/net/cfg80211.h' line='3879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='get_channel' type-id='68dd3d29' visibility='default' filepath='include/net/cfg80211.h' line='3883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='start_p2p_device' type-id='242a426a' visibility='default' filepath='include/net/cfg80211.h' line='3887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='stop_p2p_device' type-id='c62f28a1' visibility='default' filepath='include/net/cfg80211.h' line='3889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='set_mac_acl' type-id='79cba4ed' visibility='default' filepath='include/net/cfg80211.h' line='3892' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='start_radar_detection' type-id='ded841a6' visibility='default' filepath='include/net/cfg80211.h' line='3895' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='end_cac' type-id='df4195e7' visibility='default' filepath='include/net/cfg80211.h' line='3899' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='update_ft_ies' type-id='1ca6081e' visibility='default' filepath='include/net/cfg80211.h' line='3901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='crit_proto_start' type-id='8e9877b2' visibility='default' filepath='include/net/cfg80211.h' line='3903' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='crit_proto_stop' type-id='c62f28a1' visibility='default' filepath='include/net/cfg80211.h' line='3907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='set_coalesce' type-id='ee39fcb4' visibility='default' filepath='include/net/cfg80211.h' line='3909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='channel_switch' type-id='314252f6' visibility='default' filepath='include/net/cfg80211.h' line='3912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='set_qos_map' type-id='ef4b69cb' visibility='default' filepath='include/net/cfg80211.h' line='3916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='set_ap_chanwidth' type-id='ca02ba37' visibility='default' filepath='include/net/cfg80211.h' line='3920' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='add_tx_ts' type-id='83206c41' visibility='default' filepath='include/net/cfg80211.h' line='3923' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='del_tx_ts' type-id='99da26e4' visibility='default' filepath='include/net/cfg80211.h' line='3926' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='tdls_channel_switch' type-id='5228b15b' visibility='default' filepath='include/net/cfg80211.h' line='3929' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='tdls_cancel_channel_switch' type-id='6bc8bd61' visibility='default' filepath='include/net/cfg80211.h' line='3933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='start_nan' type-id='e0e35961' visibility='default' filepath='include/net/cfg80211.h' line='3936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='stop_nan' type-id='c62f28a1' visibility='default' filepath='include/net/cfg80211.h' line='3938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='add_nan_func' type-id='e045e355' visibility='default' filepath='include/net/cfg80211.h' line='3939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='del_nan_func' type-id='8baf5297' visibility='default' filepath='include/net/cfg80211.h' line='3941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='nan_change_conf' type-id='f61682c8' visibility='default' filepath='include/net/cfg80211.h' line='3943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='set_multicast_to_unicast' type-id='5c035afd' visibility='default' filepath='include/net/cfg80211.h' line='3948' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='get_txq_stats' type-id='7e6add04' visibility='default' filepath='include/net/cfg80211.h' line='3952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='set_pmk' type-id='6d8f49c3' visibility='default' filepath='include/net/cfg80211.h' line='3956' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='del_pmk' type-id='e8733840' visibility='default' filepath='include/net/cfg80211.h' line='3958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='external_auth' type-id='9b201d8c' visibility='default' filepath='include/net/cfg80211.h' line='3960' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='tx_control_port' type-id='f08a54cd' visibility='default' filepath='include/net/cfg80211.h' line='3963' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='get_ftm_responder_stats' type-id='91ddac9f' visibility='default' filepath='include/net/cfg80211.h' line='3969' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='start_pmsr' type-id='b002e605' visibility='default' filepath='include/net/cfg80211.h' line='3973' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='abort_pmsr' type-id='24f4d4de' visibility='default' filepath='include/net/cfg80211.h' line='3975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='update_owe_info' type-id='3f98a2ff' visibility='default' filepath='include/net/cfg80211.h' line='3977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='probe_mesh_link' type-id='15a711af' visibility='default' filepath='include/net/cfg80211.h' line='3979' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vif_params' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='573' column='1' id='d1abd80d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='use_4addr' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='macaddr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vht_mumimo_groups' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vht_mumimo_follow_addr' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='578' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_ap_settings' size-in-bits='4160' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1020' column='1' id='7f421823'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='1021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='beacon' type-id='e61c5935' visibility='default' filepath='include/net/cfg80211.h' line='1023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='beacon_interval' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='dtim_period' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='ssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1026' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ssid_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='1027' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='hidden_ssid' type-id='fba6f1ff' visibility='default' filepath='include/net/cfg80211.h' line='1028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='crypto' type-id='f81bbd3b' visibility='default' filepath='include/net/cfg80211.h' line='1029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='privacy' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='auth_type' type-id='f7dadf06' visibility='default' filepath='include/net/cfg80211.h' line='1031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='smps_mode' type-id='7f4af420' visibility='default' filepath='include/net/cfg80211.h' line='1032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2464'>
+          <var-decl name='inactivity_timeout' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='p2p_ctwindow' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1034' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2504'>
+          <var-decl name='p2p_opp_ps' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='acl' type-id='bfda7a08' visibility='default' filepath='include/net/cfg80211.h' line='1036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='pbss' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='beacon_rate' type-id='febb0cbe' visibility='default' filepath='include/net/cfg80211.h' line='1038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='ht_cap' type-id='81f1a1a8' visibility='default' filepath='include/net/cfg80211.h' line='1040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='vht_cap' type-id='fffb07a4' visibility='default' filepath='include/net/cfg80211.h' line='1041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='he_cap' type-id='0bf1fd35' visibility='default' filepath='include/net/cfg80211.h' line='1042' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='ht_required' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4040'>
+          <var-decl name='vht_required' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4048'>
+          <var-decl name='twt_responder' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4064'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='he_obss_pd' type-id='198fcd88' visibility='default' filepath='include/net/cfg80211.h' line='1046' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_beacon_data' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='924' column='1' id='e61c5935'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='925' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tail' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='925' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='beacon_ies' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='926' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='proberesp_ies' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='assocresp_ies' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='probe_resp' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='929' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lci' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='civicloc' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ftm_responder' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='head_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tail_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='beacon_ies_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='proberesp_ies_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='assocresp_ies_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='probe_resp_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='lci_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='civicloc_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='940' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_hidden_ssid' filepath='include/uapi/linux/nl80211.h' line='5186' column='1' id='fba6f1ff'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_HIDDEN_SSID_NOT_IN_USE' value='0'/>
+        <enumerator name='NL80211_HIDDEN_SSID_ZERO_LEN' value='1'/>
+        <enumerator name='NL80211_HIDDEN_SSID_ZERO_CONTENTS' value='2'/>
+      </enum-decl>
+      <class-decl name='cfg80211_crypto_settings' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='879' column='1' id='f81bbd3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wpa_versions' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='880' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cipher_group' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_ciphers_pairwise' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ciphers_pairwise' type-id='586ea944' visibility='default' filepath='include/net/cfg80211.h' line='883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='n_akm_suites' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='akm_suites' type-id='1872161b' visibility='default' filepath='include/net/cfg80211.h' line='885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='control_port' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='control_port_ethertype' type-id='84a5c3d4' visibility='default' filepath='include/net/cfg80211.h' line='887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='control_port_no_encrypt' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='control_port_over_nl80211' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='wep_keys' type-id='706d79ff' visibility='default' filepath='include/net/cfg80211.h' line='890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wep_tx_key' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='psk' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='892' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sae_pwd' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sae_pwd_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='894' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_auth_type' filepath='include/uapi/linux/nl80211.h' line='4427' column='1' id='f7dadf06'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_AUTHTYPE_OPEN_SYSTEM' value='0'/>
+        <enumerator name='NL80211_AUTHTYPE_SHARED_KEY' value='1'/>
+        <enumerator name='NL80211_AUTHTYPE_FT' value='2'/>
+        <enumerator name='NL80211_AUTHTYPE_NETWORK_EAP' value='3'/>
+        <enumerator name='NL80211_AUTHTYPE_SAE' value='4'/>
+        <enumerator name='NL80211_AUTHTYPE_FILS_SK' value='5'/>
+        <enumerator name='NL80211_AUTHTYPE_FILS_SK_PFS' value='6'/>
+        <enumerator name='NL80211_AUTHTYPE_FILS_PK' value='7'/>
+        <enumerator name='__NL80211_AUTHTYPE_NUM' value='8'/>
+        <enumerator name='NL80211_AUTHTYPE_MAX' value='7'/>
+        <enumerator name='NL80211_AUTHTYPE_AUTOMATIC' value='8'/>
+      </enum-decl>
+      <enum-decl name='nl80211_smps_mode' filepath='include/uapi/linux/nl80211.h' line='5696' column='1' id='7f4af420'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_SMPS_OFF' value='0'/>
+        <enumerator name='NL80211_SMPS_STATIC' value='1'/>
+        <enumerator name='NL80211_SMPS_DYNAMIC' value='2'/>
+        <enumerator name='__NL80211_SMPS_AFTER_LAST' value='3'/>
+        <enumerator name='NL80211_SMPS_MAX' value='2'/>
+      </enum-decl>
+      <class-decl name='cfg80211_acl_data' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='955' column='1' id='88cc1885'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='acl_policy' type-id='79c93734' visibility='default' filepath='include/net/cfg80211.h' line='956' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='n_acl_entries' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='957' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mac_addrs' type-id='a099b86f' visibility='default' filepath='include/net/cfg80211.h' line='960' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_acl_policy' filepath='include/uapi/linux/nl80211.h' line='5681' column='1' id='79c93734'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED' value='0'/>
+        <enumerator name='NL80211_ACL_POLICY_DENY_UNLESS_LISTED' value='1'/>
+      </enum-decl>
+      <class-decl name='cfg80211_bitrate_mask' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='966' column='1' id='febb0cbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='control' type-id='b7cdf389' visibility='default' filepath='include/net/cfg80211.h' line='972' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='288' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/cfg80211.h' line='967' column='1' id='5b11c736'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='legacy' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ht_mcs' type-id='097504df' visibility='default' filepath='include/net/cfg80211.h' line='969' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='vht_mcs' type-id='c24d1a13' visibility='default' filepath='include/net/cfg80211.h' line='970' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='gi' type-id='4170ee5e' visibility='default' filepath='include/net/cfg80211.h' line='971' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_txrate_gi' filepath='include/uapi/linux/nl80211.h' line='4573' column='1' id='4170ee5e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_TXRATE_DEFAULT_GI' value='0'/>
+        <enumerator name='NL80211_TXRATE_FORCE_SGI' value='1'/>
+        <enumerator name='NL80211_TXRATE_FORCE_LGI' value='2'/>
+      </enum-decl>
+      <class-decl name='ieee80211_he_obss_pd' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='258' column='1' id='198fcd88'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enable' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='min_offset' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='max_offset' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='261' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='station_parameters' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1184' column='1' id='9367a320'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported_rates' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vlan' type-id='68a2d05c' visibility='default' filepath='include/net/cfg80211.h' line='1186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sta_flags_mask' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='sta_flags_set' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sta_modify_mask' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='listen_interval' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='aid' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='peer_aid' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='supported_rates_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='plink_action' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='plink_state' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ht_capa' type-id='81f1a1a8' visibility='default' filepath='include/net/cfg80211.h' line='1195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='vht_capa' type-id='fffb07a4' visibility='default' filepath='include/net/cfg80211.h' line='1196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='uapsd_queues' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='max_sp' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='local_pm' type-id='8fbf0816' visibility='default' filepath='include/net/cfg80211.h' line='1199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='capability' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ext_capab' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ext_capab_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='supported_channels' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='supported_channels_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='supported_oper_classes' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='supported_oper_classes_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='904'>
+          <var-decl name='opmode_notif' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='912'>
+          <var-decl name='opmode_notif_used' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='support_p2p_ps' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='he_capa' type-id='0bf1fd35' visibility='default' filepath='include/net/cfg80211.h' line='1210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='he_capa_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='airtime_weight' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='txpwr' type-id='88bcb7a7' visibility='default' filepath='include/net/cfg80211.h' line='1213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='he_6ghz_capa' type-id='c692f2ae' visibility='default' filepath='include/net/cfg80211.h' line='1214' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_mesh_power_mode' filepath='include/uapi/linux/nl80211.h' line='3964' column='1' id='8fbf0816'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_MESH_POWER_UNKNOWN' value='0'/>
+        <enumerator name='NL80211_MESH_POWER_ACTIVE' value='1'/>
+        <enumerator name='NL80211_MESH_POWER_LIGHT_SLEEP' value='2'/>
+        <enumerator name='NL80211_MESH_POWER_DEEP_SLEEP' value='3'/>
+        <enumerator name='__NL80211_MESH_POWER_AFTER_LAST' value='4'/>
+        <enumerator name='NL80211_MESH_POWER_MAX' value='3'/>
+      </enum-decl>
+      <class-decl name='sta_txpwr' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1135' column='1' id='88bcb7a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power' type-id='9b7e9486' visibility='default' filepath='include/net/cfg80211.h' line='1136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='d46e3e96' visibility='default' filepath='include/net/cfg80211.h' line='1137' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_tx_power_setting' filepath='include/uapi/linux/nl80211.h' line='4678' column='1' id='d46e3e96'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_TX_POWER_AUTOMATIC' value='0'/>
+        <enumerator name='NL80211_TX_POWER_LIMITED' value='1'/>
+        <enumerator name='NL80211_TX_POWER_FIXED' value='2'/>
+      </enum-decl>
+      <class-decl name='station_del_parameters' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1227' column='1' id='d8d4804a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mac' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='subtype' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='reason_code' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1230' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='station_info' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1502' column='1' id='214ce930'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='connected_time' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='inactive_time' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='assoc_at' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rx_bytes' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_bytes' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='llid' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='plid' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='plink_state' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='signal' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='signal_avg' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='376'>
+          <var-decl name='chains' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='chain_signal' type-id='da004b74' visibility='default' filepath='include/net/cfg80211.h' line='1516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='chain_signal_avg' type-id='da004b74' visibility='default' filepath='include/net/cfg80211.h' line='1517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='txrate' type-id='5ece574c' visibility='default' filepath='include/net/cfg80211.h' line='1519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='rxrate' type-id='5ece574c' visibility='default' filepath='include/net/cfg80211.h' line='1520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='rx_packets' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tx_packets' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='tx_retries' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tx_failed' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='rx_dropped_misc' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bss_param' type-id='ca45acc3' visibility='default' filepath='include/net/cfg80211.h' line='1526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='sta_flags' type-id='8d118865' visibility='default' filepath='include/net/cfg80211.h' line='1527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='generation' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='assoc_req_ies' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='assoc_req_ies_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='1532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='beacon_loss_count' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='t_offset' type-id='9b7c55ef' visibility='default' filepath='include/net/cfg80211.h' line='1535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='local_pm' type-id='8fbf0816' visibility='default' filepath='include/net/cfg80211.h' line='1536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='peer_pm' type-id='8fbf0816' visibility='default' filepath='include/net/cfg80211.h' line='1537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='nonpeer_pm' type-id='8fbf0816' visibility='default' filepath='include/net/cfg80211.h' line='1538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='expected_throughput' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='tx_duration' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rx_duration' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='rx_beacon' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rx_beacon_signal_avg' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1480'>
+          <var-decl name='connected_to_gate' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='pertid' type-id='718fbcad' visibility='default' filepath='include/net/cfg80211.h' line='1548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='ack_signal' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1608'>
+          <var-decl name='avg_ack_signal' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1616'>
+          <var-decl name='airtime_weight' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='rx_mpdu_count' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='fcs_err_count' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='airtime_link_metric' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1557' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rate_info' size-in-bits='80' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1340' column='1' id='5ece574c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='mcs' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='legacy' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nss' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bw' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='he_gi' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='he_dcm' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='he_ru_alloc' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='n_bonded_ch' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1349' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sta_bss_parameters' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1377' column='1' id='ca45acc3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dtim_period' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='beacon_interval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1380' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nl80211_sta_flag_update' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/nl80211.h' line='3015' column='1' id='8d118865'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='3016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='set' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='3017' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_tid_stats' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1425' column='1' id='af09339d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_msdu' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_msdu' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_msdu_retries' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_msdu_failed' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='txq_stats' type-id='14305947' visibility='default' filepath='include/net/cfg80211.h' line='1431' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_txq_stats' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1399' column='1' id='14305947'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='backlog_bytes' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='backlog_packets' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flows' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='drops' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ecn_marks' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='overlimit' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='overmemory' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='collisions' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tx_bytes' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_packets' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='max_flows' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1411' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mpath_info' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1654' column='1' id='1cac2bf4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='frame_qlen' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sn' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='metric' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='exptime' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='discovery_timeout' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='discovery_retries' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='hop_count' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='path_change_count' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='generation' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1666' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mesh_config' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1774' column='1' id='50718ec3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dot11MeshRetryTimeout' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='dot11MeshConfirmTimeout' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dot11MeshHoldingTimeout' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='dot11MeshMaxPeerLinks' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dot11MeshMaxRetries' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1779' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='dot11MeshTTL' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='element_ttl' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='auto_open_plinks' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dot11MeshNbrOffsetMaxNeighbor' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dot11MeshHWMPmaxPREQretries' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='path_refresh_time' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_discovery_timeout' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='dot11MeshHWMPactivePathTimeout' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dot11MeshHWMPpreqMinInterval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='dot11MeshHWMPperrMinInterval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='dot11MeshHWMPnetDiameterTraversalTime' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='dot11MeshHWMPRootMode' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='312'>
+          <var-decl name='dot11MeshConnectedToMeshGate' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1792' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dot11MeshHWMPRannInterval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='dot11MeshGateAnnouncementProtocol' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='dot11MeshForwarding' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='rssi_threshold' type-id='a7832498' visibility='default' filepath='include/net/cfg80211.h' line='1796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ht_opmode' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1797' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='dot11MeshHWMPactivePathToRootTimeout' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dot11MeshHWMProotInterval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='dot11MeshHWMPconfirmationInterval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1800' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='power_mode' type-id='8fbf0816' visibility='default' filepath='include/net/cfg80211.h' line='1801' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dot11MeshAwakeWindowDuration' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='plink_timeout' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1803' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mesh_setup' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1833' column='1' id='d5e39a52'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='1834' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mesh_id' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1835' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mesh_id_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1836' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='sync_method' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1837' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='path_sel_proto' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='path_metric' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='auth_id' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ie_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='is_authenticated' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='is_secure' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='472'>
+          <var-decl name='user_mpm' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='dtim_period' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='beacon_interval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mcast_rate' type-id='2020bac4' visibility='default' filepath='include/net/cfg80211.h' line='1848' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='basic_rates' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='beacon_rate' type-id='febb0cbe' visibility='default' filepath='include/net/cfg80211.h' line='1850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='userspace_handles_dfs' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1851' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1832'>
+          <var-decl name='control_port_over_nl80211' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1852' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ocb_setup' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1861' column='1' id='8a88d915'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='1862' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bss_parameters' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1689' column='1' id='5603c5c0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='use_cts_prot' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='use_short_preamble' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='use_short_slot_time' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='basic_rates' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='basic_rates_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ap_isolate' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ht_opmode' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='p2p_ctwindow' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='p2p_opp_ps' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1697' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_txq_params' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1875' column='1' id='f16b7aee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ac' type-id='3ee1f5af' visibility='default' filepath='include/net/cfg80211.h' line='1876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='txop' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1877' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='cwmin' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1878' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cwmax' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='aifs' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1880' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_ac' filepath='include/uapi/linux/nl80211.h' line='4216' column='1' id='3ee1f5af'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_AC_VO' value='0'/>
+        <enumerator name='NL80211_AC_VI' value='1'/>
+        <enumerator name='NL80211_AC_BE' value='2'/>
+        <enumerator name='NL80211_AC_BK' value='3'/>
+        <enumerator name='NL80211_NUM_ACS' value='4'/>
+      </enum-decl>
+      <class-decl name='cfg80211_scan_request' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1960' column='1' id='6834abc3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ssids' type-id='a1fa7fb7' visibility='default' filepath='include/net/cfg80211.h' line='1961' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_ssids' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1962' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='n_channels' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1963' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='scan_width' type-id='95d46034' visibility='default' filepath='include/net/cfg80211.h' line='1964' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1965' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='1966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='duration' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1967' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='duration_mandatory' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1969' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rates' type-id='1c6c0c39' visibility='default' filepath='include/net/cfg80211.h' line='1971' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wdev' type-id='63c7e8e2' visibility='default' filepath='include/net/cfg80211.h' line='1973' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mac_addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='1975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='624'>
+          <var-decl name='mac_addr_mask' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='1976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='1977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='wiphy' type-id='666fb412' visibility='default' filepath='include/net/cfg80211.h' line='1980' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='scan_start' type-id='7359adad' visibility='default' filepath='include/net/cfg80211.h' line='1981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='info' type-id='b1493ece' visibility='default' filepath='include/net/cfg80211.h' line='1982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='notified' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1032'>
+          <var-decl name='no_cck' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='channels' type-id='14cad687' visibility='default' filepath='include/net/cfg80211.h' line='1987' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_scan_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1925' column='1' id='b1493ece'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scan_start_tsf' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1926' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tsf_bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='1927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='aborted' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1928' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_auth_request' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2304' column='1' id='5668e288'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bss' type-id='bda81d86' visibility='default' filepath='include/net/cfg80211.h' line='2305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='auth_type' type-id='f7dadf06' visibility='default' filepath='include/net/cfg80211.h' line='2308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='key' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='key_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='key_idx' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='auth_data' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='auth_data_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2312' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_assoc_request' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2365' column='1' id='63cd0279'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bss' type-id='bda81d86' visibility='default' filepath='include/net/cfg80211.h' line='2366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='prev_bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='crypto' type-id='f81bbd3b' visibility='default' filepath='include/net/cfg80211.h' line='2369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='use_mfp' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='ht_capa' type-id='16e7829f' visibility='default' filepath='include/net/cfg80211.h' line='2372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1296'>
+          <var-decl name='ht_capa_mask' type-id='16e7829f' visibility='default' filepath='include/net/cfg80211.h' line='2373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='vht_capa' type-id='2eec6999' visibility='default' filepath='include/net/cfg80211.h' line='2374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='vht_capa_mask' type-id='2eec6999' visibility='default' filepath='include/net/cfg80211.h' line='2374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='fils_kek' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='fils_kek_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='fils_nonces' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2377' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_deauth_request' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2393' column='1' id='93d4232f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reason_code' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='local_state_change' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2398' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_disassoc_request' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2414' column='1' id='1b35ffb5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bss' type-id='bda81d86' visibility='default' filepath='include/net/cfg80211.h' line='2415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reason_code' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='local_state_change' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2419' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_connect_params' size-in-bits='2944' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2557' column='1' id='1291defd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channel' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='2558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='channel_hint' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='2559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bssid_hint' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ssid_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='auth_type' type-id='f7dadf06' visibility='default' filepath='include/net/cfg80211.h' line='2564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='privacy' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='mfp' type-id='dfb2486c' visibility='default' filepath='include/net/cfg80211.h' line='2568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='crypto' type-id='f81bbd3b' visibility='default' filepath='include/net/cfg80211.h' line='2569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='key' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='key_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1480'>
+          <var-decl name='key_idx' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='bg_scan_period' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='ht_capa' type-id='16e7829f' visibility='default' filepath='include/net/cfg80211.h' line='2574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1776'>
+          <var-decl name='ht_capa_mask' type-id='16e7829f' visibility='default' filepath='include/net/cfg80211.h' line='2575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='vht_capa' type-id='2eec6999' visibility='default' filepath='include/net/cfg80211.h' line='2576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='vht_capa_mask' type-id='2eec6999' visibility='default' filepath='include/net/cfg80211.h' line='2577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='pbss' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='bss_select' type-id='d24a933d' visibility='default' filepath='include/net/cfg80211.h' line='2579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='prev_bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='fils_erp_username' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='fils_erp_username_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='fils_erp_realm' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='fils_erp_realm_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='fils_erp_next_seq_num' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='fils_erp_rrk' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='fils_erp_rrk_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='want_1x' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='edmg' type-id='d87e6929' visibility='default' filepath='include/net/cfg80211.h' line='2589' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_mfp' filepath='include/uapi/linux/nl80211.h' line='4464' column='1' id='dfb2486c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_MFP_NO' value='0'/>
+        <enumerator name='NL80211_MFP_REQUIRED' value='1'/>
+        <enumerator name='NL80211_MFP_OPTIONAL' value='2'/>
+      </enum-decl>
+      <class-decl name='cfg80211_bss_selection' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2486' column='1' id='d24a933d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='behaviour' type-id='10fd9108' visibility='default' filepath='include/net/cfg80211.h' line='2487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='param' type-id='0532d6f6' visibility='default' filepath='include/net/cfg80211.h' line='2491' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_bss_select_attr' filepath='include/uapi/linux/nl80211.h' line='5895' column='1' id='10fd9108'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='__NL80211_BSS_SELECT_ATTR_INVALID' value='0'/>
+        <enumerator name='NL80211_BSS_SELECT_ATTR_RSSI' value='1'/>
+        <enumerator name='NL80211_BSS_SELECT_ATTR_BAND_PREF' value='2'/>
+        <enumerator name='NL80211_BSS_SELECT_ATTR_RSSI_ADJUST' value='3'/>
+        <enumerator name='__NL80211_BSS_SELECT_ATTR_AFTER_LAST' value='4'/>
+        <enumerator name='NL80211_BSS_SELECT_ATTR_MAX' value='3'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/cfg80211.h' line='2488' column='1' id='0532d6f6'>
+        <data-member access='private'>
+          <var-decl name='band_pref' type-id='3eaa0294' visibility='default' filepath='include/net/cfg80211.h' line='2489' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='adjust' type-id='5da08e25' visibility='default' filepath='include/net/cfg80211.h' line='2490' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='cfg80211_ibss_params' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2458' column='1' id='0bac05a4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='2461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ssid_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='ie_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='beacon_interval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='basic_rates' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='channel_fixed' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='520'>
+          <var-decl name='privacy' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='control_port' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='536'>
+          <var-decl name='control_port_over_nl80211' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='userspace_handles_dfs' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mcast_rate' type-id='2020bac4' visibility='default' filepath='include/net/cfg80211.h' line='2471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ht_capa' type-id='16e7829f' visibility='default' filepath='include/net/cfg80211.h' line='2472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='912'>
+          <var-decl name='ht_capa_mask' type-id='16e7829f' visibility='default' filepath='include/net/cfg80211.h' line='2473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='wep_keys' type-id='706d79ff' visibility='default' filepath='include/net/cfg80211.h' line='2474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='wep_tx_key' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2475' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='survey_info' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='837' column='1' id='8cd7231c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channel' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='time' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='time_busy' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='time_ext_busy' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='time_rx' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='time_tx' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='time_scan' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='time_bss_rx' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='filled' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='noise' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='847' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_pmksa' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2654' column='1' id='938cf680'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pmkid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pmk' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pmk_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ssid_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cache_id' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2661' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_mgmt_tx_params' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2874' column='1' id='b52f43dd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chan' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='2875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offchan' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='wait' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='2877' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buf' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2878' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='no_cck' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2880' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='dont_wait_for_ack' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='n_csa_offsets' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='csa_offsets' type-id='80455526' visibility='default' filepath='include/net/cfg80211.h' line='2883' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_gtk_rekey_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2840' column='1' id='f569a53c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kek' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kck' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='replay_ctr' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2841' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_tdls_operation' filepath='include/uapi/linux/nl80211.h' line='5243' column='1' id='ee1b00fc'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_TDLS_DISCOVERY_REQ' value='0'/>
+        <enumerator name='NL80211_TDLS_SETUP' value='1'/>
+        <enumerator name='NL80211_TDLS_TEARDOWN' value='2'/>
+        <enumerator name='NL80211_TDLS_ENABLE_LINK' value='3'/>
+        <enumerator name='NL80211_TDLS_DISABLE_LINK' value='4'/>
+      </enum-decl>
+      <class-decl name='cfg80211_update_ft_ies_params' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2853' column='1' id='6038e38f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='md' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2854' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2856' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_crit_proto_id' filepath='include/uapi/linux/nl80211.h' line='5773' column='1' id='2981c44a'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_CRIT_PROTO_UNSPEC' value='0'/>
+        <enumerator name='NL80211_CRIT_PROTO_DHCP' value='1'/>
+        <enumerator name='NL80211_CRIT_PROTO_EAPOL' value='2'/>
+        <enumerator name='NL80211_CRIT_PROTO_APIPA' value='3'/>
+        <enumerator name='NUM_NL80211_CRIT_PROTO' value='4'/>
+      </enum-decl>
+      <class-decl name='cfg80211_coalesce' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2768' column='1' id='6ef02a2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rules' type-id='9c46a2bf' visibility='default' filepath='include/net/cfg80211.h' line='2769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_rules' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2770' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_coalesce_rules' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2754' column='1' id='b370f027'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='delay' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='condition' type-id='a1c2ea1e' visibility='default' filepath='include/net/cfg80211.h' line='2756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='patterns' type-id='1ed3660c' visibility='default' filepath='include/net/cfg80211.h' line='2757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n_patterns' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2758' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_coalesce_condition' filepath='include/uapi/linux/nl80211.h' line='5014' column='1' id='a1c2ea1e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_COALESCE_CONDITION_MATCH' value='0'/>
+        <enumerator name='NL80211_COALESCE_CONDITION_NO_MATCH' value='1'/>
+      </enum-decl>
+      <class-decl name='cfg80211_csa_settings' size-in-bits='2688' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1065' column='1' id='7f4edaa7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='1066' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='beacon_csa' type-id='e61c5935' visibility='default' filepath='include/net/cfg80211.h' line='1067' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='counter_offsets_beacon' type-id='80455526' visibility='default' filepath='include/net/cfg80211.h' line='1068' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='counter_offsets_presp' type-id='80455526' visibility='default' filepath='include/net/cfg80211.h' line='1069' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='n_counter_offsets_beacon' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='1070' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='n_counter_offsets_presp' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='1071' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='beacon_after' type-id='e61c5935' visibility='default' filepath='include/net/cfg80211.h' line='1072' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='radar_required' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1073' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2632'>
+          <var-decl name='block_tx' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1074' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2640'>
+          <var-decl name='count' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1075' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_qos_map' size-in-bits='472' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2924' column='1' id='762d0cdc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_des' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2925' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dscp_exception' type-id='113a8bef' visibility='default' filepath='include/net/cfg80211.h' line='2926' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='up' type-id='62f1ceae' visibility='default' filepath='include/net/cfg80211.h' line='2927' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_dscp_exception' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2892' column='1' id='c0e72c08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dscp' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='up' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2894' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_dscp_range' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2903' column='1' id='0f438714'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='low' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='high' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2905' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_nan_conf' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2940' column='1' id='7fec8d58'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='master_pref' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bands' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2942' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_nan_func' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2997' column='1' id='f3945544'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f796e63e' visibility='default' filepath='include/net/cfg80211.h' line='2998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='service_id' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='publish_type' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='close_range' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='3001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='publish_bcast' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='3002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='subscribe_active' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='3003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='followup_id' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='followup_reqid' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='followup_dest' type-id='6d8d26fb' visibility='default' filepath='include/net/cfg80211.h' line='3006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ttl' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3007' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='serv_spec_info' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='3008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='serv_spec_info_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='srf_include' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='3010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='srf_bf' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='3011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='srf_bf_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='srf_bf_idx' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='srf_macs' type-id='01b378ab' visibility='default' filepath='include/net/cfg80211.h' line='3014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='srf_num_macs' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='3015' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rx_filters' type-id='ee7e85c3' visibility='default' filepath='include/net/cfg80211.h' line='3016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tx_filters' type-id='ee7e85c3' visibility='default' filepath='include/net/cfg80211.h' line='3017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='num_tx_filters' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='776'>
+          <var-decl name='num_rx_filters' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='instance_id' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cookie' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='3021' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_nan_function_type' filepath='include/uapi/linux/nl80211.h' line='5915' column='1' id='f796e63e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_NAN_FUNC_PUBLISH' value='0'/>
+        <enumerator name='NL80211_NAN_FUNC_SUBSCRIBE' value='1'/>
+        <enumerator name='NL80211_NAN_FUNC_FOLLOW_UP' value='2'/>
+        <enumerator name='__NL80211_NAN_FUNC_TYPE_AFTER_LAST' value='3'/>
+        <enumerator name='NL80211_NAN_FUNC_MAX_TYPE' value='2'/>
+      </enum-decl>
+      <class-decl name='cfg80211_nan_func_filter' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2963' column='1' id='fef37f13'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filter' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2964' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2965' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_pmk_conf' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3034' column='1' id='1316fd07'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='aa' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='3035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pmk_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pmk' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='3037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pmk_r0_name' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='3038' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_external_auth_params' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3061' column='1' id='5e0fcaa5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action' type-id='93b938a2' visibility='default' filepath='include/net/cfg80211.h' line='3062' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='3063' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='ssid' type-id='0c960fcf' visibility='default' filepath='include/net/cfg80211.h' line='3064' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='key_mgmt_suite' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='3065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='status' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='3066' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pmkid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='3067' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_external_auth_action' filepath='include/uapi/linux/nl80211.h' line='6079' column='1' id='93b938a2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_EXTERNAL_AUTH_START' value='0'/>
+        <enumerator name='NL80211_EXTERNAL_AUTH_ABORT' value='1'/>
+      </enum-decl>
+      <class-decl name='cfg80211_ftm_responder_stats' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3091' column='1' id='4f719aac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='success_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3093' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='partial_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3094' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='failed_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3095' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='asap_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3096' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='non_asap_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3097' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='total_duration_ms' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='3098' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unknown_triggers_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3099' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='reschedule_requests_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='out_of_window_triggers_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3101' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_pmsr_request' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3272' column='1' id='fe64f3b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cookie' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='3273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='drv_data' type-id='eaa32e2f' visibility='default' filepath='include/net/cfg80211.h' line='3274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n_peers' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nl_portid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timeout' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='mac_addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='3280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='mac_addr_mask' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='3281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='3283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='peers' type-id='42a2e39d' visibility='default' filepath='include/net/cfg80211.h' line='3285' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_pmsr_request_peer' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3249' column='1' id='167153b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='3250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='3251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='report_ap_tsf' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='ftm' type-id='b60e74e3' visibility='default' filepath='include/net/cfg80211.h' line='3253' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_pmsr_ftm_request_peer' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3229' column='1' id='b60e74e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='preamble' type-id='62746bd7' visibility='default' filepath='include/net/cfg80211.h' line='3230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='burst_period' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='3231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='requested' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='asap' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='request_lci' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='request_civicloc' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='num_bursts_exp' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='burst_duration' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='ftms_per_burst' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='ftmr_retries' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3239' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_preamble' filepath='include/uapi/linux/nl80211.h' line='6163' column='1' id='62746bd7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_PREAMBLE_LEGACY' value='0'/>
+        <enumerator name='NL80211_PREAMBLE_HT' value='1'/>
+        <enumerator name='NL80211_PREAMBLE_VHT' value='2'/>
+        <enumerator name='NL80211_PREAMBLE_DMG' value='3'/>
+      </enum-decl>
+      <class-decl name='cfg80211_update_owe_info' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3307' column='1' id='aabc6610'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='peer' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='3308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='status' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='3309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='3310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='3311' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='5603c5c0' size-in-bits='64' id='fa1cae16'/>
+      <pointer-type-def type-id='7f421823' size-in-bits='64' id='083811d3'/>
+      <pointer-type-def type-id='63cd0279' size-in-bits='64' id='21a99b81'/>
+      <pointer-type-def type-id='5668e288' size-in-bits='64' id='e2254eee'/>
+      <pointer-type-def type-id='e61c5935' size-in-bits='64' id='37ce53f5'/>
+      <pointer-type-def type-id='5f145050' size-in-bits='64' id='bda81d86'/>
+      <pointer-type-def type-id='1540019b' size-in-bits='64' id='561a36db'/>
+      <pointer-type-def type-id='e07d69c8' size-in-bits='64' id='0953fbfe'/>
+      <pointer-type-def type-id='6ef02a2f' size-in-bits='64' id='1a548a87'/>
+      <pointer-type-def type-id='b370f027' size-in-bits='64' id='9c46a2bf'/>
+      <pointer-type-def type-id='43420c6a' size-in-bits='64' id='6dbc8e18'/>
+      <pointer-type-def type-id='1291defd' size-in-bits='64' id='a39f64ad'/>
+      <pointer-type-def type-id='2e77eb82' size-in-bits='64' id='ee527710'/>
+      <pointer-type-def type-id='7f4edaa7' size-in-bits='64' id='56c1976f'/>
+      <pointer-type-def type-id='93d4232f' size-in-bits='64' id='85e47e07'/>
+      <pointer-type-def type-id='1b35ffb5' size-in-bits='64' id='c24b1225'/>
+      <pointer-type-def type-id='5e0fcaa5' size-in-bits='64' id='2b041d55'/>
+      <pointer-type-def type-id='4f719aac' size-in-bits='64' id='f7cfb49a'/>
+      <pointer-type-def type-id='f569a53c' size-in-bits='64' id='6f33eada'/>
+      <pointer-type-def type-id='0bac05a4' size-in-bits='64' id='6bfee0f2'/>
+      <pointer-type-def type-id='2baffd9a' size-in-bits='64' id='1819dec8'/>
+      <pointer-type-def type-id='7430554e' size-in-bits='64' id='ea00c914'/>
+      <pointer-type-def type-id='b52f43dd' size-in-bits='64' id='10794d1d'/>
+      <pointer-type-def type-id='7fec8d58' size-in-bits='64' id='d458dfce'/>
+      <pointer-type-def type-id='f3945544' size-in-bits='64' id='c3524532'/>
+      <pointer-type-def type-id='fef37f13' size-in-bits='64' id='ee7e85c3'/>
+      <pointer-type-def type-id='76959226' size-in-bits='64' id='1ed3660c'/>
+      <pointer-type-def type-id='938cf680' size-in-bits='64' id='e7e4a8d6'/>
+      <pointer-type-def type-id='fe64f3b4' size-in-bits='64' id='6951bca2'/>
+      <pointer-type-def type-id='762d0cdc' size-in-bits='64' id='794da86a'/>
+      <pointer-type-def type-id='6834abc3' size-in-bits='64' id='a9e8b173'/>
+      <pointer-type-def type-id='391881a9' size-in-bits='64' id='302e9391'/>
+      <pointer-type-def type-id='12a2e88f' size-in-bits='64' id='9e4995c7'/>
+      <pointer-type-def type-id='0c960fcf' size-in-bits='64' id='a1fa7fb7'/>
+      <pointer-type-def type-id='af09339d' size-in-bits='64' id='718fbcad'/>
+      <pointer-type-def type-id='14305947' size-in-bits='64' id='c65b576f'/>
+      <pointer-type-def type-id='6038e38f' size-in-bits='64' id='22428037'/>
+      <pointer-type-def type-id='aabc6610' size-in-bits='64' id='37104a66'/>
+      <pointer-type-def type-id='80126e32' size-in-bits='64' id='9d025b00'/>
+      <pointer-type-def type-id='1752769a' size-in-bits='64' id='e0c1c1b8'/>
+      <qualified-type-def type-id='84a5c3d4' const='yes' id='4590ffe4'/>
+      <qualified-type-def type-id='88cc1885' const='yes' id='369202f2'/>
+      <pointer-type-def type-id='369202f2' size-in-bits='64' id='bfda7a08'/>
+      <qualified-type-def type-id='febb0cbe' const='yes' id='d168fd05'/>
+      <pointer-type-def type-id='d168fd05' size-in-bits='64' id='d74690fd'/>
+      <qualified-type-def type-id='7eedb398' const='yes' id='5e2a189d'/>
+      <pointer-type-def type-id='5e2a189d' size-in-bits='64' id='f344e815'/>
+      <qualified-type-def type-id='8035b730' const='yes' id='bacfb75d'/>
+      <pointer-type-def type-id='bacfb75d' size-in-bits='64' id='8bfdd055'/>
+      <qualified-type-def type-id='1316fd07' const='yes' id='4f01e87c'/>
+      <pointer-type-def type-id='4f01e87c' size-in-bits='64' id='b600bf62'/>
+      <qualified-type-def type-id='e9bb2749' const='yes' id='a0ef5328'/>
+      <pointer-type-def type-id='a0ef5328' size-in-bits='64' id='5abfac26'/>
+      <qualified-type-def type-id='192864a5' const='yes' id='2b772770'/>
+      <pointer-type-def type-id='2b772770' size-in-bits='64' id='c692f2ae'/>
+      <qualified-type-def type-id='4dffc3f2' const='yes' id='c812633d'/>
+      <pointer-type-def type-id='c812633d' size-in-bits='64' id='0bf1fd35'/>
+      <qualified-type-def type-id='16e7829f' const='yes' id='269d8092'/>
+      <pointer-type-def type-id='269d8092' size-in-bits='64' id='81f1a1a8'/>
+      <qualified-type-def type-id='1179f27e' const='yes' id='29c8dc19'/>
+      <pointer-type-def type-id='29c8dc19' size-in-bits='64' id='fa32a449'/>
+      <qualified-type-def type-id='e47a5a92' const='yes' id='06f84b1d'/>
+      <pointer-type-def type-id='06f84b1d' size-in-bits='64' id='2fde6795'/>
+      <qualified-type-def type-id='5c28f25e' const='yes' id='5960e0b1'/>
+      <pointer-type-def type-id='5960e0b1' size-in-bits='64' id='4e819401'/>
+      <qualified-type-def type-id='1ffb3281' const='yes' id='36c71786'/>
+      <pointer-type-def type-id='36c71786' size-in-bits='64' id='e76a43c4'/>
+      <qualified-type-def type-id='21301fc9' const='yes' id='64b77daa'/>
+      <pointer-type-def type-id='64b77daa' size-in-bits='64' id='0cda9080'/>
+      <qualified-type-def type-id='2eec6999' const='yes' id='46f53066'/>
+      <pointer-type-def type-id='46f53066' size-in-bits='64' id='fffb07a4'/>
+      <qualified-type-def type-id='50718ec3' const='yes' id='3666ea54'/>
+      <pointer-type-def type-id='3666ea54' size-in-bits='64' id='2203245a'/>
+      <qualified-type-def type-id='d5e39a52' const='yes' id='be356197'/>
+      <pointer-type-def type-id='be356197' size-in-bits='64' id='2b08dc87'/>
+      <qualified-type-def type-id='e223f110' const='yes' id='af3cafff'/>
+      <pointer-type-def type-id='af3cafff' size-in-bits='64' id='b188cc4f'/>
+      <qualified-type-def type-id='0dd56ffa' const='yes' id='ed477ec9'/>
+      <pointer-type-def type-id='ed477ec9' size-in-bits='64' id='6a8cbf59'/>
+      <qualified-type-def type-id='7124a2a6' const='yes' id='7253d28f'/>
+      <pointer-type-def type-id='7253d28f' size-in-bits='64' id='9ef499bf'/>
+      <qualified-type-def type-id='378a6c5a' const='yes' id='703a35bb'/>
+      <pointer-type-def type-id='703a35bb' size-in-bits='64' id='3ca25343'/>
+      <qualified-type-def type-id='fc206ed1' const='yes' id='2ffd639c'/>
+      <pointer-type-def type-id='2ffd639c' size-in-bits='64' id='41e3f782'/>
+      <qualified-type-def type-id='5bbd300b' const='yes' id='93286cfa'/>
+      <pointer-type-def type-id='93286cfa' size-in-bits='64' id='78a34b70'/>
+      <qualified-type-def type-id='557bca33' const='yes' id='bd4a4592'/>
+      <pointer-type-def type-id='bd4a4592' size-in-bits='64' id='b3ebc0a8'/>
+      <pointer-type-def type-id='839b249b' size-in-bits='64' id='ec00acfb'/>
+      <pointer-type-def type-id='ce30b5d2' size-in-bits='64' id='4343d470'/>
+      <pointer-type-def type-id='f7e1259c' size-in-bits='64' id='3cad9e1a'/>
+      <pointer-type-def type-id='f16b7aee' size-in-bits='64' id='bf642844'/>
+      <pointer-type-def type-id='045f8e20' size-in-bits='64' id='518c633a'/>
+      <pointer-type-def type-id='49390c3d' size-in-bits='64' id='40a250d9'/>
+      <pointer-type-def type-id='06206c42' size-in-bits='64' id='ee39fcb4'/>
+      <pointer-type-def type-id='a1a8fac6' size-in-bits='64' id='f6d3f940'/>
+      <pointer-type-def type-id='f856d933' size-in-bits='64' id='48b6113f'/>
+      <pointer-type-def type-id='7f72358e' size-in-bits='64' id='85316748'/>
+      <pointer-type-def type-id='2449db3f' size-in-bits='64' id='b7589fb3'/>
+      <pointer-type-def type-id='55a23884' size-in-bits='64' id='c64be45e'/>
+      <pointer-type-def type-id='73c05c56' size-in-bits='64' id='683d81d8'/>
+      <pointer-type-def type-id='fe3510af' size-in-bits='64' id='7bc524a3'/>
+      <pointer-type-def type-id='a23fc232' size-in-bits='64' id='2ae5992c'/>
+      <pointer-type-def type-id='6952013b' size-in-bits='64' id='ca02ba37'/>
+      <pointer-type-def type-id='a965b0cc' size-in-bits='64' id='ded841a6'/>
+      <pointer-type-def type-id='0b70b14a' size-in-bits='64' id='b074b5d4'/>
+      <pointer-type-def type-id='63671fdf' size-in-bits='64' id='bcf952e3'/>
+      <pointer-type-def type-id='a6905674' size-in-bits='64' id='314252f6'/>
+      <pointer-type-def type-id='1774d144' size-in-bits='64' id='cdbc24fe'/>
+      <pointer-type-def type-id='8a324762' size-in-bits='64' id='6430463c'/>
+      <pointer-type-def type-id='2a27335a' size-in-bits='64' id='9b201d8c'/>
+      <pointer-type-def type-id='5ec38983' size-in-bits='64' id='91ddac9f'/>
+      <pointer-type-def type-id='3bf25607' size-in-bits='64' id='f76a2553'/>
+      <pointer-type-def type-id='0c844afb' size-in-bits='64' id='ead2af37'/>
+      <pointer-type-def type-id='84e91ca7' size-in-bits='64' id='e227fe73'/>
+      <pointer-type-def type-id='54e57e1f' size-in-bits='64' id='ef4b69cb'/>
+      <pointer-type-def type-id='befdd9ec' size-in-bits='64' id='672436e6'/>
+      <pointer-type-def type-id='5c1db944' size-in-bits='64' id='1ca6081e'/>
+      <pointer-type-def type-id='cdf04663' size-in-bits='64' id='3f98a2ff'/>
+      <pointer-type-def type-id='374012d9' size-in-bits='64' id='5c035afd'/>
+      <pointer-type-def type-id='981172e9' size-in-bits='64' id='79cba4ed'/>
+      <pointer-type-def type-id='452785d7' size-in-bits='64' id='6d8f49c3'/>
+      <pointer-type-def type-id='e0deacaf' size-in-bits='64' id='840c4ecb'/>
+      <pointer-type-def type-id='43a70966' size-in-bits='64' id='e8733840'/>
+      <pointer-type-def type-id='f34eff46' size-in-bits='64' id='95464a70'/>
+      <pointer-type-def type-id='c64b03de' size-in-bits='64' id='117ab738'/>
+      <pointer-type-def type-id='24cf4f51' size-in-bits='64' id='7f8a52ed'/>
+      <pointer-type-def type-id='7fb22747' size-in-bits='64' id='8ae117f3'/>
+      <pointer-type-def type-id='95374427' size-in-bits='64' id='cf6c6fcb'/>
+      <pointer-type-def type-id='e99c1aa3' size-in-bits='64' id='15a711af'/>
+      <pointer-type-def type-id='51511031' size-in-bits='64' id='f08a54cd'/>
+      <pointer-type-def type-id='fbc27f3f' size-in-bits='64' id='5228b15b'/>
+      <pointer-type-def type-id='5e4b012a' size-in-bits='64' id='d6ca98e4'/>
+      <pointer-type-def type-id='da761e39' size-in-bits='64' id='3c511dc5'/>
+      <pointer-type-def type-id='a178e3ef' size-in-bits='64' id='9e135c1b'/>
+      <pointer-type-def type-id='b2f05574' size-in-bits='64' id='1ad767ce'/>
+      <pointer-type-def type-id='c9f6ac19' size-in-bits='64' id='626eee7d'/>
+      <pointer-type-def type-id='4965c54d' size-in-bits='64' id='c5fb4eb9'/>
+      <pointer-type-def type-id='762f5ca6' size-in-bits='64' id='95a1c330'/>
+      <pointer-type-def type-id='2d19d67d' size-in-bits='64' id='ecbadb29'/>
+      <pointer-type-def type-id='a581a2f2' size-in-bits='64' id='add0c1a4'/>
+      <pointer-type-def type-id='5141aef4' size-in-bits='64' id='f1dac4d6'/>
+      <pointer-type-def type-id='8c3a8dc2' size-in-bits='64' id='8afbb034'/>
+      <pointer-type-def type-id='14ed8641' size-in-bits='64' id='ce1d0c65'/>
+      <pointer-type-def type-id='6bf2c0de' size-in-bits='64' id='00ca7240'/>
+      <pointer-type-def type-id='0ce7c350' size-in-bits='64' id='841c4b1a'/>
+      <pointer-type-def type-id='3722f046' size-in-bits='64' id='d170fd68'/>
+      <pointer-type-def type-id='25b5e9dd' size-in-bits='64' id='bb2acc29'/>
+      <pointer-type-def type-id='0d7f26ee' size-in-bits='64' id='39979680'/>
+      <pointer-type-def type-id='92ff6821' size-in-bits='64' id='e279af7d'/>
+      <pointer-type-def type-id='b92daa92' size-in-bits='64' id='f7f7a1c4'/>
+      <pointer-type-def type-id='69de0232' size-in-bits='64' id='a1fc1aec'/>
+      <pointer-type-def type-id='6e68576a' size-in-bits='64' id='99da26e4'/>
+      <pointer-type-def type-id='ba9b6355' size-in-bits='64' id='83206c41'/>
+      <pointer-type-def type-id='cf67db5b' size-in-bits='64' id='5bb4e7cf'/>
+      <pointer-type-def type-id='3ab04ceb' size-in-bits='64' id='ad666b67'/>
+      <pointer-type-def type-id='c31e2430' size-in-bits='64' id='a9103ada'/>
+      <pointer-type-def type-id='7d422fee' size-in-bits='64' id='3e5d8250'/>
+      <pointer-type-def type-id='7110e319' size-in-bits='64' id='b916eba5'/>
+      <pointer-type-def type-id='efe2b85d' size-in-bits='64' id='bba0f341'/>
+      <pointer-type-def type-id='43bd95de' size-in-bits='64' id='5e89e128'/>
+      <pointer-type-def type-id='1ea25720' size-in-bits='64' id='22c1973a'/>
+      <pointer-type-def type-id='f0a4e670' size-in-bits='64' id='242a426a'/>
+      <pointer-type-def type-id='02ca2c2d' size-in-bits='64' id='68dd3d29'/>
+      <pointer-type-def type-id='8cd8691f' size-in-bits='64' id='654eb68b'/>
+      <pointer-type-def type-id='0147ecbd' size-in-bits='64' id='e0e35961'/>
+      <pointer-type-def type-id='bc2226be' size-in-bits='64' id='f61682c8'/>
+      <pointer-type-def type-id='e8048149' size-in-bits='64' id='e045e355'/>
+      <pointer-type-def type-id='e5140819' size-in-bits='64' id='b002e605'/>
+      <pointer-type-def type-id='08a81c4a' size-in-bits='64' id='7e6add04'/>
+      <pointer-type-def type-id='d8ec75b8' size-in-bits='64' id='8e9877b2'/>
+      <pointer-type-def type-id='9c0f0a76' size-in-bits='64' id='fffcbb90'/>
+      <pointer-type-def type-id='140658d3' size-in-bits='64' id='e4776627'/>
+      <pointer-type-def type-id='35048757' size-in-bits='64' id='030fbe7b'/>
+      <pointer-type-def type-id='d91d4c07' size-in-bits='64' id='dcf81beb'/>
+      <pointer-type-def type-id='48be0748' size-in-bits='64' id='6a7c3ba2'/>
+      <pointer-type-def type-id='c756879f' size-in-bits='64' id='a9032da3'/>
+      <pointer-type-def type-id='45947737' size-in-bits='64' id='706d79ff'/>
+      <pointer-type-def type-id='6d8d26fb' size-in-bits='64' id='01b378ab'/>
+      <pointer-type-def type-id='50718ec3' size-in-bits='64' id='fce83a73'/>
+      <pointer-type-def type-id='1cac2bf4' size-in-bits='64' id='9362acb2'/>
+      <pointer-type-def type-id='8a88d915' size-in-bits='64' id='c0c26d75'/>
+      <pointer-type-def type-id='8c70c365' size-in-bits='64' id='1a09a595'/>
+      <pointer-type-def type-id='d8d4804a' size-in-bits='64' id='7f7dc508'/>
+      <pointer-type-def type-id='214ce930' size-in-bits='64' id='7af1dc96'/>
+      <pointer-type-def type-id='9367a320' size-in-bits='64' id='5b19f7e6'/>
+      <pointer-type-def type-id='8cd7231c' size-in-bits='64' id='6f439e9a'/>
+      <pointer-type-def type-id='d1abd80d' size-in-bits='64' id='835ace8d'/>
+      <pointer-type-def type-id='a2365ade' size-in-bits='64' id='f1df8cf8'/>
+      <pointer-type-def type-id='17f99cdb' size-in-bits='64' id='03a67bbf'/>
+      <pointer-type-def type-id='e357eac3' size-in-bits='64' id='df4195e7'/>
+      <pointer-type-def type-id='9007252d' size-in-bits='64' id='6bc8bd61'/>
+      <pointer-type-def type-id='10781bfd' size-in-bits='64' id='39ee8359'/>
+      <pointer-type-def type-id='23e15d68' size-in-bits='64' id='dea9803a'/>
+      <pointer-type-def type-id='2591da2d' size-in-bits='64' id='c62f28a1'/>
+      <pointer-type-def type-id='db426f5c' size-in-bits='64' id='24f4d4de'/>
+      <pointer-type-def type-id='4e932973' size-in-bits='64' id='585d0267'/>
+      <pointer-type-def type-id='49354cf3' size-in-bits='64' id='8baf5297'/>
+      <pointer-type-def type-id='68523a94' size-in-bits='64' id='666fb412'/>
+      <pointer-type-def type-id='3ce3a3ea' size-in-bits='64' id='63c7e8e2'/>
+      <pointer-type-def type-id='3b132996' size-in-bits='64' id='d0299fd8'/>
+      <function-decl name='wiphy_new_nm' mangled-name='wiphy_new_nm' filepath='net/wireless/core.c' line='398' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wiphy_new_nm'>
+        <parameter type-id='8bfdd055' name='ops' filepath='net/wireless/core.c' line='398' column='1'/>
+        <parameter type-id='95e97e5e' name='sizeof_priv' filepath='net/wireless/core.c' line='398' column='1'/>
+        <parameter type-id='80f4b756' name='requested_name' filepath='net/wireless/core.c' line='399' column='1'/>
+        <return type-id='666fb412'/>
+      </function-decl>
+      <function-decl name='wiphy_free' mangled-name='wiphy_free' filepath='net/wireless/core.c' line='1069' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wiphy_free'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/core.c' line='1069' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='wiphy_register' mangled-name='wiphy_register' filepath='net/wireless/core.c' line='646' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wiphy_register'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/core.c' line='646' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='wiphy_unregister' mangled-name='wiphy_unregister' filepath='net/wireless/core.c' line='997' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wiphy_unregister'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/core.c' line='997' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_put_bss' mangled-name='cfg80211_put_bss' filepath='include/net/cfg80211.h' line='5960' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_put_bss'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='bda81d86'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_unregister_wdev' mangled-name='cfg80211_unregister_wdev' filepath='net/wireless/core.c' line='1129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_unregister_wdev'>
+        <parameter type-id='63c7e8e2' name='wdev' filepath='net/wireless/core.c' line='1129' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='045f8e20'>
+        <parameter type-id='666fb412'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='49390c3d'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='0953fbfe'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06206c42'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='1a548a87'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a1a8fac6'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='a9e8b173'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f856d933'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='9d025b00'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7f72358e'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2449db3f'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='fa1cae16'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='55a23884'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='083811d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='73c05c56'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='21a99b81'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fe3510af'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='e2254eee'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a23fc232'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='37ce53f5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6952013b'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='0953fbfe'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a965b0cc'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='0953fbfe'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0b70b14a'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='a39f64ad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='63671fdf'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='a39f64ad'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a6905674'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='56c1976f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1774d144'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='85e47e07'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8a324762'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='c24b1225'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2a27335a'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='2b041d55'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5ec38983'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='f7cfb49a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3bf25607'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='6f33eada'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0c844afb'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='6bfee0f2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='84e91ca7'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='e7e4a8d6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='54e57e1f'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='794da86a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='befdd9ec'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='9e4995c7'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5c1db944'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='22428037'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cdf04663'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='37104a66'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='374012d9'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='4ab96a04'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='981172e9'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='bfda7a08'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='452785d7'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='b600bf62'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e0deacaf'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='2203245a'/>
+        <parameter type-id='2b08dc87'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='43a70966'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='bbaf3419'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f34eff46'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='d74690fd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c64b03de'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='bbaf3419'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24cf4f51'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='ee1b00fc'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7fb22747'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='7af1dc96'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='95374427'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='5b19f7e6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e99c1aa3'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='51511031'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='4590ffe4'/>
+        <parameter type-id='4ab96a04'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fbc27f3f'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='0953fbfe'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5e4b012a'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da761e39'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a178e3ef'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='86505f90'/>
+        <parameter type-id='835ace8d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b2f05574'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='ec00acfb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c9f6ac19'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='bf642844'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4965c54d'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='762f5ca6'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='6f439e9a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2d19d67d'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='7af1dc96'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a581a2f2'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='9362acb2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5141aef4'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='fce83a73'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8c3a8dc2'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='c0c26d75'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='14ed8641'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='7f7dc508'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6bf2c0de'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ce7c350'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='a7832498'/>
+        <parameter type-id='a7832498'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3722f046'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='a7832498'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='25b5e9dd'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0d7f26ee'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='2203245a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='92ff6821'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b92daa92'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='69de0232'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6e68576a'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='bbaf3419'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ba9b6355'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cf67db5b'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='bbaf3419'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3ab04ceb'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='706d79ff'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c31e2430'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f1df8cf8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7d422fee'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7110e319'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='9362acb2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='efe2b85d'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='43bd95de'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1ea25720'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f0a4e670'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='02ca2c2d'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e2'/>
+        <parameter type-id='0953fbfe'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8cd8691f'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e2'/>
+        <parameter type-id='10794d1d'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0147ecbd'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e2'/>
+        <parameter type-id='d458dfce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bc2226be'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e2'/>
+        <parameter type-id='d458dfce'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e8048149'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e2'/>
+        <parameter type-id='c3524532'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e5140819'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e2'/>
+        <parameter type-id='6951bca2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08a81c4a'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e2'/>
+        <parameter type-id='c65b576f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d8ec75b8'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e2'/>
+        <parameter type-id='2981c44a'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9c0f0a76'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e2'/>
+        <parameter type-id='d46e3e96'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='140658d3'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e2'/>
+        <parameter type-id='ec00acfb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='35048757'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e2'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d91d4c07'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e2'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='48be0748'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e2'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c756879f'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e2'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2365ade'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='706d79ff'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='17f99cdb'>
+        <parameter type-id='666fb412'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e357eac3'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9007252d'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05c'/>
+        <parameter type-id='bbaf3419'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='10781bfd'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='1a09a595'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='23e15d68'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2591da2d'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='db426f5c'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e2'/>
+        <parameter type-id='6951bca2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4e932973'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e2'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='49354cf3'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e2'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3b132996'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='86505f90'/>
+        <parameter type-id='835ace8d'/>
+        <return type-id='63c7e8e2'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/wireless/ibss.c' language='LANG_C89'>
+      <function-decl name='cfg80211_ibss_joined' mangled-name='cfg80211_ibss_joined' filepath='net/wireless/ibss.c' line='59' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_ibss_joined'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/wireless/ibss.c' line='59' column='1'/>
+        <parameter type-id='bbaf3419' name='bssid' filepath='net/wireless/ibss.c' line='59' column='1'/>
+        <parameter type-id='ec00acfb' name='channel' filepath='net/wireless/ibss.c' line='60' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/ibss.c' line='60' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/wireless/mlme.c' language='LANG_C89'>
+      <enum-decl name='nl80211_key_type' filepath='include/uapi/linux/nl80211.h' line='4450' column='1' id='fa66a097'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_KEYTYPE_GROUP' value='0'/>
+        <enumerator name='NL80211_KEYTYPE_PAIRWISE' value='1'/>
+        <enumerator name='NL80211_KEYTYPE_PEERKEY' value='2'/>
+        <enumerator name='NUM_NL80211_KEYTYPES' value='3'/>
+      </enum-decl>
+      <function-decl name='cfg80211_rx_assoc_resp' mangled-name='cfg80211_rx_assoc_resp' filepath='net/wireless/mlme.c' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_rx_assoc_resp'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/wireless/mlme.c' line='23' column='1'/>
+        <parameter type-id='bda81d86' name='bss' filepath='net/wireless/mlme.c' line='23' column='1'/>
+        <parameter type-id='bbaf3419' name='buf' filepath='net/wireless/mlme.c' line='24' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/wireless/mlme.c' line='24' column='1'/>
+        <parameter type-id='95e97e5e' name='uapsd_queues' filepath='net/wireless/mlme.c' line='24' column='1'/>
+        <parameter type-id='bbaf3419' name='req_ies' filepath='net/wireless/mlme.c' line='25' column='1'/>
+        <parameter type-id='b59d7dce' name='req_ies_len' filepath='net/wireless/mlme.c' line='25' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_rx_mlme_mgmt' mangled-name='cfg80211_rx_mlme_mgmt' filepath='net/wireless/mlme.c' line='112' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_rx_mlme_mgmt'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/wireless/mlme.c' line='112' column='1'/>
+        <parameter type-id='bbaf3419' name='buf' filepath='net/wireless/mlme.c' line='112' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/wireless/mlme.c' line='112' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_auth_timeout' mangled-name='cfg80211_auth_timeout' filepath='net/wireless/mlme.c' line='133' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_auth_timeout'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/wireless/mlme.c' line='133' column='1'/>
+        <parameter type-id='bbaf3419' name='addr' filepath='net/wireless/mlme.c' line='133' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_assoc_timeout' mangled-name='cfg80211_assoc_timeout' filepath='net/wireless/mlme.c' line='146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_assoc_timeout'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/wireless/mlme.c' line='146' column='1'/>
+        <parameter type-id='bda81d86' name='bss' filepath='net/wireless/mlme.c' line='146' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_tx_mlme_mgmt' mangled-name='cfg80211_tx_mlme_mgmt' filepath='net/wireless/mlme.c' line='174' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_tx_mlme_mgmt'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/wireless/mlme.c' line='174' column='1'/>
+        <parameter type-id='bbaf3419' name='buf' filepath='net/wireless/mlme.c' line='174' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/wireless/mlme.c' line='174' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_michael_mic_failure' mangled-name='cfg80211_michael_mic_failure' filepath='net/wireless/mlme.c' line='193' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_michael_mic_failure'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/wireless/mlme.c' line='193' column='1'/>
+        <parameter type-id='bbaf3419' name='addr' filepath='net/wireless/mlme.c' line='193' column='1'/>
+        <parameter type-id='fa66a097' name='key_type' filepath='net/wireless/mlme.c' line='194' column='1'/>
+        <parameter type-id='95e97e5e' name='key_id' filepath='net/wireless/mlme.c' line='194' column='1'/>
+        <parameter type-id='bbaf3419' name='tsc' filepath='net/wireless/mlme.c' line='195' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/mlme.c' line='195' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_rx_mgmt' mangled-name='cfg80211_rx_mgmt' filepath='net/wireless/mlme.c' line='699' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_rx_mgmt'>
+        <parameter type-id='63c7e8e2' name='wdev' filepath='net/wireless/mlme.c' line='699' column='1'/>
+        <parameter type-id='95e97e5e' name='freq' filepath='net/wireless/mlme.c' line='699' column='1'/>
+        <parameter type-id='95e97e5e' name='sig_dbm' filepath='net/wireless/mlme.c' line='699' column='1'/>
+        <parameter type-id='bbaf3419' name='buf' filepath='net/wireless/mlme.c' line='700' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/wireless/mlme.c' line='700' column='1'/>
+        <parameter type-id='19c2251e' name='flags' filepath='net/wireless/mlme.c' line='700' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/wireless/nl80211.c' language='LANG_C89'>
+      <enum-decl name='nl80211_commands' filepath='include/uapi/linux/nl80211.h' line='1107' column='1' id='187e1e49'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_CMD_UNSPEC' value='0'/>
+        <enumerator name='NL80211_CMD_GET_WIPHY' value='1'/>
+        <enumerator name='NL80211_CMD_SET_WIPHY' value='2'/>
+        <enumerator name='NL80211_CMD_NEW_WIPHY' value='3'/>
+        <enumerator name='NL80211_CMD_DEL_WIPHY' value='4'/>
+        <enumerator name='NL80211_CMD_GET_INTERFACE' value='5'/>
+        <enumerator name='NL80211_CMD_SET_INTERFACE' value='6'/>
+        <enumerator name='NL80211_CMD_NEW_INTERFACE' value='7'/>
+        <enumerator name='NL80211_CMD_DEL_INTERFACE' value='8'/>
+        <enumerator name='NL80211_CMD_GET_KEY' value='9'/>
+        <enumerator name='NL80211_CMD_SET_KEY' value='10'/>
+        <enumerator name='NL80211_CMD_NEW_KEY' value='11'/>
+        <enumerator name='NL80211_CMD_DEL_KEY' value='12'/>
+        <enumerator name='NL80211_CMD_GET_BEACON' value='13'/>
+        <enumerator name='NL80211_CMD_SET_BEACON' value='14'/>
+        <enumerator name='NL80211_CMD_START_AP' value='15'/>
+        <enumerator name='NL80211_CMD_NEW_BEACON' value='15'/>
+        <enumerator name='NL80211_CMD_STOP_AP' value='16'/>
+        <enumerator name='NL80211_CMD_DEL_BEACON' value='16'/>
+        <enumerator name='NL80211_CMD_GET_STATION' value='17'/>
+        <enumerator name='NL80211_CMD_SET_STATION' value='18'/>
+        <enumerator name='NL80211_CMD_NEW_STATION' value='19'/>
+        <enumerator name='NL80211_CMD_DEL_STATION' value='20'/>
+        <enumerator name='NL80211_CMD_GET_MPATH' value='21'/>
+        <enumerator name='NL80211_CMD_SET_MPATH' value='22'/>
+        <enumerator name='NL80211_CMD_NEW_MPATH' value='23'/>
+        <enumerator name='NL80211_CMD_DEL_MPATH' value='24'/>
+        <enumerator name='NL80211_CMD_SET_BSS' value='25'/>
+        <enumerator name='NL80211_CMD_SET_REG' value='26'/>
+        <enumerator name='NL80211_CMD_REQ_SET_REG' value='27'/>
+        <enumerator name='NL80211_CMD_GET_MESH_CONFIG' value='28'/>
+        <enumerator name='NL80211_CMD_SET_MESH_CONFIG' value='29'/>
+        <enumerator name='NL80211_CMD_SET_MGMT_EXTRA_IE' value='30'/>
+        <enumerator name='NL80211_CMD_GET_REG' value='31'/>
+        <enumerator name='NL80211_CMD_GET_SCAN' value='32'/>
+        <enumerator name='NL80211_CMD_TRIGGER_SCAN' value='33'/>
+        <enumerator name='NL80211_CMD_NEW_SCAN_RESULTS' value='34'/>
+        <enumerator name='NL80211_CMD_SCAN_ABORTED' value='35'/>
+        <enumerator name='NL80211_CMD_REG_CHANGE' value='36'/>
+        <enumerator name='NL80211_CMD_AUTHENTICATE' value='37'/>
+        <enumerator name='NL80211_CMD_ASSOCIATE' value='38'/>
+        <enumerator name='NL80211_CMD_DEAUTHENTICATE' value='39'/>
+        <enumerator name='NL80211_CMD_DISASSOCIATE' value='40'/>
+        <enumerator name='NL80211_CMD_MICHAEL_MIC_FAILURE' value='41'/>
+        <enumerator name='NL80211_CMD_REG_BEACON_HINT' value='42'/>
+        <enumerator name='NL80211_CMD_JOIN_IBSS' value='43'/>
+        <enumerator name='NL80211_CMD_LEAVE_IBSS' value='44'/>
+        <enumerator name='NL80211_CMD_TESTMODE' value='45'/>
+        <enumerator name='NL80211_CMD_CONNECT' value='46'/>
+        <enumerator name='NL80211_CMD_ROAM' value='47'/>
+        <enumerator name='NL80211_CMD_DISCONNECT' value='48'/>
+        <enumerator name='NL80211_CMD_SET_WIPHY_NETNS' value='49'/>
+        <enumerator name='NL80211_CMD_GET_SURVEY' value='50'/>
+        <enumerator name='NL80211_CMD_NEW_SURVEY_RESULTS' value='51'/>
+        <enumerator name='NL80211_CMD_SET_PMKSA' value='52'/>
+        <enumerator name='NL80211_CMD_DEL_PMKSA' value='53'/>
+        <enumerator name='NL80211_CMD_FLUSH_PMKSA' value='54'/>
+        <enumerator name='NL80211_CMD_REMAIN_ON_CHANNEL' value='55'/>
+        <enumerator name='NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL' value='56'/>
+        <enumerator name='NL80211_CMD_SET_TX_BITRATE_MASK' value='57'/>
+        <enumerator name='NL80211_CMD_REGISTER_FRAME' value='58'/>
+        <enumerator name='NL80211_CMD_REGISTER_ACTION' value='58'/>
+        <enumerator name='NL80211_CMD_FRAME' value='59'/>
+        <enumerator name='NL80211_CMD_ACTION' value='59'/>
+        <enumerator name='NL80211_CMD_FRAME_TX_STATUS' value='60'/>
+        <enumerator name='NL80211_CMD_ACTION_TX_STATUS' value='60'/>
+        <enumerator name='NL80211_CMD_SET_POWER_SAVE' value='61'/>
+        <enumerator name='NL80211_CMD_GET_POWER_SAVE' value='62'/>
+        <enumerator name='NL80211_CMD_SET_CQM' value='63'/>
+        <enumerator name='NL80211_CMD_NOTIFY_CQM' value='64'/>
+        <enumerator name='NL80211_CMD_SET_CHANNEL' value='65'/>
+        <enumerator name='NL80211_CMD_SET_WDS_PEER' value='66'/>
+        <enumerator name='NL80211_CMD_FRAME_WAIT_CANCEL' value='67'/>
+        <enumerator name='NL80211_CMD_JOIN_MESH' value='68'/>
+        <enumerator name='NL80211_CMD_LEAVE_MESH' value='69'/>
+        <enumerator name='NL80211_CMD_UNPROT_DEAUTHENTICATE' value='70'/>
+        <enumerator name='NL80211_CMD_UNPROT_DISASSOCIATE' value='71'/>
+        <enumerator name='NL80211_CMD_NEW_PEER_CANDIDATE' value='72'/>
+        <enumerator name='NL80211_CMD_GET_WOWLAN' value='73'/>
+        <enumerator name='NL80211_CMD_SET_WOWLAN' value='74'/>
+        <enumerator name='NL80211_CMD_START_SCHED_SCAN' value='75'/>
+        <enumerator name='NL80211_CMD_STOP_SCHED_SCAN' value='76'/>
+        <enumerator name='NL80211_CMD_SCHED_SCAN_RESULTS' value='77'/>
+        <enumerator name='NL80211_CMD_SCHED_SCAN_STOPPED' value='78'/>
+        <enumerator name='NL80211_CMD_SET_REKEY_OFFLOAD' value='79'/>
+        <enumerator name='NL80211_CMD_PMKSA_CANDIDATE' value='80'/>
+        <enumerator name='NL80211_CMD_TDLS_OPER' value='81'/>
+        <enumerator name='NL80211_CMD_TDLS_MGMT' value='82'/>
+        <enumerator name='NL80211_CMD_UNEXPECTED_FRAME' value='83'/>
+        <enumerator name='NL80211_CMD_PROBE_CLIENT' value='84'/>
+        <enumerator name='NL80211_CMD_REGISTER_BEACONS' value='85'/>
+        <enumerator name='NL80211_CMD_UNEXPECTED_4ADDR_FRAME' value='86'/>
+        <enumerator name='NL80211_CMD_SET_NOACK_MAP' value='87'/>
+        <enumerator name='NL80211_CMD_CH_SWITCH_NOTIFY' value='88'/>
+        <enumerator name='NL80211_CMD_START_P2P_DEVICE' value='89'/>
+        <enumerator name='NL80211_CMD_STOP_P2P_DEVICE' value='90'/>
+        <enumerator name='NL80211_CMD_CONN_FAILED' value='91'/>
+        <enumerator name='NL80211_CMD_SET_MCAST_RATE' value='92'/>
+        <enumerator name='NL80211_CMD_SET_MAC_ACL' value='93'/>
+        <enumerator name='NL80211_CMD_RADAR_DETECT' value='94'/>
+        <enumerator name='NL80211_CMD_GET_PROTOCOL_FEATURES' value='95'/>
+        <enumerator name='NL80211_CMD_UPDATE_FT_IES' value='96'/>
+        <enumerator name='NL80211_CMD_FT_EVENT' value='97'/>
+        <enumerator name='NL80211_CMD_CRIT_PROTOCOL_START' value='98'/>
+        <enumerator name='NL80211_CMD_CRIT_PROTOCOL_STOP' value='99'/>
+        <enumerator name='NL80211_CMD_GET_COALESCE' value='100'/>
+        <enumerator name='NL80211_CMD_SET_COALESCE' value='101'/>
+        <enumerator name='NL80211_CMD_CHANNEL_SWITCH' value='102'/>
+        <enumerator name='NL80211_CMD_VENDOR' value='103'/>
+        <enumerator name='NL80211_CMD_SET_QOS_MAP' value='104'/>
+        <enumerator name='NL80211_CMD_ADD_TX_TS' value='105'/>
+        <enumerator name='NL80211_CMD_DEL_TX_TS' value='106'/>
+        <enumerator name='NL80211_CMD_GET_MPP' value='107'/>
+        <enumerator name='NL80211_CMD_JOIN_OCB' value='108'/>
+        <enumerator name='NL80211_CMD_LEAVE_OCB' value='109'/>
+        <enumerator name='NL80211_CMD_CH_SWITCH_STARTED_NOTIFY' value='110'/>
+        <enumerator name='NL80211_CMD_TDLS_CHANNEL_SWITCH' value='111'/>
+        <enumerator name='NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH' value='112'/>
+        <enumerator name='NL80211_CMD_WIPHY_REG_CHANGE' value='113'/>
+        <enumerator name='NL80211_CMD_ABORT_SCAN' value='114'/>
+        <enumerator name='NL80211_CMD_START_NAN' value='115'/>
+        <enumerator name='NL80211_CMD_STOP_NAN' value='116'/>
+        <enumerator name='NL80211_CMD_ADD_NAN_FUNCTION' value='117'/>
+        <enumerator name='NL80211_CMD_DEL_NAN_FUNCTION' value='118'/>
+        <enumerator name='NL80211_CMD_CHANGE_NAN_CONFIG' value='119'/>
+        <enumerator name='NL80211_CMD_NAN_MATCH' value='120'/>
+        <enumerator name='NL80211_CMD_SET_MULTICAST_TO_UNICAST' value='121'/>
+        <enumerator name='NL80211_CMD_UPDATE_CONNECT_PARAMS' value='122'/>
+        <enumerator name='NL80211_CMD_SET_PMK' value='123'/>
+        <enumerator name='NL80211_CMD_DEL_PMK' value='124'/>
+        <enumerator name='NL80211_CMD_PORT_AUTHORIZED' value='125'/>
+        <enumerator name='NL80211_CMD_RELOAD_REGDB' value='126'/>
+        <enumerator name='NL80211_CMD_EXTERNAL_AUTH' value='127'/>
+        <enumerator name='NL80211_CMD_STA_OPMODE_CHANGED' value='128'/>
+        <enumerator name='NL80211_CMD_CONTROL_PORT_FRAME' value='129'/>
+        <enumerator name='NL80211_CMD_GET_FTM_RESPONDER_STATS' value='130'/>
+        <enumerator name='NL80211_CMD_PEER_MEASUREMENT_START' value='131'/>
+        <enumerator name='NL80211_CMD_PEER_MEASUREMENT_RESULT' value='132'/>
+        <enumerator name='NL80211_CMD_PEER_MEASUREMENT_COMPLETE' value='133'/>
+        <enumerator name='NL80211_CMD_NOTIFY_RADAR' value='134'/>
+        <enumerator name='NL80211_CMD_UPDATE_OWE_INFO' value='135'/>
+        <enumerator name='NL80211_CMD_PROBE_MESH_LINK' value='136'/>
+        <enumerator name='__NL80211_CMD_AFTER_LAST' value='137'/>
+        <enumerator name='NL80211_CMD_MAX' value='136'/>
+      </enum-decl>
+      <enum-decl name='nl80211_attrs' filepath='include/uapi/linux/nl80211.h' line='2383' column='1' id='320b0ded'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_ATTR_UNSPEC' value='0'/>
+        <enumerator name='NL80211_ATTR_WIPHY' value='1'/>
+        <enumerator name='NL80211_ATTR_WIPHY_NAME' value='2'/>
+        <enumerator name='NL80211_ATTR_IFINDEX' value='3'/>
+        <enumerator name='NL80211_ATTR_IFNAME' value='4'/>
+        <enumerator name='NL80211_ATTR_IFTYPE' value='5'/>
+        <enumerator name='NL80211_ATTR_MAC' value='6'/>
+        <enumerator name='NL80211_ATTR_KEY_DATA' value='7'/>
+        <enumerator name='NL80211_ATTR_KEY_IDX' value='8'/>
+        <enumerator name='NL80211_ATTR_KEY_CIPHER' value='9'/>
+        <enumerator name='NL80211_ATTR_KEY_SEQ' value='10'/>
+        <enumerator name='NL80211_ATTR_KEY_DEFAULT' value='11'/>
+        <enumerator name='NL80211_ATTR_BEACON_INTERVAL' value='12'/>
+        <enumerator name='NL80211_ATTR_DTIM_PERIOD' value='13'/>
+        <enumerator name='NL80211_ATTR_BEACON_HEAD' value='14'/>
+        <enumerator name='NL80211_ATTR_BEACON_TAIL' value='15'/>
+        <enumerator name='NL80211_ATTR_STA_AID' value='16'/>
+        <enumerator name='NL80211_ATTR_STA_FLAGS' value='17'/>
+        <enumerator name='NL80211_ATTR_STA_LISTEN_INTERVAL' value='18'/>
+        <enumerator name='NL80211_ATTR_STA_SUPPORTED_RATES' value='19'/>
+        <enumerator name='NL80211_ATTR_STA_VLAN' value='20'/>
+        <enumerator name='NL80211_ATTR_STA_INFO' value='21'/>
+        <enumerator name='NL80211_ATTR_WIPHY_BANDS' value='22'/>
+        <enumerator name='NL80211_ATTR_MNTR_FLAGS' value='23'/>
+        <enumerator name='NL80211_ATTR_MESH_ID' value='24'/>
+        <enumerator name='NL80211_ATTR_STA_PLINK_ACTION' value='25'/>
+        <enumerator name='NL80211_ATTR_MPATH_NEXT_HOP' value='26'/>
+        <enumerator name='NL80211_ATTR_MPATH_INFO' value='27'/>
+        <enumerator name='NL80211_ATTR_BSS_CTS_PROT' value='28'/>
+        <enumerator name='NL80211_ATTR_BSS_SHORT_PREAMBLE' value='29'/>
+        <enumerator name='NL80211_ATTR_BSS_SHORT_SLOT_TIME' value='30'/>
+        <enumerator name='NL80211_ATTR_HT_CAPABILITY' value='31'/>
+        <enumerator name='NL80211_ATTR_SUPPORTED_IFTYPES' value='32'/>
+        <enumerator name='NL80211_ATTR_REG_ALPHA2' value='33'/>
+        <enumerator name='NL80211_ATTR_REG_RULES' value='34'/>
+        <enumerator name='NL80211_ATTR_MESH_CONFIG' value='35'/>
+        <enumerator name='NL80211_ATTR_BSS_BASIC_RATES' value='36'/>
+        <enumerator name='NL80211_ATTR_WIPHY_TXQ_PARAMS' value='37'/>
+        <enumerator name='NL80211_ATTR_WIPHY_FREQ' value='38'/>
+        <enumerator name='NL80211_ATTR_WIPHY_CHANNEL_TYPE' value='39'/>
+        <enumerator name='NL80211_ATTR_KEY_DEFAULT_MGMT' value='40'/>
+        <enumerator name='NL80211_ATTR_MGMT_SUBTYPE' value='41'/>
+        <enumerator name='NL80211_ATTR_IE' value='42'/>
+        <enumerator name='NL80211_ATTR_MAX_NUM_SCAN_SSIDS' value='43'/>
+        <enumerator name='NL80211_ATTR_SCAN_FREQUENCIES' value='44'/>
+        <enumerator name='NL80211_ATTR_SCAN_SSIDS' value='45'/>
+        <enumerator name='NL80211_ATTR_GENERATION' value='46'/>
+        <enumerator name='NL80211_ATTR_BSS' value='47'/>
+        <enumerator name='NL80211_ATTR_REG_INITIATOR' value='48'/>
+        <enumerator name='NL80211_ATTR_REG_TYPE' value='49'/>
+        <enumerator name='NL80211_ATTR_SUPPORTED_COMMANDS' value='50'/>
+        <enumerator name='NL80211_ATTR_FRAME' value='51'/>
+        <enumerator name='NL80211_ATTR_SSID' value='52'/>
+        <enumerator name='NL80211_ATTR_AUTH_TYPE' value='53'/>
+        <enumerator name='NL80211_ATTR_REASON_CODE' value='54'/>
+        <enumerator name='NL80211_ATTR_KEY_TYPE' value='55'/>
+        <enumerator name='NL80211_ATTR_MAX_SCAN_IE_LEN' value='56'/>
+        <enumerator name='NL80211_ATTR_CIPHER_SUITES' value='57'/>
+        <enumerator name='NL80211_ATTR_FREQ_BEFORE' value='58'/>
+        <enumerator name='NL80211_ATTR_FREQ_AFTER' value='59'/>
+        <enumerator name='NL80211_ATTR_FREQ_FIXED' value='60'/>
+        <enumerator name='NL80211_ATTR_WIPHY_RETRY_SHORT' value='61'/>
+        <enumerator name='NL80211_ATTR_WIPHY_RETRY_LONG' value='62'/>
+        <enumerator name='NL80211_ATTR_WIPHY_FRAG_THRESHOLD' value='63'/>
+        <enumerator name='NL80211_ATTR_WIPHY_RTS_THRESHOLD' value='64'/>
+        <enumerator name='NL80211_ATTR_TIMED_OUT' value='65'/>
+        <enumerator name='NL80211_ATTR_USE_MFP' value='66'/>
+        <enumerator name='NL80211_ATTR_STA_FLAGS2' value='67'/>
+        <enumerator name='NL80211_ATTR_CONTROL_PORT' value='68'/>
+        <enumerator name='NL80211_ATTR_TESTDATA' value='69'/>
+        <enumerator name='NL80211_ATTR_PRIVACY' value='70'/>
+        <enumerator name='NL80211_ATTR_DISCONNECTED_BY_AP' value='71'/>
+        <enumerator name='NL80211_ATTR_STATUS_CODE' value='72'/>
+        <enumerator name='NL80211_ATTR_CIPHER_SUITES_PAIRWISE' value='73'/>
+        <enumerator name='NL80211_ATTR_CIPHER_SUITE_GROUP' value='74'/>
+        <enumerator name='NL80211_ATTR_WPA_VERSIONS' value='75'/>
+        <enumerator name='NL80211_ATTR_AKM_SUITES' value='76'/>
+        <enumerator name='NL80211_ATTR_REQ_IE' value='77'/>
+        <enumerator name='NL80211_ATTR_RESP_IE' value='78'/>
+        <enumerator name='NL80211_ATTR_PREV_BSSID' value='79'/>
+        <enumerator name='NL80211_ATTR_KEY' value='80'/>
+        <enumerator name='NL80211_ATTR_KEYS' value='81'/>
+        <enumerator name='NL80211_ATTR_PID' value='82'/>
+        <enumerator name='NL80211_ATTR_4ADDR' value='83'/>
+        <enumerator name='NL80211_ATTR_SURVEY_INFO' value='84'/>
+        <enumerator name='NL80211_ATTR_PMKID' value='85'/>
+        <enumerator name='NL80211_ATTR_MAX_NUM_PMKIDS' value='86'/>
+        <enumerator name='NL80211_ATTR_DURATION' value='87'/>
+        <enumerator name='NL80211_ATTR_COOKIE' value='88'/>
+        <enumerator name='NL80211_ATTR_WIPHY_COVERAGE_CLASS' value='89'/>
+        <enumerator name='NL80211_ATTR_TX_RATES' value='90'/>
+        <enumerator name='NL80211_ATTR_FRAME_MATCH' value='91'/>
+        <enumerator name='NL80211_ATTR_ACK' value='92'/>
+        <enumerator name='NL80211_ATTR_PS_STATE' value='93'/>
+        <enumerator name='NL80211_ATTR_CQM' value='94'/>
+        <enumerator name='NL80211_ATTR_LOCAL_STATE_CHANGE' value='95'/>
+        <enumerator name='NL80211_ATTR_AP_ISOLATE' value='96'/>
+        <enumerator name='NL80211_ATTR_WIPHY_TX_POWER_SETTING' value='97'/>
+        <enumerator name='NL80211_ATTR_WIPHY_TX_POWER_LEVEL' value='98'/>
+        <enumerator name='NL80211_ATTR_TX_FRAME_TYPES' value='99'/>
+        <enumerator name='NL80211_ATTR_RX_FRAME_TYPES' value='100'/>
+        <enumerator name='NL80211_ATTR_FRAME_TYPE' value='101'/>
+        <enumerator name='NL80211_ATTR_CONTROL_PORT_ETHERTYPE' value='102'/>
+        <enumerator name='NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT' value='103'/>
+        <enumerator name='NL80211_ATTR_SUPPORT_IBSS_RSN' value='104'/>
+        <enumerator name='NL80211_ATTR_WIPHY_ANTENNA_TX' value='105'/>
+        <enumerator name='NL80211_ATTR_WIPHY_ANTENNA_RX' value='106'/>
+        <enumerator name='NL80211_ATTR_MCAST_RATE' value='107'/>
+        <enumerator name='NL80211_ATTR_OFFCHANNEL_TX_OK' value='108'/>
+        <enumerator name='NL80211_ATTR_BSS_HT_OPMODE' value='109'/>
+        <enumerator name='NL80211_ATTR_KEY_DEFAULT_TYPES' value='110'/>
+        <enumerator name='NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION' value='111'/>
+        <enumerator name='NL80211_ATTR_MESH_SETUP' value='112'/>
+        <enumerator name='NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX' value='113'/>
+        <enumerator name='NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX' value='114'/>
+        <enumerator name='NL80211_ATTR_SUPPORT_MESH_AUTH' value='115'/>
+        <enumerator name='NL80211_ATTR_STA_PLINK_STATE' value='116'/>
+        <enumerator name='NL80211_ATTR_WOWLAN_TRIGGERS' value='117'/>
+        <enumerator name='NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED' value='118'/>
+        <enumerator name='NL80211_ATTR_SCHED_SCAN_INTERVAL' value='119'/>
+        <enumerator name='NL80211_ATTR_INTERFACE_COMBINATIONS' value='120'/>
+        <enumerator name='NL80211_ATTR_SOFTWARE_IFTYPES' value='121'/>
+        <enumerator name='NL80211_ATTR_REKEY_DATA' value='122'/>
+        <enumerator name='NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS' value='123'/>
+        <enumerator name='NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN' value='124'/>
+        <enumerator name='NL80211_ATTR_SCAN_SUPP_RATES' value='125'/>
+        <enumerator name='NL80211_ATTR_HIDDEN_SSID' value='126'/>
+        <enumerator name='NL80211_ATTR_IE_PROBE_RESP' value='127'/>
+        <enumerator name='NL80211_ATTR_IE_ASSOC_RESP' value='128'/>
+        <enumerator name='NL80211_ATTR_STA_WME' value='129'/>
+        <enumerator name='NL80211_ATTR_SUPPORT_AP_UAPSD' value='130'/>
+        <enumerator name='NL80211_ATTR_ROAM_SUPPORT' value='131'/>
+        <enumerator name='NL80211_ATTR_SCHED_SCAN_MATCH' value='132'/>
+        <enumerator name='NL80211_ATTR_MAX_MATCH_SETS' value='133'/>
+        <enumerator name='NL80211_ATTR_PMKSA_CANDIDATE' value='134'/>
+        <enumerator name='NL80211_ATTR_TX_NO_CCK_RATE' value='135'/>
+        <enumerator name='NL80211_ATTR_TDLS_ACTION' value='136'/>
+        <enumerator name='NL80211_ATTR_TDLS_DIALOG_TOKEN' value='137'/>
+        <enumerator name='NL80211_ATTR_TDLS_OPERATION' value='138'/>
+        <enumerator name='NL80211_ATTR_TDLS_SUPPORT' value='139'/>
+        <enumerator name='NL80211_ATTR_TDLS_EXTERNAL_SETUP' value='140'/>
+        <enumerator name='NL80211_ATTR_DEVICE_AP_SME' value='141'/>
+        <enumerator name='NL80211_ATTR_DONT_WAIT_FOR_ACK' value='142'/>
+        <enumerator name='NL80211_ATTR_FEATURE_FLAGS' value='143'/>
+        <enumerator name='NL80211_ATTR_PROBE_RESP_OFFLOAD' value='144'/>
+        <enumerator name='NL80211_ATTR_PROBE_RESP' value='145'/>
+        <enumerator name='NL80211_ATTR_DFS_REGION' value='146'/>
+        <enumerator name='NL80211_ATTR_DISABLE_HT' value='147'/>
+        <enumerator name='NL80211_ATTR_HT_CAPABILITY_MASK' value='148'/>
+        <enumerator name='NL80211_ATTR_NOACK_MAP' value='149'/>
+        <enumerator name='NL80211_ATTR_INACTIVITY_TIMEOUT' value='150'/>
+        <enumerator name='NL80211_ATTR_RX_SIGNAL_DBM' value='151'/>
+        <enumerator name='NL80211_ATTR_BG_SCAN_PERIOD' value='152'/>
+        <enumerator name='NL80211_ATTR_WDEV' value='153'/>
+        <enumerator name='NL80211_ATTR_USER_REG_HINT_TYPE' value='154'/>
+        <enumerator name='NL80211_ATTR_CONN_FAILED_REASON' value='155'/>
+        <enumerator name='NL80211_ATTR_AUTH_DATA' value='156'/>
+        <enumerator name='NL80211_ATTR_VHT_CAPABILITY' value='157'/>
+        <enumerator name='NL80211_ATTR_SCAN_FLAGS' value='158'/>
+        <enumerator name='NL80211_ATTR_CHANNEL_WIDTH' value='159'/>
+        <enumerator name='NL80211_ATTR_CENTER_FREQ1' value='160'/>
+        <enumerator name='NL80211_ATTR_CENTER_FREQ2' value='161'/>
+        <enumerator name='NL80211_ATTR_P2P_CTWINDOW' value='162'/>
+        <enumerator name='NL80211_ATTR_P2P_OPPPS' value='163'/>
+        <enumerator name='NL80211_ATTR_LOCAL_MESH_POWER_MODE' value='164'/>
+        <enumerator name='NL80211_ATTR_ACL_POLICY' value='165'/>
+        <enumerator name='NL80211_ATTR_MAC_ADDRS' value='166'/>
+        <enumerator name='NL80211_ATTR_MAC_ACL_MAX' value='167'/>
+        <enumerator name='NL80211_ATTR_RADAR_EVENT' value='168'/>
+        <enumerator name='NL80211_ATTR_EXT_CAPA' value='169'/>
+        <enumerator name='NL80211_ATTR_EXT_CAPA_MASK' value='170'/>
+        <enumerator name='NL80211_ATTR_STA_CAPABILITY' value='171'/>
+        <enumerator name='NL80211_ATTR_STA_EXT_CAPABILITY' value='172'/>
+        <enumerator name='NL80211_ATTR_PROTOCOL_FEATURES' value='173'/>
+        <enumerator name='NL80211_ATTR_SPLIT_WIPHY_DUMP' value='174'/>
+        <enumerator name='NL80211_ATTR_DISABLE_VHT' value='175'/>
+        <enumerator name='NL80211_ATTR_VHT_CAPABILITY_MASK' value='176'/>
+        <enumerator name='NL80211_ATTR_MDID' value='177'/>
+        <enumerator name='NL80211_ATTR_IE_RIC' value='178'/>
+        <enumerator name='NL80211_ATTR_CRIT_PROT_ID' value='179'/>
+        <enumerator name='NL80211_ATTR_MAX_CRIT_PROT_DURATION' value='180'/>
+        <enumerator name='NL80211_ATTR_PEER_AID' value='181'/>
+        <enumerator name='NL80211_ATTR_COALESCE_RULE' value='182'/>
+        <enumerator name='NL80211_ATTR_CH_SWITCH_COUNT' value='183'/>
+        <enumerator name='NL80211_ATTR_CH_SWITCH_BLOCK_TX' value='184'/>
+        <enumerator name='NL80211_ATTR_CSA_IES' value='185'/>
+        <enumerator name='NL80211_ATTR_CSA_C_OFF_BEACON' value='186'/>
+        <enumerator name='NL80211_ATTR_CSA_C_OFF_PRESP' value='187'/>
+        <enumerator name='NL80211_ATTR_RXMGMT_FLAGS' value='188'/>
+        <enumerator name='NL80211_ATTR_STA_SUPPORTED_CHANNELS' value='189'/>
+        <enumerator name='NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES' value='190'/>
+        <enumerator name='NL80211_ATTR_HANDLE_DFS' value='191'/>
+        <enumerator name='NL80211_ATTR_SUPPORT_5_MHZ' value='192'/>
+        <enumerator name='NL80211_ATTR_SUPPORT_10_MHZ' value='193'/>
+        <enumerator name='NL80211_ATTR_OPMODE_NOTIF' value='194'/>
+        <enumerator name='NL80211_ATTR_VENDOR_ID' value='195'/>
+        <enumerator name='NL80211_ATTR_VENDOR_SUBCMD' value='196'/>
+        <enumerator name='NL80211_ATTR_VENDOR_DATA' value='197'/>
+        <enumerator name='NL80211_ATTR_VENDOR_EVENTS' value='198'/>
+        <enumerator name='NL80211_ATTR_QOS_MAP' value='199'/>
+        <enumerator name='NL80211_ATTR_MAC_HINT' value='200'/>
+        <enumerator name='NL80211_ATTR_WIPHY_FREQ_HINT' value='201'/>
+        <enumerator name='NL80211_ATTR_MAX_AP_ASSOC_STA' value='202'/>
+        <enumerator name='NL80211_ATTR_TDLS_PEER_CAPABILITY' value='203'/>
+        <enumerator name='NL80211_ATTR_SOCKET_OWNER' value='204'/>
+        <enumerator name='NL80211_ATTR_CSA_C_OFFSETS_TX' value='205'/>
+        <enumerator name='NL80211_ATTR_MAX_CSA_COUNTERS' value='206'/>
+        <enumerator name='NL80211_ATTR_TDLS_INITIATOR' value='207'/>
+        <enumerator name='NL80211_ATTR_USE_RRM' value='208'/>
+        <enumerator name='NL80211_ATTR_WIPHY_DYN_ACK' value='209'/>
+        <enumerator name='NL80211_ATTR_TSID' value='210'/>
+        <enumerator name='NL80211_ATTR_USER_PRIO' value='211'/>
+        <enumerator name='NL80211_ATTR_ADMITTED_TIME' value='212'/>
+        <enumerator name='NL80211_ATTR_SMPS_MODE' value='213'/>
+        <enumerator name='NL80211_ATTR_OPER_CLASS' value='214'/>
+        <enumerator name='NL80211_ATTR_MAC_MASK' value='215'/>
+        <enumerator name='NL80211_ATTR_WIPHY_SELF_MANAGED_REG' value='216'/>
+        <enumerator name='NL80211_ATTR_EXT_FEATURES' value='217'/>
+        <enumerator name='NL80211_ATTR_SURVEY_RADIO_STATS' value='218'/>
+        <enumerator name='NL80211_ATTR_NETNS_FD' value='219'/>
+        <enumerator name='NL80211_ATTR_SCHED_SCAN_DELAY' value='220'/>
+        <enumerator name='NL80211_ATTR_REG_INDOOR' value='221'/>
+        <enumerator name='NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS' value='222'/>
+        <enumerator name='NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL' value='223'/>
+        <enumerator name='NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS' value='224'/>
+        <enumerator name='NL80211_ATTR_SCHED_SCAN_PLANS' value='225'/>
+        <enumerator name='NL80211_ATTR_PBSS' value='226'/>
+        <enumerator name='NL80211_ATTR_BSS_SELECT' value='227'/>
+        <enumerator name='NL80211_ATTR_STA_SUPPORT_P2P_PS' value='228'/>
+        <enumerator name='NL80211_ATTR_PAD' value='229'/>
+        <enumerator name='NL80211_ATTR_IFTYPE_EXT_CAPA' value='230'/>
+        <enumerator name='NL80211_ATTR_MU_MIMO_GROUP_DATA' value='231'/>
+        <enumerator name='NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR' value='232'/>
+        <enumerator name='NL80211_ATTR_SCAN_START_TIME_TSF' value='233'/>
+        <enumerator name='NL80211_ATTR_SCAN_START_TIME_TSF_BSSID' value='234'/>
+        <enumerator name='NL80211_ATTR_MEASUREMENT_DURATION' value='235'/>
+        <enumerator name='NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY' value='236'/>
+        <enumerator name='NL80211_ATTR_MESH_PEER_AID' value='237'/>
+        <enumerator name='NL80211_ATTR_NAN_MASTER_PREF' value='238'/>
+        <enumerator name='NL80211_ATTR_BANDS' value='239'/>
+        <enumerator name='NL80211_ATTR_NAN_FUNC' value='240'/>
+        <enumerator name='NL80211_ATTR_NAN_MATCH' value='241'/>
+        <enumerator name='NL80211_ATTR_FILS_KEK' value='242'/>
+        <enumerator name='NL80211_ATTR_FILS_NONCES' value='243'/>
+        <enumerator name='NL80211_ATTR_MULTICAST_TO_UNICAST_ENABLED' value='244'/>
+        <enumerator name='NL80211_ATTR_BSSID' value='245'/>
+        <enumerator name='NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI' value='246'/>
+        <enumerator name='NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST' value='247'/>
+        <enumerator name='NL80211_ATTR_TIMEOUT_REASON' value='248'/>
+        <enumerator name='NL80211_ATTR_FILS_ERP_USERNAME' value='249'/>
+        <enumerator name='NL80211_ATTR_FILS_ERP_REALM' value='250'/>
+        <enumerator name='NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM' value='251'/>
+        <enumerator name='NL80211_ATTR_FILS_ERP_RRK' value='252'/>
+        <enumerator name='NL80211_ATTR_FILS_CACHE_ID' value='253'/>
+        <enumerator name='NL80211_ATTR_PMK' value='254'/>
+        <enumerator name='NL80211_ATTR_SCHED_SCAN_MULTI' value='255'/>
+        <enumerator name='NL80211_ATTR_SCHED_SCAN_MAX_REQS' value='256'/>
+        <enumerator name='NL80211_ATTR_WANT_1X_4WAY_HS' value='257'/>
+        <enumerator name='NL80211_ATTR_PMKR0_NAME' value='258'/>
+        <enumerator name='NL80211_ATTR_PORT_AUTHORIZED' value='259'/>
+        <enumerator name='NL80211_ATTR_EXTERNAL_AUTH_ACTION' value='260'/>
+        <enumerator name='NL80211_ATTR_EXTERNAL_AUTH_SUPPORT' value='261'/>
+        <enumerator name='NL80211_ATTR_NSS' value='262'/>
+        <enumerator name='NL80211_ATTR_ACK_SIGNAL' value='263'/>
+        <enumerator name='NL80211_ATTR_CONTROL_PORT_OVER_NL80211' value='264'/>
+        <enumerator name='NL80211_ATTR_TXQ_STATS' value='265'/>
+        <enumerator name='NL80211_ATTR_TXQ_LIMIT' value='266'/>
+        <enumerator name='NL80211_ATTR_TXQ_MEMORY_LIMIT' value='267'/>
+        <enumerator name='NL80211_ATTR_TXQ_QUANTUM' value='268'/>
+        <enumerator name='NL80211_ATTR_HE_CAPABILITY' value='269'/>
+        <enumerator name='NL80211_ATTR_FTM_RESPONDER' value='270'/>
+        <enumerator name='NL80211_ATTR_FTM_RESPONDER_STATS' value='271'/>
+        <enumerator name='NL80211_ATTR_TIMEOUT' value='272'/>
+        <enumerator name='NL80211_ATTR_PEER_MEASUREMENTS' value='273'/>
+        <enumerator name='NL80211_ATTR_AIRTIME_WEIGHT' value='274'/>
+        <enumerator name='NL80211_ATTR_STA_TX_POWER_SETTING' value='275'/>
+        <enumerator name='NL80211_ATTR_STA_TX_POWER' value='276'/>
+        <enumerator name='NL80211_ATTR_SAE_PASSWORD' value='277'/>
+        <enumerator name='NL80211_ATTR_TWT_RESPONDER' value='278'/>
+        <enumerator name='NL80211_ATTR_HE_OBSS_PD' value='279'/>
+        <enumerator name='NL80211_ATTR_WIPHY_EDMG_CHANNELS' value='280'/>
+        <enumerator name='NL80211_ATTR_WIPHY_EDMG_BW_CONFIG' value='281'/>
+        <enumerator name='NL80211_ATTR_HE_6GHZ_CAPABILITY' value='282'/>
+        <enumerator name='__NL80211_ATTR_AFTER_LAST' value='283'/>
+        <enumerator name='NUM_NL80211_ATTR' value='283'/>
+        <enumerator name='NL80211_ATTR_MAX' value='282'/>
+      </enum-decl>
+      <enum-decl name='nl80211_cqm_rssi_threshold_event' filepath='include/uapi/linux/nl80211.h' line='4665' column='1' id='b8189423'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW' value='0'/>
+        <enumerator name='NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH' value='1'/>
+        <enumerator name='NL80211_CQM_RSSI_BEACON_LOSS_EVENT' value='2'/>
+      </enum-decl>
+      <class-decl name='cfg80211_ft_event_params' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='7228' column='1' id='cc4b6920'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ies' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='7229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ies_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='7230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='target_ap' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='7231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ric_ies' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='7232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ric_ies_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='7233' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='cc4b6920' size-in-bits='64' id='76db5996'/>
+      <function-decl name='__cfg80211_alloc_event_skb' mangled-name='__cfg80211_alloc_event_skb' filepath='net/wireless/nl80211.c' line='9717' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cfg80211_alloc_event_skb'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/nl80211.c' line='9717' column='1'/>
+        <parameter type-id='63c7e8e2' name='wdev' filepath='net/wireless/nl80211.c' line='9718' column='1'/>
+        <parameter type-id='187e1e49' name='cmd' filepath='net/wireless/nl80211.c' line='9719' column='1'/>
+        <parameter type-id='320b0ded' name='attr' filepath='net/wireless/nl80211.c' line='9720' column='1'/>
+        <parameter type-id='f0981eeb' name='portid' filepath='net/wireless/nl80211.c' line='9721' column='1'/>
+        <parameter type-id='95e97e5e' name='vendor_event_idx' filepath='net/wireless/nl80211.c' line='9722' column='1'/>
+        <parameter type-id='95e97e5e' name='approxlen' filepath='net/wireless/nl80211.c' line='9723' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='9723' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='__cfg80211_send_event_skb' mangled-name='__cfg80211_send_event_skb' filepath='net/wireless/nl80211.c' line='9750' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cfg80211_send_event_skb'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/wireless/nl80211.c' line='9750' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='9750' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__cfg80211_alloc_reply_skb' mangled-name='__cfg80211_alloc_reply_skb' filepath='net/wireless/nl80211.c' line='13207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cfg80211_alloc_reply_skb'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/nl80211.c' line='13207' column='1'/>
+        <parameter type-id='187e1e49' name='cmd' filepath='net/wireless/nl80211.c' line='13208' column='1'/>
+        <parameter type-id='320b0ded' name='attr' filepath='net/wireless/nl80211.c' line='13209' column='1'/>
+        <parameter type-id='95e97e5e' name='approxlen' filepath='net/wireless/nl80211.c' line='13210' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='cfg80211_vendor_cmd_reply' mangled-name='cfg80211_vendor_cmd_reply' filepath='net/wireless/nl80211.c' line='13224' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_vendor_cmd_reply'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/wireless/nl80211.c' line='13224' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cfg80211_rx_unprot_mlme_mgmt' mangled-name='cfg80211_rx_unprot_mlme_mgmt' filepath='net/wireless/nl80211.c' line='15179' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_rx_unprot_mlme_mgmt'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/wireless/nl80211.c' line='15179' column='1'/>
+        <parameter type-id='bbaf3419' name='buf' filepath='net/wireless/nl80211.c' line='15179' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/wireless/nl80211.c' line='15180' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_ready_on_channel' mangled-name='cfg80211_ready_on_channel' filepath='net/wireless/nl80211.c' line='15642' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_ready_on_channel'>
+        <parameter type-id='63c7e8e2' name='wdev' filepath='net/wireless/nl80211.c' line='15642' column='1'/>
+        <parameter type-id='91ce1af9' name='cookie' filepath='net/wireless/nl80211.c' line='15642' column='1'/>
+        <parameter type-id='ec00acfb' name='chan' filepath='net/wireless/nl80211.c' line='15643' column='1'/>
+        <parameter type-id='f0981eeb' name='duration' filepath='net/wireless/nl80211.c' line='15644' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='15644' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_remain_on_channel_expired' mangled-name='cfg80211_remain_on_channel_expired' filepath='net/wireless/nl80211.c' line='15656' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_remain_on_channel_expired'>
+        <parameter type-id='63c7e8e2' name='wdev' filepath='net/wireless/nl80211.c' line='15656' column='1'/>
+        <parameter type-id='91ce1af9' name='cookie' filepath='net/wireless/nl80211.c' line='15656' column='1'/>
+        <parameter type-id='ec00acfb' name='chan' filepath='net/wireless/nl80211.c' line='15657' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='15658' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_new_sta' mangled-name='cfg80211_new_sta' filepath='net/wireless/nl80211.c' line='15682' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_new_sta'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/wireless/nl80211.c' line='15682' column='1'/>
+        <parameter type-id='bbaf3419' name='mac_addr' filepath='net/wireless/nl80211.c' line='15682' column='1'/>
+        <parameter type-id='7af1dc96' name='sinfo' filepath='net/wireless/nl80211.c' line='15683' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='15683' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_del_sta_sinfo' mangled-name='cfg80211_del_sta_sinfo' filepath='net/wireless/nl80211.c' line='15706' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_del_sta_sinfo'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/wireless/nl80211.c' line='15706' column='1'/>
+        <parameter type-id='bbaf3419' name='mac_addr' filepath='net/wireless/nl80211.c' line='15706' column='1'/>
+        <parameter type-id='7af1dc96' name='sinfo' filepath='net/wireless/nl80211.c' line='15707' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='15707' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_mgmt_tx_status' mangled-name='cfg80211_mgmt_tx_status' filepath='net/wireless/nl80211.c' line='15890' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_mgmt_tx_status'>
+        <parameter type-id='63c7e8e2' name='wdev' filepath='net/wireless/nl80211.c' line='15890' column='1'/>
+        <parameter type-id='91ce1af9' name='cookie' filepath='net/wireless/nl80211.c' line='15890' column='1'/>
+        <parameter type-id='bbaf3419' name='buf' filepath='net/wireless/nl80211.c' line='15891' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/wireless/nl80211.c' line='15891' column='1'/>
+        <parameter type-id='b50a4934' name='ack' filepath='net/wireless/nl80211.c' line='15891' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='15891' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_cqm_rssi_notify' mangled-name='cfg80211_cqm_rssi_notify' filepath='net/wireless/nl80211.c' line='16049' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_cqm_rssi_notify'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/wireless/nl80211.c' line='16049' column='1'/>
+        <parameter type-id='b8189423' name='rssi_event' filepath='net/wireless/nl80211.c' line='16050' column='1'/>
+        <parameter type-id='a7832498' name='rssi_level' filepath='net/wireless/nl80211.c' line='16051' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='16051' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_cqm_pktloss_notify' mangled-name='cfg80211_cqm_pktloss_notify' filepath='net/wireless/nl80211.c' line='16120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_cqm_pktloss_notify'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/wireless/nl80211.c' line='16120' column='1'/>
+        <parameter type-id='bbaf3419' name='peer' filepath='net/wireless/nl80211.c' line='16121' column='1'/>
+        <parameter type-id='19c2251e' name='num_packets' filepath='net/wireless/nl80211.c' line='16121' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='16121' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_gtk_rekey_notify' mangled-name='cfg80211_gtk_rekey_notify' filepath='net/wireless/nl80211.c' line='16204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_gtk_rekey_notify'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/wireless/nl80211.c' line='16204' column='1'/>
+        <parameter type-id='bbaf3419' name='bssid' filepath='net/wireless/nl80211.c' line='16204' column='1'/>
+        <parameter type-id='bbaf3419' name='replay_ctr' filepath='net/wireless/nl80211.c' line='16205' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='16205' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_pmksa_candidate_notify' mangled-name='cfg80211_pmksa_candidate_notify' filepath='net/wireless/nl80211.c' line='16261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_pmksa_candidate_notify'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/wireless/nl80211.c' line='16261' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='net/wireless/nl80211.c' line='16261' column='1'/>
+        <parameter type-id='bbaf3419' name='bssid' filepath='net/wireless/nl80211.c' line='16262' column='1'/>
+        <parameter type-id='b50a4934' name='preauth' filepath='net/wireless/nl80211.c' line='16262' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='16262' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_ch_switch_notify' mangled-name='cfg80211_ch_switch_notify' filepath='net/wireless/nl80211.c' line='16313' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_ch_switch_notify'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/wireless/nl80211.c' line='16313' column='1'/>
+        <parameter type-id='0953fbfe' name='chandef' filepath='net/wireless/nl80211.c' line='16314' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_tdls_oper_request' mangled-name='cfg80211_tdls_oper_request' filepath='net/wireless/nl80211.c' line='16718' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_tdls_oper_request'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/wireless/nl80211.c' line='16718' column='1'/>
+        <parameter type-id='bbaf3419' name='peer' filepath='net/wireless/nl80211.c' line='16718' column='1'/>
+        <parameter type-id='ee1b00fc' name='oper' filepath='net/wireless/nl80211.c' line='16719' column='1'/>
+        <parameter type-id='1dc6a898' name='reason_code' filepath='net/wireless/nl80211.c' line='16720' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='16720' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_ft_event' mangled-name='cfg80211_ft_event' filepath='net/wireless/nl80211.c' line='16824' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_ft_event'>
+        <parameter type-id='68a2d05c' name='netdev' filepath='net/wireless/nl80211.c' line='16824' column='1'/>
+        <parameter type-id='76db5996' name='ft_event' filepath='net/wireless/nl80211.c' line='16825' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/wireless/of.c' language='LANG_C89'>
+      <function-decl name='wiphy_read_of_freq_limits' mangled-name='wiphy_read_of_freq_limits' filepath='net/wireless/of.c' line='74' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wiphy_read_of_freq_limits'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/of.c' line='74' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/wireless/radiotap.c' language='LANG_C89'>
+      <class-decl name='ieee80211_radiotap_iterator' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='5221' column='1' id='61a98bcb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_rtheader' type-id='e331b872' visibility='default' filepath='include/net/cfg80211.h' line='5222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_vns' type-id='9e168ad9' visibility='default' filepath='include/net/cfg80211.h' line='5223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='current_namespace' type-id='69268009' visibility='default' filepath='include/net/cfg80211.h' line='5224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='_arg' type-id='cf536864' visibility='default' filepath='include/net/cfg80211.h' line='5226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='_next_ns_data' type-id='cf536864' visibility='default' filepath='include/net/cfg80211.h' line='5226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='_next_bitmap' type-id='3e77f659' visibility='default' filepath='include/net/cfg80211.h' line='5227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='this_arg' type-id='cf536864' visibility='default' filepath='include/net/cfg80211.h' line='5229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='this_arg_index' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='this_arg_size' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='is_radiotap_ns' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='_max_length' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='_arg_index' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='_bitmap_shifter' type-id='8f92235e' visibility='default' filepath='include/net/cfg80211.h' line='5237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='_reset_on_ext' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5238' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_radiotap_header' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/ieee80211_radiotap.h' line='26' column='1' id='683e4294'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='it_version' type-id='b96825af' visibility='default' filepath='include/net/ieee80211_radiotap.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='it_pad' type-id='b96825af' visibility='default' filepath='include/net/ieee80211_radiotap.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='it_len' type-id='23119536' visibility='default' filepath='include/net/ieee80211_radiotap.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='it_present' type-id='2f162548' visibility='default' filepath='include/net/ieee80211_radiotap.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_radiotap_vendor_namespaces' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='5187' column='1' id='d50056ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ns' type-id='69268009' visibility='default' filepath='include/net/cfg80211.h' line='5188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_ns' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5189' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_radiotap_namespace' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='5180' column='1' id='e4b6e484'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='align_size' type-id='71ff2c88' visibility='default' filepath='include/net/cfg80211.h' line='5181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_bits' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='oui' type-id='8f92235e' visibility='default' filepath='include/net/cfg80211.h' line='5183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='subns' type-id='b96825af' visibility='default' filepath='include/net/cfg80211.h' line='5184' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='radiotap_align_size' size-in-bits='8' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='5176' column='1' id='e9063f35'>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='align' type-id='b96825af' visibility='default' filepath='include/net/cfg80211.h' line='5177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='b96825af' visibility='default' filepath='include/net/cfg80211.h' line='5177' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2f162548' size-in-bits='64' id='3e77f659'/>
+      <qualified-type-def type-id='e4b6e484' const='yes' id='c6cde959'/>
+      <pointer-type-def type-id='c6cde959' size-in-bits='64' id='69268009'/>
+      <qualified-type-def type-id='d50056ec' const='yes' id='3dc3b549'/>
+      <pointer-type-def type-id='3dc3b549' size-in-bits='64' id='9e168ad9'/>
+      <qualified-type-def type-id='e9063f35' const='yes' id='18341672'/>
+      <pointer-type-def type-id='18341672' size-in-bits='64' id='71ff2c88'/>
+      <pointer-type-def type-id='683e4294' size-in-bits='64' id='e331b872'/>
+      <pointer-type-def type-id='61a98bcb' size-in-bits='64' id='db736e3b'/>
+      <function-decl name='ieee80211_radiotap_iterator_init' mangled-name='ieee80211_radiotap_iterator_init' filepath='net/wireless/radiotap.c' line='96' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_radiotap_iterator_init'>
+        <parameter type-id='db736e3b' name='iterator' filepath='net/wireless/radiotap.c' line='97' column='1'/>
+        <parameter type-id='e331b872' name='radiotap_header' filepath='net/wireless/radiotap.c' line='98' column='1'/>
+        <parameter type-id='95e97e5e' name='max_length' filepath='net/wireless/radiotap.c' line='99' column='1'/>
+        <parameter type-id='9e168ad9' name='vns' filepath='net/wireless/radiotap.c' line='99' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ieee80211_radiotap_iterator_next' mangled-name='ieee80211_radiotap_iterator_next' filepath='net/wireless/radiotap.c' line='212' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_radiotap_iterator_next'>
+        <parameter type-id='db736e3b' name='iterator' filepath='net/wireless/radiotap.c' line='213' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/wireless/reg.c' language='LANG_C89'>
+      <enum-decl name='nl80211_channel_type' filepath='include/uapi/linux/nl80211.h' line='4240' column='1' id='9e446de7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_CHAN_NO_HT' value='0'/>
+        <enumerator name='NL80211_CHAN_HT20' value='1'/>
+        <enumerator name='NL80211_CHAN_HT40MINUS' value='2'/>
+        <enumerator name='NL80211_CHAN_HT40PLUS' value='3'/>
+      </enum-decl>
+      <qualified-type-def type-id='a9d5f761' const='yes' id='d5bf2678'/>
+      <pointer-type-def type-id='d5bf2678' size-in-bits='64' id='cde95316'/>
+      <pointer-type-def type-id='5c28f25e' size-in-bits='64' id='c24e05b4'/>
+      <function-decl name='freq_reg_info' mangled-name='freq_reg_info' filepath='net/wireless/reg.c' line='1629' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='freq_reg_info'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/reg.c' line='1629' column='1'/>
+        <parameter type-id='19c2251e' name='center_freq' filepath='net/wireless/reg.c' line='1630' column='1'/>
+        <return type-id='cde95316'/>
+      </function-decl>
+      <function-decl name='reg_initiator_name' mangled-name='reg_initiator_name' filepath='net/wireless/reg.c' line='1636' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reg_initiator_name'>
+        <parameter type-id='790cc131' name='initiator' filepath='net/wireless/reg.c' line='1636' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='wiphy_apply_custom_regulatory' mangled-name='wiphy_apply_custom_regulatory' filepath='net/wireless/reg.c' line='2340' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wiphy_apply_custom_regulatory'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/reg.c' line='2340' column='1'/>
+        <parameter type-id='4e819401' name='regd' filepath='net/wireless/reg.c' line='2341' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='regulatory_hint' mangled-name='regulatory_hint' filepath='net/wireless/reg.c' line='3011' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulatory_hint'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/reg.c' line='3011' column='1'/>
+        <parameter type-id='80f4b756' name='alpha2' filepath='net/wireless/reg.c' line='3011' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulatory_set_wiphy_regd' mangled-name='regulatory_set_wiphy_regd' filepath='net/wireless/reg.c' line='3742' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulatory_set_wiphy_regd'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/reg.c' line='3742' column='1'/>
+        <parameter type-id='c24e05b4' name='rd' filepath='net/wireless/reg.c' line='3743' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cfg80211_chandef_create' mangled-name='cfg80211_chandef_create' filepath='include/net/cfg80211.h' line='659' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_chandef_create'>
+        <parameter type-id='0953fbfe'/>
+        <parameter type-id='ec00acfb'/>
+        <parameter type-id='9e446de7'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/wireless/scan.c' language='LANG_C89'>
+      <enum-decl name='ieee80211_privacy' filepath='include/net/cfg80211.h' line='222' column='1' id='d2b455cb'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_PRIVACY_ON' value='0'/>
+        <enumerator name='IEEE80211_PRIVACY_OFF' value='1'/>
+        <enumerator name='IEEE80211_PRIVACY_ANY' value='2'/>
+      </enum-decl>
+      <class-decl name='cfg80211_inform_bss' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2169' column='1' id='616d6efe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chan' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='2170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='scan_width' type-id='95d46034' visibility='default' filepath='include/net/cfg80211.h' line='2171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='signal' type-id='a7832498' visibility='default' filepath='include/net/cfg80211.h' line='2172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='boottime_ns' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parent_tsf' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parent_bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='chains' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='312'>
+          <var-decl name='chain_signal' type-id='da004b74' visibility='default' filepath='include/net/cfg80211.h' line='2177' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='cfg80211_bss_frame_type' filepath='include/net/cfg80211.h' line='5845' column='1' id='b556f108'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='CFG80211_BSS_FTYPE_UNKNOWN' value='0'/>
+        <enumerator name='CFG80211_BSS_FTYPE_BEACON' value='1'/>
+        <enumerator name='CFG80211_BSS_FTYPE_PRESP' value='2'/>
+      </enum-decl>
+      <class-decl name='ieee80211_mgmt' size-in-bits='400' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='901' column='1' id='1aa7b3b9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frame_control' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='902' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='duration' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='903' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='da' type-id='cf1a4160' visibility='default' filepath='include/linux/ieee80211.h' line='904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='sa' type-id='cf1a4160' visibility='default' filepath='include/linux/ieee80211.h' line='905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='include/linux/ieee80211.h' line='906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='seq_ctrl' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='u' type-id='3e125f89' visibility='default' filepath='include/linux/ieee80211.h' line='1062' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='208' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='908' column='1' id='3e125f89'>
+        <data-member access='private'>
+          <var-decl name='auth' type-id='8566e136' visibility='default' filepath='include/linux/ieee80211.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='deauth' type-id='4c024fcc' visibility='default' filepath='include/linux/ieee80211.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='assoc_req' type-id='cf904dca' visibility='default' filepath='include/linux/ieee80211.h' line='924' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='assoc_resp' type-id='316274c6' visibility='default' filepath='include/linux/ieee80211.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='reassoc_resp' type-id='316274c6' visibility='default' filepath='include/linux/ieee80211.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='reassoc_req' type-id='41112f2f' visibility='default' filepath='include/linux/ieee80211.h' line='938' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='disassoc' type-id='4c024fcc' visibility='default' filepath='include/linux/ieee80211.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='beacon' type-id='00017149' visibility='default' filepath='include/linux/ieee80211.h' line='949' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='probe_req' type-id='f2111995' visibility='default' filepath='include/linux/ieee80211.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='probe_resp' type-id='00017149' visibility='default' filepath='include/linux/ieee80211.h' line='961' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='action' type-id='2af48f0d' visibility='default' filepath='include/linux/ieee80211.h' line='1061' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='909' column='1' id='8566e136'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='auth_alg' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='auth_transaction' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='status_code' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='914' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='916' column='1' id='4c024fcc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reason_code' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='917' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='919' column='1' id='cf904dca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capab_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='920' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='listen_interval' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='923' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='925' column='1' id='316274c6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capab_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='926' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='status_code' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='aid' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='930' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__4' size-in-bits='80' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='932' column='1' id='41112f2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capab_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='listen_interval' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='current_ap' type-id='cf1a4160' visibility='default' filepath='include/linux/ieee80211.h' line='935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='937' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__6' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='942' column='1' id='00017149'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timestamp' type-id='a30e8d1f' visibility='default' filepath='include/linux/ieee80211.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='beacon_int' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='capab_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='948' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__7' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='950' column='1' id='f2111995'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='952' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__9' size-in-bits='208' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='962' column='1' id='2af48f0d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='category' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='963' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='u' type-id='333375e9' visibility='default' filepath='include/linux/ieee80211.h' line='1060' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='200' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='964' column='1' id='333375e9'>
+        <data-member access='private'>
+          <var-decl name='wme_action' type-id='9a7a1ecf' visibility='default' filepath='include/linux/ieee80211.h' line='970' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='chan_switch' type-id='936c74b9' visibility='default' filepath='include/linux/ieee80211.h' line='974' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ext_chan_switch' type-id='307ae286' visibility='default' filepath='include/linux/ieee80211.h' line='979' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='measurement' type-id='5d1c28f0' visibility='default' filepath='include/linux/ieee80211.h' line='986' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='addba_req' type-id='1601e9d5' visibility='default' filepath='include/linux/ieee80211.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='addba_resp' type-id='27fc2f14' visibility='default' filepath='include/linux/ieee80211.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='delba' type-id='c049ac97' visibility='default' filepath='include/linux/ieee80211.h' line='1007' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='self_prot' type-id='936c74b9' visibility='default' filepath='include/linux/ieee80211.h' line='1011' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='mesh_action' type-id='936c74b9' visibility='default' filepath='include/linux/ieee80211.h' line='1015' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='sa_query' type-id='e82df61b' visibility='default' filepath='include/linux/ieee80211.h' line='1019' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ht_smps' type-id='73405c6c' visibility='default' filepath='include/linux/ieee80211.h' line='1023' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ht_notify_cw' type-id='2da5a4fb' visibility='default' filepath='include/linux/ieee80211.h' line='1027' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tdls_discover_resp' type-id='37075bb2' visibility='default' filepath='include/linux/ieee80211.h' line='1033' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='vht_opmode_notif' type-id='5a443366' visibility='default' filepath='include/linux/ieee80211.h' line='1037' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='vht_group_notif' type-id='c9995313' visibility='default' filepath='include/linux/ieee80211.h' line='1042' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='tpc_report' type-id='20ea48a2' visibility='default' filepath='include/linux/ieee80211.h' line='1049' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ftm' type-id='8fa1a00c' visibility='default' filepath='include/linux/ieee80211.h' line='1059' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__10' size-in-bits='24' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='965' column='1' id='9a7a1ecf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dialog_token' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='967' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='status_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='969' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__11' size-in-bits='8' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='971' column='1' id='936c74b9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='972' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='973' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__12' size-in-bits='40' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='975' column='1' id='307ae286'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='data' type-id='59019c69' visibility='default' filepath='include/linux/ieee80211.h' line='977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='978' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_ext_chansw_ie' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='738' column='1' id='59019c69'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mode' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='new_operating_class' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='new_ch_num' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='count' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='742' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__13' size-in-bits='56' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='980' column='1' id='5d1c28f0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dialog_token' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='element_id' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='length' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='msr_elem' type-id='1981efe5' visibility='default' filepath='include/linux/ieee80211.h' line='985' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_msrment_ie' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='715' column='1' id='1981efe5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='token' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='716' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='mode' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='type' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='request' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='719' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__14' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='987' column='1' id='1601e9d5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dialog_token' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='capab' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='timeout' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='start_seq_num' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='992' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='994' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__15' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='996' column='1' id='27fc2f14'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dialog_token' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='status' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='capab' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='timeout' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1001' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__16' size-in-bits='40' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1003' column='1' id='c049ac97'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='params' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='reason_code' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1006' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__19' size-in-bits='24' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1016' column='1' id='e82df61b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='trans_id' type-id='cf114704' visibility='default' filepath='include/linux/ieee80211.h' line='1018' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__20' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1020' column='1' id='73405c6c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='smps_control' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1022' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__21' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1024' column='1' id='2da5a4fb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='chanwidth' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1026' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__22' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1028' column='1' id='37075bb2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dialog_token' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='capability' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1032' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__23' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1034' column='1' id='5a443366'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='operating_mode' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1036' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__24' size-in-bits='200' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1038' column='1' id='c9995313'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='membership' type-id='d2f7b56a' visibility='default' filepath='include/linux/ieee80211.h' line='1040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='position' type-id='0d8415b5' visibility='default' filepath='include/linux/ieee80211.h' line='1041' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__25' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1043' column='1' id='20ea48a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dialog_token' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='tpc_elem_id' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='tpc_elem_length' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tpc' type-id='8b43e65f' visibility='default' filepath='include/linux/ieee80211.h' line='1048' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_tpc_report_ie' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='888' column='1' id='8b43e65f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_power' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='link_margin' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='890' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__26' size-in-bits='152' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1050' column='1' id='8fa1a00c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dialog_token' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='follow_up' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='tod' type-id='cf1a4160' visibility='default' filepath='include/linux/ieee80211.h' line='1054' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='toa' type-id='cf1a4160' visibility='default' filepath='include/linux/ieee80211.h' line='1055' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='tod_error' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1056' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='toa_error' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1057' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1058' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='616d6efe' size-in-bits='64' id='6ff43814'/>
+      <pointer-type-def type-id='b1493ece' size-in-bits='64' id='40cd17b4'/>
+      <pointer-type-def type-id='1aa7b3b9' size-in-bits='64' id='57a568d1'/>
+      <function-decl name='cfg80211_scan_done' mangled-name='cfg80211_scan_done' filepath='net/wireless/scan.c' line='525' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_scan_done'>
+        <parameter type-id='a9e8b173' name='request' filepath='net/wireless/scan.c' line='525' column='1'/>
+        <parameter type-id='40cd17b4' name='info' filepath='net/wireless/scan.c' line='526' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_sched_scan_results' mangled-name='cfg80211_sched_scan_results' filepath='net/wireless/scan.c' line='627' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_sched_scan_results'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/scan.c' line='627' column='1'/>
+        <parameter type-id='91ce1af9' name='reqid' filepath='net/wireless/scan.c' line='627' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_sched_scan_stopped' mangled-name='cfg80211_sched_scan_stopped' filepath='net/wireless/scan.c' line='657' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_sched_scan_stopped'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/scan.c' line='657' column='1'/>
+        <parameter type-id='91ce1af9' name='reqid' filepath='net/wireless/scan.c' line='657' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_find_vendor_elem' mangled-name='cfg80211_find_vendor_elem' filepath='net/wireless/scan.c' line='733' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_find_vendor_elem'>
+        <parameter type-id='f0981eeb' name='oui' filepath='net/wireless/scan.c' line='733' column='1'/>
+        <parameter type-id='95e97e5e' name='oui_type' filepath='net/wireless/scan.c' line='733' column='1'/>
+        <parameter type-id='bbaf3419' name='ies' filepath='net/wireless/scan.c' line='734' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='net/wireless/scan.c' line='735' column='1'/>
+        <return type-id='aa7ca86a'/>
+      </function-decl>
+      <function-decl name='cfg80211_get_bss' mangled-name='cfg80211_get_bss' filepath='net/wireless/scan.c' line='913' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_get_bss'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/scan.c' line='913' column='1'/>
+        <parameter type-id='ec00acfb' name='channel' filepath='net/wireless/scan.c' line='914' column='1'/>
+        <parameter type-id='bbaf3419' name='bssid' filepath='net/wireless/scan.c' line='915' column='1'/>
+        <parameter type-id='bbaf3419' name='ssid' filepath='net/wireless/scan.c' line='916' column='1'/>
+        <parameter type-id='b59d7dce' name='ssid_len' filepath='net/wireless/scan.c' line='916' column='1'/>
+        <parameter type-id='cb952348' name='bss_type' filepath='net/wireless/scan.c' line='917' column='1'/>
+        <parameter type-id='d2b455cb' name='privacy' filepath='net/wireless/scan.c' line='918' column='1'/>
+        <return type-id='bda81d86'/>
+      </function-decl>
+      <function-decl name='cfg80211_inform_bss_data' mangled-name='cfg80211_inform_bss_data' filepath='net/wireless/scan.c' line='1659' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_inform_bss_data'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/scan.c' line='1659' column='1'/>
+        <parameter type-id='6ff43814' name='data' filepath='net/wireless/scan.c' line='1660' column='1'/>
+        <parameter type-id='b556f108' name='ftype' filepath='net/wireless/scan.c' line='1661' column='1'/>
+        <parameter type-id='bbaf3419' name='bssid' filepath='net/wireless/scan.c' line='1662' column='1'/>
+        <parameter type-id='91ce1af9' name='tsf' filepath='net/wireless/scan.c' line='1662' column='1'/>
+        <parameter type-id='1dc6a898' name='capability' filepath='net/wireless/scan.c' line='1662' column='1'/>
+        <parameter type-id='1dc6a898' name='beacon_interval' filepath='net/wireless/scan.c' line='1663' column='1'/>
+        <parameter type-id='bbaf3419' name='ie' filepath='net/wireless/scan.c' line='1663' column='1'/>
+        <parameter type-id='b59d7dce' name='ielen' filepath='net/wireless/scan.c' line='1663' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/scan.c' line='1664' column='1'/>
+        <return type-id='bda81d86'/>
+      </function-decl>
+      <function-decl name='cfg80211_inform_bss_frame_data' mangled-name='cfg80211_inform_bss_frame_data' filepath='net/wireless/scan.c' line='1878' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_inform_bss_frame_data'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/scan.c' line='1878' column='1'/>
+        <parameter type-id='6ff43814' name='data' filepath='net/wireless/scan.c' line='1879' column='1'/>
+        <parameter type-id='57a568d1' name='mgmt' filepath='net/wireless/scan.c' line='1880' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/wireless/scan.c' line='1880' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/scan.c' line='1881' column='1'/>
+        <return type-id='bda81d86'/>
+      </function-decl>
+      <function-decl name='cfg80211_unlink_bss' mangled-name='cfg80211_unlink_bss' filepath='net/wireless/scan.c' line='1960' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_unlink_bss'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/scan.c' line='1960' column='1'/>
+        <parameter type-id='bda81d86' name='pub' filepath='net/wireless/scan.c' line='1960' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='e8ce2004' size-in-bits='64' id='aa7ca86a'/>
+      <qualified-type-def type-id='251eca3f' const='yes' id='e8ce2004'/>
+      <class-decl name='element' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='3449' column='1' id='251eca3f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='3450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='datalen' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='3451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='data' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='3452' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/wireless/sme.c' language='LANG_C89'>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='net/wireless/sme.c' line='34' column='1' id='08f5ca1d'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='CFG80211_CONN_SCANNING' value='0'/>
+        <enumerator name='CFG80211_CONN_SCAN_AGAIN' value='1'/>
+        <enumerator name='CFG80211_CONN_AUTHENTICATE_NEXT' value='2'/>
+        <enumerator name='CFG80211_CONN_AUTHENTICATING' value='3'/>
+        <enumerator name='CFG80211_CONN_AUTH_FAILED_TIMEOUT' value='4'/>
+        <enumerator name='CFG80211_CONN_ASSOCIATE_NEXT' value='5'/>
+        <enumerator name='CFG80211_CONN_ASSOCIATING' value='6'/>
+        <enumerator name='CFG80211_CONN_ASSOC_FAILED' value='7'/>
+        <enumerator name='CFG80211_CONN_ASSOC_FAILED_TIMEOUT' value='8'/>
+        <enumerator name='CFG80211_CONN_DEAUTH' value='9'/>
+        <enumerator name='CFG80211_CONN_ABANDON' value='10'/>
+        <enumerator name='CFG80211_CONN_CONNECTED' value='11'/>
+      </enum-decl>
+      <class-decl name='cfg80211_connect_resp_params' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='6521' column='1' id='77e8064c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='status' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='6522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='6523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bss' type-id='bda81d86' visibility='default' filepath='include/net/cfg80211.h' line='6524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='req_ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='6525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='req_ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='6526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resp_ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='6527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='resp_ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='6528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fils' type-id='73962ae2' visibility='default' filepath='include/net/cfg80211.h' line='6529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='timeout_reason' type-id='e4422617' visibility='default' filepath='include/net/cfg80211.h' line='6530' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_fils_resp_params' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='6482' column='1' id='73962ae2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kek' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='6483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kek_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='6484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='update_erp_next_seq_num' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='6485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='erp_next_seq_num' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='6486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pmk' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='6487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pmk_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='6488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pmkid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='6489' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_timeout_reason' filepath='include/uapi/linux/nl80211.h' line='5586' column='1' id='e4422617'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_TIMEOUT_UNSPECIFIED' value='0'/>
+        <enumerator name='NL80211_TIMEOUT_SCAN' value='1'/>
+        <enumerator name='NL80211_TIMEOUT_AUTH' value='2'/>
+        <enumerator name='NL80211_TIMEOUT_ASSOC' value='3'/>
+      </enum-decl>
+      <class-decl name='cfg80211_roam_info' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='6681' column='1' id='883d1dc6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channel' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='6682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bss' type-id='bda81d86' visibility='default' filepath='include/net/cfg80211.h' line='6683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='6684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='req_ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='6685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='req_ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='6686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resp_ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='6687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='resp_ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='6688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fils' type-id='73962ae2' visibility='default' filepath='include/net/cfg80211.h' line='6689' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='77e8064c' size-in-bits='64' id='b1d9990a'/>
+      <pointer-type-def type-id='883d1dc6' size-in-bits='64' id='e88825dc'/>
+      <function-decl name='cfg80211_connect_done' mangled-name='cfg80211_connect_done' filepath='net/wireless/sme.c' line='788' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_connect_done'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/wireless/sme.c' line='788' column='1'/>
+        <parameter type-id='b1d9990a' name='params' filepath='net/wireless/sme.c' line='789' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/sme.c' line='790' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_roamed' mangled-name='cfg80211_roamed' filepath='net/wireless/sme.c' line='956' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_roamed'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/wireless/sme.c' line='956' column='1'/>
+        <parameter type-id='e88825dc' name='info' filepath='net/wireless/sme.c' line='956' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/sme.c' line='957' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_disconnected' mangled-name='cfg80211_disconnected' filepath='net/wireless/sme.c' line='1130' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_disconnected'>
+        <parameter type-id='68a2d05c' name='dev' filepath='net/wireless/sme.c' line='1130' column='1'/>
+        <parameter type-id='1dc6a898' name='reason' filepath='net/wireless/sme.c' line='1130' column='1'/>
+        <parameter type-id='bbaf3419' name='ie' filepath='net/wireless/sme.c' line='1131' column='1'/>
+        <parameter type-id='b59d7dce' name='ie_len' filepath='net/wireless/sme.c' line='1131' column='1'/>
+        <parameter type-id='b50a4934' name='locally_generated' filepath='net/wireless/sme.c' line='1132' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/sme.c' line='1132' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/wireless/util.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='ea86de29' size-in-bits='48' id='51f2d827'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <class-decl name='element' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='3449' column='1' id='251eca3f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='3450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='datalen' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='3451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='data' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='3452' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='251eca3f' const='yes' id='e8ce2004'/>
+      <pointer-type-def type-id='e8ce2004' size-in-bits='64' id='aa7ca86a'/>
+      <pointer-type-def type-id='1c00b436' size-in-bits='64' id='f61f0f6c'/>
+      <pointer-type-def type-id='5ece574c' size-in-bits='64' id='185e765a'/>
+      <var-decl name='rfc1042_header' type-id='51f2d827' mangled-name='rfc1042_header' visibility='default' filepath='net/wireless/util.c' line='1982' column='1' elf-symbol-id='rfc1042_header'/>
+      <var-decl name='bridge_tunnel_header' type-id='51f2d827' mangled-name='bridge_tunnel_header' visibility='default' filepath='net/wireless/util.c' line='1987' column='1' elf-symbol-id='bridge_tunnel_header'/>
+      <function-decl name='ieee80211_channel_to_freq_khz' mangled-name='ieee80211_channel_to_freq_khz' filepath='net/wireless/util.c' line='75' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_channel_to_freq_khz'>
+        <parameter type-id='95e97e5e' name='chan' filepath='net/wireless/util.c' line='75' column='1'/>
+        <parameter type-id='3eaa0294' name='band' filepath='net/wireless/util.c' line='75' column='1'/>
+        <return type-id='19c2251e'/>
+      </function-decl>
+      <function-decl name='ieee80211_freq_khz_to_channel' mangled-name='ieee80211_freq_khz_to_channel' filepath='net/wireless/util.c' line='112' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_freq_khz_to_channel'>
+        <parameter type-id='19c2251e' name='freq' filepath='net/wireless/util.c' line='112' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ieee80211_get_channel_khz' mangled-name='ieee80211_get_channel_khz' filepath='net/wireless/util.c' line='138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_get_channel_khz'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/util.c' line='138' column='1'/>
+        <parameter type-id='19c2251e' name='freq' filepath='net/wireless/util.c' line='139' column='1'/>
+        <return type-id='ec00acfb'/>
+      </function-decl>
+      <function-decl name='ieee80211_hdrlen' mangled-name='ieee80211_hdrlen' filepath='net/wireless/util.c' line='383' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_hdrlen'>
+        <parameter type-id='23119536' name='fc' filepath='net/wireless/util.c' line='383' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='ieee80211_get_hdrlen_from_skb' mangled-name='ieee80211_get_hdrlen_from_skb' filepath='net/wireless/util.c' line='424' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_get_hdrlen_from_skb'>
+        <parameter type-id='11f4a000' name='skb' filepath='net/wireless/util.c' line='424' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='ieee80211_data_to_8023_exthdr' mangled-name='ieee80211_data_to_8023_exthdr' filepath='net/wireless/util.c' line='460' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_data_to_8023_exthdr'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/wireless/util.c' line='460' column='1'/>
+        <parameter type-id='f61f0f6c' name='ehdr' filepath='net/wireless/util.c' line='460' column='1'/>
+        <parameter type-id='bbaf3419' name='addr' filepath='net/wireless/util.c' line='461' column='1'/>
+        <parameter type-id='86505f90' name='iftype' filepath='net/wireless/util.c' line='461' column='1'/>
+        <parameter type-id='f9b06939' name='data_offset' filepath='net/wireless/util.c' line='462' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ieee80211_amsdu_to_8023s' mangled-name='ieee80211_amsdu_to_8023s' filepath='net/wireless/util.c' line='663' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_amsdu_to_8023s'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/wireless/util.c' line='663' column='1'/>
+        <parameter type-id='03c386c6' name='list' filepath='net/wireless/util.c' line='663' column='1'/>
+        <parameter type-id='bbaf3419' name='addr' filepath='net/wireless/util.c' line='664' column='1'/>
+        <parameter type-id='86505f90' name='iftype' filepath='net/wireless/util.c' line='664' column='1'/>
+        <parameter type-id='20f5f452' name='extra_headroom' filepath='net/wireless/util.c' line='665' column='1'/>
+        <parameter type-id='bbaf3419' name='check_da' filepath='net/wireless/util.c' line='666' column='1'/>
+        <parameter type-id='bbaf3419' name='check_sa' filepath='net/wireless/util.c' line='666' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_classify8021d' mangled-name='cfg80211_classify8021d' filepath='net/wireless/util.c' line='747' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_classify8021d'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/wireless/util.c' line='747' column='1'/>
+        <parameter type-id='794da86a' name='qos_map' filepath='net/wireless/util.c' line='748' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='ieee80211_bss_get_elem' mangled-name='ieee80211_bss_get_elem' filepath='net/wireless/util.c' line='825' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_bss_get_elem'>
+        <parameter type-id='bda81d86' name='bss' filepath='net/wireless/util.c' line='825' column='1'/>
+        <parameter type-id='f9b06939' name='id' filepath='net/wireless/util.c' line='825' column='1'/>
+        <return type-id='aa7ca86a'/>
+      </function-decl>
+      <function-decl name='cfg80211_find_elem_match' mangled-name='cfg80211_find_elem_match' filepath='include/net/cfg80211.h' line='5372' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_find_elem_match'>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='aa7ca86a'/>
+      </function-decl>
+      <function-decl name='cfg80211_calculate_bitrate' mangled-name='cfg80211_calculate_bitrate' filepath='net/wireless/util.c' line='1311' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_calculate_bitrate'>
+        <parameter type-id='185e765a' name='rate' filepath='net/wireless/util.c' line='1311' column='1'/>
+        <return type-id='19c2251e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/xfrm/xfrm_input.c' language='LANG_C89'>
+      <function-decl name='xfrm_input_resume' mangled-name='xfrm_input_resume' filepath='net/xfrm/xfrm_input.c' line='753' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_input_resume'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/xfrm/xfrm_input.c' line='753' column='1'/>
+        <parameter type-id='95e97e5e' name='nexthdr' filepath='net/xfrm/xfrm_input.c' line='753' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/xfrm/xfrm_interface.c' language='LANG_C89'>
+      <class-decl name='gro_cell' size-in-bits='3584' is-struct='yes' visibility='default' filepath='net/core/gro_cells.c' line='7' column='1' id='001ff55a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='napi_skbs' type-id='e61c85d0' visibility='default' filepath='net/core/gro_cells.c' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='napi' type-id='291e3bb5' visibility='default' filepath='net/core/gro_cells.c' line='9' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm6_protocol' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='1407' column='1' id='bcc93c81'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='handler' type-id='d2e00785' visibility='default' filepath='include/net/xfrm.h' line='1408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cb_handler' type-id='0aeca82c' visibility='default' filepath='include/net/xfrm.h' line='1409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='err_handler' type-id='a6ecc207' visibility='default' filepath='include/net/xfrm.h' line='1410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='679c2b79' visibility='default' filepath='include/net/xfrm.h' line='1413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='priority' type-id='95e97e5e' visibility='default' filepath='include/net/xfrm.h' line='1414' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet6_skb_parm' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/ipv6.h' line='125' column='1' id='c4d0818f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iif' type-id='95e97e5e' visibility='default' filepath='include/linux/ipv6.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ra' type-id='84a5c3d4' visibility='default' filepath='include/linux/ipv6.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='dst0' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='srcrt' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='dst1' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='lastopt' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='nhoff' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='dsthao' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='frag_max_size' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gro_cells' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/gro_cells.h' line='11' column='1' id='5b4eef8b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cells' type-id='69646708' visibility='default' filepath='include/net/gro_cells.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='001ff55a' size-in-bits='64' id='69646708'/>
+      <pointer-type-def type-id='5b4eef8b' size-in-bits='64' id='2c36d3bb'/>
+      <pointer-type-def type-id='c4d0818f' size-in-bits='64' id='cd91b317'/>
+      <pointer-type-def type-id='2a75d4cb' size-in-bits='64' id='a6ecc207'/>
+      <pointer-type-def type-id='bcc93c81' size-in-bits='64' id='679c2b79'/>
+      <function-decl name='xfrm6_protocol_deregister' mangled-name='xfrm6_protocol_deregister' filepath='include/net/xfrm.h' line='1597' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm6_protocol_deregister'>
+        <parameter type-id='679c2b79'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_netdevice_many' mangled-name='unregister_netdevice_many' filepath='include/linux/netdevice.h' line='2690' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_netdevice_many'>
+        <parameter type-id='e84b031a'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ip6_redirect' mangled-name='ip6_redirect' filepath='include/net/ip6_route.h' line='186' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip6_redirect'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='e8b29774'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ip6_update_pmtu' mangled-name='ip6_update_pmtu' filepath='include/net/ip6_route.h' line='183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip6_update_pmtu'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='e8b29774'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gro_cells_destroy' mangled-name='gro_cells_destroy' filepath='include/net/gro_cells.h' line='17' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gro_cells_destroy'>
+        <parameter type-id='2c36d3bb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gro_cells_init' mangled-name='gro_cells_init' filepath='include/net/gro_cells.h' line='16' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gro_cells_init'>
+        <parameter type-id='2c36d3bb'/>
+        <parameter type-id='68a2d05c'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xfrm6_protocol_register' mangled-name='xfrm6_protocol_register' filepath='include/net/xfrm.h' line='1596' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm6_protocol_register'>
+        <parameter type-id='679c2b79'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='2a75d4cb'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='cd91b317'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='78a133c2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/xfrm/xfrm_ipcomp.c' language='LANG_C89'>
+      <function-decl name='ipcomp_input' mangled-name='ipcomp_input' filepath='net/xfrm/xfrm_ipcomp.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipcomp_input'>
+        <parameter type-id='328dda6e' name='x' filepath='net/xfrm/xfrm_ipcomp.c' line='106' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/xfrm/xfrm_ipcomp.c' line='106' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ipcomp_output' mangled-name='ipcomp_output' filepath='net/xfrm/xfrm_ipcomp.c' line='167' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipcomp_output'>
+        <parameter type-id='328dda6e' name='x' filepath='net/xfrm/xfrm_ipcomp.c' line='167' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/xfrm/xfrm_ipcomp.c' line='167' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ipcomp_destroy' mangled-name='ipcomp_destroy' filepath='net/xfrm/xfrm_ipcomp.c' line='324' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipcomp_destroy'>
+        <parameter type-id='328dda6e' name='x' filepath='net/xfrm/xfrm_ipcomp.c' line='324' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='net/xfrm/xfrm_state.c' language='LANG_C89'>
+      <function-decl name='__xfrm_state_destroy' mangled-name='__xfrm_state_destroy' filepath='net/xfrm/xfrm_state.c' line='641' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__xfrm_state_destroy'>
+        <parameter type-id='328dda6e' name='x' filepath='net/xfrm/xfrm_state.c' line='641' column='1'/>
+        <parameter type-id='b50a4934' name='sync' filepath='net/xfrm/xfrm_state.c' line='641' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='security/inode.c' language='LANG_C89'>
+      <function-decl name='securityfs_create_file' mangled-name='securityfs_create_file' filepath='security/inode.c' line='200' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='securityfs_create_file'>
+        <parameter type-id='80f4b756' name='name' filepath='security/inode.c' line='200' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='security/inode.c' line='200' column='1'/>
+        <parameter type-id='27675065' name='parent' filepath='security/inode.c' line='201' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='security/inode.c' line='201' column='1'/>
+        <parameter type-id='61758ee5' name='fops' filepath='security/inode.c' line='202' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='securityfs_create_dir' mangled-name='securityfs_create_dir' filepath='security/inode.c' line='228' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='securityfs_create_dir'>
+        <parameter type-id='80f4b756' name='name' filepath='security/inode.c' line='228' column='1'/>
+        <parameter type-id='27675065' name='parent' filepath='security/inode.c' line='228' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='securityfs_remove' mangled-name='securityfs_remove' filepath='security/inode.c' line='295' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='securityfs_remove'>
+        <parameter type-id='27675065' name='dentry' filepath='security/inode.c' line='295' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='security/keys/key.c' language='LANG_C89'>
+      <function-decl name='key_revoke' mangled-name='key_revoke' filepath='security/keys/key.c' line='1038' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='key_revoke'>
+        <parameter type-id='204a4632' name='key' filepath='security/keys/key.c' line='1038' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='generic_key_instantiate' mangled-name='generic_key_instantiate' filepath='security/keys/key.c' line='1097' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_key_instantiate'>
+        <parameter type-id='204a4632' name='key' filepath='security/keys/key.c' line='1097' column='1'/>
+        <parameter type-id='4eae5cb0' name='prep' filepath='security/keys/key.c' line='1097' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='dc409042' size-in-bits='64' id='4eae5cb0'/>
+      <class-decl name='key_preparsed_payload' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/key-type.h' line='31' column='1' id='dc409042'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='26a90f95' visibility='default' filepath='include/linux/key-type.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='payload' type-id='2888d74a' visibility='default' filepath='include/linux/key-type.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/key-type.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='datalen' type-id='b59d7dce' visibility='default' filepath='include/linux/key-type.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='quotalen' type-id='b59d7dce' visibility='default' filepath='include/linux/key-type.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='expiry' type-id='1afd27ac' visibility='default' filepath='include/linux/key-type.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='security/keys/keyctl.c' language='LANG_C89'>
+      <function-decl name='key_validate' mangled-name='key_validate' filepath='include/linux/key.h' line='360' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='key_validate'>
+        <parameter type-id='7572cb33'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='fc8e93cb' size-in-bits='64' id='7572cb33'/>
+      <qualified-type-def type-id='128d0ac4' const='yes' id='fc8e93cb'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='security/keys/proc.c' language='LANG_C89'>
+      <class-decl name='key_preparsed_payload' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/key-type.h' line='31' column='1' id='dc409042'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='26a90f95' visibility='default' filepath='include/linux/key-type.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='payload' type-id='2888d74a' visibility='default' filepath='include/linux/key-type.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/key-type.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='datalen' type-id='b59d7dce' visibility='default' filepath='include/linux/key-type.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='quotalen' type-id='b59d7dce' visibility='default' filepath='include/linux/key-type.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='expiry' type-id='1afd27ac' visibility='default' filepath='include/linux/key-type.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key_match_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/key-type.h' line='45' column='1' id='a7db2a27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmp' type-id='a829f496' visibility='default' filepath='include/linux/key-type.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='raw_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/key-type.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='preparsed' type-id='eaa32e2f' visibility='default' filepath='include/linux/key-type.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lookup_type' type-id='f0981eeb' visibility='default' filepath='include/linux/key-type.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='request_key_actor_t' type-id='a4946104' filepath='include/linux/key-type.h' line='40' column='1' id='99147724'/>
+      <class-decl name='kernel_pkey_params' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/keyctl.h' line='29' column='1' id='e8d98129'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='204a4632' visibility='default' filepath='include/linux/keyctl.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encoding' type-id='80f4b756' visibility='default' filepath='include/linux/keyctl.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hash_algo' type-id='80f4b756' visibility='default' filepath='include/linux/keyctl.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='info' type-id='26a90f95' visibility='default' filepath='include/linux/keyctl.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='in_len' type-id='3f1a6b60' visibility='default' filepath='include/linux/keyctl.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='' type-id='05c0f8b7' visibility='default' filepath='include/linux/keyctl.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='op' type-id='eec170ff' visibility='default' filepath='include/linux/keyctl.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/keyctl.h' line='35' column='1' id='05c0f8b7'>
+        <data-member access='private'>
+          <var-decl name='out_len' type-id='3f1a6b60' visibility='default' filepath='include/linux/keyctl.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='in2_len' type-id='3f1a6b60' visibility='default' filepath='include/linux/keyctl.h' line='37' column='1'/>
+        </data-member>
+      </union-decl>
+      <enum-decl name='kernel_pkey_operation' filepath='include/linux/keyctl.h' line='22' column='1' id='eec170ff'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='kernel_pkey_encrypt' value='0'/>
+        <enumerator name='kernel_pkey_decrypt' value='1'/>
+        <enumerator name='kernel_pkey_sign' value='2'/>
+        <enumerator name='kernel_pkey_verify' value='3'/>
+      </enum-decl>
+      <class-decl name='kernel_pkey_query' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/keyctl.h' line='13' column='1' id='8f138471'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported_ops' type-id='3f1a6b60' visibility='default' filepath='include/linux/keyctl.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='key_size' type-id='3f1a6b60' visibility='default' filepath='include/linux/keyctl.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_data_size' type-id='d315442e' visibility='default' filepath='include/linux/keyctl.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='max_sig_size' type-id='d315442e' visibility='default' filepath='include/linux/keyctl.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_enc_size' type-id='d315442e' visibility='default' filepath='include/linux/keyctl.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='max_dec_size' type-id='d315442e' visibility='default' filepath='include/linux/keyctl.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='e8d98129' const='yes' id='cc458304'/>
+      <pointer-type-def type-id='cc458304' size-in-bits='64' id='bf6d816a'/>
+      <qualified-type-def type-id='128d0ac4' const='yes' id='fc8e93cb'/>
+      <pointer-type-def type-id='fc8e93cb' size-in-bits='64' id='7572cb33'/>
+      <qualified-type-def type-id='a7db2a27' const='yes' id='ec05f10e'/>
+      <pointer-type-def type-id='ec05f10e' size-in-bits='64' id='b15a9bac'/>
+      <qualified-type-def type-id='2a8a6332' const='yes' id='8552664d'/>
+      <pointer-type-def type-id='8552664d' size-in-bits='64' id='47b73425'/>
+      <qualified-type-def type-id='dec44472' const='yes' id='f213bd85'/>
+      <pointer-type-def type-id='f213bd85' size-in-bits='64' id='c4139a7d'/>
+      <pointer-type-def type-id='5113b296' size-in-bits='64' id='70487b28'/>
+      <pointer-type-def type-id='690d3bc2' size-in-bits='64' id='b6633a3c'/>
+      <pointer-type-def type-id='1a55bf13' size-in-bits='64' id='824beef7'/>
+      <pointer-type-def type-id='b3bf9ca3' size-in-bits='64' id='ab4f7fd7'/>
+      <pointer-type-def type-id='b2a9667a' size-in-bits='64' id='a4946104'/>
+      <pointer-type-def type-id='d442aa81' size-in-bits='64' id='0954c675'/>
+      <pointer-type-def type-id='47a8f7d6' size-in-bits='64' id='320c9cb0'/>
+      <pointer-type-def type-id='e8d98129' size-in-bits='64' id='5dbae9d1'/>
+      <pointer-type-def type-id='8f138471' size-in-bits='64' id='0fda5689'/>
+      <pointer-type-def type-id='a7db2a27' size-in-bits='64' id='d9863f2f'/>
+      <pointer-type-def type-id='dc409042' size-in-bits='64' id='4eae5cb0'/>
+      <pointer-type-def type-id='c7da7875' size-in-bits='64' id='7c4a6c91'/>
+      <pointer-type-def type-id='4c16d0cc' size-in-bits='64' id='a9cc7986'/>
+      <pointer-type-def type-id='ab7568f4' size-in-bits='64' id='a829f496'/>
+      <pointer-type-def type-id='8422a42a' size-in-bits='64' id='f68ddecc'/>
+      <pointer-type-def type-id='fae72313' size-in-bits='64' id='b36896a7'/>
+      <pointer-type-def type-id='0ef969d4' size-in-bits='64' id='87f6a50e'/>
+      <pointer-type-def type-id='a9237415' size-in-bits='64' id='54d7d559'/>
+      <function-decl name='rb_first' mangled-name='rb_first' filepath='include/linux/rbtree.h' line='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rb_first'>
+        <parameter type-id='c4139a7d'/>
+        <return type-id='e6532500'/>
+      </function-decl>
+      <function-decl name='rb_next' mangled-name='rb_next' filepath='include/linux/rbtree.h' line='54' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rb_next'>
+        <parameter type-id='47b73425'/>
+        <return type-id='e6532500'/>
+      </function-decl>
+      <function-decl name='key_put' mangled-name='key_put' filepath='include/linux/key.h' line='275' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='key_put'>
+        <parameter type-id='204a4632'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ktime_get_real_seconds' mangled-name='ktime_get_real_seconds' filepath='include/linux/timekeeping.h' line='54' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get_real_seconds'>
+        <return type-id='1eb56b1e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='5113b296'>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='690d3bc2'>
+        <parameter type-id='bf6d816a'/>
+        <parameter type-id='0fda5689'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1a55bf13'>
+        <parameter type-id='5dbae9d1'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b3bf9ca3'>
+        <parameter type-id='204a4632'/>
+        <parameter type-id='4eae5cb0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b2a9667a'>
+        <parameter type-id='204a4632'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d442aa81'>
+        <parameter type-id='d9863f2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='47a8f7d6'>
+        <parameter type-id='4eae5cb0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c7da7875'>
+        <parameter type-id='80f4b756'/>
+        <return type-id='92daca01'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4c16d0cc'>
+        <parameter type-id='7572cb33'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ab7568f4'>
+        <parameter type-id='7572cb33'/>
+        <parameter type-id='b15a9bac'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8422a42a'>
+        <parameter type-id='7572cb33'/>
+        <parameter type-id='f8dc9df0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fae72313'>
+        <parameter type-id='204a4632'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ef969d4'>
+        <parameter type-id='d9863f2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a9237415'>
+        <parameter type-id='4eae5cb0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='security/keys/user_defined.c' language='LANG_C89'>
+      <function-decl name='user_revoke' mangled-name='user_revoke' filepath='security/keys/user_defined.c' line='128' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='user_revoke'>
+        <parameter type-id='204a4632' name='key' filepath='security/keys/user_defined.c' line='128' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='user_destroy' mangled-name='user_destroy' filepath='security/keys/user_defined.c' line='146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='user_destroy'>
+        <parameter type-id='204a4632' name='key' filepath='security/keys/user_defined.c' line='146' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='user_read' mangled-name='user_read' filepath='security/keys/user_defined.c' line='171' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='user_read'>
+        <parameter type-id='7572cb33' name='key' filepath='security/keys/user_defined.c' line='171' column='1'/>
+        <parameter type-id='26a90f95' name='buffer' filepath='security/keys/user_defined.c' line='171' column='1'/>
+        <parameter type-id='b59d7dce' name='buflen' filepath='security/keys/user_defined.c' line='171' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='security/security.c' language='LANG_C89'>
+      <class-decl name='socket' is-struct='yes' visibility='default' is-declaration-only='yes' id='ee14fd95'/>
+      <pointer-type-def type-id='ee14fd95' size-in-bits='64' id='13103033'/>
+      <function-decl name='security_sock_graft' mangled-name='security_sock_graft' filepath='security/security.c' line='2095' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='security_sock_graft'>
+        <parameter type-id='f772df6d' name='sk' filepath='security/security.c' line='2095' column='1'/>
+        <parameter type-id='13103033' name='parent' filepath='security/security.c' line='2095' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='security/selinux/hooks.c' language='LANG_C89'>
+      <function-decl name='nf_register_net_hooks' mangled-name='nf_register_net_hooks' filepath='include/linux/netfilter.h' line='185' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nf_register_net_hooks'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='27db53a1'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='nf_unregister_net_hooks' mangled-name='nf_unregister_net_hooks' filepath='include/linux/netfilter.h' line='187' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nf_unregister_net_hooks'>
+        <parameter type-id='a2bff677'/>
+        <parameter type-id='27db53a1'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='security/selinux/selinuxfs.c' language='LANG_C89'>
+      <function-decl name='hex_to_bin' mangled-name='hex_to_bin' filepath='include/linux/kernel.h' line='630' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hex_to_bin'>
+        <parameter type-id='a84c031d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/core/compress_offload.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='3158a266' size-in-bits='480' id='33e9f3ff'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='480' id='dd2f9695'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='c16c976f' size-in-bits='89088' id='cac20798'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <class-decl name='snd_compr_stream' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/sound/compress_driver.h' line='65' column='1' id='009f0185'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/compress_driver.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='06ca680b' visibility='default' filepath='include/sound/compress_driver.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='runtime' type-id='eb83bf5b' visibility='default' filepath='include/sound/compress_driver.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device' type-id='dc1e097e' visibility='default' filepath='include/sound/compress_driver.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='error_work' type-id='5ad6e0ef' visibility='default' filepath='include/sound/compress_driver.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='direction' type-id='0e72fd0d' visibility='default' filepath='include/sound/compress_driver.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='metadata_set' type-id='b50a4934' visibility='default' filepath='include/sound/compress_driver.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1384'>
+          <var-decl name='next_track' type-id='b50a4934' visibility='default' filepath='include/sound/compress_driver.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1392'>
+          <var-decl name='partial_drain' type-id='b50a4934' visibility='default' filepath='include/sound/compress_driver.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/compress_driver.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_compr_ops' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/sound/compress_driver.h' line='101' column='1' id='33d73f3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='be315f37' visibility='default' filepath='include/sound/compress_driver.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='free' type-id='be315f37' visibility='default' filepath='include/sound/compress_driver.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_params' type-id='f259b60b' visibility='default' filepath='include/sound/compress_driver.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_params' type-id='85e4ab0f' visibility='default' filepath='include/sound/compress_driver.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_metadata' type-id='a50a69f6' visibility='default' filepath='include/sound/compress_driver.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_metadata' type-id='a50a69f6' visibility='default' filepath='include/sound/compress_driver.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='trigger' type-id='59f5b0ce' visibility='default' filepath='include/sound/compress_driver.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pointer' type-id='81b5cbc0' visibility='default' filepath='include/sound/compress_driver.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='copy' type-id='97cb4c9a' visibility='default' filepath='include/sound/compress_driver.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mmap' type-id='7970d34a' visibility='default' filepath='include/sound/compress_driver.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ack' type-id='956abcd0' visibility='default' filepath='include/sound/compress_driver.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_caps' type-id='67659502' visibility='default' filepath='include/sound/compress_driver.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_codec_caps' type-id='cd058347' visibility='default' filepath='include/sound/compress_driver.h' line='122' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_compr_params' size-in-bits='1056' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='51' column='1' id='508a0a73'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buffer' type-id='c51dce37' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='codec' type-id='97e76825' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='no_wake_mode' type-id='8f048e17' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_compressed_buffer' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='40' column='1' id='c51dce37'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fragment_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fragments' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_codec' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_params.h' line='390' column='1' id='97e76825'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ch_in' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ch_out' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='sample_rate' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bit_rate' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rate_control' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='profile' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='level' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ch_mode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='format' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='align' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='options' type-id='c998b5fb' visibility='default' filepath='include/uapi/sound/compress_params.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='reserved' type-id='3fa05d14' visibility='default' filepath='include/uapi/sound/compress_params.h' line='403' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='snd_codec_options' size-in-bits='512' visibility='default' filepath='include/uapi/sound/compress_params.h' line='320' column='1' id='c998b5fb'>
+        <data-member access='private'>
+          <var-decl name='wma' type-id='fef670ff' visibility='default' filepath='include/uapi/sound/compress_params.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='vorbis' type-id='36942ad7' visibility='default' filepath='include/uapi/sound/compress_params.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='real' type-id='325f40b8' visibility='default' filepath='include/uapi/sound/compress_params.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='flac' type-id='8a9c9202' visibility='default' filepath='include/uapi/sound/compress_params.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='generic' type-id='4afe6201' visibility='default' filepath='include/uapi/sound/compress_params.h' line='325' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='snd_enc_wma' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_params.h' line='242' column='1' id='fef670ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='super_block_align' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='243' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_enc_vorbis' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_params.h' line='267' column='1' id='36942ad7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='quality' type-id='3158a266' visibility='default' filepath='include/uapi/sound/compress_params.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='managed' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_bit_rate' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='min_bit_rate' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='downmix' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='272' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_enc_real' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_params.h' line='285' column='1' id='325f40b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='quant_bits' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='start_region' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_regions' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='288' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_enc_flac' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_params.h' line='310' column='1' id='8a9c9202'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='gain' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='312' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_enc_generic' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_params.h' line='315' column='1' id='4afe6201'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bw' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='reserved' type-id='33e9f3ff' visibility='default' filepath='include/uapi/sound/compress_params.h' line='317' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_compr_metadata' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='142' column='1' id='92ee9b60'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='value' type-id='7f84eb57' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='144' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_compr_tstamp' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='68' column='1' id='32b4223a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='byte_offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='copied_total' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pcm_frames' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pcm_io_frames' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sampling_rate' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_compr_caps' size-in-bits='1568' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='102' column='1' id='c2835ff8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_codecs' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='direction' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min_fragment_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_fragment_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='min_fragments' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_fragments' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='codecs' type-id='734a963c' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='reserved' type-id='9d263779' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_compr_codec_caps' size-in-bits='89152' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='119' column='1' id='5cbc594f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='codec' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num_descriptors' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='descriptor' type-id='cac20798' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='122' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_codec_desc' size-in-bits='2784' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_params.h' line='351' column='1' id='c16c976f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_ch' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='sample_rates' type-id='734a963c' visibility='default' filepath='include/uapi/sound/compress_params.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='num_sample_rates' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='bit_rate' type-id='734a963c' visibility='default' filepath='include/uapi/sound/compress_params.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='num_bitrates' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='rate_control' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='profiles' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='modes' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='formats' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='min_buffer' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='reserved' type-id='dd2f9695' visibility='default' filepath='include/uapi/sound/compress_params.h' line='362' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_compr_runtime' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/sound/compress_driver.h' line='38' column='1' id='e2a795cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='33158de9' visibility='default' filepath='include/sound/compress_driver.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='06ca680b' visibility='default' filepath='include/sound/compress_driver.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dma_buffer_p' type-id='a02b8cd2' visibility='default' filepath='include/sound/compress_driver.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='buffer' type-id='eaa32e2f' visibility='default' filepath='include/sound/compress_driver.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='buffer_size' type-id='91ce1af9' visibility='default' filepath='include/sound/compress_driver.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fragment_size' type-id='19c2251e' visibility='default' filepath='include/sound/compress_driver.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='fragments' type-id='19c2251e' visibility='default' filepath='include/sound/compress_driver.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='total_bytes_available' type-id='91ce1af9' visibility='default' filepath='include/sound/compress_driver.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='total_bytes_transferred' type-id='91ce1af9' visibility='default' filepath='include/sound/compress_driver.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sleep' type-id='b5ab048f' visibility='default' filepath='include/sound/compress_driver.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/compress_driver.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_compr' size-in-bits='8000' is-struct='yes' visibility='default' filepath='include/sound/compress_driver.h' line='137' column='1' id='a9559bf8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/compress_driver.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/sound/compress_driver.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='ops' type-id='06ca680b' visibility='default' filepath='include/sound/compress_driver.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/compress_driver.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='card' type-id='52704eb7' visibility='default' filepath='include/sound/compress_driver.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='direction' type-id='f0981eeb' visibility='default' filepath='include/sound/compress_driver.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/sound/compress_driver.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='device' type-id='95e97e5e' visibility='default' filepath='include/sound/compress_driver.h' line='145' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_compr_direction' filepath='include/uapi/sound/compress_offload.h' line='86' column='1' id='0e72fd0d'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_COMPRESS_PLAYBACK' value='0'/>
+        <enumerator name='SND_COMPRESS_CAPTURE' value='1'/>
+      </enum-decl>
+      <pointer-type-def type-id='538e531b' size-in-bits='64' id='be315f37'/>
+      <pointer-type-def type-id='97776d30' size-in-bits='64' id='97cb4c9a'/>
+      <pointer-type-def type-id='2b2b01a4' size-in-bits='64' id='59f5b0ce'/>
+      <pointer-type-def type-id='7506f11b' size-in-bits='64' id='85e4ab0f'/>
+      <pointer-type-def type-id='18f5dff0' size-in-bits='64' id='67659502'/>
+      <pointer-type-def type-id='0ac430cb' size-in-bits='64' id='cd058347'/>
+      <pointer-type-def type-id='0a77e414' size-in-bits='64' id='a50a69f6'/>
+      <pointer-type-def type-id='34684d4f' size-in-bits='64' id='f259b60b'/>
+      <pointer-type-def type-id='984b9756' size-in-bits='64' id='81b5cbc0'/>
+      <pointer-type-def type-id='6f351a96' size-in-bits='64' id='956abcd0'/>
+      <pointer-type-def type-id='82469568' size-in-bits='64' id='7970d34a'/>
+      <pointer-type-def type-id='97e76825' size-in-bits='64' id='99baf115'/>
+      <pointer-type-def type-id='a9559bf8' size-in-bits='64' id='dc1e097e'/>
+      <pointer-type-def type-id='c2835ff8' size-in-bits='64' id='7924d17e'/>
+      <pointer-type-def type-id='5cbc594f' size-in-bits='64' id='cd012107'/>
+      <pointer-type-def type-id='92ee9b60' size-in-bits='64' id='58dc55d6'/>
+      <pointer-type-def type-id='33d73f3b' size-in-bits='64' id='06ca680b'/>
+      <pointer-type-def type-id='508a0a73' size-in-bits='64' id='15dfbd93'/>
+      <pointer-type-def type-id='e2a795cb' size-in-bits='64' id='eb83bf5b'/>
+      <pointer-type-def type-id='009f0185' size-in-bits='64' id='b7c1d7d5'/>
+      <pointer-type-def type-id='32b4223a' size-in-bits='64' id='c1873808'/>
+      <function-decl name='snd_compr_stop_error' mangled-name='snd_compr_stop_error' filepath='sound/core/compress_offload.c' line='758' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_compr_stop_error'>
+        <parameter type-id='b7c1d7d5' name='stream' filepath='sound/core/compress_offload.c' line='758' column='1'/>
+        <parameter type-id='33158de9' name='state' filepath='sound/core/compress_offload.c' line='759' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='538e531b'>
+        <parameter type-id='b7c1d7d5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='97776d30'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2b2b01a4'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7506f11b'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='99baf115'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='18f5dff0'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='7924d17e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ac430cb'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='cd012107'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0a77e414'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='58dc55d6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34684d4f'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='15dfbd93'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='984b9756'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='c1873808'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6f351a96'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='82469568'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/core/control.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='8192' id='e1c8dbe3'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='1eb56b1e' size-in-bits='4096' id='1fd26250'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='9cd807f4' size-in-bits='infinite' id='bfd02128'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='896' id='b604cb74'>
+        <subrange length='112' type-id='7ff19f0f' id='17c6c021'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='1024' id='6f10c3ff'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='1176' id='00bc0376'>
+        <subrange length='147' type-id='7ff19f0f' id='351fcdaf'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='192' id='25108e54'>
+        <subrange length='24' type-id='7ff19f0f' id='fdd3342b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='352' id='4ff588ae'>
+        <subrange length='44' type-id='7ff19f0f' id='cf8ba455'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='4096' id='b6d05418'>
+        <subrange length='512' type-id='7ff19f0f' id='c11630dd'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='448' id='de076c27'>
+        <subrange length='56' type-id='7ff19f0f' id='f8137894'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='4096' id='ee4e68c4'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8efea9e5' size-in-bits='64' id='3f30d495'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='snd_ctl_elem_id' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='885' column='1' id='abbbeccc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='numid' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='iface' type-id='4143fc17' visibility='default' filepath='include/uapi/sound/asound.h' line='887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='device' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='subdevice' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='4ff588ae' visibility='default' filepath='include/uapi/sound/asound.h' line='890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='891' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='snd_ctl_elem_iface_t' type-id='95e97e5e' filepath='include/uapi/sound/asound.h' line='849' column='1' id='4143fc17'/>
+      <typedef-decl name='snd_kcontrol_info_t' type-id='fa75c86d' filepath='include/sound/control.h' line='17' column='1' id='180e16b0'/>
+      <class-decl name='snd_ctl_elem_info' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='903' column='1' id='897bd6f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='abbbeccc' visibility='default' filepath='include/uapi/sound/asound.h' line='904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='type' type-id='e31355f5' visibility='default' filepath='include/uapi/sound/asound.h' line='905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='access' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='owner' type-id='63eb2bf2' visibility='default' filepath='include/uapi/sound/asound.h' line='908' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='value' type-id='43c56b1a' visibility='default' filepath='include/uapi/sound/asound.h' line='928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dimen' type-id='2ec5efad' visibility='default' filepath='include/uapi/sound/asound.h' line='932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='reserved' type-id='de076c27' visibility='default' filepath='include/uapi/sound/asound.h' line='933' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='snd_ctl_elem_type_t' type-id='95e97e5e' filepath='include/uapi/sound/asound.h' line='839' column='1' id='e31355f5'/>
+      <union-decl name='__anonymous_union__' size-in-bits='1024' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='909' column='1' id='43c56b1a'>
+        <data-member access='private'>
+          <var-decl name='integer' type-id='44a4bb5b' visibility='default' filepath='include/uapi/sound/asound.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='integer64' type-id='5dc1bcd5' visibility='default' filepath='include/uapi/sound/asound.h' line='919' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='enumerated' type-id='895fb397' visibility='default' filepath='include/uapi/sound/asound.h' line='926' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='reserved' type-id='6f10c3ff' visibility='default' filepath='include/uapi/sound/asound.h' line='927' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='910' column='1' id='44a4bb5b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min' type-id='bd54fe1a' visibility='default' filepath='include/uapi/sound/asound.h' line='911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max' type-id='bd54fe1a' visibility='default' filepath='include/uapi/sound/asound.h' line='912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='step' type-id='bd54fe1a' visibility='default' filepath='include/uapi/sound/asound.h' line='913' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='915' column='1' id='5dc1bcd5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min' type-id='1eb56b1e' visibility='default' filepath='include/uapi/sound/asound.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max' type-id='1eb56b1e' visibility='default' filepath='include/uapi/sound/asound.h' line='917' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='step' type-id='1eb56b1e' visibility='default' filepath='include/uapi/sound/asound.h' line='918' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='704' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='920' column='1' id='895fb397'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='items' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='item' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='59daf3ef' visibility='default' filepath='include/uapi/sound/asound.h' line='923' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='names_ptr' type-id='d3130597' visibility='default' filepath='include/uapi/sound/asound.h' line='924' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='names_length' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='925' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='929' column='1' id='2ec5efad'>
+        <data-member access='private'>
+          <var-decl name='d' type-id='3f30d495' visibility='default' filepath='include/uapi/sound/asound.h' line='930' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='d_ptr' type-id='e9e550dd' visibility='default' filepath='include/uapi/sound/asound.h' line='931' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='snd_kcontrol_get_t' type-id='84147814' filepath='include/sound/control.h' line='18' column='1' id='73fb632a'/>
+      <class-decl name='snd_ctl_elem_value' size-in-bits='9792' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='936' column='1' id='42736e36'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='abbbeccc' visibility='default' filepath='include/uapi/sound/asound.h' line='937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='indirect' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='value' type-id='8e5ed252' visibility='default' filepath='include/uapi/sound/asound.h' line='957' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='tstamp' type-id='a9c79a1f' visibility='default' filepath='include/uapi/sound/asound.h' line='958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='reserved' type-id='b604cb74' visibility='default' filepath='include/uapi/sound/asound.h' line='959' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='8192' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='939' column='1' id='8e5ed252'>
+        <data-member access='private'>
+          <var-decl name='integer' type-id='5f6c3e36' visibility='default' filepath='include/uapi/sound/asound.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='integer64' type-id='c74bfd7b' visibility='default' filepath='include/uapi/sound/asound.h' line='947' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='enumerated' type-id='3abbbc5e' visibility='default' filepath='include/uapi/sound/asound.h' line='951' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='bytes' type-id='ee13cef3' visibility='default' filepath='include/uapi/sound/asound.h' line='955' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='iec958' type-id='22a78e66' visibility='default' filepath='include/uapi/sound/asound.h' line='956' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='8192' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='940' column='1' id='5f6c3e36'>
+        <data-member access='private'>
+          <var-decl name='value' type-id='e1c8dbe3' visibility='default' filepath='include/uapi/sound/asound.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='value_ptr' type-id='3ccc2590' visibility='default' filepath='include/uapi/sound/asound.h' line='942' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='4096' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='944' column='1' id='c74bfd7b'>
+        <data-member access='private'>
+          <var-decl name='value' type-id='1fd26250' visibility='default' filepath='include/uapi/sound/asound.h' line='945' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='value_ptr' type-id='8b97c2dc' visibility='default' filepath='include/uapi/sound/asound.h' line='946' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='4096' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='948' column='1' id='3abbbc5e'>
+        <data-member access='private'>
+          <var-decl name='item' type-id='ee4e68c4' visibility='default' filepath='include/uapi/sound/asound.h' line='949' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='item_ptr' type-id='807869d3' visibility='default' filepath='include/uapi/sound/asound.h' line='950' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='4096' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='952' column='1' id='ee13cef3'>
+        <data-member access='private'>
+          <var-decl name='data' type-id='b6d05418' visibility='default' filepath='include/uapi/sound/asound.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='data_ptr' type-id='cf536864' visibility='default' filepath='include/uapi/sound/asound.h' line='954' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='snd_aes_iec958' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='57' column='1' id='22a78e66'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='status' type-id='25108e54' visibility='default' filepath='include/uapi/sound/asound.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='subcode' type-id='00bc0376' visibility='default' filepath='include/uapi/sound/asound.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1368'>
+          <var-decl name='pad' type-id='002ac4a6' visibility='default' filepath='include/uapi/sound/asound.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='dig_subframe' type-id='09001d3c' visibility='default' filepath='include/uapi/sound/asound.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='snd_kcontrol_put_t' type-id='84147814' filepath='include/sound/control.h' line='19' column='1' id='db992ec7'/>
+      <union-decl name='__anonymous_union__7' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/sound/control.h' line='61' column='1' id='e3dd1f94'>
+        <data-member access='private'>
+          <var-decl name='c' type-id='bf7b4ec3' visibility='default' filepath='include/sound/control.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='p' type-id='5b2fd8e8' visibility='default' filepath='include/sound/control.h' line='63' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='snd_kcontrol_tlv_rw_t' type-id='54d4fbda' filepath='include/sound/control.h' line='20' column='1' id='ba5ca324'/>
+      <class-decl name='snd_kcontrol_volatile' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/sound/control.h' line='49' column='1' id='9cd807f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='ed27ccc9' visibility='default' filepath='include/sound/control.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='access' type-id='f0981eeb' visibility='default' filepath='include/sound/control.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_ctl_file' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/sound/control.h' line='89' column='1' id='7c055541'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/control.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='card' type-id='52704eb7' visibility='default' filepath='include/sound/control.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pid' type-id='b94e5398' visibility='default' filepath='include/sound/control.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='preferred_subdevice' type-id='e4266c7e' visibility='default' filepath='include/sound/control.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='change_sleep' type-id='b5ab048f' visibility='default' filepath='include/sound/control.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='read_lock' type-id='fb4018a0' visibility='default' filepath='include/sound/control.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fasync' type-id='5bb9c75d' visibility='default' filepath='include/sound/control.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='subscribed' type-id='95e97e5e' visibility='default' filepath='include/sound/control.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='events' type-id='72f469ec' visibility='default' filepath='include/sound/control.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_kcontrol_new' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/sound/control.h' line='31' column='1' id='9a46627e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iface' type-id='4143fc17' visibility='default' filepath='include/sound/control.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='device' type-id='f0981eeb' visibility='default' filepath='include/sound/control.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='subdevice' type-id='f0981eeb' visibility='default' filepath='include/sound/control.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='354f7eb9' visibility='default' filepath='include/sound/control.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/sound/control.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='access' type-id='f0981eeb' visibility='default' filepath='include/sound/control.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/sound/control.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='info' type-id='e79cb28f' visibility='default' filepath='include/sound/control.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get' type-id='5553210f' visibility='default' filepath='include/sound/control.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='put' type-id='e149b058' visibility='default' filepath='include/sound/control.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='tlv' type-id='e3dd1f94' visibility='default' filepath='include/sound/control.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='private_value' type-id='7359adad' visibility='default' filepath='include/sound/control.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='9a46627e' const='yes' id='c69a48a7'/>
+      <pointer-type-def type-id='c69a48a7' size-in-bits='64' id='31e035f7'/>
+      <pointer-type-def type-id='abbbeccc' size-in-bits='64' id='eaeee79a'/>
+      <pointer-type-def type-id='897bd6f1' size-in-bits='64' id='0e291009'/>
+      <pointer-type-def type-id='42736e36' size-in-bits='64' id='144a5d4c'/>
+      <pointer-type-def type-id='7c055541' size-in-bits='64' id='ed27ccc9'/>
+      <pointer-type-def type-id='73fb632a' size-in-bits='64' id='5553210f'/>
+      <pointer-type-def type-id='180e16b0' size-in-bits='64' id='e79cb28f'/>
+      <pointer-type-def type-id='db992ec7' size-in-bits='64' id='e149b058'/>
+      <pointer-type-def type-id='ba5ca324' size-in-bits='64' id='bf7b4ec3'/>
+      <pointer-type-def type-id='4baf5c00' size-in-bits='64' id='56fe8aea'/>
+      <function-decl name='snd_ctl_notify' mangled-name='snd_ctl_notify' filepath='sound/core/control.c' line='141' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_notify'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/control.c' line='141' column='1'/>
+        <parameter type-id='f0981eeb' name='mask' filepath='sound/core/control.c' line='141' column='1'/>
+        <parameter type-id='eaeee79a' name='id' filepath='sound/core/control.c' line='142' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_ctl_new1' mangled-name='snd_ctl_new1' filepath='sound/core/control.c' line='228' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_new1'>
+        <parameter type-id='31e035f7' name='ncontrol' filepath='sound/core/control.c' line='228' column='1'/>
+        <parameter type-id='eaa32e2f' name='private_data' filepath='sound/core/control.c' line='229' column='1'/>
+        <return type-id='7a5054b7'/>
+      </function-decl>
+      <function-decl name='snd_ctl_add' mangled-name='snd_ctl_add' filepath='sound/core/control.c' line='422' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_add'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/control.c' line='422' column='1'/>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/core/control.c' line='422' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_ctl_remove' mangled-name='snd_ctl_remove' filepath='sound/core/control.c' line='461' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_remove'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/control.c' line='461' column='1'/>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/core/control.c' line='461' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_ctl_remove_id' mangled-name='snd_ctl_remove_id' filepath='sound/core/control.c' line='488' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_remove_id'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/control.c' line='488' column='1'/>
+        <parameter type-id='eaeee79a' name='id' filepath='sound/core/control.c' line='488' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_ctl_find_id' mangled-name='snd_ctl_find_id' filepath='sound/core/control.c' line='664' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_find_id'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/control.c' line='664' column='1'/>
+        <parameter type-id='eaeee79a' name='id' filepath='sound/core/control.c' line='665' column='1'/>
+        <return type-id='7a5054b7'/>
+      </function-decl>
+      <function-decl name='snd_ctl_boolean_mono_info' mangled-name='snd_ctl_boolean_mono_info' filepath='sound/core/control.c' line='1892' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_boolean_mono_info'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/core/control.c' line='1892' column='1'/>
+        <parameter type-id='0e291009' name='uinfo' filepath='sound/core/control.c' line='1893' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_ctl_boolean_stereo_info' mangled-name='snd_ctl_boolean_stereo_info' filepath='sound/core/control.c' line='1912' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_boolean_stereo_info'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/core/control.c' line='1912' column='1'/>
+        <parameter type-id='0e291009' name='uinfo' filepath='sound/core/control.c' line='1913' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_ctl_enum_info' mangled-name='snd_ctl_enum_info' filepath='sound/core/control.c' line='1936' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_enum_info'>
+        <parameter type-id='0e291009' name='info' filepath='sound/core/control.c' line='1936' column='1'/>
+        <parameter type-id='f0981eeb' name='channels' filepath='sound/core/control.c' line='1936' column='1'/>
+        <parameter type-id='f0981eeb' name='items' filepath='sound/core/control.c' line='1937' column='1'/>
+        <parameter type-id='13956559' name='names' filepath='sound/core/control.c' line='1937' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='54d4fbda'>
+        <parameter type-id='7a5054b7'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fa75c86d'>
+        <parameter type-id='7a5054b7'/>
+        <parameter type-id='0e291009'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='84147814'>
+        <parameter type-id='7a5054b7'/>
+        <parameter type-id='144a5d4c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4baf5c00'>
+        <parameter type-id='7a5054b7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/core/device.c' language='LANG_C89'>
+      <function-decl name='snd_device_disconnect' mangled-name='snd_device_disconnect' filepath='sound/core/device.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_device_disconnect'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/device.c' line='106' column='1'/>
+        <parameter type-id='eaa32e2f' name='device_data' filepath='sound/core/device.c' line='106' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_device_free' mangled-name='snd_device_free' filepath='sound/core/device.c' line='130' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_device_free'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/device.c' line='130' column='1'/>
+        <parameter type-id='eaa32e2f' name='device_data' filepath='sound/core/device.c' line='130' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/core/hrtimer.c' language='LANG_C89'>
+      <class-decl name='snd_timer' size-in-bits='3520' is-struct='yes' visibility='default' filepath='include/sound/timer.h' line='57' column='1' id='73595e53'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tmr_class' type-id='95e97e5e' visibility='default' filepath='include/sound/timer.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='card' type-id='52704eb7' visibility='default' filepath='include/sound/timer.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/sound/timer.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tmr_device' type-id='95e97e5e' visibility='default' filepath='include/sound/timer.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='tmr_subdevice' type-id='95e97e5e' visibility='default' filepath='include/sound/timer.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='id' type-id='59daf3ef' visibility='default' filepath='include/sound/timer.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='name' type-id='aa5ff375' visibility='default' filepath='include/sound/timer.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/sound/timer.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='running' type-id='95e97e5e' visibility='default' filepath='include/sound/timer.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='sticks' type-id='7359adad' visibility='default' filepath='include/sound/timer.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/timer.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='private_free' type-id='4a508205' visibility='default' filepath='include/sound/timer.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='hw' type-id='bb41d987' visibility='default' filepath='include/sound/timer.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/sound/timer.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='device_list' type-id='72f469ec' visibility='default' filepath='include/sound/timer.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='open_list_head' type-id='72f469ec' visibility='default' filepath='include/sound/timer.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='active_list_head' type-id='72f469ec' visibility='default' filepath='include/sound/timer.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='ack_list_head' type-id='72f469ec' visibility='default' filepath='include/sound/timer.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='sack_list_head' type-id='72f469ec' visibility='default' filepath='include/sound/timer.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='task_queue' type-id='7a7ea727' visibility='default' filepath='include/sound/timer.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='max_instances' type-id='95e97e5e' visibility='default' filepath='include/sound/timer.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='num_instances' type-id='95e97e5e' visibility='default' filepath='include/sound/timer.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_timer_hardware' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/sound/timer.h' line='40' column='1' id='bb41d987'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/sound/timer.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='resolution' type-id='7359adad' visibility='default' filepath='include/sound/timer.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='resolution_min' type-id='7359adad' visibility='default' filepath='include/sound/timer.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='resolution_max' type-id='7359adad' visibility='default' filepath='include/sound/timer.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ticks' type-id='7359adad' visibility='default' filepath='include/sound/timer.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='open' type-id='563fdf98' visibility='default' filepath='include/sound/timer.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='close' type-id='563fdf98' visibility='default' filepath='include/sound/timer.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='c_resolution' type-id='3c60c5fb' visibility='default' filepath='include/sound/timer.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='start' type-id='563fdf98' visibility='default' filepath='include/sound/timer.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='stop' type-id='563fdf98' visibility='default' filepath='include/sound/timer.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_period' type-id='af229338' visibility='default' filepath='include/sound/timer.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='precise_resolution' type-id='cc036b58' visibility='default' filepath='include/sound/timer.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='8826ec36' size-in-bits='64' id='563fdf98'/>
+      <pointer-type-def type-id='51ca9086' size-in-bits='64' id='cc036b58'/>
+      <pointer-type-def type-id='34c6e216' size-in-bits='64' id='af229338'/>
+      <pointer-type-def type-id='73595e53' size-in-bits='64' id='6ee1a871'/>
+      <pointer-type-def type-id='ee28e0c7' size-in-bits='64' id='3c60c5fb'/>
+      <pointer-type-def type-id='66412cc1' size-in-bits='64' id='4a508205'/>
+      <function-decl name='snd_timer_interrupt' mangled-name='snd_timer_interrupt' filepath='include/sound/timer.h' line='129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_timer_interrupt'>
+        <parameter type-id='6ee1a871'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='8826ec36'>
+        <parameter type-id='6ee1a871'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='51ca9086'>
+        <parameter type-id='6ee1a871'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34c6e216'>
+        <parameter type-id='6ee1a871'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ee28e0c7'>
+        <parameter type-id='6ee1a871'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='66412cc1'>
+        <parameter type-id='6ee1a871'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/core/hwdep.c' language='LANG_C89'>
+      <class-decl name='snd_hwdep' size-in-bits='9920' is-struct='yes' visibility='default' filepath='include/sound/hwdep.h' line='39' column='1' id='31b13f91'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='card' type-id='52704eb7' visibility='default' filepath='include/sound/hwdep.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/hwdep.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device' type-id='95e97e5e' visibility='default' filepath='include/sound/hwdep.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='id' type-id='16dc656a' visibility='default' filepath='include/sound/hwdep.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='name' type-id='aa5ff375' visibility='default' filepath='include/sound/hwdep.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='iface' type-id='95e97e5e' visibility='default' filepath='include/sound/hwdep.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ops' type-id='5cb0616a' visibility='default' filepath='include/sound/hwdep.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='open_wait' type-id='b5ab048f' visibility='default' filepath='include/sound/hwdep.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/hwdep.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='private_free' type-id='1a240138' visibility='default' filepath='include/sound/hwdep.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/sound/hwdep.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='open_mutex' type-id='925167dc' visibility='default' filepath='include/sound/hwdep.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='used' type-id='95e97e5e' visibility='default' filepath='include/sound/hwdep.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9824'>
+          <var-decl name='dsp_loaded' type-id='f0981eeb' visibility='default' filepath='include/sound/hwdep.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='exclusive' type-id='f0981eeb' visibility='default' filepath='include/sound/hwdep.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_hwdep_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/sound/hwdep.h' line='16' column='1' id='5cb0616a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='llseek' type-id='4998c99f' visibility='default' filepath='include/sound/hwdep.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read' type-id='8aa9d34a' visibility='default' filepath='include/sound/hwdep.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write' type-id='5732f87b' visibility='default' filepath='include/sound/hwdep.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='open' type-id='51119d2d' visibility='default' filepath='include/sound/hwdep.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='51119d2d' visibility='default' filepath='include/sound/hwdep.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='poll' type-id='377be647' visibility='default' filepath='include/sound/hwdep.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ioctl' type-id='8fb9d791' visibility='default' filepath='include/sound/hwdep.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ioctl_compat' type-id='8fb9d791' visibility='default' filepath='include/sound/hwdep.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mmap' type-id='80eb3fbc' visibility='default' filepath='include/sound/hwdep.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dsp_status' type-id='8cc78bbc' visibility='default' filepath='include/sound/hwdep.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dsp_load' type-id='0ab14abf' visibility='default' filepath='include/sound/hwdep.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_hwdep_dsp_status' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='129' column='1' id='7ac013b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='fc872715' visibility='default' filepath='include/uapi/sound/asound.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='num_dsps' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dsp_loaded' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='chip_ready' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='reserved' type-id='92a46553' visibility='default' filepath='include/uapi/sound/asound.h' line='135' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_hwdep_dsp_image' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='138' column='1' id='4410ddbf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='b1888bf8' visibility='default' filepath='include/uapi/sound/asound.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='image' type-id='cf536864' visibility='default' filepath='include/uapi/sound/asound.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='length' type-id='b59d7dce' visibility='default' filepath='include/uapi/sound/asound.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='driver_data' type-id='7359adad' visibility='default' filepath='include/uapi/sound/asound.h' line='143' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d7cfbbe1' size-in-bits='64' id='51119d2d'/>
+      <pointer-type-def type-id='98ef1b95' size-in-bits='64' id='8fb9d791'/>
+      <pointer-type-def type-id='1432736a' size-in-bits='64' id='80eb3fbc'/>
+      <pointer-type-def type-id='c9365c7b' size-in-bits='64' id='0ab14abf'/>
+      <pointer-type-def type-id='2d274c62' size-in-bits='64' id='8cc78bbc'/>
+      <pointer-type-def type-id='c89340f8' size-in-bits='64' id='8aa9d34a'/>
+      <pointer-type-def type-id='0b57727f' size-in-bits='64' id='5732f87b'/>
+      <pointer-type-def type-id='bfa69bfb' size-in-bits='64' id='4998c99f'/>
+      <pointer-type-def type-id='31b13f91' size-in-bits='64' id='2567e379'/>
+      <pointer-type-def type-id='2567e379' size-in-bits='64' id='358adba9'/>
+      <pointer-type-def type-id='4410ddbf' size-in-bits='64' id='9ba8bea7'/>
+      <pointer-type-def type-id='7ac013b4' size-in-bits='64' id='67acad02'/>
+      <pointer-type-def type-id='93301493' size-in-bits='64' id='377be647'/>
+      <pointer-type-def type-id='e4574076' size-in-bits='64' id='1a240138'/>
+      <function-decl name='snd_hwdep_new' mangled-name='snd_hwdep_new' filepath='sound/core/hwdep.c' line='351' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_hwdep_new'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/hwdep.c' line='351' column='1'/>
+        <parameter type-id='26a90f95' name='id' filepath='sound/core/hwdep.c' line='351' column='1'/>
+        <parameter type-id='95e97e5e' name='device' filepath='sound/core/hwdep.c' line='351' column='1'/>
+        <parameter type-id='358adba9' name='rhwdep' filepath='sound/core/hwdep.c' line='352' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='d7cfbbe1'>
+        <parameter type-id='2567e379'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='98ef1b95'>
+        <parameter type-id='2567e379'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1432736a'>
+        <parameter type-id='2567e379'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c9365c7b'>
+        <parameter type-id='2567e379'/>
+        <parameter type-id='9ba8bea7'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2d274c62'>
+        <parameter type-id='2567e379'/>
+        <parameter type-id='67acad02'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c89340f8'>
+        <parameter type-id='2567e379'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='bd54fe1a'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0b57727f'>
+        <parameter type-id='2567e379'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='bd54fe1a'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bfa69bfb'>
+        <parameter type-id='2567e379'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='1eb56b1e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='1eb56b1e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='93301493'>
+        <parameter type-id='2567e379'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='a54c778f'/>
+        <return type-id='8f254b08'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e4574076'>
+        <parameter type-id='2567e379'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/core/info.c' language='LANG_C89'>
+      <function-decl name='snd_info_free_entry' mangled-name='snd_info_free_entry' filepath='sound/core/info.c' line='769' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_info_free_entry'>
+        <parameter type-id='b9608bfd' name='entry' filepath='sound/core/info.c' line='769' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_info_get_line' mangled-name='snd_info_get_line' filepath='sound/core/info.c' line='607' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_info_get_line'>
+        <parameter type-id='00aa6a0e' name='buffer' filepath='sound/core/info.c' line='607' column='1'/>
+        <parameter type-id='26a90f95' name='line' filepath='sound/core/info.c' line='607' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='sound/core/info.c' line='607' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_info_create_module_entry' mangled-name='snd_info_create_module_entry' filepath='sound/core/info.c' line='721' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_info_create_module_entry'>
+        <parameter type-id='2730d015' name='module' filepath='sound/core/info.c' line='721' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='sound/core/info.c' line='722' column='1'/>
+        <parameter type-id='b9608bfd' name='parent' filepath='sound/core/info.c' line='723' column='1'/>
+        <return type-id='b9608bfd'/>
+      </function-decl>
+      <function-decl name='snd_info_create_card_entry' mangled-name='snd_info_create_card_entry' filepath='sound/core/info.c' line='741' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_info_create_card_entry'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/info.c' line='741' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='sound/core/info.c' line='742' column='1'/>
+        <parameter type-id='b9608bfd' name='parent' filepath='sound/core/info.c' line='743' column='1'/>
+        <return type-id='b9608bfd'/>
+      </function-decl>
+      <function-decl name='snd_card_rw_proc_new' mangled-name='snd_card_rw_proc_new' filepath='sound/core/info.c' line='875' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_card_rw_proc_new'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/info.c' line='875' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='sound/core/info.c' line='875' column='1'/>
+        <parameter type-id='eaa32e2f' name='private_data' filepath='sound/core/info.c' line='876' column='1'/>
+        <parameter type-id='f695e0b6' name='read' filepath='sound/core/info.c' line='877' column='1'/>
+        <parameter type-id='f695e0b6' name='write' filepath='sound/core/info.c' line='879' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='982f66c8' size-in-bits='64' id='00aa6a0e'/>
+      <pointer-type-def type-id='48ad5fc7' size-in-bits='64' id='b9608bfd'/>
+      <pointer-type-def type-id='28026fe4' size-in-bits='64' id='f695e0b6'/>
+      <class-decl name='snd_info_buffer' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/info.h' line='15' column='1' id='982f66c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buffer' type-id='26a90f95' visibility='default' filepath='include/sound/info.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='curr' type-id='f0981eeb' visibility='default' filepath='include/sound/info.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/sound/info.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/sound/info.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='stop' type-id='95e97e5e' visibility='default' filepath='include/sound/info.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/sound/info.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_info_entry' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/sound/info.h' line='60' column='1' id='48ad5fc7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/info.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='include/sound/info.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='bd54fe1a' visibility='default' filepath='include/sound/info.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='content' type-id='8efea9e5' visibility='default' filepath='include/sound/info.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='c' type-id='74c3182a' visibility='default' filepath='include/sound/info.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='parent' type-id='b9608bfd' visibility='default' filepath='include/sound/info.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/sound/info.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/info.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='private_free' type-id='93226281' visibility='default' filepath='include/sound/info.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='p' type-id='d077e928' visibility='default' filepath='include/sound/info.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='access' type-id='925167dc' visibility='default' filepath='include/sound/info.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='include/sound/info.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/info.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/sound/info.h' line='65' column='1' id='74c3182a'>
+        <data-member access='private'>
+          <var-decl name='text' type-id='cf87b76c' visibility='default' filepath='include/sound/info.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ops' type-id='d9cfece5' visibility='default' filepath='include/sound/info.h' line='67' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='8754454d' size-in-bits='64' id='93226281'/>
+      <pointer-type-def type-id='f9b9a795' size-in-bits='64' id='d9cfece5'/>
+      <class-decl name='snd_info_entry_text' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/sound/info.h' line='29' column='1' id='cf87b76c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read' type-id='f695e0b6' visibility='default' filepath='include/sound/info.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write' type-id='f695e0b6' visibility='default' filepath='include/sound/info.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_info_entry_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/sound/info.h' line='36' column='1' id='f9b9a795'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='1aa763a8' visibility='default' filepath='include/sound/info.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release' type-id='113423d8' visibility='default' filepath='include/sound/info.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read' type-id='b9922d07' visibility='default' filepath='include/sound/info.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write' type-id='6047a55c' visibility='default' filepath='include/sound/info.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='llseek' type-id='882bc4d4' visibility='default' filepath='include/sound/info.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='poll' type-id='305a7ffa' visibility='default' filepath='include/sound/info.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ioctl' type-id='3d52c694' visibility='default' filepath='include/sound/info.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mmap' type-id='e118a96a' visibility='default' filepath='include/sound/info.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a249930e' size-in-bits='64' id='113423d8'/>
+      <pointer-type-def type-id='38cfc416' size-in-bits='64' id='1aa763a8'/>
+      <pointer-type-def type-id='3ba7892a' size-in-bits='64' id='3d52c694'/>
+      <pointer-type-def type-id='fc14a418' size-in-bits='64' id='e118a96a'/>
+      <pointer-type-def type-id='643f05a0' size-in-bits='64' id='305a7ffa'/>
+      <pointer-type-def type-id='19b22092' size-in-bits='64' id='882bc4d4'/>
+      <pointer-type-def type-id='5a067f4b' size-in-bits='64' id='b9922d07'/>
+      <pointer-type-def type-id='ee9d520a' size-in-bits='64' id='6047a55c'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/core/jack.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='800' id='04f09ed4'>
+        <subrange length='100' type-id='7ff19f0f' id='4196563c'/>
+      </array-type-def>
+      <class-decl name='snd_jack' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/sound/jack.h' line='59' column='1' id='c4d4ddea'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kctl_list' type-id='72f469ec' visibility='default' filepath='include/sound/jack.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='card' type-id='52704eb7' visibility='default' filepath='include/sound/jack.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='80f4b756' visibility='default' filepath='include/sound/jack.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='input_dev' type-id='74b427eb' visibility='default' filepath='include/sound/jack.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='registered' type-id='95e97e5e' visibility='default' filepath='include/sound/jack.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/sound/jack.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='name' type-id='04f09ed4' visibility='default' filepath='include/sound/jack.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='key' type-id='0d5c291d' visibility='default' filepath='include/sound/jack.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/jack.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='private_free' type-id='5a798ea9' visibility='default' filepath='include/sound/jack.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_jack_types' filepath='include/sound/jack.h' line='37' column='1' id='7851d449'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_JACK_HEADPHONE' value='1'/>
+        <enumerator name='SND_JACK_MICROPHONE' value='2'/>
+        <enumerator name='SND_JACK_HEADSET' value='3'/>
+        <enumerator name='SND_JACK_LINEOUT' value='4'/>
+        <enumerator name='SND_JACK_MECHANICAL' value='8'/>
+        <enumerator name='SND_JACK_VIDEOOUT' value='16'/>
+        <enumerator name='SND_JACK_AVOUT' value='20'/>
+        <enumerator name='SND_JACK_LINEIN' value='32'/>
+        <enumerator name='SND_JACK_BTN_0' value='16384'/>
+        <enumerator name='SND_JACK_BTN_1' value='8192'/>
+        <enumerator name='SND_JACK_BTN_2' value='4096'/>
+        <enumerator name='SND_JACK_BTN_3' value='2048'/>
+        <enumerator name='SND_JACK_BTN_4' value='1024'/>
+        <enumerator name='SND_JACK_BTN_5' value='512'/>
+      </enum-decl>
+      <pointer-type-def type-id='c4d4ddea' size-in-bits='64' id='0f5a7eb8'/>
+      <pointer-type-def type-id='0f5a7eb8' size-in-bits='64' id='bd753fd6'/>
+      <pointer-type-def type-id='fe091efd' size-in-bits='64' id='5a798ea9'/>
+      <function-decl name='snd_jack_new' mangled-name='snd_jack_new' filepath='sound/core/jack.c' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_jack_new'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/jack.c' line='198' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='sound/core/jack.c' line='198' column='1'/>
+        <parameter type-id='95e97e5e' name='type' filepath='sound/core/jack.c' line='198' column='1'/>
+        <parameter type-id='bd753fd6' name='jjack' filepath='sound/core/jack.c' line='199' column='1'/>
+        <parameter type-id='b50a4934' name='initial_kctl' filepath='sound/core/jack.c' line='199' column='1'/>
+        <parameter type-id='b50a4934' name='phantom_jack' filepath='sound/core/jack.c' line='199' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_jack_set_key' mangled-name='snd_jack_set_key' filepath='sound/core/jack.c' line='317' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_jack_set_key'>
+        <parameter type-id='0f5a7eb8' name='jack' filepath='sound/core/jack.c' line='317' column='1'/>
+        <parameter type-id='7851d449' name='type' filepath='sound/core/jack.c' line='317' column='1'/>
+        <parameter type-id='95e97e5e' name='keytype' filepath='sound/core/jack.c' line='318' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_jack_report' mangled-name='snd_jack_report' filepath='sound/core/jack.c' line='340' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_jack_report'>
+        <parameter type-id='0f5a7eb8' name='jack' filepath='sound/core/jack.c' line='340' column='1'/>
+        <parameter type-id='95e97e5e' name='status' filepath='sound/core/jack.c' line='340' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='fe091efd'>
+        <parameter type-id='0f5a7eb8'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/core/misc.c' language='LANG_C89'>
+      <class-decl name='snd_pci_quirk' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/sound/core.h' line='387' column='1' id='8288ae2e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subvendor' type-id='8efea9e5' visibility='default' filepath='include/sound/core.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='subdevice' type-id='8efea9e5' visibility='default' filepath='include/sound/core.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='subdevice_mask' type-id='8efea9e5' visibility='default' filepath='include/sound/core.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='value' type-id='95e97e5e' visibility='default' filepath='include/sound/core.h' line='391' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='8288ae2e' const='yes' id='720a6415'/>
+      <pointer-type-def type-id='720a6415' size-in-bits='64' id='c55bcf2d'/>
+      <function-decl name='snd_pci_quirk_lookup' mangled-name='snd_pci_quirk_lookup' filepath='sound/core/misc.c' line='138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pci_quirk_lookup'>
+        <parameter type-id='85196e3f' name='pci' filepath='sound/core/misc.c' line='138' column='1'/>
+        <parameter type-id='c55bcf2d' name='list' filepath='sound/core/misc.c' line='138' column='1'/>
+        <return type-id='c55bcf2d'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/core/pcm.c' language='LANG_C89'>
+      <pointer-type-def type-id='4c9f335b' size-in-bits='64' id='0f9dfae3'/>
+      <function-decl name='snd_pcm_new' mangled-name='snd_pcm_new' filepath='sound/core/pcm.c' line='773' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_new'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/pcm.c' line='773' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='sound/core/pcm.c' line='773' column='1'/>
+        <parameter type-id='95e97e5e' name='device' filepath='sound/core/pcm.c' line='773' column='1'/>
+        <parameter type-id='95e97e5e' name='playback_count' filepath='sound/core/pcm.c' line='774' column='1'/>
+        <parameter type-id='95e97e5e' name='capture_count' filepath='sound/core/pcm.c' line='774' column='1'/>
+        <parameter type-id='0f9dfae3' name='rpcm' filepath='sound/core/pcm.c' line='774' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_lib_preallocate_free_for_all' mangled-name='snd_pcm_lib_preallocate_free_for_all' filepath='include/sound/pcm.h' line='1180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_lib_preallocate_free_for_all'>
+        <parameter type-id='4c9f335b'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_pcm_stop' mangled-name='snd_pcm_stop' filepath='include/sound/pcm.h' line='561' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_stop'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/core/pcm_dmaengine.c' language='LANG_C89'>
+      <qualified-type-def type-id='6c57d4a8' const='yes' id='4db19167'/>
+      <pointer-type-def type-id='4db19167' size-in-bits='64' id='9b87bc37'/>
+      <qualified-type-def type-id='362eec9e' const='yes' id='ee10f079'/>
+      <pointer-type-def type-id='ee10f079' size-in-bits='64' id='17aa52a9'/>
+      <function-decl name='snd_dmaengine_pcm_get_chan' mangled-name='snd_dmaengine_pcm_get_chan' filepath='sound/core/pcm_dmaengine.c' line='35' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_dmaengine_pcm_get_chan'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_dmaengine.c' line='35' column='1'/>
+        <return type-id='27f3f5d9'/>
+      </function-decl>
+      <function-decl name='snd_hwparams_to_dma_slave_config' mangled-name='snd_hwparams_to_dma_slave_config' filepath='sound/core/pcm_dmaengine.c' line='52' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_hwparams_to_dma_slave_config'>
+        <parameter type-id='17aa52a9' name='substream' filepath='sound/core/pcm_dmaengine.c' line='52' column='1'/>
+        <parameter type-id='9b87bc37' name='params' filepath='sound/core/pcm_dmaengine.c' line='53' column='1'/>
+        <parameter type-id='4f22192a' name='slave_config' filepath='sound/core/pcm_dmaengine.c' line='54' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_dmaengine_pcm_trigger' mangled-name='snd_dmaengine_pcm_trigger' filepath='sound/core/pcm_dmaengine.c' line='182' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_dmaengine_pcm_trigger'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_dmaengine.c' line='182' column='1'/>
+        <parameter type-id='95e97e5e' name='cmd' filepath='sound/core/pcm_dmaengine.c' line='182' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_dmaengine_pcm_pointer' mangled-name='snd_dmaengine_pcm_pointer' filepath='sound/core/pcm_dmaengine.c' line='240' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_dmaengine_pcm_pointer'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_dmaengine.c' line='240' column='1'/>
+        <return type-id='df412e35'/>
+      </function-decl>
+      <function-decl name='snd_dmaengine_pcm_open_request_chan' mangled-name='snd_dmaengine_pcm_open_request_chan' filepath='sound/core/pcm_dmaengine.c' line='331' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_dmaengine_pcm_open_request_chan'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_dmaengine.c' line='331' column='1'/>
+        <parameter type-id='55f53546' name='filter_fn' filepath='sound/core/pcm_dmaengine.c' line='332' column='1'/>
+        <parameter type-id='eaa32e2f' name='filter_data' filepath='sound/core/pcm_dmaengine.c' line='332' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_dmaengine_pcm_close_release_chan' mangled-name='snd_dmaengine_pcm_close_release_chan' filepath='sound/core/pcm_dmaengine.c' line='360' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_dmaengine_pcm_close_release_chan'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_dmaengine.c' line='360' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/core/pcm_drm_eld.c' language='LANG_C89'>
+      <class-decl name='snd_card' is-struct='yes' visibility='default' is-declaration-only='yes' id='5ef88150'/>
+      <pointer-type-def type-id='5ef88150' size-in-bits='64' id='52704eb8'/>
+      <function-decl name='snd_pcm_hw_constraint_eld' mangled-name='snd_pcm_hw_constraint_eld' filepath='sound/core/pcm_drm_eld.c' line='80' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_hw_constraint_eld'>
+        <parameter type-id='17a05af6' name='runtime' filepath='sound/core/pcm_drm_eld.c' line='80' column='1'/>
+        <parameter type-id='eaa32e2f' name='eld' filepath='sound/core/pcm_drm_eld.c' line='80' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/core/pcm_iec958.c' language='LANG_C89'>
+      <function-decl name='snd_pcm_create_iec958_consumer_hw_params' mangled-name='snd_pcm_create_iec958_consumer_hw_params' filepath='sound/core/pcm_iec958.c' line='117' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_create_iec958_consumer_hw_params'>
+        <parameter type-id='363a995e' name='params' filepath='sound/core/pcm_iec958.c' line='117' column='1'/>
+        <parameter type-id='8bff8096' name='cs' filepath='sound/core/pcm_iec958.c' line='118' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='sound/core/pcm_iec958.c' line='118' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/core/pcm_lib.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='3b0abfc6' size-in-bits='768' id='93f82aba'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='120' id='92ab2118'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <class-decl name='snd_pcm_chmap_elem' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='1362' column='1' id='09098b3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channels' type-id='002ac4a6' visibility='default' filepath='include/sound/pcm.h' line='1363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='map' type-id='92ab2118' visibility='default' filepath='include/sound/pcm.h' line='1364' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='snd_pcm_hw_param_t' type-id='95e97e5e' filepath='include/uapi/sound/asound.h' line='346' column='1' id='6b55ba25'/>
+      <class-decl name='snd_pcm_hw_constraint_list' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='278' column='1' id='f5f6e55e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='5b2fd8e8' visibility='default' filepath='include/sound/pcm.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='281' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_chmap' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='1368' column='1' id='e8a73faf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pcm' type-id='4c9f335b' visibility='default' filepath='include/sound/pcm.h' line='1369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stream' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='1370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kctl' type-id='7a5054b7' visibility='default' filepath='include/sound/pcm.h' line='1371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='chmap' type-id='ddec2084' visibility='default' filepath='include/sound/pcm.h' line='1372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='max_channels' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='1373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='channel_mask' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='1374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/pcm.h' line='1375' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='09098b3b' const='yes' id='3b0abfc6'/>
+      <pointer-type-def type-id='3b0abfc6' size-in-bits='64' id='ddec2084'/>
+      <qualified-type-def type-id='f5f6e55e' const='yes' id='fa3724eb'/>
+      <pointer-type-def type-id='fa3724eb' size-in-bits='64' id='a5cedbd3'/>
+      <pointer-type-def type-id='e8a73faf' size-in-bits='64' id='70ff05c7'/>
+      <pointer-type-def type-id='70ff05c7' size-in-bits='64' id='ce765417'/>
+      <var-decl name='snd_pcm_std_chmaps' type-id='93f82aba' mangled-name='snd_pcm_std_chmaps' visibility='default' filepath='sound/core/pcm_lib.c' line='2258' column='1' elf-symbol-id='snd_pcm_std_chmaps'/>
+      <var-decl name='snd_pcm_alt_chmaps' type-id='93f82aba' mangled-name='snd_pcm_alt_chmaps' visibility='default' filepath='sound/core/pcm_lib.c' line='2280' column='1' elf-symbol-id='snd_pcm_alt_chmaps'/>
+      <function-decl name='snd_pcm_set_sync' mangled-name='snd_pcm_set_sync' filepath='sound/core/pcm_lib.c' line='488' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_set_sync'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_lib.c' line='488' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_pcm_hw_constraint_list' mangled-name='snd_pcm_hw_constraint_list' filepath='sound/core/pcm_lib.c' line='1260' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_hw_constraint_list'>
+        <parameter type-id='17a05af6' name='runtime' filepath='sound/core/pcm_lib.c' line='1260' column='1'/>
+        <parameter type-id='f0981eeb' name='cond' filepath='sound/core/pcm_lib.c' line='1261' column='1'/>
+        <parameter type-id='6b55ba25' name='var' filepath='sound/core/pcm_lib.c' line='1262' column='1'/>
+        <parameter type-id='a5cedbd3' name='l' filepath='sound/core/pcm_lib.c' line='1263' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_hw_constraint_msbits' mangled-name='snd_pcm_hw_constraint_msbits' filepath='sound/core/pcm_lib.c' line='1404' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_hw_constraint_msbits'>
+        <parameter type-id='17a05af6' name='runtime' filepath='sound/core/pcm_lib.c' line='1404' column='1'/>
+        <parameter type-id='f0981eeb' name='cond' filepath='sound/core/pcm_lib.c' line='1405' column='1'/>
+        <parameter type-id='f0981eeb' name='width' filepath='sound/core/pcm_lib.c' line='1406' column='1'/>
+        <parameter type-id='f0981eeb' name='msbits' filepath='sound/core/pcm_lib.c' line='1407' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_hw_constraint_step' mangled-name='snd_pcm_hw_constraint_step' filepath='sound/core/pcm_lib.c' line='1433' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_hw_constraint_step'>
+        <parameter type-id='17a05af6' name='runtime' filepath='sound/core/pcm_lib.c' line='1433' column='1'/>
+        <parameter type-id='f0981eeb' name='cond' filepath='sound/core/pcm_lib.c' line='1434' column='1'/>
+        <parameter type-id='6b55ba25' name='var' filepath='sound/core/pcm_lib.c' line='1435' column='1'/>
+        <parameter type-id='7359adad' name='step' filepath='sound/core/pcm_lib.c' line='1436' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_lib_ioctl' mangled-name='snd_pcm_lib_ioctl' filepath='sound/core/pcm_lib.c' line='1755' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_lib_ioctl'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_lib.c' line='1755' column='1'/>
+        <parameter type-id='f0981eeb' name='cmd' filepath='sound/core/pcm_lib.c' line='1756' column='1'/>
+        <parameter type-id='eaa32e2f' name='arg' filepath='sound/core/pcm_lib.c' line='1756' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_add_chmap_ctls' mangled-name='snd_pcm_add_chmap_ctls' filepath='sound/core/pcm_lib.c' line='2418' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_add_chmap_ctls'>
+        <parameter type-id='4c9f335b' name='pcm' filepath='sound/core/pcm_lib.c' line='2418' column='1'/>
+        <parameter type-id='95e97e5e' name='stream' filepath='sound/core/pcm_lib.c' line='2418' column='1'/>
+        <parameter type-id='ddec2084' name='chmap' filepath='sound/core/pcm_lib.c' line='2419' column='1'/>
+        <parameter type-id='95e97e5e' name='max_channels' filepath='sound/core/pcm_lib.c' line='2420' column='1'/>
+        <parameter type-id='7359adad' name='private_value' filepath='sound/core/pcm_lib.c' line='2421' column='1'/>
+        <parameter type-id='ce765417' name='info_ret' filepath='sound/core/pcm_lib.c' line='2422' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/core/pcm_memory.c' language='LANG_C89'>
+      <function-decl name='snd_dma_free_pages' mangled-name='snd_dma_free_pages' filepath='include/sound/memalloc.h' line='137' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_dma_free_pages'>
+        <parameter type-id='a02b8cd2'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_pcm_lib_preallocate_pages' mangled-name='snd_pcm_lib_preallocate_pages' filepath='sound/core/pcm_memory.c' line='220' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_lib_preallocate_pages'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_memory.c' line='220' column='1'/>
+        <parameter type-id='95e97e5e' name='type' filepath='sound/core/pcm_memory.c' line='221' column='1'/>
+        <parameter type-id='fa0b179b' name='data' filepath='sound/core/pcm_memory.c' line='221' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='sound/core/pcm_memory.c' line='222' column='1'/>
+        <parameter type-id='b59d7dce' name='max' filepath='sound/core/pcm_memory.c' line='222' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_dma_alloc_pages' mangled-name='snd_dma_alloc_pages' filepath='include/sound/memalloc.h' line='133' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_dma_alloc_pages'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='a02b8cd2'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_lib_malloc_pages' mangled-name='snd_pcm_lib_malloc_pages' filepath='sound/core/pcm_memory.c' line='287' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_lib_malloc_pages'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_memory.c' line='287' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='sound/core/pcm_memory.c' line='287' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_lib_free_pages' mangled-name='snd_pcm_lib_free_pages' filepath='sound/core/pcm_memory.c' line='338' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_lib_free_pages'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_memory.c' line='338' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/core/pcm_misc.c' language='LANG_C89'>
+      <function-decl name='snd_pcm_format_width' mangled-name='snd_pcm_format_width' filepath='sound/core/pcm_misc.c' line='343' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_format_width'>
+        <parameter type-id='67fa9bd5' name='format' filepath='sound/core/pcm_misc.c' line='343' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_rate_to_rate_bit' mangled-name='snd_pcm_rate_to_rate_bit' filepath='sound/core/pcm_misc.c' line='510' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_rate_to_rate_bit'>
+        <parameter type-id='f0981eeb' name='rate' filepath='sound/core/pcm_misc.c' line='510' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='snd_pcm_rate_bit_to_rate' mangled-name='snd_pcm_rate_bit_to_rate' filepath='sound/core/pcm_misc.c' line='528' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_rate_bit_to_rate'>
+        <parameter type-id='f0981eeb' name='rate_bit' filepath='sound/core/pcm_misc.c' line='528' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='snd_pcm_rate_range_to_bits' mangled-name='snd_pcm_rate_range_to_bits' filepath='sound/core/pcm_misc.c' line='589' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_rate_range_to_bits'>
+        <parameter type-id='f0981eeb' name='rate_min' filepath='sound/core/pcm_misc.c' line='589' column='1'/>
+        <parameter type-id='f0981eeb' name='rate_max' filepath='sound/core/pcm_misc.c' line='590' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/core/pcm_native.c' language='LANG_C89'>
+      <qualified-type-def type-id='d6b43ca8' const='yes' id='81795b61'/>
+      <pointer-type-def type-id='81795b61' size-in-bits='64' id='1d0ab711'/>
+      <pointer-type-def type-id='d6b43ca8' size-in-bits='64' id='732e15ce'/>
+      <function-decl name='snd_interval_refine' mangled-name='snd_interval_refine' filepath='include/sound/pcm.h' line='959' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_interval_refine'>
+        <parameter type-id='732e15ce'/>
+        <parameter type-id='1d0ab711'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_hw_rule_add' mangled-name='snd_pcm_hw_rule_add' filepath='include/sound/pcm.h' line='1007' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_hw_rule_add'>
+        <parameter type-id='17a05af6'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='657a5cf1'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_format_physical_width' mangled-name='snd_pcm_format_physical_width' filepath='include/sound/pcm.h' line='1050' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_format_physical_width'>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_hw_constraint_mask64' mangled-name='snd_pcm_hw_constraint_mask64' filepath='include/sound/pcm.h' line='973' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_hw_constraint_mask64'>
+        <parameter type-id='17a05af6'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='3a47d82b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_hw_constraint_minmax' mangled-name='snd_pcm_hw_constraint_minmax' filepath='include/sound/pcm.h' line='975' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_hw_constraint_minmax'>
+        <parameter type-id='17a05af6'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_hw_constraint_integer' mangled-name='snd_pcm_hw_constraint_integer' filepath='include/sound/pcm.h' line='977' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_hw_constraint_integer'>
+        <parameter type-id='17a05af6'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_lib_default_mmap' mangled-name='snd_pcm_lib_default_mmap' filepath='sound/core/pcm_native.c' line='3419' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_lib_default_mmap'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_native.c' line='3419' column='1'/>
+        <parameter type-id='2ae08426' name='area' filepath='sound/core/pcm_native.c' line='3420' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/core/sound.c' language='LANG_C89'>
+      <class-decl name='snd_info_entry' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/sound/info.h' line='60' column='1' id='48ad5fc7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/info.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='include/sound/info.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='bd54fe1a' visibility='default' filepath='include/sound/info.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='content' type-id='8efea9e5' visibility='default' filepath='include/sound/info.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='c' type-id='74c3182a' visibility='default' filepath='include/sound/info.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='parent' type-id='b9608bfd' visibility='default' filepath='include/sound/info.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/sound/info.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/info.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='private_free' type-id='93226281' visibility='default' filepath='include/sound/info.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='p' type-id='d077e928' visibility='default' filepath='include/sound/info.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='access' type-id='925167dc' visibility='default' filepath='include/sound/info.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='include/sound/info.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/info.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/sound/info.h' line='65' column='1' id='74c3182a'>
+        <data-member access='private'>
+          <var-decl name='text' type-id='cf87b76c' visibility='default' filepath='include/sound/info.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='ops' type-id='d9cfece5' visibility='default' filepath='include/sound/info.h' line='67' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='snd_info_entry_text' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/sound/info.h' line='29' column='1' id='cf87b76c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read' type-id='f695e0b6' visibility='default' filepath='include/sound/info.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write' type-id='f695e0b6' visibility='default' filepath='include/sound/info.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_info_buffer' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/info.h' line='15' column='1' id='982f66c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buffer' type-id='26a90f95' visibility='default' filepath='include/sound/info.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='curr' type-id='f0981eeb' visibility='default' filepath='include/sound/info.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/sound/info.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/sound/info.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='stop' type-id='95e97e5e' visibility='default' filepath='include/sound/info.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/sound/info.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_info_entry_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/sound/info.h' line='36' column='1' id='f9b9a795'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='1aa763a8' visibility='default' filepath='include/sound/info.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release' type-id='113423d8' visibility='default' filepath='include/sound/info.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read' type-id='b9922d07' visibility='default' filepath='include/sound/info.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write' type-id='6047a55c' visibility='default' filepath='include/sound/info.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='llseek' type-id='882bc4d4' visibility='default' filepath='include/sound/info.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='poll' type-id='305a7ffa' visibility='default' filepath='include/sound/info.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ioctl' type-id='3d52c694' visibility='default' filepath='include/sound/info.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mmap' type-id='e118a96a' visibility='default' filepath='include/sound/info.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a249930e' size-in-bits='64' id='113423d8'/>
+      <pointer-type-def type-id='38cfc416' size-in-bits='64' id='1aa763a8'/>
+      <pointer-type-def type-id='3ba7892a' size-in-bits='64' id='3d52c694'/>
+      <pointer-type-def type-id='fc14a418' size-in-bits='64' id='e118a96a'/>
+      <pointer-type-def type-id='982f66c8' size-in-bits='64' id='00aa6a0e'/>
+      <pointer-type-def type-id='48ad5fc7' size-in-bits='64' id='b9608bfd'/>
+      <pointer-type-def type-id='f9b9a795' size-in-bits='64' id='d9cfece5'/>
+      <pointer-type-def type-id='643f05a0' size-in-bits='64' id='305a7ffa'/>
+      <pointer-type-def type-id='19b22092' size-in-bits='64' id='882bc4d4'/>
+      <pointer-type-def type-id='5a067f4b' size-in-bits='64' id='b9922d07'/>
+      <pointer-type-def type-id='ee9d520a' size-in-bits='64' id='6047a55c'/>
+      <pointer-type-def type-id='8754454d' size-in-bits='64' id='93226281'/>
+      <pointer-type-def type-id='28026fe4' size-in-bits='64' id='f695e0b6'/>
+      <function-decl name='snd_info_register' mangled-name='snd_info_register' filepath='include/sound/info.h' line='129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_info_register'>
+        <parameter type-id='b9608bfd'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='a249930e'>
+        <parameter type-id='b9608bfd'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='38cfc416'>
+        <parameter type-id='b9608bfd'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='63e171df'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3ba7892a'>
+        <parameter type-id='b9608bfd'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fc14a418'>
+        <parameter type-id='b9608bfd'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='643f05a0'>
+        <parameter type-id='b9608bfd'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='a54c778f'/>
+        <return type-id='8f254b08'/>
+      </function-type>
+      <function-type size-in-bits='64' id='19b22092'>
+        <parameter type-id='b9608bfd'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='69bf7bee'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5a067f4b'>
+        <parameter type-id='b9608bfd'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='69bf7bee'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ee9d520a'>
+        <parameter type-id='b9608bfd'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='69bf7bee'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8754454d'>
+        <parameter type-id='b9608bfd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='28026fe4'>
+        <parameter type-id='b9608bfd'/>
+        <parameter type-id='00aa6a0e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/core/vmaster.c' language='LANG_C89'>
+      <pointer-type-def type-id='cc7d2869' size-in-bits='64' id='be4e3fad'/>
+      <function-decl name='_snd_ctl_add_slave' mangled-name='_snd_ctl_add_slave' filepath='sound/core/vmaster.c' line='252' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_snd_ctl_add_slave'>
+        <parameter type-id='7a5054b7' name='master' filepath='sound/core/vmaster.c' line='252' column='1'/>
+        <parameter type-id='7a5054b7' name='slave' filepath='sound/core/vmaster.c' line='252' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='sound/core/vmaster.c' line='253' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_ctl_make_virtual_master' mangled-name='snd_ctl_make_virtual_master' filepath='sound/core/vmaster.c' line='391' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_make_virtual_master'>
+        <parameter type-id='26a90f95' name='name' filepath='sound/core/vmaster.c' line='391' column='1'/>
+        <parameter type-id='5b2fd8e8' name='tlv' filepath='sound/core/vmaster.c' line='392' column='1'/>
+        <return type-id='7a5054b7'/>
+      </function-decl>
+      <function-decl name='snd_ctl_add_vmaster_hook' mangled-name='snd_ctl_add_vmaster_hook' filepath='sound/core/vmaster.c' line='446' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_add_vmaster_hook'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/core/vmaster.c' line='446' column='1'/>
+        <parameter type-id='1ed1e4cd' name='hook' filepath='sound/core/vmaster.c' line='447' column='1'/>
+        <parameter type-id='eaa32e2f' name='private_data' filepath='sound/core/vmaster.c' line='448' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_ctl_sync_vmaster' mangled-name='snd_ctl_sync_vmaster' filepath='sound/core/vmaster.c' line='466' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_sync_vmaster'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/core/vmaster.c' line='466' column='1'/>
+        <parameter type-id='b50a4934' name='hook_only' filepath='sound/core/vmaster.c' line='466' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_ctl_apply_vmaster_slaves' mangled-name='snd_ctl_apply_vmaster_slaves' filepath='sound/core/vmaster.c' line='498' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_apply_vmaster_slaves'>
+        <parameter type-id='7a5054b7' name='kctl' filepath='sound/core/vmaster.c' line='498' column='1'/>
+        <parameter type-id='be4e3fad' name='func' filepath='sound/core/vmaster.c' line='499' column='1'/>
+        <parameter type-id='eaa32e2f' name='arg' filepath='sound/core/vmaster.c' line='502' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='cc7d2869'>
+        <parameter type-id='7a5054b7'/>
+        <parameter type-id='7a5054b7'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/soc/soc-component.c' language='LANG_C89'>
+      <class-decl name='snd_jack' is-struct='yes' visibility='default' is-declaration-only='yes' id='c4d4ddeb'/>
+      <function-decl name='snd_soc_component_disable_pin' mangled-name='snd_soc_component_disable_pin' filepath='sound/soc/soc-component.c' line='124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_disable_pin'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-component.c' line='124' column='1'/>
+        <parameter type-id='80f4b756' name='pin' filepath='sound/soc/soc-component.c' line='125' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_force_enable_pin' mangled-name='snd_soc_component_force_enable_pin' filepath='sound/soc/soc-component.c' line='234' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_force_enable_pin'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-component.c' line='234' column='1'/>
+        <parameter type-id='80f4b756' name='pin' filepath='sound/soc/soc-component.c' line='235' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='9ba86a44' size-in-bits='64' id='807b7702'/>
+      <class-decl name='snd_soc_component' size-in-bits='2368' is-struct='yes' visibility='default' filepath='include/sound/soc-component.h' line='108' column='1' id='9ba86a44'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name_prefix' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc-component.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='card' type-id='3059cd0b' visibility='default' filepath='include/sound/soc-component.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='suspended' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='card_aux_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='card_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='driver' type-id='f030c2b8' visibility='default' filepath='include/sound/soc-component.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dai_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='num_dai' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='regmap' type-id='29af9a72' visibility='default' filepath='include/sound/soc-component.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='val_bytes' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='io_mutex' type-id='925167dc' visibility='default' filepath='include/sound/soc-component.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='dobj_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='dapm' type-id='95201ae5' visibility='default' filepath='include/sound/soc-component.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='init' type-id='48cf6abe' visibility='default' filepath='include/sound/soc-component.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='debugfs_root' type-id='27675065' visibility='default' filepath='include/sound/soc-component.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='debugfs_prefix' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='215ec542' size-in-bits='64' id='f030c2b8'/>
+      <pointer-type-def type-id='9917f524' size-in-bits='64' id='48cf6abe'/>
+      <pointer-type-def type-id='29ad938b' size-in-bits='64' id='3059cd0b'/>
+      <class-decl name='snd_soc_dapm_context' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='665' column='1' id='95201ae5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bias_level' type-id='f078c744' visibility='default' filepath='include/sound/soc-dapm.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='idle_bias_off' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='suspend_bias_off' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc-dapm.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='component' type-id='807b7702' visibility='default' filepath='include/sound/soc-dapm.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='card' type-id='3059cd0b' visibility='default' filepath='include/sound/soc-dapm.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='target_bias_level' type-id='f078c744' visibility='default' filepath='include/sound/soc-dapm.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='path_sink_cache' type-id='27dc472b' visibility='default' filepath='include/sound/soc-dapm.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='path_source_cache' type-id='27dc472b' visibility='default' filepath='include/sound/soc-dapm.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='debugfs_dapm' type-id='27675065' visibility='default' filepath='include/sound/soc-dapm.h' line='683' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='9f6de273' const='yes' id='215ec542'/>
+      <enum-decl name='snd_soc_bias_level' filepath='include/sound/soc.h' line='388' column='1' id='f078c744'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_BIAS_OFF' value='0'/>
+        <enumerator name='SND_SOC_BIAS_STANDBY' value='1'/>
+        <enumerator name='SND_SOC_BIAS_PREPARE' value='2'/>
+        <enumerator name='SND_SOC_BIAS_ON' value='3'/>
+      </enum-decl>
+      <class-decl name='snd_soc_card' size-in-bits='6720' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='998' column='1' id='29ad938b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='long_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='1000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='1001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dmi_longname' type-id='aa5ff375' visibility='default' filepath='include/sound/soc.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='topology_shortname' type-id='16dc656a' visibility='default' filepath='include/sound/soc.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='snd_card' type-id='52704eb7' visibility='default' filepath='include/sound/soc.h' line='1006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/sound/soc.h' line='1007' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/sound/soc.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='dapm_mutex' type-id='925167dc' visibility='default' filepath='include/sound/soc.h' line='1010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='pcm_mutex' type-id='925167dc' visibility='default' filepath='include/sound/soc.h' line='1013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='pcm_subclass' type-id='8a661f2b' visibility='default' filepath='include/sound/soc.h' line='1014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='dpcm_lock' type-id='fb4018a0' visibility='default' filepath='include/sound/soc.h' line='1016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='instantiated' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='1018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2120'>
+          <var-decl name='topology_shortname_created' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='1019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='probe' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='late_probe' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1022' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='remove' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='suspend_pre' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1027' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='suspend_post' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='resume_pre' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='resume_post' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='set_bias_level' type-id='4a944438' visibility='default' filepath='include/sound/soc.h' line='1033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='set_bias_level_post' type-id='4a944438' visibility='default' filepath='include/sound/soc.h' line='1036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='add_dai_link' type-id='1391f54a' visibility='default' filepath='include/sound/soc.h' line='1040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='remove_dai_link' type-id='e3fceddb' visibility='default' filepath='include/sound/soc.h' line='1042' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='pmdown_time' type-id='bd54fe1a' visibility='default' filepath='include/sound/soc.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='dai_link' type-id='af5a73b0' visibility='default' filepath='include/sound/soc.h' line='1048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='num_links' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='dai_link_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='rtd_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='num_rtd' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='codec_conf' type-id='f10279fe' visibility='default' filepath='include/sound/soc.h' line='1056' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='num_configs' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1057' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='aux_dev' type-id='8ace4add' visibility='default' filepath='include/sound/soc.h' line='1063' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='num_aux_devs' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1064' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='aux_comp_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='controls' type-id='31e035f7' visibility='default' filepath='include/sound/soc.h' line='1067' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='num_controls' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1068' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='dapm_widgets' type-id='dae78f89' visibility='default' filepath='include/sound/soc.h' line='1074' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='num_dapm_widgets' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1075' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='dapm_routes' type-id='8f3d28b8' visibility='default' filepath='include/sound/soc.h' line='1076' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='num_dapm_routes' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1077' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='of_dapm_widgets' type-id='dae78f89' visibility='default' filepath='include/sound/soc.h' line='1078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='num_of_dapm_widgets' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='of_dapm_routes' type-id='8f3d28b8' visibility='default' filepath='include/sound/soc.h' line='1080' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='num_of_dapm_routes' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1081' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4384'>
+          <var-decl name='fully_routed' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='1082' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4392'>
+          <var-decl name='disable_route_checks' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='1083' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='component_dev_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1086' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1087' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='widgets' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1089' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='paths' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1090' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='dapm_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1091' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='dapm_dirty' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='dobj_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1095' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='dapm' type-id='95201ae5' visibility='default' filepath='include/sound/soc.h' line='1098' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='dapm_stats' type-id='fef29e19' visibility='default' filepath='include/sound/soc.h' line='1099' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='update' type-id='33146de3' visibility='default' filepath='include/sound/soc.h' line='1100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='debugfs_card_root' type-id='27675065' visibility='default' filepath='include/sound/soc.h' line='1103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='deferred_resume_work' type-id='ef9025d0' visibility='default' filepath='include/sound/soc.h' line='1106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='pop_time' type-id='19c2251e' visibility='default' filepath='include/sound/soc.h' line='1108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='drvdata' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc.h' line='1110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_wcache' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='660' column='1' id='27dc472b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='widget' type-id='810606ec' visibility='default' filepath='include/sound/soc-dapm.h' line='661' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e0f88742' size-in-bits='64' id='8f3d28b8'/>
+      <pointer-type-def type-id='e0d04bd9' size-in-bits='64' id='dae78f89'/>
+      <enum-decl name='snd_soc_pcm_subclass' filepath='include/sound/soc.h' line='418' column='1' id='8a661f2b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_PCM_CLASS_PCM' value='0'/>
+        <enumerator name='SND_SOC_PCM_CLASS_BE' value='1'/>
+      </enum-decl>
+      <pointer-type-def type-id='f82a46c1' size-in-bits='64' id='edcb70dd'/>
+      <pointer-type-def type-id='18620c48' size-in-bits='64' id='1391f54a'/>
+      <pointer-type-def type-id='fcf647be' size-in-bits='64' id='4a944438'/>
+      <pointer-type-def type-id='5183f61d' size-in-bits='64' id='8ace4add'/>
+      <pointer-type-def type-id='7082c248' size-in-bits='64' id='f10279fe'/>
+      <pointer-type-def type-id='5c18a8e2' size-in-bits='64' id='af5a73b0'/>
+      <pointer-type-def type-id='b6a3f4d3' size-in-bits='64' id='33146de3'/>
+      <pointer-type-def type-id='f780d556' size-in-bits='64' id='810606ec'/>
+      <class-decl name='snd_soc_component_driver' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/sound/soc-component.h' line='32' column='1' id='9f6de273'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='controls' type-id='31e035f7' visibility='default' filepath='include/sound/soc-component.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_controls' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dapm_widgets' type-id='dae78f89' visibility='default' filepath='include/sound/soc-component.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_dapm_widgets' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dapm_routes' type-id='8f3d28b8' visibility='default' filepath='include/sound/soc-component.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='num_dapm_routes' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='probe' type-id='48cf6abe' visibility='default' filepath='include/sound/soc-component.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='remove' type-id='f88ed793' visibility='default' filepath='include/sound/soc-component.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='suspend' type-id='48cf6abe' visibility='default' filepath='include/sound/soc-component.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='resume' type-id='48cf6abe' visibility='default' filepath='include/sound/soc-component.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='read' type-id='7bb6ff35' visibility='default' filepath='include/sound/soc-component.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='write' type-id='726f2cf6' visibility='default' filepath='include/sound/soc-component.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pcm_new' type-id='1ad47772' visibility='default' filepath='include/sound/soc-component.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pcm_free' type-id='182096ce' visibility='default' filepath='include/sound/soc-component.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_sysclk' type-id='ff554aed' visibility='default' filepath='include/sound/soc-component.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='set_pll' type-id='bd4604a4' visibility='default' filepath='include/sound/soc-component.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='set_jack' type-id='997f6223' visibility='default' filepath='include/sound/soc-component.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='of_xlate_dai_name' type-id='93cd7c85' visibility='default' filepath='include/sound/soc-component.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='of_xlate_dai_id' type-id='71f7eca5' visibility='default' filepath='include/sound/soc-component.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='seq_notifier' type-id='f596d48e' visibility='default' filepath='include/sound/soc-component.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='stream_event' type-id='4d6d9805' visibility='default' filepath='include/sound/soc-component.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='set_bias_level' type-id='ab3c35df' visibility='default' filepath='include/sound/soc-component.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ops' type-id='f63b1a17' visibility='default' filepath='include/sound/soc-component.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='compr_ops' type-id='9b98229a' visibility='default' filepath='include/sound/soc-component.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='probe_order' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='remove_order' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='module_get_upon_open' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='idle_bias_on' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='suspend_bias_off' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='use_pmdown_time' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='endianness' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='non_legacy_dai_naming' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='ignore_machine' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='topology_name_prefix' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='be_hw_params_fixup' type-id='59a76ce1' visibility='default' filepath='include/sound/soc-component.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='use_dai_pcm_id' type-id='b50a4934' visibility='default' filepath='include/sound/soc-component.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='be_pcm_base' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_stats' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='693' column='1' id='fef29e19'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power_checks' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='path_checks' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='neighbour_checks' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='696' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='883b3327' size-in-bits='64' id='e3fceddb'/>
+      <pointer-type-def type-id='9625db14' size-in-bits='64' id='9b98229a'/>
+      <qualified-type-def type-id='4a91f65b' const='yes' id='e0f88742'/>
+      <qualified-type-def type-id='f780d556' const='yes' id='e0d04bd9'/>
+      <pointer-type-def type-id='0ed9f201' size-in-bits='64' id='71f7eca5'/>
+      <pointer-type-def type-id='ebf04e7b' size-in-bits='64' id='ab3c35df'/>
+      <pointer-type-def type-id='483ecac1' size-in-bits='64' id='4d6d9805'/>
+      <pointer-type-def type-id='a9bd2db1' size-in-bits='64' id='ff554aed'/>
+      <pointer-type-def type-id='9c43712a' size-in-bits='64' id='bd4604a4'/>
+      <pointer-type-def type-id='a4f8cee1' size-in-bits='64' id='93cd7c85'/>
+      <pointer-type-def type-id='8ca90cbf' size-in-bits='64' id='997f6223'/>
+      <pointer-type-def type-id='dca78e2c' size-in-bits='64' id='726f2cf6'/>
+      <pointer-type-def type-id='10865770' size-in-bits='64' id='1ad47772'/>
+      <pointer-type-def type-id='d8484ecd' size-in-bits='64' id='59a76ce1'/>
+      <class-decl name='snd_soc_aux_dev' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='986' column='1' id='5183f61d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dlc' type-id='ed5b2002' visibility='default' filepath='include/sound/soc.h' line='991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='init' type-id='48cf6abe' visibility='default' filepath='include/sound/soc.h' line='994' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_codec_conf' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='971' column='1' id='7082c248'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/sound/soc.h' line='977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name_prefix' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='983' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dai_link' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='768' column='1' id='5c18a8e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stream_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpus' type-id='4120e250' visibility='default' filepath='include/sound/soc.h' line='785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_cpus' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='codecs' type-id='4120e250' visibility='default' filepath='include/sound/soc.h' line='793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_codecs' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='platforms' type-id='4120e250' visibility='default' filepath='include/sound/soc.h' line='801' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_platforms' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='params' type-id='b0772ded' visibility='default' filepath='include/sound/soc.h' line='806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='num_params' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='dai_fmt' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='809' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='trigger' type-id='16449c76' visibility='default' filepath='include/sound/soc.h' line='811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='init' type-id='1ad47772' visibility='default' filepath='include/sound/soc.h' line='814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='be_hw_params_fixup' type-id='59a76ce1' visibility='default' filepath='include/sound/soc.h' line='817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ops' type-id='d33d33c6' visibility='default' filepath='include/sound/soc.h' line='821' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compr_ops' type-id='33ec9b0e' visibility='default' filepath='include/sound/soc.h' line='822' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nonatomic' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='825' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='playback_only' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='828' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='capture_only' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='ignore_suspend' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='832' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='symmetric_rates' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='835' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='symmetric_channels' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='836' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='symmetric_samplebits' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='837' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='no_pcm' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='dynamic' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='no_host_mode' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='dpcm_capture' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='dpcm_playback' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='dpcm_merged_format' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='dpcm_merged_chan' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='dpcm_merged_rate' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='ignore_pmdown_time' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='ignore' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='868' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='dobj' type-id='01edcafc' visibility='default' filepath='include/sound/soc.h' line='869' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_update' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='649' column='1' id='b6a3f4d3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kcontrol' type-id='7a5054b7' visibility='default' filepath='include/sound/soc-dapm.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mask' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='val' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reg2' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mask2' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='val2' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='has_second_set' type-id='b50a4934' visibility='default' filepath='include/sound/soc-dapm.h' line='657' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_widget' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='594' column='1' id='f780d556'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='68bb1ec5' visibility='default' filepath='include/sound/soc-dapm.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sname' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dapm' type-id='70d004a5' visibility='default' filepath='include/sound/soc-dapm.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc-dapm.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='regulator' type-id='850c13f6' visibility='default' filepath='include/sound/soc-dapm.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pinctrl' type-id='73ea90c5' visibility='default' filepath='include/sound/soc-dapm.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reg' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='shift' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='on_val' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='off_val' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='power' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='active' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='connected' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='new' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='force' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='ignore_suspend' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='new_power' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='power_checked' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='is_supply' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='is_ep' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='subseq' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='power_check' type-id='3fccea10' visibility='default' filepath='include/sound/soc-dapm.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='event_flags' type-id='8efea9e5' visibility='default' filepath='include/sound/soc-dapm.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='event' type-id='af92413d' visibility='default' filepath='include/sound/soc-dapm.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='num_kcontrols' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='kcontrol_news' type-id='31e035f7' visibility='default' filepath='include/sound/soc-dapm.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='kcontrols' type-id='29753327' visibility='default' filepath='include/sound/soc-dapm.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='dobj' type-id='01edcafc' visibility='default' filepath='include/sound/soc-dapm.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='edges' type-id='e4f16420' visibility='default' filepath='include/sound/soc-dapm.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='work_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='power_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='dirty' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='endpoints' type-id='e4266c7e' visibility='default' filepath='include/sound/soc-dapm.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='include/sound/soc-dapm.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='channel' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='646' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='0971a711' size-in-bits='64' id='7bb6ff35'/>
+      <pointer-type-def type-id='b43302df' size-in-bits='64' id='f88ed793'/>
+      <pointer-type-def type-id='139c5a2c' size-in-bits='64' id='f596d48e'/>
+      <qualified-type-def type-id='33d73f3b' const='yes' id='9625db14'/>
+      <pointer-type-def type-id='abf99950' size-in-bits='64' id='33ec9b0e'/>
+      <pointer-type-def type-id='b276f0c8' size-in-bits='64' id='d33d33c6'/>
+      <pointer-type-def type-id='8dc7c255' size-in-bits='64' id='b0772ded'/>
+      <enum-decl name='snd_soc_dapm_type' filepath='include/sound/soc-dapm.h' line='495' column='1' id='68bb1ec5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='snd_soc_dapm_input' value='0'/>
+        <enumerator name='snd_soc_dapm_output' value='1'/>
+        <enumerator name='snd_soc_dapm_mux' value='2'/>
+        <enumerator name='snd_soc_dapm_demux' value='3'/>
+        <enumerator name='snd_soc_dapm_mixer' value='4'/>
+        <enumerator name='snd_soc_dapm_mixer_named_ctl' value='5'/>
+        <enumerator name='snd_soc_dapm_pga' value='6'/>
+        <enumerator name='snd_soc_dapm_out_drv' value='7'/>
+        <enumerator name='snd_soc_dapm_adc' value='8'/>
+        <enumerator name='snd_soc_dapm_dac' value='9'/>
+        <enumerator name='snd_soc_dapm_micbias' value='10'/>
+        <enumerator name='snd_soc_dapm_mic' value='11'/>
+        <enumerator name='snd_soc_dapm_hp' value='12'/>
+        <enumerator name='snd_soc_dapm_spk' value='13'/>
+        <enumerator name='snd_soc_dapm_line' value='14'/>
+        <enumerator name='snd_soc_dapm_switch' value='15'/>
+        <enumerator name='snd_soc_dapm_vmid' value='16'/>
+        <enumerator name='snd_soc_dapm_pre' value='17'/>
+        <enumerator name='snd_soc_dapm_post' value='18'/>
+        <enumerator name='snd_soc_dapm_supply' value='19'/>
+        <enumerator name='snd_soc_dapm_pinctrl' value='20'/>
+        <enumerator name='snd_soc_dapm_regulator_supply' value='21'/>
+        <enumerator name='snd_soc_dapm_clock_supply' value='22'/>
+        <enumerator name='snd_soc_dapm_aif_in' value='23'/>
+        <enumerator name='snd_soc_dapm_aif_out' value='24'/>
+        <enumerator name='snd_soc_dapm_siggen' value='25'/>
+        <enumerator name='snd_soc_dapm_sink' value='26'/>
+        <enumerator name='snd_soc_dapm_dai_in' value='27'/>
+        <enumerator name='snd_soc_dapm_dai_out' value='28'/>
+        <enumerator name='snd_soc_dapm_dai_link' value='29'/>
+        <enumerator name='snd_soc_dapm_kcontrol' value='30'/>
+        <enumerator name='snd_soc_dapm_buffer' value='31'/>
+        <enumerator name='snd_soc_dapm_scheduler' value='32'/>
+        <enumerator name='snd_soc_dapm_effect' value='33'/>
+        <enumerator name='snd_soc_dapm_src' value='34'/>
+        <enumerator name='snd_soc_dapm_asrc' value='35'/>
+        <enumerator name='snd_soc_dapm_encoder' value='36'/>
+        <enumerator name='snd_soc_dapm_decoder' value='37'/>
+        <enumerator name='SND_SOC_DAPM_TYPE_COUNT' value='38'/>
+      </enum-decl>
+      <pointer-type-def type-id='6634c3c6' size-in-bits='64' id='3fccea10'/>
+      <pointer-type-def type-id='34c8e7e1' size-in-bits='64' id='af92413d'/>
+      <pointer-type-def type-id='7a5054b7' size-in-bits='64' id='29753327'/>
+      <pointer-type-def type-id='ed5b2002' size-in-bits='64' id='4120e250'/>
+      <pointer-type-def type-id='95201ae5' size-in-bits='64' id='70d004a5'/>
+      <array-type-def dimensions='1' type-id='b615ca5b' size-in-bits='64' alignment-in-bits='32' id='16449c76'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='snd_soc_dai_link_component' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='762' column='1' id='ed5b2002'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/sound/soc.h' line='764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dai_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='765' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_route' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='550' column='1' id='4a91f65b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sink' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='control' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='source' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='connected' type-id='4b433675' visibility='default' filepath='include/sound/soc-dapm.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dobj' type-id='01edcafc' visibility='default' filepath='include/sound/soc-dapm.h' line='559' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dobj' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='64' column='1' id='01edcafc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='5210afb2' visibility='default' filepath='include/sound/soc-topology.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-topology.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-topology.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='76e6e22f' visibility='default' filepath='include/sound/soc-topology.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='d80bfbd6' visibility='default' filepath='include/sound/soc-topology.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc-topology.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='9c97c2f7' const='yes' id='abf99950'/>
+      <qualified-type-def type-id='40fc482f' const='yes' id='b276f0c8'/>
+      <qualified-type-def type-id='e85be380' const='yes' id='8dc7c255'/>
+      <enum-decl name='snd_soc_dobj_type' filepath='include/sound/soc-topology.h' line='38' column='1' id='5210afb2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_DOBJ_NONE' value='0'/>
+        <enumerator name='SND_SOC_DOBJ_MIXER' value='1'/>
+        <enumerator name='SND_SOC_DOBJ_BYTES' value='2'/>
+        <enumerator name='SND_SOC_DOBJ_ENUM' value='3'/>
+        <enumerator name='SND_SOC_DOBJ_GRAPH' value='4'/>
+        <enumerator name='SND_SOC_DOBJ_WIDGET' value='5'/>
+        <enumerator name='SND_SOC_DOBJ_DAI_LINK' value='6'/>
+        <enumerator name='SND_SOC_DOBJ_PCM' value='7'/>
+        <enumerator name='SND_SOC_DOBJ_CODEC_LINK' value='8'/>
+        <enumerator name='SND_SOC_DOBJ_BACKEND_LINK' value='9'/>
+      </enum-decl>
+      <enum-decl name='snd_soc_dpcm_trigger' filepath='include/sound/soc-dpcm.h' line='58' column='1' id='b615ca5b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_DPCM_TRIGGER_PRE' value='0'/>
+        <enumerator name='SND_SOC_DPCM_TRIGGER_POST' value='1'/>
+        <enumerator name='SND_SOC_DPCM_TRIGGER_BESPOKE' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='e5cda869' size-in-bits='64' id='4b433675'/>
+      <pointer-type-def type-id='c2ddf2d7' size-in-bits='64' id='76e6e22f'/>
+      <union-decl name='__anonymous_union__3' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/sound/soc-topology.h' line='69' column='1' id='d80bfbd6'>
+        <data-member access='private'>
+          <var-decl name='control' type-id='8a84fb32' visibility='default' filepath='include/sound/soc-topology.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='widget' type-id='ca569b91' visibility='default' filepath='include/sound/soc-topology.h' line='71' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='snd_soc_compr_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='743' column='1' id='9c97c2f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='startup' type-id='be315f37' visibility='default' filepath='include/sound/soc.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='shutdown' type-id='4b0aea04' visibility='default' filepath='include/sound/soc.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_params' type-id='be315f37' visibility='default' filepath='include/sound/soc.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='trigger' type-id='be315f37' visibility='default' filepath='include/sound/soc.h' line='747' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dobj_control' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='52' column='1' id='8a84fb32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kcontrol' type-id='7a5054b7' visibility='default' filepath='include/sound/soc-topology.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dtexts' type-id='9b23c9ad' visibility='default' filepath='include/sound/soc-topology.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dvalues' type-id='1d2c2b85' visibility='default' filepath='include/sound/soc-topology.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dobj_widget' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='59' column='1' id='ca569b91'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kcontrol_type' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-topology.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='734' column='1' id='40fc482f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='startup' type-id='ab756384' visibility='default' filepath='include/sound/soc.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='shutdown' type-id='897d1b6d' visibility='default' filepath='include/sound/soc.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hw_params' type-id='2b3f1c33' visibility='default' filepath='include/sound/soc.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hw_free' type-id='ab756384' visibility='default' filepath='include/sound/soc.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='prepare' type-id='ab756384' visibility='default' filepath='include/sound/soc.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='trigger' type-id='898a0783' visibility='default' filepath='include/sound/soc.h' line='740' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_pcm_stream' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='721' column='1' id='e85be380'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stream_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='formats' type-id='91ce1af9' visibility='default' filepath='include/sound/soc.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rates' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rate_min' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rate_max' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='channels_min' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='channels_max' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='sig_bits' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='aif_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='730' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_ops' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='111' column='1' id='c2ddf2d7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='control_load' type-id='6b4579c4' visibility='default' filepath='include/sound/soc-topology.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='control_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dapm_route_load' type-id='7ad49bc5' visibility='default' filepath='include/sound/soc-topology.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dapm_route_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='widget_load' type-id='b4fb1c55' visibility='default' filepath='include/sound/soc-topology.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='widget_ready' type-id='b4fb1c55' visibility='default' filepath='include/sound/soc-topology.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='widget_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dai_load' type-id='47fc8c26' visibility='default' filepath='include/sound/soc-topology.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dai_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='link_load' type-id='5b44b629' visibility='default' filepath='include/sound/soc-topology.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='link_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vendor_load' type-id='1f42ef53' visibility='default' filepath='include/sound/soc-topology.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='vendor_unload' type-id='ff06646a' visibility='default' filepath='include/sound/soc-topology.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='complete' type-id='f88ed793' visibility='default' filepath='include/sound/soc-topology.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='manifest' type-id='502bd26a' visibility='default' filepath='include/sound/soc-topology.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='io_ops' type-id='745ce067' visibility='default' filepath='include/sound/soc-topology.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='io_ops_count' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-topology.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='bytes_ext_ops' type-id='a62d5bd8' visibility='default' filepath='include/sound/soc-topology.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='bytes_ext_ops_count' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-topology.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='597bfbe2' size-in-bits='64' id='a62d5bd8'/>
+      <pointer-type-def type-id='319b3a77' size-in-bits='64' id='745ce067'/>
+      <pointer-type-def type-id='8a322362' size-in-bits='64' id='6b4579c4'/>
+      <pointer-type-def type-id='b9d8dce4' size-in-bits='64' id='47fc8c26'/>
+      <pointer-type-def type-id='3098b525' size-in-bits='64' id='5b44b629'/>
+      <pointer-type-def type-id='956881f1' size-in-bits='64' id='7ad49bc5'/>
+      <pointer-type-def type-id='02f1c4a9' size-in-bits='64' id='b4fb1c55'/>
+      <pointer-type-def type-id='98408d8f' size-in-bits='64' id='1f42ef53'/>
+      <pointer-type-def type-id='c21a2b60' size-in-bits='64' id='502bd26a'/>
+      <pointer-type-def type-id='c37d868d' size-in-bits='64' id='6332a661'/>
+      <pointer-type-def type-id='df961c58' size-in-bits='64' id='ff06646a'/>
+      <pointer-type-def type-id='da3c754a' size-in-bits='64' id='4b0aea04'/>
+      <qualified-type-def type-id='3e689ce7' const='yes' id='597bfbe2'/>
+      <qualified-type-def type-id='ad974450' const='yes' id='319b3a77'/>
+      <class-decl name='snd_soc_tplg_bytes_ext_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='90' column='1' id='3e689ce7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/sound/soc-topology.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get' type-id='f0dd4a3b' visibility='default' filepath='include/sound/soc-topology.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='put' type-id='f517dc88' visibility='default' filepath='include/sound/soc-topology.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_kcontrol_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='79' column='1' id='ad974450'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/sound/soc-topology.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get' type-id='8336f92e' visibility='default' filepath='include/sound/soc-topology.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='put' type-id='8336f92e' visibility='default' filepath='include/sound/soc-topology.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='info' type-id='a54793a9' visibility='default' filepath='include/sound/soc-topology.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='643400ce' size-in-bits='64' id='f517dc88'/>
+      <pointer-type-def type-id='fa75c86d' size-in-bits='64' id='a54793a9'/>
+      <pointer-type-def type-id='84147814' size-in-bits='64' id='8336f92e'/>
+      <pointer-type-def type-id='eb5d5777' size-in-bits='64' id='f0dd4a3b'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/soc/soc-compress.c' language='LANG_C89'>
+      <function-decl name='snd_soc_new_compress' mangled-name='snd_soc_new_compress' filepath='sound/soc/soc-compress.c' line='856' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_new_compress'>
+        <parameter type-id='95316552' name='rtd' filepath='sound/soc/soc-compress.c' line='856' column='1'/>
+        <parameter type-id='95e97e5e' name='num' filepath='sound/soc/soc-compress.c' line='856' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='00e3a6d4' size-in-bits='64' id='95316552'/>
+      <class-decl name='snd_soc_pcm_runtime' size-in-bits='13952' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='1141' column='1' id='00e3a6d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc.h' line='1142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='card' type-id='3059cd0b' visibility='default' filepath='include/sound/soc.h' line='1143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dai_link' type-id='af5a73b0' visibility='default' filepath='include/sound/soc.h' line='1144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='73803d48' visibility='default' filepath='include/sound/soc.h' line='1145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='params_select' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='dpcm' type-id='39f07796' visibility='default' filepath='include/sound/soc.h' line='1150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='pmdown_time' type-id='bd54fe1a' visibility='default' filepath='include/sound/soc.h' line='1152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='pcm' type-id='4c9f335b' visibility='default' filepath='include/sound/soc.h' line='1155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='compr' type-id='dc1e097e' visibility='default' filepath='include/sound/soc.h' line='1156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='codec_dai' type-id='1c936db9' visibility='default' filepath='include/sound/soc.h' line='1157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='cpu_dai' type-id='1c936db9' visibility='default' filepath='include/sound/soc.h' line='1158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='codec_dais' type-id='8f157e69' visibility='default' filepath='include/sound/soc.h' line='1160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='num_codecs' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12416'>
+          <var-decl name='delayed_work' type-id='5ad6e0ef' visibility='default' filepath='include/sound/soc.h' line='1163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='debugfs_dpcm_root' type-id='27675065' visibility='default' filepath='include/sound/soc.h' line='1165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13568'>
+          <var-decl name='num' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13632'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13760'>
+          <var-decl name='component_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='dev_registered' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='pop_wait' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='fe_compr' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1175' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2d7051f1' size-in-bits='64' id='1c936db9'/>
+      <pointer-type-def type-id='1c936db9' size-in-bits='64' id='8f157e69'/>
+      <array-type-def dimensions='1' type-id='c1c63dde' size-in-bits='10752' id='39f07796'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='snd_soc_dai' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/sound/soc-dai.h' line='319' column='1' id='2d7051f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dai.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dai.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc-dai.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver' type-id='763d26a2' visibility='default' filepath='include/sound/soc-dai.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='capture_active' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='playback_active' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='probed' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='playback_widget' type-id='810606ec' visibility='default' filepath='include/sound/soc-dai.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='capture_widget' type-id='810606ec' visibility='default' filepath='include/sound/soc-dai.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='playback_dma_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc-dai.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='capture_dma_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc-dai.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rate' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='channels' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sample_bits' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='component' type-id='807b7702' visibility='default' filepath='include/sound/soc-dai.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='tx_mask' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='rx_mask' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dai.h' line='353' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dpcm_runtime' size-in-bits='5376' is-struct='yes' visibility='default' filepath='include/sound/soc-dpcm.h' line='91' column='1' id='c1c63dde'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='be_clients' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dpcm.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fe_clients' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dpcm.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='users' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dpcm.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='runtime' type-id='17a05af6' visibility='default' filepath='include/sound/soc-dpcm.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='hw_params' type-id='6c57d4a8' visibility='default' filepath='include/sound/soc-dpcm.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='runtime_update' type-id='3708cdec' visibility='default' filepath='include/sound/soc-dpcm.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5280'>
+          <var-decl name='state' type-id='792c8cde' visibility='default' filepath='include/sound/soc-dpcm.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='trigger_pending' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dpcm.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_soc_dpcm_state' filepath='include/sound/soc-dpcm.h' line='38' column='1' id='792c8cde'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_DPCM_STATE_NEW' value='0'/>
+        <enumerator name='SND_SOC_DPCM_STATE_OPEN' value='1'/>
+        <enumerator name='SND_SOC_DPCM_STATE_HW_PARAMS' value='2'/>
+        <enumerator name='SND_SOC_DPCM_STATE_PREPARE' value='3'/>
+        <enumerator name='SND_SOC_DPCM_STATE_START' value='4'/>
+        <enumerator name='SND_SOC_DPCM_STATE_STOP' value='5'/>
+        <enumerator name='SND_SOC_DPCM_STATE_PAUSED' value='6'/>
+        <enumerator name='SND_SOC_DPCM_STATE_SUSPEND' value='7'/>
+        <enumerator name='SND_SOC_DPCM_STATE_HW_FREE' value='8'/>
+        <enumerator name='SND_SOC_DPCM_STATE_CLOSE' value='9'/>
+      </enum-decl>
+      <enum-decl name='snd_soc_dpcm_update' filepath='include/sound/soc-dpcm.h' line='21' column='1' id='3708cdec'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_DPCM_UPDATE_NO' value='0'/>
+        <enumerator name='SND_SOC_DPCM_UPDATE_BE' value='1'/>
+        <enumerator name='SND_SOC_DPCM_UPDATE_FE' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='a1599794' size-in-bits='64' id='763d26a2'/>
+      <class-decl name='snd_soc_dai_driver' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/sound/soc-dai.h' line='279' column='1' id='a1599794'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dai.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='base' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dobj' type-id='01edcafc' visibility='default' filepath='include/sound/soc-dai.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='probe' type-id='a2515c25' visibility='default' filepath='include/sound/soc-dai.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='remove' type-id='a2515c25' visibility='default' filepath='include/sound/soc-dai.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='suspend' type-id='a2515c25' visibility='default' filepath='include/sound/soc-dai.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='resume' type-id='a2515c25' visibility='default' filepath='include/sound/soc-dai.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compress_new' type-id='da6639f9' visibility='default' filepath='include/sound/soc-dai.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='pcm_new' type-id='6c0c7302' visibility='default' filepath='include/sound/soc-dai.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ops' type-id='777e33bd' visibility='default' filepath='include/sound/soc-dai.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cops' type-id='c9d35a9c' visibility='default' filepath='include/sound/soc-dai.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='capture' type-id='e85be380' visibility='default' filepath='include/sound/soc-dai.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='playback' type-id='e85be380' visibility='default' filepath='include/sound/soc-dai.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='symmetric_rates' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='symmetric_channels' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='symmetric_samplebits' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='bus_control' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='probe_order' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dai.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='remove_order' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dai.h' line='311' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='da194c5e' size-in-bits='64' id='c9d35a9c'/>
+      <pointer-type-def type-id='87538745' size-in-bits='64' id='777e33bd'/>
+      <pointer-type-def type-id='8892a831' size-in-bits='64' id='a2515c25'/>
+      <pointer-type-def type-id='52c5253d' size-in-bits='64' id='da6639f9'/>
+      <pointer-type-def type-id='ea48a448' size-in-bits='64' id='6c0c7302'/>
+      <qualified-type-def type-id='d6a931df' const='yes' id='da194c5e'/>
+      <qualified-type-def type-id='b1fadf8a' const='yes' id='87538745'/>
+      <class-decl name='snd_soc_cdai_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/sound/soc-dai.h' line='245' column='1' id='d6a931df'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='startup' type-id='ff70ae33' visibility='default' filepath='include/sound/soc-dai.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='shutdown' type-id='ff70ae33' visibility='default' filepath='include/sound/soc-dai.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_params' type-id='64548faf' visibility='default' filepath='include/sound/soc-dai.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_params' type-id='1b64445b' visibility='default' filepath='include/sound/soc-dai.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_metadata' type-id='b8430c5e' visibility='default' filepath='include/sound/soc-dai.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_metadata' type-id='b8430c5e' visibility='default' filepath='include/sound/soc-dai.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='trigger' type-id='5b6d9de6' visibility='default' filepath='include/sound/soc-dai.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pointer' type-id='6ca57870' visibility='default' filepath='include/sound/soc-dai.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ack' type-id='6620a240' visibility='default' filepath='include/sound/soc-dai.h' line='265' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dai_ops' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/sound/soc-dai.h' line='173' column='1' id='b1fadf8a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='set_sysclk' type-id='fd437b0d' visibility='default' filepath='include/sound/soc-dai.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_pll' type-id='6cd85f13' visibility='default' filepath='include/sound/soc-dai.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_clkdiv' type-id='b346094b' visibility='default' filepath='include/sound/soc-dai.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_bclk_ratio' type-id='40bc7c47' visibility='default' filepath='include/sound/soc-dai.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_fmt' type-id='40bc7c47' visibility='default' filepath='include/sound/soc-dai.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xlate_tdm_slot_mask' type-id='4f8fb1b3' visibility='default' filepath='include/sound/soc-dai.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_tdm_slot' type-id='af3f6c83' visibility='default' filepath='include/sound/soc-dai.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_channel_map' type-id='f98f7769' visibility='default' filepath='include/sound/soc-dai.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_channel_map' type-id='37bbabb5' visibility='default' filepath='include/sound/soc-dai.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_tristate' type-id='432e0bcc' visibility='default' filepath='include/sound/soc-dai.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_sdw_stream' type-id='1dd33160' visibility='default' filepath='include/sound/soc-dai.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='digital_mute' type-id='432e0bcc' visibility='default' filepath='include/sound/soc-dai.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mute_stream' type-id='b346094b' visibility='default' filepath='include/sound/soc-dai.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='startup' type-id='ebda04fc' visibility='default' filepath='include/sound/soc-dai.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='shutdown' type-id='c7f8de51' visibility='default' filepath='include/sound/soc-dai.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hw_params' type-id='2e127687' visibility='default' filepath='include/sound/soc-dai.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='hw_free' type-id='ebda04fc' visibility='default' filepath='include/sound/soc-dai.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='prepare' type-id='ebda04fc' visibility='default' filepath='include/sound/soc-dai.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='trigger' type-id='939046d7' visibility='default' filepath='include/sound/soc-dai.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='bespoke_trigger' type-id='939046d7' visibility='default' filepath='include/sound/soc-dai.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='delay' type-id='2610fb79' visibility='default' filepath='include/sound/soc-dai.h' line='241' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d26d2ca4' size-in-bits='64' id='5b6d9de6'/>
+      <pointer-type-def type-id='7e019027' size-in-bits='64' id='1b64445b'/>
+      <pointer-type-def type-id='6f527014' size-in-bits='64' id='b8430c5e'/>
+      <pointer-type-def type-id='dcda8403' size-in-bits='64' id='64548faf'/>
+      <pointer-type-def type-id='aaad2fce' size-in-bits='64' id='6ca57870'/>
+      <pointer-type-def type-id='f5362227' size-in-bits='64' id='ff70ae33'/>
+      <pointer-type-def type-id='201ffa8e' size-in-bits='64' id='6620a240'/>
+      <pointer-type-def type-id='d9bbe8ab' size-in-bits='64' id='939046d7'/>
+      <pointer-type-def type-id='1f765c33' size-in-bits='64' id='2e127687'/>
+      <pointer-type-def type-id='1f79c412' size-in-bits='64' id='ebda04fc'/>
+      <pointer-type-def type-id='15bee3b2' size-in-bits='64' id='432e0bcc'/>
+      <pointer-type-def type-id='33f6a667' size-in-bits='64' id='b346094b'/>
+      <pointer-type-def type-id='a9c862bf' size-in-bits='64' id='6cd85f13'/>
+      <pointer-type-def type-id='1cd99dc1' size-in-bits='64' id='fd437b0d'/>
+      <pointer-type-def type-id='868d8193' size-in-bits='64' id='40bc7c47'/>
+      <pointer-type-def type-id='294a6b21' size-in-bits='64' id='37bbabb5'/>
+      <pointer-type-def type-id='34f7ad3d' size-in-bits='64' id='f98f7769'/>
+      <pointer-type-def type-id='1126278f' size-in-bits='64' id='af3f6c83'/>
+      <pointer-type-def type-id='ff87f3a6' size-in-bits='64' id='1dd33160'/>
+      <pointer-type-def type-id='d87e539f' size-in-bits='64' id='4f8fb1b3'/>
+      <pointer-type-def type-id='4c8ce8c5' size-in-bits='64' id='2610fb79'/>
+      <pointer-type-def type-id='9eea6bb5' size-in-bits='64' id='c7f8de51'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/soc/soc-core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='2f162548' size-in-bits='640' id='77d1242b'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='2f162548' size-in-bits='256' id='e389acd5'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='352' id='36cef6bd'>
+        <subrange length='44' type-id='7ff19f0f' id='cf8ba455'/>
+      </array-type-def>
+      <class-decl name='input_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='2e443c2c'/>
+      <array-type-def dimensions='1' type-id='c1c63dde' size-in-bits='10752' id='39f07796'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b615ca5b' size-in-bits='64' alignment-in-bits='32' id='16449c76'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='826dc1a3' size-in-bits='7680' id='63c0e8df'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a305d6c9' size-in-bits='4608' id='0036534d'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='d49652d3' size-in-bits='1664' id='57144ac1'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8a4504f5' size-in-bits='infinite' id='591a7f7d'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='08cf731d' size-in-bits='infinite' id='e9564905'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='79a1b937' size-in-bits='infinite' id='ebaaecd3'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='26236645' size-in-bits='infinite' id='3ecd3c6d'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='snd_soc_card' size-in-bits='6720' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='998' column='1' id='29ad938b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='long_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='1000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='1001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dmi_longname' type-id='aa5ff375' visibility='default' filepath='include/sound/soc.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='topology_shortname' type-id='16dc656a' visibility='default' filepath='include/sound/soc.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='snd_card' type-id='52704eb7' visibility='default' filepath='include/sound/soc.h' line='1006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/sound/soc.h' line='1007' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/sound/soc.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='dapm_mutex' type-id='925167dc' visibility='default' filepath='include/sound/soc.h' line='1010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='pcm_mutex' type-id='925167dc' visibility='default' filepath='include/sound/soc.h' line='1013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='pcm_subclass' type-id='8a661f2b' visibility='default' filepath='include/sound/soc.h' line='1014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='dpcm_lock' type-id='fb4018a0' visibility='default' filepath='include/sound/soc.h' line='1016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='instantiated' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='1018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2120'>
+          <var-decl name='topology_shortname_created' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='1019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='probe' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='late_probe' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1022' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='remove' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='suspend_pre' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1027' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='suspend_post' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='resume_pre' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='resume_post' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='set_bias_level' type-id='4a944438' visibility='default' filepath='include/sound/soc.h' line='1033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='set_bias_level_post' type-id='4a944438' visibility='default' filepath='include/sound/soc.h' line='1036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='add_dai_link' type-id='1391f54a' visibility='default' filepath='include/sound/soc.h' line='1040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='remove_dai_link' type-id='e3fceddb' visibility='default' filepath='include/sound/soc.h' line='1042' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='pmdown_time' type-id='bd54fe1a' visibility='default' filepath='include/sound/soc.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='dai_link' type-id='af5a73b0' visibility='default' filepath='include/sound/soc.h' line='1048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='num_links' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='dai_link_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='rtd_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='num_rtd' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='codec_conf' type-id='f10279fe' visibility='default' filepath='include/sound/soc.h' line='1056' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='num_configs' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1057' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='aux_dev' type-id='8ace4add' visibility='default' filepath='include/sound/soc.h' line='1063' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='num_aux_devs' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1064' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='aux_comp_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='controls' type-id='31e035f7' visibility='default' filepath='include/sound/soc.h' line='1067' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='num_controls' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1068' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='dapm_widgets' type-id='dae78f89' visibility='default' filepath='include/sound/soc.h' line='1074' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='num_dapm_widgets' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1075' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='dapm_routes' type-id='8f3d28b8' visibility='default' filepath='include/sound/soc.h' line='1076' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='num_dapm_routes' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1077' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='of_dapm_widgets' type-id='dae78f89' visibility='default' filepath='include/sound/soc.h' line='1078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='num_of_dapm_widgets' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='of_dapm_routes' type-id='8f3d28b8' visibility='default' filepath='include/sound/soc.h' line='1080' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='num_of_dapm_routes' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1081' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4384'>
+          <var-decl name='fully_routed' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='1082' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4392'>
+          <var-decl name='disable_route_checks' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='1083' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='component_dev_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1086' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1087' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='widgets' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1089' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='paths' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1090' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='dapm_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1091' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='dapm_dirty' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='dobj_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1095' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='dapm' type-id='95201ae5' visibility='default' filepath='include/sound/soc.h' line='1098' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='dapm_stats' type-id='fef29e19' visibility='default' filepath='include/sound/soc.h' line='1099' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='update' type-id='33146de3' visibility='default' filepath='include/sound/soc.h' line='1100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='debugfs_card_root' type-id='27675065' visibility='default' filepath='include/sound/soc.h' line='1103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='deferred_resume_work' type-id='ef9025d0' visibility='default' filepath='include/sound/soc.h' line='1106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='pop_time' type-id='19c2251e' visibility='default' filepath='include/sound/soc.h' line='1108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='drvdata' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc.h' line='1110' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_soc_pcm_subclass' filepath='include/sound/soc.h' line='418' column='1' id='8a661f2b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_PCM_CLASS_PCM' value='0'/>
+        <enumerator name='SND_SOC_PCM_CLASS_BE' value='1'/>
+      </enum-decl>
+      <class-decl name='snd_soc_dapm_context' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='665' column='1' id='95201ae5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bias_level' type-id='f078c744' visibility='default' filepath='include/sound/soc-dapm.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='idle_bias_off' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='suspend_bias_off' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc-dapm.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='component' type-id='807b7702' visibility='default' filepath='include/sound/soc-dapm.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='card' type-id='3059cd0b' visibility='default' filepath='include/sound/soc-dapm.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='target_bias_level' type-id='f078c744' visibility='default' filepath='include/sound/soc-dapm.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='path_sink_cache' type-id='27dc472b' visibility='default' filepath='include/sound/soc-dapm.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='path_source_cache' type-id='27dc472b' visibility='default' filepath='include/sound/soc-dapm.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='debugfs_dapm' type-id='27675065' visibility='default' filepath='include/sound/soc-dapm.h' line='683' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_soc_bias_level' filepath='include/sound/soc.h' line='388' column='1' id='f078c744'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_BIAS_OFF' value='0'/>
+        <enumerator name='SND_SOC_BIAS_STANDBY' value='1'/>
+        <enumerator name='SND_SOC_BIAS_PREPARE' value='2'/>
+        <enumerator name='SND_SOC_BIAS_ON' value='3'/>
+      </enum-decl>
+      <class-decl name='snd_soc_component' size-in-bits='2368' is-struct='yes' visibility='default' filepath='include/sound/soc-component.h' line='108' column='1' id='9ba86a44'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name_prefix' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc-component.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='card' type-id='3059cd0b' visibility='default' filepath='include/sound/soc-component.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='suspended' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='card_aux_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='card_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='driver' type-id='f030c2b8' visibility='default' filepath='include/sound/soc-component.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dai_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='num_dai' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='regmap' type-id='29af9a72' visibility='default' filepath='include/sound/soc-component.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='val_bytes' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='io_mutex' type-id='925167dc' visibility='default' filepath='include/sound/soc-component.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='dobj_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='dapm' type-id='95201ae5' visibility='default' filepath='include/sound/soc-component.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='init' type-id='48cf6abe' visibility='default' filepath='include/sound/soc-component.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='debugfs_root' type-id='27675065' visibility='default' filepath='include/sound/soc-component.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='debugfs_prefix' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_component_driver' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/sound/soc-component.h' line='32' column='1' id='9f6de273'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='controls' type-id='31e035f7' visibility='default' filepath='include/sound/soc-component.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_controls' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dapm_widgets' type-id='dae78f89' visibility='default' filepath='include/sound/soc-component.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_dapm_widgets' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dapm_routes' type-id='8f3d28b8' visibility='default' filepath='include/sound/soc-component.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='num_dapm_routes' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='probe' type-id='48cf6abe' visibility='default' filepath='include/sound/soc-component.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='remove' type-id='f88ed793' visibility='default' filepath='include/sound/soc-component.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='suspend' type-id='48cf6abe' visibility='default' filepath='include/sound/soc-component.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='resume' type-id='48cf6abe' visibility='default' filepath='include/sound/soc-component.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='read' type-id='7bb6ff35' visibility='default' filepath='include/sound/soc-component.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='write' type-id='726f2cf6' visibility='default' filepath='include/sound/soc-component.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pcm_new' type-id='1ad47772' visibility='default' filepath='include/sound/soc-component.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pcm_free' type-id='182096ce' visibility='default' filepath='include/sound/soc-component.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_sysclk' type-id='ff554aed' visibility='default' filepath='include/sound/soc-component.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='set_pll' type-id='bd4604a4' visibility='default' filepath='include/sound/soc-component.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='set_jack' type-id='997f6223' visibility='default' filepath='include/sound/soc-component.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='of_xlate_dai_name' type-id='93cd7c85' visibility='default' filepath='include/sound/soc-component.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='of_xlate_dai_id' type-id='71f7eca5' visibility='default' filepath='include/sound/soc-component.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='seq_notifier' type-id='f596d48e' visibility='default' filepath='include/sound/soc-component.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='stream_event' type-id='4d6d9805' visibility='default' filepath='include/sound/soc-component.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='set_bias_level' type-id='ab3c35df' visibility='default' filepath='include/sound/soc-component.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ops' type-id='f63b1a17' visibility='default' filepath='include/sound/soc-component.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='compr_ops' type-id='9b98229a' visibility='default' filepath='include/sound/soc-component.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='probe_order' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='remove_order' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='module_get_upon_open' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='idle_bias_on' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='suspend_bias_off' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='use_pmdown_time' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='endianness' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='non_legacy_dai_naming' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='ignore_machine' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='topology_name_prefix' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='be_hw_params_fixup' type-id='59a76ce1' visibility='default' filepath='include/sound/soc-component.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='use_dai_pcm_id' type-id='b50a4934' visibility='default' filepath='include/sound/soc-component.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='be_pcm_base' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_widget' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='594' column='1' id='f780d556'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='68bb1ec5' visibility='default' filepath='include/sound/soc-dapm.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sname' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dapm' type-id='70d004a5' visibility='default' filepath='include/sound/soc-dapm.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc-dapm.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='regulator' type-id='850c13f6' visibility='default' filepath='include/sound/soc-dapm.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pinctrl' type-id='73ea90c5' visibility='default' filepath='include/sound/soc-dapm.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reg' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='shift' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='on_val' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='off_val' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='power' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='active' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='connected' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='new' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='force' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='ignore_suspend' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='new_power' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='power_checked' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='is_supply' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='is_ep' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='subseq' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='power_check' type-id='3fccea10' visibility='default' filepath='include/sound/soc-dapm.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='event_flags' type-id='8efea9e5' visibility='default' filepath='include/sound/soc-dapm.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='event' type-id='af92413d' visibility='default' filepath='include/sound/soc-dapm.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='num_kcontrols' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='kcontrol_news' type-id='31e035f7' visibility='default' filepath='include/sound/soc-dapm.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='kcontrols' type-id='29753327' visibility='default' filepath='include/sound/soc-dapm.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='dobj' type-id='01edcafc' visibility='default' filepath='include/sound/soc-dapm.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='edges' type-id='e4f16420' visibility='default' filepath='include/sound/soc-dapm.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='work_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='power_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='dirty' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='endpoints' type-id='e4266c7e' visibility='default' filepath='include/sound/soc-dapm.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='include/sound/soc-dapm.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='channel' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='646' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_soc_dapm_type' filepath='include/sound/soc-dapm.h' line='495' column='1' id='68bb1ec5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='snd_soc_dapm_input' value='0'/>
+        <enumerator name='snd_soc_dapm_output' value='1'/>
+        <enumerator name='snd_soc_dapm_mux' value='2'/>
+        <enumerator name='snd_soc_dapm_demux' value='3'/>
+        <enumerator name='snd_soc_dapm_mixer' value='4'/>
+        <enumerator name='snd_soc_dapm_mixer_named_ctl' value='5'/>
+        <enumerator name='snd_soc_dapm_pga' value='6'/>
+        <enumerator name='snd_soc_dapm_out_drv' value='7'/>
+        <enumerator name='snd_soc_dapm_adc' value='8'/>
+        <enumerator name='snd_soc_dapm_dac' value='9'/>
+        <enumerator name='snd_soc_dapm_micbias' value='10'/>
+        <enumerator name='snd_soc_dapm_mic' value='11'/>
+        <enumerator name='snd_soc_dapm_hp' value='12'/>
+        <enumerator name='snd_soc_dapm_spk' value='13'/>
+        <enumerator name='snd_soc_dapm_line' value='14'/>
+        <enumerator name='snd_soc_dapm_switch' value='15'/>
+        <enumerator name='snd_soc_dapm_vmid' value='16'/>
+        <enumerator name='snd_soc_dapm_pre' value='17'/>
+        <enumerator name='snd_soc_dapm_post' value='18'/>
+        <enumerator name='snd_soc_dapm_supply' value='19'/>
+        <enumerator name='snd_soc_dapm_pinctrl' value='20'/>
+        <enumerator name='snd_soc_dapm_regulator_supply' value='21'/>
+        <enumerator name='snd_soc_dapm_clock_supply' value='22'/>
+        <enumerator name='snd_soc_dapm_aif_in' value='23'/>
+        <enumerator name='snd_soc_dapm_aif_out' value='24'/>
+        <enumerator name='snd_soc_dapm_siggen' value='25'/>
+        <enumerator name='snd_soc_dapm_sink' value='26'/>
+        <enumerator name='snd_soc_dapm_dai_in' value='27'/>
+        <enumerator name='snd_soc_dapm_dai_out' value='28'/>
+        <enumerator name='snd_soc_dapm_dai_link' value='29'/>
+        <enumerator name='snd_soc_dapm_kcontrol' value='30'/>
+        <enumerator name='snd_soc_dapm_buffer' value='31'/>
+        <enumerator name='snd_soc_dapm_scheduler' value='32'/>
+        <enumerator name='snd_soc_dapm_effect' value='33'/>
+        <enumerator name='snd_soc_dapm_src' value='34'/>
+        <enumerator name='snd_soc_dapm_asrc' value='35'/>
+        <enumerator name='snd_soc_dapm_encoder' value='36'/>
+        <enumerator name='snd_soc_dapm_decoder' value='37'/>
+        <enumerator name='SND_SOC_DAPM_TYPE_COUNT' value='38'/>
+      </enum-decl>
+      <class-decl name='snd_soc_dobj' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='64' column='1' id='01edcafc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='5210afb2' visibility='default' filepath='include/sound/soc-topology.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-topology.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-topology.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='76e6e22f' visibility='default' filepath='include/sound/soc-topology.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='d80bfbd6' visibility='default' filepath='include/sound/soc-topology.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc-topology.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_soc_dobj_type' filepath='include/sound/soc-topology.h' line='38' column='1' id='5210afb2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_DOBJ_NONE' value='0'/>
+        <enumerator name='SND_SOC_DOBJ_MIXER' value='1'/>
+        <enumerator name='SND_SOC_DOBJ_BYTES' value='2'/>
+        <enumerator name='SND_SOC_DOBJ_ENUM' value='3'/>
+        <enumerator name='SND_SOC_DOBJ_GRAPH' value='4'/>
+        <enumerator name='SND_SOC_DOBJ_WIDGET' value='5'/>
+        <enumerator name='SND_SOC_DOBJ_DAI_LINK' value='6'/>
+        <enumerator name='SND_SOC_DOBJ_PCM' value='7'/>
+        <enumerator name='SND_SOC_DOBJ_CODEC_LINK' value='8'/>
+        <enumerator name='SND_SOC_DOBJ_BACKEND_LINK' value='9'/>
+      </enum-decl>
+      <class-decl name='snd_soc_tplg_ops' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='111' column='1' id='c2ddf2d7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='control_load' type-id='6b4579c4' visibility='default' filepath='include/sound/soc-topology.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='control_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dapm_route_load' type-id='7ad49bc5' visibility='default' filepath='include/sound/soc-topology.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dapm_route_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='widget_load' type-id='b4fb1c55' visibility='default' filepath='include/sound/soc-topology.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='widget_ready' type-id='b4fb1c55' visibility='default' filepath='include/sound/soc-topology.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='widget_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dai_load' type-id='47fc8c26' visibility='default' filepath='include/sound/soc-topology.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dai_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='link_load' type-id='5b44b629' visibility='default' filepath='include/sound/soc-topology.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='link_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vendor_load' type-id='1f42ef53' visibility='default' filepath='include/sound/soc-topology.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='vendor_unload' type-id='ff06646a' visibility='default' filepath='include/sound/soc-topology.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='complete' type-id='f88ed793' visibility='default' filepath='include/sound/soc-topology.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='manifest' type-id='502bd26a' visibility='default' filepath='include/sound/soc-topology.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='io_ops' type-id='745ce067' visibility='default' filepath='include/sound/soc-topology.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='io_ops_count' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-topology.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='bytes_ext_ops' type-id='a62d5bd8' visibility='default' filepath='include/sound/soc-topology.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='bytes_ext_ops_count' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-topology.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_ctl_hdr' size-in-bits='1632' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='284' column='1' id='d3581737'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='access' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='e189081e' visibility='default' filepath='include/uapi/sound/asoc.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='tlv' type-id='4d52b2c7' visibility='default' filepath='include/uapi/sound/asoc.h' line='290' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_io_ops' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='275' column='1' id='e189081e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='put' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='info' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='278' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_ctl_tlv' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='251' column='1' id='4d52b2c7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='9329c56a' visibility='default' filepath='include/uapi/sound/asoc.h' line='254' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='1024' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='254' column='1' id='9329c56a'>
+        <data-member access='private'>
+          <var-decl name='data' type-id='28645bde' visibility='default' filepath='include/uapi/sound/asoc.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='scale' type-id='e82b6f56' visibility='default' filepath='include/uapi/sound/asoc.h' line='256' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='snd_soc_tplg_tlv_dbscale' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='245' column='1' id='e82b6f56'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='step' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mute' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='248' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_route' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='550' column='1' id='4a91f65b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sink' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='control' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='source' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='connected' type-id='4b433675' visibility='default' filepath='include/sound/soc-dapm.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dobj' type-id='01edcafc' visibility='default' filepath='include/sound/soc-dapm.h' line='559' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_dapm_widget' size-in-bits='1056' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='478' column='1' id='b1e3bc3e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sname' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='reg' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='shift' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='mask' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='subseq' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='invert' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='ignore_suspend' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='event_flags' type-id='23119536' visibility='default' filepath='include/uapi/sound/asoc.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='event_type' type-id='23119536' visibility='default' filepath='include/uapi/sound/asoc.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='num_kcontrols' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='priv' type-id='372c32b8' visibility='default' filepath='include/uapi/sound/asoc.h' line='493' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_private' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='234' column='1' id='372c32b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='' type-id='0aa36f77' visibility='default' filepath='include/uapi/sound/asoc.h' line='236' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='236' column='1' id='0aa36f77'>
+        <data-member access='private'>
+          <var-decl name='data' type-id='e84913bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='array' type-id='591a7f7d' visibility='default' filepath='include/uapi/sound/asoc.h' line='238' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='snd_soc_tplg_vendor_array' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='218' column='1' id='8a4504f5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_elems' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='' type-id='4a9a99f8' visibility='default' filepath='include/uapi/sound/asoc.h' line='222' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='222' column='1' id='4a9a99f8'>
+        <data-member access='private'>
+          <var-decl name='uuid' type-id='ebaaecd3' visibility='default' filepath='include/uapi/sound/asoc.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='value' type-id='3ecd3c6d' visibility='default' filepath='include/uapi/sound/asoc.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='string' type-id='e9564905' visibility='default' filepath='include/uapi/sound/asoc.h' line='225' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='snd_soc_tplg_vendor_uuid_elem' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='201' column='1' id='79a1b937'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='token' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='uuid' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/sound/asoc.h' line='203' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_vendor_value_elem' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='207' column='1' id='26236645'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='token' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='value' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_vendor_string_elem' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='213' column='1' id='08cf731d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='token' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='string' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='215' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dai_driver' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/sound/soc-dai.h' line='279' column='1' id='a1599794'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dai.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='base' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dobj' type-id='01edcafc' visibility='default' filepath='include/sound/soc-dai.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='probe' type-id='a2515c25' visibility='default' filepath='include/sound/soc-dai.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='remove' type-id='a2515c25' visibility='default' filepath='include/sound/soc-dai.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='suspend' type-id='a2515c25' visibility='default' filepath='include/sound/soc-dai.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='resume' type-id='a2515c25' visibility='default' filepath='include/sound/soc-dai.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compress_new' type-id='da6639f9' visibility='default' filepath='include/sound/soc-dai.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='pcm_new' type-id='6c0c7302' visibility='default' filepath='include/sound/soc-dai.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ops' type-id='777e33bd' visibility='default' filepath='include/sound/soc-dai.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cops' type-id='c9d35a9c' visibility='default' filepath='include/sound/soc-dai.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='capture' type-id='e85be380' visibility='default' filepath='include/sound/soc-dai.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='playback' type-id='e85be380' visibility='default' filepath='include/sound/soc-dai.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='symmetric_rates' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='symmetric_channels' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='symmetric_samplebits' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='bus_control' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='probe_order' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dai.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='remove_order' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dai.h' line='311' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dai' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/sound/soc-dai.h' line='319' column='1' id='2d7051f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dai.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dai.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc-dai.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver' type-id='763d26a2' visibility='default' filepath='include/sound/soc-dai.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='capture_active' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='playback_active' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='probed' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='playback_widget' type-id='810606ec' visibility='default' filepath='include/sound/soc-dai.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='capture_widget' type-id='810606ec' visibility='default' filepath='include/sound/soc-dai.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='playback_dma_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc-dai.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='capture_dma_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc-dai.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rate' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='channels' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sample_bits' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='component' type-id='807b7702' visibility='default' filepath='include/sound/soc-dai.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='tx_mask' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='rx_mask' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dai.h' line='353' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_pcm_runtime' size-in-bits='13952' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='1141' column='1' id='00e3a6d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc.h' line='1142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='card' type-id='3059cd0b' visibility='default' filepath='include/sound/soc.h' line='1143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dai_link' type-id='af5a73b0' visibility='default' filepath='include/sound/soc.h' line='1144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='73803d48' visibility='default' filepath='include/sound/soc.h' line='1145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='params_select' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='dpcm' type-id='39f07796' visibility='default' filepath='include/sound/soc.h' line='1150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='pmdown_time' type-id='bd54fe1a' visibility='default' filepath='include/sound/soc.h' line='1152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='pcm' type-id='4c9f335b' visibility='default' filepath='include/sound/soc.h' line='1155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='compr' type-id='dc1e097e' visibility='default' filepath='include/sound/soc.h' line='1156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='codec_dai' type-id='1c936db9' visibility='default' filepath='include/sound/soc.h' line='1157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='cpu_dai' type-id='1c936db9' visibility='default' filepath='include/sound/soc.h' line='1158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='codec_dais' type-id='8f157e69' visibility='default' filepath='include/sound/soc.h' line='1160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='num_codecs' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12416'>
+          <var-decl name='delayed_work' type-id='5ad6e0ef' visibility='default' filepath='include/sound/soc.h' line='1163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='debugfs_dpcm_root' type-id='27675065' visibility='default' filepath='include/sound/soc.h' line='1165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13568'>
+          <var-decl name='num' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13632'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13760'>
+          <var-decl name='component_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='dev_registered' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='pop_wait' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='fe_compr' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1175' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dai_link' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='768' column='1' id='5c18a8e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stream_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpus' type-id='4120e250' visibility='default' filepath='include/sound/soc.h' line='785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_cpus' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='codecs' type-id='4120e250' visibility='default' filepath='include/sound/soc.h' line='793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_codecs' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='platforms' type-id='4120e250' visibility='default' filepath='include/sound/soc.h' line='801' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_platforms' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='params' type-id='b0772ded' visibility='default' filepath='include/sound/soc.h' line='806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='num_params' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='dai_fmt' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='809' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='trigger' type-id='16449c76' visibility='default' filepath='include/sound/soc.h' line='811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='init' type-id='1ad47772' visibility='default' filepath='include/sound/soc.h' line='814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='be_hw_params_fixup' type-id='59a76ce1' visibility='default' filepath='include/sound/soc.h' line='817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ops' type-id='d33d33c6' visibility='default' filepath='include/sound/soc.h' line='821' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compr_ops' type-id='33ec9b0e' visibility='default' filepath='include/sound/soc.h' line='822' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nonatomic' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='825' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='playback_only' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='828' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='capture_only' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='ignore_suspend' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='832' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='symmetric_rates' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='835' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='symmetric_channels' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='836' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='symmetric_samplebits' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='837' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='no_pcm' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='dynamic' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='no_host_mode' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='dpcm_capture' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='dpcm_playback' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='dpcm_merged_format' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='dpcm_merged_chan' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='dpcm_merged_rate' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='ignore_pmdown_time' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='ignore' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='868' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='dobj' type-id='01edcafc' visibility='default' filepath='include/sound/soc.h' line='869' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dai_link_component' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='762' column='1' id='ed5b2002'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/sound/soc.h' line='764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dai_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='765' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_pcm_stream' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='721' column='1' id='e85be380'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stream_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='formats' type-id='91ce1af9' visibility='default' filepath='include/sound/soc.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rates' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rate_min' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rate_max' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='channels_min' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='channels_max' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='sig_bits' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='aif_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='730' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_soc_dpcm_trigger' filepath='include/sound/soc-dpcm.h' line='58' column='1' id='b615ca5b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_DPCM_TRIGGER_PRE' value='0'/>
+        <enumerator name='SND_SOC_DPCM_TRIGGER_POST' value='1'/>
+        <enumerator name='SND_SOC_DPCM_TRIGGER_BESPOKE' value='2'/>
+      </enum-decl>
+      <class-decl name='snd_soc_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='734' column='1' id='40fc482f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='startup' type-id='ab756384' visibility='default' filepath='include/sound/soc.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='shutdown' type-id='897d1b6d' visibility='default' filepath='include/sound/soc.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hw_params' type-id='2b3f1c33' visibility='default' filepath='include/sound/soc.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hw_free' type-id='ab756384' visibility='default' filepath='include/sound/soc.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='prepare' type-id='ab756384' visibility='default' filepath='include/sound/soc.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='trigger' type-id='898a0783' visibility='default' filepath='include/sound/soc.h' line='740' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_compr_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='743' column='1' id='9c97c2f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='startup' type-id='be315f37' visibility='default' filepath='include/sound/soc.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='shutdown' type-id='4b0aea04' visibility='default' filepath='include/sound/soc.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_params' type-id='be315f37' visibility='default' filepath='include/sound/soc.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='trigger' type-id='be315f37' visibility='default' filepath='include/sound/soc.h' line='747' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dpcm_runtime' size-in-bits='5376' is-struct='yes' visibility='default' filepath='include/sound/soc-dpcm.h' line='91' column='1' id='c1c63dde'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='be_clients' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dpcm.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fe_clients' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dpcm.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='users' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dpcm.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='runtime' type-id='17a05af6' visibility='default' filepath='include/sound/soc-dpcm.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='hw_params' type-id='6c57d4a8' visibility='default' filepath='include/sound/soc-dpcm.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='runtime_update' type-id='3708cdec' visibility='default' filepath='include/sound/soc-dpcm.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5280'>
+          <var-decl name='state' type-id='792c8cde' visibility='default' filepath='include/sound/soc-dpcm.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='trigger_pending' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dpcm.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_soc_dpcm_update' filepath='include/sound/soc-dpcm.h' line='21' column='1' id='3708cdec'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_DPCM_UPDATE_NO' value='0'/>
+        <enumerator name='SND_SOC_DPCM_UPDATE_BE' value='1'/>
+        <enumerator name='SND_SOC_DPCM_UPDATE_FE' value='2'/>
+      </enum-decl>
+      <enum-decl name='snd_soc_dpcm_state' filepath='include/sound/soc-dpcm.h' line='38' column='1' id='792c8cde'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_DPCM_STATE_NEW' value='0'/>
+        <enumerator name='SND_SOC_DPCM_STATE_OPEN' value='1'/>
+        <enumerator name='SND_SOC_DPCM_STATE_HW_PARAMS' value='2'/>
+        <enumerator name='SND_SOC_DPCM_STATE_PREPARE' value='3'/>
+        <enumerator name='SND_SOC_DPCM_STATE_START' value='4'/>
+        <enumerator name='SND_SOC_DPCM_STATE_STOP' value='5'/>
+        <enumerator name='SND_SOC_DPCM_STATE_PAUSED' value='6'/>
+        <enumerator name='SND_SOC_DPCM_STATE_SUSPEND' value='7'/>
+        <enumerator name='SND_SOC_DPCM_STATE_HW_FREE' value='8'/>
+        <enumerator name='SND_SOC_DPCM_STATE_CLOSE' value='9'/>
+      </enum-decl>
+      <class-decl name='snd_soc_dai_ops' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/sound/soc-dai.h' line='173' column='1' id='b1fadf8a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='set_sysclk' type-id='fd437b0d' visibility='default' filepath='include/sound/soc-dai.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_pll' type-id='6cd85f13' visibility='default' filepath='include/sound/soc-dai.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_clkdiv' type-id='b346094b' visibility='default' filepath='include/sound/soc-dai.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_bclk_ratio' type-id='40bc7c47' visibility='default' filepath='include/sound/soc-dai.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_fmt' type-id='40bc7c47' visibility='default' filepath='include/sound/soc-dai.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xlate_tdm_slot_mask' type-id='4f8fb1b3' visibility='default' filepath='include/sound/soc-dai.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_tdm_slot' type-id='af3f6c83' visibility='default' filepath='include/sound/soc-dai.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_channel_map' type-id='f98f7769' visibility='default' filepath='include/sound/soc-dai.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_channel_map' type-id='37bbabb5' visibility='default' filepath='include/sound/soc-dai.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_tristate' type-id='432e0bcc' visibility='default' filepath='include/sound/soc-dai.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_sdw_stream' type-id='1dd33160' visibility='default' filepath='include/sound/soc-dai.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='digital_mute' type-id='432e0bcc' visibility='default' filepath='include/sound/soc-dai.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mute_stream' type-id='b346094b' visibility='default' filepath='include/sound/soc-dai.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='startup' type-id='ebda04fc' visibility='default' filepath='include/sound/soc-dai.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='shutdown' type-id='c7f8de51' visibility='default' filepath='include/sound/soc-dai.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hw_params' type-id='2e127687' visibility='default' filepath='include/sound/soc-dai.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='hw_free' type-id='ebda04fc' visibility='default' filepath='include/sound/soc-dai.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='prepare' type-id='ebda04fc' visibility='default' filepath='include/sound/soc-dai.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='trigger' type-id='939046d7' visibility='default' filepath='include/sound/soc-dai.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='bespoke_trigger' type-id='939046d7' visibility='default' filepath='include/sound/soc-dai.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='delay' type-id='2610fb79' visibility='default' filepath='include/sound/soc-dai.h' line='241' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_cdai_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/sound/soc-dai.h' line='245' column='1' id='d6a931df'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='startup' type-id='ff70ae33' visibility='default' filepath='include/sound/soc-dai.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='shutdown' type-id='ff70ae33' visibility='default' filepath='include/sound/soc-dai.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_params' type-id='64548faf' visibility='default' filepath='include/sound/soc-dai.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_params' type-id='1b64445b' visibility='default' filepath='include/sound/soc-dai.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_metadata' type-id='b8430c5e' visibility='default' filepath='include/sound/soc-dai.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_metadata' type-id='b8430c5e' visibility='default' filepath='include/sound/soc-dai.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='trigger' type-id='5b6d9de6' visibility='default' filepath='include/sound/soc-dai.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pointer' type-id='6ca57870' visibility='default' filepath='include/sound/soc-dai.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ack' type-id='6620a240' visibility='default' filepath='include/sound/soc-dai.h' line='265' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_pcm' size-in-bits='7296' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='511' column='1' id='6d009fe7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pcm_name' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dai_name' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='pcm_id' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dai_id' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='playback' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='capture' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='compress' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='stream' type-id='0036534d' visibility='default' filepath='include/uapi/sound/asoc.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='num_streams' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5536'>
+          <var-decl name='caps' type-id='57144ac1' visibility='default' filepath='include/uapi/sound/asoc.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7200'>
+          <var-decl name='flag_mask' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='flags' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7264'>
+          <var-decl name='priv' type-id='372c32b8' visibility='default' filepath='include/uapi/sound/asoc.h' line='525' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_stream' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='317' column='1' id='a305d6c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='format' type-id='a30e8d1f' visibility='default' filepath='include/uapi/sound/asoc.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rate' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='period_bytes' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='buffer_bytes' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='channels' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='324' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_stream_caps' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='296' column='1' id='d49652d3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='formats' type-id='a30e8d1f' visibility='default' filepath='include/uapi/sound/asoc.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rates' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='rate_min' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rate_max' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='channels_min' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='channels_max' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='periods_min' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='periods_max' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='period_size_min' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='period_size_max' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='buffer_size_min' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='buffer_size_max' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='sig_bits' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='311' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_link_config' size-in-bits='13248' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='539' column='1' id='a79c02b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='stream_name' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='stream' type-id='0036534d' visibility='default' filepath='include/uapi/sound/asoc.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='num_streams' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5408'>
+          <var-decl name='hw_config' type-id='63c0e8df' visibility='default' filepath='include/uapi/sound/asoc.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13088'>
+          <var-decl name='num_hw_configs' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='default_hw_config_id' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13152'>
+          <var-decl name='flag_mask' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='flags' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13216'>
+          <var-decl name='priv' type-id='372c32b8' visibility='default' filepath='include/uapi/sound/asoc.h' line='551' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_hw_config' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='332' column='1' id='826dc1a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fmt' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='clock_gated' type-id='8f048e17' visibility='default' filepath='include/uapi/sound/asoc.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='invert_bclk' type-id='8f048e17' visibility='default' filepath='include/uapi/sound/asoc.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='invert_fsync' type-id='8f048e17' visibility='default' filepath='include/uapi/sound/asoc.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='bclk_master' type-id='8f048e17' visibility='default' filepath='include/uapi/sound/asoc.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fsync_master' type-id='8f048e17' visibility='default' filepath='include/uapi/sound/asoc.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='mclk_direction' type-id='8f048e17' visibility='default' filepath='include/uapi/sound/asoc.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='reserved' type-id='23119536' visibility='default' filepath='include/uapi/sound/asoc.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='mclk_rate' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bclk_rate' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='fsync_rate' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tdm_slots' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tdm_slot_width' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_slots' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='rx_slots' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='tx_channels' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='tx_chanmap' type-id='e389acd5' visibility='default' filepath='include/uapi/sound/asoc.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='rx_channels' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rx_chanmap' type-id='e389acd5' visibility='default' filepath='include/uapi/sound/asoc.h' line='353' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_hdr' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='188' column='1' id='a2f068ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='abi' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='version' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='type' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='vendor_type' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='payload_size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='index' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='count' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='197' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_manifest' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='368' column='1' id='913f3538'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='control_elems' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='widget_elems' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='graph_elems' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pcm_elems' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='dai_link_elems' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dai_elems' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='reserved' type-id='77d1242b' visibility='default' filepath='include/uapi/sound/asoc.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='priv' type-id='372c32b8' visibility='default' filepath='include/uapi/sound/asoc.h' line='377' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_kcontrol_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='79' column='1' id='ad974450'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/sound/soc-topology.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get' type-id='8336f92e' visibility='default' filepath='include/sound/soc-topology.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='put' type-id='8336f92e' visibility='default' filepath='include/sound/soc-topology.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='info' type-id='a54793a9' visibility='default' filepath='include/sound/soc-topology.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_bytes_ext_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='90' column='1' id='3e689ce7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/sound/soc-topology.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get' type-id='f0dd4a3b' visibility='default' filepath='include/sound/soc-topology.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='put' type-id='f517dc88' visibility='default' filepath='include/sound/soc-topology.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/sound/soc-topology.h' line='69' column='1' id='d80bfbd6'>
+        <data-member access='private'>
+          <var-decl name='control' type-id='8a84fb32' visibility='default' filepath='include/sound/soc-topology.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='private'>
+          <var-decl name='widget' type-id='ca569b91' visibility='default' filepath='include/sound/soc-topology.h' line='71' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='snd_soc_dobj_control' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='52' column='1' id='8a84fb32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kcontrol' type-id='7a5054b7' visibility='default' filepath='include/sound/soc-topology.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dtexts' type-id='9b23c9ad' visibility='default' filepath='include/sound/soc-topology.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dvalues' type-id='1d2c2b85' visibility='default' filepath='include/sound/soc-topology.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dobj_widget' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='59' column='1' id='ca569b91'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kcontrol_type' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-topology.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_jack' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='710' column='1' id='4d855bce'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/sound/soc.h' line='711' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='jack' type-id='0f5a7eb8' visibility='default' filepath='include/sound/soc.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='card' type-id='3059cd0b' visibility='default' filepath='include/sound/soc.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pins' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='status' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='715' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='notifier' type-id='708c2394' visibility='default' filepath='include/sound/soc.h' line='716' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='jack_zones' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='717' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_wcache' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='660' column='1' id='27dc472b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='widget' type-id='810606ec' visibility='default' filepath='include/sound/soc-dapm.h' line='661' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_codec_conf' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='971' column='1' id='7082c248'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/sound/soc.h' line='977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name_prefix' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='983' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_aux_dev' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='986' column='1' id='5183f61d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dlc' type-id='ed5b2002' visibility='default' filepath='include/sound/soc.h' line='991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='init' type-id='48cf6abe' visibility='default' filepath='include/sound/soc.h' line='994' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_stats' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='693' column='1' id='fef29e19'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power_checks' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='path_checks' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='neighbour_checks' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='696' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_update' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='649' column='1' id='b6a3f4d3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kcontrol' type-id='7a5054b7' visibility='default' filepath='include/sound/soc-dapm.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mask' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='val' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reg2' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mask2' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='val2' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='has_second_set' type-id='b50a4934' visibility='default' filepath='include/sound/soc-dapm.h' line='657' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='33d73f3b' const='yes' id='9625db14'/>
+      <pointer-type-def type-id='9625db14' size-in-bits='64' id='9b98229a'/>
+      <qualified-type-def type-id='d6a931df' const='yes' id='da194c5e'/>
+      <pointer-type-def type-id='da194c5e' size-in-bits='64' id='c9d35a9c'/>
+      <qualified-type-def type-id='9f6de273' const='yes' id='215ec542'/>
+      <pointer-type-def type-id='215ec542' size-in-bits='64' id='f030c2b8'/>
+      <qualified-type-def type-id='9c97c2f7' const='yes' id='abf99950'/>
+      <pointer-type-def type-id='abf99950' size-in-bits='64' id='33ec9b0e'/>
+      <qualified-type-def type-id='ed5b2002' const='yes' id='b60126bf'/>
+      <pointer-type-def type-id='b60126bf' size-in-bits='64' id='18cfbc8f'/>
+      <qualified-type-def type-id='b1fadf8a' const='yes' id='87538745'/>
+      <pointer-type-def type-id='87538745' size-in-bits='64' id='777e33bd'/>
+      <qualified-type-def type-id='4a91f65b' const='yes' id='e0f88742'/>
+      <pointer-type-def type-id='e0f88742' size-in-bits='64' id='8f3d28b8'/>
+      <qualified-type-def type-id='f780d556' const='yes' id='e0d04bd9'/>
+      <pointer-type-def type-id='e0d04bd9' size-in-bits='64' id='dae78f89'/>
+      <qualified-type-def type-id='40fc482f' const='yes' id='b276f0c8'/>
+      <pointer-type-def type-id='b276f0c8' size-in-bits='64' id='d33d33c6'/>
+      <qualified-type-def type-id='e85be380' const='yes' id='8dc7c255'/>
+      <pointer-type-def type-id='8dc7c255' size-in-bits='64' id='b0772ded'/>
+      <qualified-type-def type-id='3e689ce7' const='yes' id='597bfbe2'/>
+      <pointer-type-def type-id='597bfbe2' size-in-bits='64' id='a62d5bd8'/>
+      <qualified-type-def type-id='ad974450' const='yes' id='319b3a77'/>
+      <pointer-type-def type-id='319b3a77' size-in-bits='64' id='745ce067'/>
+      <pointer-type-def type-id='2e443c2c' size-in-bits='64' id='74b427ec'/>
+      <pointer-type-def type-id='d26d2ca4' size-in-bits='64' id='5b6d9de6'/>
+      <pointer-type-def type-id='7e019027' size-in-bits='64' id='1b64445b'/>
+      <pointer-type-def type-id='6f527014' size-in-bits='64' id='b8430c5e'/>
+      <pointer-type-def type-id='dcda8403' size-in-bits='64' id='64548faf'/>
+      <pointer-type-def type-id='aaad2fce' size-in-bits='64' id='6ca57870'/>
+      <pointer-type-def type-id='f5362227' size-in-bits='64' id='ff70ae33'/>
+      <pointer-type-def type-id='201ffa8e' size-in-bits='64' id='6620a240'/>
+      <pointer-type-def type-id='643400ce' size-in-bits='64' id='f517dc88'/>
+      <pointer-type-def type-id='fa75c86d' size-in-bits='64' id='a54793a9'/>
+      <pointer-type-def type-id='84147814' size-in-bits='64' id='8336f92e'/>
+      <pointer-type-def type-id='eb5d5777' size-in-bits='64' id='f0dd4a3b'/>
+      <pointer-type-def type-id='d9bbe8ab' size-in-bits='64' id='939046d7'/>
+      <pointer-type-def type-id='1f765c33' size-in-bits='64' id='2e127687'/>
+      <pointer-type-def type-id='1f79c412' size-in-bits='64' id='ebda04fc'/>
+      <pointer-type-def type-id='f82a46c1' size-in-bits='64' id='edcb70dd'/>
+      <pointer-type-def type-id='18620c48' size-in-bits='64' id='1391f54a'/>
+      <pointer-type-def type-id='fcf647be' size-in-bits='64' id='4a944438'/>
+      <pointer-type-def type-id='9917f524' size-in-bits='64' id='48cf6abe'/>
+      <pointer-type-def type-id='0ed9f201' size-in-bits='64' id='71f7eca5'/>
+      <pointer-type-def type-id='ebf04e7b' size-in-bits='64' id='ab3c35df'/>
+      <pointer-type-def type-id='483ecac1' size-in-bits='64' id='4d6d9805'/>
+      <pointer-type-def type-id='a9bd2db1' size-in-bits='64' id='ff554aed'/>
+      <pointer-type-def type-id='9c43712a' size-in-bits='64' id='bd4604a4'/>
+      <pointer-type-def type-id='8a322362' size-in-bits='64' id='6b4579c4'/>
+      <pointer-type-def type-id='b9d8dce4' size-in-bits='64' id='47fc8c26'/>
+      <pointer-type-def type-id='3098b525' size-in-bits='64' id='5b44b629'/>
+      <pointer-type-def type-id='956881f1' size-in-bits='64' id='7ad49bc5'/>
+      <pointer-type-def type-id='02f1c4a9' size-in-bits='64' id='b4fb1c55'/>
+      <pointer-type-def type-id='98408d8f' size-in-bits='64' id='1f42ef53'/>
+      <pointer-type-def type-id='c21a2b60' size-in-bits='64' id='502bd26a'/>
+      <pointer-type-def type-id='a4f8cee1' size-in-bits='64' id='93cd7c85'/>
+      <pointer-type-def type-id='c37d868d' size-in-bits='64' id='6332a661'/>
+      <pointer-type-def type-id='8ca90cbf' size-in-bits='64' id='997f6223'/>
+      <pointer-type-def type-id='df961c58' size-in-bits='64' id='ff06646a'/>
+      <pointer-type-def type-id='dca78e2c' size-in-bits='64' id='726f2cf6'/>
+      <pointer-type-def type-id='8892a831' size-in-bits='64' id='a2515c25'/>
+      <pointer-type-def type-id='15bee3b2' size-in-bits='64' id='432e0bcc'/>
+      <pointer-type-def type-id='33f6a667' size-in-bits='64' id='b346094b'/>
+      <pointer-type-def type-id='a9c862bf' size-in-bits='64' id='6cd85f13'/>
+      <pointer-type-def type-id='1cd99dc1' size-in-bits='64' id='fd437b0d'/>
+      <pointer-type-def type-id='868d8193' size-in-bits='64' id='40bc7c47'/>
+      <pointer-type-def type-id='294a6b21' size-in-bits='64' id='37bbabb5'/>
+      <pointer-type-def type-id='34f7ad3d' size-in-bits='64' id='f98f7769'/>
+      <pointer-type-def type-id='1126278f' size-in-bits='64' id='af3f6c83'/>
+      <pointer-type-def type-id='ff87f3a6' size-in-bits='64' id='1dd33160'/>
+      <pointer-type-def type-id='6634c3c6' size-in-bits='64' id='3fccea10'/>
+      <pointer-type-def type-id='34c8e7e1' size-in-bits='64' id='af92413d'/>
+      <pointer-type-def type-id='e5cda869' size-in-bits='64' id='4b433675'/>
+      <pointer-type-def type-id='10865770' size-in-bits='64' id='1ad47772'/>
+      <pointer-type-def type-id='52c5253d' size-in-bits='64' id='da6639f9'/>
+      <pointer-type-def type-id='d8484ecd' size-in-bits='64' id='59a76ce1'/>
+      <pointer-type-def type-id='ea48a448' size-in-bits='64' id='6c0c7302'/>
+      <pointer-type-def type-id='d87e539f' size-in-bits='64' id='4f8fb1b3'/>
+      <pointer-type-def type-id='7a5054b7' size-in-bits='64' id='29753327'/>
+      <pointer-type-def type-id='9a46627e' size-in-bits='64' id='2753ede4'/>
+      <pointer-type-def type-id='5183f61d' size-in-bits='64' id='8ace4add'/>
+      <pointer-type-def type-id='29ad938b' size-in-bits='64' id='3059cd0b'/>
+      <pointer-type-def type-id='7082c248' size-in-bits='64' id='f10279fe'/>
+      <pointer-type-def type-id='9ba86a44' size-in-bits='64' id='807b7702'/>
+      <pointer-type-def type-id='2d7051f1' size-in-bits='64' id='1c936db9'/>
+      <pointer-type-def type-id='1c936db9' size-in-bits='64' id='8f157e69'/>
+      <pointer-type-def type-id='a1599794' size-in-bits='64' id='763d26a2'/>
+      <pointer-type-def type-id='5c18a8e2' size-in-bits='64' id='af5a73b0'/>
+      <pointer-type-def type-id='ed5b2002' size-in-bits='64' id='4120e250'/>
+      <pointer-type-def type-id='95201ae5' size-in-bits='64' id='70d004a5'/>
+      <pointer-type-def type-id='4a91f65b' size-in-bits='64' id='66add68b'/>
+      <pointer-type-def type-id='b6a3f4d3' size-in-bits='64' id='33146de3'/>
+      <pointer-type-def type-id='f780d556' size-in-bits='64' id='810606ec'/>
+      <pointer-type-def type-id='01edcafc' size-in-bits='64' id='3c2163ba'/>
+      <pointer-type-def type-id='4d855bce' size-in-bits='64' id='12a060a4'/>
+      <pointer-type-def type-id='00e3a6d4' size-in-bits='64' id='95316552'/>
+      <pointer-type-def type-id='d3581737' size-in-bits='64' id='25b0d1cf'/>
+      <pointer-type-def type-id='b1e3bc3e' size-in-bits='64' id='32ca7384'/>
+      <pointer-type-def type-id='a2f068ed' size-in-bits='64' id='0081e2ad'/>
+      <pointer-type-def type-id='a79c02b8' size-in-bits='64' id='8665c98e'/>
+      <pointer-type-def type-id='913f3538' size-in-bits='64' id='2a24760e'/>
+      <pointer-type-def type-id='c2ddf2d7' size-in-bits='64' id='76e6e22f'/>
+      <pointer-type-def type-id='6d009fe7' size-in-bits='64' id='cee845ff'/>
+      <pointer-type-def type-id='4c8ce8c5' size-in-bits='64' id='2610fb79'/>
+      <pointer-type-def type-id='0971a711' size-in-bits='64' id='7bb6ff35'/>
+      <pointer-type-def type-id='da3c754a' size-in-bits='64' id='4b0aea04'/>
+      <pointer-type-def type-id='9eea6bb5' size-in-bits='64' id='c7f8de51'/>
+      <pointer-type-def type-id='883b3327' size-in-bits='64' id='e3fceddb'/>
+      <pointer-type-def type-id='b43302df' size-in-bits='64' id='f88ed793'/>
+      <pointer-type-def type-id='139c5a2c' size-in-bits='64' id='f596d48e'/>
+      <var-decl name='snd_soc_pm_ops' type-id='86af1d10' mangled-name='snd_soc_pm_ops' visibility='default' filepath='sound/soc/soc-core.c' line='2231' column='1' elf-symbol-id='snd_soc_pm_ops'/>
+      <function-decl name='snd_soc_register_card' mangled-name='snd_soc_register_card' filepath='sound/soc/soc-core.c' line='2423' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_register_card'>
+        <parameter type-id='3059cd0b' name='card' filepath='sound/soc/soc-core.c' line='2423' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_rtdcom_lookup' mangled-name='snd_soc_rtdcom_lookup' filepath='sound/soc/soc-core.c' line='310' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_rtdcom_lookup'>
+        <parameter type-id='95316552' name='rtd' filepath='sound/soc/soc-core.c' line='310' column='1'/>
+        <parameter type-id='80f4b756' name='driver_name' filepath='sound/soc/soc-core.c' line='311' column='1'/>
+        <return type-id='807b7702'/>
+      </function-decl>
+      <function-decl name='snd_soc_get_pcm_runtime' mangled-name='snd_soc_get_pcm_runtime' filepath='sound/soc/soc-core.c' line='412' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_get_pcm_runtime'>
+        <parameter type-id='3059cd0b' name='card' filepath='sound/soc/soc-core.c' line='412' column='1'/>
+        <parameter type-id='80f4b756' name='dai_link' filepath='sound/soc/soc-core.c' line='413' column='1'/>
+        <return type-id='95316552'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_sync' mangled-name='snd_soc_dapm_sync' filepath='include/sound/soc-dapm.h' line='466' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_sync'>
+        <parameter type-id='70d004a5'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_find_dai' mangled-name='snd_soc_find_dai' filepath='sound/soc/soc-core.c' line='795' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_find_dai'>
+        <parameter type-id='18cfbc8f' name='dlc' filepath='sound/soc/soc-core.c' line='796' column='1'/>
+        <return type-id='1c936db9'/>
+      </function-decl>
+      <function-decl name='snd_soc_lookup_component' mangled-name='snd_soc_lookup_component' filepath='sound/soc/soc-core.c' line='2936' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_lookup_component'>
+        <parameter type-id='fa0b179b' name='dev' filepath='sound/soc/soc-core.c' line='2936' column='1'/>
+        <parameter type-id='80f4b756' name='driver_name' filepath='sound/soc/soc-core.c' line='2937' column='1'/>
+        <return type-id='807b7702'/>
+      </function-decl>
+      <function-decl name='snd_soc_dai_set_fmt' mangled-name='snd_soc_dai_set_fmt' filepath='include/sound/soc-dai.h' line='126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dai_set_fmt'>
+        <parameter type-id='1c936db9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_card_get_kcontrol' mangled-name='snd_soc_card_get_kcontrol' filepath='sound/soc/soc-core.c' line='2315' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_card_get_kcontrol'>
+        <parameter type-id='3059cd0b' name='soc_card' filepath='sound/soc/soc-core.c' line='2315' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='sound/soc/soc-core.c' line='2316' column='1'/>
+        <return type-id='7a5054b7'/>
+      </function-decl>
+      <function-decl name='snd_soc_add_component_controls' mangled-name='snd_soc_add_component_controls' filepath='sound/soc/soc-core.c' line='2340' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_add_component_controls'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-core.c' line='2340' column='1'/>
+        <parameter type-id='31e035f7' name='controls' filepath='sound/soc/soc-core.c' line='2341' column='1'/>
+        <parameter type-id='f0981eeb' name='num_controls' filepath='sound/soc/soc-core.c' line='2341' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_add_card_controls' mangled-name='snd_soc_add_card_controls' filepath='sound/soc/soc-core.c' line='2360' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_add_card_controls'>
+        <parameter type-id='3059cd0b' name='soc_card' filepath='sound/soc/soc-core.c' line='2360' column='1'/>
+        <parameter type-id='31e035f7' name='controls' filepath='sound/soc/soc-core.c' line='2361' column='1'/>
+        <parameter type-id='95e97e5e' name='num_controls' filepath='sound/soc/soc-core.c' line='2361' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_new_controls' mangled-name='snd_soc_dapm_new_controls' filepath='include/sound/soc-dapm.h' line='401' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_new_controls'>
+        <parameter type-id='70d004a5'/>
+        <parameter type-id='dae78f89'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_add_routes' mangled-name='snd_soc_dapm_add_routes' filepath='include/sound/soc-dapm.h' line='425' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_add_routes'>
+        <parameter type-id='70d004a5'/>
+        <parameter type-id='8f3d28b8'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_new_widgets' mangled-name='snd_soc_dapm_new_widgets' filepath='include/sound/soc-dapm.h' line='420' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_new_widgets'>
+        <parameter type-id='3059cd0b'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_unregister_card' mangled-name='snd_soc_unregister_card' filepath='sound/soc/soc-core.c' line='2477' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_unregister_card'>
+        <parameter type-id='3059cd0b' name='card' filepath='sound/soc/soc-core.c' line='2477' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_init_regmap' mangled-name='snd_soc_component_init_regmap' filepath='sound/soc/soc-core.c' line='2739' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_init_regmap'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-core.c' line='2739' column='1'/>
+        <parameter type-id='29af9a72' name='regmap' filepath='sound/soc/soc-core.c' line='2740' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_exit_regmap' mangled-name='snd_soc_component_exit_regmap' filepath='sound/soc/soc-core.c' line='2758' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_exit_regmap'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-core.c' line='2758' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_soc_register_component' mangled-name='snd_soc_register_component' filepath='sound/soc/soc-core.c' line='2883' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_register_component'>
+        <parameter type-id='fa0b179b' name='dev' filepath='sound/soc/soc-core.c' line='2883' column='1'/>
+        <parameter type-id='f030c2b8' name='component_driver' filepath='sound/soc/soc-core.c' line='2884' column='1'/>
+        <parameter type-id='763d26a2' name='dai_drv' filepath='sound/soc/soc-core.c' line='2885' column='1'/>
+        <parameter type-id='95e97e5e' name='num_dai' filepath='sound/soc/soc-core.c' line='2886' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_unregister_component' mangled-name='snd_soc_unregister_component' filepath='sound/soc/soc-core.c' line='2929' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_unregister_component'>
+        <parameter type-id='fa0b179b' name='dev' filepath='sound/soc/soc-core.c' line='2929' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_soc_tplg_component_remove' mangled-name='snd_soc_tplg_component_remove' filepath='include/sound/soc-topology.h' line='186' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_tplg_component_remove'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_of_parse_card_name' mangled-name='snd_soc_of_parse_card_name' filepath='sound/soc/soc-core.c' line='2963' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_of_parse_card_name'>
+        <parameter type-id='3059cd0b' name='card' filepath='sound/soc/soc-core.c' line='2963' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='sound/soc/soc-core.c' line='2964' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_of_parse_audio_simple_widgets' mangled-name='snd_soc_of_parse_audio_simple_widgets' filepath='sound/soc/soc-core.c' line='3000' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_of_parse_audio_simple_widgets'>
+        <parameter type-id='3059cd0b' name='card' filepath='sound/soc/soc-core.c' line='3000' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='sound/soc/soc-core.c' line='3001' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_of_parse_tdm_slot' mangled-name='snd_soc_of_parse_tdm_slot' filepath='sound/soc/soc-core.c' line='3099' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_of_parse_tdm_slot'>
+        <parameter type-id='9a537bbe' name='np' filepath='sound/soc/soc-core.c' line='3099' column='1'/>
+        <parameter type-id='807869d3' name='tx_mask' filepath='sound/soc/soc-core.c' line='3100' column='1'/>
+        <parameter type-id='807869d3' name='rx_mask' filepath='sound/soc/soc-core.c' line='3101' column='1'/>
+        <parameter type-id='807869d3' name='slots' filepath='sound/soc/soc-core.c' line='3102' column='1'/>
+        <parameter type-id='807869d3' name='slot_width' filepath='sound/soc/soc-core.c' line='3103' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_of_parse_node_prefix' mangled-name='snd_soc_of_parse_node_prefix' filepath='sound/soc/soc-core.c' line='3135' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_of_parse_node_prefix'>
+        <parameter type-id='9a537bbe' name='np' filepath='sound/soc/soc-core.c' line='3135' column='1'/>
+        <parameter type-id='f10279fe' name='codec_conf' filepath='sound/soc/soc-core.c' line='3136' column='1'/>
+        <parameter type-id='9a537bbe' name='of_node' filepath='sound/soc/soc-core.c' line='3137' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='sound/soc/soc-core.c' line='3138' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_soc_of_parse_audio_routing' mangled-name='snd_soc_of_parse_audio_routing' filepath='sound/soc/soc-core.c' line='3154' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_of_parse_audio_routing'>
+        <parameter type-id='3059cd0b' name='card' filepath='sound/soc/soc-core.c' line='3154' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='sound/soc/soc-core.c' line='3155' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_of_parse_daifmt' mangled-name='snd_soc_of_parse_daifmt' filepath='sound/soc/soc-core.c' line='3210' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_of_parse_daifmt'>
+        <parameter type-id='9a537bbe' name='np' filepath='sound/soc/soc-core.c' line='3210' column='1'/>
+        <parameter type-id='80f4b756' name='prefix' filepath='sound/soc/soc-core.c' line='3211' column='1'/>
+        <parameter type-id='856b89fc' name='bitclkmaster' filepath='sound/soc/soc-core.c' line='3212' column='1'/>
+        <parameter type-id='856b89fc' name='framemaster' filepath='sound/soc/soc-core.c' line='3213' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='snd_soc_info_multi_ext' mangled-name='snd_soc_info_multi_ext' filepath='sound/soc/soc-core.c' line='3364' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_info_multi_ext'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-core.c' line='3364' column='1'/>
+        <parameter type-id='0e291009' name='uinfo' filepath='sound/soc/soc-core.c' line='3365' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_of_get_dai_name' mangled-name='snd_soc_of_get_dai_name' filepath='sound/soc/soc-core.c' line='3444' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_of_get_dai_name'>
+        <parameter type-id='9a537bbe' name='of_node' filepath='sound/soc/soc-core.c' line='3444' column='1'/>
+        <parameter type-id='7d3cd834' name='dai_name' filepath='sound/soc/soc-core.c' line='3445' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_of_put_dai_link_codecs' mangled-name='snd_soc_of_put_dai_link_codecs' filepath='sound/soc/soc-core.c' line='3469' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_of_put_dai_link_codecs'>
+        <parameter type-id='af5a73b0' name='dai_link' filepath='sound/soc/soc-core.c' line='3469' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_soc_of_get_dai_link_codecs' mangled-name='snd_soc_of_get_dai_link_codecs' filepath='sound/soc/soc-core.c' line='3497' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_of_get_dai_link_codecs'>
+        <parameter type-id='fa0b179b' name='dev' filepath='sound/soc/soc-core.c' line='3497' column='1'/>
+        <parameter type-id='9a537bbe' name='of_node' filepath='sound/soc/soc-core.c' line='3498' column='1'/>
+        <parameter type-id='af5a73b0' name='dai_link' filepath='sound/soc/soc-core.c' line='3499' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='d26d2ca4'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7e019027'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='99baf115'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6f527014'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='58dc55d6'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dcda8403'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='15dfbd93'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aaad2fce'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='c1873808'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f5362227'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='201ffa8e'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='643400ce'>
+        <parameter type-id='7a5054b7'/>
+        <parameter type-id='5b2fd8e8'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eb5d5777'>
+        <parameter type-id='7a5054b7'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d9bbe8ab'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1f765c33'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='363a995e'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1f79c412'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f82a46c1'>
+        <parameter type-id='3059cd0b' name='card'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='18620c48'>
+        <parameter type-id='3059cd0b'/>
+        <parameter type-id='af5a73b0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fcf647be'>
+        <parameter type-id='3059cd0b'/>
+        <parameter type-id='70d004a5'/>
+        <parameter type-id='f078c744'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9917f524'>
+        <parameter type-id='807b7702'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ed9f201'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='9a537bbe'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ebf04e7b'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='f078c744'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='483ecac1'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a9bd2db1'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9c43712a'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8a322362'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='2753ede4'/>
+        <parameter type-id='25b0d1cf'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b9d8dce4'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='763d26a2'/>
+        <parameter type-id='cee845ff'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3098b525'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='af5a73b0'/>
+        <parameter type-id='8665c98e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='956881f1'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='66add68b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='02f1c4a9'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='810606ec'/>
+        <parameter type-id='32ca7384'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='98408d8f'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='0081e2ad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c21a2b60'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='2a24760e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a4f8cee1'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='51a94113'/>
+        <parameter type-id='7d3cd834'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c37d868d'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='3c2163ba'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8ca90cbf'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='12a060a4'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='df961c58'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='0081e2ad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dca78e2c'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8892a831'>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='15bee3b2'>
+        <parameter type-id='1c936db9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='33f6a667'>
+        <parameter type-id='1c936db9'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a9c862bf'>
+        <parameter type-id='1c936db9'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1cd99dc1'>
+        <parameter type-id='1c936db9'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='868d8193'>
+        <parameter type-id='1c936db9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='294a6b21'>
+        <parameter type-id='1c936db9'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34f7ad3d'>
+        <parameter type-id='1c936db9'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1126278f'>
+        <parameter type-id='1c936db9'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ff87f3a6'>
+        <parameter type-id='1c936db9'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6634c3c6'>
+        <parameter type-id='810606ec'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34c8e7e1'>
+        <parameter type-id='810606ec'/>
+        <parameter type-id='7a5054b7'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e5cda869'>
+        <parameter type-id='810606ec'/>
+        <parameter type-id='810606ec'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='10865770'>
+        <parameter type-id='95316552'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='52c5253d'>
+        <parameter type-id='95316552'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d8484ecd'>
+        <parameter type-id='95316552'/>
+        <parameter type-id='363a995e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ea48a448'>
+        <parameter type-id='95316552'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d87e539f'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4c8ce8c5'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='721b74e7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0971a711'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da3c754a'>
+        <parameter type-id='b7c1d7d5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9eea6bb5'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='883b3327'>
+        <parameter type-id='3059cd0b'/>
+        <parameter type-id='af5a73b0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b43302df'>
+        <parameter type-id='807b7702'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='139c5a2c'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='68bb1ec5'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/soc/soc-dai.c' language='LANG_C89'>
+      <function-decl name='snd_soc_dai_set_sysclk' mangled-name='snd_soc_dai_set_sysclk' filepath='sound/soc/soc-dai.c' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dai_set_sysclk'>
+        <parameter type-id='1c936db9' name='dai' filepath='sound/soc/soc-dai.c' line='21' column='1'/>
+        <parameter type-id='95e97e5e' name='clk_id' filepath='sound/soc/soc-dai.c' line='21' column='1'/>
+        <parameter type-id='f0981eeb' name='freq' filepath='sound/soc/soc-dai.c' line='22' column='1'/>
+        <parameter type-id='95e97e5e' name='dir' filepath='sound/soc/soc-dai.c' line='22' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_set_sysclk' mangled-name='snd_soc_component_set_sysclk' filepath='include/sound/soc-component.h' line='275' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_set_sysclk'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dai_set_clkdiv' mangled-name='snd_soc_dai_set_clkdiv' filepath='sound/soc/soc-dai.c' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dai_set_clkdiv'>
+        <parameter type-id='1c936db9' name='dai' filepath='sound/soc/soc-dai.c' line='42' column='1'/>
+        <parameter type-id='95e97e5e' name='div_id' filepath='sound/soc/soc-dai.c' line='43' column='1'/>
+        <parameter type-id='95e97e5e' name='div' filepath='sound/soc/soc-dai.c' line='43' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dai_set_pll' mangled-name='snd_soc_dai_set_pll' filepath='sound/soc/soc-dai.c' line='62' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dai_set_pll'>
+        <parameter type-id='1c936db9' name='dai' filepath='sound/soc/soc-dai.c' line='62' column='1'/>
+        <parameter type-id='95e97e5e' name='pll_id' filepath='sound/soc/soc-dai.c' line='62' column='1'/>
+        <parameter type-id='95e97e5e' name='source' filepath='sound/soc/soc-dai.c' line='62' column='1'/>
+        <parameter type-id='f0981eeb' name='freq_in' filepath='sound/soc/soc-dai.c' line='63' column='1'/>
+        <parameter type-id='f0981eeb' name='freq_out' filepath='sound/soc/soc-dai.c' line='63' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_set_pll' mangled-name='snd_soc_component_set_pll' filepath='include/sound/soc-component.h' line='278' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_set_pll'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dai_set_bclk_ratio' mangled-name='snd_soc_dai_set_bclk_ratio' filepath='sound/soc/soc-dai.c' line='81' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dai_set_bclk_ratio'>
+        <parameter type-id='1c936db9' name='dai' filepath='sound/soc/soc-dai.c' line='81' column='1'/>
+        <parameter type-id='f0981eeb' name='ratio' filepath='sound/soc/soc-dai.c' line='81' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dai_set_tdm_slot' mangled-name='snd_soc_dai_set_tdm_slot' filepath='sound/soc/soc-dai.c' line='152' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dai_set_tdm_slot'>
+        <parameter type-id='1c936db9' name='dai' filepath='sound/soc/soc-dai.c' line='152' column='1'/>
+        <parameter type-id='f0981eeb' name='tx_mask' filepath='sound/soc/soc-dai.c' line='153' column='1'/>
+        <parameter type-id='f0981eeb' name='rx_mask' filepath='sound/soc/soc-dai.c' line='153' column='1'/>
+        <parameter type-id='95e97e5e' name='slots' filepath='sound/soc/soc-dai.c' line='154' column='1'/>
+        <parameter type-id='95e97e5e' name='slot_width' filepath='sound/soc/soc-dai.c' line='154' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dai_set_channel_map' mangled-name='snd_soc_dai_set_channel_map' filepath='sound/soc/soc-dai.c' line='185' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dai_set_channel_map'>
+        <parameter type-id='1c936db9' name='dai' filepath='sound/soc/soc-dai.c' line='185' column='1'/>
+        <parameter type-id='f0981eeb' name='tx_num' filepath='sound/soc/soc-dai.c' line='186' column='1'/>
+        <parameter type-id='807869d3' name='tx_slot' filepath='sound/soc/soc-dai.c' line='186' column='1'/>
+        <parameter type-id='f0981eeb' name='rx_num' filepath='sound/soc/soc-dai.c' line='187' column='1'/>
+        <parameter type-id='807869d3' name='rx_slot' filepath='sound/soc/soc-dai.c' line='187' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dai_get_channel_map' mangled-name='snd_soc_dai_get_channel_map' filepath='sound/soc/soc-dai.c' line='207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dai_get_channel_map'>
+        <parameter type-id='1c936db9' name='dai' filepath='sound/soc/soc-dai.c' line='207' column='1'/>
+        <parameter type-id='807869d3' name='tx_num' filepath='sound/soc/soc-dai.c' line='208' column='1'/>
+        <parameter type-id='807869d3' name='tx_slot' filepath='sound/soc/soc-dai.c' line='208' column='1'/>
+        <parameter type-id='807869d3' name='rx_num' filepath='sound/soc/soc-dai.c' line='209' column='1'/>
+        <parameter type-id='807869d3' name='rx_slot' filepath='sound/soc/soc-dai.c' line='209' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/soc/soc-dapm.c' language='LANG_C89'>
+      <class-decl name='soc_enum' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='1225' column='1' id='044208ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reg' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='shift_l' type-id='002ac4a6' visibility='default' filepath='include/sound/soc.h' line='1227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='shift_r' type-id='002ac4a6' visibility='default' filepath='include/sound/soc.h' line='1228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='items' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='texts' type-id='13956559' visibility='default' filepath='include/sound/soc.h' line='1231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='values' type-id='5b2fd8e8' visibility='default' filepath='include/sound/soc.h' line='1232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='autodisable' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dobj' type-id='01edcafc' visibility='default' filepath='include/sound/soc.h' line='1234' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='8755a6ff' const='yes' id='bae39662'/>
+      <pointer-type-def type-id='bae39662' size-in-bits='64' id='7c459358'/>
+      <pointer-type-def type-id='044208ec' size-in-bits='64' id='acf1578a'/>
+      <function-decl name='dapm_kcontrol_get_value' mangled-name='dapm_kcontrol_get_value' filepath='sound/soc/soc-dapm.c' line='533' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dapm_kcontrol_get_value'>
+        <parameter type-id='7c459358' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='533' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_kcontrol_widget' mangled-name='snd_soc_dapm_kcontrol_widget' filepath='sound/soc/soc-dapm.c' line='576' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_kcontrol_widget'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='577' column='1'/>
+        <return type-id='810606ec'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_kcontrol_dapm' mangled-name='snd_soc_dapm_kcontrol_dapm' filepath='sound/soc/soc-dapm.c' line='591' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_kcontrol_dapm'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='592' column='1'/>
+        <return type-id='70d004a5'/>
+      </function-decl>
+      <function-decl name='dapm_regulator_event' mangled-name='dapm_regulator_event' filepath='sound/soc/soc-dapm.c' line='1336' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dapm_regulator_event'>
+        <parameter type-id='810606ec' name='w' filepath='sound/soc/soc-dapm.c' line='1336' column='1'/>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='1337' column='1'/>
+        <parameter type-id='95e97e5e' name='event' filepath='sound/soc/soc-dapm.c' line='1337' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_async_complete' mangled-name='snd_soc_component_async_complete' filepath='include/sound/soc-component.h' line='269' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_async_complete'>
+        <parameter type-id='807b7702'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dapm_pinctrl_event' mangled-name='dapm_pinctrl_event' filepath='sound/soc/soc-dapm.c' line='1370' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dapm_pinctrl_event'>
+        <parameter type-id='810606ec' name='w' filepath='sound/soc/soc-dapm.c' line='1370' column='1'/>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='1371' column='1'/>
+        <parameter type-id='95e97e5e' name='event' filepath='sound/soc/soc-dapm.c' line='1371' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_mux_update_power' mangled-name='snd_soc_dapm_mux_update_power' filepath='sound/soc/soc-dapm.c' line='2296' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_mux_update_power'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='2296' column='1'/>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='2297' column='1'/>
+        <parameter type-id='95e97e5e' name='mux' filepath='sound/soc/soc-dapm.c' line='2297' column='1'/>
+        <parameter type-id='acf1578a' name='e' filepath='sound/soc/soc-dapm.c' line='2297' column='1'/>
+        <parameter type-id='33146de3' name='update' filepath='sound/soc/soc-dapm.c' line='2298' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_mixer_update_power' mangled-name='snd_soc_dapm_mixer_update_power' filepath='sound/soc/soc-dapm.c' line='2361' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_mixer_update_power'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='2361' column='1'/>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='2362' column='1'/>
+        <parameter type-id='95e97e5e' name='connect' filepath='sound/soc/soc-dapm.c' line='2362' column='1'/>
+        <parameter type-id='33146de3' name='update' filepath='sound/soc/soc-dapm.c' line='2363' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_update_bits' mangled-name='snd_soc_component_update_bits' filepath='include/sound/soc-component.h' line='263' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_update_bits'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_weak_routes' mangled-name='snd_soc_dapm_weak_routes' filepath='sound/soc/soc-dapm.c' line='3177' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_weak_routes'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='3177' column='1'/>
+        <parameter type-id='8f3d28b8' name='route' filepath='sound/soc/soc-dapm.c' line='3178' column='1'/>
+        <parameter type-id='95e97e5e' name='num' filepath='sound/soc/soc-dapm.c' line='3178' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_read' mangled-name='snd_soc_component_read' filepath='include/sound/soc-component.h' line='257' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_read'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_get_volsw' mangled-name='snd_soc_dapm_get_volsw' filepath='sound/soc/soc-dapm.c' line='3278' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_get_volsw'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='3278' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-dapm.c' line='3279' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_put_volsw' mangled-name='snd_soc_dapm_put_volsw' filepath='sound/soc/soc-dapm.c' line='3341' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_put_volsw'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='3341' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-dapm.c' line='3342' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_get_enum_double' mangled-name='snd_soc_dapm_get_enum_double' filepath='sound/soc/soc-dapm.c' line='3433' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_get_enum_double'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='3433' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-dapm.c' line='3434' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_put_enum_double' mangled-name='snd_soc_dapm_put_enum_double' filepath='sound/soc/soc-dapm.c' line='3474' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_put_enum_double'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='3474' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-dapm.c' line='3475' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_info_pin_switch' mangled-name='snd_soc_dapm_info_pin_switch' filepath='sound/soc/soc-dapm.c' line='3537' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_info_pin_switch'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='3537' column='1'/>
+        <parameter type-id='0e291009' name='uinfo' filepath='sound/soc/soc-dapm.c' line='3538' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_get_pin_switch' mangled-name='snd_soc_dapm_get_pin_switch' filepath='sound/soc/soc-dapm.c' line='3555' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_get_pin_switch'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='3555' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-dapm.c' line='3556' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_get_pin_status' mangled-name='snd_soc_dapm_get_pin_status' filepath='sound/soc/soc-dapm.c' line='4685' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_get_pin_status'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='4685' column='1'/>
+        <parameter type-id='80f4b756' name='pin' filepath='sound/soc/soc-dapm.c' line='4686' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_put_pin_switch' mangled-name='snd_soc_dapm_put_pin_switch' filepath='sound/soc/soc-dapm.c' line='3578' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_put_pin_switch'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='3578' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-dapm.c' line='3579' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_enable_pin' mangled-name='snd_soc_dapm_enable_pin' filepath='sound/soc/soc-dapm.c' line='4499' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_enable_pin'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='4499' column='1'/>
+        <parameter type-id='80f4b756' name='pin' filepath='sound/soc/soc-dapm.c' line='4499' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_disable_pin' mangled-name='snd_soc_dapm_disable_pin' filepath='sound/soc/soc-dapm.c' line='4610' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_disable_pin'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='4610' column='1'/>
+        <parameter type-id='80f4b756' name='pin' filepath='sound/soc/soc-dapm.c' line='4611' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_new_control' mangled-name='snd_soc_dapm_new_control' filepath='sound/soc/soc-dapm.c' line='3753' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_new_control'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='3753' column='1'/>
+        <parameter type-id='dae78f89' name='widget' filepath='sound/soc/soc-dapm.c' line='3754' column='1'/>
+        <return type-id='810606ec'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_force_enable_pin' mangled-name='snd_soc_dapm_force_enable_pin' filepath='sound/soc/soc-dapm.c' line='4566' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_force_enable_pin'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='4566' column='1'/>
+        <parameter type-id='80f4b756' name='pin' filepath='sound/soc/soc-dapm.c' line='4567' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_ignore_suspend' mangled-name='snd_soc_dapm_ignore_suspend' filepath='sound/soc/soc-dapm.c' line='4708' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_ignore_suspend'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='4708' column='1'/>
+        <parameter type-id='80f4b756' name='pin' filepath='sound/soc/soc-dapm.c' line='4709' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/soc/soc-devres.c' language='LANG_C89'>
+      <class-decl name='snd_dmaengine_pcm_config' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/sound/dmaengine_pcm.h' line='126' column='1' id='a1eb8a6b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare_slave_config' type-id='487dad0e' visibility='default' filepath='include/sound/dmaengine_pcm.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='compat_request_channel' type-id='8eba4549' visibility='default' filepath='include/sound/dmaengine_pcm.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='process' type-id='7e4306d7' visibility='default' filepath='include/sound/dmaengine_pcm.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='compat_filter_fn' type-id='55f53546' visibility='default' filepath='include/sound/dmaengine_pcm.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dma_dev' type-id='fa0b179b' visibility='default' filepath='include/sound/dmaengine_pcm.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='chan_names' type-id='35e20666' visibility='default' filepath='include/sound/dmaengine_pcm.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pcm_hardware' type-id='d661a615' visibility='default' filepath='include/sound/dmaengine_pcm.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='prealloc_buffer_size' type-id='f0981eeb' visibility='default' filepath='include/sound/dmaengine_pcm.h' line='141' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='a1eb8a6b' const='yes' id='7bd1ccce'/>
+      <pointer-type-def type-id='7bd1ccce' size-in-bits='64' id='cf458aec'/>
+      <pointer-type-def type-id='de10cebd' size-in-bits='64' id='8eba4549'/>
+      <pointer-type-def type-id='186b315c' size-in-bits='64' id='487dad0e'/>
+      <function-decl name='devm_snd_soc_register_card' mangled-name='devm_snd_soc_register_card' filepath='sound/soc/soc-devres.c' line='63' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_snd_soc_register_card'>
+        <parameter type-id='fa0b179b' name='dev' filepath='sound/soc/soc-devres.c' line='63' column='1'/>
+        <parameter type-id='3059cd0b' name='card' filepath='sound/soc/soc-devres.c' line='63' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_snd_dmaengine_pcm_register' mangled-name='devm_snd_dmaengine_pcm_register' filepath='sound/soc/soc-devres.c' line='100' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_snd_dmaengine_pcm_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='sound/soc/soc-devres.c' line='100' column='1'/>
+        <parameter type-id='cf458aec' name='config' filepath='sound/soc/soc-devres.c' line='101' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='sound/soc/soc-devres.c' line='101' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='4b09229d' size-in-bits='64' id='d661a615'/>
+      <function-type size-in-bits='64' id='de10cebd'>
+        <parameter type-id='95316552'/>
+        <parameter type-id='06b2cd14'/>
+        <return type-id='27f3f5d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='186b315c'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='363a995e'/>
+        <parameter type-id='4f22192a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <qualified-type-def type-id='eacd353c' const='yes' id='4b09229d'/>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/soc/soc-generic-dmaengine-pcm.c' language='LANG_C89'>
+      <function-decl name='snd_dmaengine_pcm_prepare_slave_config' mangled-name='snd_dmaengine_pcm_prepare_slave_config' filepath='sound/soc/soc-generic-dmaengine-pcm.c' line='58' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_dmaengine_pcm_prepare_slave_config'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/soc/soc-generic-dmaengine-pcm.c' line='58' column='1'/>
+        <parameter type-id='363a995e' name='params' filepath='sound/soc/soc-generic-dmaengine-pcm.c' line='59' column='1'/>
+        <parameter type-id='4f22192a' name='slave_config' filepath='sound/soc/soc-generic-dmaengine-pcm.c' line='59' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/soc/soc-io.c' language='LANG_C89'>
+      <function-decl name='snd_soc_component_read32' mangled-name='snd_soc_component_read32' filepath='sound/soc/soc-io.c' line='41' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_read32'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-io.c' line='41' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='sound/soc/soc-io.c' line='42' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_write' mangled-name='snd_soc_component_write' filepath='sound/soc/soc-io.c' line='63' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_write'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-io.c' line='63' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='sound/soc/soc-io.c' line='64' column='1'/>
+        <parameter type-id='f0981eeb' name='val' filepath='sound/soc/soc-io.c' line='64' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_update_bits_async' mangled-name='snd_soc_component_update_bits_async' filepath='sound/soc/soc-io.c' line='145' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_update_bits_async'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-io.c' line='145' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='sound/soc/soc-io.c' line='146' column='1'/>
+        <parameter type-id='f0981eeb' name='mask' filepath='sound/soc/soc-io.c' line='146' column='1'/>
+        <parameter type-id='f0981eeb' name='val' filepath='sound/soc/soc-io.c' line='146' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/soc/soc-jack.c' language='LANG_C89'>
+      <class-decl name='snd_soc_jack_pin' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='647' column='1' id='ad7e730a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pin' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mask' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='invert' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='651' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_jack_gpio' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='689' column='1' id='773e8ab8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gpio' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='idx' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gpiod_dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='report' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='invert' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='debounce_time' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='wake' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='jack' type-id='12a060a4' visibility='default' filepath='include/sound/soc.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='work' type-id='5ad6e0ef' visibility='default' filepath='include/sound/soc.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='pm_notifier' type-id='9b08f7cd' visibility='default' filepath='include/sound/soc.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='desc' type-id='26760480' visibility='default' filepath='include/sound/soc.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='jack_status_check' type-id='b9b212f5' visibility='default' filepath='include/sound/soc.h' line='707' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='773e8ab8' size-in-bits='64' id='3c269e0e'/>
+      <pointer-type-def type-id='ad7e730a' size-in-bits='64' id='fcd78288'/>
+      <function-decl name='snd_soc_card_jack_new' mangled-name='snd_soc_card_jack_new' filepath='sound/soc/soc-jack.c' line='41' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_card_jack_new'>
+        <parameter type-id='3059cd0b' name='card' filepath='sound/soc/soc-jack.c' line='41' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='sound/soc/soc-jack.c' line='41' column='1'/>
+        <parameter type-id='95e97e5e' name='type' filepath='sound/soc/soc-jack.c' line='41' column='1'/>
+        <parameter type-id='12a060a4' name='jack' filepath='sound/soc/soc-jack.c' line='42' column='1'/>
+        <parameter type-id='fcd78288' name='pins' filepath='sound/soc/soc-jack.c' line='42' column='1'/>
+        <parameter type-id='f0981eeb' name='num_pins' filepath='sound/soc/soc-jack.c' line='43' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_jack_report' mangled-name='snd_soc_jack_report' filepath='sound/soc/soc-jack.c' line='78' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_jack_report'>
+        <parameter type-id='12a060a4' name='jack' filepath='sound/soc/soc-jack.c' line='78' column='1'/>
+        <parameter type-id='95e97e5e' name='status' filepath='sound/soc/soc-jack.c' line='78' column='1'/>
+        <parameter type-id='95e97e5e' name='mask' filepath='sound/soc/soc-jack.c' line='78' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_soc_jack_add_gpios' mangled-name='snd_soc_jack_add_gpios' filepath='sound/soc/soc-jack.c' line='350' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_jack_add_gpios'>
+        <parameter type-id='12a060a4' name='jack' filepath='sound/soc/soc-jack.c' line='350' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='sound/soc/soc-jack.c' line='350' column='1'/>
+        <parameter type-id='3c269e0e' name='gpios' filepath='sound/soc/soc-jack.c' line='351' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/soc/soc-ops.c' language='LANG_C89'>
+      <function-decl name='snd_soc_info_enum_double' mangled-name='snd_soc_info_enum_double' filepath='sound/soc/soc-ops.c' line='40' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_info_enum_double'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='40' column='1'/>
+        <parameter type-id='0e291009' name='uinfo' filepath='sound/soc/soc-ops.c' line='41' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_get_enum_double' mangled-name='snd_soc_get_enum_double' filepath='sound/soc/soc-ops.c' line='59' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_get_enum_double'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='59' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='60' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_put_enum_double' mangled-name='snd_soc_put_enum_double' filepath='sound/soc/soc-ops.c' line='93' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_put_enum_double'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='93' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='94' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_info_volsw' mangled-name='snd_soc_info_volsw' filepath='sound/soc/soc-ops.c' line='181' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_info_volsw'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='181' column='1'/>
+        <parameter type-id='0e291009' name='uinfo' filepath='sound/soc/soc-ops.c' line='182' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_info_volsw_sx' mangled-name='snd_soc_info_volsw_sx' filepath='sound/soc/soc-ops.c' line='216' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_info_volsw_sx'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='216' column='1'/>
+        <parameter type-id='0e291009' name='uinfo' filepath='sound/soc/soc-ops.c' line='217' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_get_volsw' mangled-name='snd_soc_get_volsw' filepath='sound/soc/soc-ops.c' line='242' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_get_volsw'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='242' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='243' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_put_volsw' mangled-name='snd_soc_put_volsw' filepath='sound/soc/soc-ops.c' line='302' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_put_volsw'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='302' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='303' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_get_volsw_sx' mangled-name='snd_soc_get_volsw_sx' filepath='sound/soc/soc-ops.c' line='364' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_get_volsw_sx'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='364' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='365' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_put_volsw_sx' mangled-name='snd_soc_put_volsw_sx' filepath='sound/soc/soc-ops.c' line='408' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_put_volsw_sx'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='408' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='409' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_info_volsw_range' mangled-name='snd_soc_info_volsw_range' filepath='sound/soc/soc-ops.c' line='455' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_info_volsw_range'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='455' column='1'/>
+        <parameter type-id='0e291009' name='uinfo' filepath='sound/soc/soc-ops.c' line='456' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_put_volsw_range' mangled-name='snd_soc_put_volsw_range' filepath='sound/soc/soc-ops.c' line='485' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_put_volsw_range'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='485' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='486' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_get_volsw_range' mangled-name='snd_soc_get_volsw_range' filepath='sound/soc/soc-ops.c' line='537' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_get_volsw_range'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='537' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='538' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_bytes_info_ext' mangled-name='snd_soc_bytes_info_ext' filepath='sound/soc/soc-ops.c' line='755' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_bytes_info_ext'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='755' column='1'/>
+        <parameter type-id='0e291009' name='ucontrol' filepath='sound/soc/soc-ops.c' line='756' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_bytes_tlv_callback' mangled-name='snd_soc_bytes_tlv_callback' filepath='sound/soc/soc-ops.c' line='767' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_bytes_tlv_callback'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='767' column='1'/>
+        <parameter type-id='95e97e5e' name='op_flag' filepath='sound/soc/soc-ops.c' line='767' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='sound/soc/soc-ops.c' line='768' column='1'/>
+        <parameter type-id='807869d3' name='tlv' filepath='sound/soc/soc-ops.c' line='768' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_info_xr_sx' mangled-name='snd_soc_info_xr_sx' filepath='sound/soc/soc-ops.c' line='799' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_info_xr_sx'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='799' column='1'/>
+        <parameter type-id='0e291009' name='uinfo' filepath='sound/soc/soc-ops.c' line='800' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_get_xr_sx' mangled-name='snd_soc_get_xr_sx' filepath='sound/soc/soc-ops.c' line='826' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_get_xr_sx'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='826' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='827' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_put_xr_sx' mangled-name='snd_soc_put_xr_sx' filepath='sound/soc/soc-ops.c' line='875' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_put_xr_sx'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='875' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='876' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/soc/soc-topology.c' language='LANG_C89'>
+      <class-decl name='snd_soc_tplg_widget_events' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='101' column='1' id='9cec1ba7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='1dc6a898' visibility='default' filepath='include/sound/soc-topology.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='event_handler' type-id='af92413d' visibility='default' filepath='include/sound/soc-topology.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='9cec1ba7' const='yes' id='1a35d82e'/>
+      <pointer-type-def type-id='1a35d82e' size-in-bits='64' id='46c30e4c'/>
+      <function-decl name='snd_soc_tplg_widget_bind_event' mangled-name='snd_soc_tplg_widget_bind_event' filepath='sound/soc/soc-topology.c' line='660' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_tplg_widget_bind_event'>
+        <parameter type-id='810606ec' name='w' filepath='sound/soc/soc-topology.c' line='660' column='1'/>
+        <parameter type-id='46c30e4c' name='events' filepath='sound/soc/soc-topology.c' line='661' column='1'/>
+        <parameter type-id='95e97e5e' name='num_events' filepath='sound/soc/soc-topology.c' line='662' column='1'/>
+        <parameter type-id='1dc6a898' name='event_type' filepath='sound/soc/soc-topology.c' line='662' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_tplg_component_load' mangled-name='snd_soc_tplg_component_load' filepath='sound/soc/soc-topology.c' line='2715' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_tplg_component_load'>
+        <parameter type-id='807b7702' name='comp' filepath='sound/soc/soc-topology.c' line='2715' column='1'/>
+        <parameter type-id='76e6e22f' name='ops' filepath='sound/soc/soc-topology.c' line='2716' column='1'/>
+        <parameter type-id='fce0537d' name='fw' filepath='sound/soc/soc-topology.c' line='2716' column='1'/>
+        <parameter type-id='19c2251e' name='id' filepath='sound/soc/soc-topology.c' line='2716' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/soc/soc-utils.c' language='LANG_C89'>
+      <qualified-type-def type-id='eacd353c' const='yes' id='4b09229d'/>
+      <pointer-type-def type-id='4b09229d' size-in-bits='64' id='d661a615'/>
+      <function-decl name='snd_soc_params_to_bclk' mangled-name='snd_soc_params_to_bclk' filepath='sound/soc/soc-utils.c' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_params_to_bclk'>
+        <parameter type-id='363a995e' name='params' filepath='sound/soc/soc-utils.c' line='42' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_snd_soc_register_component' mangled-name='devm_snd_soc_register_component' filepath='include/sound/soc.h' line='454' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_snd_soc_register_component'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='f030c2b8'/>
+        <parameter type-id='763d26a2'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_set_runtime_hwparams' mangled-name='snd_soc_set_runtime_hwparams' filepath='include/sound/soc.h' line='502' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_set_runtime_hwparams'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='d661a615'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/usb/card.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='1536' id='70cd8d02'>
+        <subrange length='48' type-id='7ff19f0f' id='8f6d2a81'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='dc7e95e2' size-in-bits='23808' id='d6500b03'>
+        <subrange length='12' type-id='7ff19f0f' id='84827bdc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='6ad85953' size-in-bits='18816' id='d6640cfa'>
+        <subrange length='12' type-id='7ff19f0f' id='84827bdc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='bfbf7968' size-in-bits='3968' id='ab779f6c'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f92235e' size-in-bits='1536' id='fe4ded8f'>
+        <subrange length='48' type-id='7ff19f0f' id='8f6d2a81'/>
+      </array-type-def>
+      <class-decl name='snd_usb_substream' size-in-bits='1984' is-struct='yes' visibility='default' filepath='sound/usb/card.h' line='122' column='1' id='bfbf7968'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stream' type-id='d24a1720' visibility='default' filepath='sound/usb/card.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='25e60cb2' visibility='default' filepath='sound/usb/card.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pcm_substream' type-id='06b2cd14' visibility='default' filepath='sound/usb/card.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='direction' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='interface' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='endpoint' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cur_audiofmt' type-id='1102bd14' visibility='default' filepath='sound/usb/card.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='str_pd' type-id='ec0e067e' visibility='default' filepath='sound/usb/card.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pcm_format' type-id='67fa9bd5' visibility='default' filepath='sound/usb/card.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='channels' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='channels_max' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='cur_rate' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='period_bytes' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='period_frames' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='buffer_periods' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='altset_idx' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='txfr_quirk' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='tx_length_quirk' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='fmt_type' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='pkt_offset_adj' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='stream_offset_adj' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='running' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='hwptr_done' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='transfer_done' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='frame_limit' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ep_num' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='data_endpoint' type-id='d59ce2e7' visibility='default' filepath='sound/usb/card.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sync_endpoint' type-id='d59ce2e7' visibility='default' filepath='sound/usb/card.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='sound/usb/card.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='need_setup_ep' type-id='b50a4934' visibility='default' filepath='sound/usb/card.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1224'>
+          <var-decl name='need_setup_fmt' type-id='b50a4934' visibility='default' filepath='sound/usb/card.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='speed' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='formats' type-id='91ce1af9' visibility='default' filepath='sound/usb/card.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='num_formats' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='fmt_list' type-id='72f469ec' visibility='default' filepath='sound/usb/card.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='rate_list' type-id='f5f6e55e' visibility='default' filepath='sound/usb/card.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='sound/usb/card.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='last_frame_number' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='last_delay' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='dsd_dop' type-id='50842758' visibility='default' filepath='sound/usb/card.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='trigger_tstamp_pending_update' type-id='b50a4934' visibility='default' filepath='sound/usb/card.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='media_ctl' type-id='74d5ef65' visibility='default' filepath='sound/usb/card.h' line='176' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_usb_stream' size-in-bits='4288' is-struct='yes' visibility='default' filepath='sound/usb/card.h' line='179' column='1' id='3921bd52'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chip' type-id='d86551c2' visibility='default' filepath='sound/usb/card.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pcm' type-id='4c9f335b' visibility='default' filepath='sound/usb/card.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pcm_index' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='fmt_type' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='substream' type-id='ab779f6c' visibility='default' filepath='sound/usb/card.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='sound/usb/card.h' line='185' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_usb_audio' size-in-bits='2304' is-struct='yes' visibility='default' filepath='sound/usb/usbaudio.h' line='22' column='1' id='f4c3b244'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='sound/usb/usbaudio.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='25e60cb2' visibility='default' filepath='sound/usb/usbaudio.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='card' type-id='52704eb7' visibility='default' filepath='sound/usb/usbaudio.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pm_intf' type-id='8bf48c31' visibility='default' filepath='sound/usb/usbaudio.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='usb_id' type-id='19c2251e' visibility='default' filepath='sound/usb/usbaudio.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='sound/usb/usbaudio.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='system_suspend' type-id='f0981eeb' visibility='default' filepath='sound/usb/usbaudio.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='active' type-id='49178f86' visibility='default' filepath='sound/usb/usbaudio.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='shutdown' type-id='49178f86' visibility='default' filepath='sound/usb/usbaudio.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='usage_count' type-id='49178f86' visibility='default' filepath='sound/usb/usbaudio.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='shutdown_wait' type-id='b5ab048f' visibility='default' filepath='sound/usb/usbaudio.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='txfr_quirk' type-id='f0981eeb' visibility='default' filepath='sound/usb/usbaudio.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='tx_length_quirk' type-id='f0981eeb' visibility='default' filepath='sound/usb/usbaudio.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='setup_fmt_after_resume_quirk' type-id='f0981eeb' visibility='default' filepath='sound/usb/usbaudio.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='num_interfaces' type-id='95e97e5e' visibility='default' filepath='sound/usb/usbaudio.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='num_suspended_intf' type-id='95e97e5e' visibility='default' filepath='sound/usb/usbaudio.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='sample_rate_read_error' type-id='95e97e5e' visibility='default' filepath='sound/usb/usbaudio.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='badd_profile' type-id='95e97e5e' visibility='default' filepath='sound/usb/usbaudio.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='pcm_list' type-id='72f469ec' visibility='default' filepath='sound/usb/usbaudio.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ep_list' type-id='72f469ec' visibility='default' filepath='sound/usb/usbaudio.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='pcm_devs' type-id='95e97e5e' visibility='default' filepath='sound/usb/usbaudio.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='midi_list' type-id='72f469ec' visibility='default' filepath='sound/usb/usbaudio.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='mixer_list' type-id='72f469ec' visibility='default' filepath='sound/usb/usbaudio.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='setup' type-id='95e97e5e' visibility='default' filepath='sound/usb/usbaudio.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='autoclock' type-id='b50a4934' visibility='default' filepath='sound/usb/usbaudio.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1704'>
+          <var-decl name='keep_iface' type-id='b50a4934' visibility='default' filepath='sound/usb/usbaudio.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='ctrl_intf' type-id='2ac920d2' visibility='default' filepath='sound/usb/usbaudio.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='media_dev' type-id='e2929c1c' visibility='default' filepath='sound/usb/usbaudio.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='ctl_intf_media_devnode' type-id='8114c6c9' visibility='default' filepath='sound/usb/usbaudio.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='dev_lock' type-id='925167dc' visibility='default' filepath='sound/usb/usbaudio.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='card_num' type-id='95e97e5e' visibility='default' filepath='sound/usb/usbaudio.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='disconnect_cb' type-id='9272847f' visibility='default' filepath='sound/usb/usbaudio.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='audioformat' size-in-bits='832' is-struct='yes' visibility='default' filepath='sound/usb/card.h' line='14' column='1' id='3abbb22e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='sound/usb/card.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='formats' type-id='91ce1af9' visibility='default' filepath='sound/usb/card.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='channels' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='fmt_type' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fmt_bits' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='frame_size' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='iface' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='altsetting' type-id='002ac4a6' visibility='default' filepath='sound/usb/card.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='altset_idx' type-id='002ac4a6' visibility='default' filepath='sound/usb/card.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='attributes' type-id='002ac4a6' visibility='default' filepath='sound/usb/card.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='376'>
+          <var-decl name='endpoint' type-id='002ac4a6' visibility='default' filepath='sound/usb/card.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ep_attr' type-id='002ac4a6' visibility='default' filepath='sound/usb/card.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='datainterval' type-id='002ac4a6' visibility='default' filepath='sound/usb/card.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='protocol' type-id='002ac4a6' visibility='default' filepath='sound/usb/card.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='maxpacksize' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rates' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='rate_min' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rate_max' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='nr_rates' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rate_table' type-id='807869d3' visibility='default' filepath='sound/usb/card.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='clock' type-id='002ac4a6' visibility='default' filepath='sound/usb/card.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='chmap' type-id='a149768b' visibility='default' filepath='sound/usb/card.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dsd_dop' type-id='b50a4934' visibility='default' filepath='sound/usb/card.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='776'>
+          <var-decl name='dsd_bitrev' type-id='b50a4934' visibility='default' filepath='sound/usb/card.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='dsd_raw' type-id='b50a4934' visibility='default' filepath='sound/usb/card.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_usb_power_domain' size-in-bits='96' is-struct='yes' visibility='default' filepath='sound/usb/power.h' line='5' column='1' id='f709b458'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pd_id' type-id='95e97e5e' visibility='default' filepath='sound/usb/power.h' line='6' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pd_d1d0_rec' type-id='95e97e5e' visibility='default' filepath='sound/usb/power.h' line='7' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pd_d2d0_rec' type-id='95e97e5e' visibility='default' filepath='sound/usb/power.h' line='8' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_usb_endpoint' size-in-bits='44800' is-struct='yes' visibility='default' filepath='sound/usb/card.h' line='56' column='1' id='ae79630f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chip' type-id='d86551c2' visibility='default' filepath='sound/usb/card.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='use_count' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ep_num' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='sound/usb/card.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='prepare_data_urb' type-id='5ae15890' visibility='default' filepath='sound/usb/card.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='retire_data_urb' type-id='5ae15890' visibility='default' filepath='sound/usb/card.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='data_subs' type-id='6b1642ae' visibility='default' filepath='sound/usb/card.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sync_master' type-id='d59ce2e7' visibility='default' filepath='sound/usb/card.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sync_slave' type-id='d59ce2e7' visibility='default' filepath='sound/usb/card.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='urb' type-id='d6500b03' visibility='default' filepath='sound/usb/card.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24384'>
+          <var-decl name='next_packet' type-id='d6640cfa' visibility='default' filepath='sound/usb/card.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43200'>
+          <var-decl name='next_packet_read_pos' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43232'>
+          <var-decl name='next_packet_write_pos' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43264'>
+          <var-decl name='ready_playback_urbs' type-id='72f469ec' visibility='default' filepath='sound/usb/card.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43392'>
+          <var-decl name='nurbs' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43456'>
+          <var-decl name='active_mask' type-id='7359adad' visibility='default' filepath='sound/usb/card.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43520'>
+          <var-decl name='unlink_mask' type-id='7359adad' visibility='default' filepath='sound/usb/card.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43584'>
+          <var-decl name='syncbuf' type-id='26a90f95' visibility='default' filepath='sound/usb/card.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43648'>
+          <var-decl name='sync_dma' type-id='cf29c9b3' visibility='default' filepath='sound/usb/card.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43712'>
+          <var-decl name='pipe' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43744'>
+          <var-decl name='freqn' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43776'>
+          <var-decl name='freqm' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43808'>
+          <var-decl name='freqshift' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43840'>
+          <var-decl name='freqmax' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43872'>
+          <var-decl name='phase' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43904'>
+          <var-decl name='maxpacksize' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43936'>
+          <var-decl name='maxframesize' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43968'>
+          <var-decl name='max_urb_frames' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44000'>
+          <var-decl name='curpacksize' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44032'>
+          <var-decl name='curframesize' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44064'>
+          <var-decl name='syncmaxsize' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='fill_max' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='tenor_fb_quirk' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44128'>
+          <var-decl name='datainterval' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44160'>
+          <var-decl name='syncinterval' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44192'>
+          <var-decl name='silence_value' type-id='002ac4a6' visibility='default' filepath='sound/usb/card.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44224'>
+          <var-decl name='stride' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44256'>
+          <var-decl name='iface' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44288'>
+          <var-decl name='altsetting' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44320'>
+          <var-decl name='skip_packets' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44352'>
+          <var-decl name='is_implicit_feedback' type-id='b50a4934' visibility='default' filepath='sound/usb/card.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44384'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='sound/usb/card.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44416'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='sound/usb/card.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44544'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='sound/usb/card.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44608'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='sound/usb/card.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44672'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='sound/usb/card.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44736'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='sound/usb/card.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_urb_ctx' size-in-bits='1984' is-struct='yes' visibility='default' filepath='sound/usb/card.h' line='45' column='1' id='dc7e95e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='urb' type-id='ab85b8f2' visibility='default' filepath='sound/usb/card.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='buffer_size' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='subs' type-id='6b1642ae' visibility='default' filepath='sound/usb/card.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ep' type-id='d59ce2e7' visibility='default' filepath='sound/usb/card.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='packets' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='packet_size' type-id='70cd8d02' visibility='default' filepath='sound/usb/card.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='ready_list' type-id='72f469ec' visibility='default' filepath='sound/usb/card.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_usb_packet_info' size-in-bits='1568' is-struct='yes' visibility='default' filepath='sound/usb/card.h' line='75' column='1' id='6ad85953'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='packet_size' type-id='fe4ded8f' visibility='default' filepath='sound/usb/card.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='packets' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='sound/usb/card.h' line='169' column='1' id='50842758'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='marker' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='channel' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='byte_idx' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_ctl' size-in-bits='3968' is-struct='yes' visibility='default' filepath='sound/usb/media.h' line='28' column='1' id='b8cdc165'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='media_dev' type-id='e2929c1c' visibility='default' filepath='sound/usb/media.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='media_entity' type-id='889856f7' visibility='default' filepath='sound/usb/media.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='intf_devnode' type-id='8114c6c9' visibility='default' filepath='sound/usb/media.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='intf_link' type-id='b4de78ea' visibility='default' filepath='sound/usb/media.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='media_pad' type-id='48b94b91' visibility='default' filepath='sound/usb/media.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='media_pipe' type-id='2783658a' visibility='default' filepath='sound/usb/media.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3abbb22e' size-in-bits='64' id='1102bd14'/>
+      <pointer-type-def type-id='b8cdc165' size-in-bits='64' id='74d5ef65'/>
+      <pointer-type-def type-id='09098b3b' size-in-bits='64' id='a149768b'/>
+      <pointer-type-def type-id='f4c3b244' size-in-bits='64' id='d86551c2'/>
+      <pointer-type-def type-id='d86551c2' size-in-bits='64' id='8f7ff038'/>
+      <pointer-type-def type-id='ae79630f' size-in-bits='64' id='d59ce2e7'/>
+      <pointer-type-def type-id='f709b458' size-in-bits='64' id='ec0e067e'/>
+      <pointer-type-def type-id='3921bd52' size-in-bits='64' id='d24a1720'/>
+      <pointer-type-def type-id='bfbf7968' size-in-bits='64' id='6b1642ae'/>
+      <pointer-type-def type-id='895d5e13' size-in-bits='64' id='9272847f'/>
+      <pointer-type-def type-id='74f4b006' size-in-bits='64' id='5ae15890'/>
+      <function-decl name='find_snd_usb_substream' mangled-name='find_snd_usb_substream' filepath='sound/usb/card.c' line='222' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='find_snd_usb_substream'>
+        <parameter type-id='f0981eeb' name='card_num' filepath='sound/usb/card.c' line='222' column='1'/>
+        <parameter type-id='f0981eeb' name='pcm_idx' filepath='sound/usb/card.c' line='223' column='1'/>
+        <parameter type-id='f0981eeb' name='direction' filepath='sound/usb/card.c' line='223' column='1'/>
+        <parameter type-id='8f7ff038' name='uchip' filepath='sound/usb/card.c' line='224' column='1'/>
+        <parameter type-id='9272847f' name='disconnect_cb' filepath='sound/usb/card.c' line='224' column='1'/>
+        <return type-id='6b1642ae'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='895d5e13'>
+        <parameter type-id='d86551c2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='74f4b006'>
+        <parameter type-id='6b1642ae'/>
+        <parameter type-id='ab85b8f2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='sound/usb/pcm.c' language='LANG_C89'>
+      <function-decl name='snd_usb_enable_audio_stream' mangled-name='snd_usb_enable_audio_stream' filepath='sound/usb/pcm.c' line='669' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_usb_enable_audio_stream'>
+        <parameter type-id='6b1642ae' name='subs' filepath='sound/usb/pcm.c' line='669' column='1'/>
+        <parameter type-id='95e97e5e' name='datainterval' filepath='sound/usb/pcm.c' line='670' column='1'/>
+        <parameter type-id='b50a4934' name='enable' filepath='sound/usb/pcm.c' line='670' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='virt/kvm/arm/vgic/vgic-init.c' language='LANG_C89'>
+      <function-decl name='debugfs_create_file' mangled-name='debugfs_create_file' filepath='include/linux/debugfs.h' line='63' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_file'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='61758ee5'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='free_percpu_irq' mangled-name='free_percpu_irq' filepath='include/linux/interrupt.h' line='176' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_percpu_irq'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='enable_percpu_irq' mangled-name='enable_percpu_irq' filepath='include/linux/interrupt.h' line='227' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='enable_percpu_irq'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='disable_percpu_irq' mangled-name='disable_percpu_irq' filepath='include/linux/interrupt.h' line='225' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='disable_percpu_irq'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr version='1.0' address-size='64' path='virt/kvm/arm/vgic/vgic.c' language='LANG_C89'>
+      <pointer-type-def type-id='8857030d' size-in-bits='64' id='120d5729'/>
+      <function-decl name='irq_set_irqchip_state' mangled-name='irq_set_irqchip_state' filepath='include/linux/interrupt.h' line='472' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_irqchip_state'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='0187da1b'/>
+        <parameter type-id='c894953d'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='list_sort' mangled-name='list_sort' filepath='include/linux/list_sort.h' line='10' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_sort'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='e84b031a'/>
+        <parameter type-id='120d5729'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='8857030d'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='e84b031a'/>
+        <parameter type-id='e84b031a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+  </abi-corpus>
+</abi-corpus-group>
+
+<!--
+     libabigail: abidw: 2.0.0-c1db8a7b-soong
+     built with: clang: Android (7037181, based on r407598) clang version 12.0.1 (https://android.googlesource.com/toolchain/llvm-project 91322a2ee9dd036d10e1529650dc3ee118dd26c0)
+-->
diff --git a/android/abi_gki_aarch64_db845c b/android/abi_gki_aarch64_db845c
new file mode 100644
index 0000000..08fabbb
--- /dev/null
+++ b/android/abi_gki_aarch64_db845c
@@ -0,0 +1,1427 @@
+[abi_symbol_list]
+# commonly used symbols
+  add_uevent_var
+  alloc_workqueue
+  __arch_copy_from_user
+  __arch_copy_to_user
+  arm64_const_caps_ready
+  blocking_notifier_call_chain
+  blocking_notifier_chain_register
+  blocking_notifier_chain_unregister
+  bpf_trace_run4
+  bpf_trace_run5
+  bus_register
+  bus_unregister
+  cancel_delayed_work_sync
+  cancel_work_sync
+  capable
+  __cfi_slowpath
+  __check_object_size
+  clk_bulk_disable
+  clk_bulk_enable
+  clk_bulk_prepare
+  clk_bulk_unprepare
+  clk_disable
+  clk_enable
+  clk_fixed_factor_ops
+  clk_fixed_rate_ops
+  clk_get
+  clk_get_rate
+  clk_hw_get_parent
+  clk_hw_get_rate
+  clk_hw_register
+  clk_hw_unregister
+  clk_prepare
+  clk_put
+  clk_round_rate
+  clk_set_rate
+  clk_sync_state
+  clk_unprepare
+  complete
+  complete_all
+  completion_done
+  __const_udelay
+  consume_skb
+  _copy_from_iter_full
+  cpu_hwcap_keys
+  cpu_hwcaps
+  cpu_number
+  __cpu_online_mask
+  crc32_le
+  debugfs_create_dir
+  debugfs_create_file
+  debugfs_create_u32
+  debugfs_create_x32
+  debugfs_remove_recursive
+  default_llseek
+  delayed_work_timer_fn
+  del_timer_sync
+  destroy_workqueue
+  dev_driver_string
+  _dev_err
+  dev_get_regmap
+  device_for_each_child
+  device_init_wakeup
+  device_property_read_u32_array
+  device_register
+  device_set_wakeup_capable
+  device_unregister
+  _dev_info
+  __dev_kfree_skb_any
+  devm_add_action
+  devm_clk_bulk_get
+  devm_clk_bulk_get_all
+  devm_clk_get
+  devm_clk_hw_register
+  devm_gpiod_get
+  devm_gpiod_get_optional
+  devm_ioremap
+  devm_ioremap_resource
+  devm_ioremap_wc
+  devm_iounmap
+  devm_kasprintf
+  devm_kfree
+  devm_kmalloc
+  devm_memremap
+  devm_of_clk_add_hw_provider
+  __devm_of_phy_provider_register
+  devm_of_platform_populate
+  devm_phy_create
+  devm_pinctrl_register
+  devm_platform_ioremap_resource
+  __devm_regmap_init_mmio_clk
+  devm_regulator_bulk_get
+  devm_regulator_get
+  devm_regulator_register
+  devm_request_threaded_irq
+  __devm_reset_control_get
+  devm_reset_controller_register
+  devm_watchdog_register_device
+  _dev_notice
+  dev_pm_domain_attach_by_name
+  dev_pm_domain_detach
+  dev_pm_genpd_set_performance_state
+  dev_pm_opp_add
+  dev_pm_opp_get_level
+  dev_pm_opp_get_opp_count
+  dev_set_name
+  _dev_warn
+  disable_irq
+  divider_get_val
+  divider_recalc_rate
+  divider_round_rate_parent
+  dma_alloc_attrs
+  dma_buf_export
+  dma_direct_map_page
+  dma_direct_map_sg
+  dma_direct_sync_single_for_device
+  dma_direct_unmap_page
+  dma_direct_unmap_sg
+  dma_free_attrs
+  dmam_alloc_attrs
+  dma_release_channel
+  dma_request_chan
+  dma_set_coherent_mask
+  dma_set_mask
+  do_SAK
+  driver_register
+  driver_unregister
+  drm_add_edid_modes
+  drm_atomic_helper_connector_destroy_state
+  drm_atomic_helper_connector_duplicate_state
+  drm_atomic_helper_connector_reset
+  drm_connector_attach_encoder
+  drm_connector_cleanup
+  drm_connector_init
+  drm_connector_update_edid_property
+  drm_dev_printk
+  drm_err
+  drm_hdmi_avi_infoframe_from_display_mode
+  drm_helper_probe_single_connector_modes
+  drm_mode_vrefresh
+  enable_irq
+  eth_validate_addr
+  event_triggers_call
+  find_next_bit
+  find_next_zero_bit
+  finish_wait
+  flush_workqueue
+  free_irq
+  __free_pages
+  generic_handle_irq
+  generic_mii_ioctl
+  get_device
+  get_random_bytes
+  gpiochip_add_data_with_key
+  gpiochip_add_pin_range
+  gpiochip_generic_free
+  gpiochip_generic_request
+  gpiochip_get_data
+  gpiochip_remove
+  gpiod_set_value_cansleep
+  handle_level_irq
+  handle_nested_irq
+  hdmi_audio_infoframe_init
+  i2c_add_adapter
+  i2c_del_adapter
+  idr_alloc
+  idr_alloc_cyclic
+  idr_destroy
+  idr_find
+  idr_get_next
+  idr_remove
+  ieee80211_get_channel_khz
+  init_timer_key
+  init_wait_entry
+  __init_waitqueue_head
+  iommu_present
+  __ioread32_copy
+  __ioremap
+  iounmap
+  __iowrite32_copy
+  irq_chip_mask_parent
+  irq_chip_set_type_parent
+  irq_chip_unmask_parent
+  __irq_domain_add
+  irq_domain_free_irqs_common
+  irq_domain_remove
+  irq_domain_xlate_twocell
+  irq_find_mapping
+  irq_find_matching_fwspec
+  irq_modify_status
+  irq_of_parse_and_map
+  irq_set_chained_handler_and_data
+  irq_set_chip_and_handler_name
+  irq_set_chip_data
+  irq_set_irq_wake
+  irq_to_desc
+  jiffies
+  kfree
+  kfree_skb
+  kimage_vaddr
+  __kmalloc
+  kmalloc_caches
+  kmalloc_order_trace
+  kmem_cache_alloc_trace
+  kmemdup
+  kstrdup
+  kthread_create_on_node
+  ktime_get
+  ktime_get_mono_fast_ns
+  __list_add_valid
+  __list_del_entry_valid
+  mbox_client_txdone
+  mbox_free_channel
+  mbox_request_channel
+  mbox_send_message
+  memcpy
+  __memcpy_fromio
+  memmove
+  memremap
+  memset
+  memstart_addr
+  mii_ethtool_gset
+  mii_nway_restart
+  misc_deregister
+  misc_register
+  mod_timer
+  module_layout
+  __msecs_to_jiffies
+  msleep
+  msm_pinctrl_probe
+  msm_pinctrl_remove
+  __mutex_init
+  mutex_lock
+  mutex_unlock
+  napi_complete_done
+  napi_disable
+  __napi_schedule
+  napi_schedule_prep
+  __netdev_alloc_skb
+  netdev_info
+  netdev_warn
+  netif_napi_add
+  netif_napi_del
+  nvmem_cell_read
+  of_address_to_resource
+  of_alias_get_id
+  of_clk_add_hw_provider
+  of_clk_del_provider
+  of_clk_hw_onecell_get
+  of_clk_hw_simple_get
+  of_clk_set_defaults
+  of_device_get_match_data
+  of_device_is_compatible
+  of_device_uevent_modalias
+  of_find_property
+  of_fwnode_ops
+  of_genpd_add_provider_onecell
+  of_genpd_del_provider
+  of_get_child_by_name
+  of_get_next_available_child
+  of_get_next_child
+  of_get_property
+  of_graph_get_remote_node
+  of_iomap
+  of_irq_find_parent
+  of_match_device
+  of_match_node
+  of_parse_phandle
+  of_parse_phandle_with_fixed_args
+  of_phy_simple_xlate
+  of_platform_depopulate
+  of_platform_populate
+  of_property_count_elems_of_size
+  of_property_read_string
+  of_property_read_string_helper
+  of_property_read_u32_index
+  of_property_read_variable_u32_array
+  of_property_read_variable_u8_array
+  of_reserved_mem_lookup
+  param_ops_bool
+  param_ops_uint
+  __pci_register_driver
+  pci_unregister_driver
+  perf_trace_buf_alloc
+  perf_trace_run_bpf_submit
+  pinconf_generic_dt_node_to_map
+  pinctrl_dev_get_drvdata
+  pinctrl_pm_select_default_state
+  pinctrl_pm_select_sleep_state
+  pinctrl_utils_free_map
+  platform_bus_type
+  platform_device_register_full
+  platform_device_unregister
+  __platform_driver_register
+  platform_driver_unregister
+  platform_get_irq
+  platform_get_irq_byname
+  platform_get_resource
+  platform_get_resource_byname
+  pm_genpd_add_subdomain
+  pm_genpd_init
+  __pm_runtime_disable
+  pm_runtime_enable
+  pm_runtime_forbid
+  pm_runtime_force_resume
+  pm_runtime_force_suspend
+  __pm_runtime_idle
+  __pm_runtime_resume
+  pm_runtime_set_autosuspend_delay
+  __pm_runtime_set_status
+  __pm_runtime_suspend
+  __pm_runtime_use_autosuspend
+  preempt_schedule_notrace
+  prepare_to_wait_event
+  printk
+  pskb_expand_head
+  put_device
+  __put_task_struct
+  qcom_smem_state_register
+  qcom_smem_state_unregister
+  queue_delayed_work_on
+  queue_work_on
+  ___ratelimit
+  _raw_spin_lock
+  _raw_spin_lock_bh
+  _raw_spin_lock_irqsave
+  _raw_spin_unlock
+  _raw_spin_unlock_bh
+  _raw_spin_unlock_irqrestore
+  __rcu_read_lock
+  __rcu_read_unlock
+  rdev_get_drvdata
+  refcount_dec_and_test_checked
+  refcount_inc_checked
+  register_reboot_notifier
+  __register_rpmsg_driver
+  register_shrinker
+  regmap_bulk_read
+  regmap_bulk_write
+  regmap_read
+  regmap_update_bits_base
+  regmap_write
+  regulator_bulk_disable
+  regulator_bulk_enable
+  regulator_disable
+  regulator_enable
+  regulator_set_load
+  regulator_set_voltage
+  release_firmware
+  remap_pfn_range
+  request_firmware
+  request_firmware_into_buf
+  request_threaded_irq
+  reset_control_assert
+  reset_control_deassert
+  reset_control_reset
+  rpmsg_register_device
+  rpmsg_send
+  rpmsg_unregister_device
+  rproc_add
+  rproc_add_subdev
+  rproc_alloc
+  rproc_del
+  rproc_free
+  rproc_remove_subdev
+  sched_setscheduler
+  schedule
+  schedule_timeout
+  scnprintf
+  seq_lseek
+  seq_printf
+  seq_puts
+  seq_read
+  sg_free_table
+  sg_init_table
+  sg_next
+  simple_read_from_buffer
+  single_open
+  single_release
+  skb_clone
+  skb_dequeue
+  skb_pull
+  skb_push
+  skb_put
+  skb_queue_purge
+  skb_queue_tail
+  skb_trim
+  snprintf
+  sort
+  sprintf
+  __stack_chk_fail
+  __stack_chk_guard
+  strcmp
+  strcpy
+  strlcpy
+  strlen
+  strncpy
+  __sw_hweight32
+  __sw_hweight64
+  synchronize_irq
+  syscon_node_to_regmap
+  syscon_regmap_lookup_by_phandle
+  system_wq
+  thermal_cooling_device_unregister
+  trace_define_field
+  trace_event_buffer_commit
+  trace_event_buffer_reserve
+  trace_event_ignore_this_pid
+  trace_event_raw_init
+  trace_event_reg
+  trace_handle_return
+  trace_raw_output_prep
+  trace_seq_printf
+  tty_flip_buffer_push
+  __tty_insert_flip_char
+  uart_add_one_port
+  uart_get_baud_rate
+  uart_register_driver
+  uart_remove_one_port
+  uart_resume_port
+  uart_suspend_port
+  uart_unregister_driver
+  uart_update_timeout
+  uart_write_wakeup
+  __ubsan_handle_cfi_check_fail_abort
+  __udelay
+  unregister_reboot_notifier
+  unregister_rpmsg_driver
+  usb_deregister
+  usb_disabled
+  usbnet_disconnect
+  usbnet_get_endpoints
+  usbnet_get_msglevel
+  usbnet_get_stats64
+  usbnet_link_change
+  usbnet_nway_reset
+  usbnet_open
+  usbnet_probe
+  usbnet_read_cmd
+  usbnet_read_cmd_nopm
+  usbnet_resume
+  usbnet_set_msglevel
+  usbnet_skb_return
+  usbnet_start_xmit
+  usbnet_stop
+  usbnet_suspend
+  usbnet_tx_timeout
+  usbnet_update_max_qlen
+  usbnet_write_cmd
+  usbnet_write_cmd_async
+  usbnet_write_cmd_nopm
+  usb_register_driver
+  usleep_range
+  vmap
+  vunmap
+  wait_for_completion_timeout
+  __wake_up
+  wake_up_process
+  __warn_printk
+  watchdog_init_timeout
+
+# required by apr.ko
+  rpmsg_trysend
+
+# required by arm_smmu.ko
+  alloc_io_pgtable_ops
+  amba_bustype
+  bus_set_iommu
+  device_link_add
+  device_match_fwnode
+  devm_free_irq
+  driver_find_device
+  free_io_pgtable_ops
+  generic_device_group
+  iommu_alloc_resv_region
+  iommu_device_link
+  iommu_device_register
+  iommu_device_sysfs_add
+  iommu_device_sysfs_remove
+  iommu_device_unlink
+  iommu_device_unregister
+  iommu_dma_get_resv_regions
+  iommu_fwspec_add_ids
+  iommu_fwspec_free
+  iommu_get_dma_cookie
+  iommu_group_get_for_dev
+  iommu_group_put
+  iommu_group_ref_get
+  iommu_group_remove_device
+  iommu_put_dma_cookie
+  of_dma_is_coherent
+  param_ops_int
+  pci_bus_type
+  pci_device_group
+
+# required by asix.ko
+  eth_mac_addr
+  eth_platform_get_mac_address
+  genphy_resume
+  mdiobus_alloc_size
+  mdiobus_free
+  __mdiobus_register
+  mdiobus_unregister
+  mii_check_media
+  mii_link_ok
+  netdev_err
+  phy_connect
+  phy_disconnect
+  phy_ethtool_get_link_ksettings
+  phy_ethtool_nway_reset
+  phy_ethtool_set_link_ksettings
+  phy_mii_ioctl
+  phy_print_status
+  phy_start
+  phy_stop
+  skb_copy_expand
+  usbnet_change_mtu
+  usbnet_get_drvinfo
+  usbnet_get_link
+  usbnet_get_link_ksettings
+  usbnet_set_link_ksettings
+  usbnet_unlink_rx_urbs
+
+# required by ath.ko
+  freq_reg_info
+  reg_initiator_name
+  wiphy_apply_custom_regulatory
+
+# required by ath10k_core.ko
+  bcmp
+  cancel_delayed_work
+  cfg80211_calculate_bitrate
+  cfg80211_find_elem_match
+  cfg80211_find_vendor_elem
+  cfg80211_get_bss
+  cfg80211_put_bss
+  device_get_mac_address
+  device_set_wakeup_enable
+  firmware_request_nowarn
+  idr_for_each
+  ieee80211_alloc_hw_nm
+  ieee80211_beacon_get_template
+  ieee80211_beacon_get_tim
+  ieee80211_beacon_loss
+  ieee80211_bss_get_elem
+  ieee80211_channel_to_freq_khz
+  ieee80211_connection_loss
+  ieee80211_csa_finish
+  ieee80211_csa_is_complete
+  ieee80211_csa_update_counter
+  ieee80211_find_sta
+  ieee80211_find_sta_by_ifaddr
+  ieee80211_free_hw
+  ieee80211_free_txskb
+  ieee80211_hdrlen
+  ieee80211_iterate_active_interfaces_atomic
+  ieee80211_iterate_stations_atomic
+  ieee80211_iter_chan_contexts_atomic
+  ieee80211_manage_rx_ba_offl
+  ieee80211_next_txq
+  ieee80211_proberesp_get
+  ieee80211_queue_delayed_work
+  ieee80211_queue_work
+  ieee80211_radar_detected
+  ieee80211_ready_on_channel
+  ieee80211_register_hw
+  ieee80211_remain_on_channel_expired
+  ieee80211_report_low_ack
+  ieee80211_restart_hw
+  ieee80211_rx_napi
+  ieee80211_scan_completed
+  __ieee80211_schedule_txq
+  ieee80211_sta_register_airtime
+  ieee80211_stop_queue
+  ieee80211_stop_queues
+  ieee80211_tdls_oper_request
+  ieee80211_tx_dequeue
+  ieee80211_txq_get_depth
+  ieee80211_txq_may_transmit
+  ieee80211_txq_schedule_start
+  ieee80211_tx_rate_update
+  ieee80211_tx_status
+  ieee80211_tx_status_irqsafe
+  ieee80211_unregister_hw
+  ieee80211_wake_queue
+  ieee80211_wake_queues
+  init_dummy_netdev
+  __kfifo_alloc
+  __kfifo_free
+  __local_bh_enable_ip
+  param_ops_ulong
+  regulatory_hint
+  skb_copy
+  skb_realloc_headroom
+  strlcat
+  strscpy
+  __sw_hweight16
+  __sw_hweight8
+  synchronize_net
+  sysfs_create_link
+  sysfs_remove_link
+  thermal_cooling_device_register
+  wiphy_read_of_freq_limits
+  wiphy_to_ieee80211_hw
+
+# required by ath10k_pci.ko
+  dma_direct_sync_single_for_cpu
+  pci_clear_master
+  pci_disable_device
+  pci_disable_msi
+  pcie_capability_read_word
+  pcie_capability_write_word
+  pci_enable_device
+  pci_enable_msi
+  pci_iomap
+  pci_read_config_dword
+  pci_release_region
+  pci_request_region
+  pci_set_master
+  pci_write_config_dword
+
+# required by ath10k_snoc.ko
+  devm_regulator_get_optional
+  kernel_connect
+
+# required by ax88179_178a.ko
+  ethtool_op_get_link
+  mii_ethtool_get_link_ksettings
+  mii_ethtool_set_link_ksettings
+  netif_carrier_on
+
+# required by clk-qcom.ko
+  __clk_determine_rate
+  __clk_get_name
+  clk_hw_get_flags
+  clk_hw_get_name
+  clk_hw_get_num_parents
+  clk_hw_get_parent_by_index
+  clk_hw_round_rate
+  __clk_is_enabled
+  __clk_mux_determine_rate_closest
+  divider_ro_round_rate_parent
+  of_find_node_opts_by_path
+  of_prop_next_u32
+  pm_genpd_remove_subdomain
+
+# required by clk-rpmh.ko
+  clk_hw_is_prepared
+
+# required by clk-scmi.ko
+  clk_hw_set_rate_range
+  scmi_driver_register
+  scmi_driver_unregister
+
+# required by cqhci.ko
+  dmam_free_coherent
+  mmc_cqe_request_done
+
+# required by deferred-free-helper.ko
+  freezing_slow_path
+  __refrigerator
+  system_freezing_cnt
+
+# required by extcon-usb-gpio.ko
+  devm_extcon_dev_allocate
+  devm_extcon_dev_register
+  extcon_set_state_sync
+  gpiod_get_value_cansleep
+  gpiod_set_debounce
+  gpiod_to_irq
+  system_power_efficient_wq
+
+# required by fastrpc.ko
+  dma_buf_attach
+  dma_buf_detach
+  dma_buf_fd
+  dma_buf_get
+  dma_buf_map_attachment
+  dma_buf_put
+  dma_buf_unmap_attachment
+  dma_get_sgtable_attrs
+  dma_mmap_attrs
+  find_vma
+  wait_for_completion_interruptible
+
+# required by i2c-qcom-geni.ko
+  i2c_get_dma_safe_msg_buf
+  i2c_put_dma_safe_msg_buf
+  of_machine_is_compatible
+
+# required by i2c-qup.ko
+  __usecs_to_jiffies
+
+# required by lt9611.ko
+  __devm_regmap_init_i2c
+  dev_printk
+  drm_bridge_add
+  drm_bridge_remove
+  drm_do_get_edid
+  i2c_del_driver
+  i2c_register_driver
+  mipi_dsi_attach
+  mipi_dsi_detach
+  mipi_dsi_device_register_full
+  mipi_dsi_device_unregister
+  of_find_mipi_dsi_host_by_node
+  regmap_multi_reg_write
+
+# required by msm.ko
+  __bitmap_andnot
+  __bitmap_weight
+  bpf_trace_run1
+  bpf_trace_run2
+  bpf_trace_run3
+  bpf_trace_run6
+  bpf_trace_run8
+  clk_get_parent
+  clk_hw_register_divider
+  clk_hw_register_fixed_factor
+  clk_hw_register_mux
+  clk_hw_unregister_divider
+  clk_hw_unregister_fixed_factor
+  clk_hw_unregister_mux
+  clk_set_parent
+  clk_unregister
+  component_add
+  component_bind_all
+  component_del
+  component_master_add_with_match
+  component_master_del
+  component_unbind_all
+  _ctype
+  debugfs_create_bool
+  debugfs_create_u64
+  del_timer
+  devfreq_recommended_opp
+  devfreq_resume_device
+  devfreq_suspend_device
+  device_find_child
+  devm_clk_register
+  devm_devfreq_add_device
+  devm_ioremap_nocache
+  devm_regulator_get_exclusive
+  dev_pm_opp_find_freq_ceil
+  dev_pm_opp_find_freq_exact
+  dev_pm_opp_find_freq_floor
+  dev_pm_opp_get_voltage
+  dev_pm_opp_of_add_table
+  dev_pm_opp_put
+  dev_pm_opp_set_supported_hw
+  dma_buf_vunmap
+  dma_fence_context_alloc
+  dma_fence_init
+  dma_fence_match_context
+  dma_fence_release
+  dma_fence_signal
+  dma_fence_wait_timeout
+  dma_resv_add_excl_fence
+  dma_resv_add_shared_fence
+  dma_resv_reserve_shared
+  dma_resv_wait_timeout_rcu
+  drm_atomic_get_private_obj_state
+  drm_atomic_helper_check
+  drm_atomic_helper_check_plane_state
+  drm_atomic_helper_cleanup_planes
+  drm_atomic_helper_commit
+  drm_atomic_helper_commit_hw_done
+  drm_atomic_helper_commit_modeset_disables
+  drm_atomic_helper_commit_modeset_enables
+  drm_atomic_helper_commit_planes
+  __drm_atomic_helper_crtc_destroy_state
+  drm_atomic_helper_crtc_destroy_state
+  __drm_atomic_helper_crtc_duplicate_state
+  drm_atomic_helper_crtc_duplicate_state
+  __drm_atomic_helper_crtc_reset
+  drm_atomic_helper_crtc_reset
+  drm_atomic_helper_dirtyfb
+  drm_atomic_helper_disable_plane
+  drm_atomic_helper_page_flip
+  __drm_atomic_helper_plane_destroy_state
+  drm_atomic_helper_plane_destroy_state
+  __drm_atomic_helper_plane_duplicate_state
+  drm_atomic_helper_plane_duplicate_state
+  drm_atomic_helper_plane_reset
+  __drm_atomic_helper_private_obj_duplicate_state
+  drm_atomic_helper_resume
+  drm_atomic_helper_set_config
+  drm_atomic_helper_shutdown
+  drm_atomic_helper_suspend
+  drm_atomic_helper_update_plane
+  drm_atomic_private_obj_fini
+  drm_atomic_private_obj_init
+  __drm_atomic_state_free
+  drm_bridge_attach
+  drm_calc_vbltimestamp_from_scanoutpos
+  drm_compat_ioctl
+  drm_connector_has_possible_encoder
+  drm_crtc_cleanup
+  drm_crtc_handle_vblank
+  drm_crtc_init_with_planes
+  drm_crtc_send_vblank_event
+  drm_crtc_set_max_vblank_count
+  drm_crtc_vblank_get
+  drm_crtc_vblank_off
+  drm_crtc_vblank_on
+  drm_crtc_vblank_put
+  drm_crtc_vblank_reset
+  drm_dbg
+  drm_debug
+  drm_debugfs_create_files
+  drm_detect_hdmi_monitor
+  drm_dev_alloc
+  drm_dev_dbg
+  drm_dev_put
+  drm_dev_register
+  drm_dev_unregister
+  drm_dp_aux_register
+  drm_dp_aux_unregister
+  drm_dp_bw_code_to_link_rate
+  drm_dp_channel_eq_ok
+  drm_dp_clock_recovery_ok
+  drm_dp_dpcd_read
+  drm_dp_dpcd_read_link_status
+  drm_dp_dpcd_write
+  drm_dp_get_adjust_request_pre_emphasis
+  drm_dp_get_adjust_request_voltage
+  drm_dp_link_configure
+  drm_dp_link_power_down
+  drm_dp_link_power_up
+  drm_dp_link_probe
+  drm_dp_link_rate_to_bw_code
+  drm_dp_link_train_channel_eq_delay
+  drm_dp_link_train_clock_recovery_delay
+  drm_encoder_cleanup
+  drm_encoder_init
+  drm_flip_work_cleanup
+  drm_flip_work_commit
+  drm_flip_work_init
+  drm_flip_work_queue
+  drm_format_info
+  drm_framebuffer_init
+  drm_gem_create_mmap_offset
+  drm_gem_fb_create_handle
+  drm_gem_fb_destroy
+  drm_gem_fb_get_obj
+  drm_gem_fb_prepare_fb
+  drm_gem_free_mmap_offset
+  drm_gem_get_pages
+  drm_gem_handle_create
+  drm_gem_mmap
+  drm_gem_mmap_obj
+  drm_gem_object_init
+  drm_gem_object_lookup
+  drm_gem_object_put
+  drm_gem_object_put_unlocked
+  drm_gem_object_release
+  drm_gem_prime_fd_to_handle
+  drm_gem_prime_handle_to_fd
+  drm_gem_private_object_init
+  drm_gem_put_pages
+  drm_gem_vm_close
+  drm_gem_vm_open
+  drm_get_edid
+  drm_get_format_info
+  drm_get_format_name
+  drm_handle_vblank
+  drm_helper_hpd_irq_event
+  drm_helper_mode_fill_fb_struct
+  drm_ioctl
+  drm_irq_install
+  drm_irq_uninstall
+  drm_kms_helper_poll_fini
+  drm_kms_helper_poll_init
+  drm_mm_init
+  drm_mm_insert_node_in_range
+  drm_mm_print
+  drm_mm_remove_node
+  drm_mm_takedown
+  drm_mode_config_cleanup
+  drm_mode_config_init
+  drm_mode_config_reset
+  drm_mode_debug_printmodeline
+  drm_mode_destroy
+  drm_mode_duplicate
+  drm_mode_object_find
+  drm_mode_object_put
+  drm_modeset_lock
+  drm_modeset_lock_all
+  drm_modeset_lock_init
+  drm_modeset_unlock
+  drm_modeset_unlock_all
+  drm_object_attach_property
+  drm_of_component_match_add
+  drm_open
+  drm_panel_attach
+  drm_panel_detach
+  drm_panel_disable
+  drm_panel_enable
+  drm_panel_get_modes
+  drm_panel_prepare
+  drm_panel_unprepare
+  drm_plane_cleanup
+  drm_plane_create_rotation_property
+  drm_plane_create_zpos_property
+  drm_plane_enable_fb_damage_clips
+  drm_poll
+  drm_prime_gem_destroy
+  drm_prime_pages_to_sg
+  drm_prime_sg_to_page_addr_arrays
+  drm_printf
+  __drm_printfn_info
+  __drm_printfn_seq_file
+  drm_property_create_range
+  drm_puts
+  __drm_puts_seq_file
+  drm_read
+  drm_rect_calc_hscale
+  drm_rect_calc_vscale
+  drm_rect_intersect
+  drm_release
+  drm_rotation_simplify
+  drm_state_dump
+  drm_universal_plane_init
+  drm_vblank_init
+  fd_install
+  fput
+  generic_file_llseek
+  get_pid_task
+  get_unused_fd_flags
+  gpiod_direction_input
+  gpiod_direction_output
+  gpiod_get_value
+  gpiod_set_consumer_name
+  gpiod_set_value
+  hdmi_audio_infoframe_pack
+  hdmi_infoframe_pack
+  hrtimer_init
+  hrtimer_start_range_ns
+  i2c_transfer
+  icc_put
+  icc_set_bw
+  invalidate_mapping_pages
+  iommu_attach_device
+  iommu_detach_device
+  iommu_domain_alloc
+  iommu_domain_free
+  iommu_map_sg
+  iommu_set_fault_handler
+  iommu_unmap
+  irq_domain_xlate_onecell
+  kasprintf
+  kstrdup_quotable_cmdline
+  kstrtouint_from_user
+  kthread_destroy_worker
+  __kthread_init_worker
+  kthread_queue_work
+  kthread_worker_fn
+  ktime_get_real_ts64
+  kvfree
+  kvmalloc_node
+  llist_add_batch
+  memparse
+  memunmap
+  mipi_dsi_create_packet
+  mipi_dsi_host_register
+  mipi_dsi_host_unregister
+  mipi_dsi_packet_format_is_long
+  mutex_is_locked
+  mutex_lock_interruptible
+  mutex_trylock_recursive
+  no_llseek
+  nsecs_to_jiffies
+  ns_to_timespec
+  nvmem_cell_get
+  nvmem_cell_put
+  of_device_is_available
+  of_dma_configure
+  of_drm_find_bridge
+  of_drm_find_panel
+  of_find_device_by_node
+  of_find_matching_node_and_match
+  of_get_compatible_child
+  of_graph_get_endpoint_by_regs
+  of_graph_get_next_endpoint
+  of_graph_get_remote_port_parent
+  of_graph_parse_endpoint
+  of_icc_get
+  param_ops_charp
+  pid_task
+  pm_runtime_get_if_in_use
+  put_pid
+  put_unused_fd
+  _raw_read_lock
+  _raw_read_unlock
+  _raw_write_lock
+  _raw_write_unlock
+  register_vmap_purge_notifier
+  regulator_get
+  regulator_put
+  request_firmware_direct
+  reservation_ww_class
+  round_jiffies_up
+  schedule_timeout_interruptible
+  shmem_truncate_range
+  simple_attr_open
+  simple_attr_read
+  simple_attr_release
+  simple_attr_write
+  simple_open
+  sscanf
+  strstr
+  sync_file_create
+  sync_file_get_fence
+  timespec64_to_jiffies
+  unmap_mapping_range
+  unregister_shrinker
+  unregister_vmap_purge_notifier
+  vmf_insert_mixed
+  vm_get_page_prot
+  vscnprintf
+  vsnprintf
+  ww_mutex_lock_interruptible
+  ww_mutex_unlock
+
+# required by msm_serial.ko
+  iomem_resource
+  __release_region
+  __request_region
+  tty_termios_baud_rate
+  tty_termios_encode_baud_rate
+
+# required by nvmem_qfprom.ko
+  devm_nvmem_register
+
+# required by ohci-hcd.ko
+  debugfs_remove
+  dma_pool_alloc
+  dma_pool_create
+  dma_pool_destroy
+  dma_pool_free
+  flush_work
+  free_pages
+  gen_pool_dma_alloc_align
+  gen_pool_dma_zalloc_align
+  gen_pool_free_owner
+  get_zeroed_page
+  _raw_spin_lock_irq
+  _raw_spin_unlock_irq
+  sb800_prefetch
+  schedule_timeout_uninterruptible
+  usb_amd_dev_put
+  usb_amd_quirk_pll_disable
+  usb_amd_quirk_pll_enable
+  usb_calc_bus_time
+  usb_debug_root
+  usb_hcd_check_unlink_urb
+  usb_hcd_giveback_urb
+  usb_hc_died
+  usb_hcd_link_urb_to_ep
+  usb_hcd_poll_rh_status
+  usb_hcd_resume_root_hub
+  usb_hcds_loaded
+  usb_hcd_unlink_urb_from_ep
+  usb_root_hub_lost_power
+
+# required by ohci-pci.ko
+  pci_dev_put
+  pci_get_slot
+  pci_match_id
+  usb_amd_prefetch_quirk
+  usb_amd_quirk_pll_check
+  usb_hcd_pci_pm_ops
+  usb_hcd_pci_probe
+  usb_hcd_pci_remove
+  usb_hcd_pci_shutdown
+
+# required by ohci-platform.ko
+  device_wakeup_enable
+  devm_reset_control_array_get
+  of_clk_get
+  usb_add_hcd
+  usb_create_hcd
+  usb_hcd_platform_shutdown
+  usb_put_hcd
+  usb_remove_hcd
+
+# required by page_pool.ko
+  __alloc_pages_nodemask
+  contig_page_data
+  mod_node_page_state
+
+# required by phy-qcom-qmp.ko
+  of_clk_get_by_name
+  __of_reset_control_get
+
+# required by phy-qcom-qusb2.ko
+  devm_clk_get_optional
+  devm_nvmem_cell_get
+
+# required by phy-qcom-usb-hs.ko
+  extcon_get_edev_by_phandle
+  extcon_get_state
+  extcon_register_notifier
+  extcon_unregister_notifier
+
+# required by pinctrl-sdm845.ko
+  msm_pinctrl_dev_pm_ops
+
+# required by pinctrl-spmi-gpio.ko
+  device_get_match_data
+  gpiochip_populate_parent_fwspec_fourcell
+  irq_chip_ack_parent
+  irq_chip_set_wake_parent
+
+# required by pinctrl-spmi-mpp.ko
+  platform_irq_count
+
+# required by pm8941-pwrkey.ko
+  devm_input_allocate_device
+  input_event
+  input_register_device
+  input_set_capability
+
+# required by qcom-apcs-ipc-mailbox.ko
+  devm_mbox_controller_register
+
+# required by qcom-cpufreq-hw.ko
+  arch_set_freq_scale
+  cpufreq_cpu_get_raw
+  cpufreq_freq_attr_scaling_available_freqs
+  cpufreq_freq_attr_scaling_boost_freqs
+  cpufreq_generic_frequency_table_verify
+  cpufreq_register_driver
+  cpufreq_unregister_driver
+  cpumask_next
+  __cpu_possible_mask
+  dev_pm_opp_of_register_em
+  dev_pm_opp_remove_all_dynamic
+  dev_pm_opp_set_sharing_cpus
+  get_cpu_device
+  nr_cpu_ids
+  of_get_cpu_node
+  of_parse_phandle_with_args
+
+# required by qcom-pdc.ko
+  irq_chip_disable_parent
+  irq_chip_enable_parent
+  irq_chip_eoi_parent
+  irq_chip_get_parent_state
+  irq_chip_retrigger_hierarchy
+  irq_chip_set_affinity_parent
+  irq_chip_set_parent_state
+  irq_chip_set_vcpu_affinity_parent
+  irq_domain_alloc_irqs_parent
+  irq_domain_create_hierarchy
+  irq_domain_set_hwirq_and_chip
+  irq_domain_update_bus_token
+
+# required by qcom-rpmh-regulator.ko
+  of_get_regulator_init_data
+  of_node_name_eq
+  regulator_list_voltage_linear_range
+
+# required by qcom-scm-64.ko
+  __arm_smccc_smc
+
+# required by qcom-spmi-pmic.ko
+  __spmi_driver_register
+
+# required by qcom-wdt.ko
+  platform_get_irq_optional
+
+# required by qcom_aoss.ko
+  devm_thermal_of_cooling_device_register
+  pm_genpd_remove
+
+# required by qcom_common.ko
+  rproc_coredump_add_segment
+
+# required by qcom_geni_serial.ko
+  console_stop
+  device_create_file
+  handle_sysrq
+  kstrtoint
+  oops_in_progress
+  _raw_spin_trylock
+  tty_insert_flip_string_fixed_flag
+  uart_console_device
+  uart_console_write
+  uart_parse_options
+  uart_set_options
+
+# required by qcom_glink_native.ko
+  of_irq_get
+
+# required by qcom_hwspinlock.ko
+  devm_regmap_field_alloc
+  hwspin_lock_register
+  hwspin_lock_unregister
+  regmap_field_read
+  regmap_field_update_bits_base
+
+# required by qcom_q6v5.ko
+  qcom_smem_state_get
+  qcom_smem_state_update_bits
+  rproc_report_crash
+
+# required by qcom_q6v5_mss.ko
+  rproc_coredump_add_custom_segment
+
+# required by qcom_q6v5_wcss.ko
+  rproc_elf_get_boot_addr
+
+# required by qcom_rpmh.ko
+  bitmap_find_next_zero_area_off
+  __bitmap_set
+
+# required by qcom_smd.ko
+  __memcpy_toio
+
+# required by qcom_spmi-regulator.ko
+  jiffies_to_usecs
+  regulator_disable_regmap
+  regulator_enable_regmap
+  regulator_is_enabled_regmap
+  smp_call_function_single
+
+# required by qcom_sysmon.ko
+  of_irq_get_byname
+  rproc_get_by_child
+  try_wait_for_completion
+
+# required by qmi_helpers.ko
+  init_net
+  kernel_getsockname
+  kernel_recvmsg
+  kernel_sendmsg
+  sock_create_kern
+  sock_release
+
+# required by qnoc-sdm845.ko
+  icc_link_create
+  icc_node_add
+  icc_node_create
+  icc_node_del
+  icc_node_destroy
+  icc_provider_add
+  icc_provider_del
+  of_icc_xlate_onecell
+
+# required by qrtr-smd.ko
+  __pskb_pull_tail
+
+# required by qrtr-tun.ko
+  _copy_to_iter
+
+# required by qrtr.ko
+  __alloc_skb
+  datagram_poll
+  idr_alloc_u32
+  lock_sock_nested
+  netlink_capable
+  __nla_parse
+  proto_register
+  proto_unregister
+  radix_tree_delete
+  radix_tree_insert
+  radix_tree_lookup
+  _raw_write_lock_bh
+  _raw_write_unlock_bh
+  refcount_dec_and_mutex_lock
+  refcount_dec_checked
+  release_sock
+  rtnl_is_locked
+  rtnl_register_module
+  rtnl_unregister
+  sk_alloc
+  skb_copy_bits
+  skb_copy_datagram_iter
+  skb_free_datagram
+  __skb_pad
+  skb_recv_datagram
+  skb_set_owner_w
+  sk_free
+  sock_alloc_send_skb
+  sock_gettstamp
+  sock_init_data
+  sock_no_accept
+  sock_no_getsockopt
+  sock_no_listen
+  sock_no_mmap
+  sock_no_sendpage
+  sock_no_setsockopt
+  sock_no_shutdown
+  sock_no_socketpair
+  sock_queue_rcv_skb
+  sock_register
+  sock_unregister
+
+# required by reboot-mode.ko
+  devres_add
+  devres_alloc_node
+  devres_free
+  devres_release
+  kfree_const
+  kstrdup_const
+  strncmp
+
+# required by regmap-spmi.ko
+  __devm_regmap_init
+  __regmap_init
+  spmi_ext_register_read
+  spmi_ext_register_readl
+  spmi_ext_register_write
+  spmi_ext_register_writel
+  spmi_register_read
+  spmi_register_write
+  spmi_register_zero_write
+
+# required by rmtfs_mem.ko
+  alloc_chrdev_region
+  cdev_device_add
+  cdev_device_del
+  cdev_init
+  __class_register
+  class_unregister
+  device_initialize
+  unregister_chrdev_region
+
+# required by rtc-pm8xxx.ko
+  devm_request_any_context_irq
+  devm_rtc_device_register
+  rtc_time64_to_tm
+  rtc_tm_to_time64
+  rtc_update_irq
+  rtc_valid_tm
+
+# required by sdhci-msm.ko
+  mmc_of_parse
+  mmc_send_tuning
+  regulator_is_supported_voltage
+  __sdhci_add_host
+  sdhci_add_host
+  sdhci_cleanup_host
+  sdhci_cqe_disable
+  sdhci_cqe_enable
+  sdhci_cqe_irq
+  sdhci_enable_clk
+  sdhci_get_property
+  sdhci_pltfm_free
+  sdhci_pltfm_init
+  sdhci_remove_host
+  sdhci_reset
+  sdhci_set_bus_width
+  sdhci_setup_host
+
+# required by smem.ko
+  hwspin_lock_free
+  hwspin_lock_request_specific
+  __hwspin_lock_timeout
+  __hwspin_unlock
+  of_hwspin_lock_get_id
+
+# required by snd-soc-hdmi-codec.ko
+  devm_snd_soc_register_component
+  snd_ctl_add
+  snd_ctl_new1
+  snd_pcm_add_chmap_ctls
+  snd_pcm_create_iec958_consumer_hw_params
+  snd_pcm_format_width
+  snd_pcm_hw_constraint_eld
+  snd_soc_dapm_add_routes
+  snd_soc_jack_report
+
+# required by socinfo.ko
+  add_device_randomness
+  soc_device_register
+  soc_device_unregister
+
+# required by spmi-pmic-arb.ko
+  handle_edge_irq
+  irq_domain_set_info
+  spmi_controller_add
+  spmi_controller_alloc
+  spmi_controller_remove
+
+# required by system_heap.ko
+  dma_direct_sync_sg_for_cpu
+  dma_direct_sync_sg_for_device
+  dma_heap_add
+  dma_heap_get_dev
+  dma_heap_get_name
+  preempt_schedule
+  sg_alloc_table
+  __sg_page_iter_next
+  __sg_page_iter_start
+  vfree
+  vmalloc
+
+# required by ufs_qcom.ko
+  devm_phy_get
+  phy_exit
+  phy_init
+  phy_power_off
+  phy_power_on
+  phy_set_mode_ext
+  ufshcd_dme_get_attr
+  ufshcd_dme_set_attr
+  ufshcd_dump_regs
+  ufshcd_get_local_unipro_ver
+  ufshcd_get_pwr_dev_param
+  ufshcd_pltfrm_init
+  ufshcd_pltfrm_resume
+  ufshcd_pltfrm_runtime_idle
+  ufshcd_pltfrm_runtime_resume
+  ufshcd_pltfrm_runtime_suspend
+  ufshcd_pltfrm_shutdown
+  ufshcd_pltfrm_suspend
+  ufshcd_remove
+  ufshcd_uic_hibern8_enter
+  ufshcd_uic_hibern8_exit
+
+# required by ulpi.ko
+  of_device_modalias
+  of_device_request_module
+  __request_module
diff --git a/android/abi_gki_aarch64_exynos b/android/abi_gki_aarch64_exynos
new file mode 100644
index 0000000..752a85f
--- /dev/null
+++ b/android/abi_gki_aarch64_exynos
@@ -0,0 +1,1310 @@
+[abi_symbol_list]
+  add_timer
+  add_timer_on
+  add_uevent_var
+  adjust_managed_page_count
+  alarm_cancel
+  alarm_init
+  alarm_start
+  alloc_chrdev_region
+  alloc_etherdev_mqs
+  alloc_netdev_mqs
+  __alloc_pages_nodemask
+  __alloc_percpu
+  __alloc_skb
+  alloc_workqueue
+  amba_driver_register
+  amba_driver_unregister
+  anon_inode_getfd
+  __arch_copy_from_user
+  __arch_copy_in_user
+  __arch_copy_to_user
+  arch_set_freq_scale
+  arch_setup_dma_ops
+  arm64_const_caps_ready
+  __arm_smccc_hvc
+  __arm_smccc_smc
+  atomic_notifier_call_chain
+  atomic_notifier_chain_register
+  atomic_notifier_chain_unregister
+  backlight_device_unregister
+  _bcd2bin
+  bcmp
+  _bin2bcd
+  __bitmap_clear
+  __bitmap_parse
+  bitmap_parselist
+  __bitmap_set
+  __bitmap_weight
+  blkdev_get_by_dev
+  blkdev_get_by_path
+  blkdev_put
+  blk_lookup_devt
+  blocking_notifier_call_chain
+  blocking_notifier_chain_register
+  blocking_notifier_chain_unregister
+  bpf_trace_run1
+  bpf_trace_run2
+  bpf_trace_run3
+  bpf_trace_run4
+  bpf_trace_run9
+  build_skb
+  bus_register
+  bus_register_notifier
+  bus_set_iommu
+  bus_unregister
+  bus_unregister_notifier
+  cache_line_size
+  cancel_delayed_work
+  cancel_delayed_work_sync
+  cancel_work_sync
+  cdev_add
+  cdev_del
+  cdev_device_add
+  cdev_device_del
+  cdev_init
+  __cfi_slowpath
+  __check_object_size
+  __class_create
+  class_destroy
+  class_find_device
+  __class_register
+  class_unregister
+  clear_page
+  clk_bulk_disable
+  clk_bulk_enable
+  clk_bulk_get_all
+  clk_bulk_prepare
+  clk_bulk_put_all
+  clk_bulk_unprepare
+  clk_disable
+  clk_enable
+  clk_get
+  __clk_get_hw
+  __clk_get_name
+  clk_get_rate
+  clk_hw_get_name
+  clk_hw_get_parent
+  clk_hw_register_divider
+  clk_hw_register_gate
+  clk_hw_register_mux
+  clk_hw_unregister_divider
+  clk_hw_unregister_gate
+  clk_hw_unregister_mux
+  __clk_is_enabled
+  clk_prepare
+  clk_put
+  clk_register
+  clk_register_clkdev
+  clk_register_fixed_factor
+  clk_register_fixed_rate
+  clk_register_gate
+  clk_set_parent
+  clk_set_rate
+  clk_unprepare
+  __close_fd
+  cma_alloc
+  cma_get_name
+  cma_release
+  compat_alloc_user_space
+  complete
+  complete_all
+  complete_and_exit
+  completion_done
+  config_ep_by_speed
+  console_lock
+  console_trylock
+  console_unlock
+  __const_udelay
+  consume_skb
+  __cpu_active_mask
+  cpu_all_bits
+  cpu_bit_bitmap
+  cpu_down
+  cpufreq_cpu_get
+  cpufreq_cpu_get_raw
+  cpufreq_cpu_put
+  cpufreq_driver_resolve_freq
+  cpufreq_freq_transition_begin
+  cpufreq_freq_transition_end
+  cpufreq_frequency_table_verify
+  cpufreq_generic_attr
+  cpufreq_quick_get
+  cpufreq_register_driver
+  cpufreq_table_index_unsorted
+  __cpuhp_setup_state
+  __cpuhp_setup_state_cpuslocked
+  cpuhp_tasks_frozen
+  cpu_hwcap_keys
+  cpu_hwcaps
+  cpumask_next
+  cpumask_next_and
+  cpu_number
+  __cpu_online_mask
+  cpu_pm_register_notifier
+  __cpu_possible_mask
+  cpus_read_lock
+  cpus_read_unlock
+  cpu_subsys
+  cpu_topology
+  cpu_up
+  crypto_alloc_shash
+  crypto_destroy_tfm
+  crypto_shash_final
+  crypto_shash_update
+  dapm_pinctrl_event
+  dapm_regulator_event
+  default_llseek
+  delayed_work_timer_fn
+  del_timer
+  del_timer_sync
+  destroy_workqueue
+  _dev_crit
+  dev_driver_string
+  _dev_emerg
+  _dev_err
+  devfreq_add_device
+  devfreq_add_governor
+  devfreq_recommended_opp
+  devfreq_register_opp_notifier
+  devfreq_remove_device
+  devfreq_unregister_opp_notifier
+  devfreq_update_status
+  dev_fwnode
+  dev_get_regmap
+  dev_get_stats
+  device_add
+  device_connection_find_match
+  device_create
+  device_create_bin_file
+  device_create_file
+  device_destroy
+  device_find_child
+  device_for_each_child
+  device_get_dma_attr
+  device_initialize
+  device_init_wakeup
+  device_link_add
+  device_link_del
+  device_match_fwnode
+  device_match_name
+  device_property_present
+  device_property_read_string
+  device_property_read_string_array
+  device_property_read_u32_array
+  device_property_read_u8_array
+  device_register
+  device_remove_file
+  device_show_bool
+  device_show_int
+  device_store_bool
+  device_store_int
+  device_unregister
+  _dev_info
+  __dev_kfree_skb_any
+  devm_backlight_device_register
+  devm_clk_get
+  devm_extcon_register_notifier
+  devm_free_irq
+  devm_gpiochip_add_data
+  devm_gpiod_get_optional
+  devm_gpio_request_one
+  devm_iio_device_alloc
+  devm_ioremap
+  devm_ioremap_nocache
+  devm_ioremap_resource
+  devm_iounmap
+  devm_kasprintf
+  devm_kfree
+  devm_kmalloc
+  devm_kmemdup
+  devm_kstrdup
+  __devm_of_phy_provider_register
+  devm_phy_create
+  devm_phy_get
+  devm_pinctrl_get
+  devm_pinctrl_register
+  devm_platform_ioremap_resource
+  __devm_regmap_init_i2c
+  __devm_regmap_init_mmio_clk
+  devm_regulator_bulk_get
+  devm_regulator_get
+  devm_regulator_register
+  __devm_request_region
+  devm_request_threaded_irq
+  devm_reset_control_array_get
+  __devm_reset_control_get
+  devm_rtc_device_register
+  devm_snd_dmaengine_pcm_register
+  devm_snd_soc_register_card
+  devm_snd_soc_register_component
+  devm_usb_get_phy
+  devm_usb_get_phy_by_phandle
+  _dev_notice
+  dev_pm_opp_add
+  dev_pm_opp_disable
+  dev_pm_opp_find_freq_ceil
+  dev_pm_opp_find_freq_floor
+  dev_pm_opp_get_freq
+  dev_pm_opp_get_voltage
+  dev_pm_opp_of_add_table
+  dev_pm_opp_of_remove_table
+  dev_pm_opp_put
+  dev_pm_opp_put_regulators
+  dev_pm_opp_set_regulators
+  dev_printk
+  devres_add
+  devres_alloc_node
+  devres_free
+  dev_set_mac_address
+  dev_set_name
+  _dev_warn
+  disable_irq
+  disable_irq_nosync
+  dma_alloc_attrs
+  dma_async_device_register
+  dma_async_device_unregister
+  dma_async_tx_descriptor_init
+  dma_buf_attach
+  dma_buf_begin_cpu_access
+  dma_buf_detach
+  dma_buf_end_cpu_access
+  dma_buf_export
+  dma_buf_fd
+  dma_buf_get
+  dma_buf_get_flags
+  dma_buf_kmap
+  dma_buf_kunmap
+  dma_buf_map_attachment
+  dma_buf_mmap
+  dma_buf_put
+  dma_buf_unmap_attachment
+  dma_buf_vmap
+  dma_buf_vunmap
+  dma_direct_map_page
+  dma_direct_map_resource
+  dma_direct_map_sg
+  dma_direct_sync_sg_for_cpu
+  dma_direct_sync_sg_for_device
+  dma_direct_sync_single_for_cpu
+  dma_direct_sync_single_for_device
+  dma_direct_unmap_page
+  dma_direct_unmap_sg
+  dmaengine_unmap_put
+  dma_fence_add_callback
+  dma_fence_context_alloc
+  dma_fence_default_wait
+  dma_fence_get_status
+  dma_fence_init
+  dma_fence_release
+  dma_fence_remove_callback
+  dma_fence_signal
+  dma_fence_wait_timeout
+  dma_free_attrs
+  dma_get_slave_caps
+  dma_get_slave_channel
+  dmam_alloc_attrs
+  dma_mmap_attrs
+  dma_release_channel
+  dma_request_chan
+  dma_request_slave_channel
+  dma_set_coherent_mask
+  dma_set_mask
+  do_SAK
+  down
+  downgrade_write
+  down_read
+  down_trylock
+  down_write
+  driver_find
+  driver_find_device
+  driver_register
+  driver_unregister
+  dump_stack
+  dw_pcie_host_init
+  dw_pcie_msi_init
+  dw_pcie_read
+  dw_pcie_setup_rc
+  dw_pcie_write
+  enable_irq
+  end_buffer_read_sync
+  eth_mac_addr
+  ethtool_op_get_link
+  eth_type_trans
+  eth_validate_addr
+  event_triggers_call
+  extcon_get_edev_by_phandle
+  extcon_get_state
+  fb_mode_option
+  fd_install
+  fget
+  find_next_bit
+  find_next_zero_bit
+  find_vma
+  finish_wait
+  firmware_request_nowarn
+  flush_dcache_page
+  flush_delayed_work
+  flush_work
+  flush_workqueue
+  fput
+  frame_vector_create
+  frame_vector_destroy
+  frame_vector_to_pages
+  free_irq
+  free_netdev
+  __free_pages
+  free_pages
+  freezing_slow_path
+  freq_qos_add_request
+  freq_qos_update_request
+  fwnode_property_present
+  fwnode_property_read_u16_array
+  generic_handle_irq
+  gen_pool_add_owner
+  gen_pool_alloc_algo_owner
+  gen_pool_create
+  gen_pool_destroy
+  gen_pool_free_owner
+  __getblk_gfp
+  get_cpu_device
+  get_device
+  __get_free_pages
+  get_random_bytes
+  __get_task_comm
+  get_task_exe_file
+  get_task_mm
+  get_unused_fd_flags
+  get_user_pages
+  get_user_pages_fast
+  get_user_pages_remote
+  get_vaddr_frames
+  get_zeroed_page
+  gpiochip_generic_free
+  gpiochip_generic_request
+  gpiochip_get_data
+  gpiochip_lock_as_irq
+  gpiochip_unlock_as_irq
+  gpiod_direction_input
+  gpiod_direction_output_raw
+  gpiod_get_raw_value
+  gpiod_get_raw_value_cansleep
+  gpiod_set_raw_value
+  gpiod_set_value_cansleep
+  gpiod_to_irq
+  gpio_free
+  gpio_request
+  gpio_request_one
+  gpio_to_desc
+  gs_alloc_req
+  gserial_alloc_line
+  gserial_connect
+  gserial_disconnect
+  gserial_free_line
+  gs_free_req
+  handle_edge_irq
+  handle_level_irq
+  handle_nested_irq
+  handle_sysrq
+  hex_to_bin
+  hrtimer_active
+  hrtimer_cancel
+  hrtimer_forward
+  hrtimer_init
+  hrtimer_start_range_ns
+  hrtimer_try_to_cancel
+  hwrng_register
+  hwrng_unregister
+  i2c_adapter_type
+  i2c_add_numbered_adapter
+  i2c_bus_type
+  i2c_del_adapter
+  i2c_del_driver
+  i2c_for_each_dev
+  i2c_get_adapter
+  i2c_new_dummy
+  i2c_put_adapter
+  i2c_register_driver
+  i2c_smbus_read_byte_data
+  i2c_smbus_read_i2c_block_data
+  i2c_smbus_read_word_data
+  i2c_smbus_write_byte_data
+  i2c_smbus_write_i2c_block_data
+  i2c_smbus_write_word_data
+  i2c_smbus_xfer
+  i2c_transfer
+  i2c_transfer_buffer_flags
+  i2c_unregister_device
+  i2c_verify_client
+  ida_alloc_range
+  ida_destroy
+  ida_free
+  ignore_console_lock_warning
+  iio_channel_get
+  iio_channel_release
+  __iio_device_register
+  iio_device_unregister
+  iio_read_channel_processed
+  in4_pton
+  in6_pton
+  init_dummy_netdev
+  __init_rwsem
+  init_task
+  init_timer_key
+  init_wait_entry
+  __init_waitqueue_head
+  input_allocate_device
+  input_event
+  input_free_device
+  input_mt_destroy_slots
+  input_mt_init_slots
+  input_mt_report_slot_state
+  input_register_device
+  input_set_abs_params
+  input_set_capability
+  input_unregister_device
+  iomem_resource
+  iommu_attach_group
+  iommu_device_link
+  iommu_device_register
+  iommu_device_sysfs_add
+  iommu_device_sysfs_remove
+  iommu_device_unlink
+  iommu_device_unregister
+  iommu_dma_reserve_iova
+  iommu_domain_alloc
+  iommu_fwspec_add_ids
+  iommu_fwspec_free
+  iommu_get_dma_cookie
+  iommu_get_domain_for_dev
+  iommu_group_alloc
+  iommu_group_for_each_dev
+  iommu_group_get
+  iommu_group_get_for_dev
+  iommu_group_get_iommudata
+  iommu_group_put
+  iommu_group_remove_device
+  iommu_group_set_iommudata
+  iommu_group_set_name
+  iommu_iova_to_phys
+  iommu_map
+  iommu_map_sg
+  iommu_put_dma_cookie
+  iommu_register_device_fault_handler
+  iommu_report_device_fault
+  iommu_unmap
+  iommu_unregister_device_fault_handler
+  ion_alloc
+  ion_buffer_prep_noncached
+  __ion_device_add_heap
+  ion_device_remove_heap
+  ion_heap_map_user
+  ion_query_heaps_kernel
+  __ioread32_copy
+  __ioremap
+  iounmap
+  __iowrite32_copy
+  __irq_alloc_descs
+  __irq_domain_add
+  irq_domain_remove
+  irq_domain_xlate_twocell
+  irq_find_mapping
+  irq_get_irq_data
+  irq_modify_status
+  irq_of_parse_and_map
+  irq_set_affinity_hint
+  irq_set_chained_handler_and_data
+  irq_set_chip_and_handler_name
+  irq_set_chip_data
+  irq_set_handler_data
+  irq_set_irq_wake
+  irq_to_desc
+  is_console_locked
+  jiffies
+  jiffies_64
+  jiffies_64_to_clock_t
+  jiffies_to_msecs
+  jiffies_to_usecs
+  kasprintf
+  kernel_kobj
+  kern_path
+  __kfifo_alloc
+  __kfifo_free
+  __kfifo_in
+  __kfifo_out
+  kfree
+  kfree_call_rcu
+  kfree_const
+  kimage_vaddr
+  kimage_voffset
+  __kmalloc
+  kmalloc_caches
+  kmalloc_order_trace
+  kmem_cache_alloc
+  kmem_cache_alloc_trace
+  kmem_cache_create
+  kmem_cache_destroy
+  kmem_cache_free
+  kmemdup
+  kobject_create_and_add
+  kobject_init_and_add
+  kobject_put
+  kobject_uevent
+  kobject_uevent_env
+  krealloc
+  kstat
+  kstrdup
+  kstrndup
+  kstrtobool
+  kstrtoint
+  kstrtoint_from_user
+  kstrtou8
+  kstrtoull
+  kthread_bind
+  kthread_cancel_work_sync
+  kthread_create_on_node
+  kthread_create_worker
+  kthread_destroy_worker
+  kthread_flush_worker
+  __kthread_init_worker
+  kthread_queue_work
+  kthread_should_stop
+  kthread_stop
+  kthread_worker_fn
+  ktime_get
+  ktime_get_mono_fast_ns
+  ktime_get_raw_ts64
+  ktime_get_real_ts64
+  ktime_get_with_offset
+  kvasprintf
+  kvfree
+  kvmalloc_node
+  kzfree
+  __list_add_valid
+  __list_del_entry_valid
+  __lock_buffer
+  loops_per_jiffy
+  match_string
+  media_create_intf_link
+  media_create_pad_link
+  media_device_register_entity
+  media_device_unregister_entity
+  media_devnode_create
+  media_devnode_remove
+  media_entity_pads_init
+  media_entity_remove_links
+  media_remove_intf_links
+  memchr
+  memcpy
+  __memcpy_fromio
+  __memcpy_toio
+  memdup_user
+  memset
+  __memset_io
+  mfd_add_devices
+  mfd_remove_devices
+  misc_deregister
+  misc_register
+  mmc_add_host
+  mmc_alloc_host
+  mmc_can_gpio_cd
+  mmc_detect_change
+  mmc_free_host
+  mmc_gpio_get_cd
+  mmc_gpio_get_ro
+  mmc_of_parse
+  mmc_regulator_get_supply
+  mmc_regulator_set_ocr
+  mmc_regulator_set_vqmmc
+  mmc_remove_host
+  mmc_request_done
+  mmc_wait_for_req
+  __mmdrop
+  mmput
+  mm_trace_rss_stat
+  mod_delayed_work_on
+  mod_timer
+  __module_get
+  module_layout
+  module_put
+  __msecs_to_jiffies
+  msleep
+  __mutex_init
+  mutex_lock
+  mutex_lock_interruptible
+  mutex_trylock
+  mutex_unlock
+  __napi_alloc_skb
+  napi_complete_done
+  napi_gro_flush
+  napi_gro_receive
+  __napi_schedule
+  napi_schedule_prep
+  __netdev_alloc_skb
+  netif_carrier_off
+  netif_carrier_on
+  netif_napi_add
+  netif_receive_skb
+  netif_rx
+  netif_tx_wake_queue
+  no_llseek
+  noop_llseek
+  nr_cpu_ids
+  nr_irqs
+  nsecs_to_jiffies
+  ns_to_timespec
+  ns_to_timeval
+  __num_online_cpus
+  of_address_to_resource
+  of_alias_get_id
+  of_clk_add_hw_provider
+  of_clk_add_provider
+  of_clk_del_provider
+  of_clk_get
+  of_clk_get_parent_count
+  of_clk_hw_onecell_get
+  of_clk_src_onecell_get
+  of_count_phandle_with_args
+  of_device_get_match_data
+  of_device_is_available
+  of_device_is_compatible
+  of_dma_controller_free
+  of_dma_controller_register
+  of_find_compatible_node
+  of_find_device_by_node
+  of_find_matching_node_and_match
+  of_find_node_by_name
+  of_find_node_by_type
+  of_find_node_opts_by_path
+  of_find_property
+  of_genpd_add_provider_simple
+  of_get_child_by_name
+  of_get_dma_window
+  of_get_named_gpio_flags
+  of_get_next_available_child
+  of_get_next_child
+  of_get_property
+  of_get_regulator_init_data
+  of_iomap
+  of_match_device
+  of_match_node
+  of_node_name_eq
+  of_parse_phandle
+  of_phandle_iterator_init
+  of_phandle_iterator_next
+  of_platform_depopulate
+  of_platform_populate
+  of_property_count_elems_of_size
+  of_property_match_string
+  of_property_read_string
+  of_property_read_string_helper
+  of_property_read_u32_index
+  of_property_read_variable_u32_array
+  of_property_read_variable_u8_array
+  of_prop_next_string
+  of_prop_next_u32
+  of_pwm_xlate_with_flags
+  of_reserved_mem_device_init_by_idx
+  of_reserved_mem_device_release
+  of_reserved_mem_lookup
+  of_reset_control_array_get
+  of_root
+  of_usb_get_phy_mode
+  oops_in_progress
+  panic
+  panic_notifier_list
+  param_ops_bool
+  param_ops_byte
+  param_ops_int
+  param_ops_long
+  param_ops_uint
+  param_ops_ulong
+  pci_find_bus
+  pci_get_device
+  pci_load_saved_state
+  pcim_enable_device
+  pci_read_config_dword
+  __pci_register_driver
+  pci_rescan_bus
+  pci_restore_state
+  pci_save_state
+  pci_set_master
+  pci_store_saved_state
+  pci_unregister_driver
+  pci_write_config_dword
+  __per_cpu_offset
+  perf_event_create_kernel_counter
+  perf_event_disable
+  perf_event_enable
+  perf_event_read_value
+  perf_event_release_kernel
+  perf_trace_buf_alloc
+  perf_trace_run_bpf_submit
+  pfn_valid
+  phy_calibrate
+  phy_exit
+  phy_init
+  phy_power_off
+  phy_power_on
+  phy_reset
+  phy_set_mode_ext
+  pinctrl_add_gpio_range
+  pinctrl_dev_get_drvdata
+  pinctrl_force_sleep
+  pinctrl_get
+  pinctrl_lookup_state
+  pinctrl_pm_select_default_state
+  pinctrl_pm_select_sleep_state
+  pinctrl_put
+  pinctrl_remove_gpio_range
+  pinctrl_select_state
+  platform_bus_type
+  platform_device_add
+  platform_device_add_data
+  platform_device_add_properties
+  platform_device_add_resources
+  platform_device_alloc
+  platform_device_del
+  platform_device_put
+  platform_device_register
+  platform_device_register_full
+  platform_device_unregister
+  __platform_driver_register
+  platform_driver_unregister
+  platform_get_irq
+  platform_get_irq_byname
+  platform_get_irq_byname_optional
+  platform_get_resource
+  platform_get_resource_byname
+  __platform_register_drivers
+  pm_genpd_init
+  pm_power_off
+  pm_qos_remove_request
+  pm_qos_update_request
+  __pm_relax
+  pm_relax
+  pm_runtime_allow
+  pm_runtime_barrier
+  __pm_runtime_disable
+  pm_runtime_enable
+  pm_runtime_forbid
+  pm_runtime_force_resume
+  pm_runtime_force_suspend
+  pm_runtime_get_if_in_use
+  __pm_runtime_idle
+  pm_runtime_irq_safe
+  pm_runtime_no_callbacks
+  __pm_runtime_resume
+  pm_runtime_set_autosuspend_delay
+  __pm_runtime_set_status
+  __pm_runtime_suspend
+  __pm_runtime_use_autosuspend
+  __pm_stay_awake
+  pm_stay_awake
+  pm_wakeup_dev_event
+  pm_wakeup_ws_event
+  power_supply_changed
+  power_supply_get_by_name
+  power_supply_get_drvdata
+  power_supply_get_property
+  power_supply_put
+  power_supply_register
+  power_supply_unregister
+  preempt_schedule
+  preempt_schedule_notrace
+  prepare_to_wait_event
+  printk
+  proc_create_seq_private
+  __put_cred
+  put_device
+  __put_page
+  __put_task_struct
+  put_tty_driver
+  put_unused_fd
+  put_vaddr_frames
+  pwmchip_add
+  pwmchip_remove
+  pwm_get_chip_data
+  pwm_set_chip_data
+  queue_delayed_work_on
+  queue_work_on
+  __raw_notifier_call_chain
+  raw_notifier_call_chain
+  raw_notifier_chain_register
+  raw_notifier_chain_unregister
+  _raw_read_lock
+  _raw_read_lock_irqsave
+  _raw_read_unlock
+  _raw_read_unlock_irqrestore
+  _raw_spin_lock
+  _raw_spin_lock_bh
+  _raw_spin_lock_irq
+  _raw_spin_lock_irqsave
+  _raw_spin_trylock
+  _raw_spin_unlock
+  _raw_spin_unlock_bh
+  _raw_spin_unlock_irq
+  _raw_spin_unlock_irqrestore
+  _raw_write_lock_irqsave
+  _raw_write_unlock_irqrestore
+  rb_erase
+  rb_first
+  rb_insert_color
+  rb_next
+  rb_prev
+  rb_replace_node
+  __rcu_read_lock
+  __rcu_read_unlock
+  rdev_get_drvdata
+  rdev_get_id
+  reboot_mode
+  refcount_dec_and_test_checked
+  refcount_inc_checked
+  refcount_inc_not_zero_checked
+  __refrigerator
+  regcache_cache_only
+  regcache_drop_region
+  regcache_mark_dirty
+  regcache_sync
+  __register_chrdev
+  register_chrdev_region
+  register_console
+  register_die_notifier
+  register_netdev
+  register_pm_notifier
+  register_reboot_notifier
+  register_restart_handler
+  register_shrinker
+  register_syscore_ops
+  regmap_async_complete
+  regmap_bulk_read
+  regmap_multi_reg_write
+  regmap_multi_reg_write_bypassed
+  regmap_raw_read
+  regmap_raw_write
+  regmap_raw_write_async
+  regmap_read
+  regmap_update_bits_base
+  regmap_write
+  regulator_bulk_disable
+  regulator_bulk_enable
+  regulator_disable
+  regulator_enable
+  regulator_force_disable
+  regulator_get
+  regulator_get_optional
+  regulator_is_enabled
+  regulator_list_voltage_linear
+  regulator_map_voltage_linear
+  regulator_put
+  release_firmware
+  release_pages
+  __release_region
+  remap_pfn_range
+  remap_vmalloc_range
+  remove_proc_entry
+  request_firmware
+  request_firmware_direct
+  request_firmware_nowait
+  __request_module
+  __request_region
+  request_threaded_irq
+  reset_control_assert
+  reset_control_deassert
+  reset_control_put
+  reset_control_reset
+  return_address
+  rps_needed
+  rtc_class_close
+  rtc_class_open
+  rtc_read_time
+  rtc_time64_to_tm
+  rtc_tm_to_time64
+  rtc_update_irq
+  rtc_valid_tm
+  rtnl_lock
+  rtnl_unlock
+  sched_clock
+  sched_setscheduler
+  sched_setscheduler_nocheck
+  sched_show_task
+  schedule
+  schedule_timeout
+  scnprintf
+  scsi_block_when_processing_errors
+  scsi_device_get
+  __scsi_device_lookup_by_target
+  __scsi_execute
+  scsi_print_sense_hdr
+  sdev_prefix_printk
+  sdio_signal_irq
+  seq_lseek
+  seq_printf
+  seq_read
+  set_cpus_allowed_ptr
+  set_normalized_timespec64
+  set_page_dirty_lock
+  sg_alloc_table
+  sg_alloc_table_from_pages
+  sg_copy_to_buffer
+  sg_free_table
+  sg_init_one
+  sg_init_table
+  sg_miter_next
+  sg_miter_start
+  sg_miter_stop
+  sg_nents_for_len
+  sg_next
+  simple_open
+  simple_read_from_buffer
+  simple_strtol
+  simple_strtoul
+  single_open
+  single_release
+  skb_copy_expand
+  skb_dequeue
+  skb_pull
+  skb_push
+  skb_put
+  skb_queue_head
+  skb_queue_purge
+  skb_queue_tail
+  skb_realloc_headroom
+  skb_trim
+  smpboot_register_percpu_thread
+  smp_call_function
+  smp_call_function_single
+  snd_compr_stop_error
+  snd_ctl_boolean_mono_info
+  snd_ctl_notify
+  snd_device_free
+  snd_dma_alloc_pages
+  snd_dmaengine_pcm_prepare_slave_config
+  snd_dma_free_pages
+  snd_hwdep_new
+  snd_pcm_format_physical_width
+  snd_pcm_format_width
+  snd_pcm_hw_constraint_list
+  snd_pcm_lib_free_pages
+  snd_pcm_lib_ioctl
+  snd_pcm_lib_malloc_pages
+  snd_pcm_lib_preallocate_free_for_all
+  snd_pcm_lib_preallocate_pages
+  snd_pcm_period_elapsed
+  snd_pcm_rate_range_to_bits
+  snd_soc_add_component_controls
+  snd_soc_bytes_info_ext
+  snd_soc_bytes_tlv_callback
+  snd_soc_card_get_kcontrol
+  snd_soc_component_async_complete
+  snd_soc_component_disable_pin
+  snd_soc_component_force_enable_pin
+  snd_soc_component_init_regmap
+  snd_soc_component_read
+  snd_soc_component_set_pll
+  snd_soc_component_set_sysclk
+  snd_soc_component_update_bits
+  snd_soc_component_update_bits_async
+  snd_soc_component_write
+  snd_soc_dai_set_bclk_ratio
+  snd_soc_dai_set_channel_map
+  snd_soc_dai_set_sysclk
+  snd_soc_dai_set_tdm_slot
+  snd_soc_dapm_add_routes
+  snd_soc_dapm_disable_pin
+  snd_soc_dapm_enable_pin
+  snd_soc_dapm_get_enum_double
+  snd_soc_dapm_get_pin_status
+  snd_soc_dapm_get_pin_switch
+  snd_soc_dapm_get_volsw
+  snd_soc_dapm_ignore_suspend
+  snd_soc_dapm_info_pin_switch
+  snd_soc_dapm_new_control
+  snd_soc_dapm_new_controls
+  snd_soc_dapm_put_enum_double
+  snd_soc_dapm_put_pin_switch
+  snd_soc_dapm_put_volsw
+  snd_soc_dapm_sync
+  snd_soc_dapm_weak_routes
+  snd_soc_find_dai
+  snd_soc_get_enum_double
+  snd_soc_get_pcm_runtime
+  snd_soc_get_volsw
+  snd_soc_get_volsw_range
+  snd_soc_get_xr_sx
+  snd_soc_info_enum_double
+  snd_soc_info_volsw
+  snd_soc_info_volsw_range
+  snd_soc_info_volsw_sx
+  snd_soc_info_xr_sx
+  snd_soc_new_compress
+  snd_soc_of_get_dai_link_codecs
+  snd_soc_of_get_dai_name
+  snd_soc_of_parse_audio_routing
+  snd_soc_of_parse_daifmt
+  snd_soc_of_put_dai_link_codecs
+  snd_soc_params_to_bclk
+  snd_soc_pm_ops
+  snd_soc_put_enum_double
+  snd_soc_put_volsw
+  snd_soc_put_volsw_range
+  snd_soc_put_xr_sx
+  snd_soc_register_card
+  snd_soc_register_component
+  snd_soc_set_runtime_hwparams
+  snd_soc_tplg_component_load
+  snd_soc_tplg_component_remove
+  snd_soc_tplg_widget_bind_event
+  snd_soc_unregister_card
+  snd_soc_unregister_component
+  snprintf
+  soc_device_register
+  sort
+  __spi_alloc_controller
+  spi_controller_resume
+  spi_controller_suspend
+  spi_finalize_current_message
+  spi_register_controller
+  __spi_register_driver
+  spi_setup
+  spi_sync
+  spi_unregister_controller
+  split_page
+  sprintf
+  sprint_symbol
+  srcu_init_notifier_head
+  srcu_notifier_call_chain
+  srcu_notifier_chain_register
+  srcu_notifier_chain_unregister
+  sscanf
+  __stack_chk_fail
+  __stack_chk_guard
+  static_key_initialized
+  static_key_slow_dec
+  static_key_slow_inc
+  strcat
+  strchr
+  strchrnul
+  strcmp
+  strcpy
+  strcspn
+  stream_open
+  strlcat
+  strlcpy
+  strlen
+  strncat
+  strncmp
+  strncpy
+  strnlen
+  strpbrk
+  strsep
+  strstr
+  submit_bh
+  subsys_system_register
+  __sw_hweight32
+  __sw_hweight64
+  __sync_dirty_buffer
+  sync_file_create
+  sync_file_get_fence
+  synchronize_irq
+  synchronize_rcu
+  syscon_regmap_lookup_by_phandle
+  sysfs_add_file_to_group
+  sysfs_create_file_ns
+  sysfs_create_group
+  sysfs_create_groups
+  sysfs_create_link
+  __sysfs_match_string
+  sysfs_notify
+  sysfs_remove_file_ns
+  sysfs_remove_group
+  sysfs_remove_link
+  sysfs_streq
+  system_freezable_wq
+  system_freezing_cnt
+  system_highpri_wq
+  system_state
+  system_unbound_wq
+  system_wq
+  sys_tz
+  tasklet_init
+  tasklet_kill
+  __tasklet_schedule
+  time64_to_tm
+  _totalram_pages
+  touch_softlockup_watchdog
+  trace_define_field
+  trace_event_buffer_commit
+  trace_event_buffer_reserve
+  trace_event_ignore_this_pid
+  trace_event_raw_init
+  trace_event_reg
+  trace_handle_return
+  __trace_puts
+  trace_raw_output_prep
+  trace_seq_printf
+  try_module_get
+  __tty_alloc_driver
+  tty_flip_buffer_push
+  tty_hangup
+  tty_insert_flip_string_fixed_flag
+  tty_kref_put
+  tty_port_destroy
+  tty_port_init
+  tty_port_register_device
+  tty_port_tty_get
+  tty_register_driver
+  tty_set_operations
+  tty_std_termios
+  tty_unregister_device
+  tty_unregister_driver
+  tty_wakeup
+  typec_register_partner
+  typec_register_port
+  typec_set_data_role
+  typec_set_pwr_opmode
+  typec_set_pwr_role
+  typec_unregister_partner
+  typec_unregister_port
+  uart_add_one_port
+  uart_console_write
+  uart_get_baud_rate
+  uart_parse_options
+  uart_register_driver
+  uart_remove_one_port
+  uart_resume_port
+  uart_set_options
+  uart_suspend_port
+  uart_unregister_driver
+  uart_update_timeout
+  uart_write_wakeup
+  __udelay
+  unmap_mapping_range
+  __unregister_chrdev
+  unregister_chrdev_region
+  unregister_netdev
+  unregister_pm_notifier
+  unregister_reboot_notifier
+  unregister_restart_handler
+  unregister_shrinker
+  up
+  update_devfreq
+  up_read
+  up_write
+  usb_add_function
+  usb_add_gadget_udc
+  usb_assign_descriptors
+  usb_copy_descriptors
+  usb_decode_ctrl
+  usb_del_gadget_udc
+  usb_ep_alloc_request
+  usb_ep_autoconfig
+  usb_ep_dequeue
+  usb_ep_disable
+  usb_ep_enable
+  usb_ep_free_request
+  usb_ep_queue
+  usb_ep_set_halt
+  usb_ep_set_maxpacket_limit
+  usb_free_all_descriptors
+  usb_function_register
+  usb_function_unregister
+  usb_gadget_giveback_request
+  usb_gadget_map_request_by_dev
+  usb_gadget_set_state
+  usb_gadget_udc_reset
+  usb_gadget_unmap_request_by_dev
+  usb_gadget_vbus_connect
+  usb_gadget_vbus_disconnect
+  usb_get_dr_mode
+  usb_get_maximum_speed
+  usb_gstrings_attach
+  usb_hub_find_child
+  usb_interface_id
+  usb_os_desc_prepare_interf_dir
+  usb_otg_state_string
+  usb_put_function_instance
+  usb_register_notify
+  usb_speed_string
+  usb_string_id
+  usb_unregister_notify
+  __usecs_to_jiffies
+  usleep_range
+  v4l2_ctrl_handler_free
+  v4l2_ctrl_handler_init_class
+  v4l2_ctrl_handler_setup
+  v4l2_ctrl_log_status
+  v4l2_ctrl_new_custom
+  v4l2_ctrl_new_std
+  v4l2_ctrl_new_std_menu
+  v4l2_device_register
+  v4l2_device_register_subdev
+  v4l2_device_register_subdev_nodes
+  v4l2_device_unregister
+  v4l2_device_unregister_subdev
+  v4l2_event_pending
+  v4l2_fh_add
+  v4l2_fh_del
+  v4l2_fh_exit
+  v4l2_fh_init
+  v4l2_subdev_call_wrappers
+  v4l2_subdev_init
+  v4l_bound_align_image
+  vabits_actual
+  vb2_buffer_done
+  vb2_create_bufs
+  vb2_dqbuf
+  vb2_expbuf
+  vb2_mmap
+  vb2_ops_wait_finish
+  vb2_ops_wait_prepare
+  vb2_plane_cookie
+  vb2_plane_vaddr
+  vb2_poll
+  vb2_prepare_buf
+  vb2_qbuf
+  vb2_querybuf
+  vb2_queue_init
+  vb2_queue_release
+  vb2_reqbufs
+  vb2_request_object_is_buffer
+  vb2_streamoff
+  vb2_streamon
+  vb2_wait_for_all_buffers
+  vfree
+  video_devdata
+  video_device_alloc
+  video_device_release
+  video_ioctl2
+  __video_register_device
+  video_unregister_device
+  vmalloc
+  vmalloc_to_page
+  vmalloc_user
+  vmap
+  vmf_insert_pfn_prot
+  vm_get_page_prot
+  vm_iomap_memory
+  vm_map_pages
+  vsnprintf
+  vunmap
+  vzalloc
+  wait_for_completion
+  wait_for_completion_interruptible
+  wait_for_completion_interruptible_timeout
+  wait_for_completion_killable
+  wait_for_completion_timeout
+  __wait_on_buffer
+  __wake_up
+  wake_up_process
+  wakeup_source_add
+  wakeup_source_create
+  wakeup_source_destroy
+  wakeup_source_register
+  wakeup_source_unregister
+  __warn_printk
+  watchdog_init_timeout
+  watchdog_register_device
+  watchdog_set_restart_priority
+  watchdog_unregister_device
+  work_busy
diff --git a/android/abi_gki_aarch64_hikey960 b/android/abi_gki_aarch64_hikey960
new file mode 100644
index 0000000..c85acb3
--- /dev/null
+++ b/android/abi_gki_aarch64_hikey960
@@ -0,0 +1,1311 @@
+[abi_symbol_list]
+# commonly used symbols
+  alloc_chrdev_region
+  __alloc_disk_node
+  __alloc_pages_nodemask
+  alloc_workqueue
+  amba_driver_register
+  amba_driver_unregister
+  amba_release_regions
+  amba_request_regions
+  __arch_copy_from_user
+  __arch_copy_to_user
+  arm64_const_caps_ready
+  bcmp
+  bin2hex
+  blk_cleanup_queue
+  blk_execute_rq
+  blk_execute_rq_nowait
+  blk_get_queue
+  blk_mq_alloc_tag_set
+  blk_mq_complete_request
+  blk_mq_end_request
+  blk_mq_free_request
+  blk_mq_free_tag_set
+  blk_mq_init_queue
+  blk_mq_quiesce_queue
+  blk_mq_requeue_request
+  blk_mq_start_request
+  blk_mq_unquiesce_queue
+  blk_put_queue
+  blk_queue_flag_clear
+  blk_queue_flag_set
+  blk_queue_logical_block_size
+  blk_queue_max_discard_sectors
+  blk_queue_max_hw_sectors
+  blk_queue_max_segments
+  blk_queue_write_cache
+  blk_rq_map_sg
+  bpf_trace_run1
+  bpf_trace_run2
+  bpf_trace_run3
+  cancel_delayed_work
+  cancel_delayed_work_sync
+  cancel_work_sync
+  capable
+  cdev_device_add
+  cdev_device_del
+  cdev_init
+  __cfi_slowpath
+  __check_object_size
+  __class_create
+  class_destroy
+  clk_disable
+  clk_enable
+  clk_get
+  clk_get_rate
+  clk_prepare
+  clk_put
+  clk_set_rate
+  clk_unprepare
+  __close_fd
+  cma_alloc
+  cma_get_name
+  cma_release
+  complete
+  __const_udelay
+  cpu_hwcap_keys
+  cpu_hwcaps
+  cpu_number
+  __cpu_online_mask
+  __cpu_possible_mask
+  d_add
+  debugfs_attr_read
+  debugfs_attr_write
+  debugfs_create_dir
+  debugfs_create_file
+  debugfs_create_file_unsafe
+  debugfs_remove
+  debugfs_remove_recursive
+  default_llseek
+  delayed_work_timer_fn
+  del_gendisk
+  del_timer
+  del_timer_sync
+  destroy_workqueue
+  dev_driver_string
+  _dev_err
+  device_add_disk
+  device_create_file
+  device_get_match_data
+  device_initialize
+  device_init_wakeup
+  device_release_driver
+  device_remove_file
+  device_set_wakeup_capable
+  device_wakeup_enable
+  _dev_info
+  devm_clk_get
+  devm_gpiod_get
+  devm_gpiod_get_optional
+  devm_ioremap
+  devm_ioremap_resource
+  devm_kfree
+  devm_kmalloc
+  devm_pinctrl_get
+  __devm_regmap_init_i2c
+  __devm_regmap_init_mmio_clk
+  devm_regulator_register
+  devm_request_threaded_irq
+  devm_reset_control_array_get
+  __devm_reset_control_get
+  devm_thermal_zone_of_sensor_register
+  dev_pm_opp_get_opp_count
+  devres_add
+  devres_alloc_node
+  devres_free
+  devres_release
+  dev_set_name
+  _dev_warn
+  disable_irq
+  dma_alloc_attrs
+  dma_buf_export
+  dma_direct_map_page
+  dma_direct_map_sg
+  dma_direct_sync_sg_for_cpu
+  dma_direct_sync_sg_for_device
+  dma_direct_sync_single_for_cpu
+  dma_direct_sync_single_for_device
+  dma_direct_unmap_page
+  dma_direct_unmap_sg
+  dma_free_attrs
+  dma_heap_add
+  dmam_alloc_attrs
+  dma_pool_alloc
+  dma_pool_create
+  dma_pool_destroy
+  dma_pool_free
+  dma_release_channel
+  dma_request_slave_channel
+  dma_set_coherent_mask
+  dma_set_mask
+  down_read
+  down_write
+  dput
+  driver_unregister
+  drm_atomic_helper_connector_destroy_state
+  drm_atomic_helper_connector_duplicate_state
+  drm_atomic_helper_connector_reset
+  drm_connector_attach_encoder
+  drm_connector_cleanup
+  drm_connector_init
+  drm_connector_list_iter_begin
+  drm_connector_list_iter_end
+  drm_connector_list_iter_next
+  drm_connector_unregister
+  drm_err
+  drm_helper_probe_single_connector_modes
+  drm_mode_copy
+  drm_mode_vrefresh
+  enable_irq
+  event_triggers_call
+  fd_install
+  find_next_bit
+  find_next_zero_bit
+  finish_wait
+  flush_work
+  flush_workqueue
+  fput
+  free_irq
+  __free_pages
+  free_pages
+  generic_file_llseek
+  get_device
+  __get_free_pages
+  get_random_bytes
+  get_unused_fd_flags
+  get_zeroed_page
+  gpiod_set_value_cansleep
+  gpio_to_desc
+  hrtimer_cancel
+  hrtimer_init
+  hrtimer_start_range_ns
+  i2c_del_driver
+  i2c_register_driver
+  i2c_transfer
+  ida_alloc_range
+  ida_destroy
+  ida_free
+  ieee80211_channel_to_freq_khz
+  ieee80211_connection_loss
+  ieee80211_find_sta
+  ieee80211_get_hdrlen_from_skb
+  ieee80211_queue_delayed_work
+  ieee80211_stop_rx_ba_session
+  __init_rwsem
+  init_timer_key
+  init_wait_entry
+  __init_waitqueue_head
+  __ioremap
+  iounmap
+  irq_get_irq_data
+  irq_of_parse_and_map
+  irq_set_irq_wake
+  jiffies
+  kfree
+  kfree_const
+  kfree_skb
+  kimage_vaddr
+  __kmalloc
+  kmalloc_caches
+  kmalloc_order_trace
+  kmem_cache_alloc_trace
+  kmemdup
+  kstrndup
+  kstrtoint
+  kstrtouint
+  kstrtoul_from_user
+  kstrtoull
+  ktime_get
+  ktime_get_mono_fast_ns
+  ktime_get_with_offset
+  __list_add_valid
+  __list_del_entry_valid
+  memchr_inv
+  memcpy
+  memdup_user
+  memmove
+  mempool_alloc
+  mempool_destroy
+  mempool_free
+  memset
+  mmc_add_host
+  mmc_alloc_host
+  mmc_detect_change
+  mmc_free_host
+  mmc_gpiod_request_cd
+  mmc_gpiod_request_ro
+  mmc_gpio_get_cd
+  mmc_gpio_get_ro
+  mmc_hw_reset
+  mmc_of_parse
+  mmc_regulator_get_supply
+  mmc_regulator_set_ocr
+  mmc_regulator_set_vqmmc
+  mmc_remove_host
+  mmc_request_done
+  mmc_send_tuning
+  mod_delayed_work_on
+  mod_timer
+  module_layout
+  module_put
+  __msecs_to_jiffies
+  msleep
+  msleep_interruptible
+  __mutex_init
+  mutex_lock
+  mutex_lock_interruptible
+  mutex_unlock
+  no_llseek
+  nonseekable_open
+  noop_llseek
+  of_alias_get_id
+  of_clk_get
+  of_device_get_match_data
+  of_device_is_compatible
+  of_find_compatible_node
+  of_find_property
+  of_get_child_by_name
+  of_get_named_gpio_flags
+  of_get_property
+  of_graph_get_remote_node
+  of_graph_parse_endpoint
+  of_iomap
+  of_match_device
+  of_match_node
+  of_parse_phandle
+  of_property_read_string
+  of_property_read_string_helper
+  of_property_read_variable_u32_array
+  param_ops_bool
+  param_ops_charp
+  param_ops_int
+  param_ops_uint
+  pci_dev_put
+  pci_match_id
+  pci_read_config_word
+  __pci_register_driver
+  pci_unregister_driver
+  perf_trace_buf_alloc
+  perf_trace_run_bpf_submit
+  pinctrl_lookup_state
+  pinctrl_pm_select_default_state
+  pinctrl_pm_select_sleep_state
+  pinctrl_select_state
+  platform_device_unregister
+  __platform_driver_register
+  platform_driver_unregister
+  platform_get_irq
+  platform_get_resource
+  __pm_runtime_disable
+  pm_runtime_enable
+  pm_runtime_force_resume
+  pm_runtime_force_suspend
+  __pm_runtime_idle
+  __pm_runtime_resume
+  pm_runtime_set_autosuspend_delay
+  __pm_runtime_set_status
+  __pm_runtime_suspend
+  __pm_runtime_use_autosuspend
+  pm_suspend_global_flags
+  pm_wakeup_dev_event
+  preempt_schedule
+  preempt_schedule_notrace
+  prepare_to_wait_event
+  printk
+  put_device
+  put_disk
+  __put_page
+  __put_task_struct
+  queue_delayed_work_on
+  queue_work_on
+  ___ratelimit
+  _raw_spin_lock
+  _raw_spin_lock_bh
+  _raw_spin_lock_irq
+  _raw_spin_lock_irqsave
+  _raw_spin_unlock
+  _raw_spin_unlock_bh
+  _raw_spin_unlock_irq
+  _raw_spin_unlock_irqrestore
+  __rcu_read_lock
+  __rcu_read_unlock
+  rdev_get_drvdata
+  refcount_dec_and_test_checked
+  refcount_inc_checked
+  refcount_inc_not_zero_checked
+  regmap_raw_read
+  regmap_raw_write
+  regmap_read
+  regmap_update_bits_base
+  regmap_write
+  regulator_disable
+  regulator_enable
+  regulator_enable_regmap
+  regulator_get_optional
+  regulator_get_voltage_sel_regmap
+  regulator_list_voltage_table
+  regulator_put
+  regulator_set_voltage
+  regulator_set_voltage_sel_regmap
+  release_firmware
+  remap_pfn_range
+  request_firmware
+  request_threaded_irq
+  reset_control_assert
+  reset_control_deassert
+  schedule
+  schedule_timeout
+  schedule_timeout_uninterruptible
+  scnprintf
+  seq_lseek
+  seq_printf
+  seq_puts
+  seq_read
+  set_disk_ro
+  sg_alloc_table
+  sg_free_table
+  sg_init_table
+  sg_miter_next
+  sg_miter_start
+  sg_miter_stop
+  sg_next
+  simple_attr_open
+  simple_attr_release
+  simple_open
+  simple_read_from_buffer
+  simple_statfs
+  single_open
+  single_release
+  skb_pull
+  skb_queue_tail
+  snprintf
+  __spi_register_driver
+  spi_setup
+  spi_sync
+  sprintf
+  sscanf
+  __stack_chk_fail
+  __stack_chk_guard
+  strcmp
+  strlcpy
+  strlen
+  strncmp
+  strncpy
+  strnlen
+  __sw_hweight32
+  __sw_hweight64
+  synchronize_irq
+  synchronize_rcu
+  syscon_node_to_regmap
+  syscon_regmap_lookup_by_phandle
+  sysfs_create_group
+  sysfs_remove_group
+  sysfs_streq
+  system_wq
+  tasklet_init
+  __tasklet_schedule
+  trace_define_field
+  trace_event_buffer_commit
+  trace_event_buffer_reserve
+  trace_event_ignore_this_pid
+  trace_event_raw_init
+  trace_event_reg
+  trace_handle_return
+  trace_raw_output_prep
+  trace_seq_printf
+  trace_seq_putc
+  try_module_get
+  __ubsan_handle_cfi_check_fail_abort
+  __udelay
+  unregister_chrdev_region
+  up_read
+  up_write
+  usb_add_hcd
+  usb_amd_dev_put
+  usb_amd_quirk_pll_check
+  usb_amd_quirk_pll_disable
+  usb_amd_quirk_pll_enable
+  usb_calc_bus_time
+  usb_create_hcd
+  usb_disabled
+  usb_hcd_check_unlink_urb
+  usb_hcd_giveback_urb
+  usb_hc_died
+  usb_hcd_link_urb_to_ep
+  usb_hcd_pci_pm_ops
+  usb_hcd_pci_probe
+  usb_hcd_pci_remove
+  usb_hcd_pci_shutdown
+  usb_hcd_platform_shutdown
+  usb_hcd_poll_rh_status
+  usb_hcd_resume_root_hub
+  usb_hcds_loaded
+  usb_hcd_unlink_urb_from_ep
+  usb_put_hcd
+  usb_remove_hcd
+  usb_root_hub_lost_power
+  __usecs_to_jiffies
+  usleep_range
+  vfree
+  vfs_fsync
+  vmalloc
+  vmap
+  vunmap
+  vzalloc
+  wait_for_completion
+  wait_for_completion_timeout
+  __wake_up
+  __warn_printk
+
+# required by adv7511.ko
+  cec_allocate_adapter
+  cec_delete_adapter
+  cec_received_msg_ts
+  cec_register_adapter
+  cec_s_phys_addr
+  cec_s_phys_addr_from_edid
+  cec_transmit_attempt_done_ts
+  cec_transmit_done_ts
+  cec_unregister_adapter
+  devm_regulator_bulk_get
+  drm_add_edid_modes
+  drm_bridge_add
+  drm_bridge_remove
+  drm_connector_update_edid_property
+  drm_detect_hdmi_monitor
+  drm_do_get_edid
+  drm_kms_helper_hotplug_event
+  hdmi_avi_infoframe_init
+  hdmi_avi_infoframe_pack
+  i2c_new_ancillary_device
+  i2c_unregister_device
+  mipi_dsi_attach
+  mipi_dsi_detach
+  mipi_dsi_device_register_full
+  mipi_dsi_device_unregister
+  mipi_dsi_driver_register_full
+  mipi_dsi_driver_unregister
+  of_find_mipi_dsi_host_by_node
+  platform_device_register_full
+  regcache_mark_dirty
+  regcache_sync
+  regmap_bulk_write
+  regmap_register_patch
+  regulator_bulk_disable
+  regulator_bulk_enable
+
+# required by ambakmi.ko
+  serio_interrupt
+  serio_reconnect
+  __serio_register_port
+  serio_unregister_port
+
+# required by armmmci.ko
+  clk_round_rate
+
+# required by clk-hi655x.ko
+  devm_clk_hw_register
+  devm_of_clk_add_hw_provider
+  of_clk_hw_simple_get
+
+# required by cma_heap.ko
+  dma_contiguous_default_area
+  dma_heap_get_drvdata
+  sg_alloc_table_from_pages
+
+# required by cn.ko
+  __alloc_skb
+  init_net
+  netlink_broadcast
+  netlink_has_listeners
+  __netlink_kernel_create
+  netlink_kernel_release
+  netlink_unicast
+  __nlmsg_put
+  proc_create_single_data
+  remove_proc_entry
+
+# required by cpufreq-dt.ko
+  arch_set_freq_scale
+  cpufreq_enable_boost_support
+  cpufreq_freq_attr_scaling_available_freqs
+  cpufreq_freq_attr_scaling_boost_freqs
+  cpufreq_generic_frequency_table_verify
+  cpufreq_generic_get
+  cpufreq_generic_suspend
+  cpufreq_register_driver
+  cpufreq_unregister_driver
+  dev_pm_opp_free_cpufreq_table
+  dev_pm_opp_get_max_transition_latency
+  dev_pm_opp_get_sharing_cpus
+  dev_pm_opp_get_suspend_opp_freq
+  dev_pm_opp_init_cpufreq_table
+  dev_pm_opp_of_cpumask_add_table
+  dev_pm_opp_of_cpumask_remove_table
+  dev_pm_opp_of_get_sharing_cpus
+  dev_pm_opp_of_register_em
+  dev_pm_opp_put_regulators
+  dev_pm_opp_set_rate
+  dev_pm_opp_set_regulators
+  dev_pm_opp_set_sharing_cpus
+  get_cpu_device
+  policy_has_boost_freq
+
+# required by dw_mmc.ko
+  debugfs_create_u32
+  debugfs_create_x32
+  device_property_present
+  device_property_read_string_array
+  device_property_read_u32_array
+  mmc_can_gpio_cd
+  sdio_signal_irq
+
+# required by ehci-hcd.ko
+  ehci_cf_port_reset_rwsem
+  usb_for_each_dev
+  usb_hcd_end_port_resume
+  usb_hcd_start_port_resume
+  usb_hub_clear_tt_buffer
+
+# required by ehci-pci.ko
+  pci_clear_mwi
+  pci_find_capability
+  pci_read_config_byte
+  pci_read_config_dword
+  pci_set_mwi
+  pci_write_config_byte
+  usb_amd_hang_symptom_quirk
+
+# required by ehci-platform.ko
+  device_attach
+  device_pm_wait_for_dev
+  soc_device_match
+  usb_of_get_companion_dev
+
+# required by gadgetfs.ko
+  _copy_from_iter_full
+  _copy_to_iter
+  current_time
+  d_alloc_name
+  d_delete
+  dup_iter
+  fasync_helper
+  generic_delete_inode
+  get_next_ino
+  get_tree_single
+  kill_fasync
+  kill_litter_super
+  kiocb_set_cancel_fn
+  mutex_trylock
+  simple_dir_inode_operations
+  simple_dir_operations
+  unuse_mm
+  usb_ep_alloc_request
+  usb_ep_clear_halt
+  usb_ep_dequeue
+  usb_ep_disable
+  usb_ep_enable
+  usb_ep_fifo_flush
+  usb_ep_fifo_status
+  usb_ep_free_request
+  usb_ep_queue
+  usb_ep_set_halt
+  usb_gadget_probe_driver
+  usb_gadget_set_state
+  usb_gadget_unregister_driver
+  usb_gadget_vbus_draw
+  usb_get_gadget_udc_name
+  use_mm
+
+# required by hi3660-i2s.ko
+  devm_snd_dmaengine_pcm_register
+  pinctrl_put
+  snd_dmaengine_pcm_prepare_slave_config
+  snd_soc_register_component
+  snd_soc_unregister_component
+
+# required by hi3660-mailbox.ko
+  devm_mbox_controller_register
+
+# required by hi6421-pmic-core.ko
+  devm_mfd_add_devices
+
+# required by hi6421v530-regulator.ko
+  regulator_disable_regmap
+  regulator_is_enabled_regmap
+  regulator_map_voltage_ascend
+
+# required by hi655x-pmic.ko
+  devm_gpio_request_one
+  gpiod_to_irq
+  mfd_add_devices
+  mfd_remove_devices
+  regmap_add_irq_chip
+  regmap_del_irq_chip
+  regmap_irq_get_domain
+
+# required by hi655x-regulator.ko
+  regulator_list_voltage_linear
+
+# required by hisi_hikey_usb.ko
+  dev_fwnode
+  usb_role_switch_get
+  usb_role_switch_get_role
+  usb_role_switch_put
+  usb_role_switch_register
+  usb_role_switch_set_role
+  usb_role_switch_unregister
+
+# required by hisi_powerkey.ko
+  devm_input_allocate_device
+  devm_request_any_context_irq
+  input_event
+  input_register_device
+  input_set_capability
+  platform_get_irq_byname
+
+# required by hisi_thermal.ko
+  _dev_crit
+  of_thermal_get_ntrips
+  of_thermal_get_trip_points
+  thermal_zone_device_update
+
+# required by hwmon.ko
+  __class_register
+  class_unregister
+  device_register
+  device_unregister
+  kstrtoll
+  strcpy
+  strpbrk
+
+# required by i2c-designware-core.ko
+  i2c_add_numbered_adapter
+  i2c_generic_scl_recovery
+  i2c_recover_bus
+
+# required by i2c-designware-platform.ko
+  devm_clk_get_optional
+  i2c_del_adapter
+  i2c_parse_fw_timings
+
+# required by i2c-dev.ko
+  bus_register_notifier
+  bus_unregister_notifier
+  device_for_each_child
+  i2c_adapter_type
+  i2c_bus_type
+  i2c_for_each_dev
+  i2c_get_adapter
+  i2c_put_adapter
+  i2c_smbus_xfer
+  i2c_transfer_buffer_flags
+  i2c_verify_client
+  register_chrdev_region
+
+# required by ion_cma_heap.ko
+  cma_for_each_area
+  ion_buffer_prep_noncached
+  __ion_device_add_heap
+  ion_device_remove_heap
+
+# required by k3dma.ko
+  devm_free_irq
+  dma_async_device_register
+  dma_async_device_unregister
+  dma_async_tx_descriptor_init
+  dma_get_slave_channel
+  dmam_pool_create
+  of_dma_controller_free
+  of_dma_controller_register
+  tasklet_kill
+
+# required by kirin-drm.ko
+  component_bind_all
+  component_master_add_with_match
+  component_master_del
+  component_unbind_all
+  drm_atomic_get_crtc_state
+  drm_atomic_helper_check
+  drm_atomic_helper_commit
+  drm_atomic_helper_crtc_destroy_state
+  drm_atomic_helper_crtc_duplicate_state
+  drm_atomic_helper_crtc_reset
+  drm_atomic_helper_disable_plane
+  drm_atomic_helper_page_flip
+  drm_atomic_helper_plane_destroy_state
+  drm_atomic_helper_plane_duplicate_state
+  drm_atomic_helper_plane_reset
+  drm_atomic_helper_set_config
+  drm_atomic_helper_update_plane
+  drm_compat_ioctl
+  drm_connector_register
+  drm_crtc_arm_vblank_event
+  drm_crtc_cleanup
+  drm_crtc_handle_vblank
+  drm_crtc_init_with_planes
+  drm_crtc_send_vblank_event
+  drm_crtc_vblank_get
+  drm_crtc_vblank_off
+  drm_crtc_vblank_on
+  drm_dev_alloc
+  drm_dev_put
+  drm_dev_register
+  drm_dev_unregister
+  drm_fb_cma_get_gem_obj
+  drm_gem_cma_dumb_create_internal
+  drm_gem_cma_free_object
+  drm_gem_cma_mmap
+  drm_gem_cma_prime_get_sg_table
+  drm_gem_cma_prime_import_sg_table
+  drm_gem_cma_prime_mmap
+  drm_gem_cma_prime_vmap
+  drm_gem_cma_prime_vunmap
+  drm_gem_cma_vm_ops
+  drm_gem_fb_create
+  drm_gem_prime_export
+  drm_gem_prime_fd_to_handle
+  drm_gem_prime_handle_to_fd
+  drm_gem_prime_import
+  drm_ioctl
+  drm_kms_helper_poll_fini
+  drm_kms_helper_poll_init
+  drm_mode_config_cleanup
+  drm_mode_config_init
+  drm_mode_config_reset
+  drm_of_component_match_add
+  drm_open
+  drm_plane_cleanup
+  drm_poll
+  drm_read
+  drm_release
+  drm_universal_plane_init
+  drm_vblank_init
+
+# required by kirin-dsi.ko
+  component_add
+  component_del
+  drm_bridge_attach
+  drm_dbg
+  drm_encoder_cleanup
+  drm_encoder_init
+  drm_of_find_possible_crtcs
+  drm_panel_attach
+  drm_panel_disable
+  drm_panel_enable
+  drm_panel_get_modes
+  drm_panel_prepare
+  drm_panel_unprepare
+  drm_sysfs_hotplug_event
+  mipi_dsi_host_register
+  mipi_dsi_host_unregister
+  of_drm_find_bridge
+  of_drm_find_panel
+  of_graph_get_next_endpoint
+  of_graph_get_remote_port_parent
+
+# required by mali_kbase.ko
+  anon_inode_getfd
+  __bitmap_weight
+  cache_line_size
+  clear_page
+  debugfs_create_bool
+  debugfs_create_size_t
+  devfreq_add_device
+  devfreq_cooling_unregister
+  devfreq_recommended_opp
+  devfreq_register_opp_notifier
+  devfreq_remove_device
+  devfreq_resume_device
+  devfreq_suspend_device
+  devfreq_unregister_opp_notifier
+  dev_pm_opp_find_freq_floor
+  dev_pm_opp_get_voltage
+  dev_pm_opp_of_add_table
+  dev_pm_opp_of_remove_table
+  dev_pm_opp_put
+  dma_buf_attach
+  dma_buf_begin_cpu_access
+  dma_buf_detach
+  dma_buf_end_cpu_access
+  dma_buf_get
+  dma_buf_kmap
+  dma_buf_kunmap
+  dma_buf_map_attachment
+  dma_buf_mmap
+  dma_buf_put
+  dma_buf_unmap_attachment
+  dma_fence_add_callback
+  dma_fence_context_alloc
+  dma_fence_default_wait
+  dma_fence_get_status
+  dma_fence_init
+  dma_fence_release
+  dma_fence_remove_callback
+  dma_fence_signal
+  down
+  downgrade_write
+  down_trylock
+  dump_stack
+  find_vma
+  get_user_pages
+  get_user_pages_fast
+  get_user_pages_remote
+  iomem_resource
+  kimage_voffset
+  kstrdup
+  kstrtobool_from_user
+  kthread_create_on_node
+  kthread_should_stop
+  kthread_stop
+  ktime_add_safe
+  ktime_get_raw_ts64
+  misc_deregister
+  misc_register
+  __mmdrop
+  mm_trace_rss_stat
+  of_devfreq_cooling_register_power
+  of_find_device_by_node
+  of_get_next_available_child
+  of_property_read_u64
+  rb_erase
+  rb_first
+  rb_insert_color
+  rb_next
+  rb_prev
+  rb_replace_node
+  register_shrinker
+  __release_region
+  remap_vmalloc_range
+  __request_region
+  seq_open
+  seq_putc
+  seq_release
+  seq_write
+  set_page_dirty_lock
+  simple_attr_read
+  simple_attr_write
+  sync_file_create
+  sync_file_get_fence
+  thermal_zone_get_temp
+  thermal_zone_get_zone_by_name
+  _totalram_pages
+  unmap_mapping_range
+  unregister_shrinker
+  up
+  vabits_actual
+  vmalloc_user
+  vmf_insert_pfn
+  vm_mmap
+  wake_up_process
+
+# required by mmc_block.ko
+  blk_get_request
+  __blk_mq_end_request
+  blk_mq_run_hw_queues
+  blk_put_request
+  blk_queue_bounce_limit
+  blk_queue_can_use_dma_map_merging
+  blk_queue_max_segment_size
+  blk_queue_rq_timeout
+  blk_update_request
+  bus_register
+  bus_unregister
+  check_disk_change
+  dma_get_merge_boundary
+  mmc_app_cmd
+  mmc_calc_max_discard
+  mmc_can_erase
+  mmc_can_sanitize
+  mmc_can_secure_erase_trim
+  mmc_can_trim
+  __mmc_claim_host
+  mmc_cmdq_disable
+  mmc_cmdq_enable
+  mmc_cqe_post_req
+  mmc_cqe_recovery
+  mmc_cqe_start_req
+  mmc_detect_card_removed
+  mmc_erase
+  mmc_erase_group_aligned
+  mmc_flush_cache
+  mmc_get_card
+  mmc_get_ext_csd
+  mmc_put_card
+  mmc_register_driver
+  mmc_release_host
+  mmc_retune_pause
+  mmc_retune_release
+  mmc_retune_unpause
+  mmc_run_bkops
+  __mmc_send_status
+  mmc_send_status
+  mmc_set_data_timeout
+  mmc_start_request
+  mmc_switch
+  mmc_unregister_driver
+  mmc_wait_for_cmd
+  mmc_wait_for_req
+  register_blkdev
+  sg_init_one
+  simple_strtoul
+  string_get_size
+  unregister_blkdev
+
+# required by mmc_spi.ko
+  mmc_gpiod_request_cd_irq
+  spi_bus_lock
+  spi_bus_unlock
+  spi_sync_locked
+
+# required by nvme-core.ko
+  add_uevent_var
+  blk_freeze_queue_start
+  blk_mq_alloc_request
+  blk_mq_alloc_request_hctx
+  blk_mq_delay_kick_requeue_list
+  blk_mq_freeze_queue
+  blk_mq_freeze_queue_wait
+  blk_mq_freeze_queue_wait_timeout
+  blk_mq_request_completed
+  blk_mq_unfreeze_queue
+  blk_mq_unique_tag
+  blk_poll
+  blk_queue_chunk_sectors
+  blk_queue_flag_test_and_set
+  blk_queue_io_min
+  blk_queue_io_opt
+  blk_queue_max_discard_segments
+  blk_queue_max_write_zeroes_sectors
+  blk_queue_physical_block_size
+  blk_queue_virt_boundary
+  blk_rq_map_kern
+  blk_rq_map_user
+  blk_rq_unmap_user
+  blk_set_queue_dying
+  blk_status_to_errno
+  blk_sync_queue
+  cleanup_srcu_struct
+  completion_done
+  device_add
+  device_del
+  device_remove_file_self
+  dev_pm_qos_expose_latency_tolerance
+  dev_pm_qos_hide_latency_tolerance
+  dev_pm_qos_update_user_latency_tolerance
+  init_srcu_struct
+  kasprintf
+  kobject_uevent_env
+  list_sort
+  param_ops_byte
+  param_ops_ulong
+  revalidate_disk
+  synchronize_srcu
+  sysfs_create_link
+  sysfs_remove_link
+  uuid_null
+
+# required by nvme.ko
+  async_schedule_node
+  blk_mq_map_queues
+  blk_mq_pci_map_queues
+  blk_mq_tagset_busy_iter
+  blk_mq_tagset_wait_completed_request
+  blk_mq_tag_to_rq
+  blk_mq_update_nr_hw_queues
+  dma_max_mapping_size
+  __do_once_done
+  __do_once_start
+  mempool_create_node
+  mempool_kfree
+  mempool_kmalloc
+  param_get_int
+  param_set_int
+  pci_alloc_irq_vectors_affinity
+  pci_device_is_present
+  pci_disable_device
+  pcie_aspm_enabled
+  pci_enable_device_mem
+  pci_free_irq
+  pci_free_irq_vectors
+  pci_irq_vector
+  pci_load_saved_state
+  pci_release_selected_regions
+  pci_request_irq
+  pci_request_selected_regions
+  pci_restore_state
+  pci_save_state
+  pci_select_bars
+  pci_set_master
+  sysfs_remove_file_from_group
+  wait_for_completion_io_timeout
+
+# required by nvmet.ko
+  bio_add_page
+  bio_alloc_bioset
+  bio_associate_blkg
+  bio_chain
+  bio_endio
+  bio_init
+  bio_put
+  blkdev_get_by_path
+  __blkdev_issue_discard
+  blkdev_issue_flush
+  __blkdev_issue_zeroout
+  blkdev_put
+  configfs_register_subsystem
+  configfs_unregister_subsystem
+  config_group_init
+  config_group_init_type_name
+  cpumask_next
+  _ctype
+  fs_bio_set
+  hex_to_bin
+  iov_iter_bvec
+  kmem_cache_create
+  kmem_cache_destroy
+  kstrtobool
+  kstrtou16
+  mempool_alloc_slab
+  mempool_create
+  mempool_free_slab
+  nr_cpu_ids
+  __per_cpu_offset
+  percpu_ref_exit
+  percpu_ref_init
+  percpu_ref_kill_and_confirm
+  radix_tree_next_chunk
+  __request_module
+  sgl_alloc
+  sgl_free
+  sg_pcopy_from_buffer
+  sg_pcopy_to_buffer
+  sg_zero_buffer
+  strcspn
+  submit_bio
+  uuid_gen
+  uuid_parse
+
+# required by of_mmc_spi.ko
+  mmc_of_parse_voltage
+
+# required by ohci-hcd.ko
+  gen_pool_dma_alloc_align
+  gen_pool_dma_zalloc_align
+  gen_pool_free_owner
+  sb800_prefetch
+  usb_debug_root
+
+# required by ohci-pci.ko
+  pci_get_slot
+  usb_amd_prefetch_quirk
+
+# required by phy-hi3660-usb3.ko
+  __devm_of_phy_provider_register
+  devm_phy_create
+  of_phy_simple_xlate
+
+# required by reboot-mode.ko
+  kstrdup_const
+  register_reboot_notifier
+  unregister_reboot_notifier
+
+# required by rfkill-gpio.ko
+  device_property_read_string
+  rfkill_alloc
+  rfkill_destroy
+  rfkill_find_type
+  rfkill_register
+  rfkill_unregister
+
+# required by rtc-efi.ko
+  devm_rtc_device_register
+  efi
+  __platform_driver_probe
+  rtc_valid_tm
+  rtc_year_days
+
+# required by snd-soc-hdmi-codec.ko
+  devm_snd_soc_register_component
+  hdmi_audio_infoframe_init
+  snd_ctl_add
+  snd_ctl_new1
+  snd_pcm_add_chmap_ctls
+  snd_pcm_create_iec958_consumer_hw_params
+  snd_pcm_format_width
+  snd_pcm_hw_constraint_eld
+  snd_soc_dapm_add_routes
+  snd_soc_jack_report
+
+# required by snd-soc-simple-card-utils.ko
+  devm_get_clk_from_child
+  devm_kasprintf
+  devm_kvasprintf
+  snd_soc_card_jack_new
+  snd_soc_dai_set_sysclk
+  snd_soc_dai_set_tdm_slot
+  snd_soc_dapm_get_pin_switch
+  snd_soc_dapm_info_pin_switch
+  snd_soc_dapm_put_pin_switch
+  snd_soc_jack_add_gpios
+  snd_soc_of_parse_audio_routing
+  snd_soc_of_parse_audio_simple_widgets
+  snd_soc_of_parse_card_name
+  snd_soc_of_parse_daifmt
+
+# required by snd-soc-simple-card.ko
+  devm_snd_soc_register_card
+  of_device_is_available
+  of_get_next_child
+  of_get_parent
+  of_parse_phandle_with_args
+  snd_soc_of_get_dai_name
+  snd_soc_of_parse_node_prefix
+  snd_soc_of_parse_tdm_slot
+  snd_soc_pm_ops
+
+# required by spi-pl022.ko
+  devm_gpio_request
+  devm_spi_register_controller
+  dma_request_chan
+  __dma_request_channel
+  gpiod_direction_output_raw
+  gpiod_set_raw_value
+  loops_per_jiffy
+  pinctrl_pm_select_idle_state
+  __spi_alloc_controller
+  spi_controller_resume
+  spi_controller_suspend
+  spi_finalize_current_message
+  spi_get_next_queued_message
+
+# required by spidev.ko
+  device_create
+  device_destroy
+  __register_chrdev
+  stream_open
+  __unregister_chrdev
+
+# required by system_heap.ko
+  dma_heap_get_dev
+  __sg_page_iter_next
+  __sg_page_iter_start
+
+# required by tcpci.ko
+  device_get_named_child_node
+  tcpm_cc_change
+  tcpm_pd_hard_reset
+  tcpm_pd_receive
+  tcpm_pd_transmit_complete
+  tcpm_register_port
+  tcpm_tcpc_reset
+  tcpm_unregister_port
+  tcpm_vbus_change
+
+# required by tcpci_rt1711h.ko
+  i2c_smbus_read_word_data
+
+# required by wl18xx.ko
+  __cfg80211_alloc_event_skb
+  __cfg80211_send_event_skb
+  ieee80211_radar_detected
+  kstrtou8_from_user
+  nla_put
+
+# required by wlcore.ko
+  cfg80211_find_elem_match
+  cfg80211_find_vendor_elem
+  complete_all
+  consume_skb
+  device_create_bin_file
+  device_remove_bin_file
+  dev_pm_clear_wake_irq
+  dev_pm_set_dedicated_wake_irq
+  disable_irq_nosync
+  get_random_u32
+  ieee80211_alloc_hw_nm
+  ieee80211_ap_probereq_get
+  ieee80211_beacon_get_tim
+  ieee80211_chswitch_done
+  ieee80211_cqm_beacon_loss_notify
+  ieee80211_cqm_rssi_notify
+  ieee80211_csa_finish
+  ieee80211_free_hw
+  ieee80211_free_txskb
+  ieee80211_freq_khz_to_channel
+  ieee80211_hdrlen
+  ieee80211_iterate_active_interfaces_atomic
+  ieee80211_iterate_interfaces
+  ieee80211_nullfunc_get
+  ieee80211_probereq_get
+  ieee80211_proberesp_get
+  ieee80211_pspoll_get
+  ieee80211_queue_work
+  ieee80211_ready_on_channel
+  ieee80211_register_hw
+  ieee80211_remain_on_channel_expired
+  ieee80211_report_low_ack
+  ieee80211_restart_hw
+  ieee80211_rx_napi
+  ieee80211_scan_completed
+  ieee80211_sched_scan_results
+  ieee80211_sched_scan_stopped
+  ieee80211_sta_ps_transition
+  ieee80211_stop_queue
+  ieee80211_stop_queues
+  ieee80211_tx_status
+  ieee80211_unregister_hw
+  ieee80211_wake_queue
+  ieee80211_wake_queues
+  jiffies_to_msecs
+  jiffies_to_usecs
+  __local_bh_enable_ip
+  __netdev_alloc_skb
+  __nla_parse
+  no_seek_end_llseek
+  request_firmware_nowait
+  rfc1042_header
+  skb_dequeue
+  skb_push
+  skb_put
+  skb_queue_head
+  skb_trim
+  vscnprintf
+  wiphy_to_ieee80211_hw
+
+# required by wlcore_sdio.ko
+  platform_device_add
+  platform_device_add_data
+  platform_device_add_resources
+  platform_device_alloc
+  platform_device_put
+  sdio_claim_host
+  sdio_disable_func
+  sdio_enable_func
+  sdio_f0_readb
+  sdio_f0_writeb
+  sdio_get_host_pm_caps
+  sdio_memcpy_fromio
+  sdio_memcpy_toio
+  sdio_readsb
+  sdio_register_driver
+  sdio_release_host
+  sdio_set_block_size
+  sdio_set_host_pm_flags
+  sdio_unregister_driver
+  sdio_writesb
+
+# required by zstd.ko
+  crypto_register_alg
+  crypto_register_scomp
+  crypto_unregister_alg
+  crypto_unregister_scomp
+  kzfree
+  ZSTD_CCtxWorkspaceBound
+  ZSTD_compressCCtx
+  ZSTD_DCtxWorkspaceBound
+  ZSTD_decompressDCtx
+  ZSTD_getParams
+  ZSTD_initCCtx
+  ZSTD_initDCtx
diff --git a/android/abi_gki_aarch64_qcom b/android/abi_gki_aarch64_qcom
new file mode 100644
index 0000000..ef1d098
--- /dev/null
+++ b/android/abi_gki_aarch64_qcom
@@ -0,0 +1,2412 @@
+[abi_symbol_list]
+  add_device_randomness
+  add_timer
+  add_timer_on
+  add_uevent_var
+  add_wait_queue
+  adjust_managed_page_count
+  alarm_cancel
+  alarm_init
+  alarm_start_relative
+  alloc_chrdev_region
+  __alloc_disk_node
+  alarmtimer_get_rtcdev
+  alloc_etherdev_mqs
+  alloc_io_pgtable_ops
+  alloc_netdev_mqs
+  alloc_pages_exact
+  __alloc_pages_nodemask
+  __alloc_percpu
+  __alloc_skb
+  alloc_skb_with_frags
+  alloc_workqueue
+  amba_bustype
+  arch_bpf_jit_check_func
+  __arch_clear_user
+  __arch_copy_from_user
+  __arch_copy_in_user
+  __arch_copy_to_user
+  arm64_const_caps_ready
+  atomic_notifier_call_chain
+  atomic_notifier_chain_register
+  atomic_notifier_chain_unregister
+  autoremove_wake_function
+  backlight_device_get_by_type
+  backlight_device_register
+  backlight_device_set_brightness
+  backlight_device_unregister
+  bin2hex
+  __bitmap_clear
+  bitmap_find_next_zero_area_off
+  bitmap_free
+  bitmap_parselist
+  bitmap_print_to_pagebuf
+  __bitmap_set
+  __bitmap_subset
+  bitmap_zalloc
+  blk_cleanup_queue
+  blk_execute_rq
+  blk_execute_rq_nowait
+  blk_get_queue
+  blk_get_request
+  blk_mq_alloc_tag_set
+  blk_mq_complete_request
+  __blk_mq_end_request
+  blk_mq_end_request
+  blk_mq_free_tag_set
+  blk_mq_init_queue
+  blk_mq_quiesce_queue
+  blk_mq_requeue_request
+  blk_mq_run_hw_queues
+  blk_mq_start_request
+  blk_mq_start_stopped_hw_queues
+  blk_mq_stop_hw_queue
+  blk_mq_unquiesce_queue
+  blk_mq_virtio_map_queues
+  blk_put_queue
+  blk_put_request
+  blk_queue_alignment_offset
+  blk_queue_bounce_limit
+  blk_queue_can_use_dma_map_merging
+  blk_queue_flag_clear
+  blk_queue_flag_set
+  blk_queue_io_min
+  blk_queue_io_opt
+  blk_queue_logical_block_size
+  blk_queue_max_discard_sectors
+  blk_queue_max_discard_segments
+  blk_queue_max_hw_sectors
+  blk_queue_max_segments
+  blk_queue_max_segment_size
+  blk_queue_max_write_zeroes_sectors
+  blk_queue_physical_block_size
+  blk_queue_rq_timeout
+  blk_queue_update_dma_alignment
+  blk_queue_write_cache
+  blk_rq_map_kern
+  blk_rq_map_sg
+  blk_rq_map_user
+  blk_rq_map_user_iov
+  blk_rq_unmap_user
+  blk_status_to_errno
+  blk_update_request
+  blk_verify_command
+  blocking_notifier_call_chain
+  blocking_notifier_chain_register
+  blocking_notifier_chain_unregister
+  bpf_prog_add
+  bpf_prog_put
+  bpf_prog_sub
+  bpf_stats_enabled_key
+  bpf_trace_run10
+  bpf_trace_run11
+  bpf_trace_run12
+  bpf_trace_run1
+  bpf_trace_run2
+  bpf_trace_run3
+  bpf_trace_run4
+  bpf_trace_run5
+  bpf_trace_run6
+  bpf_trace_run7
+  bpf_trace_run8
+  bpf_warn_invalid_xdp_action
+  bprm_change_interp
+  build_skb
+  bus_find_device
+  bus_for_each_dev
+  bus_register
+  bus_set_iommu
+  bus_unregister
+  call_netdevice_notifiers
+  cancel_delayed_work
+  cancel_delayed_work_sync
+  cancel_work_sync
+  capable
+  cdev_add
+  cdev_alloc
+  cdev_del
+  cdev_device_add
+  cdev_device_del
+  cdev_init
+  __cfg80211_alloc_event_skb
+  __cfg80211_alloc_reply_skb
+  cfg80211_calculate_bitrate
+  cfg80211_chandef_create
+  cfg80211_ch_switch_notify
+  cfg80211_connect_done
+  cfg80211_del_sta_sinfo
+  cfg80211_disconnected
+  cfg80211_ft_event
+  cfg80211_get_bss
+  cfg80211_gtk_rekey_notify
+  cfg80211_inform_bss_data
+  cfg80211_inform_bss_frame_data
+  cfg80211_mgmt_tx_status
+  cfg80211_michael_mic_failure
+  cfg80211_new_sta
+  cfg80211_pmksa_candidate_notify
+  cfg80211_put_bss
+  cfg80211_ready_on_channel
+  cfg80211_remain_on_channel_expired
+  cfg80211_roamed
+  cfg80211_rx_mgmt
+  cfg80211_rx_unprot_mlme_mgmt
+  cfg80211_scan_done
+  cfg80211_sched_scan_results
+  __cfg80211_send_event_skb
+  cfg80211_tdls_oper_request
+  cfg80211_unlink_bss
+  cfg80211_vendor_cmd_reply
+  check_disk_change
+  __check_object_size
+  __class_create
+  class_destroy
+  class_find_device
+  class_interface_unregister
+  __class_register
+  class_unregister
+  cleanup_srcu_struct
+  clear_inode
+  clear_page
+  clk_bulk_disable
+  clk_bulk_enable
+  clk_bulk_get_all
+  clk_bulk_prepare
+  clk_bulk_put_all
+  clk_bulk_unprepare
+  __clk_determine_rate
+  clk_disable
+  clk_enable
+  clk_fixed_factor_ops
+  clk_fixed_rate_ops
+  clk_get
+  __clk_get_hw
+  __clk_get_name
+  clk_get_parent
+  clk_get_rate
+  clk_get_sys
+  clk_hw_get_flags
+  clk_hw_get_name
+  clk_hw_get_num_parents
+  clk_hw_get_parent
+  clk_hw_get_parent_by_index
+  clk_hw_get_rate
+  clk_hw_is_enabled
+  clk_hw_is_prepared
+  clk_hw_round_rate
+  __clk_is_enabled
+  __clk_mux_determine_rate_closest
+  clk_prepare
+  clk_put
+  clk_register
+  clk_round_rate
+  clk_set_parent
+  clk_set_rate
+  clk_sync_state
+  clk_unprepare
+  __close_fd
+  cma_alloc
+  cma_get_name
+  cma_release
+  compat_alloc_user_space
+  complete
+  complete_all
+  complete_and_exit
+  completion_done
+  component_add
+  component_bind_all
+  component_del
+  component_master_add_with_match
+  component_master_del
+  component_match_add_release
+  component_unbind_all
+  config_ep_by_speed
+  config_group_init_type_name
+  config_item_put
+  console_stop
+  console_suspend_enabled
+  __const_udelay
+  consume_skb
+  contig_page_data
+  _copy_from_iter_full
+  copy_page
+  copy_strings_kernel
+  _copy_to_iter
+  cpu_bit_bitmap
+  cpu_down
+  cpufreq_cpu_get
+  cpufreq_cpu_put
+  cpufreq_generic_attr
+  cpufreq_quick_get_max
+  cpufreq_register_driver
+  cpufreq_register_notifier
+  cpufreq_unregister_driver
+  cpufreq_unregister_notifier
+  cpufreq_update_policy
+  __cpuhp_remove_state
+  __cpuhp_setup_state
+  __cpuhp_state_add_instance
+  __cpuhp_state_remove_instance
+  cpu_hwcap_keys
+  cpu_hwcaps
+  cpumask_next
+  cpumask_next_wrap
+  cpu_number
+  __cpu_online_mask
+  cpu_pm_register_notifier
+  cpu_pm_unregister_notifier
+  __cpu_possible_mask
+  __cpu_present_mask
+  cpus_read_lock
+  cpus_read_unlock
+  cpu_subsys
+  cpu_topology
+  cpu_up
+  crc32_le
+  crc8
+  crc8_populate_msb
+  crypto_ablkcipher_type
+  crypto_aead_encrypt
+  crypto_aead_setauthsize
+  crypto_aead_setkey
+  crypto_alloc_aead
+  crypto_alloc_base
+  crypto_alloc_shash
+  crypto_alloc_skcipher
+  crypto_dequeue_request
+  crypto_destroy_tfm
+  crypto_enqueue_request
+  crypto_init_queue
+  crypto_register_alg
+  crypto_register_rngs
+  crypto_shash_final
+  crypto_shash_setkey
+  crypto_shash_update
+  crypto_skcipher_decrypt
+  crypto_skcipher_encrypt
+  crypto_unregister_alg
+  crypto_unregister_rngs
+  csum_ipv6_magic
+  csum_partial
+  csum_tcpudp_nofold
+  _ctype
+  current_time
+  datagram_poll
+  d_drop
+  default_llseek
+  default_wake_function
+  delayed_work_timer_fn
+  del_gendisk
+  del_timer
+  del_timer_sync
+  dentry_open
+  dequeue_signal
+  desc_to_gpio
+  destroy_workqueue
+  dev_add_pack
+  dev_alloc_name
+  dev_close
+  _dev_crit
+  dev_driver_string
+  _dev_emerg
+  _dev_err
+  devfreq_add_device
+  devfreq_add_governor
+  devfreq_cooling_unregister
+  devfreq_remove_device
+  devfreq_remove_governor
+  devfreq_resume_device
+  devfreq_suspend_device
+  dev_fwnode
+  __dev_get_by_index
+  dev_get_by_index
+  dev_get_by_index_rcu
+  dev_get_by_name
+  dev_get_regmap
+  dev_get_stats
+  device_add
+  device_add_disk
+  device_connection_find_match
+  device_create
+  device_create_file
+  device_create_with_groups
+  device_del
+  device_destroy
+  device_find_child
+  device_for_each_child
+  device_get_child_node_count
+  device_get_match_data
+  device_get_next_child_node
+  device_initialize
+  device_init_wakeup
+  device_link_add
+  device_link_del
+  device_match_fwnode
+  device_match_name
+  device_property_present
+  device_property_read_string
+  device_property_read_u32_array
+  device_property_read_u8_array
+  device_register
+  device_remove_file
+  device_set_wakeup_capable
+  device_show_int
+  device_store_int
+  device_unregister
+  device_wakeup_disable
+  device_wakeup_enable
+  _dev_info
+  __dev_kfree_skb_any
+  devm_add_action
+  devm_backlight_device_register
+  devm_clk_bulk_get
+  devm_clk_bulk_get_all
+  devm_clk_bulk_get_optional
+  devm_clk_get
+  devm_clk_get_optional
+  devm_clk_hw_register
+  devm_clk_put
+  devm_clk_register
+  dev_mc_sync_multiple
+  dev_mc_unsync
+  devm_extcon_dev_allocate
+  devm_extcon_dev_register
+  devm_extcon_register_notifier
+  devm_free_irq
+  devm_fwnode_get_index_gpiod_from_child
+  devm_gpiod_get_index
+  devm_gpiod_get_optional
+  devm_gpio_request_one
+  devm_iio_channel_get
+  devm_iio_device_alloc
+  __devm_iio_device_register
+  devm_input_allocate_device
+  devm_ioremap
+  devm_ioremap_nocache
+  devm_ioremap_resource
+  devm_ioremap_wc
+  devm_iounmap
+  devm_kasprintf
+  devm_kfree
+  devm_kmalloc
+  devm_kmemdup
+  devm_kstrdup
+  devm_led_classdev_register_ext
+  devm_nvmem_cell_get
+  devm_nvmem_device_get
+  devm_nvmem_register
+  devm_of_clk_add_hw_provider
+  devm_of_pci_get_host_bridge_resources
+  __devm_of_phy_provider_register
+  devm_of_platform_populate
+  devm_of_pwm_get
+  devm_pci_alloc_host_bridge
+  devm_phy_create
+  devm_phy_get
+  devm_pinctrl_get
+  devm_pinctrl_put
+  devm_pinctrl_register
+  devm_platform_ioremap_resource
+  devm_power_supply_get_by_phandle
+  devm_power_supply_register
+  devm_pwm_put
+  devm_regmap_add_irq_chip
+  devm_regmap_del_irq_chip
+  devm_regmap_field_alloc
+  __devm_regmap_init
+  __devm_regmap_init_i2c
+  __devm_regmap_init_mmio_clk
+  devm_regulator_bulk_get
+  devm_regulator_get
+  devm_regulator_get_optional
+  devm_regulator_put
+  devm_regulator_register
+  devm_regulator_register_notifier
+  devm_request_any_context_irq
+  devm_request_pci_bus_resources
+  __devm_request_region
+  devm_request_threaded_irq
+  devm_reset_control_array_get
+  __devm_reset_control_get
+  devm_reset_controller_register
+  devm_rtc_allocate_device
+  devm_rtc_device_register
+  devm_snd_soc_register_card
+  devm_thermal_zone_of_sensor_register
+  devm_usb_get_phy
+  devm_usb_get_phy_by_phandle
+  _dev_notice
+  dev_open
+  dev_pm_domain_attach
+  dev_pm_domain_detach
+  dev_pm_opp_add
+  dev_pm_opp_find_freq_ceil
+  dev_pm_opp_find_freq_exact
+  dev_pm_opp_find_freq_floor
+  dev_pm_opp_get_opp_count
+  dev_pm_opp_get_opp_table
+  dev_pm_opp_get_voltage
+  dev_pm_opp_put
+  dev_pm_opp_put_opp_table
+  dev_pm_opp_register_notifier
+  dev_pm_opp_remove
+  dev_pm_opp_unregister_notifier
+  dev_printk
+  dev_pm_qos_add_request
+  dev_pm_qos_remove_request
+  dev_pm_qos_update_request
+  dev_queue_xmit
+  dev_remove_pack
+  devres_add
+  devres_destroy
+  devres_free
+  devres_release
+  dev_set_mac_address
+  dev_set_mtu
+  dev_set_name
+  dev_uc_sync_multiple
+  dev_uc_unsync
+  _dev_warn
+  d_instantiate
+  disable_irq
+  disable_irq_nosync
+  disable_percpu_irq
+  divider_get_val
+  divider_recalc_rate
+  divider_ro_round_rate_parent
+  divider_round_rate_parent
+  dma_alloc_attrs
+  dma_async_device_register
+  dma_async_device_unregister
+  dma_async_tx_descriptor_init
+  dma_buf_attach
+  dma_buf_begin_cpu_access
+  dma_buf_begin_cpu_access_partial
+  dma_buf_detach
+  dma_buf_end_cpu_access
+  dma_buf_end_cpu_access_partial
+  dma_buf_export
+  dma_buf_fd
+  dma_buf_get
+  dma_buf_get_flags
+  dma_buf_kmap
+  dma_buf_kunmap
+  dma_buf_map_attachment
+  dma_buf_put
+  dma_buf_unmap_attachment
+  dma_buf_vmap
+  dma_buf_vunmap
+  dma_direct_map_page
+  dma_direct_map_resource
+  dma_direct_map_sg
+  dma_direct_sync_sg_for_cpu
+  dma_direct_sync_sg_for_device
+  dma_direct_sync_single_for_cpu
+  dma_direct_sync_single_for_device
+  dma_direct_unmap_page
+  dma_direct_unmap_sg
+  dma_fence_add_callback
+  dma_fence_array_create
+  dma_fence_array_ops
+  dma_fence_context_alloc
+  dma_fence_default_wait
+  dma_fence_enable_sw_signaling
+  dma_fence_get_status
+  dma_fence_init
+  dma_fence_match_context
+  dma_fence_release
+  dma_fence_remove_callback
+  dma_fence_signal
+  dma_fence_signal_locked
+  dma_fence_wait_timeout
+  dma_free_attrs
+  dma_get_merge_boundary
+  dma_get_sgtable_attrs
+  dma_get_slave_channel
+  dma_max_mapping_size
+  dma_mmap_attrs
+  dma_pool_alloc
+  dma_pool_create
+  dma_pool_destroy
+  dma_pool_free
+  dma_release_channel
+  dma_request_slave_channel
+  dma_resv_add_excl_fence
+  dma_resv_add_shared_fence
+  dma_resv_copy_fences
+  dma_resv_fini
+  dma_resv_init
+  dma_resv_reserve_shared
+  dma_resv_test_signaled_rcu
+  dma_resv_wait_timeout_rcu
+  dma_set_coherent_mask
+  dma_set_mask
+  dmam_alloc_attrs
+  do_exit
+  do_wait_intr
+  down
+  down_read
+  down_write
+  dput
+  drain_workqueue
+  driver_find_device
+  driver_register
+  driver_unregister
+  drm_add_edid_modes
+  drm_add_modes_noedid
+  drm_atomic_commit
+  drm_atomic_get_connector_state
+  drm_atomic_get_crtc_state
+  drm_atomic_get_plane_state
+  drm_atomic_helper_check
+  drm_atomic_helper_cleanup_planes
+  drm_atomic_helper_commit
+  drm_atomic_helper_commit_duplicated_state
+  drm_atomic_helper_commit_hw_done
+  drm_atomic_helper_commit_modeset_disables
+  drm_atomic_helper_commit_modeset_enables
+  drm_atomic_helper_commit_planes
+  __drm_atomic_helper_connector_destroy_state
+  drm_atomic_helper_connector_destroy_state
+  __drm_atomic_helper_connector_duplicate_state
+  drm_atomic_helper_connector_duplicate_state
+  __drm_atomic_helper_connector_reset
+  drm_atomic_helper_connector_reset
+  __drm_atomic_helper_crtc_destroy_state
+  drm_atomic_helper_crtc_destroy_state
+  __drm_atomic_helper_crtc_duplicate_state
+  drm_atomic_helper_crtc_duplicate_state
+  drm_atomic_helper_crtc_reset
+  drm_atomic_helper_dirtyfb
+  drm_atomic_helper_disable_plane
+  drm_atomic_helper_duplicate_state
+  drm_atomic_helper_page_flip
+  drm_atomic_helper_plane_destroy_state
+  __drm_atomic_helper_plane_duplicate_state
+  drm_atomic_helper_plane_duplicate_state
+  drm_atomic_helper_plane_reset
+  drm_atomic_helper_prepare_planes
+  drm_atomic_helper_set_config
+  drm_atomic_helper_shutdown
+  drm_atomic_helper_swap_state
+  drm_atomic_helper_update_legacy_modeset_state
+  drm_atomic_helper_update_plane
+  drm_atomic_helper_wait_for_fences
+  drm_atomic_helper_wait_for_vblanks
+  drm_atomic_set_crtc_for_connector
+  drm_atomic_set_fence_for_plane
+  drm_atomic_set_mode_for_crtc
+  drm_atomic_state_alloc
+  drm_atomic_state_clear
+  drm_atomic_state_default_clear
+  drm_atomic_state_default_release
+  __drm_atomic_state_free
+  drm_atomic_state_init
+  drm_bridge_attach
+  drm_bridge_disable
+  drm_bridge_enable
+  drm_bridge_mode_set
+  drm_bridge_post_disable
+  drm_bridge_pre_enable
+  drm_class_device_register
+  drm_class_device_unregister
+  drm_clflush_pages
+  drm_client_init
+  drm_client_modeset_commit_force
+  drm_client_register
+  drm_compat_ioctl
+  drm_connector_attach_edid_property
+  drm_connector_attach_encoder
+  drm_connector_cleanup
+  drm_connector_init
+  drm_connector_list_iter_begin
+  drm_connector_list_iter_end
+  drm_connector_list_iter_next
+  drm_connector_register
+  drm_connector_unregister
+  drm_connector_update_edid_property
+  drm_crtc_cleanup
+  drm_crtc_handle_vblank
+  drm_crtc_init_with_planes
+  drm_crtc_send_vblank_event
+  drm_crtc_vblank_off
+  drm_crtc_vblank_on
+  drm_crtc_vblank_reset
+  drm_crtc_wait_one_vblank
+  drm_cvt_mode
+  drm_dbg
+  drm_debug
+  drm_detect_hdmi_monitor
+  drm_detect_monitor_audio
+  drm_dev_alloc
+  drm_dev_dbg
+  drm_dev_printk
+  drm_dev_put
+  drm_dev_register
+  drm_dev_set_unique
+  drm_dev_unregister
+  drm_do_get_edid
+  drm_dp_atomic_find_vcpi_slots
+  drm_dp_atomic_release_vcpi_slots
+  drm_dp_aux_register
+  drm_dp_aux_unregister
+  drm_dp_bw_code_to_link_rate
+  drm_dp_calc_pbn_mode
+  drm_dp_channel_eq_ok
+  drm_dp_clock_recovery_ok
+  drm_dp_dpcd_read
+  drm_dp_dpcd_read_link_status
+  drm_dp_dpcd_write
+  drm_dp_find_vcpi_slots
+  drm_dp_get_adjust_request_pre_emphasis
+  drm_dp_get_adjust_request_voltage
+  drm_dp_link_configure
+  drm_dp_link_power_down
+  drm_dp_link_power_up
+  drm_dp_link_probe
+  drm_dp_link_rate_to_bw_code
+  drm_dp_link_train_channel_eq_delay
+  drm_dp_link_train_clock_recovery_delay
+  drm_dp_mst_allocate_vcpi
+  drm_dp_mst_deallocate_vcpi
+  drm_dp_mst_detect_port
+  drm_dp_mst_get_edid
+  drm_dp_mst_hpd_irq
+  drm_dp_mst_reset_vcpi_slots
+  drm_dp_mst_topology_mgr_destroy
+  drm_dp_mst_topology_mgr_init
+  drm_dp_mst_topology_mgr_set_mst
+  drm_dp_send_power_updown_phy
+  drm_dp_update_payload_part1
+  drm_dp_update_payload_part2
+  drm_edid_duplicate
+  drm_encoder_cleanup
+  drm_encoder_init
+  drm_err
+  drm_event_reserve_init_locked
+  drm_format_info
+  drm_framebuffer_init
+  drm_framebuffer_lookup
+  drm_framebuffer_remove
+  drm_framebuffer_unregister_private
+  drm_gem_create_mmap_offset
+  drm_gem_fb_create_handle
+  drm_gem_fb_destroy
+  drm_gem_fb_get_obj
+  drm_gem_free_mmap_offset
+  drm_gem_get_pages
+  drm_gem_handle_create
+  drm_gem_mmap
+  drm_gem_mmap_obj
+  drm_gem_object_init
+  drm_gem_object_lookup
+  drm_gem_object_put
+  drm_gem_object_put_unlocked
+  drm_gem_object_release
+  drm_gem_prime_export
+  drm_gem_prime_fd_to_handle
+  drm_gem_prime_handle_to_fd
+  drm_gem_prime_mmap
+  drm_gem_private_object_init
+  drm_gem_put_pages
+  drm_gem_vm_close
+  drm_gem_vm_open
+  drm_get_connector_status_name
+  drm_get_edid
+  drm_get_format_info
+  drm_helper_hpd_irq_event
+  drm_helper_mode_fill_fb_struct
+  drm_helper_probe_single_connector_modes
+  drm_ioctl
+  drm_irq_install
+  drm_irq_uninstall
+  drm_kms_helper_hotplug_event
+  drm_kms_helper_poll_disable
+  drm_kms_helper_poll_enable
+  drm_kms_helper_poll_fini
+  drm_kms_helper_poll_init
+  drm_match_cea_mode
+  drm_mm_init
+  drm_mm_insert_node_in_range
+  drm_mm_print
+  drm_mm_remove_node
+  drm_mm_takedown
+  drm_mode_config_cleanup
+  drm_mode_config_init
+  drm_mode_config_reset
+  drm_mode_convert_umode
+  drm_mode_copy
+  drm_mode_create
+  drm_mode_create_dp_colorspace_property
+  drm_mode_debug_printmodeline
+  drm_mode_duplicate
+  drm_mode_equal
+  drm_mode_object_find
+  drm_mode_object_get
+  drm_mode_object_put
+  drm_mode_probed_add
+  drm_modeset_acquire_fini
+  drm_modeset_acquire_init
+  drm_modeset_backoff
+  drm_mode_set_crtcinfo
+  drm_modeset_drop_locks
+  drm_modeset_lock
+  drm_modeset_lock_all
+  drm_modeset_lock_all_ctx
+  drm_mode_set_name
+  drm_modeset_unlock_all
+  drm_mode_vrefresh
+  drm_object_attach_property
+  drm_object_property_set_value
+  drm_of_component_match_add
+  drm_open
+  drm_panel_add
+  drm_panel_init
+  drm_panel_notifier_call_chain
+  drm_panel_notifier_register
+  drm_panel_notifier_unregister
+  drm_panel_remove
+  drm_plane_cleanup
+  drm_plane_create_rotation_property
+  drm_poll
+  drm_prime_gem_destroy
+  drm_prime_pages_to_sg
+  drm_printf
+  __drm_printfn_debug
+  drm_property_blob_get
+  drm_property_blob_put
+  drm_property_create
+  drm_property_create_bitmask
+  drm_property_create_blob
+  drm_property_create_enum
+  drm_property_create_range
+  drm_property_lookup_blob
+  drm_put_dev
+  drm_read
+  drm_release
+  drm_rotation_simplify
+  drm_send_event_locked
+  drm_set_preferred_mode
+  drm_universal_plane_init
+  drm_vblank_init
+  drm_vma_offset_add
+  drm_vma_offset_lookup_locked
+  drm_vma_offset_manager_destroy
+  drm_vma_offset_manager_init
+  drm_vma_offset_remove
+  drop_nlink
+  drm_wait_one_vblank
+  dump_stack
+  enable_irq
+  enable_percpu_irq
+  eth_commit_mac_addr_change
+  ether_setup
+  eth_mac_addr
+  eth_prepare_mac_addr_change
+  __ethtool_get_link_ksettings
+  ethtool_op_get_link
+  ethtool_op_get_ts_info
+  eth_type_trans
+  eth_validate_addr
+  event_triggers_call
+  extcon_find_edev_by_node
+  extcon_get_edev_by_phandle
+  extcon_get_edev_name
+  extcon_get_extcon_dev
+  extcon_get_property
+  extcon_get_state
+  extcon_register_notifier
+  extcon_set_property
+  extcon_set_property_capability
+  extcon_set_state_sync
+  extcon_unregister_notifier
+  fasync_helper
+  fd_install
+  file_path
+  find_last_bit
+  find_next_bit
+  find_next_zero_bit
+  find_snd_usb_substream
+  find_vma
+  finish_wait
+  firmware_request_nowarn
+  flow_keys_basic_dissector
+  flush_dcache_page
+  flush_delayed_work
+  flush_work
+  flush_workqueue
+  fput
+  frame_vector_create
+  frame_vector_destroy
+  frame_vector_to_pages
+  frame_vector_to_pfns
+  free_io_pgtable_ops
+  free_irq
+  free_netdev
+  __free_pages
+  free_pages
+  free_pages_exact
+  free_percpu
+  free_percpu_irq
+  freezing_slow_path
+  freq_qos_add_request
+  freq_qos_remove_request
+  freq_qos_update_request
+  fsl8250_handle_irq
+  fwnode_connection_find_match
+  fwnode_get_parent
+  fwnode_handle_put
+  fwnode_property_present
+  fwnode_property_read_string
+  fwnode_property_read_u16_array
+  fwnode_property_read_u32_array
+  gcd
+  generic_device_group
+  generic_file_llseek
+  generic_handle_irq
+  genlmsg_put
+  genl_register_family
+  genl_unregister_family
+  gen_pool_add_owner
+  gen_pool_alloc_algo_owner
+  gen_pool_avail
+  gen_pool_create
+  gen_pool_destroy
+  gen_pool_free_owner
+  gen_pool_size
+  getboottime64
+  get_cpu_device
+  get_device
+  __get_free_pages
+  get_next_ino
+  get_option
+  get_random_bytes
+  get_random_u32
+  __get_task_comm
+  get_tree_single
+  get_unmapped_area
+  get_unused_fd_flags
+  get_user_pages
+  get_vaddr_frames
+  get_zeroed_page
+  gnss_allocate_device
+  gnss_deregister_device
+  gnss_insert_raw
+  gnss_put_device
+  gnss_register_device
+  gpiochip_add_data_with_key
+  gpiochip_add_pin_range
+  gpiochip_generic_free
+  gpiochip_generic_request
+  gpiochip_get_data
+  gpiochip_remove
+  gpiod_cansleep
+  gpiod_direction_input
+  gpiod_direction_output
+  gpiod_direction_output_raw
+  gpiod_get_optional
+  gpiod_get_raw_value
+  gpiod_get_raw_value_cansleep
+  gpiod_get_value
+  gpiod_get_value_cansleep
+  gpiod_is_active_low
+  gpiod_set_debounce
+  gpiod_set_raw_value
+  gpiod_set_raw_value_cansleep
+  gpiod_set_value
+  gpiod_set_value_cansleep
+  gpiod_to_irq
+  gpio_free
+  gpio_free_array
+  gpio_request
+  gpio_request_one
+  gpio_to_desc
+  gro_cells_destroy
+  gro_cells_init
+  gro_cells_receive
+  handle_edge_irq
+  handle_level_irq
+  handle_nested_irq
+  handle_simple_irq
+  hex2bin
+  hex_dump_to_buffer
+  hex_to_bin
+  hrtimer_active
+  hrtimer_cancel
+  hrtimer_forward
+  __hrtimer_get_remaining
+  hrtimer_init
+  hrtimer_start_range_ns
+  hrtimer_try_to_cancel
+  hvc_alloc
+  hvc_instantiate
+  hvc_kick
+  hvc_poll
+  hvc_remove
+  __hvc_resize
+  hwrng_register
+  hwrng_unregister
+  hwspin_lock_free
+  hwspin_lock_register
+  hwspin_lock_request_specific
+  __hwspin_lock_timeout
+  hwspin_lock_unregister
+  __hwspin_unlock
+  i2c_add_adapter
+  i2c_del_adapter
+  i2c_del_driver
+  i2c_get_dma_safe_msg_buf
+  i2c_put_dma_safe_msg_buf
+  i2c_register_driver
+  i2c_transfer
+  i2c_transfer_buffer_flags
+  icc_get
+  icc_link_create
+  icc_node_add
+  icc_node_create
+  icc_node_del
+  icc_node_destroy
+  icc_provider_add
+  icc_provider_del
+  icc_put
+  icc_set_bw
+  icc_set_tag
+  ida_alloc_range
+  ida_destroy
+  ida_free
+  idr_alloc
+  idr_alloc_cyclic
+  idr_destroy
+  idr_find
+  idr_for_each
+  idr_get_next
+  idr_preload
+  idr_remove
+  idr_replace
+  ieee80211_hdrlen
+  iio_channel_get
+  iio_channel_release
+  iio_read_channel_processed
+  import_iovec
+  in_egroup_p
+  init_dummy_netdev
+  init_net
+  __init_rwsem
+  init_timer_key
+  init_uts_ns
+  init_wait_entry
+  __init_waitqueue_head
+  input_alloc_absinfo
+  input_allocate_device
+  input_close_device
+  input_event
+  input_ff_create
+  input_ff_destroy
+  input_free_device
+  input_mt_init_slots
+  input_mt_report_pointer_emulation
+  input_mt_report_slot_state
+  input_open_device
+  input_register_device
+  input_register_handle
+  input_register_handler
+  input_set_abs_params
+  input_set_capability
+  input_unregister_device
+  input_unregister_handle
+  input_unregister_handler
+  invalidate_mapping_pages
+  iomem_resource
+  iommu_alloc_resv_region
+  iommu_attach_device
+  iommu_detach_device
+  iommu_device_register
+  iommu_device_unregister
+  iommu_dma_get_resv_regions
+  iommu_domain_alloc
+  iommu_domain_free
+  iommu_domain_get_attr
+  iommu_domain_set_attr
+  iommu_fwspec_add_ids
+  iommu_fwspec_free
+  iommu_get_dma_cookie
+  iommu_get_domain_for_dev
+  iommu_group_get
+  iommu_group_get_for_dev
+  iommu_group_get_iommudata
+  iommu_group_put
+  iommu_group_ref_get
+  iommu_group_remove_device
+  iommu_group_set_iommudata
+  iommu_map
+  iommu_map_sg
+  iommu_present
+  iommu_put_dma_cookie
+  iommu_set_fault_handler
+  iommu_unmap
+  ion_alloc
+  ion_buffer_zero
+  __ion_device_add_heap
+  ion_free
+  ion_heap_map_kernel
+  ion_heap_map_user
+  ion_heap_unmap_kernel
+  __ioremap
+  iounmap
+  __iowrite32_copy
+  ip_compute_csum
+  iput
+  __ipv6_addr_type
+  ipv6_ext_hdr
+  ipv6_skip_exthdr
+  irq_chip_ack_parent
+  irq_chip_mask_parent
+  irq_chip_set_type_parent
+  irq_chip_set_wake_parent
+  irq_chip_unmask_parent
+  irq_create_fwspec_mapping
+  irq_dispose_mapping
+  __irq_domain_add
+  irq_domain_alloc_irqs_parent
+  irq_domain_create_hierarchy
+  irq_domain_free_irqs_common
+  irq_domain_free_irqs_parent
+  irq_domain_get_irq_data
+  irq_domain_remove
+  irq_domain_set_hwirq_and_chip
+  irq_domain_set_info
+  irq_domain_xlate_onecell
+  irq_domain_xlate_twocell
+  irq_find_mapping
+  irq_find_matching_fwspec
+  irq_get_irq_data
+  irq_modify_status
+  irq_of_parse_and_map
+  irq_set_affinity_hint
+  irq_set_affinity_notifier
+  irq_set_chained_handler_and_data
+  irq_set_chip_and_handler_name
+  irq_set_chip_data
+  irq_set_irqchip_state
+  irq_set_irq_type
+  irq_set_irq_wake
+  irq_set_parent
+  irq_to_desc
+  iterate_fd
+  jiffies
+  jiffies_to_msecs
+  jiffies_to_usecs
+  kasprintf
+  kernel_connect
+  kernel_getsockname
+  kernel_kobj
+  kernel_recvmsg
+  kernel_sendmsg
+  kernel_sigaction
+  kernfs_find_and_get_ns
+  kernfs_notify
+  kernfs_put
+  __kfifo_in
+  __kfifo_out
+  kfree
+  kfree_skb
+  kfree_skb_list
+  kill_fasync
+  kill_litter_super
+  kimage_vaddr
+  kimage_voffset
+  __kmalloc
+  kmalloc_caches
+  kmalloc_order_trace
+  kmem_cache_alloc
+  kmem_cache_alloc_trace
+  kmem_cache_create
+  kmem_cache_destroy
+  kmem_cache_free
+  kmemdup
+  kmemdup_nul
+  kobject_create_and_add
+  kobject_del
+  kobject_init_and_add
+  kobject_put
+  kobject_uevent
+  kobject_uevent_env
+  krealloc
+  kset_create_and_add
+  kset_unregister
+  ksize
+  kstrdup
+  kstrndup
+  kstrtobool
+  kstrtoint
+  kstrtoint_from_user
+  kstrtoll
+  kstrtos8
+  kstrtos8_from_user
+  kstrtou16
+  kstrtou16_from_user
+  kstrtou8
+  kstrtou8_from_user
+  kstrtouint
+  kstrtouint_from_user
+  kstrtoul_from_user
+  kstrtoull
+  kthread_bind
+  kthread_cancel_delayed_work_sync
+  kthread_cancel_work_sync
+  kthread_create_on_node
+  kthread_create_worker
+  kthread_delayed_work_timer_fn
+  kthread_destroy_worker
+  kthread_flush_work
+  kthread_flush_worker
+  __kthread_init_worker
+  kthread_mod_delayed_work
+  kthread_park
+  kthread_parkme
+  kthread_queue_delayed_work
+  kthread_queue_work
+  kthread_should_park
+  kthread_should_stop
+  kthread_stop
+  kthread_unpark
+  kthread_worker_fn
+  ktime_get
+  ktime_get_mono_fast_ns
+  ktime_get_real_seconds
+  ktime_get_real_ts64
+  ktime_get_ts64
+  ktime_get_with_offset
+  kvfree
+  kvmalloc_node
+  kzfree
+  led_classdev_flash_register_ext
+  led_classdev_flash_unregister
+  led_classdev_register_ext
+  led_classdev_unregister
+  led_trigger_event
+  led_trigger_register_simple
+  led_trigger_unregister_simple
+  list_sort
+  llist_add_batch
+  __local_bh_enable_ip
+  lockref_get
+  lock_sock_nested
+  lookup_one_len
+  mac_pton
+  mark_page_accessed
+  match_string
+  mbox_chan_received_data
+  mbox_chan_txdone
+  mbox_client_txdone
+  mbox_controller_register
+  mbox_controller_unregister
+  mbox_free_channel
+  mbox_request_channel
+  mbox_send_message
+  media_create_pad_link
+  media_device_cleanup
+  media_device_init
+  __media_device_register
+  media_device_unregister
+  media_entity_pads_init
+  memchr
+  memcmp
+  memcpy
+  __memcpy_fromio
+  __memcpy_toio
+  memdup_user
+  memmove
+  memparse
+  memremap
+  memset
+  __memset_io
+  memweight
+  mipi_dsi_create_packet
+  mipi_dsi_dcs_set_display_brightness
+  mipi_dsi_dcs_set_tear_off
+  mipi_dsi_host_register
+  mipi_dsi_host_unregister
+  misc_deregister
+  misc_register
+  mmc_of_parse
+  mmc_send_tuning
+  mod_delayed_work_on
+  mod_node_page_state
+  mod_timer
+  __module_get
+  module_layout
+  module_put
+  __msecs_to_jiffies
+  msleep
+  msleep_interruptible
+  msm_pinctrl_probe
+  msm_pinctrl_remove
+  __mutex_init
+  mutex_is_locked
+  mutex_lock
+  mutex_lock_interruptible
+  mutex_trylock
+  mutex_unlock
+  __napi_alloc_skb
+  napi_complete_done
+  napi_consume_skb
+  napi_disable
+  napi_gro_flush
+  napi_gro_receive
+  napi_hash_del
+  __napi_schedule
+  napi_schedule_prep
+  __ndelay
+  __netdev_alloc_skb
+  netdev_change_features
+  netdev_err
+  netdev_increment_features
+  netdev_info
+  netdev_lower_state_changed
+  netdev_master_upper_dev_link
+  netdev_notify_peers
+  netdev_pick_tx
+  netdev_rx_handler_register
+  netdev_rx_handler_unregister
+  netdev_upper_dev_link
+  netdev_upper_dev_unlink
+  netdev_warn
+  netif_carrier_off
+  netif_carrier_on
+  netif_device_attach
+  netif_device_detach
+  netif_napi_add
+  netif_napi_del
+  netif_receive_skb
+  netif_rx
+  netif_rx_ni
+  netif_schedule_queue
+  netif_set_real_num_rx_queues
+  netif_set_real_num_tx_queues
+  __netif_set_xps_queue
+  netif_stacked_transfer_operstate
+  netif_tx_stop_all_queues
+  netif_tx_wake_queue
+  netlink_broadcast
+  netlink_capable
+  __netlink_dump_start
+  __netlink_kernel_create
+  netlink_kernel_release
+  netlink_unicast
+  net_ratelimit
+  nf_conntrack_destroy
+  nla_memcpy
+  __nla_parse
+  nla_put_64bit
+  nla_put
+  __nlmsg_put
+  no_llseek
+  nonseekable_open
+  noop_llseek
+  nr_cpu_ids
+  nr_swap_pages
+  ns_capable
+  nsecs_to_jiffies
+  ns_to_timespec64
+  ns_to_timespec
+  __num_online_cpus
+  nvmem_cell_get
+  nvmem_cell_put
+  nvmem_cell_read
+  nvmem_cell_read_u32
+  nvmem_cell_write
+  nvmem_device_read
+  nvmem_device_write
+  of_address_to_resource
+  of_alias_get_id
+  of_clk_add_provider
+  of_clk_del_provider
+  of_clk_get
+  of_clk_get_by_name
+  of_clk_get_from_provider
+  of_clk_get_parent_count
+  of_clk_get_parent_name
+  of_clk_src_onecell_get
+  of_clk_src_simple_get
+  of_count_phandle_with_args
+  of_devfreq_cooling_register
+  of_device_get_match_data
+  of_device_is_available
+  of_device_is_big_endian
+  of_device_is_compatible
+  of_device_modalias
+  of_device_uevent_modalias
+  of_dma_configure
+  of_dma_controller_free
+  of_dma_controller_register
+  of_dma_is_coherent
+  of_drm_find_bridge
+  of_drm_find_panel
+  of_find_compatible_node
+  of_find_device_by_node
+  of_find_matching_node_and_match
+  of_find_node_by_name
+  of_find_node_by_phandle
+  of_find_node_opts_by_path
+  of_find_node_with_property
+  of_find_property
+  of_fwnode_ops
+  of_genpd_add_provider_onecell
+  of_genpd_add_provider_simple
+  of_genpd_del_provider
+  of_get_address
+  of_get_child_by_name
+  of_get_cpu_node
+  of_get_named_gpio_flags
+  of_get_next_available_child
+  of_get_next_child
+  of_get_parent
+  of_get_property
+  of_get_regulator_init_data
+  of_graph_get_next_endpoint
+  of_graph_get_remote_node
+  of_graph_get_remote_port_parent
+  of_graph_parse_endpoint
+  of_hwspin_lock_get_id
+  of_icc_get
+  of_icc_xlate_onecell
+  of_iomap
+  of_irq_find_parent
+  of_irq_get
+  of_irq_get_byname
+  of_irq_parse_and_map_pci
+  of_irq_parse_one
+  of_machine_is_compatible
+  of_match_device
+  of_match_node
+  of_modalias_node
+  of_n_addr_cells
+  of_node_name_eq
+  of_n_size_cells
+  of_parse_phandle
+  of_parse_phandle_with_args
+  of_phandle_iterator_init
+  of_phandle_iterator_next
+  of_phy_simple_xlate
+  of_platform_depopulate
+  of_platform_device_create
+  of_platform_populate
+  of_property_count_elems_of_size
+  of_property_match_string
+  of_property_read_string
+  of_property_read_string_helper
+  of_property_read_u32_index
+  of_property_read_u64
+  of_property_read_variable_u16_array
+  of_property_read_variable_u32_array
+  of_property_read_variable_u8_array
+  of_prop_next_string
+  of_prop_next_u32
+  of_reserved_mem_device_init_by_idx
+  of_reserved_mem_device_release
+  of_reserved_mem_lookup
+  of_reset_control_array_get
+  of_thermal_get_ntrips
+  of_thermal_get_trip_points
+  of_thermal_is_trip_valid
+  of_translate_address
+  of_usb_get_phy_mode
+  of_usb_host_tpl_support
+  oops_in_progress
+  open_exec
+  panic
+  panic_notifier_list
+  panic_timeout
+  param_array_ops
+  param_get_int
+  param_get_string
+  param_ops_bool
+  param_ops_byte
+  param_ops_charp
+  param_ops_int
+  param_ops_long
+  param_ops_string
+  param_ops_uint
+  param_ops_ullong
+  param_ops_ulong
+  param_set_bool
+  param_set_copystring
+  param_set_int
+  passthru_features_check
+  pci_alloc_irq_vectors_affinity
+  pci_assign_resource
+  pci_assign_unassigned_bus_resources
+  pci_bus_add_devices
+  pci_bus_type
+  pci_clear_master
+  pci_common_swizzle
+  pci_d3cold_disable
+  pci_device_group
+  pci_disable_device
+  pci_disable_msi
+  pcie_capability_read_word
+  pci_enable_device
+  pci_find_capability
+  pci_find_ext_capability
+  pci_find_next_capability
+  pci_find_pcie_root_port
+  pci_free_irq_vectors
+  pci_get_device
+  pci_iomap
+  pci_iomap_range
+  pci_irq_get_affinity
+  pci_irq_vector
+  pci_load_and_free_saved_state
+  pci_load_saved_state
+  pcim_enable_device
+  pci_msi_create_irq_domain
+  pci_msi_mask_irq
+  pci_msi_unmask_irq
+  pci_read_config_byte
+  pci_read_config_dword
+  pci_read_config_word
+  __pci_register_driver
+  pci_release_region
+  pci_release_selected_regions
+  pci_request_region
+  pci_request_selected_regions
+  pci_restore_state
+  pci_save_state
+  pci_scan_root_bus_bridge
+  pci_set_master
+  pci_set_mwi
+  pci_set_power_state
+  pci_store_saved_state
+  pci_unregister_driver
+  pci_walk_bus
+  pci_write_config_dword
+  pci_write_config_word
+  PDE_DATA
+  __per_cpu_offset
+  perf_trace_buf_alloc
+  perf_trace_run_bpf_submit
+  pfn_valid
+  phy_calibrate
+  phy_exit
+  phy_init
+  phy_pm_runtime_get_sync
+  phy_pm_runtime_put_sync
+  phy_power_off
+  phy_power_on
+  phy_set_mode_ext
+  pinconf_generic_dt_node_to_map
+  pinctrl_dev_get_drvdata
+  pinctrl_lookup_state
+  pinctrl_pm_select_default_state
+  pinctrl_pm_select_sleep_state
+  pinctrl_select_state
+  pinctrl_utils_free_map
+  pipe_lock
+  pipe_unlock
+  platform_bus_type
+  platform_device_add
+  platform_device_add_data
+  platform_device_add_properties
+  platform_device_add_resources
+  platform_device_alloc
+  platform_device_del
+  platform_device_put
+  platform_device_register
+  platform_device_register_full
+  platform_device_unregister
+  __platform_driver_probe
+  __platform_driver_register
+  platform_driver_unregister
+  platform_get_irq
+  platform_get_irq_byname
+  platform_get_irq_byname_optional
+  platform_get_resource
+  platform_get_resource_byname
+  platform_irq_count
+  pm_generic_resume
+  pm_generic_runtime_resume
+  pm_generic_runtime_suspend
+  pm_generic_suspend
+  pm_genpd_add_subdomain
+  pm_genpd_init
+  pm_genpd_remove
+  pm_genpd_remove_subdomain
+  pm_power_off
+  pm_qos_add_notifier
+  pm_qos_add_request
+  pm_qos_remove_notifier
+  pm_qos_remove_request
+  pm_qos_request_active
+  pm_qos_update_request
+  __pm_relax
+  pm_relax
+  pm_runtime_allow
+  pm_runtime_barrier
+  __pm_runtime_disable
+  pm_runtime_enable
+  pm_runtime_forbid
+  pm_runtime_force_resume
+  pm_runtime_force_suspend
+  __pm_runtime_idle
+  pm_runtime_no_callbacks
+  __pm_runtime_resume
+  pm_runtime_set_autosuspend_delay
+  __pm_runtime_set_status
+  __pm_runtime_suspend
+  __pm_runtime_use_autosuspend
+  __pm_stay_awake
+  pm_stay_awake
+  pm_system_wakeup
+  pm_wakeup_dev_event
+  pm_wakeup_ws_event
+  power_supply_changed
+  power_supply_get_by_name
+  power_supply_get_drvdata
+  power_supply_get_property
+  power_supply_put
+  power_supply_reg_notifier
+  power_supply_set_property
+  power_supply_unreg_notifier
+  prandom_u32
+  preempt_schedule
+  preempt_schedule_notrace
+  prepare_binprm
+  prepare_to_wait
+  prepare_to_wait_event
+  printk
+  proc_create
+  proc_create_data
+  proc_create_net_single
+  proc_dointvec
+  proc_mkdir
+  proc_remove
+  proc_mkdir_data
+  proto_register
+  proto_unregister
+  pskb_expand_head
+  __pskb_pull_tail
+  ___pskb_trim
+  __put_cred
+  put_device
+  put_disk
+  __put_page
+  __put_task_struct
+  put_unused_fd
+  put_vaddr_frames
+  pwm_apply_state
+  pwmchip_add
+  pwmchip_remove
+  qcom_smem_state_get
+  qcom_smem_state_register
+  qcom_smem_state_unregister
+  qcom_smem_state_update_bits
+  qdisc_reset
+  queue_delayed_work_on
+  queue_work_on
+  radix_tree_iter_delete
+  radix_tree_maybe_preload
+  radix_tree_next_chunk
+  ___ratelimit
+  rational_best_approximation
+  raw_notifier_call_chain
+  raw_notifier_chain_register
+  raw_notifier_chain_unregister
+  _raw_read_lock
+  _raw_read_lock_bh
+  _raw_read_lock_irq
+  _raw_read_lock_irqsave
+  _raw_read_unlock
+  _raw_read_unlock_bh
+  _raw_read_unlock_irq
+  _raw_read_unlock_irqrestore
+  _raw_spin_lock
+  _raw_spin_lock_bh
+  _raw_spin_lock_irq
+  _raw_spin_lock_irqsave
+  _raw_spin_trylock
+  _raw_spin_trylock_bh
+  _raw_spin_unlock
+  _raw_spin_unlock_bh
+  _raw_spin_unlock_irq
+  _raw_spin_unlock_irqrestore
+  _raw_write_lock
+  _raw_write_lock_bh
+  _raw_write_lock_irq
+  _raw_write_lock_irqsave
+  _raw_write_unlock
+  _raw_write_unlock_bh
+  _raw_write_unlock_irq
+  _raw_write_unlock_irqrestore
+  rb_erase
+  rb_first
+  rb_insert_color
+  rb_last
+  rb_next
+  rb_prev
+  __rcu_read_lock
+  __rcu_read_unlock
+  rdev_get_drvdata
+  reboot_mode
+  refcount_dec_and_lock
+  refcount_dec_and_test_checked
+  refcount_dec_checked
+  refcount_dec_not_one
+  refcount_inc_checked
+  refcount_inc_not_zero_checked
+  __refrigerator
+  regcache_cache_only
+  regcache_mark_dirty
+  regcache_sync
+  regcache_sync_region
+  __register_binfmt
+  register_blkdev
+  __register_chrdev
+  register_chrdev_region
+  register_inet6addr_notifier
+  register_inetaddr_notifier
+  register_netdev
+  register_netdevice
+  register_netdevice_notifier
+  register_netevent_notifier
+  register_pernet_subsys
+  register_pm_notifier
+  register_reboot_notifier
+  register_restart_handler
+  register_shrinker
+  register_syscore_ops
+  register_sysctl_table
+  regmap_bulk_read
+  regmap_bulk_write
+  regmap_field_read
+  regmap_field_update_bits_base
+  __regmap_init
+  regmap_irq_get_virq
+  regmap_raw_read
+  regmap_read
+  regmap_update_bits_base
+  regmap_write
+  regulator_bulk_disable
+  regulator_count_voltages
+  regulator_disable
+  regulator_disable_deferred
+  regulator_enable
+  regulator_get
+  regulator_get_current_limit
+  regulator_get_drvdata
+  regulator_get_mode
+  regulator_get_voltage
+  regulator_is_enabled
+  regulator_is_supported_voltage
+  regulator_list_voltage
+  regulator_list_voltage_linear
+  regulator_lock
+  regulator_notifier_call_chain
+  regulator_put
+  regulator_register
+  regulator_register_notifier
+  regulator_set_current_limit
+  regulator_set_load
+  regulator_set_mode
+  regulator_set_voltage
+  regulator_unlock
+  regulator_unregister
+  regulator_unregister_notifier
+  regulatory_set_wiphy_regd
+  release_firmware
+  __release_region
+  release_sock
+  remap_pfn_range
+  remap_vmalloc_range
+  remove_arg_zero
+  remove_proc_entry
+  remove_wait_queue
+  report_iommu_fault
+  request_firmware
+  request_firmware_into_buf
+  request_firmware_nowait
+  __request_module
+  __request_percpu_irq
+  __request_region
+  request_threaded_irq
+  reservation_ww_class
+  reset_control_assert
+  reset_control_deassert
+  reset_control_put
+  reset_control_reset
+  revalidate_disk
+  rfkill_alloc
+  rfkill_destroy
+  rfkill_init_sw_state
+  rfkill_register
+  rfkill_unregister
+  round_jiffies
+  rtc_class_close
+  rtc_class_open
+  rtc_read_time
+  __rtc_register_device
+  rtc_time64_to_tm
+  rtc_tm_to_time64
+  rtc_update_irq
+  rtc_valid_tm
+  rtnl_is_locked
+  rtnl_link_register
+  rtnl_link_unregister
+  rtnl_lock
+  rtnl_register_module
+  rtnl_trylock
+  rtnl_unlock
+  rtnl_unregister
+  rtnl_unregister_all
+  save_stack_trace
+  save_stack_trace_tsk
+  sched_clock
+  sched_setattr
+  sched_setscheduler
+  schedule
+  schedule_timeout
+  schedule_timeout_interruptible
+  schedule_timeout_uninterruptible
+  scnprintf
+  scsi_add_host_with_dma
+  scsi_autopm_get_device
+  scsi_autopm_put_device
+  scsi_block_when_processing_errors
+  scsi_command_size_tbl
+  scsi_device_get
+  scsi_device_put
+  scsi_eh_prep_cmnd
+  scsi_eh_restore_cmnd
+  scsi_get_host_dev
+  scsi_host_alloc
+  scsi_host_put
+  scsi_ioctl
+  scsi_ioctl_block_when_processing_errors
+  scsi_is_host_device
+  scsi_normalize_sense
+  __scsi_print_sense
+  scsi_register_interface
+  scsi_remove_host
+  scsi_report_bus_reset
+  scsi_report_device_reset
+  scsi_scan_host
+  scsi_sense_desc_find
+  sdev_prefix_printk
+  search_binary_handler
+  security_sock_graft
+  sdhci_add_host
+  sdhci_enable_clk
+  sdhci_get_property
+  sdhci_pltfm_free
+  sdhci_pltfm_init
+  sdhci_remove_host
+  sdhci_reset
+  sdhci_set_bus_width
+  send_sig_info
+  seq_hex_dump
+  seq_lseek
+  seq_open
+  seq_printf
+  seq_putc
+  seq_puts
+  seq_read
+  seq_release
+  seq_vprintf
+  seq_write
+  serdev_device_close
+  serdev_device_open
+  serdev_device_set_baudrate
+  serdev_device_set_flow_control
+  serdev_device_wait_until_sent
+  serdev_device_write
+  serdev_device_write_wakeup
+  serial8250_get_port
+  serial8250_register_8250_port
+  serial8250_resume_port
+  serial8250_suspend_port
+  serial8250_unregister_port
+  set_cpus_allowed_ptr
+  set_disk_ro
+  set_freezable
+  set_normalized_timespec64
+  set_page_dirty
+  set_page_dirty_lock
+  set_user_nice
+  sg_alloc_table
+  __sg_alloc_table_from_pages
+  sg_alloc_table_from_pages
+  sg_copy_from_buffer
+  sg_copy_to_buffer
+  sg_free_table
+  sg_init_one
+  sg_init_table
+  sg_miter_next
+  sg_miter_skip
+  sg_miter_start
+  sg_miter_stop
+  sg_nents
+  sg_nents_for_len
+  sg_next
+  __sg_page_iter_next
+  __sg_page_iter_start
+  sg_pcopy_from_buffer
+  sg_pcopy_to_buffer
+  sg_scsi_ioctl
+  shmem_file_setup
+  shmem_read_mapping_page_gfp
+  shmem_truncate_range
+  sigprocmask
+  si_mem_available
+  si_meminfo
+  simple_attr_open
+  simple_attr_read
+  simple_attr_release
+  simple_attr_write
+  simple_fill_super
+  simple_open
+  simple_pin_fs
+  simple_read_from_buffer
+  simple_release_fs
+  simple_statfs
+  simple_strtoul
+  simple_write_to_buffer
+  single_open
+  single_release
+  sk_alloc
+  skb_add_rx_frag
+  skb_append_pagefrags
+  skb_checksum
+  skb_clone
+  skb_coalesce_rx_frag
+  skb_copy
+  skb_copy_bits
+  skb_copy_datagram_iter
+  skb_copy_expand
+  skb_dequeue
+  __skb_flow_dissect
+  skb_free_datagram
+  __skb_get_hash
+  __skb_gso_segment
+  __skb_pad
+  skb_page_frag_refill
+  skb_partial_csum_set
+  skb_pull
+  skb_push
+  skb_put
+  skb_queue_head
+  skb_queue_purge
+  skb_queue_tail
+  skb_recv_datagram
+  skb_set_owner_w
+  skb_store_bits
+  skb_to_sgvec
+  skb_trim
+  skb_tstamp_tx
+  sk_free
+  skip_spaces
+  smp_call_function
+  smp_call_function_single
+  snd_ctl_add
+  snd_ctl_boolean_mono_info
+  snd_ctl_enum_info
+  snd_ctl_new1
+  snd_ctl_notify
+  snd_ctl_remove
+  snd_info_create_card_entry
+  snd_info_create_module_entry
+  snd_info_free_entry
+  snd_info_register
+  snd_jack_set_key
+  snd_pcm_add_chmap_ctls
+  snd_pcm_format_width
+  snd_pcm_hw_constraint_integer
+  snd_pcm_hw_constraint_list
+  snd_pcm_hw_constraint_minmax
+  snd_pcm_hw_constraint_step
+  snd_pcm_lib_ioctl
+  snd_pcm_period_elapsed
+  snd_pcm_std_chmaps
+  snd_pcm_stop
+  snd_soc_add_component_controls
+  snd_soc_bytes_tlv_callback
+  snd_soc_card_get_kcontrol
+  snd_soc_card_jack_new
+  snd_soc_component_exit_regmap
+  snd_soc_component_init_regmap
+  snd_soc_component_read32
+  snd_soc_component_update_bits
+  snd_soc_component_write
+  snd_soc_dai_get_channel_map
+  snd_soc_dai_set_channel_map
+  snd_soc_dai_set_fmt
+  snd_soc_dai_set_sysclk
+  snd_soc_dai_set_tdm_slot
+  snd_soc_dapm_add_routes
+  snd_soc_dapm_disable_pin
+  snd_soc_dapm_force_enable_pin
+  snd_soc_dapm_get_enum_double
+  snd_soc_dapm_get_volsw
+  snd_soc_dapm_ignore_suspend
+  snd_soc_dapm_kcontrol_widget
+  snd_soc_dapm_mixer_update_power
+  snd_soc_dapm_mux_update_power
+  snd_soc_dapm_new_controls
+  snd_soc_dapm_new_widgets
+  snd_soc_dapm_put_enum_double
+  snd_soc_dapm_put_volsw
+  snd_soc_dapm_sync
+  snd_soc_get_enum_double
+  snd_soc_get_volsw
+  snd_soc_get_volsw_sx
+  snd_soc_info_enum_double
+  snd_soc_info_multi_ext
+  snd_soc_info_volsw
+  snd_soc_info_volsw_sx
+  snd_soc_jack_report
+  snd_soc_lookup_component
+  snd_soc_new_compress
+  snd_soc_of_parse_audio_routing
+  snd_soc_of_parse_card_name
+  snd_soc_pm_ops
+  snd_soc_put_enum_double
+  snd_soc_put_volsw
+  snd_soc_put_volsw_sx
+  snd_soc_register_component
+  snd_soc_rtdcom_lookup
+  snd_soc_unregister_card
+  snd_soc_unregister_component
+  snd_timer_interrupt
+  snd_usb_enable_audio_stream
+  snprintf
+  soc_device_register
+  soc_device_unregister
+  sock_alloc_send_skb
+  sock_create_kern
+  sock_diag_register
+  sock_diag_save_cookie
+  sock_diag_unregister
+  sock_efree
+  sock_gettstamp
+  sock_i_ino
+  sock_init_data
+  sock_no_accept
+  sock_no_bind
+  sock_no_connect
+  sock_no_getname
+  sock_no_getsockopt
+  sock_no_ioctl
+  sock_no_listen
+  sock_no_mmap
+  sock_no_sendpage
+  sock_no_setsockopt
+  sock_no_shutdown
+  sock_no_socketpair
+  sock_queue_rcv_skb
+  __sock_recv_ts_and_drops
+  sock_register
+  sock_release
+  __sock_tx_timestamp
+  sock_unregister
+  softnet_data
+  sort
+  __spi_alloc_controller
+  spi_register_controller
+  __spi_register_driver
+  spi_setup
+  spi_sync
+  spi_unregister_controller
+  __splice_from_pipe
+  split_page
+  spmi_controller_add
+  spmi_controller_alloc
+  spmi_controller_remove
+  __spmi_driver_register
+  spmi_ext_register_read
+  spmi_ext_register_readl
+  spmi_ext_register_write
+  spmi_ext_register_writel
+  spmi_register_read
+  spmi_register_write
+  spmi_register_zero_write
+  sprintf
+  sprint_symbol
+  srcu_init_notifier_head
+  srcu_notifier_call_chain
+  srcu_notifier_chain_register
+  srcu_notifier_chain_unregister
+  sscanf
+  __stack_chk_fail
+  __stack_chk_guard
+  stack_trace_print
+  strcasecmp
+  strchr
+  strchrnul
+  strcmp
+  strcpy
+  strcspn
+  strim
+  string_get_size
+  string_unescape
+  strlcat
+  strlcpy
+  strlen
+  strncasecmp
+  strnchr
+  strncmp
+  strncpy
+  strnlen
+  strnstr
+  strpbrk
+  strrchr
+  strreplace
+  strscpy
+  strsep
+  strstr
+  __sw_hweight32
+  __sw_hweight64
+  __sw_hweight8
+  swiotlb_max_segment
+  sync_file_create
+  sync_file_get_fence
+  synchronize_hardirq
+  synchronize_irq
+  synchronize_net
+  synchronize_rcu
+  syscon_node_to_regmap
+  syscon_regmap_lookup_by_phandle
+  sysfs_create_bin_file
+  sysfs_create_file_ns
+  sysfs_create_files
+  sysfs_create_group
+  sysfs_create_groups
+  sysfs_create_link
+  __sysfs_match_string
+  sysfs_notify
+  sysfs_remove_bin_file
+  sysfs_remove_file_ns
+  sysfs_remove_files
+  sysfs_remove_group
+  sysfs_remove_groups
+  sysfs_remove_link
+  sysfs_streq
+  system_freezable_wq
+  system_freezing_cnt
+  system_long_wq
+  system_power_efficient_wq
+  system_state
+  system_unbound_wq
+  system_wq
+  sys_tz
+  __tasklet_hi_schedule
+  tasklet_init
+  tasklet_kill
+  __tasklet_schedule
+  __task_pid_nr_ns
+  thermal_cdev_update
+  thermal_cooling_device_unregister
+  thermal_of_cooling_device_register
+  thermal_zone_device_register
+  thermal_zone_device_update
+  thermal_zone_get_temp
+  thermal_zone_get_zone_by_name
+  thermal_zone_of_sensor_register
+  thermal_zone_of_sensor_unregister
+  timer_unstable_counter_workaround
+  timespec64_to_jiffies
+  _totalram_pages
+  __trace_bprintk
+  trace_define_field
+  trace_event_buffer_commit
+  trace_event_buffer_reserve
+  trace_event_ignore_this_pid
+  trace_event_raw_init
+  trace_event_reg
+  trace_handle_return
+  __tracepoint_dma_fence_emit
+  __tracepoint_xdp_exception
+  trace_print_array_seq
+  trace_print_hex_seq
+  trace_raw_output_prep
+  trace_seq_printf
+  tracing_off
+  try_module_get
+  try_wait_for_completion
+  tty_flip_buffer_push
+  __tty_insert_flip_char
+  tty_insert_flip_string_fixed_flag
+  typec_altmode_attention
+  typec_altmode_get_partner
+  typec_altmode_notify
+  typec_altmode_update_active
+  typec_altmode_vdm
+  typec_get_drvdata
+  typec_partner_register_altmode
+  typec_port_register_altmode
+  typec_register_partner
+  typec_register_port
+  typec_set_data_role
+  typec_set_mode
+  typec_set_orientation
+  typec_set_pwr_opmode
+  typec_set_pwr_role
+  typec_set_vconn_role
+  typec_unregister_altmode
+  typec_unregister_partner
+  typec_unregister_port
+  uart_add_one_port
+  uart_console_device
+  uart_console_write
+  uart_get_baud_rate
+  uart_insert_char
+  uart_parse_options
+  uart_register_driver
+  uart_remove_one_port
+  uart_resume_port
+  uart_set_options
+  uart_suspend_port
+  uart_unregister_driver
+  uart_update_timeout
+  uart_write_wakeup
+  __udelay
+  __uio_register_device
+  uio_unregister_device
+  unlock_page
+  unmap_mapping_range
+  unregister_binfmt
+  unregister_blkdev
+  __unregister_chrdev
+  unregister_chrdev_region
+  unregister_gadget_item
+  unregister_inet6addr_notifier
+  unregister_inetaddr_notifier
+  unregister_netdev
+  unregister_netdevice_many
+  unregister_netdevice_notifier
+  unregister_netdevice_queue
+  unregister_netevent_notifier
+  unregister_pernet_subsys
+  unregister_pm_notifier
+  unregister_reboot_notifier
+  unregister_shrinker
+  unregister_syscore_ops
+  unregister_sysctl_table
+  up
+  update_devfreq
+  up_read
+  up_write
+  usb_add_gadget_udc
+  usb_add_phy_dev
+  usb_alloc_coherent
+  usb_alloc_dev
+  usb_alloc_urb
+  usb_amd_dev_put
+  usb_amd_pt_check_port
+  usb_amd_quirk_pll_check
+  usb_amd_quirk_pll_disable
+  usb_amd_quirk_pll_enable
+  usb_asmedia_modifyflowcontrol
+  usb_assign_descriptors
+  usb_autopm_get_interface
+  usb_autopm_get_interface_no_resume
+  usb_autopm_put_interface
+  usb_autopm_put_interface_no_suspend
+  usb_bulk_msg
+  usb_clear_halt
+  usb_composite_setup_continue
+  usb_control_msg
+  usb_debug_root
+  usb_decode_ctrl
+  usb_del_gadget_udc
+  usb_deregister
+  usb_disabled
+  usb_disable_xhci_ports
+  usb_driver_claim_interface
+  usb_driver_release_interface
+  usb_enable_autosuspend
+  usb_enable_intel_xhci_ports
+  usb_ep_alloc_request
+  usb_ep_autoconfig
+  usb_ep_clear_halt
+  usb_ep_dequeue
+  usb_ep_disable
+  usb_ep_enable
+  usb_ep_fifo_flush
+  usb_ep_free_request
+  usb_ep_queue
+  usb_ep_set_halt
+  usb_ep_set_maxpacket_limit
+  usb_ep_set_wedge
+  usb_find_common_endpoints
+  usb_free_all_descriptors
+  usb_free_coherent
+  usb_free_urb
+  usb_function_register
+  usb_function_unregister
+  usb_gadget_giveback_request
+  usb_gadget_map_request_by_dev
+  usb_gadget_set_state
+  usb_gadget_udc_reset
+  usb_gadget_unmap_request_by_dev
+  usb_gadget_vbus_connect
+  usb_gadget_vbus_disconnect
+  usb_gadget_vbus_draw
+  usb_gadget_wakeup
+  usb_get_current_frame_number
+  usb_get_dev
+  usb_get_dr_mode
+  usb_get_intf
+  usb_get_maximum_speed
+  usb_get_urb
+  usb_gstrings_attach
+  usb_ifnum_to_if
+  usb_interface_id
+  usb_kill_urb
+  usb_lock_device_for_reset
+  usb_match_one_id
+  usb_os_desc_prepare_interf_dir
+  usb_poison_urb
+  usb_put_dev
+  usb_put_function_instance
+  usb_put_intf
+  usb_register_driver
+  usb_register_notify
+  usb_remove_phy
+  usb_reset_device
+  usb_reset_endpoint
+  usb_root_hub_lost_power
+  usb_set_device_state
+  usb_set_interface
+  usb_sg_cancel
+  usb_sg_init
+  usb_sg_wait
+  usb_speed_string
+  usb_string
+  usb_string_id
+  usb_submit_urb
+  usb_unlink_urb
+  usb_unregister_notify
+  usb_wakeup_notification
+  __usecs_to_jiffies
+  usleep_range
+  v4l2_ctrl_find
+  v4l2_ctrl_g_ctrl
+  v4l2_ctrl_get_name
+  v4l2_ctrl_handler_free
+  v4l2_ctrl_handler_init_class
+  v4l2_ctrl_handler_setup
+  v4l2_ctrl_merge
+  __v4l2_ctrl_modify_range
+  v4l2_ctrl_new_custom
+  v4l2_ctrl_new_std
+  v4l2_ctrl_new_std_menu
+  v4l2_ctrl_replace
+  __v4l2_ctrl_s_ctrl
+  v4l2_ctrl_subscribe_event
+  v4l2_device_disconnect
+  v4l2_device_put
+  v4l2_device_register
+  v4l2_device_register_subdev
+  v4l2_device_register_subdev_nodes
+  v4l2_device_unregister
+  v4l2_device_unregister_subdev
+  v4l2_event_dequeue
+  v4l2_event_pending
+  v4l2_event_queue
+  v4l2_event_queue_fh
+  v4l2_event_subscribe
+  v4l2_event_unsubscribe
+  v4l2_fh_add
+  v4l2_fh_del
+  v4l2_fh_exit
+  v4l2_fh_init
+  v4l2_fh_open
+  v4l2_fh_release
+  v4l2_format_info
+  v4l2_prio_init
+  v4l2_s_ctrl
+  v4l2_subdev_call_wrappers
+  v4l2_subdev_init
+  v4l2_type_names
+  vabits_actual
+  vb2_buffer_done
+  vb2_create_bufs
+  vb2_dqbuf
+  vb2_expbuf
+  vb2_fop_mmap
+  vb2_fop_poll
+  vb2_fop_read
+  vb2_fop_release
+  vb2_ioctl_create_bufs
+  vb2_ioctl_dqbuf
+  vb2_ioctl_expbuf
+  vb2_ioctl_prepare_buf
+  vb2_ioctl_qbuf
+  vb2_ioctl_querybuf
+  vb2_ioctl_reqbufs
+  vb2_ioctl_streamoff
+  vb2_ioctl_streamon
+  vb2_mmap
+  vb2_ops_wait_finish
+  vb2_ops_wait_prepare
+  vb2_plane_vaddr
+  vb2_poll
+  vb2_qbuf
+  vb2_querybuf
+  vb2_queue_error
+  vb2_queue_init
+  vb2_queue_release
+  vb2_reqbufs
+  vb2_streamoff
+  vb2_streamon
+  vfree
+  vfs_fsync
+  video_devdata
+  video_device_alloc
+  video_device_release
+  video_device_release_empty
+  video_ioctl2
+  __video_register_device
+  video_unregister_device
+  vmalloc
+  vmalloc_to_page
+  vmalloc_user
+  vmap
+  vmf_insert_mixed
+  vmf_insert_pfn
+  vm_get_page_prot
+  vm_insert_page
+  vm_iomap_memory
+  vprintk
+  vscnprintf
+  vsnprintf
+  vunmap
+  vzalloc
+  wait_for_completion
+  wait_for_completion_interruptible
+  wait_for_completion_interruptible_timeout
+  wait_for_completion_killable
+  wait_for_completion_timeout
+  wait_woken
+  __wake_up
+  wake_up_process
+  wakeup_source_register
+  wakeup_source_unregister
+  __warn_printk
+  wiphy_free
+  wiphy_new_nm
+  wiphy_register
+  wiphy_unregister
+  woken_wake_function
+  work_busy
+  would_dump
+  ww_mutex_lock
+  ww_mutex_lock_interruptible
+  ww_mutex_unlock
+  xdp_convert_zc_to_xdp_frame
+  xdp_do_flush_map
+  xdp_do_redirect
+  xdp_return_frame
+  xdp_return_frame_rx_napi
+  xdp_rxq_info_reg
+  xdp_rxq_info_reg_mem_model
+  xdp_rxq_info_unreg
diff --git a/android/abi_gki_aarch64_sunxi b/android/abi_gki_aarch64_sunxi
new file mode 100644
index 0000000..5b031ac
--- /dev/null
+++ b/android/abi_gki_aarch64_sunxi
@@ -0,0 +1,182 @@
+[abi_symbol_list]
+# commonly used symbols
+  pinctrl_get
+  pinctrl_gpio_set_config
+  of_find_node_by_type
+  kmalloc_order
+  down_interruptible
+  dev_pm_set_wake_irq
+
+# required by ccu-sunxi-ng.ko
+  clk_notifier_register
+  of_clk_hw_register
+  reset_controller_register
+
+# required by sunxi_pinctrl.ko
+  handle_fasteoi_irq
+
+# required by sunxi_uart.ko
+  uart_get_divisor
+  uart_handle_cts_change
+  uart_handle_dcd_change
+  unregister_console
+
+# required by timer-sunxi.ko
+  clockevents_config_and_register
+  __clocksource_register_scale
+  setup_irq
+
+# required by dump_reg.ko
+  class_create_file_ns
+  class_remove_file_ns
+
+# required by sunxi_nand.ko
+  rq_flush_dcache_pages
+
+# required by sunxi_iommu.ko
+  iommu_group_register_notifier
+  iommu_group_alloc
+
+# required by uas.ko
+  int_to_scsilun
+  scmd_printk
+  scsi_block_requests
+  scsi_change_queue_depth
+  scsi_print_command
+  scsi_unblock_requests
+  usb_alloc_streams
+  usb_free_streams
+  usb_kill_anchored_urbs
+  usb_unanchor_urb
+  usb_wait_anchor_empty_timeout
+
+# required by ums-realtek.ko
+  usb_bulk_msg
+
+# required by ums-sddr09.ko
+  usb_reset_configuration
+
+# required by clk-ddr.ko
+  devm_of_iomap
+
+# required by sunxi-dmc.ko
+  devm_devfreq_register_opp_notifier
+
+# required by irq-sunxi-8i-nmi.ko
+  irq_domain_xlate_onetwocell
+  of_io_request_and_map
+
+# required by tee.ko optee.ko
+  gen_pool_best_fit
+  gen_pool_set_algo
+  gen_pool_virt_to_phys
+  dump_page
+
+# required by sunxi_nsi.ko
+  device_remove_groups
+
+# required by sunxi-ce.ko
+  crypto_register_aead
+  crypto_register_ahash
+  crypto_register_rng
+  crypto_unregister_ahash
+  crypto_unregister_rng
+
+# required by required by audio*.ko :
+  __devm_release_region
+  snd_dmaengine_pcm_close_release_chan
+  snd_dmaengine_pcm_get_chan
+  snd_dmaengine_pcm_open_request_chan
+  snd_dmaengine_pcm_pointer
+  snd_dmaengine_pcm_trigger
+  snd_hwparams_to_dma_slave_config
+  snd_soc_add_card_controls
+  snd_soc_dai_set_clkdiv
+  snd_soc_dai_set_pll
+  snd_soc_register_card
+
+# required by xr829.ko
+  bridge_tunnel_header
+  cfg80211_assoc_timeout
+  cfg80211_auth_timeout
+  cfg80211_classify8021d
+  cfg80211_cqm_pktloss_notify
+  cfg80211_rx_assoc_resp
+  cfg80211_rx_mlme_mgmt
+  cfg80211_sched_scan_stopped
+  cfg80211_tx_mlme_mgmt
+  crc32_be
+  __dev_kfree_skb_irq
+  __hw_addr_init
+  __hw_addr_sync
+  __hw_addr_unsync
+  ieee80211_amsdu_to_8023s
+  ieee80211_bss_get_elem
+  ieee80211_data_to_8023_exthdr
+  ieee80211_radiotap_iterator_init
+  ieee80211_radiotap_iterator_next
+  kernel_param_lock
+  kernel_param_unlock
+  round_jiffies_relative
+  sdio_align_size
+  __sw_hweight16
+
+# required by arc4.ko
+  arc4_crypt
+  arc4_setkey
+  crypto_register_skcipher
+  crypto_unregister_skcipher
+  skcipher_walk_done
+  skcipher_walk_virt
+
+# required by vin_v4l2.ko
+  v4l2_i2c_subdev_init
+  media_entity_find_link
+  media_entity_remote_pad
+  __media_entity_setup_link
+  media_entity_setup_link
+  media_graph_walk_init
+  media_graph_walk_next
+  media_graph_walk_start
+  spi_busnum_to_master
+  spi_unregister_device
+  v4l2_ctrl_cluster
+  v4l2_ctrl_new_int_menu
+  v4l2_ctrl_subdev_subscribe_event
+  v4l2_event_subdev_unsubscribe
+  v4l2_g_ctrl
+  v4l2_i2c_new_subdev
+  v4l2_spi_new_subdev
+  v4l_bound_align_image
+  vb2_plane_cookie
+
+# required by init-input.ko
+  of_find_i2c_device_by_node
+
+# required by ntfs.ko
+  block_is_partially_uptodate
+  buffer_migrate_page
+  create_empty_buffers
+  d_add_ci
+  d_obtain_alias
+  generic_error_remove_page
+  generic_file_open
+  ihold
+  load_nls_default
+  __lock_page
+  make_bad_inode
+  truncate_inode_pages_final
+  __vmalloc
+  io_schedule
+  is_bad_inode
+  end_buffer_read_sync
+
+# required by squashfs.ko
+  get_tree_bdev
+  iget_locked
+  ll_rw_block
+  logfc
+  zlib_inflate
+  zlib_inflateEnd
+  zlib_inflateInit2
+  zlib_inflate_workspacesize
diff --git a/android/abi_gki_aarch64_unisoc b/android/abi_gki_aarch64_unisoc
new file mode 100644
index 0000000..117dd48
--- /dev/null
+++ b/android/abi_gki_aarch64_unisoc
@@ -0,0 +1,2420 @@
+[abi_symbol_list]
+# commonly used symbols
+  add_timer
+  add_uevent_var
+  add_wait_queue
+  aes_encrypt
+  aes_expandkey
+  alloc_chrdev_region
+  alloc_netdev_mqs
+  alloc_pages_exact
+  __alloc_pages_nodemask
+  __alloc_percpu
+  __alloc_skb
+  alloc_workqueue
+  __arch_copy_from_user
+  __arch_copy_in_user
+  __arch_copy_to_user
+  arm64_const_caps_ready
+  arp_tbl
+  atomic_notifier_call_chain
+  atomic_notifier_chain_register
+  atomic_notifier_chain_unregister
+  blk_finish_plug
+  blk_start_plug
+  blocking_notifier_chain_register
+  blocking_notifier_chain_unregister
+  bpf_trace_run1
+  bpf_trace_run2
+  bpf_trace_run3
+  bpf_trace_run4
+  __breadahead
+  bus_register
+  bus_set_iommu
+  bus_unregister
+  cancel_delayed_work
+  cancel_delayed_work_sync
+  cancel_work_sync
+  cdev_add
+  cdev_del
+  cdev_device_add
+  cdev_device_del
+  cdev_init
+  __cfi_slowpath
+  __check_object_size
+  __class_create
+  class_destroy
+  class_find_device
+  clk_bulk_disable
+  clk_bulk_enable
+  clk_bulk_prepare
+  clk_bulk_unprepare
+  clk_disable
+  clk_enable
+  clk_fixed_factor_ops
+  clk_get_rate
+  clk_prepare
+  clk_put
+  clk_set_parent
+  clk_set_rate
+  clk_unprepare
+  clocks_calc_mult_shift
+  clockevents_config_and_register
+  __clocksource_register_scale
+  compat_alloc_user_space
+  complete
+  complete_all
+  config_ep_by_speed
+  config_group_init_type_name
+  console_lock
+  console_unlock
+  __const_udelay
+  cpu_have_feature
+  cpu_hwcap_keys
+  cpu_hwcaps
+  cpumask_next
+  cpufreq_add_update_util_hook
+  cpufreq_remove_update_util_hook
+  cpu_number
+  __cpu_online_mask
+  __cpu_possible_mask
+  crypto_ahash_digest
+  crypto_ahash_setkey
+  crypto_alloc_ahash
+  crypto_destroy_tfm
+  crypto_inc
+  __crypto_memneq
+  crypto_register_aead
+  crypto_register_shash
+  crypto_register_shashes
+  crypto_unregister_aead
+  crypto_unregister_shash
+  crypto_unregister_shashes
+  __crypto_xor
+  csum_ipv6_magic
+  csum_partial
+  debugfs_create_dir
+  debugfs_create_file
+  debugfs_remove_recursive
+  default_llseek
+  delayed_work_timer_fn
+  del_timer
+  del_timer_sync
+  destroy_workqueue
+  dev_driver_string
+  _dev_err
+  dev_fwnode
+  dev_get_by_name
+  dev_get_regmap
+  device_add
+  device_connection_find_match
+  device_create
+  device_create_file
+  device_destroy
+  device_initialize
+  device_init_wakeup
+  device_link_add
+  device_match_fwnode
+  device_match_name
+  device_property_present
+  device_property_read_u32_array
+  device_register
+  device_remove_file
+  device_set_wakeup_capable
+  device_unregister
+  _dev_info
+  __dev_kfree_skb_any
+  devm_add_action
+  devm_backlight_device_register
+  devm_clk_bulk_get
+  devm_clk_bulk_get_all
+  devm_clk_get
+  devm_free_irq
+  devm_gpiochip_add_data
+  devm_gpiod_get
+  devm_gpio_free
+  devm_gpio_request
+  devm_hwspin_lock_request_specific
+  __devm_iio_device_register
+  devm_ioremap_nocache
+  devm_ioremap_resource
+  devm_kfree
+  devm_kmalloc
+  devm_kmemdup
+  devm_mfd_add_devices
+  devm_nvmem_register
+  devm_of_platform_populate
+  devm_pinctrl_get
+  devm_pinctrl_put
+  devm_power_supply_register
+  __devm_regmap_init
+  __devm_regmap_init_i2c
+  __devm_regmap_init_mmio_clk
+  devm_regulator_get
+  devm_regulator_register
+  devm_request_threaded_irq
+  devm_spi_register_controller
+  devm_usb_get_phy
+  devm_usb_get_phy_by_phandle
+  dev_queue_xmit
+  dev_set_name
+  _dev_warn
+  disable_irq
+  disable_irq_nosync
+  dma_alloc_attrs
+  dma_direct_map_page
+  dma_direct_sync_single_for_cpu
+  dma_direct_sync_single_for_device
+  dma_direct_unmap_page
+  dma_fence_release
+  dma_fence_wait_timeout
+  dma_free_attrs
+  dma_max_mapping_size
+  dma_set_mask
+  down
+  driver_register
+  driver_unregister
+  drm_atomic_helper_plane_destroy_state
+  drm_atomic_helper_plane_duplicate_state
+  drm_atomic_helper_plane_reset
+  drm_atomic_helper_setup_commit
+  drm_compat_ioctl
+  drm_dbg
+  drm_dev_alloc
+  drm_dev_put
+  drm_dev_register
+  drm_err
+  drm_ioctl
+  drm_mm_init
+  drm_mm_insert_node_in_range
+  drm_mm_remove_node
+  drm_mm_takedown
+  drm_mode_config_cleanup
+  drm_mode_config_init
+  drm_open
+  drm_plane_create_color_properties
+  drm_poll
+  drm_read
+  drm_release
+  dst_release
+  dump_stack
+  enable_irq
+  ether_setup
+  eth_type_trans
+  event_triggers_call
+  extcon_find_edev_by_node
+  extcon_get_edev_by_phandle
+  extcon_get_state
+  fb_mode_option
+  __find_get_block
+  find_next_bit
+  finish_wait
+  flush_work
+  flush_workqueue
+  fpsimd_context_busy
+  fput
+  free_irq
+  free_netdev
+  __free_pages
+  free_pages_exact
+  free_percpu
+  freezing_slow_path
+  fwnode_property_present
+  fwnode_property_read_string
+  gen_pool_avail
+  generic_file_llseek
+  generic_handle_irq
+  genl_register_family
+  genl_unregister_family
+  gen_pool_add_owner
+  gen_pool_alloc_algo_owner
+  gen_pool_create
+  gen_pool_free_owner
+  get_cpu_device
+  __get_free_pages
+  get_governor_parent_kobj
+  get_random_bytes
+  gov_attr_set_get
+  gov_attr_set_init
+  gov_attr_set_put
+  governor_sysfs_ops
+  gpiochip_get_data
+  gpiochip_line_is_irq
+  gpiod_direction_input
+  gpiod_direction_output_raw
+  gpiod_get
+  gpiod_get_raw_value
+  gpiod_set_raw_value
+  gpiod_set_raw_value_cansleep
+  gpiod_to_chip
+  gpiod_to_irq
+  gpio_free
+  gpio_request
+  gpio_to_desc
+  handle_bad_irq
+  handle_edge_irq
+  handle_level_irq
+  have_governor_per_policy
+  i2c_del_driver
+  i2c_register_driver
+  i2c_smbus_read_byte_data
+  i2c_smbus_write_byte_data
+  i2c_transfer_buffer_flags
+  ida_alloc_range
+  ida_destroy
+  ida_free
+  idr_alloc
+  idr_destroy
+  idr_find
+  idr_for_each
+  idr_remove
+  ieee80211_channel_to_freq_khz
+  ieee80211_freq_khz_to_channel
+  ieee80211_get_channel_khz
+  ignore_console_lock_warning
+  inet_proto_csum_replace4
+  init_net
+  __init_rwsem
+  init_timer_key
+  init_wait_entry
+  __init_waitqueue_head
+  input_alloc_absinfo
+  input_allocate_device
+  input_event
+  input_free_device
+  input_mt_get_slot_by_key
+  input_mt_sync_frame
+  input_register_device
+  iommu_alloc_resv_region
+  iommu_attach_device
+  iommu_detach_device
+  iommu_device_link
+  iommu_device_register
+  iommu_device_sysfs_add
+  iommu_device_sysfs_remove
+  iommu_device_unlink
+  iommu_device_unregister
+  iommu_dma_get_resv_regions
+  iommu_domain_alloc
+  iommu_domain_free
+  iommu_domain_get_attr
+  iommu_domain_set_attr
+  iommu_fwspec_add_ids
+  iommu_fwspec_free
+  iommu_get_dma_cookie
+  iommu_get_domain_for_dev
+  iommu_group_alloc
+  iommu_group_get
+  iommu_group_get_for_dev
+  iommu_group_get_iommudata
+  iommu_group_put
+  iommu_group_ref_get
+  iommu_group_remove_device
+  iommu_group_set_iommudata
+  iommu_map
+  iommu_map_sg
+  iommu_present
+  iommu_put_dma_cookie
+  iommu_set_fault_handler
+  iommu_unmap
+  __ioremap
+  iounmap
+  ip6t_alloc_initial_table
+  ip6t_do_table
+  ip6t_register_table
+  ip6t_unregister_table
+  ip_route_output_flow
+  ipv4_redirect
+  ipv4_update_pmtu
+  ir_lirc_scancode_event
+  ir_raw_gen_manchester
+  ir_raw_gen_pd
+  ir_raw_handler_register
+  ir_raw_handler_unregister
+  ir_raw_gen_pl
+  irq_find_mapping
+  irq_get_irq_data
+  irq_modify_status
+  irq_of_parse_and_map
+  irq_set_irq_type
+  irq_set_irq_wake
+  irq_work_sync
+  is_console_locked
+  jiffies
+  jiffies_to_msecs
+  kernel_kobj
+  kasprintf
+  kernel_neon_begin
+  kernel_neon_end
+  __kfifo_alloc
+  __kfifo_free
+  __kfifo_in
+  __kfifo_out
+  kfree
+  kfree_skb
+  kimage_vaddr
+  kimage_voffset
+  __kmalloc
+  kmalloc_caches
+  kmalloc_order_trace
+  kmem_cache_alloc
+  kmem_cache_alloc_trace
+  kmem_cache_create
+  kmem_cache_destroy
+  kmem_cache_free
+  kmemdup
+  kobject_create_and_add
+  kobject_uevent_env
+  kstrndup
+  kstrtobool
+  kstrtoint
+  kstrtoll
+  kstrtouint
+  kstrtoull
+  kthread_create_on_node
+  kthread_should_stop
+  kthread_stop
+  ktime_get
+  ktime_get_mono_fast_ns
+  ktime_get_real_seconds
+  ktime_get_real_ts64
+  kzfree
+  __list_add_valid
+  __list_del_entry_valid
+  memcpy
+  __memcpy_fromio
+  memmove
+  memset
+  misc_deregister
+  misc_register
+  mod_timer
+  module_put
+  __msecs_to_jiffies
+  msleep
+  __mutex_init
+  mutex_lock
+  mutex_lock_interruptible
+  mutex_trylock
+  mutex_unlock
+  nd_tbl
+  neigh_destroy
+  __netdev_alloc_skb
+  netif_carrier_off
+  netif_carrier_on
+  netif_rx_ni
+  netif_tx_wake_queue
+  nf_conntrack_destroy
+  nf_conntrack_find_get
+  nf_ct_get_tuplepr
+  nf_ct_invert_tuple
+  nf_ct_l4proto_find
+  nf_register_net_hooks
+  nf_unregister_net_hooks
+  nr_cpu_ids
+  nvmem_cell_get
+  nvmem_cell_put
+  nvmem_cell_read
+  of_address_to_resource
+  of_alias_get_id
+  of_clk_get
+  of_clk_get_parent_count
+  of_count_phandle_with_args
+  of_device_get_match_data
+  of_device_is_available
+  of_device_is_compatible
+  of_dev_put
+  of_find_compatible_node
+  of_find_device_by_node
+  of_find_node_by_name
+  of_find_property
+  of_get_child_by_name
+  of_get_named_gpio_flags
+  of_get_next_available_child
+  of_get_next_child
+  of_get_property
+  of_get_regulator_init_data
+  of_graph_get_remote_node
+  of_irq_get
+  of_match_node
+  of_nvmem_cell_get
+  of_parse_phandle
+  of_parse_phandle_with_args
+  of_parse_phandle_with_fixed_args
+  of_platform_depopulate
+  of_platform_populate
+  of_property_count_elems_of_size
+  of_property_match_string
+  of_property_read_string
+  of_property_read_u32_index
+  of_property_read_u64
+  of_property_read_variable_u32_array
+  of_prop_next_string
+  oops_in_progress
+  overflowgid
+  overflowuid
+  panic
+  param_ops_charp
+  param_ops_uint
+  param_ops_ushort
+  __pci_register_driver
+  pci_set_master
+  pci_unregister_driver
+  PDE_DATA
+  __per_cpu_offset
+  perf_trace_buf_alloc
+  perf_trace_run_bpf_submit
+  pfn_valid
+  pinctrl_lookup_state
+  pinctrl_select_state
+  pinctrl_pm_select_default_state
+  pinctrl_pm_select_sleep_state
+  platform_bus_type
+  platform_device_add
+  platform_device_add_properties
+  platform_device_add_resources
+  platform_device_alloc
+  platform_device_put
+  platform_device_register
+  platform_device_register_full
+  platform_device_unregister
+  __platform_driver_register
+  platform_driver_unregister
+  platform_get_irq
+  platform_get_irq_byname
+  platform_get_resource
+  platform_get_resource_byname
+  pm_power_off
+  __pm_relax
+  pm_runtime_allow
+  __pm_runtime_disable
+  pm_runtime_enable
+  pm_runtime_forbid
+  pm_runtime_force_resume
+  pm_runtime_force_suspend
+  __pm_runtime_idle
+  __pm_runtime_resume
+  pm_runtime_set_autosuspend_delay
+  __pm_runtime_set_status
+  __pm_runtime_suspend
+  __pm_runtime_use_autosuspend
+  __pm_stay_awake
+  pm_wakeup_ws_event
+  power_supply_changed
+  power_supply_get_battery_info
+  power_supply_get_by_name
+  power_supply_get_drvdata
+  power_supply_get_property
+  power_supply_powers
+  power_supply_put
+  ppp_input
+  ppp_register_compressor
+  ppp_unregister_compressor
+  preempt_schedule
+  preempt_schedule_notrace
+  prepare_to_wait_event
+  printk
+  proc_create
+  proc_create_data
+  proc_create_seq_private
+  proc_mkdir
+  __pskb_copy_fclone
+  pskb_expand_head
+  put_device
+  put_tty_driver
+  queue_delayed_work_on
+  queue_work_on
+  ___ratelimit
+  _raw_read_lock
+  _raw_read_unlock
+  _raw_spin_lock
+  _raw_spin_lock_bh
+  _raw_spin_lock_irq
+  _raw_spin_lock_irqsave
+  _raw_spin_unlock
+  _raw_spin_unlock_bh
+  _raw_spin_unlock_irq
+  _raw_spin_unlock_irqrestore
+  __rcu_read_lock
+  __rcu_read_unlock
+  rc_map_unregister
+  rc_repeat
+  rc_keydown
+  rc_map_register
+  rdev_get_drvdata
+  refcount_dec_and_test_checked
+  refcount_inc_checked
+  __refrigerator
+  __register_chrdev
+  register_pernet_subsys
+  register_pm_notifier
+  regmap_read
+  regmap_update_bits_base
+  regmap_write
+  regulator_disable
+  regulator_disable_regmap
+  regulator_enable
+  regulator_enable_regmap
+  regulator_get_voltage_sel_regmap
+  regulator_is_enabled_regmap
+  regulator_list_voltage_linear
+  regulator_map_voltage_linear
+  regulator_set_voltage_sel_regmap
+  release_firmware
+  remap_pfn_range
+  remove_proc_entry
+  remove_wait_queue
+  __request_module
+  request_threaded_irq
+  reset_control_assert
+  reset_control_deassert
+  rfkill_alloc
+  rfkill_destroy
+  rfkill_init_sw_state
+  rfkill_register
+  rfkill_unregister
+  sched_clock
+  sched_setscheduler
+  schedule
+  schedule_timeout
+  schedule_timeout_interruptible
+  scnprintf
+  seq_lseek
+  seq_printf
+  seq_putc
+  seq_puts
+  seq_read
+  set_normalized_timespec64
+  set_user_nice
+  sg_init_table
+  sg_miter_next
+  sg_miter_start
+  sg_miter_stop
+  sg_nents
+  sg_next
+  simple_attr_open
+  simple_attr_read
+  simple_attr_release
+  simple_attr_write
+  simple_read_from_buffer
+  simple_strtol
+  single_open
+  single_release
+  skb_clone
+  skb_copy
+  skb_cow_data
+  skb_ensure_writable
+  skb_push
+  skb_put
+  skb_realloc_headroom
+  skb_to_sgvec_nomark
+  skb_trim
+  skcipher_walk_aead_decrypt
+  skcipher_walk_aead_encrypt
+  skcipher_walk_done
+  skcipher_walk_virt
+  sk_free
+  snd_info_create_card_entry
+  snd_info_free_entry
+  snd_info_get_line
+  snd_info_register
+  snd_pcm_hw_constraint_minmax
+  snd_pcm_lib_ioctl
+  snd_pcm_period_elapsed
+  snd_soc_add_component_controls
+  snd_soc_dapm_disable_pin
+  snd_soc_dapm_enable_pin
+  snd_soc_dapm_ignore_suspend
+  snd_soc_dapm_kcontrol_dapm
+  snd_soc_dapm_put_enum_double
+  snd_soc_dapm_put_volsw
+  snd_soc_dapm_sync
+  snd_soc_info_enum_double
+  snd_soc_info_volsw
+  snd_soc_pm_ops
+  snd_soc_register_component
+  snd_soc_unregister_component
+  snprintf
+  __spi_alloc_controller
+  sprintf
+  sscanf
+  __stack_chk_fail
+  __stack_chk_guard
+  strcasecmp
+  strcat
+  strchr
+  strcmp
+  strcpy
+  strlcat
+  strlcpy
+  strlen
+  strncasecmp
+  strncmp
+  strncpy
+  strncpy_from_user
+  strnlen
+  strnstr
+  strstr
+  __sw_hweight32
+  __sw_hweight64
+  sync_filesystem
+  syscon_regmap_lookup_by_phandle
+  syscon_regmap_lookup_by_phandle_args
+  sysfs_create_bin_file
+  sysfs_create_file_ns
+  sysfs_create_group
+  sysfs_create_groups
+  sysfs_create_link
+  __sysfs_match_string
+  sysfs_notify
+  sysfs_remove_bin_file
+  sysfs_remove_file_ns
+  sysfs_remove_group
+  sysfs_remove_groups
+  sysfs_remove_link
+  sysfs_streq
+  system_freezable_wq
+  system_freezing_cnt
+  system_unbound_wq
+  system_wq
+  sys_tz
+  tasklet_init
+  tasklet_kill
+  __tasklet_schedule
+  thermal_zone_get_zone_by_name
+  timer_of_init
+  trace_define_field
+  trace_event_buffer_commit
+  trace_event_buffer_reserve
+  trace_event_ignore_this_pid
+  trace_event_raw_init
+  trace_event_reg
+  trace_handle_return
+  trace_raw_output_prep
+  trace_seq_printf
+  try_module_get
+  __tty_alloc_driver
+  tty_flip_buffer_push
+  __tty_insert_flip_char
+  tty_insert_flip_string_fixed_flag
+  tty_kref_put
+  tty_port_close
+  tty_port_destroy
+  tty_port_hangup
+  tty_port_init
+  tty_port_link_device
+  tty_port_open
+  tty_port_register_device
+  tty_port_tty_get
+  tty_port_tty_wakeup
+  tty_register_driver
+  tty_set_operations
+  tty_standard_install
+  tty_std_termios
+  tty_termios_baud_rate
+  tty_unregister_device
+  tty_unregister_driver
+  tty_vhangup
+  __udelay
+  __unregister_chrdev
+  unregister_chrdev_region
+  unregister_pernet_subsys
+  up
+  usb_add_gadget_udc
+  usb_alloc_coherent
+  usb_alloc_urb
+  usb_autopm_get_interface
+  usb_autopm_get_interface_no_resume
+  usb_autopm_put_interface
+  usb_control_msg
+  usb_del_gadget_udc
+  usb_deregister
+  usb_ep_alloc_request
+  usb_ep_autoconfig
+  usb_ep_dequeue
+  usb_ep_enable
+  usb_ep_free_request
+  usb_ep_queue
+  usb_ep_set_maxpacket_limit
+  usb_find_common_endpoints
+  usb_free_coherent
+  usb_free_urb
+  usb_function_register
+  usb_function_unregister
+  usb_gadget_giveback_request
+  usb_gadget_udc_reset
+  usb_get_dr_mode
+  usb_get_intf
+  usb_hcd_is_primary_hcd
+  usb_interface_id
+  usb_kill_urb
+  usb_phy_get_charger_current
+  usb_phy_set_charger_current
+  usb_put_function_instance
+  usb_put_intf
+  usb_register_driver
+  usb_submit_urb
+  usleep_range
+  vabits_actual
+  vfree
+  vmalloc
+  vm_iomap_memory
+  vsnprintf
+  vunmap
+  wait_for_completion
+  wait_for_completion_interruptible
+  wait_for_completion_interruptible_timeout
+  wait_for_completion_timeout
+  __wake_up
+  wake_up_process
+  wakeup_source_add
+  wakeup_source_create
+  wakeup_source_destroy
+  wakeup_source_register
+  wakeup_source_remove
+  wakeup_source_unregister
+  __warn_printk
+  xfrm4_protocol_deregister
+  xfrm4_protocol_register
+  xfrm4_rcv
+  xfrm_aalg_get_byname
+  xfrm_input
+  xfrm_input_resume
+  xfrm_output_resume
+  xfrm_register_type
+  __xfrm_state_destroy
+  xfrm_state_lookup
+  xfrm_unregister_type
+  xt_register_match
+  xt_register_matches
+  xt_register_target
+  xt_register_targets
+  xt_unregister_match
+  xt_unregister_matches
+  xt_unregister_target
+  xt_unregister_targets
+
+# required by blk-mq-virtio.ko
+  blk_mq_map_queues
+
+# required by cdc-acm.ko
+  capable
+  cdc_parse_cdc_header
+  default_wake_function
+  refcount_inc_not_zero_checked
+  tty_port_put
+  tty_port_tty_hangup
+  usb_anchor_urb
+  usb_autopm_get_interface_async
+  usb_autopm_put_interface_async
+  usb_clear_halt
+  usb_driver_claim_interface
+  usb_driver_release_interface
+  usb_get_from_anchor
+  usb_ifnum_to_if
+
+# required by charger-manager.ko
+  alarm_cancel
+  alarm_expires_remaining
+  alarm_init
+  alarm_start
+  alarmtimer_get_rtcdev
+  devm_kasprintf
+  ns_to_timespec64
+  orderly_poweroff
+  power_supply_set_property
+  regulator_force_disable
+  regulator_set_current_limit
+  thermal_zone_get_temp
+
+# required by clk-sprd.ko
+  clk_hw_get_num_parents
+  clk_hw_get_parent
+  clk_hw_is_enabled
+  __clk_mux_determine_rate
+  devm_clk_hw_register
+  devm_of_clk_add_hw_provider
+  divider_get_val
+  divider_recalc_rate
+  divider_round_rate_parent
+  of_clk_hw_onecell_get
+
+# required by cpufreq_userspace.ko
+  __cpufreq_driver_target
+  cpufreq_register_governor
+  cpufreq_unregister_governor
+
+# required by dwc3-haps.ko
+  pcim_enable_device
+
+# required by dwc3-of-simple.ko
+  clk_bulk_get_all
+  clk_bulk_put_all
+  of_reset_control_array_get
+  reset_control_put
+  reset_control_reset
+
+# required by dwc3-qcom.ko
+  devm_extcon_register_notifier
+  devm_reset_control_array_get
+
+# required by exfat.ko
+  __blockdev_direct_IO
+  block_write_full_page
+  __bread_gfp
+  __brelse
+  cont_write_begin
+  current_time
+  d_find_alias
+  d_instantiate
+  d_move
+  drop_nlink
+  filemap_fdatawait_range
+  filemap_fdatawrite_range
+  full_name_hash
+  generic_block_bmap
+  generic_cont_expand_simple
+  generic_fh_to_dentry
+  generic_fh_to_parent
+  generic_file_fsync
+  generic_file_mmap
+  generic_file_read_iter
+  generic_file_splice_read
+  generic_file_write_iter
+  generic_write_end
+  __getblk_gfp
+  ilookup
+  inc_nlink
+  in_group_p
+  __insert_inode_hash
+  invalidate_inode_buffers
+  iunique
+  kvfree
+  kvmalloc_node
+  load_nls
+  __lock_buffer
+  mark_buffer_dirty
+  __mark_inode_dirty
+  match_int
+  match_octal
+  mktime64
+  mpage_readpage
+  mpage_readpages
+  mpage_writepages
+  __remove_inode_hash
+  setattr_copy
+  strscpy
+  sync_blockdev
+  sync_dirty_buffer
+  sync_mapping_buffers
+  time64_to_tm
+  touch_buffer
+  truncate_pagecache
+  unload_nls
+  unlock_buffer
+  utf16s_to_utf8s
+  utf8s_to_utf16s
+  write_inode_now
+
+# required by fan53555.ko
+  regulator_set_voltage_time_sel
+
+# required by focaltech_ats.ko
+  devm_input_allocate_device
+  devm_regulator_put
+  i2c_new_probed_device
+  i2c_transfer
+  input_mt_init_slots
+  input_mt_report_slot_state
+  input_set_abs_params
+  input_set_capability
+  kobject_put
+  of_find_i2c_adapter_by_node
+  of_property_read_variable_u8_array
+  request_firmware_nowait
+
+# required by gpio-eic-sprd.ko
+  gpiochip_find
+
+# required by gpio-pmic-eic-sprd.ko
+  handle_nested_irq
+
+# required by gpio-sprd.ko
+  __platform_driver_probe
+
+# required by i2c-sprd.ko
+  i2c_add_numbered_adapter
+  i2c_del_adapter
+
+# required by img_mem.ko
+  dma_direct_map_sg
+  dma_direct_sync_sg_for_cpu
+  dma_direct_sync_sg_for_device
+  dma_direct_unmap_sg
+  idr_get_next
+  sg_alloc_table
+  sg_free_table
+  vsprintf
+
+# required by ims_bridge.ko
+  in4_pton
+  in6_pton
+  inet_select_addr
+  ip6_local_out
+  ip6_route_output_flags
+  ip_local_out
+  ipv6_dev_get_saddr
+  mempool_alloc
+  mempool_alloc_slab
+  mempool_create
+  mempool_destroy
+  mempool_free
+  mempool_free_slab
+  nf_ct_get_tuplepr
+  nf_ct_invert_tuple
+  param_ops_int
+  prandom_u32
+  proc_create_net_data
+  __pskb_pull_tail
+  skb_checksum_help
+  strim
+  xfrm_lookup
+  completion_done
+
+# required by kfifo_buf.ko
+  devres_add
+  devres_alloc_node
+  devres_free
+  devres_release
+  iio_buffer_init
+  iio_buffer_put
+  __kfifo_to_user
+
+# required by leds-sc27xx-bltc.ko
+  devm_led_classdev_register_ext
+
+# required by mali_gondul.ko
+  anon_inode_getfd
+  __bitmap_weight
+  clear_page
+  devfreq_add_device
+  devfreq_remove_device
+  devfreq_resume_device
+  devfreq_suspend_device
+  dev_pm_opp_disable
+  dev_pm_opp_find_freq_floor
+  dev_pm_opp_put_regulators
+  dev_pm_opp_set_regulators
+  dma_fence_get_status
+  dma_fence_remove_callback
+  downgrade_write
+  down_trylock
+  get_user_pages
+  get_user_pages_fast
+  get_user_pages_remote
+  hrtimer_active
+  hrtimer_forward
+  iomem_resource
+  kstrtobool_from_user
+  memstart_addr
+  __mmdrop
+  nonseekable_open
+  of_property_read_variable_u64_array
+  param_ops_byte
+  rb_erase
+  rb_first
+  rb_insert_color
+  rb_next
+  rb_prev
+  rb_replace_node
+  regulator_get_optional
+  __release_region
+  remap_vmalloc_range
+  __request_region
+  reservation_ww_class
+  seq_open
+  __seq_open_private
+  seq_release_private
+  seq_write
+  set_page_dirty_lock
+  strcspn
+  system_highpri_wq
+  vmalloc_user
+  ww_mutex_lock
+  ww_mutex_unlock
+
+# required by microarray_fp.ko
+  cdev_alloc
+
+# required by mmc_hsq.ko
+  mmc_cqe_request_done
+  mmc_send_tuning
+
+# required by musb_hdrc.ko
+  device_wakeup_enable
+  dev_printk
+  flush_delayed_work
+  param_ops_bool
+  usb_add_hcd
+  usb_create_hcd
+  usb_ep_set_halt
+  usb_hcd_check_unlink_urb
+  usb_hcd_giveback_urb
+  usb_hcd_link_urb_to_ep
+  usb_hcd_map_urb_for_dma
+  usb_hcd_poll_rh_status
+  usb_hcd_resume_root_hub
+  usb_hcd_unlink_urb_from_ep
+  usb_hcd_unmap_urb_for_dma
+  usb_otg_state_string
+  usb_put_hcd
+  usb_remove_hcd
+
+# required by musb_sprd.ko
+  usb_ep_disable
+  usb_speed_string
+
+# required by pcie-sprd.ko
+  device_get_next_child_node
+  devm_gpiod_get_index
+  devm_ioremap
+  dw_pcie_host_init
+  dw_pcie_msi_init
+  dw_pcie_setup_rc
+  dw_pcie_wait_for_link
+  fwnode_handle_put
+  gpiod_get_value
+  of_fwnode_ops
+  pci_assign_unassigned_bus_resources
+  pci_bus_add_devices
+  pci_check_and_mask_intx
+  pci_check_and_unmask_intx
+  pci_clear_master
+  pcie_bus_configure_settings
+  pci_enable_msi
+  pci_intx
+  pci_ioremap_bar
+  pci_ioremap_wc_bar
+  pci_lock_rescan_remove
+  pci_reset_function
+  pci_scan_child_bus
+  pci_stop_and_remove_bus_device
+  pci_unlock_rescan_remove
+  sdio_claim_irq
+  sdio_f0_readb
+  sdio_f0_writeb
+  sdio_get_host_pm_caps
+  sdio_readw
+  sdio_release_irq
+  sdio_set_host_pm_flags
+  sdio_writew
+
+# required by phy-sprd-sharkl3.ko
+  usb_add_phy_dev
+  usb_phy_set_charger_state
+  usb_remove_phy
+
+# required by pinctrl-sprd.ko
+  devm_platform_ioremap_resource
+  of_property_read_string_helper
+  pinconf_generic_parse_dt_config
+  pinctrl_dev_get_drvdata
+  pinctrl_register
+  pinctrl_unregister
+  pinctrl_utils_add_map_configs
+  pinctrl_utils_add_map_mux
+  pinctrl_utils_free_map
+  pinctrl_utils_reserve_map
+  pin_get_name
+
+# required by pvrsrvkm.ko
+  autoremove_wake_function
+  bpf_trace_run6
+  bpf_trace_run7
+  bpf_trace_run8
+  cache_line_size
+  devfreq_cooling_unregister
+  devfreq_recommended_opp
+  devfreq_register_opp_notifier
+  devfreq_unregister_opp_notifier
+  devm_devfreq_add_device
+  devm_devfreq_remove_device
+  dev_pm_opp_add
+  dev_pm_opp_find_freq_ceil
+  dev_pm_opp_get_freq
+  dev_pm_opp_get_opp_count
+  dev_pm_opp_get_voltage
+  dev_pm_opp_of_add_table
+  dev_pm_opp_of_register_em
+  dev_pm_opp_of_remove_table
+  dev_pm_opp_put
+  dma_buf_attach
+  dma_buf_begin_cpu_access
+  dma_buf_detach
+  dma_buf_end_cpu_access
+  dma_buf_export
+  dma_buf_fd
+  dma_buf_get
+  dma_buf_kmap
+  dma_buf_kunmap
+  dma_buf_map_attachment
+  dma_buf_mmap
+  dma_buf_put
+  dma_buf_unmap_attachment
+  dma_buf_vmap
+  dma_buf_vunmap
+  dma_fence_add_callback
+  dma_fence_array_ops
+  dma_fence_context_alloc
+  dma_fence_default_wait
+  dma_fence_enable_sw_signaling
+  dma_fence_free
+  dma_fence_init
+  dma_fence_signal
+  down_read
+  down_write
+  drm_dev_unregister
+  fd_install
+  fget
+  find_vma
+  find_vpid
+  __get_task_comm
+  get_unused_fd_flags
+  idr_preload
+  idr_replace
+  ion_query_heaps_kernel
+  kill_pid
+  ksize
+  kthread_freezable_should_stop
+  ktime_get_raw_ts64
+  memcmp
+  mutex_is_locked
+  of_devfreq_cooling_register_power
+  of_hwspin_lock_get_id_byname
+  of_modalias_node
+  on_each_cpu
+  prepare_to_wait
+  proc_remove
+  put_unused_fd
+  _raw_read_lock_bh
+  _raw_read_unlock_bh
+  _raw_write_lock_bh
+  _raw_write_unlock_bh
+  register_shrinker
+  request_firmware
+  seq_vprintf
+  set_freezable
+  si_meminfo
+  split_page
+  strncat
+  strsep
+  sync_file_create
+  sync_file_get_fence
+  __task_pid_nr_ns
+  trace_set_clr_event
+  unmap_mapping_range
+  unregister_shrinker
+  up_read
+  up_write
+  __usecs_to_jiffies
+  vmf_insert_mixed
+  vm_get_page_prot
+  vm_insert_page
+  vsscanf
+  vzalloc
+
+# required by pwm-sprd.ko
+  pwmchip_add
+  pwmchip_remove
+
+# required by pwm_bl.ko
+  backlight_device_register
+  backlight_device_unregister
+  devm_pwm_get
+  gpiod_get_direction
+  int_pow
+  pwm_free
+  pwm_request
+
+# required by roles.ko
+  fwnode_connection_find_match
+  fwnode_get_parent
+
+# required by rtc-sc27xx.ko
+  devm_rtc_allocate_device
+  rtc_ktime_to_tm
+  __rtc_register_device
+  rtc_time64_to_tm
+  rtc_tm_to_time64
+  rtc_update_irq
+
+# required by sc2703-bl.ko
+  of_pwm_get
+  pwm_apply_state
+
+# required by sc2703_disp.ko
+  mfd_add_devices
+
+# required by sc2703_regulator.ko
+  regulator_notifier_call_chain
+
+# required by sc27xx_adc.ko
+  devm_iio_device_alloc
+  hwspin_lock_free
+  hwspin_lock_request_specific
+  __hwspin_lock_timeout
+  __hwspin_unlock
+  of_hwspin_lock_get_id
+
+# required by sc27xx_fuel_gauge.ko
+  devm_iio_channel_get
+  gpiod_get_value_cansleep
+  iio_read_channel_processed
+  power_supply_find_ocv2cap_table
+  power_supply_ocv2cap_simple
+  power_supply_put_battery_info
+  power_supply_temp2resist_simple
+
+# required by sc27xx_pd.ko
+  device_get_named_child_node
+  devm_extcon_register_notifier_all
+  devm_regulator_get_optional
+
+# required by sc27xx_typec.ko
+  devm_extcon_dev_allocate
+  devm_extcon_dev_register
+  extcon_set_state_sync
+  typec_register_partner
+  typec_register_port
+  typec_set_data_role
+  typec_set_pwr_opmode
+  typec_set_pwr_role
+  typec_set_vconn_role
+  typec_unregister_partner
+  typec_unregister_port
+
+# required by sc27xx-vibra.ko
+  input_ff_create_memless
+
+# required by sc9863a-clk.ko
+  device_get_match_data
+
+# required by sdhci-sprd.ko
+  clk_round_rate
+  mmc_free_host
+  mmc_of_parse
+  mmc_regulator_set_vqmmc
+  mmc_remove_host
+  mmc_request_done
+  __sdhci_add_host
+  sdhci_cleanup_host
+  sdhci_enable_clk
+  sdhci_enable_v4_mode
+  sdhci_pltfm_free
+  sdhci_pltfm_init
+  sdhci_request
+  sdhci_request_atomic
+  sdhci_reset
+  sdhci_runtime_resume_host
+  sdhci_runtime_suspend_host
+  sdhci_set_bus_width
+  sdhci_setup_host
+
+# required by sdiohal.ko
+  mmc_detect_change
+  mmc_set_data_timeout
+  mmc_wait_for_req
+  __put_page
+  sdio_claim_host
+  sdio_enable_func
+  sdio_memcpy_fromio
+  sdio_memcpy_toio
+  sdio_readb
+  sdio_readl
+  sdio_readsb
+  sdio_register_driver
+  sdio_release_host
+  sdio_set_block_size
+  sdio_unregister_driver
+  sdio_writeb
+  sdio_writel
+  sdio_writesb
+  __trace_bprintk
+
+# required by seth.ko
+  napi_complete_done
+  napi_disable
+  __napi_schedule
+  napi_schedule_prep
+  netif_napi_add
+  netif_napi_del
+  netif_receive_skb
+  register_netdev
+  unregister_netdev
+
+# required by sfp_core.ko
+  csum_tcpudp_nofold
+  dev_get_by_index_rcu
+  ip_send_check
+  ipv6_ext_hdr
+  ipv6_find_hdr
+  kstrtouint_from_user
+  __local_bh_enable_ip
+  nf_conntrack_destroy
+  nf_conntrack_find_get
+  of_dma_configure
+  proc_dointvec
+  register_netdevice_notifier
+  register_net_sysctl
+  rt6_lookup
+  seq_open_private
+  seq_release
+  skb_copy_bits
+  unregister_netdevice_notifier
+
+# required by shubcore.ko
+  iio_alloc_pollfunc
+  iio_dealloc_pollfunc
+  iio_device_alloc
+  iio_device_attach_buffer
+  iio_device_free
+  iio_device_unregister
+  iio_pollfunc_store_time
+  iio_push_to_buffers
+  iio_trigger_alloc
+  iio_triggered_buffer_postenable
+  iio_triggered_buffer_predisable
+  iio_trigger_free
+  iio_trigger_notify_done
+  iio_trigger_poll
+  __iio_trigger_register
+  iio_trigger_unregister
+  ktime_get_with_offset
+  param_array_ops
+  unregister_pm_notifier
+
+# required by sipa_core.ko
+  free_pages
+  memremap
+  memunmap
+  pm_wakeup_dev_event
+  skb_dequeue
+  skb_queue_tail
+
+# required by sipa_sys_pd.ko
+  kstrdup
+  of_genpd_add_provider_simple
+  pm_genpd_init
+  pm_genpd_remove
+
+# required by sipc_core.ko
+  gen_pool_destroy
+  mbox_chan_received_data
+  mbox_chan_txdone
+  mbox_client_txdone
+  mbox_controller_register
+  mbox_controller_unregister
+  mbox_free_channel
+  mbox_request_channel
+  mbox_request_channel_byname
+  mbox_send_message
+  register_syscore_ops
+
+# required by sipx.ko
+  hrtimer_cancel
+  hrtimer_init
+  hrtimer_start_range_ns
+  hrtimer_try_to_cancel
+
+# required by snd-soc-aw881xx.ko
+  i2c_smbus_write_byte
+
+# required by snd-soc-akm4377.ko
+  regcache_mark_dirty
+  regcache_sync
+  snd_soc_get_volsw
+  snd_soc_put_volsw
+
+# required by snd-soc-sprd-audio-dma.ko
+  dmam_alloc_attrs
+  dmam_free_coherent
+  dma_release_channel
+  __memset_io
+  of_dma_request_slave_channel
+  snd_pcm_format_physical_width
+  snd_pcm_hw_constraint_integer
+  snd_pcm_hw_constraint_step
+  snd_soc_rtdcom_lookup
+  snd_soc_set_runtime_hwparams
+  vmap
+
+# required by snd-soc-sprd-card.ko
+  devm_gpio_request_one
+  devm_snd_soc_register_card
+  gpio_request_one
+  snd_interval_refine
+  snd_soc_of_get_dai_name
+  snd_soc_of_parse_audio_routing
+  snd_soc_of_parse_audio_simple_widgets
+  snd_soc_of_parse_card_name
+  snd_soc_of_parse_daifmt
+  snd_soc_of_parse_tdm_slot
+
+# required by snd-soc-sprd-codec-sc2721-power.ko
+  regulator_register
+  regulator_unregister
+
+# required by snd-soc-sprd-codec-sc2721.ko
+  dapm_regulator_event
+  gpiod_set_debounce
+  iio_channel_get
+  iio_read_channel_raw
+  iio_write_channel_attribute
+  irq_to_desc
+  power_supply_register
+  power_supply_unregister
+  regulator_get
+  regulator_get_mode
+  regulator_is_enabled
+  regulator_put
+  regulator_set_mode
+  regulator_set_voltage
+  snd_ctl_find_id
+  snd_jack_set_key
+  snd_pcm_rate_to_rate_bit
+  snd_soc_card_jack_new
+  snd_soc_component_read32
+  snd_soc_component_update_bits
+  snd_soc_component_write
+  snd_soc_dapm_force_enable_pin
+  snd_soc_dapm_get_enum_double
+  snd_soc_dapm_get_volsw
+  snd_soc_get_enum_double
+  snd_soc_jack_report
+  snd_soc_put_enum_double
+
+# required by snd-soc-sprd-platform.ko
+  devm_snd_soc_register_component
+  dma_request_slave_channel
+  of_reserved_mem_device_init_by_idx
+  snd_dma_alloc_pages
+  snd_dma_free_pages
+
+# required by snd-soc-sprd-vbc-r1p0v3.ko
+  snd_ctl_boolean_mono_info
+  snd_pcm_hw_constraint_list
+
+# required by snd-soc-tfa98xx.ko
+  crc32_le
+  device_create_bin_file
+  device_remove_bin_file
+  msleep_interruptible
+  snd_pcm_format_width
+  snd_pcm_hw_constraint_mask64
+  snd_soc_dapm_add_routes
+  snd_soc_dapm_new_controls
+
+# required by sprd-cpufreq-common.ko
+  dev_pm_opp_remove
+
+# required by sprd-cpufreqhw.ko
+  arch_set_freq_scale
+  cpufreq_generic_attr
+  cpufreq_generic_frequency_table_verify
+  cpufreq_generic_get
+  cpufreq_generic_suspend
+  cpufreq_register_driver
+  cpufreq_unregister_driver
+  dev_pm_opp_free_cpufreq_table
+  dev_pm_opp_init_cpufreq_table
+
+# required by sprd-drm.ko
+  adjust_managed_page_count
+  component_add
+  component_bind_all
+  component_del
+  component_master_add_with_match
+  component_master_del
+  component_match_add_release
+  component_unbind_all
+  devm_gpiod_get_optional
+  dma_get_sgtable_attrs
+  dma_mmap_attrs
+  dma_set_coherent_mask
+  drm_add_edid_modes
+  drm_atomic_helper_async_commit
+  drm_atomic_helper_check
+  drm_atomic_helper_cleanup_planes
+  drm_atomic_helper_commit
+  drm_atomic_helper_commit_cleanup_done
+  drm_atomic_helper_commit_hw_done
+  drm_atomic_helper_commit_modeset_disables
+  drm_atomic_helper_commit_modeset_enables
+  drm_atomic_helper_commit_planes
+  drm_atomic_helper_commit_tail
+  drm_atomic_helper_commit_tail_rpm
+  drm_atomic_helper_connector_destroy_state
+  drm_atomic_helper_connector_duplicate_state
+  drm_atomic_helper_connector_reset
+  drm_atomic_helper_crtc_destroy_state
+  drm_atomic_helper_crtc_duplicate_state
+  drm_atomic_helper_crtc_reset
+  drm_atomic_helper_disable_plane
+  drm_atomic_helper_page_flip
+  __drm_atomic_helper_plane_destroy_state
+  __drm_atomic_helper_plane_duplicate_state
+  __dynamic_dev_dbg
+  __dynamic_pr_debug
+  drm_atomic_helper_prepare_planes
+  drm_atomic_helper_resume
+  drm_atomic_helper_set_config
+  drm_atomic_helper_shutdown
+  drm_atomic_helper_suspend
+  drm_atomic_helper_swap_state
+  drm_atomic_helper_update_legacy_modeset_state
+  drm_atomic_helper_update_plane
+  drm_atomic_helper_wait_for_dependencies
+  drm_atomic_helper_wait_for_fences
+  drm_atomic_helper_wait_for_vblanks
+  drm_atomic_private_obj_fini
+  drm_atomic_private_obj_init
+  drm_atomic_set_crtc_for_connector
+  drm_atomic_set_fence_for_plane
+  drm_atomic_set_mode_for_crtc
+  drm_atomic_state_alloc
+  drm_atomic_state_clear
+  drm_atomic_state_default_clear
+  drm_atomic_state_default_release
+  __drm_atomic_state_free
+  drm_bridge_attach
+  drm_connector_attach_content_protection_property
+  drm_connector_attach_encoder
+  drm_connector_cleanup
+  drm_connector_init
+  drm_connector_unregister
+  drm_connector_update_edid_property
+  drm_crtc_cleanup
+  __drm_crtc_commit_free
+  drm_crtc_handle_vblank
+  drm_crtc_init_with_planes
+  drm_crtc_send_vblank_event
+  drm_crtc_vblank_off
+  drm_crtc_vblank_on
+  drm_detect_monitor_audio
+  drm_display_mode_from_videomode
+  drm_display_mode_to_videomode
+  drm_dp_aux_register
+  drm_dp_aux_unregister
+  drm_dp_calc_pbn_mode
+  drm_dp_channel_eq_ok
+  drm_dp_clock_recovery_ok
+  drm_dp_dpcd_read
+  drm_dp_dpcd_read_link_status
+  drm_dp_dpcd_write
+  drm_encoder_cleanup
+  drm_encoder_init
+  drm_format_info
+  drm_gem_cma_prime_get_sg_table
+  drm_gem_cma_prime_mmap
+  drm_gem_cma_prime_vmap
+  drm_gem_cma_prime_vunmap
+  drm_gem_cma_vm_ops
+  drm_gem_create_mmap_offset
+  drm_gem_fb_create
+  drm_gem_fb_get_obj
+  drm_gem_handle_create
+  drm_gem_mmap
+  drm_gem_mmap_obj
+  drm_gem_object_init
+  drm_gem_object_put_unlocked
+  drm_gem_object_release
+  drm_gem_prime_export
+  drm_gem_prime_fd_to_handle
+  drm_gem_prime_handle_to_fd
+  drm_gem_prime_import
+  drm_gem_vm_close
+  drm_get_edid
+  drm_hdcp_check_ksvs_revoked
+  drm_hdcp_update_content_protection
+  drm_helper_hpd_irq_event
+  drm_helper_probe_single_connector_modes
+  drm_kms_helper_poll_disable
+  drm_kms_helper_poll_enable
+  drm_kms_helper_poll_fini
+  drm_kms_helper_poll_init
+  drm_match_cea_mode
+  drm_mode_config_reset
+  drm_mode_create
+  drm_mode_crtc_set_gamma_size
+  drm_mode_destroy
+  drm_mode_duplicate
+  drm_mode_probed_add
+  drm_mode_vrefresh
+  drm_object_attach_property
+  drm_panel_add
+  drm_panel_attach
+  drm_panel_detach
+  drm_panel_disable
+  drm_panel_enable
+  drm_panel_get_modes
+  drm_panel_init
+  drm_panel_prepare
+  drm_panel_remove
+  drm_panel_unprepare
+  drm_plane_cleanup
+  drm_plane_create_alpha_property
+  drm_plane_create_blend_mode_property
+  drm_plane_create_rotation_property
+  drm_plane_create_zpos_immutable_property
+  drm_prime_gem_destroy
+  drm_property_create
+  drm_property_create_blob
+  drm_property_create_range
+  drm_put_dev
+  drm_universal_plane_init
+  drm_vblank_init
+  gpiod_direction_output
+  kstrtou8
+  mipi_dsi_attach
+  mipi_dsi_dcs_read
+  mipi_dsi_dcs_write_buffer
+  mipi_dsi_detach
+  mipi_dsi_driver_register_full
+  mipi_dsi_driver_unregister
+  mipi_dsi_generic_read
+  mipi_dsi_generic_write
+  mipi_dsi_host_register
+  mipi_dsi_host_unregister
+  mipi_dsi_set_maximum_return_packet_size
+  no_llseek
+  of_clk_get_by_name
+  of_drm_find_bridge
+  of_drm_find_panel
+  of_fdt_unflatten_tree
+  of_find_backlight_by_node
+  of_find_node_opts_by_path
+  of_get_drm_display_mode
+  of_graph_get_endpoint_by_regs
+  of_graph_get_remote_port_parent
+  of_reserved_mem_device_release
+  __platform_register_drivers
+  platform_unregister_drivers
+  regmap_get_reg_stride
+  regmap_get_val_bytes
+  try_wait_for_completion
+
+# required by spi-sprd.ko
+  dma_request_chan
+  spi_controller_suspend
+  spi_finalize_current_transfer
+
+# required by spi-sprd-adi.ko
+  unregister_restart_handler
+
+# required by sprd-dma.ko
+  dma_async_device_register
+  dma_async_device_unregister
+  dma_async_tx_descriptor_init
+  of_dma_controller_free
+  of_dma_controller_register
+  of_dma_simple_xlate
+
+# required by sprd-gsp.ko
+  __kthread_init_worker
+  kthread_queue_work
+  kthread_worker_fn
+
+# required by sprd-hwdvfs-sharkl3.ko
+  __i2c_transfer
+  rt_mutex_trylock
+
+# required by sprd_dedicate_thm.ko
+  devm_thermal_zone_of_sensor_register
+  system_power_efficient_wq
+
+# required by sprd_dvfs.ko
+  devfreq_add_governor
+  devfreq_remove_governor
+  devfreq_update_status
+  device_rename
+  update_devfreq
+
+# required by sprd_hwspinlock.ko
+  hwspin_lock_register
+  hwspin_lock_unregister
+
+# required by sprd_ipa.ko
+  skb_to_sgvec
+  irq_set_affinity_hint
+  napi_gro_receive
+
+# required by sprd-saudio.ko
+  snd_card_free
+
+# required by sprd-sc27xx-spi.ko
+  devm_regmap_add_irq_chip
+  regmap_irq_get_domain
+  spi_bus_type
+  __spi_register_driver
+  spi_sync
+
+# required by sprd_apb_busmonitor.ko
+  _dev_emerg
+
+# required by sprd_cproc.ko
+  of_get_parent
+
+# required by sprd_cpu_cooling.ko
+  cpu_down
+  cpufreq_get_policy
+  cpu_up
+  cpufreq_quick_get
+  dev_pm_opp_find_freq_exact
+  thermal_cooling_device_unregister
+  thermal_of_cooling_device_register
+
+# required by sprd-mailbox.ko
+  devm_mbox_controller_register
+
+# required by sprd_mcd.ko
+  gpiod_set_value_cansleep
+  kernel_power_off
+  register_restart_handler
+  unregister_reboot_notifier
+
+# required by sprd_pcie_ep_device.ko
+  pci_enable_device
+  pci_request_regions
+  pci_restore_state
+  pci_save_state
+  pci_set_power_state
+
+# required by sprd_pm_domain.ko
+  kfree_const
+  kstrdup_const
+  of_genpd_add_subdomain
+
+# required by sprd_powerdebug.ko
+  cpu_pm_register_notifier
+  cpu_pm_unregister_notifier
+  pm_print_active_wakeup_sources
+  syscon_node_to_regmap
+
+# required by sprd_sdio_fm.ko
+  vfs_llseek
+
+# required by sprd_soc_thm.ko
+  thermal_zone_device_unregister
+  thermal_zone_device_update
+  thermal_zone_of_sensor_register
+
+# required by sprd_vdsp.ko
+  bsearch
+  devm_kstrdup
+  __memcpy_toio
+  of_match_device
+  of_n_addr_cells
+  of_n_size_cells
+  of_translate_address
+  sort
+
+# required by sprd_wdt.ko
+  devm_watchdog_register_device
+  watchdog_init_timeout
+
+# required by sprdbt_sipc_tty.ko
+  tty_schedule_flip
+
+# required by sprdwl_ng.ko
+  bcmp
+  build_skb
+  __cfg80211_alloc_event_skb
+  __cfg80211_alloc_reply_skb
+  cfg80211_chandef_create
+  cfg80211_ch_switch_notify
+  cfg80211_connect_done
+  cfg80211_cqm_rssi_notify
+  cfg80211_del_sta_sinfo
+  cfg80211_disconnected
+  cfg80211_find_elem_match
+  cfg80211_get_bss
+  cfg80211_ibss_joined
+  cfg80211_inform_bss_data
+  cfg80211_mgmt_tx_status
+  cfg80211_michael_mic_failure
+  cfg80211_new_sta
+  cfg80211_put_bss
+  cfg80211_ready_on_channel
+  cfg80211_remain_on_channel_expired
+  cfg80211_roamed
+  cfg80211_rx_mgmt
+  cfg80211_rx_unprot_mlme_mgmt
+  cfg80211_scan_done
+  cfg80211_sched_scan_results
+  __cfg80211_send_event_skb
+  cfg80211_tdls_oper_request
+  cfg80211_unlink_bss
+  cfg80211_unregister_wdev
+  cfg80211_vendor_cmd_reply
+  console_printk
+  consume_skb
+  _ctype
+  dev_get_by_index
+  down_timeout
+  freq_reg_info
+  genlmsg_put
+  jiffies_to_usecs
+  kfree_skb_list
+  netdev_alloc_frag
+  netdev_err
+  netdev_info
+  netdev_warn
+  netlink_unicast
+  nla_memcpy
+  __nla_parse
+  nla_put
+  nla_put_64bit
+  nla_put_nohdr
+  printk_timed_ratelimit
+  register_inet6addr_notifier
+  register_inetaddr_notifier
+  register_netdevice
+  regulatory_hint
+  rtnl_lock
+  rtnl_unlock
+  simple_open
+  skb_queue_purge
+  skb_unlink
+  synchronize_rcu
+  unregister_inet6addr_notifier
+  unregister_inetaddr_notifier
+  unregister_netdevice_queue
+  wiphy_free
+  wiphy_new_nm
+  wiphy_register
+  wiphy_unregister
+
+# required by sunwave_fp.ko
+  input_unregister_device
+
+# required by tcpm.ko
+  fwnode_property_read_u32_array
+  mod_delayed_work_on
+  usb_debug_root
+
+# required by trusty.ko
+  _copy_from_iter
+  _copy_to_iter
+  __cpuhp_remove_state
+  __cpuhp_setup_state
+  __cpuhp_state_add_instance
+  __cpuhp_state_remove_instance
+  device_for_each_child
+  disable_percpu_irq
+  enable_percpu_irq
+  free_percpu_irq
+  irq_create_of_mapping
+  panic_notifier_list
+  register_virtio_device
+  register_virtio_driver
+  __request_percpu_irq
+  unregister_virtio_device
+  unregister_virtio_driver
+  virtqueue_add_inbuf
+  virtqueue_add_outbuf
+  virtqueue_detach_unused_buf
+  virtqueue_get_buf
+  virtqueue_get_vring_size
+  virtqueue_kick
+  virtqueue_kick_prepare
+  virtqueue_notify
+  vring_del_virtqueue
+  vring_interrupt
+  vring_new_virtqueue
+  wait_woken
+  woken_wake_function
+
+# required by typec.ko
+  blocking_notifier_call_chain
+  __class_register
+  class_unregister
+  device_find_child
+  fwnode_property_read_u16_array
+  get_device
+  kobject_uevent
+  match_string
+
+# required by usb-storage.ko
+  blk_queue_bounce_limit
+  blk_queue_max_hw_sectors
+  blk_queue_update_dma_alignment
+  _dev_notice
+  param_ops_string
+  schedule_timeout_uninterruptible
+  scsi_add_host_with_dma
+  scsi_eh_prep_cmnd
+  scsi_eh_restore_cmnd
+  scsi_get_host_dev
+  scsi_host_alloc
+  scsi_host_put
+  scsi_is_host_device
+  scsi_normalize_sense
+  scsi_remove_host
+  scsi_report_bus_reset
+  scsi_report_device_reset
+  scsi_scan_host
+  scsi_sense_desc_find
+  sg_miter_skip
+  simple_strtoul
+  usb_autopm_put_interface_no_suspend
+  usb_lock_device_for_reset
+  usb_reset_device
+  usb_reset_endpoint
+  usb_sg_cancel
+  usb_sg_init
+  usb_sg_wait
+  usb_unlink_urb
+
+# required by usb_f_mtp.ko
+  usb_os_desc_prepare_interf_dir
+  usb_string_id
+  config_group_init_type_name
+
+# required by usbserial.ko
+  device_del
+  driver_attach
+  handle_sysrq
+  tty_hangup
+  tty_ldisc_deref
+  tty_ldisc_ref
+  tty_termios_copy_hw
+  usb_disabled
+  usb_get_dev
+  usb_match_id
+  usb_match_one_id
+  usb_poison_urb
+  usb_put_dev
+  usb_show_dynids
+  usb_store_new_id
+  usb_unpoison_urb
+
+# required by vha.ko
+  clk_bulk_get
+  device_wakeup_disable
+  devm_iounmap
+  __ndelay
+  param_ops_long
+  param_ops_ulong
+  pm_relax
+  pm_stay_awake
+
+# required by virtio_crypto.ko
+  cpu_bit_bitmap
+  cpus_read_lock
+  cpus_read_unlock
+  cpu_topology
+  crypto_ablkcipher_type
+  crypto_engine_alloc_init
+  crypto_engine_exit
+  crypto_engine_start
+  crypto_finalize_ablkcipher_request
+  crypto_register_alg
+  crypto_transfer_ablkcipher_request_to_engine
+  crypto_unregister_alg
+  scatterwalk_map_and_copy
+  sg_init_one
+  sg_nents_for_len
+
+# required by wcn_bsp.ko
+  gpiod_set_value
+  memdup_user
+  pci_disable_device
+  pci_disable_msi
+  pci_disable_msix
+  pcie_capability_read_dword
+  pcie_capability_read_word
+  pci_enable_msix_range
+  pci_enable_wake
+  pci_find_ext_capability
+  pci_load_and_free_saved_state
+  pci_msi_vec_count
+  pci_read_config_byte
+  pci_read_config_dword
+  pci_release_regions
+  pci_store_saved_state
+  pci_write_config_byte
+  pci_write_config_dword
+  register_chrdev_region
+  request_firmware_direct
+
+# required by rc-core.ko
+  input_scancode_to_scalar
+  kobject_get_path
+  led_trigger_register_simple
+  led_trigger_unregister_simple
+  __module_get
+  nsecs_to_jiffies
+
+# required by spi-bitbang.ko
+  spi_register_controller
+  spi_unregister_controller
+
+# required by sprd_memdisk.ko
+  __alloc_disk_node
+  blk_cleanup_queue
+  blk_mq_end_request
+  blk_mq_init_sq_queue
+  blk_mq_start_request
+  blk_queue_logical_block_size
+  del_gendisk
+  device_add_disk
+  put_disk
+  register_blkdev
+  unregister_blkdev
+
+# required by ppp_async.ko
+  crc_ccitt_table
+  n_tty_ioctl_helper
+  ppp_channel_index
+  ppp_input_error
+  ppp_output_wakeup
+  ppp_register_channel
+  ppp_unit_number
+  ppp_unregister_channel
+  _raw_write_lock_irq
+  _raw_write_unlock_irq
+  skb_pull
+  start_tty
+  stop_tty
+  tty_mode_ioctl
+  tty_register_ldisc
+  tty_unregister_ldisc
+  tty_unthrottle
+
+# required by cls_fw.ko
+  __dev_get_by_index
+  __dev_get_by_name
+  kfree_call_rcu
+  nla_strlcpy
+  __put_net
+  register_tcf_proto_ops
+  rtnl_is_locked
+  tcf_action_exec
+  tcf_exts_destroy
+  tcf_exts_dump
+  tcf_exts_dump_stats
+  tcf_exts_validate
+  tcf_queue_work
+  unregister_tcf_proto_ops
+
+# required by ipcomp.ko
+  ipcomp_destroy
+  ipcomp_init_state
+  ipcomp_input
+  ipcomp_output
+  xfrm_init_state
+  xfrm_state_alloc
+  xfrm_state_insert
+
+# required by xcbc.ko
+  crypto_alloc_instance
+  crypto_attr_alg2
+  crypto_check_attr_type
+  crypto_init_spawn
+  crypto_mod_put
+  crypto_register_template
+  crypto_spawn_tfm
+  crypto_unregister_template
+  shash_free_instance
+  shash_register_instance
+
+# required by aes-ce-ccm.ko
+  ce_aes_expandkey
+
+# required by xt_TEE.ko
+  static_key_slow_dec
+  static_key_slow_inc
+  xt_tee_enabled
+
+# required by ir-kbd-i2c.ko
+  i2c_new_dummy_device
+  i2c_unregister_device
+
+# required by ledtrig-pattern.ko
+  led_get_default_pattern
+  led_set_brightness
+  led_trigger_register
+  led_trigger_unregister
+
+# required by virtio_crypto.ko
+  virtio_break_device
+  virtqueue_add_sgs
+  virtqueue_disable_cb
+  virtqueue_enable_cb
+  virtqueue_is_broken
+
+# required by dns_resolver.ko
+  generic_key_instantiate
+  key_invalidate
+  key_put
+  key_revoke
+  keyring_alloc
+  key_validate
+  kmemdup_nul
+  memchr
+  prepare_kernel_cred
+  register_key_type
+  request_key_tag
+  unregister_key_type
+  user_destroy
+  user_read
+  user_revoke
+
+# required by aes-neon-blk.ko
+  crypto_aes_inv_sbox
+  crypto_aes_sbox
+  crypto_alloc_shash
+  crypto_register_skciphers
+  crypto_shash_digest
+  crypto_unregister_skciphers
+  scatterwalk_ffwd
+  simd_skcipher_create_compat
+  simd_skcipher_free
+
+# required by ghash-ce.ko
+  gf128mul_lle
+
+# required by ip6t_NPT.ko
+  icmpv6_send
+
+# required by pppoe.ko
+  _copy_from_iter_full
+  datagram_poll
+  dev_add_pack
+  dev_get_by_name_rcu
+  dev_remove_pack
+  lock_sock_nested
+  pppox_compat_ioctl
+  pppox_ioctl
+  pppox_unbind_sock
+  ppp_register_net_channel
+  proto_register
+  proto_unregister
+  pskb_trim_rcsum_slow
+  register_pernet_device
+  register_pppox_proto
+  release_sock
+  sk_alloc
+  skb_copy_datagram_iter
+  skb_pull_rcsum
+  skb_recv_datagram
+  __sk_receive_skb
+  sock_init_data
+  sock_no_accept
+  sock_no_bind
+  sock_no_getsockopt
+  sock_no_listen
+  sock_no_mmap
+  sock_no_setsockopt
+  sock_no_shutdown
+  sock_no_socketpair
+  sock_queue_rcv_skb
+  sock_wmalloc
+  unregister_pernet_device
+  unregister_pppox_proto
+
+# required by sha1-ce.ko
+  crypto_sha1_finup
+  crypto_sha1_update
+
+# required by ah6.ko
+  ip6_redirect
+  ip6_update_pmtu
+  net_ratelimit
+  xfrm6_find_1stfragopt
+  xfrm6_protocol_deregister
+  xfrm6_protocol_register
+  xfrm6_rcv
+
+# required by raw_diag.ko
+  inet_diag_bc_sk
+  inet_diag_register
+  inet_diag_unregister
+  inet_sk_diag_fill
+  netlink_net_capable
+  raw_v4_hashinfo
+  __raw_v4_lookup
+  raw_v6_hashinfo
+  __raw_v6_lookup
+  sock_diag_destroy
+
+# required by xt_addrtype.ko
+  inet_dev_addr_type
+  __ipv6_addr_type
+  ipv6_chk_addr
+
+# required by sprd_thermal.ko
+  devm_thermal_zone_of_sensor_unregister
+
+# required by arc4.ko
+  arc4_crypt
+  arc4_setkey
+  crypto_register_skcipher
+  crypto_unregister_skcipher
+
+# required by ip6table_security.ko
+  xt_hook_ops_alloc
+
+# required by xfrm4_tunnel.ko
+  xfrm4_tunnel_deregister
+  xfrm4_tunnel_register
+
+# required by ppp_mppe.ko
+  crypto_has_ahash
+  crypto_shash_final
+  crypto_shash_update
+
+# required by pptp.ko
+  find_next_zero_bit
+  gre_add_protocol
+  gre_del_protocol
+  __ip_select_ident
+  security_sk_classify_flow
+  skb_set_owner_w
+  sk_setup_caps
+  sock_no_recvmsg
+  sock_no_sendmsg
+
+# required by gtco.ko
+  __usb_get_extra_descriptor
+
+# required by l2tp_ppp.ko
+  l2tp_session_create
+  l2tp_session_delete
+  l2tp_session_free
+  l2tp_session_get_nth
+  l2tp_session_register
+  l2tp_session_set_header_len
+  l2tp_tunnel_create
+  l2tp_tunnel_delete
+  l2tp_tunnel_free
+  l2tp_tunnel_get
+  l2tp_tunnel_get_nth
+  l2tp_tunnel_get_session
+  l2tp_tunnel_register
+  l2tp_udp_encap_recv
+  l2tp_xmit_skb
+  ppp_dev_name
+
+# required by ppp_generic.ko
+  arch_bpf_jit_check_func
+  bpf_prog_create
+  bpf_prog_destroy
+  bpf_stats_enabled_key
+  iov_iter_init
+  netdev_printk
+  netif_rx
+  ns_capable
+  rtnl_link_register
+  rtnl_link_unregister
+  skb_queue_head
+  skb_scrub_packet
+  slhc_compress
+  slhc_free
+  slhc_init
+  slhc_remember
+  slhc_toss
+  slhc_uncompress
+  unregister_netdevice_many
+
+# required by pppox.ko
+  sock_register
+  sock_unregister
+
+# required by ppp_deflate.ko
+  zlib_deflate
+  zlib_deflateEnd
+  zlib_deflateInit2
+  zlib_deflateReset
+  zlib_deflate_workspacesize
+  zlib_inflate
+  zlib_inflateEnd
+  zlib_inflateIncomp
+  zlib_inflateInit2
+  zlib_inflateReset
+  zlib_inflate_workspacesize
+
+# required by sprd_cpp.ko
+  clk_get_parent
+  of_iomap
+
+# required by sprd_camera.ko
+  ion_alloc
+  ion_free
+  ktime_get_ts64
+  ns_to_timeval
+  of_irq_to_resource
+  _raw_spin_trylock
+  regulator_get_linear_step
+
+# required by trusty-pm.ko
+  ktime_get_boot_fast_ns
+  unregister_syscore_ops
+
+# required by ufs-sprd.ko
+  ufshcd_dme_set_attr
+  ufshcd_get_local_unipro_ver
+  ufshcd_pltfrm_init
+  ufshcd_pltfrm_resume
+  ufshcd_pltfrm_runtime_idle
+  ufshcd_pltfrm_runtime_resume
+  ufshcd_pltfrm_runtime_suspend
+  ufshcd_pltfrm_shutdown
+  ufshcd_pltfrm_suspend
+  ufshcd_remove
+
+# required by sprd_sip_svc.ko
+  __arm_smccc_smc
+
+# required by mali_gondul.ko
+  __arch_clear_user
+  bpf_trace_run5
+  ktime_get_raw
+  of_machine_is_compatible
+  _totalram_pages
+  trace_output_call
+  __tracepoint_gpu_mem_total
+  trace_print_array_seq
+  vmf_insert_pfn_prot
+
+# required by sprd_ion.ko
+  ion_buffer_zero
+  __ion_device_add_heap
+  memset32
+  of_platform_device_create
+  __sg_page_iter_next
+  __sg_page_iter_start
+
+# required by snd-soc-sprd-codec-sc2730.ko
+  dapm_kcontrol_get_value
+  __kfifo_init
+  __kfifo_from_user_r
+  __kfifo_to_user_r
+  snd_pcm_rate_bit_to_rate
+  snd_soc_bytes_info_ext
+  snd_soc_new_compress
+
+# cpufreq_interactive.ko
+  add_timer_on
+  cpufreq_register_notifier
+  cpufreq_table_index_unsorted
+  cpufreq_unregister_notifier
+  down_read_trylock
+  get_cpu_idle_time
+  irq_work_queue
+  kobject_init_and_add
+  sched_setscheduler_nocheck
+  strpbrk
+
+# required by sprd_wdf.ko
+  kstrtoull_from_user
+  smpboot_register_percpu_thread
diff --git a/android/abi_gki_aarch64_virtual_device b/android/abi_gki_aarch64_virtual_device
new file mode 100644
index 0000000..8d6ee0c
--- /dev/null
+++ b/android/abi_gki_aarch64_virtual_device
@@ -0,0 +1,1168 @@
+[abi_symbol_list]
+# commonly used symbols
+  __alloc_disk_node
+  alloc_etherdev_mqs
+  __alloc_pages_nodemask
+  __alloc_skb
+  alloc_workqueue
+  __arch_copy_from_user
+  __arch_copy_to_user
+  arm64_const_caps_ready
+  bcmp
+  bio_add_page
+  bio_alloc_bioset
+  bio_associate_blkg
+  bio_endio
+  bio_put
+  blk_alloc_queue
+  blk_cleanup_queue
+  blk_queue_flag_clear
+  blk_queue_flag_set
+  blk_queue_io_min
+  blk_queue_io_opt
+  blk_queue_logical_block_size
+  blk_queue_make_request
+  blk_queue_max_discard_sectors
+  blk_queue_max_write_zeroes_sectors
+  blk_queue_physical_block_size
+  blk_queue_write_cache
+  bpf_trace_run1
+  bpf_trace_run2
+  bpf_trace_run3
+  bpf_trace_run4
+  bus_register
+  bus_unregister
+  cancel_delayed_work_sync
+  cancel_work_sync
+  capable
+  cfg80211_inform_bss_data
+  cfg80211_put_bss
+  __cfi_slowpath
+  __check_object_size
+  __class_create
+  class_destroy
+  complete
+  __const_udelay
+  consume_skb
+  __cpuhp_remove_state
+  __cpuhp_setup_state
+  __cpuhp_state_add_instance
+  __cpuhp_state_remove_instance
+  cpu_hwcap_keys
+  cpu_hwcaps
+  cpumask_next
+  cpu_number
+  __cpu_online_mask
+  __cpu_possible_mask
+  crypto_register_alg
+  crypto_register_scomp
+  crypto_unregister_alg
+  crypto_unregister_scomp
+  _ctype
+  debugfs_create_dir
+  debugfs_create_file
+  debugfs_remove_recursive
+  delayed_work_timer_fn
+  del_gendisk
+  del_timer_sync
+  destroy_workqueue
+  _dev_err
+  device_add_disk
+  device_create
+  device_initialize
+  device_register
+  device_release_driver
+  device_unregister
+  _dev_info
+  __dev_kfree_skb_any
+  devm_ioremap
+  devm_kfree
+  devm_kmalloc
+  devm_request_threaded_irq
+  dev_queue_xmit
+  dev_set_name
+  _dev_warn
+  dma_alloc_attrs
+  dma_direct_map_sg
+  dma_direct_sync_sg_for_device
+  dma_direct_unmap_sg
+  dma_fence_context_alloc
+  dma_fence_init
+  dma_fence_release
+  dma_fence_signal_locked
+  dma_free_attrs
+  dma_set_coherent_mask
+  dma_set_mask
+  down_read
+  down_write
+  ether_setup
+  ethtool_op_get_link
+  eth_validate_addr
+  event_triggers_call
+  fd_install
+  finish_wait
+  flush_dcache_page
+  flush_work
+  fput
+  free_irq
+  free_netdev
+  __free_pages
+  free_pages
+  fs_bio_set
+  generic_file_llseek
+  get_device
+  __get_free_pages
+  get_random_bytes
+  get_unused_fd_flags
+  hwrng_register
+  hwrng_unregister
+  ida_alloc_range
+  ida_free
+  idr_alloc
+  idr_destroy
+  idr_remove
+  __init_rwsem
+  init_timer_key
+  init_user_ns
+  init_wait_entry
+  __init_waitqueue_head
+  input_allocate_device
+  input_event
+  input_free_device
+  input_register_device
+  input_unregister_device
+  iounmap
+  iput
+  jiffies
+  jiffies_to_msecs
+  kfree
+  kfree_skb
+  kimage_vaddr
+  kimage_voffset
+  __kmalloc
+  kmalloc_caches
+  kmem_cache_alloc
+  kmem_cache_alloc_trace
+  kmem_cache_create
+  kmem_cache_destroy
+  kmem_cache_free
+  kmemdup
+  kobject_add
+  kobject_init
+  kobject_put
+  kobject_uevent
+  krealloc
+  kstrdup
+  kstrtoint
+  kstrtoull
+  ktime_get
+  ktime_get_mono_fast_ns
+  ktime_get_raw_ts64
+  ktime_get_real_seconds
+  ktime_get_real_ts64
+  ktime_get_ts64
+  ktime_get_with_offset
+  kvfree
+  kvmalloc_node
+  __list_add_valid
+  __list_del_entry_valid
+  __local_bh_enable_ip
+  __lock_page
+  lzo1x_decompress_safe
+  memcpy
+  memmove
+  memparse
+  memremap
+  memset
+  memstart_addr
+  memunmap
+  misc_deregister
+  misc_register
+  mod_timer
+  module_layout
+  module_put
+  __msecs_to_jiffies
+  msleep
+  __mutex_init
+  mutex_lock
+  mutex_lock_interruptible
+  mutex_trylock
+  mutex_unlock
+  netdev_err
+  netdev_info
+  netdev_rx_handler_register
+  netdev_rx_handler_unregister
+  netdev_upper_dev_unlink
+  netif_carrier_off
+  netif_carrier_on
+  netif_device_detach
+  netif_tx_stop_all_queues
+  netif_tx_wake_queue
+  nf_conntrack_destroy
+  no_llseek
+  noop_llseek
+  nr_cpu_ids
+  __num_online_cpus
+  param_ops_bint
+  param_ops_bool
+  param_ops_charp
+  param_ops_int
+  param_ops_uint
+  passthru_features_check
+  pci_disable_device
+  pci_enable_device
+  pci_iomap
+  pci_read_config_byte
+  pci_read_config_dword
+  pci_read_config_word
+  __pci_register_driver
+  pci_release_region
+  pci_release_regions
+  pci_request_region
+  pci_request_regions
+  pci_set_master
+  pci_unregister_driver
+  pci_write_config_dword
+  __per_cpu_offset
+  perf_trace_buf_alloc
+  perf_trace_run_bpf_submit
+  platform_device_unregister
+  __platform_driver_register
+  platform_driver_unregister
+  platform_get_irq
+  platform_get_resource
+  pm_runtime_allow
+  __pm_runtime_disable
+  pm_runtime_enable
+  __pm_runtime_resume
+  __pm_runtime_suspend
+  __pm_runtime_use_autosuspend
+  preempt_schedule
+  preempt_schedule_notrace
+  prepare_to_wait_event
+  printk
+  put_device
+  put_disk
+  __put_page
+  __put_task_struct
+  put_unused_fd
+  queue_delayed_work_on
+  queue_work_on
+  ___ratelimit
+  _raw_spin_lock
+  _raw_spin_lock_bh
+  _raw_spin_lock_irq
+  _raw_spin_lock_irqsave
+  _raw_spin_unlock
+  _raw_spin_unlock_bh
+  _raw_spin_unlock_irq
+  _raw_spin_unlock_irqrestore
+  __rcu_read_lock
+  __rcu_read_unlock
+  refcount_dec_and_test_checked
+  refcount_inc_checked
+  register_blkdev
+  register_netdev
+  register_netdevice
+  register_netdevice_notifier
+  register_shrinker
+  register_virtio_device
+  register_virtio_driver
+  remap_pfn_range
+  __request_module
+  request_threaded_irq
+  revalidate_disk
+  rtnl_lock
+  rtnl_unlock
+  schedule
+  schedule_timeout
+  schedule_timeout_uninterruptible
+  scnprintf
+  seq_lseek
+  seq_open
+  seq_printf
+  seq_read
+  seq_release
+  set_disk_ro
+  sg_free_table
+  sg_init_one
+  sg_init_table
+  sg_next
+  simple_strtoul
+  skb_add_rx_frag
+  skb_put
+  snd_card_disconnect
+  snd_card_free
+  snd_card_new
+  snd_card_register
+  snd_card_rw_proc_new
+  snd_component_add
+  snd_ctl_add
+  _snd_ctl_add_slave
+  snd_ctl_boolean_mono_info
+  snd_ctl_enum_info
+  snd_ctl_find_id
+  snd_ctl_make_virtual_master
+  snd_ctl_new1
+  snd_ctl_sync_vmaster
+  snd_device_new
+  snd_dma_alloc_pages
+  snd_dma_free_pages
+  snd_pci_quirk_lookup
+  snd_pcm_add_chmap_ctls
+  snd_pcm_alt_chmaps
+  snd_pcm_hw_constraint_integer
+  snd_pcm_lib_free_pages
+  snd_pcm_lib_ioctl
+  snd_pcm_lib_malloc_pages
+  snd_pcm_lib_preallocate_pages_for_all
+  snd_pcm_limit_hw_rates
+  snd_pcm_new
+  snd_pcm_period_elapsed
+  snd_pcm_set_ops
+  snd_pcm_std_chmaps
+  snprintf
+  sort
+  sprintf
+  __stack_chk_fail
+  __stack_chk_guard
+  strcmp
+  strcpy
+  strlcpy
+  strlen
+  strncmp
+  strncpy
+  strscpy
+  strsep
+  submit_bio
+  __sw_hweight64
+  sync_file_create
+  synchronize_irq
+  synchronize_rcu
+  sysfs_create_group
+  __sysfs_match_string
+  sysfs_remove_group
+  sysfs_remove_link
+  system_wq
+  trace_define_field
+  trace_event_buffer_commit
+  trace_event_buffer_reserve
+  trace_event_ignore_this_pid
+  trace_event_raw_init
+  trace_event_reg
+  trace_handle_return
+  trace_raw_output_prep
+  trace_seq_printf
+  try_module_get
+  __ubsan_handle_cfi_check_fail_abort
+  unlock_page
+  unregister_blkdev
+  unregister_netdev
+  unregister_netdevice_notifier
+  unregister_netdevice_queue
+  unregister_shrinker
+  unregister_virtio_device
+  unregister_virtio_driver
+  up_read
+  up_write
+  usleep_range
+  vabits_actual
+  vfree
+  virtio_check_driver_offered_feature
+  virtio_config_changed
+  virtio_max_dma_size
+  virtqueue_add_inbuf
+  virtqueue_add_outbuf
+  virtqueue_add_sgs
+  virtqueue_detach_unused_buf
+  virtqueue_disable_cb
+  virtqueue_enable_cb
+  virtqueue_get_avail_addr
+  virtqueue_get_buf
+  virtqueue_get_desc_addr
+  virtqueue_get_used_addr
+  virtqueue_get_vring_size
+  virtqueue_is_broken
+  virtqueue_kick
+  virtqueue_kick_prepare
+  virtqueue_notify
+  vmalloc
+  vring_create_virtqueue
+  vring_del_virtqueue
+  vring_interrupt
+  vring_transport_features
+  wait_for_completion
+  __wake_up
+  __warn_printk
+
+# required by dummy-cpufreq.ko
+  cpufreq_generic_attr
+  cpufreq_register_driver
+  cpufreq_unregister_driver
+
+# required by failover.ko
+  netdev_master_upper_dev_link
+  rtnl_is_locked
+
+# required by gnss-cmdline.ko
+  bus_find_device
+  device_find_child
+  device_match_name
+  platform_bus_type
+  strstr
+
+# required by gnss-serial.ko
+  gnss_allocate_device
+  gnss_deregister_device
+  gnss_insert_raw
+  gnss_put_device
+  gnss_register_device
+  of_property_read_variable_u32_array
+  __pm_runtime_idle
+  serdev_device_close
+  serdev_device_open
+  serdev_device_set_baudrate
+  serdev_device_set_flow_control
+  serdev_device_wait_until_sent
+  serdev_device_write
+  serdev_device_write_wakeup
+
+# required by goldfish_address_space.ko
+  __ioremap
+
+# required by goldfish_battery.ko
+  power_supply_changed
+  power_supply_get_drvdata
+  power_supply_register
+  power_supply_unregister
+
+# required by goldfish_pipe.ko
+  get_user_pages_fast
+  set_page_dirty
+  tasklet_init
+  tasklet_kill
+  __tasklet_schedule
+
+# required by goldfish_sync.ko
+  __close_fd
+  dma_fence_default_wait
+  dma_fence_free
+
+# required by lzo-rle.ko
+  lzorle1x_1_compress
+
+# required by lzo.ko
+  lzo1x_1_compress
+
+# required by mac80211_hwsim.ko
+  alloc_netdev_mqs
+  __cfg80211_alloc_event_skb
+  __cfg80211_alloc_reply_skb
+  __cfg80211_send_event_skb
+  cfg80211_vendor_cmd_reply
+  dev_alloc_name
+  device_bind_driver
+  dst_release
+  eth_mac_addr
+  genlmsg_put
+  genl_notify
+  genl_register_family
+  genl_unregister_family
+  hrtimer_cancel
+  hrtimer_forward
+  hrtimer_init
+  hrtimer_start_range_ns
+  ieee80211_alloc_hw_nm
+  ieee80211_beacon_get_tim
+  ieee80211_csa_finish
+  ieee80211_csa_is_complete
+  ieee80211_free_hw
+  ieee80211_free_txskb
+  ieee80211_get_tx_rates
+  ieee80211_iterate_active_interfaces_atomic
+  ieee80211_probereq_get
+  ieee80211_queue_delayed_work
+  ieee80211_radar_detected
+  ieee80211_ready_on_channel
+  ieee80211_register_hw
+  ieee80211_remain_on_channel_expired
+  ieee80211_rx_irqsafe
+  ieee80211_scan_completed
+  ieee80211_start_tx_ba_cb_irqsafe
+  ieee80211_stop_tx_ba_cb_irqsafe
+  ieee80211_tx_status_irqsafe
+  ieee80211_unregister_hw
+  init_net
+  kstrndup
+  __netdev_alloc_skb
+  netif_rx
+  netlink_broadcast
+  netlink_register_notifier
+  netlink_unicast
+  netlink_unregister_notifier
+  net_namespace_list
+  nla_memcpy
+  __nla_parse
+  nla_put_64bit
+  nla_put
+  param_ops_ushort
+  register_pernet_device
+  regulatory_hint
+  rhashtable_destroy
+  rhashtable_init
+  rhashtable_insert_slow
+  __rht_bucket_nested
+  rht_bucket_nested
+  rht_bucket_nested_insert
+  schedule_timeout_interruptible
+  simple_attr_open
+  simple_attr_read
+  simple_attr_release
+  simple_attr_write
+  skb_copy
+  skb_copy_expand
+  skb_dequeue
+  __skb_ext_put
+  skb_push
+  skb_queue_tail
+  skb_trim
+  skb_unlink
+  unregister_pernet_device
+  wiphy_apply_custom_regulatory
+
+# required by md-mod.ko
+  ack_all_badblocks
+  alloc_page_buffers
+  _atomic_dec_and_lock
+  autoremove_wake_function
+  badblocks_clear
+  badblocks_exit
+  badblocks_init
+  badblocks_set
+  badblocks_show
+  badblocks_store
+  __bdevname
+  bdevname
+  bdev_read_only
+  bd_link_disk_holder
+  bd_unlink_disk_holder
+  bioset_exit
+  bioset_init
+  blkdev_get_by_dev
+  blkdev_put
+  blk_finish_plug
+  blk_queue_split
+  blk_register_region
+  blk_set_stacking_limits
+  blk_start_plug
+  blk_sync_queue
+  blk_unregister_region
+  bmap
+  check_disk_change
+  fget
+  file_path
+  flush_signals
+  flush_workqueue
+  free_buffer_head
+  int_pow
+  invalidate_bdev
+  invalidate_mapping_pages
+  kernel_sigaction
+  kernfs_find_and_get_ns
+  kernfs_notify
+  kernfs_put
+  kobject_del
+  kobject_get
+  kstrtobool
+  kstrtoll
+  kstrtouint
+  kthread_create_on_node
+  kthread_parkme
+  kthread_should_park
+  kthread_should_stop
+  kthread_stop
+  mempool_create
+  mempool_destroy
+  mempool_kfree
+  mempool_kmalloc
+  percpu_ref_exit
+  percpu_ref_init
+  percpu_ref_switch_to_atomic_sync
+  percpu_ref_switch_to_percpu
+  prepare_to_wait
+  proc_create
+  proc_dointvec
+  register_reboot_notifier
+  register_sysctl_table
+  remove_proc_entry
+  seq_file_path
+  skip_spaces
+  strreplace
+  submit_bh
+  submit_bio_wait
+  sync_blockdev
+  sysfs_create_link
+  sysfs_notify
+  unregister_reboot_notifier
+  unregister_sysctl_table
+  vfs_fsync
+  wake_up_process
+
+# required by nd_virtio.ko
+  bio_chain
+  bio_clone_blkg_association
+
+# required by net_failover.ko
+  call_netdevice_notifiers
+  dev_close
+  dev_get_stats
+  dev_mc_sync_multiple
+  dev_mc_unsync
+  dev_open
+  dev_set_mtu
+  dev_uc_sync_multiple
+  dev_uc_unsync
+  __ethtool_get_link_ksettings
+  netdev_change_features
+  netdev_increment_features
+  netdev_lower_state_changed
+  netdev_pick_tx
+  pci_bus_type
+
+# required by pulse8-cec.ko
+  cec_allocate_adapter
+  cec_delete_adapter
+  cec_received_msg_ts
+  cec_register_adapter
+  cec_s_log_addrs
+  cec_s_phys_addr
+  cec_transmit_attempt_done_ts
+  cec_unregister_adapter
+  serio_close
+  serio_open
+  __serio_register_driver
+  serio_unregister_driver
+  time64_to_tm
+  wait_for_completion_timeout
+
+# required by rtc-test.ko
+  add_timer
+  del_timer
+  device_init_wakeup
+  devm_rtc_allocate_device
+  platform_device_add
+  platform_device_alloc
+  platform_device_del
+  platform_device_put
+  __rtc_register_device
+  rtc_time64_to_tm
+  rtc_tm_to_time64
+  rtc_update_irq
+
+# required by snd-ac97-codec.ko
+  snd_ctl_remove_id
+  snd_info_create_card_entry
+  snd_info_free_entry
+  snd_interval_refine
+  snd_pcm_hw_rule_add
+  strcat
+
+# required by snd-hda-codec-generic.ko
+  snd_ctl_boolean_stereo_info
+  strchr
+  strlcat
+  __sw_hweight32
+
+# required by snd-hda-codec.ko
+  current_work
+  device_attach
+  driver_register
+  driver_unregister
+  get_device_system_crosststamp
+  kvasprintf
+  ns_to_timespec
+  pm_runtime_forbid
+  pm_runtime_force_resume
+  pm_runtime_force_suspend
+  pm_runtime_set_autosuspend_delay
+  __printk_ratelimit
+  regcache_mark_dirty
+  snd_ctl_add_vmaster_hook
+  snd_ctl_apply_vmaster_slaves
+  snd_ctl_remove
+  snd_device_disconnect
+  snd_device_free
+  snd_jack_new
+  snd_jack_report
+  snd_jack_set_key
+  snd_pcm_hw_constraint_minmax
+  snd_pcm_hw_constraint_step
+  snd_pcm_lib_default_mmap
+  snd_pcm_set_sync
+  strncat
+  timecounter_read
+
+# required by snd-hda-core.ko
+  add_uevent_var
+  device_add
+  device_del
+  kasprintf
+  kobject_create_and_add
+  pm_runtime_get_if_in_use
+  __pm_runtime_set_status
+  regcache_cache_only
+  regcache_sync
+  regmap_exit
+  __regmap_init
+  regmap_read
+  regmap_update_bits_base
+  regmap_write
+  snd_pcm_format_width
+  timecounter_init
+
+# required by snd-hda-intel.ko
+  complete_all
+  param_array_ops
+  param_get_int
+  param_set_int
+  pci_dev_put
+  pci_disable_msi
+  pci_enable_msi
+  pci_get_device
+  pci_intx
+  pci_ioremap_bar
+  pci_match_id
+  pci_set_power_state
+  pci_write_config_byte
+  pci_write_config_word
+
+# required by snd-intel8x0.ko
+  snd_pcm_hw_constraint_list
+  snd_pcm_hw_constraint_msbits
+
+# required by system_heap.ko
+  dma_buf_export
+  dma_direct_sync_sg_for_cpu
+  dma_heap_add
+  dma_heap_get_dev
+  sg_alloc_table
+  __sg_page_iter_next
+  __sg_page_iter_start
+  vmap
+  vunmap
+
+# required by test_meminit.ko
+  kmem_cache_alloc_bulk
+  kmem_cache_free_bulk
+
+# required by tpm.ko
+  alloc_chrdev_region
+  cdev_device_add
+  cdev_device_del
+  cdev_init
+  __compat_only_sysfs_link_entry_to_kobj
+  devm_add_action
+  efi
+  efi_tpm_final_log_size
+  hash_digest_size
+  idr_get_next
+  idr_replace
+  jiffies_to_usecs
+  memchr_inv
+  of_find_property
+  of_get_property
+  of_property_match_string
+  securityfs_create_dir
+  securityfs_create_file
+  securityfs_remove
+  seq_putc
+  seq_write
+  unregister_chrdev_region
+  __usecs_to_jiffies
+
+# required by tpm_vtpm_proxy.ko
+  anon_inode_getfile
+
+# required by virt_wifi.ko
+  cfg80211_connect_done
+  cfg80211_disconnected
+  cfg80211_scan_done
+  __dev_get_by_index
+  dev_printk
+  __module_get
+  netdev_upper_dev_link
+  netif_stacked_transfer_operstate
+  rtnl_link_register
+  rtnl_link_unregister
+  skb_clone
+  unregister_netdevice_many
+  wiphy_free
+  wiphy_new_nm
+  wiphy_register
+  wiphy_unregister
+
+# required by virt_wifi_sim.ko
+  ieee80211_get_channel_khz
+  release_firmware
+  request_firmware
+
+# required by virtio-gpu.ko
+  dma_buf_get_uuid
+  dma_fence_match_context
+  dma_fence_wait_timeout
+  dma_resv_add_excl_fence
+  drm_add_edid_modes
+  drm_add_modes_noedid
+  drm_atomic_helper_check
+  drm_atomic_helper_cleanup_planes
+  drm_atomic_helper_commit
+  drm_atomic_helper_commit_hw_done
+  drm_atomic_helper_commit_modeset_disables
+  drm_atomic_helper_commit_modeset_enables
+  drm_atomic_helper_commit_planes
+  drm_atomic_helper_connector_destroy_state
+  drm_atomic_helper_connector_duplicate_state
+  drm_atomic_helper_connector_reset
+  drm_atomic_helper_crtc_destroy_state
+  drm_atomic_helper_crtc_duplicate_state
+  drm_atomic_helper_crtc_reset
+  drm_atomic_helper_dirtyfb
+  drm_atomic_helper_disable_plane
+  drm_atomic_helper_page_flip
+  drm_atomic_helper_plane_destroy_state
+  drm_atomic_helper_plane_duplicate_state
+  drm_atomic_helper_plane_reset
+  drm_atomic_helper_set_config
+  drm_atomic_helper_shutdown
+  drm_atomic_helper_update_plane
+  drm_atomic_helper_wait_for_vblanks
+  drm_compat_ioctl
+  drm_connector_attach_edid_property
+  drm_connector_attach_encoder
+  drm_connector_cleanup
+  drm_connector_init
+  drm_connector_register
+  drm_connector_unregister
+  drm_connector_update_edid_property
+  drm_crtc_cleanup
+  drm_crtc_init_with_planes
+  drm_crtc_send_vblank_event
+  drm_cvt_mode
+  drm_dbg
+  drm_debugfs_create_files
+  drm_dev_alloc
+  drm_dev_put
+  drm_dev_register
+  drm_dev_set_unique
+  drm_dev_unregister
+  drm_do_get_edid
+  drm_encoder_cleanup
+  drm_encoder_init
+  drm_err
+  drm_framebuffer_init
+  drm_gem_fb_create_handle
+  drm_gem_fb_destroy
+  drm_gem_handle_create
+  drm_gem_object_init
+  drm_gem_object_lookup
+  drm_gem_object_put_unlocked
+  drm_gem_object_release
+  drm_gem_prime_export
+  drm_gem_prime_fd_to_handle
+  drm_gem_prime_handle_to_fd
+  drm_gem_prime_mmap
+  drm_helper_hpd_irq_event
+  drm_helper_mode_fill_fb_struct
+  drm_helper_probe_single_connector_modes
+  drm_ioctl
+  drm_kms_helper_hotplug_event
+  drm_mode_config_cleanup
+  drm_mode_config_init
+  drm_mode_config_reset
+  drm_mode_probed_add
+  drm_open
+  drm_plane_cleanup
+  drm_poll
+  drm_prime_pages_to_sg
+  drm_put_dev
+  drm_read
+  drm_release
+  drm_set_preferred_mode
+  drm_universal_plane_init
+  __get_task_comm
+  kmalloc_order_trace
+  memdup_user
+  __sg_alloc_table_from_pages
+  sync_file_get_fence
+  __tracepoint_dma_fence_emit
+  __tracepoint_gpu_mem_total
+  ttm_bo_add_to_lru
+  ttm_bo_del_sub_from_lru
+  ttm_bo_device_init
+  ttm_bo_device_release
+  ttm_bo_dma_acc_size
+  ttm_bo_eviction_valuable
+  ttm_bo_init
+  ttm_bo_init_mm
+  ttm_bo_kmap
+  ttm_bo_kunmap
+  ttm_bo_manager_func
+  ttm_bo_mmap
+  ttm_bo_move_to_lru_tail
+  ttm_bo_put
+  ttm_bo_validate
+  ttm_bo_wait
+  ttm_dma_tt_fini
+  ttm_dma_tt_init
+  ttm_eu_backoff_reservation
+  ttm_eu_fence_buffer_objects
+  ttm_eu_reserve_buffers
+  ttm_tt_init
+  ww_mutex_lock_interruptible
+  ww_mutex_unlock
+
+# required by virtio-rng.ko
+  wait_for_completion_killable
+
+# required by virtio_blk.ko
+  blk_execute_rq
+  blk_get_request
+  blk_mq_alloc_tag_set
+  blk_mq_complete_request
+  blk_mq_end_request
+  blk_mq_free_tag_set
+  blk_mq_init_queue
+  blk_mq_quiesce_queue
+  blk_mq_start_request
+  blk_mq_start_stopped_hw_queues
+  blk_mq_stop_hw_queue
+  blk_mq_unquiesce_queue
+  blk_mq_virtio_map_queues
+  blk_put_request
+  blk_queue_alignment_offset
+  blk_queue_max_discard_segments
+  blk_queue_max_hw_sectors
+  blk_queue_max_segments
+  blk_queue_max_segment_size
+  blk_rq_map_kern
+  blk_rq_map_sg
+  blk_status_to_errno
+  _dev_notice
+  kobject_uevent_env
+  string_get_size
+
+# required by virtio_console.ko
+  cdev_add
+  cdev_alloc
+  cdev_del
+  debugfs_remove
+  device_destroy
+  fasync_helper
+  freezing_slow_path
+  hvc_alloc
+  hvc_instantiate
+  hvc_kick
+  hvc_poll
+  hvc_remove
+  __hvc_resize
+  kill_fasync
+  nonseekable_open
+  pipe_lock
+  pipe_unlock
+  __refrigerator
+  __register_chrdev
+  single_open
+  single_release
+  __splice_from_pipe
+  system_freezing_cnt
+  __unregister_chrdev
+
+# required by virtio_input.ko
+  input_alloc_absinfo
+  input_mt_init_slots
+  input_set_abs_params
+
+# required by virtio_mmio.ko
+  device_for_each_child
+  __devm_request_region
+  iomem_resource
+  platform_device_register_full
+  sscanf
+
+# required by virtio_net.ko
+  arch_bpf_jit_check_func
+  bpf_prog_add
+  bpf_prog_put
+  bpf_prog_sub
+  bpf_stats_enabled_key
+  bpf_warn_invalid_xdp_action
+  build_skb
+  cpumask_next_wrap
+  cpus_read_lock
+  cpus_read_unlock
+  eth_commit_mac_addr_change
+  eth_prepare_mac_addr_change
+  ethtool_op_get_ts_info
+  eth_type_trans
+  find_next_bit
+  flow_keys_basic_dissector
+  __napi_alloc_skb
+  napi_complete_done
+  napi_consume_skb
+  napi_disable
+  napi_gro_receive
+  napi_hash_del
+  __napi_schedule
+  napi_schedule_prep
+  netdev_notify_peers
+  netdev_warn
+  netif_device_attach
+  netif_napi_add
+  netif_napi_del
+  netif_schedule_queue
+  netif_set_real_num_rx_queues
+  netif_set_real_num_tx_queues
+  __netif_set_xps_queue
+  net_ratelimit
+  _raw_spin_trylock
+  sched_clock
+  skb_coalesce_rx_frag
+  __skb_flow_dissect
+  skb_page_frag_refill
+  skb_partial_csum_set
+  skb_to_sgvec
+  skb_tstamp_tx
+  softnet_data
+  synchronize_net
+  __tracepoint_xdp_exception
+  virtqueue_add_inbuf_ctx
+  virtqueue_enable_cb_delayed
+  virtqueue_enable_cb_prepare
+  virtqueue_get_buf_ctx
+  virtqueue_poll
+  xdp_convert_zc_to_xdp_frame
+  xdp_do_flush_map
+  xdp_do_redirect
+  xdp_return_frame
+  xdp_return_frame_rx_napi
+  xdp_rxq_info_reg
+  xdp_rxq_info_reg_mem_model
+  xdp_rxq_info_unreg
+
+# required by virtio_pci.ko
+  irq_set_affinity_hint
+  pci_alloc_irq_vectors_affinity
+  pci_find_capability
+  pci_find_ext_capability
+  pci_find_next_capability
+  pci_free_irq_vectors
+  pci_iomap_range
+  pci_irq_get_affinity
+  pci_irq_vector
+  pci_release_selected_regions
+  pci_request_selected_regions
+  virtio_device_freeze
+  virtio_device_restore
+
+# required by virtio_pmem.ko
+  nvdimm_bus_register
+  nvdimm_bus_unregister
+  nvdimm_pmem_region_create
+
+# required by virtiofs.ko
+  deactivate_locked_super
+  flush_delayed_work
+  fuse_conn_get
+  fuse_conn_init
+  fuse_conn_put
+  fuse_dequeue_forget
+  fuse_dev_alloc
+  fuse_dev_free
+  fuse_dev_install
+  fuse_fill_super_common
+  fuse_free_conn
+  fuse_get_unique
+  fuse_kill_sb_anon
+  fuse_len_args
+  fuse_request_end
+  fuse_send_init
+  get_anon_bdev
+  lockref_get
+  memchr
+  sget_fc
+
+# required by vmw_vsock_virtio_transport.ko
+  lock_sock_nested
+  release_sock
+  virtio_transport_connect
+  virtio_transport_deliver_tap_pkt
+  virtio_transport_destruct
+  virtio_transport_dgram_allow
+  virtio_transport_dgram_bind
+  virtio_transport_dgram_dequeue
+  virtio_transport_dgram_enqueue
+  virtio_transport_do_socket_init
+  virtio_transport_free_pkt
+  virtio_transport_notify_buffer_size
+  virtio_transport_notify_poll_in
+  virtio_transport_notify_poll_out
+  virtio_transport_notify_recv_init
+  virtio_transport_notify_recv_post_dequeue
+  virtio_transport_notify_recv_pre_block
+  virtio_transport_notify_recv_pre_dequeue
+  virtio_transport_notify_send_init
+  virtio_transport_notify_send_post_enqueue
+  virtio_transport_notify_send_pre_block
+  virtio_transport_notify_send_pre_enqueue
+  virtio_transport_recv_pkt
+  virtio_transport_release
+  virtio_transport_shutdown
+  virtio_transport_stream_allow
+  virtio_transport_stream_dequeue
+  virtio_transport_stream_enqueue
+  virtio_transport_stream_has_data
+  virtio_transport_stream_has_space
+  virtio_transport_stream_is_active
+  virtio_transport_stream_rcvhiwat
+  vsock_core_register
+  vsock_core_unregister
+  vsock_for_each_connected_socket
+
+# required by zram.ko
+  __alloc_percpu
+  bdget_disk
+  bdput
+  __class_register
+  class_unregister
+  crypto_alloc_base
+  crypto_destroy_tfm
+  crypto_has_alg
+  free_percpu
+  fsync_bdev
+  generic_end_io_acct
+  generic_start_io_acct
+  idr_find
+  idr_for_each
+  kstrtou16
+  memset64
+  mutex_is_locked
+  page_endio
+  sysfs_streq
+  vzalloc
+
+# required by zsmalloc.ko
+  alloc_anon_inode
+  __ClearPageMovable
+  contig_page_data
+  dec_zone_page_state
+  inc_zone_page_state
+  init_pseudo
+  kern_mount
+  kern_unmount
+  kill_anon_super
+  page_mapping
+  _raw_read_lock
+  _raw_read_unlock
+  _raw_write_lock
+  _raw_write_unlock
+  __SetPageMovable
diff --git a/android/gki_aarch64_modules b/android/gki_aarch64_modules
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/android/gki_aarch64_modules
diff --git a/arch/Kconfig b/arch/Kconfig
index a8df66e..e698a77 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -544,6 +544,112 @@
 	  about 20% of all kernel functions, which increases the kernel code
 	  size by about 2%.
 
+config ARCH_SUPPORTS_SHADOW_CALL_STACK
+	bool
+	help
+	  An architecture should select this if it supports Clang's Shadow
+	  Call Stack, has asm/scs.h, and implements runtime support for shadow
+	  stack switching.
+
+config SHADOW_CALL_STACK
+	bool "Clang Shadow Call Stack"
+	depends on ARCH_SUPPORTS_SHADOW_CALL_STACK
+	help
+	  This option enables Clang's Shadow Call Stack, which uses a
+	  shadow stack to protect function return addresses from being
+	  overwritten by an attacker. More information can be found from
+	  Clang's documentation:
+
+	    https://clang.llvm.org/docs/ShadowCallStack.html
+
+	  Note that security guarantees in the kernel differ from the ones
+	  documented for user space. The kernel must store addresses of shadow
+	  stacks used by other tasks and interrupt handlers in memory, which
+	  means an attacker capable reading and writing arbitrary memory may
+	  be able to locate them and hijack control flow by modifying shadow
+	  stacks that are not currently in use.
+
+config SHADOW_CALL_STACK_VMAP
+	bool "Use virtually mapped shadow call stacks"
+	depends on SHADOW_CALL_STACK
+	default y
+	help
+	  Use virtually mapped shadow call stacks. Selecting this option
+	  provides better stack exhaustion protection, but increases per-thread
+	  memory consumption as a full page is allocated for each shadow stack.
+
+config LTO
+	bool
+
+config ARCH_SUPPORTS_LTO_CLANG
+	bool
+	help
+	  An architecture should select this option if it supports:
+	  - compiling with Clang,
+	  - compiling inline assembly with Clang's integrated assembler,
+	  - and linking with LLD.
+
+config ARCH_SUPPORTS_THINLTO
+	bool
+	help
+	  An architecture should select this if it supports Clang ThinLTO.
+
+config THINLTO
+	bool "Use Clang's ThinLTO (EXPERIMENTAL)"
+	depends on LTO_CLANG && ARCH_SUPPORTS_THINLTO
+	default y
+	help
+	  Use ThinLTO to speed up Link Time Optimization.
+
+choice
+	prompt "Link-Time Optimization (LTO) (EXPERIMENTAL)"
+	default LTO_NONE
+	help
+	  This option turns on Link-Time Optimization (LTO).
+
+config LTO_NONE
+	bool "None"
+
+config LTO_CLANG
+	bool "Use Clang's Link Time Optimization (LTO) (EXPERIMENTAL)"
+	depends on ARCH_SUPPORTS_LTO_CLANG
+	depends on !KASAN
+	depends on !FTRACE_MCOUNT_RECORD || HAVE_C_RECORDMCOUNT
+	depends on CC_IS_CLANG && CLANG_VERSION >= 100000 && LD_IS_LLD
+	select LTO
+	help
+          This option enables Clang's Link Time Optimization (LTO), which allows
+          the compiler to optimize the kernel globally at link time. If you
+          enable this option, the compiler generates LLVM IR instead of object
+          files, and the actual compilation from IR occurs at the LTO link step,
+          which may take several minutes.
+
+endchoice
+
+config CFI_CLANG
+	bool "Use Clang's Control Flow Integrity (CFI)"
+	depends on LTO_CLANG && KALLSYMS
+	depends on !GCOV_KERNEL
+	help
+	  This option enables Clang's Control Flow Integrity (CFI), which adds
+	  runtime checking for indirect function calls.
+
+config CFI_CLANG_SHADOW
+	bool "Use CFI shadow to speed up cross-module checks"
+	default y
+	depends on CFI_CLANG
+	help
+	  If you select this option, the kernel builds a fast look-up table of
+	  CFI check functions in loaded modules to reduce overhead.
+
+config CFI_PERMISSIVE
+	bool "Use CFI in permissive mode"
+	depends on CFI_CLANG
+	help
+	  When selected, Control Flow Integrity (CFI) violations result in a
+	  warning instead of a kernel panic. This option is useful for finding
+	  CFI violations during development.
+
 config HAVE_ARCH_WITHIN_STACK_FRAMES
 	bool
 	help
@@ -588,6 +694,13 @@
 	  Archs need to ensure they use a high enough resolution clock to
 	  support irq time accounting and then call enable_sched_clock_irqtime().
 
+config HAVE_MOVE_PUD
+	bool
+	help
+	  Architectures that select this are able to move page tables at the
+	  PUD level. If there are only 3 page table levels, the move effectively
+	  happens at the PGD level.
+
 config HAVE_MOVE_PMD
 	bool
 	help
diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c
index 741e61e..c2d7b6d 100644
--- a/arch/alpha/mm/fault.c
+++ b/arch/alpha/mm/fault.c
@@ -89,7 +89,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
 	const struct exception_table_entry *fixup;
 	int si_code = SEGV_MAPERR;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	/* As of EV6, a load into $31/$f31 is a prefetch, and never faults
 	   (or is suppressed by the PALcode).  Support that for older CPUs
@@ -150,7 +150,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
 	   the fault.  */
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -169,7 +169,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
 		else
 			current->min_flt++;
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
+			flags |= FAULT_FLAG_TRIED;
 
 			 /* No need to up_read(&mm->mmap_sem) as we would
 			 * have already released it in __lock_page_or_retry
diff --git a/arch/arc/mm/dma.c b/arch/arc/mm/dma.c
index 73a7e88..4726906 100644
--- a/arch/arc/mm/dma.c
+++ b/arch/arc/mm/dma.c
@@ -104,3 +104,4 @@ void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size,
 	dev_info(dev, "use %scoherent DMA ops\n",
 		 dev->dma_coherent ? "" : "non");
 }
+EXPORT_SYMBOL_GPL(arch_setup_dma_ops);
diff --git a/arch/arc/mm/fault.c b/arch/arc/mm/fault.c
index 3861543..fdf09db 100644
--- a/arch/arc/mm/fault.c
+++ b/arch/arc/mm/fault.c
@@ -94,7 +94,7 @@ void do_page_fault(unsigned long address, struct pt_regs *regs)
 	         (regs->ecr_cause == ECR_C_PROTV_INST_FETCH))
 		exec = 1;
 
-	flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	flags = FAULT_FLAG_DEFAULT;
 	if (user_mode(regs))
 		flags |= FAULT_FLAG_USER;
 	if (write)
@@ -127,29 +127,20 @@ void do_page_fault(unsigned long address, struct pt_regs *regs)
 
 	fault = handle_mm_fault(vma, address, flags);
 
-	/*
-	 * Fault retry nuances
-	 */
-	if (unlikely(fault & VM_FAULT_RETRY)) {
+	/* Quick path to respond to signals */
+	if (fault_signal_pending(fault, regs)) {
+		if (!user_mode(regs))
+			goto no_context;
+		return;
+	}
 
-		/*
-		 * If fault needs to be retried, handle any pending signals
-		 * first (by returning to user mode).
-		 * mmap_sem already relinquished by core mm for RETRY case
-		 */
-		if (fatal_signal_pending(current)) {
-			if (!user_mode(regs))
-				goto no_context;
-			return;
-		}
-		/*
-		 * retry state machine
-		 */
-		if (flags & FAULT_FLAG_ALLOW_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
-			flags |= FAULT_FLAG_TRIED;
-			goto retry;
-		}
+	/*
+	 * Fault retry nuances, mmap_sem already relinquished by core mm
+	 */
+	if (unlikely((fault & VM_FAULT_RETRY) &&
+		     (flags & FAULT_FLAG_ALLOW_RETRY))) {
+		flags |= FAULT_FLAG_TRIED;
+		goto retry;
 	}
 
 bad_area:
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 9aa8871..d2fe1c7 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1251,6 +1251,7 @@
 	depends on CPU_V7
 	select ARM_ARCH_TIMER
 	select GENERIC_CLOCKEVENTS
+	select GENERIC_GETTIMEOFDAY
 	help
 	  This option enables support for the ARM architected timer
 
diff --git a/arch/arm/configs/bcm2835_defconfig b/arch/arm/configs/bcm2835_defconfig
index 519ff58..0afcae9 100644
--- a/arch/arm/configs/bcm2835_defconfig
+++ b/arch/arm/configs/bcm2835_defconfig
@@ -178,6 +178,7 @@
 CONFIG_STACK_TRACER=y
 CONFIG_FUNCTION_PROFILER=y
 CONFIG_TEST_KSTRTOX=y
+CONFIG_DEBUG_FS=y
 CONFIG_KGDB=y
 CONFIG_KGDB_KDB=y
 CONFIG_STRICT_DEVMEM=y
diff --git a/arch/arm/configs/socfpga_defconfig b/arch/arm/configs/socfpga_defconfig
index fe2e1e8..e73c97b 100644
--- a/arch/arm/configs/socfpga_defconfig
+++ b/arch/arm/configs/socfpga_defconfig
@@ -157,6 +157,7 @@
 CONFIG_PRINTK_TIME=y
 CONFIG_DEBUG_INFO=y
 CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_FS=y
 CONFIG_DETECT_HUNG_TASK=y
 # CONFIG_SCHED_DEBUG is not set
 CONFIG_FUNCTION_TRACER=y
diff --git a/arch/arm/crypto/.gitignore b/arch/arm/crypto/.gitignore
index 31e1f53..a3c7ad5 100644
--- a/arch/arm/crypto/.gitignore
+++ b/arch/arm/crypto/.gitignore
@@ -1,3 +1,4 @@
 aesbs-core.S
 sha256-core.S
 sha512-core.S
+poly1305-core.S
diff --git a/arch/arm/crypto/Kconfig b/arch/arm/crypto/Kconfig
index 043b0b1..3b68312 100644
--- a/arch/arm/crypto/Kconfig
+++ b/arch/arm/crypto/Kconfig
@@ -62,6 +62,25 @@
 	  SHA-512 secure hash standard (DFIPS 180-2) implemented
 	  using optimized ARM assembler and NEON, when available.
 
+config CRYPTO_BLAKE2S_ARM
+	tristate "BLAKE2s digest algorithm (ARM)"
+	select CRYPTO_ARCH_HAVE_LIB_BLAKE2S
+	help
+	  BLAKE2s digest algorithm optimized with ARM scalar instructions.  This
+	  is faster than the generic implementations of BLAKE2s and BLAKE2b, but
+	  slower than the NEON implementation of BLAKE2b.  (There is no NEON
+	  implementation of BLAKE2s, since NEON doesn't really help with it.)
+
+config CRYPTO_BLAKE2B_NEON
+	tristate "BLAKE2b digest algorithm (ARM NEON)"
+	depends on KERNEL_MODE_NEON
+	select CRYPTO_BLAKE2B
+	help
+	  BLAKE2b digest algorithm optimized with ARM NEON instructions.
+	  On ARM processors that have NEON support but not the ARMv8
+	  Crypto Extensions, typically this BLAKE2b implementation is
+	  much faster than SHA-2 and slightly faster than SHA-1.
+
 config CRYPTO_AES_ARM
 	tristate "Scalar AES cipher for ARM"
 	select CRYPTO_ALGAPI
@@ -127,14 +146,24 @@
 	select CRYPTO_HASH
 
 config CRYPTO_CHACHA20_NEON
-	tristate "NEON accelerated ChaCha stream cipher algorithms"
-	depends on KERNEL_MODE_NEON
+	tristate "NEON and scalar accelerated ChaCha stream cipher algorithms"
 	select CRYPTO_BLKCIPHER
-	select CRYPTO_CHACHA20
+	select CRYPTO_ARCH_HAVE_LIB_CHACHA
+
+config CRYPTO_POLY1305_ARM
+	tristate "Accelerated scalar and SIMD Poly1305 hash implementations"
+	select CRYPTO_HASH
+	select CRYPTO_ARCH_HAVE_LIB_POLY1305
 
 config CRYPTO_NHPOLY1305_NEON
 	tristate "NEON accelerated NHPoly1305 hash function (for Adiantum)"
 	depends on KERNEL_MODE_NEON
 	select CRYPTO_NHPOLY1305
 
+config CRYPTO_CURVE25519_NEON
+	tristate "NEON accelerated Curve25519 scalar multiplication library"
+	depends on KERNEL_MODE_NEON
+	select CRYPTO_LIB_CURVE25519_GENERIC
+	select CRYPTO_ARCH_HAVE_LIB_CURVE25519
+
 endif
diff --git a/arch/arm/crypto/Makefile b/arch/arm/crypto/Makefile
index 4180f3a1..d82ba3a 100644
--- a/arch/arm/crypto/Makefile
+++ b/arch/arm/crypto/Makefile
@@ -9,8 +9,12 @@
 obj-$(CONFIG_CRYPTO_SHA1_ARM_NEON) += sha1-arm-neon.o
 obj-$(CONFIG_CRYPTO_SHA256_ARM) += sha256-arm.o
 obj-$(CONFIG_CRYPTO_SHA512_ARM) += sha512-arm.o
+obj-$(CONFIG_CRYPTO_BLAKE2S_ARM) += blake2s-arm.o
+obj-$(CONFIG_CRYPTO_BLAKE2B_NEON) += blake2b-neon.o
 obj-$(CONFIG_CRYPTO_CHACHA20_NEON) += chacha-neon.o
+obj-$(CONFIG_CRYPTO_POLY1305_ARM) += poly1305-arm.o
 obj-$(CONFIG_CRYPTO_NHPOLY1305_NEON) += nhpoly1305-neon.o
+obj-$(CONFIG_CRYPTO_CURVE25519_NEON) += curve25519-neon.o
 
 ce-obj-$(CONFIG_CRYPTO_AES_ARM_CE) += aes-arm-ce.o
 ce-obj-$(CONFIG_CRYPTO_SHA1_ARM_CE) += sha1-arm-ce.o
@@ -47,19 +51,27 @@
 sha256-arm-y	:= sha256-core.o sha256_glue.o $(sha256-arm-neon-y)
 sha512-arm-neon-$(CONFIG_KERNEL_MODE_NEON) := sha512-neon-glue.o
 sha512-arm-y	:= sha512-core.o sha512-glue.o $(sha512-arm-neon-y)
+blake2s-arm-y   := blake2s-core.o blake2s-glue.o
+blake2b-neon-y  := blake2b-neon-core.o blake2b-neon-glue.o
 sha1-arm-ce-y	:= sha1-ce-core.o sha1-ce-glue.o
 sha2-arm-ce-y	:= sha2-ce-core.o sha2-ce-glue.o
 aes-arm-ce-y	:= aes-ce-core.o aes-ce-glue.o
 ghash-arm-ce-y	:= ghash-ce-core.o ghash-ce-glue.o
 crct10dif-arm-ce-y	:= crct10dif-ce-core.o crct10dif-ce-glue.o
 crc32-arm-ce-y:= crc32-ce-core.o crc32-ce-glue.o
-chacha-neon-y := chacha-neon-core.o chacha-neon-glue.o
+chacha-neon-y := chacha-scalar-core.o chacha-glue.o
+chacha-neon-$(CONFIG_KERNEL_MODE_NEON) += chacha-neon-core.o
+poly1305-arm-y := poly1305-core.o poly1305-glue.o
 nhpoly1305-neon-y := nh-neon-core.o nhpoly1305-neon-glue.o
+curve25519-neon-y := curve25519-core.o curve25519-glue.o
 
 ifdef REGENERATE_ARM_CRYPTO
 quiet_cmd_perl = PERL    $@
       cmd_perl = $(PERL) $(<) > $(@)
 
+$(src)/poly1305-core.S_shipped: $(src)/poly1305-armv4.pl
+	$(call cmd,perl)
+
 $(src)/sha256-core.S_shipped: $(src)/sha256-armv4.pl
 	$(call cmd,perl)
 
@@ -67,4 +79,9 @@
 	$(call cmd,perl)
 endif
 
-clean-files += sha256-core.S sha512-core.S
+clean-files += poly1305-core.S sha256-core.S sha512-core.S
+
+# massage the perlasm code a bit so we only get the NEON routine if we need it
+poly1305-aflags-$(CONFIG_CPU_V7) := -U__LINUX_ARM_ARCH__ -D__LINUX_ARM_ARCH__=5
+poly1305-aflags-$(CONFIG_KERNEL_MODE_NEON) := -U__LINUX_ARM_ARCH__ -D__LINUX_ARM_ARCH__=7
+AFLAGS_poly1305-core.o += $(poly1305-aflags-y)
diff --git a/arch/arm/crypto/blake2b-neon-core.S b/arch/arm/crypto/blake2b-neon-core.S
new file mode 100644
index 0000000..0406a18
--- /dev/null
+++ b/arch/arm/crypto/blake2b-neon-core.S
@@ -0,0 +1,347 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * BLAKE2b digest algorithm, NEON accelerated
+ *
+ * Copyright 2020 Google LLC
+ *
+ * Author: Eric Biggers <ebiggers@google.com>
+ */
+
+#include <linux/linkage.h>
+
+	.text
+	.fpu		neon
+
+	// The arguments to blake2b_compress_neon()
+	STATE		.req	r0
+	BLOCK		.req	r1
+	NBLOCKS		.req	r2
+	INC		.req	r3
+
+	// Pointers to the rotation tables
+	ROR24_TABLE	.req	r4
+	ROR16_TABLE	.req	r5
+
+	// The original stack pointer
+	ORIG_SP		.req	r6
+
+	// NEON registers which contain the message words of the current block.
+	// M_0-M_3 are occasionally used for other purposes too.
+	M_0		.req	d16
+	M_1		.req	d17
+	M_2		.req	d18
+	M_3		.req	d19
+	M_4		.req	d20
+	M_5		.req	d21
+	M_6		.req	d22
+	M_7		.req	d23
+	M_8		.req	d24
+	M_9		.req	d25
+	M_10		.req	d26
+	M_11		.req	d27
+	M_12		.req	d28
+	M_13		.req	d29
+	M_14		.req	d30
+	M_15		.req	d31
+
+	.align		4
+	// Tables for computing ror64(x, 24) and ror64(x, 16) using the vtbl.8
+	// instruction.  This is the most efficient way to implement these
+	// rotation amounts with NEON.  (On Cortex-A53 it's the same speed as
+	// vshr.u64 + vsli.u64, while on Cortex-A7 it's faster.)
+.Lror24_table:
+	.byte		3, 4, 5, 6, 7, 0, 1, 2
+.Lror16_table:
+	.byte		2, 3, 4, 5, 6, 7, 0, 1
+	// The BLAKE2b initialization vector
+.Lblake2b_IV:
+	.quad		0x6a09e667f3bcc908, 0xbb67ae8584caa73b
+	.quad		0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1
+	.quad		0x510e527fade682d1, 0x9b05688c2b3e6c1f
+	.quad		0x1f83d9abfb41bd6b, 0x5be0cd19137e2179
+
+// Execute one round of BLAKE2b by updating the state matrix v[0..15] in the
+// NEON registers q0-q7.  The message block is in q8..q15 (M_0-M_15).  The stack
+// pointer points to a 32-byte aligned buffer containing a copy of q8 and q9
+// (M_0-M_3), so that they can be reloaded if they are used as temporary
+// registers.  The macro arguments s0-s15 give the order in which the message
+// words are used in this round.  'final' is 1 if this is the final round.
+.macro	_blake2b_round	s0, s1, s2, s3, s4, s5, s6, s7, \
+			s8, s9, s10, s11, s12, s13, s14, s15, final=0
+
+	// Mix the columns:
+	// (v[0], v[4], v[8], v[12]), (v[1], v[5], v[9], v[13]),
+	// (v[2], v[6], v[10], v[14]), and (v[3], v[7], v[11], v[15]).
+
+	// a += b + m[blake2b_sigma[r][2*i + 0]];
+	vadd.u64	q0, q0, q2
+	vadd.u64	q1, q1, q3
+	vadd.u64	d0, d0, M_\s0
+	vadd.u64	d1, d1, M_\s2
+	vadd.u64	d2, d2, M_\s4
+	vadd.u64	d3, d3, M_\s6
+
+	// d = ror64(d ^ a, 32);
+	veor		q6, q6, q0
+	veor		q7, q7, q1
+	vrev64.32	q6, q6
+	vrev64.32	q7, q7
+
+	// c += d;
+	vadd.u64	q4, q4, q6
+	vadd.u64	q5, q5, q7
+
+	// b = ror64(b ^ c, 24);
+	vld1.8		{M_0}, [ROR24_TABLE, :64]
+	veor		q2, q2, q4
+	veor		q3, q3, q5
+	vtbl.8		d4, {d4}, M_0
+	vtbl.8		d5, {d5}, M_0
+	vtbl.8		d6, {d6}, M_0
+	vtbl.8		d7, {d7}, M_0
+
+	// a += b + m[blake2b_sigma[r][2*i + 1]];
+	//
+	// M_0 got clobbered above, so we have to reload it if any of the four
+	// message words this step needs happens to be M_0.  Otherwise we don't
+	// need to reload it here, as it will just get clobbered again below.
+.if \s1 == 0 || \s3 == 0 || \s5 == 0 || \s7 == 0
+	vld1.8		{M_0}, [sp, :64]
+.endif
+	vadd.u64	q0, q0, q2
+	vadd.u64	q1, q1, q3
+	vadd.u64	d0, d0, M_\s1
+	vadd.u64	d1, d1, M_\s3
+	vadd.u64	d2, d2, M_\s5
+	vadd.u64	d3, d3, M_\s7
+
+	// d = ror64(d ^ a, 16);
+	vld1.8		{M_0}, [ROR16_TABLE, :64]
+	veor		q6, q6, q0
+	veor		q7, q7, q1
+	vtbl.8		d12, {d12}, M_0
+	vtbl.8		d13, {d13}, M_0
+	vtbl.8		d14, {d14}, M_0
+	vtbl.8		d15, {d15}, M_0
+
+	// c += d;
+	vadd.u64	q4, q4, q6
+	vadd.u64	q5, q5, q7
+
+	// b = ror64(b ^ c, 63);
+	//
+	// This rotation amount isn't a multiple of 8, so it has to be
+	// implemented using a pair of shifts, which requires temporary
+	// registers.  Use q8-q9 (M_0-M_3) for this, and reload them afterwards.
+	veor		q8, q2, q4
+	veor		q9, q3, q5
+	vshr.u64	q2, q8, #63
+	vshr.u64	q3, q9, #63
+	vsli.u64	q2, q8, #1
+	vsli.u64	q3, q9, #1
+	vld1.8		{q8-q9}, [sp, :256]
+
+	// Mix the diagonals:
+	// (v[0], v[5], v[10], v[15]), (v[1], v[6], v[11], v[12]),
+	// (v[2], v[7], v[8], v[13]), and (v[3], v[4], v[9], v[14]).
+	//
+	// There are two possible ways to do this: use 'vext' instructions to
+	// shift the rows of the matrix so that the diagonals become columns,
+	// and undo it afterwards; or just use 64-bit operations on 'd'
+	// registers instead of 128-bit operations on 'q' registers.  We use the
+	// latter approach, as it performs much better on Cortex-A7.
+
+	// a += b + m[blake2b_sigma[r][2*i + 0]];
+	vadd.u64	d0, d0, d5
+	vadd.u64	d1, d1, d6
+	vadd.u64	d2, d2, d7
+	vadd.u64	d3, d3, d4
+	vadd.u64	d0, d0, M_\s8
+	vadd.u64	d1, d1, M_\s10
+	vadd.u64	d2, d2, M_\s12
+	vadd.u64	d3, d3, M_\s14
+
+	// d = ror64(d ^ a, 32);
+	veor		d15, d15, d0
+	veor		d12, d12, d1
+	veor		d13, d13, d2
+	veor		d14, d14, d3
+	vrev64.32	d15, d15
+	vrev64.32	d12, d12
+	vrev64.32	d13, d13
+	vrev64.32	d14, d14
+
+	// c += d;
+	vadd.u64	d10, d10, d15
+	vadd.u64	d11, d11, d12
+	vadd.u64	d8, d8, d13
+	vadd.u64	d9, d9, d14
+
+	// b = ror64(b ^ c, 24);
+	vld1.8		{M_0}, [ROR24_TABLE, :64]
+	veor		d5, d5, d10
+	veor		d6, d6, d11
+	veor		d7, d7, d8
+	veor		d4, d4, d9
+	vtbl.8		d5, {d5}, M_0
+	vtbl.8		d6, {d6}, M_0
+	vtbl.8		d7, {d7}, M_0
+	vtbl.8		d4, {d4}, M_0
+
+	// a += b + m[blake2b_sigma[r][2*i + 1]];
+.if \s9 == 0 || \s11 == 0 || \s13 == 0 || \s15 == 0
+	vld1.8		{M_0}, [sp, :64]
+.endif
+	vadd.u64	d0, d0, d5
+	vadd.u64	d1, d1, d6
+	vadd.u64	d2, d2, d7
+	vadd.u64	d3, d3, d4
+	vadd.u64	d0, d0, M_\s9
+	vadd.u64	d1, d1, M_\s11
+	vadd.u64	d2, d2, M_\s13
+	vadd.u64	d3, d3, M_\s15
+
+	// d = ror64(d ^ a, 16);
+	vld1.8		{M_0}, [ROR16_TABLE, :64]
+	veor		d15, d15, d0
+	veor		d12, d12, d1
+	veor		d13, d13, d2
+	veor		d14, d14, d3
+	vtbl.8		d12, {d12}, M_0
+	vtbl.8		d13, {d13}, M_0
+	vtbl.8		d14, {d14}, M_0
+	vtbl.8		d15, {d15}, M_0
+
+	// c += d;
+	vadd.u64	d10, d10, d15
+	vadd.u64	d11, d11, d12
+	vadd.u64	d8, d8, d13
+	vadd.u64	d9, d9, d14
+
+	// b = ror64(b ^ c, 63);
+	veor		d16, d4, d9
+	veor		d17, d5, d10
+	veor		d18, d6, d11
+	veor		d19, d7, d8
+	vshr.u64	q2, q8, #63
+	vshr.u64	q3, q9, #63
+	vsli.u64	q2, q8, #1
+	vsli.u64	q3, q9, #1
+	// Reloading q8-q9 can be skipped on the final round.
+.if ! \final
+	vld1.8		{q8-q9}, [sp, :256]
+.endif
+.endm
+
+//
+// void blake2b_compress_neon(struct blake2b_state *state,
+//			      const u8 *block, size_t nblocks, u32 inc);
+//
+// Only the first three fields of struct blake2b_state are used:
+//	u64 h[8];	(inout)
+//	u64 t[2];	(inout)
+//	u64 f[2];	(in)
+//
+	.align		5
+ENTRY(blake2b_compress_neon)
+	push		{r4-r10}
+
+	// Allocate a 32-byte stack buffer that is 32-byte aligned.
+	mov		ORIG_SP, sp
+	sub		ip, sp, #32
+	bic		ip, ip, #31
+	mov		sp, ip
+
+	adr		ROR24_TABLE, .Lror24_table
+	adr		ROR16_TABLE, .Lror16_table
+
+	mov		ip, STATE
+	vld1.64		{q0-q1}, [ip]!		// Load h[0..3]
+	vld1.64		{q2-q3}, [ip]!		// Load h[4..7]
+.Lnext_block:
+	  adr		r10, .Lblake2b_IV
+	vld1.64		{q14-q15}, [ip]		// Load t[0..1] and f[0..1]
+	vld1.64		{q4-q5}, [r10]!		// Load IV[0..3]
+	  vmov		r7, r8, d28		// Copy t[0] to (r7, r8)
+	vld1.64		{q6-q7}, [r10]		// Load IV[4..7]
+	  adds		r7, r7, INC		// Increment counter
+	bcs		.Lslow_inc_ctr
+	vmov.i32	d28[0], r7
+	vst1.64		{d28}, [ip]		// Update t[0]
+.Linc_ctr_done:
+
+	// Load the next message block and finish initializing the state matrix
+	// 'v'.  Fortunately, there are exactly enough NEON registers to fit the
+	// entire state matrix in q0-q7 and the entire message block in q8-15.
+	//
+	// However, _blake2b_round also needs some extra registers for rotates,
+	// so we have to spill some registers.  It's better to spill the message
+	// registers than the state registers, as the message doesn't change.
+	// Therefore we store a copy of the first 32 bytes of the message block
+	// (q8-q9) in an aligned buffer on the stack so that they can be
+	// reloaded when needed.  (We could just reload directly from the
+	// message buffer, but it's faster to use aligned loads.)
+	vld1.8		{q8-q9}, [BLOCK]!
+	  veor		q6, q6, q14	// v[12..13] = IV[4..5] ^ t[0..1]
+	vld1.8		{q10-q11}, [BLOCK]!
+	  veor		q7, q7, q15	// v[14..15] = IV[6..7] ^ f[0..1]
+	vld1.8		{q12-q13}, [BLOCK]!
+	vst1.8		{q8-q9}, [sp, :256]
+	  mov		ip, STATE
+	vld1.8		{q14-q15}, [BLOCK]!
+
+	// Execute the rounds.  Each round is provided the order in which it
+	// needs to use the message words.
+	_blake2b_round	0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+	_blake2b_round	14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3
+	_blake2b_round	11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4
+	_blake2b_round	7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8
+	_blake2b_round	9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13
+	_blake2b_round	2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9
+	_blake2b_round	12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11
+	_blake2b_round	13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10
+	_blake2b_round	6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5
+	_blake2b_round	10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0
+	_blake2b_round	0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+	_blake2b_round	14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 \
+			final=1
+
+	// Fold the final state matrix into the hash chaining value:
+	//
+	//	for (i = 0; i < 8; i++)
+	//		h[i] ^= v[i] ^ v[i + 8];
+	//
+	  vld1.64	{q8-q9}, [ip]!		// Load old h[0..3]
+	veor		q0, q0, q4		// v[0..1] ^= v[8..9]
+	veor		q1, q1, q5		// v[2..3] ^= v[10..11]
+	  vld1.64	{q10-q11}, [ip]		// Load old h[4..7]
+	veor		q2, q2, q6		// v[4..5] ^= v[12..13]
+	veor		q3, q3, q7		// v[6..7] ^= v[14..15]
+	veor		q0, q0, q8		// v[0..1] ^= h[0..1]
+	veor		q1, q1, q9		// v[2..3] ^= h[2..3]
+	  mov		ip, STATE
+	  subs		NBLOCKS, NBLOCKS, #1	// nblocks--
+	  vst1.64	{q0-q1}, [ip]!		// Store new h[0..3]
+	veor		q2, q2, q10		// v[4..5] ^= h[4..5]
+	veor		q3, q3, q11		// v[6..7] ^= h[6..7]
+	  vst1.64	{q2-q3}, [ip]!		// Store new h[4..7]
+
+	// Advance to the next block, if there is one.
+	bne		.Lnext_block		// nblocks != 0?
+
+	mov		sp, ORIG_SP
+	pop		{r4-r10}
+	mov		pc, lr
+
+.Lslow_inc_ctr:
+	// Handle the case where the counter overflowed its low 32 bits, by
+	// carrying the overflow bit into the full 128-bit counter.
+	vmov		r9, r10, d29
+	adcs		r8, r8, #0
+	adcs		r9, r9, #0
+	adc		r10, r10, #0
+	vmov		d28, r7, r8
+	vmov		d29, r9, r10
+	vst1.64		{q14}, [ip]		// Update t[0] and t[1]
+	b		.Linc_ctr_done
+ENDPROC(blake2b_compress_neon)
diff --git a/arch/arm/crypto/blake2b-neon-glue.c b/arch/arm/crypto/blake2b-neon-glue.c
new file mode 100644
index 0000000..4b59d02
--- /dev/null
+++ b/arch/arm/crypto/blake2b-neon-glue.c
@@ -0,0 +1,105 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * BLAKE2b digest algorithm, NEON accelerated
+ *
+ * Copyright 2020 Google LLC
+ */
+
+#include <crypto/internal/blake2b.h>
+#include <crypto/internal/hash.h>
+#include <crypto/internal/simd.h>
+
+#include <linux/module.h>
+#include <linux/sizes.h>
+
+#include <asm/neon.h>
+#include <asm/simd.h>
+
+asmlinkage void blake2b_compress_neon(struct blake2b_state *state,
+				      const u8 *block, size_t nblocks, u32 inc);
+
+static void blake2b_compress_arch(struct blake2b_state *state,
+				  const u8 *block, size_t nblocks, u32 inc)
+{
+	if (!crypto_simd_usable()) {
+		blake2b_compress_generic(state, block, nblocks, inc);
+		return;
+	}
+
+	do {
+		const size_t blocks = min_t(size_t, nblocks,
+					    SZ_4K / BLAKE2B_BLOCK_SIZE);
+
+		kernel_neon_begin();
+		blake2b_compress_neon(state, block, blocks, inc);
+		kernel_neon_end();
+
+		nblocks -= blocks;
+		block += blocks * BLAKE2B_BLOCK_SIZE;
+	} while (nblocks);
+}
+
+static int crypto_blake2b_update_neon(struct shash_desc *desc,
+				      const u8 *in, unsigned int inlen)
+{
+	return crypto_blake2b_update(desc, in, inlen, blake2b_compress_arch);
+}
+
+static int crypto_blake2b_final_neon(struct shash_desc *desc, u8 *out)
+{
+	return crypto_blake2b_final(desc, out, blake2b_compress_arch);
+}
+
+#define BLAKE2B_ALG(name, driver_name, digest_size)			\
+	{								\
+		.base.cra_name		= name,				\
+		.base.cra_driver_name	= driver_name,			\
+		.base.cra_priority	= 200,				\
+		.base.cra_flags		= CRYPTO_ALG_OPTIONAL_KEY,	\
+		.base.cra_blocksize	= BLAKE2B_BLOCK_SIZE,		\
+		.base.cra_ctxsize	= sizeof(struct blake2b_tfm_ctx), \
+		.base.cra_module	= THIS_MODULE,			\
+		.digestsize		= digest_size,			\
+		.setkey			= crypto_blake2b_setkey,	\
+		.init			= crypto_blake2b_init,		\
+		.update			= crypto_blake2b_update_neon,	\
+		.final			= crypto_blake2b_final_neon,	\
+		.descsize		= sizeof(struct blake2b_state),	\
+	}
+
+static struct shash_alg blake2b_neon_algs[] = {
+	BLAKE2B_ALG("blake2b-160", "blake2b-160-neon", BLAKE2B_160_HASH_SIZE),
+	BLAKE2B_ALG("blake2b-256", "blake2b-256-neon", BLAKE2B_256_HASH_SIZE),
+	BLAKE2B_ALG("blake2b-384", "blake2b-384-neon", BLAKE2B_384_HASH_SIZE),
+	BLAKE2B_ALG("blake2b-512", "blake2b-512-neon", BLAKE2B_512_HASH_SIZE),
+};
+
+static int __init blake2b_neon_mod_init(void)
+{
+	if (!(elf_hwcap & HWCAP_NEON))
+		return -ENODEV;
+
+	return crypto_register_shashes(blake2b_neon_algs,
+				       ARRAY_SIZE(blake2b_neon_algs));
+}
+
+static void __exit blake2b_neon_mod_exit(void)
+{
+	crypto_unregister_shashes(blake2b_neon_algs,
+				  ARRAY_SIZE(blake2b_neon_algs));
+}
+
+module_init(blake2b_neon_mod_init);
+module_exit(blake2b_neon_mod_exit);
+
+MODULE_DESCRIPTION("BLAKE2b digest algorithm, NEON accelerated");
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Eric Biggers <ebiggers@google.com>");
+MODULE_ALIAS_CRYPTO("blake2b-160");
+MODULE_ALIAS_CRYPTO("blake2b-160-neon");
+MODULE_ALIAS_CRYPTO("blake2b-256");
+MODULE_ALIAS_CRYPTO("blake2b-256-neon");
+MODULE_ALIAS_CRYPTO("blake2b-384");
+MODULE_ALIAS_CRYPTO("blake2b-384-neon");
+MODULE_ALIAS_CRYPTO("blake2b-512");
+MODULE_ALIAS_CRYPTO("blake2b-512-neon");
diff --git a/arch/arm/crypto/blake2s-core.S b/arch/arm/crypto/blake2s-core.S
new file mode 100644
index 0000000..bed897e
--- /dev/null
+++ b/arch/arm/crypto/blake2s-core.S
@@ -0,0 +1,285 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * BLAKE2s digest algorithm, ARM scalar implementation
+ *
+ * Copyright 2020 Google LLC
+ *
+ * Author: Eric Biggers <ebiggers@google.com>
+ */
+
+#include <linux/linkage.h>
+
+	// Registers used to hold message words temporarily.  There aren't
+	// enough ARM registers to hold the whole message block, so we have to
+	// load the words on-demand.
+	M_0		.req	r12
+	M_1		.req	r14
+
+// The BLAKE2s initialization vector
+.Lblake2s_IV:
+	.word	0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A
+	.word	0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19
+
+.macro __ldrd		a, b, src, offset
+#if __LINUX_ARM_ARCH__ >= 6
+	ldrd		\a, \b, [\src, #\offset]
+#else
+	ldr		\a, [\src, #\offset]
+	ldr		\b, [\src, #\offset + 4]
+#endif
+.endm
+
+.macro __strd		a, b, dst, offset
+#if __LINUX_ARM_ARCH__ >= 6
+	strd		\a, \b, [\dst, #\offset]
+#else
+	str		\a, [\dst, #\offset]
+	str		\b, [\dst, #\offset + 4]
+#endif
+.endm
+
+// Execute a quarter-round of BLAKE2s by mixing two columns or two diagonals.
+// (a0, b0, c0, d0) and (a1, b1, c1, d1) give the registers containing the two
+// columns/diagonals.  s0-s1 are the word offsets to the message words the first
+// column/diagonal needs, and likewise s2-s3 for the second column/diagonal.
+// M_0 and M_1 are free to use, and the message block can be found at sp + 32.
+//
+// Note that to save instructions, the rotations don't happen when the
+// pseudocode says they should, but rather they are delayed until the values are
+// used.  See the comment above _blake2s_round().
+.macro _blake2s_quarterround  a0, b0, c0, d0,  a1, b1, c1, d1,  s0, s1, s2, s3
+
+	ldr		M_0, [sp, #32 + 4 * \s0]
+	ldr		M_1, [sp, #32 + 4 * \s2]
+
+	// a += b + m[blake2s_sigma[r][2*i + 0]];
+	add		\a0, \a0, \b0, ror #brot
+	add		\a1, \a1, \b1, ror #brot
+	add		\a0, \a0, M_0
+	add		\a1, \a1, M_1
+
+	// d = ror32(d ^ a, 16);
+	eor		\d0, \a0, \d0, ror #drot
+	eor		\d1, \a1, \d1, ror #drot
+
+	// c += d;
+	add		\c0, \c0, \d0, ror #16
+	add		\c1, \c1, \d1, ror #16
+
+	// b = ror32(b ^ c, 12);
+	eor		\b0, \c0, \b0, ror #brot
+	eor		\b1, \c1, \b1, ror #brot
+
+	ldr		M_0, [sp, #32 + 4 * \s1]
+	ldr		M_1, [sp, #32 + 4 * \s3]
+
+	// a += b + m[blake2s_sigma[r][2*i + 1]];
+	add		\a0, \a0, \b0, ror #12
+	add		\a1, \a1, \b1, ror #12
+	add		\a0, \a0, M_0
+	add		\a1, \a1, M_1
+
+	// d = ror32(d ^ a, 8);
+	eor		\d0, \a0, \d0, ror#16
+	eor		\d1, \a1, \d1, ror#16
+
+	// c += d;
+	add		\c0, \c0, \d0, ror#8
+	add		\c1, \c1, \d1, ror#8
+
+	// b = ror32(b ^ c, 7);
+	eor		\b0, \c0, \b0, ror#12
+	eor		\b1, \c1, \b1, ror#12
+.endm
+
+// Execute one round of BLAKE2s by updating the state matrix v[0..15].  v[0..9]
+// are in r0..r9.  The stack pointer points to 8 bytes of scratch space for
+// spilling v[8..9], then to v[9..15], then to the message block.  r10-r12 and
+// r14 are free to use.  The macro arguments s0-s15 give the order in which the
+// message words are used in this round.
+//
+// All rotates are performed using the implicit rotate operand accepted by the
+// 'add' and 'eor' instructions.  This is faster than using explicit rotate
+// instructions.  To make this work, we allow the values in the second and last
+// rows of the BLAKE2s state matrix (rows 'b' and 'd') to temporarily have the
+// wrong rotation amount.  The rotation amount is then fixed up just in time
+// when the values are used.  'brot' is the number of bits the values in row 'b'
+// need to be rotated right to arrive at the correct values, and 'drot'
+// similarly for row 'd'.  (brot, drot) start out as (0, 0) but we make it such
+// that they end up as (7, 8) after every round.
+.macro	_blake2s_round	s0, s1, s2, s3, s4, s5, s6, s7, \
+			s8, s9, s10, s11, s12, s13, s14, s15
+
+	// Mix first two columns:
+	// (v[0], v[4], v[8], v[12]) and (v[1], v[5], v[9], v[13]).
+	__ldrd		r10, r11, sp, 16	// load v[12] and v[13]
+	_blake2s_quarterround	r0, r4, r8, r10,  r1, r5, r9, r11, \
+				\s0, \s1, \s2, \s3
+	__strd		r8, r9, sp, 0
+	__strd		r10, r11, sp, 16
+
+	// Mix second two columns:
+	// (v[2], v[6], v[10], v[14]) and (v[3], v[7], v[11], v[15]).
+	__ldrd		r8, r9, sp, 8		// load v[10] and v[11]
+	__ldrd		r10, r11, sp, 24	// load v[14] and v[15]
+	_blake2s_quarterround	r2, r6, r8, r10,  r3, r7, r9, r11, \
+				\s4, \s5, \s6, \s7
+	str		r10, [sp, #24]		// store v[14]
+	// v[10], v[11], and v[15] are used below, so no need to store them yet.
+
+	.set brot, 7
+	.set drot, 8
+
+	// Mix first two diagonals:
+	// (v[0], v[5], v[10], v[15]) and (v[1], v[6], v[11], v[12]).
+	ldr		r10, [sp, #16]		// load v[12]
+	_blake2s_quarterround	r0, r5, r8, r11,  r1, r6, r9, r10, \
+				\s8, \s9, \s10, \s11
+	__strd		r8, r9, sp, 8
+	str		r11, [sp, #28]
+	str		r10, [sp, #16]
+
+	// Mix second two diagonals:
+	// (v[2], v[7], v[8], v[13]) and (v[3], v[4], v[9], v[14]).
+	__ldrd		r8, r9, sp, 0		// load v[8] and v[9]
+	__ldrd		r10, r11, sp, 20	// load v[13] and v[14]
+	_blake2s_quarterround	r2, r7, r8, r10,  r3, r4, r9, r11, \
+				\s12, \s13, \s14, \s15
+	__strd		r10, r11, sp, 20
+.endm
+
+//
+// void blake2s_compress_arch(struct blake2s_state *state,
+//			      const u8 *block, size_t nblocks, u32 inc);
+//
+// Only the first three fields of struct blake2s_state are used:
+//	u32 h[8];	(inout)
+//	u32 t[2];	(inout)
+//	u32 f[2];	(in)
+//
+	.align		5
+ENTRY(blake2s_compress_arch)
+	push		{r0-r2,r4-r11,lr}	// keep this an even number
+
+.Lnext_block:
+	// r0 is 'state'
+	// r1 is 'block'
+	// r3 is 'inc'
+
+	// Load and increment the counter t[0..1].
+	__ldrd		r10, r11, r0, 32
+	adds		r10, r10, r3
+	adc		r11, r11, #0
+	__strd		r10, r11, r0, 32
+
+	// _blake2s_round is very short on registers, so copy the message block
+	// to the stack to save a register during the rounds.  This also has the
+	// advantage that misalignment only needs to be dealt with in one place.
+	sub		sp, sp, #64
+	mov		r12, sp
+	tst		r1, #3
+	bne		.Lcopy_block_misaligned
+	ldmia		r1!, {r2-r9}
+	stmia		r12!, {r2-r9}
+	ldmia		r1!, {r2-r9}
+	stmia		r12, {r2-r9}
+.Lcopy_block_done:
+	str		r1, [sp, #68]		// Update message pointer
+
+	// Calculate v[8..15].  Push v[9..15] onto the stack, and leave space
+	// for spilling v[8..9].  Leave v[8..9] in r8-r9.
+	mov		r14, r0			// r14 = state
+	adr		r12, .Lblake2s_IV
+	ldmia		r12!, {r8-r9}		// load IV[0..1]
+	__ldrd		r0, r1, r14, 40		// load f[0..1]
+	ldm		r12, {r2-r7}		// load IV[3..7]
+	eor		r4, r4, r10		// v[12] = IV[4] ^ t[0]
+	eor		r5, r5, r11		// v[13] = IV[5] ^ t[1]
+	eor		r6, r6, r0		// v[14] = IV[6] ^ f[0]
+	eor		r7, r7, r1		// v[15] = IV[7] ^ f[1]
+	push		{r2-r7}			// push v[9..15]
+	sub		sp, sp, #8		// leave space for v[8..9]
+
+	// Load h[0..7] == v[0..7].
+	ldm		r14, {r0-r7}
+
+	// Execute the rounds.  Each round is provided the order in which it
+	// needs to use the message words.
+	.set brot, 0
+	.set drot, 0
+	_blake2s_round	0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+	_blake2s_round	14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3
+	_blake2s_round	11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4
+	_blake2s_round	7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8
+	_blake2s_round	9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13
+	_blake2s_round	2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9
+	_blake2s_round	12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11
+	_blake2s_round	13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10
+	_blake2s_round	6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5
+	_blake2s_round	10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0
+
+	// Fold the final state matrix into the hash chaining value:
+	//
+	//	for (i = 0; i < 8; i++)
+	//		h[i] ^= v[i] ^ v[i + 8];
+	//
+	ldr		r14, [sp, #96]		// r14 = &h[0]
+	add		sp, sp, #8		// v[8..9] are already loaded.
+	pop		{r10-r11}		// load v[10..11]
+	eor		r0, r0, r8
+	eor		r1, r1, r9
+	eor		r2, r2, r10
+	eor		r3, r3, r11
+	ldm		r14, {r8-r11}		// load h[0..3]
+	eor		r0, r0, r8
+	eor		r1, r1, r9
+	eor		r2, r2, r10
+	eor		r3, r3, r11
+	stmia		r14!, {r0-r3}		// store new h[0..3]
+	ldm		r14, {r0-r3}		// load old h[4..7]
+	pop		{r8-r11}		// load v[12..15]
+	eor		r0, r0, r4, ror #brot
+	eor		r1, r1, r5, ror #brot
+	eor		r2, r2, r6, ror #brot
+	eor		r3, r3, r7, ror #brot
+	eor		r0, r0, r8, ror #drot
+	eor		r1, r1, r9, ror #drot
+	eor		r2, r2, r10, ror #drot
+	eor		r3, r3, r11, ror #drot
+	  add		sp, sp, #64		// skip copy of message block
+	stm		r14, {r0-r3}		// store new h[4..7]
+
+	// Advance to the next block, if there is one.  Note that if there are
+	// multiple blocks, then 'inc' (the counter increment amount) must be
+	// 64.  So we can simply set it to 64 without re-loading it.
+	ldm		sp, {r0, r1, r2}	// load (state, block, nblocks)
+	mov		r3, #64			// set 'inc'
+	subs		r2, r2, #1		// nblocks--
+	str		r2, [sp, #8]
+	bne		.Lnext_block		// nblocks != 0?
+
+	pop		{r0-r2,r4-r11,pc}
+
+	// The next message block (pointed to by r1) isn't 4-byte aligned, so it
+	// can't be loaded using ldmia.  Copy it to the stack buffer (pointed to
+	// by r12) using an alternative method.  r2-r9 are free to use.
+.Lcopy_block_misaligned:
+	mov		r2, #64
+1:
+#ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+	ldr		r3, [r1], #4
+#else
+	ldrb		r3, [r1, #0]
+	ldrb		r4, [r1, #1]
+	ldrb		r5, [r1, #2]
+	ldrb		r6, [r1, #3]
+	add		r1, r1, #4
+	orr		r3, r3, r4, lsl #8
+	orr		r3, r3, r5, lsl #16
+	orr		r3, r3, r6, lsl #24
+#endif
+	subs		r2, r2, #4
+	str		r3, [r12], #4
+	bne		1b
+	b		.Lcopy_block_done
+ENDPROC(blake2s_compress_arch)
diff --git a/arch/arm/crypto/blake2s-glue.c b/arch/arm/crypto/blake2s-glue.c
new file mode 100644
index 0000000..f2cc1e5
--- /dev/null
+++ b/arch/arm/crypto/blake2s-glue.c
@@ -0,0 +1,78 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * BLAKE2s digest algorithm, ARM scalar implementation
+ *
+ * Copyright 2020 Google LLC
+ */
+
+#include <crypto/internal/blake2s.h>
+#include <crypto/internal/hash.h>
+
+#include <linux/module.h>
+
+/* defined in blake2s-core.S */
+EXPORT_SYMBOL(blake2s_compress_arch);
+
+static int crypto_blake2s_update_arm(struct shash_desc *desc,
+				     const u8 *in, unsigned int inlen)
+{
+	return crypto_blake2s_update(desc, in, inlen, blake2s_compress_arch);
+}
+
+static int crypto_blake2s_final_arm(struct shash_desc *desc, u8 *out)
+{
+	return crypto_blake2s_final(desc, out, blake2s_compress_arch);
+}
+
+#define BLAKE2S_ALG(name, driver_name, digest_size)			\
+	{								\
+		.base.cra_name		= name,				\
+		.base.cra_driver_name	= driver_name,			\
+		.base.cra_priority	= 200,				\
+		.base.cra_flags		= CRYPTO_ALG_OPTIONAL_KEY,	\
+		.base.cra_blocksize	= BLAKE2S_BLOCK_SIZE,		\
+		.base.cra_ctxsize	= sizeof(struct blake2s_tfm_ctx), \
+		.base.cra_module	= THIS_MODULE,			\
+		.digestsize		= digest_size,			\
+		.setkey			= crypto_blake2s_setkey,	\
+		.init			= crypto_blake2s_init,		\
+		.update			= crypto_blake2s_update_arm,	\
+		.final			= crypto_blake2s_final_arm,	\
+		.descsize		= sizeof(struct blake2s_state),	\
+	}
+
+static struct shash_alg blake2s_arm_algs[] = {
+	BLAKE2S_ALG("blake2s-128", "blake2s-128-arm", BLAKE2S_128_HASH_SIZE),
+	BLAKE2S_ALG("blake2s-160", "blake2s-160-arm", BLAKE2S_160_HASH_SIZE),
+	BLAKE2S_ALG("blake2s-224", "blake2s-224-arm", BLAKE2S_224_HASH_SIZE),
+	BLAKE2S_ALG("blake2s-256", "blake2s-256-arm", BLAKE2S_256_HASH_SIZE),
+};
+
+static int __init blake2s_arm_mod_init(void)
+{
+	return IS_REACHABLE(CONFIG_CRYPTO_HASH) ?
+		crypto_register_shashes(blake2s_arm_algs,
+					ARRAY_SIZE(blake2s_arm_algs)) : 0;
+}
+
+static void __exit blake2s_arm_mod_exit(void)
+{
+	if (IS_REACHABLE(CONFIG_CRYPTO_HASH))
+		crypto_unregister_shashes(blake2s_arm_algs,
+					  ARRAY_SIZE(blake2s_arm_algs));
+}
+
+module_init(blake2s_arm_mod_init);
+module_exit(blake2s_arm_mod_exit);
+
+MODULE_DESCRIPTION("BLAKE2s digest algorithm, ARM scalar implementation");
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Eric Biggers <ebiggers@google.com>");
+MODULE_ALIAS_CRYPTO("blake2s-128");
+MODULE_ALIAS_CRYPTO("blake2s-128-arm");
+MODULE_ALIAS_CRYPTO("blake2s-160");
+MODULE_ALIAS_CRYPTO("blake2s-160-arm");
+MODULE_ALIAS_CRYPTO("blake2s-224");
+MODULE_ALIAS_CRYPTO("blake2s-224-arm");
+MODULE_ALIAS_CRYPTO("blake2s-256");
+MODULE_ALIAS_CRYPTO("blake2s-256-arm");
diff --git a/arch/arm/crypto/chacha-glue.c b/arch/arm/crypto/chacha-glue.c
new file mode 100644
index 0000000..cd131b4
--- /dev/null
+++ b/arch/arm/crypto/chacha-glue.c
@@ -0,0 +1,357 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * ARM NEON accelerated ChaCha and XChaCha stream ciphers,
+ * including ChaCha20 (RFC7539)
+ *
+ * Copyright (C) 2016-2019 Linaro, Ltd. <ard.biesheuvel@linaro.org>
+ * Copyright (C) 2015 Martin Willi
+ */
+
+#include <crypto/algapi.h>
+#include <crypto/internal/chacha.h>
+#include <crypto/internal/simd.h>
+#include <crypto/internal/skcipher.h>
+#include <linux/jump_label.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+
+#include <asm/cputype.h>
+#include <asm/hwcap.h>
+#include <asm/neon.h>
+#include <asm/simd.h>
+
+asmlinkage void chacha_block_xor_neon(const u32 *state, u8 *dst, const u8 *src,
+				      int nrounds);
+asmlinkage void chacha_4block_xor_neon(const u32 *state, u8 *dst, const u8 *src,
+				       int nrounds);
+asmlinkage void hchacha_block_arm(const u32 *state, u32 *out, int nrounds);
+asmlinkage void hchacha_block_neon(const u32 *state, u32 *out, int nrounds);
+
+asmlinkage void chacha_doarm(u8 *dst, const u8 *src, unsigned int bytes,
+			     const u32 *state, int nrounds);
+
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(use_neon);
+
+static inline bool neon_usable(void)
+{
+	return static_branch_likely(&use_neon) && crypto_simd_usable();
+}
+
+static void chacha_doneon(u32 *state, u8 *dst, const u8 *src,
+			  unsigned int bytes, int nrounds)
+{
+	u8 buf[CHACHA_BLOCK_SIZE];
+
+	while (bytes >= CHACHA_BLOCK_SIZE * 4) {
+		chacha_4block_xor_neon(state, dst, src, nrounds);
+		bytes -= CHACHA_BLOCK_SIZE * 4;
+		src += CHACHA_BLOCK_SIZE * 4;
+		dst += CHACHA_BLOCK_SIZE * 4;
+		state[12] += 4;
+	}
+	while (bytes >= CHACHA_BLOCK_SIZE) {
+		chacha_block_xor_neon(state, dst, src, nrounds);
+		bytes -= CHACHA_BLOCK_SIZE;
+		src += CHACHA_BLOCK_SIZE;
+		dst += CHACHA_BLOCK_SIZE;
+		state[12]++;
+	}
+	if (bytes) {
+		memcpy(buf, src, bytes);
+		chacha_block_xor_neon(state, buf, buf, nrounds);
+		memcpy(dst, buf, bytes);
+	}
+}
+
+void hchacha_block_arch(const u32 *state, u32 *stream, int nrounds)
+{
+	if (!IS_ENABLED(CONFIG_KERNEL_MODE_NEON) || !neon_usable()) {
+		hchacha_block_arm(state, stream, nrounds);
+	} else {
+		kernel_neon_begin();
+		hchacha_block_neon(state, stream, nrounds);
+		kernel_neon_end();
+	}
+}
+EXPORT_SYMBOL(hchacha_block_arch);
+
+void chacha_init_arch(u32 *state, const u32 *key, const u8 *iv)
+{
+	chacha_init_generic(state, key, iv);
+}
+EXPORT_SYMBOL(chacha_init_arch);
+
+void chacha_crypt_arch(u32 *state, u8 *dst, const u8 *src, unsigned int bytes,
+		       int nrounds)
+{
+	if (!IS_ENABLED(CONFIG_KERNEL_MODE_NEON) || !neon_usable() ||
+	    bytes <= CHACHA_BLOCK_SIZE) {
+		chacha_doarm(dst, src, bytes, state, nrounds);
+		state[12] += DIV_ROUND_UP(bytes, CHACHA_BLOCK_SIZE);
+		return;
+	}
+
+	do {
+		unsigned int todo = min_t(unsigned int, bytes, SZ_4K);
+
+		kernel_neon_begin();
+		chacha_doneon(state, dst, src, todo, nrounds);
+		kernel_neon_end();
+
+		bytes -= todo;
+		src += todo;
+		dst += todo;
+	} while (bytes);
+}
+EXPORT_SYMBOL(chacha_crypt_arch);
+
+static int chacha_stream_xor(struct skcipher_request *req,
+			     const struct chacha_ctx *ctx, const u8 *iv,
+			     bool neon)
+{
+	struct skcipher_walk walk;
+	u32 state[16];
+	int err;
+
+	err = skcipher_walk_virt(&walk, req, false);
+
+	chacha_init_generic(state, ctx->key, iv);
+
+	while (walk.nbytes > 0) {
+		unsigned int nbytes = walk.nbytes;
+
+		if (nbytes < walk.total)
+			nbytes = round_down(nbytes, walk.stride);
+
+		if (!IS_ENABLED(CONFIG_KERNEL_MODE_NEON) || !neon) {
+			chacha_doarm(walk.dst.virt.addr, walk.src.virt.addr,
+				     nbytes, state, ctx->nrounds);
+			state[12] += DIV_ROUND_UP(nbytes, CHACHA_BLOCK_SIZE);
+		} else {
+			kernel_neon_begin();
+			chacha_doneon(state, walk.dst.virt.addr,
+				      walk.src.virt.addr, nbytes, ctx->nrounds);
+			kernel_neon_end();
+		}
+		err = skcipher_walk_done(&walk, walk.nbytes - nbytes);
+	}
+
+	return err;
+}
+
+static int do_chacha(struct skcipher_request *req, bool neon)
+{
+	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
+	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
+
+	return chacha_stream_xor(req, ctx, req->iv, neon);
+}
+
+static int chacha_arm(struct skcipher_request *req)
+{
+	return do_chacha(req, false);
+}
+
+static int chacha_neon(struct skcipher_request *req)
+{
+	return do_chacha(req, neon_usable());
+}
+
+static int do_xchacha(struct skcipher_request *req, bool neon)
+{
+	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
+	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
+	struct chacha_ctx subctx;
+	u32 state[16];
+	u8 real_iv[16];
+
+	chacha_init_generic(state, ctx->key, req->iv);
+
+	if (!IS_ENABLED(CONFIG_KERNEL_MODE_NEON) || !neon) {
+		hchacha_block_arm(state, subctx.key, ctx->nrounds);
+	} else {
+		kernel_neon_begin();
+		hchacha_block_neon(state, subctx.key, ctx->nrounds);
+		kernel_neon_end();
+	}
+	subctx.nrounds = ctx->nrounds;
+
+	memcpy(&real_iv[0], req->iv + 24, 8);
+	memcpy(&real_iv[8], req->iv + 16, 8);
+	return chacha_stream_xor(req, &subctx, real_iv, neon);
+}
+
+static int xchacha_arm(struct skcipher_request *req)
+{
+	return do_xchacha(req, false);
+}
+
+static int xchacha_neon(struct skcipher_request *req)
+{
+	return do_xchacha(req, neon_usable());
+}
+
+static struct skcipher_alg arm_algs[] = {
+	{
+		.base.cra_name		= "chacha20",
+		.base.cra_driver_name	= "chacha20-arm",
+		.base.cra_priority	= 200,
+		.base.cra_blocksize	= 1,
+		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
+		.base.cra_module	= THIS_MODULE,
+
+		.min_keysize		= CHACHA_KEY_SIZE,
+		.max_keysize		= CHACHA_KEY_SIZE,
+		.ivsize			= CHACHA_IV_SIZE,
+		.chunksize		= CHACHA_BLOCK_SIZE,
+		.setkey			= chacha20_setkey,
+		.encrypt		= chacha_arm,
+		.decrypt		= chacha_arm,
+	}, {
+		.base.cra_name		= "xchacha20",
+		.base.cra_driver_name	= "xchacha20-arm",
+		.base.cra_priority	= 200,
+		.base.cra_blocksize	= 1,
+		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
+		.base.cra_module	= THIS_MODULE,
+
+		.min_keysize		= CHACHA_KEY_SIZE,
+		.max_keysize		= CHACHA_KEY_SIZE,
+		.ivsize			= XCHACHA_IV_SIZE,
+		.chunksize		= CHACHA_BLOCK_SIZE,
+		.setkey			= chacha20_setkey,
+		.encrypt		= xchacha_arm,
+		.decrypt		= xchacha_arm,
+	}, {
+		.base.cra_name		= "xchacha12",
+		.base.cra_driver_name	= "xchacha12-arm",
+		.base.cra_priority	= 200,
+		.base.cra_blocksize	= 1,
+		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
+		.base.cra_module	= THIS_MODULE,
+
+		.min_keysize		= CHACHA_KEY_SIZE,
+		.max_keysize		= CHACHA_KEY_SIZE,
+		.ivsize			= XCHACHA_IV_SIZE,
+		.chunksize		= CHACHA_BLOCK_SIZE,
+		.setkey			= chacha12_setkey,
+		.encrypt		= xchacha_arm,
+		.decrypt		= xchacha_arm,
+	},
+};
+
+static struct skcipher_alg neon_algs[] = {
+	{
+		.base.cra_name		= "chacha20",
+		.base.cra_driver_name	= "chacha20-neon",
+		.base.cra_priority	= 300,
+		.base.cra_blocksize	= 1,
+		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
+		.base.cra_module	= THIS_MODULE,
+
+		.min_keysize		= CHACHA_KEY_SIZE,
+		.max_keysize		= CHACHA_KEY_SIZE,
+		.ivsize			= CHACHA_IV_SIZE,
+		.chunksize		= CHACHA_BLOCK_SIZE,
+		.walksize		= 4 * CHACHA_BLOCK_SIZE,
+		.setkey			= chacha20_setkey,
+		.encrypt		= chacha_neon,
+		.decrypt		= chacha_neon,
+	}, {
+		.base.cra_name		= "xchacha20",
+		.base.cra_driver_name	= "xchacha20-neon",
+		.base.cra_priority	= 300,
+		.base.cra_blocksize	= 1,
+		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
+		.base.cra_module	= THIS_MODULE,
+
+		.min_keysize		= CHACHA_KEY_SIZE,
+		.max_keysize		= CHACHA_KEY_SIZE,
+		.ivsize			= XCHACHA_IV_SIZE,
+		.chunksize		= CHACHA_BLOCK_SIZE,
+		.walksize		= 4 * CHACHA_BLOCK_SIZE,
+		.setkey			= chacha20_setkey,
+		.encrypt		= xchacha_neon,
+		.decrypt		= xchacha_neon,
+	}, {
+		.base.cra_name		= "xchacha12",
+		.base.cra_driver_name	= "xchacha12-neon",
+		.base.cra_priority	= 300,
+		.base.cra_blocksize	= 1,
+		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
+		.base.cra_module	= THIS_MODULE,
+
+		.min_keysize		= CHACHA_KEY_SIZE,
+		.max_keysize		= CHACHA_KEY_SIZE,
+		.ivsize			= XCHACHA_IV_SIZE,
+		.chunksize		= CHACHA_BLOCK_SIZE,
+		.walksize		= 4 * CHACHA_BLOCK_SIZE,
+		.setkey			= chacha12_setkey,
+		.encrypt		= xchacha_neon,
+		.decrypt		= xchacha_neon,
+	}
+};
+
+static int __init chacha_simd_mod_init(void)
+{
+	int err = 0;
+
+	if (IS_REACHABLE(CONFIG_CRYPTO_BLKCIPHER)) {
+		err = crypto_register_skciphers(arm_algs, ARRAY_SIZE(arm_algs));
+		if (err)
+			return err;
+	}
+
+	if (IS_ENABLED(CONFIG_KERNEL_MODE_NEON) && (elf_hwcap & HWCAP_NEON)) {
+		int i;
+
+		switch (read_cpuid_part()) {
+		case ARM_CPU_PART_CORTEX_A7:
+		case ARM_CPU_PART_CORTEX_A5:
+			/*
+			 * The Cortex-A7 and Cortex-A5 do not perform well with
+			 * the NEON implementation but do incredibly with the
+			 * scalar one and use less power.
+			 */
+			for (i = 0; i < ARRAY_SIZE(neon_algs); i++)
+				neon_algs[i].base.cra_priority = 0;
+			break;
+		default:
+			static_branch_enable(&use_neon);
+		}
+
+		if (IS_REACHABLE(CONFIG_CRYPTO_BLKCIPHER)) {
+			err = crypto_register_skciphers(neon_algs, ARRAY_SIZE(neon_algs));
+			if (err)
+				crypto_unregister_skciphers(arm_algs, ARRAY_SIZE(arm_algs));
+		}
+	}
+	return err;
+}
+
+static void __exit chacha_simd_mod_fini(void)
+{
+	if (IS_REACHABLE(CONFIG_CRYPTO_BLKCIPHER)) {
+		crypto_unregister_skciphers(arm_algs, ARRAY_SIZE(arm_algs));
+		if (IS_ENABLED(CONFIG_KERNEL_MODE_NEON) && (elf_hwcap & HWCAP_NEON))
+			crypto_unregister_skciphers(neon_algs, ARRAY_SIZE(neon_algs));
+	}
+}
+
+module_init(chacha_simd_mod_init);
+module_exit(chacha_simd_mod_fini);
+
+MODULE_DESCRIPTION("ChaCha and XChaCha stream ciphers (scalar and NEON accelerated)");
+MODULE_AUTHOR("Ard Biesheuvel <ard.biesheuvel@linaro.org>");
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS_CRYPTO("chacha20");
+MODULE_ALIAS_CRYPTO("chacha20-arm");
+MODULE_ALIAS_CRYPTO("xchacha20");
+MODULE_ALIAS_CRYPTO("xchacha20-arm");
+MODULE_ALIAS_CRYPTO("xchacha12");
+MODULE_ALIAS_CRYPTO("xchacha12-arm");
+#ifdef CONFIG_KERNEL_MODE_NEON
+MODULE_ALIAS_CRYPTO("chacha20-neon");
+MODULE_ALIAS_CRYPTO("xchacha20-neon");
+MODULE_ALIAS_CRYPTO("xchacha12-neon");
+#endif
diff --git a/arch/arm/crypto/chacha-neon-glue.c b/arch/arm/crypto/chacha-neon-glue.c
deleted file mode 100644
index a8e9b53..0000000
--- a/arch/arm/crypto/chacha-neon-glue.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * ARM NEON accelerated ChaCha and XChaCha stream ciphers,
- * including ChaCha20 (RFC7539)
- *
- * Copyright (C) 2016 Linaro, Ltd. <ard.biesheuvel@linaro.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * Based on:
- * ChaCha20 256-bit cipher algorithm, RFC7539, SIMD glue code
- *
- * Copyright (C) 2015 Martin Willi
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- */
-
-#include <crypto/algapi.h>
-#include <crypto/chacha.h>
-#include <crypto/internal/simd.h>
-#include <crypto/internal/skcipher.h>
-#include <linux/kernel.h>
-#include <linux/module.h>
-
-#include <asm/hwcap.h>
-#include <asm/neon.h>
-#include <asm/simd.h>
-
-asmlinkage void chacha_block_xor_neon(const u32 *state, u8 *dst, const u8 *src,
-				      int nrounds);
-asmlinkage void chacha_4block_xor_neon(const u32 *state, u8 *dst, const u8 *src,
-				       int nrounds);
-asmlinkage void hchacha_block_neon(const u32 *state, u32 *out, int nrounds);
-
-static void chacha_doneon(u32 *state, u8 *dst, const u8 *src,
-			  unsigned int bytes, int nrounds)
-{
-	u8 buf[CHACHA_BLOCK_SIZE];
-
-	while (bytes >= CHACHA_BLOCK_SIZE * 4) {
-		chacha_4block_xor_neon(state, dst, src, nrounds);
-		bytes -= CHACHA_BLOCK_SIZE * 4;
-		src += CHACHA_BLOCK_SIZE * 4;
-		dst += CHACHA_BLOCK_SIZE * 4;
-		state[12] += 4;
-	}
-	while (bytes >= CHACHA_BLOCK_SIZE) {
-		chacha_block_xor_neon(state, dst, src, nrounds);
-		bytes -= CHACHA_BLOCK_SIZE;
-		src += CHACHA_BLOCK_SIZE;
-		dst += CHACHA_BLOCK_SIZE;
-		state[12]++;
-	}
-	if (bytes) {
-		memcpy(buf, src, bytes);
-		chacha_block_xor_neon(state, buf, buf, nrounds);
-		memcpy(dst, buf, bytes);
-	}
-}
-
-static int chacha_neon_stream_xor(struct skcipher_request *req,
-				  const struct chacha_ctx *ctx, const u8 *iv)
-{
-	struct skcipher_walk walk;
-	u32 state[16];
-	int err;
-
-	err = skcipher_walk_virt(&walk, req, false);
-
-	crypto_chacha_init(state, ctx, iv);
-
-	while (walk.nbytes > 0) {
-		unsigned int nbytes = walk.nbytes;
-
-		if (nbytes < walk.total)
-			nbytes = round_down(nbytes, walk.stride);
-
-		kernel_neon_begin();
-		chacha_doneon(state, walk.dst.virt.addr, walk.src.virt.addr,
-			      nbytes, ctx->nrounds);
-		kernel_neon_end();
-		err = skcipher_walk_done(&walk, walk.nbytes - nbytes);
-	}
-
-	return err;
-}
-
-static int chacha_neon(struct skcipher_request *req)
-{
-	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
-	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
-
-	if (req->cryptlen <= CHACHA_BLOCK_SIZE || !crypto_simd_usable())
-		return crypto_chacha_crypt(req);
-
-	return chacha_neon_stream_xor(req, ctx, req->iv);
-}
-
-static int xchacha_neon(struct skcipher_request *req)
-{
-	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
-	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
-	struct chacha_ctx subctx;
-	u32 state[16];
-	u8 real_iv[16];
-
-	if (req->cryptlen <= CHACHA_BLOCK_SIZE || !crypto_simd_usable())
-		return crypto_xchacha_crypt(req);
-
-	crypto_chacha_init(state, ctx, req->iv);
-
-	kernel_neon_begin();
-	hchacha_block_neon(state, subctx.key, ctx->nrounds);
-	kernel_neon_end();
-	subctx.nrounds = ctx->nrounds;
-
-	memcpy(&real_iv[0], req->iv + 24, 8);
-	memcpy(&real_iv[8], req->iv + 16, 8);
-	return chacha_neon_stream_xor(req, &subctx, real_iv);
-}
-
-static struct skcipher_alg algs[] = {
-	{
-		.base.cra_name		= "chacha20",
-		.base.cra_driver_name	= "chacha20-neon",
-		.base.cra_priority	= 300,
-		.base.cra_blocksize	= 1,
-		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
-		.base.cra_module	= THIS_MODULE,
-
-		.min_keysize		= CHACHA_KEY_SIZE,
-		.max_keysize		= CHACHA_KEY_SIZE,
-		.ivsize			= CHACHA_IV_SIZE,
-		.chunksize		= CHACHA_BLOCK_SIZE,
-		.walksize		= 4 * CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha20_setkey,
-		.encrypt		= chacha_neon,
-		.decrypt		= chacha_neon,
-	}, {
-		.base.cra_name		= "xchacha20",
-		.base.cra_driver_name	= "xchacha20-neon",
-		.base.cra_priority	= 300,
-		.base.cra_blocksize	= 1,
-		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
-		.base.cra_module	= THIS_MODULE,
-
-		.min_keysize		= CHACHA_KEY_SIZE,
-		.max_keysize		= CHACHA_KEY_SIZE,
-		.ivsize			= XCHACHA_IV_SIZE,
-		.chunksize		= CHACHA_BLOCK_SIZE,
-		.walksize		= 4 * CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha20_setkey,
-		.encrypt		= xchacha_neon,
-		.decrypt		= xchacha_neon,
-	}, {
-		.base.cra_name		= "xchacha12",
-		.base.cra_driver_name	= "xchacha12-neon",
-		.base.cra_priority	= 300,
-		.base.cra_blocksize	= 1,
-		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
-		.base.cra_module	= THIS_MODULE,
-
-		.min_keysize		= CHACHA_KEY_SIZE,
-		.max_keysize		= CHACHA_KEY_SIZE,
-		.ivsize			= XCHACHA_IV_SIZE,
-		.chunksize		= CHACHA_BLOCK_SIZE,
-		.walksize		= 4 * CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha12_setkey,
-		.encrypt		= xchacha_neon,
-		.decrypt		= xchacha_neon,
-	}
-};
-
-static int __init chacha_simd_mod_init(void)
-{
-	if (!(elf_hwcap & HWCAP_NEON))
-		return -ENODEV;
-
-	return crypto_register_skciphers(algs, ARRAY_SIZE(algs));
-}
-
-static void __exit chacha_simd_mod_fini(void)
-{
-	crypto_unregister_skciphers(algs, ARRAY_SIZE(algs));
-}
-
-module_init(chacha_simd_mod_init);
-module_exit(chacha_simd_mod_fini);
-
-MODULE_DESCRIPTION("ChaCha and XChaCha stream ciphers (NEON accelerated)");
-MODULE_AUTHOR("Ard Biesheuvel <ard.biesheuvel@linaro.org>");
-MODULE_LICENSE("GPL v2");
-MODULE_ALIAS_CRYPTO("chacha20");
-MODULE_ALIAS_CRYPTO("chacha20-neon");
-MODULE_ALIAS_CRYPTO("xchacha20");
-MODULE_ALIAS_CRYPTO("xchacha20-neon");
-MODULE_ALIAS_CRYPTO("xchacha12");
-MODULE_ALIAS_CRYPTO("xchacha12-neon");
diff --git a/arch/arm/crypto/chacha-scalar-core.S b/arch/arm/crypto/chacha-scalar-core.S
new file mode 100644
index 0000000..2985b80
--- /dev/null
+++ b/arch/arm/crypto/chacha-scalar-core.S
@@ -0,0 +1,460 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2018 Google, Inc.
+ */
+
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+
+/*
+ * Design notes:
+ *
+ * 16 registers would be needed to hold the state matrix, but only 14 are
+ * available because 'sp' and 'pc' cannot be used.  So we spill the elements
+ * (x8, x9) to the stack and swap them out with (x10, x11).  This adds one
+ * 'ldrd' and one 'strd' instruction per round.
+ *
+ * All rotates are performed using the implicit rotate operand accepted by the
+ * 'add' and 'eor' instructions.  This is faster than using explicit rotate
+ * instructions.  To make this work, we allow the values in the second and last
+ * rows of the ChaCha state matrix (rows 'b' and 'd') to temporarily have the
+ * wrong rotation amount.  The rotation amount is then fixed up just in time
+ * when the values are used.  'brot' is the number of bits the values in row 'b'
+ * need to be rotated right to arrive at the correct values, and 'drot'
+ * similarly for row 'd'.  (brot, drot) start out as (0, 0) but we make it such
+ * that they end up as (25, 24) after every round.
+ */
+
+	// ChaCha state registers
+	X0	.req	r0
+	X1	.req	r1
+	X2	.req	r2
+	X3	.req	r3
+	X4	.req	r4
+	X5	.req	r5
+	X6	.req	r6
+	X7	.req	r7
+	X8_X10	.req	r8	// shared by x8 and x10
+	X9_X11	.req	r9	// shared by x9 and x11
+	X12	.req	r10
+	X13	.req	r11
+	X14	.req	r12
+	X15	.req	r14
+
+.macro __rev		out, in,  t0, t1, t2
+.if __LINUX_ARM_ARCH__ >= 6
+	rev		\out, \in
+.else
+	lsl		\t0, \in, #24
+	and		\t1, \in, #0xff00
+	and		\t2, \in, #0xff0000
+	orr		\out, \t0, \in, lsr #24
+	orr		\out, \out, \t1, lsl #8
+	orr		\out, \out, \t2, lsr #8
+.endif
+.endm
+
+.macro _le32_bswap	x,  t0, t1, t2
+#ifdef __ARMEB__
+	__rev		\x, \x,  \t0, \t1, \t2
+#endif
+.endm
+
+.macro _le32_bswap_4x	a, b, c, d,  t0, t1, t2
+	_le32_bswap	\a,  \t0, \t1, \t2
+	_le32_bswap	\b,  \t0, \t1, \t2
+	_le32_bswap	\c,  \t0, \t1, \t2
+	_le32_bswap	\d,  \t0, \t1, \t2
+.endm
+
+.macro __ldrd		a, b, src, offset
+#if __LINUX_ARM_ARCH__ >= 6
+	ldrd		\a, \b, [\src, #\offset]
+#else
+	ldr		\a, [\src, #\offset]
+	ldr		\b, [\src, #\offset + 4]
+#endif
+.endm
+
+.macro __strd		a, b, dst, offset
+#if __LINUX_ARM_ARCH__ >= 6
+	strd		\a, \b, [\dst, #\offset]
+#else
+	str		\a, [\dst, #\offset]
+	str		\b, [\dst, #\offset + 4]
+#endif
+.endm
+
+.macro _halfround	a1, b1, c1, d1,  a2, b2, c2, d2
+
+	// a += b; d ^= a; d = rol(d, 16);
+	add		\a1, \a1, \b1, ror #brot
+	add		\a2, \a2, \b2, ror #brot
+	eor		\d1, \a1, \d1, ror #drot
+	eor		\d2, \a2, \d2, ror #drot
+	// drot == 32 - 16 == 16
+
+	// c += d; b ^= c; b = rol(b, 12);
+	add		\c1, \c1, \d1, ror #16
+	add		\c2, \c2, \d2, ror #16
+	eor		\b1, \c1, \b1, ror #brot
+	eor		\b2, \c2, \b2, ror #brot
+	// brot == 32 - 12 == 20
+
+	// a += b; d ^= a; d = rol(d, 8);
+	add		\a1, \a1, \b1, ror #20
+	add		\a2, \a2, \b2, ror #20
+	eor		\d1, \a1, \d1, ror #16
+	eor		\d2, \a2, \d2, ror #16
+	// drot == 32 - 8 == 24
+
+	// c += d; b ^= c; b = rol(b, 7);
+	add		\c1, \c1, \d1, ror #24
+	add		\c2, \c2, \d2, ror #24
+	eor		\b1, \c1, \b1, ror #20
+	eor		\b2, \c2, \b2, ror #20
+	// brot == 32 - 7 == 25
+.endm
+
+.macro _doubleround
+
+	// column round
+
+	// quarterrounds: (x0, x4, x8, x12) and (x1, x5, x9, x13)
+	_halfround	X0, X4, X8_X10, X12,  X1, X5, X9_X11, X13
+
+	// save (x8, x9); restore (x10, x11)
+	__strd		X8_X10, X9_X11, sp, 0
+	__ldrd		X8_X10, X9_X11, sp, 8
+
+	// quarterrounds: (x2, x6, x10, x14) and (x3, x7, x11, x15)
+	_halfround	X2, X6, X8_X10, X14,  X3, X7, X9_X11, X15
+
+	.set brot, 25
+	.set drot, 24
+
+	// diagonal round
+
+	// quarterrounds: (x0, x5, x10, x15) and (x1, x6, x11, x12)
+	_halfround	X0, X5, X8_X10, X15,  X1, X6, X9_X11, X12
+
+	// save (x10, x11); restore (x8, x9)
+	__strd		X8_X10, X9_X11, sp, 8
+	__ldrd		X8_X10, X9_X11, sp, 0
+
+	// quarterrounds: (x2, x7, x8, x13) and (x3, x4, x9, x14)
+	_halfround	X2, X7, X8_X10, X13,  X3, X4, X9_X11, X14
+.endm
+
+.macro _chacha_permute	nrounds
+	.set brot, 0
+	.set drot, 0
+	.rept \nrounds / 2
+	 _doubleround
+	.endr
+.endm
+
+.macro _chacha		nrounds
+
+.Lnext_block\@:
+	// Stack: unused0-unused1 x10-x11 x0-x15 OUT IN LEN
+	// Registers contain x0-x9,x12-x15.
+
+	// Do the core ChaCha permutation to update x0-x15.
+	_chacha_permute	\nrounds
+
+	add		sp, #8
+	// Stack: x10-x11 orig_x0-orig_x15 OUT IN LEN
+	// Registers contain x0-x9,x12-x15.
+	// x4-x7 are rotated by 'brot'; x12-x15 are rotated by 'drot'.
+
+	// Free up some registers (r8-r12,r14) by pushing (x8-x9,x12-x15).
+	push		{X8_X10, X9_X11, X12, X13, X14, X15}
+
+	// Load (OUT, IN, LEN).
+	ldr		r14, [sp, #96]
+	ldr		r12, [sp, #100]
+	ldr		r11, [sp, #104]
+
+	orr		r10, r14, r12
+
+	// Use slow path if fewer than 64 bytes remain.
+	cmp		r11, #64
+	blt		.Lxor_slowpath\@
+
+	// Use slow path if IN and/or OUT isn't 4-byte aligned.  Needed even on
+	// ARMv6+, since ldmia and stmia (used below) still require alignment.
+	tst		r10, #3
+	bne		.Lxor_slowpath\@
+
+	// Fast path: XOR 64 bytes of aligned data.
+
+	// Stack: x8-x9 x12-x15 x10-x11 orig_x0-orig_x15 OUT IN LEN
+	// Registers: r0-r7 are x0-x7; r8-r11 are free; r12 is IN; r14 is OUT.
+	// x4-x7 are rotated by 'brot'; x12-x15 are rotated by 'drot'.
+
+	// x0-x3
+	__ldrd		r8, r9, sp, 32
+	__ldrd		r10, r11, sp, 40
+	add		X0, X0, r8
+	add		X1, X1, r9
+	add		X2, X2, r10
+	add		X3, X3, r11
+	_le32_bswap_4x	X0, X1, X2, X3,  r8, r9, r10
+	ldmia		r12!, {r8-r11}
+	eor		X0, X0, r8
+	eor		X1, X1, r9
+	eor		X2, X2, r10
+	eor		X3, X3, r11
+	stmia		r14!, {X0-X3}
+
+	// x4-x7
+	__ldrd		r8, r9, sp, 48
+	__ldrd		r10, r11, sp, 56
+	add		X4, r8, X4, ror #brot
+	add		X5, r9, X5, ror #brot
+	ldmia		r12!, {X0-X3}
+	add		X6, r10, X6, ror #brot
+	add		X7, r11, X7, ror #brot
+	_le32_bswap_4x	X4, X5, X6, X7,  r8, r9, r10
+	eor		X4, X4, X0
+	eor		X5, X5, X1
+	eor		X6, X6, X2
+	eor		X7, X7, X3
+	stmia		r14!, {X4-X7}
+
+	// x8-x15
+	pop		{r0-r7}			// (x8-x9,x12-x15,x10-x11)
+	__ldrd		r8, r9, sp, 32
+	__ldrd		r10, r11, sp, 40
+	add		r0, r0, r8		// x8
+	add		r1, r1, r9		// x9
+	add		r6, r6, r10		// x10
+	add		r7, r7, r11		// x11
+	_le32_bswap_4x	r0, r1, r6, r7,  r8, r9, r10
+	ldmia		r12!, {r8-r11}
+	eor		r0, r0, r8		// x8
+	eor		r1, r1, r9		// x9
+	eor		r6, r6, r10		// x10
+	eor		r7, r7, r11		// x11
+	stmia		r14!, {r0,r1,r6,r7}
+	ldmia		r12!, {r0,r1,r6,r7}
+	__ldrd		r8, r9, sp, 48
+	__ldrd		r10, r11, sp, 56
+	add		r2, r8, r2, ror #drot	// x12
+	add		r3, r9, r3, ror #drot	// x13
+	add		r4, r10, r4, ror #drot	// x14
+	add		r5, r11, r5, ror #drot	// x15
+	_le32_bswap_4x	r2, r3, r4, r5,  r9, r10, r11
+	  ldr		r9, [sp, #72]		// load LEN
+	eor		r2, r2, r0		// x12
+	eor		r3, r3, r1		// x13
+	eor		r4, r4, r6		// x14
+	eor		r5, r5, r7		// x15
+	  subs		r9, #64			// decrement and check LEN
+	stmia		r14!, {r2-r5}
+
+	beq		.Ldone\@
+
+.Lprepare_for_next_block\@:
+
+	// Stack: x0-x15 OUT IN LEN
+
+	// Increment block counter (x12)
+	add		r8, #1
+
+	// Store updated (OUT, IN, LEN)
+	str		r14, [sp, #64]
+	str		r12, [sp, #68]
+	str		r9, [sp, #72]
+
+	  mov		r14, sp
+
+	// Store updated block counter (x12)
+	str		r8, [sp, #48]
+
+	  sub		sp, #16
+
+	// Reload state and do next block
+	ldmia		r14!, {r0-r11}		// load x0-x11
+	__strd		r10, r11, sp, 8		// store x10-x11 before state
+	ldmia		r14, {r10-r12,r14}	// load x12-x15
+	b		.Lnext_block\@
+
+.Lxor_slowpath\@:
+	// Slow path: < 64 bytes remaining, or unaligned input or output buffer.
+	// We handle it by storing the 64 bytes of keystream to the stack, then
+	// XOR-ing the needed portion with the data.
+
+	// Allocate keystream buffer
+	sub		sp, #64
+	mov		r14, sp
+
+	// Stack: ks0-ks15 x8-x9 x12-x15 x10-x11 orig_x0-orig_x15 OUT IN LEN
+	// Registers: r0-r7 are x0-x7; r8-r11 are free; r12 is IN; r14 is &ks0.
+	// x4-x7 are rotated by 'brot'; x12-x15 are rotated by 'drot'.
+
+	// Save keystream for x0-x3
+	__ldrd		r8, r9, sp, 96
+	__ldrd		r10, r11, sp, 104
+	add		X0, X0, r8
+	add		X1, X1, r9
+	add		X2, X2, r10
+	add		X3, X3, r11
+	_le32_bswap_4x	X0, X1, X2, X3,  r8, r9, r10
+	stmia		r14!, {X0-X3}
+
+	// Save keystream for x4-x7
+	__ldrd		r8, r9, sp, 112
+	__ldrd		r10, r11, sp, 120
+	add		X4, r8, X4, ror #brot
+	add		X5, r9, X5, ror #brot
+	add		X6, r10, X6, ror #brot
+	add		X7, r11, X7, ror #brot
+	_le32_bswap_4x	X4, X5, X6, X7,  r8, r9, r10
+	  add		r8, sp, #64
+	stmia		r14!, {X4-X7}
+
+	// Save keystream for x8-x15
+	ldm		r8, {r0-r7}		// (x8-x9,x12-x15,x10-x11)
+	__ldrd		r8, r9, sp, 128
+	__ldrd		r10, r11, sp, 136
+	add		r0, r0, r8		// x8
+	add		r1, r1, r9		// x9
+	add		r6, r6, r10		// x10
+	add		r7, r7, r11		// x11
+	_le32_bswap_4x	r0, r1, r6, r7,  r8, r9, r10
+	stmia		r14!, {r0,r1,r6,r7}
+	__ldrd		r8, r9, sp, 144
+	__ldrd		r10, r11, sp, 152
+	add		r2, r8, r2, ror #drot	// x12
+	add		r3, r9, r3, ror #drot	// x13
+	add		r4, r10, r4, ror #drot	// x14
+	add		r5, r11, r5, ror #drot	// x15
+	_le32_bswap_4x	r2, r3, r4, r5,  r9, r10, r11
+	stmia		r14, {r2-r5}
+
+	// Stack: ks0-ks15 unused0-unused7 x0-x15 OUT IN LEN
+	// Registers: r8 is block counter, r12 is IN.
+
+	ldr		r9, [sp, #168]		// LEN
+	ldr		r14, [sp, #160]		// OUT
+	cmp		r9, #64
+	  mov		r0, sp
+	movle		r1, r9
+	movgt		r1, #64
+	// r1 is number of bytes to XOR, in range [1, 64]
+
+.if __LINUX_ARM_ARCH__ < 6
+	orr		r2, r12, r14
+	tst		r2, #3			// IN or OUT misaligned?
+	bne		.Lxor_next_byte\@
+.endif
+
+	// XOR a word at a time
+.rept 16
+	subs		r1, #4
+	blt		.Lxor_words_done\@
+	ldr		r2, [r12], #4
+	ldr		r3, [r0], #4
+	eor		r2, r2, r3
+	str		r2, [r14], #4
+.endr
+	b		.Lxor_slowpath_done\@
+.Lxor_words_done\@:
+	ands		r1, r1, #3
+	beq		.Lxor_slowpath_done\@
+
+	// XOR a byte at a time
+.Lxor_next_byte\@:
+	ldrb		r2, [r12], #1
+	ldrb		r3, [r0], #1
+	eor		r2, r2, r3
+	strb		r2, [r14], #1
+	subs		r1, #1
+	bne		.Lxor_next_byte\@
+
+.Lxor_slowpath_done\@:
+	subs		r9, #64
+	add		sp, #96
+	bgt		.Lprepare_for_next_block\@
+
+.Ldone\@:
+.endm	// _chacha
+
+/*
+ * void chacha_doarm(u8 *dst, const u8 *src, unsigned int bytes,
+ *		     const u32 *state, int nrounds);
+ */
+ENTRY(chacha_doarm)
+	cmp		r2, #0			// len == 0?
+	reteq		lr
+
+	ldr		ip, [sp]
+	cmp		ip, #12
+
+	push		{r0-r2,r4-r11,lr}
+
+	// Push state x0-x15 onto stack.
+	// Also store an extra copy of x10-x11 just before the state.
+
+	add		X12, r3, #48
+	ldm		X12, {X12,X13,X14,X15}
+	push		{X12,X13,X14,X15}
+	sub		sp, sp, #64
+
+	__ldrd		X8_X10, X9_X11, r3, 40
+	__strd		X8_X10, X9_X11, sp, 8
+	__strd		X8_X10, X9_X11, sp, 56
+	ldm		r3, {X0-X9_X11}
+	__strd		X0, X1, sp, 16
+	__strd		X2, X3, sp, 24
+	__strd		X4, X5, sp, 32
+	__strd		X6, X7, sp, 40
+	__strd		X8_X10, X9_X11, sp, 48
+
+	beq		1f
+	_chacha		20
+
+0:	add		sp, #76
+	pop		{r4-r11, pc}
+
+1:	_chacha		12
+	b		0b
+ENDPROC(chacha_doarm)
+
+/*
+ * void hchacha_block_arm(const u32 state[16], u32 out[8], int nrounds);
+ */
+ENTRY(hchacha_block_arm)
+	push		{r1,r4-r11,lr}
+
+	cmp		r2, #12			// ChaCha12 ?
+
+	mov		r14, r0
+	ldmia		r14!, {r0-r11}		// load x0-x11
+	push		{r10-r11}		// store x10-x11 to stack
+	ldm		r14, {r10-r12,r14}	// load x12-x15
+	sub		sp, #8
+
+	beq		1f
+	_chacha_permute	20
+
+	// Skip over (unused0-unused1, x10-x11)
+0:	add		sp, #16
+
+	// Fix up rotations of x12-x15
+	ror		X12, X12, #drot
+	ror		X13, X13, #drot
+	  pop		{r4}			// load 'out'
+	ror		X14, X14, #drot
+	ror		X15, X15, #drot
+
+	// Store (x0-x3,x12-x15) to 'out'
+	stm		r4, {X0,X1,X2,X3,X12,X13,X14,X15}
+
+	pop		{r4-r11,pc}
+
+1:	_chacha_permute	12
+	b		0b
+ENDPROC(hchacha_block_arm)
diff --git a/arch/arm/crypto/curve25519-core.S b/arch/arm/crypto/curve25519-core.S
new file mode 100644
index 0000000..be18af5
--- /dev/null
+++ b/arch/arm/crypto/curve25519-core.S
@@ -0,0 +1,2062 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * Based on public domain code from Daniel J. Bernstein and Peter Schwabe. This
+ * began from SUPERCOP's curve25519/neon2/scalarmult.s, but has subsequently been
+ * manually reworked for use in kernel space.
+ */
+
+#include <linux/linkage.h>
+
+.text
+.fpu neon
+.arch armv7-a
+.align 4
+
+ENTRY(curve25519_neon)
+	push		{r4-r11, lr}
+	mov		ip, sp
+	sub		r3, sp, #704
+	and		r3, r3, #0xfffffff0
+	mov		sp, r3
+	movw		r4, #0
+	movw		r5, #254
+	vmov.i32	q0, #1
+	vshr.u64	q1, q0, #7
+	vshr.u64	q0, q0, #8
+	vmov.i32	d4, #19
+	vmov.i32	d5, #38
+	add		r6, sp, #480
+	vst1.8		{d2-d3}, [r6, : 128]!
+	vst1.8		{d0-d1}, [r6, : 128]!
+	vst1.8		{d4-d5}, [r6, : 128]
+	add		r6, r3, #0
+	vmov.i32	q2, #0
+	vst1.8		{d4-d5}, [r6, : 128]!
+	vst1.8		{d4-d5}, [r6, : 128]!
+	vst1.8		d4, [r6, : 64]
+	add		r6, r3, #0
+	movw		r7, #960
+	sub		r7, r7, #2
+	neg		r7, r7
+	sub		r7, r7, r7, LSL #7
+	str		r7, [r6]
+	add		r6, sp, #672
+	vld1.8		{d4-d5}, [r1]!
+	vld1.8		{d6-d7}, [r1]
+	vst1.8		{d4-d5}, [r6, : 128]!
+	vst1.8		{d6-d7}, [r6, : 128]
+	sub		r1, r6, #16
+	ldrb		r6, [r1]
+	and		r6, r6, #248
+	strb		r6, [r1]
+	ldrb		r6, [r1, #31]
+	and		r6, r6, #127
+	orr		r6, r6, #64
+	strb		r6, [r1, #31]
+	vmov.i64	q2, #0xffffffff
+	vshr.u64	q3, q2, #7
+	vshr.u64	q2, q2, #6
+	vld1.8		{d8}, [r2]
+	vld1.8		{d10}, [r2]
+	add		r2, r2, #6
+	vld1.8		{d12}, [r2]
+	vld1.8		{d14}, [r2]
+	add		r2, r2, #6
+	vld1.8		{d16}, [r2]
+	add		r2, r2, #4
+	vld1.8		{d18}, [r2]
+	vld1.8		{d20}, [r2]
+	add		r2, r2, #6
+	vld1.8		{d22}, [r2]
+	add		r2, r2, #2
+	vld1.8		{d24}, [r2]
+	vld1.8		{d26}, [r2]
+	vshr.u64	q5, q5, #26
+	vshr.u64	q6, q6, #3
+	vshr.u64	q7, q7, #29
+	vshr.u64	q8, q8, #6
+	vshr.u64	q10, q10, #25
+	vshr.u64	q11, q11, #3
+	vshr.u64	q12, q12, #12
+	vshr.u64	q13, q13, #38
+	vand		q4, q4, q2
+	vand		q6, q6, q2
+	vand		q8, q8, q2
+	vand		q10, q10, q2
+	vand		q2, q12, q2
+	vand		q5, q5, q3
+	vand		q7, q7, q3
+	vand		q9, q9, q3
+	vand		q11, q11, q3
+	vand		q3, q13, q3
+	add		r2, r3, #48
+	vadd.i64	q12, q4, q1
+	vadd.i64	q13, q10, q1
+	vshr.s64	q12, q12, #26
+	vshr.s64	q13, q13, #26
+	vadd.i64	q5, q5, q12
+	vshl.i64	q12, q12, #26
+	vadd.i64	q14, q5, q0
+	vadd.i64	q11, q11, q13
+	vshl.i64	q13, q13, #26
+	vadd.i64	q15, q11, q0
+	vsub.i64	q4, q4, q12
+	vshr.s64	q12, q14, #25
+	vsub.i64	q10, q10, q13
+	vshr.s64	q13, q15, #25
+	vadd.i64	q6, q6, q12
+	vshl.i64	q12, q12, #25
+	vadd.i64	q14, q6, q1
+	vadd.i64	q2, q2, q13
+	vsub.i64	q5, q5, q12
+	vshr.s64	q12, q14, #26
+	vshl.i64	q13, q13, #25
+	vadd.i64	q14, q2, q1
+	vadd.i64	q7, q7, q12
+	vshl.i64	q12, q12, #26
+	vadd.i64	q15, q7, q0
+	vsub.i64	q11, q11, q13
+	vshr.s64	q13, q14, #26
+	vsub.i64	q6, q6, q12
+	vshr.s64	q12, q15, #25
+	vadd.i64	q3, q3, q13
+	vshl.i64	q13, q13, #26
+	vadd.i64	q14, q3, q0
+	vadd.i64	q8, q8, q12
+	vshl.i64	q12, q12, #25
+	vadd.i64	q15, q8, q1
+	add		r2, r2, #8
+	vsub.i64	q2, q2, q13
+	vshr.s64	q13, q14, #25
+	vsub.i64	q7, q7, q12
+	vshr.s64	q12, q15, #26
+	vadd.i64	q14, q13, q13
+	vadd.i64	q9, q9, q12
+	vtrn.32		d12, d14
+	vshl.i64	q12, q12, #26
+	vtrn.32		d13, d15
+	vadd.i64	q0, q9, q0
+	vadd.i64	q4, q4, q14
+	vst1.8		d12, [r2, : 64]!
+	vshl.i64	q6, q13, #4
+	vsub.i64	q7, q8, q12
+	vshr.s64	q0, q0, #25
+	vadd.i64	q4, q4, q6
+	vadd.i64	q6, q10, q0
+	vshl.i64	q0, q0, #25
+	vadd.i64	q8, q6, q1
+	vadd.i64	q4, q4, q13
+	vshl.i64	q10, q13, #25
+	vadd.i64	q1, q4, q1
+	vsub.i64	q0, q9, q0
+	vshr.s64	q8, q8, #26
+	vsub.i64	q3, q3, q10
+	vtrn.32		d14, d0
+	vshr.s64	q1, q1, #26
+	vtrn.32		d15, d1
+	vadd.i64	q0, q11, q8
+	vst1.8		d14, [r2, : 64]
+	vshl.i64	q7, q8, #26
+	vadd.i64	q5, q5, q1
+	vtrn.32		d4, d6
+	vshl.i64	q1, q1, #26
+	vtrn.32		d5, d7
+	vsub.i64	q3, q6, q7
+	add		r2, r2, #16
+	vsub.i64	q1, q4, q1
+	vst1.8		d4, [r2, : 64]
+	vtrn.32		d6, d0
+	vtrn.32		d7, d1
+	sub		r2, r2, #8
+	vtrn.32		d2, d10
+	vtrn.32		d3, d11
+	vst1.8		d6, [r2, : 64]
+	sub		r2, r2, #24
+	vst1.8		d2, [r2, : 64]
+	add		r2, r3, #96
+	vmov.i32	q0, #0
+	vmov.i64	d2, #0xff
+	vmov.i64	d3, #0
+	vshr.u32	q1, q1, #7
+	vst1.8		{d2-d3}, [r2, : 128]!
+	vst1.8		{d0-d1}, [r2, : 128]!
+	vst1.8		d0, [r2, : 64]
+	add		r2, r3, #144
+	vmov.i32	q0, #0
+	vst1.8		{d0-d1}, [r2, : 128]!
+	vst1.8		{d0-d1}, [r2, : 128]!
+	vst1.8		d0, [r2, : 64]
+	add		r2, r3, #240
+	vmov.i32	q0, #0
+	vmov.i64	d2, #0xff
+	vmov.i64	d3, #0
+	vshr.u32	q1, q1, #7
+	vst1.8		{d2-d3}, [r2, : 128]!
+	vst1.8		{d0-d1}, [r2, : 128]!
+	vst1.8		d0, [r2, : 64]
+	add		r2, r3, #48
+	add		r6, r3, #192
+	vld1.8		{d0-d1}, [r2, : 128]!
+	vld1.8		{d2-d3}, [r2, : 128]!
+	vld1.8		{d4}, [r2, : 64]
+	vst1.8		{d0-d1}, [r6, : 128]!
+	vst1.8		{d2-d3}, [r6, : 128]!
+	vst1.8		d4, [r6, : 64]
+.Lmainloop:
+	mov		r2, r5, LSR #3
+	and		r6, r5, #7
+	ldrb		r2, [r1, r2]
+	mov		r2, r2, LSR r6
+	and		r2, r2, #1
+	str		r5, [sp, #456]
+	eor		r4, r4, r2
+	str		r2, [sp, #460]
+	neg		r2, r4
+	add		r4, r3, #96
+	add		r5, r3, #192
+	add		r6, r3, #144
+	vld1.8		{d8-d9}, [r4, : 128]!
+	add		r7, r3, #240
+	vld1.8		{d10-d11}, [r5, : 128]!
+	veor		q6, q4, q5
+	vld1.8		{d14-d15}, [r6, : 128]!
+	vdup.i32	q8, r2
+	vld1.8		{d18-d19}, [r7, : 128]!
+	veor		q10, q7, q9
+	vld1.8		{d22-d23}, [r4, : 128]!
+	vand		q6, q6, q8
+	vld1.8		{d24-d25}, [r5, : 128]!
+	vand		q10, q10, q8
+	vld1.8		{d26-d27}, [r6, : 128]!
+	veor		q4, q4, q6
+	vld1.8		{d28-d29}, [r7, : 128]!
+	veor		q5, q5, q6
+	vld1.8		{d0}, [r4, : 64]
+	veor		q6, q7, q10
+	vld1.8		{d2}, [r5, : 64]
+	veor		q7, q9, q10
+	vld1.8		{d4}, [r6, : 64]
+	veor		q9, q11, q12
+	vld1.8		{d6}, [r7, : 64]
+	veor		q10, q0, q1
+	sub		r2, r4, #32
+	vand		q9, q9, q8
+	sub		r4, r5, #32
+	vand		q10, q10, q8
+	sub		r5, r6, #32
+	veor		q11, q11, q9
+	sub		r6, r7, #32
+	veor		q0, q0, q10
+	veor		q9, q12, q9
+	veor		q1, q1, q10
+	veor		q10, q13, q14
+	veor		q12, q2, q3
+	vand		q10, q10, q8
+	vand		q8, q12, q8
+	veor		q12, q13, q10
+	veor		q2, q2, q8
+	veor		q10, q14, q10
+	veor		q3, q3, q8
+	vadd.i32	q8, q4, q6
+	vsub.i32	q4, q4, q6
+	vst1.8		{d16-d17}, [r2, : 128]!
+	vadd.i32	q6, q11, q12
+	vst1.8		{d8-d9}, [r5, : 128]!
+	vsub.i32	q4, q11, q12
+	vst1.8		{d12-d13}, [r2, : 128]!
+	vadd.i32	q6, q0, q2
+	vst1.8		{d8-d9}, [r5, : 128]!
+	vsub.i32	q0, q0, q2
+	vst1.8		d12, [r2, : 64]
+	vadd.i32	q2, q5, q7
+	vst1.8		d0, [r5, : 64]
+	vsub.i32	q0, q5, q7
+	vst1.8		{d4-d5}, [r4, : 128]!
+	vadd.i32	q2, q9, q10
+	vst1.8		{d0-d1}, [r6, : 128]!
+	vsub.i32	q0, q9, q10
+	vst1.8		{d4-d5}, [r4, : 128]!
+	vadd.i32	q2, q1, q3
+	vst1.8		{d0-d1}, [r6, : 128]!
+	vsub.i32	q0, q1, q3
+	vst1.8		d4, [r4, : 64]
+	vst1.8		d0, [r6, : 64]
+	add		r2, sp, #512
+	add		r4, r3, #96
+	add		r5, r3, #144
+	vld1.8		{d0-d1}, [r2, : 128]
+	vld1.8		{d2-d3}, [r4, : 128]!
+	vld1.8		{d4-d5}, [r5, : 128]!
+	vzip.i32	q1, q2
+	vld1.8		{d6-d7}, [r4, : 128]!
+	vld1.8		{d8-d9}, [r5, : 128]!
+	vshl.i32	q5, q1, #1
+	vzip.i32	q3, q4
+	vshl.i32	q6, q2, #1
+	vld1.8		{d14}, [r4, : 64]
+	vshl.i32	q8, q3, #1
+	vld1.8		{d15}, [r5, : 64]
+	vshl.i32	q9, q4, #1
+	vmul.i32	d21, d7, d1
+	vtrn.32		d14, d15
+	vmul.i32	q11, q4, q0
+	vmul.i32	q0, q7, q0
+	vmull.s32	q12, d2, d2
+	vmlal.s32	q12, d11, d1
+	vmlal.s32	q12, d12, d0
+	vmlal.s32	q12, d13, d23
+	vmlal.s32	q12, d16, d22
+	vmlal.s32	q12, d7, d21
+	vmull.s32	q10, d2, d11
+	vmlal.s32	q10, d4, d1
+	vmlal.s32	q10, d13, d0
+	vmlal.s32	q10, d6, d23
+	vmlal.s32	q10, d17, d22
+	vmull.s32	q13, d10, d4
+	vmlal.s32	q13, d11, d3
+	vmlal.s32	q13, d13, d1
+	vmlal.s32	q13, d16, d0
+	vmlal.s32	q13, d17, d23
+	vmlal.s32	q13, d8, d22
+	vmull.s32	q1, d10, d5
+	vmlal.s32	q1, d11, d4
+	vmlal.s32	q1, d6, d1
+	vmlal.s32	q1, d17, d0
+	vmlal.s32	q1, d8, d23
+	vmull.s32	q14, d10, d6
+	vmlal.s32	q14, d11, d13
+	vmlal.s32	q14, d4, d4
+	vmlal.s32	q14, d17, d1
+	vmlal.s32	q14, d18, d0
+	vmlal.s32	q14, d9, d23
+	vmull.s32	q11, d10, d7
+	vmlal.s32	q11, d11, d6
+	vmlal.s32	q11, d12, d5
+	vmlal.s32	q11, d8, d1
+	vmlal.s32	q11, d19, d0
+	vmull.s32	q15, d10, d8
+	vmlal.s32	q15, d11, d17
+	vmlal.s32	q15, d12, d6
+	vmlal.s32	q15, d13, d5
+	vmlal.s32	q15, d19, d1
+	vmlal.s32	q15, d14, d0
+	vmull.s32	q2, d10, d9
+	vmlal.s32	q2, d11, d8
+	vmlal.s32	q2, d12, d7
+	vmlal.s32	q2, d13, d6
+	vmlal.s32	q2, d14, d1
+	vmull.s32	q0, d15, d1
+	vmlal.s32	q0, d10, d14
+	vmlal.s32	q0, d11, d19
+	vmlal.s32	q0, d12, d8
+	vmlal.s32	q0, d13, d17
+	vmlal.s32	q0, d6, d6
+	add		r2, sp, #480
+	vld1.8		{d18-d19}, [r2, : 128]!
+	vmull.s32	q3, d16, d7
+	vmlal.s32	q3, d10, d15
+	vmlal.s32	q3, d11, d14
+	vmlal.s32	q3, d12, d9
+	vmlal.s32	q3, d13, d8
+	vld1.8		{d8-d9}, [r2, : 128]
+	vadd.i64	q5, q12, q9
+	vadd.i64	q6, q15, q9
+	vshr.s64	q5, q5, #26
+	vshr.s64	q6, q6, #26
+	vadd.i64	q7, q10, q5
+	vshl.i64	q5, q5, #26
+	vadd.i64	q8, q7, q4
+	vadd.i64	q2, q2, q6
+	vshl.i64	q6, q6, #26
+	vadd.i64	q10, q2, q4
+	vsub.i64	q5, q12, q5
+	vshr.s64	q8, q8, #25
+	vsub.i64	q6, q15, q6
+	vshr.s64	q10, q10, #25
+	vadd.i64	q12, q13, q8
+	vshl.i64	q8, q8, #25
+	vadd.i64	q13, q12, q9
+	vadd.i64	q0, q0, q10
+	vsub.i64	q7, q7, q8
+	vshr.s64	q8, q13, #26
+	vshl.i64	q10, q10, #25
+	vadd.i64	q13, q0, q9
+	vadd.i64	q1, q1, q8
+	vshl.i64	q8, q8, #26
+	vadd.i64	q15, q1, q4
+	vsub.i64	q2, q2, q10
+	vshr.s64	q10, q13, #26
+	vsub.i64	q8, q12, q8
+	vshr.s64	q12, q15, #25
+	vadd.i64	q3, q3, q10
+	vshl.i64	q10, q10, #26
+	vadd.i64	q13, q3, q4
+	vadd.i64	q14, q14, q12
+	add		r2, r3, #288
+	vshl.i64	q12, q12, #25
+	add		r4, r3, #336
+	vadd.i64	q15, q14, q9
+	add		r2, r2, #8
+	vsub.i64	q0, q0, q10
+	add		r4, r4, #8
+	vshr.s64	q10, q13, #25
+	vsub.i64	q1, q1, q12
+	vshr.s64	q12, q15, #26
+	vadd.i64	q13, q10, q10
+	vadd.i64	q11, q11, q12
+	vtrn.32		d16, d2
+	vshl.i64	q12, q12, #26
+	vtrn.32		d17, d3
+	vadd.i64	q1, q11, q4
+	vadd.i64	q4, q5, q13
+	vst1.8		d16, [r2, : 64]!
+	vshl.i64	q5, q10, #4
+	vst1.8		d17, [r4, : 64]!
+	vsub.i64	q8, q14, q12
+	vshr.s64	q1, q1, #25
+	vadd.i64	q4, q4, q5
+	vadd.i64	q5, q6, q1
+	vshl.i64	q1, q1, #25
+	vadd.i64	q6, q5, q9
+	vadd.i64	q4, q4, q10
+	vshl.i64	q10, q10, #25
+	vadd.i64	q9, q4, q9
+	vsub.i64	q1, q11, q1
+	vshr.s64	q6, q6, #26
+	vsub.i64	q3, q3, q10
+	vtrn.32		d16, d2
+	vshr.s64	q9, q9, #26
+	vtrn.32		d17, d3
+	vadd.i64	q1, q2, q6
+	vst1.8		d16, [r2, : 64]
+	vshl.i64	q2, q6, #26
+	vst1.8		d17, [r4, : 64]
+	vadd.i64	q6, q7, q9
+	vtrn.32		d0, d6
+	vshl.i64	q7, q9, #26
+	vtrn.32		d1, d7
+	vsub.i64	q2, q5, q2
+	add		r2, r2, #16
+	vsub.i64	q3, q4, q7
+	vst1.8		d0, [r2, : 64]
+	add		r4, r4, #16
+	vst1.8		d1, [r4, : 64]
+	vtrn.32		d4, d2
+	vtrn.32		d5, d3
+	sub		r2, r2, #8
+	sub		r4, r4, #8
+	vtrn.32		d6, d12
+	vtrn.32		d7, d13
+	vst1.8		d4, [r2, : 64]
+	vst1.8		d5, [r4, : 64]
+	sub		r2, r2, #24
+	sub		r4, r4, #24
+	vst1.8		d6, [r2, : 64]
+	vst1.8		d7, [r4, : 64]
+	add		r2, r3, #240
+	add		r4, r3, #96
+	vld1.8		{d0-d1}, [r4, : 128]!
+	vld1.8		{d2-d3}, [r4, : 128]!
+	vld1.8		{d4}, [r4, : 64]
+	add		r4, r3, #144
+	vld1.8		{d6-d7}, [r4, : 128]!
+	vtrn.32		q0, q3
+	vld1.8		{d8-d9}, [r4, : 128]!
+	vshl.i32	q5, q0, #4
+	vtrn.32		q1, q4
+	vshl.i32	q6, q3, #4
+	vadd.i32	q5, q5, q0
+	vadd.i32	q6, q6, q3
+	vshl.i32	q7, q1, #4
+	vld1.8		{d5}, [r4, : 64]
+	vshl.i32	q8, q4, #4
+	vtrn.32		d4, d5
+	vadd.i32	q7, q7, q1
+	vadd.i32	q8, q8, q4
+	vld1.8		{d18-d19}, [r2, : 128]!
+	vshl.i32	q10, q2, #4
+	vld1.8		{d22-d23}, [r2, : 128]!
+	vadd.i32	q10, q10, q2
+	vld1.8		{d24}, [r2, : 64]
+	vadd.i32	q5, q5, q0
+	add		r2, r3, #192
+	vld1.8		{d26-d27}, [r2, : 128]!
+	vadd.i32	q6, q6, q3
+	vld1.8		{d28-d29}, [r2, : 128]!
+	vadd.i32	q8, q8, q4
+	vld1.8		{d25}, [r2, : 64]
+	vadd.i32	q10, q10, q2
+	vtrn.32		q9, q13
+	vadd.i32	q7, q7, q1
+	vadd.i32	q5, q5, q0
+	vtrn.32		q11, q14
+	vadd.i32	q6, q6, q3
+	add		r2, sp, #528
+	vadd.i32	q10, q10, q2
+	vtrn.32		d24, d25
+	vst1.8		{d12-d13}, [r2, : 128]!
+	vshl.i32	q6, q13, #1
+	vst1.8		{d20-d21}, [r2, : 128]!
+	vshl.i32	q10, q14, #1
+	vst1.8		{d12-d13}, [r2, : 128]!
+	vshl.i32	q15, q12, #1
+	vadd.i32	q8, q8, q4
+	vext.32		d10, d31, d30, #0
+	vadd.i32	q7, q7, q1
+	vst1.8		{d16-d17}, [r2, : 128]!
+	vmull.s32	q8, d18, d5
+	vmlal.s32	q8, d26, d4
+	vmlal.s32	q8, d19, d9
+	vmlal.s32	q8, d27, d3
+	vmlal.s32	q8, d22, d8
+	vmlal.s32	q8, d28, d2
+	vmlal.s32	q8, d23, d7
+	vmlal.s32	q8, d29, d1
+	vmlal.s32	q8, d24, d6
+	vmlal.s32	q8, d25, d0
+	vst1.8		{d14-d15}, [r2, : 128]!
+	vmull.s32	q2, d18, d4
+	vmlal.s32	q2, d12, d9
+	vmlal.s32	q2, d13, d8
+	vmlal.s32	q2, d19, d3
+	vmlal.s32	q2, d22, d2
+	vmlal.s32	q2, d23, d1
+	vmlal.s32	q2, d24, d0
+	vst1.8		{d20-d21}, [r2, : 128]!
+	vmull.s32	q7, d18, d9
+	vmlal.s32	q7, d26, d3
+	vmlal.s32	q7, d19, d8
+	vmlal.s32	q7, d27, d2
+	vmlal.s32	q7, d22, d7
+	vmlal.s32	q7, d28, d1
+	vmlal.s32	q7, d23, d6
+	vmlal.s32	q7, d29, d0
+	vst1.8		{d10-d11}, [r2, : 128]!
+	vmull.s32	q5, d18, d3
+	vmlal.s32	q5, d19, d2
+	vmlal.s32	q5, d22, d1
+	vmlal.s32	q5, d23, d0
+	vmlal.s32	q5, d12, d8
+	vst1.8		{d16-d17}, [r2, : 128]
+	vmull.s32	q4, d18, d8
+	vmlal.s32	q4, d26, d2
+	vmlal.s32	q4, d19, d7
+	vmlal.s32	q4, d27, d1
+	vmlal.s32	q4, d22, d6
+	vmlal.s32	q4, d28, d0
+	vmull.s32	q8, d18, d7
+	vmlal.s32	q8, d26, d1
+	vmlal.s32	q8, d19, d6
+	vmlal.s32	q8, d27, d0
+	add		r2, sp, #544
+	vld1.8		{d20-d21}, [r2, : 128]
+	vmlal.s32	q7, d24, d21
+	vmlal.s32	q7, d25, d20
+	vmlal.s32	q4, d23, d21
+	vmlal.s32	q4, d29, d20
+	vmlal.s32	q8, d22, d21
+	vmlal.s32	q8, d28, d20
+	vmlal.s32	q5, d24, d20
+	vst1.8		{d14-d15}, [r2, : 128]
+	vmull.s32	q7, d18, d6
+	vmlal.s32	q7, d26, d0
+	add		r2, sp, #624
+	vld1.8		{d30-d31}, [r2, : 128]
+	vmlal.s32	q2, d30, d21
+	vmlal.s32	q7, d19, d21
+	vmlal.s32	q7, d27, d20
+	add		r2, sp, #592
+	vld1.8		{d26-d27}, [r2, : 128]
+	vmlal.s32	q4, d25, d27
+	vmlal.s32	q8, d29, d27
+	vmlal.s32	q8, d25, d26
+	vmlal.s32	q7, d28, d27
+	vmlal.s32	q7, d29, d26
+	add		r2, sp, #576
+	vld1.8		{d28-d29}, [r2, : 128]
+	vmlal.s32	q4, d24, d29
+	vmlal.s32	q8, d23, d29
+	vmlal.s32	q8, d24, d28
+	vmlal.s32	q7, d22, d29
+	vmlal.s32	q7, d23, d28
+	vst1.8		{d8-d9}, [r2, : 128]
+	add		r2, sp, #528
+	vld1.8		{d8-d9}, [r2, : 128]
+	vmlal.s32	q7, d24, d9
+	vmlal.s32	q7, d25, d31
+	vmull.s32	q1, d18, d2
+	vmlal.s32	q1, d19, d1
+	vmlal.s32	q1, d22, d0
+	vmlal.s32	q1, d24, d27
+	vmlal.s32	q1, d23, d20
+	vmlal.s32	q1, d12, d7
+	vmlal.s32	q1, d13, d6
+	vmull.s32	q6, d18, d1
+	vmlal.s32	q6, d19, d0
+	vmlal.s32	q6, d23, d27
+	vmlal.s32	q6, d22, d20
+	vmlal.s32	q6, d24, d26
+	vmull.s32	q0, d18, d0
+	vmlal.s32	q0, d22, d27
+	vmlal.s32	q0, d23, d26
+	vmlal.s32	q0, d24, d31
+	vmlal.s32	q0, d19, d20
+	add		r2, sp, #608
+	vld1.8		{d18-d19}, [r2, : 128]
+	vmlal.s32	q2, d18, d7
+	vmlal.s32	q5, d18, d6
+	vmlal.s32	q1, d18, d21
+	vmlal.s32	q0, d18, d28
+	vmlal.s32	q6, d18, d29
+	vmlal.s32	q2, d19, d6
+	vmlal.s32	q5, d19, d21
+	vmlal.s32	q1, d19, d29
+	vmlal.s32	q0, d19, d9
+	vmlal.s32	q6, d19, d28
+	add		r2, sp, #560
+	vld1.8		{d18-d19}, [r2, : 128]
+	add		r2, sp, #480
+	vld1.8		{d22-d23}, [r2, : 128]
+	vmlal.s32	q5, d19, d7
+	vmlal.s32	q0, d18, d21
+	vmlal.s32	q0, d19, d29
+	vmlal.s32	q6, d18, d6
+	add		r2, sp, #496
+	vld1.8		{d6-d7}, [r2, : 128]
+	vmlal.s32	q6, d19, d21
+	add		r2, sp, #544
+	vld1.8		{d18-d19}, [r2, : 128]
+	vmlal.s32	q0, d30, d8
+	add		r2, sp, #640
+	vld1.8		{d20-d21}, [r2, : 128]
+	vmlal.s32	q5, d30, d29
+	add		r2, sp, #576
+	vld1.8		{d24-d25}, [r2, : 128]
+	vmlal.s32	q1, d30, d28
+	vadd.i64	q13, q0, q11
+	vadd.i64	q14, q5, q11
+	vmlal.s32	q6, d30, d9
+	vshr.s64	q4, q13, #26
+	vshr.s64	q13, q14, #26
+	vadd.i64	q7, q7, q4
+	vshl.i64	q4, q4, #26
+	vadd.i64	q14, q7, q3
+	vadd.i64	q9, q9, q13
+	vshl.i64	q13, q13, #26
+	vadd.i64	q15, q9, q3
+	vsub.i64	q0, q0, q4
+	vshr.s64	q4, q14, #25
+	vsub.i64	q5, q5, q13
+	vshr.s64	q13, q15, #25
+	vadd.i64	q6, q6, q4
+	vshl.i64	q4, q4, #25
+	vadd.i64	q14, q6, q11
+	vadd.i64	q2, q2, q13
+	vsub.i64	q4, q7, q4
+	vshr.s64	q7, q14, #26
+	vshl.i64	q13, q13, #25
+	vadd.i64	q14, q2, q11
+	vadd.i64	q8, q8, q7
+	vshl.i64	q7, q7, #26
+	vadd.i64	q15, q8, q3
+	vsub.i64	q9, q9, q13
+	vshr.s64	q13, q14, #26
+	vsub.i64	q6, q6, q7
+	vshr.s64	q7, q15, #25
+	vadd.i64	q10, q10, q13
+	vshl.i64	q13, q13, #26
+	vadd.i64	q14, q10, q3
+	vadd.i64	q1, q1, q7
+	add		r2, r3, #144
+	vshl.i64	q7, q7, #25
+	add		r4, r3, #96
+	vadd.i64	q15, q1, q11
+	add		r2, r2, #8
+	vsub.i64	q2, q2, q13
+	add		r4, r4, #8
+	vshr.s64	q13, q14, #25
+	vsub.i64	q7, q8, q7
+	vshr.s64	q8, q15, #26
+	vadd.i64	q14, q13, q13
+	vadd.i64	q12, q12, q8
+	vtrn.32		d12, d14
+	vshl.i64	q8, q8, #26
+	vtrn.32		d13, d15
+	vadd.i64	q3, q12, q3
+	vadd.i64	q0, q0, q14
+	vst1.8		d12, [r2, : 64]!
+	vshl.i64	q7, q13, #4
+	vst1.8		d13, [r4, : 64]!
+	vsub.i64	q1, q1, q8
+	vshr.s64	q3, q3, #25
+	vadd.i64	q0, q0, q7
+	vadd.i64	q5, q5, q3
+	vshl.i64	q3, q3, #25
+	vadd.i64	q6, q5, q11
+	vadd.i64	q0, q0, q13
+	vshl.i64	q7, q13, #25
+	vadd.i64	q8, q0, q11
+	vsub.i64	q3, q12, q3
+	vshr.s64	q6, q6, #26
+	vsub.i64	q7, q10, q7
+	vtrn.32		d2, d6
+	vshr.s64	q8, q8, #26
+	vtrn.32		d3, d7
+	vadd.i64	q3, q9, q6
+	vst1.8		d2, [r2, : 64]
+	vshl.i64	q6, q6, #26
+	vst1.8		d3, [r4, : 64]
+	vadd.i64	q1, q4, q8
+	vtrn.32		d4, d14
+	vshl.i64	q4, q8, #26
+	vtrn.32		d5, d15
+	vsub.i64	q5, q5, q6
+	add		r2, r2, #16
+	vsub.i64	q0, q0, q4
+	vst1.8		d4, [r2, : 64]
+	add		r4, r4, #16
+	vst1.8		d5, [r4, : 64]
+	vtrn.32		d10, d6
+	vtrn.32		d11, d7
+	sub		r2, r2, #8
+	sub		r4, r4, #8
+	vtrn.32		d0, d2
+	vtrn.32		d1, d3
+	vst1.8		d10, [r2, : 64]
+	vst1.8		d11, [r4, : 64]
+	sub		r2, r2, #24
+	sub		r4, r4, #24
+	vst1.8		d0, [r2, : 64]
+	vst1.8		d1, [r4, : 64]
+	add		r2, r3, #288
+	add		r4, r3, #336
+	vld1.8		{d0-d1}, [r2, : 128]!
+	vld1.8		{d2-d3}, [r4, : 128]!
+	vsub.i32	q0, q0, q1
+	vld1.8		{d2-d3}, [r2, : 128]!
+	vld1.8		{d4-d5}, [r4, : 128]!
+	vsub.i32	q1, q1, q2
+	add		r5, r3, #240
+	vld1.8		{d4}, [r2, : 64]
+	vld1.8		{d6}, [r4, : 64]
+	vsub.i32	q2, q2, q3
+	vst1.8		{d0-d1}, [r5, : 128]!
+	vst1.8		{d2-d3}, [r5, : 128]!
+	vst1.8		d4, [r5, : 64]
+	add		r2, r3, #144
+	add		r4, r3, #96
+	add		r5, r3, #144
+	add		r6, r3, #192
+	vld1.8		{d0-d1}, [r2, : 128]!
+	vld1.8		{d2-d3}, [r4, : 128]!
+	vsub.i32	q2, q0, q1
+	vadd.i32	q0, q0, q1
+	vld1.8		{d2-d3}, [r2, : 128]!
+	vld1.8		{d6-d7}, [r4, : 128]!
+	vsub.i32	q4, q1, q3
+	vadd.i32	q1, q1, q3
+	vld1.8		{d6}, [r2, : 64]
+	vld1.8		{d10}, [r4, : 64]
+	vsub.i32	q6, q3, q5
+	vadd.i32	q3, q3, q5
+	vst1.8		{d4-d5}, [r5, : 128]!
+	vst1.8		{d0-d1}, [r6, : 128]!
+	vst1.8		{d8-d9}, [r5, : 128]!
+	vst1.8		{d2-d3}, [r6, : 128]!
+	vst1.8		d12, [r5, : 64]
+	vst1.8		d6, [r6, : 64]
+	add		r2, r3, #0
+	add		r4, r3, #240
+	vld1.8		{d0-d1}, [r4, : 128]!
+	vld1.8		{d2-d3}, [r4, : 128]!
+	vld1.8		{d4}, [r4, : 64]
+	add		r4, r3, #336
+	vld1.8		{d6-d7}, [r4, : 128]!
+	vtrn.32		q0, q3
+	vld1.8		{d8-d9}, [r4, : 128]!
+	vshl.i32	q5, q0, #4
+	vtrn.32		q1, q4
+	vshl.i32	q6, q3, #4
+	vadd.i32	q5, q5, q0
+	vadd.i32	q6, q6, q3
+	vshl.i32	q7, q1, #4
+	vld1.8		{d5}, [r4, : 64]
+	vshl.i32	q8, q4, #4
+	vtrn.32		d4, d5
+	vadd.i32	q7, q7, q1
+	vadd.i32	q8, q8, q4
+	vld1.8		{d18-d19}, [r2, : 128]!
+	vshl.i32	q10, q2, #4
+	vld1.8		{d22-d23}, [r2, : 128]!
+	vadd.i32	q10, q10, q2
+	vld1.8		{d24}, [r2, : 64]
+	vadd.i32	q5, q5, q0
+	add		r2, r3, #288
+	vld1.8		{d26-d27}, [r2, : 128]!
+	vadd.i32	q6, q6, q3
+	vld1.8		{d28-d29}, [r2, : 128]!
+	vadd.i32	q8, q8, q4
+	vld1.8		{d25}, [r2, : 64]
+	vadd.i32	q10, q10, q2
+	vtrn.32		q9, q13
+	vadd.i32	q7, q7, q1
+	vadd.i32	q5, q5, q0
+	vtrn.32		q11, q14
+	vadd.i32	q6, q6, q3
+	add		r2, sp, #528
+	vadd.i32	q10, q10, q2
+	vtrn.32		d24, d25
+	vst1.8		{d12-d13}, [r2, : 128]!
+	vshl.i32	q6, q13, #1
+	vst1.8		{d20-d21}, [r2, : 128]!
+	vshl.i32	q10, q14, #1
+	vst1.8		{d12-d13}, [r2, : 128]!
+	vshl.i32	q15, q12, #1
+	vadd.i32	q8, q8, q4
+	vext.32		d10, d31, d30, #0
+	vadd.i32	q7, q7, q1
+	vst1.8		{d16-d17}, [r2, : 128]!
+	vmull.s32	q8, d18, d5
+	vmlal.s32	q8, d26, d4
+	vmlal.s32	q8, d19, d9
+	vmlal.s32	q8, d27, d3
+	vmlal.s32	q8, d22, d8
+	vmlal.s32	q8, d28, d2
+	vmlal.s32	q8, d23, d7
+	vmlal.s32	q8, d29, d1
+	vmlal.s32	q8, d24, d6
+	vmlal.s32	q8, d25, d0
+	vst1.8		{d14-d15}, [r2, : 128]!
+	vmull.s32	q2, d18, d4
+	vmlal.s32	q2, d12, d9
+	vmlal.s32	q2, d13, d8
+	vmlal.s32	q2, d19, d3
+	vmlal.s32	q2, d22, d2
+	vmlal.s32	q2, d23, d1
+	vmlal.s32	q2, d24, d0
+	vst1.8		{d20-d21}, [r2, : 128]!
+	vmull.s32	q7, d18, d9
+	vmlal.s32	q7, d26, d3
+	vmlal.s32	q7, d19, d8
+	vmlal.s32	q7, d27, d2
+	vmlal.s32	q7, d22, d7
+	vmlal.s32	q7, d28, d1
+	vmlal.s32	q7, d23, d6
+	vmlal.s32	q7, d29, d0
+	vst1.8		{d10-d11}, [r2, : 128]!
+	vmull.s32	q5, d18, d3
+	vmlal.s32	q5, d19, d2
+	vmlal.s32	q5, d22, d1
+	vmlal.s32	q5, d23, d0
+	vmlal.s32	q5, d12, d8
+	vst1.8		{d16-d17}, [r2, : 128]!
+	vmull.s32	q4, d18, d8
+	vmlal.s32	q4, d26, d2
+	vmlal.s32	q4, d19, d7
+	vmlal.s32	q4, d27, d1
+	vmlal.s32	q4, d22, d6
+	vmlal.s32	q4, d28, d0
+	vmull.s32	q8, d18, d7
+	vmlal.s32	q8, d26, d1
+	vmlal.s32	q8, d19, d6
+	vmlal.s32	q8, d27, d0
+	add		r2, sp, #544
+	vld1.8		{d20-d21}, [r2, : 128]
+	vmlal.s32	q7, d24, d21
+	vmlal.s32	q7, d25, d20
+	vmlal.s32	q4, d23, d21
+	vmlal.s32	q4, d29, d20
+	vmlal.s32	q8, d22, d21
+	vmlal.s32	q8, d28, d20
+	vmlal.s32	q5, d24, d20
+	vst1.8		{d14-d15}, [r2, : 128]
+	vmull.s32	q7, d18, d6
+	vmlal.s32	q7, d26, d0
+	add		r2, sp, #624
+	vld1.8		{d30-d31}, [r2, : 128]
+	vmlal.s32	q2, d30, d21
+	vmlal.s32	q7, d19, d21
+	vmlal.s32	q7, d27, d20
+	add		r2, sp, #592
+	vld1.8		{d26-d27}, [r2, : 128]
+	vmlal.s32	q4, d25, d27
+	vmlal.s32	q8, d29, d27
+	vmlal.s32	q8, d25, d26
+	vmlal.s32	q7, d28, d27
+	vmlal.s32	q7, d29, d26
+	add		r2, sp, #576
+	vld1.8		{d28-d29}, [r2, : 128]
+	vmlal.s32	q4, d24, d29
+	vmlal.s32	q8, d23, d29
+	vmlal.s32	q8, d24, d28
+	vmlal.s32	q7, d22, d29
+	vmlal.s32	q7, d23, d28
+	vst1.8		{d8-d9}, [r2, : 128]
+	add		r2, sp, #528
+	vld1.8		{d8-d9}, [r2, : 128]
+	vmlal.s32	q7, d24, d9
+	vmlal.s32	q7, d25, d31
+	vmull.s32	q1, d18, d2
+	vmlal.s32	q1, d19, d1
+	vmlal.s32	q1, d22, d0
+	vmlal.s32	q1, d24, d27
+	vmlal.s32	q1, d23, d20
+	vmlal.s32	q1, d12, d7
+	vmlal.s32	q1, d13, d6
+	vmull.s32	q6, d18, d1
+	vmlal.s32	q6, d19, d0
+	vmlal.s32	q6, d23, d27
+	vmlal.s32	q6, d22, d20
+	vmlal.s32	q6, d24, d26
+	vmull.s32	q0, d18, d0
+	vmlal.s32	q0, d22, d27
+	vmlal.s32	q0, d23, d26
+	vmlal.s32	q0, d24, d31
+	vmlal.s32	q0, d19, d20
+	add		r2, sp, #608
+	vld1.8		{d18-d19}, [r2, : 128]
+	vmlal.s32	q2, d18, d7
+	vmlal.s32	q5, d18, d6
+	vmlal.s32	q1, d18, d21
+	vmlal.s32	q0, d18, d28
+	vmlal.s32	q6, d18, d29
+	vmlal.s32	q2, d19, d6
+	vmlal.s32	q5, d19, d21
+	vmlal.s32	q1, d19, d29
+	vmlal.s32	q0, d19, d9
+	vmlal.s32	q6, d19, d28
+	add		r2, sp, #560
+	vld1.8		{d18-d19}, [r2, : 128]
+	add		r2, sp, #480
+	vld1.8		{d22-d23}, [r2, : 128]
+	vmlal.s32	q5, d19, d7
+	vmlal.s32	q0, d18, d21
+	vmlal.s32	q0, d19, d29
+	vmlal.s32	q6, d18, d6
+	add		r2, sp, #496
+	vld1.8		{d6-d7}, [r2, : 128]
+	vmlal.s32	q6, d19, d21
+	add		r2, sp, #544
+	vld1.8		{d18-d19}, [r2, : 128]
+	vmlal.s32	q0, d30, d8
+	add		r2, sp, #640
+	vld1.8		{d20-d21}, [r2, : 128]
+	vmlal.s32	q5, d30, d29
+	add		r2, sp, #576
+	vld1.8		{d24-d25}, [r2, : 128]
+	vmlal.s32	q1, d30, d28
+	vadd.i64	q13, q0, q11
+	vadd.i64	q14, q5, q11
+	vmlal.s32	q6, d30, d9
+	vshr.s64	q4, q13, #26
+	vshr.s64	q13, q14, #26
+	vadd.i64	q7, q7, q4
+	vshl.i64	q4, q4, #26
+	vadd.i64	q14, q7, q3
+	vadd.i64	q9, q9, q13
+	vshl.i64	q13, q13, #26
+	vadd.i64	q15, q9, q3
+	vsub.i64	q0, q0, q4
+	vshr.s64	q4, q14, #25
+	vsub.i64	q5, q5, q13
+	vshr.s64	q13, q15, #25
+	vadd.i64	q6, q6, q4
+	vshl.i64	q4, q4, #25
+	vadd.i64	q14, q6, q11
+	vadd.i64	q2, q2, q13
+	vsub.i64	q4, q7, q4
+	vshr.s64	q7, q14, #26
+	vshl.i64	q13, q13, #25
+	vadd.i64	q14, q2, q11
+	vadd.i64	q8, q8, q7
+	vshl.i64	q7, q7, #26
+	vadd.i64	q15, q8, q3
+	vsub.i64	q9, q9, q13
+	vshr.s64	q13, q14, #26
+	vsub.i64	q6, q6, q7
+	vshr.s64	q7, q15, #25
+	vadd.i64	q10, q10, q13
+	vshl.i64	q13, q13, #26
+	vadd.i64	q14, q10, q3
+	vadd.i64	q1, q1, q7
+	add		r2, r3, #288
+	vshl.i64	q7, q7, #25
+	add		r4, r3, #96
+	vadd.i64	q15, q1, q11
+	add		r2, r2, #8
+	vsub.i64	q2, q2, q13
+	add		r4, r4, #8
+	vshr.s64	q13, q14, #25
+	vsub.i64	q7, q8, q7
+	vshr.s64	q8, q15, #26
+	vadd.i64	q14, q13, q13
+	vadd.i64	q12, q12, q8
+	vtrn.32		d12, d14
+	vshl.i64	q8, q8, #26
+	vtrn.32		d13, d15
+	vadd.i64	q3, q12, q3
+	vadd.i64	q0, q0, q14
+	vst1.8		d12, [r2, : 64]!
+	vshl.i64	q7, q13, #4
+	vst1.8		d13, [r4, : 64]!
+	vsub.i64	q1, q1, q8
+	vshr.s64	q3, q3, #25
+	vadd.i64	q0, q0, q7
+	vadd.i64	q5, q5, q3
+	vshl.i64	q3, q3, #25
+	vadd.i64	q6, q5, q11
+	vadd.i64	q0, q0, q13
+	vshl.i64	q7, q13, #25
+	vadd.i64	q8, q0, q11
+	vsub.i64	q3, q12, q3
+	vshr.s64	q6, q6, #26
+	vsub.i64	q7, q10, q7
+	vtrn.32		d2, d6
+	vshr.s64	q8, q8, #26
+	vtrn.32		d3, d7
+	vadd.i64	q3, q9, q6
+	vst1.8		d2, [r2, : 64]
+	vshl.i64	q6, q6, #26
+	vst1.8		d3, [r4, : 64]
+	vadd.i64	q1, q4, q8
+	vtrn.32		d4, d14
+	vshl.i64	q4, q8, #26
+	vtrn.32		d5, d15
+	vsub.i64	q5, q5, q6
+	add		r2, r2, #16
+	vsub.i64	q0, q0, q4
+	vst1.8		d4, [r2, : 64]
+	add		r4, r4, #16
+	vst1.8		d5, [r4, : 64]
+	vtrn.32		d10, d6
+	vtrn.32		d11, d7
+	sub		r2, r2, #8
+	sub		r4, r4, #8
+	vtrn.32		d0, d2
+	vtrn.32		d1, d3
+	vst1.8		d10, [r2, : 64]
+	vst1.8		d11, [r4, : 64]
+	sub		r2, r2, #24
+	sub		r4, r4, #24
+	vst1.8		d0, [r2, : 64]
+	vst1.8		d1, [r4, : 64]
+	add		r2, sp, #512
+	add		r4, r3, #144
+	add		r5, r3, #192
+	vld1.8		{d0-d1}, [r2, : 128]
+	vld1.8		{d2-d3}, [r4, : 128]!
+	vld1.8		{d4-d5}, [r5, : 128]!
+	vzip.i32	q1, q2
+	vld1.8		{d6-d7}, [r4, : 128]!
+	vld1.8		{d8-d9}, [r5, : 128]!
+	vshl.i32	q5, q1, #1
+	vzip.i32	q3, q4
+	vshl.i32	q6, q2, #1
+	vld1.8		{d14}, [r4, : 64]
+	vshl.i32	q8, q3, #1
+	vld1.8		{d15}, [r5, : 64]
+	vshl.i32	q9, q4, #1
+	vmul.i32	d21, d7, d1
+	vtrn.32		d14, d15
+	vmul.i32	q11, q4, q0
+	vmul.i32	q0, q7, q0
+	vmull.s32	q12, d2, d2
+	vmlal.s32	q12, d11, d1
+	vmlal.s32	q12, d12, d0
+	vmlal.s32	q12, d13, d23
+	vmlal.s32	q12, d16, d22
+	vmlal.s32	q12, d7, d21
+	vmull.s32	q10, d2, d11
+	vmlal.s32	q10, d4, d1
+	vmlal.s32	q10, d13, d0
+	vmlal.s32	q10, d6, d23
+	vmlal.s32	q10, d17, d22
+	vmull.s32	q13, d10, d4
+	vmlal.s32	q13, d11, d3
+	vmlal.s32	q13, d13, d1
+	vmlal.s32	q13, d16, d0
+	vmlal.s32	q13, d17, d23
+	vmlal.s32	q13, d8, d22
+	vmull.s32	q1, d10, d5
+	vmlal.s32	q1, d11, d4
+	vmlal.s32	q1, d6, d1
+	vmlal.s32	q1, d17, d0
+	vmlal.s32	q1, d8, d23
+	vmull.s32	q14, d10, d6
+	vmlal.s32	q14, d11, d13
+	vmlal.s32	q14, d4, d4
+	vmlal.s32	q14, d17, d1
+	vmlal.s32	q14, d18, d0
+	vmlal.s32	q14, d9, d23
+	vmull.s32	q11, d10, d7
+	vmlal.s32	q11, d11, d6
+	vmlal.s32	q11, d12, d5
+	vmlal.s32	q11, d8, d1
+	vmlal.s32	q11, d19, d0
+	vmull.s32	q15, d10, d8
+	vmlal.s32	q15, d11, d17
+	vmlal.s32	q15, d12, d6
+	vmlal.s32	q15, d13, d5
+	vmlal.s32	q15, d19, d1
+	vmlal.s32	q15, d14, d0
+	vmull.s32	q2, d10, d9
+	vmlal.s32	q2, d11, d8
+	vmlal.s32	q2, d12, d7
+	vmlal.s32	q2, d13, d6
+	vmlal.s32	q2, d14, d1
+	vmull.s32	q0, d15, d1
+	vmlal.s32	q0, d10, d14
+	vmlal.s32	q0, d11, d19
+	vmlal.s32	q0, d12, d8
+	vmlal.s32	q0, d13, d17
+	vmlal.s32	q0, d6, d6
+	add		r2, sp, #480
+	vld1.8		{d18-d19}, [r2, : 128]!
+	vmull.s32	q3, d16, d7
+	vmlal.s32	q3, d10, d15
+	vmlal.s32	q3, d11, d14
+	vmlal.s32	q3, d12, d9
+	vmlal.s32	q3, d13, d8
+	vld1.8		{d8-d9}, [r2, : 128]
+	vadd.i64	q5, q12, q9
+	vadd.i64	q6, q15, q9
+	vshr.s64	q5, q5, #26
+	vshr.s64	q6, q6, #26
+	vadd.i64	q7, q10, q5
+	vshl.i64	q5, q5, #26
+	vadd.i64	q8, q7, q4
+	vadd.i64	q2, q2, q6
+	vshl.i64	q6, q6, #26
+	vadd.i64	q10, q2, q4
+	vsub.i64	q5, q12, q5
+	vshr.s64	q8, q8, #25
+	vsub.i64	q6, q15, q6
+	vshr.s64	q10, q10, #25
+	vadd.i64	q12, q13, q8
+	vshl.i64	q8, q8, #25
+	vadd.i64	q13, q12, q9
+	vadd.i64	q0, q0, q10
+	vsub.i64	q7, q7, q8
+	vshr.s64	q8, q13, #26
+	vshl.i64	q10, q10, #25
+	vadd.i64	q13, q0, q9
+	vadd.i64	q1, q1, q8
+	vshl.i64	q8, q8, #26
+	vadd.i64	q15, q1, q4
+	vsub.i64	q2, q2, q10
+	vshr.s64	q10, q13, #26
+	vsub.i64	q8, q12, q8
+	vshr.s64	q12, q15, #25
+	vadd.i64	q3, q3, q10
+	vshl.i64	q10, q10, #26
+	vadd.i64	q13, q3, q4
+	vadd.i64	q14, q14, q12
+	add		r2, r3, #144
+	vshl.i64	q12, q12, #25
+	add		r4, r3, #192
+	vadd.i64	q15, q14, q9
+	add		r2, r2, #8
+	vsub.i64	q0, q0, q10
+	add		r4, r4, #8
+	vshr.s64	q10, q13, #25
+	vsub.i64	q1, q1, q12
+	vshr.s64	q12, q15, #26
+	vadd.i64	q13, q10, q10
+	vadd.i64	q11, q11, q12
+	vtrn.32		d16, d2
+	vshl.i64	q12, q12, #26
+	vtrn.32		d17, d3
+	vadd.i64	q1, q11, q4
+	vadd.i64	q4, q5, q13
+	vst1.8		d16, [r2, : 64]!
+	vshl.i64	q5, q10, #4
+	vst1.8		d17, [r4, : 64]!
+	vsub.i64	q8, q14, q12
+	vshr.s64	q1, q1, #25
+	vadd.i64	q4, q4, q5
+	vadd.i64	q5, q6, q1
+	vshl.i64	q1, q1, #25
+	vadd.i64	q6, q5, q9
+	vadd.i64	q4, q4, q10
+	vshl.i64	q10, q10, #25
+	vadd.i64	q9, q4, q9
+	vsub.i64	q1, q11, q1
+	vshr.s64	q6, q6, #26
+	vsub.i64	q3, q3, q10
+	vtrn.32		d16, d2
+	vshr.s64	q9, q9, #26
+	vtrn.32		d17, d3
+	vadd.i64	q1, q2, q6
+	vst1.8		d16, [r2, : 64]
+	vshl.i64	q2, q6, #26
+	vst1.8		d17, [r4, : 64]
+	vadd.i64	q6, q7, q9
+	vtrn.32		d0, d6
+	vshl.i64	q7, q9, #26
+	vtrn.32		d1, d7
+	vsub.i64	q2, q5, q2
+	add		r2, r2, #16
+	vsub.i64	q3, q4, q7
+	vst1.8		d0, [r2, : 64]
+	add		r4, r4, #16
+	vst1.8		d1, [r4, : 64]
+	vtrn.32		d4, d2
+	vtrn.32		d5, d3
+	sub		r2, r2, #8
+	sub		r4, r4, #8
+	vtrn.32		d6, d12
+	vtrn.32		d7, d13
+	vst1.8		d4, [r2, : 64]
+	vst1.8		d5, [r4, : 64]
+	sub		r2, r2, #24
+	sub		r4, r4, #24
+	vst1.8		d6, [r2, : 64]
+	vst1.8		d7, [r4, : 64]
+	add		r2, r3, #336
+	add		r4, r3, #288
+	vld1.8		{d0-d1}, [r2, : 128]!
+	vld1.8		{d2-d3}, [r4, : 128]!
+	vadd.i32	q0, q0, q1
+	vld1.8		{d2-d3}, [r2, : 128]!
+	vld1.8		{d4-d5}, [r4, : 128]!
+	vadd.i32	q1, q1, q2
+	add		r5, r3, #288
+	vld1.8		{d4}, [r2, : 64]
+	vld1.8		{d6}, [r4, : 64]
+	vadd.i32	q2, q2, q3
+	vst1.8		{d0-d1}, [r5, : 128]!
+	vst1.8		{d2-d3}, [r5, : 128]!
+	vst1.8		d4, [r5, : 64]
+	add		r2, r3, #48
+	add		r4, r3, #144
+	vld1.8		{d0-d1}, [r4, : 128]!
+	vld1.8		{d2-d3}, [r4, : 128]!
+	vld1.8		{d4}, [r4, : 64]
+	add		r4, r3, #288
+	vld1.8		{d6-d7}, [r4, : 128]!
+	vtrn.32		q0, q3
+	vld1.8		{d8-d9}, [r4, : 128]!
+	vshl.i32	q5, q0, #4
+	vtrn.32		q1, q4
+	vshl.i32	q6, q3, #4
+	vadd.i32	q5, q5, q0
+	vadd.i32	q6, q6, q3
+	vshl.i32	q7, q1, #4
+	vld1.8		{d5}, [r4, : 64]
+	vshl.i32	q8, q4, #4
+	vtrn.32		d4, d5
+	vadd.i32	q7, q7, q1
+	vadd.i32	q8, q8, q4
+	vld1.8		{d18-d19}, [r2, : 128]!
+	vshl.i32	q10, q2, #4
+	vld1.8		{d22-d23}, [r2, : 128]!
+	vadd.i32	q10, q10, q2
+	vld1.8		{d24}, [r2, : 64]
+	vadd.i32	q5, q5, q0
+	add		r2, r3, #240
+	vld1.8		{d26-d27}, [r2, : 128]!
+	vadd.i32	q6, q6, q3
+	vld1.8		{d28-d29}, [r2, : 128]!
+	vadd.i32	q8, q8, q4
+	vld1.8		{d25}, [r2, : 64]
+	vadd.i32	q10, q10, q2
+	vtrn.32		q9, q13
+	vadd.i32	q7, q7, q1
+	vadd.i32	q5, q5, q0
+	vtrn.32		q11, q14
+	vadd.i32	q6, q6, q3
+	add		r2, sp, #528
+	vadd.i32	q10, q10, q2
+	vtrn.32		d24, d25
+	vst1.8		{d12-d13}, [r2, : 128]!
+	vshl.i32	q6, q13, #1
+	vst1.8		{d20-d21}, [r2, : 128]!
+	vshl.i32	q10, q14, #1
+	vst1.8		{d12-d13}, [r2, : 128]!
+	vshl.i32	q15, q12, #1
+	vadd.i32	q8, q8, q4
+	vext.32		d10, d31, d30, #0
+	vadd.i32	q7, q7, q1
+	vst1.8		{d16-d17}, [r2, : 128]!
+	vmull.s32	q8, d18, d5
+	vmlal.s32	q8, d26, d4
+	vmlal.s32	q8, d19, d9
+	vmlal.s32	q8, d27, d3
+	vmlal.s32	q8, d22, d8
+	vmlal.s32	q8, d28, d2
+	vmlal.s32	q8, d23, d7
+	vmlal.s32	q8, d29, d1
+	vmlal.s32	q8, d24, d6
+	vmlal.s32	q8, d25, d0
+	vst1.8		{d14-d15}, [r2, : 128]!
+	vmull.s32	q2, d18, d4
+	vmlal.s32	q2, d12, d9
+	vmlal.s32	q2, d13, d8
+	vmlal.s32	q2, d19, d3
+	vmlal.s32	q2, d22, d2
+	vmlal.s32	q2, d23, d1
+	vmlal.s32	q2, d24, d0
+	vst1.8		{d20-d21}, [r2, : 128]!
+	vmull.s32	q7, d18, d9
+	vmlal.s32	q7, d26, d3
+	vmlal.s32	q7, d19, d8
+	vmlal.s32	q7, d27, d2
+	vmlal.s32	q7, d22, d7
+	vmlal.s32	q7, d28, d1
+	vmlal.s32	q7, d23, d6
+	vmlal.s32	q7, d29, d0
+	vst1.8		{d10-d11}, [r2, : 128]!
+	vmull.s32	q5, d18, d3
+	vmlal.s32	q5, d19, d2
+	vmlal.s32	q5, d22, d1
+	vmlal.s32	q5, d23, d0
+	vmlal.s32	q5, d12, d8
+	vst1.8		{d16-d17}, [r2, : 128]!
+	vmull.s32	q4, d18, d8
+	vmlal.s32	q4, d26, d2
+	vmlal.s32	q4, d19, d7
+	vmlal.s32	q4, d27, d1
+	vmlal.s32	q4, d22, d6
+	vmlal.s32	q4, d28, d0
+	vmull.s32	q8, d18, d7
+	vmlal.s32	q8, d26, d1
+	vmlal.s32	q8, d19, d6
+	vmlal.s32	q8, d27, d0
+	add		r2, sp, #544
+	vld1.8		{d20-d21}, [r2, : 128]
+	vmlal.s32	q7, d24, d21
+	vmlal.s32	q7, d25, d20
+	vmlal.s32	q4, d23, d21
+	vmlal.s32	q4, d29, d20
+	vmlal.s32	q8, d22, d21
+	vmlal.s32	q8, d28, d20
+	vmlal.s32	q5, d24, d20
+	vst1.8		{d14-d15}, [r2, : 128]
+	vmull.s32	q7, d18, d6
+	vmlal.s32	q7, d26, d0
+	add		r2, sp, #624
+	vld1.8		{d30-d31}, [r2, : 128]
+	vmlal.s32	q2, d30, d21
+	vmlal.s32	q7, d19, d21
+	vmlal.s32	q7, d27, d20
+	add		r2, sp, #592
+	vld1.8		{d26-d27}, [r2, : 128]
+	vmlal.s32	q4, d25, d27
+	vmlal.s32	q8, d29, d27
+	vmlal.s32	q8, d25, d26
+	vmlal.s32	q7, d28, d27
+	vmlal.s32	q7, d29, d26
+	add		r2, sp, #576
+	vld1.8		{d28-d29}, [r2, : 128]
+	vmlal.s32	q4, d24, d29
+	vmlal.s32	q8, d23, d29
+	vmlal.s32	q8, d24, d28
+	vmlal.s32	q7, d22, d29
+	vmlal.s32	q7, d23, d28
+	vst1.8		{d8-d9}, [r2, : 128]
+	add		r2, sp, #528
+	vld1.8		{d8-d9}, [r2, : 128]
+	vmlal.s32	q7, d24, d9
+	vmlal.s32	q7, d25, d31
+	vmull.s32	q1, d18, d2
+	vmlal.s32	q1, d19, d1
+	vmlal.s32	q1, d22, d0
+	vmlal.s32	q1, d24, d27
+	vmlal.s32	q1, d23, d20
+	vmlal.s32	q1, d12, d7
+	vmlal.s32	q1, d13, d6
+	vmull.s32	q6, d18, d1
+	vmlal.s32	q6, d19, d0
+	vmlal.s32	q6, d23, d27
+	vmlal.s32	q6, d22, d20
+	vmlal.s32	q6, d24, d26
+	vmull.s32	q0, d18, d0
+	vmlal.s32	q0, d22, d27
+	vmlal.s32	q0, d23, d26
+	vmlal.s32	q0, d24, d31
+	vmlal.s32	q0, d19, d20
+	add		r2, sp, #608
+	vld1.8		{d18-d19}, [r2, : 128]
+	vmlal.s32	q2, d18, d7
+	vmlal.s32	q5, d18, d6
+	vmlal.s32	q1, d18, d21
+	vmlal.s32	q0, d18, d28
+	vmlal.s32	q6, d18, d29
+	vmlal.s32	q2, d19, d6
+	vmlal.s32	q5, d19, d21
+	vmlal.s32	q1, d19, d29
+	vmlal.s32	q0, d19, d9
+	vmlal.s32	q6, d19, d28
+	add		r2, sp, #560
+	vld1.8		{d18-d19}, [r2, : 128]
+	add		r2, sp, #480
+	vld1.8		{d22-d23}, [r2, : 128]
+	vmlal.s32	q5, d19, d7
+	vmlal.s32	q0, d18, d21
+	vmlal.s32	q0, d19, d29
+	vmlal.s32	q6, d18, d6
+	add		r2, sp, #496
+	vld1.8		{d6-d7}, [r2, : 128]
+	vmlal.s32	q6, d19, d21
+	add		r2, sp, #544
+	vld1.8		{d18-d19}, [r2, : 128]
+	vmlal.s32	q0, d30, d8
+	add		r2, sp, #640
+	vld1.8		{d20-d21}, [r2, : 128]
+	vmlal.s32	q5, d30, d29
+	add		r2, sp, #576
+	vld1.8		{d24-d25}, [r2, : 128]
+	vmlal.s32	q1, d30, d28
+	vadd.i64	q13, q0, q11
+	vadd.i64	q14, q5, q11
+	vmlal.s32	q6, d30, d9
+	vshr.s64	q4, q13, #26
+	vshr.s64	q13, q14, #26
+	vadd.i64	q7, q7, q4
+	vshl.i64	q4, q4, #26
+	vadd.i64	q14, q7, q3
+	vadd.i64	q9, q9, q13
+	vshl.i64	q13, q13, #26
+	vadd.i64	q15, q9, q3
+	vsub.i64	q0, q0, q4
+	vshr.s64	q4, q14, #25
+	vsub.i64	q5, q5, q13
+	vshr.s64	q13, q15, #25
+	vadd.i64	q6, q6, q4
+	vshl.i64	q4, q4, #25
+	vadd.i64	q14, q6, q11
+	vadd.i64	q2, q2, q13
+	vsub.i64	q4, q7, q4
+	vshr.s64	q7, q14, #26
+	vshl.i64	q13, q13, #25
+	vadd.i64	q14, q2, q11
+	vadd.i64	q8, q8, q7
+	vshl.i64	q7, q7, #26
+	vadd.i64	q15, q8, q3
+	vsub.i64	q9, q9, q13
+	vshr.s64	q13, q14, #26
+	vsub.i64	q6, q6, q7
+	vshr.s64	q7, q15, #25
+	vadd.i64	q10, q10, q13
+	vshl.i64	q13, q13, #26
+	vadd.i64	q14, q10, q3
+	vadd.i64	q1, q1, q7
+	add		r2, r3, #240
+	vshl.i64	q7, q7, #25
+	add		r4, r3, #144
+	vadd.i64	q15, q1, q11
+	add		r2, r2, #8
+	vsub.i64	q2, q2, q13
+	add		r4, r4, #8
+	vshr.s64	q13, q14, #25
+	vsub.i64	q7, q8, q7
+	vshr.s64	q8, q15, #26
+	vadd.i64	q14, q13, q13
+	vadd.i64	q12, q12, q8
+	vtrn.32		d12, d14
+	vshl.i64	q8, q8, #26
+	vtrn.32		d13, d15
+	vadd.i64	q3, q12, q3
+	vadd.i64	q0, q0, q14
+	vst1.8		d12, [r2, : 64]!
+	vshl.i64	q7, q13, #4
+	vst1.8		d13, [r4, : 64]!
+	vsub.i64	q1, q1, q8
+	vshr.s64	q3, q3, #25
+	vadd.i64	q0, q0, q7
+	vadd.i64	q5, q5, q3
+	vshl.i64	q3, q3, #25
+	vadd.i64	q6, q5, q11
+	vadd.i64	q0, q0, q13
+	vshl.i64	q7, q13, #25
+	vadd.i64	q8, q0, q11
+	vsub.i64	q3, q12, q3
+	vshr.s64	q6, q6, #26
+	vsub.i64	q7, q10, q7
+	vtrn.32		d2, d6
+	vshr.s64	q8, q8, #26
+	vtrn.32		d3, d7
+	vadd.i64	q3, q9, q6
+	vst1.8		d2, [r2, : 64]
+	vshl.i64	q6, q6, #26
+	vst1.8		d3, [r4, : 64]
+	vadd.i64	q1, q4, q8
+	vtrn.32		d4, d14
+	vshl.i64	q4, q8, #26
+	vtrn.32		d5, d15
+	vsub.i64	q5, q5, q6
+	add		r2, r2, #16
+	vsub.i64	q0, q0, q4
+	vst1.8		d4, [r2, : 64]
+	add		r4, r4, #16
+	vst1.8		d5, [r4, : 64]
+	vtrn.32		d10, d6
+	vtrn.32		d11, d7
+	sub		r2, r2, #8
+	sub		r4, r4, #8
+	vtrn.32		d0, d2
+	vtrn.32		d1, d3
+	vst1.8		d10, [r2, : 64]
+	vst1.8		d11, [r4, : 64]
+	sub		r2, r2, #24
+	sub		r4, r4, #24
+	vst1.8		d0, [r2, : 64]
+	vst1.8		d1, [r4, : 64]
+	ldr		r2, [sp, #456]
+	ldr		r4, [sp, #460]
+	subs		r5, r2, #1
+	bge		.Lmainloop
+	add		r1, r3, #144
+	add		r2, r3, #336
+	vld1.8		{d0-d1}, [r1, : 128]!
+	vld1.8		{d2-d3}, [r1, : 128]!
+	vld1.8		{d4}, [r1, : 64]
+	vst1.8		{d0-d1}, [r2, : 128]!
+	vst1.8		{d2-d3}, [r2, : 128]!
+	vst1.8		d4, [r2, : 64]
+	movw		r1, #0
+.Linvertloop:
+	add		r2, r3, #144
+	movw		r4, #0
+	movw		r5, #2
+	cmp		r1, #1
+	moveq		r5, #1
+	addeq		r2, r3, #336
+	addeq		r4, r3, #48
+	cmp		r1, #2
+	moveq		r5, #1
+	addeq		r2, r3, #48
+	cmp		r1, #3
+	moveq		r5, #5
+	addeq		r4, r3, #336
+	cmp		r1, #4
+	moveq		r5, #10
+	cmp		r1, #5
+	moveq		r5, #20
+	cmp		r1, #6
+	moveq		r5, #10
+	addeq		r2, r3, #336
+	addeq		r4, r3, #336
+	cmp		r1, #7
+	moveq		r5, #50
+	cmp		r1, #8
+	moveq		r5, #100
+	cmp		r1, #9
+	moveq		r5, #50
+	addeq		r2, r3, #336
+	cmp		r1, #10
+	moveq		r5, #5
+	addeq		r2, r3, #48
+	cmp		r1, #11
+	moveq		r5, #0
+	addeq		r2, r3, #96
+	add		r6, r3, #144
+	add		r7, r3, #288
+	vld1.8		{d0-d1}, [r6, : 128]!
+	vld1.8		{d2-d3}, [r6, : 128]!
+	vld1.8		{d4}, [r6, : 64]
+	vst1.8		{d0-d1}, [r7, : 128]!
+	vst1.8		{d2-d3}, [r7, : 128]!
+	vst1.8		d4, [r7, : 64]
+	cmp		r5, #0
+	beq		.Lskipsquaringloop
+.Lsquaringloop:
+	add		r6, r3, #288
+	add		r7, r3, #288
+	add		r8, r3, #288
+	vmov.i32	q0, #19
+	vmov.i32	q1, #0
+	vmov.i32	q2, #1
+	vzip.i32	q1, q2
+	vld1.8		{d4-d5}, [r7, : 128]!
+	vld1.8		{d6-d7}, [r7, : 128]!
+	vld1.8		{d9}, [r7, : 64]
+	vld1.8		{d10-d11}, [r6, : 128]!
+	add		r7, sp, #384
+	vld1.8		{d12-d13}, [r6, : 128]!
+	vmul.i32	q7, q2, q0
+	vld1.8		{d8}, [r6, : 64]
+	vext.32		d17, d11, d10, #1
+	vmul.i32	q9, q3, q0
+	vext.32		d16, d10, d8, #1
+	vshl.u32	q10, q5, q1
+	vext.32		d22, d14, d4, #1
+	vext.32		d24, d18, d6, #1
+	vshl.u32	q13, q6, q1
+	vshl.u32	d28, d8, d2
+	vrev64.i32	d22, d22
+	vmul.i32	d1, d9, d1
+	vrev64.i32	d24, d24
+	vext.32		d29, d8, d13, #1
+	vext.32		d0, d1, d9, #1
+	vrev64.i32	d0, d0
+	vext.32		d2, d9, d1, #1
+	vext.32		d23, d15, d5, #1
+	vmull.s32	q4, d20, d4
+	vrev64.i32	d23, d23
+	vmlal.s32	q4, d21, d1
+	vrev64.i32	d2, d2
+	vmlal.s32	q4, d26, d19
+	vext.32		d3, d5, d15, #1
+	vmlal.s32	q4, d27, d18
+	vrev64.i32	d3, d3
+	vmlal.s32	q4, d28, d15
+	vext.32		d14, d12, d11, #1
+	vmull.s32	q5, d16, d23
+	vext.32		d15, d13, d12, #1
+	vmlal.s32	q5, d17, d4
+	vst1.8		d8, [r7, : 64]!
+	vmlal.s32	q5, d14, d1
+	vext.32		d12, d9, d8, #0
+	vmlal.s32	q5, d15, d19
+	vmov.i64	d13, #0
+	vmlal.s32	q5, d29, d18
+	vext.32		d25, d19, d7, #1
+	vmlal.s32	q6, d20, d5
+	vrev64.i32	d25, d25
+	vmlal.s32	q6, d21, d4
+	vst1.8		d11, [r7, : 64]!
+	vmlal.s32	q6, d26, d1
+	vext.32		d9, d10, d10, #0
+	vmlal.s32	q6, d27, d19
+	vmov.i64	d8, #0
+	vmlal.s32	q6, d28, d18
+	vmlal.s32	q4, d16, d24
+	vmlal.s32	q4, d17, d5
+	vmlal.s32	q4, d14, d4
+	vst1.8		d12, [r7, : 64]!
+	vmlal.s32	q4, d15, d1
+	vext.32		d10, d13, d12, #0
+	vmlal.s32	q4, d29, d19
+	vmov.i64	d11, #0
+	vmlal.s32	q5, d20, d6
+	vmlal.s32	q5, d21, d5
+	vmlal.s32	q5, d26, d4
+	vext.32		d13, d8, d8, #0
+	vmlal.s32	q5, d27, d1
+	vmov.i64	d12, #0
+	vmlal.s32	q5, d28, d19
+	vst1.8		d9, [r7, : 64]!
+	vmlal.s32	q6, d16, d25
+	vmlal.s32	q6, d17, d6
+	vst1.8		d10, [r7, : 64]
+	vmlal.s32	q6, d14, d5
+	vext.32		d8, d11, d10, #0
+	vmlal.s32	q6, d15, d4
+	vmov.i64	d9, #0
+	vmlal.s32	q6, d29, d1
+	vmlal.s32	q4, d20, d7
+	vmlal.s32	q4, d21, d6
+	vmlal.s32	q4, d26, d5
+	vext.32		d11, d12, d12, #0
+	vmlal.s32	q4, d27, d4
+	vmov.i64	d10, #0
+	vmlal.s32	q4, d28, d1
+	vmlal.s32	q5, d16, d0
+	sub		r6, r7, #32
+	vmlal.s32	q5, d17, d7
+	vmlal.s32	q5, d14, d6
+	vext.32		d30, d9, d8, #0
+	vmlal.s32	q5, d15, d5
+	vld1.8		{d31}, [r6, : 64]!
+	vmlal.s32	q5, d29, d4
+	vmlal.s32	q15, d20, d0
+	vext.32		d0, d6, d18, #1
+	vmlal.s32	q15, d21, d25
+	vrev64.i32	d0, d0
+	vmlal.s32	q15, d26, d24
+	vext.32		d1, d7, d19, #1
+	vext.32		d7, d10, d10, #0
+	vmlal.s32	q15, d27, d23
+	vrev64.i32	d1, d1
+	vld1.8		{d6}, [r6, : 64]
+	vmlal.s32	q15, d28, d22
+	vmlal.s32	q3, d16, d4
+	add		r6, r6, #24
+	vmlal.s32	q3, d17, d2
+	vext.32		d4, d31, d30, #0
+	vmov		d17, d11
+	vmlal.s32	q3, d14, d1
+	vext.32		d11, d13, d13, #0
+	vext.32		d13, d30, d30, #0
+	vmlal.s32	q3, d15, d0
+	vext.32		d1, d8, d8, #0
+	vmlal.s32	q3, d29, d3
+	vld1.8		{d5}, [r6, : 64]
+	sub		r6, r6, #16
+	vext.32		d10, d6, d6, #0
+	vmov.i32	q1, #0xffffffff
+	vshl.i64	q4, q1, #25
+	add		r7, sp, #480
+	vld1.8		{d14-d15}, [r7, : 128]
+	vadd.i64	q9, q2, q7
+	vshl.i64	q1, q1, #26
+	vshr.s64	q10, q9, #26
+	vld1.8		{d0}, [r6, : 64]!
+	vadd.i64	q5, q5, q10
+	vand		q9, q9, q1
+	vld1.8		{d16}, [r6, : 64]!
+	add		r6, sp, #496
+	vld1.8		{d20-d21}, [r6, : 128]
+	vadd.i64	q11, q5, q10
+	vsub.i64	q2, q2, q9
+	vshr.s64	q9, q11, #25
+	vext.32		d12, d5, d4, #0
+	vand		q11, q11, q4
+	vadd.i64	q0, q0, q9
+	vmov		d19, d7
+	vadd.i64	q3, q0, q7
+	vsub.i64	q5, q5, q11
+	vshr.s64	q11, q3, #26
+	vext.32		d18, d11, d10, #0
+	vand		q3, q3, q1
+	vadd.i64	q8, q8, q11
+	vadd.i64	q11, q8, q10
+	vsub.i64	q0, q0, q3
+	vshr.s64	q3, q11, #25
+	vand		q11, q11, q4
+	vadd.i64	q3, q6, q3
+	vadd.i64	q6, q3, q7
+	vsub.i64	q8, q8, q11
+	vshr.s64	q11, q6, #26
+	vand		q6, q6, q1
+	vadd.i64	q9, q9, q11
+	vadd.i64	d25, d19, d21
+	vsub.i64	q3, q3, q6
+	vshr.s64	d23, d25, #25
+	vand		q4, q12, q4
+	vadd.i64	d21, d23, d23
+	vshl.i64	d25, d23, #4
+	vadd.i64	d21, d21, d23
+	vadd.i64	d25, d25, d21
+	vadd.i64	d4, d4, d25
+	vzip.i32	q0, q8
+	vadd.i64	d12, d4, d14
+	add		r6, r8, #8
+	vst1.8		d0, [r6, : 64]
+	vsub.i64	d19, d19, d9
+	add		r6, r6, #16
+	vst1.8		d16, [r6, : 64]
+	vshr.s64	d22, d12, #26
+	vand		q0, q6, q1
+	vadd.i64	d10, d10, d22
+	vzip.i32	q3, q9
+	vsub.i64	d4, d4, d0
+	sub		r6, r6, #8
+	vst1.8		d6, [r6, : 64]
+	add		r6, r6, #16
+	vst1.8		d18, [r6, : 64]
+	vzip.i32	q2, q5
+	sub		r6, r6, #32
+	vst1.8		d4, [r6, : 64]
+	subs		r5, r5, #1
+	bhi		.Lsquaringloop
+.Lskipsquaringloop:
+	mov		r2, r2
+	add		r5, r3, #288
+	add		r6, r3, #144
+	vmov.i32	q0, #19
+	vmov.i32	q1, #0
+	vmov.i32	q2, #1
+	vzip.i32	q1, q2
+	vld1.8		{d4-d5}, [r5, : 128]!
+	vld1.8		{d6-d7}, [r5, : 128]!
+	vld1.8		{d9}, [r5, : 64]
+	vld1.8		{d10-d11}, [r2, : 128]!
+	add		r5, sp, #384
+	vld1.8		{d12-d13}, [r2, : 128]!
+	vmul.i32	q7, q2, q0
+	vld1.8		{d8}, [r2, : 64]
+	vext.32		d17, d11, d10, #1
+	vmul.i32	q9, q3, q0
+	vext.32		d16, d10, d8, #1
+	vshl.u32	q10, q5, q1
+	vext.32		d22, d14, d4, #1
+	vext.32		d24, d18, d6, #1
+	vshl.u32	q13, q6, q1
+	vshl.u32	d28, d8, d2
+	vrev64.i32	d22, d22
+	vmul.i32	d1, d9, d1
+	vrev64.i32	d24, d24
+	vext.32		d29, d8, d13, #1
+	vext.32		d0, d1, d9, #1
+	vrev64.i32	d0, d0
+	vext.32		d2, d9, d1, #1
+	vext.32		d23, d15, d5, #1
+	vmull.s32	q4, d20, d4
+	vrev64.i32	d23, d23
+	vmlal.s32	q4, d21, d1
+	vrev64.i32	d2, d2
+	vmlal.s32	q4, d26, d19
+	vext.32		d3, d5, d15, #1
+	vmlal.s32	q4, d27, d18
+	vrev64.i32	d3, d3
+	vmlal.s32	q4, d28, d15
+	vext.32		d14, d12, d11, #1
+	vmull.s32	q5, d16, d23
+	vext.32		d15, d13, d12, #1
+	vmlal.s32	q5, d17, d4
+	vst1.8		d8, [r5, : 64]!
+	vmlal.s32	q5, d14, d1
+	vext.32		d12, d9, d8, #0
+	vmlal.s32	q5, d15, d19
+	vmov.i64	d13, #0
+	vmlal.s32	q5, d29, d18
+	vext.32		d25, d19, d7, #1
+	vmlal.s32	q6, d20, d5
+	vrev64.i32	d25, d25
+	vmlal.s32	q6, d21, d4
+	vst1.8		d11, [r5, : 64]!
+	vmlal.s32	q6, d26, d1
+	vext.32		d9, d10, d10, #0
+	vmlal.s32	q6, d27, d19
+	vmov.i64	d8, #0
+	vmlal.s32	q6, d28, d18
+	vmlal.s32	q4, d16, d24
+	vmlal.s32	q4, d17, d5
+	vmlal.s32	q4, d14, d4
+	vst1.8		d12, [r5, : 64]!
+	vmlal.s32	q4, d15, d1
+	vext.32		d10, d13, d12, #0
+	vmlal.s32	q4, d29, d19
+	vmov.i64	d11, #0
+	vmlal.s32	q5, d20, d6
+	vmlal.s32	q5, d21, d5
+	vmlal.s32	q5, d26, d4
+	vext.32		d13, d8, d8, #0
+	vmlal.s32	q5, d27, d1
+	vmov.i64	d12, #0
+	vmlal.s32	q5, d28, d19
+	vst1.8		d9, [r5, : 64]!
+	vmlal.s32	q6, d16, d25
+	vmlal.s32	q6, d17, d6
+	vst1.8		d10, [r5, : 64]
+	vmlal.s32	q6, d14, d5
+	vext.32		d8, d11, d10, #0
+	vmlal.s32	q6, d15, d4
+	vmov.i64	d9, #0
+	vmlal.s32	q6, d29, d1
+	vmlal.s32	q4, d20, d7
+	vmlal.s32	q4, d21, d6
+	vmlal.s32	q4, d26, d5
+	vext.32		d11, d12, d12, #0
+	vmlal.s32	q4, d27, d4
+	vmov.i64	d10, #0
+	vmlal.s32	q4, d28, d1
+	vmlal.s32	q5, d16, d0
+	sub		r2, r5, #32
+	vmlal.s32	q5, d17, d7
+	vmlal.s32	q5, d14, d6
+	vext.32		d30, d9, d8, #0
+	vmlal.s32	q5, d15, d5
+	vld1.8		{d31}, [r2, : 64]!
+	vmlal.s32	q5, d29, d4
+	vmlal.s32	q15, d20, d0
+	vext.32		d0, d6, d18, #1
+	vmlal.s32	q15, d21, d25
+	vrev64.i32	d0, d0
+	vmlal.s32	q15, d26, d24
+	vext.32		d1, d7, d19, #1
+	vext.32		d7, d10, d10, #0
+	vmlal.s32	q15, d27, d23
+	vrev64.i32	d1, d1
+	vld1.8		{d6}, [r2, : 64]
+	vmlal.s32	q15, d28, d22
+	vmlal.s32	q3, d16, d4
+	add		r2, r2, #24
+	vmlal.s32	q3, d17, d2
+	vext.32		d4, d31, d30, #0
+	vmov		d17, d11
+	vmlal.s32	q3, d14, d1
+	vext.32		d11, d13, d13, #0
+	vext.32		d13, d30, d30, #0
+	vmlal.s32	q3, d15, d0
+	vext.32		d1, d8, d8, #0
+	vmlal.s32	q3, d29, d3
+	vld1.8		{d5}, [r2, : 64]
+	sub		r2, r2, #16
+	vext.32		d10, d6, d6, #0
+	vmov.i32	q1, #0xffffffff
+	vshl.i64	q4, q1, #25
+	add		r5, sp, #480
+	vld1.8		{d14-d15}, [r5, : 128]
+	vadd.i64	q9, q2, q7
+	vshl.i64	q1, q1, #26
+	vshr.s64	q10, q9, #26
+	vld1.8		{d0}, [r2, : 64]!
+	vadd.i64	q5, q5, q10
+	vand		q9, q9, q1
+	vld1.8		{d16}, [r2, : 64]!
+	add		r2, sp, #496
+	vld1.8		{d20-d21}, [r2, : 128]
+	vadd.i64	q11, q5, q10
+	vsub.i64	q2, q2, q9
+	vshr.s64	q9, q11, #25
+	vext.32		d12, d5, d4, #0
+	vand		q11, q11, q4
+	vadd.i64	q0, q0, q9
+	vmov		d19, d7
+	vadd.i64	q3, q0, q7
+	vsub.i64	q5, q5, q11
+	vshr.s64	q11, q3, #26
+	vext.32		d18, d11, d10, #0
+	vand		q3, q3, q1
+	vadd.i64	q8, q8, q11
+	vadd.i64	q11, q8, q10
+	vsub.i64	q0, q0, q3
+	vshr.s64	q3, q11, #25
+	vand		q11, q11, q4
+	vadd.i64	q3, q6, q3
+	vadd.i64	q6, q3, q7
+	vsub.i64	q8, q8, q11
+	vshr.s64	q11, q6, #26
+	vand		q6, q6, q1
+	vadd.i64	q9, q9, q11
+	vadd.i64	d25, d19, d21
+	vsub.i64	q3, q3, q6
+	vshr.s64	d23, d25, #25
+	vand		q4, q12, q4
+	vadd.i64	d21, d23, d23
+	vshl.i64	d25, d23, #4
+	vadd.i64	d21, d21, d23
+	vadd.i64	d25, d25, d21
+	vadd.i64	d4, d4, d25
+	vzip.i32	q0, q8
+	vadd.i64	d12, d4, d14
+	add		r2, r6, #8
+	vst1.8		d0, [r2, : 64]
+	vsub.i64	d19, d19, d9
+	add		r2, r2, #16
+	vst1.8		d16, [r2, : 64]
+	vshr.s64	d22, d12, #26
+	vand		q0, q6, q1
+	vadd.i64	d10, d10, d22
+	vzip.i32	q3, q9
+	vsub.i64	d4, d4, d0
+	sub		r2, r2, #8
+	vst1.8		d6, [r2, : 64]
+	add		r2, r2, #16
+	vst1.8		d18, [r2, : 64]
+	vzip.i32	q2, q5
+	sub		r2, r2, #32
+	vst1.8		d4, [r2, : 64]
+	cmp		r4, #0
+	beq		.Lskippostcopy
+	add		r2, r3, #144
+	mov		r4, r4
+	vld1.8		{d0-d1}, [r2, : 128]!
+	vld1.8		{d2-d3}, [r2, : 128]!
+	vld1.8		{d4}, [r2, : 64]
+	vst1.8		{d0-d1}, [r4, : 128]!
+	vst1.8		{d2-d3}, [r4, : 128]!
+	vst1.8		d4, [r4, : 64]
+.Lskippostcopy:
+	cmp		r1, #1
+	bne		.Lskipfinalcopy
+	add		r2, r3, #288
+	add		r4, r3, #144
+	vld1.8		{d0-d1}, [r2, : 128]!
+	vld1.8		{d2-d3}, [r2, : 128]!
+	vld1.8		{d4}, [r2, : 64]
+	vst1.8		{d0-d1}, [r4, : 128]!
+	vst1.8		{d2-d3}, [r4, : 128]!
+	vst1.8		d4, [r4, : 64]
+.Lskipfinalcopy:
+	add		r1, r1, #1
+	cmp		r1, #12
+	blo		.Linvertloop
+	add		r1, r3, #144
+	ldr		r2, [r1], #4
+	ldr		r3, [r1], #4
+	ldr		r4, [r1], #4
+	ldr		r5, [r1], #4
+	ldr		r6, [r1], #4
+	ldr		r7, [r1], #4
+	ldr		r8, [r1], #4
+	ldr		r9, [r1], #4
+	ldr		r10, [r1], #4
+	ldr		r1, [r1]
+	add		r11, r1, r1, LSL #4
+	add		r11, r11, r1, LSL #1
+	add		r11, r11, #16777216
+	mov		r11, r11, ASR #25
+	add		r11, r11, r2
+	mov		r11, r11, ASR #26
+	add		r11, r11, r3
+	mov		r11, r11, ASR #25
+	add		r11, r11, r4
+	mov		r11, r11, ASR #26
+	add		r11, r11, r5
+	mov		r11, r11, ASR #25
+	add		r11, r11, r6
+	mov		r11, r11, ASR #26
+	add		r11, r11, r7
+	mov		r11, r11, ASR #25
+	add		r11, r11, r8
+	mov		r11, r11, ASR #26
+	add		r11, r11, r9
+	mov		r11, r11, ASR #25
+	add		r11, r11, r10
+	mov		r11, r11, ASR #26
+	add		r11, r11, r1
+	mov		r11, r11, ASR #25
+	add		r2, r2, r11
+	add		r2, r2, r11, LSL #1
+	add		r2, r2, r11, LSL #4
+	mov		r11, r2, ASR #26
+	add		r3, r3, r11
+	sub		r2, r2, r11, LSL #26
+	mov		r11, r3, ASR #25
+	add		r4, r4, r11
+	sub		r3, r3, r11, LSL #25
+	mov		r11, r4, ASR #26
+	add		r5, r5, r11
+	sub		r4, r4, r11, LSL #26
+	mov		r11, r5, ASR #25
+	add		r6, r6, r11
+	sub		r5, r5, r11, LSL #25
+	mov		r11, r6, ASR #26
+	add		r7, r7, r11
+	sub		r6, r6, r11, LSL #26
+	mov		r11, r7, ASR #25
+	add		r8, r8, r11
+	sub		r7, r7, r11, LSL #25
+	mov		r11, r8, ASR #26
+	add		r9, r9, r11
+	sub		r8, r8, r11, LSL #26
+	mov		r11, r9, ASR #25
+	add		r10, r10, r11
+	sub		r9, r9, r11, LSL #25
+	mov		r11, r10, ASR #26
+	add		r1, r1, r11
+	sub		r10, r10, r11, LSL #26
+	mov		r11, r1, ASR #25
+	sub		r1, r1, r11, LSL #25
+	add		r2, r2, r3, LSL #26
+	mov		r3, r3, LSR #6
+	add		r3, r3, r4, LSL #19
+	mov		r4, r4, LSR #13
+	add		r4, r4, r5, LSL #13
+	mov		r5, r5, LSR #19
+	add		r5, r5, r6, LSL #6
+	add		r6, r7, r8, LSL #25
+	mov		r7, r8, LSR #7
+	add		r7, r7, r9, LSL #19
+	mov		r8, r9, LSR #13
+	add		r8, r8, r10, LSL #12
+	mov		r9, r10, LSR #20
+	add		r1, r9, r1, LSL #6
+	str		r2, [r0]
+	str		r3, [r0, #4]
+	str		r4, [r0, #8]
+	str		r5, [r0, #12]
+	str		r6, [r0, #16]
+	str		r7, [r0, #20]
+	str		r8, [r0, #24]
+	str		r1, [r0, #28]
+	movw		r0, #0
+	mov		sp, ip
+	pop		{r4-r11, pc}
+ENDPROC(curve25519_neon)
diff --git a/arch/arm/crypto/curve25519-glue.c b/arch/arm/crypto/curve25519-glue.c
new file mode 100644
index 0000000..31eb75b
--- /dev/null
+++ b/arch/arm/crypto/curve25519-glue.c
@@ -0,0 +1,136 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * Based on public domain code from Daniel J. Bernstein and Peter Schwabe. This
+ * began from SUPERCOP's curve25519/neon2/scalarmult.s, but has subsequently been
+ * manually reworked for use in kernel space.
+ */
+
+#include <asm/hwcap.h>
+#include <asm/neon.h>
+#include <asm/simd.h>
+#include <crypto/internal/kpp.h>
+#include <crypto/internal/simd.h>
+#include <linux/types.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/jump_label.h>
+#include <linux/scatterlist.h>
+#include <crypto/curve25519.h>
+
+asmlinkage void curve25519_neon(u8 mypublic[CURVE25519_KEY_SIZE],
+				const u8 secret[CURVE25519_KEY_SIZE],
+				const u8 basepoint[CURVE25519_KEY_SIZE]);
+
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(have_neon);
+
+void curve25519_arch(u8 out[CURVE25519_KEY_SIZE],
+		     const u8 scalar[CURVE25519_KEY_SIZE],
+		     const u8 point[CURVE25519_KEY_SIZE])
+{
+	if (static_branch_likely(&have_neon) && crypto_simd_usable()) {
+		kernel_neon_begin();
+		curve25519_neon(out, scalar, point);
+		kernel_neon_end();
+	} else {
+		curve25519_generic(out, scalar, point);
+	}
+}
+EXPORT_SYMBOL(curve25519_arch);
+
+void curve25519_base_arch(u8 pub[CURVE25519_KEY_SIZE],
+			  const u8 secret[CURVE25519_KEY_SIZE])
+{
+	return curve25519_arch(pub, secret, curve25519_base_point);
+}
+EXPORT_SYMBOL(curve25519_base_arch);
+
+static int curve25519_set_secret(struct crypto_kpp *tfm, const void *buf,
+				 unsigned int len)
+{
+	u8 *secret = kpp_tfm_ctx(tfm);
+
+	if (!len)
+		curve25519_generate_secret(secret);
+	else if (len == CURVE25519_KEY_SIZE &&
+		 crypto_memneq(buf, curve25519_null_point, CURVE25519_KEY_SIZE))
+		memcpy(secret, buf, CURVE25519_KEY_SIZE);
+	else
+		return -EINVAL;
+	return 0;
+}
+
+static int curve25519_compute_value(struct kpp_request *req)
+{
+	struct crypto_kpp *tfm = crypto_kpp_reqtfm(req);
+	const u8 *secret = kpp_tfm_ctx(tfm);
+	u8 public_key[CURVE25519_KEY_SIZE];
+	u8 buf[CURVE25519_KEY_SIZE];
+	int copied, nbytes;
+	u8 const *bp;
+
+	if (req->src) {
+		copied = sg_copy_to_buffer(req->src,
+					   sg_nents_for_len(req->src,
+							    CURVE25519_KEY_SIZE),
+					   public_key, CURVE25519_KEY_SIZE);
+		if (copied != CURVE25519_KEY_SIZE)
+			return -EINVAL;
+		bp = public_key;
+	} else {
+		bp = curve25519_base_point;
+	}
+
+	curve25519_arch(buf, secret, bp);
+
+	/* might want less than we've got */
+	nbytes = min_t(size_t, CURVE25519_KEY_SIZE, req->dst_len);
+	copied = sg_copy_from_buffer(req->dst, sg_nents_for_len(req->dst,
+								nbytes),
+				     buf, nbytes);
+	if (copied != nbytes)
+		return -EINVAL;
+	return 0;
+}
+
+static unsigned int curve25519_max_size(struct crypto_kpp *tfm)
+{
+	return CURVE25519_KEY_SIZE;
+}
+
+static struct kpp_alg curve25519_alg = {
+	.base.cra_name		= "curve25519",
+	.base.cra_driver_name	= "curve25519-neon",
+	.base.cra_priority	= 200,
+	.base.cra_module	= THIS_MODULE,
+	.base.cra_ctxsize	= CURVE25519_KEY_SIZE,
+
+	.set_secret		= curve25519_set_secret,
+	.generate_public_key	= curve25519_compute_value,
+	.compute_shared_secret	= curve25519_compute_value,
+	.max_size		= curve25519_max_size,
+};
+
+static int __init mod_init(void)
+{
+	if (elf_hwcap & HWCAP_NEON) {
+		static_branch_enable(&have_neon);
+		return IS_REACHABLE(CONFIG_CRYPTO_KPP) ?
+			crypto_register_kpp(&curve25519_alg) : 0;
+	}
+	return 0;
+}
+
+static void __exit mod_exit(void)
+{
+	if (IS_REACHABLE(CONFIG_CRYPTO_KPP) && elf_hwcap & HWCAP_NEON)
+		crypto_unregister_kpp(&curve25519_alg);
+}
+
+module_init(mod_init);
+module_exit(mod_exit);
+
+MODULE_ALIAS_CRYPTO("curve25519");
+MODULE_ALIAS_CRYPTO("curve25519-neon");
+MODULE_LICENSE("GPL v2");
diff --git a/arch/arm/crypto/poly1305-armv4.pl b/arch/arm/crypto/poly1305-armv4.pl
new file mode 100644
index 0000000..6d79498
--- /dev/null
+++ b/arch/arm/crypto/poly1305-armv4.pl
@@ -0,0 +1,1236 @@
+#!/usr/bin/env perl
+# SPDX-License-Identifier: GPL-1.0+ OR BSD-3-Clause
+#
+# ====================================================================
+# Written by Andy Polyakov, @dot-asm, initially for the OpenSSL
+# project.
+# ====================================================================
+#
+#			IALU(*)/gcc-4.4		NEON
+#
+# ARM11xx(ARMv6)	7.78/+100%		-
+# Cortex-A5		6.35/+130%		3.00
+# Cortex-A8		6.25/+115%		2.36
+# Cortex-A9		5.10/+95%		2.55
+# Cortex-A15		3.85/+85%		1.25(**)
+# Snapdragon S4		5.70/+100%		1.48(**)
+#
+# (*)	this is for -march=armv6, i.e. with bunch of ldrb loading data;
+# (**)	these are trade-off results, they can be improved by ~8% but at
+#	the cost of 15/12% regression on Cortex-A5/A7, it's even possible
+#	to improve Cortex-A9 result, but then A5/A7 loose more than 20%;
+
+$flavour = shift;
+if ($flavour=~/\w[\w\-]*\.\w+$/) { $output=$flavour; undef $flavour; }
+else { while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} }
+
+if ($flavour && $flavour ne "void") {
+    $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+    ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or
+    ( $xlate="${dir}../../perlasm/arm-xlate.pl" and -f $xlate) or
+    die "can't locate arm-xlate.pl";
+
+    open STDOUT,"| \"$^X\" $xlate $flavour $output";
+} else {
+    open STDOUT,">$output";
+}
+
+($ctx,$inp,$len,$padbit)=map("r$_",(0..3));
+
+$code.=<<___;
+#ifndef	__KERNEL__
+# include "arm_arch.h"
+#else
+# define __ARM_ARCH__ __LINUX_ARM_ARCH__
+# define __ARM_MAX_ARCH__ __LINUX_ARM_ARCH__
+# define poly1305_init   poly1305_init_arm
+# define poly1305_blocks poly1305_blocks_arm
+# define poly1305_emit   poly1305_emit_arm
+.globl	poly1305_blocks_neon
+#endif
+
+#if defined(__thumb2__)
+.syntax	unified
+.thumb
+#else
+.code	32
+#endif
+
+.text
+
+.globl	poly1305_emit
+.globl	poly1305_blocks
+.globl	poly1305_init
+.type	poly1305_init,%function
+.align	5
+poly1305_init:
+.Lpoly1305_init:
+	stmdb	sp!,{r4-r11}
+
+	eor	r3,r3,r3
+	cmp	$inp,#0
+	str	r3,[$ctx,#0]		@ zero hash value
+	str	r3,[$ctx,#4]
+	str	r3,[$ctx,#8]
+	str	r3,[$ctx,#12]
+	str	r3,[$ctx,#16]
+	str	r3,[$ctx,#36]		@ clear is_base2_26
+	add	$ctx,$ctx,#20
+
+#ifdef	__thumb2__
+	it	eq
+#endif
+	moveq	r0,#0
+	beq	.Lno_key
+
+#if	__ARM_MAX_ARCH__>=7
+	mov	r3,#-1
+	str	r3,[$ctx,#28]		@ impossible key power value
+# ifndef __KERNEL__
+	adr	r11,.Lpoly1305_init
+	ldr	r12,.LOPENSSL_armcap
+# endif
+#endif
+	ldrb	r4,[$inp,#0]
+	mov	r10,#0x0fffffff
+	ldrb	r5,[$inp,#1]
+	and	r3,r10,#-4		@ 0x0ffffffc
+	ldrb	r6,[$inp,#2]
+	ldrb	r7,[$inp,#3]
+	orr	r4,r4,r5,lsl#8
+	ldrb	r5,[$inp,#4]
+	orr	r4,r4,r6,lsl#16
+	ldrb	r6,[$inp,#5]
+	orr	r4,r4,r7,lsl#24
+	ldrb	r7,[$inp,#6]
+	and	r4,r4,r10
+
+#if	__ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
+# if !defined(_WIN32)
+	ldr	r12,[r11,r12]		@ OPENSSL_armcap_P
+# endif
+# if defined(__APPLE__) || defined(_WIN32)
+	ldr	r12,[r12]
+# endif
+#endif
+	ldrb	r8,[$inp,#7]
+	orr	r5,r5,r6,lsl#8
+	ldrb	r6,[$inp,#8]
+	orr	r5,r5,r7,lsl#16
+	ldrb	r7,[$inp,#9]
+	orr	r5,r5,r8,lsl#24
+	ldrb	r8,[$inp,#10]
+	and	r5,r5,r3
+
+#if	__ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
+	tst	r12,#ARMV7_NEON		@ check for NEON
+# ifdef	__thumb2__
+	adr	r9,.Lpoly1305_blocks_neon
+	adr	r11,.Lpoly1305_blocks
+	it	ne
+	movne	r11,r9
+	adr	r12,.Lpoly1305_emit
+	orr	r11,r11,#1		@ thumb-ify addresses
+	orr	r12,r12,#1
+# else
+	add	r12,r11,#(.Lpoly1305_emit-.Lpoly1305_init)
+	ite	eq
+	addeq	r11,r11,#(.Lpoly1305_blocks-.Lpoly1305_init)
+	addne	r11,r11,#(.Lpoly1305_blocks_neon-.Lpoly1305_init)
+# endif
+#endif
+	ldrb	r9,[$inp,#11]
+	orr	r6,r6,r7,lsl#8
+	ldrb	r7,[$inp,#12]
+	orr	r6,r6,r8,lsl#16
+	ldrb	r8,[$inp,#13]
+	orr	r6,r6,r9,lsl#24
+	ldrb	r9,[$inp,#14]
+	and	r6,r6,r3
+
+	ldrb	r10,[$inp,#15]
+	orr	r7,r7,r8,lsl#8
+	str	r4,[$ctx,#0]
+	orr	r7,r7,r9,lsl#16
+	str	r5,[$ctx,#4]
+	orr	r7,r7,r10,lsl#24
+	str	r6,[$ctx,#8]
+	and	r7,r7,r3
+	str	r7,[$ctx,#12]
+#if	__ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
+	stmia	r2,{r11,r12}		@ fill functions table
+	mov	r0,#1
+#else
+	mov	r0,#0
+#endif
+.Lno_key:
+	ldmia	sp!,{r4-r11}
+#if	__ARM_ARCH__>=5
+	ret				@ bx	lr
+#else
+	tst	lr,#1
+	moveq	pc,lr			@ be binary compatible with V4, yet
+	bx	lr			@ interoperable with Thumb ISA:-)
+#endif
+.size	poly1305_init,.-poly1305_init
+___
+{
+my ($h0,$h1,$h2,$h3,$h4,$r0,$r1,$r2,$r3)=map("r$_",(4..12));
+my ($s1,$s2,$s3)=($r1,$r2,$r3);
+
+$code.=<<___;
+.type	poly1305_blocks,%function
+.align	5
+poly1305_blocks:
+.Lpoly1305_blocks:
+	stmdb	sp!,{r3-r11,lr}
+
+	ands	$len,$len,#-16
+	beq	.Lno_data
+
+	add	$len,$len,$inp		@ end pointer
+	sub	sp,sp,#32
+
+#if __ARM_ARCH__<7
+	ldmia	$ctx,{$h0-$r3}		@ load context
+	add	$ctx,$ctx,#20
+	str	$len,[sp,#16]		@ offload stuff
+	str	$ctx,[sp,#12]
+#else
+	ldr	lr,[$ctx,#36]		@ is_base2_26
+	ldmia	$ctx!,{$h0-$h4}		@ load hash value
+	str	$len,[sp,#16]		@ offload stuff
+	str	$ctx,[sp,#12]
+
+	adds	$r0,$h0,$h1,lsl#26	@ base 2^26 -> base 2^32
+	mov	$r1,$h1,lsr#6
+	adcs	$r1,$r1,$h2,lsl#20
+	mov	$r2,$h2,lsr#12
+	adcs	$r2,$r2,$h3,lsl#14
+	mov	$r3,$h3,lsr#18
+	adcs	$r3,$r3,$h4,lsl#8
+	mov	$len,#0
+	teq	lr,#0
+	str	$len,[$ctx,#16]		@ clear is_base2_26
+	adc	$len,$len,$h4,lsr#24
+
+	itttt	ne
+	movne	$h0,$r0			@ choose between radixes
+	movne	$h1,$r1
+	movne	$h2,$r2
+	movne	$h3,$r3
+	ldmia	$ctx,{$r0-$r3}		@ load key
+	it	ne
+	movne	$h4,$len
+#endif
+
+	mov	lr,$inp
+	cmp	$padbit,#0
+	str	$r1,[sp,#20]
+	str	$r2,[sp,#24]
+	str	$r3,[sp,#28]
+	b	.Loop
+
+.align	4
+.Loop:
+#if __ARM_ARCH__<7
+	ldrb	r0,[lr],#16		@ load input
+# ifdef	__thumb2__
+	it	hi
+# endif
+	addhi	$h4,$h4,#1		@ 1<<128
+	ldrb	r1,[lr,#-15]
+	ldrb	r2,[lr,#-14]
+	ldrb	r3,[lr,#-13]
+	orr	r1,r0,r1,lsl#8
+	ldrb	r0,[lr,#-12]
+	orr	r2,r1,r2,lsl#16
+	ldrb	r1,[lr,#-11]
+	orr	r3,r2,r3,lsl#24
+	ldrb	r2,[lr,#-10]
+	adds	$h0,$h0,r3		@ accumulate input
+
+	ldrb	r3,[lr,#-9]
+	orr	r1,r0,r1,lsl#8
+	ldrb	r0,[lr,#-8]
+	orr	r2,r1,r2,lsl#16
+	ldrb	r1,[lr,#-7]
+	orr	r3,r2,r3,lsl#24
+	ldrb	r2,[lr,#-6]
+	adcs	$h1,$h1,r3
+
+	ldrb	r3,[lr,#-5]
+	orr	r1,r0,r1,lsl#8
+	ldrb	r0,[lr,#-4]
+	orr	r2,r1,r2,lsl#16
+	ldrb	r1,[lr,#-3]
+	orr	r3,r2,r3,lsl#24
+	ldrb	r2,[lr,#-2]
+	adcs	$h2,$h2,r3
+
+	ldrb	r3,[lr,#-1]
+	orr	r1,r0,r1,lsl#8
+	str	lr,[sp,#8]		@ offload input pointer
+	orr	r2,r1,r2,lsl#16
+	add	$s1,$r1,$r1,lsr#2
+	orr	r3,r2,r3,lsl#24
+#else
+	ldr	r0,[lr],#16		@ load input
+	it	hi
+	addhi	$h4,$h4,#1		@ padbit
+	ldr	r1,[lr,#-12]
+	ldr	r2,[lr,#-8]
+	ldr	r3,[lr,#-4]
+# ifdef	__ARMEB__
+	rev	r0,r0
+	rev	r1,r1
+	rev	r2,r2
+	rev	r3,r3
+# endif
+	adds	$h0,$h0,r0		@ accumulate input
+	str	lr,[sp,#8]		@ offload input pointer
+	adcs	$h1,$h1,r1
+	add	$s1,$r1,$r1,lsr#2
+	adcs	$h2,$h2,r2
+#endif
+	add	$s2,$r2,$r2,lsr#2
+	adcs	$h3,$h3,r3
+	add	$s3,$r3,$r3,lsr#2
+
+	umull	r2,r3,$h1,$r0
+	 adc	$h4,$h4,#0
+	umull	r0,r1,$h0,$r0
+	umlal	r2,r3,$h4,$s1
+	umlal	r0,r1,$h3,$s1
+	ldr	$r1,[sp,#20]		@ reload $r1
+	umlal	r2,r3,$h2,$s3
+	umlal	r0,r1,$h1,$s3
+	umlal	r2,r3,$h3,$s2
+	umlal	r0,r1,$h2,$s2
+	umlal	r2,r3,$h0,$r1
+	str	r0,[sp,#0]		@ future $h0
+	 mul	r0,$s2,$h4
+	ldr	$r2,[sp,#24]		@ reload $r2
+	adds	r2,r2,r1		@ d1+=d0>>32
+	 eor	r1,r1,r1
+	adc	lr,r3,#0		@ future $h2
+	str	r2,[sp,#4]		@ future $h1
+
+	mul	r2,$s3,$h4
+	eor	r3,r3,r3
+	umlal	r0,r1,$h3,$s3
+	ldr	$r3,[sp,#28]		@ reload $r3
+	umlal	r2,r3,$h3,$r0
+	umlal	r0,r1,$h2,$r0
+	umlal	r2,r3,$h2,$r1
+	umlal	r0,r1,$h1,$r1
+	umlal	r2,r3,$h1,$r2
+	umlal	r0,r1,$h0,$r2
+	umlal	r2,r3,$h0,$r3
+	ldr	$h0,[sp,#0]
+	mul	$h4,$r0,$h4
+	ldr	$h1,[sp,#4]
+
+	adds	$h2,lr,r0		@ d2+=d1>>32
+	ldr	lr,[sp,#8]		@ reload input pointer
+	adc	r1,r1,#0
+	adds	$h3,r2,r1		@ d3+=d2>>32
+	ldr	r0,[sp,#16]		@ reload end pointer
+	adc	r3,r3,#0
+	add	$h4,$h4,r3		@ h4+=d3>>32
+
+	and	r1,$h4,#-4
+	and	$h4,$h4,#3
+	add	r1,r1,r1,lsr#2		@ *=5
+	adds	$h0,$h0,r1
+	adcs	$h1,$h1,#0
+	adcs	$h2,$h2,#0
+	adcs	$h3,$h3,#0
+	adc	$h4,$h4,#0
+
+	cmp	r0,lr			@ done yet?
+	bhi	.Loop
+
+	ldr	$ctx,[sp,#12]
+	add	sp,sp,#32
+	stmdb	$ctx,{$h0-$h4}		@ store the result
+
+.Lno_data:
+#if	__ARM_ARCH__>=5
+	ldmia	sp!,{r3-r11,pc}
+#else
+	ldmia	sp!,{r3-r11,lr}
+	tst	lr,#1
+	moveq	pc,lr			@ be binary compatible with V4, yet
+	bx	lr			@ interoperable with Thumb ISA:-)
+#endif
+.size	poly1305_blocks,.-poly1305_blocks
+___
+}
+{
+my ($ctx,$mac,$nonce)=map("r$_",(0..2));
+my ($h0,$h1,$h2,$h3,$h4,$g0,$g1,$g2,$g3)=map("r$_",(3..11));
+my $g4=$ctx;
+
+$code.=<<___;
+.type	poly1305_emit,%function
+.align	5
+poly1305_emit:
+.Lpoly1305_emit:
+	stmdb	sp!,{r4-r11}
+
+	ldmia	$ctx,{$h0-$h4}
+
+#if __ARM_ARCH__>=7
+	ldr	ip,[$ctx,#36]		@ is_base2_26
+
+	adds	$g0,$h0,$h1,lsl#26	@ base 2^26 -> base 2^32
+	mov	$g1,$h1,lsr#6
+	adcs	$g1,$g1,$h2,lsl#20
+	mov	$g2,$h2,lsr#12
+	adcs	$g2,$g2,$h3,lsl#14
+	mov	$g3,$h3,lsr#18
+	adcs	$g3,$g3,$h4,lsl#8
+	mov	$g4,#0
+	adc	$g4,$g4,$h4,lsr#24
+
+	tst	ip,ip
+	itttt	ne
+	movne	$h0,$g0
+	movne	$h1,$g1
+	movne	$h2,$g2
+	movne	$h3,$g3
+	it	ne
+	movne	$h4,$g4
+#endif
+
+	adds	$g0,$h0,#5		@ compare to modulus
+	adcs	$g1,$h1,#0
+	adcs	$g2,$h2,#0
+	adcs	$g3,$h3,#0
+	adc	$g4,$h4,#0
+	tst	$g4,#4			@ did it carry/borrow?
+
+#ifdef	__thumb2__
+	it	ne
+#endif
+	movne	$h0,$g0
+	ldr	$g0,[$nonce,#0]
+#ifdef	__thumb2__
+	it	ne
+#endif
+	movne	$h1,$g1
+	ldr	$g1,[$nonce,#4]
+#ifdef	__thumb2__
+	it	ne
+#endif
+	movne	$h2,$g2
+	ldr	$g2,[$nonce,#8]
+#ifdef	__thumb2__
+	it	ne
+#endif
+	movne	$h3,$g3
+	ldr	$g3,[$nonce,#12]
+
+	adds	$h0,$h0,$g0
+	adcs	$h1,$h1,$g1
+	adcs	$h2,$h2,$g2
+	adc	$h3,$h3,$g3
+
+#if __ARM_ARCH__>=7
+# ifdef __ARMEB__
+	rev	$h0,$h0
+	rev	$h1,$h1
+	rev	$h2,$h2
+	rev	$h3,$h3
+# endif
+	str	$h0,[$mac,#0]
+	str	$h1,[$mac,#4]
+	str	$h2,[$mac,#8]
+	str	$h3,[$mac,#12]
+#else
+	strb	$h0,[$mac,#0]
+	mov	$h0,$h0,lsr#8
+	strb	$h1,[$mac,#4]
+	mov	$h1,$h1,lsr#8
+	strb	$h2,[$mac,#8]
+	mov	$h2,$h2,lsr#8
+	strb	$h3,[$mac,#12]
+	mov	$h3,$h3,lsr#8
+
+	strb	$h0,[$mac,#1]
+	mov	$h0,$h0,lsr#8
+	strb	$h1,[$mac,#5]
+	mov	$h1,$h1,lsr#8
+	strb	$h2,[$mac,#9]
+	mov	$h2,$h2,lsr#8
+	strb	$h3,[$mac,#13]
+	mov	$h3,$h3,lsr#8
+
+	strb	$h0,[$mac,#2]
+	mov	$h0,$h0,lsr#8
+	strb	$h1,[$mac,#6]
+	mov	$h1,$h1,lsr#8
+	strb	$h2,[$mac,#10]
+	mov	$h2,$h2,lsr#8
+	strb	$h3,[$mac,#14]
+	mov	$h3,$h3,lsr#8
+
+	strb	$h0,[$mac,#3]
+	strb	$h1,[$mac,#7]
+	strb	$h2,[$mac,#11]
+	strb	$h3,[$mac,#15]
+#endif
+	ldmia	sp!,{r4-r11}
+#if	__ARM_ARCH__>=5
+	ret				@ bx	lr
+#else
+	tst	lr,#1
+	moveq	pc,lr			@ be binary compatible with V4, yet
+	bx	lr			@ interoperable with Thumb ISA:-)
+#endif
+.size	poly1305_emit,.-poly1305_emit
+___
+{
+my ($R0,$R1,$S1,$R2,$S2,$R3,$S3,$R4,$S4) = map("d$_",(0..9));
+my ($D0,$D1,$D2,$D3,$D4, $H0,$H1,$H2,$H3,$H4) = map("q$_",(5..14));
+my ($T0,$T1,$MASK) = map("q$_",(15,4,0));
+
+my ($in2,$zeros,$tbl0,$tbl1) = map("r$_",(4..7));
+
+$code.=<<___;
+#if	__ARM_MAX_ARCH__>=7
+.fpu	neon
+
+.type	poly1305_init_neon,%function
+.align	5
+poly1305_init_neon:
+.Lpoly1305_init_neon:
+	ldr	r3,[$ctx,#48]		@ first table element
+	cmp	r3,#-1			@ is value impossible?
+	bne	.Lno_init_neon
+
+	ldr	r4,[$ctx,#20]		@ load key base 2^32
+	ldr	r5,[$ctx,#24]
+	ldr	r6,[$ctx,#28]
+	ldr	r7,[$ctx,#32]
+
+	and	r2,r4,#0x03ffffff	@ base 2^32 -> base 2^26
+	mov	r3,r4,lsr#26
+	mov	r4,r5,lsr#20
+	orr	r3,r3,r5,lsl#6
+	mov	r5,r6,lsr#14
+	orr	r4,r4,r6,lsl#12
+	mov	r6,r7,lsr#8
+	orr	r5,r5,r7,lsl#18
+	and	r3,r3,#0x03ffffff
+	and	r4,r4,#0x03ffffff
+	and	r5,r5,#0x03ffffff
+
+	vdup.32	$R0,r2			@ r^1 in both lanes
+	add	r2,r3,r3,lsl#2		@ *5
+	vdup.32	$R1,r3
+	add	r3,r4,r4,lsl#2
+	vdup.32	$S1,r2
+	vdup.32	$R2,r4
+	add	r4,r5,r5,lsl#2
+	vdup.32	$S2,r3
+	vdup.32	$R3,r5
+	add	r5,r6,r6,lsl#2
+	vdup.32	$S3,r4
+	vdup.32	$R4,r6
+	vdup.32	$S4,r5
+
+	mov	$zeros,#2		@ counter
+
+.Lsquare_neon:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ d0 = h0*r0 + h4*5*r1 + h3*5*r2 + h2*5*r3 + h1*5*r4
+	@ d1 = h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3 + h2*5*r4
+	@ d2 = h2*r0 + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	@ d3 = h3*r0 + h2*r1   + h1*r2   + h0*r3   + h4*5*r4
+	@ d4 = h4*r0 + h3*r1   + h2*r2   + h1*r3   + h0*r4
+
+	vmull.u32	$D0,$R0,${R0}[1]
+	vmull.u32	$D1,$R1,${R0}[1]
+	vmull.u32	$D2,$R2,${R0}[1]
+	vmull.u32	$D3,$R3,${R0}[1]
+	vmull.u32	$D4,$R4,${R0}[1]
+
+	vmlal.u32	$D0,$R4,${S1}[1]
+	vmlal.u32	$D1,$R0,${R1}[1]
+	vmlal.u32	$D2,$R1,${R1}[1]
+	vmlal.u32	$D3,$R2,${R1}[1]
+	vmlal.u32	$D4,$R3,${R1}[1]
+
+	vmlal.u32	$D0,$R3,${S2}[1]
+	vmlal.u32	$D1,$R4,${S2}[1]
+	vmlal.u32	$D3,$R1,${R2}[1]
+	vmlal.u32	$D2,$R0,${R2}[1]
+	vmlal.u32	$D4,$R2,${R2}[1]
+
+	vmlal.u32	$D0,$R2,${S3}[1]
+	vmlal.u32	$D3,$R0,${R3}[1]
+	vmlal.u32	$D1,$R3,${S3}[1]
+	vmlal.u32	$D2,$R4,${S3}[1]
+	vmlal.u32	$D4,$R1,${R3}[1]
+
+	vmlal.u32	$D3,$R4,${S4}[1]
+	vmlal.u32	$D0,$R1,${S4}[1]
+	vmlal.u32	$D1,$R2,${S4}[1]
+	vmlal.u32	$D2,$R3,${S4}[1]
+	vmlal.u32	$D4,$R0,${R4}[1]
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ lazy reduction as discussed in "NEON crypto" by D.J. Bernstein
+	@ and P. Schwabe
+	@
+	@ H0>>+H1>>+H2>>+H3>>+H4
+	@ H3>>+H4>>*5+H0>>+H1
+	@
+	@ Trivia.
+	@
+	@ Result of multiplication of n-bit number by m-bit number is
+	@ n+m bits wide. However! Even though 2^n is a n+1-bit number,
+	@ m-bit number multiplied by 2^n is still n+m bits wide.
+	@
+	@ Sum of two n-bit numbers is n+1 bits wide, sum of three - n+2,
+	@ and so is sum of four. Sum of 2^m n-m-bit numbers and n-bit
+	@ one is n+1 bits wide.
+	@
+	@ >>+ denotes Hnext += Hn>>26, Hn &= 0x3ffffff. This means that
+	@ H0, H2, H3 are guaranteed to be 26 bits wide, while H1 and H4
+	@ can be 27. However! In cases when their width exceeds 26 bits
+	@ they are limited by 2^26+2^6. This in turn means that *sum*
+	@ of the products with these values can still be viewed as sum
+	@ of 52-bit numbers as long as the amount of addends is not a
+	@ power of 2. For example,
+	@
+	@ H4 = H4*R0 + H3*R1 + H2*R2 + H1*R3 + H0 * R4,
+	@
+	@ which can't be larger than 5 * (2^26 + 2^6) * (2^26 + 2^6), or
+	@ 5 * (2^52 + 2*2^32 + 2^12), which in turn is smaller than
+	@ 8 * (2^52) or 2^55. However, the value is then multiplied by
+	@ by 5, so we should be looking at 5 * 5 * (2^52 + 2^33 + 2^12),
+	@ which is less than 32 * (2^52) or 2^57. And when processing
+	@ data we are looking at triple as many addends...
+	@
+	@ In key setup procedure pre-reduced H0 is limited by 5*4+1 and
+	@ 5*H4 - by 5*5 52-bit addends, or 57 bits. But when hashing the
+	@ input H0 is limited by (5*4+1)*3 addends, or 58 bits, while
+	@ 5*H4 by 5*5*3, or 59[!] bits. How is this relevant? vmlal.u32
+	@ instruction accepts 2x32-bit input and writes 2x64-bit result.
+	@ This means that result of reduction have to be compressed upon
+	@ loop wrap-around. This can be done in the process of reduction
+	@ to minimize amount of instructions [as well as amount of
+	@ 128-bit instructions, which benefits low-end processors], but
+	@ one has to watch for H2 (which is narrower than H0) and 5*H4
+	@ not being wider than 58 bits, so that result of right shift
+	@ by 26 bits fits in 32 bits. This is also useful on x86,
+	@ because it allows to use paddd in place for paddq, which
+	@ benefits Atom, where paddq is ridiculously slow.
+
+	vshr.u64	$T0,$D3,#26
+	vmovn.i64	$D3#lo,$D3
+	 vshr.u64	$T1,$D0,#26
+	 vmovn.i64	$D0#lo,$D0
+	vadd.i64	$D4,$D4,$T0		@ h3 -> h4
+	vbic.i32	$D3#lo,#0xfc000000	@ &=0x03ffffff
+	 vadd.i64	$D1,$D1,$T1		@ h0 -> h1
+	 vbic.i32	$D0#lo,#0xfc000000
+
+	vshrn.u64	$T0#lo,$D4,#26
+	vmovn.i64	$D4#lo,$D4
+	 vshr.u64	$T1,$D1,#26
+	 vmovn.i64	$D1#lo,$D1
+	 vadd.i64	$D2,$D2,$T1		@ h1 -> h2
+	vbic.i32	$D4#lo,#0xfc000000
+	 vbic.i32	$D1#lo,#0xfc000000
+
+	vadd.i32	$D0#lo,$D0#lo,$T0#lo
+	vshl.u32	$T0#lo,$T0#lo,#2
+	 vshrn.u64	$T1#lo,$D2,#26
+	 vmovn.i64	$D2#lo,$D2
+	vadd.i32	$D0#lo,$D0#lo,$T0#lo	@ h4 -> h0
+	 vadd.i32	$D3#lo,$D3#lo,$T1#lo	@ h2 -> h3
+	 vbic.i32	$D2#lo,#0xfc000000
+
+	vshr.u32	$T0#lo,$D0#lo,#26
+	vbic.i32	$D0#lo,#0xfc000000
+	 vshr.u32	$T1#lo,$D3#lo,#26
+	 vbic.i32	$D3#lo,#0xfc000000
+	vadd.i32	$D1#lo,$D1#lo,$T0#lo	@ h0 -> h1
+	 vadd.i32	$D4#lo,$D4#lo,$T1#lo	@ h3 -> h4
+
+	subs		$zeros,$zeros,#1
+	beq		.Lsquare_break_neon
+
+	add		$tbl0,$ctx,#(48+0*9*4)
+	add		$tbl1,$ctx,#(48+1*9*4)
+
+	vtrn.32		$R0,$D0#lo		@ r^2:r^1
+	vtrn.32		$R2,$D2#lo
+	vtrn.32		$R3,$D3#lo
+	vtrn.32		$R1,$D1#lo
+	vtrn.32		$R4,$D4#lo
+
+	vshl.u32	$S2,$R2,#2		@ *5
+	vshl.u32	$S3,$R3,#2
+	vshl.u32	$S1,$R1,#2
+	vshl.u32	$S4,$R4,#2
+	vadd.i32	$S2,$S2,$R2
+	vadd.i32	$S1,$S1,$R1
+	vadd.i32	$S3,$S3,$R3
+	vadd.i32	$S4,$S4,$R4
+
+	vst4.32		{${R0}[0],${R1}[0],${S1}[0],${R2}[0]},[$tbl0]!
+	vst4.32		{${R0}[1],${R1}[1],${S1}[1],${R2}[1]},[$tbl1]!
+	vst4.32		{${S2}[0],${R3}[0],${S3}[0],${R4}[0]},[$tbl0]!
+	vst4.32		{${S2}[1],${R3}[1],${S3}[1],${R4}[1]},[$tbl1]!
+	vst1.32		{${S4}[0]},[$tbl0,:32]
+	vst1.32		{${S4}[1]},[$tbl1,:32]
+
+	b		.Lsquare_neon
+
+.align	4
+.Lsquare_break_neon:
+	add		$tbl0,$ctx,#(48+2*4*9)
+	add		$tbl1,$ctx,#(48+3*4*9)
+
+	vmov		$R0,$D0#lo		@ r^4:r^3
+	vshl.u32	$S1,$D1#lo,#2		@ *5
+	vmov		$R1,$D1#lo
+	vshl.u32	$S2,$D2#lo,#2
+	vmov		$R2,$D2#lo
+	vshl.u32	$S3,$D3#lo,#2
+	vmov		$R3,$D3#lo
+	vshl.u32	$S4,$D4#lo,#2
+	vmov		$R4,$D4#lo
+	vadd.i32	$S1,$S1,$D1#lo
+	vadd.i32	$S2,$S2,$D2#lo
+	vadd.i32	$S3,$S3,$D3#lo
+	vadd.i32	$S4,$S4,$D4#lo
+
+	vst4.32		{${R0}[0],${R1}[0],${S1}[0],${R2}[0]},[$tbl0]!
+	vst4.32		{${R0}[1],${R1}[1],${S1}[1],${R2}[1]},[$tbl1]!
+	vst4.32		{${S2}[0],${R3}[0],${S3}[0],${R4}[0]},[$tbl0]!
+	vst4.32		{${S2}[1],${R3}[1],${S3}[1],${R4}[1]},[$tbl1]!
+	vst1.32		{${S4}[0]},[$tbl0]
+	vst1.32		{${S4}[1]},[$tbl1]
+
+.Lno_init_neon:
+	ret				@ bx	lr
+.size	poly1305_init_neon,.-poly1305_init_neon
+
+.type	poly1305_blocks_neon,%function
+.align	5
+poly1305_blocks_neon:
+.Lpoly1305_blocks_neon:
+	ldr	ip,[$ctx,#36]		@ is_base2_26
+
+	cmp	$len,#64
+	blo	.Lpoly1305_blocks
+
+	stmdb	sp!,{r4-r7}
+	vstmdb	sp!,{d8-d15}		@ ABI specification says so
+
+	tst	ip,ip			@ is_base2_26?
+	bne	.Lbase2_26_neon
+
+	stmdb	sp!,{r1-r3,lr}
+	bl	.Lpoly1305_init_neon
+
+	ldr	r4,[$ctx,#0]		@ load hash value base 2^32
+	ldr	r5,[$ctx,#4]
+	ldr	r6,[$ctx,#8]
+	ldr	r7,[$ctx,#12]
+	ldr	ip,[$ctx,#16]
+
+	and	r2,r4,#0x03ffffff	@ base 2^32 -> base 2^26
+	mov	r3,r4,lsr#26
+	 veor	$D0#lo,$D0#lo,$D0#lo
+	mov	r4,r5,lsr#20
+	orr	r3,r3,r5,lsl#6
+	 veor	$D1#lo,$D1#lo,$D1#lo
+	mov	r5,r6,lsr#14
+	orr	r4,r4,r6,lsl#12
+	 veor	$D2#lo,$D2#lo,$D2#lo
+	mov	r6,r7,lsr#8
+	orr	r5,r5,r7,lsl#18
+	 veor	$D3#lo,$D3#lo,$D3#lo
+	and	r3,r3,#0x03ffffff
+	orr	r6,r6,ip,lsl#24
+	 veor	$D4#lo,$D4#lo,$D4#lo
+	and	r4,r4,#0x03ffffff
+	mov	r1,#1
+	and	r5,r5,#0x03ffffff
+	str	r1,[$ctx,#36]		@ set is_base2_26
+
+	vmov.32	$D0#lo[0],r2
+	vmov.32	$D1#lo[0],r3
+	vmov.32	$D2#lo[0],r4
+	vmov.32	$D3#lo[0],r5
+	vmov.32	$D4#lo[0],r6
+	adr	$zeros,.Lzeros
+
+	ldmia	sp!,{r1-r3,lr}
+	b	.Lhash_loaded
+
+.align	4
+.Lbase2_26_neon:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ load hash value
+
+	veor		$D0#lo,$D0#lo,$D0#lo
+	veor		$D1#lo,$D1#lo,$D1#lo
+	veor		$D2#lo,$D2#lo,$D2#lo
+	veor		$D3#lo,$D3#lo,$D3#lo
+	veor		$D4#lo,$D4#lo,$D4#lo
+	vld4.32		{$D0#lo[0],$D1#lo[0],$D2#lo[0],$D3#lo[0]},[$ctx]!
+	adr		$zeros,.Lzeros
+	vld1.32		{$D4#lo[0]},[$ctx]
+	sub		$ctx,$ctx,#16		@ rewind
+
+.Lhash_loaded:
+	add		$in2,$inp,#32
+	mov		$padbit,$padbit,lsl#24
+	tst		$len,#31
+	beq		.Leven
+
+	vld4.32		{$H0#lo[0],$H1#lo[0],$H2#lo[0],$H3#lo[0]},[$inp]!
+	vmov.32		$H4#lo[0],$padbit
+	sub		$len,$len,#16
+	add		$in2,$inp,#32
+
+# ifdef	__ARMEB__
+	vrev32.8	$H0,$H0
+	vrev32.8	$H3,$H3
+	vrev32.8	$H1,$H1
+	vrev32.8	$H2,$H2
+# endif
+	vsri.u32	$H4#lo,$H3#lo,#8	@ base 2^32 -> base 2^26
+	vshl.u32	$H3#lo,$H3#lo,#18
+
+	vsri.u32	$H3#lo,$H2#lo,#14
+	vshl.u32	$H2#lo,$H2#lo,#12
+	vadd.i32	$H4#hi,$H4#lo,$D4#lo	@ add hash value and move to #hi
+
+	vbic.i32	$H3#lo,#0xfc000000
+	vsri.u32	$H2#lo,$H1#lo,#20
+	vshl.u32	$H1#lo,$H1#lo,#6
+
+	vbic.i32	$H2#lo,#0xfc000000
+	vsri.u32	$H1#lo,$H0#lo,#26
+	vadd.i32	$H3#hi,$H3#lo,$D3#lo
+
+	vbic.i32	$H0#lo,#0xfc000000
+	vbic.i32	$H1#lo,#0xfc000000
+	vadd.i32	$H2#hi,$H2#lo,$D2#lo
+
+	vadd.i32	$H0#hi,$H0#lo,$D0#lo
+	vadd.i32	$H1#hi,$H1#lo,$D1#lo
+
+	mov		$tbl1,$zeros
+	add		$tbl0,$ctx,#48
+
+	cmp		$len,$len
+	b		.Long_tail
+
+.align	4
+.Leven:
+	subs		$len,$len,#64
+	it		lo
+	movlo		$in2,$zeros
+
+	vmov.i32	$H4,#1<<24		@ padbit, yes, always
+	vld4.32		{$H0#lo,$H1#lo,$H2#lo,$H3#lo},[$inp]	@ inp[0:1]
+	add		$inp,$inp,#64
+	vld4.32		{$H0#hi,$H1#hi,$H2#hi,$H3#hi},[$in2]	@ inp[2:3] (or 0)
+	add		$in2,$in2,#64
+	itt		hi
+	addhi		$tbl1,$ctx,#(48+1*9*4)
+	addhi		$tbl0,$ctx,#(48+3*9*4)
+
+# ifdef	__ARMEB__
+	vrev32.8	$H0,$H0
+	vrev32.8	$H3,$H3
+	vrev32.8	$H1,$H1
+	vrev32.8	$H2,$H2
+# endif
+	vsri.u32	$H4,$H3,#8		@ base 2^32 -> base 2^26
+	vshl.u32	$H3,$H3,#18
+
+	vsri.u32	$H3,$H2,#14
+	vshl.u32	$H2,$H2,#12
+
+	vbic.i32	$H3,#0xfc000000
+	vsri.u32	$H2,$H1,#20
+	vshl.u32	$H1,$H1,#6
+
+	vbic.i32	$H2,#0xfc000000
+	vsri.u32	$H1,$H0,#26
+
+	vbic.i32	$H0,#0xfc000000
+	vbic.i32	$H1,#0xfc000000
+
+	bls		.Lskip_loop
+
+	vld4.32		{${R0}[1],${R1}[1],${S1}[1],${R2}[1]},[$tbl1]!	@ load r^2
+	vld4.32		{${R0}[0],${R1}[0],${S1}[0],${R2}[0]},[$tbl0]!	@ load r^4
+	vld4.32		{${S2}[1],${R3}[1],${S3}[1],${R4}[1]},[$tbl1]!
+	vld4.32		{${S2}[0],${R3}[0],${S3}[0],${R4}[0]},[$tbl0]!
+	b		.Loop_neon
+
+.align	5
+.Loop_neon:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2
+	@ ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^3+inp[7]*r
+	@   \___________________/
+	@ ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2+inp[8])*r^2
+	@ ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^4+inp[7]*r^2+inp[9])*r
+	@   \___________________/ \____________________/
+	@
+	@ Note that we start with inp[2:3]*r^2. This is because it
+	@ doesn't depend on reduction in previous iteration.
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ d4 = h4*r0 + h3*r1   + h2*r2   + h1*r3   + h0*r4
+	@ d3 = h3*r0 + h2*r1   + h1*r2   + h0*r3   + h4*5*r4
+	@ d2 = h2*r0 + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	@ d1 = h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3 + h2*5*r4
+	@ d0 = h0*r0 + h4*5*r1 + h3*5*r2 + h2*5*r3 + h1*5*r4
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ inp[2:3]*r^2
+
+	vadd.i32	$H2#lo,$H2#lo,$D2#lo	@ accumulate inp[0:1]
+	vmull.u32	$D2,$H2#hi,${R0}[1]
+	vadd.i32	$H0#lo,$H0#lo,$D0#lo
+	vmull.u32	$D0,$H0#hi,${R0}[1]
+	vadd.i32	$H3#lo,$H3#lo,$D3#lo
+	vmull.u32	$D3,$H3#hi,${R0}[1]
+	vmlal.u32	$D2,$H1#hi,${R1}[1]
+	vadd.i32	$H1#lo,$H1#lo,$D1#lo
+	vmull.u32	$D1,$H1#hi,${R0}[1]
+
+	vadd.i32	$H4#lo,$H4#lo,$D4#lo
+	vmull.u32	$D4,$H4#hi,${R0}[1]
+	subs		$len,$len,#64
+	vmlal.u32	$D0,$H4#hi,${S1}[1]
+	it		lo
+	movlo		$in2,$zeros
+	vmlal.u32	$D3,$H2#hi,${R1}[1]
+	vld1.32		${S4}[1],[$tbl1,:32]
+	vmlal.u32	$D1,$H0#hi,${R1}[1]
+	vmlal.u32	$D4,$H3#hi,${R1}[1]
+
+	vmlal.u32	$D0,$H3#hi,${S2}[1]
+	vmlal.u32	$D3,$H1#hi,${R2}[1]
+	vmlal.u32	$D4,$H2#hi,${R2}[1]
+	vmlal.u32	$D1,$H4#hi,${S2}[1]
+	vmlal.u32	$D2,$H0#hi,${R2}[1]
+
+	vmlal.u32	$D3,$H0#hi,${R3}[1]
+	vmlal.u32	$D0,$H2#hi,${S3}[1]
+	vmlal.u32	$D4,$H1#hi,${R3}[1]
+	vmlal.u32	$D1,$H3#hi,${S3}[1]
+	vmlal.u32	$D2,$H4#hi,${S3}[1]
+
+	vmlal.u32	$D3,$H4#hi,${S4}[1]
+	vmlal.u32	$D0,$H1#hi,${S4}[1]
+	vmlal.u32	$D4,$H0#hi,${R4}[1]
+	vmlal.u32	$D1,$H2#hi,${S4}[1]
+	vmlal.u32	$D2,$H3#hi,${S4}[1]
+
+	vld4.32		{$H0#hi,$H1#hi,$H2#hi,$H3#hi},[$in2]	@ inp[2:3] (or 0)
+	add		$in2,$in2,#64
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ (hash+inp[0:1])*r^4 and accumulate
+
+	vmlal.u32	$D3,$H3#lo,${R0}[0]
+	vmlal.u32	$D0,$H0#lo,${R0}[0]
+	vmlal.u32	$D4,$H4#lo,${R0}[0]
+	vmlal.u32	$D1,$H1#lo,${R0}[0]
+	vmlal.u32	$D2,$H2#lo,${R0}[0]
+	vld1.32		${S4}[0],[$tbl0,:32]
+
+	vmlal.u32	$D3,$H2#lo,${R1}[0]
+	vmlal.u32	$D0,$H4#lo,${S1}[0]
+	vmlal.u32	$D4,$H3#lo,${R1}[0]
+	vmlal.u32	$D1,$H0#lo,${R1}[0]
+	vmlal.u32	$D2,$H1#lo,${R1}[0]
+
+	vmlal.u32	$D3,$H1#lo,${R2}[0]
+	vmlal.u32	$D0,$H3#lo,${S2}[0]
+	vmlal.u32	$D4,$H2#lo,${R2}[0]
+	vmlal.u32	$D1,$H4#lo,${S2}[0]
+	vmlal.u32	$D2,$H0#lo,${R2}[0]
+
+	vmlal.u32	$D3,$H0#lo,${R3}[0]
+	vmlal.u32	$D0,$H2#lo,${S3}[0]
+	vmlal.u32	$D4,$H1#lo,${R3}[0]
+	vmlal.u32	$D1,$H3#lo,${S3}[0]
+	vmlal.u32	$D3,$H4#lo,${S4}[0]
+
+	vmlal.u32	$D2,$H4#lo,${S3}[0]
+	vmlal.u32	$D0,$H1#lo,${S4}[0]
+	vmlal.u32	$D4,$H0#lo,${R4}[0]
+	vmov.i32	$H4,#1<<24		@ padbit, yes, always
+	vmlal.u32	$D1,$H2#lo,${S4}[0]
+	vmlal.u32	$D2,$H3#lo,${S4}[0]
+
+	vld4.32		{$H0#lo,$H1#lo,$H2#lo,$H3#lo},[$inp]	@ inp[0:1]
+	add		$inp,$inp,#64
+# ifdef	__ARMEB__
+	vrev32.8	$H0,$H0
+	vrev32.8	$H1,$H1
+	vrev32.8	$H2,$H2
+	vrev32.8	$H3,$H3
+# endif
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ lazy reduction interleaved with base 2^32 -> base 2^26 of
+	@ inp[0:3] previously loaded to $H0-$H3 and smashed to $H0-$H4.
+
+	vshr.u64	$T0,$D3,#26
+	vmovn.i64	$D3#lo,$D3
+	 vshr.u64	$T1,$D0,#26
+	 vmovn.i64	$D0#lo,$D0
+	vadd.i64	$D4,$D4,$T0		@ h3 -> h4
+	vbic.i32	$D3#lo,#0xfc000000
+	  vsri.u32	$H4,$H3,#8		@ base 2^32 -> base 2^26
+	 vadd.i64	$D1,$D1,$T1		@ h0 -> h1
+	  vshl.u32	$H3,$H3,#18
+	 vbic.i32	$D0#lo,#0xfc000000
+
+	vshrn.u64	$T0#lo,$D4,#26
+	vmovn.i64	$D4#lo,$D4
+	 vshr.u64	$T1,$D1,#26
+	 vmovn.i64	$D1#lo,$D1
+	 vadd.i64	$D2,$D2,$T1		@ h1 -> h2
+	  vsri.u32	$H3,$H2,#14
+	vbic.i32	$D4#lo,#0xfc000000
+	  vshl.u32	$H2,$H2,#12
+	 vbic.i32	$D1#lo,#0xfc000000
+
+	vadd.i32	$D0#lo,$D0#lo,$T0#lo
+	vshl.u32	$T0#lo,$T0#lo,#2
+	  vbic.i32	$H3,#0xfc000000
+	 vshrn.u64	$T1#lo,$D2,#26
+	 vmovn.i64	$D2#lo,$D2
+	vaddl.u32	$D0,$D0#lo,$T0#lo	@ h4 -> h0 [widen for a sec]
+	  vsri.u32	$H2,$H1,#20
+	 vadd.i32	$D3#lo,$D3#lo,$T1#lo	@ h2 -> h3
+	  vshl.u32	$H1,$H1,#6
+	 vbic.i32	$D2#lo,#0xfc000000
+	  vbic.i32	$H2,#0xfc000000
+
+	vshrn.u64	$T0#lo,$D0,#26		@ re-narrow
+	vmovn.i64	$D0#lo,$D0
+	  vsri.u32	$H1,$H0,#26
+	  vbic.i32	$H0,#0xfc000000
+	 vshr.u32	$T1#lo,$D3#lo,#26
+	 vbic.i32	$D3#lo,#0xfc000000
+	vbic.i32	$D0#lo,#0xfc000000
+	vadd.i32	$D1#lo,$D1#lo,$T0#lo	@ h0 -> h1
+	 vadd.i32	$D4#lo,$D4#lo,$T1#lo	@ h3 -> h4
+	  vbic.i32	$H1,#0xfc000000
+
+	bhi		.Loop_neon
+
+.Lskip_loop:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ multiply (inp[0:1]+hash) or inp[2:3] by r^2:r^1
+
+	add		$tbl1,$ctx,#(48+0*9*4)
+	add		$tbl0,$ctx,#(48+1*9*4)
+	adds		$len,$len,#32
+	it		ne
+	movne		$len,#0
+	bne		.Long_tail
+
+	vadd.i32	$H2#hi,$H2#lo,$D2#lo	@ add hash value and move to #hi
+	vadd.i32	$H0#hi,$H0#lo,$D0#lo
+	vadd.i32	$H3#hi,$H3#lo,$D3#lo
+	vadd.i32	$H1#hi,$H1#lo,$D1#lo
+	vadd.i32	$H4#hi,$H4#lo,$D4#lo
+
+.Long_tail:
+	vld4.32		{${R0}[1],${R1}[1],${S1}[1],${R2}[1]},[$tbl1]!	@ load r^1
+	vld4.32		{${R0}[0],${R1}[0],${S1}[0],${R2}[0]},[$tbl0]!	@ load r^2
+
+	vadd.i32	$H2#lo,$H2#lo,$D2#lo	@ can be redundant
+	vmull.u32	$D2,$H2#hi,$R0
+	vadd.i32	$H0#lo,$H0#lo,$D0#lo
+	vmull.u32	$D0,$H0#hi,$R0
+	vadd.i32	$H3#lo,$H3#lo,$D3#lo
+	vmull.u32	$D3,$H3#hi,$R0
+	vadd.i32	$H1#lo,$H1#lo,$D1#lo
+	vmull.u32	$D1,$H1#hi,$R0
+	vadd.i32	$H4#lo,$H4#lo,$D4#lo
+	vmull.u32	$D4,$H4#hi,$R0
+
+	vmlal.u32	$D0,$H4#hi,$S1
+	vld4.32		{${S2}[1],${R3}[1],${S3}[1],${R4}[1]},[$tbl1]!
+	vmlal.u32	$D3,$H2#hi,$R1
+	vld4.32		{${S2}[0],${R3}[0],${S3}[0],${R4}[0]},[$tbl0]!
+	vmlal.u32	$D1,$H0#hi,$R1
+	vmlal.u32	$D4,$H3#hi,$R1
+	vmlal.u32	$D2,$H1#hi,$R1
+
+	vmlal.u32	$D3,$H1#hi,$R2
+	vld1.32		${S4}[1],[$tbl1,:32]
+	vmlal.u32	$D0,$H3#hi,$S2
+	vld1.32		${S4}[0],[$tbl0,:32]
+	vmlal.u32	$D4,$H2#hi,$R2
+	vmlal.u32	$D1,$H4#hi,$S2
+	vmlal.u32	$D2,$H0#hi,$R2
+
+	vmlal.u32	$D3,$H0#hi,$R3
+	 it		ne
+	 addne		$tbl1,$ctx,#(48+2*9*4)
+	vmlal.u32	$D0,$H2#hi,$S3
+	 it		ne
+	 addne		$tbl0,$ctx,#(48+3*9*4)
+	vmlal.u32	$D4,$H1#hi,$R3
+	vmlal.u32	$D1,$H3#hi,$S3
+	vmlal.u32	$D2,$H4#hi,$S3
+
+	vmlal.u32	$D3,$H4#hi,$S4
+	 vorn		$MASK,$MASK,$MASK	@ all-ones, can be redundant
+	vmlal.u32	$D0,$H1#hi,$S4
+	 vshr.u64	$MASK,$MASK,#38
+	vmlal.u32	$D4,$H0#hi,$R4
+	vmlal.u32	$D1,$H2#hi,$S4
+	vmlal.u32	$D2,$H3#hi,$S4
+
+	beq		.Lshort_tail
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ (hash+inp[0:1])*r^4:r^3 and accumulate
+
+	vld4.32		{${R0}[1],${R1}[1],${S1}[1],${R2}[1]},[$tbl1]!	@ load r^3
+	vld4.32		{${R0}[0],${R1}[0],${S1}[0],${R2}[0]},[$tbl0]!	@ load r^4
+
+	vmlal.u32	$D2,$H2#lo,$R0
+	vmlal.u32	$D0,$H0#lo,$R0
+	vmlal.u32	$D3,$H3#lo,$R0
+	vmlal.u32	$D1,$H1#lo,$R0
+	vmlal.u32	$D4,$H4#lo,$R0
+
+	vmlal.u32	$D0,$H4#lo,$S1
+	vld4.32		{${S2}[1],${R3}[1],${S3}[1],${R4}[1]},[$tbl1]!
+	vmlal.u32	$D3,$H2#lo,$R1
+	vld4.32		{${S2}[0],${R3}[0],${S3}[0],${R4}[0]},[$tbl0]!
+	vmlal.u32	$D1,$H0#lo,$R1
+	vmlal.u32	$D4,$H3#lo,$R1
+	vmlal.u32	$D2,$H1#lo,$R1
+
+	vmlal.u32	$D3,$H1#lo,$R2
+	vld1.32		${S4}[1],[$tbl1,:32]
+	vmlal.u32	$D0,$H3#lo,$S2
+	vld1.32		${S4}[0],[$tbl0,:32]
+	vmlal.u32	$D4,$H2#lo,$R2
+	vmlal.u32	$D1,$H4#lo,$S2
+	vmlal.u32	$D2,$H0#lo,$R2
+
+	vmlal.u32	$D3,$H0#lo,$R3
+	vmlal.u32	$D0,$H2#lo,$S3
+	vmlal.u32	$D4,$H1#lo,$R3
+	vmlal.u32	$D1,$H3#lo,$S3
+	vmlal.u32	$D2,$H4#lo,$S3
+
+	vmlal.u32	$D3,$H4#lo,$S4
+	 vorn		$MASK,$MASK,$MASK	@ all-ones
+	vmlal.u32	$D0,$H1#lo,$S4
+	 vshr.u64	$MASK,$MASK,#38
+	vmlal.u32	$D4,$H0#lo,$R4
+	vmlal.u32	$D1,$H2#lo,$S4
+	vmlal.u32	$D2,$H3#lo,$S4
+
+.Lshort_tail:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ horizontal addition
+
+	vadd.i64	$D3#lo,$D3#lo,$D3#hi
+	vadd.i64	$D0#lo,$D0#lo,$D0#hi
+	vadd.i64	$D4#lo,$D4#lo,$D4#hi
+	vadd.i64	$D1#lo,$D1#lo,$D1#hi
+	vadd.i64	$D2#lo,$D2#lo,$D2#hi
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ lazy reduction, but without narrowing
+
+	vshr.u64	$T0,$D3,#26
+	vand.i64	$D3,$D3,$MASK
+	 vshr.u64	$T1,$D0,#26
+	 vand.i64	$D0,$D0,$MASK
+	vadd.i64	$D4,$D4,$T0		@ h3 -> h4
+	 vadd.i64	$D1,$D1,$T1		@ h0 -> h1
+
+	vshr.u64	$T0,$D4,#26
+	vand.i64	$D4,$D4,$MASK
+	 vshr.u64	$T1,$D1,#26
+	 vand.i64	$D1,$D1,$MASK
+	 vadd.i64	$D2,$D2,$T1		@ h1 -> h2
+
+	vadd.i64	$D0,$D0,$T0
+	vshl.u64	$T0,$T0,#2
+	 vshr.u64	$T1,$D2,#26
+	 vand.i64	$D2,$D2,$MASK
+	vadd.i64	$D0,$D0,$T0		@ h4 -> h0
+	 vadd.i64	$D3,$D3,$T1		@ h2 -> h3
+
+	vshr.u64	$T0,$D0,#26
+	vand.i64	$D0,$D0,$MASK
+	 vshr.u64	$T1,$D3,#26
+	 vand.i64	$D3,$D3,$MASK
+	vadd.i64	$D1,$D1,$T0		@ h0 -> h1
+	 vadd.i64	$D4,$D4,$T1		@ h3 -> h4
+
+	cmp		$len,#0
+	bne		.Leven
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ store hash value
+
+	vst4.32		{$D0#lo[0],$D1#lo[0],$D2#lo[0],$D3#lo[0]},[$ctx]!
+	vst1.32		{$D4#lo[0]},[$ctx]
+
+	vldmia	sp!,{d8-d15}			@ epilogue
+	ldmia	sp!,{r4-r7}
+	ret					@ bx	lr
+.size	poly1305_blocks_neon,.-poly1305_blocks_neon
+
+.align	5
+.Lzeros:
+.long	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+#ifndef	__KERNEL__
+.LOPENSSL_armcap:
+# ifdef	_WIN32
+.word	OPENSSL_armcap_P
+# else
+.word	OPENSSL_armcap_P-.Lpoly1305_init
+# endif
+.comm	OPENSSL_armcap_P,4,4
+.hidden	OPENSSL_armcap_P
+#endif
+#endif
+___
+}	}
+$code.=<<___;
+.asciz	"Poly1305 for ARMv4/NEON, CRYPTOGAMS by \@dot-asm"
+.align	2
+___
+
+foreach (split("\n",$code)) {
+	s/\`([^\`]*)\`/eval $1/geo;
+
+	s/\bq([0-9]+)#(lo|hi)/sprintf "d%d",2*$1+($2 eq "hi")/geo	or
+	s/\bret\b/bx	lr/go						or
+	s/\bbx\s+lr\b/.word\t0xe12fff1e/go;	# make it possible to compile with -march=armv4
+
+	print $_,"\n";
+}
+close STDOUT; # enforce flush
diff --git a/arch/arm/crypto/poly1305-core.S_shipped b/arch/arm/crypto/poly1305-core.S_shipped
new file mode 100644
index 0000000..37b71d9
--- /dev/null
+++ b/arch/arm/crypto/poly1305-core.S_shipped
@@ -0,0 +1,1158 @@
+#ifndef	__KERNEL__
+# include "arm_arch.h"
+#else
+# define __ARM_ARCH__ __LINUX_ARM_ARCH__
+# define __ARM_MAX_ARCH__ __LINUX_ARM_ARCH__
+# define poly1305_init   poly1305_init_arm
+# define poly1305_blocks poly1305_blocks_arm
+# define poly1305_emit   poly1305_emit_arm
+.globl	poly1305_blocks_neon
+#endif
+
+#if defined(__thumb2__)
+.syntax	unified
+.thumb
+#else
+.code	32
+#endif
+
+.text
+
+.globl	poly1305_emit
+.globl	poly1305_blocks
+.globl	poly1305_init
+.type	poly1305_init,%function
+.align	5
+poly1305_init:
+.Lpoly1305_init:
+	stmdb	sp!,{r4-r11}
+
+	eor	r3,r3,r3
+	cmp	r1,#0
+	str	r3,[r0,#0]		@ zero hash value
+	str	r3,[r0,#4]
+	str	r3,[r0,#8]
+	str	r3,[r0,#12]
+	str	r3,[r0,#16]
+	str	r3,[r0,#36]		@ clear is_base2_26
+	add	r0,r0,#20
+
+#ifdef	__thumb2__
+	it	eq
+#endif
+	moveq	r0,#0
+	beq	.Lno_key
+
+#if	__ARM_MAX_ARCH__>=7
+	mov	r3,#-1
+	str	r3,[r0,#28]		@ impossible key power value
+# ifndef __KERNEL__
+	adr	r11,.Lpoly1305_init
+	ldr	r12,.LOPENSSL_armcap
+# endif
+#endif
+	ldrb	r4,[r1,#0]
+	mov	r10,#0x0fffffff
+	ldrb	r5,[r1,#1]
+	and	r3,r10,#-4		@ 0x0ffffffc
+	ldrb	r6,[r1,#2]
+	ldrb	r7,[r1,#3]
+	orr	r4,r4,r5,lsl#8
+	ldrb	r5,[r1,#4]
+	orr	r4,r4,r6,lsl#16
+	ldrb	r6,[r1,#5]
+	orr	r4,r4,r7,lsl#24
+	ldrb	r7,[r1,#6]
+	and	r4,r4,r10
+
+#if	__ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
+# if !defined(_WIN32)
+	ldr	r12,[r11,r12]		@ OPENSSL_armcap_P
+# endif
+# if defined(__APPLE__) || defined(_WIN32)
+	ldr	r12,[r12]
+# endif
+#endif
+	ldrb	r8,[r1,#7]
+	orr	r5,r5,r6,lsl#8
+	ldrb	r6,[r1,#8]
+	orr	r5,r5,r7,lsl#16
+	ldrb	r7,[r1,#9]
+	orr	r5,r5,r8,lsl#24
+	ldrb	r8,[r1,#10]
+	and	r5,r5,r3
+
+#if	__ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
+	tst	r12,#ARMV7_NEON		@ check for NEON
+# ifdef	__thumb2__
+	adr	r9,.Lpoly1305_blocks_neon
+	adr	r11,.Lpoly1305_blocks
+	it	ne
+	movne	r11,r9
+	adr	r12,.Lpoly1305_emit
+	orr	r11,r11,#1		@ thumb-ify addresses
+	orr	r12,r12,#1
+# else
+	add	r12,r11,#(.Lpoly1305_emit-.Lpoly1305_init)
+	ite	eq
+	addeq	r11,r11,#(.Lpoly1305_blocks-.Lpoly1305_init)
+	addne	r11,r11,#(.Lpoly1305_blocks_neon-.Lpoly1305_init)
+# endif
+#endif
+	ldrb	r9,[r1,#11]
+	orr	r6,r6,r7,lsl#8
+	ldrb	r7,[r1,#12]
+	orr	r6,r6,r8,lsl#16
+	ldrb	r8,[r1,#13]
+	orr	r6,r6,r9,lsl#24
+	ldrb	r9,[r1,#14]
+	and	r6,r6,r3
+
+	ldrb	r10,[r1,#15]
+	orr	r7,r7,r8,lsl#8
+	str	r4,[r0,#0]
+	orr	r7,r7,r9,lsl#16
+	str	r5,[r0,#4]
+	orr	r7,r7,r10,lsl#24
+	str	r6,[r0,#8]
+	and	r7,r7,r3
+	str	r7,[r0,#12]
+#if	__ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
+	stmia	r2,{r11,r12}		@ fill functions table
+	mov	r0,#1
+#else
+	mov	r0,#0
+#endif
+.Lno_key:
+	ldmia	sp!,{r4-r11}
+#if	__ARM_ARCH__>=5
+	bx	lr				@ bx	lr
+#else
+	tst	lr,#1
+	moveq	pc,lr			@ be binary compatible with V4, yet
+	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
+#endif
+.size	poly1305_init,.-poly1305_init
+.type	poly1305_blocks,%function
+.align	5
+poly1305_blocks:
+.Lpoly1305_blocks:
+	stmdb	sp!,{r3-r11,lr}
+
+	ands	r2,r2,#-16
+	beq	.Lno_data
+
+	add	r2,r2,r1		@ end pointer
+	sub	sp,sp,#32
+
+#if __ARM_ARCH__<7
+	ldmia	r0,{r4-r12}		@ load context
+	add	r0,r0,#20
+	str	r2,[sp,#16]		@ offload stuff
+	str	r0,[sp,#12]
+#else
+	ldr	lr,[r0,#36]		@ is_base2_26
+	ldmia	r0!,{r4-r8}		@ load hash value
+	str	r2,[sp,#16]		@ offload stuff
+	str	r0,[sp,#12]
+
+	adds	r9,r4,r5,lsl#26	@ base 2^26 -> base 2^32
+	mov	r10,r5,lsr#6
+	adcs	r10,r10,r6,lsl#20
+	mov	r11,r6,lsr#12
+	adcs	r11,r11,r7,lsl#14
+	mov	r12,r7,lsr#18
+	adcs	r12,r12,r8,lsl#8
+	mov	r2,#0
+	teq	lr,#0
+	str	r2,[r0,#16]		@ clear is_base2_26
+	adc	r2,r2,r8,lsr#24
+
+	itttt	ne
+	movne	r4,r9			@ choose between radixes
+	movne	r5,r10
+	movne	r6,r11
+	movne	r7,r12
+	ldmia	r0,{r9-r12}		@ load key
+	it	ne
+	movne	r8,r2
+#endif
+
+	mov	lr,r1
+	cmp	r3,#0
+	str	r10,[sp,#20]
+	str	r11,[sp,#24]
+	str	r12,[sp,#28]
+	b	.Loop
+
+.align	4
+.Loop:
+#if __ARM_ARCH__<7
+	ldrb	r0,[lr],#16		@ load input
+# ifdef	__thumb2__
+	it	hi
+# endif
+	addhi	r8,r8,#1		@ 1<<128
+	ldrb	r1,[lr,#-15]
+	ldrb	r2,[lr,#-14]
+	ldrb	r3,[lr,#-13]
+	orr	r1,r0,r1,lsl#8
+	ldrb	r0,[lr,#-12]
+	orr	r2,r1,r2,lsl#16
+	ldrb	r1,[lr,#-11]
+	orr	r3,r2,r3,lsl#24
+	ldrb	r2,[lr,#-10]
+	adds	r4,r4,r3		@ accumulate input
+
+	ldrb	r3,[lr,#-9]
+	orr	r1,r0,r1,lsl#8
+	ldrb	r0,[lr,#-8]
+	orr	r2,r1,r2,lsl#16
+	ldrb	r1,[lr,#-7]
+	orr	r3,r2,r3,lsl#24
+	ldrb	r2,[lr,#-6]
+	adcs	r5,r5,r3
+
+	ldrb	r3,[lr,#-5]
+	orr	r1,r0,r1,lsl#8
+	ldrb	r0,[lr,#-4]
+	orr	r2,r1,r2,lsl#16
+	ldrb	r1,[lr,#-3]
+	orr	r3,r2,r3,lsl#24
+	ldrb	r2,[lr,#-2]
+	adcs	r6,r6,r3
+
+	ldrb	r3,[lr,#-1]
+	orr	r1,r0,r1,lsl#8
+	str	lr,[sp,#8]		@ offload input pointer
+	orr	r2,r1,r2,lsl#16
+	add	r10,r10,r10,lsr#2
+	orr	r3,r2,r3,lsl#24
+#else
+	ldr	r0,[lr],#16		@ load input
+	it	hi
+	addhi	r8,r8,#1		@ padbit
+	ldr	r1,[lr,#-12]
+	ldr	r2,[lr,#-8]
+	ldr	r3,[lr,#-4]
+# ifdef	__ARMEB__
+	rev	r0,r0
+	rev	r1,r1
+	rev	r2,r2
+	rev	r3,r3
+# endif
+	adds	r4,r4,r0		@ accumulate input
+	str	lr,[sp,#8]		@ offload input pointer
+	adcs	r5,r5,r1
+	add	r10,r10,r10,lsr#2
+	adcs	r6,r6,r2
+#endif
+	add	r11,r11,r11,lsr#2
+	adcs	r7,r7,r3
+	add	r12,r12,r12,lsr#2
+
+	umull	r2,r3,r5,r9
+	 adc	r8,r8,#0
+	umull	r0,r1,r4,r9
+	umlal	r2,r3,r8,r10
+	umlal	r0,r1,r7,r10
+	ldr	r10,[sp,#20]		@ reload r10
+	umlal	r2,r3,r6,r12
+	umlal	r0,r1,r5,r12
+	umlal	r2,r3,r7,r11
+	umlal	r0,r1,r6,r11
+	umlal	r2,r3,r4,r10
+	str	r0,[sp,#0]		@ future r4
+	 mul	r0,r11,r8
+	ldr	r11,[sp,#24]		@ reload r11
+	adds	r2,r2,r1		@ d1+=d0>>32
+	 eor	r1,r1,r1
+	adc	lr,r3,#0		@ future r6
+	str	r2,[sp,#4]		@ future r5
+
+	mul	r2,r12,r8
+	eor	r3,r3,r3
+	umlal	r0,r1,r7,r12
+	ldr	r12,[sp,#28]		@ reload r12
+	umlal	r2,r3,r7,r9
+	umlal	r0,r1,r6,r9
+	umlal	r2,r3,r6,r10
+	umlal	r0,r1,r5,r10
+	umlal	r2,r3,r5,r11
+	umlal	r0,r1,r4,r11
+	umlal	r2,r3,r4,r12
+	ldr	r4,[sp,#0]
+	mul	r8,r9,r8
+	ldr	r5,[sp,#4]
+
+	adds	r6,lr,r0		@ d2+=d1>>32
+	ldr	lr,[sp,#8]		@ reload input pointer
+	adc	r1,r1,#0
+	adds	r7,r2,r1		@ d3+=d2>>32
+	ldr	r0,[sp,#16]		@ reload end pointer
+	adc	r3,r3,#0
+	add	r8,r8,r3		@ h4+=d3>>32
+
+	and	r1,r8,#-4
+	and	r8,r8,#3
+	add	r1,r1,r1,lsr#2		@ *=5
+	adds	r4,r4,r1
+	adcs	r5,r5,#0
+	adcs	r6,r6,#0
+	adcs	r7,r7,#0
+	adc	r8,r8,#0
+
+	cmp	r0,lr			@ done yet?
+	bhi	.Loop
+
+	ldr	r0,[sp,#12]
+	add	sp,sp,#32
+	stmdb	r0,{r4-r8}		@ store the result
+
+.Lno_data:
+#if	__ARM_ARCH__>=5
+	ldmia	sp!,{r3-r11,pc}
+#else
+	ldmia	sp!,{r3-r11,lr}
+	tst	lr,#1
+	moveq	pc,lr			@ be binary compatible with V4, yet
+	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
+#endif
+.size	poly1305_blocks,.-poly1305_blocks
+.type	poly1305_emit,%function
+.align	5
+poly1305_emit:
+.Lpoly1305_emit:
+	stmdb	sp!,{r4-r11}
+
+	ldmia	r0,{r3-r7}
+
+#if __ARM_ARCH__>=7
+	ldr	ip,[r0,#36]		@ is_base2_26
+
+	adds	r8,r3,r4,lsl#26	@ base 2^26 -> base 2^32
+	mov	r9,r4,lsr#6
+	adcs	r9,r9,r5,lsl#20
+	mov	r10,r5,lsr#12
+	adcs	r10,r10,r6,lsl#14
+	mov	r11,r6,lsr#18
+	adcs	r11,r11,r7,lsl#8
+	mov	r0,#0
+	adc	r0,r0,r7,lsr#24
+
+	tst	ip,ip
+	itttt	ne
+	movne	r3,r8
+	movne	r4,r9
+	movne	r5,r10
+	movne	r6,r11
+	it	ne
+	movne	r7,r0
+#endif
+
+	adds	r8,r3,#5		@ compare to modulus
+	adcs	r9,r4,#0
+	adcs	r10,r5,#0
+	adcs	r11,r6,#0
+	adc	r0,r7,#0
+	tst	r0,#4			@ did it carry/borrow?
+
+#ifdef	__thumb2__
+	it	ne
+#endif
+	movne	r3,r8
+	ldr	r8,[r2,#0]
+#ifdef	__thumb2__
+	it	ne
+#endif
+	movne	r4,r9
+	ldr	r9,[r2,#4]
+#ifdef	__thumb2__
+	it	ne
+#endif
+	movne	r5,r10
+	ldr	r10,[r2,#8]
+#ifdef	__thumb2__
+	it	ne
+#endif
+	movne	r6,r11
+	ldr	r11,[r2,#12]
+
+	adds	r3,r3,r8
+	adcs	r4,r4,r9
+	adcs	r5,r5,r10
+	adc	r6,r6,r11
+
+#if __ARM_ARCH__>=7
+# ifdef __ARMEB__
+	rev	r3,r3
+	rev	r4,r4
+	rev	r5,r5
+	rev	r6,r6
+# endif
+	str	r3,[r1,#0]
+	str	r4,[r1,#4]
+	str	r5,[r1,#8]
+	str	r6,[r1,#12]
+#else
+	strb	r3,[r1,#0]
+	mov	r3,r3,lsr#8
+	strb	r4,[r1,#4]
+	mov	r4,r4,lsr#8
+	strb	r5,[r1,#8]
+	mov	r5,r5,lsr#8
+	strb	r6,[r1,#12]
+	mov	r6,r6,lsr#8
+
+	strb	r3,[r1,#1]
+	mov	r3,r3,lsr#8
+	strb	r4,[r1,#5]
+	mov	r4,r4,lsr#8
+	strb	r5,[r1,#9]
+	mov	r5,r5,lsr#8
+	strb	r6,[r1,#13]
+	mov	r6,r6,lsr#8
+
+	strb	r3,[r1,#2]
+	mov	r3,r3,lsr#8
+	strb	r4,[r1,#6]
+	mov	r4,r4,lsr#8
+	strb	r5,[r1,#10]
+	mov	r5,r5,lsr#8
+	strb	r6,[r1,#14]
+	mov	r6,r6,lsr#8
+
+	strb	r3,[r1,#3]
+	strb	r4,[r1,#7]
+	strb	r5,[r1,#11]
+	strb	r6,[r1,#15]
+#endif
+	ldmia	sp!,{r4-r11}
+#if	__ARM_ARCH__>=5
+	bx	lr				@ bx	lr
+#else
+	tst	lr,#1
+	moveq	pc,lr			@ be binary compatible with V4, yet
+	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
+#endif
+.size	poly1305_emit,.-poly1305_emit
+#if	__ARM_MAX_ARCH__>=7
+.fpu	neon
+
+.type	poly1305_init_neon,%function
+.align	5
+poly1305_init_neon:
+.Lpoly1305_init_neon:
+	ldr	r3,[r0,#48]		@ first table element
+	cmp	r3,#-1			@ is value impossible?
+	bne	.Lno_init_neon
+
+	ldr	r4,[r0,#20]		@ load key base 2^32
+	ldr	r5,[r0,#24]
+	ldr	r6,[r0,#28]
+	ldr	r7,[r0,#32]
+
+	and	r2,r4,#0x03ffffff	@ base 2^32 -> base 2^26
+	mov	r3,r4,lsr#26
+	mov	r4,r5,lsr#20
+	orr	r3,r3,r5,lsl#6
+	mov	r5,r6,lsr#14
+	orr	r4,r4,r6,lsl#12
+	mov	r6,r7,lsr#8
+	orr	r5,r5,r7,lsl#18
+	and	r3,r3,#0x03ffffff
+	and	r4,r4,#0x03ffffff
+	and	r5,r5,#0x03ffffff
+
+	vdup.32	d0,r2			@ r^1 in both lanes
+	add	r2,r3,r3,lsl#2		@ *5
+	vdup.32	d1,r3
+	add	r3,r4,r4,lsl#2
+	vdup.32	d2,r2
+	vdup.32	d3,r4
+	add	r4,r5,r5,lsl#2
+	vdup.32	d4,r3
+	vdup.32	d5,r5
+	add	r5,r6,r6,lsl#2
+	vdup.32	d6,r4
+	vdup.32	d7,r6
+	vdup.32	d8,r5
+
+	mov	r5,#2		@ counter
+
+.Lsquare_neon:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ d0 = h0*r0 + h4*5*r1 + h3*5*r2 + h2*5*r3 + h1*5*r4
+	@ d1 = h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3 + h2*5*r4
+	@ d2 = h2*r0 + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	@ d3 = h3*r0 + h2*r1   + h1*r2   + h0*r3   + h4*5*r4
+	@ d4 = h4*r0 + h3*r1   + h2*r2   + h1*r3   + h0*r4
+
+	vmull.u32	q5,d0,d0[1]
+	vmull.u32	q6,d1,d0[1]
+	vmull.u32	q7,d3,d0[1]
+	vmull.u32	q8,d5,d0[1]
+	vmull.u32	q9,d7,d0[1]
+
+	vmlal.u32	q5,d7,d2[1]
+	vmlal.u32	q6,d0,d1[1]
+	vmlal.u32	q7,d1,d1[1]
+	vmlal.u32	q8,d3,d1[1]
+	vmlal.u32	q9,d5,d1[1]
+
+	vmlal.u32	q5,d5,d4[1]
+	vmlal.u32	q6,d7,d4[1]
+	vmlal.u32	q8,d1,d3[1]
+	vmlal.u32	q7,d0,d3[1]
+	vmlal.u32	q9,d3,d3[1]
+
+	vmlal.u32	q5,d3,d6[1]
+	vmlal.u32	q8,d0,d5[1]
+	vmlal.u32	q6,d5,d6[1]
+	vmlal.u32	q7,d7,d6[1]
+	vmlal.u32	q9,d1,d5[1]
+
+	vmlal.u32	q8,d7,d8[1]
+	vmlal.u32	q5,d1,d8[1]
+	vmlal.u32	q6,d3,d8[1]
+	vmlal.u32	q7,d5,d8[1]
+	vmlal.u32	q9,d0,d7[1]
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ lazy reduction as discussed in "NEON crypto" by D.J. Bernstein
+	@ and P. Schwabe
+	@
+	@ H0>>+H1>>+H2>>+H3>>+H4
+	@ H3>>+H4>>*5+H0>>+H1
+	@
+	@ Trivia.
+	@
+	@ Result of multiplication of n-bit number by m-bit number is
+	@ n+m bits wide. However! Even though 2^n is a n+1-bit number,
+	@ m-bit number multiplied by 2^n is still n+m bits wide.
+	@
+	@ Sum of two n-bit numbers is n+1 bits wide, sum of three - n+2,
+	@ and so is sum of four. Sum of 2^m n-m-bit numbers and n-bit
+	@ one is n+1 bits wide.
+	@
+	@ >>+ denotes Hnext += Hn>>26, Hn &= 0x3ffffff. This means that
+	@ H0, H2, H3 are guaranteed to be 26 bits wide, while H1 and H4
+	@ can be 27. However! In cases when their width exceeds 26 bits
+	@ they are limited by 2^26+2^6. This in turn means that *sum*
+	@ of the products with these values can still be viewed as sum
+	@ of 52-bit numbers as long as the amount of addends is not a
+	@ power of 2. For example,
+	@
+	@ H4 = H4*R0 + H3*R1 + H2*R2 + H1*R3 + H0 * R4,
+	@
+	@ which can't be larger than 5 * (2^26 + 2^6) * (2^26 + 2^6), or
+	@ 5 * (2^52 + 2*2^32 + 2^12), which in turn is smaller than
+	@ 8 * (2^52) or 2^55. However, the value is then multiplied by
+	@ by 5, so we should be looking at 5 * 5 * (2^52 + 2^33 + 2^12),
+	@ which is less than 32 * (2^52) or 2^57. And when processing
+	@ data we are looking at triple as many addends...
+	@
+	@ In key setup procedure pre-reduced H0 is limited by 5*4+1 and
+	@ 5*H4 - by 5*5 52-bit addends, or 57 bits. But when hashing the
+	@ input H0 is limited by (5*4+1)*3 addends, or 58 bits, while
+	@ 5*H4 by 5*5*3, or 59[!] bits. How is this relevant? vmlal.u32
+	@ instruction accepts 2x32-bit input and writes 2x64-bit result.
+	@ This means that result of reduction have to be compressed upon
+	@ loop wrap-around. This can be done in the process of reduction
+	@ to minimize amount of instructions [as well as amount of
+	@ 128-bit instructions, which benefits low-end processors], but
+	@ one has to watch for H2 (which is narrower than H0) and 5*H4
+	@ not being wider than 58 bits, so that result of right shift
+	@ by 26 bits fits in 32 bits. This is also useful on x86,
+	@ because it allows to use paddd in place for paddq, which
+	@ benefits Atom, where paddq is ridiculously slow.
+
+	vshr.u64	q15,q8,#26
+	vmovn.i64	d16,q8
+	 vshr.u64	q4,q5,#26
+	 vmovn.i64	d10,q5
+	vadd.i64	q9,q9,q15		@ h3 -> h4
+	vbic.i32	d16,#0xfc000000	@ &=0x03ffffff
+	 vadd.i64	q6,q6,q4		@ h0 -> h1
+	 vbic.i32	d10,#0xfc000000
+
+	vshrn.u64	d30,q9,#26
+	vmovn.i64	d18,q9
+	 vshr.u64	q4,q6,#26
+	 vmovn.i64	d12,q6
+	 vadd.i64	q7,q7,q4		@ h1 -> h2
+	vbic.i32	d18,#0xfc000000
+	 vbic.i32	d12,#0xfc000000
+
+	vadd.i32	d10,d10,d30
+	vshl.u32	d30,d30,#2
+	 vshrn.u64	d8,q7,#26
+	 vmovn.i64	d14,q7
+	vadd.i32	d10,d10,d30	@ h4 -> h0
+	 vadd.i32	d16,d16,d8	@ h2 -> h3
+	 vbic.i32	d14,#0xfc000000
+
+	vshr.u32	d30,d10,#26
+	vbic.i32	d10,#0xfc000000
+	 vshr.u32	d8,d16,#26
+	 vbic.i32	d16,#0xfc000000
+	vadd.i32	d12,d12,d30	@ h0 -> h1
+	 vadd.i32	d18,d18,d8	@ h3 -> h4
+
+	subs		r5,r5,#1
+	beq		.Lsquare_break_neon
+
+	add		r6,r0,#(48+0*9*4)
+	add		r7,r0,#(48+1*9*4)
+
+	vtrn.32		d0,d10		@ r^2:r^1
+	vtrn.32		d3,d14
+	vtrn.32		d5,d16
+	vtrn.32		d1,d12
+	vtrn.32		d7,d18
+
+	vshl.u32	d4,d3,#2		@ *5
+	vshl.u32	d6,d5,#2
+	vshl.u32	d2,d1,#2
+	vshl.u32	d8,d7,#2
+	vadd.i32	d4,d4,d3
+	vadd.i32	d2,d2,d1
+	vadd.i32	d6,d6,d5
+	vadd.i32	d8,d8,d7
+
+	vst4.32		{d0[0],d1[0],d2[0],d3[0]},[r6]!
+	vst4.32		{d0[1],d1[1],d2[1],d3[1]},[r7]!
+	vst4.32		{d4[0],d5[0],d6[0],d7[0]},[r6]!
+	vst4.32		{d4[1],d5[1],d6[1],d7[1]},[r7]!
+	vst1.32		{d8[0]},[r6,:32]
+	vst1.32		{d8[1]},[r7,:32]
+
+	b		.Lsquare_neon
+
+.align	4
+.Lsquare_break_neon:
+	add		r6,r0,#(48+2*4*9)
+	add		r7,r0,#(48+3*4*9)
+
+	vmov		d0,d10		@ r^4:r^3
+	vshl.u32	d2,d12,#2		@ *5
+	vmov		d1,d12
+	vshl.u32	d4,d14,#2
+	vmov		d3,d14
+	vshl.u32	d6,d16,#2
+	vmov		d5,d16
+	vshl.u32	d8,d18,#2
+	vmov		d7,d18
+	vadd.i32	d2,d2,d12
+	vadd.i32	d4,d4,d14
+	vadd.i32	d6,d6,d16
+	vadd.i32	d8,d8,d18
+
+	vst4.32		{d0[0],d1[0],d2[0],d3[0]},[r6]!
+	vst4.32		{d0[1],d1[1],d2[1],d3[1]},[r7]!
+	vst4.32		{d4[0],d5[0],d6[0],d7[0]},[r6]!
+	vst4.32		{d4[1],d5[1],d6[1],d7[1]},[r7]!
+	vst1.32		{d8[0]},[r6]
+	vst1.32		{d8[1]},[r7]
+
+.Lno_init_neon:
+	bx	lr				@ bx	lr
+.size	poly1305_init_neon,.-poly1305_init_neon
+
+.type	poly1305_blocks_neon,%function
+.align	5
+poly1305_blocks_neon:
+.Lpoly1305_blocks_neon:
+	ldr	ip,[r0,#36]		@ is_base2_26
+
+	cmp	r2,#64
+	blo	.Lpoly1305_blocks
+
+	stmdb	sp!,{r4-r7}
+	vstmdb	sp!,{d8-d15}		@ ABI specification says so
+
+	tst	ip,ip			@ is_base2_26?
+	bne	.Lbase2_26_neon
+
+	stmdb	sp!,{r1-r3,lr}
+	bl	.Lpoly1305_init_neon
+
+	ldr	r4,[r0,#0]		@ load hash value base 2^32
+	ldr	r5,[r0,#4]
+	ldr	r6,[r0,#8]
+	ldr	r7,[r0,#12]
+	ldr	ip,[r0,#16]
+
+	and	r2,r4,#0x03ffffff	@ base 2^32 -> base 2^26
+	mov	r3,r4,lsr#26
+	 veor	d10,d10,d10
+	mov	r4,r5,lsr#20
+	orr	r3,r3,r5,lsl#6
+	 veor	d12,d12,d12
+	mov	r5,r6,lsr#14
+	orr	r4,r4,r6,lsl#12
+	 veor	d14,d14,d14
+	mov	r6,r7,lsr#8
+	orr	r5,r5,r7,lsl#18
+	 veor	d16,d16,d16
+	and	r3,r3,#0x03ffffff
+	orr	r6,r6,ip,lsl#24
+	 veor	d18,d18,d18
+	and	r4,r4,#0x03ffffff
+	mov	r1,#1
+	and	r5,r5,#0x03ffffff
+	str	r1,[r0,#36]		@ set is_base2_26
+
+	vmov.32	d10[0],r2
+	vmov.32	d12[0],r3
+	vmov.32	d14[0],r4
+	vmov.32	d16[0],r5
+	vmov.32	d18[0],r6
+	adr	r5,.Lzeros
+
+	ldmia	sp!,{r1-r3,lr}
+	b	.Lhash_loaded
+
+.align	4
+.Lbase2_26_neon:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ load hash value
+
+	veor		d10,d10,d10
+	veor		d12,d12,d12
+	veor		d14,d14,d14
+	veor		d16,d16,d16
+	veor		d18,d18,d18
+	vld4.32		{d10[0],d12[0],d14[0],d16[0]},[r0]!
+	adr		r5,.Lzeros
+	vld1.32		{d18[0]},[r0]
+	sub		r0,r0,#16		@ rewind
+
+.Lhash_loaded:
+	add		r4,r1,#32
+	mov		r3,r3,lsl#24
+	tst		r2,#31
+	beq		.Leven
+
+	vld4.32		{d20[0],d22[0],d24[0],d26[0]},[r1]!
+	vmov.32		d28[0],r3
+	sub		r2,r2,#16
+	add		r4,r1,#32
+
+# ifdef	__ARMEB__
+	vrev32.8	q10,q10
+	vrev32.8	q13,q13
+	vrev32.8	q11,q11
+	vrev32.8	q12,q12
+# endif
+	vsri.u32	d28,d26,#8	@ base 2^32 -> base 2^26
+	vshl.u32	d26,d26,#18
+
+	vsri.u32	d26,d24,#14
+	vshl.u32	d24,d24,#12
+	vadd.i32	d29,d28,d18	@ add hash value and move to #hi
+
+	vbic.i32	d26,#0xfc000000
+	vsri.u32	d24,d22,#20
+	vshl.u32	d22,d22,#6
+
+	vbic.i32	d24,#0xfc000000
+	vsri.u32	d22,d20,#26
+	vadd.i32	d27,d26,d16
+
+	vbic.i32	d20,#0xfc000000
+	vbic.i32	d22,#0xfc000000
+	vadd.i32	d25,d24,d14
+
+	vadd.i32	d21,d20,d10
+	vadd.i32	d23,d22,d12
+
+	mov		r7,r5
+	add		r6,r0,#48
+
+	cmp		r2,r2
+	b		.Long_tail
+
+.align	4
+.Leven:
+	subs		r2,r2,#64
+	it		lo
+	movlo		r4,r5
+
+	vmov.i32	q14,#1<<24		@ padbit, yes, always
+	vld4.32		{d20,d22,d24,d26},[r1]	@ inp[0:1]
+	add		r1,r1,#64
+	vld4.32		{d21,d23,d25,d27},[r4]	@ inp[2:3] (or 0)
+	add		r4,r4,#64
+	itt		hi
+	addhi		r7,r0,#(48+1*9*4)
+	addhi		r6,r0,#(48+3*9*4)
+
+# ifdef	__ARMEB__
+	vrev32.8	q10,q10
+	vrev32.8	q13,q13
+	vrev32.8	q11,q11
+	vrev32.8	q12,q12
+# endif
+	vsri.u32	q14,q13,#8		@ base 2^32 -> base 2^26
+	vshl.u32	q13,q13,#18
+
+	vsri.u32	q13,q12,#14
+	vshl.u32	q12,q12,#12
+
+	vbic.i32	q13,#0xfc000000
+	vsri.u32	q12,q11,#20
+	vshl.u32	q11,q11,#6
+
+	vbic.i32	q12,#0xfc000000
+	vsri.u32	q11,q10,#26
+
+	vbic.i32	q10,#0xfc000000
+	vbic.i32	q11,#0xfc000000
+
+	bls		.Lskip_loop
+
+	vld4.32		{d0[1],d1[1],d2[1],d3[1]},[r7]!	@ load r^2
+	vld4.32		{d0[0],d1[0],d2[0],d3[0]},[r6]!	@ load r^4
+	vld4.32		{d4[1],d5[1],d6[1],d7[1]},[r7]!
+	vld4.32		{d4[0],d5[0],d6[0],d7[0]},[r6]!
+	b		.Loop_neon
+
+.align	5
+.Loop_neon:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2
+	@ ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^3+inp[7]*r
+	@   ___________________/
+	@ ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2+inp[8])*r^2
+	@ ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^4+inp[7]*r^2+inp[9])*r
+	@   ___________________/ ____________________/
+	@
+	@ Note that we start with inp[2:3]*r^2. This is because it
+	@ doesn't depend on reduction in previous iteration.
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ d4 = h4*r0 + h3*r1   + h2*r2   + h1*r3   + h0*r4
+	@ d3 = h3*r0 + h2*r1   + h1*r2   + h0*r3   + h4*5*r4
+	@ d2 = h2*r0 + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	@ d1 = h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3 + h2*5*r4
+	@ d0 = h0*r0 + h4*5*r1 + h3*5*r2 + h2*5*r3 + h1*5*r4
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ inp[2:3]*r^2
+
+	vadd.i32	d24,d24,d14	@ accumulate inp[0:1]
+	vmull.u32	q7,d25,d0[1]
+	vadd.i32	d20,d20,d10
+	vmull.u32	q5,d21,d0[1]
+	vadd.i32	d26,d26,d16
+	vmull.u32	q8,d27,d0[1]
+	vmlal.u32	q7,d23,d1[1]
+	vadd.i32	d22,d22,d12
+	vmull.u32	q6,d23,d0[1]
+
+	vadd.i32	d28,d28,d18
+	vmull.u32	q9,d29,d0[1]
+	subs		r2,r2,#64
+	vmlal.u32	q5,d29,d2[1]
+	it		lo
+	movlo		r4,r5
+	vmlal.u32	q8,d25,d1[1]
+	vld1.32		d8[1],[r7,:32]
+	vmlal.u32	q6,d21,d1[1]
+	vmlal.u32	q9,d27,d1[1]
+
+	vmlal.u32	q5,d27,d4[1]
+	vmlal.u32	q8,d23,d3[1]
+	vmlal.u32	q9,d25,d3[1]
+	vmlal.u32	q6,d29,d4[1]
+	vmlal.u32	q7,d21,d3[1]
+
+	vmlal.u32	q8,d21,d5[1]
+	vmlal.u32	q5,d25,d6[1]
+	vmlal.u32	q9,d23,d5[1]
+	vmlal.u32	q6,d27,d6[1]
+	vmlal.u32	q7,d29,d6[1]
+
+	vmlal.u32	q8,d29,d8[1]
+	vmlal.u32	q5,d23,d8[1]
+	vmlal.u32	q9,d21,d7[1]
+	vmlal.u32	q6,d25,d8[1]
+	vmlal.u32	q7,d27,d8[1]
+
+	vld4.32		{d21,d23,d25,d27},[r4]	@ inp[2:3] (or 0)
+	add		r4,r4,#64
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ (hash+inp[0:1])*r^4 and accumulate
+
+	vmlal.u32	q8,d26,d0[0]
+	vmlal.u32	q5,d20,d0[0]
+	vmlal.u32	q9,d28,d0[0]
+	vmlal.u32	q6,d22,d0[0]
+	vmlal.u32	q7,d24,d0[0]
+	vld1.32		d8[0],[r6,:32]
+
+	vmlal.u32	q8,d24,d1[0]
+	vmlal.u32	q5,d28,d2[0]
+	vmlal.u32	q9,d26,d1[0]
+	vmlal.u32	q6,d20,d1[0]
+	vmlal.u32	q7,d22,d1[0]
+
+	vmlal.u32	q8,d22,d3[0]
+	vmlal.u32	q5,d26,d4[0]
+	vmlal.u32	q9,d24,d3[0]
+	vmlal.u32	q6,d28,d4[0]
+	vmlal.u32	q7,d20,d3[0]
+
+	vmlal.u32	q8,d20,d5[0]
+	vmlal.u32	q5,d24,d6[0]
+	vmlal.u32	q9,d22,d5[0]
+	vmlal.u32	q6,d26,d6[0]
+	vmlal.u32	q8,d28,d8[0]
+
+	vmlal.u32	q7,d28,d6[0]
+	vmlal.u32	q5,d22,d8[0]
+	vmlal.u32	q9,d20,d7[0]
+	vmov.i32	q14,#1<<24		@ padbit, yes, always
+	vmlal.u32	q6,d24,d8[0]
+	vmlal.u32	q7,d26,d8[0]
+
+	vld4.32		{d20,d22,d24,d26},[r1]	@ inp[0:1]
+	add		r1,r1,#64
+# ifdef	__ARMEB__
+	vrev32.8	q10,q10
+	vrev32.8	q11,q11
+	vrev32.8	q12,q12
+	vrev32.8	q13,q13
+# endif
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ lazy reduction interleaved with base 2^32 -> base 2^26 of
+	@ inp[0:3] previously loaded to q10-q13 and smashed to q10-q14.
+
+	vshr.u64	q15,q8,#26
+	vmovn.i64	d16,q8
+	 vshr.u64	q4,q5,#26
+	 vmovn.i64	d10,q5
+	vadd.i64	q9,q9,q15		@ h3 -> h4
+	vbic.i32	d16,#0xfc000000
+	  vsri.u32	q14,q13,#8		@ base 2^32 -> base 2^26
+	 vadd.i64	q6,q6,q4		@ h0 -> h1
+	  vshl.u32	q13,q13,#18
+	 vbic.i32	d10,#0xfc000000
+
+	vshrn.u64	d30,q9,#26
+	vmovn.i64	d18,q9
+	 vshr.u64	q4,q6,#26
+	 vmovn.i64	d12,q6
+	 vadd.i64	q7,q7,q4		@ h1 -> h2
+	  vsri.u32	q13,q12,#14
+	vbic.i32	d18,#0xfc000000
+	  vshl.u32	q12,q12,#12
+	 vbic.i32	d12,#0xfc000000
+
+	vadd.i32	d10,d10,d30
+	vshl.u32	d30,d30,#2
+	  vbic.i32	q13,#0xfc000000
+	 vshrn.u64	d8,q7,#26
+	 vmovn.i64	d14,q7
+	vaddl.u32	q5,d10,d30	@ h4 -> h0 [widen for a sec]
+	  vsri.u32	q12,q11,#20
+	 vadd.i32	d16,d16,d8	@ h2 -> h3
+	  vshl.u32	q11,q11,#6
+	 vbic.i32	d14,#0xfc000000
+	  vbic.i32	q12,#0xfc000000
+
+	vshrn.u64	d30,q5,#26		@ re-narrow
+	vmovn.i64	d10,q5
+	  vsri.u32	q11,q10,#26
+	  vbic.i32	q10,#0xfc000000
+	 vshr.u32	d8,d16,#26
+	 vbic.i32	d16,#0xfc000000
+	vbic.i32	d10,#0xfc000000
+	vadd.i32	d12,d12,d30	@ h0 -> h1
+	 vadd.i32	d18,d18,d8	@ h3 -> h4
+	  vbic.i32	q11,#0xfc000000
+
+	bhi		.Loop_neon
+
+.Lskip_loop:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ multiply (inp[0:1]+hash) or inp[2:3] by r^2:r^1
+
+	add		r7,r0,#(48+0*9*4)
+	add		r6,r0,#(48+1*9*4)
+	adds		r2,r2,#32
+	it		ne
+	movne		r2,#0
+	bne		.Long_tail
+
+	vadd.i32	d25,d24,d14	@ add hash value and move to #hi
+	vadd.i32	d21,d20,d10
+	vadd.i32	d27,d26,d16
+	vadd.i32	d23,d22,d12
+	vadd.i32	d29,d28,d18
+
+.Long_tail:
+	vld4.32		{d0[1],d1[1],d2[1],d3[1]},[r7]!	@ load r^1
+	vld4.32		{d0[0],d1[0],d2[0],d3[0]},[r6]!	@ load r^2
+
+	vadd.i32	d24,d24,d14	@ can be redundant
+	vmull.u32	q7,d25,d0
+	vadd.i32	d20,d20,d10
+	vmull.u32	q5,d21,d0
+	vadd.i32	d26,d26,d16
+	vmull.u32	q8,d27,d0
+	vadd.i32	d22,d22,d12
+	vmull.u32	q6,d23,d0
+	vadd.i32	d28,d28,d18
+	vmull.u32	q9,d29,d0
+
+	vmlal.u32	q5,d29,d2
+	vld4.32		{d4[1],d5[1],d6[1],d7[1]},[r7]!
+	vmlal.u32	q8,d25,d1
+	vld4.32		{d4[0],d5[0],d6[0],d7[0]},[r6]!
+	vmlal.u32	q6,d21,d1
+	vmlal.u32	q9,d27,d1
+	vmlal.u32	q7,d23,d1
+
+	vmlal.u32	q8,d23,d3
+	vld1.32		d8[1],[r7,:32]
+	vmlal.u32	q5,d27,d4
+	vld1.32		d8[0],[r6,:32]
+	vmlal.u32	q9,d25,d3
+	vmlal.u32	q6,d29,d4
+	vmlal.u32	q7,d21,d3
+
+	vmlal.u32	q8,d21,d5
+	 it		ne
+	 addne		r7,r0,#(48+2*9*4)
+	vmlal.u32	q5,d25,d6
+	 it		ne
+	 addne		r6,r0,#(48+3*9*4)
+	vmlal.u32	q9,d23,d5
+	vmlal.u32	q6,d27,d6
+	vmlal.u32	q7,d29,d6
+
+	vmlal.u32	q8,d29,d8
+	 vorn		q0,q0,q0	@ all-ones, can be redundant
+	vmlal.u32	q5,d23,d8
+	 vshr.u64	q0,q0,#38
+	vmlal.u32	q9,d21,d7
+	vmlal.u32	q6,d25,d8
+	vmlal.u32	q7,d27,d8
+
+	beq		.Lshort_tail
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ (hash+inp[0:1])*r^4:r^3 and accumulate
+
+	vld4.32		{d0[1],d1[1],d2[1],d3[1]},[r7]!	@ load r^3
+	vld4.32		{d0[0],d1[0],d2[0],d3[0]},[r6]!	@ load r^4
+
+	vmlal.u32	q7,d24,d0
+	vmlal.u32	q5,d20,d0
+	vmlal.u32	q8,d26,d0
+	vmlal.u32	q6,d22,d0
+	vmlal.u32	q9,d28,d0
+
+	vmlal.u32	q5,d28,d2
+	vld4.32		{d4[1],d5[1],d6[1],d7[1]},[r7]!
+	vmlal.u32	q8,d24,d1
+	vld4.32		{d4[0],d5[0],d6[0],d7[0]},[r6]!
+	vmlal.u32	q6,d20,d1
+	vmlal.u32	q9,d26,d1
+	vmlal.u32	q7,d22,d1
+
+	vmlal.u32	q8,d22,d3
+	vld1.32		d8[1],[r7,:32]
+	vmlal.u32	q5,d26,d4
+	vld1.32		d8[0],[r6,:32]
+	vmlal.u32	q9,d24,d3
+	vmlal.u32	q6,d28,d4
+	vmlal.u32	q7,d20,d3
+
+	vmlal.u32	q8,d20,d5
+	vmlal.u32	q5,d24,d6
+	vmlal.u32	q9,d22,d5
+	vmlal.u32	q6,d26,d6
+	vmlal.u32	q7,d28,d6
+
+	vmlal.u32	q8,d28,d8
+	 vorn		q0,q0,q0	@ all-ones
+	vmlal.u32	q5,d22,d8
+	 vshr.u64	q0,q0,#38
+	vmlal.u32	q9,d20,d7
+	vmlal.u32	q6,d24,d8
+	vmlal.u32	q7,d26,d8
+
+.Lshort_tail:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ horizontal addition
+
+	vadd.i64	d16,d16,d17
+	vadd.i64	d10,d10,d11
+	vadd.i64	d18,d18,d19
+	vadd.i64	d12,d12,d13
+	vadd.i64	d14,d14,d15
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ lazy reduction, but without narrowing
+
+	vshr.u64	q15,q8,#26
+	vand.i64	q8,q8,q0
+	 vshr.u64	q4,q5,#26
+	 vand.i64	q5,q5,q0
+	vadd.i64	q9,q9,q15		@ h3 -> h4
+	 vadd.i64	q6,q6,q4		@ h0 -> h1
+
+	vshr.u64	q15,q9,#26
+	vand.i64	q9,q9,q0
+	 vshr.u64	q4,q6,#26
+	 vand.i64	q6,q6,q0
+	 vadd.i64	q7,q7,q4		@ h1 -> h2
+
+	vadd.i64	q5,q5,q15
+	vshl.u64	q15,q15,#2
+	 vshr.u64	q4,q7,#26
+	 vand.i64	q7,q7,q0
+	vadd.i64	q5,q5,q15		@ h4 -> h0
+	 vadd.i64	q8,q8,q4		@ h2 -> h3
+
+	vshr.u64	q15,q5,#26
+	vand.i64	q5,q5,q0
+	 vshr.u64	q4,q8,#26
+	 vand.i64	q8,q8,q0
+	vadd.i64	q6,q6,q15		@ h0 -> h1
+	 vadd.i64	q9,q9,q4		@ h3 -> h4
+
+	cmp		r2,#0
+	bne		.Leven
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ store hash value
+
+	vst4.32		{d10[0],d12[0],d14[0],d16[0]},[r0]!
+	vst1.32		{d18[0]},[r0]
+
+	vldmia	sp!,{d8-d15}			@ epilogue
+	ldmia	sp!,{r4-r7}
+	bx	lr					@ bx	lr
+.size	poly1305_blocks_neon,.-poly1305_blocks_neon
+
+.align	5
+.Lzeros:
+.long	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+#ifndef	__KERNEL__
+.LOPENSSL_armcap:
+# ifdef	_WIN32
+.word	OPENSSL_armcap_P
+# else
+.word	OPENSSL_armcap_P-.Lpoly1305_init
+# endif
+.comm	OPENSSL_armcap_P,4,4
+.hidden	OPENSSL_armcap_P
+#endif
+#endif
+.asciz	"Poly1305 for ARMv4/NEON, CRYPTOGAMS by @dot-asm"
+.align	2
diff --git a/arch/arm/crypto/poly1305-glue.c b/arch/arm/crypto/poly1305-glue.c
new file mode 100644
index 0000000..3023c1a
--- /dev/null
+++ b/arch/arm/crypto/poly1305-glue.c
@@ -0,0 +1,273 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * OpenSSL/Cryptogams accelerated Poly1305 transform for ARM
+ *
+ * Copyright (C) 2019 Linaro Ltd. <ard.biesheuvel@linaro.org>
+ */
+
+#include <asm/hwcap.h>
+#include <asm/neon.h>
+#include <asm/simd.h>
+#include <asm/unaligned.h>
+#include <crypto/algapi.h>
+#include <crypto/internal/hash.h>
+#include <crypto/internal/poly1305.h>
+#include <crypto/internal/simd.h>
+#include <linux/cpufeature.h>
+#include <linux/crypto.h>
+#include <linux/jump_label.h>
+#include <linux/module.h>
+
+void poly1305_init_arm(void *state, const u8 *key);
+void poly1305_blocks_arm(void *state, const u8 *src, u32 len, u32 hibit);
+void poly1305_blocks_neon(void *state, const u8 *src, u32 len, u32 hibit);
+void poly1305_emit_arm(void *state, u8 *digest, const u32 *nonce);
+
+void __weak poly1305_blocks_neon(void *state, const u8 *src, u32 len, u32 hibit)
+{
+}
+
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(have_neon);
+
+void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 *key)
+{
+	poly1305_init_arm(&dctx->h, key);
+	dctx->s[0] = get_unaligned_le32(key + 16);
+	dctx->s[1] = get_unaligned_le32(key + 20);
+	dctx->s[2] = get_unaligned_le32(key + 24);
+	dctx->s[3] = get_unaligned_le32(key + 28);
+	dctx->buflen = 0;
+}
+EXPORT_SYMBOL(poly1305_init_arch);
+
+static int arm_poly1305_init(struct shash_desc *desc)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	dctx->buflen = 0;
+	dctx->rset = 0;
+	dctx->sset = false;
+
+	return 0;
+}
+
+static void arm_poly1305_blocks(struct poly1305_desc_ctx *dctx, const u8 *src,
+				 u32 len, u32 hibit, bool do_neon)
+{
+	if (unlikely(!dctx->sset)) {
+		if (!dctx->rset) {
+			poly1305_init_arm(&dctx->h, src);
+			src += POLY1305_BLOCK_SIZE;
+			len -= POLY1305_BLOCK_SIZE;
+			dctx->rset = 1;
+		}
+		if (len >= POLY1305_BLOCK_SIZE) {
+			dctx->s[0] = get_unaligned_le32(src +  0);
+			dctx->s[1] = get_unaligned_le32(src +  4);
+			dctx->s[2] = get_unaligned_le32(src +  8);
+			dctx->s[3] = get_unaligned_le32(src + 12);
+			src += POLY1305_BLOCK_SIZE;
+			len -= POLY1305_BLOCK_SIZE;
+			dctx->sset = true;
+		}
+		if (len < POLY1305_BLOCK_SIZE)
+			return;
+	}
+
+	len &= ~(POLY1305_BLOCK_SIZE - 1);
+
+	if (static_branch_likely(&have_neon) && likely(do_neon))
+		poly1305_blocks_neon(&dctx->h, src, len, hibit);
+	else
+		poly1305_blocks_arm(&dctx->h, src, len, hibit);
+}
+
+static void arm_poly1305_do_update(struct poly1305_desc_ctx *dctx,
+				    const u8 *src, u32 len, bool do_neon)
+{
+	if (unlikely(dctx->buflen)) {
+		u32 bytes = min(len, POLY1305_BLOCK_SIZE - dctx->buflen);
+
+		memcpy(dctx->buf + dctx->buflen, src, bytes);
+		src += bytes;
+		len -= bytes;
+		dctx->buflen += bytes;
+
+		if (dctx->buflen == POLY1305_BLOCK_SIZE) {
+			arm_poly1305_blocks(dctx, dctx->buf,
+					    POLY1305_BLOCK_SIZE, 1, false);
+			dctx->buflen = 0;
+		}
+	}
+
+	if (likely(len >= POLY1305_BLOCK_SIZE)) {
+		arm_poly1305_blocks(dctx, src, len, 1, do_neon);
+		src += round_down(len, POLY1305_BLOCK_SIZE);
+		len %= POLY1305_BLOCK_SIZE;
+	}
+
+	if (unlikely(len)) {
+		dctx->buflen = len;
+		memcpy(dctx->buf, src, len);
+	}
+}
+
+static int arm_poly1305_update(struct shash_desc *desc,
+			       const u8 *src, unsigned int srclen)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	arm_poly1305_do_update(dctx, src, srclen, false);
+	return 0;
+}
+
+static int __maybe_unused arm_poly1305_update_neon(struct shash_desc *desc,
+						   const u8 *src,
+						   unsigned int srclen)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+	bool do_neon = crypto_simd_usable() && srclen > 128;
+
+	if (static_branch_likely(&have_neon) && do_neon)
+		kernel_neon_begin();
+	arm_poly1305_do_update(dctx, src, srclen, do_neon);
+	if (static_branch_likely(&have_neon) && do_neon)
+		kernel_neon_end();
+	return 0;
+}
+
+void poly1305_update_arch(struct poly1305_desc_ctx *dctx, const u8 *src,
+			  unsigned int nbytes)
+{
+	bool do_neon = IS_ENABLED(CONFIG_KERNEL_MODE_NEON) &&
+		       crypto_simd_usable();
+
+	if (unlikely(dctx->buflen)) {
+		u32 bytes = min(nbytes, POLY1305_BLOCK_SIZE - dctx->buflen);
+
+		memcpy(dctx->buf + dctx->buflen, src, bytes);
+		src += bytes;
+		nbytes -= bytes;
+		dctx->buflen += bytes;
+
+		if (dctx->buflen == POLY1305_BLOCK_SIZE) {
+			poly1305_blocks_arm(&dctx->h, dctx->buf,
+					    POLY1305_BLOCK_SIZE, 1);
+			dctx->buflen = 0;
+		}
+	}
+
+	if (likely(nbytes >= POLY1305_BLOCK_SIZE)) {
+		unsigned int len = round_down(nbytes, POLY1305_BLOCK_SIZE);
+
+		if (static_branch_likely(&have_neon) && do_neon) {
+			do {
+				unsigned int todo = min_t(unsigned int, len, SZ_4K);
+
+				kernel_neon_begin();
+				poly1305_blocks_neon(&dctx->h, src, todo, 1);
+				kernel_neon_end();
+
+				len -= todo;
+				src += todo;
+			} while (len);
+		} else {
+			poly1305_blocks_arm(&dctx->h, src, len, 1);
+			src += len;
+		}
+		nbytes %= POLY1305_BLOCK_SIZE;
+	}
+
+	if (unlikely(nbytes)) {
+		dctx->buflen = nbytes;
+		memcpy(dctx->buf, src, nbytes);
+	}
+}
+EXPORT_SYMBOL(poly1305_update_arch);
+
+void poly1305_final_arch(struct poly1305_desc_ctx *dctx, u8 *dst)
+{
+	if (unlikely(dctx->buflen)) {
+		dctx->buf[dctx->buflen++] = 1;
+		memset(dctx->buf + dctx->buflen, 0,
+		       POLY1305_BLOCK_SIZE - dctx->buflen);
+		poly1305_blocks_arm(&dctx->h, dctx->buf, POLY1305_BLOCK_SIZE, 0);
+	}
+
+	poly1305_emit_arm(&dctx->h, dst, dctx->s);
+	*dctx = (struct poly1305_desc_ctx){};
+}
+EXPORT_SYMBOL(poly1305_final_arch);
+
+static int arm_poly1305_final(struct shash_desc *desc, u8 *dst)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	if (unlikely(!dctx->sset))
+		return -ENOKEY;
+
+	poly1305_final_arch(dctx, dst);
+	return 0;
+}
+
+static struct shash_alg arm_poly1305_algs[] = {{
+	.init			= arm_poly1305_init,
+	.update			= arm_poly1305_update,
+	.final			= arm_poly1305_final,
+	.digestsize		= POLY1305_DIGEST_SIZE,
+	.descsize		= sizeof(struct poly1305_desc_ctx),
+
+	.base.cra_name		= "poly1305",
+	.base.cra_driver_name	= "poly1305-arm",
+	.base.cra_priority	= 150,
+	.base.cra_blocksize	= POLY1305_BLOCK_SIZE,
+	.base.cra_module	= THIS_MODULE,
+#ifdef CONFIG_KERNEL_MODE_NEON
+}, {
+	.init			= arm_poly1305_init,
+	.update			= arm_poly1305_update_neon,
+	.final			= arm_poly1305_final,
+	.digestsize		= POLY1305_DIGEST_SIZE,
+	.descsize		= sizeof(struct poly1305_desc_ctx),
+
+	.base.cra_name		= "poly1305",
+	.base.cra_driver_name	= "poly1305-neon",
+	.base.cra_priority	= 200,
+	.base.cra_blocksize	= POLY1305_BLOCK_SIZE,
+	.base.cra_module	= THIS_MODULE,
+#endif
+}};
+
+static int __init arm_poly1305_mod_init(void)
+{
+	if (IS_ENABLED(CONFIG_KERNEL_MODE_NEON) &&
+	    (elf_hwcap & HWCAP_NEON))
+		static_branch_enable(&have_neon);
+	else if (IS_REACHABLE(CONFIG_CRYPTO_HASH))
+		/* register only the first entry */
+		return crypto_register_shash(&arm_poly1305_algs[0]);
+
+	return IS_REACHABLE(CONFIG_CRYPTO_HASH) ?
+		crypto_register_shashes(arm_poly1305_algs,
+					ARRAY_SIZE(arm_poly1305_algs)) : 0;
+}
+
+static void __exit arm_poly1305_mod_exit(void)
+{
+	if (!IS_REACHABLE(CONFIG_CRYPTO_HASH))
+		return;
+	if (!static_branch_likely(&have_neon)) {
+		crypto_unregister_shash(&arm_poly1305_algs[0]);
+		return;
+	}
+	crypto_unregister_shashes(arm_poly1305_algs,
+				  ARRAY_SIZE(arm_poly1305_algs));
+}
+
+module_init(arm_poly1305_mod_init);
+module_exit(arm_poly1305_mod_exit);
+
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS_CRYPTO("poly1305");
+MODULE_ALIAS_CRYPTO("poly1305-arm");
+MODULE_ALIAS_CRYPTO("poly1305-neon");
diff --git a/arch/arm/include/asm/Kbuild b/arch/arm/include/asm/Kbuild
index 68ca86f..580ed13 100644
--- a/arch/arm/include/asm/Kbuild
+++ b/arch/arm/include/asm/Kbuild
@@ -15,7 +15,6 @@
 generic-y += msi.h
 generic-y += parport.h
 generic-y += preempt.h
-generic-y += seccomp.h
 generic-y += serial.h
 generic-y += trace_clock.h
 
diff --git a/arch/arm/include/asm/clocksource.h b/arch/arm/include/asm/clocksource.h
index afb7a59..6e8e254 100644
--- a/arch/arm/include/asm/clocksource.h
+++ b/arch/arm/include/asm/clocksource.h
@@ -1,17 +1,12 @@
+/* SPDX-License-Identifier: GPL-2.0 */
 #ifndef _ASM_CLOCKSOURCE_H
 #define _ASM_CLOCKSOURCE_H
 
-enum vdso_arch_clockmode {
-	/* vdso clocksource not usable */
-	VDSO_CLOCKMODE_NONE,
-	/* vdso clocksource usable */
-	VDSO_CLOCKMODE_ARCHTIMER,
-	VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT = VDSO_CLOCKMODE_ARCHTIMER,
-};
+#include <vdso/clocksource.h>
 
 struct arch_clocksource_data {
 	/* Usable for direct VDSO access? */
-	enum vdso_arch_clockmode clock_mode;
+	enum vdso_clock_mode clock_mode;
 };
 
-#endif
+#endif /* _ASM_CLOCKSOURCE_H */
diff --git a/arch/arm/include/asm/cp15.h b/arch/arm/include/asm/cp15.h
index d2453e2d..a54230e 100644
--- a/arch/arm/include/asm/cp15.h
+++ b/arch/arm/include/asm/cp15.h
@@ -50,25 +50,7 @@
 
 #ifdef CONFIG_CPU_CP15
 
-#define __ACCESS_CP15(CRn, Op1, CRm, Op2)	\
-	"mrc", "mcr", __stringify(p15, Op1, %0, CRn, CRm, Op2), u32
-#define __ACCESS_CP15_64(Op1, CRm)		\
-	"mrrc", "mcrr", __stringify(p15, Op1, %Q0, %R0, CRm), u64
-
-#define __read_sysreg(r, w, c, t) ({				\
-	t __val;						\
-	asm volatile(r " " c : "=r" (__val));			\
-	__val;							\
-})
-#define read_sysreg(...)		__read_sysreg(__VA_ARGS__)
-
-#define __write_sysreg(v, r, w, c, t)	asm volatile(w " " c : : "r" ((t)(v)))
-#define write_sysreg(v, ...)		__write_sysreg(v, __VA_ARGS__)
-
-#define BPIALL				__ACCESS_CP15(c7, 0, c5, 6)
-#define ICIALLU				__ACCESS_CP15(c7, 0, c5, 0)
-
-#define CNTVCT				__ACCESS_CP15_64(1, c14)
+#include <asm/vdso/cp15.h>
 
 extern unsigned long cr_alignment;	/* defined in entry-armv.S */
 
diff --git a/arch/arm/include/asm/processor.h b/arch/arm/include/asm/processor.h
index 614bf82..b924105 100644
--- a/arch/arm/include/asm/processor.h
+++ b/arch/arm/include/asm/processor.h
@@ -14,6 +14,7 @@
 #include <asm/ptrace.h>
 #include <asm/types.h>
 #include <asm/unified.h>
+#include <asm/vdso/processor.h>
 
 #ifdef __KERNEL__
 #define STACK_TOP	((current->personality & ADDR_LIMIT_32BIT) ? \
@@ -85,16 +86,6 @@ extern void release_thread(struct task_struct *);
 
 unsigned long get_wchan(struct task_struct *p);
 
-#if __LINUX_ARM_ARCH__ == 6 || defined(CONFIG_ARM_ERRATA_754327)
-#define cpu_relax()						\
-	do {							\
-		smp_mb();					\
-		__asm__ __volatile__("nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;");	\
-	} while (0)
-#else
-#define cpu_relax()			barrier()
-#endif
-
 #define task_pt_regs(p) \
 	((struct pt_regs *)(THREAD_START_SP + task_stack_page(p)) - 1)
 
diff --git a/arch/arm/include/asm/seccomp.h b/arch/arm/include/asm/seccomp.h
new file mode 100644
index 0000000..e9ad0f3
--- /dev/null
+++ b/arch/arm/include/asm/seccomp.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef _ASM_SECCOMP_H
+#define _ASM_SECCOMP_H
+
+#include <asm-generic/seccomp.h>
+
+#define SECCOMP_ARCH_NATIVE		AUDIT_ARCH_ARM
+#define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+#define SECCOMP_ARCH_NATIVE_NAME	"arm"
+
+#endif /* _ASM_SECCOMP_H */
diff --git a/arch/arm/include/asm/system_misc.h b/arch/arm/include/asm/system_misc.h
index 66f6a3a..98b3734 100644
--- a/arch/arm/include/asm/system_misc.h
+++ b/arch/arm/include/asm/system_misc.h
@@ -13,7 +13,6 @@
 extern void cpu_init(void);
 
 void soft_restart(unsigned long);
-extern void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
 extern void (*arm_pm_idle)(void);
 
 #ifdef CONFIG_HARDEN_BRANCH_PREDICTOR
diff --git a/arch/arm/include/asm/topology.h b/arch/arm/include/asm/topology.h
index 8a0fae9..a2edacb 100644
--- a/arch/arm/include/asm/topology.h
+++ b/arch/arm/include/asm/topology.h
@@ -10,6 +10,9 @@
 /* Replace task scheduler's default frequency-invariant accounting */
 #define arch_scale_freq_capacity topology_get_freq_scale
 
+/* Replace task scheduler's default max-frequency-invariant accounting */
+#define arch_scale_max_freq_capacity topology_get_max_freq_scale
+
 /* Replace task scheduler's default cpu-invariant accounting */
 #define arch_scale_cpu_capacity topology_get_cpu_scale
 
diff --git a/arch/arm/include/asm/vdso/clocksource.h b/arch/arm/include/asm/vdso/clocksource.h
new file mode 100644
index 0000000..3a43c12
--- /dev/null
+++ b/arch/arm/include/asm/vdso/clocksource.h
@@ -0,0 +1,9 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __ASM_VDSOCLOCKSOURCE_H
+#define __ASM_VDSOCLOCKSOURCE_H
+
+#define VDSO_ARCH_CLOCKMODES					\
+	VDSO_CLOCKMODE_ARCHTIMER,				\
+	VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT = VDSO_CLOCKMODE_ARCHTIMER
+
+#endif /* __ASM_VDSOCLOCKSOURCE_H */
diff --git a/arch/arm/include/asm/vdso/cp15.h b/arch/arm/include/asm/vdso/cp15.h
new file mode 100644
index 0000000..bed16fa
--- /dev/null
+++ b/arch/arm/include/asm/vdso/cp15.h
@@ -0,0 +1,38 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2020 ARM Ltd.
+ */
+#ifndef __ASM_VDSO_CP15_H
+#define __ASM_VDSO_CP15_H
+
+#ifndef __ASSEMBLY__
+
+#ifdef CONFIG_CPU_CP15
+
+#include <linux/stringify.h>
+
+#define __ACCESS_CP15(CRn, Op1, CRm, Op2)	\
+	"mrc", "mcr", __stringify(p15, Op1, %0, CRn, CRm, Op2), u32
+#define __ACCESS_CP15_64(Op1, CRm)		\
+	"mrrc", "mcrr", __stringify(p15, Op1, %Q0, %R0, CRm), u64
+
+#define __read_sysreg(r, w, c, t) ({				\
+	t __val;						\
+	asm volatile(r " " c : "=r" (__val));			\
+	__val;							\
+})
+#define read_sysreg(...)		__read_sysreg(__VA_ARGS__)
+
+#define __write_sysreg(v, r, w, c, t)	asm volatile(w " " c : : "r" ((t)(v)))
+#define write_sysreg(v, ...)		__write_sysreg(v, __VA_ARGS__)
+
+#define BPIALL				__ACCESS_CP15(c7, 0, c5, 6)
+#define ICIALLU				__ACCESS_CP15(c7, 0, c5, 0)
+
+#define CNTVCT				__ACCESS_CP15_64(1, c14)
+
+#endif /* CONFIG_CPU_CP15 */
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __ASM_VDSO_CP15_H */
diff --git a/arch/arm/include/asm/vdso/gettimeofday.h b/arch/arm/include/asm/vdso/gettimeofday.h
new file mode 100644
index 0000000..36dc185
--- /dev/null
+++ b/arch/arm/include/asm/vdso/gettimeofday.h
@@ -0,0 +1,145 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2018 ARM Limited
+ */
+#ifndef __ASM_VDSO_GETTIMEOFDAY_H
+#define __ASM_VDSO_GETTIMEOFDAY_H
+
+#ifndef __ASSEMBLY__
+
+#include <asm/errno.h>
+#include <asm/unistd.h>
+#include <asm/vdso/cp15.h>
+#include <uapi/linux/time.h>
+
+#define VDSO_HAS_CLOCK_GETRES		1
+
+extern struct vdso_data *__get_datapage(void);
+
+static __always_inline int gettimeofday_fallback(
+				struct __kernel_old_timeval *_tv,
+				struct timezone *_tz)
+{
+	register struct timezone *tz asm("r1") = _tz;
+	register struct __kernel_old_timeval *tv asm("r0") = _tv;
+	register long ret asm ("r0");
+	register long nr asm("r7") = __NR_gettimeofday;
+
+	asm volatile(
+	"	swi #0\n"
+	: "=r" (ret)
+	: "r" (tv), "r" (tz), "r" (nr)
+	: "memory");
+
+	return ret;
+}
+
+static __always_inline long clock_gettime_fallback(
+					clockid_t _clkid,
+					struct __kernel_timespec *_ts)
+{
+	register struct __kernel_timespec *ts asm("r1") = _ts;
+	register clockid_t clkid asm("r0") = _clkid;
+	register long ret asm ("r0");
+	register long nr asm("r7") = __NR_clock_gettime64;
+
+	asm volatile(
+	"	swi #0\n"
+	: "=r" (ret)
+	: "r" (clkid), "r" (ts), "r" (nr)
+	: "memory");
+
+	return ret;
+}
+
+static __always_inline long clock_gettime32_fallback(
+					clockid_t _clkid,
+					struct old_timespec32 *_ts)
+{
+	register struct old_timespec32 *ts asm("r1") = _ts;
+	register clockid_t clkid asm("r0") = _clkid;
+	register long ret asm ("r0");
+	register long nr asm("r7") = __NR_clock_gettime;
+
+	asm volatile(
+	"	swi #0\n"
+	: "=r" (ret)
+	: "r" (clkid), "r" (ts), "r" (nr)
+	: "memory");
+
+	return ret;
+}
+
+static __always_inline int clock_getres_fallback(
+					clockid_t _clkid,
+					struct __kernel_timespec *_ts)
+{
+	register struct __kernel_timespec *ts asm("r1") = _ts;
+	register clockid_t clkid asm("r0") = _clkid;
+	register long ret asm ("r0");
+	register long nr asm("r7") = __NR_clock_getres_time64;
+
+	asm volatile(
+	"       swi #0\n"
+	: "=r" (ret)
+	: "r" (clkid), "r" (ts), "r" (nr)
+	: "memory");
+
+	return ret;
+}
+
+static __always_inline int clock_getres32_fallback(
+					clockid_t _clkid,
+					struct old_timespec32 *_ts)
+{
+	register struct old_timespec32 *ts asm("r1") = _ts;
+	register clockid_t clkid asm("r0") = _clkid;
+	register long ret asm ("r0");
+	register long nr asm("r7") = __NR_clock_getres;
+
+	asm volatile(
+	"       swi #0\n"
+	: "=r" (ret)
+	: "r" (clkid), "r" (ts), "r" (nr)
+	: "memory");
+
+	return ret;
+}
+
+static inline bool arm_vdso_hres_capable(void)
+{
+	return IS_ENABLED(CONFIG_ARM_ARCH_TIMER);
+}
+#define __arch_vdso_hres_capable arm_vdso_hres_capable
+
+static __always_inline u64 __arch_get_hw_counter(int clock_mode)
+{
+#ifdef CONFIG_ARM_ARCH_TIMER
+	u64 cycle_now;
+
+	/*
+	 * Core checks for mode already, so this raced against a concurrent
+	 * update. Return something. Core will do another round and then
+	 * see the mode change and fallback to the syscall.
+	 */
+	if (clock_mode == VDSO_CLOCKMODE_NONE)
+		return 0;
+
+	isb();
+	cycle_now = read_sysreg(CNTVCT);
+
+	return cycle_now;
+#else
+	/* Make GCC happy. This is compiled out anyway */
+	return 0;
+#endif
+}
+
+static __always_inline const struct vdso_data *__arch_get_vdso_data(void)
+{
+	return __get_datapage();
+}
+
+#endif /* !__ASSEMBLY__ */
+
+#endif /* __ASM_VDSO_GETTIMEOFDAY_H */
diff --git a/arch/arm/include/asm/vdso/processor.h b/arch/arm/include/asm/vdso/processor.h
new file mode 100644
index 0000000..45efb3f
--- /dev/null
+++ b/arch/arm/include/asm/vdso/processor.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2020 ARM Ltd.
+ */
+#ifndef __ASM_VDSO_PROCESSOR_H
+#define __ASM_VDSO_PROCESSOR_H
+
+#ifndef __ASSEMBLY__
+
+#if __LINUX_ARM_ARCH__ == 6 || defined(CONFIG_ARM_ERRATA_754327)
+#define cpu_relax()						\
+	do {							\
+		smp_mb();					\
+		__asm__ __volatile__("nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;");	\
+	} while (0)
+#else
+#define cpu_relax()			barrier()
+#endif
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __ASM_VDSO_PROCESSOR_H */
diff --git a/arch/arm/kernel/reboot.c b/arch/arm/kernel/reboot.c
index bb18ed0..1076b26 100644
--- a/arch/arm/kernel/reboot.c
+++ b/arch/arm/kernel/reboot.c
@@ -18,7 +18,6 @@ typedef void (*phys_reset_t)(unsigned long, bool);
 /*
  * Function pointers to optional machine specific functions
  */
-void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
 void (*pm_power_off)(void);
 EXPORT_SYMBOL(pm_power_off);
 
@@ -138,10 +137,7 @@ void machine_restart(char *cmd)
 	local_irq_disable();
 	smp_send_stop();
 
-	if (arm_pm_restart)
-		arm_pm_restart(reboot_mode, cmd);
-	else
-		do_kernel_restart(cmd);
+	do_kernel_restart(cmd);
 
 	/* Give a grace period for failure to restart of 1s */
 	mdelay(1000);
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index d0a464e..d403648 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -1073,6 +1073,20 @@ void __init hyp_mode_check(void)
 #endif
 }
 
+static void (*__arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
+
+static int arm_restart(struct notifier_block *nb, unsigned long action,
+		       void *data)
+{
+	__arm_pm_restart(action, data);
+	return NOTIFY_DONE;
+}
+
+static struct notifier_block arm_restart_nb = {
+	.notifier_call = arm_restart,
+	.priority = 128,
+};
+
 void __init setup_arch(char **cmdline_p)
 {
 	const struct machine_desc *mdesc;
@@ -1132,8 +1146,10 @@ void __init setup_arch(char **cmdline_p)
 	paging_init(mdesc);
 	request_standard_resources(mdesc);
 
-	if (mdesc->restart)
-		arm_pm_restart = mdesc->restart;
+	if (mdesc->restart) {
+		__arm_pm_restart = mdesc->restart;
+		register_restart_handler(&arm_restart_nb);
+	}
 
 	unflatten_device_tree();
 
diff --git a/arch/arm/mach-prima2/rstc.c b/arch/arm/mach-prima2/rstc.c
index 9d56606..825dd5f 100644
--- a/arch/arm/mach-prima2/rstc.c
+++ b/arch/arm/mach-prima2/rstc.c
@@ -64,11 +64,18 @@ static struct reset_controller_dev sirfsoc_reset_controller = {
 
 #define SIRFSOC_SYS_RST_BIT  BIT(31)
 
-static void sirfsoc_restart(enum reboot_mode mode, const char *cmd)
+static int sirfsoc_restart(struct notifier_block *nb, unsigned long action,
+			   void *data)
 {
 	writel(SIRFSOC_SYS_RST_BIT, sirfsoc_rstc_base);
+	return NOTIFY_DONE;
 }
 
+static struct notifier_block sirfsoc_restart_nb = {
+	.notifier_call  = sirfsoc_restart,
+	.priority       = 192,
+};
+
 static int sirfsoc_rstc_probe(struct platform_device *pdev)
 {
 	struct device_node *np = pdev->dev.of_node;
@@ -79,7 +86,7 @@ static int sirfsoc_rstc_probe(struct platform_device *pdev)
 	}
 
 	sirfsoc_reset_controller.of_node = np;
-	arm_pm_restart = sirfsoc_restart;
+	register_restart_handler(&sirfsoc_restart_nb);
 
 	if (IS_ENABLED(CONFIG_RESET_CONTROLLER))
 		reset_controller_register(&sirfsoc_reset_controller);
diff --git a/arch/arm/mach-tegra/cpuidle-tegra114.c b/arch/arm/mach-tegra/cpuidle-tegra114.c
index 5118f77..0ccdcc8 100644
--- a/arch/arm/mach-tegra/cpuidle-tegra114.c
+++ b/arch/arm/mach-tegra/cpuidle-tegra114.c
@@ -51,11 +51,13 @@ static int tegra114_idle_power_down(struct cpuidle_device *dev,
 	return index;
 }
 
-static void tegra114_idle_enter_s2idle(struct cpuidle_device *dev,
+static int tegra114_idle_enter_s2idle(struct cpuidle_device *dev,
 				       struct cpuidle_driver *drv,
 				       int index)
 {
        tegra114_idle_power_down(dev, drv, index);
+
+       return 0;
 }
 #endif
 
diff --git a/arch/arm/mm/dma-mapping-nommu.c b/arch/arm/mm/dma-mapping-nommu.c
index 287ef89..e862b05 100644
--- a/arch/arm/mm/dma-mapping-nommu.c
+++ b/arch/arm/mm/dma-mapping-nommu.c
@@ -209,3 +209,4 @@ void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size,
 	if (!dev->archdata.dma_coherent)
 		set_dma_ops(dev, &arm_nommu_dma_ops);
 }
+EXPORT_SYMBOL_GPL(arch_setup_dma_ops);
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index 27576c7..c31c72c 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -2320,6 +2320,7 @@ void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size,
 #endif
 	dev->archdata.dma_ops_setup = true;
 }
+EXPORT_SYMBOL_GPL(arch_setup_dma_ops);
 
 void arch_teardown_dma_ops(struct device *dev)
 {
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
index bd0f482..b598e69 100644
--- a/arch/arm/mm/fault.c
+++ b/arch/arm/mm/fault.c
@@ -241,7 +241,7 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
 	struct mm_struct *mm;
 	int sig, code;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	if (kprobe_page_fault(regs, fsr))
 		return 0;
@@ -295,7 +295,7 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
 	 * signal first. We do not need to release the mmap_sem because
 	 * it would already be released in __lock_page_or_retry in
 	 * mm/filemap.c. */
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) {
+	if (fault_signal_pending(fault, regs)) {
 		if (!user_mode(regs))
 			goto no_context;
 		return 0;
@@ -319,9 +319,6 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
 					regs, addr);
 		}
 		if (fault & VM_FAULT_RETRY) {
-			/* Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk
-			* of starvation. */
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 			goto retry;
 		}
diff --git a/arch/arm/tools/syscall.tbl b/arch/arm/tools/syscall.tbl
index 6da7dc4..41348ac 100644
--- a/arch/arm/tools/syscall.tbl
+++ b/arch/arm/tools/syscall.tbl
@@ -449,3 +449,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 435	common	clone3				sys_clone3
+440	common	process_madvise		sys_process_madvise
\ No newline at end of file
diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
index 57dfc13..2a594d3 100644
--- a/arch/arm/xen/enlighten.c
+++ b/arch/arm/xen/enlighten.c
@@ -29,6 +29,7 @@
 #include <linux/cpu.h>
 #include <linux/console.h>
 #include <linux/pvclock_gtod.h>
+#include <linux/reboot.h>
 #include <linux/time64.h>
 #include <linux/timekeeping.h>
 #include <linux/timekeeper_internal.h>
@@ -180,11 +181,18 @@ void xen_reboot(int reason)
 	BUG_ON(rc);
 }
 
-static void xen_restart(enum reboot_mode reboot_mode, const char *cmd)
+static int xen_restart(struct notifier_block *nb, unsigned long action,
+		       void *data)
 {
 	xen_reboot(SHUTDOWN_reboot);
+
+	return NOTIFY_DONE;
 }
 
+static struct notifier_block xen_restart_nb = {
+	.notifier_call = xen_restart,
+	.priority = 192,
+};
 
 static void xen_power_off(void)
 {
@@ -403,7 +411,7 @@ static int __init xen_pm_init(void)
 		return -ENODEV;
 
 	pm_power_off = xen_power_off;
-	arm_pm_restart = xen_restart;
+	register_restart_handler(&xen_restart_nb);
 	if (!xen_initial_domain()) {
 		struct timespec64 ts;
 		xen_read_wallclock(&ts);
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index a0bc9bb..c9f67e0 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -66,6 +66,9 @@
 	select ARCH_USE_QUEUED_RWLOCKS
 	select ARCH_USE_QUEUED_SPINLOCKS
 	select ARCH_SUPPORTS_MEMORY_FAILURE
+	select ARCH_SUPPORTS_SHADOW_CALL_STACK if CC_HAVE_SHADOW_CALL_STACK
+	select ARCH_SUPPORTS_LTO_CLANG
+	select ARCH_SUPPORTS_THINLTO
 	select ARCH_SUPPORTS_ATOMIC_RMW
 	select ARCH_SUPPORTS_INT128 if GCC_VERSION >= 50000 || CC_IS_CLANG
 	select ARCH_SUPPORTS_NUMA_BALANCING
@@ -112,6 +115,8 @@
 	select GENERIC_GETTIMEOFDAY
 	select HANDLE_DOMAIN_IRQ
 	select HARDIRQS_SW_RESEND
+	select HAVE_MOVE_PMD
+	select HAVE_MOVE_PUD
 	select HAVE_PCI
 	select HAVE_ACPI_APEI if (ACPI && EFI)
 	select HAVE_ALIGNED_STRUCT_PAGE if SLUB
@@ -122,10 +127,11 @@
 	select HAVE_ARCH_JUMP_LABEL_RELATIVE
 	select HAVE_ARCH_KASAN if !(ARM64_16K_PAGES && ARM64_VA_BITS_48)
 	select HAVE_ARCH_KASAN_SW_TAGS if HAVE_ARCH_KASAN
+	select HAVE_ARCH_KFENCE
 	select HAVE_ARCH_KGDB
 	select HAVE_ARCH_MMAP_RND_BITS
 	select HAVE_ARCH_MMAP_RND_COMPAT_BITS if COMPAT
-	select HAVE_ARCH_PREL32_RELOCATIONS
+	select HAVE_ARCH_PREL32_RELOCATIONS if !LTO_CLANG
 	select HAVE_ARCH_SECCOMP_FILTER
 	select HAVE_ARCH_STACKLEAK
 	select HAVE_ARCH_THREAD_STRUCT_WHITELIST
@@ -149,7 +155,7 @@
 	select HAVE_FTRACE_MCOUNT_RECORD
 	select HAVE_FUNCTION_TRACER
 	select HAVE_FUNCTION_ERROR_INJECTION
-	select HAVE_FUNCTION_GRAPH_TRACER
+	select HAVE_FUNCTION_GRAPH_TRACER if !SHADOW_CALL_STACK
 	select HAVE_GCC_PLUGINS
 	select HAVE_HW_BREAKPOINT if PERF_EVENTS
 	select HAVE_IRQ_TIME_ACCOUNTING
@@ -965,6 +971,10 @@
 config ARCH_ENABLE_SPLIT_PMD_PTLOCK
 	def_bool y if PGTABLE_LEVELS > 2
 
+# Supported by clang >= 7.0
+config CC_HAVE_SHADOW_CALL_STACK
+	def_bool $(cc-option, -fsanitize=shadow-call-stack -ffixed-x18)
+
 config SECCOMP
 	bool "Enable seccomp to safely compute untrusted bytecode"
 	---help---
@@ -1455,6 +1465,33 @@
 
 endmenu
 
+menu "ARMv8.4 architectural features"
+
+config ARM64_AMU_EXTN
+	bool "Enable support for the Activity Monitors Unit CPU extension"
+	default y
+	help
+	  The activity monitors extension is an optional extension introduced
+	  by the ARMv8.4 CPU architecture. This enables support for version 1
+	  of the activity monitors architecture, AMUv1.
+
+	  To enable the use of this extension on CPUs that implement it, say Y.
+
+	  Note that for architectural reasons, firmware _must_ implement AMU
+	  support when running on CPUs that present the activity monitors
+	  extension. The required support is present in:
+	    * Version 1.5 and later of the ARM Trusted Firmware
+
+	  For kernels that have this configuration enabled but boot with broken
+	  firmware, you may need to say N here until the firmware is fixed.
+	  Otherwise you may experience firmware panics or lockups when
+	  accessing the counter registers. Even if you are not observing these
+	  symptoms, the values returned by the register reads might not
+	  correctly reflect reality. Most commonly, the value read will be 0,
+	  indicating that the counter is not enabled.
+
+endmenu
+
 config ARM64_SVE
 	bool "ARM Scalable Vector Extension support"
 	default y
@@ -1612,6 +1649,23 @@
 	  entering them here. As a minimum, you should specify the the
 	  root device (e.g. root=/dev/nfs).
 
+choice
+	prompt "Kernel command line type" if CMDLINE != ""
+	default CMDLINE_FROM_BOOTLOADER
+
+config CMDLINE_FROM_BOOTLOADER
+	bool "Use bootloader kernel arguments if available"
+	help
+	  Uses the command-line options passed by the boot loader. If
+	  the boot loader doesn't provide any, the default kernel command
+	  string provided in CMDLINE will be used.
+
+config CMDLINE_EXTEND
+	bool "Extend bootloader kernel arguments"
+	help
+	  The command-line arguments provided by the boot loader will be
+	  appended to the default kernel command string.
+
 config CMDLINE_FORCE
 	bool "Always use the default kernel command string"
 	help
@@ -1619,6 +1673,7 @@
 	  loader passes other arguments to the kernel.
 	  This is useful if you cannot or don't want to change the
 	  command-line options your boot loader passes to the kernel.
+endchoice
 
 config EFI_STUB
 	bool
diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile
index cd8f3cd..8e08589 100644
--- a/arch/arm64/Makefile
+++ b/arch/arm64/Makefile
@@ -76,6 +76,10 @@
 # off.
 KBUILD_CFLAGS += $(call cc-option,-mbranch-protection=none)
 
+ifeq ($(CONFIG_SHADOW_CALL_STACK), y)
+KBUILD_CFLAGS	+= -ffixed-x18
+endif
+
 ifeq ($(CONFIG_CPU_BIG_ENDIAN), y)
 KBUILD_CPPFLAGS	+= -mbig-endian
 CHECKFLAGS	+= -D__AARCH64EB__
diff --git a/arch/arm64/boot/dts/hisilicon/hi3660-drm.dtsi b/arch/arm64/boot/dts/hisilicon/hi3660-drm.dtsi
new file mode 100644
index 0000000..c7f497c8
--- /dev/null
+++ b/arch/arm64/boot/dts/hisilicon/hi3660-drm.dtsi
@@ -0,0 +1,114 @@
+/{
+		dpe: dpe@E8600000 {
+			compatible = "hisilicon,hi3660-dpe";
+			status = "ok";
+
+			reg = <0x0 0xE8600000 0x0 0x80000>,
+					<0x0 0xFFF35000 0 0x1000>,
+					<0x0 0xFFF0A000 0 0x1000>,
+					<0x0 0xFFF31000 0 0x1000>,
+					<0x0 0xE86C0000 0 0x10000>;
+			interrupts = <0 245 4>;
+
+			clocks = <&crg_ctrl HI3660_ACLK_GATE_DSS>,
+				<&crg_ctrl HI3660_PCLK_GATE_DSS>,
+				<&crg_ctrl HI3660_CLK_GATE_EDC0>,
+				<&crg_ctrl HI3660_CLK_GATE_LDI0>,
+				<&crg_ctrl HI3660_CLK_GATE_LDI1>,
+				<&sctrl HI3660_CLK_GATE_DSS_AXI_MM>,
+				<&sctrl HI3660_PCLK_GATE_MMBUF>;
+			clock-names = "aclk_dss",
+					"pclk_dss",
+					"clk_edc0",
+					"clk_ldi0",
+					"clk_ldi1",
+					"clk_dss_axi_mm",
+					"pclk_mmbuf";
+
+			dma-coherent;
+
+			port {
+				dpe_out: endpoint {
+					remote-endpoint = <&dsi_in>;
+				};
+			};
+
+			iommu_info {
+				start-addr = <0x8000>;
+				size = <0xbfff8000>;
+			};
+		};
+
+		dsi: dsi@E8601000 {
+			compatible = "hisilicon,hi3660-dsi";
+			status = "ok";
+
+			reg = <0 0xE8601000 0 0x7F000>,
+					<0 0xFFF35000 0 0x1000>;
+
+			clocks = <&crg_ctrl HI3660_CLK_GATE_TXDPHY0_REF>,
+					<&crg_ctrl HI3660_CLK_GATE_TXDPHY1_REF>,
+					<&crg_ctrl HI3660_CLK_GATE_TXDPHY0_CFG>,
+					<&crg_ctrl HI3660_CLK_GATE_TXDPHY1_CFG>,
+					<&crg_ctrl HI3660_PCLK_GATE_DSI0>,
+					<&crg_ctrl HI3660_PCLK_GATE_DSI1>;
+			clock-names = "clk_txdphy0_ref",
+						"clk_txdphy1_ref",
+						"clk_txdphy0_cfg",
+						"clk_txdphy1_cfg",
+						"pclk_dsi0",
+						"pclk_dsi1";
+
+			#address-cells = <1>;
+			#size-cells = <0>;
+			mux-gpio = <&gpio2 4 0>;
+
+			ports {
+				#address-cells = <1>;
+				#size-cells = <0>;
+
+				port@0 {
+					reg = <0>;
+					dsi_in: endpoint {
+						remote-endpoint = <&dpe_out>;
+					};
+				};
+
+				port@1 {
+					#address-cells = <1>;
+					#size-cells = <0>;
+					reg = <1>;
+
+					dsi_out0: endpoint@0 {
+						reg = <0>;
+						remote-endpoint = <&adv7533_in>;
+					};
+
+					dsi_out1: endpoint@1 {
+						reg = <1>;
+						remote-endpoint = <&panel0_in>;
+					};
+				};
+			};
+
+			panel@1 {
+				compatible = "hisilicon,mipi-hikey";
+				#address-cells = <2>;
+				#size-cells = <2>;
+				status = "ok";
+				reg = <1>;
+				panel-width-mm = <94>;
+				panel-height-mm = <151>;
+				vdd-supply = <&ldo3>;
+				pwr-en-gpio = <&gpio27 0 0>;
+				bl-en-gpio = <&gpio27 2 0>;
+				pwm-gpio = <&gpio22 6 0>;
+
+				port {
+					panel0_in: endpoint {
+						remote-endpoint = <&dsi_out1>;
+					};
+				};
+			};
+		};
+};
diff --git a/arch/arm64/boot/dts/hisilicon/hi3660-gpu.dtsi b/arch/arm64/boot/dts/hisilicon/hi3660-gpu.dtsi
new file mode 100644
index 0000000..0cce0ce
--- /dev/null
+++ b/arch/arm64/boot/dts/hisilicon/hi3660-gpu.dtsi
@@ -0,0 +1,19 @@
+/{
+    gpu: mali@E82C0000 {
+        compatible = "arm,malit6xx", "arm,mali-midgard";
+        #cooling-cells = <3>; /* min followed by max */
+        gpu_outstanding = <0x0>;
+        reg = <0x0 0xE82C0000 0x0 0x4000>;
+        interrupts = <0 258 4 0 259 4 0 260 4>;
+        interrupt-names = "JOB", "MMU", "GPU";
+        operating-points = <
+		/* <frequency> <voltage>*/
+		178000  650000
+		400000	700000
+		533000	800000
+		807000	900000
+		960000	1000000
+		1037000 1100000
+        >;
+    };
+};
diff --git a/arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts b/arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts
index 8c4bfba..cb9c7c6 100644
--- a/arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts
+++ b/arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts
@@ -10,9 +10,13 @@
 
 #include "hi3660.dtsi"
 #include "hikey960-pinctrl.dtsi"
+#include "hi3660-drm.dtsi"
+#include "hi3660-gpu.dtsi"
+
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/input/input.h>
 #include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/usb/pd.h>
 
 / {
 	model = "HiKey960";
@@ -45,6 +49,23 @@
 		#size-cells = <2>;
 		ranges;
 
+		fastboot_cma: fastboot-cma-mem {
+			reg = <0x0 0x16c00000 0x0 0x4000000>;
+			compatible = "shared-dma-pool";
+			hisi,cma-sec;
+			reusable;
+		};
+
+		uefi-reboot-mode {
+			reg = <0x0 0x32100000 0x0 0x00001000>;
+			no-map;
+		};
+
+		bl31 {
+			reg = <0x0 0x20200000 0x0 0x200000>;
+			no-map;
+		};
+
 		ramoops@32000000 {
 			compatible = "ramoops";
 			reg = <0x0 0x32000000 0x0 0x00100000>;
@@ -52,6 +73,14 @@
 			console-size	= <0x00020000>;
 			ftrace-size	= <0x00020000>;
 		};
+
+		/* global autoconfigured region for contiguous allocations */
+		linux,cma {
+			compatible = "shared-dma-pool";
+			reg = <0x0 0x20C00000 0x0 0x4000000>;
+			reusable;
+			linux,cma-default;
+		};
 	};
 
 	reboot-mode-syscon@32100000 {
@@ -196,6 +225,59 @@
 			method = "smc";
 		};
 	};
+
+	hisi_hikey_usb: hisi_hikey_usb {
+		compatible = "hisilicon,gpio_hubv1";
+		typec-vbus-gpios = <&gpio25 2 GPIO_ACTIVE_HIGH>;
+		otg-switch-gpios = <&gpio25 6 GPIO_ACTIVE_HIGH>;
+		hub-vdd33-en-gpios = <&gpio5 6 GPIO_ACTIVE_HIGH>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&usbhub5734_pmx_func>;
+		usb-role-switch;
+
+		port {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			hikey_usb_ep0: endpoint@0 {
+				reg = <0>;
+				remote-endpoint = <&dwc3_role_switch>;
+			};
+			hikey_usb_ep1: endpoint@1 {
+				reg = <1>;
+				remote-endpoint = <&rt1711h_ep>;
+			};
+		};
+	};
+
+	i2s2: hi3660_i2s {
+		compatible = "hisilicon,hi3660-i2s-1.0";
+		reg = <0x0 0xe804f800 0x0 0x400>,
+			<0x0 0xe804e000 0x0 0x400>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&i2s2_pmx_func &i2s2_cfg_func>;
+		dmas = <&asp_dmac 18 &asp_dmac 19>;
+		dma-names = "rx", "tx";
+		#sound-dai-cells = <0>;
+	};
+
+	sound {
+		compatible = "simple-audio-card";
+		simple-audio-card,name = "hikey-hdmi";
+		simple-audio-card,format = "i2s";
+
+		simple-audio-card,bitclock-master = <&sound_master>;
+		simple-audio-card,frame-master = <&sound_master>;
+
+		sound_master: simple-audio-card,cpu {
+			sound-dai = <&i2s2>;
+		};
+
+		simple-audio-card,codec {
+			sound-dai = <&adv7533>;
+		};
+	};
+
 };
 
 /*
@@ -526,22 +608,76 @@
 &i2c1 {
 	status = "okay";
 
+	rt1711h: rt1711h@4e {
+		compatible = "richtek,rt1711h";
+		reg = <0x4e>;
+		status = "ok";
+		interrupt-parent = <&gpio27>;
+		interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&usb_cfg_func>;
+
+		usb_con: connector {
+			compatible = "usb-c-connector";
+			label = "USB-C";
+			data-role = "dual";
+			power-role = "dual";
+			try-power-role = "sink";
+			source-pdos = <PDO_FIXED(5000, 500, PDO_FIXED_USB_COMM)>;
+			sink-pdos = <PDO_FIXED(5000, 500, PDO_FIXED_USB_COMM)
+				PDO_VAR(5000, 5000, 1000)>;
+			op-sink-microwatt = <10000000>;
+
+			ports {
+				#address-cells = <1>;
+				#size-cells = <0>;
+				port@1 {
+					reg = <1>;
+					usb_con_ss: endpoint {
+						remote-endpoint = <&dwc3_ss>;
+					};
+				};
+			};
+		};
+		port {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			rt1711h_ep: endpoint@0 {
+				reg = <0>;
+				remote-endpoint = <&hikey_usb_ep1>;
+			};
+		};
+	};
+
 	adv7533: adv7533@39 {
 		status = "ok";
 		compatible = "adi,adv7533";
 		reg = <0x39>;
+		v1p2-supply = <&ldo3>;
+		vdd-supply = <&ldo3>;
+		interrupt-parent = <&gpio1>;
+		interrupts = <1 2>;
+		pd-gpio = <&gpio5 1 0>;
+		sel-gpio = <&gpio2 4 0>;
 		adi,dsi-lanes = <4>;
+		adi,disable-timing-generator;
+		#sound-dai-cells = <0>;
 		ports {
 			#address-cells = <1>;
 			#size-cells = <0>;
 			port@0 {
 				reg = <0>;
+				adv7533_in: endpoint@0 {
+					remote-endpoint = <&dsi_out0>;
+				};
 			};
 			port@1 {
 				reg = <1>;
 			};
 		};
 	};
+
 };
 
 &i2c7 {
diff --git a/arch/arm64/boot/dts/hisilicon/hi3660.dtsi b/arch/arm64/boot/dts/hisilicon/hi3660.dtsi
index 253cc34..0637e58 100644
--- a/arch/arm64/boot/dts/hisilicon/hi3660.dtsi
+++ b/arch/arm64/boot/dts/hisilicon/hi3660.dtsi
@@ -355,6 +355,12 @@
 			#clock-cells = <1>;
 		};
 
+		pmctrl: pmctrl@fff31000 {
+			compatible = "hisilicon,hi3660-pmctrl", "syscon";
+			reg = <0x0 0xfff31000 0x0 0x1000>;
+			#clock-cells = <1>;
+		};
+
 		pmuctrl: crg_ctrl@fff34000 {
 			compatible = "hisilicon,hi3660-pmuctrl", "syscon";
 			reg = <0x0 0xfff34000 0x0 0x1000>;
@@ -367,6 +373,13 @@
 			#clock-cells = <1>;
 		};
 
+		reboot {
+			compatible = "hisilicon,hi3660-reboot";
+			pmu-regmap = <&pmuctrl>;
+			sctrl-regmap = <&sctrl>;
+			reboot-offset = <0x4>;
+		};
+
 		iomcu: iomcu@ffd7e000 {
 			compatible = "hisilicon,hi3660-iomcu", "syscon";
 			reg = <0x0 0xffd7e000 0x0 0x1000>;
@@ -431,7 +444,8 @@
 			resets = <&iomcu_rst 0x20 4>;
 			pinctrl-names = "default";
 			pinctrl-0 = <&i2c1_pmx_func &i2c1_cfg_func>;
-			status = "disabled";
+			status = "ok";
+
 		};
 
 		i2c3: i2c@fdf0c000 {
@@ -1152,6 +1166,70 @@
 				};
 			};
 		};
+
+		usb3_otg_bc: usb3_otg_bc@ff200000 {
+			compatible = "syscon", "simple-mfd";
+			reg = <0x0 0xff200000 0x0 0x1000>;
+
+			usb_phy: usb-phy {
+				compatible = "hisilicon,hi3660-usb-phy";
+				#phy-cells = <0>;
+				hisilicon,pericrg-syscon = <&crg_ctrl>;
+				hisilicon,pctrl-syscon = <&pctrl>;
+				hisilicon,eye-diagram-param = <0x22466e4>;
+			};
+		};
+
+
+		dwc3: dwc3@ff100000 {
+			compatible = "snps,dwc3";
+			reg = <0x0 0xff100000 0x0 0x100000>;
+
+			clocks = <&crg_ctrl HI3660_CLK_ABB_USB>,
+				 <&crg_ctrl HI3660_ACLK_GATE_USB3OTG>;
+			clock-names = "ref", "bus_early";
+
+			assigned-clocks = <&crg_ctrl HI3660_ACLK_GATE_USB3OTG>;
+			assigned-clock-rates = <229000000>;
+
+			resets = <&crg_rst 0x90 8>,
+				 <&crg_rst 0x90 7>,
+				 <&crg_rst 0x90 6>,
+				 <&crg_rst 0x90 5>;
+
+			interrupts = <0 159 4>, <0 161 4>;
+			phys = <&usb_phy>;
+			phy-names = "usb3-phy";
+
+			dr_mode = "otg";
+			maximum-speed = "super-speed";
+			phy_type = "utmi";
+			snps,dis-del-phy-power-chg-quirk;
+			snps,lfps_filter_quirk;
+			snps,dis_u2_susphy_quirk;
+			snps,dis_u3_susphy_quirk;
+			snps,tx_de_emphasis_quirk;
+			snps,tx_de_emphasis = <1>;
+			snps,dis_enblslpm_quirk;
+			snps,gctl-reset-quirk;
+			usb-role-switch;
+			role-switch-default-mode = "host";
+
+			port {
+				#address-cells = <1>;
+				#size-cells = <0>;
+
+				dwc3_role_switch: endpoint@0 {
+					reg = <0>;
+					remote-endpoint = <&hikey_usb_ep0>;
+				};
+
+				dwc3_ss: endpoint@1 {
+					reg = <1>;
+					remote-endpoint = <&usb_con_ss>;
+				};
+			};
+		};
 	};
 };
 
diff --git a/arch/arm64/boot/dts/qcom/sdm845-db845c.dts b/arch/arm64/boot/dts/qcom/sdm845-db845c.dts
index bf4fde8..c56711b 100644
--- a/arch/arm64/boot/dts/qcom/sdm845-db845c.dts
+++ b/arch/arm64/boot/dts/qcom/sdm845-db845c.dts
@@ -72,6 +72,17 @@
 		};
 	};
 
+	hdmi-out {
+		compatible = "hdmi-connector";
+		type = "a";
+
+		port {
+			hdmi_con: endpoint {
+				remote-endpoint = <&lt9611_out>;
+			};
+		};
+	};
+
 	lt9611_1v8: lt9611-vdd18-regulator {
 		compatible = "regulator-fixed";
 		regulator-name = "LT9611_1V8";
@@ -197,7 +208,7 @@
 &adsp_pas {
 	status = "okay";
 
-	firmware-name = "qcom/db845c/adsp.mdt";
+	firmware-name = "qcom/sdm845/adsp.mdt";
 };
 
 &apps_rsc {
@@ -331,9 +342,56 @@
 
 &cdsp_pas {
 	status = "okay";
-	firmware-name = "qcom/db845c/cdsp.mdt";
+	firmware-name = "qcom/sdm845/cdsp.mdt";
 };
 
+&dsi0 {
+	status = "okay";
+	vdda-supply = <&vreg_l26a_1p2>;
+
+#if 0
+	qcom,dual-dsi-mode;
+	qcom,master-dsi;
+#endif
+
+	ports {
+		port@1 {
+			endpoint {
+				remote-endpoint = <&lt9611_a>;
+				data-lanes = <0 1 2 3>;
+			};
+		};
+	};
+};
+
+&dsi0_phy {
+	status = "okay";
+	vdds-supply = <&vreg_l1a_0p875>;
+};
+
+#if 0
+&dsi1 {
+	status = "okay";
+	vdda-supply = <&vreg_l26a_1p2>;
+
+	qcom,dual-dsi-mode;
+
+	ports {
+		port@1 {
+			endpoint {
+				remote-endpoint = <&lt9611_b>;
+				data-lanes = <0 1 2 3>;
+			};
+		};
+	};
+};
+
+&dsi1_phy {
+	status = "okay";
+	vdds-supply = <&vreg_l1a_0p875>;
+};
+#endif
+
 &gcc {
 	protected-clocks = <GCC_QSPI_CORE_CLK>,
 			   <GCC_QSPI_CORE_CLK_SRC>,
@@ -342,6 +400,121 @@
 			   <GCC_LPASS_SWAY_CLK>;
 };
 
+&pcie0 {
+	status = "okay";
+	perst-gpio = <&tlmm 35 GPIO_ACTIVE_LOW>;
+	enable-gpio = <&tlmm 134 GPIO_ACTIVE_HIGH>;
+
+	vddpe-3v3-supply = <&pcie0_3p3v_dual>;
+
+	pinctrl-names = "default";
+	pinctrl-0 = <&pcie0_default_state>;
+};
+
+&pcie0_phy {
+	status = "okay";
+
+	vdda-phy-supply = <&vreg_l1a_0p875>;
+	vdda-pll-supply = <&vreg_l26a_1p2>;
+};
+
+&pcie1 {
+	status = "okay";
+	perst-gpio = <&tlmm 102 GPIO_ACTIVE_LOW>;
+
+	pinctrl-names = "default";
+	pinctrl-0 = <&pcie1_default_state>;
+};
+
+&pcie1_phy {
+	status = "okay";
+
+	vdda-phy-supply = <&vreg_l1a_0p875>;
+	vdda-pll-supply = <&vreg_l26a_1p2>;
+};
+
+&i2c10 {
+	status = "okay";
+	clock-frequency = <400000>;
+
+	hdmi-bridge@3b {
+		compatible = "lt,lt9611";
+		reg = <0x3b>;
+
+		interrupts-extended = <&tlmm 84 IRQ_TYPE_EDGE_FALLING>;
+
+		reset-gpios = <&tlmm 128 GPIO_ACTIVE_HIGH>;
+
+		vdd-supply = <&lt9611_1v8>;
+		vcc-supply = <&lt9611_3v3>;
+
+		pinctrl-names = "default";
+		pinctrl-0 = <&lt9611_irq_pin>, <&dsi_sw_sel>;
+
+		ports {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			port@0 {
+				reg = <0>;
+
+				lt9611_out: endpoint {
+					remote-endpoint = <&hdmi_con>;
+				};
+			};
+
+			port@1 {
+				reg = <1>;
+
+				lt9611_a: endpoint {
+					remote-endpoint = <&dsi0_out>;
+				};
+			};
+
+#if 0
+			port@2 {
+				reg = <2>;
+
+				lt9611_b: endpoint {
+					remote-endpoint = <&dsi1_out>;
+				};
+			};
+#endif
+		};
+	};
+};
+
+&i2c11 {
+	/* On Low speed expansion */
+	label = "LS-I2C1";
+	status = "okay";
+};
+
+&i2c14 {
+	/* On Low speed expansion */
+	label = "LS-I2C0";
+	status = "okay";
+};
+
+&spi2 {
+	/* On Low speed expansion */
+	label = "LS-SPI0";
+	status = "okay";
+};
+
+&mdss {
+	status = "okay";
+};
+
+&mdss_mdp {
+	status = "okay";
+};
+
+&mss_pil {
+	status = "okay";
+	firmware-name = "qcom/sdm845/mba.mbn", "qcom/sdm845/modem.mbn";
+};
+
 &pm8998_gpio {
 	vol_up_pin_a: vol-up-active {
 		pins = "gpio6";
@@ -384,6 +557,37 @@
 };
 
 &tlmm {
+	pcie0_default_state: pcie0-default {
+		clkreq {
+			pins = "gpio36";
+			function = "pci_e0";
+			bias-pull-up;
+		};
+
+		reset-n {
+			pins = "gpio35";
+			function = "gpio";
+
+			drive-strength = <2>;
+			output-low;
+			bias-pull-down;
+		};
+
+		wake-n {
+			pins = "gpio37";
+			function = "gpio";
+
+			drive-strength = <2>;
+			bias-pull-up;
+		};
+	};
+
+	lt9611_irq_pin: lt9611-irq {
+		pins = "gpio84";
+		function = "gpio";
+		bias-disable;
+	};
+
 	pcie0_pwren_state: pcie0-pwren {
 		pins = "gpio90";
 		function = "gpio";
@@ -392,6 +596,39 @@
 		bias-disable;
 	};
 
+	pcie1_default_state: pcie1-default {
+		perst-n {
+			pins = "gpio102";
+			function = "gpio";
+
+			drive-strength = <16>;
+			bias-disable;
+		};
+
+		clkreq {
+			pins = "gpio103";
+			function = "pci_e1";
+			bias-pull-up;
+		};
+
+		wake-n {
+			pins = "gpio11";
+			function = "gpio";
+
+			drive-strength = <2>;
+			bias-pull-up;
+		};
+
+		reset-n {
+			pins = "gpio75";
+			function = "gpio";
+
+			drive-strength = <16>;
+			bias-pull-up;
+			output-high;
+		};
+	};
+
 	sdc2_default_state: sdc2-default {
 		clk {
 			pins = "sdc2_clk";
@@ -422,6 +659,20 @@
 		function = "gpio";
 		bias-pull-up;
 	};
+
+	dsi_sw_sel: dsi-sw-sel {
+		pins = "gpio120";
+		function = "gpio";
+
+		drive-strength = <2>;
+		bias-disable;
+		output-high;
+	};
+};
+
+&uart3 {
+	label = "LS-UART0";
+	status = "disabled";
 };
 
 &uart6 {
@@ -439,6 +690,7 @@
 };
 
 &uart9 {
+	label = "LS-UART1";
 	status = "okay";
 };
 
@@ -524,6 +776,24 @@
 };
 
 /* PINCTRL - additions to nodes defined in sdm845.dtsi */
+&qup_spi2_default {
+	drive-strength = <16>;
+};
+
+&qup_uart3_default{
+	pinmux {
+		pins = "gpio41", "gpio42", "gpio43", "gpio44";
+		function = "qup3";
+	};
+};
+
+&qup_i2c10_default {
+	pinconf {
+		pins = "gpio55", "gpio56";
+		drive-strength = <2>;
+		bias-disable;
+	};
+};
 
 &qup_uart6_default {
 	pinmux {
diff --git a/arch/arm64/boot/dts/qcom/sdm845.dtsi b/arch/arm64/boot/dts/qcom/sdm845.dtsi
index 2287354..9df23e3 100644
--- a/arch/arm64/boot/dts/qcom/sdm845.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdm845.dtsi
@@ -1364,10 +1364,227 @@
 			interrupts = <GIC_SPI 582 IRQ_TYPE_LEVEL_HIGH>;
 		};
 
+		pcie0: pci@1c00000 {
+			compatible = "qcom,pcie-sdm845", "snps,dw-pcie";
+			reg = <0 0x01c00000 0 0x2000>,
+			      <0 0x60000000 0 0xf1d>,
+			      <0 0x60000f20 0 0xa8>,
+			      <0 0x60100000 0 0x100000>;
+			reg-names = "parf", "dbi", "elbi", "config";
+			device_type = "pci";
+			linux,pci-domain = <0>;
+			bus-range = <0x00 0xff>;
+			num-lanes = <1>;
+
+			#address-cells = <3>;
+			#size-cells = <2>;
+
+			ranges = <0x01000000 0x0 0x60200000 0 0x60200000 0x0 0x100000>,
+				 <0x02000000 0x0 0x60300000 0 0x60300000 0x0 0xd00000>;
+
+			interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>;
+			interrupt-names = "msi";
+			#interrupt-cells = <1>;
+			interrupt-map-mask = <0 0 0 0x7>;
+			interrupt-map = <0 0 0 1 &intc 0 149 IRQ_TYPE_LEVEL_HIGH>, /* int_a */
+					<0 0 0 2 &intc 0 150 IRQ_TYPE_LEVEL_HIGH>, /* int_b */
+					<0 0 0 3 &intc 0 151 IRQ_TYPE_LEVEL_HIGH>, /* int_c */
+					<0 0 0 4 &intc 0 152 IRQ_TYPE_LEVEL_HIGH>; /* int_d */
+
+			clocks = <&gcc GCC_PCIE_0_PIPE_CLK>,
+				 <&gcc GCC_PCIE_0_AUX_CLK>,
+				 <&gcc GCC_PCIE_0_CFG_AHB_CLK>,
+				 <&gcc GCC_PCIE_0_MSTR_AXI_CLK>,
+				 <&gcc GCC_PCIE_0_SLV_AXI_CLK>,
+				 <&gcc GCC_PCIE_0_SLV_Q2A_AXI_CLK>,
+				 <&gcc GCC_AGGRE_NOC_PCIE_TBU_CLK>;
+			clock-names = "pipe",
+				      "aux",
+				      "cfg",
+				      "bus_master",
+				      "bus_slave",
+				      "slave_q2a",
+				      "tbu";
+
+			iommus = <&apps_smmu 0x1c10 0xf>;
+			iommu-map = <0x0   &apps_smmu 0x1c10 0x1>,
+				    <0x100 &apps_smmu 0x1c11 0x1>,
+				    <0x200 &apps_smmu 0x1c12 0x1>,
+				    <0x300 &apps_smmu 0x1c13 0x1>,
+				    <0x400 &apps_smmu 0x1c14 0x1>,
+				    <0x500 &apps_smmu 0x1c15 0x1>,
+				    <0x600 &apps_smmu 0x1c16 0x1>,
+				    <0x700 &apps_smmu 0x1c17 0x1>,
+				    <0x800 &apps_smmu 0x1c18 0x1>,
+				    <0x900 &apps_smmu 0x1c19 0x1>,
+				    <0xa00 &apps_smmu 0x1c1a 0x1>,
+				    <0xb00 &apps_smmu 0x1c1b 0x1>,
+				    <0xc00 &apps_smmu 0x1c1c 0x1>,
+				    <0xd00 &apps_smmu 0x1c1d 0x1>,
+				    <0xe00 &apps_smmu 0x1c1e 0x1>,
+				    <0xf00 &apps_smmu 0x1c1f 0x1>;
+
+			resets = <&gcc GCC_PCIE_0_BCR>;
+			reset-names = "pci";
+
+			power-domains = <&gcc PCIE_0_GDSC>;
+
+			phys = <&pcie0_lane>;
+			phy-names = "pciephy";
+
+			status = "disabled";
+		};
+
+		pcie0_phy: phy@1c06000 {
+			compatible = "qcom,sdm845-qmp-pcie-phy";
+			reg = <0 0x01c06000 0 0x18c>;
+			#address-cells = <2>;
+			#size-cells = <2>;
+			ranges;
+			clocks = <&gcc GCC_PCIE_PHY_AUX_CLK>,
+				 <&gcc GCC_PCIE_0_CFG_AHB_CLK>,
+				 <&gcc GCC_PCIE_0_CLKREF_CLK>,
+				 <&gcc GCC_PCIE_PHY_REFGEN_CLK>;
+			clock-names = "aux", "cfg_ahb", "ref", "refgen";
+
+			resets = <&gcc GCC_PCIE_0_PHY_BCR>;
+			reset-names = "phy";
+
+			assigned-clocks = <&gcc GCC_PCIE_PHY_REFGEN_CLK>;
+			assigned-clock-rates = <100000000>;
+
+			status = "disabled";
+
+			pcie0_lane: lanes@1c06200 {
+				reg = <0 0x01c06200 0 0x128>,
+				      <0 0x01c06400 0 0x1fc>,
+				      <0 0x01c06800 0 0x218>,
+				      <0 0x01c06600 0 0x70>;
+				clocks = <&gcc GCC_PCIE_0_PIPE_CLK>;
+				clock-names = "pipe0";
+
+				#phy-cells = <0>;
+				clock-output-names = "pcie_0_pipe_clk";
+			};
+		};
+
+		pcie1: pci@1c08000 {
+			compatible = "qcom,pcie-sdm845", "snps,dw-pcie";
+			reg = <0 0x01c08000 0 0x2000>,
+			      <0 0x40000000 0 0xf1d>,
+			      <0 0x40000f20 0 0xa8>,
+			      <0 0x40100000 0 0x100000>;
+			reg-names = "parf", "dbi", "elbi", "config";
+			device_type = "pci";
+			linux,pci-domain = <1>;
+			bus-range = <0x00 0xff>;
+			num-lanes = <1>;
+
+			#address-cells = <3>;
+			#size-cells = <2>;
+
+			ranges = <0x01000000 0x0 0x40200000 0x0 0x40200000 0x0 0x100000>,
+				 <0x02000000 0x0 0x40300000 0x0 0x40300000 0x0 0x1fd00000>;
+
+			interrupts = <GIC_SPI 307 IRQ_TYPE_EDGE_RISING>;
+			interrupt-names = "msi";
+			#interrupt-cells = <1>;
+			interrupt-map-mask = <0 0 0 0x7>;
+			interrupt-map = <0 0 0 1 &intc 0 434 IRQ_TYPE_LEVEL_HIGH>, /* int_a */
+					<0 0 0 2 &intc 0 435 IRQ_TYPE_LEVEL_HIGH>, /* int_b */
+					<0 0 0 3 &intc 0 438 IRQ_TYPE_LEVEL_HIGH>, /* int_c */
+					<0 0 0 4 &intc 0 439 IRQ_TYPE_LEVEL_HIGH>; /* int_d */
+
+			clocks = <&gcc GCC_PCIE_1_PIPE_CLK>,
+				 <&gcc GCC_PCIE_1_AUX_CLK>,
+				 <&gcc GCC_PCIE_1_CFG_AHB_CLK>,
+				 <&gcc GCC_PCIE_1_MSTR_AXI_CLK>,
+				 <&gcc GCC_PCIE_1_SLV_AXI_CLK>,
+				 <&gcc GCC_PCIE_1_SLV_Q2A_AXI_CLK>,
+				 <&gcc GCC_PCIE_1_CLKREF_CLK>,
+				 <&gcc GCC_AGGRE_NOC_PCIE_TBU_CLK>;
+			clock-names = "pipe",
+				      "aux",
+				      "cfg",
+				      "bus_master",
+				      "bus_slave",
+				      "slave_q2a",
+				      "ref",
+				      "tbu";
+
+			assigned-clocks = <&gcc GCC_PCIE_1_AUX_CLK>;
+			assigned-clock-rates = <19200000>;
+
+			iommus = <&apps_smmu 0x1c00 0xf>;
+			iommu-map = <0x0   &apps_smmu 0x1c00 0x1>,
+				    <0x100 &apps_smmu 0x1c01 0x1>,
+				    <0x200 &apps_smmu 0x1c02 0x1>,
+				    <0x300 &apps_smmu 0x1c03 0x1>,
+				    <0x400 &apps_smmu 0x1c04 0x1>,
+				    <0x500 &apps_smmu 0x1c05 0x1>,
+				    <0x600 &apps_smmu 0x1c06 0x1>,
+				    <0x700 &apps_smmu 0x1c07 0x1>,
+				    <0x800 &apps_smmu 0x1c08 0x1>,
+				    <0x900 &apps_smmu 0x1c09 0x1>,
+				    <0xa00 &apps_smmu 0x1c0a 0x1>,
+				    <0xb00 &apps_smmu 0x1c0b 0x1>,
+				    <0xc00 &apps_smmu 0x1c0c 0x1>,
+				    <0xd00 &apps_smmu 0x1c0d 0x1>,
+				    <0xe00 &apps_smmu 0x1c0e 0x1>,
+				    <0xf00 &apps_smmu 0x1c0f 0x1>;
+
+			resets = <&gcc GCC_PCIE_1_BCR>;
+			reset-names = "pci";
+
+			power-domains = <&gcc PCIE_1_GDSC>;
+
+			interconnects = <&rsc_hlos MASTER_PCIE_0 &rsc_hlos SLAVE_EBI1>;
+			interconnect-names = "pcie-mem";
+
+			phys = <&pcie1_lane>;
+			phy-names = "pciephy";
+
+			status = "disabled";
+		};
+
+		pcie1_phy: phy@1c0a000 {
+			compatible = "qcom,sdm845-qhp-pcie-phy";
+			reg = <0 0x01c0a000 0 0x800>;
+			#address-cells = <2>;
+			#size-cells = <2>;
+			ranges;
+			clocks = <&gcc GCC_PCIE_PHY_AUX_CLK>,
+				 <&gcc GCC_PCIE_1_CFG_AHB_CLK>,
+				 <&gcc GCC_PCIE_1_CLKREF_CLK>,
+				 <&gcc GCC_PCIE_PHY_REFGEN_CLK>;
+			clock-names = "aux", "cfg_ahb", "ref", "refgen";
+
+			resets = <&gcc GCC_PCIE_1_PHY_BCR>;
+			reset-names = "phy";
+
+			assigned-clocks = <&gcc GCC_PCIE_PHY_REFGEN_CLK>;
+			assigned-clock-rates = <100000000>;
+
+			status = "disabled";
+
+			pcie1_lane: lanes@1c06200 {
+				reg = <0 0x01c0a800 0 0x800>,
+				      <0 0x01c0a800 0 0x800>,
+				      <0 0x01c0b800 0 0x400>;
+				clocks = <&gcc GCC_PCIE_1_PIPE_CLK>;
+				clock-names = "pipe0";
+
+				#phy-cells = <0>;
+				clock-output-names = "pcie_1_pipe_clk";
+			};
+		};
+
 		ufs_mem_hc: ufshc@1d84000 {
 			compatible = "qcom,sdm845-ufshc", "qcom,ufshc",
 				     "jedec,ufs-2.0";
-			reg = <0 0x01d84000 0 0x2500>;
+			reg = <0 0x01d84000 0 0x2500>,
+			      <0 0x01d90000 0 0x8000>;
+			reg-names = "std", "ice";
 			interrupts = <GIC_SPI 265 IRQ_TYPE_LEVEL_HIGH>;
 			phys = <&ufs_mem_phy_lanes>;
 			phy-names = "ufsphy";
@@ -1385,7 +1602,8 @@
 				"ref_clk",
 				"tx_lane0_sync_clk",
 				"rx_lane0_sync_clk",
-				"rx_lane1_sync_clk";
+				"rx_lane1_sync_clk",
+				"ice_core_clk";
 			clocks =
 				<&gcc GCC_UFS_PHY_AXI_CLK>,
 				<&gcc GCC_AGGRE_UFS_PHY_AXI_CLK>,
@@ -1394,7 +1612,8 @@
 				<&rpmhcc RPMH_CXO_CLK>,
 				<&gcc GCC_UFS_PHY_TX_SYMBOL_0_CLK>,
 				<&gcc GCC_UFS_PHY_RX_SYMBOL_0_CLK>,
-				<&gcc GCC_UFS_PHY_RX_SYMBOL_1_CLK>;
+				<&gcc GCC_UFS_PHY_RX_SYMBOL_1_CLK>,
+				<&gcc GCC_UFS_PHY_ICE_CORE_CLK>;
 			freq-table-hz =
 				<50000000 200000000>,
 				<0 0>,
@@ -1403,7 +1622,8 @@
 				<0 0>,
 				<0 0>,
 				<0 0>,
-				<0 0>;
+				<0 0>,
+				<0 300000000>;
 
 			status = "disabled";
 		};
@@ -2912,6 +3132,8 @@
 					<&gpucc GPU_GX_GDSC>;
 			power-domain-names = "cx", "gx";
 
+			dma-ranges = <0 0x60000000 0 0x60000000 0 0x20000000>;
+
 			iommus = <&adreno_smmu 5>;
 
 			operating-points-v2 = <&gmu_opp_table>;
@@ -2934,6 +3156,7 @@
 		dispcc: clock-controller@af00000 {
 			compatible = "qcom,sdm845-dispcc";
 			reg = <0 0x0af00000 0 0x10000>;
+			clocks = <&gcc GCC_DISP_GPLL0_CLK_SRC>;
 			#clock-cells = <1>;
 			#reset-cells = <1>;
 			#power-domain-cells = <1>;
@@ -3008,6 +3231,7 @@
 			compatible = "qcom,sdm845-smmu-500", "arm,mmu-500";
 			reg = <0 0x15000000 0 0x80000>;
 			#iommu-cells = <2>;
+			qcom,smmu-500-fw-impl-safe-errata;
 			#global-interrupts = <1>;
 			interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>,
 				     <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>,
@@ -3084,6 +3308,12 @@
 			status = "disabled";
 		};
 
+		watchdog@17980000 {
+			compatible = "qcom,apss-wdt-sdm845", "qcom,kpss-wdt";
+			reg = <0 0x17980000 0 0x1000>;
+			clocks = <&sleep_clk>;
+		};
+
 		apss_shared: mailbox@17990000 {
 			compatible = "qcom,sdm845-apss-shared";
 			reg = <0 0x17990000 0 0x1000>;
diff --git a/arch/arm64/configs/db845c_gki.fragment b/arch/arm64/configs/db845c_gki.fragment
new file mode 100644
index 0000000..40690cb
--- /dev/null
+++ b/arch/arm64/configs/db845c_gki.fragment
@@ -0,0 +1,88 @@
+CONFIG_QRTR=m
+CONFIG_QRTR_TUN=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_AX88179_178A=m
+CONFIG_INPUT_PM8941_PWRKEY=m
+CONFIG_SERIAL_MSM=m
+CONFIG_SERIAL_QCOM_GENI=m
+CONFIG_SERIAL_QCOM_GENI_CONSOLE=y
+CONFIG_I2C_QCOM_GENI=m
+CONFIG_I2C_QUP=m
+CONFIG_PINCTRL_MSM8998=m
+CONFIG_PINCTRL_QCOM_SPMI_PMIC=m
+CONFIG_PINCTRL_SDM845=m
+CONFIG_POWER_RESET_QCOM_PON=m
+CONFIG_SYSCON_REBOOT_MODE=m
+CONFIG_QCOM_WDT=m
+CONFIG_PM8916_WATCHDOG=m
+CONFIG_MFD_SPMI_PMIC=m
+CONFIG_SPMI_MSM_PMIC_ARB=m
+CONFIG_QCOM_RPMH=m
+CONFIG_QCOM_RPMHPD=m
+CONFIG_REGULATOR_QCOM_RPMH=m
+CONFIG_REGULATOR_QCOM_SPMI=m
+CONFIG_DRM_MSM=m
+# CONFIG_DRM_MSM_DSI_28NM_PHY is not set
+# CONFIG_DRM_MSM_DSI_20NM_PHY is not set
+# CONFIG_DRM_MSM_DSI_28NM_8960_PHY is not set
+CONFIG_DRM_LONTIUM_LT9611=m
+CONFIG_USB_OHCI_HCD=m
+CONFIG_USB_OHCI_HCD_PLATFORM=m
+# CONFIG_USB_DWC3_HAPS is not set
+# CONFIG_USB_DWC3_OF_SIMPLE is not set
+CONFIG_USB_GADGET_VBUS_DRAW=500
+CONFIG_USB_ULPI_BUS=m
+CONFIG_MMC_SDHCI_MSM=m
+CONFIG_RTC_DRV_PM8XXX=m
+CONFIG_COMMON_CLK_QCOM=m
+CONFIG_COMMON_CLK_SCMI=m
+CONFIG_SDM_GPUCC_845=m
+CONFIG_QCOM_CLK_RPMH=m
+CONFIG_MSM_GCC_8998=m
+CONFIG_SDM_DISPCC_845=m
+CONFIG_HWSPINLOCK_QCOM=m
+CONFIG_QCOM_GENI_SE=m
+CONFIG_QCOM_GSBI=m
+CONFIG_QCOM_LLCC=m
+CONFIG_QCOM_RMTFS_MEM=m
+CONFIG_QCOM_SMEM=m
+CONFIG_QCOM_SMSM=m
+CONFIG_EXTCON_USB_GPIO=m
+CONFIG_RESET_QCOM_AOSS=m
+CONFIG_RESET_QCOM_PDC=m
+CONFIG_PHY_QCOM_QMP=m
+CONFIG_PHY_QCOM_QUSB2=m
+CONFIG_PHY_QCOM_USB_HS=m
+CONFIG_QCOM_QFPROM=m
+CONFIG_INTERCONNECT_QCOM=y
+CONFIG_INTERCONNECT_QCOM_SDM845=m
+CONFIG_WLAN_VENDOR_ATH=y
+CONFIG_ATH10K_AHB=y
+CONFIG_ATH10K=m
+CONFIG_ATH10K_PCI=m
+CONFIG_ATH10K_SNOC=m
+CONFIG_QRTR_SMD=m
+CONFIG_QCOM_FASTRPC=m
+CONFIG_QCOM_APCS_IPC=m
+CONFIG_QCOM_Q6V5_COMMON=m
+CONFIG_QCOM_RPROC_COMMON=m
+CONFIG_QCOM_Q6V5_ADSP=m
+CONFIG_QCOM_Q6V5_MSS=m
+CONFIG_QCOM_Q6V5_PAS=m
+CONFIG_QCOM_Q6V5_WCSS=m
+CONFIG_QCOM_SYSMON=m
+CONFIG_RPMSG_QCOM_GLINK_SMEM=m
+CONFIG_RPMSG_QCOM_SMD=m
+CONFIG_QCOM_AOSS_QMP=m
+CONFIG_QCOM_SMP2P=m
+CONFIG_QCOM_SOCINFO=m
+CONFIG_QCOM_APR=m
+CONFIG_QCOM_GLINK_SSR=m
+CONFIG_RPMSG_QCOM_GLINK_RPM=m
+CONFIG_QCOM_PDC=m
+CONFIG_QCOM_SCM=m
+CONFIG_ARM_SMMU=m
+CONFIG_ARM_QCOM_CPUFREQ_HW=m
+CONFIG_SCSI_UFS_QCOM=m
+CONFIG_DMABUF_HEAPS_SYSTEM=m
+CONFIG_QCOM_COMMAND_DB=m
diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
index c9a867a..7456909 100644
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@ -13,10 +13,12 @@
 CONFIG_TASK_IO_ACCOUNTING=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
+CONFIG_UCLAMP_TASK=y
 CONFIG_NUMA_BALANCING=y
 CONFIG_MEMCG=y
 CONFIG_MEMCG_SWAP=y
 CONFIG_BLK_CGROUP=y
+CONFIG_UCLAMP_TASK_GROUP=y
 CONFIG_CGROUP_PIDS=y
 CONFIG_CGROUP_HUGETLB=y
 CONFIG_CPUSETS=y
@@ -71,10 +73,12 @@
 CONFIG_RANDOMIZE_BASE=y
 CONFIG_HIBERNATION=y
 CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y
+CONFIG_ENERGY_MODEL=y
 CONFIG_ARM_CPUIDLE=y
 CONFIG_ARM_PSCI_CPUIDLE=y
 CONFIG_CPU_FREQ=y
 CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
 CONFIG_CPU_FREQ_GOV_POWERSAVE=m
 CONFIG_CPU_FREQ_GOV_USERSPACE=y
 CONFIG_CPU_FREQ_GOV_ONDEMAND=y
diff --git a/arch/arm64/configs/gki_defconfig b/arch/arm64/configs/gki_defconfig
new file mode 100644
index 0000000..83f9bbb
--- /dev/null
+++ b/arch/arm64/configs/gki_defconfig
@@ -0,0 +1,616 @@
+CONFIG_UAPI_HEADER_TEST=y
+CONFIG_AUDIT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_PREEMPT=y
+CONFIG_IRQ_TIME_ACCOUNTING=y
+CONFIG_TASKSTATS=y
+CONFIG_TASK_XACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+CONFIG_PSI=y
+CONFIG_RCU_EXPERT=y
+CONFIG_RCU_FAST_NO_HZ=y
+CONFIG_RCU_NOCB_CPU=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_IKHEADERS=y
+CONFIG_UCLAMP_TASK=y
+CONFIG_CGROUPS=y
+CONFIG_MEMCG=y
+CONFIG_BLK_CGROUP=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_UCLAMP_TASK_GROUP=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CPUSETS=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_CGROUP_BPF=y
+CONFIG_NAMESPACES=y
+# CONFIG_PID_NS is not set
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+# CONFIG_RD_XZ is not set
+# CONFIG_RD_LZO is not set
+CONFIG_BOOT_CONFIG=y
+# CONFIG_SYSFS_SYSCALL is not set
+# CONFIG_FHANDLE is not set
+CONFIG_KALLSYMS_ALL=y
+CONFIG_BPF_SYSCALL=y
+CONFIG_BPF_JIT_ALWAYS_ON=y
+# CONFIG_RSEQ is not set
+CONFIG_EMBEDDED=y
+# CONFIG_COMPAT_BRK is not set
+# CONFIG_SLAB_MERGE_DEFAULT is not set
+CONFIG_SLAB_FREELIST_RANDOM=y
+CONFIG_SLAB_FREELIST_HARDENED=y
+CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
+CONFIG_PROFILING=y
+CONFIG_ARCH_SUNXI=y
+CONFIG_ARCH_HISI=y
+CONFIG_ARCH_QCOM=y
+CONFIG_SCHED_MC=y
+CONFIG_NR_CPUS=32
+CONFIG_SECCOMP=y
+CONFIG_PARAVIRT=y
+CONFIG_ARM64_SW_TTBR0_PAN=y
+CONFIG_COMPAT=y
+CONFIG_ARMV8_DEPRECATED=y
+CONFIG_SWP_EMULATION=y
+CONFIG_CP15_BARRIER_EMULATION=y
+CONFIG_SETEND_EMULATION=y
+# CONFIG_ARM64_VHE is not set
+CONFIG_RANDOMIZE_BASE=y
+# CONFIG_RANDOMIZE_MODULE_REGION_FULL is not set
+# CONFIG_DMI is not set
+CONFIG_PM_WAKELOCKS=y
+CONFIG_PM_WAKELOCKS_LIMIT=0
+# CONFIG_PM_WAKELOCKS_GC is not set
+CONFIG_ENERGY_MODEL=y
+CONFIG_CPU_IDLE=y
+CONFIG_ARM_CPUIDLE=y
+CONFIG_ARM_PSCI_CPUIDLE=y
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_TIMES=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_ARM_SCPI_CPUFREQ=y
+CONFIG_ARM_SCMI_CPUFREQ=y
+CONFIG_ARM_SCMI_PROTOCOL=y
+# CONFIG_ARM_SCMI_POWER_DOMAIN is not set
+CONFIG_ARM_SCPI_PROTOCOL=y
+# CONFIG_ARM_SCPI_POWER_DOMAIN is not set
+# CONFIG_EFI_ARMSTUB_DTB_LOADER is not set
+CONFIG_VIRTUALIZATION=y
+CONFIG_KVM=y
+CONFIG_VHOST_VSOCK=y
+CONFIG_CRYPTO_SHA2_ARM64_CE=y
+CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
+CONFIG_KPROBES=y
+CONFIG_JUMP_LABEL=y
+CONFIG_SHADOW_CALL_STACK=y
+CONFIG_LTO_CLANG=y
+CONFIG_CFI_CLANG=y
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+CONFIG_BLK_INLINE_ENCRYPTION=y
+CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
+CONFIG_GKI_HACKS_TO_FIX=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_BINFMT_MISC=y
+CONFIG_MEMORY_HOTPLUG=y
+CONFIG_CLEANCACHE=y
+CONFIG_CMA=y
+CONFIG_CMA_AREAS=16
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_XFRM_USER=y
+CONFIG_XFRM_INTERFACE=y
+CONFIG_XFRM_MIGRATE=y
+CONFIG_XFRM_STATISTICS=y
+CONFIG_NET_KEY=y
+CONFIG_XDP_SOCKETS=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_NET_IPIP=y
+CONFIG_NET_IPGRE_DEMUX=y
+CONFIG_NET_IPGRE=y
+CONFIG_NET_IPVTI=y
+CONFIG_INET_ESP=y
+CONFIG_INET_UDP_DIAG=y
+CONFIG_INET_DIAG_DESTROY=y
+CONFIG_IPV6_ROUTER_PREF=y
+CONFIG_IPV6_ROUTE_INFO=y
+CONFIG_IPV6_OPTIMISTIC_DAD=y
+CONFIG_INET6_ESP=y
+CONFIG_INET6_IPCOMP=y
+CONFIG_IPV6_MIP6=y
+CONFIG_IPV6_VTI=y
+CONFIG_IPV6_GRE=y
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_NETFILTER=y
+CONFIG_NF_CONNTRACK=y
+CONFIG_NF_CONNTRACK_SECMARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CONNTRACK_AMANDA=y
+CONFIG_NF_CONNTRACK_FTP=y
+CONFIG_NF_CONNTRACK_H323=y
+CONFIG_NF_CONNTRACK_IRC=y
+CONFIG_NF_CONNTRACK_NETBIOS_NS=y
+CONFIG_NF_CONNTRACK_PPTP=y
+CONFIG_NF_CONNTRACK_SANE=y
+CONFIG_NF_CONNTRACK_TFTP=y
+CONFIG_NF_CT_NETLINK=y
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
+CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
+CONFIG_NETFILTER_XT_TARGET_CT=y
+CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
+CONFIG_NETFILTER_XT_TARGET_MARK=y
+CONFIG_NETFILTER_XT_TARGET_NFLOG=y
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
+CONFIG_NETFILTER_XT_TARGET_TPROXY=y
+CONFIG_NETFILTER_XT_TARGET_TRACE=y
+CONFIG_NETFILTER_XT_TARGET_SECMARK=y
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
+CONFIG_NETFILTER_XT_MATCH_BPF=y
+CONFIG_NETFILTER_XT_MATCH_COMMENT=y
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y
+CONFIG_NETFILTER_XT_MATCH_HELPER=y
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
+CONFIG_NETFILTER_XT_MATCH_LENGTH=y
+CONFIG_NETFILTER_XT_MATCH_LIMIT=y
+CONFIG_NETFILTER_XT_MATCH_MAC=y
+CONFIG_NETFILTER_XT_MATCH_MARK=y
+CONFIG_NETFILTER_XT_MATCH_OWNER=y
+CONFIG_NETFILTER_XT_MATCH_POLICY=y
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
+CONFIG_NETFILTER_XT_MATCH_QUOTA=y
+CONFIG_NETFILTER_XT_MATCH_QUOTA2=y
+CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG=y
+CONFIG_NETFILTER_XT_MATCH_SOCKET=y
+CONFIG_NETFILTER_XT_MATCH_STATE=y
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
+CONFIG_NETFILTER_XT_MATCH_STRING=y
+CONFIG_NETFILTER_XT_MATCH_TIME=y
+CONFIG_NETFILTER_XT_MATCH_U32=y
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_MATCH_ECN=y
+CONFIG_IP_NF_MATCH_TTL=y
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_NAT=y
+CONFIG_IP_NF_TARGET_MASQUERADE=y
+CONFIG_IP_NF_TARGET_NETMAP=y
+CONFIG_IP_NF_TARGET_REDIRECT=y
+CONFIG_IP_NF_MANGLE=y
+CONFIG_IP_NF_RAW=y
+CONFIG_IP_NF_SECURITY=y
+CONFIG_IP_NF_ARPTABLES=y
+CONFIG_IP_NF_ARPFILTER=y
+CONFIG_IP_NF_ARP_MANGLE=y
+CONFIG_IP6_NF_IPTABLES=y
+CONFIG_IP6_NF_MATCH_RPFILTER=y
+CONFIG_IP6_NF_FILTER=y
+CONFIG_IP6_NF_TARGET_REJECT=y
+CONFIG_IP6_NF_MANGLE=y
+CONFIG_IP6_NF_RAW=y
+CONFIG_TIPC=y
+CONFIG_L2TP=y
+CONFIG_BRIDGE=y
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_HTB=y
+CONFIG_NET_SCH_INGRESS=y
+CONFIG_NET_CLS_U32=y
+CONFIG_NET_CLS_BPF=y
+CONFIG_NET_EMATCH=y
+CONFIG_NET_EMATCH_U32=y
+CONFIG_NET_CLS_ACT=y
+CONFIG_VSOCKETS=y
+CONFIG_BPF_JIT=y
+CONFIG_BT=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_HIDP=y
+CONFIG_BT_HCIBTSDIO=y
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_HCIUART_BCM=y
+CONFIG_BT_HCIUART_QCA=y
+CONFIG_CFG80211=y
+# CONFIG_CFG80211_DEFAULT_PS is not set
+# CONFIG_CFG80211_CRDA_SUPPORT is not set
+CONFIG_MAC80211=y
+CONFIG_RFKILL=y
+CONFIG_PCI=y
+CONFIG_PCIEPORTBUS=y
+# CONFIG_PCIEAER is not set
+CONFIG_PCI_HOST_GENERIC=y
+CONFIG_PCIE_DW_PLAT_EP=y
+CONFIG_PCIE_QCOM=y
+CONFIG_PCIE_KIRIN=y
+CONFIG_PCI_ENDPOINT=y
+CONFIG_FW_LOADER_USER_HELPER=y
+CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
+# CONFIG_FW_CACHE is not set
+# CONFIG_ALLOW_DEV_COREDUMP is not set
+# CONFIG_SUN50I_DE2_BUS is not set
+# CONFIG_SUNXI_RSB is not set
+CONFIG_GNSS=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_LOOP_MIN_COUNT=16
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_UID_SYS_STATS=y
+CONFIG_SCSI=y
+# CONFIG_SCSI_PROC_FS is not set
+CONFIG_BLK_DEV_SD=y
+CONFIG_SCSI_UFSHCD=y
+CONFIG_SCSI_UFSHCD_PCI=y
+CONFIG_SCSI_UFSHCD_PLATFORM=y
+CONFIG_SCSI_UFS_DWC_TC_PLATFORM=y
+CONFIG_SCSI_UFS_HISI=y
+CONFIG_SCSI_UFS_BSG=y
+CONFIG_SCSI_UFS_CRYPTO=y
+CONFIG_MD=y
+CONFIG_BLK_DEV_DM=y
+CONFIG_DM_CRYPT=y
+CONFIG_DM_DEFAULT_KEY=y
+CONFIG_DM_SNAPSHOT=y
+CONFIG_DM_UEVENT=y
+CONFIG_DM_VERITY=y
+CONFIG_DM_VERITY_AVB=y
+CONFIG_DM_VERITY_FEC=y
+CONFIG_DM_BOW=y
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+CONFIG_WIREGUARD=y
+CONFIG_TUN=y
+CONFIG_VETH=y
+# CONFIG_ETHERNET is not set
+CONFIG_PHYLIB=y
+CONFIG_PPP=y
+CONFIG_PPP_BSDCOMP=y
+CONFIG_PPP_DEFLATE=y
+CONFIG_PPP_MPPE=y
+CONFIG_PPTP=y
+CONFIG_PPPOL2TP=y
+CONFIG_USB_RTL8152=y
+CONFIG_USB_USBNET=y
+# CONFIG_USB_NET_AX8817X is not set
+# CONFIG_USB_NET_AX88179_178A is not set
+# CONFIG_USB_NET_CDCETHER is not set
+# CONFIG_USB_NET_CDC_NCM is not set
+# CONFIG_USB_NET_NET1080 is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+# CONFIG_USB_NET_ZAURUS is not set
+# CONFIG_WLAN_VENDOR_ADMTEK is not set
+# CONFIG_WLAN_VENDOR_ATH is not set
+# CONFIG_WLAN_VENDOR_ATMEL is not set
+# CONFIG_WLAN_VENDOR_BROADCOM is not set
+# CONFIG_WLAN_VENDOR_CISCO is not set
+# CONFIG_WLAN_VENDOR_INTEL is not set
+# CONFIG_WLAN_VENDOR_INTERSIL is not set
+# CONFIG_WLAN_VENDOR_MARVELL is not set
+# CONFIG_WLAN_VENDOR_MEDIATEK is not set
+# CONFIG_WLAN_VENDOR_RALINK is not set
+# CONFIG_WLAN_VENDOR_REALTEK is not set
+# CONFIG_WLAN_VENDOR_RSI is not set
+# CONFIG_WLAN_VENDOR_ST is not set
+# CONFIG_WLAN_VENDOR_TI is not set
+# CONFIG_WLAN_VENDOR_ZYDAS is not set
+# CONFIG_WLAN_VENDOR_QUANTENNA is not set
+CONFIG_INPUT_EVDEV=y
+CONFIG_KEYBOARD_GPIO=y
+# CONFIG_INPUT_MOUSE is not set
+CONFIG_INPUT_JOYSTICK=y
+CONFIG_JOYSTICK_XPAD=y
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=y
+# CONFIG_VT is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_DEVMEM is not set
+CONFIG_SERIAL_8250=y
+# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
+CONFIG_SERIAL_8250_CONSOLE=y
+# CONFIG_SERIAL_8250_EXAR is not set
+CONFIG_SERIAL_OF_PLATFORM=y
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_SERIAL_SAMSUNG=y
+CONFIG_SERIAL_SAMSUNG_CONSOLE=y
+CONFIG_SERIAL_SPRD=y
+CONFIG_SERIAL_SPRD_CONSOLE=y
+CONFIG_SERIAL_DEV_BUS=y
+CONFIG_HW_RANDOM=y
+# CONFIG_HW_RANDOM_CAVIUM is not set
+# CONFIG_DEVPORT is not set
+# CONFIG_I2C_COMPAT is not set
+# CONFIG_I2C_HELPER_AUTO is not set
+CONFIG_SPI=y
+CONFIG_SPMI=y
+# CONFIG_SPMI_MSM_PMIC_ARB is not set
+CONFIG_PINCTRL_AMD=y
+# CONFIG_PINCTRL_SUN8I_H3_R is not set
+# CONFIG_PINCTRL_SUN50I_A64 is not set
+# CONFIG_PINCTRL_SUN50I_A64_R is not set
+# CONFIG_PINCTRL_SUN50I_H5 is not set
+# CONFIG_PINCTRL_SUN50I_H6 is not set
+# CONFIG_PINCTRL_SUN50I_H6_R is not set
+CONFIG_POWER_AVS=y
+CONFIG_POWER_RESET_HISI=y
+# CONFIG_HWMON is not set
+CONFIG_THERMAL=y
+CONFIG_THERMAL_STATISTICS=y
+CONFIG_THERMAL_WRITABLE_TRIPS=y
+CONFIG_THERMAL_GOV_USER_SPACE=y
+CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
+CONFIG_CPU_THERMAL=y
+CONFIG_DEVFREQ_THERMAL=y
+CONFIG_THERMAL_EMULATION=y
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_CORE=y
+CONFIG_MFD_ACT8945A=y
+CONFIG_MFD_SYSCON=y
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_RC_CORE=y
+# CONFIG_RC_MAP is not set
+CONFIG_LIRC=y
+CONFIG_BPF_LIRC_MODE2=y
+CONFIG_RC_DECODERS=y
+CONFIG_RC_DEVICES=y
+CONFIG_MEDIA_CAMERA_SUPPORT=y
+CONFIG_MEDIA_CEC_SUPPORT=y
+CONFIG_MEDIA_CEC_RC=y
+CONFIG_MEDIA_CONTROLLER=y
+CONFIG_VIDEO_V4L2_SUBDEV_API=y
+CONFIG_MEDIA_USB_SUPPORT=y
+CONFIG_USB_VIDEO_CLASS=y
+CONFIG_USB_GSPCA=y
+CONFIG_V4L_PLATFORM_DRIVERS=y
+CONFIG_V4L_MEM2MEM_DRIVERS=y
+CONFIG_CEC_PLATFORM_DRIVERS=y
+# CONFIG_VIDEO_IR_I2C is not set
+# CONFIG_VGA_ARB is not set
+CONFIG_DRM=y
+# CONFIG_DRM_FBDEV_EMULATION is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_SOUND=y
+CONFIG_SND=y
+CONFIG_SND_HRTIMER=y
+CONFIG_SND_DYNAMIC_MINORS=y
+# CONFIG_SND_SUPPORT_OLD_API is not set
+# CONFIG_SND_VERBOSE_PROCFS is not set
+# CONFIG_SND_DRIVERS is not set
+CONFIG_SND_USB_AUDIO=y
+CONFIG_SND_SOC=y
+CONFIG_HID_BATTERY_STRENGTH=y
+CONFIG_HIDRAW=y
+CONFIG_UHID=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_PRODIKEYS=y
+CONFIG_HID_ELECOM=y
+CONFIG_HID_UCLOGIC=y
+CONFIG_HID_LOGITECH=y
+CONFIG_HID_LOGITECH_DJ=y
+CONFIG_HID_MAGICMOUSE=y
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MULTITOUCH=y
+CONFIG_HID_NINTENDO=y
+CONFIG_HID_PICOLCD=y
+CONFIG_HID_PLANTRONICS=y
+CONFIG_HID_ROCCAT=y
+CONFIG_HID_SONY=y
+CONFIG_SONY_FF=y
+CONFIG_HID_STEAM=y
+CONFIG_HID_WACOM=y
+CONFIG_HID_WIIMOTE=y
+CONFIG_USB_HIDDEV=y
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+CONFIG_USB_OTG=y
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_HCD_PLATFORM=y
+CONFIG_USB_ACM=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_UAS=y
+CONFIG_USB_DWC3=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_DUMMY_HCD=y
+CONFIG_USB_CONFIGFS=y
+CONFIG_USB_CONFIGFS_UEVENT=y
+CONFIG_USB_CONFIGFS_SERIAL=y
+CONFIG_USB_CONFIGFS_ACM=y
+CONFIG_USB_CONFIGFS_NCM=y
+CONFIG_USB_CONFIGFS_RNDIS=y
+CONFIG_USB_CONFIGFS_MASS_STORAGE=y
+CONFIG_USB_CONFIGFS_F_FS=y
+CONFIG_USB_CONFIGFS_F_ACC=y
+CONFIG_USB_CONFIGFS_F_AUDIO_SRC=y
+CONFIG_USB_CONFIGFS_F_MIDI=y
+CONFIG_USB_CONFIGFS_F_HID=y
+CONFIG_TYPEC=y
+CONFIG_TYPEC_TCPM=y
+CONFIG_TYPEC_UCSI=y
+CONFIG_MMC=y
+# CONFIG_PWRSEQ_EMMC is not set
+# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_MMC_CRYPTO=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_LEDS_CLASS_FLASH=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_EDAC=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_PL030=y
+CONFIG_RTC_DRV_PL031=y
+CONFIG_DMADEVICES=y
+CONFIG_DMABUF_HEAPS=y
+CONFIG_DMABUF_SYSFS_STATS=y
+CONFIG_UIO=y
+CONFIG_STAGING=y
+CONFIG_ASHMEM=y
+CONFIG_ANDROID_VSOC=y
+CONFIG_ION=y
+CONFIG_ION_SYSTEM_HEAP=y
+CONFIG_COMMON_CLK_SCPI=y
+# CONFIG_CLK_SUNXI is not set
+# CONFIG_SUNXI_CCU is not set
+CONFIG_HWSPINLOCK=y
+CONFIG_SUN4I_TIMER=y
+# CONFIG_SUN50I_ERRATUM_UNKNOWN1 is not set
+CONFIG_MTK_TIMER=y
+CONFIG_MAILBOX=y
+CONFIG_IOMMU_LIMIT_IOVA_ALIGNMENT=y
+CONFIG_IOMMU_IO_PGTABLE_ARMV7S=y
+CONFIG_REMOTEPROC=y
+CONFIG_RPMSG_CHAR=y
+CONFIG_DEVFREQ_GOV_PERFORMANCE=y
+CONFIG_DEVFREQ_GOV_POWERSAVE=y
+CONFIG_DEVFREQ_GOV_USERSPACE=y
+CONFIG_DEVFREQ_GOV_PASSIVE=y
+CONFIG_PM_DEVFREQ_EVENT=y
+CONFIG_IIO=y
+CONFIG_IIO_BUFFER=y
+CONFIG_IIO_TRIGGER=y
+CONFIG_PWM=y
+CONFIG_GENERIC_PHY=y
+CONFIG_RAS=y
+CONFIG_ANDROID=y
+CONFIG_ANDROID_BINDER_IPC=y
+CONFIG_ANDROID_BINDERFS=y
+CONFIG_ANDROID_VENDOR_HOOKS=y
+CONFIG_LIBNVDIMM=y
+# CONFIG_ND_BLK is not set
+CONFIG_INTERCONNECT=y
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_F2FS_FS=y
+CONFIG_F2FS_FS_SECURITY=y
+CONFIG_F2FS_FS_COMPRESSION=y
+CONFIG_FS_ENCRYPTION=y
+CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
+CONFIG_FS_VERITY=y
+CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y
+# CONFIG_DNOTIFY is not set
+CONFIG_QUOTA=y
+CONFIG_QFMT_V2=y
+CONFIG_FUSE_FS=y
+CONFIG_VIRTIO_FS=y
+CONFIG_OVERLAY_FS=y
+CONFIG_INCREMENTAL_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_TMPFS=y
+# CONFIG_EFIVAR_FS is not set
+CONFIG_PSTORE=y
+CONFIG_PSTORE_CONSOLE=y
+CONFIG_PSTORE_PMSG=y
+CONFIG_PSTORE_RAM=y
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=y
+CONFIG_NLS_CODEPAGE_775=y
+CONFIG_NLS_CODEPAGE_850=y
+CONFIG_NLS_CODEPAGE_852=y
+CONFIG_NLS_CODEPAGE_855=y
+CONFIG_NLS_CODEPAGE_857=y
+CONFIG_NLS_CODEPAGE_860=y
+CONFIG_NLS_CODEPAGE_861=y
+CONFIG_NLS_CODEPAGE_862=y
+CONFIG_NLS_CODEPAGE_863=y
+CONFIG_NLS_CODEPAGE_864=y
+CONFIG_NLS_CODEPAGE_865=y
+CONFIG_NLS_CODEPAGE_866=y
+CONFIG_NLS_CODEPAGE_869=y
+CONFIG_NLS_CODEPAGE_936=y
+CONFIG_NLS_CODEPAGE_950=y
+CONFIG_NLS_CODEPAGE_932=y
+CONFIG_NLS_CODEPAGE_949=y
+CONFIG_NLS_CODEPAGE_874=y
+CONFIG_NLS_ISO8859_8=y
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=y
+CONFIG_NLS_ISO8859_3=y
+CONFIG_NLS_ISO8859_4=y
+CONFIG_NLS_ISO8859_5=y
+CONFIG_NLS_ISO8859_6=y
+CONFIG_NLS_ISO8859_7=y
+CONFIG_NLS_ISO8859_9=y
+CONFIG_NLS_ISO8859_13=y
+CONFIG_NLS_ISO8859_14=y
+CONFIG_NLS_ISO8859_15=y
+CONFIG_NLS_KOI8_R=y
+CONFIG_NLS_KOI8_U=y
+CONFIG_NLS_MAC_ROMAN=y
+CONFIG_NLS_MAC_CELTIC=y
+CONFIG_NLS_MAC_CENTEURO=y
+CONFIG_NLS_MAC_CROATIAN=y
+CONFIG_NLS_MAC_CYRILLIC=y
+CONFIG_NLS_MAC_GAELIC=y
+CONFIG_NLS_MAC_GREEK=y
+CONFIG_NLS_MAC_ICELAND=y
+CONFIG_NLS_MAC_INUIT=y
+CONFIG_NLS_MAC_ROMANIAN=y
+CONFIG_NLS_MAC_TURKISH=y
+CONFIG_NLS_UTF8=y
+CONFIG_UNICODE=y
+CONFIG_SECURITY=y
+CONFIG_SECURITYFS=y
+CONFIG_SECURITY_NETWORK=y
+CONFIG_HARDENED_USERCOPY=y
+# CONFIG_HARDENED_USERCOPY_FALLBACK is not set
+CONFIG_FORTIFY_SOURCE=y
+CONFIG_STATIC_USERMODEHELPER=y
+CONFIG_STATIC_USERMODEHELPER_PATH=""
+CONFIG_SECURITY_SELINUX=y
+CONFIG_INIT_STACK_ALL_ZERO=y
+CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
+CONFIG_CRYPTO_CHACHA20POLY1305=y
+CONFIG_CRYPTO_ADIANTUM=y
+CONFIG_CRYPTO_XCBC=y
+CONFIG_CRYPTO_BLAKE2B=y
+CONFIG_CRYPTO_LZ4=y
+CONFIG_CRYPTO_ANSI_CPRNG=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC8=y
+CONFIG_XZ_DEC=y
+CONFIG_DMA_CMA=y
+CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_CALLER=y
+CONFIG_DYNAMIC_DEBUG_CORE=y
+CONFIG_DEBUG_INFO=y
+CONFIG_DEBUG_INFO_DWARF4=y
+# CONFIG_ENABLE_MUST_CHECK is not set
+CONFIG_DEBUG_FS=y
+CONFIG_HEADERS_INSTALL=y
+# CONFIG_SECTION_MISMATCH_WARN_ONLY is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_STACK_USAGE=y
+CONFIG_DEBUG_MEMORY_INIT=y
+CONFIG_KFENCE=y
+CONFIG_KFENCE_SAMPLE_INTERVAL=0
+CONFIG_SOFTLOCKUP_DETECTOR=y
+# CONFIG_DETECT_HUNG_TASK is not set
+CONFIG_PANIC_ON_OOPS=y
+CONFIG_PANIC_TIMEOUT=-1
+CONFIG_SCHEDSTATS=y
+# CONFIG_DEBUG_PREEMPT is not set
+CONFIG_KUNIT=y
+CONFIG_KUNIT_DEBUGFS=y
+CONFIG_BUG_ON_DATA_CORRUPTION=y
+CONFIG_CORESIGHT=y
+CONFIG_CORESIGHT_STM=y
diff --git a/arch/arm64/configs/hikey960_gki.fragment b/arch/arm64/configs/hikey960_gki.fragment
new file mode 100644
index 0000000..a30709d
--- /dev/null
+++ b/arch/arm64/configs/hikey960_gki.fragment
@@ -0,0 +1,57 @@
+CONFIG_CPUFREQ_DT=m
+CONFIG_RFKILL_GPIO=m
+CONFIG_CONNECTOR=m
+CONFIG_BLK_DEV_NVME=m
+CONFIG_NVME_TARGET=m
+CONFIG_HISI_HIKEY_USB=m
+CONFIG_WLAN_VENDOR_TI=y
+CONFIG_WL18XX=m
+CONFIG_WLCORE_SDIO=m
+CONFIG_INPUT_HISI_POWERKEY=m
+CONFIG_SERIO_AMBAKMI=m
+CONFIG_I2C_CHARDEV=m
+CONFIG_I2C_DESIGNWARE_PLATFORM=m
+CONFIG_SPI_PL022=m
+CONFIG_SPI_SPIDEV=m
+CONFIG_SYSCON_REBOOT_MODE=m
+CONFIG_HWMON=m
+CONFIG_THERMAL_WRITABLE_TRIPS=y
+CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR=y
+CONFIG_THERMAL_GOV_STEP_WISE=y
+CONFIG_HISI_THERMAL=m
+CONFIG_MFD_HI6421_PMIC=m
+CONFIG_MFD_HI655X_PMIC=m
+CONFIG_REGULATOR_HI6421V530=m
+CONFIG_REGULATOR_HI655X=m
+CONFIG_MALI_DEVFREQ=y
+CONFIG_DRM_I2C_ADV7511=m
+CONFIG_DRM_I2C_ADV7511_AUDIO=y
+CONFIG_DRM_HISI_KIRIN=m
+CONFIG_DRM_HISI_KIRIN960=y
+CONFIG_SND_I2S_HI3660_I2S=m
+CONFIG_SND_SIMPLE_CARD=m
+CONFIG_USB_EHCI_HCD=m
+CONFIG_USB_EHCI_HCD_PLATFORM=m
+CONFIG_USB_OHCI_HCD=m
+CONFIG_USB_OHCI_HCD_PLATFORM=m
+CONFIG_USB_GADGETFS=m
+CONFIG_TYPEC_TCPCI=m
+CONFIG_TYPEC_RT1711H=m
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_BLOCK_MINORS=64
+CONFIG_MMC_ARMMMCI=m
+CONFIG_MMC_SPI=m
+CONFIG_MMC_DW=m
+CONFIG_MMC_DW_EXYNOS=m
+CONFIG_MMC_DW_K3=m
+CONFIG_RTC_DRV_EFI=m
+CONFIG_K3_DMA=m
+CONFIG_ION_CMA_HEAP=m
+CONFIG_DMABUF_HEAPS_CMA=m
+CONFIG_DMABUF_HEAPS_SYSTEM=m
+CONFIG_HI3660_MBOX=m
+CONFIG_MALI_MIDGARD=m
+CONFIG_MALI_PLATFORM_NAME="hisilicon"
+CONFIG_MALI_EXPERT=y
+CONFIG_MALI_PWRSOFT_765=y
+CONFIG_PHY_HI3660_USB=m
diff --git a/arch/arm64/configs/rockpi4_defconfig b/arch/arm64/configs/rockpi4_defconfig
new file mode 100644
index 0000000..d1b563d
--- /dev/null
+++ b/arch/arm64/configs/rockpi4_defconfig
@@ -0,0 +1,540 @@
+CONFIG_AUDIT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_PREEMPT=y
+CONFIG_TASKSTATS=y
+CONFIG_TASK_XACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+CONFIG_PSI=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_MEMCG=y
+CONFIG_MEMCG_SWAP=y
+CONFIG_BLK_CGROUP=y
+CONFIG_RT_GROUP_SCHED=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CPUSETS=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_CGROUP_BPF=y
+CONFIG_SCHED_AUTOGROUP=y
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+# CONFIG_RD_XZ is not set
+# CONFIG_RD_LZO is not set
+# CONFIG_RD_LZ4 is not set
+# CONFIG_SYSFS_SYSCALL is not set
+CONFIG_KALLSYMS_ALL=y
+CONFIG_BPF_SYSCALL=y
+# CONFIG_RSEQ is not set
+CONFIG_EMBEDDED=y
+# CONFIG_VM_EVENT_COUNTERS is not set
+# CONFIG_COMPAT_BRK is not set
+# CONFIG_SLAB_MERGE_DEFAULT is not set
+CONFIG_SLAB_FREELIST_RANDOM=y
+CONFIG_SLAB_FREELIST_HARDENED=y
+CONFIG_PROFILING=y
+CONFIG_ARCH_QCOM=y
+CONFIG_ARCH_ROCKCHIP=y
+CONFIG_SCHED_MC=y
+CONFIG_NR_CPUS=32
+CONFIG_SECCOMP=y
+CONFIG_PARAVIRT=y
+CONFIG_COMPAT=y
+CONFIG_ARMV8_DEPRECATED=y
+CONFIG_SWP_EMULATION=y
+CONFIG_CP15_BARRIER_EMULATION=y
+CONFIG_SETEND_EMULATION=y
+CONFIG_RANDOMIZE_BASE=y
+# CONFIG_DMI is not set
+CONFIG_PM_WAKELOCKS=y
+CONFIG_PM_WAKELOCKS_LIMIT=0
+# CONFIG_PM_WAKELOCKS_GC is not set
+CONFIG_ENERGY_MODEL=y
+CONFIG_CPU_IDLE=y
+CONFIG_ARM_CPUIDLE=y
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TIMES=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_ARM_SCPI_CPUFREQ=y
+CONFIG_ARM_SCMI_CPUFREQ=y
+CONFIG_ARM_SCMI_PROTOCOL=y
+# CONFIG_ARM_SCMI_POWER_DOMAIN is not set
+CONFIG_ARM_SCPI_PROTOCOL=y
+# CONFIG_ARM_SCPI_POWER_DOMAIN is not set
+# CONFIG_EFI_ARMSTUB_DTB_LOADER is not set
+CONFIG_VIRTUALIZATION=y
+CONFIG_KVM=y
+CONFIG_VHOST_VSOCK=y
+CONFIG_ARM64_CRYPTO=y
+CONFIG_CRYPTO_AES_ARM64=y
+CONFIG_KPROBES=y
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_BINFMT_MISC=y
+# CONFIG_SPARSEMEM_VMEMMAP is not set
+CONFIG_MEMORY_HOTPLUG=y
+CONFIG_TRANSPARENT_HUGEPAGE=y
+CONFIG_CMA=y
+CONFIG_CMA_AREAS=16
+CONFIG_ZSMALLOC=y
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_XFRM_USER=y
+CONFIG_XFRM_INTERFACE=y
+CONFIG_XFRM_STATISTICS=y
+CONFIG_NET_KEY=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_NET_IPGRE_DEMUX=y
+CONFIG_NET_IPVTI=y
+CONFIG_INET_ESP=y
+CONFIG_INET_UDP_DIAG=y
+CONFIG_INET_DIAG_DESTROY=y
+CONFIG_IPV6_ROUTER_PREF=y
+CONFIG_IPV6_ROUTE_INFO=y
+CONFIG_IPV6_OPTIMISTIC_DAD=y
+CONFIG_INET6_ESP=y
+CONFIG_INET6_IPCOMP=y
+CONFIG_IPV6_MIP6=y
+CONFIG_IPV6_VTI=y
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_NETFILTER=y
+# CONFIG_BRIDGE_NETFILTER is not set
+CONFIG_NF_CONNTRACK=y
+CONFIG_NF_CONNTRACK_SECMARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CONNTRACK_AMANDA=y
+CONFIG_NF_CONNTRACK_FTP=y
+CONFIG_NF_CONNTRACK_H323=y
+CONFIG_NF_CONNTRACK_IRC=y
+CONFIG_NF_CONNTRACK_NETBIOS_NS=y
+CONFIG_NF_CONNTRACK_PPTP=y
+CONFIG_NF_CONNTRACK_SANE=y
+CONFIG_NF_CONNTRACK_TFTP=y
+CONFIG_NF_CT_NETLINK=y
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
+CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
+CONFIG_NETFILTER_XT_TARGET_CT=y
+CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
+CONFIG_NETFILTER_XT_TARGET_MARK=y
+CONFIG_NETFILTER_XT_TARGET_NFLOG=y
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
+CONFIG_NETFILTER_XT_TARGET_TPROXY=y
+CONFIG_NETFILTER_XT_TARGET_TRACE=y
+CONFIG_NETFILTER_XT_TARGET_SECMARK=y
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
+CONFIG_NETFILTER_XT_MATCH_BPF=y
+CONFIG_NETFILTER_XT_MATCH_COMMENT=y
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y
+CONFIG_NETFILTER_XT_MATCH_HELPER=y
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
+CONFIG_NETFILTER_XT_MATCH_LENGTH=y
+CONFIG_NETFILTER_XT_MATCH_LIMIT=y
+CONFIG_NETFILTER_XT_MATCH_MAC=y
+CONFIG_NETFILTER_XT_MATCH_MARK=y
+CONFIG_NETFILTER_XT_MATCH_OWNER=y
+CONFIG_NETFILTER_XT_MATCH_POLICY=y
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
+CONFIG_NETFILTER_XT_MATCH_QUOTA=y
+CONFIG_NETFILTER_XT_MATCH_QUOTA2=y
+CONFIG_NETFILTER_XT_MATCH_SOCKET=y
+CONFIG_NETFILTER_XT_MATCH_STATE=y
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
+CONFIG_NETFILTER_XT_MATCH_STRING=y
+CONFIG_NETFILTER_XT_MATCH_TIME=y
+CONFIG_NETFILTER_XT_MATCH_U32=y
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_MATCH_ECN=y
+CONFIG_IP_NF_MATCH_TTL=y
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_NAT=y
+CONFIG_IP_NF_TARGET_MASQUERADE=y
+CONFIG_IP_NF_TARGET_NETMAP=y
+CONFIG_IP_NF_TARGET_REDIRECT=y
+CONFIG_IP_NF_MANGLE=y
+CONFIG_IP_NF_RAW=y
+CONFIG_IP_NF_SECURITY=y
+CONFIG_IP_NF_ARPTABLES=y
+CONFIG_IP_NF_ARPFILTER=y
+CONFIG_IP_NF_ARP_MANGLE=y
+CONFIG_IP6_NF_IPTABLES=y
+CONFIG_IP6_NF_MATCH_RPFILTER=y
+CONFIG_IP6_NF_FILTER=y
+CONFIG_IP6_NF_TARGET_REJECT=y
+CONFIG_IP6_NF_MANGLE=y
+CONFIG_IP6_NF_RAW=y
+CONFIG_TIPC=y
+CONFIG_L2TP=y
+CONFIG_BRIDGE=y
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_HTB=y
+CONFIG_NET_SCH_INGRESS=y
+CONFIG_NET_CLS_U32=y
+CONFIG_NET_CLS_BPF=y
+CONFIG_NET_EMATCH=y
+CONFIG_NET_EMATCH_U32=y
+CONFIG_NET_CLS_ACT=y
+CONFIG_VSOCKETS=y
+CONFIG_VIRTIO_VSOCKETS=y
+CONFIG_BT=y
+CONFIG_CFG80211=y
+# CONFIG_CFG80211_DEFAULT_PS is not set
+# CONFIG_CFG80211_CRDA_SUPPORT is not set
+CONFIG_MAC80211=y
+# CONFIG_MAC80211_RC_MINSTREL is not set
+CONFIG_RFKILL=y
+CONFIG_PCI=y
+CONFIG_PCI_HOST_GENERIC=y
+CONFIG_DEVTMPFS=y
+# CONFIG_ALLOW_DEV_COREDUMP is not set
+CONFIG_DEBUG_DEVRES=y
+CONFIG_ZRAM=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_VIRTIO_BLK=y
+CONFIG_UID_SYS_STATS=y
+CONFIG_SCSI=y
+# CONFIG_SCSI_PROC_FS is not set
+CONFIG_BLK_DEV_SD=y
+CONFIG_SCSI_UFSHCD=y
+CONFIG_SCSI_UFSHCD_PLATFORM=y
+CONFIG_MD=y
+CONFIG_BLK_DEV_DM=y
+CONFIG_DM_CRYPT=y
+CONFIG_DM_UEVENT=y
+CONFIG_DM_VERITY=y
+CONFIG_DM_VERITY_AVB=y
+CONFIG_DM_VERITY_FEC=y
+CONFIG_DM_BOW=y
+CONFIG_NETDEVICES=y
+CONFIG_TUN=y
+CONFIG_VIRTIO_NET=y
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_NET_VENDOR_ADAPTEC is not set
+# CONFIG_NET_VENDOR_AGERE is not set
+# CONFIG_NET_VENDOR_ALACRITECH is not set
+# CONFIG_NET_VENDOR_ALTEON is not set
+# CONFIG_NET_VENDOR_AMAZON is not set
+# CONFIG_NET_VENDOR_AMD is not set
+# CONFIG_NET_VENDOR_AQUANTIA is not set
+# CONFIG_NET_VENDOR_ARC is not set
+# CONFIG_NET_VENDOR_ATHEROS is not set
+# CONFIG_NET_VENDOR_AURORA is not set
+# CONFIG_NET_VENDOR_BROADCOM is not set
+# CONFIG_NET_VENDOR_BROCADE is not set
+# CONFIG_NET_VENDOR_CADENCE is not set
+# CONFIG_NET_VENDOR_CAVIUM is not set
+# CONFIG_NET_VENDOR_CHELSIO is not set
+# CONFIG_NET_VENDOR_CISCO is not set
+# CONFIG_NET_VENDOR_CORTINA is not set
+# CONFIG_NET_VENDOR_DEC is not set
+# CONFIG_NET_VENDOR_DLINK is not set
+# CONFIG_NET_VENDOR_EMULEX is not set
+# CONFIG_NET_VENDOR_EZCHIP is not set
+# CONFIG_NET_VENDOR_HISILICON is not set
+# CONFIG_NET_VENDOR_HP is not set
+# CONFIG_NET_VENDOR_HUAWEI is not set
+# CONFIG_NET_VENDOR_INTEL is not set
+# CONFIG_NET_VENDOR_MARVELL is not set
+# CONFIG_NET_VENDOR_MELLANOX is not set
+# CONFIG_NET_VENDOR_MICREL is not set
+# CONFIG_NET_VENDOR_MICROCHIP is not set
+# CONFIG_NET_VENDOR_MICROSEMI is not set
+# CONFIG_NET_VENDOR_MYRI is not set
+# CONFIG_NET_VENDOR_NATSEMI is not set
+# CONFIG_NET_VENDOR_NETERION is not set
+# CONFIG_NET_VENDOR_NETRONOME is not set
+# CONFIG_NET_VENDOR_NI is not set
+# CONFIG_NET_VENDOR_NVIDIA is not set
+# CONFIG_NET_VENDOR_OKI is not set
+# CONFIG_NET_VENDOR_PACKET_ENGINES is not set
+# CONFIG_NET_VENDOR_QLOGIC is not set
+# CONFIG_NET_VENDOR_QUALCOMM is not set
+# CONFIG_NET_VENDOR_RDC is not set
+# CONFIG_NET_VENDOR_REALTEK is not set
+# CONFIG_NET_VENDOR_RENESAS is not set
+# CONFIG_NET_VENDOR_ROCKER is not set
+# CONFIG_NET_VENDOR_SAMSUNG is not set
+# CONFIG_NET_VENDOR_SEEQ is not set
+# CONFIG_NET_VENDOR_SOLARFLARE is not set
+# CONFIG_NET_VENDOR_SILAN is not set
+# CONFIG_NET_VENDOR_SIS is not set
+# CONFIG_NET_VENDOR_SMSC is not set
+# CONFIG_NET_VENDOR_SOCIONEXT is not set
+CONFIG_STMMAC_ETH=y
+# CONFIG_DWMAC_GENERIC is not set
+# CONFIG_NET_VENDOR_SUN is not set
+# CONFIG_NET_VENDOR_SYNOPSYS is not set
+# CONFIG_NET_VENDOR_TEHUTI is not set
+# CONFIG_NET_VENDOR_TI is not set
+# CONFIG_NET_VENDOR_VIA is not set
+# CONFIG_NET_VENDOR_WIZNET is not set
+CONFIG_ROCKCHIP_PHY=y
+CONFIG_PPP=y
+CONFIG_PPP_BSDCOMP=y
+CONFIG_PPP_DEFLATE=y
+CONFIG_PPP_MPPE=y
+CONFIG_PPTP=y
+CONFIG_PPPOL2TP=y
+CONFIG_USB_RTL8152=y
+CONFIG_USB_USBNET=y
+# CONFIG_USB_NET_AX8817X is not set
+# CONFIG_USB_NET_AX88179_178A is not set
+# CONFIG_USB_NET_CDCETHER is not set
+# CONFIG_USB_NET_CDC_NCM is not set
+# CONFIG_USB_NET_NET1080 is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+# CONFIG_USB_NET_ZAURUS is not set
+# CONFIG_WLAN_VENDOR_ADMTEK is not set
+# CONFIG_WLAN_VENDOR_ATH is not set
+# CONFIG_WLAN_VENDOR_ATMEL is not set
+# CONFIG_WLAN_VENDOR_BROADCOM is not set
+# CONFIG_WLAN_VENDOR_CISCO is not set
+# CONFIG_WLAN_VENDOR_INTEL is not set
+# CONFIG_WLAN_VENDOR_INTERSIL is not set
+# CONFIG_WLAN_VENDOR_MARVELL is not set
+# CONFIG_WLAN_VENDOR_MEDIATEK is not set
+# CONFIG_WLAN_VENDOR_RALINK is not set
+# CONFIG_WLAN_VENDOR_REALTEK is not set
+# CONFIG_WLAN_VENDOR_RSI is not set
+# CONFIG_WLAN_VENDOR_ST is not set
+# CONFIG_WLAN_VENDOR_TI is not set
+# CONFIG_WLAN_VENDOR_ZYDAS is not set
+# CONFIG_WLAN_VENDOR_QUANTENNA is not set
+CONFIG_VIRT_WIFI=y
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_MOUSE is not set
+CONFIG_INPUT_JOYSTICK=y
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=y
+# CONFIG_VT is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_DEVMEM is not set
+CONFIG_SERIAL_8250=y
+# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
+CONFIG_SERIAL_8250_CONSOLE=y
+# CONFIG_SERIAL_8250_EXAR is not set
+CONFIG_SERIAL_8250_NR_UARTS=48
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+CONFIG_SERIAL_8250_DW=y
+CONFIG_SERIAL_OF_PLATFORM=y
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_VIRTIO_CONSOLE=y
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_VIRTIO=y
+# CONFIG_HW_RANDOM_CAVIUM is not set
+# CONFIG_DEVPORT is not set
+# CONFIG_I2C_COMPAT is not set
+CONFIG_I2C_MUX_PINCTRL=y
+CONFIG_I2C_DEMUX_PINCTRL=y
+# CONFIG_I2C_HELPER_AUTO is not set
+CONFIG_I2C_DESIGNWARE_PLATFORM=y
+CONFIG_I2C_DESIGNWARE_SLAVE=y
+CONFIG_I2C_RK3X=y
+CONFIG_SPI=y
+CONFIG_SPI_ROCKCHIP=y
+CONFIG_SPMI=y
+CONFIG_DEBUG_PINCTRL=y
+CONFIG_PINCTRL_AMD=y
+CONFIG_PINCTRL_SINGLE=y
+CONFIG_PINCTRL_RK805=y
+CONFIG_GPIO_SYSFS=y
+CONFIG_GPIO_GENERIC_PLATFORM=y
+CONFIG_POWER_AVS=y
+CONFIG_ROCKCHIP_IODOMAIN=y
+CONFIG_POWER_RESET_GPIO=y
+CONFIG_POWER_RESET_GPIO_RESTART=y
+CONFIG_POWER_RESET_RESTART=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_POWER_RESET_SYSCON_POWEROFF=y
+CONFIG_SYSCON_REBOOT_MODE=y
+# CONFIG_HWMON is not set
+CONFIG_THERMAL=y
+CONFIG_THERMAL_GOV_USER_SPACE=y
+CONFIG_CPU_THERMAL=y
+CONFIG_DEVFREQ_THERMAL=y
+CONFIG_ROCKCHIP_THERMAL=y
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_PRETIMEOUT_GOV=y
+# CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP is not set
+CONFIG_DW_WATCHDOG=y
+CONFIG_MFD_ACT8945A=y
+CONFIG_MFD_RK808=y
+CONFIG_REGULATOR_DEBUG=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_REGULATOR_VIRTUAL_CONSUMER=y
+CONFIG_REGULATOR_USERSPACE_CONSUMER=y
+CONFIG_REGULATOR_GPIO=y
+CONFIG_REGULATOR_PWM=y
+CONFIG_REGULATOR_RK808=y
+CONFIG_REGULATOR_VCTRL=y
+CONFIG_MEDIA_SUPPORT=y
+CONFIG_MEDIA_CAMERA_SUPPORT=y
+CONFIG_MEDIA_CONTROLLER=y
+# CONFIG_VGA_ARB is not set
+CONFIG_DRM=y
+# CONFIG_DRM_FBDEV_EMULATION is not set
+CONFIG_DRM_ROCKCHIP=y
+CONFIG_ROCKCHIP_DW_HDMI=y
+CONFIG_DRM_VIRTIO_GPU=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_SOUND=y
+CONFIG_SND=y
+CONFIG_SND_HRTIMER=y
+CONFIG_SND_DYNAMIC_MINORS=y
+# CONFIG_SND_SUPPORT_OLD_API is not set
+# CONFIG_SND_VERBOSE_PROCFS is not set
+# CONFIG_SND_DRIVERS is not set
+CONFIG_SND_INTEL8X0=y
+CONFIG_SND_USB_AUDIO=y
+CONFIG_SND_SOC=y
+CONFIG_SND_SOC_TS3A227E=y
+CONFIG_HIDRAW=y
+CONFIG_UHID=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_ELECOM=y
+CONFIG_HID_MAGICMOUSE=y
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MULTITOUCH=y
+CONFIG_USB_HIDDEV=y
+CONFIG_USB=y
+CONFIG_USB_OTG=y
+CONFIG_USB_OTG_FSM=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_HCD_PLATFORM=y
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_HCD_PCI is not set
+CONFIG_USB_OHCI_HCD_PLATFORM=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_DUMMY_HCD=m
+CONFIG_USB_CONFIGFS=y
+CONFIG_USB_CONFIGFS_UEVENT=y
+CONFIG_USB_CONFIGFS_F_FS=y
+CONFIG_USB_CONFIGFS_F_ACC=y
+CONFIG_USB_CONFIGFS_F_AUDIO_SRC=y
+CONFIG_USB_CONFIGFS_F_MIDI=y
+CONFIG_MMC=y
+# CONFIG_PWRSEQ_EMMC is not set
+# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_MMC_SDHCI_OF_ARASAN=y
+CONFIG_MMC_SDHCI_OF_DWCMSHC=y
+CONFIG_MMC_DW=y
+CONFIG_MMC_DW_ROCKCHIP=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_EDAC=y
+CONFIG_RTC_CLASS=y
+# CONFIG_RTC_SYSTOHC is not set
+CONFIG_RTC_DRV_RK808=y
+CONFIG_RTC_DRV_PL030=y
+CONFIG_RTC_DRV_PL031=y
+CONFIG_DMADEVICES=y
+CONFIG_PL330_DMA=y
+CONFIG_VIRTIO_PCI=y
+CONFIG_VIRTIO_INPUT=y
+CONFIG_VIRTIO_MMIO=y
+CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
+CONFIG_STAGING=y
+CONFIG_ASHMEM=y
+CONFIG_ANDROID_VSOC=y
+CONFIG_ION=y
+CONFIG_ION_SYSTEM_HEAP=y
+CONFIG_ION_SYSTEM_CONTIG_HEAP=y
+CONFIG_COMMON_CLK_RK808=y
+CONFIG_COMMON_CLK_SCPI=y
+CONFIG_HWSPINLOCK=y
+CONFIG_MAILBOX=y
+CONFIG_ROCKCHIP_MBOX=y
+CONFIG_ROCKCHIP_IOMMU=y
+CONFIG_ARM_SMMU=y
+CONFIG_QCOM_COMMAND_DB=y
+CONFIG_QCOM_RPMH=y
+CONFIG_ROCKCHIP_PM_DOMAINS=y
+CONFIG_DEVFREQ_GOV_PERFORMANCE=y
+CONFIG_DEVFREQ_GOV_POWERSAVE=y
+CONFIG_DEVFREQ_GOV_USERSPACE=y
+CONFIG_DEVFREQ_GOV_PASSIVE=y
+CONFIG_ARM_RK3399_DMC_DEVFREQ=y
+CONFIG_PWM=y
+CONFIG_PWM_ROCKCHIP=y
+CONFIG_QCOM_PDC=y
+CONFIG_PHY_ROCKCHIP_EMMC=y
+CONFIG_PHY_ROCKCHIP_INNO_HDMI=y
+CONFIG_PHY_ROCKCHIP_INNO_USB2=y
+CONFIG_PHY_ROCKCHIP_USB=y
+CONFIG_RAS=y
+CONFIG_ANDROID=y
+CONFIG_ANDROID_BINDER_IPC=y
+CONFIG_ROCKCHIP_EFUSE=y
+CONFIG_INTERCONNECT=y
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_F2FS_FS=y
+CONFIG_F2FS_FS_SECURITY=y
+CONFIG_FS_ENCRYPTION=y
+# CONFIG_DNOTIFY is not set
+CONFIG_QUOTA=y
+CONFIG_QFMT_V2=y
+CONFIG_FUSE_FS=y
+CONFIG_OVERLAY_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_TMPFS_POSIX_ACL=y
+# CONFIG_EFIVAR_FS is not set
+CONFIG_PSTORE=y
+CONFIG_PSTORE_CONSOLE=y
+CONFIG_PSTORE_RAM=y
+CONFIG_SECURITY_PERF_EVENTS_RESTRICT=y
+CONFIG_SECURITY=y
+CONFIG_SECURITY_NETWORK=y
+CONFIG_HARDENED_USERCOPY=y
+CONFIG_SECURITY_SELINUX=y
+CONFIG_CRYPTO_ADIANTUM=y
+CONFIG_CRYPTO_MD4=y
+CONFIG_CRYPTO_SHA512=y
+CONFIG_CRYPTO_LZ4=y
+CONFIG_CRYPTO_ZSTD=y
+CONFIG_CRYPTO_ANSI_CPRNG=y
+CONFIG_CRYPTO_DEV_ROCKCHIP=y
+CONFIG_CRYPTO_DEV_VIRTIO=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC8=y
+CONFIG_XZ_DEC=y
+CONFIG_DMA_CMA=y
+CONFIG_PRINTK_TIME=y
+CONFIG_DEBUG_INFO=y
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_SECTION_MISMATCH_WARN_ONLY is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_STACK_USAGE=y
+CONFIG_DEBUG_MEMORY_INIT=y
+CONFIG_SOFTLOCKUP_DETECTOR=y
+# CONFIG_DETECT_HUNG_TASK is not set
+CONFIG_PANIC_TIMEOUT=5
+CONFIG_SCHEDSTATS=y
+CONFIG_FUNCTION_TRACER=y
+# CONFIG_RUNTIME_TESTING_MENU is not set
+CONFIG_CORESIGHT=y
+CONFIG_CORESIGHT_STM=y
diff --git a/arch/arm64/crypto/.gitignore b/arch/arm64/crypto/.gitignore
index 879df87..e403b13 100644
--- a/arch/arm64/crypto/.gitignore
+++ b/arch/arm64/crypto/.gitignore
@@ -1,2 +1,3 @@
 sha256-core.S
 sha512-core.S
+poly1305-core.S
diff --git a/arch/arm64/crypto/Kconfig b/arch/arm64/crypto/Kconfig
index 4922c44..30d9b24 100644
--- a/arch/arm64/crypto/Kconfig
+++ b/arch/arm64/crypto/Kconfig
@@ -103,7 +103,14 @@
 	tristate "ChaCha20, XChaCha20, and XChaCha12 stream ciphers using NEON instructions"
 	depends on KERNEL_MODE_NEON
 	select CRYPTO_BLKCIPHER
-	select CRYPTO_CHACHA20
+	select CRYPTO_LIB_CHACHA_GENERIC
+	select CRYPTO_ARCH_HAVE_LIB_CHACHA
+
+config CRYPTO_POLY1305_NEON
+	tristate "Poly1305 hash function using scalar or NEON instructions"
+	depends on KERNEL_MODE_NEON
+	select CRYPTO_HASH
+	select CRYPTO_ARCH_HAVE_LIB_POLY1305
 
 config CRYPTO_NHPOLY1305_NEON
 	tristate "NHPoly1305 hash function using NEON instructions (for Adiantum)"
diff --git a/arch/arm64/crypto/Makefile b/arch/arm64/crypto/Makefile
index 0435f2a..d0901e6 100644
--- a/arch/arm64/crypto/Makefile
+++ b/arch/arm64/crypto/Makefile
@@ -50,6 +50,10 @@
 obj-$(CONFIG_CRYPTO_CHACHA20_NEON) += chacha-neon.o
 chacha-neon-y := chacha-neon-core.o chacha-neon-glue.o
 
+obj-$(CONFIG_CRYPTO_POLY1305_NEON) += poly1305-neon.o
+poly1305-neon-y := poly1305-core.o poly1305-glue.o
+AFLAGS_poly1305-core.o += -Dpoly1305_init=poly1305_init_arm64
+
 obj-$(CONFIG_CRYPTO_NHPOLY1305_NEON) += nhpoly1305-neon.o
 nhpoly1305-neon-y := nh-neon-core.o nhpoly1305-neon-glue.o
 
@@ -68,11 +72,15 @@
 quiet_cmd_perlasm = PERLASM $@
       cmd_perlasm = $(PERL) $(<) void $(@)
 
+$(src)/poly1305-core.S_shipped: $(src)/poly1305-armv8.pl
+	$(call cmd,perlasm)
+
 $(src)/sha256-core.S_shipped: $(src)/sha512-armv8.pl
 	$(call cmd,perlasm)
 
 $(src)/sha512-core.S_shipped: $(src)/sha512-armv8.pl
 	$(call cmd,perlasm)
+
 endif
 
-clean-files += sha256-core.S sha512-core.S
+clean-files += poly1305-core.S sha256-core.S sha512-core.S
diff --git a/arch/arm64/crypto/chacha-neon-glue.c b/arch/arm64/crypto/chacha-neon-glue.c
index 1495d2b..1d9824c 100644
--- a/arch/arm64/crypto/chacha-neon-glue.c
+++ b/arch/arm64/crypto/chacha-neon-glue.c
@@ -1,5 +1,5 @@
 /*
- * ARM NEON accelerated ChaCha and XChaCha stream ciphers,
+ * ARM NEON and scalar accelerated ChaCha and XChaCha stream ciphers,
  * including ChaCha20 (RFC7539)
  *
  * Copyright (C) 2016 - 2017 Linaro, Ltd. <ard.biesheuvel@linaro.org>
@@ -20,9 +20,10 @@
  */
 
 #include <crypto/algapi.h>
-#include <crypto/chacha.h>
+#include <crypto/internal/chacha.h>
 #include <crypto/internal/simd.h>
 #include <crypto/internal/skcipher.h>
+#include <linux/jump_label.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 
@@ -36,6 +37,8 @@ asmlinkage void chacha_4block_xor_neon(u32 *state, u8 *dst, const u8 *src,
 				       int nrounds, int bytes);
 asmlinkage void hchacha_block_neon(const u32 *state, u32 *out, int nrounds);
 
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(have_neon);
+
 static void chacha_doneon(u32 *state, u8 *dst, const u8 *src,
 			  int bytes, int nrounds)
 {
@@ -52,13 +55,52 @@ static void chacha_doneon(u32 *state, u8 *dst, const u8 *src,
 			break;
 		}
 		chacha_4block_xor_neon(state, dst, src, nrounds, l);
-		bytes -= CHACHA_BLOCK_SIZE * 5;
-		src += CHACHA_BLOCK_SIZE * 5;
-		dst += CHACHA_BLOCK_SIZE * 5;
-		state[12] += 5;
+		bytes -= l;
+		src += l;
+		dst += l;
+		state[12] += DIV_ROUND_UP(l, CHACHA_BLOCK_SIZE);
 	}
 }
 
+void hchacha_block_arch(const u32 *state, u32 *stream, int nrounds)
+{
+	if (!static_branch_likely(&have_neon) || !crypto_simd_usable()) {
+		hchacha_block_generic(state, stream, nrounds);
+	} else {
+		kernel_neon_begin();
+		hchacha_block_neon(state, stream, nrounds);
+		kernel_neon_end();
+	}
+}
+EXPORT_SYMBOL(hchacha_block_arch);
+
+void chacha_init_arch(u32 *state, const u32 *key, const u8 *iv)
+{
+	chacha_init_generic(state, key, iv);
+}
+EXPORT_SYMBOL(chacha_init_arch);
+
+void chacha_crypt_arch(u32 *state, u8 *dst, const u8 *src, unsigned int bytes,
+		       int nrounds)
+{
+	if (!static_branch_likely(&have_neon) || bytes <= CHACHA_BLOCK_SIZE ||
+	    !crypto_simd_usable())
+		return chacha_crypt_generic(state, dst, src, bytes, nrounds);
+
+	do {
+		unsigned int todo = min_t(unsigned int, bytes, SZ_4K);
+
+		kernel_neon_begin();
+		chacha_doneon(state, dst, src, todo, nrounds);
+		kernel_neon_end();
+
+		bytes -= todo;
+		src += todo;
+		dst += todo;
+	} while (bytes);
+}
+EXPORT_SYMBOL(chacha_crypt_arch);
+
 static int chacha_neon_stream_xor(struct skcipher_request *req,
 				  const struct chacha_ctx *ctx, const u8 *iv)
 {
@@ -68,7 +110,7 @@ static int chacha_neon_stream_xor(struct skcipher_request *req,
 
 	err = skcipher_walk_virt(&walk, req, false);
 
-	crypto_chacha_init(state, ctx, iv);
+	chacha_init_generic(state, ctx->key, iv);
 
 	while (walk.nbytes > 0) {
 		unsigned int nbytes = walk.nbytes;
@@ -76,10 +118,17 @@ static int chacha_neon_stream_xor(struct skcipher_request *req,
 		if (nbytes < walk.total)
 			nbytes = rounddown(nbytes, walk.stride);
 
-		kernel_neon_begin();
-		chacha_doneon(state, walk.dst.virt.addr, walk.src.virt.addr,
-			      nbytes, ctx->nrounds);
-		kernel_neon_end();
+		if (!static_branch_likely(&have_neon) ||
+		    !crypto_simd_usable()) {
+			chacha_crypt_generic(state, walk.dst.virt.addr,
+					     walk.src.virt.addr, nbytes,
+					     ctx->nrounds);
+		} else {
+			kernel_neon_begin();
+			chacha_doneon(state, walk.dst.virt.addr,
+				      walk.src.virt.addr, nbytes, ctx->nrounds);
+			kernel_neon_end();
+		}
 		err = skcipher_walk_done(&walk, walk.nbytes - nbytes);
 	}
 
@@ -91,9 +140,6 @@ static int chacha_neon(struct skcipher_request *req)
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
 
-	if (req->cryptlen <= CHACHA_BLOCK_SIZE || !crypto_simd_usable())
-		return crypto_chacha_crypt(req);
-
 	return chacha_neon_stream_xor(req, ctx, req->iv);
 }
 
@@ -105,14 +151,8 @@ static int xchacha_neon(struct skcipher_request *req)
 	u32 state[16];
 	u8 real_iv[16];
 
-	if (req->cryptlen <= CHACHA_BLOCK_SIZE || !crypto_simd_usable())
-		return crypto_xchacha_crypt(req);
-
-	crypto_chacha_init(state, ctx, req->iv);
-
-	kernel_neon_begin();
-	hchacha_block_neon(state, subctx.key, ctx->nrounds);
-	kernel_neon_end();
+	chacha_init_generic(state, ctx->key, req->iv);
+	hchacha_block_arch(state, subctx.key, ctx->nrounds);
 	subctx.nrounds = ctx->nrounds;
 
 	memcpy(&real_iv[0], req->iv + 24, 8);
@@ -134,7 +174,7 @@ static struct skcipher_alg algs[] = {
 		.ivsize			= CHACHA_IV_SIZE,
 		.chunksize		= CHACHA_BLOCK_SIZE,
 		.walksize		= 5 * CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha20_setkey,
+		.setkey			= chacha20_setkey,
 		.encrypt		= chacha_neon,
 		.decrypt		= chacha_neon,
 	}, {
@@ -150,7 +190,7 @@ static struct skcipher_alg algs[] = {
 		.ivsize			= XCHACHA_IV_SIZE,
 		.chunksize		= CHACHA_BLOCK_SIZE,
 		.walksize		= 5 * CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha20_setkey,
+		.setkey			= chacha20_setkey,
 		.encrypt		= xchacha_neon,
 		.decrypt		= xchacha_neon,
 	}, {
@@ -166,7 +206,7 @@ static struct skcipher_alg algs[] = {
 		.ivsize			= XCHACHA_IV_SIZE,
 		.chunksize		= CHACHA_BLOCK_SIZE,
 		.walksize		= 5 * CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha12_setkey,
+		.setkey			= chacha12_setkey,
 		.encrypt		= xchacha_neon,
 		.decrypt		= xchacha_neon,
 	}
@@ -175,14 +215,18 @@ static struct skcipher_alg algs[] = {
 static int __init chacha_simd_mod_init(void)
 {
 	if (!cpu_have_named_feature(ASIMD))
-		return -ENODEV;
+		return 0;
 
-	return crypto_register_skciphers(algs, ARRAY_SIZE(algs));
+	static_branch_enable(&have_neon);
+
+	return IS_REACHABLE(CONFIG_CRYPTO_BLKCIPHER) ?
+		crypto_register_skciphers(algs, ARRAY_SIZE(algs)) : 0;
 }
 
 static void __exit chacha_simd_mod_fini(void)
 {
-	crypto_unregister_skciphers(algs, ARRAY_SIZE(algs));
+	if (IS_REACHABLE(CONFIG_CRYPTO_BLKCIPHER) && cpu_have_named_feature(ASIMD))
+		crypto_unregister_skciphers(algs, ARRAY_SIZE(algs));
 }
 
 module_init(chacha_simd_mod_init);
diff --git a/arch/arm64/crypto/poly1305-armv8.pl b/arch/arm64/crypto/poly1305-armv8.pl
new file mode 100644
index 0000000..cbc980f
--- /dev/null
+++ b/arch/arm64/crypto/poly1305-armv8.pl
@@ -0,0 +1,913 @@
+#!/usr/bin/env perl
+# SPDX-License-Identifier: GPL-1.0+ OR BSD-3-Clause
+#
+# ====================================================================
+# Written by Andy Polyakov, @dot-asm, initially for the OpenSSL
+# project.
+# ====================================================================
+#
+# This module implements Poly1305 hash for ARMv8.
+#
+# June 2015
+#
+# Numbers are cycles per processed byte with poly1305_blocks alone.
+#
+#		IALU/gcc-4.9	NEON
+#
+# Apple A7	1.86/+5%	0.72
+# Cortex-A53	2.69/+58%	1.47
+# Cortex-A57	2.70/+7%	1.14
+# Denver	1.64/+50%	1.18(*)
+# X-Gene	2.13/+68%	2.27
+# Mongoose	1.77/+75%	1.12
+# Kryo		2.70/+55%	1.13
+# ThunderX2	1.17/+95%	1.36
+#
+# (*)	estimate based on resources availability is less than 1.0,
+#	i.e. measured result is worse than expected, presumably binary
+#	translator is not almighty;
+
+$flavour=shift;
+$output=shift;
+
+if ($flavour && $flavour ne "void") {
+    $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+    ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or
+    ( $xlate="${dir}../../perlasm/arm-xlate.pl" and -f $xlate) or
+    die "can't locate arm-xlate.pl";
+
+    open STDOUT,"| \"$^X\" $xlate $flavour $output";
+} else {
+    open STDOUT,">$output";
+}
+
+my ($ctx,$inp,$len,$padbit) = map("x$_",(0..3));
+my ($mac,$nonce)=($inp,$len);
+
+my ($h0,$h1,$h2,$r0,$r1,$s1,$t0,$t1,$d0,$d1,$d2) = map("x$_",(4..14));
+
+$code.=<<___;
+#ifndef __KERNEL__
+# include "arm_arch.h"
+.extern	OPENSSL_armcap_P
+#endif
+
+.text
+
+// forward "declarations" are required for Apple
+.globl	poly1305_blocks
+.globl	poly1305_emit
+
+.globl	poly1305_init
+.type	poly1305_init,%function
+.align	5
+poly1305_init:
+	cmp	$inp,xzr
+	stp	xzr,xzr,[$ctx]		// zero hash value
+	stp	xzr,xzr,[$ctx,#16]	// [along with is_base2_26]
+
+	csel	x0,xzr,x0,eq
+	b.eq	.Lno_key
+
+#ifndef	__KERNEL__
+	adrp	x17,OPENSSL_armcap_P
+	ldr	w17,[x17,#:lo12:OPENSSL_armcap_P]
+#endif
+
+	ldp	$r0,$r1,[$inp]		// load key
+	mov	$s1,#0xfffffffc0fffffff
+	movk	$s1,#0x0fff,lsl#48
+#ifdef	__AARCH64EB__
+	rev	$r0,$r0			// flip bytes
+	rev	$r1,$r1
+#endif
+	and	$r0,$r0,$s1		// &=0ffffffc0fffffff
+	and	$s1,$s1,#-4
+	and	$r1,$r1,$s1		// &=0ffffffc0ffffffc
+	mov	w#$s1,#-1
+	stp	$r0,$r1,[$ctx,#32]	// save key value
+	str	w#$s1,[$ctx,#48]	// impossible key power value
+
+#ifndef	__KERNEL__
+	tst	w17,#ARMV7_NEON
+
+	adr	$d0,.Lpoly1305_blocks
+	adr	$r0,.Lpoly1305_blocks_neon
+	adr	$d1,.Lpoly1305_emit
+
+	csel	$d0,$d0,$r0,eq
+
+# ifdef	__ILP32__
+	stp	w#$d0,w#$d1,[$len]
+# else
+	stp	$d0,$d1,[$len]
+# endif
+#endif
+	mov	x0,#1
+.Lno_key:
+	ret
+.size	poly1305_init,.-poly1305_init
+
+.type	poly1305_blocks,%function
+.align	5
+poly1305_blocks:
+.Lpoly1305_blocks:
+	ands	$len,$len,#-16
+	b.eq	.Lno_data
+
+	ldp	$h0,$h1,[$ctx]		// load hash value
+	ldp	$h2,x17,[$ctx,#16]	// [along with is_base2_26]
+	ldp	$r0,$r1,[$ctx,#32]	// load key value
+
+#ifdef	__AARCH64EB__
+	lsr	$d0,$h0,#32
+	mov	w#$d1,w#$h0
+	lsr	$d2,$h1,#32
+	mov	w15,w#$h1
+	lsr	x16,$h2,#32
+#else
+	mov	w#$d0,w#$h0
+	lsr	$d1,$h0,#32
+	mov	w#$d2,w#$h1
+	lsr	x15,$h1,#32
+	mov	w16,w#$h2
+#endif
+
+	add	$d0,$d0,$d1,lsl#26	// base 2^26 -> base 2^64
+	lsr	$d1,$d2,#12
+	adds	$d0,$d0,$d2,lsl#52
+	add	$d1,$d1,x15,lsl#14
+	adc	$d1,$d1,xzr
+	lsr	$d2,x16,#24
+	adds	$d1,$d1,x16,lsl#40
+	adc	$d2,$d2,xzr
+
+	cmp	x17,#0			// is_base2_26?
+	add	$s1,$r1,$r1,lsr#2	// s1 = r1 + (r1 >> 2)
+	csel	$h0,$h0,$d0,eq		// choose between radixes
+	csel	$h1,$h1,$d1,eq
+	csel	$h2,$h2,$d2,eq
+
+.Loop:
+	ldp	$t0,$t1,[$inp],#16	// load input
+	sub	$len,$len,#16
+#ifdef	__AARCH64EB__
+	rev	$t0,$t0
+	rev	$t1,$t1
+#endif
+	adds	$h0,$h0,$t0		// accumulate input
+	adcs	$h1,$h1,$t1
+
+	mul	$d0,$h0,$r0		// h0*r0
+	adc	$h2,$h2,$padbit
+	umulh	$d1,$h0,$r0
+
+	mul	$t0,$h1,$s1		// h1*5*r1
+	umulh	$t1,$h1,$s1
+
+	adds	$d0,$d0,$t0
+	mul	$t0,$h0,$r1		// h0*r1
+	adc	$d1,$d1,$t1
+	umulh	$d2,$h0,$r1
+
+	adds	$d1,$d1,$t0
+	mul	$t0,$h1,$r0		// h1*r0
+	adc	$d2,$d2,xzr
+	umulh	$t1,$h1,$r0
+
+	adds	$d1,$d1,$t0
+	mul	$t0,$h2,$s1		// h2*5*r1
+	adc	$d2,$d2,$t1
+	mul	$t1,$h2,$r0		// h2*r0
+
+	adds	$d1,$d1,$t0
+	adc	$d2,$d2,$t1
+
+	and	$t0,$d2,#-4		// final reduction
+	and	$h2,$d2,#3
+	add	$t0,$t0,$d2,lsr#2
+	adds	$h0,$d0,$t0
+	adcs	$h1,$d1,xzr
+	adc	$h2,$h2,xzr
+
+	cbnz	$len,.Loop
+
+	stp	$h0,$h1,[$ctx]		// store hash value
+	stp	$h2,xzr,[$ctx,#16]	// [and clear is_base2_26]
+
+.Lno_data:
+	ret
+.size	poly1305_blocks,.-poly1305_blocks
+
+.type	poly1305_emit,%function
+.align	5
+poly1305_emit:
+.Lpoly1305_emit:
+	ldp	$h0,$h1,[$ctx]		// load hash base 2^64
+	ldp	$h2,$r0,[$ctx,#16]	// [along with is_base2_26]
+	ldp	$t0,$t1,[$nonce]	// load nonce
+
+#ifdef	__AARCH64EB__
+	lsr	$d0,$h0,#32
+	mov	w#$d1,w#$h0
+	lsr	$d2,$h1,#32
+	mov	w15,w#$h1
+	lsr	x16,$h2,#32
+#else
+	mov	w#$d0,w#$h0
+	lsr	$d1,$h0,#32
+	mov	w#$d2,w#$h1
+	lsr	x15,$h1,#32
+	mov	w16,w#$h2
+#endif
+
+	add	$d0,$d0,$d1,lsl#26	// base 2^26 -> base 2^64
+	lsr	$d1,$d2,#12
+	adds	$d0,$d0,$d2,lsl#52
+	add	$d1,$d1,x15,lsl#14
+	adc	$d1,$d1,xzr
+	lsr	$d2,x16,#24
+	adds	$d1,$d1,x16,lsl#40
+	adc	$d2,$d2,xzr
+
+	cmp	$r0,#0			// is_base2_26?
+	csel	$h0,$h0,$d0,eq		// choose between radixes
+	csel	$h1,$h1,$d1,eq
+	csel	$h2,$h2,$d2,eq
+
+	adds	$d0,$h0,#5		// compare to modulus
+	adcs	$d1,$h1,xzr
+	adc	$d2,$h2,xzr
+
+	tst	$d2,#-4			// see if it's carried/borrowed
+
+	csel	$h0,$h0,$d0,eq
+	csel	$h1,$h1,$d1,eq
+
+#ifdef	__AARCH64EB__
+	ror	$t0,$t0,#32		// flip nonce words
+	ror	$t1,$t1,#32
+#endif
+	adds	$h0,$h0,$t0		// accumulate nonce
+	adc	$h1,$h1,$t1
+#ifdef	__AARCH64EB__
+	rev	$h0,$h0			// flip output bytes
+	rev	$h1,$h1
+#endif
+	stp	$h0,$h1,[$mac]		// write result
+
+	ret
+.size	poly1305_emit,.-poly1305_emit
+___
+my ($R0,$R1,$S1,$R2,$S2,$R3,$S3,$R4,$S4) = map("v$_.4s",(0..8));
+my ($IN01_0,$IN01_1,$IN01_2,$IN01_3,$IN01_4) = map("v$_.2s",(9..13));
+my ($IN23_0,$IN23_1,$IN23_2,$IN23_3,$IN23_4) = map("v$_.2s",(14..18));
+my ($ACC0,$ACC1,$ACC2,$ACC3,$ACC4) = map("v$_.2d",(19..23));
+my ($H0,$H1,$H2,$H3,$H4) = map("v$_.2s",(24..28));
+my ($T0,$T1,$MASK) = map("v$_",(29..31));
+
+my ($in2,$zeros)=("x16","x17");
+my $is_base2_26 = $zeros;		# borrow
+
+$code.=<<___;
+.type	poly1305_mult,%function
+.align	5
+poly1305_mult:
+	mul	$d0,$h0,$r0		// h0*r0
+	umulh	$d1,$h0,$r0
+
+	mul	$t0,$h1,$s1		// h1*5*r1
+	umulh	$t1,$h1,$s1
+
+	adds	$d0,$d0,$t0
+	mul	$t0,$h0,$r1		// h0*r1
+	adc	$d1,$d1,$t1
+	umulh	$d2,$h0,$r1
+
+	adds	$d1,$d1,$t0
+	mul	$t0,$h1,$r0		// h1*r0
+	adc	$d2,$d2,xzr
+	umulh	$t1,$h1,$r0
+
+	adds	$d1,$d1,$t0
+	mul	$t0,$h2,$s1		// h2*5*r1
+	adc	$d2,$d2,$t1
+	mul	$t1,$h2,$r0		// h2*r0
+
+	adds	$d1,$d1,$t0
+	adc	$d2,$d2,$t1
+
+	and	$t0,$d2,#-4		// final reduction
+	and	$h2,$d2,#3
+	add	$t0,$t0,$d2,lsr#2
+	adds	$h0,$d0,$t0
+	adcs	$h1,$d1,xzr
+	adc	$h2,$h2,xzr
+
+	ret
+.size	poly1305_mult,.-poly1305_mult
+
+.type	poly1305_splat,%function
+.align	4
+poly1305_splat:
+	and	x12,$h0,#0x03ffffff	// base 2^64 -> base 2^26
+	ubfx	x13,$h0,#26,#26
+	extr	x14,$h1,$h0,#52
+	and	x14,x14,#0x03ffffff
+	ubfx	x15,$h1,#14,#26
+	extr	x16,$h2,$h1,#40
+
+	str	w12,[$ctx,#16*0]	// r0
+	add	w12,w13,w13,lsl#2	// r1*5
+	str	w13,[$ctx,#16*1]	// r1
+	add	w13,w14,w14,lsl#2	// r2*5
+	str	w12,[$ctx,#16*2]	// s1
+	str	w14,[$ctx,#16*3]	// r2
+	add	w14,w15,w15,lsl#2	// r3*5
+	str	w13,[$ctx,#16*4]	// s2
+	str	w15,[$ctx,#16*5]	// r3
+	add	w15,w16,w16,lsl#2	// r4*5
+	str	w14,[$ctx,#16*6]	// s3
+	str	w16,[$ctx,#16*7]	// r4
+	str	w15,[$ctx,#16*8]	// s4
+
+	ret
+.size	poly1305_splat,.-poly1305_splat
+
+#ifdef	__KERNEL__
+.globl	poly1305_blocks_neon
+#endif
+.type	poly1305_blocks_neon,%function
+.align	5
+poly1305_blocks_neon:
+.Lpoly1305_blocks_neon:
+	ldr	$is_base2_26,[$ctx,#24]
+	cmp	$len,#128
+	b.lo	.Lpoly1305_blocks
+
+	.inst	0xd503233f		// paciasp
+	stp	x29,x30,[sp,#-80]!
+	add	x29,sp,#0
+
+	stp	d8,d9,[sp,#16]		// meet ABI requirements
+	stp	d10,d11,[sp,#32]
+	stp	d12,d13,[sp,#48]
+	stp	d14,d15,[sp,#64]
+
+	cbz	$is_base2_26,.Lbase2_64_neon
+
+	ldp	w10,w11,[$ctx]		// load hash value base 2^26
+	ldp	w12,w13,[$ctx,#8]
+	ldr	w14,[$ctx,#16]
+
+	tst	$len,#31
+	b.eq	.Leven_neon
+
+	ldp	$r0,$r1,[$ctx,#32]	// load key value
+
+	add	$h0,x10,x11,lsl#26	// base 2^26 -> base 2^64
+	lsr	$h1,x12,#12
+	adds	$h0,$h0,x12,lsl#52
+	add	$h1,$h1,x13,lsl#14
+	adc	$h1,$h1,xzr
+	lsr	$h2,x14,#24
+	adds	$h1,$h1,x14,lsl#40
+	adc	$d2,$h2,xzr		// can be partially reduced...
+
+	ldp	$d0,$d1,[$inp],#16	// load input
+	sub	$len,$len,#16
+	add	$s1,$r1,$r1,lsr#2	// s1 = r1 + (r1 >> 2)
+
+#ifdef	__AARCH64EB__
+	rev	$d0,$d0
+	rev	$d1,$d1
+#endif
+	adds	$h0,$h0,$d0		// accumulate input
+	adcs	$h1,$h1,$d1
+	adc	$h2,$h2,$padbit
+
+	bl	poly1305_mult
+
+	and	x10,$h0,#0x03ffffff	// base 2^64 -> base 2^26
+	ubfx	x11,$h0,#26,#26
+	extr	x12,$h1,$h0,#52
+	and	x12,x12,#0x03ffffff
+	ubfx	x13,$h1,#14,#26
+	extr	x14,$h2,$h1,#40
+
+	b	.Leven_neon
+
+.align	4
+.Lbase2_64_neon:
+	ldp	$r0,$r1,[$ctx,#32]	// load key value
+
+	ldp	$h0,$h1,[$ctx]		// load hash value base 2^64
+	ldr	$h2,[$ctx,#16]
+
+	tst	$len,#31
+	b.eq	.Linit_neon
+
+	ldp	$d0,$d1,[$inp],#16	// load input
+	sub	$len,$len,#16
+	add	$s1,$r1,$r1,lsr#2	// s1 = r1 + (r1 >> 2)
+#ifdef	__AARCH64EB__
+	rev	$d0,$d0
+	rev	$d1,$d1
+#endif
+	adds	$h0,$h0,$d0		// accumulate input
+	adcs	$h1,$h1,$d1
+	adc	$h2,$h2,$padbit
+
+	bl	poly1305_mult
+
+.Linit_neon:
+	ldr	w17,[$ctx,#48]		// first table element
+	and	x10,$h0,#0x03ffffff	// base 2^64 -> base 2^26
+	ubfx	x11,$h0,#26,#26
+	extr	x12,$h1,$h0,#52
+	and	x12,x12,#0x03ffffff
+	ubfx	x13,$h1,#14,#26
+	extr	x14,$h2,$h1,#40
+
+	cmp	w17,#-1			// is value impossible?
+	b.ne	.Leven_neon
+
+	fmov	${H0},x10
+	fmov	${H1},x11
+	fmov	${H2},x12
+	fmov	${H3},x13
+	fmov	${H4},x14
+
+	////////////////////////////////// initialize r^n table
+	mov	$h0,$r0			// r^1
+	add	$s1,$r1,$r1,lsr#2	// s1 = r1 + (r1 >> 2)
+	mov	$h1,$r1
+	mov	$h2,xzr
+	add	$ctx,$ctx,#48+12
+	bl	poly1305_splat
+
+	bl	poly1305_mult		// r^2
+	sub	$ctx,$ctx,#4
+	bl	poly1305_splat
+
+	bl	poly1305_mult		// r^3
+	sub	$ctx,$ctx,#4
+	bl	poly1305_splat
+
+	bl	poly1305_mult		// r^4
+	sub	$ctx,$ctx,#4
+	bl	poly1305_splat
+	sub	$ctx,$ctx,#48		// restore original $ctx
+	b	.Ldo_neon
+
+.align	4
+.Leven_neon:
+	fmov	${H0},x10
+	fmov	${H1},x11
+	fmov	${H2},x12
+	fmov	${H3},x13
+	fmov	${H4},x14
+
+.Ldo_neon:
+	ldp	x8,x12,[$inp,#32]	// inp[2:3]
+	subs	$len,$len,#64
+	ldp	x9,x13,[$inp,#48]
+	add	$in2,$inp,#96
+	adr	$zeros,.Lzeros
+
+	lsl	$padbit,$padbit,#24
+	add	x15,$ctx,#48
+
+#ifdef	__AARCH64EB__
+	rev	x8,x8
+	rev	x12,x12
+	rev	x9,x9
+	rev	x13,x13
+#endif
+	and	x4,x8,#0x03ffffff	// base 2^64 -> base 2^26
+	and	x5,x9,#0x03ffffff
+	ubfx	x6,x8,#26,#26
+	ubfx	x7,x9,#26,#26
+	add	x4,x4,x5,lsl#32		// bfi	x4,x5,#32,#32
+	extr	x8,x12,x8,#52
+	extr	x9,x13,x9,#52
+	add	x6,x6,x7,lsl#32		// bfi	x6,x7,#32,#32
+	fmov	$IN23_0,x4
+	and	x8,x8,#0x03ffffff
+	and	x9,x9,#0x03ffffff
+	ubfx	x10,x12,#14,#26
+	ubfx	x11,x13,#14,#26
+	add	x12,$padbit,x12,lsr#40
+	add	x13,$padbit,x13,lsr#40
+	add	x8,x8,x9,lsl#32		// bfi	x8,x9,#32,#32
+	fmov	$IN23_1,x6
+	add	x10,x10,x11,lsl#32	// bfi	x10,x11,#32,#32
+	add	x12,x12,x13,lsl#32	// bfi	x12,x13,#32,#32
+	fmov	$IN23_2,x8
+	fmov	$IN23_3,x10
+	fmov	$IN23_4,x12
+
+	ldp	x8,x12,[$inp],#16	// inp[0:1]
+	ldp	x9,x13,[$inp],#48
+
+	ld1	{$R0,$R1,$S1,$R2},[x15],#64
+	ld1	{$S2,$R3,$S3,$R4},[x15],#64
+	ld1	{$S4},[x15]
+
+#ifdef	__AARCH64EB__
+	rev	x8,x8
+	rev	x12,x12
+	rev	x9,x9
+	rev	x13,x13
+#endif
+	and	x4,x8,#0x03ffffff	// base 2^64 -> base 2^26
+	and	x5,x9,#0x03ffffff
+	ubfx	x6,x8,#26,#26
+	ubfx	x7,x9,#26,#26
+	add	x4,x4,x5,lsl#32		// bfi	x4,x5,#32,#32
+	extr	x8,x12,x8,#52
+	extr	x9,x13,x9,#52
+	add	x6,x6,x7,lsl#32		// bfi	x6,x7,#32,#32
+	fmov	$IN01_0,x4
+	and	x8,x8,#0x03ffffff
+	and	x9,x9,#0x03ffffff
+	ubfx	x10,x12,#14,#26
+	ubfx	x11,x13,#14,#26
+	add	x12,$padbit,x12,lsr#40
+	add	x13,$padbit,x13,lsr#40
+	add	x8,x8,x9,lsl#32		// bfi	x8,x9,#32,#32
+	fmov	$IN01_1,x6
+	add	x10,x10,x11,lsl#32	// bfi	x10,x11,#32,#32
+	add	x12,x12,x13,lsl#32	// bfi	x12,x13,#32,#32
+	movi	$MASK.2d,#-1
+	fmov	$IN01_2,x8
+	fmov	$IN01_3,x10
+	fmov	$IN01_4,x12
+	ushr	$MASK.2d,$MASK.2d,#38
+
+	b.ls	.Lskip_loop
+
+.align	4
+.Loop_neon:
+	////////////////////////////////////////////////////////////////
+	// ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2
+	// ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^3+inp[7]*r
+	//   \___________________/
+	// ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2+inp[8])*r^2
+	// ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^4+inp[7]*r^2+inp[9])*r
+	//   \___________________/ \____________________/
+	//
+	// Note that we start with inp[2:3]*r^2. This is because it
+	// doesn't depend on reduction in previous iteration.
+	////////////////////////////////////////////////////////////////
+	// d4 = h0*r4 + h1*r3   + h2*r2   + h3*r1   + h4*r0
+	// d3 = h0*r3 + h1*r2   + h2*r1   + h3*r0   + h4*5*r4
+	// d2 = h0*r2 + h1*r1   + h2*r0   + h3*5*r4 + h4*5*r3
+	// d1 = h0*r1 + h1*r0   + h2*5*r4 + h3*5*r3 + h4*5*r2
+	// d0 = h0*r0 + h1*5*r4 + h2*5*r3 + h3*5*r2 + h4*5*r1
+
+	subs	$len,$len,#64
+	umull	$ACC4,$IN23_0,${R4}[2]
+	csel	$in2,$zeros,$in2,lo
+	umull	$ACC3,$IN23_0,${R3}[2]
+	umull	$ACC2,$IN23_0,${R2}[2]
+	 ldp	x8,x12,[$in2],#16	// inp[2:3] (or zero)
+	umull	$ACC1,$IN23_0,${R1}[2]
+	 ldp	x9,x13,[$in2],#48
+	umull	$ACC0,$IN23_0,${R0}[2]
+#ifdef	__AARCH64EB__
+	 rev	x8,x8
+	 rev	x12,x12
+	 rev	x9,x9
+	 rev	x13,x13
+#endif
+
+	umlal	$ACC4,$IN23_1,${R3}[2]
+	 and	x4,x8,#0x03ffffff	// base 2^64 -> base 2^26
+	umlal	$ACC3,$IN23_1,${R2}[2]
+	 and	x5,x9,#0x03ffffff
+	umlal	$ACC2,$IN23_1,${R1}[2]
+	 ubfx	x6,x8,#26,#26
+	umlal	$ACC1,$IN23_1,${R0}[2]
+	 ubfx	x7,x9,#26,#26
+	umlal	$ACC0,$IN23_1,${S4}[2]
+	 add	x4,x4,x5,lsl#32		// bfi	x4,x5,#32,#32
+
+	umlal	$ACC4,$IN23_2,${R2}[2]
+	 extr	x8,x12,x8,#52
+	umlal	$ACC3,$IN23_2,${R1}[2]
+	 extr	x9,x13,x9,#52
+	umlal	$ACC2,$IN23_2,${R0}[2]
+	 add	x6,x6,x7,lsl#32		// bfi	x6,x7,#32,#32
+	umlal	$ACC1,$IN23_2,${S4}[2]
+	 fmov	$IN23_0,x4
+	umlal	$ACC0,$IN23_2,${S3}[2]
+	 and	x8,x8,#0x03ffffff
+
+	umlal	$ACC4,$IN23_3,${R1}[2]
+	 and	x9,x9,#0x03ffffff
+	umlal	$ACC3,$IN23_3,${R0}[2]
+	 ubfx	x10,x12,#14,#26
+	umlal	$ACC2,$IN23_3,${S4}[2]
+	 ubfx	x11,x13,#14,#26
+	umlal	$ACC1,$IN23_3,${S3}[2]
+	 add	x8,x8,x9,lsl#32		// bfi	x8,x9,#32,#32
+	umlal	$ACC0,$IN23_3,${S2}[2]
+	 fmov	$IN23_1,x6
+
+	add	$IN01_2,$IN01_2,$H2
+	 add	x12,$padbit,x12,lsr#40
+	umlal	$ACC4,$IN23_4,${R0}[2]
+	 add	x13,$padbit,x13,lsr#40
+	umlal	$ACC3,$IN23_4,${S4}[2]
+	 add	x10,x10,x11,lsl#32	// bfi	x10,x11,#32,#32
+	umlal	$ACC2,$IN23_4,${S3}[2]
+	 add	x12,x12,x13,lsl#32	// bfi	x12,x13,#32,#32
+	umlal	$ACC1,$IN23_4,${S2}[2]
+	 fmov	$IN23_2,x8
+	umlal	$ACC0,$IN23_4,${S1}[2]
+	 fmov	$IN23_3,x10
+
+	////////////////////////////////////////////////////////////////
+	// (hash+inp[0:1])*r^4 and accumulate
+
+	add	$IN01_0,$IN01_0,$H0
+	 fmov	$IN23_4,x12
+	umlal	$ACC3,$IN01_2,${R1}[0]
+	 ldp	x8,x12,[$inp],#16	// inp[0:1]
+	umlal	$ACC0,$IN01_2,${S3}[0]
+	 ldp	x9,x13,[$inp],#48
+	umlal	$ACC4,$IN01_2,${R2}[0]
+	umlal	$ACC1,$IN01_2,${S4}[0]
+	umlal	$ACC2,$IN01_2,${R0}[0]
+#ifdef	__AARCH64EB__
+	 rev	x8,x8
+	 rev	x12,x12
+	 rev	x9,x9
+	 rev	x13,x13
+#endif
+
+	add	$IN01_1,$IN01_1,$H1
+	umlal	$ACC3,$IN01_0,${R3}[0]
+	umlal	$ACC4,$IN01_0,${R4}[0]
+	 and	x4,x8,#0x03ffffff	// base 2^64 -> base 2^26
+	umlal	$ACC2,$IN01_0,${R2}[0]
+	 and	x5,x9,#0x03ffffff
+	umlal	$ACC0,$IN01_0,${R0}[0]
+	 ubfx	x6,x8,#26,#26
+	umlal	$ACC1,$IN01_0,${R1}[0]
+	 ubfx	x7,x9,#26,#26
+
+	add	$IN01_3,$IN01_3,$H3
+	 add	x4,x4,x5,lsl#32		// bfi	x4,x5,#32,#32
+	umlal	$ACC3,$IN01_1,${R2}[0]
+	 extr	x8,x12,x8,#52
+	umlal	$ACC4,$IN01_1,${R3}[0]
+	 extr	x9,x13,x9,#52
+	umlal	$ACC0,$IN01_1,${S4}[0]
+	 add	x6,x6,x7,lsl#32		// bfi	x6,x7,#32,#32
+	umlal	$ACC2,$IN01_1,${R1}[0]
+	 fmov	$IN01_0,x4
+	umlal	$ACC1,$IN01_1,${R0}[0]
+	 and	x8,x8,#0x03ffffff
+
+	add	$IN01_4,$IN01_4,$H4
+	 and	x9,x9,#0x03ffffff
+	umlal	$ACC3,$IN01_3,${R0}[0]
+	 ubfx	x10,x12,#14,#26
+	umlal	$ACC0,$IN01_3,${S2}[0]
+	 ubfx	x11,x13,#14,#26
+	umlal	$ACC4,$IN01_3,${R1}[0]
+	 add	x8,x8,x9,lsl#32		// bfi	x8,x9,#32,#32
+	umlal	$ACC1,$IN01_3,${S3}[0]
+	 fmov	$IN01_1,x6
+	umlal	$ACC2,$IN01_3,${S4}[0]
+	 add	x12,$padbit,x12,lsr#40
+
+	umlal	$ACC3,$IN01_4,${S4}[0]
+	 add	x13,$padbit,x13,lsr#40
+	umlal	$ACC0,$IN01_4,${S1}[0]
+	 add	x10,x10,x11,lsl#32	// bfi	x10,x11,#32,#32
+	umlal	$ACC4,$IN01_4,${R0}[0]
+	 add	x12,x12,x13,lsl#32	// bfi	x12,x13,#32,#32
+	umlal	$ACC1,$IN01_4,${S2}[0]
+	 fmov	$IN01_2,x8
+	umlal	$ACC2,$IN01_4,${S3}[0]
+	 fmov	$IN01_3,x10
+	 fmov	$IN01_4,x12
+
+	/////////////////////////////////////////////////////////////////
+	// lazy reduction as discussed in "NEON crypto" by D.J. Bernstein
+	// and P. Schwabe
+	//
+	// [see discussion in poly1305-armv4 module]
+
+	ushr	$T0.2d,$ACC3,#26
+	xtn	$H3,$ACC3
+	 ushr	$T1.2d,$ACC0,#26
+	 and	$ACC0,$ACC0,$MASK.2d
+	add	$ACC4,$ACC4,$T0.2d	// h3 -> h4
+	bic	$H3,#0xfc,lsl#24	// &=0x03ffffff
+	 add	$ACC1,$ACC1,$T1.2d	// h0 -> h1
+
+	ushr	$T0.2d,$ACC4,#26
+	xtn	$H4,$ACC4
+	 ushr	$T1.2d,$ACC1,#26
+	 xtn	$H1,$ACC1
+	bic	$H4,#0xfc,lsl#24
+	 add	$ACC2,$ACC2,$T1.2d	// h1 -> h2
+
+	add	$ACC0,$ACC0,$T0.2d
+	shl	$T0.2d,$T0.2d,#2
+	 shrn	$T1.2s,$ACC2,#26
+	 xtn	$H2,$ACC2
+	add	$ACC0,$ACC0,$T0.2d	// h4 -> h0
+	 bic	$H1,#0xfc,lsl#24
+	 add	$H3,$H3,$T1.2s		// h2 -> h3
+	 bic	$H2,#0xfc,lsl#24
+
+	shrn	$T0.2s,$ACC0,#26
+	xtn	$H0,$ACC0
+	 ushr	$T1.2s,$H3,#26
+	 bic	$H3,#0xfc,lsl#24
+	 bic	$H0,#0xfc,lsl#24
+	add	$H1,$H1,$T0.2s		// h0 -> h1
+	 add	$H4,$H4,$T1.2s		// h3 -> h4
+
+	b.hi	.Loop_neon
+
+.Lskip_loop:
+	dup	$IN23_2,${IN23_2}[0]
+	add	$IN01_2,$IN01_2,$H2
+
+	////////////////////////////////////////////////////////////////
+	// multiply (inp[0:1]+hash) or inp[2:3] by r^2:r^1
+
+	adds	$len,$len,#32
+	b.ne	.Long_tail
+
+	dup	$IN23_2,${IN01_2}[0]
+	add	$IN23_0,$IN01_0,$H0
+	add	$IN23_3,$IN01_3,$H3
+	add	$IN23_1,$IN01_1,$H1
+	add	$IN23_4,$IN01_4,$H4
+
+.Long_tail:
+	dup	$IN23_0,${IN23_0}[0]
+	umull2	$ACC0,$IN23_2,${S3}
+	umull2	$ACC3,$IN23_2,${R1}
+	umull2	$ACC4,$IN23_2,${R2}
+	umull2	$ACC2,$IN23_2,${R0}
+	umull2	$ACC1,$IN23_2,${S4}
+
+	dup	$IN23_1,${IN23_1}[0]
+	umlal2	$ACC0,$IN23_0,${R0}
+	umlal2	$ACC2,$IN23_0,${R2}
+	umlal2	$ACC3,$IN23_0,${R3}
+	umlal2	$ACC4,$IN23_0,${R4}
+	umlal2	$ACC1,$IN23_0,${R1}
+
+	dup	$IN23_3,${IN23_3}[0]
+	umlal2	$ACC0,$IN23_1,${S4}
+	umlal2	$ACC3,$IN23_1,${R2}
+	umlal2	$ACC2,$IN23_1,${R1}
+	umlal2	$ACC4,$IN23_1,${R3}
+	umlal2	$ACC1,$IN23_1,${R0}
+
+	dup	$IN23_4,${IN23_4}[0]
+	umlal2	$ACC3,$IN23_3,${R0}
+	umlal2	$ACC4,$IN23_3,${R1}
+	umlal2	$ACC0,$IN23_3,${S2}
+	umlal2	$ACC1,$IN23_3,${S3}
+	umlal2	$ACC2,$IN23_3,${S4}
+
+	umlal2	$ACC3,$IN23_4,${S4}
+	umlal2	$ACC0,$IN23_4,${S1}
+	umlal2	$ACC4,$IN23_4,${R0}
+	umlal2	$ACC1,$IN23_4,${S2}
+	umlal2	$ACC2,$IN23_4,${S3}
+
+	b.eq	.Lshort_tail
+
+	////////////////////////////////////////////////////////////////
+	// (hash+inp[0:1])*r^4:r^3 and accumulate
+
+	add	$IN01_0,$IN01_0,$H0
+	umlal	$ACC3,$IN01_2,${R1}
+	umlal	$ACC0,$IN01_2,${S3}
+	umlal	$ACC4,$IN01_2,${R2}
+	umlal	$ACC1,$IN01_2,${S4}
+	umlal	$ACC2,$IN01_2,${R0}
+
+	add	$IN01_1,$IN01_1,$H1
+	umlal	$ACC3,$IN01_0,${R3}
+	umlal	$ACC0,$IN01_0,${R0}
+	umlal	$ACC4,$IN01_0,${R4}
+	umlal	$ACC1,$IN01_0,${R1}
+	umlal	$ACC2,$IN01_0,${R2}
+
+	add	$IN01_3,$IN01_3,$H3
+	umlal	$ACC3,$IN01_1,${R2}
+	umlal	$ACC0,$IN01_1,${S4}
+	umlal	$ACC4,$IN01_1,${R3}
+	umlal	$ACC1,$IN01_1,${R0}
+	umlal	$ACC2,$IN01_1,${R1}
+
+	add	$IN01_4,$IN01_4,$H4
+	umlal	$ACC3,$IN01_3,${R0}
+	umlal	$ACC0,$IN01_3,${S2}
+	umlal	$ACC4,$IN01_3,${R1}
+	umlal	$ACC1,$IN01_3,${S3}
+	umlal	$ACC2,$IN01_3,${S4}
+
+	umlal	$ACC3,$IN01_4,${S4}
+	umlal	$ACC0,$IN01_4,${S1}
+	umlal	$ACC4,$IN01_4,${R0}
+	umlal	$ACC1,$IN01_4,${S2}
+	umlal	$ACC2,$IN01_4,${S3}
+
+.Lshort_tail:
+	////////////////////////////////////////////////////////////////
+	// horizontal add
+
+	addp	$ACC3,$ACC3,$ACC3
+	 ldp	d8,d9,[sp,#16]		// meet ABI requirements
+	addp	$ACC0,$ACC0,$ACC0
+	 ldp	d10,d11,[sp,#32]
+	addp	$ACC4,$ACC4,$ACC4
+	 ldp	d12,d13,[sp,#48]
+	addp	$ACC1,$ACC1,$ACC1
+	 ldp	d14,d15,[sp,#64]
+	addp	$ACC2,$ACC2,$ACC2
+	 ldr	x30,[sp,#8]
+
+	////////////////////////////////////////////////////////////////
+	// lazy reduction, but without narrowing
+
+	ushr	$T0.2d,$ACC3,#26
+	and	$ACC3,$ACC3,$MASK.2d
+	 ushr	$T1.2d,$ACC0,#26
+	 and	$ACC0,$ACC0,$MASK.2d
+
+	add	$ACC4,$ACC4,$T0.2d	// h3 -> h4
+	 add	$ACC1,$ACC1,$T1.2d	// h0 -> h1
+
+	ushr	$T0.2d,$ACC4,#26
+	and	$ACC4,$ACC4,$MASK.2d
+	 ushr	$T1.2d,$ACC1,#26
+	 and	$ACC1,$ACC1,$MASK.2d
+	 add	$ACC2,$ACC2,$T1.2d	// h1 -> h2
+
+	add	$ACC0,$ACC0,$T0.2d
+	shl	$T0.2d,$T0.2d,#2
+	 ushr	$T1.2d,$ACC2,#26
+	 and	$ACC2,$ACC2,$MASK.2d
+	add	$ACC0,$ACC0,$T0.2d	// h4 -> h0
+	 add	$ACC3,$ACC3,$T1.2d	// h2 -> h3
+
+	ushr	$T0.2d,$ACC0,#26
+	and	$ACC0,$ACC0,$MASK.2d
+	 ushr	$T1.2d,$ACC3,#26
+	 and	$ACC3,$ACC3,$MASK.2d
+	add	$ACC1,$ACC1,$T0.2d	// h0 -> h1
+	 add	$ACC4,$ACC4,$T1.2d	// h3 -> h4
+
+	////////////////////////////////////////////////////////////////
+	// write the result, can be partially reduced
+
+	st4	{$ACC0,$ACC1,$ACC2,$ACC3}[0],[$ctx],#16
+	mov	x4,#1
+	st1	{$ACC4}[0],[$ctx]
+	str	x4,[$ctx,#8]		// set is_base2_26
+
+	ldr	x29,[sp],#80
+	 .inst	0xd50323bf		// autiasp
+	ret
+.size	poly1305_blocks_neon,.-poly1305_blocks_neon
+
+.align	5
+.Lzeros:
+.long	0,0,0,0,0,0,0,0
+.asciz	"Poly1305 for ARMv8, CRYPTOGAMS by \@dot-asm"
+.align	2
+#if !defined(__KERNEL__) && !defined(_WIN64)
+.comm	OPENSSL_armcap_P,4,4
+.hidden	OPENSSL_armcap_P
+#endif
+___
+
+foreach (split("\n",$code)) {
+	s/\b(shrn\s+v[0-9]+)\.[24]d/$1.2s/			or
+	s/\b(fmov\s+)v([0-9]+)[^,]*,\s*x([0-9]+)/$1d$2,x$3/	or
+	(m/\bdup\b/ and (s/\.[24]s/.2d/g or 1))			or
+	(m/\b(eor|and)/ and (s/\.[248][sdh]/.16b/g or 1))	or
+	(m/\bum(ul|la)l\b/ and (s/\.4s/.2s/g or 1))		or
+	(m/\bum(ul|la)l2\b/ and (s/\.2s/.4s/g or 1))		or
+	(m/\bst[1-4]\s+{[^}]+}\[/ and (s/\.[24]d/.s/g or 1));
+
+	s/\.[124]([sd])\[/.$1\[/;
+	s/w#x([0-9]+)/w$1/g;
+
+	print $_,"\n";
+}
+close STDOUT;
diff --git a/arch/arm64/crypto/poly1305-core.S_shipped b/arch/arm64/crypto/poly1305-core.S_shipped
new file mode 100644
index 0000000..fb2822a
--- /dev/null
+++ b/arch/arm64/crypto/poly1305-core.S_shipped
@@ -0,0 +1,835 @@
+#ifndef __KERNEL__
+# include "arm_arch.h"
+.extern	OPENSSL_armcap_P
+#endif
+
+.text
+
+// forward "declarations" are required for Apple
+.globl	poly1305_blocks
+.globl	poly1305_emit
+
+.globl	poly1305_init
+.type	poly1305_init,%function
+.align	5
+poly1305_init:
+	cmp	x1,xzr
+	stp	xzr,xzr,[x0]		// zero hash value
+	stp	xzr,xzr,[x0,#16]	// [along with is_base2_26]
+
+	csel	x0,xzr,x0,eq
+	b.eq	.Lno_key
+
+#ifndef	__KERNEL__
+	adrp	x17,OPENSSL_armcap_P
+	ldr	w17,[x17,#:lo12:OPENSSL_armcap_P]
+#endif
+
+	ldp	x7,x8,[x1]		// load key
+	mov	x9,#0xfffffffc0fffffff
+	movk	x9,#0x0fff,lsl#48
+#ifdef	__AARCH64EB__
+	rev	x7,x7			// flip bytes
+	rev	x8,x8
+#endif
+	and	x7,x7,x9		// &=0ffffffc0fffffff
+	and	x9,x9,#-4
+	and	x8,x8,x9		// &=0ffffffc0ffffffc
+	mov	w9,#-1
+	stp	x7,x8,[x0,#32]	// save key value
+	str	w9,[x0,#48]	// impossible key power value
+
+#ifndef	__KERNEL__
+	tst	w17,#ARMV7_NEON
+
+	adr	x12,.Lpoly1305_blocks
+	adr	x7,.Lpoly1305_blocks_neon
+	adr	x13,.Lpoly1305_emit
+
+	csel	x12,x12,x7,eq
+
+# ifdef	__ILP32__
+	stp	w12,w13,[x2]
+# else
+	stp	x12,x13,[x2]
+# endif
+#endif
+	mov	x0,#1
+.Lno_key:
+	ret
+.size	poly1305_init,.-poly1305_init
+
+.type	poly1305_blocks,%function
+.align	5
+poly1305_blocks:
+.Lpoly1305_blocks:
+	ands	x2,x2,#-16
+	b.eq	.Lno_data
+
+	ldp	x4,x5,[x0]		// load hash value
+	ldp	x6,x17,[x0,#16]	// [along with is_base2_26]
+	ldp	x7,x8,[x0,#32]	// load key value
+
+#ifdef	__AARCH64EB__
+	lsr	x12,x4,#32
+	mov	w13,w4
+	lsr	x14,x5,#32
+	mov	w15,w5
+	lsr	x16,x6,#32
+#else
+	mov	w12,w4
+	lsr	x13,x4,#32
+	mov	w14,w5
+	lsr	x15,x5,#32
+	mov	w16,w6
+#endif
+
+	add	x12,x12,x13,lsl#26	// base 2^26 -> base 2^64
+	lsr	x13,x14,#12
+	adds	x12,x12,x14,lsl#52
+	add	x13,x13,x15,lsl#14
+	adc	x13,x13,xzr
+	lsr	x14,x16,#24
+	adds	x13,x13,x16,lsl#40
+	adc	x14,x14,xzr
+
+	cmp	x17,#0			// is_base2_26?
+	add	x9,x8,x8,lsr#2	// s1 = r1 + (r1 >> 2)
+	csel	x4,x4,x12,eq		// choose between radixes
+	csel	x5,x5,x13,eq
+	csel	x6,x6,x14,eq
+
+.Loop:
+	ldp	x10,x11,[x1],#16	// load input
+	sub	x2,x2,#16
+#ifdef	__AARCH64EB__
+	rev	x10,x10
+	rev	x11,x11
+#endif
+	adds	x4,x4,x10		// accumulate input
+	adcs	x5,x5,x11
+
+	mul	x12,x4,x7		// h0*r0
+	adc	x6,x6,x3
+	umulh	x13,x4,x7
+
+	mul	x10,x5,x9		// h1*5*r1
+	umulh	x11,x5,x9
+
+	adds	x12,x12,x10
+	mul	x10,x4,x8		// h0*r1
+	adc	x13,x13,x11
+	umulh	x14,x4,x8
+
+	adds	x13,x13,x10
+	mul	x10,x5,x7		// h1*r0
+	adc	x14,x14,xzr
+	umulh	x11,x5,x7
+
+	adds	x13,x13,x10
+	mul	x10,x6,x9		// h2*5*r1
+	adc	x14,x14,x11
+	mul	x11,x6,x7		// h2*r0
+
+	adds	x13,x13,x10
+	adc	x14,x14,x11
+
+	and	x10,x14,#-4		// final reduction
+	and	x6,x14,#3
+	add	x10,x10,x14,lsr#2
+	adds	x4,x12,x10
+	adcs	x5,x13,xzr
+	adc	x6,x6,xzr
+
+	cbnz	x2,.Loop
+
+	stp	x4,x5,[x0]		// store hash value
+	stp	x6,xzr,[x0,#16]	// [and clear is_base2_26]
+
+.Lno_data:
+	ret
+.size	poly1305_blocks,.-poly1305_blocks
+
+.type	poly1305_emit,%function
+.align	5
+poly1305_emit:
+.Lpoly1305_emit:
+	ldp	x4,x5,[x0]		// load hash base 2^64
+	ldp	x6,x7,[x0,#16]	// [along with is_base2_26]
+	ldp	x10,x11,[x2]	// load nonce
+
+#ifdef	__AARCH64EB__
+	lsr	x12,x4,#32
+	mov	w13,w4
+	lsr	x14,x5,#32
+	mov	w15,w5
+	lsr	x16,x6,#32
+#else
+	mov	w12,w4
+	lsr	x13,x4,#32
+	mov	w14,w5
+	lsr	x15,x5,#32
+	mov	w16,w6
+#endif
+
+	add	x12,x12,x13,lsl#26	// base 2^26 -> base 2^64
+	lsr	x13,x14,#12
+	adds	x12,x12,x14,lsl#52
+	add	x13,x13,x15,lsl#14
+	adc	x13,x13,xzr
+	lsr	x14,x16,#24
+	adds	x13,x13,x16,lsl#40
+	adc	x14,x14,xzr
+
+	cmp	x7,#0			// is_base2_26?
+	csel	x4,x4,x12,eq		// choose between radixes
+	csel	x5,x5,x13,eq
+	csel	x6,x6,x14,eq
+
+	adds	x12,x4,#5		// compare to modulus
+	adcs	x13,x5,xzr
+	adc	x14,x6,xzr
+
+	tst	x14,#-4			// see if it's carried/borrowed
+
+	csel	x4,x4,x12,eq
+	csel	x5,x5,x13,eq
+
+#ifdef	__AARCH64EB__
+	ror	x10,x10,#32		// flip nonce words
+	ror	x11,x11,#32
+#endif
+	adds	x4,x4,x10		// accumulate nonce
+	adc	x5,x5,x11
+#ifdef	__AARCH64EB__
+	rev	x4,x4			// flip output bytes
+	rev	x5,x5
+#endif
+	stp	x4,x5,[x1]		// write result
+
+	ret
+.size	poly1305_emit,.-poly1305_emit
+.type	poly1305_mult,%function
+.align	5
+poly1305_mult:
+	mul	x12,x4,x7		// h0*r0
+	umulh	x13,x4,x7
+
+	mul	x10,x5,x9		// h1*5*r1
+	umulh	x11,x5,x9
+
+	adds	x12,x12,x10
+	mul	x10,x4,x8		// h0*r1
+	adc	x13,x13,x11
+	umulh	x14,x4,x8
+
+	adds	x13,x13,x10
+	mul	x10,x5,x7		// h1*r0
+	adc	x14,x14,xzr
+	umulh	x11,x5,x7
+
+	adds	x13,x13,x10
+	mul	x10,x6,x9		// h2*5*r1
+	adc	x14,x14,x11
+	mul	x11,x6,x7		// h2*r0
+
+	adds	x13,x13,x10
+	adc	x14,x14,x11
+
+	and	x10,x14,#-4		// final reduction
+	and	x6,x14,#3
+	add	x10,x10,x14,lsr#2
+	adds	x4,x12,x10
+	adcs	x5,x13,xzr
+	adc	x6,x6,xzr
+
+	ret
+.size	poly1305_mult,.-poly1305_mult
+
+.type	poly1305_splat,%function
+.align	4
+poly1305_splat:
+	and	x12,x4,#0x03ffffff	// base 2^64 -> base 2^26
+	ubfx	x13,x4,#26,#26
+	extr	x14,x5,x4,#52
+	and	x14,x14,#0x03ffffff
+	ubfx	x15,x5,#14,#26
+	extr	x16,x6,x5,#40
+
+	str	w12,[x0,#16*0]	// r0
+	add	w12,w13,w13,lsl#2	// r1*5
+	str	w13,[x0,#16*1]	// r1
+	add	w13,w14,w14,lsl#2	// r2*5
+	str	w12,[x0,#16*2]	// s1
+	str	w14,[x0,#16*3]	// r2
+	add	w14,w15,w15,lsl#2	// r3*5
+	str	w13,[x0,#16*4]	// s2
+	str	w15,[x0,#16*5]	// r3
+	add	w15,w16,w16,lsl#2	// r4*5
+	str	w14,[x0,#16*6]	// s3
+	str	w16,[x0,#16*7]	// r4
+	str	w15,[x0,#16*8]	// s4
+
+	ret
+.size	poly1305_splat,.-poly1305_splat
+
+#ifdef	__KERNEL__
+.globl	poly1305_blocks_neon
+#endif
+.type	poly1305_blocks_neon,%function
+.align	5
+poly1305_blocks_neon:
+.Lpoly1305_blocks_neon:
+	ldr	x17,[x0,#24]
+	cmp	x2,#128
+	b.lo	.Lpoly1305_blocks
+
+	.inst	0xd503233f		// paciasp
+	stp	x29,x30,[sp,#-80]!
+	add	x29,sp,#0
+
+	stp	d8,d9,[sp,#16]		// meet ABI requirements
+	stp	d10,d11,[sp,#32]
+	stp	d12,d13,[sp,#48]
+	stp	d14,d15,[sp,#64]
+
+	cbz	x17,.Lbase2_64_neon
+
+	ldp	w10,w11,[x0]		// load hash value base 2^26
+	ldp	w12,w13,[x0,#8]
+	ldr	w14,[x0,#16]
+
+	tst	x2,#31
+	b.eq	.Leven_neon
+
+	ldp	x7,x8,[x0,#32]	// load key value
+
+	add	x4,x10,x11,lsl#26	// base 2^26 -> base 2^64
+	lsr	x5,x12,#12
+	adds	x4,x4,x12,lsl#52
+	add	x5,x5,x13,lsl#14
+	adc	x5,x5,xzr
+	lsr	x6,x14,#24
+	adds	x5,x5,x14,lsl#40
+	adc	x14,x6,xzr		// can be partially reduced...
+
+	ldp	x12,x13,[x1],#16	// load input
+	sub	x2,x2,#16
+	add	x9,x8,x8,lsr#2	// s1 = r1 + (r1 >> 2)
+
+#ifdef	__AARCH64EB__
+	rev	x12,x12
+	rev	x13,x13
+#endif
+	adds	x4,x4,x12		// accumulate input
+	adcs	x5,x5,x13
+	adc	x6,x6,x3
+
+	bl	poly1305_mult
+
+	and	x10,x4,#0x03ffffff	// base 2^64 -> base 2^26
+	ubfx	x11,x4,#26,#26
+	extr	x12,x5,x4,#52
+	and	x12,x12,#0x03ffffff
+	ubfx	x13,x5,#14,#26
+	extr	x14,x6,x5,#40
+
+	b	.Leven_neon
+
+.align	4
+.Lbase2_64_neon:
+	ldp	x7,x8,[x0,#32]	// load key value
+
+	ldp	x4,x5,[x0]		// load hash value base 2^64
+	ldr	x6,[x0,#16]
+
+	tst	x2,#31
+	b.eq	.Linit_neon
+
+	ldp	x12,x13,[x1],#16	// load input
+	sub	x2,x2,#16
+	add	x9,x8,x8,lsr#2	// s1 = r1 + (r1 >> 2)
+#ifdef	__AARCH64EB__
+	rev	x12,x12
+	rev	x13,x13
+#endif
+	adds	x4,x4,x12		// accumulate input
+	adcs	x5,x5,x13
+	adc	x6,x6,x3
+
+	bl	poly1305_mult
+
+.Linit_neon:
+	ldr	w17,[x0,#48]		// first table element
+	and	x10,x4,#0x03ffffff	// base 2^64 -> base 2^26
+	ubfx	x11,x4,#26,#26
+	extr	x12,x5,x4,#52
+	and	x12,x12,#0x03ffffff
+	ubfx	x13,x5,#14,#26
+	extr	x14,x6,x5,#40
+
+	cmp	w17,#-1			// is value impossible?
+	b.ne	.Leven_neon
+
+	fmov	d24,x10
+	fmov	d25,x11
+	fmov	d26,x12
+	fmov	d27,x13
+	fmov	d28,x14
+
+	////////////////////////////////// initialize r^n table
+	mov	x4,x7			// r^1
+	add	x9,x8,x8,lsr#2	// s1 = r1 + (r1 >> 2)
+	mov	x5,x8
+	mov	x6,xzr
+	add	x0,x0,#48+12
+	bl	poly1305_splat
+
+	bl	poly1305_mult		// r^2
+	sub	x0,x0,#4
+	bl	poly1305_splat
+
+	bl	poly1305_mult		// r^3
+	sub	x0,x0,#4
+	bl	poly1305_splat
+
+	bl	poly1305_mult		// r^4
+	sub	x0,x0,#4
+	bl	poly1305_splat
+	sub	x0,x0,#48		// restore original x0
+	b	.Ldo_neon
+
+.align	4
+.Leven_neon:
+	fmov	d24,x10
+	fmov	d25,x11
+	fmov	d26,x12
+	fmov	d27,x13
+	fmov	d28,x14
+
+.Ldo_neon:
+	ldp	x8,x12,[x1,#32]	// inp[2:3]
+	subs	x2,x2,#64
+	ldp	x9,x13,[x1,#48]
+	add	x16,x1,#96
+	adr	x17,.Lzeros
+
+	lsl	x3,x3,#24
+	add	x15,x0,#48
+
+#ifdef	__AARCH64EB__
+	rev	x8,x8
+	rev	x12,x12
+	rev	x9,x9
+	rev	x13,x13
+#endif
+	and	x4,x8,#0x03ffffff	// base 2^64 -> base 2^26
+	and	x5,x9,#0x03ffffff
+	ubfx	x6,x8,#26,#26
+	ubfx	x7,x9,#26,#26
+	add	x4,x4,x5,lsl#32		// bfi	x4,x5,#32,#32
+	extr	x8,x12,x8,#52
+	extr	x9,x13,x9,#52
+	add	x6,x6,x7,lsl#32		// bfi	x6,x7,#32,#32
+	fmov	d14,x4
+	and	x8,x8,#0x03ffffff
+	and	x9,x9,#0x03ffffff
+	ubfx	x10,x12,#14,#26
+	ubfx	x11,x13,#14,#26
+	add	x12,x3,x12,lsr#40
+	add	x13,x3,x13,lsr#40
+	add	x8,x8,x9,lsl#32		// bfi	x8,x9,#32,#32
+	fmov	d15,x6
+	add	x10,x10,x11,lsl#32	// bfi	x10,x11,#32,#32
+	add	x12,x12,x13,lsl#32	// bfi	x12,x13,#32,#32
+	fmov	d16,x8
+	fmov	d17,x10
+	fmov	d18,x12
+
+	ldp	x8,x12,[x1],#16	// inp[0:1]
+	ldp	x9,x13,[x1],#48
+
+	ld1	{v0.4s,v1.4s,v2.4s,v3.4s},[x15],#64
+	ld1	{v4.4s,v5.4s,v6.4s,v7.4s},[x15],#64
+	ld1	{v8.4s},[x15]
+
+#ifdef	__AARCH64EB__
+	rev	x8,x8
+	rev	x12,x12
+	rev	x9,x9
+	rev	x13,x13
+#endif
+	and	x4,x8,#0x03ffffff	// base 2^64 -> base 2^26
+	and	x5,x9,#0x03ffffff
+	ubfx	x6,x8,#26,#26
+	ubfx	x7,x9,#26,#26
+	add	x4,x4,x5,lsl#32		// bfi	x4,x5,#32,#32
+	extr	x8,x12,x8,#52
+	extr	x9,x13,x9,#52
+	add	x6,x6,x7,lsl#32		// bfi	x6,x7,#32,#32
+	fmov	d9,x4
+	and	x8,x8,#0x03ffffff
+	and	x9,x9,#0x03ffffff
+	ubfx	x10,x12,#14,#26
+	ubfx	x11,x13,#14,#26
+	add	x12,x3,x12,lsr#40
+	add	x13,x3,x13,lsr#40
+	add	x8,x8,x9,lsl#32		// bfi	x8,x9,#32,#32
+	fmov	d10,x6
+	add	x10,x10,x11,lsl#32	// bfi	x10,x11,#32,#32
+	add	x12,x12,x13,lsl#32	// bfi	x12,x13,#32,#32
+	movi	v31.2d,#-1
+	fmov	d11,x8
+	fmov	d12,x10
+	fmov	d13,x12
+	ushr	v31.2d,v31.2d,#38
+
+	b.ls	.Lskip_loop
+
+.align	4
+.Loop_neon:
+	////////////////////////////////////////////////////////////////
+	// ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2
+	// ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^3+inp[7]*r
+	//   ___________________/
+	// ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2+inp[8])*r^2
+	// ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^4+inp[7]*r^2+inp[9])*r
+	//   ___________________/ ____________________/
+	//
+	// Note that we start with inp[2:3]*r^2. This is because it
+	// doesn't depend on reduction in previous iteration.
+	////////////////////////////////////////////////////////////////
+	// d4 = h0*r4 + h1*r3   + h2*r2   + h3*r1   + h4*r0
+	// d3 = h0*r3 + h1*r2   + h2*r1   + h3*r0   + h4*5*r4
+	// d2 = h0*r2 + h1*r1   + h2*r0   + h3*5*r4 + h4*5*r3
+	// d1 = h0*r1 + h1*r0   + h2*5*r4 + h3*5*r3 + h4*5*r2
+	// d0 = h0*r0 + h1*5*r4 + h2*5*r3 + h3*5*r2 + h4*5*r1
+
+	subs	x2,x2,#64
+	umull	v23.2d,v14.2s,v7.s[2]
+	csel	x16,x17,x16,lo
+	umull	v22.2d,v14.2s,v5.s[2]
+	umull	v21.2d,v14.2s,v3.s[2]
+	 ldp	x8,x12,[x16],#16	// inp[2:3] (or zero)
+	umull	v20.2d,v14.2s,v1.s[2]
+	 ldp	x9,x13,[x16],#48
+	umull	v19.2d,v14.2s,v0.s[2]
+#ifdef	__AARCH64EB__
+	 rev	x8,x8
+	 rev	x12,x12
+	 rev	x9,x9
+	 rev	x13,x13
+#endif
+
+	umlal	v23.2d,v15.2s,v5.s[2]
+	 and	x4,x8,#0x03ffffff	// base 2^64 -> base 2^26
+	umlal	v22.2d,v15.2s,v3.s[2]
+	 and	x5,x9,#0x03ffffff
+	umlal	v21.2d,v15.2s,v1.s[2]
+	 ubfx	x6,x8,#26,#26
+	umlal	v20.2d,v15.2s,v0.s[2]
+	 ubfx	x7,x9,#26,#26
+	umlal	v19.2d,v15.2s,v8.s[2]
+	 add	x4,x4,x5,lsl#32		// bfi	x4,x5,#32,#32
+
+	umlal	v23.2d,v16.2s,v3.s[2]
+	 extr	x8,x12,x8,#52
+	umlal	v22.2d,v16.2s,v1.s[2]
+	 extr	x9,x13,x9,#52
+	umlal	v21.2d,v16.2s,v0.s[2]
+	 add	x6,x6,x7,lsl#32		// bfi	x6,x7,#32,#32
+	umlal	v20.2d,v16.2s,v8.s[2]
+	 fmov	d14,x4
+	umlal	v19.2d,v16.2s,v6.s[2]
+	 and	x8,x8,#0x03ffffff
+
+	umlal	v23.2d,v17.2s,v1.s[2]
+	 and	x9,x9,#0x03ffffff
+	umlal	v22.2d,v17.2s,v0.s[2]
+	 ubfx	x10,x12,#14,#26
+	umlal	v21.2d,v17.2s,v8.s[2]
+	 ubfx	x11,x13,#14,#26
+	umlal	v20.2d,v17.2s,v6.s[2]
+	 add	x8,x8,x9,lsl#32		// bfi	x8,x9,#32,#32
+	umlal	v19.2d,v17.2s,v4.s[2]
+	 fmov	d15,x6
+
+	add	v11.2s,v11.2s,v26.2s
+	 add	x12,x3,x12,lsr#40
+	umlal	v23.2d,v18.2s,v0.s[2]
+	 add	x13,x3,x13,lsr#40
+	umlal	v22.2d,v18.2s,v8.s[2]
+	 add	x10,x10,x11,lsl#32	// bfi	x10,x11,#32,#32
+	umlal	v21.2d,v18.2s,v6.s[2]
+	 add	x12,x12,x13,lsl#32	// bfi	x12,x13,#32,#32
+	umlal	v20.2d,v18.2s,v4.s[2]
+	 fmov	d16,x8
+	umlal	v19.2d,v18.2s,v2.s[2]
+	 fmov	d17,x10
+
+	////////////////////////////////////////////////////////////////
+	// (hash+inp[0:1])*r^4 and accumulate
+
+	add	v9.2s,v9.2s,v24.2s
+	 fmov	d18,x12
+	umlal	v22.2d,v11.2s,v1.s[0]
+	 ldp	x8,x12,[x1],#16	// inp[0:1]
+	umlal	v19.2d,v11.2s,v6.s[0]
+	 ldp	x9,x13,[x1],#48
+	umlal	v23.2d,v11.2s,v3.s[0]
+	umlal	v20.2d,v11.2s,v8.s[0]
+	umlal	v21.2d,v11.2s,v0.s[0]
+#ifdef	__AARCH64EB__
+	 rev	x8,x8
+	 rev	x12,x12
+	 rev	x9,x9
+	 rev	x13,x13
+#endif
+
+	add	v10.2s,v10.2s,v25.2s
+	umlal	v22.2d,v9.2s,v5.s[0]
+	umlal	v23.2d,v9.2s,v7.s[0]
+	 and	x4,x8,#0x03ffffff	// base 2^64 -> base 2^26
+	umlal	v21.2d,v9.2s,v3.s[0]
+	 and	x5,x9,#0x03ffffff
+	umlal	v19.2d,v9.2s,v0.s[0]
+	 ubfx	x6,x8,#26,#26
+	umlal	v20.2d,v9.2s,v1.s[0]
+	 ubfx	x7,x9,#26,#26
+
+	add	v12.2s,v12.2s,v27.2s
+	 add	x4,x4,x5,lsl#32		// bfi	x4,x5,#32,#32
+	umlal	v22.2d,v10.2s,v3.s[0]
+	 extr	x8,x12,x8,#52
+	umlal	v23.2d,v10.2s,v5.s[0]
+	 extr	x9,x13,x9,#52
+	umlal	v19.2d,v10.2s,v8.s[0]
+	 add	x6,x6,x7,lsl#32		// bfi	x6,x7,#32,#32
+	umlal	v21.2d,v10.2s,v1.s[0]
+	 fmov	d9,x4
+	umlal	v20.2d,v10.2s,v0.s[0]
+	 and	x8,x8,#0x03ffffff
+
+	add	v13.2s,v13.2s,v28.2s
+	 and	x9,x9,#0x03ffffff
+	umlal	v22.2d,v12.2s,v0.s[0]
+	 ubfx	x10,x12,#14,#26
+	umlal	v19.2d,v12.2s,v4.s[0]
+	 ubfx	x11,x13,#14,#26
+	umlal	v23.2d,v12.2s,v1.s[0]
+	 add	x8,x8,x9,lsl#32		// bfi	x8,x9,#32,#32
+	umlal	v20.2d,v12.2s,v6.s[0]
+	 fmov	d10,x6
+	umlal	v21.2d,v12.2s,v8.s[0]
+	 add	x12,x3,x12,lsr#40
+
+	umlal	v22.2d,v13.2s,v8.s[0]
+	 add	x13,x3,x13,lsr#40
+	umlal	v19.2d,v13.2s,v2.s[0]
+	 add	x10,x10,x11,lsl#32	// bfi	x10,x11,#32,#32
+	umlal	v23.2d,v13.2s,v0.s[0]
+	 add	x12,x12,x13,lsl#32	// bfi	x12,x13,#32,#32
+	umlal	v20.2d,v13.2s,v4.s[0]
+	 fmov	d11,x8
+	umlal	v21.2d,v13.2s,v6.s[0]
+	 fmov	d12,x10
+	 fmov	d13,x12
+
+	/////////////////////////////////////////////////////////////////
+	// lazy reduction as discussed in "NEON crypto" by D.J. Bernstein
+	// and P. Schwabe
+	//
+	// [see discussion in poly1305-armv4 module]
+
+	ushr	v29.2d,v22.2d,#26
+	xtn	v27.2s,v22.2d
+	 ushr	v30.2d,v19.2d,#26
+	 and	v19.16b,v19.16b,v31.16b
+	add	v23.2d,v23.2d,v29.2d	// h3 -> h4
+	bic	v27.2s,#0xfc,lsl#24	// &=0x03ffffff
+	 add	v20.2d,v20.2d,v30.2d	// h0 -> h1
+
+	ushr	v29.2d,v23.2d,#26
+	xtn	v28.2s,v23.2d
+	 ushr	v30.2d,v20.2d,#26
+	 xtn	v25.2s,v20.2d
+	bic	v28.2s,#0xfc,lsl#24
+	 add	v21.2d,v21.2d,v30.2d	// h1 -> h2
+
+	add	v19.2d,v19.2d,v29.2d
+	shl	v29.2d,v29.2d,#2
+	 shrn	v30.2s,v21.2d,#26
+	 xtn	v26.2s,v21.2d
+	add	v19.2d,v19.2d,v29.2d	// h4 -> h0
+	 bic	v25.2s,#0xfc,lsl#24
+	 add	v27.2s,v27.2s,v30.2s		// h2 -> h3
+	 bic	v26.2s,#0xfc,lsl#24
+
+	shrn	v29.2s,v19.2d,#26
+	xtn	v24.2s,v19.2d
+	 ushr	v30.2s,v27.2s,#26
+	 bic	v27.2s,#0xfc,lsl#24
+	 bic	v24.2s,#0xfc,lsl#24
+	add	v25.2s,v25.2s,v29.2s		// h0 -> h1
+	 add	v28.2s,v28.2s,v30.2s		// h3 -> h4
+
+	b.hi	.Loop_neon
+
+.Lskip_loop:
+	dup	v16.2d,v16.d[0]
+	add	v11.2s,v11.2s,v26.2s
+
+	////////////////////////////////////////////////////////////////
+	// multiply (inp[0:1]+hash) or inp[2:3] by r^2:r^1
+
+	adds	x2,x2,#32
+	b.ne	.Long_tail
+
+	dup	v16.2d,v11.d[0]
+	add	v14.2s,v9.2s,v24.2s
+	add	v17.2s,v12.2s,v27.2s
+	add	v15.2s,v10.2s,v25.2s
+	add	v18.2s,v13.2s,v28.2s
+
+.Long_tail:
+	dup	v14.2d,v14.d[0]
+	umull2	v19.2d,v16.4s,v6.4s
+	umull2	v22.2d,v16.4s,v1.4s
+	umull2	v23.2d,v16.4s,v3.4s
+	umull2	v21.2d,v16.4s,v0.4s
+	umull2	v20.2d,v16.4s,v8.4s
+
+	dup	v15.2d,v15.d[0]
+	umlal2	v19.2d,v14.4s,v0.4s
+	umlal2	v21.2d,v14.4s,v3.4s
+	umlal2	v22.2d,v14.4s,v5.4s
+	umlal2	v23.2d,v14.4s,v7.4s
+	umlal2	v20.2d,v14.4s,v1.4s
+
+	dup	v17.2d,v17.d[0]
+	umlal2	v19.2d,v15.4s,v8.4s
+	umlal2	v22.2d,v15.4s,v3.4s
+	umlal2	v21.2d,v15.4s,v1.4s
+	umlal2	v23.2d,v15.4s,v5.4s
+	umlal2	v20.2d,v15.4s,v0.4s
+
+	dup	v18.2d,v18.d[0]
+	umlal2	v22.2d,v17.4s,v0.4s
+	umlal2	v23.2d,v17.4s,v1.4s
+	umlal2	v19.2d,v17.4s,v4.4s
+	umlal2	v20.2d,v17.4s,v6.4s
+	umlal2	v21.2d,v17.4s,v8.4s
+
+	umlal2	v22.2d,v18.4s,v8.4s
+	umlal2	v19.2d,v18.4s,v2.4s
+	umlal2	v23.2d,v18.4s,v0.4s
+	umlal2	v20.2d,v18.4s,v4.4s
+	umlal2	v21.2d,v18.4s,v6.4s
+
+	b.eq	.Lshort_tail
+
+	////////////////////////////////////////////////////////////////
+	// (hash+inp[0:1])*r^4:r^3 and accumulate
+
+	add	v9.2s,v9.2s,v24.2s
+	umlal	v22.2d,v11.2s,v1.2s
+	umlal	v19.2d,v11.2s,v6.2s
+	umlal	v23.2d,v11.2s,v3.2s
+	umlal	v20.2d,v11.2s,v8.2s
+	umlal	v21.2d,v11.2s,v0.2s
+
+	add	v10.2s,v10.2s,v25.2s
+	umlal	v22.2d,v9.2s,v5.2s
+	umlal	v19.2d,v9.2s,v0.2s
+	umlal	v23.2d,v9.2s,v7.2s
+	umlal	v20.2d,v9.2s,v1.2s
+	umlal	v21.2d,v9.2s,v3.2s
+
+	add	v12.2s,v12.2s,v27.2s
+	umlal	v22.2d,v10.2s,v3.2s
+	umlal	v19.2d,v10.2s,v8.2s
+	umlal	v23.2d,v10.2s,v5.2s
+	umlal	v20.2d,v10.2s,v0.2s
+	umlal	v21.2d,v10.2s,v1.2s
+
+	add	v13.2s,v13.2s,v28.2s
+	umlal	v22.2d,v12.2s,v0.2s
+	umlal	v19.2d,v12.2s,v4.2s
+	umlal	v23.2d,v12.2s,v1.2s
+	umlal	v20.2d,v12.2s,v6.2s
+	umlal	v21.2d,v12.2s,v8.2s
+
+	umlal	v22.2d,v13.2s,v8.2s
+	umlal	v19.2d,v13.2s,v2.2s
+	umlal	v23.2d,v13.2s,v0.2s
+	umlal	v20.2d,v13.2s,v4.2s
+	umlal	v21.2d,v13.2s,v6.2s
+
+.Lshort_tail:
+	////////////////////////////////////////////////////////////////
+	// horizontal add
+
+	addp	v22.2d,v22.2d,v22.2d
+	 ldp	d8,d9,[sp,#16]		// meet ABI requirements
+	addp	v19.2d,v19.2d,v19.2d
+	 ldp	d10,d11,[sp,#32]
+	addp	v23.2d,v23.2d,v23.2d
+	 ldp	d12,d13,[sp,#48]
+	addp	v20.2d,v20.2d,v20.2d
+	 ldp	d14,d15,[sp,#64]
+	addp	v21.2d,v21.2d,v21.2d
+	 ldr	x30,[sp,#8]
+
+	////////////////////////////////////////////////////////////////
+	// lazy reduction, but without narrowing
+
+	ushr	v29.2d,v22.2d,#26
+	and	v22.16b,v22.16b,v31.16b
+	 ushr	v30.2d,v19.2d,#26
+	 and	v19.16b,v19.16b,v31.16b
+
+	add	v23.2d,v23.2d,v29.2d	// h3 -> h4
+	 add	v20.2d,v20.2d,v30.2d	// h0 -> h1
+
+	ushr	v29.2d,v23.2d,#26
+	and	v23.16b,v23.16b,v31.16b
+	 ushr	v30.2d,v20.2d,#26
+	 and	v20.16b,v20.16b,v31.16b
+	 add	v21.2d,v21.2d,v30.2d	// h1 -> h2
+
+	add	v19.2d,v19.2d,v29.2d
+	shl	v29.2d,v29.2d,#2
+	 ushr	v30.2d,v21.2d,#26
+	 and	v21.16b,v21.16b,v31.16b
+	add	v19.2d,v19.2d,v29.2d	// h4 -> h0
+	 add	v22.2d,v22.2d,v30.2d	// h2 -> h3
+
+	ushr	v29.2d,v19.2d,#26
+	and	v19.16b,v19.16b,v31.16b
+	 ushr	v30.2d,v22.2d,#26
+	 and	v22.16b,v22.16b,v31.16b
+	add	v20.2d,v20.2d,v29.2d	// h0 -> h1
+	 add	v23.2d,v23.2d,v30.2d	// h3 -> h4
+
+	////////////////////////////////////////////////////////////////
+	// write the result, can be partially reduced
+
+	st4	{v19.s,v20.s,v21.s,v22.s}[0],[x0],#16
+	mov	x4,#1
+	st1	{v23.s}[0],[x0]
+	str	x4,[x0,#8]		// set is_base2_26
+
+	ldr	x29,[sp],#80
+	 .inst	0xd50323bf		// autiasp
+	ret
+.size	poly1305_blocks_neon,.-poly1305_blocks_neon
+
+.align	5
+.Lzeros:
+.long	0,0,0,0,0,0,0,0
+.asciz	"Poly1305 for ARMv8, CRYPTOGAMS by @dot-asm"
+.align	2
+#if !defined(__KERNEL__) && !defined(_WIN64)
+.comm	OPENSSL_armcap_P,4,4
+.hidden	OPENSSL_armcap_P
+#endif
diff --git a/arch/arm64/crypto/poly1305-glue.c b/arch/arm64/crypto/poly1305-glue.c
new file mode 100644
index 0000000..f33ada7
--- /dev/null
+++ b/arch/arm64/crypto/poly1305-glue.c
@@ -0,0 +1,231 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * OpenSSL/Cryptogams accelerated Poly1305 transform for arm64
+ *
+ * Copyright (C) 2019 Linaro Ltd. <ard.biesheuvel@linaro.org>
+ */
+
+#include <asm/hwcap.h>
+#include <asm/neon.h>
+#include <asm/simd.h>
+#include <asm/unaligned.h>
+#include <crypto/algapi.h>
+#include <crypto/internal/hash.h>
+#include <crypto/internal/poly1305.h>
+#include <crypto/internal/simd.h>
+#include <linux/cpufeature.h>
+#include <linux/crypto.h>
+#include <linux/jump_label.h>
+#include <linux/module.h>
+
+asmlinkage void poly1305_init_arm64(void *state, const u8 *key);
+asmlinkage void poly1305_blocks(void *state, const u8 *src, u32 len, u32 hibit);
+asmlinkage void poly1305_blocks_neon(void *state, const u8 *src, u32 len, u32 hibit);
+asmlinkage void poly1305_emit(void *state, u8 *digest, const u32 *nonce);
+
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(have_neon);
+
+void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 *key)
+{
+	poly1305_init_arm64(&dctx->h, key);
+	dctx->s[0] = get_unaligned_le32(key + 16);
+	dctx->s[1] = get_unaligned_le32(key + 20);
+	dctx->s[2] = get_unaligned_le32(key + 24);
+	dctx->s[3] = get_unaligned_le32(key + 28);
+	dctx->buflen = 0;
+}
+EXPORT_SYMBOL(poly1305_init_arch);
+
+static int neon_poly1305_init(struct shash_desc *desc)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	dctx->buflen = 0;
+	dctx->rset = 0;
+	dctx->sset = false;
+
+	return 0;
+}
+
+static void neon_poly1305_blocks(struct poly1305_desc_ctx *dctx, const u8 *src,
+				 u32 len, u32 hibit, bool do_neon)
+{
+	if (unlikely(!dctx->sset)) {
+		if (!dctx->rset) {
+			poly1305_init_arch(dctx, src);
+			src += POLY1305_BLOCK_SIZE;
+			len -= POLY1305_BLOCK_SIZE;
+			dctx->rset = 1;
+		}
+		if (len >= POLY1305_BLOCK_SIZE) {
+			dctx->s[0] = get_unaligned_le32(src +  0);
+			dctx->s[1] = get_unaligned_le32(src +  4);
+			dctx->s[2] = get_unaligned_le32(src +  8);
+			dctx->s[3] = get_unaligned_le32(src + 12);
+			src += POLY1305_BLOCK_SIZE;
+			len -= POLY1305_BLOCK_SIZE;
+			dctx->sset = true;
+		}
+		if (len < POLY1305_BLOCK_SIZE)
+			return;
+	}
+
+	len &= ~(POLY1305_BLOCK_SIZE - 1);
+
+	if (static_branch_likely(&have_neon) && likely(do_neon))
+		poly1305_blocks_neon(&dctx->h, src, len, hibit);
+	else
+		poly1305_blocks(&dctx->h, src, len, hibit);
+}
+
+static void neon_poly1305_do_update(struct poly1305_desc_ctx *dctx,
+				    const u8 *src, u32 len, bool do_neon)
+{
+	if (unlikely(dctx->buflen)) {
+		u32 bytes = min(len, POLY1305_BLOCK_SIZE - dctx->buflen);
+
+		memcpy(dctx->buf + dctx->buflen, src, bytes);
+		src += bytes;
+		len -= bytes;
+		dctx->buflen += bytes;
+
+		if (dctx->buflen == POLY1305_BLOCK_SIZE) {
+			neon_poly1305_blocks(dctx, dctx->buf,
+					     POLY1305_BLOCK_SIZE, 1, false);
+			dctx->buflen = 0;
+		}
+	}
+
+	if (likely(len >= POLY1305_BLOCK_SIZE)) {
+		neon_poly1305_blocks(dctx, src, len, 1, do_neon);
+		src += round_down(len, POLY1305_BLOCK_SIZE);
+		len %= POLY1305_BLOCK_SIZE;
+	}
+
+	if (unlikely(len)) {
+		dctx->buflen = len;
+		memcpy(dctx->buf, src, len);
+	}
+}
+
+static int neon_poly1305_update(struct shash_desc *desc,
+				const u8 *src, unsigned int srclen)
+{
+	bool do_neon = crypto_simd_usable() && srclen > 128;
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	if (static_branch_likely(&have_neon) && do_neon)
+		kernel_neon_begin();
+	neon_poly1305_do_update(dctx, src, srclen, do_neon);
+	if (static_branch_likely(&have_neon) && do_neon)
+		kernel_neon_end();
+	return 0;
+}
+
+void poly1305_update_arch(struct poly1305_desc_ctx *dctx, const u8 *src,
+			  unsigned int nbytes)
+{
+	if (unlikely(dctx->buflen)) {
+		u32 bytes = min(nbytes, POLY1305_BLOCK_SIZE - dctx->buflen);
+
+		memcpy(dctx->buf + dctx->buflen, src, bytes);
+		src += bytes;
+		nbytes -= bytes;
+		dctx->buflen += bytes;
+
+		if (dctx->buflen == POLY1305_BLOCK_SIZE) {
+			poly1305_blocks(&dctx->h, dctx->buf, POLY1305_BLOCK_SIZE, 1);
+			dctx->buflen = 0;
+		}
+	}
+
+	if (likely(nbytes >= POLY1305_BLOCK_SIZE)) {
+		unsigned int len = round_down(nbytes, POLY1305_BLOCK_SIZE);
+
+		if (static_branch_likely(&have_neon) && crypto_simd_usable()) {
+			do {
+				unsigned int todo = min_t(unsigned int, len, SZ_4K);
+
+				kernel_neon_begin();
+				poly1305_blocks_neon(&dctx->h, src, todo, 1);
+				kernel_neon_end();
+
+				len -= todo;
+				src += todo;
+			} while (len);
+		} else {
+			poly1305_blocks(&dctx->h, src, len, 1);
+			src += len;
+		}
+		nbytes %= POLY1305_BLOCK_SIZE;
+	}
+
+	if (unlikely(nbytes)) {
+		dctx->buflen = nbytes;
+		memcpy(dctx->buf, src, nbytes);
+	}
+}
+EXPORT_SYMBOL(poly1305_update_arch);
+
+void poly1305_final_arch(struct poly1305_desc_ctx *dctx, u8 *dst)
+{
+	if (unlikely(dctx->buflen)) {
+		dctx->buf[dctx->buflen++] = 1;
+		memset(dctx->buf + dctx->buflen, 0,
+		       POLY1305_BLOCK_SIZE - dctx->buflen);
+		poly1305_blocks(&dctx->h, dctx->buf, POLY1305_BLOCK_SIZE, 0);
+	}
+
+	poly1305_emit(&dctx->h, dst, dctx->s);
+	*dctx = (struct poly1305_desc_ctx){};
+}
+EXPORT_SYMBOL(poly1305_final_arch);
+
+static int neon_poly1305_final(struct shash_desc *desc, u8 *dst)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	if (unlikely(!dctx->sset))
+		return -ENOKEY;
+
+	poly1305_final_arch(dctx, dst);
+	return 0;
+}
+
+static struct shash_alg neon_poly1305_alg = {
+	.init			= neon_poly1305_init,
+	.update			= neon_poly1305_update,
+	.final			= neon_poly1305_final,
+	.digestsize		= POLY1305_DIGEST_SIZE,
+	.descsize		= sizeof(struct poly1305_desc_ctx),
+
+	.base.cra_name		= "poly1305",
+	.base.cra_driver_name	= "poly1305-neon",
+	.base.cra_priority	= 200,
+	.base.cra_blocksize	= POLY1305_BLOCK_SIZE,
+	.base.cra_module	= THIS_MODULE,
+};
+
+static int __init neon_poly1305_mod_init(void)
+{
+	if (!cpu_have_named_feature(ASIMD))
+		return 0;
+
+	static_branch_enable(&have_neon);
+
+	return IS_REACHABLE(CONFIG_CRYPTO_HASH) ?
+		crypto_register_shash(&neon_poly1305_alg) : 0;
+}
+
+static void __exit neon_poly1305_mod_exit(void)
+{
+	if (IS_REACHABLE(CONFIG_CRYPTO_HASH) && cpu_have_named_feature(ASIMD))
+		crypto_unregister_shash(&neon_poly1305_alg);
+}
+
+module_init(neon_poly1305_mod_init);
+module_exit(neon_poly1305_mod_exit);
+
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS_CRYPTO("poly1305");
+MODULE_ALIAS_CRYPTO("poly1305-neon");
diff --git a/arch/arm64/crypto/sha1-ce-glue.c b/arch/arm64/crypto/sha1-ce-glue.c
index bdc1b6d..ee8d9f0 100644
--- a/arch/arm64/crypto/sha1-ce-glue.c
+++ b/arch/arm64/crypto/sha1-ce-glue.c
@@ -28,6 +28,13 @@ struct sha1_ce_state {
 asmlinkage void sha1_ce_transform(struct sha1_ce_state *sst, u8 const *src,
 				  int blocks);
 
+static void __sha1_ce_transform(struct sha1_state *sst, u8 const *src,
+				int blocks)
+{
+	return sha1_ce_transform(container_of(sst, struct sha1_ce_state, sst),
+				 src, blocks);
+}
+
 const u32 sha1_ce_offsetof_count = offsetof(struct sha1_ce_state, sst.count);
 const u32 sha1_ce_offsetof_finalize = offsetof(struct sha1_ce_state, finalize);
 
@@ -41,8 +48,7 @@ static int sha1_ce_update(struct shash_desc *desc, const u8 *data,
 
 	sctx->finalize = 0;
 	kernel_neon_begin();
-	sha1_base_do_update(desc, data, len,
-			    (sha1_block_fn *)sha1_ce_transform);
+	sha1_base_do_update(desc, data, len, __sha1_ce_transform);
 	kernel_neon_end();
 
 	return 0;
@@ -64,10 +70,9 @@ static int sha1_ce_finup(struct shash_desc *desc, const u8 *data,
 	sctx->finalize = finalize;
 
 	kernel_neon_begin();
-	sha1_base_do_update(desc, data, len,
-			    (sha1_block_fn *)sha1_ce_transform);
+	sha1_base_do_update(desc, data, len, __sha1_ce_transform);
 	if (!finalize)
-		sha1_base_do_finalize(desc, (sha1_block_fn *)sha1_ce_transform);
+		sha1_base_do_finalize(desc, __sha1_ce_transform);
 	kernel_neon_end();
 	return sha1_base_finish(desc, out);
 }
@@ -81,7 +86,7 @@ static int sha1_ce_final(struct shash_desc *desc, u8 *out)
 
 	sctx->finalize = 0;
 	kernel_neon_begin();
-	sha1_base_do_finalize(desc, (sha1_block_fn *)sha1_ce_transform);
+	sha1_base_do_finalize(desc, __sha1_ce_transform);
 	kernel_neon_end();
 	return sha1_base_finish(desc, out);
 }
diff --git a/arch/arm64/crypto/sha2-ce-glue.c b/arch/arm64/crypto/sha2-ce-glue.c
index 604a01a..2b05e95 100644
--- a/arch/arm64/crypto/sha2-ce-glue.c
+++ b/arch/arm64/crypto/sha2-ce-glue.c
@@ -28,6 +28,13 @@ struct sha256_ce_state {
 asmlinkage void sha2_ce_transform(struct sha256_ce_state *sst, u8 const *src,
 				  int blocks);
 
+static void __sha2_ce_transform(struct sha256_state *sst, u8 const *src,
+				int blocks)
+{
+	return sha2_ce_transform(container_of(sst, struct sha256_ce_state, sst),
+				 src, blocks);
+}
+
 const u32 sha256_ce_offsetof_count = offsetof(struct sha256_ce_state,
 					      sst.count);
 const u32 sha256_ce_offsetof_finalize = offsetof(struct sha256_ce_state,
@@ -35,6 +42,12 @@ const u32 sha256_ce_offsetof_finalize = offsetof(struct sha256_ce_state,
 
 asmlinkage void sha256_block_data_order(u32 *digest, u8 const *src, int blocks);
 
+static void __sha256_block_data_order(struct sha256_state *sst, u8 const *src,
+				      int blocks)
+{
+	return sha256_block_data_order(sst->state, src, blocks);
+}
+
 static int sha256_ce_update(struct shash_desc *desc, const u8 *data,
 			    unsigned int len)
 {
@@ -42,12 +55,11 @@ static int sha256_ce_update(struct shash_desc *desc, const u8 *data,
 
 	if (!crypto_simd_usable())
 		return sha256_base_do_update(desc, data, len,
-				(sha256_block_fn *)sha256_block_data_order);
+				__sha256_block_data_order);
 
 	sctx->finalize = 0;
 	kernel_neon_begin();
-	sha256_base_do_update(desc, data, len,
-			      (sha256_block_fn *)sha2_ce_transform);
+	sha256_base_do_update(desc, data, len, __sha2_ce_transform);
 	kernel_neon_end();
 
 	return 0;
@@ -62,9 +74,8 @@ static int sha256_ce_finup(struct shash_desc *desc, const u8 *data,
 	if (!crypto_simd_usable()) {
 		if (len)
 			sha256_base_do_update(desc, data, len,
-				(sha256_block_fn *)sha256_block_data_order);
-		sha256_base_do_finalize(desc,
-				(sha256_block_fn *)sha256_block_data_order);
+				__sha256_block_data_order);
+		sha256_base_do_finalize(desc, __sha256_block_data_order);
 		return sha256_base_finish(desc, out);
 	}
 
@@ -75,11 +86,9 @@ static int sha256_ce_finup(struct shash_desc *desc, const u8 *data,
 	sctx->finalize = finalize;
 
 	kernel_neon_begin();
-	sha256_base_do_update(desc, data, len,
-			      (sha256_block_fn *)sha2_ce_transform);
+	sha256_base_do_update(desc, data, len, __sha2_ce_transform);
 	if (!finalize)
-		sha256_base_do_finalize(desc,
-					(sha256_block_fn *)sha2_ce_transform);
+		sha256_base_do_finalize(desc, __sha2_ce_transform);
 	kernel_neon_end();
 	return sha256_base_finish(desc, out);
 }
@@ -89,14 +98,13 @@ static int sha256_ce_final(struct shash_desc *desc, u8 *out)
 	struct sha256_ce_state *sctx = shash_desc_ctx(desc);
 
 	if (!crypto_simd_usable()) {
-		sha256_base_do_finalize(desc,
-				(sha256_block_fn *)sha256_block_data_order);
+		sha256_base_do_finalize(desc, __sha256_block_data_order);
 		return sha256_base_finish(desc, out);
 	}
 
 	sctx->finalize = 0;
 	kernel_neon_begin();
-	sha256_base_do_finalize(desc, (sha256_block_fn *)sha2_ce_transform);
+	sha256_base_do_finalize(desc, __sha2_ce_transform);
 	kernel_neon_end();
 	return sha256_base_finish(desc, out);
 }
diff --git a/arch/arm64/crypto/sha256-glue.c b/arch/arm64/crypto/sha256-glue.c
index e273fac..03ed035 100644
--- a/arch/arm64/crypto/sha256-glue.c
+++ b/arch/arm64/crypto/sha256-glue.c
@@ -27,14 +27,26 @@ asmlinkage void sha256_block_data_order(u32 *digest, const void *data,
 					unsigned int num_blks);
 EXPORT_SYMBOL(sha256_block_data_order);
 
+static void __sha256_block_data_order(struct sha256_state *sst, u8 const *src,
+				      int blocks)
+{
+	return sha256_block_data_order(sst->state, src, blocks);
+}
+
 asmlinkage void sha256_block_neon(u32 *digest, const void *data,
 				  unsigned int num_blks);
 
+static void __sha256_block_neon(struct sha256_state *sst, u8 const *src,
+				int blocks)
+{
+	return sha256_block_neon(sst->state, src, blocks);
+}
+
 static int crypto_sha256_arm64_update(struct shash_desc *desc, const u8 *data,
 				      unsigned int len)
 {
 	return sha256_base_do_update(desc, data, len,
-				(sha256_block_fn *)sha256_block_data_order);
+				     __sha256_block_data_order);
 }
 
 static int crypto_sha256_arm64_finup(struct shash_desc *desc, const u8 *data,
@@ -42,9 +54,8 @@ static int crypto_sha256_arm64_finup(struct shash_desc *desc, const u8 *data,
 {
 	if (len)
 		sha256_base_do_update(desc, data, len,
-				(sha256_block_fn *)sha256_block_data_order);
-	sha256_base_do_finalize(desc,
-				(sha256_block_fn *)sha256_block_data_order);
+				      __sha256_block_data_order);
+	sha256_base_do_finalize(desc, __sha256_block_data_order);
 
 	return sha256_base_finish(desc, out);
 }
@@ -87,7 +98,7 @@ static int sha256_update_neon(struct shash_desc *desc, const u8 *data,
 
 	if (!crypto_simd_usable())
 		return sha256_base_do_update(desc, data, len,
-				(sha256_block_fn *)sha256_block_data_order);
+				__sha256_block_data_order);
 
 	while (len > 0) {
 		unsigned int chunk = len;
@@ -103,8 +114,7 @@ static int sha256_update_neon(struct shash_desc *desc, const u8 *data,
 				sctx->count % SHA256_BLOCK_SIZE;
 
 		kernel_neon_begin();
-		sha256_base_do_update(desc, data, chunk,
-				      (sha256_block_fn *)sha256_block_neon);
+		sha256_base_do_update(desc, data, chunk, __sha256_block_neon);
 		kernel_neon_end();
 		data += chunk;
 		len -= chunk;
@@ -118,15 +128,13 @@ static int sha256_finup_neon(struct shash_desc *desc, const u8 *data,
 	if (!crypto_simd_usable()) {
 		if (len)
 			sha256_base_do_update(desc, data, len,
-				(sha256_block_fn *)sha256_block_data_order);
-		sha256_base_do_finalize(desc,
-				(sha256_block_fn *)sha256_block_data_order);
+				__sha256_block_data_order);
+		sha256_base_do_finalize(desc, __sha256_block_data_order);
 	} else {
 		if (len)
 			sha256_update_neon(desc, data, len);
 		kernel_neon_begin();
-		sha256_base_do_finalize(desc,
-				(sha256_block_fn *)sha256_block_neon);
+		sha256_base_do_finalize(desc, __sha256_block_neon);
 		kernel_neon_end();
 	}
 	return sha256_base_finish(desc, out);
diff --git a/arch/arm64/crypto/sha512-ce-glue.c b/arch/arm64/crypto/sha512-ce-glue.c
index 2369540..659c913 100644
--- a/arch/arm64/crypto/sha512-ce-glue.c
+++ b/arch/arm64/crypto/sha512-ce-glue.c
@@ -29,16 +29,21 @@ asmlinkage void sha512_ce_transform(struct sha512_state *sst, u8 const *src,
 
 asmlinkage void sha512_block_data_order(u64 *digest, u8 const *src, int blocks);
 
+static void __sha512_block_data_order(struct sha512_state *sst, u8 const *src,
+				      int blocks)
+{
+	return sha512_block_data_order(sst->state, src, blocks);
+}
+
 static int sha512_ce_update(struct shash_desc *desc, const u8 *data,
 			    unsigned int len)
 {
 	if (!crypto_simd_usable())
 		return sha512_base_do_update(desc, data, len,
-				(sha512_block_fn *)sha512_block_data_order);
+					     __sha512_block_data_order);
 
 	kernel_neon_begin();
-	sha512_base_do_update(desc, data, len,
-			      (sha512_block_fn *)sha512_ce_transform);
+	sha512_base_do_update(desc, data, len, sha512_ce_transform);
 	kernel_neon_end();
 
 	return 0;
@@ -50,16 +55,14 @@ static int sha512_ce_finup(struct shash_desc *desc, const u8 *data,
 	if (!crypto_simd_usable()) {
 		if (len)
 			sha512_base_do_update(desc, data, len,
-				(sha512_block_fn *)sha512_block_data_order);
-		sha512_base_do_finalize(desc,
-				(sha512_block_fn *)sha512_block_data_order);
+					      __sha512_block_data_order);
+		sha512_base_do_finalize(desc, __sha512_block_data_order);
 		return sha512_base_finish(desc, out);
 	}
 
 	kernel_neon_begin();
-	sha512_base_do_update(desc, data, len,
-			      (sha512_block_fn *)sha512_ce_transform);
-	sha512_base_do_finalize(desc, (sha512_block_fn *)sha512_ce_transform);
+	sha512_base_do_update(desc, data, len, sha512_ce_transform);
+	sha512_base_do_finalize(desc, sha512_ce_transform);
 	kernel_neon_end();
 	return sha512_base_finish(desc, out);
 }
@@ -67,13 +70,12 @@ static int sha512_ce_finup(struct shash_desc *desc, const u8 *data,
 static int sha512_ce_final(struct shash_desc *desc, u8 *out)
 {
 	if (!crypto_simd_usable()) {
-		sha512_base_do_finalize(desc,
-				(sha512_block_fn *)sha512_block_data_order);
+		sha512_base_do_finalize(desc, __sha512_block_data_order);
 		return sha512_base_finish(desc, out);
 	}
 
 	kernel_neon_begin();
-	sha512_base_do_finalize(desc, (sha512_block_fn *)sha512_ce_transform);
+	sha512_base_do_finalize(desc, sha512_ce_transform);
 	kernel_neon_end();
 	return sha512_base_finish(desc, out);
 }
diff --git a/arch/arm64/crypto/sha512-glue.c b/arch/arm64/crypto/sha512-glue.c
index d915c656..86045ae 100644
--- a/arch/arm64/crypto/sha512-glue.c
+++ b/arch/arm64/crypto/sha512-glue.c
@@ -20,15 +20,21 @@ MODULE_LICENSE("GPL v2");
 MODULE_ALIAS_CRYPTO("sha384");
 MODULE_ALIAS_CRYPTO("sha512");
 
-asmlinkage void sha512_block_data_order(u32 *digest, const void *data,
+asmlinkage void sha512_block_data_order(u64 *digest, const void *data,
 					unsigned int num_blks);
 EXPORT_SYMBOL(sha512_block_data_order);
 
+static void __sha512_block_data_order(struct sha512_state *sst, u8 const *src,
+				      int blocks)
+{
+	return sha512_block_data_order(sst->state, src, blocks);
+}
+
 static int sha512_update(struct shash_desc *desc, const u8 *data,
 			 unsigned int len)
 {
 	return sha512_base_do_update(desc, data, len,
-			(sha512_block_fn *)sha512_block_data_order);
+				     __sha512_block_data_order);
 }
 
 static int sha512_finup(struct shash_desc *desc, const u8 *data,
@@ -36,9 +42,8 @@ static int sha512_finup(struct shash_desc *desc, const u8 *data,
 {
 	if (len)
 		sha512_base_do_update(desc, data, len,
-			(sha512_block_fn *)sha512_block_data_order);
-	sha512_base_do_finalize(desc,
-			(sha512_block_fn *)sha512_block_data_order);
+				      __sha512_block_data_order);
+	sha512_base_do_finalize(desc, __sha512_block_data_order);
 
 	return sha512_base_finish(desc, out);
 }
diff --git a/arch/arm64/include/asm/alternative.h b/arch/arm64/include/asm/alternative.h
index 619db9b..5e5dc05 100644
--- a/arch/arm64/include/asm/alternative.h
+++ b/arch/arm64/include/asm/alternative.h
@@ -73,13 +73,13 @@ static inline void apply_alternatives_module(void *start, size_t length) { }
 	".pushsection .altinstructions,\"a\"\n"				\
 	ALTINSTR_ENTRY(feature)						\
 	".popsection\n"							\
-	".subsection 1\n"						\
+	".pushsection .altinstr_replacement, \"a\"\n"			\
 	"663:\n\t"							\
 	newinstr "\n"							\
 	"664:\n\t"							\
+	".popsection\n\t"						\
 	".org	. - (664b-663b) + (662b-661b)\n\t"			\
-	".org	. - (662b-661b) + (664b-663b)\n\t"			\
-	".previous\n"							\
+	".org	. - (662b-661b) + (664b-663b)\n"			\
 	".endif\n"
 
 #define __ALTERNATIVE_CFG_CB(oldinstr, feature, cfg_enabled, cb)	\
@@ -117,9 +117,9 @@ static inline void apply_alternatives_module(void *start, size_t length) { }
 662:	.pushsection .altinstructions, "a"
 	altinstruction_entry 661b, 663f, \cap, 662b-661b, 664f-663f
 	.popsection
-	.subsection 1
+	.pushsection .altinstr_replacement, "ax"
 663:	\insn2
-664:	.previous
+664:	.popsection
 	.org	. - (664b-663b) + (662b-661b)
 	.org	. - (662b-661b) + (664b-663b)
 	.endif
@@ -160,7 +160,7 @@ static inline void apply_alternatives_module(void *start, size_t length) { }
 	.pushsection .altinstructions, "a"
 	altinstruction_entry 663f, 661f, \cap, 664f-663f, 662f-661f
 	.popsection
-	.subsection 1
+	.pushsection .altinstr_replacement, "ax"
 	.align 2	/* So GAS knows label 661 is suitably aligned */
 661:
 .endm
@@ -179,9 +179,9 @@ static inline void apply_alternatives_module(void *start, size_t length) { }
 .macro alternative_else
 662:
 	.if .Lasm_alt_mode==0
-	.subsection 1
+	.pushsection .altinstr_replacement, "ax"
 	.else
-	.previous
+	.popsection
 	.endif
 663:
 .endm
@@ -192,7 +192,7 @@ static inline void apply_alternatives_module(void *start, size_t length) { }
 .macro alternative_endif
 664:
 	.if .Lasm_alt_mode==0
-	.previous
+	.popsection
 	.endif
 	.org	. - (664b-663b) + (662b-661b)
 	.org	. - (662b-661b) + (664b-663b)
diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/assembler.h
index 4a4258f..21b606b 100644
--- a/arch/arm64/include/asm/assembler.h
+++ b/arch/arm64/include/asm/assembler.h
@@ -444,6 +444,16 @@ USER(\label, ic	ivau, \tmp2)			// invalidate I line PoU
 	.endm
 
 /*
+ * reset_amuserenr_el0 - reset AMUSERENR_EL0 if AMUv1 present
+ */
+	.macro	reset_amuserenr_el0, tmpreg
+	mrs	\tmpreg, id_aa64pfr0_el1	// Check ID_AA64PFR0_EL1
+	ubfx	\tmpreg, \tmpreg, #ID_AA64PFR0_AMU_SHIFT, #4
+	cbz	\tmpreg, .Lskip_\@		// Skip if no AMU present
+	msr_s	SYS_AMUSERENR_EL0, xzr		// Disable AMU access from EL0
+.Lskip_\@:
+	.endm
+/*
  * copy_page - copy src to dest using temp registers t1-t8
  */
 	.macro copy_page dest:req src:req t1:req t2:req t3:req t4:req t5:req t6:req t7:req t8:req
diff --git a/arch/arm64/include/asm/clocksource.h b/arch/arm64/include/asm/clocksource.h
index 0c791044..193f82a 100644
--- a/arch/arm64/include/asm/clocksource.h
+++ b/arch/arm64/include/asm/clocksource.h
@@ -2,11 +2,11 @@
 #ifndef _ASM_CLOCKSOURCE_H
 #define _ASM_CLOCKSOURCE_H
 
-#include <asm/vdso/clocksource.h>
+#include <vdso/clocksource.h>
 
 struct arch_clocksource_data {
 	/* Usable for direct VDSO access? */
-	enum vdso_arch_clockmode clock_mode;
+	enum vdso_clock_mode clock_mode;
 };
 
 #endif
diff --git a/arch/arm64/include/asm/cpucaps.h b/arch/arm64/include/asm/cpucaps.h
index 1dc3c76..9f6894d 100644
--- a/arch/arm64/include/asm/cpucaps.h
+++ b/arch/arm64/include/asm/cpucaps.h
@@ -55,7 +55,9 @@
 #define ARM64_WORKAROUND_CAVIUM_TX2_219_TVM	45
 #define ARM64_WORKAROUND_CAVIUM_TX2_219_PRFM	46
 #define ARM64_WORKAROUND_1542419		47
+#define ARM64_HAS_AMU_EXTN			48
 
-#define ARM64_NCAPS				48
+/* kabi: reserve 49 - 62 for future cpu capabilities */
+#define ARM64_NCAPS				62
 
 #endif /* __ASM_CPUCAPS_H */
diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h
index ccae05d..b88c37a 100644
--- a/arch/arm64/include/asm/cpufeature.h
+++ b/arch/arm64/include/asm/cpufeature.h
@@ -661,6 +661,12 @@ static inline u32 id_aa64mmfr0_parange_to_phys_shift(int parange)
 	default: return CONFIG_ARM64_PA_BITS;
 	}
 }
+
+#ifdef CONFIG_ARM64_AMU_EXTN
+/* Check whether the cpu supports the Activity Monitors Unit (AMU) */
+extern bool cpu_has_amu_feat(int cpu);
+#endif
+
 #endif /* __ASSEMBLY__ */
 
 #endif
diff --git a/arch/arm64/include/asm/ftrace.h b/arch/arm64/include/asm/ftrace.h
index d48667b..dd59b5a1 100644
--- a/arch/arm64/include/asm/ftrace.h
+++ b/arch/arm64/include/asm/ftrace.h
@@ -11,7 +11,7 @@
 #include <asm/insn.h>
 
 #define HAVE_FUNCTION_GRAPH_FP_TEST
-#define MCOUNT_ADDR		((unsigned long)_mcount)
+#define MCOUNT_ADDR		((unsigned long)__va_function(_mcount))
 #define MCOUNT_INSN_SIZE	AARCH64_INSN_SIZE
 
 /*
diff --git a/arch/arm64/include/asm/kfence.h b/arch/arm64/include/asm/kfence.h
new file mode 100644
index 0000000..d061176
--- /dev/null
+++ b/arch/arm64/include/asm/kfence.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * arm64 KFENCE support.
+ *
+ * Copyright (C) 2020, Google LLC.
+ */
+
+#ifndef __ASM_KFENCE_H
+#define __ASM_KFENCE_H
+
+#include <asm/cacheflush.h>
+
+static inline bool arch_kfence_init_pool(void) { return true; }
+
+static inline bool kfence_protect_page(unsigned long addr, bool protect)
+{
+	set_memory_valid(addr, 1, !protect);
+
+	return true;
+}
+
+#endif /* __ASM_KFENCE_H */
diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h
index a4ffd9b..4db37bd5 100644
--- a/arch/arm64/include/asm/kvm_arm.h
+++ b/arch/arm64/include/asm/kvm_arm.h
@@ -269,6 +269,7 @@
 
 /* Hyp Coprocessor Trap Register */
 #define CPTR_EL2_TCPAC	(1 << 31)
+#define CPTR_EL2_TAM	(1 << 30)
 #define CPTR_EL2_TTA	(1 << 20)
 #define CPTR_EL2_TFP	(1 << CPTR_EL2_TFP_SHIFT)
 #define CPTR_EL2_TZ	(1 << 8)
diff --git a/arch/arm64/include/asm/kvm_asm.h b/arch/arm64/include/asm/kvm_asm.h
index 64d79b2..d40d894 100644
--- a/arch/arm64/include/asm/kvm_asm.h
+++ b/arch/arm64/include/asm/kvm_asm.h
@@ -43,9 +43,9 @@
 /* Translate a kernel address of @sym into its equivalent linear mapping */
 #define kvm_ksym_ref(sym)						\
 	({								\
-		void *val = &sym;					\
+		void *val = __va_function(sym);				\
 		if (!is_kernel_in_hyp_mode())				\
-			val = lm_alias(&sym);				\
+			val = lm_alias(val);				\
 		val;							\
 	 })
 
diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h
index 6c295a2..e8ff016 100644
--- a/arch/arm64/include/asm/memory.h
+++ b/arch/arm64/include/asm/memory.h
@@ -309,6 +309,24 @@ static inline void *phys_to_virt(phys_addr_t x)
 #define sym_to_pfn(x)		__phys_to_pfn(__pa_symbol(x))
 
 /*
+ * With non-canonical CFI jump tables, the compiler replaces function
+ * address references with the address of the function's CFI jump
+ * table entry. This results in __pa_symbol(function) returning the
+ * physical address of the jump table entry, which can lead to address
+ * space confusion since the jump table points to the function's
+ * virtual address. Therefore, use inline assembly to ensure we are
+ * always taking the address of the actual function.
+ */
+#define __va_function(x) ({						\
+	void *addr;							\
+	asm("adrp %0, " __stringify(x) "\n\t"				\
+	    "add  %0, %0, :lo12:" __stringify(x) : "=r" (addr));	\
+	addr;								\
+})
+
+#define __pa_function(x) 	__pa_symbol(__va_function(x))
+
+/*
  *  virt_to_page(x)	convert a _valid_ virtual address to struct page *
  *  virt_addr_valid(x)	indicates whether a virtual address is valid
  */
diff --git a/arch/arm64/include/asm/mmu_context.h b/arch/arm64/include/asm/mmu_context.h
index 3827ff4..1a6f510 100644
--- a/arch/arm64/include/asm/mmu_context.h
+++ b/arch/arm64/include/asm/mmu_context.h
@@ -135,7 +135,7 @@ static inline void cpu_install_idmap(void)
  * Atomically replaces the active TTBR1_EL1 PGD with a new VA-compatible PGD,
  * avoiding the possibility of conflicting TLB entries being allocated.
  */
-static inline void cpu_replace_ttbr1(pgd_t *pgdp)
+static inline void __nocfi cpu_replace_ttbr1(pgd_t *pgdp)
 {
 	typedef void (ttbr_replace_func)(phys_addr_t);
 	extern ttbr_replace_func idmap_cpu_replace_ttbr1;
@@ -156,7 +156,7 @@ static inline void cpu_replace_ttbr1(pgd_t *pgdp)
 		ttbr1 |= TTBR_CNP_BIT;
 	}
 
-	replace_phys = (void *)__pa_symbol(idmap_cpu_replace_ttbr1);
+	replace_phys = (void *)__pa_function(idmap_cpu_replace_ttbr1);
 
 	cpu_install_idmap();
 	replace_phys(ttbr1);
diff --git a/arch/arm64/include/asm/page.h b/arch/arm64/include/asm/page.h
index d39ddb2..75d6cd2 100644
--- a/arch/arm64/include/asm/page.h
+++ b/arch/arm64/include/asm/page.h
@@ -21,6 +21,10 @@ extern void __cpu_copy_user_page(void *to, const void *from,
 extern void copy_page(void *to, const void *from);
 extern void clear_page(void *to);
 
+#define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \
+	alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr)
+#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
+
 #define clear_user_page(addr,vaddr,pg)  __cpu_clear_user_page(addr, vaddr)
 #define copy_user_page(to,from,vaddr,pg) __cpu_copy_user_page(to, from, vaddr)
 
diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
index 8c420f9..fe45909 100644
--- a/arch/arm64/include/asm/pgtable.h
+++ b/arch/arm64/include/asm/pgtable.h
@@ -408,6 +408,7 @@ static inline pmd_t pmd_mkdevmap(pmd_t pmd)
 #define pfn_pud(pfn,prot)	__pud(__phys_to_pud_val((phys_addr_t)(pfn) << PAGE_SHIFT) | pgprot_val(prot))
 
 #define set_pmd_at(mm, addr, pmdp, pmd)	set_pte_at(mm, addr, (pte_t *)pmdp, pmd_pte(pmd))
+#define set_pud_at(mm, addr, pudp, pud)	set_pte_at(mm, addr, (pte_t *)pudp, pud_pte(pud))
 
 #define __pgd_to_phys(pgd)	__pte_to_phys(pgd_pte(pgd))
 #define __phys_to_pgd_val(phys)	__phys_to_pte_val(phys)
diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h
index 5623685..53e1f13 100644
--- a/arch/arm64/include/asm/processor.h
+++ b/arch/arm64/include/asm/processor.h
@@ -27,6 +27,8 @@
 #include <linux/stddef.h>
 #include <linux/string.h>
 
+#include <vdso/processor.h>
+
 #include <asm/alternative.h>
 #include <asm/cpufeature.h>
 #include <asm/hw_breakpoint.h>
@@ -242,11 +244,6 @@ extern void release_thread(struct task_struct *);
 
 unsigned long get_wchan(struct task_struct *p);
 
-static inline void cpu_relax(void)
-{
-	asm volatile("yield" ::: "memory");
-}
-
 /* Thread switching */
 extern struct task_struct *cpu_switch_to(struct task_struct *prev,
 					 struct task_struct *next);
diff --git a/arch/arm64/include/asm/scs.h b/arch/arm64/include/asm/scs.h
new file mode 100644
index 0000000..c50d2b0
--- /dev/null
+++ b/arch/arm64/include/asm/scs.h
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _ASM_SCS_H
+#define _ASM_SCS_H
+
+#ifndef __ASSEMBLY__
+
+#include <linux/scs.h>
+
+#ifdef CONFIG_SHADOW_CALL_STACK
+
+extern void scs_init_irq(void);
+
+static __always_inline void scs_save(struct task_struct *tsk)
+{
+	void *s;
+
+	asm volatile("mov %0, x18" : "=r" (s));
+	task_set_scs(tsk, s);
+}
+
+static inline void scs_overflow_check(struct task_struct *tsk)
+{
+	if (unlikely(scs_corrupted(tsk)))
+		panic("corrupted shadow stack detected inside scheduler\n");
+}
+
+#else /* CONFIG_SHADOW_CALL_STACK */
+
+static inline void scs_init_irq(void) {}
+static inline void scs_save(struct task_struct *tsk) {}
+static inline void scs_overflow_check(struct task_struct *tsk) {}
+
+#endif /* CONFIG_SHADOW_CALL_STACK */
+
+#endif /* __ASSEMBLY __ */
+
+#endif /* _ASM_SCS_H */
diff --git a/arch/arm64/include/asm/seccomp.h b/arch/arm64/include/asm/seccomp.h
index c363871..3025623 100644
--- a/arch/arm64/include/asm/seccomp.h
+++ b/arch/arm64/include/asm/seccomp.h
@@ -19,4 +19,13 @@
 
 #include <asm-generic/seccomp.h>
 
+#define SECCOMP_ARCH_NATIVE		AUDIT_ARCH_AARCH64
+#define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+#define SECCOMP_ARCH_NATIVE_NAME	"aarch64"
+#ifdef CONFIG_COMPAT
+# define SECCOMP_ARCH_COMPAT		AUDIT_ARCH_ARM
+# define SECCOMP_ARCH_COMPAT_NR	__NR_compat_syscalls
+# define SECCOMP_ARCH_COMPAT_NAME	"arm"
+#endif
+
 #endif /* _ASM_SECCOMP_H */
diff --git a/arch/arm64/include/asm/stacktrace.h b/arch/arm64/include/asm/stacktrace.h
index 4d9b1f4..b6cf32f 100644
--- a/arch/arm64/include/asm/stacktrace.h
+++ b/arch/arm64/include/asm/stacktrace.h
@@ -68,6 +68,10 @@ extern void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk);
 
 DECLARE_PER_CPU(unsigned long *, irq_stack_ptr);
 
+#ifdef CONFIG_SHADOW_CALL_STACK
+DECLARE_PER_CPU(unsigned long *, irq_shadow_call_stack_ptr);
+#endif
+
 static inline bool on_irq_stack(unsigned long sp,
 				struct stack_info *info)
 {
diff --git a/arch/arm64/include/asm/suspend.h b/arch/arm64/include/asm/suspend.h
index 8939c87..0cde2f4 100644
--- a/arch/arm64/include/asm/suspend.h
+++ b/arch/arm64/include/asm/suspend.h
@@ -2,7 +2,7 @@
 #ifndef __ASM_SUSPEND_H
 #define __ASM_SUSPEND_H
 
-#define NR_CTX_REGS 12
+#define NR_CTX_REGS 13
 #define NR_CALLEE_SAVED_REGS 12
 
 /*
diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysreg.h
index 9b68f1b..dd885ba 100644
--- a/arch/arm64/include/asm/sysreg.h
+++ b/arch/arm64/include/asm/sysreg.h
@@ -384,6 +384,42 @@
 #define SYS_TPIDR_EL0			sys_reg(3, 3, 13, 0, 2)
 #define SYS_TPIDRRO_EL0			sys_reg(3, 3, 13, 0, 3)
 
+/* Definitions for system register interface to AMU for ARMv8.4 onwards */
+#define SYS_AM_EL0(crm, op2)		sys_reg(3, 3, 13, (crm), (op2))
+#define SYS_AMCR_EL0			SYS_AM_EL0(2, 0)
+#define SYS_AMCFGR_EL0			SYS_AM_EL0(2, 1)
+#define SYS_AMCGCR_EL0			SYS_AM_EL0(2, 2)
+#define SYS_AMUSERENR_EL0		SYS_AM_EL0(2, 3)
+#define SYS_AMCNTENCLR0_EL0		SYS_AM_EL0(2, 4)
+#define SYS_AMCNTENSET0_EL0		SYS_AM_EL0(2, 5)
+#define SYS_AMCNTENCLR1_EL0		SYS_AM_EL0(3, 0)
+#define SYS_AMCNTENSET1_EL0		SYS_AM_EL0(3, 1)
+
+/*
+ * Group 0 of activity monitors (architected):
+ *                op0  op1  CRn   CRm       op2
+ * Counter:       11   011  1101  010:n<3>  n<2:0>
+ * Type:          11   011  1101  011:n<3>  n<2:0>
+ * n: 0-15
+ *
+ * Group 1 of activity monitors (auxiliary):
+ *                op0  op1  CRn   CRm       op2
+ * Counter:       11   011  1101  110:n<3>  n<2:0>
+ * Type:          11   011  1101  111:n<3>  n<2:0>
+ * n: 0-15
+ */
+
+#define SYS_AMEVCNTR0_EL0(n)		SYS_AM_EL0(4 + ((n) >> 3), (n) & 7)
+#define SYS_AMEVTYPE0_EL0(n)		SYS_AM_EL0(6 + ((n) >> 3), (n) & 7)
+#define SYS_AMEVCNTR1_EL0(n)		SYS_AM_EL0(12 + ((n) >> 3), (n) & 7)
+#define SYS_AMEVTYPE1_EL0(n)		SYS_AM_EL0(14 + ((n) >> 3), (n) & 7)
+
+/* AMU v1: Fixed (architecturally defined) activity monitors */
+#define SYS_AMEVCNTR0_CORE_EL0		SYS_AMEVCNTR0_EL0(0)
+#define SYS_AMEVCNTR0_CONST_EL0		SYS_AMEVCNTR0_EL0(1)
+#define SYS_AMEVCNTR0_INST_RET_EL0	SYS_AMEVCNTR0_EL0(2)
+#define SYS_AMEVCNTR0_MEM_STALL		SYS_AMEVCNTR0_EL0(3)
+
 #define SYS_CNTFRQ_EL0			sys_reg(3, 3, 14, 0, 0)
 
 #define SYS_CNTP_TVAL_EL0		sys_reg(3, 3, 14, 2, 0)
@@ -579,6 +615,7 @@
 #define ID_AA64PFR0_CSV3_SHIFT		60
 #define ID_AA64PFR0_CSV2_SHIFT		56
 #define ID_AA64PFR0_DIT_SHIFT		48
+#define ID_AA64PFR0_AMU_SHIFT		44
 #define ID_AA64PFR0_SVE_SHIFT		32
 #define ID_AA64PFR0_RAS_SHIFT		28
 #define ID_AA64PFR0_GIC_SHIFT		24
@@ -589,6 +626,7 @@
 #define ID_AA64PFR0_EL1_SHIFT		4
 #define ID_AA64PFR0_EL0_SHIFT		0
 
+#define ID_AA64PFR0_AMU			0x1
 #define ID_AA64PFR0_SVE			0x1
 #define ID_AA64PFR0_RAS_V1		0x1
 #define ID_AA64PFR0_FP_NI		0xf
diff --git a/arch/arm64/include/asm/system_misc.h b/arch/arm64/include/asm/system_misc.h
index 1ab63cf..d02c5e5 100644
--- a/arch/arm64/include/asm/system_misc.h
+++ b/arch/arm64/include/asm/system_misc.h
@@ -32,8 +32,6 @@ void hook_debug_fault_code(int nr, int (*fn)(unsigned long, unsigned int,
 struct mm_struct;
 extern void __show_regs(struct pt_regs *);
 
-extern void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
-
 #endif	/* __ASSEMBLY__ */
 
 #endif	/* __ASM_SYSTEM_MISC_H */
diff --git a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/thread_info.h
index 4e3ed70..8f4cd61 100644
--- a/arch/arm64/include/asm/thread_info.h
+++ b/arch/arm64/include/asm/thread_info.h
@@ -41,6 +41,9 @@ struct thread_info {
 #endif
 		} preempt;
 	};
+#ifdef CONFIG_SHADOW_CALL_STACK
+	void			*shadow_call_stack;
+#endif
 };
 
 #define thread_saved_pc(tsk)	\
diff --git a/arch/arm64/include/asm/topology.h b/arch/arm64/include/asm/topology.h
index a4d945db..7069717 100644
--- a/arch/arm64/include/asm/topology.h
+++ b/arch/arm64/include/asm/topology.h
@@ -19,6 +19,9 @@ int pcibus_to_node(struct pci_bus *bus);
 /* Replace task scheduler's default frequency-invariant accounting */
 #define arch_scale_freq_capacity topology_get_freq_scale
 
+/* Replace task scheduler's default max-frequency-invariant accounting */
+#define arch_scale_max_freq_capacity topology_get_max_freq_scale
+
 /* Replace task scheduler's default cpu-invariant accounting */
 #define arch_scale_cpu_capacity topology_get_cpu_scale
 
diff --git a/arch/arm64/include/asm/unistd.h b/arch/arm64/include/asm/unistd.h
index 8c1b73d..b3b2019 100644
--- a/arch/arm64/include/asm/unistd.h
+++ b/arch/arm64/include/asm/unistd.h
@@ -38,7 +38,7 @@
 #define __ARM_NR_compat_set_tls		(__ARM_NR_COMPAT_BASE + 5)
 #define __ARM_NR_COMPAT_END		(__ARM_NR_COMPAT_BASE + 0x800)
 
-#define __NR_compat_syscalls		436
+#define __NR_compat_syscalls		441
 #endif
 
 #define __ARCH_WANT_SYS_CLONE
diff --git a/arch/arm64/include/asm/unistd32.h b/arch/arm64/include/asm/unistd32.h
index 94ab29c..52879c7 100644
--- a/arch/arm64/include/asm/unistd32.h
+++ b/arch/arm64/include/asm/unistd32.h
@@ -879,6 +879,8 @@ __SYSCALL(__NR_fspick, sys_fspick)
 __SYSCALL(__NR_pidfd_open, sys_pidfd_open)
 #define __NR_clone3 435
 __SYSCALL(__NR_clone3, sys_clone3)
+#define __NR_process_madvise 440
+__SYSCALL(__NR_process_madvise, sys_process_madvise)
 
 /*
  * Please add new compat syscalls above this comment and update
diff --git a/arch/arm64/include/asm/vdso/clocksource.h b/arch/arm64/include/asm/vdso/clocksource.h
index 8019f61..8ac7232 100644
--- a/arch/arm64/include/asm/vdso/clocksource.h
+++ b/arch/arm64/include/asm/vdso/clocksource.h
@@ -2,13 +2,10 @@
 #ifndef __ASM_VDSOCLOCKSOURCE_H
 #define __ASM_VDSOCLOCKSOURCE_H
 
-enum vdso_arch_clockmode {
-	/* vdso clocksource not usable */
-	VDSO_CLOCKMODE_NONE,
-	/* vdso clocksource for both 32 and 64bit tasks */
-	VDSO_CLOCKMODE_ARCHTIMER,
-	/* vdso clocksource for 64bit tasks only */
-	VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT,
-};
+#define VDSO_ARCH_CLOCKMODES					\
+	/* vdso clocksource for both 32 and 64bit tasks */	\
+	VDSO_CLOCKMODE_ARCHTIMER,				\
+	/* vdso clocksource for 64bit tasks only */		\
+	VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT			\
 
 #endif
diff --git a/arch/arm64/include/asm/vdso/compat_gettimeofday.h b/arch/arm64/include/asm/vdso/compat_gettimeofday.h
index 413d42e..0677262 100644
--- a/arch/arm64/include/asm/vdso/compat_gettimeofday.h
+++ b/arch/arm64/include/asm/vdso/compat_gettimeofday.h
@@ -8,7 +8,7 @@
 #ifndef __ASSEMBLY__
 
 #include <asm/unistd.h>
-#include <uapi/linux/time.h>
+#include <asm/errno.h>
 
 #include <asm/vdso/clocksource.h>
 #include <asm/vdso/compat_barrier.h>
@@ -18,6 +18,7 @@
 #define VDSO_HAS_CLOCK_GETRES		1
 
 #define VDSO_HAS_32BIT_FALLBACK		1
+#define BUILD_VDSO32			1
 
 static __always_inline
 int gettimeofday_fallback(struct __kernel_old_timeval *_tv,
@@ -79,10 +80,6 @@ int clock_getres_fallback(clockid_t _clkid, struct __kernel_timespec *_ts)
 	register long ret asm ("r0");
 	register long nr asm("r7") = __NR_compat_clock_getres_time64;
 
-	/* The checks below are required for ABI consistency with arm */
-	if ((_clkid >= MAX_CLOCKS) && (_ts == NULL))
-		return -EINVAL;
-
 	asm volatile(
 	"       swi #0\n"
 	: "=r" (ret)
@@ -100,10 +97,6 @@ int clock_getres32_fallback(clockid_t _clkid, struct old_timespec32 *_ts)
 	register long ret asm ("r0");
 	register long nr asm("r7") = __NR_compat_clock_getres;
 
-	/* The checks below are required for ABI consistency with arm */
-	if ((_clkid >= MAX_CLOCKS) && (_ts == NULL))
-		return -EINVAL;
-
 	asm volatile(
 	"       swi #0\n"
 	: "=r" (ret)
diff --git a/arch/arm64/include/asm/vdso/gettimeofday.h b/arch/arm64/include/asm/vdso/gettimeofday.h
index ff83b8b..d2017d6 100644
--- a/arch/arm64/include/asm/vdso/gettimeofday.h
+++ b/arch/arm64/include/asm/vdso/gettimeofday.h
@@ -8,7 +8,6 @@
 #ifndef __ASSEMBLY__
 
 #include <asm/unistd.h>
-#include <uapi/linux/time.h>
 
 #include <asm/vdso/clocksource.h>
 
diff --git a/arch/arm64/include/asm/vdso/processor.h b/arch/arm64/include/asm/vdso/processor.h
new file mode 100644
index 0000000..ff830b7
--- /dev/null
+++ b/arch/arm64/include/asm/vdso/processor.h
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2020 ARM Ltd.
+ */
+#ifndef __ASM_VDSO_PROCESSOR_H
+#define __ASM_VDSO_PROCESSOR_H
+
+#ifndef __ASSEMBLY__
+
+static inline void cpu_relax(void)
+{
+	asm volatile("yield" ::: "memory");
+}
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __ASM_VDSO_PROCESSOR_H */
diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile
index 478491f..b399532 100644
--- a/arch/arm64/kernel/Makefile
+++ b/arch/arm64/kernel/Makefile
@@ -63,6 +63,7 @@
 obj-$(CONFIG_ARM_SDE_INTERFACE)		+= sdei.o
 obj-$(CONFIG_ARM64_SSBD)		+= ssbd.o
 obj-$(CONFIG_ARM64_PTR_AUTH)		+= pointer_auth.o
+obj-$(CONFIG_SHADOW_CALL_STACK)		+= scs.o
 
 obj-y					+= vdso/ probes/
 obj-$(CONFIG_COMPAT_VDSO)		+= vdso32/
diff --git a/arch/arm64/kernel/alternative.c b/arch/arm64/kernel/alternative.c
index 7303994..a50fb1d 100644
--- a/arch/arm64/kernel/alternative.c
+++ b/arch/arm64/kernel/alternative.c
@@ -132,8 +132,8 @@ static void clean_dcache_range_nopatch(u64 start, u64 end)
 	} while (cur += d_size, cur < end);
 }
 
-static void __apply_alternatives(void *alt_region,  bool is_module,
-				 unsigned long *feature_mask)
+static void __nocfi __apply_alternatives(void *alt_region,  bool is_module,
+					 unsigned long *feature_mask)
 {
 	struct alt_instr *alt;
 	struct alt_region *region = alt_region;
diff --git a/arch/arm64/kernel/asm-offsets.c b/arch/arm64/kernel/asm-offsets.c
index 2146857..f6762b9 100644
--- a/arch/arm64/kernel/asm-offsets.c
+++ b/arch/arm64/kernel/asm-offsets.c
@@ -34,6 +34,9 @@ int main(void)
 #ifdef CONFIG_ARM64_SW_TTBR0_PAN
   DEFINE(TSK_TI_TTBR0,		offsetof(struct task_struct, thread_info.ttbr0));
 #endif
+#ifdef CONFIG_SHADOW_CALL_STACK
+  DEFINE(TSK_TI_SCS,		offsetof(struct task_struct, thread_info.shadow_call_stack));
+#endif
   DEFINE(TSK_STACK,		offsetof(struct task_struct, stack));
 #ifdef CONFIG_STACKPROTECTOR
   DEFINE(TSK_STACK_CANARY,	offsetof(struct task_struct, stack_canary));
diff --git a/arch/arm64/kernel/cpu-reset.S b/arch/arm64/kernel/cpu-reset.S
index 6ea337d..32c7bf8 100644
--- a/arch/arm64/kernel/cpu-reset.S
+++ b/arch/arm64/kernel/cpu-reset.S
@@ -42,11 +42,11 @@
 	mov	x0, #HVC_SOFT_RESTART
 	hvc	#0				// no return
 
-1:	mov	x18, x1				// entry
+1:	mov	x8, x1				// entry
 	mov	x0, x2				// arg0
 	mov	x1, x3				// arg1
 	mov	x2, x4				// arg2
-	br	x18
+	br	x8
 ENDPROC(__cpu_soft_restart)
 
 .popsection
diff --git a/arch/arm64/kernel/cpu-reset.h b/arch/arm64/kernel/cpu-reset.h
index ed50e95..a05bda36 100644
--- a/arch/arm64/kernel/cpu-reset.h
+++ b/arch/arm64/kernel/cpu-reset.h
@@ -13,16 +13,16 @@
 void __cpu_soft_restart(unsigned long el2_switch, unsigned long entry,
 	unsigned long arg0, unsigned long arg1, unsigned long arg2);
 
-static inline void __noreturn cpu_soft_restart(unsigned long entry,
-					       unsigned long arg0,
-					       unsigned long arg1,
-					       unsigned long arg2)
+static inline void __noreturn __nocfi cpu_soft_restart(unsigned long entry,
+						       unsigned long arg0,
+						       unsigned long arg1,
+						       unsigned long arg2)
 {
 	typeof(__cpu_soft_restart) *restart;
 
 	unsigned long el2_switch = !is_kernel_in_hyp_mode() &&
 		is_hyp_mode_available();
-	restart = (void *)__pa_symbol(__cpu_soft_restart);
+	restart = (void *)__pa_function(__cpu_soft_restart);
 
 	cpu_install_idmap();
 	restart(el2_switch, entry, arg0, arg1, arg2);
diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
index f2ec845..aa4a959 100644
--- a/arch/arm64/kernel/cpufeature.c
+++ b/arch/arm64/kernel/cpufeature.c
@@ -154,6 +154,7 @@ static const struct arm64_ftr_bits ftr_id_aa64pfr0[] = {
 	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_CSV3_SHIFT, 4, 0),
 	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_CSV2_SHIFT, 4, 0),
 	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_DIT_SHIFT, 4, 0),
+	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_AMU_SHIFT, 4, 0),
 	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
 				   FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_SVE_SHIFT, 4, 0),
 	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_RAS_SHIFT, 4, 0),
@@ -1029,7 +1030,7 @@ static bool unmap_kernel_at_el0(const struct arm64_cpu_capabilities *entry,
 }
 
 #ifdef CONFIG_UNMAP_KERNEL_AT_EL0
-static void
+static void __nocfi
 kpti_install_ng_mappings(const struct arm64_cpu_capabilities *__unused)
 {
 	typedef void (kpti_remap_fn)(int, int, phys_addr_t);
@@ -1047,7 +1048,7 @@ kpti_install_ng_mappings(const struct arm64_cpu_capabilities *__unused)
 	if (kpti_applied || kaslr_offset() > 0)
 		return;
 
-	remap_fn = (void *)__pa_symbol(idmap_kpti_install_ng_mappings);
+	remap_fn = (void *)__pa_function(idmap_kpti_install_ng_mappings);
 
 	cpu_install_idmap();
 	remap_fn(cpu, num_online_cpus(), __pa_symbol(swapper_pg_dir));
@@ -1143,6 +1144,53 @@ static bool has_hw_dbm(const struct arm64_cpu_capabilities *cap,
 
 #endif
 
+#ifdef CONFIG_ARM64_AMU_EXTN
+
+/*
+ * The "amu_cpus" cpumask only signals that the CPU implementation for the
+ * flagged CPUs supports the Activity Monitors Unit (AMU) but does not provide
+ * information regarding all the events that it supports. When a CPU bit is
+ * set in the cpumask, the user of this feature can only rely on the presence
+ * of the 4 fixed counters for that CPU. But this does not guarantee that the
+ * counters are enabled or access to these counters is enabled by code
+ * executed at higher exception levels (firmware).
+ */
+static struct cpumask amu_cpus __read_mostly;
+
+bool cpu_has_amu_feat(int cpu)
+{
+	return cpumask_test_cpu(cpu, &amu_cpus);
+}
+
+static void cpu_amu_enable(struct arm64_cpu_capabilities const *cap)
+{
+	if (has_cpuid_feature(cap, SCOPE_LOCAL_CPU)) {
+		pr_info("detected CPU%d: Activity Monitors Unit (AMU)\n",
+			smp_processor_id());
+		cpumask_set_cpu(smp_processor_id(), &amu_cpus);
+	}
+}
+
+static bool has_amu(const struct arm64_cpu_capabilities *cap,
+		    int __unused)
+{
+	/*
+	 * The AMU extension is a non-conflicting feature: the kernel can
+	 * safely run a mix of CPUs with and without support for the
+	 * activity monitors extension. Therefore, unconditionally enable
+	 * the capability to allow any late CPU to use the feature.
+	 *
+	 * With this feature unconditionally enabled, the cpu_enable
+	 * function will be called for all CPUs that match the criteria,
+	 * including secondary and hotplugged, marking this feature as
+	 * present on that respective CPU. The enable function will also
+	 * print a detection message.
+	 */
+
+	return true;
+}
+#endif
+
 #ifdef CONFIG_ARM64_VHE
 static bool runs_at_el2(const struct arm64_cpu_capabilities *entry, int __unused)
 {
@@ -1412,6 +1460,24 @@ static const struct arm64_cpu_capabilities arm64_features[] = {
 		.cpu_enable = cpu_clear_disr,
 	},
 #endif /* CONFIG_ARM64_RAS_EXTN */
+#ifdef CONFIG_ARM64_AMU_EXTN
+	{
+		/*
+		 * The feature is enabled by default if CONFIG_ARM64_AMU_EXTN=y.
+		 * Therefore, don't provide .desc as we don't want the detection
+		 * message to be shown until at least one CPU is detected to
+		 * support the feature.
+		 */
+		.capability = ARM64_HAS_AMU_EXTN,
+		.type = ARM64_CPUCAP_WEAK_LOCAL_CPU_FEATURE,
+		.matches = has_amu,
+		.sys_reg = SYS_ID_AA64PFR0_EL1,
+		.sign = FTR_UNSIGNED,
+		.field_pos = ID_AA64PFR0_AMU_SHIFT,
+		.min_field_value = ID_AA64PFR0_AMU,
+		.cpu_enable = cpu_amu_enable,
+	},
+#endif /* CONFIG_ARM64_AMU_EXTN */
 	{
 		.desc = "Data cache clean to the PoU not required for I/D coherence",
 		.capability = ARM64_HAS_CACHE_IDC,
diff --git a/arch/arm64/kernel/efi-rt-wrapper.S b/arch/arm64/kernel/efi-rt-wrapper.S
index 3fc7110..62f0260 100644
--- a/arch/arm64/kernel/efi-rt-wrapper.S
+++ b/arch/arm64/kernel/efi-rt-wrapper.S
@@ -34,5 +34,14 @@
 	ldp	x29, x30, [sp], #32
 	b.ne	0f
 	ret
-0:	b	efi_handle_corrupted_x18	// tail call
+0:
+#ifdef CONFIG_SHADOW_CALL_STACK
+	/*
+	 * Restore x18 before returning to instrumented code. This is
+	 * safe because the wrapper is called with preemption disabled and
+	 * a separate shadow stack is used for interrupts.
+	 */
+	mov	x18, x2
+#endif
+	b	efi_handle_corrupted_x18	// tail call
 ENDPROC(__efi_rt_asm_wrapper)
diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
index cf3bd29..5a02b61 100644
--- a/arch/arm64/kernel/entry.S
+++ b/arch/arm64/kernel/entry.S
@@ -172,6 +172,10 @@
 
 	apply_ssbd 1, x22, x23
 
+#ifdef CONFIG_SHADOW_CALL_STACK
+	ldr	x18, [tsk, #TSK_TI_SCS]		// Restore shadow call stack
+	str	xzr, [tsk, #TSK_TI_SCS]		// Limit visibility of saved SCS
+#endif
 	.else
 	add	x21, sp, #S_FRAME_SIZE
 	get_current_task tsk
@@ -278,6 +282,12 @@
 	ct_user_enter
 	.endif
 
+#ifdef CONFIG_SHADOW_CALL_STACK
+	.if	\el == 0
+	str	x18, [tsk, #TSK_TI_SCS]		// Save shadow call stack
+	.endif
+#endif
+
 #ifdef CONFIG_ARM64_SW_TTBR0_PAN
 	/*
 	 * Restore access to TTBR0_EL1. If returning to EL0, no need for SPSR
@@ -383,6 +393,9 @@
 
 	.macro	irq_stack_entry
 	mov	x19, sp			// preserve the original sp
+#ifdef CONFIG_SHADOW_CALL_STACK
+	mov	x20, x18		// preserve the original shadow stack
+#endif
 
 	/*
 	 * Compare sp with the base of the task stack.
@@ -400,15 +413,24 @@
 
 	/* switch to the irq stack */
 	mov	sp, x26
+
+#ifdef CONFIG_SHADOW_CALL_STACK
+	/* also switch to the irq shadow stack */
+	ldr_this_cpu x18, irq_shadow_call_stack_ptr, x26
+#endif
+
 9998:
 	.endm
 
 	/*
-	 * x19 should be preserved between irq_stack_entry and
-	 * irq_stack_exit.
+	 * The callee-saved regs (x19-x29) should be preserved between
+	 * irq_stack_entry and irq_stack_exit.
 	 */
 	.macro	irq_stack_exit
 	mov	sp, x19
+#ifdef CONFIG_SHADOW_CALL_STACK
+	mov	x18, x20
+#endif
 	.endm
 
 /* GPRs used by entry code */
@@ -1155,6 +1177,11 @@
 	ldr	lr, [x8]
 	mov	sp, x9
 	msr	sp_el0, x1
+#ifdef CONFIG_SHADOW_CALL_STACK
+	str	x18, [x0, #TSK_TI_SCS]
+	ldr	x18, [x1, #TSK_TI_SCS]
+	str	xzr, [x1, #TSK_TI_SCS]		// limit visibility of saved SCS
+#endif
 	ret
 ENDPROC(cpu_switch_to)
 NOKPROBE(cpu_switch_to)
diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
index bdb5ec3..2f19dbc 100644
--- a/arch/arm64/kernel/head.S
+++ b/arch/arm64/kernel/head.S
@@ -27,6 +27,7 @@
 #include <asm/pgtable-hwdef.h>
 #include <asm/pgtable.h>
 #include <asm/page.h>
+#include <asm/scs.h>
 #include <asm/smp.h>
 #include <asm/sysreg.h>
 #include <asm/thread_info.h>
@@ -430,6 +431,10 @@
 	stp	xzr, x30, [sp, #-16]!
 	mov	x29, sp
 
+#ifdef CONFIG_SHADOW_CALL_STACK
+	adr_l	x18, init_shadow_call_stack	// Set shadow call stack
+#endif
+
 	str_l	x21, __fdt_pointer, x5		// Save FDT pointer
 
 	ldr_l	x4, kimage_vaddr		// Save the offset between
@@ -737,6 +742,10 @@
 	ldr	x2, [x0, #CPU_BOOT_TASK]
 	cbz	x2, __secondary_too_slow
 	msr	sp_el0, x2
+#ifdef CONFIG_SHADOW_CALL_STACK
+	ldr	x18, [x2, #TSK_TI_SCS]		// set shadow call stack
+	str	xzr, [x2, #TSK_TI_SCS]		// limit visibility of saved SCS
+#endif
 	mov	x29, #0
 	mov	x30, #0
 	b	secondary_start_kernel
diff --git a/arch/arm64/kernel/irq.c b/arch/arm64/kernel/irq.c
index 04a327c..fe0ca52 100644
--- a/arch/arm64/kernel/irq.c
+++ b/arch/arm64/kernel/irq.c
@@ -21,6 +21,7 @@
 #include <linux/vmalloc.h>
 #include <asm/daifflags.h>
 #include <asm/vmap_stack.h>
+#include <asm/scs.h>
 
 unsigned long irq_err_count;
 
@@ -63,6 +64,7 @@ static void init_irq_stacks(void)
 void __init init_IRQ(void)
 {
 	init_irq_stacks();
+	scs_init_irq();
 	irqchip_init();
 	if (!handle_arch_irq)
 		panic("No interrupt controller found.");
diff --git a/arch/arm64/kernel/module-plts.c b/arch/arm64/kernel/module-plts.c
index 426018e..20b98d0 100644
--- a/arch/arm64/kernel/module-plts.c
+++ b/arch/arm64/kernel/module-plts.c
@@ -252,6 +252,40 @@ static unsigned int count_plts(Elf64_Sym *syms, Elf64_Rela *rela, int num,
 	return ret;
 }
 
+static bool branch_rela_needs_plt(Elf64_Sym *syms, Elf64_Rela *rela,
+				  Elf64_Word dstidx)
+{
+
+	Elf64_Sym *s = syms + ELF64_R_SYM(rela->r_info);
+
+	if (s->st_shndx == dstidx)
+		return false;
+
+	return ELF64_R_TYPE(rela->r_info) == R_AARCH64_JUMP26 ||
+	       ELF64_R_TYPE(rela->r_info) == R_AARCH64_CALL26;
+}
+
+/* Group branch PLT relas at the front end of the array. */
+static int partition_branch_plt_relas(Elf64_Sym *syms, Elf64_Rela *rela,
+				      int numrels, Elf64_Word dstidx)
+{
+	int i = 0, j = numrels - 1;
+
+	if (!IS_ENABLED(CONFIG_RANDOMIZE_BASE))
+		return 0;
+
+	while (i < j) {
+		if (branch_rela_needs_plt(syms, &rela[i], dstidx))
+			i++;
+		else if (branch_rela_needs_plt(syms, &rela[j], dstidx))
+			swap(rela[i], rela[j]);
+		else
+			j--;
+	}
+
+	return i;
+}
+
 int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr *sechdrs,
 			      char *secstrings, struct module *mod)
 {
@@ -288,7 +322,7 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr *sechdrs,
 
 	for (i = 0; i < ehdr->e_shnum; i++) {
 		Elf64_Rela *rels = (void *)ehdr + sechdrs[i].sh_offset;
-		int numrels = sechdrs[i].sh_size / sizeof(Elf64_Rela);
+		int nents, numrels = sechdrs[i].sh_size / sizeof(Elf64_Rela);
 		Elf64_Shdr *dstsec = sechdrs + sechdrs[i].sh_info;
 
 		if (sechdrs[i].sh_type != SHT_RELA)
@@ -298,8 +332,14 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr *sechdrs,
 		if (!(dstsec->sh_flags & SHF_EXECINSTR))
 			continue;
 
-		/* sort by type, symbol index and addend */
-		sort(rels, numrels, sizeof(Elf64_Rela), cmp_rela, NULL);
+		/*
+		 * sort branch relocations requiring a PLT by type, symbol index
+		 * and addend
+		 */
+		nents = partition_branch_plt_relas(syms, rels, numrels,
+						   sechdrs[i].sh_info);
+		if (nents)
+			sort(rels, nents, sizeof(Elf64_Rela), cmp_rela, NULL);
 
 		if (!str_has_prefix(secstrings + dstsec->sh_name, ".init"))
 			core_plts += count_plts(syms, rels, numrels,
diff --git a/arch/arm64/kernel/perf_event.c b/arch/arm64/kernel/perf_event.c
index 19128d9..e09faf0 100644
--- a/arch/arm64/kernel/perf_event.c
+++ b/arch/arm64/kernel/perf_event.c
@@ -1015,7 +1015,10 @@ static int armv8pmu_probe_pmu(struct arm_pmu *cpu_pmu)
 	return probe.present ? 0 : -ENODEV;
 }
 
-static int armv8_pmu_init(struct arm_pmu *cpu_pmu)
+static int armv8_pmu_init(struct arm_pmu *cpu_pmu, char *name,
+			  int (*map_event)(struct perf_event *event),
+			  const struct attribute_group *events,
+			  const struct attribute_group *format)
 {
 	int ret = armv8pmu_probe_pmu(cpu_pmu);
 	if (ret)
@@ -1034,144 +1037,127 @@ static int armv8_pmu_init(struct arm_pmu *cpu_pmu)
 	cpu_pmu->set_event_filter	= armv8pmu_set_event_filter;
 	cpu_pmu->filter_match		= armv8pmu_filter_match;
 
+	cpu_pmu->name			= name;
+	cpu_pmu->map_event		= map_event;
+	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] = events ?
+			events : &armv8_pmuv3_events_attr_group;
+	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] = format ?
+			format : &armv8_pmuv3_format_attr_group;
+
 	return 0;
 }
 
 static int armv8_pmuv3_init(struct arm_pmu *cpu_pmu)
 {
-	int ret = armv8_pmu_init(cpu_pmu);
-	if (ret)
-		return ret;
+	return armv8_pmu_init(cpu_pmu, "armv8_pmuv3",
+			      armv8_pmuv3_map_event, NULL, NULL);
+}
 
-	cpu_pmu->name			= "armv8_pmuv3";
-	cpu_pmu->map_event		= armv8_pmuv3_map_event;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
-		&armv8_pmuv3_events_attr_group;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
-		&armv8_pmuv3_format_attr_group;
-
-	return 0;
+static int armv8_a34_pmu_init(struct arm_pmu *cpu_pmu)
+{
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a34",
+			      armv8_pmuv3_map_event, NULL, NULL);
 }
 
 static int armv8_a35_pmu_init(struct arm_pmu *cpu_pmu)
 {
-	int ret = armv8_pmu_init(cpu_pmu);
-	if (ret)
-		return ret;
-
-	cpu_pmu->name			= "armv8_cortex_a35";
-	cpu_pmu->map_event		= armv8_a53_map_event;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
-		&armv8_pmuv3_events_attr_group;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
-		&armv8_pmuv3_format_attr_group;
-
-	return 0;
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a35",
+			      armv8_a53_map_event, NULL, NULL);
 }
 
 static int armv8_a53_pmu_init(struct arm_pmu *cpu_pmu)
 {
-	int ret = armv8_pmu_init(cpu_pmu);
-	if (ret)
-		return ret;
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a53",
+			      armv8_a53_map_event, NULL, NULL);
+}
 
-	cpu_pmu->name			= "armv8_cortex_a53";
-	cpu_pmu->map_event		= armv8_a53_map_event;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
-		&armv8_pmuv3_events_attr_group;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
-		&armv8_pmuv3_format_attr_group;
-
-	return 0;
+static int armv8_a55_pmu_init(struct arm_pmu *cpu_pmu)
+{
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a55",
+			      armv8_pmuv3_map_event, NULL, NULL);
 }
 
 static int armv8_a57_pmu_init(struct arm_pmu *cpu_pmu)
 {
-	int ret = armv8_pmu_init(cpu_pmu);
-	if (ret)
-		return ret;
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a57",
+			      armv8_a57_map_event, NULL, NULL);
+}
 
-	cpu_pmu->name			= "armv8_cortex_a57";
-	cpu_pmu->map_event		= armv8_a57_map_event;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
-		&armv8_pmuv3_events_attr_group;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
-		&armv8_pmuv3_format_attr_group;
-
-	return 0;
+static int armv8_a65_pmu_init(struct arm_pmu *cpu_pmu)
+{
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a65",
+			      armv8_pmuv3_map_event, NULL, NULL);
 }
 
 static int armv8_a72_pmu_init(struct arm_pmu *cpu_pmu)
 {
-	int ret = armv8_pmu_init(cpu_pmu);
-	if (ret)
-		return ret;
-
-	cpu_pmu->name			= "armv8_cortex_a72";
-	cpu_pmu->map_event		= armv8_a57_map_event;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
-		&armv8_pmuv3_events_attr_group;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
-		&armv8_pmuv3_format_attr_group;
-
-	return 0;
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a72",
+			      armv8_a57_map_event, NULL, NULL);
 }
 
 static int armv8_a73_pmu_init(struct arm_pmu *cpu_pmu)
 {
-	int ret = armv8_pmu_init(cpu_pmu);
-	if (ret)
-		return ret;
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a73",
+			      armv8_a73_map_event, NULL, NULL);
+}
 
-	cpu_pmu->name			= "armv8_cortex_a73";
-	cpu_pmu->map_event		= armv8_a73_map_event;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
-		&armv8_pmuv3_events_attr_group;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
-		&armv8_pmuv3_format_attr_group;
+static int armv8_a75_pmu_init(struct arm_pmu *cpu_pmu)
+{
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a75",
+			      armv8_pmuv3_map_event, NULL, NULL);
+}
 
-	return 0;
+static int armv8_a76_pmu_init(struct arm_pmu *cpu_pmu)
+{
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a76",
+			      armv8_pmuv3_map_event, NULL, NULL);
+}
+
+static int armv8_a77_pmu_init(struct arm_pmu *cpu_pmu)
+{
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a77",
+			      armv8_pmuv3_map_event, NULL, NULL);
+}
+
+static int armv8_e1_pmu_init(struct arm_pmu *cpu_pmu)
+{
+	return armv8_pmu_init(cpu_pmu, "armv8_neoverse_e1",
+			      armv8_pmuv3_map_event, NULL, NULL);
+}
+
+static int armv8_n1_pmu_init(struct arm_pmu *cpu_pmu)
+{
+	return armv8_pmu_init(cpu_pmu, "armv8_neoverse_n1",
+			      armv8_pmuv3_map_event, NULL, NULL);
 }
 
 static int armv8_thunder_pmu_init(struct arm_pmu *cpu_pmu)
 {
-	int ret = armv8_pmu_init(cpu_pmu);
-	if (ret)
-		return ret;
-
-	cpu_pmu->name			= "armv8_cavium_thunder";
-	cpu_pmu->map_event		= armv8_thunder_map_event;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
-		&armv8_pmuv3_events_attr_group;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
-		&armv8_pmuv3_format_attr_group;
-
-	return 0;
+	return armv8_pmu_init(cpu_pmu, "armv8_cavium_thunder",
+			      armv8_thunder_map_event, NULL, NULL);
 }
 
 static int armv8_vulcan_pmu_init(struct arm_pmu *cpu_pmu)
 {
-	int ret = armv8_pmu_init(cpu_pmu);
-	if (ret)
-		return ret;
-
-	cpu_pmu->name			= "armv8_brcm_vulcan";
-	cpu_pmu->map_event		= armv8_vulcan_map_event;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
-		&armv8_pmuv3_events_attr_group;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
-		&armv8_pmuv3_format_attr_group;
-
-	return 0;
+	return armv8_pmu_init(cpu_pmu, "armv8_brcm_vulcan",
+			      armv8_vulcan_map_event, NULL, NULL);
 }
 
 static const struct of_device_id armv8_pmu_of_device_ids[] = {
 	{.compatible = "arm,armv8-pmuv3",	.data = armv8_pmuv3_init},
+	{.compatible = "arm,cortex-a34-pmu",	.data = armv8_a34_pmu_init},
 	{.compatible = "arm,cortex-a35-pmu",	.data = armv8_a35_pmu_init},
 	{.compatible = "arm,cortex-a53-pmu",	.data = armv8_a53_pmu_init},
+	{.compatible = "arm,cortex-a55-pmu",	.data = armv8_a55_pmu_init},
 	{.compatible = "arm,cortex-a57-pmu",	.data = armv8_a57_pmu_init},
+	{.compatible = "arm,cortex-a65-pmu",	.data = armv8_a65_pmu_init},
 	{.compatible = "arm,cortex-a72-pmu",	.data = armv8_a72_pmu_init},
 	{.compatible = "arm,cortex-a73-pmu",	.data = armv8_a73_pmu_init},
+	{.compatible = "arm,cortex-a75-pmu",	.data = armv8_a75_pmu_init},
+	{.compatible = "arm,cortex-a76-pmu",	.data = armv8_a76_pmu_init},
+	{.compatible = "arm,cortex-a77-pmu",	.data = armv8_a77_pmu_init},
+	{.compatible = "arm,neoverse-e1-pmu",	.data = armv8_e1_pmu_init},
+	{.compatible = "arm,neoverse-n1-pmu",	.data = armv8_n1_pmu_init},
 	{.compatible = "cavium,thunder-pmu",	.data = armv8_thunder_pmu_init},
 	{.compatible = "brcm,vulcan-pmu",	.data = armv8_vulcan_pmu_init},
 	{},
diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
index 7d7cfa1..44755c4 100644
--- a/arch/arm64/kernel/process.c
+++ b/arch/arm64/kernel/process.c
@@ -52,6 +52,7 @@
 #include <asm/mmu_context.h>
 #include <asm/processor.h>
 #include <asm/pointer_auth.h>
+#include <asm/scs.h>
 #include <asm/stacktrace.h>
 
 #if defined(CONFIG_STACKPROTECTOR) && !defined(CONFIG_STACKPROTECTOR_PER_TASK)
@@ -66,8 +67,6 @@ EXPORT_SYMBOL(__stack_chk_guard);
 void (*pm_power_off)(void);
 EXPORT_SYMBOL_GPL(pm_power_off);
 
-void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
-
 static void __cpu_do_idle(void)
 {
 	dsb(sy);
@@ -197,10 +196,7 @@ void machine_restart(char *cmd)
 		efi_reboot(reboot_mode, NULL);
 
 	/* Now call the architecture specific reboot code. */
-	if (arm_pm_restart)
-		arm_pm_restart(reboot_mode, cmd);
-	else
-		do_kernel_restart(cmd);
+	do_kernel_restart(cmd);
 
 	/*
 	 * Whoops - the architecture was unable to reboot.
@@ -547,6 +543,7 @@ __notrace_funcgraph struct task_struct *__switch_to(struct task_struct *prev,
 	ptrauth_thread_switch(next);
 	ssbs_thread_switch(next);
 	erratum_1418040_thread_switch(prev, next);
+	scs_overflow_check(next);
 
 	/*
 	 * Complete any pending TLB or cache maintenance on this CPU in case
diff --git a/arch/arm64/kernel/psci.c b/arch/arm64/kernel/psci.c
index 62d2bda..bfb1a6f 100644
--- a/arch/arm64/kernel/psci.c
+++ b/arch/arm64/kernel/psci.c
@@ -38,7 +38,8 @@ static int __init cpu_psci_cpu_prepare(unsigned int cpu)
 
 static int cpu_psci_cpu_boot(unsigned int cpu)
 {
-	int err = psci_ops.cpu_on(cpu_logical_map(cpu), __pa_symbol(secondary_entry));
+	int err = psci_ops.cpu_on(cpu_logical_map(cpu),
+				  __pa_function(secondary_entry));
 	if (err)
 		pr_err("failed to boot CPU%d (%d)\n", cpu, err);
 
diff --git a/arch/arm64/kernel/scs.c b/arch/arm64/kernel/scs.c
new file mode 100644
index 0000000..eaadf543
--- /dev/null
+++ b/arch/arm64/kernel/scs.c
@@ -0,0 +1,40 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Shadow Call Stack support.
+ *
+ * Copyright (C) 2019 Google LLC
+ */
+
+#include <linux/percpu.h>
+#include <linux/vmalloc.h>
+#include <asm/pgtable.h>
+#include <asm/scs.h>
+
+DEFINE_PER_CPU(unsigned long *, irq_shadow_call_stack_ptr);
+
+#ifndef CONFIG_SHADOW_CALL_STACK_VMAP
+DEFINE_PER_CPU(unsigned long [SCS_SIZE/sizeof(long)], irq_shadow_call_stack)
+	__aligned(SCS_SIZE);
+#endif
+
+void scs_init_irq(void)
+{
+	int cpu;
+
+	for_each_possible_cpu(cpu) {
+#ifdef CONFIG_SHADOW_CALL_STACK_VMAP
+		unsigned long *p;
+
+		p = __vmalloc_node_range(PAGE_SIZE, SCS_SIZE,
+					 VMALLOC_START, VMALLOC_END,
+					 GFP_SCS, PAGE_KERNEL,
+					 0, cpu_to_node(cpu),
+					 __builtin_return_address(0));
+
+		per_cpu(irq_shadow_call_stack_ptr, cpu) = p;
+#else
+		per_cpu(irq_shadow_call_stack_ptr, cpu) =
+			per_cpu(irq_shadow_call_stack, cpu);
+#endif /* CONFIG_SHADOW_CALL_STACK_VMAP */
+	}
+}
diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
index 987220a..4f579d5 100644
--- a/arch/arm64/kernel/smp.c
+++ b/arch/arm64/kernel/smp.c
@@ -44,6 +44,7 @@
 #include <asm/pgtable.h>
 #include <asm/pgalloc.h>
 #include <asm/processor.h>
+#include <asm/scs.h>
 #include <asm/smp_plat.h>
 #include <asm/sections.h>
 #include <asm/tlbflush.h>
@@ -52,6 +53,8 @@
 
 #define CREATE_TRACE_POINTS
 #include <trace/events/ipi.h>
+#undef CREATE_TRACE_POINTS
+#include <trace/hooks/debug.h>
 
 DEFINE_PER_CPU_READ_MOSTLY(int, cpu_number);
 EXPORT_PER_CPU_SYMBOL(cpu_number);
@@ -358,6 +361,9 @@ void cpu_die(void)
 {
 	unsigned int cpu = smp_processor_id();
 
+	/* Save the shadow stack pointer before exiting the idle task */
+	scs_save(current);
+
 	idle_task_exit();
 
 	local_daif_mask();
@@ -897,6 +903,7 @@ void handle_IPI(int ipinr, struct pt_regs *regs)
 		break;
 
 	case IPI_CPU_STOP:
+		trace_android_vh_ipi_stop_rcuidle(regs);
 		irq_enter();
 		local_cpu_stop();
 		irq_exit();
diff --git a/arch/arm64/kernel/smp_spin_table.c b/arch/arm64/kernel/smp_spin_table.c
index c8a3fee..d6c8183 100644
--- a/arch/arm64/kernel/smp_spin_table.c
+++ b/arch/arm64/kernel/smp_spin_table.c
@@ -88,7 +88,7 @@ static int smp_spin_table_cpu_prepare(unsigned int cpu)
 	 * boot-loader's endianess before jumping. This is mandated by
 	 * the boot protocol.
 	 */
-	writeq_relaxed(__pa_symbol(secondary_holding_pen), release_addr);
+	writeq_relaxed(__pa_function(secondary_holding_pen), release_addr);
 	__flush_dcache_area((__force void *)release_addr,
 			    sizeof(*release_addr));
 
diff --git a/arch/arm64/kernel/vdso/Makefile b/arch/arm64/kernel/vdso/Makefile
index 3862cad..2097a44 100644
--- a/arch/arm64/kernel/vdso/Makefile
+++ b/arch/arm64/kernel/vdso/Makefile
@@ -25,8 +25,8 @@
 
 VDSO_LDFLAGS := -Bsymbolic
 
-CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) -Os
-KBUILD_CFLAGS			+= $(DISABLE_LTO)
+CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) -Os $(CC_FLAGS_SCS) \
+				$(CC_FLAGS_LTO)
 KASAN_SANITIZE			:= n
 UBSAN_SANITIZE			:= n
 OBJECT_FILES_NON_STANDARD	:= y
diff --git a/arch/arm64/kernel/vdso/vgettimeofday.c b/arch/arm64/kernel/vdso/vgettimeofday.c
index 7476355..4236cf3 100644
--- a/arch/arm64/kernel/vdso/vgettimeofday.c
+++ b/arch/arm64/kernel/vdso/vgettimeofday.c
@@ -5,8 +5,6 @@
  * Copyright (C) 2018 ARM Limited
  *
  */
-#include <linux/time.h>
-#include <linux/types.h>
 
 int __kernel_clock_gettime(clockid_t clock,
 			   struct __kernel_timespec *ts)
diff --git a/arch/arm64/kernel/vdso32/Makefile b/arch/arm64/kernel/vdso32/Makefile
index 40dffe6..d6ade5f 100644
--- a/arch/arm64/kernel/vdso32/Makefile
+++ b/arch/arm64/kernel/vdso32/Makefile
@@ -10,17 +10,33 @@
 
 # Same as cc-*option, but using CC_COMPAT instead of CC
 ifeq ($(CONFIG_CC_IS_CLANG), y)
+COMPAT_GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE_COMPAT)elfedit))
+COMPAT_GCC_TOOLCHAIN := $(realpath $(COMPAT_GCC_TOOLCHAIN_DIR)/..)
+
+CC_COMPAT_CLANG_FLAGS := --target=$(notdir $(CROSS_COMPILE_COMPAT:%-=%))
+CC_COMPAT_CLANG_FLAGS += --prefix=$(COMPAT_GCC_TOOLCHAIN_DIR)
+CC_COMPAT_CLANG_FLAGS += -no-integrated-as -Qunused-arguments
+ifneq ($(COMPAT_GCC_TOOLCHAIN),)
+CC_COMPAT_CLANG_FLAGS += --gcc-toolchain=$(COMPAT_GCC_TOOLCHAIN)
+endif
+
 CC_COMPAT ?= $(CC)
+CC_COMPAT += $(CC_COMPAT_CLANG_FLAGS)
+
+ifeq ($(LLVM),1)
+LD_COMPAT ?= $(LD)
+else
+LD_COMPAT ?= $(CROSS_COMPILE_COMPAT)ld
+endif
 else
 CC_COMPAT ?= $(CROSS_COMPILE_COMPAT)gcc
+LD_COMPAT ?= $(CROSS_COMPILE_COMPAT)ld
 endif
 
 cc32-option = $(call try-run,\
         $(CC_COMPAT) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2))
 cc32-disable-warning = $(call try-run,\
 	$(CC_COMPAT) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1)))
-cc32-ldoption = $(call try-run,\
-        $(CC_COMPAT) $(1) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2))
 cc32-as-instr = $(call try-run,\
 	printf "%b\n" "$(1)" | $(CC_COMPAT) $(VDSO_AFLAGS) -c -x assembler -o "$$TMP" -,$(2),$(3))
 
@@ -103,14 +119,10 @@
 VDSO_CFLAGS += $(dmbinstr)
 VDSO_AFLAGS += $(dmbinstr)
 
-VDSO_LDFLAGS := $(VDSO_CPPFLAGS)
 # From arm vDSO Makefile
-VDSO_LDFLAGS += -Wl,-Bsymbolic -Wl,--no-undefined -Wl,-soname=linux-vdso.so.1
-VDSO_LDFLAGS += -Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096
-VDSO_LDFLAGS += -nostdlib -shared -mfloat-abi=soft
-VDSO_LDFLAGS += -Wl,--hash-style=sysv
-VDSO_LDFLAGS += -Wl,--build-id
-VDSO_LDFLAGS += $(call cc32-ldoption,-fuse-ld=bfd)
+VDSO_LDFLAGS += -Bsymbolic --no-undefined -soname=linux-vdso.so.1
+VDSO_LDFLAGS += -z max-page-size=4096 -z common-page-size=4096
+VDSO_LDFLAGS += -nostdlib -shared --hash-style=sysv --build-id
 
 
 # Borrow vdsomunge.c from the arm vDSO
@@ -171,8 +183,8 @@
       cmd_vdsold_and_vdso_check = $(cmd_vdsold); $(cmd_vdso_check)
 
 quiet_cmd_vdsold = LD32    $@
-      cmd_vdsold = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_LDFLAGS) \
-                   -Wl,-T $(filter %.lds,$^) $(filter %.o,$^) -o $@
+      cmd_vdsold = $(LD_COMPAT) $(VDSO_LDFLAGS) \
+                   -T $(filter %.lds,$^) $(filter %.o,$^) -o $@
 quiet_cmd_vdsocc = CC32    $@
       cmd_vdsocc = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_CFLAGS) -c -o $@ $<
 quiet_cmd_vdsocc_gettimeofday = CC32    $@
diff --git a/arch/arm64/kernel/vdso32/vgettimeofday.c b/arch/arm64/kernel/vdso32/vgettimeofday.c
index 54fc1c2..5acff29 100644
--- a/arch/arm64/kernel/vdso32/vgettimeofday.c
+++ b/arch/arm64/kernel/vdso32/vgettimeofday.c
@@ -5,26 +5,16 @@
  * Copyright (C) 2018 ARM Limited
  *
  */
-#include <linux/time.h>
-#include <linux/types.h>
 
 int __vdso_clock_gettime(clockid_t clock,
 			 struct old_timespec32 *ts)
 {
-	/* The checks below are required for ABI consistency with arm */
-	if ((u32)ts >= TASK_SIZE_32)
-		return -EFAULT;
-
 	return __cvdso_clock_gettime32(clock, ts);
 }
 
 int __vdso_clock_gettime64(clockid_t clock,
 			   struct __kernel_timespec *ts)
 {
-	/* The checks below are required for ABI consistency with arm */
-	if ((u32)ts >= TASK_SIZE_32)
-		return -EFAULT;
-
 	return __cvdso_clock_gettime(clock, ts);
 }
 
@@ -37,10 +27,6 @@ int __vdso_gettimeofday(struct __kernel_old_timeval *tv,
 int __vdso_clock_getres(clockid_t clock_id,
 			struct old_timespec32 *res)
 {
-	/* The checks below are required for ABI consistency with arm */
-	if ((u32)res >= TASK_SIZE_32)
-		return -EFAULT;
-
 	return __cvdso_clock_getres_time32(clock_id, res);
 }
 
diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S
index 0bab37b..197e72a 100644
--- a/arch/arm64/kernel/vmlinux.lds.S
+++ b/arch/arm64/kernel/vmlinux.lds.S
@@ -183,6 +183,9 @@
 		*(.altinstructions)
 		__alt_instructions_end = .;
 	}
+	.altinstr_replacement : {
+		*(.altinstr_replacement)
+	}
 
 	. = ALIGN(PAGE_SIZE);
 	__inittext_end = .;
diff --git a/arch/arm64/kvm/Makefile b/arch/arm64/kvm/Makefile
index 3ac1a64..89f8c45 100644
--- a/arch/arm64/kvm/Makefile
+++ b/arch/arm64/kvm/Makefile
@@ -4,6 +4,7 @@
 #
 
 ccflags-y += -I $(srctree)/$(src) -I $(srctree)/virt/kvm/arm/vgic
+CFLAGS_REMOVE_debug.o += $(CC_FLAGS_CFI)
 
 KVM=../../../virt/kvm
 
diff --git a/arch/arm64/kvm/hyp/Makefile b/arch/arm64/kvm/hyp/Makefile
index ea710f6..67aa18a 100644
--- a/arch/arm64/kvm/hyp/Makefile
+++ b/arch/arm64/kvm/hyp/Makefile
@@ -28,3 +28,6 @@
 KASAN_SANITIZE	:= n
 UBSAN_SANITIZE	:= n
 KCOV_INSTRUMENT	:= n
+
+# remove SCS and CFI flags from all objects in this directory
+KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_SCS) $(CC_FLAGS_CFI), $(KBUILD_CFLAGS))
diff --git a/arch/arm64/kvm/hyp/entry.S b/arch/arm64/kvm/hyp/entry.S
index dc3d7bc..cbe431f 100644
--- a/arch/arm64/kvm/hyp/entry.S
+++ b/arch/arm64/kvm/hyp/entry.S
@@ -22,7 +22,12 @@
 	.text
 	.pushsection	.hyp.text, "ax"
 
+/*
+ * We treat x18 as callee-saved as the host may use it as a platform
+ * register (e.g. for shadow call stack).
+ */
 .macro save_callee_saved_regs ctxt
+	str	x18,      [\ctxt, #CPU_XREG_OFFSET(18)]
 	stp	x19, x20, [\ctxt, #CPU_XREG_OFFSET(19)]
 	stp	x21, x22, [\ctxt, #CPU_XREG_OFFSET(21)]
 	stp	x23, x24, [\ctxt, #CPU_XREG_OFFSET(23)]
@@ -32,6 +37,8 @@
 .endm
 
 .macro restore_callee_saved_regs ctxt
+	// We require \ctxt is not x18-x28
+	ldr	x18,      [\ctxt, #CPU_XREG_OFFSET(18)]
 	ldp	x19, x20, [\ctxt, #CPU_XREG_OFFSET(19)]
 	ldp	x21, x22, [\ctxt, #CPU_XREG_OFFSET(21)]
 	ldp	x23, x24, [\ctxt, #CPU_XREG_OFFSET(23)]
@@ -48,7 +55,7 @@
 	// x0: vcpu
 	// x1: host context
 	// x2-x17: clobbered by macros
-	// x18: guest context
+	// x29: guest context
 
 	// Store the host regs
 	save_callee_saved_regs x1
@@ -67,31 +74,28 @@
 	ret
 
 1:
-	add	x18, x0, #VCPU_CONTEXT
+	add	x29, x0, #VCPU_CONTEXT
 
 	// Macro ptrauth_switch_to_guest format:
 	// 	ptrauth_switch_to_guest(guest cxt, tmp1, tmp2, tmp3)
 	// The below macro to restore guest keys is not implemented in C code
 	// as it may cause Pointer Authentication key signing mismatch errors
 	// when this feature is enabled for kernel code.
-	ptrauth_switch_to_guest x18, x0, x1, x2
+	ptrauth_switch_to_guest x29, x0, x1, x2
 
 	// Restore guest regs x0-x17
-	ldp	x0, x1,   [x18, #CPU_XREG_OFFSET(0)]
-	ldp	x2, x3,   [x18, #CPU_XREG_OFFSET(2)]
-	ldp	x4, x5,   [x18, #CPU_XREG_OFFSET(4)]
-	ldp	x6, x7,   [x18, #CPU_XREG_OFFSET(6)]
-	ldp	x8, x9,   [x18, #CPU_XREG_OFFSET(8)]
-	ldp	x10, x11, [x18, #CPU_XREG_OFFSET(10)]
-	ldp	x12, x13, [x18, #CPU_XREG_OFFSET(12)]
-	ldp	x14, x15, [x18, #CPU_XREG_OFFSET(14)]
-	ldp	x16, x17, [x18, #CPU_XREG_OFFSET(16)]
+	ldp	x0, x1,   [x29, #CPU_XREG_OFFSET(0)]
+	ldp	x2, x3,   [x29, #CPU_XREG_OFFSET(2)]
+	ldp	x4, x5,   [x29, #CPU_XREG_OFFSET(4)]
+	ldp	x6, x7,   [x29, #CPU_XREG_OFFSET(6)]
+	ldp	x8, x9,   [x29, #CPU_XREG_OFFSET(8)]
+	ldp	x10, x11, [x29, #CPU_XREG_OFFSET(10)]
+	ldp	x12, x13, [x29, #CPU_XREG_OFFSET(12)]
+	ldp	x14, x15, [x29, #CPU_XREG_OFFSET(14)]
+	ldp	x16, x17, [x29, #CPU_XREG_OFFSET(16)]
 
-	// Restore guest regs x19-x29, lr
-	restore_callee_saved_regs x18
-
-	// Restore guest reg x18
-	ldr	x18,      [x18, #CPU_XREG_OFFSET(18)]
+	// Restore guest regs x18-x29, lr
+	restore_callee_saved_regs x29
 
 	// Do not touch any register after this!
 	eret
@@ -114,7 +118,7 @@
 	// Retrieve the guest regs x0-x1 from the stack
 	ldp	x2, x3, [sp], #16	// x0, x1
 
-	// Store the guest regs x0-x1 and x4-x18
+	// Store the guest regs x0-x1 and x4-x17
 	stp	x2, x3,   [x1, #CPU_XREG_OFFSET(0)]
 	stp	x4, x5,   [x1, #CPU_XREG_OFFSET(4)]
 	stp	x6, x7,   [x1, #CPU_XREG_OFFSET(6)]
@@ -123,9 +127,8 @@
 	stp	x12, x13, [x1, #CPU_XREG_OFFSET(12)]
 	stp	x14, x15, [x1, #CPU_XREG_OFFSET(14)]
 	stp	x16, x17, [x1, #CPU_XREG_OFFSET(16)]
-	str	x18,      [x1, #CPU_XREG_OFFSET(18)]
 
-	// Store the guest regs x19-x29, lr
+	// Store the guest regs x18-x29, lr
 	save_callee_saved_regs x1
 
 	get_host_ctxt	x2, x3
diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c
index 8496498..be5e478 100644
--- a/arch/arm64/kvm/hyp/switch.c
+++ b/arch/arm64/kvm/hyp/switch.c
@@ -102,6 +102,18 @@ static void activate_traps_vhe(struct kvm_vcpu *vcpu)
 	val = read_sysreg(cpacr_el1);
 	val |= CPACR_EL1_TTA;
 	val &= ~CPACR_EL1_ZEN;
+
+	/*
+	 * With VHE (HCR.E2H == 1), accesses to CPACR_EL1 are routed to
+	 * CPTR_EL2. In general, CPACR_EL1 has the same layout as CPTR_EL2,
+	 * except for some missing controls, such as TAM.
+	 * In this case, CPTR_EL2.TAM has the same position with or without
+	 * VHE (HCR.E2H == 1) which allows us to use here the CPTR_EL2.TAM
+	 * shift value for trapping the AMU accesses.
+	 */
+
+	val |= CPTR_EL2_TAM;
+
 	if (update_fp_enabled(vcpu)) {
 		if (vcpu_has_sve(vcpu))
 			val |= CPACR_EL1_ZEN;
@@ -123,7 +135,7 @@ static void __hyp_text __activate_traps_nvhe(struct kvm_vcpu *vcpu)
 	__activate_traps_common(vcpu);
 
 	val = CPTR_EL2_DEFAULT;
-	val |= CPTR_EL2_TTA | CPTR_EL2_TZ;
+	val |= CPTR_EL2_TTA | CPTR_EL2_TZ | CPTR_EL2_TAM;
 	if (!update_fp_enabled(vcpu)) {
 		val |= CPTR_EL2_TFP;
 		__activate_traps_fpsimd32(vcpu);
diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c
index 98a177d..3f4d97d 100644
--- a/arch/arm64/kvm/sys_regs.c
+++ b/arch/arm64/kvm/sys_regs.c
@@ -1007,6 +1007,20 @@ static bool access_pmuserenr(struct kvm_vcpu *vcpu, struct sys_reg_params *p,
 	{ SYS_DESC(SYS_PMEVTYPERn_EL0(n)),					\
 	  access_pmu_evtyper, reset_unknown, (PMEVTYPER0_EL0 + n), }
 
+static bool access_amu(struct kvm_vcpu *vcpu, struct sys_reg_params *p,
+			     const struct sys_reg_desc *r)
+{
+	kvm_inject_undefined(vcpu);
+
+	return false;
+}
+
+/* Macro to expand the AMU counter and type registers*/
+#define AMU_AMEVCNTR0_EL0(n) { SYS_DESC(SYS_AMEVCNTR0_EL0(n)), access_amu }
+#define AMU_AMEVTYPE0_EL0(n) { SYS_DESC(SYS_AMEVTYPE0_EL0(n)), access_amu }
+#define AMU_AMEVCNTR1_EL0(n) { SYS_DESC(SYS_AMEVCNTR1_EL0(n)), access_amu }
+#define AMU_AMEVTYPE1_EL0(n) { SYS_DESC(SYS_AMEVTYPE1_EL0(n)), access_amu }
+
 static bool trap_ptrauth(struct kvm_vcpu *vcpu,
 			 struct sys_reg_params *p,
 			 const struct sys_reg_desc *rd)
@@ -1082,8 +1096,10 @@ static u64 read_id_reg(const struct kvm_vcpu *vcpu,
 			 (u32)r->CRn, (u32)r->CRm, (u32)r->Op2);
 	u64 val = raz ? 0 : read_sanitised_ftr_reg(id);
 
-	if (id == SYS_ID_AA64PFR0_EL1 && !vcpu_has_sve(vcpu)) {
-		val &= ~(0xfUL << ID_AA64PFR0_SVE_SHIFT);
+	if (id == SYS_ID_AA64PFR0_EL1) {
+		if (!vcpu_has_sve(vcpu))
+			val &= ~(0xfUL << ID_AA64PFR0_SVE_SHIFT);
+		val &= ~(0xfUL << ID_AA64PFR0_AMU_SHIFT);
 	} else if (id == SYS_ID_AA64ISAR1_EL1 && !vcpu_has_ptrauth(vcpu)) {
 		val &= ~((0xfUL << ID_AA64ISAR1_APA_SHIFT) |
 			 (0xfUL << ID_AA64ISAR1_API_SHIFT) |
@@ -1559,6 +1575,79 @@ static const struct sys_reg_desc sys_reg_descs[] = {
 	{ SYS_DESC(SYS_TPIDR_EL0), NULL, reset_unknown, TPIDR_EL0 },
 	{ SYS_DESC(SYS_TPIDRRO_EL0), NULL, reset_unknown, TPIDRRO_EL0 },
 
+	{ SYS_DESC(SYS_AMCR_EL0), access_amu },
+	{ SYS_DESC(SYS_AMCFGR_EL0), access_amu },
+	{ SYS_DESC(SYS_AMCGCR_EL0), access_amu },
+	{ SYS_DESC(SYS_AMUSERENR_EL0), access_amu },
+	{ SYS_DESC(SYS_AMCNTENCLR0_EL0), access_amu },
+	{ SYS_DESC(SYS_AMCNTENSET0_EL0), access_amu },
+	{ SYS_DESC(SYS_AMCNTENCLR1_EL0), access_amu },
+	{ SYS_DESC(SYS_AMCNTENSET1_EL0), access_amu },
+	AMU_AMEVCNTR0_EL0(0),
+	AMU_AMEVCNTR0_EL0(1),
+	AMU_AMEVCNTR0_EL0(2),
+	AMU_AMEVCNTR0_EL0(3),
+	AMU_AMEVCNTR0_EL0(4),
+	AMU_AMEVCNTR0_EL0(5),
+	AMU_AMEVCNTR0_EL0(6),
+	AMU_AMEVCNTR0_EL0(7),
+	AMU_AMEVCNTR0_EL0(8),
+	AMU_AMEVCNTR0_EL0(9),
+	AMU_AMEVCNTR0_EL0(10),
+	AMU_AMEVCNTR0_EL0(11),
+	AMU_AMEVCNTR0_EL0(12),
+	AMU_AMEVCNTR0_EL0(13),
+	AMU_AMEVCNTR0_EL0(14),
+	AMU_AMEVCNTR0_EL0(15),
+	AMU_AMEVTYPE0_EL0(0),
+	AMU_AMEVTYPE0_EL0(1),
+	AMU_AMEVTYPE0_EL0(2),
+	AMU_AMEVTYPE0_EL0(3),
+	AMU_AMEVTYPE0_EL0(4),
+	AMU_AMEVTYPE0_EL0(5),
+	AMU_AMEVTYPE0_EL0(6),
+	AMU_AMEVTYPE0_EL0(7),
+	AMU_AMEVTYPE0_EL0(8),
+	AMU_AMEVTYPE0_EL0(9),
+	AMU_AMEVTYPE0_EL0(10),
+	AMU_AMEVTYPE0_EL0(11),
+	AMU_AMEVTYPE0_EL0(12),
+	AMU_AMEVTYPE0_EL0(13),
+	AMU_AMEVTYPE0_EL0(14),
+	AMU_AMEVTYPE0_EL0(15),
+	AMU_AMEVCNTR1_EL0(0),
+	AMU_AMEVCNTR1_EL0(1),
+	AMU_AMEVCNTR1_EL0(2),
+	AMU_AMEVCNTR1_EL0(3),
+	AMU_AMEVCNTR1_EL0(4),
+	AMU_AMEVCNTR1_EL0(5),
+	AMU_AMEVCNTR1_EL0(6),
+	AMU_AMEVCNTR1_EL0(7),
+	AMU_AMEVCNTR1_EL0(8),
+	AMU_AMEVCNTR1_EL0(9),
+	AMU_AMEVCNTR1_EL0(10),
+	AMU_AMEVCNTR1_EL0(11),
+	AMU_AMEVCNTR1_EL0(12),
+	AMU_AMEVCNTR1_EL0(13),
+	AMU_AMEVCNTR1_EL0(14),
+	AMU_AMEVCNTR1_EL0(15),
+	AMU_AMEVTYPE1_EL0(0),
+	AMU_AMEVTYPE1_EL0(1),
+	AMU_AMEVTYPE1_EL0(2),
+	AMU_AMEVTYPE1_EL0(3),
+	AMU_AMEVTYPE1_EL0(4),
+	AMU_AMEVTYPE1_EL0(5),
+	AMU_AMEVTYPE1_EL0(6),
+	AMU_AMEVTYPE1_EL0(7),
+	AMU_AMEVTYPE1_EL0(8),
+	AMU_AMEVTYPE1_EL0(9),
+	AMU_AMEVTYPE1_EL0(10),
+	AMU_AMEVTYPE1_EL0(11),
+	AMU_AMEVTYPE1_EL0(12),
+	AMU_AMEVTYPE1_EL0(13),
+	AMU_AMEVTYPE1_EL0(14),
+	AMU_AMEVTYPE1_EL0(15),
+
 	{ SYS_DESC(SYS_CNTP_TVAL_EL0), access_arch_timer },
 	{ SYS_DESC(SYS_CNTP_CTL_EL0), access_arch_timer },
 	{ SYS_DESC(SYS_CNTP_CVAL_EL0), access_arch_timer },
diff --git a/arch/arm64/lib/copy_page.S b/arch/arm64/lib/copy_page.S
index e125a84..e7a79396 100644
--- a/arch/arm64/lib/copy_page.S
+++ b/arch/arm64/lib/copy_page.S
@@ -34,45 +34,45 @@
 	ldp	x14, x15, [x1, #96]
 	ldp	x16, x17, [x1, #112]
 
-	mov	x18, #(PAGE_SIZE - 128)
+	add	x0, x0, #256
 	add	x1, x1, #128
 1:
-	subs	x18, x18, #128
+	tst	x0, #(PAGE_SIZE - 1)
 
 alternative_if ARM64_HAS_NO_HW_PREFETCH
 	prfm	pldl1strm, [x1, #384]
 alternative_else_nop_endif
 
-	stnp	x2, x3, [x0]
+	stnp	x2, x3, [x0, #-256]
 	ldp	x2, x3, [x1]
-	stnp	x4, x5, [x0, #16]
+	stnp	x4, x5, [x0, #16 - 256]
 	ldp	x4, x5, [x1, #16]
-	stnp	x6, x7, [x0, #32]
+	stnp	x6, x7, [x0, #32 - 256]
 	ldp	x6, x7, [x1, #32]
-	stnp	x8, x9, [x0, #48]
+	stnp	x8, x9, [x0, #48 - 256]
 	ldp	x8, x9, [x1, #48]
-	stnp	x10, x11, [x0, #64]
+	stnp	x10, x11, [x0, #64 - 256]
 	ldp	x10, x11, [x1, #64]
-	stnp	x12, x13, [x0, #80]
+	stnp	x12, x13, [x0, #80 - 256]
 	ldp	x12, x13, [x1, #80]
-	stnp	x14, x15, [x0, #96]
+	stnp	x14, x15, [x0, #96 - 256]
 	ldp	x14, x15, [x1, #96]
-	stnp	x16, x17, [x0, #112]
+	stnp	x16, x17, [x0, #112 - 256]
 	ldp	x16, x17, [x1, #112]
 
 	add	x0, x0, #128
 	add	x1, x1, #128
 
-	b.gt	1b
+	b.ne	1b
 
-	stnp	x2, x3, [x0]
-	stnp	x4, x5, [x0, #16]
-	stnp	x6, x7, [x0, #32]
-	stnp	x8, x9, [x0, #48]
-	stnp	x10, x11, [x0, #64]
-	stnp	x12, x13, [x0, #80]
-	stnp	x14, x15, [x0, #96]
-	stnp	x16, x17, [x0, #112]
+	stnp	x2, x3, [x0, #-256]
+	stnp	x4, x5, [x0, #16 - 256]
+	stnp	x6, x7, [x0, #32 - 256]
+	stnp	x8, x9, [x0, #48 - 256]
+	stnp	x10, x11, [x0, #64 - 256]
+	stnp	x12, x13, [x0, #80 - 256]
+	stnp	x14, x15, [x0, #96 - 256]
+	stnp	x16, x17, [x0, #112 - 256]
 
 	ret
 SYM_FUNC_END(copy_page)
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
index 9239416..7c1fb46 100644
--- a/arch/arm64/mm/dma-mapping.c
+++ b/arch/arm64/mm/dma-mapping.c
@@ -57,3 +57,4 @@ void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size,
 		dev->dma_ops = &xen_swiotlb_dma_ops;
 #endif
 }
+EXPORT_SYMBOL_GPL(arch_setup_dma_ops);
diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
index 2a7339a..e2dbbfa 100644
--- a/arch/arm64/mm/fault.c
+++ b/arch/arm64/mm/fault.c
@@ -10,6 +10,7 @@
 #include <linux/acpi.h>
 #include <linux/bitfield.h>
 #include <linux/extable.h>
+#include <linux/kfence.h>
 #include <linux/signal.h>
 #include <linux/mm.h>
 #include <linux/hardirq.h>
@@ -323,6 +324,9 @@ static void __do_kernel_fault(unsigned long addr, unsigned int esr,
 	} else if (addr < PAGE_SIZE) {
 		msg = "NULL pointer dereference";
 	} else {
+		if (kfence_handle_page_fault(addr, esr & ESR_ELx_WNR, regs))
+			return;
+
 		msg = "paging request";
 	}
 
@@ -455,7 +459,7 @@ static int __kprobes do_page_fault(unsigned long addr, unsigned int esr,
 	struct mm_struct *mm = current->mm;
 	vm_fault_t fault, major = 0;
 	unsigned long vm_flags = VM_READ | VM_WRITE | VM_EXEC;
-	unsigned int mm_flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int mm_flags = FAULT_FLAG_DEFAULT;
 
 	if (kprobe_page_fault(regs, esr))
 		return 0;
@@ -522,25 +526,15 @@ static int __kprobes do_page_fault(unsigned long addr, unsigned int esr,
 	fault = __do_page_fault(mm, addr, mm_flags, vm_flags);
 	major |= fault & VM_FAULT_MAJOR;
 
-	if (fault & VM_FAULT_RETRY) {
-		/*
-		 * If we need to retry but a fatal signal is pending,
-		 * handle the signal first. We do not need to release
-		 * the mmap_sem because it would already be released
-		 * in __lock_page_or_retry in mm/filemap.c.
-		 */
-		if (fatal_signal_pending(current)) {
-			if (!user_mode(regs))
-				goto no_context;
-			return 0;
-		}
+	/* Quick path to respond to signals */
+	if (fault_signal_pending(fault, regs)) {
+		if (!user_mode(regs))
+			goto no_context;
+		return 0;
+	}
 
-		/*
-		 * Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk of
-		 * starvation.
-		 */
+	if (fault & VM_FAULT_RETRY) {
 		if (mm_flags & FAULT_FLAG_ALLOW_RETRY) {
-			mm_flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			mm_flags |= FAULT_FLAG_TRIED;
 			goto retry;
 		}
diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
index d10247f..25f9d73 100644
--- a/arch/arm64/mm/mmu.c
+++ b/arch/arm64/mm/mmu.c
@@ -1055,7 +1055,12 @@ int arch_add_memory(int nid, u64 start, u64 size,
 {
 	int flags = 0;
 
-	if (rodata_full || debug_pagealloc_enabled())
+	/*
+	 * KFENCE requires linear map to be mapped at page granularity, so that
+	 * it is possible to protect/unprotect single pages in the KFENCE pool.
+	 */
+	if (rodata_full || debug_pagealloc_enabled() ||
+	    IS_ENABLED(CONFIG_KFENCE))
 		flags = NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS;
 
 	__create_pgd_mapping(swapper_pg_dir, start, __phys_to_virt(start),
diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S
index a1e0592..bf6fc35 100644
--- a/arch/arm64/mm/proc.S
+++ b/arch/arm64/mm/proc.S
@@ -49,6 +49,8 @@
  * cpu_do_suspend - save CPU registers context
  *
  * x0: virtual address of context pointer
+ *
+ * This must be kept in sync with struct cpu_suspend_ctx in <asm/suspend.h>.
  */
 ENTRY(cpu_do_suspend)
 	mrs	x2, tpidr_el0
@@ -73,6 +75,11 @@
 	stp	x8, x9, [x0, #48]
 	stp	x10, x11, [x0, #64]
 	stp	x12, x13, [x0, #80]
+	/*
+	 * Save x18 as it may be used as a platform register, e.g. by shadow
+	 * call stack.
+	 */
+	str	x18, [x0, #96]
 	ret
 ENDPROC(cpu_do_suspend)
 
@@ -89,6 +96,13 @@
 	ldp	x9, x10, [x0, #48]
 	ldp	x11, x12, [x0, #64]
 	ldp	x13, x14, [x0, #80]
+	/*
+	 * Restore x18, as it may be used as a platform register, and clear
+	 * the buffer to minimize the risk of exposure when used for shadow
+	 * call stack.
+	 */
+	ldr	x18, [x0, #96]
+	str	xzr, [x0, #96]
 	msr	tpidr_el0, x2
 	msr	tpidrro_el0, x3
 	msr	contextidr_el1, x4
@@ -124,6 +138,7 @@
 	ubfx	x11, x11, #1, #1
 	msr	oslar_el1, x11
 	reset_pmuserenr_el0 x0			// Disable PMU access from EL0
+	reset_amuserenr_el0 x0			// Disable AMU access from EL0
 
 alternative_if ARM64_HAS_RAS_EXTN
 	msr_s	SYS_DISR_EL1, xzr
@@ -250,15 +265,15 @@
 	/* We're the boot CPU. Wait for the others to catch up */
 	sevl
 1:	wfe
-	ldaxr	w18, [flag_ptr]
-	eor	w18, w18, num_cpus
-	cbnz	w18, 1b
+	ldaxr	w17, [flag_ptr]
+	eor	w17, w17, num_cpus
+	cbnz	w17, 1b
 
 	/* We need to walk swapper, so turn off the MMU. */
 	pre_disable_mmu_workaround
-	mrs	x18, sctlr_el1
-	bic	x18, x18, #SCTLR_ELx_M
-	msr	sctlr_el1, x18
+	mrs	x17, sctlr_el1
+	bic	x17, x17, #SCTLR_ELx_M
+	msr	sctlr_el1, x17
 	isb
 
 	/* Everybody is enjoying the idmap, so we can rewrite swapper. */
@@ -281,9 +296,9 @@
 	isb
 
 	/* We're done: fire up the MMU again */
-	mrs	x18, sctlr_el1
-	orr	x18, x18, #SCTLR_ELx_M
-	msr	sctlr_el1, x18
+	mrs	x17, sctlr_el1
+	orr	x17, x17, #SCTLR_ELx_M
+	msr	sctlr_el1, x17
 	isb
 
 	/*
@@ -353,34 +368,9 @@
 	b.ne	do_pte
 	b	next_pmd
 
-	/* Secondary CPUs end up here */
-__idmap_kpti_secondary:
-	/* Uninstall swapper before surgery begins */
-	__idmap_cpu_set_reserved_ttbr1 x18, x17
-
-	/* Increment the flag to let the boot CPU we're ready */
-1:	ldxr	w18, [flag_ptr]
-	add	w18, w18, #1
-	stxr	w17, w18, [flag_ptr]
-	cbnz	w17, 1b
-
-	/* Wait for the boot CPU to finish messing around with swapper */
-	sevl
-1:	wfe
-	ldxr	w18, [flag_ptr]
-	cbnz	w18, 1b
-
-	/* All done, act like nothing happened */
-	offset_ttbr1 swapper_ttb, x18
-	msr	ttbr1_el1, swapper_ttb
-	isb
-	ret
-
 	.unreq	cpu
 	.unreq	num_cpus
 	.unreq	swapper_pa
-	.unreq	swapper_ttb
-	.unreq	flag_ptr
 	.unreq	cur_pgdp
 	.unreq	end_pgdp
 	.unreq	pgd
@@ -393,6 +383,32 @@
 	.unreq	cur_ptep
 	.unreq	end_ptep
 	.unreq	pte
+
+	/* Secondary CPUs end up here */
+__idmap_kpti_secondary:
+	/* Uninstall swapper before surgery begins */
+	__idmap_cpu_set_reserved_ttbr1 x16, x17
+
+	/* Increment the flag to let the boot CPU we're ready */
+1:	ldxr	w16, [flag_ptr]
+	add	w16, w16, #1
+	stxr	w17, w16, [flag_ptr]
+	cbnz	w17, 1b
+
+	/* Wait for the boot CPU to finish messing around with swapper */
+	sevl
+1:	wfe
+	ldxr	w16, [flag_ptr]
+	cbnz	w16, 1b
+
+	/* All done, act like nothing happened */
+	offset_ttbr1 swapper_ttb, x16
+	msr	ttbr1_el1, swapper_ttb
+	isb
+	ret
+
+	.unreq	swapper_ttb
+	.unreq	flag_ptr
 ENDPROC(idmap_kpti_install_ng_mappings)
 	.popsection
 #endif
@@ -415,6 +431,8 @@
 	isb					// Unmask debug exceptions now,
 	enable_dbg				// since this is per-cpu
 	reset_pmuserenr_el0 x0			// Disable PMU access from EL0
+	reset_amuserenr_el0 x0			// Disable AMU access from EL0
+
 	/*
 	 * Memory region attributes for LPAE:
 	 *
diff --git a/arch/arm64/net/bpf_jit_comp.c b/arch/arm64/net/bpf_jit_comp.c
index 945e5f6..6a9d2e8 100644
--- a/arch/arm64/net/bpf_jit_comp.c
+++ b/arch/arm64/net/bpf_jit_comp.c
@@ -995,3 +995,14 @@ void bpf_jit_free_exec(void *addr)
 {
 	return vfree(addr);
 }
+
+#ifdef CONFIG_CFI_CLANG
+bool arch_bpf_jit_check_func(const struct bpf_prog *prog)
+{
+	const uintptr_t func = (const uintptr_t)prog->bpf_func;
+
+	/* bpf_func must be correctly aligned and within the BPF JIT region */
+	return (func >= BPF_JIT_REGION_START && func < BPF_JIT_REGION_END &&
+		IS_ALIGNED(func, sizeof(u32)));
+}
+#endif
diff --git a/arch/csky/include/asm/seccomp.h b/arch/csky/include/asm/seccomp.h
new file mode 100644
index 0000000..d33e758
--- /dev/null
+++ b/arch/csky/include/asm/seccomp.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef _ASM_SECCOMP_H
+#define _ASM_SECCOMP_H
+
+#include <asm-generic/seccomp.h>
+
+#define SECCOMP_ARCH_NATIVE		AUDIT_ARCH_CSKY
+#define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+#define SECCOMP_ARCH_NATIVE_NAME	"csky"
+
+#endif /* _ASM_SECCOMP_H */
diff --git a/arch/hexagon/mm/vm_fault.c b/arch/hexagon/mm/vm_fault.c
index b3bc716..72334b2 100644
--- a/arch/hexagon/mm/vm_fault.c
+++ b/arch/hexagon/mm/vm_fault.c
@@ -41,7 +41,7 @@ void do_page_fault(unsigned long address, long cause, struct pt_regs *regs)
 	int si_code = SEGV_MAPERR;
 	vm_fault_t fault;
 	const struct exception_table_entry *fixup;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	/*
 	 * If we're in an interrupt or have no user context,
@@ -91,7 +91,7 @@ void do_page_fault(unsigned long address, long cause, struct pt_regs *regs)
 
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	/* The most common case -- we are done. */
@@ -102,7 +102,6 @@ void do_page_fault(unsigned long address, long cause, struct pt_regs *regs)
 			else
 				current->min_flt++;
 			if (fault & VM_FAULT_RETRY) {
-				flags &= ~FAULT_FLAG_ALLOW_RETRY;
 				flags |= FAULT_FLAG_TRIED;
 				goto retry;
 			}
diff --git a/arch/ia64/kernel/syscalls/syscall.tbl b/arch/ia64/kernel/syscalls/syscall.tbl
index 36d5faf..0a5a32a 100644
--- a/arch/ia64/kernel/syscalls/syscall.tbl
+++ b/arch/ia64/kernel/syscalls/syscall.tbl
@@ -356,3 +356,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 # 435 reserved for clone3
+440	common	process_madvise		sys_process_madvise
\ No newline at end of file
diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c
index c2f299f..30d0c1f 100644
--- a/arch/ia64/mm/fault.c
+++ b/arch/ia64/mm/fault.c
@@ -65,7 +65,7 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re
 	struct mm_struct *mm = current->mm;
 	unsigned long mask;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	mask = ((((isr >> IA64_ISR_X_BIT) & 1UL) << VM_EXEC_BIT)
 		| (((isr >> IA64_ISR_W_BIT) & 1UL) << VM_WRITE_BIT));
@@ -141,7 +141,7 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re
 	 */
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -167,7 +167,6 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re
 		else
 			current->min_flt++;
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			 /* No need to up_read(&mm->mmap_sem) as we would
diff --git a/arch/m68k/kernel/syscalls/syscall.tbl b/arch/m68k/kernel/syscalls/syscall.tbl
index a88a285..bf4d2b4 100644
--- a/arch/m68k/kernel/syscalls/syscall.tbl
+++ b/arch/m68k/kernel/syscalls/syscall.tbl
@@ -435,3 +435,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 # 435 reserved for clone3
+440	common	process_madvise		sys_process_madvise
\ No newline at end of file
diff --git a/arch/m68k/mm/fault.c b/arch/m68k/mm/fault.c
index e9b1d75..f7afb98 100644
--- a/arch/m68k/mm/fault.c
+++ b/arch/m68k/mm/fault.c
@@ -71,7 +71,7 @@ int do_page_fault(struct pt_regs *regs, unsigned long address,
 	struct mm_struct *mm = current->mm;
 	struct vm_area_struct * vma;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	pr_debug("do page fault:\nregs->sr=%#x, regs->pc=%#lx, address=%#lx, %ld, %p\n",
 		regs->sr, regs->pc, address, error_code, mm ? mm->pgd : NULL);
@@ -138,7 +138,7 @@ int do_page_fault(struct pt_regs *regs, unsigned long address,
 	fault = handle_mm_fault(vma, address, flags);
 	pr_debug("handle_mm_fault returns %x\n", fault);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return 0;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -162,9 +162,6 @@ int do_page_fault(struct pt_regs *regs, unsigned long address,
 		else
 			current->min_flt++;
 		if (fault & VM_FAULT_RETRY) {
-			/* Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk
-			 * of starvation. */
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			/*
diff --git a/arch/microblaze/kernel/syscalls/syscall.tbl b/arch/microblaze/kernel/syscalls/syscall.tbl
index 09b0cd7..7bc400d 100644
--- a/arch/microblaze/kernel/syscalls/syscall.tbl
+++ b/arch/microblaze/kernel/syscalls/syscall.tbl
@@ -441,3 +441,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 435	common	clone3				sys_clone3
+440	common	process_madvise		sys_process_madvise
diff --git a/arch/microblaze/mm/fault.c b/arch/microblaze/mm/fault.c
index e6a810b..3248141 100644
--- a/arch/microblaze/mm/fault.c
+++ b/arch/microblaze/mm/fault.c
@@ -91,7 +91,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long address,
 	int code = SEGV_MAPERR;
 	int is_write = error_code & ESR_S;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	regs->ear = address;
 	regs->esr = error_code;
@@ -217,7 +217,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long address,
 	 */
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -236,7 +236,6 @@ void do_page_fault(struct pt_regs *regs, unsigned long address,
 		else
 			current->min_flt++;
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			/*
diff --git a/arch/mips/Makefile b/arch/mips/Makefile
index 5403a91..573409c 100644
--- a/arch/mips/Makefile
+++ b/arch/mips/Makefile
@@ -334,7 +334,7 @@
 # See arch/mips/Kbuild for content of core part of the kernel
 core-y += arch/mips/
 
-drivers-$(CONFIG_MIPS_CRC_SUPPORT) += arch/mips/crypto/
+drivers-y			+= arch/mips/crypto/
 drivers-$(CONFIG_OPROFILE)	+= arch/mips/oprofile/
 
 # suspend and hibernation support
diff --git a/arch/mips/crypto/Makefile b/arch/mips/crypto/Makefile
index e07aca5..8e1deaf 100644
--- a/arch/mips/crypto/Makefile
+++ b/arch/mips/crypto/Makefile
@@ -4,3 +4,21 @@
 #
 
 obj-$(CONFIG_CRYPTO_CRC32_MIPS) += crc32-mips.o
+
+obj-$(CONFIG_CRYPTO_CHACHA_MIPS) += chacha-mips.o
+chacha-mips-y := chacha-core.o chacha-glue.o
+AFLAGS_chacha-core.o += -O2 # needed to fill branch delay slots
+
+obj-$(CONFIG_CRYPTO_POLY1305_MIPS) += poly1305-mips.o
+poly1305-mips-y := poly1305-core.o poly1305-glue.o
+
+perlasm-flavour-$(CONFIG_CPU_MIPS32) := o32
+perlasm-flavour-$(CONFIG_CPU_MIPS64) := 64
+
+quiet_cmd_perlasm = PERLASM $@
+      cmd_perlasm = $(PERL) $(<) $(perlasm-flavour-y) $(@)
+
+$(obj)/poly1305-core.S: $(src)/poly1305-mips.pl FORCE
+	$(call if_changed,perlasm)
+
+targets += poly1305-core.S
diff --git a/arch/mips/crypto/chacha-core.S b/arch/mips/crypto/chacha-core.S
new file mode 100644
index 0000000..5755f69c
--- /dev/null
+++ b/arch/mips/crypto/chacha-core.S
@@ -0,0 +1,497 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/*
+ * Copyright (C) 2016-2018 René van Dorst <opensource@vdorst.com>. All Rights Reserved.
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#define MASK_U32		0x3c
+#define CHACHA20_BLOCK_SIZE	64
+#define STACK_SIZE		32
+
+#define X0	$t0
+#define X1	$t1
+#define X2	$t2
+#define X3	$t3
+#define X4	$t4
+#define X5	$t5
+#define X6	$t6
+#define X7	$t7
+#define X8	$t8
+#define X9	$t9
+#define X10	$v1
+#define X11	$s6
+#define X12	$s5
+#define X13	$s4
+#define X14	$s3
+#define X15	$s2
+/* Use regs which are overwritten on exit for Tx so we don't leak clear data. */
+#define T0	$s1
+#define T1	$s0
+#define T(n)	T ## n
+#define X(n)	X ## n
+
+/* Input arguments */
+#define STATE		$a0
+#define OUT		$a1
+#define IN		$a2
+#define BYTES		$a3
+
+/* Output argument */
+/* NONCE[0] is kept in a register and not in memory.
+ * We don't want to touch original value in memory.
+ * Must be incremented every loop iteration.
+ */
+#define NONCE_0		$v0
+
+/* SAVED_X and SAVED_CA are set in the jump table.
+ * Use regs which are overwritten on exit else we don't leak clear data.
+ * They are used to handling the last bytes which are not multiple of 4.
+ */
+#define SAVED_X		X15
+#define SAVED_CA	$s7
+
+#define IS_UNALIGNED	$s7
+
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+#define MSB 0
+#define LSB 3
+#define ROTx rotl
+#define ROTR(n) rotr n, 24
+#define	CPU_TO_LE32(n) \
+	wsbh	n; \
+	rotr	n, 16;
+#else
+#define MSB 3
+#define LSB 0
+#define ROTx rotr
+#define CPU_TO_LE32(n)
+#define ROTR(n)
+#endif
+
+#define FOR_EACH_WORD(x) \
+	x( 0); \
+	x( 1); \
+	x( 2); \
+	x( 3); \
+	x( 4); \
+	x( 5); \
+	x( 6); \
+	x( 7); \
+	x( 8); \
+	x( 9); \
+	x(10); \
+	x(11); \
+	x(12); \
+	x(13); \
+	x(14); \
+	x(15);
+
+#define FOR_EACH_WORD_REV(x) \
+	x(15); \
+	x(14); \
+	x(13); \
+	x(12); \
+	x(11); \
+	x(10); \
+	x( 9); \
+	x( 8); \
+	x( 7); \
+	x( 6); \
+	x( 5); \
+	x( 4); \
+	x( 3); \
+	x( 2); \
+	x( 1); \
+	x( 0);
+
+#define PLUS_ONE_0	 1
+#define PLUS_ONE_1	 2
+#define PLUS_ONE_2	 3
+#define PLUS_ONE_3	 4
+#define PLUS_ONE_4	 5
+#define PLUS_ONE_5	 6
+#define PLUS_ONE_6	 7
+#define PLUS_ONE_7	 8
+#define PLUS_ONE_8	 9
+#define PLUS_ONE_9	10
+#define PLUS_ONE_10	11
+#define PLUS_ONE_11	12
+#define PLUS_ONE_12	13
+#define PLUS_ONE_13	14
+#define PLUS_ONE_14	15
+#define PLUS_ONE_15	16
+#define PLUS_ONE(x)	PLUS_ONE_ ## x
+#define _CONCAT3(a,b,c)	a ## b ## c
+#define CONCAT3(a,b,c)	_CONCAT3(a,b,c)
+
+#define STORE_UNALIGNED(x) \
+CONCAT3(.Lchacha_mips_xor_unaligned_, PLUS_ONE(x), _b: ;) \
+	.if (x != 12); \
+		lw	T0, (x*4)(STATE); \
+	.endif; \
+	lwl	T1, (x*4)+MSB ## (IN); \
+	lwr	T1, (x*4)+LSB ## (IN); \
+	.if (x == 12); \
+		addu	X ## x, NONCE_0; \
+	.else; \
+		addu	X ## x, T0; \
+	.endif; \
+	CPU_TO_LE32(X ## x); \
+	xor	X ## x, T1; \
+	swl	X ## x, (x*4)+MSB ## (OUT); \
+	swr	X ## x, (x*4)+LSB ## (OUT);
+
+#define STORE_ALIGNED(x) \
+CONCAT3(.Lchacha_mips_xor_aligned_, PLUS_ONE(x), _b: ;) \
+	.if (x != 12); \
+		lw	T0, (x*4)(STATE); \
+	.endif; \
+	lw	T1, (x*4) ## (IN); \
+	.if (x == 12); \
+		addu	X ## x, NONCE_0; \
+	.else; \
+		addu	X ## x, T0; \
+	.endif; \
+	CPU_TO_LE32(X ## x); \
+	xor	X ## x, T1; \
+	sw	X ## x, (x*4) ## (OUT);
+
+/* Jump table macro.
+ * Used for setup and handling the last bytes, which are not multiple of 4.
+ * X15 is free to store Xn
+ * Every jumptable entry must be equal in size.
+ */
+#define JMPTBL_ALIGNED(x) \
+.Lchacha_mips_jmptbl_aligned_ ## x: ; \
+	.set	noreorder; \
+	b	.Lchacha_mips_xor_aligned_ ## x ## _b; \
+	.if (x == 12); \
+		addu	SAVED_X, X ## x, NONCE_0; \
+	.else; \
+		addu	SAVED_X, X ## x, SAVED_CA; \
+	.endif; \
+	.set	reorder
+
+#define JMPTBL_UNALIGNED(x) \
+.Lchacha_mips_jmptbl_unaligned_ ## x: ; \
+	.set	noreorder; \
+	b	.Lchacha_mips_xor_unaligned_ ## x ## _b; \
+	.if (x == 12); \
+		addu	SAVED_X, X ## x, NONCE_0; \
+	.else; \
+		addu	SAVED_X, X ## x, SAVED_CA; \
+	.endif; \
+	.set	reorder
+
+#define AXR(A, B, C, D,  K, L, M, N,  V, W, Y, Z,  S) \
+	addu	X(A), X(K); \
+	addu	X(B), X(L); \
+	addu	X(C), X(M); \
+	addu	X(D), X(N); \
+	xor	X(V), X(A); \
+	xor	X(W), X(B); \
+	xor	X(Y), X(C); \
+	xor	X(Z), X(D); \
+	rotl	X(V), S;    \
+	rotl	X(W), S;    \
+	rotl	X(Y), S;    \
+	rotl	X(Z), S;
+
+.text
+.set	reorder
+.set	noat
+.globl	chacha_crypt_arch
+.ent	chacha_crypt_arch
+chacha_crypt_arch:
+	.frame	$sp, STACK_SIZE, $ra
+
+	/* Load number of rounds */
+	lw	$at, 16($sp)
+
+	addiu	$sp, -STACK_SIZE
+
+	/* Return bytes = 0. */
+	beqz	BYTES, .Lchacha_mips_end
+
+	lw	NONCE_0, 48(STATE)
+
+	/* Save s0-s7 */
+	sw	$s0,  0($sp)
+	sw	$s1,  4($sp)
+	sw	$s2,  8($sp)
+	sw	$s3, 12($sp)
+	sw	$s4, 16($sp)
+	sw	$s5, 20($sp)
+	sw	$s6, 24($sp)
+	sw	$s7, 28($sp)
+
+	/* Test IN or OUT is unaligned.
+	 * IS_UNALIGNED = ( IN | OUT ) & 0x00000003
+	 */
+	or	IS_UNALIGNED, IN, OUT
+	andi	IS_UNALIGNED, 0x3
+
+	b	.Lchacha_rounds_start
+
+.align 4
+.Loop_chacha_rounds:
+	addiu	IN,  CHACHA20_BLOCK_SIZE
+	addiu	OUT, CHACHA20_BLOCK_SIZE
+	addiu	NONCE_0, 1
+
+.Lchacha_rounds_start:
+	lw	X0,  0(STATE)
+	lw	X1,  4(STATE)
+	lw	X2,  8(STATE)
+	lw	X3,  12(STATE)
+
+	lw	X4,  16(STATE)
+	lw	X5,  20(STATE)
+	lw	X6,  24(STATE)
+	lw	X7,  28(STATE)
+	lw	X8,  32(STATE)
+	lw	X9,  36(STATE)
+	lw	X10, 40(STATE)
+	lw	X11, 44(STATE)
+
+	move	X12, NONCE_0
+	lw	X13, 52(STATE)
+	lw	X14, 56(STATE)
+	lw	X15, 60(STATE)
+
+.Loop_chacha_xor_rounds:
+	addiu	$at, -2
+	AXR( 0, 1, 2, 3,  4, 5, 6, 7, 12,13,14,15, 16);
+	AXR( 8, 9,10,11, 12,13,14,15,  4, 5, 6, 7, 12);
+	AXR( 0, 1, 2, 3,  4, 5, 6, 7, 12,13,14,15,  8);
+	AXR( 8, 9,10,11, 12,13,14,15,  4, 5, 6, 7,  7);
+	AXR( 0, 1, 2, 3,  5, 6, 7, 4, 15,12,13,14, 16);
+	AXR(10,11, 8, 9, 15,12,13,14,  5, 6, 7, 4, 12);
+	AXR( 0, 1, 2, 3,  5, 6, 7, 4, 15,12,13,14,  8);
+	AXR(10,11, 8, 9, 15,12,13,14,  5, 6, 7, 4,  7);
+	bnez	$at, .Loop_chacha_xor_rounds
+
+	addiu	BYTES, -(CHACHA20_BLOCK_SIZE)
+
+	/* Is data src/dst unaligned? Jump */
+	bnez	IS_UNALIGNED, .Loop_chacha_unaligned
+
+	/* Set number rounds here to fill delayslot. */
+	lw	$at, (STACK_SIZE+16)($sp)
+
+	/* BYTES < 0, it has no full block. */
+	bltz	BYTES, .Lchacha_mips_no_full_block_aligned
+
+	FOR_EACH_WORD_REV(STORE_ALIGNED)
+
+	/* BYTES > 0? Loop again. */
+	bgtz	BYTES, .Loop_chacha_rounds
+
+	/* Place this here to fill delay slot */
+	addiu	NONCE_0, 1
+
+	/* BYTES < 0? Handle last bytes */
+	bltz	BYTES, .Lchacha_mips_xor_bytes
+
+.Lchacha_mips_xor_done:
+	/* Restore used registers */
+	lw	$s0,  0($sp)
+	lw	$s1,  4($sp)
+	lw	$s2,  8($sp)
+	lw	$s3, 12($sp)
+	lw	$s4, 16($sp)
+	lw	$s5, 20($sp)
+	lw	$s6, 24($sp)
+	lw	$s7, 28($sp)
+
+	/* Write NONCE_0 back to right location in state */
+	sw	NONCE_0, 48(STATE)
+
+.Lchacha_mips_end:
+	addiu	$sp, STACK_SIZE
+	jr	$ra
+
+.Lchacha_mips_no_full_block_aligned:
+	/* Restore the offset on BYTES */
+	addiu	BYTES, CHACHA20_BLOCK_SIZE
+
+	/* Get number of full WORDS */
+	andi	$at, BYTES, MASK_U32
+
+	/* Load upper half of jump table addr */
+	lui	T0, %hi(.Lchacha_mips_jmptbl_aligned_0)
+
+	/* Calculate lower half jump table offset */
+	ins	T0, $at, 1, 6
+
+	/* Add offset to STATE */
+	addu	T1, STATE, $at
+
+	/* Add lower half jump table addr */
+	addiu	T0, %lo(.Lchacha_mips_jmptbl_aligned_0)
+
+	/* Read value from STATE */
+	lw	SAVED_CA, 0(T1)
+
+	/* Store remaining bytecounter as negative value */
+	subu	BYTES, $at, BYTES
+
+	jr	T0
+
+	/* Jump table */
+	FOR_EACH_WORD(JMPTBL_ALIGNED)
+
+
+.Loop_chacha_unaligned:
+	/* Set number rounds here to fill delayslot. */
+	lw	$at, (STACK_SIZE+16)($sp)
+
+	/* BYTES > 0, it has no full block. */
+	bltz	BYTES, .Lchacha_mips_no_full_block_unaligned
+
+	FOR_EACH_WORD_REV(STORE_UNALIGNED)
+
+	/* BYTES > 0? Loop again. */
+	bgtz	BYTES, .Loop_chacha_rounds
+
+	/* Write NONCE_0 back to right location in state */
+	sw	NONCE_0, 48(STATE)
+
+	.set noreorder
+	/* Fall through to byte handling */
+	bgez	BYTES, .Lchacha_mips_xor_done
+.Lchacha_mips_xor_unaligned_0_b:
+.Lchacha_mips_xor_aligned_0_b:
+	/* Place this here to fill delay slot */
+	addiu	NONCE_0, 1
+	.set reorder
+
+.Lchacha_mips_xor_bytes:
+	addu	IN, $at
+	addu	OUT, $at
+	/* First byte */
+	lbu	T1, 0(IN)
+	addiu	$at, BYTES, 1
+	CPU_TO_LE32(SAVED_X)
+	ROTR(SAVED_X)
+	xor	T1, SAVED_X
+	sb	T1, 0(OUT)
+	beqz	$at, .Lchacha_mips_xor_done
+	/* Second byte */
+	lbu	T1, 1(IN)
+	addiu	$at, BYTES, 2
+	ROTx	SAVED_X, 8
+	xor	T1, SAVED_X
+	sb	T1, 1(OUT)
+	beqz	$at, .Lchacha_mips_xor_done
+	/* Third byte */
+	lbu	T1, 2(IN)
+	ROTx	SAVED_X, 8
+	xor	T1, SAVED_X
+	sb	T1, 2(OUT)
+	b	.Lchacha_mips_xor_done
+
+.Lchacha_mips_no_full_block_unaligned:
+	/* Restore the offset on BYTES */
+	addiu	BYTES, CHACHA20_BLOCK_SIZE
+
+	/* Get number of full WORDS */
+	andi	$at, BYTES, MASK_U32
+
+	/* Load upper half of jump table addr */
+	lui	T0, %hi(.Lchacha_mips_jmptbl_unaligned_0)
+
+	/* Calculate lower half jump table offset */
+	ins	T0, $at, 1, 6
+
+	/* Add offset to STATE */
+	addu	T1, STATE, $at
+
+	/* Add lower half jump table addr */
+	addiu	T0, %lo(.Lchacha_mips_jmptbl_unaligned_0)
+
+	/* Read value from STATE */
+	lw	SAVED_CA, 0(T1)
+
+	/* Store remaining bytecounter as negative value */
+	subu	BYTES, $at, BYTES
+
+	jr	T0
+
+	/* Jump table */
+	FOR_EACH_WORD(JMPTBL_UNALIGNED)
+.end chacha_crypt_arch
+.set at
+
+/* Input arguments
+ * STATE	$a0
+ * OUT		$a1
+ * NROUND	$a2
+ */
+
+#undef X12
+#undef X13
+#undef X14
+#undef X15
+
+#define X12	$a3
+#define X13	$at
+#define X14	$v0
+#define X15	STATE
+
+.set noat
+.globl	hchacha_block_arch
+.ent	hchacha_block_arch
+hchacha_block_arch:
+	.frame	$sp, STACK_SIZE, $ra
+
+	addiu	$sp, -STACK_SIZE
+
+	/* Save X11(s6) */
+	sw	X11, 0($sp)
+
+	lw	X0,  0(STATE)
+	lw	X1,  4(STATE)
+	lw	X2,  8(STATE)
+	lw	X3,  12(STATE)
+	lw	X4,  16(STATE)
+	lw	X5,  20(STATE)
+	lw	X6,  24(STATE)
+	lw	X7,  28(STATE)
+	lw	X8,  32(STATE)
+	lw	X9,  36(STATE)
+	lw	X10, 40(STATE)
+	lw	X11, 44(STATE)
+	lw	X12, 48(STATE)
+	lw	X13, 52(STATE)
+	lw	X14, 56(STATE)
+	lw	X15, 60(STATE)
+
+.Loop_hchacha_xor_rounds:
+	addiu	$a2, -2
+	AXR( 0, 1, 2, 3,  4, 5, 6, 7, 12,13,14,15, 16);
+	AXR( 8, 9,10,11, 12,13,14,15,  4, 5, 6, 7, 12);
+	AXR( 0, 1, 2, 3,  4, 5, 6, 7, 12,13,14,15,  8);
+	AXR( 8, 9,10,11, 12,13,14,15,  4, 5, 6, 7,  7);
+	AXR( 0, 1, 2, 3,  5, 6, 7, 4, 15,12,13,14, 16);
+	AXR(10,11, 8, 9, 15,12,13,14,  5, 6, 7, 4, 12);
+	AXR( 0, 1, 2, 3,  5, 6, 7, 4, 15,12,13,14,  8);
+	AXR(10,11, 8, 9, 15,12,13,14,  5, 6, 7, 4,  7);
+	bnez	$a2, .Loop_hchacha_xor_rounds
+
+	/* Restore used register */
+	lw	X11, 0($sp)
+
+	sw	X0,  0(OUT)
+	sw	X1,  4(OUT)
+	sw	X2,  8(OUT)
+	sw	X3,  12(OUT)
+	sw	X12, 16(OUT)
+	sw	X13, 20(OUT)
+	sw	X14, 24(OUT)
+	sw	X15, 28(OUT)
+
+	addiu	$sp, STACK_SIZE
+	jr	$ra
+.end hchacha_block_arch
+.set at
diff --git a/arch/mips/crypto/chacha-glue.c b/arch/mips/crypto/chacha-glue.c
new file mode 100644
index 0000000..9089602
--- /dev/null
+++ b/arch/mips/crypto/chacha-glue.c
@@ -0,0 +1,152 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * MIPS accelerated ChaCha and XChaCha stream ciphers,
+ * including ChaCha20 (RFC7539)
+ *
+ * Copyright (C) 2019 Linaro, Ltd. <ard.biesheuvel@linaro.org>
+ */
+
+#include <asm/byteorder.h>
+#include <crypto/algapi.h>
+#include <crypto/internal/chacha.h>
+#include <crypto/internal/skcipher.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+
+asmlinkage void chacha_crypt_arch(u32 *state, u8 *dst, const u8 *src,
+				  unsigned int bytes, int nrounds);
+EXPORT_SYMBOL(chacha_crypt_arch);
+
+asmlinkage void hchacha_block_arch(const u32 *state, u32 *stream, int nrounds);
+EXPORT_SYMBOL(hchacha_block_arch);
+
+void chacha_init_arch(u32 *state, const u32 *key, const u8 *iv)
+{
+	chacha_init_generic(state, key, iv);
+}
+EXPORT_SYMBOL(chacha_init_arch);
+
+static int chacha_mips_stream_xor(struct skcipher_request *req,
+				  const struct chacha_ctx *ctx, const u8 *iv)
+{
+	struct skcipher_walk walk;
+	u32 state[16];
+	int err;
+
+	err = skcipher_walk_virt(&walk, req, false);
+
+	chacha_init_generic(state, ctx->key, iv);
+
+	while (walk.nbytes > 0) {
+		unsigned int nbytes = walk.nbytes;
+
+		if (nbytes < walk.total)
+			nbytes = round_down(nbytes, walk.stride);
+
+		chacha_crypt(state, walk.dst.virt.addr, walk.src.virt.addr,
+			     nbytes, ctx->nrounds);
+		err = skcipher_walk_done(&walk, walk.nbytes - nbytes);
+	}
+
+	return err;
+}
+
+static int chacha_mips(struct skcipher_request *req)
+{
+	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
+	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
+
+	return chacha_mips_stream_xor(req, ctx, req->iv);
+}
+
+static int xchacha_mips(struct skcipher_request *req)
+{
+	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
+	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
+	struct chacha_ctx subctx;
+	u32 state[16];
+	u8 real_iv[16];
+
+	chacha_init_generic(state, ctx->key, req->iv);
+
+	hchacha_block(state, subctx.key, ctx->nrounds);
+	subctx.nrounds = ctx->nrounds;
+
+	memcpy(&real_iv[0], req->iv + 24, 8);
+	memcpy(&real_iv[8], req->iv + 16, 8);
+	return chacha_mips_stream_xor(req, &subctx, real_iv);
+}
+
+static struct skcipher_alg algs[] = {
+	{
+		.base.cra_name		= "chacha20",
+		.base.cra_driver_name	= "chacha20-mips",
+		.base.cra_priority	= 200,
+		.base.cra_blocksize	= 1,
+		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
+		.base.cra_module	= THIS_MODULE,
+
+		.min_keysize		= CHACHA_KEY_SIZE,
+		.max_keysize		= CHACHA_KEY_SIZE,
+		.ivsize			= CHACHA_IV_SIZE,
+		.chunksize		= CHACHA_BLOCK_SIZE,
+		.setkey			= chacha20_setkey,
+		.encrypt		= chacha_mips,
+		.decrypt		= chacha_mips,
+	}, {
+		.base.cra_name		= "xchacha20",
+		.base.cra_driver_name	= "xchacha20-mips",
+		.base.cra_priority	= 200,
+		.base.cra_blocksize	= 1,
+		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
+		.base.cra_module	= THIS_MODULE,
+
+		.min_keysize		= CHACHA_KEY_SIZE,
+		.max_keysize		= CHACHA_KEY_SIZE,
+		.ivsize			= XCHACHA_IV_SIZE,
+		.chunksize		= CHACHA_BLOCK_SIZE,
+		.setkey			= chacha20_setkey,
+		.encrypt		= xchacha_mips,
+		.decrypt		= xchacha_mips,
+	}, {
+		.base.cra_name		= "xchacha12",
+		.base.cra_driver_name	= "xchacha12-mips",
+		.base.cra_priority	= 200,
+		.base.cra_blocksize	= 1,
+		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
+		.base.cra_module	= THIS_MODULE,
+
+		.min_keysize		= CHACHA_KEY_SIZE,
+		.max_keysize		= CHACHA_KEY_SIZE,
+		.ivsize			= XCHACHA_IV_SIZE,
+		.chunksize		= CHACHA_BLOCK_SIZE,
+		.setkey			= chacha12_setkey,
+		.encrypt		= xchacha_mips,
+		.decrypt		= xchacha_mips,
+	}
+};
+
+static int __init chacha_simd_mod_init(void)
+{
+	return IS_REACHABLE(CONFIG_CRYPTO_BLKCIPHER) ?
+		crypto_register_skciphers(algs, ARRAY_SIZE(algs)) : 0;
+}
+
+static void __exit chacha_simd_mod_fini(void)
+{
+	if (IS_REACHABLE(CONFIG_CRYPTO_BLKCIPHER))
+		crypto_unregister_skciphers(algs, ARRAY_SIZE(algs));
+}
+
+module_init(chacha_simd_mod_init);
+module_exit(chacha_simd_mod_fini);
+
+MODULE_DESCRIPTION("ChaCha and XChaCha stream ciphers (MIPS accelerated)");
+MODULE_AUTHOR("Ard Biesheuvel <ard.biesheuvel@linaro.org>");
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS_CRYPTO("chacha20");
+MODULE_ALIAS_CRYPTO("chacha20-mips");
+MODULE_ALIAS_CRYPTO("xchacha20");
+MODULE_ALIAS_CRYPTO("xchacha20-mips");
+MODULE_ALIAS_CRYPTO("xchacha12");
+MODULE_ALIAS_CRYPTO("xchacha12-mips");
diff --git a/arch/mips/crypto/poly1305-glue.c b/arch/mips/crypto/poly1305-glue.c
new file mode 100644
index 0000000..fc881b4
--- /dev/null
+++ b/arch/mips/crypto/poly1305-glue.c
@@ -0,0 +1,191 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * OpenSSL/Cryptogams accelerated Poly1305 transform for MIPS
+ *
+ * Copyright (C) 2019 Linaro Ltd. <ard.biesheuvel@linaro.org>
+ */
+
+#include <asm/unaligned.h>
+#include <crypto/algapi.h>
+#include <crypto/internal/hash.h>
+#include <crypto/internal/poly1305.h>
+#include <linux/cpufeature.h>
+#include <linux/crypto.h>
+#include <linux/module.h>
+
+asmlinkage void poly1305_init_mips(void *state, const u8 *key);
+asmlinkage void poly1305_blocks_mips(void *state, const u8 *src, u32 len, u32 hibit);
+asmlinkage void poly1305_emit_mips(void *state, u8 *digest, const u32 *nonce);
+
+void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 *key)
+{
+	poly1305_init_mips(&dctx->h, key);
+	dctx->s[0] = get_unaligned_le32(key + 16);
+	dctx->s[1] = get_unaligned_le32(key + 20);
+	dctx->s[2] = get_unaligned_le32(key + 24);
+	dctx->s[3] = get_unaligned_le32(key + 28);
+	dctx->buflen = 0;
+}
+EXPORT_SYMBOL(poly1305_init_arch);
+
+static int mips_poly1305_init(struct shash_desc *desc)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	dctx->buflen = 0;
+	dctx->rset = 0;
+	dctx->sset = false;
+
+	return 0;
+}
+
+static void mips_poly1305_blocks(struct poly1305_desc_ctx *dctx, const u8 *src,
+				 u32 len, u32 hibit)
+{
+	if (unlikely(!dctx->sset)) {
+		if (!dctx->rset) {
+			poly1305_init_mips(&dctx->h, src);
+			src += POLY1305_BLOCK_SIZE;
+			len -= POLY1305_BLOCK_SIZE;
+			dctx->rset = 1;
+		}
+		if (len >= POLY1305_BLOCK_SIZE) {
+			dctx->s[0] = get_unaligned_le32(src +  0);
+			dctx->s[1] = get_unaligned_le32(src +  4);
+			dctx->s[2] = get_unaligned_le32(src +  8);
+			dctx->s[3] = get_unaligned_le32(src + 12);
+			src += POLY1305_BLOCK_SIZE;
+			len -= POLY1305_BLOCK_SIZE;
+			dctx->sset = true;
+		}
+		if (len < POLY1305_BLOCK_SIZE)
+			return;
+	}
+
+	len &= ~(POLY1305_BLOCK_SIZE - 1);
+
+	poly1305_blocks_mips(&dctx->h, src, len, hibit);
+}
+
+static int mips_poly1305_update(struct shash_desc *desc, const u8 *src,
+				unsigned int len)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	if (unlikely(dctx->buflen)) {
+		u32 bytes = min(len, POLY1305_BLOCK_SIZE - dctx->buflen);
+
+		memcpy(dctx->buf + dctx->buflen, src, bytes);
+		src += bytes;
+		len -= bytes;
+		dctx->buflen += bytes;
+
+		if (dctx->buflen == POLY1305_BLOCK_SIZE) {
+			mips_poly1305_blocks(dctx, dctx->buf, POLY1305_BLOCK_SIZE, 1);
+			dctx->buflen = 0;
+		}
+	}
+
+	if (likely(len >= POLY1305_BLOCK_SIZE)) {
+		mips_poly1305_blocks(dctx, src, len, 1);
+		src += round_down(len, POLY1305_BLOCK_SIZE);
+		len %= POLY1305_BLOCK_SIZE;
+	}
+
+	if (unlikely(len)) {
+		dctx->buflen = len;
+		memcpy(dctx->buf, src, len);
+	}
+	return 0;
+}
+
+void poly1305_update_arch(struct poly1305_desc_ctx *dctx, const u8 *src,
+			  unsigned int nbytes)
+{
+	if (unlikely(dctx->buflen)) {
+		u32 bytes = min(nbytes, POLY1305_BLOCK_SIZE - dctx->buflen);
+
+		memcpy(dctx->buf + dctx->buflen, src, bytes);
+		src += bytes;
+		nbytes -= bytes;
+		dctx->buflen += bytes;
+
+		if (dctx->buflen == POLY1305_BLOCK_SIZE) {
+			poly1305_blocks_mips(&dctx->h, dctx->buf,
+					     POLY1305_BLOCK_SIZE, 1);
+			dctx->buflen = 0;
+		}
+	}
+
+	if (likely(nbytes >= POLY1305_BLOCK_SIZE)) {
+		unsigned int len = round_down(nbytes, POLY1305_BLOCK_SIZE);
+
+		poly1305_blocks_mips(&dctx->h, src, len, 1);
+		src += len;
+		nbytes %= POLY1305_BLOCK_SIZE;
+	}
+
+	if (unlikely(nbytes)) {
+		dctx->buflen = nbytes;
+		memcpy(dctx->buf, src, nbytes);
+	}
+}
+EXPORT_SYMBOL(poly1305_update_arch);
+
+void poly1305_final_arch(struct poly1305_desc_ctx *dctx, u8 *dst)
+{
+	if (unlikely(dctx->buflen)) {
+		dctx->buf[dctx->buflen++] = 1;
+		memset(dctx->buf + dctx->buflen, 0,
+		       POLY1305_BLOCK_SIZE - dctx->buflen);
+		poly1305_blocks_mips(&dctx->h, dctx->buf, POLY1305_BLOCK_SIZE, 0);
+	}
+
+	poly1305_emit_mips(&dctx->h, dst, dctx->s);
+	*dctx = (struct poly1305_desc_ctx){};
+}
+EXPORT_SYMBOL(poly1305_final_arch);
+
+static int mips_poly1305_final(struct shash_desc *desc, u8 *dst)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	if (unlikely(!dctx->sset))
+		return -ENOKEY;
+
+	poly1305_final_arch(dctx, dst);
+	return 0;
+}
+
+static struct shash_alg mips_poly1305_alg = {
+	.init			= mips_poly1305_init,
+	.update			= mips_poly1305_update,
+	.final			= mips_poly1305_final,
+	.digestsize		= POLY1305_DIGEST_SIZE,
+	.descsize		= sizeof(struct poly1305_desc_ctx),
+
+	.base.cra_name		= "poly1305",
+	.base.cra_driver_name	= "poly1305-mips",
+	.base.cra_priority	= 200,
+	.base.cra_blocksize	= POLY1305_BLOCK_SIZE,
+	.base.cra_module	= THIS_MODULE,
+};
+
+static int __init mips_poly1305_mod_init(void)
+{
+	return IS_REACHABLE(CONFIG_CRYPTO_HASH) ?
+		crypto_register_shash(&mips_poly1305_alg) : 0;
+}
+
+static void __exit mips_poly1305_mod_exit(void)
+{
+	if (IS_REACHABLE(CONFIG_CRYPTO_HASH))
+		crypto_unregister_shash(&mips_poly1305_alg);
+}
+
+module_init(mips_poly1305_mod_init);
+module_exit(mips_poly1305_mod_exit);
+
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS_CRYPTO("poly1305");
+MODULE_ALIAS_CRYPTO("poly1305-mips");
diff --git a/arch/mips/crypto/poly1305-mips.pl b/arch/mips/crypto/poly1305-mips.pl
new file mode 100644
index 0000000..b05bab8
--- /dev/null
+++ b/arch/mips/crypto/poly1305-mips.pl
@@ -0,0 +1,1273 @@
+#!/usr/bin/env perl
+# SPDX-License-Identifier: GPL-1.0+ OR BSD-3-Clause
+#
+# ====================================================================
+# Written by Andy Polyakov, @dot-asm, originally for the OpenSSL
+# project.
+# ====================================================================
+
+# Poly1305 hash for MIPS.
+#
+# May 2016
+#
+# Numbers are cycles per processed byte with poly1305_blocks alone.
+#
+#		IALU/gcc
+# R1x000	~5.5/+130%	(big-endian)
+# Octeon II	2.50/+70%	(little-endian)
+#
+# March 2019
+#
+# Add 32-bit code path.
+#
+# October 2019
+#
+# Modulo-scheduling reduction allows to omit dependency chain at the
+# end of inner loop and improve performance. Also optimize MIPS32R2
+# code path for MIPS 1004K core. Per René von Dorst's suggestions.
+#
+#		IALU/gcc
+# R1x000	~9.8/?		(big-endian)
+# Octeon II	3.65/+140%	(little-endian)
+# MT7621/1004K	4.75/?		(little-endian)
+#
+######################################################################
+# There is a number of MIPS ABI in use, O32 and N32/64 are most
+# widely used. Then there is a new contender: NUBI. It appears that if
+# one picks the latter, it's possible to arrange code in ABI neutral
+# manner. Therefore let's stick to NUBI register layout:
+#
+($zero,$at,$t0,$t1,$t2)=map("\$$_",(0..2,24,25));
+($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7)=map("\$$_",(4..11));
+($s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7,$s8,$s9,$s10,$s11)=map("\$$_",(12..23));
+($gp,$tp,$sp,$fp,$ra)=map("\$$_",(3,28..31));
+#
+# The return value is placed in $a0. Following coding rules facilitate
+# interoperability:
+#
+# - never ever touch $tp, "thread pointer", former $gp [o32 can be
+#   excluded from the rule, because it's specified volatile];
+# - copy return value to $t0, former $v0 [or to $a0 if you're adapting
+#   old code];
+# - on O32 populate $a4-$a7 with 'lw $aN,4*N($sp)' if necessary;
+#
+# For reference here is register layout for N32/64 MIPS ABIs:
+#
+# ($zero,$at,$v0,$v1)=map("\$$_",(0..3));
+# ($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7)=map("\$$_",(4..11));
+# ($t0,$t1,$t2,$t3,$t8,$t9)=map("\$$_",(12..15,24,25));
+# ($s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7)=map("\$$_",(16..23));
+# ($gp,$sp,$fp,$ra)=map("\$$_",(28..31));
+#
+# <appro@openssl.org>
+#
+######################################################################
+
+$flavour = shift || "64"; # supported flavours are o32,n32,64,nubi32,nubi64
+
+$v0 = ($flavour =~ /nubi/i) ? $a0 : $t0;
+
+if ($flavour =~ /64|n32/i) {{{
+######################################################################
+# 64-bit code path
+#
+
+my ($ctx,$inp,$len,$padbit) = ($a0,$a1,$a2,$a3);
+my ($in0,$in1,$tmp0,$tmp1,$tmp2,$tmp3,$tmp4) = ($a4,$a5,$a6,$a7,$at,$t0,$t1);
+
+$code.=<<___;
+#if (defined(_MIPS_ARCH_MIPS64R3) || defined(_MIPS_ARCH_MIPS64R5) || \\
+     defined(_MIPS_ARCH_MIPS64R6)) \\
+     && !defined(_MIPS_ARCH_MIPS64R2)
+# define _MIPS_ARCH_MIPS64R2
+#endif
+
+#if defined(_MIPS_ARCH_MIPS64R6)
+# define dmultu(rs,rt)
+# define mflo(rd,rs,rt)	dmulu	rd,rs,rt
+# define mfhi(rd,rs,rt)	dmuhu	rd,rs,rt
+#else
+# define dmultu(rs,rt)		dmultu	rs,rt
+# define mflo(rd,rs,rt)	mflo	rd
+# define mfhi(rd,rs,rt)	mfhi	rd
+#endif
+
+#ifdef	__KERNEL__
+# define poly1305_init   poly1305_init_mips
+# define poly1305_blocks poly1305_blocks_mips
+# define poly1305_emit   poly1305_emit_mips
+#endif
+
+#if defined(__MIPSEB__) && !defined(MIPSEB)
+# define MIPSEB
+#endif
+
+#ifdef MIPSEB
+# define MSB 0
+# define LSB 7
+#else
+# define MSB 7
+# define LSB 0
+#endif
+
+.text
+.set	noat
+.set	noreorder
+
+.align	5
+.globl	poly1305_init
+.ent	poly1305_init
+poly1305_init:
+	.frame	$sp,0,$ra
+	.set	reorder
+
+	sd	$zero,0($ctx)
+	sd	$zero,8($ctx)
+	sd	$zero,16($ctx)
+
+	beqz	$inp,.Lno_key
+
+#if defined(_MIPS_ARCH_MIPS64R6)
+	andi	$tmp0,$inp,7		# $inp % 8
+	dsubu	$inp,$inp,$tmp0		# align $inp
+	sll	$tmp0,$tmp0,3		# byte to bit offset
+	ld	$in0,0($inp)
+	ld	$in1,8($inp)
+	beqz	$tmp0,.Laligned_key
+	ld	$tmp2,16($inp)
+
+	subu	$tmp1,$zero,$tmp0
+# ifdef	MIPSEB
+	dsllv	$in0,$in0,$tmp0
+	dsrlv	$tmp3,$in1,$tmp1
+	dsllv	$in1,$in1,$tmp0
+	dsrlv	$tmp2,$tmp2,$tmp1
+# else
+	dsrlv	$in0,$in0,$tmp0
+	dsllv	$tmp3,$in1,$tmp1
+	dsrlv	$in1,$in1,$tmp0
+	dsllv	$tmp2,$tmp2,$tmp1
+# endif
+	or	$in0,$in0,$tmp3
+	or	$in1,$in1,$tmp2
+.Laligned_key:
+#else
+	ldl	$in0,0+MSB($inp)
+	ldl	$in1,8+MSB($inp)
+	ldr	$in0,0+LSB($inp)
+	ldr	$in1,8+LSB($inp)
+#endif
+#ifdef	MIPSEB
+# if defined(_MIPS_ARCH_MIPS64R2)
+	dsbh	$in0,$in0		# byte swap
+	 dsbh	$in1,$in1
+	dshd	$in0,$in0
+	 dshd	$in1,$in1
+# else
+	ori	$tmp0,$zero,0xFF
+	dsll	$tmp2,$tmp0,32
+	or	$tmp0,$tmp2		# 0x000000FF000000FF
+
+	and	$tmp1,$in0,$tmp0	# byte swap
+	 and	$tmp3,$in1,$tmp0
+	dsrl	$tmp2,$in0,24
+	 dsrl	$tmp4,$in1,24
+	dsll	$tmp1,24
+	 dsll	$tmp3,24
+	and	$tmp2,$tmp0
+	 and	$tmp4,$tmp0
+	dsll	$tmp0,8			# 0x0000FF000000FF00
+	or	$tmp1,$tmp2
+	 or	$tmp3,$tmp4
+	and	$tmp2,$in0,$tmp0
+	 and	$tmp4,$in1,$tmp0
+	dsrl	$in0,8
+	 dsrl	$in1,8
+	dsll	$tmp2,8
+	 dsll	$tmp4,8
+	and	$in0,$tmp0
+	 and	$in1,$tmp0
+	or	$tmp1,$tmp2
+	 or	$tmp3,$tmp4
+	or	$in0,$tmp1
+	 or	$in1,$tmp3
+	dsrl	$tmp1,$in0,32
+	 dsrl	$tmp3,$in1,32
+	dsll	$in0,32
+	 dsll	$in1,32
+	or	$in0,$tmp1
+	 or	$in1,$tmp3
+# endif
+#endif
+	li	$tmp0,1
+	dsll	$tmp0,32		# 0x0000000100000000
+	daddiu	$tmp0,-63		# 0x00000000ffffffc1
+	dsll	$tmp0,28		# 0x0ffffffc10000000
+	daddiu	$tmp0,-1		# 0x0ffffffc0fffffff
+
+	and	$in0,$tmp0
+	daddiu	$tmp0,-3		# 0x0ffffffc0ffffffc
+	and	$in1,$tmp0
+
+	sd	$in0,24($ctx)
+	dsrl	$tmp0,$in1,2
+	sd	$in1,32($ctx)
+	daddu	$tmp0,$in1		# s1 = r1 + (r1 >> 2)
+	sd	$tmp0,40($ctx)
+
+.Lno_key:
+	li	$v0,0			# return 0
+	jr	$ra
+.end	poly1305_init
+___
+{
+my $SAVED_REGS_MASK = ($flavour =~ /nubi/i) ? "0x0003f000" : "0x00030000";
+
+my ($h0,$h1,$h2,$r0,$r1,$rs1,$d0,$d1,$d2) =
+   ($s0,$s1,$s2,$s3,$s4,$s5,$in0,$in1,$t2);
+my ($shr,$shl) = ($s6,$s7);		# used on R6
+
+$code.=<<___;
+.align	5
+.globl	poly1305_blocks
+.ent	poly1305_blocks
+poly1305_blocks:
+	.set	noreorder
+	dsrl	$len,4			# number of complete blocks
+	bnez	$len,poly1305_blocks_internal
+	nop
+	jr	$ra
+	nop
+.end	poly1305_blocks
+
+.align	5
+.ent	poly1305_blocks_internal
+poly1305_blocks_internal:
+	.set	noreorder
+#if defined(_MIPS_ARCH_MIPS64R6)
+	.frame	$sp,8*8,$ra
+	.mask	$SAVED_REGS_MASK|0x000c0000,-8
+	dsubu	$sp,8*8
+	sd	$s7,56($sp)
+	sd	$s6,48($sp)
+#else
+	.frame	$sp,6*8,$ra
+	.mask	$SAVED_REGS_MASK,-8
+	dsubu	$sp,6*8
+#endif
+	sd	$s5,40($sp)
+	sd	$s4,32($sp)
+___
+$code.=<<___ if ($flavour =~ /nubi/i);	# optimize non-nubi prologue
+	sd	$s3,24($sp)
+	sd	$s2,16($sp)
+	sd	$s1,8($sp)
+	sd	$s0,0($sp)
+___
+$code.=<<___;
+	.set	reorder
+
+#if defined(_MIPS_ARCH_MIPS64R6)
+	andi	$shr,$inp,7
+	dsubu	$inp,$inp,$shr		# align $inp
+	sll	$shr,$shr,3		# byte to bit offset
+	subu	$shl,$zero,$shr
+#endif
+
+	ld	$h0,0($ctx)		# load hash value
+	ld	$h1,8($ctx)
+	ld	$h2,16($ctx)
+
+	ld	$r0,24($ctx)		# load key
+	ld	$r1,32($ctx)
+	ld	$rs1,40($ctx)
+
+	dsll	$len,4
+	daddu	$len,$inp		# end of buffer
+	b	.Loop
+
+.align	4
+.Loop:
+#if defined(_MIPS_ARCH_MIPS64R6)
+	ld	$in0,0($inp)		# load input
+	ld	$in1,8($inp)
+	beqz	$shr,.Laligned_inp
+
+	ld	$tmp2,16($inp)
+# ifdef	MIPSEB
+	dsllv	$in0,$in0,$shr
+	dsrlv	$tmp3,$in1,$shl
+	dsllv	$in1,$in1,$shr
+	dsrlv	$tmp2,$tmp2,$shl
+# else
+	dsrlv	$in0,$in0,$shr
+	dsllv	$tmp3,$in1,$shl
+	dsrlv	$in1,$in1,$shr
+	dsllv	$tmp2,$tmp2,$shl
+# endif
+	or	$in0,$in0,$tmp3
+	or	$in1,$in1,$tmp2
+.Laligned_inp:
+#else
+	ldl	$in0,0+MSB($inp)	# load input
+	ldl	$in1,8+MSB($inp)
+	ldr	$in0,0+LSB($inp)
+	ldr	$in1,8+LSB($inp)
+#endif
+	daddiu	$inp,16
+#ifdef	MIPSEB
+# if defined(_MIPS_ARCH_MIPS64R2)
+	dsbh	$in0,$in0		# byte swap
+	 dsbh	$in1,$in1
+	dshd	$in0,$in0
+	 dshd	$in1,$in1
+# else
+	ori	$tmp0,$zero,0xFF
+	dsll	$tmp2,$tmp0,32
+	or	$tmp0,$tmp2		# 0x000000FF000000FF
+
+	and	$tmp1,$in0,$tmp0	# byte swap
+	 and	$tmp3,$in1,$tmp0
+	dsrl	$tmp2,$in0,24
+	 dsrl	$tmp4,$in1,24
+	dsll	$tmp1,24
+	 dsll	$tmp3,24
+	and	$tmp2,$tmp0
+	 and	$tmp4,$tmp0
+	dsll	$tmp0,8			# 0x0000FF000000FF00
+	or	$tmp1,$tmp2
+	 or	$tmp3,$tmp4
+	and	$tmp2,$in0,$tmp0
+	 and	$tmp4,$in1,$tmp0
+	dsrl	$in0,8
+	 dsrl	$in1,8
+	dsll	$tmp2,8
+	 dsll	$tmp4,8
+	and	$in0,$tmp0
+	 and	$in1,$tmp0
+	or	$tmp1,$tmp2
+	 or	$tmp3,$tmp4
+	or	$in0,$tmp1
+	 or	$in1,$tmp3
+	dsrl	$tmp1,$in0,32
+	 dsrl	$tmp3,$in1,32
+	dsll	$in0,32
+	 dsll	$in1,32
+	or	$in0,$tmp1
+	 or	$in1,$tmp3
+# endif
+#endif
+	dsrl	$tmp1,$h2,2		# modulo-scheduled reduction
+	andi	$h2,$h2,3
+	dsll	$tmp0,$tmp1,2
+
+	daddu	$d0,$h0,$in0		# accumulate input
+	 daddu	$tmp1,$tmp0
+	sltu	$tmp0,$d0,$h0
+	daddu	$d0,$d0,$tmp1		# ... and residue
+	sltu	$tmp1,$d0,$tmp1
+	daddu	$d1,$h1,$in1
+	daddu	$tmp0,$tmp1
+	sltu	$tmp1,$d1,$h1
+	daddu	$d1,$tmp0
+
+	dmultu	($r0,$d0)		# h0*r0
+	 daddu	$d2,$h2,$padbit
+	 sltu	$tmp0,$d1,$tmp0
+	mflo	($h0,$r0,$d0)
+	mfhi	($h1,$r0,$d0)
+
+	dmultu	($rs1,$d1)		# h1*5*r1
+	 daddu	$d2,$tmp1
+	 daddu	$d2,$tmp0
+	mflo	($tmp0,$rs1,$d1)
+	mfhi	($tmp1,$rs1,$d1)
+
+	dmultu	($r1,$d0)		# h0*r1
+	mflo	($tmp2,$r1,$d0)
+	mfhi	($h2,$r1,$d0)
+	 daddu	$h0,$tmp0
+	 daddu	$h1,$tmp1
+	 sltu	$tmp0,$h0,$tmp0
+
+	dmultu	($r0,$d1)		# h1*r0
+	 daddu	$h1,$tmp0
+	 daddu	$h1,$tmp2
+	mflo	($tmp0,$r0,$d1)
+	mfhi	($tmp1,$r0,$d1)
+
+	dmultu	($rs1,$d2)		# h2*5*r1
+	 sltu	$tmp2,$h1,$tmp2
+	 daddu	$h2,$tmp2
+	mflo	($tmp2,$rs1,$d2)
+
+	dmultu	($r0,$d2)		# h2*r0
+	 daddu	$h1,$tmp0
+	 daddu	$h2,$tmp1
+	mflo	($tmp3,$r0,$d2)
+	 sltu	$tmp0,$h1,$tmp0
+	 daddu	$h2,$tmp0
+
+	daddu	$h1,$tmp2
+	sltu	$tmp2,$h1,$tmp2
+	daddu	$h2,$tmp2
+	daddu	$h2,$tmp3
+
+	bne	$inp,$len,.Loop
+
+	sd	$h0,0($ctx)		# store hash value
+	sd	$h1,8($ctx)
+	sd	$h2,16($ctx)
+
+	.set	noreorder
+#if defined(_MIPS_ARCH_MIPS64R6)
+	ld	$s7,56($sp)
+	ld	$s6,48($sp)
+#endif
+	ld	$s5,40($sp)		# epilogue
+	ld	$s4,32($sp)
+___
+$code.=<<___ if ($flavour =~ /nubi/i);	# optimize non-nubi epilogue
+	ld	$s3,24($sp)
+	ld	$s2,16($sp)
+	ld	$s1,8($sp)
+	ld	$s0,0($sp)
+___
+$code.=<<___;
+	jr	$ra
+#if defined(_MIPS_ARCH_MIPS64R6)
+	daddu	$sp,8*8
+#else
+	daddu	$sp,6*8
+#endif
+.end	poly1305_blocks_internal
+___
+}
+{
+my ($ctx,$mac,$nonce) = ($a0,$a1,$a2);
+
+$code.=<<___;
+.align	5
+.globl	poly1305_emit
+.ent	poly1305_emit
+poly1305_emit:
+	.frame	$sp,0,$ra
+	.set	reorder
+
+	ld	$tmp2,16($ctx)
+	ld	$tmp0,0($ctx)
+	ld	$tmp1,8($ctx)
+
+	li	$in0,-4			# final reduction
+	dsrl	$in1,$tmp2,2
+	and	$in0,$tmp2
+	andi	$tmp2,$tmp2,3
+	daddu	$in0,$in1
+
+	daddu	$tmp0,$tmp0,$in0
+	sltu	$in1,$tmp0,$in0
+	 daddiu	$in0,$tmp0,5		# compare to modulus
+	daddu	$tmp1,$tmp1,$in1
+	 sltiu	$tmp3,$in0,5
+	sltu	$tmp4,$tmp1,$in1
+	 daddu	$in1,$tmp1,$tmp3
+	daddu	$tmp2,$tmp2,$tmp4
+	 sltu	$tmp3,$in1,$tmp3
+	 daddu	$tmp2,$tmp2,$tmp3
+
+	dsrl	$tmp2,2			# see if it carried/borrowed
+	dsubu	$tmp2,$zero,$tmp2
+
+	xor	$in0,$tmp0
+	xor	$in1,$tmp1
+	and	$in0,$tmp2
+	and	$in1,$tmp2
+	xor	$in0,$tmp0
+	xor	$in1,$tmp1
+
+	lwu	$tmp0,0($nonce)		# load nonce
+	lwu	$tmp1,4($nonce)
+	lwu	$tmp2,8($nonce)
+	lwu	$tmp3,12($nonce)
+	dsll	$tmp1,32
+	dsll	$tmp3,32
+	or	$tmp0,$tmp1
+	or	$tmp2,$tmp3
+
+	daddu	$in0,$tmp0		# accumulate nonce
+	daddu	$in1,$tmp2
+	sltu	$tmp0,$in0,$tmp0
+	daddu	$in1,$tmp0
+
+	dsrl	$tmp0,$in0,8		# write mac value
+	dsrl	$tmp1,$in0,16
+	dsrl	$tmp2,$in0,24
+	sb	$in0,0($mac)
+	dsrl	$tmp3,$in0,32
+	sb	$tmp0,1($mac)
+	dsrl	$tmp0,$in0,40
+	sb	$tmp1,2($mac)
+	dsrl	$tmp1,$in0,48
+	sb	$tmp2,3($mac)
+	dsrl	$tmp2,$in0,56
+	sb	$tmp3,4($mac)
+	dsrl	$tmp3,$in1,8
+	sb	$tmp0,5($mac)
+	dsrl	$tmp0,$in1,16
+	sb	$tmp1,6($mac)
+	dsrl	$tmp1,$in1,24
+	sb	$tmp2,7($mac)
+
+	sb	$in1,8($mac)
+	dsrl	$tmp2,$in1,32
+	sb	$tmp3,9($mac)
+	dsrl	$tmp3,$in1,40
+	sb	$tmp0,10($mac)
+	dsrl	$tmp0,$in1,48
+	sb	$tmp1,11($mac)
+	dsrl	$tmp1,$in1,56
+	sb	$tmp2,12($mac)
+	sb	$tmp3,13($mac)
+	sb	$tmp0,14($mac)
+	sb	$tmp1,15($mac)
+
+	jr	$ra
+.end	poly1305_emit
+.rdata
+.asciiz	"Poly1305 for MIPS64, CRYPTOGAMS by \@dot-asm"
+.align	2
+___
+}
+}}} else {{{
+######################################################################
+# 32-bit code path
+#
+
+my ($ctx,$inp,$len,$padbit) = ($a0,$a1,$a2,$a3);
+my ($in0,$in1,$in2,$in3,$tmp0,$tmp1,$tmp2,$tmp3) =
+   ($a4,$a5,$a6,$a7,$at,$t0,$t1,$t2);
+
+$code.=<<___;
+#if (defined(_MIPS_ARCH_MIPS32R3) || defined(_MIPS_ARCH_MIPS32R5) || \\
+     defined(_MIPS_ARCH_MIPS32R6)) \\
+     && !defined(_MIPS_ARCH_MIPS32R2)
+# define _MIPS_ARCH_MIPS32R2
+#endif
+
+#if defined(_MIPS_ARCH_MIPS32R6)
+# define multu(rs,rt)
+# define mflo(rd,rs,rt)	mulu	rd,rs,rt
+# define mfhi(rd,rs,rt)	muhu	rd,rs,rt
+#else
+# define multu(rs,rt)	multu	rs,rt
+# define mflo(rd,rs,rt)	mflo	rd
+# define mfhi(rd,rs,rt)	mfhi	rd
+#endif
+
+#ifdef	__KERNEL__
+# define poly1305_init   poly1305_init_mips
+# define poly1305_blocks poly1305_blocks_mips
+# define poly1305_emit   poly1305_emit_mips
+#endif
+
+#if defined(__MIPSEB__) && !defined(MIPSEB)
+# define MIPSEB
+#endif
+
+#ifdef MIPSEB
+# define MSB 0
+# define LSB 3
+#else
+# define MSB 3
+# define LSB 0
+#endif
+
+.text
+.set	noat
+.set	noreorder
+
+.align	5
+.globl	poly1305_init
+.ent	poly1305_init
+poly1305_init:
+	.frame	$sp,0,$ra
+	.set	reorder
+
+	sw	$zero,0($ctx)
+	sw	$zero,4($ctx)
+	sw	$zero,8($ctx)
+	sw	$zero,12($ctx)
+	sw	$zero,16($ctx)
+
+	beqz	$inp,.Lno_key
+
+#if defined(_MIPS_ARCH_MIPS32R6)
+	andi	$tmp0,$inp,3		# $inp % 4
+	subu	$inp,$inp,$tmp0		# align $inp
+	sll	$tmp0,$tmp0,3		# byte to bit offset
+	lw	$in0,0($inp)
+	lw	$in1,4($inp)
+	lw	$in2,8($inp)
+	lw	$in3,12($inp)
+	beqz	$tmp0,.Laligned_key
+
+	lw	$tmp2,16($inp)
+	subu	$tmp1,$zero,$tmp0
+# ifdef	MIPSEB
+	sllv	$in0,$in0,$tmp0
+	srlv	$tmp3,$in1,$tmp1
+	sllv	$in1,$in1,$tmp0
+	or	$in0,$in0,$tmp3
+	srlv	$tmp3,$in2,$tmp1
+	sllv	$in2,$in2,$tmp0
+	or	$in1,$in1,$tmp3
+	srlv	$tmp3,$in3,$tmp1
+	sllv	$in3,$in3,$tmp0
+	or	$in2,$in2,$tmp3
+	srlv	$tmp2,$tmp2,$tmp1
+	or	$in3,$in3,$tmp2
+# else
+	srlv	$in0,$in0,$tmp0
+	sllv	$tmp3,$in1,$tmp1
+	srlv	$in1,$in1,$tmp0
+	or	$in0,$in0,$tmp3
+	sllv	$tmp3,$in2,$tmp1
+	srlv	$in2,$in2,$tmp0
+	or	$in1,$in1,$tmp3
+	sllv	$tmp3,$in3,$tmp1
+	srlv	$in3,$in3,$tmp0
+	or	$in2,$in2,$tmp3
+	sllv	$tmp2,$tmp2,$tmp1
+	or	$in3,$in3,$tmp2
+# endif
+.Laligned_key:
+#else
+	lwl	$in0,0+MSB($inp)
+	lwl	$in1,4+MSB($inp)
+	lwl	$in2,8+MSB($inp)
+	lwl	$in3,12+MSB($inp)
+	lwr	$in0,0+LSB($inp)
+	lwr	$in1,4+LSB($inp)
+	lwr	$in2,8+LSB($inp)
+	lwr	$in3,12+LSB($inp)
+#endif
+#ifdef	MIPSEB
+# if defined(_MIPS_ARCH_MIPS32R2)
+	wsbh	$in0,$in0		# byte swap
+	wsbh	$in1,$in1
+	wsbh	$in2,$in2
+	wsbh	$in3,$in3
+	rotr	$in0,$in0,16
+	rotr	$in1,$in1,16
+	rotr	$in2,$in2,16
+	rotr	$in3,$in3,16
+# else
+	srl	$tmp0,$in0,24		# byte swap
+	srl	$tmp1,$in0,8
+	andi	$tmp2,$in0,0xFF00
+	sll	$in0,$in0,24
+	andi	$tmp1,0xFF00
+	sll	$tmp2,$tmp2,8
+	or	$in0,$tmp0
+	 srl	$tmp0,$in1,24
+	or	$tmp1,$tmp2
+	 srl	$tmp2,$in1,8
+	or	$in0,$tmp1
+	 andi	$tmp1,$in1,0xFF00
+	 sll	$in1,$in1,24
+	 andi	$tmp2,0xFF00
+	 sll	$tmp1,$tmp1,8
+	 or	$in1,$tmp0
+	srl	$tmp0,$in2,24
+	 or	$tmp2,$tmp1
+	srl	$tmp1,$in2,8
+	 or	$in1,$tmp2
+	andi	$tmp2,$in2,0xFF00
+	sll	$in2,$in2,24
+	andi	$tmp1,0xFF00
+	sll	$tmp2,$tmp2,8
+	or	$in2,$tmp0
+	 srl	$tmp0,$in3,24
+	or	$tmp1,$tmp2
+	 srl	$tmp2,$in3,8
+	or	$in2,$tmp1
+	 andi	$tmp1,$in3,0xFF00
+	 sll	$in3,$in3,24
+	 andi	$tmp2,0xFF00
+	 sll	$tmp1,$tmp1,8
+	 or	$in3,$tmp0
+	 or	$tmp2,$tmp1
+	 or	$in3,$tmp2
+# endif
+#endif
+	lui	$tmp0,0x0fff
+	ori	$tmp0,0xffff		# 0x0fffffff
+	and	$in0,$in0,$tmp0
+	subu	$tmp0,3			# 0x0ffffffc
+	and	$in1,$in1,$tmp0
+	and	$in2,$in2,$tmp0
+	and	$in3,$in3,$tmp0
+
+	sw	$in0,20($ctx)
+	sw	$in1,24($ctx)
+	sw	$in2,28($ctx)
+	sw	$in3,32($ctx)
+
+	srl	$tmp1,$in1,2
+	srl	$tmp2,$in2,2
+	srl	$tmp3,$in3,2
+	addu	$in1,$in1,$tmp1		# s1 = r1 + (r1 >> 2)
+	addu	$in2,$in2,$tmp2
+	addu	$in3,$in3,$tmp3
+	sw	$in1,36($ctx)
+	sw	$in2,40($ctx)
+	sw	$in3,44($ctx)
+.Lno_key:
+	li	$v0,0
+	jr	$ra
+.end	poly1305_init
+___
+{
+my $SAVED_REGS_MASK = ($flavour =~ /nubi/i) ? "0x00fff000" : "0x00ff0000";
+
+my ($h0,$h1,$h2,$h3,$h4, $r0,$r1,$r2,$r3, $rs1,$rs2,$rs3) =
+   ($s0,$s1,$s2,$s3,$s4, $s5,$s6,$s7,$s8, $s9,$s10,$s11);
+my ($d0,$d1,$d2,$d3) =
+   ($a4,$a5,$a6,$a7);
+my $shr = $t2;		# used on R6
+my $one = $t2;		# used on R2
+
+$code.=<<___;
+.globl	poly1305_blocks
+.align	5
+.ent	poly1305_blocks
+poly1305_blocks:
+	.frame	$sp,16*4,$ra
+	.mask	$SAVED_REGS_MASK,-4
+	.set	noreorder
+	subu	$sp, $sp,4*12
+	sw	$s11,4*11($sp)
+	sw	$s10,4*10($sp)
+	sw	$s9, 4*9($sp)
+	sw	$s8, 4*8($sp)
+	sw	$s7, 4*7($sp)
+	sw	$s6, 4*6($sp)
+	sw	$s5, 4*5($sp)
+	sw	$s4, 4*4($sp)
+___
+$code.=<<___ if ($flavour =~ /nubi/i);	# optimize non-nubi prologue
+	sw	$s3, 4*3($sp)
+	sw	$s2, 4*2($sp)
+	sw	$s1, 4*1($sp)
+	sw	$s0, 4*0($sp)
+___
+$code.=<<___;
+	.set	reorder
+
+	srl	$len,4			# number of complete blocks
+	li	$one,1
+	beqz	$len,.Labort
+
+#if defined(_MIPS_ARCH_MIPS32R6)
+	andi	$shr,$inp,3
+	subu	$inp,$inp,$shr		# align $inp
+	sll	$shr,$shr,3		# byte to bit offset
+#endif
+
+	lw	$h0,0($ctx)		# load hash value
+	lw	$h1,4($ctx)
+	lw	$h2,8($ctx)
+	lw	$h3,12($ctx)
+	lw	$h4,16($ctx)
+
+	lw	$r0,20($ctx)		# load key
+	lw	$r1,24($ctx)
+	lw	$r2,28($ctx)
+	lw	$r3,32($ctx)
+	lw	$rs1,36($ctx)
+	lw	$rs2,40($ctx)
+	lw	$rs3,44($ctx)
+
+	sll	$len,4
+	addu	$len,$len,$inp		# end of buffer
+	b	.Loop
+
+.align	4
+.Loop:
+#if defined(_MIPS_ARCH_MIPS32R6)
+	lw	$d0,0($inp)		# load input
+	lw	$d1,4($inp)
+	lw	$d2,8($inp)
+	lw	$d3,12($inp)
+	beqz	$shr,.Laligned_inp
+
+	lw	$t0,16($inp)
+	subu	$t1,$zero,$shr
+# ifdef	MIPSEB
+	sllv	$d0,$d0,$shr
+	srlv	$at,$d1,$t1
+	sllv	$d1,$d1,$shr
+	or	$d0,$d0,$at
+	srlv	$at,$d2,$t1
+	sllv	$d2,$d2,$shr
+	or	$d1,$d1,$at
+	srlv	$at,$d3,$t1
+	sllv	$d3,$d3,$shr
+	or	$d2,$d2,$at
+	srlv	$t0,$t0,$t1
+	or	$d3,$d3,$t0
+# else
+	srlv	$d0,$d0,$shr
+	sllv	$at,$d1,$t1
+	srlv	$d1,$d1,$shr
+	or	$d0,$d0,$at
+	sllv	$at,$d2,$t1
+	srlv	$d2,$d2,$shr
+	or	$d1,$d1,$at
+	sllv	$at,$d3,$t1
+	srlv	$d3,$d3,$shr
+	or	$d2,$d2,$at
+	sllv	$t0,$t0,$t1
+	or	$d3,$d3,$t0
+# endif
+.Laligned_inp:
+#else
+	lwl	$d0,0+MSB($inp)		# load input
+	lwl	$d1,4+MSB($inp)
+	lwl	$d2,8+MSB($inp)
+	lwl	$d3,12+MSB($inp)
+	lwr	$d0,0+LSB($inp)
+	lwr	$d1,4+LSB($inp)
+	lwr	$d2,8+LSB($inp)
+	lwr	$d3,12+LSB($inp)
+#endif
+#ifdef	MIPSEB
+# if defined(_MIPS_ARCH_MIPS32R2)
+	wsbh	$d0,$d0			# byte swap
+	wsbh	$d1,$d1
+	wsbh	$d2,$d2
+	wsbh	$d3,$d3
+	rotr	$d0,$d0,16
+	rotr	$d1,$d1,16
+	rotr	$d2,$d2,16
+	rotr	$d3,$d3,16
+# else
+	srl	$at,$d0,24		# byte swap
+	srl	$t0,$d0,8
+	andi	$t1,$d0,0xFF00
+	sll	$d0,$d0,24
+	andi	$t0,0xFF00
+	sll	$t1,$t1,8
+	or	$d0,$at
+	 srl	$at,$d1,24
+	or	$t0,$t1
+	 srl	$t1,$d1,8
+	or	$d0,$t0
+	 andi	$t0,$d1,0xFF00
+	 sll	$d1,$d1,24
+	 andi	$t1,0xFF00
+	 sll	$t0,$t0,8
+	 or	$d1,$at
+	srl	$at,$d2,24
+	 or	$t1,$t0
+	srl	$t0,$d2,8
+	 or	$d1,$t1
+	andi	$t1,$d2,0xFF00
+	sll	$d2,$d2,24
+	andi	$t0,0xFF00
+	sll	$t1,$t1,8
+	or	$d2,$at
+	 srl	$at,$d3,24
+	or	$t0,$t1
+	 srl	$t1,$d3,8
+	or	$d2,$t0
+	 andi	$t0,$d3,0xFF00
+	 sll	$d3,$d3,24
+	 andi	$t1,0xFF00
+	 sll	$t0,$t0,8
+	 or	$d3,$at
+	 or	$t1,$t0
+	 or	$d3,$t1
+# endif
+#endif
+	srl	$t0,$h4,2		# modulo-scheduled reduction
+	andi	$h4,$h4,3
+	sll	$at,$t0,2
+
+	addu	$d0,$d0,$h0		# accumulate input
+	 addu	$t0,$t0,$at
+	sltu	$h0,$d0,$h0
+	addu	$d0,$d0,$t0		# ... and residue
+	sltu	$at,$d0,$t0
+
+	addu	$d1,$d1,$h1
+	 addu	$h0,$h0,$at		# carry
+	sltu	$h1,$d1,$h1
+	addu	$d1,$d1,$h0
+	sltu	$h0,$d1,$h0
+
+	addu	$d2,$d2,$h2
+	 addu	$h1,$h1,$h0		# carry
+	sltu	$h2,$d2,$h2
+	addu	$d2,$d2,$h1
+	sltu	$h1,$d2,$h1
+
+	addu	$d3,$d3,$h3
+	 addu	$h2,$h2,$h1		# carry
+	sltu	$h3,$d3,$h3
+	addu	$d3,$d3,$h2
+
+#if defined(_MIPS_ARCH_MIPS32R2) && !defined(_MIPS_ARCH_MIPS32R6)
+	multu	$r0,$d0			# d0*r0
+	 sltu	$h2,$d3,$h2
+	maddu	$rs3,$d1		# d1*s3
+	 addu	$h3,$h3,$h2		# carry
+	maddu	$rs2,$d2		# d2*s2
+	 addu	$h4,$h4,$padbit
+	maddu	$rs1,$d3		# d3*s1
+	 addu	$h4,$h4,$h3
+	mfhi	$at
+	mflo	$h0
+
+	multu	$r1,$d0			# d0*r1
+	maddu	$r0,$d1			# d1*r0
+	maddu	$rs3,$d2		# d2*s3
+	maddu	$rs2,$d3		# d3*s2
+	maddu	$rs1,$h4		# h4*s1
+	maddu	$at,$one		# hi*1
+	mfhi	$at
+	mflo	$h1
+
+	multu	$r2,$d0			# d0*r2
+	maddu	$r1,$d1			# d1*r1
+	maddu	$r0,$d2			# d2*r0
+	maddu	$rs3,$d3		# d3*s3
+	maddu	$rs2,$h4		# h4*s2
+	maddu	$at,$one		# hi*1
+	mfhi	$at
+	mflo	$h2
+
+	mul	$t0,$r0,$h4		# h4*r0
+
+	multu	$r3,$d0			# d0*r3
+	maddu	$r2,$d1			# d1*r2
+	maddu	$r1,$d2			# d2*r1
+	maddu	$r0,$d3			# d3*r0
+	maddu	$rs3,$h4		# h4*s3
+	maddu	$at,$one		# hi*1
+	mfhi	$at
+	mflo	$h3
+
+	 addiu	$inp,$inp,16
+
+	addu	$h4,$t0,$at
+#else
+	multu	($r0,$d0)		# d0*r0
+	mflo	($h0,$r0,$d0)
+	mfhi	($h1,$r0,$d0)
+
+	 sltu	$h2,$d3,$h2
+	 addu	$h3,$h3,$h2		# carry
+
+	multu	($rs3,$d1)		# d1*s3
+	mflo	($at,$rs3,$d1)
+	mfhi	($t0,$rs3,$d1)
+
+	 addu	$h4,$h4,$padbit
+	 addiu	$inp,$inp,16
+	 addu	$h4,$h4,$h3
+
+	multu	($rs2,$d2)		# d2*s2
+	mflo	($a3,$rs2,$d2)
+	mfhi	($t1,$rs2,$d2)
+	 addu	$h0,$h0,$at
+	 addu	$h1,$h1,$t0
+	multu	($rs1,$d3)		# d3*s1
+	 sltu	$at,$h0,$at
+	 addu	$h1,$h1,$at
+
+	mflo	($at,$rs1,$d3)
+	mfhi	($t0,$rs1,$d3)
+	 addu	$h0,$h0,$a3
+	 addu	$h1,$h1,$t1
+	multu	($r1,$d0)		# d0*r1
+	 sltu	$a3,$h0,$a3
+	 addu	$h1,$h1,$a3
+
+
+	mflo	($a3,$r1,$d0)
+	mfhi	($h2,$r1,$d0)
+	 addu	$h0,$h0,$at
+	 addu	$h1,$h1,$t0
+	multu	($r0,$d1)		# d1*r0
+	 sltu	$at,$h0,$at
+	 addu	$h1,$h1,$at
+
+	mflo	($at,$r0,$d1)
+	mfhi	($t0,$r0,$d1)
+	 addu	$h1,$h1,$a3
+	 sltu	$a3,$h1,$a3
+	multu	($rs3,$d2)		# d2*s3
+	 addu	$h2,$h2,$a3
+
+	mflo	($a3,$rs3,$d2)
+	mfhi	($t1,$rs3,$d2)
+	 addu	$h1,$h1,$at
+	 addu	$h2,$h2,$t0
+	multu	($rs2,$d3)		# d3*s2
+	 sltu	$at,$h1,$at
+	 addu	$h2,$h2,$at
+
+	mflo	($at,$rs2,$d3)
+	mfhi	($t0,$rs2,$d3)
+	 addu	$h1,$h1,$a3
+	 addu	$h2,$h2,$t1
+	multu	($rs1,$h4)		# h4*s1
+	 sltu	$a3,$h1,$a3
+	 addu	$h2,$h2,$a3
+
+	mflo	($a3,$rs1,$h4)
+	 addu	$h1,$h1,$at
+	 addu	$h2,$h2,$t0
+	multu	($r2,$d0)		# d0*r2
+	 sltu	$at,$h1,$at
+	 addu	$h2,$h2,$at
+
+
+	mflo	($at,$r2,$d0)
+	mfhi	($h3,$r2,$d0)
+	 addu	$h1,$h1,$a3
+	 sltu	$a3,$h1,$a3
+	multu	($r1,$d1)		# d1*r1
+	 addu	$h2,$h2,$a3
+
+	mflo	($a3,$r1,$d1)
+	mfhi	($t1,$r1,$d1)
+	 addu	$h2,$h2,$at
+	 sltu	$at,$h2,$at
+	multu	($r0,$d2)		# d2*r0
+	 addu	$h3,$h3,$at
+
+	mflo	($at,$r0,$d2)
+	mfhi	($t0,$r0,$d2)
+	 addu	$h2,$h2,$a3
+	 addu	$h3,$h3,$t1
+	multu	($rs3,$d3)		# d3*s3
+	 sltu	$a3,$h2,$a3
+	 addu	$h3,$h3,$a3
+
+	mflo	($a3,$rs3,$d3)
+	mfhi	($t1,$rs3,$d3)
+	 addu	$h2,$h2,$at
+	 addu	$h3,$h3,$t0
+	multu	($rs2,$h4)		# h4*s2
+	 sltu	$at,$h2,$at
+	 addu	$h3,$h3,$at
+
+	mflo	($at,$rs2,$h4)
+	 addu	$h2,$h2,$a3
+	 addu	$h3,$h3,$t1
+	multu	($r3,$d0)		# d0*r3
+	 sltu	$a3,$h2,$a3
+	 addu	$h3,$h3,$a3
+
+
+	mflo	($a3,$r3,$d0)
+	mfhi	($t1,$r3,$d0)
+	 addu	$h2,$h2,$at
+	 sltu	$at,$h2,$at
+	multu	($r2,$d1)		# d1*r2
+	 addu	$h3,$h3,$at
+
+	mflo	($at,$r2,$d1)
+	mfhi	($t0,$r2,$d1)
+	 addu	$h3,$h3,$a3
+	 sltu	$a3,$h3,$a3
+	multu	($r0,$d3)		# d3*r0
+	 addu	$t1,$t1,$a3
+
+	mflo	($a3,$r0,$d3)
+	mfhi	($d3,$r0,$d3)
+	 addu	$h3,$h3,$at
+	 addu	$t1,$t1,$t0
+	multu	($r1,$d2)		# d2*r1
+	 sltu	$at,$h3,$at
+	 addu	$t1,$t1,$at
+
+	mflo	($at,$r1,$d2)
+	mfhi	($t0,$r1,$d2)
+	 addu	$h3,$h3,$a3
+	 addu	$t1,$t1,$d3
+	multu	($rs3,$h4)		# h4*s3
+	 sltu	$a3,$h3,$a3
+	 addu	$t1,$t1,$a3
+
+	mflo	($a3,$rs3,$h4)
+	 addu	$h3,$h3,$at
+	 addu	$t1,$t1,$t0
+	multu	($r0,$h4)		# h4*r0
+	 sltu	$at,$h3,$at
+	 addu	$t1,$t1,$at
+
+
+	mflo	($h4,$r0,$h4)
+	 addu	$h3,$h3,$a3
+	 sltu	$a3,$h3,$a3
+	 addu	$t1,$t1,$a3
+	addu	$h4,$h4,$t1
+
+	li	$padbit,1		# if we loop, padbit is 1
+#endif
+	bne	$inp,$len,.Loop
+
+	sw	$h0,0($ctx)		# store hash value
+	sw	$h1,4($ctx)
+	sw	$h2,8($ctx)
+	sw	$h3,12($ctx)
+	sw	$h4,16($ctx)
+
+	.set	noreorder
+.Labort:
+	lw	$s11,4*11($sp)
+	lw	$s10,4*10($sp)
+	lw	$s9, 4*9($sp)
+	lw	$s8, 4*8($sp)
+	lw	$s7, 4*7($sp)
+	lw	$s6, 4*6($sp)
+	lw	$s5, 4*5($sp)
+	lw	$s4, 4*4($sp)
+___
+$code.=<<___ if ($flavour =~ /nubi/i);	# optimize non-nubi prologue
+	lw	$s3, 4*3($sp)
+	lw	$s2, 4*2($sp)
+	lw	$s1, 4*1($sp)
+	lw	$s0, 4*0($sp)
+___
+$code.=<<___;
+	jr	$ra
+	addu	$sp,$sp,4*12
+.end	poly1305_blocks
+___
+}
+{
+my ($ctx,$mac,$nonce,$tmp4) = ($a0,$a1,$a2,$a3);
+
+$code.=<<___;
+.align	5
+.globl	poly1305_emit
+.ent	poly1305_emit
+poly1305_emit:
+	.frame	$sp,0,$ra
+	.set	reorder
+
+	lw	$tmp4,16($ctx)
+	lw	$tmp0,0($ctx)
+	lw	$tmp1,4($ctx)
+	lw	$tmp2,8($ctx)
+	lw	$tmp3,12($ctx)
+
+	li	$in0,-4			# final reduction
+	srl	$ctx,$tmp4,2
+	and	$in0,$in0,$tmp4
+	andi	$tmp4,$tmp4,3
+	addu	$ctx,$ctx,$in0
+
+	addu	$tmp0,$tmp0,$ctx
+	sltu	$ctx,$tmp0,$ctx
+	 addiu	$in0,$tmp0,5		# compare to modulus
+	addu	$tmp1,$tmp1,$ctx
+	 sltiu	$in1,$in0,5
+	sltu	$ctx,$tmp1,$ctx
+	 addu	$in1,$in1,$tmp1
+	addu	$tmp2,$tmp2,$ctx
+	 sltu	$in2,$in1,$tmp1
+	sltu	$ctx,$tmp2,$ctx
+	 addu	$in2,$in2,$tmp2
+	addu	$tmp3,$tmp3,$ctx
+	 sltu	$in3,$in2,$tmp2
+	sltu	$ctx,$tmp3,$ctx
+	 addu	$in3,$in3,$tmp3
+	addu	$tmp4,$tmp4,$ctx
+	 sltu	$ctx,$in3,$tmp3
+	 addu	$ctx,$tmp4
+
+	srl	$ctx,2			# see if it carried/borrowed
+	subu	$ctx,$zero,$ctx
+
+	xor	$in0,$tmp0
+	xor	$in1,$tmp1
+	xor	$in2,$tmp2
+	xor	$in3,$tmp3
+	and	$in0,$ctx
+	and	$in1,$ctx
+	and	$in2,$ctx
+	and	$in3,$ctx
+	xor	$in0,$tmp0
+	xor	$in1,$tmp1
+	xor	$in2,$tmp2
+	xor	$in3,$tmp3
+
+	lw	$tmp0,0($nonce)		# load nonce
+	lw	$tmp1,4($nonce)
+	lw	$tmp2,8($nonce)
+	lw	$tmp3,12($nonce)
+
+	addu	$in0,$tmp0		# accumulate nonce
+	sltu	$ctx,$in0,$tmp0
+
+	addu	$in1,$tmp1
+	sltu	$tmp1,$in1,$tmp1
+	addu	$in1,$ctx
+	sltu	$ctx,$in1,$ctx
+	addu	$ctx,$tmp1
+
+	addu	$in2,$tmp2
+	sltu	$tmp2,$in2,$tmp2
+	addu	$in2,$ctx
+	sltu	$ctx,$in2,$ctx
+	addu	$ctx,$tmp2
+
+	addu	$in3,$tmp3
+	addu	$in3,$ctx
+
+	srl	$tmp0,$in0,8		# write mac value
+	srl	$tmp1,$in0,16
+	srl	$tmp2,$in0,24
+	sb	$in0, 0($mac)
+	sb	$tmp0,1($mac)
+	srl	$tmp0,$in1,8
+	sb	$tmp1,2($mac)
+	srl	$tmp1,$in1,16
+	sb	$tmp2,3($mac)
+	srl	$tmp2,$in1,24
+	sb	$in1, 4($mac)
+	sb	$tmp0,5($mac)
+	srl	$tmp0,$in2,8
+	sb	$tmp1,6($mac)
+	srl	$tmp1,$in2,16
+	sb	$tmp2,7($mac)
+	srl	$tmp2,$in2,24
+	sb	$in2, 8($mac)
+	sb	$tmp0,9($mac)
+	srl	$tmp0,$in3,8
+	sb	$tmp1,10($mac)
+	srl	$tmp1,$in3,16
+	sb	$tmp2,11($mac)
+	srl	$tmp2,$in3,24
+	sb	$in3, 12($mac)
+	sb	$tmp0,13($mac)
+	sb	$tmp1,14($mac)
+	sb	$tmp2,15($mac)
+
+	jr	$ra
+.end	poly1305_emit
+.rdata
+.asciiz	"Poly1305 for MIPS32, CRYPTOGAMS by \@dot-asm"
+.align	2
+___
+}
+}}}
+
+$output=pop and open STDOUT,">$output";
+print $code;
+close STDOUT;
diff --git a/arch/mips/include/asm/seccomp.h b/arch/mips/include/asm/seccomp.h
index e383d7e..aa80958 100644
--- a/arch/mips/include/asm/seccomp.h
+++ b/arch/mips/include/asm/seccomp.h
@@ -9,12 +9,12 @@ static inline const int *get_compat_mode1_syscalls(void)
 	static const int syscalls_O32[] = {
 		__NR_O32_Linux + 3, __NR_O32_Linux + 4,
 		__NR_O32_Linux + 1, __NR_O32_Linux + 193,
-		0, /* null terminated */
+		-1, /* negative terminated */
 	};
 	static const int syscalls_N32[] = {
 		__NR_N32_Linux + 0, __NR_N32_Linux + 1,
 		__NR_N32_Linux + 58, __NR_N32_Linux + 211,
-		0, /* null terminated */
+		-1, /* negative terminated */
 	};
 
 	if (IS_ENABLED(CONFIG_MIPS32_O32) && test_thread_flag(TIF_32BIT_REGS))
diff --git a/arch/mips/kernel/syscalls/syscall_n32.tbl b/arch/mips/kernel/syscalls/syscall_n32.tbl
index e7c5ab3..12a9953 100644
--- a/arch/mips/kernel/syscalls/syscall_n32.tbl
+++ b/arch/mips/kernel/syscalls/syscall_n32.tbl
@@ -374,3 +374,4 @@
 433	n32	fspick				sys_fspick
 434	n32	pidfd_open			sys_pidfd_open
 435	n32	clone3				__sys_clone3
+440	common	process_madvise		sys_process_madvise
diff --git a/arch/mips/kernel/syscalls/syscall_n64.tbl b/arch/mips/kernel/syscalls/syscall_n64.tbl
index 13cd665..4233b31 100644
--- a/arch/mips/kernel/syscalls/syscall_n64.tbl
+++ b/arch/mips/kernel/syscalls/syscall_n64.tbl
@@ -350,3 +350,4 @@
 433	n64	fspick				sys_fspick
 434	n64	pidfd_open			sys_pidfd_open
 435	n64	clone3				__sys_clone3
+440	common	process_madvise		sys_process_madvise
diff --git a/arch/mips/mm/dma-noncoherent.c b/arch/mips/mm/dma-noncoherent.c
index 1d4d57d..35cfcf9 100644
--- a/arch/mips/mm/dma-noncoherent.c
+++ b/arch/mips/mm/dma-noncoherent.c
@@ -147,4 +147,5 @@ void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size,
 {
 	dev->dma_coherent = coherent;
 }
+EXPORT_SYMBOL_GPL(arch_setup_dma_ops);
 #endif
diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c
index f589aa8..e62ee6f 100644
--- a/arch/mips/mm/fault.c
+++ b/arch/mips/mm/fault.c
@@ -44,7 +44,7 @@ static void __kprobes __do_page_fault(struct pt_regs *regs, unsigned long write,
 	const int field = sizeof(unsigned long) * 2;
 	int si_code;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	static DEFINE_RATELIMIT_STATE(ratelimit_state, 5 * HZ, 10);
 
@@ -154,7 +154,7 @@ static void __kprobes __do_page_fault(struct pt_regs *regs, unsigned long write,
 	 */
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
@@ -178,7 +178,6 @@ static void __kprobes __do_page_fault(struct pt_regs *regs, unsigned long write,
 			tsk->min_flt++;
 		}
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			/*
diff --git a/arch/mips/vdso/Makefile b/arch/mips/vdso/Makefile
index 996a934..267bd18 100644
--- a/arch/mips/vdso/Makefile
+++ b/arch/mips/vdso/Makefile
@@ -18,6 +18,10 @@
 	$(filter -mno-loongson-%,$(KBUILD_CFLAGS)) \
 	-D__VDSO__
 
+ifndef CONFIG_64BIT
+ccflags-vdso += -DBUILD_VDSO32
+endif
+
 ifdef CONFIG_CC_IS_CLANG
 ccflags-vdso += $(filter --target=%,$(KBUILD_CFLAGS))
 endif
diff --git a/arch/nds32/mm/fault.c b/arch/nds32/mm/fault.c
index 064ae5d..52097d5 100644
--- a/arch/nds32/mm/fault.c
+++ b/arch/nds32/mm/fault.c
@@ -76,7 +76,7 @@ void do_page_fault(unsigned long entry, unsigned long addr,
 	int si_code;
 	vm_fault_t fault;
 	unsigned int mask = VM_READ | VM_WRITE | VM_EXEC;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	error_code = error_code & (ITYPE_mskINST | ITYPE_mskETYPE);
 	tsk = current;
@@ -210,7 +210,7 @@ void do_page_fault(unsigned long entry, unsigned long addr,
 	 * signal first. We do not need to release the mmap_sem because it
 	 * would already be released in __lock_page_or_retry in mm/filemap.c.
 	 */
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) {
+	if (fault_signal_pending(fault, regs)) {
 		if (!user_mode(regs))
 			goto no_context;
 		return;
@@ -242,7 +242,6 @@ void do_page_fault(unsigned long entry, unsigned long addr,
 				      1, regs, addr);
 		}
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			/* No need to up_read(&mm->mmap_sem) as we would
diff --git a/arch/nios2/mm/fault.c b/arch/nios2/mm/fault.c
index 6a2e716..ec9d8a9 100644
--- a/arch/nios2/mm/fault.c
+++ b/arch/nios2/mm/fault.c
@@ -47,7 +47,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long cause,
 	struct mm_struct *mm = tsk->mm;
 	int code = SEGV_MAPERR;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	cause >>= 2;
 
@@ -133,7 +133,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long cause,
 	 */
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -157,9 +157,6 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long cause,
 		else
 			current->min_flt++;
 		if (fault & VM_FAULT_RETRY) {
-			/* Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk
-			 * of starvation. */
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			/*
diff --git a/arch/openrisc/mm/fault.c b/arch/openrisc/mm/fault.c
index 5d4d3a9..8af1cc7 100644
--- a/arch/openrisc/mm/fault.c
+++ b/arch/openrisc/mm/fault.c
@@ -50,7 +50,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long address,
 	struct vm_area_struct *vma;
 	int si_code;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	tsk = current;
 
@@ -161,7 +161,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long address,
 
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -181,7 +181,6 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long address,
 		else
 			tsk->min_flt++;
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			 /* No need to up_read(&mm->mmap_sem) as we would
diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild
index 9ceedf6..ae63364 100644
--- a/arch/parisc/include/asm/Kbuild
+++ b/arch/parisc/include/asm/Kbuild
@@ -19,7 +19,6 @@
 generic-y += mmiowb.h
 generic-y += percpu.h
 generic-y += preempt.h
-generic-y += seccomp.h
 generic-y += trace_clock.h
 generic-y += user.h
 generic-y += vga.h
diff --git a/arch/parisc/include/asm/seccomp.h b/arch/parisc/include/asm/seccomp.h
new file mode 100644
index 0000000..b058b22
--- /dev/null
+++ b/arch/parisc/include/asm/seccomp.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef _ASM_SECCOMP_H
+#define _ASM_SECCOMP_H
+
+#include <asm-generic/seccomp.h>
+
+#ifdef CONFIG_64BIT
+# define SECCOMP_ARCH_NATIVE		AUDIT_ARCH_PARISC64
+# define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+# define SECCOMP_ARCH_NATIVE_NAME	"parisc64"
+# ifdef CONFIG_COMPAT
+#  define SECCOMP_ARCH_COMPAT		AUDIT_ARCH_PARISC
+#  define SECCOMP_ARCH_COMPAT_NR	NR_syscalls
+#  define SECCOMP_ARCH_COMPAT_NAME	"parisc"
+# endif
+#else /* !CONFIG_64BIT */
+# define SECCOMP_ARCH_NATIVE		AUDIT_ARCH_PARISC
+# define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+# define SECCOMP_ARCH_NATIVE_NAME	"parisc"
+#endif
+
+#endif /* _ASM_SECCOMP_H */
diff --git a/arch/parisc/kernel/syscalls/syscall.tbl b/arch/parisc/kernel/syscalls/syscall.tbl
index 285ff51..a22d7bd6f 100644
--- a/arch/parisc/kernel/syscalls/syscall.tbl
+++ b/arch/parisc/kernel/syscalls/syscall.tbl
@@ -433,3 +433,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 435	common	clone3				sys_clone3_wrapper
+440	common	process_madvise		sys_process_madvise
diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c
index adbd5e2..86e8c84 100644
--- a/arch/parisc/mm/fault.c
+++ b/arch/parisc/mm/fault.c
@@ -274,7 +274,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
 	if (!mm)
 		goto no_context;
 
-	flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	flags = FAULT_FLAG_DEFAULT;
 	if (user_mode(regs))
 		flags |= FAULT_FLAG_USER;
 
@@ -304,7 +304,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
 
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -328,14 +328,12 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
 		else
 			current->min_flt++;
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
-
 			/*
 			 * No need to up_read(&mm->mmap_sem) as we would
 			 * have already released it in __lock_page_or_retry
 			 * in mm/filemap.c.
 			 */
-
+			flags |= FAULT_FLAG_TRIED;
 			goto retry;
 		}
 	}
diff --git a/arch/powerpc/include/asm/seccomp.h b/arch/powerpc/include/asm/seccomp.h
index 51209f6..ac2033f 100644
--- a/arch/powerpc/include/asm/seccomp.h
+++ b/arch/powerpc/include/asm/seccomp.h
@@ -8,4 +8,27 @@
 
 #include <asm-generic/seccomp.h>
 
+#ifdef __LITTLE_ENDIAN__
+#define __SECCOMP_ARCH_LE		__AUDIT_ARCH_LE
+#define __SECCOMP_ARCH_LE_NAME		"le"
+#else
+#define __SECCOMP_ARCH_LE		0
+#define __SECCOMP_ARCH_LE_NAME
+#endif
+
+#ifdef CONFIG_PPC64
+# define SECCOMP_ARCH_NATIVE		(AUDIT_ARCH_PPC64 | __SECCOMP_ARCH_LE)
+# define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+# define SECCOMP_ARCH_NATIVE_NAME	"ppc64" __SECCOMP_ARCH_LE_NAME
+# ifdef CONFIG_COMPAT
+#  define SECCOMP_ARCH_COMPAT		(AUDIT_ARCH_PPC | __SECCOMP_ARCH_LE)
+#  define SECCOMP_ARCH_COMPAT_NR	NR_syscalls
+#  define SECCOMP_ARCH_COMPAT_NAME	"ppc" __SECCOMP_ARCH_LE_NAME
+# endif
+#else /* !CONFIG_PPC64 */
+# define SECCOMP_ARCH_NATIVE		(AUDIT_ARCH_PPC | __SECCOMP_ARCH_LE)
+# define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+# define SECCOMP_ARCH_NATIVE_NAME	"ppc" __SECCOMP_ARCH_LE_NAME
+#endif
+
 #endif	/* _ASM_POWERPC_SECCOMP_H */
diff --git a/arch/powerpc/kernel/syscalls/syscall.tbl b/arch/powerpc/kernel/syscalls/syscall.tbl
index 43f736e..5b07621 100644
--- a/arch/powerpc/kernel/syscalls/syscall.tbl
+++ b/arch/powerpc/kernel/syscalls/syscall.tbl
@@ -517,3 +517,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 435	nospu	clone3				ppc_clone3
+440	common	process_madvise		sys_process_madvise
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
index bb01a862..b0db4f8 100644
--- a/arch/powerpc/mm/fault.c
+++ b/arch/powerpc/mm/fault.c
@@ -439,7 +439,7 @@ static int __do_page_fault(struct pt_regs *regs, unsigned long address,
 {
 	struct vm_area_struct * vma;
 	struct mm_struct *mm = current->mm;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
  	int is_exec = TRAP(regs) == 0x400;
 	int is_user = user_mode(regs);
 	int is_write = page_fault_is_write(error_code);
@@ -587,28 +587,18 @@ static int __do_page_fault(struct pt_regs *regs, unsigned long address,
 
 	major |= fault & VM_FAULT_MAJOR;
 
+	if (fault_signal_pending(fault, regs))
+		return user_mode(regs) ? 0 : SIGBUS;
+
 	/*
 	 * Handle the retry right now, the mmap_sem has been released in that
 	 * case.
 	 */
 	if (unlikely(fault & VM_FAULT_RETRY)) {
-		/* We retry only once */
 		if (flags & FAULT_FLAG_ALLOW_RETRY) {
-			/*
-			 * Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk
-			 * of starvation.
-			 */
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
-			if (!fatal_signal_pending(current))
-				goto retry;
+			goto retry;
 		}
-
-		/*
-		 * User mode? Just return to handle the fatal exception otherwise
-		 * return to bad_page_fault
-		 */
-		return is_user ? 0 : SIGBUS;
 	}
 
 	up_read(&current->mm->mmap_sem);
diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
index 02fc75d..f20b730 100644
--- a/arch/powerpc/perf/core-book3s.c
+++ b/arch/powerpc/perf/core-book3s.c
@@ -96,7 +96,7 @@ static inline unsigned long perf_ip_adjust(struct pt_regs *regs)
 {
 	return 0;
 }
-static inline void perf_get_data_addr(struct pt_regs *regs, u64 *addrp) { }
+static inline void perf_get_data_addr(struct perf_event *event, struct pt_regs *regs, u64 *addrp) { }
 static inline u32 perf_get_misc_flags(struct pt_regs *regs)
 {
 	return 0;
@@ -127,7 +127,7 @@ static unsigned long ebb_switch_in(bool ebb, struct cpu_hw_events *cpuhw)
 static inline void power_pmu_bhrb_enable(struct perf_event *event) {}
 static inline void power_pmu_bhrb_disable(struct perf_event *event) {}
 static void power_pmu_sched_task(struct perf_event_context *ctx, bool sched_in) {}
-static inline void power_pmu_bhrb_read(struct cpu_hw_events *cpuhw) {}
+static inline void power_pmu_bhrb_read(struct perf_event *event, struct cpu_hw_events *cpuhw) {}
 static void pmao_restore_workaround(bool ebb) { }
 #endif /* CONFIG_PPC32 */
 
@@ -182,7 +182,7 @@ static inline unsigned long perf_ip_adjust(struct pt_regs *regs)
  * pointed to by SIAR; this is indicated by the [POWER6_]MMCRA_SDSYNC, the
  * [POWER7P_]MMCRA_SDAR_VALID bit in MMCRA, or the SDAR_VALID bit in SIER.
  */
-static inline void perf_get_data_addr(struct pt_regs *regs, u64 *addrp)
+static inline void perf_get_data_addr(struct perf_event *event, struct pt_regs *regs, u64 *addrp)
 {
 	unsigned long mmcra = regs->dsisr;
 	bool sdar_valid;
@@ -207,8 +207,7 @@ static inline void perf_get_data_addr(struct pt_regs *regs, u64 *addrp)
 	if (!(mmcra & MMCRA_SAMPLE_ENABLE) || sdar_valid)
 		*addrp = mfspr(SPRN_SDAR);
 
-	if (perf_paranoid_kernel() && !capable(CAP_SYS_ADMIN) &&
-		is_kernel_addr(mfspr(SPRN_SDAR)))
+	if (is_kernel_addr(mfspr(SPRN_SDAR)) && perf_allow_kernel(&event->attr) != 0)
 		*addrp = 0;
 }
 
@@ -447,7 +446,7 @@ static __u64 power_pmu_bhrb_to(u64 addr)
 }
 
 /* Processing BHRB entries */
-static void power_pmu_bhrb_read(struct cpu_hw_events *cpuhw)
+static void power_pmu_bhrb_read(struct perf_event *event, struct cpu_hw_events *cpuhw)
 {
 	u64 val;
 	u64 addr;
@@ -475,8 +474,7 @@ static void power_pmu_bhrb_read(struct cpu_hw_events *cpuhw)
 			 * exporting it to userspace (avoid exposure of regions
 			 * where we could have speculative execution)
 			 */
-			if (perf_paranoid_kernel() && !capable(CAP_SYS_ADMIN) &&
-				is_kernel_addr(addr))
+			if (is_kernel_addr(addr) && perf_allow_kernel(&event->attr) != 0)
 				continue;
 
 			/* Branches are read most recent first (ie. mfbhrb 0 is
@@ -2109,12 +2107,12 @@ static void record_and_restart(struct perf_event *event, unsigned long val,
 
 		if (event->attr.sample_type &
 		    (PERF_SAMPLE_ADDR | PERF_SAMPLE_PHYS_ADDR))
-			perf_get_data_addr(regs, &data.addr);
+			perf_get_data_addr(event, regs, &data.addr);
 
 		if (event->attr.sample_type & PERF_SAMPLE_BRANCH_STACK) {
 			struct cpu_hw_events *cpuhw;
 			cpuhw = this_cpu_ptr(&cpu_hw_events);
-			power_pmu_bhrb_read(cpuhw);
+			power_pmu_bhrb_read(event, cpuhw);
 			data.br_stack = &cpuhw->bhrb_stack;
 		}
 
diff --git a/arch/riscv/mm/fault.c b/arch/riscv/mm/fault.c
index 247b8c8..c0dd526 100644
--- a/arch/riscv/mm/fault.c
+++ b/arch/riscv/mm/fault.c
@@ -30,7 +30,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs)
 	struct vm_area_struct *vma;
 	struct mm_struct *mm;
 	unsigned long addr, cause;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 	int code = SEGV_MAPERR;
 	vm_fault_t fault;
 
@@ -117,7 +117,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs)
 	 * signal first. We do not need to release the mmap_sem because it
 	 * would already be released in __lock_page_or_retry in mm/filemap.c.
 	 */
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(tsk))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -144,11 +144,6 @@ asmlinkage void do_page_fault(struct pt_regs *regs)
 				      1, regs, addr);
 		}
 		if (fault & VM_FAULT_RETRY) {
-			/*
-			 * Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk
-			 * of starvation.
-			 */
-			flags &= ~(FAULT_FLAG_ALLOW_RETRY);
 			flags |= FAULT_FLAG_TRIED;
 
 			/*
diff --git a/arch/s390/include/asm/seccomp.h b/arch/s390/include/asm/seccomp.h
index 795bbe0..71d46f0 100644
--- a/arch/s390/include/asm/seccomp.h
+++ b/arch/s390/include/asm/seccomp.h
@@ -16,4 +16,13 @@
 
 #include <asm-generic/seccomp.h>
 
+#define SECCOMP_ARCH_NATIVE		AUDIT_ARCH_S390X
+#define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+#define SECCOMP_ARCH_NATIVE_NAME	"s390x"
+#ifdef CONFIG_COMPAT
+# define SECCOMP_ARCH_COMPAT		AUDIT_ARCH_S390
+# define SECCOMP_ARCH_COMPAT_NR		NR_syscalls
+# define SECCOMP_ARCH_COMPAT_NAME	"s390"
+#endif
+
 #endif	/* _ASM_S390_SECCOMP_H */
diff --git a/arch/s390/kernel/syscalls/syscall.tbl b/arch/s390/kernel/syscalls/syscall.tbl
index 3054e9c0..d1d4386 100644
--- a/arch/s390/kernel/syscalls/syscall.tbl
+++ b/arch/s390/kernel/syscalls/syscall.tbl
@@ -438,3 +438,4 @@
 433  common	fspick			sys_fspick			sys_fspick
 434  common	pidfd_open		sys_pidfd_open			sys_pidfd_open
 435  common	clone3			sys_clone3			sys_clone3
+440	common	process_madvise		sys_process_madvise         sys_process_madvise
\ No newline at end of file
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c
index 7b0bb47..aeccdb3 100644
--- a/arch/s390/mm/fault.c
+++ b/arch/s390/mm/fault.c
@@ -429,7 +429,7 @@ static inline vm_fault_t do_exception(struct pt_regs *regs, int access)
 
 	address = trans_exc_code & __FAIL_ADDR_MASK;
 	perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
-	flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	flags = FAULT_FLAG_DEFAULT;
 	if (user_mode(regs))
 		flags |= FAULT_FLAG_USER;
 	if (access == VM_WRITE || (trans_exc_code & store_indication) == 0x400)
@@ -480,8 +480,7 @@ static inline vm_fault_t do_exception(struct pt_regs *regs, int access)
 	 * the fault.
 	 */
 	fault = handle_mm_fault(vma, address, flags);
-	/* No reason to continue if interrupted by SIGKILL. */
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) {
+	if (fault_signal_pending(fault, regs)) {
 		fault = VM_FAULT_SIGNAL;
 		if (flags & FAULT_FLAG_RETRY_NOWAIT)
 			goto out_up;
@@ -514,10 +513,7 @@ static inline vm_fault_t do_exception(struct pt_regs *regs, int access)
 				fault = VM_FAULT_PFAULT;
 				goto out_up;
 			}
-			/* Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk
-			 * of starvation. */
-			flags &= ~(FAULT_FLAG_ALLOW_RETRY |
-				   FAULT_FLAG_RETRY_NOWAIT);
+			flags &= ~FAULT_FLAG_RETRY_NOWAIT;
 			flags |= FAULT_FLAG_TRIED;
 			down_read(&mm->mmap_sem);
 			goto retry;
diff --git a/arch/sh/include/asm/seccomp.h b/arch/sh/include/asm/seccomp.h
index 54111e4..d457839 100644
--- a/arch/sh/include/asm/seccomp.h
+++ b/arch/sh/include/asm/seccomp.h
@@ -8,4 +8,14 @@
 #define __NR_seccomp_exit __NR_exit
 #define __NR_seccomp_sigreturn __NR_rt_sigreturn
 
+#ifdef CONFIG_CPU_LITTLE_ENDIAN
+#define __SECCOMP_ARCH_LE		__AUDIT_ARCH_LE
+#else
+#define __SECCOMP_ARCH_LE		0
+#endif
+
+#define SECCOMP_ARCH_NATIVE		(AUDIT_ARCH_SH | __SECCOMP_ARCH_LE)
+#define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+#define SECCOMP_ARCH_NATIVE_NAME	"sh"
+
 #endif /* __ASM_SECCOMP_H */
diff --git a/arch/sh/include/uapi/asm/unistd_64.h b/arch/sh/include/uapi/asm/unistd_64.h
index 75da548..aa747f9 100644
--- a/arch/sh/include/uapi/asm/unistd_64.h
+++ b/arch/sh/include/uapi/asm/unistd_64.h
@@ -417,7 +417,7 @@
 #define __NR_pwritev2		393
 
 #ifdef __KERNEL__
-#define __NR_syscalls		394
+#define __NR_syscalls 441
 #endif
 
 #endif /* __ASM_SH_UNISTD_64_H */
diff --git a/arch/sh/kernel/syscalls/syscall.tbl b/arch/sh/kernel/syscalls/syscall.tbl
index b5ed26c..fef50a9 100644
--- a/arch/sh/kernel/syscalls/syscall.tbl
+++ b/arch/sh/kernel/syscalls/syscall.tbl
@@ -438,3 +438,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 # 435 reserved for clone3
+440	common	process_madvise		sys_process_madvise
diff --git a/arch/sh/mm/fault.c b/arch/sh/mm/fault.c
index 5f51456..13ee4d2 100644
--- a/arch/sh/mm/fault.c
+++ b/arch/sh/mm/fault.c
@@ -302,25 +302,25 @@ mm_fault_error(struct pt_regs *regs, unsigned long error_code,
 	 * Pagefault was interrupted by SIGKILL. We have no reason to
 	 * continue pagefault.
 	 */
-	if (fatal_signal_pending(current)) {
-		if (!(fault & VM_FAULT_RETRY))
-			up_read(&current->mm->mmap_sem);
+	if (fault_signal_pending(fault, regs)) {
 		if (!user_mode(regs))
 			no_context(regs, error_code, address);
 		return 1;
 	}
 
+	/* Release mmap_sem first if necessary */
+	if (!(fault & VM_FAULT_RETRY))
+		up_read(&current->mm->mmap_sem);
+
 	if (!(fault & VM_FAULT_ERROR))
 		return 0;
 
 	if (fault & VM_FAULT_OOM) {
 		/* Kernel mode? Handle exceptions or die: */
 		if (!user_mode(regs)) {
-			up_read(&current->mm->mmap_sem);
 			no_context(regs, error_code, address);
 			return 1;
 		}
-		up_read(&current->mm->mmap_sem);
 
 		/*
 		 * We ran out of memory, call the OOM killer, and return the
@@ -380,7 +380,7 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
 	struct mm_struct *mm;
 	struct vm_area_struct * vma;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	tsk = current;
 	mm = tsk->mm;
@@ -481,7 +481,6 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
 				      regs, address);
 		}
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			/*
diff --git a/arch/sparc/kernel/syscalls/syscall.tbl b/arch/sparc/kernel/syscalls/syscall.tbl
index 8c8cc75..07ab20a 100644
--- a/arch/sparc/kernel/syscalls/syscall.tbl
+++ b/arch/sparc/kernel/syscalls/syscall.tbl
@@ -481,3 +481,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 # 435 reserved for clone3
+440	common	process_madvise		sys_process_madvise
diff --git a/arch/sparc/mm/fault_32.c b/arch/sparc/mm/fault_32.c
index 8d69de1..a8c8cb3 100644
--- a/arch/sparc/mm/fault_32.c
+++ b/arch/sparc/mm/fault_32.c
@@ -168,7 +168,7 @@ asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write,
 	int from_user = !(regs->psr & PSR_PS);
 	int code;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	if (text_fault)
 		address = regs->pc;
@@ -237,7 +237,7 @@ asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write,
 	 */
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -261,7 +261,6 @@ asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write,
 				      1, regs, address);
 		}
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			/* No need to up_read(&mm->mmap_sem) as we would
diff --git a/arch/sparc/mm/fault_64.c b/arch/sparc/mm/fault_64.c
index 2371fb6..eb4cfd5 100644
--- a/arch/sparc/mm/fault_64.c
+++ b/arch/sparc/mm/fault_64.c
@@ -267,7 +267,7 @@ asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs)
 	int si_code, fault_code;
 	vm_fault_t fault;
 	unsigned long address, mm_rss;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	fault_code = get_thread_fault_code();
 
@@ -421,7 +421,7 @@ asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs)
 
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		goto exit_exception;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -445,7 +445,6 @@ asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs)
 				      1, regs, address);
 		}
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			/* No need to up_read(&mm->mmap_sem) as we would
diff --git a/arch/um/configs/kunit_defconfig b/arch/um/configs/kunit_defconfig
new file mode 100644
index 0000000..9235b7d
--- /dev/null
+++ b/arch/um/configs/kunit_defconfig
@@ -0,0 +1,3 @@
+CONFIG_KUNIT=y
+CONFIG_KUNIT_TEST=y
+CONFIG_KUNIT_EXAMPLE_TEST=y
diff --git a/arch/um/kernel/irq.c b/arch/um/kernel/irq.c
index 3577118..9410424 100644
--- a/arch/um/kernel/irq.c
+++ b/arch/um/kernel/irq.c
@@ -480,7 +480,7 @@ void __init init_IRQ(void)
 	irq_set_chip_and_handler(TIMER_IRQ, &SIGVTALRM_irq_type, handle_edge_irq);
 
 
-	for (i = 1; i <= LAST_IRQ; i++)
+	for (i = 1; i < NR_IRQS; i++)
 		irq_set_chip_and_handler(i, &normal_irq_type, handle_edge_irq);
 	/* Initialize EPOLL Loop */
 	os_setup_epoll();
diff --git a/arch/um/kernel/trap.c b/arch/um/kernel/trap.c
index e62296c..8544dae6 100644
--- a/arch/um/kernel/trap.c
+++ b/arch/um/kernel/trap.c
@@ -32,7 +32,7 @@ int handle_page_fault(unsigned long address, unsigned long ip,
 	pmd_t *pmd;
 	pte_t *pte;
 	int err = -EFAULT;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	*code_out = SEGV_MAPERR;
 
@@ -96,7 +96,6 @@ int handle_page_fault(unsigned long address, unsigned long ip,
 			else
 				current->min_flt++;
 			if (fault & VM_FAULT_RETRY) {
-				flags &= ~FAULT_FLAG_ALLOW_RETRY;
 				flags |= FAULT_FLAG_TRIED;
 
 				goto retry;
diff --git a/arch/um/os-Linux/umid.c b/arch/um/os-Linux/umid.c
index ea5c60f..4c19df8 100644
--- a/arch/um/os-Linux/umid.c
+++ b/arch/um/os-Linux/umid.c
@@ -135,15 +135,16 @@ static int remove_files_and_dir(char *dir)
  */
 static inline int is_umdir_used(char *dir)
 {
-	char pid[sizeof("nnnnn\0")], *end, *file;
+	char file[strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")];
+	char pid[sizeof("nnnnn\0")], *end;
 	int dead, fd, p, n, err;
-	size_t filelen = strlen(dir) + sizeof("/pid") + 1;
 
-	file = malloc(filelen);
-	if (!file)
-		return -ENOMEM;
-
-	snprintf(file, filelen, "%s/pid", dir);
+	n = snprintf(file, sizeof(file), "%s/pid", dir);
+	if (n >= sizeof(file)) {
+		printk(UM_KERN_ERR "is_umdir_used - pid filename too long\n");
+		err = -E2BIG;
+		goto out;
+	}
 
 	dead = 0;
 	fd = open(file, O_RDONLY);
@@ -184,7 +185,6 @@ static inline int is_umdir_used(char *dir)
 out_close:
 	close(fd);
 out:
-	free(file);
 	return 0;
 }
 
@@ -210,21 +210,18 @@ static int umdir_take_if_dead(char *dir)
 
 static void __init create_pid_file(void)
 {
-	char pid[sizeof("nnnnn\0")], *file;
+	char file[strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")];
+	char pid[sizeof("nnnnn\0")];
 	int fd, n;
 
-	file = malloc(strlen(uml_dir) + UMID_LEN + sizeof("/pid\0"));
-	if (!file)
-		return;
-
 	if (umid_file_name("pid", file, sizeof(file)))
-		goto out;
+		return;
 
 	fd = open(file, O_RDWR | O_CREAT | O_EXCL, 0644);
 	if (fd < 0) {
 		printk(UM_KERN_ERR "Open of machine pid file \"%s\" failed: "
 		       "%s\n", file, strerror(errno));
-		goto out;
+		return;
 	}
 
 	snprintf(pid, sizeof(pid), "%d\n", getpid());
@@ -234,8 +231,6 @@ static void __init create_pid_file(void)
 		       errno);
 
 	close(fd);
-out:
-	free(file);
 }
 
 int __init set_umid(char *name)
@@ -390,19 +385,13 @@ __uml_setup("uml_dir=", set_uml_dir,
 
 static void remove_umid_dir(void)
 {
-	char *dir, err;
-
-	dir = malloc(strlen(uml_dir) + UMID_LEN + 1);
-	if (!dir)
-		return;
+	char dir[strlen(uml_dir) + UMID_LEN + 1], err;
 
 	sprintf(dir, "%s%s", uml_dir, umid);
 	err = remove_files_and_dir(dir);
 	if (err)
 		os_warn("%s - remove_files_and_dir failed with err = %d\n",
 			__func__, err);
-
-	free(dir);
 }
 
 __uml_exitcall(remove_umid_dir);
diff --git a/arch/unicore32/mm/fault.c b/arch/unicore32/mm/fault.c
index 76342de..a9bd08f 100644
--- a/arch/unicore32/mm/fault.c
+++ b/arch/unicore32/mm/fault.c
@@ -202,7 +202,7 @@ static int do_pf(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
 	struct mm_struct *mm;
 	int sig, code;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	tsk = current;
 	mm = tsk->mm;
@@ -250,7 +250,7 @@ static int do_pf(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
 	 * signal first. We do not need to release the mmap_sem because
 	 * it would already be released in __lock_page_or_retry in
 	 * mm/filemap.c. */
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return 0;
 
 	if (!(fault & VM_FAULT_ERROR) && (flags & FAULT_FLAG_ALLOW_RETRY)) {
@@ -259,9 +259,7 @@ static int do_pf(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
 		else
 			tsk->min_flt++;
 		if (fault & VM_FAULT_RETRY) {
-			/* Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk
-			* of starvation. */
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
+			flags |= FAULT_FLAG_TRIED;
 			goto retry;
 		}
 	}
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 8ef8513..c34e919 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -90,6 +90,8 @@
 	select ARCH_SUPPORTS_ACPI
 	select ARCH_SUPPORTS_ATOMIC_RMW
 	select ARCH_SUPPORTS_NUMA_BALANCING	if X86_64
+	select ARCH_SUPPORTS_LTO_CLANG		if X86_64
+	select ARCH_SUPPORTS_THINLTO		if X86_64
 	select ARCH_USE_BUILTIN_BSWAP
 	select ARCH_USE_QUEUED_RWLOCKS
 	select ARCH_USE_QUEUED_SPINLOCKS
@@ -135,11 +137,12 @@
 	select HAVE_ARCH_JUMP_LABEL
 	select HAVE_ARCH_JUMP_LABEL_RELATIVE
 	select HAVE_ARCH_KASAN			if X86_64
+	select HAVE_ARCH_KFENCE
 	select HAVE_ARCH_KGDB
 	select HAVE_ARCH_MMAP_RND_BITS		if MMU
 	select HAVE_ARCH_MMAP_RND_COMPAT_BITS	if MMU && COMPAT
 	select HAVE_ARCH_COMPAT_MMAP_BASES	if MMU && COMPAT
-	select HAVE_ARCH_PREL32_RELOCATIONS
+	select HAVE_ARCH_PREL32_RELOCATIONS	if !LTO_CLANG
 	select HAVE_ARCH_SECCOMP_FILTER
 	select HAVE_ARCH_THREAD_STRUCT_WHITELIST
 	select HAVE_ARCH_STACKLEAK
@@ -189,6 +192,7 @@
 	select HAVE_MIXED_BREAKPOINTS_REGS
 	select HAVE_MOD_ARCH_SPECIFIC
 	select HAVE_MOVE_PMD
+	select HAVE_MOVE_PUD
 	select HAVE_NMI
 	select HAVE_OPROFILE
 	select HAVE_OPTPROBES
@@ -204,7 +208,7 @@
 	select HAVE_RELIABLE_STACKTRACE		if X86_64 && (UNWINDER_FRAME_POINTER || UNWINDER_ORC) && STACK_VALIDATION
 	select HAVE_FUNCTION_ARG_ACCESS_API
 	select HAVE_STACKPROTECTOR		if CC_HAS_SANE_STACKPROTECTOR
-	select HAVE_STACK_VALIDATION		if X86_64
+	select HAVE_STACK_VALIDATION		if X86_64 && !LTO_CLANG
 	select HAVE_RSEQ
 	select HAVE_SYSCALL_TRACEPOINTS
 	select HAVE_UNSTABLE_SCHED_CLOCK
diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug
index bf9cd83..49b2dc2 100644
--- a/arch/x86/Kconfig.debug
+++ b/arch/x86/Kconfig.debug
@@ -291,7 +291,7 @@
 
 config UNWINDER_ORC
 	bool "ORC unwinder"
-	depends on X86_64
+	depends on X86_64 && !LTO_CLANG
 	select STACK_VALIDATION
 	---help---
 	  This option enables the ORC (Oops Rewind Capability) unwinder for
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index 8ca3cf7..81977d2 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -197,9 +197,10 @@
 avx512_instr :=$(call as-instr,vpmovm2b %k1$(comma)%zmm5,-DCONFIG_AS_AVX512=1)
 sha1_ni_instr :=$(call as-instr,sha1msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA1_NI=1)
 sha256_ni_instr :=$(call as-instr,sha256msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA256_NI=1)
+adx_instr := $(call as-instr,adox %r10$(comma)%r10,-DCONFIG_AS_ADX=1)
 
-KBUILD_AFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr)
-KBUILD_CFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr)
+KBUILD_AFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr)
+KBUILD_CFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr)
 
 KBUILD_LDFLAGS := -m elf_$(UTS_MACHINE)
 
@@ -212,6 +213,11 @@
 KBUILD_LDFLAGS += $(call ld-option, -z max-page-size=0x200000)
 endif
 
+ifdef CONFIG_LTO_CLANG
+KBUILD_LDFLAGS	+= -plugin-opt=-code-model=kernel \
+		   -plugin-opt=-stack-alignment=$(if $(CONFIG_X86_32),4,8)
+endif
+
 # Workaround for a gcc prelease that unfortunately was shipped in a suse release
 KBUILD_CFLAGS += -Wno-sign-compare
 #
diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
index 292b5bc..aef6604 100644
--- a/arch/x86/boot/compressed/Makefile
+++ b/arch/x86/boot/compressed/Makefile
@@ -57,6 +57,9 @@
 KBUILD_LDFLAGS += $(shell $(LD) --help 2>&1 | grep -q "\-z noreloc-overflow" \
 	&& echo "-z noreloc-overflow -pie --no-dynamic-linker")
 endif
+ifeq ($(CONFIG_RELOCATABLE), y)
+KBUILD_LDFLAGS += -z notext
+endif
 LDFLAGS_vmlinux := -T
 
 hostprogs-y	:= mkpiggy
diff --git a/arch/x86/configs/gki_defconfig b/arch/x86/configs/gki_defconfig
new file mode 100644
index 0000000..d62b6cf
--- /dev/null
+++ b/arch/x86/configs/gki_defconfig
@@ -0,0 +1,542 @@
+CONFIG_UAPI_HEADER_TEST=y
+CONFIG_KERNEL_LZ4=y
+# CONFIG_USELIB is not set
+CONFIG_AUDIT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_PREEMPT=y
+CONFIG_IRQ_TIME_ACCOUNTING=y
+CONFIG_TASK_XACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+CONFIG_PSI=y
+CONFIG_RCU_EXPERT=y
+CONFIG_RCU_FAST_NO_HZ=y
+CONFIG_RCU_NOCB_CPU=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_IKHEADERS=y
+CONFIG_UCLAMP_TASK=y
+CONFIG_CGROUPS=y
+CONFIG_MEMCG=y
+CONFIG_BLK_CGROUP=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_UCLAMP_TASK_GROUP=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CPUSETS=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_CGROUP_BPF=y
+CONFIG_NAMESPACES=y
+# CONFIG_PID_NS is not set
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+# CONFIG_RD_XZ is not set
+# CONFIG_RD_LZO is not set
+CONFIG_BOOT_CONFIG=y
+# CONFIG_SYSFS_SYSCALL is not set
+# CONFIG_FHANDLE is not set
+CONFIG_KALLSYMS_ALL=y
+CONFIG_BPF_SYSCALL=y
+CONFIG_BPF_JIT_ALWAYS_ON=y
+# CONFIG_RSEQ is not set
+CONFIG_EMBEDDED=y
+# CONFIG_COMPAT_BRK is not set
+# CONFIG_SLAB_MERGE_DEFAULT is not set
+CONFIG_SLAB_FREELIST_RANDOM=y
+CONFIG_SLAB_FREELIST_HARDENED=y
+CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
+CONFIG_PROFILING=y
+CONFIG_SMP=y
+CONFIG_X86_X2APIC=y
+CONFIG_HYPERVISOR_GUEST=y
+CONFIG_PARAVIRT=y
+CONFIG_NR_CPUS=32
+CONFIG_EFI=y
+CONFIG_PM_WAKELOCKS=y
+CONFIG_PM_WAKELOCKS_LIMIT=0
+# CONFIG_PM_WAKELOCKS_GC is not set
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_TIMES=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_IA32_EMULATION=y
+CONFIG_KVM=y
+CONFIG_KVM_INTEL=y
+CONFIG_KVM_AMD=y
+CONFIG_VHOST_VSOCK=y
+CONFIG_KPROBES=y
+CONFIG_JUMP_LABEL=y
+CONFIG_LTO_CLANG=y
+CONFIG_CFI_CLANG=y
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+CONFIG_BLK_INLINE_ENCRYPTION=y
+CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
+CONFIG_GKI_HACKS_TO_FIX=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_BINFMT_MISC=y
+CONFIG_CLEANCACHE=y
+CONFIG_CMA=y
+CONFIG_CMA_AREAS=16
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_XFRM_USER=y
+CONFIG_XFRM_INTERFACE=y
+CONFIG_XFRM_MIGRATE=y
+CONFIG_XFRM_STATISTICS=y
+CONFIG_NET_KEY=y
+CONFIG_XDP_SOCKETS=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_NET_IPIP=y
+CONFIG_NET_IPGRE_DEMUX=y
+CONFIG_NET_IPGRE=y
+CONFIG_NET_IPVTI=y
+CONFIG_INET_ESP=y
+CONFIG_INET_UDP_DIAG=y
+CONFIG_INET_DIAG_DESTROY=y
+CONFIG_IPV6_ROUTER_PREF=y
+CONFIG_IPV6_ROUTE_INFO=y
+CONFIG_IPV6_OPTIMISTIC_DAD=y
+CONFIG_INET6_ESP=y
+CONFIG_INET6_IPCOMP=y
+CONFIG_IPV6_MIP6=y
+CONFIG_IPV6_VTI=y
+CONFIG_IPV6_GRE=y
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_NETFILTER=y
+CONFIG_NF_CONNTRACK=y
+CONFIG_NF_CONNTRACK_SECMARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CONNTRACK_AMANDA=y
+CONFIG_NF_CONNTRACK_FTP=y
+CONFIG_NF_CONNTRACK_H323=y
+CONFIG_NF_CONNTRACK_IRC=y
+CONFIG_NF_CONNTRACK_NETBIOS_NS=y
+CONFIG_NF_CONNTRACK_PPTP=y
+CONFIG_NF_CONNTRACK_SANE=y
+CONFIG_NF_CONNTRACK_TFTP=y
+CONFIG_NF_CT_NETLINK=y
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
+CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y
+CONFIG_NETFILTER_XT_TARGET_CT=y
+CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y
+CONFIG_NETFILTER_XT_TARGET_MARK=y
+CONFIG_NETFILTER_XT_TARGET_NFLOG=y
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
+CONFIG_NETFILTER_XT_TARGET_TPROXY=y
+CONFIG_NETFILTER_XT_TARGET_TRACE=y
+CONFIG_NETFILTER_XT_TARGET_SECMARK=y
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
+CONFIG_NETFILTER_XT_MATCH_BPF=y
+CONFIG_NETFILTER_XT_MATCH_COMMENT=y
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y
+CONFIG_NETFILTER_XT_MATCH_HELPER=y
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
+CONFIG_NETFILTER_XT_MATCH_LENGTH=y
+CONFIG_NETFILTER_XT_MATCH_LIMIT=y
+CONFIG_NETFILTER_XT_MATCH_MAC=y
+CONFIG_NETFILTER_XT_MATCH_MARK=y
+CONFIG_NETFILTER_XT_MATCH_OWNER=y
+CONFIG_NETFILTER_XT_MATCH_POLICY=y
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
+CONFIG_NETFILTER_XT_MATCH_QUOTA=y
+CONFIG_NETFILTER_XT_MATCH_QUOTA2=y
+CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG=y
+CONFIG_NETFILTER_XT_MATCH_SOCKET=y
+CONFIG_NETFILTER_XT_MATCH_STATE=y
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
+CONFIG_NETFILTER_XT_MATCH_STRING=y
+CONFIG_NETFILTER_XT_MATCH_TIME=y
+CONFIG_NETFILTER_XT_MATCH_U32=y
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_MATCH_ECN=y
+CONFIG_IP_NF_MATCH_TTL=y
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_NAT=y
+CONFIG_IP_NF_TARGET_MASQUERADE=y
+CONFIG_IP_NF_TARGET_NETMAP=y
+CONFIG_IP_NF_TARGET_REDIRECT=y
+CONFIG_IP_NF_MANGLE=y
+CONFIG_IP_NF_RAW=y
+CONFIG_IP_NF_SECURITY=y
+CONFIG_IP_NF_ARPTABLES=y
+CONFIG_IP_NF_ARPFILTER=y
+CONFIG_IP_NF_ARP_MANGLE=y
+CONFIG_IP6_NF_IPTABLES=y
+CONFIG_IP6_NF_MATCH_RPFILTER=y
+CONFIG_IP6_NF_FILTER=y
+CONFIG_IP6_NF_TARGET_REJECT=y
+CONFIG_IP6_NF_MANGLE=y
+CONFIG_IP6_NF_RAW=y
+CONFIG_TIPC=y
+CONFIG_L2TP=y
+CONFIG_BRIDGE=y
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_HTB=y
+CONFIG_NET_SCH_INGRESS=y
+CONFIG_NET_CLS_U32=y
+CONFIG_NET_CLS_BPF=y
+CONFIG_NET_EMATCH=y
+CONFIG_NET_EMATCH_U32=y
+CONFIG_NET_CLS_ACT=y
+CONFIG_VSOCKETS=y
+CONFIG_BPF_JIT=y
+CONFIG_BT=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_HIDP=y
+CONFIG_BT_HCIBTSDIO=y
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_HCIUART_QCA=y
+CONFIG_CFG80211=y
+# CONFIG_CFG80211_DEFAULT_PS is not set
+# CONFIG_CFG80211_CRDA_SUPPORT is not set
+CONFIG_MAC80211=y
+CONFIG_RFKILL=y
+CONFIG_PCI=y
+CONFIG_PCIEPORTBUS=y
+# CONFIG_PCIEAER is not set
+CONFIG_PCI_MSI=y
+CONFIG_PCIE_DW_PLAT_EP=y
+CONFIG_PCI_ENDPOINT=y
+CONFIG_FW_LOADER_USER_HELPER=y
+CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
+# CONFIG_FW_CACHE is not set
+# CONFIG_ALLOW_DEV_COREDUMP is not set
+CONFIG_GNSS=y
+CONFIG_OF=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_LOOP_MIN_COUNT=16
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_UID_SYS_STATS=y
+CONFIG_SCSI=y
+# CONFIG_SCSI_PROC_FS is not set
+CONFIG_BLK_DEV_SD=y
+CONFIG_SCSI_UFSHCD=y
+CONFIG_SCSI_UFSHCD_PCI=y
+CONFIG_SCSI_UFSHCD_PLATFORM=y
+CONFIG_SCSI_UFS_DWC_TC_PLATFORM=y
+CONFIG_SCSI_UFS_BSG=y
+CONFIG_SCSI_UFS_CRYPTO=y
+CONFIG_MD=y
+CONFIG_BLK_DEV_DM=y
+CONFIG_DM_CRYPT=y
+CONFIG_DM_DEFAULT_KEY=y
+CONFIG_DM_SNAPSHOT=y
+CONFIG_DM_UEVENT=y
+CONFIG_DM_VERITY=y
+CONFIG_DM_VERITY_AVB=y
+CONFIG_DM_VERITY_FEC=y
+CONFIG_DM_BOW=y
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+CONFIG_WIREGUARD=y
+CONFIG_TUN=y
+CONFIG_VETH=y
+# CONFIG_ETHERNET is not set
+CONFIG_PHYLIB=y
+CONFIG_PPP=y
+CONFIG_PPP_BSDCOMP=y
+CONFIG_PPP_DEFLATE=y
+CONFIG_PPP_MPPE=y
+CONFIG_PPTP=y
+CONFIG_PPPOL2TP=y
+CONFIG_USB_RTL8152=y
+CONFIG_USB_USBNET=y
+# CONFIG_USB_NET_AX8817X is not set
+# CONFIG_USB_NET_AX88179_178A is not set
+# CONFIG_USB_NET_CDCETHER is not set
+# CONFIG_USB_NET_CDC_NCM is not set
+# CONFIG_USB_NET_NET1080 is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+# CONFIG_USB_NET_ZAURUS is not set
+# CONFIG_WLAN_VENDOR_ADMTEK is not set
+# CONFIG_WLAN_VENDOR_ATH is not set
+# CONFIG_WLAN_VENDOR_ATMEL is not set
+# CONFIG_WLAN_VENDOR_BROADCOM is not set
+# CONFIG_WLAN_VENDOR_CISCO is not set
+# CONFIG_WLAN_VENDOR_INTEL is not set
+# CONFIG_WLAN_VENDOR_INTERSIL is not set
+# CONFIG_WLAN_VENDOR_MARVELL is not set
+# CONFIG_WLAN_VENDOR_MEDIATEK is not set
+# CONFIG_WLAN_VENDOR_RALINK is not set
+# CONFIG_WLAN_VENDOR_REALTEK is not set
+# CONFIG_WLAN_VENDOR_RSI is not set
+# CONFIG_WLAN_VENDOR_ST is not set
+# CONFIG_WLAN_VENDOR_TI is not set
+# CONFIG_WLAN_VENDOR_ZYDAS is not set
+# CONFIG_WLAN_VENDOR_QUANTENNA is not set
+CONFIG_INPUT_EVDEV=y
+CONFIG_KEYBOARD_GPIO=y
+# CONFIG_INPUT_MOUSE is not set
+CONFIG_INPUT_JOYSTICK=y
+CONFIG_JOYSTICK_XPAD=y
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=y
+# CONFIG_VT is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_DEVMEM is not set
+CONFIG_SERIAL_8250=y
+# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_OF_PLATFORM=y
+CONFIG_SERIAL_DEV_BUS=y
+CONFIG_HW_RANDOM=y
+CONFIG_HPET=y
+# CONFIG_DEVPORT is not set
+# CONFIG_I2C_COMPAT is not set
+# CONFIG_I2C_HELPER_AUTO is not set
+CONFIG_SPI=y
+CONFIG_GPIOLIB=y
+# CONFIG_HWMON is not set
+CONFIG_THERMAL_STATISTICS=y
+CONFIG_THERMAL_WRITABLE_TRIPS=y
+CONFIG_THERMAL_GOV_USER_SPACE=y
+CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
+CONFIG_CPU_THERMAL=y
+CONFIG_DEVFREQ_THERMAL=y
+CONFIG_THERMAL_EMULATION=y
+# CONFIG_X86_PKG_TEMP_THERMAL is not set
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_CORE=y
+CONFIG_MFD_SYSCON=y
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_RC_CORE=y
+# CONFIG_RC_MAP is not set
+CONFIG_LIRC=y
+CONFIG_BPF_LIRC_MODE2=y
+CONFIG_RC_DECODERS=y
+CONFIG_RC_DEVICES=y
+CONFIG_MEDIA_CAMERA_SUPPORT=y
+CONFIG_MEDIA_CEC_SUPPORT=y
+CONFIG_MEDIA_CEC_RC=y
+CONFIG_MEDIA_USB_SUPPORT=y
+CONFIG_USB_VIDEO_CLASS=y
+CONFIG_USB_GSPCA=y
+CONFIG_V4L_PLATFORM_DRIVERS=y
+CONFIG_V4L_MEM2MEM_DRIVERS=y
+CONFIG_CEC_PLATFORM_DRIVERS=y
+# CONFIG_VIDEO_IR_I2C is not set
+CONFIG_DRM=y
+# CONFIG_DRM_FBDEV_EMULATION is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_SOUND=y
+CONFIG_SND=y
+CONFIG_SND_HRTIMER=y
+CONFIG_SND_DYNAMIC_MINORS=y
+# CONFIG_SND_SUPPORT_OLD_API is not set
+# CONFIG_SND_VERBOSE_PROCFS is not set
+# CONFIG_SND_DRIVERS is not set
+CONFIG_SND_USB_AUDIO=y
+CONFIG_SND_SOC=y
+CONFIG_HID_BATTERY_STRENGTH=y
+CONFIG_HIDRAW=y
+CONFIG_UHID=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_PRODIKEYS=y
+CONFIG_HID_ELECOM=y
+CONFIG_HID_UCLOGIC=y
+CONFIG_HID_LOGITECH=y
+CONFIG_HID_LOGITECH_DJ=y
+CONFIG_HID_MAGICMOUSE=y
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MULTITOUCH=y
+CONFIG_HID_NINTENDO=y
+CONFIG_HID_PICOLCD=y
+CONFIG_HID_PLANTRONICS=y
+CONFIG_HID_ROCCAT=y
+CONFIG_HID_SONY=y
+CONFIG_SONY_FF=y
+CONFIG_HID_STEAM=y
+CONFIG_HID_WACOM=y
+CONFIG_HID_WIIMOTE=y
+CONFIG_USB_HIDDEV=y
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_HCD_PLATFORM=y
+CONFIG_USB_ACM=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_UAS=y
+CONFIG_USB_DWC3=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_DUMMY_HCD=y
+CONFIG_USB_CONFIGFS=y
+CONFIG_USB_CONFIGFS_UEVENT=y
+CONFIG_USB_CONFIGFS_SERIAL=y
+CONFIG_USB_CONFIGFS_ACM=y
+CONFIG_USB_CONFIGFS_NCM=y
+CONFIG_USB_CONFIGFS_RNDIS=y
+CONFIG_USB_CONFIGFS_MASS_STORAGE=y
+CONFIG_USB_CONFIGFS_F_FS=y
+CONFIG_USB_CONFIGFS_F_ACC=y
+CONFIG_USB_CONFIGFS_F_AUDIO_SRC=y
+CONFIG_USB_CONFIGFS_F_MIDI=y
+CONFIG_USB_CONFIGFS_F_HID=y
+CONFIG_TYPEC=y
+CONFIG_TYPEC_TCPM=y
+CONFIG_TYPEC_UCSI=y
+CONFIG_MMC=y
+# CONFIG_PWRSEQ_EMMC is not set
+# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_MMC_CRYPTO=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_LEDS_CLASS_FLASH=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_RTC_CLASS=y
+CONFIG_DMABUF_HEAPS=y
+CONFIG_DMABUF_SYSFS_STATS=y
+CONFIG_UIO=y
+CONFIG_STAGING=y
+CONFIG_ASHMEM=y
+CONFIG_ION=y
+CONFIG_ION_SYSTEM_HEAP=y
+CONFIG_REMOTEPROC=y
+CONFIG_RPMSG_CHAR=y
+CONFIG_PM_DEVFREQ_EVENT=y
+CONFIG_IIO=y
+CONFIG_IIO_BUFFER=y
+CONFIG_IIO_TRIGGER=y
+CONFIG_RAS=y
+CONFIG_ANDROID=y
+CONFIG_ANDROID_BINDER_IPC=y
+CONFIG_ANDROID_BINDERFS=y
+CONFIG_ANDROID_VENDOR_HOOKS=y
+CONFIG_LIBNVDIMM=y
+# CONFIG_ND_BLK is not set
+CONFIG_INTERCONNECT=y
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_F2FS_FS=y
+CONFIG_F2FS_FS_SECURITY=y
+CONFIG_F2FS_FS_COMPRESSION=y
+CONFIG_FS_ENCRYPTION=y
+CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
+CONFIG_FS_VERITY=y
+CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y
+# CONFIG_DNOTIFY is not set
+CONFIG_QUOTA=y
+CONFIG_QFMT_V2=y
+CONFIG_FUSE_FS=y
+CONFIG_VIRTIO_FS=y
+CONFIG_OVERLAY_FS=y
+CONFIG_INCREMENTAL_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+# CONFIG_EFIVAR_FS is not set
+CONFIG_PSTORE=y
+CONFIG_PSTORE_CONSOLE=y
+CONFIG_PSTORE_PMSG=y
+CONFIG_PSTORE_RAM=y
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=y
+CONFIG_NLS_CODEPAGE_775=y
+CONFIG_NLS_CODEPAGE_850=y
+CONFIG_NLS_CODEPAGE_852=y
+CONFIG_NLS_CODEPAGE_855=y
+CONFIG_NLS_CODEPAGE_857=y
+CONFIG_NLS_CODEPAGE_860=y
+CONFIG_NLS_CODEPAGE_861=y
+CONFIG_NLS_CODEPAGE_862=y
+CONFIG_NLS_CODEPAGE_863=y
+CONFIG_NLS_CODEPAGE_864=y
+CONFIG_NLS_CODEPAGE_865=y
+CONFIG_NLS_CODEPAGE_866=y
+CONFIG_NLS_CODEPAGE_869=y
+CONFIG_NLS_CODEPAGE_936=y
+CONFIG_NLS_CODEPAGE_950=y
+CONFIG_NLS_CODEPAGE_932=y
+CONFIG_NLS_CODEPAGE_949=y
+CONFIG_NLS_CODEPAGE_874=y
+CONFIG_NLS_ISO8859_8=y
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=y
+CONFIG_NLS_ISO8859_3=y
+CONFIG_NLS_ISO8859_4=y
+CONFIG_NLS_ISO8859_5=y
+CONFIG_NLS_ISO8859_6=y
+CONFIG_NLS_ISO8859_7=y
+CONFIG_NLS_ISO8859_9=y
+CONFIG_NLS_ISO8859_13=y
+CONFIG_NLS_ISO8859_14=y
+CONFIG_NLS_ISO8859_15=y
+CONFIG_NLS_KOI8_R=y
+CONFIG_NLS_KOI8_U=y
+CONFIG_NLS_MAC_ROMAN=y
+CONFIG_NLS_MAC_CELTIC=y
+CONFIG_NLS_MAC_CENTEURO=y
+CONFIG_NLS_MAC_CROATIAN=y
+CONFIG_NLS_MAC_CYRILLIC=y
+CONFIG_NLS_MAC_GAELIC=y
+CONFIG_NLS_MAC_GREEK=y
+CONFIG_NLS_MAC_ICELAND=y
+CONFIG_NLS_MAC_INUIT=y
+CONFIG_NLS_MAC_ROMANIAN=y
+CONFIG_NLS_MAC_TURKISH=y
+CONFIG_NLS_UTF8=y
+CONFIG_UNICODE=y
+CONFIG_SECURITY=y
+CONFIG_SECURITYFS=y
+CONFIG_SECURITY_NETWORK=y
+CONFIG_HARDENED_USERCOPY=y
+# CONFIG_HARDENED_USERCOPY_FALLBACK is not set
+CONFIG_FORTIFY_SOURCE=y
+CONFIG_STATIC_USERMODEHELPER=y
+CONFIG_STATIC_USERMODEHELPER_PATH=""
+CONFIG_SECURITY_SELINUX=y
+CONFIG_INIT_STACK_ALL_ZERO=y
+CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
+CONFIG_CRYPTO_CHACHA20POLY1305=y
+CONFIG_CRYPTO_ADIANTUM=y
+CONFIG_CRYPTO_XCBC=y
+CONFIG_CRYPTO_BLAKE2B=y
+CONFIG_CRYPTO_SHA256_SSSE3=y
+CONFIG_CRYPTO_AES_NI_INTEL=y
+CONFIG_CRYPTO_LZ4=y
+CONFIG_CRYPTO_ANSI_CPRNG=y
+CONFIG_CRC8=y
+CONFIG_XZ_DEC=y
+CONFIG_DMA_CMA=y
+CONFIG_PRINTK_TIME=y
+CONFIG_DYNAMIC_DEBUG_CORE=y
+CONFIG_DEBUG_INFO=y
+CONFIG_DEBUG_INFO_DWARF4=y
+# CONFIG_ENABLE_MUST_CHECK is not set
+CONFIG_DEBUG_FS=y
+CONFIG_HEADERS_INSTALL=y
+# CONFIG_SECTION_MISMATCH_WARN_ONLY is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_STACK_USAGE=y
+CONFIG_DEBUG_MEMORY_INIT=y
+CONFIG_KFENCE=y
+CONFIG_KFENCE_SAMPLE_INTERVAL=0
+CONFIG_SOFTLOCKUP_DETECTOR=y
+# CONFIG_DETECT_HUNG_TASK is not set
+CONFIG_PANIC_ON_OOPS=y
+CONFIG_PANIC_TIMEOUT=5
+CONFIG_SCHEDSTATS=y
+CONFIG_KUNIT=y
+CONFIG_KUNIT_DEBUGFS=y
+CONFIG_BUG_ON_DATA_CORRUPTION=y
diff --git a/arch/x86/crypto/.gitignore b/arch/x86/crypto/.gitignore
new file mode 100644
index 0000000..30be040
--- /dev/null
+++ b/arch/x86/crypto/.gitignore
@@ -0,0 +1 @@
+poly1305-x86_64-cryptogams.S
diff --git a/arch/x86/crypto/Makefile b/arch/x86/crypto/Makefile
index 759b1a9..8c2e9ea 100644
--- a/arch/x86/crypto/Makefile
+++ b/arch/x86/crypto/Makefile
@@ -11,6 +11,7 @@
 avx512_supported :=$(call as-instr,vpmovm2b %k1$(comma)%zmm5,yes,no)
 sha1_ni_supported :=$(call as-instr,sha1msg1 %xmm0$(comma)%xmm1,yes,no)
 sha256_ni_supported :=$(call as-instr,sha256msg1 %xmm0$(comma)%xmm1,yes,no)
+adx_supported := $(call as-instr,adox %r10$(comma)%r10,yes,no)
 
 obj-$(CONFIG_CRYPTO_GLUE_HELPER_X86) += glue_helper.o
 
@@ -40,6 +41,11 @@
 obj-$(CONFIG_CRYPTO_NHPOLY1305_SSE2) += nhpoly1305-sse2.o
 obj-$(CONFIG_CRYPTO_NHPOLY1305_AVX2) += nhpoly1305-avx2.o
 
+# These modules require the assembler to support ADX.
+ifeq ($(adx_supported),yes)
+	obj-$(CONFIG_CRYPTO_CURVE25519_X86) += curve25519-x86_64.o
+endif
+
 # These modules require assembler to support AVX.
 ifeq ($(avx_supported),yes)
 	obj-$(CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64) += \
@@ -48,6 +54,7 @@
 	obj-$(CONFIG_CRYPTO_CAST6_AVX_X86_64) += cast6-avx-x86_64.o
 	obj-$(CONFIG_CRYPTO_TWOFISH_AVX_X86_64) += twofish-avx-x86_64.o
 	obj-$(CONFIG_CRYPTO_SERPENT_AVX_X86_64) += serpent-avx-x86_64.o
+	obj-$(CONFIG_CRYPTO_BLAKE2S_X86) += blake2s-x86_64.o
 endif
 
 # These modules require assembler to support AVX2.
@@ -70,6 +77,11 @@
 aegis128-aesni-y := aegis128-aesni-asm.o aegis128-aesni-glue.o
 
 nhpoly1305-sse2-y := nh-sse2-x86_64.o nhpoly1305-sse2-glue.o
+blake2s-x86_64-y := blake2s-core.o blake2s-glue.o
+poly1305-x86_64-y := poly1305-x86_64-cryptogams.o poly1305_glue.o
+ifneq ($(CONFIG_CRYPTO_POLY1305_X86_64),)
+targets += poly1305-x86_64-cryptogams.S
+endif
 
 ifeq ($(avx_supported),yes)
 	camellia-aesni-avx-x86_64-y := camellia-aesni-avx-asm_64.o \
@@ -98,10 +110,8 @@
 aesni-intel-$(CONFIG_64BIT) += aesni-intel_avx-x86_64.o aes_ctrby8_avx-x86_64.o
 ghash-clmulni-intel-y := ghash-clmulni-intel_asm.o ghash-clmulni-intel_glue.o
 sha1-ssse3-y := sha1_ssse3_asm.o sha1_ssse3_glue.o
-poly1305-x86_64-y := poly1305-sse2-x86_64.o poly1305_glue.o
 ifeq ($(avx2_supported),yes)
 sha1-ssse3-y += sha1_avx2_x86_64_asm.o
-poly1305-x86_64-y += poly1305-avx2-x86_64.o
 endif
 ifeq ($(sha1_ni_supported),yes)
 sha1-ssse3-y += sha1_ni_asm.o
@@ -115,3 +125,8 @@
 endif
 sha512-ssse3-y := sha512-ssse3-asm.o sha512-avx-asm.o sha512-avx2-asm.o sha512_ssse3_glue.o
 crct10dif-pclmul-y := crct10dif-pcl-asm_64.o crct10dif-pclmul_glue.o
+
+quiet_cmd_perlasm = PERLASM $@
+      cmd_perlasm = $(PERL) $< > $@
+$(obj)/%.S: $(src)/%.pl FORCE
+	$(call if_changed,perlasm)
diff --git a/arch/x86/crypto/aesni-intel_asm.S b/arch/x86/crypto/aesni-intel_asm.S
index 9afeb58..5aa0831 100644
--- a/arch/x86/crypto/aesni-intel_asm.S
+++ b/arch/x86/crypto/aesni-intel_asm.S
@@ -1946,7 +1946,7 @@
 ENDPROC(aesni_set_key)
 
 /*
- * void aesni_enc(struct crypto_aes_ctx *ctx, u8 *dst, const u8 *src)
+ * void aesni_enc(const void *ctx, u8 *dst, const u8 *src)
  */
 ENTRY(aesni_enc)
 	FRAME_BEGIN
@@ -2137,7 +2137,7 @@
 ENDPROC(_aesni_enc4)
 
 /*
- * void aesni_dec (struct crypto_aes_ctx *ctx, u8 *dst, const u8 *src)
+ * void aesni_dec (const void *ctx, u8 *dst, const u8 *src)
  */
 ENTRY(aesni_dec)
 	FRAME_BEGIN
@@ -2726,8 +2726,8 @@
 	pxor CTR, IV;
 
 /*
- * void aesni_xts_crypt8(struct crypto_aes_ctx *ctx, const u8 *dst, u8 *src,
- *			 bool enc, u8 *iv)
+ * void aesni_xts_crypt8(const struct crypto_aes_ctx *ctx, u8 *dst,
+ *			 const u8 *src, bool enc, le128 *iv)
  */
 ENTRY(aesni_xts_crypt8)
 	FRAME_BEGIN
diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c
index 3e707e8..670f8fc 100644
--- a/arch/x86/crypto/aesni-intel_glue.c
+++ b/arch/x86/crypto/aesni-intel_glue.c
@@ -83,10 +83,8 @@ struct gcm_context_data {
 
 asmlinkage int aesni_set_key(struct crypto_aes_ctx *ctx, const u8 *in_key,
 			     unsigned int key_len);
-asmlinkage void aesni_enc(struct crypto_aes_ctx *ctx, u8 *out,
-			  const u8 *in);
-asmlinkage void aesni_dec(struct crypto_aes_ctx *ctx, u8 *out,
-			  const u8 *in);
+asmlinkage void aesni_enc(const void *ctx, u8 *out, const u8 *in);
+asmlinkage void aesni_dec(const void *ctx, u8 *out, const u8 *in);
 asmlinkage void aesni_ecb_enc(struct crypto_aes_ctx *ctx, u8 *out,
 			      const u8 *in, unsigned int len);
 asmlinkage void aesni_ecb_dec(struct crypto_aes_ctx *ctx, u8 *out,
@@ -106,8 +104,8 @@ static void (*aesni_ctr_enc_tfm)(struct crypto_aes_ctx *ctx, u8 *out,
 asmlinkage void aesni_ctr_enc(struct crypto_aes_ctx *ctx, u8 *out,
 			      const u8 *in, unsigned int len, u8 *iv);
 
-asmlinkage void aesni_xts_crypt8(struct crypto_aes_ctx *ctx, u8 *out,
-				 const u8 *in, bool enc, u8 *iv);
+asmlinkage void aesni_xts_crypt8(const struct crypto_aes_ctx *ctx, u8 *out,
+				 const u8 *in, bool enc, le128 *iv);
 
 /* asmlinkage void aesni_gcm_enc()
  * void *ctx,  AES Key schedule. Starts on a 16 byte boundary.
@@ -550,29 +548,24 @@ static int xts_aesni_setkey(struct crypto_skcipher *tfm, const u8 *key,
 }
 
 
-static void aesni_xts_tweak(void *ctx, u8 *out, const u8 *in)
+static void aesni_xts_enc(const void *ctx, u8 *dst, const u8 *src, le128 *iv)
 {
-	aesni_enc(ctx, out, in);
+	glue_xts_crypt_128bit_one(ctx, dst, src, iv, aesni_enc);
 }
 
-static void aesni_xts_enc(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+static void aesni_xts_dec(const void *ctx, u8 *dst, const u8 *src, le128 *iv)
 {
-	glue_xts_crypt_128bit_one(ctx, dst, src, iv, GLUE_FUNC_CAST(aesni_enc));
+	glue_xts_crypt_128bit_one(ctx, dst, src, iv, aesni_dec);
 }
 
-static void aesni_xts_dec(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+static void aesni_xts_enc8(const void *ctx, u8 *dst, const u8 *src, le128 *iv)
 {
-	glue_xts_crypt_128bit_one(ctx, dst, src, iv, GLUE_FUNC_CAST(aesni_dec));
+	aesni_xts_crypt8(ctx, dst, src, true, iv);
 }
 
-static void aesni_xts_enc8(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+static void aesni_xts_dec8(const void *ctx, u8 *dst, const u8 *src, le128 *iv)
 {
-	aesni_xts_crypt8(ctx, (u8 *)dst, (const u8 *)src, true, (u8 *)iv);
-}
-
-static void aesni_xts_dec8(void *ctx, u128 *dst, const u128 *src, le128 *iv)
-{
-	aesni_xts_crypt8(ctx, (u8 *)dst, (const u8 *)src, false, (u8 *)iv);
+	aesni_xts_crypt8(ctx, dst, src, false, iv);
 }
 
 static const struct common_glue_ctx aesni_enc_xts = {
@@ -581,10 +574,10 @@ static const struct common_glue_ctx aesni_enc_xts = {
 
 	.funcs = { {
 		.num_blocks = 8,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(aesni_xts_enc8) }
+		.fn_u = { .xts = aesni_xts_enc8 }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(aesni_xts_enc) }
+		.fn_u = { .xts = aesni_xts_enc }
 	} }
 };
 
@@ -594,10 +587,10 @@ static const struct common_glue_ctx aesni_dec_xts = {
 
 	.funcs = { {
 		.num_blocks = 8,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(aesni_xts_dec8) }
+		.fn_u = { .xts = aesni_xts_dec8 }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(aesni_xts_dec) }
+		.fn_u = { .xts = aesni_xts_dec }
 	} }
 };
 
@@ -606,8 +599,7 @@ static int xts_encrypt(struct skcipher_request *req)
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct aesni_xts_ctx *ctx = crypto_skcipher_ctx(tfm);
 
-	return glue_xts_req_128bit(&aesni_enc_xts, req,
-				   XTS_TWEAK_CAST(aesni_xts_tweak),
+	return glue_xts_req_128bit(&aesni_enc_xts, req, aesni_enc,
 				   aes_ctx(ctx->raw_tweak_ctx),
 				   aes_ctx(ctx->raw_crypt_ctx),
 				   false);
@@ -618,8 +610,7 @@ static int xts_decrypt(struct skcipher_request *req)
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct aesni_xts_ctx *ctx = crypto_skcipher_ctx(tfm);
 
-	return glue_xts_req_128bit(&aesni_dec_xts, req,
-				   XTS_TWEAK_CAST(aesni_xts_tweak),
+	return glue_xts_req_128bit(&aesni_dec_xts, req, aesni_enc,
 				   aes_ctx(ctx->raw_tweak_ctx),
 				   aes_ctx(ctx->raw_crypt_ctx),
 				   true);
diff --git a/arch/x86/crypto/blake2s-core.S b/arch/x86/crypto/blake2s-core.S
new file mode 100644
index 0000000..8591938
--- /dev/null
+++ b/arch/x86/crypto/blake2s-core.S
@@ -0,0 +1,258 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ * Copyright (C) 2017-2019 Samuel Neves <sneves@dei.uc.pt>. All Rights Reserved.
+ */
+
+#include <linux/linkage.h>
+
+.section .rodata.cst32.BLAKE2S_IV, "aM", @progbits, 32
+.align 32
+IV:	.octa 0xA54FF53A3C6EF372BB67AE856A09E667
+	.octa 0x5BE0CD191F83D9AB9B05688C510E527F
+.section .rodata.cst16.ROT16, "aM", @progbits, 16
+.align 16
+ROT16:	.octa 0x0D0C0F0E09080B0A0504070601000302
+.section .rodata.cst16.ROR328, "aM", @progbits, 16
+.align 16
+ROR328:	.octa 0x0C0F0E0D080B0A090407060500030201
+.section .rodata.cst64.BLAKE2S_SIGMA, "aM", @progbits, 160
+.align 64
+SIGMA:
+.byte  0,  2,  4,  6,  1,  3,  5,  7, 14,  8, 10, 12, 15,  9, 11, 13
+.byte 14,  4,  9, 13, 10,  8, 15,  6,  5,  1,  0, 11,  3, 12,  2,  7
+.byte 11, 12,  5, 15,  8,  0,  2, 13,  9, 10,  3,  7,  4, 14,  6,  1
+.byte  7,  3, 13, 11,  9,  1, 12, 14, 15,  2,  5,  4,  8,  6, 10,  0
+.byte  9,  5,  2, 10,  0,  7,  4, 15,  3, 14, 11,  6, 13,  1, 12,  8
+.byte  2,  6,  0,  8, 12, 10, 11,  3,  1,  4,  7, 15,  9, 13,  5, 14
+.byte 12,  1, 14,  4,  5, 15, 13, 10,  8,  0,  6,  9, 11,  7,  3,  2
+.byte 13,  7, 12,  3, 11, 14,  1,  9,  2,  5, 15,  8, 10,  0,  4,  6
+.byte  6, 14, 11,  0, 15,  9,  3,  8, 10, 12, 13,  1,  5,  2,  7,  4
+.byte 10,  8,  7,  1,  2,  4,  6,  5, 13, 15,  9,  3,  0, 11, 14, 12
+#ifdef CONFIG_AS_AVX512
+.section .rodata.cst64.BLAKE2S_SIGMA2, "aM", @progbits, 640
+.align 64
+SIGMA2:
+.long  0,  2,  4,  6,  1,  3,  5,  7, 14,  8, 10, 12, 15,  9, 11, 13
+.long  8,  2, 13, 15, 10,  9, 12,  3,  6,  4,  0, 14,  5, 11,  1,  7
+.long 11, 13,  8,  6,  5, 10, 14,  3,  2,  4, 12, 15,  1,  0,  7,  9
+.long 11, 10,  7,  0,  8, 15,  1, 13,  3,  6,  2, 12,  4, 14,  9,  5
+.long  4, 10,  9, 14, 15,  0, 11,  8,  1,  7,  3, 13,  2,  5,  6, 12
+.long  2, 11,  4, 15, 14,  3, 10,  8, 13,  6,  5,  7,  0, 12,  1,  9
+.long  4,  8, 15,  9, 14, 11, 13,  5,  3,  2,  1, 12,  6, 10,  7,  0
+.long  6, 13,  0, 14, 12,  2,  1, 11, 15,  4,  5,  8,  7,  9,  3, 10
+.long 15,  5,  4, 13, 10,  7,  3, 11, 12,  2,  0,  6,  9,  8,  1, 14
+.long  8,  7, 14, 11, 13, 15,  0, 12, 10,  4,  5,  6,  3,  2,  1,  9
+#endif /* CONFIG_AS_AVX512 */
+
+.text
+#ifdef CONFIG_AS_SSSE3
+ENTRY(blake2s_compress_ssse3)
+	testq		%rdx,%rdx
+	je		.Lendofloop
+	movdqu		(%rdi),%xmm0
+	movdqu		0x10(%rdi),%xmm1
+	movdqa		ROT16(%rip),%xmm12
+	movdqa		ROR328(%rip),%xmm13
+	movdqu		0x20(%rdi),%xmm14
+	movq		%rcx,%xmm15
+	leaq		SIGMA+0xa0(%rip),%r8
+	jmp		.Lbeginofloop
+	.align		32
+.Lbeginofloop:
+	movdqa		%xmm0,%xmm10
+	movdqa		%xmm1,%xmm11
+	paddq		%xmm15,%xmm14
+	movdqa		IV(%rip),%xmm2
+	movdqa		%xmm14,%xmm3
+	pxor		IV+0x10(%rip),%xmm3
+	leaq		SIGMA(%rip),%rcx
+.Lroundloop:
+	movzbl		(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm4
+	movzbl		0x1(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm5
+	movzbl		0x2(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm6
+	movzbl		0x3(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm7
+	punpckldq	%xmm5,%xmm4
+	punpckldq	%xmm7,%xmm6
+	punpcklqdq	%xmm6,%xmm4
+	paddd		%xmm4,%xmm0
+	paddd		%xmm1,%xmm0
+	pxor		%xmm0,%xmm3
+	pshufb		%xmm12,%xmm3
+	paddd		%xmm3,%xmm2
+	pxor		%xmm2,%xmm1
+	movdqa		%xmm1,%xmm8
+	psrld		$0xc,%xmm1
+	pslld		$0x14,%xmm8
+	por		%xmm8,%xmm1
+	movzbl		0x4(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm5
+	movzbl		0x5(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm6
+	movzbl		0x6(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm7
+	movzbl		0x7(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm4
+	punpckldq	%xmm6,%xmm5
+	punpckldq	%xmm4,%xmm7
+	punpcklqdq	%xmm7,%xmm5
+	paddd		%xmm5,%xmm0
+	paddd		%xmm1,%xmm0
+	pxor		%xmm0,%xmm3
+	pshufb		%xmm13,%xmm3
+	paddd		%xmm3,%xmm2
+	pxor		%xmm2,%xmm1
+	movdqa		%xmm1,%xmm8
+	psrld		$0x7,%xmm1
+	pslld		$0x19,%xmm8
+	por		%xmm8,%xmm1
+	pshufd		$0x93,%xmm0,%xmm0
+	pshufd		$0x4e,%xmm3,%xmm3
+	pshufd		$0x39,%xmm2,%xmm2
+	movzbl		0x8(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm6
+	movzbl		0x9(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm7
+	movzbl		0xa(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm4
+	movzbl		0xb(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm5
+	punpckldq	%xmm7,%xmm6
+	punpckldq	%xmm5,%xmm4
+	punpcklqdq	%xmm4,%xmm6
+	paddd		%xmm6,%xmm0
+	paddd		%xmm1,%xmm0
+	pxor		%xmm0,%xmm3
+	pshufb		%xmm12,%xmm3
+	paddd		%xmm3,%xmm2
+	pxor		%xmm2,%xmm1
+	movdqa		%xmm1,%xmm8
+	psrld		$0xc,%xmm1
+	pslld		$0x14,%xmm8
+	por		%xmm8,%xmm1
+	movzbl		0xc(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm7
+	movzbl		0xd(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm4
+	movzbl		0xe(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm5
+	movzbl		0xf(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm6
+	punpckldq	%xmm4,%xmm7
+	punpckldq	%xmm6,%xmm5
+	punpcklqdq	%xmm5,%xmm7
+	paddd		%xmm7,%xmm0
+	paddd		%xmm1,%xmm0
+	pxor		%xmm0,%xmm3
+	pshufb		%xmm13,%xmm3
+	paddd		%xmm3,%xmm2
+	pxor		%xmm2,%xmm1
+	movdqa		%xmm1,%xmm8
+	psrld		$0x7,%xmm1
+	pslld		$0x19,%xmm8
+	por		%xmm8,%xmm1
+	pshufd		$0x39,%xmm0,%xmm0
+	pshufd		$0x4e,%xmm3,%xmm3
+	pshufd		$0x93,%xmm2,%xmm2
+	addq		$0x10,%rcx
+	cmpq		%r8,%rcx
+	jnz		.Lroundloop
+	pxor		%xmm2,%xmm0
+	pxor		%xmm3,%xmm1
+	pxor		%xmm10,%xmm0
+	pxor		%xmm11,%xmm1
+	addq		$0x40,%rsi
+	decq		%rdx
+	jnz		.Lbeginofloop
+	movdqu		%xmm0,(%rdi)
+	movdqu		%xmm1,0x10(%rdi)
+	movdqu		%xmm14,0x20(%rdi)
+.Lendofloop:
+	ret
+ENDPROC(blake2s_compress_ssse3)
+#endif /* CONFIG_AS_SSSE3 */
+
+#ifdef CONFIG_AS_AVX512
+ENTRY(blake2s_compress_avx512)
+	vmovdqu		(%rdi),%xmm0
+	vmovdqu		0x10(%rdi),%xmm1
+	vmovdqu		0x20(%rdi),%xmm4
+	vmovq		%rcx,%xmm5
+	vmovdqa		IV(%rip),%xmm14
+	vmovdqa		IV+16(%rip),%xmm15
+	jmp		.Lblake2s_compress_avx512_mainloop
+.align 32
+.Lblake2s_compress_avx512_mainloop:
+	vmovdqa		%xmm0,%xmm10
+	vmovdqa		%xmm1,%xmm11
+	vpaddq		%xmm5,%xmm4,%xmm4
+	vmovdqa		%xmm14,%xmm2
+	vpxor		%xmm15,%xmm4,%xmm3
+	vmovdqu		(%rsi),%ymm6
+	vmovdqu		0x20(%rsi),%ymm7
+	addq		$0x40,%rsi
+	leaq		SIGMA2(%rip),%rax
+	movb		$0xa,%cl
+.Lblake2s_compress_avx512_roundloop:
+	addq		$0x40,%rax
+	vmovdqa		-0x40(%rax),%ymm8
+	vmovdqa		-0x20(%rax),%ymm9
+	vpermi2d	%ymm7,%ymm6,%ymm8
+	vpermi2d	%ymm7,%ymm6,%ymm9
+	vmovdqa		%ymm8,%ymm6
+	vmovdqa		%ymm9,%ymm7
+	vpaddd		%xmm8,%xmm0,%xmm0
+	vpaddd		%xmm1,%xmm0,%xmm0
+	vpxor		%xmm0,%xmm3,%xmm3
+	vprord		$0x10,%xmm3,%xmm3
+	vpaddd		%xmm3,%xmm2,%xmm2
+	vpxor		%xmm2,%xmm1,%xmm1
+	vprord		$0xc,%xmm1,%xmm1
+	vextracti128	$0x1,%ymm8,%xmm8
+	vpaddd		%xmm8,%xmm0,%xmm0
+	vpaddd		%xmm1,%xmm0,%xmm0
+	vpxor		%xmm0,%xmm3,%xmm3
+	vprord		$0x8,%xmm3,%xmm3
+	vpaddd		%xmm3,%xmm2,%xmm2
+	vpxor		%xmm2,%xmm1,%xmm1
+	vprord		$0x7,%xmm1,%xmm1
+	vpshufd		$0x93,%xmm0,%xmm0
+	vpshufd		$0x4e,%xmm3,%xmm3
+	vpshufd		$0x39,%xmm2,%xmm2
+	vpaddd		%xmm9,%xmm0,%xmm0
+	vpaddd		%xmm1,%xmm0,%xmm0
+	vpxor		%xmm0,%xmm3,%xmm3
+	vprord		$0x10,%xmm3,%xmm3
+	vpaddd		%xmm3,%xmm2,%xmm2
+	vpxor		%xmm2,%xmm1,%xmm1
+	vprord		$0xc,%xmm1,%xmm1
+	vextracti128	$0x1,%ymm9,%xmm9
+	vpaddd		%xmm9,%xmm0,%xmm0
+	vpaddd		%xmm1,%xmm0,%xmm0
+	vpxor		%xmm0,%xmm3,%xmm3
+	vprord		$0x8,%xmm3,%xmm3
+	vpaddd		%xmm3,%xmm2,%xmm2
+	vpxor		%xmm2,%xmm1,%xmm1
+	vprord		$0x7,%xmm1,%xmm1
+	vpshufd		$0x39,%xmm0,%xmm0
+	vpshufd		$0x4e,%xmm3,%xmm3
+	vpshufd		$0x93,%xmm2,%xmm2
+	decb		%cl
+	jne		.Lblake2s_compress_avx512_roundloop
+	vpxor		%xmm10,%xmm0,%xmm0
+	vpxor		%xmm11,%xmm1,%xmm1
+	vpxor		%xmm2,%xmm0,%xmm0
+	vpxor		%xmm3,%xmm1,%xmm1
+	decq		%rdx
+	jne		.Lblake2s_compress_avx512_mainloop
+	vmovdqu		%xmm0,(%rdi)
+	vmovdqu		%xmm1,0x10(%rdi)
+	vmovdqu		%xmm4,0x20(%rdi)
+	vzeroupper
+	retq
+ENDPROC(blake2s_compress_avx512)
+#endif /* CONFIG_AS_AVX512 */
diff --git a/arch/x86/crypto/blake2s-glue.c b/arch/x86/crypto/blake2s-glue.c
new file mode 100644
index 0000000..8162d2c
--- /dev/null
+++ b/arch/x86/crypto/blake2s-glue.c
@@ -0,0 +1,133 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include <crypto/internal/blake2s.h>
+#include <crypto/internal/simd.h>
+#include <crypto/internal/hash.h>
+
+#include <linux/types.h>
+#include <linux/jump_label.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+
+#include <asm/cpufeature.h>
+#include <asm/fpu/api.h>
+#include <asm/processor.h>
+#include <asm/simd.h>
+
+asmlinkage void blake2s_compress_ssse3(struct blake2s_state *state,
+				       const u8 *block, const size_t nblocks,
+				       const u32 inc);
+asmlinkage void blake2s_compress_avx512(struct blake2s_state *state,
+					const u8 *block, const size_t nblocks,
+					const u32 inc);
+
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(blake2s_use_ssse3);
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(blake2s_use_avx512);
+
+void blake2s_compress_arch(struct blake2s_state *state,
+			   const u8 *block, size_t nblocks,
+			   const u32 inc)
+{
+	/* SIMD disables preemption, so relax after processing each page. */
+	BUILD_BUG_ON(SZ_4K / BLAKE2S_BLOCK_SIZE < 8);
+
+	if (!static_branch_likely(&blake2s_use_ssse3) || !crypto_simd_usable()) {
+		blake2s_compress_generic(state, block, nblocks, inc);
+		return;
+	}
+
+	do {
+		const size_t blocks = min_t(size_t, nblocks,
+					    SZ_4K / BLAKE2S_BLOCK_SIZE);
+
+		kernel_fpu_begin();
+		if (IS_ENABLED(CONFIG_AS_AVX512) &&
+		    static_branch_likely(&blake2s_use_avx512))
+			blake2s_compress_avx512(state, block, blocks, inc);
+		else
+			blake2s_compress_ssse3(state, block, blocks, inc);
+		kernel_fpu_end();
+
+		nblocks -= blocks;
+		block += blocks * BLAKE2S_BLOCK_SIZE;
+	} while (nblocks);
+}
+EXPORT_SYMBOL(blake2s_compress_arch);
+
+static int crypto_blake2s_update_x86(struct shash_desc *desc,
+				     const u8 *in, unsigned int inlen)
+{
+	return crypto_blake2s_update(desc, in, inlen, blake2s_compress_arch);
+}
+
+static int crypto_blake2s_final_x86(struct shash_desc *desc, u8 *out)
+{
+	return crypto_blake2s_final(desc, out, blake2s_compress_arch);
+}
+
+#define BLAKE2S_ALG(name, driver_name, digest_size)			\
+	{								\
+		.base.cra_name		= name,				\
+		.base.cra_driver_name	= driver_name,			\
+		.base.cra_priority	= 200,				\
+		.base.cra_flags		= CRYPTO_ALG_OPTIONAL_KEY,	\
+		.base.cra_blocksize	= BLAKE2S_BLOCK_SIZE,		\
+		.base.cra_ctxsize	= sizeof(struct blake2s_tfm_ctx), \
+		.base.cra_module	= THIS_MODULE,			\
+		.digestsize		= digest_size,			\
+		.setkey			= crypto_blake2s_setkey,	\
+		.init			= crypto_blake2s_init,		\
+		.update			= crypto_blake2s_update_x86,	\
+		.final			= crypto_blake2s_final_x86,	\
+		.descsize		= sizeof(struct blake2s_state),	\
+	}
+
+static struct shash_alg blake2s_algs[] = {
+	BLAKE2S_ALG("blake2s-128", "blake2s-128-x86", BLAKE2S_128_HASH_SIZE),
+	BLAKE2S_ALG("blake2s-160", "blake2s-160-x86", BLAKE2S_160_HASH_SIZE),
+	BLAKE2S_ALG("blake2s-224", "blake2s-224-x86", BLAKE2S_224_HASH_SIZE),
+	BLAKE2S_ALG("blake2s-256", "blake2s-256-x86", BLAKE2S_256_HASH_SIZE),
+};
+
+static int __init blake2s_mod_init(void)
+{
+	if (!boot_cpu_has(X86_FEATURE_SSSE3))
+		return 0;
+
+	static_branch_enable(&blake2s_use_ssse3);
+
+	if (IS_ENABLED(CONFIG_AS_AVX512) &&
+	    boot_cpu_has(X86_FEATURE_AVX) &&
+	    boot_cpu_has(X86_FEATURE_AVX2) &&
+	    boot_cpu_has(X86_FEATURE_AVX512F) &&
+	    boot_cpu_has(X86_FEATURE_AVX512VL) &&
+	    cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM |
+			      XFEATURE_MASK_AVX512, NULL))
+		static_branch_enable(&blake2s_use_avx512);
+
+	return IS_REACHABLE(CONFIG_CRYPTO_HASH) ?
+		crypto_register_shashes(blake2s_algs,
+					ARRAY_SIZE(blake2s_algs)) : 0;
+}
+
+static void __exit blake2s_mod_exit(void)
+{
+	if (IS_REACHABLE(CONFIG_CRYPTO_HASH) && boot_cpu_has(X86_FEATURE_SSSE3))
+		crypto_unregister_shashes(blake2s_algs, ARRAY_SIZE(blake2s_algs));
+}
+
+module_init(blake2s_mod_init);
+module_exit(blake2s_mod_exit);
+
+MODULE_ALIAS_CRYPTO("blake2s-128");
+MODULE_ALIAS_CRYPTO("blake2s-128-x86");
+MODULE_ALIAS_CRYPTO("blake2s-160");
+MODULE_ALIAS_CRYPTO("blake2s-160-x86");
+MODULE_ALIAS_CRYPTO("blake2s-224");
+MODULE_ALIAS_CRYPTO("blake2s-224-x86");
+MODULE_ALIAS_CRYPTO("blake2s-256");
+MODULE_ALIAS_CRYPTO("blake2s-256-x86");
+MODULE_LICENSE("GPL v2");
diff --git a/arch/x86/crypto/camellia_aesni_avx2_glue.c b/arch/x86/crypto/camellia_aesni_avx2_glue.c
index a4f00128..a8cc2c8 100644
--- a/arch/x86/crypto/camellia_aesni_avx2_glue.c
+++ b/arch/x86/crypto/camellia_aesni_avx2_glue.c
@@ -19,20 +19,17 @@
 #define CAMELLIA_AESNI_AVX2_PARALLEL_BLOCKS 32
 
 /* 32-way AVX2/AES-NI parallel cipher functions */
-asmlinkage void camellia_ecb_enc_32way(struct camellia_ctx *ctx, u8 *dst,
-				       const u8 *src);
-asmlinkage void camellia_ecb_dec_32way(struct camellia_ctx *ctx, u8 *dst,
-				       const u8 *src);
+asmlinkage void camellia_ecb_enc_32way(const void *ctx, u8 *dst, const u8 *src);
+asmlinkage void camellia_ecb_dec_32way(const void *ctx, u8 *dst, const u8 *src);
 
-asmlinkage void camellia_cbc_dec_32way(struct camellia_ctx *ctx, u8 *dst,
-				       const u8 *src);
-asmlinkage void camellia_ctr_32way(struct camellia_ctx *ctx, u8 *dst,
-				   const u8 *src, le128 *iv);
+asmlinkage void camellia_cbc_dec_32way(const void *ctx, u8 *dst, const u8 *src);
+asmlinkage void camellia_ctr_32way(const void *ctx, u8 *dst, const u8 *src,
+				   le128 *iv);
 
-asmlinkage void camellia_xts_enc_32way(struct camellia_ctx *ctx, u8 *dst,
-				       const u8 *src, le128 *iv);
-asmlinkage void camellia_xts_dec_32way(struct camellia_ctx *ctx, u8 *dst,
-				       const u8 *src, le128 *iv);
+asmlinkage void camellia_xts_enc_32way(const void *ctx, u8 *dst, const u8 *src,
+				       le128 *iv);
+asmlinkage void camellia_xts_dec_32way(const void *ctx, u8 *dst, const u8 *src,
+				       le128 *iv);
 
 static const struct common_glue_ctx camellia_enc = {
 	.num_funcs = 4,
@@ -40,16 +37,16 @@ static const struct common_glue_ctx camellia_enc = {
 
 	.funcs = { {
 		.num_blocks = CAMELLIA_AESNI_AVX2_PARALLEL_BLOCKS,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(camellia_ecb_enc_32way) }
+		.fn_u = { .ecb = camellia_ecb_enc_32way }
 	}, {
 		.num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(camellia_ecb_enc_16way) }
+		.fn_u = { .ecb = camellia_ecb_enc_16way }
 	}, {
 		.num_blocks = 2,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(camellia_enc_blk_2way) }
+		.fn_u = { .ecb = camellia_enc_blk_2way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(camellia_enc_blk) }
+		.fn_u = { .ecb = camellia_enc_blk }
 	} }
 };
 
@@ -59,16 +56,16 @@ static const struct common_glue_ctx camellia_ctr = {
 
 	.funcs = { {
 		.num_blocks = CAMELLIA_AESNI_AVX2_PARALLEL_BLOCKS,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(camellia_ctr_32way) }
+		.fn_u = { .ctr = camellia_ctr_32way }
 	}, {
 		.num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(camellia_ctr_16way) }
+		.fn_u = { .ctr = camellia_ctr_16way }
 	}, {
 		.num_blocks = 2,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(camellia_crypt_ctr_2way) }
+		.fn_u = { .ctr = camellia_crypt_ctr_2way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(camellia_crypt_ctr) }
+		.fn_u = { .ctr = camellia_crypt_ctr }
 	} }
 };
 
@@ -78,13 +75,13 @@ static const struct common_glue_ctx camellia_enc_xts = {
 
 	.funcs = { {
 		.num_blocks = CAMELLIA_AESNI_AVX2_PARALLEL_BLOCKS,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_enc_32way) }
+		.fn_u = { .xts = camellia_xts_enc_32way }
 	}, {
 		.num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_enc_16way) }
+		.fn_u = { .xts = camellia_xts_enc_16way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_enc) }
+		.fn_u = { .xts = camellia_xts_enc }
 	} }
 };
 
@@ -94,16 +91,16 @@ static const struct common_glue_ctx camellia_dec = {
 
 	.funcs = { {
 		.num_blocks = CAMELLIA_AESNI_AVX2_PARALLEL_BLOCKS,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(camellia_ecb_dec_32way) }
+		.fn_u = { .ecb = camellia_ecb_dec_32way }
 	}, {
 		.num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(camellia_ecb_dec_16way) }
+		.fn_u = { .ecb = camellia_ecb_dec_16way }
 	}, {
 		.num_blocks = 2,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(camellia_dec_blk_2way) }
+		.fn_u = { .ecb = camellia_dec_blk_2way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(camellia_dec_blk) }
+		.fn_u = { .ecb = camellia_dec_blk }
 	} }
 };
 
@@ -113,16 +110,16 @@ static const struct common_glue_ctx camellia_dec_cbc = {
 
 	.funcs = { {
 		.num_blocks = CAMELLIA_AESNI_AVX2_PARALLEL_BLOCKS,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(camellia_cbc_dec_32way) }
+		.fn_u = { .cbc = camellia_cbc_dec_32way }
 	}, {
 		.num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(camellia_cbc_dec_16way) }
+		.fn_u = { .cbc = camellia_cbc_dec_16way }
 	}, {
 		.num_blocks = 2,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(camellia_decrypt_cbc_2way) }
+		.fn_u = { .cbc = camellia_decrypt_cbc_2way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(camellia_dec_blk) }
+		.fn_u = { .cbc = camellia_dec_blk }
 	} }
 };
 
@@ -132,13 +129,13 @@ static const struct common_glue_ctx camellia_dec_xts = {
 
 	.funcs = { {
 		.num_blocks = CAMELLIA_AESNI_AVX2_PARALLEL_BLOCKS,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_dec_32way) }
+		.fn_u = { .xts = camellia_xts_dec_32way }
 	}, {
 		.num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_dec_16way) }
+		.fn_u = { .xts = camellia_xts_dec_16way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_dec) }
+		.fn_u = { .xts = camellia_xts_dec }
 	} }
 };
 
@@ -161,8 +158,7 @@ static int ecb_decrypt(struct skcipher_request *req)
 
 static int cbc_encrypt(struct skcipher_request *req)
 {
-	return glue_cbc_encrypt_req_128bit(GLUE_FUNC_CAST(camellia_enc_blk),
-					   req);
+	return glue_cbc_encrypt_req_128bit(camellia_enc_blk, req);
 }
 
 static int cbc_decrypt(struct skcipher_request *req)
@@ -180,8 +176,7 @@ static int xts_encrypt(struct skcipher_request *req)
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct camellia_xts_ctx *ctx = crypto_skcipher_ctx(tfm);
 
-	return glue_xts_req_128bit(&camellia_enc_xts, req,
-				   XTS_TWEAK_CAST(camellia_enc_blk),
+	return glue_xts_req_128bit(&camellia_enc_xts, req, camellia_enc_blk,
 				   &ctx->tweak_ctx, &ctx->crypt_ctx, false);
 }
 
@@ -190,8 +185,7 @@ static int xts_decrypt(struct skcipher_request *req)
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct camellia_xts_ctx *ctx = crypto_skcipher_ctx(tfm);
 
-	return glue_xts_req_128bit(&camellia_dec_xts, req,
-				   XTS_TWEAK_CAST(camellia_enc_blk),
+	return glue_xts_req_128bit(&camellia_dec_xts, req, camellia_enc_blk,
 				   &ctx->tweak_ctx, &ctx->crypt_ctx, true);
 }
 
diff --git a/arch/x86/crypto/camellia_aesni_avx_glue.c b/arch/x86/crypto/camellia_aesni_avx_glue.c
index f28d282..31a82a7 100644
--- a/arch/x86/crypto/camellia_aesni_avx_glue.c
+++ b/arch/x86/crypto/camellia_aesni_avx_glue.c
@@ -18,41 +18,36 @@
 #define CAMELLIA_AESNI_PARALLEL_BLOCKS 16
 
 /* 16-way parallel cipher functions (avx/aes-ni) */
-asmlinkage void camellia_ecb_enc_16way(struct camellia_ctx *ctx, u8 *dst,
-				       const u8 *src);
+asmlinkage void camellia_ecb_enc_16way(const void *ctx, u8 *dst, const u8 *src);
 EXPORT_SYMBOL_GPL(camellia_ecb_enc_16way);
 
-asmlinkage void camellia_ecb_dec_16way(struct camellia_ctx *ctx, u8 *dst,
-				       const u8 *src);
+asmlinkage void camellia_ecb_dec_16way(const void *ctx, u8 *dst, const u8 *src);
 EXPORT_SYMBOL_GPL(camellia_ecb_dec_16way);
 
-asmlinkage void camellia_cbc_dec_16way(struct camellia_ctx *ctx, u8 *dst,
-				       const u8 *src);
+asmlinkage void camellia_cbc_dec_16way(const void *ctx, u8 *dst, const u8 *src);
 EXPORT_SYMBOL_GPL(camellia_cbc_dec_16way);
 
-asmlinkage void camellia_ctr_16way(struct camellia_ctx *ctx, u8 *dst,
-				   const u8 *src, le128 *iv);
+asmlinkage void camellia_ctr_16way(const void *ctx, u8 *dst, const u8 *src,
+				   le128 *iv);
 EXPORT_SYMBOL_GPL(camellia_ctr_16way);
 
-asmlinkage void camellia_xts_enc_16way(struct camellia_ctx *ctx, u8 *dst,
-				       const u8 *src, le128 *iv);
+asmlinkage void camellia_xts_enc_16way(const void *ctx, u8 *dst, const u8 *src,
+				       le128 *iv);
 EXPORT_SYMBOL_GPL(camellia_xts_enc_16way);
 
-asmlinkage void camellia_xts_dec_16way(struct camellia_ctx *ctx, u8 *dst,
-				       const u8 *src, le128 *iv);
+asmlinkage void camellia_xts_dec_16way(const void *ctx, u8 *dst, const u8 *src,
+				       le128 *iv);
 EXPORT_SYMBOL_GPL(camellia_xts_dec_16way);
 
-void camellia_xts_enc(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+void camellia_xts_enc(const void *ctx, u8 *dst, const u8 *src, le128 *iv)
 {
-	glue_xts_crypt_128bit_one(ctx, dst, src, iv,
-				  GLUE_FUNC_CAST(camellia_enc_blk));
+	glue_xts_crypt_128bit_one(ctx, dst, src, iv, camellia_enc_blk);
 }
 EXPORT_SYMBOL_GPL(camellia_xts_enc);
 
-void camellia_xts_dec(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+void camellia_xts_dec(const void *ctx, u8 *dst, const u8 *src, le128 *iv)
 {
-	glue_xts_crypt_128bit_one(ctx, dst, src, iv,
-				  GLUE_FUNC_CAST(camellia_dec_blk));
+	glue_xts_crypt_128bit_one(ctx, dst, src, iv, camellia_dec_blk);
 }
 EXPORT_SYMBOL_GPL(camellia_xts_dec);
 
@@ -62,13 +57,13 @@ static const struct common_glue_ctx camellia_enc = {
 
 	.funcs = { {
 		.num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(camellia_ecb_enc_16way) }
+		.fn_u = { .ecb = camellia_ecb_enc_16way }
 	}, {
 		.num_blocks = 2,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(camellia_enc_blk_2way) }
+		.fn_u = { .ecb = camellia_enc_blk_2way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(camellia_enc_blk) }
+		.fn_u = { .ecb = camellia_enc_blk }
 	} }
 };
 
@@ -78,13 +73,13 @@ static const struct common_glue_ctx camellia_ctr = {
 
 	.funcs = { {
 		.num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(camellia_ctr_16way) }
+		.fn_u = { .ctr = camellia_ctr_16way }
 	}, {
 		.num_blocks = 2,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(camellia_crypt_ctr_2way) }
+		.fn_u = { .ctr = camellia_crypt_ctr_2way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(camellia_crypt_ctr) }
+		.fn_u = { .ctr = camellia_crypt_ctr }
 	} }
 };
 
@@ -94,10 +89,10 @@ static const struct common_glue_ctx camellia_enc_xts = {
 
 	.funcs = { {
 		.num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_enc_16way) }
+		.fn_u = { .xts = camellia_xts_enc_16way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_enc) }
+		.fn_u = { .xts = camellia_xts_enc }
 	} }
 };
 
@@ -107,13 +102,13 @@ static const struct common_glue_ctx camellia_dec = {
 
 	.funcs = { {
 		.num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(camellia_ecb_dec_16way) }
+		.fn_u = { .ecb = camellia_ecb_dec_16way }
 	}, {
 		.num_blocks = 2,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(camellia_dec_blk_2way) }
+		.fn_u = { .ecb = camellia_dec_blk_2way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(camellia_dec_blk) }
+		.fn_u = { .ecb = camellia_dec_blk }
 	} }
 };
 
@@ -123,13 +118,13 @@ static const struct common_glue_ctx camellia_dec_cbc = {
 
 	.funcs = { {
 		.num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(camellia_cbc_dec_16way) }
+		.fn_u = { .cbc = camellia_cbc_dec_16way }
 	}, {
 		.num_blocks = 2,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(camellia_decrypt_cbc_2way) }
+		.fn_u = { .cbc = camellia_decrypt_cbc_2way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(camellia_dec_blk) }
+		.fn_u = { .cbc = camellia_dec_blk }
 	} }
 };
 
@@ -139,10 +134,10 @@ static const struct common_glue_ctx camellia_dec_xts = {
 
 	.funcs = { {
 		.num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_dec_16way) }
+		.fn_u = { .xts = camellia_xts_dec_16way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_dec) }
+		.fn_u = { .xts = camellia_xts_dec }
 	} }
 };
 
@@ -165,8 +160,7 @@ static int ecb_decrypt(struct skcipher_request *req)
 
 static int cbc_encrypt(struct skcipher_request *req)
 {
-	return glue_cbc_encrypt_req_128bit(GLUE_FUNC_CAST(camellia_enc_blk),
-					   req);
+	return glue_cbc_encrypt_req_128bit(camellia_enc_blk, req);
 }
 
 static int cbc_decrypt(struct skcipher_request *req)
@@ -206,8 +200,7 @@ static int xts_encrypt(struct skcipher_request *req)
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct camellia_xts_ctx *ctx = crypto_skcipher_ctx(tfm);
 
-	return glue_xts_req_128bit(&camellia_enc_xts, req,
-				   XTS_TWEAK_CAST(camellia_enc_blk),
+	return glue_xts_req_128bit(&camellia_enc_xts, req, camellia_enc_blk,
 				   &ctx->tweak_ctx, &ctx->crypt_ctx, false);
 }
 
@@ -216,8 +209,7 @@ static int xts_decrypt(struct skcipher_request *req)
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct camellia_xts_ctx *ctx = crypto_skcipher_ctx(tfm);
 
-	return glue_xts_req_128bit(&camellia_dec_xts, req,
-				   XTS_TWEAK_CAST(camellia_enc_blk),
+	return glue_xts_req_128bit(&camellia_dec_xts, req, camellia_enc_blk,
 				   &ctx->tweak_ctx, &ctx->crypt_ctx, true);
 }
 
diff --git a/arch/x86/crypto/camellia_glue.c b/arch/x86/crypto/camellia_glue.c
index 7c62db5..5f3ed5a 100644
--- a/arch/x86/crypto/camellia_glue.c
+++ b/arch/x86/crypto/camellia_glue.c
@@ -18,19 +18,17 @@
 #include <asm/crypto/glue_helper.h>
 
 /* regular block cipher functions */
-asmlinkage void __camellia_enc_blk(struct camellia_ctx *ctx, u8 *dst,
-				   const u8 *src, bool xor);
+asmlinkage void __camellia_enc_blk(const void *ctx, u8 *dst, const u8 *src,
+				   bool xor);
 EXPORT_SYMBOL_GPL(__camellia_enc_blk);
-asmlinkage void camellia_dec_blk(struct camellia_ctx *ctx, u8 *dst,
-				 const u8 *src);
+asmlinkage void camellia_dec_blk(const void *ctx, u8 *dst, const u8 *src);
 EXPORT_SYMBOL_GPL(camellia_dec_blk);
 
 /* 2-way parallel cipher functions */
-asmlinkage void __camellia_enc_blk_2way(struct camellia_ctx *ctx, u8 *dst,
-					const u8 *src, bool xor);
+asmlinkage void __camellia_enc_blk_2way(const void *ctx, u8 *dst, const u8 *src,
+					bool xor);
 EXPORT_SYMBOL_GPL(__camellia_enc_blk_2way);
-asmlinkage void camellia_dec_blk_2way(struct camellia_ctx *ctx, u8 *dst,
-				      const u8 *src);
+asmlinkage void camellia_dec_blk_2way(const void *ctx, u8 *dst, const u8 *src);
 EXPORT_SYMBOL_GPL(camellia_dec_blk_2way);
 
 static void camellia_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
@@ -1267,8 +1265,10 @@ static int camellia_setkey_skcipher(struct crypto_skcipher *tfm, const u8 *key,
 	return camellia_setkey(&tfm->base, key, key_len);
 }
 
-void camellia_decrypt_cbc_2way(void *ctx, u128 *dst, const u128 *src)
+void camellia_decrypt_cbc_2way(const void *ctx, u8 *d, const u8 *s)
 {
+	u128 *dst = (u128 *)d;
+	const u128 *src = (const u128 *)s;
 	u128 iv = *src;
 
 	camellia_dec_blk_2way(ctx, (u8 *)dst, (u8 *)src);
@@ -1277,9 +1277,11 @@ void camellia_decrypt_cbc_2way(void *ctx, u128 *dst, const u128 *src)
 }
 EXPORT_SYMBOL_GPL(camellia_decrypt_cbc_2way);
 
-void camellia_crypt_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+void camellia_crypt_ctr(const void *ctx, u8 *d, const u8 *s, le128 *iv)
 {
 	be128 ctrblk;
+	u128 *dst = (u128 *)d;
+	const u128 *src = (const u128 *)s;
 
 	if (dst != src)
 		*dst = *src;
@@ -1291,9 +1293,11 @@ void camellia_crypt_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv)
 }
 EXPORT_SYMBOL_GPL(camellia_crypt_ctr);
 
-void camellia_crypt_ctr_2way(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+void camellia_crypt_ctr_2way(const void *ctx, u8 *d, const u8 *s, le128 *iv)
 {
 	be128 ctrblks[2];
+	u128 *dst = (u128 *)d;
+	const u128 *src = (const u128 *)s;
 
 	if (dst != src) {
 		dst[0] = src[0];
@@ -1315,10 +1319,10 @@ static const struct common_glue_ctx camellia_enc = {
 
 	.funcs = { {
 		.num_blocks = 2,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(camellia_enc_blk_2way) }
+		.fn_u = { .ecb = camellia_enc_blk_2way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(camellia_enc_blk) }
+		.fn_u = { .ecb = camellia_enc_blk }
 	} }
 };
 
@@ -1328,10 +1332,10 @@ static const struct common_glue_ctx camellia_ctr = {
 
 	.funcs = { {
 		.num_blocks = 2,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(camellia_crypt_ctr_2way) }
+		.fn_u = { .ctr = camellia_crypt_ctr_2way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(camellia_crypt_ctr) }
+		.fn_u = { .ctr = camellia_crypt_ctr }
 	} }
 };
 
@@ -1341,10 +1345,10 @@ static const struct common_glue_ctx camellia_dec = {
 
 	.funcs = { {
 		.num_blocks = 2,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(camellia_dec_blk_2way) }
+		.fn_u = { .ecb = camellia_dec_blk_2way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(camellia_dec_blk) }
+		.fn_u = { .ecb = camellia_dec_blk }
 	} }
 };
 
@@ -1354,10 +1358,10 @@ static const struct common_glue_ctx camellia_dec_cbc = {
 
 	.funcs = { {
 		.num_blocks = 2,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(camellia_decrypt_cbc_2way) }
+		.fn_u = { .cbc = camellia_decrypt_cbc_2way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(camellia_dec_blk) }
+		.fn_u = { .cbc = camellia_dec_blk }
 	} }
 };
 
@@ -1373,8 +1377,7 @@ static int ecb_decrypt(struct skcipher_request *req)
 
 static int cbc_encrypt(struct skcipher_request *req)
 {
-	return glue_cbc_encrypt_req_128bit(GLUE_FUNC_CAST(camellia_enc_blk),
-					   req);
+	return glue_cbc_encrypt_req_128bit(camellia_enc_blk, req);
 }
 
 static int cbc_decrypt(struct skcipher_request *req)
diff --git a/arch/x86/crypto/cast6_avx_glue.c b/arch/x86/crypto/cast6_avx_glue.c
index a8a38ff..da52974 100644
--- a/arch/x86/crypto/cast6_avx_glue.c
+++ b/arch/x86/crypto/cast6_avx_glue.c
@@ -20,20 +20,17 @@
 
 #define CAST6_PARALLEL_BLOCKS 8
 
-asmlinkage void cast6_ecb_enc_8way(struct cast6_ctx *ctx, u8 *dst,
-				   const u8 *src);
-asmlinkage void cast6_ecb_dec_8way(struct cast6_ctx *ctx, u8 *dst,
-				   const u8 *src);
+asmlinkage void cast6_ecb_enc_8way(const void *ctx, u8 *dst, const u8 *src);
+asmlinkage void cast6_ecb_dec_8way(const void *ctx, u8 *dst, const u8 *src);
 
-asmlinkage void cast6_cbc_dec_8way(struct cast6_ctx *ctx, u8 *dst,
-				   const u8 *src);
-asmlinkage void cast6_ctr_8way(struct cast6_ctx *ctx, u8 *dst, const u8 *src,
+asmlinkage void cast6_cbc_dec_8way(const void *ctx, u8 *dst, const u8 *src);
+asmlinkage void cast6_ctr_8way(const void *ctx, u8 *dst, const u8 *src,
 			       le128 *iv);
 
-asmlinkage void cast6_xts_enc_8way(struct cast6_ctx *ctx, u8 *dst,
-				   const u8 *src, le128 *iv);
-asmlinkage void cast6_xts_dec_8way(struct cast6_ctx *ctx, u8 *dst,
-				   const u8 *src, le128 *iv);
+asmlinkage void cast6_xts_enc_8way(const void *ctx, u8 *dst, const u8 *src,
+				   le128 *iv);
+asmlinkage void cast6_xts_dec_8way(const void *ctx, u8 *dst, const u8 *src,
+				   le128 *iv);
 
 static int cast6_setkey_skcipher(struct crypto_skcipher *tfm,
 				 const u8 *key, unsigned int keylen)
@@ -41,21 +38,21 @@ static int cast6_setkey_skcipher(struct crypto_skcipher *tfm,
 	return cast6_setkey(&tfm->base, key, keylen);
 }
 
-static void cast6_xts_enc(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+static void cast6_xts_enc(const void *ctx, u8 *dst, const u8 *src, le128 *iv)
 {
-	glue_xts_crypt_128bit_one(ctx, dst, src, iv,
-				  GLUE_FUNC_CAST(__cast6_encrypt));
+	glue_xts_crypt_128bit_one(ctx, dst, src, iv, __cast6_encrypt);
 }
 
-static void cast6_xts_dec(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+static void cast6_xts_dec(const void *ctx, u8 *dst, const u8 *src, le128 *iv)
 {
-	glue_xts_crypt_128bit_one(ctx, dst, src, iv,
-				  GLUE_FUNC_CAST(__cast6_decrypt));
+	glue_xts_crypt_128bit_one(ctx, dst, src, iv, __cast6_decrypt);
 }
 
-static void cast6_crypt_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+static void cast6_crypt_ctr(const void *ctx, u8 *d, const u8 *s, le128 *iv)
 {
 	be128 ctrblk;
+	u128 *dst = (u128 *)d;
+	const u128 *src = (const u128 *)s;
 
 	le128_to_be128(&ctrblk, iv);
 	le128_inc(iv);
@@ -70,10 +67,10 @@ static const struct common_glue_ctx cast6_enc = {
 
 	.funcs = { {
 		.num_blocks = CAST6_PARALLEL_BLOCKS,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(cast6_ecb_enc_8way) }
+		.fn_u = { .ecb = cast6_ecb_enc_8way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(__cast6_encrypt) }
+		.fn_u = { .ecb = __cast6_encrypt }
 	} }
 };
 
@@ -83,10 +80,10 @@ static const struct common_glue_ctx cast6_ctr = {
 
 	.funcs = { {
 		.num_blocks = CAST6_PARALLEL_BLOCKS,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(cast6_ctr_8way) }
+		.fn_u = { .ctr = cast6_ctr_8way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(cast6_crypt_ctr) }
+		.fn_u = { .ctr = cast6_crypt_ctr }
 	} }
 };
 
@@ -96,10 +93,10 @@ static const struct common_glue_ctx cast6_enc_xts = {
 
 	.funcs = { {
 		.num_blocks = CAST6_PARALLEL_BLOCKS,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(cast6_xts_enc_8way) }
+		.fn_u = { .xts = cast6_xts_enc_8way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(cast6_xts_enc) }
+		.fn_u = { .xts = cast6_xts_enc }
 	} }
 };
 
@@ -109,10 +106,10 @@ static const struct common_glue_ctx cast6_dec = {
 
 	.funcs = { {
 		.num_blocks = CAST6_PARALLEL_BLOCKS,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(cast6_ecb_dec_8way) }
+		.fn_u = { .ecb = cast6_ecb_dec_8way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(__cast6_decrypt) }
+		.fn_u = { .ecb = __cast6_decrypt }
 	} }
 };
 
@@ -122,10 +119,10 @@ static const struct common_glue_ctx cast6_dec_cbc = {
 
 	.funcs = { {
 		.num_blocks = CAST6_PARALLEL_BLOCKS,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(cast6_cbc_dec_8way) }
+		.fn_u = { .cbc = cast6_cbc_dec_8way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(__cast6_decrypt) }
+		.fn_u = { .cbc = __cast6_decrypt }
 	} }
 };
 
@@ -135,10 +132,10 @@ static const struct common_glue_ctx cast6_dec_xts = {
 
 	.funcs = { {
 		.num_blocks = CAST6_PARALLEL_BLOCKS,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(cast6_xts_dec_8way) }
+		.fn_u = { .xts = cast6_xts_dec_8way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(cast6_xts_dec) }
+		.fn_u = { .xts = cast6_xts_dec }
 	} }
 };
 
@@ -154,8 +151,7 @@ static int ecb_decrypt(struct skcipher_request *req)
 
 static int cbc_encrypt(struct skcipher_request *req)
 {
-	return glue_cbc_encrypt_req_128bit(GLUE_FUNC_CAST(__cast6_encrypt),
-					   req);
+	return glue_cbc_encrypt_req_128bit(__cast6_encrypt, req);
 }
 
 static int cbc_decrypt(struct skcipher_request *req)
@@ -199,8 +195,7 @@ static int xts_encrypt(struct skcipher_request *req)
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct cast6_xts_ctx *ctx = crypto_skcipher_ctx(tfm);
 
-	return glue_xts_req_128bit(&cast6_enc_xts, req,
-				   XTS_TWEAK_CAST(__cast6_encrypt),
+	return glue_xts_req_128bit(&cast6_enc_xts, req, __cast6_encrypt,
 				   &ctx->tweak_ctx, &ctx->crypt_ctx, false);
 }
 
@@ -209,8 +204,7 @@ static int xts_decrypt(struct skcipher_request *req)
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct cast6_xts_ctx *ctx = crypto_skcipher_ctx(tfm);
 
-	return glue_xts_req_128bit(&cast6_dec_xts, req,
-				   XTS_TWEAK_CAST(__cast6_encrypt),
+	return glue_xts_req_128bit(&cast6_dec_xts, req, __cast6_encrypt,
 				   &ctx->tweak_ctx, &ctx->crypt_ctx, true);
 }
 
diff --git a/arch/x86/crypto/chacha-ssse3-x86_64.S b/arch/x86/crypto/chacha-ssse3-x86_64.S
index 2d86c7d..a556a57 100644
--- a/arch/x86/crypto/chacha-ssse3-x86_64.S
+++ b/arch/x86/crypto/chacha-ssse3-x86_64.S
@@ -120,10 +120,10 @@
 	FRAME_BEGIN
 
 	# x0..3 = s0..3
-	movdqa		0x00(%rdi),%xmm0
-	movdqa		0x10(%rdi),%xmm1
-	movdqa		0x20(%rdi),%xmm2
-	movdqa		0x30(%rdi),%xmm3
+	movdqu		0x00(%rdi),%xmm0
+	movdqu		0x10(%rdi),%xmm1
+	movdqu		0x20(%rdi),%xmm2
+	movdqu		0x30(%rdi),%xmm3
 	movdqa		%xmm0,%xmm8
 	movdqa		%xmm1,%xmm9
 	movdqa		%xmm2,%xmm10
@@ -205,10 +205,10 @@
 	# %edx: nrounds
 	FRAME_BEGIN
 
-	movdqa		0x00(%rdi),%xmm0
-	movdqa		0x10(%rdi),%xmm1
-	movdqa		0x20(%rdi),%xmm2
-	movdqa		0x30(%rdi),%xmm3
+	movdqu		0x00(%rdi),%xmm0
+	movdqu		0x10(%rdi),%xmm1
+	movdqu		0x20(%rdi),%xmm2
+	movdqu		0x30(%rdi),%xmm3
 
 	mov		%edx,%r8d
 	call		chacha_permute
diff --git a/arch/x86/crypto/chacha_glue.c b/arch/x86/crypto/chacha_glue.c
index 388f95a..4c4dc64 100644
--- a/arch/x86/crypto/chacha_glue.c
+++ b/arch/x86/crypto/chacha_glue.c
@@ -7,38 +7,36 @@
  */
 
 #include <crypto/algapi.h>
-#include <crypto/chacha.h>
+#include <crypto/internal/chacha.h>
 #include <crypto/internal/simd.h>
 #include <crypto/internal/skcipher.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <asm/simd.h>
 
-#define CHACHA_STATE_ALIGN 16
-
 asmlinkage void chacha_block_xor_ssse3(u32 *state, u8 *dst, const u8 *src,
 				       unsigned int len, int nrounds);
 asmlinkage void chacha_4block_xor_ssse3(u32 *state, u8 *dst, const u8 *src,
 					unsigned int len, int nrounds);
 asmlinkage void hchacha_block_ssse3(const u32 *state, u32 *out, int nrounds);
-#ifdef CONFIG_AS_AVX2
+
 asmlinkage void chacha_2block_xor_avx2(u32 *state, u8 *dst, const u8 *src,
 				       unsigned int len, int nrounds);
 asmlinkage void chacha_4block_xor_avx2(u32 *state, u8 *dst, const u8 *src,
 				       unsigned int len, int nrounds);
 asmlinkage void chacha_8block_xor_avx2(u32 *state, u8 *dst, const u8 *src,
 				       unsigned int len, int nrounds);
-static bool chacha_use_avx2;
-#ifdef CONFIG_AS_AVX512
+
 asmlinkage void chacha_2block_xor_avx512vl(u32 *state, u8 *dst, const u8 *src,
 					   unsigned int len, int nrounds);
 asmlinkage void chacha_4block_xor_avx512vl(u32 *state, u8 *dst, const u8 *src,
 					   unsigned int len, int nrounds);
 asmlinkage void chacha_8block_xor_avx512vl(u32 *state, u8 *dst, const u8 *src,
 					   unsigned int len, int nrounds);
-static bool chacha_use_avx512vl;
-#endif
-#endif
+
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(chacha_use_simd);
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(chacha_use_avx2);
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(chacha_use_avx512vl);
 
 static unsigned int chacha_advance(unsigned int len, unsigned int maxblocks)
 {
@@ -49,9 +47,8 @@ static unsigned int chacha_advance(unsigned int len, unsigned int maxblocks)
 static void chacha_dosimd(u32 *state, u8 *dst, const u8 *src,
 			  unsigned int bytes, int nrounds)
 {
-#ifdef CONFIG_AS_AVX2
-#ifdef CONFIG_AS_AVX512
-	if (chacha_use_avx512vl) {
+	if (IS_ENABLED(CONFIG_AS_AVX512) &&
+	    static_branch_likely(&chacha_use_avx512vl)) {
 		while (bytes >= CHACHA_BLOCK_SIZE * 8) {
 			chacha_8block_xor_avx512vl(state, dst, src, bytes,
 						   nrounds);
@@ -79,8 +76,9 @@ static void chacha_dosimd(u32 *state, u8 *dst, const u8 *src,
 			return;
 		}
 	}
-#endif
-	if (chacha_use_avx2) {
+
+	if (IS_ENABLED(CONFIG_AS_AVX2) &&
+	    static_branch_likely(&chacha_use_avx2)) {
 		while (bytes >= CHACHA_BLOCK_SIZE * 8) {
 			chacha_8block_xor_avx2(state, dst, src, bytes, nrounds);
 			bytes -= CHACHA_BLOCK_SIZE * 8;
@@ -104,7 +102,7 @@ static void chacha_dosimd(u32 *state, u8 *dst, const u8 *src,
 			return;
 		}
 	}
-#endif
+
 	while (bytes >= CHACHA_BLOCK_SIZE * 4) {
 		chacha_4block_xor_ssse3(state, dst, src, bytes, nrounds);
 		bytes -= CHACHA_BLOCK_SIZE * 4;
@@ -123,37 +121,75 @@ static void chacha_dosimd(u32 *state, u8 *dst, const u8 *src,
 	}
 }
 
-static int chacha_simd_stream_xor(struct skcipher_walk *walk,
+void hchacha_block_arch(const u32 *state, u32 *stream, int nrounds)
+{
+	if (!static_branch_likely(&chacha_use_simd) || !crypto_simd_usable()) {
+		hchacha_block_generic(state, stream, nrounds);
+	} else {
+		kernel_fpu_begin();
+		hchacha_block_ssse3(state, stream, nrounds);
+		kernel_fpu_end();
+	}
+}
+EXPORT_SYMBOL(hchacha_block_arch);
+
+void chacha_init_arch(u32 *state, const u32 *key, const u8 *iv)
+{
+	chacha_init_generic(state, key, iv);
+}
+EXPORT_SYMBOL(chacha_init_arch);
+
+void chacha_crypt_arch(u32 *state, u8 *dst, const u8 *src, unsigned int bytes,
+		       int nrounds)
+{
+	if (!static_branch_likely(&chacha_use_simd) || !crypto_simd_usable() ||
+	    bytes <= CHACHA_BLOCK_SIZE)
+		return chacha_crypt_generic(state, dst, src, bytes, nrounds);
+
+	do {
+		unsigned int todo = min_t(unsigned int, bytes, SZ_4K);
+
+		kernel_fpu_begin();
+		chacha_dosimd(state, dst, src, todo, nrounds);
+		kernel_fpu_end();
+
+		bytes -= todo;
+		src += todo;
+		dst += todo;
+	} while (bytes);
+}
+EXPORT_SYMBOL(chacha_crypt_arch);
+
+static int chacha_simd_stream_xor(struct skcipher_request *req,
 				  const struct chacha_ctx *ctx, const u8 *iv)
 {
-	u32 *state, state_buf[16 + 2] __aligned(8);
-	int next_yield = 4096; /* bytes until next FPU yield */
-	int err = 0;
+	u32 state[CHACHA_STATE_WORDS] __aligned(8);
+	struct skcipher_walk walk;
+	int err;
 
-	BUILD_BUG_ON(CHACHA_STATE_ALIGN != 16);
-	state = PTR_ALIGN(state_buf + 0, CHACHA_STATE_ALIGN);
+	err = skcipher_walk_virt(&walk, req, false);
 
-	crypto_chacha_init(state, ctx, iv);
+	chacha_init_generic(state, ctx->key, iv);
 
-	while (walk->nbytes > 0) {
-		unsigned int nbytes = walk->nbytes;
+	while (walk.nbytes > 0) {
+		unsigned int nbytes = walk.nbytes;
 
-		if (nbytes < walk->total) {
-			nbytes = round_down(nbytes, walk->stride);
-			next_yield -= nbytes;
-		}
+		if (nbytes < walk.total)
+			nbytes = round_down(nbytes, walk.stride);
 
-		chacha_dosimd(state, walk->dst.virt.addr, walk->src.virt.addr,
-			      nbytes, ctx->nrounds);
-
-		if (next_yield <= 0) {
-			/* temporarily allow preemption */
-			kernel_fpu_end();
+		if (!static_branch_likely(&chacha_use_simd) ||
+		    !crypto_simd_usable()) {
+			chacha_crypt_generic(state, walk.dst.virt.addr,
+					     walk.src.virt.addr, nbytes,
+					     ctx->nrounds);
+		} else {
 			kernel_fpu_begin();
-			next_yield = 4096;
+			chacha_dosimd(state, walk.dst.virt.addr,
+				      walk.src.virt.addr, nbytes,
+				      ctx->nrounds);
+			kernel_fpu_end();
 		}
-
-		err = skcipher_walk_done(walk, walk->nbytes - nbytes);
+		err = skcipher_walk_done(&walk, walk.nbytes - nbytes);
 	}
 
 	return err;
@@ -163,55 +199,32 @@ static int chacha_simd(struct skcipher_request *req)
 {
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
-	struct skcipher_walk walk;
-	int err;
 
-	if (req->cryptlen <= CHACHA_BLOCK_SIZE || !crypto_simd_usable())
-		return crypto_chacha_crypt(req);
-
-	err = skcipher_walk_virt(&walk, req, true);
-	if (err)
-		return err;
-
-	kernel_fpu_begin();
-	err = chacha_simd_stream_xor(&walk, ctx, req->iv);
-	kernel_fpu_end();
-	return err;
+	return chacha_simd_stream_xor(req, ctx, req->iv);
 }
 
 static int xchacha_simd(struct skcipher_request *req)
 {
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
-	struct skcipher_walk walk;
+	u32 state[CHACHA_STATE_WORDS] __aligned(8);
 	struct chacha_ctx subctx;
-	u32 *state, state_buf[16 + 2] __aligned(8);
 	u8 real_iv[16];
-	int err;
 
-	if (req->cryptlen <= CHACHA_BLOCK_SIZE || !crypto_simd_usable())
-		return crypto_xchacha_crypt(req);
+	chacha_init_generic(state, ctx->key, req->iv);
 
-	err = skcipher_walk_virt(&walk, req, true);
-	if (err)
-		return err;
-
-	BUILD_BUG_ON(CHACHA_STATE_ALIGN != 16);
-	state = PTR_ALIGN(state_buf + 0, CHACHA_STATE_ALIGN);
-	crypto_chacha_init(state, ctx, req->iv);
-
-	kernel_fpu_begin();
-
-	hchacha_block_ssse3(state, subctx.key, ctx->nrounds);
+	if (req->cryptlen > CHACHA_BLOCK_SIZE && crypto_simd_usable()) {
+		kernel_fpu_begin();
+		hchacha_block_ssse3(state, subctx.key, ctx->nrounds);
+		kernel_fpu_end();
+	} else {
+		hchacha_block_generic(state, subctx.key, ctx->nrounds);
+	}
 	subctx.nrounds = ctx->nrounds;
 
 	memcpy(&real_iv[0], req->iv + 24, 8);
 	memcpy(&real_iv[8], req->iv + 16, 8);
-	err = chacha_simd_stream_xor(&walk, &subctx, real_iv);
-
-	kernel_fpu_end();
-
-	return err;
+	return chacha_simd_stream_xor(req, &subctx, real_iv);
 }
 
 static struct skcipher_alg algs[] = {
@@ -227,7 +240,7 @@ static struct skcipher_alg algs[] = {
 		.max_keysize		= CHACHA_KEY_SIZE,
 		.ivsize			= CHACHA_IV_SIZE,
 		.chunksize		= CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha20_setkey,
+		.setkey			= chacha20_setkey,
 		.encrypt		= chacha_simd,
 		.decrypt		= chacha_simd,
 	}, {
@@ -242,7 +255,7 @@ static struct skcipher_alg algs[] = {
 		.max_keysize		= CHACHA_KEY_SIZE,
 		.ivsize			= XCHACHA_IV_SIZE,
 		.chunksize		= CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha20_setkey,
+		.setkey			= chacha20_setkey,
 		.encrypt		= xchacha_simd,
 		.decrypt		= xchacha_simd,
 	}, {
@@ -257,7 +270,7 @@ static struct skcipher_alg algs[] = {
 		.max_keysize		= CHACHA_KEY_SIZE,
 		.ivsize			= XCHACHA_IV_SIZE,
 		.chunksize		= CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha12_setkey,
+		.setkey			= chacha12_setkey,
 		.encrypt		= xchacha_simd,
 		.decrypt		= xchacha_simd,
 	},
@@ -266,24 +279,29 @@ static struct skcipher_alg algs[] = {
 static int __init chacha_simd_mod_init(void)
 {
 	if (!boot_cpu_has(X86_FEATURE_SSSE3))
-		return -ENODEV;
+		return 0;
 
-#ifdef CONFIG_AS_AVX2
-	chacha_use_avx2 = boot_cpu_has(X86_FEATURE_AVX) &&
-			  boot_cpu_has(X86_FEATURE_AVX2) &&
-			  cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM, NULL);
-#ifdef CONFIG_AS_AVX512
-	chacha_use_avx512vl = chacha_use_avx2 &&
-			      boot_cpu_has(X86_FEATURE_AVX512VL) &&
-			      boot_cpu_has(X86_FEATURE_AVX512BW); /* kmovq */
-#endif
-#endif
-	return crypto_register_skciphers(algs, ARRAY_SIZE(algs));
+	static_branch_enable(&chacha_use_simd);
+
+	if (IS_ENABLED(CONFIG_AS_AVX2) &&
+	    boot_cpu_has(X86_FEATURE_AVX) &&
+	    boot_cpu_has(X86_FEATURE_AVX2) &&
+	    cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM, NULL)) {
+		static_branch_enable(&chacha_use_avx2);
+
+		if (IS_ENABLED(CONFIG_AS_AVX512) &&
+		    boot_cpu_has(X86_FEATURE_AVX512VL) &&
+		    boot_cpu_has(X86_FEATURE_AVX512BW)) /* kmovq */
+			static_branch_enable(&chacha_use_avx512vl);
+	}
+	return IS_REACHABLE(CONFIG_CRYPTO_BLKCIPHER) ?
+		crypto_register_skciphers(algs, ARRAY_SIZE(algs)) : 0;
 }
 
 static void __exit chacha_simd_mod_fini(void)
 {
-	crypto_unregister_skciphers(algs, ARRAY_SIZE(algs));
+	if (IS_REACHABLE(CONFIG_CRYPTO_BLKCIPHER) && boot_cpu_has(X86_FEATURE_SSSE3))
+		crypto_unregister_skciphers(algs, ARRAY_SIZE(algs));
 }
 
 module_init(chacha_simd_mod_init);
diff --git a/arch/x86/crypto/curve25519-x86_64.c b/arch/x86/crypto/curve25519-x86_64.c
new file mode 100644
index 0000000..a9edb6f
--- /dev/null
+++ b/arch/x86/crypto/curve25519-x86_64.c
@@ -0,0 +1,1512 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2020 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ * Copyright (c) 2016-2020 INRIA, CMU and Microsoft Corporation
+ */
+
+#include <crypto/curve25519.h>
+#include <crypto/internal/kpp.h>
+
+#include <linux/types.h>
+#include <linux/jump_label.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+
+#include <asm/cpufeature.h>
+#include <asm/processor.h>
+
+static __always_inline u64 eq_mask(u64 a, u64 b)
+{
+	u64 x = a ^ b;
+	u64 minus_x = ~x + (u64)1U;
+	u64 x_or_minus_x = x | minus_x;
+	u64 xnx = x_or_minus_x >> (u32)63U;
+	return xnx - (u64)1U;
+}
+
+static __always_inline u64 gte_mask(u64 a, u64 b)
+{
+	u64 x = a;
+	u64 y = b;
+	u64 x_xor_y = x ^ y;
+	u64 x_sub_y = x - y;
+	u64 x_sub_y_xor_y = x_sub_y ^ y;
+	u64 q = x_xor_y | x_sub_y_xor_y;
+	u64 x_xor_q = x ^ q;
+	u64 x_xor_q_ = x_xor_q >> (u32)63U;
+	return x_xor_q_ - (u64)1U;
+}
+
+/* Computes the addition of four-element f1 with value in f2
+ * and returns the carry (if any) */
+static inline u64 add_scalar(u64 *out, const u64 *f1, u64 f2)
+{
+	u64 carry_r;
+
+	asm volatile(
+		/* Clear registers to propagate the carry bit */
+		"  xor %%r8d, %%r8d;"
+		"  xor %%r9d, %%r9d;"
+		"  xor %%r10d, %%r10d;"
+		"  xor %%r11d, %%r11d;"
+		"  xor %k1, %k1;"
+
+		/* Begin addition chain */
+		"  addq 0(%3), %0;"
+		"  movq %0, 0(%2);"
+		"  adcxq 8(%3), %%r8;"
+		"  movq %%r8, 8(%2);"
+		"  adcxq 16(%3), %%r9;"
+		"  movq %%r9, 16(%2);"
+		"  adcxq 24(%3), %%r10;"
+		"  movq %%r10, 24(%2);"
+
+		/* Return the carry bit in a register */
+		"  adcx %%r11, %1;"
+	: "+&r" (f2), "=&r" (carry_r)
+	: "r" (out), "r" (f1)
+	: "%r8", "%r9", "%r10", "%r11", "memory", "cc"
+	);
+
+	return carry_r;
+}
+
+/* Computes the field addition of two field elements */
+static inline void fadd(u64 *out, const u64 *f1, const u64 *f2)
+{
+	asm volatile(
+		/* Compute the raw addition of f1 + f2 */
+		"  movq 0(%0), %%r8;"
+		"  addq 0(%2), %%r8;"
+		"  movq 8(%0), %%r9;"
+		"  adcxq 8(%2), %%r9;"
+		"  movq 16(%0), %%r10;"
+		"  adcxq 16(%2), %%r10;"
+		"  movq 24(%0), %%r11;"
+		"  adcxq 24(%2), %%r11;"
+
+		/* Wrap the result back into the field */
+
+		/* Step 1: Compute carry*38 */
+		"  mov $0, %%rax;"
+		"  mov $38, %0;"
+		"  cmovc %0, %%rax;"
+
+		/* Step 2: Add carry*38 to the original sum */
+		"  xor %%ecx, %%ecx;"
+		"  add %%rax, %%r8;"
+		"  adcx %%rcx, %%r9;"
+		"  movq %%r9, 8(%1);"
+		"  adcx %%rcx, %%r10;"
+		"  movq %%r10, 16(%1);"
+		"  adcx %%rcx, %%r11;"
+		"  movq %%r11, 24(%1);"
+
+		/* Step 3: Fold the carry bit back in; guaranteed not to carry at this point */
+		"  mov $0, %%rax;"
+		"  cmovc %0, %%rax;"
+		"  add %%rax, %%r8;"
+		"  movq %%r8, 0(%1);"
+	: "+&r" (f2)
+	: "r" (out), "r" (f1)
+	: "%rax", "%rcx", "%r8", "%r9", "%r10", "%r11", "memory", "cc"
+	);
+}
+
+/* Computes the field substraction of two field elements */
+static inline void fsub(u64 *out, const u64 *f1, const u64 *f2)
+{
+	asm volatile(
+		/* Compute the raw substraction of f1-f2 */
+		"  movq 0(%1), %%r8;"
+		"  subq 0(%2), %%r8;"
+		"  movq 8(%1), %%r9;"
+		"  sbbq 8(%2), %%r9;"
+		"  movq 16(%1), %%r10;"
+		"  sbbq 16(%2), %%r10;"
+		"  movq 24(%1), %%r11;"
+		"  sbbq 24(%2), %%r11;"
+
+		/* Wrap the result back into the field */
+
+		/* Step 1: Compute carry*38 */
+		"  mov $0, %%rax;"
+		"  mov $38, %%rcx;"
+		"  cmovc %%rcx, %%rax;"
+
+		/* Step 2: Substract carry*38 from the original difference */
+		"  sub %%rax, %%r8;"
+		"  sbb $0, %%r9;"
+		"  sbb $0, %%r10;"
+		"  sbb $0, %%r11;"
+
+		/* Step 3: Fold the carry bit back in; guaranteed not to carry at this point */
+		"  mov $0, %%rax;"
+		"  cmovc %%rcx, %%rax;"
+		"  sub %%rax, %%r8;"
+
+		/* Store the result */
+		"  movq %%r8, 0(%0);"
+		"  movq %%r9, 8(%0);"
+		"  movq %%r10, 16(%0);"
+		"  movq %%r11, 24(%0);"
+	:
+	: "r" (out), "r" (f1), "r" (f2)
+	: "%rax", "%rcx", "%r8", "%r9", "%r10", "%r11", "memory", "cc"
+	);
+}
+
+/* Computes a field multiplication: out <- f1 * f2
+ * Uses the 8-element buffer tmp for intermediate results */
+static inline void fmul(u64 *out, const u64 *f1, const u64 *f2, u64 *tmp)
+{
+	asm volatile(
+		/* Compute the raw multiplication: tmp <- src1 * src2 */
+
+		/* Compute src1[0] * src2 */
+		"  movq 0(%1), %%rdx;"
+		"  mulxq 0(%3), %%r8, %%r9;"       "  xor %%r10d, %%r10d;"   "  movq %%r8, 0(%0);"
+		"  mulxq 8(%3), %%r10, %%r11;"     "  adox %%r9, %%r10;"     "  movq %%r10, 8(%0);"
+		"  mulxq 16(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"
+		"  mulxq 24(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"
+		/* Compute src1[1] * src2 */
+		"  movq 8(%1), %%rdx;"
+		"  mulxq 0(%3), %%r8, %%r9;"       "  xor %%r10d, %%r10d;"   "  adcxq 8(%0), %%r8;"    "  movq %%r8, 8(%0);"
+		"  mulxq 8(%3), %%r10, %%r11;"     "  adox %%r9, %%r10;"     "  adcx %%rbx, %%r10;"    "  movq %%r10, 16(%0);"
+		"  mulxq 16(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"    "  adcx %%r14, %%rbx;"    "  mov $0, %%r8;"
+		"  mulxq 24(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  adcx %%rax, %%r14;"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"    "  adcx %%r8, %%rax;"
+		/* Compute src1[2] * src2 */
+		"  movq 16(%1), %%rdx;"
+		"  mulxq 0(%3), %%r8, %%r9;"       "  xor %%r10d, %%r10d;"   "  adcxq 16(%0), %%r8;"   "  movq %%r8, 16(%0);"
+		"  mulxq 8(%3), %%r10, %%r11;"     "  adox %%r9, %%r10;"     "  adcx %%rbx, %%r10;"    "  movq %%r10, 24(%0);"
+		"  mulxq 16(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"    "  adcx %%r14, %%rbx;"    "  mov $0, %%r8;"
+		"  mulxq 24(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  adcx %%rax, %%r14;"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"    "  adcx %%r8, %%rax;"
+		/* Compute src1[3] * src2 */
+		"  movq 24(%1), %%rdx;"
+		"  mulxq 0(%3), %%r8, %%r9;"       "  xor %%r10d, %%r10d;"   "  adcxq 24(%0), %%r8;"   "  movq %%r8, 24(%0);"
+		"  mulxq 8(%3), %%r10, %%r11;"     "  adox %%r9, %%r10;"     "  adcx %%rbx, %%r10;"    "  movq %%r10, 32(%0);"
+		"  mulxq 16(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"    "  adcx %%r14, %%rbx;"    "  movq %%rbx, 40(%0);"    "  mov $0, %%r8;"
+		"  mulxq 24(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  adcx %%rax, %%r14;"    "  movq %%r14, 48(%0);"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"    "  adcx %%r8, %%rax;"     "  movq %%rax, 56(%0);"
+		/* Line up pointers */
+		"  mov %0, %1;"
+		"  mov %2, %0;"
+
+		/* Wrap the result back into the field */
+
+		/* Step 1: Compute dst + carry == tmp_hi * 38 + tmp_lo */
+		"  mov $38, %%rdx;"
+		"  mulxq 32(%1), %%r8, %%r13;"
+		"  xor %k3, %k3;"
+		"  adoxq 0(%1), %%r8;"
+		"  mulxq 40(%1), %%r9, %%rbx;"
+		"  adcx %%r13, %%r9;"
+		"  adoxq 8(%1), %%r9;"
+		"  mulxq 48(%1), %%r10, %%r13;"
+		"  adcx %%rbx, %%r10;"
+		"  adoxq 16(%1), %%r10;"
+		"  mulxq 56(%1), %%r11, %%rax;"
+		"  adcx %%r13, %%r11;"
+		"  adoxq 24(%1), %%r11;"
+		"  adcx %3, %%rax;"
+		"  adox %3, %%rax;"
+		"  imul %%rdx, %%rax;"
+
+		/* Step 2: Fold the carry back into dst */
+		"  add %%rax, %%r8;"
+		"  adcx %3, %%r9;"
+		"  movq %%r9, 8(%0);"
+		"  adcx %3, %%r10;"
+		"  movq %%r10, 16(%0);"
+		"  adcx %3, %%r11;"
+		"  movq %%r11, 24(%0);"
+
+		/* Step 3: Fold the carry bit back in; guaranteed not to carry at this point */
+		"  mov $0, %%rax;"
+		"  cmovc %%rdx, %%rax;"
+		"  add %%rax, %%r8;"
+		"  movq %%r8, 0(%0);"
+	: "+&r" (tmp), "+&r" (f1), "+&r" (out), "+&r" (f2)
+	:
+	: "%rax", "%rdx", "%r8", "%r9", "%r10", "%r11", "%rbx", "%r13", "%r14", "memory", "cc"
+	);
+}
+
+/* Computes two field multiplications:
+ * out[0] <- f1[0] * f2[0]
+ * out[1] <- f1[1] * f2[1]
+ * Uses the 16-element buffer tmp for intermediate results. */
+static inline void fmul2(u64 *out, const u64 *f1, const u64 *f2, u64 *tmp)
+{
+	asm volatile(
+		/* Compute the raw multiplication tmp[0] <- f1[0] * f2[0] */
+
+		/* Compute src1[0] * src2 */
+		"  movq 0(%1), %%rdx;"
+		"  mulxq 0(%3), %%r8, %%r9;"       "  xor %%r10d, %%r10d;"   "  movq %%r8, 0(%0);"
+		"  mulxq 8(%3), %%r10, %%r11;"     "  adox %%r9, %%r10;"     "  movq %%r10, 8(%0);"
+		"  mulxq 16(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"
+		"  mulxq 24(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"
+		/* Compute src1[1] * src2 */
+		"  movq 8(%1), %%rdx;"
+		"  mulxq 0(%3), %%r8, %%r9;"       "  xor %%r10d, %%r10d;"   "  adcxq 8(%0), %%r8;"    "  movq %%r8, 8(%0);"
+		"  mulxq 8(%3), %%r10, %%r11;"     "  adox %%r9, %%r10;"     "  adcx %%rbx, %%r10;"    "  movq %%r10, 16(%0);"
+		"  mulxq 16(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"    "  adcx %%r14, %%rbx;"    "  mov $0, %%r8;"
+		"  mulxq 24(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  adcx %%rax, %%r14;"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"    "  adcx %%r8, %%rax;"
+		/* Compute src1[2] * src2 */
+		"  movq 16(%1), %%rdx;"
+		"  mulxq 0(%3), %%r8, %%r9;"       "  xor %%r10d, %%r10d;"   "  adcxq 16(%0), %%r8;"   "  movq %%r8, 16(%0);"
+		"  mulxq 8(%3), %%r10, %%r11;"     "  adox %%r9, %%r10;"     "  adcx %%rbx, %%r10;"    "  movq %%r10, 24(%0);"
+		"  mulxq 16(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"    "  adcx %%r14, %%rbx;"    "  mov $0, %%r8;"
+		"  mulxq 24(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  adcx %%rax, %%r14;"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"    "  adcx %%r8, %%rax;"
+		/* Compute src1[3] * src2 */
+		"  movq 24(%1), %%rdx;"
+		"  mulxq 0(%3), %%r8, %%r9;"       "  xor %%r10d, %%r10d;"   "  adcxq 24(%0), %%r8;"   "  movq %%r8, 24(%0);"
+		"  mulxq 8(%3), %%r10, %%r11;"     "  adox %%r9, %%r10;"     "  adcx %%rbx, %%r10;"    "  movq %%r10, 32(%0);"
+		"  mulxq 16(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"    "  adcx %%r14, %%rbx;"    "  movq %%rbx, 40(%0);"    "  mov $0, %%r8;"
+		"  mulxq 24(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  adcx %%rax, %%r14;"    "  movq %%r14, 48(%0);"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"    "  adcx %%r8, %%rax;"     "  movq %%rax, 56(%0);"
+
+		/* Compute the raw multiplication tmp[1] <- f1[1] * f2[1] */
+
+		/* Compute src1[0] * src2 */
+		"  movq 32(%1), %%rdx;"
+		"  mulxq 32(%3), %%r8, %%r9;"      "  xor %%r10d, %%r10d;"   "  movq %%r8, 64(%0);"
+		"  mulxq 40(%3), %%r10, %%r11;"    "  adox %%r9, %%r10;"     "  movq %%r10, 72(%0);"
+		"  mulxq 48(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"
+		"  mulxq 56(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"
+		/* Compute src1[1] * src2 */
+		"  movq 40(%1), %%rdx;"
+		"  mulxq 32(%3), %%r8, %%r9;"      "  xor %%r10d, %%r10d;"   "  adcxq 72(%0), %%r8;"   "  movq %%r8, 72(%0);"
+		"  mulxq 40(%3), %%r10, %%r11;"    "  adox %%r9, %%r10;"     "  adcx %%rbx, %%r10;"    "  movq %%r10, 80(%0);"
+		"  mulxq 48(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"    "  adcx %%r14, %%rbx;"    "  mov $0, %%r8;"
+		"  mulxq 56(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  adcx %%rax, %%r14;"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"    "  adcx %%r8, %%rax;"
+		/* Compute src1[2] * src2 */
+		"  movq 48(%1), %%rdx;"
+		"  mulxq 32(%3), %%r8, %%r9;"      "  xor %%r10d, %%r10d;"   "  adcxq 80(%0), %%r8;"   "  movq %%r8, 80(%0);"
+		"  mulxq 40(%3), %%r10, %%r11;"    "  adox %%r9, %%r10;"     "  adcx %%rbx, %%r10;"    "  movq %%r10, 88(%0);"
+		"  mulxq 48(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"    "  adcx %%r14, %%rbx;"    "  mov $0, %%r8;"
+		"  mulxq 56(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  adcx %%rax, %%r14;"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"    "  adcx %%r8, %%rax;"
+		/* Compute src1[3] * src2 */
+		"  movq 56(%1), %%rdx;"
+		"  mulxq 32(%3), %%r8, %%r9;"      "  xor %%r10d, %%r10d;"   "  adcxq 88(%0), %%r8;"   "  movq %%r8, 88(%0);"
+		"  mulxq 40(%3), %%r10, %%r11;"    "  adox %%r9, %%r10;"     "  adcx %%rbx, %%r10;"    "  movq %%r10, 96(%0);"
+		"  mulxq 48(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"    "  adcx %%r14, %%rbx;"    "  movq %%rbx, 104(%0);"    "  mov $0, %%r8;"
+		"  mulxq 56(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  adcx %%rax, %%r14;"    "  movq %%r14, 112(%0);"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"    "  adcx %%r8, %%rax;"     "  movq %%rax, 120(%0);"
+		/* Line up pointers */
+		"  mov %0, %1;"
+		"  mov %2, %0;"
+
+		/* Wrap the results back into the field */
+
+		/* Step 1: Compute dst + carry == tmp_hi * 38 + tmp_lo */
+		"  mov $38, %%rdx;"
+		"  mulxq 32(%1), %%r8, %%r13;"
+		"  xor %k3, %k3;"
+		"  adoxq 0(%1), %%r8;"
+		"  mulxq 40(%1), %%r9, %%rbx;"
+		"  adcx %%r13, %%r9;"
+		"  adoxq 8(%1), %%r9;"
+		"  mulxq 48(%1), %%r10, %%r13;"
+		"  adcx %%rbx, %%r10;"
+		"  adoxq 16(%1), %%r10;"
+		"  mulxq 56(%1), %%r11, %%rax;"
+		"  adcx %%r13, %%r11;"
+		"  adoxq 24(%1), %%r11;"
+		"  adcx %3, %%rax;"
+		"  adox %3, %%rax;"
+		"  imul %%rdx, %%rax;"
+
+		/* Step 2: Fold the carry back into dst */
+		"  add %%rax, %%r8;"
+		"  adcx %3, %%r9;"
+		"  movq %%r9, 8(%0);"
+		"  adcx %3, %%r10;"
+		"  movq %%r10, 16(%0);"
+		"  adcx %3, %%r11;"
+		"  movq %%r11, 24(%0);"
+
+		/* Step 3: Fold the carry bit back in; guaranteed not to carry at this point */
+		"  mov $0, %%rax;"
+		"  cmovc %%rdx, %%rax;"
+		"  add %%rax, %%r8;"
+		"  movq %%r8, 0(%0);"
+
+		/* Step 1: Compute dst + carry == tmp_hi * 38 + tmp_lo */
+		"  mov $38, %%rdx;"
+		"  mulxq 96(%1), %%r8, %%r13;"
+		"  xor %k3, %k3;"
+		"  adoxq 64(%1), %%r8;"
+		"  mulxq 104(%1), %%r9, %%rbx;"
+		"  adcx %%r13, %%r9;"
+		"  adoxq 72(%1), %%r9;"
+		"  mulxq 112(%1), %%r10, %%r13;"
+		"  adcx %%rbx, %%r10;"
+		"  adoxq 80(%1), %%r10;"
+		"  mulxq 120(%1), %%r11, %%rax;"
+		"  adcx %%r13, %%r11;"
+		"  adoxq 88(%1), %%r11;"
+		"  adcx %3, %%rax;"
+		"  adox %3, %%rax;"
+		"  imul %%rdx, %%rax;"
+
+		/* Step 2: Fold the carry back into dst */
+		"  add %%rax, %%r8;"
+		"  adcx %3, %%r9;"
+		"  movq %%r9, 40(%0);"
+		"  adcx %3, %%r10;"
+		"  movq %%r10, 48(%0);"
+		"  adcx %3, %%r11;"
+		"  movq %%r11, 56(%0);"
+
+		/* Step 3: Fold the carry bit back in; guaranteed not to carry at this point */
+		"  mov $0, %%rax;"
+		"  cmovc %%rdx, %%rax;"
+		"  add %%rax, %%r8;"
+		"  movq %%r8, 32(%0);"
+	: "+&r" (tmp), "+&r" (f1), "+&r" (out), "+&r" (f2)
+	:
+	: "%rax", "%rdx", "%r8", "%r9", "%r10", "%r11", "%rbx", "%r13", "%r14", "memory", "cc"
+	);
+}
+
+/* Computes the field multiplication of four-element f1 with value in f2 */
+static inline void fmul_scalar(u64 *out, const u64 *f1, u64 f2)
+{
+	register u64 f2_r asm("rdx") = f2;
+
+	asm volatile(
+		/* Compute the raw multiplication of f1*f2 */
+		"  mulxq 0(%2), %%r8, %%rcx;"      /* f1[0]*f2 */
+		"  mulxq 8(%2), %%r9, %%rbx;"      /* f1[1]*f2 */
+		"  add %%rcx, %%r9;"
+		"  mov $0, %%rcx;"
+		"  mulxq 16(%2), %%r10, %%r13;"    /* f1[2]*f2 */
+		"  adcx %%rbx, %%r10;"
+		"  mulxq 24(%2), %%r11, %%rax;"    /* f1[3]*f2 */
+		"  adcx %%r13, %%r11;"
+		"  adcx %%rcx, %%rax;"
+
+		/* Wrap the result back into the field */
+
+		/* Step 1: Compute carry*38 */
+		"  mov $38, %%rdx;"
+		"  imul %%rdx, %%rax;"
+
+		/* Step 2: Fold the carry back into dst */
+		"  add %%rax, %%r8;"
+		"  adcx %%rcx, %%r9;"
+		"  movq %%r9, 8(%1);"
+		"  adcx %%rcx, %%r10;"
+		"  movq %%r10, 16(%1);"
+		"  adcx %%rcx, %%r11;"
+		"  movq %%r11, 24(%1);"
+
+		/* Step 3: Fold the carry bit back in; guaranteed not to carry at this point */
+		"  mov $0, %%rax;"
+		"  cmovc %%rdx, %%rax;"
+		"  add %%rax, %%r8;"
+		"  movq %%r8, 0(%1);"
+	: "+&r" (f2_r)
+	: "r" (out), "r" (f1)
+	: "%rax", "%rcx", "%r8", "%r9", "%r10", "%r11", "%rbx", "%r13", "memory", "cc"
+	);
+}
+
+/* Computes p1 <- bit ? p2 : p1 in constant time */
+static inline void cswap2(u64 bit, const u64 *p1, const u64 *p2)
+{
+	asm volatile(
+		/* Invert the polarity of bit to match cmov expectations */
+		"  add $18446744073709551615, %0;"
+
+		/* cswap p1[0], p2[0] */
+		"  movq 0(%1), %%r8;"
+		"  movq 0(%2), %%r9;"
+		"  mov %%r8, %%r10;"
+		"  cmovc %%r9, %%r8;"
+		"  cmovc %%r10, %%r9;"
+		"  movq %%r8, 0(%1);"
+		"  movq %%r9, 0(%2);"
+
+		/* cswap p1[1], p2[1] */
+		"  movq 8(%1), %%r8;"
+		"  movq 8(%2), %%r9;"
+		"  mov %%r8, %%r10;"
+		"  cmovc %%r9, %%r8;"
+		"  cmovc %%r10, %%r9;"
+		"  movq %%r8, 8(%1);"
+		"  movq %%r9, 8(%2);"
+
+		/* cswap p1[2], p2[2] */
+		"  movq 16(%1), %%r8;"
+		"  movq 16(%2), %%r9;"
+		"  mov %%r8, %%r10;"
+		"  cmovc %%r9, %%r8;"
+		"  cmovc %%r10, %%r9;"
+		"  movq %%r8, 16(%1);"
+		"  movq %%r9, 16(%2);"
+
+		/* cswap p1[3], p2[3] */
+		"  movq 24(%1), %%r8;"
+		"  movq 24(%2), %%r9;"
+		"  mov %%r8, %%r10;"
+		"  cmovc %%r9, %%r8;"
+		"  cmovc %%r10, %%r9;"
+		"  movq %%r8, 24(%1);"
+		"  movq %%r9, 24(%2);"
+
+		/* cswap p1[4], p2[4] */
+		"  movq 32(%1), %%r8;"
+		"  movq 32(%2), %%r9;"
+		"  mov %%r8, %%r10;"
+		"  cmovc %%r9, %%r8;"
+		"  cmovc %%r10, %%r9;"
+		"  movq %%r8, 32(%1);"
+		"  movq %%r9, 32(%2);"
+
+		/* cswap p1[5], p2[5] */
+		"  movq 40(%1), %%r8;"
+		"  movq 40(%2), %%r9;"
+		"  mov %%r8, %%r10;"
+		"  cmovc %%r9, %%r8;"
+		"  cmovc %%r10, %%r9;"
+		"  movq %%r8, 40(%1);"
+		"  movq %%r9, 40(%2);"
+
+		/* cswap p1[6], p2[6] */
+		"  movq 48(%1), %%r8;"
+		"  movq 48(%2), %%r9;"
+		"  mov %%r8, %%r10;"
+		"  cmovc %%r9, %%r8;"
+		"  cmovc %%r10, %%r9;"
+		"  movq %%r8, 48(%1);"
+		"  movq %%r9, 48(%2);"
+
+		/* cswap p1[7], p2[7] */
+		"  movq 56(%1), %%r8;"
+		"  movq 56(%2), %%r9;"
+		"  mov %%r8, %%r10;"
+		"  cmovc %%r9, %%r8;"
+		"  cmovc %%r10, %%r9;"
+		"  movq %%r8, 56(%1);"
+		"  movq %%r9, 56(%2);"
+	: "+&r" (bit)
+	: "r" (p1), "r" (p2)
+	: "%r8", "%r9", "%r10", "memory", "cc"
+	);
+}
+
+/* Computes the square of a field element: out <- f * f
+ * Uses the 8-element buffer tmp for intermediate results */
+static inline void fsqr(u64 *out, const u64 *f, u64 *tmp)
+{
+	asm volatile(
+		/* Compute the raw multiplication: tmp <- f * f */
+
+		/* Step 1: Compute all partial products */
+		"  movq 0(%1), %%rdx;"                                       /* f[0] */
+		"  mulxq 8(%1), %%r8, %%r14;"      "  xor %%r15d, %%r15d;"   /* f[1]*f[0] */
+		"  mulxq 16(%1), %%r9, %%r10;"     "  adcx %%r14, %%r9;"     /* f[2]*f[0] */
+		"  mulxq 24(%1), %%rax, %%rcx;"    "  adcx %%rax, %%r10;"    /* f[3]*f[0] */
+		"  movq 24(%1), %%rdx;"                                      /* f[3] */
+		"  mulxq 8(%1), %%r11, %%rbx;"     "  adcx %%rcx, %%r11;"    /* f[1]*f[3] */
+		"  mulxq 16(%1), %%rax, %%r13;"    "  adcx %%rax, %%rbx;"    /* f[2]*f[3] */
+		"  movq 8(%1), %%rdx;"             "  adcx %%r15, %%r13;"    /* f1 */
+		"  mulxq 16(%1), %%rax, %%rcx;"    "  mov $0, %%r14;"        /* f[2]*f[1] */
+
+		/* Step 2: Compute two parallel carry chains */
+		"  xor %%r15d, %%r15d;"
+		"  adox %%rax, %%r10;"
+		"  adcx %%r8, %%r8;"
+		"  adox %%rcx, %%r11;"
+		"  adcx %%r9, %%r9;"
+		"  adox %%r15, %%rbx;"
+		"  adcx %%r10, %%r10;"
+		"  adox %%r15, %%r13;"
+		"  adcx %%r11, %%r11;"
+		"  adox %%r15, %%r14;"
+		"  adcx %%rbx, %%rbx;"
+		"  adcx %%r13, %%r13;"
+		"  adcx %%r14, %%r14;"
+
+		/* Step 3: Compute intermediate squares */
+		"  movq 0(%1), %%rdx;"     "  mulx %%rdx, %%rax, %%rcx;"    /* f[0]^2 */
+		                           "  movq %%rax, 0(%0);"
+		"  add %%rcx, %%r8;"       "  movq %%r8, 8(%0);"
+		"  movq 8(%1), %%rdx;"     "  mulx %%rdx, %%rax, %%rcx;"    /* f[1]^2 */
+		"  adcx %%rax, %%r9;"      "  movq %%r9, 16(%0);"
+		"  adcx %%rcx, %%r10;"     "  movq %%r10, 24(%0);"
+		"  movq 16(%1), %%rdx;"    "  mulx %%rdx, %%rax, %%rcx;"    /* f[2]^2 */
+		"  adcx %%rax, %%r11;"     "  movq %%r11, 32(%0);"
+		"  adcx %%rcx, %%rbx;"     "  movq %%rbx, 40(%0);"
+		"  movq 24(%1), %%rdx;"    "  mulx %%rdx, %%rax, %%rcx;"    /* f[3]^2 */
+		"  adcx %%rax, %%r13;"     "  movq %%r13, 48(%0);"
+		"  adcx %%rcx, %%r14;"     "  movq %%r14, 56(%0);"
+
+		/* Line up pointers */
+		"  mov %0, %1;"
+		"  mov %2, %0;"
+
+		/* Wrap the result back into the field */
+
+		/* Step 1: Compute dst + carry == tmp_hi * 38 + tmp_lo */
+		"  mov $38, %%rdx;"
+		"  mulxq 32(%1), %%r8, %%r13;"
+		"  xor %%ecx, %%ecx;"
+		"  adoxq 0(%1), %%r8;"
+		"  mulxq 40(%1), %%r9, %%rbx;"
+		"  adcx %%r13, %%r9;"
+		"  adoxq 8(%1), %%r9;"
+		"  mulxq 48(%1), %%r10, %%r13;"
+		"  adcx %%rbx, %%r10;"
+		"  adoxq 16(%1), %%r10;"
+		"  mulxq 56(%1), %%r11, %%rax;"
+		"  adcx %%r13, %%r11;"
+		"  adoxq 24(%1), %%r11;"
+		"  adcx %%rcx, %%rax;"
+		"  adox %%rcx, %%rax;"
+		"  imul %%rdx, %%rax;"
+
+		/* Step 2: Fold the carry back into dst */
+		"  add %%rax, %%r8;"
+		"  adcx %%rcx, %%r9;"
+		"  movq %%r9, 8(%0);"
+		"  adcx %%rcx, %%r10;"
+		"  movq %%r10, 16(%0);"
+		"  adcx %%rcx, %%r11;"
+		"  movq %%r11, 24(%0);"
+
+		/* Step 3: Fold the carry bit back in; guaranteed not to carry at this point */
+		"  mov $0, %%rax;"
+		"  cmovc %%rdx, %%rax;"
+		"  add %%rax, %%r8;"
+		"  movq %%r8, 0(%0);"
+	: "+&r" (tmp), "+&r" (f), "+&r" (out)
+	:
+	: "%rax", "%rcx", "%rdx", "%r8", "%r9", "%r10", "%r11", "%rbx", "%r13", "%r14", "%r15", "memory", "cc"
+	);
+}
+
+/* Computes two field squarings:
+ * out[0] <- f[0] * f[0]
+ * out[1] <- f[1] * f[1]
+ * Uses the 16-element buffer tmp for intermediate results */
+static inline void fsqr2(u64 *out, const u64 *f, u64 *tmp)
+{
+	asm volatile(
+		/* Step 1: Compute all partial products */
+		"  movq 0(%1), %%rdx;"                                       /* f[0] */
+		"  mulxq 8(%1), %%r8, %%r14;"      "  xor %%r15d, %%r15d;"   /* f[1]*f[0] */
+		"  mulxq 16(%1), %%r9, %%r10;"     "  adcx %%r14, %%r9;"     /* f[2]*f[0] */
+		"  mulxq 24(%1), %%rax, %%rcx;"    "  adcx %%rax, %%r10;"    /* f[3]*f[0] */
+		"  movq 24(%1), %%rdx;"                                      /* f[3] */
+		"  mulxq 8(%1), %%r11, %%rbx;"     "  adcx %%rcx, %%r11;"    /* f[1]*f[3] */
+		"  mulxq 16(%1), %%rax, %%r13;"    "  adcx %%rax, %%rbx;"    /* f[2]*f[3] */
+		"  movq 8(%1), %%rdx;"             "  adcx %%r15, %%r13;"    /* f1 */
+		"  mulxq 16(%1), %%rax, %%rcx;"    "  mov $0, %%r14;"        /* f[2]*f[1] */
+
+		/* Step 2: Compute two parallel carry chains */
+		"  xor %%r15d, %%r15d;"
+		"  adox %%rax, %%r10;"
+		"  adcx %%r8, %%r8;"
+		"  adox %%rcx, %%r11;"
+		"  adcx %%r9, %%r9;"
+		"  adox %%r15, %%rbx;"
+		"  adcx %%r10, %%r10;"
+		"  adox %%r15, %%r13;"
+		"  adcx %%r11, %%r11;"
+		"  adox %%r15, %%r14;"
+		"  adcx %%rbx, %%rbx;"
+		"  adcx %%r13, %%r13;"
+		"  adcx %%r14, %%r14;"
+
+		/* Step 3: Compute intermediate squares */
+		"  movq 0(%1), %%rdx;"     "  mulx %%rdx, %%rax, %%rcx;"    /* f[0]^2 */
+		                           "  movq %%rax, 0(%0);"
+		"  add %%rcx, %%r8;"       "  movq %%r8, 8(%0);"
+		"  movq 8(%1), %%rdx;"     "  mulx %%rdx, %%rax, %%rcx;"    /* f[1]^2 */
+		"  adcx %%rax, %%r9;"      "  movq %%r9, 16(%0);"
+		"  adcx %%rcx, %%r10;"     "  movq %%r10, 24(%0);"
+		"  movq 16(%1), %%rdx;"    "  mulx %%rdx, %%rax, %%rcx;"    /* f[2]^2 */
+		"  adcx %%rax, %%r11;"     "  movq %%r11, 32(%0);"
+		"  adcx %%rcx, %%rbx;"     "  movq %%rbx, 40(%0);"
+		"  movq 24(%1), %%rdx;"    "  mulx %%rdx, %%rax, %%rcx;"    /* f[3]^2 */
+		"  adcx %%rax, %%r13;"     "  movq %%r13, 48(%0);"
+		"  adcx %%rcx, %%r14;"     "  movq %%r14, 56(%0);"
+
+		/* Step 1: Compute all partial products */
+		"  movq 32(%1), %%rdx;"                                       /* f[0] */
+		"  mulxq 40(%1), %%r8, %%r14;"     "  xor %%r15d, %%r15d;"   /* f[1]*f[0] */
+		"  mulxq 48(%1), %%r9, %%r10;"     "  adcx %%r14, %%r9;"     /* f[2]*f[0] */
+		"  mulxq 56(%1), %%rax, %%rcx;"    "  adcx %%rax, %%r10;"    /* f[3]*f[0] */
+		"  movq 56(%1), %%rdx;"                                      /* f[3] */
+		"  mulxq 40(%1), %%r11, %%rbx;"     "  adcx %%rcx, %%r11;"    /* f[1]*f[3] */
+		"  mulxq 48(%1), %%rax, %%r13;"    "  adcx %%rax, %%rbx;"    /* f[2]*f[3] */
+		"  movq 40(%1), %%rdx;"             "  adcx %%r15, %%r13;"    /* f1 */
+		"  mulxq 48(%1), %%rax, %%rcx;"    "  mov $0, %%r14;"        /* f[2]*f[1] */
+
+		/* Step 2: Compute two parallel carry chains */
+		"  xor %%r15d, %%r15d;"
+		"  adox %%rax, %%r10;"
+		"  adcx %%r8, %%r8;"
+		"  adox %%rcx, %%r11;"
+		"  adcx %%r9, %%r9;"
+		"  adox %%r15, %%rbx;"
+		"  adcx %%r10, %%r10;"
+		"  adox %%r15, %%r13;"
+		"  adcx %%r11, %%r11;"
+		"  adox %%r15, %%r14;"
+		"  adcx %%rbx, %%rbx;"
+		"  adcx %%r13, %%r13;"
+		"  adcx %%r14, %%r14;"
+
+		/* Step 3: Compute intermediate squares */
+		"  movq 32(%1), %%rdx;"     "  mulx %%rdx, %%rax, %%rcx;"    /* f[0]^2 */
+		                           "  movq %%rax, 64(%0);"
+		"  add %%rcx, %%r8;"       "  movq %%r8, 72(%0);"
+		"  movq 40(%1), %%rdx;"     "  mulx %%rdx, %%rax, %%rcx;"    /* f[1]^2 */
+		"  adcx %%rax, %%r9;"      "  movq %%r9, 80(%0);"
+		"  adcx %%rcx, %%r10;"     "  movq %%r10, 88(%0);"
+		"  movq 48(%1), %%rdx;"    "  mulx %%rdx, %%rax, %%rcx;"    /* f[2]^2 */
+		"  adcx %%rax, %%r11;"     "  movq %%r11, 96(%0);"
+		"  adcx %%rcx, %%rbx;"     "  movq %%rbx, 104(%0);"
+		"  movq 56(%1), %%rdx;"    "  mulx %%rdx, %%rax, %%rcx;"    /* f[3]^2 */
+		"  adcx %%rax, %%r13;"     "  movq %%r13, 112(%0);"
+		"  adcx %%rcx, %%r14;"     "  movq %%r14, 120(%0);"
+
+		/* Line up pointers */
+		"  mov %0, %1;"
+		"  mov %2, %0;"
+
+		/* Step 1: Compute dst + carry == tmp_hi * 38 + tmp_lo */
+		"  mov $38, %%rdx;"
+		"  mulxq 32(%1), %%r8, %%r13;"
+		"  xor %%ecx, %%ecx;"
+		"  adoxq 0(%1), %%r8;"
+		"  mulxq 40(%1), %%r9, %%rbx;"
+		"  adcx %%r13, %%r9;"
+		"  adoxq 8(%1), %%r9;"
+		"  mulxq 48(%1), %%r10, %%r13;"
+		"  adcx %%rbx, %%r10;"
+		"  adoxq 16(%1), %%r10;"
+		"  mulxq 56(%1), %%r11, %%rax;"
+		"  adcx %%r13, %%r11;"
+		"  adoxq 24(%1), %%r11;"
+		"  adcx %%rcx, %%rax;"
+		"  adox %%rcx, %%rax;"
+		"  imul %%rdx, %%rax;"
+
+		/* Step 2: Fold the carry back into dst */
+		"  add %%rax, %%r8;"
+		"  adcx %%rcx, %%r9;"
+		"  movq %%r9, 8(%0);"
+		"  adcx %%rcx, %%r10;"
+		"  movq %%r10, 16(%0);"
+		"  adcx %%rcx, %%r11;"
+		"  movq %%r11, 24(%0);"
+
+		/* Step 3: Fold the carry bit back in; guaranteed not to carry at this point */
+		"  mov $0, %%rax;"
+		"  cmovc %%rdx, %%rax;"
+		"  add %%rax, %%r8;"
+		"  movq %%r8, 0(%0);"
+
+		/* Step 1: Compute dst + carry == tmp_hi * 38 + tmp_lo */
+		"  mov $38, %%rdx;"
+		"  mulxq 96(%1), %%r8, %%r13;"
+		"  xor %%ecx, %%ecx;"
+		"  adoxq 64(%1), %%r8;"
+		"  mulxq 104(%1), %%r9, %%rbx;"
+		"  adcx %%r13, %%r9;"
+		"  adoxq 72(%1), %%r9;"
+		"  mulxq 112(%1), %%r10, %%r13;"
+		"  adcx %%rbx, %%r10;"
+		"  adoxq 80(%1), %%r10;"
+		"  mulxq 120(%1), %%r11, %%rax;"
+		"  adcx %%r13, %%r11;"
+		"  adoxq 88(%1), %%r11;"
+		"  adcx %%rcx, %%rax;"
+		"  adox %%rcx, %%rax;"
+		"  imul %%rdx, %%rax;"
+
+		/* Step 2: Fold the carry back into dst */
+		"  add %%rax, %%r8;"
+		"  adcx %%rcx, %%r9;"
+		"  movq %%r9, 40(%0);"
+		"  adcx %%rcx, %%r10;"
+		"  movq %%r10, 48(%0);"
+		"  adcx %%rcx, %%r11;"
+		"  movq %%r11, 56(%0);"
+
+		/* Step 3: Fold the carry bit back in; guaranteed not to carry at this point */
+		"  mov $0, %%rax;"
+		"  cmovc %%rdx, %%rax;"
+		"  add %%rax, %%r8;"
+		"  movq %%r8, 32(%0);"
+	: "+&r" (tmp), "+&r" (f), "+&r" (out)
+	:
+	: "%rax", "%rcx", "%rdx", "%r8", "%r9", "%r10", "%r11", "%rbx", "%r13", "%r14", "%r15", "memory", "cc"
+	);
+}
+
+static void point_add_and_double(u64 *q, u64 *p01_tmp1, u64 *tmp2)
+{
+	u64 *nq = p01_tmp1;
+	u64 *nq_p1 = p01_tmp1 + (u32)8U;
+	u64 *tmp1 = p01_tmp1 + (u32)16U;
+	u64 *x1 = q;
+	u64 *x2 = nq;
+	u64 *z2 = nq + (u32)4U;
+	u64 *z3 = nq_p1 + (u32)4U;
+	u64 *a = tmp1;
+	u64 *b = tmp1 + (u32)4U;
+	u64 *ab = tmp1;
+	u64 *dc = tmp1 + (u32)8U;
+	u64 *x3;
+	u64 *z31;
+	u64 *d0;
+	u64 *c0;
+	u64 *a1;
+	u64 *b1;
+	u64 *d;
+	u64 *c;
+	u64 *ab1;
+	u64 *dc1;
+	fadd(a, x2, z2);
+	fsub(b, x2, z2);
+	x3 = nq_p1;
+	z31 = nq_p1 + (u32)4U;
+	d0 = dc;
+	c0 = dc + (u32)4U;
+	fadd(c0, x3, z31);
+	fsub(d0, x3, z31);
+	fmul2(dc, dc, ab, tmp2);
+	fadd(x3, d0, c0);
+	fsub(z31, d0, c0);
+	a1 = tmp1;
+	b1 = tmp1 + (u32)4U;
+	d = tmp1 + (u32)8U;
+	c = tmp1 + (u32)12U;
+	ab1 = tmp1;
+	dc1 = tmp1 + (u32)8U;
+	fsqr2(dc1, ab1, tmp2);
+	fsqr2(nq_p1, nq_p1, tmp2);
+	a1[0U] = c[0U];
+	a1[1U] = c[1U];
+	a1[2U] = c[2U];
+	a1[3U] = c[3U];
+	fsub(c, d, c);
+	fmul_scalar(b1, c, (u64)121665U);
+	fadd(b1, b1, d);
+	fmul2(nq, dc1, ab1, tmp2);
+	fmul(z3, z3, x1, tmp2);
+}
+
+static void point_double(u64 *nq, u64 *tmp1, u64 *tmp2)
+{
+	u64 *x2 = nq;
+	u64 *z2 = nq + (u32)4U;
+	u64 *a = tmp1;
+	u64 *b = tmp1 + (u32)4U;
+	u64 *d = tmp1 + (u32)8U;
+	u64 *c = tmp1 + (u32)12U;
+	u64 *ab = tmp1;
+	u64 *dc = tmp1 + (u32)8U;
+	fadd(a, x2, z2);
+	fsub(b, x2, z2);
+	fsqr2(dc, ab, tmp2);
+	a[0U] = c[0U];
+	a[1U] = c[1U];
+	a[2U] = c[2U];
+	a[3U] = c[3U];
+	fsub(c, d, c);
+	fmul_scalar(b, c, (u64)121665U);
+	fadd(b, b, d);
+	fmul2(nq, dc, ab, tmp2);
+}
+
+static void montgomery_ladder(u64 *out, const u8 *key, u64 *init1)
+{
+	u64 tmp2[16U] = { 0U };
+	u64 p01_tmp1_swap[33U] = { 0U };
+	u64 *p0 = p01_tmp1_swap;
+	u64 *p01 = p01_tmp1_swap;
+	u64 *p03 = p01;
+	u64 *p11 = p01 + (u32)8U;
+	u64 *x0;
+	u64 *z0;
+	u64 *p01_tmp1;
+	u64 *p01_tmp11;
+	u64 *nq10;
+	u64 *nq_p11;
+	u64 *swap1;
+	u64 sw0;
+	u64 *nq1;
+	u64 *tmp1;
+	memcpy(p11, init1, (u32)8U * sizeof(init1[0U]));
+	x0 = p03;
+	z0 = p03 + (u32)4U;
+	x0[0U] = (u64)1U;
+	x0[1U] = (u64)0U;
+	x0[2U] = (u64)0U;
+	x0[3U] = (u64)0U;
+	z0[0U] = (u64)0U;
+	z0[1U] = (u64)0U;
+	z0[2U] = (u64)0U;
+	z0[3U] = (u64)0U;
+	p01_tmp1 = p01_tmp1_swap;
+	p01_tmp11 = p01_tmp1_swap;
+	nq10 = p01_tmp1_swap;
+	nq_p11 = p01_tmp1_swap + (u32)8U;
+	swap1 = p01_tmp1_swap + (u32)32U;
+	cswap2((u64)1U, nq10, nq_p11);
+	point_add_and_double(init1, p01_tmp11, tmp2);
+	swap1[0U] = (u64)1U;
+	{
+		u32 i;
+		for (i = (u32)0U; i < (u32)251U; i = i + (u32)1U) {
+			u64 *p01_tmp12 = p01_tmp1_swap;
+			u64 *swap2 = p01_tmp1_swap + (u32)32U;
+			u64 *nq2 = p01_tmp12;
+			u64 *nq_p12 = p01_tmp12 + (u32)8U;
+			u64 bit = (u64)(key[((u32)253U - i) / (u32)8U] >> ((u32)253U - i) % (u32)8U & (u8)1U);
+			u64 sw = swap2[0U] ^ bit;
+			cswap2(sw, nq2, nq_p12);
+			point_add_and_double(init1, p01_tmp12, tmp2);
+			swap2[0U] = bit;
+		}
+	}
+	sw0 = swap1[0U];
+	cswap2(sw0, nq10, nq_p11);
+	nq1 = p01_tmp1;
+	tmp1 = p01_tmp1 + (u32)16U;
+	point_double(nq1, tmp1, tmp2);
+	point_double(nq1, tmp1, tmp2);
+	point_double(nq1, tmp1, tmp2);
+	memcpy(out, p0, (u32)8U * sizeof(p0[0U]));
+
+	memzero_explicit(tmp2, sizeof(tmp2));
+	memzero_explicit(p01_tmp1_swap, sizeof(p01_tmp1_swap));
+}
+
+static void fsquare_times(u64 *o, const u64 *inp, u64 *tmp, u32 n1)
+{
+	u32 i;
+	fsqr(o, inp, tmp);
+	for (i = (u32)0U; i < n1 - (u32)1U; i = i + (u32)1U)
+		fsqr(o, o, tmp);
+}
+
+static void finv(u64 *o, const u64 *i, u64 *tmp)
+{
+	u64 t1[16U] = { 0U };
+	u64 *a0 = t1;
+	u64 *b = t1 + (u32)4U;
+	u64 *c = t1 + (u32)8U;
+	u64 *t00 = t1 + (u32)12U;
+	u64 *tmp1 = tmp;
+	u64 *a;
+	u64 *t0;
+	fsquare_times(a0, i, tmp1, (u32)1U);
+	fsquare_times(t00, a0, tmp1, (u32)2U);
+	fmul(b, t00, i, tmp);
+	fmul(a0, b, a0, tmp);
+	fsquare_times(t00, a0, tmp1, (u32)1U);
+	fmul(b, t00, b, tmp);
+	fsquare_times(t00, b, tmp1, (u32)5U);
+	fmul(b, t00, b, tmp);
+	fsquare_times(t00, b, tmp1, (u32)10U);
+	fmul(c, t00, b, tmp);
+	fsquare_times(t00, c, tmp1, (u32)20U);
+	fmul(t00, t00, c, tmp);
+	fsquare_times(t00, t00, tmp1, (u32)10U);
+	fmul(b, t00, b, tmp);
+	fsquare_times(t00, b, tmp1, (u32)50U);
+	fmul(c, t00, b, tmp);
+	fsquare_times(t00, c, tmp1, (u32)100U);
+	fmul(t00, t00, c, tmp);
+	fsquare_times(t00, t00, tmp1, (u32)50U);
+	fmul(t00, t00, b, tmp);
+	fsquare_times(t00, t00, tmp1, (u32)5U);
+	a = t1;
+	t0 = t1 + (u32)12U;
+	fmul(o, t0, a, tmp);
+}
+
+static void store_felem(u64 *b, u64 *f)
+{
+	u64 f30 = f[3U];
+	u64 top_bit0 = f30 >> (u32)63U;
+	u64 f31;
+	u64 top_bit;
+	u64 f0;
+	u64 f1;
+	u64 f2;
+	u64 f3;
+	u64 m0;
+	u64 m1;
+	u64 m2;
+	u64 m3;
+	u64 mask;
+	u64 f0_;
+	u64 f1_;
+	u64 f2_;
+	u64 f3_;
+	u64 o0;
+	u64 o1;
+	u64 o2;
+	u64 o3;
+	f[3U] = f30 & (u64)0x7fffffffffffffffU;
+	add_scalar(f, f, (u64)19U * top_bit0);
+	f31 = f[3U];
+	top_bit = f31 >> (u32)63U;
+	f[3U] = f31 & (u64)0x7fffffffffffffffU;
+	add_scalar(f, f, (u64)19U * top_bit);
+	f0 = f[0U];
+	f1 = f[1U];
+	f2 = f[2U];
+	f3 = f[3U];
+	m0 = gte_mask(f0, (u64)0xffffffffffffffedU);
+	m1 = eq_mask(f1, (u64)0xffffffffffffffffU);
+	m2 = eq_mask(f2, (u64)0xffffffffffffffffU);
+	m3 = eq_mask(f3, (u64)0x7fffffffffffffffU);
+	mask = ((m0 & m1) & m2) & m3;
+	f0_ = f0 - (mask & (u64)0xffffffffffffffedU);
+	f1_ = f1 - (mask & (u64)0xffffffffffffffffU);
+	f2_ = f2 - (mask & (u64)0xffffffffffffffffU);
+	f3_ = f3 - (mask & (u64)0x7fffffffffffffffU);
+	o0 = f0_;
+	o1 = f1_;
+	o2 = f2_;
+	o3 = f3_;
+	b[0U] = o0;
+	b[1U] = o1;
+	b[2U] = o2;
+	b[3U] = o3;
+}
+
+static void encode_point(u8 *o, const u64 *i)
+{
+	const u64 *x = i;
+	const u64 *z = i + (u32)4U;
+	u64 tmp[4U] = { 0U };
+	u64 tmp_w[16U] = { 0U };
+	finv(tmp, z, tmp_w);
+	fmul(tmp, tmp, x, tmp_w);
+	store_felem((u64 *)o, tmp);
+}
+
+static void curve25519_ever64(u8 *out, const u8 *priv, const u8 *pub)
+{
+	u64 init1[8U] = { 0U };
+	u64 tmp[4U] = { 0U };
+	u64 tmp3;
+	u64 *x;
+	u64 *z;
+	{
+		u32 i;
+		for (i = (u32)0U; i < (u32)4U; i = i + (u32)1U) {
+			u64 *os = tmp;
+			const u8 *bj = pub + i * (u32)8U;
+			u64 u = *(u64 *)bj;
+			u64 r = u;
+			u64 x0 = r;
+			os[i] = x0;
+		}
+	}
+	tmp3 = tmp[3U];
+	tmp[3U] = tmp3 & (u64)0x7fffffffffffffffU;
+	x = init1;
+	z = init1 + (u32)4U;
+	z[0U] = (u64)1U;
+	z[1U] = (u64)0U;
+	z[2U] = (u64)0U;
+	z[3U] = (u64)0U;
+	x[0U] = tmp[0U];
+	x[1U] = tmp[1U];
+	x[2U] = tmp[2U];
+	x[3U] = tmp[3U];
+	montgomery_ladder(init1, priv, init1);
+	encode_point(out, init1);
+}
+
+/* The below constants were generated using this sage script:
+ *
+ * #!/usr/bin/env sage
+ * import sys
+ * from sage.all import *
+ * def limbs(n):
+ * 	n = int(n)
+ * 	l = ((n >> 0) % 2^64, (n >> 64) % 2^64, (n >> 128) % 2^64, (n >> 192) % 2^64)
+ * 	return "0x%016xULL, 0x%016xULL, 0x%016xULL, 0x%016xULL" % l
+ * ec = EllipticCurve(GF(2^255 - 19), [0, 486662, 0, 1, 0])
+ * p_minus_s = (ec.lift_x(9) - ec.lift_x(1))[0]
+ * print("static const u64 p_minus_s[] = { %s };\n" % limbs(p_minus_s))
+ * print("static const u64 table_ladder[] = {")
+ * p = ec.lift_x(9)
+ * for i in range(252):
+ * 	l = (p[0] + p[2]) / (p[0] - p[2])
+ * 	print(("\t%s" + ("," if i != 251 else "")) % limbs(l))
+ * 	p = p * 2
+ * print("};")
+ *
+ */
+
+static const u64 p_minus_s[] = { 0x816b1e0137d48290ULL, 0x440f6a51eb4d1207ULL, 0x52385f46dca2b71dULL, 0x215132111d8354cbULL };
+
+static const u64 table_ladder[] = {
+	0xfffffffffffffff3ULL, 0xffffffffffffffffULL, 0xffffffffffffffffULL, 0x5fffffffffffffffULL,
+	0x6b8220f416aafe96ULL, 0x82ebeb2b4f566a34ULL, 0xd5a9a5b075a5950fULL, 0x5142b2cf4b2488f4ULL,
+	0x6aaebc750069680cULL, 0x89cf7820a0f99c41ULL, 0x2a58d9183b56d0f4ULL, 0x4b5aca80e36011a4ULL,
+	0x329132348c29745dULL, 0xf4a2e616e1642fd7ULL, 0x1e45bb03ff67bc34ULL, 0x306912d0f42a9b4aULL,
+	0xff886507e6af7154ULL, 0x04f50e13dfeec82fULL, 0xaa512fe82abab5ceULL, 0x174e251a68d5f222ULL,
+	0xcf96700d82028898ULL, 0x1743e3370a2c02c5ULL, 0x379eec98b4e86eaaULL, 0x0c59888a51e0482eULL,
+	0xfbcbf1d699b5d189ULL, 0xacaef0d58e9fdc84ULL, 0xc1c20d06231f7614ULL, 0x2938218da274f972ULL,
+	0xf6af49beff1d7f18ULL, 0xcc541c22387ac9c2ULL, 0x96fcc9ef4015c56bULL, 0x69c1627c690913a9ULL,
+	0x7a86fd2f4733db0eULL, 0xfdb8c4f29e087de9ULL, 0x095e4b1a8ea2a229ULL, 0x1ad7a7c829b37a79ULL,
+	0x342d89cad17ea0c0ULL, 0x67bedda6cced2051ULL, 0x19ca31bf2bb42f74ULL, 0x3df7b4c84980acbbULL,
+	0xa8c6444dc80ad883ULL, 0xb91e440366e3ab85ULL, 0xc215cda00164f6d8ULL, 0x3d867c6ef247e668ULL,
+	0xc7dd582bcc3e658cULL, 0xfd2c4748ee0e5528ULL, 0xa0fd9b95cc9f4f71ULL, 0x7529d871b0675ddfULL,
+	0xb8f568b42d3cbd78ULL, 0x1233011b91f3da82ULL, 0x2dce6ccd4a7c3b62ULL, 0x75e7fc8e9e498603ULL,
+	0x2f4f13f1fcd0b6ecULL, 0xf1a8ca1f29ff7a45ULL, 0xc249c1a72981e29bULL, 0x6ebe0dbb8c83b56aULL,
+	0x7114fa8d170bb222ULL, 0x65a2dcd5bf93935fULL, 0xbdc41f68b59c979aULL, 0x2f0eef79a2ce9289ULL,
+	0x42ecbf0c083c37ceULL, 0x2930bc09ec496322ULL, 0xf294b0c19cfeac0dULL, 0x3780aa4bedfabb80ULL,
+	0x56c17d3e7cead929ULL, 0xe7cb4beb2e5722c5ULL, 0x0ce931732dbfe15aULL, 0x41b883c7621052f8ULL,
+	0xdbf75ca0c3d25350ULL, 0x2936be086eb1e351ULL, 0xc936e03cb4a9b212ULL, 0x1d45bf82322225aaULL,
+	0xe81ab1036a024cc5ULL, 0xe212201c304c9a72ULL, 0xc5d73fba6832b1fcULL, 0x20ffdb5a4d839581ULL,
+	0xa283d367be5d0fadULL, 0x6c2b25ca8b164475ULL, 0x9d4935467caaf22eULL, 0x5166408eee85ff49ULL,
+	0x3c67baa2fab4e361ULL, 0xb3e433c67ef35cefULL, 0x5259729241159b1cULL, 0x6a621892d5b0ab33ULL,
+	0x20b74a387555cdcbULL, 0x532aa10e1208923fULL, 0xeaa17b7762281dd1ULL, 0x61ab3443f05c44bfULL,
+	0x257a6c422324def8ULL, 0x131c6c1017e3cf7fULL, 0x23758739f630a257ULL, 0x295a407a01a78580ULL,
+	0xf8c443246d5da8d9ULL, 0x19d775450c52fa5dULL, 0x2afcfc92731bf83dULL, 0x7d10c8e81b2b4700ULL,
+	0xc8e0271f70baa20bULL, 0x993748867ca63957ULL, 0x5412efb3cb7ed4bbULL, 0x3196d36173e62975ULL,
+	0xde5bcad141c7dffcULL, 0x47cc8cd2b395c848ULL, 0xa34cd942e11af3cbULL, 0x0256dbf2d04ecec2ULL,
+	0x875ab7e94b0e667fULL, 0xcad4dd83c0850d10ULL, 0x47f12e8f4e72c79fULL, 0x5f1a87bb8c85b19bULL,
+	0x7ae9d0b6437f51b8ULL, 0x12c7ce5518879065ULL, 0x2ade09fe5cf77aeeULL, 0x23a05a2f7d2c5627ULL,
+	0x5908e128f17c169aULL, 0xf77498dd8ad0852dULL, 0x74b4c4ceab102f64ULL, 0x183abadd10139845ULL,
+	0xb165ba8daa92aaacULL, 0xd5c5ef9599386705ULL, 0xbe2f8f0cf8fc40d1ULL, 0x2701e635ee204514ULL,
+	0x629fa80020156514ULL, 0xf223868764a8c1ceULL, 0x5b894fff0b3f060eULL, 0x60d9944cf708a3faULL,
+	0xaeea001a1c7a201fULL, 0xebf16a633ee2ce63ULL, 0x6f7709594c7a07e1ULL, 0x79b958150d0208cbULL,
+	0x24b55e5301d410e7ULL, 0xe3a34edff3fdc84dULL, 0xd88768e4904032d8ULL, 0x131384427b3aaeecULL,
+	0x8405e51286234f14ULL, 0x14dc4739adb4c529ULL, 0xb8a2b5b250634ffdULL, 0x2fe2a94ad8a7ff93ULL,
+	0xec5c57efe843faddULL, 0x2843ce40f0bb9918ULL, 0xa4b561d6cf3d6305ULL, 0x743629bde8fb777eULL,
+	0x343edd46bbaf738fULL, 0xed981828b101a651ULL, 0xa401760b882c797aULL, 0x1fc223e28dc88730ULL,
+	0x48604e91fc0fba0eULL, 0xb637f78f052c6fa4ULL, 0x91ccac3d09e9239cULL, 0x23f7eed4437a687cULL,
+	0x5173b1118d9bd800ULL, 0x29d641b63189d4a7ULL, 0xfdbf177988bbc586ULL, 0x2959894fcad81df5ULL,
+	0xaebc8ef3b4bbc899ULL, 0x4148995ab26992b9ULL, 0x24e20b0134f92cfbULL, 0x40d158894a05dee8ULL,
+	0x46b00b1185af76f6ULL, 0x26bac77873187a79ULL, 0x3dc0bf95ab8fff5fULL, 0x2a608bd8945524d7ULL,
+	0x26449588bd446302ULL, 0x7c4bc21c0388439cULL, 0x8e98a4f383bd11b2ULL, 0x26218d7bc9d876b9ULL,
+	0xe3081542997c178aULL, 0x3c2d29a86fb6606fULL, 0x5c217736fa279374ULL, 0x7dde05734afeb1faULL,
+	0x3bf10e3906d42babULL, 0xe4f7803e1980649cULL, 0xe6053bf89595bf7aULL, 0x394faf38da245530ULL,
+	0x7a8efb58896928f4ULL, 0xfbc778e9cc6a113cULL, 0x72670ce330af596fULL, 0x48f222a81d3d6cf7ULL,
+	0xf01fce410d72caa7ULL, 0x5a20ecc7213b5595ULL, 0x7bc21165c1fa1483ULL, 0x07f89ae31da8a741ULL,
+	0x05d2c2b4c6830ff9ULL, 0xd43e330fc6316293ULL, 0xa5a5590a96d3a904ULL, 0x705edb91a65333b6ULL,
+	0x048ee15e0bb9a5f7ULL, 0x3240cfca9e0aaf5dULL, 0x8f4b71ceedc4a40bULL, 0x621c0da3de544a6dULL,
+	0x92872836a08c4091ULL, 0xce8375b010c91445ULL, 0x8a72eb524f276394ULL, 0x2667fcfa7ec83635ULL,
+	0x7f4c173345e8752aULL, 0x061b47feee7079a5ULL, 0x25dd9afa9f86ff34ULL, 0x3780cef5425dc89cULL,
+	0x1a46035a513bb4e9ULL, 0x3e1ef379ac575adaULL, 0xc78c5f1c5fa24b50ULL, 0x321a967634fd9f22ULL,
+	0x946707b8826e27faULL, 0x3dca84d64c506fd0ULL, 0xc189218075e91436ULL, 0x6d9284169b3b8484ULL,
+	0x3a67e840383f2ddfULL, 0x33eec9a30c4f9b75ULL, 0x3ec7c86fa783ef47ULL, 0x26ec449fbac9fbc4ULL,
+	0x5c0f38cba09b9e7dULL, 0x81168cc762a3478cULL, 0x3e23b0d306fc121cULL, 0x5a238aa0a5efdcddULL,
+	0x1ba26121c4ea43ffULL, 0x36f8c77f7c8832b5ULL, 0x88fbea0b0adcf99aULL, 0x5ca9938ec25bebf9ULL,
+	0xd5436a5e51fccda0ULL, 0x1dbc4797c2cd893bULL, 0x19346a65d3224a08ULL, 0x0f5034e49b9af466ULL,
+	0xf23c3967a1e0b96eULL, 0xe58b08fa867a4d88ULL, 0xfb2fabc6a7341679ULL, 0x2a75381eb6026946ULL,
+	0xc80a3be4c19420acULL, 0x66b1f6c681f2b6dcULL, 0x7cf7036761e93388ULL, 0x25abbbd8a660a4c4ULL,
+	0x91ea12ba14fd5198ULL, 0x684950fc4a3cffa9ULL, 0xf826842130f5ad28ULL, 0x3ea988f75301a441ULL,
+	0xc978109a695f8c6fULL, 0x1746eb4a0530c3f3ULL, 0x444d6d77b4459995ULL, 0x75952b8c054e5cc7ULL,
+	0xa3703f7915f4d6aaULL, 0x66c346202f2647d8ULL, 0xd01469df811d644bULL, 0x77fea47d81a5d71fULL,
+	0xc5e9529ef57ca381ULL, 0x6eeeb4b9ce2f881aULL, 0xb6e91a28e8009bd6ULL, 0x4b80be3e9afc3fecULL,
+	0x7e3773c526aed2c5ULL, 0x1b4afcb453c9a49dULL, 0xa920bdd7baffb24dULL, 0x7c54699f122d400eULL,
+	0xef46c8e14fa94bc8ULL, 0xe0b074ce2952ed5eULL, 0xbea450e1dbd885d5ULL, 0x61b68649320f712cULL,
+	0x8a485f7309ccbdd1ULL, 0xbd06320d7d4d1a2dULL, 0x25232973322dbef4ULL, 0x445dc4758c17f770ULL,
+	0xdb0434177cc8933cULL, 0xed6fe82175ea059fULL, 0x1efebefdc053db34ULL, 0x4adbe867c65daf99ULL,
+	0x3acd71a2a90609dfULL, 0xe5e991856dd04050ULL, 0x1ec69b688157c23cULL, 0x697427f6885cfe4dULL,
+	0xd7be7b9b65e1a851ULL, 0xa03d28d522c536ddULL, 0x28399d658fd2b645ULL, 0x49e5b7e17c2641e1ULL,
+	0x6f8c3a98700457a4ULL, 0x5078f0a25ebb6778ULL, 0xd13c3ccbc382960fULL, 0x2e003258a7df84b1ULL,
+	0x8ad1f39be6296a1cULL, 0xc1eeaa652a5fbfb2ULL, 0x33ee0673fd26f3cbULL, 0x59256173a69d2cccULL,
+	0x41ea07aa4e18fc41ULL, 0xd9fc19527c87a51eULL, 0xbdaacb805831ca6fULL, 0x445b652dc916694fULL,
+	0xce92a3a7f2172315ULL, 0x1edc282de11b9964ULL, 0xa1823aafe04c314aULL, 0x790a2d94437cf586ULL,
+	0x71c447fb93f6e009ULL, 0x8922a56722845276ULL, 0xbf70903b204f5169ULL, 0x2f7a89891ba319feULL,
+	0x02a08eb577e2140cULL, 0xed9a4ed4427bdcf4ULL, 0x5253ec44e4323cd1ULL, 0x3e88363c14e9355bULL,
+	0xaa66c14277110b8cULL, 0x1ae0391610a23390ULL, 0x2030bd12c93fc2a2ULL, 0x3ee141579555c7abULL,
+	0x9214de3a6d6e7d41ULL, 0x3ccdd88607f17efeULL, 0x674f1288f8e11217ULL, 0x5682250f329f93d0ULL,
+	0x6cf00b136d2e396eULL, 0x6e4cf86f1014debfULL, 0x5930b1b5bfcc4e83ULL, 0x047069b48aba16b6ULL,
+	0x0d4ce4ab69b20793ULL, 0xb24db91a97d0fb9eULL, 0xcdfa50f54e00d01dULL, 0x221b1085368bddb5ULL,
+	0xe7e59468b1e3d8d2ULL, 0x53c56563bd122f93ULL, 0xeee8a903e0663f09ULL, 0x61efa662cbbe3d42ULL,
+	0x2cf8ddddde6eab2aULL, 0x9bf80ad51435f231ULL, 0x5deadacec9f04973ULL, 0x29275b5d41d29b27ULL,
+	0xcfde0f0895ebf14fULL, 0xb9aab96b054905a7ULL, 0xcae80dd9a1c420fdULL, 0x0a63bf2f1673bbc7ULL,
+	0x092f6e11958fbc8cULL, 0x672a81e804822fadULL, 0xcac8351560d52517ULL, 0x6f3f7722c8f192f8ULL,
+	0xf8ba90ccc2e894b7ULL, 0x2c7557a438ff9f0dULL, 0x894d1d855ae52359ULL, 0x68e122157b743d69ULL,
+	0xd87e5570cfb919f3ULL, 0x3f2cdecd95798db9ULL, 0x2121154710c0a2ceULL, 0x3c66a115246dc5b2ULL,
+	0xcbedc562294ecb72ULL, 0xba7143c36a280b16ULL, 0x9610c2efd4078b67ULL, 0x6144735d946a4b1eULL,
+	0x536f111ed75b3350ULL, 0x0211db8c2041d81bULL, 0xf93cb1000e10413cULL, 0x149dfd3c039e8876ULL,
+	0xd479dde46b63155bULL, 0xb66e15e93c837976ULL, 0xdafde43b1f13e038ULL, 0x5fafda1a2e4b0b35ULL,
+	0x3600bbdf17197581ULL, 0x3972050bbe3cd2c2ULL, 0x5938906dbdd5be86ULL, 0x34fce5e43f9b860fULL,
+	0x75a8a4cd42d14d02ULL, 0x828dabc53441df65ULL, 0x33dcabedd2e131d3ULL, 0x3ebad76fb814d25fULL,
+	0xd4906f566f70e10fULL, 0x5d12f7aa51690f5aULL, 0x45adb16e76cefcf2ULL, 0x01f768aead232999ULL,
+	0x2b6cc77b6248febdULL, 0x3cd30628ec3aaffdULL, 0xce1c0b80d4ef486aULL, 0x4c3bff2ea6f66c23ULL,
+	0x3f2ec4094aeaeb5fULL, 0x61b19b286e372ca7ULL, 0x5eefa966de2a701dULL, 0x23b20565de55e3efULL,
+	0xe301ca5279d58557ULL, 0x07b2d4ce27c2874fULL, 0xa532cd8a9dcf1d67ULL, 0x2a52fee23f2bff56ULL,
+	0x8624efb37cd8663dULL, 0xbbc7ac20ffbd7594ULL, 0x57b85e9c82d37445ULL, 0x7b3052cb86a6ec66ULL,
+	0x3482f0ad2525e91eULL, 0x2cb68043d28edca0ULL, 0xaf4f6d052e1b003aULL, 0x185f8c2529781b0aULL,
+	0xaa41de5bd80ce0d6ULL, 0x9407b2416853e9d6ULL, 0x563ec36e357f4c3aULL, 0x4cc4b8dd0e297bceULL,
+	0xa2fc1a52ffb8730eULL, 0x1811f16e67058e37ULL, 0x10f9a366cddf4ee1ULL, 0x72f4a0c4a0b9f099ULL,
+	0x8c16c06f663f4ea7ULL, 0x693b3af74e970fbaULL, 0x2102e7f1d69ec345ULL, 0x0ba53cbc968a8089ULL,
+	0xca3d9dc7fea15537ULL, 0x4c6824bb51536493ULL, 0xb9886314844006b1ULL, 0x40d2a72ab454cc60ULL,
+	0x5936a1b712570975ULL, 0x91b9d648debda657ULL, 0x3344094bb64330eaULL, 0x006ba10d12ee51d0ULL,
+	0x19228468f5de5d58ULL, 0x0eb12f4c38cc05b0ULL, 0xa1039f9dd5601990ULL, 0x4502d4ce4fff0e0bULL,
+	0xeb2054106837c189ULL, 0xd0f6544c6dd3b93cULL, 0x40727064c416d74fULL, 0x6e15c6114b502ef0ULL,
+	0x4df2a398cfb1a76bULL, 0x11256c7419f2f6b1ULL, 0x4a497962066e6043ULL, 0x705b3aab41355b44ULL,
+	0x365ef536d797b1d8ULL, 0x00076bd622ddf0dbULL, 0x3bbf33b0e0575a88ULL, 0x3777aa05c8e4ca4dULL,
+	0x392745c85578db5fULL, 0x6fda4149dbae5ae2ULL, 0xb1f0b00b8adc9867ULL, 0x09963437d36f1da3ULL,
+	0x7e824e90a5dc3853ULL, 0xccb5f6641f135cbdULL, 0x6736d86c87ce8fccULL, 0x625f3ce26604249fULL,
+	0xaf8ac8059502f63fULL, 0x0c05e70a2e351469ULL, 0x35292e9c764b6305ULL, 0x1a394360c7e23ac3ULL,
+	0xd5c6d53251183264ULL, 0x62065abd43c2b74fULL, 0xb5fbf5d03b973f9bULL, 0x13a3da3661206e5eULL,
+	0xc6bd5837725d94e5ULL, 0x18e30912205016c5ULL, 0x2088ce1570033c68ULL, 0x7fba1f495c837987ULL,
+	0x5a8c7423f2f9079dULL, 0x1735157b34023fc5ULL, 0xe4f9b49ad2fab351ULL, 0x6691ff72c878e33cULL,
+	0x122c2adedc5eff3eULL, 0xf8dd4bf1d8956cf4ULL, 0xeb86205d9e9e5bdaULL, 0x049b92b9d975c743ULL,
+	0xa5379730b0f6c05aULL, 0x72a0ffacc6f3a553ULL, 0xb0032c34b20dcd6dULL, 0x470e9dbc88d5164aULL,
+	0xb19cf10ca237c047ULL, 0xb65466711f6c81a2ULL, 0xb3321bd16dd80b43ULL, 0x48c14f600c5fbe8eULL,
+	0x66451c264aa6c803ULL, 0xb66e3904a4fa7da6ULL, 0xd45f19b0b3128395ULL, 0x31602627c3c9bc10ULL,
+	0x3120dc4832e4e10dULL, 0xeb20c46756c717f7ULL, 0x00f52e3f67280294ULL, 0x566d4fc14730c509ULL,
+	0x7e3a5d40fd837206ULL, 0xc1e926dc7159547aULL, 0x216730fba68d6095ULL, 0x22e8c3843f69cea7ULL,
+	0x33d074e8930e4b2bULL, 0xb6e4350e84d15816ULL, 0x5534c26ad6ba2365ULL, 0x7773c12f89f1f3f3ULL,
+	0x8cba404da57962aaULL, 0x5b9897a81999ce56ULL, 0x508e862f121692fcULL, 0x3a81907fa093c291ULL,
+	0x0dded0ff4725a510ULL, 0x10d8cc10673fc503ULL, 0x5b9d151c9f1f4e89ULL, 0x32a5c1d5cb09a44cULL,
+	0x1e0aa442b90541fbULL, 0x5f85eb7cc1b485dbULL, 0xbee595ce8a9df2e5ULL, 0x25e496c722422236ULL,
+	0x5edf3c46cd0fe5b9ULL, 0x34e75a7ed2a43388ULL, 0xe488de11d761e352ULL, 0x0e878a01a085545cULL,
+	0xba493c77e021bb04ULL, 0x2b4d1843c7df899aULL, 0x9ea37a487ae80d67ULL, 0x67a9958011e41794ULL,
+	0x4b58051a6697b065ULL, 0x47e33f7d8d6ba6d4ULL, 0xbb4da8d483ca46c1ULL, 0x68becaa181c2db0dULL,
+	0x8d8980e90b989aa5ULL, 0xf95eb14a2c93c99bULL, 0x51c6c7c4796e73a2ULL, 0x6e228363b5efb569ULL,
+	0xc6bbc0b02dd624c8ULL, 0x777eb47dec8170eeULL, 0x3cde15a004cfafa9ULL, 0x1dc6bc087160bf9bULL,
+	0x2e07e043eec34002ULL, 0x18e9fc677a68dc7fULL, 0xd8da03188bd15b9aULL, 0x48fbc3bb00568253ULL,
+	0x57547d4cfb654ce1ULL, 0xd3565b82a058e2adULL, 0xf63eaf0bbf154478ULL, 0x47531ef114dfbb18ULL,
+	0xe1ec630a4278c587ULL, 0x5507d546ca8e83f3ULL, 0x85e135c63adc0c2bULL, 0x0aa7efa85682844eULL,
+	0x72691ba8b3e1f615ULL, 0x32b4e9701fbe3ffaULL, 0x97b6d92e39bb7868ULL, 0x2cfe53dea02e39e8ULL,
+	0x687392cd85cd52b0ULL, 0x27ff66c910e29831ULL, 0x97134556a9832d06ULL, 0x269bb0360a84f8a0ULL,
+	0x706e55457643f85cULL, 0x3734a48c9b597d1bULL, 0x7aee91e8c6efa472ULL, 0x5cd6abc198a9d9e0ULL,
+	0x0e04de06cb3ce41aULL, 0xd8c6eb893402e138ULL, 0x904659bb686e3772ULL, 0x7215c371746ba8c8ULL,
+	0xfd12a97eeae4a2d9ULL, 0x9514b7516394f2c5ULL, 0x266fd5809208f294ULL, 0x5c847085619a26b9ULL,
+	0x52985410fed694eaULL, 0x3c905b934a2ed254ULL, 0x10bb47692d3be467ULL, 0x063b3d2d69e5e9e1ULL,
+	0x472726eedda57debULL, 0xefb6c4ae10f41891ULL, 0x2b1641917b307614ULL, 0x117c554fc4f45b7cULL,
+	0xc07cf3118f9d8812ULL, 0x01dbd82050017939ULL, 0xd7e803f4171b2827ULL, 0x1015e87487d225eaULL,
+	0xc58de3fed23acc4dULL, 0x50db91c294a7be2dULL, 0x0b94d43d1c9cf457ULL, 0x6b1640fa6e37524aULL,
+	0x692f346c5fda0d09ULL, 0x200b1c59fa4d3151ULL, 0xb8c46f760777a296ULL, 0x4b38395f3ffdfbcfULL,
+	0x18d25e00be54d671ULL, 0x60d50582bec8aba6ULL, 0x87ad8f263b78b982ULL, 0x50fdf64e9cda0432ULL,
+	0x90f567aac578dcf0ULL, 0xef1e9b0ef2a3133bULL, 0x0eebba9242d9de71ULL, 0x15473c9bf03101c7ULL,
+	0x7c77e8ae56b78095ULL, 0xb678e7666e6f078eULL, 0x2da0b9615348ba1fULL, 0x7cf931c1ff733f0bULL,
+	0x26b357f50a0a366cULL, 0xe9708cf42b87d732ULL, 0xc13aeea5f91cb2c0ULL, 0x35d90c991143bb4cULL,
+	0x47c1c404a9a0d9dcULL, 0x659e58451972d251ULL, 0x3875a8c473b38c31ULL, 0x1fbd9ed379561f24ULL,
+	0x11fabc6fd41ec28dULL, 0x7ef8dfe3cd2a2dcaULL, 0x72e73b5d8c404595ULL, 0x6135fa4954b72f27ULL,
+	0xccfc32a2de24b69cULL, 0x3f55698c1f095d88ULL, 0xbe3350ed5ac3f929ULL, 0x5e9bf806ca477eebULL,
+	0xe9ce8fb63c309f68ULL, 0x5376f63565e1f9f4ULL, 0xd1afcfb35a6393f1ULL, 0x6632a1ede5623506ULL,
+	0x0b7d6c390c2ded4cULL, 0x56cb3281df04cb1fULL, 0x66305a1249ecc3c7ULL, 0x5d588b60a38ca72aULL,
+	0xa6ecbf78e8e5f42dULL, 0x86eeb44b3c8a3eecULL, 0xec219c48fbd21604ULL, 0x1aaf1af517c36731ULL,
+	0xc306a2836769bde7ULL, 0x208280622b1e2adbULL, 0x8027f51ffbff94a6ULL, 0x76cfa1ce1124f26bULL,
+	0x18eb00562422abb6ULL, 0xf377c4d58f8c29c3ULL, 0x4dbbc207f531561aULL, 0x0253b7f082128a27ULL,
+	0x3d1f091cb62c17e0ULL, 0x4860e1abd64628a9ULL, 0x52d17436309d4253ULL, 0x356f97e13efae576ULL,
+	0xd351e11aa150535bULL, 0x3e6b45bb1dd878ccULL, 0x0c776128bed92c98ULL, 0x1d34ae93032885b8ULL,
+	0x4ba0488ca85ba4c3ULL, 0x985348c33c9ce6ceULL, 0x66124c6f97bda770ULL, 0x0f81a0290654124aULL,
+	0x9ed09ca6569b86fdULL, 0x811009fd18af9a2dULL, 0xff08d03f93d8c20aULL, 0x52a148199faef26bULL,
+	0x3e03f9dc2d8d1b73ULL, 0x4205801873961a70ULL, 0xc0d987f041a35970ULL, 0x07aa1f15a1c0d549ULL,
+	0xdfd46ce08cd27224ULL, 0x6d0a024f934e4239ULL, 0x808a7a6399897b59ULL, 0x0a4556e9e13d95a2ULL,
+	0xd21a991fe9c13045ULL, 0x9b0e8548fe7751b8ULL, 0x5da643cb4bf30035ULL, 0x77db28d63940f721ULL,
+	0xfc5eeb614adc9011ULL, 0x5229419ae8c411ebULL, 0x9ec3e7787d1dcf74ULL, 0x340d053e216e4cb5ULL,
+	0xcac7af39b48df2b4ULL, 0xc0faec2871a10a94ULL, 0x140a69245ca575edULL, 0x0cf1c37134273a4cULL,
+	0xc8ee306ac224b8a5ULL, 0x57eaee7ccb4930b0ULL, 0xa1e806bdaacbe74fULL, 0x7d9a62742eeb657dULL,
+	0x9eb6b6ef546c4830ULL, 0x885cca1fddb36e2eULL, 0xe6b9f383ef0d7105ULL, 0x58654fef9d2e0412ULL,
+	0xa905c4ffbe0e8e26ULL, 0x942de5df9b31816eULL, 0x497d723f802e88e1ULL, 0x30684dea602f408dULL,
+	0x21e5a278a3e6cb34ULL, 0xaefb6e6f5b151dc4ULL, 0xb30b8e049d77ca15ULL, 0x28c3c9cf53b98981ULL,
+	0x287fb721556cdd2aULL, 0x0d317ca897022274ULL, 0x7468c7423a543258ULL, 0x4a7f11464eb5642fULL,
+	0xa237a4774d193aa6ULL, 0xd865986ea92129a1ULL, 0x24c515ecf87c1a88ULL, 0x604003575f39f5ebULL,
+	0x47b9f189570a9b27ULL, 0x2b98cede465e4b78ULL, 0x026df551dbb85c20ULL, 0x74fcd91047e21901ULL,
+	0x13e2a90a23c1bfa3ULL, 0x0cb0074e478519f6ULL, 0x5ff1cbbe3af6cf44ULL, 0x67fe5438be812dbeULL,
+	0xd13cf64fa40f05b0ULL, 0x054dfb2f32283787ULL, 0x4173915b7f0d2aeaULL, 0x482f144f1f610d4eULL,
+	0xf6210201b47f8234ULL, 0x5d0ae1929e70b990ULL, 0xdcd7f455b049567cULL, 0x7e93d0f1f0916f01ULL,
+	0xdd79cbf18a7db4faULL, 0xbe8391bf6f74c62fULL, 0x027145d14b8291bdULL, 0x585a73ea2cbf1705ULL,
+	0x485ca03e928a0db2ULL, 0x10fc01a5742857e7ULL, 0x2f482edbd6d551a7ULL, 0x0f0433b5048fdb8aULL,
+	0x60da2e8dd7dc6247ULL, 0x88b4c9d38cd4819aULL, 0x13033ac001f66697ULL, 0x273b24fe3b367d75ULL,
+	0xc6e8f66a31b3b9d4ULL, 0x281514a494df49d5ULL, 0xd1726fdfc8b23da7ULL, 0x4b3ae7d103dee548ULL,
+	0xc6256e19ce4b9d7eULL, 0xff5c5cf186e3c61cULL, 0xacc63ca34b8ec145ULL, 0x74621888fee66574ULL,
+	0x956f409645290a1eULL, 0xef0bf8e3263a962eULL, 0xed6a50eb5ec2647bULL, 0x0694283a9dca7502ULL,
+	0x769b963643a2dcd1ULL, 0x42b7c8ea09fc5353ULL, 0x4f002aee13397eabULL, 0x63005e2c19b7d63aULL,
+	0xca6736da63023beaULL, 0x966c7f6db12a99b7ULL, 0xace09390c537c5e1ULL, 0x0b696063a1aa89eeULL,
+	0xebb03e97288c56e5ULL, 0x432a9f9f938c8be8ULL, 0xa6a5a93d5b717f71ULL, 0x1a5fb4c3e18f9d97ULL,
+	0x1c94e7ad1c60cdceULL, 0xee202a43fc02c4a0ULL, 0x8dafe4d867c46a20ULL, 0x0a10263c8ac27b58ULL,
+	0xd0dea9dfe4432a4aULL, 0x856af87bbe9277c5ULL, 0xce8472acc212c71aULL, 0x6f151b6d9bbb1e91ULL,
+	0x26776c527ceed56aULL, 0x7d211cb7fbf8faecULL, 0x37ae66a6fd4609ccULL, 0x1f81b702d2770c42ULL,
+	0x2fb0b057eac58392ULL, 0xe1dd89fe29744e9dULL, 0xc964f8eb17beb4f8ULL, 0x29571073c9a2d41eULL,
+	0xa948a18981c0e254ULL, 0x2df6369b65b22830ULL, 0xa33eb2d75fcfd3c6ULL, 0x078cd6ec4199a01fULL,
+	0x4a584a41ad900d2fULL, 0x32142b78e2c74c52ULL, 0x68c4e8338431c978ULL, 0x7f69ea9008689fc2ULL,
+	0x52f2c81e46a38265ULL, 0xfd78072d04a832fdULL, 0x8cd7d5fa25359e94ULL, 0x4de71b7454cc29d2ULL,
+	0x42eb60ad1eda6ac9ULL, 0x0aad37dfdbc09c3aULL, 0x81004b71e33cc191ULL, 0x44e6be345122803cULL,
+	0x03fe8388ba1920dbULL, 0xf5d57c32150db008ULL, 0x49c8c4281af60c29ULL, 0x21edb518de701aeeULL,
+	0x7fb63e418f06dc99ULL, 0xa4460d99c166d7b8ULL, 0x24dd5248ce520a83ULL, 0x5ec3ad712b928358ULL,
+	0x15022a5fbd17930fULL, 0xa4f64a77d82570e3ULL, 0x12bc8d6915783712ULL, 0x498194c0fc620abbULL,
+	0x38a2d9d255686c82ULL, 0x785c6bd9193e21f0ULL, 0xe4d5c81ab24a5484ULL, 0x56307860b2e20989ULL,
+	0x429d55f78b4d74c4ULL, 0x22f1834643350131ULL, 0x1e60c24598c71fffULL, 0x59f2f014979983efULL,
+	0x46a47d56eb494a44ULL, 0x3e22a854d636a18eULL, 0xb346e15274491c3bULL, 0x2ceafd4e5390cde7ULL,
+	0xba8a8538be0d6675ULL, 0x4b9074bb50818e23ULL, 0xcbdab89085d304c3ULL, 0x61a24fe0e56192c4ULL,
+	0xcb7615e6db525bcbULL, 0xdd7d8c35a567e4caULL, 0xe6b4153acafcdd69ULL, 0x2d668e097f3c9766ULL,
+	0xa57e7e265ce55ef0ULL, 0x5d9f4e527cd4b967ULL, 0xfbc83606492fd1e5ULL, 0x090d52beb7c3f7aeULL,
+	0x09b9515a1e7b4d7cULL, 0x1f266a2599da44c0ULL, 0xa1c49548e2c55504ULL, 0x7ef04287126f15ccULL,
+	0xfed1659dbd30ef15ULL, 0x8b4ab9eec4e0277bULL, 0x884d6236a5df3291ULL, 0x1fd96ea6bf5cf788ULL,
+	0x42a161981f190d9aULL, 0x61d849507e6052c1ULL, 0x9fe113bf285a2cd5ULL, 0x7c22d676dbad85d8ULL,
+	0x82e770ed2bfbd27dULL, 0x4c05b2ece996f5a5ULL, 0xcd40a9c2b0900150ULL, 0x5895319213d9bf64ULL,
+	0xe7cc5d703fea2e08ULL, 0xb50c491258e2188cULL, 0xcce30baa48205bf0ULL, 0x537c659ccfa32d62ULL,
+	0x37b6623a98cfc088ULL, 0xfe9bed1fa4d6aca4ULL, 0x04d29b8e56a8d1b0ULL, 0x725f71c40b519575ULL,
+	0x28c7f89cd0339ce6ULL, 0x8367b14469ddc18bULL, 0x883ada83a6a1652cULL, 0x585f1974034d6c17ULL,
+	0x89cfb266f1b19188ULL, 0xe63b4863e7c35217ULL, 0xd88c9da6b4c0526aULL, 0x3e035c9df0954635ULL,
+	0xdd9d5412fb45de9dULL, 0xdd684532e4cff40dULL, 0x4b5c999b151d671cULL, 0x2d8c2cc811e7f690ULL,
+	0x7f54be1d90055d40ULL, 0xa464c5df464aaf40ULL, 0x33979624f0e917beULL, 0x2c018dc527356b30ULL,
+	0xa5415024e330b3d4ULL, 0x73ff3d96691652d3ULL, 0x94ec42c4ef9b59f1ULL, 0x0747201618d08e5aULL,
+	0x4d6ca48aca411c53ULL, 0x66415f2fcfa66119ULL, 0x9c4dd40051e227ffULL, 0x59810bc09a02f7ebULL,
+	0x2a7eb171b3dc101dULL, 0x441c5ab99ffef68eULL, 0x32025c9b93b359eaULL, 0x5e8ce0a71e9d112fULL,
+	0xbfcccb92429503fdULL, 0xd271ba752f095d55ULL, 0x345ead5e972d091eULL, 0x18c8df11a83103baULL,
+	0x90cd949a9aed0f4cULL, 0xc5d1f4cb6660e37eULL, 0xb8cac52d56c52e0bULL, 0x6e42e400c5808e0dULL,
+	0xa3b46966eeaefd23ULL, 0x0c4f1f0be39ecdcaULL, 0x189dc8c9d683a51dULL, 0x51f27f054c09351bULL,
+	0x4c487ccd2a320682ULL, 0x587ea95bb3df1c96ULL, 0xc8ccf79e555cb8e8ULL, 0x547dc829a206d73dULL,
+	0xb822a6cd80c39b06ULL, 0xe96d54732000d4c6ULL, 0x28535b6f91463b4dULL, 0x228f4660e2486e1dULL,
+	0x98799538de8d3abfULL, 0x8cd8330045ebca6eULL, 0x79952a008221e738ULL, 0x4322e1a7535cd2bbULL,
+	0xb114c11819d1801cULL, 0x2016e4d84f3f5ec7ULL, 0xdd0e2df409260f4cULL, 0x5ec362c0ae5f7266ULL,
+	0xc0462b18b8b2b4eeULL, 0x7cc8d950274d1afbULL, 0xf25f7105436b02d2ULL, 0x43bbf8dcbff9ccd3ULL,
+	0xb6ad1767a039e9dfULL, 0xb0714da8f69d3583ULL, 0x5e55fa18b42931f5ULL, 0x4ed5558f33c60961ULL,
+	0x1fe37901c647a5ddULL, 0x593ddf1f8081d357ULL, 0x0249a4fd813fd7a6ULL, 0x69acca274e9caf61ULL,
+	0x047ba3ea330721c9ULL, 0x83423fc20e7e1ea0ULL, 0x1df4c0af01314a60ULL, 0x09a62dab89289527ULL,
+	0xa5b325a49cc6cb00ULL, 0xe94b5dc654b56cb6ULL, 0x3be28779adc994a0ULL, 0x4296e8f8ba3a4aadULL,
+	0x328689761e451eabULL, 0x2e4d598bff59594aULL, 0x49b96853d7a7084aULL, 0x4980a319601420a8ULL,
+	0x9565b9e12f552c42ULL, 0x8a5318db7100fe96ULL, 0x05c90b4d43add0d7ULL, 0x538b4cd66a5d4edaULL,
+	0xf4e94fc3e89f039fULL, 0x592c9af26f618045ULL, 0x08a36eb5fd4b9550ULL, 0x25fffaf6c2ed1419ULL,
+	0x34434459cc79d354ULL, 0xeeecbfb4b1d5476bULL, 0xddeb34a061615d99ULL, 0x5129cecceb64b773ULL,
+	0xee43215894993520ULL, 0x772f9c7cf14c0b3bULL, 0xd2e2fce306bedad5ULL, 0x715f42b546f06a97ULL,
+	0x434ecdceda5b5f1aULL, 0x0da17115a49741a9ULL, 0x680bd77c73edad2eULL, 0x487c02354edd9041ULL,
+	0xb8efeff3a70ed9c4ULL, 0x56a32aa3e857e302ULL, 0xdf3a68bd48a2a5a0ULL, 0x07f650b73176c444ULL,
+	0xe38b9b1626e0ccb1ULL, 0x79e053c18b09fb36ULL, 0x56d90319c9f94964ULL, 0x1ca941e7ac9ff5c4ULL,
+	0x49c4df29162fa0bbULL, 0x8488cf3282b33305ULL, 0x95dfda14cabb437dULL, 0x3391f78264d5ad86ULL,
+	0x729ae06ae2b5095dULL, 0xd58a58d73259a946ULL, 0xe9834262d13921edULL, 0x27fedafaa54bb592ULL,
+	0xa99dc5b829ad48bbULL, 0x5f025742499ee260ULL, 0x802c8ecd5d7513fdULL, 0x78ceb3ef3f6dd938ULL,
+	0xc342f44f8a135d94ULL, 0x7b9edb44828cdda3ULL, 0x9436d11a0537cfe7ULL, 0x5064b164ec1ab4c8ULL,
+	0x7020eccfd37eb2fcULL, 0x1f31ea3ed90d25fcULL, 0x1b930d7bdfa1bb34ULL, 0x5344467a48113044ULL,
+	0x70073170f25e6dfbULL, 0xe385dc1a50114cc8ULL, 0x2348698ac8fc4f00ULL, 0x2a77a55284dd40d8ULL,
+	0xfe06afe0c98c6ce4ULL, 0xc235df96dddfd6e4ULL, 0x1428d01e33bf1ed3ULL, 0x785768ec9300bdafULL,
+	0x9702e57a91deb63bULL, 0x61bdb8bfe5ce8b80ULL, 0x645b426f3d1d58acULL, 0x4804a82227a557bcULL,
+	0x8e57048ab44d2601ULL, 0x68d6501a4b3a6935ULL, 0xc39c9ec3f9e1c293ULL, 0x4172f257d4de63e2ULL,
+	0xd368b450330c6401ULL, 0x040d3017418f2391ULL, 0x2c34bb6090b7d90dULL, 0x16f649228fdfd51fULL,
+	0xbea6818e2b928ef5ULL, 0xe28ccf91cdc11e72ULL, 0x594aaa68e77a36cdULL, 0x313034806c7ffd0fULL,
+	0x8a9d27ac2249bd65ULL, 0x19a3b464018e9512ULL, 0xc26ccff352b37ec7ULL, 0x056f68341d797b21ULL,
+	0x5e79d6757efd2327ULL, 0xfabdbcb6553afe15ULL, 0xd3e7222c6eaf5a60ULL, 0x7046c76d4dae743bULL,
+	0x660be872b18d4a55ULL, 0x19992518574e1496ULL, 0xc103053a302bdcbbULL, 0x3ed8e9800b218e8eULL,
+	0x7b0b9239fa75e03eULL, 0xefe9fb684633c083ULL, 0x98a35fbe391a7793ULL, 0x6065510fe2d0fe34ULL,
+	0x55cb668548abad0cULL, 0xb4584548da87e527ULL, 0x2c43ecea0107c1ddULL, 0x526028809372de35ULL,
+	0x3415c56af9213b1fULL, 0x5bee1a4d017e98dbULL, 0x13f6b105b5cf709bULL, 0x5ff20e3482b29ab6ULL,
+	0x0aa29c75cc2e6c90ULL, 0xfc7d73ca3a70e206ULL, 0x899fc38fc4b5c515ULL, 0x250386b124ffc207ULL,
+	0x54ea28d5ae3d2b56ULL, 0x9913149dd6de60ceULL, 0x16694fc58f06d6c1ULL, 0x46b23975eb018fc7ULL,
+	0x470a6a0fb4b7b4e2ULL, 0x5d92475a8f7253deULL, 0xabeee5b52fbd3adbULL, 0x7fa20801a0806968ULL,
+	0x76f3faf19f7714d2ULL, 0xb3e840c12f4660c3ULL, 0x0fb4cd8df212744eULL, 0x4b065a251d3a2dd2ULL,
+	0x5cebde383d77cd4aULL, 0x6adf39df882c9cb1ULL, 0xa2dd242eb09af759ULL, 0x3147c0e50e5f6422ULL,
+	0x164ca5101d1350dbULL, 0xf8d13479c33fc962ULL, 0xe640ce4d13e5da08ULL, 0x4bdee0c45061f8baULL,
+	0xd7c46dc1a4edb1c9ULL, 0x5514d7b6437fd98aULL, 0x58942f6bb2a1c00bULL, 0x2dffb2ab1d70710eULL,
+	0xccdfcf2fc18b6d68ULL, 0xa8ebcba8b7806167ULL, 0x980697f95e2937e3ULL, 0x02fbba1cd0126e8cULL
+};
+
+static void curve25519_ever64_base(u8 *out, const u8 *priv)
+{
+	u64 swap = 1;
+	int i, j, k;
+	u64 tmp[16 + 32 + 4];
+	u64 *x1 = &tmp[0];
+	u64 *z1 = &tmp[4];
+	u64 *x2 = &tmp[8];
+	u64 *z2 = &tmp[12];
+	u64 *xz1 = &tmp[0];
+	u64 *xz2 = &tmp[8];
+	u64 *a = &tmp[0 + 16];
+	u64 *b = &tmp[4 + 16];
+	u64 *c = &tmp[8 + 16];
+	u64 *ab = &tmp[0 + 16];
+	u64 *abcd = &tmp[0 + 16];
+	u64 *ef = &tmp[16 + 16];
+	u64 *efgh = &tmp[16 + 16];
+	u64 *key = &tmp[0 + 16 + 32];
+
+	memcpy(key, priv, 32);
+	((u8 *)key)[0] &= 248;
+	((u8 *)key)[31] = (((u8 *)key)[31] & 127) | 64;
+
+	x1[0] = 1, x1[1] = x1[2] = x1[3] = 0;
+	z1[0] = 1, z1[1] = z1[2] = z1[3] = 0;
+	z2[0] = 1, z2[1] = z2[2] = z2[3] = 0;
+	memcpy(x2, p_minus_s, sizeof(p_minus_s));
+
+	j = 3;
+	for (i = 0; i < 4; ++i) {
+		while (j < (const int[]){ 64, 64, 64, 63 }[i]) {
+			u64 bit = (key[i] >> j) & 1;
+			k = (64 * i + j - 3);
+			swap = swap ^ bit;
+			cswap2(swap, xz1, xz2);
+			swap = bit;
+			fsub(b, x1, z1);
+			fadd(a, x1, z1);
+			fmul(c, &table_ladder[4 * k], b, ef);
+			fsub(b, a, c);
+			fadd(a, a, c);
+			fsqr2(ab, ab, efgh);
+			fmul2(xz1, xz2, ab, efgh);
+			++j;
+		}
+		j = 0;
+	}
+
+	point_double(xz1, abcd, efgh);
+	point_double(xz1, abcd, efgh);
+	point_double(xz1, abcd, efgh);
+	encode_point(out, xz1);
+
+	memzero_explicit(tmp, sizeof(tmp));
+}
+
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(curve25519_use_bmi2_adx);
+
+void curve25519_arch(u8 mypublic[CURVE25519_KEY_SIZE],
+		     const u8 secret[CURVE25519_KEY_SIZE],
+		     const u8 basepoint[CURVE25519_KEY_SIZE])
+{
+	if (static_branch_likely(&curve25519_use_bmi2_adx))
+		curve25519_ever64(mypublic, secret, basepoint);
+	else
+		curve25519_generic(mypublic, secret, basepoint);
+}
+EXPORT_SYMBOL(curve25519_arch);
+
+void curve25519_base_arch(u8 pub[CURVE25519_KEY_SIZE],
+			  const u8 secret[CURVE25519_KEY_SIZE])
+{
+	if (static_branch_likely(&curve25519_use_bmi2_adx))
+		curve25519_ever64_base(pub, secret);
+	else
+		curve25519_generic(pub, secret, curve25519_base_point);
+}
+EXPORT_SYMBOL(curve25519_base_arch);
+
+static int curve25519_set_secret(struct crypto_kpp *tfm, const void *buf,
+				 unsigned int len)
+{
+	u8 *secret = kpp_tfm_ctx(tfm);
+
+	if (!len)
+		curve25519_generate_secret(secret);
+	else if (len == CURVE25519_KEY_SIZE &&
+		 crypto_memneq(buf, curve25519_null_point, CURVE25519_KEY_SIZE))
+		memcpy(secret, buf, CURVE25519_KEY_SIZE);
+	else
+		return -EINVAL;
+	return 0;
+}
+
+static int curve25519_generate_public_key(struct kpp_request *req)
+{
+	struct crypto_kpp *tfm = crypto_kpp_reqtfm(req);
+	const u8 *secret = kpp_tfm_ctx(tfm);
+	u8 buf[CURVE25519_KEY_SIZE];
+	int copied, nbytes;
+
+	if (req->src)
+		return -EINVAL;
+
+	curve25519_base_arch(buf, secret);
+
+	/* might want less than we've got */
+	nbytes = min_t(size_t, CURVE25519_KEY_SIZE, req->dst_len);
+	copied = sg_copy_from_buffer(req->dst, sg_nents_for_len(req->dst,
+								nbytes),
+				     buf, nbytes);
+	if (copied != nbytes)
+		return -EINVAL;
+	return 0;
+}
+
+static int curve25519_compute_shared_secret(struct kpp_request *req)
+{
+	struct crypto_kpp *tfm = crypto_kpp_reqtfm(req);
+	const u8 *secret = kpp_tfm_ctx(tfm);
+	u8 public_key[CURVE25519_KEY_SIZE];
+	u8 buf[CURVE25519_KEY_SIZE];
+	int copied, nbytes;
+
+	if (!req->src)
+		return -EINVAL;
+
+	copied = sg_copy_to_buffer(req->src,
+				   sg_nents_for_len(req->src,
+						    CURVE25519_KEY_SIZE),
+				   public_key, CURVE25519_KEY_SIZE);
+	if (copied != CURVE25519_KEY_SIZE)
+		return -EINVAL;
+
+	curve25519_arch(buf, secret, public_key);
+
+	/* might want less than we've got */
+	nbytes = min_t(size_t, CURVE25519_KEY_SIZE, req->dst_len);
+	copied = sg_copy_from_buffer(req->dst, sg_nents_for_len(req->dst,
+								nbytes),
+				     buf, nbytes);
+	if (copied != nbytes)
+		return -EINVAL;
+	return 0;
+}
+
+static unsigned int curve25519_max_size(struct crypto_kpp *tfm)
+{
+	return CURVE25519_KEY_SIZE;
+}
+
+static struct kpp_alg curve25519_alg = {
+	.base.cra_name		= "curve25519",
+	.base.cra_driver_name	= "curve25519-x86",
+	.base.cra_priority	= 200,
+	.base.cra_module	= THIS_MODULE,
+	.base.cra_ctxsize	= CURVE25519_KEY_SIZE,
+
+	.set_secret		= curve25519_set_secret,
+	.generate_public_key	= curve25519_generate_public_key,
+	.compute_shared_secret	= curve25519_compute_shared_secret,
+	.max_size		= curve25519_max_size,
+};
+
+
+static int __init curve25519_mod_init(void)
+{
+	if (boot_cpu_has(X86_FEATURE_BMI2) && boot_cpu_has(X86_FEATURE_ADX))
+		static_branch_enable(&curve25519_use_bmi2_adx);
+	else
+		return 0;
+	return IS_REACHABLE(CONFIG_CRYPTO_KPP) ?
+		crypto_register_kpp(&curve25519_alg) : 0;
+}
+
+static void __exit curve25519_mod_exit(void)
+{
+	if (IS_REACHABLE(CONFIG_CRYPTO_KPP) &&
+	    (boot_cpu_has(X86_FEATURE_BMI2) || boot_cpu_has(X86_FEATURE_ADX)))
+		crypto_unregister_kpp(&curve25519_alg);
+}
+
+module_init(curve25519_mod_init);
+module_exit(curve25519_mod_exit);
+
+MODULE_ALIAS_CRYPTO("curve25519");
+MODULE_ALIAS_CRYPTO("curve25519-x86");
+MODULE_LICENSE("GPL v2");
+MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
diff --git a/arch/x86/crypto/glue_helper.c b/arch/x86/crypto/glue_helper.c
index d15b993..d3d91a0 100644
--- a/arch/x86/crypto/glue_helper.c
+++ b/arch/x86/crypto/glue_helper.c
@@ -134,7 +134,8 @@ int glue_cbc_decrypt_req_128bit(const struct common_glue_ctx *gctx,
 				src -= num_blocks - 1;
 				dst -= num_blocks - 1;
 
-				gctx->funcs[i].fn_u.cbc(ctx, dst, src);
+				gctx->funcs[i].fn_u.cbc(ctx, (u8 *)dst,
+							(const u8 *)src);
 
 				nbytes -= func_bytes;
 				if (nbytes < bsize)
@@ -188,7 +189,9 @@ int glue_ctr_req_128bit(const struct common_glue_ctx *gctx,
 
 			/* Process multi-block batch */
 			do {
-				gctx->funcs[i].fn_u.ctr(ctx, dst, src, &ctrblk);
+				gctx->funcs[i].fn_u.ctr(ctx, (u8 *)dst,
+							(const u8 *)src,
+							&ctrblk);
 				src += num_blocks;
 				dst += num_blocks;
 				nbytes -= func_bytes;
@@ -210,7 +213,8 @@ int glue_ctr_req_128bit(const struct common_glue_ctx *gctx,
 
 		be128_to_le128(&ctrblk, (be128 *)walk.iv);
 		memcpy(&tmp, walk.src.virt.addr, nbytes);
-		gctx->funcs[gctx->num_funcs - 1].fn_u.ctr(ctx, &tmp, &tmp,
+		gctx->funcs[gctx->num_funcs - 1].fn_u.ctr(ctx, (u8 *)&tmp,
+							  (const u8 *)&tmp,
 							  &ctrblk);
 		memcpy(walk.dst.virt.addr, &tmp, nbytes);
 		le128_to_be128((be128 *)walk.iv, &ctrblk);
@@ -240,7 +244,8 @@ static unsigned int __glue_xts_req_128bit(const struct common_glue_ctx *gctx,
 
 		if (nbytes >= func_bytes) {
 			do {
-				gctx->funcs[i].fn_u.xts(ctx, dst, src,
+				gctx->funcs[i].fn_u.xts(ctx, (u8 *)dst,
+							(const u8 *)src,
 							walk->iv);
 
 				src += num_blocks;
@@ -354,8 +359,8 @@ int glue_xts_req_128bit(const struct common_glue_ctx *gctx,
 }
 EXPORT_SYMBOL_GPL(glue_xts_req_128bit);
 
-void glue_xts_crypt_128bit_one(void *ctx, u128 *dst, const u128 *src, le128 *iv,
-			       common_glue_func_t fn)
+void glue_xts_crypt_128bit_one(const void *ctx, u8 *dst, const u8 *src,
+			       le128 *iv, common_glue_func_t fn)
 {
 	le128 ivblk = *iv;
 
@@ -363,13 +368,13 @@ void glue_xts_crypt_128bit_one(void *ctx, u128 *dst, const u128 *src, le128 *iv,
 	gf128mul_x_ble(iv, &ivblk);
 
 	/* CC <- T xor C */
-	u128_xor(dst, src, (u128 *)&ivblk);
+	u128_xor((u128 *)dst, (const u128 *)src, (u128 *)&ivblk);
 
 	/* PP <- D(Key2,CC) */
-	fn(ctx, (u8 *)dst, (u8 *)dst);
+	fn(ctx, dst, dst);
 
 	/* P <- T xor PP */
-	u128_xor(dst, dst, (u128 *)&ivblk);
+	u128_xor((u128 *)dst, (u128 *)dst, (u128 *)&ivblk);
 }
 EXPORT_SYMBOL_GPL(glue_xts_crypt_128bit_one);
 
diff --git a/arch/x86/crypto/poly1305-avx2-x86_64.S b/arch/x86/crypto/poly1305-avx2-x86_64.S
deleted file mode 100644
index 8b341bc..0000000
--- a/arch/x86/crypto/poly1305-avx2-x86_64.S
+++ /dev/null
@@ -1,390 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/*
- * Poly1305 authenticator algorithm, RFC7539, x64 AVX2 functions
- *
- * Copyright (C) 2015 Martin Willi
- */
-
-#include <linux/linkage.h>
-
-.section	.rodata.cst32.ANMASK, "aM", @progbits, 32
-.align 32
-ANMASK:	.octa 0x0000000003ffffff0000000003ffffff
-	.octa 0x0000000003ffffff0000000003ffffff
-
-.section	.rodata.cst32.ORMASK, "aM", @progbits, 32
-.align 32
-ORMASK:	.octa 0x00000000010000000000000001000000
-	.octa 0x00000000010000000000000001000000
-
-.text
-
-#define h0 0x00(%rdi)
-#define h1 0x04(%rdi)
-#define h2 0x08(%rdi)
-#define h3 0x0c(%rdi)
-#define h4 0x10(%rdi)
-#define r0 0x00(%rdx)
-#define r1 0x04(%rdx)
-#define r2 0x08(%rdx)
-#define r3 0x0c(%rdx)
-#define r4 0x10(%rdx)
-#define u0 0x00(%r8)
-#define u1 0x04(%r8)
-#define u2 0x08(%r8)
-#define u3 0x0c(%r8)
-#define u4 0x10(%r8)
-#define w0 0x14(%r8)
-#define w1 0x18(%r8)
-#define w2 0x1c(%r8)
-#define w3 0x20(%r8)
-#define w4 0x24(%r8)
-#define y0 0x28(%r8)
-#define y1 0x2c(%r8)
-#define y2 0x30(%r8)
-#define y3 0x34(%r8)
-#define y4 0x38(%r8)
-#define m %rsi
-#define hc0 %ymm0
-#define hc1 %ymm1
-#define hc2 %ymm2
-#define hc3 %ymm3
-#define hc4 %ymm4
-#define hc0x %xmm0
-#define hc1x %xmm1
-#define hc2x %xmm2
-#define hc3x %xmm3
-#define hc4x %xmm4
-#define t1 %ymm5
-#define t2 %ymm6
-#define t1x %xmm5
-#define t2x %xmm6
-#define ruwy0 %ymm7
-#define ruwy1 %ymm8
-#define ruwy2 %ymm9
-#define ruwy3 %ymm10
-#define ruwy4 %ymm11
-#define ruwy0x %xmm7
-#define ruwy1x %xmm8
-#define ruwy2x %xmm9
-#define ruwy3x %xmm10
-#define ruwy4x %xmm11
-#define svxz1 %ymm12
-#define svxz2 %ymm13
-#define svxz3 %ymm14
-#define svxz4 %ymm15
-#define d0 %r9
-#define d1 %r10
-#define d2 %r11
-#define d3 %r12
-#define d4 %r13
-
-ENTRY(poly1305_4block_avx2)
-	# %rdi: Accumulator h[5]
-	# %rsi: 64 byte input block m
-	# %rdx: Poly1305 key r[5]
-	# %rcx: Quadblock count
-	# %r8:  Poly1305 derived key r^2 u[5], r^3 w[5], r^4 y[5],
-
-	# This four-block variant uses loop unrolled block processing. It
-	# requires 4 Poly1305 keys: r, r^2, r^3 and r^4:
-	# h = (h + m) * r  =>  h = (h + m1) * r^4 + m2 * r^3 + m3 * r^2 + m4 * r
-
-	vzeroupper
-	push		%rbx
-	push		%r12
-	push		%r13
-
-	# combine r0,u0,w0,y0
-	vmovd		y0,ruwy0x
-	vmovd		w0,t1x
-	vpunpcklqdq	t1,ruwy0,ruwy0
-	vmovd		u0,t1x
-	vmovd		r0,t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,ruwy0,ruwy0
-
-	# combine r1,u1,w1,y1 and s1=r1*5,v1=u1*5,x1=w1*5,z1=y1*5
-	vmovd		y1,ruwy1x
-	vmovd		w1,t1x
-	vpunpcklqdq	t1,ruwy1,ruwy1
-	vmovd		u1,t1x
-	vmovd		r1,t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,ruwy1,ruwy1
-	vpslld		$2,ruwy1,svxz1
-	vpaddd		ruwy1,svxz1,svxz1
-
-	# combine r2,u2,w2,y2 and s2=r2*5,v2=u2*5,x2=w2*5,z2=y2*5
-	vmovd		y2,ruwy2x
-	vmovd		w2,t1x
-	vpunpcklqdq	t1,ruwy2,ruwy2
-	vmovd		u2,t1x
-	vmovd		r2,t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,ruwy2,ruwy2
-	vpslld		$2,ruwy2,svxz2
-	vpaddd		ruwy2,svxz2,svxz2
-
-	# combine r3,u3,w3,y3 and s3=r3*5,v3=u3*5,x3=w3*5,z3=y3*5
-	vmovd		y3,ruwy3x
-	vmovd		w3,t1x
-	vpunpcklqdq	t1,ruwy3,ruwy3
-	vmovd		u3,t1x
-	vmovd		r3,t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,ruwy3,ruwy3
-	vpslld		$2,ruwy3,svxz3
-	vpaddd		ruwy3,svxz3,svxz3
-
-	# combine r4,u4,w4,y4 and s4=r4*5,v4=u4*5,x4=w4*5,z4=y4*5
-	vmovd		y4,ruwy4x
-	vmovd		w4,t1x
-	vpunpcklqdq	t1,ruwy4,ruwy4
-	vmovd		u4,t1x
-	vmovd		r4,t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,ruwy4,ruwy4
-	vpslld		$2,ruwy4,svxz4
-	vpaddd		ruwy4,svxz4,svxz4
-
-.Ldoblock4:
-	# hc0 = [m[48-51] & 0x3ffffff, m[32-35] & 0x3ffffff,
-	#	 m[16-19] & 0x3ffffff, m[ 0- 3] & 0x3ffffff + h0]
-	vmovd		0x00(m),hc0x
-	vmovd		0x10(m),t1x
-	vpunpcklqdq	t1,hc0,hc0
-	vmovd		0x20(m),t1x
-	vmovd		0x30(m),t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,hc0,hc0
-	vpand		ANMASK(%rip),hc0,hc0
-	vmovd		h0,t1x
-	vpaddd		t1,hc0,hc0
-	# hc1 = [(m[51-54] >> 2) & 0x3ffffff, (m[35-38] >> 2) & 0x3ffffff,
-	#	 (m[19-22] >> 2) & 0x3ffffff, (m[ 3- 6] >> 2) & 0x3ffffff + h1]
-	vmovd		0x03(m),hc1x
-	vmovd		0x13(m),t1x
-	vpunpcklqdq	t1,hc1,hc1
-	vmovd		0x23(m),t1x
-	vmovd		0x33(m),t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,hc1,hc1
-	vpsrld		$2,hc1,hc1
-	vpand		ANMASK(%rip),hc1,hc1
-	vmovd		h1,t1x
-	vpaddd		t1,hc1,hc1
-	# hc2 = [(m[54-57] >> 4) & 0x3ffffff, (m[38-41] >> 4) & 0x3ffffff,
-	#	 (m[22-25] >> 4) & 0x3ffffff, (m[ 6- 9] >> 4) & 0x3ffffff + h2]
-	vmovd		0x06(m),hc2x
-	vmovd		0x16(m),t1x
-	vpunpcklqdq	t1,hc2,hc2
-	vmovd		0x26(m),t1x
-	vmovd		0x36(m),t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,hc2,hc2
-	vpsrld		$4,hc2,hc2
-	vpand		ANMASK(%rip),hc2,hc2
-	vmovd		h2,t1x
-	vpaddd		t1,hc2,hc2
-	# hc3 = [(m[57-60] >> 6) & 0x3ffffff, (m[41-44] >> 6) & 0x3ffffff,
-	#	 (m[25-28] >> 6) & 0x3ffffff, (m[ 9-12] >> 6) & 0x3ffffff + h3]
-	vmovd		0x09(m),hc3x
-	vmovd		0x19(m),t1x
-	vpunpcklqdq	t1,hc3,hc3
-	vmovd		0x29(m),t1x
-	vmovd		0x39(m),t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,hc3,hc3
-	vpsrld		$6,hc3,hc3
-	vpand		ANMASK(%rip),hc3,hc3
-	vmovd		h3,t1x
-	vpaddd		t1,hc3,hc3
-	# hc4 = [(m[60-63] >> 8) | (1<<24), (m[44-47] >> 8) | (1<<24),
-	#	 (m[28-31] >> 8) | (1<<24), (m[12-15] >> 8) | (1<<24) + h4]
-	vmovd		0x0c(m),hc4x
-	vmovd		0x1c(m),t1x
-	vpunpcklqdq	t1,hc4,hc4
-	vmovd		0x2c(m),t1x
-	vmovd		0x3c(m),t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,hc4,hc4
-	vpsrld		$8,hc4,hc4
-	vpor		ORMASK(%rip),hc4,hc4
-	vmovd		h4,t1x
-	vpaddd		t1,hc4,hc4
-
-	# t1 = [ hc0[3] * r0, hc0[2] * u0, hc0[1] * w0, hc0[0] * y0 ]
-	vpmuludq	hc0,ruwy0,t1
-	# t1 += [ hc1[3] * s4, hc1[2] * v4, hc1[1] * x4, hc1[0] * z4 ]
-	vpmuludq	hc1,svxz4,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc2[3] * s3, hc2[2] * v3, hc2[1] * x3, hc2[0] * z3 ]
-	vpmuludq	hc2,svxz3,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc3[3] * s2, hc3[2] * v2, hc3[1] * x2, hc3[0] * z2 ]
-	vpmuludq	hc3,svxz2,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc4[3] * s1, hc4[2] * v1, hc4[1] * x1, hc4[0] * z1 ]
-	vpmuludq	hc4,svxz1,t2
-	vpaddq		t2,t1,t1
-	# d0 = t1[0] + t1[1] + t[2] + t[3]
-	vpermq		$0xee,t1,t2
-	vpaddq		t2,t1,t1
-	vpsrldq		$8,t1,t2
-	vpaddq		t2,t1,t1
-	vmovq		t1x,d0
-
-	# t1 = [ hc0[3] * r1, hc0[2] * u1,hc0[1] * w1, hc0[0] * y1 ]
-	vpmuludq	hc0,ruwy1,t1
-	# t1 += [ hc1[3] * r0, hc1[2] * u0, hc1[1] * w0, hc1[0] * y0 ]
-	vpmuludq	hc1,ruwy0,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc2[3] * s4, hc2[2] * v4, hc2[1] * x4, hc2[0] * z4 ]
-	vpmuludq	hc2,svxz4,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc3[3] * s3, hc3[2] * v3, hc3[1] * x3, hc3[0] * z3 ]
-	vpmuludq	hc3,svxz3,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc4[3] * s2, hc4[2] * v2, hc4[1] * x2, hc4[0] * z2 ]
-	vpmuludq	hc4,svxz2,t2
-	vpaddq		t2,t1,t1
-	# d1 = t1[0] + t1[1] + t1[3] + t1[4]
-	vpermq		$0xee,t1,t2
-	vpaddq		t2,t1,t1
-	vpsrldq		$8,t1,t2
-	vpaddq		t2,t1,t1
-	vmovq		t1x,d1
-
-	# t1 = [ hc0[3] * r2, hc0[2] * u2, hc0[1] * w2, hc0[0] * y2 ]
-	vpmuludq	hc0,ruwy2,t1
-	# t1 += [ hc1[3] * r1, hc1[2] * u1, hc1[1] * w1, hc1[0] * y1 ]
-	vpmuludq	hc1,ruwy1,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc2[3] * r0, hc2[2] * u0, hc2[1] * w0, hc2[0] * y0 ]
-	vpmuludq	hc2,ruwy0,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc3[3] * s4, hc3[2] * v4, hc3[1] * x4, hc3[0] * z4 ]
-	vpmuludq	hc3,svxz4,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc4[3] * s3, hc4[2] * v3, hc4[1] * x3, hc4[0] * z3 ]
-	vpmuludq	hc4,svxz3,t2
-	vpaddq		t2,t1,t1
-	# d2 = t1[0] + t1[1] + t1[2] + t1[3]
-	vpermq		$0xee,t1,t2
-	vpaddq		t2,t1,t1
-	vpsrldq		$8,t1,t2
-	vpaddq		t2,t1,t1
-	vmovq		t1x,d2
-
-	# t1 = [ hc0[3] * r3, hc0[2] * u3, hc0[1] * w3, hc0[0] * y3 ]
-	vpmuludq	hc0,ruwy3,t1
-	# t1 += [ hc1[3] * r2, hc1[2] * u2, hc1[1] * w2, hc1[0] * y2 ]
-	vpmuludq	hc1,ruwy2,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc2[3] * r1, hc2[2] * u1, hc2[1] * w1, hc2[0] * y1 ]
-	vpmuludq	hc2,ruwy1,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc3[3] * r0, hc3[2] * u0, hc3[1] * w0, hc3[0] * y0 ]
-	vpmuludq	hc3,ruwy0,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc4[3] * s4, hc4[2] * v4, hc4[1] * x4, hc4[0] * z4 ]
-	vpmuludq	hc4,svxz4,t2
-	vpaddq		t2,t1,t1
-	# d3 = t1[0] + t1[1] + t1[2] + t1[3]
-	vpermq		$0xee,t1,t2
-	vpaddq		t2,t1,t1
-	vpsrldq		$8,t1,t2
-	vpaddq		t2,t1,t1
-	vmovq		t1x,d3
-
-	# t1 = [ hc0[3] * r4, hc0[2] * u4, hc0[1] * w4, hc0[0] * y4 ]
-	vpmuludq	hc0,ruwy4,t1
-	# t1 += [ hc1[3] * r3, hc1[2] * u3, hc1[1] * w3, hc1[0] * y3 ]
-	vpmuludq	hc1,ruwy3,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc2[3] * r2, hc2[2] * u2, hc2[1] * w2, hc2[0] * y2 ]
-	vpmuludq	hc2,ruwy2,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc3[3] * r1, hc3[2] * u1, hc3[1] * w1, hc3[0] * y1 ]
-	vpmuludq	hc3,ruwy1,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc4[3] * r0, hc4[2] * u0, hc4[1] * w0, hc4[0] * y0 ]
-	vpmuludq	hc4,ruwy0,t2
-	vpaddq		t2,t1,t1
-	# d4 = t1[0] + t1[1] + t1[2] + t1[3]
-	vpermq		$0xee,t1,t2
-	vpaddq		t2,t1,t1
-	vpsrldq		$8,t1,t2
-	vpaddq		t2,t1,t1
-	vmovq		t1x,d4
-
-	# Now do a partial reduction mod (2^130)-5, carrying h0 -> h1 -> h2 ->
-	# h3 -> h4 -> h0 -> h1 to get h0,h2,h3,h4 < 2^26 and h1 < 2^26 + a small
-	# amount.  Careful: we must not assume the carry bits 'd0 >> 26',
-	# 'd1 >> 26', 'd2 >> 26', 'd3 >> 26', and '(d4 >> 26) * 5' fit in 32-bit
-	# integers.  It's true in a single-block implementation, but not here.
-
-	# d1 += d0 >> 26
-	mov		d0,%rax
-	shr		$26,%rax
-	add		%rax,d1
-	# h0 = d0 & 0x3ffffff
-	mov		d0,%rbx
-	and		$0x3ffffff,%ebx
-
-	# d2 += d1 >> 26
-	mov		d1,%rax
-	shr		$26,%rax
-	add		%rax,d2
-	# h1 = d1 & 0x3ffffff
-	mov		d1,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h1
-
-	# d3 += d2 >> 26
-	mov		d2,%rax
-	shr		$26,%rax
-	add		%rax,d3
-	# h2 = d2 & 0x3ffffff
-	mov		d2,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h2
-
-	# d4 += d3 >> 26
-	mov		d3,%rax
-	shr		$26,%rax
-	add		%rax,d4
-	# h3 = d3 & 0x3ffffff
-	mov		d3,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h3
-
-	# h0 += (d4 >> 26) * 5
-	mov		d4,%rax
-	shr		$26,%rax
-	lea		(%rax,%rax,4),%rax
-	add		%rax,%rbx
-	# h4 = d4 & 0x3ffffff
-	mov		d4,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h4
-
-	# h1 += h0 >> 26
-	mov		%rbx,%rax
-	shr		$26,%rax
-	add		%eax,h1
-	# h0 = h0 & 0x3ffffff
-	andl		$0x3ffffff,%ebx
-	mov		%ebx,h0
-
-	add		$0x40,m
-	dec		%rcx
-	jnz		.Ldoblock4
-
-	vzeroupper
-	pop		%r13
-	pop		%r12
-	pop		%rbx
-	ret
-ENDPROC(poly1305_4block_avx2)
diff --git a/arch/x86/crypto/poly1305-sse2-x86_64.S b/arch/x86/crypto/poly1305-sse2-x86_64.S
deleted file mode 100644
index 5578f846..0000000
--- a/arch/x86/crypto/poly1305-sse2-x86_64.S
+++ /dev/null
@@ -1,590 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/*
- * Poly1305 authenticator algorithm, RFC7539, x64 SSE2 functions
- *
- * Copyright (C) 2015 Martin Willi
- */
-
-#include <linux/linkage.h>
-
-.section	.rodata.cst16.ANMASK, "aM", @progbits, 16
-.align 16
-ANMASK:	.octa 0x0000000003ffffff0000000003ffffff
-
-.section	.rodata.cst16.ORMASK, "aM", @progbits, 16
-.align 16
-ORMASK:	.octa 0x00000000010000000000000001000000
-
-.text
-
-#define h0 0x00(%rdi)
-#define h1 0x04(%rdi)
-#define h2 0x08(%rdi)
-#define h3 0x0c(%rdi)
-#define h4 0x10(%rdi)
-#define r0 0x00(%rdx)
-#define r1 0x04(%rdx)
-#define r2 0x08(%rdx)
-#define r3 0x0c(%rdx)
-#define r4 0x10(%rdx)
-#define s1 0x00(%rsp)
-#define s2 0x04(%rsp)
-#define s3 0x08(%rsp)
-#define s4 0x0c(%rsp)
-#define m %rsi
-#define h01 %xmm0
-#define h23 %xmm1
-#define h44 %xmm2
-#define t1 %xmm3
-#define t2 %xmm4
-#define t3 %xmm5
-#define t4 %xmm6
-#define mask %xmm7
-#define d0 %r8
-#define d1 %r9
-#define d2 %r10
-#define d3 %r11
-#define d4 %r12
-
-ENTRY(poly1305_block_sse2)
-	# %rdi: Accumulator h[5]
-	# %rsi: 16 byte input block m
-	# %rdx: Poly1305 key r[5]
-	# %rcx: Block count
-
-	# This single block variant tries to improve performance by doing two
-	# multiplications in parallel using SSE instructions. There is quite
-	# some quardword packing involved, hence the speedup is marginal.
-
-	push		%rbx
-	push		%r12
-	sub		$0x10,%rsp
-
-	# s1..s4 = r1..r4 * 5
-	mov		r1,%eax
-	lea		(%eax,%eax,4),%eax
-	mov		%eax,s1
-	mov		r2,%eax
-	lea		(%eax,%eax,4),%eax
-	mov		%eax,s2
-	mov		r3,%eax
-	lea		(%eax,%eax,4),%eax
-	mov		%eax,s3
-	mov		r4,%eax
-	lea		(%eax,%eax,4),%eax
-	mov		%eax,s4
-
-	movdqa		ANMASK(%rip),mask
-
-.Ldoblock:
-	# h01 = [0, h1, 0, h0]
-	# h23 = [0, h3, 0, h2]
-	# h44 = [0, h4, 0, h4]
-	movd		h0,h01
-	movd		h1,t1
-	movd		h2,h23
-	movd		h3,t2
-	movd		h4,h44
-	punpcklqdq	t1,h01
-	punpcklqdq	t2,h23
-	punpcklqdq	h44,h44
-
-	# h01 += [ (m[3-6] >> 2) & 0x3ffffff, m[0-3] & 0x3ffffff ]
-	movd		0x00(m),t1
-	movd		0x03(m),t2
-	psrld		$2,t2
-	punpcklqdq	t2,t1
-	pand		mask,t1
-	paddd		t1,h01
-	# h23 += [ (m[9-12] >> 6) & 0x3ffffff, (m[6-9] >> 4) & 0x3ffffff ]
-	movd		0x06(m),t1
-	movd		0x09(m),t2
-	psrld		$4,t1
-	psrld		$6,t2
-	punpcklqdq	t2,t1
-	pand		mask,t1
-	paddd		t1,h23
-	# h44 += [ (m[12-15] >> 8) | (1 << 24), (m[12-15] >> 8) | (1 << 24) ]
-	mov		0x0c(m),%eax
-	shr		$8,%eax
-	or		$0x01000000,%eax
-	movd		%eax,t1
-	pshufd		$0xc4,t1,t1
-	paddd		t1,h44
-
-	# t1[0] = h0 * r0 + h2 * s3
-	# t1[1] = h1 * s4 + h3 * s2
-	movd		r0,t1
-	movd		s4,t2
-	punpcklqdq	t2,t1
-	pmuludq		h01,t1
-	movd		s3,t2
-	movd		s2,t3
-	punpcklqdq	t3,t2
-	pmuludq		h23,t2
-	paddq		t2,t1
-	# t2[0] = h0 * r1 + h2 * s4
-	# t2[1] = h1 * r0 + h3 * s3
-	movd		r1,t2
-	movd		r0,t3
-	punpcklqdq	t3,t2
-	pmuludq		h01,t2
-	movd		s4,t3
-	movd		s3,t4
-	punpcklqdq	t4,t3
-	pmuludq		h23,t3
-	paddq		t3,t2
-	# t3[0] = h4 * s1
-	# t3[1] = h4 * s2
-	movd		s1,t3
-	movd		s2,t4
-	punpcklqdq	t4,t3
-	pmuludq		h44,t3
-	# d0 = t1[0] + t1[1] + t3[0]
-	# d1 = t2[0] + t2[1] + t3[1]
-	movdqa		t1,t4
-	punpcklqdq	t2,t4
-	punpckhqdq	t2,t1
-	paddq		t4,t1
-	paddq		t3,t1
-	movq		t1,d0
-	psrldq		$8,t1
-	movq		t1,d1
-
-	# t1[0] = h0 * r2 + h2 * r0
-	# t1[1] = h1 * r1 + h3 * s4
-	movd		r2,t1
-	movd		r1,t2
-	punpcklqdq 	t2,t1
-	pmuludq		h01,t1
-	movd		r0,t2
-	movd		s4,t3
-	punpcklqdq	t3,t2
-	pmuludq		h23,t2
-	paddq		t2,t1
-	# t2[0] = h0 * r3 + h2 * r1
-	# t2[1] = h1 * r2 + h3 * r0
-	movd		r3,t2
-	movd		r2,t3
-	punpcklqdq	t3,t2
-	pmuludq		h01,t2
-	movd		r1,t3
-	movd		r0,t4
-	punpcklqdq	t4,t3
-	pmuludq		h23,t3
-	paddq		t3,t2
-	# t3[0] = h4 * s3
-	# t3[1] = h4 * s4
-	movd		s3,t3
-	movd		s4,t4
-	punpcklqdq	t4,t3
-	pmuludq		h44,t3
-	# d2 = t1[0] + t1[1] + t3[0]
-	# d3 = t2[0] + t2[1] + t3[1]
-	movdqa		t1,t4
-	punpcklqdq	t2,t4
-	punpckhqdq	t2,t1
-	paddq		t4,t1
-	paddq		t3,t1
-	movq		t1,d2
-	psrldq		$8,t1
-	movq		t1,d3
-
-	# t1[0] = h0 * r4 + h2 * r2
-	# t1[1] = h1 * r3 + h3 * r1
-	movd		r4,t1
-	movd		r3,t2
-	punpcklqdq	t2,t1
-	pmuludq		h01,t1
-	movd		r2,t2
-	movd		r1,t3
-	punpcklqdq	t3,t2
-	pmuludq		h23,t2
-	paddq		t2,t1
-	# t3[0] = h4 * r0
-	movd		r0,t3
-	pmuludq		h44,t3
-	# d4 = t1[0] + t1[1] + t3[0]
-	movdqa		t1,t4
-	psrldq		$8,t4
-	paddq		t4,t1
-	paddq		t3,t1
-	movq		t1,d4
-
-	# d1 += d0 >> 26
-	mov		d0,%rax
-	shr		$26,%rax
-	add		%rax,d1
-	# h0 = d0 & 0x3ffffff
-	mov		d0,%rbx
-	and		$0x3ffffff,%ebx
-
-	# d2 += d1 >> 26
-	mov		d1,%rax
-	shr		$26,%rax
-	add		%rax,d2
-	# h1 = d1 & 0x3ffffff
-	mov		d1,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h1
-
-	# d3 += d2 >> 26
-	mov		d2,%rax
-	shr		$26,%rax
-	add		%rax,d3
-	# h2 = d2 & 0x3ffffff
-	mov		d2,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h2
-
-	# d4 += d3 >> 26
-	mov		d3,%rax
-	shr		$26,%rax
-	add		%rax,d4
-	# h3 = d3 & 0x3ffffff
-	mov		d3,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h3
-
-	# h0 += (d4 >> 26) * 5
-	mov		d4,%rax
-	shr		$26,%rax
-	lea		(%rax,%rax,4),%rax
-	add		%rax,%rbx
-	# h4 = d4 & 0x3ffffff
-	mov		d4,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h4
-
-	# h1 += h0 >> 26
-	mov		%rbx,%rax
-	shr		$26,%rax
-	add		%eax,h1
-	# h0 = h0 & 0x3ffffff
-	andl		$0x3ffffff,%ebx
-	mov		%ebx,h0
-
-	add		$0x10,m
-	dec		%rcx
-	jnz		.Ldoblock
-
-	# Zeroing of key material
-	mov		%rcx,0x00(%rsp)
-	mov		%rcx,0x08(%rsp)
-
-	add		$0x10,%rsp
-	pop		%r12
-	pop		%rbx
-	ret
-ENDPROC(poly1305_block_sse2)
-
-
-#define u0 0x00(%r8)
-#define u1 0x04(%r8)
-#define u2 0x08(%r8)
-#define u3 0x0c(%r8)
-#define u4 0x10(%r8)
-#define hc0 %xmm0
-#define hc1 %xmm1
-#define hc2 %xmm2
-#define hc3 %xmm5
-#define hc4 %xmm6
-#define ru0 %xmm7
-#define ru1 %xmm8
-#define ru2 %xmm9
-#define ru3 %xmm10
-#define ru4 %xmm11
-#define sv1 %xmm12
-#define sv2 %xmm13
-#define sv3 %xmm14
-#define sv4 %xmm15
-#undef d0
-#define d0 %r13
-
-ENTRY(poly1305_2block_sse2)
-	# %rdi: Accumulator h[5]
-	# %rsi: 16 byte input block m
-	# %rdx: Poly1305 key r[5]
-	# %rcx: Doubleblock count
-	# %r8:  Poly1305 derived key r^2 u[5]
-
-	# This two-block variant further improves performance by using loop
-	# unrolled block processing. This is more straight forward and does
-	# less byte shuffling, but requires a second Poly1305 key r^2:
-	# h = (h + m) * r    =>    h = (h + m1) * r^2 + m2 * r
-
-	push		%rbx
-	push		%r12
-	push		%r13
-
-	# combine r0,u0
-	movd		u0,ru0
-	movd		r0,t1
-	punpcklqdq	t1,ru0
-
-	# combine r1,u1 and s1=r1*5,v1=u1*5
-	movd		u1,ru1
-	movd		r1,t1
-	punpcklqdq	t1,ru1
-	movdqa		ru1,sv1
-	pslld		$2,sv1
-	paddd		ru1,sv1
-
-	# combine r2,u2 and s2=r2*5,v2=u2*5
-	movd		u2,ru2
-	movd		r2,t1
-	punpcklqdq	t1,ru2
-	movdqa		ru2,sv2
-	pslld		$2,sv2
-	paddd		ru2,sv2
-
-	# combine r3,u3 and s3=r3*5,v3=u3*5
-	movd		u3,ru3
-	movd		r3,t1
-	punpcklqdq	t1,ru3
-	movdqa		ru3,sv3
-	pslld		$2,sv3
-	paddd		ru3,sv3
-
-	# combine r4,u4 and s4=r4*5,v4=u4*5
-	movd		u4,ru4
-	movd		r4,t1
-	punpcklqdq	t1,ru4
-	movdqa		ru4,sv4
-	pslld		$2,sv4
-	paddd		ru4,sv4
-
-.Ldoblock2:
-	# hc0 = [ m[16-19] & 0x3ffffff, h0 + m[0-3] & 0x3ffffff ]
-	movd		0x00(m),hc0
-	movd		0x10(m),t1
-	punpcklqdq	t1,hc0
-	pand		ANMASK(%rip),hc0
-	movd		h0,t1
-	paddd		t1,hc0
-	# hc1 = [ (m[19-22] >> 2) & 0x3ffffff, h1 + (m[3-6] >> 2) & 0x3ffffff ]
-	movd		0x03(m),hc1
-	movd		0x13(m),t1
-	punpcklqdq	t1,hc1
-	psrld		$2,hc1
-	pand		ANMASK(%rip),hc1
-	movd		h1,t1
-	paddd		t1,hc1
-	# hc2 = [ (m[22-25] >> 4) & 0x3ffffff, h2 + (m[6-9] >> 4) & 0x3ffffff ]
-	movd		0x06(m),hc2
-	movd		0x16(m),t1
-	punpcklqdq	t1,hc2
-	psrld		$4,hc2
-	pand		ANMASK(%rip),hc2
-	movd		h2,t1
-	paddd		t1,hc2
-	# hc3 = [ (m[25-28] >> 6) & 0x3ffffff, h3 + (m[9-12] >> 6) & 0x3ffffff ]
-	movd		0x09(m),hc3
-	movd		0x19(m),t1
-	punpcklqdq	t1,hc3
-	psrld		$6,hc3
-	pand		ANMASK(%rip),hc3
-	movd		h3,t1
-	paddd		t1,hc3
-	# hc4 = [ (m[28-31] >> 8) | (1<<24), h4 + (m[12-15] >> 8) | (1<<24) ]
-	movd		0x0c(m),hc4
-	movd		0x1c(m),t1
-	punpcklqdq	t1,hc4
-	psrld		$8,hc4
-	por		ORMASK(%rip),hc4
-	movd		h4,t1
-	paddd		t1,hc4
-
-	# t1 = [ hc0[1] * r0, hc0[0] * u0 ]
-	movdqa		ru0,t1
-	pmuludq		hc0,t1
-	# t1 += [ hc1[1] * s4, hc1[0] * v4 ]
-	movdqa		sv4,t2
-	pmuludq		hc1,t2
-	paddq		t2,t1
-	# t1 += [ hc2[1] * s3, hc2[0] * v3 ]
-	movdqa		sv3,t2
-	pmuludq		hc2,t2
-	paddq		t2,t1
-	# t1 += [ hc3[1] * s2, hc3[0] * v2 ]
-	movdqa		sv2,t2
-	pmuludq		hc3,t2
-	paddq		t2,t1
-	# t1 += [ hc4[1] * s1, hc4[0] * v1 ]
-	movdqa		sv1,t2
-	pmuludq		hc4,t2
-	paddq		t2,t1
-	# d0 = t1[0] + t1[1]
-	movdqa		t1,t2
-	psrldq		$8,t2
-	paddq		t2,t1
-	movq		t1,d0
-
-	# t1 = [ hc0[1] * r1, hc0[0] * u1 ]
-	movdqa		ru1,t1
-	pmuludq		hc0,t1
-	# t1 += [ hc1[1] * r0, hc1[0] * u0 ]
-	movdqa		ru0,t2
-	pmuludq		hc1,t2
-	paddq		t2,t1
-	# t1 += [ hc2[1] * s4, hc2[0] * v4 ]
-	movdqa		sv4,t2
-	pmuludq		hc2,t2
-	paddq		t2,t1
-	# t1 += [ hc3[1] * s3, hc3[0] * v3 ]
-	movdqa		sv3,t2
-	pmuludq		hc3,t2
-	paddq		t2,t1
-	# t1 += [ hc4[1] * s2, hc4[0] * v2 ]
-	movdqa		sv2,t2
-	pmuludq		hc4,t2
-	paddq		t2,t1
-	# d1 = t1[0] + t1[1]
-	movdqa		t1,t2
-	psrldq		$8,t2
-	paddq		t2,t1
-	movq		t1,d1
-
-	# t1 = [ hc0[1] * r2, hc0[0] * u2 ]
-	movdqa		ru2,t1
-	pmuludq		hc0,t1
-	# t1 += [ hc1[1] * r1, hc1[0] * u1 ]
-	movdqa		ru1,t2
-	pmuludq		hc1,t2
-	paddq		t2,t1
-	# t1 += [ hc2[1] * r0, hc2[0] * u0 ]
-	movdqa		ru0,t2
-	pmuludq		hc2,t2
-	paddq		t2,t1
-	# t1 += [ hc3[1] * s4, hc3[0] * v4 ]
-	movdqa		sv4,t2
-	pmuludq		hc3,t2
-	paddq		t2,t1
-	# t1 += [ hc4[1] * s3, hc4[0] * v3 ]
-	movdqa		sv3,t2
-	pmuludq		hc4,t2
-	paddq		t2,t1
-	# d2 = t1[0] + t1[1]
-	movdqa		t1,t2
-	psrldq		$8,t2
-	paddq		t2,t1
-	movq		t1,d2
-
-	# t1 = [ hc0[1] * r3, hc0[0] * u3 ]
-	movdqa		ru3,t1
-	pmuludq		hc0,t1
-	# t1 += [ hc1[1] * r2, hc1[0] * u2 ]
-	movdqa		ru2,t2
-	pmuludq		hc1,t2
-	paddq		t2,t1
-	# t1 += [ hc2[1] * r1, hc2[0] * u1 ]
-	movdqa		ru1,t2
-	pmuludq		hc2,t2
-	paddq		t2,t1
-	# t1 += [ hc3[1] * r0, hc3[0] * u0 ]
-	movdqa		ru0,t2
-	pmuludq		hc3,t2
-	paddq		t2,t1
-	# t1 += [ hc4[1] * s4, hc4[0] * v4 ]
-	movdqa		sv4,t2
-	pmuludq		hc4,t2
-	paddq		t2,t1
-	# d3 = t1[0] + t1[1]
-	movdqa		t1,t2
-	psrldq		$8,t2
-	paddq		t2,t1
-	movq		t1,d3
-
-	# t1 = [ hc0[1] * r4, hc0[0] * u4 ]
-	movdqa		ru4,t1
-	pmuludq		hc0,t1
-	# t1 += [ hc1[1] * r3, hc1[0] * u3 ]
-	movdqa		ru3,t2
-	pmuludq		hc1,t2
-	paddq		t2,t1
-	# t1 += [ hc2[1] * r2, hc2[0] * u2 ]
-	movdqa		ru2,t2
-	pmuludq		hc2,t2
-	paddq		t2,t1
-	# t1 += [ hc3[1] * r1, hc3[0] * u1 ]
-	movdqa		ru1,t2
-	pmuludq		hc3,t2
-	paddq		t2,t1
-	# t1 += [ hc4[1] * r0, hc4[0] * u0 ]
-	movdqa		ru0,t2
-	pmuludq		hc4,t2
-	paddq		t2,t1
-	# d4 = t1[0] + t1[1]
-	movdqa		t1,t2
-	psrldq		$8,t2
-	paddq		t2,t1
-	movq		t1,d4
-
-	# Now do a partial reduction mod (2^130)-5, carrying h0 -> h1 -> h2 ->
-	# h3 -> h4 -> h0 -> h1 to get h0,h2,h3,h4 < 2^26 and h1 < 2^26 + a small
-	# amount.  Careful: we must not assume the carry bits 'd0 >> 26',
-	# 'd1 >> 26', 'd2 >> 26', 'd3 >> 26', and '(d4 >> 26) * 5' fit in 32-bit
-	# integers.  It's true in a single-block implementation, but not here.
-
-	# d1 += d0 >> 26
-	mov		d0,%rax
-	shr		$26,%rax
-	add		%rax,d1
-	# h0 = d0 & 0x3ffffff
-	mov		d0,%rbx
-	and		$0x3ffffff,%ebx
-
-	# d2 += d1 >> 26
-	mov		d1,%rax
-	shr		$26,%rax
-	add		%rax,d2
-	# h1 = d1 & 0x3ffffff
-	mov		d1,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h1
-
-	# d3 += d2 >> 26
-	mov		d2,%rax
-	shr		$26,%rax
-	add		%rax,d3
-	# h2 = d2 & 0x3ffffff
-	mov		d2,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h2
-
-	# d4 += d3 >> 26
-	mov		d3,%rax
-	shr		$26,%rax
-	add		%rax,d4
-	# h3 = d3 & 0x3ffffff
-	mov		d3,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h3
-
-	# h0 += (d4 >> 26) * 5
-	mov		d4,%rax
-	shr		$26,%rax
-	lea		(%rax,%rax,4),%rax
-	add		%rax,%rbx
-	# h4 = d4 & 0x3ffffff
-	mov		d4,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h4
-
-	# h1 += h0 >> 26
-	mov		%rbx,%rax
-	shr		$26,%rax
-	add		%eax,h1
-	# h0 = h0 & 0x3ffffff
-	andl		$0x3ffffff,%ebx
-	mov		%ebx,h0
-
-	add		$0x20,m
-	dec		%rcx
-	jnz		.Ldoblock2
-
-	pop		%r13
-	pop		%r12
-	pop		%rbx
-	ret
-ENDPROC(poly1305_2block_sse2)
diff --git a/arch/x86/crypto/poly1305-x86_64-cryptogams.pl b/arch/x86/crypto/poly1305-x86_64-cryptogams.pl
new file mode 100644
index 0000000..5b59399
--- /dev/null
+++ b/arch/x86/crypto/poly1305-x86_64-cryptogams.pl
@@ -0,0 +1,4265 @@
+#!/usr/bin/env perl
+# SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+#
+# Copyright (C) 2017-2018 Samuel Neves <sneves@dei.uc.pt>. All Rights Reserved.
+# Copyright (C) 2017-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+# Copyright (C) 2006-2017 CRYPTOGAMS by <appro@openssl.org>. All Rights Reserved.
+#
+# This code is taken from the OpenSSL project but the author, Andy Polyakov,
+# has relicensed it under the licenses specified in the SPDX header above.
+# The original headers, including the original license headers, are
+# included below for completeness.
+#
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+# ====================================================================
+#
+# This module implements Poly1305 hash for x86_64.
+#
+# March 2015
+#
+# Initial release.
+#
+# December 2016
+#
+# Add AVX512F+VL+BW code path.
+#
+# November 2017
+#
+# Convert AVX512F+VL+BW code path to pure AVX512F, so that it can be
+# executed even on Knights Landing. Trigger for modification was
+# observation that AVX512 code paths can negatively affect overall
+# Skylake-X system performance. Since we are likely to suppress
+# AVX512F capability flag [at least on Skylake-X], conversion serves
+# as kind of "investment protection". Note that next *lake processor,
+# Cannonlake, has AVX512IFMA code path to execute...
+#
+# Numbers are cycles per processed byte with poly1305_blocks alone,
+# measured with rdtsc at fixed clock frequency.
+#
+#		IALU/gcc-4.8(*)	AVX(**)		AVX2	AVX-512
+# P4		4.46/+120%	-
+# Core 2	2.41/+90%	-
+# Westmere	1.88/+120%	-
+# Sandy Bridge	1.39/+140%	1.10
+# Haswell	1.14/+175%	1.11		0.65
+# Skylake[-X]	1.13/+120%	0.96		0.51	[0.35]
+# Silvermont	2.83/+95%	-
+# Knights L	3.60/?		1.65		1.10	0.41(***)
+# Goldmont	1.70/+180%	-
+# VIA Nano	1.82/+150%	-
+# Sledgehammer	1.38/+160%	-
+# Bulldozer	2.30/+130%	0.97
+# Ryzen		1.15/+200%	1.08		1.18
+#
+# (*)	improvement coefficients relative to clang are more modest and
+#	are ~50% on most processors, in both cases we are comparing to
+#	__int128 code;
+# (**)	SSE2 implementation was attempted, but among non-AVX processors
+#	it was faster than integer-only code only on older Intel P4 and
+#	Core processors, 50-30%, less newer processor is, but slower on
+#	contemporary ones, for example almost 2x slower on Atom, and as
+#	former are naturally disappearing, SSE2 is deemed unnecessary;
+# (***)	strangely enough performance seems to vary from core to core,
+#	listed result is best case;
+
+$flavour = shift;
+$output  = shift;
+if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
+
+$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
+$kernel=0; $kernel=1 if (!$flavour && !$output);
+
+if (!$kernel) {
+	$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+	( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
+	( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
+	die "can't locate x86_64-xlate.pl";
+
+	open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\"";
+	*STDOUT=*OUT;
+
+	if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+	    =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
+		$avx = ($1>=2.19) + ($1>=2.22) + ($1>=2.25);
+	}
+
+	if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
+	    `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)(?:\.([0-9]+))?/) {
+		$avx = ($1>=2.09) + ($1>=2.10) + ($1>=2.12);
+		$avx += 1 if ($1==2.11 && $2>=8);
+	}
+
+	if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
+	    `ml64 2>&1` =~ /Version ([0-9]+)\./) {
+		$avx = ($1>=10) + ($1>=11);
+	}
+
+	if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([3-9]\.[0-9]+)/) {
+		$avx = ($2>=3.0) + ($2>3.0);
+	}
+} else {
+	$avx = 4; # The kernel uses ifdefs for this.
+}
+
+sub declare_function() {
+	my ($name, $align, $nargs) = @_;
+	if($kernel) {
+		$code .= ".align $align\n";
+		$code .= "ENTRY($name)\n";
+		$code .= ".L$name:\n";
+	} else {
+		$code .= ".globl	$name\n";
+		$code .= ".type	$name,\@function,$nargs\n";
+		$code .= ".align	$align\n";
+		$code .= "$name:\n";
+	}
+}
+
+sub end_function() {
+	my ($name) = @_;
+	if($kernel) {
+		$code .= "ENDPROC($name)\n";
+	} else {
+		$code .= ".size   $name,.-$name\n";
+	}
+}
+
+$code.=<<___ if $kernel;
+#include <linux/linkage.h>
+___
+
+if ($avx) {
+$code.=<<___ if $kernel;
+.section .rodata
+___
+$code.=<<___;
+.align	64
+.Lconst:
+.Lmask24:
+.long	0x0ffffff,0,0x0ffffff,0,0x0ffffff,0,0x0ffffff,0
+.L129:
+.long	`1<<24`,0,`1<<24`,0,`1<<24`,0,`1<<24`,0
+.Lmask26:
+.long	0x3ffffff,0,0x3ffffff,0,0x3ffffff,0,0x3ffffff,0
+.Lpermd_avx2:
+.long	2,2,2,3,2,0,2,1
+.Lpermd_avx512:
+.long	0,0,0,1, 0,2,0,3, 0,4,0,5, 0,6,0,7
+
+.L2_44_inp_permd:
+.long	0,1,1,2,2,3,7,7
+.L2_44_inp_shift:
+.quad	0,12,24,64
+.L2_44_mask:
+.quad	0xfffffffffff,0xfffffffffff,0x3ffffffffff,0xffffffffffffffff
+.L2_44_shift_rgt:
+.quad	44,44,42,64
+.L2_44_shift_lft:
+.quad	8,8,10,64
+
+.align	64
+.Lx_mask44:
+.quad	0xfffffffffff,0xfffffffffff,0xfffffffffff,0xfffffffffff
+.quad	0xfffffffffff,0xfffffffffff,0xfffffffffff,0xfffffffffff
+.Lx_mask42:
+.quad	0x3ffffffffff,0x3ffffffffff,0x3ffffffffff,0x3ffffffffff
+.quad	0x3ffffffffff,0x3ffffffffff,0x3ffffffffff,0x3ffffffffff
+___
+}
+$code.=<<___ if (!$kernel);
+.asciz	"Poly1305 for x86_64, CRYPTOGAMS by <appro\@openssl.org>"
+.align	16
+___
+
+my ($ctx,$inp,$len,$padbit)=("%rdi","%rsi","%rdx","%rcx");
+my ($mac,$nonce)=($inp,$len);	# *_emit arguments
+my ($d1,$d2,$d3, $r0,$r1,$s1)=("%r8","%r9","%rdi","%r11","%r12","%r13");
+my ($h0,$h1,$h2)=("%r14","%rbx","%r10");
+
+sub poly1305_iteration {
+# input:	copy of $r1 in %rax, $h0-$h2, $r0-$r1
+# output:	$h0-$h2 *= $r0-$r1
+$code.=<<___;
+	mulq	$h0			# h0*r1
+	mov	%rax,$d2
+	 mov	$r0,%rax
+	mov	%rdx,$d3
+
+	mulq	$h0			# h0*r0
+	mov	%rax,$h0		# future $h0
+	 mov	$r0,%rax
+	mov	%rdx,$d1
+
+	mulq	$h1			# h1*r0
+	add	%rax,$d2
+	 mov	$s1,%rax
+	adc	%rdx,$d3
+
+	mulq	$h1			# h1*s1
+	 mov	$h2,$h1			# borrow $h1
+	add	%rax,$h0
+	adc	%rdx,$d1
+
+	imulq	$s1,$h1			# h2*s1
+	add	$h1,$d2
+	 mov	$d1,$h1
+	adc	\$0,$d3
+
+	imulq	$r0,$h2			# h2*r0
+	add	$d2,$h1
+	mov	\$-4,%rax		# mask value
+	adc	$h2,$d3
+
+	and	$d3,%rax		# last reduction step
+	mov	$d3,$h2
+	shr	\$2,$d3
+	and	\$3,$h2
+	add	$d3,%rax
+	add	%rax,$h0
+	adc	\$0,$h1
+	adc	\$0,$h2
+___
+}
+
+########################################################################
+# Layout of opaque area is following.
+#
+#	unsigned __int64 h[3];		# current hash value base 2^64
+#	unsigned __int64 r[2];		# key value base 2^64
+
+$code.=<<___;
+.text
+___
+$code.=<<___ if (!$kernel);
+.extern	OPENSSL_ia32cap_P
+
+.globl	poly1305_init_x86_64
+.hidden	poly1305_init_x86_64
+.globl	poly1305_blocks_x86_64
+.hidden	poly1305_blocks_x86_64
+.globl	poly1305_emit_x86_64
+.hidden	poly1305_emit_x86_64
+___
+&declare_function("poly1305_init_x86_64", 32, 3);
+$code.=<<___;
+	xor	%eax,%eax
+	mov	%rax,0($ctx)		# initialize hash value
+	mov	%rax,8($ctx)
+	mov	%rax,16($ctx)
+
+	cmp	\$0,$inp
+	je	.Lno_key
+___
+$code.=<<___ if (!$kernel);
+	lea	poly1305_blocks_x86_64(%rip),%r10
+	lea	poly1305_emit_x86_64(%rip),%r11
+___
+$code.=<<___	if (!$kernel && $avx);
+	mov	OPENSSL_ia32cap_P+4(%rip),%r9
+	lea	poly1305_blocks_avx(%rip),%rax
+	lea	poly1305_emit_avx(%rip),%rcx
+	bt	\$`60-32`,%r9		# AVX?
+	cmovc	%rax,%r10
+	cmovc	%rcx,%r11
+___
+$code.=<<___	if (!$kernel && $avx>1);
+	lea	poly1305_blocks_avx2(%rip),%rax
+	bt	\$`5+32`,%r9		# AVX2?
+	cmovc	%rax,%r10
+___
+$code.=<<___	if (!$kernel && $avx>3);
+	mov	\$`(1<<31|1<<21|1<<16)`,%rax
+	shr	\$32,%r9
+	and	%rax,%r9
+	cmp	%rax,%r9
+	je	.Linit_base2_44
+___
+$code.=<<___;
+	mov	\$0x0ffffffc0fffffff,%rax
+	mov	\$0x0ffffffc0ffffffc,%rcx
+	and	0($inp),%rax
+	and	8($inp),%rcx
+	mov	%rax,24($ctx)
+	mov	%rcx,32($ctx)
+___
+$code.=<<___	if (!$kernel && $flavour !~ /elf32/);
+	mov	%r10,0(%rdx)
+	mov	%r11,8(%rdx)
+___
+$code.=<<___	if (!$kernel && $flavour =~ /elf32/);
+	mov	%r10d,0(%rdx)
+	mov	%r11d,4(%rdx)
+___
+$code.=<<___;
+	mov	\$1,%eax
+.Lno_key:
+	ret
+___
+&end_function("poly1305_init_x86_64");
+
+&declare_function("poly1305_blocks_x86_64", 32, 4);
+$code.=<<___;
+.cfi_startproc
+.Lblocks:
+	shr	\$4,$len
+	jz	.Lno_data		# too short
+
+	push	%rbx
+.cfi_push	%rbx
+	push	%r12
+.cfi_push	%r12
+	push	%r13
+.cfi_push	%r13
+	push	%r14
+.cfi_push	%r14
+	push	%r15
+.cfi_push	%r15
+	push	$ctx
+.cfi_push	$ctx
+.Lblocks_body:
+
+	mov	$len,%r15		# reassign $len
+
+	mov	24($ctx),$r0		# load r
+	mov	32($ctx),$s1
+
+	mov	0($ctx),$h0		# load hash value
+	mov	8($ctx),$h1
+	mov	16($ctx),$h2
+
+	mov	$s1,$r1
+	shr	\$2,$s1
+	mov	$r1,%rax
+	add	$r1,$s1			# s1 = r1 + (r1 >> 2)
+	jmp	.Loop
+
+.align	32
+.Loop:
+	add	0($inp),$h0		# accumulate input
+	adc	8($inp),$h1
+	lea	16($inp),$inp
+	adc	$padbit,$h2
+___
+
+	&poly1305_iteration();
+
+$code.=<<___;
+	mov	$r1,%rax
+	dec	%r15			# len-=16
+	jnz	.Loop
+
+	mov	0(%rsp),$ctx
+.cfi_restore	$ctx
+
+	mov	$h0,0($ctx)		# store hash value
+	mov	$h1,8($ctx)
+	mov	$h2,16($ctx)
+
+	mov	8(%rsp),%r15
+.cfi_restore	%r15
+	mov	16(%rsp),%r14
+.cfi_restore	%r14
+	mov	24(%rsp),%r13
+.cfi_restore	%r13
+	mov	32(%rsp),%r12
+.cfi_restore	%r12
+	mov	40(%rsp),%rbx
+.cfi_restore	%rbx
+	lea	48(%rsp),%rsp
+.cfi_adjust_cfa_offset	-48
+.Lno_data:
+.Lblocks_epilogue:
+	ret
+.cfi_endproc
+___
+&end_function("poly1305_blocks_x86_64");
+
+&declare_function("poly1305_emit_x86_64", 32, 3);
+$code.=<<___;
+.Lemit:
+	mov	0($ctx),%r8	# load hash value
+	mov	8($ctx),%r9
+	mov	16($ctx),%r10
+
+	mov	%r8,%rax
+	add	\$5,%r8		# compare to modulus
+	mov	%r9,%rcx
+	adc	\$0,%r9
+	adc	\$0,%r10
+	shr	\$2,%r10	# did 130-bit value overflow?
+	cmovnz	%r8,%rax
+	cmovnz	%r9,%rcx
+
+	add	0($nonce),%rax	# accumulate nonce
+	adc	8($nonce),%rcx
+	mov	%rax,0($mac)	# write result
+	mov	%rcx,8($mac)
+
+	ret
+___
+&end_function("poly1305_emit_x86_64");
+if ($avx) {
+
+if($kernel) {
+	$code .= "#ifdef CONFIG_AS_AVX\n";
+}
+
+########################################################################
+# Layout of opaque area is following.
+#
+#	unsigned __int32 h[5];		# current hash value base 2^26
+#	unsigned __int32 is_base2_26;
+#	unsigned __int64 r[2];		# key value base 2^64
+#	unsigned __int64 pad;
+#	struct { unsigned __int32 r^2, r^1, r^4, r^3; } r[9];
+#
+# where r^n are base 2^26 digits of degrees of multiplier key. There are
+# 5 digits, but last four are interleaved with multiples of 5, totalling
+# in 9 elements: r0, r1, 5*r1, r2, 5*r2, r3, 5*r3, r4, 5*r4.
+
+my ($H0,$H1,$H2,$H3,$H4, $T0,$T1,$T2,$T3,$T4, $D0,$D1,$D2,$D3,$D4, $MASK) =
+    map("%xmm$_",(0..15));
+
+$code.=<<___;
+.type	__poly1305_block,\@abi-omnipotent
+.align	32
+__poly1305_block:
+	push $ctx
+___
+	&poly1305_iteration();
+$code.=<<___;
+	pop $ctx
+	ret
+.size	__poly1305_block,.-__poly1305_block
+
+.type	__poly1305_init_avx,\@abi-omnipotent
+.align	32
+__poly1305_init_avx:
+	push %rbp
+	mov %rsp,%rbp
+	mov	$r0,$h0
+	mov	$r1,$h1
+	xor	$h2,$h2
+
+	lea	48+64($ctx),$ctx	# size optimization
+
+	mov	$r1,%rax
+	call	__poly1305_block	# r^2
+
+	mov	\$0x3ffffff,%eax	# save interleaved r^2 and r base 2^26
+	mov	\$0x3ffffff,%edx
+	mov	$h0,$d1
+	and	$h0#d,%eax
+	mov	$r0,$d2
+	and	$r0#d,%edx
+	mov	%eax,`16*0+0-64`($ctx)
+	shr	\$26,$d1
+	mov	%edx,`16*0+4-64`($ctx)
+	shr	\$26,$d2
+
+	mov	\$0x3ffffff,%eax
+	mov	\$0x3ffffff,%edx
+	and	$d1#d,%eax
+	and	$d2#d,%edx
+	mov	%eax,`16*1+0-64`($ctx)
+	lea	(%rax,%rax,4),%eax	# *5
+	mov	%edx,`16*1+4-64`($ctx)
+	lea	(%rdx,%rdx,4),%edx	# *5
+	mov	%eax,`16*2+0-64`($ctx)
+	shr	\$26,$d1
+	mov	%edx,`16*2+4-64`($ctx)
+	shr	\$26,$d2
+
+	mov	$h1,%rax
+	mov	$r1,%rdx
+	shl	\$12,%rax
+	shl	\$12,%rdx
+	or	$d1,%rax
+	or	$d2,%rdx
+	and	\$0x3ffffff,%eax
+	and	\$0x3ffffff,%edx
+	mov	%eax,`16*3+0-64`($ctx)
+	lea	(%rax,%rax,4),%eax	# *5
+	mov	%edx,`16*3+4-64`($ctx)
+	lea	(%rdx,%rdx,4),%edx	# *5
+	mov	%eax,`16*4+0-64`($ctx)
+	mov	$h1,$d1
+	mov	%edx,`16*4+4-64`($ctx)
+	mov	$r1,$d2
+
+	mov	\$0x3ffffff,%eax
+	mov	\$0x3ffffff,%edx
+	shr	\$14,$d1
+	shr	\$14,$d2
+	and	$d1#d,%eax
+	and	$d2#d,%edx
+	mov	%eax,`16*5+0-64`($ctx)
+	lea	(%rax,%rax,4),%eax	# *5
+	mov	%edx,`16*5+4-64`($ctx)
+	lea	(%rdx,%rdx,4),%edx	# *5
+	mov	%eax,`16*6+0-64`($ctx)
+	shr	\$26,$d1
+	mov	%edx,`16*6+4-64`($ctx)
+	shr	\$26,$d2
+
+	mov	$h2,%rax
+	shl	\$24,%rax
+	or	%rax,$d1
+	mov	$d1#d,`16*7+0-64`($ctx)
+	lea	($d1,$d1,4),$d1		# *5
+	mov	$d2#d,`16*7+4-64`($ctx)
+	lea	($d2,$d2,4),$d2		# *5
+	mov	$d1#d,`16*8+0-64`($ctx)
+	mov	$d2#d,`16*8+4-64`($ctx)
+
+	mov	$r1,%rax
+	call	__poly1305_block	# r^3
+
+	mov	\$0x3ffffff,%eax	# save r^3 base 2^26
+	mov	$h0,$d1
+	and	$h0#d,%eax
+	shr	\$26,$d1
+	mov	%eax,`16*0+12-64`($ctx)
+
+	mov	\$0x3ffffff,%edx
+	and	$d1#d,%edx
+	mov	%edx,`16*1+12-64`($ctx)
+	lea	(%rdx,%rdx,4),%edx	# *5
+	shr	\$26,$d1
+	mov	%edx,`16*2+12-64`($ctx)
+
+	mov	$h1,%rax
+	shl	\$12,%rax
+	or	$d1,%rax
+	and	\$0x3ffffff,%eax
+	mov	%eax,`16*3+12-64`($ctx)
+	lea	(%rax,%rax,4),%eax	# *5
+	mov	$h1,$d1
+	mov	%eax,`16*4+12-64`($ctx)
+
+	mov	\$0x3ffffff,%edx
+	shr	\$14,$d1
+	and	$d1#d,%edx
+	mov	%edx,`16*5+12-64`($ctx)
+	lea	(%rdx,%rdx,4),%edx	# *5
+	shr	\$26,$d1
+	mov	%edx,`16*6+12-64`($ctx)
+
+	mov	$h2,%rax
+	shl	\$24,%rax
+	or	%rax,$d1
+	mov	$d1#d,`16*7+12-64`($ctx)
+	lea	($d1,$d1,4),$d1		# *5
+	mov	$d1#d,`16*8+12-64`($ctx)
+
+	mov	$r1,%rax
+	call	__poly1305_block	# r^4
+
+	mov	\$0x3ffffff,%eax	# save r^4 base 2^26
+	mov	$h0,$d1
+	and	$h0#d,%eax
+	shr	\$26,$d1
+	mov	%eax,`16*0+8-64`($ctx)
+
+	mov	\$0x3ffffff,%edx
+	and	$d1#d,%edx
+	mov	%edx,`16*1+8-64`($ctx)
+	lea	(%rdx,%rdx,4),%edx	# *5
+	shr	\$26,$d1
+	mov	%edx,`16*2+8-64`($ctx)
+
+	mov	$h1,%rax
+	shl	\$12,%rax
+	or	$d1,%rax
+	and	\$0x3ffffff,%eax
+	mov	%eax,`16*3+8-64`($ctx)
+	lea	(%rax,%rax,4),%eax	# *5
+	mov	$h1,$d1
+	mov	%eax,`16*4+8-64`($ctx)
+
+	mov	\$0x3ffffff,%edx
+	shr	\$14,$d1
+	and	$d1#d,%edx
+	mov	%edx,`16*5+8-64`($ctx)
+	lea	(%rdx,%rdx,4),%edx	# *5
+	shr	\$26,$d1
+	mov	%edx,`16*6+8-64`($ctx)
+
+	mov	$h2,%rax
+	shl	\$24,%rax
+	or	%rax,$d1
+	mov	$d1#d,`16*7+8-64`($ctx)
+	lea	($d1,$d1,4),$d1		# *5
+	mov	$d1#d,`16*8+8-64`($ctx)
+
+	lea	-48-64($ctx),$ctx	# size [de-]optimization
+	pop %rbp
+	ret
+.size	__poly1305_init_avx,.-__poly1305_init_avx
+___
+
+&declare_function("poly1305_blocks_avx", 32, 4);
+$code.=<<___;
+.cfi_startproc
+	mov	20($ctx),%r8d		# is_base2_26
+	cmp	\$128,$len
+	jae	.Lblocks_avx
+	test	%r8d,%r8d
+	jz	.Lblocks
+
+.Lblocks_avx:
+	and	\$-16,$len
+	jz	.Lno_data_avx
+
+	vzeroupper
+
+	test	%r8d,%r8d
+	jz	.Lbase2_64_avx
+
+	test	\$31,$len
+	jz	.Leven_avx
+
+	push	%rbp
+.cfi_push	%rbp
+	mov 	%rsp,%rbp
+	push	%rbx
+.cfi_push	%rbx
+	push	%r12
+.cfi_push	%r12
+	push	%r13
+.cfi_push	%r13
+	push	%r14
+.cfi_push	%r14
+	push	%r15
+.cfi_push	%r15
+.Lblocks_avx_body:
+
+	mov	$len,%r15		# reassign $len
+
+	mov	0($ctx),$d1		# load hash value
+	mov	8($ctx),$d2
+	mov	16($ctx),$h2#d
+
+	mov	24($ctx),$r0		# load r
+	mov	32($ctx),$s1
+
+	################################# base 2^26 -> base 2^64
+	mov	$d1#d,$h0#d
+	and	\$`-1*(1<<31)`,$d1
+	mov	$d2,$r1			# borrow $r1
+	mov	$d2#d,$h1#d
+	and	\$`-1*(1<<31)`,$d2
+
+	shr	\$6,$d1
+	shl	\$52,$r1
+	add	$d1,$h0
+	shr	\$12,$h1
+	shr	\$18,$d2
+	add	$r1,$h0
+	adc	$d2,$h1
+
+	mov	$h2,$d1
+	shl	\$40,$d1
+	shr	\$24,$h2
+	add	$d1,$h1
+	adc	\$0,$h2			# can be partially reduced...
+
+	mov	\$-4,$d2		# ... so reduce
+	mov	$h2,$d1
+	and	$h2,$d2
+	shr	\$2,$d1
+	and	\$3,$h2
+	add	$d2,$d1			# =*5
+	add	$d1,$h0
+	adc	\$0,$h1
+	adc	\$0,$h2
+
+	mov	$s1,$r1
+	mov	$s1,%rax
+	shr	\$2,$s1
+	add	$r1,$s1			# s1 = r1 + (r1 >> 2)
+
+	add	0($inp),$h0		# accumulate input
+	adc	8($inp),$h1
+	lea	16($inp),$inp
+	adc	$padbit,$h2
+
+	call	__poly1305_block
+
+	test	$padbit,$padbit		# if $padbit is zero,
+	jz	.Lstore_base2_64_avx	# store hash in base 2^64 format
+
+	################################# base 2^64 -> base 2^26
+	mov	$h0,%rax
+	mov	$h0,%rdx
+	shr	\$52,$h0
+	mov	$h1,$r0
+	mov	$h1,$r1
+	shr	\$26,%rdx
+	and	\$0x3ffffff,%rax	# h[0]
+	shl	\$12,$r0
+	and	\$0x3ffffff,%rdx	# h[1]
+	shr	\$14,$h1
+	or	$r0,$h0
+	shl	\$24,$h2
+	and	\$0x3ffffff,$h0		# h[2]
+	shr	\$40,$r1
+	and	\$0x3ffffff,$h1		# h[3]
+	or	$r1,$h2			# h[4]
+
+	sub	\$16,%r15
+	jz	.Lstore_base2_26_avx
+
+	vmovd	%rax#d,$H0
+	vmovd	%rdx#d,$H1
+	vmovd	$h0#d,$H2
+	vmovd	$h1#d,$H3
+	vmovd	$h2#d,$H4
+	jmp	.Lproceed_avx
+
+.align	32
+.Lstore_base2_64_avx:
+	mov	$h0,0($ctx)
+	mov	$h1,8($ctx)
+	mov	$h2,16($ctx)		# note that is_base2_26 is zeroed
+	jmp	.Ldone_avx
+
+.align	16
+.Lstore_base2_26_avx:
+	mov	%rax#d,0($ctx)		# store hash value base 2^26
+	mov	%rdx#d,4($ctx)
+	mov	$h0#d,8($ctx)
+	mov	$h1#d,12($ctx)
+	mov	$h2#d,16($ctx)
+.align	16
+.Ldone_avx:
+	pop 		%r15
+.cfi_restore	%r15
+	pop 		%r14
+.cfi_restore	%r14
+	pop 		%r13
+.cfi_restore	%r13
+	pop 		%r12
+.cfi_restore	%r12
+	pop 		%rbx
+.cfi_restore	%rbx
+	pop 		%rbp
+.cfi_restore	%rbp
+.Lno_data_avx:
+.Lblocks_avx_epilogue:
+	ret
+.cfi_endproc
+
+.align	32
+.Lbase2_64_avx:
+.cfi_startproc
+	push	%rbp
+.cfi_push	%rbp
+	mov 	%rsp,%rbp
+	push	%rbx
+.cfi_push	%rbx
+	push	%r12
+.cfi_push	%r12
+	push	%r13
+.cfi_push	%r13
+	push	%r14
+.cfi_push	%r14
+	push	%r15
+.cfi_push	%r15
+.Lbase2_64_avx_body:
+
+	mov	$len,%r15		# reassign $len
+
+	mov	24($ctx),$r0		# load r
+	mov	32($ctx),$s1
+
+	mov	0($ctx),$h0		# load hash value
+	mov	8($ctx),$h1
+	mov	16($ctx),$h2#d
+
+	mov	$s1,$r1
+	mov	$s1,%rax
+	shr	\$2,$s1
+	add	$r1,$s1			# s1 = r1 + (r1 >> 2)
+
+	test	\$31,$len
+	jz	.Linit_avx
+
+	add	0($inp),$h0		# accumulate input
+	adc	8($inp),$h1
+	lea	16($inp),$inp
+	adc	$padbit,$h2
+	sub	\$16,%r15
+
+	call	__poly1305_block
+
+.Linit_avx:
+	################################# base 2^64 -> base 2^26
+	mov	$h0,%rax
+	mov	$h0,%rdx
+	shr	\$52,$h0
+	mov	$h1,$d1
+	mov	$h1,$d2
+	shr	\$26,%rdx
+	and	\$0x3ffffff,%rax	# h[0]
+	shl	\$12,$d1
+	and	\$0x3ffffff,%rdx	# h[1]
+	shr	\$14,$h1
+	or	$d1,$h0
+	shl	\$24,$h2
+	and	\$0x3ffffff,$h0		# h[2]
+	shr	\$40,$d2
+	and	\$0x3ffffff,$h1		# h[3]
+	or	$d2,$h2			# h[4]
+
+	vmovd	%rax#d,$H0
+	vmovd	%rdx#d,$H1
+	vmovd	$h0#d,$H2
+	vmovd	$h1#d,$H3
+	vmovd	$h2#d,$H4
+	movl	\$1,20($ctx)		# set is_base2_26
+
+	call	__poly1305_init_avx
+
+.Lproceed_avx:
+	mov	%r15,$len
+	pop 		%r15
+.cfi_restore	%r15
+	pop 		%r14
+.cfi_restore	%r14
+	pop 		%r13
+.cfi_restore	%r13
+	pop 		%r12
+.cfi_restore	%r12
+	pop 		%rbx
+.cfi_restore	%rbx
+	pop 		%rbp
+.cfi_restore	%rbp
+.Lbase2_64_avx_epilogue:
+	jmp	.Ldo_avx
+.cfi_endproc
+
+.align	32
+.Leven_avx:
+.cfi_startproc
+	vmovd		4*0($ctx),$H0		# load hash value
+	vmovd		4*1($ctx),$H1
+	vmovd		4*2($ctx),$H2
+	vmovd		4*3($ctx),$H3
+	vmovd		4*4($ctx),$H4
+
+.Ldo_avx:
+___
+$code.=<<___	if (!$win64);
+	lea		8(%rsp),%r10
+.cfi_def_cfa_register	%r10
+	and		\$-32,%rsp
+	sub		\$-8,%rsp
+	lea		-0x58(%rsp),%r11
+	sub		\$0x178,%rsp
+___
+$code.=<<___	if ($win64);
+	lea		-0xf8(%rsp),%r11
+	sub		\$0x218,%rsp
+	vmovdqa		%xmm6,0x50(%r11)
+	vmovdqa		%xmm7,0x60(%r11)
+	vmovdqa		%xmm8,0x70(%r11)
+	vmovdqa		%xmm9,0x80(%r11)
+	vmovdqa		%xmm10,0x90(%r11)
+	vmovdqa		%xmm11,0xa0(%r11)
+	vmovdqa		%xmm12,0xb0(%r11)
+	vmovdqa		%xmm13,0xc0(%r11)
+	vmovdqa		%xmm14,0xd0(%r11)
+	vmovdqa		%xmm15,0xe0(%r11)
+.Ldo_avx_body:
+___
+$code.=<<___;
+	sub		\$64,$len
+	lea		-32($inp),%rax
+	cmovc		%rax,$inp
+
+	vmovdqu		`16*3`($ctx),$D4	# preload r0^2
+	lea		`16*3+64`($ctx),$ctx	# size optimization
+	lea		.Lconst(%rip),%rcx
+
+	################################################################
+	# load input
+	vmovdqu		16*2($inp),$T0
+	vmovdqu		16*3($inp),$T1
+	vmovdqa		64(%rcx),$MASK		# .Lmask26
+
+	vpsrldq		\$6,$T0,$T2		# splat input
+	vpsrldq		\$6,$T1,$T3
+	vpunpckhqdq	$T1,$T0,$T4		# 4
+	vpunpcklqdq	$T1,$T0,$T0		# 0:1
+	vpunpcklqdq	$T3,$T2,$T3		# 2:3
+
+	vpsrlq		\$40,$T4,$T4		# 4
+	vpsrlq		\$26,$T0,$T1
+	vpand		$MASK,$T0,$T0		# 0
+	vpsrlq		\$4,$T3,$T2
+	vpand		$MASK,$T1,$T1		# 1
+	vpsrlq		\$30,$T3,$T3
+	vpand		$MASK,$T2,$T2		# 2
+	vpand		$MASK,$T3,$T3		# 3
+	vpor		32(%rcx),$T4,$T4	# padbit, yes, always
+
+	jbe		.Lskip_loop_avx
+
+	# expand and copy pre-calculated table to stack
+	vmovdqu		`16*1-64`($ctx),$D1
+	vmovdqu		`16*2-64`($ctx),$D2
+	vpshufd		\$0xEE,$D4,$D3		# 34xx -> 3434
+	vpshufd		\$0x44,$D4,$D0		# xx12 -> 1212
+	vmovdqa		$D3,-0x90(%r11)
+	vmovdqa		$D0,0x00(%rsp)
+	vpshufd		\$0xEE,$D1,$D4
+	vmovdqu		`16*3-64`($ctx),$D0
+	vpshufd		\$0x44,$D1,$D1
+	vmovdqa		$D4,-0x80(%r11)
+	vmovdqa		$D1,0x10(%rsp)
+	vpshufd		\$0xEE,$D2,$D3
+	vmovdqu		`16*4-64`($ctx),$D1
+	vpshufd		\$0x44,$D2,$D2
+	vmovdqa		$D3,-0x70(%r11)
+	vmovdqa		$D2,0x20(%rsp)
+	vpshufd		\$0xEE,$D0,$D4
+	vmovdqu		`16*5-64`($ctx),$D2
+	vpshufd		\$0x44,$D0,$D0
+	vmovdqa		$D4,-0x60(%r11)
+	vmovdqa		$D0,0x30(%rsp)
+	vpshufd		\$0xEE,$D1,$D3
+	vmovdqu		`16*6-64`($ctx),$D0
+	vpshufd		\$0x44,$D1,$D1
+	vmovdqa		$D3,-0x50(%r11)
+	vmovdqa		$D1,0x40(%rsp)
+	vpshufd		\$0xEE,$D2,$D4
+	vmovdqu		`16*7-64`($ctx),$D1
+	vpshufd		\$0x44,$D2,$D2
+	vmovdqa		$D4,-0x40(%r11)
+	vmovdqa		$D2,0x50(%rsp)
+	vpshufd		\$0xEE,$D0,$D3
+	vmovdqu		`16*8-64`($ctx),$D2
+	vpshufd		\$0x44,$D0,$D0
+	vmovdqa		$D3,-0x30(%r11)
+	vmovdqa		$D0,0x60(%rsp)
+	vpshufd		\$0xEE,$D1,$D4
+	vpshufd		\$0x44,$D1,$D1
+	vmovdqa		$D4,-0x20(%r11)
+	vmovdqa		$D1,0x70(%rsp)
+	vpshufd		\$0xEE,$D2,$D3
+	 vmovdqa	0x00(%rsp),$D4		# preload r0^2
+	vpshufd		\$0x44,$D2,$D2
+	vmovdqa		$D3,-0x10(%r11)
+	vmovdqa		$D2,0x80(%rsp)
+
+	jmp		.Loop_avx
+
+.align	32
+.Loop_avx:
+	################################################################
+	# ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2
+	# ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^3+inp[7]*r
+	#   \___________________/
+	# ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2+inp[8])*r^2
+	# ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^4+inp[7]*r^2+inp[9])*r
+	#   \___________________/ \____________________/
+	#
+	# Note that we start with inp[2:3]*r^2. This is because it
+	# doesn't depend on reduction in previous iteration.
+	################################################################
+	# d4 = h4*r0 + h3*r1   + h2*r2   + h1*r3   + h0*r4
+	# d3 = h3*r0 + h2*r1   + h1*r2   + h0*r3   + h4*5*r4
+	# d2 = h2*r0 + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	# d1 = h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3 + h2*5*r4
+	# d0 = h0*r0 + h4*5*r1 + h3*5*r2 + h2*5*r3 + h1*5*r4
+	#
+	# though note that $Tx and $Hx are "reversed" in this section,
+	# and $D4 is preloaded with r0^2...
+
+	vpmuludq	$T0,$D4,$D0		# d0 = h0*r0
+	vpmuludq	$T1,$D4,$D1		# d1 = h1*r0
+	  vmovdqa	$H2,0x20(%r11)				# offload hash
+	vpmuludq	$T2,$D4,$D2		# d3 = h2*r0
+	 vmovdqa	0x10(%rsp),$H2		# r1^2
+	vpmuludq	$T3,$D4,$D3		# d3 = h3*r0
+	vpmuludq	$T4,$D4,$D4		# d4 = h4*r0
+
+	  vmovdqa	$H0,0x00(%r11)				#
+	vpmuludq	0x20(%rsp),$T4,$H0	# h4*s1
+	  vmovdqa	$H1,0x10(%r11)				#
+	vpmuludq	$T3,$H2,$H1		# h3*r1
+	vpaddq		$H0,$D0,$D0		# d0 += h4*s1
+	vpaddq		$H1,$D4,$D4		# d4 += h3*r1
+	  vmovdqa	$H3,0x30(%r11)				#
+	vpmuludq	$T2,$H2,$H0		# h2*r1
+	vpmuludq	$T1,$H2,$H1		# h1*r1
+	vpaddq		$H0,$D3,$D3		# d3 += h2*r1
+	 vmovdqa	0x30(%rsp),$H3		# r2^2
+	vpaddq		$H1,$D2,$D2		# d2 += h1*r1
+	  vmovdqa	$H4,0x40(%r11)				#
+	vpmuludq	$T0,$H2,$H2		# h0*r1
+	 vpmuludq	$T2,$H3,$H0		# h2*r2
+	vpaddq		$H2,$D1,$D1		# d1 += h0*r1
+
+	 vmovdqa	0x40(%rsp),$H4		# s2^2
+	vpaddq		$H0,$D4,$D4		# d4 += h2*r2
+	vpmuludq	$T1,$H3,$H1		# h1*r2
+	vpmuludq	$T0,$H3,$H3		# h0*r2
+	vpaddq		$H1,$D3,$D3		# d3 += h1*r2
+	 vmovdqa	0x50(%rsp),$H2		# r3^2
+	vpaddq		$H3,$D2,$D2		# d2 += h0*r2
+	vpmuludq	$T4,$H4,$H0		# h4*s2
+	vpmuludq	$T3,$H4,$H4		# h3*s2
+	vpaddq		$H0,$D1,$D1		# d1 += h4*s2
+	 vmovdqa	0x60(%rsp),$H3		# s3^2
+	vpaddq		$H4,$D0,$D0		# d0 += h3*s2
+
+	 vmovdqa	0x80(%rsp),$H4		# s4^2
+	vpmuludq	$T1,$H2,$H1		# h1*r3
+	vpmuludq	$T0,$H2,$H2		# h0*r3
+	vpaddq		$H1,$D4,$D4		# d4 += h1*r3
+	vpaddq		$H2,$D3,$D3		# d3 += h0*r3
+	vpmuludq	$T4,$H3,$H0		# h4*s3
+	vpmuludq	$T3,$H3,$H1		# h3*s3
+	vpaddq		$H0,$D2,$D2		# d2 += h4*s3
+	 vmovdqu	16*0($inp),$H0				# load input
+	vpaddq		$H1,$D1,$D1		# d1 += h3*s3
+	vpmuludq	$T2,$H3,$H3		# h2*s3
+	 vpmuludq	$T2,$H4,$T2		# h2*s4
+	vpaddq		$H3,$D0,$D0		# d0 += h2*s3
+
+	 vmovdqu	16*1($inp),$H1				#
+	vpaddq		$T2,$D1,$D1		# d1 += h2*s4
+	vpmuludq	$T3,$H4,$T3		# h3*s4
+	vpmuludq	$T4,$H4,$T4		# h4*s4
+	 vpsrldq	\$6,$H0,$H2				# splat input
+	vpaddq		$T3,$D2,$D2		# d2 += h3*s4
+	vpaddq		$T4,$D3,$D3		# d3 += h4*s4
+	 vpsrldq	\$6,$H1,$H3				#
+	vpmuludq	0x70(%rsp),$T0,$T4	# h0*r4
+	vpmuludq	$T1,$H4,$T0		# h1*s4
+	 vpunpckhqdq	$H1,$H0,$H4		# 4
+	vpaddq		$T4,$D4,$D4		# d4 += h0*r4
+	 vmovdqa	-0x90(%r11),$T4		# r0^4
+	vpaddq		$T0,$D0,$D0		# d0 += h1*s4
+
+	vpunpcklqdq	$H1,$H0,$H0		# 0:1
+	vpunpcklqdq	$H3,$H2,$H3		# 2:3
+
+	#vpsrlq		\$40,$H4,$H4		# 4
+	vpsrldq		\$`40/8`,$H4,$H4	# 4
+	vpsrlq		\$26,$H0,$H1
+	vpand		$MASK,$H0,$H0		# 0
+	vpsrlq		\$4,$H3,$H2
+	vpand		$MASK,$H1,$H1		# 1
+	vpand		0(%rcx),$H4,$H4		# .Lmask24
+	vpsrlq		\$30,$H3,$H3
+	vpand		$MASK,$H2,$H2		# 2
+	vpand		$MASK,$H3,$H3		# 3
+	vpor		32(%rcx),$H4,$H4	# padbit, yes, always
+
+	vpaddq		0x00(%r11),$H0,$H0	# add hash value
+	vpaddq		0x10(%r11),$H1,$H1
+	vpaddq		0x20(%r11),$H2,$H2
+	vpaddq		0x30(%r11),$H3,$H3
+	vpaddq		0x40(%r11),$H4,$H4
+
+	lea		16*2($inp),%rax
+	lea		16*4($inp),$inp
+	sub		\$64,$len
+	cmovc		%rax,$inp
+
+	################################################################
+	# Now we accumulate (inp[0:1]+hash)*r^4
+	################################################################
+	# d4 = h4*r0 + h3*r1   + h2*r2   + h1*r3   + h0*r4
+	# d3 = h3*r0 + h2*r1   + h1*r2   + h0*r3   + h4*5*r4
+	# d2 = h2*r0 + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	# d1 = h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3 + h2*5*r4
+	# d0 = h0*r0 + h4*5*r1 + h3*5*r2 + h2*5*r3 + h1*5*r4
+
+	vpmuludq	$H0,$T4,$T0		# h0*r0
+	vpmuludq	$H1,$T4,$T1		# h1*r0
+	vpaddq		$T0,$D0,$D0
+	vpaddq		$T1,$D1,$D1
+	 vmovdqa	-0x80(%r11),$T2		# r1^4
+	vpmuludq	$H2,$T4,$T0		# h2*r0
+	vpmuludq	$H3,$T4,$T1		# h3*r0
+	vpaddq		$T0,$D2,$D2
+	vpaddq		$T1,$D3,$D3
+	vpmuludq	$H4,$T4,$T4		# h4*r0
+	 vpmuludq	-0x70(%r11),$H4,$T0	# h4*s1
+	vpaddq		$T4,$D4,$D4
+
+	vpaddq		$T0,$D0,$D0		# d0 += h4*s1
+	vpmuludq	$H2,$T2,$T1		# h2*r1
+	vpmuludq	$H3,$T2,$T0		# h3*r1
+	vpaddq		$T1,$D3,$D3		# d3 += h2*r1
+	 vmovdqa	-0x60(%r11),$T3		# r2^4
+	vpaddq		$T0,$D4,$D4		# d4 += h3*r1
+	vpmuludq	$H1,$T2,$T1		# h1*r1
+	vpmuludq	$H0,$T2,$T2		# h0*r1
+	vpaddq		$T1,$D2,$D2		# d2 += h1*r1
+	vpaddq		$T2,$D1,$D1		# d1 += h0*r1
+
+	 vmovdqa	-0x50(%r11),$T4		# s2^4
+	vpmuludq	$H2,$T3,$T0		# h2*r2
+	vpmuludq	$H1,$T3,$T1		# h1*r2
+	vpaddq		$T0,$D4,$D4		# d4 += h2*r2
+	vpaddq		$T1,$D3,$D3		# d3 += h1*r2
+	 vmovdqa	-0x40(%r11),$T2		# r3^4
+	vpmuludq	$H0,$T3,$T3		# h0*r2
+	vpmuludq	$H4,$T4,$T0		# h4*s2
+	vpaddq		$T3,$D2,$D2		# d2 += h0*r2
+	vpaddq		$T0,$D1,$D1		# d1 += h4*s2
+	 vmovdqa	-0x30(%r11),$T3		# s3^4
+	vpmuludq	$H3,$T4,$T4		# h3*s2
+	 vpmuludq	$H1,$T2,$T1		# h1*r3
+	vpaddq		$T4,$D0,$D0		# d0 += h3*s2
+
+	 vmovdqa	-0x10(%r11),$T4		# s4^4
+	vpaddq		$T1,$D4,$D4		# d4 += h1*r3
+	vpmuludq	$H0,$T2,$T2		# h0*r3
+	vpmuludq	$H4,$T3,$T0		# h4*s3
+	vpaddq		$T2,$D3,$D3		# d3 += h0*r3
+	vpaddq		$T0,$D2,$D2		# d2 += h4*s3
+	 vmovdqu	16*2($inp),$T0				# load input
+	vpmuludq	$H3,$T3,$T2		# h3*s3
+	vpmuludq	$H2,$T3,$T3		# h2*s3
+	vpaddq		$T2,$D1,$D1		# d1 += h3*s3
+	 vmovdqu	16*3($inp),$T1				#
+	vpaddq		$T3,$D0,$D0		# d0 += h2*s3
+
+	vpmuludq	$H2,$T4,$H2		# h2*s4
+	vpmuludq	$H3,$T4,$H3		# h3*s4
+	 vpsrldq	\$6,$T0,$T2				# splat input
+	vpaddq		$H2,$D1,$D1		# d1 += h2*s4
+	vpmuludq	$H4,$T4,$H4		# h4*s4
+	 vpsrldq	\$6,$T1,$T3				#
+	vpaddq		$H3,$D2,$H2		# h2 = d2 + h3*s4
+	vpaddq		$H4,$D3,$H3		# h3 = d3 + h4*s4
+	vpmuludq	-0x20(%r11),$H0,$H4	# h0*r4
+	vpmuludq	$H1,$T4,$H0
+	 vpunpckhqdq	$T1,$T0,$T4		# 4
+	vpaddq		$H4,$D4,$H4		# h4 = d4 + h0*r4
+	vpaddq		$H0,$D0,$H0		# h0 = d0 + h1*s4
+
+	vpunpcklqdq	$T1,$T0,$T0		# 0:1
+	vpunpcklqdq	$T3,$T2,$T3		# 2:3
+
+	#vpsrlq		\$40,$T4,$T4		# 4
+	vpsrldq		\$`40/8`,$T4,$T4	# 4
+	vpsrlq		\$26,$T0,$T1
+	 vmovdqa	0x00(%rsp),$D4		# preload r0^2
+	vpand		$MASK,$T0,$T0		# 0
+	vpsrlq		\$4,$T3,$T2
+	vpand		$MASK,$T1,$T1		# 1
+	vpand		0(%rcx),$T4,$T4		# .Lmask24
+	vpsrlq		\$30,$T3,$T3
+	vpand		$MASK,$T2,$T2		# 2
+	vpand		$MASK,$T3,$T3		# 3
+	vpor		32(%rcx),$T4,$T4	# padbit, yes, always
+
+	################################################################
+	# lazy reduction as discussed in "NEON crypto" by D.J. Bernstein
+	# and P. Schwabe
+
+	vpsrlq		\$26,$H3,$D3
+	vpand		$MASK,$H3,$H3
+	vpaddq		$D3,$H4,$H4		# h3 -> h4
+
+	vpsrlq		\$26,$H0,$D0
+	vpand		$MASK,$H0,$H0
+	vpaddq		$D0,$D1,$H1		# h0 -> h1
+
+	vpsrlq		\$26,$H4,$D0
+	vpand		$MASK,$H4,$H4
+
+	vpsrlq		\$26,$H1,$D1
+	vpand		$MASK,$H1,$H1
+	vpaddq		$D1,$H2,$H2		# h1 -> h2
+
+	vpaddq		$D0,$H0,$H0
+	vpsllq		\$2,$D0,$D0
+	vpaddq		$D0,$H0,$H0		# h4 -> h0
+
+	vpsrlq		\$26,$H2,$D2
+	vpand		$MASK,$H2,$H2
+	vpaddq		$D2,$H3,$H3		# h2 -> h3
+
+	vpsrlq		\$26,$H0,$D0
+	vpand		$MASK,$H0,$H0
+	vpaddq		$D0,$H1,$H1		# h0 -> h1
+
+	vpsrlq		\$26,$H3,$D3
+	vpand		$MASK,$H3,$H3
+	vpaddq		$D3,$H4,$H4		# h3 -> h4
+
+	ja		.Loop_avx
+
+.Lskip_loop_avx:
+	################################################################
+	# multiply (inp[0:1]+hash) or inp[2:3] by r^2:r^1
+
+	vpshufd		\$0x10,$D4,$D4		# r0^n, xx12 -> x1x2
+	add		\$32,$len
+	jnz		.Long_tail_avx
+
+	vpaddq		$H2,$T2,$T2
+	vpaddq		$H0,$T0,$T0
+	vpaddq		$H1,$T1,$T1
+	vpaddq		$H3,$T3,$T3
+	vpaddq		$H4,$T4,$T4
+
+.Long_tail_avx:
+	vmovdqa		$H2,0x20(%r11)
+	vmovdqa		$H0,0x00(%r11)
+	vmovdqa		$H1,0x10(%r11)
+	vmovdqa		$H3,0x30(%r11)
+	vmovdqa		$H4,0x40(%r11)
+
+	# d4 = h4*r0 + h3*r1   + h2*r2   + h1*r3   + h0*r4
+	# d3 = h3*r0 + h2*r1   + h1*r2   + h0*r3   + h4*5*r4
+	# d2 = h2*r0 + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	# d1 = h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3 + h2*5*r4
+	# d0 = h0*r0 + h4*5*r1 + h3*5*r2 + h2*5*r3 + h1*5*r4
+
+	vpmuludq	$T2,$D4,$D2		# d2 = h2*r0
+	vpmuludq	$T0,$D4,$D0		# d0 = h0*r0
+	 vpshufd	\$0x10,`16*1-64`($ctx),$H2		# r1^n
+	vpmuludq	$T1,$D4,$D1		# d1 = h1*r0
+	vpmuludq	$T3,$D4,$D3		# d3 = h3*r0
+	vpmuludq	$T4,$D4,$D4		# d4 = h4*r0
+
+	vpmuludq	$T3,$H2,$H0		# h3*r1
+	vpaddq		$H0,$D4,$D4		# d4 += h3*r1
+	 vpshufd	\$0x10,`16*2-64`($ctx),$H3		# s1^n
+	vpmuludq	$T2,$H2,$H1		# h2*r1
+	vpaddq		$H1,$D3,$D3		# d3 += h2*r1
+	 vpshufd	\$0x10,`16*3-64`($ctx),$H4		# r2^n
+	vpmuludq	$T1,$H2,$H0		# h1*r1
+	vpaddq		$H0,$D2,$D2		# d2 += h1*r1
+	vpmuludq	$T0,$H2,$H2		# h0*r1
+	vpaddq		$H2,$D1,$D1		# d1 += h0*r1
+	vpmuludq	$T4,$H3,$H3		# h4*s1
+	vpaddq		$H3,$D0,$D0		# d0 += h4*s1
+
+	 vpshufd	\$0x10,`16*4-64`($ctx),$H2		# s2^n
+	vpmuludq	$T2,$H4,$H1		# h2*r2
+	vpaddq		$H1,$D4,$D4		# d4 += h2*r2
+	vpmuludq	$T1,$H4,$H0		# h1*r2
+	vpaddq		$H0,$D3,$D3		# d3 += h1*r2
+	 vpshufd	\$0x10,`16*5-64`($ctx),$H3		# r3^n
+	vpmuludq	$T0,$H4,$H4		# h0*r2
+	vpaddq		$H4,$D2,$D2		# d2 += h0*r2
+	vpmuludq	$T4,$H2,$H1		# h4*s2
+	vpaddq		$H1,$D1,$D1		# d1 += h4*s2
+	 vpshufd	\$0x10,`16*6-64`($ctx),$H4		# s3^n
+	vpmuludq	$T3,$H2,$H2		# h3*s2
+	vpaddq		$H2,$D0,$D0		# d0 += h3*s2
+
+	vpmuludq	$T1,$H3,$H0		# h1*r3
+	vpaddq		$H0,$D4,$D4		# d4 += h1*r3
+	vpmuludq	$T0,$H3,$H3		# h0*r3
+	vpaddq		$H3,$D3,$D3		# d3 += h0*r3
+	 vpshufd	\$0x10,`16*7-64`($ctx),$H2		# r4^n
+	vpmuludq	$T4,$H4,$H1		# h4*s3
+	vpaddq		$H1,$D2,$D2		# d2 += h4*s3
+	 vpshufd	\$0x10,`16*8-64`($ctx),$H3		# s4^n
+	vpmuludq	$T3,$H4,$H0		# h3*s3
+	vpaddq		$H0,$D1,$D1		# d1 += h3*s3
+	vpmuludq	$T2,$H4,$H4		# h2*s3
+	vpaddq		$H4,$D0,$D0		# d0 += h2*s3
+
+	vpmuludq	$T0,$H2,$H2		# h0*r4
+	vpaddq		$H2,$D4,$D4		# h4 = d4 + h0*r4
+	vpmuludq	$T4,$H3,$H1		# h4*s4
+	vpaddq		$H1,$D3,$D3		# h3 = d3 + h4*s4
+	vpmuludq	$T3,$H3,$H0		# h3*s4
+	vpaddq		$H0,$D2,$D2		# h2 = d2 + h3*s4
+	vpmuludq	$T2,$H3,$H1		# h2*s4
+	vpaddq		$H1,$D1,$D1		# h1 = d1 + h2*s4
+	vpmuludq	$T1,$H3,$H3		# h1*s4
+	vpaddq		$H3,$D0,$D0		# h0 = d0 + h1*s4
+
+	jz		.Lshort_tail_avx
+
+	vmovdqu		16*0($inp),$H0		# load input
+	vmovdqu		16*1($inp),$H1
+
+	vpsrldq		\$6,$H0,$H2		# splat input
+	vpsrldq		\$6,$H1,$H3
+	vpunpckhqdq	$H1,$H0,$H4		# 4
+	vpunpcklqdq	$H1,$H0,$H0		# 0:1
+	vpunpcklqdq	$H3,$H2,$H3		# 2:3
+
+	vpsrlq		\$40,$H4,$H4		# 4
+	vpsrlq		\$26,$H0,$H1
+	vpand		$MASK,$H0,$H0		# 0
+	vpsrlq		\$4,$H3,$H2
+	vpand		$MASK,$H1,$H1		# 1
+	vpsrlq		\$30,$H3,$H3
+	vpand		$MASK,$H2,$H2		# 2
+	vpand		$MASK,$H3,$H3		# 3
+	vpor		32(%rcx),$H4,$H4	# padbit, yes, always
+
+	vpshufd		\$0x32,`16*0-64`($ctx),$T4	# r0^n, 34xx -> x3x4
+	vpaddq		0x00(%r11),$H0,$H0
+	vpaddq		0x10(%r11),$H1,$H1
+	vpaddq		0x20(%r11),$H2,$H2
+	vpaddq		0x30(%r11),$H3,$H3
+	vpaddq		0x40(%r11),$H4,$H4
+
+	################################################################
+	# multiply (inp[0:1]+hash) by r^4:r^3 and accumulate
+
+	vpmuludq	$H0,$T4,$T0		# h0*r0
+	vpaddq		$T0,$D0,$D0		# d0 += h0*r0
+	vpmuludq	$H1,$T4,$T1		# h1*r0
+	vpaddq		$T1,$D1,$D1		# d1 += h1*r0
+	vpmuludq	$H2,$T4,$T0		# h2*r0
+	vpaddq		$T0,$D2,$D2		# d2 += h2*r0
+	 vpshufd	\$0x32,`16*1-64`($ctx),$T2		# r1^n
+	vpmuludq	$H3,$T4,$T1		# h3*r0
+	vpaddq		$T1,$D3,$D3		# d3 += h3*r0
+	vpmuludq	$H4,$T4,$T4		# h4*r0
+	vpaddq		$T4,$D4,$D4		# d4 += h4*r0
+
+	vpmuludq	$H3,$T2,$T0		# h3*r1
+	vpaddq		$T0,$D4,$D4		# d4 += h3*r1
+	 vpshufd	\$0x32,`16*2-64`($ctx),$T3		# s1
+	vpmuludq	$H2,$T2,$T1		# h2*r1
+	vpaddq		$T1,$D3,$D3		# d3 += h2*r1
+	 vpshufd	\$0x32,`16*3-64`($ctx),$T4		# r2
+	vpmuludq	$H1,$T2,$T0		# h1*r1
+	vpaddq		$T0,$D2,$D2		# d2 += h1*r1
+	vpmuludq	$H0,$T2,$T2		# h0*r1
+	vpaddq		$T2,$D1,$D1		# d1 += h0*r1
+	vpmuludq	$H4,$T3,$T3		# h4*s1
+	vpaddq		$T3,$D0,$D0		# d0 += h4*s1
+
+	 vpshufd	\$0x32,`16*4-64`($ctx),$T2		# s2
+	vpmuludq	$H2,$T4,$T1		# h2*r2
+	vpaddq		$T1,$D4,$D4		# d4 += h2*r2
+	vpmuludq	$H1,$T4,$T0		# h1*r2
+	vpaddq		$T0,$D3,$D3		# d3 += h1*r2
+	 vpshufd	\$0x32,`16*5-64`($ctx),$T3		# r3
+	vpmuludq	$H0,$T4,$T4		# h0*r2
+	vpaddq		$T4,$D2,$D2		# d2 += h0*r2
+	vpmuludq	$H4,$T2,$T1		# h4*s2
+	vpaddq		$T1,$D1,$D1		# d1 += h4*s2
+	 vpshufd	\$0x32,`16*6-64`($ctx),$T4		# s3
+	vpmuludq	$H3,$T2,$T2		# h3*s2
+	vpaddq		$T2,$D0,$D0		# d0 += h3*s2
+
+	vpmuludq	$H1,$T3,$T0		# h1*r3
+	vpaddq		$T0,$D4,$D4		# d4 += h1*r3
+	vpmuludq	$H0,$T3,$T3		# h0*r3
+	vpaddq		$T3,$D3,$D3		# d3 += h0*r3
+	 vpshufd	\$0x32,`16*7-64`($ctx),$T2		# r4
+	vpmuludq	$H4,$T4,$T1		# h4*s3
+	vpaddq		$T1,$D2,$D2		# d2 += h4*s3
+	 vpshufd	\$0x32,`16*8-64`($ctx),$T3		# s4
+	vpmuludq	$H3,$T4,$T0		# h3*s3
+	vpaddq		$T0,$D1,$D1		# d1 += h3*s3
+	vpmuludq	$H2,$T4,$T4		# h2*s3
+	vpaddq		$T4,$D0,$D0		# d0 += h2*s3
+
+	vpmuludq	$H0,$T2,$T2		# h0*r4
+	vpaddq		$T2,$D4,$D4		# d4 += h0*r4
+	vpmuludq	$H4,$T3,$T1		# h4*s4
+	vpaddq		$T1,$D3,$D3		# d3 += h4*s4
+	vpmuludq	$H3,$T3,$T0		# h3*s4
+	vpaddq		$T0,$D2,$D2		# d2 += h3*s4
+	vpmuludq	$H2,$T3,$T1		# h2*s4
+	vpaddq		$T1,$D1,$D1		# d1 += h2*s4
+	vpmuludq	$H1,$T3,$T3		# h1*s4
+	vpaddq		$T3,$D0,$D0		# d0 += h1*s4
+
+.Lshort_tail_avx:
+	################################################################
+	# horizontal addition
+
+	vpsrldq		\$8,$D4,$T4
+	vpsrldq		\$8,$D3,$T3
+	vpsrldq		\$8,$D1,$T1
+	vpsrldq		\$8,$D0,$T0
+	vpsrldq		\$8,$D2,$T2
+	vpaddq		$T3,$D3,$D3
+	vpaddq		$T4,$D4,$D4
+	vpaddq		$T0,$D0,$D0
+	vpaddq		$T1,$D1,$D1
+	vpaddq		$T2,$D2,$D2
+
+	################################################################
+	# lazy reduction
+
+	vpsrlq		\$26,$D3,$H3
+	vpand		$MASK,$D3,$D3
+	vpaddq		$H3,$D4,$D4		# h3 -> h4
+
+	vpsrlq		\$26,$D0,$H0
+	vpand		$MASK,$D0,$D0
+	vpaddq		$H0,$D1,$D1		# h0 -> h1
+
+	vpsrlq		\$26,$D4,$H4
+	vpand		$MASK,$D4,$D4
+
+	vpsrlq		\$26,$D1,$H1
+	vpand		$MASK,$D1,$D1
+	vpaddq		$H1,$D2,$D2		# h1 -> h2
+
+	vpaddq		$H4,$D0,$D0
+	vpsllq		\$2,$H4,$H4
+	vpaddq		$H4,$D0,$D0		# h4 -> h0
+
+	vpsrlq		\$26,$D2,$H2
+	vpand		$MASK,$D2,$D2
+	vpaddq		$H2,$D3,$D3		# h2 -> h3
+
+	vpsrlq		\$26,$D0,$H0
+	vpand		$MASK,$D0,$D0
+	vpaddq		$H0,$D1,$D1		# h0 -> h1
+
+	vpsrlq		\$26,$D3,$H3
+	vpand		$MASK,$D3,$D3
+	vpaddq		$H3,$D4,$D4		# h3 -> h4
+
+	vmovd		$D0,`4*0-48-64`($ctx)	# save partially reduced
+	vmovd		$D1,`4*1-48-64`($ctx)
+	vmovd		$D2,`4*2-48-64`($ctx)
+	vmovd		$D3,`4*3-48-64`($ctx)
+	vmovd		$D4,`4*4-48-64`($ctx)
+___
+$code.=<<___	if ($win64);
+	vmovdqa		0x50(%r11),%xmm6
+	vmovdqa		0x60(%r11),%xmm7
+	vmovdqa		0x70(%r11),%xmm8
+	vmovdqa		0x80(%r11),%xmm9
+	vmovdqa		0x90(%r11),%xmm10
+	vmovdqa		0xa0(%r11),%xmm11
+	vmovdqa		0xb0(%r11),%xmm12
+	vmovdqa		0xc0(%r11),%xmm13
+	vmovdqa		0xd0(%r11),%xmm14
+	vmovdqa		0xe0(%r11),%xmm15
+	lea		0xf8(%r11),%rsp
+.Ldo_avx_epilogue:
+___
+$code.=<<___	if (!$win64);
+	lea		-8(%r10),%rsp
+.cfi_def_cfa_register	%rsp
+___
+$code.=<<___;
+	vzeroupper
+	ret
+.cfi_endproc
+___
+&end_function("poly1305_blocks_avx");
+
+&declare_function("poly1305_emit_avx", 32, 3);
+$code.=<<___;
+	cmpl	\$0,20($ctx)	# is_base2_26?
+	je	.Lemit
+
+	mov	0($ctx),%eax	# load hash value base 2^26
+	mov	4($ctx),%ecx
+	mov	8($ctx),%r8d
+	mov	12($ctx),%r11d
+	mov	16($ctx),%r10d
+
+	shl	\$26,%rcx	# base 2^26 -> base 2^64
+	mov	%r8,%r9
+	shl	\$52,%r8
+	add	%rcx,%rax
+	shr	\$12,%r9
+	add	%rax,%r8	# h0
+	adc	\$0,%r9
+
+	shl	\$14,%r11
+	mov	%r10,%rax
+	shr	\$24,%r10
+	add	%r11,%r9
+	shl	\$40,%rax
+	add	%rax,%r9	# h1
+	adc	\$0,%r10	# h2
+
+	mov	%r10,%rax	# could be partially reduced, so reduce
+	mov	%r10,%rcx
+	and	\$3,%r10
+	shr	\$2,%rax
+	and	\$-4,%rcx
+	add	%rcx,%rax
+	add	%rax,%r8
+	adc	\$0,%r9
+	adc	\$0,%r10
+
+	mov	%r8,%rax
+	add	\$5,%r8		# compare to modulus
+	mov	%r9,%rcx
+	adc	\$0,%r9
+	adc	\$0,%r10
+	shr	\$2,%r10	# did 130-bit value overflow?
+	cmovnz	%r8,%rax
+	cmovnz	%r9,%rcx
+
+	add	0($nonce),%rax	# accumulate nonce
+	adc	8($nonce),%rcx
+	mov	%rax,0($mac)	# write result
+	mov	%rcx,8($mac)
+
+	ret
+___
+&end_function("poly1305_emit_avx");
+
+if ($kernel) {
+	$code .= "#endif\n";
+}
+
+if ($avx>1) {
+
+if ($kernel) {
+	$code .= "#ifdef CONFIG_AS_AVX2\n";
+}
+
+my ($H0,$H1,$H2,$H3,$H4, $MASK, $T4,$T0,$T1,$T2,$T3, $D0,$D1,$D2,$D3,$D4) =
+    map("%ymm$_",(0..15));
+my $S4=$MASK;
+
+sub poly1305_blocks_avxN {
+	my ($avx512) = @_;
+	my $suffix = $avx512 ? "_avx512" : "";
+$code.=<<___;
+.cfi_startproc
+	mov	20($ctx),%r8d		# is_base2_26
+	cmp	\$128,$len
+	jae	.Lblocks_avx2$suffix
+	test	%r8d,%r8d
+	jz	.Lblocks
+
+.Lblocks_avx2$suffix:
+	and	\$-16,$len
+	jz	.Lno_data_avx2$suffix
+
+	vzeroupper
+
+	test	%r8d,%r8d
+	jz	.Lbase2_64_avx2$suffix
+
+	test	\$63,$len
+	jz	.Leven_avx2$suffix
+
+	push	%rbp
+.cfi_push	%rbp
+	mov 	%rsp,%rbp
+	push	%rbx
+.cfi_push	%rbx
+	push	%r12
+.cfi_push	%r12
+	push	%r13
+.cfi_push	%r13
+	push	%r14
+.cfi_push	%r14
+	push	%r15
+.cfi_push	%r15
+.Lblocks_avx2_body$suffix:
+
+	mov	$len,%r15		# reassign $len
+
+	mov	0($ctx),$d1		# load hash value
+	mov	8($ctx),$d2
+	mov	16($ctx),$h2#d
+
+	mov	24($ctx),$r0		# load r
+	mov	32($ctx),$s1
+
+	################################# base 2^26 -> base 2^64
+	mov	$d1#d,$h0#d
+	and	\$`-1*(1<<31)`,$d1
+	mov	$d2,$r1			# borrow $r1
+	mov	$d2#d,$h1#d
+	and	\$`-1*(1<<31)`,$d2
+
+	shr	\$6,$d1
+	shl	\$52,$r1
+	add	$d1,$h0
+	shr	\$12,$h1
+	shr	\$18,$d2
+	add	$r1,$h0
+	adc	$d2,$h1
+
+	mov	$h2,$d1
+	shl	\$40,$d1
+	shr	\$24,$h2
+	add	$d1,$h1
+	adc	\$0,$h2			# can be partially reduced...
+
+	mov	\$-4,$d2		# ... so reduce
+	mov	$h2,$d1
+	and	$h2,$d2
+	shr	\$2,$d1
+	and	\$3,$h2
+	add	$d2,$d1			# =*5
+	add	$d1,$h0
+	adc	\$0,$h1
+	adc	\$0,$h2
+
+	mov	$s1,$r1
+	mov	$s1,%rax
+	shr	\$2,$s1
+	add	$r1,$s1			# s1 = r1 + (r1 >> 2)
+
+.Lbase2_26_pre_avx2$suffix:
+	add	0($inp),$h0		# accumulate input
+	adc	8($inp),$h1
+	lea	16($inp),$inp
+	adc	$padbit,$h2
+	sub	\$16,%r15
+
+	call	__poly1305_block
+	mov	$r1,%rax
+
+	test	\$63,%r15
+	jnz	.Lbase2_26_pre_avx2$suffix
+
+	test	$padbit,$padbit		# if $padbit is zero,
+	jz	.Lstore_base2_64_avx2$suffix	# store hash in base 2^64 format
+
+	################################# base 2^64 -> base 2^26
+	mov	$h0,%rax
+	mov	$h0,%rdx
+	shr	\$52,$h0
+	mov	$h1,$r0
+	mov	$h1,$r1
+	shr	\$26,%rdx
+	and	\$0x3ffffff,%rax	# h[0]
+	shl	\$12,$r0
+	and	\$0x3ffffff,%rdx	# h[1]
+	shr	\$14,$h1
+	or	$r0,$h0
+	shl	\$24,$h2
+	and	\$0x3ffffff,$h0		# h[2]
+	shr	\$40,$r1
+	and	\$0x3ffffff,$h1		# h[3]
+	or	$r1,$h2			# h[4]
+
+	test	%r15,%r15
+	jz	.Lstore_base2_26_avx2$suffix
+
+	vmovd	%rax#d,%x#$H0
+	vmovd	%rdx#d,%x#$H1
+	vmovd	$h0#d,%x#$H2
+	vmovd	$h1#d,%x#$H3
+	vmovd	$h2#d,%x#$H4
+	jmp	.Lproceed_avx2$suffix
+
+.align	32
+.Lstore_base2_64_avx2$suffix:
+	mov	$h0,0($ctx)
+	mov	$h1,8($ctx)
+	mov	$h2,16($ctx)		# note that is_base2_26 is zeroed
+	jmp	.Ldone_avx2$suffix
+
+.align	16
+.Lstore_base2_26_avx2$suffix:
+	mov	%rax#d,0($ctx)		# store hash value base 2^26
+	mov	%rdx#d,4($ctx)
+	mov	$h0#d,8($ctx)
+	mov	$h1#d,12($ctx)
+	mov	$h2#d,16($ctx)
+.align	16
+.Ldone_avx2$suffix:
+	pop 		%r15
+.cfi_restore	%r15
+	pop 		%r14
+.cfi_restore	%r14
+	pop 		%r13
+.cfi_restore	%r13
+	pop 		%r12
+.cfi_restore	%r12
+	pop 		%rbx
+.cfi_restore	%rbx
+	pop 		%rbp
+.cfi_restore 	%rbp
+.Lno_data_avx2$suffix:
+.Lblocks_avx2_epilogue$suffix:
+	ret
+.cfi_endproc
+
+.align	32
+.Lbase2_64_avx2$suffix:
+.cfi_startproc
+	push	%rbp
+.cfi_push	%rbp
+	mov 	%rsp,%rbp
+	push	%rbx
+.cfi_push	%rbx
+	push	%r12
+.cfi_push	%r12
+	push	%r13
+.cfi_push	%r13
+	push	%r14
+.cfi_push	%r14
+	push	%r15
+.cfi_push	%r15
+.Lbase2_64_avx2_body$suffix:
+
+	mov	$len,%r15		# reassign $len
+
+	mov	24($ctx),$r0		# load r
+	mov	32($ctx),$s1
+
+	mov	0($ctx),$h0		# load hash value
+	mov	8($ctx),$h1
+	mov	16($ctx),$h2#d
+
+	mov	$s1,$r1
+	mov	$s1,%rax
+	shr	\$2,$s1
+	add	$r1,$s1			# s1 = r1 + (r1 >> 2)
+
+	test	\$63,$len
+	jz	.Linit_avx2$suffix
+
+.Lbase2_64_pre_avx2$suffix:
+	add	0($inp),$h0		# accumulate input
+	adc	8($inp),$h1
+	lea	16($inp),$inp
+	adc	$padbit,$h2
+	sub	\$16,%r15
+
+	call	__poly1305_block
+	mov	$r1,%rax
+
+	test	\$63,%r15
+	jnz	.Lbase2_64_pre_avx2$suffix
+
+.Linit_avx2$suffix:
+	################################# base 2^64 -> base 2^26
+	mov	$h0,%rax
+	mov	$h0,%rdx
+	shr	\$52,$h0
+	mov	$h1,$d1
+	mov	$h1,$d2
+	shr	\$26,%rdx
+	and	\$0x3ffffff,%rax	# h[0]
+	shl	\$12,$d1
+	and	\$0x3ffffff,%rdx	# h[1]
+	shr	\$14,$h1
+	or	$d1,$h0
+	shl	\$24,$h2
+	and	\$0x3ffffff,$h0		# h[2]
+	shr	\$40,$d2
+	and	\$0x3ffffff,$h1		# h[3]
+	or	$d2,$h2			# h[4]
+
+	vmovd	%rax#d,%x#$H0
+	vmovd	%rdx#d,%x#$H1
+	vmovd	$h0#d,%x#$H2
+	vmovd	$h1#d,%x#$H3
+	vmovd	$h2#d,%x#$H4
+	movl	\$1,20($ctx)		# set is_base2_26
+
+	call	__poly1305_init_avx
+
+.Lproceed_avx2$suffix:
+	mov	%r15,$len			# restore $len
+___
+$code.=<<___ if (!$kernel);
+	mov	OPENSSL_ia32cap_P+8(%rip),%r9d
+	mov	\$`(1<<31|1<<30|1<<16)`,%r11d
+___
+$code.=<<___;
+	pop 		%r15
+.cfi_restore	%r15
+	pop 		%r14
+.cfi_restore	%r14
+	pop 		%r13
+.cfi_restore	%r13
+	pop 		%r12
+.cfi_restore	%r12
+	pop 		%rbx
+.cfi_restore	%rbx
+	pop 		%rbp
+.cfi_restore 	%rbp
+.Lbase2_64_avx2_epilogue$suffix:
+	jmp	.Ldo_avx2$suffix
+.cfi_endproc
+
+.align	32
+.Leven_avx2$suffix:
+.cfi_startproc
+___
+$code.=<<___ if (!$kernel);
+	mov		OPENSSL_ia32cap_P+8(%rip),%r9d
+___
+$code.=<<___;
+	vmovd		4*0($ctx),%x#$H0	# load hash value base 2^26
+	vmovd		4*1($ctx),%x#$H1
+	vmovd		4*2($ctx),%x#$H2
+	vmovd		4*3($ctx),%x#$H3
+	vmovd		4*4($ctx),%x#$H4
+
+.Ldo_avx2$suffix:
+___
+$code.=<<___		if (!$kernel && $avx>2);
+	cmp		\$512,$len
+	jb		.Lskip_avx512
+	and		%r11d,%r9d
+	test		\$`1<<16`,%r9d		# check for AVX512F
+	jnz		.Lblocks_avx512
+.Lskip_avx512$suffix:
+___
+$code.=<<___ if ($avx > 2 && $avx512 && $kernel);
+	cmp		\$512,$len
+	jae		.Lblocks_avx512
+___
+$code.=<<___	if (!$win64);
+	lea		8(%rsp),%r10
+.cfi_def_cfa_register	%r10
+	sub		\$0x128,%rsp
+___
+$code.=<<___	if ($win64);
+	lea		8(%rsp),%r10
+	sub		\$0x1c8,%rsp
+	vmovdqa		%xmm6,-0xb0(%r10)
+	vmovdqa		%xmm7,-0xa0(%r10)
+	vmovdqa		%xmm8,-0x90(%r10)
+	vmovdqa		%xmm9,-0x80(%r10)
+	vmovdqa		%xmm10,-0x70(%r10)
+	vmovdqa		%xmm11,-0x60(%r10)
+	vmovdqa		%xmm12,-0x50(%r10)
+	vmovdqa		%xmm13,-0x40(%r10)
+	vmovdqa		%xmm14,-0x30(%r10)
+	vmovdqa		%xmm15,-0x20(%r10)
+.Ldo_avx2_body$suffix:
+___
+$code.=<<___;
+	lea		.Lconst(%rip),%rcx
+	lea		48+64($ctx),$ctx	# size optimization
+	vmovdqa		96(%rcx),$T0		# .Lpermd_avx2
+
+	# expand and copy pre-calculated table to stack
+	vmovdqu		`16*0-64`($ctx),%x#$T2
+	and		\$-512,%rsp
+	vmovdqu		`16*1-64`($ctx),%x#$T3
+	vmovdqu		`16*2-64`($ctx),%x#$T4
+	vmovdqu		`16*3-64`($ctx),%x#$D0
+	vmovdqu		`16*4-64`($ctx),%x#$D1
+	vmovdqu		`16*5-64`($ctx),%x#$D2
+	lea		0x90(%rsp),%rax		# size optimization
+	vmovdqu		`16*6-64`($ctx),%x#$D3
+	vpermd		$T2,$T0,$T2		# 00003412 -> 14243444
+	vmovdqu		`16*7-64`($ctx),%x#$D4
+	vpermd		$T3,$T0,$T3
+	vmovdqu		`16*8-64`($ctx),%x#$MASK
+	vpermd		$T4,$T0,$T4
+	vmovdqa		$T2,0x00(%rsp)
+	vpermd		$D0,$T0,$D0
+	vmovdqa		$T3,0x20-0x90(%rax)
+	vpermd		$D1,$T0,$D1
+	vmovdqa		$T4,0x40-0x90(%rax)
+	vpermd		$D2,$T0,$D2
+	vmovdqa		$D0,0x60-0x90(%rax)
+	vpermd		$D3,$T0,$D3
+	vmovdqa		$D1,0x80-0x90(%rax)
+	vpermd		$D4,$T0,$D4
+	vmovdqa		$D2,0xa0-0x90(%rax)
+	vpermd		$MASK,$T0,$MASK
+	vmovdqa		$D3,0xc0-0x90(%rax)
+	vmovdqa		$D4,0xe0-0x90(%rax)
+	vmovdqa		$MASK,0x100-0x90(%rax)
+	vmovdqa		64(%rcx),$MASK		# .Lmask26
+
+	################################################################
+	# load input
+	vmovdqu		16*0($inp),%x#$T0
+	vmovdqu		16*1($inp),%x#$T1
+	vinserti128	\$1,16*2($inp),$T0,$T0
+	vinserti128	\$1,16*3($inp),$T1,$T1
+	lea		16*4($inp),$inp
+
+	vpsrldq		\$6,$T0,$T2		# splat input
+	vpsrldq		\$6,$T1,$T3
+	vpunpckhqdq	$T1,$T0,$T4		# 4
+	vpunpcklqdq	$T3,$T2,$T2		# 2:3
+	vpunpcklqdq	$T1,$T0,$T0		# 0:1
+
+	vpsrlq		\$30,$T2,$T3
+	vpsrlq		\$4,$T2,$T2
+	vpsrlq		\$26,$T0,$T1
+	vpsrlq		\$40,$T4,$T4		# 4
+	vpand		$MASK,$T2,$T2		# 2
+	vpand		$MASK,$T0,$T0		# 0
+	vpand		$MASK,$T1,$T1		# 1
+	vpand		$MASK,$T3,$T3		# 3
+	vpor		32(%rcx),$T4,$T4	# padbit, yes, always
+
+	vpaddq		$H2,$T2,$H2		# accumulate input
+	sub		\$64,$len
+	jz		.Ltail_avx2$suffix
+	jmp		.Loop_avx2$suffix
+
+.align	32
+.Loop_avx2$suffix:
+	################################################################
+	# ((inp[0]*r^4+inp[4])*r^4+inp[ 8])*r^4
+	# ((inp[1]*r^4+inp[5])*r^4+inp[ 9])*r^3
+	# ((inp[2]*r^4+inp[6])*r^4+inp[10])*r^2
+	# ((inp[3]*r^4+inp[7])*r^4+inp[11])*r^1
+	#   \________/\__________/
+	################################################################
+	#vpaddq		$H2,$T2,$H2		# accumulate input
+	vpaddq		$H0,$T0,$H0
+	vmovdqa		`32*0`(%rsp),$T0	# r0^4
+	vpaddq		$H1,$T1,$H1
+	vmovdqa		`32*1`(%rsp),$T1	# r1^4
+	vpaddq		$H3,$T3,$H3
+	vmovdqa		`32*3`(%rsp),$T2	# r2^4
+	vpaddq		$H4,$T4,$H4
+	vmovdqa		`32*6-0x90`(%rax),$T3	# s3^4
+	vmovdqa		`32*8-0x90`(%rax),$S4	# s4^4
+
+	# d4 = h4*r0 + h3*r1   + h2*r2   + h1*r3   + h0*r4
+	# d3 = h3*r0 + h2*r1   + h1*r2   + h0*r3   + h4*5*r4
+	# d2 = h2*r0 + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	# d1 = h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3 + h2*5*r4
+	# d0 = h0*r0 + h4*5*r1 + h3*5*r2 + h2*5*r3 + h1*5*r4
+	#
+	# however, as h2 is "chronologically" first one available pull
+	# corresponding operations up, so it's
+	#
+	# d4 = h2*r2   + h4*r0 + h3*r1             + h1*r3   + h0*r4
+	# d3 = h2*r1   + h3*r0           + h1*r2   + h0*r3   + h4*5*r4
+	# d2 = h2*r0           + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	# d1 = h2*5*r4 + h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3
+	# d0 = h2*5*r3 + h0*r0 + h4*5*r1 + h3*5*r2           + h1*5*r4
+
+	vpmuludq	$H2,$T0,$D2		# d2 = h2*r0
+	vpmuludq	$H2,$T1,$D3		# d3 = h2*r1
+	vpmuludq	$H2,$T2,$D4		# d4 = h2*r2
+	vpmuludq	$H2,$T3,$D0		# d0 = h2*s3
+	vpmuludq	$H2,$S4,$D1		# d1 = h2*s4
+
+	vpmuludq	$H0,$T1,$T4		# h0*r1
+	vpmuludq	$H1,$T1,$H2		# h1*r1, borrow $H2 as temp
+	vpaddq		$T4,$D1,$D1		# d1 += h0*r1
+	vpaddq		$H2,$D2,$D2		# d2 += h1*r1
+	vpmuludq	$H3,$T1,$T4		# h3*r1
+	vpmuludq	`32*2`(%rsp),$H4,$H2	# h4*s1
+	vpaddq		$T4,$D4,$D4		# d4 += h3*r1
+	vpaddq		$H2,$D0,$D0		# d0 += h4*s1
+	 vmovdqa	`32*4-0x90`(%rax),$T1	# s2
+
+	vpmuludq	$H0,$T0,$T4		# h0*r0
+	vpmuludq	$H1,$T0,$H2		# h1*r0
+	vpaddq		$T4,$D0,$D0		# d0 += h0*r0
+	vpaddq		$H2,$D1,$D1		# d1 += h1*r0
+	vpmuludq	$H3,$T0,$T4		# h3*r0
+	vpmuludq	$H4,$T0,$H2		# h4*r0
+	 vmovdqu	16*0($inp),%x#$T0	# load input
+	vpaddq		$T4,$D3,$D3		# d3 += h3*r0
+	vpaddq		$H2,$D4,$D4		# d4 += h4*r0
+	 vinserti128	\$1,16*2($inp),$T0,$T0
+
+	vpmuludq	$H3,$T1,$T4		# h3*s2
+	vpmuludq	$H4,$T1,$H2		# h4*s2
+	 vmovdqu	16*1($inp),%x#$T1
+	vpaddq		$T4,$D0,$D0		# d0 += h3*s2
+	vpaddq		$H2,$D1,$D1		# d1 += h4*s2
+	 vmovdqa	`32*5-0x90`(%rax),$H2	# r3
+	vpmuludq	$H1,$T2,$T4		# h1*r2
+	vpmuludq	$H0,$T2,$T2		# h0*r2
+	vpaddq		$T4,$D3,$D3		# d3 += h1*r2
+	vpaddq		$T2,$D2,$D2		# d2 += h0*r2
+	 vinserti128	\$1,16*3($inp),$T1,$T1
+	 lea		16*4($inp),$inp
+
+	vpmuludq	$H1,$H2,$T4		# h1*r3
+	vpmuludq	$H0,$H2,$H2		# h0*r3
+	 vpsrldq	\$6,$T0,$T2		# splat input
+	vpaddq		$T4,$D4,$D4		# d4 += h1*r3
+	vpaddq		$H2,$D3,$D3		# d3 += h0*r3
+	vpmuludq	$H3,$T3,$T4		# h3*s3
+	vpmuludq	$H4,$T3,$H2		# h4*s3
+	 vpsrldq	\$6,$T1,$T3
+	vpaddq		$T4,$D1,$D1		# d1 += h3*s3
+	vpaddq		$H2,$D2,$D2		# d2 += h4*s3
+	 vpunpckhqdq	$T1,$T0,$T4		# 4
+
+	vpmuludq	$H3,$S4,$H3		# h3*s4
+	vpmuludq	$H4,$S4,$H4		# h4*s4
+	 vpunpcklqdq	$T1,$T0,$T0		# 0:1
+	vpaddq		$H3,$D2,$H2		# h2 = d2 + h3*r4
+	vpaddq		$H4,$D3,$H3		# h3 = d3 + h4*r4
+	 vpunpcklqdq	$T3,$T2,$T3		# 2:3
+	vpmuludq	`32*7-0x90`(%rax),$H0,$H4	# h0*r4
+	vpmuludq	$H1,$S4,$H0		# h1*s4
+	vmovdqa		64(%rcx),$MASK		# .Lmask26
+	vpaddq		$H4,$D4,$H4		# h4 = d4 + h0*r4
+	vpaddq		$H0,$D0,$H0		# h0 = d0 + h1*s4
+
+	################################################################
+	# lazy reduction (interleaved with tail of input splat)
+
+	vpsrlq		\$26,$H3,$D3
+	vpand		$MASK,$H3,$H3
+	vpaddq		$D3,$H4,$H4		# h3 -> h4
+
+	vpsrlq		\$26,$H0,$D0
+	vpand		$MASK,$H0,$H0
+	vpaddq		$D0,$D1,$H1		# h0 -> h1
+
+	vpsrlq		\$26,$H4,$D4
+	vpand		$MASK,$H4,$H4
+
+	 vpsrlq		\$4,$T3,$T2
+
+	vpsrlq		\$26,$H1,$D1
+	vpand		$MASK,$H1,$H1
+	vpaddq		$D1,$H2,$H2		# h1 -> h2
+
+	vpaddq		$D4,$H0,$H0
+	vpsllq		\$2,$D4,$D4
+	vpaddq		$D4,$H0,$H0		# h4 -> h0
+
+	 vpand		$MASK,$T2,$T2		# 2
+	 vpsrlq		\$26,$T0,$T1
+
+	vpsrlq		\$26,$H2,$D2
+	vpand		$MASK,$H2,$H2
+	vpaddq		$D2,$H3,$H3		# h2 -> h3
+
+	 vpaddq		$T2,$H2,$H2		# modulo-scheduled
+	 vpsrlq		\$30,$T3,$T3
+
+	vpsrlq		\$26,$H0,$D0
+	vpand		$MASK,$H0,$H0
+	vpaddq		$D0,$H1,$H1		# h0 -> h1
+
+	 vpsrlq		\$40,$T4,$T4		# 4
+
+	vpsrlq		\$26,$H3,$D3
+	vpand		$MASK,$H3,$H3
+	vpaddq		$D3,$H4,$H4		# h3 -> h4
+
+	 vpand		$MASK,$T0,$T0		# 0
+	 vpand		$MASK,$T1,$T1		# 1
+	 vpand		$MASK,$T3,$T3		# 3
+	 vpor		32(%rcx),$T4,$T4	# padbit, yes, always
+
+	sub		\$64,$len
+	jnz		.Loop_avx2$suffix
+
+	.byte		0x66,0x90
+.Ltail_avx2$suffix:
+	################################################################
+	# while above multiplications were by r^4 in all lanes, in last
+	# iteration we multiply least significant lane by r^4 and most
+	# significant one by r, so copy of above except that references
+	# to the precomputed table are displaced by 4...
+
+	#vpaddq		$H2,$T2,$H2		# accumulate input
+	vpaddq		$H0,$T0,$H0
+	vmovdqu		`32*0+4`(%rsp),$T0	# r0^4
+	vpaddq		$H1,$T1,$H1
+	vmovdqu		`32*1+4`(%rsp),$T1	# r1^4
+	vpaddq		$H3,$T3,$H3
+	vmovdqu		`32*3+4`(%rsp),$T2	# r2^4
+	vpaddq		$H4,$T4,$H4
+	vmovdqu		`32*6+4-0x90`(%rax),$T3	# s3^4
+	vmovdqu		`32*8+4-0x90`(%rax),$S4	# s4^4
+
+	vpmuludq	$H2,$T0,$D2		# d2 = h2*r0
+	vpmuludq	$H2,$T1,$D3		# d3 = h2*r1
+	vpmuludq	$H2,$T2,$D4		# d4 = h2*r2
+	vpmuludq	$H2,$T3,$D0		# d0 = h2*s3
+	vpmuludq	$H2,$S4,$D1		# d1 = h2*s4
+
+	vpmuludq	$H0,$T1,$T4		# h0*r1
+	vpmuludq	$H1,$T1,$H2		# h1*r1
+	vpaddq		$T4,$D1,$D1		# d1 += h0*r1
+	vpaddq		$H2,$D2,$D2		# d2 += h1*r1
+	vpmuludq	$H3,$T1,$T4		# h3*r1
+	vpmuludq	`32*2+4`(%rsp),$H4,$H2	# h4*s1
+	vpaddq		$T4,$D4,$D4		# d4 += h3*r1
+	vpaddq		$H2,$D0,$D0		# d0 += h4*s1
+
+	vpmuludq	$H0,$T0,$T4		# h0*r0
+	vpmuludq	$H1,$T0,$H2		# h1*r0
+	vpaddq		$T4,$D0,$D0		# d0 += h0*r0
+	 vmovdqu	`32*4+4-0x90`(%rax),$T1	# s2
+	vpaddq		$H2,$D1,$D1		# d1 += h1*r0
+	vpmuludq	$H3,$T0,$T4		# h3*r0
+	vpmuludq	$H4,$T0,$H2		# h4*r0
+	vpaddq		$T4,$D3,$D3		# d3 += h3*r0
+	vpaddq		$H2,$D4,$D4		# d4 += h4*r0
+
+	vpmuludq	$H3,$T1,$T4		# h3*s2
+	vpmuludq	$H4,$T1,$H2		# h4*s2
+	vpaddq		$T4,$D0,$D0		# d0 += h3*s2
+	vpaddq		$H2,$D1,$D1		# d1 += h4*s2
+	 vmovdqu	`32*5+4-0x90`(%rax),$H2	# r3
+	vpmuludq	$H1,$T2,$T4		# h1*r2
+	vpmuludq	$H0,$T2,$T2		# h0*r2
+	vpaddq		$T4,$D3,$D3		# d3 += h1*r2
+	vpaddq		$T2,$D2,$D2		# d2 += h0*r2
+
+	vpmuludq	$H1,$H2,$T4		# h1*r3
+	vpmuludq	$H0,$H2,$H2		# h0*r3
+	vpaddq		$T4,$D4,$D4		# d4 += h1*r3
+	vpaddq		$H2,$D3,$D3		# d3 += h0*r3
+	vpmuludq	$H3,$T3,$T4		# h3*s3
+	vpmuludq	$H4,$T3,$H2		# h4*s3
+	vpaddq		$T4,$D1,$D1		# d1 += h3*s3
+	vpaddq		$H2,$D2,$D2		# d2 += h4*s3
+
+	vpmuludq	$H3,$S4,$H3		# h3*s4
+	vpmuludq	$H4,$S4,$H4		# h4*s4
+	vpaddq		$H3,$D2,$H2		# h2 = d2 + h3*r4
+	vpaddq		$H4,$D3,$H3		# h3 = d3 + h4*r4
+	vpmuludq	`32*7+4-0x90`(%rax),$H0,$H4		# h0*r4
+	vpmuludq	$H1,$S4,$H0		# h1*s4
+	vmovdqa		64(%rcx),$MASK		# .Lmask26
+	vpaddq		$H4,$D4,$H4		# h4 = d4 + h0*r4
+	vpaddq		$H0,$D0,$H0		# h0 = d0 + h1*s4
+
+	################################################################
+	# horizontal addition
+
+	vpsrldq		\$8,$D1,$T1
+	vpsrldq		\$8,$H2,$T2
+	vpsrldq		\$8,$H3,$T3
+	vpsrldq		\$8,$H4,$T4
+	vpsrldq		\$8,$H0,$T0
+	vpaddq		$T1,$D1,$D1
+	vpaddq		$T2,$H2,$H2
+	vpaddq		$T3,$H3,$H3
+	vpaddq		$T4,$H4,$H4
+	vpaddq		$T0,$H0,$H0
+
+	vpermq		\$0x2,$H3,$T3
+	vpermq		\$0x2,$H4,$T4
+	vpermq		\$0x2,$H0,$T0
+	vpermq		\$0x2,$D1,$T1
+	vpermq		\$0x2,$H2,$T2
+	vpaddq		$T3,$H3,$H3
+	vpaddq		$T4,$H4,$H4
+	vpaddq		$T0,$H0,$H0
+	vpaddq		$T1,$D1,$D1
+	vpaddq		$T2,$H2,$H2
+
+	################################################################
+	# lazy reduction
+
+	vpsrlq		\$26,$H3,$D3
+	vpand		$MASK,$H3,$H3
+	vpaddq		$D3,$H4,$H4		# h3 -> h4
+
+	vpsrlq		\$26,$H0,$D0
+	vpand		$MASK,$H0,$H0
+	vpaddq		$D0,$D1,$H1		# h0 -> h1
+
+	vpsrlq		\$26,$H4,$D4
+	vpand		$MASK,$H4,$H4
+
+	vpsrlq		\$26,$H1,$D1
+	vpand		$MASK,$H1,$H1
+	vpaddq		$D1,$H2,$H2		# h1 -> h2
+
+	vpaddq		$D4,$H0,$H0
+	vpsllq		\$2,$D4,$D4
+	vpaddq		$D4,$H0,$H0		# h4 -> h0
+
+	vpsrlq		\$26,$H2,$D2
+	vpand		$MASK,$H2,$H2
+	vpaddq		$D2,$H3,$H3		# h2 -> h3
+
+	vpsrlq		\$26,$H0,$D0
+	vpand		$MASK,$H0,$H0
+	vpaddq		$D0,$H1,$H1		# h0 -> h1
+
+	vpsrlq		\$26,$H3,$D3
+	vpand		$MASK,$H3,$H3
+	vpaddq		$D3,$H4,$H4		# h3 -> h4
+
+	vmovd		%x#$H0,`4*0-48-64`($ctx)# save partially reduced
+	vmovd		%x#$H1,`4*1-48-64`($ctx)
+	vmovd		%x#$H2,`4*2-48-64`($ctx)
+	vmovd		%x#$H3,`4*3-48-64`($ctx)
+	vmovd		%x#$H4,`4*4-48-64`($ctx)
+___
+$code.=<<___	if ($win64);
+	vmovdqa		-0xb0(%r10),%xmm6
+	vmovdqa		-0xa0(%r10),%xmm7
+	vmovdqa		-0x90(%r10),%xmm8
+	vmovdqa		-0x80(%r10),%xmm9
+	vmovdqa		-0x70(%r10),%xmm10
+	vmovdqa		-0x60(%r10),%xmm11
+	vmovdqa		-0x50(%r10),%xmm12
+	vmovdqa		-0x40(%r10),%xmm13
+	vmovdqa		-0x30(%r10),%xmm14
+	vmovdqa		-0x20(%r10),%xmm15
+	lea		-8(%r10),%rsp
+.Ldo_avx2_epilogue$suffix:
+___
+$code.=<<___	if (!$win64);
+	lea		-8(%r10),%rsp
+.cfi_def_cfa_register	%rsp
+___
+$code.=<<___;
+	vzeroupper
+	ret
+.cfi_endproc
+___
+if($avx > 2 && $avx512) {
+my ($R0,$R1,$R2,$R3,$R4, $S1,$S2,$S3,$S4) = map("%zmm$_",(16..24));
+my ($M0,$M1,$M2,$M3,$M4) = map("%zmm$_",(25..29));
+my $PADBIT="%zmm30";
+
+map(s/%y/%z/,($T4,$T0,$T1,$T2,$T3));		# switch to %zmm domain
+map(s/%y/%z/,($D0,$D1,$D2,$D3,$D4));
+map(s/%y/%z/,($H0,$H1,$H2,$H3,$H4));
+map(s/%y/%z/,($MASK));
+
+$code.=<<___;
+.cfi_startproc
+.Lblocks_avx512:
+	mov		\$15,%eax
+	kmovw		%eax,%k2
+___
+$code.=<<___	if (!$win64);
+	lea		8(%rsp),%r10
+.cfi_def_cfa_register	%r10
+	sub		\$0x128,%rsp
+___
+$code.=<<___	if ($win64);
+	lea		8(%rsp),%r10
+	sub		\$0x1c8,%rsp
+	vmovdqa		%xmm6,-0xb0(%r10)
+	vmovdqa		%xmm7,-0xa0(%r10)
+	vmovdqa		%xmm8,-0x90(%r10)
+	vmovdqa		%xmm9,-0x80(%r10)
+	vmovdqa		%xmm10,-0x70(%r10)
+	vmovdqa		%xmm11,-0x60(%r10)
+	vmovdqa		%xmm12,-0x50(%r10)
+	vmovdqa		%xmm13,-0x40(%r10)
+	vmovdqa		%xmm14,-0x30(%r10)
+	vmovdqa		%xmm15,-0x20(%r10)
+.Ldo_avx512_body:
+___
+$code.=<<___;
+	lea		.Lconst(%rip),%rcx
+	lea		48+64($ctx),$ctx	# size optimization
+	vmovdqa		96(%rcx),%y#$T2		# .Lpermd_avx2
+
+	# expand pre-calculated table
+	vmovdqu		`16*0-64`($ctx),%x#$D0	# will become expanded ${R0}
+	and		\$-512,%rsp
+	vmovdqu		`16*1-64`($ctx),%x#$D1	# will become ... ${R1}
+	mov		\$0x20,%rax
+	vmovdqu		`16*2-64`($ctx),%x#$T0	# ... ${S1}
+	vmovdqu		`16*3-64`($ctx),%x#$D2	# ... ${R2}
+	vmovdqu		`16*4-64`($ctx),%x#$T1	# ... ${S2}
+	vmovdqu		`16*5-64`($ctx),%x#$D3	# ... ${R3}
+	vmovdqu		`16*6-64`($ctx),%x#$T3	# ... ${S3}
+	vmovdqu		`16*7-64`($ctx),%x#$D4	# ... ${R4}
+	vmovdqu		`16*8-64`($ctx),%x#$T4	# ... ${S4}
+	vpermd		$D0,$T2,$R0		# 00003412 -> 14243444
+	vpbroadcastq	64(%rcx),$MASK		# .Lmask26
+	vpermd		$D1,$T2,$R1
+	vpermd		$T0,$T2,$S1
+	vpermd		$D2,$T2,$R2
+	vmovdqa64	$R0,0x00(%rsp){%k2}	# save in case $len%128 != 0
+	 vpsrlq		\$32,$R0,$T0		# 14243444 -> 01020304
+	vpermd		$T1,$T2,$S2
+	vmovdqu64	$R1,0x00(%rsp,%rax){%k2}
+	 vpsrlq		\$32,$R1,$T1
+	vpermd		$D3,$T2,$R3
+	vmovdqa64	$S1,0x40(%rsp){%k2}
+	vpermd		$T3,$T2,$S3
+	vpermd		$D4,$T2,$R4
+	vmovdqu64	$R2,0x40(%rsp,%rax){%k2}
+	vpermd		$T4,$T2,$S4
+	vmovdqa64	$S2,0x80(%rsp){%k2}
+	vmovdqu64	$R3,0x80(%rsp,%rax){%k2}
+	vmovdqa64	$S3,0xc0(%rsp){%k2}
+	vmovdqu64	$R4,0xc0(%rsp,%rax){%k2}
+	vmovdqa64	$S4,0x100(%rsp){%k2}
+
+	################################################################
+	# calculate 5th through 8th powers of the key
+	#
+	# d0 = r0'*r0 + r1'*5*r4 + r2'*5*r3 + r3'*5*r2 + r4'*5*r1
+	# d1 = r0'*r1 + r1'*r0   + r2'*5*r4 + r3'*5*r3 + r4'*5*r2
+	# d2 = r0'*r2 + r1'*r1   + r2'*r0   + r3'*5*r4 + r4'*5*r3
+	# d3 = r0'*r3 + r1'*r2   + r2'*r1   + r3'*r0   + r4'*5*r4
+	# d4 = r0'*r4 + r1'*r3   + r2'*r2   + r3'*r1   + r4'*r0
+
+	vpmuludq	$T0,$R0,$D0		# d0 = r0'*r0
+	vpmuludq	$T0,$R1,$D1		# d1 = r0'*r1
+	vpmuludq	$T0,$R2,$D2		# d2 = r0'*r2
+	vpmuludq	$T0,$R3,$D3		# d3 = r0'*r3
+	vpmuludq	$T0,$R4,$D4		# d4 = r0'*r4
+	 vpsrlq		\$32,$R2,$T2
+
+	vpmuludq	$T1,$S4,$M0
+	vpmuludq	$T1,$R0,$M1
+	vpmuludq	$T1,$R1,$M2
+	vpmuludq	$T1,$R2,$M3
+	vpmuludq	$T1,$R3,$M4
+	 vpsrlq		\$32,$R3,$T3
+	vpaddq		$M0,$D0,$D0		# d0 += r1'*5*r4
+	vpaddq		$M1,$D1,$D1		# d1 += r1'*r0
+	vpaddq		$M2,$D2,$D2		# d2 += r1'*r1
+	vpaddq		$M3,$D3,$D3		# d3 += r1'*r2
+	vpaddq		$M4,$D4,$D4		# d4 += r1'*r3
+
+	vpmuludq	$T2,$S3,$M0
+	vpmuludq	$T2,$S4,$M1
+	vpmuludq	$T2,$R1,$M3
+	vpmuludq	$T2,$R2,$M4
+	vpmuludq	$T2,$R0,$M2
+	 vpsrlq		\$32,$R4,$T4
+	vpaddq		$M0,$D0,$D0		# d0 += r2'*5*r3
+	vpaddq		$M1,$D1,$D1		# d1 += r2'*5*r4
+	vpaddq		$M3,$D3,$D3		# d3 += r2'*r1
+	vpaddq		$M4,$D4,$D4		# d4 += r2'*r2
+	vpaddq		$M2,$D2,$D2		# d2 += r2'*r0
+
+	vpmuludq	$T3,$S2,$M0
+	vpmuludq	$T3,$R0,$M3
+	vpmuludq	$T3,$R1,$M4
+	vpmuludq	$T3,$S3,$M1
+	vpmuludq	$T3,$S4,$M2
+	vpaddq		$M0,$D0,$D0		# d0 += r3'*5*r2
+	vpaddq		$M3,$D3,$D3		# d3 += r3'*r0
+	vpaddq		$M4,$D4,$D4		# d4 += r3'*r1
+	vpaddq		$M1,$D1,$D1		# d1 += r3'*5*r3
+	vpaddq		$M2,$D2,$D2		# d2 += r3'*5*r4
+
+	vpmuludq	$T4,$S4,$M3
+	vpmuludq	$T4,$R0,$M4
+	vpmuludq	$T4,$S1,$M0
+	vpmuludq	$T4,$S2,$M1
+	vpmuludq	$T4,$S3,$M2
+	vpaddq		$M3,$D3,$D3		# d3 += r2'*5*r4
+	vpaddq		$M4,$D4,$D4		# d4 += r2'*r0
+	vpaddq		$M0,$D0,$D0		# d0 += r2'*5*r1
+	vpaddq		$M1,$D1,$D1		# d1 += r2'*5*r2
+	vpaddq		$M2,$D2,$D2		# d2 += r2'*5*r3
+
+	################################################################
+	# load input
+	vmovdqu64	16*0($inp),%z#$T3
+	vmovdqu64	16*4($inp),%z#$T4
+	lea		16*8($inp),$inp
+
+	################################################################
+	# lazy reduction
+
+	vpsrlq		\$26,$D3,$M3
+	vpandq		$MASK,$D3,$D3
+	vpaddq		$M3,$D4,$D4		# d3 -> d4
+
+	vpsrlq		\$26,$D0,$M0
+	vpandq		$MASK,$D0,$D0
+	vpaddq		$M0,$D1,$D1		# d0 -> d1
+
+	vpsrlq		\$26,$D4,$M4
+	vpandq		$MASK,$D4,$D4
+
+	vpsrlq		\$26,$D1,$M1
+	vpandq		$MASK,$D1,$D1
+	vpaddq		$M1,$D2,$D2		# d1 -> d2
+
+	vpaddq		$M4,$D0,$D0
+	vpsllq		\$2,$M4,$M4
+	vpaddq		$M4,$D0,$D0		# d4 -> d0
+
+	vpsrlq		\$26,$D2,$M2
+	vpandq		$MASK,$D2,$D2
+	vpaddq		$M2,$D3,$D3		# d2 -> d3
+
+	vpsrlq		\$26,$D0,$M0
+	vpandq		$MASK,$D0,$D0
+	vpaddq		$M0,$D1,$D1		# d0 -> d1
+
+	vpsrlq		\$26,$D3,$M3
+	vpandq		$MASK,$D3,$D3
+	vpaddq		$M3,$D4,$D4		# d3 -> d4
+
+	################################################################
+	# at this point we have 14243444 in $R0-$S4 and 05060708 in
+	# $D0-$D4, ...
+
+	vpunpcklqdq	$T4,$T3,$T0	# transpose input
+	vpunpckhqdq	$T4,$T3,$T4
+
+	# ... since input 64-bit lanes are ordered as 73625140, we could
+	# "vperm" it to 76543210 (here and in each loop iteration), *or*
+	# we could just flow along, hence the goal for $R0-$S4 is
+	# 1858286838784888 ...
+
+	vmovdqa32	128(%rcx),$M0		# .Lpermd_avx512:
+	mov		\$0x7777,%eax
+	kmovw		%eax,%k1
+
+	vpermd		$R0,$M0,$R0		# 14243444 -> 1---2---3---4---
+	vpermd		$R1,$M0,$R1
+	vpermd		$R2,$M0,$R2
+	vpermd		$R3,$M0,$R3
+	vpermd		$R4,$M0,$R4
+
+	vpermd		$D0,$M0,${R0}{%k1}	# 05060708 -> 1858286838784888
+	vpermd		$D1,$M0,${R1}{%k1}
+	vpermd		$D2,$M0,${R2}{%k1}
+	vpermd		$D3,$M0,${R3}{%k1}
+	vpermd		$D4,$M0,${R4}{%k1}
+
+	vpslld		\$2,$R1,$S1		# *5
+	vpslld		\$2,$R2,$S2
+	vpslld		\$2,$R3,$S3
+	vpslld		\$2,$R4,$S4
+	vpaddd		$R1,$S1,$S1
+	vpaddd		$R2,$S2,$S2
+	vpaddd		$R3,$S3,$S3
+	vpaddd		$R4,$S4,$S4
+
+	vpbroadcastq	32(%rcx),$PADBIT	# .L129
+
+	vpsrlq		\$52,$T0,$T2		# splat input
+	vpsllq		\$12,$T4,$T3
+	vporq		$T3,$T2,$T2
+	vpsrlq		\$26,$T0,$T1
+	vpsrlq		\$14,$T4,$T3
+	vpsrlq		\$40,$T4,$T4		# 4
+	vpandq		$MASK,$T2,$T2		# 2
+	vpandq		$MASK,$T0,$T0		# 0
+	#vpandq		$MASK,$T1,$T1		# 1
+	#vpandq		$MASK,$T3,$T3		# 3
+	#vporq		$PADBIT,$T4,$T4		# padbit, yes, always
+
+	vpaddq		$H2,$T2,$H2		# accumulate input
+	sub		\$192,$len
+	jbe		.Ltail_avx512
+	jmp		.Loop_avx512
+
+.align	32
+.Loop_avx512:
+	################################################################
+	# ((inp[0]*r^8+inp[ 8])*r^8+inp[16])*r^8
+	# ((inp[1]*r^8+inp[ 9])*r^8+inp[17])*r^7
+	# ((inp[2]*r^8+inp[10])*r^8+inp[18])*r^6
+	# ((inp[3]*r^8+inp[11])*r^8+inp[19])*r^5
+	# ((inp[4]*r^8+inp[12])*r^8+inp[20])*r^4
+	# ((inp[5]*r^8+inp[13])*r^8+inp[21])*r^3
+	# ((inp[6]*r^8+inp[14])*r^8+inp[22])*r^2
+	# ((inp[7]*r^8+inp[15])*r^8+inp[23])*r^1
+	#   \________/\___________/
+	################################################################
+	#vpaddq		$H2,$T2,$H2		# accumulate input
+
+	# d4 = h4*r0 + h3*r1   + h2*r2   + h1*r3   + h0*r4
+	# d3 = h3*r0 + h2*r1   + h1*r2   + h0*r3   + h4*5*r4
+	# d2 = h2*r0 + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	# d1 = h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3 + h2*5*r4
+	# d0 = h0*r0 + h4*5*r1 + h3*5*r2 + h2*5*r3 + h1*5*r4
+	#
+	# however, as h2 is "chronologically" first one available pull
+	# corresponding operations up, so it's
+	#
+	# d3 = h2*r1   + h0*r3 + h1*r2   + h3*r0 + h4*5*r4
+	# d4 = h2*r2   + h0*r4 + h1*r3   + h3*r1 + h4*r0
+	# d0 = h2*5*r3 + h0*r0 + h1*5*r4         + h3*5*r2 + h4*5*r1
+	# d1 = h2*5*r4 + h0*r1           + h1*r0 + h3*5*r3 + h4*5*r2
+	# d2 = h2*r0           + h0*r2   + h1*r1 + h3*5*r4 + h4*5*r3
+
+	vpmuludq	$H2,$R1,$D3		# d3 = h2*r1
+	 vpaddq		$H0,$T0,$H0
+	vpmuludq	$H2,$R2,$D4		# d4 = h2*r2
+	 vpandq		$MASK,$T1,$T1		# 1
+	vpmuludq	$H2,$S3,$D0		# d0 = h2*s3
+	 vpandq		$MASK,$T3,$T3		# 3
+	vpmuludq	$H2,$S4,$D1		# d1 = h2*s4
+	 vporq		$PADBIT,$T4,$T4		# padbit, yes, always
+	vpmuludq	$H2,$R0,$D2		# d2 = h2*r0
+	 vpaddq		$H1,$T1,$H1		# accumulate input
+	 vpaddq		$H3,$T3,$H3
+	 vpaddq		$H4,$T4,$H4
+
+	  vmovdqu64	16*0($inp),$T3		# load input
+	  vmovdqu64	16*4($inp),$T4
+	  lea		16*8($inp),$inp
+	vpmuludq	$H0,$R3,$M3
+	vpmuludq	$H0,$R4,$M4
+	vpmuludq	$H0,$R0,$M0
+	vpmuludq	$H0,$R1,$M1
+	vpaddq		$M3,$D3,$D3		# d3 += h0*r3
+	vpaddq		$M4,$D4,$D4		# d4 += h0*r4
+	vpaddq		$M0,$D0,$D0		# d0 += h0*r0
+	vpaddq		$M1,$D1,$D1		# d1 += h0*r1
+
+	vpmuludq	$H1,$R2,$M3
+	vpmuludq	$H1,$R3,$M4
+	vpmuludq	$H1,$S4,$M0
+	vpmuludq	$H0,$R2,$M2
+	vpaddq		$M3,$D3,$D3		# d3 += h1*r2
+	vpaddq		$M4,$D4,$D4		# d4 += h1*r3
+	vpaddq		$M0,$D0,$D0		# d0 += h1*s4
+	vpaddq		$M2,$D2,$D2		# d2 += h0*r2
+
+	  vpunpcklqdq	$T4,$T3,$T0		# transpose input
+	  vpunpckhqdq	$T4,$T3,$T4
+
+	vpmuludq	$H3,$R0,$M3
+	vpmuludq	$H3,$R1,$M4
+	vpmuludq	$H1,$R0,$M1
+	vpmuludq	$H1,$R1,$M2
+	vpaddq		$M3,$D3,$D3		# d3 += h3*r0
+	vpaddq		$M4,$D4,$D4		# d4 += h3*r1
+	vpaddq		$M1,$D1,$D1		# d1 += h1*r0
+	vpaddq		$M2,$D2,$D2		# d2 += h1*r1
+
+	vpmuludq	$H4,$S4,$M3
+	vpmuludq	$H4,$R0,$M4
+	vpmuludq	$H3,$S2,$M0
+	vpmuludq	$H3,$S3,$M1
+	vpaddq		$M3,$D3,$D3		# d3 += h4*s4
+	vpmuludq	$H3,$S4,$M2
+	vpaddq		$M4,$D4,$D4		# d4 += h4*r0
+	vpaddq		$M0,$D0,$D0		# d0 += h3*s2
+	vpaddq		$M1,$D1,$D1		# d1 += h3*s3
+	vpaddq		$M2,$D2,$D2		# d2 += h3*s4
+
+	vpmuludq	$H4,$S1,$M0
+	vpmuludq	$H4,$S2,$M1
+	vpmuludq	$H4,$S3,$M2
+	vpaddq		$M0,$D0,$H0		# h0 = d0 + h4*s1
+	vpaddq		$M1,$D1,$H1		# h1 = d2 + h4*s2
+	vpaddq		$M2,$D2,$H2		# h2 = d3 + h4*s3
+
+	################################################################
+	# lazy reduction (interleaved with input splat)
+
+	 vpsrlq		\$52,$T0,$T2		# splat input
+	 vpsllq		\$12,$T4,$T3
+
+	vpsrlq		\$26,$D3,$H3
+	vpandq		$MASK,$D3,$D3
+	vpaddq		$H3,$D4,$H4		# h3 -> h4
+
+	 vporq		$T3,$T2,$T2
+
+	vpsrlq		\$26,$H0,$D0
+	vpandq		$MASK,$H0,$H0
+	vpaddq		$D0,$H1,$H1		# h0 -> h1
+
+	 vpandq		$MASK,$T2,$T2		# 2
+
+	vpsrlq		\$26,$H4,$D4
+	vpandq		$MASK,$H4,$H4
+
+	vpsrlq		\$26,$H1,$D1
+	vpandq		$MASK,$H1,$H1
+	vpaddq		$D1,$H2,$H2		# h1 -> h2
+
+	vpaddq		$D4,$H0,$H0
+	vpsllq		\$2,$D4,$D4
+	vpaddq		$D4,$H0,$H0		# h4 -> h0
+
+	 vpaddq		$T2,$H2,$H2		# modulo-scheduled
+	 vpsrlq		\$26,$T0,$T1
+
+	vpsrlq		\$26,$H2,$D2
+	vpandq		$MASK,$H2,$H2
+	vpaddq		$D2,$D3,$H3		# h2 -> h3
+
+	 vpsrlq		\$14,$T4,$T3
+
+	vpsrlq		\$26,$H0,$D0
+	vpandq		$MASK,$H0,$H0
+	vpaddq		$D0,$H1,$H1		# h0 -> h1
+
+	 vpsrlq		\$40,$T4,$T4		# 4
+
+	vpsrlq		\$26,$H3,$D3
+	vpandq		$MASK,$H3,$H3
+	vpaddq		$D3,$H4,$H4		# h3 -> h4
+
+	 vpandq		$MASK,$T0,$T0		# 0
+	 #vpandq	$MASK,$T1,$T1		# 1
+	 #vpandq	$MASK,$T3,$T3		# 3
+	 #vporq		$PADBIT,$T4,$T4		# padbit, yes, always
+
+	sub		\$128,$len
+	ja		.Loop_avx512
+
+.Ltail_avx512:
+	################################################################
+	# while above multiplications were by r^8 in all lanes, in last
+	# iteration we multiply least significant lane by r^8 and most
+	# significant one by r, that's why table gets shifted...
+
+	vpsrlq		\$32,$R0,$R0		# 0105020603070408
+	vpsrlq		\$32,$R1,$R1
+	vpsrlq		\$32,$R2,$R2
+	vpsrlq		\$32,$S3,$S3
+	vpsrlq		\$32,$S4,$S4
+	vpsrlq		\$32,$R3,$R3
+	vpsrlq		\$32,$R4,$R4
+	vpsrlq		\$32,$S1,$S1
+	vpsrlq		\$32,$S2,$S2
+
+	################################################################
+	# load either next or last 64 byte of input
+	lea		($inp,$len),$inp
+
+	#vpaddq		$H2,$T2,$H2		# accumulate input
+	vpaddq		$H0,$T0,$H0
+
+	vpmuludq	$H2,$R1,$D3		# d3 = h2*r1
+	vpmuludq	$H2,$R2,$D4		# d4 = h2*r2
+	vpmuludq	$H2,$S3,$D0		# d0 = h2*s3
+	 vpandq		$MASK,$T1,$T1		# 1
+	vpmuludq	$H2,$S4,$D1		# d1 = h2*s4
+	 vpandq		$MASK,$T3,$T3		# 3
+	vpmuludq	$H2,$R0,$D2		# d2 = h2*r0
+	 vporq		$PADBIT,$T4,$T4		# padbit, yes, always
+	 vpaddq		$H1,$T1,$H1		# accumulate input
+	 vpaddq		$H3,$T3,$H3
+	 vpaddq		$H4,$T4,$H4
+
+	  vmovdqu	16*0($inp),%x#$T0
+	vpmuludq	$H0,$R3,$M3
+	vpmuludq	$H0,$R4,$M4
+	vpmuludq	$H0,$R0,$M0
+	vpmuludq	$H0,$R1,$M1
+	vpaddq		$M3,$D3,$D3		# d3 += h0*r3
+	vpaddq		$M4,$D4,$D4		# d4 += h0*r4
+	vpaddq		$M0,$D0,$D0		# d0 += h0*r0
+	vpaddq		$M1,$D1,$D1		# d1 += h0*r1
+
+	  vmovdqu	16*1($inp),%x#$T1
+	vpmuludq	$H1,$R2,$M3
+	vpmuludq	$H1,$R3,$M4
+	vpmuludq	$H1,$S4,$M0
+	vpmuludq	$H0,$R2,$M2
+	vpaddq		$M3,$D3,$D3		# d3 += h1*r2
+	vpaddq		$M4,$D4,$D4		# d4 += h1*r3
+	vpaddq		$M0,$D0,$D0		# d0 += h1*s4
+	vpaddq		$M2,$D2,$D2		# d2 += h0*r2
+
+	  vinserti128	\$1,16*2($inp),%y#$T0,%y#$T0
+	vpmuludq	$H3,$R0,$M3
+	vpmuludq	$H3,$R1,$M4
+	vpmuludq	$H1,$R0,$M1
+	vpmuludq	$H1,$R1,$M2
+	vpaddq		$M3,$D3,$D3		# d3 += h3*r0
+	vpaddq		$M4,$D4,$D4		# d4 += h3*r1
+	vpaddq		$M1,$D1,$D1		# d1 += h1*r0
+	vpaddq		$M2,$D2,$D2		# d2 += h1*r1
+
+	  vinserti128	\$1,16*3($inp),%y#$T1,%y#$T1
+	vpmuludq	$H4,$S4,$M3
+	vpmuludq	$H4,$R0,$M4
+	vpmuludq	$H3,$S2,$M0
+	vpmuludq	$H3,$S3,$M1
+	vpmuludq	$H3,$S4,$M2
+	vpaddq		$M3,$D3,$H3		# h3 = d3 + h4*s4
+	vpaddq		$M4,$D4,$D4		# d4 += h4*r0
+	vpaddq		$M0,$D0,$D0		# d0 += h3*s2
+	vpaddq		$M1,$D1,$D1		# d1 += h3*s3
+	vpaddq		$M2,$D2,$D2		# d2 += h3*s4
+
+	vpmuludq	$H4,$S1,$M0
+	vpmuludq	$H4,$S2,$M1
+	vpmuludq	$H4,$S3,$M2
+	vpaddq		$M0,$D0,$H0		# h0 = d0 + h4*s1
+	vpaddq		$M1,$D1,$H1		# h1 = d2 + h4*s2
+	vpaddq		$M2,$D2,$H2		# h2 = d3 + h4*s3
+
+	################################################################
+	# horizontal addition
+
+	mov		\$1,%eax
+	vpermq		\$0xb1,$H3,$D3
+	vpermq		\$0xb1,$D4,$H4
+	vpermq		\$0xb1,$H0,$D0
+	vpermq		\$0xb1,$H1,$D1
+	vpermq		\$0xb1,$H2,$D2
+	vpaddq		$D3,$H3,$H3
+	vpaddq		$D4,$H4,$H4
+	vpaddq		$D0,$H0,$H0
+	vpaddq		$D1,$H1,$H1
+	vpaddq		$D2,$H2,$H2
+
+	kmovw		%eax,%k3
+	vpermq		\$0x2,$H3,$D3
+	vpermq		\$0x2,$H4,$D4
+	vpermq		\$0x2,$H0,$D0
+	vpermq		\$0x2,$H1,$D1
+	vpermq		\$0x2,$H2,$D2
+	vpaddq		$D3,$H3,$H3
+	vpaddq		$D4,$H4,$H4
+	vpaddq		$D0,$H0,$H0
+	vpaddq		$D1,$H1,$H1
+	vpaddq		$D2,$H2,$H2
+
+	vextracti64x4	\$0x1,$H3,%y#$D3
+	vextracti64x4	\$0x1,$H4,%y#$D4
+	vextracti64x4	\$0x1,$H0,%y#$D0
+	vextracti64x4	\$0x1,$H1,%y#$D1
+	vextracti64x4	\$0x1,$H2,%y#$D2
+	vpaddq		$D3,$H3,${H3}{%k3}{z}	# keep single qword in case
+	vpaddq		$D4,$H4,${H4}{%k3}{z}	# it's passed to .Ltail_avx2
+	vpaddq		$D0,$H0,${H0}{%k3}{z}
+	vpaddq		$D1,$H1,${H1}{%k3}{z}
+	vpaddq		$D2,$H2,${H2}{%k3}{z}
+___
+map(s/%z/%y/,($T0,$T1,$T2,$T3,$T4, $PADBIT));
+map(s/%z/%y/,($H0,$H1,$H2,$H3,$H4, $D0,$D1,$D2,$D3,$D4, $MASK));
+$code.=<<___;
+	################################################################
+	# lazy reduction (interleaved with input splat)
+
+	vpsrlq		\$26,$H3,$D3
+	vpand		$MASK,$H3,$H3
+	 vpsrldq	\$6,$T0,$T2		# splat input
+	 vpsrldq	\$6,$T1,$T3
+	 vpunpckhqdq	$T1,$T0,$T4		# 4
+	vpaddq		$D3,$H4,$H4		# h3 -> h4
+
+	vpsrlq		\$26,$H0,$D0
+	vpand		$MASK,$H0,$H0
+	 vpunpcklqdq	$T3,$T2,$T2		# 2:3
+	 vpunpcklqdq	$T1,$T0,$T0		# 0:1
+	vpaddq		$D0,$H1,$H1		# h0 -> h1
+
+	vpsrlq		\$26,$H4,$D4
+	vpand		$MASK,$H4,$H4
+
+	vpsrlq		\$26,$H1,$D1
+	vpand		$MASK,$H1,$H1
+	 vpsrlq		\$30,$T2,$T3
+	 vpsrlq		\$4,$T2,$T2
+	vpaddq		$D1,$H2,$H2		# h1 -> h2
+
+	vpaddq		$D4,$H0,$H0
+	vpsllq		\$2,$D4,$D4
+	 vpsrlq		\$26,$T0,$T1
+	 vpsrlq		\$40,$T4,$T4		# 4
+	vpaddq		$D4,$H0,$H0		# h4 -> h0
+
+	vpsrlq		\$26,$H2,$D2
+	vpand		$MASK,$H2,$H2
+	 vpand		$MASK,$T2,$T2		# 2
+	 vpand		$MASK,$T0,$T0		# 0
+	vpaddq		$D2,$H3,$H3		# h2 -> h3
+
+	vpsrlq		\$26,$H0,$D0
+	vpand		$MASK,$H0,$H0
+	 vpaddq		$H2,$T2,$H2		# accumulate input for .Ltail_avx2
+	 vpand		$MASK,$T1,$T1		# 1
+	vpaddq		$D0,$H1,$H1		# h0 -> h1
+
+	vpsrlq		\$26,$H3,$D3
+	vpand		$MASK,$H3,$H3
+	 vpand		$MASK,$T3,$T3		# 3
+	 vpor		32(%rcx),$T4,$T4	# padbit, yes, always
+	vpaddq		$D3,$H4,$H4		# h3 -> h4
+
+	lea		0x90(%rsp),%rax		# size optimization for .Ltail_avx2
+	add		\$64,$len
+	jnz		.Ltail_avx2$suffix
+
+	vpsubq		$T2,$H2,$H2		# undo input accumulation
+	vmovd		%x#$H0,`4*0-48-64`($ctx)# save partially reduced
+	vmovd		%x#$H1,`4*1-48-64`($ctx)
+	vmovd		%x#$H2,`4*2-48-64`($ctx)
+	vmovd		%x#$H3,`4*3-48-64`($ctx)
+	vmovd		%x#$H4,`4*4-48-64`($ctx)
+	vzeroall
+___
+$code.=<<___	if ($win64);
+	movdqa		-0xb0(%r10),%xmm6
+	movdqa		-0xa0(%r10),%xmm7
+	movdqa		-0x90(%r10),%xmm8
+	movdqa		-0x80(%r10),%xmm9
+	movdqa		-0x70(%r10),%xmm10
+	movdqa		-0x60(%r10),%xmm11
+	movdqa		-0x50(%r10),%xmm12
+	movdqa		-0x40(%r10),%xmm13
+	movdqa		-0x30(%r10),%xmm14
+	movdqa		-0x20(%r10),%xmm15
+	lea		-8(%r10),%rsp
+.Ldo_avx512_epilogue:
+___
+$code.=<<___	if (!$win64);
+	lea		-8(%r10),%rsp
+.cfi_def_cfa_register	%rsp
+___
+$code.=<<___;
+	ret
+.cfi_endproc
+___
+
+}
+
+}
+
+&declare_function("poly1305_blocks_avx2", 32, 4);
+poly1305_blocks_avxN(0);
+&end_function("poly1305_blocks_avx2");
+
+if($kernel) {
+	$code .= "#endif\n";
+}
+
+#######################################################################
+if ($avx>2) {
+# On entry we have input length divisible by 64. But since inner loop
+# processes 128 bytes per iteration, cases when length is not divisible
+# by 128 are handled by passing tail 64 bytes to .Ltail_avx2. For this
+# reason stack layout is kept identical to poly1305_blocks_avx2. If not
+# for this tail, we wouldn't have to even allocate stack frame...
+
+if($kernel) {
+	$code .= "#ifdef CONFIG_AS_AVX512\n";
+}
+
+&declare_function("poly1305_blocks_avx512", 32, 4);
+poly1305_blocks_avxN(1);
+&end_function("poly1305_blocks_avx512");
+
+if ($kernel) {
+	$code .= "#endif\n";
+}
+
+if (!$kernel && $avx>3) {
+########################################################################
+# VPMADD52 version using 2^44 radix.
+#
+# One can argue that base 2^52 would be more natural. Well, even though
+# some operations would be more natural, one has to recognize couple of
+# things. Base 2^52 doesn't provide advantage over base 2^44 if you look
+# at amount of multiply-n-accumulate operations. Secondly, it makes it
+# impossible to pre-compute multiples of 5 [referred to as s[]/sN in
+# reference implementations], which means that more such operations
+# would have to be performed in inner loop, which in turn makes critical
+# path longer. In other words, even though base 2^44 reduction might
+# look less elegant, overall critical path is actually shorter...
+
+########################################################################
+# Layout of opaque area is following.
+#
+#	unsigned __int64 h[3];		# current hash value base 2^44
+#	unsigned __int64 s[2];		# key value*20 base 2^44
+#	unsigned __int64 r[3];		# key value base 2^44
+#	struct { unsigned __int64 r^1, r^3, r^2, r^4; } R[4];
+#					# r^n positions reflect
+#					# placement in register, not
+#					# memory, R[3] is R[1]*20
+
+$code.=<<___;
+.type	poly1305_init_base2_44,\@function,3
+.align	32
+poly1305_init_base2_44:
+	xor	%eax,%eax
+	mov	%rax,0($ctx)		# initialize hash value
+	mov	%rax,8($ctx)
+	mov	%rax,16($ctx)
+
+.Linit_base2_44:
+	lea	poly1305_blocks_vpmadd52(%rip),%r10
+	lea	poly1305_emit_base2_44(%rip),%r11
+
+	mov	\$0x0ffffffc0fffffff,%rax
+	mov	\$0x0ffffffc0ffffffc,%rcx
+	and	0($inp),%rax
+	mov	\$0x00000fffffffffff,%r8
+	and	8($inp),%rcx
+	mov	\$0x00000fffffffffff,%r9
+	and	%rax,%r8
+	shrd	\$44,%rcx,%rax
+	mov	%r8,40($ctx)		# r0
+	and	%r9,%rax
+	shr	\$24,%rcx
+	mov	%rax,48($ctx)		# r1
+	lea	(%rax,%rax,4),%rax	# *5
+	mov	%rcx,56($ctx)		# r2
+	shl	\$2,%rax		# magic <<2
+	lea	(%rcx,%rcx,4),%rcx	# *5
+	shl	\$2,%rcx		# magic <<2
+	mov	%rax,24($ctx)		# s1
+	mov	%rcx,32($ctx)		# s2
+	movq	\$-1,64($ctx)		# write impossible value
+___
+$code.=<<___	if ($flavour !~ /elf32/);
+	mov	%r10,0(%rdx)
+	mov	%r11,8(%rdx)
+___
+$code.=<<___	if ($flavour =~ /elf32/);
+	mov	%r10d,0(%rdx)
+	mov	%r11d,4(%rdx)
+___
+$code.=<<___;
+	mov	\$1,%eax
+	ret
+.size	poly1305_init_base2_44,.-poly1305_init_base2_44
+___
+{
+my ($H0,$H1,$H2,$r2r1r0,$r1r0s2,$r0s2s1,$Dlo,$Dhi) = map("%ymm$_",(0..5,16,17));
+my ($T0,$inp_permd,$inp_shift,$PAD) = map("%ymm$_",(18..21));
+my ($reduc_mask,$reduc_rght,$reduc_left) = map("%ymm$_",(22..25));
+
+$code.=<<___;
+.type	poly1305_blocks_vpmadd52,\@function,4
+.align	32
+poly1305_blocks_vpmadd52:
+	shr	\$4,$len
+	jz	.Lno_data_vpmadd52		# too short
+
+	shl	\$40,$padbit
+	mov	64($ctx),%r8			# peek on power of the key
+
+	# if powers of the key are not calculated yet, process up to 3
+	# blocks with this single-block subroutine, otherwise ensure that
+	# length is divisible by 2 blocks and pass the rest down to next
+	# subroutine...
+
+	mov	\$3,%rax
+	mov	\$1,%r10
+	cmp	\$4,$len			# is input long
+	cmovae	%r10,%rax
+	test	%r8,%r8				# is power value impossible?
+	cmovns	%r10,%rax
+
+	and	$len,%rax			# is input of favourable length?
+	jz	.Lblocks_vpmadd52_4x
+
+	sub		%rax,$len
+	mov		\$7,%r10d
+	mov		\$1,%r11d
+	kmovw		%r10d,%k7
+	lea		.L2_44_inp_permd(%rip),%r10
+	kmovw		%r11d,%k1
+
+	vmovq		$padbit,%x#$PAD
+	vmovdqa64	0(%r10),$inp_permd	# .L2_44_inp_permd
+	vmovdqa64	32(%r10),$inp_shift	# .L2_44_inp_shift
+	vpermq		\$0xcf,$PAD,$PAD
+	vmovdqa64	64(%r10),$reduc_mask	# .L2_44_mask
+
+	vmovdqu64	0($ctx),${Dlo}{%k7}{z}		# load hash value
+	vmovdqu64	40($ctx),${r2r1r0}{%k7}{z}	# load keys
+	vmovdqu64	32($ctx),${r1r0s2}{%k7}{z}
+	vmovdqu64	24($ctx),${r0s2s1}{%k7}{z}
+
+	vmovdqa64	96(%r10),$reduc_rght	# .L2_44_shift_rgt
+	vmovdqa64	128(%r10),$reduc_left	# .L2_44_shift_lft
+
+	jmp		.Loop_vpmadd52
+
+.align	32
+.Loop_vpmadd52:
+	vmovdqu32	0($inp),%x#$T0		# load input as ----3210
+	lea		16($inp),$inp
+
+	vpermd		$T0,$inp_permd,$T0	# ----3210 -> --322110
+	vpsrlvq		$inp_shift,$T0,$T0
+	vpandq		$reduc_mask,$T0,$T0
+	vporq		$PAD,$T0,$T0
+
+	vpaddq		$T0,$Dlo,$Dlo		# accumulate input
+
+	vpermq		\$0,$Dlo,${H0}{%k7}{z}	# smash hash value
+	vpermq		\$0b01010101,$Dlo,${H1}{%k7}{z}
+	vpermq		\$0b10101010,$Dlo,${H2}{%k7}{z}
+
+	vpxord		$Dlo,$Dlo,$Dlo
+	vpxord		$Dhi,$Dhi,$Dhi
+
+	vpmadd52luq	$r2r1r0,$H0,$Dlo
+	vpmadd52huq	$r2r1r0,$H0,$Dhi
+
+	vpmadd52luq	$r1r0s2,$H1,$Dlo
+	vpmadd52huq	$r1r0s2,$H1,$Dhi
+
+	vpmadd52luq	$r0s2s1,$H2,$Dlo
+	vpmadd52huq	$r0s2s1,$H2,$Dhi
+
+	vpsrlvq		$reduc_rght,$Dlo,$T0	# 0 in topmost qword
+	vpsllvq		$reduc_left,$Dhi,$Dhi	# 0 in topmost qword
+	vpandq		$reduc_mask,$Dlo,$Dlo
+
+	vpaddq		$T0,$Dhi,$Dhi
+
+	vpermq		\$0b10010011,$Dhi,$Dhi	# 0 in lowest qword
+
+	vpaddq		$Dhi,$Dlo,$Dlo		# note topmost qword :-)
+
+	vpsrlvq		$reduc_rght,$Dlo,$T0	# 0 in topmost word
+	vpandq		$reduc_mask,$Dlo,$Dlo
+
+	vpermq		\$0b10010011,$T0,$T0
+
+	vpaddq		$T0,$Dlo,$Dlo
+
+	vpermq		\$0b10010011,$Dlo,${T0}{%k1}{z}
+
+	vpaddq		$T0,$Dlo,$Dlo
+	vpsllq		\$2,$T0,$T0
+
+	vpaddq		$T0,$Dlo,$Dlo
+
+	dec		%rax			# len-=16
+	jnz		.Loop_vpmadd52
+
+	vmovdqu64	$Dlo,0($ctx){%k7}	# store hash value
+
+	test		$len,$len
+	jnz		.Lblocks_vpmadd52_4x
+
+.Lno_data_vpmadd52:
+	ret
+.size	poly1305_blocks_vpmadd52,.-poly1305_blocks_vpmadd52
+___
+}
+{
+########################################################################
+# As implied by its name 4x subroutine processes 4 blocks in parallel
+# (but handles even 4*n+2 blocks lengths). It takes up to 4th key power
+# and is handled in 256-bit %ymm registers.
+
+my ($H0,$H1,$H2,$R0,$R1,$R2,$S1,$S2) = map("%ymm$_",(0..5,16,17));
+my ($D0lo,$D0hi,$D1lo,$D1hi,$D2lo,$D2hi) = map("%ymm$_",(18..23));
+my ($T0,$T1,$T2,$T3,$mask44,$mask42,$tmp,$PAD) = map("%ymm$_",(24..31));
+
+$code.=<<___;
+.type	poly1305_blocks_vpmadd52_4x,\@function,4
+.align	32
+poly1305_blocks_vpmadd52_4x:
+	shr	\$4,$len
+	jz	.Lno_data_vpmadd52_4x		# too short
+
+	shl	\$40,$padbit
+	mov	64($ctx),%r8			# peek on power of the key
+
+.Lblocks_vpmadd52_4x:
+	vpbroadcastq	$padbit,$PAD
+
+	vmovdqa64	.Lx_mask44(%rip),$mask44
+	mov		\$5,%eax
+	vmovdqa64	.Lx_mask42(%rip),$mask42
+	kmovw		%eax,%k1		# used in 2x path
+
+	test		%r8,%r8			# is power value impossible?
+	js		.Linit_vpmadd52		# if it is, then init R[4]
+
+	vmovq		0($ctx),%x#$H0		# load current hash value
+	vmovq		8($ctx),%x#$H1
+	vmovq		16($ctx),%x#$H2
+
+	test		\$3,$len		# is length 4*n+2?
+	jnz		.Lblocks_vpmadd52_2x_do
+
+.Lblocks_vpmadd52_4x_do:
+	vpbroadcastq	64($ctx),$R0		# load 4th power of the key
+	vpbroadcastq	96($ctx),$R1
+	vpbroadcastq	128($ctx),$R2
+	vpbroadcastq	160($ctx),$S1
+
+.Lblocks_vpmadd52_4x_key_loaded:
+	vpsllq		\$2,$R2,$S2		# S2 = R2*5*4
+	vpaddq		$R2,$S2,$S2
+	vpsllq		\$2,$S2,$S2
+
+	test		\$7,$len		# is len 8*n?
+	jz		.Lblocks_vpmadd52_8x
+
+	vmovdqu64	16*0($inp),$T2		# load data
+	vmovdqu64	16*2($inp),$T3
+	lea		16*4($inp),$inp
+
+	vpunpcklqdq	$T3,$T2,$T1		# transpose data
+	vpunpckhqdq	$T3,$T2,$T3
+
+	# at this point 64-bit lanes are ordered as 3-1-2-0
+
+	vpsrlq		\$24,$T3,$T2		# splat the data
+	vporq		$PAD,$T2,$T2
+	 vpaddq		$T2,$H2,$H2		# accumulate input
+	vpandq		$mask44,$T1,$T0
+	vpsrlq		\$44,$T1,$T1
+	vpsllq		\$20,$T3,$T3
+	vporq		$T3,$T1,$T1
+	vpandq		$mask44,$T1,$T1
+
+	sub		\$4,$len
+	jz		.Ltail_vpmadd52_4x
+	jmp		.Loop_vpmadd52_4x
+	ud2
+
+.align	32
+.Linit_vpmadd52:
+	vmovq		24($ctx),%x#$S1		# load key
+	vmovq		56($ctx),%x#$H2
+	vmovq		32($ctx),%x#$S2
+	vmovq		40($ctx),%x#$R0
+	vmovq		48($ctx),%x#$R1
+
+	vmovdqa		$R0,$H0
+	vmovdqa		$R1,$H1
+	vmovdqa		$H2,$R2
+
+	mov		\$2,%eax
+
+.Lmul_init_vpmadd52:
+	vpxorq		$D0lo,$D0lo,$D0lo
+	vpmadd52luq	$H2,$S1,$D0lo
+	vpxorq		$D0hi,$D0hi,$D0hi
+	vpmadd52huq	$H2,$S1,$D0hi
+	vpxorq		$D1lo,$D1lo,$D1lo
+	vpmadd52luq	$H2,$S2,$D1lo
+	vpxorq		$D1hi,$D1hi,$D1hi
+	vpmadd52huq	$H2,$S2,$D1hi
+	vpxorq		$D2lo,$D2lo,$D2lo
+	vpmadd52luq	$H2,$R0,$D2lo
+	vpxorq		$D2hi,$D2hi,$D2hi
+	vpmadd52huq	$H2,$R0,$D2hi
+
+	vpmadd52luq	$H0,$R0,$D0lo
+	vpmadd52huq	$H0,$R0,$D0hi
+	vpmadd52luq	$H0,$R1,$D1lo
+	vpmadd52huq	$H0,$R1,$D1hi
+	vpmadd52luq	$H0,$R2,$D2lo
+	vpmadd52huq	$H0,$R2,$D2hi
+
+	vpmadd52luq	$H1,$S2,$D0lo
+	vpmadd52huq	$H1,$S2,$D0hi
+	vpmadd52luq	$H1,$R0,$D1lo
+	vpmadd52huq	$H1,$R0,$D1hi
+	vpmadd52luq	$H1,$R1,$D2lo
+	vpmadd52huq	$H1,$R1,$D2hi
+
+	################################################################
+	# partial reduction
+	vpsrlq		\$44,$D0lo,$tmp
+	vpsllq		\$8,$D0hi,$D0hi
+	vpandq		$mask44,$D0lo,$H0
+	vpaddq		$tmp,$D0hi,$D0hi
+
+	vpaddq		$D0hi,$D1lo,$D1lo
+
+	vpsrlq		\$44,$D1lo,$tmp
+	vpsllq		\$8,$D1hi,$D1hi
+	vpandq		$mask44,$D1lo,$H1
+	vpaddq		$tmp,$D1hi,$D1hi
+
+	vpaddq		$D1hi,$D2lo,$D2lo
+
+	vpsrlq		\$42,$D2lo,$tmp
+	vpsllq		\$10,$D2hi,$D2hi
+	vpandq		$mask42,$D2lo,$H2
+	vpaddq		$tmp,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$H0,$H0
+	vpsllq		\$2,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$H0,$H0
+
+	vpsrlq		\$44,$H0,$tmp		# additional step
+	vpandq		$mask44,$H0,$H0
+
+	vpaddq		$tmp,$H1,$H1
+
+	dec		%eax
+	jz		.Ldone_init_vpmadd52
+
+	vpunpcklqdq	$R1,$H1,$R1		# 1,2
+	vpbroadcastq	%x#$H1,%x#$H1		# 2,2
+	vpunpcklqdq	$R2,$H2,$R2
+	vpbroadcastq	%x#$H2,%x#$H2
+	vpunpcklqdq	$R0,$H0,$R0
+	vpbroadcastq	%x#$H0,%x#$H0
+
+	vpsllq		\$2,$R1,$S1		# S1 = R1*5*4
+	vpsllq		\$2,$R2,$S2		# S2 = R2*5*4
+	vpaddq		$R1,$S1,$S1
+	vpaddq		$R2,$S2,$S2
+	vpsllq		\$2,$S1,$S1
+	vpsllq		\$2,$S2,$S2
+
+	jmp		.Lmul_init_vpmadd52
+	ud2
+
+.align	32
+.Ldone_init_vpmadd52:
+	vinserti128	\$1,%x#$R1,$H1,$R1	# 1,2,3,4
+	vinserti128	\$1,%x#$R2,$H2,$R2
+	vinserti128	\$1,%x#$R0,$H0,$R0
+
+	vpermq		\$0b11011000,$R1,$R1	# 1,3,2,4
+	vpermq		\$0b11011000,$R2,$R2
+	vpermq		\$0b11011000,$R0,$R0
+
+	vpsllq		\$2,$R1,$S1		# S1 = R1*5*4
+	vpaddq		$R1,$S1,$S1
+	vpsllq		\$2,$S1,$S1
+
+	vmovq		0($ctx),%x#$H0		# load current hash value
+	vmovq		8($ctx),%x#$H1
+	vmovq		16($ctx),%x#$H2
+
+	test		\$3,$len		# is length 4*n+2?
+	jnz		.Ldone_init_vpmadd52_2x
+
+	vmovdqu64	$R0,64($ctx)		# save key powers
+	vpbroadcastq	%x#$R0,$R0		# broadcast 4th power
+	vmovdqu64	$R1,96($ctx)
+	vpbroadcastq	%x#$R1,$R1
+	vmovdqu64	$R2,128($ctx)
+	vpbroadcastq	%x#$R2,$R2
+	vmovdqu64	$S1,160($ctx)
+	vpbroadcastq	%x#$S1,$S1
+
+	jmp		.Lblocks_vpmadd52_4x_key_loaded
+	ud2
+
+.align	32
+.Ldone_init_vpmadd52_2x:
+	vmovdqu64	$R0,64($ctx)		# save key powers
+	vpsrldq		\$8,$R0,$R0		# 0-1-0-2
+	vmovdqu64	$R1,96($ctx)
+	vpsrldq		\$8,$R1,$R1
+	vmovdqu64	$R2,128($ctx)
+	vpsrldq		\$8,$R2,$R2
+	vmovdqu64	$S1,160($ctx)
+	vpsrldq		\$8,$S1,$S1
+	jmp		.Lblocks_vpmadd52_2x_key_loaded
+	ud2
+
+.align	32
+.Lblocks_vpmadd52_2x_do:
+	vmovdqu64	128+8($ctx),${R2}{%k1}{z}# load 2nd and 1st key powers
+	vmovdqu64	160+8($ctx),${S1}{%k1}{z}
+	vmovdqu64	64+8($ctx),${R0}{%k1}{z}
+	vmovdqu64	96+8($ctx),${R1}{%k1}{z}
+
+.Lblocks_vpmadd52_2x_key_loaded:
+	vmovdqu64	16*0($inp),$T2		# load data
+	vpxorq		$T3,$T3,$T3
+	lea		16*2($inp),$inp
+
+	vpunpcklqdq	$T3,$T2,$T1		# transpose data
+	vpunpckhqdq	$T3,$T2,$T3
+
+	# at this point 64-bit lanes are ordered as x-1-x-0
+
+	vpsrlq		\$24,$T3,$T2		# splat the data
+	vporq		$PAD,$T2,$T2
+	 vpaddq		$T2,$H2,$H2		# accumulate input
+	vpandq		$mask44,$T1,$T0
+	vpsrlq		\$44,$T1,$T1
+	vpsllq		\$20,$T3,$T3
+	vporq		$T3,$T1,$T1
+	vpandq		$mask44,$T1,$T1
+
+	jmp		.Ltail_vpmadd52_2x
+	ud2
+
+.align	32
+.Loop_vpmadd52_4x:
+	#vpaddq		$T2,$H2,$H2		# accumulate input
+	vpaddq		$T0,$H0,$H0
+	vpaddq		$T1,$H1,$H1
+
+	vpxorq		$D0lo,$D0lo,$D0lo
+	vpmadd52luq	$H2,$S1,$D0lo
+	vpxorq		$D0hi,$D0hi,$D0hi
+	vpmadd52huq	$H2,$S1,$D0hi
+	vpxorq		$D1lo,$D1lo,$D1lo
+	vpmadd52luq	$H2,$S2,$D1lo
+	vpxorq		$D1hi,$D1hi,$D1hi
+	vpmadd52huq	$H2,$S2,$D1hi
+	vpxorq		$D2lo,$D2lo,$D2lo
+	vpmadd52luq	$H2,$R0,$D2lo
+	vpxorq		$D2hi,$D2hi,$D2hi
+	vpmadd52huq	$H2,$R0,$D2hi
+
+	 vmovdqu64	16*0($inp),$T2		# load data
+	 vmovdqu64	16*2($inp),$T3
+	 lea		16*4($inp),$inp
+	vpmadd52luq	$H0,$R0,$D0lo
+	vpmadd52huq	$H0,$R0,$D0hi
+	vpmadd52luq	$H0,$R1,$D1lo
+	vpmadd52huq	$H0,$R1,$D1hi
+	vpmadd52luq	$H0,$R2,$D2lo
+	vpmadd52huq	$H0,$R2,$D2hi
+
+	 vpunpcklqdq	$T3,$T2,$T1		# transpose data
+	 vpunpckhqdq	$T3,$T2,$T3
+	vpmadd52luq	$H1,$S2,$D0lo
+	vpmadd52huq	$H1,$S2,$D0hi
+	vpmadd52luq	$H1,$R0,$D1lo
+	vpmadd52huq	$H1,$R0,$D1hi
+	vpmadd52luq	$H1,$R1,$D2lo
+	vpmadd52huq	$H1,$R1,$D2hi
+
+	################################################################
+	# partial reduction (interleaved with data splat)
+	vpsrlq		\$44,$D0lo,$tmp
+	vpsllq		\$8,$D0hi,$D0hi
+	vpandq		$mask44,$D0lo,$H0
+	vpaddq		$tmp,$D0hi,$D0hi
+
+	 vpsrlq		\$24,$T3,$T2
+	 vporq		$PAD,$T2,$T2
+	vpaddq		$D0hi,$D1lo,$D1lo
+
+	vpsrlq		\$44,$D1lo,$tmp
+	vpsllq		\$8,$D1hi,$D1hi
+	vpandq		$mask44,$D1lo,$H1
+	vpaddq		$tmp,$D1hi,$D1hi
+
+	 vpandq		$mask44,$T1,$T0
+	 vpsrlq		\$44,$T1,$T1
+	 vpsllq		\$20,$T3,$T3
+	vpaddq		$D1hi,$D2lo,$D2lo
+
+	vpsrlq		\$42,$D2lo,$tmp
+	vpsllq		\$10,$D2hi,$D2hi
+	vpandq		$mask42,$D2lo,$H2
+	vpaddq		$tmp,$D2hi,$D2hi
+
+	  vpaddq	$T2,$H2,$H2		# accumulate input
+	vpaddq		$D2hi,$H0,$H0
+	vpsllq		\$2,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$H0,$H0
+	 vporq		$T3,$T1,$T1
+	 vpandq		$mask44,$T1,$T1
+
+	vpsrlq		\$44,$H0,$tmp		# additional step
+	vpandq		$mask44,$H0,$H0
+
+	vpaddq		$tmp,$H1,$H1
+
+	sub		\$4,$len		# len-=64
+	jnz		.Loop_vpmadd52_4x
+
+.Ltail_vpmadd52_4x:
+	vmovdqu64	128($ctx),$R2		# load all key powers
+	vmovdqu64	160($ctx),$S1
+	vmovdqu64	64($ctx),$R0
+	vmovdqu64	96($ctx),$R1
+
+.Ltail_vpmadd52_2x:
+	vpsllq		\$2,$R2,$S2		# S2 = R2*5*4
+	vpaddq		$R2,$S2,$S2
+	vpsllq		\$2,$S2,$S2
+
+	#vpaddq		$T2,$H2,$H2		# accumulate input
+	vpaddq		$T0,$H0,$H0
+	vpaddq		$T1,$H1,$H1
+
+	vpxorq		$D0lo,$D0lo,$D0lo
+	vpmadd52luq	$H2,$S1,$D0lo
+	vpxorq		$D0hi,$D0hi,$D0hi
+	vpmadd52huq	$H2,$S1,$D0hi
+	vpxorq		$D1lo,$D1lo,$D1lo
+	vpmadd52luq	$H2,$S2,$D1lo
+	vpxorq		$D1hi,$D1hi,$D1hi
+	vpmadd52huq	$H2,$S2,$D1hi
+	vpxorq		$D2lo,$D2lo,$D2lo
+	vpmadd52luq	$H2,$R0,$D2lo
+	vpxorq		$D2hi,$D2hi,$D2hi
+	vpmadd52huq	$H2,$R0,$D2hi
+
+	vpmadd52luq	$H0,$R0,$D0lo
+	vpmadd52huq	$H0,$R0,$D0hi
+	vpmadd52luq	$H0,$R1,$D1lo
+	vpmadd52huq	$H0,$R1,$D1hi
+	vpmadd52luq	$H0,$R2,$D2lo
+	vpmadd52huq	$H0,$R2,$D2hi
+
+	vpmadd52luq	$H1,$S2,$D0lo
+	vpmadd52huq	$H1,$S2,$D0hi
+	vpmadd52luq	$H1,$R0,$D1lo
+	vpmadd52huq	$H1,$R0,$D1hi
+	vpmadd52luq	$H1,$R1,$D2lo
+	vpmadd52huq	$H1,$R1,$D2hi
+
+	################################################################
+	# horizontal addition
+
+	mov		\$1,%eax
+	kmovw		%eax,%k1
+	vpsrldq		\$8,$D0lo,$T0
+	vpsrldq		\$8,$D0hi,$H0
+	vpsrldq		\$8,$D1lo,$T1
+	vpsrldq		\$8,$D1hi,$H1
+	vpaddq		$T0,$D0lo,$D0lo
+	vpaddq		$H0,$D0hi,$D0hi
+	vpsrldq		\$8,$D2lo,$T2
+	vpsrldq		\$8,$D2hi,$H2
+	vpaddq		$T1,$D1lo,$D1lo
+	vpaddq		$H1,$D1hi,$D1hi
+	 vpermq		\$0x2,$D0lo,$T0
+	 vpermq		\$0x2,$D0hi,$H0
+	vpaddq		$T2,$D2lo,$D2lo
+	vpaddq		$H2,$D2hi,$D2hi
+
+	vpermq		\$0x2,$D1lo,$T1
+	vpermq		\$0x2,$D1hi,$H1
+	vpaddq		$T0,$D0lo,${D0lo}{%k1}{z}
+	vpaddq		$H0,$D0hi,${D0hi}{%k1}{z}
+	vpermq		\$0x2,$D2lo,$T2
+	vpermq		\$0x2,$D2hi,$H2
+	vpaddq		$T1,$D1lo,${D1lo}{%k1}{z}
+	vpaddq		$H1,$D1hi,${D1hi}{%k1}{z}
+	vpaddq		$T2,$D2lo,${D2lo}{%k1}{z}
+	vpaddq		$H2,$D2hi,${D2hi}{%k1}{z}
+
+	################################################################
+	# partial reduction
+	vpsrlq		\$44,$D0lo,$tmp
+	vpsllq		\$8,$D0hi,$D0hi
+	vpandq		$mask44,$D0lo,$H0
+	vpaddq		$tmp,$D0hi,$D0hi
+
+	vpaddq		$D0hi,$D1lo,$D1lo
+
+	vpsrlq		\$44,$D1lo,$tmp
+	vpsllq		\$8,$D1hi,$D1hi
+	vpandq		$mask44,$D1lo,$H1
+	vpaddq		$tmp,$D1hi,$D1hi
+
+	vpaddq		$D1hi,$D2lo,$D2lo
+
+	vpsrlq		\$42,$D2lo,$tmp
+	vpsllq		\$10,$D2hi,$D2hi
+	vpandq		$mask42,$D2lo,$H2
+	vpaddq		$tmp,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$H0,$H0
+	vpsllq		\$2,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$H0,$H0
+
+	vpsrlq		\$44,$H0,$tmp		# additional step
+	vpandq		$mask44,$H0,$H0
+
+	vpaddq		$tmp,$H1,$H1
+						# at this point $len is
+						# either 4*n+2 or 0...
+	sub		\$2,$len		# len-=32
+	ja		.Lblocks_vpmadd52_4x_do
+
+	vmovq		%x#$H0,0($ctx)
+	vmovq		%x#$H1,8($ctx)
+	vmovq		%x#$H2,16($ctx)
+	vzeroall
+
+.Lno_data_vpmadd52_4x:
+	ret
+.size	poly1305_blocks_vpmadd52_4x,.-poly1305_blocks_vpmadd52_4x
+___
+}
+{
+########################################################################
+# As implied by its name 8x subroutine processes 8 blocks in parallel...
+# This is intermediate version, as it's used only in cases when input
+# length is either 8*n, 8*n+1 or 8*n+2...
+
+my ($H0,$H1,$H2,$R0,$R1,$R2,$S1,$S2) = map("%ymm$_",(0..5,16,17));
+my ($D0lo,$D0hi,$D1lo,$D1hi,$D2lo,$D2hi) = map("%ymm$_",(18..23));
+my ($T0,$T1,$T2,$T3,$mask44,$mask42,$tmp,$PAD) = map("%ymm$_",(24..31));
+my ($RR0,$RR1,$RR2,$SS1,$SS2) = map("%ymm$_",(6..10));
+
+$code.=<<___;
+.type	poly1305_blocks_vpmadd52_8x,\@function,4
+.align	32
+poly1305_blocks_vpmadd52_8x:
+	shr	\$4,$len
+	jz	.Lno_data_vpmadd52_8x		# too short
+
+	shl	\$40,$padbit
+	mov	64($ctx),%r8			# peek on power of the key
+
+	vmovdqa64	.Lx_mask44(%rip),$mask44
+	vmovdqa64	.Lx_mask42(%rip),$mask42
+
+	test	%r8,%r8				# is power value impossible?
+	js	.Linit_vpmadd52			# if it is, then init R[4]
+
+	vmovq	0($ctx),%x#$H0			# load current hash value
+	vmovq	8($ctx),%x#$H1
+	vmovq	16($ctx),%x#$H2
+
+.Lblocks_vpmadd52_8x:
+	################################################################
+	# fist we calculate more key powers
+
+	vmovdqu64	128($ctx),$R2		# load 1-3-2-4 powers
+	vmovdqu64	160($ctx),$S1
+	vmovdqu64	64($ctx),$R0
+	vmovdqu64	96($ctx),$R1
+
+	vpsllq		\$2,$R2,$S2		# S2 = R2*5*4
+	vpaddq		$R2,$S2,$S2
+	vpsllq		\$2,$S2,$S2
+
+	vpbroadcastq	%x#$R2,$RR2		# broadcast 4th power
+	vpbroadcastq	%x#$R0,$RR0
+	vpbroadcastq	%x#$R1,$RR1
+
+	vpxorq		$D0lo,$D0lo,$D0lo
+	vpmadd52luq	$RR2,$S1,$D0lo
+	vpxorq		$D0hi,$D0hi,$D0hi
+	vpmadd52huq	$RR2,$S1,$D0hi
+	vpxorq		$D1lo,$D1lo,$D1lo
+	vpmadd52luq	$RR2,$S2,$D1lo
+	vpxorq		$D1hi,$D1hi,$D1hi
+	vpmadd52huq	$RR2,$S2,$D1hi
+	vpxorq		$D2lo,$D2lo,$D2lo
+	vpmadd52luq	$RR2,$R0,$D2lo
+	vpxorq		$D2hi,$D2hi,$D2hi
+	vpmadd52huq	$RR2,$R0,$D2hi
+
+	vpmadd52luq	$RR0,$R0,$D0lo
+	vpmadd52huq	$RR0,$R0,$D0hi
+	vpmadd52luq	$RR0,$R1,$D1lo
+	vpmadd52huq	$RR0,$R1,$D1hi
+	vpmadd52luq	$RR0,$R2,$D2lo
+	vpmadd52huq	$RR0,$R2,$D2hi
+
+	vpmadd52luq	$RR1,$S2,$D0lo
+	vpmadd52huq	$RR1,$S2,$D0hi
+	vpmadd52luq	$RR1,$R0,$D1lo
+	vpmadd52huq	$RR1,$R0,$D1hi
+	vpmadd52luq	$RR1,$R1,$D2lo
+	vpmadd52huq	$RR1,$R1,$D2hi
+
+	################################################################
+	# partial reduction
+	vpsrlq		\$44,$D0lo,$tmp
+	vpsllq		\$8,$D0hi,$D0hi
+	vpandq		$mask44,$D0lo,$RR0
+	vpaddq		$tmp,$D0hi,$D0hi
+
+	vpaddq		$D0hi,$D1lo,$D1lo
+
+	vpsrlq		\$44,$D1lo,$tmp
+	vpsllq		\$8,$D1hi,$D1hi
+	vpandq		$mask44,$D1lo,$RR1
+	vpaddq		$tmp,$D1hi,$D1hi
+
+	vpaddq		$D1hi,$D2lo,$D2lo
+
+	vpsrlq		\$42,$D2lo,$tmp
+	vpsllq		\$10,$D2hi,$D2hi
+	vpandq		$mask42,$D2lo,$RR2
+	vpaddq		$tmp,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$RR0,$RR0
+	vpsllq		\$2,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$RR0,$RR0
+
+	vpsrlq		\$44,$RR0,$tmp		# additional step
+	vpandq		$mask44,$RR0,$RR0
+
+	vpaddq		$tmp,$RR1,$RR1
+
+	################################################################
+	# At this point Rx holds 1324 powers, RRx - 5768, and the goal
+	# is 15263748, which reflects how data is loaded...
+
+	vpunpcklqdq	$R2,$RR2,$T2		# 3748
+	vpunpckhqdq	$R2,$RR2,$R2		# 1526
+	vpunpcklqdq	$R0,$RR0,$T0
+	vpunpckhqdq	$R0,$RR0,$R0
+	vpunpcklqdq	$R1,$RR1,$T1
+	vpunpckhqdq	$R1,$RR1,$R1
+___
+######## switch to %zmm
+map(s/%y/%z/, $H0,$H1,$H2,$R0,$R1,$R2,$S1,$S2);
+map(s/%y/%z/, $D0lo,$D0hi,$D1lo,$D1hi,$D2lo,$D2hi);
+map(s/%y/%z/, $T0,$T1,$T2,$T3,$mask44,$mask42,$tmp,$PAD);
+map(s/%y/%z/, $RR0,$RR1,$RR2,$SS1,$SS2);
+
+$code.=<<___;
+	vshufi64x2	\$0x44,$R2,$T2,$RR2	# 15263748
+	vshufi64x2	\$0x44,$R0,$T0,$RR0
+	vshufi64x2	\$0x44,$R1,$T1,$RR1
+
+	vmovdqu64	16*0($inp),$T2		# load data
+	vmovdqu64	16*4($inp),$T3
+	lea		16*8($inp),$inp
+
+	vpsllq		\$2,$RR2,$SS2		# S2 = R2*5*4
+	vpsllq		\$2,$RR1,$SS1		# S1 = R1*5*4
+	vpaddq		$RR2,$SS2,$SS2
+	vpaddq		$RR1,$SS1,$SS1
+	vpsllq		\$2,$SS2,$SS2
+	vpsllq		\$2,$SS1,$SS1
+
+	vpbroadcastq	$padbit,$PAD
+	vpbroadcastq	%x#$mask44,$mask44
+	vpbroadcastq	%x#$mask42,$mask42
+
+	vpbroadcastq	%x#$SS1,$S1		# broadcast 8th power
+	vpbroadcastq	%x#$SS2,$S2
+	vpbroadcastq	%x#$RR0,$R0
+	vpbroadcastq	%x#$RR1,$R1
+	vpbroadcastq	%x#$RR2,$R2
+
+	vpunpcklqdq	$T3,$T2,$T1		# transpose data
+	vpunpckhqdq	$T3,$T2,$T3
+
+	# at this point 64-bit lanes are ordered as 73625140
+
+	vpsrlq		\$24,$T3,$T2		# splat the data
+	vporq		$PAD,$T2,$T2
+	 vpaddq		$T2,$H2,$H2		# accumulate input
+	vpandq		$mask44,$T1,$T0
+	vpsrlq		\$44,$T1,$T1
+	vpsllq		\$20,$T3,$T3
+	vporq		$T3,$T1,$T1
+	vpandq		$mask44,$T1,$T1
+
+	sub		\$8,$len
+	jz		.Ltail_vpmadd52_8x
+	jmp		.Loop_vpmadd52_8x
+
+.align	32
+.Loop_vpmadd52_8x:
+	#vpaddq		$T2,$H2,$H2		# accumulate input
+	vpaddq		$T0,$H0,$H0
+	vpaddq		$T1,$H1,$H1
+
+	vpxorq		$D0lo,$D0lo,$D0lo
+	vpmadd52luq	$H2,$S1,$D0lo
+	vpxorq		$D0hi,$D0hi,$D0hi
+	vpmadd52huq	$H2,$S1,$D0hi
+	vpxorq		$D1lo,$D1lo,$D1lo
+	vpmadd52luq	$H2,$S2,$D1lo
+	vpxorq		$D1hi,$D1hi,$D1hi
+	vpmadd52huq	$H2,$S2,$D1hi
+	vpxorq		$D2lo,$D2lo,$D2lo
+	vpmadd52luq	$H2,$R0,$D2lo
+	vpxorq		$D2hi,$D2hi,$D2hi
+	vpmadd52huq	$H2,$R0,$D2hi
+
+	 vmovdqu64	16*0($inp),$T2		# load data
+	 vmovdqu64	16*4($inp),$T3
+	 lea		16*8($inp),$inp
+	vpmadd52luq	$H0,$R0,$D0lo
+	vpmadd52huq	$H0,$R0,$D0hi
+	vpmadd52luq	$H0,$R1,$D1lo
+	vpmadd52huq	$H0,$R1,$D1hi
+	vpmadd52luq	$H0,$R2,$D2lo
+	vpmadd52huq	$H0,$R2,$D2hi
+
+	 vpunpcklqdq	$T3,$T2,$T1		# transpose data
+	 vpunpckhqdq	$T3,$T2,$T3
+	vpmadd52luq	$H1,$S2,$D0lo
+	vpmadd52huq	$H1,$S2,$D0hi
+	vpmadd52luq	$H1,$R0,$D1lo
+	vpmadd52huq	$H1,$R0,$D1hi
+	vpmadd52luq	$H1,$R1,$D2lo
+	vpmadd52huq	$H1,$R1,$D2hi
+
+	################################################################
+	# partial reduction (interleaved with data splat)
+	vpsrlq		\$44,$D0lo,$tmp
+	vpsllq		\$8,$D0hi,$D0hi
+	vpandq		$mask44,$D0lo,$H0
+	vpaddq		$tmp,$D0hi,$D0hi
+
+	 vpsrlq		\$24,$T3,$T2
+	 vporq		$PAD,$T2,$T2
+	vpaddq		$D0hi,$D1lo,$D1lo
+
+	vpsrlq		\$44,$D1lo,$tmp
+	vpsllq		\$8,$D1hi,$D1hi
+	vpandq		$mask44,$D1lo,$H1
+	vpaddq		$tmp,$D1hi,$D1hi
+
+	 vpandq		$mask44,$T1,$T0
+	 vpsrlq		\$44,$T1,$T1
+	 vpsllq		\$20,$T3,$T3
+	vpaddq		$D1hi,$D2lo,$D2lo
+
+	vpsrlq		\$42,$D2lo,$tmp
+	vpsllq		\$10,$D2hi,$D2hi
+	vpandq		$mask42,$D2lo,$H2
+	vpaddq		$tmp,$D2hi,$D2hi
+
+	  vpaddq	$T2,$H2,$H2		# accumulate input
+	vpaddq		$D2hi,$H0,$H0
+	vpsllq		\$2,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$H0,$H0
+	 vporq		$T3,$T1,$T1
+	 vpandq		$mask44,$T1,$T1
+
+	vpsrlq		\$44,$H0,$tmp		# additional step
+	vpandq		$mask44,$H0,$H0
+
+	vpaddq		$tmp,$H1,$H1
+
+	sub		\$8,$len		# len-=128
+	jnz		.Loop_vpmadd52_8x
+
+.Ltail_vpmadd52_8x:
+	#vpaddq		$T2,$H2,$H2		# accumulate input
+	vpaddq		$T0,$H0,$H0
+	vpaddq		$T1,$H1,$H1
+
+	vpxorq		$D0lo,$D0lo,$D0lo
+	vpmadd52luq	$H2,$SS1,$D0lo
+	vpxorq		$D0hi,$D0hi,$D0hi
+	vpmadd52huq	$H2,$SS1,$D0hi
+	vpxorq		$D1lo,$D1lo,$D1lo
+	vpmadd52luq	$H2,$SS2,$D1lo
+	vpxorq		$D1hi,$D1hi,$D1hi
+	vpmadd52huq	$H2,$SS2,$D1hi
+	vpxorq		$D2lo,$D2lo,$D2lo
+	vpmadd52luq	$H2,$RR0,$D2lo
+	vpxorq		$D2hi,$D2hi,$D2hi
+	vpmadd52huq	$H2,$RR0,$D2hi
+
+	vpmadd52luq	$H0,$RR0,$D0lo
+	vpmadd52huq	$H0,$RR0,$D0hi
+	vpmadd52luq	$H0,$RR1,$D1lo
+	vpmadd52huq	$H0,$RR1,$D1hi
+	vpmadd52luq	$H0,$RR2,$D2lo
+	vpmadd52huq	$H0,$RR2,$D2hi
+
+	vpmadd52luq	$H1,$SS2,$D0lo
+	vpmadd52huq	$H1,$SS2,$D0hi
+	vpmadd52luq	$H1,$RR0,$D1lo
+	vpmadd52huq	$H1,$RR0,$D1hi
+	vpmadd52luq	$H1,$RR1,$D2lo
+	vpmadd52huq	$H1,$RR1,$D2hi
+
+	################################################################
+	# horizontal addition
+
+	mov		\$1,%eax
+	kmovw		%eax,%k1
+	vpsrldq		\$8,$D0lo,$T0
+	vpsrldq		\$8,$D0hi,$H0
+	vpsrldq		\$8,$D1lo,$T1
+	vpsrldq		\$8,$D1hi,$H1
+	vpaddq		$T0,$D0lo,$D0lo
+	vpaddq		$H0,$D0hi,$D0hi
+	vpsrldq		\$8,$D2lo,$T2
+	vpsrldq		\$8,$D2hi,$H2
+	vpaddq		$T1,$D1lo,$D1lo
+	vpaddq		$H1,$D1hi,$D1hi
+	 vpermq		\$0x2,$D0lo,$T0
+	 vpermq		\$0x2,$D0hi,$H0
+	vpaddq		$T2,$D2lo,$D2lo
+	vpaddq		$H2,$D2hi,$D2hi
+
+	vpermq		\$0x2,$D1lo,$T1
+	vpermq		\$0x2,$D1hi,$H1
+	vpaddq		$T0,$D0lo,$D0lo
+	vpaddq		$H0,$D0hi,$D0hi
+	vpermq		\$0x2,$D2lo,$T2
+	vpermq		\$0x2,$D2hi,$H2
+	vpaddq		$T1,$D1lo,$D1lo
+	vpaddq		$H1,$D1hi,$D1hi
+	 vextracti64x4	\$1,$D0lo,%y#$T0
+	 vextracti64x4	\$1,$D0hi,%y#$H0
+	vpaddq		$T2,$D2lo,$D2lo
+	vpaddq		$H2,$D2hi,$D2hi
+
+	vextracti64x4	\$1,$D1lo,%y#$T1
+	vextracti64x4	\$1,$D1hi,%y#$H1
+	vextracti64x4	\$1,$D2lo,%y#$T2
+	vextracti64x4	\$1,$D2hi,%y#$H2
+___
+######## switch back to %ymm
+map(s/%z/%y/, $H0,$H1,$H2,$R0,$R1,$R2,$S1,$S2);
+map(s/%z/%y/, $D0lo,$D0hi,$D1lo,$D1hi,$D2lo,$D2hi);
+map(s/%z/%y/, $T0,$T1,$T2,$T3,$mask44,$mask42,$tmp,$PAD);
+
+$code.=<<___;
+	vpaddq		$T0,$D0lo,${D0lo}{%k1}{z}
+	vpaddq		$H0,$D0hi,${D0hi}{%k1}{z}
+	vpaddq		$T1,$D1lo,${D1lo}{%k1}{z}
+	vpaddq		$H1,$D1hi,${D1hi}{%k1}{z}
+	vpaddq		$T2,$D2lo,${D2lo}{%k1}{z}
+	vpaddq		$H2,$D2hi,${D2hi}{%k1}{z}
+
+	################################################################
+	# partial reduction
+	vpsrlq		\$44,$D0lo,$tmp
+	vpsllq		\$8,$D0hi,$D0hi
+	vpandq		$mask44,$D0lo,$H0
+	vpaddq		$tmp,$D0hi,$D0hi
+
+	vpaddq		$D0hi,$D1lo,$D1lo
+
+	vpsrlq		\$44,$D1lo,$tmp
+	vpsllq		\$8,$D1hi,$D1hi
+	vpandq		$mask44,$D1lo,$H1
+	vpaddq		$tmp,$D1hi,$D1hi
+
+	vpaddq		$D1hi,$D2lo,$D2lo
+
+	vpsrlq		\$42,$D2lo,$tmp
+	vpsllq		\$10,$D2hi,$D2hi
+	vpandq		$mask42,$D2lo,$H2
+	vpaddq		$tmp,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$H0,$H0
+	vpsllq		\$2,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$H0,$H0
+
+	vpsrlq		\$44,$H0,$tmp		# additional step
+	vpandq		$mask44,$H0,$H0
+
+	vpaddq		$tmp,$H1,$H1
+
+	################################################################
+
+	vmovq		%x#$H0,0($ctx)
+	vmovq		%x#$H1,8($ctx)
+	vmovq		%x#$H2,16($ctx)
+	vzeroall
+
+.Lno_data_vpmadd52_8x:
+	ret
+.size	poly1305_blocks_vpmadd52_8x,.-poly1305_blocks_vpmadd52_8x
+___
+}
+$code.=<<___;
+.type	poly1305_emit_base2_44,\@function,3
+.align	32
+poly1305_emit_base2_44:
+	mov	0($ctx),%r8	# load hash value
+	mov	8($ctx),%r9
+	mov	16($ctx),%r10
+
+	mov	%r9,%rax
+	shr	\$20,%r9
+	shl	\$44,%rax
+	mov	%r10,%rcx
+	shr	\$40,%r10
+	shl	\$24,%rcx
+
+	add	%rax,%r8
+	adc	%rcx,%r9
+	adc	\$0,%r10
+
+	mov	%r8,%rax
+	add	\$5,%r8		# compare to modulus
+	mov	%r9,%rcx
+	adc	\$0,%r9
+	adc	\$0,%r10
+	shr	\$2,%r10	# did 130-bit value overflow?
+	cmovnz	%r8,%rax
+	cmovnz	%r9,%rcx
+
+	add	0($nonce),%rax	# accumulate nonce
+	adc	8($nonce),%rcx
+	mov	%rax,0($mac)	# write result
+	mov	%rcx,8($mac)
+
+	ret
+.size	poly1305_emit_base2_44,.-poly1305_emit_base2_44
+___
+}	}	}
+}
+
+if (!$kernel)
+{	# chacha20-poly1305 helpers
+my ($out,$inp,$otp,$len)=$win64 ? ("%rcx","%rdx","%r8", "%r9") :  # Win64 order
+                                  ("%rdi","%rsi","%rdx","%rcx");  # Unix order
+$code.=<<___;
+.globl	xor128_encrypt_n_pad
+.type	xor128_encrypt_n_pad,\@abi-omnipotent
+.align	16
+xor128_encrypt_n_pad:
+	sub	$otp,$inp
+	sub	$otp,$out
+	mov	$len,%r10		# put len aside
+	shr	\$4,$len		# len / 16
+	jz	.Ltail_enc
+	nop
+.Loop_enc_xmm:
+	movdqu	($inp,$otp),%xmm0
+	pxor	($otp),%xmm0
+	movdqu	%xmm0,($out,$otp)
+	movdqa	%xmm0,($otp)
+	lea	16($otp),$otp
+	dec	$len
+	jnz	.Loop_enc_xmm
+
+	and	\$15,%r10		# len % 16
+	jz	.Ldone_enc
+
+.Ltail_enc:
+	mov	\$16,$len
+	sub	%r10,$len
+	xor	%eax,%eax
+.Loop_enc_byte:
+	mov	($inp,$otp),%al
+	xor	($otp),%al
+	mov	%al,($out,$otp)
+	mov	%al,($otp)
+	lea	1($otp),$otp
+	dec	%r10
+	jnz	.Loop_enc_byte
+
+	xor	%eax,%eax
+.Loop_enc_pad:
+	mov	%al,($otp)
+	lea	1($otp),$otp
+	dec	$len
+	jnz	.Loop_enc_pad
+
+.Ldone_enc:
+	mov	$otp,%rax
+	ret
+.size	xor128_encrypt_n_pad,.-xor128_encrypt_n_pad
+
+.globl	xor128_decrypt_n_pad
+.type	xor128_decrypt_n_pad,\@abi-omnipotent
+.align	16
+xor128_decrypt_n_pad:
+	sub	$otp,$inp
+	sub	$otp,$out
+	mov	$len,%r10		# put len aside
+	shr	\$4,$len		# len / 16
+	jz	.Ltail_dec
+	nop
+.Loop_dec_xmm:
+	movdqu	($inp,$otp),%xmm0
+	movdqa	($otp),%xmm1
+	pxor	%xmm0,%xmm1
+	movdqu	%xmm1,($out,$otp)
+	movdqa	%xmm0,($otp)
+	lea	16($otp),$otp
+	dec	$len
+	jnz	.Loop_dec_xmm
+
+	pxor	%xmm1,%xmm1
+	and	\$15,%r10		# len % 16
+	jz	.Ldone_dec
+
+.Ltail_dec:
+	mov	\$16,$len
+	sub	%r10,$len
+	xor	%eax,%eax
+	xor	%r11d,%r11d
+.Loop_dec_byte:
+	mov	($inp,$otp),%r11b
+	mov	($otp),%al
+	xor	%r11b,%al
+	mov	%al,($out,$otp)
+	mov	%r11b,($otp)
+	lea	1($otp),$otp
+	dec	%r10
+	jnz	.Loop_dec_byte
+
+	xor	%eax,%eax
+.Loop_dec_pad:
+	mov	%al,($otp)
+	lea	1($otp),$otp
+	dec	$len
+	jnz	.Loop_dec_pad
+
+.Ldone_dec:
+	mov	$otp,%rax
+	ret
+.size	xor128_decrypt_n_pad,.-xor128_decrypt_n_pad
+___
+}
+
+# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
+#		CONTEXT *context,DISPATCHER_CONTEXT *disp)
+if ($win64) {
+$rec="%rcx";
+$frame="%rdx";
+$context="%r8";
+$disp="%r9";
+
+$code.=<<___;
+.extern	__imp_RtlVirtualUnwind
+.type	se_handler,\@abi-omnipotent
+.align	16
+se_handler:
+	push	%rsi
+	push	%rdi
+	push	%rbx
+	push	%rbp
+	push	%r12
+	push	%r13
+	push	%r14
+	push	%r15
+	pushfq
+	sub	\$64,%rsp
+
+	mov	120($context),%rax	# pull context->Rax
+	mov	248($context),%rbx	# pull context->Rip
+
+	mov	8($disp),%rsi		# disp->ImageBase
+	mov	56($disp),%r11		# disp->HandlerData
+
+	mov	0(%r11),%r10d		# HandlerData[0]
+	lea	(%rsi,%r10),%r10	# prologue label
+	cmp	%r10,%rbx		# context->Rip<.Lprologue
+	jb	.Lcommon_seh_tail
+
+	mov	152($context),%rax	# pull context->Rsp
+
+	mov	4(%r11),%r10d		# HandlerData[1]
+	lea	(%rsi,%r10),%r10	# epilogue label
+	cmp	%r10,%rbx		# context->Rip>=.Lepilogue
+	jae	.Lcommon_seh_tail
+
+	lea	48(%rax),%rax
+
+	mov	-8(%rax),%rbx
+	mov	-16(%rax),%rbp
+	mov	-24(%rax),%r12
+	mov	-32(%rax),%r13
+	mov	-40(%rax),%r14
+	mov	-48(%rax),%r15
+	mov	%rbx,144($context)	# restore context->Rbx
+	mov	%rbp,160($context)	# restore context->Rbp
+	mov	%r12,216($context)	# restore context->R12
+	mov	%r13,224($context)	# restore context->R13
+	mov	%r14,232($context)	# restore context->R14
+	mov	%r15,240($context)	# restore context->R14
+
+	jmp	.Lcommon_seh_tail
+.size	se_handler,.-se_handler
+
+.type	avx_handler,\@abi-omnipotent
+.align	16
+avx_handler:
+	push	%rsi
+	push	%rdi
+	push	%rbx
+	push	%rbp
+	push	%r12
+	push	%r13
+	push	%r14
+	push	%r15
+	pushfq
+	sub	\$64,%rsp
+
+	mov	120($context),%rax	# pull context->Rax
+	mov	248($context),%rbx	# pull context->Rip
+
+	mov	8($disp),%rsi		# disp->ImageBase
+	mov	56($disp),%r11		# disp->HandlerData
+
+	mov	0(%r11),%r10d		# HandlerData[0]
+	lea	(%rsi,%r10),%r10	# prologue label
+	cmp	%r10,%rbx		# context->Rip<prologue label
+	jb	.Lcommon_seh_tail
+
+	mov	152($context),%rax	# pull context->Rsp
+
+	mov	4(%r11),%r10d		# HandlerData[1]
+	lea	(%rsi,%r10),%r10	# epilogue label
+	cmp	%r10,%rbx		# context->Rip>=epilogue label
+	jae	.Lcommon_seh_tail
+
+	mov	208($context),%rax	# pull context->R11
+
+	lea	0x50(%rax),%rsi
+	lea	0xf8(%rax),%rax
+	lea	512($context),%rdi	# &context.Xmm6
+	mov	\$20,%ecx
+	.long	0xa548f3fc		# cld; rep movsq
+
+.Lcommon_seh_tail:
+	mov	8(%rax),%rdi
+	mov	16(%rax),%rsi
+	mov	%rax,152($context)	# restore context->Rsp
+	mov	%rsi,168($context)	# restore context->Rsi
+	mov	%rdi,176($context)	# restore context->Rdi
+
+	mov	40($disp),%rdi		# disp->ContextRecord
+	mov	$context,%rsi		# context
+	mov	\$154,%ecx		# sizeof(CONTEXT)
+	.long	0xa548f3fc		# cld; rep movsq
+
+	mov	$disp,%rsi
+	xor	%ecx,%ecx		# arg1, UNW_FLAG_NHANDLER
+	mov	8(%rsi),%rdx		# arg2, disp->ImageBase
+	mov	0(%rsi),%r8		# arg3, disp->ControlPc
+	mov	16(%rsi),%r9		# arg4, disp->FunctionEntry
+	mov	40(%rsi),%r10		# disp->ContextRecord
+	lea	56(%rsi),%r11		# &disp->HandlerData
+	lea	24(%rsi),%r12		# &disp->EstablisherFrame
+	mov	%r10,32(%rsp)		# arg5
+	mov	%r11,40(%rsp)		# arg6
+	mov	%r12,48(%rsp)		# arg7
+	mov	%rcx,56(%rsp)		# arg8, (NULL)
+	call	*__imp_RtlVirtualUnwind(%rip)
+
+	mov	\$1,%eax		# ExceptionContinueSearch
+	add	\$64,%rsp
+	popfq
+	pop	%r15
+	pop	%r14
+	pop	%r13
+	pop	%r12
+	pop	%rbp
+	pop	%rbx
+	pop	%rdi
+	pop	%rsi
+	ret
+.size	avx_handler,.-avx_handler
+
+.section	.pdata
+.align	4
+	.rva	.LSEH_begin_poly1305_init_x86_64
+	.rva	.LSEH_end_poly1305_init_x86_64
+	.rva	.LSEH_info_poly1305_init_x86_64
+
+	.rva	.LSEH_begin_poly1305_blocks_x86_64
+	.rva	.LSEH_end_poly1305_blocks_x86_64
+	.rva	.LSEH_info_poly1305_blocks_x86_64
+
+	.rva	.LSEH_begin_poly1305_emit_x86_64
+	.rva	.LSEH_end_poly1305_emit_x86_64
+	.rva	.LSEH_info_poly1305_emit_x86_64
+___
+$code.=<<___ if ($avx);
+	.rva	.LSEH_begin_poly1305_blocks_avx
+	.rva	.Lbase2_64_avx
+	.rva	.LSEH_info_poly1305_blocks_avx_1
+
+	.rva	.Lbase2_64_avx
+	.rva	.Leven_avx
+	.rva	.LSEH_info_poly1305_blocks_avx_2
+
+	.rva	.Leven_avx
+	.rva	.LSEH_end_poly1305_blocks_avx
+	.rva	.LSEH_info_poly1305_blocks_avx_3
+
+	.rva	.LSEH_begin_poly1305_emit_avx
+	.rva	.LSEH_end_poly1305_emit_avx
+	.rva	.LSEH_info_poly1305_emit_avx
+___
+$code.=<<___ if ($avx>1);
+	.rva	.LSEH_begin_poly1305_blocks_avx2
+	.rva	.Lbase2_64_avx2
+	.rva	.LSEH_info_poly1305_blocks_avx2_1
+
+	.rva	.Lbase2_64_avx2
+	.rva	.Leven_avx2
+	.rva	.LSEH_info_poly1305_blocks_avx2_2
+
+	.rva	.Leven_avx2
+	.rva	.LSEH_end_poly1305_blocks_avx2
+	.rva	.LSEH_info_poly1305_blocks_avx2_3
+___
+$code.=<<___ if ($avx>2);
+	.rva	.LSEH_begin_poly1305_blocks_avx512
+	.rva	.LSEH_end_poly1305_blocks_avx512
+	.rva	.LSEH_info_poly1305_blocks_avx512
+___
+$code.=<<___;
+.section	.xdata
+.align	8
+.LSEH_info_poly1305_init_x86_64:
+	.byte	9,0,0,0
+	.rva	se_handler
+	.rva	.LSEH_begin_poly1305_init_x86_64,.LSEH_begin_poly1305_init_x86_64
+
+.LSEH_info_poly1305_blocks_x86_64:
+	.byte	9,0,0,0
+	.rva	se_handler
+	.rva	.Lblocks_body,.Lblocks_epilogue
+
+.LSEH_info_poly1305_emit_x86_64:
+	.byte	9,0,0,0
+	.rva	se_handler
+	.rva	.LSEH_begin_poly1305_emit_x86_64,.LSEH_begin_poly1305_emit_x86_64
+___
+$code.=<<___ if ($avx);
+.LSEH_info_poly1305_blocks_avx_1:
+	.byte	9,0,0,0
+	.rva	se_handler
+	.rva	.Lblocks_avx_body,.Lblocks_avx_epilogue		# HandlerData[]
+
+.LSEH_info_poly1305_blocks_avx_2:
+	.byte	9,0,0,0
+	.rva	se_handler
+	.rva	.Lbase2_64_avx_body,.Lbase2_64_avx_epilogue	# HandlerData[]
+
+.LSEH_info_poly1305_blocks_avx_3:
+	.byte	9,0,0,0
+	.rva	avx_handler
+	.rva	.Ldo_avx_body,.Ldo_avx_epilogue			# HandlerData[]
+
+.LSEH_info_poly1305_emit_avx:
+	.byte	9,0,0,0
+	.rva	se_handler
+	.rva	.LSEH_begin_poly1305_emit_avx,.LSEH_begin_poly1305_emit_avx
+___
+$code.=<<___ if ($avx>1);
+.LSEH_info_poly1305_blocks_avx2_1:
+	.byte	9,0,0,0
+	.rva	se_handler
+	.rva	.Lblocks_avx2_body,.Lblocks_avx2_epilogue	# HandlerData[]
+
+.LSEH_info_poly1305_blocks_avx2_2:
+	.byte	9,0,0,0
+	.rva	se_handler
+	.rva	.Lbase2_64_avx2_body,.Lbase2_64_avx2_epilogue	# HandlerData[]
+
+.LSEH_info_poly1305_blocks_avx2_3:
+	.byte	9,0,0,0
+	.rva	avx_handler
+	.rva	.Ldo_avx2_body,.Ldo_avx2_epilogue		# HandlerData[]
+___
+$code.=<<___ if ($avx>2);
+.LSEH_info_poly1305_blocks_avx512:
+	.byte	9,0,0,0
+	.rva	avx_handler
+	.rva	.Ldo_avx512_body,.Ldo_avx512_epilogue		# HandlerData[]
+___
+}
+
+open SELF,$0;
+while(<SELF>) {
+	next if (/^#!/);
+	last if (!s/^#/\/\// and !/^$/);
+	print;
+}
+close SELF;
+
+foreach (split('\n',$code)) {
+	s/\`([^\`]*)\`/eval($1)/ge;
+	s/%r([a-z]+)#d/%e$1/g;
+	s/%r([0-9]+)#d/%r$1d/g;
+	s/%x#%[yz]/%x/g or s/%y#%z/%y/g or s/%z#%[yz]/%z/g;
+
+	if ($kernel) {
+		s/(^\.type.*),[0-9]+$/\1/;
+		s/(^\.type.*),\@abi-omnipotent+$/\1,\@function/;
+		next if /^\.cfi.*/;
+	}
+
+	print $_,"\n";
+}
+close STDOUT;
diff --git a/arch/x86/crypto/poly1305_glue.c b/arch/x86/crypto/poly1305_glue.c
index 4a1c05d..61b2bc8 100644
--- a/arch/x86/crypto/poly1305_glue.c
+++ b/arch/x86/crypto/poly1305_glue.c
@@ -1,131 +1,175 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
+// SPDX-License-Identifier: GPL-2.0 OR MIT
 /*
- * Poly1305 authenticator algorithm, RFC7539, SIMD glue code
- *
- * Copyright (C) 2015 Martin Willi
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
  */
 
 #include <crypto/algapi.h>
 #include <crypto/internal/hash.h>
+#include <crypto/internal/poly1305.h>
 #include <crypto/internal/simd.h>
-#include <crypto/poly1305.h>
 #include <linux/crypto.h>
+#include <linux/jump_label.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
+#include <asm/intel-family.h>
 #include <asm/simd.h>
 
-struct poly1305_simd_desc_ctx {
-	struct poly1305_desc_ctx base;
-	/* derived key u set? */
-	bool uset;
-#ifdef CONFIG_AS_AVX2
-	/* derived keys r^3, r^4 set? */
-	bool wset;
-#endif
-	/* derived Poly1305 key r^2 */
-	u32 u[5];
-	/* ... silently appended r^3 and r^4 when using AVX2 */
+asmlinkage void poly1305_init_x86_64(void *ctx,
+				     const u8 key[POLY1305_KEY_SIZE]);
+asmlinkage void poly1305_blocks_x86_64(void *ctx, const u8 *inp,
+				       const size_t len, const u32 padbit);
+asmlinkage void poly1305_emit_x86_64(void *ctx, u8 mac[POLY1305_DIGEST_SIZE],
+				     const u32 nonce[4]);
+asmlinkage void poly1305_emit_avx(void *ctx, u8 mac[POLY1305_DIGEST_SIZE],
+				  const u32 nonce[4]);
+asmlinkage void poly1305_blocks_avx(void *ctx, const u8 *inp, const size_t len,
+				    const u32 padbit);
+asmlinkage void poly1305_blocks_avx2(void *ctx, const u8 *inp, const size_t len,
+				     const u32 padbit);
+asmlinkage void poly1305_blocks_avx512(void *ctx, const u8 *inp,
+				       const size_t len, const u32 padbit);
+
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(poly1305_use_avx);
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(poly1305_use_avx2);
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(poly1305_use_avx512);
+
+struct poly1305_arch_internal {
+	union {
+		struct {
+			u32 h[5];
+			u32 is_base2_26;
+		};
+		u64 hs[3];
+	};
+	u64 r[2];
+	u64 pad;
+	struct { u32 r2, r1, r4, r3; } rn[9];
 };
 
-asmlinkage void poly1305_block_sse2(u32 *h, const u8 *src,
-				    const u32 *r, unsigned int blocks);
-asmlinkage void poly1305_2block_sse2(u32 *h, const u8 *src, const u32 *r,
-				     unsigned int blocks, const u32 *u);
-#ifdef CONFIG_AS_AVX2
-asmlinkage void poly1305_4block_avx2(u32 *h, const u8 *src, const u32 *r,
-				     unsigned int blocks, const u32 *u);
-static bool poly1305_use_avx2;
-#endif
-
-static int poly1305_simd_init(struct shash_desc *desc)
+/* The AVX code uses base 2^26, while the scalar code uses base 2^64. If we hit
+ * the unfortunate situation of using AVX and then having to go back to scalar
+ * -- because the user is silly and has called the update function from two
+ * separate contexts -- then we need to convert back to the original base before
+ * proceeding. It is possible to reason that the initial reduction below is
+ * sufficient given the implementation invariants. However, for an avoidance of
+ * doubt and because this is not performance critical, we do the full reduction
+ * anyway. Z3 proof of below function: https://xn--4db.cc/ltPtHCKN/py
+ */
+static void convert_to_base2_64(void *ctx)
 {
-	struct poly1305_simd_desc_ctx *sctx = shash_desc_ctx(desc);
+	struct poly1305_arch_internal *state = ctx;
+	u32 cy;
 
-	sctx->uset = false;
-#ifdef CONFIG_AS_AVX2
-	sctx->wset = false;
-#endif
+	if (!state->is_base2_26)
+		return;
 
-	return crypto_poly1305_init(desc);
+	cy = state->h[0] >> 26; state->h[0] &= 0x3ffffff; state->h[1] += cy;
+	cy = state->h[1] >> 26; state->h[1] &= 0x3ffffff; state->h[2] += cy;
+	cy = state->h[2] >> 26; state->h[2] &= 0x3ffffff; state->h[3] += cy;
+	cy = state->h[3] >> 26; state->h[3] &= 0x3ffffff; state->h[4] += cy;
+	state->hs[0] = ((u64)state->h[2] << 52) | ((u64)state->h[1] << 26) | state->h[0];
+	state->hs[1] = ((u64)state->h[4] << 40) | ((u64)state->h[3] << 14) | (state->h[2] >> 12);
+	state->hs[2] = state->h[4] >> 24;
+#define ULT(a, b) ((a ^ ((a ^ b) | ((a - b) ^ b))) >> (sizeof(a) * 8 - 1))
+	cy = (state->hs[2] >> 2) + (state->hs[2] & ~3ULL);
+	state->hs[2] &= 3;
+	state->hs[0] += cy;
+	state->hs[1] += (cy = ULT(state->hs[0], cy));
+	state->hs[2] += ULT(state->hs[1], cy);
+#undef ULT
+	state->is_base2_26 = 0;
 }
 
-static void poly1305_simd_mult(u32 *a, const u32 *b)
+static void poly1305_simd_init(void *ctx, const u8 key[POLY1305_KEY_SIZE])
 {
-	u8 m[POLY1305_BLOCK_SIZE];
-
-	memset(m, 0, sizeof(m));
-	/* The poly1305 block function adds a hi-bit to the accumulator which
-	 * we don't need for key multiplication; compensate for it. */
-	a[4] -= 1 << 24;
-	poly1305_block_sse2(a, m, b, 1);
+	poly1305_init_x86_64(ctx, key);
 }
 
-static unsigned int poly1305_simd_blocks(struct poly1305_desc_ctx *dctx,
-					 const u8 *src, unsigned int srclen)
+static void poly1305_simd_blocks(void *ctx, const u8 *inp, size_t len,
+				 const u32 padbit)
 {
-	struct poly1305_simd_desc_ctx *sctx;
-	unsigned int blocks, datalen;
+	struct poly1305_arch_internal *state = ctx;
 
-	BUILD_BUG_ON(offsetof(struct poly1305_simd_desc_ctx, base));
-	sctx = container_of(dctx, struct poly1305_simd_desc_ctx, base);
+	/* SIMD disables preemption, so relax after processing each page. */
+	BUILD_BUG_ON(SZ_4K < POLY1305_BLOCK_SIZE ||
+		     SZ_4K % POLY1305_BLOCK_SIZE);
 
+	if (!IS_ENABLED(CONFIG_AS_AVX) || !static_branch_likely(&poly1305_use_avx) ||
+	    (len < (POLY1305_BLOCK_SIZE * 18) && !state->is_base2_26) ||
+	    !crypto_simd_usable()) {
+		convert_to_base2_64(ctx);
+		poly1305_blocks_x86_64(ctx, inp, len, padbit);
+		return;
+	}
+
+	do {
+		const size_t bytes = min_t(size_t, len, SZ_4K);
+
+		kernel_fpu_begin();
+		if (IS_ENABLED(CONFIG_AS_AVX512) && static_branch_likely(&poly1305_use_avx512))
+			poly1305_blocks_avx512(ctx, inp, bytes, padbit);
+		else if (IS_ENABLED(CONFIG_AS_AVX2) && static_branch_likely(&poly1305_use_avx2))
+			poly1305_blocks_avx2(ctx, inp, bytes, padbit);
+		else
+			poly1305_blocks_avx(ctx, inp, bytes, padbit);
+		kernel_fpu_end();
+
+		len -= bytes;
+		inp += bytes;
+	} while (len);
+}
+
+static void poly1305_simd_emit(void *ctx, u8 mac[POLY1305_DIGEST_SIZE],
+			       const u32 nonce[4])
+{
+	if (!IS_ENABLED(CONFIG_AS_AVX) || !static_branch_likely(&poly1305_use_avx))
+		poly1305_emit_x86_64(ctx, mac, nonce);
+	else
+		poly1305_emit_avx(ctx, mac, nonce);
+}
+
+void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 *key)
+{
+	poly1305_simd_init(&dctx->h, key);
+	dctx->s[0] = get_unaligned_le32(&key[16]);
+	dctx->s[1] = get_unaligned_le32(&key[20]);
+	dctx->s[2] = get_unaligned_le32(&key[24]);
+	dctx->s[3] = get_unaligned_le32(&key[28]);
+	dctx->buflen = 0;
+	dctx->sset = true;
+}
+EXPORT_SYMBOL(poly1305_init_arch);
+
+static unsigned int crypto_poly1305_setdctxkey(struct poly1305_desc_ctx *dctx,
+					       const u8 *inp, unsigned int len)
+{
+	unsigned int acc = 0;
 	if (unlikely(!dctx->sset)) {
-		datalen = crypto_poly1305_setdesckey(dctx, src, srclen);
-		src += srclen - datalen;
-		srclen = datalen;
-	}
-
-#ifdef CONFIG_AS_AVX2
-	if (poly1305_use_avx2 && srclen >= POLY1305_BLOCK_SIZE * 4) {
-		if (unlikely(!sctx->wset)) {
-			if (!sctx->uset) {
-				memcpy(sctx->u, dctx->r.r, sizeof(sctx->u));
-				poly1305_simd_mult(sctx->u, dctx->r.r);
-				sctx->uset = true;
-			}
-			memcpy(sctx->u + 5, sctx->u, sizeof(sctx->u));
-			poly1305_simd_mult(sctx->u + 5, dctx->r.r);
-			memcpy(sctx->u + 10, sctx->u + 5, sizeof(sctx->u));
-			poly1305_simd_mult(sctx->u + 10, dctx->r.r);
-			sctx->wset = true;
+		if (!dctx->rset && len >= POLY1305_BLOCK_SIZE) {
+			poly1305_simd_init(&dctx->h, inp);
+			inp += POLY1305_BLOCK_SIZE;
+			len -= POLY1305_BLOCK_SIZE;
+			acc += POLY1305_BLOCK_SIZE;
+			dctx->rset = 1;
 		}
-		blocks = srclen / (POLY1305_BLOCK_SIZE * 4);
-		poly1305_4block_avx2(dctx->h.h, src, dctx->r.r, blocks,
-				     sctx->u);
-		src += POLY1305_BLOCK_SIZE * 4 * blocks;
-		srclen -= POLY1305_BLOCK_SIZE * 4 * blocks;
-	}
-#endif
-	if (likely(srclen >= POLY1305_BLOCK_SIZE * 2)) {
-		if (unlikely(!sctx->uset)) {
-			memcpy(sctx->u, dctx->r.r, sizeof(sctx->u));
-			poly1305_simd_mult(sctx->u, dctx->r.r);
-			sctx->uset = true;
+		if (len >= POLY1305_BLOCK_SIZE) {
+			dctx->s[0] = get_unaligned_le32(&inp[0]);
+			dctx->s[1] = get_unaligned_le32(&inp[4]);
+			dctx->s[2] = get_unaligned_le32(&inp[8]);
+			dctx->s[3] = get_unaligned_le32(&inp[12]);
+			inp += POLY1305_BLOCK_SIZE;
+			len -= POLY1305_BLOCK_SIZE;
+			acc += POLY1305_BLOCK_SIZE;
+			dctx->sset = true;
 		}
-		blocks = srclen / (POLY1305_BLOCK_SIZE * 2);
-		poly1305_2block_sse2(dctx->h.h, src, dctx->r.r, blocks,
-				     sctx->u);
-		src += POLY1305_BLOCK_SIZE * 2 * blocks;
-		srclen -= POLY1305_BLOCK_SIZE * 2 * blocks;
 	}
-	if (srclen >= POLY1305_BLOCK_SIZE) {
-		poly1305_block_sse2(dctx->h.h, src, dctx->r.r, 1);
-		srclen -= POLY1305_BLOCK_SIZE;
-	}
-	return srclen;
+	return acc;
 }
 
-static int poly1305_simd_update(struct shash_desc *desc,
-				const u8 *src, unsigned int srclen)
+void poly1305_update_arch(struct poly1305_desc_ctx *dctx, const u8 *src,
+			  unsigned int srclen)
 {
-	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
-	unsigned int bytes;
-
-	/* kernel_fpu_begin/end is costly, use fallback for small updates */
-	if (srclen <= 288 || !crypto_simd_usable())
-		return crypto_poly1305_update(desc, src, srclen);
-
-	kernel_fpu_begin();
+	unsigned int bytes, used;
 
 	if (unlikely(dctx->buflen)) {
 		bytes = min(srclen, POLY1305_BLOCK_SIZE - dctx->buflen);
@@ -135,34 +179,76 @@ static int poly1305_simd_update(struct shash_desc *desc,
 		dctx->buflen += bytes;
 
 		if (dctx->buflen == POLY1305_BLOCK_SIZE) {
-			poly1305_simd_blocks(dctx, dctx->buf,
-					     POLY1305_BLOCK_SIZE);
+			if (likely(!crypto_poly1305_setdctxkey(dctx, dctx->buf, POLY1305_BLOCK_SIZE)))
+				poly1305_simd_blocks(&dctx->h, dctx->buf, POLY1305_BLOCK_SIZE, 1);
 			dctx->buflen = 0;
 		}
 	}
 
 	if (likely(srclen >= POLY1305_BLOCK_SIZE)) {
-		bytes = poly1305_simd_blocks(dctx, src, srclen);
-		src += srclen - bytes;
-		srclen = bytes;
+		bytes = round_down(srclen, POLY1305_BLOCK_SIZE);
+		srclen -= bytes;
+		used = crypto_poly1305_setdctxkey(dctx, src, bytes);
+		if (likely(bytes - used))
+			poly1305_simd_blocks(&dctx->h, src + used, bytes - used, 1);
+		src += bytes;
 	}
 
-	kernel_fpu_end();
-
 	if (unlikely(srclen)) {
 		dctx->buflen = srclen;
 		memcpy(dctx->buf, src, srclen);
 	}
+}
+EXPORT_SYMBOL(poly1305_update_arch);
 
+void poly1305_final_arch(struct poly1305_desc_ctx *dctx, u8 *dst)
+{
+	if (unlikely(dctx->buflen)) {
+		dctx->buf[dctx->buflen++] = 1;
+		memset(dctx->buf + dctx->buflen, 0,
+		       POLY1305_BLOCK_SIZE - dctx->buflen);
+		poly1305_simd_blocks(&dctx->h, dctx->buf, POLY1305_BLOCK_SIZE, 0);
+	}
+
+	poly1305_simd_emit(&dctx->h, dst, dctx->s);
+	*dctx = (struct poly1305_desc_ctx){};
+}
+EXPORT_SYMBOL(poly1305_final_arch);
+
+static int crypto_poly1305_init(struct shash_desc *desc)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	*dctx = (struct poly1305_desc_ctx){};
+	return 0;
+}
+
+static int crypto_poly1305_update(struct shash_desc *desc,
+				  const u8 *src, unsigned int srclen)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	poly1305_update_arch(dctx, src, srclen);
+	return 0;
+}
+
+static int crypto_poly1305_final(struct shash_desc *desc, u8 *dst)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	if (unlikely(!dctx->sset))
+		return -ENOKEY;
+
+	poly1305_final_arch(dctx, dst);
 	return 0;
 }
 
 static struct shash_alg alg = {
 	.digestsize	= POLY1305_DIGEST_SIZE,
-	.init		= poly1305_simd_init,
-	.update		= poly1305_simd_update,
+	.init		= crypto_poly1305_init,
+	.update		= crypto_poly1305_update,
 	.final		= crypto_poly1305_final,
-	.descsize	= sizeof(struct poly1305_simd_desc_ctx),
+	.descsize	= sizeof(struct poly1305_desc_ctx),
 	.base		= {
 		.cra_name		= "poly1305",
 		.cra_driver_name	= "poly1305-simd",
@@ -174,30 +260,33 @@ static struct shash_alg alg = {
 
 static int __init poly1305_simd_mod_init(void)
 {
-	if (!boot_cpu_has(X86_FEATURE_XMM2))
-		return -ENODEV;
-
-#ifdef CONFIG_AS_AVX2
-	poly1305_use_avx2 = boot_cpu_has(X86_FEATURE_AVX) &&
-			    boot_cpu_has(X86_FEATURE_AVX2) &&
-			    cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM, NULL);
-	alg.descsize = sizeof(struct poly1305_simd_desc_ctx);
-	if (poly1305_use_avx2)
-		alg.descsize += 10 * sizeof(u32);
-#endif
-	return crypto_register_shash(&alg);
+	if (IS_ENABLED(CONFIG_AS_AVX) && boot_cpu_has(X86_FEATURE_AVX) &&
+	    cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM, NULL))
+		static_branch_enable(&poly1305_use_avx);
+	if (IS_ENABLED(CONFIG_AS_AVX2) && boot_cpu_has(X86_FEATURE_AVX) &&
+	    boot_cpu_has(X86_FEATURE_AVX2) &&
+	    cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM, NULL))
+		static_branch_enable(&poly1305_use_avx2);
+	if (IS_ENABLED(CONFIG_AS_AVX512) && boot_cpu_has(X86_FEATURE_AVX) &&
+	    boot_cpu_has(X86_FEATURE_AVX2) && boot_cpu_has(X86_FEATURE_AVX512F) &&
+	    cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM | XFEATURE_MASK_AVX512, NULL) &&
+	    /* Skylake downclocks unacceptably much when using zmm, but later generations are fast. */
+	    boot_cpu_data.x86_model != INTEL_FAM6_SKYLAKE_X)
+		static_branch_enable(&poly1305_use_avx512);
+	return IS_REACHABLE(CONFIG_CRYPTO_HASH) ? crypto_register_shash(&alg) : 0;
 }
 
 static void __exit poly1305_simd_mod_exit(void)
 {
-	crypto_unregister_shash(&alg);
+	if (IS_REACHABLE(CONFIG_CRYPTO_HASH))
+		crypto_unregister_shash(&alg);
 }
 
 module_init(poly1305_simd_mod_init);
 module_exit(poly1305_simd_mod_exit);
 
 MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Martin Willi <martin@strongswan.org>");
+MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
 MODULE_DESCRIPTION("Poly1305 authenticator");
 MODULE_ALIAS_CRYPTO("poly1305");
 MODULE_ALIAS_CRYPTO("poly1305-simd");
diff --git a/arch/x86/crypto/serpent_avx2_glue.c b/arch/x86/crypto/serpent_avx2_glue.c
index 13fd8d3..f973ace 100644
--- a/arch/x86/crypto/serpent_avx2_glue.c
+++ b/arch/x86/crypto/serpent_avx2_glue.c
@@ -19,18 +19,16 @@
 #define SERPENT_AVX2_PARALLEL_BLOCKS 16
 
 /* 16-way AVX2 parallel cipher functions */
-asmlinkage void serpent_ecb_enc_16way(struct serpent_ctx *ctx, u8 *dst,
-				      const u8 *src);
-asmlinkage void serpent_ecb_dec_16way(struct serpent_ctx *ctx, u8 *dst,
-				      const u8 *src);
-asmlinkage void serpent_cbc_dec_16way(void *ctx, u128 *dst, const u128 *src);
+asmlinkage void serpent_ecb_enc_16way(const void *ctx, u8 *dst, const u8 *src);
+asmlinkage void serpent_ecb_dec_16way(const void *ctx, u8 *dst, const u8 *src);
+asmlinkage void serpent_cbc_dec_16way(const void *ctx, u8 *dst, const u8 *src);
 
-asmlinkage void serpent_ctr_16way(void *ctx, u128 *dst, const u128 *src,
+asmlinkage void serpent_ctr_16way(const void *ctx, u8 *dst, const u8 *src,
 				  le128 *iv);
-asmlinkage void serpent_xts_enc_16way(struct serpent_ctx *ctx, u8 *dst,
-				      const u8 *src, le128 *iv);
-asmlinkage void serpent_xts_dec_16way(struct serpent_ctx *ctx, u8 *dst,
-				      const u8 *src, le128 *iv);
+asmlinkage void serpent_xts_enc_16way(const void *ctx, u8 *dst, const u8 *src,
+				      le128 *iv);
+asmlinkage void serpent_xts_dec_16way(const void *ctx, u8 *dst, const u8 *src,
+				      le128 *iv);
 
 static int serpent_setkey_skcipher(struct crypto_skcipher *tfm,
 				   const u8 *key, unsigned int keylen)
@@ -44,13 +42,13 @@ static const struct common_glue_ctx serpent_enc = {
 
 	.funcs = { {
 		.num_blocks = 16,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(serpent_ecb_enc_16way) }
+		.fn_u = { .ecb = serpent_ecb_enc_16way }
 	}, {
 		.num_blocks = 8,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(serpent_ecb_enc_8way_avx) }
+		.fn_u = { .ecb = serpent_ecb_enc_8way_avx }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(__serpent_encrypt) }
+		.fn_u = { .ecb = __serpent_encrypt }
 	} }
 };
 
@@ -60,13 +58,13 @@ static const struct common_glue_ctx serpent_ctr = {
 
 	.funcs = { {
 		.num_blocks = 16,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(serpent_ctr_16way) }
+		.fn_u = { .ctr = serpent_ctr_16way }
 	},  {
 		.num_blocks = 8,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(serpent_ctr_8way_avx) }
+		.fn_u = { .ctr = serpent_ctr_8way_avx }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(__serpent_crypt_ctr) }
+		.fn_u = { .ctr = __serpent_crypt_ctr }
 	} }
 };
 
@@ -76,13 +74,13 @@ static const struct common_glue_ctx serpent_enc_xts = {
 
 	.funcs = { {
 		.num_blocks = 16,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_enc_16way) }
+		.fn_u = { .xts = serpent_xts_enc_16way }
 	}, {
 		.num_blocks = 8,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_enc_8way_avx) }
+		.fn_u = { .xts = serpent_xts_enc_8way_avx }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_enc) }
+		.fn_u = { .xts = serpent_xts_enc }
 	} }
 };
 
@@ -92,13 +90,13 @@ static const struct common_glue_ctx serpent_dec = {
 
 	.funcs = { {
 		.num_blocks = 16,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(serpent_ecb_dec_16way) }
+		.fn_u = { .ecb = serpent_ecb_dec_16way }
 	}, {
 		.num_blocks = 8,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(serpent_ecb_dec_8way_avx) }
+		.fn_u = { .ecb = serpent_ecb_dec_8way_avx }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(__serpent_decrypt) }
+		.fn_u = { .ecb = __serpent_decrypt }
 	} }
 };
 
@@ -108,13 +106,13 @@ static const struct common_glue_ctx serpent_dec_cbc = {
 
 	.funcs = { {
 		.num_blocks = 16,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(serpent_cbc_dec_16way) }
+		.fn_u = { .cbc = serpent_cbc_dec_16way }
 	}, {
 		.num_blocks = 8,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(serpent_cbc_dec_8way_avx) }
+		.fn_u = { .cbc = serpent_cbc_dec_8way_avx }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(__serpent_decrypt) }
+		.fn_u = { .cbc = __serpent_decrypt }
 	} }
 };
 
@@ -124,13 +122,13 @@ static const struct common_glue_ctx serpent_dec_xts = {
 
 	.funcs = { {
 		.num_blocks = 16,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_dec_16way) }
+		.fn_u = { .xts = serpent_xts_dec_16way }
 	}, {
 		.num_blocks = 8,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_dec_8way_avx) }
+		.fn_u = { .xts = serpent_xts_dec_8way_avx }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_dec) }
+		.fn_u = { .xts = serpent_xts_dec }
 	} }
 };
 
@@ -146,8 +144,7 @@ static int ecb_decrypt(struct skcipher_request *req)
 
 static int cbc_encrypt(struct skcipher_request *req)
 {
-	return glue_cbc_encrypt_req_128bit(GLUE_FUNC_CAST(__serpent_encrypt),
-					   req);
+	return glue_cbc_encrypt_req_128bit(__serpent_encrypt, req);
 }
 
 static int cbc_decrypt(struct skcipher_request *req)
@@ -166,8 +163,8 @@ static int xts_encrypt(struct skcipher_request *req)
 	struct serpent_xts_ctx *ctx = crypto_skcipher_ctx(tfm);
 
 	return glue_xts_req_128bit(&serpent_enc_xts, req,
-				   XTS_TWEAK_CAST(__serpent_encrypt),
-				   &ctx->tweak_ctx, &ctx->crypt_ctx, false);
+				   __serpent_encrypt, &ctx->tweak_ctx,
+				   &ctx->crypt_ctx, false);
 }
 
 static int xts_decrypt(struct skcipher_request *req)
@@ -176,8 +173,8 @@ static int xts_decrypt(struct skcipher_request *req)
 	struct serpent_xts_ctx *ctx = crypto_skcipher_ctx(tfm);
 
 	return glue_xts_req_128bit(&serpent_dec_xts, req,
-				   XTS_TWEAK_CAST(__serpent_encrypt),
-				   &ctx->tweak_ctx, &ctx->crypt_ctx, true);
+				   __serpent_encrypt, &ctx->tweak_ctx,
+				   &ctx->crypt_ctx, true);
 }
 
 static struct skcipher_alg serpent_algs[] = {
diff --git a/arch/x86/crypto/serpent_avx_glue.c b/arch/x86/crypto/serpent_avx_glue.c
index 7d3dca3..7806d1c 100644
--- a/arch/x86/crypto/serpent_avx_glue.c
+++ b/arch/x86/crypto/serpent_avx_glue.c
@@ -20,33 +20,35 @@
 #include <asm/crypto/serpent-avx.h>
 
 /* 8-way parallel cipher functions */
-asmlinkage void serpent_ecb_enc_8way_avx(struct serpent_ctx *ctx, u8 *dst,
+asmlinkage void serpent_ecb_enc_8way_avx(const void *ctx, u8 *dst,
 					 const u8 *src);
 EXPORT_SYMBOL_GPL(serpent_ecb_enc_8way_avx);
 
-asmlinkage void serpent_ecb_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst,
+asmlinkage void serpent_ecb_dec_8way_avx(const void *ctx, u8 *dst,
 					 const u8 *src);
 EXPORT_SYMBOL_GPL(serpent_ecb_dec_8way_avx);
 
-asmlinkage void serpent_cbc_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst,
+asmlinkage void serpent_cbc_dec_8way_avx(const void *ctx, u8 *dst,
 					 const u8 *src);
 EXPORT_SYMBOL_GPL(serpent_cbc_dec_8way_avx);
 
-asmlinkage void serpent_ctr_8way_avx(struct serpent_ctx *ctx, u8 *dst,
-				     const u8 *src, le128 *iv);
+asmlinkage void serpent_ctr_8way_avx(const void *ctx, u8 *dst, const u8 *src,
+				     le128 *iv);
 EXPORT_SYMBOL_GPL(serpent_ctr_8way_avx);
 
-asmlinkage void serpent_xts_enc_8way_avx(struct serpent_ctx *ctx, u8 *dst,
+asmlinkage void serpent_xts_enc_8way_avx(const void *ctx, u8 *dst,
 					 const u8 *src, le128 *iv);
 EXPORT_SYMBOL_GPL(serpent_xts_enc_8way_avx);
 
-asmlinkage void serpent_xts_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst,
+asmlinkage void serpent_xts_dec_8way_avx(const void *ctx, u8 *dst,
 					 const u8 *src, le128 *iv);
 EXPORT_SYMBOL_GPL(serpent_xts_dec_8way_avx);
 
-void __serpent_crypt_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+void __serpent_crypt_ctr(const void *ctx, u8 *d, const u8 *s, le128 *iv)
 {
 	be128 ctrblk;
+	u128 *dst = (u128 *)d;
+	const u128 *src = (const u128 *)s;
 
 	le128_to_be128(&ctrblk, iv);
 	le128_inc(iv);
@@ -56,17 +58,15 @@ void __serpent_crypt_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv)
 }
 EXPORT_SYMBOL_GPL(__serpent_crypt_ctr);
 
-void serpent_xts_enc(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+void serpent_xts_enc(const void *ctx, u8 *dst, const u8 *src, le128 *iv)
 {
-	glue_xts_crypt_128bit_one(ctx, dst, src, iv,
-				  GLUE_FUNC_CAST(__serpent_encrypt));
+	glue_xts_crypt_128bit_one(ctx, dst, src, iv, __serpent_encrypt);
 }
 EXPORT_SYMBOL_GPL(serpent_xts_enc);
 
-void serpent_xts_dec(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+void serpent_xts_dec(const void *ctx, u8 *dst, const u8 *src, le128 *iv)
 {
-	glue_xts_crypt_128bit_one(ctx, dst, src, iv,
-				  GLUE_FUNC_CAST(__serpent_decrypt));
+	glue_xts_crypt_128bit_one(ctx, dst, src, iv, __serpent_decrypt);
 }
 EXPORT_SYMBOL_GPL(serpent_xts_dec);
 
@@ -102,10 +102,10 @@ static const struct common_glue_ctx serpent_enc = {
 
 	.funcs = { {
 		.num_blocks = SERPENT_PARALLEL_BLOCKS,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(serpent_ecb_enc_8way_avx) }
+		.fn_u = { .ecb = serpent_ecb_enc_8way_avx }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(__serpent_encrypt) }
+		.fn_u = { .ecb = __serpent_encrypt }
 	} }
 };
 
@@ -115,10 +115,10 @@ static const struct common_glue_ctx serpent_ctr = {
 
 	.funcs = { {
 		.num_blocks = SERPENT_PARALLEL_BLOCKS,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(serpent_ctr_8way_avx) }
+		.fn_u = { .ctr = serpent_ctr_8way_avx }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(__serpent_crypt_ctr) }
+		.fn_u = { .ctr = __serpent_crypt_ctr }
 	} }
 };
 
@@ -128,10 +128,10 @@ static const struct common_glue_ctx serpent_enc_xts = {
 
 	.funcs = { {
 		.num_blocks = SERPENT_PARALLEL_BLOCKS,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_enc_8way_avx) }
+		.fn_u = { .xts = serpent_xts_enc_8way_avx }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_enc) }
+		.fn_u = { .xts = serpent_xts_enc }
 	} }
 };
 
@@ -141,10 +141,10 @@ static const struct common_glue_ctx serpent_dec = {
 
 	.funcs = { {
 		.num_blocks = SERPENT_PARALLEL_BLOCKS,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(serpent_ecb_dec_8way_avx) }
+		.fn_u = { .ecb = serpent_ecb_dec_8way_avx }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(__serpent_decrypt) }
+		.fn_u = { .ecb = __serpent_decrypt }
 	} }
 };
 
@@ -154,10 +154,10 @@ static const struct common_glue_ctx serpent_dec_cbc = {
 
 	.funcs = { {
 		.num_blocks = SERPENT_PARALLEL_BLOCKS,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(serpent_cbc_dec_8way_avx) }
+		.fn_u = { .cbc = serpent_cbc_dec_8way_avx }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(__serpent_decrypt) }
+		.fn_u = { .cbc = __serpent_decrypt }
 	} }
 };
 
@@ -167,10 +167,10 @@ static const struct common_glue_ctx serpent_dec_xts = {
 
 	.funcs = { {
 		.num_blocks = SERPENT_PARALLEL_BLOCKS,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_dec_8way_avx) }
+		.fn_u = { .xts = serpent_xts_dec_8way_avx }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_dec) }
+		.fn_u = { .xts = serpent_xts_dec }
 	} }
 };
 
@@ -186,8 +186,7 @@ static int ecb_decrypt(struct skcipher_request *req)
 
 static int cbc_encrypt(struct skcipher_request *req)
 {
-	return glue_cbc_encrypt_req_128bit(GLUE_FUNC_CAST(__serpent_encrypt),
-					   req);
+	return glue_cbc_encrypt_req_128bit(__serpent_encrypt, req);
 }
 
 static int cbc_decrypt(struct skcipher_request *req)
@@ -206,8 +205,8 @@ static int xts_encrypt(struct skcipher_request *req)
 	struct serpent_xts_ctx *ctx = crypto_skcipher_ctx(tfm);
 
 	return glue_xts_req_128bit(&serpent_enc_xts, req,
-				   XTS_TWEAK_CAST(__serpent_encrypt),
-				   &ctx->tweak_ctx, &ctx->crypt_ctx, false);
+				   __serpent_encrypt, &ctx->tweak_ctx,
+				   &ctx->crypt_ctx, false);
 }
 
 static int xts_decrypt(struct skcipher_request *req)
@@ -216,8 +215,8 @@ static int xts_decrypt(struct skcipher_request *req)
 	struct serpent_xts_ctx *ctx = crypto_skcipher_ctx(tfm);
 
 	return glue_xts_req_128bit(&serpent_dec_xts, req,
-				   XTS_TWEAK_CAST(__serpent_encrypt),
-				   &ctx->tweak_ctx, &ctx->crypt_ctx, true);
+				   __serpent_encrypt, &ctx->tweak_ctx,
+				   &ctx->crypt_ctx, true);
 }
 
 static struct skcipher_alg serpent_algs[] = {
diff --git a/arch/x86/crypto/serpent_sse2_glue.c b/arch/x86/crypto/serpent_sse2_glue.c
index 5fdf1931..4fed8d2 100644
--- a/arch/x86/crypto/serpent_sse2_glue.c
+++ b/arch/x86/crypto/serpent_sse2_glue.c
@@ -31,9 +31,11 @@ static int serpent_setkey_skcipher(struct crypto_skcipher *tfm,
 	return __serpent_setkey(crypto_skcipher_ctx(tfm), key, keylen);
 }
 
-static void serpent_decrypt_cbc_xway(void *ctx, u128 *dst, const u128 *src)
+static void serpent_decrypt_cbc_xway(const void *ctx, u8 *d, const u8 *s)
 {
 	u128 ivs[SERPENT_PARALLEL_BLOCKS - 1];
+	u128 *dst = (u128 *)d;
+	const u128 *src = (const u128 *)s;
 	unsigned int j;
 
 	for (j = 0; j < SERPENT_PARALLEL_BLOCKS - 1; j++)
@@ -45,9 +47,11 @@ static void serpent_decrypt_cbc_xway(void *ctx, u128 *dst, const u128 *src)
 		u128_xor(dst + (j + 1), dst + (j + 1), ivs + j);
 }
 
-static void serpent_crypt_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+static void serpent_crypt_ctr(const void *ctx, u8 *d, const u8 *s, le128 *iv)
 {
 	be128 ctrblk;
+	u128 *dst = (u128 *)d;
+	const u128 *src = (const u128 *)s;
 
 	le128_to_be128(&ctrblk, iv);
 	le128_inc(iv);
@@ -56,10 +60,12 @@ static void serpent_crypt_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv)
 	u128_xor(dst, src, (u128 *)&ctrblk);
 }
 
-static void serpent_crypt_ctr_xway(void *ctx, u128 *dst, const u128 *src,
+static void serpent_crypt_ctr_xway(const void *ctx, u8 *d, const u8 *s,
 				   le128 *iv)
 {
 	be128 ctrblks[SERPENT_PARALLEL_BLOCKS];
+	u128 *dst = (u128 *)d;
+	const u128 *src = (const u128 *)s;
 	unsigned int i;
 
 	for (i = 0; i < SERPENT_PARALLEL_BLOCKS; i++) {
@@ -79,10 +85,10 @@ static const struct common_glue_ctx serpent_enc = {
 
 	.funcs = { {
 		.num_blocks = SERPENT_PARALLEL_BLOCKS,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(serpent_enc_blk_xway) }
+		.fn_u = { .ecb = serpent_enc_blk_xway }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(__serpent_encrypt) }
+		.fn_u = { .ecb = __serpent_encrypt }
 	} }
 };
 
@@ -92,10 +98,10 @@ static const struct common_glue_ctx serpent_ctr = {
 
 	.funcs = { {
 		.num_blocks = SERPENT_PARALLEL_BLOCKS,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(serpent_crypt_ctr_xway) }
+		.fn_u = { .ctr = serpent_crypt_ctr_xway }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(serpent_crypt_ctr) }
+		.fn_u = { .ctr = serpent_crypt_ctr }
 	} }
 };
 
@@ -105,10 +111,10 @@ static const struct common_glue_ctx serpent_dec = {
 
 	.funcs = { {
 		.num_blocks = SERPENT_PARALLEL_BLOCKS,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(serpent_dec_blk_xway) }
+		.fn_u = { .ecb = serpent_dec_blk_xway }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(__serpent_decrypt) }
+		.fn_u = { .ecb = __serpent_decrypt }
 	} }
 };
 
@@ -118,10 +124,10 @@ static const struct common_glue_ctx serpent_dec_cbc = {
 
 	.funcs = { {
 		.num_blocks = SERPENT_PARALLEL_BLOCKS,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(serpent_decrypt_cbc_xway) }
+		.fn_u = { .cbc = serpent_decrypt_cbc_xway }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(__serpent_decrypt) }
+		.fn_u = { .cbc = __serpent_decrypt }
 	} }
 };
 
@@ -137,7 +143,7 @@ static int ecb_decrypt(struct skcipher_request *req)
 
 static int cbc_encrypt(struct skcipher_request *req)
 {
-	return glue_cbc_encrypt_req_128bit(GLUE_FUNC_CAST(__serpent_encrypt),
+	return glue_cbc_encrypt_req_128bit(__serpent_encrypt,
 					   req);
 }
 
diff --git a/arch/x86/crypto/sha1_avx2_x86_64_asm.S b/arch/x86/crypto/sha1_avx2_x86_64_asm.S
index 9f712a7..7e578fa 100644
--- a/arch/x86/crypto/sha1_avx2_x86_64_asm.S
+++ b/arch/x86/crypto/sha1_avx2_x86_64_asm.S
@@ -62,11 +62,11 @@
  *Visit http://software.intel.com/en-us/articles/
  *and refer to improving-the-performance-of-the-secure-hash-algorithm-1/
  *
- *Updates 20-byte SHA-1 record in 'hash' for even number of
- *'num_blocks' consecutive 64-byte blocks
+ *Updates 20-byte SHA-1 record at start of 'state', from 'input', for
+ *even number of 'blocks' consecutive 64-byte blocks.
  *
  *extern "C" void sha1_transform_avx2(
- *	int *hash, const char* input, size_t num_blocks );
+ *	struct sha1_state *state, const u8* input, int blocks );
  */
 
 #include <linux/linkage.h>
diff --git a/arch/x86/crypto/sha1_ssse3_asm.S b/arch/x86/crypto/sha1_ssse3_asm.S
index 99c5b8c..031e271 100644
--- a/arch/x86/crypto/sha1_ssse3_asm.S
+++ b/arch/x86/crypto/sha1_ssse3_asm.S
@@ -457,9 +457,13 @@
 	movdqu	\a,\b
 .endm
 
-/* SSSE3 optimized implementation:
- *  extern "C" void sha1_transform_ssse3(u32 *digest, const char *data, u32 *ws,
- *                                       unsigned int rounds);
+/*
+ * SSSE3 optimized implementation:
+ *
+ * extern "C" void sha1_transform_ssse3(struct sha1_state *state,
+ *					const u8 *data, int blocks);
+ *
+ * Note that struct sha1_state is assumed to begin with u32 state[5].
  */
 SHA1_VECTOR_ASM     sha1_transform_ssse3
 
@@ -545,8 +549,8 @@
 
 
 /* AVX optimized implementation:
- *  extern "C" void sha1_transform_avx(u32 *digest, const char *data, u32 *ws,
- *                                     unsigned int rounds);
+ *  extern "C" void sha1_transform_avx(struct sha1_state *state,
+ *				       const u8 *data, int blocks);
  */
 SHA1_VECTOR_ASM     sha1_transform_avx
 
diff --git a/arch/x86/crypto/sha1_ssse3_glue.c b/arch/x86/crypto/sha1_ssse3_glue.c
index 639d4c2..d70b40a 100644
--- a/arch/x86/crypto/sha1_ssse3_glue.c
+++ b/arch/x86/crypto/sha1_ssse3_glue.c
@@ -27,11 +27,8 @@
 #include <crypto/sha1_base.h>
 #include <asm/simd.h>
 
-typedef void (sha1_transform_fn)(u32 *digest, const char *data,
-				unsigned int rounds);
-
 static int sha1_update(struct shash_desc *desc, const u8 *data,
-			     unsigned int len, sha1_transform_fn *sha1_xform)
+			     unsigned int len, sha1_block_fn *sha1_xform)
 {
 	struct sha1_state *sctx = shash_desc_ctx(desc);
 
@@ -39,48 +36,47 @@ static int sha1_update(struct shash_desc *desc, const u8 *data,
 	    (sctx->count % SHA1_BLOCK_SIZE) + len < SHA1_BLOCK_SIZE)
 		return crypto_sha1_update(desc, data, len);
 
-	/* make sure casting to sha1_block_fn() is safe */
+	/*
+	 * Make sure struct sha1_state begins directly with the SHA1
+	 * 160-bit internal state, as this is what the asm functions expect.
+	 */
 	BUILD_BUG_ON(offsetof(struct sha1_state, state) != 0);
 
 	kernel_fpu_begin();
-	sha1_base_do_update(desc, data, len,
-			    (sha1_block_fn *)sha1_xform);
+	sha1_base_do_update(desc, data, len, sha1_xform);
 	kernel_fpu_end();
 
 	return 0;
 }
 
 static int sha1_finup(struct shash_desc *desc, const u8 *data,
-		      unsigned int len, u8 *out, sha1_transform_fn *sha1_xform)
+		      unsigned int len, u8 *out, sha1_block_fn *sha1_xform)
 {
 	if (!crypto_simd_usable())
 		return crypto_sha1_finup(desc, data, len, out);
 
 	kernel_fpu_begin();
 	if (len)
-		sha1_base_do_update(desc, data, len,
-				    (sha1_block_fn *)sha1_xform);
-	sha1_base_do_finalize(desc, (sha1_block_fn *)sha1_xform);
+		sha1_base_do_update(desc, data, len, sha1_xform);
+	sha1_base_do_finalize(desc, sha1_xform);
 	kernel_fpu_end();
 
 	return sha1_base_finish(desc, out);
 }
 
-asmlinkage void sha1_transform_ssse3(u32 *digest, const char *data,
-				     unsigned int rounds);
+asmlinkage void sha1_transform_ssse3(struct sha1_state *state,
+				     const u8 *data, int blocks);
 
 static int sha1_ssse3_update(struct shash_desc *desc, const u8 *data,
 			     unsigned int len)
 {
-	return sha1_update(desc, data, len,
-			(sha1_transform_fn *) sha1_transform_ssse3);
+	return sha1_update(desc, data, len, sha1_transform_ssse3);
 }
 
 static int sha1_ssse3_finup(struct shash_desc *desc, const u8 *data,
 			      unsigned int len, u8 *out)
 {
-	return sha1_finup(desc, data, len, out,
-			(sha1_transform_fn *) sha1_transform_ssse3);
+	return sha1_finup(desc, data, len, out, sha1_transform_ssse3);
 }
 
 /* Add padding and return the message digest. */
@@ -119,21 +115,19 @@ static void unregister_sha1_ssse3(void)
 }
 
 #ifdef CONFIG_AS_AVX
-asmlinkage void sha1_transform_avx(u32 *digest, const char *data,
-				   unsigned int rounds);
+asmlinkage void sha1_transform_avx(struct sha1_state *state,
+				   const u8 *data, int blocks);
 
 static int sha1_avx_update(struct shash_desc *desc, const u8 *data,
 			     unsigned int len)
 {
-	return sha1_update(desc, data, len,
-			(sha1_transform_fn *) sha1_transform_avx);
+	return sha1_update(desc, data, len, sha1_transform_avx);
 }
 
 static int sha1_avx_finup(struct shash_desc *desc, const u8 *data,
 			      unsigned int len, u8 *out)
 {
-	return sha1_finup(desc, data, len, out,
-			(sha1_transform_fn *) sha1_transform_avx);
+	return sha1_finup(desc, data, len, out, sha1_transform_avx);
 }
 
 static int sha1_avx_final(struct shash_desc *desc, u8 *out)
@@ -190,8 +184,8 @@ static inline void unregister_sha1_avx(void) { }
 #if defined(CONFIG_AS_AVX2) && (CONFIG_AS_AVX)
 #define SHA1_AVX2_BLOCK_OPTSIZE	4	/* optimal 4*64 bytes of SHA1 blocks */
 
-asmlinkage void sha1_transform_avx2(u32 *digest, const char *data,
-				    unsigned int rounds);
+asmlinkage void sha1_transform_avx2(struct sha1_state *state,
+				    const u8 *data, int blocks);
 
 static bool avx2_usable(void)
 {
@@ -203,28 +197,26 @@ static bool avx2_usable(void)
 	return false;
 }
 
-static void sha1_apply_transform_avx2(u32 *digest, const char *data,
-				unsigned int rounds)
+static void sha1_apply_transform_avx2(struct sha1_state *state,
+				      const u8 *data, int blocks)
 {
 	/* Select the optimal transform based on data block size */
-	if (rounds >= SHA1_AVX2_BLOCK_OPTSIZE)
-		sha1_transform_avx2(digest, data, rounds);
+	if (blocks >= SHA1_AVX2_BLOCK_OPTSIZE)
+		sha1_transform_avx2(state, data, blocks);
 	else
-		sha1_transform_avx(digest, data, rounds);
+		sha1_transform_avx(state, data, blocks);
 }
 
 static int sha1_avx2_update(struct shash_desc *desc, const u8 *data,
 			     unsigned int len)
 {
-	return sha1_update(desc, data, len,
-		(sha1_transform_fn *) sha1_apply_transform_avx2);
+	return sha1_update(desc, data, len, sha1_apply_transform_avx2);
 }
 
 static int sha1_avx2_finup(struct shash_desc *desc, const u8 *data,
 			      unsigned int len, u8 *out)
 {
-	return sha1_finup(desc, data, len, out,
-		(sha1_transform_fn *) sha1_apply_transform_avx2);
+	return sha1_finup(desc, data, len, out, sha1_apply_transform_avx2);
 }
 
 static int sha1_avx2_final(struct shash_desc *desc, u8 *out)
@@ -267,21 +259,19 @@ static inline void unregister_sha1_avx2(void) { }
 #endif
 
 #ifdef CONFIG_AS_SHA1_NI
-asmlinkage void sha1_ni_transform(u32 *digest, const char *data,
-				   unsigned int rounds);
+asmlinkage void sha1_ni_transform(struct sha1_state *digest, const u8 *data,
+				  int rounds);
 
 static int sha1_ni_update(struct shash_desc *desc, const u8 *data,
 			     unsigned int len)
 {
-	return sha1_update(desc, data, len,
-		(sha1_transform_fn *) sha1_ni_transform);
+	return sha1_update(desc, data, len, sha1_ni_transform);
 }
 
 static int sha1_ni_finup(struct shash_desc *desc, const u8 *data,
 			      unsigned int len, u8 *out)
 {
-	return sha1_finup(desc, data, len, out,
-		(sha1_transform_fn *) sha1_ni_transform);
+	return sha1_finup(desc, data, len, out, sha1_ni_transform);
 }
 
 static int sha1_ni_final(struct shash_desc *desc, u8 *out)
diff --git a/arch/x86/crypto/sha256-avx-asm.S b/arch/x86/crypto/sha256-avx-asm.S
index 001bbcf..b6e037e 100644
--- a/arch/x86/crypto/sha256-avx-asm.S
+++ b/arch/x86/crypto/sha256-avx-asm.S
@@ -341,8 +341,8 @@
 .endm
 
 ########################################################################
-## void sha256_transform_avx(void *input_data, UINT32 digest[8], UINT64 num_blks)
-## arg 1 : pointer to digest
+## void sha256_transform_avx(state sha256_state *state, const u8 *data, int blocks)
+## arg 1 : pointer to state
 ## arg 2 : pointer to input data
 ## arg 3 : Num blocks
 ########################################################################
diff --git a/arch/x86/crypto/sha256-avx2-asm.S b/arch/x86/crypto/sha256-avx2-asm.S
index 1420db1..2e6ebc9 100644
--- a/arch/x86/crypto/sha256-avx2-asm.S
+++ b/arch/x86/crypto/sha256-avx2-asm.S
@@ -520,8 +520,8 @@
 .endm
 
 ########################################################################
-## void sha256_transform_rorx(void *input_data, UINT32 digest[8], UINT64 num_blks)
-## arg 1 : pointer to digest
+## void sha256_transform_rorx(struct sha256_state *state, const u8 *data, int blocks)
+## arg 1 : pointer to state
 ## arg 2 : pointer to input data
 ## arg 3 : Num blocks
 ########################################################################
diff --git a/arch/x86/crypto/sha256-ssse3-asm.S b/arch/x86/crypto/sha256-ssse3-asm.S
index c6c05ed..ab7d9f0 100644
--- a/arch/x86/crypto/sha256-ssse3-asm.S
+++ b/arch/x86/crypto/sha256-ssse3-asm.S
@@ -347,8 +347,10 @@
 .endm
 
 ########################################################################
-## void sha256_transform_ssse3(void *input_data, UINT32 digest[8], UINT64 num_blks)
-## arg 1 : pointer to digest
+## void sha256_transform_ssse3(struct sha256_state *state, const u8 *data,
+##			       int blocks);
+## arg 1 : pointer to state
+##	   (struct sha256_state is assumed to begin with u32 state[8])
 ## arg 2 : pointer to input data
 ## arg 3 : Num blocks
 ########################################################################
diff --git a/arch/x86/crypto/sha256_ssse3_glue.c b/arch/x86/crypto/sha256_ssse3_glue.c
index f9aff31f..03ad657 100644
--- a/arch/x86/crypto/sha256_ssse3_glue.c
+++ b/arch/x86/crypto/sha256_ssse3_glue.c
@@ -41,12 +41,11 @@
 #include <linux/string.h>
 #include <asm/simd.h>
 
-asmlinkage void sha256_transform_ssse3(u32 *digest, const char *data,
-				       u64 rounds);
-typedef void (sha256_transform_fn)(u32 *digest, const char *data, u64 rounds);
+asmlinkage void sha256_transform_ssse3(struct sha256_state *state,
+				       const u8 *data, int blocks);
 
 static int _sha256_update(struct shash_desc *desc, const u8 *data,
-			  unsigned int len, sha256_transform_fn *sha256_xform)
+			  unsigned int len, sha256_block_fn *sha256_xform)
 {
 	struct sha256_state *sctx = shash_desc_ctx(desc);
 
@@ -54,28 +53,29 @@ static int _sha256_update(struct shash_desc *desc, const u8 *data,
 	    (sctx->count % SHA256_BLOCK_SIZE) + len < SHA256_BLOCK_SIZE)
 		return crypto_sha256_update(desc, data, len);
 
-	/* make sure casting to sha256_block_fn() is safe */
+	/*
+	 * Make sure struct sha256_state begins directly with the SHA256
+	 * 256-bit internal state, as this is what the asm functions expect.
+	 */
 	BUILD_BUG_ON(offsetof(struct sha256_state, state) != 0);
 
 	kernel_fpu_begin();
-	sha256_base_do_update(desc, data, len,
-			      (sha256_block_fn *)sha256_xform);
+	sha256_base_do_update(desc, data, len, sha256_xform);
 	kernel_fpu_end();
 
 	return 0;
 }
 
 static int sha256_finup(struct shash_desc *desc, const u8 *data,
-	      unsigned int len, u8 *out, sha256_transform_fn *sha256_xform)
+	      unsigned int len, u8 *out, sha256_block_fn *sha256_xform)
 {
 	if (!crypto_simd_usable())
 		return crypto_sha256_finup(desc, data, len, out);
 
 	kernel_fpu_begin();
 	if (len)
-		sha256_base_do_update(desc, data, len,
-				      (sha256_block_fn *)sha256_xform);
-	sha256_base_do_finalize(desc, (sha256_block_fn *)sha256_xform);
+		sha256_base_do_update(desc, data, len, sha256_xform);
+	sha256_base_do_finalize(desc, sha256_xform);
 	kernel_fpu_end();
 
 	return sha256_base_finish(desc, out);
@@ -145,8 +145,8 @@ static void unregister_sha256_ssse3(void)
 }
 
 #ifdef CONFIG_AS_AVX
-asmlinkage void sha256_transform_avx(u32 *digest, const char *data,
-				     u64 rounds);
+asmlinkage void sha256_transform_avx(struct sha256_state *state,
+				     const u8 *data, int blocks);
 
 static int sha256_avx_update(struct shash_desc *desc, const u8 *data,
 			 unsigned int len)
@@ -227,8 +227,8 @@ static inline void unregister_sha256_avx(void) { }
 #endif
 
 #if defined(CONFIG_AS_AVX2) && defined(CONFIG_AS_AVX)
-asmlinkage void sha256_transform_rorx(u32 *digest, const char *data,
-				      u64 rounds);
+asmlinkage void sha256_transform_rorx(struct sha256_state *state,
+				      const u8 *data, int blocks);
 
 static int sha256_avx2_update(struct shash_desc *desc, const u8 *data,
 			 unsigned int len)
@@ -307,8 +307,8 @@ static inline void unregister_sha256_avx2(void) { }
 #endif
 
 #ifdef CONFIG_AS_SHA256_NI
-asmlinkage void sha256_ni_transform(u32 *digest, const char *data,
-				   u64 rounds); /*unsigned int rounds);*/
+asmlinkage void sha256_ni_transform(struct sha256_state *digest,
+				    const u8 *data, int rounds);
 
 static int sha256_ni_update(struct shash_desc *desc, const u8 *data,
 			 unsigned int len)
diff --git a/arch/x86/crypto/sha512-avx-asm.S b/arch/x86/crypto/sha512-avx-asm.S
index 39235fe..8f6fe09 100644
--- a/arch/x86/crypto/sha512-avx-asm.S
+++ b/arch/x86/crypto/sha512-avx-asm.S
@@ -271,11 +271,12 @@
 .endm
 
 ########################################################################
-# void sha512_transform_avx(void* D, const void* M, u64 L)
-# Purpose: Updates the SHA512 digest stored at D with the message stored in M.
-# The size of the message pointed to by M must be an integer multiple of SHA512
-# message blocks.
-# L is the message length in SHA512 blocks
+# void sha512_transform_avx(sha512_state *state, const u8 *data, int blocks)
+# Purpose: Updates the SHA512 digest stored at "state" with the message
+# stored in "data".
+# The size of the message pointed to by "data" must be an integer multiple
+# of SHA512 message blocks.
+# "blocks" is the message length in SHA512 blocks
 ########################################################################
 ENTRY(sha512_transform_avx)
 	cmp $0, msglen
diff --git a/arch/x86/crypto/sha512-avx2-asm.S b/arch/x86/crypto/sha512-avx2-asm.S
index b16d560..43d4d64 100644
--- a/arch/x86/crypto/sha512-avx2-asm.S
+++ b/arch/x86/crypto/sha512-avx2-asm.S
@@ -563,11 +563,12 @@
 .endm
 
 ########################################################################
-# void sha512_transform_rorx(void* D, const void* M, uint64_t L)#
-# Purpose: Updates the SHA512 digest stored at D with the message stored in M.
-# The size of the message pointed to by M must be an integer multiple of SHA512
-#   message blocks.
-# L is the message length in SHA512 blocks
+# void sha512_transform_rorx(sha512_state *state, const u8 *data, int blocks)
+# Purpose: Updates the SHA512 digest stored at "state" with the message
+# stored in "data".
+# The size of the message pointed to by "data" must be an integer multiple
+# of SHA512 message blocks.
+# "blocks" is the message length in SHA512 blocks
 ########################################################################
 ENTRY(sha512_transform_rorx)
 	# Allocate Stack Space
diff --git a/arch/x86/crypto/sha512-ssse3-asm.S b/arch/x86/crypto/sha512-ssse3-asm.S
index 66bbd90..46da903 100644
--- a/arch/x86/crypto/sha512-ssse3-asm.S
+++ b/arch/x86/crypto/sha512-ssse3-asm.S
@@ -269,11 +269,14 @@
 .endm
 
 ########################################################################
-# void sha512_transform_ssse3(void* D, const void* M, u64 L)#
-# Purpose: Updates the SHA512 digest stored at D with the message stored in M.
-# The size of the message pointed to by M must be an integer multiple of SHA512
-#   message blocks.
-# L is the message length in SHA512 blocks.
+## void sha512_transform_ssse3(struct sha512_state *state, const u8 *data,
+##			       int blocks);
+# (struct sha512_state is assumed to begin with u64 state[8])
+# Purpose: Updates the SHA512 digest stored at "state" with the message
+# stored in "data".
+# The size of the message pointed to by "data" must be an integer multiple
+# of SHA512 message blocks.
+# "blocks" is the message length in SHA512 blocks.
 ########################################################################
 ENTRY(sha512_transform_ssse3)
 
diff --git a/arch/x86/crypto/sha512_ssse3_glue.c b/arch/x86/crypto/sha512_ssse3_glue.c
index 458356a..1c444f4 100644
--- a/arch/x86/crypto/sha512_ssse3_glue.c
+++ b/arch/x86/crypto/sha512_ssse3_glue.c
@@ -39,13 +39,11 @@
 #include <crypto/sha512_base.h>
 #include <asm/simd.h>
 
-asmlinkage void sha512_transform_ssse3(u64 *digest, const char *data,
-				       u64 rounds);
-
-typedef void (sha512_transform_fn)(u64 *digest, const char *data, u64 rounds);
+asmlinkage void sha512_transform_ssse3(struct sha512_state *state,
+				       const u8 *data, int blocks);
 
 static int sha512_update(struct shash_desc *desc, const u8 *data,
-		       unsigned int len, sha512_transform_fn *sha512_xform)
+		       unsigned int len, sha512_block_fn *sha512_xform)
 {
 	struct sha512_state *sctx = shash_desc_ctx(desc);
 
@@ -53,28 +51,29 @@ static int sha512_update(struct shash_desc *desc, const u8 *data,
 	    (sctx->count[0] % SHA512_BLOCK_SIZE) + len < SHA512_BLOCK_SIZE)
 		return crypto_sha512_update(desc, data, len);
 
-	/* make sure casting to sha512_block_fn() is safe */
+	/*
+	 * Make sure struct sha512_state begins directly with the SHA512
+	 * 512-bit internal state, as this is what the asm functions expect.
+	 */
 	BUILD_BUG_ON(offsetof(struct sha512_state, state) != 0);
 
 	kernel_fpu_begin();
-	sha512_base_do_update(desc, data, len,
-			      (sha512_block_fn *)sha512_xform);
+	sha512_base_do_update(desc, data, len, sha512_xform);
 	kernel_fpu_end();
 
 	return 0;
 }
 
 static int sha512_finup(struct shash_desc *desc, const u8 *data,
-	      unsigned int len, u8 *out, sha512_transform_fn *sha512_xform)
+	      unsigned int len, u8 *out, sha512_block_fn *sha512_xform)
 {
 	if (!crypto_simd_usable())
 		return crypto_sha512_finup(desc, data, len, out);
 
 	kernel_fpu_begin();
 	if (len)
-		sha512_base_do_update(desc, data, len,
-				      (sha512_block_fn *)sha512_xform);
-	sha512_base_do_finalize(desc, (sha512_block_fn *)sha512_xform);
+		sha512_base_do_update(desc, data, len, sha512_xform);
+	sha512_base_do_finalize(desc, sha512_xform);
 	kernel_fpu_end();
 
 	return sha512_base_finish(desc, out);
@@ -144,8 +143,8 @@ static void unregister_sha512_ssse3(void)
 }
 
 #ifdef CONFIG_AS_AVX
-asmlinkage void sha512_transform_avx(u64 *digest, const char *data,
-				     u64 rounds);
+asmlinkage void sha512_transform_avx(struct sha512_state *state,
+				     const u8 *data, int blocks);
 static bool avx_usable(void)
 {
 	if (!cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM, NULL)) {
@@ -225,8 +224,8 @@ static inline void unregister_sha512_avx(void) { }
 #endif
 
 #if defined(CONFIG_AS_AVX2) && defined(CONFIG_AS_AVX)
-asmlinkage void sha512_transform_rorx(u64 *digest, const char *data,
-				      u64 rounds);
+asmlinkage void sha512_transform_rorx(struct sha512_state *state,
+				      const u8 *data, int blocks);
 
 static int sha512_avx2_update(struct shash_desc *desc, const u8 *data,
 		       unsigned int len)
diff --git a/arch/x86/crypto/twofish_avx_glue.c b/arch/x86/crypto/twofish_avx_glue.c
index d561c82..3b36e97 100644
--- a/arch/x86/crypto/twofish_avx_glue.c
+++ b/arch/x86/crypto/twofish_avx_glue.c
@@ -22,20 +22,17 @@
 #define TWOFISH_PARALLEL_BLOCKS 8
 
 /* 8-way parallel cipher functions */
-asmlinkage void twofish_ecb_enc_8way(struct twofish_ctx *ctx, u8 *dst,
-				     const u8 *src);
-asmlinkage void twofish_ecb_dec_8way(struct twofish_ctx *ctx, u8 *dst,
-				     const u8 *src);
+asmlinkage void twofish_ecb_enc_8way(const void *ctx, u8 *dst, const u8 *src);
+asmlinkage void twofish_ecb_dec_8way(const void *ctx, u8 *dst, const u8 *src);
 
-asmlinkage void twofish_cbc_dec_8way(struct twofish_ctx *ctx, u8 *dst,
-				     const u8 *src);
-asmlinkage void twofish_ctr_8way(struct twofish_ctx *ctx, u8 *dst,
-				 const u8 *src, le128 *iv);
+asmlinkage void twofish_cbc_dec_8way(const void *ctx, u8 *dst, const u8 *src);
+asmlinkage void twofish_ctr_8way(const void *ctx, u8 *dst, const u8 *src,
+				 le128 *iv);
 
-asmlinkage void twofish_xts_enc_8way(struct twofish_ctx *ctx, u8 *dst,
-				     const u8 *src, le128 *iv);
-asmlinkage void twofish_xts_dec_8way(struct twofish_ctx *ctx, u8 *dst,
-				     const u8 *src, le128 *iv);
+asmlinkage void twofish_xts_enc_8way(const void *ctx, u8 *dst, const u8 *src,
+				     le128 *iv);
+asmlinkage void twofish_xts_dec_8way(const void *ctx, u8 *dst, const u8 *src,
+				     le128 *iv);
 
 static int twofish_setkey_skcipher(struct crypto_skcipher *tfm,
 				   const u8 *key, unsigned int keylen)
@@ -43,22 +40,19 @@ static int twofish_setkey_skcipher(struct crypto_skcipher *tfm,
 	return twofish_setkey(&tfm->base, key, keylen);
 }
 
-static inline void twofish_enc_blk_3way(struct twofish_ctx *ctx, u8 *dst,
-					const u8 *src)
+static inline void twofish_enc_blk_3way(const void *ctx, u8 *dst, const u8 *src)
 {
 	__twofish_enc_blk_3way(ctx, dst, src, false);
 }
 
-static void twofish_xts_enc(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+static void twofish_xts_enc(const void *ctx, u8 *dst, const u8 *src, le128 *iv)
 {
-	glue_xts_crypt_128bit_one(ctx, dst, src, iv,
-				  GLUE_FUNC_CAST(twofish_enc_blk));
+	glue_xts_crypt_128bit_one(ctx, dst, src, iv, twofish_enc_blk);
 }
 
-static void twofish_xts_dec(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+static void twofish_xts_dec(const void *ctx, u8 *dst, const u8 *src, le128 *iv)
 {
-	glue_xts_crypt_128bit_one(ctx, dst, src, iv,
-				  GLUE_FUNC_CAST(twofish_dec_blk));
+	glue_xts_crypt_128bit_one(ctx, dst, src, iv, twofish_dec_blk);
 }
 
 struct twofish_xts_ctx {
@@ -93,13 +87,13 @@ static const struct common_glue_ctx twofish_enc = {
 
 	.funcs = { {
 		.num_blocks = TWOFISH_PARALLEL_BLOCKS,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(twofish_ecb_enc_8way) }
+		.fn_u = { .ecb = twofish_ecb_enc_8way }
 	}, {
 		.num_blocks = 3,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(twofish_enc_blk_3way) }
+		.fn_u = { .ecb = twofish_enc_blk_3way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(twofish_enc_blk) }
+		.fn_u = { .ecb = twofish_enc_blk }
 	} }
 };
 
@@ -109,13 +103,13 @@ static const struct common_glue_ctx twofish_ctr = {
 
 	.funcs = { {
 		.num_blocks = TWOFISH_PARALLEL_BLOCKS,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(twofish_ctr_8way) }
+		.fn_u = { .ctr = twofish_ctr_8way }
 	}, {
 		.num_blocks = 3,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(twofish_enc_blk_ctr_3way) }
+		.fn_u = { .ctr = twofish_enc_blk_ctr_3way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ctr = GLUE_CTR_FUNC_CAST(twofish_enc_blk_ctr) }
+		.fn_u = { .ctr = twofish_enc_blk_ctr }
 	} }
 };
 
@@ -125,10 +119,10 @@ static const struct common_glue_ctx twofish_enc_xts = {
 
 	.funcs = { {
 		.num_blocks = TWOFISH_PARALLEL_BLOCKS,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(twofish_xts_enc_8way) }
+		.fn_u = { .xts = twofish_xts_enc_8way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(twofish_xts_enc) }
+		.fn_u = { .xts = twofish_xts_enc }
 	} }
 };
 
@@ -138,13 +132,13 @@ static const struct common_glue_ctx twofish_dec = {
 
 	.funcs = { {
 		.num_blocks = TWOFISH_PARALLEL_BLOCKS,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(twofish_ecb_dec_8way) }
+		.fn_u = { .ecb = twofish_ecb_dec_8way }
 	}, {
 		.num_blocks = 3,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(twofish_dec_blk_3way) }
+		.fn_u = { .ecb = twofish_dec_blk_3way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(twofish_dec_blk) }
+		.fn_u = { .ecb = twofish_dec_blk }
 	} }
 };
 
@@ -154,13 +148,13 @@ static const struct common_glue_ctx twofish_dec_cbc = {
 
 	.funcs = { {
 		.num_blocks = TWOFISH_PARALLEL_BLOCKS,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(twofish_cbc_dec_8way) }
+		.fn_u = { .cbc = twofish_cbc_dec_8way }
 	}, {
 		.num_blocks = 3,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(twofish_dec_blk_cbc_3way) }
+		.fn_u = { .cbc = twofish_dec_blk_cbc_3way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(twofish_dec_blk) }
+		.fn_u = { .cbc = twofish_dec_blk }
 	} }
 };
 
@@ -170,10 +164,10 @@ static const struct common_glue_ctx twofish_dec_xts = {
 
 	.funcs = { {
 		.num_blocks = TWOFISH_PARALLEL_BLOCKS,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(twofish_xts_dec_8way) }
+		.fn_u = { .xts = twofish_xts_dec_8way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .xts = GLUE_XTS_FUNC_CAST(twofish_xts_dec) }
+		.fn_u = { .xts = twofish_xts_dec }
 	} }
 };
 
@@ -189,8 +183,7 @@ static int ecb_decrypt(struct skcipher_request *req)
 
 static int cbc_encrypt(struct skcipher_request *req)
 {
-	return glue_cbc_encrypt_req_128bit(GLUE_FUNC_CAST(twofish_enc_blk),
-					   req);
+	return glue_cbc_encrypt_req_128bit(twofish_enc_blk, req);
 }
 
 static int cbc_decrypt(struct skcipher_request *req)
@@ -208,8 +201,7 @@ static int xts_encrypt(struct skcipher_request *req)
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct twofish_xts_ctx *ctx = crypto_skcipher_ctx(tfm);
 
-	return glue_xts_req_128bit(&twofish_enc_xts, req,
-				   XTS_TWEAK_CAST(twofish_enc_blk),
+	return glue_xts_req_128bit(&twofish_enc_xts, req, twofish_enc_blk,
 				   &ctx->tweak_ctx, &ctx->crypt_ctx, false);
 }
 
@@ -218,8 +210,7 @@ static int xts_decrypt(struct skcipher_request *req)
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct twofish_xts_ctx *ctx = crypto_skcipher_ctx(tfm);
 
-	return glue_xts_req_128bit(&twofish_dec_xts, req,
-				   XTS_TWEAK_CAST(twofish_enc_blk),
+	return glue_xts_req_128bit(&twofish_dec_xts, req, twofish_enc_blk,
 				   &ctx->tweak_ctx, &ctx->crypt_ctx, true);
 }
 
diff --git a/arch/x86/crypto/twofish_glue_3way.c b/arch/x86/crypto/twofish_glue_3way.c
index 1dc9e29..768af60 100644
--- a/arch/x86/crypto/twofish_glue_3way.c
+++ b/arch/x86/crypto/twofish_glue_3way.c
@@ -25,21 +25,22 @@ static int twofish_setkey_skcipher(struct crypto_skcipher *tfm,
 	return twofish_setkey(&tfm->base, key, keylen);
 }
 
-static inline void twofish_enc_blk_3way(struct twofish_ctx *ctx, u8 *dst,
-					const u8 *src)
+static inline void twofish_enc_blk_3way(const void *ctx, u8 *dst, const u8 *src)
 {
 	__twofish_enc_blk_3way(ctx, dst, src, false);
 }
 
-static inline void twofish_enc_blk_xor_3way(struct twofish_ctx *ctx, u8 *dst,
+static inline void twofish_enc_blk_xor_3way(const void *ctx, u8 *dst,
 					    const u8 *src)
 {
 	__twofish_enc_blk_3way(ctx, dst, src, true);
 }
 
-void twofish_dec_blk_cbc_3way(void *ctx, u128 *dst, const u128 *src)
+void twofish_dec_blk_cbc_3way(const void *ctx, u8 *d, const u8 *s)
 {
 	u128 ivs[2];
+	u128 *dst = (u128 *)d;
+	const u128 *src = (const u128 *)s;
 
 	ivs[0] = src[0];
 	ivs[1] = src[1];
@@ -51,9 +52,11 @@ void twofish_dec_blk_cbc_3way(void *ctx, u128 *dst, const u128 *src)
 }
 EXPORT_SYMBOL_GPL(twofish_dec_blk_cbc_3way);
 
-void twofish_enc_blk_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv)
+void twofish_enc_blk_ctr(const void *ctx, u8 *d, const u8 *s, le128 *iv)
 {
 	be128 ctrblk;
+	u128 *dst = (u128 *)d;
+	const u128 *src = (const u128 *)s;
 
 	if (dst != src)
 		*dst = *src;
@@ -66,10 +69,11 @@ void twofish_enc_blk_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv)
 }
 EXPORT_SYMBOL_GPL(twofish_enc_blk_ctr);
 
-void twofish_enc_blk_ctr_3way(void *ctx, u128 *dst, const u128 *src,
-			      le128 *iv)
+void twofish_enc_blk_ctr_3way(const void *ctx, u8 *d, const u8 *s, le128 *iv)
 {
 	be128 ctrblks[3];
+	u128 *dst = (u128 *)d;
+	const u128 *src = (const u128 *)s;
 
 	if (dst != src) {
 		dst[0] = src[0];
@@ -94,10 +98,10 @@ static const struct common_glue_ctx twofish_enc = {
 
 	.funcs = { {
 		.num_blocks = 3,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(twofish_enc_blk_3way) }
+		.fn_u = { .ecb = twofish_enc_blk_3way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(twofish_enc_blk) }
+		.fn_u = { .ecb = twofish_enc_blk }
 	} }
 };
 
@@ -107,10 +111,10 @@ static const struct common_glue_ctx twofish_ctr = {
 
 	.funcs = { {
 		.num_blocks = 3,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(twofish_enc_blk_ctr_3way) }
+		.fn_u = { .ctr = twofish_enc_blk_ctr_3way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(twofish_enc_blk_ctr) }
+		.fn_u = { .ctr = twofish_enc_blk_ctr }
 	} }
 };
 
@@ -120,10 +124,10 @@ static const struct common_glue_ctx twofish_dec = {
 
 	.funcs = { {
 		.num_blocks = 3,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(twofish_dec_blk_3way) }
+		.fn_u = { .ecb = twofish_dec_blk_3way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .ecb = GLUE_FUNC_CAST(twofish_dec_blk) }
+		.fn_u = { .ecb = twofish_dec_blk }
 	} }
 };
 
@@ -133,10 +137,10 @@ static const struct common_glue_ctx twofish_dec_cbc = {
 
 	.funcs = { {
 		.num_blocks = 3,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(twofish_dec_blk_cbc_3way) }
+		.fn_u = { .cbc = twofish_dec_blk_cbc_3way }
 	}, {
 		.num_blocks = 1,
-		.fn_u = { .cbc = GLUE_CBC_FUNC_CAST(twofish_dec_blk) }
+		.fn_u = { .cbc = twofish_dec_blk }
 	} }
 };
 
@@ -152,8 +156,7 @@ static int ecb_decrypt(struct skcipher_request *req)
 
 static int cbc_encrypt(struct skcipher_request *req)
 {
-	return glue_cbc_encrypt_req_128bit(GLUE_FUNC_CAST(twofish_enc_blk),
-					   req);
+	return glue_cbc_encrypt_req_128bit(twofish_enc_blk, req);
 }
 
 static int cbc_decrypt(struct skcipher_request *req)
diff --git a/arch/x86/entry/syscalls/syscall_32.tbl b/arch/x86/entry/syscalls/syscall_32.tbl
index 15908eb..0e2d912 100644
--- a/arch/x86/entry/syscalls/syscall_32.tbl
+++ b/arch/x86/entry/syscalls/syscall_32.tbl
@@ -440,3 +440,4 @@
 433	i386	fspick			sys_fspick			__ia32_sys_fspick
 434	i386	pidfd_open		sys_pidfd_open			__ia32_sys_pidfd_open
 435	i386	clone3			sys_clone3			__ia32_sys_clone3
+440	i386	process_madvise		sys_process_madvise     __ia32_sys_process_madvise
\ No newline at end of file
diff --git a/arch/x86/entry/syscalls/syscall_64.tbl b/arch/x86/entry/syscalls/syscall_64.tbl
index c29976e..14213fc 100644
--- a/arch/x86/entry/syscalls/syscall_64.tbl
+++ b/arch/x86/entry/syscalls/syscall_64.tbl
@@ -357,6 +357,7 @@
 433	common	fspick			__x64_sys_fspick
 434	common	pidfd_open		__x64_sys_pidfd_open
 435	common	clone3			__x64_sys_clone3/ptregs
+440	common	process_madvise		__x64_sys_process_madvise
 
 #
 # x32-specific system call numbers start at 512 to avoid cache impact
diff --git a/arch/x86/entry/vdso/Makefile b/arch/x86/entry/vdso/Makefile
index 0f21541..a3d4cf5 100644
--- a/arch/x86/entry/vdso/Makefile
+++ b/arch/x86/entry/vdso/Makefile
@@ -9,7 +9,6 @@
 ARCH_REL_TYPE_ABS += R_386_GLOB_DAT|R_386_JMP_SLOT|R_386_RELATIVE
 include $(srctree)/lib/vdso/Makefile
 
-KBUILD_CFLAGS += $(DISABLE_LTO)
 KASAN_SANITIZE			:= n
 UBSAN_SANITIZE			:= n
 OBJECT_FILES_NON_STANDARD	:= y
@@ -82,7 +81,7 @@
 endif
 endif
 
-$(vobjs): KBUILD_CFLAGS := $(filter-out $(GCC_PLUGINS_CFLAGS) $(RETPOLINE_CFLAGS),$(KBUILD_CFLAGS)) $(CFL)
+$(vobjs): KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_LTO) $(GCC_PLUGINS_CFLAGS) $(RETPOLINE_CFLAGS),$(KBUILD_CFLAGS)) $(CFL)
 
 #
 # vDSO code runs in userspace and -pg doesn't help with profiling anyway.
@@ -146,6 +145,7 @@
 KBUILD_CFLAGS_32 := $(filter-out -mfentry,$(KBUILD_CFLAGS_32))
 KBUILD_CFLAGS_32 := $(filter-out $(GCC_PLUGINS_CFLAGS),$(KBUILD_CFLAGS_32))
 KBUILD_CFLAGS_32 := $(filter-out $(RETPOLINE_CFLAGS),$(KBUILD_CFLAGS_32))
+KBUILD_CFLAGS_32 := $(filter-out $(CC_FLAGS_LTO),$(KBUILD_CFLAGS_32))
 KBUILD_CFLAGS_32 += -m32 -msoft-float -mregparm=0 -fpic
 KBUILD_CFLAGS_32 += $(call cc-option, -fno-stack-protector)
 KBUILD_CFLAGS_32 += $(call cc-option, -foptimize-sibling-calls)
diff --git a/arch/x86/events/intel/bts.c b/arch/x86/events/intel/bts.c
index 741540d..6a3b599 100644
--- a/arch/x86/events/intel/bts.c
+++ b/arch/x86/events/intel/bts.c
@@ -555,9 +555,11 @@ static int bts_event_init(struct perf_event *event)
 	 * Note that the default paranoia setting permits unprivileged
 	 * users to profile the kernel.
 	 */
-	if (event->attr.exclude_kernel && perf_paranoid_kernel() &&
-	    !capable(CAP_SYS_ADMIN))
-		return -EACCES;
+	if (event->attr.exclude_kernel) {
+		ret = perf_allow_kernel(&event->attr);
+		if (ret)
+			return ret;
+	}
 
 	if (x86_add_exclusive(x86_lbr_exclusive_bts))
 		return -EBUSY;
diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
index b24c380..40c1320 100644
--- a/arch/x86/events/intel/core.c
+++ b/arch/x86/events/intel/core.c
@@ -3316,8 +3316,9 @@ static int intel_pmu_hw_config(struct perf_event *event)
 	if (x86_pmu.version < 3)
 		return -EINVAL;
 
-	if (perf_paranoid_cpu() && !capable(CAP_SYS_ADMIN))
-		return -EACCES;
+	ret = perf_allow_cpu(&event->attr);
+	if (ret)
+		return ret;
 
 	event->hw.config |= ARCH_PERFMON_EVENTSEL_ANY;
 
diff --git a/arch/x86/events/intel/p4.c b/arch/x86/events/intel/p4.c
index dee579e..a4cc660 100644
--- a/arch/x86/events/intel/p4.c
+++ b/arch/x86/events/intel/p4.c
@@ -776,8 +776,9 @@ static int p4_validate_raw_event(struct perf_event *event)
 	 * the user needs special permissions to be able to use it
 	 */
 	if (p4_ht_active() && p4_event_bind_map[v].shared) {
-		if (perf_paranoid_cpu() && !capable(CAP_SYS_ADMIN))
-			return -EACCES;
+		v = perf_allow_cpu(&event->attr);
+		if (v)
+			return v;
 	}
 
 	/* ESCR EventMask bits may be invalid */
diff --git a/arch/x86/include/asm/clocksource.h b/arch/x86/include/asm/clocksource.h
index dc4cfc8..3f73dff 100644
--- a/arch/x86/include/asm/clocksource.h
+++ b/arch/x86/include/asm/clocksource.h
@@ -4,11 +4,7 @@
 #ifndef _ASM_X86_CLOCKSOURCE_H
 #define _ASM_X86_CLOCKSOURCE_H
 
-#define VCLOCK_NONE	0	/* No vDSO clock available.		*/
-#define VCLOCK_TSC	1	/* vDSO should use vread_tsc.		*/
-#define VCLOCK_PVCLOCK	2	/* vDSO should use vread_pvclock.	*/
-#define VCLOCK_HVCLOCK	3	/* vDSO should use vread_hvclock.	*/
-#define VCLOCK_MAX	3
+#include <asm/vdso/clocksource.h>
 
 struct arch_clocksource_data {
 	int vclock_mode;
diff --git a/arch/x86/include/asm/crypto/camellia.h b/arch/x86/include/asm/crypto/camellia.h
index a5d86fc..f159261 100644
--- a/arch/x86/include/asm/crypto/camellia.h
+++ b/arch/x86/include/asm/crypto/camellia.h
@@ -32,65 +32,60 @@ extern int xts_camellia_setkey(struct crypto_skcipher *tfm, const u8 *key,
 			       unsigned int keylen);
 
 /* regular block cipher functions */
-asmlinkage void __camellia_enc_blk(struct camellia_ctx *ctx, u8 *dst,
-				   const u8 *src, bool xor);
-asmlinkage void camellia_dec_blk(struct camellia_ctx *ctx, u8 *dst,
-				 const u8 *src);
+asmlinkage void __camellia_enc_blk(const void *ctx, u8 *dst, const u8 *src,
+				   bool xor);
+asmlinkage void camellia_dec_blk(const void *ctx, u8 *dst, const u8 *src);
 
 /* 2-way parallel cipher functions */
-asmlinkage void __camellia_enc_blk_2way(struct camellia_ctx *ctx, u8 *dst,
-					const u8 *src, bool xor);
-asmlinkage void camellia_dec_blk_2way(struct camellia_ctx *ctx, u8 *dst,
-				      const u8 *src);
+asmlinkage void __camellia_enc_blk_2way(const void *ctx, u8 *dst, const u8 *src,
+					bool xor);
+asmlinkage void camellia_dec_blk_2way(const void *ctx, u8 *dst, const u8 *src);
 
 /* 16-way parallel cipher functions (avx/aes-ni) */
-asmlinkage void camellia_ecb_enc_16way(struct camellia_ctx *ctx, u8 *dst,
-				       const u8 *src);
-asmlinkage void camellia_ecb_dec_16way(struct camellia_ctx *ctx, u8 *dst,
-				       const u8 *src);
+asmlinkage void camellia_ecb_enc_16way(const void *ctx, u8 *dst, const u8 *src);
+asmlinkage void camellia_ecb_dec_16way(const void *ctx, u8 *dst, const u8 *src);
 
-asmlinkage void camellia_cbc_dec_16way(struct camellia_ctx *ctx, u8 *dst,
-				       const u8 *src);
-asmlinkage void camellia_ctr_16way(struct camellia_ctx *ctx, u8 *dst,
-				   const u8 *src, le128 *iv);
+asmlinkage void camellia_cbc_dec_16way(const void *ctx, u8 *dst, const u8 *src);
+asmlinkage void camellia_ctr_16way(const void *ctx, u8 *dst, const u8 *src,
+				   le128 *iv);
 
-asmlinkage void camellia_xts_enc_16way(struct camellia_ctx *ctx, u8 *dst,
-				       const u8 *src, le128 *iv);
-asmlinkage void camellia_xts_dec_16way(struct camellia_ctx *ctx, u8 *dst,
-				       const u8 *src, le128 *iv);
+asmlinkage void camellia_xts_enc_16way(const void *ctx, u8 *dst, const u8 *src,
+				       le128 *iv);
+asmlinkage void camellia_xts_dec_16way(const void *ctx, u8 *dst, const u8 *src,
+				       le128 *iv);
 
-static inline void camellia_enc_blk(struct camellia_ctx *ctx, u8 *dst,
-				    const u8 *src)
+static inline void camellia_enc_blk(const void *ctx, u8 *dst, const u8 *src)
 {
 	__camellia_enc_blk(ctx, dst, src, false);
 }
 
-static inline void camellia_enc_blk_xor(struct camellia_ctx *ctx, u8 *dst,
-					const u8 *src)
+static inline void camellia_enc_blk_xor(const void *ctx, u8 *dst, const u8 *src)
 {
 	__camellia_enc_blk(ctx, dst, src, true);
 }
 
-static inline void camellia_enc_blk_2way(struct camellia_ctx *ctx, u8 *dst,
+static inline void camellia_enc_blk_2way(const void *ctx, u8 *dst,
 					 const u8 *src)
 {
 	__camellia_enc_blk_2way(ctx, dst, src, false);
 }
 
-static inline void camellia_enc_blk_xor_2way(struct camellia_ctx *ctx, u8 *dst,
+static inline void camellia_enc_blk_xor_2way(const void *ctx, u8 *dst,
 					     const u8 *src)
 {
 	__camellia_enc_blk_2way(ctx, dst, src, true);
 }
 
 /* glue helpers */
-extern void camellia_decrypt_cbc_2way(void *ctx, u128 *dst, const u128 *src);
-extern void camellia_crypt_ctr(void *ctx, u128 *dst, const u128 *src,
+extern void camellia_decrypt_cbc_2way(const void *ctx, u8 *dst, const u8 *src);
+extern void camellia_crypt_ctr(const void *ctx, u8 *dst, const u8 *src,
 			       le128 *iv);
-extern void camellia_crypt_ctr_2way(void *ctx, u128 *dst, const u128 *src,
+extern void camellia_crypt_ctr_2way(const void *ctx, u8 *dst, const u8 *src,
 				    le128 *iv);
 
-extern void camellia_xts_enc(void *ctx, u128 *dst, const u128 *src, le128 *iv);
-extern void camellia_xts_dec(void *ctx, u128 *dst, const u128 *src, le128 *iv);
+extern void camellia_xts_enc(const void *ctx, u8 *dst, const u8 *src,
+			     le128 *iv);
+extern void camellia_xts_dec(const void *ctx, u8 *dst, const u8 *src,
+			     le128 *iv);
 
 #endif /* ASM_X86_CAMELLIA_H */
diff --git a/arch/x86/include/asm/crypto/glue_helper.h b/arch/x86/include/asm/crypto/glue_helper.h
index 8d4a8e1..777c0f6 100644
--- a/arch/x86/include/asm/crypto/glue_helper.h
+++ b/arch/x86/include/asm/crypto/glue_helper.h
@@ -11,18 +11,13 @@
 #include <asm/fpu/api.h>
 #include <crypto/b128ops.h>
 
-typedef void (*common_glue_func_t)(void *ctx, u8 *dst, const u8 *src);
-typedef void (*common_glue_cbc_func_t)(void *ctx, u128 *dst, const u128 *src);
-typedef void (*common_glue_ctr_func_t)(void *ctx, u128 *dst, const u128 *src,
+typedef void (*common_glue_func_t)(const void *ctx, u8 *dst, const u8 *src);
+typedef void (*common_glue_cbc_func_t)(const void *ctx, u8 *dst, const u8 *src);
+typedef void (*common_glue_ctr_func_t)(const void *ctx, u8 *dst, const u8 *src,
 				       le128 *iv);
-typedef void (*common_glue_xts_func_t)(void *ctx, u128 *dst, const u128 *src,
+typedef void (*common_glue_xts_func_t)(const void *ctx, u8 *dst, const u8 *src,
 				       le128 *iv);
 
-#define GLUE_FUNC_CAST(fn) ((common_glue_func_t)(fn))
-#define GLUE_CBC_FUNC_CAST(fn) ((common_glue_cbc_func_t)(fn))
-#define GLUE_CTR_FUNC_CAST(fn) ((common_glue_ctr_func_t)(fn))
-#define GLUE_XTS_FUNC_CAST(fn) ((common_glue_xts_func_t)(fn))
-
 struct common_glue_func_entry {
 	unsigned int num_blocks; /* number of blocks that @fn will process */
 	union {
@@ -116,7 +111,8 @@ extern int glue_xts_req_128bit(const struct common_glue_ctx *gctx,
 			       common_glue_func_t tweak_fn, void *tweak_ctx,
 			       void *crypt_ctx, bool decrypt);
 
-extern void glue_xts_crypt_128bit_one(void *ctx, u128 *dst, const u128 *src,
-				      le128 *iv, common_glue_func_t fn);
+extern void glue_xts_crypt_128bit_one(const void *ctx, u8 *dst,
+				      const u8 *src, le128 *iv,
+				      common_glue_func_t fn);
 
 #endif /* _CRYPTO_GLUE_HELPER_H */
diff --git a/arch/x86/include/asm/crypto/serpent-avx.h b/arch/x86/include/asm/crypto/serpent-avx.h
index db7c9cc..251c2c8 100644
--- a/arch/x86/include/asm/crypto/serpent-avx.h
+++ b/arch/x86/include/asm/crypto/serpent-avx.h
@@ -15,26 +15,26 @@ struct serpent_xts_ctx {
 	struct serpent_ctx crypt_ctx;
 };
 
-asmlinkage void serpent_ecb_enc_8way_avx(struct serpent_ctx *ctx, u8 *dst,
+asmlinkage void serpent_ecb_enc_8way_avx(const void *ctx, u8 *dst,
 					 const u8 *src);
-asmlinkage void serpent_ecb_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst,
+asmlinkage void serpent_ecb_dec_8way_avx(const void *ctx, u8 *dst,
 					 const u8 *src);
 
-asmlinkage void serpent_cbc_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst,
+asmlinkage void serpent_cbc_dec_8way_avx(const void *ctx, u8 *dst,
 					 const u8 *src);
-asmlinkage void serpent_ctr_8way_avx(struct serpent_ctx *ctx, u8 *dst,
-				     const u8 *src, le128 *iv);
+asmlinkage void serpent_ctr_8way_avx(const void *ctx, u8 *dst, const u8 *src,
+				     le128 *iv);
 
-asmlinkage void serpent_xts_enc_8way_avx(struct serpent_ctx *ctx, u8 *dst,
+asmlinkage void serpent_xts_enc_8way_avx(const void *ctx, u8 *dst,
 					 const u8 *src, le128 *iv);
-asmlinkage void serpent_xts_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst,
+asmlinkage void serpent_xts_dec_8way_avx(const void *ctx, u8 *dst,
 					 const u8 *src, le128 *iv);
 
-extern void __serpent_crypt_ctr(void *ctx, u128 *dst, const u128 *src,
+extern void __serpent_crypt_ctr(const void *ctx, u8 *dst, const u8 *src,
 				le128 *iv);
 
-extern void serpent_xts_enc(void *ctx, u128 *dst, const u128 *src, le128 *iv);
-extern void serpent_xts_dec(void *ctx, u128 *dst, const u128 *src, le128 *iv);
+extern void serpent_xts_enc(const void *ctx, u8 *dst, const u8 *src, le128 *iv);
+extern void serpent_xts_dec(const void *ctx, u8 *dst, const u8 *src, le128 *iv);
 
 extern int xts_serpent_setkey(struct crypto_skcipher *tfm, const u8 *key,
 			      unsigned int keylen);
diff --git a/arch/x86/include/asm/crypto/serpent-sse2.h b/arch/x86/include/asm/crypto/serpent-sse2.h
index 1a345e8..860ca24 100644
--- a/arch/x86/include/asm/crypto/serpent-sse2.h
+++ b/arch/x86/include/asm/crypto/serpent-sse2.h
@@ -9,25 +9,23 @@
 
 #define SERPENT_PARALLEL_BLOCKS 4
 
-asmlinkage void __serpent_enc_blk_4way(struct serpent_ctx *ctx, u8 *dst,
+asmlinkage void __serpent_enc_blk_4way(const struct serpent_ctx *ctx, u8 *dst,
 				       const u8 *src, bool xor);
-asmlinkage void serpent_dec_blk_4way(struct serpent_ctx *ctx, u8 *dst,
+asmlinkage void serpent_dec_blk_4way(const struct serpent_ctx *ctx, u8 *dst,
 				     const u8 *src);
 
-static inline void serpent_enc_blk_xway(struct serpent_ctx *ctx, u8 *dst,
-					const u8 *src)
+static inline void serpent_enc_blk_xway(const void *ctx, u8 *dst, const u8 *src)
 {
 	__serpent_enc_blk_4way(ctx, dst, src, false);
 }
 
-static inline void serpent_enc_blk_xway_xor(struct serpent_ctx *ctx, u8 *dst,
-					    const u8 *src)
+static inline void serpent_enc_blk_xway_xor(const struct serpent_ctx *ctx,
+					    u8 *dst, const u8 *src)
 {
 	__serpent_enc_blk_4way(ctx, dst, src, true);
 }
 
-static inline void serpent_dec_blk_xway(struct serpent_ctx *ctx, u8 *dst,
-					const u8 *src)
+static inline void serpent_dec_blk_xway(const void *ctx, u8 *dst, const u8 *src)
 {
 	serpent_dec_blk_4way(ctx, dst, src);
 }
@@ -36,25 +34,23 @@ static inline void serpent_dec_blk_xway(struct serpent_ctx *ctx, u8 *dst,
 
 #define SERPENT_PARALLEL_BLOCKS 8
 
-asmlinkage void __serpent_enc_blk_8way(struct serpent_ctx *ctx, u8 *dst,
+asmlinkage void __serpent_enc_blk_8way(const struct serpent_ctx *ctx, u8 *dst,
 				       const u8 *src, bool xor);
-asmlinkage void serpent_dec_blk_8way(struct serpent_ctx *ctx, u8 *dst,
+asmlinkage void serpent_dec_blk_8way(const struct serpent_ctx *ctx, u8 *dst,
 				     const u8 *src);
 
-static inline void serpent_enc_blk_xway(struct serpent_ctx *ctx, u8 *dst,
-				   const u8 *src)
+static inline void serpent_enc_blk_xway(const void *ctx, u8 *dst, const u8 *src)
 {
 	__serpent_enc_blk_8way(ctx, dst, src, false);
 }
 
-static inline void serpent_enc_blk_xway_xor(struct serpent_ctx *ctx, u8 *dst,
-				       const u8 *src)
+static inline void serpent_enc_blk_xway_xor(const struct serpent_ctx *ctx,
+					    u8 *dst, const u8 *src)
 {
 	__serpent_enc_blk_8way(ctx, dst, src, true);
 }
 
-static inline void serpent_dec_blk_xway(struct serpent_ctx *ctx, u8 *dst,
-				   const u8 *src)
+static inline void serpent_dec_blk_xway(const void *ctx, u8 *dst, const u8 *src)
 {
 	serpent_dec_blk_8way(ctx, dst, src);
 }
diff --git a/arch/x86/include/asm/crypto/twofish.h b/arch/x86/include/asm/crypto/twofish.h
index f618bf2..2c377a8 100644
--- a/arch/x86/include/asm/crypto/twofish.h
+++ b/arch/x86/include/asm/crypto/twofish.h
@@ -7,22 +7,19 @@
 #include <crypto/b128ops.h>
 
 /* regular block cipher functions from twofish_x86_64 module */
-asmlinkage void twofish_enc_blk(struct twofish_ctx *ctx, u8 *dst,
-				const u8 *src);
-asmlinkage void twofish_dec_blk(struct twofish_ctx *ctx, u8 *dst,
-				const u8 *src);
+asmlinkage void twofish_enc_blk(const void *ctx, u8 *dst, const u8 *src);
+asmlinkage void twofish_dec_blk(const void *ctx, u8 *dst, const u8 *src);
 
 /* 3-way parallel cipher functions */
-asmlinkage void __twofish_enc_blk_3way(struct twofish_ctx *ctx, u8 *dst,
-				       const u8 *src, bool xor);
-asmlinkage void twofish_dec_blk_3way(struct twofish_ctx *ctx, u8 *dst,
-				     const u8 *src);
+asmlinkage void __twofish_enc_blk_3way(const void *ctx, u8 *dst, const u8 *src,
+				       bool xor);
+asmlinkage void twofish_dec_blk_3way(const void *ctx, u8 *dst, const u8 *src);
 
 /* helpers from twofish_x86_64-3way module */
-extern void twofish_dec_blk_cbc_3way(void *ctx, u128 *dst, const u128 *src);
-extern void twofish_enc_blk_ctr(void *ctx, u128 *dst, const u128 *src,
+extern void twofish_dec_blk_cbc_3way(const void *ctx, u8 *dst, const u8 *src);
+extern void twofish_enc_blk_ctr(const void *ctx, u8 *dst, const u8 *src,
 				le128 *iv);
-extern void twofish_enc_blk_ctr_3way(void *ctx, u128 *dst, const u128 *src,
+extern void twofish_enc_blk_ctr_3way(const void *ctx, u8 *dst, const u8 *src,
 				     le128 *iv);
 
 #endif /* ASM_X86_TWOFISH_H */
diff --git a/arch/x86/include/asm/kfence.h b/arch/x86/include/asm/kfence.h
new file mode 100644
index 0000000..2d66d70
--- /dev/null
+++ b/arch/x86/include/asm/kfence.h
@@ -0,0 +1,64 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * x86 KFENCE support.
+ *
+ * Copyright (C) 2020, Google LLC.
+ */
+
+#ifndef _ASM_X86_KFENCE_H
+#define _ASM_X86_KFENCE_H
+
+#include <linux/bug.h>
+#include <linux/kfence.h>
+
+#include <asm/pgalloc.h>
+#include <asm/pgtable.h>
+#include <asm/set_memory.h>
+#include <asm/tlbflush.h>
+
+/* Force 4K pages for __kfence_pool. */
+static inline bool arch_kfence_init_pool(void)
+{
+	unsigned long addr;
+
+	for (addr = (unsigned long)__kfence_pool; is_kfence_address((void *)addr);
+	     addr += PAGE_SIZE) {
+		unsigned int level;
+
+		if (!lookup_address(addr, &level))
+			return false;
+
+		if (level != PG_LEVEL_4K)
+			set_memory_4k(addr, 1);
+	}
+
+	return true;
+}
+
+/* Protect the given page and flush TLB. */
+static inline bool kfence_protect_page(unsigned long addr, bool protect)
+{
+	unsigned int level;
+	pte_t *pte = lookup_address(addr, &level);
+
+	if (WARN_ON(!pte || level != PG_LEVEL_4K))
+		return false;
+
+	/*
+	 * We need to avoid IPIs, as we may get KFENCE allocations or faults
+	 * with interrupts disabled. Therefore, the below is best-effort, and
+	 * does not flush TLBs on all CPUs. We can tolerate some inaccuracy;
+	 * lazy fault handling takes care of faults after the page is PRESENT.
+	 */
+
+	if (protect)
+		set_pte(pte, __pte(pte_val(*pte) & ~_PAGE_PRESENT));
+	else
+		set_pte(pte, __pte(pte_val(*pte) | _PAGE_PRESENT));
+
+	/* Flush this CPU's TLB. */
+	__flush_tlb_one_kernel(addr);
+	return true;
+}
+
+#endif /* _ASM_X86_KFENCE_H */
diff --git a/arch/x86/include/asm/percpu.h b/arch/x86/include/asm/percpu.h
index 2278797..a3c33b7 100644
--- a/arch/x86/include/asm/percpu.h
+++ b/arch/x86/include/asm/percpu.h
@@ -4,33 +4,15 @@
 
 #ifdef CONFIG_X86_64
 #define __percpu_seg		gs
-#define __percpu_mov_op		movq
 #else
 #define __percpu_seg		fs
-#define __percpu_mov_op		movl
 #endif
 
 #ifdef __ASSEMBLY__
 
-/*
- * PER_CPU finds an address of a per-cpu variable.
- *
- * Args:
- *    var - variable name
- *    reg - 32bit register
- *
- * The resulting address is stored in the "reg" argument.
- *
- * Example:
- *    PER_CPU(cpu_gdt_descr, %ebx)
- */
 #ifdef CONFIG_SMP
-#define PER_CPU(var, reg)						\
-	__percpu_mov_op %__percpu_seg:this_cpu_off, reg;		\
-	lea var(reg), reg
 #define PER_CPU_VAR(var)	%__percpu_seg:var
 #else /* ! SMP */
-#define PER_CPU(var, reg)	__percpu_mov_op $var, reg
 #define PER_CPU_VAR(var)	var
 #endif	/* SMP */
 
@@ -85,213 +67,108 @@
 
 /* For arch-specific code, we can use direct single-insn ops (they
  * don't give an lvalue though). */
-extern void __bad_percpu_size(void);
 
-#define percpu_to_op(qual, op, var, val)		\
-do {							\
-	typedef typeof(var) pto_T__;			\
-	if (0) {					\
-		pto_T__ pto_tmp__;			\
-		pto_tmp__ = (val);			\
-		(void)pto_tmp__;			\
-	}						\
-	switch (sizeof(var)) {				\
-	case 1:						\
-		asm qual (op "b %1,"__percpu_arg(0)	\
-		    : "+m" (var)			\
-		    : "qi" ((pto_T__)(val)));		\
-		break;					\
-	case 2:						\
-		asm qual (op "w %1,"__percpu_arg(0)	\
-		    : "+m" (var)			\
-		    : "ri" ((pto_T__)(val)));		\
-		break;					\
-	case 4:						\
-		asm qual (op "l %1,"__percpu_arg(0)	\
-		    : "+m" (var)			\
-		    : "ri" ((pto_T__)(val)));		\
-		break;					\
-	case 8:						\
-		asm qual (op "q %1,"__percpu_arg(0)	\
-		    : "+m" (var)			\
-		    : "re" ((pto_T__)(val)));		\
-		break;					\
-	default: __bad_percpu_size();			\
-	}						\
+#define __pcpu_type_1 u8
+#define __pcpu_type_2 u16
+#define __pcpu_type_4 u32
+#define __pcpu_type_8 u64
+
+#define __pcpu_cast_1(val) ((u8)(((unsigned long) val) & 0xff))
+#define __pcpu_cast_2(val) ((u16)(((unsigned long) val) & 0xffff))
+#define __pcpu_cast_4(val) ((u32)(((unsigned long) val) & 0xffffffff))
+#define __pcpu_cast_8(val) ((u64)(val))
+
+#define __pcpu_op1_1(op, dst) op "b " dst
+#define __pcpu_op1_2(op, dst) op "w " dst
+#define __pcpu_op1_4(op, dst) op "l " dst
+#define __pcpu_op1_8(op, dst) op "q " dst
+
+#define __pcpu_op2_1(op, src, dst) op "b " src ", " dst
+#define __pcpu_op2_2(op, src, dst) op "w " src ", " dst
+#define __pcpu_op2_4(op, src, dst) op "l " src ", " dst
+#define __pcpu_op2_8(op, src, dst) op "q " src ", " dst
+
+#define __pcpu_reg_1(mod, x) mod "q" (x)
+#define __pcpu_reg_2(mod, x) mod "r" (x)
+#define __pcpu_reg_4(mod, x) mod "r" (x)
+#define __pcpu_reg_8(mod, x) mod "r" (x)
+
+#define __pcpu_reg_imm_1(x) "qi" (x)
+#define __pcpu_reg_imm_2(x) "ri" (x)
+#define __pcpu_reg_imm_4(x) "ri" (x)
+#define __pcpu_reg_imm_8(x) "re" (x)
+
+#define percpu_to_op(size, qual, op, _var, _val)			\
+do {									\
+	__pcpu_type_##size pto_val__ = __pcpu_cast_##size(_val);	\
+	if (0) {		                                        \
+		typeof(_var) pto_tmp__;					\
+		pto_tmp__ = (_val);					\
+		(void)pto_tmp__;					\
+	}								\
+	asm qual(__pcpu_op2_##size(op, "%[val]", __percpu_arg([var]))	\
+	    : [var] "+m" (_var)						\
+	    : [val] __pcpu_reg_imm_##size(pto_val__));			\
 } while (0)
 
+#define percpu_unary_op(size, qual, op, _var)				\
+({									\
+	asm qual (__pcpu_op1_##size(op, __percpu_arg([var]))		\
+	    : [var] "+m" (_var));					\
+})
+
 /*
  * Generate a percpu add to memory instruction and optimize code
  * if one is added or subtracted.
  */
-#define percpu_add_op(qual, var, val)					\
+#define percpu_add_op(size, qual, var, val)				\
 do {									\
-	typedef typeof(var) pao_T__;					\
 	const int pao_ID__ = (__builtin_constant_p(val) &&		\
 			      ((val) == 1 || (val) == -1)) ?		\
 				(int)(val) : 0;				\
 	if (0) {							\
-		pao_T__ pao_tmp__;					\
+		typeof(var) pao_tmp__;					\
 		pao_tmp__ = (val);					\
 		(void)pao_tmp__;					\
 	}								\
-	switch (sizeof(var)) {						\
-	case 1:								\
-		if (pao_ID__ == 1)					\
-			asm qual ("incb "__percpu_arg(0) : "+m" (var));	\
-		else if (pao_ID__ == -1)				\
-			asm qual ("decb "__percpu_arg(0) : "+m" (var));	\
-		else							\
-			asm qual ("addb %1, "__percpu_arg(0)		\
-			    : "+m" (var)				\
-			    : "qi" ((pao_T__)(val)));			\
-		break;							\
-	case 2:								\
-		if (pao_ID__ == 1)					\
-			asm qual ("incw "__percpu_arg(0) : "+m" (var));	\
-		else if (pao_ID__ == -1)				\
-			asm qual ("decw "__percpu_arg(0) : "+m" (var));	\
-		else							\
-			asm qual ("addw %1, "__percpu_arg(0)		\
-			    : "+m" (var)				\
-			    : "ri" ((pao_T__)(val)));			\
-		break;							\
-	case 4:								\
-		if (pao_ID__ == 1)					\
-			asm qual ("incl "__percpu_arg(0) : "+m" (var));	\
-		else if (pao_ID__ == -1)				\
-			asm qual ("decl "__percpu_arg(0) : "+m" (var));	\
-		else							\
-			asm qual ("addl %1, "__percpu_arg(0)		\
-			    : "+m" (var)				\
-			    : "ri" ((pao_T__)(val)));			\
-		break;							\
-	case 8:								\
-		if (pao_ID__ == 1)					\
-			asm qual ("incq "__percpu_arg(0) : "+m" (var));	\
-		else if (pao_ID__ == -1)				\
-			asm qual ("decq "__percpu_arg(0) : "+m" (var));	\
-		else							\
-			asm qual ("addq %1, "__percpu_arg(0)		\
-			    : "+m" (var)				\
-			    : "re" ((pao_T__)(val)));			\
-		break;							\
-	default: __bad_percpu_size();					\
-	}								\
+	if (pao_ID__ == 1)						\
+		percpu_unary_op(size, qual, "inc", var);		\
+	else if (pao_ID__ == -1)					\
+		percpu_unary_op(size, qual, "dec", var);		\
+	else								\
+		percpu_to_op(size, qual, "add", var, val);		\
 } while (0)
 
-#define percpu_from_op(qual, op, var)			\
-({							\
-	typeof(var) pfo_ret__;				\
-	switch (sizeof(var)) {				\
-	case 1:						\
-		asm qual (op "b "__percpu_arg(1)",%0"	\
-		    : "=q" (pfo_ret__)			\
-		    : "m" (var));			\
-		break;					\
-	case 2:						\
-		asm qual (op "w "__percpu_arg(1)",%0"	\
-		    : "=r" (pfo_ret__)			\
-		    : "m" (var));			\
-		break;					\
-	case 4:						\
-		asm qual (op "l "__percpu_arg(1)",%0"	\
-		    : "=r" (pfo_ret__)			\
-		    : "m" (var));			\
-		break;					\
-	case 8:						\
-		asm qual (op "q "__percpu_arg(1)",%0"	\
-		    : "=r" (pfo_ret__)			\
-		    : "m" (var));			\
-		break;					\
-	default: __bad_percpu_size();			\
-	}						\
-	pfo_ret__;					\
+#define percpu_from_op(size, qual, op, _var)				\
+({									\
+	__pcpu_type_##size pfo_val__;					\
+	asm qual (__pcpu_op2_##size(op, __percpu_arg([var]), "%[val]")	\
+	    : [val] __pcpu_reg_##size("=", pfo_val__)			\
+	    : [var] "m" (_var));					\
+	(typeof(_var))(unsigned long) pfo_val__;			\
 })
 
-#define percpu_stable_op(op, var)			\
-({							\
-	typeof(var) pfo_ret__;				\
-	switch (sizeof(var)) {				\
-	case 1:						\
-		asm(op "b "__percpu_arg(P1)",%0"	\
-		    : "=q" (pfo_ret__)			\
-		    : "p" (&(var)));			\
-		break;					\
-	case 2:						\
-		asm(op "w "__percpu_arg(P1)",%0"	\
-		    : "=r" (pfo_ret__)			\
-		    : "p" (&(var)));			\
-		break;					\
-	case 4:						\
-		asm(op "l "__percpu_arg(P1)",%0"	\
-		    : "=r" (pfo_ret__)			\
-		    : "p" (&(var)));			\
-		break;					\
-	case 8:						\
-		asm(op "q "__percpu_arg(P1)",%0"	\
-		    : "=r" (pfo_ret__)			\
-		    : "p" (&(var)));			\
-		break;					\
-	default: __bad_percpu_size();			\
-	}						\
-	pfo_ret__;					\
-})
-
-#define percpu_unary_op(qual, op, var)			\
-({							\
-	switch (sizeof(var)) {				\
-	case 1:						\
-		asm qual (op "b "__percpu_arg(0)	\
-		    : "+m" (var));			\
-		break;					\
-	case 2:						\
-		asm qual (op "w "__percpu_arg(0)	\
-		    : "+m" (var));			\
-		break;					\
-	case 4:						\
-		asm qual (op "l "__percpu_arg(0)	\
-		    : "+m" (var));			\
-		break;					\
-	case 8:						\
-		asm qual (op "q "__percpu_arg(0)	\
-		    : "+m" (var));			\
-		break;					\
-	default: __bad_percpu_size();			\
-	}						\
+#define percpu_stable_op(size, op, _var)				\
+({									\
+	__pcpu_type_##size pfo_val__;					\
+	asm(__pcpu_op2_##size(op, __percpu_arg(P[var]), "%[val]")	\
+	    : [val] __pcpu_reg_##size("=", pfo_val__)			\
+	    : [var] "p" (&(_var)));					\
+	(typeof(_var))(unsigned long) pfo_val__;			\
 })
 
 /*
  * Add return operation
  */
-#define percpu_add_return_op(qual, var, val)				\
+#define percpu_add_return_op(size, qual, _var, _val)			\
 ({									\
-	typeof(var) paro_ret__ = val;					\
-	switch (sizeof(var)) {						\
-	case 1:								\
-		asm qual ("xaddb %0, "__percpu_arg(1)			\
-			    : "+q" (paro_ret__), "+m" (var)		\
-			    : : "memory");				\
-		break;							\
-	case 2:								\
-		asm qual ("xaddw %0, "__percpu_arg(1)			\
-			    : "+r" (paro_ret__), "+m" (var)		\
-			    : : "memory");				\
-		break;							\
-	case 4:								\
-		asm qual ("xaddl %0, "__percpu_arg(1)			\
-			    : "+r" (paro_ret__), "+m" (var)		\
-			    : : "memory");				\
-		break;							\
-	case 8:								\
-		asm qual ("xaddq %0, "__percpu_arg(1)			\
-			    : "+re" (paro_ret__), "+m" (var)		\
-			    : : "memory");				\
-		break;							\
-	default: __bad_percpu_size();					\
-	}								\
-	paro_ret__ += val;						\
-	paro_ret__;							\
+	__pcpu_type_##size paro_tmp__ = __pcpu_cast_##size(_val);	\
+	asm qual (__pcpu_op2_##size("xadd", "%[tmp]",			\
+				     __percpu_arg([var]))		\
+		  : [tmp] __pcpu_reg_##size("+", paro_tmp__),		\
+		    [var] "+m" (_var)					\
+		  : : "memory");					\
+	(typeof(_var))(unsigned long) (paro_tmp__ + _val);		\
 })
 
 /*
@@ -299,85 +176,38 @@ do {									\
  * expensive due to the implied lock prefix.  The processor cannot prefetch
  * cachelines if xchg is used.
  */
-#define percpu_xchg_op(qual, var, nval)					\
+#define percpu_xchg_op(size, qual, _var, _nval)				\
 ({									\
-	typeof(var) pxo_ret__;						\
-	typeof(var) pxo_new__ = (nval);					\
-	switch (sizeof(var)) {						\
-	case 1:								\
-		asm qual ("\n\tmov "__percpu_arg(1)",%%al"		\
-		    "\n1:\tcmpxchgb %2, "__percpu_arg(1)		\
-		    "\n\tjnz 1b"					\
-			    : "=&a" (pxo_ret__), "+m" (var)		\
-			    : "q" (pxo_new__)				\
-			    : "memory");				\
-		break;							\
-	case 2:								\
-		asm qual ("\n\tmov "__percpu_arg(1)",%%ax"		\
-		    "\n1:\tcmpxchgw %2, "__percpu_arg(1)		\
-		    "\n\tjnz 1b"					\
-			    : "=&a" (pxo_ret__), "+m" (var)		\
-			    : "r" (pxo_new__)				\
-			    : "memory");				\
-		break;							\
-	case 4:								\
-		asm qual ("\n\tmov "__percpu_arg(1)",%%eax"		\
-		    "\n1:\tcmpxchgl %2, "__percpu_arg(1)		\
-		    "\n\tjnz 1b"					\
-			    : "=&a" (pxo_ret__), "+m" (var)		\
-			    : "r" (pxo_new__)				\
-			    : "memory");				\
-		break;							\
-	case 8:								\
-		asm qual ("\n\tmov "__percpu_arg(1)",%%rax"		\
-		    "\n1:\tcmpxchgq %2, "__percpu_arg(1)		\
-		    "\n\tjnz 1b"					\
-			    : "=&a" (pxo_ret__), "+m" (var)		\
-			    : "r" (pxo_new__)				\
-			    : "memory");				\
-		break;							\
-	default: __bad_percpu_size();					\
-	}								\
-	pxo_ret__;							\
+	__pcpu_type_##size pxo_old__;					\
+	__pcpu_type_##size pxo_new__ = __pcpu_cast_##size(_nval);	\
+	asm qual (__pcpu_op2_##size("mov", __percpu_arg([var]),		\
+				    "%[oval]")				\
+		  "\n1:\t"						\
+		  __pcpu_op2_##size("cmpxchg", "%[nval]",		\
+				    __percpu_arg([var]))		\
+		  "\n\tjnz 1b"						\
+		  : [oval] "=&a" (pxo_old__),				\
+		    [var] "+m" (_var)					\
+		  : [nval] __pcpu_reg_##size(, pxo_new__)		\
+		  : "memory");						\
+	(typeof(_var))(unsigned long) pxo_old__;			\
 })
 
 /*
  * cmpxchg has no such implied lock semantics as a result it is much
  * more efficient for cpu local operations.
  */
-#define percpu_cmpxchg_op(qual, var, oval, nval)			\
+#define percpu_cmpxchg_op(size, qual, _var, _oval, _nval)		\
 ({									\
-	typeof(var) pco_ret__;						\
-	typeof(var) pco_old__ = (oval);					\
-	typeof(var) pco_new__ = (nval);					\
-	switch (sizeof(var)) {						\
-	case 1:								\
-		asm qual ("cmpxchgb %2, "__percpu_arg(1)		\
-			    : "=a" (pco_ret__), "+m" (var)		\
-			    : "q" (pco_new__), "0" (pco_old__)		\
-			    : "memory");				\
-		break;							\
-	case 2:								\
-		asm qual ("cmpxchgw %2, "__percpu_arg(1)		\
-			    : "=a" (pco_ret__), "+m" (var)		\
-			    : "r" (pco_new__), "0" (pco_old__)		\
-			    : "memory");				\
-		break;							\
-	case 4:								\
-		asm qual ("cmpxchgl %2, "__percpu_arg(1)		\
-			    : "=a" (pco_ret__), "+m" (var)		\
-			    : "r" (pco_new__), "0" (pco_old__)		\
-			    : "memory");				\
-		break;							\
-	case 8:								\
-		asm qual ("cmpxchgq %2, "__percpu_arg(1)		\
-			    : "=a" (pco_ret__), "+m" (var)		\
-			    : "r" (pco_new__), "0" (pco_old__)		\
-			    : "memory");				\
-		break;							\
-	default: __bad_percpu_size();					\
-	}								\
-	pco_ret__;							\
+	__pcpu_type_##size pco_old__ = __pcpu_cast_##size(_oval);	\
+	__pcpu_type_##size pco_new__ = __pcpu_cast_##size(_nval);	\
+	asm qual (__pcpu_op2_##size("cmpxchg", "%[nval]",		\
+				    __percpu_arg([var]))		\
+		  : [oval] "+a" (pco_old__),				\
+		    [var] "+m" (_var)					\
+		  : [nval] __pcpu_reg_##size(, pco_new__)		\
+		  : "memory");						\
+	(typeof(_var))(unsigned long) pco_old__;			\
 })
 
 /*
@@ -389,24 +219,28 @@ do {									\
  * per-thread variables implemented as per-cpu variables and thus
  * stable for the duration of the respective task.
  */
-#define this_cpu_read_stable(var)	percpu_stable_op("mov", var)
+#define this_cpu_read_stable_1(pcp)	percpu_stable_op(1, "mov", pcp)
+#define this_cpu_read_stable_2(pcp)	percpu_stable_op(2, "mov", pcp)
+#define this_cpu_read_stable_4(pcp)	percpu_stable_op(4, "mov", pcp)
+#define this_cpu_read_stable_8(pcp)	percpu_stable_op(8, "mov", pcp)
+#define this_cpu_read_stable(pcp)	__pcpu_size_call_return(this_cpu_read_stable_, pcp)
 
-#define raw_cpu_read_1(pcp)		percpu_from_op(, "mov", pcp)
-#define raw_cpu_read_2(pcp)		percpu_from_op(, "mov", pcp)
-#define raw_cpu_read_4(pcp)		percpu_from_op(, "mov", pcp)
+#define raw_cpu_read_1(pcp)		percpu_from_op(1, , "mov", pcp)
+#define raw_cpu_read_2(pcp)		percpu_from_op(2, , "mov", pcp)
+#define raw_cpu_read_4(pcp)		percpu_from_op(4, , "mov", pcp)
 
-#define raw_cpu_write_1(pcp, val)	percpu_to_op(, "mov", (pcp), val)
-#define raw_cpu_write_2(pcp, val)	percpu_to_op(, "mov", (pcp), val)
-#define raw_cpu_write_4(pcp, val)	percpu_to_op(, "mov", (pcp), val)
-#define raw_cpu_add_1(pcp, val)		percpu_add_op(, (pcp), val)
-#define raw_cpu_add_2(pcp, val)		percpu_add_op(, (pcp), val)
-#define raw_cpu_add_4(pcp, val)		percpu_add_op(, (pcp), val)
-#define raw_cpu_and_1(pcp, val)		percpu_to_op(, "and", (pcp), val)
-#define raw_cpu_and_2(pcp, val)		percpu_to_op(, "and", (pcp), val)
-#define raw_cpu_and_4(pcp, val)		percpu_to_op(, "and", (pcp), val)
-#define raw_cpu_or_1(pcp, val)		percpu_to_op(, "or", (pcp), val)
-#define raw_cpu_or_2(pcp, val)		percpu_to_op(, "or", (pcp), val)
-#define raw_cpu_or_4(pcp, val)		percpu_to_op(, "or", (pcp), val)
+#define raw_cpu_write_1(pcp, val)	percpu_to_op(1, , "mov", (pcp), val)
+#define raw_cpu_write_2(pcp, val)	percpu_to_op(2, , "mov", (pcp), val)
+#define raw_cpu_write_4(pcp, val)	percpu_to_op(4, , "mov", (pcp), val)
+#define raw_cpu_add_1(pcp, val)		percpu_add_op(1, , (pcp), val)
+#define raw_cpu_add_2(pcp, val)		percpu_add_op(2, , (pcp), val)
+#define raw_cpu_add_4(pcp, val)		percpu_add_op(4, , (pcp), val)
+#define raw_cpu_and_1(pcp, val)		percpu_to_op(1, , "and", (pcp), val)
+#define raw_cpu_and_2(pcp, val)		percpu_to_op(2, , "and", (pcp), val)
+#define raw_cpu_and_4(pcp, val)		percpu_to_op(4, , "and", (pcp), val)
+#define raw_cpu_or_1(pcp, val)		percpu_to_op(1, , "or", (pcp), val)
+#define raw_cpu_or_2(pcp, val)		percpu_to_op(2, , "or", (pcp), val)
+#define raw_cpu_or_4(pcp, val)		percpu_to_op(4, , "or", (pcp), val)
 
 /*
  * raw_cpu_xchg() can use a load-store since it is not required to be
@@ -423,38 +257,38 @@ do {									\
 #define raw_cpu_xchg_2(pcp, val)	raw_percpu_xchg_op(pcp, val)
 #define raw_cpu_xchg_4(pcp, val)	raw_percpu_xchg_op(pcp, val)
 
-#define this_cpu_read_1(pcp)		percpu_from_op(volatile, "mov", pcp)
-#define this_cpu_read_2(pcp)		percpu_from_op(volatile, "mov", pcp)
-#define this_cpu_read_4(pcp)		percpu_from_op(volatile, "mov", pcp)
-#define this_cpu_write_1(pcp, val)	percpu_to_op(volatile, "mov", (pcp), val)
-#define this_cpu_write_2(pcp, val)	percpu_to_op(volatile, "mov", (pcp), val)
-#define this_cpu_write_4(pcp, val)	percpu_to_op(volatile, "mov", (pcp), val)
-#define this_cpu_add_1(pcp, val)	percpu_add_op(volatile, (pcp), val)
-#define this_cpu_add_2(pcp, val)	percpu_add_op(volatile, (pcp), val)
-#define this_cpu_add_4(pcp, val)	percpu_add_op(volatile, (pcp), val)
-#define this_cpu_and_1(pcp, val)	percpu_to_op(volatile, "and", (pcp), val)
-#define this_cpu_and_2(pcp, val)	percpu_to_op(volatile, "and", (pcp), val)
-#define this_cpu_and_4(pcp, val)	percpu_to_op(volatile, "and", (pcp), val)
-#define this_cpu_or_1(pcp, val)		percpu_to_op(volatile, "or", (pcp), val)
-#define this_cpu_or_2(pcp, val)		percpu_to_op(volatile, "or", (pcp), val)
-#define this_cpu_or_4(pcp, val)		percpu_to_op(volatile, "or", (pcp), val)
-#define this_cpu_xchg_1(pcp, nval)	percpu_xchg_op(volatile, pcp, nval)
-#define this_cpu_xchg_2(pcp, nval)	percpu_xchg_op(volatile, pcp, nval)
-#define this_cpu_xchg_4(pcp, nval)	percpu_xchg_op(volatile, pcp, nval)
+#define this_cpu_read_1(pcp)		percpu_from_op(1, volatile, "mov", pcp)
+#define this_cpu_read_2(pcp)		percpu_from_op(2, volatile, "mov", pcp)
+#define this_cpu_read_4(pcp)		percpu_from_op(4, volatile, "mov", pcp)
+#define this_cpu_write_1(pcp, val)	percpu_to_op(1, volatile, "mov", (pcp), val)
+#define this_cpu_write_2(pcp, val)	percpu_to_op(2, volatile, "mov", (pcp), val)
+#define this_cpu_write_4(pcp, val)	percpu_to_op(4, volatile, "mov", (pcp), val)
+#define this_cpu_add_1(pcp, val)	percpu_add_op(1, volatile, (pcp), val)
+#define this_cpu_add_2(pcp, val)	percpu_add_op(2, volatile, (pcp), val)
+#define this_cpu_add_4(pcp, val)	percpu_add_op(4, volatile, (pcp), val)
+#define this_cpu_and_1(pcp, val)	percpu_to_op(1, volatile, "and", (pcp), val)
+#define this_cpu_and_2(pcp, val)	percpu_to_op(2, volatile, "and", (pcp), val)
+#define this_cpu_and_4(pcp, val)	percpu_to_op(4, volatile, "and", (pcp), val)
+#define this_cpu_or_1(pcp, val)		percpu_to_op(1, volatile, "or", (pcp), val)
+#define this_cpu_or_2(pcp, val)		percpu_to_op(2, volatile, "or", (pcp), val)
+#define this_cpu_or_4(pcp, val)		percpu_to_op(4, volatile, "or", (pcp), val)
+#define this_cpu_xchg_1(pcp, nval)	percpu_xchg_op(1, volatile, pcp, nval)
+#define this_cpu_xchg_2(pcp, nval)	percpu_xchg_op(2, volatile, pcp, nval)
+#define this_cpu_xchg_4(pcp, nval)	percpu_xchg_op(4, volatile, pcp, nval)
 
-#define raw_cpu_add_return_1(pcp, val)		percpu_add_return_op(, pcp, val)
-#define raw_cpu_add_return_2(pcp, val)		percpu_add_return_op(, pcp, val)
-#define raw_cpu_add_return_4(pcp, val)		percpu_add_return_op(, pcp, val)
-#define raw_cpu_cmpxchg_1(pcp, oval, nval)	percpu_cmpxchg_op(, pcp, oval, nval)
-#define raw_cpu_cmpxchg_2(pcp, oval, nval)	percpu_cmpxchg_op(, pcp, oval, nval)
-#define raw_cpu_cmpxchg_4(pcp, oval, nval)	percpu_cmpxchg_op(, pcp, oval, nval)
+#define raw_cpu_add_return_1(pcp, val)		percpu_add_return_op(1, , pcp, val)
+#define raw_cpu_add_return_2(pcp, val)		percpu_add_return_op(2, , pcp, val)
+#define raw_cpu_add_return_4(pcp, val)		percpu_add_return_op(4, , pcp, val)
+#define raw_cpu_cmpxchg_1(pcp, oval, nval)	percpu_cmpxchg_op(1, , pcp, oval, nval)
+#define raw_cpu_cmpxchg_2(pcp, oval, nval)	percpu_cmpxchg_op(2, , pcp, oval, nval)
+#define raw_cpu_cmpxchg_4(pcp, oval, nval)	percpu_cmpxchg_op(4, , pcp, oval, nval)
 
-#define this_cpu_add_return_1(pcp, val)		percpu_add_return_op(volatile, pcp, val)
-#define this_cpu_add_return_2(pcp, val)		percpu_add_return_op(volatile, pcp, val)
-#define this_cpu_add_return_4(pcp, val)		percpu_add_return_op(volatile, pcp, val)
-#define this_cpu_cmpxchg_1(pcp, oval, nval)	percpu_cmpxchg_op(volatile, pcp, oval, nval)
-#define this_cpu_cmpxchg_2(pcp, oval, nval)	percpu_cmpxchg_op(volatile, pcp, oval, nval)
-#define this_cpu_cmpxchg_4(pcp, oval, nval)	percpu_cmpxchg_op(volatile, pcp, oval, nval)
+#define this_cpu_add_return_1(pcp, val)		percpu_add_return_op(1, volatile, pcp, val)
+#define this_cpu_add_return_2(pcp, val)		percpu_add_return_op(2, volatile, pcp, val)
+#define this_cpu_add_return_4(pcp, val)		percpu_add_return_op(4, volatile, pcp, val)
+#define this_cpu_cmpxchg_1(pcp, oval, nval)	percpu_cmpxchg_op(1, volatile, pcp, oval, nval)
+#define this_cpu_cmpxchg_2(pcp, oval, nval)	percpu_cmpxchg_op(2, volatile, pcp, oval, nval)
+#define this_cpu_cmpxchg_4(pcp, oval, nval)	percpu_cmpxchg_op(4, volatile, pcp, oval, nval)
 
 #ifdef CONFIG_X86_CMPXCHG64
 #define percpu_cmpxchg8b_double(pcp1, pcp2, o1, o2, n1, n2)		\
@@ -478,23 +312,23 @@ do {									\
  * 32 bit must fall back to generic operations.
  */
 #ifdef CONFIG_X86_64
-#define raw_cpu_read_8(pcp)			percpu_from_op(, "mov", pcp)
-#define raw_cpu_write_8(pcp, val)		percpu_to_op(, "mov", (pcp), val)
-#define raw_cpu_add_8(pcp, val)			percpu_add_op(, (pcp), val)
-#define raw_cpu_and_8(pcp, val)			percpu_to_op(, "and", (pcp), val)
-#define raw_cpu_or_8(pcp, val)			percpu_to_op(, "or", (pcp), val)
-#define raw_cpu_add_return_8(pcp, val)		percpu_add_return_op(, pcp, val)
+#define raw_cpu_read_8(pcp)			percpu_from_op(8, , "mov", pcp)
+#define raw_cpu_write_8(pcp, val)		percpu_to_op(8, , "mov", (pcp), val)
+#define raw_cpu_add_8(pcp, val)			percpu_add_op(8, , (pcp), val)
+#define raw_cpu_and_8(pcp, val)			percpu_to_op(8, , "and", (pcp), val)
+#define raw_cpu_or_8(pcp, val)			percpu_to_op(8, , "or", (pcp), val)
+#define raw_cpu_add_return_8(pcp, val)		percpu_add_return_op(8, , pcp, val)
 #define raw_cpu_xchg_8(pcp, nval)		raw_percpu_xchg_op(pcp, nval)
-#define raw_cpu_cmpxchg_8(pcp, oval, nval)	percpu_cmpxchg_op(, pcp, oval, nval)
+#define raw_cpu_cmpxchg_8(pcp, oval, nval)	percpu_cmpxchg_op(8, , pcp, oval, nval)
 
-#define this_cpu_read_8(pcp)			percpu_from_op(volatile, "mov", pcp)
-#define this_cpu_write_8(pcp, val)		percpu_to_op(volatile, "mov", (pcp), val)
-#define this_cpu_add_8(pcp, val)		percpu_add_op(volatile, (pcp), val)
-#define this_cpu_and_8(pcp, val)		percpu_to_op(volatile, "and", (pcp), val)
-#define this_cpu_or_8(pcp, val)			percpu_to_op(volatile, "or", (pcp), val)
-#define this_cpu_add_return_8(pcp, val)		percpu_add_return_op(volatile, pcp, val)
-#define this_cpu_xchg_8(pcp, nval)		percpu_xchg_op(volatile, pcp, nval)
-#define this_cpu_cmpxchg_8(pcp, oval, nval)	percpu_cmpxchg_op(volatile, pcp, oval, nval)
+#define this_cpu_read_8(pcp)			percpu_from_op(8, volatile, "mov", pcp)
+#define this_cpu_write_8(pcp, val)		percpu_to_op(8, volatile, "mov", (pcp), val)
+#define this_cpu_add_8(pcp, val)		percpu_add_op(8, volatile, (pcp), val)
+#define this_cpu_and_8(pcp, val)		percpu_to_op(8, volatile, "and", (pcp), val)
+#define this_cpu_or_8(pcp, val)			percpu_to_op(8, volatile, "or", (pcp), val)
+#define this_cpu_add_return_8(pcp, val)		percpu_add_return_op(8, volatile, pcp, val)
+#define this_cpu_xchg_8(pcp, nval)		percpu_xchg_op(8, volatile, pcp, nval)
+#define this_cpu_cmpxchg_8(pcp, oval, nval)	percpu_cmpxchg_op(8, volatile, pcp, oval, nval)
 
 /*
  * Pretty complex macro to generate cmpxchg16 instruction.  The instruction
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index a07dfdf7..e2f00cc 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -24,6 +24,7 @@ struct vm86;
 #include <asm/special_insns.h>
 #include <asm/fpu/types.h>
 #include <asm/unwind_hints.h>
+#include <asm/vdso/processor.h>
 
 #include <linux/personality.h>
 #include <linux/cache.h>
@@ -644,17 +645,6 @@ static inline unsigned int cpuid_edx(unsigned int op)
 	return edx;
 }
 
-/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
-static __always_inline void rep_nop(void)
-{
-	asm volatile("rep; nop" ::: "memory");
-}
-
-static __always_inline void cpu_relax(void)
-{
-	rep_nop();
-}
-
 /*
  * This function forces the icache and prefetched instruction stream to
  * catch up with reality in two very specific cases:
diff --git a/arch/x86/include/asm/seccomp.h b/arch/x86/include/asm/seccomp.h
index 2bd1338..fef16e3 100644
--- a/arch/x86/include/asm/seccomp.h
+++ b/arch/x86/include/asm/seccomp.h
@@ -16,6 +16,26 @@
 #define __NR_seccomp_sigreturn_32	__NR_ia32_sigreturn
 #endif
 
+#ifdef CONFIG_X86_64
+# define SECCOMP_ARCH_NATIVE		AUDIT_ARCH_X86_64
+# define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+# define SECCOMP_ARCH_NATIVE_NAME	"x86_64"
+# ifdef CONFIG_COMPAT
+#  define SECCOMP_ARCH_COMPAT		AUDIT_ARCH_I386
+#  define SECCOMP_ARCH_COMPAT_NR	IA32_NR_syscalls
+#  define SECCOMP_ARCH_COMPAT_NAME	"ia32"
+# endif
+/*
+ * x32 will have __X32_SYSCALL_BIT set in syscall number. We don't support
+ * caching them and they are treated as out of range syscalls, which will
+ * always pass through the BPF filter.
+ */
+#else /* !CONFIG_X86_64 */
+# define SECCOMP_ARCH_NATIVE		AUDIT_ARCH_I386
+# define SECCOMP_ARCH_NATIVE_NR	        NR_syscalls
+# define SECCOMP_ARCH_NATIVE_NAME	"ia32"
+#endif
+
 #include <asm-generic/seccomp.h>
 
 #endif /* _ASM_X86_SECCOMP_H */
diff --git a/arch/x86/include/asm/sections.h b/arch/x86/include/asm/sections.h
index 71b32f2..9319c5c 100644
--- a/arch/x86/include/asm/sections.h
+++ b/arch/x86/include/asm/sections.h
@@ -6,7 +6,7 @@
 #include <asm/extable.h>
 
 extern char __brk_base[], __brk_limit[];
-extern struct exception_table_entry __stop___ex_table[];
+extern char __cfi_jt_start[], __cfi_jt_end[];
 extern char __end_rodata_aligned[];
 
 #if defined(CONFIG_X86_64)
diff --git a/arch/x86/include/asm/uaccess.h b/arch/x86/include/asm/uaccess.h
index 61d93f0..a99167c 100644
--- a/arch/x86/include/asm/uaccess.h
+++ b/arch/x86/include/asm/uaccess.h
@@ -345,11 +345,14 @@ do {									\
 
 #define __get_user_size(x, ptr, size, retval, errret)			\
 do {									\
+	unsigned char x_u8__;						\
+									\
 	retval = 0;							\
 	__chk_user_ptr(ptr);						\
 	switch (size) {							\
 	case 1:								\
-		__get_user_asm(x, ptr, retval, "b", "b", "=q", errret);	\
+		__get_user_asm(x_u8__, ptr, retval, "b", "b", "=q", errret);	\
+		(x) = x_u8__;						\
 		break;							\
 	case 2:								\
 		__get_user_asm(x, ptr, retval, "w", "w", "=r", errret);	\
diff --git a/arch/x86/include/asm/vdso/clocksource.h b/arch/x86/include/asm/vdso/clocksource.h
new file mode 100644
index 0000000..17aa179
--- /dev/null
+++ b/arch/x86/include/asm/vdso/clocksource.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __ASM_VDSO_CLOCKSOURCE_H
+#define __ASM_VDSO_CLOCKSOURCE_H
+
+#define VCLOCK_NONE	0	/* No vDSO clock available.		*/
+#define VCLOCK_TSC	1	/* vDSO should use vread_tsc.		*/
+#define VCLOCK_PVCLOCK	2	/* vDSO should use vread_pvclock.	*/
+#define VCLOCK_HVCLOCK	3	/* vDSO should use vread_hvclock.	*/
+#define VCLOCK_MAX	3
+
+#endif /* __ASM_VDSO_CLOCKSOURCE_H */
diff --git a/arch/x86/include/asm/vdso/processor.h b/arch/x86/include/asm/vdso/processor.h
new file mode 100644
index 0000000..57b1a70
--- /dev/null
+++ b/arch/x86/include/asm/vdso/processor.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2020 ARM Ltd.
+ */
+#ifndef __ASM_VDSO_PROCESSOR_H
+#define __ASM_VDSO_PROCESSOR_H
+
+#ifndef __ASSEMBLY__
+
+/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
+static __always_inline void rep_nop(void)
+{
+	asm volatile("rep; nop" ::: "memory");
+}
+
+static __always_inline void cpu_relax(void)
+{
+	rep_nop();
+}
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __ASM_VDSO_PROCESSOR_H */
diff --git a/arch/x86/include/asm/vgtod.h b/arch/x86/include/asm/vgtod.h
index a2638c6..f3fe005 100644
--- a/arch/x86/include/asm/vgtod.h
+++ b/arch/x86/include/asm/vgtod.h
@@ -2,6 +2,11 @@
 #ifndef _ASM_X86_VGTOD_H
 #define _ASM_X86_VGTOD_H
 
+/*
+ * This check is required to prevent ARCH=um to include
+ * unwanted headers.
+ */
+#ifdef CONFIG_GENERIC_GETTIMEOFDAY
 #include <linux/compiler.h>
 #include <asm/clocksource.h>
 #include <vdso/datapage.h>
@@ -14,6 +19,7 @@ typedef u64 gtod_long_t;
 #else
 typedef unsigned long gtod_long_t;
 #endif
+#endif /* CONFIG_GENERIC_GETTIMEOFDAY */
 
 extern int vclocks_used;
 static inline bool vclock_was_used(int vclock)
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
index 9d3a971..efb5ef8 100644
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
@@ -625,23 +625,10 @@ extern struct paravirt_patch_site __start_parainstructions[],
  *
  * See entry_{32,64}.S for more details.
  */
-
-/*
- * We define the int3_magic() function in assembly to control the calling
- * convention such that we can 'call' it from assembly.
- */
-
-extern void int3_magic(unsigned int *ptr); /* defined in asm */
-
-asm (
-"	.pushsection	.init.text, \"ax\", @progbits\n"
-"	.type		int3_magic, @function\n"
-"int3_magic:\n"
-"	movl	$1, (%" _ASM_ARG1 ")\n"
-"	ret\n"
-"	.size		int3_magic, .-int3_magic\n"
-"	.popsection\n"
-);
+static void __init __no_sanitize_address notrace int3_magic(unsigned int *ptr)
+{
+	*ptr = 1;
+}
 
 extern __initdata unsigned long int3_selftest_ip; /* defined in asm below */
 
diff --git a/arch/x86/kernel/cpu/resctrl/pseudo_lock.c b/arch/x86/kernel/cpu/resctrl/pseudo_lock.c
index d7623e1..ed4b115 100644
--- a/arch/x86/kernel/cpu/resctrl/pseudo_lock.c
+++ b/arch/x86/kernel/cpu/resctrl/pseudo_lock.c
@@ -1458,7 +1458,7 @@ static int pseudo_lock_dev_release(struct inode *inode, struct file *filp)
 	return 0;
 }
 
-static int pseudo_lock_dev_mremap(struct vm_area_struct *area)
+static int pseudo_lock_dev_mremap(struct vm_area_struct *area, unsigned long flags)
 {
 	/* Not supported */
 	return -EINVAL;
diff --git a/arch/x86/kernel/livepatch.c b/arch/x86/kernel/livepatch.c
index 6a68e41..35fa60d 100644
--- a/arch/x86/kernel/livepatch.c
+++ b/arch/x86/kernel/livepatch.c
@@ -24,12 +24,12 @@ void arch_klp_init_object_loaded(struct klp_patch *patch,
 	objname = obj->name ? obj->name : "vmlinux";
 
 	/* See livepatch core code for BUILD_BUG_ON() explanation */
-	BUILD_BUG_ON(MODULE_NAME_LEN < 56 || KSYM_NAME_LEN != 128);
+	BUILD_BUG_ON(MODULE_NAME_LEN < 56 || KSYM_NAME_LEN != 192);
 
 	for (s = info->sechdrs; s < info->sechdrs + info->hdr.e_shnum; s++) {
 		/* Apply per-object .klp.arch sections */
 		cnt = sscanf(info->secstrings + s->sh_name,
-			     ".klp.arch.%55[^.].%127s",
+			     ".klp.arch.%55[^.].%191s",
 			     sec_objname, secname);
 		if (cnt != 2)
 			continue;
diff --git a/arch/x86/kernel/module.c b/arch/x86/kernel/module.c
index d5c72cb..e139982 100644
--- a/arch/x86/kernel/module.c
+++ b/arch/x86/kernel/module.c
@@ -195,6 +195,10 @@ int apply_relocate_add(Elf64_Shdr *sechdrs,
 			val -= (u64)loc;
 			*(u64 *)loc = val;
 			break;
+		case R_X86_64_8:
+			if (!strncmp(strtab + sym->st_name, "__typeid__", 10))
+				break;
+			/* fallthrough */
 		default:
 			pr_err("%s: Unknown rela relocation: %llu\n",
 			       me->name, ELF64_R_TYPE(rel[i].r_info));
diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
index 1afe211..1f82257 100644
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -142,16 +142,22 @@
 		__indirect_thunk_end = .;
 #endif
 
-		/* End of text section */
-		_etext = .;
+#ifdef CONFIG_CFI_CLANG
+		. = ALIGN(PAGE_SIZE);
+		__cfi_jt_start = .;
+		*(.text..L.cfi.jumptable .text..L.cfi.jumptable.*)
+		__cfi_jt_end = .;
+#endif
 	} :text = 0x9090
 
 	NOTES :text :note
 
 	EXCEPTION_TABLE(16) :text = 0x9090
 
-	/* .text should occupy whole number of pages */
+	/* End of text section, which should occupy whole number of pages */
+	_etext = .;
 	. = ALIGN(PAGE_SIZE);
+
 	X86_ALIGN_RODATA_BEGIN
 	RO_DATA(PAGE_SIZE)
 	X86_ALIGN_RODATA_END
@@ -459,3 +465,7 @@
            "kexec control code size is too big");
 #endif
 
+#ifdef CONFIG_CFI_CLANG
+. = ASSERT((__cfi_jt_end - __cfi_jt_start > 0),
+	   "CFI jump table is empty");
+#endif
diff --git a/arch/x86/mm/extable.c b/arch/x86/mm/extable.c
index 4d75bc6..3cacb49 100644
--- a/arch/x86/mm/extable.c
+++ b/arch/x86/mm/extable.c
@@ -199,6 +199,7 @@ __visible bool ex_has_fault_handler(unsigned long ip)
 	return handler == ex_handler_fault;
 }
 
+__nocfi
 int fixup_exception(struct pt_regs *regs, int trapnr, unsigned long error_code,
 		    unsigned long fault_addr)
 {
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
index c494c8c..c9a1fd1 100644
--- a/arch/x86/mm/fault.c
+++ b/arch/x86/mm/fault.c
@@ -9,6 +9,7 @@
 #include <linux/kdebug.h>		/* oops_begin/end, ...		*/
 #include <linux/extable.h>		/* search_exception_tables	*/
 #include <linux/memblock.h>		/* max_low_pfn			*/
+#include <linux/kfence.h>		/* kfence_handle_page_fault	*/
 #include <linux/kprobes.h>		/* NOKPROBE_SYMBOL, ...		*/
 #include <linux/mmiotrace.h>		/* kmmio_handler, ...		*/
 #include <linux/perf_event.h>		/* perf_sw_event		*/
@@ -826,6 +827,11 @@ no_context(struct pt_regs *regs, unsigned long error_code,
 	if (IS_ENABLED(CONFIG_EFI))
 		efi_recover_from_page_fault(address);
 
+	/* Only not-present faults should be handled by KFENCE. */
+	if (!(error_code & X86_PF_PROT) &&
+	    kfence_handle_page_fault(address, error_code & X86_PF_WRITE, regs))
+		return;
+
 oops:
 	/*
 	 * Oops. The kernel tried to access some bad page. We'll have to
@@ -1309,7 +1315,7 @@ void do_user_addr_fault(struct pt_regs *regs,
 	struct task_struct *tsk;
 	struct mm_struct *mm;
 	vm_fault_t fault, major = 0;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	tsk = current;
 	mm = tsk->mm;
@@ -1463,27 +1469,23 @@ void do_user_addr_fault(struct pt_regs *regs,
 	fault = handle_mm_fault(vma, address, flags);
 	major |= fault & VM_FAULT_MAJOR;
 
+	/* Quick path to respond to signals */
+	if (fault_signal_pending(fault, regs)) {
+		if (!user_mode(regs))
+			no_context(regs, hw_error_code, address, SIGBUS,
+				   BUS_ADRERR);
+		return;
+	}
+
 	/*
 	 * If we need to retry the mmap_sem has already been released,
 	 * and if there is a fatal signal pending there is no guarantee
 	 * that we made any progress. Handle this case first.
 	 */
-	if (unlikely(fault & VM_FAULT_RETRY)) {
-		/* Retry at most once */
-		if (flags & FAULT_FLAG_ALLOW_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
-			flags |= FAULT_FLAG_TRIED;
-			if (!fatal_signal_pending(tsk))
-				goto retry;
-		}
-
-		/* User mode? Just return to handle the fatal exception */
-		if (flags & FAULT_FLAG_USER)
-			return;
-
-		/* Not returning to user mode? Handle exceptions or die: */
-		no_context(regs, hw_error_code, address, SIGBUS, BUS_ADRERR);
-		return;
+	if (unlikely((fault & VM_FAULT_RETRY) &&
+		     (flags & FAULT_FLAG_ALLOW_RETRY))) {
+		flags |= FAULT_FLAG_TRIED;
+		goto retry;
 	}
 
 	up_read(&mm->mmap_sem);
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index b8541d7..fb2a9da7 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -1261,7 +1261,7 @@ int kernel_set_to_readonly;
 void set_kernel_text_rw(void)
 {
 	unsigned long start = PFN_ALIGN(_text);
-	unsigned long end = PFN_ALIGN(__stop___ex_table);
+	unsigned long end = PFN_ALIGN(_etext);
 
 	if (!kernel_set_to_readonly)
 		return;
@@ -1280,7 +1280,7 @@ void set_kernel_text_rw(void)
 void set_kernel_text_ro(void)
 {
 	unsigned long start = PFN_ALIGN(_text);
-	unsigned long end = PFN_ALIGN(__stop___ex_table);
+	unsigned long end = PFN_ALIGN(_etext);
 
 	if (!kernel_set_to_readonly)
 		return;
@@ -1299,7 +1299,7 @@ void mark_rodata_ro(void)
 	unsigned long start = PFN_ALIGN(_text);
 	unsigned long rodata_start = PFN_ALIGN(__start_rodata);
 	unsigned long end = (unsigned long) &__end_rodata_hpage_align;
-	unsigned long text_end = PFN_ALIGN(&__stop___ex_table);
+	unsigned long text_end = PFN_ALIGN(&_etext);
 	unsigned long rodata_end = PFN_ALIGN(&__end_rodata);
 	unsigned long all_end;
 
diff --git a/arch/x86/mm/pti.c b/arch/x86/mm/pti.c
index 7f21404..6b68c19 100644
--- a/arch/x86/mm/pti.c
+++ b/arch/x86/mm/pti.c
@@ -505,6 +505,15 @@ static void pti_clone_entry_text(void)
 	pti_clone_pgtable((unsigned long) __entry_text_start,
 			  (unsigned long) __irqentry_text_end,
 			  PTI_CLONE_PMD);
+
+	/*
+	 * If CFI is enabled, also map jump tables, so the entry code can
+	 * make indirect calls.
+	 */
+	if (IS_ENABLED(CONFIG_CFI_CLANG))
+		pti_clone_pgtable((unsigned long) __cfi_jt_start,
+				  (unsigned long) __cfi_jt_end,
+				  PTI_CLONE_PMD);
 }
 
 /*
@@ -574,7 +583,7 @@ static void pti_clone_kernel_text(void)
 	 */
 	unsigned long start = PFN_ALIGN(_text);
 	unsigned long end_clone  = (unsigned long)__end_rodata_aligned;
-	unsigned long end_global = PFN_ALIGN((unsigned long)__stop___ex_table);
+	unsigned long end_global = PFN_ALIGN((unsigned long)_etext);
 
 	if (!pti_kernel_image_global_ok())
 		return;
diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c
index 915bb16..14863ad 100644
--- a/arch/x86/power/cpu.c
+++ b/arch/x86/power/cpu.c
@@ -268,6 +268,19 @@ static void notrace __restore_processor_state(struct saved_context *ctxt)
 /* Needed by apm.c */
 void notrace restore_processor_state(void)
 {
+#ifdef __clang__
+	// The following code snippet is copied from __restore_processor_state.
+	// Its purpose is to prepare GS segment before the function is called.
+	// Since the function is compiled with SCS on, it will use GS at its
+	// entry.
+	// TODO: Hack to be removed later when compiler bug is fixed.
+#ifdef CONFIG_X86_64
+	wrmsrl(MSR_GS_BASE, saved_context.kernelmode_gs_base);
+#else
+	loadsegment(fs, __KERNEL_PERCPU);
+	loadsegment(gs, __KERNEL_STACK_CANARY);
+#endif
+#endif
 	__restore_processor_state(&saved_context);
 }
 #ifdef CONFIG_X86_32
diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c
index ce7188c..78b9568 100644
--- a/arch/x86/tools/relocs.c
+++ b/arch/x86/tools/relocs.c
@@ -48,6 +48,7 @@ static const char * const sym_regex_kernel[S_NSYMTYPES] = {
 	"^(xen_irq_disable_direct_reloc$|"
 	"xen_save_fl_direct_reloc$|"
 	"VDSO|"
+	"__typeid__|"
 	"__crc_)",
 
 /*
@@ -78,6 +79,8 @@ static const char * const sym_regex_kernel[S_NSYMTYPES] = {
 	"__end_rodata_hpage_align|"
 #endif
 	"__vvar_page|"
+	"_etext|"
+	"__end_of_kernel_reserve|"
 	"_end)$"
 };
 
@@ -808,6 +811,12 @@ static int do_reloc64(struct section *sec, Elf_Rel *rel, ElfW(Sym) *sym,
 			    symname);
 		break;
 
+	case R_X86_64_8:
+		if (!shn_abs || !is_reloc(S_ABS, symname))
+			die("Non-whitelisted %s relocation: %s\n",
+				rel_type(r_type), symname);
+		break;
+
 	case R_X86_64_32:
 	case R_X86_64_32S:
 	case R_X86_64_64:
diff --git a/arch/xtensa/include/asm/seccomp.h b/arch/xtensa/include/asm/seccomp.h
new file mode 100644
index 0000000..f1cb6b0
--- /dev/null
+++ b/arch/xtensa/include/asm/seccomp.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef _ASM_SECCOMP_H
+#define _ASM_SECCOMP_H
+
+#include <asm-generic/seccomp.h>
+
+#define SECCOMP_ARCH_NATIVE		AUDIT_ARCH_XTENSA
+#define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+#define SECCOMP_ARCH_NATIVE_NAME	"xtensa"
+
+#endif /* _ASM_SECCOMP_H */
diff --git a/arch/xtensa/kernel/syscalls/syscall.tbl b/arch/xtensa/kernel/syscalls/syscall.tbl
index 25f4de7..8a717ec 100644
--- a/arch/xtensa/kernel/syscalls/syscall.tbl
+++ b/arch/xtensa/kernel/syscalls/syscall.tbl
@@ -406,3 +406,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 435	common	clone3				sys_clone3
+440	common	process_madvise		sys_process_madvise
\ No newline at end of file
diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c
index f81b147..c97c2c8 100644
--- a/arch/xtensa/mm/fault.c
+++ b/arch/xtensa/mm/fault.c
@@ -43,7 +43,7 @@ void do_page_fault(struct pt_regs *regs)
 
 	int is_write, is_exec;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	code = SEGV_MAPERR;
 
@@ -110,7 +110,7 @@ void do_page_fault(struct pt_regs *regs)
 	 */
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -128,7 +128,6 @@ void do_page_fault(struct pt_regs *regs)
 		else
 			current->min_flt++;
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			 /* No need to up_read(&mm->mmap_sem) as we would
diff --git a/block/Kconfig b/block/Kconfig
index 41c0917..0b651f3 100644
--- a/block/Kconfig
+++ b/block/Kconfig
@@ -177,6 +177,23 @@
 	Enabling this option enables users to setup/unlock/lock
 	Locking ranges for SED devices using the Opal protocol.
 
+config BLK_INLINE_ENCRYPTION
+	bool "Enable inline encryption support in block layer"
+	help
+	  Build the blk-crypto subsystem. Enabling this lets the
+	  block layer handle encryption, so users can take
+	  advantage of inline encryption hardware if present.
+
+config BLK_INLINE_ENCRYPTION_FALLBACK
+	bool "Enable crypto API fallback for blk-crypto"
+	depends on BLK_INLINE_ENCRYPTION
+	select CRYPTO
+	select CRYPTO_BLKCIPHER
+	help
+	  Enabling this lets the block layer handle inline encryption
+	  by falling back to the kernel crypto API when inline
+	  encryption hardware is not present.
+
 menu "Partition Types"
 
 source "block/partitions/Kconfig"
@@ -196,7 +213,7 @@
 	default y
 
 config BLK_MQ_VIRTIO
-	bool
+	tristate
 	depends on BLOCK && VIRTIO
 	default y
 
diff --git a/block/Makefile b/block/Makefile
index 9ef57ac..e3d09f0 100644
--- a/block/Makefile
+++ b/block/Makefile
@@ -36,3 +36,5 @@
 obj-$(CONFIG_BLK_DEBUG_FS_ZONED)+= blk-mq-debugfs-zoned.o
 obj-$(CONFIG_BLK_SED_OPAL)	+= sed-opal.o
 obj-$(CONFIG_BLK_PM)		+= blk-pm.o
+obj-$(CONFIG_BLK_INLINE_ENCRYPTION)	+= keyslot-manager.o blk-crypto.o
+obj-$(CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK)	+= blk-crypto-fallback.o
diff --git a/block/bio-integrity.c b/block/bio-integrity.c
index c9dc2b1..4707e90 100644
--- a/block/bio-integrity.c
+++ b/block/bio-integrity.c
@@ -54,6 +54,9 @@ struct bio_integrity_payload *bio_integrity_alloc(struct bio *bio,
 	struct bio_set *bs = bio->bi_pool;
 	unsigned inline_vecs;
 
+	if (WARN_ON_ONCE(bio_has_crypt_ctx(bio)))
+		return ERR_PTR(-EOPNOTSUPP);
+
 	if (!bs || !mempool_initialized(&bs->bio_integrity_pool)) {
 		bip = kmalloc(struct_size(bip, bip_inline_vecs, nr_vecs), gfp_mask);
 		inline_vecs = nr_vecs;
diff --git a/block/bio.c b/block/bio.c
index 24704bc..efe4c40 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -17,6 +17,7 @@
 #include <linux/cgroup.h>
 #include <linux/blk-cgroup.h>
 #include <linux/highmem.h>
+#include <linux/blk-crypto.h>
 
 #include <trace/events/block.h>
 #include "blk.h"
@@ -236,6 +237,8 @@ void bio_uninit(struct bio *bio)
 
 	if (bio_integrity(bio))
 		bio_integrity_free(bio);
+
+	bio_crypt_free_ctx(bio);
 }
 EXPORT_SYMBOL(bio_uninit);
 
@@ -664,18 +667,18 @@ struct bio *bio_clone_fast(struct bio *bio, gfp_t gfp_mask, struct bio_set *bs)
 
 	__bio_clone_fast(b, bio);
 
-	if (bio_integrity(bio)) {
-		int ret;
+	if (bio_crypt_clone(b, bio, gfp_mask) < 0)
+		goto err_put;
 
-		ret = bio_integrity_clone(b, bio, gfp_mask);
-
-		if (ret < 0) {
-			bio_put(b);
-			return NULL;
-		}
-	}
+	if (bio_integrity(bio) &&
+	    bio_integrity_clone(b, bio, gfp_mask) < 0)
+		goto err_put;
 
 	return b;
+
+err_put:
+	bio_put(b);
+	return NULL;
 }
 EXPORT_SYMBOL(bio_clone_fast);
 
@@ -1048,6 +1051,7 @@ void bio_advance(struct bio *bio, unsigned bytes)
 	if (bio_integrity(bio))
 		bio_integrity_advance(bio, bytes);
 
+	bio_crypt_advance(bio, bytes);
 	bio_advance_iter(bio, &bio->bi_iter, bytes);
 }
 EXPORT_SYMBOL(bio_advance);
diff --git a/block/blk-core.c b/block/blk-core.c
index 5808baa..4fe7cd5 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -38,6 +38,7 @@
 #include <linux/debugfs.h>
 #include <linux/bpf.h>
 #include <linux/psi.h>
+#include <linux/blk-crypto.h>
 
 #define CREATE_TRACE_POINTS
 #include <trace/events/block.h>
@@ -120,6 +121,7 @@ void blk_rq_init(struct request_queue *q, struct request *rq)
 	rq->start_time_ns = ktime_get_ns();
 	rq->part = NULL;
 	refcount_set(&rq->ref, 1);
+	blk_crypto_rq_set_defaults(rq);
 }
 EXPORT_SYMBOL(blk_rq_init);
 
@@ -132,6 +134,9 @@ static const char *const blk_op_name[] = {
 	REQ_OP_NAME(SECURE_ERASE),
 	REQ_OP_NAME(ZONE_RESET),
 	REQ_OP_NAME(ZONE_RESET_ALL),
+	REQ_OP_NAME(ZONE_OPEN),
+	REQ_OP_NAME(ZONE_CLOSE),
+	REQ_OP_NAME(ZONE_FINISH),
 	REQ_OP_NAME(WRITE_SAME),
 	REQ_OP_NAME(WRITE_ZEROES),
 	REQ_OP_NAME(SCSI_IN),
@@ -615,6 +620,8 @@ bool bio_attempt_back_merge(struct request *req, struct bio *bio,
 	req->biotail = bio;
 	req->__data_len += bio->bi_iter.bi_size;
 
+	bio_crypt_free_ctx(bio);
+
 	blk_account_io_start(req, false);
 	return true;
 }
@@ -639,6 +646,8 @@ bool bio_attempt_front_merge(struct request *req, struct bio *bio,
 	req->__sector = bio->bi_iter.bi_sector;
 	req->__data_len += bio->bi_iter.bi_size;
 
+	bio_crypt_do_front_merge(req, bio);
+
 	blk_account_io_start(req, false);
 	return true;
 }
@@ -848,11 +857,7 @@ static inline int blk_partition_remap(struct bio *bio)
 	if (unlikely(bio_check_ro(bio, p)))
 		goto out;
 
-	/*
-	 * Zone reset does not include bi_size so bio_sectors() is always 0.
-	 * Include a test for the reset op code and perform the remap if needed.
-	 */
-	if (bio_sectors(bio) || bio_op(bio) == REQ_OP_ZONE_RESET) {
+	if (bio_sectors(bio)) {
 		if (bio_check_eod(bio, part_nr_sects_read(p)))
 			goto out;
 		bio->bi_iter.bi_sector += p->start_sect;
@@ -939,6 +944,9 @@ generic_make_request_checks(struct bio *bio)
 			goto not_supported;
 		break;
 	case REQ_OP_ZONE_RESET:
+	case REQ_OP_ZONE_OPEN:
+	case REQ_OP_ZONE_CLOSE:
+	case REQ_OP_ZONE_FINISH:
 		if (!blk_queue_is_zoned(q))
 			goto not_supported;
 		break;
@@ -1064,7 +1072,8 @@ blk_qc_t generic_make_request(struct bio *bio)
 			/* Create a fresh bio_list for all subordinate requests */
 			bio_list_on_stack[1] = bio_list_on_stack[0];
 			bio_list_init(&bio_list_on_stack[0]);
-			ret = q->make_request_fn(q, bio);
+			if (blk_crypto_bio_prep(&bio))
+				ret = q->make_request_fn(q, bio);
 
 			blk_queue_exit(q);
 
@@ -1112,7 +1121,7 @@ blk_qc_t direct_make_request(struct bio *bio)
 {
 	struct request_queue *q = bio->bi_disk->queue;
 	bool nowait = bio->bi_opf & REQ_NOWAIT;
-	blk_qc_t ret;
+	blk_qc_t ret = BLK_QC_T_NONE;
 
 	if (!generic_make_request_checks(bio))
 		return BLK_QC_T_NONE;
@@ -1126,7 +1135,8 @@ blk_qc_t direct_make_request(struct bio *bio)
 		return BLK_QC_T_NONE;
 	}
 
-	ret = q->make_request_fn(q, bio);
+	if (blk_crypto_bio_prep(&bio))
+		ret = q->make_request_fn(q, bio);
 	blk_queue_exit(q);
 	return ret;
 }
@@ -1256,6 +1266,9 @@ blk_status_t blk_insert_cloned_request(struct request_queue *q, struct request *
 	    should_fail_request(&rq->rq_disk->part0, blk_rq_bytes(rq)))
 		return BLK_STS_IOERR;
 
+	if (blk_crypto_insert_cloned_request(rq))
+		return BLK_STS_IOERR;
+
 	if (blk_queue_io_stat(q))
 		blk_account_io_start(rq, true);
 
@@ -1637,12 +1650,17 @@ int blk_rq_prep_clone(struct request *rq, struct request *rq_src,
 		if (rq->bio) {
 			rq->biotail->bi_next = bio;
 			rq->biotail = bio;
-		} else
+		} else {
 			rq->bio = rq->biotail = bio;
+		}
+		bio = NULL;
 	}
 
 	__blk_rq_prep_clone(rq, rq_src);
 
+	if (rq->bio && blk_crypto_rq_bio_prep(rq, rq->bio, gfp_mask) < 0)
+		goto free_and_out;
+
 	return 0;
 
 free_and_out:
diff --git a/block/blk-crypto-fallback.c b/block/blk-crypto-fallback.c
new file mode 100644
index 0000000..077a60b
--- /dev/null
+++ b/block/blk-crypto-fallback.c
@@ -0,0 +1,660 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2019 Google LLC
+ */
+
+/*
+ * Refer to Documentation/block/inline-encryption.rst for detailed explanation.
+ */
+
+#define pr_fmt(fmt) "blk-crypto-fallback: " fmt
+
+#include <crypto/skcipher.h>
+#include <linux/blk-cgroup.h>
+#include <linux/blk-crypto.h>
+#include <linux/blkdev.h>
+#include <linux/crypto.h>
+#include <linux/keyslot-manager.h>
+#include <linux/mempool.h>
+#include <linux/module.h>
+#include <linux/random.h>
+
+#include "blk-crypto-internal.h"
+
+static unsigned int num_prealloc_bounce_pg = 32;
+module_param(num_prealloc_bounce_pg, uint, 0);
+MODULE_PARM_DESC(num_prealloc_bounce_pg,
+		 "Number of preallocated bounce pages for the blk-crypto crypto API fallback");
+
+static unsigned int blk_crypto_num_keyslots = 100;
+module_param_named(num_keyslots, blk_crypto_num_keyslots, uint, 0);
+MODULE_PARM_DESC(num_keyslots,
+		 "Number of keyslots for the blk-crypto crypto API fallback");
+
+static unsigned int num_prealloc_fallback_crypt_ctxs = 128;
+module_param(num_prealloc_fallback_crypt_ctxs, uint, 0);
+MODULE_PARM_DESC(num_prealloc_crypt_fallback_ctxs,
+		 "Number of preallocated bio fallback crypto contexts for blk-crypto to use during crypto API fallback");
+
+struct bio_fallback_crypt_ctx {
+	struct bio_crypt_ctx crypt_ctx;
+	/*
+	 * Copy of the bvec_iter when this bio was submitted.
+	 * We only want to en/decrypt the part of the bio as described by the
+	 * bvec_iter upon submission because bio might be split before being
+	 * resubmitted
+	 */
+	struct bvec_iter crypt_iter;
+	union {
+		struct {
+			struct work_struct work;
+			struct bio *bio;
+		};
+		struct {
+			void *bi_private_orig;
+			bio_end_io_t *bi_end_io_orig;
+		};
+	};
+};
+
+static struct kmem_cache *bio_fallback_crypt_ctx_cache;
+static mempool_t *bio_fallback_crypt_ctx_pool;
+
+/*
+ * Allocating a crypto tfm during I/O can deadlock, so we have to preallocate
+ * all of a mode's tfms when that mode starts being used. Since each mode may
+ * need all the keyslots at some point, each mode needs its own tfm for each
+ * keyslot; thus, a keyslot may contain tfms for multiple modes.  However, to
+ * match the behavior of real inline encryption hardware (which only supports a
+ * single encryption context per keyslot), we only allow one tfm per keyslot to
+ * be used at a time - the rest of the unused tfms have their keys cleared.
+ */
+static DEFINE_MUTEX(tfms_init_lock);
+static bool tfms_inited[BLK_ENCRYPTION_MODE_MAX];
+
+static struct blk_crypto_keyslot {
+	enum blk_crypto_mode_num crypto_mode;
+	struct crypto_skcipher *tfms[BLK_ENCRYPTION_MODE_MAX];
+} *blk_crypto_keyslots;
+
+static struct blk_keyslot_manager blk_crypto_ksm;
+static struct workqueue_struct *blk_crypto_wq;
+static mempool_t *blk_crypto_bounce_page_pool;
+
+/*
+ * This is the key we set when evicting a keyslot. This *should* be the all 0's
+ * key, but AES-XTS rejects that key, so we use some random bytes instead.
+ */
+static u8 blank_key[BLK_CRYPTO_MAX_KEY_SIZE];
+
+static void blk_crypto_evict_keyslot(unsigned int slot)
+{
+	struct blk_crypto_keyslot *slotp = &blk_crypto_keyslots[slot];
+	enum blk_crypto_mode_num crypto_mode = slotp->crypto_mode;
+	int err;
+
+	WARN_ON(slotp->crypto_mode == BLK_ENCRYPTION_MODE_INVALID);
+
+	/* Clear the key in the skcipher */
+	err = crypto_skcipher_setkey(slotp->tfms[crypto_mode], blank_key,
+				     blk_crypto_modes[crypto_mode].keysize);
+	WARN_ON(err);
+	slotp->crypto_mode = BLK_ENCRYPTION_MODE_INVALID;
+}
+
+static int blk_crypto_keyslot_program(struct blk_keyslot_manager *ksm,
+				      const struct blk_crypto_key *key,
+				      unsigned int slot)
+{
+	struct blk_crypto_keyslot *slotp = &blk_crypto_keyslots[slot];
+	const enum blk_crypto_mode_num crypto_mode =
+						key->crypto_cfg.crypto_mode;
+	int err;
+
+	if (crypto_mode != slotp->crypto_mode &&
+	    slotp->crypto_mode != BLK_ENCRYPTION_MODE_INVALID)
+		blk_crypto_evict_keyslot(slot);
+
+	slotp->crypto_mode = crypto_mode;
+	err = crypto_skcipher_setkey(slotp->tfms[crypto_mode], key->raw,
+				     key->size);
+	if (err) {
+		blk_crypto_evict_keyslot(slot);
+		return err;
+	}
+	return 0;
+}
+
+static int blk_crypto_keyslot_evict(struct blk_keyslot_manager *ksm,
+				    const struct blk_crypto_key *key,
+				    unsigned int slot)
+{
+	blk_crypto_evict_keyslot(slot);
+	return 0;
+}
+
+/*
+ * The crypto API fallback KSM ops - only used for a bio when it specifies a
+ * blk_crypto_key that was not supported by the device's inline encryption
+ * hardware.
+ */
+static const struct blk_ksm_ll_ops blk_crypto_ksm_ll_ops = {
+	.keyslot_program	= blk_crypto_keyslot_program,
+	.keyslot_evict		= blk_crypto_keyslot_evict,
+};
+
+static void blk_crypto_fallback_encrypt_endio(struct bio *enc_bio)
+{
+	struct bio *src_bio = enc_bio->bi_private;
+	int i;
+
+	for (i = 0; i < enc_bio->bi_vcnt; i++)
+		mempool_free(enc_bio->bi_io_vec[i].bv_page,
+			     blk_crypto_bounce_page_pool);
+
+	src_bio->bi_status = enc_bio->bi_status;
+
+	bio_put(enc_bio);
+	bio_endio(src_bio);
+}
+
+static struct bio *blk_crypto_clone_bio(struct bio *bio_src)
+{
+	struct bvec_iter iter;
+	struct bio_vec bv;
+	struct bio *bio;
+
+	bio = bio_alloc_bioset(GFP_NOIO, bio_segments(bio_src), NULL);
+	if (!bio)
+		return NULL;
+	bio->bi_disk		= bio_src->bi_disk;
+	bio->bi_opf		= bio_src->bi_opf;
+	bio->bi_ioprio		= bio_src->bi_ioprio;
+	bio->bi_write_hint	= bio_src->bi_write_hint;
+	bio->bi_iter.bi_sector	= bio_src->bi_iter.bi_sector;
+	bio->bi_iter.bi_size	= bio_src->bi_iter.bi_size;
+
+	bio_for_each_segment(bv, bio_src, iter)
+		bio->bi_io_vec[bio->bi_vcnt++] = bv;
+
+	bio_clone_blkg_association(bio, bio_src);
+	blkcg_bio_issue_init(bio);
+
+	bio_clone_skip_dm_default_key(bio, bio_src);
+
+	return bio;
+}
+
+static bool blk_crypto_alloc_cipher_req(struct blk_ksm_keyslot *slot,
+					struct skcipher_request **ciph_req_ret,
+					struct crypto_wait *wait)
+{
+	struct skcipher_request *ciph_req;
+	const struct blk_crypto_keyslot *slotp;
+	int keyslot_idx = blk_ksm_get_slot_idx(slot);
+
+	slotp = &blk_crypto_keyslots[keyslot_idx];
+	ciph_req = skcipher_request_alloc(slotp->tfms[slotp->crypto_mode],
+					  GFP_NOIO);
+	if (!ciph_req)
+		return false;
+
+	skcipher_request_set_callback(ciph_req,
+				      CRYPTO_TFM_REQ_MAY_BACKLOG |
+				      CRYPTO_TFM_REQ_MAY_SLEEP,
+				      crypto_req_done, wait);
+	*ciph_req_ret = ciph_req;
+
+	return true;
+}
+
+static bool blk_crypto_split_bio_if_needed(struct bio **bio_ptr)
+{
+	struct bio *bio = *bio_ptr;
+	unsigned int i = 0;
+	unsigned int num_sectors = 0;
+	struct bio_vec bv;
+	struct bvec_iter iter;
+
+	bio_for_each_segment(bv, bio, iter) {
+		num_sectors += bv.bv_len >> SECTOR_SHIFT;
+		if (++i == BIO_MAX_PAGES)
+			break;
+	}
+	if (num_sectors < bio_sectors(bio)) {
+		struct bio *split_bio;
+
+		split_bio = bio_split(bio, num_sectors, GFP_NOIO, NULL);
+		if (!split_bio) {
+			bio->bi_status = BLK_STS_RESOURCE;
+			return false;
+		}
+		bio_chain(split_bio, bio);
+		generic_make_request(bio);
+		*bio_ptr = split_bio;
+	}
+
+	return true;
+}
+
+union blk_crypto_iv {
+	__le64 dun[BLK_CRYPTO_DUN_ARRAY_SIZE];
+	u8 bytes[BLK_CRYPTO_MAX_IV_SIZE];
+};
+
+static void blk_crypto_dun_to_iv(const u64 dun[BLK_CRYPTO_DUN_ARRAY_SIZE],
+				 union blk_crypto_iv *iv)
+{
+	int i;
+
+	for (i = 0; i < BLK_CRYPTO_DUN_ARRAY_SIZE; i++)
+		iv->dun[i] = cpu_to_le64(dun[i]);
+}
+
+/*
+ * The crypto API fallback's encryption routine.
+ * Allocate a bounce bio for encryption, encrypt the input bio using crypto API,
+ * and replace *bio_ptr with the bounce bio. May split input bio if it's too
+ * large. Returns true on success. Returns false and sets bio->bi_status on
+ * error.
+ */
+static bool blk_crypto_fallback_encrypt_bio(struct bio **bio_ptr)
+{
+	struct bio *src_bio, *enc_bio;
+	struct bio_crypt_ctx *bc;
+	struct blk_ksm_keyslot *slot;
+	int data_unit_size;
+	struct skcipher_request *ciph_req = NULL;
+	DECLARE_CRYPTO_WAIT(wait);
+	u64 curr_dun[BLK_CRYPTO_DUN_ARRAY_SIZE];
+	struct scatterlist src, dst;
+	union blk_crypto_iv iv;
+	unsigned int i, j;
+	bool ret = false;
+	blk_status_t blk_st;
+
+	/* Split the bio if it's too big for single page bvec */
+	if (!blk_crypto_split_bio_if_needed(bio_ptr))
+		return false;
+
+	src_bio = *bio_ptr;
+	bc = src_bio->bi_crypt_context;
+	data_unit_size = bc->bc_key->crypto_cfg.data_unit_size;
+
+	/* Allocate bounce bio for encryption */
+	enc_bio = blk_crypto_clone_bio(src_bio);
+	if (!enc_bio) {
+		src_bio->bi_status = BLK_STS_RESOURCE;
+		return false;
+	}
+
+	/*
+	 * Use the crypto API fallback keyslot manager to get a crypto_skcipher
+	 * for the algorithm and key specified for this bio.
+	 */
+	blk_st = blk_ksm_get_slot_for_key(&blk_crypto_ksm, bc->bc_key, &slot);
+	if (blk_st != BLK_STS_OK) {
+		src_bio->bi_status = blk_st;
+		goto out_put_enc_bio;
+	}
+
+	/* and then allocate an skcipher_request for it */
+	if (!blk_crypto_alloc_cipher_req(slot, &ciph_req, &wait)) {
+		src_bio->bi_status = BLK_STS_RESOURCE;
+		goto out_release_keyslot;
+	}
+
+	memcpy(curr_dun, bc->bc_dun, sizeof(curr_dun));
+	sg_init_table(&src, 1);
+	sg_init_table(&dst, 1);
+
+	skcipher_request_set_crypt(ciph_req, &src, &dst, data_unit_size,
+				   iv.bytes);
+
+	/* Encrypt each page in the bounce bio */
+	for (i = 0; i < enc_bio->bi_vcnt; i++) {
+		struct bio_vec *enc_bvec = &enc_bio->bi_io_vec[i];
+		struct page *plaintext_page = enc_bvec->bv_page;
+		struct page *ciphertext_page =
+			mempool_alloc(blk_crypto_bounce_page_pool, GFP_NOIO);
+
+		enc_bvec->bv_page = ciphertext_page;
+
+		if (!ciphertext_page) {
+			src_bio->bi_status = BLK_STS_RESOURCE;
+			goto out_free_bounce_pages;
+		}
+
+		sg_set_page(&src, plaintext_page, data_unit_size,
+			    enc_bvec->bv_offset);
+		sg_set_page(&dst, ciphertext_page, data_unit_size,
+			    enc_bvec->bv_offset);
+
+		/* Encrypt each data unit in this page */
+		for (j = 0; j < enc_bvec->bv_len; j += data_unit_size) {
+			blk_crypto_dun_to_iv(curr_dun, &iv);
+			if (crypto_wait_req(crypto_skcipher_encrypt(ciph_req),
+					    &wait)) {
+				i++;
+				src_bio->bi_status = BLK_STS_IOERR;
+				goto out_free_bounce_pages;
+			}
+			bio_crypt_dun_increment(curr_dun, 1);
+			src.offset += data_unit_size;
+			dst.offset += data_unit_size;
+		}
+	}
+
+	enc_bio->bi_private = src_bio;
+	enc_bio->bi_end_io = blk_crypto_fallback_encrypt_endio;
+	*bio_ptr = enc_bio;
+	ret = true;
+
+	enc_bio = NULL;
+	goto out_free_ciph_req;
+
+out_free_bounce_pages:
+	while (i > 0)
+		mempool_free(enc_bio->bi_io_vec[--i].bv_page,
+			     blk_crypto_bounce_page_pool);
+out_free_ciph_req:
+	skcipher_request_free(ciph_req);
+out_release_keyslot:
+	blk_ksm_put_slot(slot);
+out_put_enc_bio:
+	if (enc_bio)
+		bio_put(enc_bio);
+
+	return ret;
+}
+
+/*
+ * The crypto API fallback's main decryption routine.
+ * Decrypts input bio in place, and calls bio_endio on the bio.
+ */
+static void blk_crypto_fallback_decrypt_bio(struct work_struct *work)
+{
+	struct bio_fallback_crypt_ctx *f_ctx =
+		container_of(work, struct bio_fallback_crypt_ctx, work);
+	struct bio *bio = f_ctx->bio;
+	struct bio_crypt_ctx *bc = &f_ctx->crypt_ctx;
+	struct blk_ksm_keyslot *slot;
+	struct skcipher_request *ciph_req = NULL;
+	DECLARE_CRYPTO_WAIT(wait);
+	u64 curr_dun[BLK_CRYPTO_DUN_ARRAY_SIZE];
+	union blk_crypto_iv iv;
+	struct scatterlist sg;
+	struct bio_vec bv;
+	struct bvec_iter iter;
+	const int data_unit_size = bc->bc_key->crypto_cfg.data_unit_size;
+	unsigned int i;
+	blk_status_t blk_st;
+
+	/*
+	 * Use the crypto API fallback keyslot manager to get a crypto_skcipher
+	 * for the algorithm and key specified for this bio.
+	 */
+	blk_st = blk_ksm_get_slot_for_key(&blk_crypto_ksm, bc->bc_key, &slot);
+	if (blk_st != BLK_STS_OK) {
+		bio->bi_status = blk_st;
+		goto out_no_keyslot;
+	}
+
+	/* and then allocate an skcipher_request for it */
+	if (!blk_crypto_alloc_cipher_req(slot, &ciph_req, &wait)) {
+		bio->bi_status = BLK_STS_RESOURCE;
+		goto out;
+	}
+
+	memcpy(curr_dun, bc->bc_dun, sizeof(curr_dun));
+	sg_init_table(&sg, 1);
+	skcipher_request_set_crypt(ciph_req, &sg, &sg, data_unit_size,
+				   iv.bytes);
+
+	/* Decrypt each segment in the bio */
+	__bio_for_each_segment(bv, bio, iter, f_ctx->crypt_iter) {
+		struct page *page = bv.bv_page;
+
+		sg_set_page(&sg, page, data_unit_size, bv.bv_offset);
+
+		/* Decrypt each data unit in the segment */
+		for (i = 0; i < bv.bv_len; i += data_unit_size) {
+			blk_crypto_dun_to_iv(curr_dun, &iv);
+			if (crypto_wait_req(crypto_skcipher_decrypt(ciph_req),
+					    &wait)) {
+				bio->bi_status = BLK_STS_IOERR;
+				goto out;
+			}
+			bio_crypt_dun_increment(curr_dun, 1);
+			sg.offset += data_unit_size;
+		}
+	}
+
+out:
+	skcipher_request_free(ciph_req);
+	blk_ksm_put_slot(slot);
+out_no_keyslot:
+	mempool_free(f_ctx, bio_fallback_crypt_ctx_pool);
+	bio_endio(bio);
+}
+
+/**
+ * blk_crypto_fallback_decrypt_endio - queue bio for fallback decryption
+ *
+ * @bio: the bio to queue
+ *
+ * Restore bi_private and bi_end_io, and queue the bio for decryption into a
+ * workqueue, since this function will be called from an atomic context.
+ */
+static void blk_crypto_fallback_decrypt_endio(struct bio *bio)
+{
+	struct bio_fallback_crypt_ctx *f_ctx = bio->bi_private;
+
+	bio->bi_private = f_ctx->bi_private_orig;
+	bio->bi_end_io = f_ctx->bi_end_io_orig;
+
+	/* If there was an IO error, don't queue for decrypt. */
+	if (bio->bi_status) {
+		mempool_free(f_ctx, bio_fallback_crypt_ctx_pool);
+		bio_endio(bio);
+		return;
+	}
+
+	INIT_WORK(&f_ctx->work, blk_crypto_fallback_decrypt_bio);
+	f_ctx->bio = bio;
+	queue_work(blk_crypto_wq, &f_ctx->work);
+}
+
+/**
+ * blk_crypto_fallback_bio_prep - Prepare a bio to use fallback en/decryption
+ *
+ * @bio_ptr: pointer to the bio to prepare
+ *
+ * If bio is doing a WRITE operation, this splits the bio into two parts if it's
+ * too big (see blk_crypto_split_bio_if_needed). It then allocates a bounce bio
+ * for the first part, encrypts it, and update bio_ptr to point to the bounce
+ * bio.
+ *
+ * For a READ operation, we mark the bio for decryption by using bi_private and
+ * bi_end_io.
+ *
+ * In either case, this function will make the bio look like a regular bio (i.e.
+ * as if no encryption context was ever specified) for the purposes of the rest
+ * of the stack except for blk-integrity (blk-integrity and blk-crypto are not
+ * currently supported together).
+ *
+ * Return: true on success. Sets bio->bi_status and returns false on error.
+ */
+bool blk_crypto_fallback_bio_prep(struct bio **bio_ptr)
+{
+	struct bio *bio = *bio_ptr;
+	struct bio_crypt_ctx *bc = bio->bi_crypt_context;
+	struct bio_fallback_crypt_ctx *f_ctx;
+
+	if (WARN_ON_ONCE(!tfms_inited[bc->bc_key->crypto_cfg.crypto_mode])) {
+		/* User didn't call blk_crypto_start_using_key() first */
+		bio->bi_status = BLK_STS_IOERR;
+		return false;
+	}
+
+	if (!blk_ksm_crypto_cfg_supported(&blk_crypto_ksm,
+					  &bc->bc_key->crypto_cfg)) {
+		bio->bi_status = BLK_STS_NOTSUPP;
+		return false;
+	}
+
+	if (bio_data_dir(bio) == WRITE)
+		return blk_crypto_fallback_encrypt_bio(bio_ptr);
+
+	/*
+	 * bio READ case: Set up a f_ctx in the bio's bi_private and set the
+	 * bi_end_io appropriately to trigger decryption when the bio is ended.
+	 */
+	f_ctx = mempool_alloc(bio_fallback_crypt_ctx_pool, GFP_NOIO);
+	f_ctx->crypt_ctx = *bc;
+	f_ctx->crypt_iter = bio->bi_iter;
+	f_ctx->bi_private_orig = bio->bi_private;
+	f_ctx->bi_end_io_orig = bio->bi_end_io;
+	bio->bi_private = (void *)f_ctx;
+	bio->bi_end_io = blk_crypto_fallback_decrypt_endio;
+	bio_crypt_free_ctx(bio);
+
+	return true;
+}
+
+int blk_crypto_fallback_evict_key(const struct blk_crypto_key *key)
+{
+	return blk_ksm_evict_key(&blk_crypto_ksm, key);
+}
+
+static bool blk_crypto_fallback_inited;
+static int blk_crypto_fallback_init(void)
+{
+	int i;
+	int err;
+
+	if (blk_crypto_fallback_inited)
+		return 0;
+
+	prandom_bytes(blank_key, BLK_CRYPTO_MAX_KEY_SIZE);
+
+	err = blk_ksm_init(&blk_crypto_ksm, blk_crypto_num_keyslots);
+	if (err)
+		goto out;
+	err = -ENOMEM;
+
+	blk_crypto_ksm.ksm_ll_ops = blk_crypto_ksm_ll_ops;
+	blk_crypto_ksm.max_dun_bytes_supported = BLK_CRYPTO_MAX_IV_SIZE;
+	blk_crypto_ksm.features = BLK_CRYPTO_FEATURE_STANDARD_KEYS;
+
+	/* All blk-crypto modes have a crypto API fallback. */
+	for (i = 0; i < BLK_ENCRYPTION_MODE_MAX; i++)
+		blk_crypto_ksm.crypto_modes_supported[i] = 0xFFFFFFFF;
+	blk_crypto_ksm.crypto_modes_supported[BLK_ENCRYPTION_MODE_INVALID] = 0;
+
+	blk_crypto_wq = alloc_workqueue("blk_crypto_wq",
+					WQ_UNBOUND | WQ_HIGHPRI |
+					WQ_MEM_RECLAIM, num_online_cpus());
+	if (!blk_crypto_wq)
+		goto fail_free_ksm;
+
+	blk_crypto_keyslots = kcalloc(blk_crypto_num_keyslots,
+				      sizeof(blk_crypto_keyslots[0]),
+				      GFP_KERNEL);
+	if (!blk_crypto_keyslots)
+		goto fail_free_wq;
+
+	blk_crypto_bounce_page_pool =
+		mempool_create_page_pool(num_prealloc_bounce_pg, 0);
+	if (!blk_crypto_bounce_page_pool)
+		goto fail_free_keyslots;
+
+	bio_fallback_crypt_ctx_cache = KMEM_CACHE(bio_fallback_crypt_ctx, 0);
+	if (!bio_fallback_crypt_ctx_cache)
+		goto fail_free_bounce_page_pool;
+
+	bio_fallback_crypt_ctx_pool =
+		mempool_create_slab_pool(num_prealloc_fallback_crypt_ctxs,
+					 bio_fallback_crypt_ctx_cache);
+	if (!bio_fallback_crypt_ctx_pool)
+		goto fail_free_crypt_ctx_cache;
+
+	blk_crypto_fallback_inited = true;
+
+	return 0;
+fail_free_crypt_ctx_cache:
+	kmem_cache_destroy(bio_fallback_crypt_ctx_cache);
+fail_free_bounce_page_pool:
+	mempool_destroy(blk_crypto_bounce_page_pool);
+fail_free_keyslots:
+	kfree(blk_crypto_keyslots);
+fail_free_wq:
+	destroy_workqueue(blk_crypto_wq);
+fail_free_ksm:
+	blk_ksm_destroy(&blk_crypto_ksm);
+out:
+	return err;
+}
+
+/*
+ * Prepare blk-crypto-fallback for the specified crypto mode.
+ * Returns -ENOPKG if the needed crypto API support is missing.
+ */
+int blk_crypto_fallback_start_using_mode(enum blk_crypto_mode_num mode_num)
+{
+	const char *cipher_str = blk_crypto_modes[mode_num].cipher_str;
+	struct blk_crypto_keyslot *slotp;
+	unsigned int i;
+	int err = 0;
+
+	/*
+	 * Fast path
+	 * Ensure that updates to blk_crypto_keyslots[i].tfms[mode_num]
+	 * for each i are visible before we try to access them.
+	 */
+	if (likely(smp_load_acquire(&tfms_inited[mode_num])))
+		return 0;
+
+	mutex_lock(&tfms_init_lock);
+	if (tfms_inited[mode_num])
+		goto out;
+
+	err = blk_crypto_fallback_init();
+	if (err)
+		goto out;
+
+	for (i = 0; i < blk_crypto_num_keyslots; i++) {
+		slotp = &blk_crypto_keyslots[i];
+		slotp->tfms[mode_num] = crypto_alloc_skcipher(cipher_str, 0, 0);
+		if (IS_ERR(slotp->tfms[mode_num])) {
+			err = PTR_ERR(slotp->tfms[mode_num]);
+			if (err == -ENOENT) {
+				pr_warn_once("Missing crypto API support for \"%s\"\n",
+					     cipher_str);
+				err = -ENOPKG;
+			}
+			slotp->tfms[mode_num] = NULL;
+			goto out_free_tfms;
+		}
+
+		crypto_skcipher_set_flags(slotp->tfms[mode_num],
+					  CRYPTO_TFM_REQ_FORBID_WEAK_KEYS);
+	}
+
+	/*
+	 * Ensure that updates to blk_crypto_keyslots[i].tfms[mode_num]
+	 * for each i are visible before we set tfms_inited[mode_num].
+	 */
+	smp_store_release(&tfms_inited[mode_num], true);
+	goto out;
+
+out_free_tfms:
+	for (i = 0; i < blk_crypto_num_keyslots; i++) {
+		slotp = &blk_crypto_keyslots[i];
+		crypto_free_skcipher(slotp->tfms[mode_num]);
+		slotp->tfms[mode_num] = NULL;
+	}
+out:
+	mutex_unlock(&tfms_init_lock);
+	return err;
+}
diff --git a/block/blk-crypto-internal.h b/block/blk-crypto-internal.h
new file mode 100644
index 0000000..0d36aae
--- /dev/null
+++ b/block/blk-crypto-internal.h
@@ -0,0 +1,212 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2019 Google LLC
+ */
+
+#ifndef __LINUX_BLK_CRYPTO_INTERNAL_H
+#define __LINUX_BLK_CRYPTO_INTERNAL_H
+
+#include <linux/bio.h>
+#include <linux/blkdev.h>
+
+/* Represents a crypto mode supported by blk-crypto  */
+struct blk_crypto_mode {
+	const char *cipher_str; /* crypto API name (for fallback case) */
+	unsigned int keysize; /* key size in bytes */
+	unsigned int ivsize; /* iv size in bytes */
+};
+
+extern const struct blk_crypto_mode blk_crypto_modes[];
+
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+
+void bio_crypt_dun_increment(u64 dun[BLK_CRYPTO_DUN_ARRAY_SIZE],
+			     unsigned int inc);
+
+bool bio_crypt_rq_ctx_compatible(struct request *rq, struct bio *bio);
+
+bool bio_crypt_ctx_mergeable(struct bio_crypt_ctx *bc1, unsigned int bc1_bytes,
+			     struct bio_crypt_ctx *bc2);
+
+static inline bool bio_crypt_ctx_back_mergeable(struct request *req,
+						struct bio *bio)
+{
+	return bio_crypt_ctx_mergeable(req->crypt_ctx, blk_rq_bytes(req),
+				       bio->bi_crypt_context);
+}
+
+static inline bool bio_crypt_ctx_front_mergeable(struct request *req,
+						 struct bio *bio)
+{
+	return bio_crypt_ctx_mergeable(bio->bi_crypt_context,
+				       bio->bi_iter.bi_size, req->crypt_ctx);
+}
+
+static inline bool bio_crypt_ctx_merge_rq(struct request *req,
+					  struct request *next)
+{
+	return bio_crypt_ctx_mergeable(req->crypt_ctx, blk_rq_bytes(req),
+				       next->crypt_ctx);
+}
+
+static inline void blk_crypto_rq_set_defaults(struct request *rq)
+{
+	rq->crypt_ctx = NULL;
+	rq->crypt_keyslot = NULL;
+}
+
+static inline bool blk_crypto_rq_is_encrypted(struct request *rq)
+{
+	return rq->crypt_ctx;
+}
+
+#else /* CONFIG_BLK_INLINE_ENCRYPTION */
+
+static inline bool bio_crypt_rq_ctx_compatible(struct request *rq,
+					       struct bio *bio)
+{
+	return true;
+}
+
+static inline bool bio_crypt_ctx_front_mergeable(struct request *req,
+						 struct bio *bio)
+{
+	return true;
+}
+
+static inline bool bio_crypt_ctx_back_mergeable(struct request *req,
+						struct bio *bio)
+{
+	return true;
+}
+
+static inline bool bio_crypt_ctx_merge_rq(struct request *req,
+					  struct request *next)
+{
+	return true;
+}
+
+static inline void blk_crypto_rq_set_defaults(struct request *rq) { }
+
+static inline bool blk_crypto_rq_is_encrypted(struct request *rq)
+{
+	return false;
+}
+
+#endif /* CONFIG_BLK_INLINE_ENCRYPTION */
+
+void __bio_crypt_advance(struct bio *bio, unsigned int bytes);
+static inline void bio_crypt_advance(struct bio *bio, unsigned int bytes)
+{
+	if (bio_has_crypt_ctx(bio))
+		__bio_crypt_advance(bio, bytes);
+}
+
+void __bio_crypt_free_ctx(struct bio *bio);
+static inline void bio_crypt_free_ctx(struct bio *bio)
+{
+	if (bio_has_crypt_ctx(bio))
+		__bio_crypt_free_ctx(bio);
+}
+
+static inline void bio_crypt_do_front_merge(struct request *rq,
+					    struct bio *bio)
+{
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+	if (bio_has_crypt_ctx(bio))
+		memcpy(rq->crypt_ctx->bc_dun, bio->bi_crypt_context->bc_dun,
+		       sizeof(rq->crypt_ctx->bc_dun));
+#endif
+}
+
+bool __blk_crypto_bio_prep(struct bio **bio_ptr);
+static inline bool blk_crypto_bio_prep(struct bio **bio_ptr)
+{
+	if (bio_has_crypt_ctx(*bio_ptr))
+		return __blk_crypto_bio_prep(bio_ptr);
+	return true;
+}
+
+blk_status_t __blk_crypto_init_request(struct request *rq);
+static inline blk_status_t blk_crypto_init_request(struct request *rq)
+{
+	if (blk_crypto_rq_is_encrypted(rq))
+		return __blk_crypto_init_request(rq);
+	return BLK_STS_OK;
+}
+
+void __blk_crypto_free_request(struct request *rq);
+static inline void blk_crypto_free_request(struct request *rq)
+{
+	if (blk_crypto_rq_is_encrypted(rq))
+		__blk_crypto_free_request(rq);
+}
+
+int __blk_crypto_rq_bio_prep(struct request *rq, struct bio *bio,
+			     gfp_t gfp_mask);
+/**
+ * blk_crypto_rq_bio_prep - Prepare a request's crypt_ctx when its first bio
+ *			    is inserted
+ * @rq: The request to prepare
+ * @bio: The first bio being inserted into the request
+ * @gfp_mask: Memory allocation flags
+ *
+ * Return: 0 on success, -ENOMEM if out of memory.  -ENOMEM is only possible if
+ *	   @gfp_mask doesn't include %__GFP_DIRECT_RECLAIM.
+ */
+static inline int blk_crypto_rq_bio_prep(struct request *rq, struct bio *bio,
+					 gfp_t gfp_mask)
+{
+	if (bio_has_crypt_ctx(bio))
+		return __blk_crypto_rq_bio_prep(rq, bio, gfp_mask);
+	return 0;
+}
+
+/**
+ * blk_crypto_insert_cloned_request - Prepare a cloned request to be inserted
+ *				      into a request queue.
+ * @rq: the request being queued
+ *
+ * Return: BLK_STS_OK on success, nonzero on error.
+ */
+static inline blk_status_t blk_crypto_insert_cloned_request(struct request *rq)
+{
+
+	if (blk_crypto_rq_is_encrypted(rq))
+		return blk_crypto_init_request(rq);
+	return BLK_STS_OK;
+}
+
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK
+
+int blk_crypto_fallback_start_using_mode(enum blk_crypto_mode_num mode_num);
+
+bool blk_crypto_fallback_bio_prep(struct bio **bio_ptr);
+
+int blk_crypto_fallback_evict_key(const struct blk_crypto_key *key);
+
+#else /* CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK */
+
+static inline int
+blk_crypto_fallback_start_using_mode(enum blk_crypto_mode_num mode_num)
+{
+	pr_warn_once("crypto API fallback is disabled\n");
+	return -ENOPKG;
+}
+
+static inline bool blk_crypto_fallback_bio_prep(struct bio **bio_ptr)
+{
+	pr_warn_once("crypto API fallback disabled; failing request.\n");
+	(*bio_ptr)->bi_status = BLK_STS_NOTSUPP;
+	return false;
+}
+
+static inline int
+blk_crypto_fallback_evict_key(const struct blk_crypto_key *key)
+{
+	return 0;
+}
+
+#endif /* CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK */
+
+#endif /* __LINUX_BLK_CRYPTO_INTERNAL_H */
diff --git a/block/blk-crypto.c b/block/blk-crypto.c
new file mode 100644
index 0000000..b48aec2
--- /dev/null
+++ b/block/blk-crypto.c
@@ -0,0 +1,437 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2019 Google LLC
+ */
+
+/*
+ * Refer to Documentation/block/inline-encryption.rst for detailed explanation.
+ */
+
+#define pr_fmt(fmt) "blk-crypto: " fmt
+
+#include <linux/bio.h>
+#include <linux/blkdev.h>
+#include <linux/keyslot-manager.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+
+#include "blk-crypto-internal.h"
+
+const struct blk_crypto_mode blk_crypto_modes[] = {
+	[BLK_ENCRYPTION_MODE_AES_256_XTS] = {
+		.cipher_str = "xts(aes)",
+		.keysize = 64,
+		.ivsize = 16,
+	},
+	[BLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV] = {
+		.cipher_str = "essiv(cbc(aes),sha256)",
+		.keysize = 16,
+		.ivsize = 16,
+	},
+	[BLK_ENCRYPTION_MODE_ADIANTUM] = {
+		.cipher_str = "adiantum(xchacha12,aes)",
+		.keysize = 32,
+		.ivsize = 32,
+	},
+};
+
+/*
+ * This number needs to be at least (the number of threads doing IO
+ * concurrently) * (maximum recursive depth of a bio), so that we don't
+ * deadlock on crypt_ctx allocations. The default is chosen to be the same
+ * as the default number of post read contexts in both EXT4 and F2FS.
+ */
+static int num_prealloc_crypt_ctxs = 128;
+
+module_param(num_prealloc_crypt_ctxs, int, 0444);
+MODULE_PARM_DESC(num_prealloc_crypt_ctxs,
+		"Number of bio crypto contexts to preallocate");
+
+static struct kmem_cache *bio_crypt_ctx_cache;
+static mempool_t *bio_crypt_ctx_pool;
+
+static int __init bio_crypt_ctx_init(void)
+{
+	size_t i;
+
+	bio_crypt_ctx_cache = KMEM_CACHE(bio_crypt_ctx, 0);
+	if (!bio_crypt_ctx_cache)
+		goto out_no_mem;
+
+	bio_crypt_ctx_pool = mempool_create_slab_pool(num_prealloc_crypt_ctxs,
+						      bio_crypt_ctx_cache);
+	if (!bio_crypt_ctx_pool)
+		goto out_no_mem;
+
+	/* This is assumed in various places. */
+	BUILD_BUG_ON(BLK_ENCRYPTION_MODE_INVALID != 0);
+
+	/* Sanity check that no algorithm exceeds the defined limits. */
+	for (i = 0; i < BLK_ENCRYPTION_MODE_MAX; i++) {
+		BUG_ON(blk_crypto_modes[i].keysize > BLK_CRYPTO_MAX_KEY_SIZE);
+		BUG_ON(blk_crypto_modes[i].ivsize > BLK_CRYPTO_MAX_IV_SIZE);
+	}
+
+	return 0;
+out_no_mem:
+	panic("Failed to allocate mem for bio crypt ctxs\n");
+}
+subsys_initcall(bio_crypt_ctx_init);
+
+void bio_crypt_set_ctx(struct bio *bio, const struct blk_crypto_key *key,
+		       const u64 dun[BLK_CRYPTO_DUN_ARRAY_SIZE], gfp_t gfp_mask)
+{
+	struct bio_crypt_ctx *bc;
+
+	/*
+	 * The caller must use a gfp_mask that contains __GFP_DIRECT_RECLAIM so
+	 * that the mempool_alloc() can't fail.
+	 */
+	WARN_ON_ONCE(!(gfp_mask & __GFP_DIRECT_RECLAIM));
+
+	bc = mempool_alloc(bio_crypt_ctx_pool, gfp_mask);
+
+	bc->bc_key = key;
+	memcpy(bc->bc_dun, dun, sizeof(bc->bc_dun));
+
+	bio->bi_crypt_context = bc;
+}
+EXPORT_SYMBOL_GPL(bio_crypt_set_ctx);
+
+void __bio_crypt_free_ctx(struct bio *bio)
+{
+	mempool_free(bio->bi_crypt_context, bio_crypt_ctx_pool);
+	bio->bi_crypt_context = NULL;
+}
+
+int __bio_crypt_clone(struct bio *dst, struct bio *src, gfp_t gfp_mask)
+{
+	dst->bi_crypt_context = mempool_alloc(bio_crypt_ctx_pool, gfp_mask);
+	if (!dst->bi_crypt_context)
+		return -ENOMEM;
+	*dst->bi_crypt_context = *src->bi_crypt_context;
+	return 0;
+}
+EXPORT_SYMBOL_GPL(__bio_crypt_clone);
+
+/* Increments @dun by @inc, treating @dun as a multi-limb integer. */
+void bio_crypt_dun_increment(u64 dun[BLK_CRYPTO_DUN_ARRAY_SIZE],
+			     unsigned int inc)
+{
+	int i;
+
+	for (i = 0; inc && i < BLK_CRYPTO_DUN_ARRAY_SIZE; i++) {
+		dun[i] += inc;
+		/*
+		 * If the addition in this limb overflowed, then we need to
+		 * carry 1 into the next limb. Else the carry is 0.
+		 */
+		if (dun[i] < inc)
+			inc = 1;
+		else
+			inc = 0;
+	}
+}
+
+void __bio_crypt_advance(struct bio *bio, unsigned int bytes)
+{
+	struct bio_crypt_ctx *bc = bio->bi_crypt_context;
+
+	bio_crypt_dun_increment(bc->bc_dun,
+				bytes >> bc->bc_key->data_unit_size_bits);
+}
+
+/*
+ * Returns true if @bc->bc_dun plus @bytes converted to data units is equal to
+ * @next_dun, treating the DUNs as multi-limb integers.
+ */
+bool bio_crypt_dun_is_contiguous(const struct bio_crypt_ctx *bc,
+				 unsigned int bytes,
+				 const u64 next_dun[BLK_CRYPTO_DUN_ARRAY_SIZE])
+{
+	int i;
+	unsigned int carry = bytes >> bc->bc_key->data_unit_size_bits;
+
+	for (i = 0; i < BLK_CRYPTO_DUN_ARRAY_SIZE; i++) {
+		if (bc->bc_dun[i] + carry != next_dun[i])
+			return false;
+		/*
+		 * If the addition in this limb overflowed, then we need to
+		 * carry 1 into the next limb. Else the carry is 0.
+		 */
+		if ((bc->bc_dun[i] + carry) < carry)
+			carry = 1;
+		else
+			carry = 0;
+	}
+
+	/* If the DUN wrapped through 0, don't treat it as contiguous. */
+	return carry == 0;
+}
+
+/*
+ * Checks that two bio crypt contexts are compatible - i.e. that
+ * they are mergeable except for data_unit_num continuity.
+ */
+static bool bio_crypt_ctx_compatible(struct bio_crypt_ctx *bc1,
+				     struct bio_crypt_ctx *bc2)
+{
+	if (!bc1)
+		return !bc2;
+
+	return bc2 && bc1->bc_key == bc2->bc_key;
+}
+
+bool bio_crypt_rq_ctx_compatible(struct request *rq, struct bio *bio)
+{
+	return bio_crypt_ctx_compatible(rq->crypt_ctx, bio->bi_crypt_context);
+}
+
+/*
+ * Checks that two bio crypt contexts are compatible, and also
+ * that their data_unit_nums are continuous (and can hence be merged)
+ * in the order @bc1 followed by @bc2.
+ */
+bool bio_crypt_ctx_mergeable(struct bio_crypt_ctx *bc1, unsigned int bc1_bytes,
+			     struct bio_crypt_ctx *bc2)
+{
+	if (!bio_crypt_ctx_compatible(bc1, bc2))
+		return false;
+
+	return !bc1 || bio_crypt_dun_is_contiguous(bc1, bc1_bytes, bc2->bc_dun);
+}
+
+/* Check that all I/O segments are data unit aligned. */
+static bool bio_crypt_check_alignment(struct bio *bio)
+{
+	const unsigned int data_unit_size =
+		bio->bi_crypt_context->bc_key->crypto_cfg.data_unit_size;
+	struct bvec_iter iter;
+	struct bio_vec bv;
+
+	bio_for_each_segment(bv, bio, iter) {
+		if (!IS_ALIGNED(bv.bv_len | bv.bv_offset, data_unit_size))
+			return false;
+	}
+
+	return true;
+}
+
+blk_status_t __blk_crypto_init_request(struct request *rq)
+{
+	return blk_ksm_get_slot_for_key(rq->q->ksm, rq->crypt_ctx->bc_key,
+					&rq->crypt_keyslot);
+}
+
+/**
+ * __blk_crypto_free_request - Uninitialize the crypto fields of a request.
+ *
+ * @rq: The request whose crypto fields to uninitialize.
+ *
+ * Completely uninitializes the crypto fields of a request. If a keyslot has
+ * been programmed into some inline encryption hardware, that keyslot is
+ * released. The rq->crypt_ctx is also freed.
+ */
+void __blk_crypto_free_request(struct request *rq)
+{
+	blk_ksm_put_slot(rq->crypt_keyslot);
+	mempool_free(rq->crypt_ctx, bio_crypt_ctx_pool);
+	blk_crypto_rq_set_defaults(rq);
+}
+
+/**
+ * __blk_crypto_bio_prep - Prepare bio for inline encryption
+ *
+ * @bio_ptr: pointer to original bio pointer
+ *
+ * If the bio crypt context provided for the bio is supported by the underlying
+ * device's inline encryption hardware, do nothing.
+ *
+ * Otherwise, try to perform en/decryption for this bio by falling back to the
+ * kernel crypto API. When the crypto API fallback is used for encryption,
+ * blk-crypto may choose to split the bio into 2 - the first one that will
+ * continue to be processed and the second one that will be resubmitted via
+ * generic_make_request. A bounce bio will be allocated to encrypt the contents
+ * of the aforementioned "first one", and *bio_ptr will be updated to this
+ * bounce bio.
+ *
+ * Caller must ensure bio has bio_crypt_ctx.
+ *
+ * Return: true on success; false on error (and bio->bi_status will be set
+ *	   appropriately, and bio_endio() will have been called so bio
+ *	   submission should abort).
+ */
+bool __blk_crypto_bio_prep(struct bio **bio_ptr)
+{
+	struct bio *bio = *bio_ptr;
+	const struct blk_crypto_key *bc_key = bio->bi_crypt_context->bc_key;
+
+	/* Error if bio has no data. */
+	if (WARN_ON_ONCE(!bio_has_data(bio))) {
+		bio->bi_status = BLK_STS_IOERR;
+		goto fail;
+	}
+
+	if (!bio_crypt_check_alignment(bio)) {
+		bio->bi_status = BLK_STS_IOERR;
+		goto fail;
+	}
+
+	/*
+	 * Success if device supports the encryption context, or if we succeeded
+	 * in falling back to the crypto API.
+	 */
+	if (blk_ksm_crypto_cfg_supported(bio->bi_disk->queue->ksm,
+					 &bc_key->crypto_cfg))
+		return true;
+
+	if (blk_crypto_fallback_bio_prep(bio_ptr))
+		return true;
+fail:
+	bio_endio(*bio_ptr);
+	return false;
+}
+
+int __blk_crypto_rq_bio_prep(struct request *rq, struct bio *bio,
+			     gfp_t gfp_mask)
+{
+	if (!rq->crypt_ctx) {
+		rq->crypt_ctx = mempool_alloc(bio_crypt_ctx_pool, gfp_mask);
+		if (!rq->crypt_ctx)
+			return -ENOMEM;
+	}
+	*rq->crypt_ctx = *bio->bi_crypt_context;
+	return 0;
+}
+
+/**
+ * blk_crypto_init_key() - Prepare a key for use with blk-crypto
+ * @blk_key: Pointer to the blk_crypto_key to initialize.
+ * @raw_key: Pointer to the raw key.
+ * @raw_key_size: Size of raw key.  Must be at least the required size for the
+ *                chosen @crypto_mode; see blk_crypto_modes[].  (It's allowed
+ *                to be longer than the mode's actual key size, in order to
+ *                support inline encryption hardware that accepts wrapped keys.
+ *                @is_hw_wrapped has to be set for such keys)
+ * @is_hw_wrapped: Denotes @raw_key is wrapped.
+ * @crypto_mode: identifier for the encryption algorithm to use
+ * @dun_bytes: number of bytes that will be used to specify the DUN when this
+ *	       key is used
+ * @data_unit_size: the data unit size to use for en/decryption
+ *
+ * Return: 0 on success, -errno on failure.  The caller is responsible for
+ *	   zeroizing both blk_key and raw_key when done with them.
+ */
+int blk_crypto_init_key(struct blk_crypto_key *blk_key,
+			const u8 *raw_key, unsigned int raw_key_size,
+			bool is_hw_wrapped,
+			enum blk_crypto_mode_num crypto_mode,
+			unsigned int dun_bytes,
+			unsigned int data_unit_size)
+{
+	const struct blk_crypto_mode *mode;
+
+	memset(blk_key, 0, sizeof(*blk_key));
+
+	if (crypto_mode >= ARRAY_SIZE(blk_crypto_modes))
+		return -EINVAL;
+
+	BUILD_BUG_ON(BLK_CRYPTO_MAX_WRAPPED_KEY_SIZE < BLK_CRYPTO_MAX_KEY_SIZE);
+
+	mode = &blk_crypto_modes[crypto_mode];
+	if (is_hw_wrapped) {
+		if (raw_key_size < mode->keysize ||
+		    raw_key_size > BLK_CRYPTO_MAX_WRAPPED_KEY_SIZE)
+			return -EINVAL;
+	} else {
+		if (raw_key_size != mode->keysize)
+			return -EINVAL;
+	}
+
+	if (dun_bytes == 0 || dun_bytes > BLK_CRYPTO_MAX_IV_SIZE)
+		return -EINVAL;
+
+	if (!is_power_of_2(data_unit_size))
+		return -EINVAL;
+
+	blk_key->crypto_cfg.crypto_mode = crypto_mode;
+	blk_key->crypto_cfg.dun_bytes = dun_bytes;
+	blk_key->crypto_cfg.data_unit_size = data_unit_size;
+	blk_key->crypto_cfg.is_hw_wrapped = is_hw_wrapped;
+	blk_key->data_unit_size_bits = ilog2(data_unit_size);
+	blk_key->size = raw_key_size;
+	memcpy(blk_key->raw, raw_key, raw_key_size);
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(blk_crypto_init_key);
+
+/*
+ * Check if bios with @cfg can be en/decrypted by blk-crypto (i.e. either the
+ * request queue it's submitted to supports inline crypto, or the
+ * blk-crypto-fallback is enabled and supports the cfg).
+ */
+bool blk_crypto_config_supported(struct request_queue *q,
+				 const struct blk_crypto_config *cfg)
+{
+	if (IS_ENABLED(CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK) &&
+	    !cfg->is_hw_wrapped)
+		return true;
+	return blk_ksm_crypto_cfg_supported(q->ksm, cfg);
+}
+
+/**
+ * blk_crypto_start_using_key() - Start using a blk_crypto_key on a device
+ * @key: A key to use on the device
+ * @q: the request queue for the device
+ *
+ * Upper layers must call this function to ensure that either the hardware
+ * supports the key's crypto settings, or the crypto API fallback has transforms
+ * for the needed mode allocated and ready to go. This function may allocate
+ * an skcipher, and *should not* be called from the data path, since that might
+ * cause a deadlock
+ *
+ * Return: 0 on success; -ENOPKG if the hardware doesn't support the key and
+ *	   blk-crypto-fallback is either disabled or the needed algorithm
+ *	   is disabled in the crypto API; or another -errno code.
+ */
+int blk_crypto_start_using_key(const struct blk_crypto_key *key,
+			       struct request_queue *q)
+{
+	if (blk_ksm_crypto_cfg_supported(q->ksm, &key->crypto_cfg))
+		return 0;
+	if (key->crypto_cfg.is_hw_wrapped) {
+		pr_warn_once("hardware doesn't support wrapped keys\n");
+		return -EOPNOTSUPP;
+	}
+	return blk_crypto_fallback_start_using_mode(key->crypto_cfg.crypto_mode);
+}
+EXPORT_SYMBOL_GPL(blk_crypto_start_using_key);
+
+/**
+ * blk_crypto_evict_key() - Evict a key from any inline encryption hardware
+ *			    it may have been programmed into
+ * @q: The request queue who's associated inline encryption hardware this key
+ *     might have been programmed into
+ * @key: The key to evict
+ *
+ * Upper layers (filesystems) must call this function to ensure that a key is
+ * evicted from any hardware that it might have been programmed into.  The key
+ * must not be in use by any in-flight IO when this function is called.
+ *
+ * Return: 0 on success or if key is not present in the q's ksm, -err on error.
+ */
+int blk_crypto_evict_key(struct request_queue *q,
+			 const struct blk_crypto_key *key)
+{
+	if (blk_ksm_crypto_cfg_supported(q->ksm, &key->crypto_cfg))
+		return blk_ksm_evict_key(q->ksm, key);
+
+	/*
+	 * If the request queue's associated inline encryption hardware didn't
+	 * have support for the key, then the key might have been programmed
+	 * into the fallback keyslot manager, so try to evict from there.
+	 */
+	return blk_crypto_fallback_evict_key(key);
+}
+EXPORT_SYMBOL_GPL(blk_crypto_evict_key);
diff --git a/block/blk-integrity.c b/block/blk-integrity.c
index ff1070e..c03705c 100644
--- a/block/blk-integrity.c
+++ b/block/blk-integrity.c
@@ -409,6 +409,13 @@ void blk_integrity_register(struct gendisk *disk, struct blk_integrity *template
 	bi->tag_size = template->tag_size;
 
 	disk->queue->backing_dev_info->capabilities |= BDI_CAP_STABLE_WRITES;
+
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+	if (disk->queue->ksm) {
+		pr_warn("blk-integrity: Integrity and hardware inline encryption are not supported together. Disabling hardware inline encryption.\n");
+		blk_ksm_unregister(disk->queue);
+	}
+#endif
 }
 EXPORT_SYMBOL(blk_integrity_register);
 
diff --git a/block/blk-map.c b/block/blk-map.c
index b079026..4484e37 100644
--- a/block/blk-map.c
+++ b/block/blk-map.c
@@ -41,6 +41,7 @@ int blk_rq_append_bio(struct request *rq, struct bio **bio)
 		rq->biotail->bi_next = *bio;
 		rq->biotail = *bio;
 		rq->__data_len += (*bio)->bi_iter.bi_size;
+		bio_crypt_free_ctx(*bio);
 	}
 
 	return 0;
diff --git a/block/blk-merge.c b/block/blk-merge.c
index 86c4c1e..7cb45b6 100644
--- a/block/blk-merge.c
+++ b/block/blk-merge.c
@@ -588,6 +588,8 @@ int ll_back_merge_fn(struct request *req, struct bio *bio, unsigned int nr_segs)
 	if (blk_integrity_rq(req) &&
 	    integrity_req_gap_back_merge(req, bio))
 		return 0;
+	if (!bio_crypt_ctx_back_mergeable(req, bio))
+		return 0;
 	if (blk_rq_sectors(req) + bio_sectors(bio) >
 	    blk_rq_get_max_sectors(req, blk_rq_pos(req))) {
 		req_set_nomerge(req->q, req);
@@ -604,6 +606,8 @@ int ll_front_merge_fn(struct request *req, struct bio *bio, unsigned int nr_segs
 	if (blk_integrity_rq(req) &&
 	    integrity_req_gap_front_merge(req, bio))
 		return 0;
+	if (!bio_crypt_ctx_front_mergeable(req, bio))
+		return 0;
 	if (blk_rq_sectors(req) + bio_sectors(bio) >
 	    blk_rq_get_max_sectors(req, bio->bi_iter.bi_sector)) {
 		req_set_nomerge(req->q, req);
@@ -653,6 +657,9 @@ static int ll_merge_requests_fn(struct request_queue *q, struct request *req,
 	if (blk_integrity_merge_rq(q, req, next) == false)
 		return 0;
 
+	if (!bio_crypt_ctx_merge_rq(req, next))
+		return 0;
+
 	/* Merge is OK... */
 	req->nr_phys_segments = total_phys_segments;
 	return 1;
@@ -877,6 +884,10 @@ bool blk_rq_merge_ok(struct request *rq, struct bio *bio)
 	if (blk_integrity_merge_bio(rq->q, rq, bio) == false)
 		return false;
 
+	/* Only merge if the crypt contexts are compatible */
+	if (!bio_crypt_rq_ctx_compatible(rq, bio))
+		return false;
+
 	/* must be using the same buffer */
 	if (req_op(rq) == REQ_OP_WRITE_SAME &&
 	    !blk_write_same_mergeable(rq->bio, bio))
diff --git a/block/blk-mq-virtio.c b/block/blk-mq-virtio.c
index 4883416..d2808e1 100644
--- a/block/blk-mq-virtio.c
+++ b/block/blk-mq-virtio.c
@@ -44,3 +44,6 @@ int blk_mq_virtio_map_queues(struct blk_mq_queue_map *qmap,
 	return blk_mq_map_queues(qmap);
 }
 EXPORT_SYMBOL_GPL(blk_mq_virtio_map_queues);
+
+MODULE_DESCRIPTION("Virtio Device Default Queue Mapping");
+MODULE_LICENSE("GPL v2");
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 057a634..50d938d 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -26,6 +26,7 @@
 #include <linux/delay.h>
 #include <linux/crash_dump.h>
 #include <linux/prefetch.h>
+#include <linux/blk-crypto.h>
 
 #include <trace/events/block.h>
 
@@ -339,6 +340,7 @@ static struct request *blk_mq_rq_ctx_init(struct blk_mq_alloc_data *data,
 #if defined(CONFIG_BLK_DEV_INTEGRITY)
 	rq->nr_integrity_segments = 0;
 #endif
+	blk_crypto_rq_set_defaults(rq);
 	/* tag was already set */
 	rq->extra_len = 0;
 	WRITE_ONCE(rq->deadline, 0);
@@ -496,6 +498,7 @@ static void __blk_mq_free_request(struct request *rq)
 	struct blk_mq_hw_ctx *hctx = rq->mq_hctx;
 	const int sched_tag = rq->internal_tag;
 
+	blk_crypto_free_request(rq);
 	blk_pm_mark_last_busy(rq);
 	rq->mq_hctx = NULL;
 	if (rq->tag != -1)
@@ -1803,6 +1806,8 @@ void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule)
 static void blk_mq_bio_to_request(struct request *rq, struct bio *bio,
 		unsigned int nr_segs)
 {
+	int err;
+
 	if (bio->bi_opf & REQ_RAHEAD)
 		rq->cmd_flags |= REQ_FAILFAST_MASK;
 
@@ -1810,6 +1815,10 @@ static void blk_mq_bio_to_request(struct request *rq, struct bio *bio,
 	rq->write_hint = bio->bi_write_hint;
 	blk_rq_bio_prep(rq, bio, nr_segs);
 
+	/* This can't fail, since GFP_NOIO includes __GFP_DIRECT_RECLAIM. */
+	err = blk_crypto_rq_bio_prep(rq, bio, GFP_NOIO);
+	WARN_ON_ONCE(err);
+
 	blk_account_io_start(rq, true);
 }
 
@@ -1981,6 +1990,7 @@ static blk_qc_t blk_mq_make_request(struct request_queue *q, struct bio *bio)
 	struct request *same_queue_rq = NULL;
 	unsigned int nr_segs;
 	blk_qc_t cookie;
+	blk_status_t ret;
 
 	blk_queue_bounce(q, &bio);
 	__blk_queue_split(q, &bio, &nr_segs);
@@ -2014,6 +2024,14 @@ static blk_qc_t blk_mq_make_request(struct request_queue *q, struct bio *bio)
 
 	blk_mq_bio_to_request(rq, bio, nr_segs);
 
+	ret = blk_crypto_init_request(rq);
+	if (ret != BLK_STS_OK) {
+		bio->bi_status = ret;
+		bio_endio(bio);
+		blk_mq_free_request(rq);
+		return BLK_QC_T_NONE;
+	}
+
 	plug = blk_mq_plug(q, bio);
 	if (unlikely(is_flush_fua)) {
 		/* bypass scheduler for flush rq */
diff --git a/block/blk-pm.c b/block/blk-pm.c
index 2ccf88dba..17bd020 100644
--- a/block/blk-pm.c
+++ b/block/blk-pm.c
@@ -167,9 +167,8 @@ EXPORT_SYMBOL(blk_pre_runtime_resume);
  *
  * Description:
  *    Update the queue's runtime status according to the return value of the
- *    device's runtime_resume function. If it is successfully resumed, process
- *    the requests that are queued into the device's queue when it is resuming
- *    and then mark last busy and initiate autosuspend for it.
+ *    device's runtime_resume function. If the resume was successful, call
+ *    blk_set_runtime_active() to do the real work of restarting the queue.
  *
  *    This function should be called near the end of the device's
  *    runtime_resume callback.
@@ -178,19 +177,13 @@ void blk_post_runtime_resume(struct request_queue *q, int err)
 {
 	if (!q->dev)
 		return;
-
-	spin_lock_irq(&q->queue_lock);
 	if (!err) {
-		q->rpm_status = RPM_ACTIVE;
-		pm_runtime_mark_last_busy(q->dev);
-		pm_request_autosuspend(q->dev);
+		blk_set_runtime_active(q);
 	} else {
+		spin_lock_irq(&q->queue_lock);
 		q->rpm_status = RPM_SUSPENDED;
+		spin_unlock_irq(&q->queue_lock);
 	}
-	spin_unlock_irq(&q->queue_lock);
-
-	if (!err)
-		blk_clear_pm_only(q);
 }
 EXPORT_SYMBOL(blk_post_runtime_resume);
 
@@ -207,15 +200,25 @@ EXPORT_SYMBOL(blk_post_runtime_resume);
  * This function can be used in driver's resume hook to correct queue
  * runtime PM status and re-enable peeking requests from the queue. It
  * should be called before first request is added to the queue.
+ *
+ * This function is also called by blk_post_runtime_resume() for successful
+ * runtime resumes.  It does everything necessary to restart the queue.
  */
 void blk_set_runtime_active(struct request_queue *q)
 {
-	if (q->dev) {
-		spin_lock_irq(&q->queue_lock);
-		q->rpm_status = RPM_ACTIVE;
-		pm_runtime_mark_last_busy(q->dev);
-		pm_request_autosuspend(q->dev);
-		spin_unlock_irq(&q->queue_lock);
-	}
+	int old_status;
+
+	if (!q->dev)
+		return;
+
+	spin_lock_irq(&q->queue_lock);
+	old_status = q->rpm_status;
+	q->rpm_status = RPM_ACTIVE;
+	pm_runtime_mark_last_busy(q->dev);
+	pm_request_autosuspend(q->dev);
+	spin_unlock_irq(&q->queue_lock);
+
+	if (old_status != RPM_ACTIVE)
+		blk_clear_pm_only(q);
 }
 EXPORT_SYMBOL(blk_set_runtime_active);
diff --git a/block/blk-zoned.c b/block/blk-zoned.c
index b17c094..3d8f44a 100644
--- a/block/blk-zoned.c
+++ b/block/blk-zoned.c
@@ -70,135 +70,56 @@ void __blk_req_zone_write_unlock(struct request *rq)
 }
 EXPORT_SYMBOL_GPL(__blk_req_zone_write_unlock);
 
-static inline unsigned int __blkdev_nr_zones(struct request_queue *q,
-					     sector_t nr_sectors)
-{
-	sector_t zone_sectors = blk_queue_zone_sectors(q);
-
-	return (nr_sectors + zone_sectors - 1) >> ilog2(zone_sectors);
-}
-
 /**
  * blkdev_nr_zones - Get number of zones
- * @bdev:	Target block device
+ * @disk:	Target gendisk
  *
- * Description:
- *    Return the total number of zones of a zoned block device.
- *    For a regular block device, the number of zones is always 0.
+ * Return the total number of zones of a zoned block device.  For a block
+ * device without zone capabilities, the number of zones is always 0.
  */
-unsigned int blkdev_nr_zones(struct block_device *bdev)
+unsigned int blkdev_nr_zones(struct gendisk *disk)
 {
-	struct request_queue *q = bdev_get_queue(bdev);
+	sector_t zone_sectors = blk_queue_zone_sectors(disk->queue);
 
-	if (!blk_queue_is_zoned(q))
+	if (!blk_queue_is_zoned(disk->queue))
 		return 0;
-
-	return __blkdev_nr_zones(q, bdev->bd_part->nr_sects);
+	return (get_capacity(disk) + zone_sectors - 1) >> ilog2(zone_sectors);
 }
 EXPORT_SYMBOL_GPL(blkdev_nr_zones);
 
-/*
- * Check that a zone report belongs to this partition, and if yes, fix its start
- * sector and write pointer and return true. Return false otherwise.
- */
-static bool blkdev_report_zone(struct block_device *bdev, struct blk_zone *rep)
-{
-	sector_t offset = get_start_sect(bdev);
-
-	if (rep->start < offset)
-		return false;
-
-	rep->start -= offset;
-	if (rep->start + rep->len > bdev->bd_part->nr_sects)
-		return false;
-
-	if (rep->type == BLK_ZONE_TYPE_CONVENTIONAL)
-		rep->wp = rep->start + rep->len;
-	else
-		rep->wp -= offset;
-	return true;
-}
-
-static int blk_report_zones(struct gendisk *disk, sector_t sector,
-			    struct blk_zone *zones, unsigned int *nr_zones)
-{
-	struct request_queue *q = disk->queue;
-	unsigned int z = 0, n, nrz = *nr_zones;
-	sector_t capacity = get_capacity(disk);
-	int ret;
-
-	while (z < nrz && sector < capacity) {
-		n = nrz - z;
-		ret = disk->fops->report_zones(disk, sector, &zones[z], &n);
-		if (ret)
-			return ret;
-		if (!n)
-			break;
-		sector += blk_queue_zone_sectors(q) * n;
-		z += n;
-	}
-
-	WARN_ON(z > *nr_zones);
-	*nr_zones = z;
-
-	return 0;
-}
-
 /**
  * blkdev_report_zones - Get zones information
  * @bdev:	Target block device
  * @sector:	Sector from which to report zones
- * @zones:	Array of zone structures where to return the zones information
- * @nr_zones:	Number of zone structures in the zone array
+ * @nr_zones:	Maximum number of zones to report
+ * @cb:		Callback function called for each reported zone
+ * @data:	Private data for the callback
  *
  * Description:
- *    Get zone information starting from the zone containing @sector.
- *    The number of zone information reported may be less than the number
- *    requested by @nr_zones. The number of zones actually reported is
- *    returned in @nr_zones.
- *    The caller must use memalloc_noXX_save/restore() calls to control
- *    memory allocations done within this function (zone array and command
- *    buffer allocation by the device driver).
+ *    Get zone information starting from the zone containing @sector for at most
+ *    @nr_zones, and call @cb for each zone reported by the device.
+ *    To report all zones in a device starting from @sector, the BLK_ALL_ZONES
+ *    constant can be passed to @nr_zones.
+ *    Returns the number of zones reported by the device, or a negative errno
+ *    value in case of failure.
+ *
+ *    Note: The caller must use memalloc_noXX_save/restore() calls to control
+ *    memory allocations done within this function.
  */
 int blkdev_report_zones(struct block_device *bdev, sector_t sector,
-			struct blk_zone *zones, unsigned int *nr_zones)
+			unsigned int nr_zones, report_zones_cb cb, void *data)
 {
-	struct request_queue *q = bdev_get_queue(bdev);
-	unsigned int i, nrz;
-	int ret;
+	struct gendisk *disk = bdev->bd_disk;
+	sector_t capacity = get_capacity(disk);
 
-	if (!blk_queue_is_zoned(q))
+	if (!blk_queue_is_zoned(bdev_get_queue(bdev)) ||
+	    WARN_ON_ONCE(!disk->fops->report_zones))
 		return -EOPNOTSUPP;
 
-	/*
-	 * A block device that advertized itself as zoned must have a
-	 * report_zones method. If it does not have one defined, the device
-	 * driver has a bug. So warn about that.
-	 */
-	if (WARN_ON_ONCE(!bdev->bd_disk->fops->report_zones))
-		return -EOPNOTSUPP;
-
-	if (!*nr_zones || sector >= bdev->bd_part->nr_sects) {
-		*nr_zones = 0;
+	if (!nr_zones || sector >= capacity)
 		return 0;
-	}
 
-	nrz = min(*nr_zones,
-		  __blkdev_nr_zones(q, bdev->bd_part->nr_sects - sector));
-	ret = blk_report_zones(bdev->bd_disk, get_start_sect(bdev) + sector,
-			       zones, &nrz);
-	if (ret)
-		return ret;
-
-	for (i = 0; i < nrz; i++) {
-		if (!blkdev_report_zone(bdev, zones))
-			break;
-		zones++;
-	}
-
-	*nr_zones = i;
-
-	return 0;
+	return disk->fops->report_zones(disk, sector, nr_zones, cb, data);
 }
 EXPORT_SYMBOL_GPL(blkdev_report_zones);
 
@@ -209,38 +130,38 @@ static inline bool blkdev_allow_reset_all_zones(struct block_device *bdev,
 	if (!blk_queue_zone_resetall(bdev_get_queue(bdev)))
 		return false;
 
-	if (sector || nr_sectors != part_nr_sects_read(bdev->bd_part))
-		return false;
 	/*
-	 * REQ_OP_ZONE_RESET_ALL can be executed only if the block device is
-	 * the entire disk, that is, if the blocks device start offset is 0 and
-	 * its capacity is the same as the entire disk.
+	 * REQ_OP_ZONE_RESET_ALL can be executed only if the number of sectors
+	 * of the applicable zone range is the entire disk.
 	 */
-	return get_start_sect(bdev) == 0 &&
-	       part_nr_sects_read(bdev->bd_part) == get_capacity(bdev->bd_disk);
+	return !sector && nr_sectors == get_capacity(bdev->bd_disk);
 }
 
 /**
- * blkdev_reset_zones - Reset zones write pointer
+ * blkdev_zone_mgmt - Execute a zone management operation on a range of zones
  * @bdev:	Target block device
- * @sector:	Start sector of the first zone to reset
- * @nr_sectors:	Number of sectors, at least the length of one zone
+ * @op:		Operation to be performed on the zones
+ * @sector:	Start sector of the first zone to operate on
+ * @nr_sectors:	Number of sectors, should be at least the length of one zone and
+ *		must be zone size aligned.
  * @gfp_mask:	Memory allocation flags (for bio_alloc)
  *
  * Description:
- *    Reset the write pointer of the zones contained in the range
+ *    Perform the specified operation on the range of zones specified by
  *    @sector..@sector+@nr_sectors. Specifying the entire disk sector range
  *    is valid, but the specified range should not contain conventional zones.
+ *    The operation to execute on each zone can be a zone reset, open, close
+ *    or finish request.
  */
-int blkdev_reset_zones(struct block_device *bdev,
-		       sector_t sector, sector_t nr_sectors,
-		       gfp_t gfp_mask)
+int blkdev_zone_mgmt(struct block_device *bdev, enum req_opf op,
+		     sector_t sector, sector_t nr_sectors,
+		     gfp_t gfp_mask)
 {
 	struct request_queue *q = bdev_get_queue(bdev);
-	sector_t zone_sectors;
+	sector_t zone_sectors = blk_queue_zone_sectors(q);
+	sector_t capacity = get_capacity(bdev->bd_disk);
 	sector_t end_sector = sector + nr_sectors;
 	struct bio *bio = NULL;
-	struct blk_plug plug;
 	int ret;
 
 	if (!blk_queue_is_zoned(q))
@@ -249,20 +170,20 @@ int blkdev_reset_zones(struct block_device *bdev,
 	if (bdev_read_only(bdev))
 		return -EPERM;
 
-	if (!nr_sectors || end_sector > bdev->bd_part->nr_sects)
+	if (!op_is_zone_mgmt(op))
+		return -EOPNOTSUPP;
+
+	if (!nr_sectors || end_sector > capacity)
 		/* Out of range */
 		return -EINVAL;
 
 	/* Check alignment (handle eventual smaller last zone) */
-	zone_sectors = blk_queue_zone_sectors(q);
 	if (sector & (zone_sectors - 1))
 		return -EINVAL;
 
-	if ((nr_sectors & (zone_sectors - 1)) &&
-	    end_sector != bdev->bd_part->nr_sects)
+	if ((nr_sectors & (zone_sectors - 1)) && end_sector != capacity)
 		return -EINVAL;
 
-	blk_start_plug(&plug);
 	while (sector < end_sector) {
 		bio = blk_next_bio(bio, 0, gfp_mask);
 		bio_set_dev(bio, bdev);
@@ -271,12 +192,13 @@ int blkdev_reset_zones(struct block_device *bdev,
 		 * Special case for the zone reset operation that reset all
 		 * zones, this is useful for applications like mkfs.
 		 */
-		if (blkdev_allow_reset_all_zones(bdev, sector, nr_sectors)) {
+		if (op == REQ_OP_ZONE_RESET &&
+		    blkdev_allow_reset_all_zones(bdev, sector, nr_sectors)) {
 			bio->bi_opf = REQ_OP_ZONE_RESET_ALL;
 			break;
 		}
 
-		bio->bi_opf = REQ_OP_ZONE_RESET;
+		bio->bi_opf = op;
 		bio->bi_iter.bi_sector = sector;
 		sector += zone_sectors;
 
@@ -287,11 +209,23 @@ int blkdev_reset_zones(struct block_device *bdev,
 	ret = submit_bio_wait(bio);
 	bio_put(bio);
 
-	blk_finish_plug(&plug);
-
 	return ret;
 }
-EXPORT_SYMBOL_GPL(blkdev_reset_zones);
+EXPORT_SYMBOL_GPL(blkdev_zone_mgmt);
+
+struct zone_report_args {
+	struct blk_zone __user *zones;
+};
+
+static int blkdev_copy_zone_to_user(struct blk_zone *zone, unsigned int idx,
+				    void *data)
+{
+	struct zone_report_args *args = data;
+
+	if (copy_to_user(&args->zones[idx], zone, sizeof(struct blk_zone)))
+		return -EFAULT;
+	return 0;
+}
 
 /*
  * BLKREPORTZONE ioctl processing.
@@ -301,9 +235,9 @@ int blkdev_report_zones_ioctl(struct block_device *bdev, fmode_t mode,
 			      unsigned int cmd, unsigned long arg)
 {
 	void __user *argp = (void __user *)arg;
+	struct zone_report_args args;
 	struct request_queue *q;
 	struct blk_zone_report rep;
-	struct blk_zone *zones;
 	int ret;
 
 	if (!argp)
@@ -325,44 +259,30 @@ int blkdev_report_zones_ioctl(struct block_device *bdev, fmode_t mode,
 	if (!rep.nr_zones)
 		return -EINVAL;
 
-	rep.nr_zones = min(blkdev_nr_zones(bdev), rep.nr_zones);
+	args.zones = argp + sizeof(struct blk_zone_report);
+	ret = blkdev_report_zones(bdev, rep.sector, rep.nr_zones,
+				  blkdev_copy_zone_to_user, &args);
+	if (ret < 0)
+		return ret;
 
-	zones = kvmalloc_array(rep.nr_zones, sizeof(struct blk_zone),
-			       GFP_KERNEL | __GFP_ZERO);
-	if (!zones)
-		return -ENOMEM;
-
-	ret = blkdev_report_zones(bdev, rep.sector, zones, &rep.nr_zones);
-	if (ret)
-		goto out;
-
-	if (copy_to_user(argp, &rep, sizeof(struct blk_zone_report))) {
-		ret = -EFAULT;
-		goto out;
-	}
-
-	if (rep.nr_zones) {
-		if (copy_to_user(argp + sizeof(struct blk_zone_report), zones,
-				 sizeof(struct blk_zone) * rep.nr_zones))
-			ret = -EFAULT;
-	}
-
- out:
-	kvfree(zones);
-
-	return ret;
+	rep.nr_zones = ret;
+	rep.flags = BLK_ZONE_REP_CAPACITY;
+	if (copy_to_user(argp, &rep, sizeof(struct blk_zone_report)))
+		return -EFAULT;
+	return 0;
 }
 
 /*
- * BLKRESETZONE ioctl processing.
+ * BLKRESETZONE, BLKOPENZONE, BLKCLOSEZONE and BLKFINISHZONE ioctl processing.
  * Called from blkdev_ioctl.
  */
-int blkdev_reset_zones_ioctl(struct block_device *bdev, fmode_t mode,
-			     unsigned int cmd, unsigned long arg)
+int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode,
+			   unsigned int cmd, unsigned long arg)
 {
 	void __user *argp = (void __user *)arg;
 	struct request_queue *q;
 	struct blk_zone_range zrange;
+	enum req_opf op;
 
 	if (!argp)
 		return -EINVAL;
@@ -383,8 +303,25 @@ int blkdev_reset_zones_ioctl(struct block_device *bdev, fmode_t mode,
 	if (copy_from_user(&zrange, argp, sizeof(struct blk_zone_range)))
 		return -EFAULT;
 
-	return blkdev_reset_zones(bdev, zrange.sector, zrange.nr_sectors,
-				  GFP_KERNEL);
+	switch (cmd) {
+	case BLKRESETZONE:
+		op = REQ_OP_ZONE_RESET;
+		break;
+	case BLKOPENZONE:
+		op = REQ_OP_ZONE_OPEN;
+		break;
+	case BLKCLOSEZONE:
+		op = REQ_OP_ZONE_CLOSE;
+		break;
+	case BLKFINISHZONE:
+		op = REQ_OP_ZONE_FINISH;
+		break;
+	default:
+		return -ENOTTY;
+	}
+
+	return blkdev_zone_mgmt(bdev, op, zrange.sector, zrange.nr_sectors,
+				GFP_KERNEL);
 }
 
 static inline unsigned long *blk_alloc_zone_bitmap(int node,
@@ -394,141 +331,151 @@ static inline unsigned long *blk_alloc_zone_bitmap(int node,
 			    GFP_NOIO, node);
 }
 
-/*
- * Allocate an array of struct blk_zone to get nr_zones zone information.
- * The allocated array may be smaller than nr_zones.
- */
-static struct blk_zone *blk_alloc_zones(unsigned int *nr_zones)
-{
-	struct blk_zone *zones;
-	size_t nrz = min(*nr_zones, BLK_ZONED_REPORT_MAX_ZONES);
-
-	/*
-	 * GFP_KERNEL here is meaningless as the caller task context has
-	 * the PF_MEMALLOC_NOIO flag set in blk_revalidate_disk_zones()
-	 * with memalloc_noio_save().
-	 */
-	zones = kvcalloc(nrz, sizeof(struct blk_zone), GFP_KERNEL);
-	if (!zones) {
-		*nr_zones = 0;
-		return NULL;
-	}
-
-	*nr_zones = nrz;
-
-	return zones;
-}
-
 void blk_queue_free_zone_bitmaps(struct request_queue *q)
 {
-	kfree(q->seq_zones_bitmap);
-	q->seq_zones_bitmap = NULL;
+	kfree(q->conv_zones_bitmap);
+	q->conv_zones_bitmap = NULL;
 	kfree(q->seq_zones_wlock);
 	q->seq_zones_wlock = NULL;
 }
 
+struct blk_revalidate_zone_args {
+	struct gendisk	*disk;
+	unsigned long	*conv_zones_bitmap;
+	unsigned long	*seq_zones_wlock;
+	unsigned int	nr_zones;
+	sector_t	zone_sectors;
+	sector_t	sector;
+};
+
+/*
+ * Helper function to check the validity of zones of a zoned block device.
+ */
+static int blk_revalidate_zone_cb(struct blk_zone *zone, unsigned int idx,
+				  void *data)
+{
+	struct blk_revalidate_zone_args *args = data;
+	struct gendisk *disk = args->disk;
+	struct request_queue *q = disk->queue;
+	sector_t capacity = get_capacity(disk);
+
+	/*
+	 * All zones must have the same size, with the exception on an eventual
+	 * smaller last zone.
+	 */
+	if (zone->start == 0) {
+		if (zone->len == 0 || !is_power_of_2(zone->len)) {
+			pr_warn("%s: Invalid zoned device with non power of two zone size (%llu)\n",
+				disk->disk_name, zone->len);
+			return -ENODEV;
+		}
+
+		args->zone_sectors = zone->len;
+		args->nr_zones = (capacity + zone->len - 1) >> ilog2(zone->len);
+	} else if (zone->start + args->zone_sectors < capacity) {
+		if (zone->len != args->zone_sectors) {
+			pr_warn("%s: Invalid zoned device with non constant zone size\n",
+				disk->disk_name);
+			return -ENODEV;
+		}
+	} else {
+		if (zone->len > args->zone_sectors) {
+			pr_warn("%s: Invalid zoned device with larger last zone size\n",
+				disk->disk_name);
+			return -ENODEV;
+		}
+	}
+
+	/* Check for holes in the zone report */
+	if (zone->start != args->sector) {
+		pr_warn("%s: Zone gap at sectors %llu..%llu\n",
+			disk->disk_name, args->sector, zone->start);
+		return -ENODEV;
+	}
+
+	/* Check zone type */
+	switch (zone->type) {
+	case BLK_ZONE_TYPE_CONVENTIONAL:
+		if (!args->conv_zones_bitmap) {
+			args->conv_zones_bitmap =
+				blk_alloc_zone_bitmap(q->node, args->nr_zones);
+			if (!args->conv_zones_bitmap)
+				return -ENOMEM;
+		}
+		set_bit(idx, args->conv_zones_bitmap);
+		break;
+	case BLK_ZONE_TYPE_SEQWRITE_REQ:
+	case BLK_ZONE_TYPE_SEQWRITE_PREF:
+		if (!args->seq_zones_wlock) {
+			args->seq_zones_wlock =
+				blk_alloc_zone_bitmap(q->node, args->nr_zones);
+			if (!args->seq_zones_wlock)
+				return -ENOMEM;
+		}
+		break;
+	default:
+		pr_warn("%s: Invalid zone type 0x%x at sectors %llu\n",
+			disk->disk_name, (int)zone->type, zone->start);
+		return -ENODEV;
+	}
+
+	args->sector += zone->len;
+	return 0;
+}
+
 /**
  * blk_revalidate_disk_zones - (re)allocate and initialize zone bitmaps
  * @disk:	Target disk
  *
  * Helper function for low-level device drivers to (re) allocate and initialize
  * a disk request queue zone bitmaps. This functions should normally be called
- * within the disk ->revalidate method. For BIO based queues, no zone bitmap
- * is allocated.
+ * within the disk ->revalidate method for blk-mq based drivers.  For BIO based
+ * drivers only q->nr_zones needs to be updated so that the sysfs exposed value
+ * is correct.
  */
 int blk_revalidate_disk_zones(struct gendisk *disk)
 {
 	struct request_queue *q = disk->queue;
-	unsigned int nr_zones = __blkdev_nr_zones(q, get_capacity(disk));
-	unsigned long *seq_zones_wlock = NULL, *seq_zones_bitmap = NULL;
-	unsigned int i, rep_nr_zones = 0, z = 0, nrz;
-	struct blk_zone *zones = NULL;
+	struct blk_revalidate_zone_args args = {
+		.disk		= disk,
+	};
 	unsigned int noio_flag;
-	sector_t sector = 0;
-	int ret = 0;
+	int ret;
+
+	if (WARN_ON_ONCE(!blk_queue_is_zoned(q)))
+		return -EIO;
+	if (WARN_ON_ONCE(!queue_is_mq(q)))
+		return -EIO;
 
 	/*
-	 * BIO based queues do not use a scheduler so only q->nr_zones
-	 * needs to be updated so that the sysfs exposed value is correct.
-	 */
-	if (!queue_is_mq(q)) {
-		q->nr_zones = nr_zones;
-		return 0;
-	}
-
-	/*
-	 * Ensure that all memory allocations in this context are done as
-	 * if GFP_NOIO was specified.
+	 * Ensure that all memory allocations in this context are done as if
+	 * GFP_NOIO was specified.
 	 */
 	noio_flag = memalloc_noio_save();
-
-	if (!blk_queue_is_zoned(q) || !nr_zones) {
-		nr_zones = 0;
-		goto update;
-	}
-
-	/* Allocate bitmaps */
-	ret = -ENOMEM;
-	seq_zones_wlock = blk_alloc_zone_bitmap(q->node, nr_zones);
-	if (!seq_zones_wlock)
-		goto out;
-	seq_zones_bitmap = blk_alloc_zone_bitmap(q->node, nr_zones);
-	if (!seq_zones_bitmap)
-		goto out;
-
-	/* Get zone information and initialize seq_zones_bitmap */
-	rep_nr_zones = nr_zones;
-	zones = blk_alloc_zones(&rep_nr_zones);
-	if (!zones)
-		goto out;
-
-	while (z < nr_zones) {
-		nrz = min(nr_zones - z, rep_nr_zones);
-		ret = blk_report_zones(disk, sector, zones, &nrz);
-		if (ret)
-			goto out;
-		if (!nrz)
-			break;
-		for (i = 0; i < nrz; i++) {
-			if (zones[i].type != BLK_ZONE_TYPE_CONVENTIONAL)
-				set_bit(z, seq_zones_bitmap);
-			z++;
-		}
-		sector += nrz * blk_queue_zone_sectors(q);
-	}
-
-	if (WARN_ON(z != nr_zones)) {
-		ret = -EIO;
-		goto out;
-	}
-
-update:
-	/*
-	 * Install the new bitmaps, making sure the queue is stopped and
-	 * all I/Os are completed (i.e. a scheduler is not referencing the
-	 * bitmaps).
-	 */
-	blk_mq_freeze_queue(q);
-	q->nr_zones = nr_zones;
-	swap(q->seq_zones_wlock, seq_zones_wlock);
-	swap(q->seq_zones_bitmap, seq_zones_bitmap);
-	blk_mq_unfreeze_queue(q);
-
-out:
+	ret = disk->fops->report_zones(disk, 0, UINT_MAX,
+				       blk_revalidate_zone_cb, &args);
 	memalloc_noio_restore(noio_flag);
 
-	kvfree(zones);
-	kfree(seq_zones_wlock);
-	kfree(seq_zones_bitmap);
-
-	if (ret) {
+	/*
+	 * Install the new bitmaps and update nr_zones only once the queue is
+	 * stopped and all I/Os are completed (i.e. a scheduler is not
+	 * referencing the bitmaps).
+	 */
+	blk_mq_freeze_queue(q);
+	if (ret >= 0) {
+		blk_queue_chunk_sectors(q, args.zone_sectors);
+		q->nr_zones = args.nr_zones;
+		swap(q->seq_zones_wlock, args.seq_zones_wlock);
+		swap(q->conv_zones_bitmap, args.conv_zones_bitmap);
+		ret = 0;
+	} else {
 		pr_warn("%s: failed to revalidate zones\n", disk->disk_name);
-		blk_mq_freeze_queue(q);
 		blk_queue_free_zone_bitmaps(q);
-		blk_mq_unfreeze_queue(q);
 	}
+	blk_mq_unfreeze_queue(q);
 
+	kfree(args.seq_zones_wlock);
+	kfree(args.conv_zones_bitmap);
 	return ret;
 }
 EXPORT_SYMBOL_GPL(blk_revalidate_disk_zones);
-
diff --git a/block/blk.h b/block/blk.h
index ee3d566..b8920c0 100644
--- a/block/blk.h
+++ b/block/blk.h
@@ -4,7 +4,9 @@
 
 #include <linux/idr.h>
 #include <linux/blk-mq.h>
+#include <linux/blk-crypto.h>
 #include <xen/xen.h>
+#include "blk-crypto-internal.h"
 #include "blk-mq.h"
 #include "blk-mq-sched.h"
 
diff --git a/block/bounce.c b/block/bounce.c
index f8ed677..9bb8e84 100644
--- a/block/bounce.c
+++ b/block/bounce.c
@@ -267,20 +267,21 @@ static struct bio *bounce_clone_bio(struct bio *bio_src, gfp_t gfp_mask,
 		break;
 	}
 
-	if (bio_integrity(bio_src)) {
-		int ret;
+	if (bio_crypt_clone(bio, bio_src, gfp_mask) < 0)
+		goto err_put;
 
-		ret = bio_integrity_clone(bio, bio_src, gfp_mask);
-		if (ret < 0) {
-			bio_put(bio);
-			return NULL;
-		}
-	}
+	if (bio_integrity(bio_src) &&
+	    bio_integrity_clone(bio, bio_src, gfp_mask) < 0)
+		goto err_put;
 
 	bio_clone_blkg_association(bio, bio_src);
 	blkcg_bio_issue_init(bio);
 
 	return bio;
+
+err_put:
+	bio_put(bio);
+	return NULL;
 }
 
 static void __blk_queue_bounce(struct request_queue *q, struct bio **bio_orig,
diff --git a/block/ioctl.c b/block/ioctl.c
index 15a0eb8..f5565dd 100644
--- a/block/ioctl.c
+++ b/block/ioctl.c
@@ -532,11 +532,14 @@ int blkdev_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
 	case BLKREPORTZONE:
 		return blkdev_report_zones_ioctl(bdev, mode, cmd, arg);
 	case BLKRESETZONE:
-		return blkdev_reset_zones_ioctl(bdev, mode, cmd, arg);
+	case BLKOPENZONE:
+	case BLKCLOSEZONE:
+	case BLKFINISHZONE:
+		return blkdev_zone_mgmt_ioctl(bdev, mode, cmd, arg);
 	case BLKGETZONESZ:
 		return put_uint(arg, bdev_zone_sectors(bdev));
 	case BLKGETNRZONES:
-		return put_uint(arg, blkdev_nr_zones(bdev));
+		return put_uint(arg, blkdev_nr_zones(bdev->bd_disk));
 	case HDIO_GETGEO:
 		return blkdev_getgeo(bdev, argp);
 	case BLKRAGET:
diff --git a/block/keyslot-manager.c b/block/keyslot-manager.c
new file mode 100644
index 0000000..2f741be
--- /dev/null
+++ b/block/keyslot-manager.c
@@ -0,0 +1,631 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2019 Google LLC
+ */
+
+/**
+ * DOC: The Keyslot Manager
+ *
+ * Many devices with inline encryption support have a limited number of "slots"
+ * into which encryption contexts may be programmed, and requests can be tagged
+ * with a slot number to specify the key to use for en/decryption.
+ *
+ * As the number of slots is limited, and programming keys is expensive on
+ * many inline encryption hardware, we don't want to program the same key into
+ * multiple slots - if multiple requests are using the same key, we want to
+ * program just one slot with that key and use that slot for all requests.
+ *
+ * The keyslot manager manages these keyslots appropriately, and also acts as
+ * an abstraction between the inline encryption hardware and the upper layers.
+ *
+ * Lower layer devices will set up a keyslot manager in their request queue
+ * and tell it how to perform device specific operations like programming/
+ * evicting keys from keyslots.
+ *
+ * Upper layers will call blk_ksm_get_slot_for_key() to program a
+ * key into some slot in the inline encryption hardware.
+ */
+
+#define pr_fmt(fmt) "blk-crypto: " fmt
+
+#include <linux/keyslot-manager.h>
+#include <linux/device.h>
+#include <linux/atomic.h>
+#include <linux/mutex.h>
+#include <linux/pm_runtime.h>
+#include <linux/wait.h>
+#include <linux/blkdev.h>
+
+struct blk_ksm_keyslot {
+	atomic_t slot_refs;
+	struct list_head idle_slot_node;
+	struct hlist_node hash_node;
+	const struct blk_crypto_key *key;
+	struct blk_keyslot_manager *ksm;
+};
+
+static inline void blk_ksm_hw_enter(struct blk_keyslot_manager *ksm)
+{
+	/*
+	 * Calling into the driver requires ksm->lock held and the device
+	 * resumed.  But we must resume the device first, since that can acquire
+	 * and release ksm->lock via blk_ksm_reprogram_all_keys().
+	 */
+	if (ksm->dev)
+		pm_runtime_get_sync(ksm->dev);
+	down_write(&ksm->lock);
+}
+
+static inline void blk_ksm_hw_exit(struct blk_keyslot_manager *ksm)
+{
+	up_write(&ksm->lock);
+	if (ksm->dev)
+		pm_runtime_put_sync(ksm->dev);
+}
+
+static inline bool blk_ksm_is_passthrough(struct blk_keyslot_manager *ksm)
+{
+	return ksm->num_slots == 0;
+}
+
+/**
+ * blk_ksm_init() - Initialize a keyslot manager
+ * @ksm: The keyslot_manager to initialize.
+ * @num_slots: The number of key slots to manage.
+ *
+ * Allocate memory for keyslots and initialize a keyslot manager. Called by
+ * e.g. storage drivers to set up a keyslot manager in their request_queue.
+ *
+ * Return: 0 on success, or else a negative error code.
+ */
+int blk_ksm_init(struct blk_keyslot_manager *ksm, unsigned int num_slots)
+{
+	unsigned int slot;
+	unsigned int i;
+	unsigned int slot_hashtable_size;
+
+	memset(ksm, 0, sizeof(*ksm));
+
+	if (num_slots == 0)
+		return -EINVAL;
+
+	ksm->slots = kvcalloc(num_slots, sizeof(ksm->slots[0]), GFP_KERNEL);
+	if (!ksm->slots)
+		return -ENOMEM;
+
+	ksm->num_slots = num_slots;
+
+	init_rwsem(&ksm->lock);
+
+	init_waitqueue_head(&ksm->idle_slots_wait_queue);
+	INIT_LIST_HEAD(&ksm->idle_slots);
+
+	for (slot = 0; slot < num_slots; slot++) {
+		ksm->slots[slot].ksm = ksm;
+		list_add_tail(&ksm->slots[slot].idle_slot_node,
+			      &ksm->idle_slots);
+	}
+
+	spin_lock_init(&ksm->idle_slots_lock);
+
+	slot_hashtable_size = roundup_pow_of_two(num_slots);
+	/*
+	 * hash_ptr() assumes bits != 0, so ensure the hash table has at least 2
+	 * buckets.  This only makes a difference when there is only 1 keyslot.
+	 */
+	if (slot_hashtable_size < 2)
+		slot_hashtable_size = 2;
+
+	ksm->log_slot_ht_size = ilog2(slot_hashtable_size);
+	ksm->slot_hashtable = kvmalloc_array(slot_hashtable_size,
+					     sizeof(ksm->slot_hashtable[0]),
+					     GFP_KERNEL);
+	if (!ksm->slot_hashtable)
+		goto err_destroy_ksm;
+	for (i = 0; i < slot_hashtable_size; i++)
+		INIT_HLIST_HEAD(&ksm->slot_hashtable[i]);
+
+	return 0;
+
+err_destroy_ksm:
+	blk_ksm_destroy(ksm);
+	return -ENOMEM;
+}
+EXPORT_SYMBOL_GPL(blk_ksm_init);
+
+static void blk_ksm_destroy_callback(void *ksm)
+{
+	blk_ksm_destroy(ksm);
+}
+
+/**
+ * devm_blk_ksm_init() - Resource-managed blk_ksm_init()
+ * @dev: The device which owns the blk_keyslot_manager.
+ * @ksm: The blk_keyslot_manager to initialize.
+ * @num_slots: The number of key slots to manage.
+ *
+ * Like blk_ksm_init(), but causes blk_ksm_destroy() to be called automatically
+ * on driver detach.
+ *
+ * Return: 0 on success, or else a negative error code.
+ */
+int devm_blk_ksm_init(struct device *dev, struct blk_keyslot_manager *ksm,
+		      unsigned int num_slots)
+{
+	int err = blk_ksm_init(ksm, num_slots);
+
+	if (err)
+		return err;
+
+	return devm_add_action_or_reset(dev, blk_ksm_destroy_callback, ksm);
+}
+EXPORT_SYMBOL_GPL(devm_blk_ksm_init);
+
+static inline struct hlist_head *
+blk_ksm_hash_bucket_for_key(struct blk_keyslot_manager *ksm,
+			    const struct blk_crypto_key *key)
+{
+	return &ksm->slot_hashtable[hash_ptr(key, ksm->log_slot_ht_size)];
+}
+
+static void blk_ksm_remove_slot_from_lru_list(struct blk_ksm_keyslot *slot)
+{
+	struct blk_keyslot_manager *ksm = slot->ksm;
+	unsigned long flags;
+
+	spin_lock_irqsave(&ksm->idle_slots_lock, flags);
+	list_del(&slot->idle_slot_node);
+	spin_unlock_irqrestore(&ksm->idle_slots_lock, flags);
+}
+
+static struct blk_ksm_keyslot *blk_ksm_find_keyslot(
+					struct blk_keyslot_manager *ksm,
+					const struct blk_crypto_key *key)
+{
+	const struct hlist_head *head = blk_ksm_hash_bucket_for_key(ksm, key);
+	struct blk_ksm_keyslot *slotp;
+
+	hlist_for_each_entry(slotp, head, hash_node) {
+		if (slotp->key == key)
+			return slotp;
+	}
+	return NULL;
+}
+
+static struct blk_ksm_keyslot *blk_ksm_find_and_grab_keyslot(
+					struct blk_keyslot_manager *ksm,
+					const struct blk_crypto_key *key)
+{
+	struct blk_ksm_keyslot *slot;
+
+	slot = blk_ksm_find_keyslot(ksm, key);
+	if (!slot)
+		return NULL;
+	if (atomic_inc_return(&slot->slot_refs) == 1) {
+		/* Took first reference to this slot; remove it from LRU list */
+		blk_ksm_remove_slot_from_lru_list(slot);
+	}
+	return slot;
+}
+
+unsigned int blk_ksm_get_slot_idx(struct blk_ksm_keyslot *slot)
+{
+	return slot - slot->ksm->slots;
+}
+EXPORT_SYMBOL_GPL(blk_ksm_get_slot_idx);
+
+/**
+ * blk_ksm_get_slot_for_key() - Program a key into a keyslot.
+ * @ksm: The keyslot manager to program the key into.
+ * @key: Pointer to the key object to program, including the raw key, crypto
+ *	 mode, and data unit size.
+ * @slot_ptr: A pointer to return the pointer of the allocated keyslot.
+ *
+ * Get a keyslot that's been programmed with the specified key.  If one already
+ * exists, return it with incremented refcount.  Otherwise, wait for a keyslot
+ * to become idle and program it.
+ *
+ * Context: Process context. Takes and releases ksm->lock.
+ * Return: BLK_STS_OK on success (and keyslot is set to the pointer of the
+ *	   allocated keyslot), or some other blk_status_t otherwise (and
+ *	   keyslot is set to NULL).
+ */
+blk_status_t blk_ksm_get_slot_for_key(struct blk_keyslot_manager *ksm,
+				      const struct blk_crypto_key *key,
+				      struct blk_ksm_keyslot **slot_ptr)
+{
+	struct blk_ksm_keyslot *slot;
+	int slot_idx;
+	int err;
+
+	*slot_ptr = NULL;
+
+	if (blk_ksm_is_passthrough(ksm))
+		return BLK_STS_OK;
+
+	down_read(&ksm->lock);
+	slot = blk_ksm_find_and_grab_keyslot(ksm, key);
+	up_read(&ksm->lock);
+	if (slot)
+		goto success;
+
+	for (;;) {
+		blk_ksm_hw_enter(ksm);
+		slot = blk_ksm_find_and_grab_keyslot(ksm, key);
+		if (slot) {
+			blk_ksm_hw_exit(ksm);
+			goto success;
+		}
+
+		/*
+		 * If we're here, that means there wasn't a slot that was
+		 * already programmed with the key. So try to program it.
+		 */
+		if (!list_empty(&ksm->idle_slots))
+			break;
+
+		blk_ksm_hw_exit(ksm);
+		wait_event(ksm->idle_slots_wait_queue,
+			   !list_empty(&ksm->idle_slots));
+	}
+
+	slot = list_first_entry(&ksm->idle_slots, struct blk_ksm_keyslot,
+				idle_slot_node);
+	slot_idx = blk_ksm_get_slot_idx(slot);
+
+	err = ksm->ksm_ll_ops.keyslot_program(ksm, key, slot_idx);
+	if (err) {
+		wake_up(&ksm->idle_slots_wait_queue);
+		blk_ksm_hw_exit(ksm);
+		return errno_to_blk_status(err);
+	}
+
+	/* Move this slot to the hash list for the new key. */
+	if (slot->key)
+		hlist_del(&slot->hash_node);
+	slot->key = key;
+	hlist_add_head(&slot->hash_node, blk_ksm_hash_bucket_for_key(ksm, key));
+
+	atomic_set(&slot->slot_refs, 1);
+
+	blk_ksm_remove_slot_from_lru_list(slot);
+
+	blk_ksm_hw_exit(ksm);
+success:
+	*slot_ptr = slot;
+	return BLK_STS_OK;
+}
+
+/**
+ * blk_ksm_put_slot() - Release a reference to a slot
+ * @slot: The keyslot to release the reference of.
+ *
+ * Context: Any context.
+ */
+void blk_ksm_put_slot(struct blk_ksm_keyslot *slot)
+{
+	struct blk_keyslot_manager *ksm;
+	unsigned long flags;
+
+	if (!slot)
+		return;
+
+	ksm = slot->ksm;
+
+	if (atomic_dec_and_lock_irqsave(&slot->slot_refs,
+					&ksm->idle_slots_lock, flags)) {
+		list_add_tail(&slot->idle_slot_node, &ksm->idle_slots);
+		spin_unlock_irqrestore(&ksm->idle_slots_lock, flags);
+		wake_up(&ksm->idle_slots_wait_queue);
+	}
+}
+
+/**
+ * blk_ksm_crypto_cfg_supported() - Find out if a crypto configuration is
+ *				    supported by a ksm.
+ * @ksm: The keyslot manager to check
+ * @cfg: The crypto configuration to check for.
+ *
+ * Checks for crypto_mode/data unit size/dun bytes support.
+ *
+ * Return: Whether or not this ksm supports the specified crypto config.
+ */
+bool blk_ksm_crypto_cfg_supported(struct blk_keyslot_manager *ksm,
+				  const struct blk_crypto_config *cfg)
+{
+	if (!ksm)
+		return false;
+	if (!(ksm->crypto_modes_supported[cfg->crypto_mode] &
+	      cfg->data_unit_size))
+		return false;
+	if (ksm->max_dun_bytes_supported < cfg->dun_bytes)
+		return false;
+	if (cfg->is_hw_wrapped) {
+		if (!(ksm->features & BLK_CRYPTO_FEATURE_WRAPPED_KEYS))
+			return false;
+	} else {
+		if (!(ksm->features & BLK_CRYPTO_FEATURE_STANDARD_KEYS))
+			return false;
+	}
+	return true;
+}
+
+/**
+ * blk_ksm_evict_key() - Evict a key from the lower layer device.
+ * @ksm: The keyslot manager to evict from
+ * @key: The key to evict
+ *
+ * Find the keyslot that the specified key was programmed into, and evict that
+ * slot from the lower layer device. The slot must not be in use by any
+ * in-flight IO when this function is called.
+ *
+ * Context: Process context. Takes and releases ksm->lock.
+ * Return: 0 on success or if there's no keyslot with the specified key, -EBUSY
+ *	   if the keyslot is still in use, or another -errno value on other
+ *	   error.
+ */
+int blk_ksm_evict_key(struct blk_keyslot_manager *ksm,
+		      const struct blk_crypto_key *key)
+{
+	struct blk_ksm_keyslot *slot;
+	int err = 0;
+
+	if (blk_ksm_is_passthrough(ksm)) {
+		if (ksm->ksm_ll_ops.keyslot_evict) {
+			blk_ksm_hw_enter(ksm);
+			err = ksm->ksm_ll_ops.keyslot_evict(ksm, key, -1);
+			blk_ksm_hw_exit(ksm);
+			return err;
+		}
+		return 0;
+	}
+
+	blk_ksm_hw_enter(ksm);
+	slot = blk_ksm_find_keyslot(ksm, key);
+	if (!slot)
+		goto out_unlock;
+
+	if (WARN_ON_ONCE(atomic_read(&slot->slot_refs) != 0)) {
+		err = -EBUSY;
+		goto out_unlock;
+	}
+	err = ksm->ksm_ll_ops.keyslot_evict(ksm, key,
+					    blk_ksm_get_slot_idx(slot));
+	if (err)
+		goto out_unlock;
+
+	hlist_del(&slot->hash_node);
+	slot->key = NULL;
+	err = 0;
+out_unlock:
+	blk_ksm_hw_exit(ksm);
+	return err;
+}
+
+/**
+ * blk_ksm_reprogram_all_keys() - Re-program all keyslots.
+ * @ksm: The keyslot manager
+ *
+ * Re-program all keyslots that are supposed to have a key programmed.  This is
+ * intended only for use by drivers for hardware that loses its keys on reset.
+ *
+ * Context: Process context. Takes and releases ksm->lock.
+ */
+void blk_ksm_reprogram_all_keys(struct blk_keyslot_manager *ksm)
+{
+	unsigned int slot;
+
+	if (blk_ksm_is_passthrough(ksm))
+		return;
+
+	/* This is for device initialization, so don't resume the device */
+	down_write(&ksm->lock);
+	for (slot = 0; slot < ksm->num_slots; slot++) {
+		const struct blk_crypto_key *key = ksm->slots[slot].key;
+		int err;
+
+		if (!key)
+			continue;
+
+		err = ksm->ksm_ll_ops.keyslot_program(ksm, key, slot);
+		WARN_ON(err);
+	}
+	up_write(&ksm->lock);
+}
+EXPORT_SYMBOL_GPL(blk_ksm_reprogram_all_keys);
+
+void blk_ksm_destroy(struct blk_keyslot_manager *ksm)
+{
+	if (!ksm)
+		return;
+	kvfree(ksm->slot_hashtable);
+	memzero_explicit(ksm->slots, sizeof(ksm->slots[0]) * ksm->num_slots);
+	kvfree(ksm->slots);
+	memzero_explicit(ksm, sizeof(*ksm));
+}
+EXPORT_SYMBOL_GPL(blk_ksm_destroy);
+
+bool blk_ksm_register(struct blk_keyslot_manager *ksm, struct request_queue *q)
+{
+	if (blk_integrity_queue_supports_integrity(q)) {
+		pr_warn("Integrity and hardware inline encryption are not supported together. Disabling hardware inline encryption.\n");
+		return false;
+	}
+	q->ksm = ksm;
+	return true;
+}
+EXPORT_SYMBOL_GPL(blk_ksm_register);
+
+void blk_ksm_unregister(struct request_queue *q)
+{
+	q->ksm = NULL;
+}
+
+/**
+ * blk_ksm_derive_raw_secret() - Derive software secret from wrapped key
+ * @ksm: The keyslot manager
+ * @wrapped_key: The wrapped key
+ * @wrapped_key_size: Size of the wrapped key in bytes
+ * @secret: (output) the software secret
+ * @secret_size: (output) the number of secret bytes to derive
+ *
+ * Given a hardware-wrapped key, ask the hardware to derive a secret which
+ * software can use for cryptographic tasks other than inline encryption.  The
+ * derived secret is guaranteed to be cryptographically isolated from the key
+ * with which any inline encryption with this wrapped key would actually be
+ * done.  I.e., both will be derived from the unwrapped key.
+ *
+ * Return: 0 on success, -EOPNOTSUPP if hardware-wrapped keys are unsupported,
+ *	   or another -errno code.
+ */
+int blk_ksm_derive_raw_secret(struct blk_keyslot_manager *ksm,
+			      const u8 *wrapped_key,
+			      unsigned int wrapped_key_size,
+			      u8 *secret, unsigned int secret_size)
+{
+	int err;
+
+	if (ksm->ksm_ll_ops.derive_raw_secret) {
+		blk_ksm_hw_enter(ksm);
+		err = ksm->ksm_ll_ops.derive_raw_secret(ksm, wrapped_key,
+							wrapped_key_size,
+							secret, secret_size);
+		blk_ksm_hw_exit(ksm);
+	} else {
+		err = -EOPNOTSUPP;
+	}
+
+	return err;
+}
+EXPORT_SYMBOL_GPL(blk_ksm_derive_raw_secret);
+
+/**
+ * blk_ksm_intersect_modes() - restrict supported modes by child device
+ * @parent: The keyslot manager for parent device
+ * @child: The keyslot manager for child device, or NULL
+ *
+ * Clear any crypto mode support bits in @parent that aren't set in @child.
+ * If @child is NULL, then all parent bits are cleared.
+ *
+ * Only use this when setting up the keyslot manager for a layered device,
+ * before it's been exposed yet.
+ */
+void blk_ksm_intersect_modes(struct blk_keyslot_manager *parent,
+			     const struct blk_keyslot_manager *child)
+{
+	if (child) {
+		unsigned int i;
+
+		parent->max_dun_bytes_supported =
+			min(parent->max_dun_bytes_supported,
+			    child->max_dun_bytes_supported);
+		for (i = 0; i < ARRAY_SIZE(child->crypto_modes_supported);
+		     i++) {
+			parent->crypto_modes_supported[i] &=
+				child->crypto_modes_supported[i];
+		}
+		parent->features &= child->features;
+	} else {
+		parent->max_dun_bytes_supported = 0;
+		memset(parent->crypto_modes_supported, 0,
+		       sizeof(parent->crypto_modes_supported));
+		parent->features = 0;
+	}
+}
+EXPORT_SYMBOL_GPL(blk_ksm_intersect_modes);
+
+/**
+ * blk_ksm_is_superset() - Check if a KSM supports a superset of crypto modes
+ *			   and DUN bytes that another KSM supports. Here,
+ *			   "superset" refers to the mathematical meaning of the
+ *			   word - i.e. if two KSMs have the *same* capabilities,
+ *			   they *are* considered supersets of each other.
+ * @ksm_superset: The KSM that we want to verify is a superset
+ * @ksm_subset: The KSM that we want to verify is a subset
+ *
+ * Return: True if @ksm_superset supports a superset of the crypto modes and DUN
+ *	   bytes that @ksm_subset supports.
+ */
+bool blk_ksm_is_superset(struct blk_keyslot_manager *ksm_superset,
+			 struct blk_keyslot_manager *ksm_subset)
+{
+	int i;
+
+	if (!ksm_subset)
+		return true;
+
+	if (!ksm_superset)
+		return false;
+
+	for (i = 0; i < ARRAY_SIZE(ksm_superset->crypto_modes_supported); i++) {
+		if (ksm_subset->crypto_modes_supported[i] &
+		    (~ksm_superset->crypto_modes_supported[i])) {
+			return false;
+		}
+	}
+
+	if (ksm_subset->max_dun_bytes_supported >
+	    ksm_superset->max_dun_bytes_supported) {
+		return false;
+	}
+
+	if (ksm_subset->features & ~ksm_superset->features)
+		return false;
+
+	return true;
+}
+EXPORT_SYMBOL_GPL(blk_ksm_is_superset);
+
+/**
+ * blk_ksm_update_capabilities() - Update the restrictions of a KSM to those of
+ *				   another KSM
+ * @target_ksm: The KSM whose restrictions to update.
+ * @reference_ksm: The KSM to whose restrictions this function will update
+ *		   @target_ksm's restrictions to.
+ *
+ * Blk-crypto requires that crypto capabilities that were
+ * advertised when a bio was created continue to be supported by the
+ * device until that bio is ended. This is turn means that a device cannot
+ * shrink its advertised crypto capabilities without any explicit
+ * synchronization with upper layers. So if there's no such explicit
+ * synchronization, @reference_ksm must support all the crypto capabilities that
+ * @target_ksm does
+ * (i.e. we need blk_ksm_is_superset(@reference_ksm, @target_ksm) == true).
+ *
+ * Note also that as long as the crypto capabilities are being expanded, the
+ * order of updates becoming visible is not important because it's alright
+ * for blk-crypto to see stale values - they only cause blk-crypto to
+ * believe that a crypto capability isn't supported when it actually is (which
+ * might result in blk-crypto-fallback being used if available, or the bio being
+ * failed).
+ */
+void blk_ksm_update_capabilities(struct blk_keyslot_manager *target_ksm,
+				 struct blk_keyslot_manager *reference_ksm)
+{
+	memcpy(target_ksm->crypto_modes_supported,
+	       reference_ksm->crypto_modes_supported,
+	       sizeof(target_ksm->crypto_modes_supported));
+
+	target_ksm->max_dun_bytes_supported =
+				reference_ksm->max_dun_bytes_supported;
+
+	target_ksm->features = reference_ksm->features;
+}
+EXPORT_SYMBOL_GPL(blk_ksm_update_capabilities);
+
+/**
+ * blk_ksm_init_passthrough() - Init a passthrough keyslot manager
+ * @ksm: The keyslot manager to init
+ *
+ * Initialize a passthrough keyslot manager.
+ * Called by e.g. storage drivers to set up a keyslot manager in their
+ * request_queue, when the storage driver wants to manage its keys by itself.
+ * This is useful for inline encryption hardware that doesn't have the concept
+ * of keyslots, and for layered devices.
+ */
+void blk_ksm_init_passthrough(struct blk_keyslot_manager *ksm)
+{
+	memset(ksm, 0, sizeof(*ksm));
+	init_rwsem(&ksm->lock);
+}
+EXPORT_SYMBOL_GPL(blk_ksm_init_passthrough);
diff --git a/block/partition-generic.c b/block/partition-generic.c
index aee643c..31bff3f 100644
--- a/block/partition-generic.c
+++ b/block/partition-generic.c
@@ -459,56 +459,6 @@ static int drop_partitions(struct gendisk *disk, struct block_device *bdev)
 	return 0;
 }
 
-static bool part_zone_aligned(struct gendisk *disk,
-			      struct block_device *bdev,
-			      sector_t from, sector_t size)
-{
-	unsigned int zone_sectors = bdev_zone_sectors(bdev);
-
-	/*
-	 * If this function is called, then the disk is a zoned block device
-	 * (host-aware or host-managed). This can be detected even if the
-	 * zoned block device support is disabled (CONFIG_BLK_DEV_ZONED not
-	 * set). In this case, however, only host-aware devices will be seen
-	 * as a block device is not created for host-managed devices. Without
-	 * zoned block device support, host-aware drives can still be used as
-	 * regular block devices (no zone operation) and their zone size will
-	 * be reported as 0. Allow this case.
-	 */
-	if (!zone_sectors)
-		return true;
-
-	/*
-	 * Check partition start and size alignement. If the drive has a
-	 * smaller last runt zone, ignore it and allow the partition to
-	 * use it. Check the zone size too: it should be a power of 2 number
-	 * of sectors.
-	 */
-	if (WARN_ON_ONCE(!is_power_of_2(zone_sectors))) {
-		u32 rem;
-
-		div_u64_rem(from, zone_sectors, &rem);
-		if (rem)
-			return false;
-		if ((from + size) < get_capacity(disk)) {
-			div_u64_rem(size, zone_sectors, &rem);
-			if (rem)
-				return false;
-		}
-
-	} else {
-
-		if (from & (zone_sectors - 1))
-			return false;
-		if ((from + size) < get_capacity(disk) &&
-		    (size & (zone_sectors - 1)))
-			return false;
-
-	}
-
-	return true;
-}
-
 int rescan_partitions(struct gendisk *disk, struct block_device *bdev)
 {
 	struct parsed_partitions *state = NULL;
@@ -544,6 +494,14 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev)
 		}
 		return -EIO;
 	}
+
+	/* Partitions are not supported on zoned block devices */
+	if (bdev_is_zoned(bdev)) {
+		pr_warn("%s: ignoring partition table on zoned block device\n",
+			disk->disk_name);
+		goto out;
+	}
+
 	/*
 	 * If any partition code tried to read beyond EOD, try
 	 * unlocking native capacity even if partition table is
@@ -607,21 +565,6 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev)
 			}
 		}
 
-		/*
-		 * On a zoned block device, partitions should be aligned on the
-		 * device zone size (i.e. zone boundary crossing not allowed).
-		 * Otherwise, resetting the write pointer of the last zone of
-		 * one partition may impact the following partition.
-		 */
-		if (bdev_is_zoned(bdev) &&
-		    !part_zone_aligned(disk, bdev, from, size)) {
-			printk(KERN_WARNING
-			       "%s: p%d start %llu+%llu is not zone aligned\n",
-			       disk->disk_name, p, (unsigned long long) from,
-			       (unsigned long long) size);
-			continue;
-		}
-
 		part = add_partition(disk, p, from, size,
 				     state->parts[p].flags,
 				     &state->parts[p].info);
@@ -635,6 +578,7 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev)
 			md_autodetect_dev(part_to_dev(part)->devt);
 #endif
 	}
+out:
 	free_partitions(state);
 	return 0;
 }
diff --git a/build.config.aarch64 b/build.config.aarch64
new file mode 100644
index 0000000..6d6e699
--- /dev/null
+++ b/build.config.aarch64
@@ -0,0 +1,18 @@
+ARCH=arm64
+
+LLVM_IAS=1
+CROSS_COMPILE=aarch64-linux-gnu-
+CROSS_COMPILE_COMPAT=arm-linux-gnueabi-
+LINUX_GCC_CROSS_COMPILE_PREBUILTS_BIN=prebuilts/gas/linux-x86
+LINUX_GCC_CROSS_COMPILE_COMPAT_PREBUILTS_BIN=prebuilts/gas/linux-x86
+
+MAKE_GOALS="
+Image
+modules
+"
+
+FILES="
+arch/arm64/boot/Image
+vmlinux
+System.map
+"
diff --git a/build.config.allmodconfig b/build.config.allmodconfig
new file mode 100644
index 0000000..103d1cd
--- /dev/null
+++ b/build.config.allmodconfig
@@ -0,0 +1,14 @@
+DEFCONFIG=allmodconfig
+
+POST_DEFCONFIG_CMDS="update_config"
+function update_config() {
+    ${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \
+         -d TEST_KMOD  \
+         -d CPU_BIG_ENDIAN \
+         -d STM \
+         -d TEST_MEMCAT_P \
+         -e UNWINDER_FRAME_POINTER \
+
+    (cd ${OUT_DIR} && \
+     make O=${OUT_DIR} $archsubarch CROSS_COMPILE=${CROSS_COMPILE} "${TOOL_ARGS[@]}" ${MAKE_ARGS} olddefconfig)
+}
diff --git a/build.config.allmodconfig.aarch64 b/build.config.allmodconfig.aarch64
new file mode 100644
index 0000000..2fbe380
--- /dev/null
+++ b/build.config.allmodconfig.aarch64
@@ -0,0 +1,4 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.aarch64
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.allmodconfig
+
diff --git a/build.config.allmodconfig.arm b/build.config.allmodconfig.arm
new file mode 100644
index 0000000..e92744a
--- /dev/null
+++ b/build.config.allmodconfig.arm
@@ -0,0 +1,4 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.arm
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.allmodconfig
+
diff --git a/build.config.allmodconfig.x86_64 b/build.config.allmodconfig.x86_64
new file mode 100644
index 0000000..f06b30c
--- /dev/null
+++ b/build.config.allmodconfig.x86_64
@@ -0,0 +1,4 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.x86_64
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.allmodconfig
+
diff --git a/build.config.arm b/build.config.arm
new file mode 100644
index 0000000..55610ba
--- /dev/null
+++ b/build.config.arm
@@ -0,0 +1,15 @@
+ARCH=arm
+
+CROSS_COMPILE=arm-linux-gnueabi-
+LINUX_GCC_CROSS_COMPILE_PREBUILTS_BIN=prebuilts/gas/linux-x86
+
+MAKE_GOALS="
+Image
+modules
+"
+
+FILES="
+arch/arm/boot/Image
+vmlinux
+System.map
+"
diff --git a/build.config.common b/build.config.common
new file mode 100644
index 0000000..527ff4c
--- /dev/null
+++ b/build.config.common
@@ -0,0 +1,12 @@
+BRANCH=android12-5.4
+KMI_GENERATION=0
+
+LLVM=1
+DEPMOD=depmod
+CLANG_PREBUILT_BIN=prebuilts-master/clang/host/linux-x86/clang-r412851/bin
+BUILDTOOLS_PREBUILT_BIN=build/build-tools/path/linux-x86
+
+EXTRA_CMDS=''
+STOP_SHIP_TRACEPRINTK=1
+IN_KERNEL_MODULES=1
+DO_NOT_STRIP_MODULES=1
diff --git a/build.config.db845c b/build.config.db845c
new file mode 100644
index 0000000..0cf9881
--- /dev/null
+++ b/build.config.db845c
@@ -0,0 +1,21 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.aarch64
+
+BUILD_INITRAMFS=1
+DEFCONFIG=db845c_gki_defconfig
+FRAGMENT_CONFIG=${KERNEL_DIR}/arch/arm64/configs/db845c_gki.fragment
+PRE_DEFCONFIG_CMDS="KCONFIG_CONFIG=${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/gki_defconfig ${ROOT_DIR}/${FRAGMENT_CONFIG}"
+POST_DEFCONFIG_CMDS="rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG}"
+
+MAKE_GOALS="${MAKE_GOALS}
+qcom/sdm845-db845c.dtb
+Image.gz
+"
+
+FILES="${FILES}
+arch/arm64/boot/Image.gz
+arch/arm64/boot/dts/qcom/sdm845-db845c.dtb
+vmlinux
+"
+KMI_SYMBOL_LIST=android/abi_gki_aarch64_db845c
+GKI_MODULES_LIST=android/gki_aarch64_modules
diff --git a/build.config.gki b/build.config.gki
new file mode 100644
index 0000000..44d4ed1
--- /dev/null
+++ b/build.config.gki
@@ -0,0 +1,3 @@
+DEFCONFIG=gki_defconfig
+POST_DEFCONFIG_CMDS="check_defconfig"
+
diff --git a/build.config.gki-debug.aarch64 b/build.config.gki-debug.aarch64
new file mode 100644
index 0000000..c1fe2f0
--- /dev/null
+++ b/build.config.gki-debug.aarch64
@@ -0,0 +1,3 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.gki.aarch64
+TRIM_NONLISTED_KMI=""
+KMI_SYMBOL_LIST_STRICT_MODE=""
diff --git a/build.config.gki-debug.x86_64 b/build.config.gki-debug.x86_64
new file mode 100644
index 0000000..d89b7ad
--- /dev/null
+++ b/build.config.gki-debug.x86_64
@@ -0,0 +1,3 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.gki.x86_64
+TRIM_NONLISTED_KMI=""
+KMI_SYMBOL_LIST_STRICT_MODE=""
diff --git a/build.config.gki.aarch64 b/build.config.gki.aarch64
new file mode 100644
index 0000000..965a9d0
--- /dev/null
+++ b/build.config.gki.aarch64
@@ -0,0 +1,18 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.aarch64
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.gki
+
+ABI_DEFINITION=android/abi_gki_aarch64.xml
+KMI_SYMBOL_LIST=android/abi_gki_aarch64
+ADDITIONAL_KMI_SYMBOL_LISTS="
+android/abi_gki_aarch64_db845c
+android/abi_gki_aarch64_hikey960
+android/abi_gki_aarch64_qcom
+android/abi_gki_aarch64_unisoc
+android/abi_gki_aarch64_exynos
+android/abi_gki_aarch64_sunxi
+android/abi_gki_aarch64_virtual_device
+"
+TRIM_NONLISTED_KMI=1
+KMI_SYMBOL_LIST_STRICT_MODE=1
+MODULES_ORDER=android/gki_aarch64_modules
diff --git a/build.config.gki.x86_64 b/build.config.gki.x86_64
new file mode 100644
index 0000000..0e04fc6
--- /dev/null
+++ b/build.config.gki.x86_64
@@ -0,0 +1,4 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.x86_64
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.gki
+
diff --git a/build.config.gki_kasan b/build.config.gki_kasan
new file mode 100644
index 0000000..ace2f87
--- /dev/null
+++ b/build.config.gki_kasan
@@ -0,0 +1,22 @@
+DEFCONFIG=gki_defconfig
+POST_DEFCONFIG_CMDS="check_defconfig && update_kasan_config"
+KERNEL_DIR=common
+function update_kasan_config() {
+    ${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \
+         -e CONFIG_KASAN \
+         -e CONFIG_KASAN_INLINE \
+         -e CONFIG_KCOV \
+         -e CONFIG_PANIC_ON_WARN_DEFAULT_ENABLE \
+         -d CONFIG_RANDOMIZE_BASE \
+         -d CONFIG_KASAN_OUTLINE \
+         --set-val CONFIG_FRAME_WARN 0 \
+         -d LTO \
+         -d LTO_CLANG \
+         -d CFI \
+         -d CFI_PERMISSIVE \
+         -d CFI_CLANG \
+         -d SHADOW_CALL_STACK
+    (cd ${OUT_DIR} && \
+     make ${CC_LD_ARG} O=${OUT_DIR} olddefconfig)
+}
+
diff --git a/build.config.gki_kasan.aarch64 b/build.config.gki_kasan.aarch64
new file mode 100644
index 0000000..9fd2560
--- /dev/null
+++ b/build.config.gki_kasan.aarch64
@@ -0,0 +1,3 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.aarch64
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.gki_kasan
diff --git a/build.config.gki_kasan.x86_64 b/build.config.gki_kasan.x86_64
new file mode 100644
index 0000000..eec6458
--- /dev/null
+++ b/build.config.gki_kasan.x86_64
@@ -0,0 +1,4 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.x86_64
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.gki_kasan
+
diff --git a/build.config.hikey960 b/build.config.hikey960
new file mode 100644
index 0000000..29823f1
--- /dev/null
+++ b/build.config.hikey960
@@ -0,0 +1,24 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.aarch64
+
+DEFCONFIG=hikey960_gki_defconfig
+PRE_DEFCONFIG_CMDS="cat ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/gki_defconfig ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/hikey960_gki.fragment > ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG};"
+POST_DEFCONFIG_CMDS="rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG}"
+
+EXT_MODULES="
+hikey-modules/midgard
+"
+
+MAKE_GOALS="${MAKE_GOALS}
+hisilicon/hi3660-hikey960.dtb
+Image.gz
+"
+
+FILES="${FILES}
+arch/arm64/boot/Image.gz
+arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dtb
+vmlinux
+System.map
+"
+KMI_SYMBOL_LIST=android/abi_gki_aarch64_hikey960
+GKI_MODULES_LIST=android/gki_aarch64_modules
diff --git a/build.config.x86_64 b/build.config.x86_64
new file mode 100644
index 0000000..b311320
--- /dev/null
+++ b/build.config.x86_64
@@ -0,0 +1,17 @@
+ARCH=x86_64
+
+LLVM_IAS=1
+CROSS_COMPILE=x86_64-linux-gnu-
+LINUX_GCC_CROSS_COMPILE_PREBUILTS_BIN=prebuilts/gas/linux-x86
+
+MAKE_GOALS="
+bzImage
+modules
+prepare-objtool
+"
+
+FILES="
+arch/x86/boot/bzImage
+vmlinux
+System.map
+"
diff --git a/crypto/Kconfig b/crypto/Kconfig
index b2cc0ad..2b0a89e 100644
--- a/crypto/Kconfig
+++ b/crypto/Kconfig
@@ -136,8 +136,6 @@
 	  Userspace configuration for cryptographic instantiations such as
 	  cbc(aes).
 
-if CRYPTO_MANAGER2
-
 config CRYPTO_MANAGER_DISABLE_TESTS
 	bool "Disable run-time self tests"
 	default y
@@ -155,8 +153,6 @@
 	  This is intended for developer use only, as these tests take much
 	  longer to run than the normal self tests.
 
-endif	# if CRYPTO_MANAGER2
-
 config CRYPTO_GF128MUL
 	tristate
 
@@ -264,6 +260,17 @@
 	  standard algorithms (called GOST algorithms). Only signature verification
 	  is implemented.
 
+config CRYPTO_CURVE25519
+	tristate "Curve25519 algorithm"
+	select CRYPTO_KPP
+	select CRYPTO_LIB_CURVE25519_GENERIC
+
+config CRYPTO_CURVE25519_X86
+	tristate "x86_64 accelerated Curve25519 scalar multiplication library"
+	depends on X86 && 64BIT
+	select CRYPTO_LIB_CURVE25519_GENERIC
+	select CRYPTO_ARCH_HAVE_LIB_CURVE25519
+
 comment "Authenticated Encryption with Associated Data"
 
 config CRYPTO_CCM
@@ -446,7 +453,7 @@
 config CRYPTO_NHPOLY1305
 	tristate
 	select CRYPTO_HASH
-	select CRYPTO_POLY1305
+	select CRYPTO_LIB_POLY1305_GENERIC
 
 config CRYPTO_NHPOLY1305_SSE2
 	tristate "NHPoly1305 hash function (x86_64 SSE2 implementation)"
@@ -467,7 +474,7 @@
 config CRYPTO_ADIANTUM
 	tristate "Adiantum support"
 	select CRYPTO_CHACHA20
-	select CRYPTO_POLY1305
+	select CRYPTO_LIB_POLY1305_GENERIC
 	select CRYPTO_NHPOLY1305
 	select CRYPTO_MANAGER
 	help
@@ -639,6 +646,47 @@
 	  xxHash non-cryptographic hash algorithm. Extremely fast, working at
 	  speeds close to RAM limits.
 
+config CRYPTO_BLAKE2S
+	tristate "BLAKE2s digest algorithm"
+	select CRYPTO_LIB_BLAKE2S_GENERIC
+	select CRYPTO_HASH
+	help
+	  Implementation of cryptographic hash function BLAKE2s
+	  optimized for 8-32bit platforms and can produce digests of any size
+	  between 1 to 32.  The keyed hash is also implemented.
+
+	  This module provides the following algorithms:
+
+	  - blake2s-128
+	  - blake2s-160
+	  - blake2s-224
+	  - blake2s-256
+
+	  See https://blake2.net for further information.
+
+config CRYPTO_BLAKE2S_X86
+	tristate "BLAKE2s digest algorithm (x86 accelerated version)"
+	depends on X86 && 64BIT
+	select CRYPTO_LIB_BLAKE2S_GENERIC
+	select CRYPTO_ARCH_HAVE_LIB_BLAKE2S
+
+config CRYPTO_BLAKE2B
+	tristate "BLAKE2b digest algorithm"
+	select CRYPTO_HASH
+	help
+	  Implementation of cryptographic hash function BLAKE2b (or just BLAKE2),
+	  optimized for 64bit platforms and can produce digests of any size
+	  between 1 to 64.  The keyed hash is also implemented.
+
+	  This module provides the following algorithms:
+
+	  - blake2b-160
+	  - blake2b-256
+	  - blake2b-384
+	  - blake2b-512
+
+	  See https://blake2.net for further information.
+
 config CRYPTO_CRCT10DIF
 	tristate "CRCT10DIF algorithm"
 	select CRYPTO_HASH
@@ -686,6 +734,7 @@
 config CRYPTO_POLY1305
 	tristate "Poly1305 authenticator algorithm"
 	select CRYPTO_HASH
+	select CRYPTO_LIB_POLY1305_GENERIC
 	help
 	  Poly1305 authenticator algorithm, RFC7539.
 
@@ -696,7 +745,8 @@
 config CRYPTO_POLY1305_X86_64
 	tristate "Poly1305 authenticator algorithm (x86_64/SSE2/AVX2)"
 	depends on X86 && 64BIT
-	select CRYPTO_POLY1305
+	select CRYPTO_LIB_POLY1305_GENERIC
+	select CRYPTO_ARCH_HAVE_LIB_POLY1305
 	help
 	  Poly1305 authenticator algorithm, RFC7539.
 
@@ -705,6 +755,11 @@
 	  in IETF protocols. This is the x86_64 assembler implementation using SIMD
 	  instructions.
 
+config CRYPTO_POLY1305_MIPS
+	tristate "Poly1305 authenticator algorithm (MIPS optimized)"
+	depends on CPU_MIPS32 || (CPU_MIPS64 && 64BIT)
+	select CRYPTO_ARCH_HAVE_LIB_POLY1305
+
 config CRYPTO_MD4
 	tristate "MD4 digest algorithm"
 	select CRYPTO_HASH
@@ -878,9 +933,6 @@
 	  SHA-1 secure hash standard (DFIPS 180-4) implemented
 	  using powerpc SPE SIMD instruction set.
 
-config CRYPTO_LIB_SHA256
-	tristate
-
 config CRYPTO_SHA256
 	tristate "SHA224 and SHA256 digest algorithm"
 	select CRYPTO_HASH
@@ -1019,9 +1071,6 @@
 
 comment "Ciphers"
 
-config CRYPTO_LIB_AES
-	tristate
-
 config CRYPTO_AES
 	tristate "AES cipher algorithms"
 	select CRYPTO_ALGAPI
@@ -1150,9 +1199,6 @@
 	  <https://www.cosic.esat.kuleuven.be/nessie/reports/>
 	  <http://www.larc.usp.br/~pbarreto/AnubisPage.html>
 
-config CRYPTO_LIB_ARC4
-	tristate
-
 config CRYPTO_ARC4
 	tristate "ARC4 cipher algorithm"
 	select CRYPTO_BLKCIPHER
@@ -1339,9 +1385,6 @@
 	  This module provides the Cast6 cipher algorithm that processes
 	  eight blocks parallel using the AVX instruction set.
 
-config CRYPTO_LIB_DES
-	tristate
-
 config CRYPTO_DES
 	tristate "DES and Triple DES EDE cipher algorithms"
 	select CRYPTO_ALGAPI
@@ -1405,6 +1448,7 @@
 
 config CRYPTO_CHACHA20
 	tristate "ChaCha stream cipher algorithms"
+	select CRYPTO_LIB_CHACHA_GENERIC
 	select CRYPTO_BLKCIPHER
 	help
 	  The ChaCha20, XChaCha20, and XChaCha12 stream cipher algorithms.
@@ -1428,11 +1472,18 @@
 	tristate "ChaCha stream cipher algorithms (x86_64/SSSE3/AVX2/AVX-512VL)"
 	depends on X86 && 64BIT
 	select CRYPTO_BLKCIPHER
-	select CRYPTO_CHACHA20
+	select CRYPTO_LIB_CHACHA_GENERIC
+	select CRYPTO_ARCH_HAVE_LIB_CHACHA
 	help
 	  SSSE3, AVX2, and AVX-512VL optimized implementations of the ChaCha20,
 	  XChaCha20, and XChaCha12 stream ciphers.
 
+config CRYPTO_CHACHA_MIPS
+	tristate "ChaCha stream cipher algorithms (MIPS 32r2 optimized)"
+	depends on CPU_MIPS32_R2
+	select CRYPTO_BLKCIPHER
+	select CRYPTO_ARCH_HAVE_LIB_CHACHA
+
 config CRYPTO_SEED
 	tristate "SEED cipher algorithm"
 	select CRYPTO_ALGAPI
@@ -1845,6 +1896,7 @@
 config CRYPTO_HASH_INFO
 	bool
 
+source "lib/crypto/Kconfig"
 source "drivers/crypto/Kconfig"
 source "crypto/asymmetric_keys/Kconfig"
 source "certs/Kconfig"
diff --git a/crypto/Makefile b/crypto/Makefile
index aa740c8..1eb4a210 100644
--- a/crypto/Makefile
+++ b/crypto/Makefile
@@ -74,6 +74,8 @@
 obj-$(CONFIG_CRYPTO_WP512) += wp512.o
 CFLAGS_wp512.o := $(call cc-option,-fno-schedule-insns)  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79149
 obj-$(CONFIG_CRYPTO_TGR192) += tgr192.o
+obj-$(CONFIG_CRYPTO_BLAKE2S) += blake2s_generic.o
+obj-$(CONFIG_CRYPTO_BLAKE2B) += blake2b_generic.o
 obj-$(CONFIG_CRYPTO_GF128MUL) += gf128mul.o
 obj-$(CONFIG_CRYPTO_ECB) += ecb.o
 obj-$(CONFIG_CRYPTO_CBC) += cbc.o
@@ -166,6 +168,7 @@
 obj-$(CONFIG_CRYPTO_OFB) += ofb.o
 obj-$(CONFIG_CRYPTO_ECC) += ecc.o
 obj-$(CONFIG_CRYPTO_ESSIV) += essiv.o
+obj-$(CONFIG_CRYPTO_CURVE25519) += curve25519-generic.o
 
 ecdh_generic-y += ecdh.o
 ecdh_generic-y += ecdh_helper.o
diff --git a/crypto/adiantum.c b/crypto/adiantum.c
index 395a3dd..c846a88 100644
--- a/crypto/adiantum.c
+++ b/crypto/adiantum.c
@@ -33,6 +33,7 @@
 #include <crypto/b128ops.h>
 #include <crypto/chacha.h>
 #include <crypto/internal/hash.h>
+#include <crypto/internal/poly1305.h>
 #include <crypto/internal/skcipher.h>
 #include <crypto/nhpoly1305.h>
 #include <crypto/scatterwalk.h>
@@ -71,7 +72,7 @@ struct adiantum_tfm_ctx {
 	struct crypto_skcipher *streamcipher;
 	struct crypto_cipher *blockcipher;
 	struct crypto_shash *hash;
-	struct poly1305_key header_hash_key;
+	struct poly1305_core_key header_hash_key;
 };
 
 struct adiantum_request_ctx {
@@ -242,13 +243,13 @@ static void adiantum_hash_header(struct skcipher_request *req)
 
 	BUILD_BUG_ON(sizeof(header) % POLY1305_BLOCK_SIZE != 0);
 	poly1305_core_blocks(&state, &tctx->header_hash_key,
-			     &header, sizeof(header) / POLY1305_BLOCK_SIZE);
+			     &header, sizeof(header) / POLY1305_BLOCK_SIZE, 1);
 
 	BUILD_BUG_ON(TWEAK_SIZE % POLY1305_BLOCK_SIZE != 0);
 	poly1305_core_blocks(&state, &tctx->header_hash_key, req->iv,
-			     TWEAK_SIZE / POLY1305_BLOCK_SIZE);
+			     TWEAK_SIZE / POLY1305_BLOCK_SIZE, 1);
 
-	poly1305_core_emit(&state, &rctx->header_hash);
+	poly1305_core_emit(&state, NULL, &rctx->header_hash);
 }
 
 /* Hash the left-hand part (the "bulk") of the message using NHPoly1305 */
diff --git a/crypto/blake2b_generic.c b/crypto/blake2b_generic.c
new file mode 100644
index 0000000..6704c03
--- /dev/null
+++ b/crypto/blake2b_generic.c
@@ -0,0 +1,187 @@
+// SPDX-License-Identifier: (GPL-2.0-only OR Apache-2.0)
+/*
+ * Generic implementation of the BLAKE2b digest algorithm.  Based on the BLAKE2b
+ * reference implementation, but it has been heavily modified for use in the
+ * kernel.  The reference implementation was:
+ *
+ *	Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under
+ *	the terms of the CC0, the OpenSSL Licence, or the Apache Public License
+ *	2.0, at your option.  The terms of these licenses can be found at:
+ *
+ *	- CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
+ *	- OpenSSL license   : https://www.openssl.org/source/license.html
+ *	- Apache 2.0        : https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * More information about BLAKE2 can be found at https://blake2.net.
+ */
+
+#include <asm/unaligned.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/bitops.h>
+#include <crypto/internal/blake2b.h>
+#include <crypto/internal/hash.h>
+
+static const u8 blake2b_sigma[12][16] = {
+	{  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 },
+	{ 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3 },
+	{ 11,  8, 12,  0,  5,  2, 15, 13, 10, 14,  3,  6,  7,  1,  9,  4 },
+	{  7,  9,  3,  1, 13, 12, 11, 14,  2,  6,  5, 10,  4,  0, 15,  8 },
+	{  9,  0,  5,  7,  2,  4, 10, 15, 14,  1, 11, 12,  6,  8,  3, 13 },
+	{  2, 12,  6, 10,  0, 11,  8,  3,  4, 13,  7,  5, 15, 14,  1,  9 },
+	{ 12,  5,  1, 15, 14, 13,  4, 10,  0,  7,  6,  3,  9,  2,  8, 11 },
+	{ 13, 11,  7, 14, 12,  1,  3,  9,  5,  0, 15,  4,  8,  6,  2, 10 },
+	{  6, 15, 14,  9, 11,  3,  0,  8, 12,  2, 13,  7,  1,  4, 10,  5 },
+	{ 10,  2,  8,  4,  7,  6,  1,  5, 15, 11,  9, 14,  3, 12, 13,  0 },
+	{  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 },
+	{ 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3 }
+};
+
+static void blake2b_increment_counter(struct blake2b_state *S, const u64 inc)
+{
+	S->t[0] += inc;
+	S->t[1] += (S->t[0] < inc);
+}
+
+#define G(r,i,a,b,c,d)                                  \
+	do {                                            \
+		a = a + b + m[blake2b_sigma[r][2*i+0]]; \
+		d = ror64(d ^ a, 32);                   \
+		c = c + d;                              \
+		b = ror64(b ^ c, 24);                   \
+		a = a + b + m[blake2b_sigma[r][2*i+1]]; \
+		d = ror64(d ^ a, 16);                   \
+		c = c + d;                              \
+		b = ror64(b ^ c, 63);                   \
+	} while (0)
+
+#define ROUND(r)                                \
+	do {                                    \
+		G(r,0,v[ 0],v[ 4],v[ 8],v[12]); \
+		G(r,1,v[ 1],v[ 5],v[ 9],v[13]); \
+		G(r,2,v[ 2],v[ 6],v[10],v[14]); \
+		G(r,3,v[ 3],v[ 7],v[11],v[15]); \
+		G(r,4,v[ 0],v[ 5],v[10],v[15]); \
+		G(r,5,v[ 1],v[ 6],v[11],v[12]); \
+		G(r,6,v[ 2],v[ 7],v[ 8],v[13]); \
+		G(r,7,v[ 3],v[ 4],v[ 9],v[14]); \
+	} while (0)
+
+static void blake2b_compress_one_generic(struct blake2b_state *S,
+					 const u8 block[BLAKE2B_BLOCK_SIZE])
+{
+	u64 m[16];
+	u64 v[16];
+	size_t i;
+
+	for (i = 0; i < 16; ++i)
+		m[i] = get_unaligned_le64(block + i * sizeof(m[i]));
+
+	for (i = 0; i < 8; ++i)
+		v[i] = S->h[i];
+
+	v[ 8] = BLAKE2B_IV0;
+	v[ 9] = BLAKE2B_IV1;
+	v[10] = BLAKE2B_IV2;
+	v[11] = BLAKE2B_IV3;
+	v[12] = BLAKE2B_IV4 ^ S->t[0];
+	v[13] = BLAKE2B_IV5 ^ S->t[1];
+	v[14] = BLAKE2B_IV6 ^ S->f[0];
+	v[15] = BLAKE2B_IV7 ^ S->f[1];
+
+	ROUND(0);
+	ROUND(1);
+	ROUND(2);
+	ROUND(3);
+	ROUND(4);
+	ROUND(5);
+	ROUND(6);
+	ROUND(7);
+	ROUND(8);
+	ROUND(9);
+	ROUND(10);
+	ROUND(11);
+#ifdef CONFIG_CC_IS_CLANG
+#pragma nounroll /* https://bugs.llvm.org/show_bug.cgi?id=45803 */
+#endif
+	for (i = 0; i < 8; ++i)
+		S->h[i] = S->h[i] ^ v[i] ^ v[i + 8];
+}
+
+#undef G
+#undef ROUND
+
+void blake2b_compress_generic(struct blake2b_state *state,
+			      const u8 *block, size_t nblocks, u32 inc)
+{
+	do {
+		blake2b_increment_counter(state, inc);
+		blake2b_compress_one_generic(state, block);
+		block += BLAKE2B_BLOCK_SIZE;
+	} while (--nblocks);
+}
+EXPORT_SYMBOL(blake2b_compress_generic);
+
+static int crypto_blake2b_update_generic(struct shash_desc *desc,
+					 const u8 *in, unsigned int inlen)
+{
+	return crypto_blake2b_update(desc, in, inlen, blake2b_compress_generic);
+}
+
+static int crypto_blake2b_final_generic(struct shash_desc *desc, u8 *out)
+{
+	return crypto_blake2b_final(desc, out, blake2b_compress_generic);
+}
+
+#define BLAKE2B_ALG(name, driver_name, digest_size)			\
+	{								\
+		.base.cra_name		= name,				\
+		.base.cra_driver_name	= driver_name,			\
+		.base.cra_priority	= 100,				\
+		.base.cra_flags		= CRYPTO_ALG_OPTIONAL_KEY,	\
+		.base.cra_blocksize	= BLAKE2B_BLOCK_SIZE,		\
+		.base.cra_ctxsize	= sizeof(struct blake2b_tfm_ctx), \
+		.base.cra_module	= THIS_MODULE,			\
+		.digestsize		= digest_size,			\
+		.setkey			= crypto_blake2b_setkey,	\
+		.init			= crypto_blake2b_init,		\
+		.update			= crypto_blake2b_update_generic, \
+		.final			= crypto_blake2b_final_generic,	\
+		.descsize		= sizeof(struct blake2b_state),	\
+	}
+
+static struct shash_alg blake2b_algs[] = {
+	BLAKE2B_ALG("blake2b-160", "blake2b-160-generic",
+		    BLAKE2B_160_HASH_SIZE),
+	BLAKE2B_ALG("blake2b-256", "blake2b-256-generic",
+		    BLAKE2B_256_HASH_SIZE),
+	BLAKE2B_ALG("blake2b-384", "blake2b-384-generic",
+		    BLAKE2B_384_HASH_SIZE),
+	BLAKE2B_ALG("blake2b-512", "blake2b-512-generic",
+		    BLAKE2B_512_HASH_SIZE),
+};
+
+static int __init blake2b_mod_init(void)
+{
+	return crypto_register_shashes(blake2b_algs, ARRAY_SIZE(blake2b_algs));
+}
+
+static void __exit blake2b_mod_fini(void)
+{
+	crypto_unregister_shashes(blake2b_algs, ARRAY_SIZE(blake2b_algs));
+}
+
+subsys_initcall(blake2b_mod_init);
+module_exit(blake2b_mod_fini);
+
+MODULE_AUTHOR("David Sterba <kdave@kernel.org>");
+MODULE_DESCRIPTION("BLAKE2b generic implementation");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS_CRYPTO("blake2b-160");
+MODULE_ALIAS_CRYPTO("blake2b-160-generic");
+MODULE_ALIAS_CRYPTO("blake2b-256");
+MODULE_ALIAS_CRYPTO("blake2b-256-generic");
+MODULE_ALIAS_CRYPTO("blake2b-384");
+MODULE_ALIAS_CRYPTO("blake2b-384-generic");
+MODULE_ALIAS_CRYPTO("blake2b-512");
+MODULE_ALIAS_CRYPTO("blake2b-512-generic");
diff --git a/crypto/blake2s_generic.c b/crypto/blake2s_generic.c
new file mode 100644
index 0000000..72fe480f
--- /dev/null
+++ b/crypto/blake2s_generic.c
@@ -0,0 +1,75 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * shash interface to the generic implementation of BLAKE2s
+ *
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include <crypto/internal/blake2s.h>
+#include <crypto/internal/hash.h>
+
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+
+static int crypto_blake2s_update_generic(struct shash_desc *desc,
+					 const u8 *in, unsigned int inlen)
+{
+	return crypto_blake2s_update(desc, in, inlen, blake2s_compress_generic);
+}
+
+static int crypto_blake2s_final_generic(struct shash_desc *desc, u8 *out)
+{
+	return crypto_blake2s_final(desc, out, blake2s_compress_generic);
+}
+
+#define BLAKE2S_ALG(name, driver_name, digest_size)			\
+	{								\
+		.base.cra_name		= name,				\
+		.base.cra_driver_name	= driver_name,			\
+		.base.cra_priority	= 100,				\
+		.base.cra_flags		= CRYPTO_ALG_OPTIONAL_KEY,	\
+		.base.cra_blocksize	= BLAKE2S_BLOCK_SIZE,		\
+		.base.cra_ctxsize	= sizeof(struct blake2s_tfm_ctx), \
+		.base.cra_module	= THIS_MODULE,			\
+		.digestsize		= digest_size,			\
+		.setkey			= crypto_blake2s_setkey,	\
+		.init			= crypto_blake2s_init,		\
+		.update			= crypto_blake2s_update_generic, \
+		.final			= crypto_blake2s_final_generic,	\
+		.descsize		= sizeof(struct blake2s_state),	\
+	}
+
+static struct shash_alg blake2s_algs[] = {
+	BLAKE2S_ALG("blake2s-128", "blake2s-128-generic",
+		    BLAKE2S_128_HASH_SIZE),
+	BLAKE2S_ALG("blake2s-160", "blake2s-160-generic",
+		    BLAKE2S_160_HASH_SIZE),
+	BLAKE2S_ALG("blake2s-224", "blake2s-224-generic",
+		    BLAKE2S_224_HASH_SIZE),
+	BLAKE2S_ALG("blake2s-256", "blake2s-256-generic",
+		    BLAKE2S_256_HASH_SIZE),
+};
+
+static int __init blake2s_mod_init(void)
+{
+	return crypto_register_shashes(blake2s_algs, ARRAY_SIZE(blake2s_algs));
+}
+
+static void __exit blake2s_mod_exit(void)
+{
+	crypto_unregister_shashes(blake2s_algs, ARRAY_SIZE(blake2s_algs));
+}
+
+subsys_initcall(blake2s_mod_init);
+module_exit(blake2s_mod_exit);
+
+MODULE_ALIAS_CRYPTO("blake2s-128");
+MODULE_ALIAS_CRYPTO("blake2s-128-generic");
+MODULE_ALIAS_CRYPTO("blake2s-160");
+MODULE_ALIAS_CRYPTO("blake2s-160-generic");
+MODULE_ALIAS_CRYPTO("blake2s-224");
+MODULE_ALIAS_CRYPTO("blake2s-224-generic");
+MODULE_ALIAS_CRYPTO("blake2s-256");
+MODULE_ALIAS_CRYPTO("blake2s-256-generic");
+MODULE_LICENSE("GPL v2");
diff --git a/crypto/cast6_generic.c b/crypto/cast6_generic.c
index a8248f8..8532852 100644
--- a/crypto/cast6_generic.c
+++ b/crypto/cast6_generic.c
@@ -154,7 +154,7 @@ int cast6_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int keylen)
 EXPORT_SYMBOL_GPL(cast6_setkey);
 
 /*forward quad round*/
-static inline void Q(u32 *block, u8 *Kr, u32 *Km)
+static inline void Q(u32 *block, const u8 *Kr, const u32 *Km)
 {
 	u32 I;
 	block[2] ^= F1(block[3], Kr[0], Km[0]);
@@ -164,7 +164,7 @@ static inline void Q(u32 *block, u8 *Kr, u32 *Km)
 }
 
 /*reverse quad round*/
-static inline void QBAR(u32 *block, u8 *Kr, u32 *Km)
+static inline void QBAR(u32 *block, const u8 *Kr, const u32 *Km)
 {
 	u32 I;
 	block[3] ^= F1(block[0], Kr[3], Km[3]);
@@ -173,13 +173,14 @@ static inline void QBAR(u32 *block, u8 *Kr, u32 *Km)
 	block[2] ^= F1(block[3], Kr[0], Km[0]);
 }
 
-void __cast6_encrypt(struct cast6_ctx *c, u8 *outbuf, const u8 *inbuf)
+void __cast6_encrypt(const void *ctx, u8 *outbuf, const u8 *inbuf)
 {
+	const struct cast6_ctx *c = ctx;
 	const __be32 *src = (const __be32 *)inbuf;
 	__be32 *dst = (__be32 *)outbuf;
 	u32 block[4];
-	u32 *Km;
-	u8 *Kr;
+	const u32 *Km;
+	const u8 *Kr;
 
 	block[0] = be32_to_cpu(src[0]);
 	block[1] = be32_to_cpu(src[1]);
@@ -211,13 +212,14 @@ static void cast6_encrypt(struct crypto_tfm *tfm, u8 *outbuf, const u8 *inbuf)
 	__cast6_encrypt(crypto_tfm_ctx(tfm), outbuf, inbuf);
 }
 
-void __cast6_decrypt(struct cast6_ctx *c, u8 *outbuf, const u8 *inbuf)
+void __cast6_decrypt(const void *ctx, u8 *outbuf, const u8 *inbuf)
 {
+	const struct cast6_ctx *c = ctx;
 	const __be32 *src = (const __be32 *)inbuf;
 	__be32 *dst = (__be32 *)outbuf;
 	u32 block[4];
-	u32 *Km;
-	u8 *Kr;
+	const u32 *Km;
+	const u8 *Kr;
 
 	block[0] = be32_to_cpu(src[0]);
 	block[1] = be32_to_cpu(src[1]);
diff --git a/crypto/chacha_generic.c b/crypto/chacha_generic.c
index 085d8d2..8beea79 100644
--- a/crypto/chacha_generic.c
+++ b/crypto/chacha_generic.c
@@ -8,29 +8,10 @@
 
 #include <asm/unaligned.h>
 #include <crypto/algapi.h>
-#include <crypto/chacha.h>
+#include <crypto/internal/chacha.h>
 #include <crypto/internal/skcipher.h>
 #include <linux/module.h>
 
-static void chacha_docrypt(u32 *state, u8 *dst, const u8 *src,
-			   unsigned int bytes, int nrounds)
-{
-	/* aligned to potentially speed up crypto_xor() */
-	u8 stream[CHACHA_BLOCK_SIZE] __aligned(sizeof(long));
-
-	while (bytes >= CHACHA_BLOCK_SIZE) {
-		chacha_block(state, stream, nrounds);
-		crypto_xor_cpy(dst, src, stream, CHACHA_BLOCK_SIZE);
-		bytes -= CHACHA_BLOCK_SIZE;
-		dst += CHACHA_BLOCK_SIZE;
-		src += CHACHA_BLOCK_SIZE;
-	}
-	if (bytes) {
-		chacha_block(state, stream, nrounds);
-		crypto_xor_cpy(dst, src, stream, bytes);
-	}
-}
-
 static int chacha_stream_xor(struct skcipher_request *req,
 			     const struct chacha_ctx *ctx, const u8 *iv)
 {
@@ -40,7 +21,7 @@ static int chacha_stream_xor(struct skcipher_request *req,
 
 	err = skcipher_walk_virt(&walk, req, false);
 
-	crypto_chacha_init(state, ctx, iv);
+	chacha_init_generic(state, ctx->key, iv);
 
 	while (walk.nbytes > 0) {
 		unsigned int nbytes = walk.nbytes;
@@ -48,75 +29,23 @@ static int chacha_stream_xor(struct skcipher_request *req,
 		if (nbytes < walk.total)
 			nbytes = round_down(nbytes, CHACHA_BLOCK_SIZE);
 
-		chacha_docrypt(state, walk.dst.virt.addr, walk.src.virt.addr,
-			       nbytes, ctx->nrounds);
+		chacha_crypt_generic(state, walk.dst.virt.addr,
+				     walk.src.virt.addr, nbytes, ctx->nrounds);
 		err = skcipher_walk_done(&walk, walk.nbytes - nbytes);
 	}
 
 	return err;
 }
 
-void crypto_chacha_init(u32 *state, const struct chacha_ctx *ctx, const u8 *iv)
-{
-	state[0]  = 0x61707865; /* "expa" */
-	state[1]  = 0x3320646e; /* "nd 3" */
-	state[2]  = 0x79622d32; /* "2-by" */
-	state[3]  = 0x6b206574; /* "te k" */
-	state[4]  = ctx->key[0];
-	state[5]  = ctx->key[1];
-	state[6]  = ctx->key[2];
-	state[7]  = ctx->key[3];
-	state[8]  = ctx->key[4];
-	state[9]  = ctx->key[5];
-	state[10] = ctx->key[6];
-	state[11] = ctx->key[7];
-	state[12] = get_unaligned_le32(iv +  0);
-	state[13] = get_unaligned_le32(iv +  4);
-	state[14] = get_unaligned_le32(iv +  8);
-	state[15] = get_unaligned_le32(iv + 12);
-}
-EXPORT_SYMBOL_GPL(crypto_chacha_init);
-
-static int chacha_setkey(struct crypto_skcipher *tfm, const u8 *key,
-			 unsigned int keysize, int nrounds)
-{
-	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
-	int i;
-
-	if (keysize != CHACHA_KEY_SIZE)
-		return -EINVAL;
-
-	for (i = 0; i < ARRAY_SIZE(ctx->key); i++)
-		ctx->key[i] = get_unaligned_le32(key + i * sizeof(u32));
-
-	ctx->nrounds = nrounds;
-	return 0;
-}
-
-int crypto_chacha20_setkey(struct crypto_skcipher *tfm, const u8 *key,
-			   unsigned int keysize)
-{
-	return chacha_setkey(tfm, key, keysize, 20);
-}
-EXPORT_SYMBOL_GPL(crypto_chacha20_setkey);
-
-int crypto_chacha12_setkey(struct crypto_skcipher *tfm, const u8 *key,
-			   unsigned int keysize)
-{
-	return chacha_setkey(tfm, key, keysize, 12);
-}
-EXPORT_SYMBOL_GPL(crypto_chacha12_setkey);
-
-int crypto_chacha_crypt(struct skcipher_request *req)
+static int crypto_chacha_crypt(struct skcipher_request *req)
 {
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
 
 	return chacha_stream_xor(req, ctx, req->iv);
 }
-EXPORT_SYMBOL_GPL(crypto_chacha_crypt);
 
-int crypto_xchacha_crypt(struct skcipher_request *req)
+static int crypto_xchacha_crypt(struct skcipher_request *req)
 {
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
@@ -125,8 +54,8 @@ int crypto_xchacha_crypt(struct skcipher_request *req)
 	u8 real_iv[16];
 
 	/* Compute the subkey given the original key and first 128 nonce bits */
-	crypto_chacha_init(state, ctx, req->iv);
-	hchacha_block(state, subctx.key, ctx->nrounds);
+	chacha_init_generic(state, ctx->key, req->iv);
+	hchacha_block_generic(state, subctx.key, ctx->nrounds);
 	subctx.nrounds = ctx->nrounds;
 
 	/* Build the real IV */
@@ -136,7 +65,6 @@ int crypto_xchacha_crypt(struct skcipher_request *req)
 	/* Generate the stream and XOR it with the data */
 	return chacha_stream_xor(req, &subctx, real_iv);
 }
-EXPORT_SYMBOL_GPL(crypto_xchacha_crypt);
 
 static struct skcipher_alg algs[] = {
 	{
@@ -151,7 +79,7 @@ static struct skcipher_alg algs[] = {
 		.max_keysize		= CHACHA_KEY_SIZE,
 		.ivsize			= CHACHA_IV_SIZE,
 		.chunksize		= CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha20_setkey,
+		.setkey			= chacha20_setkey,
 		.encrypt		= crypto_chacha_crypt,
 		.decrypt		= crypto_chacha_crypt,
 	}, {
@@ -166,7 +94,7 @@ static struct skcipher_alg algs[] = {
 		.max_keysize		= CHACHA_KEY_SIZE,
 		.ivsize			= XCHACHA_IV_SIZE,
 		.chunksize		= CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha20_setkey,
+		.setkey			= chacha20_setkey,
 		.encrypt		= crypto_xchacha_crypt,
 		.decrypt		= crypto_xchacha_crypt,
 	}, {
@@ -181,7 +109,7 @@ static struct skcipher_alg algs[] = {
 		.max_keysize		= CHACHA_KEY_SIZE,
 		.ivsize			= XCHACHA_IV_SIZE,
 		.chunksize		= CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha12_setkey,
+		.setkey			= chacha12_setkey,
 		.encrypt		= crypto_xchacha_crypt,
 		.decrypt		= crypto_xchacha_crypt,
 	}
diff --git a/crypto/curve25519-generic.c b/crypto/curve25519-generic.c
new file mode 100644
index 0000000..bd88fd5
--- /dev/null
+++ b/crypto/curve25519-generic.c
@@ -0,0 +1,90 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include <crypto/curve25519.h>
+#include <crypto/internal/kpp.h>
+#include <crypto/kpp.h>
+#include <linux/module.h>
+#include <linux/scatterlist.h>
+
+static int curve25519_set_secret(struct crypto_kpp *tfm, const void *buf,
+				 unsigned int len)
+{
+	u8 *secret = kpp_tfm_ctx(tfm);
+
+	if (!len)
+		curve25519_generate_secret(secret);
+	else if (len == CURVE25519_KEY_SIZE &&
+		 crypto_memneq(buf, curve25519_null_point, CURVE25519_KEY_SIZE))
+		memcpy(secret, buf, CURVE25519_KEY_SIZE);
+	else
+		return -EINVAL;
+	return 0;
+}
+
+static int curve25519_compute_value(struct kpp_request *req)
+{
+	struct crypto_kpp *tfm = crypto_kpp_reqtfm(req);
+	const u8 *secret = kpp_tfm_ctx(tfm);
+	u8 public_key[CURVE25519_KEY_SIZE];
+	u8 buf[CURVE25519_KEY_SIZE];
+	int copied, nbytes;
+	u8 const *bp;
+
+	if (req->src) {
+		copied = sg_copy_to_buffer(req->src,
+					   sg_nents_for_len(req->src,
+							    CURVE25519_KEY_SIZE),
+					   public_key, CURVE25519_KEY_SIZE);
+		if (copied != CURVE25519_KEY_SIZE)
+			return -EINVAL;
+		bp = public_key;
+	} else {
+		bp = curve25519_base_point;
+	}
+
+	curve25519_generic(buf, secret, bp);
+
+	/* might want less than we've got */
+	nbytes = min_t(size_t, CURVE25519_KEY_SIZE, req->dst_len);
+	copied = sg_copy_from_buffer(req->dst, sg_nents_for_len(req->dst,
+								nbytes),
+				     buf, nbytes);
+	if (copied != nbytes)
+		return -EINVAL;
+	return 0;
+}
+
+static unsigned int curve25519_max_size(struct crypto_kpp *tfm)
+{
+	return CURVE25519_KEY_SIZE;
+}
+
+static struct kpp_alg curve25519_alg = {
+	.base.cra_name		= "curve25519",
+	.base.cra_driver_name	= "curve25519-generic",
+	.base.cra_priority	= 100,
+	.base.cra_module	= THIS_MODULE,
+	.base.cra_ctxsize	= CURVE25519_KEY_SIZE,
+
+	.set_secret		= curve25519_set_secret,
+	.generate_public_key	= curve25519_compute_value,
+	.compute_shared_secret	= curve25519_compute_value,
+	.max_size		= curve25519_max_size,
+};
+
+static int curve25519_init(void)
+{
+	return crypto_register_kpp(&curve25519_alg);
+}
+
+static void curve25519_exit(void)
+{
+	crypto_unregister_kpp(&curve25519_alg);
+}
+
+subsys_initcall(curve25519_init);
+module_exit(curve25519_exit);
+
+MODULE_ALIAS_CRYPTO("curve25519");
+MODULE_ALIAS_CRYPTO("curve25519-generic");
+MODULE_LICENSE("GPL");
diff --git a/crypto/nhpoly1305.c b/crypto/nhpoly1305.c
index 9ab4e07c..8a3006c 100644
--- a/crypto/nhpoly1305.c
+++ b/crypto/nhpoly1305.c
@@ -33,6 +33,7 @@
 #include <asm/unaligned.h>
 #include <crypto/algapi.h>
 #include <crypto/internal/hash.h>
+#include <crypto/internal/poly1305.h>
 #include <crypto/nhpoly1305.h>
 #include <linux/crypto.h>
 #include <linux/kernel.h>
@@ -78,7 +79,7 @@ static void process_nh_hash_value(struct nhpoly1305_state *state,
 	BUILD_BUG_ON(NH_HASH_BYTES % POLY1305_BLOCK_SIZE != 0);
 
 	poly1305_core_blocks(&state->poly_state, &key->poly_key, state->nh_hash,
-			     NH_HASH_BYTES / POLY1305_BLOCK_SIZE);
+			     NH_HASH_BYTES / POLY1305_BLOCK_SIZE, 1);
 }
 
 /*
@@ -209,7 +210,7 @@ int crypto_nhpoly1305_final_helper(struct shash_desc *desc, u8 *dst, nh_t nh_fn)
 	if (state->nh_remaining)
 		process_nh_hash_value(state, key);
 
-	poly1305_core_emit(&state->poly_state, dst);
+	poly1305_core_emit(&state->poly_state, NULL, dst);
 	return 0;
 }
 EXPORT_SYMBOL(crypto_nhpoly1305_final_helper);
diff --git a/crypto/poly1305_generic.c b/crypto/poly1305_generic.c
index adc4029..94af47e 100644
--- a/crypto/poly1305_generic.c
+++ b/crypto/poly1305_generic.c
@@ -13,65 +13,33 @@
 
 #include <crypto/algapi.h>
 #include <crypto/internal/hash.h>
-#include <crypto/poly1305.h>
+#include <crypto/internal/poly1305.h>
 #include <linux/crypto.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <asm/unaligned.h>
 
-static inline u64 mlt(u64 a, u64 b)
-{
-	return a * b;
-}
-
-static inline u32 sr(u64 v, u_char n)
-{
-	return v >> n;
-}
-
-static inline u32 and(u32 v, u32 mask)
-{
-	return v & mask;
-}
-
-int crypto_poly1305_init(struct shash_desc *desc)
+static int crypto_poly1305_init(struct shash_desc *desc)
 {
 	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
 
 	poly1305_core_init(&dctx->h);
 	dctx->buflen = 0;
-	dctx->rset = false;
+	dctx->rset = 0;
 	dctx->sset = false;
 
 	return 0;
 }
-EXPORT_SYMBOL_GPL(crypto_poly1305_init);
 
-void poly1305_core_setkey(struct poly1305_key *key, const u8 *raw_key)
-{
-	/* r &= 0xffffffc0ffffffc0ffffffc0fffffff */
-	key->r[0] = (get_unaligned_le32(raw_key +  0) >> 0) & 0x3ffffff;
-	key->r[1] = (get_unaligned_le32(raw_key +  3) >> 2) & 0x3ffff03;
-	key->r[2] = (get_unaligned_le32(raw_key +  6) >> 4) & 0x3ffc0ff;
-	key->r[3] = (get_unaligned_le32(raw_key +  9) >> 6) & 0x3f03fff;
-	key->r[4] = (get_unaligned_le32(raw_key + 12) >> 8) & 0x00fffff;
-}
-EXPORT_SYMBOL_GPL(poly1305_core_setkey);
-
-/*
- * Poly1305 requires a unique key for each tag, which implies that we can't set
- * it on the tfm that gets accessed by multiple users simultaneously. Instead we
- * expect the key as the first 32 bytes in the update() call.
- */
-unsigned int crypto_poly1305_setdesckey(struct poly1305_desc_ctx *dctx,
-					const u8 *src, unsigned int srclen)
+static unsigned int crypto_poly1305_setdesckey(struct poly1305_desc_ctx *dctx,
+					       const u8 *src, unsigned int srclen)
 {
 	if (!dctx->sset) {
 		if (!dctx->rset && srclen >= POLY1305_BLOCK_SIZE) {
-			poly1305_core_setkey(&dctx->r, src);
+			poly1305_core_setkey(&dctx->core_r, src);
 			src += POLY1305_BLOCK_SIZE;
 			srclen -= POLY1305_BLOCK_SIZE;
-			dctx->rset = true;
+			dctx->rset = 2;
 		}
 		if (srclen >= POLY1305_BLOCK_SIZE) {
 			dctx->s[0] = get_unaligned_le32(src +  0);
@@ -85,86 +53,9 @@ unsigned int crypto_poly1305_setdesckey(struct poly1305_desc_ctx *dctx,
 	}
 	return srclen;
 }
-EXPORT_SYMBOL_GPL(crypto_poly1305_setdesckey);
 
-static void poly1305_blocks_internal(struct poly1305_state *state,
-				     const struct poly1305_key *key,
-				     const void *src, unsigned int nblocks,
-				     u32 hibit)
-{
-	u32 r0, r1, r2, r3, r4;
-	u32 s1, s2, s3, s4;
-	u32 h0, h1, h2, h3, h4;
-	u64 d0, d1, d2, d3, d4;
-
-	if (!nblocks)
-		return;
-
-	r0 = key->r[0];
-	r1 = key->r[1];
-	r2 = key->r[2];
-	r3 = key->r[3];
-	r4 = key->r[4];
-
-	s1 = r1 * 5;
-	s2 = r2 * 5;
-	s3 = r3 * 5;
-	s4 = r4 * 5;
-
-	h0 = state->h[0];
-	h1 = state->h[1];
-	h2 = state->h[2];
-	h3 = state->h[3];
-	h4 = state->h[4];
-
-	do {
-		/* h += m[i] */
-		h0 += (get_unaligned_le32(src +  0) >> 0) & 0x3ffffff;
-		h1 += (get_unaligned_le32(src +  3) >> 2) & 0x3ffffff;
-		h2 += (get_unaligned_le32(src +  6) >> 4) & 0x3ffffff;
-		h3 += (get_unaligned_le32(src +  9) >> 6) & 0x3ffffff;
-		h4 += (get_unaligned_le32(src + 12) >> 8) | hibit;
-
-		/* h *= r */
-		d0 = mlt(h0, r0) + mlt(h1, s4) + mlt(h2, s3) +
-		     mlt(h3, s2) + mlt(h4, s1);
-		d1 = mlt(h0, r1) + mlt(h1, r0) + mlt(h2, s4) +
-		     mlt(h3, s3) + mlt(h4, s2);
-		d2 = mlt(h0, r2) + mlt(h1, r1) + mlt(h2, r0) +
-		     mlt(h3, s4) + mlt(h4, s3);
-		d3 = mlt(h0, r3) + mlt(h1, r2) + mlt(h2, r1) +
-		     mlt(h3, r0) + mlt(h4, s4);
-		d4 = mlt(h0, r4) + mlt(h1, r3) + mlt(h2, r2) +
-		     mlt(h3, r1) + mlt(h4, r0);
-
-		/* (partial) h %= p */
-		d1 += sr(d0, 26);     h0 = and(d0, 0x3ffffff);
-		d2 += sr(d1, 26);     h1 = and(d1, 0x3ffffff);
-		d3 += sr(d2, 26);     h2 = and(d2, 0x3ffffff);
-		d4 += sr(d3, 26);     h3 = and(d3, 0x3ffffff);
-		h0 += sr(d4, 26) * 5; h4 = and(d4, 0x3ffffff);
-		h1 += h0 >> 26;       h0 = h0 & 0x3ffffff;
-
-		src += POLY1305_BLOCK_SIZE;
-	} while (--nblocks);
-
-	state->h[0] = h0;
-	state->h[1] = h1;
-	state->h[2] = h2;
-	state->h[3] = h3;
-	state->h[4] = h4;
-}
-
-void poly1305_core_blocks(struct poly1305_state *state,
-			  const struct poly1305_key *key,
-			  const void *src, unsigned int nblocks)
-{
-	poly1305_blocks_internal(state, key, src, nblocks, 1 << 24);
-}
-EXPORT_SYMBOL_GPL(poly1305_core_blocks);
-
-static void poly1305_blocks(struct poly1305_desc_ctx *dctx,
-			    const u8 *src, unsigned int srclen, u32 hibit)
+static void poly1305_blocks(struct poly1305_desc_ctx *dctx, const u8 *src,
+			    unsigned int srclen)
 {
 	unsigned int datalen;
 
@@ -174,12 +65,12 @@ static void poly1305_blocks(struct poly1305_desc_ctx *dctx,
 		srclen = datalen;
 	}
 
-	poly1305_blocks_internal(&dctx->h, &dctx->r,
-				 src, srclen / POLY1305_BLOCK_SIZE, hibit);
+	poly1305_core_blocks(&dctx->h, &dctx->core_r, src,
+			     srclen / POLY1305_BLOCK_SIZE, 1);
 }
 
-int crypto_poly1305_update(struct shash_desc *desc,
-			   const u8 *src, unsigned int srclen)
+static int crypto_poly1305_update(struct shash_desc *desc,
+				  const u8 *src, unsigned int srclen)
 {
 	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
 	unsigned int bytes;
@@ -193,13 +84,13 @@ int crypto_poly1305_update(struct shash_desc *desc,
 
 		if (dctx->buflen == POLY1305_BLOCK_SIZE) {
 			poly1305_blocks(dctx, dctx->buf,
-					POLY1305_BLOCK_SIZE, 1 << 24);
+					POLY1305_BLOCK_SIZE);
 			dctx->buflen = 0;
 		}
 	}
 
 	if (likely(srclen >= POLY1305_BLOCK_SIZE)) {
-		poly1305_blocks(dctx, src, srclen, 1 << 24);
+		poly1305_blocks(dctx, src, srclen);
 		src += srclen - (srclen % POLY1305_BLOCK_SIZE);
 		srclen %= POLY1305_BLOCK_SIZE;
 	}
@@ -211,87 +102,17 @@ int crypto_poly1305_update(struct shash_desc *desc,
 
 	return 0;
 }
-EXPORT_SYMBOL_GPL(crypto_poly1305_update);
 
-void poly1305_core_emit(const struct poly1305_state *state, void *dst)
-{
-	u32 h0, h1, h2, h3, h4;
-	u32 g0, g1, g2, g3, g4;
-	u32 mask;
-
-	/* fully carry h */
-	h0 = state->h[0];
-	h1 = state->h[1];
-	h2 = state->h[2];
-	h3 = state->h[3];
-	h4 = state->h[4];
-
-	h2 += (h1 >> 26);     h1 = h1 & 0x3ffffff;
-	h3 += (h2 >> 26);     h2 = h2 & 0x3ffffff;
-	h4 += (h3 >> 26);     h3 = h3 & 0x3ffffff;
-	h0 += (h4 >> 26) * 5; h4 = h4 & 0x3ffffff;
-	h1 += (h0 >> 26);     h0 = h0 & 0x3ffffff;
-
-	/* compute h + -p */
-	g0 = h0 + 5;
-	g1 = h1 + (g0 >> 26);             g0 &= 0x3ffffff;
-	g2 = h2 + (g1 >> 26);             g1 &= 0x3ffffff;
-	g3 = h3 + (g2 >> 26);             g2 &= 0x3ffffff;
-	g4 = h4 + (g3 >> 26) - (1 << 26); g3 &= 0x3ffffff;
-
-	/* select h if h < p, or h + -p if h >= p */
-	mask = (g4 >> ((sizeof(u32) * 8) - 1)) - 1;
-	g0 &= mask;
-	g1 &= mask;
-	g2 &= mask;
-	g3 &= mask;
-	g4 &= mask;
-	mask = ~mask;
-	h0 = (h0 & mask) | g0;
-	h1 = (h1 & mask) | g1;
-	h2 = (h2 & mask) | g2;
-	h3 = (h3 & mask) | g3;
-	h4 = (h4 & mask) | g4;
-
-	/* h = h % (2^128) */
-	put_unaligned_le32((h0 >>  0) | (h1 << 26), dst +  0);
-	put_unaligned_le32((h1 >>  6) | (h2 << 20), dst +  4);
-	put_unaligned_le32((h2 >> 12) | (h3 << 14), dst +  8);
-	put_unaligned_le32((h3 >> 18) | (h4 <<  8), dst + 12);
-}
-EXPORT_SYMBOL_GPL(poly1305_core_emit);
-
-int crypto_poly1305_final(struct shash_desc *desc, u8 *dst)
+static int crypto_poly1305_final(struct shash_desc *desc, u8 *dst)
 {
 	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
-	__le32 digest[4];
-	u64 f = 0;
 
 	if (unlikely(!dctx->sset))
 		return -ENOKEY;
 
-	if (unlikely(dctx->buflen)) {
-		dctx->buf[dctx->buflen++] = 1;
-		memset(dctx->buf + dctx->buflen, 0,
-		       POLY1305_BLOCK_SIZE - dctx->buflen);
-		poly1305_blocks(dctx, dctx->buf, POLY1305_BLOCK_SIZE, 0);
-	}
-
-	poly1305_core_emit(&dctx->h, digest);
-
-	/* mac = (h + s) % (2^128) */
-	f = (f >> 32) + le32_to_cpu(digest[0]) + dctx->s[0];
-	put_unaligned_le32(f, dst + 0);
-	f = (f >> 32) + le32_to_cpu(digest[1]) + dctx->s[1];
-	put_unaligned_le32(f, dst + 4);
-	f = (f >> 32) + le32_to_cpu(digest[2]) + dctx->s[2];
-	put_unaligned_le32(f, dst + 8);
-	f = (f >> 32) + le32_to_cpu(digest[3]) + dctx->s[3];
-	put_unaligned_le32(f, dst + 12);
-
+	poly1305_final_generic(dctx, dst);
 	return 0;
 }
-EXPORT_SYMBOL_GPL(crypto_poly1305_final);
 
 static struct shash_alg poly1305_alg = {
 	.digestsize	= POLY1305_DIGEST_SIZE,
diff --git a/crypto/serpent_generic.c b/crypto/serpent_generic.c
index 56fa665..492c1d0 100644
--- a/crypto/serpent_generic.c
+++ b/crypto/serpent_generic.c
@@ -449,8 +449,9 @@ int serpent_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int keylen)
 }
 EXPORT_SYMBOL_GPL(serpent_setkey);
 
-void __serpent_encrypt(struct serpent_ctx *ctx, u8 *dst, const u8 *src)
+void __serpent_encrypt(const void *c, u8 *dst, const u8 *src)
 {
+	const struct serpent_ctx *ctx = c;
 	const u32 *k = ctx->expkey;
 	const __le32 *s = (const __le32 *)src;
 	__le32	*d = (__le32 *)dst;
@@ -514,8 +515,9 @@ static void serpent_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
 	__serpent_encrypt(ctx, dst, src);
 }
 
-void __serpent_decrypt(struct serpent_ctx *ctx, u8 *dst, const u8 *src)
+void __serpent_decrypt(const void *c, u8 *dst, const u8 *src)
 {
+	const struct serpent_ctx *ctx = c;
 	const u32 *k = ctx->expkey;
 	const __le32 *s = (const __le32 *)src;
 	__le32	*d = (__le32 *)dst;
diff --git a/crypto/sha256_generic.c b/crypto/sha256_generic.c
index f2d7095..88156e3 100644
--- a/crypto/sha256_generic.c
+++ b/crypto/sha256_generic.c
@@ -35,27 +35,31 @@ EXPORT_SYMBOL_GPL(sha256_zero_message_hash);
 
 static int crypto_sha256_init(struct shash_desc *desc)
 {
-	return sha256_init(shash_desc_ctx(desc));
+	sha256_init(shash_desc_ctx(desc));
+	return 0;
 }
 
 static int crypto_sha224_init(struct shash_desc *desc)
 {
-	return sha224_init(shash_desc_ctx(desc));
+	sha224_init(shash_desc_ctx(desc));
+	return 0;
 }
 
 int crypto_sha256_update(struct shash_desc *desc, const u8 *data,
 			  unsigned int len)
 {
-	return sha256_update(shash_desc_ctx(desc), data, len);
+	sha256_update(shash_desc_ctx(desc), data, len);
+	return 0;
 }
 EXPORT_SYMBOL(crypto_sha256_update);
 
 static int crypto_sha256_final(struct shash_desc *desc, u8 *out)
 {
 	if (crypto_shash_digestsize(desc->tfm) == SHA224_DIGEST_SIZE)
-		return sha224_final(shash_desc_ctx(desc), out);
+		sha224_final(shash_desc_ctx(desc), out);
 	else
-		return sha256_final(shash_desc_ctx(desc), out);
+		sha256_final(shash_desc_ctx(desc), out);
+	return 0;
 }
 
 int crypto_sha256_finup(struct shash_desc *desc, const u8 *data,
diff --git a/crypto/testmgr.c b/crypto/testmgr.c
index 7473c5b..83b50e6c 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -4035,6 +4035,58 @@ static const struct alg_test_desc alg_test_descs[] = {
 		.test = alg_test_null,
 		.fips_allowed = 1,
 	}, {
+		.alg = "blake2b-160",
+		.test = alg_test_hash,
+		.fips_allowed = 0,
+		.suite = {
+			.hash = __VECS(blake2b_160_tv_template)
+		}
+	}, {
+		.alg = "blake2b-256",
+		.test = alg_test_hash,
+		.fips_allowed = 0,
+		.suite = {
+			.hash = __VECS(blake2b_256_tv_template)
+		}
+	}, {
+		.alg = "blake2b-384",
+		.test = alg_test_hash,
+		.fips_allowed = 0,
+		.suite = {
+			.hash = __VECS(blake2b_384_tv_template)
+		}
+	}, {
+		.alg = "blake2b-512",
+		.test = alg_test_hash,
+		.fips_allowed = 0,
+		.suite = {
+			.hash = __VECS(blake2b_512_tv_template)
+		}
+	}, {
+		.alg = "blake2s-128",
+		.test = alg_test_hash,
+		.suite = {
+			.hash = __VECS(blakes2s_128_tv_template)
+		}
+	}, {
+		.alg = "blake2s-160",
+		.test = alg_test_hash,
+		.suite = {
+			.hash = __VECS(blakes2s_160_tv_template)
+		}
+	}, {
+		.alg = "blake2s-224",
+		.test = alg_test_hash,
+		.suite = {
+			.hash = __VECS(blakes2s_224_tv_template)
+		}
+	}, {
+		.alg = "blake2s-256",
+		.test = alg_test_hash,
+		.suite = {
+			.hash = __VECS(blakes2s_256_tv_template)
+		}
+	}, {
 		.alg = "cbc(aes)",
 		.test = alg_test_skcipher,
 		.fips_allowed = 1,
@@ -4272,6 +4324,12 @@ static const struct alg_test_desc alg_test_descs[] = {
 		.test = alg_test_null,
 		.fips_allowed = 1,
 	}, {
+		.alg = "curve25519",
+		.test = alg_test_kpp,
+		.suite = {
+			.kpp = __VECS(curve25519_tv_template)
+		}
+	}, {
 		.alg = "deflate",
 		.test = alg_test_comp,
 		.fips_allowed = 1,
diff --git a/crypto/testmgr.h b/crypto/testmgr.h
index ef7d21f..ea0679c 100644
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
@@ -1030,6 +1030,1231 @@ static const struct kpp_testvec dh_tv_template[] = {
 	}
 };
 
+static const struct kpp_testvec curve25519_tv_template[] = {
+{
+	.secret = (u8[32]){ 0x77, 0x07, 0x6d, 0x0a, 0x73, 0x18, 0xa5, 0x7d,
+		     0x3c, 0x16, 0xc1, 0x72, 0x51, 0xb2, 0x66, 0x45,
+		     0xdf, 0x4c, 0x2f, 0x87, 0xeb, 0xc0, 0x99, 0x2a,
+		     0xb1, 0x77, 0xfb, 0xa5, 0x1d, 0xb9, 0x2c, 0x2a },
+	.b_public = (u8[32]){ 0xde, 0x9e, 0xdb, 0x7d, 0x7b, 0x7d, 0xc1, 0xb4,
+		    0xd3, 0x5b, 0x61, 0xc2, 0xec, 0xe4, 0x35, 0x37,
+		    0x3f, 0x83, 0x43, 0xc8, 0x5b, 0x78, 0x67, 0x4d,
+		    0xad, 0xfc, 0x7e, 0x14, 0x6f, 0x88, 0x2b, 0x4f },
+	.expected_ss = (u8[32]){ 0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d, 0xe1,
+		    0x72, 0x8e, 0x3b, 0xf4, 0x80, 0x35, 0x0f, 0x25,
+		    0xe0, 0x7e, 0x21, 0xc9, 0x47, 0xd1, 0x9e, 0x33,
+		    0x76, 0xf0, 0x9b, 0x3c, 0x1e, 0x16, 0x17, 0x42 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+{
+	.secret = (u8[32]){ 0x5d, 0xab, 0x08, 0x7e, 0x62, 0x4a, 0x8a, 0x4b,
+		     0x79, 0xe1, 0x7f, 0x8b, 0x83, 0x80, 0x0e, 0xe6,
+		     0x6f, 0x3b, 0xb1, 0x29, 0x26, 0x18, 0xb6, 0xfd,
+		     0x1c, 0x2f, 0x8b, 0x27, 0xff, 0x88, 0xe0, 0xeb },
+	.b_public = (u8[32]){ 0x85, 0x20, 0xf0, 0x09, 0x89, 0x30, 0xa7, 0x54,
+		    0x74, 0x8b, 0x7d, 0xdc, 0xb4, 0x3e, 0xf7, 0x5a,
+		    0x0d, 0xbf, 0x3a, 0x0d, 0x26, 0x38, 0x1a, 0xf4,
+		    0xeb, 0xa4, 0xa9, 0x8e, 0xaa, 0x9b, 0x4e, 0x6a },
+	.expected_ss = (u8[32]){ 0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d, 0xe1,
+		    0x72, 0x8e, 0x3b, 0xf4, 0x80, 0x35, 0x0f, 0x25,
+		    0xe0, 0x7e, 0x21, 0xc9, 0x47, 0xd1, 0x9e, 0x33,
+		    0x76, 0xf0, 0x9b, 0x3c, 0x1e, 0x16, 0x17, 0x42 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+{
+	.secret = (u8[32]){ 1 },
+	.b_public = (u8[32]){ 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+	.expected_ss = (u8[32]){ 0x3c, 0x77, 0x77, 0xca, 0xf9, 0x97, 0xb2, 0x64,
+		    0x41, 0x60, 0x77, 0x66, 0x5b, 0x4e, 0x22, 0x9d,
+		    0x0b, 0x95, 0x48, 0xdc, 0x0c, 0xd8, 0x19, 0x98,
+		    0xdd, 0xcd, 0xc5, 0xc8, 0x53, 0x3c, 0x79, 0x7f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+{
+	.secret = (u8[32]){ 1 },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0xb3, 0x2d, 0x13, 0x62, 0xc2, 0x48, 0xd6, 0x2f,
+		    0xe6, 0x26, 0x19, 0xcf, 0xf0, 0x4d, 0xd4, 0x3d,
+		    0xb7, 0x3f, 0xfc, 0x1b, 0x63, 0x08, 0xed, 0xe3,
+		    0x0b, 0x78, 0xd8, 0x73, 0x80, 0xf1, 0xe8, 0x34 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+{
+	.secret = (u8[32]){ 0xa5, 0x46, 0xe3, 0x6b, 0xf0, 0x52, 0x7c, 0x9d,
+		     0x3b, 0x16, 0x15, 0x4b, 0x82, 0x46, 0x5e, 0xdd,
+		     0x62, 0x14, 0x4c, 0x0a, 0xc1, 0xfc, 0x5a, 0x18,
+		     0x50, 0x6a, 0x22, 0x44, 0xba, 0x44, 0x9a, 0xc4 },
+	.b_public = (u8[32]){ 0xe6, 0xdb, 0x68, 0x67, 0x58, 0x30, 0x30, 0xdb,
+		    0x35, 0x94, 0xc1, 0xa4, 0x24, 0xb1, 0x5f, 0x7c,
+		    0x72, 0x66, 0x24, 0xec, 0x26, 0xb3, 0x35, 0x3b,
+		    0x10, 0xa9, 0x03, 0xa6, 0xd0, 0xab, 0x1c, 0x4c },
+	.expected_ss = (u8[32]){ 0xc3, 0xda, 0x55, 0x37, 0x9d, 0xe9, 0xc6, 0x90,
+		    0x8e, 0x94, 0xea, 0x4d, 0xf2, 0x8d, 0x08, 0x4f,
+		    0x32, 0xec, 0xcf, 0x03, 0x49, 0x1c, 0x71, 0xf7,
+		    0x54, 0xb4, 0x07, 0x55, 0x77, 0xa2, 0x85, 0x52 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+{
+	.secret = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0x0a, 0xff, 0xff, 0xff,
+		     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0xfb, 0x9f },
+	.expected_ss = (u8[32]){ 0x77, 0x52, 0xb6, 0x18, 0xc1, 0x2d, 0x48, 0xd2,
+		    0xc6, 0x93, 0x46, 0x83, 0x81, 0x7c, 0xc6, 0x57,
+		    0xf3, 0x31, 0x03, 0x19, 0x49, 0x48, 0x20, 0x05,
+		    0x42, 0x2b, 0x4e, 0xae, 0x8d, 0x1d, 0x43, 0x23 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+{
+	.secret = (u8[32]){ 0x8e, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+	.b_public = (u8[32]){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x06 },
+	.expected_ss = (u8[32]){ 0x5a, 0xdf, 0xaa, 0x25, 0x86, 0x8e, 0x32, 0x3d,
+		    0xae, 0x49, 0x62, 0xc1, 0x01, 0x5c, 0xb3, 0x12,
+		    0xe1, 0xc5, 0xc7, 0x9e, 0x95, 0x3f, 0x03, 0x99,
+		    0xb0, 0xba, 0x16, 0x22, 0xf3, 0xb6, 0xf7, 0x0c },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - normal case */
+{
+	.secret = (u8[32]){ 0x48, 0x52, 0x83, 0x4d, 0x9d, 0x6b, 0x77, 0xda,
+		     0xde, 0xab, 0xaa, 0xf2, 0xe1, 0x1d, 0xca, 0x66,
+		     0xd1, 0x9f, 0xe7, 0x49, 0x93, 0xa7, 0xbe, 0xc3,
+		     0x6c, 0x6e, 0x16, 0xa0, 0x98, 0x3f, 0xea, 0xba },
+	.b_public = (u8[32]){ 0x9c, 0x64, 0x7d, 0x9a, 0xe5, 0x89, 0xb9, 0xf5,
+		    0x8f, 0xdc, 0x3c, 0xa4, 0x94, 0x7e, 0xfb, 0xc9,
+		    0x15, 0xc4, 0xb2, 0xe0, 0x8e, 0x74, 0x4a, 0x0e,
+		    0xdf, 0x46, 0x9d, 0xac, 0x59, 0xc8, 0xf8, 0x5a },
+	.expected_ss = (u8[32]){ 0x87, 0xb7, 0xf2, 0x12, 0xb6, 0x27, 0xf7, 0xa5,
+		    0x4c, 0xa5, 0xe0, 0xbc, 0xda, 0xdd, 0xd5, 0x38,
+		    0x9d, 0x9d, 0xe6, 0x15, 0x6c, 0xdb, 0xcf, 0x8e,
+		    0xbe, 0x14, 0xff, 0xbc, 0xfb, 0x43, 0x65, 0x51 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key on twist */
+{
+	.secret = (u8[32]){ 0x58, 0x8c, 0x06, 0x1a, 0x50, 0x80, 0x4a, 0xc4,
+		     0x88, 0xad, 0x77, 0x4a, 0xc7, 0x16, 0xc3, 0xf5,
+		     0xba, 0x71, 0x4b, 0x27, 0x12, 0xe0, 0x48, 0x49,
+		     0x13, 0x79, 0xa5, 0x00, 0x21, 0x19, 0x98, 0xa8 },
+	.b_public = (u8[32]){ 0x63, 0xaa, 0x40, 0xc6, 0xe3, 0x83, 0x46, 0xc5,
+		    0xca, 0xf2, 0x3a, 0x6d, 0xf0, 0xa5, 0xe6, 0xc8,
+		    0x08, 0x89, 0xa0, 0x86, 0x47, 0xe5, 0x51, 0xb3,
+		    0x56, 0x34, 0x49, 0xbe, 0xfc, 0xfc, 0x97, 0x33 },
+	.expected_ss = (u8[32]){ 0xb1, 0xa7, 0x07, 0x51, 0x94, 0x95, 0xff, 0xff,
+		    0xb2, 0x98, 0xff, 0x94, 0x17, 0x16, 0xb0, 0x6d,
+		    0xfa, 0xb8, 0x7c, 0xf8, 0xd9, 0x11, 0x23, 0xfe,
+		    0x2b, 0xe9, 0xa2, 0x33, 0xdd, 0xa2, 0x22, 0x12 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key on twist */
+{
+	.secret = (u8[32]){ 0xb0, 0x5b, 0xfd, 0x32, 0xe5, 0x53, 0x25, 0xd9,
+		     0xfd, 0x64, 0x8c, 0xb3, 0x02, 0x84, 0x80, 0x39,
+		     0x00, 0x0b, 0x39, 0x0e, 0x44, 0xd5, 0x21, 0xe5,
+		     0x8a, 0xab, 0x3b, 0x29, 0xa6, 0x96, 0x0b, 0xa8 },
+	.b_public = (u8[32]){ 0x0f, 0x83, 0xc3, 0x6f, 0xde, 0xd9, 0xd3, 0x2f,
+		    0xad, 0xf4, 0xef, 0xa3, 0xae, 0x93, 0xa9, 0x0b,
+		    0xb5, 0xcf, 0xa6, 0x68, 0x93, 0xbc, 0x41, 0x2c,
+		    0x43, 0xfa, 0x72, 0x87, 0xdb, 0xb9, 0x97, 0x79 },
+	.expected_ss = (u8[32]){ 0x67, 0xdd, 0x4a, 0x6e, 0x16, 0x55, 0x33, 0x53,
+		    0x4c, 0x0e, 0x3f, 0x17, 0x2e, 0x4a, 0xb8, 0x57,
+		    0x6b, 0xca, 0x92, 0x3a, 0x5f, 0x07, 0xb2, 0xc0,
+		    0x69, 0xb4, 0xc3, 0x10, 0xff, 0x2e, 0x93, 0x5b },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key on twist */
+{
+	.secret = (u8[32]){ 0x70, 0xe3, 0x4b, 0xcb, 0xe1, 0xf4, 0x7f, 0xbc,
+		     0x0f, 0xdd, 0xfd, 0x7c, 0x1e, 0x1a, 0xa5, 0x3d,
+		     0x57, 0xbf, 0xe0, 0xf6, 0x6d, 0x24, 0x30, 0x67,
+		     0xb4, 0x24, 0xbb, 0x62, 0x10, 0xbe, 0xd1, 0x9c },
+	.b_public = (u8[32]){ 0x0b, 0x82, 0x11, 0xa2, 0xb6, 0x04, 0x90, 0x97,
+		    0xf6, 0x87, 0x1c, 0x6c, 0x05, 0x2d, 0x3c, 0x5f,
+		    0xc1, 0xba, 0x17, 0xda, 0x9e, 0x32, 0xae, 0x45,
+		    0x84, 0x03, 0xb0, 0x5b, 0xb2, 0x83, 0x09, 0x2a },
+	.expected_ss = (u8[32]){ 0x4a, 0x06, 0x38, 0xcf, 0xaa, 0x9e, 0xf1, 0x93,
+		    0x3b, 0x47, 0xf8, 0x93, 0x92, 0x96, 0xa6, 0xb2,
+		    0x5b, 0xe5, 0x41, 0xef, 0x7f, 0x70, 0xe8, 0x44,
+		    0xc0, 0xbc, 0xc0, 0x0b, 0x13, 0x4d, 0xe6, 0x4a },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key on twist */
+{
+	.secret = (u8[32]){ 0x68, 0xc1, 0xf3, 0xa6, 0x53, 0xa4, 0xcd, 0xb1,
+		     0xd3, 0x7b, 0xba, 0x94, 0x73, 0x8f, 0x8b, 0x95,
+		     0x7a, 0x57, 0xbe, 0xb2, 0x4d, 0x64, 0x6e, 0x99,
+		     0x4d, 0xc2, 0x9a, 0x27, 0x6a, 0xad, 0x45, 0x8d },
+	.b_public = (u8[32]){ 0x34, 0x3a, 0xc2, 0x0a, 0x3b, 0x9c, 0x6a, 0x27,
+		    0xb1, 0x00, 0x81, 0x76, 0x50, 0x9a, 0xd3, 0x07,
+		    0x35, 0x85, 0x6e, 0xc1, 0xc8, 0xd8, 0xfc, 0xae,
+		    0x13, 0x91, 0x2d, 0x08, 0xd1, 0x52, 0xf4, 0x6c },
+	.expected_ss = (u8[32]){ 0x39, 0x94, 0x91, 0xfc, 0xe8, 0xdf, 0xab, 0x73,
+		    0xb4, 0xf9, 0xf6, 0x11, 0xde, 0x8e, 0xa0, 0xb2,
+		    0x7b, 0x28, 0xf8, 0x59, 0x94, 0x25, 0x0b, 0x0f,
+		    0x47, 0x5d, 0x58, 0x5d, 0x04, 0x2a, 0xc2, 0x07 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key on twist */
+{
+	.secret = (u8[32]){ 0xd8, 0x77, 0xb2, 0x6d, 0x06, 0xdf, 0xf9, 0xd9,
+		     0xf7, 0xfd, 0x4c, 0x5b, 0x37, 0x69, 0xf8, 0xcd,
+		     0xd5, 0xb3, 0x05, 0x16, 0xa5, 0xab, 0x80, 0x6b,
+		     0xe3, 0x24, 0xff, 0x3e, 0xb6, 0x9e, 0xa0, 0xb2 },
+	.b_public = (u8[32]){ 0xfa, 0x69, 0x5f, 0xc7, 0xbe, 0x8d, 0x1b, 0xe5,
+		    0xbf, 0x70, 0x48, 0x98, 0xf3, 0x88, 0xc4, 0x52,
+		    0xba, 0xfd, 0xd3, 0xb8, 0xea, 0xe8, 0x05, 0xf8,
+		    0x68, 0x1a, 0x8d, 0x15, 0xc2, 0xd4, 0xe1, 0x42 },
+	.expected_ss = (u8[32]){ 0x2c, 0x4f, 0xe1, 0x1d, 0x49, 0x0a, 0x53, 0x86,
+		    0x17, 0x76, 0xb1, 0x3b, 0x43, 0x54, 0xab, 0xd4,
+		    0xcf, 0x5a, 0x97, 0x69, 0x9d, 0xb6, 0xe6, 0xc6,
+		    0x8c, 0x16, 0x26, 0xd0, 0x76, 0x62, 0xf7, 0x58 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case on twist */
+{
+	.secret = (u8[32]){ 0x38, 0xdd, 0xe9, 0xf3, 0xe7, 0xb7, 0x99, 0x04,
+		     0x5f, 0x9a, 0xc3, 0x79, 0x3d, 0x4a, 0x92, 0x77,
+		     0xda, 0xde, 0xad, 0xc4, 0x1b, 0xec, 0x02, 0x90,
+		     0xf8, 0x1f, 0x74, 0x4f, 0x73, 0x77, 0x5f, 0x84 },
+	.b_public = (u8[32]){ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+	.expected_ss = (u8[32]){ 0x9a, 0x2c, 0xfe, 0x84, 0xff, 0x9c, 0x4a, 0x97,
+		    0x39, 0x62, 0x5c, 0xae, 0x4a, 0x3b, 0x82, 0xa9,
+		    0x06, 0x87, 0x7a, 0x44, 0x19, 0x46, 0xf8, 0xd7,
+		    0xb3, 0xd7, 0x95, 0xfe, 0x8f, 0x5d, 0x16, 0x39 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case on twist */
+{
+	.secret = (u8[32]){ 0x98, 0x57, 0xa9, 0x14, 0xe3, 0xc2, 0x90, 0x36,
+		     0xfd, 0x9a, 0x44, 0x2b, 0xa5, 0x26, 0xb5, 0xcd,
+		     0xcd, 0xf2, 0x82, 0x16, 0x15, 0x3e, 0x63, 0x6c,
+		     0x10, 0x67, 0x7a, 0xca, 0xb6, 0xbd, 0x6a, 0xa5 },
+	.b_public = (u8[32]){ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+	.expected_ss = (u8[32]){ 0x4d, 0xa4, 0xe0, 0xaa, 0x07, 0x2c, 0x23, 0x2e,
+		    0xe2, 0xf0, 0xfa, 0x4e, 0x51, 0x9a, 0xe5, 0x0b,
+		    0x52, 0xc1, 0xed, 0xd0, 0x8a, 0x53, 0x4d, 0x4e,
+		    0xf3, 0x46, 0xc2, 0xe1, 0x06, 0xd2, 0x1d, 0x60 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case on twist */
+{
+	.secret = (u8[32]){ 0x48, 0xe2, 0x13, 0x0d, 0x72, 0x33, 0x05, 0xed,
+		     0x05, 0xe6, 0xe5, 0x89, 0x4d, 0x39, 0x8a, 0x5e,
+		     0x33, 0x36, 0x7a, 0x8c, 0x6a, 0xac, 0x8f, 0xcd,
+		     0xf0, 0xa8, 0x8e, 0x4b, 0x42, 0x82, 0x0d, 0xb7 },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xf8, 0xff,
+		    0xff, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff,
+		    0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x07, 0x00,
+		    0x00, 0xf0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00 },
+	.expected_ss = (u8[32]){ 0x9e, 0xd1, 0x0c, 0x53, 0x74, 0x7f, 0x64, 0x7f,
+		    0x82, 0xf4, 0x51, 0x25, 0xd3, 0xde, 0x15, 0xa1,
+		    0xe6, 0xb8, 0x24, 0x49, 0x6a, 0xb4, 0x04, 0x10,
+		    0xff, 0xcc, 0x3c, 0xfe, 0x95, 0x76, 0x0f, 0x3b },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case on twist */
+{
+	.secret = (u8[32]){ 0x28, 0xf4, 0x10, 0x11, 0x69, 0x18, 0x51, 0xb3,
+		     0xa6, 0x2b, 0x64, 0x15, 0x53, 0xb3, 0x0d, 0x0d,
+		     0xfd, 0xdc, 0xb8, 0xff, 0xfc, 0xf5, 0x37, 0x00,
+		     0xa7, 0xbe, 0x2f, 0x6a, 0x87, 0x2e, 0x9f, 0xb0 },
+	.b_public = (u8[32]){ 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0x00,
+		    0x00, 0xe0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00,
+		    0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0xf8, 0xff,
+		    0xff, 0x0f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x7f },
+	.expected_ss = (u8[32]){ 0xcf, 0x72, 0xb4, 0xaa, 0x6a, 0xa1, 0xc9, 0xf8,
+		    0x94, 0xf4, 0x16, 0x5b, 0x86, 0x10, 0x9a, 0xa4,
+		    0x68, 0x51, 0x76, 0x48, 0xe1, 0xf0, 0xcc, 0x70,
+		    0xe1, 0xab, 0x08, 0x46, 0x01, 0x76, 0x50, 0x6b },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case on twist */
+{
+	.secret = (u8[32]){ 0x18, 0xa9, 0x3b, 0x64, 0x99, 0xb9, 0xf6, 0xb3,
+		     0x22, 0x5c, 0xa0, 0x2f, 0xef, 0x41, 0x0e, 0x0a,
+		     0xde, 0xc2, 0x35, 0x32, 0x32, 0x1d, 0x2d, 0x8e,
+		     0xf1, 0xa6, 0xd6, 0x02, 0xa8, 0xc6, 0x5b, 0x83 },
+	.b_public = (u8[32]){ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+		    0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+		    0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+		    0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f },
+	.expected_ss = (u8[32]){ 0x5d, 0x50, 0xb6, 0x28, 0x36, 0xbb, 0x69, 0x57,
+		    0x94, 0x10, 0x38, 0x6c, 0xf7, 0xbb, 0x81, 0x1c,
+		    0x14, 0xbf, 0x85, 0xb1, 0xc7, 0xb1, 0x7e, 0x59,
+		    0x24, 0xc7, 0xff, 0xea, 0x91, 0xef, 0x9e, 0x12 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case on twist */
+{
+	.secret = (u8[32]){ 0xc0, 0x1d, 0x13, 0x05, 0xa1, 0x33, 0x8a, 0x1f,
+		     0xca, 0xc2, 0xba, 0x7e, 0x2e, 0x03, 0x2b, 0x42,
+		     0x7e, 0x0b, 0x04, 0x90, 0x31, 0x65, 0xac, 0xa9,
+		     0x57, 0xd8, 0xd0, 0x55, 0x3d, 0x87, 0x17, 0xb0 },
+	.b_public = (u8[32]){ 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.expected_ss = (u8[32]){ 0x19, 0x23, 0x0e, 0xb1, 0x48, 0xd5, 0xd6, 0x7c,
+		    0x3c, 0x22, 0xab, 0x1d, 0xae, 0xff, 0x80, 0xa5,
+		    0x7e, 0xae, 0x42, 0x65, 0xce, 0x28, 0x72, 0x65,
+		    0x7b, 0x2c, 0x80, 0x99, 0xfc, 0x69, 0x8e, 0x50 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for public key */
+{
+	.secret = (u8[32]){ 0x38, 0x6f, 0x7f, 0x16, 0xc5, 0x07, 0x31, 0xd6,
+		     0x4f, 0x82, 0xe6, 0xa1, 0x70, 0xb1, 0x42, 0xa4,
+		     0xe3, 0x4f, 0x31, 0xfd, 0x77, 0x68, 0xfc, 0xb8,
+		     0x90, 0x29, 0x25, 0xe7, 0xd1, 0xe2, 0x1a, 0xbe },
+	.b_public = (u8[32]){ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+	.expected_ss = (u8[32]){ 0x0f, 0xca, 0xb5, 0xd8, 0x42, 0xa0, 0x78, 0xd7,
+		    0xa7, 0x1f, 0xc5, 0x9b, 0x57, 0xbf, 0xb4, 0xca,
+		    0x0b, 0xe6, 0x87, 0x3b, 0x49, 0xdc, 0xdb, 0x9f,
+		    0x44, 0xe1, 0x4a, 0xe8, 0xfb, 0xdf, 0xa5, 0x42 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for public key */
+{
+	.secret = (u8[32]){ 0xe0, 0x23, 0xa2, 0x89, 0xbd, 0x5e, 0x90, 0xfa,
+		     0x28, 0x04, 0xdd, 0xc0, 0x19, 0xa0, 0x5e, 0xf3,
+		     0xe7, 0x9d, 0x43, 0x4b, 0xb6, 0xea, 0x2f, 0x52,
+		     0x2e, 0xcb, 0x64, 0x3a, 0x75, 0x29, 0x6e, 0x95 },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+		    0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+		    0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+		    0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 },
+	.expected_ss = (u8[32]){ 0x54, 0xce, 0x8f, 0x22, 0x75, 0xc0, 0x77, 0xe3,
+		    0xb1, 0x30, 0x6a, 0x39, 0x39, 0xc5, 0xe0, 0x3e,
+		    0xef, 0x6b, 0xbb, 0x88, 0x06, 0x05, 0x44, 0x75,
+		    0x8d, 0x9f, 0xef, 0x59, 0xb0, 0xbc, 0x3e, 0x4f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for public key */
+{
+	.secret = (u8[32]){ 0x68, 0xf0, 0x10, 0xd6, 0x2e, 0xe8, 0xd9, 0x26,
+		     0x05, 0x3a, 0x36, 0x1c, 0x3a, 0x75, 0xc6, 0xea,
+		     0x4e, 0xbd, 0xc8, 0x60, 0x6a, 0xb2, 0x85, 0x00,
+		     0x3a, 0x6f, 0x8f, 0x40, 0x76, 0xb0, 0x1e, 0x83 },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03 },
+	.expected_ss = (u8[32]){ 0xf1, 0x36, 0x77, 0x5c, 0x5b, 0xeb, 0x0a, 0xf8,
+		    0x11, 0x0a, 0xf1, 0x0b, 0x20, 0x37, 0x23, 0x32,
+		    0x04, 0x3c, 0xab, 0x75, 0x24, 0x19, 0x67, 0x87,
+		    0x75, 0xa2, 0x23, 0xdf, 0x57, 0xc9, 0xd3, 0x0d },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for public key */
+{
+	.secret = (u8[32]){ 0x58, 0xeb, 0xcb, 0x35, 0xb0, 0xf8, 0x84, 0x5c,
+		     0xaf, 0x1e, 0xc6, 0x30, 0xf9, 0x65, 0x76, 0xb6,
+		     0x2c, 0x4b, 0x7b, 0x6c, 0x36, 0xb2, 0x9d, 0xeb,
+		     0x2c, 0xb0, 0x08, 0x46, 0x51, 0x75, 0x5c, 0x96 },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfb, 0xff,
+		    0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
+		    0xfe, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xf7, 0xff,
+		    0xff, 0xf7, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x3f },
+	.expected_ss = (u8[32]){ 0xbf, 0x9a, 0xff, 0xd0, 0x6b, 0x84, 0x40, 0x85,
+		    0x58, 0x64, 0x60, 0x96, 0x2e, 0xf2, 0x14, 0x6f,
+		    0xf3, 0xd4, 0x53, 0x3d, 0x94, 0x44, 0xaa, 0xb0,
+		    0x06, 0xeb, 0x88, 0xcc, 0x30, 0x54, 0x40, 0x7d },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for public key */
+{
+	.secret = (u8[32]){ 0x18, 0x8c, 0x4b, 0xc5, 0xb9, 0xc4, 0x4b, 0x38,
+		     0xbb, 0x65, 0x8b, 0x9b, 0x2a, 0xe8, 0x2d, 0x5b,
+		     0x01, 0x01, 0x5e, 0x09, 0x31, 0x84, 0xb1, 0x7c,
+		     0xb7, 0x86, 0x35, 0x03, 0xa7, 0x83, 0xe1, 0xbb },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+	.expected_ss = (u8[32]){ 0xd4, 0x80, 0xde, 0x04, 0xf6, 0x99, 0xcb, 0x3b,
+		    0xe0, 0x68, 0x4a, 0x9c, 0xc2, 0xe3, 0x12, 0x81,
+		    0xea, 0x0b, 0xc5, 0xa9, 0xdc, 0xc1, 0x57, 0xd3,
+		    0xd2, 0x01, 0x58, 0xd4, 0x6c, 0xa5, 0x24, 0x6d },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for public key */
+{
+	.secret = (u8[32]){ 0xe0, 0x6c, 0x11, 0xbb, 0x2e, 0x13, 0xce, 0x3d,
+		     0xc7, 0x67, 0x3f, 0x67, 0xf5, 0x48, 0x22, 0x42,
+		     0x90, 0x94, 0x23, 0xa9, 0xae, 0x95, 0xee, 0x98,
+		     0x6a, 0x98, 0x8d, 0x98, 0xfa, 0xee, 0x23, 0xa2 },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f,
+		    0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f,
+		    0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f,
+		    0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f },
+	.expected_ss = (u8[32]){ 0x4c, 0x44, 0x01, 0xcc, 0xe6, 0xb5, 0x1e, 0x4c,
+		    0xb1, 0x8f, 0x27, 0x90, 0x24, 0x6c, 0x9b, 0xf9,
+		    0x14, 0xdb, 0x66, 0x77, 0x50, 0xa1, 0xcb, 0x89,
+		    0x06, 0x90, 0x92, 0xaf, 0x07, 0x29, 0x22, 0x76 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for public key */
+{
+	.secret = (u8[32]){ 0xc0, 0x65, 0x8c, 0x46, 0xdd, 0xe1, 0x81, 0x29,
+		     0x29, 0x38, 0x77, 0x53, 0x5b, 0x11, 0x62, 0xb6,
+		     0xf9, 0xf5, 0x41, 0x4a, 0x23, 0xcf, 0x4d, 0x2c,
+		     0xbc, 0x14, 0x0a, 0x4d, 0x99, 0xda, 0x2b, 0x8f },
+	.b_public = (u8[32]){ 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.expected_ss = (u8[32]){ 0x57, 0x8b, 0xa8, 0xcc, 0x2d, 0xbd, 0xc5, 0x75,
+		    0xaf, 0xcf, 0x9d, 0xf2, 0xb3, 0xee, 0x61, 0x89,
+		    0xf5, 0x33, 0x7d, 0x68, 0x54, 0xc7, 0x9b, 0x4c,
+		    0xe1, 0x65, 0xea, 0x12, 0x29, 0x3b, 0x3a, 0x0f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0xf0, 0x1e, 0x48, 0xda, 0xfa, 0xc9, 0xd7, 0xbc,
+		     0xf5, 0x89, 0xcb, 0xc3, 0x82, 0xc8, 0x78, 0xd1,
+		     0x8b, 0xda, 0x35, 0x50, 0x58, 0x9f, 0xfb, 0x5d,
+		     0x50, 0xb5, 0x23, 0xbe, 0xbe, 0x32, 0x9d, 0xae },
+	.b_public = (u8[32]){ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.expected_ss = (u8[32]){ 0xbd, 0x36, 0xa0, 0x79, 0x0e, 0xb8, 0x83, 0x09,
+		    0x8c, 0x98, 0x8b, 0x21, 0x78, 0x67, 0x73, 0xde,
+		    0x0b, 0x3a, 0x4d, 0xf1, 0x62, 0x28, 0x2c, 0xf1,
+		    0x10, 0xde, 0x18, 0xdd, 0x48, 0x4c, 0xe7, 0x4b },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x28, 0x87, 0x96, 0xbc, 0x5a, 0xff, 0x4b, 0x81,
+		     0xa3, 0x75, 0x01, 0x75, 0x7b, 0xc0, 0x75, 0x3a,
+		     0x3c, 0x21, 0x96, 0x47, 0x90, 0xd3, 0x86, 0x99,
+		     0x30, 0x8d, 0xeb, 0xc1, 0x7a, 0x6e, 0xaf, 0x8d },
+	.b_public = (u8[32]){ 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.expected_ss = (u8[32]){ 0xb4, 0xe0, 0xdd, 0x76, 0xda, 0x7b, 0x07, 0x17,
+		    0x28, 0xb6, 0x1f, 0x85, 0x67, 0x71, 0xaa, 0x35,
+		    0x6e, 0x57, 0xed, 0xa7, 0x8a, 0x5b, 0x16, 0x55,
+		    0xcc, 0x38, 0x20, 0xfb, 0x5f, 0x85, 0x4c, 0x5c },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x98, 0xdf, 0x84, 0x5f, 0x66, 0x51, 0xbf, 0x11,
+		     0x38, 0x22, 0x1f, 0x11, 0x90, 0x41, 0xf7, 0x2b,
+		     0x6d, 0xbc, 0x3c, 0x4a, 0xce, 0x71, 0x43, 0xd9,
+		     0x9f, 0xd5, 0x5a, 0xd8, 0x67, 0x48, 0x0d, 0xa8 },
+	.b_public = (u8[32]){ 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.expected_ss = (u8[32]){ 0x6f, 0xdf, 0x6c, 0x37, 0x61, 0x1d, 0xbd, 0x53,
+		    0x04, 0xdc, 0x0f, 0x2e, 0xb7, 0xc9, 0x51, 0x7e,
+		    0xb3, 0xc5, 0x0e, 0x12, 0xfd, 0x05, 0x0a, 0xc6,
+		    0xde, 0xc2, 0x70, 0x71, 0xd4, 0xbf, 0xc0, 0x34 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0xf0, 0x94, 0x98, 0xe4, 0x6f, 0x02, 0xf8, 0x78,
+		     0x82, 0x9e, 0x78, 0xb8, 0x03, 0xd3, 0x16, 0xa2,
+		     0xed, 0x69, 0x5d, 0x04, 0x98, 0xa0, 0x8a, 0xbd,
+		     0xf8, 0x27, 0x69, 0x30, 0xe2, 0x4e, 0xdc, 0xb0 },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.expected_ss = (u8[32]){ 0x4c, 0x8f, 0xc4, 0xb1, 0xc6, 0xab, 0x88, 0xfb,
+		    0x21, 0xf1, 0x8f, 0x6d, 0x4c, 0x81, 0x02, 0x40,
+		    0xd4, 0xe9, 0x46, 0x51, 0xba, 0x44, 0xf7, 0xa2,
+		    0xc8, 0x63, 0xce, 0xc7, 0xdc, 0x56, 0x60, 0x2d },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x18, 0x13, 0xc1, 0x0a, 0x5c, 0x7f, 0x21, 0xf9,
+		     0x6e, 0x17, 0xf2, 0x88, 0xc0, 0xcc, 0x37, 0x60,
+		     0x7c, 0x04, 0xc5, 0xf5, 0xae, 0xa2, 0xdb, 0x13,
+		     0x4f, 0x9e, 0x2f, 0xfc, 0x66, 0xbd, 0x9d, 0xb8 },
+	.b_public = (u8[32]){ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
+	.expected_ss = (u8[32]){ 0x1c, 0xd0, 0xb2, 0x82, 0x67, 0xdc, 0x54, 0x1c,
+		    0x64, 0x2d, 0x6d, 0x7d, 0xca, 0x44, 0xa8, 0xb3,
+		    0x8a, 0x63, 0x73, 0x6e, 0xef, 0x5c, 0x4e, 0x65,
+		    0x01, 0xff, 0xbb, 0xb1, 0x78, 0x0c, 0x03, 0x3c },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x78, 0x57, 0xfb, 0x80, 0x86, 0x53, 0x64, 0x5a,
+		     0x0b, 0xeb, 0x13, 0x8a, 0x64, 0xf5, 0xf4, 0xd7,
+		     0x33, 0xa4, 0x5e, 0xa8, 0x4c, 0x3c, 0xda, 0x11,
+		     0xa9, 0xc0, 0x6f, 0x7e, 0x71, 0x39, 0x14, 0x9e },
+	.b_public = (u8[32]){ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
+	.expected_ss = (u8[32]){ 0x87, 0x55, 0xbe, 0x01, 0xc6, 0x0a, 0x7e, 0x82,
+		    0x5c, 0xff, 0x3e, 0x0e, 0x78, 0xcb, 0x3a, 0xa4,
+		    0x33, 0x38, 0x61, 0x51, 0x6a, 0xa5, 0x9b, 0x1c,
+		    0x51, 0xa8, 0xb2, 0xa5, 0x43, 0xdf, 0xa8, 0x22 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0xe0, 0x3a, 0xa8, 0x42, 0xe2, 0xab, 0xc5, 0x6e,
+		     0x81, 0xe8, 0x7b, 0x8b, 0x9f, 0x41, 0x7b, 0x2a,
+		     0x1e, 0x59, 0x13, 0xc7, 0x23, 0xee, 0xd2, 0x8d,
+		     0x75, 0x2f, 0x8d, 0x47, 0xa5, 0x9f, 0x49, 0x8f },
+	.b_public = (u8[32]){ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
+	.expected_ss = (u8[32]){ 0x54, 0xc9, 0xa1, 0xed, 0x95, 0xe5, 0x46, 0xd2,
+		    0x78, 0x22, 0xa3, 0x60, 0x93, 0x1d, 0xda, 0x60,
+		    0xa1, 0xdf, 0x04, 0x9d, 0xa6, 0xf9, 0x04, 0x25,
+		    0x3c, 0x06, 0x12, 0xbb, 0xdc, 0x08, 0x74, 0x76 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0xf8, 0xf7, 0x07, 0xb7, 0x99, 0x9b, 0x18, 0xcb,
+		     0x0d, 0x6b, 0x96, 0x12, 0x4f, 0x20, 0x45, 0x97,
+		     0x2c, 0xa2, 0x74, 0xbf, 0xc1, 0x54, 0xad, 0x0c,
+		     0x87, 0x03, 0x8c, 0x24, 0xc6, 0xd0, 0xd4, 0xb2 },
+	.b_public = (u8[32]){ 0xda, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0xcc, 0x1f, 0x40, 0xd7, 0x43, 0xcd, 0xc2, 0x23,
+		    0x0e, 0x10, 0x43, 0xda, 0xba, 0x8b, 0x75, 0xe8,
+		    0x10, 0xf1, 0xfb, 0xab, 0x7f, 0x25, 0x52, 0x69,
+		    0xbd, 0x9e, 0xbb, 0x29, 0xe6, 0xbf, 0x49, 0x4f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0xa0, 0x34, 0xf6, 0x84, 0xfa, 0x63, 0x1e, 0x1a,
+		     0x34, 0x81, 0x18, 0xc1, 0xce, 0x4c, 0x98, 0x23,
+		     0x1f, 0x2d, 0x9e, 0xec, 0x9b, 0xa5, 0x36, 0x5b,
+		     0x4a, 0x05, 0xd6, 0x9a, 0x78, 0x5b, 0x07, 0x96 },
+	.b_public = (u8[32]){ 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0x54, 0x99, 0x8e, 0xe4, 0x3a, 0x5b, 0x00, 0x7b,
+		    0xf4, 0x99, 0xf0, 0x78, 0xe7, 0x36, 0x52, 0x44,
+		    0x00, 0xa8, 0xb5, 0xc7, 0xe9, 0xb9, 0xb4, 0x37,
+		    0x71, 0x74, 0x8c, 0x7c, 0xdf, 0x88, 0x04, 0x12 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x30, 0xb6, 0xc6, 0xa0, 0xf2, 0xff, 0xa6, 0x80,
+		     0x76, 0x8f, 0x99, 0x2b, 0xa8, 0x9e, 0x15, 0x2d,
+		     0x5b, 0xc9, 0x89, 0x3d, 0x38, 0xc9, 0x11, 0x9b,
+		     0xe4, 0xf7, 0x67, 0xbf, 0xab, 0x6e, 0x0c, 0xa5 },
+	.b_public = (u8[32]){ 0xdc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0xea, 0xd9, 0xb3, 0x8e, 0xfd, 0xd7, 0x23, 0x63,
+		    0x79, 0x34, 0xe5, 0x5a, 0xb7, 0x17, 0xa7, 0xae,
+		    0x09, 0xeb, 0x86, 0xa2, 0x1d, 0xc3, 0x6a, 0x3f,
+		    0xee, 0xb8, 0x8b, 0x75, 0x9e, 0x39, 0x1e, 0x09 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x90, 0x1b, 0x9d, 0xcf, 0x88, 0x1e, 0x01, 0xe0,
+		     0x27, 0x57, 0x50, 0x35, 0xd4, 0x0b, 0x43, 0xbd,
+		     0xc1, 0xc5, 0x24, 0x2e, 0x03, 0x08, 0x47, 0x49,
+		     0x5b, 0x0c, 0x72, 0x86, 0x46, 0x9b, 0x65, 0x91 },
+	.b_public = (u8[32]){ 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0x60, 0x2f, 0xf4, 0x07, 0x89, 0xb5, 0x4b, 0x41,
+		    0x80, 0x59, 0x15, 0xfe, 0x2a, 0x62, 0x21, 0xf0,
+		    0x7a, 0x50, 0xff, 0xc2, 0xc3, 0xfc, 0x94, 0xcf,
+		    0x61, 0xf1, 0x3d, 0x79, 0x04, 0xe8, 0x8e, 0x0e },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x80, 0x46, 0x67, 0x7c, 0x28, 0xfd, 0x82, 0xc9,
+		     0xa1, 0xbd, 0xb7, 0x1a, 0x1a, 0x1a, 0x34, 0xfa,
+		     0xba, 0x12, 0x25, 0xe2, 0x50, 0x7f, 0xe3, 0xf5,
+		     0x4d, 0x10, 0xbd, 0x5b, 0x0d, 0x86, 0x5f, 0x8e },
+	.b_public = (u8[32]){ 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0xe0, 0x0a, 0xe8, 0xb1, 0x43, 0x47, 0x12, 0x47,
+		    0xba, 0x24, 0xf1, 0x2c, 0x88, 0x55, 0x36, 0xc3,
+		    0xcb, 0x98, 0x1b, 0x58, 0xe1, 0xe5, 0x6b, 0x2b,
+		    0xaf, 0x35, 0xc1, 0x2a, 0xe1, 0xf7, 0x9c, 0x26 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x60, 0x2f, 0x7e, 0x2f, 0x68, 0xa8, 0x46, 0xb8,
+		     0x2c, 0xc2, 0x69, 0xb1, 0xd4, 0x8e, 0x93, 0x98,
+		     0x86, 0xae, 0x54, 0xfd, 0x63, 0x6c, 0x1f, 0xe0,
+		     0x74, 0xd7, 0x10, 0x12, 0x7d, 0x47, 0x24, 0x91 },
+	.b_public = (u8[32]){ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0x98, 0xcb, 0x9b, 0x50, 0xdd, 0x3f, 0xc2, 0xb0,
+		    0xd4, 0xf2, 0xd2, 0xbf, 0x7c, 0x5c, 0xfd, 0xd1,
+		    0x0c, 0x8f, 0xcd, 0x31, 0xfc, 0x40, 0xaf, 0x1a,
+		    0xd4, 0x4f, 0x47, 0xc1, 0x31, 0x37, 0x63, 0x62 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x60, 0x88, 0x7b, 0x3d, 0xc7, 0x24, 0x43, 0x02,
+		     0x6e, 0xbe, 0xdb, 0xbb, 0xb7, 0x06, 0x65, 0xf4,
+		     0x2b, 0x87, 0xad, 0xd1, 0x44, 0x0e, 0x77, 0x68,
+		     0xfb, 0xd7, 0xe8, 0xe2, 0xce, 0x5f, 0x63, 0x9d },
+	.b_public = (u8[32]){ 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0x38, 0xd6, 0x30, 0x4c, 0x4a, 0x7e, 0x6d, 0x9f,
+		    0x79, 0x59, 0x33, 0x4f, 0xb5, 0x24, 0x5b, 0xd2,
+		    0xc7, 0x54, 0x52, 0x5d, 0x4c, 0x91, 0xdb, 0x95,
+		    0x02, 0x06, 0x92, 0x62, 0x34, 0xc1, 0xf6, 0x33 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x78, 0xd3, 0x1d, 0xfa, 0x85, 0x44, 0x97, 0xd7,
+		     0x2d, 0x8d, 0xef, 0x8a, 0x1b, 0x7f, 0xb0, 0x06,
+		     0xce, 0xc2, 0xd8, 0xc4, 0x92, 0x46, 0x47, 0xc9,
+		     0x38, 0x14, 0xae, 0x56, 0xfa, 0xed, 0xa4, 0x95 },
+	.b_public = (u8[32]){ 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0x78, 0x6c, 0xd5, 0x49, 0x96, 0xf0, 0x14, 0xa5,
+		    0xa0, 0x31, 0xec, 0x14, 0xdb, 0x81, 0x2e, 0xd0,
+		    0x83, 0x55, 0x06, 0x1f, 0xdb, 0x5d, 0xe6, 0x80,
+		    0xa8, 0x00, 0xac, 0x52, 0x1f, 0x31, 0x8e, 0x23 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0xc0, 0x4c, 0x5b, 0xae, 0xfa, 0x83, 0x02, 0xdd,
+		     0xde, 0xd6, 0xa4, 0xbb, 0x95, 0x77, 0x61, 0xb4,
+		     0xeb, 0x97, 0xae, 0xfa, 0x4f, 0xc3, 0xb8, 0x04,
+		     0x30, 0x85, 0xf9, 0x6a, 0x56, 0x59, 0xb3, 0xa5 },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0x29, 0xae, 0x8b, 0xc7, 0x3e, 0x9b, 0x10, 0xa0,
+		    0x8b, 0x4f, 0x68, 0x1c, 0x43, 0xc3, 0xe0, 0xac,
+		    0x1a, 0x17, 0x1d, 0x31, 0xb3, 0x8f, 0x1a, 0x48,
+		    0xef, 0xba, 0x29, 0xae, 0x63, 0x9e, 0xa1, 0x34 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - RFC 7748 */
+{
+	.secret = (u8[32]){ 0xa0, 0x46, 0xe3, 0x6b, 0xf0, 0x52, 0x7c, 0x9d,
+		     0x3b, 0x16, 0x15, 0x4b, 0x82, 0x46, 0x5e, 0xdd,
+		     0x62, 0x14, 0x4c, 0x0a, 0xc1, 0xfc, 0x5a, 0x18,
+		     0x50, 0x6a, 0x22, 0x44, 0xba, 0x44, 0x9a, 0x44 },
+	.b_public = (u8[32]){ 0xe6, 0xdb, 0x68, 0x67, 0x58, 0x30, 0x30, 0xdb,
+		    0x35, 0x94, 0xc1, 0xa4, 0x24, 0xb1, 0x5f, 0x7c,
+		    0x72, 0x66, 0x24, 0xec, 0x26, 0xb3, 0x35, 0x3b,
+		    0x10, 0xa9, 0x03, 0xa6, 0xd0, 0xab, 0x1c, 0x4c },
+	.expected_ss = (u8[32]){ 0xc3, 0xda, 0x55, 0x37, 0x9d, 0xe9, 0xc6, 0x90,
+		    0x8e, 0x94, 0xea, 0x4d, 0xf2, 0x8d, 0x08, 0x4f,
+		    0x32, 0xec, 0xcf, 0x03, 0x49, 0x1c, 0x71, 0xf7,
+		    0x54, 0xb4, 0x07, 0x55, 0x77, 0xa2, 0x85, 0x52 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - RFC 7748 */
+{
+	.secret = (u8[32]){ 0x48, 0x66, 0xe9, 0xd4, 0xd1, 0xb4, 0x67, 0x3c,
+		     0x5a, 0xd2, 0x26, 0x91, 0x95, 0x7d, 0x6a, 0xf5,
+		     0xc1, 0x1b, 0x64, 0x21, 0xe0, 0xea, 0x01, 0xd4,
+		     0x2c, 0xa4, 0x16, 0x9e, 0x79, 0x18, 0xba, 0x4d },
+	.b_public = (u8[32]){ 0xe5, 0x21, 0x0f, 0x12, 0x78, 0x68, 0x11, 0xd3,
+		    0xf4, 0xb7, 0x95, 0x9d, 0x05, 0x38, 0xae, 0x2c,
+		    0x31, 0xdb, 0xe7, 0x10, 0x6f, 0xc0, 0x3c, 0x3e,
+		    0xfc, 0x4c, 0xd5, 0x49, 0xc7, 0x15, 0xa4, 0x13 },
+	.expected_ss = (u8[32]){ 0x95, 0xcb, 0xde, 0x94, 0x76, 0xe8, 0x90, 0x7d,
+		    0x7a, 0xad, 0xe4, 0x5c, 0xb4, 0xb8, 0x73, 0xf8,
+		    0x8b, 0x59, 0x5a, 0x68, 0x79, 0x9f, 0xa1, 0x52,
+		    0xe6, 0xf8, 0xf7, 0x64, 0x7a, 0xac, 0x79, 0x57 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x0a, 0xb4, 0xe7, 0x63, 0x80, 0xd8, 0x4d, 0xde,
+		    0x4f, 0x68, 0x33, 0xc5, 0x8f, 0x2a, 0x9f, 0xb8,
+		    0xf8, 0x3b, 0xb0, 0x16, 0x9b, 0x17, 0x2b, 0xe4,
+		    0xb6, 0xe0, 0x59, 0x28, 0x87, 0x74, 0x1a, 0x36 },
+	.expected_ss = (u8[32]){ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x89, 0xe1, 0x0d, 0x57, 0x01, 0xb4, 0x33, 0x7d,
+		    0x2d, 0x03, 0x21, 0x81, 0x53, 0x8b, 0x10, 0x64,
+		    0xbd, 0x40, 0x84, 0x40, 0x1c, 0xec, 0xa1, 0xfd,
+		    0x12, 0x66, 0x3a, 0x19, 0x59, 0x38, 0x80, 0x00 },
+	.expected_ss = (u8[32]){ 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x2b, 0x55, 0xd3, 0xaa, 0x4a, 0x8f, 0x80, 0xc8,
+		    0xc0, 0xb2, 0xae, 0x5f, 0x93, 0x3e, 0x85, 0xaf,
+		    0x49, 0xbe, 0xac, 0x36, 0xc2, 0xfa, 0x73, 0x94,
+		    0xba, 0xb7, 0x6c, 0x89, 0x33, 0xf8, 0xf8, 0x1d },
+	.expected_ss = (u8[32]){ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x63, 0xe5, 0xb1, 0xfe, 0x96, 0x01, 0xfe, 0x84,
+		    0x38, 0x5d, 0x88, 0x66, 0xb0, 0x42, 0x12, 0x62,
+		    0xf7, 0x8f, 0xbf, 0xa5, 0xaf, 0xf9, 0x58, 0x5e,
+		    0x62, 0x66, 0x79, 0xb1, 0x85, 0x47, 0xd9, 0x59 },
+	.expected_ss = (u8[32]){ 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0xe4, 0x28, 0xf3, 0xda, 0xc1, 0x78, 0x09, 0xf8,
+		    0x27, 0xa5, 0x22, 0xce, 0x32, 0x35, 0x50, 0x58,
+		    0xd0, 0x73, 0x69, 0x36, 0x4a, 0xa7, 0x89, 0x02,
+		    0xee, 0x10, 0x13, 0x9b, 0x9f, 0x9d, 0xd6, 0x53 },
+	.expected_ss = (u8[32]){ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0xb3, 0xb5, 0x0e, 0x3e, 0xd3, 0xa4, 0x07, 0xb9,
+		    0x5d, 0xe9, 0x42, 0xef, 0x74, 0x57, 0x5b, 0x5a,
+		    0xb8, 0xa1, 0x0c, 0x09, 0xee, 0x10, 0x35, 0x44,
+		    0xd6, 0x0b, 0xdf, 0xed, 0x81, 0x38, 0xab, 0x2b },
+	.expected_ss = (u8[32]){ 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x21, 0x3f, 0xff, 0xe9, 0x3d, 0x5e, 0xa8, 0xcd,
+		    0x24, 0x2e, 0x46, 0x28, 0x44, 0x02, 0x99, 0x22,
+		    0xc4, 0x3c, 0x77, 0xc9, 0xe3, 0xe4, 0x2f, 0x56,
+		    0x2f, 0x48, 0x5d, 0x24, 0xc5, 0x01, 0xa2, 0x0b },
+	.expected_ss = (u8[32]){ 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x91, 0xb2, 0x32, 0xa1, 0x78, 0xb3, 0xcd, 0x53,
+		    0x09, 0x32, 0x44, 0x1e, 0x61, 0x39, 0x41, 0x8f,
+		    0x72, 0x17, 0x22, 0x92, 0xf1, 0xda, 0x4c, 0x18,
+		    0x34, 0xfc, 0x5e, 0xbf, 0xef, 0xb5, 0x1e, 0x3f },
+	.expected_ss = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x04, 0x5c, 0x6e, 0x11, 0xc5, 0xd3, 0x32, 0x55,
+		    0x6c, 0x78, 0x22, 0xfe, 0x94, 0xeb, 0xf8, 0x9b,
+		    0x56, 0xa3, 0x87, 0x8d, 0xc2, 0x7c, 0xa0, 0x79,
+		    0x10, 0x30, 0x58, 0x84, 0x9f, 0xab, 0xcb, 0x4f },
+	.expected_ss = (u8[32]){ 0xe5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x1c, 0xa2, 0x19, 0x0b, 0x71, 0x16, 0x35, 0x39,
+		    0x06, 0x3c, 0x35, 0x77, 0x3b, 0xda, 0x0c, 0x9c,
+		    0x92, 0x8e, 0x91, 0x36, 0xf0, 0x62, 0x0a, 0xeb,
+		    0x09, 0x3f, 0x09, 0x91, 0x97, 0xb7, 0xf7, 0x4e },
+	.expected_ss = (u8[32]){ 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0xf7, 0x6e, 0x90, 0x10, 0xac, 0x33, 0xc5, 0x04,
+		    0x3b, 0x2d, 0x3b, 0x76, 0xa8, 0x42, 0x17, 0x10,
+		    0x00, 0xc4, 0x91, 0x62, 0x22, 0xe9, 0xe8, 0x58,
+		    0x97, 0xa0, 0xae, 0xc7, 0xf6, 0x35, 0x0b, 0x3c },
+	.expected_ss = (u8[32]){ 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0xbb, 0x72, 0x68, 0x8d, 0x8f, 0x8a, 0xa7, 0xa3,
+		    0x9c, 0xd6, 0x06, 0x0c, 0xd5, 0xc8, 0x09, 0x3c,
+		    0xde, 0xc6, 0xfe, 0x34, 0x19, 0x37, 0xc3, 0x88,
+		    0x6a, 0x99, 0x34, 0x6c, 0xd0, 0x7f, 0xaa, 0x55 },
+	.expected_ss = (u8[32]){ 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x88, 0xfd, 0xde, 0xa1, 0x93, 0x39, 0x1c, 0x6a,
+		    0x59, 0x33, 0xef, 0x9b, 0x71, 0x90, 0x15, 0x49,
+		    0x44, 0x72, 0x05, 0xaa, 0xe9, 0xda, 0x92, 0x8a,
+		    0x6b, 0x91, 0xa3, 0x52, 0xba, 0x10, 0xf4, 0x1f },
+	.expected_ss = (u8[32]){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x30, 0x3b, 0x39, 0x2f, 0x15, 0x31, 0x16, 0xca,
+		    0xd9, 0xcc, 0x68, 0x2a, 0x00, 0xcc, 0xc4, 0x4c,
+		    0x95, 0xff, 0x0d, 0x3b, 0xbe, 0x56, 0x8b, 0xeb,
+		    0x6c, 0x4e, 0x73, 0x9b, 0xaf, 0xdc, 0x2c, 0x68 },
+	.expected_ss = (u8[32]){ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - checking for overflow */
+{
+	.secret = (u8[32]){ 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+		     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+		     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+		     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+	.b_public = (u8[32]){ 0xfd, 0x30, 0x0a, 0xeb, 0x40, 0xe1, 0xfa, 0x58,
+		    0x25, 0x18, 0x41, 0x2b, 0x49, 0xb2, 0x08, 0xa7,
+		    0x84, 0x2b, 0x1e, 0x1f, 0x05, 0x6a, 0x04, 0x01,
+		    0x78, 0xea, 0x41, 0x41, 0x53, 0x4f, 0x65, 0x2d },
+	.expected_ss = (u8[32]){ 0xb7, 0x34, 0x10, 0x5d, 0xc2, 0x57, 0x58, 0x5d,
+		    0x73, 0xb5, 0x66, 0xcc, 0xb7, 0x6f, 0x06, 0x27,
+		    0x95, 0xcc, 0xbe, 0xc8, 0x91, 0x28, 0xe5, 0x2b,
+		    0x02, 0xf3, 0xe5, 0x96, 0x39, 0xf1, 0x3c, 0x46 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - checking for overflow */
+{
+	.secret = (u8[32]){ 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+		     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+		     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+		     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+	.b_public = (u8[32]){ 0xc8, 0xef, 0x79, 0xb5, 0x14, 0xd7, 0x68, 0x26,
+		    0x77, 0xbc, 0x79, 0x31, 0xe0, 0x6e, 0xe5, 0xc2,
+		    0x7c, 0x9b, 0x39, 0x2b, 0x4a, 0xe9, 0x48, 0x44,
+		    0x73, 0xf5, 0x54, 0xe6, 0x67, 0x8e, 0xcc, 0x2e },
+	.expected_ss = (u8[32]){ 0x64, 0x7a, 0x46, 0xb6, 0xfc, 0x3f, 0x40, 0xd6,
+		    0x21, 0x41, 0xee, 0x3c, 0xee, 0x70, 0x6b, 0x4d,
+		    0x7a, 0x92, 0x71, 0x59, 0x3a, 0x7b, 0x14, 0x3e,
+		    0x8e, 0x2e, 0x22, 0x79, 0x88, 0x3e, 0x45, 0x50 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - checking for overflow */
+{
+	.secret = (u8[32]){ 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+		     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+		     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+		     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+	.b_public = (u8[32]){ 0x64, 0xae, 0xac, 0x25, 0x04, 0x14, 0x48, 0x61,
+		    0x53, 0x2b, 0x7b, 0xbc, 0xb6, 0xc8, 0x7d, 0x67,
+		    0xdd, 0x4c, 0x1f, 0x07, 0xeb, 0xc2, 0xe0, 0x6e,
+		    0xff, 0xb9, 0x5a, 0xec, 0xc6, 0x17, 0x0b, 0x2c },
+	.expected_ss = (u8[32]){ 0x4f, 0xf0, 0x3d, 0x5f, 0xb4, 0x3c, 0xd8, 0x65,
+		    0x7a, 0x3c, 0xf3, 0x7c, 0x13, 0x8c, 0xad, 0xce,
+		    0xcc, 0xe5, 0x09, 0xe4, 0xeb, 0xa0, 0x89, 0xd0,
+		    0xef, 0x40, 0xb4, 0xe4, 0xfb, 0x94, 0x61, 0x55 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - checking for overflow */
+{
+	.secret = (u8[32]){ 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+		     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+		     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+		     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+	.b_public = (u8[32]){ 0xbf, 0x68, 0xe3, 0x5e, 0x9b, 0xdb, 0x7e, 0xee,
+		    0x1b, 0x50, 0x57, 0x02, 0x21, 0x86, 0x0f, 0x5d,
+		    0xcd, 0xad, 0x8a, 0xcb, 0xab, 0x03, 0x1b, 0x14,
+		    0x97, 0x4c, 0xc4, 0x90, 0x13, 0xc4, 0x98, 0x31 },
+	.expected_ss = (u8[32]){ 0x21, 0xce, 0xe5, 0x2e, 0xfd, 0xbc, 0x81, 0x2e,
+		    0x1d, 0x02, 0x1a, 0x4a, 0xf1, 0xe1, 0xd8, 0xbc,
+		    0x4d, 0xb3, 0xc4, 0x00, 0xe4, 0xd2, 0xa2, 0xc5,
+		    0x6a, 0x39, 0x26, 0xdb, 0x4d, 0x99, 0xc6, 0x5b },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - checking for overflow */
+{
+	.secret = (u8[32]){ 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+		     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+		     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+		     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+	.b_public = (u8[32]){ 0x53, 0x47, 0xc4, 0x91, 0x33, 0x1a, 0x64, 0xb4,
+		    0x3d, 0xdc, 0x68, 0x30, 0x34, 0xe6, 0x77, 0xf5,
+		    0x3d, 0xc3, 0x2b, 0x52, 0xa5, 0x2a, 0x57, 0x7c,
+		    0x15, 0xa8, 0x3b, 0xf2, 0x98, 0xe9, 0x9f, 0x19 },
+	.expected_ss = (u8[32]){ 0x18, 0xcb, 0x89, 0xe4, 0xe2, 0x0c, 0x0c, 0x2b,
+		    0xd3, 0x24, 0x30, 0x52, 0x45, 0x26, 0x6c, 0x93,
+		    0x27, 0x69, 0x0b, 0xbe, 0x79, 0xac, 0xb8, 0x8f,
+		    0x5b, 0x8f, 0xb3, 0xf7, 0x4e, 0xca, 0x3e, 0x52 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - private key == -1 (mod order) */
+{
+	.secret = (u8[32]){ 0xa0, 0x23, 0xcd, 0xd0, 0x83, 0xef, 0x5b, 0xb8,
+		     0x2f, 0x10, 0xd6, 0x2e, 0x59, 0xe1, 0x5a, 0x68,
+		     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50 },
+	.b_public = (u8[32]){ 0x25, 0x8e, 0x04, 0x52, 0x3b, 0x8d, 0x25, 0x3e,
+		    0xe6, 0x57, 0x19, 0xfc, 0x69, 0x06, 0xc6, 0x57,
+		    0x19, 0x2d, 0x80, 0x71, 0x7e, 0xdc, 0x82, 0x8f,
+		    0xa0, 0xaf, 0x21, 0x68, 0x6e, 0x2f, 0xaa, 0x75 },
+	.expected_ss = (u8[32]){ 0x25, 0x8e, 0x04, 0x52, 0x3b, 0x8d, 0x25, 0x3e,
+		    0xe6, 0x57, 0x19, 0xfc, 0x69, 0x06, 0xc6, 0x57,
+		    0x19, 0x2d, 0x80, 0x71, 0x7e, 0xdc, 0x82, 0x8f,
+		    0xa0, 0xaf, 0x21, 0x68, 0x6e, 0x2f, 0xaa, 0x75 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - private key == 1 (mod order) on twist */
+{
+	.secret = (u8[32]){ 0x58, 0x08, 0x3d, 0xd2, 0x61, 0xad, 0x91, 0xef,
+		     0xf9, 0x52, 0x32, 0x2e, 0xc8, 0x24, 0xc6, 0x82,
+		     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f },
+	.b_public = (u8[32]){ 0x2e, 0xae, 0x5e, 0xc3, 0xdd, 0x49, 0x4e, 0x9f,
+		    0x2d, 0x37, 0xd2, 0x58, 0xf8, 0x73, 0xa8, 0xe6,
+		    0xe9, 0xd0, 0xdb, 0xd1, 0xe3, 0x83, 0xef, 0x64,
+		    0xd9, 0x8b, 0xb9, 0x1b, 0x3e, 0x0b, 0xe0, 0x35 },
+	.expected_ss = (u8[32]){ 0x2e, 0xae, 0x5e, 0xc3, 0xdd, 0x49, 0x4e, 0x9f,
+		    0x2d, 0x37, 0xd2, 0x58, 0xf8, 0x73, 0xa8, 0xe6,
+		    0xe9, 0xd0, 0xdb, 0xd1, 0xe3, 0x83, 0xef, 0x64,
+		    0xd9, 0x8b, 0xb9, 0x1b, 0x3e, 0x0b, 0xe0, 0x35 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+}
+};
+
 static const struct kpp_testvec ecdh_tv_template[] = {
 	{
 #ifndef CONFIG_CRYPTO_FIPS
@@ -31567,4 +32792,528 @@ static const struct aead_testvec essiv_hmac_sha256_aes_cbc_tv_temp[] = {
 	},
 };
 
+static const char blake2_ordered_sequence[] =
+	"\x00\x01\x02\x03\x04\x05\x06\x07"
+	"\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
+	"\x10\x11\x12\x13\x14\x15\x16\x17"
+	"\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
+	"\x20\x21\x22\x23\x24\x25\x26\x27"
+	"\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
+	"\x30\x31\x32\x33\x34\x35\x36\x37"
+	"\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
+	"\x40\x41\x42\x43\x44\x45\x46\x47"
+	"\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
+	"\x50\x51\x52\x53\x54\x55\x56\x57"
+	"\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
+	"\x60\x61\x62\x63\x64\x65\x66\x67"
+	"\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
+	"\x70\x71\x72\x73\x74\x75\x76\x77"
+	"\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
+	"\x80\x81\x82\x83\x84\x85\x86\x87"
+	"\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+	"\x90\x91\x92\x93\x94\x95\x96\x97"
+	"\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+	"\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
+	"\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
+	"\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
+	"\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
+	"\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
+	"\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
+	"\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7"
+	"\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
+	"\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7"
+	"\xe8\xe9\xea\xeb\xec\xed\xee\xef"
+	"\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
+	"\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff";
+
+static const struct hash_testvec blake2b_160_tv_template[] = {{
+	.digest = (u8[]){ 0x33, 0x45, 0x52, 0x4a, 0xbf, 0x6b, 0xbe, 0x18,
+			  0x09, 0x44, 0x92, 0x24, 0xb5, 0x97, 0x2c, 0x41,
+			  0x79, 0x0b, 0x6c, 0xf2, },
+}, {
+	.plaintext = blake2_ordered_sequence,
+	.psize = 64,
+	.digest = (u8[]){ 0x11, 0xcc, 0x66, 0x61, 0xe9, 0x22, 0xb0, 0xe4,
+			  0x07, 0xe0, 0xa5, 0x72, 0x49, 0xc3, 0x8d, 0x4f,
+			  0xf7, 0x6d, 0x8e, 0xc8, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 1,
+	.digest = (u8[]){ 0x31, 0xe3, 0xd9, 0xd5, 0x4e, 0x72, 0xd8, 0x0b,
+			  0x2b, 0x3b, 0xd7, 0x6b, 0x82, 0x7a, 0x1d, 0xfb,
+			  0x56, 0x2f, 0x79, 0x4c, },
+}, {
+	.ksize = 64,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 7,
+	.digest = (u8[]){ 0x28, 0x20, 0xd1, 0xbe, 0x7f, 0xcc, 0xc1, 0x62,
+			  0xd9, 0x0d, 0x9a, 0x4b, 0x47, 0xd1, 0x5e, 0x04,
+			  0x74, 0x2a, 0x53, 0x17, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 15,
+	.digest = (u8[]){ 0x45, 0xe9, 0x95, 0xb6, 0xc4, 0xe8, 0x22, 0xea,
+			  0xfe, 0xd2, 0x37, 0xdb, 0x46, 0xbf, 0xf1, 0x25,
+			  0xd5, 0x03, 0x1d, 0x81, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 247,
+	.digest = (u8[]){ 0x7e, 0xb9, 0xf2, 0x9b, 0x2f, 0xc2, 0x01, 0xd4,
+			  0xb0, 0x4f, 0x08, 0x2b, 0x8e, 0xbd, 0x06, 0xef,
+			  0x1c, 0xc4, 0x25, 0x95, },
+}, {
+	.ksize = 64,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 256,
+	.digest = (u8[]){ 0x6e, 0x35, 0x01, 0x70, 0xbf, 0xb6, 0xc4, 0xba,
+			  0x33, 0x1b, 0xa6, 0xd3, 0xc2, 0x5d, 0xb4, 0x03,
+			  0x95, 0xaf, 0x29, 0x16, },
+}};
+
+static const struct hash_testvec blake2b_256_tv_template[] = {{
+	.plaintext = blake2_ordered_sequence,
+	.psize = 7,
+	.digest = (u8[]){ 0x9d, 0xf1, 0x4b, 0x72, 0x48, 0x76, 0x4a, 0x86,
+			  0x91, 0x97, 0xc3, 0x5e, 0x39, 0x2d, 0x2a, 0x6d,
+			  0x6f, 0xdc, 0x5b, 0x79, 0xd5, 0x97, 0x29, 0x79,
+			  0x20, 0xfd, 0x3f, 0x14, 0x91, 0xb4, 0x42, 0xd2, },
+}, {
+	.plaintext = blake2_ordered_sequence,
+	.psize = 256,
+	.digest = (u8[]){ 0x39, 0xa7, 0xeb, 0x9f, 0xed, 0xc1, 0x9a, 0xab,
+			  0xc8, 0x34, 0x25, 0xc6, 0x75, 0x5d, 0xd9, 0x0e,
+			  0x6f, 0x9d, 0x0c, 0x80, 0x49, 0x64, 0xa1, 0xf4,
+			  0xaa, 0xee, 0xa3, 0xb9, 0xfb, 0x59, 0x98, 0x35, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.digest = (u8[]){ 0xc3, 0x08, 0xb1, 0xbf, 0xe4, 0xf9, 0xbc, 0xb4,
+			  0x75, 0xaf, 0x3f, 0x59, 0x6e, 0xae, 0xde, 0x6a,
+			  0xa3, 0x8e, 0xb5, 0x94, 0xad, 0x30, 0xf0, 0x17,
+			  0x1c, 0xfb, 0xd8, 0x3e, 0x8a, 0xbe, 0xed, 0x9c, },
+}, {
+	.ksize = 64,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 1,
+	.digest = (u8[]){ 0x34, 0x75, 0x8b, 0x64, 0x71, 0x35, 0x62, 0x82,
+			  0x97, 0xfb, 0x09, 0xc7, 0x93, 0x0c, 0xd0, 0x4e,
+			  0x95, 0x28, 0xe5, 0x66, 0x91, 0x12, 0xf5, 0xb1,
+			  0x31, 0x84, 0x93, 0xe1, 0x4d, 0xe7, 0x7e, 0x55, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 15,
+	.digest = (u8[]){ 0xce, 0x74, 0xa9, 0x2e, 0xe9, 0x40, 0x3d, 0xa2,
+			  0x11, 0x4a, 0x99, 0x25, 0x7a, 0x34, 0x5d, 0x35,
+			  0xdf, 0x6a, 0x48, 0x79, 0x2a, 0x93, 0x93, 0xff,
+			  0x1f, 0x3c, 0x39, 0xd0, 0x71, 0x1f, 0x20, 0x7b, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 64,
+	.digest = (u8[]){ 0x2e, 0x84, 0xdb, 0xa2, 0x5f, 0x0e, 0xe9, 0x52,
+			  0x79, 0x50, 0x69, 0x9f, 0xf1, 0xfd, 0xfc, 0x9d,
+			  0x89, 0x83, 0xa9, 0xb6, 0xa4, 0xd5, 0xfa, 0xb5,
+			  0xbe, 0x35, 0x1a, 0x17, 0x8a, 0x2c, 0x7f, 0x7d, },
+}, {
+	.ksize = 64,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 247,
+	.digest = (u8[]){ 0x2e, 0x26, 0xf0, 0x09, 0x02, 0x65, 0x90, 0x09,
+			  0xcc, 0xf5, 0x4c, 0x44, 0x74, 0x0e, 0xa0, 0xa8,
+			  0x25, 0x4a, 0xda, 0x61, 0x56, 0x95, 0x7d, 0x3f,
+			  0x6d, 0xc0, 0x43, 0x17, 0x95, 0x89, 0xcd, 0x9d, },
+}};
+
+static const struct hash_testvec blake2b_384_tv_template[] = {{
+	.plaintext = blake2_ordered_sequence,
+	.psize = 1,
+	.digest = (u8[]){ 0xcc, 0x01, 0x08, 0x85, 0x36, 0xf7, 0x84, 0xf0,
+			  0xbb, 0x76, 0x9e, 0x41, 0xc4, 0x95, 0x7b, 0x6d,
+			  0x0c, 0xde, 0x1f, 0xcc, 0x8c, 0xf1, 0xd9, 0x1f,
+			  0xc4, 0x77, 0xd4, 0xdd, 0x6e, 0x3f, 0xbf, 0xcd,
+			  0x43, 0xd1, 0x69, 0x8d, 0x14, 0x6f, 0x34, 0x8b,
+			  0x2c, 0x36, 0xa3, 0x39, 0x68, 0x2b, 0xec, 0x3f, },
+}, {
+	.plaintext = blake2_ordered_sequence,
+	.psize = 247,
+	.digest = (u8[]){ 0xc8, 0xf8, 0xf0, 0xa2, 0x69, 0xfa, 0xcc, 0x4d,
+			  0x32, 0x5f, 0x13, 0x88, 0xca, 0x71, 0x99, 0x8f,
+			  0xf7, 0x30, 0x41, 0x5d, 0x6e, 0x34, 0xb7, 0x6e,
+			  0x3e, 0xd0, 0x46, 0xb6, 0xca, 0x30, 0x66, 0xb2,
+			  0x6f, 0x0c, 0x35, 0x54, 0x17, 0xcd, 0x26, 0x1b,
+			  0xef, 0x48, 0x98, 0xe0, 0x56, 0x7c, 0x05, 0xd2, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.digest = (u8[]){ 0x15, 0x09, 0x7a, 0x90, 0x13, 0x23, 0xab, 0x0c,
+			  0x0b, 0x43, 0x21, 0x9a, 0xb5, 0xc6, 0x0c, 0x2e,
+			  0x7c, 0x57, 0xfc, 0xcc, 0x4b, 0x0f, 0xf0, 0x57,
+			  0xb7, 0x9c, 0xe7, 0x0f, 0xe1, 0x57, 0xac, 0x37,
+			  0x77, 0xd4, 0xf4, 0x2f, 0x03, 0x3b, 0x64, 0x09,
+			  0x84, 0xa0, 0xb3, 0x24, 0xb7, 0xae, 0x47, 0x5e, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 7,
+	.digest = (u8[]){ 0x0b, 0x82, 0x88, 0xca, 0x05, 0x2f, 0x1b, 0x15,
+			  0xdc, 0xbb, 0x22, 0x27, 0x11, 0x6b, 0xf4, 0xd1,
+			  0xe9, 0x8f, 0x1b, 0x0b, 0x58, 0x3f, 0x5e, 0x86,
+			  0x80, 0x82, 0x6f, 0x8e, 0x54, 0xc1, 0x9f, 0x12,
+			  0xcf, 0xe9, 0x56, 0xc1, 0xfc, 0x1a, 0x08, 0xb9,
+			  0x4a, 0x57, 0x0a, 0x76, 0x3c, 0x15, 0x33, 0x18, },
+}, {
+	.ksize = 64,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 15,
+	.digest = (u8[]){ 0x4a, 0x81, 0x55, 0xb9, 0x79, 0x42, 0x8c, 0xc6,
+			  0x4f, 0xfe, 0xca, 0x82, 0x3b, 0xb2, 0xf7, 0xbc,
+			  0x5e, 0xfc, 0xab, 0x09, 0x1c, 0xd6, 0x3b, 0xe1,
+			  0x50, 0x82, 0x3b, 0xde, 0xc7, 0x06, 0xee, 0x3b,
+			  0x29, 0xce, 0xe5, 0x68, 0xe0, 0xff, 0xfa, 0xe1,
+			  0x7a, 0xf1, 0xc0, 0xfe, 0x57, 0xf4, 0x60, 0x49, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 64,
+	.digest = (u8[]){ 0x34, 0xbd, 0xe1, 0x99, 0x43, 0x9f, 0x82, 0x72,
+			  0xe7, 0xed, 0x94, 0x9e, 0xe1, 0x84, 0xee, 0x82,
+			  0xfd, 0x26, 0x23, 0xc4, 0x17, 0x8d, 0xf5, 0x04,
+			  0xeb, 0xb7, 0xbc, 0xb8, 0xf3, 0x68, 0xb7, 0xad,
+			  0x94, 0x8e, 0x05, 0x3f, 0x8a, 0x5d, 0x8d, 0x81,
+			  0x3e, 0x88, 0xa7, 0x8c, 0xa2, 0xd5, 0xdc, 0x76, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 256,
+	.digest = (u8[]){ 0x22, 0x14, 0xf4, 0xb0, 0x4c, 0xa8, 0xb5, 0x7d,
+			  0xa7, 0x5c, 0x04, 0xeb, 0xd8, 0x8d, 0x04, 0x71,
+			  0xc7, 0x3c, 0xc7, 0x6e, 0x8b, 0x20, 0x36, 0x40,
+			  0x9d, 0xd0, 0x60, 0xc6, 0xe3, 0x0b, 0x6e, 0x50,
+			  0xf5, 0xaf, 0xf5, 0xc6, 0x3b, 0xe3, 0x84, 0x6a,
+			  0x93, 0x1b, 0x12, 0xd6, 0x18, 0x27, 0xba, 0x36, },
+}};
+
+static const struct hash_testvec blake2b_512_tv_template[] = {{
+	.plaintext = blake2_ordered_sequence,
+	.psize = 15,
+	.digest = (u8[]){ 0x44, 0x4b, 0x24, 0x0f, 0xe3, 0xed, 0x86, 0xd0,
+			  0xe2, 0xef, 0x4c, 0xe7, 0xd8, 0x51, 0xed, 0xde,
+			  0x22, 0x15, 0x55, 0x82, 0xaa, 0x09, 0x14, 0x79,
+			  0x7b, 0x72, 0x6c, 0xd0, 0x58, 0xb6, 0xf4, 0x59,
+			  0x32, 0xe0, 0xe1, 0x29, 0x51, 0x68, 0x76, 0x52,
+			  0x7b, 0x1d, 0xd8, 0x8f, 0xc6, 0x6d, 0x71, 0x19,
+			  0xf4, 0xab, 0x3b, 0xed, 0x93, 0xa6, 0x1a, 0x0e,
+			  0x2d, 0x2d, 0x2a, 0xea, 0xc3, 0x36, 0xd9, 0x58, },
+}, {
+	.ksize = 64,
+	.key = blake2_ordered_sequence,
+	.digest = (u8[]){ 0x10, 0xeb, 0xb6, 0x77, 0x00, 0xb1, 0x86, 0x8e,
+			  0xfb, 0x44, 0x17, 0x98, 0x7a, 0xcf, 0x46, 0x90,
+			  0xae, 0x9d, 0x97, 0x2f, 0xb7, 0xa5, 0x90, 0xc2,
+			  0xf0, 0x28, 0x71, 0x79, 0x9a, 0xaa, 0x47, 0x86,
+			  0xb5, 0xe9, 0x96, 0xe8, 0xf0, 0xf4, 0xeb, 0x98,
+			  0x1f, 0xc2, 0x14, 0xb0, 0x05, 0xf4, 0x2d, 0x2f,
+			  0xf4, 0x23, 0x34, 0x99, 0x39, 0x16, 0x53, 0xdf,
+			  0x7a, 0xef, 0xcb, 0xc1, 0x3f, 0xc5, 0x15, 0x68, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 1,
+	.digest = (u8[]){ 0xd2, 0x11, 0x31, 0x29, 0x3f, 0xea, 0xca, 0x72,
+			  0x21, 0xe4, 0x06, 0x65, 0x05, 0x2a, 0xd1, 0x02,
+			  0xc0, 0x8d, 0x7b, 0xf1, 0x09, 0x3c, 0xef, 0x88,
+			  0xe1, 0x68, 0x0c, 0xf1, 0x3b, 0xa4, 0xe3, 0x03,
+			  0xed, 0xa0, 0xe3, 0x60, 0x58, 0xa0, 0xdb, 0x52,
+			  0x8a, 0x66, 0x43, 0x09, 0x60, 0x1a, 0xbb, 0x67,
+			  0xc5, 0x84, 0x31, 0x40, 0xfa, 0xde, 0xc1, 0xd0,
+			  0xff, 0x3f, 0x4a, 0x69, 0xd9, 0x92, 0x26, 0x86, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 7,
+	.digest = (u8[]){ 0xa3, 0x3e, 0x50, 0xbc, 0xfb, 0xd9, 0xf0, 0x82,
+			  0xa6, 0xd1, 0xdf, 0xaf, 0x82, 0xd0, 0xcf, 0x84,
+			  0x9a, 0x25, 0x3c, 0xae, 0x6d, 0xb5, 0xaf, 0x01,
+			  0xd7, 0xaf, 0xed, 0x50, 0xdc, 0xe2, 0xba, 0xcc,
+			  0x8c, 0x38, 0xf5, 0x16, 0x89, 0x38, 0x86, 0xce,
+			  0x68, 0x10, 0x63, 0x64, 0xa5, 0x79, 0x53, 0xb5,
+			  0x2e, 0x8e, 0xbc, 0x0a, 0xce, 0x95, 0xc0, 0x1e,
+			  0x69, 0x59, 0x1d, 0x3b, 0xd8, 0x19, 0x90, 0xd7, },
+}, {
+	.ksize = 64,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 64,
+	.digest = (u8[]){ 0x65, 0x67, 0x6d, 0x80, 0x06, 0x17, 0x97, 0x2f,
+			  0xbd, 0x87, 0xe4, 0xb9, 0x51, 0x4e, 0x1c, 0x67,
+			  0x40, 0x2b, 0x7a, 0x33, 0x10, 0x96, 0xd3, 0xbf,
+			  0xac, 0x22, 0xf1, 0xab, 0xb9, 0x53, 0x74, 0xab,
+			  0xc9, 0x42, 0xf1, 0x6e, 0x9a, 0xb0, 0xea, 0xd3,
+			  0x3b, 0x87, 0xc9, 0x19, 0x68, 0xa6, 0xe5, 0x09,
+			  0xe1, 0x19, 0xff, 0x07, 0x78, 0x7b, 0x3e, 0xf4,
+			  0x83, 0xe1, 0xdc, 0xdc, 0xcf, 0x6e, 0x30, 0x22, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 247,
+	.digest = (u8[]){ 0xc2, 0x96, 0x2c, 0x6b, 0x84, 0xff, 0xee, 0xea,
+			  0x9b, 0xb8, 0x55, 0x2d, 0x6b, 0xa5, 0xd5, 0xe5,
+			  0xbd, 0xb1, 0x54, 0xb6, 0x1e, 0xfb, 0x63, 0x16,
+			  0x6e, 0x22, 0x04, 0xf0, 0x82, 0x7a, 0xc6, 0x99,
+			  0xf7, 0x4c, 0xff, 0x93, 0x71, 0x57, 0x64, 0xd0,
+			  0x08, 0x60, 0x39, 0x98, 0xb8, 0xd2, 0x2b, 0x4e,
+			  0x81, 0x8d, 0xe4, 0x8f, 0xb2, 0x1e, 0x8f, 0x99,
+			  0x98, 0xf1, 0x02, 0x9b, 0x4c, 0x7c, 0x97, 0x1a, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 256,
+	.digest = (u8[]){ 0x0f, 0x32, 0x05, 0x09, 0xad, 0x9f, 0x25, 0xf7,
+			  0xf2, 0x00, 0x71, 0xc9, 0x9f, 0x08, 0x58, 0xd1,
+			  0x67, 0xc3, 0xa6, 0x2c, 0x0d, 0xe5, 0x7c, 0x15,
+			  0x35, 0x18, 0x5a, 0x68, 0xc1, 0xca, 0x1c, 0x6e,
+			  0x0f, 0xc4, 0xf6, 0x0c, 0x43, 0xe1, 0xb4, 0x3d,
+			  0x28, 0xe4, 0xc7, 0xa1, 0xcf, 0x6b, 0x17, 0x4e,
+			  0xf1, 0x5b, 0xb5, 0x53, 0xd4, 0xa7, 0xd0, 0x5b,
+			  0xae, 0x15, 0x81, 0x15, 0xd0, 0x88, 0xa0, 0x3c, },
+}};
+
+static const struct hash_testvec blakes2s_128_tv_template[] = {{
+	.digest = (u8[]){ 0x64, 0x55, 0x0d, 0x6f, 0xfe, 0x2c, 0x0a, 0x01,
+			  0xa1, 0x4a, 0xba, 0x1e, 0xad, 0xe0, 0x20, 0x0c, },
+}, {
+	.plaintext = blake2_ordered_sequence,
+	.psize = 64,
+	.digest = (u8[]){ 0xdc, 0x66, 0xca, 0x8f, 0x03, 0x86, 0x58, 0x01,
+			  0xb0, 0xff, 0xe0, 0x6e, 0xd8, 0xa1, 0xa9, 0x0e, },
+}, {
+	.ksize = 16,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 1,
+	.digest = (u8[]){ 0x88, 0x1e, 0x42, 0xe7, 0xbb, 0x35, 0x80, 0x82,
+			  0x63, 0x7c, 0x0a, 0x0f, 0xd7, 0xec, 0x6c, 0x2f, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 7,
+	.digest = (u8[]){ 0xcf, 0x9e, 0x07, 0x2a, 0xd5, 0x22, 0xf2, 0xcd,
+			  0xa2, 0xd8, 0x25, 0x21, 0x80, 0x86, 0x73, 0x1c, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 15,
+	.digest = (u8[]){ 0xf6, 0x33, 0x5a, 0x2c, 0x22, 0xa0, 0x64, 0xb2,
+			  0xb6, 0x3f, 0xeb, 0xbc, 0xd1, 0xc3, 0xe5, 0xb2, },
+}, {
+	.ksize = 16,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 247,
+	.digest = (u8[]){ 0x72, 0x66, 0x49, 0x60, 0xf9, 0x4a, 0xea, 0xbe,
+			  0x1f, 0xf4, 0x60, 0xce, 0xb7, 0x81, 0xcb, 0x09, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 256,
+	.digest = (u8[]){ 0xd5, 0xa4, 0x0e, 0xc3, 0x16, 0xc7, 0x51, 0xa6,
+			  0x3c, 0xd0, 0xd9, 0x11, 0x57, 0xfa, 0x1e, 0xbb, },
+}};
+
+static const struct hash_testvec blakes2s_160_tv_template[] = {{
+	.plaintext = blake2_ordered_sequence,
+	.psize = 7,
+	.digest = (u8[]){ 0xb4, 0xf2, 0x03, 0x49, 0x37, 0xed, 0xb1, 0x3e,
+			  0x5b, 0x2a, 0xca, 0x64, 0x82, 0x74, 0xf6, 0x62,
+			  0xe3, 0xf2, 0x84, 0xff, },
+}, {
+	.plaintext = blake2_ordered_sequence,
+	.psize = 256,
+	.digest = (u8[]){ 0xaa, 0x56, 0x9b, 0xdc, 0x98, 0x17, 0x75, 0xf2,
+			  0xb3, 0x68, 0x83, 0xb7, 0x9b, 0x8d, 0x48, 0xb1,
+			  0x9b, 0x2d, 0x35, 0x05, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.digest = (u8[]){ 0x50, 0x16, 0xe7, 0x0c, 0x01, 0xd0, 0xd3, 0xc3,
+			  0xf4, 0x3e, 0xb1, 0x6e, 0x97, 0xa9, 0x4e, 0xd1,
+			  0x79, 0x65, 0x32, 0x93, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 1,
+	.digest = (u8[]){ 0x1c, 0x2b, 0xcd, 0x9a, 0x68, 0xca, 0x8c, 0x71,
+			  0x90, 0x29, 0x6c, 0x54, 0xfa, 0x56, 0x4a, 0xef,
+			  0xa2, 0x3a, 0x56, 0x9c, },
+}, {
+	.ksize = 16,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 15,
+	.digest = (u8[]){ 0x36, 0xc3, 0x5f, 0x9a, 0xdc, 0x7e, 0xbf, 0x19,
+			  0x68, 0xaa, 0xca, 0xd8, 0x81, 0xbf, 0x09, 0x34,
+			  0x83, 0x39, 0x0f, 0x30, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 64,
+	.digest = (u8[]){ 0x86, 0x80, 0x78, 0xa4, 0x14, 0xec, 0x03, 0xe5,
+			  0xb6, 0x9a, 0x52, 0x0e, 0x42, 0xee, 0x39, 0x9d,
+			  0xac, 0xa6, 0x81, 0x63, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 247,
+	.digest = (u8[]){ 0x2d, 0xd8, 0xd2, 0x53, 0x66, 0xfa, 0xa9, 0x01,
+			  0x1c, 0x9c, 0xaf, 0xa3, 0xe2, 0x9d, 0x9b, 0x10,
+			  0x0a, 0xf6, 0x73, 0xe8, },
+}};
+
+static const struct hash_testvec blakes2s_224_tv_template[] = {{
+	.plaintext = blake2_ordered_sequence,
+	.psize = 1,
+	.digest = (u8[]){ 0x61, 0xb9, 0x4e, 0xc9, 0x46, 0x22, 0xa3, 0x91,
+			  0xd2, 0xae, 0x42, 0xe6, 0x45, 0x6c, 0x90, 0x12,
+			  0xd5, 0x80, 0x07, 0x97, 0xb8, 0x86, 0x5a, 0xfc,
+			  0x48, 0x21, 0x97, 0xbb, },
+}, {
+	.plaintext = blake2_ordered_sequence,
+	.psize = 247,
+	.digest = (u8[]){ 0x9e, 0xda, 0xc7, 0x20, 0x2c, 0xd8, 0x48, 0x2e,
+			  0x31, 0x94, 0xab, 0x46, 0x6d, 0x94, 0xd8, 0xb4,
+			  0x69, 0xcd, 0xae, 0x19, 0x6d, 0x9e, 0x41, 0xcc,
+			  0x2b, 0xa4, 0xd5, 0xf6, },
+}, {
+	.ksize = 16,
+	.key = blake2_ordered_sequence,
+	.digest = (u8[]){ 0x32, 0xc0, 0xac, 0xf4, 0x3b, 0xd3, 0x07, 0x9f,
+			  0xbe, 0xfb, 0xfa, 0x4d, 0x6b, 0x4e, 0x56, 0xb3,
+			  0xaa, 0xd3, 0x27, 0xf6, 0x14, 0xbf, 0xb9, 0x32,
+			  0xa7, 0x19, 0xfc, 0xb8, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 7,
+	.digest = (u8[]){ 0x73, 0xad, 0x5e, 0x6d, 0xb9, 0x02, 0x8e, 0x76,
+			  0xf2, 0x66, 0x42, 0x4b, 0x4c, 0xfa, 0x1f, 0xe6,
+			  0x2e, 0x56, 0x40, 0xe5, 0xa2, 0xb0, 0x3c, 0xe8,
+			  0x7b, 0x45, 0xfe, 0x05, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 15,
+	.digest = (u8[]){ 0x16, 0x60, 0xfb, 0x92, 0x54, 0xb3, 0x6e, 0x36,
+			  0x81, 0xf4, 0x16, 0x41, 0xc3, 0x3d, 0xd3, 0x43,
+			  0x84, 0xed, 0x10, 0x6f, 0x65, 0x80, 0x7a, 0x3e,
+			  0x25, 0xab, 0xc5, 0x02, },
+}, {
+	.ksize = 16,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 64,
+	.digest = (u8[]){ 0xca, 0xaa, 0x39, 0x67, 0x9c, 0xf7, 0x6b, 0xc7,
+			  0xb6, 0x82, 0xca, 0x0e, 0x65, 0x36, 0x5b, 0x7c,
+			  0x24, 0x00, 0xfa, 0x5f, 0xda, 0x06, 0x91, 0x93,
+			  0x6a, 0x31, 0x83, 0xb5, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 256,
+	.digest = (u8[]){ 0x90, 0x02, 0x26, 0xb5, 0x06, 0x9c, 0x36, 0x86,
+			  0x94, 0x91, 0x90, 0x1e, 0x7d, 0x2a, 0x71, 0xb2,
+			  0x48, 0xb5, 0xe8, 0x16, 0xfd, 0x64, 0x33, 0x45,
+			  0xb3, 0xd7, 0xec, 0xcc, },
+}};
+
+static const struct hash_testvec blakes2s_256_tv_template[] = {{
+	.plaintext = blake2_ordered_sequence,
+	.psize = 15,
+	.digest = (u8[]){ 0xd9, 0x7c, 0x82, 0x8d, 0x81, 0x82, 0xa7, 0x21,
+			  0x80, 0xa0, 0x6a, 0x78, 0x26, 0x83, 0x30, 0x67,
+			  0x3f, 0x7c, 0x4e, 0x06, 0x35, 0x94, 0x7c, 0x04,
+			  0xc0, 0x23, 0x23, 0xfd, 0x45, 0xc0, 0xa5, 0x2d, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.digest = (u8[]){ 0x48, 0xa8, 0x99, 0x7d, 0xa4, 0x07, 0x87, 0x6b,
+			  0x3d, 0x79, 0xc0, 0xd9, 0x23, 0x25, 0xad, 0x3b,
+			  0x89, 0xcb, 0xb7, 0x54, 0xd8, 0x6a, 0xb7, 0x1a,
+			  0xee, 0x04, 0x7a, 0xd3, 0x45, 0xfd, 0x2c, 0x49, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 1,
+	.digest = (u8[]){ 0x22, 0x27, 0xae, 0xaa, 0x6e, 0x81, 0x56, 0x03,
+			  0xa7, 0xe3, 0xa1, 0x18, 0xa5, 0x9a, 0x2c, 0x18,
+			  0xf4, 0x63, 0xbc, 0x16, 0x70, 0xf1, 0xe7, 0x4b,
+			  0x00, 0x6d, 0x66, 0x16, 0xae, 0x9e, 0x74, 0x4e, },
+}, {
+	.ksize = 16,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 7,
+	.digest = (u8[]){ 0x58, 0x5d, 0xa8, 0x60, 0x1c, 0xa4, 0xd8, 0x03,
+			  0x86, 0x86, 0x84, 0x64, 0xd7, 0xa0, 0x8e, 0x15,
+			  0x2f, 0x05, 0xa2, 0x1b, 0xbc, 0xef, 0x7a, 0x34,
+			  0xb3, 0xc5, 0xbc, 0x4b, 0xf0, 0x32, 0xeb, 0x12, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 64,
+	.digest = (u8[]){ 0x89, 0x75, 0xb0, 0x57, 0x7f, 0xd3, 0x55, 0x66,
+			  0xd7, 0x50, 0xb3, 0x62, 0xb0, 0x89, 0x7a, 0x26,
+			  0xc3, 0x99, 0x13, 0x6d, 0xf0, 0x7b, 0xab, 0xab,
+			  0xbd, 0xe6, 0x20, 0x3f, 0xf2, 0x95, 0x4e, 0xd4, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 247,
+	.digest = (u8[]){ 0x2e, 0x74, 0x1c, 0x1d, 0x03, 0xf4, 0x9d, 0x84,
+			  0x6f, 0xfc, 0x86, 0x32, 0x92, 0x49, 0x7e, 0x66,
+			  0xd7, 0xc3, 0x10, 0x88, 0xfe, 0x28, 0xb3, 0xe0,
+			  0xbf, 0x50, 0x75, 0xad, 0x8e, 0xa4, 0xe6, 0xb2, },
+}, {
+	.ksize = 16,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 256,
+	.digest = (u8[]){ 0xb9, 0xd2, 0x81, 0x0e, 0x3a, 0xb1, 0x62, 0x9b,
+			  0xad, 0x44, 0x05, 0xf4, 0x92, 0x2e, 0x99, 0xc1,
+			  0x4a, 0x47, 0xbb, 0x5b, 0x6f, 0xb2, 0x96, 0xed,
+			  0xd5, 0x06, 0xb5, 0x3a, 0x7c, 0x7a, 0x65, 0x1d, },
+}};
+
 #endif	/* _CRYPTO_TESTMGR_H */
diff --git a/drivers/Kconfig b/drivers/Kconfig
index 8befa53..e0eda1a 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -200,6 +200,8 @@
 
 source "drivers/android/Kconfig"
 
+source "drivers/gpu/trace/Kconfig"
+
 source "drivers/nvdimm/Kconfig"
 
 source "drivers/dax/Kconfig"
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index ed56c6d..53b6c3b 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -791,8 +791,8 @@ static int acpi_idle_enter(struct cpuidle_device *dev,
 	return index;
 }
 
-static void acpi_idle_enter_s2idle(struct cpuidle_device *dev,
-				   struct cpuidle_driver *drv, int index)
+static int acpi_idle_enter_s2idle(struct cpuidle_device *dev,
+				  struct cpuidle_driver *drv, int index)
 {
 	struct acpi_processor_cx *cx = per_cpu(acpi_cstate[index], dev->cpu);
 
@@ -800,16 +800,18 @@ static void acpi_idle_enter_s2idle(struct cpuidle_device *dev,
 		struct acpi_processor *pr = __this_cpu_read(processors);
 
 		if (unlikely(!pr))
-			return;
+			return 0;
 
 		if (pr->flags.bm_check) {
 			acpi_idle_enter_bm(pr, cx, false);
-			return;
+			return 0;
 		} else {
 			ACPI_FLUSH_CPU_CACHE();
 		}
 	}
 	acpi_idle_do_entry(cx);
+
+	return 0;
 }
 
 static int acpi_processor_setup_cpuidle_cx(struct acpi_processor *pr,
diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
index fe15236..e797995 100644
--- a/drivers/amba/bus.c
+++ b/drivers/amba/bus.c
@@ -505,7 +505,7 @@ static DECLARE_DELAYED_WORK(deferred_retry_work, amba_deferred_retry_func);
 
 #define DEFERRED_DEVICE_TIMEOUT (msecs_to_jiffies(5 * 1000))
 
-static void amba_deferred_retry_func(struct work_struct *dummy)
+static int amba_deferred_retry(void)
 {
 	struct deferred_device *ddev, *tmp;
 
@@ -521,11 +521,19 @@ static void amba_deferred_retry_func(struct work_struct *dummy)
 		kfree(ddev);
 	}
 
+	mutex_unlock(&deferred_devices_lock);
+
+	return 0;
+}
+late_initcall(amba_deferred_retry);
+
+static void amba_deferred_retry_func(struct work_struct *dummy)
+{
+	amba_deferred_retry();
+
 	if (!list_empty(&deferred_devices))
 		schedule_delayed_work(&deferred_retry_work,
 				      DEFERRED_DEVICE_TIMEOUT);
-
-	mutex_unlock(&deferred_devices_lock);
 }
 
 /**
diff --git a/drivers/android/Kconfig b/drivers/android/Kconfig
index 6fdf2ab..392564c 100644
--- a/drivers/android/Kconfig
+++ b/drivers/android/Kconfig
@@ -54,6 +54,15 @@
 	  exhaustively with combinations of various buffer sizes and
 	  alignments.
 
+config ANDROID_VENDOR_HOOKS
+	bool "Android Vendor Hooks"
+	depends on TRACEPOINTS
+	---help---
+	  Enable vendor hooks implemented as tracepoints
+
+	  Allow vendor modules to attach to tracepoint "hooks" defined via
+	  DECLARE_HOOK or DECLARE_RESTRICTED_HOOK.
+
 endif # if ANDROID
 
 endmenu
diff --git a/drivers/android/Makefile b/drivers/android/Makefile
index c9d3d0c9..d488047 100644
--- a/drivers/android/Makefile
+++ b/drivers/android/Makefile
@@ -4,3 +4,4 @@
 obj-$(CONFIG_ANDROID_BINDERFS)		+= binderfs.o
 obj-$(CONFIG_ANDROID_BINDER_IPC)	+= binder.o binder_alloc.o
 obj-$(CONFIG_ANDROID_BINDER_IPC_SELFTEST) += binder_alloc_selftest.o
+obj-$(CONFIG_ANDROID_VENDOR_HOOKS) += vendor_hooks.o
diff --git a/drivers/android/binder.c b/drivers/android/binder.c
index 89b590c..24a041c 100644
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -65,7 +65,9 @@
 #include <linux/ratelimit.h>
 #include <linux/syscalls.h>
 #include <linux/task_work.h>
+#include <linux/android_vendor.h>
 
+#include <uapi/linux/sched/types.h>
 #include <uapi/linux/android/binder.h>
 #include <uapi/linux/android/binderfs.h>
 
@@ -74,6 +76,7 @@
 #include "binder_alloc.h"
 #include "binder_internal.h"
 #include "binder_trace.h"
+#include <trace/hooks/binder.h>
 
 static HLIST_HEAD(binder_deferred_list);
 static DEFINE_MUTEX(binder_deferred_lock);
@@ -292,10 +295,13 @@ struct binder_error {
  *                        and by @lock)
  * @has_async_transaction: async transaction to node in progress
  *                        (protected by @lock)
+ * @sched_policy:         minimum scheduling policy for node
+ *                        (invariant after initialized)
  * @accept_fds:           file descriptor operations supported for node
  *                        (invariant after initialized)
  * @min_priority:         minimum scheduling priority
  *                        (invariant after initialized)
+ * @inherit_rt:           inherit RT scheduling policy from caller
  * @txn_security_ctx:     require sender's security context
  *                        (invariant after initialized)
  * @async_todo:           list of async work items
@@ -333,6 +339,8 @@ struct binder_node {
 		/*
 		 * invariant after initialization
 		 */
+		u8 sched_policy:2;
+		u8 inherit_rt:1;
 		u8 accept_fds:1;
 		u8 txn_security_ctx:1;
 		u8 min_priority;
@@ -407,6 +415,22 @@ enum binder_deferred_state {
 };
 
 /**
+ * struct binder_priority - scheduler policy and priority
+ * @sched_policy            scheduler policy
+ * @prio                    [100..139] for SCHED_NORMAL, [0..99] for FIFO/RT
+ *
+ * The binder driver supports inheriting the following scheduler policies:
+ * SCHED_NORMAL
+ * SCHED_BATCH
+ * SCHED_FIFO
+ * SCHED_RR
+ */
+struct binder_priority {
+	unsigned int sched_policy;
+	int prio;
+};
+
+/**
  * struct binder_proc - binder process bookkeeping
  * @proc_node:            element for binder_procs list
  * @threads:              rbtree of binder_threads in this proc
@@ -480,7 +504,7 @@ struct binder_proc {
 	int requested_threads;
 	int requested_threads_started;
 	int tmp_ref;
-	long default_priority;
+	struct binder_priority default_priority;
 	struct dentry *debugfs_entry;
 	struct binder_alloc alloc;
 	struct binder_context *context;
@@ -531,6 +555,7 @@ enum {
  * @is_dead:              thread is dead and awaiting free
  *                        when outstanding transactions are cleaned up
  *                        (protected by @proc->inner_lock)
+ * @task:                 struct task_struct for this thread
  *
  * Bookkeeping structure for binder threads.
  */
@@ -550,6 +575,7 @@ struct binder_thread {
 	struct binder_stats stats;
 	atomic_t tmp_ref;
 	bool is_dead;
+	struct task_struct *task;
 };
 
 /**
@@ -583,8 +609,9 @@ struct binder_transaction {
 	struct binder_buffer *buffer;
 	unsigned int	code;
 	unsigned int	flags;
-	long	priority;
-	long	saved_priority;
+	struct binder_priority	priority;
+	struct binder_priority	saved_priority;
+	bool    set_priority_called;
 	kuid_t	sender_euid;
 	struct list_head fd_fixups;
 	binder_uintptr_t security_ctx;
@@ -595,6 +622,7 @@ struct binder_transaction {
 	 * during thread teardown
 	 */
 	spinlock_t lock;
+	ANDROID_VENDOR_DATA(1);
 };
 
 /**
@@ -1022,22 +1050,146 @@ static void binder_wakeup_proc_ilocked(struct binder_proc *proc)
 	binder_wakeup_thread_ilocked(proc, thread, /* sync = */false);
 }
 
-static void binder_set_nice(long nice)
+static bool is_rt_policy(int policy)
 {
-	long min_nice;
+	return policy == SCHED_FIFO || policy == SCHED_RR;
+}
 
-	if (can_nice(current, nice)) {
-		set_user_nice(current, nice);
+static bool is_fair_policy(int policy)
+{
+	return policy == SCHED_NORMAL || policy == SCHED_BATCH;
+}
+
+static bool binder_supported_policy(int policy)
+{
+	return is_fair_policy(policy) || is_rt_policy(policy);
+}
+
+static int to_userspace_prio(int policy, int kernel_priority)
+{
+	if (is_fair_policy(policy))
+		return PRIO_TO_NICE(kernel_priority);
+	else
+		return MAX_USER_RT_PRIO - 1 - kernel_priority;
+}
+
+static int to_kernel_prio(int policy, int user_priority)
+{
+	if (is_fair_policy(policy))
+		return NICE_TO_PRIO(user_priority);
+	else
+		return MAX_USER_RT_PRIO - 1 - user_priority;
+}
+
+static void binder_do_set_priority(struct task_struct *task,
+				   struct binder_priority desired,
+				   bool verify)
+{
+	int priority; /* user-space prio value */
+	bool has_cap_nice;
+	unsigned int policy = desired.sched_policy;
+
+	if (task->policy == policy && task->normal_prio == desired.prio)
 		return;
+
+	has_cap_nice = has_capability_noaudit(task, CAP_SYS_NICE);
+
+	priority = to_userspace_prio(policy, desired.prio);
+
+	if (verify && is_rt_policy(policy) && !has_cap_nice) {
+		long max_rtprio = task_rlimit(task, RLIMIT_RTPRIO);
+
+		if (max_rtprio == 0) {
+			policy = SCHED_NORMAL;
+			priority = MIN_NICE;
+		} else if (priority > max_rtprio) {
+			priority = max_rtprio;
+		}
 	}
-	min_nice = rlimit_to_nice(rlimit(RLIMIT_NICE));
-	binder_debug(BINDER_DEBUG_PRIORITY_CAP,
-		     "%d: nice value %ld not allowed use %ld instead\n",
-		      current->pid, nice, min_nice);
-	set_user_nice(current, min_nice);
-	if (min_nice <= MAX_NICE)
+
+	if (verify && is_fair_policy(policy) && !has_cap_nice) {
+		long min_nice = rlimit_to_nice(task_rlimit(task, RLIMIT_NICE));
+
+		if (min_nice > MAX_NICE) {
+			binder_user_error("%d RLIMIT_NICE not set\n",
+					  task->pid);
+			return;
+		} else if (priority < min_nice) {
+			priority = min_nice;
+		}
+	}
+
+	if (policy != desired.sched_policy ||
+	    to_kernel_prio(policy, priority) != desired.prio)
+		binder_debug(BINDER_DEBUG_PRIORITY_CAP,
+			     "%d: priority %d not allowed, using %d instead\n",
+			      task->pid, desired.prio,
+			      to_kernel_prio(policy, priority));
+
+	trace_binder_set_priority(task->tgid, task->pid, task->normal_prio,
+				  to_kernel_prio(policy, priority),
+				  desired.prio);
+
+	/* Set the actual priority */
+	if (task->policy != policy || is_rt_policy(policy)) {
+		struct sched_param params;
+
+		params.sched_priority = is_rt_policy(policy) ? priority : 0;
+
+		sched_setscheduler_nocheck(task,
+					   policy | SCHED_RESET_ON_FORK,
+					   &params);
+	}
+	if (is_fair_policy(policy))
+		set_user_nice(task, priority);
+}
+
+static void binder_set_priority(struct task_struct *task,
+				struct binder_priority desired)
+{
+	binder_do_set_priority(task, desired, /* verify = */ true);
+}
+
+static void binder_restore_priority(struct task_struct *task,
+				    struct binder_priority desired)
+{
+	binder_do_set_priority(task, desired, /* verify = */ false);
+}
+
+static void binder_transaction_priority(struct task_struct *task,
+					struct binder_transaction *t,
+					struct binder_priority node_prio,
+					bool inherit_rt)
+{
+	struct binder_priority desired_prio = t->priority;
+
+	if (t->set_priority_called)
 		return;
-	binder_user_error("%d RLIMIT_NICE not set\n", current->pid);
+
+	t->set_priority_called = true;
+	t->saved_priority.sched_policy = task->policy;
+	t->saved_priority.prio = task->normal_prio;
+
+	if (!inherit_rt && is_rt_policy(desired_prio.sched_policy)) {
+		desired_prio.prio = NICE_TO_PRIO(0);
+		desired_prio.sched_policy = SCHED_NORMAL;
+	}
+
+	if (node_prio.prio < t->priority.prio ||
+	    (node_prio.prio == t->priority.prio &&
+	     node_prio.sched_policy == SCHED_FIFO)) {
+		/*
+		 * In case the minimum priority on the node is
+		 * higher (lower value), use that priority. If
+		 * the priority is the same, but the node uses
+		 * SCHED_FIFO, prefer SCHED_FIFO, since it can
+		 * run unbounded, unlike SCHED_RR.
+		 */
+		desired_prio = node_prio;
+	}
+
+	binder_set_priority(task, desired_prio);
+	trace_android_vh_binder_set_priority(t, task);
 }
 
 static struct binder_node *binder_get_node_ilocked(struct binder_proc *proc,
@@ -1090,6 +1242,7 @@ static struct binder_node *binder_init_node_ilocked(
 	binder_uintptr_t ptr = fp ? fp->binder : 0;
 	binder_uintptr_t cookie = fp ? fp->cookie : 0;
 	__u32 flags = fp ? fp->flags : 0;
+	s8 priority;
 
 	assert_spin_locked(&proc->inner_lock);
 
@@ -1122,8 +1275,12 @@ static struct binder_node *binder_init_node_ilocked(
 	node->ptr = ptr;
 	node->cookie = cookie;
 	node->work.type = BINDER_WORK_NODE;
-	node->min_priority = flags & FLAT_BINDER_FLAG_PRIORITY_MASK;
+	priority = flags & FLAT_BINDER_FLAG_PRIORITY_MASK;
+	node->sched_policy = (flags & FLAT_BINDER_FLAG_SCHED_POLICY_MASK) >>
+		FLAT_BINDER_FLAG_SCHED_POLICY_SHIFT;
+	node->min_priority = to_kernel_prio(node->sched_policy, priority);
 	node->accept_fds = !!(flags & FLAT_BINDER_FLAG_ACCEPTS_FDS);
+	node->inherit_rt = !!(flags & FLAT_BINDER_FLAG_INHERIT_RT);
 	node->txn_security_ctx = !!(flags & FLAT_BINDER_FLAG_TXN_SECURITY_CTX);
 	spin_lock_init(&node->lock);
 	INIT_LIST_HEAD(&node->work.entry);
@@ -2732,11 +2889,15 @@ static bool binder_proc_transaction(struct binder_transaction *t,
 				    struct binder_thread *thread)
 {
 	struct binder_node *node = t->buffer->target_node;
+	struct binder_priority node_prio;
 	bool oneway = !!(t->flags & TF_ONE_WAY);
 	bool pending_async = false;
 
 	BUG_ON(!node);
 	binder_node_lock(node);
+	node_prio.prio = node->min_priority;
+	node_prio.sched_policy = node->sched_policy;
+
 	if (oneway) {
 		BUG_ON(thread);
 		if (node->has_async_transaction) {
@@ -2757,12 +2918,15 @@ static bool binder_proc_transaction(struct binder_transaction *t,
 	if (!thread && !pending_async)
 		thread = binder_select_thread_ilocked(proc);
 
-	if (thread)
+	if (thread) {
+		binder_transaction_priority(thread->task, t, node_prio,
+					    node->inherit_rt);
 		binder_enqueue_thread_work_ilocked(thread, &t->work);
-	else if (!pending_async)
+	} else if (!pending_async) {
 		binder_enqueue_work_ilocked(&t->work, &proc->todo);
-	else
+	} else {
 		binder_enqueue_work_ilocked(&t->work, &node->async_todo);
+	}
 
 	if (!pending_async)
 		binder_wakeup_thread_ilocked(proc, thread, !oneway /* sync */);
@@ -2883,7 +3047,6 @@ static void binder_transaction(struct binder_proc *proc,
 		}
 		thread->transaction_stack = in_reply_to->to_parent;
 		binder_inner_proc_unlock(proc);
-		binder_set_nice(in_reply_to->saved_priority);
 		target_thread = binder_get_txn_from_and_acq_inner(in_reply_to);
 		if (target_thread == NULL) {
 			/* annotation for sparse */
@@ -2961,12 +3124,6 @@ static void binder_transaction(struct binder_proc *proc,
 			goto err_dead_binder;
 		}
 		e->to_node = target_node->debug_id;
-		if (WARN_ON(proc == target_proc)) {
-			return_error = BR_FAILED_REPLY;
-			return_error_param = -EINVAL;
-			return_error_line = __LINE__;
-			goto err_invalid_target_handle;
-		}
 		if (security_binder_transaction(proc->tsk,
 						target_proc->tsk) < 0) {
 			return_error = BR_FAILED_REPLY;
@@ -3048,6 +3205,7 @@ static void binder_transaction(struct binder_proc *proc,
 	INIT_LIST_HEAD(&t->fd_fixups);
 	binder_stats_created(BINDER_STAT_TRANSACTION);
 	spin_lock_init(&t->lock);
+	trace_android_vh_binder_transaction_init(t);
 
 	tcomplete = kzalloc(sizeof(*tcomplete), GFP_KERNEL);
 	if (tcomplete == NULL) {
@@ -3088,7 +3246,15 @@ static void binder_transaction(struct binder_proc *proc,
 	t->to_thread = target_thread;
 	t->code = tr->code;
 	t->flags = tr->flags;
-	t->priority = task_nice(current);
+	if (!(t->flags & TF_ONE_WAY) &&
+	    binder_supported_policy(current->policy)) {
+		/* Inherit supported policies for synchronous transactions */
+		t->priority.sched_policy = current->policy;
+		t->priority.prio = current->normal_prio;
+	} else {
+		/* Otherwise, fall back to the default priority */
+		t->priority = target_proc->default_priority;
+	}
 
 	if (target_node && target_node->txn_security_ctx) {
 		u32 secid;
@@ -3117,7 +3283,7 @@ static void binder_transaction(struct binder_proc *proc,
 
 	t->buffer = binder_alloc_new_buf(&target_proc->alloc, tr->data_size,
 		tr->offsets_size, extra_buffers_size,
-		!reply && (t->flags & TF_ONE_WAY));
+		!reply && (t->flags & TF_ONE_WAY), current->tgid);
 	if (IS_ERR(t->buffer)) {
 		/*
 		 * -ESRCH indicates VMA cleared. The target is dying.
@@ -3416,6 +3582,8 @@ static void binder_transaction(struct binder_proc *proc,
 		binder_enqueue_thread_work_ilocked(target_thread, &t->work);
 		binder_inner_proc_unlock(target_proc);
 		wake_up_interruptible_sync(&target_thread->wait);
+		trace_android_vh_binder_restore_priority(in_reply_to, current);
+		binder_restore_priority(current, in_reply_to->saved_priority);
 		binder_free_transaction(in_reply_to);
 	} else if (!(t->flags & TF_ONE_WAY)) {
 		BUG_ON(t->buffer->async_transaction != 0);
@@ -3526,6 +3694,8 @@ static void binder_transaction(struct binder_proc *proc,
 
 	BUG_ON(thread->return_error.cmd != BR_OK);
 	if (in_reply_to) {
+		trace_android_vh_binder_restore_priority(in_reply_to, current);
+		binder_restore_priority(current, in_reply_to->saved_priority);
 		thread->return_error.cmd = BR_TRANSACTION_COMPLETE;
 		binder_enqueue_thread_work(thread, &thread->return_error.work);
 		binder_send_failed_reply(in_reply_to, return_error);
@@ -3621,17 +3791,10 @@ static int binder_thread_write(struct binder_proc *proc,
 				struct binder_node *ctx_mgr_node;
 				mutex_lock(&context->context_mgr_node_lock);
 				ctx_mgr_node = context->binder_context_mgr_node;
-				if (ctx_mgr_node) {
-					if (ctx_mgr_node->proc == proc) {
-						binder_user_error("%d:%d context manager tried to acquire desc 0\n",
-								  proc->pid, thread->pid);
-						mutex_unlock(&context->context_mgr_node_lock);
-						return -EINVAL;
-					}
+				if (ctx_mgr_node)
 					ret = binder_inc_ref_for_node(
 							proc, ctx_mgr_node,
 							strong, NULL, &rdata);
-				}
 				mutex_unlock(&context->context_mgr_node_lock);
 			}
 			if (ret)
@@ -4199,7 +4362,8 @@ static int binder_thread_read(struct binder_proc *proc,
 			wait_event_interruptible(binder_user_error_wait,
 						 binder_stop_on_user_error < 2);
 		}
-		binder_set_nice(proc->default_priority);
+		trace_android_vh_binder_restore_priority(NULL, current);
+		binder_restore_priority(current, proc->default_priority);
 	}
 
 	if (non_block) {
@@ -4421,16 +4585,14 @@ static int binder_thread_read(struct binder_proc *proc,
 		BUG_ON(t->buffer == NULL);
 		if (t->buffer->target_node) {
 			struct binder_node *target_node = t->buffer->target_node;
+			struct binder_priority node_prio;
 
 			trd->target.ptr = target_node->ptr;
 			trd->cookie =  target_node->cookie;
-			t->saved_priority = task_nice(current);
-			if (t->priority < target_node->min_priority &&
-			    !(t->flags & TF_ONE_WAY))
-				binder_set_nice(t->priority);
-			else if (!(t->flags & TF_ONE_WAY) ||
-				 t->saved_priority > target_node->min_priority)
-				binder_set_nice(target_node->min_priority);
+			node_prio.sched_policy = target_node->sched_policy;
+			node_prio.prio = target_node->min_priority;
+			binder_transaction_priority(current, t, node_prio,
+						    target_node->inherit_rt);
 			cmd = BR_TRANSACTION;
 		} else {
 			trd->target.ptr = 0;
@@ -4648,6 +4810,8 @@ static struct binder_thread *binder_get_thread_ilocked(
 	binder_stats_created(BINDER_STAT_THREAD);
 	thread->proc = proc;
 	thread->pid = current->pid;
+	get_task_struct(current);
+	thread->task = current;
 	atomic_set(&thread->tmp_ref, 0);
 	init_waitqueue_head(&thread->wait);
 	INIT_LIST_HEAD(&thread->todo);
@@ -4705,6 +4869,7 @@ static void binder_free_thread(struct binder_thread *thread)
 	BUG_ON(!list_empty(&thread->todo));
 	binder_stats_deleted(BINDER_STAT_THREAD);
 	binder_proc_dec_tmpref(thread->proc);
+	put_task_struct(thread->task);
 	kfree(thread);
 }
 
@@ -5224,7 +5389,14 @@ static int binder_open(struct inode *nodp, struct file *filp)
 	get_task_struct(current->group_leader);
 	proc->tsk = current->group_leader;
 	INIT_LIST_HEAD(&proc->todo);
-	proc->default_priority = task_nice(current);
+	if (binder_supported_policy(current->policy)) {
+		proc->default_priority.sched_policy = current->policy;
+		proc->default_priority.prio = current->normal_prio;
+	} else {
+		proc->default_priority.sched_policy = SCHED_NORMAL;
+		proc->default_priority.prio = NICE_TO_PRIO(0);
+	}
+
 	/* binderfs stashes devices in i_private */
 	if (is_binderfs_device(nodp)) {
 		binder_dev = nodp->i_private;
@@ -5546,13 +5718,14 @@ static void print_binder_transaction_ilocked(struct seq_file *m,
 	spin_lock(&t->lock);
 	to_proc = t->to_proc;
 	seq_printf(m,
-		   "%s %d: %pK from %d:%d to %d:%d code %x flags %x pri %ld r%d",
+		   "%s %d: %pK from %d:%d to %d:%d code %x flags %x pri %d:%d r%d",
 		   prefix, t->debug_id, t,
 		   t->from ? t->from->proc->pid : 0,
 		   t->from ? t->from->pid : 0,
 		   to_proc ? to_proc->pid : 0,
 		   t->to_thread ? t->to_thread->pid : 0,
-		   t->code, t->flags, t->priority, t->need_reply);
+		   t->code, t->flags, t->priority.sched_policy,
+		   t->priority.prio, t->need_reply);
 	spin_unlock(&t->lock);
 
 	if (proc != to_proc) {
@@ -5670,8 +5843,9 @@ static void print_binder_node_nilocked(struct seq_file *m,
 	hlist_for_each_entry(ref, &node->refs, node_entry)
 		count++;
 
-	seq_printf(m, "  node %d: u%016llx c%016llx hs %d hw %d ls %d lw %d is %d iw %d tr %d",
+	seq_printf(m, "  node %d: u%016llx c%016llx pri %d:%d hs %d hw %d ls %d lw %d is %d iw %d tr %d",
 		   node->debug_id, (u64)node->ptr, (u64)node->cookie,
+		   node->sched_policy, node->min_priority,
 		   node->has_strong_ref, node->has_weak_ref,
 		   node->local_strong_refs, node->local_weak_refs,
 		   node->internal_strong_refs, count, node->tmp_refs);
diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c
index 3526bb1..2739ebb 100644
--- a/drivers/android/binder_alloc.c
+++ b/drivers/android/binder_alloc.c
@@ -339,12 +339,50 @@ static inline struct vm_area_struct *binder_alloc_get_vma(
 	return vma;
 }
 
+static void debug_low_async_space_locked(struct binder_alloc *alloc, int pid)
+{
+	/*
+	 * Find the amount and size of buffers allocated by the current caller;
+	 * The idea is that once we cross the threshold, whoever is responsible
+	 * for the low async space is likely to try to send another async txn,
+	 * and at some point we'll catch them in the act. This is more efficient
+	 * than keeping a map per pid.
+	 */
+	struct rb_node *n = alloc->free_buffers.rb_node;
+	struct binder_buffer *buffer;
+	size_t total_alloc_size = 0;
+	size_t num_buffers = 0;
+
+	for (n = rb_first(&alloc->allocated_buffers); n != NULL;
+		 n = rb_next(n)) {
+		buffer = rb_entry(n, struct binder_buffer, rb_node);
+		if (buffer->pid != pid)
+			continue;
+		if (!buffer->async_transaction)
+			continue;
+		total_alloc_size += binder_alloc_buffer_size(alloc, buffer)
+			+ sizeof(struct binder_buffer);
+		num_buffers++;
+	}
+
+	/*
+	 * Warn if this pid has more than 50 transactions, or more than 50% of
+	 * async space (which is 25% of total buffer size).
+	 */
+	if (num_buffers > 50 || total_alloc_size > alloc->buffer_size / 4) {
+		binder_alloc_debug(BINDER_DEBUG_USER_ERROR,
+			     "%d: pid %d spamming oneway? %zd buffers allocated for a total size of %zd\n",
+			      alloc->pid, pid, num_buffers, total_alloc_size);
+	}
+}
+
 static struct binder_buffer *binder_alloc_new_buf_locked(
 				struct binder_alloc *alloc,
 				size_t data_size,
 				size_t offsets_size,
 				size_t extra_buffers_size,
-				int is_async)
+				int is_async,
+				int pid)
 {
 	struct rb_node *n = alloc->free_buffers.rb_node;
 	struct binder_buffer *buffer;
@@ -487,11 +525,20 @@ static struct binder_buffer *binder_alloc_new_buf_locked(
 	buffer->offsets_size = offsets_size;
 	buffer->async_transaction = is_async;
 	buffer->extra_buffers_size = extra_buffers_size;
+	buffer->pid = pid;
 	if (is_async) {
 		alloc->free_async_space -= size + sizeof(struct binder_buffer);
 		binder_alloc_debug(BINDER_DEBUG_BUFFER_ALLOC_ASYNC,
 			     "%d: binder_alloc_buf size %zd async free %zd\n",
 			      alloc->pid, size, alloc->free_async_space);
+		if (alloc->free_async_space < alloc->buffer_size / 10) {
+			/*
+			 * Start detecting spammers once we have less than 20%
+			 * of async space left (which is less than 10% of total
+			 * buffer size).
+			 */
+			debug_low_async_space_locked(alloc, pid);
+		}
 	}
 	return buffer;
 
@@ -509,6 +556,7 @@ static struct binder_buffer *binder_alloc_new_buf_locked(
  * @offsets_size:       user specified buffer offset
  * @extra_buffers_size: size of extra space for meta-data (eg, security context)
  * @is_async:           buffer for async transaction
+ * @pid:				pid to attribute allocation to (used for debugging)
  *
  * Allocate a new buffer given the requested sizes. Returns
  * the kernel version of the buffer pointer. The size allocated
@@ -521,13 +569,14 @@ struct binder_buffer *binder_alloc_new_buf(struct binder_alloc *alloc,
 					   size_t data_size,
 					   size_t offsets_size,
 					   size_t extra_buffers_size,
-					   int is_async)
+					   int is_async,
+					   int pid)
 {
 	struct binder_buffer *buffer;
 
 	mutex_lock(&alloc->mutex);
 	buffer = binder_alloc_new_buf_locked(alloc, data_size, offsets_size,
-					     extra_buffers_size, is_async);
+					     extra_buffers_size, is_async, pid);
 	mutex_unlock(&alloc->mutex);
 	return buffer;
 }
diff --git a/drivers/android/binder_alloc.h b/drivers/android/binder_alloc.h
index 288d0f4..6e8e00138 100644
--- a/drivers/android/binder_alloc.h
+++ b/drivers/android/binder_alloc.h
@@ -33,6 +33,7 @@ struct binder_transaction;
  * @offsets_size:       size of array of offsets
  * @extra_buffers_size: size of space for other objects (like sg lists)
  * @user_data:          user pointer to base of buffer space
+ * @pid:                pid to attribute the buffer to (caller)
  *
  * Bookkeeping structure for binder transaction buffers
  */
@@ -53,6 +54,7 @@ struct binder_buffer {
 	size_t offsets_size;
 	size_t extra_buffers_size;
 	void __user *user_data;
+	int    pid;
 };
 
 /**
@@ -119,7 +121,8 @@ extern struct binder_buffer *binder_alloc_new_buf(struct binder_alloc *alloc,
 						  size_t data_size,
 						  size_t offsets_size,
 						  size_t extra_buffers_size,
-						  int is_async);
+						  int is_async,
+						  int pid);
 extern void binder_alloc_init(struct binder_alloc *alloc);
 extern int binder_alloc_shrinker_init(void);
 extern void binder_alloc_vma_close(struct binder_alloc *alloc);
diff --git a/drivers/android/binder_alloc_selftest.c b/drivers/android/binder_alloc_selftest.c
index 4151d99..c2b323b 100644
--- a/drivers/android/binder_alloc_selftest.c
+++ b/drivers/android/binder_alloc_selftest.c
@@ -119,7 +119,7 @@ static void binder_selftest_alloc_buf(struct binder_alloc *alloc,
 	int i;
 
 	for (i = 0; i < BUFFER_NUM; i++) {
-		buffers[i] = binder_alloc_new_buf(alloc, sizes[i], 0, 0, 0);
+		buffers[i] = binder_alloc_new_buf(alloc, sizes[i], 0, 0, 0, 0);
 		if (IS_ERR(buffers[i]) ||
 		    !check_buffer_pages_allocated(alloc, buffers[i],
 						  sizes[i])) {
diff --git a/drivers/android/binder_trace.h b/drivers/android/binder_trace.h
index 6731c3c..a70e237 100644
--- a/drivers/android/binder_trace.h
+++ b/drivers/android/binder_trace.h
@@ -76,6 +76,30 @@ DEFINE_BINDER_FUNCTION_RETURN_EVENT(binder_ioctl_done);
 DEFINE_BINDER_FUNCTION_RETURN_EVENT(binder_write_done);
 DEFINE_BINDER_FUNCTION_RETURN_EVENT(binder_read_done);
 
+TRACE_EVENT(binder_set_priority,
+	TP_PROTO(int proc, int thread, unsigned int old_prio,
+		 unsigned int desired_prio, unsigned int new_prio),
+	TP_ARGS(proc, thread, old_prio, new_prio, desired_prio),
+
+	TP_STRUCT__entry(
+		__field(int, proc)
+		__field(int, thread)
+		__field(unsigned int, old_prio)
+		__field(unsigned int, new_prio)
+		__field(unsigned int, desired_prio)
+	),
+	TP_fast_assign(
+		__entry->proc = proc;
+		__entry->thread = thread;
+		__entry->old_prio = old_prio;
+		__entry->new_prio = new_prio;
+		__entry->desired_prio = desired_prio;
+	),
+	TP_printk("proc=%d thread=%d old=%d => new=%d desired=%d",
+		  __entry->proc, __entry->thread, __entry->old_prio,
+		  __entry->new_prio, __entry->desired_prio)
+);
+
 TRACE_EVENT(binder_wait_for_work,
 	TP_PROTO(bool proc_work, bool transaction_stack, bool thread_todo),
 	TP_ARGS(proc_work, transaction_stack, thread_todo),
diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c
new file mode 100644
index 0000000..2c3a1dc
--- /dev/null
+++ b/drivers/android/vendor_hooks.c
@@ -0,0 +1,62 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/* vendor_hook.c
+ *
+ * Android Vendor Hook Support
+ *
+ * Copyright 2020 Google LLC
+ */
+
+#define CREATE_TRACE_POINTS
+#include <trace/hooks/vendor_hooks.h>
+#include <trace/hooks/sched.h>
+#include <trace/hooks/dtask.h>
+#include <trace/hooks/net.h>
+#include <trace/hooks/binder.h>
+#include <trace/hooks/rwsem.h>
+#include <trace/hooks/futex.h>
+#include <trace/hooks/topology.h>
+#include <trace/hooks/debug.h>
+#include <trace/hooks/wqlockup.h>
+#include <trace/hooks/sysrqcrash.h>
+
+/*
+ * Export tracepoints that act as a bare tracehook (ie: have no trace event
+ * associated with them) to allow external modules to probe them.
+ */
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_select_task_rq_fair);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_select_task_rq_rt);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_select_fallback_rq);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_scheduler_tick);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_enqueue_task);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_dequeue_task);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_can_migrate_task);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_lowest_rq);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_rtmutex_prepare_setprio);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_prepare_prio_fork);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_finish_prio_fork);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_user_nice);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_setscheduler);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_start);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_finish);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_read_wait_start);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_read_wait_finish);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_start);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_finish);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_show_task);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ptype_head);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_kfree_skb);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_arch_set_freq_scale);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_transaction_init);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_set_priority);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_restore_priority);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_init);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_wake);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_finished);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_rwsem_list_add);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_futex_plist_add);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ipi_stop);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_wq_lockup_pool);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_busiest_group);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sysrq_crash);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_map_util_freq);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_em_pd_energy);
diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig
index 28b92e3..5f0bc74 100644
--- a/drivers/base/Kconfig
+++ b/drivers/base/Kconfig
@@ -148,6 +148,10 @@
 	  unusable. You should say N here unless you are explicitly looking to
 	  test this functionality.
 
+config PM_QOS_KUNIT_TEST
+	bool "KUnit Test for PM QoS features"
+	depends on KUNIT=y
+
 config HMEM_REPORTING
 	bool
 	default n
diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c
index 83e26fd..0e647f1 100644
--- a/drivers/base/arch_topology.c
+++ b/drivers/base/arch_topology.c
@@ -20,8 +20,11 @@
 #include <linux/percpu.h>
 #include <linux/sched.h>
 #include <linux/smp.h>
+#include <trace/hooks/topology.h>
 
 DEFINE_PER_CPU(unsigned long, freq_scale) = SCHED_CAPACITY_SCALE;
+DEFINE_PER_CPU(unsigned long, max_cpu_freq);
+DEFINE_PER_CPU(unsigned long, max_freq_scale) = SCHED_CAPACITY_SCALE;
 
 void arch_set_freq_scale(struct cpumask *cpus, unsigned long cur_freq,
 			 unsigned long max_freq)
@@ -31,8 +34,33 @@ void arch_set_freq_scale(struct cpumask *cpus, unsigned long cur_freq,
 
 	scale = (cur_freq << SCHED_CAPACITY_SHIFT) / max_freq;
 
-	for_each_cpu(i, cpus)
+	trace_android_vh_arch_set_freq_scale(cpus, cur_freq, max_freq, &scale);
+
+	for_each_cpu(i, cpus) {
 		per_cpu(freq_scale, i) = scale;
+		per_cpu(max_cpu_freq, i) = max_freq;
+	}
+}
+
+void arch_set_max_freq_scale(struct cpumask *cpus,
+			     unsigned long policy_max_freq)
+{
+	unsigned long scale, max_freq;
+	int cpu = cpumask_first(cpus);
+
+	if (cpu > nr_cpu_ids)
+		return;
+
+	max_freq = per_cpu(max_cpu_freq, cpu);
+	if (!max_freq)
+		return;
+
+	scale = (policy_max_freq << SCHED_CAPACITY_SHIFT) / max_freq;
+
+	trace_android_vh_arch_set_freq_scale(cpus, policy_max_freq, max_freq, &scale);
+
+	for_each_cpu(cpu, cpus)
+		per_cpu(max_freq_scale, cpu) = scale;
 }
 
 DEFINE_PER_CPU(unsigned long, cpu_scale) = SCHED_CAPACITY_SCALE;
diff --git a/drivers/base/core.c b/drivers/base/core.c
index a119479..5e05647 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -45,6 +45,13 @@ early_param("sysfs.deprecated", sysfs_deprecated_setup);
 #endif
 
 /* Device links support. */
+static LIST_HEAD(wait_for_suppliers);
+static DEFINE_MUTEX(wfs_lock);
+static LIST_HEAD(deferred_sync);
+static unsigned int defer_sync_state_count = 1;
+static unsigned int defer_fw_devlink_count;
+static LIST_HEAD(deferred_fw_devlink);
+static DEFINE_MUTEX(defer_fw_devlink_lock);
 
 #ifdef CONFIG_SRCU
 static DEFINE_MUTEX(device_links_lock);
@@ -142,6 +149,9 @@ static int device_is_dependent(struct device *dev, void *target)
 		return ret;
 
 	list_for_each_entry(link, &dev->links.consumers, s_node) {
+		if (link->flags == (DL_FLAG_SYNC_STATE_ONLY | DL_FLAG_MANAGED))
+			continue;
+
 		if (link->consumer == target)
 			return 1;
 
@@ -211,8 +221,11 @@ static int device_reorder_to_tail(struct device *dev, void *not_used)
 		device_pm_move_last(dev);
 
 	device_for_each_child(dev, NULL, device_reorder_to_tail);
-	list_for_each_entry(link, &dev->links.consumers, s_node)
+	list_for_each_entry(link, &dev->links.consumers, s_node) {
+		if (link->flags == (DL_FLAG_SYNC_STATE_ONLY | DL_FLAG_MANAGED))
+			continue;
 		device_reorder_to_tail(link->consumer, NULL);
+	}
 
 	return 0;
 }
@@ -237,9 +250,214 @@ void device_pm_move_to_tail(struct device *dev)
 	device_links_read_unlock(idx);
 }
 
+#define to_devlink(dev)	container_of((dev), struct device_link, link_dev)
+
+static ssize_t status_show(struct device *dev,
+			  struct device_attribute *attr, char *buf)
+{
+	char *status;
+
+	switch (to_devlink(dev)->status) {
+	case DL_STATE_NONE:
+		status = "not tracked"; break;
+	case DL_STATE_DORMANT:
+		status = "dormant"; break;
+	case DL_STATE_AVAILABLE:
+		status = "available"; break;
+	case DL_STATE_CONSUMER_PROBE:
+		status = "consumer probing"; break;
+	case DL_STATE_ACTIVE:
+		status = "active"; break;
+	case DL_STATE_SUPPLIER_UNBIND:
+		status = "supplier unbinding"; break;
+	default:
+		status = "unknown"; break;
+	}
+	return sprintf(buf, "%s\n", status);
+}
+static DEVICE_ATTR_RO(status);
+
+static ssize_t auto_remove_on_show(struct device *dev,
+				   struct device_attribute *attr, char *buf)
+{
+	struct device_link *link = to_devlink(dev);
+	char *str;
+
+	if (link->flags & DL_FLAG_AUTOREMOVE_SUPPLIER)
+		str = "supplier unbind";
+	else if (link->flags & DL_FLAG_AUTOREMOVE_CONSUMER)
+		str = "consumer unbind";
+	else
+		str = "never";
+
+	return sprintf(buf, "%s\n", str);
+}
+static DEVICE_ATTR_RO(auto_remove_on);
+
+static ssize_t runtime_pm_show(struct device *dev,
+			       struct device_attribute *attr, char *buf)
+{
+	struct device_link *link = to_devlink(dev);
+
+	return sprintf(buf, "%d\n", !!(link->flags & DL_FLAG_PM_RUNTIME));
+}
+static DEVICE_ATTR_RO(runtime_pm);
+
+static ssize_t sync_state_only_show(struct device *dev,
+				    struct device_attribute *attr, char *buf)
+{
+	struct device_link *link = to_devlink(dev);
+
+	return sprintf(buf, "%d\n", !!(link->flags & DL_FLAG_SYNC_STATE_ONLY));
+}
+static DEVICE_ATTR_RO(sync_state_only);
+
+static struct attribute *devlink_attrs[] = {
+	&dev_attr_status.attr,
+	&dev_attr_auto_remove_on.attr,
+	&dev_attr_runtime_pm.attr,
+	&dev_attr_sync_state_only.attr,
+	NULL,
+};
+ATTRIBUTE_GROUPS(devlink);
+
+static void device_link_free(struct device_link *link)
+{
+	while (refcount_dec_not_one(&link->rpm_active))
+		pm_runtime_put(link->supplier);
+
+	put_device(link->consumer);
+	put_device(link->supplier);
+	kfree(link);
+}
+
+#ifdef CONFIG_SRCU
+static void __device_link_free_srcu(struct rcu_head *rhead)
+{
+	device_link_free(container_of(rhead, struct device_link, rcu_head));
+}
+
+static void devlink_dev_release(struct device *dev)
+{
+	struct device_link *link = to_devlink(dev);
+
+	call_srcu(&device_links_srcu, &link->rcu_head, __device_link_free_srcu);
+}
+#else
+static void devlink_dev_release(struct device *dev)
+{
+	device_link_free(to_devlink(dev));
+}
+#endif
+
+static struct class devlink_class = {
+	.name = "devlink",
+	.owner = THIS_MODULE,
+	.dev_groups = devlink_groups,
+	.dev_release = devlink_dev_release,
+};
+
+static int devlink_add_symlinks(struct device *dev,
+				struct class_interface *class_intf)
+{
+	int ret;
+	size_t len;
+	struct device_link *link = to_devlink(dev);
+	struct device *sup = link->supplier;
+	struct device *con = link->consumer;
+	char *buf;
+
+	len = max(strlen(dev_name(sup)), strlen(dev_name(con)));
+	len += strlen("supplier:") + 1;
+	buf = kzalloc(len, GFP_KERNEL);
+	if (!buf)
+		return -ENOMEM;
+
+	ret = sysfs_create_link(&link->link_dev.kobj, &sup->kobj, "supplier");
+	if (ret)
+		goto out;
+
+	ret = sysfs_create_link(&link->link_dev.kobj, &con->kobj, "consumer");
+	if (ret)
+		goto err_con;
+
+	snprintf(buf, len, "consumer:%s", dev_name(con));
+	ret = sysfs_create_link(&sup->kobj, &link->link_dev.kobj, buf);
+	if (ret)
+		goto err_con_dev;
+
+	snprintf(buf, len, "supplier:%s", dev_name(sup));
+	ret = sysfs_create_link(&con->kobj, &link->link_dev.kobj, buf);
+	if (ret)
+		goto err_sup_dev;
+
+	goto out;
+
+err_sup_dev:
+	snprintf(buf, len, "consumer:%s", dev_name(con));
+	sysfs_remove_link(&sup->kobj, buf);
+err_con_dev:
+	sysfs_remove_link(&link->link_dev.kobj, "consumer");
+err_con:
+	sysfs_remove_link(&link->link_dev.kobj, "supplier");
+out:
+	kfree(buf);
+	return ret;
+}
+
+static void devlink_remove_symlinks(struct device *dev,
+				   struct class_interface *class_intf)
+{
+	struct device_link *link = to_devlink(dev);
+	size_t len;
+	struct device *sup = link->supplier;
+	struct device *con = link->consumer;
+	char *buf;
+
+	sysfs_remove_link(&link->link_dev.kobj, "consumer");
+	sysfs_remove_link(&link->link_dev.kobj, "supplier");
+
+	len = max(strlen(dev_name(sup)), strlen(dev_name(con)));
+	len += strlen("supplier:") + 1;
+	buf = kzalloc(len, GFP_KERNEL);
+	if (!buf) {
+		WARN(1, "Unable to properly free device link symlinks!\n");
+		return;
+	}
+
+	snprintf(buf, len, "supplier:%s", dev_name(sup));
+	sysfs_remove_link(&con->kobj, buf);
+	snprintf(buf, len, "consumer:%s", dev_name(con));
+	sysfs_remove_link(&sup->kobj, buf);
+	kfree(buf);
+}
+
+static struct class_interface devlink_class_intf = {
+	.class = &devlink_class,
+	.add_dev = devlink_add_symlinks,
+	.remove_dev = devlink_remove_symlinks,
+};
+
+static int __init devlink_class_init(void)
+{
+	int ret;
+
+	ret = class_register(&devlink_class);
+	if (ret)
+		return ret;
+
+	ret = class_interface_register(&devlink_class_intf);
+	if (ret)
+		class_unregister(&devlink_class);
+
+	return ret;
+}
+postcore_initcall(devlink_class_init);
+
 #define DL_MANAGED_LINK_FLAGS (DL_FLAG_AUTOREMOVE_CONSUMER | \
 			       DL_FLAG_AUTOREMOVE_SUPPLIER | \
-			       DL_FLAG_AUTOPROBE_CONSUMER)
+			       DL_FLAG_AUTOPROBE_CONSUMER  | \
+			       DL_FLAG_SYNC_STATE_ONLY)
 
 #define DL_ADD_VALID_FLAGS (DL_MANAGED_LINK_FLAGS | DL_FLAG_STATELESS | \
 			    DL_FLAG_PM_RUNTIME | DL_FLAG_RPM_ACTIVE)
@@ -307,6 +525,8 @@ struct device_link *device_link_add(struct device *consumer,
 
 	if (!consumer || !supplier || flags & ~DL_ADD_VALID_FLAGS ||
 	    (flags & DL_FLAG_STATELESS && flags & DL_MANAGED_LINK_FLAGS) ||
+	    (flags & DL_FLAG_SYNC_STATE_ONLY &&
+	     flags != DL_FLAG_SYNC_STATE_ONLY) ||
 	    (flags & DL_FLAG_AUTOPROBE_CONSUMER &&
 	     flags & (DL_FLAG_AUTOREMOVE_CONSUMER |
 		      DL_FLAG_AUTOREMOVE_SUPPLIER)))
@@ -327,11 +547,14 @@ struct device_link *device_link_add(struct device *consumer,
 
 	/*
 	 * If the supplier has not been fully registered yet or there is a
-	 * reverse dependency between the consumer and the supplier already in
-	 * the graph, return NULL.
+	 * reverse (non-SYNC_STATE_ONLY) dependency between the consumer and
+	 * the supplier already in the graph, return NULL. If the link is a
+	 * SYNC_STATE_ONLY link, we don't check for reverse dependencies
+	 * because it only affects sync_state() callbacks.
 	 */
 	if (!device_pm_initialized(supplier)
-	    || device_is_dependent(consumer, supplier)) {
+	    || (!(flags & DL_FLAG_SYNC_STATE_ONLY) &&
+		  device_is_dependent(consumer, supplier))) {
 		link = NULL;
 		goto out;
 	}
@@ -358,9 +581,15 @@ struct device_link *device_link_add(struct device *consumer,
 		}
 
 		if (flags & DL_FLAG_STATELESS) {
-			link->flags |= DL_FLAG_STATELESS;
 			kref_get(&link->kref);
-			goto out;
+			if (link->flags & DL_FLAG_SYNC_STATE_ONLY &&
+			    !(link->flags & DL_FLAG_STATELESS)) {
+				link->flags |= DL_FLAG_STATELESS;
+				goto reorder;
+			} else {
+				link->flags |= DL_FLAG_STATELESS;
+				goto out;
+			}
 		}
 
 		/*
@@ -382,6 +611,12 @@ struct device_link *device_link_add(struct device *consumer,
 			link->flags |= DL_FLAG_MANAGED;
 			device_link_init_status(link, consumer, supplier);
 		}
+		if (link->flags & DL_FLAG_SYNC_STATE_ONLY &&
+		    !(flags & DL_FLAG_SYNC_STATE_ONLY)) {
+			link->flags &= ~DL_FLAG_SYNC_STATE_ONLY;
+			goto reorder;
+		}
+
 		goto out;
 	}
 
@@ -391,13 +626,6 @@ struct device_link *device_link_add(struct device *consumer,
 
 	refcount_set(&link->rpm_active, 1);
 
-	if (flags & DL_FLAG_PM_RUNTIME) {
-		if (flags & DL_FLAG_RPM_ACTIVE)
-			refcount_inc(&link->rpm_active);
-
-		pm_runtime_new_link(consumer);
-	}
-
 	get_device(supplier);
 	link->supplier = supplier;
 	INIT_LIST_HEAD(&link->s_node);
@@ -407,6 +635,25 @@ struct device_link *device_link_add(struct device *consumer,
 	link->flags = flags;
 	kref_init(&link->kref);
 
+	link->link_dev.class = &devlink_class;
+	device_set_pm_not_required(&link->link_dev);
+	dev_set_name(&link->link_dev, "%s--%s",
+		     dev_name(supplier), dev_name(consumer));
+	if (device_register(&link->link_dev)) {
+		put_device(consumer);
+		put_device(supplier);
+		kfree(link);
+		link = NULL;
+		goto out;
+	}
+
+	if (flags & DL_FLAG_PM_RUNTIME) {
+		if (flags & DL_FLAG_RPM_ACTIVE)
+			refcount_inc(&link->rpm_active);
+
+		pm_runtime_new_link(consumer);
+	}
+
 	/* Determine the initial link state. */
 	if (flags & DL_FLAG_STATELESS)
 		link->status = DL_STATE_NONE;
@@ -421,6 +668,17 @@ struct device_link *device_link_add(struct device *consumer,
 	    flags & DL_FLAG_PM_RUNTIME)
 		pm_runtime_resume(supplier);
 
+	list_add_tail_rcu(&link->s_node, &supplier->links.consumers);
+	list_add_tail_rcu(&link->c_node, &consumer->links.suppliers);
+
+	if (flags & DL_FLAG_SYNC_STATE_ONLY) {
+		dev_dbg(consumer,
+			"Linked as a sync state only consumer to %s\n",
+			dev_name(supplier));
+		goto out;
+	}
+
+reorder:
 	/*
 	 * Move the consumer and all of the devices depending on it to the end
 	 * of dpm_list and the devices_kset list.
@@ -430,12 +688,9 @@ struct device_link *device_link_add(struct device *consumer,
 	 */
 	device_reorder_to_tail(consumer, NULL);
 
-	list_add_tail_rcu(&link->s_node, &supplier->links.consumers);
-	list_add_tail_rcu(&link->c_node, &consumer->links.suppliers);
-
 	dev_dbg(consumer, "Linked as a consumer to %s\n", dev_name(supplier));
 
- out:
+out:
 	device_pm_unlock();
 	device_links_write_unlock();
 
@@ -446,22 +701,75 @@ struct device_link *device_link_add(struct device *consumer,
 }
 EXPORT_SYMBOL_GPL(device_link_add);
 
-static void device_link_free(struct device_link *link)
+/**
+ * device_link_wait_for_supplier - Add device to wait_for_suppliers list
+ * @consumer: Consumer device
+ *
+ * Marks the @consumer device as waiting for suppliers to become available by
+ * adding it to the wait_for_suppliers list. The consumer device will never be
+ * probed until it's removed from the wait_for_suppliers list.
+ *
+ * The caller is responsible for adding the links to the supplier devices once
+ * they are available and removing the @consumer device from the
+ * wait_for_suppliers list once links to all the suppliers have been created.
+ *
+ * This function is NOT meant to be called from the probe function of the
+ * consumer but rather from code that creates/adds the consumer device.
+ */
+static void device_link_wait_for_supplier(struct device *consumer,
+					  bool need_for_probe)
 {
-	while (refcount_dec_not_one(&link->rpm_active))
-		pm_runtime_put(link->supplier);
+	mutex_lock(&wfs_lock);
+	list_add_tail(&consumer->links.needs_suppliers, &wait_for_suppliers);
+	consumer->links.need_for_probe = need_for_probe;
+	mutex_unlock(&wfs_lock);
+}
 
-	put_device(link->consumer);
-	put_device(link->supplier);
-	kfree(link);
+static void device_link_wait_for_mandatory_supplier(struct device *consumer)
+{
+	device_link_wait_for_supplier(consumer, true);
+}
+
+static void device_link_wait_for_optional_supplier(struct device *consumer)
+{
+	device_link_wait_for_supplier(consumer, false);
+}
+
+/**
+ * device_link_add_missing_supplier_links - Add links from consumer devices to
+ *					    supplier devices, leaving any
+ *					    consumer with inactive suppliers on
+ *					    the wait_for_suppliers list
+ *
+ * Loops through all consumers waiting on suppliers and tries to add all their
+ * supplier links. If that succeeds, the consumer device is removed from
+ * wait_for_suppliers list. Otherwise, they are left in the wait_for_suppliers
+ * list.  Devices left on the wait_for_suppliers list will not be probed.
+ *
+ * The fwnode add_links callback is expected to return 0 if it has found and
+ * added all the supplier links for the consumer device. It should return an
+ * error if it isn't able to do so.
+ *
+ * The caller of device_link_wait_for_supplier() is expected to call this once
+ * it's aware of potential suppliers becoming available.
+ */
+static void device_link_add_missing_supplier_links(void)
+{
+	struct device *dev, *tmp;
+
+	mutex_lock(&wfs_lock);
+	list_for_each_entry_safe(dev, tmp, &wait_for_suppliers,
+				 links.needs_suppliers) {
+		int ret = fwnode_call_int_op(dev->fwnode, add_links, dev);
+		if (!ret)
+			list_del_init(&dev->links.needs_suppliers);
+		else if (ret != -ENODEV)
+			dev->links.need_for_probe = false;
+	}
+	mutex_unlock(&wfs_lock);
 }
 
 #ifdef CONFIG_SRCU
-static void __device_link_free_srcu(struct rcu_head *rhead)
-{
-	device_link_free(container_of(rhead, struct device_link, rcu_head));
-}
-
 static void __device_link_del(struct kref *kref)
 {
 	struct device_link *link = container_of(kref, struct device_link, kref);
@@ -473,7 +781,7 @@ static void __device_link_del(struct kref *kref)
 
 	list_del_rcu(&link->s_node);
 	list_del_rcu(&link->c_node);
-	call_srcu(&device_links_srcu, &link->rcu_head, __device_link_free_srcu);
+	device_unregister(&link->link_dev);
 }
 #else /* !CONFIG_SRCU */
 static void __device_link_del(struct kref *kref)
@@ -487,7 +795,7 @@ static void __device_link_del(struct kref *kref)
 
 	list_del(&link->s_node);
 	list_del(&link->c_node);
-	device_link_free(link);
+	device_unregister(&link->link_dev);
 }
 #endif /* !CONFIG_SRCU */
 
@@ -511,9 +819,7 @@ static void device_link_put_kref(struct device_link *link)
 void device_link_del(struct device_link *link)
 {
 	device_links_write_lock();
-	device_pm_lock();
 	device_link_put_kref(link);
-	device_pm_unlock();
 	device_links_write_unlock();
 }
 EXPORT_SYMBOL_GPL(device_link_del);
@@ -534,7 +840,6 @@ void device_link_remove(void *consumer, struct device *supplier)
 		return;
 
 	device_links_write_lock();
-	device_pm_lock();
 
 	list_for_each_entry(link, &supplier->links.consumers, s_node) {
 		if (link->consumer == consumer) {
@@ -543,7 +848,6 @@ void device_link_remove(void *consumer, struct device *supplier)
 		}
 	}
 
-	device_pm_unlock();
 	device_links_write_unlock();
 }
 EXPORT_SYMBOL_GPL(device_link_remove);
@@ -552,9 +856,17 @@ static void device_links_missing_supplier(struct device *dev)
 {
 	struct device_link *link;
 
-	list_for_each_entry(link, &dev->links.suppliers, c_node)
-		if (link->status == DL_STATE_CONSUMER_PROBE)
+	list_for_each_entry(link, &dev->links.suppliers, c_node) {
+		if (link->status != DL_STATE_CONSUMER_PROBE)
+			continue;
+
+		if (link->supplier->links.status == DL_DEV_DRIVER_BOUND) {
 			WRITE_ONCE(link->status, DL_STATE_AVAILABLE);
+		} else {
+			WARN_ON(!(link->flags & DL_FLAG_SYNC_STATE_ONLY));
+			WRITE_ONCE(link->status, DL_STATE_DORMANT);
+		}
+	}
 }
 
 /**
@@ -578,13 +890,26 @@ int device_links_check_suppliers(struct device *dev)
 	struct device_link *link;
 	int ret = 0;
 
+	/*
+	 * Device waiting for supplier to become available is not allowed to
+	 * probe.
+	 */
+	mutex_lock(&wfs_lock);
+	if (!list_empty(&dev->links.needs_suppliers) &&
+	    dev->links.need_for_probe) {
+		mutex_unlock(&wfs_lock);
+		return -EPROBE_DEFER;
+	}
+	mutex_unlock(&wfs_lock);
+
 	device_links_write_lock();
 
 	list_for_each_entry(link, &dev->links.suppliers, c_node) {
 		if (!(link->flags & DL_FLAG_MANAGED))
 			continue;
 
-		if (link->status != DL_STATE_AVAILABLE) {
+		if (link->status != DL_STATE_AVAILABLE &&
+		    !(link->flags & DL_FLAG_SYNC_STATE_ONLY)) {
 			device_links_missing_supplier(dev);
 			ret = -EPROBE_DEFER;
 			break;
@@ -598,6 +923,157 @@ int device_links_check_suppliers(struct device *dev)
 }
 
 /**
+ * __device_links_queue_sync_state - Queue a device for sync_state() callback
+ * @dev: Device to call sync_state() on
+ * @list: List head to queue the @dev on
+ *
+ * Queues a device for a sync_state() callback when the device links write lock
+ * isn't held. This allows the sync_state() execution flow to use device links
+ * APIs.  The caller must ensure this function is called with
+ * device_links_write_lock() held.
+ *
+ * This function does a get_device() to make sure the device is not freed while
+ * on this list.
+ *
+ * So the caller must also ensure that device_links_flush_sync_list() is called
+ * as soon as the caller releases device_links_write_lock().  This is necessary
+ * to make sure the sync_state() is called in a timely fashion and the
+ * put_device() is called on this device.
+ */
+static void __device_links_queue_sync_state(struct device *dev,
+					    struct list_head *list)
+{
+	struct device_link *link;
+
+	if (!dev_has_sync_state(dev))
+		return;
+	if (dev->state_synced)
+		return;
+
+	list_for_each_entry(link, &dev->links.consumers, s_node) {
+		if (!(link->flags & DL_FLAG_MANAGED))
+			continue;
+		if (link->status != DL_STATE_ACTIVE)
+			return;
+	}
+
+	/*
+	 * Set the flag here to avoid adding the same device to a list more
+	 * than once. This can happen if new consumers get added to the device
+	 * and probed before the list is flushed.
+	 */
+	dev->state_synced = true;
+
+	if (WARN_ON(!list_empty(&dev->links.defer_hook)))
+		return;
+
+	get_device(dev);
+	list_add_tail(&dev->links.defer_hook, list);
+}
+
+/**
+ * device_links_flush_sync_list - Call sync_state() on a list of devices
+ * @list: List of devices to call sync_state() on
+ * @dont_lock_dev: Device for which lock is already held by the caller
+ *
+ * Calls sync_state() on all the devices that have been queued for it. This
+ * function is used in conjunction with __device_links_queue_sync_state(). The
+ * @dont_lock_dev parameter is useful when this function is called from a
+ * context where a device lock is already held.
+ */
+static void device_links_flush_sync_list(struct list_head *list,
+					 struct device *dont_lock_dev)
+{
+	struct device *dev, *tmp;
+
+	list_for_each_entry_safe(dev, tmp, list, links.defer_hook) {
+		list_del_init(&dev->links.defer_hook);
+
+		if (dev != dont_lock_dev)
+			device_lock(dev);
+
+		if (dev->bus->sync_state)
+			dev->bus->sync_state(dev);
+		else if (dev->driver && dev->driver->sync_state)
+			dev->driver->sync_state(dev);
+
+		if (dev != dont_lock_dev)
+			device_unlock(dev);
+
+		put_device(dev);
+	}
+}
+
+void device_links_supplier_sync_state_pause(void)
+{
+	device_links_write_lock();
+	defer_sync_state_count++;
+	device_links_write_unlock();
+}
+
+void device_links_supplier_sync_state_resume(void)
+{
+	struct device *dev, *tmp;
+	LIST_HEAD(sync_list);
+
+	device_links_write_lock();
+	if (!defer_sync_state_count) {
+		WARN(true, "Unmatched sync_state pause/resume!");
+		goto out;
+	}
+	defer_sync_state_count--;
+	if (defer_sync_state_count)
+		goto out;
+
+	list_for_each_entry_safe(dev, tmp, &deferred_sync, links.defer_hook) {
+		/*
+		 * Delete from deferred_sync list before queuing it to
+		 * sync_list because defer_hook is used for both lists.
+		 */
+		list_del_init(&dev->links.defer_hook);
+		__device_links_queue_sync_state(dev, &sync_list);
+	}
+out:
+	device_links_write_unlock();
+
+	device_links_flush_sync_list(&sync_list, NULL);
+}
+
+static int sync_state_resume_initcall(void)
+{
+	device_links_supplier_sync_state_resume();
+	return 0;
+}
+late_initcall(sync_state_resume_initcall);
+
+static void __device_links_supplier_defer_sync(struct device *sup)
+{
+	if (list_empty(&sup->links.defer_hook) && dev_has_sync_state(sup))
+		list_add_tail(&sup->links.defer_hook, &deferred_sync);
+}
+
+static void device_link_drop_managed(struct device_link *link)
+{
+	link->flags &= ~DL_FLAG_MANAGED;
+	WRITE_ONCE(link->status, DL_STATE_NONE);
+	kref_put(&link->kref, __device_link_del);
+}
+
+static ssize_t waiting_for_supplier_show(struct device *dev,
+					 struct device_attribute *attr,
+					 char *buf)
+{
+	bool val;
+
+	device_lock(dev);
+	val = !list_empty(&dev->links.needs_suppliers)
+	      && dev->links.need_for_probe;
+	device_unlock(dev);
+	return sprintf(buf, "%u\n", val);
+}
+static DEVICE_ATTR_RO(waiting_for_supplier);
+
+/**
  * device_links_driver_bound - Update device links after probing its driver.
  * @dev: Device to update the links for.
  *
@@ -610,7 +1086,18 @@ int device_links_check_suppliers(struct device *dev)
  */
 void device_links_driver_bound(struct device *dev)
 {
-	struct device_link *link;
+	struct device_link *link, *ln;
+	LIST_HEAD(sync_list);
+
+	/*
+	 * If a device probes successfully, it's expected to have created all
+	 * the device links it needs to or make new device links as it needs
+	 * them. So, it no longer needs to wait on any suppliers.
+	 */
+	mutex_lock(&wfs_lock);
+	list_del_init(&dev->links.needs_suppliers);
+	mutex_unlock(&wfs_lock);
+	device_remove_file(dev, &dev_attr_waiting_for_supplier);
 
 	device_links_write_lock();
 
@@ -635,24 +1122,47 @@ void device_links_driver_bound(struct device *dev)
 			driver_deferred_probe_add(link->consumer);
 	}
 
-	list_for_each_entry(link, &dev->links.suppliers, c_node) {
+	if (defer_sync_state_count)
+		__device_links_supplier_defer_sync(dev);
+	else
+		__device_links_queue_sync_state(dev, &sync_list);
+
+	list_for_each_entry_safe(link, ln, &dev->links.suppliers, c_node) {
+		struct device *supplier;
+
 		if (!(link->flags & DL_FLAG_MANAGED))
 			continue;
 
-		WARN_ON(link->status != DL_STATE_CONSUMER_PROBE);
-		WRITE_ONCE(link->status, DL_STATE_ACTIVE);
+		supplier = link->supplier;
+		if (link->flags & DL_FLAG_SYNC_STATE_ONLY) {
+			/*
+			 * When DL_FLAG_SYNC_STATE_ONLY is set, it means no
+			 * other DL_MANAGED_LINK_FLAGS have been set. So, it's
+			 * save to drop the managed link completely.
+			 */
+			device_link_drop_managed(link);
+		} else {
+			WARN_ON(link->status != DL_STATE_CONSUMER_PROBE);
+			WRITE_ONCE(link->status, DL_STATE_ACTIVE);
+		}
+
+		/*
+		 * This needs to be done even for the deleted
+		 * DL_FLAG_SYNC_STATE_ONLY device link in case it was the last
+		 * device link that was preventing the supplier from getting a
+		 * sync_state() call.
+		 */
+		if (defer_sync_state_count)
+			__device_links_supplier_defer_sync(supplier);
+		else
+			__device_links_queue_sync_state(supplier, &sync_list);
 	}
 
 	dev->links.status = DL_DEV_DRIVER_BOUND;
 
 	device_links_write_unlock();
-}
 
-static void device_link_drop_managed(struct device_link *link)
-{
-	link->flags &= ~DL_FLAG_MANAGED;
-	WRITE_ONCE(link->status, DL_STATE_NONE);
-	kref_put(&link->kref, __device_link_del);
+	device_links_flush_sync_list(&sync_list, dev);
 }
 
 /**
@@ -675,11 +1185,21 @@ static void __device_links_no_driver(struct device *dev)
 		if (!(link->flags & DL_FLAG_MANAGED))
 			continue;
 
-		if (link->flags & DL_FLAG_AUTOREMOVE_CONSUMER)
+		if (link->flags & DL_FLAG_AUTOREMOVE_CONSUMER) {
 			device_link_drop_managed(link);
-		else if (link->status == DL_STATE_CONSUMER_PROBE ||
-			 link->status == DL_STATE_ACTIVE)
+			continue;
+		}
+
+		if (link->status != DL_STATE_CONSUMER_PROBE &&
+		    link->status != DL_STATE_ACTIVE)
+			continue;
+
+		if (link->supplier->links.status == DL_DEV_DRIVER_BOUND) {
 			WRITE_ONCE(link->status, DL_STATE_AVAILABLE);
+		} else {
+			WARN_ON(!(link->flags & DL_FLAG_SYNC_STATE_ONLY));
+			WRITE_ONCE(link->status, DL_STATE_DORMANT);
+		}
 	}
 
 	dev->links.status = DL_DEV_NO_DRIVER;
@@ -757,6 +1277,7 @@ void device_links_driver_cleanup(struct device *dev)
 		WRITE_ONCE(link->status, DL_STATE_DORMANT);
 	}
 
+	list_del_init(&dev->links.defer_hook);
 	__device_links_no_driver(dev);
 
 	device_links_write_unlock();
@@ -826,7 +1347,8 @@ void device_links_unbind_consumers(struct device *dev)
 	list_for_each_entry(link, &dev->links.consumers, s_node) {
 		enum device_link_state status;
 
-		if (!(link->flags & DL_FLAG_MANAGED))
+		if (!(link->flags & DL_FLAG_MANAGED) ||
+		    link->flags & DL_FLAG_SYNC_STATE_ONLY)
 			continue;
 
 		status = link->status;
@@ -862,6 +1384,13 @@ static void device_links_purge(struct device *dev)
 {
 	struct device_link *link, *ln;
 
+	if (dev->class == &devlink_class)
+		return;
+
+	mutex_lock(&wfs_lock);
+	list_del(&dev->links.needs_suppliers);
+	mutex_unlock(&wfs_lock);
+
 	/*
 	 * Delete all of the remaining links from this device to any other
 	 * devices (either consumers or suppliers).
@@ -882,6 +1411,134 @@ static void device_links_purge(struct device *dev)
 	device_links_write_unlock();
 }
 
+static void fw_devlink_link_device(struct device *dev)
+{
+	int fw_ret;
+
+	mutex_lock(&defer_fw_devlink_lock);
+	if (!defer_fw_devlink_count)
+		device_link_add_missing_supplier_links();
+
+	/*
+	 * The device's fwnode not having add_links() doesn't affect if other
+	 * consumers can find this device as a supplier.  So, this check is
+	 * intentionally placed after device_link_add_missing_supplier_links().
+	 */
+	if (!fwnode_has_op(dev->fwnode, add_links))
+		goto out;
+
+	/*
+	 * If fw_devlink is being deferred, assume all devices have mandatory
+	 * suppliers they need to link to later. Then, when the fw_devlink is
+	 * resumed, all these devices will get a chance to try and link to any
+	 * suppliers they have.
+	 */
+	if (!defer_fw_devlink_count) {
+		fw_ret = fwnode_call_int_op(dev->fwnode, add_links, dev);
+	} else {
+		fw_ret = -ENODEV;
+		/*
+		 * defer_hook is not used to add device to deferred_sync list
+		 * until device is bound. Since deferred fw devlink also blocks
+		 * probing, same list hook can be used for deferred_fw_devlink.
+		 */
+		list_add_tail(&dev->links.defer_hook, &deferred_fw_devlink);
+	}
+
+	if (fw_ret == -ENODEV)
+		device_link_wait_for_mandatory_supplier(dev);
+	else if (fw_ret)
+		device_link_wait_for_optional_supplier(dev);
+
+out:
+	mutex_unlock(&defer_fw_devlink_lock);
+}
+
+/**
+ * fw_devlink_pause - Pause parsing of fwnode to create device links
+ *
+ * Calling this function defers any fwnode parsing to create device links until
+ * fw_devlink_resume() is called. Both these functions are ref counted and the
+ * caller needs to match the calls.
+ *
+ * While fw_devlink is paused:
+ * - Any device that is added won't have its fwnode parsed to create device
+ *   links.
+ * - The probe of the device will also be deferred during this period.
+ * - Any devices that were already added, but waiting for suppliers won't be
+ *   able to link to newly added devices.
+ *
+ * Once fw_devlink_resume():
+ * - All the fwnodes that was not parsed will be parsed.
+ * - All the devices that were deferred probing will be reattempted if they
+ *   aren't waiting for any more suppliers.
+ *
+ * This pair of functions, is mainly meant to optimize the parsing of fwnodes
+ * when a lot of devices that need to link to each other are added in a short
+ * interval of time. For example, adding all the top level devices in a system.
+ *
+ * For example, if N devices are added and:
+ * - All the consumers are added before their suppliers
+ * - All the suppliers of the N devices are part of the N devices
+ *
+ * Then:
+ *
+ * - With the use of fw_devlink_pause() and fw_devlink_resume(), each device
+ *   will only need one parsing of its fwnode because it is guaranteed to find
+ *   all the supplier devices already registered and ready to link to. It won't
+ *   have to do another pass later to find one or more suppliers it couldn't
+ *   find in the first parse of the fwnode. So, we'll only need O(N) fwnode
+ *   parses.
+ *
+ * - Without the use of fw_devlink_pause() and fw_devlink_resume(), we would
+ *   end up doing O(N^2) parses of fwnodes because every device that's added is
+ *   guaranteed to trigger a parse of the fwnode of every device added before
+ *   it. This O(N^2) parse is made worse by the fact that when a fwnode of a
+ *   device is parsed, all it descendant devices might need to have their
+ *   fwnodes parsed too (even if the devices themselves aren't added).
+ */
+void fw_devlink_pause(void)
+{
+	mutex_lock(&defer_fw_devlink_lock);
+	defer_fw_devlink_count++;
+	mutex_unlock(&defer_fw_devlink_lock);
+}
+
+/** fw_devlink_resume - Resume parsing of fwnode to create device links
+ *
+ * This function is used in conjunction with fw_devlink_pause() and is ref
+ * counted. See documentation for fw_devlink_pause() for more details.
+ */
+void fw_devlink_resume(void)
+{
+	struct device *dev, *tmp;
+	LIST_HEAD(probe_list);
+
+	mutex_lock(&defer_fw_devlink_lock);
+	if (!defer_fw_devlink_count) {
+		WARN(true, "Unmatched fw_devlink pause/resume!");
+		goto out;
+	}
+
+	defer_fw_devlink_count--;
+	if (defer_fw_devlink_count)
+		goto out;
+
+	device_link_add_missing_supplier_links();
+	list_splice_tail_init(&deferred_fw_devlink, &probe_list);
+out:
+	mutex_unlock(&defer_fw_devlink_lock);
+
+	/*
+	 * bus_probe_device() can cause new devices to get added and they'll
+	 * try to grab defer_fw_devlink_lock. So, this needs to be done outside
+	 * the defer_fw_devlink_lock.
+	 */
+	list_for_each_entry_safe(dev, tmp, &probe_list, links.defer_hook) {
+		list_del_init(&dev->links.defer_hook);
+		bus_probe_device(dev);
+	}
+}
 /* Device links support end. */
 
 int (*platform_notify)(struct device *dev) = NULL;
@@ -1504,8 +2161,14 @@ static int device_add_attrs(struct device *dev)
 			goto err_remove_dev_groups;
 	}
 
+	error = device_create_file(dev, &dev_attr_waiting_for_supplier);
+	if (error)
+		goto err_remove_dev_online;
+
 	return 0;
 
+ err_remove_dev_online:
+	device_remove_file(dev, &dev_attr_online);
  err_remove_dev_groups:
 	device_remove_groups(dev, dev->groups);
  err_remove_type_groups:
@@ -1523,6 +2186,7 @@ static void device_remove_attrs(struct device *dev)
 	struct class *class = dev->class;
 	const struct device_type *type = dev->type;
 
+	device_remove_file(dev, &dev_attr_waiting_for_supplier);
 	device_remove_file(dev, &dev_attr_online);
 	device_remove_groups(dev, dev->groups);
 
@@ -1726,6 +2390,8 @@ void device_initialize(struct device *dev)
 #endif
 	INIT_LIST_HEAD(&dev->links.consumers);
 	INIT_LIST_HEAD(&dev->links.suppliers);
+	INIT_LIST_HEAD(&dev->links.needs_suppliers);
+	INIT_LIST_HEAD(&dev->links.defer_hook);
 	dev->links.status = DL_DEV_NO_DRIVER;
 }
 EXPORT_SYMBOL_GPL(device_initialize);
@@ -2212,6 +2878,24 @@ int device_add(struct device *dev)
 					     BUS_NOTIFY_ADD_DEVICE, dev);
 
 	kobject_uevent(&dev->kobj, KOBJ_ADD);
+
+	/*
+	 * Check if any of the other devices (consumers) have been waiting for
+	 * this device (supplier) to be added so that they can create a device
+	 * link to it.
+	 *
+	 * This needs to happen after device_pm_add() because device_link_add()
+	 * requires the supplier be registered before it's called.
+	 *
+	 * But this also needs to happen before bus_probe_device() to make sure
+	 * waiting consumers can link to it before the driver is bound to the
+	 * device and the driver sync_state callback is called for this device.
+	 */
+	if (dev->fwnode && !dev->fwnode->dev) {
+		dev->fwnode->dev = dev;
+		fw_devlink_link_device(dev);
+	}
+
 	bus_probe_device(dev);
 	if (parent)
 		klist_add_tail(&dev->p->knode_parent,
@@ -2356,6 +3040,9 @@ void device_del(struct device *dev)
 	kill_device(dev);
 	device_unlock(dev);
 
+	if (dev->fwnode && dev->fwnode->dev == dev)
+		dev->fwnode->dev = NULL;
+
 	/* Notify clients of device removal.  This call must come
 	 * before dpm_sysfs_remove().
 	 */
diff --git a/drivers/base/dd.c b/drivers/base/dd.c
index 32823f3..14ab1e9 100644
--- a/drivers/base/dd.c
+++ b/drivers/base/dd.c
@@ -489,6 +489,18 @@ static void driver_deferred_probe_add_trigger(struct device *dev,
 		driver_deferred_probe_trigger();
 }
 
+static ssize_t state_synced_show(struct device *dev,
+				 struct device_attribute *attr, char *buf)
+{
+	bool val;
+
+	device_lock(dev);
+	val = dev->state_synced;
+	device_unlock(dev);
+	return sprintf(buf, "%u\n", val);
+}
+static DEVICE_ATTR_RO(state_synced);
+
 static int really_probe(struct device *dev, struct device_driver *drv)
 {
 	int ret = -EPROBE_DEFER;
@@ -563,9 +575,16 @@ static int really_probe(struct device *dev, struct device_driver *drv)
 		goto dev_groups_failed;
 	}
 
+	if (dev_has_sync_state(dev) &&
+	    device_create_file(dev, &dev_attr_state_synced)) {
+		dev_err(dev, "state_synced sysfs add failed\n");
+		goto dev_sysfs_state_synced_failed;
+	}
+
 	if (test_remove) {
 		test_remove = false;
 
+		device_remove_file(dev, &dev_attr_state_synced);
 		device_remove_groups(dev, drv->dev_groups);
 
 		if (dev->bus->remove)
@@ -595,6 +614,8 @@ static int really_probe(struct device *dev, struct device_driver *drv)
 		 drv->bus->name, __func__, dev_name(dev), drv->name);
 	goto done;
 
+dev_sysfs_state_synced_failed:
+	device_remove_groups(dev, drv->dev_groups);
 dev_groups_failed:
 	if (dev->bus->remove)
 		dev->bus->remove(dev);
@@ -1133,6 +1154,7 @@ static void __device_release_driver(struct device *dev, struct device *parent)
 
 		pm_runtime_put_sync(dev);
 
+		device_remove_file(dev, &dev_attr_state_synced);
 		device_remove_groups(dev, drv->dev_groups);
 
 		if (dev->bus && dev->bus->remove)
diff --git a/drivers/base/firmware_loader/Kconfig b/drivers/base/firmware_loader/Kconfig
index 3f9e274..33e6552 100644
--- a/drivers/base/firmware_loader/Kconfig
+++ b/drivers/base/firmware_loader/Kconfig
@@ -169,5 +169,17 @@
 	  be compressed with either none or crc32 integrity check type (pass
 	  "-C crc32" option to xz command).
 
+config FW_CACHE
+	bool "Enable firmware caching during suspend"
+	depends on PM_SLEEP
+	default y if PM_SLEEP
+	help
+	  Because firmware caching generates uevent messages that are sent
+	  over a netlink socket, it can prevent suspend on many platforms.
+	  It is also not always useful, so on such platforms we have the
+	  option.
+
+	  If unsure, say Y.
+
 endif # FW_LOADER
 endmenu
diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c
index 95d21b4..332aae4 100644
--- a/drivers/base/firmware_loader/main.c
+++ b/drivers/base/firmware_loader/main.c
@@ -51,7 +51,7 @@ struct firmware_cache {
 	struct list_head head;
 	int state;
 
-#ifdef CONFIG_PM_SLEEP
+#ifdef CONFIG_FW_CACHE
 	/*
 	 * Names of firmware images which have been cached successfully
 	 * will be added into the below list so that device uncache
@@ -561,7 +561,7 @@ static void fw_set_page_data(struct fw_priv *fw_priv, struct firmware *fw)
 		 (unsigned int)fw_priv->size);
 }
 
-#ifdef CONFIG_PM_SLEEP
+#ifdef CONFIG_FW_CACHE
 static void fw_name_devm_release(struct device *dev, void *res)
 {
 	struct fw_name_devm *fwn = res;
@@ -1051,7 +1051,7 @@ request_firmware_nowait(
 }
 EXPORT_SYMBOL(request_firmware_nowait);
 
-#ifdef CONFIG_PM_SLEEP
+#ifdef CONFIG_FW_CACHE
 static ASYNC_DOMAIN_EXCLUSIVE(fw_cache_domain);
 
 /**
diff --git a/drivers/base/node.c b/drivers/base/node.c
index 9c6e6a7..52609c3 100644
--- a/drivers/base/node.c
+++ b/drivers/base/node.c
@@ -415,6 +415,9 @@ static ssize_t node_read_meminfo(struct device *dev,
 		       "Node %d AnonPages:      %8lu kB\n"
 		       "Node %d Shmem:          %8lu kB\n"
 		       "Node %d KernelStack:    %8lu kB\n"
+#ifdef CONFIG_SHADOW_CALL_STACK
+		       "Node %d ShadowCallStack:%8lu kB\n"
+#endif
 		       "Node %d PageTables:     %8lu kB\n"
 		       "Node %d NFS_Unstable:   %8lu kB\n"
 		       "Node %d Bounce:         %8lu kB\n"
@@ -438,6 +441,9 @@ static ssize_t node_read_meminfo(struct device *dev,
 		       nid, K(node_page_state(pgdat, NR_ANON_MAPPED)),
 		       nid, K(i.sharedram),
 		       nid, sum_zone_node_page_state(nid, NR_KERNEL_STACK_KB),
+#ifdef CONFIG_SHADOW_CALL_STACK
+		       nid, sum_zone_node_page_state(nid, NR_KERNEL_SCS_BYTES) / 1024,
+#endif
 		       nid, K(sum_zone_node_page_state(nid, NR_PAGETABLE)),
 		       nid, K(node_page_state(pgdat, NR_UNSTABLE_NFS)),
 		       nid, K(sum_zone_node_page_state(nid, NR_BOUNCE)),
diff --git a/drivers/base/power/Makefile b/drivers/base/power/Makefile
index ec5bb19..8fdd007 100644
--- a/drivers/base/power/Makefile
+++ b/drivers/base/power/Makefile
@@ -4,5 +4,6 @@
 obj-$(CONFIG_PM_TRACE_RTC)	+= trace.o
 obj-$(CONFIG_PM_GENERIC_DOMAINS)	+=  domain.o domain_governor.o
 obj-$(CONFIG_HAVE_CLK)	+= clock_ops.o
+obj-$(CONFIG_PM_QOS_KUNIT_TEST) += qos-test.o
 
 ccflags-$(CONFIG_DEBUG_DRIVER) := -DDEBUG
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index 23af545..0c309fa 100644
--- a/drivers/base/power/main.c
+++ b/drivers/base/power/main.c
@@ -34,6 +34,7 @@
 #include <linux/cpuidle.h>
 #include <linux/devfreq.h>
 #include <linux/timer.h>
+#include <linux/wakeup_reason.h>
 
 #include "../base.h"
 #include "power.h"
@@ -1341,6 +1342,8 @@ static int __device_suspend_noirq(struct device *dev, pm_message_t state, bool a
 	error = dpm_run_callback(callback, dev, state, info);
 	if (error) {
 		async_error = error;
+		log_suspend_abort_reason("Callback failed on %s in %pS returned %d",
+					 dev_name(dev), callback, error);
 		goto Complete;
 	}
 
@@ -1548,6 +1551,8 @@ static int __device_suspend_late(struct device *dev, pm_message_t state, bool as
 	error = dpm_run_callback(callback, dev, state, info);
 	if (error) {
 		async_error = error;
+		log_suspend_abort_reason("Callback failed on %s in %pS returned %d",
+					 dev_name(dev), callback, error);
 		goto Complete;
 	}
 	dpm_propagate_wakeup_to_parent(dev);
@@ -1818,6 +1823,9 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)
 
 		dpm_propagate_wakeup_to_parent(dev);
 		dpm_clear_superiors_direct_complete(dev);
+	} else {
+		log_suspend_abort_reason("Callback failed on %s in %pS returned %d",
+					 dev_name(dev), callback, error);
 	}
 
 	device_unlock(dev);
@@ -2027,6 +2035,9 @@ int dpm_prepare(pm_message_t state)
 			}
 			pr_info("Device %s not prepared for power transition: code %d\n",
 				dev_name(dev), error);
+			log_suspend_abort_reason("Device %s not prepared for power transition: code %d",
+						 dev_name(dev), error);
+			dpm_save_failed_dev(dev_name(dev));
 			put_device(dev);
 			break;
 		}
diff --git a/drivers/base/power/qos-test.c b/drivers/base/power/qos-test.c
new file mode 100644
index 0000000..79fc6c4
--- /dev/null
+++ b/drivers/base/power/qos-test.c
@@ -0,0 +1,117 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2019 NXP
+ */
+#include <kunit/test.h>
+#include <linux/pm_qos.h>
+
+/* Basic test for aggregating two "min" requests */
+static void freq_qos_test_min(struct kunit *test)
+{
+	struct freq_constraints	qos;
+	struct freq_qos_request	req1, req2;
+	int ret;
+
+	freq_constraints_init(&qos);
+	memset(&req1, 0, sizeof(req1));
+	memset(&req2, 0, sizeof(req2));
+
+	ret = freq_qos_add_request(&qos, &req1, FREQ_QOS_MIN, 1000);
+	KUNIT_EXPECT_EQ(test, ret, 1);
+	ret = freq_qos_add_request(&qos, &req2, FREQ_QOS_MIN, 2000);
+	KUNIT_EXPECT_EQ(test, ret, 1);
+
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MIN), 2000);
+
+	ret = freq_qos_remove_request(&req2);
+	KUNIT_EXPECT_EQ(test, ret, 1);
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MIN), 1000);
+
+	ret = freq_qos_remove_request(&req1);
+	KUNIT_EXPECT_EQ(test, ret, 1);
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MIN),
+			FREQ_QOS_MIN_DEFAULT_VALUE);
+}
+
+/* Test that requests for MAX_DEFAULT_VALUE have no effect */
+static void freq_qos_test_maxdef(struct kunit *test)
+{
+	struct freq_constraints	qos;
+	struct freq_qos_request	req1, req2;
+	int ret;
+
+	freq_constraints_init(&qos);
+	memset(&req1, 0, sizeof(req1));
+	memset(&req2, 0, sizeof(req2));
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MAX),
+			FREQ_QOS_MAX_DEFAULT_VALUE);
+
+	ret = freq_qos_add_request(&qos, &req1, FREQ_QOS_MAX,
+			FREQ_QOS_MAX_DEFAULT_VALUE);
+	KUNIT_EXPECT_EQ(test, ret, 0);
+	ret = freq_qos_add_request(&qos, &req2, FREQ_QOS_MAX,
+			FREQ_QOS_MAX_DEFAULT_VALUE);
+	KUNIT_EXPECT_EQ(test, ret, 0);
+
+	/* Add max 1000 */
+	ret = freq_qos_update_request(&req1, 1000);
+	KUNIT_EXPECT_EQ(test, ret, 1);
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MAX), 1000);
+
+	/* Add max 2000, no impact */
+	ret = freq_qos_update_request(&req2, 2000);
+	KUNIT_EXPECT_EQ(test, ret, 0);
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MAX), 1000);
+
+	/* Remove max 1000, new max 2000 */
+	ret = freq_qos_remove_request(&req1);
+	KUNIT_EXPECT_EQ(test, ret, 1);
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MAX), 2000);
+}
+
+/*
+ * Test that a freq_qos_request can be added again after removal
+ *
+ * This issue was solved by commit 05ff1ba412fd ("PM: QoS: Invalidate frequency
+ * QoS requests after removal")
+ */
+static void freq_qos_test_readd(struct kunit *test)
+{
+	struct freq_constraints	qos;
+	struct freq_qos_request	req;
+	int ret;
+
+	freq_constraints_init(&qos);
+	memset(&req, 0, sizeof(req));
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MIN),
+			FREQ_QOS_MIN_DEFAULT_VALUE);
+
+	/* Add */
+	ret = freq_qos_add_request(&qos, &req, FREQ_QOS_MIN, 1000);
+	KUNIT_EXPECT_EQ(test, ret, 1);
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MIN), 1000);
+
+	/* Remove */
+	ret = freq_qos_remove_request(&req);
+	KUNIT_EXPECT_EQ(test, ret, 1);
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MIN),
+			FREQ_QOS_MIN_DEFAULT_VALUE);
+
+	/* Add again */
+	ret = freq_qos_add_request(&qos, &req, FREQ_QOS_MIN, 2000);
+	KUNIT_EXPECT_EQ(test, ret, 1);
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MIN), 2000);
+}
+
+static struct kunit_case pm_qos_test_cases[] = {
+	KUNIT_CASE(freq_qos_test_min),
+	KUNIT_CASE(freq_qos_test_maxdef),
+	KUNIT_CASE(freq_qos_test_readd),
+	{},
+};
+
+static struct kunit_suite pm_qos_test_module = {
+	.name = "qos-kunit-test",
+	.test_cases = pm_qos_test_cases,
+};
+kunit_test_suites(&pm_qos_test_module);
diff --git a/drivers/base/power/qos.c b/drivers/base/power/qos.c
index 350dcaf..8e93167 100644
--- a/drivers/base/power/qos.c
+++ b/drivers/base/power/qos.c
@@ -115,10 +115,20 @@ s32 dev_pm_qos_read_value(struct device *dev, enum dev_pm_qos_req_type type)
 
 	spin_lock_irqsave(&dev->power.lock, flags);
 
-	if (type == DEV_PM_QOS_RESUME_LATENCY) {
+	switch (type) {
+	case DEV_PM_QOS_RESUME_LATENCY:
 		ret = IS_ERR_OR_NULL(qos) ? PM_QOS_RESUME_LATENCY_NO_CONSTRAINT
 			: pm_qos_read_value(&qos->resume_latency);
-	} else {
+		break;
+	case DEV_PM_QOS_MIN_FREQUENCY:
+		ret = IS_ERR_OR_NULL(qos) ? PM_QOS_MIN_FREQUENCY_DEFAULT_VALUE
+			: freq_qos_read_value(&qos->freq, FREQ_QOS_MIN);
+		break;
+	case DEV_PM_QOS_MAX_FREQUENCY:
+		ret = IS_ERR_OR_NULL(qos) ? PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE
+			: freq_qos_read_value(&qos->freq, FREQ_QOS_MAX);
+		break;
+	default:
 		WARN_ON(1);
 		ret = 0;
 	}
@@ -159,6 +169,10 @@ static int apply_constraint(struct dev_pm_qos_request *req,
 			req->dev->power.set_latency_tolerance(req->dev, value);
 		}
 		break;
+	case DEV_PM_QOS_MIN_FREQUENCY:
+	case DEV_PM_QOS_MAX_FREQUENCY:
+		ret = freq_qos_apply(&req->data.freq, action, value);
+		break;
 	case DEV_PM_QOS_FLAGS:
 		ret = pm_qos_update_flags(&qos->flags, &req->data.flr,
 					  action, value);
@@ -209,6 +223,8 @@ static int dev_pm_qos_constraints_allocate(struct device *dev)
 	c->no_constraint_value = PM_QOS_LATENCY_TOLERANCE_NO_CONSTRAINT;
 	c->type = PM_QOS_MIN;
 
+	freq_constraints_init(&qos->freq);
+
 	INIT_LIST_HEAD(&qos->flags.list);
 
 	spin_lock_irq(&dev->power.lock);
@@ -269,6 +285,20 @@ void dev_pm_qos_constraints_destroy(struct device *dev)
 		memset(req, 0, sizeof(*req));
 	}
 
+	c = &qos->freq.min_freq;
+	plist_for_each_entry_safe(req, tmp, &c->list, data.freq.pnode) {
+		apply_constraint(req, PM_QOS_REMOVE_REQ,
+				 PM_QOS_MIN_FREQUENCY_DEFAULT_VALUE);
+		memset(req, 0, sizeof(*req));
+	}
+
+	c = &qos->freq.max_freq;
+	plist_for_each_entry_safe(req, tmp, &c->list, data.freq.pnode) {
+		apply_constraint(req, PM_QOS_REMOVE_REQ,
+				 PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE);
+		memset(req, 0, sizeof(*req));
+	}
+
 	f = &qos->flags;
 	list_for_each_entry_safe(req, tmp, &f->list, data.flr.node) {
 		apply_constraint(req, PM_QOS_REMOVE_REQ, PM_QOS_DEFAULT_VALUE);
@@ -314,11 +344,22 @@ static int __dev_pm_qos_add_request(struct device *dev,
 		ret = dev_pm_qos_constraints_allocate(dev);
 
 	trace_dev_pm_qos_add_request(dev_name(dev), type, value);
-	if (!ret) {
-		req->dev = dev;
-		req->type = type;
+	if (ret)
+		return ret;
+
+	req->dev = dev;
+	req->type = type;
+	if (req->type == DEV_PM_QOS_MIN_FREQUENCY)
+		ret = freq_qos_add_request(&dev->power.qos->freq,
+					   &req->data.freq,
+					   FREQ_QOS_MIN, value);
+	else if (req->type == DEV_PM_QOS_MAX_FREQUENCY)
+		ret = freq_qos_add_request(&dev->power.qos->freq,
+					   &req->data.freq,
+					   FREQ_QOS_MAX, value);
+	else
 		ret = apply_constraint(req, PM_QOS_ADD_REQ, value);
-	}
+
 	return ret;
 }
 
@@ -382,6 +423,10 @@ static int __dev_pm_qos_update_request(struct dev_pm_qos_request *req,
 	case DEV_PM_QOS_LATENCY_TOLERANCE:
 		curr_value = req->data.pnode.prio;
 		break;
+	case DEV_PM_QOS_MIN_FREQUENCY:
+	case DEV_PM_QOS_MAX_FREQUENCY:
+		curr_value = req->data.freq.pnode.prio;
+		break;
 	case DEV_PM_QOS_FLAGS:
 		curr_value = req->data.flr.flags;
 		break;
@@ -507,6 +552,14 @@ int dev_pm_qos_add_notifier(struct device *dev, struct notifier_block *notifier,
 		ret = blocking_notifier_chain_register(dev->power.qos->resume_latency.notifiers,
 						       notifier);
 		break;
+	case DEV_PM_QOS_MIN_FREQUENCY:
+		ret = freq_qos_add_notifier(&dev->power.qos->freq,
+					    FREQ_QOS_MIN, notifier);
+		break;
+	case DEV_PM_QOS_MAX_FREQUENCY:
+		ret = freq_qos_add_notifier(&dev->power.qos->freq,
+					    FREQ_QOS_MAX, notifier);
+		break;
 	default:
 		WARN_ON(1);
 		ret = -EINVAL;
@@ -546,6 +599,14 @@ int dev_pm_qos_remove_notifier(struct device *dev,
 		ret = blocking_notifier_chain_unregister(dev->power.qos->resume_latency.notifiers,
 							 notifier);
 		break;
+	case DEV_PM_QOS_MIN_FREQUENCY:
+		ret = freq_qos_remove_notifier(&dev->power.qos->freq,
+					       FREQ_QOS_MIN, notifier);
+		break;
+	case DEV_PM_QOS_MAX_FREQUENCY:
+		ret = freq_qos_remove_notifier(&dev->power.qos->freq,
+					       FREQ_QOS_MAX, notifier);
+		break;
 	default:
 		WARN_ON(1);
 		ret = -EINVAL;
diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c
index 92f0960..911f1e8 100644
--- a/drivers/base/power/wakeup.c
+++ b/drivers/base/power/wakeup.c
@@ -15,6 +15,9 @@
 #include <linux/seq_file.h>
 #include <linux/debugfs.h>
 #include <linux/pm_wakeirq.h>
+#include <linux/irq.h>
+#include <linux/irqdesc.h>
+#include <linux/wakeup_reason.h>
 #include <trace/events/power.h>
 
 #include "power.h"
@@ -815,6 +818,37 @@ void pm_wakeup_dev_event(struct device *dev, unsigned int msec, bool hard)
 }
 EXPORT_SYMBOL_GPL(pm_wakeup_dev_event);
 
+void pm_get_active_wakeup_sources(char *pending_wakeup_source, size_t max)
+{
+	struct wakeup_source *ws, *last_active_ws = NULL;
+	int len = 0;
+	bool active = false;
+
+	rcu_read_lock();
+	list_for_each_entry_rcu(ws, &wakeup_sources, entry) {
+		if (ws->active && len < max) {
+			if (!active)
+				len += scnprintf(pending_wakeup_source, max,
+						"Pending Wakeup Sources: ");
+			len += scnprintf(pending_wakeup_source + len, max - len,
+				"%s ", ws->name);
+			active = true;
+		} else if (!active &&
+			   (!last_active_ws ||
+			    ktime_to_ns(ws->last_time) >
+			    ktime_to_ns(last_active_ws->last_time))) {
+			last_active_ws = ws;
+		}
+	}
+	if (!active && last_active_ws) {
+		scnprintf(pending_wakeup_source, max,
+				"Last active Wakeup Source: %s",
+				last_active_ws->name);
+	}
+	rcu_read_unlock();
+}
+EXPORT_SYMBOL_GPL(pm_get_active_wakeup_sources);
+
 void pm_print_active_wakeup_sources(void)
 {
 	struct wakeup_source *ws;
@@ -853,6 +887,7 @@ bool pm_wakeup_pending(void)
 {
 	unsigned long flags;
 	bool ret = false;
+	char suspend_abort[MAX_SUSPEND_ABORT_LEN];
 
 	raw_spin_lock_irqsave(&events_lock, flags);
 	if (events_check_enabled) {
@@ -867,6 +902,10 @@ bool pm_wakeup_pending(void)
 	if (ret) {
 		pm_pr_dbg("Wakeup pending, aborting suspend\n");
 		pm_print_active_wakeup_sources();
+		pm_get_active_wakeup_sources(suspend_abort,
+					     MAX_SUSPEND_ABORT_LEN);
+		log_suspend_abort_reason(suspend_abort);
+		pr_info("PM: %s\n", suspend_abort);
 	}
 
 	return ret || atomic_read(&pm_abort_suspend) > 0;
@@ -894,6 +933,18 @@ void pm_wakeup_clear(bool reset)
 void pm_system_irq_wakeup(unsigned int irq_number)
 {
 	if (pm_wakeup_irq == 0) {
+		struct irq_desc *desc;
+		const char *name = "null";
+
+		desc = irq_to_desc(irq_number);
+		if (desc == NULL)
+			name = "stray irq";
+		else if (desc->action && desc->action->name)
+			name = desc->action->name;
+
+		log_irq_wakeup_reason(irq_number);
+		pr_warn("%s: %d triggered %s\n", __func__, irq_number, name);
+
 		pm_wakeup_irq = irq_number;
 		pm_system_wakeup();
 	}
diff --git a/drivers/base/soc.c b/drivers/base/soc.c
index 7c0c5ca..4af11a4 100644
--- a/drivers/base/soc.c
+++ b/drivers/base/soc.c
@@ -104,15 +104,12 @@ static const struct attribute_group soc_attr_group = {
 	.is_visible = soc_attribute_mode,
 };
 
-static const struct attribute_group *soc_attr_groups[] = {
-	&soc_attr_group,
-	NULL,
-};
-
 static void soc_release(struct device *dev)
 {
 	struct soc_device *soc_dev = container_of(dev, struct soc_device, dev);
 
+	ida_simple_remove(&soc_ida, soc_dev->soc_dev_num);
+	kfree(soc_dev->dev.groups);
 	kfree(soc_dev);
 }
 
@@ -121,6 +118,7 @@ static struct soc_device_attribute *early_soc_dev_attr;
 struct soc_device *soc_device_register(struct soc_device_attribute *soc_dev_attr)
 {
 	struct soc_device *soc_dev;
+	const struct attribute_group **soc_attr_groups;
 	int ret;
 
 	if (!soc_bus_type.p) {
@@ -136,10 +134,18 @@ struct soc_device *soc_device_register(struct soc_device_attribute *soc_dev_attr
 		goto out1;
 	}
 
+	soc_attr_groups = kcalloc(3, sizeof(*soc_attr_groups), GFP_KERNEL);
+	if (!soc_attr_groups) {
+		ret = -ENOMEM;
+		goto out2;
+	}
+	soc_attr_groups[0] = &soc_attr_group;
+	soc_attr_groups[1] = soc_dev_attr->custom_attr_group;
+
 	/* Fetch a unique (reclaimable) SOC ID. */
 	ret = ida_simple_get(&soc_ida, 0, 0, GFP_KERNEL);
 	if (ret < 0)
-		goto out2;
+		goto out3;
 	soc_dev->soc_dev_num = ret;
 
 	soc_dev->attr = soc_dev_attr;
@@ -150,15 +156,15 @@ struct soc_device *soc_device_register(struct soc_device_attribute *soc_dev_attr
 	dev_set_name(&soc_dev->dev, "soc%d", soc_dev->soc_dev_num);
 
 	ret = device_register(&soc_dev->dev);
-	if (ret)
-		goto out3;
+	if (ret) {
+		put_device(&soc_dev->dev);
+		return ERR_PTR(ret);
+	}
 
 	return soc_dev;
 
 out3:
-	ida_simple_remove(&soc_ida, soc_dev->soc_dev_num);
-	put_device(&soc_dev->dev);
-	soc_dev = NULL;
+	kfree(soc_attr_groups);
 out2:
 	kfree(soc_dev);
 out1:
@@ -169,8 +175,6 @@ EXPORT_SYMBOL_GPL(soc_device_register);
 /* Ensure soc_dev->attr is freed prior to calling soc_device_unregister. */
 void soc_device_unregister(struct soc_device *soc_dev)
 {
-	ida_simple_remove(&soc_ida, soc_dev->soc_dev_num);
-
 	device_unregister(&soc_dev->dev);
 	early_soc_dev_attr = NULL;
 }
diff --git a/drivers/base/syscore.c b/drivers/base/syscore.c
index 0d346a3..f3ca20cc 100644
--- a/drivers/base/syscore.c
+++ b/drivers/base/syscore.c
@@ -10,6 +10,7 @@
 #include <linux/module.h>
 #include <linux/suspend.h>
 #include <trace/events/power.h>
+#include <linux/wakeup_reason.h>
 
 static LIST_HEAD(syscore_ops_list);
 static DEFINE_MUTEX(syscore_ops_lock);
@@ -74,7 +75,9 @@ int syscore_suspend(void)
 	return 0;
 
  err_out:
-	pr_err("PM: System core suspend callback %pS failed.\n", ops->suspend);
+	log_suspend_abort_reason("System core suspend callback %pS failed",
+		ops->suspend);
+	pr_err("PM: System core suspend callback %pF failed.\n", ops->suspend);
 
 	list_for_each_entry_continue(ops, &syscore_ops_list, node)
 		if (ops->resume)
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index ffbe792..f0c1b46 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -214,7 +214,8 @@ static void __loop_update_dio(struct loop_device *lo, bool dio)
 	 * LO_FLAGS_READ_ONLY, both are set from kernel, and losetup
 	 * will get updated by ioctl(LOOP_GET_STATUS)
 	 */
-	blk_mq_freeze_queue(lo->lo_queue);
+	if (lo->lo_state == Lo_bound)
+		blk_mq_freeze_queue(lo->lo_queue);
 	lo->use_dio = use_dio;
 	if (use_dio) {
 		blk_queue_flag_clear(QUEUE_FLAG_NOMERGES, lo->lo_queue);
@@ -223,27 +224,39 @@ static void __loop_update_dio(struct loop_device *lo, bool dio)
 		blk_queue_flag_set(QUEUE_FLAG_NOMERGES, lo->lo_queue);
 		lo->lo_flags &= ~LO_FLAGS_DIRECT_IO;
 	}
-	blk_mq_unfreeze_queue(lo->lo_queue);
+	if (lo->lo_state == Lo_bound)
+		blk_mq_unfreeze_queue(lo->lo_queue);
 }
 
+/**
+ * loop_validate_block_size() - validates the passed in block size
+ * @bsize: size to validate
+ */
 static int
-figure_loop_size(struct loop_device *lo, loff_t offset, loff_t sizelimit)
+loop_validate_block_size(unsigned short bsize)
 {
-	loff_t size = get_size(offset, sizelimit, lo->lo_backing_file);
-	sector_t x = (sector_t)size;
+	if (bsize < 512 || bsize > PAGE_SIZE || !is_power_of_2(bsize))
+		return -EINVAL;
+
+	return 0;
+}
+
+/**
+ * loop_set_size() - sets device size and notifies userspace
+ * @lo: struct loop_device to set the size for
+ * @size: new size of the loop device
+ *
+ * Callers must validate that the size passed into this function fits into
+ * a sector_t, eg using loop_validate_size()
+ */
+static void loop_set_size(struct loop_device *lo, loff_t size)
+{
 	struct block_device *bdev = lo->lo_device;
 
-	if (unlikely((loff_t)x != size))
-		return -EFBIG;
-	if (lo->lo_offset != offset)
-		lo->lo_offset = offset;
-	if (lo->lo_sizelimit != sizelimit)
-		lo->lo_sizelimit = sizelimit;
-	set_capacity(lo->lo_disk, x);
-	bd_set_size(bdev, (loff_t)get_capacity(bdev->bd_disk) << 9);
+	set_capacity(lo->lo_disk, size);
+	bd_set_size(bdev, size << SECTOR_SHIFT);
 	/* let user-space know about the new size */
 	kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
-	return 0;
 }
 
 static inline int
@@ -951,132 +964,6 @@ static void loop_update_rotational(struct loop_device *lo)
 		blk_queue_flag_clear(QUEUE_FLAG_NONROT, q);
 }
 
-static int loop_set_fd(struct loop_device *lo, fmode_t mode,
-		       struct block_device *bdev, unsigned int arg)
-{
-	struct file	*file;
-	struct inode	*inode;
-	struct address_space *mapping;
-	struct block_device *claimed_bdev = NULL;
-	int		lo_flags = 0;
-	int		error;
-	loff_t		size;
-	bool		partscan;
-
-	/* This is safe, since we have a reference from open(). */
-	__module_get(THIS_MODULE);
-
-	error = -EBADF;
-	file = fget(arg);
-	if (!file)
-		goto out;
-
-	/*
-	 * If we don't hold exclusive handle for the device, upgrade to it
-	 * here to avoid changing device under exclusive owner.
-	 */
-	if (!(mode & FMODE_EXCL)) {
-		claimed_bdev = bd_start_claiming(bdev, loop_set_fd);
-		if (IS_ERR(claimed_bdev)) {
-			error = PTR_ERR(claimed_bdev);
-			goto out_putf;
-		}
-	}
-
-	error = mutex_lock_killable(&loop_ctl_mutex);
-	if (error)
-		goto out_bdev;
-
-	error = -EBUSY;
-	if (lo->lo_state != Lo_unbound)
-		goto out_unlock;
-
-	error = loop_validate_file(file, bdev);
-	if (error)
-		goto out_unlock;
-
-	mapping = file->f_mapping;
-	inode = mapping->host;
-
-	if (!(file->f_mode & FMODE_WRITE) || !(mode & FMODE_WRITE) ||
-	    !file->f_op->write_iter)
-		lo_flags |= LO_FLAGS_READ_ONLY;
-
-	error = -EFBIG;
-	size = get_loop_size(lo, file);
-	if ((loff_t)(sector_t)size != size)
-		goto out_unlock;
-	error = loop_prepare_queue(lo);
-	if (error)
-		goto out_unlock;
-
-	error = 0;
-
-	set_device_ro(bdev, (lo_flags & LO_FLAGS_READ_ONLY) != 0);
-
-	lo->use_dio = false;
-	lo->lo_device = bdev;
-	lo->lo_flags = lo_flags;
-	lo->lo_backing_file = file;
-	lo->transfer = NULL;
-	lo->ioctl = NULL;
-	lo->lo_sizelimit = 0;
-	lo->old_gfp_mask = mapping_gfp_mask(mapping);
-	mapping_set_gfp_mask(mapping, lo->old_gfp_mask & ~(__GFP_IO|__GFP_FS));
-
-	if (!(lo_flags & LO_FLAGS_READ_ONLY) && file->f_op->fsync)
-		blk_queue_write_cache(lo->lo_queue, true, false);
-
-	if (io_is_direct(lo->lo_backing_file) && inode->i_sb->s_bdev) {
-		/* In case of direct I/O, match underlying block size */
-		unsigned short bsize = bdev_logical_block_size(
-			inode->i_sb->s_bdev);
-
-		blk_queue_logical_block_size(lo->lo_queue, bsize);
-		blk_queue_physical_block_size(lo->lo_queue, bsize);
-		blk_queue_io_min(lo->lo_queue, bsize);
-	}
-
-	loop_update_rotational(lo);
-	loop_update_dio(lo);
-	set_capacity(lo->lo_disk, size);
-	bd_set_size(bdev, size << 9);
-	loop_sysfs_init(lo);
-	/* let user-space know about the new size */
-	kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
-
-	set_blocksize(bdev, S_ISBLK(inode->i_mode) ?
-		      block_size(inode->i_bdev) : PAGE_SIZE);
-
-	lo->lo_state = Lo_bound;
-	if (part_shift)
-		lo->lo_flags |= LO_FLAGS_PARTSCAN;
-	partscan = lo->lo_flags & LO_FLAGS_PARTSCAN;
-
-	/* Grab the block_device to prevent its destruction after we
-	 * put /dev/loopXX inode. Later in __loop_clr_fd() we bdput(bdev).
-	 */
-	bdgrab(bdev);
-	mutex_unlock(&loop_ctl_mutex);
-	if (partscan)
-		loop_reread_partitions(lo, bdev);
-	if (claimed_bdev)
-		bd_abort_claiming(bdev, claimed_bdev, loop_set_fd);
-	return 0;
-
-out_unlock:
-	mutex_unlock(&loop_ctl_mutex);
-out_bdev:
-	if (claimed_bdev)
-		bd_abort_claiming(bdev, claimed_bdev, loop_set_fd);
-out_putf:
-	fput(file);
-out:
-	/* This is safe: open() is still holding a reference. */
-	module_put(THIS_MODULE);
-	return error;
-}
-
 static int
 loop_release_xfer(struct loop_device *lo)
 {
@@ -1114,6 +1001,205 @@ loop_init_xfer(struct loop_device *lo, struct loop_func_table *xfer,
 	return err;
 }
 
+/**
+ * loop_set_status_from_info - configure device from loop_info
+ * @lo: struct loop_device to configure
+ * @info: struct loop_info64 to configure the device with
+ *
+ * Configures the loop device parameters according to the passed
+ * in loop_info64 configuration.
+ */
+static int
+loop_set_status_from_info(struct loop_device *lo,
+			  const struct loop_info64 *info)
+{
+	int err;
+	struct loop_func_table *xfer;
+	kuid_t uid = current_uid();
+
+	if ((unsigned int) info->lo_encrypt_key_size > LO_KEY_SIZE)
+		return -EINVAL;
+
+	err = loop_release_xfer(lo);
+	if (err)
+		return err;
+
+	if (info->lo_encrypt_type) {
+		unsigned int type = info->lo_encrypt_type;
+
+		if (type >= MAX_LO_CRYPT)
+			return -EINVAL;
+		xfer = xfer_funcs[type];
+		if (xfer == NULL)
+			return -EINVAL;
+	} else
+		xfer = NULL;
+
+	err = loop_init_xfer(lo, xfer, info);
+	if (err)
+		return err;
+
+	lo->lo_offset = info->lo_offset;
+	lo->lo_sizelimit = info->lo_sizelimit;
+	memcpy(lo->lo_file_name, info->lo_file_name, LO_NAME_SIZE);
+	memcpy(lo->lo_crypt_name, info->lo_crypt_name, LO_NAME_SIZE);
+	lo->lo_file_name[LO_NAME_SIZE-1] = 0;
+	lo->lo_crypt_name[LO_NAME_SIZE-1] = 0;
+
+	if (!xfer)
+		xfer = &none_funcs;
+	lo->transfer = xfer->transfer;
+	lo->ioctl = xfer->ioctl;
+
+	lo->lo_flags = info->lo_flags;
+
+	lo->lo_encrypt_key_size = info->lo_encrypt_key_size;
+	lo->lo_init[0] = info->lo_init[0];
+	lo->lo_init[1] = info->lo_init[1];
+	if (info->lo_encrypt_key_size) {
+		memcpy(lo->lo_encrypt_key, info->lo_encrypt_key,
+		       info->lo_encrypt_key_size);
+		lo->lo_key_owner = uid;
+	}
+
+	return 0;
+}
+
+static int loop_configure(struct loop_device *lo, fmode_t mode,
+			  struct block_device *bdev,
+			  const struct loop_config *config)
+{
+	struct file	*file;
+	struct inode	*inode;
+	struct address_space *mapping;
+	struct block_device *claimed_bdev = NULL;
+	int		error;
+	loff_t		size;
+	bool		partscan;
+	unsigned short  bsize;
+
+	/* This is safe, since we have a reference from open(). */
+	__module_get(THIS_MODULE);
+
+	error = -EBADF;
+	file = fget(config->fd);
+	if (!file)
+		goto out;
+
+	/*
+	 * If we don't hold exclusive handle for the device, upgrade to it
+	 * here to avoid changing device under exclusive owner.
+	 */
+	if (!(mode & FMODE_EXCL)) {
+		claimed_bdev = bd_start_claiming(bdev, loop_configure);
+		if (IS_ERR(claimed_bdev)) {
+			error = PTR_ERR(claimed_bdev);
+			goto out_putf;
+		}
+	}
+
+	error = mutex_lock_killable(&loop_ctl_mutex);
+	if (error)
+		goto out_bdev;
+
+	error = -EBUSY;
+	if (lo->lo_state != Lo_unbound)
+		goto out_unlock;
+
+	error = loop_validate_file(file, bdev);
+	if (error)
+		goto out_unlock;
+
+	mapping = file->f_mapping;
+	inode = mapping->host;
+
+	size = get_loop_size(lo, file);
+
+	if ((config->info.lo_flags & ~LOOP_CONFIGURE_SETTABLE_FLAGS) != 0) {
+		error = -EINVAL;
+		goto out_unlock;
+	}
+
+	if (config->block_size) {
+		error = loop_validate_block_size(config->block_size);
+		if (error)
+			goto out_unlock;
+	}
+
+	error = loop_set_status_from_info(lo, &config->info);
+	if (error)
+		goto out_unlock;
+
+	if (!(file->f_mode & FMODE_WRITE) || !(mode & FMODE_WRITE) ||
+	    !file->f_op->write_iter)
+		lo->lo_flags |= LO_FLAGS_READ_ONLY;
+
+	error = loop_prepare_queue(lo);
+	if (error)
+		goto out_unlock;
+
+	error = 0;
+
+	set_device_ro(bdev, (lo->lo_flags & LO_FLAGS_READ_ONLY) != 0);
+
+	lo->use_dio = lo->lo_flags & LO_FLAGS_DIRECT_IO;
+	lo->lo_device = bdev;
+	lo->lo_backing_file = file;
+	lo->old_gfp_mask = mapping_gfp_mask(mapping);
+	mapping_set_gfp_mask(mapping, lo->old_gfp_mask & ~(__GFP_IO|__GFP_FS));
+
+	if (!(lo->lo_flags & LO_FLAGS_READ_ONLY) && file->f_op->fsync)
+		blk_queue_write_cache(lo->lo_queue, true, false);
+
+	if (config->block_size)
+		bsize = config->block_size;
+	else if (io_is_direct(lo->lo_backing_file) && inode->i_sb->s_bdev)
+		/* In case of direct I/O, match underlying block size */
+		bsize = bdev_logical_block_size(inode->i_sb->s_bdev);
+	else
+		bsize = 512;
+
+	blk_queue_logical_block_size(lo->lo_queue, bsize);
+	blk_queue_physical_block_size(lo->lo_queue, bsize);
+	blk_queue_io_min(lo->lo_queue, bsize);
+
+	loop_update_rotational(lo);
+	loop_update_dio(lo);
+	loop_sysfs_init(lo);
+	loop_set_size(lo, size);
+
+	set_blocksize(bdev, S_ISBLK(inode->i_mode) ?
+		      block_size(inode->i_bdev) : PAGE_SIZE);
+
+	lo->lo_state = Lo_bound;
+	if (part_shift)
+		lo->lo_flags |= LO_FLAGS_PARTSCAN;
+	partscan = lo->lo_flags & LO_FLAGS_PARTSCAN;
+
+	/* Grab the block_device to prevent its destruction after we
+	 * put /dev/loopXX inode. Later in __loop_clr_fd() we bdput(bdev).
+	 */
+	bdgrab(bdev);
+	mutex_unlock(&loop_ctl_mutex);
+	if (partscan)
+		loop_reread_partitions(lo, bdev);
+	if (claimed_bdev)
+		bd_abort_claiming(bdev, claimed_bdev, loop_configure);
+	return 0;
+
+out_unlock:
+	mutex_unlock(&loop_ctl_mutex);
+out_bdev:
+	if (claimed_bdev)
+		bd_abort_claiming(bdev, claimed_bdev, loop_configure);
+out_putf:
+	fput(file);
+out:
+	/* This is safe: open() is still holding a reference. */
+	module_put(THIS_MODULE);
+	return error;
+}
+
 static int __loop_clr_fd(struct loop_device *lo, bool release)
 {
 	struct file *filp = NULL;
@@ -1261,10 +1347,11 @@ static int
 loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
 {
 	int err;
-	struct loop_func_table *xfer;
-	kuid_t uid = current_uid();
 	struct block_device *bdev;
+	kuid_t uid = current_uid();
+	int prev_lo_flags;
 	bool partscan = false;
+	bool size_changed = false;
 
 	err = mutex_lock_killable(&loop_ctl_mutex);
 	if (err)
@@ -1279,13 +1366,10 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
 		err = -ENXIO;
 		goto out_unlock;
 	}
-	if ((unsigned int) info->lo_encrypt_key_size > LO_KEY_SIZE) {
-		err = -EINVAL;
-		goto out_unlock;
-	}
 
 	if (lo->lo_offset != info->lo_offset ||
 	    lo->lo_sizelimit != info->lo_sizelimit) {
+		size_changed = true;
 		sync_blockdev(lo->lo_device);
 		invalidate_bdev(lo->lo_device);
 	}
@@ -1293,79 +1377,44 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
 	/* I/O need to be drained during transfer transition */
 	blk_mq_freeze_queue(lo->lo_queue);
 
-	err = loop_release_xfer(lo);
+	if (size_changed && lo->lo_device->bd_inode->i_mapping->nrpages) {
+		/* If any pages were dirtied after kill_bdev(), try again */
+		err = -EAGAIN;
+		pr_warn("%s: loop%d (%s) has still dirty pages (nrpages=%lu)\n",
+			__func__, lo->lo_number, lo->lo_file_name,
+			lo->lo_device->bd_inode->i_mapping->nrpages);
+		goto out_unfreeze;
+	}
+
+	prev_lo_flags = lo->lo_flags;
+
+	err = loop_set_status_from_info(lo, info);
 	if (err)
 		goto out_unfreeze;
 
-	if (info->lo_encrypt_type) {
-		unsigned int type = info->lo_encrypt_type;
+	/* Mask out flags that can't be set using LOOP_SET_STATUS. */
+	lo->lo_flags &= LOOP_SET_STATUS_SETTABLE_FLAGS;
+	/* For those flags, use the previous values instead */
+	lo->lo_flags |= prev_lo_flags & ~LOOP_SET_STATUS_SETTABLE_FLAGS;
+	/* For flags that can't be cleared, use previous values too */
+	lo->lo_flags |= prev_lo_flags & ~LOOP_SET_STATUS_CLEARABLE_FLAGS;
 
-		if (type >= MAX_LO_CRYPT) {
-			err = -EINVAL;
-			goto out_unfreeze;
-		}
-		xfer = xfer_funcs[type];
-		if (xfer == NULL) {
-			err = -EINVAL;
-			goto out_unfreeze;
-		}
-	} else
-		xfer = NULL;
-
-	err = loop_init_xfer(lo, xfer, info);
-	if (err)
-		goto out_unfreeze;
-
-	if (lo->lo_offset != info->lo_offset ||
-	    lo->lo_sizelimit != info->lo_sizelimit) {
-		/* kill_bdev should have truncated all the pages */
-		if (lo->lo_device->bd_inode->i_mapping->nrpages) {
-			err = -EAGAIN;
-			pr_warn("%s: loop%d (%s) has still dirty pages (nrpages=%lu)\n",
-				__func__, lo->lo_number, lo->lo_file_name,
-				lo->lo_device->bd_inode->i_mapping->nrpages);
-			goto out_unfreeze;
-		}
-		if (figure_loop_size(lo, info->lo_offset, info->lo_sizelimit)) {
-			err = -EFBIG;
-			goto out_unfreeze;
-		}
+	if (size_changed) {
+		loff_t new_size = get_size(lo->lo_offset, lo->lo_sizelimit,
+					   lo->lo_backing_file);
+		loop_set_size(lo, new_size);
 	}
 
 	loop_config_discard(lo);
 
-	memcpy(lo->lo_file_name, info->lo_file_name, LO_NAME_SIZE);
-	memcpy(lo->lo_crypt_name, info->lo_crypt_name, LO_NAME_SIZE);
-	lo->lo_file_name[LO_NAME_SIZE-1] = 0;
-	lo->lo_crypt_name[LO_NAME_SIZE-1] = 0;
-
-	if (!xfer)
-		xfer = &none_funcs;
-	lo->transfer = xfer->transfer;
-	lo->ioctl = xfer->ioctl;
-
-	if ((lo->lo_flags & LO_FLAGS_AUTOCLEAR) !=
-	     (info->lo_flags & LO_FLAGS_AUTOCLEAR))
-		lo->lo_flags ^= LO_FLAGS_AUTOCLEAR;
-
-	lo->lo_encrypt_key_size = info->lo_encrypt_key_size;
-	lo->lo_init[0] = info->lo_init[0];
-	lo->lo_init[1] = info->lo_init[1];
-	if (info->lo_encrypt_key_size) {
-		memcpy(lo->lo_encrypt_key, info->lo_encrypt_key,
-		       info->lo_encrypt_key_size);
-		lo->lo_key_owner = uid;
-	}
-
 	/* update dio if lo_offset or transfer is changed */
 	__loop_update_dio(lo, lo->use_dio);
 
 out_unfreeze:
 	blk_mq_unfreeze_queue(lo->lo_queue);
 
-	if (!err && (info->lo_flags & LO_FLAGS_PARTSCAN) &&
-	     !(lo->lo_flags & LO_FLAGS_PARTSCAN)) {
-		lo->lo_flags |= LO_FLAGS_PARTSCAN;
+	if (!err && (lo->lo_flags & LO_FLAGS_PARTSCAN) &&
+	     !(prev_lo_flags & LO_FLAGS_PARTSCAN)) {
 		lo->lo_disk->flags &= ~GENHD_FL_NO_PART_SCAN;
 		bdev = lo->lo_device;
 		partscan = true;
@@ -1529,10 +1578,15 @@ loop_get_status64(struct loop_device *lo, struct loop_info64 __user *arg) {
 
 static int loop_set_capacity(struct loop_device *lo)
 {
+	loff_t size;
+
 	if (unlikely(lo->lo_state != Lo_bound))
 		return -ENXIO;
 
-	return figure_loop_size(lo, lo->lo_offset, lo->lo_sizelimit);
+	size = get_loop_size(lo, lo->lo_backing_file);
+	loop_set_size(lo, size);
+
+	return 0;
 }
 
 static int loop_set_dio(struct loop_device *lo, unsigned long arg)
@@ -1556,19 +1610,20 @@ static int loop_set_block_size(struct loop_device *lo, unsigned long arg)
 	if (lo->lo_state != Lo_bound)
 		return -ENXIO;
 
-	if (arg < 512 || arg > PAGE_SIZE || !is_power_of_2(arg))
-		return -EINVAL;
+	err = loop_validate_block_size(arg);
+	if (err)
+		return err;
 
-	if (lo->lo_queue->limits.logical_block_size != arg) {
-		sync_blockdev(lo->lo_device);
-		invalidate_bdev(lo->lo_device);
-	}
+	if (lo->lo_queue->limits.logical_block_size == arg)
+		return 0;
+
+	sync_blockdev(lo->lo_device);
+	invalidate_bdev(lo->lo_device);
 
 	blk_mq_freeze_queue(lo->lo_queue);
 
 	/* invalidate_bdev should have truncated all the pages */
-	if (lo->lo_queue->limits.logical_block_size != arg &&
-			lo->lo_device->bd_inode->i_mapping->nrpages) {
+	if (lo->lo_device->bd_inode->i_mapping->nrpages) {
 		err = -EAGAIN;
 		pr_warn("%s: loop%d (%s) has still dirty pages (nrpages=%lu)\n",
 			__func__, lo->lo_number, lo->lo_file_name,
@@ -1615,11 +1670,31 @@ static int lo_ioctl(struct block_device *bdev, fmode_t mode,
 	unsigned int cmd, unsigned long arg)
 {
 	struct loop_device *lo = bdev->bd_disk->private_data;
+	void __user *argp = (void __user *) arg;
 	int err;
 
 	switch (cmd) {
-	case LOOP_SET_FD:
-		return loop_set_fd(lo, mode, bdev, arg);
+	case LOOP_SET_FD: {
+		/*
+		 * Legacy case - pass in a zeroed out struct loop_config with
+		 * only the file descriptor set , which corresponds with the
+		 * default parameters we'd have used otherwise.
+		 */
+		struct loop_config config;
+
+		memset(&config, 0, sizeof(config));
+		config.fd = arg;
+
+		return loop_configure(lo, mode, bdev, &config);
+	}
+	case LOOP_CONFIGURE: {
+		struct loop_config config;
+
+		if (copy_from_user(&config, argp, sizeof(config)))
+			return -EFAULT;
+
+		return loop_configure(lo, mode, bdev, &config);
+	}
 	case LOOP_CHANGE_FD:
 		return loop_change_fd(lo, bdev, arg);
 	case LOOP_CLR_FD:
@@ -1627,21 +1702,19 @@ static int lo_ioctl(struct block_device *bdev, fmode_t mode,
 	case LOOP_SET_STATUS:
 		err = -EPERM;
 		if ((mode & FMODE_WRITE) || capable(CAP_SYS_ADMIN)) {
-			err = loop_set_status_old(lo,
-					(struct loop_info __user *)arg);
+			err = loop_set_status_old(lo, argp);
 		}
 		break;
 	case LOOP_GET_STATUS:
-		return loop_get_status_old(lo, (struct loop_info __user *) arg);
+		return loop_get_status_old(lo, argp);
 	case LOOP_SET_STATUS64:
 		err = -EPERM;
 		if ((mode & FMODE_WRITE) || capable(CAP_SYS_ADMIN)) {
-			err = loop_set_status64(lo,
-					(struct loop_info64 __user *) arg);
+			err = loop_set_status64(lo, argp);
 		}
 		break;
 	case LOOP_GET_STATUS64:
-		return loop_get_status64(lo, (struct loop_info64 __user *) arg);
+		return loop_get_status64(lo, argp);
 	case LOOP_SET_CAPACITY:
 	case LOOP_SET_DIRECT_IO:
 	case LOOP_SET_BLOCK_SIZE:
@@ -1793,6 +1866,7 @@ static int lo_compat_ioctl(struct block_device *bdev, fmode_t mode,
 	case LOOP_CLR_FD:
 	case LOOP_GET_STATUS64:
 	case LOOP_SET_STATUS64:
+	case LOOP_CONFIGURE:
 		arg = (unsigned long) compat_ptr(arg);
 		/* fall through */
 	case LOOP_SET_FD:
diff --git a/drivers/block/null_blk.h b/drivers/block/null_blk.h
index a235c45..bc83786 100644
--- a/drivers/block/null_blk.h
+++ b/drivers/block/null_blk.h
@@ -91,11 +91,13 @@ struct nullb {
 #ifdef CONFIG_BLK_DEV_ZONED
 int null_zone_init(struct nullb_device *dev);
 void null_zone_exit(struct nullb_device *dev);
-int null_zone_report(struct gendisk *disk, sector_t sector,
-		     struct blk_zone *zones, unsigned int *nr_zones);
+int null_report_zones(struct gendisk *disk, sector_t sector,
+		      unsigned int nr_zones, report_zones_cb cb, void *data);
 blk_status_t null_handle_zoned(struct nullb_cmd *cmd,
 				enum req_opf op, sector_t sector,
 				sector_t nr_sectors);
+size_t null_zone_valid_read_len(struct nullb *nullb,
+				sector_t sector, unsigned int len);
 #else
 static inline int null_zone_init(struct nullb_device *dev)
 {
@@ -103,17 +105,18 @@ static inline int null_zone_init(struct nullb_device *dev)
 	return -EINVAL;
 }
 static inline void null_zone_exit(struct nullb_device *dev) {}
-static inline int null_zone_report(struct gendisk *disk, sector_t sector,
-				   struct blk_zone *zones,
-				   unsigned int *nr_zones)
-{
-	return -EOPNOTSUPP;
-}
 static inline blk_status_t null_handle_zoned(struct nullb_cmd *cmd,
 					     enum req_opf op, sector_t sector,
 					     sector_t nr_sectors)
 {
 	return BLK_STS_NOTSUPP;
 }
+static inline size_t null_zone_valid_read_len(struct nullb *nullb,
+					      sector_t sector,
+					      unsigned int len)
+{
+	return len;
+}
+#define null_report_zones	NULL
 #endif /* CONFIG_BLK_DEV_ZONED */
 #endif /* __NULL_BLK_H */
diff --git a/drivers/block/null_blk_main.c b/drivers/block/null_blk_main.c
index 13eae97..75a7dd7 100644
--- a/drivers/block/null_blk_main.c
+++ b/drivers/block/null_blk_main.c
@@ -997,6 +997,16 @@ static int copy_from_nullb(struct nullb *nullb, struct page *dest,
 	return 0;
 }
 
+static void nullb_fill_pattern(struct nullb *nullb, struct page *page,
+			       unsigned int len, unsigned int off)
+{
+	void *dst;
+
+	dst = kmap_atomic(page);
+	memset(dst + off, 0xFF, len);
+	kunmap_atomic(dst);
+}
+
 static void null_handle_discard(struct nullb *nullb, sector_t sector, size_t n)
 {
 	size_t temp;
@@ -1037,10 +1047,24 @@ static int null_transfer(struct nullb *nullb, struct page *page,
 	unsigned int len, unsigned int off, bool is_write, sector_t sector,
 	bool is_fua)
 {
+	struct nullb_device *dev = nullb->dev;
+	unsigned int valid_len = len;
 	int err = 0;
 
 	if (!is_write) {
-		err = copy_from_nullb(nullb, page, off, sector, len);
+		if (dev->zoned)
+			valid_len = null_zone_valid_read_len(nullb,
+				sector, len);
+
+		if (valid_len) {
+			err = copy_from_nullb(nullb, page, off,
+				sector, valid_len);
+			off += valid_len;
+			len -= valid_len;
+		}
+
+		if (len)
+			nullb_fill_pattern(nullb, page, len, off);
 		flush_dcache_page(page);
 	} else {
 		flush_dcache_page(page);
@@ -1425,20 +1449,9 @@ static void null_config_discard(struct nullb *nullb)
 	blk_queue_flag_set(QUEUE_FLAG_DISCARD, nullb->q);
 }
 
-static int null_open(struct block_device *bdev, fmode_t mode)
-{
-	return 0;
-}
-
-static void null_release(struct gendisk *disk, fmode_t mode)
-{
-}
-
-static const struct block_device_operations null_fops = {
-	.owner =	THIS_MODULE,
-	.open =		null_open,
-	.release =	null_release,
-	.report_zones =	null_zone_report,
+static const struct block_device_operations null_ops = {
+	.owner		= THIS_MODULE,
+	.report_zones	= null_report_zones,
 };
 
 static void null_init_queue(struct nullb *nullb, struct nullb_queue *nq)
@@ -1527,29 +1540,35 @@ static int init_driver_queues(struct nullb *nullb)
 
 static int null_gendisk_register(struct nullb *nullb)
 {
+	sector_t size = ((sector_t)nullb->dev->size * SZ_1M) >> SECTOR_SHIFT;
 	struct gendisk *disk;
-	sector_t size;
 
 	disk = nullb->disk = alloc_disk_node(1, nullb->dev->home_node);
 	if (!disk)
 		return -ENOMEM;
-	size = (sector_t)nullb->dev->size * 1024 * 1024ULL;
-	set_capacity(disk, size >> 9);
+	set_capacity(disk, size);
 
 	disk->flags |= GENHD_FL_EXT_DEVT | GENHD_FL_SUPPRESS_PARTITION_INFO;
 	disk->major		= null_major;
 	disk->first_minor	= nullb->index;
-	disk->fops		= &null_fops;
+	disk->fops		= &null_ops;
 	disk->private_data	= nullb;
 	disk->queue		= nullb->q;
 	strncpy(disk->disk_name, nullb->disk_name, DISK_NAME_LEN);
 
+#ifdef CONFIG_BLK_DEV_ZONED
 	if (nullb->dev->zoned) {
-		int ret = blk_revalidate_disk_zones(disk);
-
-		if (ret != 0)
-			return ret;
+		if (queue_is_mq(nullb->q)) {
+			int ret = blk_revalidate_disk_zones(disk);
+			if (ret)
+				return ret;
+		} else {
+			blk_queue_chunk_sectors(nullb->q,
+					nullb->dev->zone_size_sects);
+			nullb->q->nr_zones = blkdev_nr_zones(disk);
+		}
 	}
+#endif
 
 	add_disk(disk);
 	return 0;
@@ -1575,7 +1594,7 @@ static int null_init_tag_set(struct nullb *nullb, struct blk_mq_tag_set *set)
 	return blk_mq_alloc_tag_set(set);
 }
 
-static void null_validate_conf(struct nullb_device *dev)
+static int null_validate_conf(struct nullb_device *dev)
 {
 	dev->blocksize = round_down(dev->blocksize, 512);
 	dev->blocksize = clamp_t(unsigned int, dev->blocksize, 512, 4096);
@@ -1602,6 +1621,14 @@ static void null_validate_conf(struct nullb_device *dev)
 	/* can not stop a queue */
 	if (dev->queue_mode == NULL_Q_BIO)
 		dev->mbps = 0;
+
+	if (dev->zoned &&
+	    (!dev->zone_size || !is_power_of_2(dev->zone_size))) {
+		pr_err("zone_size must be power-of-two\n");
+		return -EINVAL;
+	}
+
+	return 0;
 }
 
 #ifdef CONFIG_BLK_DEV_NULL_BLK_FAULT_INJECTION
@@ -1634,7 +1661,9 @@ static int null_add_dev(struct nullb_device *dev)
 	struct nullb *nullb;
 	int rv;
 
-	null_validate_conf(dev);
+	rv = null_validate_conf(dev);
+	if (rv)
+		return rv;
 
 	nullb = kzalloc_node(sizeof(*nullb), GFP_KERNEL, dev->home_node);
 	if (!nullb) {
@@ -1699,7 +1728,6 @@ static int null_add_dev(struct nullb_device *dev)
 		if (rv)
 			goto out_cleanup_blk_queue;
 
-		blk_queue_chunk_sectors(nullb->q, dev->zone_size_sects);
 		nullb->q->limits.zoned = BLK_ZONED_HM;
 		blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, nullb->q);
 		blk_queue_required_elevator_features(nullb->q,
@@ -1761,11 +1789,6 @@ static int __init null_init(void)
 		g_bs = PAGE_SIZE;
 	}
 
-	if (!is_power_of_2(g_zone_size)) {
-		pr_err("zone_size must be power-of-two\n");
-		return -EINVAL;
-	}
-
 	if (g_home_node != NUMA_NO_NODE && g_home_node >= nr_online_nodes) {
 		pr_err("invalid home_node value\n");
 		g_home_node = NUMA_NO_NODE;
diff --git a/drivers/block/null_blk_zoned.c b/drivers/block/null_blk_zoned.c
index 5f13765..9ac96373 100644
--- a/drivers/block/null_blk_zoned.c
+++ b/drivers/block/null_blk_zoned.c
@@ -46,6 +46,7 @@ int null_zone_init(struct nullb_device *dev)
 
 		zone->start = sector;
 		zone->len = dev->zone_size_sects;
+		zone->capacity = zone->len;
 		zone->wp = zone->start + zone->len;
 		zone->type = BLK_ZONE_TYPE_CONVENTIONAL;
 		zone->cond = BLK_ZONE_COND_NOT_WP;
@@ -61,6 +62,7 @@ int null_zone_init(struct nullb_device *dev)
 			zone->len = dev_capacity_sects - zone->start;
 		else
 			zone->len = dev->zone_size_sects;
+		zone->capacity = zone->len;
 		zone->type = BLK_ZONE_TYPE_SEQWRITE_REQ;
 		zone->cond = BLK_ZONE_COND_EMPTY;
 
@@ -75,22 +77,53 @@ void null_zone_exit(struct nullb_device *dev)
 	kvfree(dev->zones);
 }
 
-int null_zone_report(struct gendisk *disk, sector_t sector,
-		     struct blk_zone *zones, unsigned int *nr_zones)
+int null_report_zones(struct gendisk *disk, sector_t sector,
+		unsigned int nr_zones, report_zones_cb cb, void *data)
 {
 	struct nullb *nullb = disk->private_data;
 	struct nullb_device *dev = nullb->dev;
-	unsigned int zno, nrz = 0;
+	unsigned int first_zone, i;
+	struct blk_zone zone;
+	int error;
 
-	zno = null_zone_no(dev, sector);
-	if (zno < dev->nr_zones) {
-		nrz = min_t(unsigned int, *nr_zones, dev->nr_zones - zno);
-		memcpy(zones, &dev->zones[zno], nrz * sizeof(struct blk_zone));
+	first_zone = null_zone_no(dev, sector);
+	if (first_zone >= dev->nr_zones)
+		return 0;
+
+	nr_zones = min(nr_zones, dev->nr_zones - first_zone);
+	for (i = 0; i < nr_zones; i++) {
+		/*
+		 * Stacked DM target drivers will remap the zone information by
+		 * modifying the zone information passed to the report callback.
+		 * So use a local copy to avoid corruption of the device zone
+		 * array.
+		 */
+		memcpy(&zone, &dev->zones[first_zone + i],
+		       sizeof(struct blk_zone));
+		error = cb(&zone, i, data);
+		if (error)
+			return error;
 	}
 
-	*nr_zones = nrz;
+	return nr_zones;
+}
 
-	return 0;
+size_t null_zone_valid_read_len(struct nullb *nullb,
+				sector_t sector, unsigned int len)
+{
+	struct nullb_device *dev = nullb->dev;
+	struct blk_zone *zone = &dev->zones[null_zone_no(dev, sector)];
+	unsigned int nr_sectors = len >> SECTOR_SHIFT;
+
+	/* Read must be below the write pointer position */
+	if (zone->type == BLK_ZONE_TYPE_CONVENTIONAL ||
+	    sector + nr_sectors <= zone->wp)
+		return len;
+
+	if (sector > zone->wp)
+		return 0;
+
+	return (zone->wp - sector) << SECTOR_SHIFT;
 }
 
 static blk_status_t null_zone_write(struct nullb_cmd *cmd, sector_t sector,
@@ -130,8 +163,7 @@ static blk_status_t null_zone_write(struct nullb_cmd *cmd, sector_t sector,
 static blk_status_t null_zone_reset(struct nullb_cmd *cmd, sector_t sector)
 {
 	struct nullb_device *dev = cmd->nq->dev;
-	unsigned int zno = null_zone_no(dev, sector);
-	struct blk_zone *zone = &dev->zones[zno];
+	struct blk_zone *zone = &dev->zones[null_zone_no(dev, sector)];
 	size_t i;
 
 	switch (req_op(cmd->rq)) {
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index 2eeb2bc..7f93fe2 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -313,8 +313,6 @@ static blk_status_t virtio_queue_rq(struct blk_mq_hw_ctx *hctx,
 	bool unmap = false;
 	u32 type;
 
-	BUG_ON(req->nr_phys_segments + 2 > vblk->sg_elems);
-
 	switch (req_op(req)) {
 	case REQ_OP_READ:
 	case REQ_OP_WRITE:
@@ -342,6 +340,10 @@ static blk_status_t virtio_queue_rq(struct blk_mq_hw_ctx *hctx,
 		return BLK_STS_IOERR;
 	}
 
+	BUG_ON(type != VIRTIO_BLK_T_DISCARD &&
+	       type != VIRTIO_BLK_T_WRITE_ZEROES &&
+	       (req->nr_phys_segments + 2 > vblk->sg_elems));
+
 	vbr->out_hdr.type = cpu_to_virtio32(vblk->vdev, type);
 	vbr->out_hdr.sector = type ?
 		0 : cpu_to_virtio64(vblk->vdev, blk_rq_pos(req));
diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index 36d4915..988aec3b 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -614,15 +614,19 @@ static int read_from_bdev_async(struct zram *zram, struct bio_vec *bvec,
 	return 1;
 }
 
+#define PAGE_WB_SIG "page_index="
+
+#define PAGE_WRITEBACK 0
 #define HUGE_WRITEBACK 1
 #define IDLE_WRITEBACK 2
 
+
 static ssize_t writeback_store(struct device *dev,
 		struct device_attribute *attr, const char *buf, size_t len)
 {
 	struct zram *zram = dev_to_zram(dev);
 	unsigned long nr_pages = zram->disksize >> PAGE_SHIFT;
-	unsigned long index;
+	unsigned long index = 0;
 	struct bio bio;
 	struct bio_vec bio_vec;
 	struct page *page;
@@ -634,8 +638,17 @@ static ssize_t writeback_store(struct device *dev,
 		mode = IDLE_WRITEBACK;
 	else if (sysfs_streq(buf, "huge"))
 		mode = HUGE_WRITEBACK;
-	else
-		return -EINVAL;
+	else {
+		if (strncmp(buf, PAGE_WB_SIG, sizeof(PAGE_WB_SIG) - 1))
+			return -EINVAL;
+
+		ret = kstrtol(buf + sizeof(PAGE_WB_SIG) - 1, 10, &index);
+		if (ret || index >= nr_pages)
+			return -EINVAL;
+
+		nr_pages = 1;
+		mode = PAGE_WRITEBACK;
+	}
 
 	down_read(&zram->init_lock);
 	if (!init_done(zram)) {
@@ -654,7 +667,7 @@ static ssize_t writeback_store(struct device *dev,
 		goto release_init_lock;
 	}
 
-	for (index = 0; index < nr_pages; index++) {
+	while (nr_pages--) {
 		struct bio_vec bvec;
 
 		bvec.bv_page = page;
diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c
index 8cc21ad..ec69e5d 100644
--- a/drivers/bluetooth/btqca.c
+++ b/drivers/bluetooth/btqca.c
@@ -14,19 +14,33 @@
 
 #define VERSION "0.1"
 
-int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version)
+int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version,
+			 enum qca_btsoc_type soc_type)
 {
 	struct sk_buff *skb;
 	struct edl_event_hdr *edl;
-	struct rome_version *ver;
+	struct qca_btsoc_version *ver;
 	char cmd;
 	int err = 0;
+	u8 event_type = HCI_EV_VENDOR;
+	u8 rlen = sizeof(*edl) + sizeof(*ver);
+	u8 rtype = EDL_APP_VER_RES_EVT;
 
 	bt_dev_dbg(hdev, "QCA Version Request");
 
+	/* Unlike other SoC's sending version command response as payload to
+	 * VSE event. WCN3991 sends version command response as a payload to
+	 * command complete event.
+	 */
+	if (soc_type == QCA_WCN3991) {
+		event_type = 0;
+		rlen += 1;
+		rtype = EDL_PATCH_VER_REQ_CMD;
+	}
+
 	cmd = EDL_PATCH_VER_REQ_CMD;
 	skb = __hci_cmd_sync_ev(hdev, EDL_PATCH_CMD_OPCODE, EDL_PATCH_CMD_LEN,
-				&cmd, HCI_EV_VENDOR, HCI_INIT_TIMEOUT);
+				&cmd, event_type, HCI_INIT_TIMEOUT);
 	if (IS_ERR(skb)) {
 		err = PTR_ERR(skb);
 		bt_dev_err(hdev, "Reading QCA version information failed (%d)",
@@ -34,7 +48,7 @@ int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version)
 		return err;
 	}
 
-	if (skb->len != sizeof(*edl) + sizeof(*ver)) {
+	if (skb->len != rlen) {
 		bt_dev_err(hdev, "QCA Version size mismatch len %d", skb->len);
 		err = -EILSEQ;
 		goto out;
@@ -48,18 +62,21 @@ int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version)
 	}
 
 	if (edl->cresp != EDL_CMD_REQ_RES_EVT ||
-	    edl->rtype != EDL_APP_VER_RES_EVT) {
+	    edl->rtype != rtype) {
 		bt_dev_err(hdev, "QCA Wrong packet received %d %d", edl->cresp,
 			   edl->rtype);
 		err = -EIO;
 		goto out;
 	}
 
-	ver = (struct rome_version *)(edl->data);
+	if (soc_type == QCA_WCN3991)
+		memmove(&edl->data, &edl->data[1], sizeof(*ver));
+
+	ver = (struct qca_btsoc_version *)(edl->data);
 
 	BT_DBG("%s: Product:0x%08x", hdev->name, le32_to_cpu(ver->product_id));
 	BT_DBG("%s: Patch  :0x%08x", hdev->name, le16_to_cpu(ver->patch_ver));
-	BT_DBG("%s: ROM    :0x%08x", hdev->name, le16_to_cpu(ver->rome_ver));
+	BT_DBG("%s: ROM    :0x%08x", hdev->name, le16_to_cpu(ver->rom_ver));
 	BT_DBG("%s: SOC    :0x%08x", hdev->name, le32_to_cpu(ver->soc_id));
 
 	/* QCA chipset version can be decided by patch and SoC
@@ -67,7 +84,7 @@ int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version)
 	 * and lower 2 bytes from patch will be used.
 	 */
 	*soc_version = (le32_to_cpu(ver->soc_id) << 16) |
-			(le16_to_cpu(ver->rome_ver) & 0x0000ffff);
+			(le16_to_cpu(ver->rom_ver) & 0x0000ffff);
 	if (*soc_version == 0)
 		err = -EILSEQ;
 
@@ -121,7 +138,7 @@ int qca_send_pre_shutdown_cmd(struct hci_dev *hdev)
 }
 EXPORT_SYMBOL_GPL(qca_send_pre_shutdown_cmd);
 
-static void qca_tlv_check_data(struct rome_config *config,
+static void qca_tlv_check_data(struct qca_fw_config *config,
 				const struct firmware *fw)
 {
 	const u8 *data;
@@ -140,8 +157,8 @@ static void qca_tlv_check_data(struct rome_config *config,
 	BT_DBG("TLV Type\t\t : 0x%x", type_len & 0x000000ff);
 	BT_DBG("Length\t\t : %d bytes", length);
 
-	config->dnld_mode = ROME_SKIP_EVT_NONE;
-	config->dnld_type = ROME_SKIP_EVT_NONE;
+	config->dnld_mode = QCA_SKIP_EVT_NONE;
+	config->dnld_type = QCA_SKIP_EVT_NONE;
 
 	switch (config->type) {
 	case TLV_TYPE_PATCH:
@@ -223,31 +240,45 @@ static void qca_tlv_check_data(struct rome_config *config,
 }
 
 static int qca_tlv_send_segment(struct hci_dev *hdev, int seg_size,
-				 const u8 *data, enum rome_tlv_dnld_mode mode)
+				const u8 *data, enum qca_tlv_dnld_mode mode,
+				enum qca_btsoc_type soc_type)
 {
 	struct sk_buff *skb;
 	struct edl_event_hdr *edl;
 	struct tlv_seg_resp *tlv_resp;
 	u8 cmd[MAX_SIZE_PER_TLV_SEGMENT + 2];
 	int err = 0;
+	u8 event_type = HCI_EV_VENDOR;
+	u8 rlen = (sizeof(*edl) + sizeof(*tlv_resp));
+	u8 rtype = EDL_TVL_DNLD_RES_EVT;
 
 	cmd[0] = EDL_PATCH_TLV_REQ_CMD;
 	cmd[1] = seg_size;
 	memcpy(cmd + 2, data, seg_size);
 
-	if (mode == ROME_SKIP_EVT_VSE_CC || mode == ROME_SKIP_EVT_VSE)
+	if (mode == QCA_SKIP_EVT_VSE_CC || mode == QCA_SKIP_EVT_VSE)
 		return __hci_cmd_send(hdev, EDL_PATCH_CMD_OPCODE, seg_size + 2,
 				      cmd);
 
+	/* Unlike other SoC's sending version command response as payload to
+	 * VSE event. WCN3991 sends version command response as a payload to
+	 * command complete event.
+	 */
+	if (soc_type == QCA_WCN3991) {
+		event_type = 0;
+		rlen = sizeof(*edl);
+		rtype = EDL_PATCH_TLV_REQ_CMD;
+	}
+
 	skb = __hci_cmd_sync_ev(hdev, EDL_PATCH_CMD_OPCODE, seg_size + 2, cmd,
-				HCI_EV_VENDOR, HCI_INIT_TIMEOUT);
+				event_type, HCI_INIT_TIMEOUT);
 	if (IS_ERR(skb)) {
 		err = PTR_ERR(skb);
 		bt_dev_err(hdev, "QCA Failed to send TLV segment (%d)", err);
 		return err;
 	}
 
-	if (skb->len != sizeof(*edl) + sizeof(*tlv_resp)) {
+	if (skb->len != rlen) {
 		bt_dev_err(hdev, "QCA TLV response size mismatch");
 		err = -EILSEQ;
 		goto out;
@@ -260,13 +291,19 @@ static int qca_tlv_send_segment(struct hci_dev *hdev, int seg_size,
 		goto out;
 	}
 
-	tlv_resp = (struct tlv_seg_resp *)(edl->data);
+	if (edl->cresp != EDL_CMD_REQ_RES_EVT || edl->rtype != rtype) {
+		bt_dev_err(hdev, "QCA TLV with error stat 0x%x rtype 0x%x",
+			   edl->cresp, edl->rtype);
+		err = -EIO;
+	}
 
-	if (edl->cresp != EDL_CMD_REQ_RES_EVT ||
-	    edl->rtype != EDL_TVL_DNLD_RES_EVT || tlv_resp->result != 0x00) {
+	if (soc_type == QCA_WCN3991)
+		goto out;
+
+	tlv_resp = (struct tlv_seg_resp *)(edl->data);
+	if (tlv_resp->result) {
 		bt_dev_err(hdev, "QCA TLV with error stat 0x%x rtype 0x%x (0x%x)",
 			   edl->cresp, edl->rtype, tlv_resp->result);
-		err = -EIO;
 	}
 
 out:
@@ -301,7 +338,8 @@ static int qca_inject_cmd_complete_event(struct hci_dev *hdev)
 }
 
 static int qca_download_firmware(struct hci_dev *hdev,
-				  struct rome_config *config)
+				 struct qca_fw_config *config,
+				 enum qca_btsoc_type soc_type)
 {
 	const struct firmware *fw;
 	const u8 *segment;
@@ -328,10 +366,10 @@ static int qca_download_firmware(struct hci_dev *hdev,
 		remain -= segsize;
 		/* The last segment is always acked regardless download mode */
 		if (!remain || segsize < MAX_SIZE_PER_TLV_SEGMENT)
-			config->dnld_mode = ROME_SKIP_EVT_NONE;
+			config->dnld_mode = QCA_SKIP_EVT_NONE;
 
 		ret = qca_tlv_send_segment(hdev, segsize, segment,
-					    config->dnld_mode);
+					   config->dnld_mode, soc_type);
 		if (ret)
 			goto out;
 
@@ -344,8 +382,8 @@ static int qca_download_firmware(struct hci_dev *hdev,
 	 * decrease the BT in initialization time. Here we will inject a command
 	 * complete event to avoid a command timeout error message.
 	 */
-	if (config->dnld_type == ROME_SKIP_EVT_VSE_CC ||
-	    config->dnld_type == ROME_SKIP_EVT_VSE)
+	if (config->dnld_type == QCA_SKIP_EVT_VSE_CC ||
+	    config->dnld_type == QCA_SKIP_EVT_VSE)
 		ret = qca_inject_cmd_complete_event(hdev);
 
 out:
@@ -382,7 +420,7 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
 		   enum qca_btsoc_type soc_type, u32 soc_ver,
 		   const char *firmware_name)
 {
-	struct rome_config config;
+	struct qca_fw_config config;
 	int err;
 	u8 rom_ver = 0;
 
@@ -405,7 +443,7 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
 			 "qca/rampatch_%08x.bin", soc_ver);
 	}
 
-	err = qca_download_firmware(hdev, &config);
+	err = qca_download_firmware(hdev, &config, soc_type);
 	if (err < 0) {
 		bt_dev_err(hdev, "QCA Failed to download patch (%d)", err);
 		return err;
@@ -426,7 +464,7 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
 		snprintf(config.fwname, sizeof(config.fwname),
 			 "qca/nvm_%08x.bin", soc_ver);
 
-	err = qca_download_firmware(hdev, &config);
+	err = qca_download_firmware(hdev, &config, soc_type);
 	if (err < 0) {
 		bt_dev_err(hdev, "QCA Failed to download NVM (%d)", err);
 		return err;
diff --git a/drivers/bluetooth/btqca.h b/drivers/bluetooth/btqca.h
index 69c5315..f5795b1a 100644
--- a/drivers/bluetooth/btqca.h
+++ b/drivers/bluetooth/btqca.h
@@ -56,24 +56,24 @@ enum qca_baudrate {
 	QCA_BAUDRATE_RESERVED
 };
 
-enum rome_tlv_dnld_mode {
-	ROME_SKIP_EVT_NONE,
-	ROME_SKIP_EVT_VSE,
-	ROME_SKIP_EVT_CC,
-	ROME_SKIP_EVT_VSE_CC
+enum qca_tlv_dnld_mode {
+	QCA_SKIP_EVT_NONE,
+	QCA_SKIP_EVT_VSE,
+	QCA_SKIP_EVT_CC,
+	QCA_SKIP_EVT_VSE_CC
 };
 
-enum rome_tlv_type {
+enum qca_tlv_type {
 	TLV_TYPE_PATCH = 1,
 	TLV_TYPE_NVM
 };
 
-struct rome_config {
+struct qca_fw_config {
 	u8 type;
 	char fwname[64];
 	uint8_t user_baud_rate;
-	enum rome_tlv_dnld_mode dnld_mode;
-	enum rome_tlv_dnld_mode dnld_type;
+	enum qca_tlv_dnld_mode dnld_mode;
+	enum qca_tlv_dnld_mode dnld_type;
 };
 
 struct edl_event_hdr {
@@ -82,10 +82,10 @@ struct edl_event_hdr {
 	__u8 data[0];
 } __packed;
 
-struct rome_version {
+struct qca_btsoc_version {
 	__le32 product_id;
 	__le16 patch_ver;
-	__le16 rome_ver;
+	__le16 rom_ver;
 	__le32 soc_id;
 } __packed;
 
@@ -125,6 +125,7 @@ enum qca_btsoc_type {
 	QCA_AR3002,
 	QCA_ROME,
 	QCA_WCN3990,
+	QCA_WCN3991,
 	QCA_WCN3998,
 };
 
@@ -134,12 +135,14 @@ int qca_set_bdaddr_rome(struct hci_dev *hdev, const bdaddr_t *bdaddr);
 int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
 		   enum qca_btsoc_type soc_type, u32 soc_ver,
 		   const char *firmware_name);
-int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version);
+int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version,
+			 enum qca_btsoc_type);
 int qca_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr);
 int qca_send_pre_shutdown_cmd(struct hci_dev *hdev);
 static inline bool qca_is_wcn399x(enum qca_btsoc_type soc_type)
 {
-	return soc_type == QCA_WCN3990 || soc_type == QCA_WCN3998;
+	return soc_type == QCA_WCN3990 || soc_type == QCA_WCN3991 ||
+	       soc_type == QCA_WCN3998;
 }
 #else
 
@@ -155,7 +158,8 @@ static inline int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
 	return -EOPNOTSUPP;
 }
 
-static inline int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version)
+static inline int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version,
+				       enum qca_btsoc_type)
 {
 	return -EOPNOTSUPP;
 }
diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
index e3164c2..bbd290f 100644
--- a/drivers/bluetooth/hci_qca.c
+++ b/drivers/bluetooth/hci_qca.c
@@ -1262,7 +1262,7 @@ static int qca_setup(struct hci_uart *hu)
 		if (ret)
 			return ret;
 
-		ret = qca_read_soc_version(hdev, &soc_ver);
+		ret = qca_read_soc_version(hdev, &soc_ver, soc_type);
 		if (ret)
 			return ret;
 	} else {
@@ -1282,7 +1282,7 @@ static int qca_setup(struct hci_uart *hu)
 
 	if (!qca_is_wcn399x(soc_type)) {
 		/* Get QCA version information */
-		ret = qca_read_soc_version(hdev, &soc_ver);
+		ret = qca_read_soc_version(hdev, &soc_ver, soc_type);
 		if (ret)
 			return ret;
 	}
@@ -1340,6 +1340,17 @@ static const struct qca_vreg_data qca_soc_data_wcn3990 = {
 	.num_vregs = 4,
 };
 
+static const struct qca_vreg_data qca_soc_data_wcn3991 = {
+	.soc_type = QCA_WCN3991,
+	.vregs = (struct qca_vreg []) {
+		{ "vddio", 15000  },
+		{ "vddxo", 80000  },
+		{ "vddrf", 300000 },
+		{ "vddch0", 450000 },
+	},
+	.num_vregs = 4,
+};
+
 static const struct qca_vreg_data qca_soc_data_wcn3998 = {
 	.soc_type = QCA_WCN3998,
 	.vregs = (struct qca_vreg []) {
@@ -1567,6 +1578,7 @@ static void qca_serdev_remove(struct serdev_device *serdev)
 static const struct of_device_id qca_bluetooth_of_match[] = {
 	{ .compatible = "qcom,qca6174-bt" },
 	{ .compatible = "qcom,wcn3990-bt", .data = &qca_soc_data_wcn3990},
+	{ .compatible = "qcom,wcn3991-bt", .data = &qca_soc_data_wcn3991},
 	{ .compatible = "qcom,wcn3998-bt", .data = &qca_soc_data_wcn3998},
 	{ /* sentinel */ }
 };
diff --git a/drivers/char/misc.c b/drivers/char/misc.c
index f6a1474..ca5141e 100644
--- a/drivers/char/misc.c
+++ b/drivers/char/misc.c
@@ -60,7 +60,7 @@ static DEFINE_MUTEX(misc_mtx);
 /*
  * Assigned numbers, used for dynamic minors
  */
-#define DYNAMIC_MINORS 64 /* like dynamic majors */
+#define DYNAMIC_MINORS 128 /* like dynamic majors */
 static DECLARE_BITMAP(misc_minors, DYNAMIC_MINORS);
 
 #ifdef CONFIG_PROC_FS
diff --git a/drivers/char/random.c b/drivers/char/random.c
index 2c29f83..69ccf2e 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -307,6 +307,8 @@
  * Eastlake, Steve Crocker, and Jeff Schiller.
  */
 
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
 #include <linux/utsname.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
@@ -354,7 +356,6 @@
 #define INPUT_POOL_WORDS	(1 << (INPUT_POOL_SHIFT-5))
 #define OUTPUT_POOL_SHIFT	10
 #define OUTPUT_POOL_WORDS	(1 << (OUTPUT_POOL_SHIFT-5))
-#define SEC_XFER_SIZE		512
 #define EXTRACT_SIZE		10
 
 
@@ -371,12 +372,6 @@
 #define ENTROPY_BITS(r) ((r)->entropy_count >> ENTROPY_SHIFT)
 
 /*
- * The minimum number of bits of entropy before we wake up a read on
- * /dev/random.  Should be enough to do a significant reseed.
- */
-static int random_read_wakeup_bits = 64;
-
-/*
  * If the entropy count falls under this number of bits, then we
  * should wake up processes which are selecting or polling on write
  * access to /dev/random.
@@ -436,42 +431,11 @@ static const struct poolinfo {
 	/* was: x^128 + x^103 + x^76 + x^51 +x^25 + x + 1 */
 	/* x^128 + x^104 + x^76 + x^51 +x^25 + x + 1 */
 	{ S(128),	104,	76,	51,	25,	1 },
-	/* was: x^32 + x^26 + x^20 + x^14 + x^7 + x + 1 */
-	/* x^32 + x^26 + x^19 + x^14 + x^7 + x + 1 */
-	{ S(32),	26,	19,	14,	7,	1 },
-#if 0
-	/* x^2048 + x^1638 + x^1231 + x^819 + x^411 + x + 1  -- 115 */
-	{ S(2048),	1638,	1231,	819,	411,	1 },
-
-	/* x^1024 + x^817 + x^615 + x^412 + x^204 + x + 1 -- 290 */
-	{ S(1024),	817,	615,	412,	204,	1 },
-
-	/* x^1024 + x^819 + x^616 + x^410 + x^207 + x^2 + 1 -- 115 */
-	{ S(1024),	819,	616,	410,	207,	2 },
-
-	/* x^512 + x^411 + x^308 + x^208 + x^104 + x + 1 -- 225 */
-	{ S(512),	411,	308,	208,	104,	1 },
-
-	/* x^512 + x^409 + x^307 + x^206 + x^102 + x^2 + 1 -- 95 */
-	{ S(512),	409,	307,	206,	102,	2 },
-	/* x^512 + x^409 + x^309 + x^205 + x^103 + x^2 + 1 -- 95 */
-	{ S(512),	409,	309,	205,	103,	2 },
-
-	/* x^256 + x^205 + x^155 + x^101 + x^52 + x + 1 -- 125 */
-	{ S(256),	205,	155,	101,	52,	1 },
-
-	/* x^128 + x^103 + x^78 + x^51 + x^27 + x^2 + 1 -- 70 */
-	{ S(128),	103,	78,	51,	27,	2 },
-
-	/* x^64 + x^52 + x^39 + x^26 + x^14 + x + 1 -- 15 */
-	{ S(64),	52,	39,	26,	14,	1 },
-#endif
 };
 
 /*
  * Static global variables
  */
-static DECLARE_WAIT_QUEUE_HEAD(random_read_wait);
 static DECLARE_WAIT_QUEUE_HEAD(random_write_wait);
 static struct fasync_struct *fasync;
 
@@ -530,11 +494,8 @@ struct entropy_store {
 	const struct poolinfo *poolinfo;
 	__u32 *pool;
 	const char *name;
-	struct entropy_store *pull;
-	struct work_struct push_work;
 
 	/* read-write data: */
-	unsigned long last_pulled;
 	spinlock_t lock;
 	unsigned short add_ptr;
 	unsigned short input_rotate;
@@ -550,9 +511,7 @@ static ssize_t _extract_entropy(struct entropy_store *r, void *buf,
 				size_t nbytes, int fips);
 
 static void crng_reseed(struct crng_state *crng, struct entropy_store *r);
-static void push_to_pool(struct work_struct *work);
 static __u32 input_pool_data[INPUT_POOL_WORDS] __latent_entropy;
-static __u32 blocking_pool_data[OUTPUT_POOL_WORDS] __latent_entropy;
 
 static struct entropy_store input_pool = {
 	.poolinfo = &poolinfo_table[0],
@@ -561,16 +520,6 @@ static struct entropy_store input_pool = {
 	.pool = input_pool_data
 };
 
-static struct entropy_store blocking_pool = {
-	.poolinfo = &poolinfo_table[1],
-	.name = "blocking",
-	.pull = &input_pool,
-	.lock = __SPIN_LOCK_UNLOCKED(blocking_pool.lock),
-	.pool = blocking_pool_data,
-	.push_work = __WORK_INITIALIZER(blocking_pool.push_work,
-					push_to_pool),
-};
-
 static __u32 const twist_table[8] = {
 	0x00000000, 0x3b6e20c8, 0x76dc4190, 0x4db26158,
 	0xedb88320, 0xd6d6a3e8, 0x9b64c2b0, 0xa00ae278 };
@@ -759,22 +708,17 @@ static void credit_entropy_bits(struct entropy_store *r, int nbits)
 		} while (unlikely(entropy_count < pool_size-2 && pnfrac));
 	}
 
-	if (unlikely(entropy_count < 0)) {
-		pr_warn("random: negative entropy/overflow: pool %s count %d\n",
+	if (WARN_ON(entropy_count < 0)) {
+		pr_warn("negative entropy/overflow: pool %s count %d\n",
 			r->name, entropy_count);
-		WARN_ON(1);
 		entropy_count = 0;
 	} else if (entropy_count > pool_size)
 		entropy_count = pool_size;
-	if ((r == &blocking_pool) && !r->initialized &&
-	    (entropy_count >> ENTROPY_SHIFT) > 128)
-		has_initialized = 1;
 	if (cmpxchg(&r->entropy_count, orig, entropy_count) != orig)
 		goto retry;
 
 	if (has_initialized) {
 		r->initialized = 1;
-		wake_up_interruptible(&random_read_wait);
 		kill_fasync(&fasync, SIGIO, POLL_IN);
 	}
 
@@ -783,36 +727,13 @@ static void credit_entropy_bits(struct entropy_store *r, int nbits)
 
 	if (r == &input_pool) {
 		int entropy_bits = entropy_count >> ENTROPY_SHIFT;
-		struct entropy_store *other = &blocking_pool;
 
 		if (crng_init < 2) {
 			if (entropy_bits < 128)
 				return;
 			crng_reseed(&primary_crng, r);
-			entropy_bits = r->entropy_count >> ENTROPY_SHIFT;
+			entropy_bits = ENTROPY_BITS(r);
 		}
-
-		/* initialize the blocking pool if necessary */
-		if (entropy_bits >= random_read_wakeup_bits &&
-		    !other->initialized) {
-			schedule_work(&other->push_work);
-			return;
-		}
-
-		/* should we wake readers? */
-		if (entropy_bits >= random_read_wakeup_bits &&
-		    wq_has_sleeper(&random_read_wait)) {
-			wake_up_interruptible(&random_read_wait);
-			kill_fasync(&fasync, SIGIO, POLL_IN);
-		}
-		/* If the input pool is getting full, and the blocking
-		 * pool has room, send some entropy to the blocking
-		 * pool.
-		 */
-		if (!work_pending(&other->push_work) &&
-		    (ENTROPY_BITS(r) > 6 * r->poolinfo->poolbytes) &&
-		    (ENTROPY_BITS(other) <= 6 * other->poolinfo->poolbytes))
-			schedule_work(&other->push_work);
 	}
 }
 
@@ -884,7 +805,7 @@ static void crng_initialize(struct crng_state *crng)
 		invalidate_batched_entropy();
 		numa_crng_init();
 		crng_init = 2;
-		pr_notice("random: crng done (trusting CPU's manufacturer)\n");
+		pr_notice("crng done (trusting CPU's manufacturer)\n");
 	}
 	crng->init_time = jiffies - CRNG_RESEED_INTERVAL - 1;
 }
@@ -946,8 +867,7 @@ static int crng_fast_load(const char *cp, size_t len)
 	if (crng_init_cnt >= CRNG_INIT_CNT_THRESH) {
 		invalidate_batched_entropy();
 		crng_init = 1;
-		wake_up_interruptible(&crng_init_wait);
-		pr_notice("random: fast init done\n");
+		pr_notice("fast init done\n");
 	}
 	return 1;
 }
@@ -1032,16 +952,15 @@ static void crng_reseed(struct crng_state *crng, struct entropy_store *r)
 		crng_init = 2;
 		process_random_ready_list();
 		wake_up_interruptible(&crng_init_wait);
-		pr_notice("random: crng init done\n");
+		kill_fasync(&fasync, SIGIO, POLL_IN);
+		pr_notice("crng init done\n");
 		if (unseeded_warning.missed) {
-			pr_notice("random: %d get_random_xx warning(s) missed "
-				  "due to ratelimiting\n",
+			pr_notice("%d get_random_xx warning(s) missed due to ratelimiting\n",
 				  unseeded_warning.missed);
 			unseeded_warning.missed = 0;
 		}
 		if (urandom_warning.missed) {
-			pr_notice("random: %d urandom warning(s) missed "
-				  "due to ratelimiting\n",
+			pr_notice("%d urandom warning(s) missed due to ratelimiting\n",
 				  urandom_warning.missed);
 			urandom_warning.missed = 0;
 		}
@@ -1246,7 +1165,7 @@ static void add_timer_randomness(struct timer_rand_state *state, unsigned num)
 	/*
 	 * delta is now minimum absolute delta.
 	 * Round down by 1 bit on general principles,
-	 * and limit entropy entimate to 12 bits.
+	 * and limit entropy estimate to 12 bits.
 	 */
 	credit_entropy_bits(r, min_t(int, fls(delta>>1), 11));
 }
@@ -1390,57 +1309,6 @@ EXPORT_SYMBOL_GPL(add_disk_randomness);
  *********************************************************************/
 
 /*
- * This utility inline function is responsible for transferring entropy
- * from the primary pool to the secondary extraction pool. We make
- * sure we pull enough for a 'catastrophic reseed'.
- */
-static void _xfer_secondary_pool(struct entropy_store *r, size_t nbytes);
-static void xfer_secondary_pool(struct entropy_store *r, size_t nbytes)
-{
-	if (!r->pull ||
-	    r->entropy_count >= (nbytes << (ENTROPY_SHIFT + 3)) ||
-	    r->entropy_count > r->poolinfo->poolfracbits)
-		return;
-
-	_xfer_secondary_pool(r, nbytes);
-}
-
-static void _xfer_secondary_pool(struct entropy_store *r, size_t nbytes)
-{
-	__u32	tmp[OUTPUT_POOL_WORDS];
-
-	int bytes = nbytes;
-
-	/* pull at least as much as a wakeup */
-	bytes = max_t(int, bytes, random_read_wakeup_bits / 8);
-	/* but never more than the buffer size */
-	bytes = min_t(int, bytes, sizeof(tmp));
-
-	trace_xfer_secondary_pool(r->name, bytes * 8, nbytes * 8,
-				  ENTROPY_BITS(r), ENTROPY_BITS(r->pull));
-	bytes = extract_entropy(r->pull, tmp, bytes,
-				random_read_wakeup_bits / 8, 0);
-	mix_pool_bytes(r, tmp, bytes);
-	credit_entropy_bits(r, bytes*8);
-}
-
-/*
- * Used as a workqueue function so that when the input pool is getting
- * full, we can "spill over" some entropy to the output pools.  That
- * way the output pools can store some of the excess entropy instead
- * of letting it go to waste.
- */
-static void push_to_pool(struct work_struct *work)
-{
-	struct entropy_store *r = container_of(work, struct entropy_store,
-					      push_work);
-	BUG_ON(!r);
-	_xfer_secondary_pool(r, random_read_wakeup_bits/8);
-	trace_push_to_pool(r->name, r->entropy_count >> ENTROPY_SHIFT,
-			   r->pull->entropy_count >> ENTROPY_SHIFT);
-}
-
-/*
  * This function decides how many bytes to actually take from the
  * given pool, and also debits the entropy count accordingly.
  */
@@ -1465,10 +1333,9 @@ static size_t account(struct entropy_store *r, size_t nbytes, int min,
 	if (ibytes < min)
 		ibytes = 0;
 
-	if (unlikely(entropy_count < 0)) {
-		pr_warn("random: negative entropy count: pool %s count %d\n",
+	if (WARN_ON(entropy_count < 0)) {
+		pr_warn("negative entropy count: pool %s count %d\n",
 			r->name, entropy_count);
-		WARN_ON(1);
 		entropy_count = 0;
 	}
 	nfrac = ibytes << (ENTROPY_SHIFT + 3);
@@ -1481,8 +1348,7 @@ static size_t account(struct entropy_store *r, size_t nbytes, int min,
 		goto retry;
 
 	trace_debit_entropy(r->name, 8 * ibytes);
-	if (ibytes &&
-	    (r->entropy_count >> ENTROPY_SHIFT) < random_write_wakeup_bits) {
+	if (ibytes && ENTROPY_BITS(r) < random_write_wakeup_bits) {
 		wake_up_interruptible(&random_write_wait);
 		kill_fasync(&fasync, SIGIO, POLL_OUT);
 	}
@@ -1603,7 +1469,6 @@ static ssize_t extract_entropy(struct entropy_store *r, void *buf,
 			spin_unlock_irqrestore(&r->lock, flags);
 			trace_extract_entropy(r->name, EXTRACT_SIZE,
 					      ENTROPY_BITS(r), _RET_IP_);
-			xfer_secondary_pool(r, EXTRACT_SIZE);
 			extract_buf(r, tmp);
 			spin_lock_irqsave(&r->lock, flags);
 			memcpy(r->last_data, tmp, EXTRACT_SIZE);
@@ -1612,60 +1477,11 @@ static ssize_t extract_entropy(struct entropy_store *r, void *buf,
 	}
 
 	trace_extract_entropy(r->name, nbytes, ENTROPY_BITS(r), _RET_IP_);
-	xfer_secondary_pool(r, nbytes);
 	nbytes = account(r, nbytes, min, reserved);
 
 	return _extract_entropy(r, buf, nbytes, fips_enabled);
 }
 
-/*
- * This function extracts randomness from the "entropy pool", and
- * returns it in a userspace buffer.
- */
-static ssize_t extract_entropy_user(struct entropy_store *r, void __user *buf,
-				    size_t nbytes)
-{
-	ssize_t ret = 0, i;
-	__u8 tmp[EXTRACT_SIZE];
-	int large_request = (nbytes > 256);
-
-	trace_extract_entropy_user(r->name, nbytes, ENTROPY_BITS(r), _RET_IP_);
-	if (!r->initialized && r->pull) {
-		xfer_secondary_pool(r, ENTROPY_BITS(r->pull)/8);
-		if (!r->initialized)
-			return 0;
-	}
-	xfer_secondary_pool(r, nbytes);
-	nbytes = account(r, nbytes, 0, 0);
-
-	while (nbytes) {
-		if (large_request && need_resched()) {
-			if (signal_pending(current)) {
-				if (ret == 0)
-					ret = -ERESTARTSYS;
-				break;
-			}
-			schedule();
-		}
-
-		extract_buf(r, tmp);
-		i = min_t(int, nbytes, EXTRACT_SIZE);
-		if (copy_to_user(buf, tmp, i)) {
-			ret = -EFAULT;
-			break;
-		}
-
-		nbytes -= i;
-		buf += i;
-		ret += i;
-	}
-
-	/* Wipe data just returned from memory */
-	memzero_explicit(tmp, sizeof(tmp));
-
-	return ret;
-}
-
 #define warn_unseeded_randomness(previous) \
 	_warn_unseeded_randomness(__func__, (void *) _RET_IP_, (previous))
 
@@ -1932,7 +1748,6 @@ static void __init init_std_data(struct entropy_store *r)
 	ktime_t now = ktime_get_real();
 	unsigned long rv;
 
-	r->last_pulled = jiffies;
 	mix_pool_bytes(r, &now, sizeof(now));
 	for (i = r->poolinfo->poolbytes; i > 0; i -= sizeof(rv)) {
 		if (!arch_get_random_seed_long(&rv) &&
@@ -1956,7 +1771,6 @@ static void __init init_std_data(struct entropy_store *r)
 int __init rand_initialize(void)
 {
 	init_std_data(&input_pool);
-	init_std_data(&blocking_pool);
 	crng_initialize(&primary_crng);
 	crng_global_init_time = jiffies;
 	if (ratelimit_disable) {
@@ -1984,40 +1798,15 @@ void rand_initialize_disk(struct gendisk *disk)
 #endif
 
 static ssize_t
-_random_read(int nonblock, char __user *buf, size_t nbytes)
+urandom_read_nowarn(struct file *file, char __user *buf, size_t nbytes,
+		    loff_t *ppos)
 {
-	ssize_t n;
+	int ret;
 
-	if (nbytes == 0)
-		return 0;
-
-	nbytes = min_t(size_t, nbytes, SEC_XFER_SIZE);
-	while (1) {
-		n = extract_entropy_user(&blocking_pool, buf, nbytes);
-		if (n < 0)
-			return n;
-		trace_random_read(n*8, (nbytes-n)*8,
-				  ENTROPY_BITS(&blocking_pool),
-				  ENTROPY_BITS(&input_pool));
-		if (n > 0)
-			return n;
-
-		/* Pool is (near) empty.  Maybe wait and retry. */
-		if (nonblock)
-			return -EAGAIN;
-
-		wait_event_interruptible(random_read_wait,
-		    blocking_pool.initialized &&
-		    (ENTROPY_BITS(&input_pool) >= random_read_wakeup_bits));
-		if (signal_pending(current))
-			return -ERESTARTSYS;
-	}
-}
-
-static ssize_t
-random_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
-{
-	return _random_read(file->f_flags & O_NONBLOCK, buf, nbytes);
+	nbytes = min_t(size_t, nbytes, INT_MAX >> (ENTROPY_SHIFT + 3));
+	ret = extract_crng_user(buf, nbytes);
+	trace_urandom_read(8 * nbytes, 0, ENTROPY_BITS(&input_pool));
+	return ret;
 }
 
 static ssize_t
@@ -2025,22 +1814,29 @@ urandom_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
 {
 	unsigned long flags;
 	static int maxwarn = 10;
-	int ret;
 
 	if (!crng_ready() && maxwarn > 0) {
 		maxwarn--;
 		if (__ratelimit(&urandom_warning))
-			printk(KERN_NOTICE "random: %s: uninitialized "
-			       "urandom read (%zd bytes read)\n",
-			       current->comm, nbytes);
+			pr_notice("%s: uninitialized urandom read (%zd bytes read)\n",
+				  current->comm, nbytes);
 		spin_lock_irqsave(&primary_crng.lock, flags);
 		crng_init_cnt = 0;
 		spin_unlock_irqrestore(&primary_crng.lock, flags);
 	}
-	nbytes = min_t(size_t, nbytes, INT_MAX >> (ENTROPY_SHIFT + 3));
-	ret = extract_crng_user(buf, nbytes);
-	trace_urandom_read(8 * nbytes, 0, ENTROPY_BITS(&input_pool));
-	return ret;
+
+	return urandom_read_nowarn(file, buf, nbytes, ppos);
+}
+
+static ssize_t
+random_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
+{
+	int ret;
+
+	ret = wait_for_random_bytes();
+	if (ret != 0)
+		return ret;
+	return urandom_read_nowarn(file, buf, nbytes, ppos);
 }
 
 static __poll_t
@@ -2048,10 +1844,10 @@ random_poll(struct file *file, poll_table * wait)
 {
 	__poll_t mask;
 
-	poll_wait(file, &random_read_wait, wait);
+	poll_wait(file, &crng_init_wait, wait);
 	poll_wait(file, &random_write_wait, wait);
 	mask = 0;
-	if (ENTROPY_BITS(&input_pool) >= random_read_wakeup_bits)
+	if (crng_ready())
 		mask |= EPOLLIN | EPOLLRDNORM;
 	if (ENTROPY_BITS(&input_pool) < random_write_wakeup_bits)
 		mask |= EPOLLOUT | EPOLLWRNORM;
@@ -2142,7 +1938,6 @@ static long random_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
 		if (!capable(CAP_SYS_ADMIN))
 			return -EPERM;
 		input_pool.entropy_count = 0;
-		blocking_pool.entropy_count = 0;
 		return 0;
 	case RNDRESEEDCRNG:
 		if (!capable(CAP_SYS_ADMIN))
@@ -2184,23 +1979,27 @@ SYSCALL_DEFINE3(getrandom, char __user *, buf, size_t, count,
 {
 	int ret;
 
-	if (flags & ~(GRND_NONBLOCK|GRND_RANDOM))
+	if (flags & ~(GRND_NONBLOCK|GRND_RANDOM|GRND_INSECURE))
+		return -EINVAL;
+
+	/*
+	 * Requesting insecure and blocking randomness at the same time makes
+	 * no sense.
+	 */
+	if ((flags & (GRND_INSECURE|GRND_RANDOM)) == (GRND_INSECURE|GRND_RANDOM))
 		return -EINVAL;
 
 	if (count > INT_MAX)
 		count = INT_MAX;
 
-	if (flags & GRND_RANDOM)
-		return _random_read(flags & GRND_NONBLOCK, buf, count);
-
-	if (!crng_ready()) {
+	if (!(flags & GRND_INSECURE) && !crng_ready()) {
 		if (flags & GRND_NONBLOCK)
 			return -EAGAIN;
 		ret = wait_for_random_bytes();
 		if (unlikely(ret))
 			return ret;
 	}
-	return urandom_read(NULL, buf, count, NULL);
+	return urandom_read_nowarn(NULL, buf, count, NULL);
 }
 
 /********************************************************************
@@ -2213,8 +2012,7 @@ SYSCALL_DEFINE3(getrandom, char __user *, buf, size_t, count,
 
 #include <linux/sysctl.h>
 
-static int min_read_thresh = 8, min_write_thresh;
-static int max_read_thresh = OUTPUT_POOL_WORDS * 32;
+static int min_write_thresh;
 static int max_write_thresh = INPUT_POOL_WORDS * 32;
 static int random_min_urandom_seed = 60;
 static char sysctl_bootid[16];
@@ -2290,15 +2088,6 @@ struct ctl_table random_table[] = {
 		.data		= &input_pool.entropy_count,
 	},
 	{
-		.procname	= "read_wakeup_threshold",
-		.data		= &random_read_wakeup_bits,
-		.maxlen		= sizeof(int),
-		.mode		= 0644,
-		.proc_handler	= proc_dointvec_minmax,
-		.extra1		= &min_read_thresh,
-		.extra2		= &max_read_thresh,
-	},
-	{
 		.procname	= "write_wakeup_threshold",
 		.data		= &random_write_wakeup_bits,
 		.maxlen		= sizeof(int),
diff --git a/drivers/clk/clk-composite.c b/drivers/clk/clk-composite.c
index 4f13a68..bdc1482 100644
--- a/drivers/clk/clk-composite.c
+++ b/drivers/clk/clk-composite.c
@@ -328,6 +328,7 @@ struct clk *clk_register_composite(struct device *dev, const char *name,
 		return ERR_CAST(hw);
 	return hw->clk;
 }
+EXPORT_SYMBOL_GPL(clk_register_composite);
 
 void clk_unregister_composite(struct clk *clk)
 {
diff --git a/drivers/clk/clk-pwm.c b/drivers/clk/clk-pwm.c
index 87fe0b0e..7b1f7a0 100644
--- a/drivers/clk/clk-pwm.c
+++ b/drivers/clk/clk-pwm.c
@@ -89,7 +89,7 @@ static int clk_pwm_probe(struct platform_device *pdev)
 	}
 
 	if (of_property_read_u32(node, "clock-frequency", &clk_pwm->fixed_rate))
-		clk_pwm->fixed_rate = NSEC_PER_SEC / pargs.period;
+		clk_pwm->fixed_rate = div64_u64(NSEC_PER_SEC, pargs.period);
 
 	if (pargs.period != NSEC_PER_SEC / clk_pwm->fixed_rate &&
 	    pargs.period != DIV_ROUND_UP(NSEC_PER_SEC, clk_pwm->fixed_rate)) {
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index 36e9f38a..5de2551 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -72,6 +72,8 @@ struct clk_core {
 	unsigned long		flags;
 	bool			orphan;
 	bool			rpm_enabled;
+	bool			need_sync;
+	bool			boot_enabled;
 	unsigned int		enable_count;
 	unsigned int		prepare_count;
 	unsigned int		protect_count;
@@ -1200,6 +1202,10 @@ static void clk_unprepare_unused_subtree(struct clk_core *core)
 	hlist_for_each_entry(child, &core->children, child_node)
 		clk_unprepare_unused_subtree(child);
 
+	if (dev_has_sync_state(core->dev) &&
+	    !(core->flags & CLK_DONT_HOLD_STATE))
+		return;
+
 	if (core->prepare_count)
 		return;
 
@@ -1231,6 +1237,10 @@ static void clk_disable_unused_subtree(struct clk_core *core)
 	hlist_for_each_entry(child, &core->children, child_node)
 		clk_disable_unused_subtree(child);
 
+	if (dev_has_sync_state(core->dev) &&
+	    !(core->flags & CLK_DONT_HOLD_STATE))
+		return;
+
 	if (core->flags & CLK_OPS_PARENT_ENABLE)
 		clk_core_prepare_enable(core->parent);
 
@@ -1304,6 +1314,38 @@ static int clk_disable_unused(void)
 }
 late_initcall_sync(clk_disable_unused);
 
+static void clk_unprepare_disable_dev_subtree(struct clk_core *core,
+					      struct device *dev)
+{
+	struct clk_core *child;
+
+	lockdep_assert_held(&prepare_lock);
+
+	hlist_for_each_entry(child, &core->children, child_node)
+		clk_unprepare_disable_dev_subtree(child, dev);
+
+	if (core->dev != dev || !core->need_sync)
+		return;
+
+	clk_core_disable_unprepare(core);
+}
+
+void clk_sync_state(struct device *dev)
+{
+	struct clk_core *core;
+
+	clk_prepare_lock();
+
+	hlist_for_each_entry(core, &clk_root_list, child_node)
+		clk_unprepare_disable_dev_subtree(core, dev);
+
+	hlist_for_each_entry(core, &clk_orphan_list, child_node)
+		clk_unprepare_disable_dev_subtree(core, dev);
+
+	clk_prepare_unlock();
+}
+EXPORT_SYMBOL_GPL(clk_sync_state);
+
 static int clk_core_determine_round_nolock(struct clk_core *core,
 					   struct clk_rate_request *req)
 {
@@ -1678,6 +1720,33 @@ static int clk_fetch_parent_index(struct clk_core *core,
 	return i;
 }
 
+static void clk_core_hold_state(struct clk_core *core)
+{
+	if (core->need_sync || !core->boot_enabled)
+		return;
+
+	if (core->orphan || !dev_has_sync_state(core->dev))
+		return;
+
+	if (core->flags & CLK_DONT_HOLD_STATE)
+		return;
+
+	core->need_sync = !clk_core_prepare_enable(core);
+}
+
+static void __clk_core_update_orphan_hold_state(struct clk_core *core)
+{
+	struct clk_core *child;
+
+	if (core->orphan)
+		return;
+
+	clk_core_hold_state(core);
+
+	hlist_for_each_entry(child, &core->children, child_node)
+		__clk_core_update_orphan_hold_state(child);
+}
+
 /*
  * Update the orphan status of @core and all its children.
  */
@@ -1984,6 +2053,13 @@ static struct clk_core *clk_propagate_rate_change(struct clk_core *core,
 			fail_clk = core;
 	}
 
+	if (core->ops->pre_rate_change) {
+		ret = core->ops->pre_rate_change(core->hw, core->rate,
+						 core->new_rate);
+		if (ret)
+			fail_clk = core;
+	}
+
 	hlist_for_each_entry(child, &core->children, child_node) {
 		/* Skip children who will be reparented to another clock */
 		if (child->new_parent && child->new_parent != core)
@@ -2086,6 +2162,9 @@ static void clk_change_rate(struct clk_core *core)
 	if (core->flags & CLK_RECALC_NEW_RATES)
 		(void)clk_calc_new_rates(core, core->new_rate);
 
+	if (core->ops->post_rate_change)
+		core->ops->post_rate_change(core->hw, old_rate, core->rate);
+
 	/*
 	 * Use safe iteration, as change_rate can actually swap parents
 	 * for certain clock types.
@@ -3278,6 +3357,7 @@ static void clk_core_reparent_orphans_nolock(void)
 			__clk_set_parent_after(orphan, parent, NULL);
 			__clk_recalc_accuracies(orphan);
 			__clk_recalc_rates(orphan, 0);
+			__clk_core_update_orphan_hold_state(orphan);
 		}
 	}
 }
@@ -3424,6 +3504,8 @@ static int __clk_core_init(struct clk_core *core)
 		rate = 0;
 	core->rate = core->req_rate = rate;
 
+	core->boot_enabled = clk_core_is_enabled(core);
+
 	/*
 	 * Enable CLK_IS_CRITICAL clocks so newly added critical clocks
 	 * don't get accidentally disabled when walking the orphan tree and
@@ -3445,9 +3527,9 @@ static int __clk_core_init(struct clk_core *core)
 		}
 	}
 
+	clk_core_hold_state(core);
 	clk_core_reparent_orphans_nolock();
 
-
 	kref_init(&core->ref);
 out:
 	clk_pm_runtime_put(core);
diff --git a/drivers/clk/qcom/dispcc-sdm845.c b/drivers/clk/qcom/dispcc-sdm845.c
index 0cc4909..a84f170 100644
--- a/drivers/clk/qcom/dispcc-sdm845.c
+++ b/drivers/clk/qcom/dispcc-sdm845.c
@@ -3,6 +3,7 @@
  * Copyright (c) 2018, The Linux Foundation. All rights reserved.
  */
 
+#include <linux/clk.h>
 #include <linux/clk-provider.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
@@ -666,6 +667,7 @@ static struct platform_driver disp_cc_sdm845_driver = {
 	.driver		= {
 		.name	= "disp_cc-sdm845",
 		.of_match_table = disp_cc_sdm845_match_table,
+		.sync_state = clk_sync_state,
 	},
 };
 
diff --git a/drivers/clk/qcom/gcc-msm8998.c b/drivers/clk/qcom/gcc-msm8998.c
index 091acd5..9ab0aba 100644
--- a/drivers/clk/qcom/gcc-msm8998.c
+++ b/drivers/clk/qcom/gcc-msm8998.c
@@ -3006,6 +3006,7 @@ static struct platform_driver gcc_msm8998_driver = {
 	.driver		= {
 		.name	= "gcc-msm8998",
 		.of_match_table = gcc_msm8998_match_table,
+		.sync_state = clk_sync_state,
 	},
 };
 
diff --git a/drivers/clk/qcom/gcc-sdm845.c b/drivers/clk/qcom/gcc-sdm845.c
index 56d22dd..9785bf2 100644
--- a/drivers/clk/qcom/gcc-sdm845.c
+++ b/drivers/clk/qcom/gcc-sdm845.c
@@ -3628,6 +3628,7 @@ static struct platform_driver gcc_sdm845_driver = {
 	.driver		= {
 		.name	= "gcc-sdm845",
 		.of_match_table = gcc_sdm845_match_table,
+		.sync_state = clk_sync_state,
 	},
 };
 
diff --git a/drivers/clk/qcom/gpucc-sdm845.c b/drivers/clk/qcom/gpucc-sdm845.c
index e40efba1..9aa30cd 100644
--- a/drivers/clk/qcom/gpucc-sdm845.c
+++ b/drivers/clk/qcom/gpucc-sdm845.c
@@ -233,6 +233,7 @@ static struct platform_driver gpu_cc_sdm845_driver = {
 	.driver = {
 		.name = "sdm845-gpucc",
 		.of_match_table = gpu_cc_sdm845_match_table,
+		.sync_state = clk_sync_state,
 	},
 };
 
diff --git a/drivers/clk/qcom/videocc-sdm845.c b/drivers/clk/qcom/videocc-sdm845.c
index 5d6a772..5822252 100644
--- a/drivers/clk/qcom/videocc-sdm845.c
+++ b/drivers/clk/qcom/videocc-sdm845.c
@@ -338,6 +338,7 @@ static struct platform_driver video_cc_sdm845_driver = {
 	.driver		= {
 		.name	= "sdm845-videocc",
 		.of_match_table = video_cc_sdm845_match_table,
+		.sync_state = clk_sync_state,
 	},
 };
 
diff --git a/drivers/clk/sunxi-ng/Kconfig b/drivers/clk/sunxi-ng/Kconfig
index cdf3330..ce5f584 100644
--- a/drivers/clk/sunxi-ng/Kconfig
+++ b/drivers/clk/sunxi-ng/Kconfig
@@ -17,6 +17,16 @@
 	default ARM64 && ARCH_SUNXI
 	depends on (ARM64 && ARCH_SUNXI) || COMPILE_TEST
 
+config SUN50I_A100_CCU
+	bool "Support for the Allwinner A100 CCU"
+	default ARM64 && ARCH_SUNXI
+	depends on (ARM64 && ARCH_SUNXI) || COMPILE_TEST
+
+config SUN50I_A100_R_CCU
+	bool "Support for the Allwinner A100 PRCM CCU"
+	default ARM64 && ARCH_SUNXI
+	depends on (ARM64 && ARCH_SUNXI) || COMPILE_TEST
+
 config SUN50I_H6_CCU
 	bool "Support for the Allwinner H6 CCU"
 	default ARM64 && ARCH_SUNXI
diff --git a/drivers/clk/sunxi-ng/Makefile b/drivers/clk/sunxi-ng/Makefile
index 4c7bee8..3eb5cff 100644
--- a/drivers/clk/sunxi-ng/Makefile
+++ b/drivers/clk/sunxi-ng/Makefile
@@ -23,6 +23,8 @@
 # SoC support
 obj-$(CONFIG_SUNIV_F1C100S_CCU)	+= ccu-suniv-f1c100s.o
 obj-$(CONFIG_SUN50I_A64_CCU)	+= ccu-sun50i-a64.o
+obj-$(CONFIG_SUN50I_A100_CCU)	+= ccu-sun50i-a100.o
+obj-$(CONFIG_SUN50I_A100_R_CCU)	+= ccu-sun50i-a100-r.o
 obj-$(CONFIG_SUN50I_H6_CCU)	+= ccu-sun50i-h6.o
 obj-$(CONFIG_SUN50I_H6_R_CCU)	+= ccu-sun50i-h6-r.o
 obj-$(CONFIG_SUN4I_A10_CCU)	+= ccu-sun4i-a10.o
diff --git a/drivers/clk/sunxi-ng/ccu-sun50i-a100-r.c b/drivers/clk/sunxi-ng/ccu-sun50i-a100-r.c
new file mode 100644
index 0000000..a56142b
--- /dev/null
+++ b/drivers/clk/sunxi-ng/ccu-sun50i-a100-r.c
@@ -0,0 +1,214 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ */
+
+#include <linux/clk-provider.h>
+#include <linux/module.h>
+#include <linux/of_address.h>
+#include <linux/platform_device.h>
+
+#include "ccu_common.h"
+#include "ccu_reset.h"
+
+#include "ccu_div.h"
+#include "ccu_gate.h"
+#include "ccu_mp.h"
+#include "ccu_nm.h"
+
+#include "ccu-sun50i-a100-r.h"
+
+static const char * const cpus_r_apb2_parents[] = { "dcxo24M", "osc32k",
+						     "iosc", "pll-periph0" };
+static const struct ccu_mux_var_prediv cpus_r_apb2_predivs[] = {
+	{ .index = 3, .shift = 0, .width = 5 },
+};
+
+static struct ccu_div r_cpus_clk = {
+	.div		= _SUNXI_CCU_DIV_FLAGS(8, 2, CLK_DIVIDER_POWER_OF_TWO),
+
+	.mux		= {
+		.shift	= 24,
+		.width	= 2,
+
+		.var_predivs	= cpus_r_apb2_predivs,
+		.n_var_predivs	= ARRAY_SIZE(cpus_r_apb2_predivs),
+	},
+
+	.common		= {
+		.reg		= 0x000,
+		.features	= CCU_FEATURE_VARIABLE_PREDIV,
+		.hw.init	= CLK_HW_INIT_PARENTS("cpus",
+						      cpus_r_apb2_parents,
+						      &ccu_div_ops,
+						      0),
+	},
+};
+
+static CLK_FIXED_FACTOR_HW(r_ahb_clk, "r-ahb", &r_cpus_clk.common.hw, 1, 1, 0);
+
+static struct ccu_div r_apb1_clk = {
+	.div		= _SUNXI_CCU_DIV(0, 2),
+
+	.common		= {
+		.reg		= 0x00c,
+		.hw.init	= CLK_HW_INIT("r-apb1",
+					      "r-ahb",
+					      &ccu_div_ops,
+					      0),
+	},
+};
+
+static struct ccu_div r_apb2_clk = {
+	.div		= _SUNXI_CCU_DIV_FLAGS(8, 2, CLK_DIVIDER_POWER_OF_TWO),
+
+	.mux		= {
+		.shift	= 24,
+		.width	= 2,
+
+		.var_predivs	= cpus_r_apb2_predivs,
+		.n_var_predivs	= ARRAY_SIZE(cpus_r_apb2_predivs),
+	},
+
+	.common		= {
+		.reg		= 0x010,
+		.features	= CCU_FEATURE_VARIABLE_PREDIV,
+		.hw.init	= CLK_HW_INIT_PARENTS("r-apb2",
+						      cpus_r_apb2_parents,
+						      &ccu_div_ops,
+						      0),
+	},
+};
+
+static const struct clk_parent_data clk_parent_r_apb1[] = {
+	{ .hw = &r_apb1_clk.common.hw },
+};
+
+static const struct clk_parent_data clk_parent_r_apb2[] = {
+	{ .hw = &r_apb2_clk.common.hw },
+};
+
+static SUNXI_CCU_GATE_DATA(r_apb1_timer_clk, "r-apb1-timer", clk_parent_r_apb1,
+			   0x11c, BIT(0), 0);
+
+static SUNXI_CCU_GATE_DATA(r_apb1_twd_clk, "r-apb1-twd", clk_parent_r_apb1,
+			   0x12c, BIT(0), 0);
+
+static const char * const r_apb1_pwm_clk_parents[] = { "dcxo24M", "osc32k",
+						       "iosc" };
+static SUNXI_CCU_MUX(r_apb1_pwm_clk, "r-apb1-pwm", r_apb1_pwm_clk_parents,
+		     0x130, 24, 2, 0);
+
+static SUNXI_CCU_GATE_DATA(r_apb1_bus_pwm_clk, "r-apb1-bus-pwm",
+			   clk_parent_r_apb1, 0x13c, BIT(0), 0);
+
+static SUNXI_CCU_GATE_DATA(r_apb1_ppu_clk, "r-apb1-ppu", clk_parent_r_apb1,
+			   0x17c, BIT(0), 0);
+
+static SUNXI_CCU_GATE_DATA(r_apb2_uart_clk, "r-apb2-uart", clk_parent_r_apb2,
+			   0x18c, BIT(0), 0);
+
+static SUNXI_CCU_GATE_DATA(r_apb2_i2c0_clk, "r-apb2-i2c0", clk_parent_r_apb2,
+			   0x19c, BIT(0), 0);
+
+static SUNXI_CCU_GATE_DATA(r_apb2_i2c1_clk, "r-apb2-i2c1", clk_parent_r_apb2,
+			   0x19c, BIT(1), 0);
+
+static const char * const r_apb1_ir_rx_parents[] = { "osc32k", "dcxo24M" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(r_apb1_ir_rx_clk, "r-apb1-ir-rx",
+				  r_apb1_ir_rx_parents, 0x1c0,
+				  0, 5,		/* M */
+				  8, 2,		/* P */
+				  24, 1,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_GATE_DATA(r_apb1_bus_ir_rx_clk, "r-apb1-bus-ir-rx",
+			   clk_parent_r_apb1, 0x1cc, BIT(0), 0);
+
+static SUNXI_CCU_GATE(r_ahb_bus_rtc_clk, "r-ahb-rtc", "r-ahb",
+		      0x20c, BIT(0), 0);
+
+static struct ccu_common *sun50i_a100_r_ccu_clks[] = {
+	&r_cpus_clk.common,
+	&r_apb1_clk.common,
+	&r_apb2_clk.common,
+	&r_apb1_timer_clk.common,
+	&r_apb1_twd_clk.common,
+	&r_apb1_pwm_clk.common,
+	&r_apb1_bus_pwm_clk.common,
+	&r_apb1_ppu_clk.common,
+	&r_apb2_uart_clk.common,
+	&r_apb2_i2c0_clk.common,
+	&r_apb2_i2c1_clk.common,
+	&r_apb1_ir_rx_clk.common,
+	&r_apb1_bus_ir_rx_clk.common,
+	&r_ahb_bus_rtc_clk.common,
+};
+
+static struct clk_hw_onecell_data sun50i_a100_r_hw_clks = {
+	.hws	= {
+		[CLK_R_CPUS]		= &r_cpus_clk.common.hw,
+		[CLK_R_AHB]		= &r_ahb_clk.hw,
+		[CLK_R_APB1]		= &r_apb1_clk.common.hw,
+		[CLK_R_APB2]		= &r_apb2_clk.common.hw,
+		[CLK_R_APB1_TIMER]	= &r_apb1_timer_clk.common.hw,
+		[CLK_R_APB1_TWD]	= &r_apb1_twd_clk.common.hw,
+		[CLK_R_APB1_PWM]	= &r_apb1_pwm_clk.common.hw,
+		[CLK_R_APB1_BUS_PWM]	= &r_apb1_bus_pwm_clk.common.hw,
+		[CLK_R_APB1_PPU]	= &r_apb1_ppu_clk.common.hw,
+		[CLK_R_APB2_UART]	= &r_apb2_uart_clk.common.hw,
+		[CLK_R_APB2_I2C0]	= &r_apb2_i2c0_clk.common.hw,
+		[CLK_R_APB2_I2C1]	= &r_apb2_i2c1_clk.common.hw,
+		[CLK_R_APB1_IR]		= &r_apb1_ir_rx_clk.common.hw,
+		[CLK_R_APB1_BUS_IR]	= &r_apb1_bus_ir_rx_clk.common.hw,
+		[CLK_R_AHB_BUS_RTC]	= &r_ahb_bus_rtc_clk.common.hw,
+	},
+	.num	= CLK_NUMBER,
+};
+
+static struct ccu_reset_map sun50i_a100_r_ccu_resets[] = {
+	[RST_R_APB1_TIMER]	=  { 0x11c, BIT(16) },
+	[RST_R_APB1_BUS_PWM]	=  { 0x13c, BIT(16) },
+	[RST_R_APB1_PPU]	=  { 0x17c, BIT(16) },
+	[RST_R_APB2_UART]	=  { 0x18c, BIT(16) },
+	[RST_R_APB2_I2C0]	=  { 0x19c, BIT(16) },
+	[RST_R_APB2_I2C1]	=  { 0x19c, BIT(17) },
+	[RST_R_APB1_BUS_IR]	=  { 0x1cc, BIT(16) },
+	[RST_R_AHB_BUS_RTC]	=  { 0x20c, BIT(16) },
+};
+
+static const struct sunxi_ccu_desc sun50i_a100_r_ccu_desc = {
+	.ccu_clks	= sun50i_a100_r_ccu_clks,
+	.num_ccu_clks	= ARRAY_SIZE(sun50i_a100_r_ccu_clks),
+
+	.hw_clks	= &sun50i_a100_r_hw_clks,
+
+	.resets		= sun50i_a100_r_ccu_resets,
+	.num_resets	= ARRAY_SIZE(sun50i_a100_r_ccu_resets),
+};
+
+static int sun50i_a100_r_ccu_probe(struct platform_device *pdev)
+{
+	void __iomem *reg;
+
+	reg = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(reg))
+		return PTR_ERR(reg);
+
+	return sunxi_ccu_probe(pdev->dev.of_node, reg, &sun50i_a100_r_ccu_desc);
+}
+
+static const struct of_device_id sun50i_a100_r_ccu_ids[] = {
+	{ .compatible = "allwinner,sun50i-a100-r-ccu" },
+	{ }
+};
+
+static struct platform_driver sun50i_a100_r_ccu_driver = {
+	.probe	= sun50i_a100_r_ccu_probe,
+	.driver	= {
+		.name	= "sun50i-a100-r-ccu",
+		.of_match_table	= sun50i_a100_r_ccu_ids,
+	},
+};
+module_platform_driver(sun50i_a100_r_ccu_driver);
diff --git a/drivers/clk/sunxi-ng/ccu-sun50i-a100-r.h b/drivers/clk/sunxi-ng/ccu-sun50i-a100-r.h
new file mode 100644
index 0000000..3a8f187
--- /dev/null
+++ b/drivers/clk/sunxi-ng/ccu-sun50i-a100-r.h
@@ -0,0 +1,21 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ */
+
+#ifndef _CCU_SUN50I_A100_R_H
+#define _CCU_SUN50I_A100_R_H
+
+#include <dt-bindings/clock/sun50i-a100-r-ccu.h>
+#include <dt-bindings/reset/sun50i-a100-r-ccu.h>
+
+#define CLK_R_CPUS		0
+#define CLK_R_AHB		1
+
+/* exported except APB1 for R_PIO */
+
+#define CLK_R_APB2		3
+
+#define CLK_NUMBER	(CLK_R_AHB_BUS_RTC + 1)
+
+#endif /* _CCU_SUN50I_A100_R_H */
diff --git a/drivers/clk/sunxi-ng/ccu-sun50i-a100.c b/drivers/clk/sunxi-ng/ccu-sun50i-a100.c
new file mode 100644
index 0000000..81b48c7
--- /dev/null
+++ b/drivers/clk/sunxi-ng/ccu-sun50i-a100.c
@@ -0,0 +1,1276 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ */
+
+#include <linux/clk-provider.h>
+#include <linux/io.h>
+#include <linux/module.h>
+#include <linux/of_address.h>
+#include <linux/platform_device.h>
+
+#include "ccu_common.h"
+#include "ccu_reset.h"
+
+#include "ccu_div.h"
+#include "ccu_gate.h"
+#include "ccu_mp.h"
+#include "ccu_mult.h"
+#include "ccu_nk.h"
+#include "ccu_nkm.h"
+#include "ccu_nkmp.h"
+#include "ccu_nm.h"
+
+#include "ccu-sun50i-a100.h"
+
+#define SUN50I_A100_PLL_SDM_ENABLE		BIT(24)
+#define SUN50I_A100_PLL_OUTPUT_ENABLE		BIT(27)
+#define SUN50I_A100_PLL_LOCK			BIT(28)
+#define SUN50I_A100_PLL_LOCK_ENABLE		BIT(29)
+#define SUN50I_A100_PLL_ENABLE			BIT(31)
+
+#define SUN50I_A100_PLL_PERIPH1_PATTERN0	0xd1303333
+
+/*
+ * The CPU PLL is actually NP clock, with P being /1, /2 or /4. However
+ * P should only be used for output frequencies lower than 288 MHz.
+ *
+ * For now we can just model it as a multiplier clock, and force P to /1.
+ *
+ * The M factor is present in the register's description, but not in the
+ * frequency formula, and it's documented as "M is only used for backdoor
+ * testing", so it's not modelled and then force to 0.
+ */
+#define SUN50I_A100_PLL_CPUX_REG		0x000
+static struct ccu_mult pll_cpux_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.mult		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.common		= {
+		.reg		= 0x000,
+		.hw.init	= CLK_HW_INIT("pll-cpux", "dcxo24M",
+					      &ccu_mult_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+/* Some PLLs are input * N / div1 / P. Model them as NKMP with no K */
+#define SUN50I_A100_PLL_DDR0_REG		0x010
+static struct ccu_nkmp pll_ddr0_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(1, 1), /* input divider */
+	.p		= _SUNXI_CCU_DIV(0, 1), /* output divider */
+	.common		= {
+		.reg		= 0x010,
+		.hw.init	= CLK_HW_INIT("pll-ddr0", "dcxo24M",
+					      &ccu_nkmp_ops,
+					      CLK_SET_RATE_UNGATE |
+					      CLK_IS_CRITICAL),
+	},
+};
+
+#define SUN50I_A100_PLL_PERIPH0_REG	0x020
+static struct ccu_nkmp pll_periph0_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(1, 1), /* input divider */
+	.p		= _SUNXI_CCU_DIV(0, 1), /* output divider */
+	.fixed_post_div	= 2,
+	.common		= {
+		.reg		= 0x020,
+		.features	= CCU_FEATURE_FIXED_POSTDIV,
+		.hw.init	= CLK_HW_INIT("pll-periph0", "dcxo24M",
+					      &ccu_nkmp_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+#define SUN50I_A100_PLL_PERIPH1_REG	0x028
+static struct ccu_nkmp pll_periph1_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(1, 1), /* input divider */
+	.p		= _SUNXI_CCU_DIV(0, 1), /* output divider */
+	.fixed_post_div	= 2,
+	.common		= {
+		.reg		= 0x028,
+		.features	= CCU_FEATURE_FIXED_POSTDIV,
+		.hw.init	= CLK_HW_INIT("pll-periph1", "dcxo24M",
+					      &ccu_nkmp_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+#define SUN50I_A100_PLL_PERIPH1_PATTERN0_REG	0x128
+
+#define SUN50I_A100_PLL_GPU_REG		0x030
+static struct ccu_nkmp pll_gpu_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(1, 1), /* input divider */
+	.p		= _SUNXI_CCU_DIV(0, 1), /* output divider */
+	.common		= {
+		.reg		= 0x030,
+		.hw.init	= CLK_HW_INIT("pll-gpu", "dcxo24M",
+					      &ccu_nkmp_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+/*
+ * For Video PLLs, the output divider is described as "used for testing"
+ * in the user manual. So it's not modelled and forced to 0.
+ */
+#define SUN50I_A100_PLL_VIDEO0_REG	0x040
+static struct ccu_nm pll_video0_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(1, 1), /* input divider */
+	.fixed_post_div	= 4,
+	.common		= {
+		.reg		= 0x040,
+		.features	= CCU_FEATURE_FIXED_POSTDIV,
+		.hw.init	= CLK_HW_INIT("pll-video0", "dcxo24M",
+					      &ccu_nm_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+#define SUN50I_A100_PLL_VIDEO1_REG	0x048
+static struct ccu_nm pll_video1_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(1, 1), /* input divider */
+	.fixed_post_div	= 4,
+	.common		= {
+		.reg		= 0x048,
+		.features	= CCU_FEATURE_FIXED_POSTDIV,
+		.hw.init	= CLK_HW_INIT("pll-video1", "dcxo24M",
+					      &ccu_nm_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+#define SUN50I_A100_PLL_VIDEO2_REG	0x050
+static struct ccu_nm pll_video2_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(1, 1), /* input divider */
+	.fixed_post_div	= 4,
+	.common		= {
+		.reg		= 0x050,
+		.features	= CCU_FEATURE_FIXED_POSTDIV,
+		.hw.init	= CLK_HW_INIT("pll-video2", "dcxo24M",
+					      &ccu_nm_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+#define SUN50I_A100_PLL_VE_REG		0x058
+static struct ccu_nkmp pll_ve_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(1, 1), /* input divider */
+	.p		= _SUNXI_CCU_DIV(0, 1), /* output divider */
+	.common		= {
+		.reg		= 0x058,
+		.hw.init	= CLK_HW_INIT("pll-ve", "dcxo24M",
+					      &ccu_nkmp_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+/*
+ * The COM PLL has m0 dividers in addition to the usual N, M
+ * factors. Since we only need 1 frequencies from this PLL: 45.1584 MHz,
+ * ignore it for now.
+ */
+#define SUN50I_A100_PLL_COM_REG		0x060
+static struct ccu_sdm_setting pll_com_sdm_table[] = {
+	{ .rate = 451584000, .pattern = 0xc0014396, .m = 2, .n = 37 },
+};
+
+static struct ccu_nm pll_com_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(0, 1),
+	.sdm		= _SUNXI_CCU_SDM(pll_com_sdm_table, BIT(24),
+					 0x160, BIT(31)),
+	.common		= {
+		.reg		= 0x060,
+		.features	= CCU_FEATURE_SIGMA_DELTA_MOD,
+		.hw.init	= CLK_HW_INIT("pll-com", "dcxo24M",
+					      &ccu_nm_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+#define SUN50I_A100_PLL_VIDEO3_REG	0x068
+static struct ccu_nm pll_video3_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(1, 1), /* input divider */
+	.fixed_post_div	= 4,
+	.common		= {
+		.reg		= 0x068,
+		.features	= CCU_FEATURE_FIXED_POSTDIV,
+		.hw.init	= CLK_HW_INIT("pll-video3", "dcxo24M",
+					      &ccu_nm_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+/*
+ * The Audio PLL has m0, m1 dividers in addition to the usual N, M
+ * factors. Since we only need 4 frequencies from this PLL: 22.5792 MHz,
+ * 24.576 MHz, 90.3168MHz and 98.304MHz ignore them for now.
+ * Enforce the default for them, which is m0 = 1, m1 = 0.
+ */
+#define SUN50I_A100_PLL_AUDIO_REG		0x078
+static struct ccu_sdm_setting pll_audio_sdm_table[] = {
+	{ .rate = 45158400, .pattern = 0xc001bcd3, .m = 18, .n = 33 },
+	{ .rate = 49152000, .pattern = 0xc001eb85, .m = 20, .n = 40 },
+	{ .rate = 180633600, .pattern = 0xc001288d, .m = 3, .n = 22 },
+	{ .rate = 196608000, .pattern = 0xc001eb85, .m = 5, .n = 40 },
+};
+
+static struct ccu_nm pll_audio_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(16, 6),
+	.fixed_post_div	= 2,
+	.sdm		= _SUNXI_CCU_SDM(pll_audio_sdm_table, BIT(24),
+					 0x178, BIT(31)),
+	.common		= {
+		.reg		= 0x078,
+		.features	= CCU_FEATURE_FIXED_POSTDIV |
+				  CCU_FEATURE_SIGMA_DELTA_MOD,
+		.hw.init	= CLK_HW_INIT("pll-audio", "dcxo24M",
+					      &ccu_nm_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+static const char * const cpux_parents[] = { "dcxo24M", "osc32k",
+					     "iosc", "pll-cpux",
+					      "pll-periph0" };
+static SUNXI_CCU_MUX(cpux_clk, "cpux", cpux_parents,
+		     0x500, 24, 3, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL);
+static SUNXI_CCU_M(axi_clk, "axi", "cpux", 0x500, 0, 2, 0);
+static SUNXI_CCU_M(cpux_apb_clk, "cpux-apb", "cpux", 0x500, 8, 2, 0);
+
+static const char * const psi_ahb1_ahb2_parents[] = { "dcxo24M", "osc32k",
+						      "iosc", "pll-periph0",
+						      "pll-periph0-2x" };
+static SUNXI_CCU_MP_WITH_MUX(psi_ahb1_ahb2_clk, "psi-ahb1-ahb2",
+			     psi_ahb1_ahb2_parents, 0x510,
+			     0, 2,	/* M */
+			     8, 2,	/* P */
+			     24, 3,	/* mux */
+			     0);
+
+static const char * const ahb3_apb1_apb2_parents[] = { "dcxo24M", "osc32k",
+						       "psi-ahb1-ahb2",
+						       "pll-periph0",
+						       "pll-periph0-2x" };
+static SUNXI_CCU_MP_WITH_MUX(ahb3_clk, "ahb3", ahb3_apb1_apb2_parents, 0x51c,
+			     0, 2,	/* M */
+			     8, 2,	/* P */
+			     24, 3,	/* mux */
+			     0);
+
+static SUNXI_CCU_MP_WITH_MUX(apb1_clk, "apb1", ahb3_apb1_apb2_parents, 0x520,
+			     0, 2,	/* M */
+			     8, 2,	/* P */
+			     24, 3,	/* mux */
+			     0);
+
+static SUNXI_CCU_MP_WITH_MUX(apb2_clk, "apb2", ahb3_apb1_apb2_parents, 0x524,
+			     0, 2,	/* M */
+			     8, 2,	/* P */
+			     24, 3,	/* mux */
+			     0);
+
+static const char * const mbus_parents[] = { "dcxo24M", "pll-ddr0",
+					     "pll-periph0",
+					     "pll-periph0-2x" };
+static SUNXI_CCU_M_WITH_MUX_GATE(mbus_clk, "mbus", mbus_parents, 0x540,
+				 0, 3,		/* M */
+				 24, 2,		/* mux */
+				 BIT(31),	/* gate */
+				 CLK_IS_CRITICAL);
+
+static const char * const de_parents[] = { "pll-com", "pll-periph0-2x" };
+static SUNXI_CCU_M_WITH_MUX_GATE(de_clk, "de0", de_parents, 0x600,
+				 0, 4,		/* M */
+				 24, 1,		/* mux */
+				 BIT(31),	/* gate */
+				 CLK_SET_RATE_PARENT);
+
+static SUNXI_CCU_GATE(bus_de_clk, "bus-de", "psi-ahb1-ahb2",
+		      0x60c, BIT(0), 0);
+
+static const char * const g2d_parents[] = { "pll-com", "pll-periph0-2x",
+					     "pll-video0-2x", "pll-video1-2x",
+					     "pll-video2-2x"};
+static SUNXI_CCU_M_WITH_MUX_GATE(g2d_clk, "g2d",
+				 g2d_parents,
+				 0x630,
+				 0, 4,		/* M */
+				 24, 3,		/* mux */
+				 BIT(31),	/* gate */
+				 0);
+
+static SUNXI_CCU_GATE(bus_g2d_clk, "bus-g2d", "psi-ahb1-ahb2",
+		      0x63c, BIT(0), 0);
+
+static const char * const gpu_parents[] = { "pll-gpu" };
+static SUNXI_CCU_M_WITH_MUX_GATE(gpu_clk, "gpu", gpu_parents, 0x670,
+				       0, 2,	/* M */
+				       24, 1,	/* mux */
+				       BIT(31),	/* gate */
+				       0);
+
+static SUNXI_CCU_GATE(bus_gpu_clk, "bus-gpu", "psi-ahb1-ahb2",
+		      0x67c, BIT(0), 0);
+
+static const char * const ce_parents[] = { "dcxo24M", "pll-periph0-2x" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(ce_clk, "ce", ce_parents, 0x680,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 1,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_GATE(bus_ce_clk, "bus-ce", "psi-ahb1-ahb2",
+		      0x68c, BIT(0), 0);
+
+static const char * const ve_parents[] = { "pll-ve" };
+static SUNXI_CCU_M_WITH_MUX_GATE(ve_clk, "ve", ve_parents, 0x690,
+				 0, 3,		/* M */
+				 24, 1,		/* mux */
+				 BIT(31),	/* gate */
+				 CLK_SET_RATE_PARENT);
+
+static SUNXI_CCU_GATE(bus_ve_clk, "bus-ve", "psi-ahb1-ahb2",
+		      0x69c, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_dma_clk, "bus-dma", "psi-ahb1-ahb2",
+		      0x70c, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_msgbox_clk, "bus-msgbox", "psi-ahb1-ahb2",
+		      0x71c, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_spinlock_clk, "bus-spinlock", "psi-ahb1-ahb2",
+		      0x72c, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_hstimer_clk, "bus-hstimer", "psi-ahb1-ahb2",
+		      0x73c, BIT(0), 0);
+
+static SUNXI_CCU_GATE(avs_clk, "avs", "dcxo24M", 0x740, BIT(31), 0);
+
+static SUNXI_CCU_GATE(bus_dbg_clk, "bus-dbg", "psi-ahb1-ahb2",
+		      0x78c, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_psi_clk, "bus-psi", "psi-ahb1-ahb2",
+		      0x79c, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_pwm_clk, "bus-pwm", "apb1", 0x7ac, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_iommu_clk, "bus-iommu", "apb1", 0x7bc, BIT(0), 0);
+
+static SUNXI_CCU_GATE(mbus_dma_clk, "mbus-dma", "mbus",
+		      0x804, BIT(0), 0);
+static SUNXI_CCU_GATE(mbus_ve_clk, "mbus-ve", "mbus",
+		      0x804, BIT(1), 0);
+static SUNXI_CCU_GATE(mbus_ce_clk, "mbus-ce", "mbus",
+		      0x804, BIT(2), 0);
+static SUNXI_CCU_GATE(mbus_nand_clk, "mbus-nand", "mbus",
+		      0x804, BIT(5), 0);
+static SUNXI_CCU_GATE(mbus_csi_clk, "mbus-csi", "mbus",
+		      0x804, BIT(8), 0);
+static SUNXI_CCU_GATE(mbus_isp_clk, "mbus-isp", "mbus",
+		      0x804, BIT(9), 0);
+static SUNXI_CCU_GATE(mbus_g2d_clk, "mbus-g2d", "mbus",
+		      0x804, BIT(10), 0);
+
+static SUNXI_CCU_GATE(bus_dram_clk, "bus-dram", "psi-ahb1-ahb2",
+		      0x80c, BIT(0), CLK_IS_CRITICAL);
+
+static const char * const nand_spi_parents[] = { "dcxo24M",
+						 "pll-periph0",
+						 "pll-periph1",
+						 "pll-periph0-2x",
+						 "pll-periph1-2x" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(nand0_clk, "nand0", nand_spi_parents, 0x810,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 3,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(nand1_clk, "nand1", nand_spi_parents, 0x814,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 3,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_GATE(bus_nand_clk, "bus-nand", "ahb3", 0x82c, BIT(0), 0);
+
+static const char * const mmc_parents[] = { "dcxo24M", "pll-periph0-2x",
+					    "pll-periph1-2x" };
+static SUNXI_CCU_MP_WITH_MUX_GATE_POSTDIV(mmc0_clk, "mmc0", mmc_parents, 0x830,
+					  0, 4,		/* M */
+					  8, 2,		/* P */
+					  24, 2,	/* mux */
+					  BIT(31),	/* gate */
+					  2,		/* post-div */
+					  CLK_SET_RATE_NO_REPARENT);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE_POSTDIV(mmc1_clk, "mmc1", mmc_parents, 0x834,
+					  0, 4,		/* M */
+					  8, 2,		/* P */
+					  24, 2,	/* mux */
+					  BIT(31),	/* gate */
+					  2,		/* post-div */
+					  CLK_SET_RATE_NO_REPARENT);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE_POSTDIV(mmc2_clk, "mmc2", mmc_parents, 0x838,
+					  0, 4,		/* M */
+					  8, 2,		/* P */
+					  24, 2,	/* mux */
+					  BIT(31),	/* gate */
+					  2,		/* post-div */
+					  CLK_SET_RATE_NO_REPARENT);
+
+static SUNXI_CCU_GATE(bus_mmc0_clk, "bus-mmc0", "ahb3", 0x84c, BIT(0), 0);
+static SUNXI_CCU_GATE(bus_mmc1_clk, "bus-mmc1", "ahb3", 0x84c, BIT(1), 0);
+static SUNXI_CCU_GATE(bus_mmc2_clk, "bus-mmc2", "ahb3", 0x84c, BIT(2), 0);
+
+static SUNXI_CCU_GATE(bus_uart0_clk, "bus-uart0", "apb2", 0x90c, BIT(0), 0);
+static SUNXI_CCU_GATE(bus_uart1_clk, "bus-uart1", "apb2", 0x90c, BIT(1), 0);
+static SUNXI_CCU_GATE(bus_uart2_clk, "bus-uart2", "apb2", 0x90c, BIT(2), 0);
+static SUNXI_CCU_GATE(bus_uart3_clk, "bus-uart3", "apb2", 0x90c, BIT(3), 0);
+static SUNXI_CCU_GATE(bus_uart4_clk, "bus-uart4", "apb2", 0x90c, BIT(4), 0);
+
+static SUNXI_CCU_GATE(bus_i2c0_clk, "bus-i2c0", "apb2", 0x91c, BIT(0), 0);
+static SUNXI_CCU_GATE(bus_i2c1_clk, "bus-i2c1", "apb2", 0x91c, BIT(1), 0);
+static SUNXI_CCU_GATE(bus_i2c2_clk, "bus-i2c2", "apb2", 0x91c, BIT(2), 0);
+static SUNXI_CCU_GATE(bus_i2c3_clk, "bus-i2c3", "apb2", 0x91c, BIT(3), 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(spi0_clk, "spi0", nand_spi_parents, 0x940,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 3,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(spi1_clk, "spi1", nand_spi_parents, 0x944,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 3,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(spi2_clk, "spi2", nand_spi_parents, 0x948,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 3,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_GATE(bus_spi0_clk, "bus-spi0", "ahb3", 0x96c, BIT(0), 0);
+static SUNXI_CCU_GATE(bus_spi1_clk, "bus-spi1", "ahb3", 0x96c, BIT(1), 0);
+static SUNXI_CCU_GATE(bus_spi2_clk, "bus-spi2", "ahb3", 0x96c, BIT(2), 0);
+
+static SUNXI_CCU_GATE(emac_25m_clk, "emac-25m", "ahb3", 0x970,
+		      BIT(31) | BIT(30), 0);
+
+static SUNXI_CCU_GATE(bus_emac_clk, "bus-emac", "ahb3", 0x97c, BIT(0), 0);
+
+static const char * const ir_parents[] = { "osc32k", "iosc",
+					   "pll-periph0", "pll-periph1" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(ir_rx_clk, "ir-rx", ir_parents, 0x990,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 3,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_GATE(bus_ir_rx_clk, "bus-ir-rx", "ahb3", 0x99c, BIT(0), 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(ir_tx_clk, "ir-tx", ir_parents, 0x9c0,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 3,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_GATE(bus_ir_tx_clk, "bus-ir-tx", "apb1", 0x9cc, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_gpadc_clk, "bus-gpadc", "apb1", 0x9ec, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_ths_clk, "bus-ths", "apb1", 0x9fc, BIT(0), 0);
+
+static const char * const audio_parents[] = { "pll-audio", "pll-com-audio" };
+static struct ccu_div i2s0_clk = {
+	.enable		= BIT(31),
+	.div		= _SUNXI_CCU_DIV_FLAGS(8, 2, CLK_DIVIDER_POWER_OF_TWO),
+	.mux		= _SUNXI_CCU_MUX(24, 2),
+	.common		= {
+		.reg		= 0xa10,
+		.hw.init	= CLK_HW_INIT_PARENTS("i2s0",
+						      audio_parents,
+						      &ccu_div_ops,
+						      CLK_SET_RATE_PARENT),
+	},
+};
+
+static struct ccu_div i2s1_clk = {
+	.enable		= BIT(31),
+	.div		= _SUNXI_CCU_DIV_FLAGS(8, 2, CLK_DIVIDER_POWER_OF_TWO),
+	.mux		= _SUNXI_CCU_MUX(24, 2),
+	.common		= {
+		.reg		= 0xa14,
+		.hw.init	= CLK_HW_INIT_PARENTS("i2s1",
+						      audio_parents,
+						      &ccu_div_ops,
+						      CLK_SET_RATE_PARENT),
+	},
+};
+
+static struct ccu_div i2s2_clk = {
+	.enable		= BIT(31),
+	.div		= _SUNXI_CCU_DIV_FLAGS(8, 2, CLK_DIVIDER_POWER_OF_TWO),
+	.mux		= _SUNXI_CCU_MUX(24, 2),
+	.common		= {
+		.reg		= 0xa18,
+		.hw.init	= CLK_HW_INIT_PARENTS("i2s2",
+						      audio_parents,
+						      &ccu_div_ops,
+						      CLK_SET_RATE_PARENT),
+	},
+};
+
+static struct ccu_div i2s3_clk = {
+	.enable		= BIT(31),
+	.div		= _SUNXI_CCU_DIV_FLAGS(8, 2, CLK_DIVIDER_POWER_OF_TWO),
+	.mux		= _SUNXI_CCU_MUX(24, 2),
+	.common		= {
+		.reg		= 0xa1c,
+		.hw.init	= CLK_HW_INIT_PARENTS("i2s3",
+						      audio_parents,
+						      &ccu_div_ops,
+						      CLK_SET_RATE_PARENT),
+	},
+};
+
+static SUNXI_CCU_GATE(bus_i2s0_clk, "bus-i2s0", "apb1", 0xa20, BIT(0), 0);
+static SUNXI_CCU_GATE(bus_i2s1_clk, "bus-i2s1", "apb1", 0xa20, BIT(1), 0);
+static SUNXI_CCU_GATE(bus_i2s2_clk, "bus-i2s2", "apb1", 0xa20, BIT(2), 0);
+static SUNXI_CCU_GATE(bus_i2s3_clk, "bus-i2s3", "apb1", 0xa20, BIT(3), 0);
+
+static struct ccu_div spdif_clk = {
+	.enable		= BIT(31),
+	.div		= _SUNXI_CCU_DIV_FLAGS(8, 2, CLK_DIVIDER_POWER_OF_TWO),
+	.mux		= _SUNXI_CCU_MUX(24, 2),
+	.common		= {
+		.reg		= 0xa24,
+		.hw.init	= CLK_HW_INIT_PARENTS("spdif",
+						      audio_parents,
+						      &ccu_div_ops,
+						      0),
+	},
+};
+
+static SUNXI_CCU_GATE(bus_spdif_clk, "bus-spdif", "apb1", 0xa2c, BIT(0), 0);
+
+static struct ccu_div dmic_clk = {
+	.enable		= BIT(31),
+	.div		= _SUNXI_CCU_DIV_FLAGS(8, 2, CLK_DIVIDER_POWER_OF_TWO),
+	.mux		= _SUNXI_CCU_MUX(24, 2),
+	.common		= {
+		.reg		= 0xa40,
+		.hw.init	= CLK_HW_INIT_PARENTS("dmic",
+						      audio_parents,
+						      &ccu_div_ops,
+						      0),
+	},
+};
+
+static SUNXI_CCU_GATE(bus_dmic_clk, "bus-dmic", "apb1", 0xa4c, BIT(0), 0);
+
+static SUNXI_CCU_M_WITH_MUX_GATE(audio_codec_dac_clk, "audio-codec-dac",
+				 audio_parents, 0xa50,
+				 0, 4,		/* M */
+				 24, 2,		/* mux */
+				 BIT(31),	/* gate */
+				 0);
+
+static SUNXI_CCU_M_WITH_MUX_GATE(audio_codec_adc_clk, "audio-codec-adc",
+				 audio_parents, 0xa54,
+				 0, 4,		/* M */
+				 24, 2,		/* mux */
+				 BIT(31),	/* gate */
+				 0);
+
+static SUNXI_CCU_M_WITH_MUX_GATE(audio_codec_4x_clk, "audio-codec-4x",
+				 audio_parents, 0xa58,
+				 0, 4,		/* M */
+				 24, 2,		/* mux */
+				 BIT(31),	/* gate */
+				 0);
+
+static SUNXI_CCU_GATE(bus_audio_codec_clk, "bus-audio-codec", "apb1", 0xa5c,
+		      BIT(0), 0);
+
+/*
+ * There are OHCI 12M clock source selection bits for 2 USB 2.0 ports.
+ * We will force them to 0 (12M divided from 48M).
+ */
+#define SUN50I_A100_USB0_CLK_REG		0xa70
+#define SUN50I_A100_USB1_CLK_REG		0xa74
+
+static SUNXI_CCU_GATE(usb_ohci0_clk, "usb-ohci0", "osc12M", 0xa70, BIT(31), 0);
+static SUNXI_CCU_GATE(usb_phy0_clk, "usb-phy0", "dcxo24M", 0xa70, BIT(29), 0);
+
+static SUNXI_CCU_GATE(usb_ohci1_clk, "usb-ohci1", "osc12M", 0xa74, BIT(31), 0);
+static SUNXI_CCU_GATE(usb_phy1_clk, "usb-phy1", "dcxo24M", 0xa74, BIT(29), 0);
+
+static SUNXI_CCU_GATE(bus_ohci0_clk, "bus-ohci0", "ahb3", 0xa8c, BIT(0), 0);
+static SUNXI_CCU_GATE(bus_ohci1_clk, "bus-ohci1", "ahb3", 0xa8c, BIT(1), 0);
+static SUNXI_CCU_GATE(bus_ehci0_clk, "bus-ehci0", "ahb3", 0xa8c, BIT(4), 0);
+static SUNXI_CCU_GATE(bus_ehci1_clk, "bus-ehci1", "ahb3", 0xa8c, BIT(5), 0);
+static SUNXI_CCU_GATE(bus_otg_clk, "bus-otg", "ahb3", 0xa8c, BIT(8), 0);
+
+static SUNXI_CCU_GATE(bus_lradc_clk, "bus-lradc", "ahb3", 0xa9c, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_dpss_top0_clk, "bus-dpss-top0", "ahb3",
+		      0xabc, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_dpss_top1_clk, "bus-dpss-top1", "ahb3",
+		      0xacc, BIT(0), 0);
+
+static const char * const mipi_dsi_parents[] = { "dcxo24M", "pll-periph0-2x",
+						 "pll-periph0" };
+static SUNXI_CCU_M_WITH_MUX_GATE(mipi_dsi_clk, "mipi-dsi",
+				 mipi_dsi_parents,
+				 0xb24,
+				 0, 4,		/* M */
+				 24, 2,		/* mux */
+				 BIT(31),	/* gate */
+				 0);
+
+static SUNXI_CCU_GATE(bus_mipi_dsi_clk, "bus-mipi-dsi", "ahb3",
+		      0xb4c, BIT(0), 0);
+
+static const char * const tcon_lcd_parents[] = { "pll-video0-4x",
+						  "pll-video1-4x",
+						  "pll-video2-4x",
+						  "pll-video3-4x",
+						  "pll-periph0-2x" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(tcon_lcd_clk, "tcon-lcd0",
+				  tcon_lcd_parents, 0xb60,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 3,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_GATE(bus_tcon_lcd_clk, "bus-tcon-lcd0", "ahb3",
+		      0xb7c, BIT(0), 0);
+
+static const char * const ledc_parents[] = { "dcxo24M",
+					     "pll-periph0" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(ledc_clk, "ledc",
+				  ledc_parents, 0xbf0,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 3,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_GATE(bus_ledc_clk, "bus-ledc", "ahb3", 0xbfc, BIT(0), 0);
+
+static const char * const csi_top_parents[] = { "pll-periph0-2x",
+						"pll-video0-2x",
+						"pll-video1-2x",
+						"pll-video2-2x",
+						"pll-video3-2x" };
+static SUNXI_CCU_M_WITH_MUX_GATE(csi_top_clk, "csi-top",
+				 csi_top_parents, 0xc04,
+				 0, 4,		/* M */
+				 24, 3,		/* mux */
+				 BIT(31),	/* gate */
+				 0);
+
+static const char * const csi0_mclk_parents[] = { "dcxo24M", "pll-video2",
+						  "pll-video3", "pll-video0",
+						  "pll-video1" };
+static SUNXI_CCU_M_WITH_MUX_GATE(csi0_mclk_clk, "csi0-mclk",
+				 csi0_mclk_parents, 0xc08,
+				 0, 5,		/* M */
+				 24, 3,		/* mux */
+				 BIT(31),	/* gate */
+				 0);
+
+static const char * const csi1_mclk_parents[] = { "dcxo24M", "pll-video3",
+						  "pll-video0", "pll-video1",
+						  "pll-video2" };
+static SUNXI_CCU_M_WITH_MUX_GATE(csi1_mclk_clk, "csi1-mclk",
+				 csi1_mclk_parents, 0xc0c,
+				 0, 5,		/* M */
+				 24, 3,		/* mux */
+				 BIT(31),	/* gate */
+				 0);
+
+static SUNXI_CCU_GATE(bus_csi_clk, "bus-csi", "ahb3", 0xc1c, BIT(0), 0);
+
+static const char * const csi_isp_parents[] = { "pll-periph0-2x",
+						"pll-video0-2x",
+						"pll-video1-2x",
+						"pll-video2-2x",
+						"pll-video3-2x" };
+static SUNXI_CCU_M_WITH_MUX_GATE(csi_isp_clk, "csi-isp",
+				 csi_isp_parents, 0xc20,
+				 0, 5,		/* M */
+				 24, 3,		/* mux */
+				 BIT(31),	/* gate */
+				 0);
+
+/* Fixed factor clocks */
+static CLK_FIXED_FACTOR_FW_NAME(osc12M_clk, "osc12M", "hosc", 2, 1, 0);
+
+static CLK_FIXED_FACTOR_HW(pll_com_audio_clk, "pll-com-audio",
+			   &pll_com_clk.common.hw,
+			   5, 1, CLK_SET_RATE_PARENT);
+
+static CLK_FIXED_FACTOR_HW(pll_periph0_2x_clk, "pll-periph0-2x",
+			   &pll_periph0_clk.common.hw,
+			   1, 2, 0);
+
+static CLK_FIXED_FACTOR_HW(pll_periph1_2x_clk, "pll-periph1-2x",
+			   &pll_periph1_clk.common.hw,
+			   1, 2, 0);
+
+static const struct clk_hw *pll_video0_parents[] = {
+	&pll_video0_clk.common.hw
+};
+static CLK_FIXED_FACTOR_HWS(pll_video0_4x_clk, "pll-video0-4x",
+			    pll_video0_parents,
+			    1, 4, CLK_SET_RATE_PARENT);
+static CLK_FIXED_FACTOR_HWS(pll_video0_2x_clk, "pll-video0-2x",
+			    pll_video0_parents,
+			    1, 2, CLK_SET_RATE_PARENT);
+
+static const struct clk_hw *pll_video1_parents[] = {
+	&pll_video1_clk.common.hw
+};
+static CLK_FIXED_FACTOR_HWS(pll_video1_4x_clk, "pll-video1-4x",
+			    pll_video1_parents,
+			    1, 4, CLK_SET_RATE_PARENT);
+static CLK_FIXED_FACTOR_HWS(pll_video1_2x_clk, "pll-video1-2x",
+			    pll_video1_parents,
+			    1, 2, CLK_SET_RATE_PARENT);
+
+static const struct clk_hw *pll_video2_parents[] = {
+	&pll_video2_clk.common.hw
+};
+static CLK_FIXED_FACTOR_HWS(pll_video2_4x_clk, "pll-video2-4x",
+			    pll_video2_parents,
+			    1, 4, CLK_SET_RATE_PARENT);
+static CLK_FIXED_FACTOR_HWS(pll_video2_2x_clk, "pll-video2-2x",
+			    pll_video2_parents,
+			    1, 2, CLK_SET_RATE_PARENT);
+
+static const struct clk_hw *pll_video3_parents[] = {
+	&pll_video3_clk.common.hw
+};
+static CLK_FIXED_FACTOR_HWS(pll_video3_4x_clk, "pll-video3-4x",
+			    pll_video3_parents,
+			    1, 4, CLK_SET_RATE_PARENT);
+static CLK_FIXED_FACTOR_HWS(pll_video3_2x_clk, "pll-video3-2x",
+			    pll_video3_parents,
+			    1, 2, CLK_SET_RATE_PARENT);
+
+static struct ccu_common *sun50i_a100_ccu_clks[] = {
+	&pll_cpux_clk.common,
+	&pll_ddr0_clk.common,
+	&pll_periph0_clk.common,
+	&pll_periph1_clk.common,
+	&pll_gpu_clk.common,
+	&pll_video0_clk.common,
+	&pll_video1_clk.common,
+	&pll_video2_clk.common,
+	&pll_video3_clk.common,
+	&pll_ve_clk.common,
+	&pll_com_clk.common,
+	&pll_audio_clk.common,
+	&cpux_clk.common,
+	&axi_clk.common,
+	&cpux_apb_clk.common,
+	&psi_ahb1_ahb2_clk.common,
+	&ahb3_clk.common,
+	&apb1_clk.common,
+	&apb2_clk.common,
+	&mbus_clk.common,
+	&de_clk.common,
+	&bus_de_clk.common,
+	&g2d_clk.common,
+	&bus_g2d_clk.common,
+	&gpu_clk.common,
+	&bus_gpu_clk.common,
+	&ce_clk.common,
+	&bus_ce_clk.common,
+	&ve_clk.common,
+	&bus_ve_clk.common,
+	&bus_dma_clk.common,
+	&bus_msgbox_clk.common,
+	&bus_spinlock_clk.common,
+	&bus_hstimer_clk.common,
+	&avs_clk.common,
+	&bus_dbg_clk.common,
+	&bus_psi_clk.common,
+	&bus_pwm_clk.common,
+	&bus_iommu_clk.common,
+	&mbus_dma_clk.common,
+	&mbus_ve_clk.common,
+	&mbus_ce_clk.common,
+	&mbus_nand_clk.common,
+	&mbus_csi_clk.common,
+	&mbus_isp_clk.common,
+	&mbus_g2d_clk.common,
+	&bus_dram_clk.common,
+	&nand0_clk.common,
+	&nand1_clk.common,
+	&bus_nand_clk.common,
+	&mmc0_clk.common,
+	&mmc1_clk.common,
+	&mmc2_clk.common,
+	&bus_mmc0_clk.common,
+	&bus_mmc1_clk.common,
+	&bus_mmc2_clk.common,
+	&bus_uart0_clk.common,
+	&bus_uart1_clk.common,
+	&bus_uart2_clk.common,
+	&bus_uart3_clk.common,
+	&bus_uart4_clk.common,
+	&bus_i2c0_clk.common,
+	&bus_i2c1_clk.common,
+	&bus_i2c2_clk.common,
+	&bus_i2c3_clk.common,
+	&spi0_clk.common,
+	&spi1_clk.common,
+	&spi2_clk.common,
+	&bus_spi0_clk.common,
+	&bus_spi1_clk.common,
+	&bus_spi2_clk.common,
+	&emac_25m_clk.common,
+	&bus_emac_clk.common,
+	&ir_rx_clk.common,
+	&bus_ir_rx_clk.common,
+	&ir_tx_clk.common,
+	&bus_ir_tx_clk.common,
+	&bus_gpadc_clk.common,
+	&bus_ths_clk.common,
+	&i2s0_clk.common,
+	&i2s1_clk.common,
+	&i2s2_clk.common,
+	&i2s3_clk.common,
+	&bus_i2s0_clk.common,
+	&bus_i2s1_clk.common,
+	&bus_i2s2_clk.common,
+	&bus_i2s3_clk.common,
+	&spdif_clk.common,
+	&bus_spdif_clk.common,
+	&dmic_clk.common,
+	&bus_dmic_clk.common,
+	&audio_codec_dac_clk.common,
+	&audio_codec_adc_clk.common,
+	&audio_codec_4x_clk.common,
+	&bus_audio_codec_clk.common,
+	&usb_ohci0_clk.common,
+	&usb_phy0_clk.common,
+	&usb_ohci1_clk.common,
+	&usb_phy1_clk.common,
+	&bus_ohci0_clk.common,
+	&bus_ohci1_clk.common,
+	&bus_ehci0_clk.common,
+	&bus_ehci1_clk.common,
+	&bus_otg_clk.common,
+	&bus_lradc_clk.common,
+	&bus_dpss_top0_clk.common,
+	&bus_dpss_top1_clk.common,
+	&mipi_dsi_clk.common,
+	&bus_mipi_dsi_clk.common,
+	&tcon_lcd_clk.common,
+	&bus_tcon_lcd_clk.common,
+	&ledc_clk.common,
+	&bus_ledc_clk.common,
+	&csi_top_clk.common,
+	&csi0_mclk_clk.common,
+	&csi1_mclk_clk.common,
+	&bus_csi_clk.common,
+	&csi_isp_clk.common,
+};
+
+static struct clk_hw_onecell_data sun50i_a100_hw_clks = {
+	.hws	= {
+		[CLK_OSC12M]		= &osc12M_clk.hw,
+		[CLK_PLL_CPUX]		= &pll_cpux_clk.common.hw,
+		[CLK_PLL_DDR0]		= &pll_ddr0_clk.common.hw,
+		[CLK_PLL_PERIPH0]	= &pll_periph0_clk.common.hw,
+		[CLK_PLL_PERIPH0_2X]	= &pll_periph0_2x_clk.hw,
+		[CLK_PLL_PERIPH1]	= &pll_periph1_clk.common.hw,
+		[CLK_PLL_PERIPH1_2X]	= &pll_periph1_2x_clk.hw,
+		[CLK_PLL_GPU]		= &pll_gpu_clk.common.hw,
+		[CLK_PLL_VIDEO0]	= &pll_video0_clk.common.hw,
+		[CLK_PLL_VIDEO0_2X]	= &pll_video0_2x_clk.hw,
+		[CLK_PLL_VIDEO0_4X]	= &pll_video0_4x_clk.hw,
+		[CLK_PLL_VIDEO1]	= &pll_video1_clk.common.hw,
+		[CLK_PLL_VIDEO1_2X]	= &pll_video1_2x_clk.hw,
+		[CLK_PLL_VIDEO1_4X]	= &pll_video1_4x_clk.hw,
+		[CLK_PLL_VIDEO2]	= &pll_video2_clk.common.hw,
+		[CLK_PLL_VIDEO2_2X]	= &pll_video2_2x_clk.hw,
+		[CLK_PLL_VIDEO2_4X]	= &pll_video2_4x_clk.hw,
+		[CLK_PLL_VIDEO3]	= &pll_video3_clk.common.hw,
+		[CLK_PLL_VIDEO3_2X]	= &pll_video3_2x_clk.hw,
+		[CLK_PLL_VIDEO3_4X]	= &pll_video3_4x_clk.hw,
+		[CLK_PLL_VE]		= &pll_ve_clk.common.hw,
+		[CLK_PLL_COM]		= &pll_com_clk.common.hw,
+		[CLK_PLL_COM_AUDIO]	= &pll_com_audio_clk.hw,
+		[CLK_PLL_AUDIO]		= &pll_audio_clk.common.hw,
+		[CLK_CPUX]		= &cpux_clk.common.hw,
+		[CLK_AXI]		= &axi_clk.common.hw,
+		[CLK_CPUX_APB]		= &cpux_apb_clk.common.hw,
+		[CLK_PSI_AHB1_AHB2]	= &psi_ahb1_ahb2_clk.common.hw,
+		[CLK_AHB3]		= &ahb3_clk.common.hw,
+		[CLK_APB1]		= &apb1_clk.common.hw,
+		[CLK_APB2]		= &apb2_clk.common.hw,
+		[CLK_MBUS]		= &mbus_clk.common.hw,
+		[CLK_DE]		= &de_clk.common.hw,
+		[CLK_BUS_DE]		= &bus_de_clk.common.hw,
+		[CLK_G2D]		= &g2d_clk.common.hw,
+		[CLK_BUS_G2D]		= &bus_g2d_clk.common.hw,
+		[CLK_GPU]		= &gpu_clk.common.hw,
+		[CLK_BUS_GPU]		= &bus_gpu_clk.common.hw,
+		[CLK_CE]		= &ce_clk.common.hw,
+		[CLK_BUS_CE]		= &bus_ce_clk.common.hw,
+		[CLK_VE]		= &ve_clk.common.hw,
+		[CLK_BUS_VE]		= &bus_ve_clk.common.hw,
+		[CLK_BUS_DMA]		= &bus_dma_clk.common.hw,
+		[CLK_BUS_MSGBOX]	= &bus_msgbox_clk.common.hw,
+		[CLK_BUS_SPINLOCK]	= &bus_spinlock_clk.common.hw,
+		[CLK_BUS_HSTIMER]	= &bus_hstimer_clk.common.hw,
+		[CLK_AVS]		= &avs_clk.common.hw,
+		[CLK_BUS_DBG]		= &bus_dbg_clk.common.hw,
+		[CLK_BUS_PSI]		= &bus_psi_clk.common.hw,
+		[CLK_BUS_PWM]		= &bus_pwm_clk.common.hw,
+		[CLK_BUS_IOMMU]		= &bus_iommu_clk.common.hw,
+		[CLK_MBUS_DMA]		= &mbus_dma_clk.common.hw,
+		[CLK_MBUS_VE]		= &mbus_ve_clk.common.hw,
+		[CLK_MBUS_CE]		= &mbus_ce_clk.common.hw,
+		[CLK_MBUS_NAND]		= &mbus_nand_clk.common.hw,
+		[CLK_MBUS_CSI]		= &mbus_csi_clk.common.hw,
+		[CLK_MBUS_ISP]		= &mbus_isp_clk.common.hw,
+		[CLK_MBUS_G2D]		= &mbus_g2d_clk.common.hw,
+		[CLK_BUS_DRAM]		= &bus_dram_clk.common.hw,
+		[CLK_NAND0]		= &nand0_clk.common.hw,
+		[CLK_NAND1]		= &nand1_clk.common.hw,
+		[CLK_BUS_NAND]		= &bus_nand_clk.common.hw,
+		[CLK_MMC0]		= &mmc0_clk.common.hw,
+		[CLK_MMC1]		= &mmc1_clk.common.hw,
+		[CLK_MMC2]		= &mmc2_clk.common.hw,
+		[CLK_BUS_MMC0]		= &bus_mmc0_clk.common.hw,
+		[CLK_BUS_MMC1]		= &bus_mmc1_clk.common.hw,
+		[CLK_BUS_MMC2]		= &bus_mmc2_clk.common.hw,
+		[CLK_BUS_UART0]		= &bus_uart0_clk.common.hw,
+		[CLK_BUS_UART1]		= &bus_uart1_clk.common.hw,
+		[CLK_BUS_UART2]		= &bus_uart2_clk.common.hw,
+		[CLK_BUS_UART3]		= &bus_uart3_clk.common.hw,
+		[CLK_BUS_UART4]		= &bus_uart4_clk.common.hw,
+		[CLK_BUS_I2C0]		= &bus_i2c0_clk.common.hw,
+		[CLK_BUS_I2C1]		= &bus_i2c1_clk.common.hw,
+		[CLK_BUS_I2C2]		= &bus_i2c2_clk.common.hw,
+		[CLK_BUS_I2C3]		= &bus_i2c3_clk.common.hw,
+		[CLK_SPI0]		= &spi0_clk.common.hw,
+		[CLK_SPI1]		= &spi1_clk.common.hw,
+		[CLK_SPI2]		= &spi2_clk.common.hw,
+		[CLK_BUS_SPI0]		= &bus_spi0_clk.common.hw,
+		[CLK_BUS_SPI1]		= &bus_spi1_clk.common.hw,
+		[CLK_BUS_SPI2]		= &bus_spi2_clk.common.hw,
+		[CLK_EMAC_25M]		= &emac_25m_clk.common.hw,
+		[CLK_BUS_EMAC]		= &bus_emac_clk.common.hw,
+		[CLK_IR_RX]		= &ir_rx_clk.common.hw,
+		[CLK_BUS_IR_RX]		= &bus_ir_rx_clk.common.hw,
+		[CLK_IR_TX]		= &ir_tx_clk.common.hw,
+		[CLK_BUS_IR_TX]		= &bus_ir_tx_clk.common.hw,
+		[CLK_BUS_GPADC]		= &bus_gpadc_clk.common.hw,
+		[CLK_BUS_THS]		= &bus_ths_clk.common.hw,
+		[CLK_I2S0]		= &i2s0_clk.common.hw,
+		[CLK_I2S1]		= &i2s1_clk.common.hw,
+		[CLK_I2S2]		= &i2s2_clk.common.hw,
+		[CLK_I2S3]		= &i2s3_clk.common.hw,
+		[CLK_BUS_I2S0]		= &bus_i2s0_clk.common.hw,
+		[CLK_BUS_I2S1]		= &bus_i2s1_clk.common.hw,
+		[CLK_BUS_I2S2]		= &bus_i2s2_clk.common.hw,
+		[CLK_BUS_I2S3]		= &bus_i2s3_clk.common.hw,
+		[CLK_SPDIF]		= &spdif_clk.common.hw,
+		[CLK_BUS_SPDIF]		= &bus_spdif_clk.common.hw,
+		[CLK_DMIC]		= &dmic_clk.common.hw,
+		[CLK_BUS_DMIC]		= &bus_dmic_clk.common.hw,
+		[CLK_AUDIO_DAC]		= &audio_codec_dac_clk.common.hw,
+		[CLK_AUDIO_ADC]		= &audio_codec_adc_clk.common.hw,
+		[CLK_AUDIO_4X]		= &audio_codec_4x_clk.common.hw,
+		[CLK_BUS_AUDIO_CODEC]	= &bus_audio_codec_clk.common.hw,
+		[CLK_USB_OHCI0]		= &usb_ohci0_clk.common.hw,
+		[CLK_USB_PHY0]		= &usb_phy0_clk.common.hw,
+		[CLK_USB_OHCI1]		= &usb_ohci1_clk.common.hw,
+		[CLK_USB_PHY1]		= &usb_phy1_clk.common.hw,
+		[CLK_BUS_OHCI0]		= &bus_ohci0_clk.common.hw,
+		[CLK_BUS_OHCI1]		= &bus_ohci1_clk.common.hw,
+		[CLK_BUS_EHCI0]		= &bus_ehci0_clk.common.hw,
+		[CLK_BUS_EHCI1]		= &bus_ehci1_clk.common.hw,
+		[CLK_BUS_OTG]		= &bus_otg_clk.common.hw,
+		[CLK_BUS_LRADC]		= &bus_lradc_clk.common.hw,
+		[CLK_BUS_DPSS_TOP0]	= &bus_dpss_top0_clk.common.hw,
+		[CLK_BUS_DPSS_TOP1]	= &bus_dpss_top1_clk.common.hw,
+		[CLK_MIPI_DSI]		= &mipi_dsi_clk.common.hw,
+		[CLK_BUS_MIPI_DSI]	= &bus_mipi_dsi_clk.common.hw,
+		[CLK_TCON_LCD]		= &tcon_lcd_clk.common.hw,
+		[CLK_BUS_TCON_LCD]	= &bus_tcon_lcd_clk.common.hw,
+		[CLK_LEDC]		= &ledc_clk.common.hw,
+		[CLK_BUS_LEDC]		= &bus_ledc_clk.common.hw,
+		[CLK_CSI_TOP]		= &csi_top_clk.common.hw,
+		[CLK_CSI0_MCLK]		= &csi0_mclk_clk.common.hw,
+		[CLK_CSI1_MCLK]		= &csi1_mclk_clk.common.hw,
+		[CLK_BUS_CSI]		= &bus_csi_clk.common.hw,
+		[CLK_CSI_ISP]		= &csi_isp_clk.common.hw,
+	},
+	.num = CLK_NUMBER,
+};
+
+static struct ccu_reset_map sun50i_a100_ccu_resets[] = {
+	[RST_MBUS]		= { 0x540, BIT(30) },
+
+	[RST_BUS_DE]		= { 0x60c, BIT(16) },
+	[RST_BUS_G2D]		= { 0x63c, BIT(16) },
+	[RST_BUS_GPU]		= { 0x67c, BIT(16) },
+	[RST_BUS_CE]		= { 0x68c, BIT(16) },
+	[RST_BUS_VE]		= { 0x69c, BIT(16) },
+	[RST_BUS_DMA]		= { 0x70c, BIT(16) },
+	[RST_BUS_MSGBOX]	= { 0x71c, BIT(16) },
+	[RST_BUS_SPINLOCK]	= { 0x72c, BIT(16) },
+	[RST_BUS_HSTIMER]	= { 0x73c, BIT(16) },
+	[RST_BUS_DBG]		= { 0x78c, BIT(16) },
+	[RST_BUS_PSI]		= { 0x79c, BIT(16) },
+	[RST_BUS_PWM]		= { 0x7ac, BIT(16) },
+	[RST_BUS_DRAM]		= { 0x80c, BIT(16) },
+	[RST_BUS_NAND]		= { 0x82c, BIT(16) },
+	[RST_BUS_MMC0]		= { 0x84c, BIT(16) },
+	[RST_BUS_MMC1]		= { 0x84c, BIT(17) },
+	[RST_BUS_MMC2]		= { 0x84c, BIT(18) },
+	[RST_BUS_UART0]		= { 0x90c, BIT(16) },
+	[RST_BUS_UART1]		= { 0x90c, BIT(17) },
+	[RST_BUS_UART2]		= { 0x90c, BIT(18) },
+	[RST_BUS_UART3]		= { 0x90c, BIT(19) },
+	[RST_BUS_UART4]		= { 0x90c, BIT(20) },
+	[RST_BUS_I2C0]		= { 0x91c, BIT(16) },
+	[RST_BUS_I2C1]		= { 0x91c, BIT(17) },
+	[RST_BUS_I2C2]		= { 0x91c, BIT(18) },
+	[RST_BUS_I2C3]		= { 0x91c, BIT(19) },
+	[RST_BUS_SPI0]		= { 0x96c, BIT(16) },
+	[RST_BUS_SPI1]		= { 0x96c, BIT(17) },
+	[RST_BUS_SPI2]		= { 0x96c, BIT(18) },
+	[RST_BUS_EMAC]		= { 0x97c, BIT(16) },
+	[RST_BUS_IR_RX]		= { 0x99c, BIT(16) },
+	[RST_BUS_IR_TX]		= { 0x9cc, BIT(16) },
+	[RST_BUS_GPADC]		= { 0x9ec, BIT(16) },
+	[RST_BUS_THS]		= { 0x9fc, BIT(16) },
+	[RST_BUS_I2S0]		= { 0xa20, BIT(16) },
+	[RST_BUS_I2S1]		= { 0xa20, BIT(17) },
+	[RST_BUS_I2S2]		= { 0xa20, BIT(18) },
+	[RST_BUS_I2S3]		= { 0xa20, BIT(19) },
+	[RST_BUS_SPDIF]		= { 0xa2c, BIT(16) },
+	[RST_BUS_DMIC]		= { 0xa4c, BIT(16) },
+	[RST_BUS_AUDIO_CODEC]	= { 0xa5c, BIT(16) },
+
+	[RST_USB_PHY0]		= { 0xa70, BIT(30) },
+	[RST_USB_PHY1]		= { 0xa74, BIT(30) },
+
+	[RST_BUS_OHCI0]		= { 0xa8c, BIT(16) },
+	[RST_BUS_OHCI1]		= { 0xa8c, BIT(17) },
+	[RST_BUS_EHCI0]		= { 0xa8c, BIT(20) },
+	[RST_BUS_EHCI1]		= { 0xa8c, BIT(21) },
+	[RST_BUS_OTG]		= { 0xa8c, BIT(24) },
+
+	[RST_BUS_LRADC]		= { 0xa9c, BIT(16) },
+	[RST_BUS_DPSS_TOP0]	= { 0xabc, BIT(16) },
+	[RST_BUS_DPSS_TOP1]	= { 0xacc, BIT(16) },
+	[RST_BUS_MIPI_DSI]	= { 0xb4c, BIT(16) },
+	[RST_BUS_TCON_LCD]	= { 0xb7c, BIT(16) },
+	[RST_BUS_LVDS]		= { 0xbac, BIT(16) },
+	[RST_BUS_LEDC]		= { 0xbfc, BIT(16) },
+	[RST_BUS_CSI]		= { 0xc1c, BIT(16) },
+	[RST_BUS_CSI_ISP]	= { 0xc2c, BIT(16) },
+};
+
+static const struct sunxi_ccu_desc sun50i_a100_ccu_desc = {
+	.ccu_clks	= sun50i_a100_ccu_clks,
+	.num_ccu_clks	= ARRAY_SIZE(sun50i_a100_ccu_clks),
+
+	.hw_clks	= &sun50i_a100_hw_clks,
+
+	.resets		= sun50i_a100_ccu_resets,
+	.num_resets	= ARRAY_SIZE(sun50i_a100_ccu_resets),
+};
+
+static const u32 sun50i_a100_pll_regs[] = {
+	SUN50I_A100_PLL_CPUX_REG,
+	SUN50I_A100_PLL_DDR0_REG,
+	SUN50I_A100_PLL_PERIPH0_REG,
+	SUN50I_A100_PLL_PERIPH1_REG,
+	SUN50I_A100_PLL_GPU_REG,
+	SUN50I_A100_PLL_VIDEO0_REG,
+	SUN50I_A100_PLL_VIDEO1_REG,
+	SUN50I_A100_PLL_VIDEO2_REG,
+	SUN50I_A100_PLL_VIDEO3_REG,
+	SUN50I_A100_PLL_VE_REG,
+	SUN50I_A100_PLL_COM_REG,
+	SUN50I_A100_PLL_AUDIO_REG,
+};
+
+static const u32 sun50i_a100_pll_video_regs[] = {
+	SUN50I_A100_PLL_VIDEO0_REG,
+	SUN50I_A100_PLL_VIDEO1_REG,
+	SUN50I_A100_PLL_VIDEO2_REG,
+	SUN50I_A100_PLL_VIDEO3_REG,
+};
+
+static const u32 sun50i_a100_usb2_clk_regs[] = {
+	SUN50I_A100_USB0_CLK_REG,
+	SUN50I_A100_USB1_CLK_REG,
+};
+
+static struct ccu_pll_nb sun50i_a100_pll_cpu_nb = {
+	.common = &pll_cpux_clk.common,
+	/* copy from pll_cpux_clk */
+	.enable = BIT(27),
+	.lock   = BIT(28),
+};
+
+static struct ccu_mux_nb sun50i_a100_cpu_nb = {
+	.common         = &cpux_clk.common,
+	.cm             = &cpux_clk.mux,
+	.delay_us       = 1,
+	.bypass_index   = 4, /* index of pll periph0 */
+};
+
+static int sun50i_a100_ccu_probe(struct platform_device *pdev)
+{
+	void __iomem *reg;
+	u32 val;
+	int i, ret;
+
+	reg = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(reg))
+		return PTR_ERR(reg);
+
+	/*
+	 * Enable lock and enable bits on all PLLs.
+	 *
+	 * Due to the current design, multiple PLLs share one power switch,
+	 * so switching PLL is easy to cause stability problems.
+	 * When initializing, we enable them by default. When disable,
+	 * we only turn off the output of PLL.
+	 */
+	for (i = 0; i < ARRAY_SIZE(sun50i_a100_pll_regs); i++) {
+		val = readl(reg + sun50i_a100_pll_regs[i]);
+		val |= SUN50I_A100_PLL_LOCK_ENABLE | SUN50I_A100_PLL_ENABLE;
+		writel(val, reg + sun50i_a100_pll_regs[i]);
+	}
+
+	/*
+	 * In order to pass the EMI certification, the SDM function of
+	 * the peripheral 1 bus is enabled, and the frequency is still
+	 * calculated using the previous division factor.
+	 */
+	writel(SUN50I_A100_PLL_PERIPH1_PATTERN0,
+	       reg + SUN50I_A100_PLL_PERIPH1_PATTERN0_REG);
+
+	val = readl(reg + SUN50I_A100_PLL_PERIPH1_REG);
+	val |= SUN50I_A100_PLL_SDM_ENABLE;
+	writel(val, reg + SUN50I_A100_PLL_PERIPH1_REG);
+
+	/*
+	 * Force the output divider of video PLLs to 0.
+	 *
+	 * See the comment before pll-video0 definition for the reason.
+	 */
+	for (i = 0; i < ARRAY_SIZE(sun50i_a100_pll_video_regs); i++) {
+		val = readl(reg + sun50i_a100_pll_video_regs[i]);
+		val &= ~BIT(0);
+		writel(val, reg + sun50i_a100_pll_video_regs[i]);
+	}
+
+	/*
+	 * Enforce m1 = 0, m0 = 1 for Audio PLL
+	 *
+	 * See the comment before pll-audio definition for the reason.
+	 */
+	val = readl(reg + SUN50I_A100_PLL_AUDIO_REG);
+	val &= ~BIT(1);
+	val |= BIT(0);
+	writel(val, reg + SUN50I_A100_PLL_AUDIO_REG);
+
+	/*
+	 * Force OHCI 12M clock sources to 00 (12MHz divided from 48MHz)
+	 *
+	 * This clock mux is still mysterious, and the code just enforces
+	 * it to have a valid clock parent.
+	 */
+	for (i = 0; i < ARRAY_SIZE(sun50i_a100_usb2_clk_regs); i++) {
+		val = readl(reg + sun50i_a100_usb2_clk_regs[i]);
+		val &= ~GENMASK(25, 24);
+		writel(val, reg + sun50i_a100_usb2_clk_regs[i]);
+	}
+
+	ret = sunxi_ccu_probe(pdev->dev.of_node, reg, &sun50i_a100_ccu_desc);
+	if (ret)
+		return ret;
+
+	/* Gate then ungate PLL CPU after any rate changes */
+	ccu_pll_notifier_register(&sun50i_a100_pll_cpu_nb);
+
+	/* Reparent CPU during PLL CPU rate changes */
+	ccu_mux_notifier_register(pll_cpux_clk.common.hw.clk,
+				  &sun50i_a100_cpu_nb);
+
+	return 0;
+}
+
+static const struct of_device_id sun50i_a100_ccu_ids[] = {
+	{ .compatible = "allwinner,sun50i-a100-ccu" },
+	{ }
+};
+
+static struct platform_driver sun50i_a100_ccu_driver = {
+	.probe	= sun50i_a100_ccu_probe,
+	.driver	= {
+		.name	= "sun50i-a100-ccu",
+		.of_match_table	= sun50i_a100_ccu_ids,
+	},
+};
+module_platform_driver(sun50i_a100_ccu_driver);
diff --git a/drivers/clk/sunxi-ng/ccu-sun50i-a100.h b/drivers/clk/sunxi-ng/ccu-sun50i-a100.h
new file mode 100644
index 0000000..21ce92b
--- /dev/null
+++ b/drivers/clk/sunxi-ng/ccu-sun50i-a100.h
@@ -0,0 +1,56 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ */
+
+#ifndef _CCU_SUN50I_A100_H_
+#define _CCU_SUN50I_A100_H_
+
+#include <dt-bindings/clock/sun50i-a100-ccu.h>
+#include <dt-bindings/reset/sun50i-a100-ccu.h>
+
+#define CLK_OSC12M		0
+#define CLK_PLL_CPUX		1
+#define CLK_PLL_DDR0		2
+
+/* PLL_PERIPH0 exported for PRCM */
+
+#define CLK_PLL_PERIPH0_2X	4
+#define CLK_PLL_PERIPH1		5
+#define CLK_PLL_PERIPH1_2X	6
+#define CLK_PLL_GPU		7
+#define CLK_PLL_VIDEO0		8
+#define CLK_PLL_VIDEO0_2X	9
+#define CLK_PLL_VIDEO0_4X	10
+#define CLK_PLL_VIDEO1		11
+#define CLK_PLL_VIDEO1_2X	12
+#define CLK_PLL_VIDEO1_4X	13
+#define CLK_PLL_VIDEO2		14
+#define CLK_PLL_VIDEO2_2X	15
+#define CLK_PLL_VIDEO2_4X	16
+#define CLK_PLL_VIDEO3		17
+#define CLK_PLL_VIDEO3_2X	18
+#define CLK_PLL_VIDEO3_4X	19
+#define CLK_PLL_VE		20
+#define CLK_PLL_COM		21
+#define CLK_PLL_COM_AUDIO	22
+#define CLK_PLL_AUDIO		23
+
+/* CPUX clock exported for DVFS */
+
+#define CLK_AXI			25
+#define CLK_CPUX_APB		26
+#define CLK_PSI_AHB1_AHB2	27
+#define CLK_AHB3		28
+
+/* APB1 clock exported for PIO */
+
+#define CLK_APB2		30
+
+/* All module clocks and bus gates are exported except DRAM */
+
+#define CLK_BUS_DRAM		58
+
+#define CLK_NUMBER		(CLK_CSI_ISP + 1)
+
+#endif /* _CCU_SUN50I_A100_H_ */
diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index f35a53c..080f05b 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -127,7 +127,7 @@
 	  Enables the support for the RDA Micro timer driver.
 
 config SUN4I_TIMER
-	bool "Sun4i timer driver" if COMPILE_TEST
+	bool "Sun4i timer driver"
 	depends on HAS_IOMEM
 	select CLKSRC_MMIO
 	select TIMER_OF
@@ -473,7 +473,7 @@
         bool
 
 config MTK_TIMER
-	bool "Mediatek timer driver" if COMPILE_TEST
+	bool "Mediatek timer driver"
 	depends on HAS_IOMEM
 	select TIMER_OF
 	select CLKSRC_MMIO
@@ -481,7 +481,7 @@
 	  Support for Mediatek timer driver.
 
 config SPRD_TIMER
-	bool "Spreadtrum timer driver" if EXPERT
+	tristate "Spreadtrum timer driver" if EXPERT
 	depends on HAS_IOMEM
 	depends on (ARCH_SPRD || COMPILE_TEST)
 	default ARCH_SPRD
diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
index 39cdda2..cedd2d5 100644
--- a/drivers/clocksource/arm_arch_timer.c
+++ b/drivers/clocksource/arm_arch_timer.c
@@ -69,7 +69,7 @@ static enum arch_timer_ppi_nr arch_timer_uses_ppi = ARCH_TIMER_VIRT_PPI;
 static bool arch_timer_c3stop;
 static bool arch_timer_mem_use_virtual;
 static bool arch_counter_suspend_stop;
-static enum vdso_arch_clockmode vdso_default = VDSO_CLOCKMODE_ARCHTIMER;
+static enum vdso_clock_mode vdso_default = VDSO_CLOCKMODE_ARCHTIMER;
 
 static cpumask_t evtstrm_available = CPU_MASK_NONE;
 static bool evtstrm_enable = IS_ENABLED(CONFIG_ARM_ARCH_TIMER_EVTSTREAM);
diff --git a/drivers/clocksource/timer-of.c b/drivers/clocksource/timer-of.c
index a3c73e9..c7ce0de 100644
--- a/drivers/clocksource/timer-of.c
+++ b/drivers/clocksource/timer-of.c
@@ -19,7 +19,7 @@
  *
  * Free the irq resource
  */
-static __init void timer_of_irq_exit(struct of_timer_irq *of_irq)
+static void timer_of_irq_exit(struct of_timer_irq *of_irq)
 {
 	struct timer_of *to = container_of(of_irq, struct timer_of, of_irq);
 
@@ -47,7 +47,7 @@ static __init void timer_of_irq_exit(struct of_timer_irq *of_irq)
  *
  * Returns 0 on success, < 0 otherwise
  */
-static __init int timer_of_irq_init(struct device_node *np,
+static int timer_of_irq_init(struct device_node *np,
 				    struct of_timer_irq *of_irq)
 {
 	int ret;
@@ -91,7 +91,7 @@ static __init int timer_of_irq_init(struct device_node *np,
  *
  * Disables and releases the refcount on the clk
  */
-static __init void timer_of_clk_exit(struct of_timer_clk *of_clk)
+static void timer_of_clk_exit(struct of_timer_clk *of_clk)
 {
 	of_clk->rate = 0;
 	clk_disable_unprepare(of_clk->clk);
@@ -107,7 +107,7 @@ static __init void timer_of_clk_exit(struct of_timer_clk *of_clk)
  *
  * Returns 0 on success, < 0 otherwise
  */
-static __init int timer_of_clk_init(struct device_node *np,
+static int timer_of_clk_init(struct device_node *np,
 				    struct of_timer_clk *of_clk)
 {
 	int ret;
@@ -146,12 +146,12 @@ static __init int timer_of_clk_init(struct device_node *np,
 	goto out;
 }
 
-static __init void timer_of_base_exit(struct of_timer_base *of_base)
+static void timer_of_base_exit(struct of_timer_base *of_base)
 {
 	iounmap(of_base->base);
 }
 
-static __init int timer_of_base_init(struct device_node *np,
+static int timer_of_base_init(struct device_node *np,
 				     struct of_timer_base *of_base)
 {
 	of_base->base = of_base->name ?
@@ -165,7 +165,7 @@ static __init int timer_of_base_init(struct device_node *np,
 	return 0;
 }
 
-int __init timer_of_init(struct device_node *np, struct timer_of *to)
+int timer_of_init(struct device_node *np, struct timer_of *to)
 {
 	int ret = -EINVAL;
 	int flags = 0;
@@ -209,6 +209,7 @@ int __init timer_of_init(struct device_node *np, struct timer_of *to)
 		timer_of_base_exit(&to->of_base);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(timer_of_init);
 
 /**
  * timer_of_cleanup - release timer_of ressources
@@ -217,7 +218,7 @@ int __init timer_of_init(struct device_node *np, struct timer_of *to)
  * Release the ressources that has been used in timer_of_init().
  * This function should be called in init error cases
  */
-void __init timer_of_cleanup(struct timer_of *to)
+void timer_of_cleanup(struct timer_of *to)
 {
 	if (to->flags & TIMER_OF_IRQ)
 		timer_of_irq_exit(&to->of_irq);
diff --git a/drivers/clocksource/timer-of.h b/drivers/clocksource/timer-of.h
index a5478f3..1b8cfac5 100644
--- a/drivers/clocksource/timer-of.h
+++ b/drivers/clocksource/timer-of.h
@@ -66,9 +66,9 @@ static inline unsigned long timer_of_period(struct timer_of *to)
 	return to->of_clk.period;
 }
 
-extern int __init timer_of_init(struct device_node *np,
+extern int timer_of_init(struct device_node *np,
 				struct timer_of *to);
 
-extern void __init timer_of_cleanup(struct timer_of *to);
+extern void timer_of_cleanup(struct timer_of *to);
 
 #endif
diff --git a/drivers/clocksource/timer-sprd.c b/drivers/clocksource/timer-sprd.c
index 430cb99..5461789 100644
--- a/drivers/clocksource/timer-sprd.c
+++ b/drivers/clocksource/timer-sprd.c
@@ -5,6 +5,8 @@
 
 #include <linux/init.h>
 #include <linux/interrupt.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
 
 #include "timer-of.h"
 
@@ -141,7 +143,7 @@ static struct timer_of to = {
 	},
 };
 
-static int __init sprd_timer_init(struct device_node *np)
+static int sprd_timer_init(struct device_node *np)
 {
 	int ret;
 
@@ -190,7 +192,7 @@ static struct clocksource suspend_clocksource = {
 	.flags	= CLOCK_SOURCE_IS_CONTINUOUS | CLOCK_SOURCE_SUSPEND_NONSTOP,
 };
 
-static int __init sprd_suspend_timer_init(struct device_node *np)
+static int sprd_suspend_timer_init(struct device_node *np)
 {
 	int ret;
 
@@ -204,6 +206,37 @@ static int __init sprd_suspend_timer_init(struct device_node *np)
 	return 0;
 }
 
+#ifdef MODULE
+static int sprd_timer_probe(struct platform_device *pdev)
+{
+	struct device_node *np = pdev->dev.of_node;
+
+	if (of_property_read_bool(np, "interrupts"))
+		return sprd_timer_init(np);
+
+	return sprd_suspend_timer_init(np);
+}
+
+static const struct of_device_id sprd_timer_match_table[] = {
+	{ .compatible = "sprd,sc9860-suspend-timer" },
+	{ .compatible = "sprd,sc9860-timer" },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, sprd_timer_match_table);
+
+static struct platform_driver sprd_timer_driver = {
+	.probe		= sprd_timer_probe,
+	.driver		= {
+		.name	= "sprd-timer",
+		.of_match_table = sprd_timer_match_table,
+	},
+};
+module_platform_driver(sprd_timer_driver);
+
+#else
 TIMER_OF_DECLARE(sc9860_timer, "sprd,sc9860-timer", sprd_timer_init);
 TIMER_OF_DECLARE(sc9860_persistent_timer, "sprd,sc9860-suspend-timer",
 		 sprd_suspend_timer_init);
+#endif
+
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig
index bff5295..2075100 100644
--- a/drivers/cpufreq/Kconfig
+++ b/drivers/cpufreq/Kconfig
@@ -34,6 +34,13 @@
 
 	  If in doubt, say N.
 
+config CPU_FREQ_TIMES
+       bool "CPU frequency time-in-state statistics"
+       help
+         Export CPU time-in-state information through procfs.
+
+         If in doubt, say N.
+
 choice
 	prompt "Default CPUFreq governor"
 	default CPU_FREQ_DEFAULT_GOV_USERSPACE if ARM_SA1100_CPUFREQ || ARM_SA1110_CPUFREQ
@@ -222,6 +229,15 @@
 
 	  If in doubt, say N.
 
+config CPUFREQ_DUMMY
+	tristate "Dummy CPU frequency driver"
+	help
+	  This option adds a generic dummy CPUfreq driver, which sets a fake
+	  2-frequency table when initializing each policy and otherwise does
+	  nothing.
+
+	  If in doubt, say N
+
 if X86
 source "drivers/cpufreq/Kconfig.x86"
 endif
diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile
index 9a9f5cc..33d6b64 100644
--- a/drivers/cpufreq/Makefile
+++ b/drivers/cpufreq/Makefile
@@ -5,7 +5,10 @@
 # CPUfreq stats
 obj-$(CONFIG_CPU_FREQ_STAT)             += cpufreq_stats.o
 
-# CPUfreq governors 
+# CPUfreq times
+obj-$(CONFIG_CPU_FREQ_TIMES)		+= cpufreq_times.o
+
+# CPUfreq governors
 obj-$(CONFIG_CPU_FREQ_GOV_PERFORMANCE)	+= cpufreq_performance.o
 obj-$(CONFIG_CPU_FREQ_GOV_POWERSAVE)	+= cpufreq_powersave.o
 obj-$(CONFIG_CPU_FREQ_GOV_USERSPACE)	+= cpufreq_userspace.o
@@ -17,6 +20,8 @@
 obj-$(CONFIG_CPUFREQ_DT)		+= cpufreq-dt.o
 obj-$(CONFIG_CPUFREQ_DT_PLATDEV)	+= cpufreq-dt-platdev.o
 
+obj-$(CONFIG_CPUFREQ_DUMMY)		+= dummy-cpufreq.o
+
 ##################################################################################
 # x86 drivers.
 # Link order matters. K8 is preferred to ACPI because of firmware bugs in early
diff --git a/drivers/cpufreq/cpufreq-dt-platdev.c b/drivers/cpufreq/cpufreq-dt-platdev.c
index bca8d1f..3282def 100644
--- a/drivers/cpufreq/cpufreq-dt-platdev.c
+++ b/drivers/cpufreq/cpufreq-dt-platdev.c
@@ -180,4 +180,4 @@ static int __init cpufreq_dt_platdev_init(void)
 			       -1, data,
 			       sizeof(struct cpufreq_dt_platform_data)));
 }
-device_initcall(cpufreq_dt_platdev_init);
+core_initcall(cpufreq_dt_platdev_init);
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index 194a658..8e78d0dd 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -16,6 +16,7 @@
 
 #include <linux/cpu.h>
 #include <linux/cpufreq.h>
+#include <linux/cpufreq_times.h>
 #include <linux/cpu_cooling.h>
 #include <linux/delay.h>
 #include <linux/device.h>
@@ -105,6 +106,8 @@ bool have_governor_per_policy(void)
 }
 EXPORT_SYMBOL_GPL(have_governor_per_policy);
 
+static struct kobject *cpufreq_global_kobject;
+
 struct kobject *get_governor_parent_kobj(struct cpufreq_policy *policy)
 {
 	if (have_governor_per_policy())
@@ -155,6 +158,12 @@ __weak void arch_set_freq_scale(struct cpumask *cpus, unsigned long cur_freq,
 }
 EXPORT_SYMBOL_GPL(arch_set_freq_scale);
 
+__weak void arch_set_max_freq_scale(struct cpumask *cpus,
+				    unsigned long policy_max_freq)
+{
+}
+EXPORT_SYMBOL_GPL(arch_set_max_freq_scale);
+
 /*
  * This is a generic cpufreq init() routine which can be used by cpufreq
  * drivers of SMP systems. It will do following:
@@ -382,6 +391,7 @@ static void cpufreq_notify_transition(struct cpufreq_policy *policy,
 					 CPUFREQ_POSTCHANGE, freqs);
 
 		cpufreq_stats_record_transition(policy, freqs->new);
+		cpufreq_times_record_transition(policy, freqs->new);
 		policy->cur = freqs->new;
 	}
 }
@@ -1473,6 +1483,7 @@ static int cpufreq_online(unsigned int cpu)
 			goto out_destroy_policy;
 
 		cpufreq_stats_create_table(policy);
+		cpufreq_times_create_policy(policy);
 
 		write_lock_irqsave(&cpufreq_driver_lock, flags);
 		list_add(&policy->policy_list, &cpufreq_policy_list);
@@ -2033,9 +2044,15 @@ EXPORT_SYMBOL(cpufreq_unregister_notifier);
 unsigned int cpufreq_driver_fast_switch(struct cpufreq_policy *policy,
 					unsigned int target_freq)
 {
+	int ret;
+
 	target_freq = clamp_val(target_freq, policy->min, policy->max);
 
-	return cpufreq_driver->fast_switch(policy, target_freq);
+	ret = cpufreq_driver->fast_switch(policy, target_freq);
+	if (ret)
+		cpufreq_times_record_transition(policy, ret);
+
+	return ret;
 }
 EXPORT_SYMBOL_GPL(cpufreq_driver_fast_switch);
 
@@ -2413,6 +2430,8 @@ static int cpufreq_set_policy(struct cpufreq_policy *policy,
 	policy->max = new_data.max;
 	trace_cpu_frequency_limits(policy);
 
+	arch_set_max_freq_scale(policy->cpus, policy->max);
+
 	policy->cached_target_freq = UINT_MAX;
 
 	pr_debug("new min and max freqs are %u - %u kHz\n",
@@ -2760,9 +2779,6 @@ int cpufreq_unregister_driver(struct cpufreq_driver *driver)
 }
 EXPORT_SYMBOL_GPL(cpufreq_unregister_driver);
 
-struct kobject *cpufreq_global_kobject;
-EXPORT_SYMBOL(cpufreq_global_kobject);
-
 static int __init cpufreq_core_init(void)
 {
 	if (cpufreq_disabled())
diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c
index b66e81c..737ff3b 100644
--- a/drivers/cpufreq/cpufreq_conservative.c
+++ b/drivers/cpufreq/cpufreq_conservative.c
@@ -346,7 +346,7 @@ struct cpufreq_governor *cpufreq_default_governor(void)
 	return CPU_FREQ_GOV_CONSERVATIVE;
 }
 
-fs_initcall(cpufreq_gov_dbs_init);
+core_initcall(cpufreq_gov_dbs_init);
 #else
 module_init(cpufreq_gov_dbs_init);
 #endif
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
index dced033..82a4d37 100644
--- a/drivers/cpufreq/cpufreq_ondemand.c
+++ b/drivers/cpufreq/cpufreq_ondemand.c
@@ -483,7 +483,7 @@ struct cpufreq_governor *cpufreq_default_governor(void)
 	return CPU_FREQ_GOV_ONDEMAND;
 }
 
-fs_initcall(cpufreq_gov_dbs_init);
+core_initcall(cpufreq_gov_dbs_init);
 #else
 module_init(cpufreq_gov_dbs_init);
 #endif
diff --git a/drivers/cpufreq/cpufreq_performance.c b/drivers/cpufreq/cpufreq_performance.c
index aaa04df..def9afe 100644
--- a/drivers/cpufreq/cpufreq_performance.c
+++ b/drivers/cpufreq/cpufreq_performance.c
@@ -50,5 +50,5 @@ MODULE_AUTHOR("Dominik Brodowski <linux@brodo.de>");
 MODULE_DESCRIPTION("CPUfreq policy governor 'performance'");
 MODULE_LICENSE("GPL");
 
-fs_initcall(cpufreq_gov_performance_init);
+core_initcall(cpufreq_gov_performance_init);
 module_exit(cpufreq_gov_performance_exit);
diff --git a/drivers/cpufreq/cpufreq_powersave.c b/drivers/cpufreq/cpufreq_powersave.c
index c143dc2..1ae6601 100644
--- a/drivers/cpufreq/cpufreq_powersave.c
+++ b/drivers/cpufreq/cpufreq_powersave.c
@@ -43,7 +43,7 @@ struct cpufreq_governor *cpufreq_default_governor(void)
 	return &cpufreq_gov_powersave;
 }
 
-fs_initcall(cpufreq_gov_powersave_init);
+core_initcall(cpufreq_gov_powersave_init);
 #else
 module_init(cpufreq_gov_powersave_init);
 #endif
diff --git a/drivers/cpufreq/cpufreq_times.c b/drivers/cpufreq/cpufreq_times.c
new file mode 100644
index 0000000..4df55b3
--- /dev/null
+++ b/drivers/cpufreq/cpufreq_times.c
@@ -0,0 +1,211 @@
+/* drivers/cpufreq/cpufreq_times.c
+ *
+ * Copyright (C) 2018 Google, Inc.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <linux/cpufreq.h>
+#include <linux/cpufreq_times.h>
+#include <linux/jiffies.h>
+#include <linux/sched.h>
+#include <linux/seq_file.h>
+#include <linux/slab.h>
+#include <linux/spinlock.h>
+#include <linux/threads.h>
+
+static DEFINE_SPINLOCK(task_time_in_state_lock); /* task->time_in_state */
+
+/**
+ * struct cpu_freqs - per-cpu frequency information
+ * @offset: start of these freqs' stats in task time_in_state array
+ * @max_state: number of entries in freq_table
+ * @last_index: index in freq_table of last frequency switched to
+ * @freq_table: list of available frequencies
+ */
+struct cpu_freqs {
+	unsigned int offset;
+	unsigned int max_state;
+	unsigned int last_index;
+	unsigned int freq_table[0];
+};
+
+static struct cpu_freqs *all_freqs[NR_CPUS];
+
+static unsigned int next_offset;
+
+void cpufreq_task_times_init(struct task_struct *p)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&task_time_in_state_lock, flags);
+	p->time_in_state = NULL;
+	spin_unlock_irqrestore(&task_time_in_state_lock, flags);
+	p->max_state = 0;
+}
+
+void cpufreq_task_times_alloc(struct task_struct *p)
+{
+	void *temp;
+	unsigned long flags;
+	unsigned int max_state = READ_ONCE(next_offset);
+
+	/* We use one array to avoid multiple allocs per task */
+	temp = kcalloc(max_state, sizeof(p->time_in_state[0]), GFP_ATOMIC);
+	if (!temp)
+		return;
+
+	spin_lock_irqsave(&task_time_in_state_lock, flags);
+	p->time_in_state = temp;
+	spin_unlock_irqrestore(&task_time_in_state_lock, flags);
+	p->max_state = max_state;
+}
+
+/* Caller must hold task_time_in_state_lock */
+static int cpufreq_task_times_realloc_locked(struct task_struct *p)
+{
+	void *temp;
+	unsigned int max_state = READ_ONCE(next_offset);
+
+	temp = krealloc(p->time_in_state, max_state * sizeof(u64), GFP_ATOMIC);
+	if (!temp)
+		return -ENOMEM;
+	p->time_in_state = temp;
+	memset(p->time_in_state + p->max_state, 0,
+	       (max_state - p->max_state) * sizeof(u64));
+	p->max_state = max_state;
+	return 0;
+}
+
+void cpufreq_task_times_exit(struct task_struct *p)
+{
+	unsigned long flags;
+	void *temp;
+
+	if (!p->time_in_state)
+		return;
+
+	spin_lock_irqsave(&task_time_in_state_lock, flags);
+	temp = p->time_in_state;
+	p->time_in_state = NULL;
+	spin_unlock_irqrestore(&task_time_in_state_lock, flags);
+	kfree(temp);
+}
+
+int proc_time_in_state_show(struct seq_file *m, struct pid_namespace *ns,
+	struct pid *pid, struct task_struct *p)
+{
+	unsigned int cpu, i;
+	u64 cputime;
+	unsigned long flags;
+	struct cpu_freqs *freqs;
+	struct cpu_freqs *last_freqs = NULL;
+
+	spin_lock_irqsave(&task_time_in_state_lock, flags);
+	for_each_possible_cpu(cpu) {
+		freqs = all_freqs[cpu];
+		if (!freqs || freqs == last_freqs)
+			continue;
+		last_freqs = freqs;
+
+		seq_printf(m, "cpu%u\n", cpu);
+		for (i = 0; i < freqs->max_state; i++) {
+			cputime = 0;
+			if (freqs->offset + i < p->max_state &&
+			    p->time_in_state)
+				cputime = p->time_in_state[freqs->offset + i];
+			seq_printf(m, "%u %lu\n", freqs->freq_table[i],
+				   (unsigned long)nsec_to_clock_t(cputime));
+		}
+	}
+	spin_unlock_irqrestore(&task_time_in_state_lock, flags);
+	return 0;
+}
+
+void cpufreq_acct_update_power(struct task_struct *p, u64 cputime)
+{
+	unsigned long flags;
+	unsigned int state;
+	struct cpu_freqs *freqs = all_freqs[task_cpu(p)];
+
+	if (!freqs || is_idle_task(p) || p->flags & PF_EXITING)
+		return;
+
+	state = freqs->offset + READ_ONCE(freqs->last_index);
+
+	spin_lock_irqsave(&task_time_in_state_lock, flags);
+	if ((state < p->max_state || !cpufreq_task_times_realloc_locked(p)) &&
+	    p->time_in_state)
+		p->time_in_state[state] += cputime;
+	spin_unlock_irqrestore(&task_time_in_state_lock, flags);
+}
+
+static int cpufreq_times_get_index(struct cpu_freqs *freqs, unsigned int freq)
+{
+	int index;
+        for (index = 0; index < freqs->max_state; ++index) {
+		if (freqs->freq_table[index] == freq)
+			return index;
+        }
+	return -1;
+}
+
+void cpufreq_times_create_policy(struct cpufreq_policy *policy)
+{
+	int cpu, index = 0;
+	unsigned int count = 0;
+	struct cpufreq_frequency_table *pos, *table;
+	struct cpu_freqs *freqs;
+	void *tmp;
+
+	if (all_freqs[policy->cpu])
+		return;
+
+	table = policy->freq_table;
+	if (!table)
+		return;
+
+	cpufreq_for_each_valid_entry(pos, table)
+		count++;
+
+	tmp =  kzalloc(sizeof(*freqs) + sizeof(freqs->freq_table[0]) * count,
+		       GFP_KERNEL);
+	if (!tmp)
+		return;
+
+	freqs = tmp;
+	freqs->max_state = count;
+
+	cpufreq_for_each_valid_entry(pos, table)
+		freqs->freq_table[index++] = pos->frequency;
+
+	index = cpufreq_times_get_index(freqs, policy->cur);
+	if (index >= 0)
+		WRITE_ONCE(freqs->last_index, index);
+
+	freqs->offset = next_offset;
+	WRITE_ONCE(next_offset, freqs->offset + count);
+	for_each_cpu(cpu, policy->related_cpus)
+		all_freqs[cpu] = freqs;
+}
+
+void cpufreq_times_record_transition(struct cpufreq_policy *policy,
+	unsigned int new_freq)
+{
+	int index;
+	struct cpu_freqs *freqs = all_freqs[policy->cpu];
+	if (!freqs)
+		return;
+
+	index = cpufreq_times_get_index(freqs, new_freq);
+	if (index >= 0)
+		WRITE_ONCE(freqs->last_index, index);
+}
diff --git a/drivers/cpufreq/cpufreq_userspace.c b/drivers/cpufreq/cpufreq_userspace.c
index cbd81c5..b43e7cd 100644
--- a/drivers/cpufreq/cpufreq_userspace.c
+++ b/drivers/cpufreq/cpufreq_userspace.c
@@ -147,7 +147,7 @@ struct cpufreq_governor *cpufreq_default_governor(void)
 	return &cpufreq_gov_userspace;
 }
 
-fs_initcall(cpufreq_gov_userspace_init);
+core_initcall(cpufreq_gov_userspace_init);
 #else
 module_init(cpufreq_gov_userspace_init);
 #endif
diff --git a/drivers/cpufreq/dummy-cpufreq.c b/drivers/cpufreq/dummy-cpufreq.c
new file mode 100644
index 0000000..f1e5ac7
--- /dev/null
+++ b/drivers/cpufreq/dummy-cpufreq.c
@@ -0,0 +1,60 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2019 Google, Inc.
+ */
+#include <linux/cpufreq.h>
+#include <linux/module.h>
+
+static struct cpufreq_frequency_table freq_table[] = {
+	{ .frequency = 1 },
+	{ .frequency = 2 },
+	{ .frequency = CPUFREQ_TABLE_END },
+};
+
+static int dummy_cpufreq_target_index(struct cpufreq_policy *policy,
+				   unsigned int index)
+{
+	return 0;
+}
+
+static int dummy_cpufreq_driver_init(struct cpufreq_policy *policy)
+{
+	policy->freq_table = freq_table;
+	return 0;
+}
+
+static unsigned int dummy_cpufreq_get(unsigned int cpu)
+{
+	return 1;
+}
+
+static int dummy_cpufreq_verify(struct cpufreq_policy_data *policy)
+{
+	return 0;
+}
+
+static struct cpufreq_driver dummy_cpufreq_driver = {
+	.name = "dummy",
+	.target_index = dummy_cpufreq_target_index,
+	.init = dummy_cpufreq_driver_init,
+	.get = dummy_cpufreq_get,
+	.verify = dummy_cpufreq_verify,
+	.attr = cpufreq_generic_attr,
+};
+
+static int __init dummy_cpufreq_init(void)
+{
+	return cpufreq_register_driver(&dummy_cpufreq_driver);
+}
+
+static void __exit dummy_cpufreq_exit(void)
+{
+	cpufreq_unregister_driver(&dummy_cpufreq_driver);
+}
+
+module_init(dummy_cpufreq_init);
+module_exit(dummy_cpufreq_exit);
+
+MODULE_AUTHOR("Connor O'Brien <connoro@google.com>");
+MODULE_DESCRIPTION("dummy cpufreq driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/cpufreq/qcom-cpufreq-hw.c b/drivers/cpufreq/qcom-cpufreq-hw.c
index a9ae2f8..fc92a88 100644
--- a/drivers/cpufreq/qcom-cpufreq-hw.c
+++ b/drivers/cpufreq/qcom-cpufreq-hw.c
@@ -334,7 +334,7 @@ static int __init qcom_cpufreq_hw_init(void)
 {
 	return platform_driver_register(&qcom_cpufreq_hw_driver);
 }
-device_initcall(qcom_cpufreq_hw_init);
+postcore_initcall(qcom_cpufreq_hw_init);
 
 static void __exit qcom_cpufreq_hw_exit(void)
 {
diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
index 73f08cd..8b96ef0 100644
--- a/drivers/cpuidle/cpuidle.c
+++ b/drivers/cpuidle/cpuidle.c
@@ -195,7 +195,7 @@ int cpuidle_enter_s2idle(struct cpuidle_driver *drv, struct cpuidle_device *dev)
  * @drv: cpuidle driver for this cpu
  * @index: index into the states table in @drv of the state to enter
  */
-int cpuidle_enter_state(struct cpuidle_device *dev, struct cpuidle_driver *drv,
+int __nocfi cpuidle_enter_state(struct cpuidle_device *dev, struct cpuidle_driver *drv,
 			int index)
 {
 	int entered_state;
diff --git a/drivers/crypto/virtio/Kconfig b/drivers/crypto/virtio/Kconfig
index 01b625e..6d3deb0 100644
--- a/drivers/crypto/virtio/Kconfig
+++ b/drivers/crypto/virtio/Kconfig
@@ -5,7 +5,6 @@
 	select CRYPTO_AEAD
 	select CRYPTO_BLKCIPHER
 	select CRYPTO_ENGINE
-	default m
 	help
 	  This driver provides support for virtio crypto device. If you
 	  choose 'M' here, this module will be called virtio_crypto.
diff --git a/drivers/dax/device.c b/drivers/dax/device.c
index 1af823b..4c0af2e 100644
--- a/drivers/dax/device.c
+++ b/drivers/dax/device.c
@@ -377,6 +377,7 @@ static int dax_open(struct inode *inode, struct file *filp)
 	inode->i_mapping->a_ops = &dev_dax_aops;
 	filp->f_mapping = inode->i_mapping;
 	filp->f_wb_err = filemap_sample_wb_err(filp->f_mapping);
+	filp->f_sb_err = file_sample_sb_err(filp);
 	filp->private_data = dev_dax;
 	inode->i_flags = S_DAX;
 
diff --git a/drivers/dma-buf/Kconfig b/drivers/dma-buf/Kconfig
index a23b675..aca9a1c 100644
--- a/drivers/dma-buf/Kconfig
+++ b/drivers/dma-buf/Kconfig
@@ -44,4 +44,26 @@
 	default n
 	depends on DMA_SHARED_BUFFER
 
+menuconfig DMABUF_HEAPS
+	bool "DMA-BUF Userland Memory Heaps"
+	select DMA_SHARED_BUFFER
+	help
+	  Choose this option to enable the DMA-BUF userland memory heaps.
+	  This options creates per heap chardevs in /dev/dma_heap/ which
+	  allows userspace to allocate dma-bufs that can be shared
+	  between drivers.
+
+menuconfig DMABUF_SYSFS_STATS
+	bool "DMA-BUF sysfs statistics"
+	select DMA_SHARED_BUFFER
+	help
+	   Choose this option to enable DMA-BUF sysfs statistics
+	   in location /sys/kernel/dmabuf/buffers.
+
+	   /sys/kernel/dmabuf/buffers/<inode_number> will contain
+	   statistics for the DMA-BUF with the unique inode number
+	   <inode_number>.
+
+source "drivers/dma-buf/heaps/Kconfig"
+
 endmenu
diff --git a/drivers/dma-buf/Makefile b/drivers/dma-buf/Makefile
index 03479da..8ae92ce 100644
--- a/drivers/dma-buf/Makefile
+++ b/drivers/dma-buf/Makefile
@@ -1,9 +1,12 @@
 # SPDX-License-Identifier: GPL-2.0-only
 obj-y := dma-buf.o dma-fence.o dma-fence-array.o dma-fence-chain.o \
 	 dma-resv.o seqno-fence.o
+obj-$(CONFIG_DMABUF_HEAPS)	+= dma-heap.o
+obj-$(CONFIG_DMABUF_HEAPS)	+= heaps/
 obj-$(CONFIG_SYNC_FILE)		+= sync_file.o
 obj-$(CONFIG_SW_SYNC)		+= sw_sync.o sync_debug.o
 obj-$(CONFIG_UDMABUF)		+= udmabuf.o
+obj-$(CONFIG_DMABUF_SYSFS_STATS) += dma-buf-sysfs-stats.o
 
 dmabuf_selftests-y := \
 	selftest.o \
diff --git a/drivers/dma-buf/dma-buf-sysfs-stats.c b/drivers/dma-buf/dma-buf-sysfs-stats.c
new file mode 100644
index 0000000..3a5d192
--- /dev/null
+++ b/drivers/dma-buf/dma-buf-sysfs-stats.c
@@ -0,0 +1,295 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * DMA-BUF sysfs statistics.
+ *
+ * Copyright (C) 2021 Google LLC.
+ */
+
+#include <linux/dma-buf.h>
+#include <linux/dma-resv.h>
+#include <linux/kobject.h>
+#include <linux/printk.h>
+#include <linux/slab.h>
+#include <linux/sysfs.h>
+
+#include "dma-buf-sysfs-stats.h"
+
+#define to_dma_buf_entry_from_kobj(x) container_of(x, struct dma_buf_sysfs_entry, kobj)
+
+struct dma_buf_stats_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct dma_buf *dmabuf,
+			struct dma_buf_stats_attribute *attr, char *buf);
+};
+#define to_dma_buf_stats_attr(x) container_of(x, struct dma_buf_stats_attribute, attr)
+
+static ssize_t dma_buf_stats_attribute_show(struct kobject *kobj,
+					    struct attribute *attr,
+					    char *buf)
+{
+	struct dma_buf_stats_attribute *attribute;
+	struct dma_buf_sysfs_entry *sysfs_entry;
+	struct dma_buf *dmabuf;
+
+	attribute = to_dma_buf_stats_attr(attr);
+	sysfs_entry = to_dma_buf_entry_from_kobj(kobj);
+	dmabuf = sysfs_entry->dmabuf;
+
+	if (!dmabuf || !attribute->show)
+		return -EIO;
+
+	return attribute->show(dmabuf, attribute, buf);
+}
+
+static const struct sysfs_ops dma_buf_stats_sysfs_ops = {
+	.show = dma_buf_stats_attribute_show,
+};
+
+static ssize_t exporter_name_show(struct dma_buf *dmabuf,
+				  struct dma_buf_stats_attribute *attr,
+				  char *buf)
+{
+	return sprintf(buf, "%s\n", dmabuf->exp_name);
+}
+
+static ssize_t mmap_count_show(struct dma_buf *dmabuf,
+		struct dma_buf_stats_attribute *attr,
+		char *buf)
+{
+	return sprintf(buf, "%d\n", dmabuf->mmap_count);
+}
+
+static ssize_t size_show(struct dma_buf *dmabuf,
+			 struct dma_buf_stats_attribute *attr,
+			 char *buf)
+{
+	return sprintf(buf, "%zu\n", dmabuf->size);
+}
+
+static struct dma_buf_stats_attribute exporter_name_attribute =
+	__ATTR_RO(exporter_name);
+static struct dma_buf_stats_attribute size_attribute = __ATTR_RO(size);
+static struct dma_buf_stats_attribute mmap_count_attribute =
+	__ATTR_RO(mmap_count);
+
+static struct attribute *dma_buf_stats_default_attrs[] = {
+	&exporter_name_attribute.attr,
+	&size_attribute.attr,
+	&mmap_count_attribute.attr,
+	NULL,
+};
+ATTRIBUTE_GROUPS(dma_buf_stats_default);
+
+static void dma_buf_sysfs_release(struct kobject *kobj)
+{
+	struct dma_buf_sysfs_entry *sysfs_entry;
+
+	sysfs_entry = to_dma_buf_entry_from_kobj(kobj);
+	kfree(sysfs_entry);
+}
+
+static struct kobj_type dma_buf_ktype = {
+	.sysfs_ops = &dma_buf_stats_sysfs_ops,
+	.release = dma_buf_sysfs_release,
+	.default_groups = dma_buf_stats_default_groups,
+};
+
+#define to_dma_buf_attach_entry_from_kobj(x) container_of(x, struct dma_buf_attach_sysfs_entry, kobj)
+
+struct dma_buf_attach_stats_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct dma_buf_attach_sysfs_entry *sysfs_entry,
+			struct dma_buf_attach_stats_attribute *attr, char *buf);
+};
+#define to_dma_buf_attach_stats_attr(x) container_of(x, struct dma_buf_attach_stats_attribute, attr)
+
+static ssize_t dma_buf_attach_stats_attribute_show(struct kobject *kobj,
+						   struct attribute *attr,
+						   char *buf)
+{
+	struct dma_buf_attach_stats_attribute *attribute;
+	struct dma_buf_attach_sysfs_entry *sysfs_entry;
+
+	attribute = to_dma_buf_attach_stats_attr(attr);
+	sysfs_entry = to_dma_buf_attach_entry_from_kobj(kobj);
+
+	if (!attribute->show)
+		return -EIO;
+
+	return attribute->show(sysfs_entry, attribute, buf);
+}
+
+static const struct sysfs_ops dma_buf_attach_stats_sysfs_ops = {
+	.show = dma_buf_attach_stats_attribute_show,
+};
+
+static ssize_t map_counter_show(struct dma_buf_attach_sysfs_entry *sysfs_entry,
+				struct dma_buf_attach_stats_attribute *attr,
+				char *buf)
+{
+	return sprintf(buf, "%u\n", sysfs_entry->map_counter);
+}
+
+static struct dma_buf_attach_stats_attribute map_counter_attribute =
+	__ATTR_RO(map_counter);
+
+static struct attribute *dma_buf_attach_stats_default_attrs[] = {
+	&map_counter_attribute.attr,
+	NULL,
+};
+ATTRIBUTE_GROUPS(dma_buf_attach_stats_default);
+
+static void dma_buf_attach_sysfs_release(struct kobject *kobj)
+{
+	struct dma_buf_attach_sysfs_entry *sysfs_entry;
+
+	sysfs_entry = to_dma_buf_attach_entry_from_kobj(kobj);
+	kfree(sysfs_entry);
+}
+
+static struct kobj_type dma_buf_attach_ktype = {
+	.sysfs_ops = &dma_buf_attach_stats_sysfs_ops,
+	.release = dma_buf_attach_sysfs_release,
+	.default_groups = dma_buf_attach_stats_default_groups,
+};
+
+void dma_buf_attach_stats_teardown(struct dma_buf_attachment *attach)
+{
+	struct dma_buf_attach_sysfs_entry *sysfs_entry;
+
+	sysfs_entry = attach->sysfs_entry;
+	if (!sysfs_entry)
+		return;
+
+	sysfs_delete_link(&sysfs_entry->kobj, &attach->dev->kobj, "device");
+
+	kobject_del(&sysfs_entry->kobj);
+	kobject_put(&sysfs_entry->kobj);
+}
+
+int dma_buf_attach_stats_setup(struct dma_buf_attachment *attach,
+			       unsigned int uid)
+{
+	struct dma_buf_attach_sysfs_entry *sysfs_entry;
+	int ret;
+	struct dma_buf *dmabuf;
+
+	if (!attach)
+		return -EINVAL;
+
+	dmabuf = attach->dmabuf;
+
+	sysfs_entry = kzalloc(sizeof(struct dma_buf_attach_sysfs_entry),
+			      GFP_KERNEL);
+	if (!sysfs_entry)
+		return -ENOMEM;
+
+	sysfs_entry->kobj.kset = dmabuf->sysfs_entry->attach_stats_kset;
+
+	attach->sysfs_entry = sysfs_entry;
+
+	ret = kobject_init_and_add(&sysfs_entry->kobj, &dma_buf_attach_ktype,
+				   NULL, "%u", uid);
+	if (ret)
+		goto kobj_err;
+
+	ret = sysfs_create_link(&sysfs_entry->kobj, &attach->dev->kobj,
+				"device");
+	if (ret)
+		goto link_err;
+
+	return 0;
+
+link_err:
+	kobject_del(&sysfs_entry->kobj);
+kobj_err:
+	kobject_put(&sysfs_entry->kobj);
+	attach->sysfs_entry = NULL;
+
+	return ret;
+}
+void dma_buf_stats_teardown(struct dma_buf *dmabuf)
+{
+	struct dma_buf_sysfs_entry *sysfs_entry;
+
+	sysfs_entry = dmabuf->sysfs_entry;
+	if (!sysfs_entry)
+		return;
+
+	kset_unregister(sysfs_entry->attach_stats_kset);
+	kobject_del(&sysfs_entry->kobj);
+	kobject_put(&sysfs_entry->kobj);
+}
+
+static struct kset *dma_buf_stats_kset;
+static struct kset *dma_buf_per_buffer_stats_kset;
+int dma_buf_init_sysfs_statistics(void)
+{
+	dma_buf_stats_kset = kset_create_and_add("dmabuf", NULL, kernel_kobj);
+	if (!dma_buf_stats_kset)
+		return -ENOMEM;
+
+	dma_buf_per_buffer_stats_kset = kset_create_and_add("buffers", NULL,
+							    &dma_buf_stats_kset->kobj);
+	if (!dma_buf_per_buffer_stats_kset) {
+		kset_unregister(dma_buf_stats_kset);
+		return -ENOMEM;
+	}
+
+	return 0;
+}
+
+void dma_buf_uninit_sysfs_statistics(void)
+{
+	kset_unregister(dma_buf_per_buffer_stats_kset);
+	kset_unregister(dma_buf_stats_kset);
+}
+
+int dma_buf_stats_setup(struct dma_buf *dmabuf)
+{
+	struct dma_buf_sysfs_entry *sysfs_entry;
+	int ret;
+	struct kset *attach_stats_kset;
+
+	if (!dmabuf || !dmabuf->file)
+		return -EINVAL;
+
+	if (!dmabuf->exp_name) {
+		pr_err("exporter name must not be empty if stats needed\n");
+		return -EINVAL;
+	}
+
+	sysfs_entry = kzalloc(sizeof(struct dma_buf_sysfs_entry), GFP_KERNEL);
+	if (!sysfs_entry)
+		return -ENOMEM;
+
+	sysfs_entry->kobj.kset = dma_buf_per_buffer_stats_kset;
+	sysfs_entry->dmabuf = dmabuf;
+
+	dmabuf->sysfs_entry = sysfs_entry;
+
+	/* create the directory for buffer stats */
+	ret = kobject_init_and_add(&sysfs_entry->kobj, &dma_buf_ktype, NULL,
+				   "%lu", file_inode(dmabuf->file)->i_ino);
+	if (ret)
+		goto err_sysfs_dmabuf;
+
+	/* create the directory for attachment stats */
+	attach_stats_kset = kset_create_and_add("attachments", NULL,
+						&sysfs_entry->kobj);
+	if (!attach_stats_kset) {
+		ret = -ENOMEM;
+		goto err_sysfs_attach;
+	}
+
+	sysfs_entry->attach_stats_kset = attach_stats_kset;
+
+	return 0;
+
+err_sysfs_attach:
+	kobject_del(&sysfs_entry->kobj);
+err_sysfs_dmabuf:
+	kobject_put(&sysfs_entry->kobj);
+	dmabuf->sysfs_entry = NULL;
+	return ret;
+}
diff --git a/drivers/dma-buf/dma-buf-sysfs-stats.h b/drivers/dma-buf/dma-buf-sysfs-stats.h
new file mode 100644
index 0000000..5f47032
--- /dev/null
+++ b/drivers/dma-buf/dma-buf-sysfs-stats.h
@@ -0,0 +1,62 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * DMA-BUF sysfs statistics.
+ *
+ * Copyright (C) 2021 Google LLC.
+ */
+
+#ifndef _DMA_BUF_SYSFS_STATS_H
+#define _DMA_BUF_SYSFS_STATS_H
+
+#ifdef CONFIG_DMABUF_SYSFS_STATS
+
+int dma_buf_init_sysfs_statistics(void);
+void dma_buf_uninit_sysfs_statistics(void);
+
+int dma_buf_stats_setup(struct dma_buf *dmabuf);
+int dma_buf_attach_stats_setup(struct dma_buf_attachment *attach,
+			       unsigned int uid);
+static inline void dma_buf_update_attachment_map_count(struct dma_buf_attachment *attach,
+						       int delta)
+{
+	struct dma_buf_attach_sysfs_entry *entry = attach->sysfs_entry;
+
+	entry->map_counter += delta;
+}
+void dma_buf_stats_teardown(struct dma_buf *dmabuf);
+void dma_buf_attach_stats_teardown(struct dma_buf_attachment *attach);
+static inline unsigned int dma_buf_update_attach_uid(struct dma_buf *dmabuf)
+{
+	struct dma_buf_sysfs_entry *entry = dmabuf->sysfs_entry;
+
+	return entry->attachment_uid++;
+}
+#else
+
+static inline int dma_buf_init_sysfs_statistics(void)
+{
+	return 0;
+}
+
+static inline void dma_buf_uninit_sysfs_statistics(void) {}
+
+static inline int dma_buf_stats_setup(struct dma_buf *dmabuf)
+{
+	return 0;
+}
+static inline int dma_buf_attach_stats_setup(struct dma_buf_attachment *attach,
+					     unsigned int uid)
+{
+	return 0;
+}
+
+static inline void dma_buf_stats_teardown(struct dma_buf *dmabuf) {}
+static inline void dma_buf_attach_stats_teardown(struct dma_buf_attachment *attach) {}
+static inline void dma_buf_update_attachment_map_count(struct dma_buf_attachment *attach,
+						       int delta) {}
+static inline unsigned int dma_buf_update_attach_uid(struct dma_buf *dmabuf)
+{
+	return 0;
+}
+#endif
+#endif // _DMA_BUF_SYSFS_STATS_H
diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
index 758de0e..913a4a4 100644
--- a/drivers/dma-buf/dma-buf.c
+++ b/drivers/dma-buf/dma-buf.c
@@ -29,6 +29,8 @@
 #include <uapi/linux/dma-buf.h>
 #include <uapi/linux/magic.h>
 
+#include "dma-buf-sysfs-stats.h"
+
 static inline int is_dma_buf_file(struct file *);
 
 struct dma_buf_list {
@@ -79,6 +81,7 @@ static void dma_buf_release(struct dentry *dentry)
 	if (dmabuf->resv == (struct dma_resv *)&dmabuf[1])
 		dma_resv_fini(dmabuf->resv);
 
+	dma_buf_stats_teardown(dmabuf);
 	module_put(dmabuf->owner);
 	kfree(dmabuf->name);
 	kfree(dmabuf);
@@ -124,6 +127,54 @@ static struct file_system_type dma_buf_fs_type = {
 	.kill_sb = kill_anon_super,
 };
 
+#ifdef CONFIG_DMABUF_SYSFS_STATS
+static void dma_buf_vma_open(struct vm_area_struct *vma)
+{
+	struct dma_buf *dmabuf = vma->vm_file->private_data;
+
+	dmabuf->mmap_count++;
+	/* call the heap provided vma open() op */
+	if (dmabuf->exp_vm_ops->open)
+		dmabuf->exp_vm_ops->open(vma);
+}
+
+static void dma_buf_vma_close(struct vm_area_struct *vma)
+{
+	struct dma_buf *dmabuf = vma->vm_file->private_data;
+
+	if (dmabuf->mmap_count)
+		dmabuf->mmap_count--;
+	/* call the heap provided vma close() op */
+	if (dmabuf->exp_vm_ops->close)
+		dmabuf->exp_vm_ops->close(vma);
+}
+
+static int dma_buf_do_mmap(struct dma_buf *dmabuf, struct vm_area_struct *vma)
+{
+	/* call this first because the exporter might override vma->vm_ops */
+	int ret = dmabuf->ops->mmap(dmabuf, vma);
+
+	if (ret)
+		return ret;
+
+	/* save the exporter provided vm_ops */
+	dmabuf->exp_vm_ops = vma->vm_ops;
+	dmabuf->vm_ops = *(dmabuf->exp_vm_ops);
+	/* override open() and close() to provide buffer mmap count */
+	dmabuf->vm_ops.open = dma_buf_vma_open;
+	dmabuf->vm_ops.close = dma_buf_vma_close;
+	vma->vm_ops = &dmabuf->vm_ops;
+	dmabuf->mmap_count++;
+
+	return ret;
+}
+#else	/* CONFIG_DMABUF_SYSFS_STATS */
+static int dma_buf_do_mmap(struct dma_buf *dmabuf, struct vm_area_struct *vma)
+{
+	return dmabuf->ops->mmap(dmabuf, vma);
+}
+#endif	/* CONFIG_DMABUF_SYSFS_STATS */
+
 static int dma_buf_mmap_internal(struct file *file, struct vm_area_struct *vma)
 {
 	struct dma_buf *dmabuf;
@@ -142,7 +193,7 @@ static int dma_buf_mmap_internal(struct file *file, struct vm_area_struct *vma)
 	    dmabuf->size >> PAGE_SHIFT)
 		return -EINVAL;
 
-	return dmabuf->ops->mmap(dmabuf, vma);
+	return dma_buf_do_mmap(dmabuf, vma);
 }
 
 static loff_t dma_buf_llseek(struct file *file, loff_t offset, int whence)
@@ -574,6 +625,10 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
 	file->f_mode |= FMODE_LSEEK;
 	dmabuf->file = file;
 
+	ret = dma_buf_stats_setup(dmabuf);
+	if (ret)
+		goto err_sysfs;
+
 	mutex_init(&dmabuf->lock);
 	INIT_LIST_HEAD(&dmabuf->attachments);
 
@@ -583,6 +638,14 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
 
 	return dmabuf;
 
+err_sysfs:
+	/*
+	 * Set file->f_path.dentry->d_fsdata to NULL so that when
+	 * dma_buf_release() gets invoked by dentry_ops, it exits
+	 * early before calling the release() dma_buf op.
+	 */
+	file->f_path.dentry->d_fsdata = NULL;
+	fput(file);
 err_dmabuf:
 	kfree(dmabuf);
 err_module:
@@ -683,6 +746,7 @@ struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf,
 {
 	struct dma_buf_attachment *attach;
 	int ret;
+	unsigned int attach_uid;
 
 	if (WARN_ON(!dmabuf || !dev))
 		return ERR_PTR(-EINVAL);
@@ -703,7 +767,12 @@ struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf,
 	}
 	list_add(&attach->node, &dmabuf->attachments);
 
+	attach_uid = dma_buf_update_attach_uid(dmabuf);
 	mutex_unlock(&dmabuf->lock);
+	ret = dma_buf_attach_stats_setup(attach, attach_uid);
+	if (ret)
+		goto err_sysfs;
+
 
 	return attach;
 
@@ -711,6 +780,10 @@ struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf,
 	kfree(attach);
 	mutex_unlock(&dmabuf->lock);
 	return ERR_PTR(ret);
+
+err_sysfs:
+	dma_buf_detach(dmabuf, attach);
+	return ERR_PTR(ret);
 }
 EXPORT_SYMBOL_GPL(dma_buf_attach);
 
@@ -727,8 +800,10 @@ void dma_buf_detach(struct dma_buf *dmabuf, struct dma_buf_attachment *attach)
 	if (WARN_ON(!dmabuf || !attach))
 		return;
 
-	if (attach->sgt)
+	if (attach->sgt) {
 		dmabuf->ops->unmap_dma_buf(attach, attach->sgt, attach->dir);
+		dma_buf_update_attachment_map_count(attach, -1 /* delta */);
+	}
 
 	mutex_lock(&dmabuf->lock);
 	list_del(&attach->node);
@@ -736,6 +811,7 @@ void dma_buf_detach(struct dma_buf *dmabuf, struct dma_buf_attachment *attach)
 		dmabuf->ops->detach(dmabuf, attach);
 
 	mutex_unlock(&dmabuf->lock);
+	dma_buf_attach_stats_teardown(attach);
 	kfree(attach);
 }
 EXPORT_SYMBOL_GPL(dma_buf_detach);
@@ -786,6 +862,9 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach,
 		attach->dir = direction;
 	}
 
+	if (!IS_ERR(sg_table))
+		dma_buf_update_attachment_map_count(attach, 1 /* delta */);
+
 	return sg_table;
 }
 EXPORT_SYMBOL_GPL(dma_buf_map_attachment);
@@ -813,6 +892,8 @@ void dma_buf_unmap_attachment(struct dma_buf_attachment *attach,
 		return;
 
 	attach->dmabuf->ops->unmap_dma_buf(attach, sg_table, direction);
+
+	dma_buf_update_attachment_map_count(attach, -1 /* delta */);
 }
 EXPORT_SYMBOL_GPL(dma_buf_unmap_attachment);
 
@@ -973,6 +1054,30 @@ int dma_buf_begin_cpu_access(struct dma_buf *dmabuf,
 }
 EXPORT_SYMBOL_GPL(dma_buf_begin_cpu_access);
 
+int dma_buf_begin_cpu_access_partial(struct dma_buf *dmabuf,
+				     enum dma_data_direction direction,
+				     unsigned int offset, unsigned int len)
+{
+	int ret = 0;
+
+	if (WARN_ON(!dmabuf))
+		return -EINVAL;
+
+	if (dmabuf->ops->begin_cpu_access_partial)
+		ret = dmabuf->ops->begin_cpu_access_partial(dmabuf, direction,
+							    offset, len);
+
+	/* Ensure that all fences are waited upon - but we first allow
+	 * the native handler the chance to do so more efficiently if it
+	 * chooses. A double invocation here will be reasonably cheap no-op.
+	 */
+	if (ret == 0)
+		ret = __dma_buf_begin_cpu_access(dmabuf, direction);
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(dma_buf_begin_cpu_access_partial);
+
 /**
  * dma_buf_end_cpu_access - Must be called after accessing a dma_buf from the
  * cpu in the kernel context. Calls end_cpu_access to allow exporter-specific
@@ -999,6 +1104,22 @@ int dma_buf_end_cpu_access(struct dma_buf *dmabuf,
 }
 EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access);
 
+int dma_buf_end_cpu_access_partial(struct dma_buf *dmabuf,
+				   enum dma_data_direction direction,
+				   unsigned int offset, unsigned int len)
+{
+	int ret = 0;
+
+	WARN_ON(!dmabuf);
+
+	if (dmabuf->ops->end_cpu_access_partial)
+		ret = dmabuf->ops->end_cpu_access_partial(dmabuf, direction,
+							  offset, len);
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access_partial);
+
 /**
  * dma_buf_kmap - Map a page of the buffer object into kernel address space. The
  * same restrictions as for kmap and friends apply.
@@ -1164,6 +1285,32 @@ void dma_buf_vunmap(struct dma_buf *dmabuf, void *vaddr)
 }
 EXPORT_SYMBOL_GPL(dma_buf_vunmap);
 
+int dma_buf_get_flags(struct dma_buf *dmabuf, unsigned long *flags)
+{
+	int ret = 0;
+
+	if (WARN_ON(!dmabuf) || !flags)
+		return -EINVAL;
+
+	if (dmabuf->ops->get_flags)
+		ret = dmabuf->ops->get_flags(dmabuf, flags);
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(dma_buf_get_flags);
+
+int dma_buf_get_uuid(struct dma_buf *dmabuf, uuid_t *uuid)
+{
+	if (WARN_ON(!dmabuf) || !uuid)
+		return -EINVAL;
+
+	if (!dmabuf->ops->get_uuid)
+		return -ENODEV;
+
+	return dmabuf->ops->get_uuid(dmabuf, uuid);
+}
+EXPORT_SYMBOL_GPL(dma_buf_get_uuid);
+
 #ifdef CONFIG_DEBUG_FS
 static int dma_buf_debug_show(struct seq_file *s, void *unused)
 {
@@ -1297,6 +1444,12 @@ static inline void dma_buf_uninit_debugfs(void)
 
 static int __init dma_buf_init(void)
 {
+	int ret;
+
+	ret = dma_buf_init_sysfs_statistics();
+	if (ret)
+		return ret;
+
 	dma_buf_mnt = kern_mount(&dma_buf_fs_type);
 	if (IS_ERR(dma_buf_mnt))
 		return PTR_ERR(dma_buf_mnt);
@@ -1312,5 +1465,6 @@ static void __exit dma_buf_deinit(void)
 {
 	dma_buf_uninit_debugfs();
 	kern_unmount(dma_buf_mnt);
+	dma_buf_uninit_sysfs_statistics();
 }
 __exitcall(dma_buf_deinit);
diff --git a/drivers/dma-buf/dma-heap.c b/drivers/dma-buf/dma-heap.c
new file mode 100644
index 0000000..0114157
--- /dev/null
+++ b/drivers/dma-buf/dma-heap.c
@@ -0,0 +1,403 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Framework for userspace DMA-BUF allocations
+ *
+ * Copyright (C) 2011 Google, Inc.
+ * Copyright (C) 2019 Linaro Ltd.
+ */
+
+#include <linux/cdev.h>
+#include <linux/debugfs.h>
+#include <linux/device.h>
+#include <linux/dma-buf.h>
+#include <linux/err.h>
+#include <linux/xarray.h>
+#include <linux/list.h>
+#include <linux/slab.h>
+#include <linux/uaccess.h>
+#include <linux/syscalls.h>
+#include <linux/dma-heap.h>
+#include <uapi/linux/dma-heap.h>
+
+#define DEVNAME "dma_heap"
+
+#define NUM_HEAP_MINORS 128
+
+/**
+ * struct dma_heap - represents a dmabuf heap in the system
+ * @name:		used for debugging/device-node name
+ * @ops:		ops struct for this heap
+ * @heap_devt		heap device node
+ * @list		list head connecting to list of heaps
+ * @heap_cdev		heap char device
+ * @heap_dev		heap device struct
+ *
+ * Represents a heap of memory from which buffers can be made.
+ */
+struct dma_heap {
+	const char *name;
+	const struct dma_heap_ops *ops;
+	void *priv;
+	dev_t heap_devt;
+	struct list_head list;
+	struct cdev heap_cdev;
+	struct kref refcount;
+	struct device *heap_dev;
+};
+
+static LIST_HEAD(heap_list);
+static DEFINE_MUTEX(heap_list_lock);
+static dev_t dma_heap_devt;
+static struct class *dma_heap_class;
+static DEFINE_XARRAY_ALLOC(dma_heap_minors);
+
+struct dma_heap *dma_heap_find(const char *name)
+{
+	struct dma_heap *h;
+
+	mutex_lock(&heap_list_lock);
+	list_for_each_entry(h, &heap_list, list) {
+		if (!strcmp(h->name, name)) {
+			kref_get(&h->refcount);
+			mutex_unlock(&heap_list_lock);
+			return h;
+		}
+	}
+	mutex_unlock(&heap_list_lock);
+	return NULL;
+}
+EXPORT_SYMBOL_GPL(dma_heap_find);
+
+
+void dma_heap_buffer_free(struct dma_buf *dmabuf)
+{
+	dma_buf_put(dmabuf);
+}
+EXPORT_SYMBOL_GPL(dma_heap_buffer_free);
+
+struct dma_buf *dma_heap_buffer_alloc(struct dma_heap *heap, size_t len,
+				      unsigned int fd_flags,
+				      unsigned int heap_flags)
+{
+	if (fd_flags & ~DMA_HEAP_VALID_FD_FLAGS)
+		return ERR_PTR(-EINVAL);
+
+	if (heap_flags & ~DMA_HEAP_VALID_HEAP_FLAGS)
+		return ERR_PTR(-EINVAL);
+	/*
+	 * Allocations from all heaps have to begin
+	 * and end on page boundaries.
+	 */
+	len = PAGE_ALIGN(len);
+	if (!len)
+		return ERR_PTR(-EINVAL);
+
+	return heap->ops->allocate(heap, len, fd_flags, heap_flags);
+}
+EXPORT_SYMBOL_GPL(dma_heap_buffer_alloc);
+
+int dma_heap_bufferfd_alloc(struct dma_heap *heap, size_t len,
+			    unsigned int fd_flags,
+			    unsigned int heap_flags)
+{
+	struct dma_buf *dmabuf;
+	int fd;
+
+	dmabuf = dma_heap_buffer_alloc(heap, len, fd_flags, heap_flags);
+
+	if (IS_ERR(dmabuf))
+		return PTR_ERR(dmabuf);
+
+	fd = dma_buf_fd(dmabuf, fd_flags);
+	if (fd < 0) {
+		dma_buf_put(dmabuf);
+		/* just return, as put will call release and that will free */
+	}
+	return fd;
+
+}
+EXPORT_SYMBOL_GPL(dma_heap_bufferfd_alloc);
+
+static int dma_heap_open(struct inode *inode, struct file *file)
+{
+	struct dma_heap *heap;
+
+	heap = xa_load(&dma_heap_minors, iminor(inode));
+	if (!heap) {
+		pr_err("dma_heap: minor %d unknown.\n", iminor(inode));
+		return -ENODEV;
+	}
+
+	/* instance data as context */
+	file->private_data = heap;
+	nonseekable_open(inode, file);
+
+	return 0;
+}
+
+static long dma_heap_ioctl_allocate(struct file *file, void *data)
+{
+	struct dma_heap_allocation_data *heap_allocation = data;
+	struct dma_heap *heap = file->private_data;
+	int fd;
+
+	if (heap_allocation->fd)
+		return -EINVAL;
+
+	fd = dma_heap_bufferfd_alloc(heap, heap_allocation->len,
+				     heap_allocation->fd_flags,
+				     heap_allocation->heap_flags);
+	if (fd < 0)
+		return fd;
+
+	heap_allocation->fd = fd;
+
+	return 0;
+}
+
+static unsigned int dma_heap_ioctl_cmds[] = {
+	DMA_HEAP_IOCTL_ALLOC,
+};
+
+static long dma_heap_ioctl(struct file *file, unsigned int ucmd,
+			   unsigned long arg)
+{
+	char stack_kdata[128];
+	char *kdata = stack_kdata;
+	unsigned int kcmd;
+	unsigned int in_size, out_size, drv_size, ksize;
+	int nr = _IOC_NR(ucmd);
+	int ret = 0;
+
+	if (nr >= ARRAY_SIZE(dma_heap_ioctl_cmds))
+		return -EINVAL;
+
+	/* Get the kernel ioctl cmd that matches */
+	kcmd = dma_heap_ioctl_cmds[nr];
+
+	/* Figure out the delta between user cmd size and kernel cmd size */
+	drv_size = _IOC_SIZE(kcmd);
+	out_size = _IOC_SIZE(ucmd);
+	in_size = out_size;
+	if ((ucmd & kcmd & IOC_IN) == 0)
+		in_size = 0;
+	if ((ucmd & kcmd & IOC_OUT) == 0)
+		out_size = 0;
+	ksize = max(max(in_size, out_size), drv_size);
+
+	/* If necessary, allocate buffer for ioctl argument */
+	if (ksize > sizeof(stack_kdata)) {
+		kdata = kmalloc(ksize, GFP_KERNEL);
+		if (!kdata)
+			return -ENOMEM;
+	}
+
+	if (copy_from_user(kdata, (void __user *)arg, in_size) != 0) {
+		ret = -EFAULT;
+		goto err;
+	}
+
+	/* zero out any difference between the kernel/user structure size */
+	if (ksize > in_size)
+		memset(kdata + in_size, 0, ksize - in_size);
+
+	switch (kcmd) {
+	case DMA_HEAP_IOCTL_ALLOC:
+		ret = dma_heap_ioctl_allocate(file, kdata);
+		break;
+	default:
+		ret = -ENOTTY;
+		goto err;
+	}
+
+	if (copy_to_user((void __user *)arg, kdata, out_size) != 0)
+		ret = -EFAULT;
+err:
+	if (kdata != stack_kdata)
+		kfree(kdata);
+	return ret;
+}
+
+static const struct file_operations dma_heap_fops = {
+	.owner          = THIS_MODULE,
+	.open		= dma_heap_open,
+	.unlocked_ioctl = dma_heap_ioctl,
+#ifdef CONFIG_COMPAT
+	.compat_ioctl	= dma_heap_ioctl,
+#endif
+};
+
+/**
+ * dma_heap_get_drvdata() - get per-subdriver data for the heap
+ * @heap: DMA-Heap to retrieve private data for
+ *
+ * Returns:
+ * The per-subdriver data for the heap.
+ */
+void *dma_heap_get_drvdata(struct dma_heap *heap)
+{
+	return heap->priv;
+}
+EXPORT_SYMBOL_GPL(dma_heap_get_drvdata);
+
+static void dma_heap_release(struct kref *ref)
+{
+	struct dma_heap *heap = container_of(ref, struct dma_heap, refcount);
+	int minor = MINOR(heap->heap_devt);
+
+	/* Note, we already holding the heap_list_lock here */
+	list_del(&heap->list);
+
+	device_destroy(dma_heap_class, heap->heap_devt);
+	cdev_del(&heap->heap_cdev);
+	xa_erase(&dma_heap_minors, minor);
+
+	kfree(heap);
+}
+
+void dma_heap_put(struct dma_heap *h)
+{
+	/*
+	 * Take the heap_list_lock now to avoid racing with code
+	 * scanning the list and then taking a kref.
+	 */
+	mutex_lock(&heap_list_lock);
+	kref_put(&h->refcount, dma_heap_release);
+	mutex_unlock(&heap_list_lock);
+}
+EXPORT_SYMBOL_GPL(dma_heap_put);
+
+/**
+ * dma_heap_get_dev() - get device struct for the heap
+ * @heap: DMA-Heap to retrieve device struct from
+ *
+ * Returns:
+ * The device struct for the heap.
+ */
+struct device *dma_heap_get_dev(struct dma_heap *heap)
+{
+	return heap->heap_dev;
+}
+EXPORT_SYMBOL_GPL(dma_heap_get_dev);
+
+/**
+ * dma_heap_get_name() - get heap name
+ * @heap: DMA-Heap to retrieve private data for
+ *
+ * Returns:
+ * The char* for the heap name.
+ */
+const char *dma_heap_get_name(struct dma_heap *heap)
+{
+	return heap->name;
+}
+EXPORT_SYMBOL_GPL(dma_heap_get_name);
+
+struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info)
+{
+	struct dma_heap *heap, *err_ret;
+	unsigned int minor;
+	int ret;
+
+	if (!exp_info->name || !strcmp(exp_info->name, "")) {
+		pr_err("dma_heap: Cannot add heap without a name\n");
+		return ERR_PTR(-EINVAL);
+	}
+
+	if (!exp_info->ops || !exp_info->ops->allocate) {
+		pr_err("dma_heap: Cannot add heap with invalid ops struct\n");
+		return ERR_PTR(-EINVAL);
+	}
+
+	/* check the name is unique */
+	heap = dma_heap_find(exp_info->name);
+	if (heap) {
+		pr_err("dma_heap: Already registered heap named %s\n",
+		       exp_info->name);
+		dma_heap_put(heap);
+		return ERR_PTR(-EINVAL);
+	}
+
+	heap = kzalloc(sizeof(*heap), GFP_KERNEL);
+	if (!heap)
+		return ERR_PTR(-ENOMEM);
+
+	kref_init(&heap->refcount);
+	heap->name = exp_info->name;
+	heap->ops = exp_info->ops;
+	heap->priv = exp_info->priv;
+
+	/* Find unused minor number */
+	ret = xa_alloc(&dma_heap_minors, &minor, heap,
+		       XA_LIMIT(0, NUM_HEAP_MINORS - 1), GFP_KERNEL);
+	if (ret < 0) {
+		pr_err("dma_heap: Unable to get minor number for heap\n");
+		err_ret = ERR_PTR(ret);
+		goto err0;
+	}
+
+	/* Create device */
+	heap->heap_devt = MKDEV(MAJOR(dma_heap_devt), minor);
+
+	cdev_init(&heap->heap_cdev, &dma_heap_fops);
+	ret = cdev_add(&heap->heap_cdev, heap->heap_devt, 1);
+	if (ret < 0) {
+		pr_err("dma_heap: Unable to add char device\n");
+		err_ret = ERR_PTR(ret);
+		goto err1;
+	}
+
+	heap->heap_dev = device_create(dma_heap_class,
+				       NULL,
+				       heap->heap_devt,
+				       NULL,
+				       heap->name);
+	if (IS_ERR(heap->heap_dev)) {
+		pr_err("dma_heap: Unable to create device\n");
+		err_ret = ERR_CAST(heap->heap_dev);
+		goto err2;
+	}
+
+	/* Make sure it doesn't disappear on us */
+	heap->heap_dev = get_device(heap->heap_dev);
+
+	/* Add heap to the list */
+	mutex_lock(&heap_list_lock);
+	list_add(&heap->list, &heap_list);
+	mutex_unlock(&heap_list_lock);
+
+	return heap;
+
+err2:
+	cdev_del(&heap->heap_cdev);
+err1:
+	xa_erase(&dma_heap_minors, minor);
+err0:
+	kfree(heap);
+	return err_ret;
+}
+EXPORT_SYMBOL_GPL(dma_heap_add);
+
+static char *dma_heap_devnode(struct device *dev, umode_t *mode)
+{
+	return kasprintf(GFP_KERNEL, "dma_heap/%s", dev_name(dev));
+}
+
+static int dma_heap_init(void)
+{
+	int ret;
+
+	ret = alloc_chrdev_region(&dma_heap_devt, 0, NUM_HEAP_MINORS, DEVNAME);
+	if (ret)
+		return ret;
+
+	dma_heap_class = class_create(THIS_MODULE, DEVNAME);
+	if (IS_ERR(dma_heap_class)) {
+		unregister_chrdev_region(dma_heap_devt, NUM_HEAP_MINORS);
+		return PTR_ERR(dma_heap_class);
+	}
+	dma_heap_class->devnode = dma_heap_devnode;
+
+	return 0;
+}
+subsys_initcall(dma_heap_init);
diff --git a/drivers/dma-buf/heaps/Kconfig b/drivers/dma-buf/heaps/Kconfig
new file mode 100644
index 0000000..7eecaf0
--- /dev/null
+++ b/drivers/dma-buf/heaps/Kconfig
@@ -0,0 +1,22 @@
+config DMABUF_HEAPS_DEFERRED_FREE
+	tristate
+
+config DMABUF_HEAPS_PAGE_POOL
+	tristate
+
+config DMABUF_HEAPS_SYSTEM
+	tristate "DMA-BUF System Heap"
+	depends on DMABUF_HEAPS
+	select DMABUF_HEAPS_PAGE_POOL
+	select DMABUF_HEAPS_DEFERRED_FREE
+	help
+	  Choose this option to enable the system dmabuf heap. The system heap
+	  is backed by pages from the buddy allocator. If in doubt, say Y.
+
+config DMABUF_HEAPS_CMA
+	tristate "DMA-BUF CMA Heap"
+	depends on DMABUF_HEAPS && DMA_CMA
+	help
+	  Choose this option to enable dma-buf CMA heap. This heap is backed
+	  by the Contiguous Memory Allocator (CMA). If your system has these
+	  regions, you should say Y here.
diff --git a/drivers/dma-buf/heaps/Makefile b/drivers/dma-buf/heaps/Makefile
new file mode 100644
index 0000000..4d4cd94
--- /dev/null
+++ b/drivers/dma-buf/heaps/Makefile
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0
+obj-$(CONFIG_DMABUF_HEAPS_DEFERRED_FREE) += deferred-free-helper.o
+obj-$(CONFIG_DMABUF_HEAPS_PAGE_POOL)	+= page_pool.o
+obj-$(CONFIG_DMABUF_HEAPS_SYSTEM)	+= system_heap.o
+obj-$(CONFIG_DMABUF_HEAPS_CMA)		+= cma_heap.o
diff --git a/drivers/dma-buf/heaps/cma_heap.c b/drivers/dma-buf/heaps/cma_heap.c
new file mode 100644
index 0000000..5fcd14a
--- /dev/null
+++ b/drivers/dma-buf/heaps/cma_heap.c
@@ -0,0 +1,401 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * DMABUF CMA heap exporter
+ *
+ * Copyright (C) 2012, 2019, 2020 Linaro Ltd.
+ * Author: <benjamin.gaignard@linaro.org> for ST-Ericsson.
+ *
+ * Also utilizing parts of Andrew Davis' SRAM heap:
+ * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/
+ *	Andrew F. Davis <afd@ti.com>
+ */
+#include <linux/cma.h>
+#include <linux/dma-buf.h>
+#include <linux/dma-heap.h>
+#include <linux/dma-contiguous.h>
+#include <linux/err.h>
+#include <linux/highmem.h>
+#include <linux/io.h>
+#include <linux/mm.h>
+#include <linux/module.h>
+#include <linux/scatterlist.h>
+#include <linux/sched/signal.h>
+#include <linux/slab.h>
+
+
+struct cma_heap {
+	struct dma_heap *heap;
+	struct cma *cma;
+};
+
+struct cma_heap_buffer {
+	struct cma_heap *heap;
+	struct list_head attachments;
+	struct mutex lock;
+	unsigned long len;
+	struct page *cma_pages;
+	struct page **pages;
+	pgoff_t pagecount;
+	int vmap_cnt;
+	void *vaddr;
+};
+
+struct dma_heap_attachment {
+	struct device *dev;
+	struct sg_table table;
+	struct list_head list;
+	bool mapped;
+};
+
+static int cma_heap_attach(struct dma_buf *dmabuf,
+			   struct dma_buf_attachment *attachment)
+{
+	struct cma_heap_buffer *buffer = dmabuf->priv;
+	struct dma_heap_attachment *a;
+	int ret;
+
+	a = kzalloc(sizeof(*a), GFP_KERNEL);
+	if (!a)
+		return -ENOMEM;
+
+	ret = sg_alloc_table_from_pages(&a->table, buffer->pages,
+					buffer->pagecount, 0,
+					buffer->pagecount << PAGE_SHIFT,
+					GFP_KERNEL);
+	if (ret) {
+		kfree(a);
+		return ret;
+	}
+
+	a->dev = attachment->dev;
+	INIT_LIST_HEAD(&a->list);
+	a->mapped = false;
+
+	attachment->priv = a;
+
+	mutex_lock(&buffer->lock);
+	list_add(&a->list, &buffer->attachments);
+	mutex_unlock(&buffer->lock);
+
+	return 0;
+}
+
+static void cma_heap_detach(struct dma_buf *dmabuf,
+			    struct dma_buf_attachment *attachment)
+{
+	struct cma_heap_buffer *buffer = dmabuf->priv;
+	struct dma_heap_attachment *a = attachment->priv;
+
+	mutex_lock(&buffer->lock);
+	list_del(&a->list);
+	mutex_unlock(&buffer->lock);
+
+	sg_free_table(&a->table);
+	kfree(a);
+}
+
+static struct sg_table *cma_heap_map_dma_buf(struct dma_buf_attachment *attachment,
+					     enum dma_data_direction direction)
+{
+	struct dma_heap_attachment *a = attachment->priv;
+	struct sg_table *table = &a->table;
+	int ret;
+
+	ret = dma_map_sgtable(attachment->dev, table, direction, 0);
+	if (ret)
+		return ERR_PTR(-ENOMEM);
+	a->mapped = true;
+	return table;
+}
+
+static void cma_heap_unmap_dma_buf(struct dma_buf_attachment *attachment,
+				   struct sg_table *table,
+				   enum dma_data_direction direction)
+{
+	struct dma_heap_attachment *a = attachment->priv;
+
+	a->mapped = false;
+	dma_unmap_sgtable(attachment->dev, table, direction, 0);
+}
+
+static int cma_heap_dma_buf_begin_cpu_access(struct dma_buf *dmabuf,
+					     enum dma_data_direction direction)
+{
+	struct cma_heap_buffer *buffer = dmabuf->priv;
+	struct dma_heap_attachment *a;
+
+	if (buffer->vmap_cnt)
+		invalidate_kernel_vmap_range(buffer->vaddr, buffer->len);
+
+	mutex_lock(&buffer->lock);
+	list_for_each_entry(a, &buffer->attachments, list) {
+		if (!a->mapped)
+			continue;
+		dma_sync_sgtable_for_cpu(a->dev, &a->table, direction);
+	}
+	mutex_unlock(&buffer->lock);
+
+	return 0;
+}
+
+static int cma_heap_dma_buf_end_cpu_access(struct dma_buf *dmabuf,
+					   enum dma_data_direction direction)
+{
+	struct cma_heap_buffer *buffer = dmabuf->priv;
+	struct dma_heap_attachment *a;
+
+	if (buffer->vmap_cnt)
+		flush_kernel_vmap_range(buffer->vaddr, buffer->len);
+
+	mutex_lock(&buffer->lock);
+	list_for_each_entry(a, &buffer->attachments, list) {
+		if (!a->mapped)
+			continue;
+		dma_sync_sgtable_for_device(a->dev, &a->table, direction);
+	}
+	mutex_unlock(&buffer->lock);
+
+	return 0;
+}
+
+static vm_fault_t cma_heap_vm_fault(struct vm_fault *vmf)
+{
+	struct vm_area_struct *vma = vmf->vma;
+	struct cma_heap_buffer *buffer = vma->vm_private_data;
+
+	if (vmf->pgoff > buffer->pagecount)
+		return VM_FAULT_SIGBUS;
+
+	vmf->page = buffer->pages[vmf->pgoff];
+	get_page(vmf->page);
+
+	return 0;
+}
+
+static const struct vm_operations_struct dma_heap_vm_ops = {
+	.fault = cma_heap_vm_fault,
+};
+
+static int cma_heap_mmap(struct dma_buf *dmabuf, struct vm_area_struct *vma)
+{
+	struct cma_heap_buffer *buffer = dmabuf->priv;
+
+	if ((vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) == 0)
+		return -EINVAL;
+
+	vma->vm_ops = &dma_heap_vm_ops;
+	vma->vm_private_data = buffer;
+
+	return 0;
+}
+
+static void *cma_heap_do_vmap(struct cma_heap_buffer *buffer)
+{
+	void *vaddr;
+
+	vaddr = vmap(buffer->pages, buffer->pagecount, VM_MAP, PAGE_KERNEL);
+	if (!vaddr)
+		return ERR_PTR(-ENOMEM);
+
+	return vaddr;
+}
+
+static void *cma_heap_vmap(struct dma_buf *dmabuf)
+{
+	struct cma_heap_buffer *buffer = dmabuf->priv;
+	void *vaddr;
+
+	mutex_lock(&buffer->lock);
+	if (buffer->vmap_cnt) {
+		buffer->vmap_cnt++;
+		vaddr = buffer->vaddr;
+		goto out;
+	}
+
+	vaddr = cma_heap_do_vmap(buffer);
+	if (IS_ERR(vaddr))
+		goto out;
+
+	buffer->vaddr = vaddr;
+	buffer->vmap_cnt++;
+out:
+	mutex_unlock(&buffer->lock);
+
+	return vaddr;
+}
+
+static void cma_heap_vunmap(struct dma_buf *dmabuf, void *vaddr)
+{
+	struct cma_heap_buffer *buffer = dmabuf->priv;
+
+	mutex_lock(&buffer->lock);
+	if (!--buffer->vmap_cnt) {
+		vunmap(buffer->vaddr);
+		buffer->vaddr = NULL;
+	}
+	mutex_unlock(&buffer->lock);
+}
+
+static void cma_heap_dma_buf_release(struct dma_buf *dmabuf)
+{
+	struct cma_heap_buffer *buffer = dmabuf->priv;
+	struct cma_heap *cma_heap = buffer->heap;
+
+	if (buffer->vmap_cnt > 0) {
+		WARN(1, "%s: buffer still mapped in the kernel\n", __func__);
+		vunmap(buffer->vaddr);
+	}
+
+	/* free page list */
+	kfree(buffer->pages);
+	/* release memory */
+	cma_release(cma_heap->cma, buffer->cma_pages, buffer->pagecount);
+	kfree(buffer);
+}
+
+static const struct dma_buf_ops cma_heap_buf_ops = {
+	.attach = cma_heap_attach,
+	.detach = cma_heap_detach,
+	.map_dma_buf = cma_heap_map_dma_buf,
+	.unmap_dma_buf = cma_heap_unmap_dma_buf,
+	.begin_cpu_access = cma_heap_dma_buf_begin_cpu_access,
+	.end_cpu_access = cma_heap_dma_buf_end_cpu_access,
+	.mmap = cma_heap_mmap,
+	.vmap = cma_heap_vmap,
+	.vunmap = cma_heap_vunmap,
+	.release = cma_heap_dma_buf_release,
+};
+
+static struct dma_buf *cma_heap_allocate(struct dma_heap *heap,
+					 unsigned long len,
+					 unsigned long fd_flags,
+					 unsigned long heap_flags)
+{
+	struct cma_heap *cma_heap = dma_heap_get_drvdata(heap);
+	struct cma_heap_buffer *buffer;
+	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
+	size_t size = PAGE_ALIGN(len);
+	pgoff_t pagecount = size >> PAGE_SHIFT;
+	unsigned long align = get_order(size);
+	struct page *cma_pages;
+	struct dma_buf *dmabuf;
+	int ret = -ENOMEM;
+	pgoff_t pg;
+
+	buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
+	if (!buffer)
+		return ERR_PTR(-ENOMEM);
+
+	INIT_LIST_HEAD(&buffer->attachments);
+	mutex_init(&buffer->lock);
+	buffer->len = size;
+
+	if (align > CONFIG_CMA_ALIGNMENT)
+		align = CONFIG_CMA_ALIGNMENT;
+
+	cma_pages = cma_alloc(cma_heap->cma, pagecount, align, false);
+	if (!cma_pages)
+		goto free_buffer;
+
+	/* Clear the cma pages */
+	if (PageHighMem(cma_pages)) {
+		unsigned long nr_clear_pages = pagecount;
+		struct page *page = cma_pages;
+
+		while (nr_clear_pages > 0) {
+			void *vaddr = kmap_atomic(page);
+
+			memset(vaddr, 0, PAGE_SIZE);
+			kunmap_atomic(vaddr);
+			/*
+			 * Avoid wasting time zeroing memory if the process
+			 * has been killed by by SIGKILL
+			 */
+			if (fatal_signal_pending(current))
+				goto free_cma;
+			page++;
+			nr_clear_pages--;
+		}
+	} else {
+		memset(page_address(cma_pages), 0, size);
+	}
+
+	buffer->pages = kmalloc_array(pagecount, sizeof(*buffer->pages), GFP_KERNEL);
+	if (!buffer->pages) {
+		ret = -ENOMEM;
+		goto free_cma;
+	}
+
+	for (pg = 0; pg < pagecount; pg++)
+		buffer->pages[pg] = &cma_pages[pg];
+
+	buffer->cma_pages = cma_pages;
+	buffer->heap = cma_heap;
+	buffer->pagecount = pagecount;
+
+	/* create the dmabuf */
+	exp_info.exp_name = dma_heap_get_name(heap);
+	exp_info.ops = &cma_heap_buf_ops;
+	exp_info.size = buffer->len;
+	exp_info.flags = fd_flags;
+	exp_info.priv = buffer;
+	dmabuf = dma_buf_export(&exp_info);
+	if (IS_ERR(dmabuf)) {
+		ret = PTR_ERR(dmabuf);
+		goto free_pages;
+	}
+
+	return dmabuf;
+
+free_pages:
+	kfree(buffer->pages);
+free_cma:
+	cma_release(cma_heap->cma, cma_pages, pagecount);
+free_buffer:
+	kfree(buffer);
+
+	return ERR_PTR(ret);
+}
+
+static const struct dma_heap_ops cma_heap_ops = {
+	.allocate = cma_heap_allocate,
+};
+
+static int __add_cma_heap(struct cma *cma, void *data)
+{
+	struct cma_heap *cma_heap;
+	struct dma_heap_export_info exp_info;
+
+	cma_heap = kzalloc(sizeof(*cma_heap), GFP_KERNEL);
+	if (!cma_heap)
+		return -ENOMEM;
+	cma_heap->cma = cma;
+
+	exp_info.name = cma_get_name(cma);
+	exp_info.ops = &cma_heap_ops;
+	exp_info.priv = cma_heap;
+
+	cma_heap->heap = dma_heap_add(&exp_info);
+	if (IS_ERR(cma_heap->heap)) {
+		int ret = PTR_ERR(cma_heap->heap);
+
+		kfree(cma_heap);
+		return ret;
+	}
+
+	return 0;
+}
+
+static int add_default_cma_heap(void)
+{
+	struct cma *default_cma = dev_get_cma_area(NULL);
+	int ret = 0;
+
+	if (default_cma)
+		ret = __add_cma_heap(default_cma, NULL);
+
+	return ret;
+}
+module_init(add_default_cma_heap);
+MODULE_DESCRIPTION("DMA-BUF CMA Heap");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/dma-buf/heaps/deferred-free-helper.c b/drivers/dma-buf/heaps/deferred-free-helper.c
new file mode 100644
index 0000000..dd09c4b
--- /dev/null
+++ b/drivers/dma-buf/heaps/deferred-free-helper.c
@@ -0,0 +1,142 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Deferred dmabuf freeing helper
+ *
+ * Copyright (C) 2020 Linaro, Ltd.
+ *
+ * Based on the ION page pool code
+ * Copyright (C) 2011 Google, Inc.
+ */
+
+#include <linux/freezer.h>
+#include <linux/list.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <linux/swap.h>
+#include <linux/sched/signal.h>
+#include <uapi/linux/sched/types.h>
+
+#include "deferred-free-helper.h"
+
+static LIST_HEAD(free_list);
+static size_t list_nr_pages;
+wait_queue_head_t freelist_waitqueue;
+struct task_struct *freelist_task;
+static DEFINE_SPINLOCK(free_list_lock);
+
+void deferred_free(struct deferred_freelist_item *item,
+		   void (*free)(struct deferred_freelist_item*,
+				enum df_reason),
+		   size_t nr_pages)
+{
+	unsigned long flags;
+
+	INIT_LIST_HEAD(&item->list);
+	item->nr_pages = nr_pages;
+	item->free = free;
+
+	spin_lock_irqsave(&free_list_lock, flags);
+	list_add(&item->list, &free_list);
+	list_nr_pages += nr_pages;
+	spin_unlock_irqrestore(&free_list_lock, flags);
+	wake_up(&freelist_waitqueue);
+}
+EXPORT_SYMBOL_GPL(deferred_free);
+
+static size_t free_one_item(enum df_reason reason)
+{
+	unsigned long flags;
+	size_t nr_pages;
+	struct deferred_freelist_item *item;
+
+	spin_lock_irqsave(&free_list_lock, flags);
+	if (list_empty(&free_list)) {
+		spin_unlock_irqrestore(&free_list_lock, flags);
+		return 0;
+	}
+	item = list_first_entry(&free_list, struct deferred_freelist_item, list);
+	list_del(&item->list);
+	nr_pages = item->nr_pages;
+	list_nr_pages -= nr_pages;
+	spin_unlock_irqrestore(&free_list_lock, flags);
+
+	item->free(item, reason);
+	return nr_pages;
+}
+
+static unsigned long get_freelist_nr_pages(void)
+{
+	unsigned long nr_pages;
+	unsigned long flags;
+
+	spin_lock_irqsave(&free_list_lock, flags);
+	nr_pages = list_nr_pages;
+	spin_unlock_irqrestore(&free_list_lock, flags);
+	return nr_pages;
+}
+
+static unsigned long freelist_shrink_count(struct shrinker *shrinker,
+					   struct shrink_control *sc)
+{
+	return get_freelist_nr_pages();
+}
+
+static unsigned long freelist_shrink_scan(struct shrinker *shrinker,
+					  struct shrink_control *sc)
+{
+	unsigned long total_freed = 0;
+
+	if (sc->nr_to_scan == 0)
+		return 0;
+
+	while (total_freed < sc->nr_to_scan) {
+		size_t pages_freed = free_one_item(DF_UNDER_PRESSURE);
+
+		if (!pages_freed)
+			break;
+
+		total_freed += pages_freed;
+	}
+
+	return total_freed;
+}
+
+static struct shrinker freelist_shrinker = {
+	.count_objects = freelist_shrink_count,
+	.scan_objects = freelist_shrink_scan,
+	.seeks = DEFAULT_SEEKS,
+	.batch = 0,
+};
+
+static int deferred_free_thread(void *data)
+{
+	while (true) {
+		wait_event_freezable(freelist_waitqueue,
+				     get_freelist_nr_pages() > 0);
+
+		free_one_item(DF_NORMAL);
+	}
+
+	return 0;
+}
+
+static int deferred_freelist_init(void)
+{
+	struct sched_param param = { .sched_priority = 0 };
+
+	list_nr_pages = 0;
+
+	init_waitqueue_head(&freelist_waitqueue);
+	freelist_task = kthread_run(deferred_free_thread, NULL,
+				    "%s", "dmabuf-deferred-free-worker");
+	if (IS_ERR(freelist_task)) {
+		pr_err("Creating thread for deferred free failed\n");
+		return -1;
+	}
+	sched_setscheduler(freelist_task, SCHED_IDLE, &param);
+
+	return register_shrinker(&freelist_shrinker);
+}
+module_init(deferred_freelist_init);
+MODULE_LICENSE("GPL v2");
+
diff --git a/drivers/dma-buf/heaps/deferred-free-helper.h b/drivers/dma-buf/heaps/deferred-free-helper.h
new file mode 100644
index 0000000..1194032
--- /dev/null
+++ b/drivers/dma-buf/heaps/deferred-free-helper.h
@@ -0,0 +1,55 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef DEFERRED_FREE_HELPER_H
+#define DEFERRED_FREE_HELPER_H
+
+/**
+ * df_reason - enum for reason why item was freed
+ *
+ * This provides a reason for why the free function was called
+ * on the item. This is useful when deferred_free is used in
+ * combination with a pagepool, so under pressure the page can
+ * be immediately freed.
+ *
+ * DF_NORMAL:         Normal deferred free
+ *
+ * DF_UNDER_PRESSURE: Free was called because the system
+ *                    is under memory pressure. Usually
+ *                    from a shrinker. Avoid allocating
+ *                    memory in the free call, as it may
+ *                    fail.
+ */
+enum df_reason {
+	DF_NORMAL,
+	DF_UNDER_PRESSURE,
+};
+
+/**
+ * deferred_freelist_item - item structure for deferred freelist
+ *
+ * This is to be added to the structure for whatever you want to
+ * defer freeing on.
+ *
+ * @nr_pages: number of pages used by item to be freed
+ * @free: function pointer to be called when freeing the item
+ * @list: list entry for the deferred list
+ */
+struct deferred_freelist_item {
+	size_t nr_pages;
+	void (*free)(struct deferred_freelist_item *i,
+		     enum df_reason reason);
+	struct list_head list;
+};
+
+/**
+ * deferred_free - call to add item to the deferred free list
+ *
+ * @item: Pointer to deferred_freelist_item field of a structure
+ * @free: Function pointer to the free call
+ * @nr_pages: number of pages to be freed
+ */
+void deferred_free(struct deferred_freelist_item *item,
+		   void (*free)(struct deferred_freelist_item *i,
+				enum df_reason reason),
+		   size_t nr_pages);
+#endif
diff --git a/drivers/dma-buf/heaps/page_pool.c b/drivers/dma-buf/heaps/page_pool.c
new file mode 100644
index 0000000..37faab4
--- /dev/null
+++ b/drivers/dma-buf/heaps/page_pool.c
@@ -0,0 +1,248 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * DMA BUF page pool system
+ *
+ * Copyright (C) 2020 Linaro Ltd.
+ *
+ * Based on the ION page pool code
+ * Copyright (C) 2011 Google, Inc.
+ */
+
+#include <linux/freezer.h>
+#include <linux/list.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <linux/swap.h>
+#include <linux/sched/signal.h>
+#include "page_pool.h"
+
+static LIST_HEAD(pool_list);
+static DEFINE_MUTEX(pool_list_lock);
+
+static inline
+struct page *dmabuf_page_pool_alloc_pages(struct dmabuf_page_pool *pool)
+{
+	if (fatal_signal_pending(current))
+		return NULL;
+	return alloc_pages(pool->gfp_mask, pool->order);
+}
+
+static inline void dmabuf_page_pool_free_pages(struct dmabuf_page_pool *pool,
+					       struct page *page)
+{
+	__free_pages(page, pool->order);
+}
+
+static void dmabuf_page_pool_add(struct dmabuf_page_pool *pool, struct page *page)
+{
+	int index;
+
+	if (PageHighMem(page))
+		index = POOL_HIGHPAGE;
+	else
+		index = POOL_LOWPAGE;
+
+	mutex_lock(&pool->mutex);
+	list_add_tail(&page->lru, &pool->items[index]);
+	pool->count[index]++;
+	mutex_unlock(&pool->mutex);
+	mod_node_page_state(page_pgdat(page), NR_KERNEL_MISC_RECLAIMABLE,
+			    1 << pool->order);
+}
+
+static struct page *dmabuf_page_pool_remove(struct dmabuf_page_pool *pool, int index)
+{
+	struct page *page;
+
+	mutex_lock(&pool->mutex);
+	page = list_first_entry_or_null(&pool->items[index], struct page, lru);
+	if (page) {
+		pool->count[index]--;
+		list_del(&page->lru);
+		mod_node_page_state(page_pgdat(page), NR_KERNEL_MISC_RECLAIMABLE,
+				    -(1 << pool->order));
+	}
+	mutex_unlock(&pool->mutex);
+
+	return page;
+}
+
+static struct page *dmabuf_page_pool_fetch(struct dmabuf_page_pool *pool)
+{
+	struct page *page = NULL;
+
+	page = dmabuf_page_pool_remove(pool, POOL_HIGHPAGE);
+	if (!page)
+		page = dmabuf_page_pool_remove(pool, POOL_LOWPAGE);
+
+	return page;
+}
+
+struct page *dmabuf_page_pool_alloc(struct dmabuf_page_pool *pool)
+{
+	struct page *page = NULL;
+
+	if (WARN_ON(!pool))
+		return NULL;
+
+	page = dmabuf_page_pool_fetch(pool);
+
+	if (!page)
+		page = dmabuf_page_pool_alloc_pages(pool);
+	return page;
+}
+EXPORT_SYMBOL_GPL(dmabuf_page_pool_alloc);
+
+void dmabuf_page_pool_free(struct dmabuf_page_pool *pool, struct page *page)
+{
+	if (WARN_ON(pool->order != compound_order(page)))
+		return;
+
+	dmabuf_page_pool_add(pool, page);
+}
+EXPORT_SYMBOL_GPL(dmabuf_page_pool_free);
+
+static int dmabuf_page_pool_total(struct dmabuf_page_pool *pool, bool high)
+{
+	int count = pool->count[POOL_LOWPAGE];
+
+	if (high)
+		count += pool->count[POOL_HIGHPAGE];
+
+	return count << pool->order;
+}
+
+struct dmabuf_page_pool *dmabuf_page_pool_create(gfp_t gfp_mask, unsigned int order)
+{
+	struct dmabuf_page_pool *pool = kmalloc(sizeof(*pool), GFP_KERNEL);
+	int i;
+
+	if (!pool)
+		return NULL;
+
+	for (i = 0; i < POOL_TYPE_SIZE; i++) {
+		pool->count[i] = 0;
+		INIT_LIST_HEAD(&pool->items[i]);
+	}
+	pool->gfp_mask = gfp_mask | __GFP_COMP;
+	pool->order = order;
+	mutex_init(&pool->mutex);
+
+	mutex_lock(&pool_list_lock);
+	list_add(&pool->list, &pool_list);
+	mutex_unlock(&pool_list_lock);
+
+	return pool;
+}
+EXPORT_SYMBOL_GPL(dmabuf_page_pool_create);
+
+void dmabuf_page_pool_destroy(struct dmabuf_page_pool *pool)
+{
+	struct page *page;
+	int i;
+
+	/* Remove us from the pool list */
+	mutex_lock(&pool_list_lock);
+	list_del(&pool->list);
+	mutex_unlock(&pool_list_lock);
+
+	/* Free any remaining pages in the pool */
+	for (i = 0; i < POOL_TYPE_SIZE; i++) {
+		while ((page = dmabuf_page_pool_remove(pool, i)))
+			dmabuf_page_pool_free_pages(pool, page);
+	}
+
+	kfree(pool);
+}
+EXPORT_SYMBOL_GPL(dmabuf_page_pool_destroy);
+
+static int dmabuf_page_pool_do_shrink(struct dmabuf_page_pool *pool, gfp_t gfp_mask,
+				      int nr_to_scan)
+{
+	int freed = 0;
+	bool high;
+
+	if (current_is_kswapd())
+		high = true;
+	else
+		high = !!(gfp_mask & __GFP_HIGHMEM);
+
+	if (nr_to_scan == 0)
+		return dmabuf_page_pool_total(pool, high);
+
+	while (freed < nr_to_scan) {
+		struct page *page;
+
+		/* Try to free low pages first */
+		page = dmabuf_page_pool_remove(pool, POOL_LOWPAGE);
+		if (!page)
+			page = dmabuf_page_pool_remove(pool, POOL_HIGHPAGE);
+
+		if (!page)
+			break;
+
+		dmabuf_page_pool_free_pages(pool, page);
+		freed += (1 << pool->order);
+	}
+
+	return freed;
+}
+
+static int dmabuf_page_pool_shrink(gfp_t gfp_mask, int nr_to_scan)
+{
+	struct dmabuf_page_pool *pool;
+	int nr_total = 0;
+	int nr_freed;
+	int only_scan = 0;
+
+	if (!nr_to_scan)
+		only_scan = 1;
+
+	mutex_lock(&pool_list_lock);
+	list_for_each_entry(pool, &pool_list, list) {
+		if (only_scan) {
+			nr_total += dmabuf_page_pool_do_shrink(pool,
+							       gfp_mask,
+							       nr_to_scan);
+		} else {
+			nr_freed = dmabuf_page_pool_do_shrink(pool,
+							      gfp_mask,
+							      nr_to_scan);
+			nr_to_scan -= nr_freed;
+			nr_total += nr_freed;
+			if (nr_to_scan <= 0)
+				break;
+		}
+	}
+	mutex_unlock(&pool_list_lock);
+
+	return nr_total;
+}
+
+static unsigned long dmabuf_page_pool_shrink_count(struct shrinker *shrinker,
+						   struct shrink_control *sc)
+{
+	return dmabuf_page_pool_shrink(sc->gfp_mask, 0);
+}
+
+static unsigned long dmabuf_page_pool_shrink_scan(struct shrinker *shrinker,
+						  struct shrink_control *sc)
+{
+	if (sc->nr_to_scan == 0)
+		return 0;
+	return dmabuf_page_pool_shrink(sc->gfp_mask, sc->nr_to_scan);
+}
+
+struct shrinker pool_shrinker = {
+	.count_objects = dmabuf_page_pool_shrink_count,
+	.scan_objects = dmabuf_page_pool_shrink_scan,
+	.seeks = DEFAULT_SEEKS,
+	.batch = 0,
+};
+
+static int dmabuf_page_pool_init_shrinker(void)
+{
+	return register_shrinker(&pool_shrinker);
+}
+module_init(dmabuf_page_pool_init_shrinker);
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/dma-buf/heaps/page_pool.h b/drivers/dma-buf/heaps/page_pool.h
new file mode 100644
index 0000000..6b083b0
--- /dev/null
+++ b/drivers/dma-buf/heaps/page_pool.h
@@ -0,0 +1,55 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * DMA BUF PagePool implementation
+ * Based on earlier ION code by Google
+ *
+ * Copyright (C) 2011 Google, Inc.
+ * Copyright (C) 2020 Linaro Ltd.
+ */
+
+#ifndef _DMABUF_PAGE_POOL_H
+#define _DMABUF_PAGE_POOL_H
+
+#include <linux/device.h>
+#include <linux/kref.h>
+#include <linux/mm_types.h>
+#include <linux/mutex.h>
+#include <linux/shrinker.h>
+#include <linux/types.h>
+
+/* page types we track in the pool */
+enum {
+	POOL_LOWPAGE,      /* Clean lowmem pages */
+	POOL_HIGHPAGE,     /* Clean highmem pages */
+
+	POOL_TYPE_SIZE,
+};
+
+/**
+ * struct dmabuf_page_pool - pagepool struct
+ * @count[]:		array of number of pages of that type in the pool
+ * @items[]:		array of list of pages of the specific type
+ * @mutex:		lock protecting this struct and especially the count
+ *			item list
+ * @gfp_mask:		gfp_mask to use from alloc
+ * @order:		order of pages in the pool
+ * @list:		list node for list of pools
+ *
+ * Allows you to keep a pool of pre allocated pages to use
+ */
+struct dmabuf_page_pool {
+	int count[POOL_TYPE_SIZE];
+	struct list_head items[POOL_TYPE_SIZE];
+	struct mutex mutex;
+	gfp_t gfp_mask;
+	unsigned int order;
+	struct list_head list;
+};
+
+struct dmabuf_page_pool *dmabuf_page_pool_create(gfp_t gfp_mask,
+						 unsigned int order);
+void dmabuf_page_pool_destroy(struct dmabuf_page_pool *pool);
+struct page *dmabuf_page_pool_alloc(struct dmabuf_page_pool *pool);
+void dmabuf_page_pool_free(struct dmabuf_page_pool *pool, struct page *page);
+
+#endif /* _DMABUF_PAGE_POOL_H */
diff --git a/drivers/dma-buf/heaps/system_heap.c b/drivers/dma-buf/heaps/system_heap.c
new file mode 100644
index 0000000..f4dc7a2
--- /dev/null
+++ b/drivers/dma-buf/heaps/system_heap.c
@@ -0,0 +1,571 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * DMABUF System heap exporter
+ *
+ * Copyright (C) 2011 Google, Inc.
+ * Copyright (C) 2019, 2020 Linaro Ltd.
+ *
+ * Portions based off of Andrew Davis' SRAM heap:
+ * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/
+ *	Andrew F. Davis <afd@ti.com>
+ */
+
+#include <linux/dma-buf.h>
+#include <linux/dma-mapping.h>
+#include <linux/dma-heap.h>
+#include <linux/err.h>
+#include <linux/highmem.h>
+#include <linux/mm.h>
+#include <linux/module.h>
+#include <linux/scatterlist.h>
+#include <linux/sched/signal.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+
+#include "page_pool.h"
+#include "deferred-free-helper.h"
+
+static struct dma_heap *sys_heap;
+static struct dma_heap *sys_uncached_heap;
+
+struct system_heap_buffer {
+	struct dma_heap *heap;
+	struct list_head attachments;
+	struct mutex lock;
+	unsigned long len;
+	struct sg_table sg_table;
+	int vmap_cnt;
+	void *vaddr;
+	struct deferred_freelist_item deferred_free;
+
+	bool uncached;
+};
+
+struct dma_heap_attachment {
+	struct device *dev;
+	struct sg_table *table;
+	struct list_head list;
+	bool mapped;
+
+	bool uncached;
+};
+
+#define HIGH_ORDER_GFP  (((GFP_HIGHUSER | __GFP_ZERO | __GFP_NOWARN \
+				| __GFP_NORETRY) & ~__GFP_RECLAIM) \
+				| __GFP_COMP)
+#define LOW_ORDER_GFP (GFP_HIGHUSER | __GFP_ZERO | __GFP_COMP)
+static gfp_t order_flags[] = {HIGH_ORDER_GFP, LOW_ORDER_GFP, LOW_ORDER_GFP};
+/*
+ * The selection of the orders used for allocation (1MB, 64K, 4K) is designed
+ * to match with the sizes often found in IOMMUs. Using order 4 pages instead
+ * of order 0 pages can significantly improve the performance of many IOMMUs
+ * by reducing TLB pressure and time spent updating page tables.
+ */
+static const unsigned int orders[] = {8, 4, 0};
+#define NUM_ORDERS ARRAY_SIZE(orders)
+struct dmabuf_page_pool *pools[NUM_ORDERS];
+
+static struct sg_table *dup_sg_table(struct sg_table *table)
+{
+	struct sg_table *new_table;
+	int ret, i;
+	struct scatterlist *sg, *new_sg;
+
+	new_table = kzalloc(sizeof(*new_table), GFP_KERNEL);
+	if (!new_table)
+		return ERR_PTR(-ENOMEM);
+
+	ret = sg_alloc_table(new_table, table->orig_nents, GFP_KERNEL);
+	if (ret) {
+		kfree(new_table);
+		return ERR_PTR(-ENOMEM);
+	}
+
+	new_sg = new_table->sgl;
+	for_each_sgtable_sg(table, sg, i) {
+		sg_set_page(new_sg, sg_page(sg), sg->length, sg->offset);
+		new_sg = sg_next(new_sg);
+	}
+
+	return new_table;
+}
+
+static int system_heap_attach(struct dma_buf *dmabuf,
+			      struct dma_buf_attachment *attachment)
+{
+	struct system_heap_buffer *buffer = dmabuf->priv;
+	struct dma_heap_attachment *a;
+	struct sg_table *table;
+
+	a = kzalloc(sizeof(*a), GFP_KERNEL);
+	if (!a)
+		return -ENOMEM;
+
+	table = dup_sg_table(&buffer->sg_table);
+	if (IS_ERR(table)) {
+		kfree(a);
+		return -ENOMEM;
+	}
+
+	a->table = table;
+	a->dev = attachment->dev;
+	INIT_LIST_HEAD(&a->list);
+	a->mapped = false;
+	a->uncached = buffer->uncached;
+	attachment->priv = a;
+
+	mutex_lock(&buffer->lock);
+	list_add(&a->list, &buffer->attachments);
+	mutex_unlock(&buffer->lock);
+
+	return 0;
+}
+
+static void system_heap_detach(struct dma_buf *dmabuf,
+			       struct dma_buf_attachment *attachment)
+{
+	struct system_heap_buffer *buffer = dmabuf->priv;
+	struct dma_heap_attachment *a = attachment->priv;
+
+	mutex_lock(&buffer->lock);
+	list_del(&a->list);
+	mutex_unlock(&buffer->lock);
+
+	sg_free_table(a->table);
+	kfree(a->table);
+	kfree(a);
+}
+
+static struct sg_table *system_heap_map_dma_buf(struct dma_buf_attachment *attachment,
+						enum dma_data_direction direction)
+{
+	struct dma_heap_attachment *a = attachment->priv;
+	struct sg_table *table = a->table;
+	int attr = 0;
+	int ret;
+
+	if (a->uncached)
+		attr = DMA_ATTR_SKIP_CPU_SYNC;
+
+	ret = dma_map_sgtable(attachment->dev, table, direction, attr);
+	if (ret)
+		return ERR_PTR(ret);
+
+	a->mapped = true;
+	return table;
+}
+
+static void system_heap_unmap_dma_buf(struct dma_buf_attachment *attachment,
+				      struct sg_table *table,
+				      enum dma_data_direction direction)
+{
+	struct dma_heap_attachment *a = attachment->priv;
+	int attr = 0;
+
+	if (a->uncached)
+		attr = DMA_ATTR_SKIP_CPU_SYNC;
+	a->mapped = false;
+	dma_unmap_sgtable(attachment->dev, table, direction, attr);
+}
+
+static int system_heap_dma_buf_begin_cpu_access(struct dma_buf *dmabuf,
+						enum dma_data_direction direction)
+{
+	struct system_heap_buffer *buffer = dmabuf->priv;
+	struct dma_heap_attachment *a;
+
+	mutex_lock(&buffer->lock);
+
+	if (buffer->vmap_cnt)
+		invalidate_kernel_vmap_range(buffer->vaddr, buffer->len);
+
+	if (!buffer->uncached) {
+		list_for_each_entry(a, &buffer->attachments, list) {
+			if (!a->mapped)
+				continue;
+			dma_sync_sgtable_for_cpu(a->dev, a->table, direction);
+		}
+	}
+	mutex_unlock(&buffer->lock);
+
+	return 0;
+}
+
+static int system_heap_dma_buf_end_cpu_access(struct dma_buf *dmabuf,
+					      enum dma_data_direction direction)
+{
+	struct system_heap_buffer *buffer = dmabuf->priv;
+	struct dma_heap_attachment *a;
+
+	mutex_lock(&buffer->lock);
+
+	if (buffer->vmap_cnt)
+		flush_kernel_vmap_range(buffer->vaddr, buffer->len);
+
+	if (!buffer->uncached) {
+		list_for_each_entry(a, &buffer->attachments, list) {
+			if (!a->mapped)
+				continue;
+			dma_sync_sgtable_for_device(a->dev, a->table, direction);
+		}
+	}
+	mutex_unlock(&buffer->lock);
+
+	return 0;
+}
+
+static int system_heap_mmap(struct dma_buf *dmabuf, struct vm_area_struct *vma)
+{
+	struct system_heap_buffer *buffer = dmabuf->priv;
+	struct sg_table *table = &buffer->sg_table;
+	unsigned long addr = vma->vm_start;
+	struct sg_page_iter piter;
+	int ret;
+
+	if (buffer->uncached)
+		vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
+
+	for_each_sgtable_page(table, &piter, vma->vm_pgoff) {
+		struct page *page = sg_page_iter_page(&piter);
+
+		ret = remap_pfn_range(vma, addr, page_to_pfn(page), PAGE_SIZE,
+				      vma->vm_page_prot);
+		if (ret)
+			return ret;
+		addr += PAGE_SIZE;
+		if (addr >= vma->vm_end)
+			return 0;
+	}
+	return 0;
+}
+
+static void *system_heap_do_vmap(struct system_heap_buffer *buffer)
+{
+	struct sg_table *table = &buffer->sg_table;
+	int npages = PAGE_ALIGN(buffer->len) / PAGE_SIZE;
+	struct page **pages = vmalloc(sizeof(struct page *) * npages);
+	struct page **tmp = pages;
+	struct sg_page_iter piter;
+	pgprot_t pgprot = PAGE_KERNEL;
+	void *vaddr;
+
+	if (!pages)
+		return ERR_PTR(-ENOMEM);
+
+	if (buffer->uncached)
+		pgprot = pgprot_writecombine(PAGE_KERNEL);
+
+	for_each_sgtable_page(table, &piter, 0) {
+		WARN_ON(tmp - pages >= npages);
+		*tmp++ = sg_page_iter_page(&piter);
+	}
+
+	vaddr = vmap(pages, npages, VM_MAP, pgprot);
+	vfree(pages);
+
+	if (!vaddr)
+		return ERR_PTR(-ENOMEM);
+
+	return vaddr;
+}
+
+static void *system_heap_vmap(struct dma_buf *dmabuf)
+{
+	struct system_heap_buffer *buffer = dmabuf->priv;
+	void *vaddr;
+
+	mutex_lock(&buffer->lock);
+	if (buffer->vmap_cnt) {
+		buffer->vmap_cnt++;
+		vaddr = buffer->vaddr;
+		goto out;
+	}
+
+	vaddr = system_heap_do_vmap(buffer);
+	if (IS_ERR(vaddr))
+		goto out;
+
+	buffer->vaddr = vaddr;
+	buffer->vmap_cnt++;
+out:
+	mutex_unlock(&buffer->lock);
+
+	return vaddr;
+}
+
+static void system_heap_vunmap(struct dma_buf *dmabuf, void *vaddr)
+{
+	struct system_heap_buffer *buffer = dmabuf->priv;
+
+	mutex_lock(&buffer->lock);
+	if (!--buffer->vmap_cnt) {
+		vunmap(buffer->vaddr);
+		buffer->vaddr = NULL;
+	}
+	mutex_unlock(&buffer->lock);
+}
+
+static int system_heap_zero_buffer(struct system_heap_buffer *buffer)
+{
+	struct sg_table *sgt = &buffer->sg_table;
+	struct sg_page_iter piter;
+	struct page *p;
+	void *vaddr;
+	int ret = 0;
+
+	for_each_sgtable_page(sgt, &piter, 0) {
+		p = sg_page_iter_page(&piter);
+		vaddr = kmap_atomic(p);
+		memset(vaddr, 0, PAGE_SIZE);
+		kunmap_atomic(vaddr);
+	}
+
+	return ret;
+}
+
+static void system_heap_buf_free(struct deferred_freelist_item *item,
+				 enum df_reason reason)
+{
+	struct system_heap_buffer *buffer;
+	struct sg_table *table;
+	struct scatterlist *sg;
+	int i, j;
+
+	buffer = container_of(item, struct system_heap_buffer, deferred_free);
+	/* Zero the buffer pages before adding back to the pool */
+	if (reason == DF_NORMAL)
+		if (system_heap_zero_buffer(buffer))
+			reason = DF_UNDER_PRESSURE; // On failure, just free
+
+	table = &buffer->sg_table;
+	for_each_sg(table->sgl, sg, table->nents, i) {
+		struct page *page = sg_page(sg);
+
+		if (reason == DF_UNDER_PRESSURE) {
+			__free_pages(page, compound_order(page));
+		} else {
+			for (j = 0; j < NUM_ORDERS; j++) {
+				if (compound_order(page) == orders[j])
+					break;
+			}
+			dmabuf_page_pool_free(pools[j], page);
+		}
+	}
+	sg_free_table(table);
+	kfree(buffer);
+}
+
+static void system_heap_dma_buf_release(struct dma_buf *dmabuf)
+{
+	struct system_heap_buffer *buffer = dmabuf->priv;
+	int npages = PAGE_ALIGN(buffer->len) / PAGE_SIZE;
+
+	deferred_free(&buffer->deferred_free, system_heap_buf_free, npages);
+}
+
+static const struct dma_buf_ops system_heap_buf_ops = {
+	.attach = system_heap_attach,
+	.detach = system_heap_detach,
+	.map_dma_buf = system_heap_map_dma_buf,
+	.unmap_dma_buf = system_heap_unmap_dma_buf,
+	.begin_cpu_access = system_heap_dma_buf_begin_cpu_access,
+	.end_cpu_access = system_heap_dma_buf_end_cpu_access,
+	.mmap = system_heap_mmap,
+	.vmap = system_heap_vmap,
+	.vunmap = system_heap_vunmap,
+	.release = system_heap_dma_buf_release,
+};
+
+static struct page *alloc_largest_available(unsigned long size,
+					    unsigned int max_order)
+{
+	struct page *page;
+	int i;
+
+	for (i = 0; i < NUM_ORDERS; i++) {
+		if (size <  (PAGE_SIZE << orders[i]))
+			continue;
+		if (max_order < orders[i])
+			continue;
+		page = dmabuf_page_pool_alloc(pools[i]);
+		if (!page)
+			continue;
+		return page;
+	}
+	return NULL;
+}
+
+static struct dma_buf *system_heap_do_allocate(struct dma_heap *heap,
+					       unsigned long len,
+					       unsigned long fd_flags,
+					       unsigned long heap_flags,
+					       bool uncached)
+{
+	struct system_heap_buffer *buffer;
+	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
+	unsigned long size_remaining = len;
+	unsigned int max_order = orders[0];
+	struct dma_buf *dmabuf;
+	struct sg_table *table;
+	struct scatterlist *sg;
+	struct list_head pages;
+	struct page *page, *tmp_page;
+	int i, ret = -ENOMEM;
+
+	buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
+	if (!buffer)
+		return ERR_PTR(-ENOMEM);
+
+	INIT_LIST_HEAD(&buffer->attachments);
+	mutex_init(&buffer->lock);
+	buffer->heap = heap;
+	buffer->len = len;
+	buffer->uncached = uncached;
+
+	INIT_LIST_HEAD(&pages);
+	i = 0;
+	while (size_remaining > 0) {
+		/*
+		 * Avoid trying to allocate memory if the process
+		 * has been killed by SIGKILL
+		 */
+		if (fatal_signal_pending(current))
+			goto free_buffer;
+
+		page = alloc_largest_available(size_remaining, max_order);
+		if (!page)
+			goto free_buffer;
+
+		list_add_tail(&page->lru, &pages);
+		size_remaining -= page_size(page);
+		max_order = compound_order(page);
+		i++;
+	}
+
+	table = &buffer->sg_table;
+	if (sg_alloc_table(table, i, GFP_KERNEL))
+		goto free_buffer;
+
+	sg = table->sgl;
+	list_for_each_entry_safe(page, tmp_page, &pages, lru) {
+		sg_set_page(sg, page, page_size(page), 0);
+		sg = sg_next(sg);
+		list_del(&page->lru);
+	}
+
+	/* create the dmabuf */
+	exp_info.exp_name = dma_heap_get_name(heap);
+	exp_info.ops = &system_heap_buf_ops;
+	exp_info.size = buffer->len;
+	exp_info.flags = fd_flags;
+	exp_info.priv = buffer;
+	dmabuf = dma_buf_export(&exp_info);
+	if (IS_ERR(dmabuf)) {
+		ret = PTR_ERR(dmabuf);
+		goto free_pages;
+	}
+
+	/*
+	 * For uncached buffers, we need to initially flush cpu cache, since
+	 * the __GFP_ZERO on the allocation means the zeroing was done by the
+	 * cpu and thus it is likely cached. Map (and implicitly flush) and
+	 * unmap it now so we don't get corruption later on.
+	 */
+	if (buffer->uncached) {
+		dma_map_sgtable(dma_heap_get_dev(heap), table, DMA_BIDIRECTIONAL, 0);
+		dma_unmap_sgtable(dma_heap_get_dev(heap), table, DMA_BIDIRECTIONAL, 0);
+	}
+
+	return dmabuf;
+
+free_pages:
+	for_each_sgtable_sg(table, sg, i) {
+		struct page *p = sg_page(sg);
+
+		__free_pages(p, compound_order(p));
+	}
+	sg_free_table(table);
+free_buffer:
+	list_for_each_entry_safe(page, tmp_page, &pages, lru)
+		__free_pages(page, compound_order(page));
+	kfree(buffer);
+
+	return ERR_PTR(ret);
+}
+
+static struct dma_buf *system_heap_allocate(struct dma_heap *heap,
+					    unsigned long len,
+					    unsigned long fd_flags,
+					    unsigned long heap_flags)
+{
+	return system_heap_do_allocate(heap, len, fd_flags, heap_flags, false);
+}
+
+static const struct dma_heap_ops system_heap_ops = {
+	.allocate = system_heap_allocate,
+};
+
+static struct dma_buf *system_uncached_heap_allocate(struct dma_heap *heap,
+						     unsigned long len,
+						     unsigned long fd_flags,
+						     unsigned long heap_flags)
+{
+	return system_heap_do_allocate(heap, len, fd_flags, heap_flags, true);
+}
+
+/* Dummy function to be used until we can call coerce_mask_and_coherent */
+static struct dma_buf *system_uncached_heap_not_initialized(struct dma_heap *heap,
+							    unsigned long len,
+							    unsigned long fd_flags,
+							    unsigned long heap_flags)
+{
+	return ERR_PTR(-EBUSY);
+}
+
+static struct dma_heap_ops system_uncached_heap_ops = {
+	/* After system_heap_create is complete, we will swap this */
+	.allocate = system_uncached_heap_not_initialized,
+};
+
+static int system_heap_create(void)
+{
+	struct dma_heap_export_info exp_info;
+	int i;
+
+	for (i = 0; i < NUM_ORDERS; i++) {
+		pools[i] = dmabuf_page_pool_create(order_flags[i], orders[i]);
+
+		if (IS_ERR(pools[i])) {
+			int j;
+
+			pr_err("%s: page pool creation failed!\n", __func__);
+			for (j = 0; j < i; j++)
+				dmabuf_page_pool_destroy(pools[j]);
+			return PTR_ERR(pools[i]);
+		}
+	}
+
+	exp_info.name = "system";
+	exp_info.ops = &system_heap_ops;
+	exp_info.priv = NULL;
+
+	sys_heap = dma_heap_add(&exp_info);
+	if (IS_ERR(sys_heap))
+		return PTR_ERR(sys_heap);
+
+	exp_info.name = "system-uncached";
+	exp_info.ops = &system_uncached_heap_ops;
+	exp_info.priv = NULL;
+
+	sys_uncached_heap = dma_heap_add(&exp_info);
+	if (IS_ERR(sys_uncached_heap))
+		return PTR_ERR(sys_uncached_heap);
+
+	dma_coerce_mask_and_coherent(dma_heap_get_dev(sys_uncached_heap), DMA_BIT_MASK(64));
+	mb(); /* make sure we only set allocate after dma_mask is set */
+	system_uncached_heap_ops.allocate = system_uncached_heap_allocate;
+
+	return 0;
+}
+module_init(system_heap_create);
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/dma/sprd-dma.c b/drivers/dma/sprd-dma.c
index 8546ad0..d10e176 100644
--- a/drivers/dma/sprd-dma.c
+++ b/drivers/dma/sprd-dma.c
@@ -99,6 +99,7 @@
 /* DMA_CHN_WARP_* register definition */
 #define SPRD_DMA_HIGH_ADDR_MASK		GENMASK(31, 28)
 #define SPRD_DMA_LOW_ADDR_MASK		GENMASK(31, 0)
+#define SPRD_DMA_WRAP_ADDR_MASK		GENMASK(27, 0)
 #define SPRD_DMA_HIGH_ADDR_OFFSET	4
 
 /* SPRD_DMA_CHN_INTC register definition */
@@ -118,6 +119,8 @@
 #define SPRD_DMA_SWT_MODE_OFFSET	26
 #define SPRD_DMA_REQ_MODE_OFFSET	24
 #define SPRD_DMA_REQ_MODE_MASK		GENMASK(1, 0)
+#define SPRD_DMA_WRAP_SEL_DEST		BIT(23)
+#define SPRD_DMA_WRAP_EN		BIT(22)
 #define SPRD_DMA_FIX_SEL_OFFSET		21
 #define SPRD_DMA_FIX_EN_OFFSET		20
 #define SPRD_DMA_LLIST_END		BIT(19)
@@ -483,6 +486,28 @@ static int sprd_dma_set_2stage_config(struct sprd_dma_chn *schan)
 	return 0;
 }
 
+static void sprd_dma_set_pending(struct sprd_dma_chn *schan, bool enable)
+{
+	struct sprd_dma_dev *sdev = to_sprd_dma_dev(&schan->vc.chan);
+	u32 reg, val, req_id;
+
+	if (schan->dev_id == SPRD_DMA_SOFTWARE_UID)
+		return;
+
+	/* The DMA request id always starts from 0. */
+	req_id = schan->dev_id - 1;
+
+	if (req_id < 32) {
+		reg = SPRD_DMA_GLB_REQ_PEND0_EN;
+		val = BIT(req_id);
+	} else {
+		reg = SPRD_DMA_GLB_REQ_PEND1_EN;
+		val = BIT(req_id - 32);
+	}
+
+	sprd_dma_glb_update(sdev, reg, val, enable ? val : 0);
+}
+
 static void sprd_dma_set_chn_config(struct sprd_dma_chn *schan,
 				    struct sprd_dma_desc *sdesc)
 {
@@ -529,6 +554,7 @@ static void sprd_dma_start(struct sprd_dma_chn *schan)
 	 */
 	sprd_dma_set_chn_config(schan, schan->cur_desc);
 	sprd_dma_set_uid(schan);
+	sprd_dma_set_pending(schan, true);
 	sprd_dma_enable_chn(schan);
 
 	if (schan->dev_id == SPRD_DMA_SOFTWARE_UID &&
@@ -540,6 +566,7 @@ static void sprd_dma_start(struct sprd_dma_chn *schan)
 static void sprd_dma_stop(struct sprd_dma_chn *schan)
 {
 	sprd_dma_stop_and_disable(schan);
+	sprd_dma_set_pending(schan, false);
 	sprd_dma_unset_uid(schan);
 	sprd_dma_clear_int(schan);
 	schan->cur_desc = NULL;
@@ -804,6 +831,8 @@ static int sprd_dma_fill_desc(struct dma_chan *chan,
 	temp |= req_mode << SPRD_DMA_REQ_MODE_OFFSET;
 	temp |= fix_mode << SPRD_DMA_FIX_SEL_OFFSET;
 	temp |= fix_en << SPRD_DMA_FIX_EN_OFFSET;
+	temp |= schan->linklist.wrap_addr ?
+		SPRD_DMA_WRAP_EN | SPRD_DMA_WRAP_SEL_DEST : 0;
 	temp |= slave_cfg->src_maxburst & SPRD_DMA_FRG_LEN_MASK;
 	hw->frg_len = temp;
 
@@ -831,6 +860,12 @@ static int sprd_dma_fill_desc(struct dma_chan *chan,
 		hw->llist_ptr = lower_32_bits(llist_ptr);
 		hw->src_blk_step = (upper_32_bits(llist_ptr) << SPRD_DMA_LLIST_HIGH_SHIFT) &
 			SPRD_DMA_LLIST_HIGH_MASK;
+
+		if (schan->linklist.wrap_addr) {
+			hw->wrap_ptr |= schan->linklist.wrap_addr &
+				SPRD_DMA_WRAP_ADDR_MASK;
+			hw->wrap_to |= dst & SPRD_DMA_WRAP_ADDR_MASK;
+		}
 	} else {
 		hw->llist_ptr = 0;
 		hw->src_blk_step = 0;
@@ -939,9 +974,11 @@ sprd_dma_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
 
 		schan->linklist.phy_addr = ll_cfg->phy_addr;
 		schan->linklist.virt_addr = ll_cfg->virt_addr;
+		schan->linklist.wrap_addr = ll_cfg->wrap_addr;
 	} else {
 		schan->linklist.phy_addr = 0;
 		schan->linklist.virt_addr = 0;
+		schan->linklist.wrap_addr = 0;
 	}
 
 	/*
diff --git a/drivers/extcon/extcon.c b/drivers/extcon/extcon.c
index e055893..2dfbfec 100644
--- a/drivers/extcon/extcon.c
+++ b/drivers/extcon/extcon.c
@@ -1406,6 +1406,7 @@ const char *extcon_get_edev_name(struct extcon_dev *edev)
 {
 	return !edev ? NULL : edev->name;
 }
+EXPORT_SYMBOL_GPL(extcon_get_edev_name);
 
 static int __init extcon_class_init(void)
 {
diff --git a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig
index e40a77b..1bc0e96 100644
--- a/drivers/firmware/Kconfig
+++ b/drivers/firmware/Kconfig
@@ -235,16 +235,18 @@
 	  Say Y here if you want Intel RSU support.
 
 config QCOM_SCM
-	bool
+	tristate "Qcom SCM driver"
 	depends on ARM || ARM64
 	select RESET_CONTROLLER
 
 config QCOM_SCM_32
-	def_bool y
+	tristate
+	default y
 	depends on QCOM_SCM && ARM
 
 config QCOM_SCM_64
-	def_bool y
+	tristate
+	default y
 	depends on QCOM_SCM && ARM64
 
 config QCOM_SCM_DOWNLOAD_MODE_DEFAULT
diff --git a/drivers/firmware/Makefile b/drivers/firmware/Makefile
index 3fcb919..64f5391e 100644
--- a/drivers/firmware/Makefile
+++ b/drivers/firmware/Makefile
@@ -17,9 +17,11 @@
 obj-$(CONFIG_FIRMWARE_MEMMAP)	+= memmap.o
 obj-$(CONFIG_RASPBERRYPI_FIRMWARE) += raspberrypi.o
 obj-$(CONFIG_FW_CFG_SYSFS)	+= qemu_fw_cfg.o
-obj-$(CONFIG_QCOM_SCM)		+= qcom_scm.o
-obj-$(CONFIG_QCOM_SCM_64)	+= qcom_scm-64.o
-obj-$(CONFIG_QCOM_SCM_32)	+= qcom_scm-32.o
+obj-$(CONFIG_QCOM_SCM_64)	+= qcom-scm-64.o
+obj-$(CONFIG_QCOM_SCM_32)	+= qcom-scm-32.o
+qcom-scm-64-objs += qcom_scm.o qcom_scm-64.o
+qcom-scm-32-objs += qcom_scm.o qcom_scm-32.o
+
 CFLAGS_qcom_scm-32.o :=$(call as-instr,.arch armv7-a\n.arch_extension sec,-DREQUIRES_SEC=1) -march=armv7-a
 obj-$(CONFIG_TI_SCI_PROTOCOL)	+= ti_sci.o
 obj-$(CONFIG_TRUSTED_FOUNDATIONS) += trusted_foundations.o
diff --git a/drivers/firmware/efi/libstub/Makefile b/drivers/firmware/efi/libstub/Makefile
index 8c5b552..3f71cde 100644
--- a/drivers/firmware/efi/libstub/Makefile
+++ b/drivers/firmware/efi/libstub/Makefile
@@ -31,6 +31,9 @@
 				   $(call cc-option,-fno-addrsig) \
 				   -D__DISABLE_EXPORTS
 
+# disable LTO
+KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_LTO), $(KBUILD_CFLAGS))
+
 GCOV_PROFILE			:= n
 KASAN_SANITIZE			:= n
 UBSAN_SANITIZE			:= n
diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c
index 84f4ff3..a41c6ba 100644
--- a/drivers/firmware/psci/psci.c
+++ b/drivers/firmware/psci/psci.c
@@ -250,7 +250,8 @@ static int get_set_conduit_method(struct device_node *np)
 	return 0;
 }
 
-static void psci_sys_reset(enum reboot_mode reboot_mode, const char *cmd)
+static int psci_sys_reset(struct notifier_block *nb, unsigned long action,
+			  void *data)
 {
 	if ((reboot_mode == REBOOT_WARM || reboot_mode == REBOOT_SOFT) &&
 	    psci_system_reset2_supported) {
@@ -263,8 +264,15 @@ static void psci_sys_reset(enum reboot_mode reboot_mode, const char *cmd)
 	} else {
 		invoke_psci_fn(PSCI_0_2_FN_SYSTEM_RESET, 0, 0, 0);
 	}
+
+	return NOTIFY_DONE;
 }
 
+static struct notifier_block psci_sys_reset_nb = {
+	.notifier_call = psci_sys_reset,
+	.priority = 129,
+};
+
 static void psci_sys_poweroff(void)
 {
 	invoke_psci_fn(PSCI_0_2_FN_SYSTEM_OFF, 0, 0, 0);
@@ -431,7 +439,7 @@ static void __init psci_0_2_set_functions(void)
 
 	psci_ops.migrate_info_type = psci_migrate_info_type;
 
-	arm_pm_restart = psci_sys_reset;
+	register_restart_handler(&psci_sys_reset_nb);
 
 	pm_power_off = psci_sys_poweroff;
 }
diff --git a/drivers/firmware/qcom_scm-32.c b/drivers/firmware/qcom_scm-32.c
index 215061c..91280b1 100644
--- a/drivers/firmware/qcom_scm-32.c
+++ b/drivers/firmware/qcom_scm-32.c
@@ -548,6 +548,20 @@ int __qcom_scm_pas_mss_reset(struct device *dev, bool reset)
 	return ret ? : le32_to_cpu(out);
 }
 
+int __qcom_scm_ice_invalidate_key(struct device *dev, u32 index)
+{
+	/* Untested on 32-bit, so disabled for now. */
+	return -ENODEV;
+}
+
+int __qcom_scm_ice_set_key(struct device *dev, u32 index, dma_addr_t key_phys,
+			   u32 key_size, enum qcom_scm_ice_cipher cipher,
+			   u32 data_unit_size)
+{
+	/* Untested on 32-bit, so disabled for now. */
+	return -ENODEV;
+}
+
 int __qcom_scm_set_dload_mode(struct device *dev, bool enable)
 {
 	return qcom_scm_call_atomic2(QCOM_SCM_SVC_BOOT, QCOM_SCM_SET_DLOAD_MODE,
@@ -614,3 +628,8 @@ int __qcom_scm_io_writel(struct device *dev, phys_addr_t addr, unsigned int val)
 	return qcom_scm_call_atomic2(QCOM_SCM_SVC_IO, QCOM_SCM_IO_WRITE,
 				     addr, val);
 }
+
+int __qcom_scm_qsmmu500_wait_safe_toggle(struct device *dev, bool enable)
+{
+	return -ENODEV;
+}
diff --git a/drivers/firmware/qcom_scm-64.c b/drivers/firmware/qcom_scm-64.c
index 25e0f60c..486dab4 100644
--- a/drivers/firmware/qcom_scm-64.c
+++ b/drivers/firmware/qcom_scm-64.c
@@ -62,32 +62,72 @@ static DEFINE_MUTEX(qcom_scm_lock);
 #define FIRST_EXT_ARG_IDX 3
 #define N_REGISTER_ARGS (MAX_QCOM_SCM_ARGS - N_EXT_QCOM_SCM_ARGS + 1)
 
-/**
- * qcom_scm_call() - Invoke a syscall in the secure world
- * @dev:	device
- * @svc_id:	service identifier
- * @cmd_id:	command identifier
- * @desc:	Descriptor structure containing arguments and return values
- *
- * Sends a command to the SCM and waits for the command to finish processing.
- * This should *only* be called in pre-emptible context.
-*/
-static int qcom_scm_call(struct device *dev, u32 svc_id, u32 cmd_id,
-			 const struct qcom_scm_desc *desc,
-			 struct arm_smccc_res *res)
+static void __qcom_scm_call_do(const struct qcom_scm_desc *desc,
+			       struct arm_smccc_res *res, u32 fn_id,
+			       u64 x5, u32 type)
+{
+	u64 cmd;
+	struct arm_smccc_quirk quirk = { .id = ARM_SMCCC_QUIRK_QCOM_A6 };
+
+	cmd = ARM_SMCCC_CALL_VAL(type, qcom_smccc_convention,
+				 ARM_SMCCC_OWNER_SIP, fn_id);
+
+	quirk.state.a6 = 0;
+
+	do {
+		arm_smccc_smc_quirk(cmd, desc->arginfo, desc->args[0],
+				    desc->args[1], desc->args[2], x5,
+				    quirk.state.a6, 0, res, &quirk);
+
+		if (res->a0 == QCOM_SCM_INTERRUPTED)
+			cmd = res->a0;
+
+	} while (res->a0 == QCOM_SCM_INTERRUPTED);
+}
+
+static void qcom_scm_call_do(const struct qcom_scm_desc *desc,
+			     struct arm_smccc_res *res, u32 fn_id,
+			     u64 x5, bool atomic)
+{
+	int retry_count = 0;
+
+	if (atomic) {
+		__qcom_scm_call_do(desc, res, fn_id, x5, ARM_SMCCC_FAST_CALL);
+		return;
+	}
+
+	do {
+		mutex_lock(&qcom_scm_lock);
+
+		__qcom_scm_call_do(desc, res, fn_id, x5,
+				   ARM_SMCCC_STD_CALL);
+
+		mutex_unlock(&qcom_scm_lock);
+
+		if (res->a0 == QCOM_SCM_V2_EBUSY) {
+			if (retry_count++ > QCOM_SCM_EBUSY_MAX_RETRY)
+				break;
+			msleep(QCOM_SCM_EBUSY_WAIT_MS);
+		}
+	}  while (res->a0 == QCOM_SCM_V2_EBUSY);
+}
+
+static int ___qcom_scm_call(struct device *dev, u32 svc_id, u32 cmd_id,
+			    const struct qcom_scm_desc *desc,
+			    struct arm_smccc_res *res, bool atomic)
 {
 	int arglen = desc->arginfo & 0xf;
-	int retry_count = 0, i;
+	int i;
 	u32 fn_id = QCOM_SCM_FNID(svc_id, cmd_id);
-	u64 cmd, x5 = desc->args[FIRST_EXT_ARG_IDX];
+	u64 x5 = desc->args[FIRST_EXT_ARG_IDX];
 	dma_addr_t args_phys = 0;
 	void *args_virt = NULL;
 	size_t alloc_len;
-	struct arm_smccc_quirk quirk = {.id = ARM_SMCCC_QUIRK_QCOM_A6};
+	gfp_t flag = atomic ? GFP_ATOMIC : GFP_KERNEL;
 
 	if (unlikely(arglen > N_REGISTER_ARGS)) {
 		alloc_len = N_EXT_QCOM_SCM_ARGS * sizeof(u64);
-		args_virt = kzalloc(PAGE_ALIGN(alloc_len), GFP_KERNEL);
+		args_virt = kzalloc(PAGE_ALIGN(alloc_len), flag);
 
 		if (!args_virt)
 			return -ENOMEM;
@@ -117,33 +157,7 @@ static int qcom_scm_call(struct device *dev, u32 svc_id, u32 cmd_id,
 		x5 = args_phys;
 	}
 
-	do {
-		mutex_lock(&qcom_scm_lock);
-
-		cmd = ARM_SMCCC_CALL_VAL(ARM_SMCCC_STD_CALL,
-					 qcom_smccc_convention,
-					 ARM_SMCCC_OWNER_SIP, fn_id);
-
-		quirk.state.a6 = 0;
-
-		do {
-			arm_smccc_smc_quirk(cmd, desc->arginfo, desc->args[0],
-				      desc->args[1], desc->args[2], x5,
-				      quirk.state.a6, 0, res, &quirk);
-
-			if (res->a0 == QCOM_SCM_INTERRUPTED)
-				cmd = res->a0;
-
-		} while (res->a0 == QCOM_SCM_INTERRUPTED);
-
-		mutex_unlock(&qcom_scm_lock);
-
-		if (res->a0 == QCOM_SCM_V2_EBUSY) {
-			if (retry_count++ > QCOM_SCM_EBUSY_MAX_RETRY)
-				break;
-			msleep(QCOM_SCM_EBUSY_WAIT_MS);
-		}
-	}  while (res->a0 == QCOM_SCM_V2_EBUSY);
+	qcom_scm_call_do(desc, res, fn_id, x5, atomic);
 
 	if (args_virt) {
 		dma_unmap_single(dev, args_phys, alloc_len, DMA_TO_DEVICE);
@@ -157,6 +171,42 @@ static int qcom_scm_call(struct device *dev, u32 svc_id, u32 cmd_id,
 }
 
 /**
+ * qcom_scm_call() - Invoke a syscall in the secure world
+ * @dev:	device
+ * @svc_id:	service identifier
+ * @cmd_id:	command identifier
+ * @desc:	Descriptor structure containing arguments and return values
+ *
+ * Sends a command to the SCM and waits for the command to finish processing.
+ * This should *only* be called in pre-emptible context.
+ */
+static int qcom_scm_call(struct device *dev, u32 svc_id, u32 cmd_id,
+			 const struct qcom_scm_desc *desc,
+			 struct arm_smccc_res *res)
+{
+	might_sleep();
+	return ___qcom_scm_call(dev, svc_id, cmd_id, desc, res, false);
+}
+
+/**
+ * qcom_scm_call_atomic() - atomic variation of qcom_scm_call()
+ * @dev:	device
+ * @svc_id:	service identifier
+ * @cmd_id:	command identifier
+ * @desc:	Descriptor structure containing arguments and return values
+ * @res:	Structure containing results from SMC/HVC call
+ *
+ * Sends a command to the SCM and waits for the command to finish processing.
+ * This can be called in atomic context.
+ */
+static int qcom_scm_call_atomic(struct device *dev, u32 svc_id, u32 cmd_id,
+				const struct qcom_scm_desc *desc,
+				struct arm_smccc_res *res)
+{
+	return ___qcom_scm_call(dev, svc_id, cmd_id, desc, res, true);
+}
+
+/**
  * qcom_scm_set_cold_boot_addr() - Set the cold boot address for cpus
  * @entry: Entry point function for the cpus
  * @cpus: The cpumask of cpus that will use the entry point
@@ -358,6 +408,38 @@ int __qcom_scm_pas_mss_reset(struct device *dev, bool reset)
 	return ret ? : res.a1;
 }
 
+int __qcom_scm_ice_invalidate_key(struct device *dev, u32 index)
+{
+	struct qcom_scm_desc desc = {
+		.arginfo = QCOM_SCM_ARGS(1),
+		.args[0] = index,
+	};
+	struct arm_smccc_res res;
+
+	return qcom_scm_call(dev, QCOM_SCM_SVC_ES,
+			     QCOM_SCM_ES_INVALIDATE_ICE_KEY, &desc, &res);
+}
+
+int __qcom_scm_ice_set_key(struct device *dev, u32 index, dma_addr_t key_phys,
+			   u32 key_size, enum qcom_scm_ice_cipher cipher,
+			   u32 data_unit_size)
+{
+	struct qcom_scm_desc desc = {
+		.arginfo = QCOM_SCM_ARGS(5, QCOM_SCM_VAL, QCOM_SCM_RW,
+					 QCOM_SCM_VAL, QCOM_SCM_VAL,
+					 QCOM_SCM_VAL),
+		.args[0] = index,
+		.args[1] = key_phys,
+		.args[2] = key_size,
+		.args[3] = cipher,
+		.args[4] = data_unit_size,
+	};
+	struct arm_smccc_res res;
+
+	return qcom_scm_call(dev, QCOM_SCM_SVC_ES,
+			     QCOM_SCM_ES_CONFIG_SET_ICE_KEY, &desc, &res);
+}
+
 int __qcom_scm_set_remote_state(struct device *dev, u32 state, u32 id)
 {
 	struct qcom_scm_desc desc = {0};
@@ -502,3 +584,16 @@ int __qcom_scm_io_writel(struct device *dev, phys_addr_t addr, unsigned int val)
 	return qcom_scm_call(dev, QCOM_SCM_SVC_IO, QCOM_SCM_IO_WRITE,
 			     &desc, &res);
 }
+
+int __qcom_scm_qsmmu500_wait_safe_toggle(struct device *dev, bool en)
+{
+	struct qcom_scm_desc desc = {0};
+	struct arm_smccc_res res;
+
+	desc.args[0] = QCOM_SCM_CONFIG_ERRATA1_CLIENT_ALL;
+	desc.args[1] = en;
+	desc.arginfo = QCOM_SCM_ARGS(2);
+
+	return qcom_scm_call_atomic(dev, QCOM_SCM_SVC_SMMU_PROGRAM,
+				    QCOM_SCM_CONFIG_ERRATA1, &desc, &res);
+}
diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
index b9fdc20..540c404 100644
--- a/drivers/firmware/qcom_scm.c
+++ b/drivers/firmware/qcom_scm.c
@@ -344,6 +344,12 @@ int qcom_scm_iommu_secure_ptbl_init(u64 addr, u32 size, u32 spare)
 }
 EXPORT_SYMBOL(qcom_scm_iommu_secure_ptbl_init);
 
+int qcom_scm_qsmmu500_wait_safe_toggle(bool en)
+{
+	return __qcom_scm_qsmmu500_wait_safe_toggle(__scm->dev, en);
+}
+EXPORT_SYMBOL(qcom_scm_qsmmu500_wait_safe_toggle);
+
 int qcom_scm_io_readl(phys_addr_t addr, unsigned int *val)
 {
 	return __qcom_scm_io_readl(__scm->dev, addr, val);
@@ -499,6 +505,95 @@ int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t mem_sz,
 }
 EXPORT_SYMBOL(qcom_scm_assign_mem);
 
+/**
+ * qcom_scm_ice_available() - Is the ICE key programming interface available?
+ *
+ * Return: true iff the SCM calls wrapped by qcom_scm_ice_invalidate_key() and
+ *	   qcom_scm_ice_set_key() are available.
+ */
+bool qcom_scm_ice_available(void)
+{
+	if (IS_ENABLED(CONFIG_ARM)) /* Not implemented/tested on 32-bit yet. */
+		return false;
+	return __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_ES,
+					    QCOM_SCM_ES_INVALIDATE_ICE_KEY) &&
+		__qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_ES,
+					     QCOM_SCM_ES_CONFIG_SET_ICE_KEY);
+}
+EXPORT_SYMBOL(qcom_scm_ice_available);
+
+/**
+ * qcom_scm_ice_invalidate_key() - Invalidate an inline encryption key
+ * @index: the keyslot to invalidate
+ *
+ * The UFSHCI and eMMC standards define a standard way to do this, but it
+ * doesn't work on these SoCs; only this SCM call does.
+ *
+ * It is assumed that the SoC has only one ICE instance being used, as this SCM
+ * call doesn't specify which ICE instance the keyslot belongs to.
+ *
+ * Return: 0 on success; -errno on failure.
+ */
+int qcom_scm_ice_invalidate_key(u32 index)
+{
+	return __qcom_scm_ice_invalidate_key(__scm->dev, index);
+}
+EXPORT_SYMBOL(qcom_scm_ice_invalidate_key);
+
+/**
+ * qcom_scm_ice_set_key() - Set an inline encryption key
+ * @index: the keyslot into which to set the key
+ * @key: the key to program
+ * @key_size: the size of the key in bytes
+ * @cipher: the encryption algorithm the key is for
+ * @data_unit_size: the encryption data unit size, i.e. the size of each
+ *		    individual plaintext and ciphertext.  Given in 512-byte
+ *		    units, e.g. 1 = 512 bytes, 8 = 4096 bytes, etc.
+ *
+ * Program a key into a keyslot of Qualcomm ICE (Inline Crypto Engine), where it
+ * can then be used to encrypt/decrypt UFS or eMMC I/O requests inline.
+ *
+ * The UFSHCI and eMMC standards define a standard way to do this, but it
+ * doesn't work on these SoCs; only this SCM call does.
+ *
+ * It is assumed that the SoC has only one ICE instance being used, as this SCM
+ * call doesn't specify which ICE instance the keyslot belongs to.
+ *
+ * Return: 0 on success; -errno on failure.
+ */
+int qcom_scm_ice_set_key(u32 index, const u8 *key, u32 key_size,
+			 enum qcom_scm_ice_cipher cipher, u32 data_unit_size)
+{
+	void *keybuf;
+	dma_addr_t key_phys;
+	int ret;
+
+	/*
+	 * 'key' may point to vmalloc()'ed memory, but we need to pass a
+	 * physical address that's been properly flushed.  The sanctioned way to
+	 * do this is by using the DMA API.  But as is best practice for crypto
+	 * keys, we also must wipe the key after use.  This makes kmemdup() +
+	 * dma_map_single() not clearly correct, since the DMA API can use
+	 * bounce buffers.  Instead, just use dma_alloc_coherent().  Programming
+	 * keys is normally rare and thus not performance-critical.
+	 */
+
+	keybuf = dma_alloc_coherent(__scm->dev, key_size, &key_phys,
+				    GFP_KERNEL);
+	if (!keybuf)
+		return -ENOMEM;
+	memcpy(keybuf, key, key_size);
+
+	ret = __qcom_scm_ice_set_key(__scm->dev, index, key_phys, key_size,
+				     cipher, data_unit_size);
+
+	memzero_explicit(keybuf, key_size);
+
+	dma_free_coherent(__scm->dev, key_size, keybuf, key_phys);
+	return ret;
+}
+EXPORT_SYMBOL(qcom_scm_ice_set_key);
+
 static int qcom_scm_probe(struct platform_device *pdev)
 {
 	struct qcom_scm *scm;
@@ -612,6 +707,7 @@ static const struct of_device_id qcom_scm_dt_match[] = {
 	{ .compatible = "qcom,scm" },
 	{}
 };
+MODULE_DEVICE_TABLE(of, qcom_scm_dt_match);
 
 static struct platform_driver qcom_scm_driver = {
 	.driver = {
@@ -627,3 +723,6 @@ static int __init qcom_scm_init(void)
 	return platform_driver_register(&qcom_scm_driver);
 }
 subsys_initcall(qcom_scm_init);
+
+MODULE_DESCRIPTION("Qualcomm Technologies, Inc. SCM driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/firmware/qcom_scm.h b/drivers/firmware/qcom_scm.h
index 99506bd..3d2acee 100644
--- a/drivers/firmware/qcom_scm.h
+++ b/drivers/firmware/qcom_scm.h
@@ -58,6 +58,15 @@ extern int  __qcom_scm_pas_auth_and_reset(struct device *dev, u32 peripheral);
 extern int  __qcom_scm_pas_shutdown(struct device *dev, u32 peripheral);
 extern int  __qcom_scm_pas_mss_reset(struct device *dev, bool reset);
 
+#define QCOM_SCM_SVC_ES			0x10	/* Enterprise Security */
+#define QCOM_SCM_ES_INVALIDATE_ICE_KEY	0x03
+#define QCOM_SCM_ES_CONFIG_SET_ICE_KEY	0x04
+extern int __qcom_scm_ice_invalidate_key(struct device *dev, u32 index);
+extern int __qcom_scm_ice_set_key(struct device *dev, u32 index,
+				  dma_addr_t key_phys,
+				  u32 key_size, enum qcom_scm_ice_cipher cipher,
+				  u32 data_unit_size);
+
 /* common error codes */
 #define QCOM_SCM_V2_EBUSY	-12
 #define QCOM_SCM_ENOMEM		-5
@@ -91,10 +100,15 @@ extern int __qcom_scm_restore_sec_cfg(struct device *dev, u32 device_id,
 				      u32 spare);
 #define QCOM_SCM_IOMMU_SECURE_PTBL_SIZE	3
 #define QCOM_SCM_IOMMU_SECURE_PTBL_INIT	4
+#define QCOM_SCM_SVC_SMMU_PROGRAM	0x15
+#define QCOM_SCM_CONFIG_ERRATA1		0x3
+#define QCOM_SCM_CONFIG_ERRATA1_CLIENT_ALL	0x2
 extern int __qcom_scm_iommu_secure_ptbl_size(struct device *dev, u32 spare,
 					     size_t *size);
 extern int __qcom_scm_iommu_secure_ptbl_init(struct device *dev, u64 addr,
 					     u32 size, u32 spare);
+extern int __qcom_scm_qsmmu500_wait_safe_toggle(struct device *dev,
+						bool enable);
 #define QCOM_MEM_PROT_ASSIGN_ID	0x16
 extern int  __qcom_scm_assign_mem(struct device *dev,
 				  phys_addr_t mem_region, size_t mem_sz,
diff --git a/drivers/gnss/Kconfig b/drivers/gnss/Kconfig
index a0404ce..81f665d 100644
--- a/drivers/gnss/Kconfig
+++ b/drivers/gnss/Kconfig
@@ -54,4 +54,19 @@
 
 	  If unsure, say N.
 
+config GNSS_CMDLINE_SERIAL
+	tristate "Command line test driver for GNSS"
+	depends on SERIAL_DEV_BUS
+	select GNSS_SERIAL
+	---help---
+	  Say Y here if you want to test the GNSS subsystem but do not have a
+	  way to communicate a binding through firmware such as DT or ACPI.
+	  The correct serdev device and protocol type must be specified on
+	  the module command line.
+
+	  To compile this driver as a module, choose M here: the module will
+	  be called gnss-cmdline.
+
+	  If unsure, say N.
+
 endif # GNSS
diff --git a/drivers/gnss/Makefile b/drivers/gnss/Makefile
index 451f114..1d27659 100644
--- a/drivers/gnss/Makefile
+++ b/drivers/gnss/Makefile
@@ -17,3 +17,6 @@
 
 obj-$(CONFIG_GNSS_UBX_SERIAL)		+= gnss-ubx.o
 gnss-ubx-y := ubx.o
+
+obj-$(CONFIG_GNSS_CMDLINE_SERIAL)	+= gnss-cmdline.o
+gnss-cmdline-y := cmdline.o
diff --git a/drivers/gnss/cmdline.c b/drivers/gnss/cmdline.c
new file mode 100644
index 0000000..3e1d2463
--- /dev/null
+++ b/drivers/gnss/cmdline.c
@@ -0,0 +1,139 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Test driver for GNSS. This driver requires the serdev binding and protocol
+ * type to be specified on the module command line.
+ *
+ * Copyright 2019 Google LLC
+ */
+
+#include <linux/device.h>
+#include <linux/gnss.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/serdev.h>
+#include <linux/slab.h>
+#include <linux/string.h>
+
+#include "serial.h"
+
+#define GNSS_CMDLINE_MODULE_NAME "gnss-cmdline"
+
+#define gnss_cmdline_err(...) \
+	pr_err(GNSS_CMDLINE_MODULE_NAME ": " __VA_ARGS__)
+
+static char *serdev;
+module_param(serdev, charp, 0644);
+MODULE_PARM_DESC(serdev, "serial device to wrap");
+
+static int type;
+module_param(type, int, 0644);
+MODULE_PARM_DESC(serdev, "GNSS protocol type (see 'enum gnss_type')");
+
+static struct serdev_device *serdev_device;
+
+static int name_match(struct device *dev, void *data)
+{
+	return strstr(dev_name(dev), data) != NULL;
+}
+
+static int __init gnss_cmdline_init(void)
+{
+	struct device *serial_dev, *port_dev, *serdev_dev;
+	char *driver_name, *port_name, *serdev_name;
+	char *serdev_dup, *serdev_dup_sep;
+	struct gnss_serial *gserial;
+	int err = -ENODEV;
+
+	/* User did not set the serdev module parameter */
+	if (!serdev)
+		return 0;
+
+	if (type < 0 || type >= GNSS_TYPE_COUNT) {
+		gnss_cmdline_err("invalid gnss type '%d'\n", type);
+		return -EINVAL;
+	}
+
+	serdev_dup = serdev_dup_sep = kstrdup(serdev, GFP_KERNEL);
+	if (!serdev_dup)
+		return -ENOMEM;
+
+	driver_name = strsep(&serdev_dup_sep, "/");
+	if (!driver_name) {
+		gnss_cmdline_err("driver name missing\n");
+		goto err_free_serdev_dup;
+	}
+
+	port_name = strsep(&serdev_dup_sep, "/");
+	if (!port_name) {
+		gnss_cmdline_err("port name missing\n");
+		goto err_free_serdev_dup;
+	}
+
+	serdev_name = strsep(&serdev_dup_sep, "/");
+	if (!serdev_name) {
+		gnss_cmdline_err("serdev name missing\n");
+		goto err_free_serdev_dup;
+	}
+
+	/* Find the driver device instance (e.g. serial8250) */
+	serial_dev = bus_find_device_by_name(&platform_bus_type,
+					     NULL, driver_name);
+	if (!serial_dev) {
+		gnss_cmdline_err("no device '%s'\n", driver_name);
+		goto err_free_serdev_dup;
+	}
+
+	/* Find the port device instance (e.g. serial0) */
+	port_dev = device_find_child(serial_dev, port_name, name_match);
+	if (!port_dev) {
+		gnss_cmdline_err("no port '%s'\n", port_name);
+		goto err_free_serdev_dup;
+	}
+
+	/* Find the serdev device instance (e.g. serial0-0) */
+	serdev_dev = device_find_child(port_dev, serdev_name, name_match);
+	if (!serdev_dev) {
+		gnss_cmdline_err("no serdev '%s'\n", serdev_name);
+		goto err_free_serdev_dup;
+	}
+
+	gserial = gnss_serial_allocate(to_serdev_device(serdev_dev), 0);
+	if (IS_ERR(gserial)) {
+		err = PTR_ERR(gserial);
+		goto err_free_serdev_dup;
+	}
+
+	gserial->gdev->type = type;
+
+	err = gnss_serial_register(gserial);
+	if (err) {
+		gnss_serial_free(gserial);
+		goto err_free_serdev_dup;
+	}
+
+	serdev_device = to_serdev_device(serdev_dev);
+	err = 0;
+err_free_serdev_dup:
+	kfree(serdev_dup);
+	return err;
+}
+
+static void __exit gnss_cmdline_exit(void)
+{
+	struct gnss_serial *gserial;
+
+	if (!serdev_device)
+		return;
+
+	gserial = serdev_device_get_drvdata(serdev_device);
+
+	gnss_serial_deregister(gserial);
+	gnss_serial_free(gserial);
+}
+
+module_init(gnss_cmdline_init);
+module_exit(gnss_cmdline_exit);
+
+MODULE_AUTHOR("Alistair Delva <adelva@google.com>");
+MODULE_DESCRIPTION("GNSS command line driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/gpu/Makefile b/drivers/gpu/Makefile
index f17d01f..835c883 100644
--- a/drivers/gpu/Makefile
+++ b/drivers/gpu/Makefile
@@ -5,3 +5,4 @@
 obj-$(CONFIG_TEGRA_HOST1X)	+= host1x/
 obj-y			+= drm/ vga/
 obj-$(CONFIG_IMX_IPUV3_CORE)	+= ipu-v3/
+obj-$(CONFIG_TRACE_GPU_MEM)		+= trace/
diff --git a/drivers/gpu/drm/bochs/bochs_kms.c b/drivers/gpu/drm/bochs/bochs_kms.c
index fa50ab2..02a9c1e 100644
--- a/drivers/gpu/drm/bochs/bochs_kms.c
+++ b/drivers/gpu/drm/bochs/bochs_kms.c
@@ -194,7 +194,6 @@ int bochs_kms_init(struct bochs_device *bochs)
 	bochs->dev->mode_config.preferred_depth = 24;
 	bochs->dev->mode_config.prefer_shadow = 0;
 	bochs->dev->mode_config.prefer_shadow_fbdev = 1;
-	bochs->dev->mode_config.fbdev_use_iomem = true;
 	bochs->dev->mode_config.quirk_addfb_prefer_host_byte_order = true;
 
 	bochs->dev->mode_config.funcs = &bochs_mode_funcs;
diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig
index 1cc9f50..441350f 100644
--- a/drivers/gpu/drm/bridge/Kconfig
+++ b/drivers/gpu/drm/bridge/Kconfig
@@ -45,6 +45,14 @@
 	  Support for non-programmable RGB to VGA DAC bridges, such as ADI
 	  ADV7123, TI THS8134 and THS8135 or passive resistor ladder DACs.
 
+config DRM_LONTIUM_LT9611
+	tristate "Lontium LT9611 DSI/HDMI bridge"
+	depends on OF
+	select DRM_PANEL_BRIDGE
+	select DRM_KMS_HELPER
+	help
+	  Lontium LT9611 DSI/HDMI bridge chip driver.
+
 config DRM_LVDS_ENCODER
 	tristate "Transparent parallel to LVDS encoder support"
 	depends on OF
diff --git a/drivers/gpu/drm/bridge/Makefile b/drivers/gpu/drm/bridge/Makefile
index 4934fcf..8b1d176 100644
--- a/drivers/gpu/drm/bridge/Makefile
+++ b/drivers/gpu/drm/bridge/Makefile
@@ -2,6 +2,7 @@
 obj-$(CONFIG_DRM_ANALOGIX_ANX78XX) += analogix-anx78xx.o
 obj-$(CONFIG_DRM_CDNS_DSI) += cdns-dsi.o
 obj-$(CONFIG_DRM_DUMB_VGA_DAC) += dumb-vga-dac.o
+obj-$(CONFIG_DRM_LONTIUM_LT9611) += lt9611.o
 obj-$(CONFIG_DRM_LVDS_ENCODER) += lvds-encoder.o
 obj-$(CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW) += megachips-stdpxxxx-ge-b850v3-fw.o
 obj-$(CONFIG_DRM_NXP_PTN3460) += nxp-ptn3460.o
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
index 9e13e46..f9e07b4 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
@@ -356,6 +356,9 @@ static void __adv7511_power_on(struct adv7511 *adv7511)
 	regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2,
 			   ADV7511_REG_POWER2_HPD_SRC_MASK,
 			   ADV7511_REG_POWER2_HPD_SRC_NONE);
+
+	/* HACK: If we don't delay here edid probing doesn't work properly */
+	msleep(200);
 }
 
 static void adv7511_power_on(struct adv7511 *adv7511)
diff --git a/drivers/gpu/drm/bridge/lt9611.c b/drivers/gpu/drm/bridge/lt9611.c
new file mode 100644
index 0000000..5ee6dbf
--- /dev/null
+++ b/drivers/gpu/drm/bridge/lt9611.c
@@ -0,0 +1,1140 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2019. Linaro Ltd
+ */
+
+#define DEBUG
+
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/device.h>
+#include <linux/platform_device.h>
+#include <linux/fs.h>
+#include <linux/delay.h>
+#include <linux/i2c.h>
+#include <linux/gpio/consumer.h>
+#include <linux/regmap.h>
+#include <linux/interrupt.h>
+#include <linux/component.h>
+#include <linux/of_gpio.h>
+#include <linux/of_graph.h>
+#include <linux/of_irq.h>
+#include <linux/regulator/consumer.h>
+#include <drm/drm_probe_helper.h>
+#include <linux/hdmi.h>
+#include <drm/drm_atomic.h>
+#include <drm/drm_atomic_helper.h>
+#include <drm/drm_edid.h>
+#include <drm/drm_mipi_dsi.h>
+#include <drm/drm_bridge.h>
+#include <drm/drm_print.h>
+
+#define EDID_SEG_SIZE 256
+
+#define LT9611_4LANES	0
+
+struct lt9611 {
+	struct device *dev;
+	struct drm_bridge bridge;
+	struct drm_connector connector;
+
+	struct regmap *regmap;
+
+	struct device_node *dsi0_node;
+	struct device_node *dsi1_node;
+	struct mipi_dsi_device *dsi0;
+	struct mipi_dsi_device *dsi1;
+
+	bool ac_mode;
+
+	struct gpio_desc *reset_gpio;
+	struct gpio_desc *enable_gpio;
+
+	bool power_on;
+
+	struct regulator_bulk_data supplies[2];
+
+	struct i2c_client *client;
+
+	enum drm_connector_status status;
+
+	u8 edid_buf[EDID_SEG_SIZE];
+	u32 vic;
+};
+
+static const struct regmap_config lt9611_regmap_config = {
+	.reg_bits = 8,
+	.val_bits = 8,
+	.cache_type = REGCACHE_NONE,
+};
+
+struct lt9611_mode {
+	u16 hdisplay;
+	u16 vdisplay;
+	u8 fps;
+	u8 lanes;
+	u8 intfs;
+};
+
+static struct lt9611_mode lt9611_modes[] = {
+	{ 3840, 2160, 30, 4, 2 }, /* 3840x2160 24bit 30Hz 4Lane 2ports */
+	{ 1920, 1080, 60, 4, 1 }, /* 1080P 24bit 60Hz 4lane 1port */
+	{ 1920, 1080, 30, 3, 1 }, /* 1080P 24bit 30Hz 3lane 1port */
+	{ 1920, 1080, 24, 3, 1 },
+	{ 720, 480, 60, 4, 1 },
+	{ 720, 576, 50, 2, 1 },
+	{ 640, 480, 60, 2, 1 },
+};
+
+static struct lt9611 *bridge_to_lt9611(struct drm_bridge *bridge)
+{
+	return container_of(bridge, struct lt9611, bridge);
+}
+
+static struct lt9611 *connector_to_lt9611(struct drm_connector *connector)
+{
+	return container_of(connector, struct lt9611, connector);
+}
+
+static int lt9611_mipi_input_analog(struct lt9611 *lt9611)
+{
+	struct reg_sequence reg_cfg[] = {
+		{ 0xff, 0x81 },
+		{ 0x06, 0x40 }, /*port A rx current*/
+		{ 0x0a, 0xfe }, /*port A ldo voltage set*/
+		{ 0x0b, 0xbf }, /*enable port A lprx*/
+		{ 0x11, 0x40 }, /*port B rx current*/
+		{ 0x15, 0xfe }, /*port B ldo voltage set*/
+		{ 0x16, 0xbf }, /*enable port B lprx*/
+
+		{ 0x1c, 0x03 }, /*PortA clk lane no-LP mode*/
+		{ 0x20, 0x03 }, /*PortB clk lane with-LP mode*/
+	};
+
+	regmap_multi_reg_write(lt9611->regmap, reg_cfg, ARRAY_SIZE(reg_cfg));
+
+	return 0;
+}
+
+static int lt9611_mipi_input_digital(struct lt9611 *lt9611,
+				     const struct drm_display_mode *mode)
+{
+	struct reg_sequence reg_cfg[] = {
+		{ 0xff, 0x82 },
+		{ 0x4f, 0x80 },
+		{ 0x50, 0x10 },
+		{ 0xff, 0x83 },
+
+		{ 0x02, 0x0a },
+		{ 0x06, 0x0a },
+	};
+
+	regmap_write(lt9611->regmap, 0xff, 0x83);
+	regmap_write(lt9611->regmap, 0x00, LT9611_4LANES);
+
+	if (mode->hdisplay == 3840)
+		regmap_write(lt9611->regmap, 0x0a, 0x03);
+	else
+		regmap_write(lt9611->regmap, 0x0a, 0x00);
+
+	regmap_multi_reg_write(lt9611->regmap, reg_cfg, ARRAY_SIZE(reg_cfg));
+
+	return 0;
+}
+
+static void lt9611_mipi_video_setup(struct lt9611 *lt9611,
+				    const struct drm_display_mode *mode)
+{
+	u32 h_total, h_act, hpw, hfp, hss;
+	u32 v_total, v_act, vpw, vfp, vss;
+
+	h_total = mode->htotal;
+	v_total = mode->vtotal;
+
+	h_act = mode->hdisplay;
+	hpw = mode->hsync_end - mode->hsync_start;
+	hfp = mode->hsync_start - mode->hdisplay;
+	hss = (mode->hsync_end - mode->hsync_start) + (mode->htotal - mode->hsync_end);
+
+	v_act = mode->vdisplay;
+	vpw = mode->vsync_end - mode->vsync_start;
+	vfp = mode->vsync_start - mode->vdisplay;
+	vss = (mode->vsync_end - mode->vsync_start) + (mode->vtotal - mode->vsync_end);
+
+	regmap_write(lt9611->regmap, 0xff, 0x83);
+
+	regmap_write(lt9611->regmap, 0x0d, (u8)(v_total / 256));
+	regmap_write(lt9611->regmap, 0x0e, (u8)(v_total % 256));
+
+	regmap_write(lt9611->regmap, 0x0f, (u8)(v_act / 256));
+	regmap_write(lt9611->regmap, 0x10, (u8)(v_act % 256));
+
+	regmap_write(lt9611->regmap, 0x11, (u8)(h_total / 256));
+	regmap_write(lt9611->regmap, 0x12, (u8)(h_total % 256));
+
+	regmap_write(lt9611->regmap, 0x13, (u8)(h_act / 256));
+	regmap_write(lt9611->regmap, 0x14, (u8)(h_act % 256));
+
+	regmap_write(lt9611->regmap, 0x15, (u8)(vpw % 256));
+	regmap_write(lt9611->regmap, 0x16, (u8)(hpw % 256));
+
+	regmap_write(lt9611->regmap, 0x17, (u8)(vfp % 256));
+
+	regmap_write(lt9611->regmap, 0x18, (u8)(vss % 256));
+
+	regmap_write(lt9611->regmap, 0x19, (u8)(hfp % 256));
+
+	regmap_write(lt9611->regmap, 0x1a, (u8)(hss / 256));
+	regmap_write(lt9611->regmap, 0x1b, (u8)(hss % 256));
+}
+
+static int lt9611_pcr_setup(struct lt9611 *lt9611,
+			    const struct drm_display_mode *mode)
+{
+	struct reg_sequence reg_cfg[] = {
+		{ 0xff, 0x83 },
+		{ 0x0b, 0x01 },
+		{ 0x0c, 0x10 },
+		{ 0x48, 0x00 },
+		{ 0x49, 0x81 },
+
+		/* stage 1 */
+		{ 0x21, 0x4a },
+		{ 0x24, 0x71 },
+		{ 0x25, 0x30 },
+		{ 0x2a, 0x01 },
+
+		/* stage 2 */
+		{ 0x4a, 0x40 },
+		{ 0x1d, 0x10 },
+
+		/* MK limit */
+		{ 0x2d, 0x38 },
+		{ 0x31, 0x08 },
+	};
+
+	regmap_multi_reg_write(lt9611->regmap, reg_cfg, ARRAY_SIZE(reg_cfg));
+
+	switch (mode->hdisplay) {
+	case 640:
+		regmap_write(lt9611->regmap, 0x26, 0x14);
+		break;
+	case 1920:
+		regmap_write(lt9611->regmap, 0x26, 0x37);
+		break;
+	case 3840:
+		regmap_write(lt9611->regmap, 0x0b, 0x03);
+		regmap_write(lt9611->regmap, 0x0c, 0xd0);
+		regmap_write(lt9611->regmap, 0x48, 0x03);
+		regmap_write(lt9611->regmap, 0x49, 0xe0);
+		regmap_write(lt9611->regmap, 0x24, 0x72);
+		regmap_write(lt9611->regmap, 0x25, 0x00);
+		regmap_write(lt9611->regmap, 0x2a, 0x01);
+		regmap_write(lt9611->regmap, 0x4a, 0x10);
+		regmap_write(lt9611->regmap, 0x1d, 0x10);
+		regmap_write(lt9611->regmap, 0x26, 0x37);
+		break;
+	}
+
+	/* pcr rst */
+	regmap_write(lt9611->regmap, 0xff, 0x80);
+	regmap_write(lt9611->regmap, 0x11, 0x5a);
+	regmap_write(lt9611->regmap, 0x11, 0xfa);
+
+	return 0;
+}
+
+static int lt9611_pll_setup(struct lt9611 *lt9611,
+			    const struct drm_display_mode *mode)
+{
+	unsigned int pclk = mode->clock;
+	struct reg_sequence reg_cfg[] = {
+		/* txpll init */
+		{ 0xff, 0x81 },
+		{ 0x23, 0x40 },
+		{ 0x24, 0x64 },
+		{ 0x25, 0x80 },
+		{ 0x26, 0x55 },
+		{ 0x2c, 0x37 },
+		{ 0x2f, 0x01 },
+		{ 0x26, 0x55 },
+		{ 0x27, 0x66 },
+		{ 0x28, 0x88 },
+	};
+
+	regmap_multi_reg_write(lt9611->regmap, reg_cfg, ARRAY_SIZE(reg_cfg));
+
+	if (pclk > 150000)
+		regmap_write(lt9611->regmap, 0x2d, 0x88);
+	else if (pclk > 70000)
+		regmap_write(lt9611->regmap, 0x2d, 0x99);
+	else
+		regmap_write(lt9611->regmap, 0x2d, 0xaa);
+
+	regmap_write(lt9611->regmap, 0xff, 0x82);
+	regmap_write(lt9611->regmap, 0xe3, pclk >> 17); /* pclk[19:16] */
+	regmap_write(lt9611->regmap, 0xe4, pclk >> 9);  /* pclk[15:8]  */
+	regmap_write(lt9611->regmap, 0xe5, pclk >> 1);  /* pclk[7:0]   */
+
+	regmap_write(lt9611->regmap, 0xde, 0x20);
+	regmap_write(lt9611->regmap, 0xde, 0xe0);
+
+	regmap_write(lt9611->regmap, 0xff, 0x80);
+	regmap_write(lt9611->regmap, 0x16, 0xf1);
+	regmap_write(lt9611->regmap, 0x16, 0xf3);
+
+	return 0;
+}
+
+static int lt9611_video_check(struct lt9611 *lt9611)
+{
+	u32 v_total, v_act, h_act_a, h_act_b, h_total_sysclk;
+	unsigned int temp;
+	int ret;
+
+	/* top module video check */
+	regmap_write(lt9611->regmap, 0xff, 0x82);
+
+	/* v_act */
+	ret = regmap_read(lt9611->regmap, 0x82, &temp);
+	if (ret)
+		goto end;
+
+	v_act = temp << 8;
+	ret = regmap_read(lt9611->regmap, 0x83, &temp);
+	if (ret)
+		goto end;
+	v_act = v_act + temp;
+
+	/* v_total */
+	ret = regmap_read(lt9611->regmap, 0x6c, &temp);
+	if (ret)
+		goto end;
+	v_total = temp << 8;
+	ret = regmap_read(lt9611->regmap, 0x6d, &temp);
+	if (ret)
+		goto end;
+	v_total = v_total + temp;
+
+	/* h_total_sysclk */
+	ret = regmap_read(lt9611->regmap, 0x86, &temp);
+	if (ret)
+		goto end;
+	h_total_sysclk = temp << 8;
+	ret = regmap_read(lt9611->regmap, 0x87, &temp);
+	if (ret)
+		goto end;
+	h_total_sysclk = h_total_sysclk + temp;
+
+	/* h_act_a */
+	regmap_write(lt9611->regmap, 0xff, 0x83);
+	ret = regmap_read(lt9611->regmap, 0x82, &temp);
+	if (ret)
+		goto end;
+	h_act_a = temp << 8;
+	ret = regmap_read(lt9611->regmap, 0x83, &temp);
+	if (ret)
+		goto end;
+	h_act_a = (h_act_a + temp)/3;
+
+	/* h_act_b */
+	regmap_write(lt9611->regmap, 0xff, 0x83);
+	ret = regmap_read(lt9611->regmap, 0x86, &temp);
+	if (ret)
+		goto end;
+	h_act_b = temp << 8;
+	ret = regmap_read(lt9611->regmap, 0x87, &temp);
+	if (ret)
+		goto end;
+	h_act_b = (h_act_b + temp)/3;
+
+	dev_info(lt9611->dev, "video check: h_act_a=%d, h_act_b=%d, v_act=%d, v_total=%d, h_total_sysclk=%d\n",
+		h_act_a, h_act_b, v_act, v_total, h_total_sysclk);
+
+	return 0;
+
+end:
+	dev_err(lt9611->dev, "read video check error\n");
+	return ret;
+}
+
+static void lt9611_hdmi_tx_digital(struct lt9611 *lt9611)
+{
+	regmap_write(lt9611->regmap, 0xff, 0x84);
+	regmap_write(lt9611->regmap, 0x43, 0x46 - lt9611->vic);
+	regmap_write(lt9611->regmap, 0x44, 0x84);
+	regmap_write(lt9611->regmap, 0x47, lt9611->vic);
+
+	regmap_write(lt9611->regmap, 0xff, 0x82);
+	regmap_write(lt9611->regmap, 0xd6, 0x8c);
+	regmap_write(lt9611->regmap, 0xd7, 0x04);
+}
+
+static void lt9611_hdmi_tx_phy(struct lt9611 *lt9611)
+{
+	struct reg_sequence reg_cfg[] = {
+		{ 0xff, 0x81 },
+		{ 0x30, 0x6a },
+		{ 0x31, 0x44 }, /* HDMI DC mode */
+		{ 0x32, 0x4a },
+		{ 0x33, 0x0b },
+		{ 0x34, 0x00 },
+		{ 0x35, 0x00 },
+		{ 0x36, 0x00 },
+		{ 0x37, 0x44 },
+		{ 0x3f, 0x0f },
+		{ 0x40, 0xa0 },
+		{ 0x41, 0xa0 },
+		{ 0x42, 0xa0 },
+		{ 0x43, 0xa0 },
+		{ 0x44, 0x0a },
+	};
+
+	/* HDMI AC mode */
+	if (lt9611->ac_mode)
+		reg_cfg[2].def = 0x73;
+
+	regmap_multi_reg_write(lt9611->regmap, reg_cfg, ARRAY_SIZE(reg_cfg));
+}
+
+static irqreturn_t lt9611_irq_thread_handler(int irq, void *dev_id)
+{
+	struct lt9611 *lt9611 = dev_id;
+	unsigned int irq_flag0 = 0;
+	unsigned int irq_flag3 = 0;
+
+	regmap_write(lt9611->regmap, 0xff, 0x82);
+	regmap_read(lt9611->regmap, 0x0f, &irq_flag3);
+	regmap_read(lt9611->regmap, 0x0c, &irq_flag0);
+
+	printk(KERN_ERR "%s() irq_flag0: %#x irq_flag3: %#x\n", __func__, irq_flag0, irq_flag3);
+
+	 /* hpd changed low */
+	if (irq_flag3 & 0x80) {
+		dev_info(lt9611->dev, "hdmi cable disconnected\n");
+
+		regmap_write(lt9611->regmap, 0xff, 0x82); /* irq 3 clear flag */
+		regmap_write(lt9611->regmap, 0x07, 0xbf);
+		regmap_write(lt9611->regmap, 0x07, 0x3f);
+	}
+	 /* hpd changed high */
+	if (irq_flag3 & 0x40) {
+		dev_info(lt9611->dev, "hdmi cable connected\n");
+
+		regmap_write(lt9611->regmap, 0xff, 0x82); /* irq 3 clear flag */
+		regmap_write(lt9611->regmap, 0x07, 0x7f);
+		regmap_write(lt9611->regmap, 0x07, 0x3f);
+	}
+
+//	if (irq_flag3 & 0xc0)
+//		drm_kms_helper_hotplug_event(lt9611->bridge.dev);
+
+	/* video input changed */
+	if (irq_flag0 & 0x01) {
+		dev_info(lt9611->dev, "video input changed\n");
+		regmap_write(lt9611->regmap, 0xff, 0x82); /* irq 0 clear flag */
+		regmap_write(lt9611->regmap, 0x9e, 0xff);
+		regmap_write(lt9611->regmap, 0x9e, 0xf7);
+		regmap_write(lt9611->regmap, 0x04, 0xff);
+		regmap_write(lt9611->regmap, 0x04, 0xfe);
+	}
+
+	return IRQ_HANDLED;
+}
+
+static void lt9611_enable_hpd_interrupts(struct lt9611 *lt9611)
+{
+	unsigned int val;
+
+	dev_dbg(lt9611->dev, "enabling hpd interrupts\n");
+
+	regmap_write(lt9611->regmap, 0xff, 0x82);
+	regmap_read(lt9611->regmap, 0x03, &val);
+
+	val &= ~0xc0;
+	regmap_write(lt9611->regmap, 0x03, val);
+	regmap_write(lt9611->regmap, 0x07, 0xff); //clear
+	regmap_write(lt9611->regmap, 0x07, 0x3f);
+}
+
+static int lt9611_power_on(struct lt9611 *lt9611)
+{
+	int ret;
+	const struct reg_sequence seq[] = {
+		/* LT9611_System_Init */
+		{ 0xFF, 0x81 },
+		{ 0x01, 0x18 }, /* sel xtal clock */
+
+		/* timer for frequency meter */
+		{ 0xff, 0x82 },
+		{ 0x1b, 0x69 }, /*timer 2*/
+		{ 0x1c, 0x78 },
+		{ 0xcb, 0x69 }, /*timer 1 */
+		{ 0xcc, 0x78 },
+
+		/* irq init */
+		{ 0xff, 0x82 },
+		{ 0x51, 0x01 },
+		{ 0x58, 0x0a }, /* hpd irq */
+		{ 0x59, 0x80 }, /* hpd debounce width */
+		{ 0x9e, 0xf7 }, /* video check irq */
+
+		/* power consumption for work */
+		{ 0xff, 0x80 },
+		{ 0x04, 0xf0 },
+		{ 0x06, 0xf0 },
+		{ 0x0a, 0x80 },
+		{ 0x0b, 0x40 },
+		{ 0x0d, 0xef },
+		{ 0x11, 0xfa },
+	};
+
+	if (lt9611->power_on)
+		return 0;
+	
+	dev_dbg(lt9611->dev, "power on\n");
+
+	ret = regmap_multi_reg_write(lt9611->regmap, seq, ARRAY_SIZE(seq));
+	if (!ret)
+		lt9611->power_on = true;
+
+	return ret;
+}
+
+static int lt9611_power_off(struct lt9611 *lt9611)
+{
+	int ret;
+	const struct reg_sequence off[] = {
+		{ 0xff, 0x81 },
+		{ 0x30, 0x6a },
+	};
+
+	dev_dbg(lt9611->dev, "power off\n");
+
+	ret = regmap_multi_reg_write(lt9611->regmap, off, ARRAY_SIZE(off));
+	if (!ret)
+		lt9611->power_on = false;
+
+	return ret;
+}
+
+static void lt9611_i2s_init(struct lt9611 *lt9611)
+{
+	const struct reg_sequence init[] = {
+		{ 0xff, 0x82 },
+		{ 0xd6, 0x8c },
+		{ 0xd7, 0x04 },
+
+		{ 0xff, 0x84 },
+		{ 0x06, 0x08 },
+		{ 0x07, 0x10 },
+
+		{ 0x34, 0xd4 },
+	};
+
+	regmap_multi_reg_write(lt9611->regmap, init, ARRAY_SIZE(init));
+}
+
+static void lt9611_reset(struct lt9611 *lt9611)
+{
+	gpiod_set_value_cansleep(lt9611->reset_gpio, 1);
+	msleep(20);
+	gpiod_set_value_cansleep(lt9611->reset_gpio, 0);
+	msleep(20);
+	gpiod_set_value_cansleep(lt9611->reset_gpio, 1);
+	msleep(100);
+}
+
+static void lt9611_assert_5v(struct lt9611 *lt9611)
+{
+	if (!lt9611->enable_gpio)
+		return;
+
+	gpiod_set_value_cansleep(lt9611->enable_gpio, 1);
+	msleep(20);
+}
+
+static int lt9611_regulator_init(struct lt9611 *lt9611)
+{
+	int ret;
+
+	lt9611->supplies[0].supply = "vdd";
+	lt9611->supplies[1].supply = "vcc";
+	ret = devm_regulator_bulk_get(lt9611->dev, 2, lt9611->supplies);
+	if (ret < 0)
+		return ret;
+
+	return regulator_set_load(lt9611->supplies[0].consumer, 300000);
+}
+
+static int lt9611_regulator_enable(struct lt9611 *lt9611)
+{
+	int ret;
+
+	ret = regulator_enable(lt9611->supplies[0].consumer);
+	if (ret < 0)
+		return ret;
+
+	usleep_range(1000, 10000);
+
+	ret = regulator_enable(lt9611->supplies[1].consumer);
+	if (ret < 0) {
+		regulator_disable(lt9611->supplies[0].consumer);
+		return ret;
+	}
+
+	return 0;
+}
+
+static struct lt9611_mode *lt9611_find_mode(const struct drm_display_mode *mode)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(lt9611_modes); i++) {
+		if (lt9611_modes[i].hdisplay == mode->hdisplay &&
+		    lt9611_modes[i].vdisplay == mode->vdisplay &&
+		    lt9611_modes[i].fps == drm_mode_vrefresh(mode)) {
+			return &lt9611_modes[i];
+		}
+	}
+
+	return NULL;
+}
+
+/* connector funcs */
+static enum drm_connector_status
+lt9611_connector_detect(struct drm_connector *connector, bool force)
+{
+	struct lt9611 *lt9611 = connector_to_lt9611(connector);
+	unsigned int reg_val = 0;
+	int connected = 0;
+
+	regmap_write(lt9611->regmap, 0xff, 0x82);
+	regmap_read(lt9611->regmap, 0x5e, &reg_val);
+	connected  = (reg_val & BIT(2));
+	dev_dbg(lt9611->dev, "connected = %x\n", connected);
+
+	lt9611->status = connected ?  connector_status_connected :
+				connector_status_disconnected;
+
+	return lt9611->status;
+}
+
+static int lt9611_read_edid(struct lt9611 *lt9611)
+{
+	unsigned int temp;
+	int ret = 0;
+	int i, j;
+
+	memset(lt9611->edid_buf, 0, EDID_SEG_SIZE);
+
+	regmap_write(lt9611->regmap, 0xff, 0x85);
+	regmap_write(lt9611->regmap, 0x03, 0xc9);
+	regmap_write(lt9611->regmap, 0x04, 0xa0); /* 0xA0 is EDID device address */
+	regmap_write(lt9611->regmap, 0x05, 0x00); /* 0x00 is EDID offset address */
+	regmap_write(lt9611->regmap, 0x06, 0x20); /* length for read */
+	regmap_write(lt9611->regmap, 0x14, 0x7f);
+
+	for (i = 0 ; i < 8 ; i++) {
+		regmap_write(lt9611->regmap, 0x05, i * 32); /* offset address */
+		regmap_write(lt9611->regmap, 0x07, 0x36);
+		regmap_write(lt9611->regmap, 0x07, 0x31);
+		regmap_write(lt9611->regmap, 0x07, 0x37);
+		usleep_range(5000, 10000);
+
+		regmap_read(lt9611->regmap, 0x40, &temp);
+
+		if (temp & 0x02) {  /*KEY_DDC_ACCS_DONE=1*/
+			for (j = 0; j < 32; j++) {
+				regmap_read(lt9611->regmap, 0x83, &temp);
+				lt9611->edid_buf[i*32+j] = temp;
+			}
+		} else if (temp & 0x50) { /* DDC No Ack or Abitration lost */
+			dev_err(lt9611->dev, "read edid failed: no ack\n");
+			ret = -EIO;
+			goto end;
+		} else {
+			dev_err(lt9611->dev, "read edid failed: access not done\n");
+			ret = -EIO;
+			goto end;
+		}
+	}
+
+	dev_dbg(lt9611->dev, "read edid succeeded, checksum = 0x%x\n",
+		lt9611->edid_buf[255]);
+
+end:
+	regmap_write(lt9611->regmap, 0x07, 0x1f);
+	return ret;
+}
+
+/* TODO: add support for more extenstion blocks */
+static int lt9611_get_edid_block(void *data, u8 *buf, unsigned int block,
+				  size_t len)
+{
+	struct lt9611 *lt9611 = data;
+	int ret;
+
+	dev_dbg(lt9611->dev, "get edid block: block=%d, len=%d\n", block, (int)len);
+
+	if (len > 128)
+		return -EINVAL;
+
+	/* support up to 1 extension block */
+	if (block > 1)
+		return -EINVAL;
+
+	if (block == 0) {
+		/* always read 2 edid blocks once */
+		ret = lt9611_read_edid(lt9611);
+		if (ret) {
+			dev_err(lt9611->dev, "edid read failed\n");
+			return ret;
+		}
+	}
+
+	if (block % 2 == 0)
+		memcpy(buf, lt9611->edid_buf, len);
+	else
+		memcpy(buf, lt9611->edid_buf + 128, len);
+
+	return 0;
+}
+
+static int lt9611_connector_get_modes(struct drm_connector *connector)
+{
+	struct lt9611 *lt9611 = connector_to_lt9611(connector);
+	unsigned int count;
+	struct edid *edid;
+
+	dev_dbg(lt9611->dev, "get modes\n");
+
+	lt9611_power_on(lt9611);
+	edid = drm_do_get_edid(connector, lt9611_get_edid_block, lt9611);
+	drm_connector_update_edid_property(connector, edid);
+	count = drm_add_edid_modes(connector, edid);
+	kfree(edid);
+
+	return count;
+}
+
+static enum drm_mode_status lt9611_connector_mode_valid(
+	struct drm_connector *connector, struct drm_display_mode *mode)
+{
+	struct lt9611_mode *lt9611_mode = lt9611_find_mode(mode);
+
+	return lt9611_mode ? MODE_OK : MODE_BAD;
+}
+
+/* bridge funcs */
+static void lt9611_bridge_enable(struct drm_bridge *bridge)
+{
+	struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
+	const struct reg_sequence on[] = {
+		{ 0xff, 0x81 },
+		{ 0x30, 0xea },
+	};
+
+	dev_dbg(lt9611->dev, "bridge enable\n");
+
+	if (lt9611_power_on(lt9611)) {
+		dev_err(lt9611->dev, "power on failed\n");
+		return;
+	}
+
+	dev_dbg(lt9611->dev, "video on\n");
+
+	lt9611_mipi_input_analog(lt9611);
+	lt9611_hdmi_tx_digital(lt9611);
+	lt9611_hdmi_tx_phy(lt9611);
+
+	msleep(500);
+
+	lt9611_video_check(lt9611);
+
+	/* Enable HDMI output */
+	regmap_multi_reg_write(lt9611->regmap, on, ARRAY_SIZE(on));
+}
+
+static void lt9611_bridge_disable(struct drm_bridge *bridge)
+{
+	struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
+	int ret;
+	const struct reg_sequence hdmi_off[] = {
+		{ 0xff, 0x81 },
+		{ 0x30, 0x6a },
+	};
+
+	dev_dbg(lt9611->dev, "bridge disable\n");
+
+	/* Disable HDMI output */
+	ret = regmap_multi_reg_write(lt9611->regmap, hdmi_off, ARRAY_SIZE(hdmi_off));
+	if (ret) {
+		dev_err(lt9611->dev, "video on failed\n");
+		return;
+	}
+
+	if (lt9611_power_off(lt9611)) {
+		dev_err(lt9611->dev, "power on failed\n");
+		return;
+	}
+}
+
+static struct drm_connector_helper_funcs lt9611_bridge_connector_helper_funcs = {
+	.get_modes = lt9611_connector_get_modes,
+	.mode_valid = lt9611_connector_mode_valid,
+};
+
+static const struct drm_connector_funcs lt9611_bridge_connector_funcs = {
+	.fill_modes = drm_helper_probe_single_connector_modes,
+	.detect = lt9611_connector_detect,
+	.destroy = drm_connector_cleanup,
+	.reset = drm_atomic_helper_connector_reset,
+	.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
+	.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
+};
+
+static struct mipi_dsi_device *lt9611_attach_dsi(struct lt9611 *lt9611,
+						 struct device_node *dsi_node)
+{
+	const struct mipi_dsi_device_info info = { "lt9611", 0, NULL };
+	struct mipi_dsi_device *dsi;
+	struct mipi_dsi_host *host;
+	int ret;
+
+	host = of_find_mipi_dsi_host_by_node(dsi_node);
+	if (!host) {
+		dev_err(lt9611->dev, "failed to find dsi host\n");
+		return ERR_PTR(-EPROBE_DEFER);
+	}
+
+	dsi = mipi_dsi_device_register_full(host, &info);
+	if (IS_ERR(dsi)) {
+		dev_err(lt9611->dev, "failed to create dsi device\n");
+		return dsi;
+	}
+
+	dsi->lanes = 4;
+	dsi->format = MIPI_DSI_FMT_RGB888;
+	dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
+			  MIPI_DSI_MODE_VIDEO_HSE;
+
+	ret = mipi_dsi_attach(dsi);
+	if (ret < 0) {
+		dev_err(lt9611->dev, "failed to attach dsi to host\n");
+		mipi_dsi_device_unregister(dsi);
+		return ERR_PTR(ret);
+	}
+
+	return dsi;
+}
+
+static int lt9611_bridge_attach(struct drm_bridge *bridge)
+{
+	struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
+	int ret;
+
+	dev_dbg(lt9611->dev, "bridge attach\n");
+
+	ret = drm_connector_init(bridge->dev, &lt9611->connector,
+				 &lt9611_bridge_connector_funcs,
+				 DRM_MODE_CONNECTOR_HDMIA);
+	if (ret) {
+		DRM_ERROR("Failed to initialize connector with drm\n");
+		return ret;
+	}
+
+	drm_connector_helper_add(&lt9611->connector,
+				 &lt9611_bridge_connector_helper_funcs);
+	drm_connector_attach_encoder(&lt9611->connector, bridge->encoder);
+
+	if (!bridge->encoder) {
+		DRM_ERROR("Parent encoder object not found");
+		return -ENODEV;
+	}
+
+	/* Attach primary DSI */
+	lt9611->dsi0 = lt9611_attach_dsi(lt9611, lt9611->dsi0_node);
+	if (IS_ERR(lt9611->dsi0))
+		return PTR_ERR(lt9611->dsi0);
+
+	/* Attach secondary DSI, if specified */
+	if (lt9611->dsi1_node) {
+		lt9611->dsi1 = lt9611_attach_dsi(lt9611, lt9611->dsi1_node);
+		if (IS_ERR(lt9611->dsi1)) {
+			ret = PTR_ERR(lt9611->dsi1);
+			goto err_unregister_dsi0;
+		}
+	}
+
+	return 0;
+
+err_unregister_dsi0:
+	mipi_dsi_device_unregister(lt9611->dsi0);
+
+	return ret;
+}
+
+static void lt9611_bridge_detach(struct drm_bridge *bridge)
+{
+	struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
+
+	if (lt9611->dsi1) {
+		mipi_dsi_detach(lt9611->dsi1);
+		mipi_dsi_device_unregister(lt9611->dsi1);
+	}
+
+	mipi_dsi_detach(lt9611->dsi0);
+	mipi_dsi_device_unregister(lt9611->dsi0);
+}
+
+static enum drm_mode_status
+lt9611_bridge_mode_valid(struct drm_bridge *bridge,
+			 const struct drm_display_mode *mode)
+{
+	struct lt9611_mode *lt9611_mode = lt9611_find_mode(mode);
+	struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
+
+	if (lt9611_mode->intfs > 1 && !lt9611->dsi1)
+		return MODE_PANEL;
+	else
+		return MODE_OK;
+}
+
+static void lt9611_bridge_pre_enable(struct drm_bridge *bridge)
+{
+	struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
+
+	dev_dbg(lt9611->dev, "bridge pre_enable\n");
+
+	regmap_write(lt9611->regmap, 0xff, 0x80);
+	regmap_write(lt9611->regmap, 0xee, 0x01);
+}
+
+static void lt9611_bridge_post_disable(struct drm_bridge *bridge)
+{
+	struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
+
+	dev_dbg(lt9611->dev, "bridge post_disable\n");
+
+	/* TODO: We still need to figure out how to best put the
+	 * hardware to sleep while still allowing hotplug
+	 * detection to work here. -jstultz
+	 */
+}
+
+static void lt9611_bridge_mode_set(struct drm_bridge *bridge,
+				   const struct drm_display_mode *mode,
+				   const struct drm_display_mode *adj_mode)
+{
+	struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
+	struct hdmi_avi_infoframe avi_frame;
+	int ret;
+
+	dev_dbg(lt9611->dev, "bridge mode_set: hdisplay=%d, vdisplay=%d, vrefresh=%d, clock=%d\n",
+		adj_mode->hdisplay, adj_mode->vdisplay,
+		adj_mode->vrefresh, adj_mode->clock);
+
+	lt9611_mipi_input_digital(lt9611, mode);
+	lt9611_pll_setup(lt9611, mode);
+	lt9611_mipi_video_setup(lt9611, mode);
+	lt9611_pcr_setup(lt9611, mode);
+
+	ret = drm_hdmi_avi_infoframe_from_display_mode(&avi_frame,
+						       &lt9611->connector,
+						       mode);
+	if (!ret)
+		lt9611->vic = avi_frame.video_code;
+}
+
+static const struct drm_bridge_funcs lt9611_bridge_funcs = {
+	.attach = lt9611_bridge_attach,
+	.detach = lt9611_bridge_detach,
+	.mode_valid = lt9611_bridge_mode_valid,
+	.pre_enable   = lt9611_bridge_pre_enable,
+	.enable = lt9611_bridge_enable,
+	.disable = lt9611_bridge_disable,
+	.post_disable = lt9611_bridge_post_disable,
+	.mode_set = lt9611_bridge_mode_set,
+};
+
+static int lt9611_parse_dt(struct device *dev,
+	struct lt9611 *lt9611)
+{
+	lt9611->dsi0_node = of_graph_get_remote_node(dev->of_node, 1, -1);
+	if (!lt9611->dsi0_node) {
+		DRM_DEV_ERROR(dev,
+			"failed to get remote node for primary dsi\n");
+		return -ENODEV;
+	}
+
+	lt9611->dsi1_node = of_graph_get_remote_node(dev->of_node, 2, -1);
+
+	lt9611->ac_mode = of_property_read_bool(dev->of_node, "lt,ac-mode");
+	dev_dbg(lt9611->dev, "ac_mode=%d\n", lt9611->ac_mode);
+
+	return 0;
+}
+
+static int lt9611_gpio_init(struct lt9611 *lt9611)
+{
+	struct device *dev = lt9611->dev;
+
+	lt9611->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
+	if (IS_ERR(lt9611->reset_gpio)) {
+		dev_err(dev, "failed to acquire reset gpio\n");
+		return PTR_ERR(lt9611->reset_gpio);
+	}
+
+	lt9611->enable_gpio = devm_gpiod_get_optional(dev, "enable", GPIOD_OUT_LOW);
+	if (IS_ERR(lt9611->enable_gpio)) {
+		dev_err(dev, "failed to acquire enable gpio\n");
+		return PTR_ERR(lt9611->enable_gpio);
+	}
+
+	return 0;
+}
+
+static int lt9611_read_device_rev(struct lt9611 *lt9611)
+{
+	unsigned int rev;
+	int ret;
+
+	regmap_write(lt9611->regmap, 0xff, 0x80);
+	regmap_write(lt9611->regmap, 0xee, 0x01);
+
+	ret = regmap_read(lt9611->regmap, 0x02, &rev);
+	if (ret)
+		dev_err(lt9611->dev, "failed to read revision: %d\n", ret);
+
+	dev_info(lt9611->dev, "LT9611 revsion: 0x%x\n", rev);
+
+	return ret;
+}
+
+static int lt9611_probe(struct i2c_client *client,
+	 const struct i2c_device_id *id)
+{
+	struct lt9611 *lt9611;
+	struct device *dev = &client->dev;
+	int ret;
+
+	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
+		dev_err(dev, "device doesn't support I2C\n");
+		return -ENODEV;
+	}
+
+	lt9611 = devm_kzalloc(dev, sizeof(*lt9611), GFP_KERNEL);
+	if (!lt9611)
+		return -ENOMEM;
+
+	lt9611->dev = &client->dev;
+	lt9611->client = client;
+
+	lt9611->regmap = devm_regmap_init_i2c(client, &lt9611_regmap_config);
+	if (IS_ERR(lt9611->regmap)) {
+		DRM_ERROR("regmap i2c init failed\n");
+		return PTR_ERR(lt9611->regmap);
+	}
+
+	ret = lt9611_parse_dt(&client->dev, lt9611);
+	if (ret) {
+		dev_err(dev, "failed to parse device tree\n");
+		return ret;
+	}
+
+	ret = lt9611_gpio_init(lt9611);
+	if (ret < 0)
+		return ret;
+
+	ret = lt9611_regulator_init(lt9611);
+	if (ret < 0)
+		return ret;
+
+	lt9611_assert_5v(lt9611);
+
+	ret = lt9611_regulator_enable(lt9611);
+	if (ret)
+		return ret;
+
+	lt9611_reset(lt9611);
+
+	ret = lt9611_read_device_rev(lt9611);
+	if (ret) {
+		dev_err(dev, "failed to read chip rev\n");
+		goto err_disable_regulators;
+	}
+
+	lt9611_i2s_init(lt9611);
+
+	ret = devm_request_threaded_irq(dev, client->irq, NULL,
+					lt9611_irq_thread_handler,
+					IRQF_ONESHOT, "lt9611", lt9611);
+	if (ret) {
+		dev_err(dev, "failed to request irq\n");
+		goto err_disable_regulators;
+	}
+
+	i2c_set_clientdata(client, lt9611);
+
+	lt9611->bridge.funcs = &lt9611_bridge_funcs;
+	lt9611->bridge.of_node = client->dev.of_node;
+
+	drm_bridge_add(&lt9611->bridge);
+
+	lt9611_enable_hpd_interrupts(lt9611);
+
+	return 0;
+
+err_disable_regulators:
+	regulator_bulk_disable(ARRAY_SIZE(lt9611->supplies), lt9611->supplies);
+
+	of_node_put(lt9611->dsi0_node);
+	of_node_put(lt9611->dsi1_node);
+
+	return ret;
+}
+
+static int lt9611_remove(struct i2c_client *client)
+{
+	struct lt9611 *lt9611 = i2c_get_clientdata(client);
+
+	disable_irq(client->irq);
+
+	drm_bridge_remove(&lt9611->bridge);
+
+	regulator_bulk_disable(ARRAY_SIZE(lt9611->supplies), lt9611->supplies);
+
+	of_node_put(lt9611->dsi0_node);
+	of_node_put(lt9611->dsi1_node);
+
+	return 0;
+}
+
+
+static struct i2c_device_id lt9611_id[] = {
+	{ "lt,lt9611", 0},
+	{}
+};
+
+static const struct of_device_id lt9611_match_table[] = {
+	{.compatible = "lt,lt9611"},
+	{}
+};
+MODULE_DEVICE_TABLE(of, lt9611_match_table);
+
+static struct i2c_driver lt9611_driver = {
+	.driver = {
+		.name = "lt9611",
+		.of_match_table = lt9611_match_table,
+	},
+	.probe = lt9611_probe,
+	.remove = lt9611_remove,
+	.id_table = lt9611_id,
+};
+module_i2c_driver(lt9611_driver);
+
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index 2337b38..d932256 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -887,6 +887,38 @@ static const struct drm_prop_enum_list hdmi_colorspaces[] = {
 	{ DRM_MODE_COLORIMETRY_DCI_P3_RGB_THEATER, "DCI-P3_RGB_Theater" },
 };
 
+/*
+ * As per DP 1.4a spec, 2.2.5.7.5 VSC SDP Payload for Pixel Encoding/Colorimetry
+ * Format Table 2-120
+ */
+static const struct drm_prop_enum_list dp_colorspaces[] = {
+	/* For Default case, driver will set the colorspace */
+	{ DRM_MODE_COLORIMETRY_DEFAULT, "Default" },
+	{ DRM_MODE_COLORIMETRY_RGB_WIDE_FIXED, "RGB_Wide_Gamut_Fixed_Point" },
+	/* Colorimetry based on scRGB (IEC 61966-2-2) */
+	{ DRM_MODE_COLORIMETRY_RGB_WIDE_FLOAT, "RGB_Wide_Gamut_Floating_Point" },
+	/* Colorimetry based on IEC 61966-2-5 */
+	{ DRM_MODE_COLORIMETRY_OPRGB, "opRGB" },
+	/* Colorimetry based on SMPTE RP 431-2 */
+	{ DRM_MODE_COLORIMETRY_DCI_P3_RGB_D65, "DCI-P3_RGB_D65" },
+	/* Colorimetry based on ITU-R BT.2020 */
+	{ DRM_MODE_COLORIMETRY_BT2020_RGB, "BT2020_RGB" },
+	{ DRM_MODE_COLORIMETRY_BT601_YCC, "BT601_YCC" },
+	{ DRM_MODE_COLORIMETRY_BT709_YCC, "BT709_YCC" },
+	/* Standard Definition Colorimetry based on IEC 61966-2-4 */
+	{ DRM_MODE_COLORIMETRY_XVYCC_601, "XVYCC_601" },
+	/* High Definition Colorimetry based on IEC 61966-2-4 */
+	{ DRM_MODE_COLORIMETRY_XVYCC_709, "XVYCC_709" },
+	/* Colorimetry based on IEC 61966-2-1/Amendment 1 */
+	{ DRM_MODE_COLORIMETRY_SYCC_601, "SYCC_601" },
+	/* Colorimetry based on IEC 61966-2-5 [33] */
+	{ DRM_MODE_COLORIMETRY_OPYCC_601, "opYCC_601" },
+	/* Colorimetry based on ITU-R BT.2020 */
+	{ DRM_MODE_COLORIMETRY_BT2020_CYCC, "BT2020_CYCC" },
+	/* Colorimetry based on ITU-R BT.2020 */
+	{ DRM_MODE_COLORIMETRY_BT2020_YCC, "BT2020_YCC" },
+};
+
 /**
  * DOC: standard connector properties
  *
@@ -1679,7 +1711,6 @@ EXPORT_SYMBOL(drm_mode_create_aspect_ratio_property);
  * DOC: standard connector properties
  *
  * Colorspace:
- *     drm_mode_create_colorspace_property - create colorspace property
  *     This property helps select a suitable colorspace based on the sink
  *     capability. Modern sink devices support wider gamut like BT2020.
  *     This helps switch to BT2020 mode if the BT2020 encoded video stream
@@ -1699,32 +1730,68 @@ EXPORT_SYMBOL(drm_mode_create_aspect_ratio_property);
  *      - This property is just to inform sink what colorspace
  *        source is trying to drive.
  *
- * Called by a driver the first time it's needed, must be attached to desired
- * connectors.
+ * Because between HDMI and DP have different colorspaces,
+ * drm_mode_create_hdmi_colorspace_property() is used for HDMI connector and
+ * drm_mode_create_dp_colorspace_property() is used for DP connector.
  */
-int drm_mode_create_colorspace_property(struct drm_connector *connector)
+
+/**
+ * drm_mode_create_hdmi_colorspace_property - create hdmi colorspace property
+ * @connector: connector to create the Colorspace property on.
+ *
+ * Called by a driver the first time it's needed, must be attached to desired
+ * HDMI connectors.
+ *
+ * Returns:
+ * Zero on success, negative errono on failure.
+ */
+int drm_mode_create_hdmi_colorspace_property(struct drm_connector *connector)
 {
 	struct drm_device *dev = connector->dev;
-	struct drm_property *prop;
 
-	if (connector->connector_type == DRM_MODE_CONNECTOR_HDMIA ||
-	    connector->connector_type == DRM_MODE_CONNECTOR_HDMIB) {
-		prop = drm_property_create_enum(dev, DRM_MODE_PROP_ENUM,
-						"Colorspace",
-						hdmi_colorspaces,
-						ARRAY_SIZE(hdmi_colorspaces));
-		if (!prop)
-			return -ENOMEM;
-	} else {
-		DRM_DEBUG_KMS("Colorspace property not supported\n");
+	if (connector->colorspace_property)
 		return 0;
-	}
 
-	connector->colorspace_property = prop;
+	connector->colorspace_property =
+		drm_property_create_enum(dev, DRM_MODE_PROP_ENUM, "Colorspace",
+					 hdmi_colorspaces,
+					 ARRAY_SIZE(hdmi_colorspaces));
+
+	if (!connector->colorspace_property)
+		return -ENOMEM;
 
 	return 0;
 }
-EXPORT_SYMBOL(drm_mode_create_colorspace_property);
+EXPORT_SYMBOL(drm_mode_create_hdmi_colorspace_property);
+
+/**
+ * drm_mode_create_dp_colorspace_property - create dp colorspace property
+ * @connector: connector to create the Colorspace property on.
+ *
+ * Called by a driver the first time it's needed, must be attached to desired
+ * DP connectors.
+ *
+ * Returns:
+ * Zero on success, negative errono on failure.
+ */
+int drm_mode_create_dp_colorspace_property(struct drm_connector *connector)
+{
+	struct drm_device *dev = connector->dev;
+
+	if (connector->colorspace_property)
+		return 0;
+
+	connector->colorspace_property =
+		drm_property_create_enum(dev, DRM_MODE_PROP_ENUM, "Colorspace",
+					 dp_colorspaces,
+					 ARRAY_SIZE(dp_colorspaces));
+
+	if (!connector->colorspace_property)
+		return -ENOMEM;
+
+	return 0;
+}
+EXPORT_SYMBOL(drm_mode_create_dp_colorspace_property);
 
 /**
  * drm_mode_create_content_type_property - create content type property
diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c
index ffc68d3..8b6dd549f 100644
--- a/drivers/gpu/drm/drm_dp_helper.c
+++ b/drivers/gpu/drm/drm_dp_helper.c
@@ -337,6 +337,65 @@ int drm_dp_dpcd_read_link_status(struct drm_dp_aux *aux,
 EXPORT_SYMBOL(drm_dp_dpcd_read_link_status);
 
 /**
+ * drm_dp_send_real_edid_checksum() - send back real edid checksum value
+ * @aux: DisplayPort AUX channel
+ * @real_edid_checksum: real edid checksum for the last block
+ *
+ * Returns:
+ * True on success
+ */
+bool drm_dp_send_real_edid_checksum(struct drm_dp_aux *aux,
+				    u8 real_edid_checksum)
+{
+	u8 link_edid_read = 0, auto_test_req = 0, test_resp = 0;
+
+	if (drm_dp_dpcd_read(aux, DP_DEVICE_SERVICE_IRQ_VECTOR,
+			     &auto_test_req, 1) < 1) {
+		DRM_ERROR("DPCD failed read at register 0x%x\n",
+			  DP_DEVICE_SERVICE_IRQ_VECTOR);
+		return false;
+	}
+	auto_test_req &= DP_AUTOMATED_TEST_REQUEST;
+
+	if (drm_dp_dpcd_read(aux, DP_TEST_REQUEST, &link_edid_read, 1) < 1) {
+		DRM_ERROR("DPCD failed read at register 0x%x\n",
+			  DP_TEST_REQUEST);
+		return false;
+	}
+	link_edid_read &= DP_TEST_LINK_EDID_READ;
+
+	if (!auto_test_req || !link_edid_read) {
+		DRM_DEBUG_KMS("Source DUT does not support TEST_EDID_READ\n");
+		return false;
+	}
+
+	if (drm_dp_dpcd_write(aux, DP_DEVICE_SERVICE_IRQ_VECTOR,
+			      &auto_test_req, 1) < 1) {
+		DRM_ERROR("DPCD failed write at register 0x%x\n",
+			  DP_DEVICE_SERVICE_IRQ_VECTOR);
+		return false;
+	}
+
+	/* send back checksum for the last edid extension block data */
+	if (drm_dp_dpcd_write(aux, DP_TEST_EDID_CHECKSUM,
+			      &real_edid_checksum, 1) < 1) {
+		DRM_ERROR("DPCD failed write at register 0x%x\n",
+			  DP_TEST_EDID_CHECKSUM);
+		return false;
+	}
+
+	test_resp |= DP_TEST_EDID_CHECKSUM_WRITE;
+	if (drm_dp_dpcd_write(aux, DP_TEST_RESPONSE, &test_resp, 1) < 1) {
+		DRM_ERROR("DPCD failed write at register 0x%x\n",
+			  DP_TEST_RESPONSE);
+		return false;
+	}
+
+	return true;
+}
+EXPORT_SYMBOL(drm_dp_send_real_edid_checksum);
+
+/**
  * drm_dp_link_probe() - probe a DisplayPort link for capabilities
  * @aux: DisplayPort AUX channel
  * @link: pointer to structure in which to return link capabilities
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 9b69e55a..4525e0a 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -1351,11 +1351,22 @@ static int validate_displayid(u8 *displayid, int length, int idx);
 static int drm_edid_block_checksum(const u8 *raw_edid)
 {
 	int i;
-	u8 csum = 0;
-	for (i = 0; i < EDID_LENGTH; i++)
+	u8 csum = 0, crc = 0;
+
+	for (i = 0; i < EDID_LENGTH - 1; i++)
 		csum += raw_edid[i];
 
-	return csum;
+	crc = 0x100 - csum;
+
+	return crc;
+}
+
+static bool drm_edid_block_checksum_diff(const u8 *raw_edid, u8 real_checksum)
+{
+	if (raw_edid[EDID_LENGTH - 1] != real_checksum)
+		return true;
+	else
+		return false;
 }
 
 static bool drm_edid_is_zero(const u8 *in_edid, int length)
@@ -1413,7 +1424,7 @@ bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid,
 	}
 
 	csum = drm_edid_block_checksum(raw_edid);
-	if (csum) {
+	if (drm_edid_block_checksum_diff(raw_edid, csum)) {
 		if (edid_corrupt)
 			*edid_corrupt = true;
 
@@ -1554,6 +1565,11 @@ static void connector_bad_edid(struct drm_connector *connector,
 			       u8 *edid, int num_blocks)
 {
 	int i;
+	u8 num_of_ext = edid[0x7e];
+
+	/* Calculate real checksum for the last edid extension block data */
+	connector->real_edid_checksum =
+		drm_edid_block_checksum(edid + num_of_ext * EDID_LENGTH);
 
 	if (connector->bad_edid_counter++ && !(drm_debug & DRM_UT_KMS))
 		return;
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 6b8502b..8d193a5 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -390,11 +390,7 @@ static void drm_fb_helper_dirty_blit_real(struct drm_fb_helper *fb_helper,
 	unsigned int y;
 
 	for (y = clip->y1; y < clip->y2; y++) {
-		if (!fb_helper->dev->mode_config.fbdev_use_iomem)
-			memcpy(dst, src, len);
-		else
-			memcpy_toio((void __iomem *)dst, src, len);
-
+		memcpy(dst, src, len);
 		src += fb->pitches[0];
 		dst += fb->pitches[0];
 	}
diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c
index ea34bc9..6940812 100644
--- a/drivers/gpu/drm/drm_file.c
+++ b/drivers/gpu/drm/drm_file.c
@@ -49,6 +49,8 @@
 /* from BKL pushdown */
 DEFINE_MUTEX(drm_global_mutex);
 
+#define MAX_DRM_OPEN_COUNT		128
+
 /**
  * DOC: file operations
  *
@@ -380,6 +382,11 @@ int drm_open(struct inode *inode, struct file *filp)
 	if (!dev->open_count++)
 		need_setup = 1;
 
+	if (dev->open_count >= MAX_DRM_OPEN_COUNT) {
+		retcode = -EPERM;
+		goto err_undo;
+	}
+
 	/* share address_space across all char-devs of a single device */
 	filp->f_mapping = dev->anon_inode->i_mapping;
 
diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c
index 5756431..c62250c 100644
--- a/drivers/gpu/drm/drm_framebuffer.c
+++ b/drivers/gpu/drm/drm_framebuffer.c
@@ -295,7 +295,8 @@ drm_internal_framebuffer_create(struct drm_device *dev,
 	struct drm_framebuffer *fb;
 	int ret;
 
-	if (r->flags & ~(DRM_MODE_FB_INTERLACED | DRM_MODE_FB_MODIFIERS)) {
+	if (r->flags & ~(DRM_MODE_FB_INTERLACED | DRM_MODE_FB_MODIFIERS |
+			DRM_MODE_FB_SECURE)) {
 		DRM_DEBUG_KMS("bad framebuffer flags 0x%08x\n", r->flags);
 		return ERR_PTR(-EINVAL);
 	}
diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
index fcd728d..e293cf7 100644
--- a/drivers/gpu/drm/drm_ioctl.c
+++ b/drivers/gpu/drm/drm_ioctl.c
@@ -676,9 +676,9 @@ static const struct drm_ioctl_desc drm_ioctls[] = {
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMFB, drm_mode_rmfb_ioctl, 0),
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_PAGE_FLIP, drm_mode_page_flip_ioctl, DRM_MASTER),
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_DIRTYFB, drm_mode_dirtyfb_ioctl, DRM_MASTER),
-	DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATE_DUMB, drm_mode_create_dumb_ioctl, 0),
-	DRM_IOCTL_DEF(DRM_IOCTL_MODE_MAP_DUMB, drm_mode_mmap_dumb_ioctl, 0),
-	DRM_IOCTL_DEF(DRM_IOCTL_MODE_DESTROY_DUMB, drm_mode_destroy_dumb_ioctl, 0),
+	DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATE_DUMB, drm_mode_create_dumb_ioctl, DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF(DRM_IOCTL_MODE_MAP_DUMB, drm_mode_mmap_dumb_ioctl, DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF(DRM_IOCTL_MODE_DESTROY_DUMB, drm_mode_destroy_dumb_ioctl, DRM_RENDER_ALLOW),
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_GETPROPERTIES, drm_mode_obj_get_properties_ioctl, 0),
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_SETPROPERTY, drm_mode_obj_set_property_ioctl, DRM_MASTER),
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_CURSOR2, drm_mode_cursor2_ioctl, DRM_MASTER),
diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c
index b99f96d..edaec70 100644
--- a/drivers/gpu/drm/drm_mipi_dsi.c
+++ b/drivers/gpu/drm/drm_mipi_dsi.c
@@ -355,6 +355,7 @@ static ssize_t mipi_dsi_device_transfer(struct mipi_dsi_device *dsi,
 
 	if (dsi->mode_flags & MIPI_DSI_MODE_LPM)
 		msg->flags |= MIPI_DSI_MSG_USE_LPM;
+	msg->flags |= MIPI_DSI_MSG_LASTCOMMAND;
 
 	return ops->transfer(dsi->host, msg);
 }
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
index 3fd35e6..e4e33caf 100644
--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -2052,6 +2052,7 @@ int drm_mode_convert_umode(struct drm_device *dev,
 
 	return 0;
 }
+EXPORT_SYMBOL_GPL(drm_mode_convert_umode);
 
 /**
  * drm_mode_is_420_only - if a given videomode can be only supported in YCBCR420
diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c
index 6b0bf42..da69dc2 100644
--- a/drivers/gpu/drm/drm_panel.c
+++ b/drivers/gpu/drm/drm_panel.c
@@ -51,6 +51,7 @@ static LIST_HEAD(panel_list);
 void drm_panel_init(struct drm_panel *panel)
 {
 	INIT_LIST_HEAD(&panel->list);
+	BLOCKING_INIT_NOTIFIER_HEAD(&panel->nh);
 }
 EXPORT_SYMBOL(drm_panel_init);
 
@@ -266,6 +267,27 @@ struct drm_panel *of_drm_find_panel(const struct device_node *np)
 EXPORT_SYMBOL(of_drm_find_panel);
 #endif
 
+int drm_panel_notifier_register(struct drm_panel *panel,
+	struct notifier_block *nb)
+{
+	return blocking_notifier_chain_register(&panel->nh, nb);
+}
+EXPORT_SYMBOL_GPL(drm_panel_notifier_register);
+
+int drm_panel_notifier_unregister(struct drm_panel *panel,
+	struct notifier_block *nb)
+{
+	return blocking_notifier_chain_unregister(&panel->nh, nb);
+}
+EXPORT_SYMBOL_GPL(drm_panel_notifier_unregister);
+
+int drm_panel_notifier_call_chain(struct drm_panel *panel,
+	unsigned long val, void *v)
+{
+	return blocking_notifier_call_chain(&panel->nh, val, v);
+}
+EXPORT_SYMBOL_GPL(drm_panel_notifier_call_chain);
+
 MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>");
 MODULE_DESCRIPTION("DRM panel infrastructure");
 MODULE_LICENSE("GPL and additional rights");
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 0a2316e..f9f60de 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -767,6 +767,28 @@ int drm_gem_dmabuf_mmap(struct dma_buf *dma_buf, struct vm_area_struct *vma)
 }
 EXPORT_SYMBOL(drm_gem_dmabuf_mmap);
 
+/**
+ * drm_gem_dmabuf_get_uuid - dma_buf get_uuid implementation for GEM
+ * @dma_buf: buffer to query
+ * @uuid: uuid outparam
+ *
+ * Queries the buffer's virtio UUID. This can be used as the
+ * &dma_buf_ops.get_uuid callback. Calls into &drm_driver.gem_prime_get_uuid.
+ *
+ * Returns 0 on success or a negative error code on failure.
+ */
+int drm_gem_dmabuf_get_uuid(struct dma_buf *dma_buf, uuid_t *uuid)
+{
+	struct drm_gem_object *obj = dma_buf->priv;
+	struct drm_device *dev = obj->dev;
+
+	if (!dev->driver->gem_prime_get_uuid)
+		return -ENODEV;
+
+	return dev->driver->gem_prime_get_uuid(obj, uuid);
+}
+EXPORT_SYMBOL(drm_gem_dmabuf_get_uuid);
+
 static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
 	.cache_sgt_mapping = true,
 	.attach = drm_gem_map_attach,
@@ -777,6 +799,7 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
 	.mmap = drm_gem_dmabuf_mmap,
 	.vmap = drm_gem_dmabuf_vmap,
 	.vunmap = drm_gem_dmabuf_vunmap,
+	.get_uuid = drm_gem_dmabuf_get_uuid,
 };
 
 /**
diff --git a/drivers/gpu/drm/drm_property.c b/drivers/gpu/drm/drm_property.c
index 6ee0480..b363578 100644
--- a/drivers/gpu/drm/drm_property.c
+++ b/drivers/gpu/drm/drm_property.c
@@ -31,6 +31,9 @@
 
 #include "drm_crtc_internal.h"
 
+#define MAX_BLOB_PROP_SIZE	(PAGE_SIZE * 30)
+#define MAX_BLOB_PROP_COUNT	250
+
 /**
  * DOC: overview
  *
@@ -787,12 +790,21 @@ int drm_mode_createblob_ioctl(struct drm_device *dev,
 			      void *data, struct drm_file *file_priv)
 {
 	struct drm_mode_create_blob *out_resp = data;
-	struct drm_property_blob *blob;
+	struct drm_property_blob *blob, *bt;
 	int ret = 0;
+	u32 count = 0;
 
 	if (!drm_core_check_feature(dev, DRIVER_MODESET))
 		return -EOPNOTSUPP;
 
+	mutex_lock(&dev->mode_config.blob_lock);
+	list_for_each_entry(bt, &file_priv->blobs, head_file)
+		count++;
+	mutex_unlock(&dev->mode_config.blob_lock);
+
+	if (count >= MAX_BLOB_PROP_COUNT)
+		return -EOPNOTSUPP;
+
 	blob = drm_property_create_blob(dev, out_resp->length, NULL);
 	if (IS_ERR(blob))
 		return PTR_ERR(blob);
diff --git a/drivers/gpu/drm/hisilicon/Makefile b/drivers/gpu/drm/hisilicon/Makefile
old mode 100644
new mode 100755
diff --git a/drivers/gpu/drm/hisilicon/kirin/Kconfig b/drivers/gpu/drm/hisilicon/kirin/Kconfig
index 290553e..0f2a29e8 100644
--- a/drivers/gpu/drm/hisilicon/kirin/Kconfig
+++ b/drivers/gpu/drm/hisilicon/kirin/Kconfig
@@ -6,7 +6,37 @@
 	select DRM_GEM_CMA_HELPER
 	select DRM_KMS_CMA_HELPER
 	select DRM_MIPI_DSI
+	select DRM_PANEL
 	help
-	  Choose this option if you have a hisilicon Kirin chipsets(hi6220).
+	  Choose this option if you have a hisilicon Kirin chipsets.
 	  If M is selected the module will be called kirin-drm.
 
+if DRM_HISI_KIRIN
+config DRM_HISI_KIRIN620
+	bool "DRM Support for Hisilicon Kirin620 Platform"
+	default n
+	depends on DRM_HISI_KIRIN
+	select DRM_KMS_HELPER
+	select DRM_GEM_CMA_HELPER
+	select DRM_KMS_CMA_HELPER
+	select DRM_MIPI_DSI
+	select DRM_PANEL
+	help
+	  Choose this option if you have hisilicon Kirin Chipset(kirin620).
+	  It includes kirin620 ade and dsi drivers.
+	  If y is to build kirin620 drm into kirin drm drivers.
+
+config DRM_HISI_KIRIN960
+	bool "DRM Support for Hisilicon Kirin960 Platform"
+	default n
+	depends on DRM_HISI_KIRIN
+	select DRM_KMS_HELPER
+	select DRM_GEM_CMA_HELPER
+	select DRM_KMS_CMA_HELPER
+	select DRM_MIPI_DSI
+	select DRM_PANEL
+	help
+	  Choose this option if you have hisilicon Kirin Chipset(kirin960), such
+	  as hikey board. It includes kirin620 dpe and dsi drivers.
+	  If y is to build kirin960 drm into kirin drm drivers.
+endif
diff --git a/drivers/gpu/drm/hisilicon/kirin/Makefile b/drivers/gpu/drm/hisilicon/kirin/Makefile
index d9323f6..d00c948 100644
--- a/drivers/gpu/drm/hisilicon/kirin/Makefile
+++ b/drivers/gpu/drm/hisilicon/kirin/Makefile
@@ -1,6 +1,14 @@
 # SPDX-License-Identifier: GPL-2.0-only
-kirin-drm-y := kirin_drm_drv.o \
-	       kirin_drm_ade.o
+EXTRA_CFLAGS += \
+		-Iinclude/drm
 
-obj-$(CONFIG_DRM_HISI_KIRIN) += kirin-drm.o dw_drm_dsi.o
 
+kirin-drm-y := kirin_drm_drv.o
+kirin-drm-$(CONFIG_DRM_HISI_KIRIN620) += kirin_drm_ade.o
+kirin-drm-$(CONFIG_DRM_HISI_KIRIN960) += kirin_drm_dpe.o
+
+kirin-dsi-y := kirin_drm_dsi.o
+kirin-dsi-$(CONFIG_DRM_HISI_KIRIN620) += kirin/dw_drm_dsi.o
+kirin-dsi-$(CONFIG_DRM_HISI_KIRIN960) += kirin960/dw_drm_dsi.o
+
+obj-$(CONFIG_DRM_HISI_KIRIN) += kirin-drm.o kirin-dsi.o
diff --git a/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c b/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
deleted file mode 100644
index 5bf8138..0000000
--- a/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
+++ /dev/null
@@ -1,904 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * DesignWare MIPI DSI Host Controller v1.02 driver
- *
- * Copyright (c) 2016 Linaro Limited.
- * Copyright (c) 2014-2016 Hisilicon Limited.
- *
- * Author:
- *	Xinliang Liu <z.liuxinliang@hisilicon.com>
- *	Xinliang Liu <xinliang.liu@linaro.org>
- *	Xinwei Kong <kong.kongxinwei@hisilicon.com>
- */
-
-#include <linux/clk.h>
-#include <linux/component.h>
-#include <linux/delay.h>
-#include <linux/module.h>
-#include <linux/platform_device.h>
-
-#include <drm/drm_atomic_helper.h>
-#include <drm/drm_device.h>
-#include <drm/drm_encoder_slave.h>
-#include <drm/drm_mipi_dsi.h>
-#include <drm/drm_of.h>
-#include <drm/drm_print.h>
-#include <drm/drm_probe_helper.h>
-
-#include "dw_dsi_reg.h"
-
-#define MAX_TX_ESC_CLK		10
-#define ROUND(x, y)		((x) / (y) + \
-				((x) % (y) * 10 / (y) >= 5 ? 1 : 0))
-#define PHY_REF_CLK_RATE	19200000
-#define PHY_REF_CLK_PERIOD_PS	(1000000000 / (PHY_REF_CLK_RATE / 1000))
-
-#define encoder_to_dsi(encoder) \
-	container_of(encoder, struct dw_dsi, encoder)
-#define host_to_dsi(host) \
-	container_of(host, struct dw_dsi, host)
-
-struct mipi_phy_params {
-	u32 clk_t_lpx;
-	u32 clk_t_hs_prepare;
-	u32 clk_t_hs_zero;
-	u32 clk_t_hs_trial;
-	u32 clk_t_wakeup;
-	u32 data_t_lpx;
-	u32 data_t_hs_prepare;
-	u32 data_t_hs_zero;
-	u32 data_t_hs_trial;
-	u32 data_t_ta_go;
-	u32 data_t_ta_get;
-	u32 data_t_wakeup;
-	u32 hstx_ckg_sel;
-	u32 pll_fbd_div5f;
-	u32 pll_fbd_div1f;
-	u32 pll_fbd_2p;
-	u32 pll_enbwt;
-	u32 pll_fbd_p;
-	u32 pll_fbd_s;
-	u32 pll_pre_div1p;
-	u32 pll_pre_p;
-	u32 pll_vco_750M;
-	u32 pll_lpf_rs;
-	u32 pll_lpf_cs;
-	u32 clklp2hs_time;
-	u32 clkhs2lp_time;
-	u32 lp2hs_time;
-	u32 hs2lp_time;
-	u32 clk_to_data_delay;
-	u32 data_to_clk_delay;
-	u32 lane_byte_clk_kHz;
-	u32 clk_division;
-};
-
-struct dsi_hw_ctx {
-	void __iomem *base;
-	struct clk *pclk;
-};
-
-struct dw_dsi {
-	struct drm_encoder encoder;
-	struct drm_bridge *bridge;
-	struct mipi_dsi_host host;
-	struct drm_display_mode cur_mode;
-	struct dsi_hw_ctx *ctx;
-	struct mipi_phy_params phy;
-
-	u32 lanes;
-	enum mipi_dsi_pixel_format format;
-	unsigned long mode_flags;
-	bool enable;
-};
-
-struct dsi_data {
-	struct dw_dsi dsi;
-	struct dsi_hw_ctx ctx;
-};
-
-struct dsi_phy_range {
-	u32 min_range_kHz;
-	u32 max_range_kHz;
-	u32 pll_vco_750M;
-	u32 hstx_ckg_sel;
-};
-
-static const struct dsi_phy_range dphy_range_info[] = {
-	{   46875,    62500,   1,    7 },
-	{   62500,    93750,   0,    7 },
-	{   93750,   125000,   1,    6 },
-	{  125000,   187500,   0,    6 },
-	{  187500,   250000,   1,    5 },
-	{  250000,   375000,   0,    5 },
-	{  375000,   500000,   1,    4 },
-	{  500000,   750000,   0,    4 },
-	{  750000,  1000000,   1,    0 },
-	{ 1000000,  1500000,   0,    0 }
-};
-
-static u32 dsi_calc_phy_rate(u32 req_kHz, struct mipi_phy_params *phy)
-{
-	u32 ref_clk_ps = PHY_REF_CLK_PERIOD_PS;
-	u32 tmp_kHz = req_kHz;
-	u32 i = 0;
-	u32 q_pll = 1;
-	u32 m_pll = 0;
-	u32 n_pll = 0;
-	u32 r_pll = 1;
-	u32 m_n = 0;
-	u32 m_n_int = 0;
-	u32 f_kHz = 0;
-	u64 temp;
-
-	/*
-	 * Find a rate >= req_kHz.
-	 */
-	do {
-		f_kHz = tmp_kHz;
-
-		for (i = 0; i < ARRAY_SIZE(dphy_range_info); i++)
-			if (f_kHz >= dphy_range_info[i].min_range_kHz &&
-			    f_kHz <= dphy_range_info[i].max_range_kHz)
-				break;
-
-		if (i == ARRAY_SIZE(dphy_range_info)) {
-			DRM_ERROR("%dkHz out of range\n", f_kHz);
-			return 0;
-		}
-
-		phy->pll_vco_750M = dphy_range_info[i].pll_vco_750M;
-		phy->hstx_ckg_sel = dphy_range_info[i].hstx_ckg_sel;
-
-		if (phy->hstx_ckg_sel <= 7 &&
-		    phy->hstx_ckg_sel >= 4)
-			q_pll = 0x10 >> (7 - phy->hstx_ckg_sel);
-
-		temp = f_kHz * (u64)q_pll * (u64)ref_clk_ps;
-		m_n_int = temp / (u64)1000000000;
-		m_n = (temp % (u64)1000000000) / (u64)100000000;
-
-		if (m_n_int % 2 == 0) {
-			if (m_n * 6 >= 50) {
-				n_pll = 2;
-				m_pll = (m_n_int + 1) * n_pll;
-			} else if (m_n * 6 >= 30) {
-				n_pll = 3;
-				m_pll = m_n_int * n_pll + 2;
-			} else {
-				n_pll = 1;
-				m_pll = m_n_int * n_pll;
-			}
-		} else {
-			if (m_n * 6 >= 50) {
-				n_pll = 1;
-				m_pll = (m_n_int + 1) * n_pll;
-			} else if (m_n * 6 >= 30) {
-				n_pll = 1;
-				m_pll = (m_n_int + 1) * n_pll;
-			} else if (m_n * 6 >= 10) {
-				n_pll = 3;
-				m_pll = m_n_int * n_pll + 1;
-			} else {
-				n_pll = 2;
-				m_pll = m_n_int * n_pll;
-			}
-		}
-
-		if (n_pll == 1) {
-			phy->pll_fbd_p = 0;
-			phy->pll_pre_div1p = 1;
-		} else {
-			phy->pll_fbd_p = n_pll;
-			phy->pll_pre_div1p = 0;
-		}
-
-		if (phy->pll_fbd_2p <= 7 && phy->pll_fbd_2p >= 4)
-			r_pll = 0x10 >> (7 - phy->pll_fbd_2p);
-
-		if (m_pll == 2) {
-			phy->pll_pre_p = 0;
-			phy->pll_fbd_s = 0;
-			phy->pll_fbd_div1f = 0;
-			phy->pll_fbd_div5f = 1;
-		} else if (m_pll >= 2 * 2 * r_pll && m_pll <= 2 * 4 * r_pll) {
-			phy->pll_pre_p = m_pll / (2 * r_pll);
-			phy->pll_fbd_s = 0;
-			phy->pll_fbd_div1f = 1;
-			phy->pll_fbd_div5f = 0;
-		} else if (m_pll >= 2 * 5 * r_pll && m_pll <= 2 * 150 * r_pll) {
-			if (((m_pll / (2 * r_pll)) % 2) == 0) {
-				phy->pll_pre_p =
-					(m_pll / (2 * r_pll)) / 2 - 1;
-				phy->pll_fbd_s =
-					(m_pll / (2 * r_pll)) % 2 + 2;
-			} else {
-				phy->pll_pre_p =
-					(m_pll / (2 * r_pll)) / 2;
-				phy->pll_fbd_s =
-					(m_pll / (2 * r_pll)) % 2;
-			}
-			phy->pll_fbd_div1f = 0;
-			phy->pll_fbd_div5f = 0;
-		} else {
-			phy->pll_pre_p = 0;
-			phy->pll_fbd_s = 0;
-			phy->pll_fbd_div1f = 0;
-			phy->pll_fbd_div5f = 1;
-		}
-
-		f_kHz = (u64)1000000000 * (u64)m_pll /
-			((u64)ref_clk_ps * (u64)n_pll * (u64)q_pll);
-
-		if (f_kHz >= req_kHz)
-			break;
-
-		tmp_kHz += 10;
-
-	} while (true);
-
-	return f_kHz;
-}
-
-static void dsi_get_phy_params(u32 phy_req_kHz,
-			       struct mipi_phy_params *phy)
-{
-	u32 ref_clk_ps = PHY_REF_CLK_PERIOD_PS;
-	u32 phy_rate_kHz;
-	u32 ui;
-
-	memset(phy, 0, sizeof(*phy));
-
-	phy_rate_kHz = dsi_calc_phy_rate(phy_req_kHz, phy);
-	if (!phy_rate_kHz)
-		return;
-
-	ui = 1000000 / phy_rate_kHz;
-
-	phy->clk_t_lpx = ROUND(50, 8 * ui);
-	phy->clk_t_hs_prepare = ROUND(133, 16 * ui) - 1;
-
-	phy->clk_t_hs_zero = ROUND(262, 8 * ui);
-	phy->clk_t_hs_trial = 2 * (ROUND(60, 8 * ui) - 1);
-	phy->clk_t_wakeup = ROUND(1000000, (ref_clk_ps / 1000) - 1);
-	if (phy->clk_t_wakeup > 0xff)
-		phy->clk_t_wakeup = 0xff;
-	phy->data_t_wakeup = phy->clk_t_wakeup;
-	phy->data_t_lpx = phy->clk_t_lpx;
-	phy->data_t_hs_prepare = ROUND(125 + 10 * ui, 16 * ui) - 1;
-	phy->data_t_hs_zero = ROUND(105 + 6 * ui, 8 * ui);
-	phy->data_t_hs_trial = 2 * (ROUND(60 + 4 * ui, 8 * ui) - 1);
-	phy->data_t_ta_go = 3;
-	phy->data_t_ta_get = 4;
-
-	phy->pll_enbwt = 1;
-	phy->clklp2hs_time = ROUND(407, 8 * ui) + 12;
-	phy->clkhs2lp_time = ROUND(105 + 12 * ui, 8 * ui);
-	phy->lp2hs_time = ROUND(240 + 12 * ui, 8 * ui) + 1;
-	phy->hs2lp_time = phy->clkhs2lp_time;
-	phy->clk_to_data_delay = 1 + phy->clklp2hs_time;
-	phy->data_to_clk_delay = ROUND(60 + 52 * ui, 8 * ui) +
-				phy->clkhs2lp_time;
-
-	phy->lane_byte_clk_kHz = phy_rate_kHz / 8;
-	phy->clk_division =
-		DIV_ROUND_UP(phy->lane_byte_clk_kHz, MAX_TX_ESC_CLK);
-}
-
-static u32 dsi_get_dpi_color_coding(enum mipi_dsi_pixel_format format)
-{
-	u32 val;
-
-	/*
-	 * TODO: only support RGB888 now, to support more
-	 */
-	switch (format) {
-	case MIPI_DSI_FMT_RGB888:
-		val = DSI_24BITS_1;
-		break;
-	default:
-		val = DSI_24BITS_1;
-		break;
-	}
-
-	return val;
-}
-
-/*
- * dsi phy reg write function
- */
-static void dsi_phy_tst_set(void __iomem *base, u32 reg, u32 val)
-{
-	u32 reg_write = 0x10000 + reg;
-
-	/*
-	 * latch reg first
-	 */
-	writel(reg_write, base + PHY_TST_CTRL1);
-	writel(0x02, base + PHY_TST_CTRL0);
-	writel(0x00, base + PHY_TST_CTRL0);
-
-	/*
-	 * then latch value
-	 */
-	writel(val, base + PHY_TST_CTRL1);
-	writel(0x02, base + PHY_TST_CTRL0);
-	writel(0x00, base + PHY_TST_CTRL0);
-}
-
-static void dsi_set_phy_timer(void __iomem *base,
-			      struct mipi_phy_params *phy,
-			      u32 lanes)
-{
-	u32 val;
-
-	/*
-	 * Set lane value and phy stop wait time.
-	 */
-	val = (lanes - 1) | (PHY_STOP_WAIT_TIME << 8);
-	writel(val, base + PHY_IF_CFG);
-
-	/*
-	 * Set phy clk division.
-	 */
-	val = readl(base + CLKMGR_CFG) | phy->clk_division;
-	writel(val, base + CLKMGR_CFG);
-
-	/*
-	 * Set lp and hs switching params.
-	 */
-	dw_update_bits(base + PHY_TMR_CFG, 24, MASK(8), phy->hs2lp_time);
-	dw_update_bits(base + PHY_TMR_CFG, 16, MASK(8), phy->lp2hs_time);
-	dw_update_bits(base + PHY_TMR_LPCLK_CFG, 16, MASK(10),
-		       phy->clkhs2lp_time);
-	dw_update_bits(base + PHY_TMR_LPCLK_CFG, 0, MASK(10),
-		       phy->clklp2hs_time);
-	dw_update_bits(base + CLK_DATA_TMR_CFG, 8, MASK(8),
-		       phy->data_to_clk_delay);
-	dw_update_bits(base + CLK_DATA_TMR_CFG, 0, MASK(8),
-		       phy->clk_to_data_delay);
-}
-
-static void dsi_set_mipi_phy(void __iomem *base,
-			     struct mipi_phy_params *phy,
-			     u32 lanes)
-{
-	u32 delay_count;
-	u32 val;
-	u32 i;
-
-	/* phy timer setting */
-	dsi_set_phy_timer(base, phy, lanes);
-
-	/*
-	 * Reset to clean up phy tst params.
-	 */
-	writel(0, base + PHY_RSTZ);
-	writel(0, base + PHY_TST_CTRL0);
-	writel(1, base + PHY_TST_CTRL0);
-	writel(0, base + PHY_TST_CTRL0);
-
-	/*
-	 * Clock lane timing control setting: TLPX, THS-PREPARE,
-	 * THS-ZERO, THS-TRAIL, TWAKEUP.
-	 */
-	dsi_phy_tst_set(base, CLK_TLPX, phy->clk_t_lpx);
-	dsi_phy_tst_set(base, CLK_THS_PREPARE, phy->clk_t_hs_prepare);
-	dsi_phy_tst_set(base, CLK_THS_ZERO, phy->clk_t_hs_zero);
-	dsi_phy_tst_set(base, CLK_THS_TRAIL, phy->clk_t_hs_trial);
-	dsi_phy_tst_set(base, CLK_TWAKEUP, phy->clk_t_wakeup);
-
-	/*
-	 * Data lane timing control setting: TLPX, THS-PREPARE,
-	 * THS-ZERO, THS-TRAIL, TTA-GO, TTA-GET, TWAKEUP.
-	 */
-	for (i = 0; i < lanes; i++) {
-		dsi_phy_tst_set(base, DATA_TLPX(i), phy->data_t_lpx);
-		dsi_phy_tst_set(base, DATA_THS_PREPARE(i),
-				phy->data_t_hs_prepare);
-		dsi_phy_tst_set(base, DATA_THS_ZERO(i), phy->data_t_hs_zero);
-		dsi_phy_tst_set(base, DATA_THS_TRAIL(i), phy->data_t_hs_trial);
-		dsi_phy_tst_set(base, DATA_TTA_GO(i), phy->data_t_ta_go);
-		dsi_phy_tst_set(base, DATA_TTA_GET(i), phy->data_t_ta_get);
-		dsi_phy_tst_set(base, DATA_TWAKEUP(i), phy->data_t_wakeup);
-	}
-
-	/*
-	 * physical configuration: I, pll I, pll II, pll III,
-	 * pll IV, pll V.
-	 */
-	dsi_phy_tst_set(base, PHY_CFG_I, phy->hstx_ckg_sel);
-	val = (phy->pll_fbd_div5f << 5) + (phy->pll_fbd_div1f << 4) +
-				(phy->pll_fbd_2p << 1) + phy->pll_enbwt;
-	dsi_phy_tst_set(base, PHY_CFG_PLL_I, val);
-	dsi_phy_tst_set(base, PHY_CFG_PLL_II, phy->pll_fbd_p);
-	dsi_phy_tst_set(base, PHY_CFG_PLL_III, phy->pll_fbd_s);
-	val = (phy->pll_pre_div1p << 7) + phy->pll_pre_p;
-	dsi_phy_tst_set(base, PHY_CFG_PLL_IV, val);
-	val = (5 << 5) + (phy->pll_vco_750M << 4) + (phy->pll_lpf_rs << 2) +
-		phy->pll_lpf_cs;
-	dsi_phy_tst_set(base, PHY_CFG_PLL_V, val);
-
-	writel(PHY_ENABLECLK, base + PHY_RSTZ);
-	udelay(1);
-	writel(PHY_ENABLECLK | PHY_UNSHUTDOWNZ, base + PHY_RSTZ);
-	udelay(1);
-	writel(PHY_ENABLECLK | PHY_UNRSTZ | PHY_UNSHUTDOWNZ, base + PHY_RSTZ);
-	usleep_range(1000, 1500);
-
-	/*
-	 * wait for phy's clock ready
-	 */
-	delay_count = 100;
-	while (delay_count) {
-		val = readl(base +  PHY_STATUS);
-		if ((BIT(0) | BIT(2)) & val)
-			break;
-
-		udelay(1);
-		delay_count--;
-	}
-
-	if (!delay_count)
-		DRM_INFO("phylock and phystopstateclklane is not ready.\n");
-}
-
-static void dsi_set_mode_timing(void __iomem *base,
-				u32 lane_byte_clk_kHz,
-				struct drm_display_mode *mode,
-				enum mipi_dsi_pixel_format format)
-{
-	u32 hfp, hbp, hsw, vfp, vbp, vsw;
-	u32 hline_time;
-	u32 hsa_time;
-	u32 hbp_time;
-	u32 pixel_clk_kHz;
-	int htot, vtot;
-	u32 val;
-	u64 tmp;
-
-	val = dsi_get_dpi_color_coding(format);
-	writel(val, base + DPI_COLOR_CODING);
-
-	val = (mode->flags & DRM_MODE_FLAG_NHSYNC ? 1 : 0) << 2;
-	val |= (mode->flags & DRM_MODE_FLAG_NVSYNC ? 1 : 0) << 1;
-	writel(val, base +  DPI_CFG_POL);
-
-	/*
-	 * The DSI IP accepts vertical timing using lines as normal,
-	 * but horizontal timing is a mixture of pixel-clocks for the
-	 * active region and byte-lane clocks for the blanking-related
-	 * timings.  hfp is specified as the total hline_time in byte-
-	 * lane clocks minus hsa, hbp and active.
-	 */
-	pixel_clk_kHz = mode->clock;
-	htot = mode->htotal;
-	vtot = mode->vtotal;
-	hfp = mode->hsync_start - mode->hdisplay;
-	hbp = mode->htotal - mode->hsync_end;
-	hsw = mode->hsync_end - mode->hsync_start;
-	vfp = mode->vsync_start - mode->vdisplay;
-	vbp = mode->vtotal - mode->vsync_end;
-	vsw = mode->vsync_end - mode->vsync_start;
-	if (vsw > 15) {
-		DRM_DEBUG_DRIVER("vsw exceeded 15\n");
-		vsw = 15;
-	}
-
-	hsa_time = (hsw * lane_byte_clk_kHz) / pixel_clk_kHz;
-	hbp_time = (hbp * lane_byte_clk_kHz) / pixel_clk_kHz;
-	tmp = (u64)htot * (u64)lane_byte_clk_kHz;
-	hline_time = DIV_ROUND_UP(tmp, pixel_clk_kHz);
-
-	/* all specified in byte-lane clocks */
-	writel(hsa_time, base + VID_HSA_TIME);
-	writel(hbp_time, base + VID_HBP_TIME);
-	writel(hline_time, base + VID_HLINE_TIME);
-
-	writel(vsw, base + VID_VSA_LINES);
-	writel(vbp, base + VID_VBP_LINES);
-	writel(vfp, base + VID_VFP_LINES);
-	writel(mode->vdisplay, base + VID_VACTIVE_LINES);
-	writel(mode->hdisplay, base + VID_PKT_SIZE);
-
-	DRM_DEBUG_DRIVER("htot=%d, hfp=%d, hbp=%d, hsw=%d\n",
-			 htot, hfp, hbp, hsw);
-	DRM_DEBUG_DRIVER("vtol=%d, vfp=%d, vbp=%d, vsw=%d\n",
-			 vtot, vfp, vbp, vsw);
-	DRM_DEBUG_DRIVER("hsa_time=%d, hbp_time=%d, hline_time=%d\n",
-			 hsa_time, hbp_time, hline_time);
-}
-
-static void dsi_set_video_mode(void __iomem *base, unsigned long flags)
-{
-	u32 val;
-	u32 mode_mask = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
-		MIPI_DSI_MODE_VIDEO_SYNC_PULSE;
-	u32 non_burst_sync_pulse = MIPI_DSI_MODE_VIDEO |
-		MIPI_DSI_MODE_VIDEO_SYNC_PULSE;
-	u32 non_burst_sync_event = MIPI_DSI_MODE_VIDEO;
-
-	/*
-	 * choose video mode type
-	 */
-	if ((flags & mode_mask) == non_burst_sync_pulse)
-		val = DSI_NON_BURST_SYNC_PULSES;
-	else if ((flags & mode_mask) == non_burst_sync_event)
-		val = DSI_NON_BURST_SYNC_EVENTS;
-	else
-		val = DSI_BURST_SYNC_PULSES_1;
-	writel(val, base + VID_MODE_CFG);
-
-	writel(PHY_TXREQUESTCLKHS, base + LPCLK_CTRL);
-	writel(DSI_VIDEO_MODE, base + MODE_CFG);
-}
-
-static void dsi_mipi_init(struct dw_dsi *dsi)
-{
-	struct dsi_hw_ctx *ctx = dsi->ctx;
-	struct mipi_phy_params *phy = &dsi->phy;
-	struct drm_display_mode *mode = &dsi->cur_mode;
-	u32 bpp = mipi_dsi_pixel_format_to_bpp(dsi->format);
-	void __iomem *base = ctx->base;
-	u32 dphy_req_kHz;
-
-	/*
-	 * count phy params
-	 */
-	dphy_req_kHz = mode->clock * bpp / dsi->lanes;
-	dsi_get_phy_params(dphy_req_kHz, phy);
-
-	/* reset Core */
-	writel(RESET, base + PWR_UP);
-
-	/* set dsi phy params */
-	dsi_set_mipi_phy(base, phy, dsi->lanes);
-
-	/* set dsi mode timing */
-	dsi_set_mode_timing(base, phy->lane_byte_clk_kHz, mode, dsi->format);
-
-	/* set dsi video mode */
-	dsi_set_video_mode(base, dsi->mode_flags);
-
-	/* dsi wake up */
-	writel(POWERUP, base + PWR_UP);
-
-	DRM_DEBUG_DRIVER("lanes=%d, pixel_clk=%d kHz, bytes_freq=%d kHz\n",
-			 dsi->lanes, mode->clock, phy->lane_byte_clk_kHz);
-}
-
-static void dsi_encoder_disable(struct drm_encoder *encoder)
-{
-	struct dw_dsi *dsi = encoder_to_dsi(encoder);
-	struct dsi_hw_ctx *ctx = dsi->ctx;
-	void __iomem *base = ctx->base;
-
-	if (!dsi->enable)
-		return;
-
-	writel(0, base + PWR_UP);
-	writel(0, base + LPCLK_CTRL);
-	writel(0, base + PHY_RSTZ);
-	clk_disable_unprepare(ctx->pclk);
-
-	dsi->enable = false;
-}
-
-static void dsi_encoder_enable(struct drm_encoder *encoder)
-{
-	struct dw_dsi *dsi = encoder_to_dsi(encoder);
-	struct dsi_hw_ctx *ctx = dsi->ctx;
-	int ret;
-
-	if (dsi->enable)
-		return;
-
-	ret = clk_prepare_enable(ctx->pclk);
-	if (ret) {
-		DRM_ERROR("fail to enable pclk: %d\n", ret);
-		return;
-	}
-
-	dsi_mipi_init(dsi);
-
-	dsi->enable = true;
-}
-
-static enum drm_mode_status dsi_encoder_phy_mode_valid(
-					struct drm_encoder *encoder,
-					const struct drm_display_mode *mode)
-{
-	struct dw_dsi *dsi = encoder_to_dsi(encoder);
-	struct mipi_phy_params phy;
-	u32 bpp = mipi_dsi_pixel_format_to_bpp(dsi->format);
-	u32 req_kHz, act_kHz, lane_byte_clk_kHz;
-
-	/* Calculate the lane byte clk using the adjusted mode clk */
-	memset(&phy, 0, sizeof(phy));
-	req_kHz = mode->clock * bpp / dsi->lanes;
-	act_kHz = dsi_calc_phy_rate(req_kHz, &phy);
-	lane_byte_clk_kHz = act_kHz / 8;
-
-	DRM_DEBUG_DRIVER("Checking mode %ix%i-%i@%i clock: %i...",
-			mode->hdisplay, mode->vdisplay, bpp,
-			drm_mode_vrefresh(mode), mode->clock);
-
-	/*
-	 * Make sure the adjusted mode clock and the lane byte clk
-	 * have a common denominator base frequency
-	 */
-	if (mode->clock/dsi->lanes == lane_byte_clk_kHz/3) {
-		DRM_DEBUG_DRIVER("OK!\n");
-		return MODE_OK;
-	}
-
-	DRM_DEBUG_DRIVER("BAD!\n");
-	return MODE_BAD;
-}
-
-static enum drm_mode_status dsi_encoder_mode_valid(struct drm_encoder *encoder,
-					const struct drm_display_mode *mode)
-
-{
-	const struct drm_crtc_helper_funcs *crtc_funcs = NULL;
-	struct drm_crtc *crtc = NULL;
-	struct drm_display_mode adj_mode;
-	enum drm_mode_status ret;
-
-	/*
-	 * The crtc might adjust the mode, so go through the
-	 * possible crtcs (technically just one) and call
-	 * mode_fixup to figure out the adjusted mode before we
-	 * validate it.
-	 */
-	drm_for_each_crtc(crtc, encoder->dev) {
-		/*
-		 * reset adj_mode to the mode value each time,
-		 * so we don't adjust the mode twice
-		 */
-		drm_mode_copy(&adj_mode, mode);
-
-		crtc_funcs = crtc->helper_private;
-		if (crtc_funcs && crtc_funcs->mode_fixup)
-			if (!crtc_funcs->mode_fixup(crtc, mode, &adj_mode))
-				return MODE_BAD;
-
-		ret = dsi_encoder_phy_mode_valid(encoder, &adj_mode);
-		if (ret != MODE_OK)
-			return ret;
-	}
-	return MODE_OK;
-}
-
-static void dsi_encoder_mode_set(struct drm_encoder *encoder,
-				 struct drm_display_mode *mode,
-				 struct drm_display_mode *adj_mode)
-{
-	struct dw_dsi *dsi = encoder_to_dsi(encoder);
-
-	drm_mode_copy(&dsi->cur_mode, adj_mode);
-}
-
-static int dsi_encoder_atomic_check(struct drm_encoder *encoder,
-				    struct drm_crtc_state *crtc_state,
-				    struct drm_connector_state *conn_state)
-{
-	/* do nothing */
-	return 0;
-}
-
-static const struct drm_encoder_helper_funcs dw_encoder_helper_funcs = {
-	.atomic_check	= dsi_encoder_atomic_check,
-	.mode_valid	= dsi_encoder_mode_valid,
-	.mode_set	= dsi_encoder_mode_set,
-	.enable		= dsi_encoder_enable,
-	.disable	= dsi_encoder_disable
-};
-
-static const struct drm_encoder_funcs dw_encoder_funcs = {
-	.destroy = drm_encoder_cleanup,
-};
-
-static int dw_drm_encoder_init(struct device *dev,
-			       struct drm_device *drm_dev,
-			       struct drm_encoder *encoder)
-{
-	int ret;
-	u32 crtc_mask = drm_of_find_possible_crtcs(drm_dev, dev->of_node);
-
-	if (!crtc_mask) {
-		DRM_ERROR("failed to find crtc mask\n");
-		return -EINVAL;
-	}
-
-	encoder->possible_crtcs = crtc_mask;
-	ret = drm_encoder_init(drm_dev, encoder, &dw_encoder_funcs,
-			       DRM_MODE_ENCODER_DSI, NULL);
-	if (ret) {
-		DRM_ERROR("failed to init dsi encoder\n");
-		return ret;
-	}
-
-	drm_encoder_helper_add(encoder, &dw_encoder_helper_funcs);
-
-	return 0;
-}
-
-static int dsi_host_attach(struct mipi_dsi_host *host,
-			   struct mipi_dsi_device *mdsi)
-{
-	struct dw_dsi *dsi = host_to_dsi(host);
-
-	if (mdsi->lanes < 1 || mdsi->lanes > 4) {
-		DRM_ERROR("dsi device params invalid\n");
-		return -EINVAL;
-	}
-
-	dsi->lanes = mdsi->lanes;
-	dsi->format = mdsi->format;
-	dsi->mode_flags = mdsi->mode_flags;
-
-	return 0;
-}
-
-static int dsi_host_detach(struct mipi_dsi_host *host,
-			   struct mipi_dsi_device *mdsi)
-{
-	/* do nothing */
-	return 0;
-}
-
-static const struct mipi_dsi_host_ops dsi_host_ops = {
-	.attach = dsi_host_attach,
-	.detach = dsi_host_detach,
-};
-
-static int dsi_host_init(struct device *dev, struct dw_dsi *dsi)
-{
-	struct mipi_dsi_host *host = &dsi->host;
-	int ret;
-
-	host->dev = dev;
-	host->ops = &dsi_host_ops;
-	ret = mipi_dsi_host_register(host);
-	if (ret) {
-		DRM_ERROR("failed to register dsi host\n");
-		return ret;
-	}
-
-	return 0;
-}
-
-static int dsi_bridge_init(struct drm_device *dev, struct dw_dsi *dsi)
-{
-	struct drm_encoder *encoder = &dsi->encoder;
-	struct drm_bridge *bridge = dsi->bridge;
-	int ret;
-
-	/* associate the bridge to dsi encoder */
-	ret = drm_bridge_attach(encoder, bridge, NULL);
-	if (ret) {
-		DRM_ERROR("failed to attach external bridge\n");
-		return ret;
-	}
-
-	return 0;
-}
-
-static int dsi_bind(struct device *dev, struct device *master, void *data)
-{
-	struct dsi_data *ddata = dev_get_drvdata(dev);
-	struct dw_dsi *dsi = &ddata->dsi;
-	struct drm_device *drm_dev = data;
-	int ret;
-
-	ret = dw_drm_encoder_init(dev, drm_dev, &dsi->encoder);
-	if (ret)
-		return ret;
-
-	ret = dsi_host_init(dev, dsi);
-	if (ret)
-		return ret;
-
-	ret = dsi_bridge_init(drm_dev, dsi);
-	if (ret)
-		return ret;
-
-	return 0;
-}
-
-static void dsi_unbind(struct device *dev, struct device *master, void *data)
-{
-	/* do nothing */
-}
-
-static const struct component_ops dsi_ops = {
-	.bind	= dsi_bind,
-	.unbind	= dsi_unbind,
-};
-
-static int dsi_parse_dt(struct platform_device *pdev, struct dw_dsi *dsi)
-{
-	struct dsi_hw_ctx *ctx = dsi->ctx;
-	struct device_node *np = pdev->dev.of_node;
-	struct resource *res;
-	int ret;
-
-	/*
-	 * Get the endpoint node. In our case, dsi has one output port1
-	 * to which the external HDMI bridge is connected.
-	 */
-	ret = drm_of_find_panel_or_bridge(np, 1, 0, NULL, &dsi->bridge);
-	if (ret)
-		return ret;
-
-	ctx->pclk = devm_clk_get(&pdev->dev, "pclk");
-	if (IS_ERR(ctx->pclk)) {
-		DRM_ERROR("failed to get pclk clock\n");
-		return PTR_ERR(ctx->pclk);
-	}
-
-	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	ctx->base = devm_ioremap_resource(&pdev->dev, res);
-	if (IS_ERR(ctx->base)) {
-		DRM_ERROR("failed to remap dsi io region\n");
-		return PTR_ERR(ctx->base);
-	}
-
-	return 0;
-}
-
-static int dsi_probe(struct platform_device *pdev)
-{
-	struct dsi_data *data;
-	struct dw_dsi *dsi;
-	struct dsi_hw_ctx *ctx;
-	int ret;
-
-	data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
-	if (!data) {
-		DRM_ERROR("failed to allocate dsi data.\n");
-		return -ENOMEM;
-	}
-	dsi = &data->dsi;
-	ctx = &data->ctx;
-	dsi->ctx = ctx;
-
-	ret = dsi_parse_dt(pdev, dsi);
-	if (ret)
-		return ret;
-
-	platform_set_drvdata(pdev, data);
-
-	return component_add(&pdev->dev, &dsi_ops);
-}
-
-static int dsi_remove(struct platform_device *pdev)
-{
-	component_del(&pdev->dev, &dsi_ops);
-
-	return 0;
-}
-
-static const struct of_device_id dsi_of_match[] = {
-	{.compatible = "hisilicon,hi6220-dsi"},
-	{ }
-};
-MODULE_DEVICE_TABLE(of, dsi_of_match);
-
-static struct platform_driver dsi_driver = {
-	.probe = dsi_probe,
-	.remove = dsi_remove,
-	.driver = {
-		.name = "dw-dsi",
-		.of_match_table = dsi_of_match,
-	},
-};
-
-module_platform_driver(dsi_driver);
-
-MODULE_AUTHOR("Xinliang Liu <xinliang.liu@linaro.org>");
-MODULE_AUTHOR("Xinliang Liu <z.liuxinliang@hisilicon.com>");
-MODULE_AUTHOR("Xinwei Kong <kong.kongxinwei@hisilicon.com>");
-MODULE_DESCRIPTION("DesignWare MIPI DSI Host Controller v1.02 driver");
-MODULE_LICENSE("GPL v2");
diff --git a/drivers/gpu/drm/hisilicon/kirin/dw_dsi_reg.h b/drivers/gpu/drm/hisilicon/kirin/dw_dsi_reg.h
index 19e81ff..6c31ee0 100644
--- a/drivers/gpu/drm/hisilicon/kirin/dw_dsi_reg.h
+++ b/drivers/gpu/drm/hisilicon/kirin/dw_dsi_reg.h
@@ -8,7 +8,7 @@
 #define __DW_DSI_REG_H__
 
 #define MASK(x)				(BIT(x) - 1)
-
+#define DEFAULT_MAX_TX_ESC_CLK	(10 * 1000000UL)	//for hikey960
 /*
  * regs
  */
@@ -52,6 +52,50 @@
 #define VID_VACTIVE_LINES       0x60  /* Vertical resolution */
 #define VID_PKT_SIZE            0x3C  /* Video packet size */
 #define VID_MODE_CFG            0x38  /* Video mode configuration */
+/***************************for hikey960***********************************/
+#define GEN_HDR			0x6c
+#define GEN_HDATA(data)		(((data) & 0xffff) << 8)
+#define GEN_HDATA_MASK		(0xffff << 8)
+#define GEN_HTYPE(type)		(((type) & 0xff) << 0)
+#define GEN_HTYPE_MASK		0xff
+#define GEN_PLD_DATA		0x70
+#define CMD_PKT_STATUS		0x74
+#define GEN_CMD_EMPTY		BIT(0)
+#define GEN_CMD_FULL		BIT(1)
+#define GEN_PLD_W_EMPTY		BIT(2)
+#define GEN_PLD_W_FULL		BIT(3)
+#define GEN_PLD_R_EMPTY		BIT(4)
+#define GEN_PLD_R_FULL		BIT(5)
+#define GEN_RD_CMD_BUSY		BIT(6)
+#define CMD_MODE_CFG		0x68
+#define MAX_RD_PKT_SIZE_LP	BIT(24)
+#define DCS_LW_TX_LP		BIT(19)
+#define DCS_SR_0P_TX_LP		BIT(18)
+#define DCS_SW_1P_TX_LP		BIT(17)
+#define DCS_SW_0P_TX_LP		BIT(16)
+#define GEN_LW_TX_LP		BIT(14)
+#define GEN_SR_2P_TX_LP		BIT(13)
+#define GEN_SR_1P_TX_LP		BIT(12)
+#define GEN_SR_0P_TX_LP		BIT(11)
+#define GEN_SW_2P_TX_LP		BIT(10)
+#define GEN_SW_1P_TX_LP		BIT(9)
+#define GEN_SW_0P_TX_LP		BIT(8)
+#define EN_ACK_RQST		BIT(1)
+#define EN_TEAR_FX		BIT(0)
+#define CMD_PKT_STATUS_TIMEOUT_US	20000
+#define CMD_MODE_ALL_LP		(MAX_RD_PKT_SIZE_LP | \
+				 DCS_LW_TX_LP | \
+				 DCS_SR_0P_TX_LP | \
+				 DCS_SW_1P_TX_LP | \
+				 DCS_SW_0P_TX_LP | \
+				 GEN_LW_TX_LP | \
+				 GEN_SR_2P_TX_LP | \
+				 GEN_SR_1P_TX_LP | \
+				 GEN_SR_0P_TX_LP | \
+				 GEN_SW_2P_TX_LP | \
+				 GEN_SW_1P_TX_LP | \
+				 GEN_SW_0P_TX_LP)
+/***************************for hikey960***********************************/
 #define PHY_TMR_CFG             0x9C  /* Data lanes timing configuration */
 #define BTA_TO_CNT              0x8C  /* Response timeout definition */
 #define PHY_TMR_LPCLK_CFG       0x98  /* clock lane timing configuration */
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin/dw_drm_dsi.c b/drivers/gpu/drm/hisilicon/kirin/kirin/dw_drm_dsi.c
new file mode 100644
index 0000000..100f502
--- /dev/null
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin/dw_drm_dsi.c
@@ -0,0 +1,656 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * DesignWare MIPI DSI Host Controller v1.02 driver
+ *
+ * Copyright (c) 2016 Linaro Limited.
+ * Copyright (c) 2014-2016 Hisilicon Limited.
+ *
+ * Author:
+ *	Xinliang Liu <z.liuxinliang@hisilicon.com>
+ *	Xinliang Liu <xinliang.liu@linaro.org>
+ *	Xinwei Kong <kong.kongxinwei@hisilicon.com>
+ *	Da Lv <lvda3@hisilicon.com>
+ */
+
+#include <linux/clk.h>
+#include <linux/component.h>
+#include <linux/delay.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+
+#include <drm/drm_atomic_helper.h>
+#include <drm/drm_device.h>
+#include <drm/drm_encoder_slave.h>
+#include <drm/drm_mipi_dsi.h>
+#include <drm/drm_of.h>
+#include <drm/drm_print.h>
+#include <drm/drm_probe_helper.h>
+
+#include "../kirin_drm_dsi.h"
+#include "../dw_dsi_reg.h"
+
+#define MAX_TX_ESC_CLK		10
+
+static u32 dsi_calc_phy_rate(u32 req_kHz, struct mipi_phy_params *phy)
+{
+	u32 ref_clk_ps = PHY_REF_CLK_PERIOD_PS;
+	u32 tmp_kHz = req_kHz;
+	u32 i = 0;
+	u32 q_pll = 1;
+	u32 m_pll = 0;
+	u32 n_pll = 0;
+	u32 r_pll = 1;
+	u32 m_n = 0;
+	u32 m_n_int = 0;
+	u32 f_kHz = 0;
+	u64 temp;
+
+	/*
+	 * Find a rate >= req_kHz.
+	 */
+	do {
+		f_kHz = tmp_kHz;
+
+		for (i = 0; i < ARRAY_SIZE(dphy_range_info); i++)
+			if (f_kHz >= dphy_range_info[i].min_range_kHz &&
+			    f_kHz <= dphy_range_info[i].max_range_kHz)
+				break;
+
+		if (i == ARRAY_SIZE(dphy_range_info)) {
+			DRM_ERROR("%dkHz out of range\n", f_kHz);
+			return 0;
+		}
+
+		phy->pll_vco_750M = dphy_range_info[i].pll_vco_750M;
+		phy->hstx_ckg_sel = dphy_range_info[i].hstx_ckg_sel;
+
+		if (phy->hstx_ckg_sel <= 7 &&
+		    phy->hstx_ckg_sel >= 4)
+			q_pll = 0x10 >> (7 - phy->hstx_ckg_sel);
+
+		temp = f_kHz * (u64)q_pll * (u64)ref_clk_ps;
+		m_n_int = temp / (u64)1000000000;
+		m_n = (temp % (u64)1000000000) / (u64)100000000;
+
+		if (m_n_int % 2 == 0) {
+			if (m_n * 6 >= 50) {
+				n_pll = 2;
+				m_pll = (m_n_int + 1) * n_pll;
+			} else if (m_n * 6 >= 30) {
+				n_pll = 3;
+				m_pll = m_n_int * n_pll + 2;
+			} else {
+				n_pll = 1;
+				m_pll = m_n_int * n_pll;
+			}
+		} else {
+			if (m_n * 6 >= 50) {
+				n_pll = 1;
+				m_pll = (m_n_int + 1) * n_pll;
+			} else if (m_n * 6 >= 30) {
+				n_pll = 1;
+				m_pll = (m_n_int + 1) * n_pll;
+			} else if (m_n * 6 >= 10) {
+				n_pll = 3;
+				m_pll = m_n_int * n_pll + 1;
+			} else {
+				n_pll = 2;
+				m_pll = m_n_int * n_pll;
+			}
+		}
+
+		if (n_pll == 1) {
+			phy->pll_fbd_p = 0;
+			phy->pll_pre_div1p = 1;
+		} else {
+			phy->pll_fbd_p = n_pll;
+			phy->pll_pre_div1p = 0;
+		}
+
+		if (phy->pll_fbd_2p <= 7 && phy->pll_fbd_2p >= 4)
+			r_pll = 0x10 >> (7 - phy->pll_fbd_2p);
+
+		if (m_pll == 2) {
+			phy->pll_pre_p = 0;
+			phy->pll_fbd_s = 0;
+			phy->pll_fbd_div1f = 0;
+			phy->pll_fbd_div5f = 1;
+		} else if (m_pll >= 2 * 2 * r_pll && m_pll <= 2 * 4 * r_pll) {
+			phy->pll_pre_p = m_pll / (2 * r_pll);
+			phy->pll_fbd_s = 0;
+			phy->pll_fbd_div1f = 1;
+			phy->pll_fbd_div5f = 0;
+		} else if (m_pll >= 2 * 5 * r_pll && m_pll <= 2 * 150 * r_pll) {
+			if (((m_pll / (2 * r_pll)) % 2) == 0) {
+				phy->pll_pre_p =
+					(m_pll / (2 * r_pll)) / 2 - 1;
+				phy->pll_fbd_s =
+					(m_pll / (2 * r_pll)) % 2 + 2;
+			} else {
+				phy->pll_pre_p =
+					(m_pll / (2 * r_pll)) / 2;
+				phy->pll_fbd_s =
+					(m_pll / (2 * r_pll)) % 2;
+			}
+			phy->pll_fbd_div1f = 0;
+			phy->pll_fbd_div5f = 0;
+		} else {
+			phy->pll_pre_p = 0;
+			phy->pll_fbd_s = 0;
+			phy->pll_fbd_div1f = 0;
+			phy->pll_fbd_div5f = 1;
+		}
+
+		f_kHz = (u64)1000000000 * (u64)m_pll /
+			((u64)ref_clk_ps * (u64)n_pll * (u64)q_pll);
+
+		if (f_kHz >= req_kHz)
+			break;
+
+		tmp_kHz += 10;
+
+	} while (true);
+
+	return f_kHz;
+}
+
+static void dsi_get_phy_params(u32 phy_req_kHz,
+			       struct mipi_phy_params *phy)
+{
+	u32 ref_clk_ps = PHY_REF_CLK_PERIOD_PS;
+	u32 phy_rate_kHz;
+	u32 ui;
+
+	memset(phy, 0, sizeof(*phy));
+
+	phy_rate_kHz = dsi_calc_phy_rate(phy_req_kHz, phy);
+	if (!phy_rate_kHz)
+		return;
+
+	ui = 1000000 / phy_rate_kHz;
+
+	phy->clk_t_lpx = ROUND(50, 8 * ui);
+	phy->clk_t_hs_prepare = ROUND(133, 16 * ui) - 1;
+
+	phy->clk_t_hs_zero = ROUND(262, 8 * ui);
+	phy->clk_t_hs_trial = 2 * (ROUND(60, 8 * ui) - 1);
+	phy->clk_t_wakeup = ROUND(1000000, (ref_clk_ps / 1000) - 1);
+	if (phy->clk_t_wakeup > 0xff)
+		phy->clk_t_wakeup = 0xff;
+	phy->data_t_wakeup = phy->clk_t_wakeup;
+	phy->data_t_lpx = phy->clk_t_lpx;
+	phy->data_t_hs_prepare = ROUND(125 + 10 * ui, 16 * ui) - 1;
+	phy->data_t_hs_zero = ROUND(105 + 6 * ui, 8 * ui);
+	phy->data_t_hs_trial = 2 * (ROUND(60 + 4 * ui, 8 * ui) - 1);
+	phy->data_t_ta_go = 3;
+	phy->data_t_ta_get = 4;
+
+	phy->pll_enbwt = 1;
+	phy->clklp2hs_time = ROUND(407, 8 * ui) + 12;
+	phy->clkhs2lp_time = ROUND(105 + 12 * ui, 8 * ui);
+	phy->lp2hs_time = ROUND(240 + 12 * ui, 8 * ui) + 1;
+	phy->hs2lp_time = phy->clkhs2lp_time;
+	phy->clk_to_data_delay = 1 + phy->clklp2hs_time;
+	phy->data_to_clk_delay = ROUND(60 + 52 * ui, 8 * ui) +
+				phy->clkhs2lp_time;
+
+	phy->lane_byte_clk_kHz = phy_rate_kHz / 8;
+	phy->clk_division =
+		DIV_ROUND_UP(phy->lane_byte_clk_kHz, MAX_TX_ESC_CLK);
+}
+
+static u32 dsi_get_dpi_color_coding(enum mipi_dsi_pixel_format format)
+{
+	u32 val;
+
+	/*
+	 * TODO: only support RGB888 now, to support more
+	 */
+	switch (format) {
+	case MIPI_DSI_FMT_RGB888:
+		val = DSI_24BITS_1;
+		break;
+	default:
+		val = DSI_24BITS_1;
+		break;
+	}
+
+	return val;
+}
+
+/*
+ * dsi phy reg write function
+ */
+static void dsi_phy_tst_set(void __iomem *base, u32 reg, u32 val)
+{
+	u32 reg_write = 0x10000 + reg;
+
+	/*
+	 * latch reg first
+	 */
+	writel(reg_write, base + PHY_TST_CTRL1);
+	writel(0x02, base + PHY_TST_CTRL0);
+	writel(0x00, base + PHY_TST_CTRL0);
+
+	/*
+	 * then latch value
+	 */
+	writel(val, base + PHY_TST_CTRL1);
+	writel(0x02, base + PHY_TST_CTRL0);
+	writel(0x00, base + PHY_TST_CTRL0);
+}
+
+static void dsi_set_phy_timer(void __iomem *base,
+			      struct mipi_phy_params *phy,
+			      u32 lanes)
+{
+	u32 val;
+
+	/*
+	 * Set lane value and phy stop wait time.
+	 */
+	val = (lanes - 1) | (PHY_STOP_WAIT_TIME << 8);
+	writel(val, base + PHY_IF_CFG);
+
+	/*
+	 * Set phy clk division.
+	 */
+	val = readl(base + CLKMGR_CFG) | phy->clk_division;
+	writel(val, base + CLKMGR_CFG);
+
+	/*
+	 * Set lp and hs switching params.
+	 */
+	dw_update_bits(base + PHY_TMR_CFG, 24, MASK(8), phy->hs2lp_time);
+	dw_update_bits(base + PHY_TMR_CFG, 16, MASK(8), phy->lp2hs_time);
+	dw_update_bits(base + PHY_TMR_LPCLK_CFG, 16, MASK(10),
+		       phy->clkhs2lp_time);
+	dw_update_bits(base + PHY_TMR_LPCLK_CFG, 0, MASK(10),
+		       phy->clklp2hs_time);
+	dw_update_bits(base + CLK_DATA_TMR_CFG, 8, MASK(8),
+		       phy->data_to_clk_delay);
+	dw_update_bits(base + CLK_DATA_TMR_CFG, 0, MASK(8),
+		       phy->clk_to_data_delay);
+}
+
+static void dsi_set_mipi_phy(void __iomem *base,
+			     struct mipi_phy_params *phy,
+			     u32 lanes)
+{
+	u32 delay_count;
+	u32 val;
+	u32 i;
+
+	/* phy timer setting */
+	dsi_set_phy_timer(base, phy, lanes);
+
+	/*
+	 * Reset to clean up phy tst params.
+	 */
+	writel(0, base + PHY_RSTZ);
+	writel(0, base + PHY_TST_CTRL0);
+	writel(1, base + PHY_TST_CTRL0);
+	writel(0, base + PHY_TST_CTRL0);
+
+	/*
+	 * Clock lane timing control setting: TLPX, THS-PREPARE,
+	 * THS-ZERO, THS-TRAIL, TWAKEUP.
+	 */
+	dsi_phy_tst_set(base, CLK_TLPX, phy->clk_t_lpx);
+	dsi_phy_tst_set(base, CLK_THS_PREPARE, phy->clk_t_hs_prepare);
+	dsi_phy_tst_set(base, CLK_THS_ZERO, phy->clk_t_hs_zero);
+	dsi_phy_tst_set(base, CLK_THS_TRAIL, phy->clk_t_hs_trial);
+	dsi_phy_tst_set(base, CLK_TWAKEUP, phy->clk_t_wakeup);
+
+	/*
+	 * Data lane timing control setting: TLPX, THS-PREPARE,
+	 * THS-ZERO, THS-TRAIL, TTA-GO, TTA-GET, TWAKEUP.
+	 */
+	for (i = 0; i < lanes; i++) {
+		dsi_phy_tst_set(base, DATA_TLPX(i), phy->data_t_lpx);
+		dsi_phy_tst_set(base, DATA_THS_PREPARE(i),
+				phy->data_t_hs_prepare);
+		dsi_phy_tst_set(base, DATA_THS_ZERO(i), phy->data_t_hs_zero);
+		dsi_phy_tst_set(base, DATA_THS_TRAIL(i), phy->data_t_hs_trial);
+		dsi_phy_tst_set(base, DATA_TTA_GO(i), phy->data_t_ta_go);
+		dsi_phy_tst_set(base, DATA_TTA_GET(i), phy->data_t_ta_get);
+		dsi_phy_tst_set(base, DATA_TWAKEUP(i), phy->data_t_wakeup);
+	}
+
+	/*
+	 * physical configuration: I, pll I, pll II, pll III,
+	 * pll IV, pll V.
+	 */
+	dsi_phy_tst_set(base, PHY_CFG_I, phy->hstx_ckg_sel);
+	val = (phy->pll_fbd_div5f << 5) + (phy->pll_fbd_div1f << 4) +
+				(phy->pll_fbd_2p << 1) + phy->pll_enbwt;
+	dsi_phy_tst_set(base, PHY_CFG_PLL_I, val);
+	dsi_phy_tst_set(base, PHY_CFG_PLL_II, phy->pll_fbd_p);
+	dsi_phy_tst_set(base, PHY_CFG_PLL_III, phy->pll_fbd_s);
+	val = (phy->pll_pre_div1p << 7) + phy->pll_pre_p;
+	dsi_phy_tst_set(base, PHY_CFG_PLL_IV, val);
+	val = (5 << 5) + (phy->pll_vco_750M << 4) + (phy->pll_lpf_rs << 2) +
+		phy->pll_lpf_cs;
+	dsi_phy_tst_set(base, PHY_CFG_PLL_V, val);
+
+	writel(PHY_ENABLECLK, base + PHY_RSTZ);
+	udelay(1);
+	writel(PHY_ENABLECLK | PHY_UNSHUTDOWNZ, base + PHY_RSTZ);
+	udelay(1);
+	writel(PHY_ENABLECLK | PHY_UNRSTZ | PHY_UNSHUTDOWNZ, base + PHY_RSTZ);
+	usleep_range(1000, 1500);
+
+	/*
+	 * wait for phy's clock ready
+	 */
+	delay_count = 100;
+	while (delay_count) {
+		val = readl(base +  PHY_STATUS);
+		if ((BIT(0) | BIT(2)) & val)
+			break;
+
+		udelay(1);
+		delay_count--;
+	}
+
+	if (!delay_count)
+		DRM_INFO("phylock and phystopstateclklane is not ready.\n");
+}
+
+static void dsi_set_mode_timing(void __iomem *base,
+				u32 lane_byte_clk_kHz,
+				struct drm_display_mode *mode,
+				enum mipi_dsi_pixel_format format)
+{
+	u32 hfp, hbp, hsw, vfp, vbp, vsw;
+	u32 hline_time;
+	u32 hsa_time;
+	u32 hbp_time;
+	u32 pixel_clk_kHz;
+	int htot, vtot;
+	u32 val;
+	u64 tmp;
+
+	val = dsi_get_dpi_color_coding(format);
+	writel(val, base + DPI_COLOR_CODING);
+
+	val = (mode->flags & DRM_MODE_FLAG_NHSYNC ? 1 : 0) << 2;
+	val |= (mode->flags & DRM_MODE_FLAG_NVSYNC ? 1 : 0) << 1;
+	writel(val, base +  DPI_CFG_POL);
+
+	/*
+	 * The DSI IP accepts vertical timing using lines as normal,
+	 * but horizontal timing is a mixture of pixel-clocks for the
+	 * active region and byte-lane clocks for the blanking-related
+	 * timings.  hfp is specified as the total hline_time in byte-
+	 * lane clocks minus hsa, hbp and active.
+	 */
+	pixel_clk_kHz = mode->clock;
+	htot = mode->htotal;
+	vtot = mode->vtotal;
+	hfp = mode->hsync_start - mode->hdisplay;
+	hbp = mode->htotal - mode->hsync_end;
+	hsw = mode->hsync_end - mode->hsync_start;
+	vfp = mode->vsync_start - mode->vdisplay;
+	vbp = mode->vtotal - mode->vsync_end;
+	vsw = mode->vsync_end - mode->vsync_start;
+	if (vsw > 15) {
+		DRM_DEBUG_DRIVER("vsw exceeded 15\n");
+		vsw = 15;
+	}
+
+	hsa_time = (hsw * lane_byte_clk_kHz) / pixel_clk_kHz;
+	hbp_time = (hbp * lane_byte_clk_kHz) / pixel_clk_kHz;
+	tmp = (u64)htot * (u64)lane_byte_clk_kHz;
+	hline_time = DIV_ROUND_UP(tmp, pixel_clk_kHz);
+
+	/* all specified in byte-lane clocks */
+	writel(hsa_time, base + VID_HSA_TIME);
+	writel(hbp_time, base + VID_HBP_TIME);
+	writel(hline_time, base + VID_HLINE_TIME);
+
+	writel(vsw, base + VID_VSA_LINES);
+	writel(vbp, base + VID_VBP_LINES);
+	writel(vfp, base + VID_VFP_LINES);
+	writel(mode->vdisplay, base + VID_VACTIVE_LINES);
+	writel(mode->hdisplay, base + VID_PKT_SIZE);
+
+	DRM_DEBUG_DRIVER("htot=%d, hfp=%d, hbp=%d, hsw=%d\n",
+			 htot, hfp, hbp, hsw);
+	DRM_DEBUG_DRIVER("vtol=%d, vfp=%d, vbp=%d, vsw=%d\n",
+			 vtot, vfp, vbp, vsw);
+	DRM_DEBUG_DRIVER("hsa_time=%d, hbp_time=%d, hline_time=%d\n",
+			 hsa_time, hbp_time, hline_time);
+}
+
+static void dsi_set_video_mode(void __iomem *base, unsigned long flags)
+{
+	u32 val;
+	u32 mode_mask = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
+		MIPI_DSI_MODE_VIDEO_SYNC_PULSE;
+	u32 non_burst_sync_pulse = MIPI_DSI_MODE_VIDEO |
+		MIPI_DSI_MODE_VIDEO_SYNC_PULSE;
+	u32 non_burst_sync_event = MIPI_DSI_MODE_VIDEO;
+
+	/*
+	 * choose video mode type
+	 */
+	if ((flags & mode_mask) == non_burst_sync_pulse)
+		val = DSI_NON_BURST_SYNC_PULSES;
+	else if ((flags & mode_mask) == non_burst_sync_event)
+		val = DSI_NON_BURST_SYNC_EVENTS;
+	else
+		val = DSI_BURST_SYNC_PULSES_1;
+	writel(val, base + VID_MODE_CFG);
+
+	writel(PHY_TXREQUESTCLKHS, base + LPCLK_CTRL);
+	writel(DSI_VIDEO_MODE, base + MODE_CFG);
+}
+
+static void dsi_mipi_init(struct dw_dsi *dsi)
+{
+	struct dsi_hw_ctx *ctx = dsi->ctx;
+	struct mipi_phy_params *phy = &dsi->phy;
+	struct drm_display_mode *mode = &dsi->cur_mode;
+	u32 bpp = mipi_dsi_pixel_format_to_bpp(dsi->format);
+	void __iomem *base = ctx->base;
+	u32 dphy_req_kHz;
+
+	/*
+	 * count phy params
+	 */
+	dphy_req_kHz = mode->clock * bpp / dsi->lanes;
+	dsi_get_phy_params(dphy_req_kHz, phy);
+
+	/* reset Core */
+	writel(RESET, base + PWR_UP);
+
+	/* set dsi phy params */
+	dsi_set_mipi_phy(base, phy, dsi->lanes);
+
+	/* set dsi mode timing */
+	dsi_set_mode_timing(base, phy->lane_byte_clk_kHz, mode, dsi->format);
+
+	/* set dsi video mode */
+	dsi_set_video_mode(base, dsi->mode_flags);
+
+	/* dsi wake up */
+	writel(POWERUP, base + PWR_UP);
+
+	DRM_DEBUG_DRIVER("lanes=%d, pixel_clk=%d kHz, bytes_freq=%d kHz\n",
+			 dsi->lanes, mode->clock, phy->lane_byte_clk_kHz);
+}
+
+static void dsi_encoder_enable_sub(struct drm_encoder *encoder)
+{
+	struct dw_dsi *dsi = encoder_to_dsi(encoder);
+	struct dsi_hw_ctx *ctx = dsi->ctx;
+	int ret;
+
+	if (dsi->enable)
+		return;
+
+	ret = clk_prepare_enable(ctx->pclk);
+	if (ret) {
+		DRM_ERROR("fail to enable pclk: %d\n", ret);
+		return;
+	}
+
+	dsi_mipi_init(dsi);
+}
+
+static enum drm_mode_status dsi_encoder_phy_mode_valid(
+					struct drm_encoder *encoder,
+					const struct drm_display_mode *mode)
+{
+	struct dw_dsi *dsi = encoder_to_dsi(encoder);
+	struct mipi_phy_params phy;
+	u32 bpp = mipi_dsi_pixel_format_to_bpp(dsi->format);
+	u32 req_kHz, act_kHz, lane_byte_clk_kHz;
+
+	/* Calculate the lane byte clk using the adjusted mode clk */
+	memset(&phy, 0, sizeof(phy));
+	req_kHz = mode->clock * bpp / dsi->lanes;
+	act_kHz = dsi_calc_phy_rate(req_kHz, &phy);
+	lane_byte_clk_kHz = act_kHz / 8;
+
+	DRM_DEBUG_DRIVER("Checking mode %ix%i-%i@%i clock: %i...",
+			mode->hdisplay, mode->vdisplay, bpp,
+			drm_mode_vrefresh(mode), mode->clock);
+
+	/*
+	 * Make sure the adjusted mode clock and the lane byte clk
+	 * have a common denominator base frequency
+	 */
+	if (mode->clock/dsi->lanes == lane_byte_clk_kHz/3) {
+		DRM_DEBUG_DRIVER("OK!\n");
+		return MODE_OK;
+	}
+
+	DRM_DEBUG_DRIVER("BAD!\n");
+	return MODE_BAD;
+}
+
+static enum drm_mode_status dsi_encoder_mode_valid(struct drm_encoder *encoder,
+					const struct drm_display_mode *mode)
+
+{
+	const struct drm_crtc_helper_funcs *crtc_funcs = NULL;
+	struct drm_crtc *crtc = NULL;
+	struct drm_display_mode adj_mode;
+	enum drm_mode_status ret;
+
+	/*
+	 * The crtc might adjust the mode, so go through the
+	 * possible crtcs (technically just one) and call
+	 * mode_fixup to figure out the adjusted mode before we
+	 * validate it.
+	 */
+	drm_for_each_crtc(crtc, encoder->dev) {
+		/*
+		 * reset adj_mode to the mode value each time,
+		 * so we don't adjust the mode twice
+		 */
+		drm_mode_copy(&adj_mode, mode);
+
+		crtc_funcs = crtc->helper_private;
+		if (crtc_funcs && crtc_funcs->mode_fixup)
+			if (!crtc_funcs->mode_fixup(crtc, mode, &adj_mode))
+				return MODE_BAD;
+
+		ret = dsi_encoder_phy_mode_valid(encoder, &adj_mode);
+		if (ret != MODE_OK)
+			return ret;
+	}
+	return MODE_OK;
+}
+
+static int dsi_host_attach(struct mipi_dsi_host *host,
+			   struct mipi_dsi_device *mdsi)
+{
+	struct dw_dsi *dsi = host_to_dsi(host);
+
+	if (mdsi->lanes < 1 || mdsi->lanes > 4) {
+		DRM_ERROR("dsi device params invalid\n");
+		return -EINVAL;
+	}
+
+	dsi->lanes = mdsi->lanes;
+	dsi->format = mdsi->format;
+	dsi->mode_flags = mdsi->mode_flags;
+
+	return 0;
+}
+
+static int dsi_host_detach(struct mipi_dsi_host *host,
+			   struct mipi_dsi_device *mdsi)
+{
+	/* do nothing */
+	return 0;
+}
+
+static const struct mipi_dsi_host_ops dsi_host_ops = {
+	.attach = dsi_host_attach,
+	.detach = dsi_host_detach,
+};
+
+static int dsi_host_init(struct device *dev, struct dw_dsi *dsi)
+{
+	struct mipi_dsi_host *host = &dsi->host;
+	int ret;
+
+	host->dev = dev;
+	host->ops = &dsi_host_ops;
+	ret = mipi_dsi_host_register(host);
+	if (ret) {
+		DRM_ERROR("failed to register dsi host\n");
+		return ret;
+	}
+
+	return 0;
+}
+
+static int dsi_parse_dt(struct platform_device *pdev, struct dw_dsi *dsi)
+{
+	struct dsi_hw_ctx *ctx = dsi->ctx;
+	struct device_node *np = pdev->dev.of_node;
+	struct resource *res;
+	int ret;
+
+	/*
+	 * Get the endpoint node. In our case, dsi has one output port1
+	 * to which the external HDMI bridge is connected.
+	 */
+	ret = drm_of_find_panel_or_bridge(np, 1, 0, NULL, &dsi->bridge);
+	if (ret)
+		return ret;
+
+	ctx->pclk = devm_clk_get(&pdev->dev, "pclk");
+	if (IS_ERR(ctx->pclk)) {
+		DRM_ERROR("failed to get pclk clock\n");
+		return PTR_ERR(ctx->pclk);
+	}
+
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	ctx->base = devm_ioremap_resource(&pdev->dev, res);
+	if (IS_ERR(ctx->base)) {
+		DRM_ERROR("failed to remap dsi io region\n");
+		return PTR_ERR(ctx->base);
+	}
+
+	return 0;
+}
+
+const struct kirin_dsi_ops kirin_dsi_620 = {
+	.version = KIRIN620_DSI,
+	.parse_dt = dsi_parse_dt,
+	.host_init = dsi_host_init,
+	.encoder_enable = dsi_encoder_enable_sub,
+	.encoder_valid = dsi_encoder_mode_valid
+};
+
+MODULE_AUTHOR("Xinliang Liu <xinliang.liu@linaro.org>");
+MODULE_AUTHOR("Xinliang Liu <z.liuxinliang@hisilicon.com>");
+MODULE_AUTHOR("Xinwei Kong <kong.kongxinwei@hisilicon.com>");
+MODULE_DESCRIPTION("DesignWare MIPI DSI Host Controller v1.02 driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin960/dw_drm_dsi.c b/drivers/gpu/drm/hisilicon/kirin/kirin960/dw_drm_dsi.c
new file mode 100644
index 0000000..84f0b76
--- /dev/null
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin960/dw_drm_dsi.c
@@ -0,0 +1,1220 @@
+/*
+ * DesignWare MIPI DSI Host Controller v1.02 driver
+ *
+ * Copyright (c) 2016 Linaro Limited.
+ * Copyright (c) 2014-2016 Hisilicon Limited.
+ *
+ * Author:
+ *	<shizongxuan@huawei.com>
+ *	<zhangxiubin@huawei.com>
+ *  <lvda3@hisilicon.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#include <linux/clk.h>
+#include <linux/module.h>
+#include <linux/component.h>
+#include <linux/of_graph.h>
+#include <linux/iopoll.h>
+#include <video/mipi_display.h>
+#include <linux/gpio/consumer.h>
+#include <linux/of_address.h>
+
+#include <drm/drm_of.h>
+#include <drm/drm_crtc_helper.h>
+#include <drm/drm_mipi_dsi.h>
+#include <drm/drm_encoder_slave.h>
+#include <drm/drm_atomic_helper.h>
+#include <drm/drm_panel.h>
+#include <drm/drm_device.h>
+#include <drm/drm_sysfs.h>
+#include <drm/drm_print.h>
+#include <drm/drm_probe_helper.h>
+
+#include "../kirin_drm_dsi.h"
+#include "../dw_dsi_reg.h"
+#include "../kirin_dpe_reg.h"
+
+#define DTS_COMP_DSI_NAME "hisilicon,hi3660-dsi"
+#define ROUND1(x, y)	((x) / (y) + ((x) % (y)  ? 1 : 0))
+#define DSS_REDUCE(x)	((x) > 0 ? ((x) - 1) : (x))
+
+#define DEFAULT_MIPI_CLK_RATE	(192 * 100000L)
+#define DEFAULT_PCLK_DSI_RATE	(120 * 1000000L)
+
+#define outp32(addr, val) writel(val, addr)
+#define inp32(addr)       readl(addr)
+
+struct dss_rect {
+	s32 x;
+	s32 y;
+	s32 w;
+	s32 h;
+};
+
+enum {
+	DSI_1_LANES = 0,
+	DSI_2_LANES,
+	DSI_3_LANES,
+	DSI_4_LANES,
+};
+
+static void set_reg(char __iomem *addr, uint32_t val, uint8_t bw, uint8_t bs)
+{
+	u32 mask = (1UL << bw) - 1UL;
+	u32 tmp = 0;
+
+	tmp = inp32(addr);
+	tmp &= ~(mask << bs);
+
+	outp32(addr, tmp | ((val & mask) << bs));
+}
+
+static enum drm_mode_status dsi_encoder_phy_mode_valid(
+					struct drm_encoder *encoder,
+					const struct drm_display_mode *mode)
+{
+	/* XXX HACK whitelist for now, to move it out of
+	 * common adv7511 code.  This should be replaced by
+	 * something closer to dsi_encoder_phy_mode_valid()
+	 * found in in:
+	 *   drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
+	 */
+	DRM_DEBUG_DRIVER("Checking mode %ix%i@%i clock: %i...",
+			mode->hdisplay, mode->vdisplay,
+			drm_mode_vrefresh(mode), mode->clock);
+	if ((mode->hdisplay == 1920 && mode->vdisplay == 1080 && mode->clock == 148500) ||
+	    (mode->hdisplay == 1920 && mode->vdisplay == 1080 && mode->clock == 80192)  ||
+	    (mode->hdisplay == 1920 && mode->vdisplay == 1080 && mode->clock == 74250)  ||
+	    (mode->hdisplay == 1920 && mode->vdisplay == 1080 && mode->clock == 61855)  ||
+	    (mode->hdisplay == 1680 && mode->vdisplay == 1050 && mode->clock == 147116) ||
+	    (mode->hdisplay == 1680 && mode->vdisplay == 1050 && mode->clock == 146250) ||
+	    (mode->hdisplay == 1680 && mode->vdisplay == 1050 && mode->clock == 144589) ||
+	    (mode->hdisplay == 1600 && mode->vdisplay == 1200 && mode->clock == 160961) ||
+	    (mode->hdisplay == 1600 && mode->vdisplay == 900  && mode->clock == 118963) ||
+	    (mode->hdisplay == 1440 && mode->vdisplay == 900  && mode->clock == 126991) ||
+	    (mode->hdisplay == 1280 && mode->vdisplay == 1024 && mode->clock == 128946) ||
+	    (mode->hdisplay == 1280 && mode->vdisplay == 1024 && mode->clock == 98619)  ||
+	    (mode->hdisplay == 1280 && mode->vdisplay == 960  && mode->clock == 102081) ||
+	    (mode->hdisplay == 1280 && mode->vdisplay == 800  && mode->clock == 83496)  ||
+	    (mode->hdisplay == 1280 && mode->vdisplay == 720  && mode->clock == 74440)  ||
+	    (mode->hdisplay == 1280 && mode->vdisplay == 720  && mode->clock == 74250)  ||
+	    (mode->hdisplay == 1024 && mode->vdisplay == 768  && mode->clock == 78800)  ||
+	    (mode->hdisplay == 1024 && mode->vdisplay == 768  && mode->clock == 75000)  ||
+	    (mode->hdisplay == 1024 && mode->vdisplay == 768  && mode->clock == 81833)  ||
+	    (mode->hdisplay == 800  && mode->vdisplay == 600  && mode->clock == 48907)  ||
+	    (mode->hdisplay == 800  && mode->vdisplay == 600  && mode->clock == 40000)  ||
+	    (mode->hdisplay == 800  && mode->vdisplay == 480  && mode->clock == 32000)) {
+		DRM_DEBUG("OK\n");
+		return MODE_OK;
+	}
+	DRM_DEBUG("BAD\n");
+	return MODE_BAD;
+}
+
+static enum drm_mode_status dsi_encoder_mode_valid(struct drm_encoder *encoder,
+					const struct drm_display_mode *mode)
+
+{
+	struct drm_crtc *crtc = NULL;
+	struct drm_display_mode adj_mode;
+	enum drm_mode_status ret;
+
+	/*
+	 * The crtc might adjust the mode, so go through the
+	 * possible crtcs (technically just one) and call
+	 * mode_fixup to figure out the adjusted mode before we
+	 * validate it.
+	 */
+	drm_for_each_crtc(crtc, encoder->dev) {
+		/*
+		 * reset adj_mode to the mode value each time,
+		 * so we don't adjust the mode twice
+		 */
+		drm_mode_copy(&adj_mode, mode);
+
+		/* XXX - skip this as we're just using a whitelist
+		crtc_funcs = crtc->helper_private;
+		if (crtc_funcs && crtc_funcs->mode_fixup)
+			if (!crtc_funcs->mode_fixup(crtc, mode, &adj_mode))
+				return MODE_BAD;
+		*/
+		ret = dsi_encoder_phy_mode_valid(encoder, &adj_mode);
+		if (ret != MODE_OK)
+			return ret;
+	}
+	return MODE_OK;
+}
+
+static void get_dsi_phy_ctrl(struct dw_dsi *dsi,
+							struct mipi_phy_params *phy_ctrl)
+{
+	struct mipi_panel_info *mipi = NULL;
+	struct drm_display_mode *mode = NULL;
+	u32 dphy_req_kHz;
+	int bpp;
+	u32 id = 0;
+	u32 ui = 0;
+	u32 m_pll = 0;
+	u32 n_pll = 0;
+	u32 m_n_fract = 0;
+	u32 m_n_int = 0;
+	u64 lane_clock = 0;
+	u64 vco_div = 1;
+
+	u32 accuracy = 0;
+	u32 unit_tx_byte_clk_hs = 0;
+	u32 clk_post = 0;
+	u32 clk_pre = 0;
+	u32 clk_t_hs_exit = 0;
+	u32 clk_pre_delay = 0;
+	u32 clk_t_hs_prepare = 0;
+	u32 clk_t_lpx = 0;
+	u32 clk_t_hs_zero = 0;
+	u32 clk_t_hs_trial = 0;
+	u32 data_post_delay = 0;
+	u32 data_t_hs_prepare = 0;
+	u32 data_t_hs_zero = 0;
+	u32 data_t_hs_trial = 0;
+	u32 data_t_lpx = 0;
+	u32 clk_pre_delay_reality = 0;
+	u32 clk_t_hs_zero_reality = 0;
+	u32 clk_post_delay_reality = 0;
+	u32 data_t_hs_zero_reality = 0;
+	u32 data_post_delay_reality = 0;
+	u32 data_pre_delay_reality = 0;
+
+	WARN_ON(!phy_ctrl);
+	WARN_ON(!dsi);
+
+	id = dsi->cur_client;
+	mode = &dsi->cur_mode;
+	mipi = &dsi->mipi;
+
+	/*
+	 * count phy params
+	 */
+	bpp = mipi_dsi_pixel_format_to_bpp(dsi->client[id].format);
+	if (bpp < 0)
+		return;
+	if (mode->clock > 80000)
+	    dsi->client[id].lanes = 4;
+	else
+	    dsi->client[id].lanes = 3;
+	if (dsi->client[id].phy_clock)
+		dphy_req_kHz = dsi->client[id].phy_clock;
+	else
+		dphy_req_kHz = mode->clock * bpp / dsi->client[id].lanes;
+
+	lane_clock = dphy_req_kHz / 1000;
+	DRM_INFO("Expected : lane_clock = %llu M\n", lane_clock);
+
+	/************************  PLL parameters config  *********************/
+	/*chip spec :
+		If the output data rate is below 320 Mbps,
+		RG_BNAD_SEL should be set to 1.
+		At this mode a post divider of 1/4 will be applied to VCO.
+	*/
+	if ((320 <= lane_clock) && (lane_clock <= 2500)) {
+		phy_ctrl->rg_band_sel = 0;	/*0x1E[2]*/
+		vco_div = 1;
+	} else if ((80 <= lane_clock) && (lane_clock < 320)) {
+		phy_ctrl->rg_band_sel = 1;
+		vco_div = 4;
+	} else {
+		DRM_ERROR("80M <= lane_clock< = 2500M, not support lane_clock = %llu M\n",
+			lane_clock);
+	}
+
+	m_n_int = lane_clock * vco_div * 1000000UL / DEFAULT_MIPI_CLK_RATE;
+	m_n_fract = ((lane_clock * vco_div * 1000000UL * 1000UL / DEFAULT_MIPI_CLK_RATE) % 1000) * 10 / 1000;
+
+	if (m_n_int % 2 == 0) {
+		if (m_n_fract * 6 >= 50) {
+			n_pll = 2;
+			m_pll = (m_n_int + 1) * n_pll;
+		} else if (m_n_fract * 6 >= 30) {
+			n_pll = 3;
+			m_pll = m_n_int * n_pll + 2;
+		} else {
+			n_pll = 1;
+			m_pll = m_n_int * n_pll;
+		}
+	} else {
+		if (m_n_fract * 6 >= 50) {
+			n_pll = 1;
+			m_pll = (m_n_int + 1) * n_pll;
+		} else if (m_n_fract * 6 >= 30) {
+			n_pll = 1;
+			m_pll = (m_n_int + 1) * n_pll;
+		} else if (m_n_fract * 6 >= 10) {
+			n_pll = 3;
+			m_pll = m_n_int * n_pll + 1;
+		} else {
+			n_pll = 2;
+			m_pll = m_n_int * n_pll;
+		}
+	}
+
+	/*if set rg_pll_enswc=1, pll_fbd_s can't be 0*/
+	if (m_pll <= 8) {
+		phy_ctrl->pll_fbd_s = 1;
+		phy_ctrl->rg_pll_enswc = 0;
+
+		if (m_pll % 2 == 0) {
+			phy_ctrl->pll_fbd_p = m_pll / 2;
+		} else {
+			if (n_pll == 1) {
+				n_pll *= 2;
+				phy_ctrl->pll_fbd_p = (m_pll  * 2) / 2;
+			} else {
+				DRM_ERROR("phy m_pll not support!m_pll = %d\n", m_pll);
+				return;
+			}
+		}
+	} else if (m_pll <= 300) {
+		if (m_pll % 2 == 0)
+			phy_ctrl->rg_pll_enswc = 0;
+		else
+			phy_ctrl->rg_pll_enswc = 1;
+
+		phy_ctrl->pll_fbd_s = 1;
+		phy_ctrl->pll_fbd_p = m_pll / 2;
+	} else if (m_pll <= 315) {
+		phy_ctrl->pll_fbd_p = 150;
+		phy_ctrl->pll_fbd_s = m_pll - 2 * phy_ctrl->pll_fbd_p;
+		phy_ctrl->rg_pll_enswc = 1;
+	} else {
+		DRM_ERROR("phy m_pll not support!m_pll = %d\n", m_pll);
+		return;
+	}
+
+	phy_ctrl->pll_pre_p = n_pll;
+
+	lane_clock = m_pll * (DEFAULT_MIPI_CLK_RATE / n_pll) / vco_div;
+	DRM_INFO("Config : lane_clock = %llu\n", lane_clock);
+
+	/*FIXME :*/
+	phy_ctrl->rg_pll_cp = 1;		/*0x16[7:5]*/
+	phy_ctrl->rg_pll_cp_p = 3;		/*0x1E[7:5]*/
+
+	/*test_code_0x14 other parameters config*/
+	phy_ctrl->pll_enbwt = 0;	/*0x14[2]*/
+	phy_ctrl->rg_pll_chp = 0;		/*0x14[1:0]*/
+
+	/*test_code_0x16 other parameters config,  0x16[3:2] reserved*/
+	phy_ctrl->pll_lpf_cs = 0;	/*0x16[4]*/
+	phy_ctrl->rg_pll_refsel = 1;		/*0x16[1:0]*/
+
+	/*test_code_0x1E other parameters config*/
+	phy_ctrl->reload_sel = 1;			/*0x1E[4]*/
+	phy_ctrl->rg_phase_gen_en = 1;	/*0x1E[3]*/
+	phy_ctrl->pll_power_down = 0;		/*0x1E[1]*/
+	phy_ctrl->pll_register_override = 1;	/*0x1E[0]*/
+
+	/*HSTX select VCM VREF*/
+	phy_ctrl->rg_vrefsel_vcm = 0x55;
+	if (mipi->rg_vrefsel_vcm_clk_adjust != 0)
+		phy_ctrl->rg_vrefsel_vcm = (phy_ctrl->rg_vrefsel_vcm & 0x0F) |
+			((mipi->rg_vrefsel_vcm_clk_adjust & 0x0F) << 4);
+
+	if (mipi->rg_vrefsel_vcm_data_adjust != 0)
+		phy_ctrl->rg_vrefsel_vcm = (phy_ctrl->rg_vrefsel_vcm & 0xF0) |
+			(mipi->rg_vrefsel_vcm_data_adjust & 0x0F);
+
+	/*if reload_sel = 1, need to set load_command*/
+	phy_ctrl->load_command = 0x5A;
+
+	/********************  clock/data lane parameters config  ******************/
+	accuracy = 10;
+	ui =  10 * 1000000000UL * accuracy / lane_clock;
+	/*unit of measurement*/
+	unit_tx_byte_clk_hs = 8 * ui;
+
+	/* D-PHY Specification : 60ns + 52*UI <= clk_post*/
+	clk_post = 600 * accuracy + 52 * ui + mipi->clk_post_adjust * ui;
+
+	/* D-PHY Specification : clk_pre >= 8*UI*/
+	clk_pre = 8 * ui + mipi->clk_pre_adjust * ui;
+
+	/* D-PHY Specification : clk_t_hs_exit >= 100ns*/
+	clk_t_hs_exit = 1000 * accuracy + mipi->clk_t_hs_exit_adjust * ui;
+
+	/* clocked by TXBYTECLKHS*/
+	clk_pre_delay = 0 + mipi->clk_pre_delay_adjust * ui;
+
+	/* D-PHY Specification : clk_t_hs_trial >= 60ns*/
+	/* clocked by TXBYTECLKHS*/
+	clk_t_hs_trial = 600 * accuracy + 3 * unit_tx_byte_clk_hs + mipi->clk_t_hs_trial_adjust * ui;
+
+	/* D-PHY Specification : 38ns <= clk_t_hs_prepare <= 95ns*/
+	/* clocked by TXBYTECLKHS*/
+	if (mipi->clk_t_hs_prepare_adjust == 0)
+		mipi->clk_t_hs_prepare_adjust = 43;
+
+	clk_t_hs_prepare = ((380 * accuracy + mipi->clk_t_hs_prepare_adjust * ui) <= (950 * accuracy - 8 * ui)) ?
+		(380 * accuracy + mipi->clk_t_hs_prepare_adjust * ui) : (950 * accuracy - 8 * ui);
+
+	/* clocked by TXBYTECLKHS*/
+	data_post_delay = 0 + mipi->data_post_delay_adjust * ui;
+
+	/* D-PHY Specification : data_t_hs_trial >= max( n*8*UI, 60ns + n*4*UI ), n = 1*/
+	/* clocked by TXBYTECLKHS*/
+	data_t_hs_trial = ((600 * accuracy + 4 * ui) >= (8 * ui) ? (600 * accuracy + 4 * ui) : (8 * ui)) + 8 * ui +
+		3 * unit_tx_byte_clk_hs + mipi->data_t_hs_trial_adjust * ui;
+
+	/* D-PHY Specification : 40ns + 4*UI <= data_t_hs_prepare <= 85ns + 6*UI*/
+	/* clocked by TXBYTECLKHS*/
+	if (mipi->data_t_hs_prepare_adjust == 0)
+		mipi->data_t_hs_prepare_adjust = 35;
+
+	data_t_hs_prepare = ((400  * accuracy + 4 * ui + mipi->data_t_hs_prepare_adjust * ui) <= (850 * accuracy + 6 * ui - 8 * ui)) ?
+		(400  * accuracy + 4 * ui + mipi->data_t_hs_prepare_adjust * ui) : (850 * accuracy + 6 * ui - 8 * ui);
+
+	/* D-PHY chip spec : clk_t_lpx + clk_t_hs_prepare > 200ns*/
+	/* D-PHY Specification : clk_t_lpx >= 50ns*/
+	/* clocked by TXBYTECLKHS*/
+	clk_t_lpx = (((2000 * accuracy - clk_t_hs_prepare) >= 500 * accuracy) ?
+		((2000 * accuracy - clk_t_hs_prepare)) : (500 * accuracy)) +
+		mipi->clk_t_lpx_adjust * ui;
+
+	/* D-PHY Specification : clk_t_hs_zero + clk_t_hs_prepare >= 300 ns*/
+	/* clocked by TXBYTECLKHS*/
+	clk_t_hs_zero = 3000 * accuracy - clk_t_hs_prepare + 3 * unit_tx_byte_clk_hs + mipi->clk_t_hs_zero_adjust * ui;
+
+	/* D-PHY chip spec : data_t_lpx + data_t_hs_prepare > 200ns*/
+	/* D-PHY Specification : data_t_lpx >= 50ns*/
+	/* clocked by TXBYTECLKHS*/
+	data_t_lpx = clk_t_lpx + mipi->data_t_lpx_adjust * ui; /*2000 * accuracy - data_t_hs_prepare;*/
+
+	/* D-PHY Specification : data_t_hs_zero + data_t_hs_prepare >= 145ns + 10*UI*/
+	/* clocked by TXBYTECLKHS*/
+	data_t_hs_zero = 1450 * accuracy + 10 * ui - data_t_hs_prepare +
+		3 * unit_tx_byte_clk_hs + mipi->data_t_hs_zero_adjust * ui;
+
+	phy_ctrl->clk_pre_delay = ROUND1(clk_pre_delay, unit_tx_byte_clk_hs);
+	phy_ctrl->clk_t_hs_prepare = ROUND1(clk_t_hs_prepare, unit_tx_byte_clk_hs);
+	phy_ctrl->clk_t_lpx = ROUND1(clk_t_lpx, unit_tx_byte_clk_hs);
+	phy_ctrl->clk_t_hs_zero = ROUND1(clk_t_hs_zero, unit_tx_byte_clk_hs);
+	phy_ctrl->clk_t_hs_trial = ROUND1(clk_t_hs_trial, unit_tx_byte_clk_hs);
+
+	phy_ctrl->data_post_delay = ROUND1(data_post_delay, unit_tx_byte_clk_hs);
+	phy_ctrl->data_t_hs_prepare = ROUND1(data_t_hs_prepare, unit_tx_byte_clk_hs);
+	phy_ctrl->data_t_lpx = ROUND1(data_t_lpx, unit_tx_byte_clk_hs);
+	phy_ctrl->data_t_hs_zero = ROUND1(data_t_hs_zero, unit_tx_byte_clk_hs);
+	phy_ctrl->data_t_hs_trial = ROUND1(data_t_hs_trial, unit_tx_byte_clk_hs);
+	phy_ctrl->data_t_ta_go = 4;
+	phy_ctrl->data_t_ta_get = 5;
+
+	clk_pre_delay_reality = phy_ctrl->clk_pre_delay + 2;
+	clk_t_hs_zero_reality = phy_ctrl->clk_t_hs_zero + 8;
+	data_t_hs_zero_reality = phy_ctrl->data_t_hs_zero + 4;
+	data_post_delay_reality = phy_ctrl->data_post_delay + 4;
+
+	phy_ctrl->clk_post_delay = phy_ctrl->data_t_hs_trial + ROUND1(clk_post, unit_tx_byte_clk_hs);
+	phy_ctrl->data_pre_delay = clk_pre_delay_reality + phy_ctrl->clk_t_lpx +
+		phy_ctrl->clk_t_hs_prepare + clk_t_hs_zero_reality + ROUND1(clk_pre, unit_tx_byte_clk_hs) ;
+
+	clk_post_delay_reality = phy_ctrl->clk_post_delay + 4;
+	data_pre_delay_reality = phy_ctrl->data_pre_delay + 2;
+
+	phy_ctrl->clk_lane_lp2hs_time = clk_pre_delay_reality + phy_ctrl->clk_t_lpx +
+		phy_ctrl->clk_t_hs_prepare + clk_t_hs_zero_reality + 3;
+	phy_ctrl->clk_lane_hs2lp_time = clk_post_delay_reality + phy_ctrl->clk_t_hs_trial + 3;
+	phy_ctrl->data_lane_lp2hs_time = data_pre_delay_reality + phy_ctrl->data_t_lpx +
+		phy_ctrl->data_t_hs_prepare + data_t_hs_zero_reality + 3;
+	phy_ctrl->data_lane_hs2lp_time = data_post_delay_reality + phy_ctrl->data_t_hs_trial + 3;
+	phy_ctrl->phy_stop_wait_time = clk_post_delay_reality +
+		phy_ctrl->clk_t_hs_trial + ROUND1(clk_t_hs_exit, unit_tx_byte_clk_hs) -
+		(data_post_delay_reality + phy_ctrl->data_t_hs_trial) + 3;
+
+	phy_ctrl->lane_byte_clk = lane_clock / 8;
+	phy_ctrl->clk_division = (((phy_ctrl->lane_byte_clk / 2) % mipi->max_tx_esc_clk) > 0) ?
+		(phy_ctrl->lane_byte_clk / 2 / mipi->max_tx_esc_clk + 1) :
+		(phy_ctrl->lane_byte_clk / 2 / mipi->max_tx_esc_clk);
+
+	DRM_INFO("PHY clock_lane and data_lane config : \n"
+		"rg_vrefsel_vcm=%u\n"
+		"clk_pre_delay=%u\n"
+		"clk_post_delay=%u\n"
+		"clk_t_hs_prepare=%u\n"
+		"clk_t_lpx=%u\n"
+		"clk_t_hs_zero=%u\n"
+		"clk_t_hs_trial=%u\n"
+		"data_pre_delay=%u\n"
+		"data_post_delay=%u\n"
+		"data_t_hs_prepare=%u\n"
+		"data_t_lpx=%u\n"
+		"data_t_hs_zero=%u\n"
+		"data_t_hs_trial=%u\n"
+		"data_t_ta_go=%u\n"
+		"data_t_ta_get=%u\n",
+		phy_ctrl->rg_vrefsel_vcm,
+		phy_ctrl->clk_pre_delay,
+		phy_ctrl->clk_post_delay,
+		phy_ctrl->clk_t_hs_prepare,
+		phy_ctrl->clk_t_lpx,
+		phy_ctrl->clk_t_hs_zero,
+		phy_ctrl->clk_t_hs_trial,
+		phy_ctrl->data_pre_delay,
+		phy_ctrl->data_post_delay,
+		phy_ctrl->data_t_hs_prepare,
+		phy_ctrl->data_t_lpx,
+		phy_ctrl->data_t_hs_zero,
+		phy_ctrl->data_t_hs_trial,
+		phy_ctrl->data_t_ta_go,
+		phy_ctrl->data_t_ta_get);
+	DRM_INFO("clk_lane_lp2hs_time=%u\n"
+		"clk_lane_hs2lp_time=%u\n"
+		"data_lane_lp2hs_time=%u\n"
+		"data_lane_hs2lp_time=%u\n"
+		"phy_stop_wait_time=%u\n",
+		phy_ctrl->clk_lane_lp2hs_time,
+		phy_ctrl->clk_lane_hs2lp_time,
+		phy_ctrl->data_lane_lp2hs_time,
+		phy_ctrl->data_lane_hs2lp_time,
+		phy_ctrl->phy_stop_wait_time);
+}
+
+static void dsi_set_burst_mode(void __iomem *base, unsigned long flags)
+{
+	u32 val;
+	u32 mode_mask = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
+		MIPI_DSI_MODE_VIDEO_SYNC_PULSE;
+	u32 non_burst_sync_pulse = MIPI_DSI_MODE_VIDEO |
+		MIPI_DSI_MODE_VIDEO_SYNC_PULSE;
+	u32 non_burst_sync_event = MIPI_DSI_MODE_VIDEO;
+
+	/*
+	 * choose video mode type
+	 */
+	if ((flags & mode_mask) == non_burst_sync_pulse)
+		val = DSI_NON_BURST_SYNC_PULSES;
+	else if ((flags & mode_mask) == non_burst_sync_event)
+		val = DSI_NON_BURST_SYNC_EVENTS;
+	else
+		val = DSI_BURST_SYNC_PULSES_1;
+
+	set_reg(base + MIPIDSI_VID_MODE_CFG_OFFSET, val, 2, 0);
+}
+
+/*
+ * dsi phy reg write function
+ */
+static void dsi_phy_tst_set(void __iomem *base, u32 reg, u32 val)
+{
+	u32 reg_write = 0x10000 + reg;
+
+	/*
+	 * latch reg first
+	 */
+	writel(reg_write, base + MIPIDSI_PHY_TST_CTRL1_OFFSET);
+	writel(0x02, base + MIPIDSI_PHY_TST_CTRL0_OFFSET);
+	writel(0x00, base + MIPIDSI_PHY_TST_CTRL0_OFFSET);
+
+	/*
+	 * then latch value
+	 */
+	writel(val, base + MIPIDSI_PHY_TST_CTRL1_OFFSET);
+	writel(0x02, base + MIPIDSI_PHY_TST_CTRL0_OFFSET);
+	writel(0x00, base + MIPIDSI_PHY_TST_CTRL0_OFFSET);
+}
+
+static void dsi_mipi_init(struct dw_dsi *dsi, char __iomem *mipi_dsi_base)
+{
+	u32 hline_time = 0;
+	u32 hsa_time = 0;
+	u32 hbp_time = 0;
+	u64 pixel_clk = 0;
+	u32 i = 0;
+	u32 id = 0;
+	unsigned long dw_jiffies = 0;
+	u32 tmp = 0;
+	bool is_ready = false;
+	struct mipi_panel_info *mipi = NULL;
+	struct dss_rect rect;
+	u32 cmp_stopstate_val = 0;
+	u32 lanes;
+
+	WARN_ON(!dsi);
+	WARN_ON(!mipi_dsi_base);
+
+	id = dsi->cur_client;
+	mipi = &dsi->mipi;
+
+	if (mipi->max_tx_esc_clk == 0) {
+		DRM_INFO("max_tx_esc_clk is invalid!");
+		mipi->max_tx_esc_clk = DEFAULT_MAX_TX_ESC_CLK;
+	}
+
+	memset(&dsi->phy, 0, sizeof(struct mipi_phy_params));
+	get_dsi_phy_ctrl(dsi, &dsi->phy);
+
+	rect.x = 0;
+	rect.y = 0;
+	rect.w = dsi->cur_mode.hdisplay;
+	rect.h = dsi->cur_mode.vdisplay;
+	lanes = dsi->client[id].lanes - 1;
+	/***************Configure the DPHY start**************/
+
+	set_reg(mipi_dsi_base + MIPIDSI_PHY_IF_CFG_OFFSET, lanes, 2, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_CLKMGR_CFG_OFFSET, dsi->phy.clk_division, 8, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_CLKMGR_CFG_OFFSET, dsi->phy.clk_division, 8, 8);
+
+	outp32(mipi_dsi_base + MIPIDSI_PHY_RSTZ_OFFSET, 0x00000000);
+
+	outp32(mipi_dsi_base + MIPIDSI_PHY_TST_CTRL0_OFFSET, 0x00000000);
+	outp32(mipi_dsi_base + MIPIDSI_PHY_TST_CTRL0_OFFSET, 0x00000001);
+	outp32(mipi_dsi_base + MIPIDSI_PHY_TST_CTRL0_OFFSET, 0x00000000);
+
+	/* physical configuration PLL I*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x14,
+		(dsi->phy.pll_fbd_s << 4) + (dsi->phy.rg_pll_enswc << 3) +
+		(dsi->phy.pll_enbwt << 2) + dsi->phy.rg_pll_chp);
+
+	/* physical configuration PLL II, M*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x15, dsi->phy.pll_fbd_p);
+
+	/* physical configuration PLL III*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x16,
+		(dsi->phy.rg_pll_cp << 5) + (dsi->phy.pll_lpf_cs << 4) +
+		dsi->phy.rg_pll_refsel);
+
+	/* physical configuration PLL IV, N*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x17, dsi->phy.pll_pre_p);
+
+	/* sets the analog characteristic of V reference in D-PHY TX*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x1D, dsi->phy.rg_vrefsel_vcm);
+
+	/* MISC AFE Configuration*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x1E,
+		(dsi->phy.rg_pll_cp_p << 5) + (dsi->phy.reload_sel << 4) +
+		(dsi->phy.rg_phase_gen_en << 3) + (dsi->phy.rg_band_sel << 2) +
+		(dsi->phy.pll_power_down << 1) + dsi->phy.pll_register_override);
+
+	/*reload_command*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x1F, dsi->phy.load_command);
+
+	/* pre_delay of clock lane request setting*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x20, DSS_REDUCE(dsi->phy.clk_pre_delay));
+
+	/* post_delay of clock lane request setting*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x21, DSS_REDUCE(dsi->phy.clk_post_delay));
+
+	/* clock lane timing ctrl - t_lpx*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x22, DSS_REDUCE(dsi->phy.clk_t_lpx));
+
+	/* clock lane timing ctrl - t_hs_prepare*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x23, DSS_REDUCE(dsi->phy.clk_t_hs_prepare));
+
+	/* clock lane timing ctrl - t_hs_zero*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x24, DSS_REDUCE(dsi->phy.clk_t_hs_zero));
+
+	/* clock lane timing ctrl - t_hs_trial*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x25, dsi->phy.clk_t_hs_trial);
+
+	for (i = 0; i <= lanes; i++) {
+		/* data lane pre_delay*/
+		tmp = 0x30 + (i << 4);
+		dsi_phy_tst_set(mipi_dsi_base, tmp, DSS_REDUCE(dsi->phy.data_pre_delay));
+
+		/*data lane post_delay*/
+		tmp = 0x31 + (i << 4);
+		dsi_phy_tst_set(mipi_dsi_base, tmp, DSS_REDUCE(dsi->phy.data_post_delay));
+
+		/* data lane timing ctrl - t_lpx*/
+		dsi_phy_tst_set(mipi_dsi_base, tmp, DSS_REDUCE(dsi->phy.data_t_lpx));
+
+		/* data lane timing ctrl - t_hs_prepare*/
+		tmp = 0x33 + (i << 4);
+		dsi_phy_tst_set(mipi_dsi_base, tmp, DSS_REDUCE(dsi->phy.data_t_hs_prepare));
+
+		/* data lane timing ctrl - t_hs_zero*/
+		tmp = 0x34 + (i << 4);
+		dsi_phy_tst_set(mipi_dsi_base, tmp, DSS_REDUCE(dsi->phy.data_t_hs_zero));
+
+		/* data lane timing ctrl - t_hs_trial*/
+		tmp = 0x35 + (i << 4);
+		dsi_phy_tst_set(mipi_dsi_base, tmp, DSS_REDUCE(dsi->phy.data_t_hs_trial));
+
+		/* data lane timing ctrl - t_ta_go*/
+		tmp = 0x36 + (i << 4);
+		dsi_phy_tst_set(mipi_dsi_base, tmp, DSS_REDUCE(dsi->phy.data_t_ta_go));
+
+		/* data lane timing ctrl - t_ta_get*/
+		tmp = 0x37 + (i << 4);
+		dsi_phy_tst_set(mipi_dsi_base, tmp, DSS_REDUCE(dsi->phy.data_t_ta_get));
+	}
+
+	outp32(mipi_dsi_base + MIPIDSI_PHY_RSTZ_OFFSET, 0x00000007);
+
+	is_ready = false;
+	dw_jiffies = jiffies + HZ / 2;
+	do {
+		tmp = inp32(mipi_dsi_base + MIPIDSI_PHY_STATUS_OFFSET);
+		if ((tmp & 0x00000001) == 0x00000001) {
+			is_ready = true;
+			break;
+		}
+	} while (time_after(dw_jiffies, jiffies));
+
+	if (!is_ready) {
+		DRM_INFO("phylock is not ready!MIPIDSI_PHY_STATUS_OFFSET=0x%x.\n",
+			tmp);
+	}
+
+	if (lanes >= DSI_4_LANES)
+		cmp_stopstate_val = (BIT(4) | BIT(7) | BIT(9) | BIT(11));
+	else if (lanes >= DSI_3_LANES)
+		cmp_stopstate_val = (BIT(4) | BIT(7) | BIT(9));
+	else if (lanes >= DSI_2_LANES)
+		cmp_stopstate_val = (BIT(4) | BIT(7));
+	else
+		cmp_stopstate_val = (BIT(4));
+
+	is_ready = false;
+	dw_jiffies = jiffies + HZ / 2;
+	do {
+		tmp = inp32(mipi_dsi_base + MIPIDSI_PHY_STATUS_OFFSET);
+		if ((tmp & cmp_stopstate_val) == cmp_stopstate_val) {
+			is_ready = true;
+			break;
+		}
+	} while (time_after(dw_jiffies, jiffies));
+
+	if (!is_ready) {
+		DRM_INFO("phystopstateclklane is not ready! MIPIDSI_PHY_STATUS_OFFSET=0x%x.\n",
+			tmp);
+	}
+
+	/*************************Configure the DPHY end*************************/
+
+	/* phy_stop_wait_time*/
+	set_reg(mipi_dsi_base + MIPIDSI_PHY_IF_CFG_OFFSET, dsi->phy.phy_stop_wait_time, 8, 8);
+
+	/*--------------configuring the DPI packet transmission----------------*/
+	/*
+	** 2. Configure the DPI Interface:
+	** This defines how the DPI interface interacts with the controller.
+	*/
+	set_reg(mipi_dsi_base + MIPIDSI_DPI_VCID_OFFSET, mipi->vc, 2, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_DPI_COLOR_CODING_OFFSET, mipi->color_mode, 4, 0);
+
+	set_reg(mipi_dsi_base + MIPIDSI_DPI_CFG_POL_OFFSET, dsi->ldi.data_en_plr, 1, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_DPI_CFG_POL_OFFSET, dsi->ldi.vsync_plr, 1, 1);
+	set_reg(mipi_dsi_base + MIPIDSI_DPI_CFG_POL_OFFSET, dsi->ldi.hsync_plr, 1, 2);
+	set_reg(mipi_dsi_base + MIPIDSI_DPI_CFG_POL_OFFSET, 0x0, 1, 3);
+	set_reg(mipi_dsi_base + MIPIDSI_DPI_CFG_POL_OFFSET, 0x0, 1, 4);
+
+	/*
+	** 3. Select the Video Transmission Mode:
+	** This defines how the processor requires the video line to be
+	** transported through the DSI link.
+	*/
+	/* video mode: low power mode*/
+	set_reg(mipi_dsi_base + MIPIDSI_VID_MODE_CFG_OFFSET, 0x3f, 6, 8);
+	/* set_reg(mipi_dsi_base + MIPIDSI_VID_MODE_CFG_OFFSET, 0x0, 1, 14); */
+
+	/* TODO: fix blank display bug when set backlight*/
+	set_reg(mipi_dsi_base + MIPIDSI_DPI_LP_CMD_TIM_OFFSET, 0x4, 8, 16);
+	/* video mode: send read cmd by lp mode*/
+	set_reg(mipi_dsi_base + MIPIDSI_VID_MODE_CFG_OFFSET, 0x1, 1, 15);
+
+	set_reg(mipi_dsi_base + MIPIDSI_VID_PKT_SIZE_OFFSET, rect.w, 14, 0);
+
+	/* burst mode*/
+	dsi_set_burst_mode(mipi_dsi_base, dsi->client[id].mode_flags);
+	/* for dsi read, BTA enable*/
+	set_reg(mipi_dsi_base + MIPIDSI_PCKHDL_CFG_OFFSET, 0x1, 1, 2);
+
+	/*
+	** 4. Define the DPI Horizontal timing configuration:
+	**
+	** Hsa_time = HSA*(PCLK period/Clk Lane Byte Period);
+	** Hbp_time = HBP*(PCLK period/Clk Lane Byte Period);
+	** Hline_time = (HSA+HBP+HACT+HFP)*(PCLK period/Clk Lane Byte Period);
+	*/
+	pixel_clk = dsi->cur_mode.clock * 1000;
+	/*htot = dsi->cur_mode.htotal;*/
+	/*vtot = dsi->cur_mode.vtotal;*/
+	dsi->ldi.h_front_porch = dsi->cur_mode.hsync_start - dsi->cur_mode.hdisplay;
+	dsi->ldi.h_back_porch = dsi->cur_mode.htotal - dsi->cur_mode.hsync_end;
+	dsi->ldi.h_pulse_width = dsi->cur_mode.hsync_end - dsi->cur_mode.hsync_start;
+	dsi->ldi.v_front_porch = dsi->cur_mode.vsync_start - dsi->cur_mode.vdisplay;
+	dsi->ldi.v_back_porch = dsi->cur_mode.vtotal - dsi->cur_mode.vsync_end;
+	dsi->ldi.v_pulse_width = dsi->cur_mode.vsync_end - dsi->cur_mode.vsync_start;
+	if (dsi->ldi.v_pulse_width > 15) {
+		DRM_DEBUG_DRIVER("vsw exceeded 15\n");
+		dsi->ldi.v_pulse_width = 15;
+	}
+	hsa_time = dsi->ldi.h_pulse_width * dsi->phy.lane_byte_clk / pixel_clk;
+	hbp_time = dsi->ldi.h_back_porch * dsi->phy.lane_byte_clk / pixel_clk;
+	hline_time = ROUND1((dsi->ldi.h_pulse_width + dsi->ldi.h_back_porch +
+		rect.w + dsi->ldi.h_front_porch) * dsi->phy.lane_byte_clk, pixel_clk);
+
+	DRM_INFO("hsa_time=%d, hbp_time=%d, hline_time=%d\n",
+	    hsa_time, hbp_time, hline_time);
+	DRM_INFO("lane_byte_clk=%llu, pixel_clk=%llu\n",
+	    dsi->phy.lane_byte_clk, pixel_clk);
+	set_reg(mipi_dsi_base + MIPIDSI_VID_HSA_TIME_OFFSET, hsa_time, 12, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_VID_HBP_TIME_OFFSET, hbp_time, 12, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_VID_HLINE_TIME_OFFSET, hline_time, 15, 0);
+
+	/* Define the Vertical line configuration*/
+	set_reg(mipi_dsi_base + MIPIDSI_VID_VSA_LINES_OFFSET, dsi->ldi.v_pulse_width, 10, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_VID_VBP_LINES_OFFSET, dsi->ldi.v_back_porch, 10, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_VID_VFP_LINES_OFFSET, dsi->ldi.v_front_porch, 10, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_VID_VACTIVE_LINES_OFFSET, rect.h, 14, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_TO_CNT_CFG_OFFSET, 0x7FF, 16, 0);
+
+	/* Configure core's phy parameters*/
+	set_reg(mipi_dsi_base + MIPIDSI_PHY_TMR_LPCLK_CFG_OFFSET, dsi->phy.clk_lane_lp2hs_time, 10, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_PHY_TMR_LPCLK_CFG_OFFSET, dsi->phy.clk_lane_hs2lp_time, 10, 16);
+
+	set_reg(mipi_dsi_base + MIPIDSI_PHY_TMR_RD_CFG_OFFSET, 0x7FFF, 15, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_PHY_TMR_CFG_OFFSET, dsi->phy.data_lane_lp2hs_time, 10, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_PHY_TMR_CFG_OFFSET, dsi->phy.data_lane_hs2lp_time, 10, 16);
+
+	/* Waking up Core*/
+	set_reg(mipi_dsi_base + MIPIDSI_PWR_UP_OFFSET, 0x1, 1, 0);
+}
+
+static int mipi_dsi_on_sub1(struct dw_dsi *dsi, char __iomem *mipi_dsi_base)
+{
+	WARN_ON(!mipi_dsi_base);
+
+	/* mipi init */
+	dsi_mipi_init(dsi, mipi_dsi_base);
+	DRM_INFO("dsi_mipi_init ok\n");
+	/* switch to cmd mode */
+	set_reg(mipi_dsi_base + MIPIDSI_MODE_CFG_OFFSET, 0x1, 1, 0);
+	/* cmd mode: low power mode */
+	set_reg(mipi_dsi_base + MIPIDSI_CMD_MODE_CFG_OFFSET, 0x7f, 7, 8);
+	set_reg(mipi_dsi_base + MIPIDSI_CMD_MODE_CFG_OFFSET, 0xf, 4, 16);
+	set_reg(mipi_dsi_base + MIPIDSI_CMD_MODE_CFG_OFFSET, 0x1, 1, 24);
+	/* disable generate High Speed clock */
+	/* delete? */
+	set_reg(mipi_dsi_base + MIPIDSI_LPCLK_CTRL_OFFSET, 0x0, 1, 0);
+
+	return 0;
+}
+
+static int mipi_dsi_on_sub2(struct dw_dsi *dsi, char __iomem *mipi_dsi_base)
+{
+	WARN_ON(!mipi_dsi_base);
+
+	/* switch to video mode */
+	set_reg(mipi_dsi_base + MIPIDSI_MODE_CFG_OFFSET, 0x0, 1, 0);
+
+	/* enable EOTP TX */
+	set_reg(mipi_dsi_base + MIPIDSI_PCKHDL_CFG_OFFSET, 0x1, 1, 0);
+
+	/* enable generate High Speed clock, continue clock */
+	set_reg(mipi_dsi_base + MIPIDSI_LPCLK_CTRL_OFFSET, 0x1, 2, 0);
+
+	return 0;
+}
+
+static void dsi_encoder_enable_sub(struct drm_encoder *encoder)
+{
+	struct dw_dsi *dsi = encoder_to_dsi(encoder);
+	struct dsi_hw_ctx *ctx = dsi->ctx;
+	int ret;
+
+	if (dsi->enable)
+		return;
+
+	ret = clk_prepare_enable(ctx->dss_dphy0_ref_clk);
+	if (ret) {
+		DRM_ERROR("fail to enable dss_dphy0_ref_clk: %d\n", ret);
+		return;
+	}
+
+	ret = clk_prepare_enable(ctx->dss_dphy0_cfg_clk);
+	if (ret) {
+		DRM_ERROR("fail to enable dss_dphy0_cfg_clk: %d\n", ret);
+		return;
+	}
+
+	ret = clk_prepare_enable(ctx->dss_pclk_dsi0_clk);
+	if (ret) {
+		DRM_ERROR("fail to enable dss_pclk_dsi0_clk: %d\n", ret);
+		return;
+	}
+
+	mipi_dsi_on_sub1(dsi, ctx->base);
+
+	mipi_dsi_on_sub2(dsi, ctx->base);
+}
+
+static int dsi_host_attach(struct mipi_dsi_host *host,
+			   struct mipi_dsi_device *mdsi)
+{
+	struct dw_dsi *dsi = host_to_dsi(host);
+	u32 id = mdsi->channel >= 1 ? OUT_PANEL : OUT_HDMI;
+
+	if (mdsi->lanes < 1 || mdsi->lanes > 4) {
+		DRM_ERROR("dsi device params invalid\n");
+		return -EINVAL;
+	}
+
+	dsi->client[id].lanes = mdsi->lanes;
+	dsi->client[id].format = mdsi->format;
+	dsi->client[id].mode_flags = mdsi->mode_flags;
+	dsi->client[id].phy_clock = 0;//mdsi->phy_clock;
+
+	DRM_INFO("host attach, client name=[%s], id=%d\n", mdsi->name, id);
+
+	return 0;
+}
+
+static int dsi_host_detach(struct mipi_dsi_host *host,
+			   struct mipi_dsi_device *mdsi)
+{
+	/* do nothing */
+	return 0;
+}
+
+static int dsi_gen_pkt_hdr_write(void __iomem *base, u32 val)
+{
+	u32 status;
+	int ret;
+
+	ret = readx_poll_timeout(readl, base + CMD_PKT_STATUS, status,
+				 !(status & GEN_CMD_FULL), 1000,
+				 CMD_PKT_STATUS_TIMEOUT_US);
+	if (ret < 0) {
+		DRM_ERROR("failed to get available command FIFO\n");
+		return ret;
+	}
+
+	writel(val, base + GEN_HDR);
+
+	ret = readx_poll_timeout(readl, base + CMD_PKT_STATUS, status,
+				 status & (GEN_CMD_EMPTY | GEN_PLD_W_EMPTY),
+				 1000, CMD_PKT_STATUS_TIMEOUT_US);
+	if (ret < 0) {
+		DRM_ERROR("failed to write command FIFO\n");
+		return ret;
+	}
+
+	return 0;
+}
+
+static int dsi_dcs_short_write(void __iomem *base,
+			       const struct mipi_dsi_msg *msg)
+{
+	const u16 *tx_buf = msg->tx_buf;
+	u32 val = GEN_HDATA(*tx_buf) | GEN_HTYPE(msg->type);
+
+	if (msg->tx_len > 2) {
+		DRM_ERROR("too long tx buf length %zu for short write\n",
+			  msg->tx_len);
+		return -EINVAL;
+	}
+
+	return dsi_gen_pkt_hdr_write(base, val);
+}
+
+static int dsi_dcs_long_write(void __iomem *base,
+			      const struct mipi_dsi_msg *msg)
+{
+	const u32 *tx_buf = msg->tx_buf;
+	int len = msg->tx_len, pld_data_bytes = sizeof(*tx_buf), ret;
+	u32 val = GEN_HDATA(msg->tx_len) | GEN_HTYPE(msg->type);
+	u32 remainder = 0;
+	u32 status;
+
+	if (msg->tx_len < 3) {
+		DRM_ERROR("wrong tx buf length %zu for long write\n",
+			  msg->tx_len);
+		return -EINVAL;
+	}
+
+	while (DIV_ROUND_UP(len, pld_data_bytes)) {
+		if (len < pld_data_bytes) {
+			memcpy(&remainder, tx_buf, len);
+			writel(remainder, base + GEN_PLD_DATA);
+			len = 0;
+		} else {
+			writel(*tx_buf, base + GEN_PLD_DATA);
+			tx_buf++;
+			len -= pld_data_bytes;
+		}
+
+		ret = readx_poll_timeout(readl, base + CMD_PKT_STATUS,
+					 status, !(status & GEN_PLD_W_FULL), 1000,
+					 CMD_PKT_STATUS_TIMEOUT_US);
+		if (ret < 0) {
+			DRM_ERROR("failed to get available write payload FIFO\n");
+			return ret;
+		}
+	}
+
+	return dsi_gen_pkt_hdr_write(base, val);
+}
+
+static ssize_t dsi_host_transfer(struct mipi_dsi_host *host,
+				    const struct mipi_dsi_msg *msg)
+{
+	struct dw_dsi *dsi = host_to_dsi(host);
+	struct dsi_hw_ctx *ctx = dsi->ctx;
+	void __iomem *base = ctx->base;
+	int ret;
+
+	switch (msg->type) {
+	case MIPI_DSI_DCS_SHORT_WRITE:
+	case MIPI_DSI_DCS_SHORT_WRITE_PARAM:
+	case MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE:
+		ret = dsi_dcs_short_write(base, msg);
+		break;
+	case MIPI_DSI_DCS_LONG_WRITE:
+		ret = dsi_dcs_long_write(base, msg);
+		break;
+	default:
+		DRM_ERROR("unsupported message type\n");
+		ret = -EINVAL;
+	}
+
+	return ret;
+}
+
+static const struct mipi_dsi_host_ops dsi_host_ops = {
+	.attach = dsi_host_attach,
+	.detach = dsi_host_detach,
+	.transfer = dsi_host_transfer,
+};
+
+static int dsi_host_init(struct device *dev, struct dw_dsi *dsi)
+{
+	struct mipi_dsi_host *host = &dsi->host;
+	struct mipi_panel_info *mipi = &dsi->mipi;
+	int ret;
+
+	host->dev = dev;
+	host->ops = &dsi_host_ops;
+
+	mipi->max_tx_esc_clk = 10 * 1000000UL;
+	mipi->vc = 0;
+	mipi->color_mode = DSI_24BITS_1;
+	mipi->clk_post_adjust = 120;
+	mipi->clk_pre_adjust = 0;
+	mipi->clk_t_hs_prepare_adjust = 0;
+	mipi->clk_t_lpx_adjust = 0;
+	mipi->clk_t_hs_trial_adjust = 0;
+	mipi->clk_t_hs_exit_adjust = 0;
+	mipi->clk_t_hs_zero_adjust = 0;
+
+	dsi->ldi.data_en_plr = 0;
+	dsi->ldi.vsync_plr = 0;
+	dsi->ldi.hsync_plr = 0;
+
+	ret = mipi_dsi_host_register(host);
+	if (ret) {
+		DRM_ERROR("failed to register dsi host\n");
+		return ret;
+	}
+
+	return 0;
+}
+
+static int dsi_parse_bridge_endpoint(struct dw_dsi *dsi,
+				     struct device_node *endpoint)
+{
+	struct device_node *bridge_node;
+	struct drm_bridge *bridge;
+
+	bridge_node = of_graph_get_remote_port_parent(endpoint);
+	if (!bridge_node) {
+		DRM_ERROR("no valid bridge node\n");
+		return -ENODEV;
+	}
+	of_node_put(bridge_node);
+
+	bridge = of_drm_find_bridge(bridge_node);
+	if (!bridge) {
+		DRM_INFO("wait for external HDMI bridge driver.\n");
+		return -EPROBE_DEFER;
+	}
+	dsi->bridge = bridge;
+
+	return 0;
+}
+
+static int dsi_parse_panel_endpoint(struct dw_dsi *dsi,
+				    struct device_node *endpoint)
+{
+	struct device_node *panel_node;
+	struct drm_panel *panel;
+
+	panel_node = of_graph_get_remote_port_parent(endpoint);
+	if (!panel_node) {
+		DRM_ERROR("no valid panel node\n");
+		return -ENODEV;
+	}
+	of_node_put(panel_node);
+
+	panel = of_drm_find_panel(panel_node);
+	if (IS_ERR(panel)) {
+		DRM_DEBUG_DRIVER("skip this panel endpoint.\n");
+		return 0;
+	}
+	dsi->panel = panel;
+
+	return 0;
+}
+
+static int dsi_parse_endpoint(struct dw_dsi *dsi,
+			      struct device_node *np,
+			      enum dsi_output_client client)
+{
+	struct device_node *ep_node;
+	struct of_endpoint ep;
+	int ret = 0;
+
+	if (client == OUT_MAX)
+		return -EINVAL;
+
+	for_each_endpoint_of_node(np, ep_node) {
+		ret = of_graph_parse_endpoint(ep_node, &ep);
+		if (ret) {
+			of_node_put(ep_node);
+			return ret;
+		}
+
+		/* skip dsi input port, port == 0 is input port */
+		if (ep.port == 0)
+			continue;
+
+		/* parse bridge endpoint */
+		if (client == OUT_HDMI) {
+			if (ep.id == 0) {
+				ret = dsi_parse_bridge_endpoint(dsi, ep_node);
+				if (dsi->bridge)
+					break;
+			}
+		} else { /* parse panel endpoint */
+			if (ep.id > 0) {
+				ret = dsi_parse_panel_endpoint(dsi, ep_node);
+				if (dsi->panel)
+					break;
+			}
+		}
+
+		if (ret) {
+			of_node_put(ep_node);
+			return ret;
+		}
+	}
+
+	if (!dsi->bridge && !dsi->panel) {
+		DRM_ERROR("at least one bridge or panel node is required\n");
+		return -ENODEV;
+	}
+
+	return 0;
+}
+
+static int dsi_parse_dt(struct platform_device *pdev, struct dw_dsi *dsi)
+{
+	struct dsi_hw_ctx *ctx = dsi->ctx;
+	int ret = 0;
+	struct device_node *np = pdev->dev.of_node;
+
+	/* parse HDMI bridge endpoint */
+	ret = dsi_parse_endpoint(dsi, np, OUT_HDMI);
+	if (ret)
+		return ret;
+
+
+
+	/* parse panel endpoint */
+	ret = dsi_parse_endpoint(dsi, np, OUT_PANEL);
+	if (ret)
+		return ret;
+	
+
+	np = of_find_compatible_node(NULL, NULL, DTS_COMP_DSI_NAME);
+	if (!np) {
+			DRM_ERROR("NOT FOUND device node %s!\n",
+				    DTS_COMP_DSI_NAME);
+			return -ENXIO;
+	}
+
+	ctx->base = of_iomap(np, 0);
+	if (!(ctx->base)) {
+			DRM_ERROR ("failed to get base resource.\n");
+			return -ENXIO;
+	}
+
+	ctx->peri_crg_base = of_iomap(np, 1);
+	if (!(ctx->peri_crg_base)) {
+			DRM_ERROR ("failed to get peri_crg_base resource.\n");
+			return -ENXIO;
+	}
+
+	dsi->gpio_mux = devm_gpiod_get(&pdev->dev, "mux", GPIOD_OUT_HIGH);
+	if (IS_ERR(dsi->gpio_mux))
+		return PTR_ERR(dsi->gpio_mux);
+	/* set dsi default output to panel */
+	dsi->cur_client = OUT_PANEL;
+
+	/*dis-reset*/
+	/*ip_reset_dis_dsi0, ip_reset_dis_dsi1*/
+	outp32(ctx->peri_crg_base + PERRSTDIS3, 0x30000000);
+
+	ctx->dss_dphy0_ref_clk = devm_clk_get(&pdev->dev, "clk_txdphy0_ref");
+	if (IS_ERR(ctx->dss_dphy0_ref_clk)) {
+		DRM_ERROR("failed to get dss_dphy0_ref_clk clock\n");
+		return PTR_ERR(ctx->dss_dphy0_ref_clk);
+	}
+
+	ret = clk_set_rate(ctx->dss_dphy0_ref_clk, DEFAULT_MIPI_CLK_RATE);
+	if (ret < 0) {
+		DRM_ERROR("dss_dphy0_ref_clk clk_set_rate(%lu) failed, error=%d!\n",
+			DEFAULT_MIPI_CLK_RATE, ret);
+		return -EINVAL;
+	}
+
+	DRM_DEBUG("dss_dphy0_ref_clk:[%lu]->[%lu].\n",
+		DEFAULT_MIPI_CLK_RATE, clk_get_rate(ctx->dss_dphy0_ref_clk));
+
+	ctx->dss_dphy0_cfg_clk = devm_clk_get(&pdev->dev, "clk_txdphy0_cfg");
+	if (IS_ERR(ctx->dss_dphy0_cfg_clk)) {
+		DRM_ERROR("failed to get dss_dphy0_cfg_clk clock\n");
+		return PTR_ERR(ctx->dss_dphy0_cfg_clk);
+	}
+
+	ret = clk_set_rate(ctx->dss_dphy0_cfg_clk, DEFAULT_MIPI_CLK_RATE);
+	if (ret < 0) {
+		DRM_ERROR("dss_dphy0_cfg_clk clk_set_rate(%lu) failed, error=%d!\n",
+			DEFAULT_MIPI_CLK_RATE, ret);
+		return -EINVAL;
+	}
+
+	DRM_DEBUG("dss_dphy0_cfg_clk:[%lu]->[%lu].\n",
+		DEFAULT_MIPI_CLK_RATE, clk_get_rate(ctx->dss_dphy0_cfg_clk));
+
+	ctx->dss_pclk_dsi0_clk = devm_clk_get(&pdev->dev, "pclk_dsi0");
+	if (IS_ERR(ctx->dss_pclk_dsi0_clk)) {
+		DRM_ERROR("failed to get dss_pclk_dsi0_clk clock\n");
+		return PTR_ERR(ctx->dss_pclk_dsi0_clk);
+	}
+
+	return 0;
+}
+
+const struct kirin_dsi_ops kirin_dsi_960 = {
+	.version = KIRIN960_DSI,
+	.parse_dt = dsi_parse_dt,
+	.host_init = dsi_host_init,
+	.encoder_enable = dsi_encoder_enable_sub,
+	.encoder_valid = dsi_encoder_mode_valid
+};
+
+MODULE_DESCRIPTION("DesignWare MIPI DSI Host Controller v1.02 driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_ade_reg.h b/drivers/gpu/drm/hisilicon/kirin/kirin_ade_reg.h
old mode 100644
new mode 100755
index e2ac098..6d7f2e8
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_ade_reg.h
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_ade_reg.h
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2016 Linaro Limited.
- * Copyright (c) 2014-2016 Hisilicon Limited.
+ * Copyright (c) 2016,2019 Linaro Limited.
+ * Copyright (c) 2014-2016,2019 Hisilicon Limited.
  */
 
 #ifndef __KIRIN_ADE_REG_H__
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_dpe_reg.h b/drivers/gpu/drm/hisilicon/kirin/kirin_dpe_reg.h
new file mode 100644
index 0000000..f0ea3ee
--- /dev/null
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_dpe_reg.h
@@ -0,0 +1,393 @@
+/* SPDX-License-Identifier: GPL-2.0+
+ *
+ * Copyright (c) 2016 Linaro Limited.
+ * Copyright (c) 2014-2016 Hisilicon Limited.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+#ifndef __KIRIN_DPE_REG_H__
+#define __KIRIN_DPE_REG_H__
+
+#define BIT_MMU_IRPT_NS                  BIT(28)
+#define BIT_ITF0_INTS                    BIT(16)
+#define BIT_DPP_INTS                     BIT(15)
+#define BIT_VACTIVE0_END                 BIT(8)
+#define BIT_VACTIVE0_START               BIT(7)
+#define BIT_VSYNC                        BIT(4)
+#define BIT_LDI_UNFLOW                   BIT(2)
+
+#define DFS_TIME                         (80)
+#define DFS_TIME_MIN                     (50)
+#define DFS_TIME_MIN_4K                  (10)
+#define DBUF0_DEPTH                      (1408)
+#define DBUF_WIDTH_BIT                   (144)
+#define PERRSTDIS3                       (0x088)
+
+#define DPE_GLB0_OFFSET                  (0x12000)
+#define DPE_DBG_OFFSET                   (0x11000)
+#define DPE_CMDLIST_OFFSET               (0x02000)
+#define DPE_SMMU_OFFSET                  (0x08000)
+#define DPE_MIF_OFFSET                   (0x0A000)
+#define DPE_MCTRL_SYS_OFFSET             (0x10000)
+#define DPE_MCTRL_CTL0_OFFSET            (0x10800)
+#define DPE_RCH_VG0_DMA_OFFSET           (0x20000)
+#define DPE_RCH_VG0_SCL_OFFSET           (0x20200)
+#define DPE_RCH_VG0_ARSR_OFFSET          (0x20300)
+#define DPE_RCH_VG1_DMA_OFFSET           (0x28000)
+#define DPE_RCH_VG1_SCL_OFFSET           (0x28200)
+#define DPE_RCH_VG2_DMA_OFFSET           (0x30000)
+#define DPE_RCH_VG2_SCL_OFFSET           (0x30200)
+#define DPE_RCH_G0_DMA_OFFSET            (0x38000)
+#define DPE_RCH_G0_SCL_OFFSET            (0x38200)
+#define DPE_RCH_G1_DMA_OFFSET            (0x40000)
+#define DPE_RCH_G1_SCL_OFFSET            (0x40200)
+#define DPE_RCH_D2_DMA_OFFSET            (0x50000)
+#define DPE_RCH_D3_DMA_OFFSET            (0x51000)
+#define DPE_RCH_D0_DMA_OFFSET            (0x52000)
+#define DPE_RCH_D0_DFC_OFFSET            (0x52100)
+#define DPE_RCH_D1_DMA_OFFSET            (0x53000)
+#define DPE_WCH0_DMA_OFFSET              (0x5A000)
+#define DPE_WCH1_DMA_OFFSET              (0x5C000)
+#define DPE_WCH2_DMA_OFFSET              (0x5E000)
+#define DPE_WCH2_DFC_OFFSET              (0x5E100)
+#define DPE_OVL0_OFFSET                  (0x60000)
+#define DPE_DBUF0_OFFSET                 (0x6D000)
+#define DPE_DPP_OFFSET                   (0x70000)
+#define DPE_DPP_DITHER_OFFSET            (0x70200)
+#define DPE_LDI0_OFFSET                  (0x7D000)
+#define DPE_IFBC_OFFSET                  (0x7D800)
+#define DPE_DSC_OFFSET                   (0x7DC00)
+
+#define GLB_CPU_PDP_INTS                 (DPE_GLB0_OFFSET + 0x224)
+#define GLB_CPU_PDP_INT_MSK              (DPE_GLB0_OFFSET + 0x228)
+#define GLB_CPU_SDP_INTS                 (DPE_GLB0_OFFSET + 0x22C)
+#define GLB_CPU_SDP_INT_MSK              (DPE_GLB0_OFFSET + 0x230)
+
+#define DBG_MCTL_INTS                    (0x023C)
+#define DBG_MCTL_INT_MSK                 (0x0240)
+#define DBG_WCH0_INTS                    (0x0244)
+#define DBG_WCH0_INT_MSK                 (0x0248)
+#define DBG_WCH1_INTS                    (0x024C)
+#define DBG_WCH1_INT_MSK                 (0x0250)
+#define DBG_RCH0_INTS                    (0x0254)
+#define DBG_RCH0_INT_MSK                 (0x0258)
+#define DBG_RCH1_INTS                    (0x025C)
+#define DBG_RCH1_INT_MSK                 (0x0260)
+#define DBG_RCH2_INTS                    (0x0264)
+#define DBG_RCH2_INT_MSK                 (0x0268)
+#define DBG_RCH3_INTS                    (0x026C)
+#define DBG_RCH3_INT_MSK                 (0x0270)
+#define DBG_RCH4_INTS                    (0x0274)
+#define DBG_RCH4_INT_MSK                 (0x0278)
+#define DBG_RCH5_INTS                    (0x027C)
+#define DBG_RCH5_INT_MSK                 (0x0280)
+#define DBG_RCH6_INTS                    (0x0284)
+#define DBG_RCH6_INT_MSK                 (0x0288)
+#define DBG_RCH7_INTS                    (0x028C)
+#define DBG_RCH7_INT_MSK                 (0x0290)
+#define DBG_DPE_GLB_INTS                 (0x0294)
+#define DBG_DPE_GLB_INT_MSK              (0x0298)
+
+#define AIF0_CH0_OFFSET                  (0x7000)
+#define AIF0_CH0_ADD_OFFSET              (0x7004)
+
+#define MIF_ENABLE                       (0x0000)
+#define MIF_MEM_CTRL                     (0x0004)
+#define MIF_CTRL0                        (0x0000)
+#define MIF_CTRL1                        (0x0004)
+#define MIF_CTRL2                        (0x0008)
+#define MIF_CTRL3                        (0x000C)
+#define MIF_CTRL4                        (0x0010)
+#define MIF_CTRL5                        (0x0014)
+#define MIF_CTRL_OFFSET                  (0x0020)
+#define MIF_CH0_OFFSET                   (DPE_MIF_OFFSET + MIF_CTRL_OFFSET * 1)
+
+#define SMMU_SCR                         (0x0000)
+#define SMMU_MEMCTRL                     (0x0004)
+#define SMMU_LP_CTRL                     (0x0008)
+#define SMMU_INTMASK_NS                  (0x0010)
+#define SMMU_INTRAW_NS                   (0x0014)
+#define SMMU_INTSTAT_NS                  (0x0018)
+#define SMMU_INTCLR_NS                   (0x001C)
+#define SMMU_SMRx_NS                     (0x0020)
+
+#define DMA_OFT_X0                       (0x0000)
+#define DMA_OFT_Y0                       (0x0004)
+#define DMA_OFT_X1                       (0x0008)
+#define DMA_OFT_Y1                       (0x000C)
+#define DMA_MASK0                        (0x0010)
+#define DMA_MASK1                        (0x0014)
+#define DMA_STRETCH_SIZE_VRT             (0x0018)
+#define DMA_CTRL                         (0x001C)
+#define DMA_TILE_SCRAM                   (0x0020)
+#define DMA_PULSE                        (0x0028)
+#define DMA_CORE_GT                      (0x002C)
+#define DMA_DATA_ADDR0                   (0x0060)
+#define DMA_STRIDE0                      (0x0064)
+#define DMA_STRETCH_STRIDE0              (0x0068)
+#define DMA_DATA_NUM0                    (0x006C)
+#define DMA_CH_CTL                       (0x00D4)
+#define DMA_CH_REG_DEFAULT               (0x0A00)
+#define DMA_ALIGN_BYTES                  (128 / BITS_PER_BYTE)
+#define DMA_ADDR_ALIGN                   (128 / BITS_PER_BYTE)
+#define DMA_STRIDE_ALIGN                 (128 / BITS_PER_BYTE)
+
+#define DFC_DISP_SIZE                    (0x0000)
+#define DFC_PIX_IN_NUM                   (0x0004)
+#define DFC_GLB_ALPHA                    (0x0008)
+#define DFC_DISP_FMT                     (0x000C)
+#define DFC_CLIP_CTL_HRZ                 (0x0010)
+#define DFC_CLIP_CTL_VRZ                 (0x0014)
+#define DFC_CTL_CLIP_EN                  (0x0018)
+#define DFC_ICG_MODULE                   (0x001C)
+#define DFC_DITHER_ENABLE                (0x0020)
+#define DFC_PADDING_CTL                  (0x0024)
+
+#define MCTL_CTL_EN                      (0x0000)
+#define MCTL_CTL_MUTEX                   (0x0004)
+#define MCTL_CTL_MUTEX_STATUS            (0x0008)
+#define MCTL_CTL_MUTEX_ITF               (0x000C)
+#define MCTL_CTL_MUTEX_DBUF              (0x0010)
+#define MCTL_CTL_MUTEX_SCF               (0x0014)
+#define MCTL_CTL_MUTEX_OV                (0x0018)
+#define MCTL_CTL_MUTEX_WCH0              (0x0020)
+#define MCTL_CTL_MUTEX_RCH0              (0x0030)
+#define MCTL_CTL_TOP                     (0x0050)
+#define MCTL_CTL_DBG                     (0x00E0)
+#define MCTL_RCH0_FLUSH_EN               (0x0100)
+#define MCTL_OV0_FLUSH_EN                (0x0128)
+#define MCTL_RCH0_OV_OEN                 (0x0160)
+#define MCTL_RCH_OV0_SEL                 (0x0180)
+
+#define OVL_SIZE                         (0x0000)
+#define OVL_BG_COLOR                     (0x0004)
+#define OVL_DST_STARTPOS                 (0x0008)
+#define OVL_DST_ENDPOS                   (0x000C)
+#define OVL_GCFG                         (0x0010)
+#define OVL_LAYER0_POS                   (0x0014)
+#define OVL_LAYER0_SIZE                  (0x0018)
+#define OVL_LAYER0_ALPHA                 (0x0030)
+#define OVL_LAYER0_CFG                   (0x0034)
+#define OVL6_REG_DEFAULT                 (0x01A8)
+
+#define DBUF_FRM_SIZE                    (0x0000)
+#define DBUF_FRM_HSIZE                   (0x0004)
+#define DBUF_SRAM_VALID_NUM              (0x0008)
+#define DBUF_WBE_EN                      (0x000C)
+#define DBUF_THD_FILL_LEV0               (0x0010)
+#define DBUF_DFS_FILL_LEV1               (0x0014)
+#define DBUF_THD_RQOS                    (0x0018)
+#define DBUF_THD_WQOS                    (0x001C)
+#define DBUF_THD_CG                      (0x0020)
+#define DBUF_THD_OTHER                   (0x0024)
+#define DBUF_ONLINE_FILL_LEVEL           (0x003C)
+#define DBUF_WB_FILL_LEVEL               (0x0040)
+#define DBUF_DFS_STATUS                  (0x0044)
+#define DBUF_THD_FLUX_REQ_BEF            (0x0048)
+#define DBUF_DFS_LP_CTRL                 (0x004C)
+#define DBUF_RD_SHADOW_SEL               (0x0050)
+#define DBUF_MEM_CTRL                    (0x0054)
+#define DBUF_THD_FLUX_REQ_AFT            (0x0064)
+#define DBUF_THD_DFS_OK                  (0x0068)
+#define DBUF_FLUX_REQ_CTRL               (0x006C)
+#define DBUF_REG_DEFAULT                 (0x00A4)
+
+#define DPP_IMG_SIZE_BEF_SR              (0x000C)
+#define DPP_IMG_SIZE_AFT_SR              (0x0010)
+#define DPP_INTS                         (0x0040)
+#define DPP_INT_MSK                      (0x0044)
+
+#define SCF_COEF_MEM_CTRL                (0x0018)
+#define IFBC_MEM_CTRL                    (0x001C)
+#define DITHER_MEM_CTRL                  (0x002C)
+#define DSC_MEM_CTRL                     (0x0084)
+#define ARSR2P_LB_MEM_CTRL               (0x0084)
+#define SCF_LB_MEM_CTRL                  (0x0090)
+#define ROT_MEM_CTRL                     (0x0538)
+#define VPP_MEM_CTRL                     (0x0704)
+#define CMD_MEM_CTRL                     (0x073C)
+#define DMA_BUF_MEM_CTRL                 (0x0854)
+#define AFBCD_MEM_CTRL                   (0x093C)
+#define AFBCE_MEM_CTRL                   (0x0924)
+
+#define LDI_DPI0_HRZ_CTRL0               (0x0000)
+#define LDI_DPI0_HRZ_CTRL1               (0x0004)
+#define LDI_DPI0_HRZ_CTRL2               (0x0008)
+#define LDI_VRT_CTRL0                    (0x000C)
+#define LDI_VRT_CTRL1                    (0x0010)
+#define LDI_VRT_CTRL2                    (0x0014)
+#define LDI_PLR_CTRL                     (0x0018)
+#define LDI_CTRL                         (0x0024)
+#define LDI_WORK_MODE                    (0x0028)
+#define LDI_DSI_CMD_MOD_CTRL             (0x0030)
+#define LDI_VINACT_MSK_LEN               (0x0050)
+#define LDI_CMD_EVENT_SEL                (0x0060)
+#define LDI_MEM_CTRL                     (0x0100)
+#define LDI_PXL0_DIV2_GT_EN              (0x0210)
+#define LDI_PXL0_DIV4_GT_EN              (0x0214)
+#define LDI_PXL0_GT_EN                   (0x0218)
+#define LDI_PXL0_DSI_GT_EN               (0x021C)
+#define LDI_PXL0_DIVXCFG                 (0x0220)
+#define LDI_VESA_CLK_SEL                 (0x0228)
+#define LDI_CPU_ITF_INTS                 (0x0248)
+#define LDI_CPU_ITF_INT_MSK              (0x024C)
+
+#define MIPIDSI_VERSION_OFFSET           (0x0000)
+#define MIPIDSI_PWR_UP_OFFSET            (0x0004)
+#define MIPIDSI_CLKMGR_CFG_OFFSET        (0x0008)
+#define MIPIDSI_DPI_VCID_OFFSET          (0x000c)
+#define MIPIDSI_DPI_COLOR_CODING_OFFSET  (0x0010)
+#define MIPIDSI_DPI_CFG_POL_OFFSET       (0x0014)
+#define MIPIDSI_DPI_LP_CMD_TIM_OFFSET    (0x0018)
+#define MIPIDSI_PCKHDL_CFG_OFFSET        (0x002c)
+#define MIPIDSI_GEN_VCID_OFFSET          (0x0030)
+#define MIPIDSI_MODE_CFG_OFFSET          (0x0034)
+#define MIPIDSI_VID_MODE_CFG_OFFSET      (0x0038)
+#define MIPIDSI_VID_PKT_SIZE_OFFSET      (0x003c)
+#define MIPIDSI_VID_NUM_CHUNKS_OFFSET    (0x0040)
+#define MIPIDSI_VID_NULL_SIZE_OFFSET     (0x0044)
+#define MIPIDSI_VID_HSA_TIME_OFFSET      (0x0048)
+#define MIPIDSI_VID_HBP_TIME_OFFSET      (0x004c)
+#define MIPIDSI_VID_HLINE_TIME_OFFSET    (0x0050)
+#define MIPIDSI_VID_VSA_LINES_OFFSET     (0x0054)
+#define MIPIDSI_VID_VBP_LINES_OFFSET     (0x0058)
+#define MIPIDSI_VID_VFP_LINES_OFFSET     (0x005c)
+#define MIPIDSI_VID_VACTIVE_LINES_OFFSET (0x0060)
+#define MIPIDSI_EDPI_CMD_SIZE_OFFSET     (0x0064)
+#define MIPIDSI_CMD_MODE_CFG_OFFSET      (0x0068)
+#define MIPIDSI_GEN_HDR_OFFSET           (0x006c)
+#define MIPIDSI_GEN_PLD_DATA_OFFSET      (0x0070)
+#define MIPIDSI_CMD_PKT_STATUS_OFFSET    (0x0074)
+#define MIPIDSI_TO_CNT_CFG_OFFSET        (0x0078)
+#define MIPIDSI_BTA_TO_CNT_OFFSET        (0x008C)
+#define MIPIDSI_SDF_3D_OFFSET            (0x0090)
+#define MIPIDSI_LPCLK_CTRL_OFFSET        (0x0094)
+#define MIPIDSI_PHY_TMR_LPCLK_CFG_OFFSET (0x0098)
+#define MIPIDSI_PHY_TMR_CFG_OFFSET       (0x009c)
+#define MIPIDSI_PHY_RSTZ_OFFSET          (0x00a0)
+#define MIPIDSI_PHY_IF_CFG_OFFSET        (0x00a4)
+#define MIPIDSI_PHY_ULPS_CTRL_OFFSET     (0x00a8)
+#define MIPIDSI_PHY_TX_TRIGGERS_OFFSET   (0x00ac)
+#define MIPIDSI_PHY_STATUS_OFFSET        (0x00b0)
+#define MIPIDSI_PHY_TST_CTRL0_OFFSET     (0x00b4)
+#define MIPIDSI_PHY_TST_CTRL1_OFFSET     (0x00b8)
+#define MIPIDSI_PHY_TMR_RD_CFG_OFFSET    (0x00f4)
+
+enum XRES_DIV {
+	XRES_DIV_1 = 1,
+	XRES_DIV_2,
+};
+
+enum YRES_DIV {
+	YRES_DIV_1 = 1,
+	YRES_DIV_2,
+};
+
+enum PXL0_DIVCFG {
+	PXL0_DIVCFG_0 = 0,
+	PXL0_DIVCFG_1,
+};
+
+enum PXL0_DIV2_GT_EN {
+	PXL0_DIV2_GT_EN_CLOSE = 0,
+	PXL0_DIV2_GT_EN_OPEN,
+};
+
+enum PXL0_DIV4_GT_EN {
+	PXL0_DIV4_GT_EN_CLOSE = 0,
+	PXL0_DIV4_GT_EN_OPEN,
+};
+
+enum PXL0_DSI_GT_EN {
+	PXL0_DSI_GT_EN_0 = 0,
+	PXL0_DSI_GT_EN_1,
+};
+
+enum lcd_format {
+	LCD_RGB888 = 0,
+	LCD_RGB101010,
+	LCD_RGB565,
+};
+
+enum lcd_rgb_order {
+	LCD_RGB = 0,
+	LCD_BGR,
+};
+
+enum dpe_dfc_format {
+	DFC_PIXEL_FORMAT_RGB_565 = 0,
+	DFC_PIXEL_FORMAT_XRGB_4444,
+	DFC_PIXEL_FORMAT_ARGB_4444,
+	DFC_PIXEL_FORMAT_XRGB_5551,
+	DFC_PIXEL_FORMAT_ARGB_5551,
+	DFC_PIXEL_FORMAT_XRGB_8888,
+	DFC_PIXEL_FORMAT_ARGB_8888,
+	DFC_PIXEL_FORMAT_BGR_565,
+	DFC_PIXEL_FORMAT_XBGR_4444,
+	DFC_PIXEL_FORMAT_ABGR_4444,
+	DFC_PIXEL_FORMAT_XBGR_5551,
+	DFC_PIXEL_FORMAT_ABGR_5551,
+	DFC_PIXEL_FORMAT_XBGR_8888,
+	DFC_PIXEL_FORMAT_ABGR_8888,
+	DFC_PIXEL_FORMAT_YUV444,
+	DFC_PIXEL_FORMAT_YVU444,
+	DFC_PIXEL_FORMAT_YUYV422,
+	DFC_PIXEL_FORMAT_YVYU422,
+	DFC_PIXEL_FORMAT_VYUY422,
+	DFC_PIXEL_FORMAT_UYVY422,
+};
+
+enum dpe_dma_format {
+	DMA_PIXEL_FORMAT_RGB_565 = 0,
+	DMA_PIXEL_FORMAT_ARGB_4444,
+	DMA_PIXEL_FORMAT_XRGB_4444,
+	DMA_PIXEL_FORMAT_ARGB_5551,
+	DMA_PIXEL_FORMAT_XRGB_5551,
+	DMA_PIXEL_FORMAT_ARGB_8888,
+	DMA_PIXEL_FORMAT_XRGB_8888,
+	DMA_PIXEL_FORMAT_RESERVED0,
+	DMA_PIXEL_FORMAT_YUYV_422_Pkg,
+	DMA_PIXEL_FORMAT_YUV_420_SP_HP,
+	DMA_PIXEL_FORMAT_YUV_420_P_HP,
+	DMA_PIXEL_FORMAT_YUV_422_SP_HP,
+	DMA_PIXEL_FORMAT_YUV_422_P_HP,
+	DMA_PIXEL_FORMAT_AYUV_4444,
+};
+
+enum dpe_fb_format {
+	DPE_RGB_565 = 0,
+	DPE_RGBX_4444,
+	DPE_RGBA_4444,
+	DPE_RGBX_5551,
+	DPE_RGBA_5551,
+	DPE_RGBX_8888,
+	DPE_RGBA_8888,
+	DPE_BGR_565,
+	DPE_BGRX_4444,
+	DPE_BGRA_4444,
+	DPE_BGRX_5551,
+	DPE_BGRA_5551,
+	DPE_BGRX_8888,
+	DPE_BGRA_8888,
+	DPE_YUV_422_I,
+	/* YUV Semi-planar */
+	DPE_YCbCr_422_SP,
+	DPE_YCrCb_422_SP,
+	DPE_YCbCr_420_SP,
+	DPE_YCrCb_420_SP,
+	/* YUV Planar */
+	DPE_YCbCr_422_P,
+	DPE_YCrCb_422_P,
+	DPE_YCbCr_420_P,
+	DPE_YCrCb_420_P,
+	/* YUV Package */
+	DPE_YUYV_422_Pkg,
+	DPE_UYVY_422_Pkg,
+	DPE_YVYU_422_Pkg,
+	DPE_VYUY_422_Pkg,
+};
+
+#endif
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
old mode 100644
new mode 100755
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_dpe.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_dpe.c
new file mode 100644
index 0000000..a15f8d4
--- /dev/null
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_dpe.c
@@ -0,0 +1,1233 @@
+/*
+ * Hisilicon Hi6220 SoC ADE(Advanced Display Engine)'s crtc&plane driver
+ *
+ * Copyright (c) 2016 Linaro Limited.
+ * Copyright (c) 2014-2016 Hisilicon Limited.
+ *
+ * Author:
+ *	Xinliang Liu <z.liuxinliang@hisilicon.com>
+ *	Xinliang Liu <xinliang.liu@linaro.org>
+ *	Xinwei Kong <kong.kongxinwei@hisilicon.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#include <linux/bitops.h>
+#include <linux/clk.h>
+#include <video/display_timing.h>
+#include <linux/mfd/syscon.h>
+#include <linux/regmap.h>
+#include <linux/reset.h>
+#include <linux/of_address.h>
+#include <linux/of.h>
+#include <linux/of_irq.h>
+#include <linux/platform_device.h>
+
+#include <drm/drm_drv.h>
+#include <drm/drm_crtc.h>
+#include <drm/drm_crtc_helper.h>
+#include <drm/drm_atomic.h>
+#include <drm/drm_atomic_helper.h>
+#include <drm/drm_plane_helper.h>
+#include <drm/drm_gem_cma_helper.h>
+#include <drm/drm_gem_framebuffer_helper.h>
+#include <drm/drm_fb_cma_helper.h>
+#include <drm/drm_vblank.h>
+#include <drm/drm_fourcc.h>
+
+#include "kirin_drm_drv.h"
+#include "kirin_dpe_reg.h"
+
+#define DPE_WIDTH(width)   ((width) - 1)
+#define DPE_HEIGHT(height) ((height) - 1)
+
+#define GET_FLUX_REQ_IN(max_depth)  ((max_depth) * 50 / 100)
+#define GET_FLUX_REQ_OUT(max_depth)	((max_depth) * 90 / 100)
+
+#define DEFAULT_DPE_CORE_CLK_07V_RATE (400000000UL)
+#define DPE_MAX_PXL0_CLK_144M         (144000000UL)
+
+#define DPE_UNSUPPORT (800)
+#define RES_4K_PHONE  (3840 * 2160)
+
+enum dpe_ovl {
+	DPE_OVL0 = 0,
+	DPE_OVL_NUM
+};
+
+enum dpe_channel {
+	DPE_CH0 = 0, /* channel 1 for primary plane */
+	DPE_CH_NUM
+};
+
+struct dpe_hw_ctx {
+	void __iomem *base;
+	void __iomem *noc_base;
+
+	struct clk *dpe_axi_clk;
+	struct clk *dpe_pclk_clk;
+	struct clk *dpe_pri_clk;
+	struct clk *dpe_pxl0_clk;
+	struct clk *dpe_mmbuf_clk;
+
+	bool power_on;
+	int irq;
+
+	struct drm_crtc *crtc;
+
+	u32 hdisplay;
+	u32 vdisplay;
+};
+
+static const struct kirin_format dpe_formats[] = {
+	{ DRM_FORMAT_RGB565, DPE_RGB_565 },
+	{ DRM_FORMAT_BGR565, DPE_BGR_565 },
+	{ DRM_FORMAT_XRGB8888, DPE_RGBX_8888 },
+	{ DRM_FORMAT_XBGR8888, DPE_BGRX_8888 },
+	{ DRM_FORMAT_RGBA8888, DPE_RGBA_8888 },
+	{ DRM_FORMAT_BGRA8888, DPE_BGRA_8888 },
+	{ DRM_FORMAT_ARGB8888, DPE_BGRA_8888 },
+	{ DRM_FORMAT_ABGR8888, DPE_RGBA_8888 },
+};
+
+static const u32 dpe_channel_formats[] = {
+	DRM_FORMAT_RGB565,
+	DRM_FORMAT_BGR565,
+	DRM_FORMAT_XRGB8888,
+	DRM_FORMAT_XBGR8888,
+	DRM_FORMAT_RGBA8888,
+	DRM_FORMAT_BGRA8888,
+	DRM_FORMAT_ARGB8888,
+	DRM_FORMAT_ABGR8888,
+};
+
+static u32 dpe_pixel_dma_format_map[] = {
+	DMA_PIXEL_FORMAT_RGB_565,
+	DMA_PIXEL_FORMAT_XRGB_4444,
+	DMA_PIXEL_FORMAT_ARGB_4444,
+	DMA_PIXEL_FORMAT_XRGB_5551,
+	DMA_PIXEL_FORMAT_ARGB_5551,
+	DMA_PIXEL_FORMAT_XRGB_8888,
+	DMA_PIXEL_FORMAT_ARGB_8888,
+	DMA_PIXEL_FORMAT_RGB_565,
+	DMA_PIXEL_FORMAT_XRGB_4444,
+	DMA_PIXEL_FORMAT_ARGB_4444,
+	DMA_PIXEL_FORMAT_XRGB_5551,
+	DMA_PIXEL_FORMAT_ARGB_5551,
+	DMA_PIXEL_FORMAT_XRGB_8888,
+	DMA_PIXEL_FORMAT_ARGB_8888,
+	DMA_PIXEL_FORMAT_YUYV_422_Pkg,
+	DMA_PIXEL_FORMAT_YUV_422_SP_HP,
+	DMA_PIXEL_FORMAT_YUV_422_SP_HP,
+	DMA_PIXEL_FORMAT_YUV_420_SP_HP,
+	DMA_PIXEL_FORMAT_YUV_420_SP_HP,
+	DMA_PIXEL_FORMAT_YUV_422_P_HP,
+	DMA_PIXEL_FORMAT_YUV_422_P_HP,
+	DMA_PIXEL_FORMAT_YUV_420_P_HP,
+	DMA_PIXEL_FORMAT_YUV_420_P_HP,
+	DMA_PIXEL_FORMAT_YUYV_422_Pkg,
+	DMA_PIXEL_FORMAT_YUYV_422_Pkg,
+	DMA_PIXEL_FORMAT_YUYV_422_Pkg,
+	DMA_PIXEL_FORMAT_YUYV_422_Pkg,
+};
+
+static u32 dpe_pixel_dfc_format_map[] = {
+	DFC_PIXEL_FORMAT_RGB_565,
+	DFC_PIXEL_FORMAT_XBGR_4444,
+	DFC_PIXEL_FORMAT_ABGR_4444,
+	DFC_PIXEL_FORMAT_XBGR_5551,
+	DFC_PIXEL_FORMAT_ABGR_5551,
+	DFC_PIXEL_FORMAT_XBGR_8888,
+	DFC_PIXEL_FORMAT_ABGR_8888,
+	DFC_PIXEL_FORMAT_BGR_565,
+	DFC_PIXEL_FORMAT_XRGB_4444,
+	DFC_PIXEL_FORMAT_ARGB_4444,
+	DFC_PIXEL_FORMAT_XRGB_5551,
+	DFC_PIXEL_FORMAT_ARGB_5551,
+	DFC_PIXEL_FORMAT_XRGB_8888,
+	DFC_PIXEL_FORMAT_ARGB_8888,
+	DFC_PIXEL_FORMAT_YUYV422,
+	DFC_PIXEL_FORMAT_YUYV422,
+	DFC_PIXEL_FORMAT_YVYU422,
+	DFC_PIXEL_FORMAT_YUYV422,
+	DFC_PIXEL_FORMAT_YVYU422,
+	DFC_PIXEL_FORMAT_YUYV422,
+	DFC_PIXEL_FORMAT_YVYU422,
+	DFC_PIXEL_FORMAT_YUYV422,
+	DFC_PIXEL_FORMAT_YVYU422,
+	DFC_PIXEL_FORMAT_YUYV422,
+	DFC_PIXEL_FORMAT_UYVY422,
+	DFC_PIXEL_FORMAT_YVYU422,
+	DFC_PIXEL_FORMAT_VYUY422,
+};
+
+static u32 mid_array[DPE_CH_NUM] = {0xb};
+static u32 aif_offset[DPE_CH_NUM] = {AIF0_CH0_OFFSET};
+static u32 mif_offset[DPE_CH_NUM] = {MIF_CH0_OFFSET};
+static u32 rdma_offset[DPE_CH_NUM] = {DPE_RCH_D0_DMA_OFFSET};
+static u32 rdfc_offset[DPE_CH_NUM] = {DPE_RCH_D0_DFC_OFFSET};
+static u32 dpe_smmu_chn_sid_num[DPE_CH_NUM] = {4};
+static u32 dpe_smmu_smrx_idx[DPE_CH_NUM] = {0};
+static u32 mctl_offset[DPE_OVL_NUM] = {DPE_MCTRL_CTL0_OFFSET};
+static u32 ovl_offset[DPE_OVL_NUM] = {DPE_OVL0_OFFSET};
+
+static u32 dpe_get_format(u32 pixel_format)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(dpe_formats); i++)
+		if (dpe_formats[i].pixel_format == pixel_format)
+			return dpe_formats[i].hw_format;
+
+	DRM_ERROR("Not found pixel format!!fourcc_format= %d\n",
+		  pixel_format);
+	return DPE_UNSUPPORT;
+}
+
+static void dpe_set_reg(char __iomem *addr, u32 val, u8 bw, u8 bs)
+{
+	u32 mask = (1UL << bw) - 1UL;
+	u32 tmp = 0;
+
+	tmp = readl(addr);
+	tmp &= ~(mask << bs);
+
+	writel(tmp | ((val & mask) << bs), addr);
+}
+
+/* dpe mctl utils */
+static void dpe_mctl_lock(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *mctl_base = ctx->base + mctl_offset[DPE_OVL0];
+
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX, 0x1, 1, 0);
+}
+
+static void dpe_mctl_unlock(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *mctl_base = ctx->base + mctl_offset[DPE_OVL0];
+
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX, 0x0, 1, 0);
+}
+
+static void dpe_mctl_init(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *mctl_base = ctx->base + mctl_offset[DPE_OVL0];
+
+	dpe_set_reg(mctl_base + MCTL_CTL_EN, 0x1, 32, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX_ITF, 0x1, 32, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_DBG, 0xB13A00, 32, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_TOP, 0x2, 32, 0);
+}
+
+static void dpe_qos_init(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *noc_base = ctx->noc_base;
+
+	writel(0x2, noc_base + 0x000c);
+	writel(0x2, noc_base + 0x008c);
+	writel(0x2, noc_base + 0x010c);
+	writel(0x2, noc_base + 0x018c);
+}
+
+/* dpe ldi utils */
+static void dpe_enable_ldi(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *ldi_base = ctx->base + DPE_LDI0_OFFSET;
+
+	dpe_set_reg(ldi_base + LDI_CTRL, 0x1, 1, 0);
+}
+
+
+/* interrupts utils */
+static void dpe_interrupt_mask(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *base = ctx->base;
+	u32 mask = ~0;
+
+	writel(mask, base + GLB_CPU_PDP_INT_MSK);
+	writel(mask, base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INT_MSK);
+	writel(mask, base + DPE_DPP_OFFSET + DPP_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_DPE_GLB_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_MCTL_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_WCH0_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_WCH1_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_RCH0_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_RCH1_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_RCH2_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_RCH3_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_RCH4_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_RCH5_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_RCH6_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_RCH7_INT_MSK);
+}
+
+static void dpe_interrupt_unmask(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *base = ctx->base;
+	u32 unmask;
+
+	unmask = ~0;
+	unmask &= ~(BIT_DPP_INTS | BIT_ITF0_INTS | BIT_MMU_IRPT_NS);
+	writel(unmask, base + GLB_CPU_PDP_INT_MSK);
+
+	unmask = ~0;
+	unmask &= ~(BIT_VSYNC | BIT_LDI_UNFLOW);
+	writel(unmask, base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INT_MSK);
+}
+
+static void dpe_interrupt_clear(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *base = ctx->base;
+	u32 clear = ~0;
+
+	writel(clear, base + GLB_CPU_PDP_INTS);
+	writel(clear, base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INTS);
+	writel(clear, base + DPE_DPP_OFFSET + DPP_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_MCTL_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_WCH0_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_WCH1_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_RCH0_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_RCH1_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_RCH2_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_RCH3_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_RCH4_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_RCH5_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_RCH6_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_RCH7_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_DPE_GLB_INTS);
+}
+
+static void dpe_irq_enable(struct dpe_hw_ctx *ctx)
+{
+	enable_irq(ctx->irq);
+}
+
+static void dpe_clk_enable(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *base = ctx->base;
+
+	writel(0x00000088, base + DPE_IFBC_OFFSET + IFBC_MEM_CTRL);
+	writel(0x00000888, base + DPE_DSC_OFFSET + DSC_MEM_CTRL);
+	writel(0x00000008, base + DPE_LDI0_OFFSET + LDI_MEM_CTRL);
+	writel(0x00000008, base + DPE_DBUF0_OFFSET + DBUF_MEM_CTRL);
+	writel(0x00000008, base + DPE_DPP_DITHER_OFFSET + DITHER_MEM_CTRL);
+	writel(0x00000008, base + DPE_CMDLIST_OFFSET + CMD_MEM_CTRL);
+	writel(0x00000088, base + DPE_RCH_VG0_SCL_OFFSET + SCF_COEF_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_VG0_SCL_OFFSET + SCF_LB_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_VG0_ARSR_OFFSET + ARSR2P_LB_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_VG0_DMA_OFFSET + VPP_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_VG0_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00008888, base + DPE_RCH_VG0_DMA_OFFSET + AFBCD_MEM_CTRL);
+	writel(0x00000088, base + DPE_RCH_VG1_SCL_OFFSET + SCF_COEF_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_VG1_SCL_OFFSET + SCF_LB_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_VG1_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00008888, base + DPE_RCH_VG1_DMA_OFFSET + AFBCD_MEM_CTRL);
+	writel(0x00000088, base + DPE_RCH_VG2_SCL_OFFSET + SCF_COEF_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_VG2_SCL_OFFSET + SCF_LB_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_VG2_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00000088, base + DPE_RCH_G0_SCL_OFFSET + SCF_COEF_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_G0_SCL_OFFSET + SCF_LB_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_G0_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00008888, base + DPE_RCH_G0_DMA_OFFSET + AFBCD_MEM_CTRL);
+	writel(0x00000088, base + DPE_RCH_G1_SCL_OFFSET + SCF_COEF_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_G1_SCL_OFFSET + SCF_LB_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_G1_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00008888, base + DPE_RCH_G1_DMA_OFFSET + AFBCD_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_D0_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00008888, base + DPE_RCH_D0_DMA_OFFSET + AFBCD_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_D1_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_D2_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_D3_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00000008, base + DPE_WCH0_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00000888, base + DPE_WCH0_DMA_OFFSET + AFBCE_MEM_CTRL);
+	writel(0x00000008, base + DPE_WCH0_DMA_OFFSET + ROT_MEM_CTRL);
+	writel(0x00000008, base + DPE_WCH1_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00000888, base + DPE_WCH1_DMA_OFFSET + AFBCE_MEM_CTRL);
+	writel(0x00000008, base + DPE_WCH1_DMA_OFFSET + ROT_MEM_CTRL);
+	writel(0x00000008, base + DPE_WCH2_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00000008, base + DPE_WCH2_DMA_OFFSET + ROT_MEM_CTRL);
+}
+
+static int dpe_power_up(struct dpe_hw_ctx *ctx)
+{
+	int ret;
+
+	if (ctx->power_on == true)
+		return 0;
+
+	/*peri clk enable */
+	ret = clk_prepare_enable(ctx->dpe_pxl0_clk);
+	if (ret) {
+		DRM_ERROR("failed to enable dpe_pxl0_clk (%d)\n", ret);
+		return ret;
+	}
+
+	ret = clk_prepare_enable(ctx->dpe_pri_clk);
+	if (ret) {
+		DRM_ERROR("failed to enable dpe_pri_clk (%d)\n", ret);
+		return ret;
+	}
+
+	ret = clk_prepare_enable(ctx->dpe_pclk_clk);
+	if (ret) {
+		DRM_ERROR("failed to enable dpe_pclk_clk (%d)\n", ret);
+		return ret;
+	}
+
+	ret = clk_prepare_enable(ctx->dpe_axi_clk);
+	if (ret) {
+		DRM_ERROR("failed to enable dpe_axi_clk (%d)\n", ret);
+		return ret;
+	}
+
+	ret = clk_prepare_enable(ctx->dpe_mmbuf_clk);
+	if (ret) {
+		DRM_ERROR("failed to enable dpe_mmbuf_clk (%d)\n", ret);
+		return ret;
+	}
+
+	dpe_clk_enable(ctx);
+	dpe_interrupt_mask(ctx);
+	dpe_interrupt_clear(ctx);
+	dpe_irq_enable(ctx);
+	dpe_interrupt_unmask(ctx);
+
+	ctx->power_on = true;
+	return 0;
+}
+
+static void dpe_dpp_init(struct dpe_hw_ctx *ctx, struct drm_display_mode *mode,
+					struct drm_display_mode *adj_mode)
+{
+	void __iomem *dpp_base = ctx->base + DPE_DPP_OFFSET;
+
+	writel((DPE_HEIGHT(mode->vdisplay) << 16) | DPE_WIDTH(mode->hdisplay),
+			dpp_base + DPP_IMG_SIZE_BEF_SR);
+	writel((DPE_HEIGHT(mode->vdisplay) << 16) | DPE_WIDTH(mode->hdisplay),
+			dpp_base + DPP_IMG_SIZE_AFT_SR);
+}
+
+static void dpe_ovl_init(struct dpe_hw_ctx *ctx, u32 xres, u32 yres)
+{
+	void __iomem *mctl_sys_base = ctx->base + DPE_MCTRL_SYS_OFFSET;
+	void __iomem *mctl_base = ctx->base + mctl_offset[DPE_OVL0];
+	void __iomem *ovl0_base = ctx->base + ovl_offset[DPE_OVL0];
+
+	dpe_set_reg(ovl0_base + OVL6_REG_DEFAULT, 0x1, 32, 0);
+	dpe_set_reg(ovl0_base + OVL6_REG_DEFAULT, 0x0, 32, 0);
+	dpe_set_reg(ovl0_base + OVL_SIZE,
+				(xres - 1) | ((yres - 1) << 16), 32, 0);
+	dpe_set_reg(ovl0_base + OVL_BG_COLOR, 0xFF000000, 32, 0);
+	dpe_set_reg(ovl0_base + OVL_DST_STARTPOS, 0x0, 32, 0);
+	dpe_set_reg(ovl0_base + OVL_DST_ENDPOS,
+				(xres - 1) | ((yres - 1) << 16), 32, 0);
+	dpe_set_reg(ovl0_base + OVL_GCFG, 0x10001, 32, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX_ITF, 0x1, 32, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX_DBUF, 0x1, 2, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX_OV, 1 << DPE_OVL0, 4, 0);
+	dpe_set_reg(mctl_sys_base + MCTL_RCH_OV0_SEL, 0x8, 4, 0);
+	dpe_set_reg(mctl_sys_base + MCTL_OV0_FLUSH_EN, 0xd, 4, 0);
+}
+
+static void dpe_vesa_init(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *base = ctx->base;
+
+	dpe_set_reg(base + DPE_LDI0_OFFSET + LDI_VESA_CLK_SEL, 0, 1, 0);
+}
+
+static int dpe_mipi_ifbc_get_rect(struct drm_rect *rect)
+{
+	u32 xres_div = XRES_DIV_1;
+	u32 yres_div = YRES_DIV_1;
+
+	if ((rect->x2 % xres_div) > 0)
+		DRM_ERROR("xres(%d) is not division_h(%d) pixel aligned!\n",
+					rect->x2, xres_div);
+
+	if ((rect->y2 % yres_div) > 0)
+		DRM_ERROR("yres(%d) is not division_v(%d) pixel aligned!\n",
+					rect->y2, yres_div);
+
+	rect->x2 /= xres_div;
+	rect->y2 /= yres_div;
+
+	return 0;
+}
+
+static void dpe_init_ldi_pxl_div(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *ldi_base = ctx->base + DPE_LDI0_OFFSET;
+
+	dpe_set_reg(ldi_base + LDI_PXL0_DIV2_GT_EN, PXL0_DIV2_GT_EN_CLOSE,
+				1, 0);
+	dpe_set_reg(ldi_base + LDI_PXL0_DIV4_GT_EN, PXL0_DIV4_GT_EN_CLOSE,
+				1, 0);
+	dpe_set_reg(ldi_base + LDI_PXL0_GT_EN, 0x1, 1, 0);
+	dpe_set_reg(ldi_base + LDI_PXL0_DSI_GT_EN, PXL0_DSI_GT_EN_1, 2, 0);
+	dpe_set_reg(ldi_base + LDI_PXL0_DIVXCFG, PXL0_DIVCFG_0, 3, 0);
+}
+
+static void dpe_dbuf_init(struct dpe_hw_ctx *ctx,
+			struct drm_display_mode *mode,
+			struct drm_display_mode *adj_mode)
+{
+	void __iomem *dbuf_base = ctx->base + DPE_DBUF0_OFFSET;
+
+	int sram_valid_num = 0;
+	int sram_max_mem_depth = 0;
+	int sram_min_support_depth = 0;
+
+	u32 thd_rqos_in = 0;
+	u32 thd_rqos_out = 0;
+	u32 thd_wqos_in = 0;
+	u32 thd_wqos_out = 0;
+	u32 thd_cg_in = 0;
+	u32 thd_cg_out = 0;
+	u32 thd_wr_wait = 0;
+	u32 thd_cg_hold = 0;
+	u32 thd_flux_req_befdfs_in = 0;
+	u32 thd_flux_req_befdfs_out = 0;
+	u32 thd_flux_req_aftdfs_in = 0;
+	u32 thd_flux_req_aftdfs_out = 0;
+	u32 thd_dfs_ok = 0;
+	u32 dfs_ok_mask = 0;
+	u32 thd_flux_req_sw_en = 1;
+	u32 hfp, hbp, hsw, vfp, vbp, vsw;
+
+	int dfs_time_min = 0;
+	int depth = 0;
+
+	hfp = mode->hsync_start - mode->hdisplay;
+	hbp = mode->htotal - mode->hsync_end;
+	hsw = mode->hsync_end - mode->hsync_start;
+	vfp = mode->vsync_start - mode->vdisplay;
+	vbp = mode->vtotal - mode->vsync_end;
+	vsw = mode->vsync_end - mode->vsync_start;
+
+	dbuf_base = ctx->base + DPE_DBUF0_OFFSET;
+
+	if (mode->hdisplay * mode->vdisplay >= RES_4K_PHONE)
+		dfs_time_min = DFS_TIME_MIN_4K;
+	else
+		dfs_time_min = DFS_TIME_MIN;
+
+	depth = DBUF0_DEPTH;
+
+	thd_cg_out = (DFS_TIME * adj_mode->clock * 1000UL * mode->hdisplay) /
+		(((hsw + hbp + hfp) + mode->hdisplay) * 6 * 1000000UL);
+
+	sram_valid_num = thd_cg_out / depth;
+	thd_cg_in = (sram_valid_num + 1) * depth - 1;
+	sram_max_mem_depth = (sram_valid_num + 1) * depth;
+
+	thd_rqos_in = thd_cg_out * 85 / 100;
+	thd_rqos_out = thd_cg_out;
+	thd_flux_req_befdfs_in = GET_FLUX_REQ_IN(sram_max_mem_depth);
+	thd_flux_req_befdfs_out = GET_FLUX_REQ_OUT(sram_max_mem_depth);
+
+	sram_min_support_depth = dfs_time_min * mode->hdisplay /
+			(1000000 / 60 / (mode->vdisplay + vbp + vfp + vsw)
+			* (DBUF_WIDTH_BIT / 3 / BITS_PER_BYTE));
+
+	thd_flux_req_aftdfs_in = (sram_max_mem_depth - sram_min_support_depth);
+	thd_flux_req_aftdfs_in = thd_flux_req_aftdfs_in / 3;
+	thd_flux_req_aftdfs_out = 2 * thd_flux_req_aftdfs_in;
+	thd_dfs_ok = thd_flux_req_befdfs_in;
+
+	writel(mode->hdisplay * mode->vdisplay, dbuf_base + DBUF_FRM_SIZE);
+	writel(DPE_WIDTH(mode->hdisplay), dbuf_base + DBUF_FRM_HSIZE);
+	writel(sram_valid_num, dbuf_base + DBUF_SRAM_VALID_NUM);
+
+	writel((thd_rqos_out << 16) | thd_rqos_in, dbuf_base + DBUF_THD_RQOS);
+	writel((thd_wqos_out << 16) | thd_wqos_in, dbuf_base + DBUF_THD_WQOS);
+	writel((thd_cg_out << 16) | thd_cg_in, dbuf_base + DBUF_THD_CG);
+	writel((thd_cg_hold << 16) | thd_wr_wait, dbuf_base + DBUF_THD_OTHER);
+	writel((thd_flux_req_befdfs_out << 16) | thd_flux_req_befdfs_in,
+			dbuf_base + DBUF_THD_FLUX_REQ_BEF);
+	writel((thd_flux_req_aftdfs_out << 16) | thd_flux_req_aftdfs_in,
+			dbuf_base + DBUF_THD_FLUX_REQ_AFT);
+	writel(thd_dfs_ok, dbuf_base + DBUF_THD_DFS_OK);
+	writel((dfs_ok_mask << 1) | thd_flux_req_sw_en,
+			dbuf_base + DBUF_FLUX_REQ_CTRL);
+
+	writel(0x1, dbuf_base + DBUF_DFS_LP_CTRL);
+}
+
+static void dpe_ldi_init(struct dpe_hw_ctx *ctx, struct drm_display_mode *mode,
+					struct drm_display_mode *adj_mode)
+{
+	void __iomem *ldi_base = ctx->base + DPE_LDI0_OFFSET;
+	struct drm_rect rect = {0, 0, 0, 0};
+	u32 hfp, hbp, hsw, vfp, vbp, vsw;
+	u32 vsync_plr = 0;
+	u32 hsync_plr = 0;
+	u32 pixelclk_plr = 0;
+	u32 data_en_plr = 0;
+
+	hfp = mode->hsync_start - mode->hdisplay;
+	hbp = mode->htotal - mode->hsync_end;
+	hsw = mode->hsync_end - mode->hsync_start;
+	vfp = mode->vsync_start - mode->vdisplay;
+	vbp = mode->vtotal - mode->vsync_end;
+	vsw = mode->vsync_end - mode->vsync_start;
+
+	rect.x1 = 0;
+	rect.y1 = 0;
+	rect.x2 = mode->hdisplay;
+	rect.y2 = mode->vdisplay;
+	dpe_mipi_ifbc_get_rect(&rect);
+	dpe_init_ldi_pxl_div(ctx);
+
+	writel(hfp | ((hbp + DPE_WIDTH(hsw)) << 16),
+		   ldi_base + LDI_DPI0_HRZ_CTRL0);
+	writel(0, ldi_base + LDI_DPI0_HRZ_CTRL1);
+	writel(DPE_WIDTH(rect.x2), ldi_base + LDI_DPI0_HRZ_CTRL2);
+	writel(vfp | (vbp << 16), ldi_base + LDI_VRT_CTRL0);
+	writel(DPE_HEIGHT(vsw), ldi_base + LDI_VRT_CTRL1);
+	writel(DPE_HEIGHT(rect.y2), ldi_base + LDI_VRT_CTRL2);
+	writel(vsync_plr | (hsync_plr << 1) | (pixelclk_plr << 2)
+				| (data_en_plr << 3), ldi_base + LDI_PLR_CTRL);
+
+	dpe_set_reg(ldi_base + LDI_CTRL, LCD_RGB888, 2, 3);
+	dpe_set_reg(ldi_base + LDI_CTRL, LCD_RGB, 1, 13);
+
+	writel(vfp, ldi_base + LDI_VINACT_MSK_LEN);
+	writel(0x1, ldi_base + LDI_CMD_EVENT_SEL);
+
+	dpe_set_reg(ldi_base + LDI_DSI_CMD_MOD_CTRL, 0x1, 1, 1);
+	dpe_set_reg(ldi_base + LDI_WORK_MODE, 0x1, 1, 0);
+	dpe_set_reg(ldi_base + LDI_CTRL, 0x0, 1, 0);
+}
+
+static void dpe_init(struct dpe_hw_ctx *ctx,
+				struct drm_display_mode *mode,
+				struct drm_display_mode *adj_mode)
+{
+	dpe_dbuf_init(ctx, mode, adj_mode);
+	dpe_dpp_init(ctx, mode, adj_mode);
+	dpe_vesa_init(ctx);
+	dpe_ldi_init(ctx, mode, adj_mode);
+	dpe_qos_init(ctx);
+	dpe_mctl_init(ctx);
+
+	dpe_mctl_lock(ctx);
+	dpe_ovl_init(ctx, mode->hdisplay, mode->vdisplay);
+	dpe_mctl_unlock(ctx);
+
+//	dpe_enable_ldi(ctx);
+
+	ctx->hdisplay = mode->hdisplay;
+	ctx->vdisplay = mode->vdisplay;
+	mdelay(60);
+}
+
+static void dpe_ldi_set_mode(struct dpe_hw_ctx *ctx,
+				struct drm_display_mode *mode,
+				struct drm_display_mode *adj_mode)
+{
+	int ret;
+	u32 clk_Hz;
+
+	switch (mode->clock) {
+	case 148500:
+		clk_Hz = 144000 * 1000UL;
+		break;
+	case 83496:
+		clk_Hz = 80000 * 1000UL;
+		break;
+	case 74440:
+		clk_Hz = 72000 * 1000UL;
+		break;
+	case 74250:
+		clk_Hz = 72000 * 1000UL;
+		break;
+	default:
+		clk_Hz = mode->clock * 1000UL;
+	}
+
+	ret = clk_set_rate(ctx->dpe_pxl0_clk, clk_Hz);
+	if (ret)
+		DRM_ERROR("failed to set pixel clk %dHz (%d)\n",
+				clk_Hz, ret);
+
+	adj_mode->clock = clk_get_rate(ctx->dpe_pxl0_clk) / 1000;
+}
+
+static int dpe_enable_vblank(struct drm_crtc *crtc)
+{
+	struct kirin_crtc *kcrtc = to_kirin_crtc(crtc);
+	struct dpe_hw_ctx *ctx = kcrtc->hw_ctx;
+
+	dpe_power_up(ctx);
+
+	return 0;
+}
+
+static void dpe_disable_vblank(struct drm_crtc *crtc)
+{
+	struct kirin_crtc *kcrtc = to_kirin_crtc(crtc);
+	struct dpe_hw_ctx *ctx = kcrtc->hw_ctx;
+
+	if (!ctx->power_on) {
+		DRM_ERROR("power is down! vblank disable fail\n");
+		return;
+	}
+}
+
+static void dpe_crtc_atomic_enable(struct drm_crtc *crtc,
+				   struct drm_crtc_state *old_state)
+{
+	struct kirin_crtc *kcrtc = to_kirin_crtc(crtc);
+	struct dpe_hw_ctx *ctx = kcrtc->hw_ctx;
+	int ret;
+
+	if (kcrtc->enable == true)
+		return;
+
+	ret = dpe_power_up(ctx);
+	if (ret)
+		return;
+
+	kcrtc->enable = true;
+	drm_crtc_vblank_on(crtc);
+}
+
+static void dpe_crtc_atomic_disable(struct drm_crtc *crtc,
+				    struct drm_crtc_state *old_state)
+{
+	struct kirin_crtc *kcrtc = to_kirin_crtc(crtc);
+
+	if (kcrtc->enable == false)
+		return;
+
+	drm_crtc_vblank_off(crtc);
+	kcrtc->enable = false;
+}
+
+static void dpe_crtc_mode_set_nofb(struct drm_crtc *crtc)
+{
+	struct kirin_crtc *kcrtc = to_kirin_crtc(crtc);
+	struct dpe_hw_ctx *ctx = kcrtc->hw_ctx;
+	struct drm_display_mode *mode = &crtc->state->mode;
+	struct drm_display_mode *adj_mode = &crtc->state->adjusted_mode;
+
+	dpe_power_up(ctx);
+	dpe_ldi_set_mode(ctx, mode, adj_mode);
+	dpe_init(ctx, mode, adj_mode);
+}
+
+static void dpe_crtc_atomic_begin(struct drm_crtc *crtc,
+				  struct drm_crtc_state *old_state)
+{
+	struct kirin_crtc *kcrtc = to_kirin_crtc(crtc);
+	struct dpe_hw_ctx *ctx = kcrtc->hw_ctx;
+
+	dpe_power_up(ctx);
+}
+
+static void dpe_crtc_atomic_flush(struct drm_crtc *crtc,
+				  struct drm_crtc_state *old_state)
+
+{
+	struct drm_pending_vblank_event *event = crtc->state->event;
+
+	if (event) {
+		crtc->state->event = NULL;
+
+		spin_lock_irq(&crtc->dev->event_lock);
+		if (drm_crtc_vblank_get(crtc) == 0)
+			drm_crtc_arm_vblank_event(crtc, event);
+		else
+			drm_crtc_send_vblank_event(crtc, event);
+		spin_unlock_irq(&crtc->dev->event_lock);
+	}
+}
+
+const struct drm_crtc_helper_funcs dpe_crtc_helper_funcs = {
+	.atomic_enable	= dpe_crtc_atomic_enable,
+	.atomic_disable	= dpe_crtc_atomic_disable,
+	.mode_set_nofb	= dpe_crtc_mode_set_nofb,
+	.atomic_begin	= dpe_crtc_atomic_begin,
+	.atomic_flush	= dpe_crtc_atomic_flush,
+};
+
+const struct drm_crtc_funcs dpe_crtc_funcs = {
+	.destroy = drm_crtc_cleanup,
+	.set_config	= drm_atomic_helper_set_config,
+	.page_flip = drm_atomic_helper_page_flip,
+	.reset = drm_atomic_helper_crtc_reset,
+	.atomic_duplicate_state	= drm_atomic_helper_crtc_duplicate_state,
+	.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
+	.enable_vblank = dpe_enable_vblank,
+	.disable_vblank	= dpe_disable_vblank,
+};
+
+static void dpe_unflow_handler(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *base = ctx->base;
+	u32 tmp = 0;
+
+	tmp = readl(base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INT_MSK);
+	tmp &= ~BIT_LDI_UNFLOW;
+
+	writel(tmp, base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INT_MSK);
+}
+
+static void dpe_mctl_ov_config(struct dpe_hw_ctx *ctx, u32 ch)
+{
+	void __iomem *mctl_base = ctx->base + mctl_offset[DPE_OVL0];
+
+	dpe_set_reg(mctl_base + MCTL_CTL_EN, 0x1, 32, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_TOP, 0x2, 32, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_DBG, 0xB13A00, 32, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX_RCH0 + ch * 4, 0x1, 32, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX_ITF, 0x1, 2, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX_DBUF, 0x1, 2, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX_OV, 1 << DPE_OVL0, 4, 0);
+}
+
+static void dpe_mctl_sys_config(struct dpe_hw_ctx *ctx, u32 ch)
+{
+	void __iomem *mctl_sys_base = ctx->base + DPE_MCTRL_SYS_OFFSET;
+
+	dpe_set_reg(mctl_sys_base + MCTL_RCH0_OV_OEN + ch * 4,
+				(1 << 1) | 0x100, 32, 0);
+	dpe_set_reg(mctl_sys_base + MCTL_RCH_OV0_SEL, 0x8, 4, 0);
+	dpe_set_reg(mctl_sys_base + MCTL_RCH_OV0_SEL,
+				ch, 4, (DPE_OVL0 + 1) * 4);
+	dpe_set_reg(mctl_sys_base + MCTL_OV0_FLUSH_EN, 0xd, 4, 0);
+	dpe_set_reg(mctl_sys_base + MCTL_RCH0_FLUSH_EN + ch * 4, 0x1, 32, 0);
+}
+
+static void dpe_ovl_config(struct dpe_hw_ctx *ctx, const struct drm_rect *rect,
+						   u32 xres, u32 yres)
+{
+	void __iomem *ovl0_base = ctx->base + ovl_offset[DPE_OVL0];
+
+	dpe_set_reg(ovl0_base + OVL6_REG_DEFAULT, 0x1, 32, 0);
+	dpe_set_reg(ovl0_base + OVL6_REG_DEFAULT, 0x0, 32, 0);
+	dpe_set_reg(ovl0_base + OVL_SIZE,
+				(xres - 1) | ((yres - 1) << 16), 32, 0);
+	dpe_set_reg(ovl0_base + OVL_BG_COLOR, 0xFF000000, 32, 0);
+	dpe_set_reg(ovl0_base + OVL_DST_STARTPOS, 0x0, 32, 0);
+	dpe_set_reg(ovl0_base + OVL_DST_ENDPOS,
+				(xres - 1) | ((yres - 1) << 16), 32, 0);
+	dpe_set_reg(ovl0_base + OVL_GCFG, 0x10001, 32, 0);
+	dpe_set_reg(ovl0_base + OVL_LAYER0_POS,
+				(rect->x1) | ((rect->y1) << 16), 32, 0);
+	dpe_set_reg(ovl0_base + OVL_LAYER0_SIZE,
+				(rect->x2) | ((rect->y2) << 16), 32, 0);
+	dpe_set_reg(ovl0_base + OVL_LAYER0_ALPHA, 0x00ff40ff, 32, 0);
+	dpe_set_reg(ovl0_base + OVL_LAYER0_CFG, 0x1, 1, 0);
+}
+
+static void dpe_rdma_config(struct dpe_hw_ctx *ctx,
+				const struct drm_rect *rect,
+				u32 display_addr, u32 hal_format,
+				u32 bpp, int ch)
+{
+	void __iomem *rdma_base = ctx->base + rdma_offset[ch];
+
+	u32 aligned_pixel = 0;
+	u32 rdma_oft_x0, rdma_oft_y0, rdma_oft_x1, rdma_oft_y1;
+	u32 rdma_stride, rdma_format;
+	u32 stretch_size_vrt = 0;
+	u32 h_display = 0;
+
+	aligned_pixel = DMA_ALIGN_BYTES / bpp;
+	rdma_oft_x0 = rect->x1 / aligned_pixel;
+	rdma_oft_y0 = rect->y1;
+	rdma_oft_x1 = rect->x2 / aligned_pixel;
+	rdma_oft_y1 = rect->y2;
+
+	rdma_format = dpe_pixel_dma_format_map[hal_format];
+	stretch_size_vrt = rdma_oft_y1 - rdma_oft_y0;
+
+	h_display = (rect->x2 - rect->x1) + 1;
+	rdma_stride = (h_display * bpp) / DMA_ALIGN_BYTES;
+
+
+	dpe_set_reg(rdma_base + DMA_CH_REG_DEFAULT, 0x1, 32, 0);
+	dpe_set_reg(rdma_base + DMA_CH_REG_DEFAULT, 0x0, 32, 0);
+
+	dpe_set_reg(rdma_base + DMA_OFT_X0, rdma_oft_x0, 12, 0);
+	dpe_set_reg(rdma_base + DMA_OFT_Y0, rdma_oft_y0, 16, 0);
+	dpe_set_reg(rdma_base + DMA_OFT_X1, rdma_oft_x1, 12, 0);
+	dpe_set_reg(rdma_base + DMA_OFT_Y1, rdma_oft_y1, 16, 0);
+	dpe_set_reg(rdma_base + DMA_CTRL, rdma_format, 5, 3);
+	dpe_set_reg(rdma_base + DMA_CTRL, 0x0, 1, 8);
+	dpe_set_reg(rdma_base + DMA_STRETCH_SIZE_VRT, stretch_size_vrt, 32, 0);
+	dpe_set_reg(rdma_base + DMA_DATA_ADDR0, display_addr, 32, 0);
+	dpe_set_reg(rdma_base + DMA_STRIDE0, rdma_stride, 13, 0);
+	dpe_set_reg(rdma_base + DMA_CH_CTL, 0x1, 1, 0);
+}
+
+static void dpe_rdfc_config(struct dpe_hw_ctx *ctx,
+				const struct drm_rect *rect,
+				u32 hal_format, u32 bpp, int ch)
+{
+	void __iomem *rdfc_base = ctx->base + rdfc_offset[ch];
+
+	u32 dfc_pix_in_num = 0;
+	u32 size_hrz = 0;
+	u32 size_vrt = 0;
+	u32 dfc_fmt = 0;
+
+	dfc_pix_in_num = (bpp <= 2) ? 0x1 : 0x0;
+	size_hrz = rect->x2 - rect->x1;
+	size_vrt = rect->y2 - rect->y1;
+
+	dfc_fmt = dpe_pixel_dfc_format_map[hal_format];
+
+	dpe_set_reg(rdfc_base + DFC_DISP_SIZE,
+				(size_vrt | (size_hrz << 16)), 29, 0);
+	dpe_set_reg(rdfc_base + DFC_PIX_IN_NUM, dfc_pix_in_num, 1, 0);
+	dpe_set_reg(rdfc_base + DFC_DISP_FMT, dfc_fmt, 5, 1);
+	dpe_set_reg(rdfc_base + DFC_CTL_CLIP_EN, 0x1, 1, 0);
+	dpe_set_reg(rdfc_base + DFC_ICG_MODULE, 0x1, 1, 0);
+}
+
+static void dpe_aif_config(struct dpe_hw_ctx *ctx, u32 ch)
+{
+	void __iomem *aif_ch_base = ctx->base + aif_offset[ch];
+
+	dpe_set_reg(aif_ch_base, 0x0, 1, 0);
+	dpe_set_reg(aif_ch_base, mid_array[ch], 4, 4);
+}
+
+static void dpe_mif_config(struct dpe_hw_ctx *ctx, u32 ch)
+{
+	void __iomem *mif_ch_base = ctx->base + mif_offset[ch];
+
+	dpe_set_reg(mif_ch_base + MIF_CTRL1, 0x1, 1, 5);
+}
+
+static void dpe_smmu_config_off(struct dpe_hw_ctx *ctx, u32 ch)
+{
+	void __iomem *smmu_base = ctx->base + DPE_SMMU_OFFSET;
+	int i, index;
+
+	for (i = 0; i < dpe_smmu_chn_sid_num[ch]; i++) {
+		index = dpe_smmu_smrx_idx[ch] + i;
+		dpe_set_reg(smmu_base + SMMU_SMRx_NS + index * 0x4, 1, 32, 0);
+	}
+}
+
+static void dpe_update_channel(struct kirin_plane *kplane,
+			       struct drm_framebuffer *fb, int crtc_x,
+			       int crtc_y, unsigned int crtc_w,
+			       unsigned int crtc_h, u32 src_x,
+			       u32 src_y, u32 src_w, u32 src_h)
+{
+	struct dpe_hw_ctx *ctx = kplane->hw_ctx;
+	struct drm_gem_cma_object *obj = drm_fb_cma_get_gem_obj(fb, 0);
+	struct drm_rect rect;
+	u32 bpp;
+	u32 stride;
+	u32 display_addr;
+	u32 hal_fmt;
+	u32 ch = DPE_CH0;
+
+	bpp = fb->format->cpp[0];
+	stride = fb->pitches[0];
+
+	display_addr = (u32)obj->paddr + src_y * stride;
+
+	rect.x1 = 0;
+	rect.x2 = src_w - 1;
+	rect.y1 = 0;
+	rect.y2 = src_h - 1;
+	hal_fmt = dpe_get_format(fb->format->format);
+
+	dpe_mctl_lock(ctx);
+	dpe_aif_config(ctx, ch);
+	dpe_mif_config(ctx, ch);
+	dpe_smmu_config_off(ctx, ch);
+
+	dpe_rdma_config(ctx, &rect, display_addr, hal_fmt, bpp, ch);
+	dpe_rdfc_config(ctx, &rect, hal_fmt, bpp, ch);
+	dpe_ovl_config(ctx, &rect, ctx->hdisplay, ctx->vdisplay);
+
+	dpe_mctl_ov_config(ctx, ch);
+	dpe_mctl_sys_config(ctx, ch);
+	dpe_mctl_unlock(ctx);
+	dpe_unflow_handler(ctx);
+
+	dpe_enable_ldi(ctx);
+}
+
+static void dpe_plane_atomic_update(struct drm_plane *plane,
+				    struct drm_plane_state *old_state)
+{
+	struct drm_plane_state *state = plane->state;
+	struct kirin_plane *kplane = to_kirin_plane(plane);
+
+	if (!state->fb) {
+		state->visible = false;
+		return;
+	}
+
+	dpe_update_channel(kplane, state->fb, state->crtc_x, state->crtc_y,
+			   state->crtc_w, state->crtc_h,
+			   state->src_x >> 16, state->src_y >> 16,
+			   state->src_w >> 16, state->src_h >> 16);
+}
+
+static int dpe_plane_atomic_check(struct drm_plane *plane,
+				  struct drm_plane_state *state)
+{
+	struct drm_framebuffer *fb = state->fb;
+	struct drm_crtc *crtc = state->crtc;
+	struct drm_crtc_state *crtc_state;
+	u32 src_x = state->src_x >> 16;
+	u32 src_y = state->src_y >> 16;
+	u32 src_w = state->src_w >> 16;
+	u32 src_h = state->src_h >> 16;
+	int crtc_x = state->crtc_x;
+	int crtc_y = state->crtc_y;
+	u32 crtc_w = state->crtc_w;
+	u32 crtc_h = state->crtc_h;
+	u32 fmt;
+
+	if (!crtc || !fb)
+		return 0;
+
+	fmt = dpe_get_format(fb->format->format);
+	if (fmt == DPE_UNSUPPORT)
+		return -EINVAL;
+
+	crtc_state = drm_atomic_get_crtc_state(state->state, crtc);
+	if (IS_ERR(crtc_state))
+		return PTR_ERR(crtc_state);
+
+	if (src_w != crtc_w || src_h != crtc_h) {
+		DRM_ERROR("Scale not support!!!\n");
+		return -EINVAL;
+	}
+
+	if (src_x + src_w > fb->width ||
+	    src_y + src_h > fb->height)
+		return -EINVAL;
+
+	if (crtc_x < 0 || crtc_y < 0)
+		return -EINVAL;
+
+	if (crtc_x + crtc_w > crtc_state->adjusted_mode.hdisplay ||
+	    crtc_y + crtc_h > crtc_state->adjusted_mode.vdisplay)
+		return -EINVAL;
+
+	return 0;
+}
+
+const struct drm_plane_helper_funcs dpe_plane_helper_funcs = {
+	.atomic_check = dpe_plane_atomic_check,
+	.atomic_update = dpe_plane_atomic_update,
+};
+
+const struct drm_plane_funcs dpe_plane_funcs = {
+	.update_plane = drm_atomic_helper_update_plane,
+	.disable_plane = drm_atomic_helper_disable_plane,
+	.destroy = drm_plane_cleanup,
+	.reset = drm_atomic_helper_plane_reset,
+	.atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
+	.atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
+};
+
+static irqreturn_t dpe_irq_handler(int irq, void *data)
+{
+	struct dpe_hw_ctx *ctx = data;
+	struct drm_crtc *crtc = ctx->crtc;
+	void __iomem *base = ctx->base;
+
+	u32 isr_s1 = 0;
+	u32 isr_s2 = 0;
+	u32 isr_s2_dpp = 0;
+	u32 isr_s2_smmu = 0;
+	u32 mask = 0;
+
+	isr_s1 = readl(base + GLB_CPU_PDP_INTS);
+	isr_s2 = readl(base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INTS);
+	isr_s2_dpp = readl(base + DPE_DPP_OFFSET + DPP_INTS);
+	isr_s2_smmu = readl(base + DPE_SMMU_OFFSET + SMMU_INTSTAT_NS);
+
+	writel(isr_s2_smmu, base + DPE_SMMU_OFFSET + SMMU_INTCLR_NS);
+	writel(isr_s2_dpp, base + DPE_DPP_OFFSET + DPP_INTS);
+	writel(isr_s2, base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INTS);
+	writel(isr_s1, base + GLB_CPU_PDP_INTS);
+
+	isr_s1 &= ~(readl(base + GLB_CPU_PDP_INT_MSK));
+	isr_s2 &= ~(readl(base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INT_MSK));
+	isr_s2_dpp &= ~(readl(base + DPE_DPP_OFFSET + DPP_INT_MSK));
+
+	if (isr_s2 & BIT_VSYNC)
+		drm_crtc_handle_vblank(crtc);
+
+	if (isr_s2 & BIT_LDI_UNFLOW) {
+		mask = readl(base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INT_MSK);
+		mask |= BIT_LDI_UNFLOW;
+		writel(mask, base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INT_MSK);
+
+		DRM_ERROR("ldi underflow!\n");
+	}
+
+	return IRQ_HANDLED;
+}
+
+static void *dpe_hw_ctx_alloc(struct platform_device *pdev,
+							  struct drm_crtc *crtc)
+{
+	struct dpe_hw_ctx *ctx = NULL;
+	struct device *dev = &pdev->dev;
+	struct device_node *np = pdev->dev.of_node;
+	int ret = 0;
+
+	ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL);
+	if (!ctx) {
+		DRM_ERROR("failed to alloc ade_hw_ctx\n");
+		return ERR_PTR(-ENOMEM);
+	}
+
+	ctx->base = of_iomap(np, 0);
+	if (!(ctx->base)) {
+		DRM_ERROR("failed to get ade base resource.\n");
+		return ERR_PTR(-ENXIO);
+	}
+
+	ctx->noc_base = of_iomap(np, 4);
+	if (!(ctx->noc_base)) {
+		DRM_ERROR("failed to get noc_base  resource.\n");
+		return ERR_PTR(-ENXIO);
+	}
+
+	ctx->irq = irq_of_parse_and_map(np, 0);
+	if (ctx->irq <= 0) {
+		DRM_ERROR("failed to get irq_pdp resource.\n");
+		return ERR_PTR(-ENXIO);
+	}
+
+	DRM_INFO("dpe irq = %d.", ctx->irq);
+
+	ctx->dpe_mmbuf_clk = devm_clk_get(dev, "clk_dss_axi_mm");
+	if (!ctx->dpe_mmbuf_clk) {
+		DRM_ERROR("failed to parse dpe_mmbuf_clk\n");
+		return ERR_PTR(-ENODEV);
+	}
+
+	ctx->dpe_axi_clk = devm_clk_get(dev, "aclk_dss");
+	if (!ctx->dpe_axi_clk) {
+		DRM_ERROR("failed to parse dpe_axi_clk\n");
+		return ERR_PTR(-ENODEV);
+	}
+
+	ctx->dpe_pclk_clk = devm_clk_get(dev, "pclk_dss");
+	if (!ctx->dpe_pclk_clk) {
+		DRM_ERROR("failed to parse dpe_pclk_clk\n");
+		return ERR_PTR(-ENODEV);
+	}
+
+	ctx->dpe_pri_clk = devm_clk_get(dev, "clk_edc0");
+	if (!ctx->dpe_pri_clk) {
+		DRM_ERROR("failed to parse dpe_pri_clk\n");
+		return ERR_PTR(-ENODEV);
+	}
+
+	ret = clk_set_rate(ctx->dpe_pri_clk, DEFAULT_DPE_CORE_CLK_07V_RATE);
+	if (ret < 0) {
+		DRM_ERROR("dpe_pri_clk clk_set_rate(%lu) failed, error=%d!\n",
+			DEFAULT_DPE_CORE_CLK_07V_RATE, ret);
+		return ERR_PTR(-EINVAL);
+	}
+
+	ctx->dpe_pxl0_clk = devm_clk_get(dev, "clk_ldi0");
+	if (!ctx->dpe_pxl0_clk) {
+		DRM_ERROR("failed to parse dpe_pxl0_clk\n");
+		return ERR_PTR(-ENODEV);
+	}
+
+	ret = clk_set_rate(ctx->dpe_pxl0_clk, DPE_MAX_PXL0_CLK_144M);
+	if (ret < 0) {
+		DRM_ERROR("dpe_pxl0_clk clk_set_rate(%lu) failed, error=%d!\n",
+			DPE_MAX_PXL0_CLK_144M, ret);
+		return ERR_PTR(-EINVAL);
+	}
+
+	ctx->crtc = crtc;
+	ret = devm_request_irq(dev, ctx->irq, dpe_irq_handler,
+			       IRQF_SHARED, dev->driver->name, ctx);
+	if (ret)
+		return ERR_PTR(-EIO);
+
+	disable_irq(ctx->irq);
+
+	return ctx;
+}
+
+static void dpe_hw_ctx_cleanup(void *hw_ctx)
+{
+}
+
+extern void dsi_set_output_client(struct drm_device *dev);
+static void kirin_fbdev_output_poll_changed(struct drm_device *dev)
+{
+	dsi_set_output_client(dev);
+}
+
+static const struct drm_mode_config_funcs dpe_mode_config_funcs = {
+	.fb_create = drm_gem_fb_create,
+	.output_poll_changed = kirin_fbdev_output_poll_changed,
+	.atomic_check = drm_atomic_helper_check,
+	.atomic_commit = drm_atomic_helper_commit,
+};
+
+DEFINE_DRM_GEM_CMA_FOPS(kirin_drm_fops);
+static struct drm_driver dpe_driver = {
+	.driver_features	= DRIVER_GEM | DRIVER_MODESET |
+				  DRIVER_ATOMIC | DRIVER_RENDER,
+
+	.date			= "20170309",
+	.fops				= &kirin_drm_fops,
+	.gem_free_object_unlocked	= drm_gem_cma_free_object,
+	.gem_vm_ops		= &drm_gem_cma_vm_ops,
+	.dumb_create		= drm_gem_cma_dumb_create_internal,
+	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
+	.prime_fd_to_handle	= drm_gem_prime_fd_to_handle,
+	.gem_prime_export	= drm_gem_prime_export,
+	.gem_prime_import	= drm_gem_prime_import,
+	.gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table,
+	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
+	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
+	.gem_prime_vunmap	= drm_gem_cma_prime_vunmap,
+	.gem_prime_mmap		= drm_gem_cma_prime_mmap,
+
+	.name			= "kirin",
+	.desc			= "Hisilicon Kirin SoCs' DRM Driver",
+	.major			= 1,
+	.minor			= 0,
+};
+
+const struct kirin_drm_data dpe_driver_data = {
+	.register_connects = true,
+	.num_planes = DPE_CH_NUM,
+	.prim_plane = DPE_CH0,
+
+	.channel_formats = dpe_channel_formats,
+	.channel_formats_cnt = ARRAY_SIZE(dpe_channel_formats),
+	.config_max_width = 4096,
+	.config_max_height = 4096,
+
+	.driver = &dpe_driver,
+
+	.crtc_helper_funcs = &dpe_crtc_helper_funcs,
+	.crtc_funcs = &dpe_crtc_funcs,
+	.plane_helper_funcs = &dpe_plane_helper_funcs,
+	.plane_funcs = &dpe_plane_funcs,
+	.mode_config_funcs = &dpe_mode_config_funcs,
+
+	.alloc_hw_ctx = dpe_hw_ctx_alloc,
+	.cleanup_hw_ctx = dpe_hw_ctx_cleanup,
+};
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
index d3145ae..ace4d30 100644
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
@@ -336,9 +336,16 @@ static int kirin_drm_platform_remove(struct platform_device *pdev)
 }
 
 static const struct of_device_id kirin_drm_dt_ids[] = {
+#ifdef CONFIG_DRM_HISI_KIRIN620
 	{ .compatible = "hisilicon,hi6220-ade",
 	  .data = &ade_driver_data,
 	},
+#endif
+#ifdef CONFIG_DRM_HISI_KIRIN960
+	{ .compatible = "hisilicon,hi3660-dpe",
+	  .data = &dpe_driver_data,
+	},
+#endif
 	{ /* end node */ },
 };
 MODULE_DEVICE_TABLE(of, kirin_drm_dt_ids);
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h
old mode 100644
new mode 100755
index 4d5c05a..ad4aaf3
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h
@@ -53,6 +53,11 @@ struct kirin_drm_data {
 	void (*cleanup_hw_ctx)(void *hw_ctx);
 };
 
+#ifdef CONFIG_DRM_HISI_KIRIN620
 extern struct kirin_drm_data ade_driver_data;
+#endif
+#ifdef CONFIG_DRM_HISI_KIRIN960
+extern const struct kirin_drm_data dpe_driver_data;
+#endif
 
 #endif /* __KIRIN_DRM_DRV_H__ */
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_dsi.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_dsi.c
new file mode 100644
index 0000000..2aa5766
--- /dev/null
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_dsi.c
@@ -0,0 +1,444 @@
+/*
+ * DesignWare MIPI DSI Host Controller v1.02 driver
+ *
+ * Copyright (c) 2016 Linaro Limited.
+ * Copyright (c) 2014-2016 Hisilicon Limited.
+ *
+ * Author:
+ *	<shizongxuan@huawei.com>
+ *	<zhangxiubin@huawei.com>
+ *	<lvda3@hisilicon.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+#include <linux/clk.h>
+#include <linux/component.h>
+#include <linux/delay.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+
+#include <drm/drm_atomic_helper.h>
+#include <drm/drm_device.h>
+#include <drm/drm_encoder_slave.h>
+#include <drm/drm_mipi_dsi.h>
+#include <drm/drm_of.h>
+#include <drm/drm_print.h>
+#include <drm/drm_probe_helper.h>
+#include <drm/drm_sysfs.h>
+
+#include "kirin_drm_dsi.h"
+#include "dw_dsi_reg.h"
+
+static struct kirin_dsi_ops *hisi_dsi_ops;
+
+void dsi_set_output_client(struct drm_device *dev)
+{
+	enum dsi_output_client client;
+	struct drm_connector *connector;
+	struct drm_encoder *encoder;
+	struct drm_connector_list_iter conn_iter;
+	struct dw_dsi *dsi;
+
+	mutex_lock(&dev->mode_config.mutex);
+
+	/* find dsi encoder */
+	drm_for_each_encoder(encoder, dev)
+		if (encoder->encoder_type == DRM_MODE_ENCODER_DSI)
+			break;
+	dsi = encoder_to_dsi(encoder);
+
+	/* find HDMI connector */
+	drm_connector_list_iter_begin(dev, &conn_iter);
+	drm_for_each_connector_iter(connector, &conn_iter)
+		if (connector->connector_type == DRM_MODE_CONNECTOR_HDMIA)
+			break;
+	drm_connector_list_iter_end(&conn_iter);
+
+	/*
+	 * set the proper dsi output client
+	 */
+	client = connector->status == connector_status_connected ?
+		OUT_HDMI : OUT_PANEL;
+	if (client != dsi->cur_client) {
+		/* associate bridge and dsi encoder */
+		if (client == OUT_HDMI)
+			encoder->bridge = dsi->bridge;
+		else
+			encoder->bridge = NULL;
+		/*
+		 * set the switch ic to select the HDMI or MIPI_DSI
+		*/
+		if (KIRIN960_DSI == hisi_dsi_ops->version) {
+			gpiod_set_value_cansleep(dsi->gpio_mux, client);
+		}else if (KIRIN620_DSI == hisi_dsi_ops->version) {
+			/*the gpio0_1*/
+		}
+		dsi->cur_client = client;
+		/* let the userspace know panel connector status has changed */
+		drm_sysfs_hotplug_event(dev);
+		DRM_INFO("client change to %s\n", client == OUT_HDMI ?
+				 "HDMI" : "panel");
+	}
+
+	mutex_unlock(&dev->mode_config.mutex);
+}
+EXPORT_SYMBOL_GPL(dsi_set_output_client);
+/************************for the panel attach to dsi*****************************/
+static int dsi_connector_get_modes(struct drm_connector *connector)
+{
+	struct dw_dsi *dsi = connector_to_dsi(connector);
+
+	return drm_panel_get_modes(dsi->panel);
+}
+
+static enum drm_mode_status
+dsi_connector_mode_valid(struct drm_connector *connector,
+			 struct drm_display_mode *mode)
+{
+	enum drm_mode_status mode_status = MODE_OK;
+
+	return mode_status;
+}
+
+static struct drm_encoder *
+dsi_connector_best_encoder(struct drm_connector *connector)
+{
+	struct dw_dsi *dsi = connector_to_dsi(connector);
+
+	return &dsi->encoder;
+}
+
+static struct drm_connector_helper_funcs dsi_connector_helper_funcs = {
+	.get_modes = dsi_connector_get_modes,
+	.mode_valid = dsi_connector_mode_valid,
+	.best_encoder = dsi_connector_best_encoder,
+};
+
+static enum drm_connector_status
+dsi_connector_detect(struct drm_connector *connector, bool force)
+{
+	struct dw_dsi *dsi = connector_to_dsi(connector);
+	enum drm_connector_status status;
+
+	status = dsi->cur_client == OUT_PANEL ?	connector_status_connected :
+		connector_status_disconnected;
+
+	return status;
+}
+
+static void dsi_connector_destroy(struct drm_connector *connector)
+{
+	drm_connector_unregister(connector);
+	drm_connector_cleanup(connector);
+}
+
+static struct drm_connector_funcs dsi_atomic_connector_funcs = {
+	.fill_modes = drm_helper_probe_single_connector_modes,
+	.detect = dsi_connector_detect,
+	.destroy = dsi_connector_destroy,
+	.reset = drm_atomic_helper_connector_reset,
+	.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
+	.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
+};
+
+static int dsi_connector_init(struct drm_device *dev, struct dw_dsi *dsi)
+{
+	struct drm_encoder *encoder = &dsi->encoder;
+	struct drm_connector *connector = &dsi->connector;
+	int ret;
+
+	connector->polled = DRM_CONNECTOR_POLL_HPD;
+	drm_connector_helper_add(connector,
+				 &dsi_connector_helper_funcs);
+
+	ret = drm_connector_init(dev, &dsi->connector,
+				 &dsi_atomic_connector_funcs,
+				 DRM_MODE_CONNECTOR_DSI);
+	if (ret)
+		return ret;
+
+	ret = drm_connector_attach_encoder(connector, encoder);
+	if (ret)
+		return ret;
+
+	ret = drm_panel_attach(dsi->panel, connector);
+	if (ret)
+		return ret;
+
+	DRM_INFO("connector init\n");
+	return 0;
+}
+/****************************************************************************/
+
+/***************************for the encoder_helper_funcs****************************************/
+static const struct drm_encoder_funcs dw_encoder_funcs = {
+	.destroy = drm_encoder_cleanup,
+};
+
+
+static int dsi_encoder_atomic_check(struct drm_encoder *encoder,
+				    struct drm_crtc_state *crtc_state,
+				    struct drm_connector_state *conn_state)
+{
+	/* do nothing */
+	return 0;
+}
+
+static enum drm_mode_status dsi_encoder_mode_valid(struct drm_encoder *encoder,
+					const struct drm_display_mode *mode)
+
+{
+	 return hisi_dsi_ops->encoder_valid(encoder,mode);
+}
+
+static void dsi_encoder_mode_set(struct drm_encoder *encoder,
+				 struct drm_display_mode *mode,
+				 struct drm_display_mode *adj_mode)
+{
+	struct dw_dsi *dsi = encoder_to_dsi(encoder);
+
+	drm_mode_copy(&dsi->cur_mode, adj_mode);
+}
+
+static void dsi_encoder_enable(struct drm_encoder *encoder)
+{
+	struct dw_dsi *dsi = encoder_to_dsi(encoder);
+
+
+
+	if (dsi->enable)
+		return;
+
+	hisi_dsi_ops->encoder_enable(encoder);
+
+	if (KIRIN960_DSI == hisi_dsi_ops->version) {
+		/* turn on panel */
+		if (dsi->panel && drm_panel_prepare(dsi->panel))
+			DRM_ERROR("failed to prepare panel\n");
+
+		/*dw_dsi_set_mode(dsi, DSI_VIDEO_MODE);*/
+
+		/* turn on panel's back light */
+		if (dsi->panel && drm_panel_enable(dsi->panel))
+			DRM_ERROR("failed to enable panel\n");
+
+	}
+
+	dsi->enable = true;
+}
+
+static void dw_dsi_set_mode(struct dw_dsi *dsi, enum dsi_work_mode mode)
+{
+	struct dsi_hw_ctx *ctx = dsi->ctx;
+	void __iomem *base = ctx->base;
+
+	writel(RESET, base + PWR_UP);
+	writel(mode, base + MODE_CFG);
+	writel(POWERUP, base + PWR_UP);
+}
+
+static void dsi_encoder_disable(struct drm_encoder *encoder)
+{
+	struct dw_dsi *dsi = encoder_to_dsi(encoder);
+	struct dsi_hw_ctx *ctx = dsi->ctx;
+
+	if (!dsi->enable)
+		return;
+
+	dw_dsi_set_mode(dsi, DSI_COMMAND_MODE);
+	
+	if (KIRIN960_DSI == hisi_dsi_ops->version) {
+		/* turn off panel's backlight */
+		if (dsi->panel && drm_panel_disable(dsi->panel))
+			DRM_ERROR("failed to disable panel\n");
+
+		/* turn off panel */
+		if (dsi->panel && drm_panel_unprepare(dsi->panel))
+			DRM_ERROR("failed to unprepare panel\n");
+
+		clk_disable_unprepare(ctx->dss_dphy0_ref_clk);
+		clk_disable_unprepare(ctx->dss_dphy0_cfg_clk);
+		clk_disable_unprepare(ctx->dss_pclk_dsi0_clk);
+	}
+
+	dsi->enable = false;
+}
+
+static const struct drm_encoder_helper_funcs dw_encoder_helper_funcs = {
+	.atomic_check	= dsi_encoder_atomic_check,
+	.mode_valid	= dsi_encoder_mode_valid,
+	.mode_set	= dsi_encoder_mode_set,
+	.enable		= dsi_encoder_enable,
+	.disable	= dsi_encoder_disable
+};
+
+/****************************************************************************/
+static int dsi_bridge_init(struct drm_device *dev, struct dw_dsi *dsi)
+{
+	struct drm_encoder *encoder = &dsi->encoder;
+	struct drm_bridge *bridge = dsi->bridge;
+	int ret;
+
+	/* associate the bridge to dsi encoder */
+	ret = drm_bridge_attach(encoder, bridge, NULL);
+	if (ret) {
+		DRM_ERROR("failed to attach external bridge\n");
+		return ret;
+	}
+
+	return 0;
+}
+
+static int dw_drm_encoder_init(struct device *dev,
+			       struct drm_device *drm_dev,
+			       struct drm_encoder *encoder)
+{
+	int ret;
+	u32 crtc_mask = drm_of_find_possible_crtcs(drm_dev, dev->of_node);
+
+	if (!crtc_mask) {
+		DRM_ERROR("failed to find crtc mask\n");
+		return -EINVAL;
+	}
+
+	encoder->possible_crtcs = crtc_mask;
+	ret = drm_encoder_init(drm_dev, encoder, &dw_encoder_funcs,
+			       DRM_MODE_ENCODER_DSI, NULL);
+	if (ret) {
+		DRM_ERROR("failed to init dsi encoder\n");
+		return ret;
+	}
+
+	drm_encoder_helper_add(encoder, &dw_encoder_helper_funcs);
+
+	return 0;
+}
+
+static int dsi_bind(struct device *dev, struct device *master, void *data)
+{
+	struct dsi_data *ddata = dev_get_drvdata(dev);
+	struct dw_dsi *dsi = &ddata->dsi;
+	struct drm_device *drm_dev = data;
+	int ret;
+
+	DRM_INFO("+. \n");
+	ret = dw_drm_encoder_init(dev, drm_dev, &dsi->encoder);
+	if (ret)
+		return ret;
+
+	if (dsi->bridge) {
+		ret = dsi_bridge_init(drm_dev, dsi);
+		if (ret)
+			return ret;
+	}
+
+	if (KIRIN960_DSI == hisi_dsi_ops->version) {
+		if (dsi->panel) {
+			ret = dsi_connector_init(drm_dev, dsi);
+			if (ret)
+				return ret;
+		}
+	}else if (KIRIN620_DSI == hisi_dsi_ops->version) {
+		/*the panel for the kirin620 drm have not support*/
+	}
+
+	DRM_INFO("-. \n");
+	return 0;
+}
+
+static void dsi_unbind(struct device *dev, struct device *master, void *data)
+{
+	/* do nothing */
+}
+
+static const struct component_ops dsi_ops = {
+	.bind	= dsi_bind,
+	.unbind	= dsi_unbind,
+};
+
+
+
+static int dsi_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct dsi_data *data;
+	struct dw_dsi *dsi;
+	struct dsi_hw_ctx *ctx;
+	int ret;
+
+	hisi_dsi_ops =  (struct kirin_dsi_ops *) of_device_get_match_data(dev);
+
+	DRM_INFO("+. \n");
+	data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
+	if (!data) {
+		DRM_ERROR("failed to allocate dsi data.\n");
+		return -ENOMEM;
+	}
+	dsi = &data->dsi;
+	ctx = &data->ctx;
+	dsi->ctx = ctx;
+
+	if (NULL == hisi_dsi_ops) {
+		DRM_ERROR("hisi_dsi_ops is not bind\n");
+	}
+	ret = hisi_dsi_ops->host_init(dev, dsi);
+	if (ret)
+		return ret;
+	
+	ret = hisi_dsi_ops->parse_dt(pdev, dsi);
+	if (ret)
+		goto err_host_unregister;
+
+	platform_set_drvdata(pdev, data);
+
+	ret = component_add(dev, &dsi_ops);
+	if (ret)
+		goto err_host_unregister;
+
+	DRM_INFO("-. \n");
+	return 0;
+
+err_host_unregister:
+	mipi_dsi_host_unregister(&dsi->host);
+	return ret;
+}
+static int dsi_remove(struct platform_device *pdev)
+{
+	component_del(&pdev->dev, &dsi_ops);
+
+	return 0;
+}
+
+static const struct of_device_id dsi_of_match[] = {
+#ifdef CONFIG_DRM_HISI_KIRIN960
+	{
+		.compatible = "hisilicon,hi3660-dsi",
+		.data = &kirin_dsi_960,
+	},
+#endif
+#ifdef CONFIG_DRM_HISI_KIRIN620
+	{
+		.compatible = "hisilicon,hi6220-dsi",
+		.data = &kirin_dsi_620,
+	},
+#endif
+	{ /* end node */}
+};
+MODULE_DEVICE_TABLE(of, dsi_of_match);
+
+static struct platform_driver dsi_driver = {
+	.probe = dsi_probe,
+	.remove = dsi_remove,
+	.driver = {
+		.name = "dw-dsi",
+		.of_match_table = dsi_of_match,
+	},
+};
+
+module_platform_driver(dsi_driver);
+
+MODULE_DESCRIPTION("DesignWare MIPI DSI Host Controller v1.02 driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_dsi.h b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_dsi.h
new file mode 100644
index 0000000..4043784
--- /dev/null
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_dsi.h
@@ -0,0 +1,259 @@
+#ifndef __KIRIN_DRM_DSI_H__
+#define __KIRIN_DRM_DSI_H__
+
+
+#include <linux/clk.h>
+#include <linux/component.h>
+#include <linux/of_graph.h>
+#include <linux/iopoll.h>
+#include <video/mipi_display.h>
+#include <linux/gpio/consumer.h>
+#include <linux/of_address.h>
+#include <linux/of_platform.h>
+
+#include <drm/drm_of.h>
+#include <drm/drm_crtc_helper.h>
+#include <drm/drm_mipi_dsi.h>
+#include <drm/drm_encoder_slave.h>
+#include <drm/drm_atomic_helper.h>
+#include <drm/drm_panel.h>
+
+#define ROUND(x, y)		((x) / (y) + \
+				((x) % (y) * 10 / (y) >= 5 ? 1 : 0))
+#define PHY_REF_CLK_RATE	19200000
+#define PHY_REF_CLK_PERIOD_PS	(1000000000 / (PHY_REF_CLK_RATE / 1000))
+
+#define encoder_to_dsi(encoder) \
+	container_of(encoder, struct dw_dsi, encoder)
+#define host_to_dsi(host) \
+	container_of(host, struct dw_dsi, host)
+#define connector_to_dsi(connector) \
+	container_of(connector, struct dw_dsi, connector)
+	
+enum dsi_output_client {
+	OUT_HDMI = 0,
+	OUT_PANEL,
+	OUT_MAX
+};
+
+struct dsi_phy_range {
+	u32 min_range_kHz;
+	u32 max_range_kHz;
+	u32 pll_vco_750M;
+	u32 hstx_ckg_sel;
+};
+
+static const struct dsi_phy_range dphy_range_info[] = {
+	{   46875,    62500,   1,    7 },
+	{   62500,    93750,   0,    7 },
+	{   93750,   125000,   1,    6 },
+	{  125000,   187500,   0,    6 },
+	{  187500,   250000,   1,    5 },
+	{  250000,   375000,   0,    5 },
+	{  375000,   500000,   1,    4 },
+	{  500000,   750000,   0,    4 },
+	{  750000,  1000000,   1,    0 },
+	{ 1000000,  1500000,   0,    0 }
+};
+
+struct dsi_hw_ctx {
+	void __iomem *base;
+	char __iomem *peri_crg_base;
+
+	struct clk *pclk;
+	struct clk *dss_dphy0_ref_clk;
+	struct clk *dss_dphy1_ref_clk;
+	struct clk *dss_dphy0_cfg_clk;
+	struct clk *dss_dphy1_cfg_clk;
+	struct clk *dss_pclk_dsi0_clk;
+	struct clk *dss_pclk_dsi1_clk;
+};
+
+struct mipi_panel_info {
+	u8 dsi_version;
+	u8 vc;
+	u8 lane_nums;
+	u8 lane_nums_select_support;
+	u8 color_mode;
+	u32 dsi_bit_clk; /* clock lane(p/n) */
+	u32 burst_mode;
+	u32 max_tx_esc_clk;
+	u8 non_continue_en;
+
+	u32 dsi_bit_clk_val1;
+	u32 dsi_bit_clk_val2;
+	u32 dsi_bit_clk_val3;
+	u32 dsi_bit_clk_val4;
+	u32 dsi_bit_clk_val5;
+	u32 dsi_bit_clk_upt;
+	/*uint32_t dsi_pclk_rate;*/
+
+	u32 hs_wr_to_time;
+
+	/* dphy config parameter adjust*/
+	u32 clk_post_adjust;
+	u32 clk_pre_adjust;
+	u32 clk_pre_delay_adjust;
+	u32 clk_t_hs_exit_adjust;
+	u32 clk_t_hs_trial_adjust;
+	u32 clk_t_hs_prepare_adjust;
+	int clk_t_lpx_adjust;
+	u32 clk_t_hs_zero_adjust;
+	u32 data_post_delay_adjust;
+	int data_t_lpx_adjust;
+	u32 data_t_hs_prepare_adjust;
+	u32 data_t_hs_zero_adjust;
+	u32 data_t_hs_trial_adjust;
+	u32 rg_vrefsel_vcm_adjust;
+
+	/*only for Chicago<3660> use*/
+	u32 rg_vrefsel_vcm_clk_adjust;
+	u32 rg_vrefsel_vcm_data_adjust;
+};
+
+struct mipi_phy_params {
+	u32 clk_t_lpx;
+	u32 clk_t_hs_prepare;
+	u32 clk_t_hs_zero;
+	u32 clk_t_hs_trial;
+	u32 clk_t_wakeup;
+	u32 data_t_lpx;
+	u32 data_t_hs_prepare;
+	u32 data_t_hs_zero;
+	u32 data_t_hs_trial;
+	u32 data_t_ta_go;
+	u32 data_t_ta_get;
+	u32 data_t_wakeup;
+	u32 hstx_ckg_sel;
+	u32 pll_fbd_div5f;
+	u32 pll_fbd_div1f;
+	u32 pll_fbd_2p;
+	u32 pll_enbwt;
+	u32 pll_fbd_p;
+	u32 pll_fbd_s;
+	u32 pll_pre_div1p;
+	u32 pll_pre_p;
+	u32 pll_vco_750M;
+	u32 pll_lpf_rs;
+	u32 pll_lpf_cs;
+	u32 clk_division;
+	/********for hikey620************/
+	u32 clklp2hs_time;
+	u32 clkhs2lp_time;
+	u32 lp2hs_time;
+	u32 hs2lp_time;
+	u32 clk_to_data_delay;
+	u32 data_to_clk_delay;
+	u32 lane_byte_clk_kHz;
+	/*****************/
+
+	/****for hikey960*****/
+	u64 lane_byte_clk;
+
+	u32 clk_lane_lp2hs_time;
+	u32 clk_lane_hs2lp_time;
+	u32 data_lane_lp2hs_time;
+	u32 data_lane_hs2lp_time;
+	u32 clk2data_delay;
+	u32 data2clk_delay;
+
+	u32 clk_pre_delay;
+	u32 clk_post_delay;
+	u32 data_pre_delay;
+	u32 data_post_delay;
+	u32 phy_stop_wait_time;
+	u32 rg_vrefsel_vcm;
+
+	u32 rg_pll_enswc;
+	u32 rg_pll_chp;
+
+	u32 pll_register_override;		/*0x1E[0]*/
+	u32 pll_power_down;			/*0x1E[1]*/
+	u32 rg_band_sel;				/*0x1E[2]*/
+	u32 rg_phase_gen_en;		/*0x1E[3]*/
+	u32 reload_sel;				/*0x1E[4]*/
+	u32 rg_pll_cp_p;				/*0x1E[7:5]*/
+	u32 rg_pll_refsel;				/*0x16[1:0]*/
+	u32 rg_pll_cp;				/*0x16[7:5]*/
+	u32 load_command;
+	/*********/
+};
+
+struct ldi_panel_info {
+	u32 h_back_porch;
+	u32 h_front_porch;
+	u32 h_pulse_width;
+
+	/*
+	** note: vbp > 8 if used overlay compose,
+	** also lcd vbp > 8 in lcd power on sequence
+	*/
+	u32 v_back_porch;
+	u32 v_front_porch;
+	u32 v_pulse_width;
+
+	u8 hsync_plr;
+	u8 vsync_plr;
+	u8 pixelclk_plr;
+	u8 data_en_plr;
+
+	/* for cabc */
+	u8 dpi0_overlap_size;
+	u8 dpi1_overlap_size;
+};
+
+struct dw_dsi_client {
+	u32 lanes;
+	u32 phy_clock; /* in kHz */
+	enum mipi_dsi_pixel_format format;
+	unsigned long mode_flags;
+};
+
+struct dw_dsi {
+	struct drm_encoder encoder;
+	struct drm_bridge *bridge;
+	struct drm_panel *panel;
+	struct mipi_dsi_host host;
+	struct drm_connector connector; /* connector for panel */
+	struct drm_display_mode cur_mode;
+	struct dsi_hw_ctx *ctx;
+	struct mipi_phy_params phy;
+	struct mipi_panel_info mipi;
+	struct ldi_panel_info ldi;
+	u32 lanes;
+	enum mipi_dsi_pixel_format format;
+	unsigned long mode_flags;
+	struct gpio_desc *gpio_mux;
+	struct dw_dsi_client client[OUT_MAX];
+	enum dsi_output_client cur_client;
+	bool enable;
+};
+
+struct dsi_data {
+	struct dw_dsi dsi;
+	struct dsi_hw_ctx ctx;
+};
+
+enum kirin_dsi_version {
+	KIRIN620_DSI = 0,
+	KIRIN960_DSI
+};
+
+/* display controller init/cleanup ops */
+struct kirin_dsi_ops {
+	enum kirin_dsi_version version;
+	int (*parse_dt)(struct platform_device *pdev, struct dw_dsi *dsi);
+	int (*host_init)(struct device *dev, struct dw_dsi *dsi);
+	void (*encoder_enable)(struct drm_encoder *encoder);
+	enum drm_mode_status(*encoder_valid)(struct drm_encoder *encoder,
+					const struct drm_display_mode *mode);
+};
+
+#ifdef CONFIG_DRM_HISI_KIRIN960
+extern const struct kirin_dsi_ops kirin_dsi_960;
+#endif
+#ifdef CONFIG_DRM_HISI_KIRIN620
+extern const struct kirin_dsi_ops kirin_dsi_620;
+#endif
+
+#endif /* __KIRIN_DRM_DSI_H__ */
diff --git a/drivers/gpu/drm/i915/display/intel_connector.c b/drivers/gpu/drm/i915/display/intel_connector.c
index 308ec63..ba2ef16 100644
--- a/drivers/gpu/drm/i915/display/intel_connector.c
+++ b/drivers/gpu/drm/i915/display/intel_connector.c
@@ -277,7 +277,7 @@ intel_attach_aspect_ratio_property(struct drm_connector *connector)
 void
 intel_attach_colorspace_property(struct drm_connector *connector)
 {
-	if (!drm_mode_create_colorspace_property(connector))
+	if (!drm_mode_create_hdmi_colorspace_property(connector))
 		drm_object_attach_property(&connector->base,
 					   connector->colorspace_property, 0);
 }
diff --git a/drivers/gpu/drm/i915/display/intel_panel.c b/drivers/gpu/drm/i915/display/intel_panel.c
index 23edc1b..ee5f46b 100644
--- a/drivers/gpu/drm/i915/display/intel_panel.c
+++ b/drivers/gpu/drm/i915/display/intel_panel.c
@@ -1869,7 +1869,7 @@ static int pwm_setup_backlight(struct intel_connector *connector,
 
 	panel->backlight.min = 0; /* 0% */
 	panel->backlight.max = 100; /* 100% */
-	panel->backlight.level = DIV_ROUND_UP(
+	panel->backlight.level = DIV64_U64_ROUND_UP(
 				 pwm_get_duty_cycle(panel->backlight.pwm) * 100,
 				 CRC_PMIC_PWM_PERIOD_NS);
 	panel->backlight.enabled = panel->backlight.level != 0;
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
index 6d0cc90..968d9b2 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
@@ -619,14 +619,6 @@ static int i915_gem_userptr_get_pages(struct drm_i915_gem_object *obj)
 				      GFP_KERNEL |
 				      __GFP_NORETRY |
 				      __GFP_NOWARN);
-		/*
-		 * Using __get_user_pages_fast() with a read-only
-		 * access is questionable. A read-only page may be
-		 * COW-broken, and then this might end up giving
-		 * the wrong side of the COW..
-		 *
-		 * We may or may not care.
-		 */
 		if (pvec) /* defer to worker if malloc fails */
 			pinned = __get_user_pages_fast(obj->userptr.ptr,
 						       num_pages,
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
index 40431a0..bf5220c 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
+++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
@@ -2,6 +2,7 @@
 /* Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. */
 
 #include <linux/clk.h>
+#include <linux/dma-mapping.h>
 #include <linux/interconnect.h>
 #include <linux/pm_domain.h>
 #include <linux/pm_opp.h>
@@ -897,21 +898,10 @@ int a6xx_gmu_stop(struct a6xx_gpu *a6xx_gpu)
 
 static void a6xx_gmu_memory_free(struct a6xx_gmu *gmu, struct a6xx_gmu_bo *bo)
 {
-	int count, i;
-	u64 iova;
-
 	if (IS_ERR_OR_NULL(bo))
 		return;
 
-	count = bo->size >> PAGE_SHIFT;
-	iova = bo->iova;
-
-	for (i = 0; i < count; i++, iova += PAGE_SIZE) {
-		iommu_unmap(gmu->domain, iova, PAGE_SIZE);
-		__free_pages(bo->pages[i], 0);
-	}
-
-	kfree(bo->pages);
+	dma_free_attrs(gmu->dev, bo->size, bo->virt, bo->iova, bo->attrs);
 	kfree(bo);
 }
 
@@ -919,94 +909,23 @@ static struct a6xx_gmu_bo *a6xx_gmu_memory_alloc(struct a6xx_gmu *gmu,
 		size_t size)
 {
 	struct a6xx_gmu_bo *bo;
-	int ret, count, i;
 
 	bo = kzalloc(sizeof(*bo), GFP_KERNEL);
 	if (!bo)
 		return ERR_PTR(-ENOMEM);
 
 	bo->size = PAGE_ALIGN(size);
+	bo->attrs = DMA_ATTR_WRITE_COMBINE;
 
-	count = bo->size >> PAGE_SHIFT;
+	bo->virt = dma_alloc_attrs(gmu->dev, bo->size, &bo->iova, GFP_KERNEL,
+		bo->attrs);
 
-	bo->pages = kcalloc(count, sizeof(struct page *), GFP_KERNEL);
-	if (!bo->pages) {
+	if (!bo->virt) {
 		kfree(bo);
 		return ERR_PTR(-ENOMEM);
 	}
 
-	for (i = 0; i < count; i++) {
-		bo->pages[i] = alloc_page(GFP_KERNEL);
-		if (!bo->pages[i])
-			goto err;
-	}
-
-	bo->iova = gmu->uncached_iova_base;
-
-	for (i = 0; i < count; i++) {
-		ret = iommu_map(gmu->domain,
-			bo->iova + (PAGE_SIZE * i),
-			page_to_phys(bo->pages[i]), PAGE_SIZE,
-			IOMMU_READ | IOMMU_WRITE);
-
-		if (ret) {
-			DRM_DEV_ERROR(gmu->dev, "Unable to map GMU buffer object\n");
-
-			for (i = i - 1 ; i >= 0; i--)
-				iommu_unmap(gmu->domain,
-					bo->iova + (PAGE_SIZE * i),
-					PAGE_SIZE);
-
-			goto err;
-		}
-	}
-
-	bo->virt = vmap(bo->pages, count, VM_IOREMAP,
-		pgprot_writecombine(PAGE_KERNEL));
-	if (!bo->virt)
-		goto err;
-
-	/* Align future IOVA addresses on 1MB boundaries */
-	gmu->uncached_iova_base += ALIGN(size, SZ_1M);
-
 	return bo;
-
-err:
-	for (i = 0; i < count; i++) {
-		if (bo->pages[i])
-			__free_pages(bo->pages[i], 0);
-	}
-
-	kfree(bo->pages);
-	kfree(bo);
-
-	return ERR_PTR(-ENOMEM);
-}
-
-static int a6xx_gmu_memory_probe(struct a6xx_gmu *gmu)
-{
-	int ret;
-
-	/*
-	 * The GMU address space is hardcoded to treat the range
-	 * 0x60000000 - 0x80000000 as un-cached memory. All buffers shared
-	 * between the GMU and the CPU will live in this space
-	 */
-	gmu->uncached_iova_base = 0x60000000;
-
-
-	gmu->domain = iommu_domain_alloc(&platform_bus_type);
-	if (!gmu->domain)
-		return -ENODEV;
-
-	ret = iommu_attach_device(gmu->domain, gmu->dev);
-
-	if (ret) {
-		iommu_domain_free(gmu->domain);
-		gmu->domain = NULL;
-	}
-
-	return ret;
 }
 
 /* Return the 'arc-level' for the given frequency */
@@ -1264,10 +1183,6 @@ void a6xx_gmu_remove(struct a6xx_gpu *a6xx_gpu)
 
 	a6xx_gmu_memory_free(gmu, gmu->hfi);
 
-	iommu_detach_device(gmu->domain, gmu->dev);
-
-	iommu_domain_free(gmu->domain);
-
 	free_irq(gmu->gmu_irq, gmu);
 	free_irq(gmu->hfi_irq, gmu);
 
@@ -1288,7 +1203,10 @@ int a6xx_gmu_init(struct a6xx_gpu *a6xx_gpu, struct device_node *node)
 
 	gmu->dev = &pdev->dev;
 
-	of_dma_configure(gmu->dev, node, true);
+	/* Pass force_dma false to require the DT to set the dma region */
+	ret = of_dma_configure(gmu->dev, node, false);
+	if (ret)
+		return ret;
 
 	/* Fow now, don't do anything fancy until we get our feet under us */
 	gmu->idle_level = GMU_IDLE_STATE_ACTIVE;
@@ -1300,11 +1218,6 @@ int a6xx_gmu_init(struct a6xx_gpu *a6xx_gpu, struct device_node *node)
 	if (ret)
 		goto err_put_device;
 
-	/* Set up the IOMMU context bank */
-	ret = a6xx_gmu_memory_probe(gmu);
-	if (ret)
-		goto err_put_device;
-
 	/* Allocate memory for for the HFI queues */
 	gmu->hfi = a6xx_gmu_memory_alloc(gmu, SZ_16K);
 	if (IS_ERR(gmu->hfi))
@@ -1350,11 +1263,6 @@ int a6xx_gmu_init(struct a6xx_gpu *a6xx_gpu, struct device_node *node)
 err_memory:
 	a6xx_gmu_memory_free(gmu, gmu->hfi);
 
-	if (gmu->domain) {
-		iommu_detach_device(gmu->domain, gmu->dev);
-
-		iommu_domain_free(gmu->domain);
-	}
 	ret = -ENODEV;
 
 err_put_device:
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.h b/drivers/gpu/drm/msm/adreno/a6xx_gmu.h
index 39a26dd..f5c733a 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.h
+++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.h
@@ -12,8 +12,8 @@
 struct a6xx_gmu_bo {
 	void *virt;
 	size_t size;
-	u64 iova;
-	struct page **pages;
+	dma_addr_t iova;
+	unsigned long attrs;
 };
 
 /*
@@ -49,9 +49,6 @@ struct a6xx_gmu {
 	int hfi_irq;
 	int gmu_irq;
 
-	struct iommu_domain *domain;
-	u64 uncached_iova_base;
-
 	struct device *gxpd;
 
 	int idle_level;
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
index b984baf..9b2efee 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
@@ -858,7 +858,7 @@ static int dpu_plane_atomic_check(struct drm_plane *plane,
 					  pdpu->pipe_sblk->maxdwnscale << 16,
 					  true, true);
 	if (ret) {
-		DPU_ERROR_PLANE(pdpu, "Check plane state failed (%d)\n", ret);
+		DPU_DEBUG_PLANE(pdpu, "Check plane state failed (%d)\n", ret);
 		return ret;
 	}
 	if (!state->visible)
@@ -884,13 +884,13 @@ static int dpu_plane_atomic_check(struct drm_plane *plane,
 		(!(pdpu->features & DPU_SSPP_SCALER) ||
 		 !(pdpu->features & (BIT(DPU_SSPP_CSC)
 		 | BIT(DPU_SSPP_CSC_10BIT))))) {
-		DPU_ERROR_PLANE(pdpu,
+		DPU_DEBUG_PLANE(pdpu,
 				"plane doesn't have scaler/csc for yuv\n");
 		return -EINVAL;
 
 	/* check src bounds */
 	} else if (!dpu_plane_validate_src(&src, &fb_rect, min_src_size)) {
-		DPU_ERROR_PLANE(pdpu, "invalid source " DRM_RECT_FMT "\n",
+		DPU_DEBUG_PLANE(pdpu, "invalid source " DRM_RECT_FMT "\n",
 				DRM_RECT_ARG(&src));
 		return -E2BIG;
 
@@ -899,19 +899,19 @@ static int dpu_plane_atomic_check(struct drm_plane *plane,
 		   (src.x1 & 0x1 || src.y1 & 0x1 ||
 		    drm_rect_width(&src) & 0x1 ||
 		    drm_rect_height(&src) & 0x1)) {
-		DPU_ERROR_PLANE(pdpu, "invalid yuv source " DRM_RECT_FMT "\n",
+		DPU_DEBUG_PLANE(pdpu, "invalid yuv source " DRM_RECT_FMT "\n",
 				DRM_RECT_ARG(&src));
 		return -EINVAL;
 
 	/* min dst support */
 	} else if (drm_rect_width(&dst) < 0x1 || drm_rect_height(&dst) < 0x1) {
-		DPU_ERROR_PLANE(pdpu, "invalid dest rect " DRM_RECT_FMT "\n",
+		DPU_DEBUG_PLANE(pdpu, "invalid dest rect " DRM_RECT_FMT "\n",
 				DRM_RECT_ARG(&dst));
 		return -EINVAL;
 
 	/* check decimated source width */
 	} else if (drm_rect_width(&src) > max_linewidth) {
-		DPU_ERROR_PLANE(pdpu, "invalid src " DRM_RECT_FMT " line:%u\n",
+		DPU_DEBUG_PLANE(pdpu, "invalid src " DRM_RECT_FMT " line:%u\n",
 				DRM_RECT_ARG(&src), max_linewidth);
 		return -E2BIG;
 	}
diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/ttm_bo_vm.c
index f2bad14..6d9c47c 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_vm.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c
@@ -61,9 +61,10 @@ static vm_fault_t ttm_bo_vm_fault_idle(struct ttm_buffer_object *bo,
 
 	/*
 	 * If possible, avoid waiting for GPU with mmap_sem
-	 * held.
+	 * held.  We only do this if the fault allows retry and this
+	 * is the first attempt.
 	 */
-	if (vmf->flags & FAULT_FLAG_ALLOW_RETRY) {
+	if (fault_flag_allow_retry_first(vmf->flags)) {
 		ret = VM_FAULT_RETRY;
 		if (vmf->flags & FAULT_FLAG_RETRY_NOWAIT)
 			goto out_unlock;
@@ -132,7 +133,12 @@ static vm_fault_t ttm_bo_vm_fault(struct vm_fault *vmf)
 	 * for the buffer to become unreserved.
 	 */
 	if (unlikely(!dma_resv_trylock(bo->base.resv))) {
-		if (vmf->flags & FAULT_FLAG_ALLOW_RETRY) {
+		/*
+		 * If the fault allows retry and this is the first
+		 * fault attempt, we try to release the mmap_sem
+		 * before waiting
+		 */
+		if (fault_flag_allow_retry_first(vmf->flags)) {
 			if (!(vmf->flags & FAULT_FLAG_RETRY_NOWAIT)) {
 				ttm_bo_get(bo);
 				up_read(&vmf->vma->vm_mm->mmap_sem);
diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
index e622485..7f56940 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -298,10 +298,6 @@ virtio_gpu_user_framebuffer_create(struct drm_device *dev,
 	struct virtio_gpu_framebuffer *virtio_gpu_fb;
 	int ret;
 
-	if (mode_cmd->pixel_format != DRM_FORMAT_HOST_XRGB8888 &&
-	    mode_cmd->pixel_format != DRM_FORMAT_HOST_ARGB8888)
-		return ERR_PTR(-ENOENT);
-
 	/* lookup object associated with res handle */
 	obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[0]);
 	if (!obj)
@@ -350,7 +346,6 @@ void virtio_gpu_modeset_init(struct virtio_gpu_device *vgdev)
 	int i;
 
 	drm_mode_config_init(vgdev->ddev);
-	vgdev->ddev->mode_config.quirk_addfb_prefer_host_byte_order = true;
 	vgdev->ddev->mode_config.funcs = &virtio_gpu_mode_funcs;
 	vgdev->ddev->mode_config.helper_private = &virtio_mode_config_helpers;
 
diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c
index a492ac3..56a2757 100644
--- a/drivers/gpu/drm/virtio/virtgpu_plane.c
+++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
@@ -30,7 +30,14 @@
 #include "virtgpu_drv.h"
 
 static const uint32_t virtio_gpu_formats[] = {
-	DRM_FORMAT_HOST_XRGB8888,
+	DRM_FORMAT_XRGB8888,
+	DRM_FORMAT_ARGB8888,
+	DRM_FORMAT_BGRX8888,
+	DRM_FORMAT_BGRA8888,
+	DRM_FORMAT_RGBX8888,
+	DRM_FORMAT_RGBA8888,
+	DRM_FORMAT_XBGR8888,
+	DRM_FORMAT_ABGR8888,
 };
 
 static const uint32_t virtio_gpu_cursor_formats[] = {
@@ -42,6 +49,32 @@ uint32_t virtio_gpu_translate_format(uint32_t drm_fourcc)
 	uint32_t format;
 
 	switch (drm_fourcc) {
+#ifdef __BIG_ENDIAN
+	case DRM_FORMAT_XRGB8888:
+		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
+		break;
+	case DRM_FORMAT_ARGB8888:
+		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
+		break;
+	case DRM_FORMAT_BGRX8888:
+		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
+		break;
+	case DRM_FORMAT_BGRA8888:
+		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
+		break;
+	case DRM_FORMAT_RGBX8888:
+		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
+		break;
+	case DRM_FORMAT_RGBA8888:
+		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
+		break;
+	case DRM_FORMAT_XBGR8888:
+		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
+		break;
+	case DRM_FORMAT_ABGR8888:
+		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
+		break;
+#else
 	case DRM_FORMAT_XRGB8888:
 		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
 		break;
@@ -54,6 +87,19 @@ uint32_t virtio_gpu_translate_format(uint32_t drm_fourcc)
 	case DRM_FORMAT_BGRA8888:
 		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
 		break;
+	case DRM_FORMAT_RGBX8888:
+		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
+		break;
+	case DRM_FORMAT_RGBA8888:
+		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
+		break;
+	case DRM_FORMAT_XBGR8888:
+		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
+		break;
+	case DRM_FORMAT_ABGR8888:
+		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
+		break;
+#endif
 	default:
 		/*
 		 * This should not happen, we handle everything listed
diff --git a/drivers/gpu/trace/Kconfig b/drivers/gpu/trace/Kconfig
new file mode 100644
index 0000000..c24e9ed
--- /dev/null
+++ b/drivers/gpu/trace/Kconfig
@@ -0,0 +1,4 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+config TRACE_GPU_MEM
+	bool
diff --git a/drivers/gpu/trace/Makefile b/drivers/gpu/trace/Makefile
new file mode 100644
index 0000000..b70fbdc
--- /dev/null
+++ b/drivers/gpu/trace/Makefile
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: GPL-2.0
+
+obj-$(CONFIG_TRACE_GPU_MEM) += trace_gpu_mem.o
diff --git a/drivers/gpu/trace/trace_gpu_mem.c b/drivers/gpu/trace/trace_gpu_mem.c
new file mode 100644
index 0000000..01e8558
--- /dev/null
+++ b/drivers/gpu/trace/trace_gpu_mem.c
@@ -0,0 +1,13 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * GPU memory trace points
+ *
+ * Copyright (C) 2020 Google, Inc.
+ */
+
+#include <linux/module.h>
+
+#define CREATE_TRACE_POINTS
+#include <trace/events/gpu_mem.h>
+
+EXPORT_TRACEPOINT_SYMBOL(gpu_mem_total);
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
index 1ecb512..018fb7220 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
@@ -701,6 +701,17 @@
 	  To compile this driver as a module, choose M here: the
 	  module will be called hid-multitouch.
 
+config HID_NINTENDO
+	tristate "Nintendo Joy-Con and Pro Controller support"
+	depends on HID
+	help
+	Adds support for the Nintendo Switch Joy-Cons and Pro Controller.
+	All controllers support bluetooth, and the Pro Controller also supports
+	its USB mode.
+
+	To compile this driver as a module, choose M here: the
+	module will be called hid-nintendo.
+
 config HID_NTI
 	tristate "NTI keyboard adapters"
 	---help---
diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
index 0c03308..eee74c3 100644
--- a/drivers/hid/Makefile
+++ b/drivers/hid/Makefile
@@ -73,6 +73,7 @@
 obj-$(CONFIG_HID_MICROSOFT)	+= hid-microsoft.o
 obj-$(CONFIG_HID_MONTEREY)	+= hid-monterey.o
 obj-$(CONFIG_HID_MULTITOUCH)	+= hid-multitouch.o
+obj-$(CONFIG_HID_NINTENDO)	+= hid-nintendo.o
 obj-$(CONFIG_HID_NTI)			+= hid-nti.o
 obj-$(CONFIG_HID_NTRIG)		+= hid-ntrig.o
 obj-$(CONFIG_HID_ORTEK)		+= hid-ortek.o
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 3318393..552d434 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -889,6 +889,9 @@
 #define USB_VENDOR_ID_NINTENDO		0x057e
 #define USB_DEVICE_ID_NINTENDO_WIIMOTE	0x0306
 #define USB_DEVICE_ID_NINTENDO_WIIMOTE2	0x0330
+#define USB_DEVICE_ID_NINTENDO_JOYCONL	0x2006
+#define USB_DEVICE_ID_NINTENDO_JOYCONR	0x2007
+#define USB_DEVICE_ID_NINTENDO_PROCON	0x2009
 
 #define USB_VENDOR_ID_NOVATEK		0x0603
 #define USB_DEVICE_ID_NOVATEK_PCT	0x0600
diff --git a/drivers/hid/hid-nintendo.c b/drivers/hid/hid-nintendo.c
new file mode 100644
index 0000000..3695b96
--- /dev/null
+++ b/drivers/hid/hid-nintendo.c
@@ -0,0 +1,820 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * HID driver for Nintendo Switch Joy-Cons and Pro Controllers
+ *
+ * Copyright (c) 2019 Daniel J. Ogorchock <djogorchock@gmail.com>
+ *
+ * The following resources/projects were referenced for this driver:
+ *   https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering
+ *   https://gitlab.com/pjranki/joycon-linux-kernel (Peter Rankin)
+ *   https://github.com/FrotBot/SwitchProConLinuxUSB
+ *   https://github.com/MTCKC/ProconXInput
+ *   hid-wiimote kernel hid driver
+ *   hid-logitech-hidpp driver
+ *
+ * This driver supports the Nintendo Switch Joy-Cons and Pro Controllers. The
+ * Pro Controllers can either be used over USB or Bluetooth.
+ *
+ * The driver will retrieve the factory calibration info from the controllers,
+ * so little to no user calibration should be required.
+ *
+ */
+
+#include "hid-ids.h"
+#include <linux/delay.h>
+#include <linux/device.h>
+#include <linux/hid.h>
+#include <linux/input.h>
+#include <linux/module.h>
+#include <linux/spinlock.h>
+
+/*
+ * Reference the url below for the following HID report defines:
+ * https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering
+ */
+
+/* Output Reports */
+static const u8 JC_OUTPUT_RUMBLE_AND_SUBCMD	= 0x01;
+static const u8 JC_OUTPUT_FW_UPDATE_PKT		= 0x03;
+static const u8 JC_OUTPUT_RUMBLE_ONLY		= 0x10;
+static const u8 JC_OUTPUT_MCU_DATA		= 0x11;
+static const u8 JC_OUTPUT_USB_CMD		= 0x80;
+
+/* Subcommand IDs */
+static const u8 JC_SUBCMD_STATE			/*= 0x00*/;
+static const u8 JC_SUBCMD_MANUAL_BT_PAIRING	= 0x01;
+static const u8 JC_SUBCMD_REQ_DEV_INFO		= 0x02;
+static const u8 JC_SUBCMD_SET_REPORT_MODE	= 0x03;
+static const u8 JC_SUBCMD_TRIGGERS_ELAPSED	= 0x04;
+static const u8 JC_SUBCMD_GET_PAGE_LIST_STATE	= 0x05;
+static const u8 JC_SUBCMD_SET_HCI_STATE		= 0x06;
+static const u8 JC_SUBCMD_RESET_PAIRING_INFO	= 0x07;
+static const u8 JC_SUBCMD_LOW_POWER_MODE	= 0x08;
+static const u8 JC_SUBCMD_SPI_FLASH_READ	= 0x10;
+static const u8 JC_SUBCMD_SPI_FLASH_WRITE	= 0x11;
+static const u8 JC_SUBCMD_RESET_MCU		= 0x20;
+static const u8 JC_SUBCMD_SET_MCU_CONFIG	= 0x21;
+static const u8 JC_SUBCMD_SET_MCU_STATE		= 0x22;
+static const u8 JC_SUBCMD_SET_PLAYER_LIGHTS	= 0x30;
+static const u8 JC_SUBCMD_GET_PLAYER_LIGHTS	= 0x31;
+static const u8 JC_SUBCMD_SET_HOME_LIGHT	= 0x38;
+static const u8 JC_SUBCMD_ENABLE_IMU		= 0x40;
+static const u8 JC_SUBCMD_SET_IMU_SENSITIVITY	= 0x41;
+static const u8 JC_SUBCMD_WRITE_IMU_REG		= 0x42;
+static const u8 JC_SUBCMD_READ_IMU_REG		= 0x43;
+static const u8 JC_SUBCMD_ENABLE_VIBRATION	= 0x48;
+static const u8 JC_SUBCMD_GET_REGULATED_VOLTAGE	= 0x50;
+
+/* Input Reports */
+static const u8 JC_INPUT_BUTTON_EVENT		= 0x3F;
+static const u8 JC_INPUT_SUBCMD_REPLY		= 0x21;
+static const u8 JC_INPUT_IMU_DATA		= 0x30;
+static const u8 JC_INPUT_MCU_DATA		= 0x31;
+static const u8 JC_INPUT_USB_RESPONSE		= 0x81;
+
+/* Feature Reports */
+static const u8 JC_FEATURE_LAST_SUBCMD		= 0x02;
+static const u8 JC_FEATURE_OTA_FW_UPGRADE	= 0x70;
+static const u8 JC_FEATURE_SETUP_MEM_READ	= 0x71;
+static const u8 JC_FEATURE_MEM_READ		= 0x72;
+static const u8 JC_FEATURE_ERASE_MEM_SECTOR	= 0x73;
+static const u8 JC_FEATURE_MEM_WRITE		= 0x74;
+static const u8 JC_FEATURE_LAUNCH		= 0x75;
+
+/* USB Commands */
+static const u8 JC_USB_CMD_CONN_STATUS		= 0x01;
+static const u8 JC_USB_CMD_HANDSHAKE		= 0x02;
+static const u8 JC_USB_CMD_BAUDRATE_3M		= 0x03;
+static const u8 JC_USB_CMD_NO_TIMEOUT		= 0x04;
+static const u8 JC_USB_CMD_EN_TIMEOUT		= 0x05;
+static const u8 JC_USB_RESET			= 0x06;
+static const u8 JC_USB_PRE_HANDSHAKE		= 0x91;
+static const u8 JC_USB_SEND_UART		= 0x92;
+
+/* SPI storage addresses of factory calibration data */
+static const u16 JC_CAL_DATA_START		= 0x603d;
+static const u16 JC_CAL_DATA_END		= 0x604e;
+#define JC_CAL_DATA_SIZE	(JC_CAL_DATA_END - JC_CAL_DATA_START + 1)
+
+
+/* The raw analog joystick values will be mapped in terms of this magnitude */
+static const u16 JC_MAX_STICK_MAG		= 32767;
+static const u16 JC_STICK_FUZZ			= 250;
+static const u16 JC_STICK_FLAT			= 500;
+
+/* States for controller state machine */
+enum joycon_ctlr_state {
+	JOYCON_CTLR_STATE_INIT,
+	JOYCON_CTLR_STATE_READ,
+};
+
+struct joycon_stick_cal {
+	s32 max;
+	s32 min;
+	s32 center;
+};
+
+/*
+ * All the controller's button values are stored in a u32.
+ * They can be accessed with bitwise ANDs.
+ */
+static const u32 JC_BTN_Y	= BIT(0);
+static const u32 JC_BTN_X	= BIT(1);
+static const u32 JC_BTN_B	= BIT(2);
+static const u32 JC_BTN_A	= BIT(3);
+static const u32 JC_BTN_SR_R	= BIT(4);
+static const u32 JC_BTN_SL_R	= BIT(5);
+static const u32 JC_BTN_R	= BIT(6);
+static const u32 JC_BTN_ZR	= BIT(7);
+static const u32 JC_BTN_MINUS	= BIT(8);
+static const u32 JC_BTN_PLUS	= BIT(9);
+static const u32 JC_BTN_RSTICK	= BIT(10);
+static const u32 JC_BTN_LSTICK	= BIT(11);
+static const u32 JC_BTN_HOME	= BIT(12);
+static const u32 JC_BTN_CAP	= BIT(13); /* capture button */
+static const u32 JC_BTN_DOWN	= BIT(16);
+static const u32 JC_BTN_UP	= BIT(17);
+static const u32 JC_BTN_RIGHT	= BIT(18);
+static const u32 JC_BTN_LEFT	= BIT(19);
+static const u32 JC_BTN_SR_L	= BIT(20);
+static const u32 JC_BTN_SL_L	= BIT(21);
+static const u32 JC_BTN_L	= BIT(22);
+static const u32 JC_BTN_ZL	= BIT(23);
+
+enum joycon_msg_type {
+	JOYCON_MSG_TYPE_NONE,
+	JOYCON_MSG_TYPE_USB,
+	JOYCON_MSG_TYPE_SUBCMD,
+};
+
+struct joycon_subcmd_request {
+	u8 output_id; /* must be 0x01 for subcommand, 0x10 for rumble only */
+	u8 packet_num; /* incremented every send */
+	u8 rumble_data[8];
+	u8 subcmd_id;
+	u8 data[0]; /* length depends on the subcommand */
+} __packed;
+
+struct joycon_subcmd_reply {
+	u8 ack; /* MSB 1 for ACK, 0 for NACK */
+	u8 id; /* id of requested subcmd */
+	u8 data[0]; /* will be at most 35 bytes */
+} __packed;
+
+struct joycon_input_report {
+	u8 id;
+	u8 timer;
+	u8 bat_con; /* battery and connection info */
+	u8 button_status[3];
+	u8 left_stick[3];
+	u8 right_stick[3];
+	u8 vibrator_report;
+
+	/*
+	 * If support for firmware updates, gyroscope data, and/or NFC/IR
+	 * are added in the future, this can be swapped for a union.
+	 */
+	struct joycon_subcmd_reply reply;
+} __packed;
+
+#define JC_MAX_RESP_SIZE	(sizeof(struct joycon_input_report) + 35)
+
+/* Each physical controller is associated with a joycon_ctlr struct */
+struct joycon_ctlr {
+	struct hid_device *hdev;
+	struct input_dev *input;
+	enum joycon_ctlr_state ctlr_state;
+
+	/* The following members are used for synchronous sends/receives */
+	enum joycon_msg_type msg_type;
+	u8 subcmd_num;
+	struct mutex output_mutex;
+	u8 input_buf[JC_MAX_RESP_SIZE];
+	wait_queue_head_t wait;
+	bool received_resp;
+	u8 usb_ack_match;
+	u8 subcmd_ack_match;
+
+	/* factory calibration data */
+	struct joycon_stick_cal left_stick_cal_x;
+	struct joycon_stick_cal left_stick_cal_y;
+	struct joycon_stick_cal right_stick_cal_x;
+	struct joycon_stick_cal right_stick_cal_y;
+
+};
+
+static int __joycon_hid_send(struct hid_device *hdev, u8 *data, size_t len)
+{
+	u8 *buf;
+	int ret;
+
+	buf = kmemdup(data, len, GFP_KERNEL);
+	if (!buf)
+		return -ENOMEM;
+	ret = hid_hw_output_report(hdev, buf, len);
+	kfree(buf);
+	if (ret < 0)
+		hid_dbg(hdev, "Failed to send output report ret=%d\n", ret);
+	return ret;
+}
+
+static int joycon_hid_send_sync(struct joycon_ctlr *ctlr, u8 *data, size_t len)
+{
+	int ret;
+
+	ret = __joycon_hid_send(ctlr->hdev, data, len);
+	if (ret < 0) {
+		memset(ctlr->input_buf, 0, JC_MAX_RESP_SIZE);
+		return ret;
+	}
+
+	if (!wait_event_timeout(ctlr->wait, ctlr->received_resp, HZ)) {
+		hid_dbg(ctlr->hdev, "synchronous send/receive timed out\n");
+		memset(ctlr->input_buf, 0, JC_MAX_RESP_SIZE);
+		return -ETIMEDOUT;
+	}
+
+	ctlr->received_resp = false;
+	return 0;
+}
+
+static int joycon_send_usb(struct joycon_ctlr *ctlr, u8 cmd)
+{
+	int ret;
+	u8 buf[2] = {JC_OUTPUT_USB_CMD};
+
+	buf[1] = cmd;
+	ctlr->usb_ack_match = cmd;
+	ctlr->msg_type = JOYCON_MSG_TYPE_USB;
+	ret = joycon_hid_send_sync(ctlr, buf, sizeof(buf));
+	if (ret)
+		hid_dbg(ctlr->hdev, "send usb command failed; ret=%d\n", ret);
+	return ret;
+}
+
+static int joycon_send_subcmd(struct joycon_ctlr *ctlr,
+			      struct joycon_subcmd_request *subcmd,
+			      size_t data_len)
+{
+	int ret;
+
+	subcmd->output_id = JC_OUTPUT_RUMBLE_AND_SUBCMD;
+	subcmd->packet_num = ctlr->subcmd_num;
+	if (++ctlr->subcmd_num > 0xF)
+		ctlr->subcmd_num = 0;
+	ctlr->subcmd_ack_match = subcmd->subcmd_id;
+	ctlr->msg_type = JOYCON_MSG_TYPE_SUBCMD;
+
+	ret = joycon_hid_send_sync(ctlr, (u8 *)subcmd,
+				   sizeof(*subcmd) + data_len);
+	if (ret < 0)
+		hid_dbg(ctlr->hdev, "send subcommand failed; ret=%d\n", ret);
+	else
+		ret = 0;
+	return ret;
+}
+
+/* Supply nibbles for flash and on. Ones correspond to active */
+static int joycon_set_player_leds(struct joycon_ctlr *ctlr, u8 flash, u8 on)
+{
+	struct joycon_subcmd_request *req;
+	u8 buffer[sizeof(*req) + 1] = { 0 };
+
+	req = (struct joycon_subcmd_request *)buffer;
+	req->subcmd_id = JC_SUBCMD_SET_PLAYER_LIGHTS;
+	req->data[0] = (flash << 4) | on;
+
+	hid_dbg(ctlr->hdev, "setting player leds\n");
+	return joycon_send_subcmd(ctlr, req, 1);
+}
+
+static const u16 DFLT_STICK_CAL_CEN = 2000;
+static const u16 DFLT_STICK_CAL_MAX = 3500;
+static const u16 DFLT_STICK_CAL_MIN = 500;
+static int joycon_request_calibration(struct joycon_ctlr *ctlr)
+{
+	struct joycon_subcmd_request *req;
+	u8 buffer[sizeof(*req) + 5] = { 0 };
+	struct joycon_input_report *report;
+	struct joycon_stick_cal *cal_x;
+	struct joycon_stick_cal *cal_y;
+	s32 x_max_above;
+	s32 x_min_below;
+	s32 y_max_above;
+	s32 y_min_below;
+	u8 *data;
+	u8 *raw_cal;
+	int ret;
+
+	req = (struct joycon_subcmd_request *)buffer;
+	req->subcmd_id = JC_SUBCMD_SPI_FLASH_READ;
+	data = req->data;
+	data[0] = 0xFF & JC_CAL_DATA_START;
+	data[1] = 0xFF & (JC_CAL_DATA_START >> 8);
+	data[2] = 0xFF & (JC_CAL_DATA_START >> 16);
+	data[3] = 0xFF & (JC_CAL_DATA_START >> 24);
+	data[4] = JC_CAL_DATA_SIZE;
+
+	hid_dbg(ctlr->hdev, "requesting cal data\n");
+	ret = joycon_send_subcmd(ctlr, req, 5);
+	if (ret) {
+		hid_warn(ctlr->hdev,
+			 "Failed to read stick cal, using defaults; ret=%d\n",
+			 ret);
+
+		ctlr->left_stick_cal_x.center = DFLT_STICK_CAL_CEN;
+		ctlr->left_stick_cal_x.max = DFLT_STICK_CAL_MAX;
+		ctlr->left_stick_cal_x.min = DFLT_STICK_CAL_MIN;
+
+		ctlr->left_stick_cal_y.center = DFLT_STICK_CAL_CEN;
+		ctlr->left_stick_cal_y.max = DFLT_STICK_CAL_MAX;
+		ctlr->left_stick_cal_y.min = DFLT_STICK_CAL_MIN;
+
+		ctlr->right_stick_cal_x.center = DFLT_STICK_CAL_CEN;
+		ctlr->right_stick_cal_x.max = DFLT_STICK_CAL_MAX;
+		ctlr->right_stick_cal_x.min = DFLT_STICK_CAL_MIN;
+
+		ctlr->right_stick_cal_y.center = DFLT_STICK_CAL_CEN;
+		ctlr->right_stick_cal_y.max = DFLT_STICK_CAL_MAX;
+		ctlr->right_stick_cal_y.min = DFLT_STICK_CAL_MIN;
+
+		return ret;
+	}
+
+	report = (struct joycon_input_report *)ctlr->input_buf;
+	raw_cal = &report->reply.data[5];
+
+	/* left stick calibration parsing */
+	cal_x = &ctlr->left_stick_cal_x;
+	cal_y = &ctlr->left_stick_cal_y;
+
+	x_max_above = hid_field_extract(ctlr->hdev, (raw_cal + 0), 0, 12);
+	y_max_above = hid_field_extract(ctlr->hdev, (raw_cal + 1), 4, 12);
+	cal_x->center = hid_field_extract(ctlr->hdev, (raw_cal + 3), 0, 12);
+	cal_y->center = hid_field_extract(ctlr->hdev, (raw_cal + 4), 4, 12);
+	x_min_below = hid_field_extract(ctlr->hdev, (raw_cal + 6), 0, 12);
+	y_min_below = hid_field_extract(ctlr->hdev, (raw_cal + 7), 4, 12);
+	cal_x->max = cal_x->center + x_max_above;
+	cal_x->min = cal_x->center - x_min_below;
+	cal_y->max = cal_y->center + y_max_above;
+	cal_y->min = cal_y->center - y_min_below;
+
+	/* right stick calibration parsing */
+	raw_cal += 9;
+	cal_x = &ctlr->right_stick_cal_x;
+	cal_y = &ctlr->right_stick_cal_y;
+
+	cal_x->center = hid_field_extract(ctlr->hdev, (raw_cal + 0), 0, 12);
+	cal_y->center = hid_field_extract(ctlr->hdev, (raw_cal + 1), 4, 12);
+	x_min_below = hid_field_extract(ctlr->hdev, (raw_cal + 3), 0, 12);
+	y_min_below = hid_field_extract(ctlr->hdev, (raw_cal + 4), 4, 12);
+	x_max_above = hid_field_extract(ctlr->hdev, (raw_cal + 6), 0, 12);
+	y_max_above = hid_field_extract(ctlr->hdev, (raw_cal + 7), 4, 12);
+	cal_x->max = cal_x->center + x_max_above;
+	cal_x->min = cal_x->center - x_min_below;
+	cal_y->max = cal_y->center + y_max_above;
+	cal_y->min = cal_y->center - y_min_below;
+
+	hid_dbg(ctlr->hdev, "calibration:\n"
+			    "l_x_c=%d l_x_max=%d l_x_min=%d\n"
+			    "l_y_c=%d l_y_max=%d l_y_min=%d\n"
+			    "r_x_c=%d r_x_max=%d r_x_min=%d\n"
+			    "r_y_c=%d r_y_max=%d r_y_min=%d\n",
+			    ctlr->left_stick_cal_x.center,
+			    ctlr->left_stick_cal_x.max,
+			    ctlr->left_stick_cal_x.min,
+			    ctlr->left_stick_cal_y.center,
+			    ctlr->left_stick_cal_y.max,
+			    ctlr->left_stick_cal_y.min,
+			    ctlr->right_stick_cal_x.center,
+			    ctlr->right_stick_cal_x.max,
+			    ctlr->right_stick_cal_x.min,
+			    ctlr->right_stick_cal_y.center,
+			    ctlr->right_stick_cal_y.max,
+			    ctlr->right_stick_cal_y.min);
+
+	return 0;
+}
+
+static int joycon_set_report_mode(struct joycon_ctlr *ctlr)
+{
+	struct joycon_subcmd_request *req;
+	u8 buffer[sizeof(*req) + 1] = { 0 };
+
+	req = (struct joycon_subcmd_request *)buffer;
+	req->subcmd_id = JC_SUBCMD_SET_REPORT_MODE;
+	req->data[0] = 0x30; /* standard, full report mode */
+
+	hid_dbg(ctlr->hdev, "setting controller report mode\n");
+	return joycon_send_subcmd(ctlr, req, 1);
+}
+
+static s32 joycon_map_stick_val(struct joycon_stick_cal *cal, s32 val)
+{
+	s32 center = cal->center;
+	s32 min = cal->min;
+	s32 max = cal->max;
+	s32 new_val;
+
+	if (val > center) {
+		new_val = (val - center) * JC_MAX_STICK_MAG;
+		new_val /= (max - center);
+	} else {
+		new_val = (center - val) * -JC_MAX_STICK_MAG;
+		new_val /= (center - min);
+	}
+	new_val = clamp(new_val, (s32)-JC_MAX_STICK_MAG, (s32)JC_MAX_STICK_MAG);
+	return new_val;
+}
+
+static void joycon_parse_report(struct joycon_ctlr *ctlr,
+				struct joycon_input_report *rep)
+{
+	struct input_dev *dev = ctlr->input;
+	u32 btns;
+	u32 id = ctlr->hdev->product;
+
+	btns = hid_field_extract(ctlr->hdev, rep->button_status, 0, 24);
+
+	if (id != USB_DEVICE_ID_NINTENDO_JOYCONR) {
+		u16 raw_x;
+		u16 raw_y;
+		s32 x;
+		s32 y;
+
+		/* get raw stick values */
+		raw_x = hid_field_extract(ctlr->hdev, rep->left_stick, 0, 12);
+		raw_y = hid_field_extract(ctlr->hdev,
+					  rep->left_stick + 1, 4, 12);
+		/* map the stick values */
+		x = joycon_map_stick_val(&ctlr->left_stick_cal_x, raw_x);
+		y = -joycon_map_stick_val(&ctlr->left_stick_cal_y, raw_y);
+		/* report sticks */
+		input_report_abs(dev, ABS_X, x);
+		input_report_abs(dev, ABS_Y, y);
+
+		/* report buttons */
+		input_report_key(dev, BTN_TL, btns & JC_BTN_L);
+		input_report_key(dev, BTN_TL2, btns & JC_BTN_ZL);
+		if (id != USB_DEVICE_ID_NINTENDO_PROCON) {
+			/* Report the S buttons as the non-existent triggers */
+			input_report_key(dev, BTN_TR, btns & JC_BTN_SL_L);
+			input_report_key(dev, BTN_TR2, btns & JC_BTN_SR_L);
+		}
+		input_report_key(dev, BTN_SELECT, btns & JC_BTN_MINUS);
+		input_report_key(dev, BTN_THUMBL, btns & JC_BTN_LSTICK);
+		input_report_key(dev, BTN_Z, btns & JC_BTN_CAP);
+		input_report_key(dev, BTN_DPAD_DOWN, btns & JC_BTN_DOWN);
+		input_report_key(dev, BTN_DPAD_UP, btns & JC_BTN_UP);
+		input_report_key(dev, BTN_DPAD_RIGHT, btns & JC_BTN_RIGHT);
+		input_report_key(dev, BTN_DPAD_LEFT, btns & JC_BTN_LEFT);
+	}
+	if (id != USB_DEVICE_ID_NINTENDO_JOYCONL) {
+		u16 raw_x;
+		u16 raw_y;
+		s32 x;
+		s32 y;
+
+		/* get raw stick values */
+		raw_x = hid_field_extract(ctlr->hdev, rep->right_stick, 0, 12);
+		raw_y = hid_field_extract(ctlr->hdev,
+					  rep->right_stick + 1, 4, 12);
+		/* map stick values */
+		x = joycon_map_stick_val(&ctlr->right_stick_cal_x, raw_x);
+		y = -joycon_map_stick_val(&ctlr->right_stick_cal_y, raw_y);
+		/* report sticks */
+		input_report_abs(dev, ABS_RX, x);
+		input_report_abs(dev, ABS_RY, y);
+
+		/* report buttons */
+		input_report_key(dev, BTN_TR, btns & JC_BTN_R);
+		input_report_key(dev, BTN_TR2, btns & JC_BTN_ZR);
+		if (id != USB_DEVICE_ID_NINTENDO_PROCON) {
+			/* Report the S buttons as the non-existent triggers */
+			input_report_key(dev, BTN_TL, btns & JC_BTN_SL_R);
+			input_report_key(dev, BTN_TL2, btns & JC_BTN_SR_R);
+		}
+		input_report_key(dev, BTN_START, btns & JC_BTN_PLUS);
+		input_report_key(dev, BTN_THUMBR, btns & JC_BTN_RSTICK);
+		input_report_key(dev, BTN_MODE, btns & JC_BTN_HOME);
+		input_report_key(dev, BTN_WEST, btns & JC_BTN_Y);
+		input_report_key(dev, BTN_NORTH, btns & JC_BTN_X);
+		input_report_key(dev, BTN_EAST, btns & JC_BTN_A);
+		input_report_key(dev, BTN_SOUTH, btns & JC_BTN_B);
+	}
+
+	input_sync(dev);
+}
+
+
+static const unsigned int joycon_button_inputs_l[] = {
+	BTN_SELECT, BTN_Z, BTN_THUMBL,
+	BTN_DPAD_UP, BTN_DPAD_DOWN, BTN_DPAD_LEFT, BTN_DPAD_RIGHT,
+	BTN_TL, BTN_TL2,
+	0 /* 0 signals end of array */
+};
+
+static const unsigned int joycon_button_inputs_r[] = {
+	BTN_START, BTN_MODE, BTN_THUMBR,
+	BTN_SOUTH, BTN_EAST, BTN_NORTH, BTN_WEST,
+	BTN_TR, BTN_TR2,
+	0 /* 0 signals end of array */
+};
+
+static DEFINE_MUTEX(joycon_input_num_mutex);
+static int joycon_input_create(struct joycon_ctlr *ctlr)
+{
+	struct hid_device *hdev;
+	static int input_num = 1;
+	const char *name;
+	int ret;
+	int i;
+
+	hdev = ctlr->hdev;
+
+	switch (hdev->product) {
+	case USB_DEVICE_ID_NINTENDO_PROCON:
+		name = "Nintendo Switch Pro Controller";
+		break;
+	case USB_DEVICE_ID_NINTENDO_JOYCONL:
+		name = "Nintendo Switch Left Joy-Con";
+		break;
+	case USB_DEVICE_ID_NINTENDO_JOYCONR:
+		name = "Nintendo Switch Right Joy-Con";
+		break;
+	default: /* Should be impossible */
+		hid_err(hdev, "Invalid hid product\n");
+		return -EINVAL;
+	}
+
+	ctlr->input = devm_input_allocate_device(&hdev->dev);
+	if (!ctlr->input)
+		return -ENOMEM;
+	ctlr->input->id.bustype = hdev->bus;
+	ctlr->input->id.vendor = hdev->vendor;
+	ctlr->input->id.product = hdev->product;
+	ctlr->input->id.version = hdev->version;
+	ctlr->input->name = name;
+	input_set_drvdata(ctlr->input, ctlr);
+
+
+	/* set up sticks */
+	if (hdev->product != USB_DEVICE_ID_NINTENDO_JOYCONR) {
+		input_set_abs_params(ctlr->input, ABS_X,
+				     -JC_MAX_STICK_MAG, JC_MAX_STICK_MAG,
+				     JC_STICK_FUZZ, JC_STICK_FLAT);
+		input_set_abs_params(ctlr->input, ABS_Y,
+				     -JC_MAX_STICK_MAG, JC_MAX_STICK_MAG,
+				     JC_STICK_FUZZ, JC_STICK_FLAT);
+	}
+	if (hdev->product != USB_DEVICE_ID_NINTENDO_JOYCONL) {
+		input_set_abs_params(ctlr->input, ABS_RX,
+				     -JC_MAX_STICK_MAG, JC_MAX_STICK_MAG,
+				     JC_STICK_FUZZ, JC_STICK_FLAT);
+		input_set_abs_params(ctlr->input, ABS_RY,
+				     -JC_MAX_STICK_MAG, JC_MAX_STICK_MAG,
+				     JC_STICK_FUZZ, JC_STICK_FLAT);
+	}
+
+	/* set up buttons */
+	if (hdev->product != USB_DEVICE_ID_NINTENDO_JOYCONR) {
+		for (i = 0; joycon_button_inputs_l[i] > 0; i++)
+			input_set_capability(ctlr->input, EV_KEY,
+					     joycon_button_inputs_l[i]);
+	}
+	if (hdev->product != USB_DEVICE_ID_NINTENDO_JOYCONL) {
+		for (i = 0; joycon_button_inputs_r[i] > 0; i++)
+			input_set_capability(ctlr->input, EV_KEY,
+					     joycon_button_inputs_r[i]);
+	}
+
+	ret = input_register_device(ctlr->input);
+	if (ret)
+		return ret;
+
+	/* Set the default controller player leds based on controller number */
+	mutex_lock(&joycon_input_num_mutex);
+	mutex_lock(&ctlr->output_mutex);
+	ret = joycon_set_player_leds(ctlr, 0, 0xF >> (4 - input_num));
+	if (ret)
+		hid_warn(ctlr->hdev, "Failed to set leds; ret=%d\n", ret);
+	mutex_unlock(&ctlr->output_mutex);
+	if (++input_num > 4)
+		input_num = 1;
+	mutex_unlock(&joycon_input_num_mutex);
+
+	return 0;
+}
+
+/* Common handler for parsing inputs */
+static int joycon_ctlr_read_handler(struct joycon_ctlr *ctlr, u8 *data,
+							      int size)
+{
+	int ret = 0;
+
+	if (data[0] == JC_INPUT_SUBCMD_REPLY || data[0] == JC_INPUT_IMU_DATA ||
+	    data[0] == JC_INPUT_MCU_DATA) {
+		if (size >= 12) /* make sure it contains the input report */
+			joycon_parse_report(ctlr,
+					    (struct joycon_input_report *)data);
+	}
+
+	return ret;
+}
+
+static int joycon_ctlr_handle_event(struct joycon_ctlr *ctlr, u8 *data,
+							      int size)
+{
+	int ret = 0;
+	bool match = false;
+	struct joycon_input_report *report;
+
+	if (unlikely(mutex_is_locked(&ctlr->output_mutex)) &&
+	    ctlr->msg_type != JOYCON_MSG_TYPE_NONE) {
+		switch (ctlr->msg_type) {
+		case JOYCON_MSG_TYPE_USB:
+			if (size < 2)
+				break;
+			if (data[0] == JC_INPUT_USB_RESPONSE &&
+			    data[1] == ctlr->usb_ack_match)
+				match = true;
+			break;
+		case JOYCON_MSG_TYPE_SUBCMD:
+			if (size < sizeof(struct joycon_input_report) ||
+			    data[0] != JC_INPUT_SUBCMD_REPLY)
+				break;
+			report = (struct joycon_input_report *)data;
+			if (report->reply.id == ctlr->subcmd_ack_match)
+				match = true;
+			break;
+		default:
+			break;
+		}
+
+		if (match) {
+			memcpy(ctlr->input_buf, data,
+			       min(size, (int)JC_MAX_RESP_SIZE));
+			ctlr->msg_type = JOYCON_MSG_TYPE_NONE;
+			ctlr->received_resp = true;
+			wake_up(&ctlr->wait);
+
+			/* This message has been handled */
+			return 1;
+		}
+	}
+
+	if (ctlr->ctlr_state == JOYCON_CTLR_STATE_READ)
+		ret = joycon_ctlr_read_handler(ctlr, data, size);
+
+	return ret;
+}
+
+static int nintendo_hid_event(struct hid_device *hdev,
+			      struct hid_report *report, u8 *raw_data, int size)
+{
+	struct joycon_ctlr *ctlr = hid_get_drvdata(hdev);
+
+	if (size < 1)
+		return -EINVAL;
+
+	return joycon_ctlr_handle_event(ctlr, raw_data, size);
+}
+
+static int nintendo_hid_probe(struct hid_device *hdev,
+			    const struct hid_device_id *id)
+{
+	int ret;
+	struct joycon_ctlr *ctlr;
+
+	hid_dbg(hdev, "probe - start\n");
+
+	ctlr = devm_kzalloc(&hdev->dev, sizeof(*ctlr), GFP_KERNEL);
+	if (!ctlr) {
+		ret = -ENOMEM;
+		goto err;
+	}
+
+	ctlr->hdev = hdev;
+	ctlr->ctlr_state = JOYCON_CTLR_STATE_INIT;
+	hid_set_drvdata(hdev, ctlr);
+	mutex_init(&ctlr->output_mutex);
+	init_waitqueue_head(&ctlr->wait);
+
+	ret = hid_parse(hdev);
+	if (ret) {
+		hid_err(hdev, "HID parse failed\n");
+		goto err;
+	}
+
+	ret = hid_hw_start(hdev, HID_CONNECT_HIDRAW);
+	if (ret) {
+		hid_err(hdev, "HW start failed\n");
+		goto err;
+	}
+
+	ret = hid_hw_open(hdev);
+	if (ret) {
+		hid_err(hdev, "cannot start hardware I/O\n");
+		goto err_stop;
+	}
+
+	hid_device_io_start(hdev);
+
+	/* Initialize the controller */
+	mutex_lock(&ctlr->output_mutex);
+	/* if handshake command fails, assume ble pro controller */
+	if (hdev->product == USB_DEVICE_ID_NINTENDO_PROCON &&
+	    !joycon_send_usb(ctlr, JC_USB_CMD_HANDSHAKE)) {
+		hid_dbg(hdev, "detected USB controller\n");
+		/* set baudrate for improved latency */
+		ret = joycon_send_usb(ctlr, JC_USB_CMD_BAUDRATE_3M);
+		if (ret) {
+			hid_err(hdev, "Failed to set baudrate; ret=%d\n", ret);
+			goto err_mutex;
+		}
+		/* handshake */
+		ret = joycon_send_usb(ctlr, JC_USB_CMD_HANDSHAKE);
+		if (ret) {
+			hid_err(hdev, "Failed handshake; ret=%d\n", ret);
+			goto err_mutex;
+		}
+		/*
+		 * Set no timeout (to keep controller in USB mode).
+		 * This doesn't send a response, so ignore the timeout.
+		 */
+		joycon_send_usb(ctlr, JC_USB_CMD_NO_TIMEOUT);
+	}
+
+	/* get controller calibration data, and parse it */
+	ret = joycon_request_calibration(ctlr);
+	if (ret) {
+		/*
+		 * We can function with default calibration, but it may be
+		 * inaccurate. Provide a warning, and continue on.
+		 */
+		hid_warn(hdev, "Analog stick positions may be inaccurate\n");
+	}
+
+	/* Set the reporting mode to 0x30, which is the full report mode */
+	ret = joycon_set_report_mode(ctlr);
+	if (ret) {
+		hid_err(hdev, "Failed to set report mode; ret=%d\n", ret);
+		goto err_mutex;
+	}
+
+	mutex_unlock(&ctlr->output_mutex);
+
+	ret = joycon_input_create(ctlr);
+	if (ret) {
+		hid_err(hdev, "Failed to create input device; ret=%d\n", ret);
+		goto err_close;
+	}
+
+	ctlr->ctlr_state = JOYCON_CTLR_STATE_READ;
+
+	hid_dbg(hdev, "probe - success\n");
+	return 0;
+
+err_mutex:
+	mutex_unlock(&ctlr->output_mutex);
+err_close:
+	hid_hw_close(hdev);
+err_stop:
+	hid_hw_stop(hdev);
+err:
+	hid_err(hdev, "probe - fail = %d\n", ret);
+	return ret;
+}
+
+static void nintendo_hid_remove(struct hid_device *hdev)
+{
+	hid_dbg(hdev, "remove\n");
+	hid_hw_close(hdev);
+	hid_hw_stop(hdev);
+}
+
+static const struct hid_device_id nintendo_hid_devices[] = {
+	{ HID_USB_DEVICE(USB_VENDOR_ID_NINTENDO,
+			 USB_DEVICE_ID_NINTENDO_PROCON) },
+	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO,
+			 USB_DEVICE_ID_NINTENDO_PROCON) },
+	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO,
+			 USB_DEVICE_ID_NINTENDO_JOYCONL) },
+	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO,
+			 USB_DEVICE_ID_NINTENDO_JOYCONR) },
+	{ }
+};
+MODULE_DEVICE_TABLE(hid, nintendo_hid_devices);
+
+static struct hid_driver nintendo_hid_driver = {
+	.name		= "nintendo",
+	.id_table	= nintendo_hid_devices,
+	.probe		= nintendo_hid_probe,
+	.remove		= nintendo_hid_remove,
+	.raw_event	= nintendo_hid_event,
+};
+module_hid_driver(nintendo_hid_driver);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Daniel J. Ogorchock <djogorchock@gmail.com>");
+MODULE_DESCRIPTION("Driver for Nintendo Switch Controllers");
diff --git a/drivers/hwmon/pwm-fan.c b/drivers/hwmon/pwm-fan.c
index df6f042..e301177a 100644
--- a/drivers/hwmon/pwm-fan.c
+++ b/drivers/hwmon/pwm-fan.c
@@ -449,7 +449,7 @@ static int pwm_fan_resume(struct device *dev)
 		return 0;
 
 	pwm_get_args(ctx->pwm, &pargs);
-	duty = DIV_ROUND_UP(ctx->pwm_value * (pargs.period - 1), MAX_PWM);
+	duty = DIV_ROUND_UP_ULL(ctx->pwm_value * (pargs.period - 1), MAX_PWM);
 	ret = pwm_config(ctx->pwm, duty, pargs.period);
 	if (ret)
 		return ret;
diff --git a/drivers/i2c/i2c-core-of.c b/drivers/i2c/i2c-core-of.c
index 7eb4199..e4d296b 100644
--- a/drivers/i2c/i2c-core-of.c
+++ b/drivers/i2c/i2c-core-of.c
@@ -50,6 +50,7 @@ int of_i2c_get_board_info(struct device *dev, struct device_node *node,
 
 	info->addr = addr;
 	info->of_node = node;
+	info->fwnode = of_fwnode_handle(node);
 
 	if (of_property_read_bool(node, "host-notify"))
 		info->flags |= I2C_CLIENT_HOST_NOTIFY;
diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
index 347b08b..a5d6adc 100644
--- a/drivers/idle/intel_idle.c
+++ b/drivers/idle/intel_idle.c
@@ -85,7 +85,7 @@ static const struct idle_cpu *icpu;
 static struct cpuidle_device __percpu *intel_idle_cpuidle_devices;
 static int intel_idle(struct cpuidle_device *dev,
 			struct cpuidle_driver *drv, int index);
-static void intel_idle_s2idle(struct cpuidle_device *dev,
+static int intel_idle_s2idle(struct cpuidle_device *dev,
 			      struct cpuidle_driver *drv, int index);
 static struct cpuidle_state *cpuidle_state_table;
 
@@ -935,13 +935,15 @@ static __cpuidle int intel_idle(struct cpuidle_device *dev,
  * @drv: cpuidle driver
  * @index: state index
  */
-static void intel_idle_s2idle(struct cpuidle_device *dev,
+static int intel_idle_s2idle(struct cpuidle_device *dev,
 			     struct cpuidle_driver *drv, int index)
 {
 	unsigned long ecx = 1; /* break on interrupt flag */
 	unsigned long eax = flg2MWAIT(drv->states[index].flags);
 
 	mwait_idle_with_hints(eax, ecx);
+
+	return 0;
 }
 
 static void __setup_broadcast_timer(bool on)
diff --git a/drivers/interconnect/Makefile b/drivers/interconnect/Makefile
index 28f2ab0..725029a 100644
--- a/drivers/interconnect/Makefile
+++ b/drivers/interconnect/Makefile
@@ -1,5 +1,6 @@
 # SPDX-License-Identifier: GPL-2.0
 
+CFLAGS_core.o				:= -I$(src)
 icc-core-objs				:= core.o
 
 obj-$(CONFIG_INTERCONNECT)		+= icc-core.o
diff --git a/drivers/interconnect/core.c b/drivers/interconnect/core.c
index c498796a..ac9ffe2 100644
--- a/drivers/interconnect/core.c
+++ b/drivers/interconnect/core.c
@@ -19,39 +19,16 @@
 #include <linux/of.h>
 #include <linux/overflow.h>
 
+#include "internal.h"
+
+#define CREATE_TRACE_POINTS
+#include "trace.h"
+
 static DEFINE_IDR(icc_idr);
 static LIST_HEAD(icc_providers);
 static DEFINE_MUTEX(icc_lock);
 static struct dentry *icc_debugfs_dir;
 
-/**
- * struct icc_req - constraints that are attached to each node
- * @req_node: entry in list of requests for the particular @node
- * @node: the interconnect node to which this constraint applies
- * @dev: reference to the device that sets the constraints
- * @tag: path tag (optional)
- * @avg_bw: an integer describing the average bandwidth in kBps
- * @peak_bw: an integer describing the peak bandwidth in kBps
- */
-struct icc_req {
-	struct hlist_node req_node;
-	struct icc_node *node;
-	struct device *dev;
-	u32 tag;
-	u32 avg_bw;
-	u32 peak_bw;
-};
-
-/**
- * struct icc_path - interconnect path structure
- * @num_nodes: number of hops (nodes)
- * @reqs: array of the requests applicable to this path of nodes
- */
-struct icc_path {
-	size_t num_nodes;
-	struct icc_req reqs[];
-};
-
 static void icc_summary_show_one(struct seq_file *s, struct icc_node *n)
 {
 	if (!n)
@@ -382,9 +359,22 @@ struct icc_path *of_icc_get(struct device *dev, const char *name)
 
 	mutex_lock(&icc_lock);
 	path = path_find(dev, src_node, dst_node);
-	if (IS_ERR(path))
-		dev_err(dev, "%s: invalid path=%ld\n", __func__, PTR_ERR(path));
 	mutex_unlock(&icc_lock);
+	if (IS_ERR(path)) {
+		dev_err(dev, "%s: invalid path=%ld\n", __func__, PTR_ERR(path));
+		return path;
+	}
+
+	if (name)
+		path->name = kstrdup_const(name, GFP_KERNEL);
+	else
+		path->name = kasprintf(GFP_KERNEL, "%s-%s",
+				       src_node->name, dst_node->name);
+
+	if (!path->name) {
+		kfree(path);
+		return ERR_PTR(-ENOMEM);
+	}
 
 	return path;
 }
@@ -453,6 +443,8 @@ int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw)
 
 		/* aggregate requests for this node */
 		aggregate_requests(node);
+
+		trace_icc_set_bw(path, node, i, avg_bw, peak_bw);
 	}
 
 	ret = apply_constraints(path);
@@ -471,6 +463,8 @@ int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw)
 
 	mutex_unlock(&icc_lock);
 
+	trace_icc_set_bw_end(path, ret);
+
 	return ret;
 }
 EXPORT_SYMBOL_GPL(icc_set_bw);
@@ -507,9 +501,16 @@ struct icc_path *icc_get(struct device *dev, const int src_id, const int dst_id)
 		goto out;
 
 	path = path_find(dev, src, dst);
-	if (IS_ERR(path))
+	if (IS_ERR(path)) {
 		dev_err(dev, "%s: invalid path=%ld\n", __func__, PTR_ERR(path));
+		goto out;
+	}
 
+	path->name = kasprintf(GFP_KERNEL, "%s-%s", src->name, dst->name);
+	if (!path->name) {
+		kfree(path);
+		path = ERR_PTR(-ENOMEM);
+	}
 out:
 	mutex_unlock(&icc_lock);
 	return path;
@@ -545,6 +546,7 @@ void icc_put(struct icc_path *path)
 	}
 	mutex_unlock(&icc_lock);
 
+	kfree_const(path->name);
 	kfree(path);
 }
 EXPORT_SYMBOL_GPL(icc_put);
diff --git a/drivers/interconnect/internal.h b/drivers/interconnect/internal.h
new file mode 100644
index 0000000..bf18cb7
--- /dev/null
+++ b/drivers/interconnect/internal.h
@@ -0,0 +1,42 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Interconnect framework internal structs
+ *
+ * Copyright (c) 2019, Linaro Ltd.
+ * Author: Georgi Djakov <georgi.djakov@linaro.org>
+ */
+
+#ifndef __DRIVERS_INTERCONNECT_INTERNAL_H
+#define __DRIVERS_INTERCONNECT_INTERNAL_H
+
+/**
+ * struct icc_req - constraints that are attached to each node
+ * @req_node: entry in list of requests for the particular @node
+ * @node: the interconnect node to which this constraint applies
+ * @dev: reference to the device that sets the constraints
+ * @tag: path tag (optional)
+ * @avg_bw: an integer describing the average bandwidth in kBps
+ * @peak_bw: an integer describing the peak bandwidth in kBps
+ */
+struct icc_req {
+	struct hlist_node req_node;
+	struct icc_node *node;
+	struct device *dev;
+	u32 tag;
+	u32 avg_bw;
+	u32 peak_bw;
+};
+
+/**
+ * struct icc_path - interconnect path structure
+ * @name: a string name of the path (useful for ftrace)
+ * @num_nodes: number of hops (nodes)
+ * @reqs: array of the requests applicable to this path of nodes
+ */
+struct icc_path {
+	const char *name;
+	size_t num_nodes;
+	struct icc_req reqs[];
+};
+
+#endif
diff --git a/drivers/interconnect/trace.h b/drivers/interconnect/trace.h
new file mode 100644
index 0000000..3d668ff
--- /dev/null
+++ b/drivers/interconnect/trace.h
@@ -0,0 +1,88 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Interconnect framework tracepoints
+ * Copyright (c) 2019, Linaro Ltd.
+ * Author: Georgi Djakov <georgi.djakov@linaro.org>
+ */
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM interconnect
+
+#if !defined(_TRACE_INTERCONNECT_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_INTERCONNECT_H
+
+#include <linux/interconnect.h>
+#include <linux/tracepoint.h>
+
+TRACE_EVENT(icc_set_bw,
+
+	TP_PROTO(struct icc_path *p, struct icc_node *n, int i,
+		 u32 avg_bw, u32 peak_bw),
+
+	TP_ARGS(p, n, i, avg_bw, peak_bw),
+
+	TP_STRUCT__entry(
+		__string(path_name, p->name)
+		__string(dev, dev_name(p->reqs[i].dev))
+		__string(node_name, n->name)
+		__field(u32, avg_bw)
+		__field(u32, peak_bw)
+		__field(u32, node_avg_bw)
+		__field(u32, node_peak_bw)
+	),
+
+	TP_fast_assign(
+		__assign_str(path_name, p->name);
+		__assign_str(dev, dev_name(p->reqs[i].dev));
+		__assign_str(node_name, n->name);
+		__entry->avg_bw = avg_bw;
+		__entry->peak_bw = peak_bw;
+		__entry->node_avg_bw = n->avg_bw;
+		__entry->node_peak_bw = n->peak_bw;
+	),
+
+	TP_printk("path=%s dev=%s node=%s avg_bw=%u peak_bw=%u agg_avg=%u agg_peak=%u",
+		  __get_str(path_name),
+		  __get_str(dev),
+		  __get_str(node_name),
+		  __entry->avg_bw,
+		  __entry->peak_bw,
+		  __entry->node_avg_bw,
+		  __entry->node_peak_bw)
+);
+
+TRACE_EVENT(icc_set_bw_end,
+
+	TP_PROTO(struct icc_path *p, int ret),
+
+	TP_ARGS(p, ret),
+
+	TP_STRUCT__entry(
+		__string(path_name, p->name)
+		__string(dev, dev_name(p->reqs[0].dev))
+		__field(int, ret)
+	),
+
+	TP_fast_assign(
+		__assign_str(path_name, p->name);
+		__assign_str(dev, dev_name(p->reqs[0].dev));
+		__entry->ret = ret;
+	),
+
+	TP_printk("path=%s dev=%s ret=%d",
+		  __get_str(path_name),
+		  __get_str(dev),
+		  __entry->ret)
+);
+
+#endif /* _TRACE_INTERCONNECT_H */
+
+/* This part must be outside protection */
+
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH .
+
+#undef TRACE_INCLUDE_FILE
+#define TRACE_INCLUDE_FILE trace
+
+#include <trace/define_trace.h>
diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig
index fc0160e..60f677c 100644
--- a/drivers/iommu/Kconfig
+++ b/drivers/iommu/Kconfig
@@ -7,6 +7,36 @@
 config IOMMU_API
 	bool
 
+if IOMMU_IOVA
+
+config IOMMU_LIMIT_IOVA_ALIGNMENT
+	bool "Limit IOVA alignment"
+	help
+	  When the IOVA framework applies IOVA alignment it aligns all
+	  IOVAs to the smallest PAGE_SIZE order which is greater than or
+	  equal to the requested IOVA size. This works fine for sizes up
+	  to several MiB, but for larger sizes it results in address
+	  space wastage and fragmentation. For example drivers with a 4
+	  GiB IOVA space might run out of IOVA space when allocating
+	  buffers great than 64 MiB.
+
+	  Enable this option to impose a limit on the alignment of IOVAs.
+
+	  If unsure, say N.
+
+config IOMMU_IOVA_ALIGNMENT
+	int "Maximum PAGE_SIZE order of alignment for IOVAs"
+	depends on IOMMU_LIMIT_IOVA_ALIGNMENT
+	range 4 9
+	default 9
+	help
+	  With this parameter you can specify the maximum PAGE_SIZE order for
+	  IOVAs. Larger IOVAs will be aligned only to this specified order.
+	  The order is expressed a power of two multiplied by the PAGE_SIZE.
+
+	  If unsure, leave the default value "9".
+endif
+
 menuconfig IOMMU_SUPPORT
 	bool "IOMMU Hardware Support"
 	depends on MMU
@@ -350,8 +380,9 @@
 
 # ARM IOMMU support
 config ARM_SMMU
-	bool "ARM Ltd. System MMU (SMMU) Support"
+	tristate "ARM Ltd. System MMU (SMMU) Support"
 	depends on (ARM64 || ARM) && MMU
+	depends on QCOM_SCM || !QCOM_SCM #if QCOM_SCM=m this can't be =y
 	select IOMMU_API
 	select IOMMU_IO_PGTABLE_LPAE
 	select ARM_DMA_USE_IOMMU if ARM
@@ -362,6 +393,18 @@
 	  Say Y here if your SoC includes an IOMMU device implementing
 	  the ARM SMMU architecture.
 
+config ARM_SMMU_LEGACY_DT_BINDINGS
+	bool "Support the legacy \"mmu-masters\" devicetree bindings"
+	depends on ARM_SMMU=y && OF
+	help
+	  Support for the badly designed and deprecated "mmu-masters"
+	  devicetree bindings. This allows some DMA masters to attach
+	  to the SMMU but does not provide any support via the DMA API.
+	  If you're lucky, you might be able to get VFIO up and running.
+
+	  If you say Y here then you'll make me very sad. Instead, say N
+	  and move your firmware to the utopian future that was 2016.
+
 config ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT
 	bool "Default to disabling bypass on ARM SMMU v1 and v2"
 	depends on ARM_SMMU
@@ -388,7 +431,7 @@
 	  config.
 
 config ARM_SMMU_V3
-	bool "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
+	tristate "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
 	depends on ARM64
 	select IOMMU_API
 	select IOMMU_IO_PGTABLE_LPAE
@@ -459,6 +502,7 @@
 	# Note: iommu drivers cannot (yet?) be built as modules
 	bool "Qualcomm IOMMU Support"
 	depends on ARCH_QCOM || (COMPILE_TEST && !GENERIC_ATOMIC64)
+	depends on QCOM_SCM=y
 	select IOMMU_API
 	select IOMMU_IO_PGTABLE_LPAE
 	select ARM_DMA_USE_IOMMU
diff --git a/drivers/iommu/Makefile b/drivers/iommu/Makefile
index 4f405f9..c25bc97 100644
--- a/drivers/iommu/Makefile
+++ b/drivers/iommu/Makefile
@@ -13,7 +13,8 @@
 obj-$(CONFIG_AMD_IOMMU) += amd_iommu.o amd_iommu_init.o amd_iommu_quirks.o
 obj-$(CONFIG_AMD_IOMMU_DEBUGFS) += amd_iommu_debugfs.o
 obj-$(CONFIG_AMD_IOMMU_V2) += amd_iommu_v2.o
-obj-$(CONFIG_ARM_SMMU) += arm-smmu.o arm-smmu-impl.o
+obj-$(CONFIG_ARM_SMMU) += arm_smmu.o
+arm_smmu-objs += arm-smmu.o arm-smmu-impl.o arm-smmu-qcom.o
 obj-$(CONFIG_ARM_SMMU_V3) += arm-smmu-v3.o
 obj-$(CONFIG_DMAR_TABLE) += dmar.o
 obj-$(CONFIG_INTEL_IOMMU) += intel-iommu.o intel-pasid.o
diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
index 7b724f7..37e597f 100644
--- a/drivers/iommu/amd_iommu.c
+++ b/drivers/iommu/amd_iommu.c
@@ -3096,7 +3096,8 @@ static int amd_iommu_attach_device(struct iommu_domain *dom,
 }
 
 static int amd_iommu_map(struct iommu_domain *dom, unsigned long iova,
-			 phys_addr_t paddr, size_t page_size, int iommu_prot)
+			 phys_addr_t paddr, size_t page_size, int iommu_prot,
+			 gfp_t gfp)
 {
 	struct protection_domain *domain = to_pdomain(dom);
 	int prot = 0;
diff --git a/drivers/iommu/arm-smmu-impl.c b/drivers/iommu/arm-smmu-impl.c
index 5c87a38..b2fe72a8 100644
--- a/drivers/iommu/arm-smmu-impl.c
+++ b/drivers/iommu/arm-smmu-impl.c
@@ -109,7 +109,7 @@ static struct arm_smmu_device *cavium_smmu_impl_init(struct arm_smmu_device *smm
 #define ARM_MMU500_ACR_S2CRB_TLBEN	(1 << 10)
 #define ARM_MMU500_ACR_SMTNMB_TLBEN	(1 << 8)
 
-static int arm_mmu500_reset(struct arm_smmu_device *smmu)
+int arm_mmu500_reset(struct arm_smmu_device *smmu)
 {
 	u32 reg, major;
 	int i;
@@ -170,5 +170,8 @@ struct arm_smmu_device *arm_smmu_impl_init(struct arm_smmu_device *smmu)
 				  "calxeda,smmu-secure-config-access"))
 		smmu->impl = &calxeda_impl;
 
+	if (of_device_is_compatible(smmu->dev->of_node, "qcom,sdm845-smmu-500"))
+		return qcom_smmu_impl_init(smmu);
+
 	return smmu;
 }
diff --git a/drivers/iommu/arm-smmu-qcom.c b/drivers/iommu/arm-smmu-qcom.c
new file mode 100644
index 0000000..06e5799
--- /dev/null
+++ b/drivers/iommu/arm-smmu-qcom.c
@@ -0,0 +1,86 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ */
+
+#include <linux/bitfield.h>
+#include <linux/qcom_scm.h>
+
+#include "arm-smmu.h"
+
+struct qcom_smmu {
+	struct arm_smmu_device smmu;
+};
+
+static int qcom_sdm845_smmu500_cfg_probe(struct arm_smmu_device *smmu)
+{
+	u32 s2cr;
+	u32 smr;
+	int i;
+
+	for (i = 0; i < smmu->num_mapping_groups; i++) {
+		smr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_SMR(i));
+		s2cr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_S2CR(i));
+
+		smmu->smrs[i].mask = FIELD_GET(SMR_MASK, smr);
+		smmu->smrs[i].id = FIELD_GET(SMR_ID, smr);
+		if (smmu->features & ARM_SMMU_FEAT_EXIDS)
+			smmu->smrs[i].valid = FIELD_GET(S2CR_EXIDVALID, s2cr);
+		else
+			smmu->smrs[i].valid = FIELD_GET(SMR_VALID, smr);
+
+		smmu->s2crs[i].group = NULL;
+		smmu->s2crs[i].count = 0;
+		smmu->s2crs[i].type = FIELD_GET(S2CR_TYPE, s2cr);
+		smmu->s2crs[i].privcfg = FIELD_GET(S2CR_PRIVCFG, s2cr);
+		smmu->s2crs[i].cbndx = FIELD_GET(S2CR_CBNDX, s2cr);
+
+		if (!smmu->smrs[i].valid)
+			continue;
+
+		smmu->s2crs[i].pinned = true;
+		bitmap_set(smmu->context_map, smmu->s2crs[i].cbndx, 1);
+	}
+
+	return 0;
+}
+
+static int qcom_sdm845_smmu500_reset(struct arm_smmu_device *smmu)
+{
+	int ret;
+
+	arm_mmu500_reset(smmu);
+
+	/*
+	 * To address performance degradation in non-real time clients,
+	 * such as USB and UFS, turn off wait-for-safe on sdm845 based boards,
+	 * such as MTP and db845, whose firmwares implement secure monitor
+	 * call handlers to turn on/off the wait-for-safe logic.
+	 */
+	ret = qcom_scm_qsmmu500_wait_safe_toggle(0);
+	if (ret)
+		dev_warn(smmu->dev, "Failed to turn off SAFE logic\n");
+
+	return ret;
+}
+
+static const struct arm_smmu_impl qcom_smmu_impl = {
+	.cfg_probe = qcom_sdm845_smmu500_cfg_probe,
+	.reset = qcom_sdm845_smmu500_reset,
+};
+
+struct arm_smmu_device *qcom_smmu_impl_init(struct arm_smmu_device *smmu)
+{
+	struct qcom_smmu *qsmmu;
+
+	qsmmu = devm_kzalloc(smmu->dev, sizeof(*qsmmu), GFP_KERNEL);
+	if (!qsmmu)
+		return ERR_PTR(-ENOMEM);
+
+	qsmmu->smmu = *smmu;
+
+	qsmmu->smmu.impl = &qcom_smmu_impl;
+	devm_kfree(smmu->dev, smmu);
+
+	return &qsmmu->smmu;
+}
diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
index ef6af71..c5a6600 100644
--- a/drivers/iommu/arm-smmu-v3.c
+++ b/drivers/iommu/arm-smmu-v3.c
@@ -21,8 +21,7 @@
 #include <linux/io-pgtable.h>
 #include <linux/iommu.h>
 #include <linux/iopoll.h>
-#include <linux/init.h>
-#include <linux/moduleparam.h>
+#include <linux/module.h>
 #include <linux/msi.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
@@ -384,10 +383,6 @@
 #define MSI_IOVA_BASE			0x8000000
 #define MSI_IOVA_LENGTH			0x100000
 
-/*
- * not really modular, but the easiest way to keep compat with existing
- * bootargs behaviour is to continue using module_param_named here.
- */
 static bool disable_bypass = 1;
 module_param_named(disable_bypass, disable_bypass, bool, S_IRUGO);
 MODULE_PARM_DESC(disable_bypass,
@@ -2450,7 +2445,7 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
 }
 
 static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova,
-			phys_addr_t paddr, size_t size, int prot)
+			phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops;
 
@@ -3572,6 +3567,43 @@ static unsigned long arm_smmu_resource_size(struct arm_smmu_device *smmu)
 		return SZ_128K;
 }
 
+static int arm_smmu_set_bus_ops(struct iommu_ops *ops)
+{
+	int err;
+
+#ifdef CONFIG_PCI
+	if (pci_bus_type.iommu_ops != ops) {
+		err = bus_set_iommu(&pci_bus_type, ops);
+		if (err)
+			return err;
+	}
+#endif
+#ifdef CONFIG_ARM_AMBA
+	if (amba_bustype.iommu_ops != ops) {
+		err = bus_set_iommu(&amba_bustype, ops);
+		if (err)
+			goto err_reset_pci_ops;
+	}
+#endif
+	if (platform_bus_type.iommu_ops != ops) {
+		err = bus_set_iommu(&platform_bus_type, ops);
+		if (err)
+			goto err_reset_amba_ops;
+	}
+
+	return 0;
+
+err_reset_amba_ops:
+#ifdef CONFIG_ARM_AMBA
+	bus_set_iommu(&amba_bustype, NULL);
+#endif
+err_reset_pci_ops: __maybe_unused;
+#ifdef CONFIG_PCI
+	bus_set_iommu(&pci_bus_type, NULL);
+#endif
+	return err;
+}
+
 static int arm_smmu_device_probe(struct platform_device *pdev)
 {
 	int irq, ret;
@@ -3662,48 +3694,44 @@ static int arm_smmu_device_probe(struct platform_device *pdev)
 		return ret;
 	}
 
-#ifdef CONFIG_PCI
-	if (pci_bus_type.iommu_ops != &arm_smmu_ops) {
-		pci_request_acs();
-		ret = bus_set_iommu(&pci_bus_type, &arm_smmu_ops);
-		if (ret)
-			return ret;
-	}
-#endif
-#ifdef CONFIG_ARM_AMBA
-	if (amba_bustype.iommu_ops != &arm_smmu_ops) {
-		ret = bus_set_iommu(&amba_bustype, &arm_smmu_ops);
-		if (ret)
-			return ret;
-	}
-#endif
-	if (platform_bus_type.iommu_ops != &arm_smmu_ops) {
-		ret = bus_set_iommu(&platform_bus_type, &arm_smmu_ops);
-		if (ret)
-			return ret;
-	}
+	return arm_smmu_set_bus_ops(&arm_smmu_ops);
+}
+
+static int arm_smmu_device_remove(struct platform_device *pdev)
+{
+	struct arm_smmu_device *smmu = platform_get_drvdata(pdev);
+
+	arm_smmu_set_bus_ops(NULL);
+	iommu_device_unregister(&smmu->iommu);
+	iommu_device_sysfs_remove(&smmu->iommu);
+	arm_smmu_device_disable(smmu);
+
 	return 0;
 }
 
 static void arm_smmu_device_shutdown(struct platform_device *pdev)
 {
-	struct arm_smmu_device *smmu = platform_get_drvdata(pdev);
-
-	arm_smmu_device_disable(smmu);
+	arm_smmu_device_remove(pdev);
 }
 
 static const struct of_device_id arm_smmu_of_match[] = {
 	{ .compatible = "arm,smmu-v3", },
 	{ },
 };
+MODULE_DEVICE_TABLE(of, arm_smmu_of_match);
 
 static struct platform_driver arm_smmu_driver = {
 	.driver	= {
-		.name		= "arm-smmu-v3",
-		.of_match_table	= of_match_ptr(arm_smmu_of_match),
-		.suppress_bind_attrs = true,
+		.name			= "arm-smmu-v3",
+		.of_match_table		= of_match_ptr(arm_smmu_of_match),
+		.suppress_bind_attrs	= true,
 	},
 	.probe	= arm_smmu_device_probe,
+	.remove	= arm_smmu_device_remove,
 	.shutdown = arm_smmu_device_shutdown,
 };
-builtin_platform_driver(arm_smmu_driver);
+module_platform_driver(arm_smmu_driver);
+
+MODULE_DESCRIPTION("IOMMU API for ARM architected SMMUv3 implementations");
+MODULE_AUTHOR("Will Deacon <will@kernel.org>");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
index 7c503a6..3d7fbde 100644
--- a/drivers/iommu/arm-smmu.c
+++ b/drivers/iommu/arm-smmu.c
@@ -27,8 +27,7 @@
 #include <linux/interrupt.h>
 #include <linux/io.h>
 #include <linux/iopoll.h>
-#include <linux/init.h>
-#include <linux/moduleparam.h>
+#include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/of_device.h>
@@ -59,10 +58,6 @@
 #define MSI_IOVA_LENGTH			0x100000
 
 static int force_stage;
-/*
- * not really modular, but the easiest way to keep compat with existing
- * bootargs behaviour is to continue using module_param() here.
- */
 module_param(force_stage, int, S_IRUGO);
 MODULE_PARM_DESC(force_stage,
 	"Force SMMU mappings to be installed at a particular stage of translation. A value of '1' or '2' forces the corresponding stage. All other values are ignored (i.e. no stage is forced). Note that selecting a specific stage will disable support for nested translation.");
@@ -72,24 +67,10 @@ module_param(disable_bypass, bool, S_IRUGO);
 MODULE_PARM_DESC(disable_bypass,
 	"Disable bypass streams such that incoming transactions from devices that are not attached to an iommu domain will report an abort back to the device and will not be allowed to pass through the SMMU.");
 
-struct arm_smmu_s2cr {
-	struct iommu_group		*group;
-	int				count;
-	enum arm_smmu_s2cr_type		type;
-	enum arm_smmu_s2cr_privcfg	privcfg;
-	u8				cbndx;
-};
-
 #define s2cr_init_val (struct arm_smmu_s2cr){				\
 	.type = disable_bypass ? S2CR_TYPE_FAULT : S2CR_TYPE_BYPASS,	\
 }
 
-struct arm_smmu_smr {
-	u16				mask;
-	u16				id;
-	bool				valid;
-};
-
 struct arm_smmu_cb {
 	u64				ttbr[2];
 	u32				tcr[2];
@@ -130,6 +111,12 @@ static struct arm_smmu_domain *to_smmu_domain(struct iommu_domain *dom)
 	return container_of(dom, struct arm_smmu_domain, domain);
 }
 
+static struct platform_driver arm_smmu_driver;
+static struct iommu_ops arm_smmu_ops;
+
+#ifdef CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS
+static int arm_smmu_bus_init(struct iommu_ops *ops);
+
 static struct device_node *dev_get_dev_node(struct device *dev)
 {
 	if (dev_is_pci(dev)) {
@@ -165,9 +152,6 @@ static int __find_legacy_master_phandle(struct device *dev, void *data)
 	return err == -ENOENT ? 0 : err;
 }
 
-static struct platform_driver arm_smmu_driver;
-static struct iommu_ops arm_smmu_ops;
-
 static int arm_smmu_register_legacy_master(struct device *dev,
 					   struct arm_smmu_device **smmu)
 {
@@ -219,9 +203,40 @@ static int arm_smmu_register_legacy_master(struct device *dev,
 	return err;
 }
 
-static int __arm_smmu_alloc_bitmap(unsigned long *map, int start, int end)
+/*
+ * With the legacy DT binding in play, we have no guarantees about
+ * probe order, but then we're also not doing default domains, so we can
+ * delay setting bus ops until we're sure every possible SMMU is ready,
+ * and that way ensure that no add_device() calls get missed.
+ */
+static int arm_smmu_legacy_bus_init(void)
 {
+	if (using_legacy_binding)
+		return arm_smmu_bus_init(&arm_smmu_ops);
+	return 0;
+}
+device_initcall_sync(arm_smmu_legacy_bus_init);
+#else
+static int arm_smmu_register_legacy_master(struct device *dev,
+					   struct arm_smmu_device **smmu)
+{
+	return -ENODEV;
+}
+#endif /* CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS */
+
+static int __arm_smmu_alloc_cb(struct arm_smmu_device *smmu, int start,
+			       struct device *dev)
+{
+	struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
+	unsigned long *map = smmu->context_map;
+	int end = smmu->num_context_banks;
 	int idx;
+	int i;
+
+	for_each_cfg_sme(fwspec, i, idx) {
+		if (smmu->s2crs[idx].pinned)
+			return smmu->s2crs[idx].cbndx;
+	}
 
 	do {
 		idx = find_next_zero_bit(map, end, start);
@@ -626,7 +641,8 @@ static void arm_smmu_write_context_bank(struct arm_smmu_device *smmu, int idx)
 }
 
 static int arm_smmu_init_domain_context(struct iommu_domain *domain,
-					struct arm_smmu_device *smmu)
+					struct arm_smmu_device *smmu,
+					struct device *dev)
 {
 	int irq, start, ret = 0;
 	unsigned long ias, oas;
@@ -740,8 +756,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
 		ret = -EINVAL;
 		goto out_unlock;
 	}
-	ret = __arm_smmu_alloc_bitmap(smmu->context_map, start,
-				      smmu->num_context_banks);
+	ret = __arm_smmu_alloc_cb(smmu, start, dev);
 	if (ret < 0)
 		goto out_unlock;
 
@@ -929,24 +944,43 @@ static void arm_smmu_write_sme(struct arm_smmu_device *smmu, int idx)
  */
 static void arm_smmu_test_smr_masks(struct arm_smmu_device *smmu)
 {
+	u32 s2cr;
 	u32 smr;
+	int idx;
 
 	if (!smmu->smrs)
 		return;
 
+	for (idx = 0; idx < smmu->num_mapping_groups; idx++) {
+		if (smmu->features & ARM_SMMU_FEAT_EXIDS) {
+			s2cr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_S2CR(idx));
+			if (!FIELD_GET(S2CR_EXIDVALID, s2cr))
+				break;
+		} else {
+			smr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_SMR(idx));
+			if (!FIELD_GET(SMR_VALID, smr))
+				break;
+		}
+	}
+
+	if (idx == smmu->num_mapping_groups) {
+		dev_err(smmu->dev, "Unable to compute streamid_mask\n");
+		return;
+	}
+
 	/*
 	 * SMR.ID bits may not be preserved if the corresponding MASK
 	 * bits are set, so check each one separately. We can reject
 	 * masters later if they try to claim IDs outside these masks.
 	 */
 	smr = FIELD_PREP(SMR_ID, smmu->streamid_mask);
-	arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_SMR(0), smr);
-	smr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_SMR(0));
+	arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_SMR(idx), smr);
+	smr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_SMR(idx));
 	smmu->streamid_mask = FIELD_GET(SMR_ID, smr);
 
 	smr = FIELD_PREP(SMR_MASK, smmu->streamid_mask);
-	arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_SMR(0), smr);
-	smr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_SMR(0));
+	arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_SMR(idx), smr);
+	smr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_SMR(idx));
 	smmu->smr_mask_mask = FIELD_GET(SMR_MASK, smr);
 }
 
@@ -994,12 +1028,19 @@ static int arm_smmu_find_sme(struct arm_smmu_device *smmu, u16 id, u16 mask)
 
 static bool arm_smmu_free_sme(struct arm_smmu_device *smmu, int idx)
 {
+	bool pinned = smmu->s2crs[idx].pinned;
+	u8 cbndx = smmu->s2crs[idx].cbndx;;
+
 	if (--smmu->s2crs[idx].count)
 		return false;
 
 	smmu->s2crs[idx] = s2cr_init_val;
-	if (smmu->smrs)
+	if (pinned) {
+		smmu->s2crs[idx].pinned = true;
+		smmu->s2crs[idx].cbndx = cbndx;
+	} else if (smmu->smrs) {
 		smmu->smrs[idx].valid = false;
+	}
 
 	return true;
 }
@@ -1135,7 +1176,7 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
 		return ret;
 
 	/* Ensure that the domain is finalised */
-	ret = arm_smmu_init_domain_context(domain, smmu);
+	ret = arm_smmu_init_domain_context(domain, smmu, dev);
 	if (ret < 0)
 		goto rpm_put;
 
@@ -1160,7 +1201,7 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev)
 }
 
 static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova,
-			phys_addr_t paddr, size_t size, int prot)
+			phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops;
 	struct arm_smmu_device *smmu = to_smmu_domain(domain)->smmu;
@@ -1878,6 +1919,7 @@ static const struct of_device_id arm_smmu_of_match[] = {
 	{ .compatible = "qcom,smmu-v2", .data = &qcom_smmuv2 },
 	{ },
 };
+MODULE_DEVICE_TABLE(of, arm_smmu_of_match);
 
 #ifdef CONFIG_ACPI
 static int acpi_smmu_get_data(u32 model, struct arm_smmu_device *smmu)
@@ -1964,8 +2006,10 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev,
 
 	legacy_binding = of_find_property(dev->of_node, "mmu-masters", NULL);
 	if (legacy_binding && !using_generic_binding) {
-		if (!using_legacy_binding)
-			pr_notice("deprecated \"mmu-masters\" DT property in use; DMA API support unavailable\n");
+		if (!using_legacy_binding) {
+			pr_notice("deprecated \"mmu-masters\" DT property in use; %s support unavailable\n",
+				  IS_ENABLED(CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS) ? "DMA API" : "SMMU");
+		}
 		using_legacy_binding = true;
 	} else if (!legacy_binding && !using_legacy_binding) {
 		using_generic_binding = true;
@@ -1980,25 +2024,50 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev,
 	return 0;
 }
 
-static void arm_smmu_bus_init(void)
+static int arm_smmu_bus_init(struct iommu_ops *ops)
 {
+	int err;
+
 	/* Oh, for a proper bus abstraction */
-	if (!iommu_present(&platform_bus_type))
-		bus_set_iommu(&platform_bus_type, &arm_smmu_ops);
+	if (!iommu_present(&platform_bus_type)) {
+		err = bus_set_iommu(&platform_bus_type, ops);
+		if (err)
+			return err;
+	}
 #ifdef CONFIG_ARM_AMBA
-	if (!iommu_present(&amba_bustype))
-		bus_set_iommu(&amba_bustype, &arm_smmu_ops);
+	if (!iommu_present(&amba_bustype)) {
+		err = bus_set_iommu(&amba_bustype, ops);
+		if (err)
+			goto err_reset_platform_ops;
+	}
 #endif
 #ifdef CONFIG_PCI
 	if (!iommu_present(&pci_bus_type)) {
-		pci_request_acs();
-		bus_set_iommu(&pci_bus_type, &arm_smmu_ops);
+		err = bus_set_iommu(&pci_bus_type, ops);
+		if (err)
+			goto err_reset_amba_ops;
 	}
 #endif
 #ifdef CONFIG_FSL_MC_BUS
-	if (!iommu_present(&fsl_mc_bus_type))
-		bus_set_iommu(&fsl_mc_bus_type, &arm_smmu_ops);
+	if (!iommu_present(&fsl_mc_bus_type)) {
+		err = bus_set_iommu(&fsl_mc_bus_type, ops);
+		if (err)
+			goto err_reset_pci_ops;
+	}
 #endif
+	return 0;
+
+err_reset_pci_ops: __maybe_unused;
+#ifdef CONFIG_PCI
+	bus_set_iommu(&pci_bus_type, NULL);
+#endif
+err_reset_amba_ops: __maybe_unused;
+#ifdef CONFIG_ARM_AMBA
+	bus_set_iommu(&amba_bustype, NULL);
+#endif
+err_reset_platform_ops: __maybe_unused;
+	bus_set_iommu(&platform_bus_type, NULL);
+	return err;
 }
 
 static int arm_smmu_device_probe(struct platform_device *pdev)
@@ -2146,35 +2215,25 @@ static int arm_smmu_device_probe(struct platform_device *pdev)
 	 * ready to handle default domain setup as soon as any SMMU exists.
 	 */
 	if (!using_legacy_binding)
-		arm_smmu_bus_init();
+		return arm_smmu_bus_init(&arm_smmu_ops);
 
 	return 0;
 }
 
-/*
- * With the legacy DT binding in play, though, we have no guarantees about
- * probe order, but then we're also not doing default domains, so we can
- * delay setting bus ops until we're sure every possible SMMU is ready,
- * and that way ensure that no add_device() calls get missed.
- */
-static int arm_smmu_legacy_bus_init(void)
-{
-	if (using_legacy_binding)
-		arm_smmu_bus_init();
-	return 0;
-}
-device_initcall_sync(arm_smmu_legacy_bus_init);
-
-static void arm_smmu_device_shutdown(struct platform_device *pdev)
+static int arm_smmu_device_remove(struct platform_device *pdev)
 {
 	struct arm_smmu_device *smmu = platform_get_drvdata(pdev);
 
 	if (!smmu)
-		return;
+		return -ENODEV;
 
 	if (!bitmap_empty(smmu->context_map, ARM_SMMU_MAX_CBS))
 		dev_err(&pdev->dev, "removing device with active domains!\n");
 
+	arm_smmu_bus_init(NULL);
+	iommu_device_unregister(&smmu->iommu);
+	iommu_device_sysfs_remove(&smmu->iommu);
+
 	arm_smmu_rpm_get(smmu);
 	/* Turn the thing off */
 	arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_sCR0, sCR0_CLIENTPD);
@@ -2186,6 +2245,12 @@ static void arm_smmu_device_shutdown(struct platform_device *pdev)
 		clk_bulk_disable(smmu->num_clks, smmu->clks);
 
 	clk_bulk_unprepare(smmu->num_clks, smmu->clks);
+	return 0;
+}
+
+static void arm_smmu_device_shutdown(struct platform_device *pdev)
+{
+	arm_smmu_device_remove(pdev);
 }
 
 static int __maybe_unused arm_smmu_runtime_resume(struct device *dev)
@@ -2238,9 +2303,14 @@ static struct platform_driver arm_smmu_driver = {
 		.name			= "arm-smmu",
 		.of_match_table		= of_match_ptr(arm_smmu_of_match),
 		.pm			= &arm_smmu_pm_ops,
-		.suppress_bind_attrs	= true,
+		.suppress_bind_attrs    = true,
 	},
 	.probe	= arm_smmu_device_probe,
+	.remove	= arm_smmu_device_remove,
 	.shutdown = arm_smmu_device_shutdown,
 };
-builtin_platform_driver(arm_smmu_driver);
+module_platform_driver(arm_smmu_driver);
+
+MODULE_DESCRIPTION("IOMMU API for ARM architected SMMU implementations");
+MODULE_AUTHOR("Will Deacon <will@kernel.org>");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/iommu/arm-smmu.h b/drivers/iommu/arm-smmu.h
index b19b6ca..a144c9f 100644
--- a/drivers/iommu/arm-smmu.h
+++ b/drivers/iommu/arm-smmu.h
@@ -222,6 +222,21 @@ enum arm_smmu_implementation {
 	QCOM_SMMUV2,
 };
 
+struct arm_smmu_s2cr {
+	struct iommu_group		*group;
+	int				count;
+	enum arm_smmu_s2cr_type		type;
+	enum arm_smmu_s2cr_privcfg	privcfg;
+	u8				cbndx;
+	bool				pinned;
+};
+
+struct arm_smmu_smr {
+	u16				mask;
+	u16				id;
+	bool				valid;
+};
+
 struct arm_smmu_device {
 	struct device			*dev;
 
@@ -398,5 +413,8 @@ static inline void arm_smmu_writeq(struct arm_smmu_device *smmu, int page,
 	arm_smmu_writeq((s), ARM_SMMU_CB((s), (n)), (o), (v))
 
 struct arm_smmu_device *arm_smmu_impl_init(struct arm_smmu_device *smmu);
+struct arm_smmu_device *qcom_smmu_impl_init(struct arm_smmu_device *smmu);
+
+int arm_mmu500_reset(struct arm_smmu_device *smmu);
 
 #endif /* _ARM_SMMU_H */
diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
index 76bd230..3400f2e 100644
--- a/drivers/iommu/dma-iommu.c
+++ b/drivers/iommu/dma-iommu.c
@@ -352,6 +352,52 @@ static int iommu_dma_init_domain(struct iommu_domain *domain, dma_addr_t base,
 	return iova_reserve_iommu_regions(dev, domain);
 }
 
+/*
+ * Should be called prior to using dma-apis
+ */
+int iommu_dma_reserve_iova(struct device *dev, dma_addr_t base,
+			   u64 size)
+{
+	struct iommu_domain *domain;
+	struct iommu_dma_cookie *cookie;
+	struct iova_domain *iovad;
+	unsigned long pfn_lo, pfn_hi;
+
+	domain = iommu_get_domain_for_dev(dev);
+	if (!domain || !domain->iova_cookie)
+		return -EINVAL;
+
+	cookie = domain->iova_cookie;
+	iovad = &cookie->iovad;
+
+	/* iova will be freed automatically by put_iova_domain() */
+	pfn_lo = iova_pfn(iovad, base);
+	pfn_hi = iova_pfn(iovad, base + size - 1);
+	if (!reserve_iova(iovad, pfn_lo, pfn_hi))
+		return -EINVAL;
+
+	return 0;
+}
+EXPORT_SYMBOL(iommu_dma_reserve_iova);
+
+/*
+ * Should be called prior to using dma-apis.
+ */
+int iommu_dma_enable_best_fit_algo(struct device *dev)
+{
+	struct iommu_domain *domain;
+	struct iova_domain *iovad;
+
+	domain = iommu_get_domain_for_dev(dev);
+	if (!domain || !domain->iova_cookie)
+		return -EINVAL;
+
+	iovad = &((struct iommu_dma_cookie *)domain->iova_cookie)->iovad;
+	iovad->best_fit = true;
+	return 0;
+}
+EXPORT_SYMBOL(iommu_dma_enable_best_fit_algo);
+
 /**
  * dma_info_to_prot - Translate DMA API directions and attributes to IOMMU API
  *                    page flags.
@@ -475,7 +521,7 @@ static dma_addr_t __iommu_dma_map(struct device *dev, phys_addr_t phys,
 	if (!iova)
 		return DMA_MAPPING_ERROR;
 
-	if (iommu_map(domain, iova, phys - iova_off, size, prot)) {
+	if (iommu_map_atomic(domain, iova, phys - iova_off, size, prot)) {
 		iommu_dma_free_iova(cookie, iova, size);
 		return DMA_MAPPING_ERROR;
 	}
@@ -610,7 +656,7 @@ static void *iommu_dma_alloc_remap(struct device *dev, size_t size,
 			arch_dma_prep_coherent(sg_page(sg), sg->length);
 	}
 
-	if (iommu_map_sg(domain, iova, sgt.sgl, sgt.orig_nents, ioprot)
+	if (iommu_map_sg_atomic(domain, iova, sgt.sgl, sgt.orig_nents, ioprot)
 			< size)
 		goto out_free_sg;
 
@@ -870,7 +916,7 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg,
 	 * We'll leave any physical concatenation to the IOMMU driver's
 	 * implementation - it knows better than we do.
 	 */
-	if (iommu_map_sg(domain, iova, sg, nents, prot) < iova_len)
+	if (iommu_map_sg_atomic(domain, iova, sg, nents, prot) < iova_len)
 		goto out_free_iova;
 
 	return __finalise_sg(dev, sg, nents, iova);
diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
index 55ed857f..85b7a1b 100644
--- a/drivers/iommu/exynos-iommu.c
+++ b/drivers/iommu/exynos-iommu.c
@@ -1073,7 +1073,7 @@ static int lv2set_page(sysmmu_pte_t *pent, phys_addr_t paddr, size_t size,
  */
 static int exynos_iommu_map(struct iommu_domain *iommu_domain,
 			    unsigned long l_iova, phys_addr_t paddr, size_t size,
-			    int prot)
+			    int prot, gfp_t gfp)
 {
 	struct exynos_iommu_domain *domain = to_exynos_domain(iommu_domain);
 	sysmmu_pte_t *entry;
diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index 953d86c..e17c3ca 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -5452,7 +5452,7 @@ static void intel_iommu_aux_detach_device(struct iommu_domain *domain,
 
 static int intel_iommu_map(struct iommu_domain *domain,
 			   unsigned long iova, phys_addr_t hpa,
-			   size_t size, int iommu_prot)
+			   size_t size, int iommu_prot, gfp_t gfp)
 {
 	struct dmar_domain *dmar_domain = to_dmar_domain(domain);
 	u64 max_addr;
diff --git a/drivers/iommu/io-pgtable-arm-v7s.c b/drivers/iommu/io-pgtable-arm-v7s.c
index 4cb3949..6c08e99 100644
--- a/drivers/iommu/io-pgtable-arm-v7s.c
+++ b/drivers/iommu/io-pgtable-arm-v7s.c
@@ -50,20 +50,26 @@
  */
 #define ARM_V7S_ADDR_BITS		32
 #define _ARM_V7S_LVL_BITS(lvl)		(16 - (lvl) * 4)
+/* MediaTek: totally 34bits, 14bits at lvl1 and 8bits at lvl2. */
+#define _ARM_V7S_LVL_BITS_MTK(lvl)	(20 - (lvl) * 6)
 #define ARM_V7S_LVL_SHIFT(lvl)		(ARM_V7S_ADDR_BITS - (4 + 8 * (lvl)))
 #define ARM_V7S_TABLE_SHIFT		10
 
-#define ARM_V7S_PTES_PER_LVL(lvl)	(1 << _ARM_V7S_LVL_BITS(lvl))
-#define ARM_V7S_TABLE_SIZE(lvl)						\
-	(ARM_V7S_PTES_PER_LVL(lvl) * sizeof(arm_v7s_iopte))
+#define ARM_V7S_PTES_PER_LVL(lvl, cfg)	({				\
+	!arm_v7s_is_mtk_enabled(cfg) ?					\
+	 (1 << _ARM_V7S_LVL_BITS(lvl)) : (1 << _ARM_V7S_LVL_BITS_MTK(lvl));\
+})
+
+#define ARM_V7S_TABLE_SIZE(lvl, cfg)					\
+	(ARM_V7S_PTES_PER_LVL(lvl, cfg) * sizeof(arm_v7s_iopte))
 
 #define ARM_V7S_BLOCK_SIZE(lvl)		(1UL << ARM_V7S_LVL_SHIFT(lvl))
 #define ARM_V7S_LVL_MASK(lvl)		((u32)(~0U << ARM_V7S_LVL_SHIFT(lvl)))
 #define ARM_V7S_TABLE_MASK		((u32)(~0U << ARM_V7S_TABLE_SHIFT))
-#define _ARM_V7S_IDX_MASK(lvl)		(ARM_V7S_PTES_PER_LVL(lvl) - 1)
-#define ARM_V7S_LVL_IDX(addr, lvl)	({				\
+#define _ARM_V7S_IDX_MASK(lvl, cfg)	(ARM_V7S_PTES_PER_LVL(lvl, cfg) - 1)
+#define ARM_V7S_LVL_IDX(addr, lvl, cfg)	({			\
 	int _l = lvl;							\
-	((u32)(addr) >> ARM_V7S_LVL_SHIFT(_l)) & _ARM_V7S_IDX_MASK(_l); \
+	((addr) >> ARM_V7S_LVL_SHIFT(_l)) & _ARM_V7S_IDX_MASK(_l, cfg); \
 })
 
 /*
@@ -112,9 +118,10 @@
 #define ARM_V7S_TEX_MASK		0x7
 #define ARM_V7S_ATTR_TEX(val)		(((val) & ARM_V7S_TEX_MASK) << ARM_V7S_TEX_SHIFT)
 
-/* MediaTek extend the two bits for PA 32bit/33bit */
+/* MediaTek extend the bits below for PA 32bit/33bit/34bit */
 #define ARM_V7S_ATTR_MTK_PA_BIT32	BIT(9)
 #define ARM_V7S_ATTR_MTK_PA_BIT33	BIT(4)
+#define ARM_V7S_ATTR_MTK_PA_BIT34	BIT(5)
 
 /* *well, except for TEX on level 2 large pages, of course :( */
 #define ARM_V7S_CONT_PAGE_TEX_SHIFT	6
@@ -196,6 +203,8 @@ static arm_v7s_iopte paddr_to_iopte(phys_addr_t paddr, int lvl,
 		pte |= ARM_V7S_ATTR_MTK_PA_BIT32;
 	if (paddr & BIT_ULL(33))
 		pte |= ARM_V7S_ATTR_MTK_PA_BIT33;
+	if (paddr & BIT_ULL(34))
+		pte |= ARM_V7S_ATTR_MTK_PA_BIT34;
 	return pte;
 }
 
@@ -220,6 +229,8 @@ static phys_addr_t iopte_to_paddr(arm_v7s_iopte pte, int lvl,
 		paddr |= BIT_ULL(32);
 	if (pte & ARM_V7S_ATTR_MTK_PA_BIT33)
 		paddr |= BIT_ULL(33);
+	if (pte & ARM_V7S_ATTR_MTK_PA_BIT34)
+		paddr |= BIT_ULL(34);
 	return paddr;
 }
 
@@ -236,7 +247,7 @@ static void *__arm_v7s_alloc_table(int lvl, gfp_t gfp,
 	struct device *dev = cfg->iommu_dev;
 	phys_addr_t phys;
 	dma_addr_t dma;
-	size_t size = ARM_V7S_TABLE_SIZE(lvl);
+	size_t size = ARM_V7S_TABLE_SIZE(lvl, cfg);
 	void *table = NULL;
 
 	if (lvl == 1)
@@ -282,7 +293,7 @@ static void __arm_v7s_free_table(void *table, int lvl,
 {
 	struct io_pgtable_cfg *cfg = &data->iop.cfg;
 	struct device *dev = cfg->iommu_dev;
-	size_t size = ARM_V7S_TABLE_SIZE(lvl);
+	size_t size = ARM_V7S_TABLE_SIZE(lvl, cfg);
 
 	if (!cfg->coherent_walk)
 		dma_unmap_single(dev, __arm_v7s_dma_addr(table), size,
@@ -426,7 +437,7 @@ static int arm_v7s_init_pte(struct arm_v7s_io_pgtable *data,
 			arm_v7s_iopte *tblp;
 			size_t sz = ARM_V7S_BLOCK_SIZE(lvl);
 
-			tblp = ptep - ARM_V7S_LVL_IDX(iova, lvl);
+			tblp = ptep - ARM_V7S_LVL_IDX(iova, lvl, cfg);
 			if (WARN_ON(__arm_v7s_unmap(data, NULL, iova + i * sz,
 						    sz, lvl, tblp) != sz))
 				return -EINVAL;
@@ -479,7 +490,7 @@ static int __arm_v7s_map(struct arm_v7s_io_pgtable *data, unsigned long iova,
 	int num_entries = size >> ARM_V7S_LVL_SHIFT(lvl);
 
 	/* Find our entry at the current level */
-	ptep += ARM_V7S_LVL_IDX(iova, lvl);
+	ptep += ARM_V7S_LVL_IDX(iova, lvl, cfg);
 
 	/* If we can install a leaf entry at this level, then do so */
 	if (num_entries)
@@ -552,7 +563,7 @@ static void arm_v7s_free_pgtable(struct io_pgtable *iop)
 	struct arm_v7s_io_pgtable *data = io_pgtable_to_data(iop);
 	int i;
 
-	for (i = 0; i < ARM_V7S_PTES_PER_LVL(1); i++) {
+	for (i = 0; i < ARM_V7S_PTES_PER_LVL(1, &data->iop.cfg); i++) {
 		arm_v7s_iopte pte = data->pgd[i];
 
 		if (ARM_V7S_PTE_IS_TABLE(pte, 1))
@@ -604,9 +615,9 @@ static size_t arm_v7s_split_blk_unmap(struct arm_v7s_io_pgtable *data,
 	if (!tablep)
 		return 0; /* Bytes unmapped */
 
-	num_ptes = ARM_V7S_PTES_PER_LVL(2);
+	num_ptes = ARM_V7S_PTES_PER_LVL(2, cfg);
 	num_entries = size >> ARM_V7S_LVL_SHIFT(2);
-	unmap_idx = ARM_V7S_LVL_IDX(iova, 2);
+	unmap_idx = ARM_V7S_LVL_IDX(iova, 2, cfg);
 
 	pte = arm_v7s_prot_to_pte(arm_v7s_pte_to_prot(blk_pte, 1), 2, cfg);
 	if (num_entries > 1)
@@ -648,7 +659,7 @@ static size_t __arm_v7s_unmap(struct arm_v7s_io_pgtable *data,
 	if (WARN_ON(lvl > 2))
 		return 0;
 
-	idx = ARM_V7S_LVL_IDX(iova, lvl);
+	idx = ARM_V7S_LVL_IDX(iova, lvl, &iop->cfg);
 	ptep += idx;
 	do {
 		pte[i] = READ_ONCE(ptep[i]);
@@ -719,7 +730,7 @@ static size_t arm_v7s_unmap(struct io_pgtable_ops *ops, unsigned long iova,
 {
 	struct arm_v7s_io_pgtable *data = io_pgtable_ops_to_data(ops);
 
-	if (WARN_ON(upper_32_bits(iova)))
+	if (WARN_ON(iova >= (1ULL << data->iop.cfg.ias)))
 		return 0;
 
 	return __arm_v7s_unmap(data, gather, iova, size, 1, data->pgd);
@@ -734,7 +745,7 @@ static phys_addr_t arm_v7s_iova_to_phys(struct io_pgtable_ops *ops,
 	u32 mask;
 
 	do {
-		ptep += ARM_V7S_LVL_IDX(iova, ++lvl);
+		ptep += ARM_V7S_LVL_IDX(iova, ++lvl, &data->iop.cfg);
 		pte = READ_ONCE(*ptep);
 		ptep = iopte_deref(pte, lvl, data);
 	} while (ARM_V7S_PTE_IS_TABLE(pte, lvl));
@@ -753,10 +764,10 @@ static struct io_pgtable *arm_v7s_alloc_pgtable(struct io_pgtable_cfg *cfg,
 {
 	struct arm_v7s_io_pgtable *data;
 
-	if (cfg->ias > ARM_V7S_ADDR_BITS)
+	if (cfg->ias > (arm_v7s_is_mtk_enabled(cfg) ? 34 : ARM_V7S_ADDR_BITS))
 		return NULL;
 
-	if (cfg->oas > (arm_v7s_is_mtk_enabled(cfg) ? 34 : ARM_V7S_ADDR_BITS))
+	if (cfg->oas > (arm_v7s_is_mtk_enabled(cfg) ? 35 : ARM_V7S_ADDR_BITS))
 		return NULL;
 
 	if (cfg->quirks & ~(IO_PGTABLE_QUIRK_ARM_NS |
@@ -777,8 +788,8 @@ static struct io_pgtable *arm_v7s_alloc_pgtable(struct io_pgtable_cfg *cfg,
 
 	spin_lock_init(&data->split_lock);
 	data->l2_tables = kmem_cache_create("io-pgtable_armv7s_l2",
-					    ARM_V7S_TABLE_SIZE(2),
-					    ARM_V7S_TABLE_SIZE(2),
+					    ARM_V7S_TABLE_SIZE(2, cfg),
+					    ARM_V7S_TABLE_SIZE(2, cfg),
 					    ARM_V7S_TABLE_SLAB_FLAGS, NULL);
 	if (!data->l2_tables)
 		goto out_free_data;
diff --git a/drivers/iommu/iommu-sysfs.c b/drivers/iommu/iommu-sysfs.c
index e436ff8..9986921 100644
--- a/drivers/iommu/iommu-sysfs.c
+++ b/drivers/iommu/iommu-sysfs.c
@@ -87,6 +87,7 @@ int iommu_device_sysfs_add(struct iommu_device *iommu,
 	put_device(iommu->dev);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(iommu_device_sysfs_add);
 
 void iommu_device_sysfs_remove(struct iommu_device *iommu)
 {
@@ -94,6 +95,8 @@ void iommu_device_sysfs_remove(struct iommu_device *iommu)
 	device_unregister(iommu->dev);
 	iommu->dev = NULL;
 }
+EXPORT_SYMBOL_GPL(iommu_device_sysfs_remove);
+
 /*
  * IOMMU drivers can indicate a device is managed by a given IOMMU using
  * this interface.  A link to the device will be created in the "devices"
@@ -119,6 +122,7 @@ int iommu_device_link(struct iommu_device *iommu, struct device *link)
 
 	return ret;
 }
+EXPORT_SYMBOL_GPL(iommu_device_link);
 
 void iommu_device_unlink(struct iommu_device *iommu, struct device *link)
 {
@@ -128,3 +132,4 @@ void iommu_device_unlink(struct iommu_device *iommu, struct device *link)
 	sysfs_remove_link(&link->kobj, "iommu");
 	sysfs_remove_link_from_group(&iommu->dev->kobj, "devices", dev_name(link));
 }
+EXPORT_SYMBOL_GPL(iommu_device_unlink);
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index 9d7232e..9ed64e5 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -22,6 +22,7 @@
 #include <linux/bitops.h>
 #include <linux/property.h>
 #include <linux/fsl/mc.h>
+#include <linux/module.h>
 #include <trace/events/iommu.h>
 
 static struct kset *iommu_group_kset;
@@ -141,6 +142,7 @@ int iommu_device_register(struct iommu_device *iommu)
 	spin_unlock(&iommu_device_lock);
 	return 0;
 }
+EXPORT_SYMBOL_GPL(iommu_device_register);
 
 void iommu_device_unregister(struct iommu_device *iommu)
 {
@@ -148,6 +150,7 @@ void iommu_device_unregister(struct iommu_device *iommu)
 	list_del(&iommu->list);
 	spin_unlock(&iommu_device_lock);
 }
+EXPORT_SYMBOL_GPL(iommu_device_unregister);
 
 static struct iommu_param *iommu_get_dev_param(struct device *dev)
 {
@@ -183,10 +186,21 @@ int iommu_probe_device(struct device *dev)
 	if (!iommu_get_dev_param(dev))
 		return -ENOMEM;
 
+	if (!try_module_get(ops->owner)) {
+		ret = -EINVAL;
+		goto err_free_dev_param;
+	}
+
 	ret = ops->add_device(dev);
 	if (ret)
-		iommu_free_dev_param(dev);
+		goto err_module_put;
 
+	return 0;
+
+err_module_put:
+	module_put(ops->owner);
+err_free_dev_param:
+	iommu_free_dev_param(dev);
 	return ret;
 }
 
@@ -197,7 +211,10 @@ void iommu_release_device(struct device *dev)
 	if (dev->iommu_group)
 		ops->remove_device(dev);
 
-	iommu_free_dev_param(dev);
+	if (dev->iommu_param) {
+		module_put(ops->owner);
+		iommu_free_dev_param(dev);
+	}
 }
 
 static struct iommu_domain *__iommu_domain_alloc(struct bus_type *bus,
@@ -289,8 +306,8 @@ static ssize_t iommu_group_show_name(struct iommu_group *group, char *buf)
  * Elements are sorted by start address and overlapping segments
  * of the same type are merged.
  */
-int iommu_insert_resv_region(struct iommu_resv_region *new,
-			     struct list_head *regions)
+static int iommu_insert_resv_region(struct iommu_resv_region *new,
+				    struct list_head *regions)
 {
 	struct iommu_resv_region *iter, *tmp, *nr, *top;
 	LIST_HEAD(stack);
@@ -887,6 +904,7 @@ struct iommu_group *iommu_group_ref_get(struct iommu_group *group)
 	kobject_get(group->devices_kobj);
 	return group;
 }
+EXPORT_SYMBOL_GPL(iommu_group_ref_get);
 
 /**
  * iommu_group_put - Decrement group reference
@@ -1260,6 +1278,7 @@ struct iommu_group *generic_device_group(struct device *dev)
 {
 	return iommu_group_alloc();
 }
+EXPORT_SYMBOL_GPL(generic_device_group);
 
 /*
  * Use standard PCI bus topology, isolation features, and DMA alias quirks
@@ -1327,6 +1346,7 @@ struct iommu_group *pci_device_group(struct device *dev)
 	/* No shared group found, allocate new */
 	return iommu_group_alloc();
 }
+EXPORT_SYMBOL_GPL(pci_device_group);
 
 /* Get the IOMMU group for device on fsl-mc bus */
 struct iommu_group *fsl_mc_device_group(struct device *dev)
@@ -1339,6 +1359,7 @@ struct iommu_group *fsl_mc_device_group(struct device *dev)
 		group = iommu_group_alloc();
 	return group;
 }
+EXPORT_SYMBOL_GPL(fsl_mc_device_group);
 
 /**
  * iommu_group_get_for_dev - Find or create the IOMMU group for a device
@@ -1407,6 +1428,7 @@ struct iommu_group *iommu_group_get_for_dev(struct device *dev)
 
 	return group;
 }
+EXPORT_SYMBOL_GPL(iommu_group_get_for_dev);
 
 struct iommu_domain *iommu_group_default_domain(struct iommu_group *group)
 {
@@ -1537,6 +1559,11 @@ int bus_set_iommu(struct bus_type *bus, const struct iommu_ops *ops)
 {
 	int err;
 
+	if (ops == NULL) {
+		bus->iommu_ops = NULL;
+		return 0;
+	}
+
 	if (bus->iommu_ops != NULL)
 		return -EBUSY;
 
@@ -1855,8 +1882,8 @@ static size_t iommu_pgsize(struct iommu_domain *domain,
 	return pgsize;
 }
 
-int iommu_map(struct iommu_domain *domain, unsigned long iova,
-	      phys_addr_t paddr, size_t size, int prot)
+static int __iommu_map(struct iommu_domain *domain, unsigned long iova,
+		       phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	const struct iommu_ops *ops = domain->ops;
 	unsigned long orig_iova = iova;
@@ -1893,8 +1920,8 @@ int iommu_map(struct iommu_domain *domain, unsigned long iova,
 
 		pr_debug("mapping: iova 0x%lx pa %pa pgsize 0x%zx\n",
 			 iova, &paddr, pgsize);
+		ret = ops->map(domain, iova, paddr, pgsize, prot, gfp);
 
-		ret = ops->map(domain, iova, paddr, pgsize, prot);
 		if (ret)
 			break;
 
@@ -1914,8 +1941,22 @@ int iommu_map(struct iommu_domain *domain, unsigned long iova,
 
 	return ret;
 }
+
+int iommu_map(struct iommu_domain *domain, unsigned long iova,
+	      phys_addr_t paddr, size_t size, int prot)
+{
+	might_sleep();
+	return __iommu_map(domain, iova, paddr, size, prot, GFP_KERNEL);
+}
 EXPORT_SYMBOL_GPL(iommu_map);
 
+int iommu_map_atomic(struct iommu_domain *domain, unsigned long iova,
+	      phys_addr_t paddr, size_t size, int prot)
+{
+	return __iommu_map(domain, iova, paddr, size, prot, GFP_ATOMIC);
+}
+EXPORT_SYMBOL_GPL(iommu_map_atomic);
+
 static size_t __iommu_unmap(struct iommu_domain *domain,
 			    unsigned long iova, size_t size,
 			    struct iommu_iotlb_gather *iotlb_gather)
@@ -1992,8 +2033,9 @@ size_t iommu_unmap_fast(struct iommu_domain *domain,
 }
 EXPORT_SYMBOL_GPL(iommu_unmap_fast);
 
-size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
-		    struct scatterlist *sg, unsigned int nents, int prot)
+static size_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
+			     struct scatterlist *sg, unsigned int nents, int prot,
+			     gfp_t gfp)
 {
 	size_t len = 0, mapped = 0;
 	phys_addr_t start;
@@ -2004,7 +2046,9 @@ size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
 		phys_addr_t s_phys = sg_phys(sg);
 
 		if (len && s_phys != start + len) {
-			ret = iommu_map(domain, iova + mapped, start, len, prot);
+			ret = __iommu_map(domain, iova + mapped, start,
+					len, prot, gfp);
+
 			if (ret)
 				goto out_err;
 
@@ -2032,8 +2076,22 @@ size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
 	return 0;
 
 }
+
+size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
+		    struct scatterlist *sg, unsigned int nents, int prot)
+{
+	might_sleep();
+	return __iommu_map_sg(domain, iova, sg, nents, prot, GFP_KERNEL);
+}
 EXPORT_SYMBOL_GPL(iommu_map_sg);
 
+size_t iommu_map_sg_atomic(struct iommu_domain *domain, unsigned long iova,
+		    struct scatterlist *sg, unsigned int nents, int prot)
+{
+	return __iommu_map_sg(domain, iova, sg, nents, prot, GFP_ATOMIC);
+}
+EXPORT_SYMBOL_GPL(iommu_map_sg_atomic);
+
 int iommu_domain_window_enable(struct iommu_domain *domain, u32 wnd_nr,
 			       phys_addr_t paddr, u64 size, int prot)
 {
@@ -2186,6 +2244,7 @@ struct iommu_resv_region *iommu_alloc_resv_region(phys_addr_t start,
 	region->type = type;
 	return region;
 }
+EXPORT_SYMBOL_GPL(iommu_alloc_resv_region);
 
 static int
 request_default_domain_for_dev(struct device *dev, unsigned long type)
diff --git a/drivers/iommu/iova.c b/drivers/iommu/iova.c
index 612cbf6..7593ba3 100644
--- a/drivers/iommu/iova.c
+++ b/drivers/iommu/iova.c
@@ -50,6 +50,7 @@ init_iova_domain(struct iova_domain *iovad, unsigned long granule,
 	iovad->anchor.pfn_lo = iovad->anchor.pfn_hi = IOVA_ANCHOR;
 	rb_link_node(&iovad->anchor.node, NULL, &iovad->rbroot.rb_node);
 	rb_insert_color(&iovad->anchor.node, &iovad->rbroot);
+	iovad->best_fit = false;
 	init_iova_rcaches(iovad);
 }
 EXPORT_SYMBOL_GPL(init_iova_domain);
@@ -177,6 +178,24 @@ iova_insert_rbtree(struct rb_root *root, struct iova *iova,
 	rb_insert_color(&iova->node, root);
 }
 
+#ifdef CONFIG_IOMMU_LIMIT_IOVA_ALIGNMENT
+static unsigned long limit_align_shift(struct iova_domain *iovad,
+				       unsigned long shift)
+{
+	unsigned long max_align_shift;
+
+	max_align_shift = CONFIG_IOMMU_IOVA_ALIGNMENT + PAGE_SHIFT
+		- iova_shift(iovad);
+	return min_t(unsigned long, max_align_shift, shift);
+}
+#else
+static unsigned long limit_align_shift(struct iova_domain *iovad,
+				       unsigned long shift)
+{
+	return shift;
+}
+#endif
+
 static int __alloc_and_insert_iova_range(struct iova_domain *iovad,
 		unsigned long size, unsigned long limit_pfn,
 			struct iova *new, bool size_aligned)
@@ -188,7 +207,7 @@ static int __alloc_and_insert_iova_range(struct iova_domain *iovad,
 	unsigned long align_mask = ~0UL;
 
 	if (size_aligned)
-		align_mask <<= fls_long(size - 1);
+		align_mask <<= limit_align_shift(iovad, fls_long(size - 1));
 
 	/* Walk the tree backwards */
 	spin_lock_irqsave(&iovad->iova_rbtree_lock, flags);
@@ -227,6 +246,70 @@ static int __alloc_and_insert_iova_range(struct iova_domain *iovad,
 	return -ENOMEM;
 }
 
+static int __alloc_and_insert_iova_best_fit(struct iova_domain *iovad,
+					    unsigned long size,
+					    unsigned long limit_pfn,
+					    struct iova *new, bool size_aligned)
+{
+	struct rb_node *curr, *prev;
+	struct iova *curr_iova, *prev_iova;
+	unsigned long flags;
+	unsigned long align_mask = ~0UL;
+	struct rb_node *candidate_rb_parent;
+	unsigned long new_pfn, candidate_pfn = ~0UL;
+	unsigned long gap, candidate_gap = ~0UL;
+
+	if (size_aligned)
+		align_mask <<= limit_align_shift(iovad, fls_long(size - 1));
+
+	/* Walk the tree backwards */
+	spin_lock_irqsave(&iovad->iova_rbtree_lock, flags);
+	curr = &iovad->anchor.node;
+	prev = rb_prev(curr);
+	for (; prev; curr = prev, prev = rb_prev(curr)) {
+		curr_iova = rb_entry(curr, struct iova, node);
+		prev_iova = rb_entry(prev, struct iova, node);
+
+		limit_pfn = min(limit_pfn, curr_iova->pfn_lo);
+		new_pfn = (limit_pfn - size) & align_mask;
+		gap = curr_iova->pfn_lo - prev_iova->pfn_hi - 1;
+		if ((limit_pfn >= size) && (new_pfn > prev_iova->pfn_hi)
+				&& (gap < candidate_gap)) {
+			candidate_gap = gap;
+			candidate_pfn = new_pfn;
+			candidate_rb_parent = curr;
+			if (gap == size)
+				goto insert;
+		}
+	}
+
+	curr_iova = rb_entry(curr, struct iova, node);
+	limit_pfn = min(limit_pfn, curr_iova->pfn_lo);
+	new_pfn = (limit_pfn - size) & align_mask;
+	gap = curr_iova->pfn_lo - iovad->start_pfn;
+	if (limit_pfn >= size && new_pfn >= iovad->start_pfn &&
+			gap < candidate_gap) {
+		candidate_gap = gap;
+		candidate_pfn = new_pfn;
+		candidate_rb_parent = curr;
+	}
+
+insert:
+	if (candidate_pfn == ~0UL) {
+		spin_unlock_irqrestore(&iovad->iova_rbtree_lock, flags);
+		return -ENOMEM;
+	}
+
+	/* pfn_lo will point to size aligned address if size_aligned is set */
+	new->pfn_lo = candidate_pfn;
+	new->pfn_hi = new->pfn_lo + size - 1;
+
+	/* If we have 'prev', it's a valid place to start the insertion. */
+	iova_insert_rbtree(&iovad->rbroot, new, candidate_rb_parent);
+	spin_unlock_irqrestore(&iovad->iova_rbtree_lock, flags);
+	return 0;
+}
+
 static struct kmem_cache *iova_cache;
 static unsigned int iova_cache_users;
 static DEFINE_MUTEX(iova_cache_mutex);
@@ -302,8 +385,13 @@ alloc_iova(struct iova_domain *iovad, unsigned long size,
 	if (!new_iova)
 		return NULL;
 
-	ret = __alloc_and_insert_iova_range(iovad, size, limit_pfn + 1,
-			new_iova, size_aligned);
+	if (iovad->best_fit) {
+		ret = __alloc_and_insert_iova_best_fit(iovad, size,
+				limit_pfn + 1, new_iova, size_aligned);
+	} else {
+		ret = __alloc_and_insert_iova_range(iovad, size, limit_pfn + 1,
+				new_iova, size_aligned);
+	}
 
 	if (ret) {
 		free_iova_mem(new_iova);
diff --git a/drivers/iommu/ipmmu-vmsa.c b/drivers/iommu/ipmmu-vmsa.c
index 2639fc7..3dc4c79 100644
--- a/drivers/iommu/ipmmu-vmsa.c
+++ b/drivers/iommu/ipmmu-vmsa.c
@@ -724,7 +724,7 @@ static void ipmmu_detach_device(struct iommu_domain *io_domain,
 }
 
 static int ipmmu_map(struct iommu_domain *io_domain, unsigned long iova,
-		     phys_addr_t paddr, size_t size, int prot)
+		     phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	struct ipmmu_vmsa_domain *domain = to_vmsa_domain(io_domain);
 
diff --git a/drivers/iommu/msm_iommu.c b/drivers/iommu/msm_iommu.c
index be99d40..93f14bc 100644
--- a/drivers/iommu/msm_iommu.c
+++ b/drivers/iommu/msm_iommu.c
@@ -504,7 +504,7 @@ static void msm_iommu_detach_dev(struct iommu_domain *domain,
 }
 
 static int msm_iommu_map(struct iommu_domain *domain, unsigned long iova,
-			 phys_addr_t pa, size_t len, int prot)
+			 phys_addr_t pa, size_t len, int prot, gfp_t gfp)
 {
 	struct msm_priv *priv = to_msm_priv(domain);
 	unsigned long flags;
diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index c2f6c78..5223805 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -427,7 +427,7 @@ static void mtk_iommu_detach_device(struct iommu_domain *domain,
 }
 
 static int mtk_iommu_map(struct iommu_domain *domain, unsigned long iova,
-			 phys_addr_t paddr, size_t size, int prot)
+			 phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	struct mtk_iommu_domain *dom = to_mtk_domain(domain);
 	struct mtk_iommu_data *data = mtk_iommu_get_m4u_data();
diff --git a/drivers/iommu/mtk_iommu_v1.c b/drivers/iommu/mtk_iommu_v1.c
index b5efd6d..e93b94e 100644
--- a/drivers/iommu/mtk_iommu_v1.c
+++ b/drivers/iommu/mtk_iommu_v1.c
@@ -295,7 +295,7 @@ static void mtk_iommu_detach_device(struct iommu_domain *domain,
 }
 
 static int mtk_iommu_map(struct iommu_domain *domain, unsigned long iova,
-			 phys_addr_t paddr, size_t size, int prot)
+			 phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	struct mtk_iommu_domain *dom = to_mtk_domain(domain);
 	unsigned int page_num = size >> MT2701_IOMMU_PAGE_SHIFT;
diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c
index 614a93a..2549140 100644
--- a/drivers/iommu/of_iommu.c
+++ b/drivers/iommu/of_iommu.c
@@ -8,6 +8,7 @@
 #include <linux/export.h>
 #include <linux/iommu.h>
 #include <linux/limits.h>
+#include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_iommu.h>
 #include <linux/of_pci.h>
@@ -89,16 +90,16 @@ static int of_iommu_xlate(struct device *dev,
 {
 	const struct iommu_ops *ops;
 	struct fwnode_handle *fwnode = &iommu_spec->np->fwnode;
-	int err;
+	int ret;
 
 	ops = iommu_ops_from_fwnode(fwnode);
 	if ((ops && !ops->of_xlate) ||
 	    !of_device_is_available(iommu_spec->np))
 		return NO_IOMMU;
 
-	err = iommu_fwspec_init(dev, &iommu_spec->np->fwnode, ops);
-	if (err)
-		return err;
+	ret = iommu_fwspec_init(dev, &iommu_spec->np->fwnode, ops);
+	if (ret)
+		return ret;
 	/*
 	 * The otherwise-empty fwspec handily serves to indicate the specific
 	 * IOMMU device we're waiting for, which will be useful if we ever get
@@ -107,7 +108,12 @@ static int of_iommu_xlate(struct device *dev,
 	if (!ops)
 		return driver_deferred_probe_check_state(dev);
 
-	return ops->of_xlate(dev, iommu_spec);
+	if (!try_module_get(ops->owner))
+		return -ENODEV;
+
+	ret = ops->of_xlate(dev, iommu_spec);
+	module_put(ops->owner);
+	return ret;
 }
 
 struct of_pci_iommu_alias_info {
@@ -177,6 +183,7 @@ const struct iommu_ops *of_iommu_configure(struct device *dev,
 			.np = master_np,
 		};
 
+		pci_request_acs();
 		err = pci_for_each_dma_alias(to_pci_dev(dev),
 					     of_pci_iommu_init, &info);
 	} else if (dev_is_fsl_mc(dev)) {
diff --git a/drivers/iommu/omap-iommu.c b/drivers/iommu/omap-iommu.c
index 09c6e1c..be551cc 100644
--- a/drivers/iommu/omap-iommu.c
+++ b/drivers/iommu/omap-iommu.c
@@ -1339,7 +1339,7 @@ static u32 iotlb_init_entry(struct iotlb_entry *e, u32 da, u32 pa, int pgsz)
 }
 
 static int omap_iommu_map(struct iommu_domain *domain, unsigned long da,
-			  phys_addr_t pa, size_t bytes, int prot)
+			  phys_addr_t pa, size_t bytes, int prot, gfp_t gfp)
 {
 	struct omap_iommu_domain *omap_domain = to_omap_domain(domain);
 	struct device *dev = omap_domain->dev;
diff --git a/drivers/iommu/qcom_iommu.c b/drivers/iommu/qcom_iommu.c
index 280de92b..1be1a17 100644
--- a/drivers/iommu/qcom_iommu.c
+++ b/drivers/iommu/qcom_iommu.c
@@ -419,7 +419,7 @@ static void qcom_iommu_detach_dev(struct iommu_domain *domain, struct device *de
 }
 
 static int qcom_iommu_map(struct iommu_domain *domain, unsigned long iova,
-			  phys_addr_t paddr, size_t size, int prot)
+			  phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	int ret;
 	unsigned long flags;
diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c
index 0df0919..96f37d9 100644
--- a/drivers/iommu/rockchip-iommu.c
+++ b/drivers/iommu/rockchip-iommu.c
@@ -758,7 +758,7 @@ static int rk_iommu_map_iova(struct rk_iommu_domain *rk_domain, u32 *pte_addr,
 }
 
 static int rk_iommu_map(struct iommu_domain *domain, unsigned long _iova,
-			phys_addr_t paddr, size_t size, int prot)
+			phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
 	unsigned long flags;
diff --git a/drivers/iommu/s390-iommu.c b/drivers/iommu/s390-iommu.c
index 3b0b18e..1137f3dd 100644
--- a/drivers/iommu/s390-iommu.c
+++ b/drivers/iommu/s390-iommu.c
@@ -265,7 +265,7 @@ static int s390_iommu_update_trans(struct s390_domain *s390_domain,
 }
 
 static int s390_iommu_map(struct iommu_domain *domain, unsigned long iova,
-			  phys_addr_t paddr, size_t size, int prot)
+			  phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	struct s390_domain *s390_domain = to_s390_domain(domain);
 	int flags = ZPCI_PTE_VALID, rc = 0;
diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c
index 3924f7c..3fb7ba7 100644
--- a/drivers/iommu/tegra-gart.c
+++ b/drivers/iommu/tegra-gart.c
@@ -178,7 +178,7 @@ static inline int __gart_iommu_map(struct gart_device *gart, unsigned long iova,
 }
 
 static int gart_iommu_map(struct iommu_domain *domain, unsigned long iova,
-			  phys_addr_t pa, size_t bytes, int prot)
+			  phys_addr_t pa, size_t bytes, int prot, gfp_t gfp)
 {
 	struct gart_device *gart = gart_handle;
 	int ret;
diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c
index dd48623..576be3f 100644
--- a/drivers/iommu/tegra-smmu.c
+++ b/drivers/iommu/tegra-smmu.c
@@ -651,7 +651,7 @@ static void tegra_smmu_set_pte(struct tegra_smmu_as *as, unsigned long iova,
 }
 
 static int tegra_smmu_map(struct iommu_domain *domain, unsigned long iova,
-			  phys_addr_t paddr, size_t size, int prot)
+			  phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	struct tegra_smmu_as *as = to_smmu_as(domain);
 	dma_addr_t pte_dma;
diff --git a/drivers/iommu/virtio-iommu.c b/drivers/iommu/virtio-iommu.c
index 60e659a..37e2267 100644
--- a/drivers/iommu/virtio-iommu.c
+++ b/drivers/iommu/virtio-iommu.c
@@ -715,7 +715,7 @@ static int viommu_attach_dev(struct iommu_domain *domain, struct device *dev)
 }
 
 static int viommu_map(struct iommu_domain *domain, unsigned long iova,
-		      phys_addr_t paddr, size_t size, int prot)
+		      phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	int ret;
 	u32 flags;
diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig
index 97f9c00..b1d2542 100644
--- a/drivers/irqchip/Kconfig
+++ b/drivers/irqchip/Kconfig
@@ -421,7 +421,7 @@
          for Goldfish based virtual platforms.
 
 config QCOM_PDC
-	bool "QCOM PDC"
+	tristate "QCOM PDC"
 	depends on ARCH_QCOM
 	select IRQ_DOMAIN_HIERARCHY
 	help
diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
index 446603e..d679edb 100644
--- a/drivers/irqchip/irq-gic-v3.c
+++ b/drivers/irqchip/irq-gic-v3.c
@@ -18,6 +18,8 @@
 #include <linux/percpu.h>
 #include <linux/refcount.h>
 #include <linux/slab.h>
+#include <linux/wakeup_reason.h>
+
 
 #include <linux/irqchip.h>
 #include <linux/irqchip/arm-gic-common.h>
@@ -648,6 +650,9 @@ static asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs
 		err = handle_domain_irq(gic_data.domain, irqnr, regs);
 		if (err) {
 			WARN_ONCE(true, "Unexpected interrupt received!\n");
+			log_abnormal_wakeup_reason(
+					"unexpected HW IRQ %u", irqnr);
+
 			gic_deactivate_unhandled(irqnr);
 		}
 		return;
@@ -1722,7 +1727,7 @@ static void __init gic_of_setup_kvm_info(struct device_node *node)
 	gic_set_kvm_info(&gic_v3_kvm_info);
 }
 
-static int __init gic_of_init(struct device_node *node, struct device_node *parent)
+static int __init gicv3_of_init(struct device_node *node, struct device_node *parent)
 {
 	void __iomem *dist_base;
 	struct redist_region *rdist_regs;
@@ -1792,7 +1797,7 @@ static int __init gic_of_init(struct device_node *node, struct device_node *pare
 	return err;
 }
 
-IRQCHIP_DECLARE(gic_v3, "arm,gic-v3", gic_of_init);
+IRQCHIP_DECLARE(gic_v3, "arm,gic-v3", gicv3_of_init);
 
 #ifdef CONFIG_ACPI
 static struct
diff --git a/drivers/irqchip/qcom-pdc.c b/drivers/irqchip/qcom-pdc.c
index faa7d61..bf0b4c7 100644
--- a/drivers/irqchip/qcom-pdc.c
+++ b/drivers/irqchip/qcom-pdc.c
@@ -1,24 +1,30 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/err.h>
 #include <linux/init.h>
+#include <linux/interrupt.h>
 #include <linux/irq.h>
 #include <linux/irqchip.h>
 #include <linux/irqdomain.h>
 #include <linux/io.h>
 #include <linux/kernel.h>
+#include <linux/module.h>
 #include <linux/of.h>
+#include <linux/of_irq.h>
 #include <linux/of_address.h>
 #include <linux/of_device.h>
+#include <linux/soc/qcom/irq.h>
 #include <linux/spinlock.h>
-#include <linux/platform_device.h>
 #include <linux/slab.h>
 #include <linux/types.h>
 
-#define PDC_MAX_IRQS		126
+#include <linux/qcom_scm.h>
+
+#define PDC_MAX_IRQS		168
+#define PDC_MAX_GPIO_IRQS	256
 
 #define CLEAR_INTR(reg, intr)	(reg & ~(1 << intr))
 #define ENABLE_INTR(reg, intr)	(reg | (1 << intr))
@@ -26,16 +32,28 @@
 #define IRQ_ENABLE_BANK		0x10
 #define IRQ_i_CFG		0x110
 
+#define PDC_NO_PARENT_IRQ	~0UL
+
 struct pdc_pin_region {
 	u32 pin_base;
 	u32 parent_base;
 	u32 cnt;
 };
 
+struct spi_cfg_regs {
+	union {
+		u64 start;
+		void __iomem *base;
+	};
+	resource_size_t size;
+	bool scm_io;
+};
+
 static DEFINE_RAW_SPINLOCK(pdc_lock);
 static void __iomem *pdc_base;
 static struct pdc_pin_region *pdc_region;
 static int pdc_region_cnt;
+static struct spi_cfg_regs *spi_cfg;
 
 static void pdc_reg_write(int reg, u32 i, u32 val)
 {
@@ -63,18 +81,109 @@ static void pdc_enable_intr(struct irq_data *d, bool on)
 	raw_spin_unlock(&pdc_lock);
 }
 
+static void qcom_pdc_gic_disable(struct irq_data *d)
+{
+	if (d->hwirq == GPIO_NO_WAKE_IRQ)
+		return;
+
+	pdc_enable_intr(d, false);
+	irq_chip_disable_parent(d);
+}
+
+static int qcom_pdc_gic_get_irqchip_state(struct irq_data *d,
+		enum irqchip_irq_state which, bool *state)
+{
+	if (d->hwirq == GPIO_NO_WAKE_IRQ)
+		return 0;
+
+	return irq_chip_get_parent_state(d, which, state);
+}
+
+static int qcom_pdc_gic_set_irqchip_state(struct irq_data *d,
+		enum irqchip_irq_state which, bool value)
+{
+	if (d->hwirq == GPIO_NO_WAKE_IRQ)
+		return 0;
+
+	return irq_chip_set_parent_state(d, which, value);
+}
+
+static void qcom_pdc_gic_enable(struct irq_data *d)
+{
+	if (d->hwirq == GPIO_NO_WAKE_IRQ)
+		return;
+
+	pdc_enable_intr(d, true);
+	irq_chip_enable_parent(d);
+}
+
 static void qcom_pdc_gic_mask(struct irq_data *d)
 {
-	pdc_enable_intr(d, false);
+	if (d->hwirq == GPIO_NO_WAKE_IRQ)
+		return;
+
 	irq_chip_mask_parent(d);
 }
 
 static void qcom_pdc_gic_unmask(struct irq_data *d)
 {
-	pdc_enable_intr(d, true);
+	if (d->hwirq == GPIO_NO_WAKE_IRQ)
+		return;
+
 	irq_chip_unmask_parent(d);
 }
 
+static u32 __spi_pin_read(unsigned int pin)
+{
+	void __iomem *cfg_reg = spi_cfg->base + pin * 4;
+	u64 scm_cfg_reg = spi_cfg->start + pin * 4;
+
+	if (spi_cfg->scm_io) {
+		unsigned int val;
+
+		qcom_scm_io_readl(scm_cfg_reg, &val);
+		return val;
+	} else {
+		return readl(cfg_reg);
+	}
+}
+
+static void __spi_pin_write(unsigned int pin, unsigned int val)
+{
+	void __iomem *cfg_reg = spi_cfg->base + pin * 4;
+	u64 scm_cfg_reg = spi_cfg->start + pin * 4;
+
+	if (spi_cfg->scm_io)
+		qcom_scm_io_writel(scm_cfg_reg, val);
+	else
+		writel(val, cfg_reg);
+}
+
+static int spi_configure_type(irq_hw_number_t hwirq, unsigned int type)
+{
+	int spi = hwirq - 32;
+	u32 pin = spi / 32;
+	u32 mask = BIT(spi % 32);
+	u32 val;
+	unsigned long flags;
+
+	if (!spi_cfg)
+		return 0;
+
+	if (pin * 4 > spi_cfg->size)
+		return -EFAULT;
+
+	raw_spin_lock_irqsave(&pdc_lock, flags);
+	val = __spi_pin_read(pin);
+	val &= ~mask;
+	if (type & IRQ_TYPE_LEVEL_MASK)
+		val |= mask;
+	__spi_pin_write(pin, val);
+	raw_spin_unlock_irqrestore(&pdc_lock, flags);
+
+	return 0;
+}
+
 /*
  * GIC does not handle falling edge or active low. To allow falling edge and
  * active low interrupts to be handled at GIC, PDC has an inverter that inverts
@@ -112,7 +221,12 @@ enum pdc_irq_config_bits {
 static int qcom_pdc_gic_set_type(struct irq_data *d, unsigned int type)
 {
 	int pin_out = d->hwirq;
+	int parent_hwirq = d->parent_data->hwirq;
 	enum pdc_irq_config_bits pdc_type;
+	int ret;
+
+	if (pin_out == GPIO_NO_WAKE_IRQ)
+		return 0;
 
 	switch (type) {
 	case IRQ_TYPE_EDGE_RISING:
@@ -140,6 +254,11 @@ static int qcom_pdc_gic_set_type(struct irq_data *d, unsigned int type)
 
 	pdc_reg_write(IRQ_i_CFG, pin_out, pdc_type);
 
+	/* Additionally, configure (only) the GPIO in the f/w */
+	ret = spi_configure_type(parent_hwirq, type);
+	if (ret)
+		return ret;
+
 	return irq_chip_set_type_parent(d, type);
 }
 
@@ -148,6 +267,10 @@ static struct irq_chip qcom_pdc_gic_chip = {
 	.irq_eoi		= irq_chip_eoi_parent,
 	.irq_mask		= qcom_pdc_gic_mask,
 	.irq_unmask		= qcom_pdc_gic_unmask,
+	.irq_disable		= qcom_pdc_gic_disable,
+	.irq_enable		= qcom_pdc_gic_enable,
+	.irq_get_irqchip_state	= qcom_pdc_gic_get_irqchip_state,
+	.irq_set_irqchip_state	= qcom_pdc_gic_set_irqchip_state,
 	.irq_retrigger		= irq_chip_retrigger_hierarchy,
 	.irq_set_type		= qcom_pdc_gic_set_type,
 	.flags			= IRQCHIP_MASK_ON_SUSPEND |
@@ -169,8 +292,7 @@ static irq_hw_number_t get_parent_hwirq(int pin)
 			return (region->parent_base + pin - region->pin_base);
 	}
 
-	WARN_ON(1);
-	return ~0UL;
+	return PDC_NO_PARENT_IRQ;
 }
 
 static int qcom_pdc_translate(struct irq_domain *d, struct irq_fwspec *fwspec,
@@ -199,17 +321,17 @@ static int qcom_pdc_alloc(struct irq_domain *domain, unsigned int virq,
 
 	ret = qcom_pdc_translate(domain, fwspec, &hwirq, &type);
 	if (ret)
-		return -EINVAL;
-
-	parent_hwirq = get_parent_hwirq(hwirq);
-	if (parent_hwirq == ~0UL)
-		return -EINVAL;
+		return ret;
 
 	ret  = irq_domain_set_hwirq_and_chip(domain, virq, hwirq,
 					     &qcom_pdc_gic_chip, NULL);
 	if (ret)
 		return ret;
 
+	parent_hwirq = get_parent_hwirq(hwirq);
+	if (parent_hwirq == PDC_NO_PARENT_IRQ)
+		return 0;
+
 	if (type & IRQ_TYPE_EDGE_BOTH)
 		type = IRQ_TYPE_EDGE_RISING;
 
@@ -232,6 +354,60 @@ static const struct irq_domain_ops qcom_pdc_ops = {
 	.free		= irq_domain_free_irqs_common,
 };
 
+static int qcom_pdc_gpio_alloc(struct irq_domain *domain, unsigned int virq,
+			       unsigned int nr_irqs, void *data)
+{
+	struct irq_fwspec *fwspec = data;
+	struct irq_fwspec parent_fwspec;
+	irq_hw_number_t hwirq, parent_hwirq;
+	unsigned int type;
+	int ret;
+
+	ret = qcom_pdc_translate(domain, fwspec, &hwirq, &type);
+	if (ret)
+		return ret;
+
+	ret = irq_domain_set_hwirq_and_chip(domain, virq, hwirq,
+					    &qcom_pdc_gic_chip, NULL);
+	if (ret)
+		return ret;
+
+	if (hwirq == GPIO_NO_WAKE_IRQ)
+		return 0;
+
+	parent_hwirq = get_parent_hwirq(hwirq);
+	if (parent_hwirq == PDC_NO_PARENT_IRQ)
+		return 0;
+
+	if (type & IRQ_TYPE_EDGE_BOTH)
+		type = IRQ_TYPE_EDGE_RISING;
+
+	if (type & IRQ_TYPE_LEVEL_MASK)
+		type = IRQ_TYPE_LEVEL_HIGH;
+
+	parent_fwspec.fwnode      = domain->parent->fwnode;
+	parent_fwspec.param_count = 3;
+	parent_fwspec.param[0]    = 0;
+	parent_fwspec.param[1]    = parent_hwirq;
+	parent_fwspec.param[2]    = type;
+
+	return irq_domain_alloc_irqs_parent(domain, virq, nr_irqs,
+					    &parent_fwspec);
+}
+
+static int qcom_pdc_gpio_domain_select(struct irq_domain *d,
+				       struct irq_fwspec *fwspec,
+				       enum irq_domain_bus_token bus_token)
+{
+	return bus_token == DOMAIN_BUS_WAKEUP;
+}
+
+static const struct irq_domain_ops qcom_pdc_gpio_ops = {
+	.select		= qcom_pdc_gpio_domain_select,
+	.alloc		= qcom_pdc_gpio_alloc,
+	.free		= irq_domain_free_irqs_common,
+};
+
 static int pdc_setup_pin_mapping(struct device_node *np)
 {
 	int ret, n;
@@ -270,7 +446,8 @@ static int pdc_setup_pin_mapping(struct device_node *np)
 
 static int qcom_pdc_init(struct device_node *node, struct device_node *parent)
 {
-	struct irq_domain *parent_domain, *pdc_domain;
+	struct irq_domain *parent_domain, *pdc_domain, *pdc_gpio_domain;
+	struct resource res;
 	int ret;
 
 	pdc_base = of_iomap(node, 0);
@@ -301,12 +478,77 @@ static int qcom_pdc_init(struct device_node *node, struct device_node *parent)
 		goto fail;
 	}
 
+	ret = of_address_to_resource(node, 1, &res);
+	if (!ret) {
+		spi_cfg = kcalloc(1, sizeof(*spi_cfg), GFP_KERNEL);
+		if (!spi_cfg) {
+			ret = -ENOMEM;
+			goto remove;
+		}
+		spi_cfg->scm_io = of_find_property(node,
+						   "qcom,scm-spi-cfg", NULL);
+		spi_cfg->size = resource_size(&res);
+		if (spi_cfg->scm_io) {
+			spi_cfg->start = res.start;
+		} else {
+			spi_cfg->base = ioremap(res.start, spi_cfg->size);
+			if (!spi_cfg->base) {
+				ret = -ENOMEM;
+				goto remove;
+			}
+		}
+	}
+
+	pdc_gpio_domain = irq_domain_create_hierarchy(parent_domain,
+						      IRQ_DOMAIN_FLAG_QCOM_PDC_WAKEUP,
+						      PDC_MAX_GPIO_IRQS,
+						      of_fwnode_handle(node),
+						      &qcom_pdc_gpio_ops, NULL);
+	if (!pdc_gpio_domain) {
+		pr_err("%pOF: PDC domain add failed for GPIO domain\n", node);
+		ret = -ENOMEM;
+		goto remove;
+	}
+
+	irq_domain_update_bus_token(pdc_gpio_domain, DOMAIN_BUS_WAKEUP);
+
 	return 0;
 
+remove:
+	irq_domain_remove(pdc_domain);
+	kfree(spi_cfg);
 fail:
 	kfree(pdc_region);
 	iounmap(pdc_base);
 	return ret;
 }
 
+
+#ifdef MODULE
+static int qcom_pdc_probe(struct platform_device *pdev)
+{
+	struct device_node *np = pdev->dev.of_node;
+	struct device_node *parent = of_irq_find_parent(np);
+	return qcom_pdc_init(np, parent);
+}
+
+static const struct of_device_id qcom_pdc_match_table[] = {
+	{ .compatible = "qcom,sdm845-pdc" },
+	{}
+};
+MODULE_DEVICE_TABLE(of, qcom_pdc_match_table);
+
+static struct platform_driver qcom_pdc_driver = {
+	.probe = qcom_pdc_probe,
+	.driver = {
+		.name = "qcom-pdc",
+		.of_match_table = qcom_pdc_match_table,
+	},
+};
+module_platform_driver(qcom_pdc_driver);
+#else
 IRQCHIP_DECLARE(pdc_sdm845, "qcom,sdm845-pdc", qcom_pdc_init);
+#endif
+
+MODULE_DESCRIPTION("Qualcomm Technologies, Inc. Power Domain Controller");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/md/Kconfig b/drivers/md/Kconfig
index 7dd6e98..0f691ad 100644
--- a/drivers/md/Kconfig
+++ b/drivers/md/Kconfig
@@ -285,6 +285,27 @@
 
 	  If unsure, say N.
 
+config DM_DEFAULT_KEY
+	tristate "Default-key target support"
+	depends on BLK_DEV_DM
+	depends on BLK_INLINE_ENCRYPTION
+	# dm-default-key doesn't require -o inlinecrypt, but it does currently
+	# rely on the inline encryption hooks being built into the kernel.
+	depends on FS_ENCRYPTION_INLINE_CRYPT
+	help
+	  This device-mapper target allows you to create a device that
+	  assigns a default encryption key to bios that aren't for the
+	  contents of an encrypted file.
+
+	  This ensures that all blocks on-disk will be encrypted with
+	  some key, without the performance hit of file contents being
+	  encrypted twice when fscrypt (File-Based Encryption) is used.
+
+	  It is only appropriate to use dm-default-key when key
+	  configuration is tightly controlled, like it is in Android,
+	  such that all fscrypt keys are at least as hard to compromise
+	  as the default key.
+
 config DM_SNAPSHOT
        tristate "Snapshot target"
        depends on BLK_DEV_DM
@@ -517,6 +538,17 @@
 
 	  If unsure, say N.
 
+config DM_VERITY_AVB
+	tristate "Support AVB specific verity error behavior"
+	depends on DM_VERITY
+	---help---
+	  Enables Android Verified Boot platform-specific error
+	  behavior. In particular, it will modify the vbmeta partition
+	  specified on the kernel command-line when non-transient error
+	  occurs (followed by a panic).
+
+	  If unsure, say N.
+
 config DM_VERITY_FEC
 	bool "Verity forward error correction support"
 	depends on DM_VERITY
@@ -598,4 +630,30 @@
 
 	  If unsure, say N.
 
+config DM_BOW
+	tristate "Backup block device"
+	depends on BLK_DEV_DM
+	select DM_BUFIO
+	---help---
+	  This device-mapper target takes a device and keeps a log of all
+	  changes using free blocks identified by issuing a trim command.
+	  This can then be restored by running a command line utility,
+	  or committed by simply replacing the target.
+
+	  If unsure, say N.
+
+config DM_USER
+	tristate "Block device in userspace"
+	depends on BLK_DEV_DM
+	default y
+	help
+	  This device-mapper target allows a userspace daemon to provide the
+	  contents of a block device.  See
+	  <file:Documentation/block/dm-user.rst> for more information.
+
+	  To compile this code as a module, choose M here: the module will be
+	  called dm-user.
+
+	  If unsure, say N.
+
 endif # MD
diff --git a/drivers/md/Makefile b/drivers/md/Makefile
index d91a7edc..0a0a24e 100644
--- a/drivers/md/Makefile
+++ b/drivers/md/Makefile
@@ -48,6 +48,7 @@
 obj-$(CONFIG_DM_BUFIO)		+= dm-bufio.o
 obj-$(CONFIG_DM_BIO_PRISON)	+= dm-bio-prison.o
 obj-$(CONFIG_DM_CRYPT)		+= dm-crypt.o
+obj-$(CONFIG_DM_DEFAULT_KEY)	+= dm-default-key.o
 obj-$(CONFIG_DM_DELAY)		+= dm-delay.o
 obj-$(CONFIG_DM_DUST)		+= dm-dust.o
 obj-$(CONFIG_DM_FLAKEY)		+= dm-flakey.o
@@ -71,6 +72,8 @@
 obj-$(CONFIG_DM_INTEGRITY)	+= dm-integrity.o
 obj-$(CONFIG_DM_ZONED)		+= dm-zoned.o
 obj-$(CONFIG_DM_WRITECACHE)	+= dm-writecache.o
+obj-$(CONFIG_DM_BOW)		+= dm-bow.o
+obj-$(CONFIG_DM_USER)		+= dm-user.o
 
 ifeq ($(CONFIG_DM_INIT),y)
 dm-mod-objs			+= dm-init.o
@@ -80,6 +83,10 @@
 dm-mod-objs			+= dm-uevent.o
 endif
 
+ifeq ($(CONFIG_DM_VERITY_AVB),y)
+dm-verity-objs			+= dm-verity-avb.o
+endif
+
 ifeq ($(CONFIG_DM_VERITY_FEC),y)
 dm-verity-objs			+= dm-verity-fec.o
 endif
diff --git a/drivers/md/dm-bow.c b/drivers/md/dm-bow.c
new file mode 100644
index 0000000..cac4459
--- /dev/null
+++ b/drivers/md/dm-bow.c
@@ -0,0 +1,1297 @@
+/*
+ * Copyright (C) 2018 Google Limited.
+ *
+ * This file is released under the GPL.
+ */
+
+#include "dm.h"
+#include "dm-core.h"
+
+#include <linux/crc32.h>
+#include <linux/dm-bufio.h>
+#include <linux/module.h>
+
+#define DM_MSG_PREFIX "bow"
+
+struct log_entry {
+	u64 source;
+	u64 dest;
+	u32 size;
+	u32 checksum;
+} __packed;
+
+struct log_sector {
+	u32 magic;
+	u16 header_version;
+	u16 header_size;
+	u32 block_size;
+	u32 count;
+	u32 sequence;
+	sector_t sector0;
+	struct log_entry entries[];
+} __packed;
+
+/*
+ * MAGIC is BOW in ascii
+ */
+#define MAGIC 0x00574f42
+#define HEADER_VERSION 0x0100
+
+/*
+ * A sorted set of ranges representing the state of the data on the device.
+ * Use an rb_tree for fast lookup of a given sector
+ * Consecutive ranges are always of different type - operations on this
+ * set must merge matching consecutive ranges.
+ *
+ * Top range is always of type TOP
+ */
+struct bow_range {
+	struct rb_node		node;
+	sector_t		sector;
+	enum {
+		INVALID,	/* Type not set */
+		SECTOR0,	/* First sector - holds log record */
+		SECTOR0_CURRENT,/* Live contents of sector0 */
+		UNCHANGED,	/* Original contents */
+		TRIMMED,	/* Range has been trimmed */
+		CHANGED,	/* Range has been changed */
+		BACKUP,		/* Range is being used as a backup */
+		TOP,		/* Final range - sector is size of device */
+	} type;
+	struct list_head	trimmed_list; /* list of TRIMMED ranges */
+};
+
+static const char * const readable_type[] = {
+	"Invalid",
+	"Sector0",
+	"Sector0_current",
+	"Unchanged",
+	"Free",
+	"Changed",
+	"Backup",
+	"Top",
+};
+
+enum state {
+	TRIM,
+	CHECKPOINT,
+	COMMITTED,
+};
+
+struct bow_context {
+	struct dm_dev *dev;
+	u32 block_size;
+	u32 block_shift;
+	struct workqueue_struct *workqueue;
+	struct dm_bufio_client *bufio;
+	struct mutex ranges_lock; /* Hold to access this struct and/or ranges */
+	struct rb_root ranges;
+	struct dm_kobject_holder kobj_holder;	/* for sysfs attributes */
+	atomic_t state; /* One of the enum state values above */
+	u64 trims_total;
+	struct log_sector *log_sector;
+	struct list_head trimmed_list;
+	bool forward_trims;
+};
+
+sector_t range_top(struct bow_range *br)
+{
+	return container_of(rb_next(&br->node), struct bow_range, node)
+		->sector;
+}
+
+u64 range_size(struct bow_range *br)
+{
+	return (range_top(br) - br->sector) * SECTOR_SIZE;
+}
+
+static sector_t bvec_top(struct bvec_iter *bi_iter)
+{
+	return bi_iter->bi_sector + bi_iter->bi_size / SECTOR_SIZE;
+}
+
+/*
+ * Find the first range that overlaps with bi_iter
+ * bi_iter is set to the size of the overlapping sub-range
+ */
+static struct bow_range *find_first_overlapping_range(struct rb_root *ranges,
+						      struct bvec_iter *bi_iter)
+{
+	struct rb_node *node = ranges->rb_node;
+	struct bow_range *br;
+
+	while (node) {
+		br = container_of(node, struct bow_range, node);
+
+		if (br->sector <= bi_iter->bi_sector
+		    && bi_iter->bi_sector < range_top(br))
+			break;
+
+		if (bi_iter->bi_sector < br->sector)
+			node = node->rb_left;
+		else
+			node = node->rb_right;
+	}
+
+	WARN_ON(!node);
+	if (!node)
+		return NULL;
+
+	if (range_top(br) - bi_iter->bi_sector
+	    < bi_iter->bi_size >> SECTOR_SHIFT)
+		bi_iter->bi_size = (range_top(br) - bi_iter->bi_sector)
+			<< SECTOR_SHIFT;
+
+	return br;
+}
+
+void add_before(struct rb_root *ranges, struct bow_range *new_br,
+		struct bow_range *existing)
+{
+	struct rb_node *parent = &(existing->node);
+	struct rb_node **link = &(parent->rb_left);
+
+	while (*link) {
+		parent = *link;
+		link = &((*link)->rb_right);
+	}
+
+	rb_link_node(&new_br->node, parent, link);
+	rb_insert_color(&new_br->node, ranges);
+}
+
+/*
+ * Given a range br returned by find_first_overlapping_range, split br into a
+ * leading range, a range matching the bi_iter and a trailing range.
+ * Leading and trailing may end up size 0 and will then be deleted. The
+ * new range matching the bi_iter is then returned and should have its type
+ * and type specific fields populated.
+ * If bi_iter runs off the end of the range, bi_iter is truncated accordingly
+ */
+static int split_range(struct bow_context *bc, struct bow_range **br,
+		       struct bvec_iter *bi_iter)
+{
+	struct bow_range *new_br;
+
+	if (bi_iter->bi_sector < (*br)->sector) {
+		WARN_ON(true);
+		return BLK_STS_IOERR;
+	}
+
+	if (bi_iter->bi_sector > (*br)->sector) {
+		struct bow_range *leading_br =
+			kzalloc(sizeof(*leading_br), GFP_KERNEL);
+
+		if (!leading_br)
+			return BLK_STS_RESOURCE;
+
+		*leading_br = **br;
+		if (leading_br->type == TRIMMED)
+			list_add(&leading_br->trimmed_list, &bc->trimmed_list);
+
+		add_before(&bc->ranges, leading_br, *br);
+		(*br)->sector = bi_iter->bi_sector;
+	}
+
+	if (bvec_top(bi_iter) >= range_top(*br)) {
+		bi_iter->bi_size = (range_top(*br) - (*br)->sector)
+					* SECTOR_SIZE;
+		return BLK_STS_OK;
+	}
+
+	/* new_br will be the beginning, existing br will be the tail */
+	new_br = kzalloc(sizeof(*new_br), GFP_KERNEL);
+	if (!new_br)
+		return BLK_STS_RESOURCE;
+
+	new_br->sector = (*br)->sector;
+	(*br)->sector = bvec_top(bi_iter);
+	add_before(&bc->ranges, new_br, *br);
+	*br = new_br;
+
+	return BLK_STS_OK;
+}
+
+/*
+ * Sets type of a range. May merge range into surrounding ranges
+ * Since br may be invalidated, always sets br to NULL to prevent
+ * usage after this is called
+ */
+static void set_type(struct bow_context *bc, struct bow_range **br, int type)
+{
+	struct bow_range *prev = container_of(rb_prev(&(*br)->node),
+						      struct bow_range, node);
+	struct bow_range *next = container_of(rb_next(&(*br)->node),
+						      struct bow_range, node);
+
+	if ((*br)->type == TRIMMED) {
+		bc->trims_total -= range_size(*br);
+		list_del(&(*br)->trimmed_list);
+	}
+
+	if (type == TRIMMED) {
+		bc->trims_total += range_size(*br);
+		list_add(&(*br)->trimmed_list, &bc->trimmed_list);
+	}
+
+	(*br)->type = type;
+
+	if (next->type == type) {
+		if (type == TRIMMED)
+			list_del(&next->trimmed_list);
+		rb_erase(&next->node, &bc->ranges);
+		kfree(next);
+	}
+
+	if (prev->type == type) {
+		if (type == TRIMMED)
+			list_del(&(*br)->trimmed_list);
+		rb_erase(&(*br)->node, &bc->ranges);
+		kfree(*br);
+	}
+
+	*br = NULL;
+}
+
+static struct bow_range *find_free_range(struct bow_context *bc)
+{
+	if (list_empty(&bc->trimmed_list)) {
+		DMERR("Unable to find free space to back up to");
+		return NULL;
+	}
+
+	return list_first_entry(&bc->trimmed_list, struct bow_range,
+				trimmed_list);
+}
+
+static sector_t sector_to_page(struct bow_context const *bc, sector_t sector)
+{
+	WARN_ON((sector & (((sector_t)1 << (bc->block_shift - SECTOR_SHIFT)) - 1))
+		!= 0);
+	return sector >> (bc->block_shift - SECTOR_SHIFT);
+}
+
+static int copy_data(struct bow_context const *bc,
+		     struct bow_range *source, struct bow_range *dest,
+		     u32 *checksum)
+{
+	int i;
+
+	if (range_size(source) != range_size(dest)) {
+		WARN_ON(1);
+		return BLK_STS_IOERR;
+	}
+
+	if (checksum)
+		*checksum = sector_to_page(bc, source->sector);
+
+	for (i = 0; i < range_size(source) >> bc->block_shift; ++i) {
+		struct dm_buffer *read_buffer, *write_buffer;
+		u8 *read, *write;
+		sector_t page = sector_to_page(bc, source->sector) + i;
+
+		read = dm_bufio_read(bc->bufio, page, &read_buffer);
+		if (IS_ERR(read)) {
+			DMERR("Cannot read page %llu",
+			      (unsigned long long)page);
+			return PTR_ERR(read);
+		}
+
+		if (checksum)
+			*checksum = crc32(*checksum, read, bc->block_size);
+
+		write = dm_bufio_new(bc->bufio,
+				     sector_to_page(bc, dest->sector) + i,
+				     &write_buffer);
+		if (IS_ERR(write)) {
+			DMERR("Cannot write sector");
+			dm_bufio_release(read_buffer);
+			return PTR_ERR(write);
+		}
+
+		memcpy(write, read, bc->block_size);
+
+		dm_bufio_mark_buffer_dirty(write_buffer);
+		dm_bufio_release(write_buffer);
+		dm_bufio_release(read_buffer);
+	}
+
+	dm_bufio_write_dirty_buffers(bc->bufio);
+	return BLK_STS_OK;
+}
+
+/****** logging functions ******/
+
+static int add_log_entry(struct bow_context *bc, sector_t source, sector_t dest,
+			 unsigned int size, u32 checksum);
+
+static int backup_log_sector(struct bow_context *bc)
+{
+	struct bow_range *first_br, *free_br;
+	struct bvec_iter bi_iter;
+	u32 checksum = 0;
+	int ret;
+
+	first_br = container_of(rb_first(&bc->ranges), struct bow_range, node);
+
+	if (first_br->type != SECTOR0) {
+		WARN_ON(1);
+		return BLK_STS_IOERR;
+	}
+
+	if (range_size(first_br) != bc->block_size) {
+		WARN_ON(1);
+		return BLK_STS_IOERR;
+	}
+
+	free_br = find_free_range(bc);
+	/* No space left - return this error to userspace */
+	if (!free_br)
+		return BLK_STS_NOSPC;
+	bi_iter.bi_sector = free_br->sector;
+	bi_iter.bi_size = bc->block_size;
+	ret = split_range(bc, &free_br, &bi_iter);
+	if (ret)
+		return ret;
+	if (bi_iter.bi_size != bc->block_size) {
+		WARN_ON(1);
+		return BLK_STS_IOERR;
+	}
+
+	ret = copy_data(bc, first_br, free_br, &checksum);
+	if (ret)
+		return ret;
+
+	bc->log_sector->count = 0;
+	bc->log_sector->sequence++;
+	ret = add_log_entry(bc, first_br->sector, free_br->sector,
+			    range_size(first_br), checksum);
+	if (ret)
+		return ret;
+
+	set_type(bc, &free_br, BACKUP);
+	return BLK_STS_OK;
+}
+
+static int add_log_entry(struct bow_context *bc, sector_t source, sector_t dest,
+			 unsigned int size, u32 checksum)
+{
+	struct dm_buffer *sector_buffer;
+	u8 *sector;
+
+	if (sizeof(struct log_sector)
+	    + sizeof(struct log_entry) * (bc->log_sector->count + 1)
+		> bc->block_size) {
+		int ret = backup_log_sector(bc);
+
+		if (ret)
+			return ret;
+	}
+
+	sector = dm_bufio_new(bc->bufio, 0, &sector_buffer);
+	if (IS_ERR(sector)) {
+		DMERR("Cannot write boot sector");
+		dm_bufio_release(sector_buffer);
+		return BLK_STS_NOSPC;
+	}
+
+	bc->log_sector->entries[bc->log_sector->count].source = source;
+	bc->log_sector->entries[bc->log_sector->count].dest = dest;
+	bc->log_sector->entries[bc->log_sector->count].size = size;
+	bc->log_sector->entries[bc->log_sector->count].checksum = checksum;
+	bc->log_sector->count++;
+
+	memcpy(sector, bc->log_sector, bc->block_size);
+	dm_bufio_mark_buffer_dirty(sector_buffer);
+	dm_bufio_release(sector_buffer);
+	dm_bufio_write_dirty_buffers(bc->bufio);
+	return BLK_STS_OK;
+}
+
+static int prepare_log(struct bow_context *bc)
+{
+	struct bow_range *free_br, *first_br;
+	struct bvec_iter bi_iter;
+	u32 checksum = 0;
+	int ret;
+
+	/* Carve out first sector as log sector */
+	first_br = container_of(rb_first(&bc->ranges), struct bow_range, node);
+	if (first_br->type != UNCHANGED) {
+		WARN_ON(1);
+		return BLK_STS_IOERR;
+	}
+
+	if (range_size(first_br) < bc->block_size) {
+		WARN_ON(1);
+		return BLK_STS_IOERR;
+	}
+	bi_iter.bi_sector = 0;
+	bi_iter.bi_size = bc->block_size;
+	ret = split_range(bc, &first_br, &bi_iter);
+	if (ret)
+		return ret;
+	first_br->type = SECTOR0;
+	if (range_size(first_br) != bc->block_size) {
+		WARN_ON(1);
+		return BLK_STS_IOERR;
+	}
+
+	/* Find free sector for active sector0 reads/writes */
+	free_br = find_free_range(bc);
+	if (!free_br)
+		return BLK_STS_NOSPC;
+	bi_iter.bi_sector = free_br->sector;
+	bi_iter.bi_size = bc->block_size;
+	ret = split_range(bc, &free_br, &bi_iter);
+	if (ret)
+		return ret;
+	free_br->type = SECTOR0_CURRENT;
+
+	/* Copy data */
+	ret = copy_data(bc, first_br, free_br, NULL);
+	if (ret)
+		return ret;
+
+	bc->log_sector->sector0 = free_br->sector;
+
+	/* Find free sector to back up original sector zero */
+	free_br = find_free_range(bc);
+	if (!free_br)
+		return BLK_STS_NOSPC;
+	bi_iter.bi_sector = free_br->sector;
+	bi_iter.bi_size = bc->block_size;
+	ret = split_range(bc, &free_br, &bi_iter);
+	if (ret)
+		return ret;
+
+	/* Back up */
+	ret = copy_data(bc, first_br, free_br, &checksum);
+	if (ret)
+		return ret;
+
+	/*
+	 * Set up our replacement boot sector - it will get written when we
+	 * add the first log entry, which we do immediately
+	 */
+	bc->log_sector->magic = MAGIC;
+	bc->log_sector->header_version = HEADER_VERSION;
+	bc->log_sector->header_size = sizeof(*bc->log_sector);
+	bc->log_sector->block_size = bc->block_size;
+	bc->log_sector->count = 0;
+	bc->log_sector->sequence = 0;
+
+	/* Add log entry */
+	ret = add_log_entry(bc, first_br->sector, free_br->sector,
+			    range_size(first_br), checksum);
+	if (ret)
+		return ret;
+
+	set_type(bc, &free_br, BACKUP);
+	return BLK_STS_OK;
+}
+
+static struct bow_range *find_sector0_current(struct bow_context *bc)
+{
+	struct bvec_iter bi_iter;
+
+	bi_iter.bi_sector = bc->log_sector->sector0;
+	bi_iter.bi_size = bc->block_size;
+	return find_first_overlapping_range(&bc->ranges, &bi_iter);
+}
+
+/****** sysfs interface functions ******/
+
+static ssize_t state_show(struct kobject *kobj, struct kobj_attribute *attr,
+			  char *buf)
+{
+	struct bow_context *bc = container_of(kobj, struct bow_context,
+					      kobj_holder.kobj);
+
+	return scnprintf(buf, PAGE_SIZE, "%d\n", atomic_read(&bc->state));
+}
+
+static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr,
+			   const char *buf, size_t count)
+{
+	struct bow_context *bc = container_of(kobj, struct bow_context,
+					      kobj_holder.kobj);
+	enum state state, original_state;
+	int ret;
+
+	state = buf[0] - '0';
+	if (state < TRIM || state > COMMITTED) {
+		DMERR("State value %d out of range", state);
+		return -EINVAL;
+	}
+
+	mutex_lock(&bc->ranges_lock);
+	original_state = atomic_read(&bc->state);
+	if (state != original_state + 1) {
+		DMERR("Invalid state change from %d to %d",
+		      original_state, state);
+		ret = -EINVAL;
+		goto bad;
+	}
+
+	DMINFO("Switching to state %s", state == CHECKPOINT ? "Checkpoint"
+	       : state == COMMITTED ? "Committed" : "Unknown");
+
+	if (state == CHECKPOINT) {
+		ret = prepare_log(bc);
+		if (ret) {
+			DMERR("Failed to switch to checkpoint state");
+			goto bad;
+		}
+	} else if (state == COMMITTED) {
+		struct bow_range *br = find_sector0_current(bc);
+		struct bow_range *sector0_br =
+			container_of(rb_first(&bc->ranges), struct bow_range,
+				     node);
+
+		ret = copy_data(bc, br, sector0_br, 0);
+		if (ret) {
+			DMERR("Failed to switch to committed state");
+			goto bad;
+		}
+	}
+	atomic_inc(&bc->state);
+	ret = count;
+
+bad:
+	mutex_unlock(&bc->ranges_lock);
+	return ret;
+}
+
+static ssize_t free_show(struct kobject *kobj, struct kobj_attribute *attr,
+			  char *buf)
+{
+	struct bow_context *bc = container_of(kobj, struct bow_context,
+					      kobj_holder.kobj);
+	u64 trims_total;
+
+	mutex_lock(&bc->ranges_lock);
+	trims_total = bc->trims_total;
+	mutex_unlock(&bc->ranges_lock);
+
+	return scnprintf(buf, PAGE_SIZE, "%llu\n", trims_total);
+}
+
+static struct kobj_attribute attr_state = __ATTR_RW(state);
+static struct kobj_attribute attr_free = __ATTR_RO(free);
+
+static struct attribute *bow_attrs[] = {
+	&attr_state.attr,
+	&attr_free.attr,
+	NULL
+};
+
+static struct kobj_type bow_ktype = {
+	.sysfs_ops = &kobj_sysfs_ops,
+	.default_attrs = bow_attrs,
+	.release = dm_kobject_release
+};
+
+/****** constructor/destructor ******/
+
+static void dm_bow_dtr(struct dm_target *ti)
+{
+	struct bow_context *bc = (struct bow_context *) ti->private;
+	struct kobject *kobj;
+
+	while (rb_first(&bc->ranges)) {
+		struct bow_range *br = container_of(rb_first(&bc->ranges),
+						    struct bow_range, node);
+
+		rb_erase(&br->node, &bc->ranges);
+		kfree(br);
+	}
+	if (bc->workqueue)
+		destroy_workqueue(bc->workqueue);
+	if (bc->bufio)
+		dm_bufio_client_destroy(bc->bufio);
+
+	kobj = &bc->kobj_holder.kobj;
+	if (kobj->state_initialized) {
+		kobject_put(kobj);
+		wait_for_completion(dm_get_completion_from_kobject(kobj));
+	}
+
+	kfree(bc->log_sector);
+	kfree(bc);
+}
+
+static void dm_bow_io_hints(struct dm_target *ti, struct queue_limits *limits)
+{
+	struct bow_context *bc = ti->private;
+	const unsigned int block_size = bc->block_size;
+
+	limits->logical_block_size =
+		max_t(unsigned short, limits->logical_block_size, block_size);
+	limits->physical_block_size =
+		max_t(unsigned int, limits->physical_block_size, block_size);
+	limits->io_min = max_t(unsigned int, limits->io_min, block_size);
+
+	if (limits->max_discard_sectors == 0) {
+		limits->discard_granularity = 1 << 12;
+		limits->max_hw_discard_sectors = 1 << 15;
+		limits->max_discard_sectors = 1 << 15;
+		bc->forward_trims = false;
+	} else {
+		limits->discard_granularity = 1 << 12;
+		bc->forward_trims = true;
+	}
+}
+
+static int dm_bow_ctr_optional(struct dm_target *ti, unsigned int argc,
+		char **argv)
+{
+	struct bow_context *bc = ti->private;
+	struct dm_arg_set as;
+	static const struct dm_arg _args[] = {
+		{0, 1, "Invalid number of feature args"},
+	};
+	unsigned int opt_params;
+	const char *opt_string;
+	int err;
+	char dummy;
+
+	as.argc = argc;
+	as.argv = argv;
+
+	err = dm_read_arg_group(_args, &as, &opt_params, &ti->error);
+	if (err)
+		return err;
+
+	while (opt_params--) {
+		opt_string = dm_shift_arg(&as);
+		if (!opt_string) {
+			ti->error = "Not enough feature arguments";
+			return -EINVAL;
+		}
+
+		if (sscanf(opt_string, "block_size:%u%c",
+					&bc->block_size, &dummy) == 1) {
+			if (bc->block_size < SECTOR_SIZE ||
+			    bc->block_size > 4096 ||
+			    !is_power_of_2(bc->block_size)) {
+				ti->error = "Invalid block_size";
+				return -EINVAL;
+			}
+		} else {
+			ti->error = "Invalid feature arguments";
+			return -EINVAL;
+		}
+	}
+
+	return 0;
+}
+
+static int dm_bow_ctr(struct dm_target *ti, unsigned int argc, char **argv)
+{
+	struct bow_context *bc;
+	struct bow_range *br;
+	int ret;
+	struct mapped_device *md = dm_table_get_md(ti->table);
+
+	if (argc < 1) {
+		ti->error = "Invalid argument count";
+		return -EINVAL;
+	}
+
+	bc = kzalloc(sizeof(*bc), GFP_KERNEL);
+	if (!bc) {
+		ti->error = "Cannot allocate bow context";
+		return -ENOMEM;
+	}
+
+	ti->num_flush_bios = 1;
+	ti->num_discard_bios = 1;
+	ti->num_write_same_bios = 1;
+	ti->private = bc;
+
+	ret = dm_get_device(ti, argv[0], dm_table_get_mode(ti->table),
+			    &bc->dev);
+	if (ret) {
+		ti->error = "Device lookup failed";
+		goto bad;
+	}
+
+	bc->block_size = bc->dev->bdev->bd_queue->limits.logical_block_size;
+	if (argc > 1) {
+		ret = dm_bow_ctr_optional(ti, argc - 1, &argv[1]);
+		if (ret)
+			goto bad;
+	}
+
+	bc->block_shift = ilog2(bc->block_size);
+	bc->log_sector = kzalloc(bc->block_size, GFP_KERNEL);
+	if (!bc->log_sector) {
+		ti->error = "Cannot allocate log sector";
+		goto bad;
+	}
+
+	init_completion(&bc->kobj_holder.completion);
+	ret = kobject_init_and_add(&bc->kobj_holder.kobj, &bow_ktype,
+				   &disk_to_dev(dm_disk(md))->kobj, "%s",
+				   "bow");
+	if (ret) {
+		ti->error = "Cannot create sysfs node";
+		goto bad;
+	}
+
+	mutex_init(&bc->ranges_lock);
+	bc->ranges = RB_ROOT;
+	bc->bufio = dm_bufio_client_create(bc->dev->bdev, bc->block_size, 1, 0,
+					   NULL, NULL);
+	if (IS_ERR(bc->bufio)) {
+		ti->error = "Cannot initialize dm-bufio";
+		ret = PTR_ERR(bc->bufio);
+		bc->bufio = NULL;
+		goto bad;
+	}
+
+	bc->workqueue = alloc_workqueue("dm-bow",
+					WQ_CPU_INTENSIVE | WQ_MEM_RECLAIM
+					| WQ_UNBOUND, num_online_cpus());
+	if (!bc->workqueue) {
+		ti->error = "Cannot allocate workqueue";
+		ret = -ENOMEM;
+		goto bad;
+	}
+
+	INIT_LIST_HEAD(&bc->trimmed_list);
+
+	br = kzalloc(sizeof(*br), GFP_KERNEL);
+	if (!br) {
+		ti->error = "Cannot allocate ranges";
+		ret = -ENOMEM;
+		goto bad;
+	}
+
+	br->sector = ti->len;
+	br->type = TOP;
+	rb_link_node(&br->node, NULL, &bc->ranges.rb_node);
+	rb_insert_color(&br->node, &bc->ranges);
+
+	br = kzalloc(sizeof(*br), GFP_KERNEL);
+	if (!br) {
+		ti->error = "Cannot allocate ranges";
+		ret = -ENOMEM;
+		goto bad;
+	}
+
+	br->sector = 0;
+	br->type = UNCHANGED;
+	rb_link_node(&br->node, bc->ranges.rb_node,
+		     &bc->ranges.rb_node->rb_left);
+	rb_insert_color(&br->node, &bc->ranges);
+
+	ti->discards_supported = true;
+
+	return 0;
+
+bad:
+	dm_bow_dtr(ti);
+	return ret;
+}
+
+/****** Handle writes ******/
+
+static int prepare_unchanged_range(struct bow_context *bc, struct bow_range *br,
+				   struct bvec_iter *bi_iter,
+				   bool record_checksum)
+{
+	struct bow_range *backup_br;
+	struct bvec_iter backup_bi;
+	sector_t log_source, log_dest;
+	unsigned int log_size;
+	u32 checksum = 0;
+	int ret;
+	int original_type;
+	sector_t sector0;
+
+	/* Find a free range */
+	backup_br = find_free_range(bc);
+	if (!backup_br)
+		return BLK_STS_NOSPC;
+
+	/* Carve out a backup range. This may be smaller than the br given */
+	backup_bi.bi_sector = backup_br->sector;
+	backup_bi.bi_size = min(range_size(backup_br), (u64) bi_iter->bi_size);
+	ret = split_range(bc, &backup_br, &backup_bi);
+	if (ret)
+		return ret;
+
+	/*
+	 * Carve out a changed range. This will not be smaller than the backup
+	 * br since the backup br is smaller than the source range and iterator
+	 */
+	bi_iter->bi_size = backup_bi.bi_size;
+	ret = split_range(bc, &br, bi_iter);
+	if (ret)
+		return ret;
+	if (range_size(br) != range_size(backup_br)) {
+		WARN_ON(1);
+		return BLK_STS_IOERR;
+	}
+
+
+	/* Copy data over */
+	ret = copy_data(bc, br, backup_br, record_checksum ? &checksum : NULL);
+	if (ret)
+		return ret;
+
+	/* Add an entry to the log */
+	log_source = br->sector;
+	log_dest = backup_br->sector;
+	log_size = range_size(br);
+
+	/*
+	 * Set the types. Note that since set_type also amalgamates ranges
+	 * we have to set both sectors to their final type before calling
+	 * set_type on either
+	 */
+	original_type = br->type;
+	sector0 = backup_br->sector;
+	bc->trims_total -= range_size(backup_br);
+	if (backup_br->type == TRIMMED)
+		list_del(&backup_br->trimmed_list);
+	backup_br->type = br->type == SECTOR0_CURRENT ? SECTOR0_CURRENT
+						      : BACKUP;
+	br->type = CHANGED;
+	set_type(bc, &backup_br, backup_br->type);
+
+	/*
+	 * Add the log entry after marking the backup sector, since adding a log
+	 * can cause another backup
+	 */
+	ret = add_log_entry(bc, log_source, log_dest, log_size, checksum);
+	if (ret) {
+		br->type = original_type;
+		return ret;
+	}
+
+	/* Now it is safe to mark this backup successful */
+	if (original_type == SECTOR0_CURRENT)
+		bc->log_sector->sector0 = sector0;
+
+	set_type(bc, &br, br->type);
+	return ret;
+}
+
+static int prepare_free_range(struct bow_context *bc, struct bow_range *br,
+			      struct bvec_iter *bi_iter)
+{
+	int ret;
+
+	ret = split_range(bc, &br, bi_iter);
+	if (ret)
+		return ret;
+	set_type(bc, &br, CHANGED);
+	return BLK_STS_OK;
+}
+
+static int prepare_changed_range(struct bow_context *bc, struct bow_range *br,
+				 struct bvec_iter *bi_iter)
+{
+	/* Nothing to do ... */
+	return BLK_STS_OK;
+}
+
+static int prepare_one_range(struct bow_context *bc,
+			     struct bvec_iter *bi_iter)
+{
+	struct bow_range *br = find_first_overlapping_range(&bc->ranges,
+							    bi_iter);
+	switch (br->type) {
+	case CHANGED:
+		return prepare_changed_range(bc, br, bi_iter);
+
+	case TRIMMED:
+		return prepare_free_range(bc, br, bi_iter);
+
+	case UNCHANGED:
+	case BACKUP:
+		return prepare_unchanged_range(bc, br, bi_iter, true);
+
+	/*
+	 * We cannot track the checksum for the active sector0, since it
+	 * may change at any point.
+	 */
+	case SECTOR0_CURRENT:
+		return prepare_unchanged_range(bc, br, bi_iter, false);
+
+	case SECTOR0:	/* Handled in the dm_bow_map */
+	case TOP:	/* Illegal - top is off the end of the device */
+	default:
+		WARN_ON(1);
+		return BLK_STS_IOERR;
+	}
+}
+
+struct write_work {
+	struct work_struct work;
+	struct bow_context *bc;
+	struct bio *bio;
+};
+
+static void bow_write(struct work_struct *work)
+{
+	struct write_work *ww = container_of(work, struct write_work, work);
+	struct bow_context *bc = ww->bc;
+	struct bio *bio = ww->bio;
+	struct bvec_iter bi_iter = bio->bi_iter;
+	int ret = BLK_STS_OK;
+
+	kfree(ww);
+
+	mutex_lock(&bc->ranges_lock);
+	do {
+		ret = prepare_one_range(bc, &bi_iter);
+		bi_iter.bi_sector += bi_iter.bi_size / SECTOR_SIZE;
+		bi_iter.bi_size = bio->bi_iter.bi_size
+			- (bi_iter.bi_sector - bio->bi_iter.bi_sector)
+			  * SECTOR_SIZE;
+	} while (!ret && bi_iter.bi_size);
+
+	mutex_unlock(&bc->ranges_lock);
+
+	if (!ret) {
+		bio_set_dev(bio, bc->dev->bdev);
+		submit_bio(bio);
+	} else {
+		DMERR("Write failure with error %d", -ret);
+		bio->bi_status = ret;
+		bio_endio(bio);
+	}
+}
+
+static int queue_write(struct bow_context *bc, struct bio *bio)
+{
+	struct write_work *ww = kmalloc(sizeof(*ww), GFP_NOIO | __GFP_NORETRY
+					| __GFP_NOMEMALLOC | __GFP_NOWARN);
+	if (!ww) {
+		DMERR("Failed to allocate write_work");
+		return -ENOMEM;
+	}
+
+	INIT_WORK(&ww->work, bow_write);
+	ww->bc = bc;
+	ww->bio = bio;
+	queue_work(bc->workqueue, &ww->work);
+	return DM_MAPIO_SUBMITTED;
+}
+
+static int handle_sector0(struct bow_context *bc, struct bio *bio)
+{
+	int ret = DM_MAPIO_REMAPPED;
+
+	if (bio->bi_iter.bi_size > bc->block_size) {
+		struct bio * split = bio_split(bio,
+					       bc->block_size >> SECTOR_SHIFT,
+					       GFP_NOIO,
+					       &fs_bio_set);
+		if (!split) {
+			DMERR("Failed to split bio");
+			bio->bi_status = BLK_STS_RESOURCE;
+			bio_endio(bio);
+			return DM_MAPIO_SUBMITTED;
+		}
+
+		bio_chain(split, bio);
+		split->bi_iter.bi_sector = bc->log_sector->sector0;
+		bio_set_dev(split, bc->dev->bdev);
+		submit_bio(split);
+
+		if (bio_data_dir(bio) == WRITE)
+			ret = queue_write(bc, bio);
+	} else {
+		bio->bi_iter.bi_sector = bc->log_sector->sector0;
+	}
+
+	return ret;
+}
+
+static int add_trim(struct bow_context *bc, struct bio *bio)
+{
+	struct bow_range *br;
+	struct bvec_iter bi_iter = bio->bi_iter;
+
+	DMDEBUG("add_trim: %llu, %u",
+		(unsigned long long)bio->bi_iter.bi_sector,
+		bio->bi_iter.bi_size);
+
+	do {
+		br = find_first_overlapping_range(&bc->ranges, &bi_iter);
+
+		switch (br->type) {
+		case UNCHANGED:
+			if (!split_range(bc, &br, &bi_iter))
+				set_type(bc, &br, TRIMMED);
+			break;
+
+		case TRIMMED:
+			/* Nothing to do */
+			break;
+
+		default:
+			/* No other case is legal in TRIM state */
+			WARN_ON(true);
+			break;
+		}
+
+		bi_iter.bi_sector += bi_iter.bi_size / SECTOR_SIZE;
+		bi_iter.bi_size = bio->bi_iter.bi_size
+			- (bi_iter.bi_sector - bio->bi_iter.bi_sector)
+			  * SECTOR_SIZE;
+
+	} while (bi_iter.bi_size);
+
+	bio_endio(bio);
+	return DM_MAPIO_SUBMITTED;
+}
+
+static int remove_trim(struct bow_context *bc, struct bio *bio)
+{
+	struct bow_range *br;
+	struct bvec_iter bi_iter = bio->bi_iter;
+
+	DMDEBUG("remove_trim: %llu, %u",
+		(unsigned long long)bio->bi_iter.bi_sector,
+		bio->bi_iter.bi_size);
+
+	do {
+		br = find_first_overlapping_range(&bc->ranges, &bi_iter);
+
+		switch (br->type) {
+		case UNCHANGED:
+			/* Nothing to do */
+			break;
+
+		case TRIMMED:
+			if (!split_range(bc, &br, &bi_iter))
+				set_type(bc, &br, UNCHANGED);
+			break;
+
+		default:
+			/* No other case is legal in TRIM state */
+			WARN_ON(true);
+			break;
+		}
+
+		bi_iter.bi_sector += bi_iter.bi_size / SECTOR_SIZE;
+		bi_iter.bi_size = bio->bi_iter.bi_size
+			- (bi_iter.bi_sector - bio->bi_iter.bi_sector)
+			  * SECTOR_SIZE;
+
+	} while (bi_iter.bi_size);
+
+	return DM_MAPIO_REMAPPED;
+}
+
+int remap_unless_illegal_trim(struct bow_context *bc, struct bio *bio)
+{
+	if (!bc->forward_trims && bio_op(bio) == REQ_OP_DISCARD) {
+		bio->bi_status = BLK_STS_NOTSUPP;
+		bio_endio(bio);
+		return DM_MAPIO_SUBMITTED;
+	} else {
+		bio_set_dev(bio, bc->dev->bdev);
+		return DM_MAPIO_REMAPPED;
+	}
+}
+
+/****** dm interface ******/
+
+static int dm_bow_map(struct dm_target *ti, struct bio *bio)
+{
+	int ret = DM_MAPIO_REMAPPED;
+	struct bow_context *bc = ti->private;
+
+	if (likely(bc->state.counter == COMMITTED))
+		return remap_unless_illegal_trim(bc, bio);
+
+	if (bio_data_dir(bio) == READ && bio->bi_iter.bi_sector != 0)
+		return remap_unless_illegal_trim(bc, bio);
+
+	if (atomic_read(&bc->state) != COMMITTED) {
+		enum state state;
+
+		mutex_lock(&bc->ranges_lock);
+		state = atomic_read(&bc->state);
+		if (state == TRIM) {
+			if (bio_op(bio) == REQ_OP_DISCARD)
+				ret = add_trim(bc, bio);
+			else if (bio_data_dir(bio) == WRITE)
+				ret = remove_trim(bc, bio);
+			else
+				/* pass-through */;
+		} else if (state == CHECKPOINT) {
+			if (bio->bi_iter.bi_sector == 0)
+				ret = handle_sector0(bc, bio);
+			else if (bio_data_dir(bio) == WRITE)
+				ret = queue_write(bc, bio);
+			else
+				/* pass-through */;
+		} else {
+			/* pass-through */
+		}
+		mutex_unlock(&bc->ranges_lock);
+	}
+
+	if (ret == DM_MAPIO_REMAPPED)
+		return remap_unless_illegal_trim(bc, bio);
+
+	return ret;
+}
+
+static void dm_bow_tablestatus(struct dm_target *ti, char *result,
+			       unsigned int maxlen)
+{
+	char *end = result + maxlen;
+	struct bow_context *bc = ti->private;
+	struct rb_node *i;
+	int trimmed_list_length = 0;
+	int trimmed_range_count = 0;
+	struct bow_range *br;
+
+	if (maxlen == 0)
+		return;
+	result[0] = 0;
+
+	list_for_each_entry(br, &bc->trimmed_list, trimmed_list)
+		if (br->type == TRIMMED) {
+			++trimmed_list_length;
+		} else {
+			scnprintf(result, end - result,
+				  "ERROR: non-trimmed entry in trimmed_list");
+			return;
+		}
+
+	if (!rb_first(&bc->ranges)) {
+		scnprintf(result, end - result, "ERROR: Empty ranges");
+		return;
+	}
+
+	if (container_of(rb_first(&bc->ranges), struct bow_range, node)
+	    ->sector) {
+		scnprintf(result, end - result,
+			 "ERROR: First range does not start at sector 0");
+		return;
+	}
+
+	for (i = rb_first(&bc->ranges); i; i = rb_next(i)) {
+		struct bow_range *br = container_of(i, struct bow_range, node);
+
+		result += scnprintf(result, end - result, "%s: %llu",
+				    readable_type[br->type],
+				    (unsigned long long)br->sector);
+		if (result >= end)
+			return;
+
+		result += scnprintf(result, end - result, "\n");
+		if (result >= end)
+			return;
+
+		if (br->type == TRIMMED)
+			++trimmed_range_count;
+
+		if (br->type == TOP) {
+			if (br->sector != ti->len) {
+				scnprintf(result, end - result,
+					 "\nERROR: Top sector is incorrect");
+			}
+
+			if (&br->node != rb_last(&bc->ranges)) {
+				scnprintf(result, end - result,
+					  "\nERROR: Top sector is not last");
+			}
+
+			break;
+		}
+
+		if (!rb_next(i)) {
+			scnprintf(result, end - result,
+				  "\nERROR: Last range not of type TOP");
+			return;
+		}
+
+		if (br->sector > range_top(br)) {
+			scnprintf(result, end - result,
+				  "\nERROR: sectors out of order");
+			return;
+		}
+	}
+
+	if (trimmed_range_count != trimmed_list_length)
+		scnprintf(result, end - result,
+			  "\nERROR: not all trimmed ranges in trimmed list");
+}
+
+static void dm_bow_status(struct dm_target *ti, status_type_t type,
+			  unsigned int status_flags, char *result,
+			  unsigned int maxlen)
+{
+	switch (type) {
+	case STATUSTYPE_INFO:
+		if (maxlen)
+			result[0] = 0;
+		break;
+
+	case STATUSTYPE_TABLE:
+		dm_bow_tablestatus(ti, result, maxlen);
+		break;
+	}
+}
+
+int dm_bow_prepare_ioctl(struct dm_target *ti, struct block_device **bdev)
+{
+	struct bow_context *bc = ti->private;
+	struct dm_dev *dev = bc->dev;
+
+	*bdev = dev->bdev;
+	/* Only pass ioctls through if the device sizes match exactly. */
+	return ti->len != i_size_read(dev->bdev->bd_inode) >> SECTOR_SHIFT;
+}
+
+static int dm_bow_iterate_devices(struct dm_target *ti,
+				  iterate_devices_callout_fn fn, void *data)
+{
+	struct bow_context *bc = ti->private;
+
+	return fn(ti, bc->dev, 0, ti->len, data);
+}
+
+static struct target_type bow_target = {
+	.name   = "bow",
+	.version = {1, 2, 0},
+	.features = DM_TARGET_PASSES_CRYPTO,
+	.module = THIS_MODULE,
+	.ctr    = dm_bow_ctr,
+	.dtr    = dm_bow_dtr,
+	.map    = dm_bow_map,
+	.status = dm_bow_status,
+	.prepare_ioctl  = dm_bow_prepare_ioctl,
+	.iterate_devices = dm_bow_iterate_devices,
+	.io_hints = dm_bow_io_hints,
+};
+
+int __init dm_bow_init(void)
+{
+	int r = dm_register_target(&bow_target);
+
+	if (r < 0)
+		DMERR("registering bow failed %d", r);
+	return r;
+}
+
+void dm_bow_exit(void)
+{
+	dm_unregister_target(&bow_target);
+}
+
+MODULE_LICENSE("GPL");
+
+module_init(dm_bow_init);
+module_exit(dm_bow_exit);
diff --git a/drivers/md/dm-core.h b/drivers/md/dm-core.h
index c4ef1fc..1e696fa 100644
--- a/drivers/md/dm-core.h
+++ b/drivers/md/dm-core.h
@@ -12,6 +12,7 @@
 #include <linux/kthread.h>
 #include <linux/ktime.h>
 #include <linux/blk-mq.h>
+#include <linux/keyslot-manager.h>
 
 #include <trace/events/block.h>
 
diff --git a/drivers/md/dm-default-key.c b/drivers/md/dm-default-key.c
new file mode 100644
index 0000000..8b3e8c1
--- /dev/null
+++ b/drivers/md/dm-default-key.c
@@ -0,0 +1,426 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2017 Google, Inc.
+ */
+
+#include <linux/blk-crypto.h>
+#include <linux/device-mapper.h>
+#include <linux/module.h>
+
+#define DM_MSG_PREFIX		"default-key"
+
+#define DM_DEFAULT_KEY_MAX_WRAPPED_KEY_SIZE 128
+
+static const struct dm_default_key_cipher {
+	const char *name;
+	enum blk_crypto_mode_num mode_num;
+	int key_size;
+} dm_default_key_ciphers[] = {
+	{
+		.name = "aes-xts-plain64",
+		.mode_num = BLK_ENCRYPTION_MODE_AES_256_XTS,
+		.key_size = 64,
+	}, {
+		.name = "xchacha12,aes-adiantum-plain64",
+		.mode_num = BLK_ENCRYPTION_MODE_ADIANTUM,
+		.key_size = 32,
+	},
+};
+
+/**
+ * struct dm_default_c - private data of a default-key target
+ * @dev: the underlying device
+ * @start: starting sector of the range of @dev which this target actually maps.
+ *	   For this purpose a "sector" is 512 bytes.
+ * @cipher_string: the name of the encryption algorithm being used
+ * @iv_offset: starting offset for IVs.  IVs are generated as if the target were
+ *	       preceded by @iv_offset 512-byte sectors.
+ * @sector_size: crypto sector size in bytes (usually 4096)
+ * @sector_bits: log2(sector_size)
+ * @key: the encryption key to use
+ * @max_dun: the maximum DUN that may be used (computed from other params)
+ */
+struct default_key_c {
+	struct dm_dev *dev;
+	sector_t start;
+	const char *cipher_string;
+	u64 iv_offset;
+	unsigned int sector_size;
+	unsigned int sector_bits;
+	struct blk_crypto_key key;
+	bool is_hw_wrapped;
+	u64 max_dun;
+};
+
+static const struct dm_default_key_cipher *
+lookup_cipher(const char *cipher_string)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(dm_default_key_ciphers); i++) {
+		if (strcmp(cipher_string, dm_default_key_ciphers[i].name) == 0)
+			return &dm_default_key_ciphers[i];
+	}
+	return NULL;
+}
+
+static void default_key_dtr(struct dm_target *ti)
+{
+	struct default_key_c *dkc = ti->private;
+	int err;
+
+	if (dkc->dev) {
+		err = blk_crypto_evict_key(bdev_get_queue(dkc->dev->bdev),
+					   &dkc->key);
+		if (err && err != -ENOKEY)
+			DMWARN("Failed to evict crypto key: %d", err);
+		dm_put_device(ti, dkc->dev);
+	}
+	kzfree(dkc->cipher_string);
+	kzfree(dkc);
+}
+
+static int default_key_ctr_optional(struct dm_target *ti,
+				    unsigned int argc, char **argv)
+{
+	struct default_key_c *dkc = ti->private;
+	struct dm_arg_set as;
+	static const struct dm_arg _args[] = {
+		{0, 4, "Invalid number of feature args"},
+	};
+	unsigned int opt_params;
+	const char *opt_string;
+	bool iv_large_sectors = false;
+	char dummy;
+	int err;
+
+	as.argc = argc;
+	as.argv = argv;
+
+	err = dm_read_arg_group(_args, &as, &opt_params, &ti->error);
+	if (err)
+		return err;
+
+	while (opt_params--) {
+		opt_string = dm_shift_arg(&as);
+		if (!opt_string) {
+			ti->error = "Not enough feature arguments";
+			return -EINVAL;
+		}
+		if (!strcmp(opt_string, "allow_discards")) {
+			ti->num_discard_bios = 1;
+		} else if (sscanf(opt_string, "sector_size:%u%c",
+				  &dkc->sector_size, &dummy) == 1) {
+			if (dkc->sector_size < SECTOR_SIZE ||
+			    dkc->sector_size > 4096 ||
+			    !is_power_of_2(dkc->sector_size)) {
+				ti->error = "Invalid sector_size";
+				return -EINVAL;
+			}
+		} else if (!strcmp(opt_string, "iv_large_sectors")) {
+			iv_large_sectors = true;
+		} else if (!strcmp(opt_string, "wrappedkey_v0")) {
+			dkc->is_hw_wrapped = true;
+		} else {
+			ti->error = "Invalid feature arguments";
+			return -EINVAL;
+		}
+	}
+
+	/* dm-default-key doesn't implement iv_large_sectors=false. */
+	if (dkc->sector_size != SECTOR_SIZE && !iv_large_sectors) {
+		ti->error = "iv_large_sectors must be specified";
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+/*
+ * Construct a default-key mapping:
+ * <cipher> <key> <iv_offset> <dev_path> <start>
+ *
+ * This syntax matches dm-crypt's, but lots of unneeded functionality has been
+ * removed.  Also, dm-default-key requires that the "iv_large_sectors" option be
+ * given whenever a non-default sector size is used.
+ */
+static int default_key_ctr(struct dm_target *ti, unsigned int argc, char **argv)
+{
+	struct default_key_c *dkc;
+	const struct dm_default_key_cipher *cipher;
+	u8 raw_key[DM_DEFAULT_KEY_MAX_WRAPPED_KEY_SIZE];
+	unsigned int raw_key_size;
+	unsigned int dun_bytes;
+	unsigned long long tmpll;
+	char dummy;
+	int err;
+
+	if (argc < 5) {
+		ti->error = "Not enough arguments";
+		return -EINVAL;
+	}
+
+	dkc = kzalloc(sizeof(*dkc), GFP_KERNEL);
+	if (!dkc) {
+		ti->error = "Out of memory";
+		return -ENOMEM;
+	}
+	ti->private = dkc;
+
+	/* <cipher> */
+	dkc->cipher_string = kstrdup(argv[0], GFP_KERNEL);
+	if (!dkc->cipher_string) {
+		ti->error = "Out of memory";
+		err = -ENOMEM;
+		goto bad;
+	}
+	cipher = lookup_cipher(dkc->cipher_string);
+	if (!cipher) {
+		ti->error = "Unsupported cipher";
+		err = -EINVAL;
+		goto bad;
+	}
+
+	/* <key> */
+	raw_key_size = strlen(argv[1]);
+	if (raw_key_size > 2 * DM_DEFAULT_KEY_MAX_WRAPPED_KEY_SIZE ||
+	    raw_key_size % 2) {
+		ti->error = "Invalid keysize";
+		err = -EINVAL;
+		goto bad;
+	}
+	raw_key_size /= 2;
+	if (hex2bin(raw_key, argv[1], raw_key_size) != 0) {
+		ti->error = "Malformed key string";
+		err = -EINVAL;
+		goto bad;
+	}
+
+	/* <iv_offset> */
+	if (sscanf(argv[2], "%llu%c", &dkc->iv_offset, &dummy) != 1) {
+		ti->error = "Invalid iv_offset sector";
+		err = -EINVAL;
+		goto bad;
+	}
+
+	/* <dev_path> */
+	err = dm_get_device(ti, argv[3], dm_table_get_mode(ti->table),
+			    &dkc->dev);
+	if (err) {
+		ti->error = "Device lookup failed";
+		goto bad;
+	}
+
+	/* <start> */
+	if (sscanf(argv[4], "%llu%c", &tmpll, &dummy) != 1 ||
+	    tmpll != (sector_t)tmpll) {
+		ti->error = "Invalid start sector";
+		err = -EINVAL;
+		goto bad;
+	}
+	dkc->start = tmpll;
+
+	/* optional arguments */
+	dkc->sector_size = SECTOR_SIZE;
+	if (argc > 5) {
+		err = default_key_ctr_optional(ti, argc - 5, &argv[5]);
+		if (err)
+			goto bad;
+	}
+	dkc->sector_bits = ilog2(dkc->sector_size);
+	if (ti->len & ((dkc->sector_size >> SECTOR_SHIFT) - 1)) {
+		ti->error = "Device size is not a multiple of sector_size";
+		err = -EINVAL;
+		goto bad;
+	}
+
+	dkc->max_dun = (dkc->iv_offset + ti->len - 1) >>
+		       (dkc->sector_bits - SECTOR_SHIFT);
+	dun_bytes = DIV_ROUND_UP(fls64(dkc->max_dun), 8);
+
+	err = blk_crypto_init_key(&dkc->key, raw_key, raw_key_size,
+				  dkc->is_hw_wrapped, cipher->mode_num,
+				  dun_bytes, dkc->sector_size);
+	if (err) {
+		ti->error = "Error initializing blk-crypto key";
+		goto bad;
+	}
+
+	err = blk_crypto_start_using_key(&dkc->key,
+					 bdev_get_queue(dkc->dev->bdev));
+	if (err) {
+		ti->error = "Error starting to use blk-crypto";
+		goto bad;
+	}
+
+	ti->num_flush_bios = 1;
+
+	err = 0;
+	goto out;
+
+bad:
+	default_key_dtr(ti);
+out:
+	memzero_explicit(raw_key, sizeof(raw_key));
+	return err;
+}
+
+static int default_key_map(struct dm_target *ti, struct bio *bio)
+{
+	const struct default_key_c *dkc = ti->private;
+	sector_t sector_in_target;
+	u64 dun[BLK_CRYPTO_DUN_ARRAY_SIZE] = { 0 };
+
+	bio_set_dev(bio, dkc->dev->bdev);
+
+	/*
+	 * If the bio is a device-level request which doesn't target a specific
+	 * sector, there's nothing more to do.
+	 */
+	if (bio_sectors(bio) == 0)
+		return DM_MAPIO_REMAPPED;
+
+	/* Map the bio's sector to the underlying device. (512-byte sectors) */
+	sector_in_target = dm_target_offset(ti, bio->bi_iter.bi_sector);
+	bio->bi_iter.bi_sector = dkc->start + sector_in_target;
+
+	/*
+	 * If the bio should skip dm-default-key (i.e. if it's for an encrypted
+	 * file's contents), or if it doesn't have any data (e.g. if it's a
+	 * DISCARD request), there's nothing more to do.
+	 */
+	if (bio_should_skip_dm_default_key(bio) || !bio_has_data(bio))
+		return DM_MAPIO_REMAPPED;
+
+	/*
+	 * Else, dm-default-key needs to set this bio's encryption context.
+	 * It must not already have one.
+	 */
+	if (WARN_ON_ONCE(bio_has_crypt_ctx(bio)))
+		return DM_MAPIO_KILL;
+
+	/* Calculate the DUN and enforce data-unit (crypto sector) alignment. */
+	dun[0] = dkc->iv_offset + sector_in_target; /* 512-byte sectors */
+	if (dun[0] & ((dkc->sector_size >> SECTOR_SHIFT) - 1))
+		return DM_MAPIO_KILL;
+	dun[0] >>= dkc->sector_bits - SECTOR_SHIFT; /* crypto sectors */
+
+	/*
+	 * This check isn't necessary as we should have calculated max_dun
+	 * correctly, but be safe.
+	 */
+	if (WARN_ON_ONCE(dun[0] > dkc->max_dun))
+		return DM_MAPIO_KILL;
+
+	bio_crypt_set_ctx(bio, &dkc->key, dun, GFP_NOIO);
+
+	return DM_MAPIO_REMAPPED;
+}
+
+static void default_key_status(struct dm_target *ti, status_type_t type,
+			       unsigned int status_flags, char *result,
+			       unsigned int maxlen)
+{
+	const struct default_key_c *dkc = ti->private;
+	unsigned int sz = 0;
+	int num_feature_args = 0;
+
+	switch (type) {
+	case STATUSTYPE_INFO:
+		result[0] = '\0';
+		break;
+
+	case STATUSTYPE_TABLE:
+		/* Omit the key for now. */
+		DMEMIT("%s - %llu %s %llu", dkc->cipher_string, dkc->iv_offset,
+		       dkc->dev->name, (unsigned long long)dkc->start);
+
+		num_feature_args += !!ti->num_discard_bios;
+		if (dkc->sector_size != SECTOR_SIZE)
+			num_feature_args += 2;
+		if (dkc->is_hw_wrapped)
+			num_feature_args += 1;
+		if (num_feature_args != 0) {
+			DMEMIT(" %d", num_feature_args);
+			if (ti->num_discard_bios)
+				DMEMIT(" allow_discards");
+			if (dkc->sector_size != SECTOR_SIZE) {
+				DMEMIT(" sector_size:%u", dkc->sector_size);
+				DMEMIT(" iv_large_sectors");
+			}
+			if (dkc->is_hw_wrapped)
+				DMEMIT(" wrappedkey_v0");
+		}
+		break;
+	}
+}
+
+static int default_key_prepare_ioctl(struct dm_target *ti,
+				     struct block_device **bdev)
+{
+	const struct default_key_c *dkc = ti->private;
+	const struct dm_dev *dev = dkc->dev;
+
+	*bdev = dev->bdev;
+
+	/* Only pass ioctls through if the device sizes match exactly. */
+	if (dkc->start != 0 ||
+	    ti->len != i_size_read(dev->bdev->bd_inode) >> SECTOR_SHIFT)
+		return 1;
+	return 0;
+}
+
+static int default_key_iterate_devices(struct dm_target *ti,
+				       iterate_devices_callout_fn fn,
+				       void *data)
+{
+	const struct default_key_c *dkc = ti->private;
+
+	return fn(ti, dkc->dev, dkc->start, ti->len, data);
+}
+
+static void default_key_io_hints(struct dm_target *ti,
+				 struct queue_limits *limits)
+{
+	const struct default_key_c *dkc = ti->private;
+	const unsigned int sector_size = dkc->sector_size;
+
+	limits->logical_block_size =
+		max_t(unsigned int, limits->logical_block_size, sector_size);
+	limits->physical_block_size =
+		max_t(unsigned int, limits->physical_block_size, sector_size);
+	limits->io_min = max_t(unsigned int, limits->io_min, sector_size);
+}
+
+static struct target_type default_key_target = {
+	.name			= "default-key",
+	.version		= {2, 1, 0},
+	.features		= DM_TARGET_PASSES_CRYPTO,
+	.module			= THIS_MODULE,
+	.ctr			= default_key_ctr,
+	.dtr			= default_key_dtr,
+	.map			= default_key_map,
+	.status			= default_key_status,
+	.prepare_ioctl		= default_key_prepare_ioctl,
+	.iterate_devices	= default_key_iterate_devices,
+	.io_hints		= default_key_io_hints,
+};
+
+static int __init dm_default_key_init(void)
+{
+	return dm_register_target(&default_key_target);
+}
+
+static void __exit dm_default_key_exit(void)
+{
+	dm_unregister_target(&default_key_target);
+}
+
+module_init(dm_default_key_init);
+module_exit(dm_default_key_exit);
+
+MODULE_AUTHOR("Paul Lawrence <paullawrence@google.com>");
+MODULE_AUTHOR("Paul Crowley <paulcrowley@google.com>");
+MODULE_AUTHOR("Eric Biggers <ebiggers@google.com>");
+MODULE_DESCRIPTION(DM_NAME " target for encrypting filesystem metadata");
+MODULE_LICENSE("GPL");
diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c
index 2900fbd..2ffe0b4 100644
--- a/drivers/md/dm-flakey.c
+++ b/drivers/md/dm-flakey.c
@@ -460,21 +460,15 @@ static int flakey_prepare_ioctl(struct dm_target *ti, struct block_device **bdev
 }
 
 #ifdef CONFIG_BLK_DEV_ZONED
-static int flakey_report_zones(struct dm_target *ti, sector_t sector,
-			       struct blk_zone *zones, unsigned int *nr_zones)
+static int flakey_report_zones(struct dm_target *ti,
+		struct dm_report_zones_args *args, unsigned int nr_zones)
 {
 	struct flakey_c *fc = ti->private;
-	int ret;
+	sector_t sector = flakey_map_sector(ti, args->next_sector);
 
-	/* Do report and remap it */
-	ret = blkdev_report_zones(fc->dev->bdev, flakey_map_sector(ti, sector),
-				  zones, nr_zones);
-	if (ret != 0)
-		return ret;
-
-	if (*nr_zones)
-		dm_remap_zone_report(ti, fc->start, zones, nr_zones);
-	return 0;
+	args->start = fc->start;
+	return blkdev_report_zones(fc->dev->bdev, sector, nr_zones,
+				   dm_report_zones_cb, args);
 }
 #endif
 
@@ -489,8 +483,10 @@ static struct target_type flakey_target = {
 	.name   = "flakey",
 	.version = {1, 5, 0},
 #ifdef CONFIG_BLK_DEV_ZONED
-	.features = DM_TARGET_ZONED_HM,
+	.features = DM_TARGET_ZONED_HM | DM_TARGET_PASSES_CRYPTO,
 	.report_zones = flakey_report_zones,
+#else
+	.features = DM_TARGET_PASSES_CRYPTO,
 #endif
 	.module = THIS_MODULE,
 	.ctr    = flakey_ctr,
diff --git a/drivers/md/dm-linear.c b/drivers/md/dm-linear.c
index ecefe67..071edd6 100644
--- a/drivers/md/dm-linear.c
+++ b/drivers/md/dm-linear.c
@@ -136,21 +136,15 @@ static int linear_prepare_ioctl(struct dm_target *ti, struct block_device **bdev
 }
 
 #ifdef CONFIG_BLK_DEV_ZONED
-static int linear_report_zones(struct dm_target *ti, sector_t sector,
-			       struct blk_zone *zones, unsigned int *nr_zones)
+static int linear_report_zones(struct dm_target *ti,
+		struct dm_report_zones_args *args, unsigned int nr_zones)
 {
-	struct linear_c *lc = (struct linear_c *) ti->private;
-	int ret;
+	struct linear_c *lc = ti->private;
+	sector_t sector = linear_map_sector(ti, args->next_sector);
 
-	/* Do report and remap it */
-	ret = blkdev_report_zones(lc->dev->bdev, linear_map_sector(ti, sector),
-				  zones, nr_zones);
-	if (ret != 0)
-		return ret;
-
-	if (*nr_zones)
-		dm_remap_zone_report(ti, lc->start, zones, nr_zones);
-	return 0;
+	args->start = lc->start;
+	return blkdev_report_zones(lc->dev->bdev, sector, nr_zones,
+				   dm_report_zones_cb, args);
 }
 #endif
 
@@ -217,10 +211,11 @@ static struct target_type linear_target = {
 	.name   = "linear",
 	.version = {1, 4, 0},
 #ifdef CONFIG_BLK_DEV_ZONED
-	.features = DM_TARGET_PASSES_INTEGRITY | DM_TARGET_ZONED_HM,
+	.features = DM_TARGET_PASSES_INTEGRITY | DM_TARGET_ZONED_HM |
+		    DM_TARGET_PASSES_CRYPTO,
 	.report_zones = linear_report_zones,
 #else
-	.features = DM_TARGET_PASSES_INTEGRITY,
+	.features = DM_TARGET_PASSES_INTEGRITY | DM_TARGET_PASSES_CRYPTO,
 #endif
 	.module = THIS_MODULE,
 	.ctr    = linear_ctr,
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
index 98be040..5eec6c0 100644
--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
@@ -66,6 +66,10 @@ struct dm_table {
 	struct dm_md_mempools *mempools;
 
 	struct list_head target_callbacks;
+
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+	struct blk_keyslot_manager *ksm;
+#endif
 };
 
 /*
@@ -228,6 +232,8 @@ static void free_devices(struct list_head *devices, struct mapped_device *md)
 	}
 }
 
+static void dm_table_destroy_keyslot_manager(struct dm_table *t);
+
 void dm_table_destroy(struct dm_table *t)
 {
 	unsigned int i;
@@ -256,6 +262,8 @@ void dm_table_destroy(struct dm_table *t)
 
 	dm_free_md_mempools(t->mempools);
 
+	dm_table_destroy_keyslot_manager(t);
+
 	kfree(t);
 }
 
@@ -1284,6 +1292,287 @@ static int dm_table_register_integrity(struct dm_table *t)
 	return 0;
 }
 
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+
+struct dm_keyslot_manager {
+	struct blk_keyslot_manager ksm;
+	struct mapped_device *md;
+};
+
+struct dm_keyslot_evict_args {
+	const struct blk_crypto_key *key;
+	int err;
+};
+
+static int dm_keyslot_evict_callback(struct dm_target *ti, struct dm_dev *dev,
+				     sector_t start, sector_t len, void *data)
+{
+	struct dm_keyslot_evict_args *args = data;
+	int err;
+
+	err = blk_crypto_evict_key(bdev_get_queue(dev->bdev), args->key);
+	if (!args->err)
+		args->err = err;
+	/* Always try to evict the key from all devices. */
+	return 0;
+}
+
+/*
+ * When an inline encryption key is evicted from a device-mapper device, evict
+ * it from all the underlying devices.
+ */
+static int dm_keyslot_evict(struct blk_keyslot_manager *ksm,
+			    const struct blk_crypto_key *key, unsigned int slot)
+{
+	struct dm_keyslot_manager *dksm = container_of(ksm,
+						       struct dm_keyslot_manager,
+						       ksm);
+	struct mapped_device *md = dksm->md;
+	struct dm_keyslot_evict_args args = { key };
+	struct dm_table *t;
+	int srcu_idx;
+	int i;
+	struct dm_target *ti;
+
+	t = dm_get_live_table(md, &srcu_idx);
+	if (!t)
+		return 0;
+	for (i = 0; i < dm_table_get_num_targets(t); i++) {
+		ti = dm_table_get_target(t, i);
+		if (!ti->type->iterate_devices)
+			continue;
+		ti->type->iterate_devices(ti, dm_keyslot_evict_callback, &args);
+	}
+	dm_put_live_table(md, srcu_idx);
+	return args.err;
+}
+
+struct dm_derive_raw_secret_args {
+	const u8 *wrapped_key;
+	unsigned int wrapped_key_size;
+	u8 *secret;
+	unsigned int secret_size;
+	int err;
+};
+
+static int dm_derive_raw_secret_callback(struct dm_target *ti,
+					 struct dm_dev *dev, sector_t start,
+					 sector_t len, void *data)
+{
+	struct dm_derive_raw_secret_args *args = data;
+	struct request_queue *q = bdev_get_queue(dev->bdev);
+
+	if (!args->err)
+		return 0;
+
+	if (!q->ksm) {
+		args->err = -EOPNOTSUPP;
+		return 0;
+	}
+
+	args->err = blk_ksm_derive_raw_secret(q->ksm, args->wrapped_key,
+					      args->wrapped_key_size,
+					      args->secret,
+					      args->secret_size);
+	/* Try another device in case this fails. */
+	return 0;
+}
+
+/*
+ * Retrieve the raw_secret from the underlying device.  Given that only one
+ * raw_secret can exist for a particular wrappedkey, retrieve it only from the
+ * first device that supports derive_raw_secret().
+ */
+static int dm_derive_raw_secret(struct blk_keyslot_manager *ksm,
+				const u8 *wrapped_key,
+				unsigned int wrapped_key_size,
+				u8 *secret, unsigned int secret_size)
+{
+	struct dm_keyslot_manager *dksm = container_of(ksm,
+						       struct dm_keyslot_manager,
+						       ksm);
+	struct mapped_device *md = dksm->md;
+	struct dm_derive_raw_secret_args args = {
+		.wrapped_key = wrapped_key,
+		.wrapped_key_size = wrapped_key_size,
+		.secret = secret,
+		.secret_size = secret_size,
+		.err = -EOPNOTSUPP,
+	};
+	struct dm_table *t;
+	int srcu_idx;
+	int i;
+	struct dm_target *ti;
+
+	t = dm_get_live_table(md, &srcu_idx);
+	if (!t)
+		return -EOPNOTSUPP;
+	for (i = 0; i < dm_table_get_num_targets(t); i++) {
+		ti = dm_table_get_target(t, i);
+		if (!ti->type->iterate_devices)
+			continue;
+		ti->type->iterate_devices(ti, dm_derive_raw_secret_callback,
+					  &args);
+		if (!args.err)
+			break;
+	}
+	dm_put_live_table(md, srcu_idx);
+	return args.err;
+}
+
+
+static struct blk_ksm_ll_ops dm_ksm_ll_ops = {
+	.keyslot_evict = dm_keyslot_evict,
+	.derive_raw_secret = dm_derive_raw_secret,
+};
+
+static int device_intersect_crypto_modes(struct dm_target *ti,
+					 struct dm_dev *dev, sector_t start,
+					 sector_t len, void *data)
+{
+	struct blk_keyslot_manager *parent = data;
+	struct blk_keyslot_manager *child = bdev_get_queue(dev->bdev)->ksm;
+
+	blk_ksm_intersect_modes(parent, child);
+	return 0;
+}
+
+void dm_destroy_keyslot_manager(struct blk_keyslot_manager *ksm)
+{
+	struct dm_keyslot_manager *dksm = container_of(ksm,
+						       struct dm_keyslot_manager,
+						       ksm);
+
+	if (!ksm)
+		return;
+
+	blk_ksm_destroy(ksm);
+	kfree(dksm);
+}
+
+static void dm_table_destroy_keyslot_manager(struct dm_table *t)
+{
+	dm_destroy_keyslot_manager(t->ksm);
+	t->ksm = NULL;
+}
+
+/*
+ * Constructs and initializes t->ksm with a keyslot manager that
+ * represents the common set of crypto capabilities of the devices
+ * described by the dm_table. However, if the constructed keyslot
+ * manager does not support a superset of the crypto capabilities
+ * supported by the current keyslot manager of the mapped_device,
+ * it returns an error instead, since we don't support restricting
+ * crypto capabilities on table changes. Finally, if the constructed
+ * keyslot manager doesn't actually support any crypto modes at all,
+ * it just returns NULL.
+ */
+static int dm_table_construct_keyslot_manager(struct dm_table *t)
+{
+	struct dm_keyslot_manager *dksm;
+	struct blk_keyslot_manager *ksm;
+	struct dm_target *ti;
+	unsigned int i;
+	bool ksm_is_empty = true;
+
+	dksm = kmalloc(sizeof(*dksm), GFP_KERNEL);
+	if (!dksm)
+		return -ENOMEM;
+	dksm->md = t->md;
+
+	ksm = &dksm->ksm;
+	blk_ksm_init_passthrough(ksm);
+	ksm->ksm_ll_ops = dm_ksm_ll_ops;
+	ksm->max_dun_bytes_supported = UINT_MAX;
+	memset(ksm->crypto_modes_supported, 0xFF,
+	       sizeof(ksm->crypto_modes_supported));
+	ksm->features = BLK_CRYPTO_FEATURE_STANDARD_KEYS |
+			BLK_CRYPTO_FEATURE_WRAPPED_KEYS;
+
+	for (i = 0; i < dm_table_get_num_targets(t); i++) {
+		ti = dm_table_get_target(t, i);
+
+		if (!dm_target_passes_crypto(ti->type)) {
+			blk_ksm_intersect_modes(ksm, NULL);
+			break;
+		}
+		if (!ti->type->iterate_devices)
+			continue;
+		ti->type->iterate_devices(ti, device_intersect_crypto_modes,
+					  ksm);
+	}
+
+	if (t->md->queue && !blk_ksm_is_superset(ksm, t->md->queue->ksm)) {
+		DMWARN("Inline encryption capabilities of new DM table were more restrictive than the old table's. This is not supported!");
+		dm_destroy_keyslot_manager(ksm);
+		return -EINVAL;
+	}
+
+	/*
+	 * If the new KSM doesn't actually support any crypto modes, we may as
+	 * well represent it with a NULL ksm.
+	 */
+	ksm_is_empty = true;
+	for (i = 0; i < ARRAY_SIZE(ksm->crypto_modes_supported); i++) {
+		if (ksm->crypto_modes_supported[i]) {
+			ksm_is_empty = false;
+			break;
+		}
+	}
+
+	if (ksm_is_empty) {
+		dm_destroy_keyslot_manager(ksm);
+		ksm = NULL;
+	}
+
+	/*
+	 * t->ksm is only set temporarily while the table is being set
+	 * up, and it gets set to NULL after the capabilities have
+	 * been transferred to the request_queue.
+	 */
+	t->ksm = ksm;
+
+	return 0;
+}
+
+static void dm_update_keyslot_manager(struct request_queue *q,
+				      struct dm_table *t)
+{
+	if (!t->ksm)
+		return;
+
+	/* Make the ksm less restrictive */
+	if (!q->ksm) {
+		blk_ksm_register(t->ksm, q);
+	} else {
+		blk_ksm_update_capabilities(q->ksm, t->ksm);
+		dm_destroy_keyslot_manager(t->ksm);
+	}
+	t->ksm = NULL;
+}
+
+#else /* CONFIG_BLK_INLINE_ENCRYPTION */
+
+static int dm_table_construct_keyslot_manager(struct dm_table *t)
+{
+	return 0;
+}
+
+void dm_destroy_keyslot_manager(struct blk_keyslot_manager *ksm)
+{
+}
+
+static void dm_table_destroy_keyslot_manager(struct dm_table *t)
+{
+}
+
+static void dm_update_keyslot_manager(struct request_queue *q,
+				      struct dm_table *t)
+{
+}
+
+#endif /* !CONFIG_BLK_INLINE_ENCRYPTION */
+
 /*
  * Prepares the table for use by building the indices,
  * setting the type, and allocating mempools.
@@ -1310,6 +1599,12 @@ int dm_table_complete(struct dm_table *t)
 		return r;
 	}
 
+	r = dm_table_construct_keyslot_manager(t);
+	if (r) {
+		DMERR("could not construct keyslot manager.");
+		return r;
+	}
+
 	r = dm_table_alloc_md_mempools(t, t->md);
 	if (r)
 		DMERR("unable to allocate mempools");
@@ -1961,12 +2256,16 @@ void dm_table_set_restrictions(struct dm_table *t, struct request_queue *q,
 	/*
 	 * For a zoned target, the number of zones should be updated for the
 	 * correct value to be exposed in sysfs queue/nr_zones. For a BIO based
-	 * target, this is all that is needed. For a request based target, the
-	 * queue zone bitmaps must also be updated.
-	 * Use blk_revalidate_disk_zones() to handle this.
+	 * target, this is all that is needed.
 	 */
-	if (blk_queue_is_zoned(q))
-		blk_revalidate_disk_zones(t->md->disk);
+#ifdef CONFIG_BLK_DEV_ZONED
+	if (blk_queue_is_zoned(q)) {
+		WARN_ON_ONCE(queue_is_mq(q));
+		q->nr_zones = blkdev_nr_zones(t->md->disk);
+	}
+#endif
+
+	dm_update_keyslot_manager(q, t);
 
 	/* Allow reads to exceed readahead limits */
 	q->backing_dev_info->io_pages = limits->max_sectors >> (PAGE_SHIFT - 9);
diff --git a/drivers/md/dm-user.c b/drivers/md/dm-user.c
new file mode 100644
index 0000000..4e64ada
--- /dev/null
+++ b/drivers/md/dm-user.c
@@ -0,0 +1,1141 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2020 Google, Inc
+ * Copyright (C) 2020 Palmer Dabbelt <palmerdabbelt@google.com>
+ */
+
+#include <linux/device-mapper.h>
+#include <uapi/linux/dm-user.h>
+
+#include <linux/bio.h>
+#include <linux/init.h>
+#include <linux/mempool.h>
+#include <linux/miscdevice.h>
+#include <linux/module.h>
+#include <linux/poll.h>
+#include <linux/uio.h>
+#include <linux/wait.h>
+
+#define DM_MSG_PREFIX "user"
+
+#define MAX_OUTSTANDING_MESSAGES 128
+
+/*
+ * dm-user uses four structures:
+ *
+ *  - "struct target", the outermost structure, corresponds to a single device
+ *    mapper target.  This contains the set of outstanding BIOs that have been
+ *    provided by DM and are not actively being processed by the user, along
+ *    with a misc device that userspace can open to communicate with the
+ *    kernel.  Each time userspaces opens the misc device a new channel is
+ *    created.
+ *  - "struct channel", which represents a single active communication channel
+ *    with userspace.  Userspace may choose arbitrary read/write sizes to use
+ *    when processing messages, channels form these into logical accesses.
+ *    When userspace responds to a full message the channel completes the BIO
+ *    and obtains a new message to process from the target.
+ *  - "struct message", which wraps a BIO with the additional information
+ *    required by the kernel to sort out what to do with BIOs when they return
+ *    from userspace.
+ *  - "struct dm_user_message", which is the exact message format that
+ *    userspace sees.
+ *
+ * The hot path contains three distinct operations:
+ *
+ *  - user_map(), which is provided a BIO from device mapper that is queued
+ *    into the target.  This allocates and enqueues a new message.
+ *  - dev_read(), which dequeues a message, copies it to userspace.
+ *  - dev_write(), which looks up a message (keyed by sequence number) and
+ *    completes the corresponding BIO.
+ *
+ * Lock ordering (outer to inner)
+ *
+ * 1) miscdevice's global lock.  This is held around dev_open, so it has to be
+ *    the outermost lock.
+ * 2) target->lock
+ * 3) channel->lock
+ */
+
+struct message {
+	/*
+	 * Messages themselves do not need a lock, they're protected by either
+	 * the target or channel's lock, depending on which can reference them
+	 * directly.
+	 */
+	struct dm_user_message msg;
+	struct bio *bio;
+	size_t posn_to_user;
+	size_t total_to_user;
+	size_t posn_from_user;
+	size_t total_from_user;
+
+	struct list_head from_user;
+	struct list_head to_user;
+
+	/*
+	 * These are written back from the user.  They live in the same spot in
+	 * the message, but we need to either keep the old values around or
+	 * call a bunch more BIO helpers.  These are only valid after write has
+	 * adopted the message.
+	 */
+	u64 return_type;
+	u64 return_flags;
+};
+
+struct target {
+	/*
+	 * A target has a single lock, which protects everything in the target
+	 * (but does not protect the channels associated with a target).
+	 */
+	struct mutex lock;
+
+	/*
+	 * There is only one point at which anything blocks: userspace blocks
+	 * reading a new message, which is woken up by device mapper providing
+	 * a new BIO to process (or tearing down the target).  The
+	 * corresponding write side doesn't block, instead we treat userspace's
+	 * response containing a message that has yet to be mapped as an
+	 * invalid operation.
+	 */
+	struct wait_queue_head wq;
+
+	/*
+	 * Messages are delivered to userspace in order, but may be returned
+	 * out of order.  This allows userspace to schedule IO if it wants to.
+	 */
+	mempool_t message_pool;
+	u64 next_seq_to_map;
+	u64 next_seq_to_user;
+	struct list_head to_user;
+
+	/*
+	 * There is a misc device per target.  The name is selected by
+	 * userspace (via a DM create ioctl argument), and each ends up in
+	 * /dev/dm-user/.  It looks like a better way to do this may be to have
+	 * a filesystem to manage these, but this was more expedient.  The
+	 * current mechanism is functional, but does result in an arbitrary
+	 * number of dynamically created misc devices.
+	 */
+	struct miscdevice miscdev;
+
+	/*
+	 * Device mapper's target destructor triggers tearing this all down,
+	 * but we can't actually free until every channel associated with this
+	 * target has been destroyed.  Channels each have a reference to their
+	 * target, and there is an additional single reference that corresponds
+	 * to both DM and the misc device (both of which are destroyed by DM).
+	 *
+	 * In the common case userspace will be asleep waiting for a new
+	 * message when device mapper decides to destroy the target, which
+	 * means no new messages will appear.  The destroyed flag triggers a
+	 * wakeup, which will end up removing the reference.
+	 */
+	struct kref references;
+	int dm_destroyed;
+};
+
+struct channel {
+	struct target *target;
+
+	/*
+	 * A channel has a single lock, which prevents multiple reads (or
+	 * multiple writes) from conflicting with each other.
+	 */
+	struct mutex lock;
+
+	struct message *cur_to_user;
+	struct message *cur_from_user;
+	ssize_t to_user_error;
+	ssize_t from_user_error;
+
+	/*
+	 * Once a message has been forwarded to userspace on a channel it must
+	 * be responded to on the same channel.  This allows us to error out
+	 * the messages that have not yet been responded to by a channel when
+	 * that channel closes, which makes handling errors more reasonable for
+	 * fault-tolerant userspace daemons.  It also happens to make avoiding
+	 * shared locks between user_map() and dev_read() a lot easier.
+	 *
+	 * This does preclude a multi-threaded work stealing userspace
+	 * implementation (or at least, force a degree of head-of-line blocking
+	 * on the response path).
+	 */
+	struct list_head from_user;
+
+	/*
+	 * Responses from userspace can arrive in arbitrarily small chunks.
+	 * We need some place to buffer one up until we can find the
+	 * corresponding kernel-side message to continue processing, so instead
+	 * of allocating them we just keep one off to the side here.  This can
+	 * only ever be pointer to by from_user_cur, and will never have a BIO.
+	 */
+	struct message scratch_message_from_user;
+};
+
+static inline struct target *target_from_target(struct dm_target *target)
+{
+	WARN_ON(target->private == NULL);
+	return target->private;
+}
+
+static inline struct target *target_from_miscdev(struct miscdevice *miscdev)
+{
+	return container_of(miscdev, struct target, miscdev);
+}
+
+static inline struct channel *channel_from_file(struct file *file)
+{
+	WARN_ON(file->private_data == NULL);
+	return file->private_data;
+}
+
+static inline struct target *target_from_channel(struct channel *c)
+{
+	WARN_ON(c->target == NULL);
+	return c->target;
+}
+
+static inline size_t bio_size(struct bio *bio)
+{
+	struct bio_vec bvec;
+	struct bvec_iter iter;
+	size_t out = 0;
+
+	bio_for_each_segment (bvec, bio, iter)
+		out += bio_iter_len(bio, iter);
+	return out;
+}
+
+static inline size_t bio_bytes_needed_to_user(struct bio *bio)
+{
+	switch (bio_op(bio)) {
+	case REQ_OP_WRITE:
+		return sizeof(struct dm_user_message) + bio_size(bio);
+	case REQ_OP_READ:
+	case REQ_OP_FLUSH:
+	case REQ_OP_DISCARD:
+	case REQ_OP_SECURE_ERASE:
+	case REQ_OP_WRITE_SAME:
+	case REQ_OP_WRITE_ZEROES:
+		return sizeof(struct dm_user_message);
+
+	/*
+	 * These ops are not passed to userspace under the assumption that
+	 * they're not going to be particularly useful in that context.
+	 */
+	default:
+		return -EOPNOTSUPP;
+	}
+}
+
+static inline size_t bio_bytes_needed_from_user(struct bio *bio)
+{
+	switch (bio_op(bio)) {
+	case REQ_OP_READ:
+		return sizeof(struct dm_user_message) + bio_size(bio);
+	case REQ_OP_WRITE:
+	case REQ_OP_FLUSH:
+	case REQ_OP_DISCARD:
+	case REQ_OP_SECURE_ERASE:
+	case REQ_OP_WRITE_SAME:
+	case REQ_OP_WRITE_ZEROES:
+		return sizeof(struct dm_user_message);
+
+	/*
+	 * These ops are not passed to userspace under the assumption that
+	 * they're not going to be particularly useful in that context.
+	 */
+	default:
+		return -EOPNOTSUPP;
+	}
+}
+
+static inline long bio_type_to_user_type(struct bio *bio)
+{
+	switch (bio_op(bio)) {
+	case REQ_OP_READ:
+		return DM_USER_REQ_MAP_READ;
+	case REQ_OP_WRITE:
+		return DM_USER_REQ_MAP_WRITE;
+	case REQ_OP_FLUSH:
+		return DM_USER_REQ_MAP_FLUSH;
+	case REQ_OP_DISCARD:
+		return DM_USER_REQ_MAP_DISCARD;
+	case REQ_OP_SECURE_ERASE:
+		return DM_USER_REQ_MAP_SECURE_ERASE;
+	case REQ_OP_WRITE_SAME:
+		return DM_USER_REQ_MAP_WRITE_SAME;
+	case REQ_OP_WRITE_ZEROES:
+		return DM_USER_REQ_MAP_WRITE_ZEROES;
+
+	/*
+	 * These ops are not passed to userspace under the assumption that
+	 * they're not going to be particularly useful in that context.
+	 */
+	default:
+		return -EOPNOTSUPP;
+	}
+}
+
+static inline long bio_flags_to_user_flags(struct bio *bio)
+{
+	u64 out = 0;
+	typeof(bio->bi_opf) opf = bio->bi_opf & ~REQ_OP_MASK;
+
+	if (opf & REQ_FAILFAST_DEV) {
+		opf &= ~REQ_FAILFAST_DEV;
+		out |= DM_USER_REQ_MAP_FLAG_FAILFAST_DEV;
+	}
+
+	if (opf & REQ_FAILFAST_TRANSPORT) {
+		opf &= ~REQ_FAILFAST_TRANSPORT;
+		out |= DM_USER_REQ_MAP_FLAG_FAILFAST_TRANSPORT;
+	}
+
+	if (opf & REQ_FAILFAST_DRIVER) {
+		opf &= ~REQ_FAILFAST_DRIVER;
+		out |= DM_USER_REQ_MAP_FLAG_FAILFAST_DRIVER;
+	}
+
+	if (opf & REQ_SYNC) {
+		opf &= ~REQ_SYNC;
+		out |= DM_USER_REQ_MAP_FLAG_SYNC;
+	}
+
+	if (opf & REQ_META) {
+		opf &= ~REQ_META;
+		out |= DM_USER_REQ_MAP_FLAG_META;
+	}
+
+	if (opf & REQ_PRIO) {
+		opf &= ~REQ_PRIO;
+		out |= DM_USER_REQ_MAP_FLAG_PRIO;
+	}
+
+	if (opf & REQ_NOMERGE) {
+		opf &= ~REQ_NOMERGE;
+		out |= DM_USER_REQ_MAP_FLAG_NOMERGE;
+	}
+
+	if (opf & REQ_IDLE) {
+		opf &= ~REQ_IDLE;
+		out |= DM_USER_REQ_MAP_FLAG_IDLE;
+	}
+
+	if (opf & REQ_INTEGRITY) {
+		opf &= ~REQ_INTEGRITY;
+		out |= DM_USER_REQ_MAP_FLAG_INTEGRITY;
+	}
+
+	if (opf & REQ_FUA) {
+		opf &= ~REQ_FUA;
+		out |= DM_USER_REQ_MAP_FLAG_FUA;
+	}
+
+	if (opf & REQ_PREFLUSH) {
+		opf &= ~REQ_PREFLUSH;
+		out |= DM_USER_REQ_MAP_FLAG_PREFLUSH;
+	}
+
+	if (opf & REQ_RAHEAD) {
+		opf &= ~REQ_RAHEAD;
+		out |= DM_USER_REQ_MAP_FLAG_RAHEAD;
+	}
+
+	if (opf & REQ_BACKGROUND) {
+		opf &= ~REQ_BACKGROUND;
+		out |= DM_USER_REQ_MAP_FLAG_BACKGROUND;
+	}
+
+	if (opf & REQ_NOWAIT) {
+		opf &= ~REQ_NOWAIT;
+		out |= DM_USER_REQ_MAP_FLAG_NOWAIT;
+	}
+
+	if (opf & REQ_NOUNMAP) {
+		opf &= ~REQ_NOUNMAP;
+		out |= DM_USER_REQ_MAP_FLAG_NOUNMAP;
+	}
+
+	if (unlikely(opf)) {
+		pr_warn("unsupported BIO type %x\n", opf);
+		return -EOPNOTSUPP;
+	}
+	WARN_ON(out < 0);
+	return out;
+}
+
+/*
+ * Not quite what's in blk-map.c, but instead what I thought the functions in
+ * blk-map did.  This one seems more generally useful and I think we could
+ * write the blk-map version in terms of this one.  The differences are that
+ * this has a return value that counts, and blk-map uses the BIO _all iters.
+ * Neither  advance the BIO iter but don't advance the IOV iter, which is a bit
+ * odd here.
+ */
+static ssize_t bio_copy_from_iter(struct bio *bio, struct iov_iter *iter)
+{
+	struct bio_vec bvec;
+	struct bvec_iter biter;
+	ssize_t out = 0;
+
+	bio_for_each_segment (bvec, bio, biter) {
+		ssize_t ret;
+
+		ret = copy_page_from_iter(bvec.bv_page, bvec.bv_offset,
+					  bvec.bv_len, iter);
+
+		/*
+		 * FIXME: I thought that IOV copies had a mechanism for
+		 * terminating early, if for example a signal came in while
+		 * sleeping waiting for a page to be mapped, but I don't see
+		 * where that would happen.
+		 */
+		WARN_ON(ret < 0);
+		out += ret;
+
+		if (!iov_iter_count(iter))
+			break;
+
+		if (ret < bvec.bv_len)
+			return ret;
+	}
+
+	return out;
+}
+
+static ssize_t bio_copy_to_iter(struct bio *bio, struct iov_iter *iter)
+{
+	struct bio_vec bvec;
+	struct bvec_iter biter;
+	ssize_t out = 0;
+
+	bio_for_each_segment (bvec, bio, biter) {
+		ssize_t ret;
+
+		ret = copy_page_to_iter(bvec.bv_page, bvec.bv_offset,
+					bvec.bv_len, iter);
+
+		/* as above */
+		WARN_ON(ret < 0);
+		out += ret;
+
+		if (!iov_iter_count(iter))
+			break;
+
+		if (ret < bvec.bv_len)
+			return ret;
+	}
+
+	return out;
+}
+
+static ssize_t msg_copy_to_iov(struct message *msg, struct iov_iter *to)
+{
+	ssize_t copied = 0;
+
+	if (!iov_iter_count(to))
+		return 0;
+
+	if (msg->posn_to_user < sizeof(msg->msg)) {
+		copied = copy_to_iter((char *)(&msg->msg) + msg->posn_to_user,
+				      sizeof(msg->msg) - msg->posn_to_user, to);
+	} else {
+		copied = bio_copy_to_iter(msg->bio, to);
+		if (copied > 0)
+			bio_advance(msg->bio, copied);
+	}
+
+	if (copied < 0)
+		return copied;
+
+	msg->posn_to_user += copied;
+	return copied;
+}
+
+static ssize_t msg_copy_from_iov(struct message *msg, struct iov_iter *from)
+{
+	ssize_t copied = 0;
+
+	if (!iov_iter_count(from))
+		return 0;
+
+	if (msg->posn_from_user < sizeof(msg->msg)) {
+		copied = copy_from_iter(
+			(char *)(&msg->msg) + msg->posn_from_user,
+			sizeof(msg->msg) - msg->posn_from_user, from);
+	} else {
+		copied = bio_copy_from_iter(msg->bio, from);
+		if (copied > 0)
+			bio_advance(msg->bio, copied);
+	}
+
+	if (copied < 0)
+		return copied;
+
+	msg->posn_from_user += copied;
+	return copied;
+}
+
+static struct message *msg_get_map(struct target *t)
+{
+	struct message *m;
+
+	lockdep_assert_held(&t->lock);
+
+	m = mempool_alloc(&t->message_pool, GFP_NOIO);
+	m->msg.seq = t->next_seq_to_map++;
+	INIT_LIST_HEAD(&m->to_user);
+	INIT_LIST_HEAD(&m->from_user);
+	return m;
+}
+
+static struct message *msg_get_to_user(struct target *t)
+{
+	struct message *m;
+
+	lockdep_assert_held(&t->lock);
+
+	if (list_empty(&t->to_user))
+		return NULL;
+
+	m = list_first_entry(&t->to_user, struct message, to_user);
+	list_del(&m->to_user);
+	return m;
+}
+
+static struct message *msg_get_from_user(struct channel *c, u64 seq)
+{
+	struct message *m;
+	struct list_head *cur, *tmp;
+
+	lockdep_assert_held(&c->lock);
+
+	list_for_each_safe (cur, tmp, &c->from_user) {
+		m = list_entry(cur, struct message, from_user);
+		if (m->msg.seq == seq) {
+			list_del(&m->from_user);
+			return m;
+		}
+	}
+
+	return NULL;
+}
+
+static void message_kill(struct message *m, mempool_t *pool)
+{
+	m->bio->bi_status = BLK_STS_IOERR;
+	bio_endio(m->bio);
+	bio_put(m->bio);
+	mempool_free(m, pool);
+}
+
+/*
+ * Returns 0 when there is no work left to do.  This must be callable without
+ * holding the target lock, as it is part of the waitqueue's check expression.
+ * When called without the lock it may spuriously indicate there is remaining
+ * work, but when called with the lock it must be accurate.
+ */
+static int target_poll(struct target *t)
+{
+	return !list_empty(&t->to_user) || t->dm_destroyed;
+}
+
+static void target_release(struct kref *ref)
+{
+	struct target *t = container_of(ref, struct target, references);
+	struct list_head *cur, *tmp;
+
+	/*
+	 * There may be outstanding BIOs that have not yet been given to
+	 * userspace.  At this point there's nothing we can do about them, as
+	 * there are and will never be any channels.
+	 */
+	list_for_each_safe (cur, tmp, &t->to_user) {
+		message_kill(list_entry(cur, struct message, to_user),
+			     &t->message_pool);
+	}
+
+	mempool_exit(&t->message_pool);
+	mutex_unlock(&t->lock);
+	mutex_destroy(&t->lock);
+	kfree(t);
+}
+
+static void target_put(struct target *t)
+{
+	/*
+	 * This both releases a reference to the target and the lock.  We leave
+	 * it up to the caller to hold the lock, as they probably needed it for
+	 * something else.
+	 */
+	lockdep_assert_held(&t->lock);
+
+	if (!kref_put(&t->references, target_release))
+		mutex_unlock(&t->lock);
+}
+
+static struct channel *channel_alloc(struct target *t)
+{
+	struct channel *c;
+
+	lockdep_assert_held(&t->lock);
+
+	c = kzalloc(sizeof(*c), GFP_KERNEL);
+	if (c == NULL)
+		return NULL;
+
+	kref_get(&t->references);
+	c->target = t;
+	c->cur_from_user = &c->scratch_message_from_user;
+	mutex_init(&c->lock);
+	INIT_LIST_HEAD(&c->from_user);
+	return c;
+}
+
+static void channel_free(struct channel *c)
+{
+	struct list_head *cur, *tmp;
+
+	lockdep_assert_held(&c->lock);
+
+	/*
+	 * There may be outstanding BIOs that have been given to userspace but
+	 * have not yet been completed.  The channel has been shut down so
+	 * there's no way to process the rest of those messages, so we just go
+	 * ahead and error out the BIOs.  Hopefully whatever's on the other end
+	 * can handle the errors.  One could imagine splitting the BIOs and
+	 * completing as much as we got, but that seems like overkill here.
+	 *
+	 * Our only other options would be to let the BIO hang around (which
+	 * seems way worse) or to resubmit it to userspace in the hope there's
+	 * another channel.  I don't really like the idea of submitting a
+	 * message twice.
+	 */
+	if (c->cur_to_user != NULL)
+		message_kill(c->cur_to_user, &c->target->message_pool);
+	if (c->cur_from_user != &c->scratch_message_from_user)
+		message_kill(c->cur_from_user, &c->target->message_pool);
+	list_for_each_safe (cur, tmp, &c->from_user)
+		message_kill(list_entry(cur, struct message, from_user),
+			     &c->target->message_pool);
+
+	mutex_lock(&c->target->lock);
+	target_put(c->target);
+	mutex_unlock(&c->lock);
+	mutex_destroy(&c->lock);
+	kfree(c);
+}
+
+static int dev_open(struct inode *inode, struct file *file)
+{
+	struct channel *c;
+	struct target *t;
+
+	/*
+	 * This is called by miscdev, which sets private_data to point to the
+	 * struct miscdevice that was opened.  The rest of our file operations
+	 * want to refer to the channel that's been opened, so we swap that
+	 * pointer out with a fresh channel.
+	 *
+	 * This is called with the miscdev lock held, which is also held while
+	 * registering/unregistering the miscdev.  The miscdev must be
+	 * registered for this to get called, which means there must be an
+	 * outstanding reference to the target, which means it cannot be freed
+	 * out from under us despite us not holding a reference yet.
+	 */
+	t = container_of(file->private_data, struct target, miscdev);
+	mutex_lock(&t->lock);
+	file->private_data = c = channel_alloc(t);
+
+	if (c == NULL) {
+		mutex_unlock(&t->lock);
+		return -ENOMEM;
+	}
+
+	mutex_unlock(&t->lock);
+	return 0;
+}
+
+static ssize_t dev_read(struct kiocb *iocb, struct iov_iter *to)
+{
+	struct channel *c = channel_from_file(iocb->ki_filp);
+	ssize_t total_processed = 0;
+	ssize_t processed;
+
+	mutex_lock(&c->lock);
+
+	if (unlikely(c->to_user_error)) {
+		total_processed = c->to_user_error;
+		goto cleanup_unlock;
+	}
+
+	if (c->cur_to_user == NULL) {
+		struct target *t = target_from_channel(c);
+
+		mutex_lock(&t->lock);
+
+		while (!target_poll(t)) {
+			int e;
+
+			mutex_unlock(&t->lock);
+			mutex_unlock(&c->lock);
+			e = wait_event_interruptible(t->wq, target_poll(t));
+			mutex_lock(&c->lock);
+			mutex_lock(&t->lock);
+
+			if (unlikely(e != 0)) {
+				/*
+				 * We haven't processed any bytes in either the
+				 * BIO or the IOV, so we can just terminate
+				 * right now.  Elsewhere in the kernel handles
+				 * restarting the syscall when appropriate.
+				 */
+				total_processed = e;
+				mutex_unlock(&t->lock);
+				goto cleanup_unlock;
+			}
+		}
+
+		if (unlikely(t->dm_destroyed)) {
+			/*
+			 * DM has destroyed this target, so just lock
+			 * the user out.  There's really nothing else
+			 * we can do here.  Note that we don't actually
+			 * tear any thing down until userspace has
+			 * closed the FD, as there may still be
+			 * outstanding BIOs.
+			 *
+			 * This is kind of a wacky error code to
+			 * return.  My goal was really just to try and
+			 * find something that wasn't likely to be
+			 * returned by anything else in the miscdev
+			 * path.  The message "block device required"
+			 * seems like a somewhat reasonable thing to
+			 * say when the target has disappeared out from
+			 * under us, but "not block" isn't sensible.
+			 */
+			c->to_user_error = total_processed = -ENOTBLK;
+			mutex_unlock(&t->lock);
+			goto cleanup_unlock;
+		}
+
+		/*
+		 * Ensures that accesses to the message data are not ordered
+		 * before the remote accesses that produce that message data.
+		 *
+		 * This pairs with the barrier in user_map(), via the
+		 * conditional within the while loop above. Also see the lack
+		 * of barrier in user_dtr(), which is why this can be after the
+		 * destroyed check.
+		 */
+		smp_rmb();
+
+		c->cur_to_user = msg_get_to_user(t);
+		WARN_ON(c->cur_to_user == NULL);
+		mutex_unlock(&t->lock);
+	}
+
+	processed = msg_copy_to_iov(c->cur_to_user, to);
+	total_processed += processed;
+
+	WARN_ON(c->cur_to_user->posn_to_user > c->cur_to_user->total_to_user);
+	if (c->cur_to_user->posn_to_user == c->cur_to_user->total_to_user) {
+		struct message *m = c->cur_to_user;
+
+		c->cur_to_user = NULL;
+		list_add_tail(&m->from_user, &c->from_user);
+	}
+
+cleanup_unlock:
+	mutex_unlock(&c->lock);
+	return total_processed;
+}
+
+static ssize_t dev_write(struct kiocb *iocb, struct iov_iter *from)
+{
+	struct channel *c = channel_from_file(iocb->ki_filp);
+	ssize_t total_processed = 0;
+	ssize_t processed;
+
+	mutex_lock(&c->lock);
+
+	if (unlikely(c->from_user_error)) {
+		total_processed = c->from_user_error;
+		goto cleanup_unlock;
+	}
+
+	/*
+	 * cur_from_user can never be NULL.  If there's no real message it must
+	 * point to the scratch space.
+	 */
+	WARN_ON(c->cur_from_user == NULL);
+	if (c->cur_from_user->posn_from_user < sizeof(struct dm_user_message)) {
+		struct message *msg, *old;
+
+		processed = msg_copy_from_iov(c->cur_from_user, from);
+		if (processed <= 0) {
+			pr_warn("msg_copy_from_iov() returned %zu\n",
+				processed);
+			c->from_user_error = -EINVAL;
+			goto cleanup_unlock;
+		}
+		total_processed += processed;
+
+		/*
+		 * In the unlikely event the user has provided us a very short
+		 * write, not even big enough to fill a message, just succeed.
+		 * We'll eventually build up enough bytes to do something.
+		 */
+		if (unlikely(c->cur_from_user->posn_from_user <
+			     sizeof(struct dm_user_message)))
+			goto cleanup_unlock;
+
+		old = c->cur_from_user;
+		mutex_lock(&c->target->lock);
+		msg = msg_get_from_user(c, c->cur_from_user->msg.seq);
+		if (msg == NULL) {
+			pr_info("user provided an invalid messag seq of %llx\n",
+				old->msg.seq);
+			mutex_unlock(&c->target->lock);
+			c->from_user_error = -EINVAL;
+			goto cleanup_unlock;
+		}
+		mutex_unlock(&c->target->lock);
+
+		WARN_ON(old->posn_from_user != sizeof(struct dm_user_message));
+		msg->posn_from_user = sizeof(struct dm_user_message);
+		msg->return_type = old->msg.type;
+		msg->return_flags = old->msg.flags;
+		WARN_ON(msg->posn_from_user > msg->total_from_user);
+		c->cur_from_user = msg;
+		WARN_ON(old != &c->scratch_message_from_user);
+	}
+
+	/*
+	 * Userspace can signal an error for single requests by overwriting the
+	 * seq field.
+	 */
+	switch (c->cur_from_user->return_type) {
+	case DM_USER_RESP_SUCCESS:
+		c->cur_from_user->bio->bi_status = BLK_STS_OK;
+		break;
+	case DM_USER_RESP_ERROR:
+	case DM_USER_RESP_UNSUPPORTED:
+	default:
+		c->cur_from_user->bio->bi_status = BLK_STS_IOERR;
+		goto finish_bio;
+	}
+
+	/*
+	 * The op was a success as far as userspace is concerned, so process
+	 * whatever data may come along with it.  The user may provide the BIO
+	 * data in multiple chunks, in which case we don't need to finish the
+	 * BIO.
+	 */
+	processed = msg_copy_from_iov(c->cur_from_user, from);
+	total_processed += processed;
+
+	if (c->cur_from_user->posn_from_user <
+	    c->cur_from_user->total_from_user)
+		goto cleanup_unlock;
+
+finish_bio:
+	/*
+	 * When we set up this message the BIO's size matched the
+	 * message size, if that's not still the case then something
+	 * has gone off the rails.
+	 */
+	WARN_ON(bio_size(c->cur_from_user->bio) != 0);
+	bio_endio(c->cur_from_user->bio);
+	bio_put(c->cur_from_user->bio);
+
+	/*
+	 * We don't actually need to take the target lock here, as all
+	 * we're doing is freeing the message and mempools have their
+	 * own lock.  Each channel has its ows scratch message.
+	 */
+	WARN_ON(c->cur_from_user == &c->scratch_message_from_user);
+	mempool_free(c->cur_from_user, &c->target->message_pool);
+	c->scratch_message_from_user.posn_from_user = 0;
+	c->cur_from_user = &c->scratch_message_from_user;
+
+cleanup_unlock:
+	mutex_unlock(&c->lock);
+	return total_processed;
+}
+
+static int dev_release(struct inode *inode, struct file *file)
+{
+	struct channel *c;
+
+	c = channel_from_file(file);
+	mutex_lock(&c->lock);
+	channel_free(c);
+
+	return 0;
+}
+
+static const struct file_operations file_operations = {
+	.owner = THIS_MODULE,
+	.open = dev_open,
+	.llseek = no_llseek,
+	.read_iter = dev_read,
+	.write_iter = dev_write,
+	.release = dev_release,
+};
+
+static int user_ctr(struct dm_target *ti, unsigned int argc, char **argv)
+{
+	struct target *t;
+	int r;
+
+	if (argc != 3) {
+		ti->error = "Invalid argument count";
+		r = -EINVAL;
+		goto cleanup_none;
+	}
+
+	t = kzalloc(sizeof(*t), GFP_KERNEL);
+	if (t == NULL) {
+		r = -ENOMEM;
+		goto cleanup_none;
+	}
+	ti->private = t;
+
+	/* Enable more BIO types. */
+	ti->num_discard_bios = 1;
+	ti->discards_supported = true;
+	ti->num_flush_bios = 1;
+	ti->flush_supported = true;
+
+	/*
+	 * We begin with a single reference to the target, which is miscdev's
+	 * reference.  This ensures that the target won't be freed
+	 * until after the miscdev has been unregistered and all extant
+	 * channels have been closed.
+	 */
+	kref_init(&t->references);
+	kref_get(&t->references);
+
+	mutex_init(&t->lock);
+	init_waitqueue_head(&t->wq);
+	INIT_LIST_HEAD(&t->to_user);
+	mempool_init_kmalloc_pool(&t->message_pool, MAX_OUTSTANDING_MESSAGES,
+				  sizeof(struct message));
+
+	t->miscdev.minor = MISC_DYNAMIC_MINOR;
+	t->miscdev.fops = &file_operations;
+	t->miscdev.name = kasprintf(GFP_KERNEL, "dm-user/%s", argv[2]);
+	if (t->miscdev.name == NULL) {
+		r = -ENOMEM;
+		goto cleanup_message_pool;
+	}
+
+	/*
+	 * Once the miscdev is registered it can be opened and therefor
+	 * concurrent references to the channel can happen.  Holding the target
+	 * lock during misc_register() could deadlock.  If registration
+	 * succeeds then we will not access the target again so we just stick a
+	 * barrier here, which pairs with taking the target lock everywhere
+	 * else the target is accessed.
+	 *
+	 * I forgot where we ended up on the RCpc/RCsc locks.  IIU RCsc locks
+	 * would mean that we could take the target lock earlier and release it
+	 * here instead of the memory barrier.  I'm not sure that's any better,
+	 * though, and this isn't on a hot path so it probably doesn't matter
+	 * either way.
+	 */
+	smp_mb();
+
+	r = misc_register(&t->miscdev);
+	if (r) {
+		DMERR("Unable to register miscdev %s for dm-user",
+		      t->miscdev.name);
+		r = -ENOMEM;
+		goto cleanup_misc_name;
+	}
+
+	return 0;
+
+cleanup_misc_name:
+	kfree(t->miscdev.name);
+cleanup_message_pool:
+	mempool_exit(&t->message_pool);
+	kfree(t);
+cleanup_none:
+	return r;
+}
+
+static void user_dtr(struct dm_target *ti)
+{
+	struct target *t = target_from_target(ti);
+
+	/*
+	 * Removes the miscdev.  This must be called without the target lock
+	 * held to avoid a possible deadlock because our open implementation is
+	 * called holding the miscdev lock and must later take the target lock.
+	 *
+	 * There is no race here because only DM can register/unregister the
+	 * miscdev, and DM ensures that doesn't happen twice.  The internal
+	 * miscdev lock is sufficient to ensure there are no races between
+	 * deregistering the miscdev and open.
+	 */
+	misc_deregister(&t->miscdev);
+
+	/*
+	 * We are now free to take the target's lock and drop our reference to
+	 * the target.  There are almost certainly tasks sleeping in read on at
+	 * least one of the channels associated with this target, this
+	 * explicitly wakes them up and terminates the read.
+	 */
+	mutex_lock(&t->lock);
+	/*
+	 * No barrier here, as wait/wake ensures that the flag visibility is
+	 * correct WRT the wake/sleep state of the target tasks.
+	 */
+	t->dm_destroyed = true;
+	wake_up_all(&t->wq);
+	target_put(t);
+}
+
+/*
+ * Consumes a BIO from device mapper, queueing it up for userspace.
+ */
+static int user_map(struct dm_target *ti, struct bio *bio)
+{
+	struct target *t;
+	struct message *entry;
+
+	t = target_from_target(ti);
+	/*
+	 * FIXME
+	 *
+	 * This seems like a bad idea.  Specifically, here we're
+	 * directly on the IO path when we take the target lock, which may also
+	 * be taken from a user context.  The user context doesn't actively
+	 * trigger anything that may sleep while holding the lock, but this
+	 * still seems like a bad idea.
+	 *
+	 * The obvious way to fix this would be to use a proper queue, which
+	 * would result in no shared locks between the direct IO path and user
+	 * tasks.  I had a version that did this, but the head-of-line blocking
+	 * from the circular buffer resulted in us needing a fairly large
+	 * allocation in order to avoid situations in which the queue fills up
+	 * and everything goes off the rails.
+	 *
+	 * I could jump through a some hoops to avoid a shared lock while still
+	 * allowing for a large queue, but I'm not actually sure that allowing
+	 * for very large queues is the right thing to do here.  Intuitively it
+	 * seems better to keep the queues small in here (essentially sized to
+	 * the user latency for performance reasons only) and rely on returning
+	 * DM_MAPIO_REQUEUE regularly, as that would give the rest of the
+	 * kernel more information.
+	 *
+	 * I'll spend some time trying to figure out what's going on with
+	 * DM_MAPIO_REQUEUE, but if someone has a better idea of how to fix
+	 * this I'm all ears.
+	 */
+	mutex_lock(&t->lock);
+
+	/*
+	 * FIXME
+	 *
+	 * The assumption here is that there's no benefit to returning
+	 * DM_MAPIO_KILL as opposed to just erroring out the BIO, but I'm not
+	 * sure that's actually true -- for example, I could imagine users
+	 * expecting that submitted BIOs are unlikely to fail and therefor
+	 * relying on submission failure to indicate an unsupported type.
+	 *
+	 * There's two ways I can think of to fix this:
+	 *   - Add DM arguments that are parsed during the constructor that
+	 *     allow various dm_target flags to be set that indicate the op
+	 *     types supported by this target.  This may make sense for things
+	 *     like discard, where DM can already transform the BIOs to a form
+	 *     that's likely to be supported.
+	 *   - Some sort of pre-filter that allows userspace to hook in here
+	 *     and kill BIOs before marking them as submitted.  My guess would
+	 *     be that a userspace round trip is a bad idea here, but a BPF
+	 *     call seems resonable.
+	 *
+	 * My guess is that we'd likely want to do both.  The first one is easy
+	 * and gives DM the proper info, so it seems better.  The BPF call
+	 * seems overly complex for just this, but one could imagine wanting to
+	 * sometimes return _MAPPED and a BPF filter would be the way to do
+	 * that.
+	 *
+	 * For example, in Android we have an in-kernel DM device called
+	 * "dm-bow" that takes advange of some portion of the space that has
+	 * been discarded on a device to provide opportunistic block-level
+	 * backups.  While one could imagine just implementing this entirely in
+	 * userspace, that would come with an appreciable performance penalty.
+	 * Instead one could keep a BPF program that forwards most accesses
+	 * directly to the backing block device while informing a userspace
+	 * daemon of any discarded space and on writes to blocks that are to be
+	 * backed up.
+	 */
+	if (unlikely((bio_type_to_user_type(bio) < 0) ||
+		     (bio_flags_to_user_flags(bio) < 0))) {
+		mutex_unlock(&t->lock);
+		return DM_MAPIO_KILL;
+	}
+
+	entry = msg_get_map(t);
+	if (unlikely(entry == NULL)) {
+		mutex_unlock(&t->lock);
+		return DM_MAPIO_REQUEUE;
+	}
+
+	bio_get(bio);
+	entry->msg.type = bio_type_to_user_type(bio);
+	entry->msg.flags = bio_flags_to_user_flags(bio);
+	entry->msg.sector = bio->bi_iter.bi_sector;
+	entry->msg.len = bio_size(bio);
+	entry->bio = bio;
+	entry->posn_to_user = 0;
+	entry->total_to_user = bio_bytes_needed_to_user(bio);
+	entry->posn_from_user = 0;
+	entry->total_from_user = bio_bytes_needed_from_user(bio);
+	/* Pairs with the barrier in dev_read() */
+	smp_wmb();
+	list_add_tail(&entry->to_user, &t->to_user);
+	wake_up_interruptible(&t->wq);
+	mutex_unlock(&t->lock);
+	return DM_MAPIO_SUBMITTED;
+}
+
+static struct target_type user_target = {
+	.name = "user",
+	.version = { 1, 0, 0 },
+	.module = THIS_MODULE,
+	.ctr = user_ctr,
+	.dtr = user_dtr,
+	.map = user_map,
+};
+
+static int __init dm_user_init(void)
+{
+	int r;
+
+	r = dm_register_target(&user_target);
+	if (r) {
+		DMERR("register failed %d", r);
+		goto error;
+	}
+
+	return 0;
+
+error:
+	return r;
+}
+
+static void __exit dm_user_exit(void)
+{
+	dm_unregister_target(&user_target);
+}
+
+module_init(dm_user_init);
+module_exit(dm_user_exit);
+MODULE_AUTHOR("Palmer Dabbelt <palmerdabbelt@google.com>");
+MODULE_DESCRIPTION(DM_NAME " target returning blocks from userspace");
+MODULE_LICENSE("GPL");
diff --git a/drivers/md/dm-verity-avb.c b/drivers/md/dm-verity-avb.c
new file mode 100644
index 0000000..a9f102a
--- /dev/null
+++ b/drivers/md/dm-verity-avb.c
@@ -0,0 +1,229 @@
+/*
+ * Copyright (C) 2017 Google.
+ *
+ * This file is released under the GPLv2.
+ *
+ * Based on drivers/md/dm-verity-chromeos.c
+ */
+
+#include <linux/device-mapper.h>
+#include <linux/module.h>
+#include <linux/mount.h>
+
+#define DM_MSG_PREFIX "verity-avb"
+
+/* Set via module parameters. */
+static char avb_vbmeta_device[64];
+static char avb_invalidate_on_error[4];
+
+static void invalidate_vbmeta_endio(struct bio *bio)
+{
+	if (bio->bi_status)
+		DMERR("invalidate_vbmeta_endio: error %d", bio->bi_status);
+	complete(bio->bi_private);
+}
+
+static int invalidate_vbmeta_submit(struct bio *bio,
+				    struct block_device *bdev,
+				    int op, int access_last_sector,
+				    struct page *page)
+{
+	DECLARE_COMPLETION_ONSTACK(wait);
+
+	bio->bi_private = &wait;
+	bio->bi_end_io = invalidate_vbmeta_endio;
+	bio_set_dev(bio, bdev);
+	bio_set_op_attrs(bio, op, REQ_SYNC);
+
+	bio->bi_iter.bi_sector = 0;
+	if (access_last_sector) {
+		sector_t last_sector;
+
+		last_sector = (i_size_read(bdev->bd_inode)>>SECTOR_SHIFT) - 1;
+		bio->bi_iter.bi_sector = last_sector;
+	}
+	if (!bio_add_page(bio, page, PAGE_SIZE, 0)) {
+		DMERR("invalidate_vbmeta_submit: bio_add_page error");
+		return -EIO;
+	}
+
+	submit_bio(bio);
+	/* Wait up to 2 seconds for completion or fail. */
+	if (!wait_for_completion_timeout(&wait, msecs_to_jiffies(2000)))
+		return -EIO;
+	return 0;
+}
+
+static int invalidate_vbmeta(dev_t vbmeta_devt)
+{
+	int ret = 0;
+	struct block_device *bdev;
+	struct bio *bio;
+	struct page *page;
+	fmode_t dev_mode;
+	/* Ensure we do synchronous unblocked I/O. We may also need
+	 * sync_bdev() on completion, but it really shouldn't.
+	 */
+	int access_last_sector = 0;
+
+	DMINFO("invalidate_vbmeta: acting on device %d:%d",
+	       MAJOR(vbmeta_devt), MINOR(vbmeta_devt));
+
+	/* First we open the device for reading. */
+	dev_mode = FMODE_READ | FMODE_EXCL;
+	bdev = blkdev_get_by_dev(vbmeta_devt, dev_mode,
+				 invalidate_vbmeta);
+	if (IS_ERR(bdev)) {
+		DMERR("invalidate_kernel: could not open device for reading");
+		dev_mode = 0;
+		ret = -ENOENT;
+		goto failed_to_read;
+	}
+
+	bio = bio_alloc(GFP_NOIO, 1);
+	if (!bio) {
+		ret = -ENOMEM;
+		goto failed_bio_alloc;
+	}
+
+	page = alloc_page(GFP_NOIO);
+	if (!page) {
+		ret = -ENOMEM;
+		goto failed_to_alloc_page;
+	}
+
+	access_last_sector = 0;
+	ret = invalidate_vbmeta_submit(bio, bdev, REQ_OP_READ,
+				       access_last_sector, page);
+	if (ret) {
+		DMERR("invalidate_vbmeta: error reading");
+		goto failed_to_submit_read;
+	}
+
+	/* We have a page. Let's make sure it looks right. */
+	if (memcmp("AVB0", page_address(page), 4) == 0) {
+		/* Stamp it. */
+		memcpy(page_address(page), "AVE0", 4);
+		DMINFO("invalidate_vbmeta: found vbmeta partition");
+	} else {
+		/* Could be this is on a AVB footer, check. Also, since the
+		 * AVB footer is in the last 64 bytes, adjust for the fact that
+		 * we're dealing with 512-byte sectors.
+		 */
+		size_t offset = (1<<SECTOR_SHIFT) - 64;
+
+		access_last_sector = 1;
+		ret = invalidate_vbmeta_submit(bio, bdev, REQ_OP_READ,
+					       access_last_sector, page);
+		if (ret) {
+			DMERR("invalidate_vbmeta: error reading");
+			goto failed_to_submit_read;
+		}
+		if (memcmp("AVBf", page_address(page) + offset, 4) != 0) {
+			DMERR("invalidate_vbmeta on non-vbmeta partition");
+			ret = -EINVAL;
+			goto invalid_header;
+		}
+		/* Stamp it. */
+		memcpy(page_address(page) + offset, "AVE0", 4);
+		DMINFO("invalidate_vbmeta: found vbmeta footer partition");
+	}
+
+	/* Now rewrite the changed page - the block dev was being
+	 * changed on read. Let's reopen here.
+	 */
+	blkdev_put(bdev, dev_mode);
+	dev_mode = FMODE_WRITE | FMODE_EXCL;
+	bdev = blkdev_get_by_dev(vbmeta_devt, dev_mode,
+				 invalidate_vbmeta);
+	if (IS_ERR(bdev)) {
+		DMERR("invalidate_vbmeta: could not open device for writing");
+		dev_mode = 0;
+		ret = -ENOENT;
+		goto failed_to_write;
+	}
+
+	/* We re-use the same bio to do the write after the read. Need to reset
+	 * it to initialize bio->bi_remaining.
+	 */
+	bio_reset(bio);
+
+	ret = invalidate_vbmeta_submit(bio, bdev, REQ_OP_WRITE,
+				       access_last_sector, page);
+	if (ret) {
+		DMERR("invalidate_vbmeta: error writing");
+		goto failed_to_submit_write;
+	}
+
+	DMERR("invalidate_vbmeta: completed.");
+	ret = 0;
+failed_to_submit_write:
+failed_to_write:
+invalid_header:
+	__free_page(page);
+failed_to_submit_read:
+	/* Technically, we'll leak a page with the pending bio, but
+	 * we're about to reboot anyway.
+	 */
+failed_to_alloc_page:
+	bio_put(bio);
+failed_bio_alloc:
+	if (dev_mode)
+		blkdev_put(bdev, dev_mode);
+failed_to_read:
+	return ret;
+}
+
+void dm_verity_avb_error_handler(void)
+{
+	dev_t dev;
+
+	DMINFO("AVB error handler called for %s", avb_vbmeta_device);
+
+	if (strcmp(avb_invalidate_on_error, "yes") != 0) {
+		DMINFO("Not configured to invalidate");
+		return;
+	}
+
+	if (avb_vbmeta_device[0] == '\0') {
+		DMERR("avb_vbmeta_device parameter not set");
+		goto fail_no_dev;
+	}
+
+	dev = name_to_dev_t(avb_vbmeta_device);
+	if (!dev) {
+		DMERR("No matching partition for device: %s",
+		      avb_vbmeta_device);
+		goto fail_no_dev;
+	}
+
+	invalidate_vbmeta(dev);
+
+fail_no_dev:
+	;
+}
+
+static int __init dm_verity_avb_init(void)
+{
+	DMINFO("AVB error handler initialized with vbmeta device: %s",
+	       avb_vbmeta_device);
+	return 0;
+}
+
+static void __exit dm_verity_avb_exit(void)
+{
+}
+
+module_init(dm_verity_avb_init);
+module_exit(dm_verity_avb_exit);
+
+MODULE_AUTHOR("David Zeuthen <zeuthen@google.com>");
+MODULE_DESCRIPTION("AVB-specific error handler for dm-verity");
+MODULE_LICENSE("GPL");
+
+/* Declare parameter with no module prefix */
+#undef MODULE_PARAM_PREFIX
+#define MODULE_PARAM_PREFIX	"androidboot.vbmeta."
+module_param_string(device, avb_vbmeta_device, sizeof(avb_vbmeta_device), 0);
+module_param_string(invalidate_on_error, avb_invalidate_on_error,
+		    sizeof(avb_invalidate_on_error), 0);
diff --git a/drivers/md/dm-verity-target.c b/drivers/md/dm-verity-target.c
index 2aeb922..3dc43c8 100644
--- a/drivers/md/dm-verity-target.c
+++ b/drivers/md/dm-verity-target.c
@@ -251,8 +251,12 @@ static int verity_handle_err(struct dm_verity *v, enum verity_block_type type,
 	if (v->mode == DM_VERITY_MODE_LOGGING)
 		return 0;
 
-	if (v->mode == DM_VERITY_MODE_RESTART)
+	if (v->mode == DM_VERITY_MODE_RESTART) {
+#ifdef CONFIG_DM_VERITY_AVB
+		dm_verity_avb_error_handler();
+#endif
 		kernel_restart("dm-verity device corrupted");
+	}
 
 	return 1;
 }
diff --git a/drivers/md/dm-verity.h b/drivers/md/dm-verity.h
index 641b9e3..adbd64f 100644
--- a/drivers/md/dm-verity.h
+++ b/drivers/md/dm-verity.h
@@ -128,4 +128,6 @@ extern int verity_hash(struct dm_verity *v, struct ahash_request *req,
 extern int verity_hash_for_block(struct dm_verity *v, struct dm_verity_io *io,
 				 sector_t block, u8 *digest, bool *is_zero);
 
+extern void dm_verity_avb_error_handler(void);
+
 #endif /* DM_VERITY_H */
diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c
index e6b0039d..61b7d7b 100644
--- a/drivers/md/dm-zoned-metadata.c
+++ b/drivers/md/dm-zoned-metadata.c
@@ -1089,9 +1089,10 @@ static int dmz_load_sb(struct dmz_metadata *zmd)
 /*
  * Initialize a zone descriptor.
  */
-static int dmz_init_zone(struct dmz_metadata *zmd, struct dm_zone *zone,
-			 struct blk_zone *blkz)
+static int dmz_init_zone(struct blk_zone *blkz, unsigned int idx, void *data)
 {
+	struct dmz_metadata *zmd = data;
+	struct dm_zone *zone = &zmd->zones[idx];
 	struct dmz_dev *dev = zmd->dev;
 
 	/* Ignore the eventual last runt (smaller) zone */
@@ -1105,25 +1106,28 @@ static int dmz_init_zone(struct dmz_metadata *zmd, struct dm_zone *zone,
 	atomic_set(&zone->refcount, 0);
 	zone->chunk = DMZ_MAP_UNMAPPED;
 
-	if (blkz->type == BLK_ZONE_TYPE_CONVENTIONAL) {
+	switch (blkz->type) {
+	case BLK_ZONE_TYPE_CONVENTIONAL:
 		set_bit(DMZ_RND, &zone->flags);
-	} else if (blkz->type == BLK_ZONE_TYPE_SEQWRITE_REQ ||
-		   blkz->type == BLK_ZONE_TYPE_SEQWRITE_PREF) {
+		break;
+	case BLK_ZONE_TYPE_SEQWRITE_REQ:
+	case BLK_ZONE_TYPE_SEQWRITE_PREF:
 		set_bit(DMZ_SEQ, &zone->flags);
-	} else
+		break;
+	default:
 		return -ENXIO;
-
-	if (blkz->cond == BLK_ZONE_COND_OFFLINE)
-		set_bit(DMZ_OFFLINE, &zone->flags);
-	else if (blkz->cond == BLK_ZONE_COND_READONLY)
-		set_bit(DMZ_READ_ONLY, &zone->flags);
+	}
 
 	if (dmz_is_rnd(zone))
 		zone->wp_block = 0;
 	else
 		zone->wp_block = dmz_sect2blk(blkz->wp - blkz->start);
 
-	if (!dmz_is_offline(zone) && !dmz_is_readonly(zone)) {
+	if (blkz->cond == BLK_ZONE_COND_OFFLINE)
+		set_bit(DMZ_OFFLINE, &zone->flags);
+	else if (blkz->cond == BLK_ZONE_COND_READONLY)
+		set_bit(DMZ_READ_ONLY, &zone->flags);
+	else {
 		zmd->nr_useable_zones++;
 		if (dmz_is_rnd(zone)) {
 			zmd->nr_rnd_zones++;
@@ -1147,23 +1151,13 @@ static void dmz_drop_zones(struct dmz_metadata *zmd)
 }
 
 /*
- * The size of a zone report in number of zones.
- * This results in 4096*64B=256KB report zones commands.
- */
-#define DMZ_REPORT_NR_ZONES	4096
-
-/*
  * Allocate and initialize zone descriptors using the zone
  * information from disk.
  */
 static int dmz_init_zones(struct dmz_metadata *zmd)
 {
 	struct dmz_dev *dev = zmd->dev;
-	struct dm_zone *zone;
-	struct blk_zone *blkz;
-	unsigned int nr_blkz;
-	sector_t sector = 0;
-	int i, ret = 0;
+	int ret;
 
 	/* Init */
 	zmd->zone_bitmap_size = dev->zone_nr_blocks >> 3;
@@ -1180,54 +1174,38 @@ static int dmz_init_zones(struct dmz_metadata *zmd)
 	dmz_dev_info(dev, "Using %zu B for zone information",
 		     sizeof(struct dm_zone) * dev->nr_zones);
 
-	/* Get zone information */
-	nr_blkz = DMZ_REPORT_NR_ZONES;
-	blkz = kcalloc(nr_blkz, sizeof(struct blk_zone), GFP_KERNEL);
-	if (!blkz) {
-		ret = -ENOMEM;
-		goto out;
-	}
-
 	/*
-	 * Get zone information and initialize zone descriptors.
-	 * At the same time, determine where the super block
-	 * should be: first block of the first randomly writable
-	 * zone.
+	 * Get zone information and initialize zone descriptors.  At the same
+	 * time, determine where the super block should be: first block of the
+	 * first randomly writable zone.
 	 */
-	zone = zmd->zones;
-	while (sector < dev->capacity) {
-		/* Get zone information */
-		nr_blkz = DMZ_REPORT_NR_ZONES;
-		ret = blkdev_report_zones(dev->bdev, sector, blkz, &nr_blkz);
-		if (ret) {
-			dmz_dev_err(dev, "Report zones failed %d", ret);
-			goto out;
-		}
-
-		if (!nr_blkz)
-			break;
-
-		/* Process report */
-		for (i = 0; i < nr_blkz; i++) {
-			ret = dmz_init_zone(zmd, zone, &blkz[i]);
-			if (ret)
-				goto out;
-			sector += dev->zone_nr_sectors;
-			zone++;
-		}
-	}
-
-	/* The entire zone configuration of the disk should now be known */
-	if (sector < dev->capacity) {
-		dmz_dev_err(dev, "Failed to get correct zone information");
-		ret = -ENXIO;
-	}
-out:
-	kfree(blkz);
-	if (ret)
+	ret = blkdev_report_zones(dev->bdev, 0, BLK_ALL_ZONES, dmz_init_zone,
+				  zmd);
+	if (ret < 0) {
 		dmz_drop_zones(zmd);
+		return ret;
+	}
 
-	return ret;
+	return 0;
+}
+
+static int dmz_update_zone_cb(struct blk_zone *blkz, unsigned int idx,
+			      void *data)
+{
+	struct dm_zone *zone = data;
+
+	clear_bit(DMZ_OFFLINE, &zone->flags);
+	clear_bit(DMZ_READ_ONLY, &zone->flags);
+	if (blkz->cond == BLK_ZONE_COND_OFFLINE)
+		set_bit(DMZ_OFFLINE, &zone->flags);
+	else if (blkz->cond == BLK_ZONE_COND_READONLY)
+		set_bit(DMZ_READ_ONLY, &zone->flags);
+
+	if (dmz_is_seq(zone))
+		zone->wp_block = dmz_sect2blk(blkz->wp - blkz->start);
+	else
+		zone->wp_block = 0;
+	return 0;
 }
 
 /*
@@ -1235,9 +1213,7 @@ static int dmz_init_zones(struct dmz_metadata *zmd)
  */
 static int dmz_update_zone(struct dmz_metadata *zmd, struct dm_zone *zone)
 {
-	unsigned int nr_blkz = 1;
 	unsigned int noio_flag;
-	struct blk_zone blkz;
 	int ret;
 
 	/*
@@ -1247,30 +1223,19 @@ static int dmz_update_zone(struct dmz_metadata *zmd, struct dm_zone *zone)
 	 * GFP_NOIO was specified.
 	 */
 	noio_flag = memalloc_noio_save();
-	ret = blkdev_report_zones(zmd->dev->bdev, dmz_start_sect(zmd, zone),
-				  &blkz, &nr_blkz);
+	ret = blkdev_report_zones(zmd->dev->bdev, dmz_start_sect(zmd, zone), 1,
+				  dmz_update_zone_cb, zone);
 	memalloc_noio_restore(noio_flag);
-	if (!nr_blkz)
+
+	if (ret == 0)
 		ret = -EIO;
-	if (ret) {
+	if (ret < 0) {
 		dmz_dev_err(zmd->dev, "Get zone %u report failed",
 			    dmz_id(zmd, zone));
 		dmz_check_bdev(zmd->dev);
 		return ret;
 	}
 
-	clear_bit(DMZ_OFFLINE, &zone->flags);
-	clear_bit(DMZ_READ_ONLY, &zone->flags);
-	if (blkz.cond == BLK_ZONE_COND_OFFLINE)
-		set_bit(DMZ_OFFLINE, &zone->flags);
-	else if (blkz.cond == BLK_ZONE_COND_READONLY)
-		set_bit(DMZ_READ_ONLY, &zone->flags);
-
-	if (dmz_is_seq(zone))
-		zone->wp_block = dmz_sect2blk(blkz.wp - blkz.start);
-	else
-		zone->wp_block = 0;
-
 	return 0;
 }
 
@@ -1324,9 +1289,9 @@ static int dmz_reset_zone(struct dmz_metadata *zmd, struct dm_zone *zone)
 	if (!dmz_is_empty(zone) || dmz_seq_write_err(zone)) {
 		struct dmz_dev *dev = zmd->dev;
 
-		ret = blkdev_reset_zones(dev->bdev,
-					 dmz_start_sect(zmd, zone),
-					 dev->zone_nr_sectors, GFP_NOIO);
+		ret = blkdev_zone_mgmt(dev->bdev, REQ_OP_ZONE_RESET,
+				       dmz_start_sect(zmd, zone),
+				       dev->zone_nr_sectors, GFP_NOIO);
 		if (ret) {
 			dmz_dev_err(dev, "Reset zone %u failed %d",
 				    dmz_id(zmd, zone), ret);
diff --git a/drivers/md/dm-zoned-target.c b/drivers/md/dm-zoned-target.c
index 6e4f3ef..aa8de56 100644
--- a/drivers/md/dm-zoned-target.c
+++ b/drivers/md/dm-zoned-target.c
@@ -727,7 +727,7 @@ static int dmz_get_zoned_device(struct dm_target *ti, char *path)
 	dev->zone_nr_blocks = dmz_sect2blk(dev->zone_nr_sectors);
 	dev->zone_nr_blocks_shift = ilog2(dev->zone_nr_blocks);
 
-	dev->nr_zones = blkdev_nr_zones(dev->bdev);
+	dev->nr_zones = blkdev_nr_zones(dev->bdev->bd_disk);
 
 	dmz->dev = dev;
 
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index c6ce42d..d8565bc 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -26,6 +26,8 @@
 #include <linux/wait.h>
 #include <linux/pr.h>
 #include <linux/refcount.h>
+#include <linux/blk-crypto.h>
+#include <linux/keyslot-manager.h>
 
 #define DM_MSG_PREFIX "core"
 
@@ -442,14 +444,48 @@ static int dm_blk_getgeo(struct block_device *bdev, struct hd_geometry *geo)
 	return dm_get_geometry(md, geo);
 }
 
-static int dm_blk_report_zones(struct gendisk *disk, sector_t sector,
-			       struct blk_zone *zones, unsigned int *nr_zones)
-{
 #ifdef CONFIG_BLK_DEV_ZONED
+int dm_report_zones_cb(struct blk_zone *zone, unsigned int idx, void *data)
+{
+	struct dm_report_zones_args *args = data;
+	sector_t sector_diff = args->tgt->begin - args->start;
+
+	/*
+	 * Ignore zones beyond the target range.
+	 */
+	if (zone->start >= args->start + args->tgt->len)
+		return 0;
+
+	/*
+	 * Remap the start sector and write pointer position of the zone
+	 * to match its position in the target range.
+	 */
+	zone->start += sector_diff;
+	if (zone->type != BLK_ZONE_TYPE_CONVENTIONAL) {
+		if (zone->cond == BLK_ZONE_COND_FULL)
+			zone->wp = zone->start + zone->len;
+		else if (zone->cond == BLK_ZONE_COND_EMPTY)
+			zone->wp = zone->start;
+		else
+			zone->wp += sector_diff;
+	}
+
+	args->next_sector = zone->start + zone->len;
+	return args->orig_cb(zone, args->zone_idx++, args->orig_data);
+}
+EXPORT_SYMBOL_GPL(dm_report_zones_cb);
+
+static int dm_blk_report_zones(struct gendisk *disk, sector_t sector,
+		unsigned int nr_zones, report_zones_cb cb, void *data)
+{
 	struct mapped_device *md = disk->private_data;
-	struct dm_target *tgt;
 	struct dm_table *map;
 	int srcu_idx, ret;
+	struct dm_report_zones_args args = {
+		.next_sector = sector,
+		.orig_data = data,
+		.orig_cb = cb,
+	};
 
 	if (dm_suspended_md(md))
 		return -EAGAIN;
@@ -460,38 +496,30 @@ static int dm_blk_report_zones(struct gendisk *disk, sector_t sector,
 		goto out;
 	}
 
-	tgt = dm_table_find_target(map, sector);
-	if (!tgt) {
-		ret = -EIO;
-		goto out;
-	}
+	do {
+		struct dm_target *tgt;
 
-	/*
-	 * If we are executing this, we already know that the block device
-	 * is a zoned device and so each target should have support for that
-	 * type of drive. A missing report_zones method means that the target
-	 * driver has a problem.
-	 */
-	if (WARN_ON(!tgt->type->report_zones)) {
-		ret = -EIO;
-		goto out;
-	}
+		tgt = dm_table_find_target(map, args.next_sector);
+		if (WARN_ON_ONCE(!tgt->type->report_zones)) {
+			ret = -EIO;
+			goto out;
+		}
 
-	/*
-	 * blkdev_report_zones() will loop and call this again to cover all the
-	 * zones of the target, eventually moving on to the next target.
-	 * So there is no need to loop here trying to fill the entire array
-	 * of zones.
-	 */
-	ret = tgt->type->report_zones(tgt, sector, zones, nr_zones);
+		args.tgt = tgt;
+		ret = tgt->type->report_zones(tgt, &args, nr_zones);
+		if (ret < 0)
+			goto out;
+	} while (args.zone_idx < nr_zones &&
+		 args.next_sector < get_capacity(disk));
 
+	ret = args.zone_idx;
 out:
 	dm_put_live_table(md, srcu_idx);
 	return ret;
-#else
-	return -ENOTSUPP;
-#endif
 }
+#else
+#define dm_blk_report_zones		NULL
+#endif /* CONFIG_BLK_DEV_ZONED */
 
 static int dm_prepare_ioctl(struct mapped_device *md, int *srcu_idx,
 			    struct block_device **bdev)
@@ -1215,54 +1243,6 @@ void dm_accept_partial_bio(struct bio *bio, unsigned n_sectors)
 }
 EXPORT_SYMBOL_GPL(dm_accept_partial_bio);
 
-/*
- * The zone descriptors obtained with a zone report indicate
- * zone positions within the underlying device of the target. The zone
- * descriptors must be remapped to match their position within the dm device.
- * The caller target should obtain the zones information using
- * blkdev_report_zones() to ensure that remapping for partition offset is
- * already handled.
- */
-void dm_remap_zone_report(struct dm_target *ti, sector_t start,
-			  struct blk_zone *zones, unsigned int *nr_zones)
-{
-#ifdef CONFIG_BLK_DEV_ZONED
-	struct blk_zone *zone;
-	unsigned int nrz = *nr_zones;
-	int i;
-
-	/*
-	 * Remap the start sector and write pointer position of the zones in
-	 * the array. Since we may have obtained from the target underlying
-	 * device more zones that the target size, also adjust the number
-	 * of zones.
-	 */
-	for (i = 0; i < nrz; i++) {
-		zone = zones + i;
-		if (zone->start >= start + ti->len) {
-			memset(zone, 0, sizeof(struct blk_zone) * (nrz - i));
-			break;
-		}
-
-		zone->start = zone->start + ti->begin - start;
-		if (zone->type == BLK_ZONE_TYPE_CONVENTIONAL)
-			continue;
-
-		if (zone->cond == BLK_ZONE_COND_FULL)
-			zone->wp = zone->start + zone->len;
-		else if (zone->cond == BLK_ZONE_COND_EMPTY)
-			zone->wp = zone->start;
-		else
-			zone->wp = zone->wp + ti->begin - start;
-	}
-
-	*nr_zones = i;
-#else /* !CONFIG_BLK_DEV_ZONED */
-	*nr_zones = 0;
-#endif
-}
-EXPORT_SYMBOL_GPL(dm_remap_zone_report);
-
 static blk_qc_t __map_bio(struct dm_target_io *tio)
 {
 	int r;
@@ -1325,12 +1305,15 @@ static int clone_bio(struct dm_target_io *tio, struct bio *bio,
 		     sector_t sector, unsigned len)
 {
 	struct bio *clone = &tio->clone;
+	int r;
 
 	__bio_clone_fast(clone, bio);
 
-	if (bio_integrity(bio)) {
-		int r;
+	r = bio_crypt_clone(clone, bio, GFP_NOIO);
+	if (r < 0)
+		return r;
 
+	if (bio_integrity(bio)) {
 		if (unlikely(!dm_target_has_integrity(tio->ti->type) &&
 			     !dm_target_passes_integrity(tio->ti->type))) {
 			DMWARN("%s: the target %s doesn't support integrity data.",
@@ -1860,6 +1843,19 @@ static const struct dax_operations dm_dax_ops;
 
 static void dm_wq_work(struct work_struct *work);
 
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+static void dm_queue_destroy_keyslot_manager(struct request_queue *q)
+{
+	dm_destroy_keyslot_manager(q->ksm);
+}
+
+#else /* CONFIG_BLK_INLINE_ENCRYPTION */
+
+static inline void dm_queue_destroy_keyslot_manager(struct request_queue *q)
+{
+}
+#endif /* !CONFIG_BLK_INLINE_ENCRYPTION */
+
 static void cleanup_mapped_device(struct mapped_device *md)
 {
 	if (md->wq)
@@ -1881,8 +1877,10 @@ static void cleanup_mapped_device(struct mapped_device *md)
 		put_disk(md->disk);
 	}
 
-	if (md->queue)
+	if (md->queue) {
+		dm_queue_destroy_keyslot_manager(md->queue);
 		blk_cleanup_queue(md->queue);
+	}
 
 	cleanup_srcu_struct(&md->io_barrier);
 
diff --git a/drivers/media/common/videobuf2/videobuf2-v4l2.c b/drivers/media/common/videobuf2/videobuf2-v4l2.c
index 5a9ba38..e652f43 100644
--- a/drivers/media/common/videobuf2/videobuf2-v4l2.c
+++ b/drivers/media/common/videobuf2/videobuf2-v4l2.c
@@ -49,8 +49,11 @@ module_param(debug, int, 0644);
 				 V4L2_BUF_FLAG_REQUEST_FD | \
 				 V4L2_BUF_FLAG_TIMESTAMP_MASK)
 /* Output buffer flags that should be passed on to the driver */
-#define V4L2_BUFFER_OUT_FLAGS	(V4L2_BUF_FLAG_PFRAME | V4L2_BUF_FLAG_BFRAME | \
-				 V4L2_BUF_FLAG_KEYFRAME | V4L2_BUF_FLAG_TIMECODE)
+#define V4L2_BUFFER_OUT_FLAGS	(V4L2_BUF_FLAG_PFRAME | \
+				 V4L2_BUF_FLAG_BFRAME | \
+				 V4L2_BUF_FLAG_KEYFRAME | \
+				 V4L2_BUF_FLAG_TIMECODE | \
+				 V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF)
 
 /*
  * __verify_planes_array() - verify that the planes array passed in struct
@@ -194,6 +197,7 @@ static int vb2_fill_vb2_v4l2_buffer(struct vb2_buffer *vb, struct v4l2_buffer *b
 	}
 	vbuf->sequence = 0;
 	vbuf->request_fd = -1;
+	vbuf->is_held = false;
 
 	if (V4L2_TYPE_IS_MULTIPLANAR(b->type)) {
 		switch (b->memory) {
@@ -321,6 +325,8 @@ static int vb2_fill_vb2_v4l2_buffer(struct vb2_buffer *vb, struct v4l2_buffer *b
 		 */
 		vbuf->flags &= ~V4L2_BUF_FLAG_TIMECODE;
 		vbuf->field = b->field;
+		if (!(q->subsystem_flags & VB2_V4L2_FL_SUPPORTS_M2M_HOLD_CAPTURE_BUF))
+			vbuf->flags &= ~V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF;
 	} else {
 		/* Zero any output buffer flags as this is a capture buffer */
 		vbuf->flags &= ~V4L2_BUFFER_OUT_FLAGS;
@@ -654,6 +660,8 @@ static void fill_buf_caps(struct vb2_queue *q, u32 *caps)
 		*caps |= V4L2_BUF_CAP_SUPPORTS_USERPTR;
 	if (q->io_modes & VB2_DMABUF)
 		*caps |= V4L2_BUF_CAP_SUPPORTS_DMABUF;
+	if (q->subsystem_flags & VB2_V4L2_FL_SUPPORTS_M2M_HOLD_CAPTURE_BUF)
+		*caps |= V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF;
 #ifdef CONFIG_MEDIA_CONTROLLER_REQUEST_API
 	if (q->supports_requests)
 		*caps |= V4L2_BUF_CAP_SUPPORTS_REQUESTS;
diff --git a/drivers/media/rc/bpf-lirc.c b/drivers/media/rc/bpf-lirc.c
index 0a0ce62..68955a8 100644
--- a/drivers/media/rc/bpf-lirc.c
+++ b/drivers/media/rc/bpf-lirc.c
@@ -108,6 +108,8 @@ lirc_mode2_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
 		return &bpf_map_peek_elem_proto;
 	case BPF_FUNC_ktime_get_ns:
 		return &bpf_ktime_get_ns_proto;
+	case BPF_FUNC_ktime_get_boot_ns:
+		return &bpf_ktime_get_boot_ns_proto;
 	case BPF_FUNC_tail_call:
 		return &bpf_tail_call_proto;
 	case BPF_FUNC_get_prandom_u32:
diff --git a/drivers/media/rc/ir-rx51.c b/drivers/media/rc/ir-rx51.c
index 8574eda..9a5dfd7 100644
--- a/drivers/media/rc/ir-rx51.c
+++ b/drivers/media/rc/ir-rx51.c
@@ -241,7 +241,8 @@ static int ir_rx51_probe(struct platform_device *dev)
 	}
 
 	/* Use default, in case userspace does not set the carrier */
-	ir_rx51.freq = DIV_ROUND_CLOSEST(pwm_get_period(pwm), NSEC_PER_SEC);
+	ir_rx51.freq = DIV_ROUND_CLOSEST_ULL(pwm_get_period(pwm),
+			NSEC_PER_SEC);
 	pwm_put(pwm);
 
 	hrtimer_init(&ir_rx51.timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
diff --git a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c
index 62f7aa9..d0e5ebc 100644
--- a/drivers/media/v4l2-core/v4l2-common.c
+++ b/drivers/media/v4l2-core/v4l2-common.c
@@ -236,77 +236,79 @@ const struct v4l2_format_info *v4l2_format_info(u32 format)
 {
 	static const struct v4l2_format_info formats[] = {
 		/* RGB formats */
-		{ .format = V4L2_PIX_FMT_BGR24,   .mem_planes = 1, .comp_planes = 1, .bpp = { 3, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_RGB24,   .mem_planes = 1, .comp_planes = 1, .bpp = { 3, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_HSV24,   .mem_planes = 1, .comp_planes = 1, .bpp = { 3, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_BGR32,   .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_XBGR32,  .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_BGRX32,  .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_RGB32,   .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_XRGB32,  .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_RGBX32,  .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_HSV32,   .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_ARGB32,  .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_RGBA32,  .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_ABGR32,  .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_BGRA32,  .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_GREY,    .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_BGR24,   .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 3, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_RGB24,   .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 3, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_HSV24,   .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 3, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_BGR32,   .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_XBGR32,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_BGRX32,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_RGB32,   .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_XRGB32,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_RGBX32,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_HSV32,   .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_ARGB32,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_RGBA32,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_ABGR32,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_BGRA32,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_GREY,    .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_RGB565,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_RGB555,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
 
 		/* YUV packed formats */
-		{ .format = V4L2_PIX_FMT_YUYV,    .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_YVYU,    .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_UYVY,    .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_VYUY,    .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_YUYV,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_YVYU,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_UYVY,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_VYUY,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 },
 
 		/* YUV planar formats */
-		{ .format = V4L2_PIX_FMT_NV12,    .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 2 },
-		{ .format = V4L2_PIX_FMT_NV21,    .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 2 },
-		{ .format = V4L2_PIX_FMT_NV16,    .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_NV61,    .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_NV24,    .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_NV42,    .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_NV12,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 2 },
+		{ .format = V4L2_PIX_FMT_NV21,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 2 },
+		{ .format = V4L2_PIX_FMT_NV16,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_NV61,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_NV24,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_NV42,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 1, .vdiv = 1 },
 
-		{ .format = V4L2_PIX_FMT_YUV410,  .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 4, .vdiv = 4 },
-		{ .format = V4L2_PIX_FMT_YVU410,  .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 4, .vdiv = 4 },
-		{ .format = V4L2_PIX_FMT_YUV411P, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 4, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_YUV420,  .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 2 },
-		{ .format = V4L2_PIX_FMT_YVU420,  .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 2 },
-		{ .format = V4L2_PIX_FMT_YUV422P, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_YUV410,  .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 4, .vdiv = 4 },
+		{ .format = V4L2_PIX_FMT_YVU410,  .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 4, .vdiv = 4 },
+		{ .format = V4L2_PIX_FMT_YUV411P, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 4, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_YUV420,  .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 2 },
+		{ .format = V4L2_PIX_FMT_YVU420,  .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 2 },
+		{ .format = V4L2_PIX_FMT_YUV422P, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 1 },
 
 		/* YUV planar formats, non contiguous variant */
-		{ .format = V4L2_PIX_FMT_YUV420M, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 2 },
-		{ .format = V4L2_PIX_FMT_YVU420M, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 2 },
-		{ .format = V4L2_PIX_FMT_YUV422M, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_YVU422M, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_YUV444M, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_YVU444M, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_YUV420M, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 2 },
+		{ .format = V4L2_PIX_FMT_YVU420M, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 2 },
+		{ .format = V4L2_PIX_FMT_YUV422M, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_YVU422M, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_YUV444M, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_YVU444M, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 1, .vdiv = 1 },
 
-		{ .format = V4L2_PIX_FMT_NV12M,   .mem_planes = 2, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 2 },
-		{ .format = V4L2_PIX_FMT_NV21M,   .mem_planes = 2, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 2 },
-		{ .format = V4L2_PIX_FMT_NV16M,   .mem_planes = 2, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_NV61M,   .mem_planes = 2, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_NV12M,   .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 2, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 2 },
+		{ .format = V4L2_PIX_FMT_NV21M,   .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 2, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 2 },
+		{ .format = V4L2_PIX_FMT_NV16M,   .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 2, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_NV61M,   .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 2, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 1 },
 
 		/* Bayer RGB formats */
-		{ .format = V4L2_PIX_FMT_SBGGR8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGBRG8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGRBG8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SRGGB8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SBGGR10,	.mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGBRG10,	.mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGRBG10,	.mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SRGGB10,	.mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SBGGR10ALAW8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGBRG10ALAW8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGRBG10ALAW8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SRGGB10ALAW8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SBGGR10DPCM8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGBRG10DPCM8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGRBG10DPCM8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SRGGB10DPCM8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SBGGR12,	.mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGBRG12,	.mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGRBG12,	.mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SRGGB12,	.mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SBGGR8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGBRG8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGRBG8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SRGGB8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SBGGR10,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGBRG10,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGRBG10,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SRGGB10,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SBGGR10ALAW8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGBRG10ALAW8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGRBG10ALAW8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SRGGB10ALAW8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SBGGR10DPCM8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGBRG10DPCM8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGRBG10DPCM8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SRGGB10DPCM8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SBGGR12,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGBRG12,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGRBG12,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SRGGB12,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
 	};
 	unsigned int i;
 
diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
index 7ad6db8..62183fe 100644
--- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
+++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
@@ -465,6 +465,11 @@ struct v4l2_plane32 {
 		__s32		fd;
 	} m;
 	__u32			data_offset;
+	/*
+	 * few userspace clients and drivers use reserved fields
+	 * and it is up to them how these fields are used. v4l2
+	 * simply copy reserved fields between them.
+	 */
 	__u32			reserved[11];
 };
 
@@ -499,7 +504,9 @@ static int get_v4l2_plane32(struct v4l2_plane __user *p64,
 
 	if (copy_in_user(p64, p32, 2 * sizeof(__u32)) ||
 	    copy_in_user(&p64->data_offset, &p32->data_offset,
-			 sizeof(p64->data_offset)))
+			 sizeof(p64->data_offset)) ||
+	    copy_in_user(p64->reserved, p32->reserved,
+			 sizeof(p64->reserved)))
 		return -EFAULT;
 
 	switch (memory) {
@@ -531,7 +538,9 @@ static int put_v4l2_plane32(struct v4l2_plane __user *p64,
 
 	if (copy_in_user(p32, p64, 2 * sizeof(__u32)) ||
 	    copy_in_user(&p32->data_offset, &p64->data_offset,
-			 sizeof(p64->data_offset)))
+			 sizeof(p64->data_offset)) ||
+	    copy_in_user(p32->reserved, p64->reserved,
+			 sizeof(p32->reserved)))
 		return -EFAULT;
 
 	switch (memory) {
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
index cd84dbb..67ce711 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
@@ -29,6 +29,8 @@
 #define call_op(master, op) \
 	(has_op(master, op) ? master->ops->op(master) : 0)
 
+static const union v4l2_ctrl_ptr ptr_null;
+
 /* Internal temporary helper struct, one for each v4l2_ext_control */
 struct v4l2_ctrl_helper {
 	/* Pointer to the control reference of the master control */
@@ -334,6 +336,10 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
 		"4.2",
 		"5",
 		"5.1",
+		"5.2",
+		"6.0",
+		"6.1",
+		"6.2",
 		NULL,
 	};
 	static const char * const h264_loop_filter[] = {
@@ -360,6 +366,7 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
 		"Scalable High Intra",
 		"Stereo High",
 		"Multiview High",
+		"Constrained High",
 		NULL,
 	};
 	static const char * const vui_sar_idc[] = {
@@ -566,6 +573,16 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
 		"Disabled at slice boundary",
 		"NULL",
 	};
+	static const char * const hevc_decode_mode[] = {
+		"Slice-Based",
+		"Frame-Based",
+		NULL,
+	};
+	static const char * const hevc_start_code[] = {
+		"No Start Code",
+		"Annex B Start Code",
+		NULL,
+	};
 
 	switch (id) {
 	case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
@@ -687,7 +704,10 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
 		return hevc_tier;
 	case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:
 		return hevc_loop_filter_mode;
-
+	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:
+		return hevc_decode_mode;
+	case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:
+		return hevc_start_code;
 	default:
 		return NULL;
 	}
@@ -957,6 +977,11 @@ const char *v4l2_ctrl_get_name(u32 id)
 	case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:	return "HEVC Size of Length Field";
 	case V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES:	return "Reference Frames for a P-Frame";
 	case V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR:		return "Prepend SPS and PPS to IDR";
+	case V4L2_CID_MPEG_VIDEO_HEVC_SPS:			return "HEVC Sequence Parameter Set";
+	case V4L2_CID_MPEG_VIDEO_HEVC_PPS:			return "HEVC Picture Parameter Set";
+	case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:		return "HEVC Slice Parameters";
+	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:		return "HEVC Decode Mode";
+	case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:		return "HEVC Start Code";
 
 	/* CAMERA controls */
 	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
@@ -994,6 +1019,7 @@ const char *v4l2_ctrl_get_name(u32 id)
 	case V4L2_CID_AUTO_FOCUS_RANGE:		return "Auto Focus, Range";
 	case V4L2_CID_PAN_SPEED:		return "Pan, Speed";
 	case V4L2_CID_TILT_SPEED:		return "Tilt, Speed";
+	case V4L2_CID_UNIT_CELL_SIZE:		return "Unit Cell Size";
 
 	/* FM Radio Modulator controls */
 	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
@@ -1265,6 +1291,8 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
 	case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:
 	case V4L2_CID_MPEG_VIDEO_HEVC_TIER:
 	case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:
+	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:
+	case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:
 		*type = V4L2_CTRL_TYPE_MENU;
 		break;
 	case V4L2_CID_LINK_FREQ:
@@ -1375,6 +1403,19 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
 	case V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER:
 		*type = V4L2_CTRL_TYPE_VP8_FRAME_HEADER;
 		break;
+	case V4L2_CID_MPEG_VIDEO_HEVC_SPS:
+		*type = V4L2_CTRL_TYPE_HEVC_SPS;
+		break;
+	case V4L2_CID_MPEG_VIDEO_HEVC_PPS:
+		*type = V4L2_CTRL_TYPE_HEVC_PPS;
+		break;
+	case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:
+		*type = V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS;
+		break;
+	case V4L2_CID_UNIT_CELL_SIZE:
+		*type = V4L2_CTRL_TYPE_AREA;
+		*flags |= V4L2_CTRL_FLAG_READ_ONLY;
+		break;
 	default:
 		*type = V4L2_CTRL_TYPE_INTEGER;
 		break;
@@ -1520,7 +1561,8 @@ static bool std_equal(const struct v4l2_ctrl *ctrl, u32 idx,
 		if (ctrl->is_int)
 			return ptr1.p_s32[idx] == ptr2.p_s32[idx];
 		idx *= ctrl->elem_size;
-		return !memcmp(ptr1.p + idx, ptr2.p + idx, ctrl->elem_size);
+		return !memcmp(ptr1.p_const + idx, ptr2.p_const + idx,
+			       ctrl->elem_size);
 	}
 }
 
@@ -1530,7 +1572,10 @@ static void std_init_compound(const struct v4l2_ctrl *ctrl, u32 idx,
 	struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params;
 	void *p = ptr.p + idx * ctrl->elem_size;
 
-	memset(p, 0, ctrl->elem_size);
+	if (ctrl->p_def.p_const)
+		memcpy(p, ctrl->p_def.p_const, ctrl->elem_size);
+	else
+		memset(p, 0, ctrl->elem_size);
 
 	/*
 	 * The cast is needed to get rid of a gcc warning complaining that
@@ -1672,7 +1717,12 @@ static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
 {
 	struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params;
 	struct v4l2_ctrl_vp8_frame_header *p_vp8_frame_header;
+	struct v4l2_ctrl_hevc_sps *p_hevc_sps;
+	struct v4l2_ctrl_hevc_pps *p_hevc_pps;
+	struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params;
+	struct v4l2_area *area;
 	void *p = ptr.p + idx * ctrl->elem_size;
+	unsigned int i;
 
 	switch ((u32)ctrl->type) {
 	case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS:
@@ -1748,6 +1798,76 @@ static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
 		zero_padding(p_vp8_frame_header->entropy_header);
 		zero_padding(p_vp8_frame_header->coder_state);
 		break;
+
+	case V4L2_CTRL_TYPE_HEVC_SPS:
+		p_hevc_sps = p;
+
+		if (!(p_hevc_sps->flags & V4L2_HEVC_SPS_FLAG_PCM_ENABLED)) {
+			p_hevc_sps->pcm_sample_bit_depth_luma_minus1 = 0;
+			p_hevc_sps->pcm_sample_bit_depth_chroma_minus1 = 0;
+			p_hevc_sps->log2_min_pcm_luma_coding_block_size_minus3 = 0;
+			p_hevc_sps->log2_diff_max_min_pcm_luma_coding_block_size = 0;
+		}
+
+		if (!(p_hevc_sps->flags &
+		      V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT))
+			p_hevc_sps->num_long_term_ref_pics_sps = 0;
+		break;
+
+	case V4L2_CTRL_TYPE_HEVC_PPS:
+		p_hevc_pps = p;
+
+		if (!(p_hevc_pps->flags &
+		      V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED))
+			p_hevc_pps->diff_cu_qp_delta_depth = 0;
+
+		if (!(p_hevc_pps->flags & V4L2_HEVC_PPS_FLAG_TILES_ENABLED)) {
+			p_hevc_pps->num_tile_columns_minus1 = 0;
+			p_hevc_pps->num_tile_rows_minus1 = 0;
+			memset(&p_hevc_pps->column_width_minus1, 0,
+			       sizeof(p_hevc_pps->column_width_minus1));
+			memset(&p_hevc_pps->row_height_minus1, 0,
+			       sizeof(p_hevc_pps->row_height_minus1));
+
+			p_hevc_pps->flags &=
+				~V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED;
+		}
+
+		if (p_hevc_pps->flags &
+		    V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER) {
+			p_hevc_pps->pps_beta_offset_div2 = 0;
+			p_hevc_pps->pps_tc_offset_div2 = 0;
+		}
+
+		zero_padding(*p_hevc_pps);
+		break;
+
+	case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
+		p_hevc_slice_params = p;
+
+		if (p_hevc_slice_params->num_active_dpb_entries >
+		    V4L2_HEVC_DPB_ENTRIES_NUM_MAX)
+			return -EINVAL;
+
+		zero_padding(p_hevc_slice_params->pred_weight_table);
+
+		for (i = 0; i < p_hevc_slice_params->num_active_dpb_entries;
+		     i++) {
+			struct v4l2_hevc_dpb_entry *dpb_entry =
+				&p_hevc_slice_params->dpb[i];
+
+			zero_padding(*dpb_entry);
+		}
+
+		zero_padding(*p_hevc_slice_params);
+		break;
+
+	case V4L2_CTRL_TYPE_AREA:
+		area = p;
+		if (!area->width || !area->height)
+			return -EINVAL;
+		break;
+
 	default:
 		return -EINVAL;
 	}
@@ -1840,7 +1960,7 @@ static int ptr_to_user(struct v4l2_ext_control *c,
 	u32 len;
 
 	if (ctrl->is_ptr && !ctrl->is_string)
-		return copy_to_user(c->ptr, ptr.p, c->size) ?
+		return copy_to_user(c->ptr, ptr.p_const, c->size) ?
 		       -EFAULT : 0;
 
 	switch (ctrl->type) {
@@ -1955,7 +2075,7 @@ static void ptr_to_ptr(struct v4l2_ctrl *ctrl,
 {
 	if (ctrl == NULL)
 		return;
-	memcpy(to.p, from.p, ctrl->elems * ctrl->elem_size);
+	memcpy(to.p, from.p_const, ctrl->elems * ctrl->elem_size);
 }
 
 /* Copy the new value to the current value. */
@@ -2354,7 +2474,8 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
 			s64 min, s64 max, u64 step, s64 def,
 			const u32 dims[V4L2_CTRL_MAX_DIMS], u32 elem_size,
 			u32 flags, const char * const *qmenu,
-			const s64 *qmenu_int, void *priv)
+			const s64 *qmenu_int, const union v4l2_ctrl_ptr p_def,
+			void *priv)
 {
 	struct v4l2_ctrl *ctrl;
 	unsigned sz_extra;
@@ -2421,6 +2542,18 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
 	case V4L2_CTRL_TYPE_VP8_FRAME_HEADER:
 		elem_size = sizeof(struct v4l2_ctrl_vp8_frame_header);
 		break;
+	case V4L2_CTRL_TYPE_HEVC_SPS:
+		elem_size = sizeof(struct v4l2_ctrl_hevc_sps);
+		break;
+	case V4L2_CTRL_TYPE_HEVC_PPS:
+		elem_size = sizeof(struct v4l2_ctrl_hevc_pps);
+		break;
+	case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
+		elem_size = sizeof(struct v4l2_ctrl_hevc_slice_params);
+		break;
+	case V4L2_CTRL_TYPE_AREA:
+		elem_size = sizeof(struct v4l2_area);
+		break;
 	default:
 		if (type < V4L2_CTRL_COMPOUND_TYPES)
 			elem_size = sizeof(s32);
@@ -2460,6 +2593,9 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
 		 is_array)
 		sz_extra += 2 * tot_ctrl_size;
 
+	if (type >= V4L2_CTRL_COMPOUND_TYPES && p_def.p_const)
+		sz_extra += elem_size;
+
 	ctrl = kvzalloc(sizeof(*ctrl) + sz_extra, GFP_KERNEL);
 	if (ctrl == NULL) {
 		handler_set_err(hdl, -ENOMEM);
@@ -2503,6 +2639,12 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
 		ctrl->p_new.p = &ctrl->val;
 		ctrl->p_cur.p = &ctrl->cur.val;
 	}
+
+	if (type >= V4L2_CTRL_COMPOUND_TYPES && p_def.p_const) {
+		ctrl->p_def.p = ctrl->p_cur.p + tot_ctrl_size;
+		memcpy(ctrl->p_def.p, p_def.p_const, elem_size);
+	}
+
 	for (idx = 0; idx < elems; idx++) {
 		ctrl->type_ops->init(ctrl, idx, ctrl->p_cur);
 		ctrl->type_ops->init(ctrl, idx, ctrl->p_new);
@@ -2554,7 +2696,7 @@ struct v4l2_ctrl *v4l2_ctrl_new_custom(struct v4l2_ctrl_handler *hdl,
 			type, min, max,
 			is_menu ? cfg->menu_skip_mask : step, def,
 			cfg->dims, cfg->elem_size,
-			flags, qmenu, qmenu_int, priv);
+			flags, qmenu, qmenu_int, cfg->p_def, priv);
 	if (ctrl)
 		ctrl->is_private = cfg->is_private;
 	return ctrl;
@@ -2579,7 +2721,7 @@ struct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl,
 	}
 	return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
 			     min, max, step, def, NULL, 0,
-			     flags, NULL, NULL, NULL);
+			     flags, NULL, NULL, ptr_null, NULL);
 }
 EXPORT_SYMBOL(v4l2_ctrl_new_std);
 
@@ -2612,7 +2754,7 @@ struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl,
 	}
 	return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
 			     0, max, mask, def, NULL, 0,
-			     flags, qmenu, qmenu_int, NULL);
+			     flags, qmenu, qmenu_int, ptr_null, NULL);
 }
 EXPORT_SYMBOL(v4l2_ctrl_new_std_menu);
 
@@ -2644,11 +2786,32 @@ struct v4l2_ctrl *v4l2_ctrl_new_std_menu_items(struct v4l2_ctrl_handler *hdl,
 	}
 	return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
 			     0, max, mask, def, NULL, 0,
-			     flags, qmenu, NULL, NULL);
+			     flags, qmenu, NULL, ptr_null, NULL);
 
 }
 EXPORT_SYMBOL(v4l2_ctrl_new_std_menu_items);
 
+/* Helper function for standard compound controls */
+struct v4l2_ctrl *v4l2_ctrl_new_std_compound(struct v4l2_ctrl_handler *hdl,
+				const struct v4l2_ctrl_ops *ops, u32 id,
+				const union v4l2_ctrl_ptr p_def)
+{
+	const char *name;
+	enum v4l2_ctrl_type type;
+	u32 flags;
+	s64 min, max, step, def;
+
+	v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
+	if (type < V4L2_CTRL_COMPOUND_TYPES) {
+		handler_set_err(hdl, -EINVAL);
+		return NULL;
+	}
+	return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
+			     min, max, step, def, NULL, 0,
+			     flags, NULL, NULL, p_def, NULL);
+}
+EXPORT_SYMBOL(v4l2_ctrl_new_std_compound);
+
 /* Helper function for standard integer menu controls */
 struct v4l2_ctrl *v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler *hdl,
 			const struct v4l2_ctrl_ops *ops,
@@ -2669,7 +2832,7 @@ struct v4l2_ctrl *v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler *hdl,
 	}
 	return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
 			     0, max, 0, def, NULL, 0,
-			     flags, NULL, qmenu_int, NULL);
+			     flags, NULL, qmenu_int, ptr_null, NULL);
 }
 EXPORT_SYMBOL(v4l2_ctrl_new_int_menu);
 
@@ -4085,6 +4248,18 @@ int __v4l2_ctrl_s_ctrl_string(struct v4l2_ctrl *ctrl, const char *s)
 }
 EXPORT_SYMBOL(__v4l2_ctrl_s_ctrl_string);
 
+int __v4l2_ctrl_s_ctrl_area(struct v4l2_ctrl *ctrl,
+			    const struct v4l2_area *area)
+{
+	lockdep_assert_held(ctrl->handler->lock);
+
+	/* It's a driver bug if this happens. */
+	WARN_ON(ctrl->type != V4L2_CTRL_TYPE_AREA);
+	*ctrl->p_new.p_area = *area;
+	return set_ctrl(NULL, ctrl, 0);
+}
+EXPORT_SYMBOL(__v4l2_ctrl_s_ctrl_area);
+
 void v4l2_ctrl_request_complete(struct media_request *req,
 				struct v4l2_ctrl_handler *main_hdl)
 {
diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c
index 4037689..da42d17 100644
--- a/drivers/media/v4l2-core/v4l2-dev.c
+++ b/drivers/media/v4l2-core/v4l2-dev.c
@@ -533,13 +533,23 @@ static int get_index(struct video_device *vdev)
  */
 static void determine_valid_ioctls(struct video_device *vdev)
 {
+	const u32 vid_caps = V4L2_CAP_VIDEO_CAPTURE |
+			     V4L2_CAP_VIDEO_CAPTURE_MPLANE |
+			     V4L2_CAP_VIDEO_OUTPUT |
+			     V4L2_CAP_VIDEO_OUTPUT_MPLANE |
+			     V4L2_CAP_VIDEO_M2M | V4L2_CAP_VIDEO_M2M_MPLANE;
+	const u32 meta_caps = V4L2_CAP_META_CAPTURE |
+			      V4L2_CAP_META_OUTPUT;
 	DECLARE_BITMAP(valid_ioctls, BASE_VIDIOC_PRIVATE);
 	const struct v4l2_ioctl_ops *ops = vdev->ioctl_ops;
-	bool is_vid = vdev->vfl_type == VFL_TYPE_GRABBER;
+	bool is_vid = vdev->vfl_type == VFL_TYPE_GRABBER &&
+		      (vdev->device_caps & vid_caps);
 	bool is_vbi = vdev->vfl_type == VFL_TYPE_VBI;
 	bool is_radio = vdev->vfl_type == VFL_TYPE_RADIO;
 	bool is_sdr = vdev->vfl_type == VFL_TYPE_SDR;
 	bool is_tch = vdev->vfl_type == VFL_TYPE_TOUCH;
+	bool is_meta = vdev->vfl_type == VFL_TYPE_GRABBER &&
+		       (vdev->device_caps & meta_caps);
 	bool is_rx = vdev->vfl_dir != VFL_DIR_TX;
 	bool is_tx = vdev->vfl_dir != VFL_DIR_RX;
 
@@ -571,8 +581,10 @@ static void determine_valid_ioctls(struct video_device *vdev)
 		set_bit(_IOC_NR(VIDIOC_TRY_EXT_CTRLS), valid_ioctls);
 	if (vdev->ctrl_handler || ops->vidioc_querymenu)
 		set_bit(_IOC_NR(VIDIOC_QUERYMENU), valid_ioctls);
-	SET_VALID_IOCTL(ops, VIDIOC_G_FREQUENCY, vidioc_g_frequency);
-	SET_VALID_IOCTL(ops, VIDIOC_S_FREQUENCY, vidioc_s_frequency);
+	if (!is_tch) {
+		SET_VALID_IOCTL(ops, VIDIOC_G_FREQUENCY, vidioc_g_frequency);
+		SET_VALID_IOCTL(ops, VIDIOC_S_FREQUENCY, vidioc_s_frequency);
+	}
 	SET_VALID_IOCTL(ops, VIDIOC_LOG_STATUS, vidioc_log_status);
 #ifdef CONFIG_VIDEO_ADV_DEBUG
 	set_bit(_IOC_NR(VIDIOC_DBG_G_CHIP_INFO), valid_ioctls);
@@ -586,40 +598,32 @@ static void determine_valid_ioctls(struct video_device *vdev)
 	if (ops->vidioc_enum_freq_bands || ops->vidioc_g_tuner || ops->vidioc_g_modulator)
 		set_bit(_IOC_NR(VIDIOC_ENUM_FREQ_BANDS), valid_ioctls);
 
-	if (is_vid || is_tch) {
-		/* video and metadata specific ioctls */
+	if (is_vid) {
+		/* video specific ioctls */
 		if ((is_rx && (ops->vidioc_enum_fmt_vid_cap ||
-			       ops->vidioc_enum_fmt_vid_overlay ||
-			       ops->vidioc_enum_fmt_meta_cap)) ||
-		    (is_tx && (ops->vidioc_enum_fmt_vid_out ||
-			       ops->vidioc_enum_fmt_meta_out)))
+			       ops->vidioc_enum_fmt_vid_overlay)) ||
+		    (is_tx && ops->vidioc_enum_fmt_vid_out))
 			set_bit(_IOC_NR(VIDIOC_ENUM_FMT), valid_ioctls);
 		if ((is_rx && (ops->vidioc_g_fmt_vid_cap ||
 			       ops->vidioc_g_fmt_vid_cap_mplane ||
-			       ops->vidioc_g_fmt_vid_overlay ||
-			       ops->vidioc_g_fmt_meta_cap)) ||
+			       ops->vidioc_g_fmt_vid_overlay)) ||
 		    (is_tx && (ops->vidioc_g_fmt_vid_out ||
 			       ops->vidioc_g_fmt_vid_out_mplane ||
-			       ops->vidioc_g_fmt_vid_out_overlay ||
-			       ops->vidioc_g_fmt_meta_out)))
+			       ops->vidioc_g_fmt_vid_out_overlay)))
 			 set_bit(_IOC_NR(VIDIOC_G_FMT), valid_ioctls);
 		if ((is_rx && (ops->vidioc_s_fmt_vid_cap ||
 			       ops->vidioc_s_fmt_vid_cap_mplane ||
-			       ops->vidioc_s_fmt_vid_overlay ||
-			       ops->vidioc_s_fmt_meta_cap)) ||
+			       ops->vidioc_s_fmt_vid_overlay)) ||
 		    (is_tx && (ops->vidioc_s_fmt_vid_out ||
 			       ops->vidioc_s_fmt_vid_out_mplane ||
-			       ops->vidioc_s_fmt_vid_out_overlay ||
-			       ops->vidioc_s_fmt_meta_out)))
+			       ops->vidioc_s_fmt_vid_out_overlay)))
 			 set_bit(_IOC_NR(VIDIOC_S_FMT), valid_ioctls);
 		if ((is_rx && (ops->vidioc_try_fmt_vid_cap ||
 			       ops->vidioc_try_fmt_vid_cap_mplane ||
-			       ops->vidioc_try_fmt_vid_overlay ||
-			       ops->vidioc_try_fmt_meta_cap)) ||
+			       ops->vidioc_try_fmt_vid_overlay)) ||
 		    (is_tx && (ops->vidioc_try_fmt_vid_out ||
 			       ops->vidioc_try_fmt_vid_out_mplane ||
-			       ops->vidioc_try_fmt_vid_out_overlay ||
-			       ops->vidioc_try_fmt_meta_out)))
+			       ops->vidioc_try_fmt_vid_out_overlay)))
 			 set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
 		SET_VALID_IOCTL(ops, VIDIOC_OVERLAY, vidioc_overlay);
 		SET_VALID_IOCTL(ops, VIDIOC_G_FBUF, vidioc_g_fbuf);
@@ -641,7 +645,21 @@ static void determine_valid_ioctls(struct video_device *vdev)
 			set_bit(_IOC_NR(VIDIOC_S_CROP), valid_ioctls);
 		SET_VALID_IOCTL(ops, VIDIOC_G_SELECTION, vidioc_g_selection);
 		SET_VALID_IOCTL(ops, VIDIOC_S_SELECTION, vidioc_s_selection);
-	} else if (is_vbi) {
+	}
+	if (is_meta && is_rx) {
+		/* metadata capture specific ioctls */
+		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FMT, vidioc_enum_fmt_meta_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_G_FMT, vidioc_g_fmt_meta_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_S_FMT, vidioc_s_fmt_meta_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_TRY_FMT, vidioc_try_fmt_meta_cap);
+	} else if (is_meta && is_tx) {
+		/* metadata output specific ioctls */
+		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FMT, vidioc_enum_fmt_meta_out);
+		SET_VALID_IOCTL(ops, VIDIOC_G_FMT, vidioc_g_fmt_meta_out);
+		SET_VALID_IOCTL(ops, VIDIOC_S_FMT, vidioc_s_fmt_meta_out);
+		SET_VALID_IOCTL(ops, VIDIOC_TRY_FMT, vidioc_try_fmt_meta_out);
+	}
+	if (is_vbi) {
 		/* vbi specific ioctls */
 		if ((is_rx && (ops->vidioc_g_fmt_vbi_cap ||
 			       ops->vidioc_g_fmt_sliced_vbi_cap)) ||
@@ -659,30 +677,35 @@ static void determine_valid_ioctls(struct video_device *vdev)
 			       ops->vidioc_try_fmt_sliced_vbi_out)))
 			set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
 		SET_VALID_IOCTL(ops, VIDIOC_G_SLICED_VBI_CAP, vidioc_g_sliced_vbi_cap);
+	} else if (is_tch) {
+		/* touch specific ioctls */
+		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FMT, vidioc_enum_fmt_vid_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_G_FMT, vidioc_g_fmt_vid_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_S_FMT, vidioc_s_fmt_vid_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_TRY_FMT, vidioc_try_fmt_vid_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FRAMESIZES, vidioc_enum_framesizes);
+		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FRAMEINTERVALS, vidioc_enum_frameintervals);
+		SET_VALID_IOCTL(ops, VIDIOC_ENUMINPUT, vidioc_enum_input);
+		SET_VALID_IOCTL(ops, VIDIOC_G_INPUT, vidioc_g_input);
+		SET_VALID_IOCTL(ops, VIDIOC_S_INPUT, vidioc_s_input);
+		SET_VALID_IOCTL(ops, VIDIOC_G_PARM, vidioc_g_parm);
+		SET_VALID_IOCTL(ops, VIDIOC_S_PARM, vidioc_s_parm);
 	} else if (is_sdr && is_rx) {
 		/* SDR receiver specific ioctls */
-		if (ops->vidioc_enum_fmt_sdr_cap)
-			set_bit(_IOC_NR(VIDIOC_ENUM_FMT), valid_ioctls);
-		if (ops->vidioc_g_fmt_sdr_cap)
-			set_bit(_IOC_NR(VIDIOC_G_FMT), valid_ioctls);
-		if (ops->vidioc_s_fmt_sdr_cap)
-			set_bit(_IOC_NR(VIDIOC_S_FMT), valid_ioctls);
-		if (ops->vidioc_try_fmt_sdr_cap)
-			set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
+		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FMT, vidioc_enum_fmt_sdr_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_G_FMT, vidioc_g_fmt_sdr_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_S_FMT, vidioc_s_fmt_sdr_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_TRY_FMT, vidioc_try_fmt_sdr_cap);
 	} else if (is_sdr && is_tx) {
 		/* SDR transmitter specific ioctls */
-		if (ops->vidioc_enum_fmt_sdr_out)
-			set_bit(_IOC_NR(VIDIOC_ENUM_FMT), valid_ioctls);
-		if (ops->vidioc_g_fmt_sdr_out)
-			set_bit(_IOC_NR(VIDIOC_G_FMT), valid_ioctls);
-		if (ops->vidioc_s_fmt_sdr_out)
-			set_bit(_IOC_NR(VIDIOC_S_FMT), valid_ioctls);
-		if (ops->vidioc_try_fmt_sdr_out)
-			set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
+		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FMT, vidioc_enum_fmt_sdr_out);
+		SET_VALID_IOCTL(ops, VIDIOC_G_FMT, vidioc_g_fmt_sdr_out);
+		SET_VALID_IOCTL(ops, VIDIOC_S_FMT, vidioc_s_fmt_sdr_out);
+		SET_VALID_IOCTL(ops, VIDIOC_TRY_FMT, vidioc_try_fmt_sdr_out);
 	}
 
-	if (is_vid || is_vbi || is_sdr || is_tch) {
-		/* ioctls valid for video, metadata, vbi or sdr */
+	if (is_vid || is_vbi || is_sdr || is_tch || is_meta) {
+		/* ioctls valid for video, vbi, sdr, touch and metadata */
 		SET_VALID_IOCTL(ops, VIDIOC_REQBUFS, vidioc_reqbufs);
 		SET_VALID_IOCTL(ops, VIDIOC_QUERYBUF, vidioc_querybuf);
 		SET_VALID_IOCTL(ops, VIDIOC_QBUF, vidioc_qbuf);
@@ -694,8 +717,8 @@ static void determine_valid_ioctls(struct video_device *vdev)
 		SET_VALID_IOCTL(ops, VIDIOC_STREAMOFF, vidioc_streamoff);
 	}
 
-	if (is_vid || is_vbi || is_tch) {
-		/* ioctls valid for video or vbi */
+	if (is_vid || is_vbi || is_meta) {
+		/* ioctls valid for video, vbi and metadata */
 		if (ops->vidioc_s_std)
 			set_bit(_IOC_NR(VIDIOC_ENUMSTD), valid_ioctls);
 		SET_VALID_IOCTL(ops, VIDIOC_S_STD, vidioc_s_std);
@@ -719,8 +742,7 @@ static void determine_valid_ioctls(struct video_device *vdev)
 			SET_VALID_IOCTL(ops, VIDIOC_G_AUDOUT, vidioc_g_audout);
 			SET_VALID_IOCTL(ops, VIDIOC_S_AUDOUT, vidioc_s_audout);
 		}
-		if (ops->vidioc_g_parm || (vdev->vfl_type == VFL_TYPE_GRABBER &&
-					ops->vidioc_g_std))
+		if (ops->vidioc_g_parm || ops->vidioc_g_std)
 			set_bit(_IOC_NR(VIDIOC_G_PARM), valid_ioctls);
 		SET_VALID_IOCTL(ops, VIDIOC_S_PARM, vidioc_s_parm);
 		SET_VALID_IOCTL(ops, VIDIOC_S_DV_TIMINGS, vidioc_s_dv_timings);
@@ -734,7 +756,7 @@ static void determine_valid_ioctls(struct video_device *vdev)
 		SET_VALID_IOCTL(ops, VIDIOC_G_MODULATOR, vidioc_g_modulator);
 		SET_VALID_IOCTL(ops, VIDIOC_S_MODULATOR, vidioc_s_modulator);
 	}
-	if (is_rx) {
+	if (is_rx && !is_tch) {
 		/* receiver only ioctls */
 		SET_VALID_IOCTL(ops, VIDIOC_G_TUNER, vidioc_g_tuner);
 		SET_VALID_IOCTL(ops, VIDIOC_S_TUNER, vidioc_s_tuner);
diff --git a/drivers/media/v4l2-core/v4l2-dv-timings.c b/drivers/media/v4l2-core/v4l2-dv-timings.c
index 4f23e93..230d65a 100644
--- a/drivers/media/v4l2-core/v4l2-dv-timings.c
+++ b/drivers/media/v4l2-core/v4l2-dv-timings.c
@@ -293,7 +293,7 @@ void v4l2_print_dv_timings(const char *dev_prefix, const char *prefix,
 	if (prefix == NULL)
 		prefix = "";
 
-	pr_info("%s: %s%ux%u%s%u.%u (%ux%u)\n", dev_prefix, prefix,
+	pr_info("%s: %s%ux%u%s%u.%02u (%ux%u)\n", dev_prefix, prefix,
 		bt->width, bt->height, bt->interlaced ? "i" : "p",
 		fps / 100, fps % 100, htot, vtot);
 
@@ -757,7 +757,7 @@ bool v4l2_detect_gtf(unsigned frame_height,
 	pix_clk = pix_clk / GTF_PXL_CLK_GRAN * GTF_PXL_CLK_GRAN;
 
 	hsync = (frame_width * 8 + 50) / 100;
-	hsync = ((hsync + GTF_CELL_GRAN / 2) / GTF_CELL_GRAN) * GTF_CELL_GRAN;
+	hsync = DIV_ROUND_CLOSEST(hsync, GTF_CELL_GRAN) * GTF_CELL_GRAN;
 
 	h_fp = h_blank / 2 - hsync;
 
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
index 58868d7..6a7a03c 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -932,12 +932,22 @@ static int check_ext_ctrls(struct v4l2_ext_controls *c, int allow_priv)
 
 static int check_fmt(struct file *file, enum v4l2_buf_type type)
 {
+	const u32 vid_caps = V4L2_CAP_VIDEO_CAPTURE |
+			     V4L2_CAP_VIDEO_CAPTURE_MPLANE |
+			     V4L2_CAP_VIDEO_OUTPUT |
+			     V4L2_CAP_VIDEO_OUTPUT_MPLANE |
+			     V4L2_CAP_VIDEO_M2M | V4L2_CAP_VIDEO_M2M_MPLANE;
+	const u32 meta_caps = V4L2_CAP_META_CAPTURE |
+			      V4L2_CAP_META_OUTPUT;
 	struct video_device *vfd = video_devdata(file);
 	const struct v4l2_ioctl_ops *ops = vfd->ioctl_ops;
-	bool is_vid = vfd->vfl_type == VFL_TYPE_GRABBER;
+	bool is_vid = vfd->vfl_type == VFL_TYPE_GRABBER &&
+		      (vfd->device_caps & vid_caps);
 	bool is_vbi = vfd->vfl_type == VFL_TYPE_VBI;
 	bool is_sdr = vfd->vfl_type == VFL_TYPE_SDR;
 	bool is_tch = vfd->vfl_type == VFL_TYPE_TOUCH;
+	bool is_meta = vfd->vfl_type == VFL_TYPE_GRABBER &&
+		       (vfd->device_caps & meta_caps);
 	bool is_rx = vfd->vfl_dir != VFL_DIR_TX;
 	bool is_tx = vfd->vfl_dir != VFL_DIR_RX;
 
@@ -996,11 +1006,11 @@ static int check_fmt(struct file *file, enum v4l2_buf_type type)
 			return 0;
 		break;
 	case V4L2_BUF_TYPE_META_CAPTURE:
-		if (is_vid && is_rx && ops->vidioc_g_fmt_meta_cap)
+		if (is_meta && is_rx && ops->vidioc_g_fmt_meta_cap)
 			return 0;
 		break;
 	case V4L2_BUF_TYPE_META_OUTPUT:
-		if (is_vid && is_tx && ops->vidioc_g_fmt_meta_out)
+		if (is_meta && is_tx && ops->vidioc_g_fmt_meta_out)
 			return 0;
 		break;
 	default:
@@ -1356,6 +1366,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
 		case V4L2_PIX_FMT_VP8_FRAME:    descr = "VP8 Frame"; break;
 		case V4L2_PIX_FMT_VP9:		descr = "VP9"; break;
 		case V4L2_PIX_FMT_HEVC:		descr = "HEVC"; break; /* aka H.265 */
+		case V4L2_PIX_FMT_HEVC_SLICE:	descr = "HEVC Parsed Slice Data"; break;
 		case V4L2_PIX_FMT_FWHT:		descr = "FWHT"; break; /* used in vicodec */
 		case V4L2_PIX_FMT_FWHT_STATELESS:	descr = "FWHT Stateless"; break; /* used in vicodec */
 		case V4L2_PIX_FMT_CPIA1:	descr = "GSPCA CPiA YUV"; break;
@@ -2640,7 +2651,7 @@ struct v4l2_ioctl_info {
 /* Zero struct from after the field to the end */
 #define INFO_FL_CLEAR(v4l2_struct, field)			\
 	((offsetof(struct v4l2_struct, field) +			\
-	  sizeof(((struct v4l2_struct *)0)->field)) << 16)
+	  FIELD_SIZEOF(struct v4l2_struct, field)) << 16)
 #define INFO_FL_CLEAR_MASK	(_IOC_SIZEMASK << 16)
 
 #define DEFINE_V4L_STUB_FUNC(_vidioc)				\
diff --git a/drivers/media/v4l2-core/v4l2-mem2mem.c b/drivers/media/v4l2-core/v4l2-mem2mem.c
index 3d6a630..8986c31 100644
--- a/drivers/media/v4l2-core/v4l2-mem2mem.c
+++ b/drivers/media/v4l2-core/v4l2-mem2mem.c
@@ -284,7 +284,8 @@ static void v4l2_m2m_try_run(struct v4l2_m2m_dev *m2m_dev)
 static void __v4l2_m2m_try_queue(struct v4l2_m2m_dev *m2m_dev,
 				 struct v4l2_m2m_ctx *m2m_ctx)
 {
-	unsigned long flags_job, flags_out, flags_cap;
+	unsigned long flags_job;
+	struct vb2_v4l2_buffer *dst, *src;
 
 	dprintk("Trying to schedule a job for m2m_ctx: %p\n", m2m_ctx);
 
@@ -307,20 +308,42 @@ static void __v4l2_m2m_try_queue(struct v4l2_m2m_dev *m2m_dev,
 		goto job_unlock;
 	}
 
-	spin_lock_irqsave(&m2m_ctx->out_q_ctx.rdy_spinlock, flags_out);
-	if (list_empty(&m2m_ctx->out_q_ctx.rdy_queue)
-	    && !m2m_ctx->out_q_ctx.buffered) {
+	src = v4l2_m2m_next_src_buf(m2m_ctx);
+	dst = v4l2_m2m_next_dst_buf(m2m_ctx);
+	if (!src && !m2m_ctx->out_q_ctx.buffered) {
 		dprintk("No input buffers available\n");
-		goto out_unlock;
+		goto job_unlock;
 	}
-	spin_lock_irqsave(&m2m_ctx->cap_q_ctx.rdy_spinlock, flags_cap);
-	if (list_empty(&m2m_ctx->cap_q_ctx.rdy_queue)
-	    && !m2m_ctx->cap_q_ctx.buffered) {
+	if (!dst && !m2m_ctx->cap_q_ctx.buffered) {
 		dprintk("No output buffers available\n");
-		goto cap_unlock;
+		goto job_unlock;
 	}
-	spin_unlock_irqrestore(&m2m_ctx->cap_q_ctx.rdy_spinlock, flags_cap);
-	spin_unlock_irqrestore(&m2m_ctx->out_q_ctx.rdy_spinlock, flags_out);
+
+	m2m_ctx->new_frame = true;
+
+	if (src && dst && dst->is_held &&
+	    dst->vb2_buf.copied_timestamp &&
+	    dst->vb2_buf.timestamp != src->vb2_buf.timestamp) {
+		dst->is_held = false;
+		v4l2_m2m_dst_buf_remove(m2m_ctx);
+		v4l2_m2m_buf_done(dst, VB2_BUF_STATE_DONE);
+		dst = v4l2_m2m_next_dst_buf(m2m_ctx);
+
+		if (!dst && !m2m_ctx->cap_q_ctx.buffered) {
+			dprintk("No output buffers available after returning held buffer\n");
+			goto job_unlock;
+		}
+	}
+
+	if (src && dst && (m2m_ctx->out_q_ctx.q.subsystem_flags &
+			   VB2_V4L2_FL_SUPPORTS_M2M_HOLD_CAPTURE_BUF))
+		m2m_ctx->new_frame = !dst->vb2_buf.copied_timestamp ||
+			dst->vb2_buf.timestamp != src->vb2_buf.timestamp;
+
+	if (m2m_ctx->has_stopped) {
+		dprintk("Device has stopped\n");
+		goto job_unlock;
+	}
 
 	if (m2m_dev->m2m_ops->job_ready
 		&& (!m2m_dev->m2m_ops->job_ready(m2m_ctx->priv))) {
@@ -331,13 +354,6 @@ static void __v4l2_m2m_try_queue(struct v4l2_m2m_dev *m2m_dev,
 	list_add_tail(&m2m_ctx->queue, &m2m_dev->job_queue);
 	m2m_ctx->job_flags |= TRANS_QUEUED;
 
-	spin_unlock_irqrestore(&m2m_dev->job_spinlock, flags_job);
-	return;
-
-cap_unlock:
-	spin_unlock_irqrestore(&m2m_ctx->cap_q_ctx.rdy_spinlock, flags_cap);
-out_unlock:
-	spin_unlock_irqrestore(&m2m_ctx->out_q_ctx.rdy_spinlock, flags_out);
 job_unlock:
 	spin_unlock_irqrestore(&m2m_dev->job_spinlock, flags_job);
 }
@@ -412,37 +428,97 @@ static void v4l2_m2m_cancel_job(struct v4l2_m2m_ctx *m2m_ctx)
 	}
 }
 
-void v4l2_m2m_job_finish(struct v4l2_m2m_dev *m2m_dev,
-			 struct v4l2_m2m_ctx *m2m_ctx)
+/*
+ * Schedule the next job, called from v4l2_m2m_job_finish() or
+ * v4l2_m2m_buf_done_and_job_finish().
+ */
+static void v4l2_m2m_schedule_next_job(struct v4l2_m2m_dev *m2m_dev,
+				       struct v4l2_m2m_ctx *m2m_ctx)
 {
-	unsigned long flags;
+	/*
+	 * This instance might have more buffers ready, but since we do not
+	 * allow more than one job on the job_queue per instance, each has
+	 * to be scheduled separately after the previous one finishes.
+	 */
+	__v4l2_m2m_try_queue(m2m_dev, m2m_ctx);
 
-	spin_lock_irqsave(&m2m_dev->job_spinlock, flags);
+	/*
+	 * We might be running in atomic context,
+	 * but the job must be run in non-atomic context.
+	 */
+	schedule_work(&m2m_dev->job_work);
+}
+
+/*
+ * Assumes job_spinlock is held, called from v4l2_m2m_job_finish() or
+ * v4l2_m2m_buf_done_and_job_finish().
+ */
+static bool _v4l2_m2m_job_finish(struct v4l2_m2m_dev *m2m_dev,
+				 struct v4l2_m2m_ctx *m2m_ctx)
+{
 	if (!m2m_dev->curr_ctx || m2m_dev->curr_ctx != m2m_ctx) {
-		spin_unlock_irqrestore(&m2m_dev->job_spinlock, flags);
 		dprintk("Called by an instance not currently running\n");
-		return;
+		return false;
 	}
 
 	list_del(&m2m_dev->curr_ctx->queue);
 	m2m_dev->curr_ctx->job_flags &= ~(TRANS_QUEUED | TRANS_RUNNING);
 	wake_up(&m2m_dev->curr_ctx->finished);
 	m2m_dev->curr_ctx = NULL;
+	return true;
+}
 
+void v4l2_m2m_job_finish(struct v4l2_m2m_dev *m2m_dev,
+			 struct v4l2_m2m_ctx *m2m_ctx)
+{
+	unsigned long flags;
+	bool schedule_next;
+
+	/*
+	 * This function should not be used for drivers that support
+	 * holding capture buffers. Those should use
+	 * v4l2_m2m_buf_done_and_job_finish() instead.
+	 */
+	WARN_ON(m2m_ctx->out_q_ctx.q.subsystem_flags &
+		VB2_V4L2_FL_SUPPORTS_M2M_HOLD_CAPTURE_BUF);
+	spin_lock_irqsave(&m2m_dev->job_spinlock, flags);
+	schedule_next = _v4l2_m2m_job_finish(m2m_dev, m2m_ctx);
 	spin_unlock_irqrestore(&m2m_dev->job_spinlock, flags);
 
-	/* This instance might have more buffers ready, but since we do not
-	 * allow more than one job on the job_queue per instance, each has
-	 * to be scheduled separately after the previous one finishes. */
-	__v4l2_m2m_try_queue(m2m_dev, m2m_ctx);
-
-	/* We might be running in atomic context,
-	 * but the job must be run in non-atomic context.
-	 */
-	schedule_work(&m2m_dev->job_work);
+	if (schedule_next)
+		v4l2_m2m_schedule_next_job(m2m_dev, m2m_ctx);
 }
 EXPORT_SYMBOL(v4l2_m2m_job_finish);
 
+void v4l2_m2m_buf_done_and_job_finish(struct v4l2_m2m_dev *m2m_dev,
+				      struct v4l2_m2m_ctx *m2m_ctx,
+				      enum vb2_buffer_state state)
+{
+	struct vb2_v4l2_buffer *src_buf, *dst_buf;
+	bool schedule_next = false;
+	unsigned long flags;
+
+	spin_lock_irqsave(&m2m_dev->job_spinlock, flags);
+	src_buf = v4l2_m2m_src_buf_remove(m2m_ctx);
+	dst_buf = v4l2_m2m_next_dst_buf(m2m_ctx);
+
+	if (WARN_ON(!src_buf || !dst_buf))
+		goto unlock;
+	v4l2_m2m_buf_done(src_buf, state);
+	dst_buf->is_held = src_buf->flags & V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF;
+	if (!dst_buf->is_held) {
+		v4l2_m2m_dst_buf_remove(m2m_ctx);
+		v4l2_m2m_buf_done(dst_buf, state);
+	}
+	schedule_next = _v4l2_m2m_job_finish(m2m_dev, m2m_ctx);
+unlock:
+	spin_unlock_irqrestore(&m2m_dev->job_spinlock, flags);
+
+	if (schedule_next)
+		v4l2_m2m_schedule_next_job(m2m_dev, m2m_ctx);
+}
+EXPORT_SYMBOL(v4l2_m2m_buf_done_and_job_finish);
+
 int v4l2_m2m_reqbufs(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
 		     struct v4l2_requestbuffers *reqbufs)
 {
@@ -485,6 +561,140 @@ int v4l2_m2m_querybuf(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
 }
 EXPORT_SYMBOL_GPL(v4l2_m2m_querybuf);
 
+/*
+ * This will add the LAST flag and mark the buffer management
+ * state as stopped.
+ * This is called when the last capture buffer must be flagged as LAST
+ * in draining mode from the encoder/decoder driver buf_queue() callback
+ * or from v4l2_update_last_buf_state() when a capture buffer is available.
+ */
+void v4l2_m2m_last_buffer_done(struct v4l2_m2m_ctx *m2m_ctx,
+			       struct vb2_v4l2_buffer *vbuf)
+{
+	vbuf->flags |= V4L2_BUF_FLAG_LAST;
+	vb2_buffer_done(&vbuf->vb2_buf, VB2_BUF_STATE_DONE);
+
+	v4l2_m2m_mark_stopped(m2m_ctx);
+}
+EXPORT_SYMBOL_GPL(v4l2_m2m_last_buffer_done);
+
+/* When stop command is issued, update buffer management state */
+static int v4l2_update_last_buf_state(struct v4l2_m2m_ctx *m2m_ctx)
+{
+	struct vb2_v4l2_buffer *next_dst_buf;
+
+	if (m2m_ctx->is_draining)
+		return -EBUSY;
+
+	if (m2m_ctx->has_stopped)
+		return 0;
+
+	m2m_ctx->last_src_buf = v4l2_m2m_last_src_buf(m2m_ctx);
+	m2m_ctx->is_draining = true;
+
+	/*
+	 * The processing of the last output buffer queued before
+	 * the STOP command is expected to mark the buffer management
+	 * state as stopped with v4l2_m2m_mark_stopped().
+	 */
+	if (m2m_ctx->last_src_buf)
+		return 0;
+
+	/*
+	 * In case the output queue is empty, try to mark the last capture
+	 * buffer as LAST.
+	 */
+	next_dst_buf = v4l2_m2m_dst_buf_remove(m2m_ctx);
+	if (!next_dst_buf) {
+		/*
+		 * Wait for the next queued one in encoder/decoder driver
+		 * buf_queue() callback using the v4l2_m2m_dst_buf_is_last()
+		 * helper or in v4l2_m2m_qbuf() if encoder/decoder is not yet
+		 * streaming.
+		 */
+		m2m_ctx->next_buf_last = true;
+		return 0;
+	}
+
+	v4l2_m2m_last_buffer_done(m2m_ctx, next_dst_buf);
+
+	return 0;
+}
+
+/*
+ * Updates the encoding/decoding buffer management state, should
+ * be called from encoder/decoder drivers start_streaming()
+ */
+void v4l2_m2m_update_start_streaming_state(struct v4l2_m2m_ctx *m2m_ctx,
+					   struct vb2_queue *q)
+{
+	/* If start streaming again, untag the last output buffer */
+	if (V4L2_TYPE_IS_OUTPUT(q->type))
+		m2m_ctx->last_src_buf = NULL;
+}
+EXPORT_SYMBOL_GPL(v4l2_m2m_update_start_streaming_state);
+
+/*
+ * Updates the encoding/decoding buffer management state, should
+ * be called from encoder/decoder driver stop_streaming()
+ */
+void v4l2_m2m_update_stop_streaming_state(struct v4l2_m2m_ctx *m2m_ctx,
+					  struct vb2_queue *q)
+{
+	if (V4L2_TYPE_IS_OUTPUT(q->type)) {
+		/*
+		 * If in draining state, either mark next dst buffer as
+		 * done or flag next one to be marked as done either
+		 * in encoder/decoder driver buf_queue() callback using
+		 * the v4l2_m2m_dst_buf_is_last() helper or in v4l2_m2m_qbuf()
+		 * if encoder/decoder is not yet streaming
+		 */
+		if (m2m_ctx->is_draining) {
+			struct vb2_v4l2_buffer *next_dst_buf;
+
+			m2m_ctx->last_src_buf = NULL;
+			next_dst_buf = v4l2_m2m_dst_buf_remove(m2m_ctx);
+			if (!next_dst_buf)
+				m2m_ctx->next_buf_last = true;
+			else
+				v4l2_m2m_last_buffer_done(m2m_ctx,
+							  next_dst_buf);
+		}
+	} else {
+		v4l2_m2m_clear_state(m2m_ctx);
+	}
+}
+EXPORT_SYMBOL_GPL(v4l2_m2m_update_stop_streaming_state);
+
+static void v4l2_m2m_force_last_buf_done(struct v4l2_m2m_ctx *m2m_ctx,
+					 struct vb2_queue *q)
+{
+	struct vb2_buffer *vb;
+	struct vb2_v4l2_buffer *vbuf;
+	unsigned int i;
+
+	if (WARN_ON(q->is_output))
+		return;
+	if (list_empty(&q->queued_list))
+		return;
+
+	vb = list_first_entry(&q->queued_list, struct vb2_buffer, queued_entry);
+	for (i = 0; i < vb->num_planes; i++)
+		vb2_set_plane_payload(vb, i, 0);
+
+	/*
+	 * Since the buffer hasn't been queued to the ready queue,
+	 * mark is active and owned before marking it LAST and DONE
+	 */
+	vb->state = VB2_BUF_STATE_ACTIVE;
+	atomic_inc(&q->owned_by_drv_count);
+
+	vbuf = to_vb2_v4l2_buffer(vb);
+	vbuf->field = V4L2_FIELD_NONE;
+
+	v4l2_m2m_last_buffer_done(m2m_ctx, vbuf);
+}
+
 int v4l2_m2m_qbuf(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
 		  struct v4l2_buffer *buf)
 {
@@ -499,11 +709,25 @@ int v4l2_m2m_qbuf(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
 			__func__);
 		return -EPERM;
 	}
+
 	ret = vb2_qbuf(vq, vdev->v4l2_dev->mdev, buf);
-	if (!ret && !(buf->flags & V4L2_BUF_FLAG_IN_REQUEST))
+	if (ret)
+		return ret;
+
+	/*
+	 * If the capture queue is streaming, but streaming hasn't started
+	 * on the device, but was asked to stop, mark the previously queued
+	 * buffer as DONE with LAST flag since it won't be queued on the
+	 * device.
+	 */
+	if (!V4L2_TYPE_IS_OUTPUT(vq->type) &&
+	    vb2_is_streaming(vq) && !vb2_start_streaming_called(vq) &&
+	   (v4l2_m2m_has_stopped(m2m_ctx) || v4l2_m2m_dst_buf_is_last(m2m_ctx)))
+		v4l2_m2m_force_last_buf_done(m2m_ctx, vq);
+	else if (!(buf->flags & V4L2_BUF_FLAG_IN_REQUEST))
 		v4l2_m2m_try_schedule(m2m_ctx);
 
-	return ret;
+	return 0;
 }
 EXPORT_SYMBOL_GPL(v4l2_m2m_qbuf);
 
@@ -1155,6 +1379,123 @@ int v4l2_m2m_ioctl_try_decoder_cmd(struct file *file, void *fh,
 EXPORT_SYMBOL_GPL(v4l2_m2m_ioctl_try_decoder_cmd);
 
 /*
+ * Updates the encoding state on ENC_CMD_STOP/ENC_CMD_START
+ * Should be called from the encoder driver encoder_cmd() callback
+ */
+int v4l2_m2m_encoder_cmd(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
+			 struct v4l2_encoder_cmd *ec)
+{
+	if (ec->cmd != V4L2_ENC_CMD_STOP && ec->cmd != V4L2_ENC_CMD_START)
+		return -EINVAL;
+
+	if (ec->cmd == V4L2_ENC_CMD_STOP)
+		return v4l2_update_last_buf_state(m2m_ctx);
+
+	if (m2m_ctx->is_draining)
+		return -EBUSY;
+
+	if (m2m_ctx->has_stopped)
+		m2m_ctx->has_stopped = false;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(v4l2_m2m_encoder_cmd);
+
+/*
+ * Updates the decoding state on DEC_CMD_STOP/DEC_CMD_START
+ * Should be called from the decoder driver decoder_cmd() callback
+ */
+int v4l2_m2m_decoder_cmd(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
+			 struct v4l2_decoder_cmd *dc)
+{
+	if (dc->cmd != V4L2_DEC_CMD_STOP && dc->cmd != V4L2_DEC_CMD_START)
+		return -EINVAL;
+
+	if (dc->cmd == V4L2_DEC_CMD_STOP)
+		return v4l2_update_last_buf_state(m2m_ctx);
+
+	if (m2m_ctx->is_draining)
+		return -EBUSY;
+
+	if (m2m_ctx->has_stopped)
+		m2m_ctx->has_stopped = false;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(v4l2_m2m_decoder_cmd);
+
+int v4l2_m2m_ioctl_encoder_cmd(struct file *file, void *priv,
+			       struct v4l2_encoder_cmd *ec)
+{
+	struct v4l2_fh *fh = file->private_data;
+
+	return v4l2_m2m_encoder_cmd(file, fh->m2m_ctx, ec);
+}
+EXPORT_SYMBOL_GPL(v4l2_m2m_ioctl_encoder_cmd);
+
+int v4l2_m2m_ioctl_decoder_cmd(struct file *file, void *priv,
+			       struct v4l2_decoder_cmd *dc)
+{
+	struct v4l2_fh *fh = file->private_data;
+
+	return v4l2_m2m_decoder_cmd(file, fh->m2m_ctx, dc);
+}
+EXPORT_SYMBOL_GPL(v4l2_m2m_ioctl_decoder_cmd);
+
+int v4l2_m2m_ioctl_stateless_try_decoder_cmd(struct file *file, void *fh,
+					     struct v4l2_decoder_cmd *dc)
+{
+	if (dc->cmd != V4L2_DEC_CMD_FLUSH)
+		return -EINVAL;
+
+	dc->flags = 0;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(v4l2_m2m_ioctl_stateless_try_decoder_cmd);
+
+int v4l2_m2m_ioctl_stateless_decoder_cmd(struct file *file, void *priv,
+					 struct v4l2_decoder_cmd *dc)
+{
+	struct v4l2_fh *fh = file->private_data;
+	struct vb2_v4l2_buffer *out_vb, *cap_vb;
+	struct v4l2_m2m_dev *m2m_dev = fh->m2m_ctx->m2m_dev;
+	unsigned long flags;
+	int ret;
+
+	ret = v4l2_m2m_ioctl_stateless_try_decoder_cmd(file, priv, dc);
+	if (ret < 0)
+		return ret;
+
+	spin_lock_irqsave(&m2m_dev->job_spinlock, flags);
+	out_vb = v4l2_m2m_last_src_buf(fh->m2m_ctx);
+	cap_vb = v4l2_m2m_last_dst_buf(fh->m2m_ctx);
+
+	/*
+	 * If there is an out buffer pending, then clear any HOLD flag.
+	 *
+	 * By clearing this flag we ensure that when this output
+	 * buffer is processed any held capture buffer will be released.
+	 */
+	if (out_vb) {
+		out_vb->flags &= ~V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF;
+	} else if (cap_vb && cap_vb->is_held) {
+		/*
+		 * If there were no output buffers, but there is a
+		 * capture buffer that is held, then release that
+		 * buffer.
+		 */
+		cap_vb->is_held = false;
+		v4l2_m2m_dst_buf_remove(fh->m2m_ctx);
+		v4l2_m2m_buf_done(cap_vb, VB2_BUF_STATE_DONE);
+	}
+	spin_unlock_irqrestore(&m2m_dev->job_spinlock, flags);
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(v4l2_m2m_ioctl_stateless_decoder_cmd);
+
+/*
  * v4l2_file_operations helpers. It is assumed here same lock is used
  * for the output and the capture buffer queue.
  */
diff --git a/drivers/mfd/sprd-sc27xx-spi.c b/drivers/mfd/sprd-sc27xx-spi.c
index 20529ff..bb502f4 100644
--- a/drivers/mfd/sprd-sc27xx-spi.c
+++ b/drivers/mfd/sprd-sc27xx-spi.c
@@ -10,6 +10,7 @@
 #include <linux/of_device.h>
 #include <linux/regmap.h>
 #include <linux/spi/spi.h>
+#include <uapi/linux/usb/charger.h>
 
 #define SPRD_PMIC_INT_MASK_STATUS	0x0
 #define SPRD_PMIC_INT_RAW_STATUS	0x4
@@ -17,6 +18,16 @@
 
 #define SPRD_SC2731_IRQ_BASE		0x140
 #define SPRD_SC2731_IRQ_NUMS		16
+#define SPRD_SC2731_CHG_DET		0xedc
+
+/* PMIC charger detection definition */
+#define SPRD_PMIC_CHG_DET_DELAY_US	200000
+#define SPRD_PMIC_CHG_DET_TIMEOUT	2000000
+#define SPRD_PMIC_CHG_DET_DONE		BIT(11)
+#define SPRD_PMIC_SDP_TYPE		BIT(7)
+#define SPRD_PMIC_DCP_TYPE		BIT(6)
+#define SPRD_PMIC_CDP_TYPE		BIT(5)
+#define SPRD_PMIC_CHG_TYPE_MASK		GENMASK(7, 5)
 
 struct sprd_pmic {
 	struct regmap *regmap;
@@ -24,12 +35,14 @@ struct sprd_pmic {
 	struct regmap_irq *irqs;
 	struct regmap_irq_chip irq_chip;
 	struct regmap_irq_chip_data *irq_data;
+	const struct sprd_pmic_data *pdata;
 	int irq;
 };
 
 struct sprd_pmic_data {
 	u32 irq_base;
 	u32 num_irqs;
+	u32 charger_det;
 };
 
 /*
@@ -40,8 +53,46 @@ struct sprd_pmic_data {
 static const struct sprd_pmic_data sc2731_data = {
 	.irq_base = SPRD_SC2731_IRQ_BASE,
 	.num_irqs = SPRD_SC2731_IRQ_NUMS,
+	.charger_det = SPRD_SC2731_CHG_DET,
 };
 
+enum usb_charger_type sprd_pmic_detect_charger_type(struct device *dev)
+{
+	struct spi_device *spi = to_spi_device(dev);
+	struct sprd_pmic *ddata = spi_get_drvdata(spi);
+	const struct sprd_pmic_data *pdata = ddata->pdata;
+	enum usb_charger_type type;
+	u32 val;
+	int ret;
+
+	ret = regmap_read_poll_timeout(ddata->regmap, pdata->charger_det, val,
+				       (val & SPRD_PMIC_CHG_DET_DONE),
+				       SPRD_PMIC_CHG_DET_DELAY_US,
+				       SPRD_PMIC_CHG_DET_TIMEOUT);
+	if (ret) {
+		dev_err(&spi->dev, "failed to detect charger type\n");
+		return UNKNOWN_TYPE;
+	}
+
+	switch (val & SPRD_PMIC_CHG_TYPE_MASK) {
+	case SPRD_PMIC_CDP_TYPE:
+		type = CDP_TYPE;
+		break;
+	case SPRD_PMIC_DCP_TYPE:
+		type = DCP_TYPE;
+		break;
+	case SPRD_PMIC_SDP_TYPE:
+		type = SDP_TYPE;
+		break;
+	default:
+		type = UNKNOWN_TYPE;
+		break;
+	}
+
+	return type;
+}
+EXPORT_SYMBOL_GPL(sprd_pmic_detect_charger_type);
+
 static const struct mfd_cell sprd_pmic_devs[] = {
 	{
 		.name = "sc27xx-wdt",
@@ -181,6 +232,7 @@ static int sprd_pmic_probe(struct spi_device *spi)
 	spi_set_drvdata(spi, ddata);
 	ddata->dev = &spi->dev;
 	ddata->irq = spi->irq;
+	ddata->pdata = pdata;
 
 	ddata->irq_chip.name = dev_name(&spi->dev);
 	ddata->irq_chip.status_base =
diff --git a/drivers/mfd/syscon.c b/drivers/mfd/syscon.c
index 6607232..a928c5d 100644
--- a/drivers/mfd/syscon.c
+++ b/drivers/mfd/syscon.c
@@ -225,6 +225,35 @@ struct regmap *syscon_regmap_lookup_by_phandle(struct device_node *np,
 }
 EXPORT_SYMBOL_GPL(syscon_regmap_lookup_by_phandle);
 
+struct regmap *syscon_regmap_lookup_by_phandle_args(struct device_node *np,
+					const char *property,
+					int arg_count,
+					unsigned int *out_args)
+{
+	struct device_node *syscon_np;
+	struct of_phandle_args args;
+	struct regmap *regmap;
+	unsigned int index;
+	int rc;
+
+	rc = of_parse_phandle_with_fixed_args(np, property, arg_count,
+			0, &args);
+	if (rc)
+		return ERR_PTR(rc);
+
+	syscon_np = args.np;
+	if (!syscon_np)
+		return ERR_PTR(-ENODEV);
+
+	regmap = syscon_node_to_regmap(syscon_np);
+	for (index = 0; index < arg_count; index++)
+		out_args[index] = args.args[index];
+	of_node_put(syscon_np);
+
+	return regmap;
+}
+EXPORT_SYMBOL_GPL(syscon_regmap_lookup_by_phandle_args);
+
 static int syscon_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index c55b637..ff0b8b0 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -458,6 +458,21 @@
 	tristate
 	default MISC_RTSX_PCI || MISC_RTSX_USB
 
+config UID_SYS_STATS
+	bool "Per-UID statistics"
+	depends on PROFILING && TASK_XACCT && TASK_IO_ACCOUNTING
+	help
+	  Per UID based cpu time statistics exported to /proc/uid_cputime
+	  Per UID based io statistics exported to /proc/uid_io
+	  Per UID based procstat control in /proc/uid_procstat
+
+config UID_SYS_STATS_DEBUG
+	bool "Per-TASK statistics"
+	depends on UID_SYS_STATS
+	default n
+	help
+	  Per TASK based io statistics exported to /proc/uid_io
+
 config PVPANIC
 	tristate "pvpanic device support"
 	depends on HAS_IOMEM && (ACPI || OF)
@@ -466,6 +481,12 @@
 	  a paravirtualized device provided by QEMU; it lets a virtual machine
 	  (guest) communicate panic events to the host.
 
+config HISI_HIKEY_USB
+	tristate "USB functionality of HiSilicon Hikey Platform"
+	depends on OF && GPIOLIB
+	help
+	  If you say yes here you get support for usb functionality of HiSilicon Hikey Platform.
+
 source "drivers/misc/c2port/Kconfig"
 source "drivers/misc/eeprom/Kconfig"
 source "drivers/misc/cb710/Kconfig"
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
index c1860d3..bb5edea 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
@@ -57,3 +57,5 @@
 obj-$(CONFIG_PVPANIC)   	+= pvpanic.o
 obj-$(CONFIG_HABANA_AI)		+= habanalabs/
 obj-$(CONFIG_XILINX_SDFEC)	+= xilinx_sdfec.o
+obj-$(CONFIG_UID_SYS_STATS)	+= uid_sys_stats.o
+obj-$(CONFIG_HISI_HIKEY_USB)	+= hisi_hikey_usb.o
diff --git a/drivers/misc/hisi_hikey_usb.c b/drivers/misc/hisi_hikey_usb.c
new file mode 100644
index 0000000..32015bc
--- /dev/null
+++ b/drivers/misc/hisi_hikey_usb.c
@@ -0,0 +1,178 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Support for usb functionality of Hikey series boards
+ * based on Hisilicon Kirin Soc.
+ *
+ * Copyright (C) 2017-2018 Hilisicon Electronics Co., Ltd.
+ *		http://www.huawei.com
+ *
+ * Authors: Yu Chen <chenyu56@huawei.com>
+ */
+
+#include <linux/gpio/consumer.h>
+#include <linux/kernel.h>
+#include <linux/mod_devicetable.h>
+#include <linux/module.h>
+#include <linux/notifier.h>
+#include <linux/platform_device.h>
+#include <linux/property.h>
+#include <linux/slab.h>
+#include <linux/usb/role.h>
+
+#define DEVICE_DRIVER_NAME "hisi_hikey_usb"
+
+#define HUB_VBUS_POWER_ON 1
+#define HUB_VBUS_POWER_OFF 0
+#define USB_SWITCH_TO_HUB 1
+#define USB_SWITCH_TO_TYPEC 0
+#define TYPEC_VBUS_POWER_ON 1
+#define TYPEC_VBUS_POWER_OFF 0
+
+struct hisi_hikey_usb {
+	struct gpio_desc *otg_switch;
+	struct gpio_desc *typec_vbus;
+	struct gpio_desc *hub_vbus;
+
+	struct usb_role_switch *hub_role_sw;
+	struct usb_role_switch *dev_role_sw;
+	struct notifier_block nb;
+};
+
+static void hub_power_ctrl(struct hisi_hikey_usb *hisi_hikey_usb, int value)
+{
+	gpiod_set_value_cansleep(hisi_hikey_usb->hub_vbus, value);
+}
+
+static void usb_switch_ctrl(struct hisi_hikey_usb *hisi_hikey_usb,
+			    int switch_to)
+{
+	gpiod_set_value_cansleep(hisi_hikey_usb->otg_switch, switch_to);
+}
+
+static void usb_typec_power_ctrl(struct hisi_hikey_usb *hisi_hikey_usb,
+				 int value)
+{
+	gpiod_set_value_cansleep(hisi_hikey_usb->typec_vbus, value);
+}
+
+static int hub_usb_role_switch_set(struct device *dev, enum usb_role role)
+{
+	struct hisi_hikey_usb *hisi_hikey_usb = dev_get_drvdata(dev);
+
+	if (!hisi_hikey_usb || !hisi_hikey_usb->dev_role_sw)
+		return -EINVAL;
+
+	switch (role) {
+	case USB_ROLE_NONE:
+		usb_typec_power_ctrl(hisi_hikey_usb, TYPEC_VBUS_POWER_OFF);
+		usb_switch_ctrl(hisi_hikey_usb, USB_SWITCH_TO_HUB);
+		hub_power_ctrl(hisi_hikey_usb, HUB_VBUS_POWER_ON);
+		break;
+	case USB_ROLE_HOST:
+		hub_power_ctrl(hisi_hikey_usb, HUB_VBUS_POWER_OFF);
+		usb_switch_ctrl(hisi_hikey_usb, USB_SWITCH_TO_TYPEC);
+		usb_typec_power_ctrl(hisi_hikey_usb, TYPEC_VBUS_POWER_ON);
+		break;
+	case USB_ROLE_DEVICE:
+		hub_power_ctrl(hisi_hikey_usb, HUB_VBUS_POWER_OFF);
+		usb_typec_power_ctrl(hisi_hikey_usb, TYPEC_VBUS_POWER_OFF);
+		usb_switch_ctrl(hisi_hikey_usb, USB_SWITCH_TO_TYPEC);
+		break;
+	default:
+		break;
+	}
+
+	return usb_role_switch_set_role(hisi_hikey_usb->dev_role_sw, role);
+}
+
+static enum usb_role hub_usb_role_switch_get(struct device *dev)
+{
+	struct hisi_hikey_usb *hisi_hikey_usb = dev_get_drvdata(dev);
+
+	if (!hisi_hikey_usb || !hisi_hikey_usb->dev_role_sw)
+		return -EINVAL;
+
+	return usb_role_switch_get_role(hisi_hikey_usb->dev_role_sw);
+}
+
+static int hisi_hikey_usb_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct hisi_hikey_usb *hisi_hikey_usb;
+	struct usb_role_switch_desc hub_role_switch = {NULL};
+
+	hisi_hikey_usb = devm_kzalloc(dev, sizeof(*hisi_hikey_usb), GFP_KERNEL);
+	if (!hisi_hikey_usb)
+		return -ENOMEM;
+
+	hisi_hikey_usb->typec_vbus = devm_gpiod_get(dev, "typec-vbus",
+						    GPIOD_OUT_LOW);
+	if (IS_ERR(hisi_hikey_usb->typec_vbus))
+		return PTR_ERR(hisi_hikey_usb->typec_vbus);
+
+	hisi_hikey_usb->otg_switch = devm_gpiod_get(dev, "otg-switch",
+						    GPIOD_OUT_HIGH);
+	if (IS_ERR(hisi_hikey_usb->otg_switch))
+		return PTR_ERR(hisi_hikey_usb->otg_switch);
+
+	/* hub-vdd33-en is optional */
+	hisi_hikey_usb->hub_vbus = devm_gpiod_get_optional(dev, "hub-vdd33-en",
+							   GPIOD_OUT_HIGH);
+	if (IS_ERR(hisi_hikey_usb->hub_vbus))
+		return PTR_ERR(hisi_hikey_usb->hub_vbus);
+
+	hisi_hikey_usb->dev_role_sw = usb_role_switch_get(dev);
+	if (!hisi_hikey_usb->dev_role_sw)
+		return -EPROBE_DEFER;
+	if (IS_ERR(hisi_hikey_usb->dev_role_sw))
+		return PTR_ERR(hisi_hikey_usb->dev_role_sw);
+
+	hub_role_switch.fwnode = dev_fwnode(dev);
+	hub_role_switch.set = hub_usb_role_switch_set;
+	hub_role_switch.get = hub_usb_role_switch_get;
+	hisi_hikey_usb->hub_role_sw = usb_role_switch_register(dev,
+							&hub_role_switch);
+
+	if (IS_ERR(hisi_hikey_usb->hub_role_sw)) {
+		usb_role_switch_put(hisi_hikey_usb->dev_role_sw);
+		return PTR_ERR(hisi_hikey_usb->hub_role_sw);
+	}
+
+	platform_set_drvdata(pdev, hisi_hikey_usb);
+
+	return 0;
+}
+
+static int  hisi_hikey_usb_remove(struct platform_device *pdev)
+{
+	struct hisi_hikey_usb *hisi_hikey_usb = platform_get_drvdata(pdev);
+
+	if (hisi_hikey_usb->hub_role_sw)
+		usb_role_switch_unregister(hisi_hikey_usb->hub_role_sw);
+
+	if (hisi_hikey_usb->dev_role_sw)
+		usb_role_switch_put(hisi_hikey_usb->dev_role_sw);
+
+	return 0;
+}
+
+static const struct of_device_id id_table_hisi_hikey_usb[] = {
+	{.compatible = "hisilicon,gpio_hubv1"},
+	{}
+};
+MODULE_DEVICE_TABLE(of, id_table_hisi_hikey_usb);
+
+static struct platform_driver hisi_hikey_usb_driver = {
+	.probe = hisi_hikey_usb_probe,
+	.remove = hisi_hikey_usb_remove,
+	.driver = {
+		.name = DEVICE_DRIVER_NAME,
+		.of_match_table = id_table_hisi_hikey_usb,
+	},
+};
+
+module_platform_driver(hisi_hikey_usb_driver);
+
+MODULE_AUTHOR("Yu Chen <chenyu56@huawei.com>");
+MODULE_DESCRIPTION("Driver Support for USB functionality of Hikey");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/misc/lkdtm/Makefile b/drivers/misc/lkdtm/Makefile
index 30c8ac2..73fb627 100644
--- a/drivers/misc/lkdtm/Makefile
+++ b/drivers/misc/lkdtm/Makefile
@@ -13,6 +13,7 @@
 
 KASAN_SANITIZE_stackleak.o	:= n
 KCOV_INSTRUMENT_rodata.o	:= n
+CFLAGS_REMOVE_rodata.o		+= $(CC_FLAGS_LTO)
 
 OBJCOPYFLAGS :=
 OBJCOPYFLAGS_rodata_objcopy.o	:= \
diff --git a/drivers/misc/lkdtm/bugs.c b/drivers/misc/lkdtm/bugs.c
index 4d5a512..e5d33ca 100644
--- a/drivers/misc/lkdtm/bugs.c
+++ b/drivers/misc/lkdtm/bugs.c
@@ -113,9 +113,8 @@ noinline void lkdtm_CORRUPT_STACK(void)
 	/* Use default char array length that triggers stack protection. */
 	char data[8] __aligned(sizeof(void *));
 
-	__lkdtm_CORRUPT_STACK(&data);
-
-	pr_info("Corrupted stack containing char array ...\n");
+	pr_info("Corrupting stack containing char array ...\n");
+	__lkdtm_CORRUPT_STACK((void *)&data);
 }
 
 /* Same as above but will only get a canary with -fstack-protector-strong */
@@ -126,9 +125,8 @@ noinline void lkdtm_CORRUPT_STACK_STRONG(void)
 		unsigned long *ptr;
 	} data __aligned(sizeof(void *));
 
-	__lkdtm_CORRUPT_STACK(&data);
-
-	pr_info("Corrupted stack containing union ...\n");
+	pr_info("Corrupting stack containing union ...\n");
+	__lkdtm_CORRUPT_STACK((void *)&data);
 }
 
 void lkdtm_UNALIGNED_LOAD_STORE_WRITE(void)
diff --git a/drivers/misc/lkdtm/heap.c b/drivers/misc/lkdtm/heap.c
index 3c5cec8..1323bc1 100644
--- a/drivers/misc/lkdtm/heap.c
+++ b/drivers/misc/lkdtm/heap.c
@@ -58,11 +58,12 @@ void lkdtm_READ_AFTER_FREE(void)
 	int *base, *val, saw;
 	size_t len = 1024;
 	/*
-	 * The slub allocator uses the first word to store the free
-	 * pointer in some configurations. Use the middle of the
-	 * allocation to avoid running into the freelist
+	 * The slub allocator will use the either the first word or
+	 * the middle of the allocation to store the free pointer,
+	 * depending on configurations. Store in the second word to
+	 * avoid running into the freelist.
 	 */
-	size_t offset = (len / sizeof(*base)) / 2;
+	size_t offset = sizeof(*base);
 
 	base = kmalloc(len, GFP_KERNEL);
 	if (!base) {
diff --git a/drivers/misc/lkdtm/perms.c b/drivers/misc/lkdtm/perms.c
index 62f76d5..2dede2e 100644
--- a/drivers/misc/lkdtm/perms.c
+++ b/drivers/misc/lkdtm/perms.c
@@ -57,6 +57,7 @@ static noinline void execute_location(void *dst, bool write)
 	}
 	pr_info("attempting bad execution at %px\n", func);
 	func();
+	pr_err("FAIL: func returned\n");
 }
 
 static void execute_user_location(void *dst)
@@ -75,20 +76,22 @@ static void execute_user_location(void *dst)
 		return;
 	pr_info("attempting bad execution at %px\n", func);
 	func();
+	pr_err("FAIL: func returned\n");
 }
 
 void lkdtm_WRITE_RO(void)
 {
-	/* Explicitly cast away "const" for the test. */
-	unsigned long *ptr = (unsigned long *)&rodata;
+	/* Explicitly cast away "const" for the test and make volatile. */
+	volatile unsigned long *ptr = (unsigned long *)&rodata;
 
 	pr_info("attempting bad rodata write at %px\n", ptr);
 	*ptr ^= 0xabcd1234;
+	pr_err("FAIL: survived bad write\n");
 }
 
 void lkdtm_WRITE_RO_AFTER_INIT(void)
 {
-	unsigned long *ptr = &ro_after_init;
+	volatile unsigned long *ptr = &ro_after_init;
 
 	/*
 	 * Verify we were written to during init. Since an Oops
@@ -102,19 +105,21 @@ void lkdtm_WRITE_RO_AFTER_INIT(void)
 
 	pr_info("attempting bad ro_after_init write at %px\n", ptr);
 	*ptr ^= 0xabcd1234;
+	pr_err("FAIL: survived bad write\n");
 }
 
 void lkdtm_WRITE_KERN(void)
 {
 	size_t size;
-	unsigned char *ptr;
+	volatile unsigned char *ptr;
 
 	size = (unsigned long)do_overwritten - (unsigned long)do_nothing;
 	ptr = (unsigned char *)do_overwritten;
 
 	pr_info("attempting bad %zu byte write at %px\n", size, ptr);
-	memcpy(ptr, (unsigned char *)do_nothing, size);
+	memcpy((void *)ptr, (unsigned char *)do_nothing, size);
 	flush_icache_range((unsigned long)ptr, (unsigned long)(ptr + size));
+	pr_err("FAIL: survived bad write\n");
 
 	do_overwritten();
 }
@@ -193,9 +198,11 @@ void lkdtm_ACCESS_USERSPACE(void)
 	pr_info("attempting bad read at %px\n", ptr);
 	tmp = *ptr;
 	tmp += 0xc0dec0de;
+	pr_err("FAIL: survived bad read\n");
 
 	pr_info("attempting bad write at %px\n", ptr);
 	*ptr = tmp;
+	pr_err("FAIL: survived bad write\n");
 
 	vm_munmap(user_addr, PAGE_SIZE);
 }
@@ -203,19 +210,20 @@ void lkdtm_ACCESS_USERSPACE(void)
 void lkdtm_ACCESS_NULL(void)
 {
 	unsigned long tmp;
-	unsigned long *ptr = (unsigned long *)NULL;
+	volatile unsigned long *ptr = (unsigned long *)NULL;
 
 	pr_info("attempting bad read at %px\n", ptr);
 	tmp = *ptr;
 	tmp += 0xc0dec0de;
+	pr_err("FAIL: survived bad read\n");
 
 	pr_info("attempting bad write at %px\n", ptr);
 	*ptr = tmp;
+	pr_err("FAIL: survived bad write\n");
 }
 
 void __init lkdtm_perms_init(void)
 {
 	/* Make sure we can write to __ro_after_init values during __init */
 	ro_after_init |= 0xAA;
-
 }
diff --git a/drivers/misc/lkdtm/usercopy.c b/drivers/misc/lkdtm/usercopy.c
index e172719..b833367 100644
--- a/drivers/misc/lkdtm/usercopy.c
+++ b/drivers/misc/lkdtm/usercopy.c
@@ -304,19 +304,22 @@ void lkdtm_USERCOPY_KERNEL(void)
 		return;
 	}
 
-	pr_info("attempting good copy_to_user from kernel rodata\n");
+	pr_info("attempting good copy_to_user from kernel rodata: %px\n",
+		test_text);
 	if (copy_to_user((void __user *)user_addr, test_text,
 			 unconst + sizeof(test_text))) {
 		pr_warn("copy_to_user failed unexpectedly?!\n");
 		goto free_user;
 	}
 
-	pr_info("attempting bad copy_to_user from kernel text\n");
+	pr_info("attempting bad copy_to_user from kernel text: %px\n",
+		vm_mmap);
 	if (copy_to_user((void __user *)user_addr, vm_mmap,
 			 unconst + PAGE_SIZE)) {
 		pr_warn("copy_to_user failed, but lacked Oops\n");
 		goto free_user;
 	}
+	pr_err("FAIL: survived bad copy_to_user()\n");
 
 free_user:
 	vm_munmap(user_addr, PAGE_SIZE);
diff --git a/drivers/misc/uid_sys_stats.c b/drivers/misc/uid_sys_stats.c
new file mode 100644
index 0000000..6f17a3c8
--- /dev/null
+++ b/drivers/misc/uid_sys_stats.c
@@ -0,0 +1,706 @@
+/* drivers/misc/uid_sys_stats.c
+ *
+ * Copyright (C) 2014 - 2015 Google, Inc.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <linux/atomic.h>
+#include <linux/err.h>
+#include <linux/hashtable.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/list.h>
+#include <linux/mm.h>
+#include <linux/proc_fs.h>
+#include <linux/profile.h>
+#include <linux/rtmutex.h>
+#include <linux/sched/cputime.h>
+#include <linux/seq_file.h>
+#include <linux/slab.h>
+#include <linux/uaccess.h>
+
+
+#define UID_HASH_BITS	10
+DECLARE_HASHTABLE(hash_table, UID_HASH_BITS);
+
+static DEFINE_RT_MUTEX(uid_lock);
+static struct proc_dir_entry *cpu_parent;
+static struct proc_dir_entry *io_parent;
+static struct proc_dir_entry *proc_parent;
+
+struct io_stats {
+	u64 read_bytes;
+	u64 write_bytes;
+	u64 rchar;
+	u64 wchar;
+	u64 fsync;
+};
+
+#define UID_STATE_FOREGROUND	0
+#define UID_STATE_BACKGROUND	1
+#define UID_STATE_BUCKET_SIZE	2
+
+#define UID_STATE_TOTAL_CURR	2
+#define UID_STATE_TOTAL_LAST	3
+#define UID_STATE_DEAD_TASKS	4
+#define UID_STATE_SIZE		5
+
+#define MAX_TASK_COMM_LEN 256
+
+struct task_entry {
+	char comm[MAX_TASK_COMM_LEN];
+	pid_t pid;
+	struct io_stats io[UID_STATE_SIZE];
+	struct hlist_node hash;
+};
+
+struct uid_entry {
+	uid_t uid;
+	u64 utime;
+	u64 stime;
+	u64 active_utime;
+	u64 active_stime;
+	int state;
+	struct io_stats io[UID_STATE_SIZE];
+	struct hlist_node hash;
+#ifdef CONFIG_UID_SYS_STATS_DEBUG
+	DECLARE_HASHTABLE(task_entries, UID_HASH_BITS);
+#endif
+};
+
+static u64 compute_write_bytes(struct task_struct *task)
+{
+	if (task->ioac.write_bytes <= task->ioac.cancelled_write_bytes)
+		return 0;
+
+	return task->ioac.write_bytes - task->ioac.cancelled_write_bytes;
+}
+
+static void compute_io_bucket_stats(struct io_stats *io_bucket,
+					struct io_stats *io_curr,
+					struct io_stats *io_last,
+					struct io_stats *io_dead)
+{
+	/* tasks could switch to another uid group, but its io_last in the
+	 * previous uid group could still be positive.
+	 * therefore before each update, do an overflow check first
+	 */
+	int64_t delta;
+
+	delta = io_curr->read_bytes + io_dead->read_bytes -
+		io_last->read_bytes;
+	io_bucket->read_bytes += delta > 0 ? delta : 0;
+	delta = io_curr->write_bytes + io_dead->write_bytes -
+		io_last->write_bytes;
+	io_bucket->write_bytes += delta > 0 ? delta : 0;
+	delta = io_curr->rchar + io_dead->rchar - io_last->rchar;
+	io_bucket->rchar += delta > 0 ? delta : 0;
+	delta = io_curr->wchar + io_dead->wchar - io_last->wchar;
+	io_bucket->wchar += delta > 0 ? delta : 0;
+	delta = io_curr->fsync + io_dead->fsync - io_last->fsync;
+	io_bucket->fsync += delta > 0 ? delta : 0;
+
+	io_last->read_bytes = io_curr->read_bytes;
+	io_last->write_bytes = io_curr->write_bytes;
+	io_last->rchar = io_curr->rchar;
+	io_last->wchar = io_curr->wchar;
+	io_last->fsync = io_curr->fsync;
+
+	memset(io_dead, 0, sizeof(struct io_stats));
+}
+
+#ifdef CONFIG_UID_SYS_STATS_DEBUG
+static void get_full_task_comm(struct task_entry *task_entry,
+		struct task_struct *task)
+{
+	int i = 0, offset = 0, len = 0;
+	/* save one byte for terminating null character */
+	int unused_len = MAX_TASK_COMM_LEN - TASK_COMM_LEN - 1;
+	char buf[MAX_TASK_COMM_LEN - TASK_COMM_LEN - 1];
+	struct mm_struct *mm = task->mm;
+
+	/* fill the first TASK_COMM_LEN bytes with thread name */
+	__get_task_comm(task_entry->comm, TASK_COMM_LEN, task);
+	i = strlen(task_entry->comm);
+	while (i < TASK_COMM_LEN)
+		task_entry->comm[i++] = ' ';
+
+	/* next the executable file name */
+	if (mm) {
+		down_read(&mm->mmap_sem);
+		if (mm->exe_file) {
+			char *pathname = d_path(&mm->exe_file->f_path, buf,
+					unused_len);
+
+			if (!IS_ERR(pathname)) {
+				len = strlcpy(task_entry->comm + i, pathname,
+						unused_len);
+				i += len;
+				task_entry->comm[i++] = ' ';
+				unused_len--;
+			}
+		}
+		up_read(&mm->mmap_sem);
+	}
+	unused_len -= len;
+
+	/* fill the rest with command line argument
+	 * replace each null or new line character
+	 * between args in argv with whitespace */
+	len = get_cmdline(task, buf, unused_len);
+	while (offset < len) {
+		if (buf[offset] != '\0' && buf[offset] != '\n')
+			task_entry->comm[i++] = buf[offset];
+		else
+			task_entry->comm[i++] = ' ';
+		offset++;
+	}
+
+	/* get rid of trailing whitespaces in case when arg is memset to
+	 * zero before being reset in userspace
+	 */
+	while (task_entry->comm[i-1] == ' ')
+		i--;
+	task_entry->comm[i] = '\0';
+}
+
+static struct task_entry *find_task_entry(struct uid_entry *uid_entry,
+		struct task_struct *task)
+{
+	struct task_entry *task_entry;
+
+	hash_for_each_possible(uid_entry->task_entries, task_entry, hash,
+			task->pid) {
+		if (task->pid == task_entry->pid) {
+			/* if thread name changed, update the entire command */
+			int len = strnchr(task_entry->comm, ' ', TASK_COMM_LEN)
+				- task_entry->comm;
+
+			if (strncmp(task_entry->comm, task->comm, len))
+				get_full_task_comm(task_entry, task);
+			return task_entry;
+		}
+	}
+	return NULL;
+}
+
+static struct task_entry *find_or_register_task(struct uid_entry *uid_entry,
+		struct task_struct *task)
+{
+	struct task_entry *task_entry;
+	pid_t pid = task->pid;
+
+	task_entry = find_task_entry(uid_entry, task);
+	if (task_entry)
+		return task_entry;
+
+	task_entry = kzalloc(sizeof(struct task_entry), GFP_ATOMIC);
+	if (!task_entry)
+		return NULL;
+
+	get_full_task_comm(task_entry, task);
+
+	task_entry->pid = pid;
+	hash_add(uid_entry->task_entries, &task_entry->hash, (unsigned int)pid);
+
+	return task_entry;
+}
+
+static void remove_uid_tasks(struct uid_entry *uid_entry)
+{
+	struct task_entry *task_entry;
+	unsigned long bkt_task;
+	struct hlist_node *tmp_task;
+
+	hash_for_each_safe(uid_entry->task_entries, bkt_task,
+			tmp_task, task_entry, hash) {
+		hash_del(&task_entry->hash);
+		kfree(task_entry);
+	}
+}
+
+static void set_io_uid_tasks_zero(struct uid_entry *uid_entry)
+{
+	struct task_entry *task_entry;
+	unsigned long bkt_task;
+
+	hash_for_each(uid_entry->task_entries, bkt_task, task_entry, hash) {
+		memset(&task_entry->io[UID_STATE_TOTAL_CURR], 0,
+			sizeof(struct io_stats));
+	}
+}
+
+static void add_uid_tasks_io_stats(struct uid_entry *uid_entry,
+		struct task_struct *task, int slot)
+{
+	struct task_entry *task_entry = find_or_register_task(uid_entry, task);
+	struct io_stats *task_io_slot = &task_entry->io[slot];
+
+	task_io_slot->read_bytes += task->ioac.read_bytes;
+	task_io_slot->write_bytes += compute_write_bytes(task);
+	task_io_slot->rchar += task->ioac.rchar;
+	task_io_slot->wchar += task->ioac.wchar;
+	task_io_slot->fsync += task->ioac.syscfs;
+}
+
+static void compute_io_uid_tasks(struct uid_entry *uid_entry)
+{
+	struct task_entry *task_entry;
+	unsigned long bkt_task;
+
+	hash_for_each(uid_entry->task_entries, bkt_task, task_entry, hash) {
+		compute_io_bucket_stats(&task_entry->io[uid_entry->state],
+					&task_entry->io[UID_STATE_TOTAL_CURR],
+					&task_entry->io[UID_STATE_TOTAL_LAST],
+					&task_entry->io[UID_STATE_DEAD_TASKS]);
+	}
+}
+
+static void show_io_uid_tasks(struct seq_file *m, struct uid_entry *uid_entry)
+{
+	struct task_entry *task_entry;
+	unsigned long bkt_task;
+
+	hash_for_each(uid_entry->task_entries, bkt_task, task_entry, hash) {
+		/* Separated by comma because space exists in task comm */
+		seq_printf(m, "task,%s,%lu,%llu,%llu,%llu,%llu,%llu,%llu,%llu,%llu,%llu,%llu\n",
+				task_entry->comm,
+				(unsigned long)task_entry->pid,
+				task_entry->io[UID_STATE_FOREGROUND].rchar,
+				task_entry->io[UID_STATE_FOREGROUND].wchar,
+				task_entry->io[UID_STATE_FOREGROUND].read_bytes,
+				task_entry->io[UID_STATE_FOREGROUND].write_bytes,
+				task_entry->io[UID_STATE_BACKGROUND].rchar,
+				task_entry->io[UID_STATE_BACKGROUND].wchar,
+				task_entry->io[UID_STATE_BACKGROUND].read_bytes,
+				task_entry->io[UID_STATE_BACKGROUND].write_bytes,
+				task_entry->io[UID_STATE_FOREGROUND].fsync,
+				task_entry->io[UID_STATE_BACKGROUND].fsync);
+	}
+}
+#else
+static void remove_uid_tasks(struct uid_entry *uid_entry) {};
+static void set_io_uid_tasks_zero(struct uid_entry *uid_entry) {};
+static void add_uid_tasks_io_stats(struct uid_entry *uid_entry,
+		struct task_struct *task, int slot) {};
+static void compute_io_uid_tasks(struct uid_entry *uid_entry) {};
+static void show_io_uid_tasks(struct seq_file *m,
+		struct uid_entry *uid_entry) {}
+#endif
+
+static struct uid_entry *find_uid_entry(uid_t uid)
+{
+	struct uid_entry *uid_entry;
+	hash_for_each_possible(hash_table, uid_entry, hash, uid) {
+		if (uid_entry->uid == uid)
+			return uid_entry;
+	}
+	return NULL;
+}
+
+static struct uid_entry *find_or_register_uid(uid_t uid)
+{
+	struct uid_entry *uid_entry;
+
+	uid_entry = find_uid_entry(uid);
+	if (uid_entry)
+		return uid_entry;
+
+	uid_entry = kzalloc(sizeof(struct uid_entry), GFP_ATOMIC);
+	if (!uid_entry)
+		return NULL;
+
+	uid_entry->uid = uid;
+#ifdef CONFIG_UID_SYS_STATS_DEBUG
+	hash_init(uid_entry->task_entries);
+#endif
+	hash_add(hash_table, &uid_entry->hash, uid);
+
+	return uid_entry;
+}
+
+static int uid_cputime_show(struct seq_file *m, void *v)
+{
+	struct uid_entry *uid_entry = NULL;
+	struct task_struct *task, *temp;
+	struct user_namespace *user_ns = current_user_ns();
+	u64 utime;
+	u64 stime;
+	unsigned long bkt;
+	uid_t uid;
+
+	rt_mutex_lock(&uid_lock);
+
+	hash_for_each(hash_table, bkt, uid_entry, hash) {
+		uid_entry->active_stime = 0;
+		uid_entry->active_utime = 0;
+	}
+
+	rcu_read_lock();
+	do_each_thread(temp, task) {
+		uid = from_kuid_munged(user_ns, task_uid(task));
+		if (!uid_entry || uid_entry->uid != uid)
+			uid_entry = find_or_register_uid(uid);
+		if (!uid_entry) {
+			rcu_read_unlock();
+			rt_mutex_unlock(&uid_lock);
+			pr_err("%s: failed to find the uid_entry for uid %d\n",
+				__func__, uid);
+			return -ENOMEM;
+		}
+		/* avoid double accounting of dying threads */
+		if (!(task->flags & PF_EXITING)) {
+			task_cputime_adjusted(task, &utime, &stime);
+			uid_entry->active_utime += utime;
+			uid_entry->active_stime += stime;
+		}
+	} while_each_thread(temp, task);
+	rcu_read_unlock();
+
+	hash_for_each(hash_table, bkt, uid_entry, hash) {
+		u64 total_utime = uid_entry->utime +
+							uid_entry->active_utime;
+		u64 total_stime = uid_entry->stime +
+							uid_entry->active_stime;
+		seq_printf(m, "%d: %llu %llu\n", uid_entry->uid,
+			ktime_to_us(total_utime), ktime_to_us(total_stime));
+	}
+
+	rt_mutex_unlock(&uid_lock);
+	return 0;
+}
+
+static int uid_cputime_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, uid_cputime_show, PDE_DATA(inode));
+}
+
+static const struct file_operations uid_cputime_fops = {
+	.open		= uid_cputime_open,
+	.read		= seq_read,
+	.llseek		= seq_lseek,
+	.release	= single_release,
+};
+
+static int uid_remove_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, NULL, NULL);
+}
+
+static ssize_t uid_remove_write(struct file *file,
+			const char __user *buffer, size_t count, loff_t *ppos)
+{
+	struct uid_entry *uid_entry;
+	struct hlist_node *tmp;
+	char uids[128];
+	char *start_uid, *end_uid = NULL;
+	long int uid_start = 0, uid_end = 0;
+
+	if (count >= sizeof(uids))
+		count = sizeof(uids) - 1;
+
+	if (copy_from_user(uids, buffer, count))
+		return -EFAULT;
+
+	uids[count] = '\0';
+	end_uid = uids;
+	start_uid = strsep(&end_uid, "-");
+
+	if (!start_uid || !end_uid)
+		return -EINVAL;
+
+	if (kstrtol(start_uid, 10, &uid_start) != 0 ||
+		kstrtol(end_uid, 10, &uid_end) != 0) {
+		return -EINVAL;
+	}
+
+	rt_mutex_lock(&uid_lock);
+
+	for (; uid_start <= uid_end; uid_start++) {
+		hash_for_each_possible_safe(hash_table, uid_entry, tmp,
+							hash, (uid_t)uid_start) {
+			if (uid_start == uid_entry->uid) {
+				remove_uid_tasks(uid_entry);
+				hash_del(&uid_entry->hash);
+				kfree(uid_entry);
+			}
+		}
+	}
+
+	rt_mutex_unlock(&uid_lock);
+	return count;
+}
+
+static const struct file_operations uid_remove_fops = {
+	.open		= uid_remove_open,
+	.release	= single_release,
+	.write		= uid_remove_write,
+};
+
+
+static void add_uid_io_stats(struct uid_entry *uid_entry,
+			struct task_struct *task, int slot)
+{
+	struct io_stats *io_slot = &uid_entry->io[slot];
+
+	/* avoid double accounting of dying threads */
+	if (slot != UID_STATE_DEAD_TASKS && (task->flags & PF_EXITING))
+		return;
+
+	io_slot->read_bytes += task->ioac.read_bytes;
+	io_slot->write_bytes += compute_write_bytes(task);
+	io_slot->rchar += task->ioac.rchar;
+	io_slot->wchar += task->ioac.wchar;
+	io_slot->fsync += task->ioac.syscfs;
+
+	add_uid_tasks_io_stats(uid_entry, task, slot);
+}
+
+static void update_io_stats_all_locked(void)
+{
+	struct uid_entry *uid_entry = NULL;
+	struct task_struct *task, *temp;
+	struct user_namespace *user_ns = current_user_ns();
+	unsigned long bkt;
+	uid_t uid;
+
+	hash_for_each(hash_table, bkt, uid_entry, hash) {
+		memset(&uid_entry->io[UID_STATE_TOTAL_CURR], 0,
+			sizeof(struct io_stats));
+		set_io_uid_tasks_zero(uid_entry);
+	}
+
+	rcu_read_lock();
+	do_each_thread(temp, task) {
+		uid = from_kuid_munged(user_ns, task_uid(task));
+		if (!uid_entry || uid_entry->uid != uid)
+			uid_entry = find_or_register_uid(uid);
+		if (!uid_entry)
+			continue;
+		add_uid_io_stats(uid_entry, task, UID_STATE_TOTAL_CURR);
+	} while_each_thread(temp, task);
+	rcu_read_unlock();
+
+	hash_for_each(hash_table, bkt, uid_entry, hash) {
+		compute_io_bucket_stats(&uid_entry->io[uid_entry->state],
+					&uid_entry->io[UID_STATE_TOTAL_CURR],
+					&uid_entry->io[UID_STATE_TOTAL_LAST],
+					&uid_entry->io[UID_STATE_DEAD_TASKS]);
+		compute_io_uid_tasks(uid_entry);
+	}
+}
+
+static void update_io_stats_uid_locked(struct uid_entry *uid_entry)
+{
+	struct task_struct *task, *temp;
+	struct user_namespace *user_ns = current_user_ns();
+
+	memset(&uid_entry->io[UID_STATE_TOTAL_CURR], 0,
+		sizeof(struct io_stats));
+	set_io_uid_tasks_zero(uid_entry);
+
+	rcu_read_lock();
+	do_each_thread(temp, task) {
+		if (from_kuid_munged(user_ns, task_uid(task)) != uid_entry->uid)
+			continue;
+		add_uid_io_stats(uid_entry, task, UID_STATE_TOTAL_CURR);
+	} while_each_thread(temp, task);
+	rcu_read_unlock();
+
+	compute_io_bucket_stats(&uid_entry->io[uid_entry->state],
+				&uid_entry->io[UID_STATE_TOTAL_CURR],
+				&uid_entry->io[UID_STATE_TOTAL_LAST],
+				&uid_entry->io[UID_STATE_DEAD_TASKS]);
+	compute_io_uid_tasks(uid_entry);
+}
+
+
+static int uid_io_show(struct seq_file *m, void *v)
+{
+	struct uid_entry *uid_entry;
+	unsigned long bkt;
+
+	rt_mutex_lock(&uid_lock);
+
+	update_io_stats_all_locked();
+
+	hash_for_each(hash_table, bkt, uid_entry, hash) {
+		seq_printf(m, "%d %llu %llu %llu %llu %llu %llu %llu %llu %llu %llu\n",
+				uid_entry->uid,
+				uid_entry->io[UID_STATE_FOREGROUND].rchar,
+				uid_entry->io[UID_STATE_FOREGROUND].wchar,
+				uid_entry->io[UID_STATE_FOREGROUND].read_bytes,
+				uid_entry->io[UID_STATE_FOREGROUND].write_bytes,
+				uid_entry->io[UID_STATE_BACKGROUND].rchar,
+				uid_entry->io[UID_STATE_BACKGROUND].wchar,
+				uid_entry->io[UID_STATE_BACKGROUND].read_bytes,
+				uid_entry->io[UID_STATE_BACKGROUND].write_bytes,
+				uid_entry->io[UID_STATE_FOREGROUND].fsync,
+				uid_entry->io[UID_STATE_BACKGROUND].fsync);
+
+		show_io_uid_tasks(m, uid_entry);
+	}
+
+	rt_mutex_unlock(&uid_lock);
+	return 0;
+}
+
+static int uid_io_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, uid_io_show, PDE_DATA(inode));
+}
+
+static const struct file_operations uid_io_fops = {
+	.open		= uid_io_open,
+	.read		= seq_read,
+	.llseek		= seq_lseek,
+	.release	= single_release,
+};
+
+static int uid_procstat_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, NULL, NULL);
+}
+
+static ssize_t uid_procstat_write(struct file *file,
+			const char __user *buffer, size_t count, loff_t *ppos)
+{
+	struct uid_entry *uid_entry;
+	uid_t uid;
+	int argc, state;
+	char input[128];
+
+	if (count >= sizeof(input))
+		return -EINVAL;
+
+	if (copy_from_user(input, buffer, count))
+		return -EFAULT;
+
+	input[count] = '\0';
+
+	argc = sscanf(input, "%u %d", &uid, &state);
+	if (argc != 2)
+		return -EINVAL;
+
+	if (state != UID_STATE_BACKGROUND && state != UID_STATE_FOREGROUND)
+		return -EINVAL;
+
+	rt_mutex_lock(&uid_lock);
+
+	uid_entry = find_or_register_uid(uid);
+	if (!uid_entry) {
+		rt_mutex_unlock(&uid_lock);
+		return -EINVAL;
+	}
+
+	if (uid_entry->state == state) {
+		rt_mutex_unlock(&uid_lock);
+		return count;
+	}
+
+	update_io_stats_uid_locked(uid_entry);
+
+	uid_entry->state = state;
+
+	rt_mutex_unlock(&uid_lock);
+
+	return count;
+}
+
+static const struct file_operations uid_procstat_fops = {
+	.open		= uid_procstat_open,
+	.release	= single_release,
+	.write		= uid_procstat_write,
+};
+
+static int process_notifier(struct notifier_block *self,
+			unsigned long cmd, void *v)
+{
+	struct task_struct *task = v;
+	struct uid_entry *uid_entry;
+	u64 utime, stime;
+	uid_t uid;
+
+	if (!task)
+		return NOTIFY_OK;
+
+	rt_mutex_lock(&uid_lock);
+	uid = from_kuid_munged(current_user_ns(), task_uid(task));
+	uid_entry = find_or_register_uid(uid);
+	if (!uid_entry) {
+		pr_err("%s: failed to find uid %d\n", __func__, uid);
+		goto exit;
+	}
+
+	task_cputime_adjusted(task, &utime, &stime);
+	uid_entry->utime += utime;
+	uid_entry->stime += stime;
+
+	add_uid_io_stats(uid_entry, task, UID_STATE_DEAD_TASKS);
+
+exit:
+	rt_mutex_unlock(&uid_lock);
+	return NOTIFY_OK;
+}
+
+static struct notifier_block process_notifier_block = {
+	.notifier_call	= process_notifier,
+};
+
+static int __init proc_uid_sys_stats_init(void)
+{
+	hash_init(hash_table);
+
+	cpu_parent = proc_mkdir("uid_cputime", NULL);
+	if (!cpu_parent) {
+		pr_err("%s: failed to create uid_cputime proc entry\n",
+			__func__);
+		goto err;
+	}
+
+	proc_create_data("remove_uid_range", 0222, cpu_parent,
+		&uid_remove_fops, NULL);
+	proc_create_data("show_uid_stat", 0444, cpu_parent,
+		&uid_cputime_fops, NULL);
+
+	io_parent = proc_mkdir("uid_io", NULL);
+	if (!io_parent) {
+		pr_err("%s: failed to create uid_io proc entry\n",
+			__func__);
+		goto err;
+	}
+
+	proc_create_data("stats", 0444, io_parent,
+		&uid_io_fops, NULL);
+
+	proc_parent = proc_mkdir("uid_procstat", NULL);
+	if (!proc_parent) {
+		pr_err("%s: failed to create uid_procstat proc entry\n",
+			__func__);
+		goto err;
+	}
+
+	proc_create_data("set", 0222, proc_parent,
+		&uid_procstat_fops, NULL);
+
+	profile_event_register(PROFILE_TASK_EXIT, &process_notifier_block);
+
+	return 0;
+
+err:
+	remove_proc_subtree("uid_cputime", NULL);
+	remove_proc_subtree("uid_io", NULL);
+	remove_proc_subtree("uid_procstat", NULL);
+	return -ENOMEM;
+}
+
+early_initcall(proc_uid_sys_stats_init);
diff --git a/drivers/misc/vmw_vmci/vmci_driver.c b/drivers/misc/vmw_vmci/vmci_driver.c
index 819e359..95fed46 100644
--- a/drivers/misc/vmw_vmci/vmci_driver.c
+++ b/drivers/misc/vmw_vmci/vmci_driver.c
@@ -28,6 +28,10 @@ MODULE_PARM_DESC(disable_guest,
 static bool vmci_guest_personality_initialized;
 static bool vmci_host_personality_initialized;
 
+static DEFINE_MUTEX(vmci_vsock_mutex); /* protects vmci_vsock_transport_cb */
+static vmci_vsock_cb vmci_vsock_transport_cb;
+bool vmci_vsock_cb_host_called;
+
 /*
  * vmci_get_context_id() - Gets the current context ID.
  *
@@ -45,6 +49,69 @@ u32 vmci_get_context_id(void)
 }
 EXPORT_SYMBOL_GPL(vmci_get_context_id);
 
+/*
+ * vmci_register_vsock_callback() - Register the VSOCK vmci_transport callback.
+ *
+ * The callback will be called when the first host or guest becomes active,
+ * or if they are already active when this function is called.
+ * To unregister the callback, call this function with NULL parameter.
+ *
+ * Returns 0 on success. -EBUSY if a callback is already registered.
+ */
+int vmci_register_vsock_callback(vmci_vsock_cb callback)
+{
+	int err = 0;
+
+	mutex_lock(&vmci_vsock_mutex);
+
+	if (vmci_vsock_transport_cb && callback) {
+		err = -EBUSY;
+		goto out;
+	}
+
+	vmci_vsock_transport_cb = callback;
+
+	if (!vmci_vsock_transport_cb) {
+		vmci_vsock_cb_host_called = false;
+		goto out;
+	}
+
+	if (vmci_guest_code_active())
+		vmci_vsock_transport_cb(false);
+
+	if (vmci_host_users() > 0) {
+		vmci_vsock_cb_host_called = true;
+		vmci_vsock_transport_cb(true);
+	}
+
+out:
+	mutex_unlock(&vmci_vsock_mutex);
+	return err;
+}
+EXPORT_SYMBOL_GPL(vmci_register_vsock_callback);
+
+void vmci_call_vsock_callback(bool is_host)
+{
+	mutex_lock(&vmci_vsock_mutex);
+
+	if (!vmci_vsock_transport_cb)
+		goto out;
+
+	/* In the host, this function could be called multiple times,
+	 * but we want to register it only once.
+	 */
+	if (is_host) {
+		if (vmci_vsock_cb_host_called)
+			goto out;
+
+		vmci_vsock_cb_host_called = true;
+	}
+
+	vmci_vsock_transport_cb(is_host);
+out:
+	mutex_unlock(&vmci_vsock_mutex);
+}
+
 static int __init vmci_drv_init(void)
 {
 	int vmci_err;
diff --git a/drivers/misc/vmw_vmci/vmci_driver.h b/drivers/misc/vmw_vmci/vmci_driver.h
index aab81b6..9906824 100644
--- a/drivers/misc/vmw_vmci/vmci_driver.h
+++ b/drivers/misc/vmw_vmci/vmci_driver.h
@@ -36,10 +36,12 @@ extern struct pci_dev *vmci_pdev;
 
 u32 vmci_get_context_id(void);
 int vmci_send_datagram(struct vmci_datagram *dg);
+void vmci_call_vsock_callback(bool is_host);
 
 int vmci_host_init(void);
 void vmci_host_exit(void);
 bool vmci_host_code_active(void);
+int vmci_host_users(void);
 
 int vmci_guest_init(void);
 void vmci_guest_exit(void);
diff --git a/drivers/misc/vmw_vmci/vmci_guest.c b/drivers/misc/vmw_vmci/vmci_guest.c
index 7a84a48..cc8eeb3 100644
--- a/drivers/misc/vmw_vmci/vmci_guest.c
+++ b/drivers/misc/vmw_vmci/vmci_guest.c
@@ -637,6 +637,8 @@ static int vmci_guest_probe_device(struct pci_dev *pdev,
 		  vmci_dev->iobase + VMCI_CONTROL_ADDR);
 
 	pci_set_drvdata(pdev, vmci_dev);
+
+	vmci_call_vsock_callback(false);
 	return 0;
 
 err_free_irq:
diff --git a/drivers/misc/vmw_vmci/vmci_host.c b/drivers/misc/vmw_vmci/vmci_host.c
index 833e2bd..ff3c396 100644
--- a/drivers/misc/vmw_vmci/vmci_host.c
+++ b/drivers/misc/vmw_vmci/vmci_host.c
@@ -108,6 +108,11 @@ bool vmci_host_code_active(void)
 	     atomic_read(&vmci_host_active_users) > 0);
 }
 
+int vmci_host_users(void)
+{
+	return atomic_read(&vmci_host_active_users);
+}
+
 /*
  * Called on open of /dev/vmci.
  */
@@ -338,6 +343,8 @@ static int vmci_host_do_init_context(struct vmci_host_dev *vmci_host_dev,
 	vmci_host_dev->ct_type = VMCIOBJ_CONTEXT;
 	atomic_inc(&vmci_host_active_users);
 
+	vmci_call_vsock_callback(true);
+
 	retval = 0;
 
 out:
diff --git a/drivers/mmc/core/Kconfig b/drivers/mmc/core/Kconfig
index c12fe13..ae8b69a 100644
--- a/drivers/mmc/core/Kconfig
+++ b/drivers/mmc/core/Kconfig
@@ -81,3 +81,11 @@
 	  This driver is only of interest to those developing or
 	  testing a host driver. Most people should say N here.
 
+config MMC_CRYPTO
+	bool "MMC Crypto Engine Support"
+	depends on BLK_INLINE_ENCRYPTION
+	help
+	  Enable Crypto Engine Support in MMC.
+	  Enabling this makes it possible for the kernel to use the crypto
+	  capabilities of the MMC device (if present) to perform crypto
+	  operations on data being transferred to/from the device.
diff --git a/drivers/mmc/core/Makefile b/drivers/mmc/core/Makefile
index 95ffe00..6a907736 100644
--- a/drivers/mmc/core/Makefile
+++ b/drivers/mmc/core/Makefile
@@ -18,3 +18,4 @@
 mmc_block-objs			:= block.o queue.o
 obj-$(CONFIG_MMC_TEST)		+= mmc_test.o
 obj-$(CONFIG_SDIO_UART)		+= sdio_uart.o
+mmc_core-$(CONFIG_MMC_CRYPTO)	+= crypto.o
diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
index 63e838e..a4baa45 100644
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
@@ -51,6 +51,7 @@
 #include "block.h"
 #include "core.h"
 #include "card.h"
+#include "crypto.h"
 #include "host.h"
 #include "bus.h"
 #include "mmc_ops.h"
@@ -168,6 +169,11 @@ MODULE_PARM_DESC(perdev_minors, "Minors numbers to allocate per device");
 
 static inline int mmc_blk_part_switch(struct mmc_card *card,
 				      unsigned int part_type);
+static void mmc_blk_rw_rq_prep(struct mmc_queue_req *mqrq,
+			       struct mmc_card *card,
+			       int disable_multi,
+			       struct mmc_queue *mq);
+static void mmc_blk_hsq_req_done(struct mmc_request *mrq);
 
 static struct mmc_blk_data *mmc_blk_get(struct gendisk *disk)
 {
@@ -1297,6 +1303,8 @@ static void mmc_blk_data_prep(struct mmc_queue *mq, struct mmc_queue_req *mqrq,
 
 	memset(brq, 0, sizeof(struct mmc_blk_request));
 
+	mmc_crypto_prepare_req(mqrq);
+
 	brq->mrq.data = &brq->data;
 	brq->mrq.tag = req->tag;
 
@@ -1533,9 +1541,30 @@ static int mmc_blk_cqe_issue_flush(struct mmc_queue *mq, struct request *req)
 	return mmc_blk_cqe_start_req(mq->card->host, mrq);
 }
 
+static int mmc_blk_hsq_issue_rw_rq(struct mmc_queue *mq, struct request *req)
+{
+	struct mmc_queue_req *mqrq = req_to_mmc_queue_req(req);
+	struct mmc_host *host = mq->card->host;
+	int err;
+
+	mmc_blk_rw_rq_prep(mqrq, mq->card, 0, mq);
+	mqrq->brq.mrq.done = mmc_blk_hsq_req_done;
+	mmc_pre_req(host, &mqrq->brq.mrq);
+
+	err = mmc_cqe_start_req(host, &mqrq->brq.mrq);
+	if (err)
+		mmc_post_req(host, &mqrq->brq.mrq, err);
+
+	return err;
+}
+
 static int mmc_blk_cqe_issue_rw_rq(struct mmc_queue *mq, struct request *req)
 {
 	struct mmc_queue_req *mqrq = req_to_mmc_queue_req(req);
+	struct mmc_host *host = mq->card->host;
+
+	if (host->hsq_enabled)
+		return mmc_blk_hsq_issue_rw_rq(mq, req);
 
 	mmc_blk_data_prep(mq, mqrq, 0, NULL, NULL);
 
@@ -1921,6 +1950,41 @@ static void mmc_blk_urgent_bkops(struct mmc_queue *mq,
 		mmc_run_bkops(mq->card);
 }
 
+static void mmc_blk_hsq_req_done(struct mmc_request *mrq)
+{
+	struct mmc_queue_req *mqrq =
+		container_of(mrq, struct mmc_queue_req, brq.mrq);
+	struct request *req = mmc_queue_req_to_req(mqrq);
+	struct request_queue *q = req->q;
+	struct mmc_queue *mq = q->queuedata;
+	struct mmc_host *host = mq->card->host;
+	unsigned long flags;
+
+	if (mmc_blk_rq_error(&mqrq->brq) ||
+	    mmc_blk_urgent_bkops_needed(mq, mqrq)) {
+		spin_lock_irqsave(&mq->lock, flags);
+		mq->recovery_needed = true;
+		mq->recovery_req = req;
+		spin_unlock_irqrestore(&mq->lock, flags);
+
+		host->cqe_ops->cqe_recovery_start(host);
+
+		schedule_work(&mq->recovery_work);
+		return;
+	}
+
+	mmc_blk_rw_reset_success(mq, req);
+
+	/*
+	 * Block layer timeouts race with completions which means the normal
+	 * completion path cannot be used during recovery.
+	 */
+	if (mq->in_recovery)
+		mmc_blk_cqe_complete_rq(mq, req);
+	else
+		blk_mq_complete_request(req);
+}
+
 void mmc_blk_mq_complete(struct request *req)
 {
 	struct mmc_queue *mq = req->q->queuedata;
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index 26644b7..6806c36 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -37,6 +37,7 @@
 
 #include "core.h"
 #include "card.h"
+#include "crypto.h"
 #include "bus.h"
 #include "host.h"
 #include "sdio_bus.h"
@@ -1009,6 +1010,8 @@ void mmc_set_initial_state(struct mmc_host *host)
 		host->ops->hs400_enhanced_strobe(host, &host->ios);
 
 	mmc_set_ios(host);
+
+	mmc_crypto_set_initial_state(host);
 }
 
 /**
diff --git a/drivers/mmc/core/crypto.c b/drivers/mmc/core/crypto.c
new file mode 100644
index 0000000..419a368
--- /dev/null
+++ b/drivers/mmc/core/crypto.c
@@ -0,0 +1,48 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * MMC crypto engine (inline encryption) support
+ *
+ * Copyright 2020 Google LLC
+ */
+
+#include <linux/blk-crypto.h>
+#include <linux/mmc/host.h>
+
+#include "core.h"
+#include "crypto.h"
+#include "queue.h"
+
+void mmc_crypto_set_initial_state(struct mmc_host *host)
+{
+	/* Reset might clear all keys, so reprogram all the keys. */
+	if (host->caps2 & MMC_CAP2_CRYPTO)
+		blk_ksm_reprogram_all_keys(&host->ksm);
+}
+
+void mmc_crypto_setup_queue(struct request_queue *q, struct mmc_host *host)
+{
+	if (host->caps2 & MMC_CAP2_CRYPTO)
+		blk_ksm_register(&host->ksm, q);
+}
+EXPORT_SYMBOL_GPL(mmc_crypto_setup_queue);
+
+void mmc_crypto_prepare_req(struct mmc_queue_req *mqrq)
+{
+	struct request *req = mmc_queue_req_to_req(mqrq);
+	struct mmc_request *mrq = &mqrq->brq.mrq;
+
+	if (!req->crypt_keyslot)
+		return;
+
+	mrq->crypto_enabled = true;
+	mrq->crypto_key_slot = blk_ksm_get_slot_idx(req->crypt_keyslot);
+
+	/*
+	 * For now we assume that all MMC drivers set max_dun_bytes_supported=4,
+	 * which is the limit for CQHCI crypto.  So all DUNs should be 32-bit.
+	 */
+	WARN_ON_ONCE(req->crypt_ctx->bc_dun[0] > U32_MAX);
+
+	mrq->data_unit_num = req->crypt_ctx->bc_dun[0];
+}
+EXPORT_SYMBOL_GPL(mmc_crypto_prepare_req);
diff --git a/drivers/mmc/core/crypto.h b/drivers/mmc/core/crypto.h
new file mode 100644
index 0000000..fbe9a52
--- /dev/null
+++ b/drivers/mmc/core/crypto.h
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * MMC crypto engine (inline encryption) support
+ *
+ * Copyright 2020 Google LLC
+ */
+
+#ifndef _MMC_CORE_CRYPTO_H
+#define _MMC_CORE_CRYPTO_H
+
+struct mmc_host;
+struct mmc_queue_req;
+struct request_queue;
+
+#ifdef CONFIG_MMC_CRYPTO
+
+void mmc_crypto_set_initial_state(struct mmc_host *host);
+
+void mmc_crypto_setup_queue(struct request_queue *q, struct mmc_host *host);
+
+void mmc_crypto_prepare_req(struct mmc_queue_req *mqrq);
+
+#else /* CONFIG_MMC_CRYPTO */
+
+static inline void mmc_crypto_set_initial_state(struct mmc_host *host)
+{
+}
+
+static inline void mmc_crypto_setup_queue(struct request_queue *q,
+					  struct mmc_host *host)
+{
+}
+
+static inline void mmc_crypto_prepare_req(struct mmc_queue_req *mqrq)
+{
+}
+
+#endif /* !CONFIG_MMC_CRYPTO */
+
+#endif /* _MMC_CORE_CRYPTO_H */
diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
index b3484de..55905c4 100644
--- a/drivers/mmc/core/host.c
+++ b/drivers/mmc/core/host.c
@@ -24,6 +24,7 @@
 #include <linux/mmc/slot-gpio.h>
 
 #include "core.h"
+#include "crypto.h"
 #include "host.h"
 #include "slot-gpio.h"
 #include "pwrseq.h"
@@ -477,7 +478,8 @@ int mmc_add_host(struct mmc_host *host)
 #endif
 
 	mmc_start_host(host);
-	mmc_register_pm_notifier(host);
+	if (!(host->pm_flags & MMC_PM_IGNORE_PM_NOTIFY))
+		mmc_register_pm_notifier(host);
 
 	return 0;
 }
@@ -494,7 +496,8 @@ EXPORT_SYMBOL(mmc_add_host);
  */
 void mmc_remove_host(struct mmc_host *host)
 {
-	mmc_unregister_pm_notifier(host);
+	if (!(host->pm_flags & MMC_PM_IGNORE_PM_NOTIFY))
+		mmc_unregister_pm_notifier(host);
 	mmc_stop_host(host);
 
 #ifdef CONFIG_DEBUG_FS
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index de14b58..918c7caa 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -647,6 +647,9 @@ static int mmc_decode_ext_csd(struct mmc_card *card, u8 *ext_csd)
 				 mmc_hostname(card->host),
 				 card->ext_csd.cmdq_depth);
 		}
+		card->ext_csd.enhanced_rpmb_supported =
+					(card->ext_csd.rel_param &
+					 EXT_CSD_WR_REL_PARAM_EN_RPMB_REL_WR);
 	}
 out:
 	return err;
@@ -786,6 +789,8 @@ MMC_DEV_ATTR(enhanced_area_offset, "%llu\n",
 		card->ext_csd.enhanced_area_offset);
 MMC_DEV_ATTR(enhanced_area_size, "%u\n", card->ext_csd.enhanced_area_size);
 MMC_DEV_ATTR(raw_rpmb_size_mult, "%#x\n", card->ext_csd.raw_rpmb_size_mult);
+MMC_DEV_ATTR(enhanced_rpmb_supported, "%#x\n",
+	card->ext_csd.enhanced_rpmb_supported);
 MMC_DEV_ATTR(rel_sectors, "%#x\n", card->ext_csd.rel_sectors);
 MMC_DEV_ATTR(ocr, "0x%08x\n", card->ocr);
 MMC_DEV_ATTR(rca, "0x%04x\n", card->rca);
@@ -843,6 +848,7 @@ static struct attribute *mmc_std_attrs[] = {
 	&dev_attr_enhanced_area_offset.attr,
 	&dev_attr_enhanced_area_size.attr,
 	&dev_attr_raw_rpmb_size_mult.attr,
+	&dev_attr_enhanced_rpmb_supported.attr,
 	&dev_attr_rel_sectors.attr,
 	&dev_attr_ocr.attr,
 	&dev_attr_rca.attr,
@@ -1851,15 +1857,19 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
 	 */
 	card->reenable_cmdq = card->ext_csd.cmdq_en;
 
-	if (card->ext_csd.cmdq_en && !host->cqe_enabled) {
+	if (host->cqe_ops && !host->cqe_enabled) {
 		err = host->cqe_ops->cqe_enable(host, card);
-		if (err) {
-			pr_err("%s: Failed to enable CQE, error %d\n",
-				mmc_hostname(host), err);
-		} else {
+		if (!err) {
 			host->cqe_enabled = true;
-			pr_info("%s: Command Queue Engine enabled\n",
-				mmc_hostname(host));
+
+			if (card->ext_csd.cmdq_en) {
+				pr_info("%s: Command Queue Engine enabled\n",
+					mmc_hostname(host));
+			} else {
+				host->hsq_enabled = true;
+				pr_info("%s: Host Software Queue enabled\n",
+					mmc_hostname(host));
+			}
 		}
 	}
 
diff --git a/drivers/mmc/core/queue.c b/drivers/mmc/core/queue.c
index 9cee10e..11e4e42 100644
--- a/drivers/mmc/core/queue.c
+++ b/drivers/mmc/core/queue.c
@@ -19,6 +19,7 @@
 #include "block.h"
 #include "core.h"
 #include "card.h"
+#include "crypto.h"
 #include "host.h"
 
 #define MMC_DMA_MAP_MERGE_SEGMENTS	512
@@ -62,7 +63,7 @@ enum mmc_issue_type mmc_issue_type(struct mmc_queue *mq, struct request *req)
 {
 	struct mmc_host *host = mq->card->host;
 
-	if (mq->use_cqe)
+	if (mq->use_cqe && !host->hsq_enabled)
 		return mmc_cqe_issue_type(host, req);
 
 	if (req_op(req) == REQ_OP_READ || req_op(req) == REQ_OP_WRITE)
@@ -123,11 +124,13 @@ static enum blk_eh_timer_return mmc_mq_timed_out(struct request *req,
 {
 	struct request_queue *q = req->q;
 	struct mmc_queue *mq = q->queuedata;
+	struct mmc_card *card = mq->card;
+	struct mmc_host *host = card->host;
 	unsigned long flags;
 	bool ignore_tout;
 
 	spin_lock_irqsave(&mq->lock, flags);
-	ignore_tout = mq->recovery_needed || !mq->use_cqe;
+	ignore_tout = mq->recovery_needed || !mq->use_cqe || host->hsq_enabled;
 	spin_unlock_irqrestore(&mq->lock, flags);
 
 	return ignore_tout ? BLK_EH_RESET_TIMER : mmc_cqe_timed_out(req);
@@ -138,12 +141,13 @@ static void mmc_mq_recovery_handler(struct work_struct *work)
 	struct mmc_queue *mq = container_of(work, struct mmc_queue,
 					    recovery_work);
 	struct request_queue *q = mq->queue;
+	struct mmc_host *host = mq->card->host;
 
 	mmc_get_card(mq->card, &mq->ctx);
 
 	mq->in_recovery = true;
 
-	if (mq->use_cqe)
+	if (mq->use_cqe && !host->hsq_enabled)
 		mmc_blk_cqe_recovery(mq);
 	else
 		mmc_blk_mq_recovery(mq);
@@ -154,6 +158,9 @@ static void mmc_mq_recovery_handler(struct work_struct *work)
 	mq->recovery_needed = false;
 	spin_unlock_irq(&mq->lock);
 
+	if (host->hsq_enabled)
+		host->cqe_ops->cqe_recovery_finish(host);
+
 	mmc_put_card(mq->card, &mq->ctx);
 
 	blk_mq_run_hw_queues(q, true);
@@ -273,6 +280,14 @@ static blk_status_t mmc_mq_queue_rq(struct blk_mq_hw_ctx *hctx,
 		}
 		break;
 	case MMC_ISSUE_ASYNC:
+		/*
+		 * For MMC host software queue, we only allow 2 requests in
+		 * flight to avoid a long latency.
+		 */
+		if (host->hsq_enabled && mq->in_flight[issue_type] > 2) {
+			spin_unlock_irq(&mq->lock);
+			return BLK_STS_RESOURCE;
+		}
 		break;
 	default:
 		/*
@@ -393,6 +408,8 @@ static void mmc_setup_queue(struct mmc_queue *mq, struct mmc_card *card)
 	mutex_init(&mq->complete_lock);
 
 	init_waitqueue_head(&mq->wait);
+
+	mmc_crypto_setup_queue(mq->queue, host);
 }
 
 static inline bool mmc_merge_capable(struct mmc_host *host)
@@ -426,7 +443,7 @@ int mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card)
 	 * The queue depth for CQE must match the hardware because the request
 	 * tag is used to index the hardware queue.
 	 */
-	if (mq->use_cqe)
+	if (mq->use_cqe && !host->hsq_enabled)
 		mq->tag_set.queue_depth =
 			min_t(int, card->ext_csd.cmdq_depth, host->cqe_qdepth);
 	else
diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
index fe914ff5..76c7add 100644
--- a/drivers/mmc/core/sd.c
+++ b/drivers/mmc/core/sd.c
@@ -1082,6 +1082,16 @@ static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
 		}
 	}
 
+	if (host->cqe_ops && !host->cqe_enabled) {
+		err = host->cqe_ops->cqe_enable(host, card);
+		if (!err) {
+			host->cqe_enabled = true;
+			host->hsq_enabled = true;
+			pr_info("%s: Host Software Queue enabled\n",
+				mmc_hostname(host));
+		}
+	}
+
 	if (host->caps2 & MMC_CAP2_AVOID_3_3V &&
 	    host->ios.signal_voltage == MMC_SIGNAL_VOLTAGE_330) {
 		pr_err("%s: Host failed to negotiate down from 3.3V\n",
diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig
index 49ea02c..ead6475 100644
--- a/drivers/mmc/host/Kconfig
+++ b/drivers/mmc/host/Kconfig
@@ -489,6 +489,8 @@
 	depends on ARCH_QCOM || (ARM && COMPILE_TEST)
 	depends on MMC_SDHCI_PLTFM
 	select MMC_SDHCI_IO_ACCESSORS
+	select MMC_CQHCI
+	select QCOM_SCM if MMC_CRYPTO && ARCH_QCOM
 	help
 	  This selects the Secure Digital Host Controller Interface (SDHCI)
 	  support present in Qualcomm SOCs. The controller supports
@@ -632,6 +634,7 @@
 	depends on ARCH_SPRD
 	depends on MMC_SDHCI_PLTFM
 	select MMC_SDHCI_IO_ACCESSORS
+	select MMC_HSQ
 	help
 	  This selects the SDIO Host Controller in Spreadtrum
 	  SoCs, this driver supports R11(IP version: R11P0).
@@ -936,6 +939,17 @@
 
 	  If unsure, say N.
 
+config MMC_HSQ
+	tristate "MMC Host Software Queue support"
+	help
+	  This selects the MMC Host Software Queue support. This may increase
+	  performance, if the host controller and its driver supports it.
+
+	  If you have a controller/driver supporting this interface, say Y or M
+	  here.
+
+	  If unsure, say N.
+
 config MMC_TOSHIBA_PCI
 	tristate "Toshiba Type A SD/MMC Card Interface Driver"
 	depends on PCI
diff --git a/drivers/mmc/host/Makefile b/drivers/mmc/host/Makefile
index 11c4598..99837ef 100644
--- a/drivers/mmc/host/Makefile
+++ b/drivers/mmc/host/Makefile
@@ -98,6 +98,9 @@
 obj-$(CONFIG_MMC_SDHCI_OMAP)		+= sdhci-omap.o
 obj-$(CONFIG_MMC_SDHCI_SPRD)		+= sdhci-sprd.o
 obj-$(CONFIG_MMC_CQHCI)			+= cqhci.o
+cqhci-y					+= cqhci-core.o
+cqhci-$(CONFIG_MMC_CRYPTO)		+= cqhci-crypto.o
+obj-$(CONFIG_MMC_HSQ)			+= mmc_hsq.o
 
 ifeq ($(CONFIG_CB710_DEBUG),y)
 	CFLAGS-cb710-mmc	+= -DDEBUG
diff --git a/drivers/mmc/host/cqhci-core.c b/drivers/mmc/host/cqhci-core.c
new file mode 100644
index 0000000..d5bd1dd
--- /dev/null
+++ b/drivers/mmc/host/cqhci-core.c
@@ -0,0 +1,1206 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ */
+
+#include <linux/delay.h>
+#include <linux/highmem.h>
+#include <linux/io.h>
+#include <linux/iopoll.h>
+#include <linux/module.h>
+#include <linux/dma-mapping.h>
+#include <linux/slab.h>
+#include <linux/scatterlist.h>
+#include <linux/platform_device.h>
+#include <linux/ktime.h>
+
+#include <linux/mmc/mmc.h>
+#include <linux/mmc/host.h>
+#include <linux/mmc/card.h>
+
+#include "cqhci.h"
+#include "cqhci-crypto.h"
+
+#define DCMD_SLOT 31
+#define NUM_SLOTS 32
+
+struct cqhci_slot {
+	struct mmc_request *mrq;
+	unsigned int flags;
+#define CQHCI_EXTERNAL_TIMEOUT	BIT(0)
+#define CQHCI_COMPLETED		BIT(1)
+#define CQHCI_HOST_CRC		BIT(2)
+#define CQHCI_HOST_TIMEOUT	BIT(3)
+#define CQHCI_HOST_OTHER	BIT(4)
+};
+
+static inline u8 *get_desc(struct cqhci_host *cq_host, u8 tag)
+{
+	return cq_host->desc_base + (tag * cq_host->slot_sz);
+}
+
+static inline u8 *get_link_desc(struct cqhci_host *cq_host, u8 tag)
+{
+	u8 *desc = get_desc(cq_host, tag);
+
+	return desc + cq_host->task_desc_len;
+}
+
+static inline dma_addr_t get_trans_desc_dma(struct cqhci_host *cq_host, u8 tag)
+{
+	return cq_host->trans_desc_dma_base +
+		(cq_host->mmc->max_segs * tag *
+		 cq_host->trans_desc_len);
+}
+
+static inline u8 *get_trans_desc(struct cqhci_host *cq_host, u8 tag)
+{
+	return cq_host->trans_desc_base +
+		(cq_host->trans_desc_len * cq_host->mmc->max_segs * tag);
+}
+
+static void setup_trans_desc(struct cqhci_host *cq_host, u8 tag)
+{
+	u8 *link_temp;
+	dma_addr_t trans_temp;
+
+	link_temp = get_link_desc(cq_host, tag);
+	trans_temp = get_trans_desc_dma(cq_host, tag);
+
+	memset(link_temp, 0, cq_host->link_desc_len);
+	if (cq_host->link_desc_len > 8)
+		*(link_temp + 8) = 0;
+
+	if (tag == DCMD_SLOT && (cq_host->mmc->caps2 & MMC_CAP2_CQE_DCMD)) {
+		*link_temp = CQHCI_VALID(0) | CQHCI_ACT(0) | CQHCI_END(1);
+		return;
+	}
+
+	*link_temp = CQHCI_VALID(1) | CQHCI_ACT(0x6) | CQHCI_END(0);
+
+	if (cq_host->dma64) {
+		__le64 *data_addr = (__le64 __force *)(link_temp + 4);
+
+		data_addr[0] = cpu_to_le64(trans_temp);
+	} else {
+		__le32 *data_addr = (__le32 __force *)(link_temp + 4);
+
+		data_addr[0] = cpu_to_le32(trans_temp);
+	}
+}
+
+static void cqhci_set_irqs(struct cqhci_host *cq_host, u32 set)
+{
+	cqhci_writel(cq_host, set, CQHCI_ISTE);
+	cqhci_writel(cq_host, set, CQHCI_ISGE);
+}
+
+#define DRV_NAME "cqhci"
+
+#define CQHCI_DUMP(f, x...) \
+	pr_err("%s: " DRV_NAME ": " f, mmc_hostname(mmc), ## x)
+
+static void cqhci_dumpregs(struct cqhci_host *cq_host)
+{
+	struct mmc_host *mmc = cq_host->mmc;
+
+	CQHCI_DUMP("============ CQHCI REGISTER DUMP ===========\n");
+
+	CQHCI_DUMP("Caps:      0x%08x | Version:  0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_CAP),
+		   cqhci_readl(cq_host, CQHCI_VER));
+	CQHCI_DUMP("Config:    0x%08x | Control:  0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_CFG),
+		   cqhci_readl(cq_host, CQHCI_CTL));
+	CQHCI_DUMP("Int stat:  0x%08x | Int enab: 0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_IS),
+		   cqhci_readl(cq_host, CQHCI_ISTE));
+	CQHCI_DUMP("Int sig:   0x%08x | Int Coal: 0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_ISGE),
+		   cqhci_readl(cq_host, CQHCI_IC));
+	CQHCI_DUMP("TDL base:  0x%08x | TDL up32: 0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_TDLBA),
+		   cqhci_readl(cq_host, CQHCI_TDLBAU));
+	CQHCI_DUMP("Doorbell:  0x%08x | TCN:      0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_TDBR),
+		   cqhci_readl(cq_host, CQHCI_TCN));
+	CQHCI_DUMP("Dev queue: 0x%08x | Dev Pend: 0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_DQS),
+		   cqhci_readl(cq_host, CQHCI_DPT));
+	CQHCI_DUMP("Task clr:  0x%08x | SSC1:     0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_TCLR),
+		   cqhci_readl(cq_host, CQHCI_SSC1));
+	CQHCI_DUMP("SSC2:      0x%08x | DCMD rsp: 0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_SSC2),
+		   cqhci_readl(cq_host, CQHCI_CRDCT));
+	CQHCI_DUMP("RED mask:  0x%08x | TERRI:    0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_RMEM),
+		   cqhci_readl(cq_host, CQHCI_TERRI));
+	CQHCI_DUMP("Resp idx:  0x%08x | Resp arg: 0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_CRI),
+		   cqhci_readl(cq_host, CQHCI_CRA));
+
+	if (cq_host->ops->dumpregs)
+		cq_host->ops->dumpregs(mmc);
+	else
+		CQHCI_DUMP(": ===========================================\n");
+}
+
+/**
+ * The allocated descriptor table for task, link & transfer descritors
+ * looks like:
+ * |----------|
+ * |task desc |  |->|----------|
+ * |----------|  |  |trans desc|
+ * |link desc-|->|  |----------|
+ * |----------|          .
+ *      .                .
+ *  no. of slots      max-segs
+ *      .           |----------|
+ * |----------|
+ * The idea here is to create the [task+trans] table and mark & point the
+ * link desc to the transfer desc table on a per slot basis.
+ */
+static int cqhci_host_alloc_tdl(struct cqhci_host *cq_host)
+{
+	int i = 0;
+
+	/* task descriptor can be 64/128 bit irrespective of arch */
+	if (cq_host->caps & CQHCI_TASK_DESC_SZ_128) {
+		cqhci_writel(cq_host, cqhci_readl(cq_host, CQHCI_CFG) |
+			       CQHCI_TASK_DESC_SZ, CQHCI_CFG);
+		cq_host->task_desc_len = 16;
+	} else {
+		cq_host->task_desc_len = 8;
+	}
+
+	/*
+	 * 96 bits length of transfer desc instead of 128 bits which means
+	 * ADMA would expect next valid descriptor at the 96th bit
+	 * or 128th bit
+	 */
+	if (cq_host->dma64) {
+		if (cq_host->quirks & CQHCI_QUIRK_SHORT_TXFR_DESC_SZ)
+			cq_host->trans_desc_len = 12;
+		else
+			cq_host->trans_desc_len = 16;
+		cq_host->link_desc_len = 16;
+	} else {
+		cq_host->trans_desc_len = 8;
+		cq_host->link_desc_len = 8;
+	}
+
+	/* total size of a slot: 1 task & 1 transfer (link) */
+	cq_host->slot_sz = cq_host->task_desc_len + cq_host->link_desc_len;
+
+	cq_host->desc_size = cq_host->slot_sz * cq_host->num_slots;
+
+	cq_host->data_size = cq_host->trans_desc_len * cq_host->mmc->max_segs *
+		cq_host->mmc->cqe_qdepth;
+
+	pr_debug("%s: cqhci: desc_size: %zu data_sz: %zu slot-sz: %d\n",
+		 mmc_hostname(cq_host->mmc), cq_host->desc_size, cq_host->data_size,
+		 cq_host->slot_sz);
+
+	/*
+	 * allocate a dma-mapped chunk of memory for the descriptors
+	 * allocate a dma-mapped chunk of memory for link descriptors
+	 * setup each link-desc memory offset per slot-number to
+	 * the descriptor table.
+	 */
+	cq_host->desc_base = dmam_alloc_coherent(mmc_dev(cq_host->mmc),
+						 cq_host->desc_size,
+						 &cq_host->desc_dma_base,
+						 GFP_KERNEL);
+	if (!cq_host->desc_base)
+		return -ENOMEM;
+
+	cq_host->trans_desc_base = dmam_alloc_coherent(mmc_dev(cq_host->mmc),
+					      cq_host->data_size,
+					      &cq_host->trans_desc_dma_base,
+					      GFP_KERNEL);
+	if (!cq_host->trans_desc_base) {
+		dmam_free_coherent(mmc_dev(cq_host->mmc), cq_host->desc_size,
+				   cq_host->desc_base,
+				   cq_host->desc_dma_base);
+		cq_host->desc_base = NULL;
+		cq_host->desc_dma_base = 0;
+		return -ENOMEM;
+	}
+
+	pr_debug("%s: cqhci: desc-base: 0x%p trans-base: 0x%p\n desc_dma 0x%llx trans_dma: 0x%llx\n",
+		 mmc_hostname(cq_host->mmc), cq_host->desc_base, cq_host->trans_desc_base,
+		(unsigned long long)cq_host->desc_dma_base,
+		(unsigned long long)cq_host->trans_desc_dma_base);
+
+	for (; i < (cq_host->num_slots); i++)
+		setup_trans_desc(cq_host, i);
+
+	return 0;
+}
+
+static void __cqhci_enable(struct cqhci_host *cq_host)
+{
+	struct mmc_host *mmc = cq_host->mmc;
+	u32 cqcfg;
+
+	cqcfg = cqhci_readl(cq_host, CQHCI_CFG);
+
+	/* Configuration must not be changed while enabled */
+	if (cqcfg & CQHCI_ENABLE) {
+		cqcfg &= ~CQHCI_ENABLE;
+		cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
+	}
+
+	cqcfg &= ~(CQHCI_DCMD | CQHCI_TASK_DESC_SZ);
+
+	if (mmc->caps2 & MMC_CAP2_CQE_DCMD)
+		cqcfg |= CQHCI_DCMD;
+
+	if (cq_host->caps & CQHCI_TASK_DESC_SZ_128)
+		cqcfg |= CQHCI_TASK_DESC_SZ;
+
+	if (mmc->caps2 & MMC_CAP2_CRYPTO)
+		cqcfg |= CQHCI_CRYPTO_GENERAL_ENABLE;
+
+	cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
+
+	cqhci_writel(cq_host, lower_32_bits(cq_host->desc_dma_base),
+		     CQHCI_TDLBA);
+	cqhci_writel(cq_host, upper_32_bits(cq_host->desc_dma_base),
+		     CQHCI_TDLBAU);
+
+	cqhci_writel(cq_host, cq_host->rca, CQHCI_SSC2);
+
+	cqhci_set_irqs(cq_host, 0);
+
+	cqcfg |= CQHCI_ENABLE;
+
+	cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
+
+	mmc->cqe_on = true;
+
+	if (cq_host->ops->enable)
+		cq_host->ops->enable(mmc);
+
+	/* Ensure all writes are done before interrupts are enabled */
+	wmb();
+
+	cqhci_set_irqs(cq_host, CQHCI_IS_MASK);
+
+	cq_host->activated = true;
+}
+
+static void __cqhci_disable(struct cqhci_host *cq_host)
+{
+	u32 cqcfg;
+
+	cqcfg = cqhci_readl(cq_host, CQHCI_CFG);
+	cqcfg &= ~CQHCI_ENABLE;
+	cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
+
+	cq_host->mmc->cqe_on = false;
+
+	cq_host->activated = false;
+}
+
+int cqhci_deactivate(struct mmc_host *mmc)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+
+	if (cq_host->enabled && cq_host->activated)
+		__cqhci_disable(cq_host);
+
+	return 0;
+}
+EXPORT_SYMBOL(cqhci_deactivate);
+
+int cqhci_resume(struct mmc_host *mmc)
+{
+	/* Re-enable is done upon first request */
+	return 0;
+}
+EXPORT_SYMBOL(cqhci_resume);
+
+static int cqhci_enable(struct mmc_host *mmc, struct mmc_card *card)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	int err;
+
+	if (!card->ext_csd.cmdq_en)
+		return -EINVAL;
+
+	if (cq_host->enabled)
+		return 0;
+
+	cq_host->rca = card->rca;
+
+	err = cqhci_host_alloc_tdl(cq_host);
+	if (err) {
+		pr_err("%s: Failed to enable CQE, error %d\n",
+		       mmc_hostname(mmc), err);
+		return err;
+	}
+
+	__cqhci_enable(cq_host);
+
+	cq_host->enabled = true;
+
+#ifdef DEBUG
+	cqhci_dumpregs(cq_host);
+#endif
+	return 0;
+}
+
+/* CQHCI is idle and should halt immediately, so set a small timeout */
+#define CQHCI_OFF_TIMEOUT 100
+
+static u32 cqhci_read_ctl(struct cqhci_host *cq_host)
+{
+	return cqhci_readl(cq_host, CQHCI_CTL);
+}
+
+static void cqhci_off(struct mmc_host *mmc)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	u32 reg;
+	int err;
+
+	if (!cq_host->enabled || !mmc->cqe_on || cq_host->recovery_halt)
+		return;
+
+	if (cq_host->ops->disable)
+		cq_host->ops->disable(mmc, false);
+
+	cqhci_writel(cq_host, CQHCI_HALT, CQHCI_CTL);
+
+	err = readx_poll_timeout(cqhci_read_ctl, cq_host, reg,
+				 reg & CQHCI_HALT, 0, CQHCI_OFF_TIMEOUT);
+	if (err < 0)
+		pr_err("%s: cqhci: CQE stuck on\n", mmc_hostname(mmc));
+	else
+		pr_debug("%s: cqhci: CQE off\n", mmc_hostname(mmc));
+
+	mmc->cqe_on = false;
+}
+
+static void cqhci_disable(struct mmc_host *mmc)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+
+	if (!cq_host->enabled)
+		return;
+
+	cqhci_off(mmc);
+
+	__cqhci_disable(cq_host);
+
+	dmam_free_coherent(mmc_dev(mmc), cq_host->data_size,
+			   cq_host->trans_desc_base,
+			   cq_host->trans_desc_dma_base);
+
+	dmam_free_coherent(mmc_dev(mmc), cq_host->desc_size,
+			   cq_host->desc_base,
+			   cq_host->desc_dma_base);
+
+	cq_host->trans_desc_base = NULL;
+	cq_host->desc_base = NULL;
+
+	cq_host->enabled = false;
+}
+
+static void cqhci_prep_task_desc(struct mmc_request *mrq,
+				 struct cqhci_host *cq_host, int tag)
+{
+	__le64 *task_desc = (__le64 __force *)get_desc(cq_host, tag);
+	u32 req_flags = mrq->data->flags;
+	u64 desc0;
+
+	desc0 = CQHCI_VALID(1) |
+		CQHCI_END(1) |
+		CQHCI_INT(1) |
+		CQHCI_ACT(0x5) |
+		CQHCI_FORCED_PROG(!!(req_flags & MMC_DATA_FORCED_PRG)) |
+		CQHCI_DATA_TAG(!!(req_flags & MMC_DATA_DAT_TAG)) |
+		CQHCI_DATA_DIR(!!(req_flags & MMC_DATA_READ)) |
+		CQHCI_PRIORITY(!!(req_flags & MMC_DATA_PRIO)) |
+		CQHCI_QBAR(!!(req_flags & MMC_DATA_QBR)) |
+		CQHCI_REL_WRITE(!!(req_flags & MMC_DATA_REL_WR)) |
+		CQHCI_BLK_COUNT(mrq->data->blocks) |
+		CQHCI_BLK_ADDR((u64)mrq->data->blk_addr);
+
+	task_desc[0] = cpu_to_le64(desc0);
+
+	if (cq_host->caps & CQHCI_TASK_DESC_SZ_128) {
+		u64 desc1 = cqhci_crypto_prep_task_desc(mrq);
+
+		task_desc[1] = cpu_to_le64(desc1);
+
+		pr_debug("%s: cqhci: tag %d task descriptor 0x%016llx%016llx\n",
+			 mmc_hostname(mrq->host), mrq->tag, desc1, desc0);
+	} else {
+		pr_debug("%s: cqhci: tag %d task descriptor 0x%016llx\n",
+			 mmc_hostname(mrq->host), mrq->tag, desc0);
+	}
+}
+
+static int cqhci_dma_map(struct mmc_host *host, struct mmc_request *mrq)
+{
+	int sg_count;
+	struct mmc_data *data = mrq->data;
+
+	if (!data)
+		return -EINVAL;
+
+	sg_count = dma_map_sg(mmc_dev(host), data->sg,
+			      data->sg_len,
+			      (data->flags & MMC_DATA_WRITE) ?
+			      DMA_TO_DEVICE : DMA_FROM_DEVICE);
+	if (!sg_count) {
+		pr_err("%s: sg-len: %d\n", __func__, data->sg_len);
+		return -ENOMEM;
+	}
+
+	return sg_count;
+}
+
+static void cqhci_set_tran_desc(u8 *desc, dma_addr_t addr, int len, bool end,
+				bool dma64)
+{
+	__le32 *attr = (__le32 __force *)desc;
+
+	*attr = (CQHCI_VALID(1) |
+		 CQHCI_END(end ? 1 : 0) |
+		 CQHCI_INT(0) |
+		 CQHCI_ACT(0x4) |
+		 CQHCI_DAT_LENGTH(len));
+
+	if (dma64) {
+		__le64 *dataddr = (__le64 __force *)(desc + 4);
+
+		dataddr[0] = cpu_to_le64(addr);
+	} else {
+		__le32 *dataddr = (__le32 __force *)(desc + 4);
+
+		dataddr[0] = cpu_to_le32(addr);
+	}
+}
+
+static int cqhci_prep_tran_desc(struct mmc_request *mrq,
+			       struct cqhci_host *cq_host, int tag)
+{
+	struct mmc_data *data = mrq->data;
+	int i, sg_count, len;
+	bool end = false;
+	bool dma64 = cq_host->dma64;
+	dma_addr_t addr;
+	u8 *desc;
+	struct scatterlist *sg;
+
+	sg_count = cqhci_dma_map(mrq->host, mrq);
+	if (sg_count < 0) {
+		pr_err("%s: %s: unable to map sg lists, %d\n",
+				mmc_hostname(mrq->host), __func__, sg_count);
+		return sg_count;
+	}
+
+	desc = get_trans_desc(cq_host, tag);
+
+	for_each_sg(data->sg, sg, sg_count, i) {
+		addr = sg_dma_address(sg);
+		len = sg_dma_len(sg);
+
+		if ((i+1) == sg_count)
+			end = true;
+		cqhci_set_tran_desc(desc, addr, len, end, dma64);
+		desc += cq_host->trans_desc_len;
+	}
+
+	return 0;
+}
+
+static void cqhci_prep_dcmd_desc(struct mmc_host *mmc,
+				   struct mmc_request *mrq)
+{
+	u64 *task_desc = NULL;
+	u64 data = 0;
+	u8 resp_type;
+	u8 *desc;
+	__le64 *dataddr;
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	u8 timing;
+
+	if (!(mrq->cmd->flags & MMC_RSP_PRESENT)) {
+		resp_type = 0x0;
+		timing = 0x1;
+	} else {
+		if (mrq->cmd->flags & MMC_RSP_R1B) {
+			resp_type = 0x3;
+			timing = 0x0;
+		} else {
+			resp_type = 0x2;
+			timing = 0x1;
+		}
+	}
+
+	task_desc = (__le64 __force *)get_desc(cq_host, cq_host->dcmd_slot);
+	memset(task_desc, 0, cq_host->task_desc_len);
+	data |= (CQHCI_VALID(1) |
+		 CQHCI_END(1) |
+		 CQHCI_INT(1) |
+		 CQHCI_QBAR(1) |
+		 CQHCI_ACT(0x5) |
+		 CQHCI_CMD_INDEX(mrq->cmd->opcode) |
+		 CQHCI_CMD_TIMING(timing) | CQHCI_RESP_TYPE(resp_type));
+	if (cq_host->ops->update_dcmd_desc)
+		cq_host->ops->update_dcmd_desc(mmc, mrq, &data);
+	*task_desc |= data;
+	desc = (u8 *)task_desc;
+	pr_debug("%s: cqhci: dcmd: cmd: %d timing: %d resp: %d\n",
+		 mmc_hostname(mmc), mrq->cmd->opcode, timing, resp_type);
+	dataddr = (__le64 __force *)(desc + 4);
+	dataddr[0] = cpu_to_le64((u64)mrq->cmd->arg);
+
+}
+
+static void cqhci_post_req(struct mmc_host *host, struct mmc_request *mrq)
+{
+	struct mmc_data *data = mrq->data;
+
+	if (data) {
+		dma_unmap_sg(mmc_dev(host), data->sg, data->sg_len,
+			     (data->flags & MMC_DATA_READ) ?
+			     DMA_FROM_DEVICE : DMA_TO_DEVICE);
+	}
+}
+
+static inline int cqhci_tag(struct mmc_request *mrq)
+{
+	return mrq->cmd ? DCMD_SLOT : mrq->tag;
+}
+
+static int cqhci_request(struct mmc_host *mmc, struct mmc_request *mrq)
+{
+	int err = 0;
+	int tag = cqhci_tag(mrq);
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	unsigned long flags;
+
+	if (!cq_host->enabled) {
+		pr_err("%s: cqhci: not enabled\n", mmc_hostname(mmc));
+		return -EINVAL;
+	}
+
+	/* First request after resume has to re-enable */
+	if (!cq_host->activated)
+		__cqhci_enable(cq_host);
+
+	if (!mmc->cqe_on) {
+		cqhci_writel(cq_host, 0, CQHCI_CTL);
+		mmc->cqe_on = true;
+		pr_debug("%s: cqhci: CQE on\n", mmc_hostname(mmc));
+		if (cqhci_readl(cq_host, CQHCI_CTL) && CQHCI_HALT) {
+			pr_err("%s: cqhci: CQE failed to exit halt state\n",
+			       mmc_hostname(mmc));
+		}
+		if (cq_host->ops->enable)
+			cq_host->ops->enable(mmc);
+	}
+
+	if (mrq->data) {
+		cqhci_prep_task_desc(mrq, cq_host, tag);
+
+		err = cqhci_prep_tran_desc(mrq, cq_host, tag);
+		if (err) {
+			pr_err("%s: cqhci: failed to setup tx desc: %d\n",
+			       mmc_hostname(mmc), err);
+			return err;
+		}
+	} else {
+		cqhci_prep_dcmd_desc(mmc, mrq);
+	}
+
+	spin_lock_irqsave(&cq_host->lock, flags);
+
+	if (cq_host->recovery_halt) {
+		err = -EBUSY;
+		goto out_unlock;
+	}
+
+	cq_host->slot[tag].mrq = mrq;
+	cq_host->slot[tag].flags = 0;
+
+	cq_host->qcnt += 1;
+	/* Make sure descriptors are ready before ringing the doorbell */
+	wmb();
+	cqhci_writel(cq_host, 1 << tag, CQHCI_TDBR);
+	if (!(cqhci_readl(cq_host, CQHCI_TDBR) & (1 << tag)))
+		pr_debug("%s: cqhci: doorbell not set for tag %d\n",
+			 mmc_hostname(mmc), tag);
+out_unlock:
+	spin_unlock_irqrestore(&cq_host->lock, flags);
+
+	if (err)
+		cqhci_post_req(mmc, mrq);
+
+	return err;
+}
+
+static void cqhci_recovery_needed(struct mmc_host *mmc, struct mmc_request *mrq,
+				  bool notify)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+
+	if (!cq_host->recovery_halt) {
+		cq_host->recovery_halt = true;
+		pr_debug("%s: cqhci: recovery needed\n", mmc_hostname(mmc));
+		wake_up(&cq_host->wait_queue);
+		if (notify && mrq->recovery_notifier)
+			mrq->recovery_notifier(mrq);
+	}
+}
+
+static unsigned int cqhci_error_flags(int error1, int error2)
+{
+	int error = error1 ? error1 : error2;
+
+	switch (error) {
+	case -EILSEQ:
+		return CQHCI_HOST_CRC;
+	case -ETIMEDOUT:
+		return CQHCI_HOST_TIMEOUT;
+	default:
+		return CQHCI_HOST_OTHER;
+	}
+}
+
+static void cqhci_error_irq(struct mmc_host *mmc, u32 status, int cmd_error,
+			    int data_error)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	struct cqhci_slot *slot;
+	u32 terri;
+	u32 tdpe;
+	int tag;
+
+	spin_lock(&cq_host->lock);
+
+	terri = cqhci_readl(cq_host, CQHCI_TERRI);
+
+	pr_debug("%s: cqhci: error IRQ status: 0x%08x cmd error %d data error %d TERRI: 0x%08x\n",
+		 mmc_hostname(mmc), status, cmd_error, data_error, terri);
+
+	/* Forget about errors when recovery has already been triggered */
+	if (cq_host->recovery_halt)
+		goto out_unlock;
+
+	if (!cq_host->qcnt) {
+		WARN_ONCE(1, "%s: cqhci: error when idle. IRQ status: 0x%08x cmd error %d data error %d TERRI: 0x%08x\n",
+			  mmc_hostname(mmc), status, cmd_error, data_error,
+			  terri);
+		goto out_unlock;
+	}
+
+	if (CQHCI_TERRI_C_VALID(terri)) {
+		tag = CQHCI_TERRI_C_TASK(terri);
+		slot = &cq_host->slot[tag];
+		if (slot->mrq) {
+			slot->flags = cqhci_error_flags(cmd_error, data_error);
+			cqhci_recovery_needed(mmc, slot->mrq, true);
+		}
+	}
+
+	if (CQHCI_TERRI_D_VALID(terri)) {
+		tag = CQHCI_TERRI_D_TASK(terri);
+		slot = &cq_host->slot[tag];
+		if (slot->mrq) {
+			slot->flags = cqhci_error_flags(data_error, cmd_error);
+			cqhci_recovery_needed(mmc, slot->mrq, true);
+		}
+	}
+
+	/*
+	 * Handle ICCE ("Invalid Crypto Configuration Error").  This should
+	 * never happen, since the block layer ensures that all crypto-enabled
+	 * I/O requests have a valid keyslot before they reach the driver.
+	 *
+	 * Note that GCE ("General Crypto Error") is different; it already got
+	 * handled above by checking TERRI.
+	 */
+	if (status & CQHCI_IS_ICCE) {
+		tdpe = cqhci_readl(cq_host, CQHCI_TDPE);
+		WARN_ONCE(1,
+			  "%s: cqhci: invalid crypto configuration error. IRQ status: 0x%08x TDPE: 0x%08x\n",
+			  mmc_hostname(mmc), status, tdpe);
+		while (tdpe != 0) {
+			tag = __ffs(tdpe);
+			tdpe &= ~(1 << tag);
+			slot = &cq_host->slot[tag];
+			if (!slot->mrq)
+				continue;
+			slot->flags = cqhci_error_flags(data_error, cmd_error);
+			cqhci_recovery_needed(mmc, slot->mrq, true);
+		}
+	}
+
+	if (!cq_host->recovery_halt) {
+		/*
+		 * The only way to guarantee forward progress is to mark at
+		 * least one task in error, so if none is indicated, pick one.
+		 */
+		for (tag = 0; tag < NUM_SLOTS; tag++) {
+			slot = &cq_host->slot[tag];
+			if (!slot->mrq)
+				continue;
+			slot->flags = cqhci_error_flags(data_error, cmd_error);
+			cqhci_recovery_needed(mmc, slot->mrq, true);
+			break;
+		}
+	}
+
+out_unlock:
+	spin_unlock(&cq_host->lock);
+}
+
+static void cqhci_finish_mrq(struct mmc_host *mmc, unsigned int tag)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	struct cqhci_slot *slot = &cq_host->slot[tag];
+	struct mmc_request *mrq = slot->mrq;
+	struct mmc_data *data;
+
+	if (!mrq) {
+		WARN_ONCE(1, "%s: cqhci: spurious TCN for tag %d\n",
+			  mmc_hostname(mmc), tag);
+		return;
+	}
+
+	/* No completions allowed during recovery */
+	if (cq_host->recovery_halt) {
+		slot->flags |= CQHCI_COMPLETED;
+		return;
+	}
+
+	slot->mrq = NULL;
+
+	cq_host->qcnt -= 1;
+
+	data = mrq->data;
+	if (data) {
+		if (data->error)
+			data->bytes_xfered = 0;
+		else
+			data->bytes_xfered = data->blksz * data->blocks;
+	}
+
+	mmc_cqe_request_done(mmc, mrq);
+}
+
+irqreturn_t cqhci_irq(struct mmc_host *mmc, u32 intmask, int cmd_error,
+		      int data_error)
+{
+	u32 status;
+	unsigned long tag = 0, comp_status;
+	struct cqhci_host *cq_host = mmc->cqe_private;
+
+	status = cqhci_readl(cq_host, CQHCI_IS);
+	cqhci_writel(cq_host, status, CQHCI_IS);
+
+	pr_debug("%s: cqhci: IRQ status: 0x%08x\n", mmc_hostname(mmc), status);
+
+	if ((status & (CQHCI_IS_RED | CQHCI_IS_GCE | CQHCI_IS_ICCE)) ||
+	    cmd_error || data_error)
+		cqhci_error_irq(mmc, status, cmd_error, data_error);
+
+	if (status & CQHCI_IS_TCC) {
+		/* read TCN and complete the request */
+		comp_status = cqhci_readl(cq_host, CQHCI_TCN);
+		cqhci_writel(cq_host, comp_status, CQHCI_TCN);
+		pr_debug("%s: cqhci: TCN: 0x%08lx\n",
+			 mmc_hostname(mmc), comp_status);
+
+		spin_lock(&cq_host->lock);
+
+		for_each_set_bit(tag, &comp_status, cq_host->num_slots) {
+			/* complete the corresponding mrq */
+			pr_debug("%s: cqhci: completing tag %lu\n",
+				 mmc_hostname(mmc), tag);
+			cqhci_finish_mrq(mmc, tag);
+		}
+
+		if (cq_host->waiting_for_idle && !cq_host->qcnt) {
+			cq_host->waiting_for_idle = false;
+			wake_up(&cq_host->wait_queue);
+		}
+
+		spin_unlock(&cq_host->lock);
+	}
+
+	if (status & CQHCI_IS_TCL)
+		wake_up(&cq_host->wait_queue);
+
+	if (status & CQHCI_IS_HAC)
+		wake_up(&cq_host->wait_queue);
+
+	return IRQ_HANDLED;
+}
+EXPORT_SYMBOL(cqhci_irq);
+
+static bool cqhci_is_idle(struct cqhci_host *cq_host, int *ret)
+{
+	unsigned long flags;
+	bool is_idle;
+
+	spin_lock_irqsave(&cq_host->lock, flags);
+	is_idle = !cq_host->qcnt || cq_host->recovery_halt;
+	*ret = cq_host->recovery_halt ? -EBUSY : 0;
+	cq_host->waiting_for_idle = !is_idle;
+	spin_unlock_irqrestore(&cq_host->lock, flags);
+
+	return is_idle;
+}
+
+static int cqhci_wait_for_idle(struct mmc_host *mmc)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	int ret;
+
+	wait_event(cq_host->wait_queue, cqhci_is_idle(cq_host, &ret));
+
+	return ret;
+}
+
+static bool cqhci_timeout(struct mmc_host *mmc, struct mmc_request *mrq,
+			  bool *recovery_needed)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	int tag = cqhci_tag(mrq);
+	struct cqhci_slot *slot = &cq_host->slot[tag];
+	unsigned long flags;
+	bool timed_out;
+
+	spin_lock_irqsave(&cq_host->lock, flags);
+	timed_out = slot->mrq == mrq;
+	if (timed_out) {
+		slot->flags |= CQHCI_EXTERNAL_TIMEOUT;
+		cqhci_recovery_needed(mmc, mrq, false);
+		*recovery_needed = cq_host->recovery_halt;
+	}
+	spin_unlock_irqrestore(&cq_host->lock, flags);
+
+	if (timed_out) {
+		pr_err("%s: cqhci: timeout for tag %d\n",
+		       mmc_hostname(mmc), tag);
+		cqhci_dumpregs(cq_host);
+	}
+
+	return timed_out;
+}
+
+static bool cqhci_tasks_cleared(struct cqhci_host *cq_host)
+{
+	return !(cqhci_readl(cq_host, CQHCI_CTL) & CQHCI_CLEAR_ALL_TASKS);
+}
+
+static bool cqhci_clear_all_tasks(struct mmc_host *mmc, unsigned int timeout)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	bool ret;
+	u32 ctl;
+
+	cqhci_set_irqs(cq_host, CQHCI_IS_TCL);
+
+	ctl = cqhci_readl(cq_host, CQHCI_CTL);
+	ctl |= CQHCI_CLEAR_ALL_TASKS;
+	cqhci_writel(cq_host, ctl, CQHCI_CTL);
+
+	wait_event_timeout(cq_host->wait_queue, cqhci_tasks_cleared(cq_host),
+			   msecs_to_jiffies(timeout) + 1);
+
+	cqhci_set_irqs(cq_host, 0);
+
+	ret = cqhci_tasks_cleared(cq_host);
+
+	if (!ret)
+		pr_debug("%s: cqhci: Failed to clear tasks\n",
+			 mmc_hostname(mmc));
+
+	return ret;
+}
+
+static bool cqhci_halted(struct cqhci_host *cq_host)
+{
+	return cqhci_readl(cq_host, CQHCI_CTL) & CQHCI_HALT;
+}
+
+static bool cqhci_halt(struct mmc_host *mmc, unsigned int timeout)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	bool ret;
+	u32 ctl;
+
+	if (cqhci_halted(cq_host))
+		return true;
+
+	cqhci_set_irqs(cq_host, CQHCI_IS_HAC);
+
+	ctl = cqhci_readl(cq_host, CQHCI_CTL);
+	ctl |= CQHCI_HALT;
+	cqhci_writel(cq_host, ctl, CQHCI_CTL);
+
+	wait_event_timeout(cq_host->wait_queue, cqhci_halted(cq_host),
+			   msecs_to_jiffies(timeout) + 1);
+
+	cqhci_set_irqs(cq_host, 0);
+
+	ret = cqhci_halted(cq_host);
+
+	if (!ret)
+		pr_debug("%s: cqhci: Failed to halt\n", mmc_hostname(mmc));
+
+	return ret;
+}
+
+/*
+ * After halting we expect to be able to use the command line. We interpret the
+ * failure to halt to mean the data lines might still be in use (and the upper
+ * layers will need to send a STOP command), so we set the timeout based on a
+ * generous command timeout.
+ */
+#define CQHCI_START_HALT_TIMEOUT	5
+
+static void cqhci_recovery_start(struct mmc_host *mmc)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+
+	pr_debug("%s: cqhci: %s\n", mmc_hostname(mmc), __func__);
+
+	WARN_ON(!cq_host->recovery_halt);
+
+	cqhci_halt(mmc, CQHCI_START_HALT_TIMEOUT);
+
+	if (cq_host->ops->disable)
+		cq_host->ops->disable(mmc, true);
+
+	mmc->cqe_on = false;
+}
+
+static int cqhci_error_from_flags(unsigned int flags)
+{
+	if (!flags)
+		return 0;
+
+	/* CRC errors might indicate re-tuning so prefer to report that */
+	if (flags & CQHCI_HOST_CRC)
+		return -EILSEQ;
+
+	if (flags & (CQHCI_EXTERNAL_TIMEOUT | CQHCI_HOST_TIMEOUT))
+		return -ETIMEDOUT;
+
+	return -EIO;
+}
+
+static void cqhci_recover_mrq(struct cqhci_host *cq_host, unsigned int tag)
+{
+	struct cqhci_slot *slot = &cq_host->slot[tag];
+	struct mmc_request *mrq = slot->mrq;
+	struct mmc_data *data;
+
+	if (!mrq)
+		return;
+
+	slot->mrq = NULL;
+
+	cq_host->qcnt -= 1;
+
+	data = mrq->data;
+	if (data) {
+		data->bytes_xfered = 0;
+		data->error = cqhci_error_from_flags(slot->flags);
+	} else {
+		mrq->cmd->error = cqhci_error_from_flags(slot->flags);
+	}
+
+	mmc_cqe_request_done(cq_host->mmc, mrq);
+}
+
+static void cqhci_recover_mrqs(struct cqhci_host *cq_host)
+{
+	int i;
+
+	for (i = 0; i < cq_host->num_slots; i++)
+		cqhci_recover_mrq(cq_host, i);
+}
+
+/*
+ * By now the command and data lines should be unused so there is no reason for
+ * CQHCI to take a long time to halt, but if it doesn't halt there could be
+ * problems clearing tasks, so be generous.
+ */
+#define CQHCI_FINISH_HALT_TIMEOUT	20
+
+/* CQHCI could be expected to clear it's internal state pretty quickly */
+#define CQHCI_CLEAR_TIMEOUT		20
+
+static void cqhci_recovery_finish(struct mmc_host *mmc)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	unsigned long flags;
+	u32 cqcfg;
+	bool ok;
+
+	pr_debug("%s: cqhci: %s\n", mmc_hostname(mmc), __func__);
+
+	WARN_ON(!cq_host->recovery_halt);
+
+	ok = cqhci_halt(mmc, CQHCI_FINISH_HALT_TIMEOUT);
+
+	if (!cqhci_clear_all_tasks(mmc, CQHCI_CLEAR_TIMEOUT))
+		ok = false;
+
+	/*
+	 * The specification contradicts itself, by saying that tasks cannot be
+	 * cleared if CQHCI does not halt, but if CQHCI does not halt, it should
+	 * be disabled/re-enabled, but not to disable before clearing tasks.
+	 * Have a go anyway.
+	 */
+	if (!ok) {
+		pr_debug("%s: cqhci: disable / re-enable\n", mmc_hostname(mmc));
+		cqcfg = cqhci_readl(cq_host, CQHCI_CFG);
+		cqcfg &= ~CQHCI_ENABLE;
+		cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
+		cqcfg |= CQHCI_ENABLE;
+		cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
+		/* Be sure that there are no tasks */
+		ok = cqhci_halt(mmc, CQHCI_FINISH_HALT_TIMEOUT);
+		if (!cqhci_clear_all_tasks(mmc, CQHCI_CLEAR_TIMEOUT))
+			ok = false;
+		WARN_ON(!ok);
+	}
+
+	cqhci_recover_mrqs(cq_host);
+
+	WARN_ON(cq_host->qcnt);
+
+	spin_lock_irqsave(&cq_host->lock, flags);
+	cq_host->qcnt = 0;
+	cq_host->recovery_halt = false;
+	mmc->cqe_on = false;
+	spin_unlock_irqrestore(&cq_host->lock, flags);
+
+	/* Ensure all writes are done before interrupts are re-enabled */
+	wmb();
+
+	cqhci_writel(cq_host, CQHCI_IS_HAC | CQHCI_IS_TCL, CQHCI_IS);
+
+	cqhci_set_irqs(cq_host, CQHCI_IS_MASK);
+
+	pr_debug("%s: cqhci: recovery done\n", mmc_hostname(mmc));
+}
+
+static const struct mmc_cqe_ops cqhci_cqe_ops = {
+	.cqe_enable = cqhci_enable,
+	.cqe_disable = cqhci_disable,
+	.cqe_request = cqhci_request,
+	.cqe_post_req = cqhci_post_req,
+	.cqe_off = cqhci_off,
+	.cqe_wait_for_idle = cqhci_wait_for_idle,
+	.cqe_timeout = cqhci_timeout,
+	.cqe_recovery_start = cqhci_recovery_start,
+	.cqe_recovery_finish = cqhci_recovery_finish,
+};
+
+struct cqhci_host *cqhci_pltfm_init(struct platform_device *pdev)
+{
+	struct cqhci_host *cq_host;
+	struct resource *cqhci_memres = NULL;
+
+	/* check and setup CMDQ interface */
+	cqhci_memres = platform_get_resource_byname(pdev, IORESOURCE_MEM,
+						   "cqhci_mem");
+	if (!cqhci_memres) {
+		dev_dbg(&pdev->dev, "CMDQ not supported\n");
+		return ERR_PTR(-EINVAL);
+	}
+
+	cq_host = devm_kzalloc(&pdev->dev, sizeof(*cq_host), GFP_KERNEL);
+	if (!cq_host)
+		return ERR_PTR(-ENOMEM);
+	cq_host->mmio = devm_ioremap(&pdev->dev,
+				     cqhci_memres->start,
+				     resource_size(cqhci_memres));
+	if (!cq_host->mmio) {
+		dev_err(&pdev->dev, "failed to remap cqhci regs\n");
+		return ERR_PTR(-EBUSY);
+	}
+	dev_dbg(&pdev->dev, "CMDQ ioremap: done\n");
+
+	return cq_host;
+}
+EXPORT_SYMBOL(cqhci_pltfm_init);
+
+static unsigned int cqhci_ver_major(struct cqhci_host *cq_host)
+{
+	return CQHCI_VER_MAJOR(cqhci_readl(cq_host, CQHCI_VER));
+}
+
+static unsigned int cqhci_ver_minor(struct cqhci_host *cq_host)
+{
+	u32 ver = cqhci_readl(cq_host, CQHCI_VER);
+
+	return CQHCI_VER_MINOR1(ver) * 10 + CQHCI_VER_MINOR2(ver);
+}
+
+int cqhci_init(struct cqhci_host *cq_host, struct mmc_host *mmc,
+	      bool dma64)
+{
+	int err;
+
+	cq_host->dma64 = dma64;
+	cq_host->mmc = mmc;
+	cq_host->mmc->cqe_private = cq_host;
+
+	cq_host->num_slots = NUM_SLOTS;
+	cq_host->dcmd_slot = DCMD_SLOT;
+
+	mmc->cqe_ops = &cqhci_cqe_ops;
+
+	mmc->cqe_qdepth = NUM_SLOTS;
+	if (mmc->caps2 & MMC_CAP2_CQE_DCMD)
+		mmc->cqe_qdepth -= 1;
+
+	cq_host->slot = devm_kcalloc(mmc_dev(mmc), cq_host->num_slots,
+				     sizeof(*cq_host->slot), GFP_KERNEL);
+	if (!cq_host->slot) {
+		err = -ENOMEM;
+		goto out_err;
+	}
+
+	err = cqhci_crypto_init(cq_host);
+	if (err) {
+		pr_err("%s: CQHCI crypto initialization failed\n",
+		       mmc_hostname(mmc));
+		goto out_err;
+	}
+
+	spin_lock_init(&cq_host->lock);
+
+	init_completion(&cq_host->halt_comp);
+	init_waitqueue_head(&cq_host->wait_queue);
+
+	pr_info("%s: CQHCI version %u.%02u\n",
+		mmc_hostname(mmc), cqhci_ver_major(cq_host),
+		cqhci_ver_minor(cq_host));
+
+	return 0;
+
+out_err:
+	pr_err("%s: CQHCI version %u.%02u failed to initialize, error %d\n",
+	       mmc_hostname(mmc), cqhci_ver_major(cq_host),
+	       cqhci_ver_minor(cq_host), err);
+	return err;
+}
+EXPORT_SYMBOL(cqhci_init);
+
+MODULE_AUTHOR("Venkat Gopalakrishnan <venkatg@codeaurora.org>");
+MODULE_DESCRIPTION("Command Queue Host Controller Interface driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/mmc/host/cqhci-crypto.c b/drivers/mmc/host/cqhci-crypto.c
new file mode 100644
index 0000000..5698bc4
--- /dev/null
+++ b/drivers/mmc/host/cqhci-crypto.c
@@ -0,0 +1,244 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * CQHCI crypto engine (inline encryption) support
+ *
+ * Copyright 2020 Google LLC
+ */
+
+#include <linux/blk-crypto.h>
+#include <linux/keyslot-manager.h>
+#include <linux/mmc/host.h>
+
+#include "cqhci-crypto.h"
+
+/* Map from blk-crypto modes to CQHCI crypto algorithm IDs and key sizes */
+static const struct cqhci_crypto_alg_entry {
+	enum cqhci_crypto_alg alg;
+	enum cqhci_crypto_key_size key_size;
+} cqhci_crypto_algs[BLK_ENCRYPTION_MODE_MAX] = {
+	[BLK_ENCRYPTION_MODE_AES_256_XTS] = {
+		.alg = CQHCI_CRYPTO_ALG_AES_XTS,
+		.key_size = CQHCI_CRYPTO_KEY_SIZE_256,
+	},
+};
+
+static inline struct cqhci_host *
+cqhci_host_from_ksm(struct blk_keyslot_manager *ksm)
+{
+	struct mmc_host *mmc = container_of(ksm, struct mmc_host, ksm);
+
+	return mmc->cqe_private;
+}
+
+static int cqhci_crypto_program_key(struct cqhci_host *cq_host,
+				    const union cqhci_crypto_cfg_entry *cfg,
+				    int slot)
+{
+	u32 slot_offset = cq_host->crypto_cfg_register + slot * sizeof(*cfg);
+	int i;
+
+	if (cq_host->ops->program_key)
+		return cq_host->ops->program_key(cq_host, cfg, slot);
+
+	/* Clear CFGE */
+	cqhci_writel(cq_host, 0, slot_offset + 16 * sizeof(cfg->reg_val[0]));
+
+	/* Write the key */
+	for (i = 0; i < 16; i++) {
+		cqhci_writel(cq_host, le32_to_cpu(cfg->reg_val[i]),
+			     slot_offset + i * sizeof(cfg->reg_val[0]));
+	}
+	/* Write dword 17 */
+	cqhci_writel(cq_host, le32_to_cpu(cfg->reg_val[17]),
+		     slot_offset + 17 * sizeof(cfg->reg_val[0]));
+	/* Write dword 16, which includes the new value of CFGE */
+	cqhci_writel(cq_host, le32_to_cpu(cfg->reg_val[16]),
+		     slot_offset + 16 * sizeof(cfg->reg_val[0]));
+	return 0;
+}
+
+static int cqhci_crypto_keyslot_program(struct blk_keyslot_manager *ksm,
+					const struct blk_crypto_key *key,
+					unsigned int slot)
+
+{
+	struct cqhci_host *cq_host = cqhci_host_from_ksm(ksm);
+	const union cqhci_crypto_cap_entry *ccap_array =
+		cq_host->crypto_cap_array;
+	const struct cqhci_crypto_alg_entry *alg =
+			&cqhci_crypto_algs[key->crypto_cfg.crypto_mode];
+	u8 data_unit_mask = key->crypto_cfg.data_unit_size / 512;
+	int i;
+	int cap_idx = -1;
+	union cqhci_crypto_cfg_entry cfg = {};
+	int err;
+
+	BUILD_BUG_ON(CQHCI_CRYPTO_KEY_SIZE_INVALID != 0);
+	for (i = 0; i < cq_host->crypto_capabilities.num_crypto_cap; i++) {
+		if (ccap_array[i].algorithm_id == alg->alg &&
+		    ccap_array[i].key_size == alg->key_size &&
+		    (ccap_array[i].sdus_mask & data_unit_mask)) {
+			cap_idx = i;
+			break;
+		}
+	}
+	if (WARN_ON(cap_idx < 0))
+		return -EOPNOTSUPP;
+
+	cfg.data_unit_size = data_unit_mask;
+	cfg.crypto_cap_idx = cap_idx;
+	cfg.config_enable = CQHCI_CRYPTO_CONFIGURATION_ENABLE;
+
+	if (ccap_array[cap_idx].algorithm_id == CQHCI_CRYPTO_ALG_AES_XTS) {
+		/* In XTS mode, the blk_crypto_key's size is already doubled */
+		memcpy(cfg.crypto_key, key->raw, key->size/2);
+		memcpy(cfg.crypto_key + CQHCI_CRYPTO_KEY_MAX_SIZE/2,
+		       key->raw + key->size/2, key->size/2);
+	} else {
+		memcpy(cfg.crypto_key, key->raw, key->size);
+	}
+
+	err = cqhci_crypto_program_key(cq_host, &cfg, slot);
+
+	memzero_explicit(&cfg, sizeof(cfg));
+	return err;
+}
+
+static int cqhci_crypto_clear_keyslot(struct cqhci_host *cq_host, int slot)
+{
+	/*
+	 * Clear the crypto cfg on the device. Clearing CFGE
+	 * might not be sufficient, so just clear the entire cfg.
+	 */
+	union cqhci_crypto_cfg_entry cfg = {};
+
+	return cqhci_crypto_program_key(cq_host, &cfg, slot);
+}
+
+static int cqhci_crypto_keyslot_evict(struct blk_keyslot_manager *ksm,
+				      const struct blk_crypto_key *key,
+				      unsigned int slot)
+{
+	struct cqhci_host *cq_host = cqhci_host_from_ksm(ksm);
+
+	return cqhci_crypto_clear_keyslot(cq_host, slot);
+}
+
+/*
+ * The keyslot management operations for CQHCI crypto.
+ *
+ * Note that the block layer ensures that these are never called while the host
+ * controller is runtime-suspended.  However, the CQE won't necessarily be
+ * "enabled" when these are called, i.e. CQHCI_ENABLE might not be set in the
+ * CQHCI_CFG register.  But the hardware allows that.
+ */
+static const struct blk_ksm_ll_ops cqhci_ksm_ops = {
+	.keyslot_program	= cqhci_crypto_keyslot_program,
+	.keyslot_evict		= cqhci_crypto_keyslot_evict,
+};
+
+static enum blk_crypto_mode_num
+cqhci_find_blk_crypto_mode(union cqhci_crypto_cap_entry cap)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(cqhci_crypto_algs); i++) {
+		BUILD_BUG_ON(CQHCI_CRYPTO_KEY_SIZE_INVALID != 0);
+		if (cqhci_crypto_algs[i].alg == cap.algorithm_id &&
+		    cqhci_crypto_algs[i].key_size == cap.key_size)
+			return i;
+	}
+	return BLK_ENCRYPTION_MODE_INVALID;
+}
+
+/**
+ * cqhci_crypto_init - initialize CQHCI crypto support
+ * @cq_host: a cqhci host
+ *
+ * If the driver previously set MMC_CAP2_CRYPTO and the CQE declares
+ * CQHCI_CAP_CS, initialize the crypto support.  This involves reading the
+ * crypto capability registers, initializing the keyslot manager, clearing all
+ * keyslots, and enabling 128-bit task descriptors.
+ *
+ * Return: 0 if crypto was initialized or isn't supported; whether
+ *	   MMC_CAP2_CRYPTO remains set indicates which one of those cases it is.
+ *	   Also can return a negative errno value on unexpected error.
+ */
+int cqhci_crypto_init(struct cqhci_host *cq_host)
+{
+	struct mmc_host *mmc = cq_host->mmc;
+	struct device *dev = mmc_dev(mmc);
+	struct blk_keyslot_manager *ksm = &mmc->ksm;
+	unsigned int num_keyslots;
+	unsigned int cap_idx;
+	enum blk_crypto_mode_num blk_mode_num;
+	unsigned int slot;
+	int err = 0;
+
+	if (!(mmc->caps2 & MMC_CAP2_CRYPTO) ||
+	    !(cqhci_readl(cq_host, CQHCI_CAP) & CQHCI_CAP_CS))
+		goto out;
+
+	cq_host->crypto_capabilities.reg_val =
+			cpu_to_le32(cqhci_readl(cq_host, CQHCI_CCAP));
+
+	cq_host->crypto_cfg_register =
+		(u32)cq_host->crypto_capabilities.config_array_ptr * 0x100;
+
+	cq_host->crypto_cap_array =
+		devm_kcalloc(dev, cq_host->crypto_capabilities.num_crypto_cap,
+			     sizeof(cq_host->crypto_cap_array[0]), GFP_KERNEL);
+	if (!cq_host->crypto_cap_array) {
+		err = -ENOMEM;
+		goto out;
+	}
+
+	/*
+	 * CCAP.CFGC is off by one, so the actual number of crypto
+	 * configurations (a.k.a. keyslots) is CCAP.CFGC + 1.
+	 */
+	num_keyslots = cq_host->crypto_capabilities.config_count + 1;
+
+	err = devm_blk_ksm_init(dev, ksm, num_keyslots);
+	if (err)
+		goto out;
+
+	ksm->ksm_ll_ops = cqhci_ksm_ops;
+	ksm->dev = dev;
+
+	/* Unfortunately, CQHCI crypto only supports 32 DUN bits. */
+	ksm->max_dun_bytes_supported = 4;
+
+	ksm->features = BLK_CRYPTO_FEATURE_STANDARD_KEYS;
+
+	/*
+	 * Cache all the crypto capabilities and advertise the supported crypto
+	 * modes and data unit sizes to the block layer.
+	 */
+	for (cap_idx = 0; cap_idx < cq_host->crypto_capabilities.num_crypto_cap;
+	     cap_idx++) {
+		cq_host->crypto_cap_array[cap_idx].reg_val =
+			cpu_to_le32(cqhci_readl(cq_host,
+						CQHCI_CRYPTOCAP +
+						cap_idx * sizeof(__le32)));
+		blk_mode_num = cqhci_find_blk_crypto_mode(
+					cq_host->crypto_cap_array[cap_idx]);
+		if (blk_mode_num == BLK_ENCRYPTION_MODE_INVALID)
+			continue;
+		ksm->crypto_modes_supported[blk_mode_num] |=
+			cq_host->crypto_cap_array[cap_idx].sdus_mask * 512;
+	}
+
+	/* Clear all the keyslots so that we start in a known state. */
+	for (slot = 0; slot < num_keyslots; slot++)
+		cqhci_crypto_clear_keyslot(cq_host, slot);
+
+	/* CQHCI crypto requires the use of 128-bit task descriptors. */
+	cq_host->caps |= CQHCI_TASK_DESC_SZ_128;
+
+	return 0;
+
+out:
+	mmc->caps2 &= ~MMC_CAP2_CRYPTO;
+	return err;
+}
diff --git a/drivers/mmc/host/cqhci-crypto.h b/drivers/mmc/host/cqhci-crypto.h
new file mode 100644
index 0000000..60b58ee
--- /dev/null
+++ b/drivers/mmc/host/cqhci-crypto.h
@@ -0,0 +1,47 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * CQHCI crypto engine (inline encryption) support
+ *
+ * Copyright 2020 Google LLC
+ */
+
+#ifndef LINUX_MMC_CQHCI_CRYPTO_H
+#define LINUX_MMC_CQHCI_CRYPTO_H
+
+#include <linux/mmc/host.h>
+
+#include "cqhci.h"
+
+#ifdef CONFIG_MMC_CRYPTO
+
+int cqhci_crypto_init(struct cqhci_host *host);
+
+/*
+ * Returns the crypto bits that should be set in bits 64-127 of the
+ * task descriptor.
+ */
+static inline u64 cqhci_crypto_prep_task_desc(struct mmc_request *mrq)
+{
+	if (!mrq->crypto_enabled)
+		return 0;
+
+	return CQHCI_CRYPTO_ENABLE_BIT |
+	       CQHCI_CRYPTO_KEYSLOT(mrq->crypto_key_slot) |
+	       mrq->data_unit_num;
+}
+
+#else /* CONFIG_MMC_CRYPTO */
+
+static inline int cqhci_crypto_init(struct cqhci_host *host)
+{
+	return 0;
+}
+
+static inline u64 cqhci_crypto_prep_task_desc(struct mmc_request *mrq)
+{
+	return 0;
+}
+
+#endif /* !CONFIG_MMC_CRYPTO */
+
+#endif /* LINUX_MMC_CQHCI_CRYPTO_H */
diff --git a/drivers/mmc/host/cqhci.c b/drivers/mmc/host/cqhci.c
deleted file mode 100644
index 2d65b32..0000000
--- a/drivers/mmc/host/cqhci.c
+++ /dev/null
@@ -1,1153 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
- */
-
-#include <linux/delay.h>
-#include <linux/highmem.h>
-#include <linux/io.h>
-#include <linux/iopoll.h>
-#include <linux/module.h>
-#include <linux/dma-mapping.h>
-#include <linux/slab.h>
-#include <linux/scatterlist.h>
-#include <linux/platform_device.h>
-#include <linux/ktime.h>
-
-#include <linux/mmc/mmc.h>
-#include <linux/mmc/host.h>
-#include <linux/mmc/card.h>
-
-#include "cqhci.h"
-
-#define DCMD_SLOT 31
-#define NUM_SLOTS 32
-
-struct cqhci_slot {
-	struct mmc_request *mrq;
-	unsigned int flags;
-#define CQHCI_EXTERNAL_TIMEOUT	BIT(0)
-#define CQHCI_COMPLETED		BIT(1)
-#define CQHCI_HOST_CRC		BIT(2)
-#define CQHCI_HOST_TIMEOUT	BIT(3)
-#define CQHCI_HOST_OTHER	BIT(4)
-};
-
-static inline u8 *get_desc(struct cqhci_host *cq_host, u8 tag)
-{
-	return cq_host->desc_base + (tag * cq_host->slot_sz);
-}
-
-static inline u8 *get_link_desc(struct cqhci_host *cq_host, u8 tag)
-{
-	u8 *desc = get_desc(cq_host, tag);
-
-	return desc + cq_host->task_desc_len;
-}
-
-static inline dma_addr_t get_trans_desc_dma(struct cqhci_host *cq_host, u8 tag)
-{
-	return cq_host->trans_desc_dma_base +
-		(cq_host->mmc->max_segs * tag *
-		 cq_host->trans_desc_len);
-}
-
-static inline u8 *get_trans_desc(struct cqhci_host *cq_host, u8 tag)
-{
-	return cq_host->trans_desc_base +
-		(cq_host->trans_desc_len * cq_host->mmc->max_segs * tag);
-}
-
-static void setup_trans_desc(struct cqhci_host *cq_host, u8 tag)
-{
-	u8 *link_temp;
-	dma_addr_t trans_temp;
-
-	link_temp = get_link_desc(cq_host, tag);
-	trans_temp = get_trans_desc_dma(cq_host, tag);
-
-	memset(link_temp, 0, cq_host->link_desc_len);
-	if (cq_host->link_desc_len > 8)
-		*(link_temp + 8) = 0;
-
-	if (tag == DCMD_SLOT && (cq_host->mmc->caps2 & MMC_CAP2_CQE_DCMD)) {
-		*link_temp = CQHCI_VALID(0) | CQHCI_ACT(0) | CQHCI_END(1);
-		return;
-	}
-
-	*link_temp = CQHCI_VALID(1) | CQHCI_ACT(0x6) | CQHCI_END(0);
-
-	if (cq_host->dma64) {
-		__le64 *data_addr = (__le64 __force *)(link_temp + 4);
-
-		data_addr[0] = cpu_to_le64(trans_temp);
-	} else {
-		__le32 *data_addr = (__le32 __force *)(link_temp + 4);
-
-		data_addr[0] = cpu_to_le32(trans_temp);
-	}
-}
-
-static void cqhci_set_irqs(struct cqhci_host *cq_host, u32 set)
-{
-	cqhci_writel(cq_host, set, CQHCI_ISTE);
-	cqhci_writel(cq_host, set, CQHCI_ISGE);
-}
-
-#define DRV_NAME "cqhci"
-
-#define CQHCI_DUMP(f, x...) \
-	pr_err("%s: " DRV_NAME ": " f, mmc_hostname(mmc), ## x)
-
-static void cqhci_dumpregs(struct cqhci_host *cq_host)
-{
-	struct mmc_host *mmc = cq_host->mmc;
-
-	CQHCI_DUMP("============ CQHCI REGISTER DUMP ===========\n");
-
-	CQHCI_DUMP("Caps:      0x%08x | Version:  0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_CAP),
-		   cqhci_readl(cq_host, CQHCI_VER));
-	CQHCI_DUMP("Config:    0x%08x | Control:  0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_CFG),
-		   cqhci_readl(cq_host, CQHCI_CTL));
-	CQHCI_DUMP("Int stat:  0x%08x | Int enab: 0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_IS),
-		   cqhci_readl(cq_host, CQHCI_ISTE));
-	CQHCI_DUMP("Int sig:   0x%08x | Int Coal: 0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_ISGE),
-		   cqhci_readl(cq_host, CQHCI_IC));
-	CQHCI_DUMP("TDL base:  0x%08x | TDL up32: 0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_TDLBA),
-		   cqhci_readl(cq_host, CQHCI_TDLBAU));
-	CQHCI_DUMP("Doorbell:  0x%08x | TCN:      0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_TDBR),
-		   cqhci_readl(cq_host, CQHCI_TCN));
-	CQHCI_DUMP("Dev queue: 0x%08x | Dev Pend: 0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_DQS),
-		   cqhci_readl(cq_host, CQHCI_DPT));
-	CQHCI_DUMP("Task clr:  0x%08x | SSC1:     0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_TCLR),
-		   cqhci_readl(cq_host, CQHCI_SSC1));
-	CQHCI_DUMP("SSC2:      0x%08x | DCMD rsp: 0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_SSC2),
-		   cqhci_readl(cq_host, CQHCI_CRDCT));
-	CQHCI_DUMP("RED mask:  0x%08x | TERRI:    0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_RMEM),
-		   cqhci_readl(cq_host, CQHCI_TERRI));
-	CQHCI_DUMP("Resp idx:  0x%08x | Resp arg: 0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_CRI),
-		   cqhci_readl(cq_host, CQHCI_CRA));
-
-	if (cq_host->ops->dumpregs)
-		cq_host->ops->dumpregs(mmc);
-	else
-		CQHCI_DUMP(": ===========================================\n");
-}
-
-/**
- * The allocated descriptor table for task, link & transfer descritors
- * looks like:
- * |----------|
- * |task desc |  |->|----------|
- * |----------|  |  |trans desc|
- * |link desc-|->|  |----------|
- * |----------|          .
- *      .                .
- *  no. of slots      max-segs
- *      .           |----------|
- * |----------|
- * The idea here is to create the [task+trans] table and mark & point the
- * link desc to the transfer desc table on a per slot basis.
- */
-static int cqhci_host_alloc_tdl(struct cqhci_host *cq_host)
-{
-	int i = 0;
-
-	/* task descriptor can be 64/128 bit irrespective of arch */
-	if (cq_host->caps & CQHCI_TASK_DESC_SZ_128) {
-		cqhci_writel(cq_host, cqhci_readl(cq_host, CQHCI_CFG) |
-			       CQHCI_TASK_DESC_SZ, CQHCI_CFG);
-		cq_host->task_desc_len = 16;
-	} else {
-		cq_host->task_desc_len = 8;
-	}
-
-	/*
-	 * 96 bits length of transfer desc instead of 128 bits which means
-	 * ADMA would expect next valid descriptor at the 96th bit
-	 * or 128th bit
-	 */
-	if (cq_host->dma64) {
-		if (cq_host->quirks & CQHCI_QUIRK_SHORT_TXFR_DESC_SZ)
-			cq_host->trans_desc_len = 12;
-		else
-			cq_host->trans_desc_len = 16;
-		cq_host->link_desc_len = 16;
-	} else {
-		cq_host->trans_desc_len = 8;
-		cq_host->link_desc_len = 8;
-	}
-
-	/* total size of a slot: 1 task & 1 transfer (link) */
-	cq_host->slot_sz = cq_host->task_desc_len + cq_host->link_desc_len;
-
-	cq_host->desc_size = cq_host->slot_sz * cq_host->num_slots;
-
-	cq_host->data_size = cq_host->trans_desc_len * cq_host->mmc->max_segs *
-		cq_host->mmc->cqe_qdepth;
-
-	pr_debug("%s: cqhci: desc_size: %zu data_sz: %zu slot-sz: %d\n",
-		 mmc_hostname(cq_host->mmc), cq_host->desc_size, cq_host->data_size,
-		 cq_host->slot_sz);
-
-	/*
-	 * allocate a dma-mapped chunk of memory for the descriptors
-	 * allocate a dma-mapped chunk of memory for link descriptors
-	 * setup each link-desc memory offset per slot-number to
-	 * the descriptor table.
-	 */
-	cq_host->desc_base = dmam_alloc_coherent(mmc_dev(cq_host->mmc),
-						 cq_host->desc_size,
-						 &cq_host->desc_dma_base,
-						 GFP_KERNEL);
-	if (!cq_host->desc_base)
-		return -ENOMEM;
-
-	cq_host->trans_desc_base = dmam_alloc_coherent(mmc_dev(cq_host->mmc),
-					      cq_host->data_size,
-					      &cq_host->trans_desc_dma_base,
-					      GFP_KERNEL);
-	if (!cq_host->trans_desc_base) {
-		dmam_free_coherent(mmc_dev(cq_host->mmc), cq_host->desc_size,
-				   cq_host->desc_base,
-				   cq_host->desc_dma_base);
-		cq_host->desc_base = NULL;
-		cq_host->desc_dma_base = 0;
-		return -ENOMEM;
-	}
-
-	pr_debug("%s: cqhci: desc-base: 0x%p trans-base: 0x%p\n desc_dma 0x%llx trans_dma: 0x%llx\n",
-		 mmc_hostname(cq_host->mmc), cq_host->desc_base, cq_host->trans_desc_base,
-		(unsigned long long)cq_host->desc_dma_base,
-		(unsigned long long)cq_host->trans_desc_dma_base);
-
-	for (; i < (cq_host->num_slots); i++)
-		setup_trans_desc(cq_host, i);
-
-	return 0;
-}
-
-static void __cqhci_enable(struct cqhci_host *cq_host)
-{
-	struct mmc_host *mmc = cq_host->mmc;
-	u32 cqcfg;
-
-	cqcfg = cqhci_readl(cq_host, CQHCI_CFG);
-
-	/* Configuration must not be changed while enabled */
-	if (cqcfg & CQHCI_ENABLE) {
-		cqcfg &= ~CQHCI_ENABLE;
-		cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
-	}
-
-	cqcfg &= ~(CQHCI_DCMD | CQHCI_TASK_DESC_SZ);
-
-	if (mmc->caps2 & MMC_CAP2_CQE_DCMD)
-		cqcfg |= CQHCI_DCMD;
-
-	if (cq_host->caps & CQHCI_TASK_DESC_SZ_128)
-		cqcfg |= CQHCI_TASK_DESC_SZ;
-
-	cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
-
-	cqhci_writel(cq_host, lower_32_bits(cq_host->desc_dma_base),
-		     CQHCI_TDLBA);
-	cqhci_writel(cq_host, upper_32_bits(cq_host->desc_dma_base),
-		     CQHCI_TDLBAU);
-
-	cqhci_writel(cq_host, cq_host->rca, CQHCI_SSC2);
-
-	cqhci_set_irqs(cq_host, 0);
-
-	cqcfg |= CQHCI_ENABLE;
-
-	cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
-
-	mmc->cqe_on = true;
-
-	if (cq_host->ops->enable)
-		cq_host->ops->enable(mmc);
-
-	/* Ensure all writes are done before interrupts are enabled */
-	wmb();
-
-	cqhci_set_irqs(cq_host, CQHCI_IS_MASK);
-
-	cq_host->activated = true;
-}
-
-static void __cqhci_disable(struct cqhci_host *cq_host)
-{
-	u32 cqcfg;
-
-	cqcfg = cqhci_readl(cq_host, CQHCI_CFG);
-	cqcfg &= ~CQHCI_ENABLE;
-	cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
-
-	cq_host->mmc->cqe_on = false;
-
-	cq_host->activated = false;
-}
-
-int cqhci_deactivate(struct mmc_host *mmc)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-
-	if (cq_host->enabled && cq_host->activated)
-		__cqhci_disable(cq_host);
-
-	return 0;
-}
-EXPORT_SYMBOL(cqhci_deactivate);
-
-int cqhci_resume(struct mmc_host *mmc)
-{
-	/* Re-enable is done upon first request */
-	return 0;
-}
-EXPORT_SYMBOL(cqhci_resume);
-
-static int cqhci_enable(struct mmc_host *mmc, struct mmc_card *card)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	int err;
-
-	if (cq_host->enabled)
-		return 0;
-
-	cq_host->rca = card->rca;
-
-	err = cqhci_host_alloc_tdl(cq_host);
-	if (err)
-		return err;
-
-	__cqhci_enable(cq_host);
-
-	cq_host->enabled = true;
-
-#ifdef DEBUG
-	cqhci_dumpregs(cq_host);
-#endif
-	return 0;
-}
-
-/* CQHCI is idle and should halt immediately, so set a small timeout */
-#define CQHCI_OFF_TIMEOUT 100
-
-static u32 cqhci_read_ctl(struct cqhci_host *cq_host)
-{
-	return cqhci_readl(cq_host, CQHCI_CTL);
-}
-
-static void cqhci_off(struct mmc_host *mmc)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	u32 reg;
-	int err;
-
-	if (!cq_host->enabled || !mmc->cqe_on || cq_host->recovery_halt)
-		return;
-
-	if (cq_host->ops->disable)
-		cq_host->ops->disable(mmc, false);
-
-	cqhci_writel(cq_host, CQHCI_HALT, CQHCI_CTL);
-
-	err = readx_poll_timeout(cqhci_read_ctl, cq_host, reg,
-				 reg & CQHCI_HALT, 0, CQHCI_OFF_TIMEOUT);
-	if (err < 0)
-		pr_err("%s: cqhci: CQE stuck on\n", mmc_hostname(mmc));
-	else
-		pr_debug("%s: cqhci: CQE off\n", mmc_hostname(mmc));
-
-	mmc->cqe_on = false;
-}
-
-static void cqhci_disable(struct mmc_host *mmc)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-
-	if (!cq_host->enabled)
-		return;
-
-	cqhci_off(mmc);
-
-	__cqhci_disable(cq_host);
-
-	dmam_free_coherent(mmc_dev(mmc), cq_host->data_size,
-			   cq_host->trans_desc_base,
-			   cq_host->trans_desc_dma_base);
-
-	dmam_free_coherent(mmc_dev(mmc), cq_host->desc_size,
-			   cq_host->desc_base,
-			   cq_host->desc_dma_base);
-
-	cq_host->trans_desc_base = NULL;
-	cq_host->desc_base = NULL;
-
-	cq_host->enabled = false;
-}
-
-static void cqhci_prep_task_desc(struct mmc_request *mrq,
-					u64 *data, bool intr)
-{
-	u32 req_flags = mrq->data->flags;
-
-	*data = CQHCI_VALID(1) |
-		CQHCI_END(1) |
-		CQHCI_INT(intr) |
-		CQHCI_ACT(0x5) |
-		CQHCI_FORCED_PROG(!!(req_flags & MMC_DATA_FORCED_PRG)) |
-		CQHCI_DATA_TAG(!!(req_flags & MMC_DATA_DAT_TAG)) |
-		CQHCI_DATA_DIR(!!(req_flags & MMC_DATA_READ)) |
-		CQHCI_PRIORITY(!!(req_flags & MMC_DATA_PRIO)) |
-		CQHCI_QBAR(!!(req_flags & MMC_DATA_QBR)) |
-		CQHCI_REL_WRITE(!!(req_flags & MMC_DATA_REL_WR)) |
-		CQHCI_BLK_COUNT(mrq->data->blocks) |
-		CQHCI_BLK_ADDR((u64)mrq->data->blk_addr);
-
-	pr_debug("%s: cqhci: tag %d task descriptor 0x016%llx\n",
-		 mmc_hostname(mrq->host), mrq->tag, (unsigned long long)*data);
-}
-
-static int cqhci_dma_map(struct mmc_host *host, struct mmc_request *mrq)
-{
-	int sg_count;
-	struct mmc_data *data = mrq->data;
-
-	if (!data)
-		return -EINVAL;
-
-	sg_count = dma_map_sg(mmc_dev(host), data->sg,
-			      data->sg_len,
-			      (data->flags & MMC_DATA_WRITE) ?
-			      DMA_TO_DEVICE : DMA_FROM_DEVICE);
-	if (!sg_count) {
-		pr_err("%s: sg-len: %d\n", __func__, data->sg_len);
-		return -ENOMEM;
-	}
-
-	return sg_count;
-}
-
-static void cqhci_set_tran_desc(u8 *desc, dma_addr_t addr, int len, bool end,
-				bool dma64)
-{
-	__le32 *attr = (__le32 __force *)desc;
-
-	*attr = (CQHCI_VALID(1) |
-		 CQHCI_END(end ? 1 : 0) |
-		 CQHCI_INT(0) |
-		 CQHCI_ACT(0x4) |
-		 CQHCI_DAT_LENGTH(len));
-
-	if (dma64) {
-		__le64 *dataddr = (__le64 __force *)(desc + 4);
-
-		dataddr[0] = cpu_to_le64(addr);
-	} else {
-		__le32 *dataddr = (__le32 __force *)(desc + 4);
-
-		dataddr[0] = cpu_to_le32(addr);
-	}
-}
-
-static int cqhci_prep_tran_desc(struct mmc_request *mrq,
-			       struct cqhci_host *cq_host, int tag)
-{
-	struct mmc_data *data = mrq->data;
-	int i, sg_count, len;
-	bool end = false;
-	bool dma64 = cq_host->dma64;
-	dma_addr_t addr;
-	u8 *desc;
-	struct scatterlist *sg;
-
-	sg_count = cqhci_dma_map(mrq->host, mrq);
-	if (sg_count < 0) {
-		pr_err("%s: %s: unable to map sg lists, %d\n",
-				mmc_hostname(mrq->host), __func__, sg_count);
-		return sg_count;
-	}
-
-	desc = get_trans_desc(cq_host, tag);
-
-	for_each_sg(data->sg, sg, sg_count, i) {
-		addr = sg_dma_address(sg);
-		len = sg_dma_len(sg);
-
-		if ((i+1) == sg_count)
-			end = true;
-		cqhci_set_tran_desc(desc, addr, len, end, dma64);
-		desc += cq_host->trans_desc_len;
-	}
-
-	return 0;
-}
-
-static void cqhci_prep_dcmd_desc(struct mmc_host *mmc,
-				   struct mmc_request *mrq)
-{
-	u64 *task_desc = NULL;
-	u64 data = 0;
-	u8 resp_type;
-	u8 *desc;
-	__le64 *dataddr;
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	u8 timing;
-
-	if (!(mrq->cmd->flags & MMC_RSP_PRESENT)) {
-		resp_type = 0x0;
-		timing = 0x1;
-	} else {
-		if (mrq->cmd->flags & MMC_RSP_R1B) {
-			resp_type = 0x3;
-			timing = 0x0;
-		} else {
-			resp_type = 0x2;
-			timing = 0x1;
-		}
-	}
-
-	task_desc = (__le64 __force *)get_desc(cq_host, cq_host->dcmd_slot);
-	memset(task_desc, 0, cq_host->task_desc_len);
-	data |= (CQHCI_VALID(1) |
-		 CQHCI_END(1) |
-		 CQHCI_INT(1) |
-		 CQHCI_QBAR(1) |
-		 CQHCI_ACT(0x5) |
-		 CQHCI_CMD_INDEX(mrq->cmd->opcode) |
-		 CQHCI_CMD_TIMING(timing) | CQHCI_RESP_TYPE(resp_type));
-	if (cq_host->ops->update_dcmd_desc)
-		cq_host->ops->update_dcmd_desc(mmc, mrq, &data);
-	*task_desc |= data;
-	desc = (u8 *)task_desc;
-	pr_debug("%s: cqhci: dcmd: cmd: %d timing: %d resp: %d\n",
-		 mmc_hostname(mmc), mrq->cmd->opcode, timing, resp_type);
-	dataddr = (__le64 __force *)(desc + 4);
-	dataddr[0] = cpu_to_le64((u64)mrq->cmd->arg);
-
-}
-
-static void cqhci_post_req(struct mmc_host *host, struct mmc_request *mrq)
-{
-	struct mmc_data *data = mrq->data;
-
-	if (data) {
-		dma_unmap_sg(mmc_dev(host), data->sg, data->sg_len,
-			     (data->flags & MMC_DATA_READ) ?
-			     DMA_FROM_DEVICE : DMA_TO_DEVICE);
-	}
-}
-
-static inline int cqhci_tag(struct mmc_request *mrq)
-{
-	return mrq->cmd ? DCMD_SLOT : mrq->tag;
-}
-
-static int cqhci_request(struct mmc_host *mmc, struct mmc_request *mrq)
-{
-	int err = 0;
-	u64 data = 0;
-	u64 *task_desc = NULL;
-	int tag = cqhci_tag(mrq);
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	unsigned long flags;
-
-	if (!cq_host->enabled) {
-		pr_err("%s: cqhci: not enabled\n", mmc_hostname(mmc));
-		return -EINVAL;
-	}
-
-	/* First request after resume has to re-enable */
-	if (!cq_host->activated)
-		__cqhci_enable(cq_host);
-
-	if (!mmc->cqe_on) {
-		cqhci_writel(cq_host, 0, CQHCI_CTL);
-		mmc->cqe_on = true;
-		pr_debug("%s: cqhci: CQE on\n", mmc_hostname(mmc));
-		if (cqhci_readl(cq_host, CQHCI_CTL) && CQHCI_HALT) {
-			pr_err("%s: cqhci: CQE failed to exit halt state\n",
-			       mmc_hostname(mmc));
-		}
-		if (cq_host->ops->enable)
-			cq_host->ops->enable(mmc);
-	}
-
-	if (mrq->data) {
-		task_desc = (__le64 __force *)get_desc(cq_host, tag);
-		cqhci_prep_task_desc(mrq, &data, 1);
-		*task_desc = cpu_to_le64(data);
-		err = cqhci_prep_tran_desc(mrq, cq_host, tag);
-		if (err) {
-			pr_err("%s: cqhci: failed to setup tx desc: %d\n",
-			       mmc_hostname(mmc), err);
-			return err;
-		}
-	} else {
-		cqhci_prep_dcmd_desc(mmc, mrq);
-	}
-
-	spin_lock_irqsave(&cq_host->lock, flags);
-
-	if (cq_host->recovery_halt) {
-		err = -EBUSY;
-		goto out_unlock;
-	}
-
-	cq_host->slot[tag].mrq = mrq;
-	cq_host->slot[tag].flags = 0;
-
-	cq_host->qcnt += 1;
-	/* Make sure descriptors are ready before ringing the doorbell */
-	wmb();
-	cqhci_writel(cq_host, 1 << tag, CQHCI_TDBR);
-	if (!(cqhci_readl(cq_host, CQHCI_TDBR) & (1 << tag)))
-		pr_debug("%s: cqhci: doorbell not set for tag %d\n",
-			 mmc_hostname(mmc), tag);
-out_unlock:
-	spin_unlock_irqrestore(&cq_host->lock, flags);
-
-	if (err)
-		cqhci_post_req(mmc, mrq);
-
-	return err;
-}
-
-static void cqhci_recovery_needed(struct mmc_host *mmc, struct mmc_request *mrq,
-				  bool notify)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-
-	if (!cq_host->recovery_halt) {
-		cq_host->recovery_halt = true;
-		pr_debug("%s: cqhci: recovery needed\n", mmc_hostname(mmc));
-		wake_up(&cq_host->wait_queue);
-		if (notify && mrq->recovery_notifier)
-			mrq->recovery_notifier(mrq);
-	}
-}
-
-static unsigned int cqhci_error_flags(int error1, int error2)
-{
-	int error = error1 ? error1 : error2;
-
-	switch (error) {
-	case -EILSEQ:
-		return CQHCI_HOST_CRC;
-	case -ETIMEDOUT:
-		return CQHCI_HOST_TIMEOUT;
-	default:
-		return CQHCI_HOST_OTHER;
-	}
-}
-
-static void cqhci_error_irq(struct mmc_host *mmc, u32 status, int cmd_error,
-			    int data_error)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	struct cqhci_slot *slot;
-	u32 terri;
-	int tag;
-
-	spin_lock(&cq_host->lock);
-
-	terri = cqhci_readl(cq_host, CQHCI_TERRI);
-
-	pr_debug("%s: cqhci: error IRQ status: 0x%08x cmd error %d data error %d TERRI: 0x%08x\n",
-		 mmc_hostname(mmc), status, cmd_error, data_error, terri);
-
-	/* Forget about errors when recovery has already been triggered */
-	if (cq_host->recovery_halt)
-		goto out_unlock;
-
-	if (!cq_host->qcnt) {
-		WARN_ONCE(1, "%s: cqhci: error when idle. IRQ status: 0x%08x cmd error %d data error %d TERRI: 0x%08x\n",
-			  mmc_hostname(mmc), status, cmd_error, data_error,
-			  terri);
-		goto out_unlock;
-	}
-
-	if (CQHCI_TERRI_C_VALID(terri)) {
-		tag = CQHCI_TERRI_C_TASK(terri);
-		slot = &cq_host->slot[tag];
-		if (slot->mrq) {
-			slot->flags = cqhci_error_flags(cmd_error, data_error);
-			cqhci_recovery_needed(mmc, slot->mrq, true);
-		}
-	}
-
-	if (CQHCI_TERRI_D_VALID(terri)) {
-		tag = CQHCI_TERRI_D_TASK(terri);
-		slot = &cq_host->slot[tag];
-		if (slot->mrq) {
-			slot->flags = cqhci_error_flags(data_error, cmd_error);
-			cqhci_recovery_needed(mmc, slot->mrq, true);
-		}
-	}
-
-	if (!cq_host->recovery_halt) {
-		/*
-		 * The only way to guarantee forward progress is to mark at
-		 * least one task in error, so if none is indicated, pick one.
-		 */
-		for (tag = 0; tag < NUM_SLOTS; tag++) {
-			slot = &cq_host->slot[tag];
-			if (!slot->mrq)
-				continue;
-			slot->flags = cqhci_error_flags(data_error, cmd_error);
-			cqhci_recovery_needed(mmc, slot->mrq, true);
-			break;
-		}
-	}
-
-out_unlock:
-	spin_unlock(&cq_host->lock);
-}
-
-static void cqhci_finish_mrq(struct mmc_host *mmc, unsigned int tag)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	struct cqhci_slot *slot = &cq_host->slot[tag];
-	struct mmc_request *mrq = slot->mrq;
-	struct mmc_data *data;
-
-	if (!mrq) {
-		WARN_ONCE(1, "%s: cqhci: spurious TCN for tag %d\n",
-			  mmc_hostname(mmc), tag);
-		return;
-	}
-
-	/* No completions allowed during recovery */
-	if (cq_host->recovery_halt) {
-		slot->flags |= CQHCI_COMPLETED;
-		return;
-	}
-
-	slot->mrq = NULL;
-
-	cq_host->qcnt -= 1;
-
-	data = mrq->data;
-	if (data) {
-		if (data->error)
-			data->bytes_xfered = 0;
-		else
-			data->bytes_xfered = data->blksz * data->blocks;
-	}
-
-	mmc_cqe_request_done(mmc, mrq);
-}
-
-irqreturn_t cqhci_irq(struct mmc_host *mmc, u32 intmask, int cmd_error,
-		      int data_error)
-{
-	u32 status;
-	unsigned long tag = 0, comp_status;
-	struct cqhci_host *cq_host = mmc->cqe_private;
-
-	status = cqhci_readl(cq_host, CQHCI_IS);
-	cqhci_writel(cq_host, status, CQHCI_IS);
-
-	pr_debug("%s: cqhci: IRQ status: 0x%08x\n", mmc_hostname(mmc), status);
-
-	if ((status & CQHCI_IS_RED) || cmd_error || data_error)
-		cqhci_error_irq(mmc, status, cmd_error, data_error);
-
-	if (status & CQHCI_IS_TCC) {
-		/* read TCN and complete the request */
-		comp_status = cqhci_readl(cq_host, CQHCI_TCN);
-		cqhci_writel(cq_host, comp_status, CQHCI_TCN);
-		pr_debug("%s: cqhci: TCN: 0x%08lx\n",
-			 mmc_hostname(mmc), comp_status);
-
-		spin_lock(&cq_host->lock);
-
-		for_each_set_bit(tag, &comp_status, cq_host->num_slots) {
-			/* complete the corresponding mrq */
-			pr_debug("%s: cqhci: completing tag %lu\n",
-				 mmc_hostname(mmc), tag);
-			cqhci_finish_mrq(mmc, tag);
-		}
-
-		if (cq_host->waiting_for_idle && !cq_host->qcnt) {
-			cq_host->waiting_for_idle = false;
-			wake_up(&cq_host->wait_queue);
-		}
-
-		spin_unlock(&cq_host->lock);
-	}
-
-	if (status & CQHCI_IS_TCL)
-		wake_up(&cq_host->wait_queue);
-
-	if (status & CQHCI_IS_HAC)
-		wake_up(&cq_host->wait_queue);
-
-	return IRQ_HANDLED;
-}
-EXPORT_SYMBOL(cqhci_irq);
-
-static bool cqhci_is_idle(struct cqhci_host *cq_host, int *ret)
-{
-	unsigned long flags;
-	bool is_idle;
-
-	spin_lock_irqsave(&cq_host->lock, flags);
-	is_idle = !cq_host->qcnt || cq_host->recovery_halt;
-	*ret = cq_host->recovery_halt ? -EBUSY : 0;
-	cq_host->waiting_for_idle = !is_idle;
-	spin_unlock_irqrestore(&cq_host->lock, flags);
-
-	return is_idle;
-}
-
-static int cqhci_wait_for_idle(struct mmc_host *mmc)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	int ret;
-
-	wait_event(cq_host->wait_queue, cqhci_is_idle(cq_host, &ret));
-
-	return ret;
-}
-
-static bool cqhci_timeout(struct mmc_host *mmc, struct mmc_request *mrq,
-			  bool *recovery_needed)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	int tag = cqhci_tag(mrq);
-	struct cqhci_slot *slot = &cq_host->slot[tag];
-	unsigned long flags;
-	bool timed_out;
-
-	spin_lock_irqsave(&cq_host->lock, flags);
-	timed_out = slot->mrq == mrq;
-	if (timed_out) {
-		slot->flags |= CQHCI_EXTERNAL_TIMEOUT;
-		cqhci_recovery_needed(mmc, mrq, false);
-		*recovery_needed = cq_host->recovery_halt;
-	}
-	spin_unlock_irqrestore(&cq_host->lock, flags);
-
-	if (timed_out) {
-		pr_err("%s: cqhci: timeout for tag %d\n",
-		       mmc_hostname(mmc), tag);
-		cqhci_dumpregs(cq_host);
-	}
-
-	return timed_out;
-}
-
-static bool cqhci_tasks_cleared(struct cqhci_host *cq_host)
-{
-	return !(cqhci_readl(cq_host, CQHCI_CTL) & CQHCI_CLEAR_ALL_TASKS);
-}
-
-static bool cqhci_clear_all_tasks(struct mmc_host *mmc, unsigned int timeout)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	bool ret;
-	u32 ctl;
-
-	cqhci_set_irqs(cq_host, CQHCI_IS_TCL);
-
-	ctl = cqhci_readl(cq_host, CQHCI_CTL);
-	ctl |= CQHCI_CLEAR_ALL_TASKS;
-	cqhci_writel(cq_host, ctl, CQHCI_CTL);
-
-	wait_event_timeout(cq_host->wait_queue, cqhci_tasks_cleared(cq_host),
-			   msecs_to_jiffies(timeout) + 1);
-
-	cqhci_set_irqs(cq_host, 0);
-
-	ret = cqhci_tasks_cleared(cq_host);
-
-	if (!ret)
-		pr_debug("%s: cqhci: Failed to clear tasks\n",
-			 mmc_hostname(mmc));
-
-	return ret;
-}
-
-static bool cqhci_halted(struct cqhci_host *cq_host)
-{
-	return cqhci_readl(cq_host, CQHCI_CTL) & CQHCI_HALT;
-}
-
-static bool cqhci_halt(struct mmc_host *mmc, unsigned int timeout)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	bool ret;
-	u32 ctl;
-
-	if (cqhci_halted(cq_host))
-		return true;
-
-	cqhci_set_irqs(cq_host, CQHCI_IS_HAC);
-
-	ctl = cqhci_readl(cq_host, CQHCI_CTL);
-	ctl |= CQHCI_HALT;
-	cqhci_writel(cq_host, ctl, CQHCI_CTL);
-
-	wait_event_timeout(cq_host->wait_queue, cqhci_halted(cq_host),
-			   msecs_to_jiffies(timeout) + 1);
-
-	cqhci_set_irqs(cq_host, 0);
-
-	ret = cqhci_halted(cq_host);
-
-	if (!ret)
-		pr_debug("%s: cqhci: Failed to halt\n", mmc_hostname(mmc));
-
-	return ret;
-}
-
-/*
- * After halting we expect to be able to use the command line. We interpret the
- * failure to halt to mean the data lines might still be in use (and the upper
- * layers will need to send a STOP command), so we set the timeout based on a
- * generous command timeout.
- */
-#define CQHCI_START_HALT_TIMEOUT	5
-
-static void cqhci_recovery_start(struct mmc_host *mmc)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-
-	pr_debug("%s: cqhci: %s\n", mmc_hostname(mmc), __func__);
-
-	WARN_ON(!cq_host->recovery_halt);
-
-	cqhci_halt(mmc, CQHCI_START_HALT_TIMEOUT);
-
-	if (cq_host->ops->disable)
-		cq_host->ops->disable(mmc, true);
-
-	mmc->cqe_on = false;
-}
-
-static int cqhci_error_from_flags(unsigned int flags)
-{
-	if (!flags)
-		return 0;
-
-	/* CRC errors might indicate re-tuning so prefer to report that */
-	if (flags & CQHCI_HOST_CRC)
-		return -EILSEQ;
-
-	if (flags & (CQHCI_EXTERNAL_TIMEOUT | CQHCI_HOST_TIMEOUT))
-		return -ETIMEDOUT;
-
-	return -EIO;
-}
-
-static void cqhci_recover_mrq(struct cqhci_host *cq_host, unsigned int tag)
-{
-	struct cqhci_slot *slot = &cq_host->slot[tag];
-	struct mmc_request *mrq = slot->mrq;
-	struct mmc_data *data;
-
-	if (!mrq)
-		return;
-
-	slot->mrq = NULL;
-
-	cq_host->qcnt -= 1;
-
-	data = mrq->data;
-	if (data) {
-		data->bytes_xfered = 0;
-		data->error = cqhci_error_from_flags(slot->flags);
-	} else {
-		mrq->cmd->error = cqhci_error_from_flags(slot->flags);
-	}
-
-	mmc_cqe_request_done(cq_host->mmc, mrq);
-}
-
-static void cqhci_recover_mrqs(struct cqhci_host *cq_host)
-{
-	int i;
-
-	for (i = 0; i < cq_host->num_slots; i++)
-		cqhci_recover_mrq(cq_host, i);
-}
-
-/*
- * By now the command and data lines should be unused so there is no reason for
- * CQHCI to take a long time to halt, but if it doesn't halt there could be
- * problems clearing tasks, so be generous.
- */
-#define CQHCI_FINISH_HALT_TIMEOUT	20
-
-/* CQHCI could be expected to clear it's internal state pretty quickly */
-#define CQHCI_CLEAR_TIMEOUT		20
-
-static void cqhci_recovery_finish(struct mmc_host *mmc)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	unsigned long flags;
-	u32 cqcfg;
-	bool ok;
-
-	pr_debug("%s: cqhci: %s\n", mmc_hostname(mmc), __func__);
-
-	WARN_ON(!cq_host->recovery_halt);
-
-	ok = cqhci_halt(mmc, CQHCI_FINISH_HALT_TIMEOUT);
-
-	if (!cqhci_clear_all_tasks(mmc, CQHCI_CLEAR_TIMEOUT))
-		ok = false;
-
-	/*
-	 * The specification contradicts itself, by saying that tasks cannot be
-	 * cleared if CQHCI does not halt, but if CQHCI does not halt, it should
-	 * be disabled/re-enabled, but not to disable before clearing tasks.
-	 * Have a go anyway.
-	 */
-	if (!ok) {
-		pr_debug("%s: cqhci: disable / re-enable\n", mmc_hostname(mmc));
-		cqcfg = cqhci_readl(cq_host, CQHCI_CFG);
-		cqcfg &= ~CQHCI_ENABLE;
-		cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
-		cqcfg |= CQHCI_ENABLE;
-		cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
-		/* Be sure that there are no tasks */
-		ok = cqhci_halt(mmc, CQHCI_FINISH_HALT_TIMEOUT);
-		if (!cqhci_clear_all_tasks(mmc, CQHCI_CLEAR_TIMEOUT))
-			ok = false;
-		WARN_ON(!ok);
-	}
-
-	cqhci_recover_mrqs(cq_host);
-
-	WARN_ON(cq_host->qcnt);
-
-	spin_lock_irqsave(&cq_host->lock, flags);
-	cq_host->qcnt = 0;
-	cq_host->recovery_halt = false;
-	mmc->cqe_on = false;
-	spin_unlock_irqrestore(&cq_host->lock, flags);
-
-	/* Ensure all writes are done before interrupts are re-enabled */
-	wmb();
-
-	cqhci_writel(cq_host, CQHCI_IS_HAC | CQHCI_IS_TCL, CQHCI_IS);
-
-	cqhci_set_irqs(cq_host, CQHCI_IS_MASK);
-
-	pr_debug("%s: cqhci: recovery done\n", mmc_hostname(mmc));
-}
-
-static const struct mmc_cqe_ops cqhci_cqe_ops = {
-	.cqe_enable = cqhci_enable,
-	.cqe_disable = cqhci_disable,
-	.cqe_request = cqhci_request,
-	.cqe_post_req = cqhci_post_req,
-	.cqe_off = cqhci_off,
-	.cqe_wait_for_idle = cqhci_wait_for_idle,
-	.cqe_timeout = cqhci_timeout,
-	.cqe_recovery_start = cqhci_recovery_start,
-	.cqe_recovery_finish = cqhci_recovery_finish,
-};
-
-struct cqhci_host *cqhci_pltfm_init(struct platform_device *pdev)
-{
-	struct cqhci_host *cq_host;
-	struct resource *cqhci_memres = NULL;
-
-	/* check and setup CMDQ interface */
-	cqhci_memres = platform_get_resource_byname(pdev, IORESOURCE_MEM,
-						   "cqhci_mem");
-	if (!cqhci_memres) {
-		dev_dbg(&pdev->dev, "CMDQ not supported\n");
-		return ERR_PTR(-EINVAL);
-	}
-
-	cq_host = devm_kzalloc(&pdev->dev, sizeof(*cq_host), GFP_KERNEL);
-	if (!cq_host)
-		return ERR_PTR(-ENOMEM);
-	cq_host->mmio = devm_ioremap(&pdev->dev,
-				     cqhci_memres->start,
-				     resource_size(cqhci_memres));
-	if (!cq_host->mmio) {
-		dev_err(&pdev->dev, "failed to remap cqhci regs\n");
-		return ERR_PTR(-EBUSY);
-	}
-	dev_dbg(&pdev->dev, "CMDQ ioremap: done\n");
-
-	return cq_host;
-}
-EXPORT_SYMBOL(cqhci_pltfm_init);
-
-static unsigned int cqhci_ver_major(struct cqhci_host *cq_host)
-{
-	return CQHCI_VER_MAJOR(cqhci_readl(cq_host, CQHCI_VER));
-}
-
-static unsigned int cqhci_ver_minor(struct cqhci_host *cq_host)
-{
-	u32 ver = cqhci_readl(cq_host, CQHCI_VER);
-
-	return CQHCI_VER_MINOR1(ver) * 10 + CQHCI_VER_MINOR2(ver);
-}
-
-int cqhci_init(struct cqhci_host *cq_host, struct mmc_host *mmc,
-	      bool dma64)
-{
-	int err;
-
-	cq_host->dma64 = dma64;
-	cq_host->mmc = mmc;
-	cq_host->mmc->cqe_private = cq_host;
-
-	cq_host->num_slots = NUM_SLOTS;
-	cq_host->dcmd_slot = DCMD_SLOT;
-
-	mmc->cqe_ops = &cqhci_cqe_ops;
-
-	mmc->cqe_qdepth = NUM_SLOTS;
-	if (mmc->caps2 & MMC_CAP2_CQE_DCMD)
-		mmc->cqe_qdepth -= 1;
-
-	cq_host->slot = devm_kcalloc(mmc_dev(mmc), cq_host->num_slots,
-				     sizeof(*cq_host->slot), GFP_KERNEL);
-	if (!cq_host->slot) {
-		err = -ENOMEM;
-		goto out_err;
-	}
-
-	spin_lock_init(&cq_host->lock);
-
-	init_completion(&cq_host->halt_comp);
-	init_waitqueue_head(&cq_host->wait_queue);
-
-	pr_info("%s: CQHCI version %u.%02u\n",
-		mmc_hostname(mmc), cqhci_ver_major(cq_host),
-		cqhci_ver_minor(cq_host));
-
-	return 0;
-
-out_err:
-	pr_err("%s: CQHCI version %u.%02u failed to initialize, error %d\n",
-	       mmc_hostname(mmc), cqhci_ver_major(cq_host),
-	       cqhci_ver_minor(cq_host), err);
-	return err;
-}
-EXPORT_SYMBOL(cqhci_init);
-
-MODULE_AUTHOR("Venkat Gopalakrishnan <venkatg@codeaurora.org>");
-MODULE_DESCRIPTION("Command Queue Host Controller Interface driver");
-MODULE_LICENSE("GPL v2");
diff --git a/drivers/mmc/host/cqhci.h b/drivers/mmc/host/cqhci.h
index 4377001..e08fa17 100644
--- a/drivers/mmc/host/cqhci.h
+++ b/drivers/mmc/host/cqhci.h
@@ -22,10 +22,13 @@
 
 /* capabilities */
 #define CQHCI_CAP			0x04
+#define CQHCI_CAP_CS			0x10000000 /* Crypto Support */
+
 /* configuration */
 #define CQHCI_CFG			0x08
 #define CQHCI_DCMD			0x00001000
 #define CQHCI_TASK_DESC_SZ		0x00000100
+#define CQHCI_CRYPTO_GENERAL_ENABLE	0x00000002
 #define CQHCI_ENABLE			0x00000001
 
 /* control */
@@ -39,8 +42,11 @@
 #define CQHCI_IS_TCC			BIT(1)
 #define CQHCI_IS_RED			BIT(2)
 #define CQHCI_IS_TCL			BIT(3)
+#define CQHCI_IS_GCE			BIT(4) /* General Crypto Error */
+#define CQHCI_IS_ICCE			BIT(5) /* Invalid Crypto Config Error */
 
-#define CQHCI_IS_MASK (CQHCI_IS_TCC | CQHCI_IS_RED)
+#define CQHCI_IS_MASK (CQHCI_IS_TCC | CQHCI_IS_RED | \
+		       CQHCI_IS_GCE | CQHCI_IS_ICCE)
 
 /* interrupt status enable */
 #define CQHCI_ISTE			0x14
@@ -78,6 +84,9 @@
 /* task clear */
 #define CQHCI_TCLR			0x38
 
+/* task descriptor processing error */
+#define CQHCI_TDPE			0x3c
+
 /* send status config 1 */
 #define CQHCI_SSC1			0x40
 #define CQHCI_SSC1_CBC_MASK		GENMASK(19, 16)
@@ -107,6 +116,10 @@
 /* command response argument */
 #define CQHCI_CRA			0x5C
 
+/* crypto capabilities */
+#define CQHCI_CCAP			0x100
+#define CQHCI_CRYPTOCAP			0x104
+
 #define CQHCI_INT_ALL			0xF
 #define CQHCI_IC_DEFAULT_ICCTH		31
 #define CQHCI_IC_DEFAULT_ICTOVAL	1
@@ -133,11 +146,70 @@
 #define CQHCI_CMD_TIMING(x)		(((x) & 1) << 22)
 #define CQHCI_RESP_TYPE(x)		(((x) & 0x3) << 23)
 
+/* crypto task descriptor fields (for bits 64-127 of task descriptor) */
+#define CQHCI_CRYPTO_ENABLE_BIT		(1ULL << 47)
+#define CQHCI_CRYPTO_KEYSLOT(x)		((u64)(x) << 32)
+
 /* transfer descriptor fields */
 #define CQHCI_DAT_LENGTH(x)		(((x) & 0xFFFF) << 16)
 #define CQHCI_DAT_ADDR_LO(x)		(((x) & 0xFFFFFFFF) << 32)
 #define CQHCI_DAT_ADDR_HI(x)		(((x) & 0xFFFFFFFF) << 0)
 
+/* CCAP - Crypto Capability 100h */
+union cqhci_crypto_capabilities {
+	__le32 reg_val;
+	struct {
+		u8 num_crypto_cap;
+		u8 config_count;
+		u8 reserved;
+		u8 config_array_ptr;
+	};
+};
+
+enum cqhci_crypto_key_size {
+	CQHCI_CRYPTO_KEY_SIZE_INVALID	= 0,
+	CQHCI_CRYPTO_KEY_SIZE_128	= 1,
+	CQHCI_CRYPTO_KEY_SIZE_192	= 2,
+	CQHCI_CRYPTO_KEY_SIZE_256	= 3,
+	CQHCI_CRYPTO_KEY_SIZE_512	= 4,
+};
+
+enum cqhci_crypto_alg {
+	CQHCI_CRYPTO_ALG_AES_XTS		= 0,
+	CQHCI_CRYPTO_ALG_BITLOCKER_AES_CBC	= 1,
+	CQHCI_CRYPTO_ALG_AES_ECB		= 2,
+	CQHCI_CRYPTO_ALG_ESSIV_AES_CBC		= 3,
+};
+
+/* x-CRYPTOCAP - Crypto Capability X */
+union cqhci_crypto_cap_entry {
+	__le32 reg_val;
+	struct {
+		u8 algorithm_id;
+		u8 sdus_mask; /* Supported data unit size mask */
+		u8 key_size;
+		u8 reserved;
+	};
+};
+
+#define CQHCI_CRYPTO_CONFIGURATION_ENABLE (1 << 7)
+#define CQHCI_CRYPTO_KEY_MAX_SIZE 64
+/* x-CRYPTOCFG - Crypto Configuration X */
+union cqhci_crypto_cfg_entry {
+	__le32 reg_val[32];
+	struct {
+		u8 crypto_key[CQHCI_CRYPTO_KEY_MAX_SIZE];
+		u8 data_unit_size;
+		u8 crypto_cap_idx;
+		u8 reserved_1;
+		u8 config_enable;
+		u8 reserved_multi_host;
+		u8 reserved_2;
+		u8 vsb[2];
+		u8 reserved_3[56];
+	};
+};
+
 struct cqhci_host_ops;
 struct mmc_host;
 struct mmc_request;
@@ -196,6 +268,12 @@ struct cqhci_host {
 	struct completion halt_comp;
 	wait_queue_head_t wait_queue;
 	struct cqhci_slot *slot;
+
+#ifdef CONFIG_MMC_CRYPTO
+	union cqhci_crypto_capabilities crypto_capabilities;
+	union cqhci_crypto_cap_entry *crypto_cap_array;
+	u32 crypto_cfg_register;
+#endif
 };
 
 struct cqhci_host_ops {
@@ -206,6 +284,10 @@ struct cqhci_host_ops {
 	void (*disable)(struct mmc_host *mmc, bool recovery);
 	void (*update_dcmd_desc)(struct mmc_host *mmc, struct mmc_request *mrq,
 				 u64 *data);
+#ifdef CONFIG_MMC_CRYPTO
+	int (*program_key)(struct cqhci_host *cq_host,
+			   const union cqhci_crypto_cfg_entry *cfg, int slot);
+#endif
 };
 
 static inline void cqhci_writel(struct cqhci_host *host, u32 val, int reg)
diff --git a/drivers/mmc/host/mmc_hsq.c b/drivers/mmc/host/mmc_hsq.c
new file mode 100644
index 0000000..a5e05ed
--- /dev/null
+++ b/drivers/mmc/host/mmc_hsq.c
@@ -0,0 +1,375 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ *
+ * MMC software queue support based on command queue interfaces
+ *
+ * Copyright (C) 2019 Linaro, Inc.
+ * Author: Baolin Wang <baolin.wang@linaro.org>
+ */
+
+#include <linux/mmc/card.h>
+#include <linux/mmc/host.h>
+#include <linux/module.h>
+
+#include "mmc_hsq.h"
+
+#define HSQ_NUM_SLOTS	64
+#define HSQ_INVALID_TAG	HSQ_NUM_SLOTS
+
+static void mmc_hsq_retry_handler(struct work_struct *work)
+{
+	struct mmc_hsq *hsq = container_of(work, struct mmc_hsq, retry_work);
+	struct mmc_host *mmc = hsq->mmc;
+
+	mmc->ops->request(mmc, hsq->mrq);
+}
+
+static void mmc_hsq_pump_requests(struct mmc_hsq *hsq)
+{
+	struct mmc_host *mmc = hsq->mmc;
+	struct hsq_slot *slot;
+	unsigned long flags;
+	int ret = 0;
+
+	spin_lock_irqsave(&hsq->lock, flags);
+
+	/* Make sure we are not already running a request now */
+	if (hsq->mrq) {
+		spin_unlock_irqrestore(&hsq->lock, flags);
+		return;
+	}
+
+	/* Make sure there are remain requests need to pump */
+	if (!hsq->qcnt || !hsq->enabled) {
+		spin_unlock_irqrestore(&hsq->lock, flags);
+		return;
+	}
+
+	slot = &hsq->slot[hsq->next_tag];
+	hsq->mrq = slot->mrq;
+	hsq->qcnt--;
+
+	spin_unlock_irqrestore(&hsq->lock, flags);
+
+	if (mmc->ops->request_atomic)
+		ret = mmc->ops->request_atomic(mmc, hsq->mrq);
+	else
+		mmc->ops->request(mmc, hsq->mrq);
+
+	/*
+	 * If returning BUSY from request_atomic(), which means the card
+	 * may be busy now, and we should change to non-atomic context to
+	 * try again for this unusual case, to avoid time-consuming operations
+	 * in the atomic context.
+	 *
+	 * Note: we just give a warning for other error cases, since the host
+	 * driver will handle them.
+	 */
+	if (ret == -EBUSY)
+		schedule_work(&hsq->retry_work);
+	else
+		WARN_ON_ONCE(ret);
+}
+
+static void mmc_hsq_update_next_tag(struct mmc_hsq *hsq, int remains)
+{
+	struct hsq_slot *slot;
+	int tag;
+
+	/*
+	 * If there are no remain requests in software queue, then set a invalid
+	 * tag.
+	 */
+	if (!remains) {
+		hsq->next_tag = HSQ_INVALID_TAG;
+		return;
+	}
+
+	/*
+	 * Increasing the next tag and check if the corresponding request is
+	 * available, if yes, then we found a candidate request.
+	 */
+	if (++hsq->next_tag != HSQ_INVALID_TAG) {
+		slot = &hsq->slot[hsq->next_tag];
+		if (slot->mrq)
+			return;
+	}
+
+	/* Othersie we should iterate all slots to find a available tag. */
+	for (tag = 0; tag < HSQ_NUM_SLOTS; tag++) {
+		slot = &hsq->slot[tag];
+		if (slot->mrq)
+			break;
+	}
+
+	if (tag == HSQ_NUM_SLOTS)
+		tag = HSQ_INVALID_TAG;
+
+	hsq->next_tag = tag;
+}
+
+static void mmc_hsq_post_request(struct mmc_hsq *hsq)
+{
+	unsigned long flags;
+	int remains;
+
+	spin_lock_irqsave(&hsq->lock, flags);
+
+	remains = hsq->qcnt;
+	hsq->mrq = NULL;
+
+	/* Update the next available tag to be queued. */
+	mmc_hsq_update_next_tag(hsq, remains);
+
+	if (hsq->waiting_for_idle && !remains) {
+		hsq->waiting_for_idle = false;
+		wake_up(&hsq->wait_queue);
+	}
+
+	/* Do not pump new request in recovery mode. */
+	if (hsq->recovery_halt) {
+		spin_unlock_irqrestore(&hsq->lock, flags);
+		return;
+	}
+
+	spin_unlock_irqrestore(&hsq->lock, flags);
+
+	 /*
+	  * Try to pump new request to host controller as fast as possible,
+	  * after completing previous request.
+	  */
+	if (remains > 0)
+		mmc_hsq_pump_requests(hsq);
+}
+
+/**
+ * mmc_hsq_finalize_request - finalize one request if the request is done
+ * @mmc: the host controller
+ * @mrq: the request need to be finalized
+ *
+ * Return true if we finalized the corresponding request in software queue,
+ * otherwise return false.
+ */
+bool mmc_hsq_finalize_request(struct mmc_host *mmc, struct mmc_request *mrq)
+{
+	struct mmc_hsq *hsq = mmc->cqe_private;
+	unsigned long flags;
+
+	spin_lock_irqsave(&hsq->lock, flags);
+
+	if (!hsq->enabled || !hsq->mrq || hsq->mrq != mrq) {
+		spin_unlock_irqrestore(&hsq->lock, flags);
+		return false;
+	}
+
+	/*
+	 * Clear current completed slot request to make a room for new request.
+	 */
+	hsq->slot[hsq->next_tag].mrq = NULL;
+
+	spin_unlock_irqrestore(&hsq->lock, flags);
+
+	mmc_cqe_request_done(mmc, hsq->mrq);
+
+	mmc_hsq_post_request(hsq);
+
+	return true;
+}
+EXPORT_SYMBOL_GPL(mmc_hsq_finalize_request);
+
+static void mmc_hsq_recovery_start(struct mmc_host *mmc)
+{
+	struct mmc_hsq *hsq = mmc->cqe_private;
+	unsigned long flags;
+
+	spin_lock_irqsave(&hsq->lock, flags);
+
+	hsq->recovery_halt = true;
+
+	spin_unlock_irqrestore(&hsq->lock, flags);
+}
+
+static void mmc_hsq_recovery_finish(struct mmc_host *mmc)
+{
+	struct mmc_hsq *hsq = mmc->cqe_private;
+	int remains;
+
+	spin_lock_irq(&hsq->lock);
+
+	hsq->recovery_halt = false;
+	remains = hsq->qcnt;
+
+	spin_unlock_irq(&hsq->lock);
+
+	/*
+	 * Try to pump new request if there are request pending in software
+	 * queue after finishing recovery.
+	 */
+	if (remains > 0)
+		mmc_hsq_pump_requests(hsq);
+}
+
+static int mmc_hsq_request(struct mmc_host *mmc, struct mmc_request *mrq)
+{
+	struct mmc_hsq *hsq = mmc->cqe_private;
+	int tag = mrq->tag;
+
+	spin_lock_irq(&hsq->lock);
+
+	if (!hsq->enabled) {
+		spin_unlock_irq(&hsq->lock);
+		return -ESHUTDOWN;
+	}
+
+	/* Do not queue any new requests in recovery mode. */
+	if (hsq->recovery_halt) {
+		spin_unlock_irq(&hsq->lock);
+		return -EBUSY;
+	}
+
+	hsq->slot[tag].mrq = mrq;
+
+	/*
+	 * Set the next tag as current request tag if no available
+	 * next tag.
+	 */
+	if (hsq->next_tag == HSQ_INVALID_TAG)
+		hsq->next_tag = tag;
+
+	hsq->qcnt++;
+
+	spin_unlock_irq(&hsq->lock);
+
+	mmc_hsq_pump_requests(hsq);
+
+	return 0;
+}
+
+static void mmc_hsq_post_req(struct mmc_host *mmc, struct mmc_request *mrq)
+{
+	if (mmc->ops->post_req)
+		mmc->ops->post_req(mmc, mrq, 0);
+}
+
+static bool mmc_hsq_queue_is_idle(struct mmc_hsq *hsq, int *ret)
+{
+	bool is_idle;
+
+	spin_lock_irq(&hsq->lock);
+
+	is_idle = (!hsq->mrq && !hsq->qcnt) ||
+		hsq->recovery_halt;
+
+	*ret = hsq->recovery_halt ? -EBUSY : 0;
+	hsq->waiting_for_idle = !is_idle;
+
+	spin_unlock_irq(&hsq->lock);
+
+	return is_idle;
+}
+
+static int mmc_hsq_wait_for_idle(struct mmc_host *mmc)
+{
+	struct mmc_hsq *hsq = mmc->cqe_private;
+	int ret;
+
+	wait_event(hsq->wait_queue,
+		   mmc_hsq_queue_is_idle(hsq, &ret));
+
+	return ret;
+}
+
+static void mmc_hsq_disable(struct mmc_host *mmc)
+{
+	struct mmc_hsq *hsq = mmc->cqe_private;
+	u32 timeout = 500;
+	int ret;
+
+	spin_lock_irq(&hsq->lock);
+
+	if (!hsq->enabled) {
+		spin_unlock_irq(&hsq->lock);
+		return;
+	}
+
+	spin_unlock_irq(&hsq->lock);
+
+	ret = wait_event_timeout(hsq->wait_queue,
+				 mmc_hsq_queue_is_idle(hsq, &ret),
+				 msecs_to_jiffies(timeout));
+	if (ret == 0) {
+		pr_warn("could not stop mmc software queue\n");
+		return;
+	}
+
+	spin_lock_irq(&hsq->lock);
+
+	hsq->enabled = false;
+
+	spin_unlock_irq(&hsq->lock);
+}
+
+static int mmc_hsq_enable(struct mmc_host *mmc, struct mmc_card *card)
+{
+	struct mmc_hsq *hsq = mmc->cqe_private;
+
+	spin_lock_irq(&hsq->lock);
+
+	if (hsq->enabled) {
+		spin_unlock_irq(&hsq->lock);
+		return -EBUSY;
+	}
+
+	hsq->enabled = true;
+
+	spin_unlock_irq(&hsq->lock);
+
+	return 0;
+}
+
+static const struct mmc_cqe_ops mmc_hsq_ops = {
+	.cqe_enable = mmc_hsq_enable,
+	.cqe_disable = mmc_hsq_disable,
+	.cqe_request = mmc_hsq_request,
+	.cqe_post_req = mmc_hsq_post_req,
+	.cqe_wait_for_idle = mmc_hsq_wait_for_idle,
+	.cqe_recovery_start = mmc_hsq_recovery_start,
+	.cqe_recovery_finish = mmc_hsq_recovery_finish,
+};
+
+int mmc_hsq_init(struct mmc_hsq *hsq, struct mmc_host *mmc)
+{
+	hsq->num_slots = HSQ_NUM_SLOTS;
+	hsq->next_tag = HSQ_INVALID_TAG;
+
+	hsq->slot = devm_kcalloc(mmc_dev(mmc), hsq->num_slots,
+				 sizeof(struct hsq_slot), GFP_KERNEL);
+	if (!hsq->slot)
+		return -ENOMEM;
+
+	hsq->mmc = mmc;
+	hsq->mmc->cqe_private = hsq;
+	mmc->cqe_ops = &mmc_hsq_ops;
+
+	INIT_WORK(&hsq->retry_work, mmc_hsq_retry_handler);
+	spin_lock_init(&hsq->lock);
+	init_waitqueue_head(&hsq->wait_queue);
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(mmc_hsq_init);
+
+void mmc_hsq_suspend(struct mmc_host *mmc)
+{
+	mmc_hsq_disable(mmc);
+}
+EXPORT_SYMBOL_GPL(mmc_hsq_suspend);
+
+int mmc_hsq_resume(struct mmc_host *mmc)
+{
+	return mmc_hsq_enable(mmc, NULL);
+}
+EXPORT_SYMBOL_GPL(mmc_hsq_resume);
+
+MODULE_DESCRIPTION("MMC Host Software Queue support");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/mmc/host/mmc_hsq.h b/drivers/mmc/host/mmc_hsq.h
new file mode 100644
index 0000000..ffdd9cd
--- /dev/null
+++ b/drivers/mmc/host/mmc_hsq.h
@@ -0,0 +1,31 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef LINUX_MMC_HSQ_H
+#define LINUX_MMC_HSQ_H
+
+struct hsq_slot {
+	struct mmc_request *mrq;
+};
+
+struct mmc_hsq {
+	struct mmc_host *mmc;
+	struct mmc_request *mrq;
+	wait_queue_head_t wait_queue;
+	struct hsq_slot *slot;
+	spinlock_t lock;
+	struct work_struct retry_work;
+
+	int next_tag;
+	int num_slots;
+	int qcnt;
+
+	bool enabled;
+	bool waiting_for_idle;
+	bool recovery_halt;
+};
+
+int mmc_hsq_init(struct mmc_hsq *hsq, struct mmc_host *mmc);
+void mmc_hsq_suspend(struct mmc_host *mmc);
+int mmc_hsq_resume(struct mmc_host *mmc);
+bool mmc_hsq_finalize_request(struct mmc_host *mmc, struct mmc_request *mrq);
+
+#endif
diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c
index 8bed81c..3c316eb 100644
--- a/drivers/mmc/host/sdhci-msm.c
+++ b/drivers/mmc/host/sdhci-msm.c
@@ -12,9 +12,11 @@
 #include <linux/pm_runtime.h>
 #include <linux/slab.h>
 #include <linux/iopoll.h>
+#include <linux/qcom_scm.h>
 #include <linux/regulator/consumer.h>
 
 #include "sdhci-pltfm.h"
+#include "cqhci.h"
 
 #define CORE_MCI_VERSION		0x50
 #define CORE_VERSION_MAJOR_SHIFT	28
@@ -122,6 +124,10 @@
 #define msm_host_writel(msm_host, val, host, offset) \
 	msm_host->var_ops->msm_writel_relaxed(val, host, offset)
 
+/* CQHCI vendor specific registers */
+#define CQHCI_VENDOR_CFG1	0xA00
+#define CQHCI_VENDOR_DIS_RST_ON_CQ_EN	(0x3 << 13)
+
 struct sdhci_msm_offset {
 	u32 core_hc_mode;
 	u32 core_mci_data_cnt;
@@ -232,10 +238,12 @@ struct sdhci_msm_variant_info {
 struct sdhci_msm_host {
 	struct platform_device *pdev;
 	void __iomem *core_mem;	/* MSM SDCC mapped address */
+	void __iomem *ice_mem;	/* MSM ICE mapped address (if available) */
 	int pwr_irq;		/* power irq */
 	struct clk *bus_clk;	/* SDHC bus voter clock */
 	struct clk *xo_clk;	/* TCXO clk needed for FLL feature of cm_dll*/
-	struct clk_bulk_data bulk_clks[4]; /* core, iface, cal, sleep clocks */
+	/* core, iface, cal, sleep, and ice clocks */
+	struct clk_bulk_data bulk_clks[5];
 	unsigned long clk_rate;
 	struct mmc_host *mmc;
 	bool use_14lpp_dll_reset;
@@ -1589,6 +1597,384 @@ static void sdhci_msm_set_clock(struct sdhci_host *host, unsigned int clock)
 	__sdhci_msm_set_clock(host, clock);
 }
 
+/*****************************************************************************\
+ *                                                                           *
+ * Inline Crypto Engine (ICE) support                                        *
+ *                                                                           *
+\*****************************************************************************/
+
+#ifdef CONFIG_MMC_CRYPTO
+
+#define AES_256_XTS_KEY_SIZE			64
+
+/* QCOM ICE registers */
+
+#define QCOM_ICE_REG_VERSION			0x0008
+
+#define QCOM_ICE_REG_FUSE_SETTING		0x0010
+#define QCOM_ICE_FUSE_SETTING_MASK		0x1
+#define QCOM_ICE_FORCE_HW_KEY0_SETTING_MASK	0x2
+#define QCOM_ICE_FORCE_HW_KEY1_SETTING_MASK	0x4
+
+#define QCOM_ICE_REG_BIST_STATUS		0x0070
+#define QCOM_ICE_BIST_STATUS_MASK		0xF0000000
+
+#define QCOM_ICE_REG_ADVANCED_CONTROL		0x1000
+
+#define sdhci_msm_ice_writel(host, val, reg)	\
+	writel((val), (host)->ice_mem + (reg))
+#define sdhci_msm_ice_readl(host, reg)	\
+	readl((host)->ice_mem + (reg))
+
+static bool sdhci_msm_ice_supported(struct sdhci_msm_host *msm_host)
+{
+	struct device *dev = mmc_dev(msm_host->mmc);
+	u32 regval = sdhci_msm_ice_readl(msm_host, QCOM_ICE_REG_VERSION);
+	int major = regval >> 24;
+	int minor = (regval >> 16) & 0xFF;
+	int step = regval & 0xFFFF;
+
+	/* For now this driver only supports ICE version 3. */
+	if (major != 3) {
+		dev_warn(dev, "Unsupported ICE version: v%d.%d.%d\n",
+			 major, minor, step);
+		return false;
+	}
+
+	dev_info(dev, "Found QC Inline Crypto Engine (ICE) v%d.%d.%d\n",
+		 major, minor, step);
+
+	/* If fuses are blown, ICE might not work in the standard way. */
+	regval = sdhci_msm_ice_readl(msm_host, QCOM_ICE_REG_FUSE_SETTING);
+	if (regval & (QCOM_ICE_FUSE_SETTING_MASK |
+		      QCOM_ICE_FORCE_HW_KEY0_SETTING_MASK |
+		      QCOM_ICE_FORCE_HW_KEY1_SETTING_MASK)) {
+		dev_warn(dev, "Fuses are blown; ICE is unusable!\n");
+		return false;
+	}
+	return true;
+}
+
+static inline struct clk *sdhci_msm_ice_get_clk(struct device *dev)
+{
+	return devm_clk_get(dev, "ice");
+}
+
+static int sdhci_msm_ice_init(struct sdhci_msm_host *msm_host,
+			      struct cqhci_host *cq_host)
+{
+	struct mmc_host *mmc = msm_host->mmc;
+	struct device *dev = mmc_dev(mmc);
+	struct resource *res;
+	int err;
+
+	if (!(cqhci_readl(cq_host, CQHCI_CAP) & CQHCI_CAP_CS))
+		return 0;
+
+	res = platform_get_resource_byname(msm_host->pdev, IORESOURCE_MEM,
+					   "ice");
+	if (!res) {
+		dev_warn(dev, "ICE registers not found\n");
+		goto disable;
+	}
+
+	if (!qcom_scm_ice_available()) {
+		dev_warn(dev, "ICE SCM interface not found\n");
+		goto disable;
+	}
+
+	msm_host->ice_mem = devm_ioremap_resource(dev, res);
+	if (IS_ERR(msm_host->ice_mem)) {
+		err = PTR_ERR(msm_host->ice_mem);
+		dev_err(dev, "Failed to map ICE registers; err=%d\n", err);
+		return err;
+	}
+
+	if (!sdhci_msm_ice_supported(msm_host))
+		goto disable;
+
+	mmc->caps2 |= MMC_CAP2_CRYPTO;
+	return 0;
+
+disable:
+	dev_warn(dev, "Disabling inline encryption support\n");
+	return 0;
+}
+
+static void sdhci_msm_ice_low_power_mode_enable(struct sdhci_msm_host *msm_host)
+{
+	u32 regval;
+
+	regval = sdhci_msm_ice_readl(msm_host, QCOM_ICE_REG_ADVANCED_CONTROL);
+	/*
+	 * Enable low power mode sequence
+	 * [0]-0, [1]-0, [2]-0, [3]-E, [4]-0, [5]-0, [6]-0, [7]-0
+	 */
+	regval |= 0x7000;
+	sdhci_msm_ice_writel(msm_host, regval, QCOM_ICE_REG_ADVANCED_CONTROL);
+}
+
+static void sdhci_msm_ice_optimization_enable(struct sdhci_msm_host *msm_host)
+{
+	u32 regval;
+
+	/* ICE Optimizations Enable Sequence */
+	regval = sdhci_msm_ice_readl(msm_host, QCOM_ICE_REG_ADVANCED_CONTROL);
+	regval |= 0xD807100;
+	/* ICE HPG requires delay before writing */
+	udelay(5);
+	sdhci_msm_ice_writel(msm_host, regval, QCOM_ICE_REG_ADVANCED_CONTROL);
+	udelay(5);
+}
+
+/*
+ * Wait until the ICE BIST (built-in self-test) has completed.
+ *
+ * This may be necessary before ICE can be used.
+ *
+ * Note that we don't really care whether the BIST passed or failed; we really
+ * just want to make sure that it isn't still running.  This is because (a) the
+ * BIST is a FIPS compliance thing that never fails in practice, (b) ICE is
+ * documented to reject crypto requests if the BIST fails, so we needn't do it
+ * in software too, and (c) properly testing storage encryption requires testing
+ * the full storage stack anyway, and not relying on hardware-level self-tests.
+ */
+static int sdhci_msm_ice_wait_bist_status(struct sdhci_msm_host *msm_host)
+{
+	u32 regval;
+	int err;
+
+	err = readl_poll_timeout(msm_host->ice_mem + QCOM_ICE_REG_BIST_STATUS,
+				 regval, !(regval & QCOM_ICE_BIST_STATUS_MASK),
+				 50, 5000);
+	if (err)
+		dev_err(mmc_dev(msm_host->mmc),
+			"Timed out waiting for ICE self-test to complete\n");
+	return err;
+}
+
+static void sdhci_msm_ice_enable(struct sdhci_msm_host *msm_host)
+{
+	if (!(msm_host->mmc->caps2 & MMC_CAP2_CRYPTO))
+		return;
+	sdhci_msm_ice_low_power_mode_enable(msm_host);
+	sdhci_msm_ice_optimization_enable(msm_host);
+	sdhci_msm_ice_wait_bist_status(msm_host);
+}
+
+static int __maybe_unused sdhci_msm_ice_resume(struct sdhci_msm_host *msm_host)
+{
+	if (!(msm_host->mmc->caps2 & MMC_CAP2_CRYPTO))
+		return 0;
+	return sdhci_msm_ice_wait_bist_status(msm_host);
+}
+
+/*
+ * Program a key into a QC ICE keyslot, or evict a keyslot.  QC ICE requires
+ * vendor-specific SCM calls for this; it doesn't support the standard way.
+ */
+static int sdhci_msm_program_key(struct cqhci_host *cq_host,
+				 const union cqhci_crypto_cfg_entry *cfg,
+				 int slot)
+{
+	struct device *dev = mmc_dev(cq_host->mmc);
+	union cqhci_crypto_cap_entry cap;
+	union {
+		u8 bytes[AES_256_XTS_KEY_SIZE];
+		u32 words[AES_256_XTS_KEY_SIZE / sizeof(u32)];
+	} key;
+	int i;
+	int err;
+
+	if (!(cfg->config_enable & CQHCI_CRYPTO_CONFIGURATION_ENABLE))
+		return qcom_scm_ice_invalidate_key(slot);
+
+	/* Only AES-256-XTS has been tested so far. */
+	cap = cq_host->crypto_cap_array[cfg->crypto_cap_idx];
+	if (cap.algorithm_id != CQHCI_CRYPTO_ALG_AES_XTS ||
+	    cap.key_size != CQHCI_CRYPTO_KEY_SIZE_256) {
+		dev_err_ratelimited(dev,
+				    "Unhandled crypto capability; algorithm_id=%d, key_size=%d\n",
+				    cap.algorithm_id, cap.key_size);
+		return -EINVAL;
+	}
+
+	memcpy(key.bytes, cfg->crypto_key, AES_256_XTS_KEY_SIZE);
+
+	/*
+	 * The SCM call byte-swaps the 32-bit words of the key.  So we have to
+	 * do the same, in order for the final key be correct.
+	 */
+	for (i = 0; i < ARRAY_SIZE(key.words); i++)
+		__cpu_to_be32s(&key.words[i]);
+
+	err = qcom_scm_ice_set_key(slot, key.bytes, AES_256_XTS_KEY_SIZE,
+				   QCOM_SCM_ICE_CIPHER_AES_256_XTS,
+				   cfg->data_unit_size);
+	memzero_explicit(&key, sizeof(key));
+	return err;
+}
+#else /* CONFIG_MMC_CRYPTO */
+static inline struct clk *sdhci_msm_ice_get_clk(struct device *dev)
+{
+	return NULL;
+}
+
+static inline int sdhci_msm_ice_init(struct sdhci_msm_host *msm_host,
+				     struct cqhci_host *cq_host)
+{
+	return 0;
+}
+
+static inline void sdhci_msm_ice_enable(struct sdhci_msm_host *msm_host)
+{
+}
+
+static inline int __maybe_unused
+sdhci_msm_ice_resume(struct sdhci_msm_host *msm_host)
+{
+	return 0;
+}
+#endif /* !CONFIG_MMC_CRYPTO */
+
+/*****************************************************************************\
+ *                                                                           *
+ * MSM Command Queue Engine (CQE)                                            *
+ *                                                                           *
+\*****************************************************************************/
+
+static u32 sdhci_msm_cqe_irq(struct sdhci_host *host, u32 intmask)
+{
+	int cmd_error = 0;
+	int data_error = 0;
+
+	if (!sdhci_cqe_irq(host, intmask, &cmd_error, &data_error))
+		return intmask;
+
+	cqhci_irq(host->mmc, intmask, cmd_error, data_error);
+	return 0;
+}
+
+static void sdhci_msm_cqe_enable(struct mmc_host *mmc)
+{
+	struct sdhci_host *host = mmc_priv(mmc);
+	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+	struct sdhci_msm_host *msm_host = sdhci_pltfm_priv(pltfm_host);
+
+	sdhci_cqe_enable(mmc);
+	sdhci_msm_ice_enable(msm_host);
+}
+
+static void sdhci_msm_cqe_disable(struct mmc_host *mmc, bool recovery)
+{
+	struct sdhci_host *host = mmc_priv(mmc);
+	unsigned long flags;
+	u32 ctrl;
+
+	/*
+	 * When CQE is halted, the legacy SDHCI path operates only
+	 * on 16-byte descriptors in 64bit mode.
+	 */
+	if (host->flags & SDHCI_USE_64_BIT_DMA)
+		host->desc_sz = 16;
+
+	spin_lock_irqsave(&host->lock, flags);
+
+	/*
+	 * During CQE command transfers, command complete bit gets latched.
+	 * So s/w should clear command complete interrupt status when CQE is
+	 * either halted or disabled. Otherwise unexpected SDCHI legacy
+	 * interrupt gets triggered when CQE is halted/disabled.
+	 */
+	ctrl = sdhci_readl(host, SDHCI_INT_ENABLE);
+	ctrl |= SDHCI_INT_RESPONSE;
+	sdhci_writel(host,  ctrl, SDHCI_INT_ENABLE);
+	sdhci_writel(host, SDHCI_INT_RESPONSE, SDHCI_INT_STATUS);
+
+	spin_unlock_irqrestore(&host->lock, flags);
+
+	sdhci_cqe_disable(mmc, recovery);
+}
+
+static const struct cqhci_host_ops sdhci_msm_cqhci_ops = {
+	.enable		= sdhci_msm_cqe_enable,
+	.disable	= sdhci_msm_cqe_disable,
+#ifdef CONFIG_MMC_CRYPTO
+	.program_key	= sdhci_msm_program_key,
+#endif
+};
+
+static int sdhci_msm_cqe_add_host(struct sdhci_host *host,
+				struct platform_device *pdev)
+{
+	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+	struct sdhci_msm_host *msm_host = sdhci_pltfm_priv(pltfm_host);
+	struct cqhci_host *cq_host;
+	bool dma64;
+	u32 cqcfg;
+	int ret;
+
+	/*
+	 * When CQE is halted, SDHC operates only on 16byte ADMA descriptors.
+	 * So ensure ADMA table is allocated for 16byte descriptors.
+	 */
+	if (host->caps & SDHCI_CAN_64BIT)
+		host->alloc_desc_sz = 16;
+
+	ret = sdhci_setup_host(host);
+	if (ret)
+		return ret;
+
+	cq_host = cqhci_pltfm_init(pdev);
+	if (IS_ERR(cq_host)) {
+		ret = PTR_ERR(cq_host);
+		dev_err(&pdev->dev, "cqhci-pltfm init: failed: %d\n", ret);
+		goto cleanup;
+	}
+
+	msm_host->mmc->caps2 |= MMC_CAP2_CQE | MMC_CAP2_CQE_DCMD;
+	cq_host->ops = &sdhci_msm_cqhci_ops;
+
+	dma64 = host->flags & SDHCI_USE_64_BIT_DMA;
+
+	ret = sdhci_msm_ice_init(msm_host, cq_host);
+	if (ret)
+		goto cleanup;
+
+	ret = cqhci_init(cq_host, host->mmc, dma64);
+	if (ret) {
+		dev_err(&pdev->dev, "%s: CQE init: failed (%d)\n",
+				mmc_hostname(host->mmc), ret);
+		goto cleanup;
+	}
+
+	/* Disable cqe reset due to cqe enable signal */
+	cqcfg = cqhci_readl(cq_host, CQHCI_VENDOR_CFG1);
+	cqcfg |= CQHCI_VENDOR_DIS_RST_ON_CQ_EN;
+	cqhci_writel(cq_host, cqcfg, CQHCI_VENDOR_CFG1);
+
+	/*
+	 * SDHC expects 12byte ADMA descriptors till CQE is enabled.
+	 * So limit desc_sz to 12 so that the data commands that are sent
+	 * during card initialization (before CQE gets enabled) would
+	 * get executed without any issues.
+	 */
+	if (host->flags & SDHCI_USE_64_BIT_DMA)
+		host->desc_sz = 12;
+
+	ret = __sdhci_add_host(host);
+	if (ret)
+		goto cleanup;
+
+	dev_info(&pdev->dev, "%s: CQE init: success\n",
+			mmc_hostname(host->mmc));
+	return ret;
+
+cleanup:
+	sdhci_cleanup_host(host);
+	return ret;
+}
+
 /*
  * Platform specific register write functions. This is so that, if any
  * register write needs to be followed up by platform specific actions,
@@ -1707,6 +2093,13 @@ static void sdhci_msm_set_regulator_caps(struct sdhci_msm_host *msm_host)
 	pr_debug("%s: supported caps: 0x%08x\n", mmc_hostname(mmc), caps);
 }
 
+static void sdhci_msm_reset(struct sdhci_host *host, u8 mask)
+{
+	if ((host->mmc->caps2 & MMC_CAP2_CQE) && (mask & SDHCI_RESET_ALL))
+		cqhci_deactivate(host->mmc);
+	sdhci_reset(host, mask);
+}
+
 static const struct sdhci_msm_variant_ops mci_var_ops = {
 	.msm_readl_relaxed = sdhci_msm_mci_variant_readl_relaxed,
 	.msm_writel_relaxed = sdhci_msm_mci_variant_writel_relaxed,
@@ -1745,7 +2138,7 @@ static const struct of_device_id sdhci_msm_dt_match[] = {
 MODULE_DEVICE_TABLE(of, sdhci_msm_dt_match);
 
 static const struct sdhci_ops sdhci_msm_ops = {
-	.reset = sdhci_reset,
+	.reset = sdhci_msm_reset,
 	.set_clock = sdhci_msm_set_clock,
 	.get_min_clock = sdhci_msm_get_min_clock,
 	.get_max_clock = sdhci_msm_get_max_clock,
@@ -1753,6 +2146,7 @@ static const struct sdhci_ops sdhci_msm_ops = {
 	.set_uhs_signaling = sdhci_msm_set_uhs_signaling,
 	.write_w = sdhci_msm_writew,
 	.write_b = sdhci_msm_writeb,
+	.irq	= sdhci_msm_cqe_irq,
 };
 
 static const struct sdhci_pltfm_data sdhci_msm_pdata = {
@@ -1778,6 +2172,7 @@ static int sdhci_msm_probe(struct platform_device *pdev)
 	u8 core_major;
 	const struct sdhci_msm_offset *msm_offset;
 	const struct sdhci_msm_variant_info *var_info;
+	struct device_node *node = pdev->dev.of_node;
 
 	host = sdhci_pltfm_init(pdev, &sdhci_msm_pdata, sizeof(*msm_host));
 	if (IS_ERR(host))
@@ -1855,6 +2250,11 @@ static int sdhci_msm_probe(struct platform_device *pdev)
 		clk = NULL;
 	msm_host->bulk_clks[3].clk = clk;
 
+	clk = sdhci_msm_ice_get_clk(&pdev->dev);
+	if (IS_ERR(clk))
+		clk = NULL;
+	msm_host->bulk_clks[4].clk = clk;
+
 	ret = clk_bulk_prepare_enable(ARRAY_SIZE(msm_host->bulk_clks),
 				      msm_host->bulk_clks);
 	if (ret)
@@ -1978,7 +2378,10 @@ static int sdhci_msm_probe(struct platform_device *pdev)
 	pm_runtime_use_autosuspend(&pdev->dev);
 
 	host->mmc_host_ops.execute_tuning = sdhci_msm_execute_tuning;
-	ret = sdhci_add_host(host);
+	if (of_property_read_bool(node, "supports-cqe"))
+		ret = sdhci_msm_cqe_add_host(host, pdev);
+	else
+		ret = sdhci_add_host(host);
 	if (ret)
 		goto pm_runtime_disable;
 	sdhci_msm_set_regulator_caps(msm_host);
@@ -2052,10 +2455,13 @@ static __maybe_unused int sdhci_msm_runtime_resume(struct device *dev)
 	 * Whenever core-clock is gated dynamically, it's needed to
 	 * restore the SDR DLL settings when the clock is ungated.
 	 */
-	if (msm_host->restore_dll_config && msm_host->clk_rate)
-		return sdhci_msm_restore_sdr_dll_config(host);
+	if (msm_host->restore_dll_config && msm_host->clk_rate) {
+		ret = sdhci_msm_restore_sdr_dll_config(host);
+		if (ret)
+			return ret;
+	}
 
-	return 0;
+	return sdhci_msm_ice_resume(msm_host);
 }
 
 static const struct dev_pm_ops sdhci_msm_pm_ops = {
diff --git a/drivers/mmc/host/sdhci-sprd.c b/drivers/mmc/host/sdhci-sprd.c
index d07b979..1f82290 100644
--- a/drivers/mmc/host/sdhci-sprd.c
+++ b/drivers/mmc/host/sdhci-sprd.c
@@ -19,6 +19,7 @@
 #include <linux/slab.h>
 
 #include "sdhci-pltfm.h"
+#include "mmc_hsq.h"
 
 /* SDHCI_ARGUMENT2 register high 16bit */
 #define SDHCI_SPRD_ARG2_STUFF		GENMASK(31, 16)
@@ -379,6 +380,16 @@ static unsigned int sdhci_sprd_get_ro(struct sdhci_host *host)
 	return 0;
 }
 
+static void sdhci_sprd_request_done(struct sdhci_host *host,
+				    struct mmc_request *mrq)
+{
+	/* Validate if the request was from software queue firstly. */
+	if (mmc_hsq_finalize_request(host->mmc, mrq))
+		return;
+
+	 mmc_request_done(host->mmc, mrq);
+}
+
 static struct sdhci_ops sdhci_sprd_ops = {
 	.read_l = sdhci_sprd_readl,
 	.write_l = sdhci_sprd_writel,
@@ -392,9 +403,11 @@ static struct sdhci_ops sdhci_sprd_ops = {
 	.hw_reset = sdhci_sprd_hw_reset,
 	.get_max_timeout_count = sdhci_sprd_get_max_timeout_count,
 	.get_ro = sdhci_sprd_get_ro,
+	.request_done = sdhci_sprd_request_done,
 };
 
-static void sdhci_sprd_request(struct mmc_host *mmc, struct mmc_request *mrq)
+static void sdhci_sprd_check_auto_cmd23(struct mmc_host *mmc,
+					struct mmc_request *mrq)
 {
 	struct sdhci_host *host = mmc_priv(mmc);
 	struct sdhci_sprd_host *sprd_host = TO_SPRD_HOST(host);
@@ -410,10 +423,23 @@ static void sdhci_sprd_request(struct mmc_host *mmc, struct mmc_request *mrq)
 	    mrq->sbc && (mrq->sbc->arg & SDHCI_SPRD_ARG2_STUFF) &&
 	    (host->flags & SDHCI_AUTO_CMD23))
 		host->flags &= ~SDHCI_AUTO_CMD23;
+}
+
+static void sdhci_sprd_request(struct mmc_host *mmc, struct mmc_request *mrq)
+{
+	sdhci_sprd_check_auto_cmd23(mmc, mrq);
 
 	sdhci_request(mmc, mrq);
 }
 
+static int sdhci_sprd_request_atomic(struct mmc_host *mmc,
+				      struct mmc_request *mrq)
+{
+	sdhci_sprd_check_auto_cmd23(mmc, mrq);
+
+	return sdhci_request_atomic(mmc, mrq);
+}
+
 static int sdhci_sprd_voltage_switch(struct mmc_host *mmc, struct mmc_ios *ios)
 {
 	struct sdhci_host *host = mmc_priv(mmc);
@@ -521,6 +547,7 @@ static int sdhci_sprd_probe(struct platform_device *pdev)
 {
 	struct sdhci_host *host;
 	struct sdhci_sprd_host *sprd_host;
+	struct mmc_hsq *hsq;
 	struct clk *clk;
 	int ret = 0;
 
@@ -543,11 +570,17 @@ static int sdhci_sprd_probe(struct platform_device *pdev)
 		sdhci_sprd_voltage_switch;
 
 	host->mmc->caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED |
-		MMC_CAP_ERASE | MMC_CAP_CMD23;
+		MMC_CAP_WAIT_WHILE_BUSY;
+
 	ret = mmc_of_parse(host->mmc);
 	if (ret)
 		goto pltfm_free;
 
+	if (!mmc_card_is_removable(host->mmc))
+		host->mmc_host_ops.request_atomic = sdhci_sprd_request_atomic;
+	else
+		host->always_defer_done = true;
+
 	sprd_host = TO_SPRD_HOST(host);
 	sdhci_sprd_phy_param_parse(sprd_host, pdev->dev.of_node);
 
@@ -631,6 +664,16 @@ static int sdhci_sprd_probe(struct platform_device *pdev)
 
 	sprd_host->flags = host->flags;
 
+	hsq = devm_kzalloc(&pdev->dev, sizeof(*hsq), GFP_KERNEL);
+	if (!hsq) {
+		ret = -ENOMEM;
+		goto err_cleanup_host;
+	}
+
+	ret = mmc_hsq_init(hsq, host->mmc);
+	if (ret)
+		goto err_cleanup_host;
+
 	ret = __sdhci_add_host(host);
 	if (ret)
 		goto err_cleanup_host;
@@ -689,6 +732,7 @@ static int sdhci_sprd_runtime_suspend(struct device *dev)
 	struct sdhci_host *host = dev_get_drvdata(dev);
 	struct sdhci_sprd_host *sprd_host = TO_SPRD_HOST(host);
 
+	mmc_hsq_suspend(host->mmc);
 	sdhci_runtime_suspend_host(host);
 
 	clk_disable_unprepare(sprd_host->clk_sdio);
@@ -717,6 +761,8 @@ static int sdhci_sprd_runtime_resume(struct device *dev)
 		goto clk_disable;
 
 	sdhci_runtime_resume_host(host, 1);
+	mmc_hsq_resume(host->mmc);
+
 	return 0;
 
 clk_disable:
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index a1aeb2e..a7061583 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -46,10 +46,10 @@
 static unsigned int debug_quirks = 0;
 static unsigned int debug_quirks2;
 
-static void sdhci_finish_data(struct sdhci_host *);
-
 static void sdhci_enable_preset_value(struct sdhci_host *host, bool enable);
 
+static bool sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd);
+
 void sdhci_dumpregs(struct sdhci_host *host)
 {
 	SDHCI_DUMP("============ SDHCI REGISTER DUMP ===========\n");
@@ -109,6 +109,9 @@ void sdhci_dumpregs(struct sdhci_host *host)
 		}
 	}
 
+	if (host->ops->dump_vendor_regs)
+		host->ops->dump_vendor_regs(host);
+
 	SDHCI_DUMP("============================================\n");
 }
 EXPORT_SYMBOL_GPL(sdhci_dumpregs);
@@ -1150,13 +1153,25 @@ static inline bool sdhci_auto_cmd12(struct sdhci_host *host,
 	       !mrq->cap_cmd_during_tfr;
 }
 
+static inline bool sdhci_auto_cmd23(struct sdhci_host *host,
+				    struct mmc_request *mrq)
+{
+	return mrq->sbc && (host->flags & SDHCI_AUTO_CMD23);
+}
+
+static inline bool sdhci_manual_cmd23(struct sdhci_host *host,
+				      struct mmc_request *mrq)
+{
+	return mrq->sbc && !(host->flags & SDHCI_AUTO_CMD23);
+}
+
 static inline void sdhci_auto_cmd_select(struct sdhci_host *host,
 					 struct mmc_command *cmd,
 					 u16 *mode)
 {
 	bool use_cmd12 = sdhci_auto_cmd12(host, cmd->mrq) &&
 			 (cmd->opcode != SD_IO_RW_EXTENDED);
-	bool use_cmd23 = cmd->mrq->sbc && (host->flags & SDHCI_AUTO_CMD23);
+	bool use_cmd23 = sdhci_auto_cmd23(host, cmd->mrq);
 	u16 ctrl2;
 
 	/*
@@ -1218,7 +1233,7 @@ static void sdhci_set_transfer_mode(struct sdhci_host *host,
 	if (mmc_op_multi(cmd->opcode) || data->blocks > 1) {
 		mode = SDHCI_TRNS_BLK_CNT_EN | SDHCI_TRNS_MULTI;
 		sdhci_auto_cmd_select(host, cmd, &mode);
-		if (cmd->mrq->sbc && (host->flags & SDHCI_AUTO_CMD23))
+		if (sdhci_auto_cmd23(host, cmd->mrq))
 			sdhci_writel(host, cmd->mrq->sbc->arg, SDHCI_ARGUMENT2);
 	}
 
@@ -1249,6 +1264,9 @@ static void __sdhci_finish_mrq(struct sdhci_host *host, struct mmc_request *mrq)
 	if (host->data_cmd && host->data_cmd->mrq == mrq)
 		host->data_cmd = NULL;
 
+	if (host->deferred_cmd && host->deferred_cmd->mrq == mrq)
+		host->deferred_cmd = NULL;
+
 	if (host->data && host->data->mrq == mrq)
 		host->data = NULL;
 
@@ -1284,7 +1302,7 @@ static void sdhci_finish_mrq(struct sdhci_host *host, struct mmc_request *mrq)
 	queue_work(host->complete_wq, &host->complete_work);
 }
 
-static void sdhci_finish_data(struct sdhci_host *host)
+static void __sdhci_finish_data(struct sdhci_host *host, bool sw_data_timeout)
 {
 	struct mmc_command *data_cmd = host->data_cmd;
 	struct mmc_data *data = host->data;
@@ -1336,14 +1354,31 @@ static void sdhci_finish_data(struct sdhci_host *host)
 		} else {
 			/* Avoid triggering warning in sdhci_send_command() */
 			host->cmd = NULL;
-			sdhci_send_command(host, data->stop);
+			if (!sdhci_send_command(host, data->stop)) {
+				if (sw_data_timeout) {
+					/*
+					 * This is anyway a sw data timeout, so
+					 * give up now.
+					 */
+					data->stop->error = -EIO;
+					__sdhci_finish_mrq(host, data->mrq);
+				} else {
+					WARN_ON(host->deferred_cmd);
+					host->deferred_cmd = data->stop;
+				}
+			}
 		}
 	} else {
 		__sdhci_finish_mrq(host, data->mrq);
 	}
 }
 
-void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
+static void sdhci_finish_data(struct sdhci_host *host)
+{
+	__sdhci_finish_data(host, false);
+}
+
+static bool sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
 {
 	int flags;
 	u32 mask;
@@ -1358,9 +1393,6 @@ void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
 	    cmd->opcode == MMC_STOP_TRANSMISSION)
 		cmd->flags |= MMC_RSP_BUSY;
 
-	/* Wait max 10 ms */
-	timeout = 10;
-
 	mask = SDHCI_CMD_INHIBIT;
 	if (sdhci_data_line_cmd(cmd))
 		mask |= SDHCI_DATA_INHIBIT;
@@ -1370,18 +1402,8 @@ void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
 	if (cmd->mrq->data && (cmd == cmd->mrq->data->stop))
 		mask &= ~SDHCI_DATA_INHIBIT;
 
-	while (sdhci_readl(host, SDHCI_PRESENT_STATE) & mask) {
-		if (timeout == 0) {
-			pr_err("%s: Controller never released inhibit bit(s).\n",
-			       mmc_hostname(host->mmc));
-			sdhci_dumpregs(host);
-			cmd->error = -EIO;
-			sdhci_finish_mrq(host, cmd->mrq);
-			return;
-		}
-		timeout--;
-		mdelay(1);
-	}
+	if (sdhci_readl(host, SDHCI_PRESENT_STATE) & mask)
+		return false;
 
 	host->cmd = cmd;
 	if (sdhci_data_line_cmd(cmd)) {
@@ -1396,11 +1418,13 @@ void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
 	sdhci_set_transfer_mode(host, cmd);
 
 	if ((cmd->flags & MMC_RSP_136) && (cmd->flags & MMC_RSP_BUSY)) {
-		pr_err("%s: Unsupported response type!\n",
-			mmc_hostname(host->mmc));
-		cmd->error = -EINVAL;
-		sdhci_finish_mrq(host, cmd->mrq);
-		return;
+		WARN_ONCE(1, "Unsupported response type!\n");
+		/*
+		 * This does not happen in practice because 136-bit response
+		 * commands never have busy waiting, so rather than complicate
+		 * the error path, just remove busy waiting and continue.
+		 */
+		cmd->flags &= ~MMC_RSP_BUSY;
 	}
 
 	if (!(cmd->flags & MMC_RSP_PRESENT))
@@ -1432,8 +1456,61 @@ void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
 	sdhci_mod_timer(host, cmd->mrq, timeout);
 
 	sdhci_writew(host, SDHCI_MAKE_CMD(cmd->opcode, flags), SDHCI_COMMAND);
+
+	return true;
 }
-EXPORT_SYMBOL_GPL(sdhci_send_command);
+
+static bool sdhci_present_error(struct sdhci_host *host,
+				struct mmc_command *cmd, bool present)
+{
+	if (!present || host->flags & SDHCI_DEVICE_DEAD) {
+		cmd->error = -ENOMEDIUM;
+		return true;
+	}
+
+	return false;
+}
+
+static bool sdhci_send_command_retry(struct sdhci_host *host,
+				     struct mmc_command *cmd,
+				     unsigned long flags)
+	__releases(host->lock)
+	__acquires(host->lock)
+{
+	struct mmc_command *deferred_cmd = host->deferred_cmd;
+	int timeout = 10; /* Approx. 10 ms */
+	bool present;
+
+	while (!sdhci_send_command(host, cmd)) {
+		if (!timeout--) {
+			pr_err("%s: Controller never released inhibit bit(s).\n",
+			       mmc_hostname(host->mmc));
+			sdhci_dumpregs(host);
+			cmd->error = -EIO;
+			return false;
+		}
+
+		spin_unlock_irqrestore(&host->lock, flags);
+
+		usleep_range(1000, 1250);
+
+		present = host->mmc->ops->get_cd(host->mmc);
+
+		spin_lock_irqsave(&host->lock, flags);
+
+		/* A deferred command might disappear, handle that */
+		if (cmd == deferred_cmd && cmd != host->deferred_cmd)
+			return true;
+
+		if (sdhci_present_error(host, cmd, present))
+			return false;
+	}
+
+	if (cmd == host->deferred_cmd)
+		host->deferred_cmd = NULL;
+
+	return true;
+}
 
 static void sdhci_read_rsp_136(struct sdhci_host *host, struct mmc_command *cmd)
 {
@@ -1494,7 +1571,10 @@ static void sdhci_finish_command(struct sdhci_host *host)
 
 	/* Finished CMD23, now send actual command. */
 	if (cmd == cmd->mrq->sbc) {
-		sdhci_send_command(host, cmd->mrq->cmd);
+		if (!sdhci_send_command(host, cmd->mrq->cmd)) {
+			WARN_ON(host->deferred_cmd);
+			host->deferred_cmd = cmd->mrq->cmd;
+		}
 	} else {
 
 		/* Processed actual command. */
@@ -1806,11 +1886,10 @@ EXPORT_SYMBOL_GPL(sdhci_set_power);
 
 void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq)
 {
-	struct sdhci_host *host;
-	int present;
+	struct sdhci_host *host = mmc_priv(mmc);
+	struct mmc_command *cmd;
 	unsigned long flags;
-
-	host = mmc_priv(mmc);
+	bool present;
 
 	/* Firstly check card presence */
 	present = mmc->ops->get_cd(mmc);
@@ -1830,20 +1909,59 @@ void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq)
 		}
 	}
 
-	if (!present || host->flags & SDHCI_DEVICE_DEAD) {
-		mrq->cmd->error = -ENOMEDIUM;
-		sdhci_finish_mrq(host, mrq);
-	} else {
-		if (mrq->sbc && !(host->flags & SDHCI_AUTO_CMD23))
-			sdhci_send_command(host, mrq->sbc);
-		else
-			sdhci_send_command(host, mrq->cmd);
-	}
 
+	if (sdhci_present_error(host, mrq->cmd, present))
+		goto out_finish;
+
+	cmd = sdhci_manual_cmd23(host, mrq) ? mrq->sbc : mrq->cmd;
+
+	if (!sdhci_send_command_retry(host, cmd, flags))
+		goto out_finish;
+
+	spin_unlock_irqrestore(&host->lock, flags);
+
+	return;
+
+out_finish:
+	sdhci_finish_mrq(host, mrq);
 	spin_unlock_irqrestore(&host->lock, flags);
 }
 EXPORT_SYMBOL_GPL(sdhci_request);
 
+int sdhci_request_atomic(struct mmc_host *mmc, struct mmc_request *mrq)
+{
+	struct sdhci_host *host = mmc_priv(mmc);
+	struct mmc_command *cmd;
+	unsigned long flags;
+	int ret = 0;
+
+	spin_lock_irqsave(&host->lock, flags);
+
+	if (sdhci_present_error(host, mrq->cmd, true)) {
+		sdhci_finish_mrq(host, mrq);
+		goto out_finish;
+	}
+
+	cmd = sdhci_manual_cmd23(host, mrq) ? mrq->sbc : mrq->cmd;
+
+	/*
+	 * The HSQ may send a command in interrupt context without polling
+	 * the busy signaling, which means we should return BUSY if controller
+	 * has not released inhibit bits to allow HSQ trying to send request
+	 * again in non-atomic context. So we should not finish this request
+	 * here.
+	 */
+	if (!sdhci_send_command(host, cmd))
+		ret = -EBUSY;
+	else
+		sdhci_led_activate(host);
+
+out_finish:
+	spin_unlock_irqrestore(&host->lock, flags);
+	return ret;
+}
+EXPORT_SYMBOL_GPL(sdhci_request_atomic);
+
 void sdhci_set_bus_width(struct sdhci_host *host, int width)
 {
 	u8 ctrl;
@@ -2380,7 +2498,11 @@ void sdhci_send_tuning(struct sdhci_host *host, u32 opcode)
 	 */
 	sdhci_writew(host, SDHCI_TRNS_READ, SDHCI_TRANSFER_MODE);
 
-	sdhci_send_command(host, &cmd);
+	if (!sdhci_send_command_retry(host, &cmd, flags)) {
+		spin_unlock_irqrestore(&host->lock, flags);
+		host->tuning_done = 0;
+		return;
+	}
 
 	host->cmd = NULL;
 
@@ -2732,7 +2854,10 @@ static bool sdhci_request_done(struct sdhci_host *host)
 
 	spin_unlock_irqrestore(&host->lock, flags);
 
-	mmc_request_done(host->mmc, mrq);
+	if (host->ops->request_done)
+		host->ops->request_done(host, mrq);
+	else
+		mmc_request_done(host->mmc, mrq);
 
 	return false;
 }
@@ -2784,7 +2909,7 @@ static void sdhci_timeout_data_timer(struct timer_list *t)
 
 		if (host->data) {
 			host->data->error = -ETIMEDOUT;
-			sdhci_finish_data(host);
+			__sdhci_finish_data(host, true);
 			queue_work(host->complete_wq, &host->complete_work);
 		} else if (host->data_cmd) {
 			host->data_cmd->error = -ETIMEDOUT;
@@ -3035,7 +3160,7 @@ static inline bool sdhci_defer_done(struct sdhci_host *host,
 {
 	struct mmc_data *data = mrq->data;
 
-	return host->pending_reset ||
+	return host->pending_reset || host->always_defer_done ||
 	       ((host->flags & SDHCI_REQ_USE_DMA) && data &&
 		data->host_cookie == COOKIE_MAPPED);
 }
@@ -3156,11 +3281,19 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id)
 		}
 	}
 out:
+	if (host->deferred_cmd)
+		result = IRQ_WAKE_THREAD;
+
 	spin_unlock(&host->lock);
 
 	/* Process mrqs ready for immediate completion */
 	for (i = 0; i < SDHCI_MAX_MRQS; i++) {
-		if (mrqs_done[i])
+		if (!mrqs_done[i])
+			continue;
+
+		if (host->ops->request_done)
+			host->ops->request_done(host, mrqs_done[i]);
+		else
 			mmc_request_done(host->mmc, mrqs_done[i]);
 	}
 
@@ -3176,6 +3309,7 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id)
 static irqreturn_t sdhci_thread_irq(int irq, void *dev_id)
 {
 	struct sdhci_host *host = dev_id;
+	struct mmc_command *cmd;
 	unsigned long flags;
 	u32 isr;
 
@@ -3183,8 +3317,14 @@ static irqreturn_t sdhci_thread_irq(int irq, void *dev_id)
 		;
 
 	spin_lock_irqsave(&host->lock, flags);
+
 	isr = host->thread_isr;
 	host->thread_isr = 0;
+
+	cmd = host->deferred_cmd;
+	if (cmd && !sdhci_send_command_retry(host, cmd, flags))
+		sdhci_finish_mrq(host, cmd->mrq);
+
 	spin_unlock_irqrestore(&host->lock, flags);
 
 	if (isr & (SDHCI_INT_CARD_INSERT | SDHCI_INT_CARD_REMOVE)) {
@@ -3761,9 +3901,6 @@ int sdhci_setup_host(struct sdhci_host *host)
 		       mmc_hostname(mmc), host->version);
 	}
 
-	if (host->quirks & SDHCI_QUIRK_BROKEN_CQE)
-		mmc->caps2 &= ~MMC_CAP2_CQE;
-
 	if (host->quirks & SDHCI_QUIRK_FORCE_DMA)
 		host->flags |= SDHCI_USE_SDMA;
 	else if (!(host->caps & SDHCI_CAN_DO_SDMA))
@@ -3816,15 +3953,13 @@ int sdhci_setup_host(struct sdhci_host *host)
 		dma_addr_t dma;
 		void *buf;
 
-		if (host->flags & SDHCI_USE_64_BIT_DMA) {
-			host->adma_table_sz = host->adma_table_cnt *
-					      SDHCI_ADMA2_64_DESC_SZ(host);
-			host->desc_sz = SDHCI_ADMA2_64_DESC_SZ(host);
-		} else {
-			host->adma_table_sz = host->adma_table_cnt *
-					      SDHCI_ADMA2_32_DESC_SZ;
-			host->desc_sz = SDHCI_ADMA2_32_DESC_SZ;
-		}
+		if (!(host->flags & SDHCI_USE_64_BIT_DMA))
+			host->alloc_desc_sz = SDHCI_ADMA2_32_DESC_SZ;
+		else if (!host->alloc_desc_sz)
+			host->alloc_desc_sz = SDHCI_ADMA2_64_DESC_SZ(host);
+
+		host->desc_sz = host->alloc_desc_sz;
+		host->adma_table_sz = host->adma_table_cnt * host->desc_sz;
 
 		host->align_buffer_sz = SDHCI_MAX_SEGS * SDHCI_ADMA2_ALIGN;
 		/*
@@ -4283,6 +4418,12 @@ int __sdhci_add_host(struct sdhci_host *host)
 	struct mmc_host *mmc = host->mmc;
 	int ret;
 
+	if ((mmc->caps2 & MMC_CAP2_CQE) &&
+	    (host->quirks & SDHCI_QUIRK_BROKEN_CQE)) {
+		mmc->caps2 &= ~MMC_CAP2_CQE;
+		mmc->cqe_ops = NULL;
+	}
+
 	host->complete_wq = alloc_workqueue("sdhci", flags, 0);
 	if (!host->complete_wq)
 		return -ENOMEM;
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index 76e6928..6f4eba4 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -535,10 +535,12 @@ struct sdhci_host {
 	bool pending_reset;	/* Cmd/data reset is pending */
 	bool irq_wake_enabled;	/* IRQ wakeup is enabled */
 	bool v4_mode;		/* Host Version 4 Enable */
+	bool always_defer_done;	/* Always defer to complete requests */
 
 	struct mmc_request *mrqs_done[SDHCI_MAX_MRQS];	/* Requests done */
 	struct mmc_command *cmd;	/* Current command */
 	struct mmc_command *data_cmd;	/* Current data command */
+	struct mmc_command *deferred_cmd;	/* Deferred command */
 	struct mmc_data *data;	/* Current data request */
 	unsigned int data_early:1;	/* Data finished before cmd */
 
@@ -556,7 +558,8 @@ struct sdhci_host {
 	dma_addr_t adma_addr;	/* Mapped ADMA descr. table */
 	dma_addr_t align_addr;	/* Mapped bounce buffer */
 
-	unsigned int desc_sz;	/* ADMA descriptor size */
+	unsigned int desc_sz;	/* ADMA current descriptor size */
+	unsigned int alloc_desc_sz;	/* ADMA descr. max size host supports */
 
 	struct workqueue_struct *complete_wq;	/* Request completion wq */
 	struct work_struct	complete_work;	/* Request completion work */
@@ -646,6 +649,9 @@ struct sdhci_ops {
 	void	(*voltage_switch)(struct sdhci_host *host);
 	void	(*adma_write_desc)(struct sdhci_host *host, void **desc,
 				   dma_addr_t addr, int len, unsigned int cmd);
+	void	(*request_done)(struct sdhci_host *host,
+				struct mmc_request *mrq);
+	void    (*dump_vendor_regs)(struct sdhci_host *host);
 };
 
 #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS
@@ -748,7 +754,6 @@ void sdhci_cleanup_host(struct sdhci_host *host);
 int __sdhci_add_host(struct sdhci_host *host);
 int sdhci_add_host(struct sdhci_host *host);
 void sdhci_remove_host(struct sdhci_host *host, int dead);
-void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd);
 
 static inline void sdhci_read_caps(struct sdhci_host *host)
 {
@@ -764,6 +769,7 @@ void sdhci_set_power(struct sdhci_host *host, unsigned char mode,
 void sdhci_set_power_noreg(struct sdhci_host *host, unsigned char mode,
 			   unsigned short vdd);
 void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq);
+int sdhci_request_atomic(struct mmc_host *mmc, struct mmc_request *mrq);
 void sdhci_set_bus_width(struct sdhci_host *host, int width);
 void sdhci_reset(struct sdhci_host *host, u8 mask);
 void sdhci_set_uhs_signaling(struct sdhci_host *host, unsigned timing);
diff --git a/drivers/mtd/nand/onenand/Makefile b/drivers/mtd/nand/onenand/Makefile
index f8b624a..a27b635 100644
--- a/drivers/mtd/nand/onenand/Makefile
+++ b/drivers/mtd/nand/onenand/Makefile
@@ -9,6 +9,6 @@
 # Board specific.
 obj-$(CONFIG_MTD_ONENAND_GENERIC)	+= generic.o
 obj-$(CONFIG_MTD_ONENAND_OMAP2)		+= omap2.o
-obj-$(CONFIG_MTD_ONENAND_SAMSUNG)       += samsung.o
+obj-$(CONFIG_MTD_ONENAND_SAMSUNG)       += samsung_mtd.o
 
 onenand-objs = onenand_base.o onenand_bbt.o
diff --git a/drivers/mtd/nand/onenand/samsung.c b/drivers/mtd/nand/onenand/samsung_mtd.c
similarity index 100%
rename from drivers/mtd/nand/onenand/samsung.c
rename to drivers/mtd/nand/onenand/samsung_mtd.c
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index df3cd25..cdb47f4 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -71,6 +71,50 @@
 	  To compile this driver as a module, choose M here: the module
 	  will be called dummy.
 
+config WIREGUARD
+	tristate "WireGuard secure network tunnel"
+	depends on NET && INET
+	depends on IPV6 || !IPV6
+	select NET_UDP_TUNNEL
+	select DST_CACHE
+	select CRYPTO
+	select CRYPTO_LIB_CURVE25519
+	select CRYPTO_LIB_CHACHA20POLY1305
+	select CRYPTO_LIB_BLAKE2S
+	select CRYPTO_CHACHA20_X86_64 if X86 && 64BIT
+	select CRYPTO_POLY1305_X86_64 if X86 && 64BIT
+	select CRYPTO_BLAKE2S_X86 if X86 && 64BIT
+	select CRYPTO_CURVE25519_X86 if X86 && 64BIT
+	select ARM_CRYPTO if ARM
+	select ARM64_CRYPTO if ARM64
+	select CRYPTO_CHACHA20_NEON if (ARM || ARM64) && KERNEL_MODE_NEON
+	select CRYPTO_POLY1305_NEON if ARM64 && KERNEL_MODE_NEON
+	select CRYPTO_POLY1305_ARM if ARM
+	select CRYPTO_BLAKE2S_ARM if ARM
+	select CRYPTO_CURVE25519_NEON if ARM && KERNEL_MODE_NEON
+	select CRYPTO_CHACHA_MIPS if CPU_MIPS32_R2
+	select CRYPTO_POLY1305_MIPS if CPU_MIPS32 || (CPU_MIPS64 && 64BIT)
+	help
+	  WireGuard is a secure, fast, and easy to use replacement for IPSec
+	  that uses modern cryptography and clever networking tricks. It's
+	  designed to be fairly general purpose and abstract enough to fit most
+	  use cases, while at the same time remaining extremely simple to
+	  configure. See www.wireguard.com for more info.
+
+	  It's safe to say Y or M here, as the driver is very lightweight and
+	  is only in use when an administrator chooses to add an interface.
+
+config WIREGUARD_DEBUG
+	bool "Debugging checks and verbose messages"
+	depends on WIREGUARD
+	help
+	  This will write log messages for handshake and other events
+	  that occur for a WireGuard interface. It will also perform some
+	  extra validation checks and unit tests at various points. This is
+	  only useful for debugging.
+
+	  Say N here unless you know what you're doing.
+
 config EQUALIZER
 	tristate "EQL (serial line load balancing) support"
 	---help---
diff --git a/drivers/net/Makefile b/drivers/net/Makefile
index 0d3ba05..953b7c1 100644
--- a/drivers/net/Makefile
+++ b/drivers/net/Makefile
@@ -10,6 +10,7 @@
 obj-$(CONFIG_IPVLAN) += ipvlan/
 obj-$(CONFIG_IPVTAP) += ipvlan/
 obj-$(CONFIG_DUMMY) += dummy.o
+obj-$(CONFIG_WIREGUARD) += wireguard/
 obj-$(CONFIG_EQUALIZER) += eql.o
 obj-$(CONFIG_IFB) += ifb.o
 obj-$(CONFIG_MACSEC) += macsec.o
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
index dde05e2..30e511c 100644
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -1573,6 +1573,13 @@ static void usbnet_bh (struct timer_list *t)
 	}
 }
 
+static void usbnet_bh_tasklet(unsigned long data)
+{
+	struct timer_list *t = (struct timer_list *)data;
+
+	usbnet_bh(t);
+}
+
 
 /*-------------------------------------------------------------------------
  *
@@ -1700,7 +1707,7 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
 	skb_queue_head_init (&dev->txq);
 	skb_queue_head_init (&dev->done);
 	skb_queue_head_init(&dev->rxq_pause);
-	dev->bh.func = (void (*)(unsigned long))usbnet_bh;
+	dev->bh.func = usbnet_bh_tasklet;
 	dev->bh.data = (unsigned long)&dev->delay;
 	INIT_WORK (&dev->kevent, usbnet_deferred_kevent);
 	init_usb_anchor(&dev->deferred);
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 0ef8581..707d8c7 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -2572,6 +2572,9 @@ static int virtnet_set_features(struct net_device *dev,
 	u64 offloads;
 	int err;
 
+	if (!vi->has_cvq)
+		return 0;
+
 	if ((dev->features ^ features) & NETIF_F_LRO) {
 		if (vi->xdp_queue_pairs)
 			return -EBUSY;
diff --git a/drivers/net/wireguard/Makefile b/drivers/net/wireguard/Makefile
new file mode 100644
index 0000000..fc52b2c
--- /dev/null
+++ b/drivers/net/wireguard/Makefile
@@ -0,0 +1,18 @@
+ccflags-y := -O3
+ccflags-y += -D'pr_fmt(fmt)=KBUILD_MODNAME ": " fmt'
+ccflags-$(CONFIG_WIREGUARD_DEBUG) += -DDEBUG
+wireguard-y := main.o
+wireguard-y += noise.o
+wireguard-y += device.o
+wireguard-y += peer.o
+wireguard-y += timers.o
+wireguard-y += queueing.o
+wireguard-y += send.o
+wireguard-y += receive.o
+wireguard-y += socket.o
+wireguard-y += peerlookup.o
+wireguard-y += allowedips.o
+wireguard-y += ratelimiter.o
+wireguard-y += cookie.o
+wireguard-y += netlink.o
+obj-$(CONFIG_WIREGUARD) := wireguard.o
diff --git a/drivers/net/wireguard/allowedips.c b/drivers/net/wireguard/allowedips.c
new file mode 100644
index 0000000..3725e9c
--- /dev/null
+++ b/drivers/net/wireguard/allowedips.c
@@ -0,0 +1,377 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "allowedips.h"
+#include "peer.h"
+
+static void swap_endian(u8 *dst, const u8 *src, u8 bits)
+{
+	if (bits == 32) {
+		*(u32 *)dst = be32_to_cpu(*(const __be32 *)src);
+	} else if (bits == 128) {
+		((u64 *)dst)[0] = be64_to_cpu(((const __be64 *)src)[0]);
+		((u64 *)dst)[1] = be64_to_cpu(((const __be64 *)src)[1]);
+	}
+}
+
+static void copy_and_assign_cidr(struct allowedips_node *node, const u8 *src,
+				 u8 cidr, u8 bits)
+{
+	node->cidr = cidr;
+	node->bit_at_a = cidr / 8U;
+#ifdef __LITTLE_ENDIAN
+	node->bit_at_a ^= (bits / 8U - 1U) % 8U;
+#endif
+	node->bit_at_b = 7U - (cidr % 8U);
+	node->bitlen = bits;
+	memcpy(node->bits, src, bits / 8U);
+}
+#define CHOOSE_NODE(parent, key) \
+	parent->bit[(key[parent->bit_at_a] >> parent->bit_at_b) & 1]
+
+static void push_rcu(struct allowedips_node **stack,
+		     struct allowedips_node __rcu *p, unsigned int *len)
+{
+	if (rcu_access_pointer(p)) {
+		WARN_ON(IS_ENABLED(DEBUG) && *len >= 128);
+		stack[(*len)++] = rcu_dereference_raw(p);
+	}
+}
+
+static void root_free_rcu(struct rcu_head *rcu)
+{
+	struct allowedips_node *node, *stack[128] = {
+		container_of(rcu, struct allowedips_node, rcu) };
+	unsigned int len = 1;
+
+	while (len > 0 && (node = stack[--len])) {
+		push_rcu(stack, node->bit[0], &len);
+		push_rcu(stack, node->bit[1], &len);
+		kfree(node);
+	}
+}
+
+static void root_remove_peer_lists(struct allowedips_node *root)
+{
+	struct allowedips_node *node, *stack[128] = { root };
+	unsigned int len = 1;
+
+	while (len > 0 && (node = stack[--len])) {
+		push_rcu(stack, node->bit[0], &len);
+		push_rcu(stack, node->bit[1], &len);
+		if (rcu_access_pointer(node->peer))
+			list_del(&node->peer_list);
+	}
+}
+
+static void walk_remove_by_peer(struct allowedips_node __rcu **top,
+				struct wg_peer *peer, struct mutex *lock)
+{
+#define REF(p) rcu_access_pointer(p)
+#define DEREF(p) rcu_dereference_protected(*(p), lockdep_is_held(lock))
+#define PUSH(p) ({                                                             \
+		WARN_ON(IS_ENABLED(DEBUG) && len >= 128);                      \
+		stack[len++] = p;                                              \
+	})
+
+	struct allowedips_node __rcu **stack[128], **nptr;
+	struct allowedips_node *node, *prev;
+	unsigned int len;
+
+	if (unlikely(!peer || !REF(*top)))
+		return;
+
+	for (prev = NULL, len = 0, PUSH(top); len > 0; prev = node) {
+		nptr = stack[len - 1];
+		node = DEREF(nptr);
+		if (!node) {
+			--len;
+			continue;
+		}
+		if (!prev || REF(prev->bit[0]) == node ||
+		    REF(prev->bit[1]) == node) {
+			if (REF(node->bit[0]))
+				PUSH(&node->bit[0]);
+			else if (REF(node->bit[1]))
+				PUSH(&node->bit[1]);
+		} else if (REF(node->bit[0]) == prev) {
+			if (REF(node->bit[1]))
+				PUSH(&node->bit[1]);
+		} else {
+			if (rcu_dereference_protected(node->peer,
+				lockdep_is_held(lock)) == peer) {
+				RCU_INIT_POINTER(node->peer, NULL);
+				list_del_init(&node->peer_list);
+				if (!node->bit[0] || !node->bit[1]) {
+					rcu_assign_pointer(*nptr, DEREF(
+					       &node->bit[!REF(node->bit[0])]));
+					kfree_rcu(node, rcu);
+					node = DEREF(nptr);
+				}
+			}
+			--len;
+		}
+	}
+
+#undef REF
+#undef DEREF
+#undef PUSH
+}
+
+static unsigned int fls128(u64 a, u64 b)
+{
+	return a ? fls64(a) + 64U : fls64(b);
+}
+
+static u8 common_bits(const struct allowedips_node *node, const u8 *key,
+		      u8 bits)
+{
+	if (bits == 32)
+		return 32U - fls(*(const u32 *)node->bits ^ *(const u32 *)key);
+	else if (bits == 128)
+		return 128U - fls128(
+			*(const u64 *)&node->bits[0] ^ *(const u64 *)&key[0],
+			*(const u64 *)&node->bits[8] ^ *(const u64 *)&key[8]);
+	return 0;
+}
+
+static bool prefix_matches(const struct allowedips_node *node, const u8 *key,
+			   u8 bits)
+{
+	/* This could be much faster if it actually just compared the common
+	 * bits properly, by precomputing a mask bswap(~0 << (32 - cidr)), and
+	 * the rest, but it turns out that common_bits is already super fast on
+	 * modern processors, even taking into account the unfortunate bswap.
+	 * So, we just inline it like this instead.
+	 */
+	return common_bits(node, key, bits) >= node->cidr;
+}
+
+static struct allowedips_node *find_node(struct allowedips_node *trie, u8 bits,
+					 const u8 *key)
+{
+	struct allowedips_node *node = trie, *found = NULL;
+
+	while (node && prefix_matches(node, key, bits)) {
+		if (rcu_access_pointer(node->peer))
+			found = node;
+		if (node->cidr == bits)
+			break;
+		node = rcu_dereference_bh(CHOOSE_NODE(node, key));
+	}
+	return found;
+}
+
+/* Returns a strong reference to a peer */
+static struct wg_peer *lookup(struct allowedips_node __rcu *root, u8 bits,
+			      const void *be_ip)
+{
+	/* Aligned so it can be passed to fls/fls64 */
+	u8 ip[16] __aligned(__alignof(u64));
+	struct allowedips_node *node;
+	struct wg_peer *peer = NULL;
+
+	swap_endian(ip, be_ip, bits);
+
+	rcu_read_lock_bh();
+retry:
+	node = find_node(rcu_dereference_bh(root), bits, ip);
+	if (node) {
+		peer = wg_peer_get_maybe_zero(rcu_dereference_bh(node->peer));
+		if (!peer)
+			goto retry;
+	}
+	rcu_read_unlock_bh();
+	return peer;
+}
+
+static bool node_placement(struct allowedips_node __rcu *trie, const u8 *key,
+			   u8 cidr, u8 bits, struct allowedips_node **rnode,
+			   struct mutex *lock)
+{
+	struct allowedips_node *node = rcu_dereference_protected(trie,
+						lockdep_is_held(lock));
+	struct allowedips_node *parent = NULL;
+	bool exact = false;
+
+	while (node && node->cidr <= cidr && prefix_matches(node, key, bits)) {
+		parent = node;
+		if (parent->cidr == cidr) {
+			exact = true;
+			break;
+		}
+		node = rcu_dereference_protected(CHOOSE_NODE(parent, key),
+						 lockdep_is_held(lock));
+	}
+	*rnode = parent;
+	return exact;
+}
+
+static int add(struct allowedips_node __rcu **trie, u8 bits, const u8 *key,
+	       u8 cidr, struct wg_peer *peer, struct mutex *lock)
+{
+	struct allowedips_node *node, *parent, *down, *newnode;
+
+	if (unlikely(cidr > bits || !peer))
+		return -EINVAL;
+
+	if (!rcu_access_pointer(*trie)) {
+		node = kzalloc(sizeof(*node), GFP_KERNEL);
+		if (unlikely(!node))
+			return -ENOMEM;
+		RCU_INIT_POINTER(node->peer, peer);
+		list_add_tail(&node->peer_list, &peer->allowedips_list);
+		copy_and_assign_cidr(node, key, cidr, bits);
+		rcu_assign_pointer(*trie, node);
+		return 0;
+	}
+	if (node_placement(*trie, key, cidr, bits, &node, lock)) {
+		rcu_assign_pointer(node->peer, peer);
+		list_move_tail(&node->peer_list, &peer->allowedips_list);
+		return 0;
+	}
+
+	newnode = kzalloc(sizeof(*newnode), GFP_KERNEL);
+	if (unlikely(!newnode))
+		return -ENOMEM;
+	RCU_INIT_POINTER(newnode->peer, peer);
+	list_add_tail(&newnode->peer_list, &peer->allowedips_list);
+	copy_and_assign_cidr(newnode, key, cidr, bits);
+
+	if (!node) {
+		down = rcu_dereference_protected(*trie, lockdep_is_held(lock));
+	} else {
+		down = rcu_dereference_protected(CHOOSE_NODE(node, key),
+						 lockdep_is_held(lock));
+		if (!down) {
+			rcu_assign_pointer(CHOOSE_NODE(node, key), newnode);
+			return 0;
+		}
+	}
+	cidr = min(cidr, common_bits(down, key, bits));
+	parent = node;
+
+	if (newnode->cidr == cidr) {
+		rcu_assign_pointer(CHOOSE_NODE(newnode, down->bits), down);
+		if (!parent)
+			rcu_assign_pointer(*trie, newnode);
+		else
+			rcu_assign_pointer(CHOOSE_NODE(parent, newnode->bits),
+					   newnode);
+	} else {
+		node = kzalloc(sizeof(*node), GFP_KERNEL);
+		if (unlikely(!node)) {
+			list_del(&newnode->peer_list);
+			kfree(newnode);
+			return -ENOMEM;
+		}
+		INIT_LIST_HEAD(&node->peer_list);
+		copy_and_assign_cidr(node, newnode->bits, cidr, bits);
+
+		rcu_assign_pointer(CHOOSE_NODE(node, down->bits), down);
+		rcu_assign_pointer(CHOOSE_NODE(node, newnode->bits), newnode);
+		if (!parent)
+			rcu_assign_pointer(*trie, node);
+		else
+			rcu_assign_pointer(CHOOSE_NODE(parent, node->bits),
+					   node);
+	}
+	return 0;
+}
+
+void wg_allowedips_init(struct allowedips *table)
+{
+	table->root4 = table->root6 = NULL;
+	table->seq = 1;
+}
+
+void wg_allowedips_free(struct allowedips *table, struct mutex *lock)
+{
+	struct allowedips_node __rcu *old4 = table->root4, *old6 = table->root6;
+
+	++table->seq;
+	RCU_INIT_POINTER(table->root4, NULL);
+	RCU_INIT_POINTER(table->root6, NULL);
+	if (rcu_access_pointer(old4)) {
+		struct allowedips_node *node = rcu_dereference_protected(old4,
+							lockdep_is_held(lock));
+
+		root_remove_peer_lists(node);
+		call_rcu(&node->rcu, root_free_rcu);
+	}
+	if (rcu_access_pointer(old6)) {
+		struct allowedips_node *node = rcu_dereference_protected(old6,
+							lockdep_is_held(lock));
+
+		root_remove_peer_lists(node);
+		call_rcu(&node->rcu, root_free_rcu);
+	}
+}
+
+int wg_allowedips_insert_v4(struct allowedips *table, const struct in_addr *ip,
+			    u8 cidr, struct wg_peer *peer, struct mutex *lock)
+{
+	/* Aligned so it can be passed to fls */
+	u8 key[4] __aligned(__alignof(u32));
+
+	++table->seq;
+	swap_endian(key, (const u8 *)ip, 32);
+	return add(&table->root4, 32, key, cidr, peer, lock);
+}
+
+int wg_allowedips_insert_v6(struct allowedips *table, const struct in6_addr *ip,
+			    u8 cidr, struct wg_peer *peer, struct mutex *lock)
+{
+	/* Aligned so it can be passed to fls64 */
+	u8 key[16] __aligned(__alignof(u64));
+
+	++table->seq;
+	swap_endian(key, (const u8 *)ip, 128);
+	return add(&table->root6, 128, key, cidr, peer, lock);
+}
+
+void wg_allowedips_remove_by_peer(struct allowedips *table,
+				  struct wg_peer *peer, struct mutex *lock)
+{
+	++table->seq;
+	walk_remove_by_peer(&table->root4, peer, lock);
+	walk_remove_by_peer(&table->root6, peer, lock);
+}
+
+int wg_allowedips_read_node(struct allowedips_node *node, u8 ip[16], u8 *cidr)
+{
+	const unsigned int cidr_bytes = DIV_ROUND_UP(node->cidr, 8U);
+	swap_endian(ip, node->bits, node->bitlen);
+	memset(ip + cidr_bytes, 0, node->bitlen / 8U - cidr_bytes);
+	if (node->cidr)
+		ip[cidr_bytes - 1U] &= ~0U << (-node->cidr % 8U);
+
+	*cidr = node->cidr;
+	return node->bitlen == 32 ? AF_INET : AF_INET6;
+}
+
+/* Returns a strong reference to a peer */
+struct wg_peer *wg_allowedips_lookup_dst(struct allowedips *table,
+					 struct sk_buff *skb)
+{
+	if (skb->protocol == htons(ETH_P_IP))
+		return lookup(table->root4, 32, &ip_hdr(skb)->daddr);
+	else if (skb->protocol == htons(ETH_P_IPV6))
+		return lookup(table->root6, 128, &ipv6_hdr(skb)->daddr);
+	return NULL;
+}
+
+/* Returns a strong reference to a peer */
+struct wg_peer *wg_allowedips_lookup_src(struct allowedips *table,
+					 struct sk_buff *skb)
+{
+	if (skb->protocol == htons(ETH_P_IP))
+		return lookup(table->root4, 32, &ip_hdr(skb)->saddr);
+	else if (skb->protocol == htons(ETH_P_IPV6))
+		return lookup(table->root6, 128, &ipv6_hdr(skb)->saddr);
+	return NULL;
+}
+
+#include "selftest/allowedips.c"
diff --git a/drivers/net/wireguard/allowedips.h b/drivers/net/wireguard/allowedips.h
new file mode 100644
index 0000000..e5c83ca
--- /dev/null
+++ b/drivers/net/wireguard/allowedips.h
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_ALLOWEDIPS_H
+#define _WG_ALLOWEDIPS_H
+
+#include <linux/mutex.h>
+#include <linux/ip.h>
+#include <linux/ipv6.h>
+
+struct wg_peer;
+
+struct allowedips_node {
+	struct wg_peer __rcu *peer;
+	struct allowedips_node __rcu *bit[2];
+	/* While it may seem scandalous that we waste space for v4,
+	 * we're alloc'ing to the nearest power of 2 anyway, so this
+	 * doesn't actually make a difference.
+	 */
+	u8 bits[16] __aligned(__alignof(u64));
+	u8 cidr, bit_at_a, bit_at_b, bitlen;
+
+	/* Keep rarely used list at bottom to be beyond cache line. */
+	union {
+		struct list_head peer_list;
+		struct rcu_head rcu;
+	};
+};
+
+struct allowedips {
+	struct allowedips_node __rcu *root4;
+	struct allowedips_node __rcu *root6;
+	u64 seq;
+};
+
+void wg_allowedips_init(struct allowedips *table);
+void wg_allowedips_free(struct allowedips *table, struct mutex *mutex);
+int wg_allowedips_insert_v4(struct allowedips *table, const struct in_addr *ip,
+			    u8 cidr, struct wg_peer *peer, struct mutex *lock);
+int wg_allowedips_insert_v6(struct allowedips *table, const struct in6_addr *ip,
+			    u8 cidr, struct wg_peer *peer, struct mutex *lock);
+void wg_allowedips_remove_by_peer(struct allowedips *table,
+				  struct wg_peer *peer, struct mutex *lock);
+/* The ip input pointer should be __aligned(__alignof(u64))) */
+int wg_allowedips_read_node(struct allowedips_node *node, u8 ip[16], u8 *cidr);
+
+/* These return a strong reference to a peer: */
+struct wg_peer *wg_allowedips_lookup_dst(struct allowedips *table,
+					 struct sk_buff *skb);
+struct wg_peer *wg_allowedips_lookup_src(struct allowedips *table,
+					 struct sk_buff *skb);
+
+#ifdef DEBUG
+bool wg_allowedips_selftest(void);
+#endif
+
+#endif /* _WG_ALLOWEDIPS_H */
diff --git a/drivers/net/wireguard/cookie.c b/drivers/net/wireguard/cookie.c
new file mode 100644
index 0000000..4956f04
--- /dev/null
+++ b/drivers/net/wireguard/cookie.c
@@ -0,0 +1,236 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "cookie.h"
+#include "peer.h"
+#include "device.h"
+#include "messages.h"
+#include "ratelimiter.h"
+#include "timers.h"
+
+#include <crypto/blake2s.h>
+#include <crypto/chacha20poly1305.h>
+
+#include <net/ipv6.h>
+#include <crypto/algapi.h>
+
+void wg_cookie_checker_init(struct cookie_checker *checker,
+			    struct wg_device *wg)
+{
+	init_rwsem(&checker->secret_lock);
+	checker->secret_birthdate = ktime_get_coarse_boottime_ns();
+	get_random_bytes(checker->secret, NOISE_HASH_LEN);
+	checker->device = wg;
+}
+
+enum { COOKIE_KEY_LABEL_LEN = 8 };
+static const u8 mac1_key_label[COOKIE_KEY_LABEL_LEN] = "mac1----";
+static const u8 cookie_key_label[COOKIE_KEY_LABEL_LEN] = "cookie--";
+
+static void precompute_key(u8 key[NOISE_SYMMETRIC_KEY_LEN],
+			   const u8 pubkey[NOISE_PUBLIC_KEY_LEN],
+			   const u8 label[COOKIE_KEY_LABEL_LEN])
+{
+	struct blake2s_state blake;
+
+	blake2s_init(&blake, NOISE_SYMMETRIC_KEY_LEN);
+	blake2s_update(&blake, label, COOKIE_KEY_LABEL_LEN);
+	blake2s_update(&blake, pubkey, NOISE_PUBLIC_KEY_LEN);
+	blake2s_final(&blake, key);
+}
+
+/* Must hold peer->handshake.static_identity->lock */
+void wg_cookie_checker_precompute_device_keys(struct cookie_checker *checker)
+{
+	if (likely(checker->device->static_identity.has_identity)) {
+		precompute_key(checker->cookie_encryption_key,
+			       checker->device->static_identity.static_public,
+			       cookie_key_label);
+		precompute_key(checker->message_mac1_key,
+			       checker->device->static_identity.static_public,
+			       mac1_key_label);
+	} else {
+		memset(checker->cookie_encryption_key, 0,
+		       NOISE_SYMMETRIC_KEY_LEN);
+		memset(checker->message_mac1_key, 0, NOISE_SYMMETRIC_KEY_LEN);
+	}
+}
+
+void wg_cookie_checker_precompute_peer_keys(struct wg_peer *peer)
+{
+	precompute_key(peer->latest_cookie.cookie_decryption_key,
+		       peer->handshake.remote_static, cookie_key_label);
+	precompute_key(peer->latest_cookie.message_mac1_key,
+		       peer->handshake.remote_static, mac1_key_label);
+}
+
+void wg_cookie_init(struct cookie *cookie)
+{
+	memset(cookie, 0, sizeof(*cookie));
+	init_rwsem(&cookie->lock);
+}
+
+static void compute_mac1(u8 mac1[COOKIE_LEN], const void *message, size_t len,
+			 const u8 key[NOISE_SYMMETRIC_KEY_LEN])
+{
+	len = len - sizeof(struct message_macs) +
+	      offsetof(struct message_macs, mac1);
+	blake2s(mac1, message, key, COOKIE_LEN, len, NOISE_SYMMETRIC_KEY_LEN);
+}
+
+static void compute_mac2(u8 mac2[COOKIE_LEN], const void *message, size_t len,
+			 const u8 cookie[COOKIE_LEN])
+{
+	len = len - sizeof(struct message_macs) +
+	      offsetof(struct message_macs, mac2);
+	blake2s(mac2, message, cookie, COOKIE_LEN, len, COOKIE_LEN);
+}
+
+static void make_cookie(u8 cookie[COOKIE_LEN], struct sk_buff *skb,
+			struct cookie_checker *checker)
+{
+	struct blake2s_state state;
+
+	if (wg_birthdate_has_expired(checker->secret_birthdate,
+				     COOKIE_SECRET_MAX_AGE)) {
+		down_write(&checker->secret_lock);
+		checker->secret_birthdate = ktime_get_coarse_boottime_ns();
+		get_random_bytes(checker->secret, NOISE_HASH_LEN);
+		up_write(&checker->secret_lock);
+	}
+
+	down_read(&checker->secret_lock);
+
+	blake2s_init_key(&state, COOKIE_LEN, checker->secret, NOISE_HASH_LEN);
+	if (skb->protocol == htons(ETH_P_IP))
+		blake2s_update(&state, (u8 *)&ip_hdr(skb)->saddr,
+			       sizeof(struct in_addr));
+	else if (skb->protocol == htons(ETH_P_IPV6))
+		blake2s_update(&state, (u8 *)&ipv6_hdr(skb)->saddr,
+			       sizeof(struct in6_addr));
+	blake2s_update(&state, (u8 *)&udp_hdr(skb)->source, sizeof(__be16));
+	blake2s_final(&state, cookie);
+
+	up_read(&checker->secret_lock);
+}
+
+enum cookie_mac_state wg_cookie_validate_packet(struct cookie_checker *checker,
+						struct sk_buff *skb,
+						bool check_cookie)
+{
+	struct message_macs *macs = (struct message_macs *)
+		(skb->data + skb->len - sizeof(*macs));
+	enum cookie_mac_state ret;
+	u8 computed_mac[COOKIE_LEN];
+	u8 cookie[COOKIE_LEN];
+
+	ret = INVALID_MAC;
+	compute_mac1(computed_mac, skb->data, skb->len,
+		     checker->message_mac1_key);
+	if (crypto_memneq(computed_mac, macs->mac1, COOKIE_LEN))
+		goto out;
+
+	ret = VALID_MAC_BUT_NO_COOKIE;
+
+	if (!check_cookie)
+		goto out;
+
+	make_cookie(cookie, skb, checker);
+
+	compute_mac2(computed_mac, skb->data, skb->len, cookie);
+	if (crypto_memneq(computed_mac, macs->mac2, COOKIE_LEN))
+		goto out;
+
+	ret = VALID_MAC_WITH_COOKIE_BUT_RATELIMITED;
+	if (!wg_ratelimiter_allow(skb, dev_net(checker->device->dev)))
+		goto out;
+
+	ret = VALID_MAC_WITH_COOKIE;
+
+out:
+	return ret;
+}
+
+void wg_cookie_add_mac_to_packet(void *message, size_t len,
+				 struct wg_peer *peer)
+{
+	struct message_macs *macs = (struct message_macs *)
+		((u8 *)message + len - sizeof(*macs));
+
+	down_write(&peer->latest_cookie.lock);
+	compute_mac1(macs->mac1, message, len,
+		     peer->latest_cookie.message_mac1_key);
+	memcpy(peer->latest_cookie.last_mac1_sent, macs->mac1, COOKIE_LEN);
+	peer->latest_cookie.have_sent_mac1 = true;
+	up_write(&peer->latest_cookie.lock);
+
+	down_read(&peer->latest_cookie.lock);
+	if (peer->latest_cookie.is_valid &&
+	    !wg_birthdate_has_expired(peer->latest_cookie.birthdate,
+				COOKIE_SECRET_MAX_AGE - COOKIE_SECRET_LATENCY))
+		compute_mac2(macs->mac2, message, len,
+			     peer->latest_cookie.cookie);
+	else
+		memset(macs->mac2, 0, COOKIE_LEN);
+	up_read(&peer->latest_cookie.lock);
+}
+
+void wg_cookie_message_create(struct message_handshake_cookie *dst,
+			      struct sk_buff *skb, __le32 index,
+			      struct cookie_checker *checker)
+{
+	struct message_macs *macs = (struct message_macs *)
+		((u8 *)skb->data + skb->len - sizeof(*macs));
+	u8 cookie[COOKIE_LEN];
+
+	dst->header.type = cpu_to_le32(MESSAGE_HANDSHAKE_COOKIE);
+	dst->receiver_index = index;
+	get_random_bytes_wait(dst->nonce, COOKIE_NONCE_LEN);
+
+	make_cookie(cookie, skb, checker);
+	xchacha20poly1305_encrypt(dst->encrypted_cookie, cookie, COOKIE_LEN,
+				  macs->mac1, COOKIE_LEN, dst->nonce,
+				  checker->cookie_encryption_key);
+}
+
+void wg_cookie_message_consume(struct message_handshake_cookie *src,
+			       struct wg_device *wg)
+{
+	struct wg_peer *peer = NULL;
+	u8 cookie[COOKIE_LEN];
+	bool ret;
+
+	if (unlikely(!wg_index_hashtable_lookup(wg->index_hashtable,
+						INDEX_HASHTABLE_HANDSHAKE |
+						INDEX_HASHTABLE_KEYPAIR,
+						src->receiver_index, &peer)))
+		return;
+
+	down_read(&peer->latest_cookie.lock);
+	if (unlikely(!peer->latest_cookie.have_sent_mac1)) {
+		up_read(&peer->latest_cookie.lock);
+		goto out;
+	}
+	ret = xchacha20poly1305_decrypt(
+		cookie, src->encrypted_cookie, sizeof(src->encrypted_cookie),
+		peer->latest_cookie.last_mac1_sent, COOKIE_LEN, src->nonce,
+		peer->latest_cookie.cookie_decryption_key);
+	up_read(&peer->latest_cookie.lock);
+
+	if (ret) {
+		down_write(&peer->latest_cookie.lock);
+		memcpy(peer->latest_cookie.cookie, cookie, COOKIE_LEN);
+		peer->latest_cookie.birthdate = ktime_get_coarse_boottime_ns();
+		peer->latest_cookie.is_valid = true;
+		peer->latest_cookie.have_sent_mac1 = false;
+		up_write(&peer->latest_cookie.lock);
+	} else {
+		net_dbg_ratelimited("%s: Could not decrypt invalid cookie response\n",
+				    wg->dev->name);
+	}
+
+out:
+	wg_peer_put(peer);
+}
diff --git a/drivers/net/wireguard/cookie.h b/drivers/net/wireguard/cookie.h
new file mode 100644
index 0000000..c4bd61c
--- /dev/null
+++ b/drivers/net/wireguard/cookie.h
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_COOKIE_H
+#define _WG_COOKIE_H
+
+#include "messages.h"
+#include <linux/rwsem.h>
+
+struct wg_peer;
+
+struct cookie_checker {
+	u8 secret[NOISE_HASH_LEN];
+	u8 cookie_encryption_key[NOISE_SYMMETRIC_KEY_LEN];
+	u8 message_mac1_key[NOISE_SYMMETRIC_KEY_LEN];
+	u64 secret_birthdate;
+	struct rw_semaphore secret_lock;
+	struct wg_device *device;
+};
+
+struct cookie {
+	u64 birthdate;
+	bool is_valid;
+	u8 cookie[COOKIE_LEN];
+	bool have_sent_mac1;
+	u8 last_mac1_sent[COOKIE_LEN];
+	u8 cookie_decryption_key[NOISE_SYMMETRIC_KEY_LEN];
+	u8 message_mac1_key[NOISE_SYMMETRIC_KEY_LEN];
+	struct rw_semaphore lock;
+};
+
+enum cookie_mac_state {
+	INVALID_MAC,
+	VALID_MAC_BUT_NO_COOKIE,
+	VALID_MAC_WITH_COOKIE_BUT_RATELIMITED,
+	VALID_MAC_WITH_COOKIE
+};
+
+void wg_cookie_checker_init(struct cookie_checker *checker,
+			    struct wg_device *wg);
+void wg_cookie_checker_precompute_device_keys(struct cookie_checker *checker);
+void wg_cookie_checker_precompute_peer_keys(struct wg_peer *peer);
+void wg_cookie_init(struct cookie *cookie);
+
+enum cookie_mac_state wg_cookie_validate_packet(struct cookie_checker *checker,
+						struct sk_buff *skb,
+						bool check_cookie);
+void wg_cookie_add_mac_to_packet(void *message, size_t len,
+				 struct wg_peer *peer);
+
+void wg_cookie_message_create(struct message_handshake_cookie *src,
+			      struct sk_buff *skb, __le32 index,
+			      struct cookie_checker *checker);
+void wg_cookie_message_consume(struct message_handshake_cookie *src,
+			       struct wg_device *wg);
+
+#endif /* _WG_COOKIE_H */
diff --git a/drivers/net/wireguard/device.c b/drivers/net/wireguard/device.c
new file mode 100644
index 0000000..c9f65e9
--- /dev/null
+++ b/drivers/net/wireguard/device.c
@@ -0,0 +1,456 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "queueing.h"
+#include "socket.h"
+#include "timers.h"
+#include "device.h"
+#include "ratelimiter.h"
+#include "peer.h"
+#include "messages.h"
+
+#include <linux/module.h>
+#include <linux/rtnetlink.h>
+#include <linux/inet.h>
+#include <linux/netdevice.h>
+#include <linux/inetdevice.h>
+#include <linux/if_arp.h>
+#include <linux/icmp.h>
+#include <linux/suspend.h>
+#include <net/icmp.h>
+#include <net/rtnetlink.h>
+#include <net/ip_tunnels.h>
+#include <net/addrconf.h>
+
+static LIST_HEAD(device_list);
+
+static int wg_open(struct net_device *dev)
+{
+	struct in_device *dev_v4 = __in_dev_get_rtnl(dev);
+	struct inet6_dev *dev_v6 = __in6_dev_get(dev);
+	struct wg_device *wg = netdev_priv(dev);
+	struct wg_peer *peer;
+	int ret;
+
+	if (dev_v4) {
+		/* At some point we might put this check near the ip_rt_send_
+		 * redirect call of ip_forward in net/ipv4/ip_forward.c, similar
+		 * to the current secpath check.
+		 */
+		IN_DEV_CONF_SET(dev_v4, SEND_REDIRECTS, false);
+		IPV4_DEVCONF_ALL(dev_net(dev), SEND_REDIRECTS) = false;
+	}
+	if (dev_v6)
+		dev_v6->cnf.addr_gen_mode = IN6_ADDR_GEN_MODE_NONE;
+
+	mutex_lock(&wg->device_update_lock);
+	ret = wg_socket_init(wg, wg->incoming_port);
+	if (ret < 0)
+		goto out;
+	list_for_each_entry(peer, &wg->peer_list, peer_list) {
+		wg_packet_send_staged_packets(peer);
+		if (peer->persistent_keepalive_interval)
+			wg_packet_send_keepalive(peer);
+	}
+out:
+	mutex_unlock(&wg->device_update_lock);
+	return ret;
+}
+
+#ifdef CONFIG_PM_SLEEP
+static int wg_pm_notification(struct notifier_block *nb, unsigned long action,
+			      void *data)
+{
+	struct wg_device *wg;
+	struct wg_peer *peer;
+
+	/* If the machine is constantly suspending and resuming, as part of
+	 * its normal operation rather than as a somewhat rare event, then we
+	 * don't actually want to clear keys.
+	 */
+	if (IS_ENABLED(CONFIG_PM_AUTOSLEEP) || IS_ENABLED(CONFIG_ANDROID))
+		return 0;
+
+	if (action != PM_HIBERNATION_PREPARE && action != PM_SUSPEND_PREPARE)
+		return 0;
+
+	rtnl_lock();
+	list_for_each_entry(wg, &device_list, device_list) {
+		mutex_lock(&wg->device_update_lock);
+		list_for_each_entry(peer, &wg->peer_list, peer_list) {
+			del_timer(&peer->timer_zero_key_material);
+			wg_noise_handshake_clear(&peer->handshake);
+			wg_noise_keypairs_clear(&peer->keypairs);
+		}
+		mutex_unlock(&wg->device_update_lock);
+	}
+	rtnl_unlock();
+	rcu_barrier();
+	return 0;
+}
+
+static struct notifier_block pm_notifier = { .notifier_call = wg_pm_notification };
+#endif
+
+static int wg_stop(struct net_device *dev)
+{
+	struct wg_device *wg = netdev_priv(dev);
+	struct wg_peer *peer;
+
+	mutex_lock(&wg->device_update_lock);
+	list_for_each_entry(peer, &wg->peer_list, peer_list) {
+		wg_packet_purge_staged_packets(peer);
+		wg_timers_stop(peer);
+		wg_noise_handshake_clear(&peer->handshake);
+		wg_noise_keypairs_clear(&peer->keypairs);
+		wg_noise_reset_last_sent_handshake(&peer->last_sent_handshake);
+	}
+	mutex_unlock(&wg->device_update_lock);
+	skb_queue_purge(&wg->incoming_handshakes);
+	wg_socket_reinit(wg, NULL, NULL);
+	return 0;
+}
+
+static netdev_tx_t wg_xmit(struct sk_buff *skb, struct net_device *dev)
+{
+	struct wg_device *wg = netdev_priv(dev);
+	struct sk_buff_head packets;
+	struct wg_peer *peer;
+	struct sk_buff *next;
+	sa_family_t family;
+	u32 mtu;
+	int ret;
+
+	if (unlikely(!wg_check_packet_protocol(skb))) {
+		ret = -EPROTONOSUPPORT;
+		net_dbg_ratelimited("%s: Invalid IP packet\n", dev->name);
+		goto err;
+	}
+
+	peer = wg_allowedips_lookup_dst(&wg->peer_allowedips, skb);
+	if (unlikely(!peer)) {
+		ret = -ENOKEY;
+		if (skb->protocol == htons(ETH_P_IP))
+			net_dbg_ratelimited("%s: No peer has allowed IPs matching %pI4\n",
+					    dev->name, &ip_hdr(skb)->daddr);
+		else if (skb->protocol == htons(ETH_P_IPV6))
+			net_dbg_ratelimited("%s: No peer has allowed IPs matching %pI6\n",
+					    dev->name, &ipv6_hdr(skb)->daddr);
+		goto err;
+	}
+
+	family = READ_ONCE(peer->endpoint.addr.sa_family);
+	if (unlikely(family != AF_INET && family != AF_INET6)) {
+		ret = -EDESTADDRREQ;
+		net_dbg_ratelimited("%s: No valid endpoint has been configured or discovered for peer %llu\n",
+				    dev->name, peer->internal_id);
+		goto err_peer;
+	}
+
+	mtu = skb_dst(skb) ? dst_mtu(skb_dst(skb)) : dev->mtu;
+
+	__skb_queue_head_init(&packets);
+	if (!skb_is_gso(skb)) {
+		skb_mark_not_on_list(skb);
+	} else {
+		struct sk_buff *segs = skb_gso_segment(skb, 0);
+
+		if (unlikely(IS_ERR(segs))) {
+			ret = PTR_ERR(segs);
+			goto err_peer;
+		}
+		dev_kfree_skb(skb);
+		skb = segs;
+	}
+
+	skb_list_walk_safe(skb, skb, next) {
+		skb_mark_not_on_list(skb);
+
+		skb = skb_share_check(skb, GFP_ATOMIC);
+		if (unlikely(!skb))
+			continue;
+
+		/* We only need to keep the original dst around for icmp,
+		 * so at this point we're in a position to drop it.
+		 */
+		skb_dst_drop(skb);
+
+		PACKET_CB(skb)->mtu = mtu;
+
+		__skb_queue_tail(&packets, skb);
+	}
+
+	spin_lock_bh(&peer->staged_packet_queue.lock);
+	/* If the queue is getting too big, we start removing the oldest packets
+	 * until it's small again. We do this before adding the new packet, so
+	 * we don't remove GSO segments that are in excess.
+	 */
+	while (skb_queue_len(&peer->staged_packet_queue) > MAX_STAGED_PACKETS) {
+		dev_kfree_skb(__skb_dequeue(&peer->staged_packet_queue));
+		++dev->stats.tx_dropped;
+	}
+	skb_queue_splice_tail(&packets, &peer->staged_packet_queue);
+	spin_unlock_bh(&peer->staged_packet_queue.lock);
+
+	wg_packet_send_staged_packets(peer);
+
+	wg_peer_put(peer);
+	return NETDEV_TX_OK;
+
+err_peer:
+	wg_peer_put(peer);
+err:
+	++dev->stats.tx_errors;
+	if (skb->protocol == htons(ETH_P_IP))
+		icmp_ndo_send(skb, ICMP_DEST_UNREACH, ICMP_HOST_UNREACH, 0);
+	else if (skb->protocol == htons(ETH_P_IPV6))
+		icmpv6_ndo_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_ADDR_UNREACH, 0);
+	kfree_skb(skb);
+	return ret;
+}
+
+static const struct net_device_ops netdev_ops = {
+	.ndo_open		= wg_open,
+	.ndo_stop		= wg_stop,
+	.ndo_start_xmit		= wg_xmit,
+	.ndo_get_stats64	= ip_tunnel_get_stats64
+};
+
+static void wg_destruct(struct net_device *dev)
+{
+	struct wg_device *wg = netdev_priv(dev);
+
+	rtnl_lock();
+	list_del(&wg->device_list);
+	rtnl_unlock();
+	mutex_lock(&wg->device_update_lock);
+	rcu_assign_pointer(wg->creating_net, NULL);
+	wg->incoming_port = 0;
+	wg_socket_reinit(wg, NULL, NULL);
+	/* The final references are cleared in the below calls to destroy_workqueue. */
+	wg_peer_remove_all(wg);
+	destroy_workqueue(wg->handshake_receive_wq);
+	destroy_workqueue(wg->handshake_send_wq);
+	destroy_workqueue(wg->packet_crypt_wq);
+	wg_packet_queue_free(&wg->decrypt_queue, true);
+	wg_packet_queue_free(&wg->encrypt_queue, true);
+	rcu_barrier(); /* Wait for all the peers to be actually freed. */
+	wg_ratelimiter_uninit();
+	memzero_explicit(&wg->static_identity, sizeof(wg->static_identity));
+	skb_queue_purge(&wg->incoming_handshakes);
+	free_percpu(dev->tstats);
+	free_percpu(wg->incoming_handshakes_worker);
+	kvfree(wg->index_hashtable);
+	kvfree(wg->peer_hashtable);
+	mutex_unlock(&wg->device_update_lock);
+
+	pr_debug("%s: Interface destroyed\n", dev->name);
+	free_netdev(dev);
+}
+
+static const struct device_type device_type = { .name = KBUILD_MODNAME };
+
+static void wg_setup(struct net_device *dev)
+{
+	struct wg_device *wg = netdev_priv(dev);
+	enum { WG_NETDEV_FEATURES = NETIF_F_HW_CSUM | NETIF_F_RXCSUM |
+				    NETIF_F_SG | NETIF_F_GSO |
+				    NETIF_F_GSO_SOFTWARE | NETIF_F_HIGHDMA };
+	const int overhead = MESSAGE_MINIMUM_LENGTH + sizeof(struct udphdr) +
+			     max(sizeof(struct ipv6hdr), sizeof(struct iphdr));
+
+	dev->netdev_ops = &netdev_ops;
+	dev->header_ops = &ip_tunnel_header_ops;
+	dev->hard_header_len = 0;
+	dev->addr_len = 0;
+	dev->needed_headroom = DATA_PACKET_HEAD_ROOM;
+	dev->needed_tailroom = noise_encrypted_len(MESSAGE_PADDING_MULTIPLE);
+	dev->type = ARPHRD_NONE;
+	dev->flags = IFF_POINTOPOINT | IFF_NOARP;
+	dev->priv_flags |= IFF_NO_QUEUE;
+	dev->features |= NETIF_F_LLTX;
+	dev->features |= WG_NETDEV_FEATURES;
+	dev->hw_features |= WG_NETDEV_FEATURES;
+	dev->hw_enc_features |= WG_NETDEV_FEATURES;
+	dev->mtu = ETH_DATA_LEN - overhead;
+	dev->max_mtu = round_down(INT_MAX, MESSAGE_PADDING_MULTIPLE) - overhead;
+
+	SET_NETDEV_DEVTYPE(dev, &device_type);
+
+	/* We need to keep the dst around in case of icmp replies. */
+	netif_keep_dst(dev);
+
+	memset(wg, 0, sizeof(*wg));
+	wg->dev = dev;
+}
+
+static int wg_newlink(struct net *src_net, struct net_device *dev,
+		      struct nlattr *tb[], struct nlattr *data[],
+		      struct netlink_ext_ack *extack)
+{
+	struct wg_device *wg = netdev_priv(dev);
+	int ret = -ENOMEM;
+
+	rcu_assign_pointer(wg->creating_net, src_net);
+	init_rwsem(&wg->static_identity.lock);
+	mutex_init(&wg->socket_update_lock);
+	mutex_init(&wg->device_update_lock);
+	skb_queue_head_init(&wg->incoming_handshakes);
+	wg_allowedips_init(&wg->peer_allowedips);
+	wg_cookie_checker_init(&wg->cookie_checker, wg);
+	INIT_LIST_HEAD(&wg->peer_list);
+	wg->device_update_gen = 1;
+
+	wg->peer_hashtable = wg_pubkey_hashtable_alloc();
+	if (!wg->peer_hashtable)
+		return ret;
+
+	wg->index_hashtable = wg_index_hashtable_alloc();
+	if (!wg->index_hashtable)
+		goto err_free_peer_hashtable;
+
+	dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
+	if (!dev->tstats)
+		goto err_free_index_hashtable;
+
+	wg->incoming_handshakes_worker =
+		wg_packet_percpu_multicore_worker_alloc(
+				wg_packet_handshake_receive_worker, wg);
+	if (!wg->incoming_handshakes_worker)
+		goto err_free_tstats;
+
+	wg->handshake_receive_wq = alloc_workqueue("wg-kex-%s",
+			WQ_CPU_INTENSIVE | WQ_FREEZABLE, 0, dev->name);
+	if (!wg->handshake_receive_wq)
+		goto err_free_incoming_handshakes;
+
+	wg->handshake_send_wq = alloc_workqueue("wg-kex-%s",
+			WQ_UNBOUND | WQ_FREEZABLE, 0, dev->name);
+	if (!wg->handshake_send_wq)
+		goto err_destroy_handshake_receive;
+
+	wg->packet_crypt_wq = alloc_workqueue("wg-crypt-%s",
+			WQ_CPU_INTENSIVE | WQ_MEM_RECLAIM, 0, dev->name);
+	if (!wg->packet_crypt_wq)
+		goto err_destroy_handshake_send;
+
+	ret = wg_packet_queue_init(&wg->encrypt_queue, wg_packet_encrypt_worker,
+				   true, MAX_QUEUED_PACKETS);
+	if (ret < 0)
+		goto err_destroy_packet_crypt;
+
+	ret = wg_packet_queue_init(&wg->decrypt_queue, wg_packet_decrypt_worker,
+				   true, MAX_QUEUED_PACKETS);
+	if (ret < 0)
+		goto err_free_encrypt_queue;
+
+	ret = wg_ratelimiter_init();
+	if (ret < 0)
+		goto err_free_decrypt_queue;
+
+	ret = register_netdevice(dev);
+	if (ret < 0)
+		goto err_uninit_ratelimiter;
+
+	list_add(&wg->device_list, &device_list);
+
+	/* We wait until the end to assign priv_destructor, so that
+	 * register_netdevice doesn't call it for us if it fails.
+	 */
+	dev->priv_destructor = wg_destruct;
+
+	pr_debug("%s: Interface created\n", dev->name);
+	return ret;
+
+err_uninit_ratelimiter:
+	wg_ratelimiter_uninit();
+err_free_decrypt_queue:
+	wg_packet_queue_free(&wg->decrypt_queue, true);
+err_free_encrypt_queue:
+	wg_packet_queue_free(&wg->encrypt_queue, true);
+err_destroy_packet_crypt:
+	destroy_workqueue(wg->packet_crypt_wq);
+err_destroy_handshake_send:
+	destroy_workqueue(wg->handshake_send_wq);
+err_destroy_handshake_receive:
+	destroy_workqueue(wg->handshake_receive_wq);
+err_free_incoming_handshakes:
+	free_percpu(wg->incoming_handshakes_worker);
+err_free_tstats:
+	free_percpu(dev->tstats);
+err_free_index_hashtable:
+	kvfree(wg->index_hashtable);
+err_free_peer_hashtable:
+	kvfree(wg->peer_hashtable);
+	return ret;
+}
+
+static struct rtnl_link_ops link_ops __read_mostly = {
+	.kind			= KBUILD_MODNAME,
+	.priv_size		= sizeof(struct wg_device),
+	.setup			= wg_setup,
+	.newlink		= wg_newlink,
+};
+
+static void wg_netns_pre_exit(struct net *net)
+{
+	struct wg_device *wg;
+
+	rtnl_lock();
+	list_for_each_entry(wg, &device_list, device_list) {
+		if (rcu_access_pointer(wg->creating_net) == net) {
+			pr_debug("%s: Creating namespace exiting\n", wg->dev->name);
+			netif_carrier_off(wg->dev);
+			mutex_lock(&wg->device_update_lock);
+			rcu_assign_pointer(wg->creating_net, NULL);
+			wg_socket_reinit(wg, NULL, NULL);
+			mutex_unlock(&wg->device_update_lock);
+		}
+	}
+	rtnl_unlock();
+}
+
+static struct pernet_operations pernet_ops = {
+	.pre_exit = wg_netns_pre_exit
+};
+
+int __init wg_device_init(void)
+{
+	int ret;
+
+#ifdef CONFIG_PM_SLEEP
+	ret = register_pm_notifier(&pm_notifier);
+	if (ret)
+		return ret;
+#endif
+
+	ret = register_pernet_device(&pernet_ops);
+	if (ret)
+		goto error_pm;
+
+	ret = rtnl_link_register(&link_ops);
+	if (ret)
+		goto error_pernet;
+
+	return 0;
+
+error_pernet:
+	unregister_pernet_device(&pernet_ops);
+error_pm:
+#ifdef CONFIG_PM_SLEEP
+	unregister_pm_notifier(&pm_notifier);
+#endif
+	return ret;
+}
+
+void wg_device_uninit(void)
+{
+	rtnl_link_unregister(&link_ops);
+	unregister_pernet_device(&pernet_ops);
+#ifdef CONFIG_PM_SLEEP
+	unregister_pm_notifier(&pm_notifier);
+#endif
+	rcu_barrier();
+}
diff --git a/drivers/net/wireguard/device.h b/drivers/net/wireguard/device.h
new file mode 100644
index 0000000..4d0144e
--- /dev/null
+++ b/drivers/net/wireguard/device.h
@@ -0,0 +1,64 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_DEVICE_H
+#define _WG_DEVICE_H
+
+#include "noise.h"
+#include "allowedips.h"
+#include "peerlookup.h"
+#include "cookie.h"
+
+#include <linux/types.h>
+#include <linux/netdevice.h>
+#include <linux/workqueue.h>
+#include <linux/mutex.h>
+#include <linux/net.h>
+#include <linux/ptr_ring.h>
+
+struct wg_device;
+
+struct multicore_worker {
+	void *ptr;
+	struct work_struct work;
+};
+
+struct crypt_queue {
+	struct ptr_ring ring;
+	union {
+		struct {
+			struct multicore_worker __percpu *worker;
+			int last_cpu;
+		};
+		struct work_struct work;
+	};
+};
+
+struct wg_device {
+	struct net_device *dev;
+	struct crypt_queue encrypt_queue, decrypt_queue;
+	struct sock __rcu *sock4, *sock6;
+	struct net __rcu *creating_net;
+	struct noise_static_identity static_identity;
+	struct workqueue_struct *handshake_receive_wq, *handshake_send_wq;
+	struct workqueue_struct *packet_crypt_wq;
+	struct sk_buff_head incoming_handshakes;
+	int incoming_handshake_cpu;
+	struct multicore_worker __percpu *incoming_handshakes_worker;
+	struct cookie_checker cookie_checker;
+	struct pubkey_hashtable *peer_hashtable;
+	struct index_hashtable *index_hashtable;
+	struct allowedips peer_allowedips;
+	struct mutex device_update_lock, socket_update_lock;
+	struct list_head device_list, peer_list;
+	unsigned int num_peers, device_update_gen;
+	u32 fwmark;
+	u16 incoming_port;
+};
+
+int wg_device_init(void);
+void wg_device_uninit(void);
+
+#endif /* _WG_DEVICE_H */
diff --git a/drivers/net/wireguard/main.c b/drivers/net/wireguard/main.c
new file mode 100644
index 0000000..7a7d5f1
--- /dev/null
+++ b/drivers/net/wireguard/main.c
@@ -0,0 +1,63 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "version.h"
+#include "device.h"
+#include "noise.h"
+#include "queueing.h"
+#include "ratelimiter.h"
+#include "netlink.h"
+
+#include <uapi/linux/wireguard.h>
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/genetlink.h>
+#include <net/rtnetlink.h>
+
+static int __init mod_init(void)
+{
+	int ret;
+
+#ifdef DEBUG
+	if (!wg_allowedips_selftest() || !wg_packet_counter_selftest() ||
+	    !wg_ratelimiter_selftest())
+		return -ENOTRECOVERABLE;
+#endif
+	wg_noise_init();
+
+	ret = wg_device_init();
+	if (ret < 0)
+		goto err_device;
+
+	ret = wg_genetlink_init();
+	if (ret < 0)
+		goto err_netlink;
+
+	pr_info("WireGuard " WIREGUARD_VERSION " loaded. See www.wireguard.com for information.\n");
+	pr_info("Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.\n");
+
+	return 0;
+
+err_netlink:
+	wg_device_uninit();
+err_device:
+	return ret;
+}
+
+static void __exit mod_exit(void)
+{
+	wg_genetlink_uninit();
+	wg_device_uninit();
+}
+
+module_init(mod_init);
+module_exit(mod_exit);
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("WireGuard secure network tunnel");
+MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
+MODULE_VERSION(WIREGUARD_VERSION);
+MODULE_ALIAS_RTNL_LINK(KBUILD_MODNAME);
+MODULE_ALIAS_GENL_FAMILY(WG_GENL_NAME);
diff --git a/drivers/net/wireguard/messages.h b/drivers/net/wireguard/messages.h
new file mode 100644
index 0000000..208da72
--- /dev/null
+++ b/drivers/net/wireguard/messages.h
@@ -0,0 +1,128 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_MESSAGES_H
+#define _WG_MESSAGES_H
+
+#include <crypto/curve25519.h>
+#include <crypto/chacha20poly1305.h>
+#include <crypto/blake2s.h>
+
+#include <linux/kernel.h>
+#include <linux/param.h>
+#include <linux/skbuff.h>
+
+enum noise_lengths {
+	NOISE_PUBLIC_KEY_LEN = CURVE25519_KEY_SIZE,
+	NOISE_SYMMETRIC_KEY_LEN = CHACHA20POLY1305_KEY_SIZE,
+	NOISE_TIMESTAMP_LEN = sizeof(u64) + sizeof(u32),
+	NOISE_AUTHTAG_LEN = CHACHA20POLY1305_AUTHTAG_SIZE,
+	NOISE_HASH_LEN = BLAKE2S_HASH_SIZE
+};
+
+#define noise_encrypted_len(plain_len) ((plain_len) + NOISE_AUTHTAG_LEN)
+
+enum cookie_values {
+	COOKIE_SECRET_MAX_AGE = 2 * 60,
+	COOKIE_SECRET_LATENCY = 5,
+	COOKIE_NONCE_LEN = XCHACHA20POLY1305_NONCE_SIZE,
+	COOKIE_LEN = 16
+};
+
+enum counter_values {
+	COUNTER_BITS_TOTAL = 8192,
+	COUNTER_REDUNDANT_BITS = BITS_PER_LONG,
+	COUNTER_WINDOW_SIZE = COUNTER_BITS_TOTAL - COUNTER_REDUNDANT_BITS
+};
+
+enum limits {
+	REKEY_AFTER_MESSAGES = 1ULL << 60,
+	REJECT_AFTER_MESSAGES = U64_MAX - COUNTER_WINDOW_SIZE - 1,
+	REKEY_TIMEOUT = 5,
+	REKEY_TIMEOUT_JITTER_MAX_JIFFIES = HZ / 3,
+	REKEY_AFTER_TIME = 120,
+	REJECT_AFTER_TIME = 180,
+	INITIATIONS_PER_SECOND = 50,
+	MAX_PEERS_PER_DEVICE = 1U << 20,
+	KEEPALIVE_TIMEOUT = 10,
+	MAX_TIMER_HANDSHAKES = 90 / REKEY_TIMEOUT,
+	MAX_QUEUED_INCOMING_HANDSHAKES = 4096, /* TODO: replace this with DQL */
+	MAX_STAGED_PACKETS = 128,
+	MAX_QUEUED_PACKETS = 1024 /* TODO: replace this with DQL */
+};
+
+enum message_type {
+	MESSAGE_INVALID = 0,
+	MESSAGE_HANDSHAKE_INITIATION = 1,
+	MESSAGE_HANDSHAKE_RESPONSE = 2,
+	MESSAGE_HANDSHAKE_COOKIE = 3,
+	MESSAGE_DATA = 4
+};
+
+struct message_header {
+	/* The actual layout of this that we want is:
+	 * u8 type
+	 * u8 reserved_zero[3]
+	 *
+	 * But it turns out that by encoding this as little endian,
+	 * we achieve the same thing, and it makes checking faster.
+	 */
+	__le32 type;
+};
+
+struct message_macs {
+	u8 mac1[COOKIE_LEN];
+	u8 mac2[COOKIE_LEN];
+};
+
+struct message_handshake_initiation {
+	struct message_header header;
+	__le32 sender_index;
+	u8 unencrypted_ephemeral[NOISE_PUBLIC_KEY_LEN];
+	u8 encrypted_static[noise_encrypted_len(NOISE_PUBLIC_KEY_LEN)];
+	u8 encrypted_timestamp[noise_encrypted_len(NOISE_TIMESTAMP_LEN)];
+	struct message_macs macs;
+};
+
+struct message_handshake_response {
+	struct message_header header;
+	__le32 sender_index;
+	__le32 receiver_index;
+	u8 unencrypted_ephemeral[NOISE_PUBLIC_KEY_LEN];
+	u8 encrypted_nothing[noise_encrypted_len(0)];
+	struct message_macs macs;
+};
+
+struct message_handshake_cookie {
+	struct message_header header;
+	__le32 receiver_index;
+	u8 nonce[COOKIE_NONCE_LEN];
+	u8 encrypted_cookie[noise_encrypted_len(COOKIE_LEN)];
+};
+
+struct message_data {
+	struct message_header header;
+	__le32 key_idx;
+	__le64 counter;
+	u8 encrypted_data[];
+};
+
+#define message_data_len(plain_len) \
+	(noise_encrypted_len(plain_len) + sizeof(struct message_data))
+
+enum message_alignments {
+	MESSAGE_PADDING_MULTIPLE = 16,
+	MESSAGE_MINIMUM_LENGTH = message_data_len(0)
+};
+
+#define SKB_HEADER_LEN                                       \
+	(max(sizeof(struct iphdr), sizeof(struct ipv6hdr)) + \
+	 sizeof(struct udphdr) + NET_SKB_PAD)
+#define DATA_PACKET_HEAD_ROOM \
+	ALIGN(sizeof(struct message_data) + SKB_HEADER_LEN, 4)
+
+enum { HANDSHAKE_DSCP = 0x88 /* AF41, plus 00 ECN */ };
+
+#endif /* _WG_MESSAGES_H */
diff --git a/drivers/net/wireguard/netlink.c b/drivers/net/wireguard/netlink.c
new file mode 100644
index 0000000..1c69eb8
--- /dev/null
+++ b/drivers/net/wireguard/netlink.c
@@ -0,0 +1,646 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "netlink.h"
+#include "device.h"
+#include "peer.h"
+#include "socket.h"
+#include "queueing.h"
+#include "messages.h"
+
+#include <uapi/linux/wireguard.h>
+
+#include <linux/if.h>
+#include <net/genetlink.h>
+#include <net/sock.h>
+#include <crypto/algapi.h>
+
+static struct genl_family genl_family;
+
+static const struct nla_policy device_policy[WGDEVICE_A_MAX + 1] = {
+	[WGDEVICE_A_IFINDEX]		= { .type = NLA_U32 },
+	[WGDEVICE_A_IFNAME]		= { .type = NLA_NUL_STRING, .len = IFNAMSIZ - 1 },
+	[WGDEVICE_A_PRIVATE_KEY]	= NLA_POLICY_EXACT_LEN(NOISE_PUBLIC_KEY_LEN),
+	[WGDEVICE_A_PUBLIC_KEY]		= NLA_POLICY_EXACT_LEN(NOISE_PUBLIC_KEY_LEN),
+	[WGDEVICE_A_FLAGS]		= { .type = NLA_U32 },
+	[WGDEVICE_A_LISTEN_PORT]	= { .type = NLA_U16 },
+	[WGDEVICE_A_FWMARK]		= { .type = NLA_U32 },
+	[WGDEVICE_A_PEERS]		= { .type = NLA_NESTED }
+};
+
+static const struct nla_policy peer_policy[WGPEER_A_MAX + 1] = {
+	[WGPEER_A_PUBLIC_KEY]				= NLA_POLICY_EXACT_LEN(NOISE_PUBLIC_KEY_LEN),
+	[WGPEER_A_PRESHARED_KEY]			= NLA_POLICY_EXACT_LEN(NOISE_SYMMETRIC_KEY_LEN),
+	[WGPEER_A_FLAGS]				= { .type = NLA_U32 },
+	[WGPEER_A_ENDPOINT]				= NLA_POLICY_MIN_LEN(sizeof(struct sockaddr)),
+	[WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL]	= { .type = NLA_U16 },
+	[WGPEER_A_LAST_HANDSHAKE_TIME]			= NLA_POLICY_EXACT_LEN(sizeof(struct __kernel_timespec)),
+	[WGPEER_A_RX_BYTES]				= { .type = NLA_U64 },
+	[WGPEER_A_TX_BYTES]				= { .type = NLA_U64 },
+	[WGPEER_A_ALLOWEDIPS]				= { .type = NLA_NESTED },
+	[WGPEER_A_PROTOCOL_VERSION]			= { .type = NLA_U32 }
+};
+
+static const struct nla_policy allowedip_policy[WGALLOWEDIP_A_MAX + 1] = {
+	[WGALLOWEDIP_A_FAMILY]		= { .type = NLA_U16 },
+	[WGALLOWEDIP_A_IPADDR]		= NLA_POLICY_MIN_LEN(sizeof(struct in_addr)),
+	[WGALLOWEDIP_A_CIDR_MASK]	= { .type = NLA_U8 }
+};
+
+static struct wg_device *lookup_interface(struct nlattr **attrs,
+					  struct sk_buff *skb)
+{
+	struct net_device *dev = NULL;
+
+	if (!attrs[WGDEVICE_A_IFINDEX] == !attrs[WGDEVICE_A_IFNAME])
+		return ERR_PTR(-EBADR);
+	if (attrs[WGDEVICE_A_IFINDEX])
+		dev = dev_get_by_index(sock_net(skb->sk),
+				       nla_get_u32(attrs[WGDEVICE_A_IFINDEX]));
+	else if (attrs[WGDEVICE_A_IFNAME])
+		dev = dev_get_by_name(sock_net(skb->sk),
+				      nla_data(attrs[WGDEVICE_A_IFNAME]));
+	if (!dev)
+		return ERR_PTR(-ENODEV);
+	if (!dev->rtnl_link_ops || !dev->rtnl_link_ops->kind ||
+	    strcmp(dev->rtnl_link_ops->kind, KBUILD_MODNAME)) {
+		dev_put(dev);
+		return ERR_PTR(-EOPNOTSUPP);
+	}
+	return netdev_priv(dev);
+}
+
+static int get_allowedips(struct sk_buff *skb, const u8 *ip, u8 cidr,
+			  int family)
+{
+	struct nlattr *allowedip_nest;
+
+	allowedip_nest = nla_nest_start(skb, 0);
+	if (!allowedip_nest)
+		return -EMSGSIZE;
+
+	if (nla_put_u8(skb, WGALLOWEDIP_A_CIDR_MASK, cidr) ||
+	    nla_put_u16(skb, WGALLOWEDIP_A_FAMILY, family) ||
+	    nla_put(skb, WGALLOWEDIP_A_IPADDR, family == AF_INET6 ?
+		    sizeof(struct in6_addr) : sizeof(struct in_addr), ip)) {
+		nla_nest_cancel(skb, allowedip_nest);
+		return -EMSGSIZE;
+	}
+
+	nla_nest_end(skb, allowedip_nest);
+	return 0;
+}
+
+struct dump_ctx {
+	struct wg_device *wg;
+	struct wg_peer *next_peer;
+	u64 allowedips_seq;
+	struct allowedips_node *next_allowedip;
+};
+
+#define DUMP_CTX(cb) ((struct dump_ctx *)(cb)->args)
+
+static int
+get_peer(struct wg_peer *peer, struct sk_buff *skb, struct dump_ctx *ctx)
+{
+
+	struct nlattr *allowedips_nest, *peer_nest = nla_nest_start(skb, 0);
+	struct allowedips_node *allowedips_node = ctx->next_allowedip;
+	bool fail;
+
+	if (!peer_nest)
+		return -EMSGSIZE;
+
+	down_read(&peer->handshake.lock);
+	fail = nla_put(skb, WGPEER_A_PUBLIC_KEY, NOISE_PUBLIC_KEY_LEN,
+		       peer->handshake.remote_static);
+	up_read(&peer->handshake.lock);
+	if (fail)
+		goto err;
+
+	if (!allowedips_node) {
+		const struct __kernel_timespec last_handshake = {
+			.tv_sec = peer->walltime_last_handshake.tv_sec,
+			.tv_nsec = peer->walltime_last_handshake.tv_nsec
+		};
+
+		down_read(&peer->handshake.lock);
+		fail = nla_put(skb, WGPEER_A_PRESHARED_KEY,
+			       NOISE_SYMMETRIC_KEY_LEN,
+			       peer->handshake.preshared_key);
+		up_read(&peer->handshake.lock);
+		if (fail)
+			goto err;
+
+		if (nla_put(skb, WGPEER_A_LAST_HANDSHAKE_TIME,
+			    sizeof(last_handshake), &last_handshake) ||
+		    nla_put_u16(skb, WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL,
+				peer->persistent_keepalive_interval) ||
+		    nla_put_u64_64bit(skb, WGPEER_A_TX_BYTES, peer->tx_bytes,
+				      WGPEER_A_UNSPEC) ||
+		    nla_put_u64_64bit(skb, WGPEER_A_RX_BYTES, peer->rx_bytes,
+				      WGPEER_A_UNSPEC) ||
+		    nla_put_u32(skb, WGPEER_A_PROTOCOL_VERSION, 1))
+			goto err;
+
+		read_lock_bh(&peer->endpoint_lock);
+		if (peer->endpoint.addr.sa_family == AF_INET)
+			fail = nla_put(skb, WGPEER_A_ENDPOINT,
+				       sizeof(peer->endpoint.addr4),
+				       &peer->endpoint.addr4);
+		else if (peer->endpoint.addr.sa_family == AF_INET6)
+			fail = nla_put(skb, WGPEER_A_ENDPOINT,
+				       sizeof(peer->endpoint.addr6),
+				       &peer->endpoint.addr6);
+		read_unlock_bh(&peer->endpoint_lock);
+		if (fail)
+			goto err;
+		allowedips_node =
+			list_first_entry_or_null(&peer->allowedips_list,
+					struct allowedips_node, peer_list);
+	}
+	if (!allowedips_node)
+		goto no_allowedips;
+	if (!ctx->allowedips_seq)
+		ctx->allowedips_seq = peer->device->peer_allowedips.seq;
+	else if (ctx->allowedips_seq != peer->device->peer_allowedips.seq)
+		goto no_allowedips;
+
+	allowedips_nest = nla_nest_start(skb, WGPEER_A_ALLOWEDIPS);
+	if (!allowedips_nest)
+		goto err;
+
+	list_for_each_entry_from(allowedips_node, &peer->allowedips_list,
+				 peer_list) {
+		u8 cidr, ip[16] __aligned(__alignof(u64));
+		int family;
+
+		family = wg_allowedips_read_node(allowedips_node, ip, &cidr);
+		if (get_allowedips(skb, ip, cidr, family)) {
+			nla_nest_end(skb, allowedips_nest);
+			nla_nest_end(skb, peer_nest);
+			ctx->next_allowedip = allowedips_node;
+			return -EMSGSIZE;
+		}
+	}
+	nla_nest_end(skb, allowedips_nest);
+no_allowedips:
+	nla_nest_end(skb, peer_nest);
+	ctx->next_allowedip = NULL;
+	ctx->allowedips_seq = 0;
+	return 0;
+err:
+	nla_nest_cancel(skb, peer_nest);
+	return -EMSGSIZE;
+}
+
+static int wg_get_device_start(struct netlink_callback *cb)
+{
+	struct nlattr **attrs = genl_family_attrbuf(&genl_family);
+	struct wg_device *wg;
+	int ret;
+
+	ret = nlmsg_parse(cb->nlh, GENL_HDRLEN + genl_family.hdrsize, attrs,
+			  genl_family.maxattr, device_policy, NULL);
+	if (ret < 0)
+		return ret;
+	wg = lookup_interface(attrs, cb->skb);
+	if (IS_ERR(wg))
+		return PTR_ERR(wg);
+	DUMP_CTX(cb)->wg = wg;
+	return 0;
+}
+
+static int wg_get_device_dump(struct sk_buff *skb, struct netlink_callback *cb)
+{
+	struct wg_peer *peer, *next_peer_cursor;
+	struct dump_ctx *ctx = DUMP_CTX(cb);
+	struct wg_device *wg = ctx->wg;
+	struct nlattr *peers_nest;
+	int ret = -EMSGSIZE;
+	bool done = true;
+	void *hdr;
+
+	rtnl_lock();
+	mutex_lock(&wg->device_update_lock);
+	cb->seq = wg->device_update_gen;
+	next_peer_cursor = ctx->next_peer;
+
+	hdr = genlmsg_put(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq,
+			  &genl_family, NLM_F_MULTI, WG_CMD_GET_DEVICE);
+	if (!hdr)
+		goto out;
+	genl_dump_check_consistent(cb, hdr);
+
+	if (!ctx->next_peer) {
+		if (nla_put_u16(skb, WGDEVICE_A_LISTEN_PORT,
+				wg->incoming_port) ||
+		    nla_put_u32(skb, WGDEVICE_A_FWMARK, wg->fwmark) ||
+		    nla_put_u32(skb, WGDEVICE_A_IFINDEX, wg->dev->ifindex) ||
+		    nla_put_string(skb, WGDEVICE_A_IFNAME, wg->dev->name))
+			goto out;
+
+		down_read(&wg->static_identity.lock);
+		if (wg->static_identity.has_identity) {
+			if (nla_put(skb, WGDEVICE_A_PRIVATE_KEY,
+				    NOISE_PUBLIC_KEY_LEN,
+				    wg->static_identity.static_private) ||
+			    nla_put(skb, WGDEVICE_A_PUBLIC_KEY,
+				    NOISE_PUBLIC_KEY_LEN,
+				    wg->static_identity.static_public)) {
+				up_read(&wg->static_identity.lock);
+				goto out;
+			}
+		}
+		up_read(&wg->static_identity.lock);
+	}
+
+	peers_nest = nla_nest_start(skb, WGDEVICE_A_PEERS);
+	if (!peers_nest)
+		goto out;
+	ret = 0;
+	/* If the last cursor was removed via list_del_init in peer_remove, then
+	 * we just treat this the same as there being no more peers left. The
+	 * reason is that seq_nr should indicate to userspace that this isn't a
+	 * coherent dump anyway, so they'll try again.
+	 */
+	if (list_empty(&wg->peer_list) ||
+	    (ctx->next_peer && list_empty(&ctx->next_peer->peer_list))) {
+		nla_nest_cancel(skb, peers_nest);
+		goto out;
+	}
+	lockdep_assert_held(&wg->device_update_lock);
+	peer = list_prepare_entry(ctx->next_peer, &wg->peer_list, peer_list);
+	list_for_each_entry_continue(peer, &wg->peer_list, peer_list) {
+		if (get_peer(peer, skb, ctx)) {
+			done = false;
+			break;
+		}
+		next_peer_cursor = peer;
+	}
+	nla_nest_end(skb, peers_nest);
+
+out:
+	if (!ret && !done && next_peer_cursor)
+		wg_peer_get(next_peer_cursor);
+	wg_peer_put(ctx->next_peer);
+	mutex_unlock(&wg->device_update_lock);
+	rtnl_unlock();
+
+	if (ret) {
+		genlmsg_cancel(skb, hdr);
+		return ret;
+	}
+	genlmsg_end(skb, hdr);
+	if (done) {
+		ctx->next_peer = NULL;
+		return 0;
+	}
+	ctx->next_peer = next_peer_cursor;
+	return skb->len;
+
+	/* At this point, we can't really deal ourselves with safely zeroing out
+	 * the private key material after usage. This will need an additional API
+	 * in the kernel for marking skbs as zero_on_free.
+	 */
+}
+
+static int wg_get_device_done(struct netlink_callback *cb)
+{
+	struct dump_ctx *ctx = DUMP_CTX(cb);
+
+	if (ctx->wg)
+		dev_put(ctx->wg->dev);
+	wg_peer_put(ctx->next_peer);
+	return 0;
+}
+
+static int set_port(struct wg_device *wg, u16 port)
+{
+	struct wg_peer *peer;
+
+	if (wg->incoming_port == port)
+		return 0;
+	list_for_each_entry(peer, &wg->peer_list, peer_list)
+		wg_socket_clear_peer_endpoint_src(peer);
+	if (!netif_running(wg->dev)) {
+		wg->incoming_port = port;
+		return 0;
+	}
+	return wg_socket_init(wg, port);
+}
+
+static int set_allowedip(struct wg_peer *peer, struct nlattr **attrs)
+{
+	int ret = -EINVAL;
+	u16 family;
+	u8 cidr;
+
+	if (!attrs[WGALLOWEDIP_A_FAMILY] || !attrs[WGALLOWEDIP_A_IPADDR] ||
+	    !attrs[WGALLOWEDIP_A_CIDR_MASK])
+		return ret;
+	family = nla_get_u16(attrs[WGALLOWEDIP_A_FAMILY]);
+	cidr = nla_get_u8(attrs[WGALLOWEDIP_A_CIDR_MASK]);
+
+	if (family == AF_INET && cidr <= 32 &&
+	    nla_len(attrs[WGALLOWEDIP_A_IPADDR]) == sizeof(struct in_addr))
+		ret = wg_allowedips_insert_v4(
+			&peer->device->peer_allowedips,
+			nla_data(attrs[WGALLOWEDIP_A_IPADDR]), cidr, peer,
+			&peer->device->device_update_lock);
+	else if (family == AF_INET6 && cidr <= 128 &&
+		 nla_len(attrs[WGALLOWEDIP_A_IPADDR]) == sizeof(struct in6_addr))
+		ret = wg_allowedips_insert_v6(
+			&peer->device->peer_allowedips,
+			nla_data(attrs[WGALLOWEDIP_A_IPADDR]), cidr, peer,
+			&peer->device->device_update_lock);
+
+	return ret;
+}
+
+static int set_peer(struct wg_device *wg, struct nlattr **attrs)
+{
+	u8 *public_key = NULL, *preshared_key = NULL;
+	struct wg_peer *peer = NULL;
+	u32 flags = 0;
+	int ret;
+
+	ret = -EINVAL;
+	if (attrs[WGPEER_A_PUBLIC_KEY] &&
+	    nla_len(attrs[WGPEER_A_PUBLIC_KEY]) == NOISE_PUBLIC_KEY_LEN)
+		public_key = nla_data(attrs[WGPEER_A_PUBLIC_KEY]);
+	else
+		goto out;
+	if (attrs[WGPEER_A_PRESHARED_KEY] &&
+	    nla_len(attrs[WGPEER_A_PRESHARED_KEY]) == NOISE_SYMMETRIC_KEY_LEN)
+		preshared_key = nla_data(attrs[WGPEER_A_PRESHARED_KEY]);
+
+	if (attrs[WGPEER_A_FLAGS])
+		flags = nla_get_u32(attrs[WGPEER_A_FLAGS]);
+	ret = -EOPNOTSUPP;
+	if (flags & ~__WGPEER_F_ALL)
+		goto out;
+
+	ret = -EPFNOSUPPORT;
+	if (attrs[WGPEER_A_PROTOCOL_VERSION]) {
+		if (nla_get_u32(attrs[WGPEER_A_PROTOCOL_VERSION]) != 1)
+			goto out;
+	}
+
+	peer = wg_pubkey_hashtable_lookup(wg->peer_hashtable,
+					  nla_data(attrs[WGPEER_A_PUBLIC_KEY]));
+	ret = 0;
+	if (!peer) { /* Peer doesn't exist yet. Add a new one. */
+		if (flags & (WGPEER_F_REMOVE_ME | WGPEER_F_UPDATE_ONLY))
+			goto out;
+
+		/* The peer is new, so there aren't allowed IPs to remove. */
+		flags &= ~WGPEER_F_REPLACE_ALLOWEDIPS;
+
+		down_read(&wg->static_identity.lock);
+		if (wg->static_identity.has_identity &&
+		    !memcmp(nla_data(attrs[WGPEER_A_PUBLIC_KEY]),
+			    wg->static_identity.static_public,
+			    NOISE_PUBLIC_KEY_LEN)) {
+			/* We silently ignore peers that have the same public
+			 * key as the device. The reason we do it silently is
+			 * that we'd like for people to be able to reuse the
+			 * same set of API calls across peers.
+			 */
+			up_read(&wg->static_identity.lock);
+			ret = 0;
+			goto out;
+		}
+		up_read(&wg->static_identity.lock);
+
+		peer = wg_peer_create(wg, public_key, preshared_key);
+		if (IS_ERR(peer)) {
+			ret = PTR_ERR(peer);
+			peer = NULL;
+			goto out;
+		}
+		/* Take additional reference, as though we've just been
+		 * looked up.
+		 */
+		wg_peer_get(peer);
+	}
+
+	if (flags & WGPEER_F_REMOVE_ME) {
+		wg_peer_remove(peer);
+		goto out;
+	}
+
+	if (preshared_key) {
+		down_write(&peer->handshake.lock);
+		memcpy(&peer->handshake.preshared_key, preshared_key,
+		       NOISE_SYMMETRIC_KEY_LEN);
+		up_write(&peer->handshake.lock);
+	}
+
+	if (attrs[WGPEER_A_ENDPOINT]) {
+		struct sockaddr *addr = nla_data(attrs[WGPEER_A_ENDPOINT]);
+		size_t len = nla_len(attrs[WGPEER_A_ENDPOINT]);
+
+		if ((len == sizeof(struct sockaddr_in) &&
+		     addr->sa_family == AF_INET) ||
+		    (len == sizeof(struct sockaddr_in6) &&
+		     addr->sa_family == AF_INET6)) {
+			struct endpoint endpoint = { { { 0 } } };
+
+			memcpy(&endpoint.addr, addr, len);
+			wg_socket_set_peer_endpoint(peer, &endpoint);
+		}
+	}
+
+	if (flags & WGPEER_F_REPLACE_ALLOWEDIPS)
+		wg_allowedips_remove_by_peer(&wg->peer_allowedips, peer,
+					     &wg->device_update_lock);
+
+	if (attrs[WGPEER_A_ALLOWEDIPS]) {
+		struct nlattr *attr, *allowedip[WGALLOWEDIP_A_MAX + 1];
+		int rem;
+
+		nla_for_each_nested(attr, attrs[WGPEER_A_ALLOWEDIPS], rem) {
+			ret = nla_parse_nested(allowedip, WGALLOWEDIP_A_MAX,
+					       attr, allowedip_policy, NULL);
+			if (ret < 0)
+				goto out;
+			ret = set_allowedip(peer, allowedip);
+			if (ret < 0)
+				goto out;
+		}
+	}
+
+	if (attrs[WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL]) {
+		const u16 persistent_keepalive_interval = nla_get_u16(
+				attrs[WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL]);
+		const bool send_keepalive =
+			!peer->persistent_keepalive_interval &&
+			persistent_keepalive_interval &&
+			netif_running(wg->dev);
+
+		peer->persistent_keepalive_interval = persistent_keepalive_interval;
+		if (send_keepalive)
+			wg_packet_send_keepalive(peer);
+	}
+
+	if (netif_running(wg->dev))
+		wg_packet_send_staged_packets(peer);
+
+out:
+	wg_peer_put(peer);
+	if (attrs[WGPEER_A_PRESHARED_KEY])
+		memzero_explicit(nla_data(attrs[WGPEER_A_PRESHARED_KEY]),
+				 nla_len(attrs[WGPEER_A_PRESHARED_KEY]));
+	return ret;
+}
+
+static int wg_set_device(struct sk_buff *skb, struct genl_info *info)
+{
+	struct wg_device *wg = lookup_interface(info->attrs, skb);
+	u32 flags = 0;
+	int ret;
+
+	if (IS_ERR(wg)) {
+		ret = PTR_ERR(wg);
+		goto out_nodev;
+	}
+
+	rtnl_lock();
+	mutex_lock(&wg->device_update_lock);
+
+	if (info->attrs[WGDEVICE_A_FLAGS])
+		flags = nla_get_u32(info->attrs[WGDEVICE_A_FLAGS]);
+	ret = -EOPNOTSUPP;
+	if (flags & ~__WGDEVICE_F_ALL)
+		goto out;
+
+	if (info->attrs[WGDEVICE_A_LISTEN_PORT] || info->attrs[WGDEVICE_A_FWMARK]) {
+		struct net *net;
+		rcu_read_lock();
+		net = rcu_dereference(wg->creating_net);
+		ret = !net || !ns_capable(net->user_ns, CAP_NET_ADMIN) ? -EPERM : 0;
+		rcu_read_unlock();
+		if (ret)
+			goto out;
+	}
+
+	++wg->device_update_gen;
+
+	if (info->attrs[WGDEVICE_A_FWMARK]) {
+		struct wg_peer *peer;
+
+		wg->fwmark = nla_get_u32(info->attrs[WGDEVICE_A_FWMARK]);
+		list_for_each_entry(peer, &wg->peer_list, peer_list)
+			wg_socket_clear_peer_endpoint_src(peer);
+	}
+
+	if (info->attrs[WGDEVICE_A_LISTEN_PORT]) {
+		ret = set_port(wg,
+			nla_get_u16(info->attrs[WGDEVICE_A_LISTEN_PORT]));
+		if (ret)
+			goto out;
+	}
+
+	if (flags & WGDEVICE_F_REPLACE_PEERS)
+		wg_peer_remove_all(wg);
+
+	if (info->attrs[WGDEVICE_A_PRIVATE_KEY] &&
+	    nla_len(info->attrs[WGDEVICE_A_PRIVATE_KEY]) ==
+		    NOISE_PUBLIC_KEY_LEN) {
+		u8 *private_key = nla_data(info->attrs[WGDEVICE_A_PRIVATE_KEY]);
+		u8 public_key[NOISE_PUBLIC_KEY_LEN];
+		struct wg_peer *peer, *temp;
+
+		if (!crypto_memneq(wg->static_identity.static_private,
+				   private_key, NOISE_PUBLIC_KEY_LEN))
+			goto skip_set_private_key;
+
+		/* We remove before setting, to prevent race, which means doing
+		 * two 25519-genpub ops.
+		 */
+		if (curve25519_generate_public(public_key, private_key)) {
+			peer = wg_pubkey_hashtable_lookup(wg->peer_hashtable,
+							  public_key);
+			if (peer) {
+				wg_peer_put(peer);
+				wg_peer_remove(peer);
+			}
+		}
+
+		down_write(&wg->static_identity.lock);
+		wg_noise_set_static_identity_private_key(&wg->static_identity,
+							 private_key);
+		list_for_each_entry_safe(peer, temp, &wg->peer_list,
+					 peer_list) {
+			wg_noise_precompute_static_static(peer);
+			wg_noise_expire_current_peer_keypairs(peer);
+		}
+		wg_cookie_checker_precompute_device_keys(&wg->cookie_checker);
+		up_write(&wg->static_identity.lock);
+	}
+skip_set_private_key:
+
+	if (info->attrs[WGDEVICE_A_PEERS]) {
+		struct nlattr *attr, *peer[WGPEER_A_MAX + 1];
+		int rem;
+
+		nla_for_each_nested(attr, info->attrs[WGDEVICE_A_PEERS], rem) {
+			ret = nla_parse_nested(peer, WGPEER_A_MAX, attr,
+					       peer_policy, NULL);
+			if (ret < 0)
+				goto out;
+			ret = set_peer(wg, peer);
+			if (ret < 0)
+				goto out;
+		}
+	}
+	ret = 0;
+
+out:
+	mutex_unlock(&wg->device_update_lock);
+	rtnl_unlock();
+	dev_put(wg->dev);
+out_nodev:
+	if (info->attrs[WGDEVICE_A_PRIVATE_KEY])
+		memzero_explicit(nla_data(info->attrs[WGDEVICE_A_PRIVATE_KEY]),
+				 nla_len(info->attrs[WGDEVICE_A_PRIVATE_KEY]));
+	return ret;
+}
+
+static const struct genl_ops genl_ops[] = {
+	{
+		.cmd = WG_CMD_GET_DEVICE,
+		.start = wg_get_device_start,
+		.dumpit = wg_get_device_dump,
+		.done = wg_get_device_done,
+		.flags = GENL_UNS_ADMIN_PERM
+	}, {
+		.cmd = WG_CMD_SET_DEVICE,
+		.doit = wg_set_device,
+		.flags = GENL_UNS_ADMIN_PERM
+	}
+};
+
+static struct genl_family genl_family __ro_after_init = {
+	.ops = genl_ops,
+	.n_ops = ARRAY_SIZE(genl_ops),
+	.name = WG_GENL_NAME,
+	.version = WG_GENL_VERSION,
+	.maxattr = WGDEVICE_A_MAX,
+	.module = THIS_MODULE,
+	.policy = device_policy,
+	.netnsok = true
+};
+
+int __init wg_genetlink_init(void)
+{
+	return genl_register_family(&genl_family);
+}
+
+void __exit wg_genetlink_uninit(void)
+{
+	genl_unregister_family(&genl_family);
+}
diff --git a/drivers/net/wireguard/netlink.h b/drivers/net/wireguard/netlink.h
new file mode 100644
index 0000000..15100d9
--- /dev/null
+++ b/drivers/net/wireguard/netlink.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_NETLINK_H
+#define _WG_NETLINK_H
+
+int wg_genetlink_init(void);
+void wg_genetlink_uninit(void);
+
+#endif /* _WG_NETLINK_H */
diff --git a/drivers/net/wireguard/noise.c b/drivers/net/wireguard/noise.c
new file mode 100644
index 0000000..27cb504
--- /dev/null
+++ b/drivers/net/wireguard/noise.c
@@ -0,0 +1,828 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "noise.h"
+#include "device.h"
+#include "peer.h"
+#include "messages.h"
+#include "queueing.h"
+#include "peerlookup.h"
+
+#include <linux/rcupdate.h>
+#include <linux/slab.h>
+#include <linux/bitmap.h>
+#include <linux/scatterlist.h>
+#include <linux/highmem.h>
+#include <crypto/algapi.h>
+
+/* This implements Noise_IKpsk2:
+ *
+ * <- s
+ * ******
+ * -> e, es, s, ss, {t}
+ * <- e, ee, se, psk, {}
+ */
+
+static const u8 handshake_name[37] = "Noise_IKpsk2_25519_ChaChaPoly_BLAKE2s";
+static const u8 identifier_name[34] = "WireGuard v1 zx2c4 Jason@zx2c4.com";
+static u8 handshake_init_hash[NOISE_HASH_LEN] __ro_after_init;
+static u8 handshake_init_chaining_key[NOISE_HASH_LEN] __ro_after_init;
+static atomic64_t keypair_counter = ATOMIC64_INIT(0);
+
+void __init wg_noise_init(void)
+{
+	struct blake2s_state blake;
+
+	blake2s(handshake_init_chaining_key, handshake_name, NULL,
+		NOISE_HASH_LEN, sizeof(handshake_name), 0);
+	blake2s_init(&blake, NOISE_HASH_LEN);
+	blake2s_update(&blake, handshake_init_chaining_key, NOISE_HASH_LEN);
+	blake2s_update(&blake, identifier_name, sizeof(identifier_name));
+	blake2s_final(&blake, handshake_init_hash);
+}
+
+/* Must hold peer->handshake.static_identity->lock */
+void wg_noise_precompute_static_static(struct wg_peer *peer)
+{
+	down_write(&peer->handshake.lock);
+	if (!peer->handshake.static_identity->has_identity ||
+	    !curve25519(peer->handshake.precomputed_static_static,
+			peer->handshake.static_identity->static_private,
+			peer->handshake.remote_static))
+		memset(peer->handshake.precomputed_static_static, 0,
+		       NOISE_PUBLIC_KEY_LEN);
+	up_write(&peer->handshake.lock);
+}
+
+void wg_noise_handshake_init(struct noise_handshake *handshake,
+			     struct noise_static_identity *static_identity,
+			     const u8 peer_public_key[NOISE_PUBLIC_KEY_LEN],
+			     const u8 peer_preshared_key[NOISE_SYMMETRIC_KEY_LEN],
+			     struct wg_peer *peer)
+{
+	memset(handshake, 0, sizeof(*handshake));
+	init_rwsem(&handshake->lock);
+	handshake->entry.type = INDEX_HASHTABLE_HANDSHAKE;
+	handshake->entry.peer = peer;
+	memcpy(handshake->remote_static, peer_public_key, NOISE_PUBLIC_KEY_LEN);
+	if (peer_preshared_key)
+		memcpy(handshake->preshared_key, peer_preshared_key,
+		       NOISE_SYMMETRIC_KEY_LEN);
+	handshake->static_identity = static_identity;
+	handshake->state = HANDSHAKE_ZEROED;
+	wg_noise_precompute_static_static(peer);
+}
+
+static void handshake_zero(struct noise_handshake *handshake)
+{
+	memset(&handshake->ephemeral_private, 0, NOISE_PUBLIC_KEY_LEN);
+	memset(&handshake->remote_ephemeral, 0, NOISE_PUBLIC_KEY_LEN);
+	memset(&handshake->hash, 0, NOISE_HASH_LEN);
+	memset(&handshake->chaining_key, 0, NOISE_HASH_LEN);
+	handshake->remote_index = 0;
+	handshake->state = HANDSHAKE_ZEROED;
+}
+
+void wg_noise_handshake_clear(struct noise_handshake *handshake)
+{
+	down_write(&handshake->lock);
+	wg_index_hashtable_remove(
+			handshake->entry.peer->device->index_hashtable,
+			&handshake->entry);
+	handshake_zero(handshake);
+	up_write(&handshake->lock);
+}
+
+static struct noise_keypair *keypair_create(struct wg_peer *peer)
+{
+	struct noise_keypair *keypair = kzalloc(sizeof(*keypair), GFP_KERNEL);
+
+	if (unlikely(!keypair))
+		return NULL;
+	spin_lock_init(&keypair->receiving_counter.lock);
+	keypair->internal_id = atomic64_inc_return(&keypair_counter);
+	keypair->entry.type = INDEX_HASHTABLE_KEYPAIR;
+	keypair->entry.peer = peer;
+	kref_init(&keypair->refcount);
+	return keypair;
+}
+
+static void keypair_free_rcu(struct rcu_head *rcu)
+{
+	kzfree(container_of(rcu, struct noise_keypair, rcu));
+}
+
+static void keypair_free_kref(struct kref *kref)
+{
+	struct noise_keypair *keypair =
+		container_of(kref, struct noise_keypair, refcount);
+
+	net_dbg_ratelimited("%s: Keypair %llu destroyed for peer %llu\n",
+			    keypair->entry.peer->device->dev->name,
+			    keypair->internal_id,
+			    keypair->entry.peer->internal_id);
+	wg_index_hashtable_remove(keypair->entry.peer->device->index_hashtable,
+				  &keypair->entry);
+	call_rcu(&keypair->rcu, keypair_free_rcu);
+}
+
+void wg_noise_keypair_put(struct noise_keypair *keypair, bool unreference_now)
+{
+	if (unlikely(!keypair))
+		return;
+	if (unlikely(unreference_now))
+		wg_index_hashtable_remove(
+			keypair->entry.peer->device->index_hashtable,
+			&keypair->entry);
+	kref_put(&keypair->refcount, keypair_free_kref);
+}
+
+struct noise_keypair *wg_noise_keypair_get(struct noise_keypair *keypair)
+{
+	RCU_LOCKDEP_WARN(!rcu_read_lock_bh_held(),
+		"Taking noise keypair reference without holding the RCU BH read lock");
+	if (unlikely(!keypair || !kref_get_unless_zero(&keypair->refcount)))
+		return NULL;
+	return keypair;
+}
+
+void wg_noise_keypairs_clear(struct noise_keypairs *keypairs)
+{
+	struct noise_keypair *old;
+
+	spin_lock_bh(&keypairs->keypair_update_lock);
+
+	/* We zero the next_keypair before zeroing the others, so that
+	 * wg_noise_received_with_keypair returns early before subsequent ones
+	 * are zeroed.
+	 */
+	old = rcu_dereference_protected(keypairs->next_keypair,
+		lockdep_is_held(&keypairs->keypair_update_lock));
+	RCU_INIT_POINTER(keypairs->next_keypair, NULL);
+	wg_noise_keypair_put(old, true);
+
+	old = rcu_dereference_protected(keypairs->previous_keypair,
+		lockdep_is_held(&keypairs->keypair_update_lock));
+	RCU_INIT_POINTER(keypairs->previous_keypair, NULL);
+	wg_noise_keypair_put(old, true);
+
+	old = rcu_dereference_protected(keypairs->current_keypair,
+		lockdep_is_held(&keypairs->keypair_update_lock));
+	RCU_INIT_POINTER(keypairs->current_keypair, NULL);
+	wg_noise_keypair_put(old, true);
+
+	spin_unlock_bh(&keypairs->keypair_update_lock);
+}
+
+void wg_noise_expire_current_peer_keypairs(struct wg_peer *peer)
+{
+	struct noise_keypair *keypair;
+
+	wg_noise_handshake_clear(&peer->handshake);
+	wg_noise_reset_last_sent_handshake(&peer->last_sent_handshake);
+
+	spin_lock_bh(&peer->keypairs.keypair_update_lock);
+	keypair = rcu_dereference_protected(peer->keypairs.next_keypair,
+			lockdep_is_held(&peer->keypairs.keypair_update_lock));
+	if (keypair)
+		keypair->sending.is_valid = false;
+	keypair = rcu_dereference_protected(peer->keypairs.current_keypair,
+			lockdep_is_held(&peer->keypairs.keypair_update_lock));
+	if (keypair)
+		keypair->sending.is_valid = false;
+	spin_unlock_bh(&peer->keypairs.keypair_update_lock);
+}
+
+static void add_new_keypair(struct noise_keypairs *keypairs,
+			    struct noise_keypair *new_keypair)
+{
+	struct noise_keypair *previous_keypair, *next_keypair, *current_keypair;
+
+	spin_lock_bh(&keypairs->keypair_update_lock);
+	previous_keypair = rcu_dereference_protected(keypairs->previous_keypair,
+		lockdep_is_held(&keypairs->keypair_update_lock));
+	next_keypair = rcu_dereference_protected(keypairs->next_keypair,
+		lockdep_is_held(&keypairs->keypair_update_lock));
+	current_keypair = rcu_dereference_protected(keypairs->current_keypair,
+		lockdep_is_held(&keypairs->keypair_update_lock));
+	if (new_keypair->i_am_the_initiator) {
+		/* If we're the initiator, it means we've sent a handshake, and
+		 * received a confirmation response, which means this new
+		 * keypair can now be used.
+		 */
+		if (next_keypair) {
+			/* If there already was a next keypair pending, we
+			 * demote it to be the previous keypair, and free the
+			 * existing current. Note that this means KCI can result
+			 * in this transition. It would perhaps be more sound to
+			 * always just get rid of the unused next keypair
+			 * instead of putting it in the previous slot, but this
+			 * might be a bit less robust. Something to think about
+			 * for the future.
+			 */
+			RCU_INIT_POINTER(keypairs->next_keypair, NULL);
+			rcu_assign_pointer(keypairs->previous_keypair,
+					   next_keypair);
+			wg_noise_keypair_put(current_keypair, true);
+		} else /* If there wasn't an existing next keypair, we replace
+			* the previous with the current one.
+			*/
+			rcu_assign_pointer(keypairs->previous_keypair,
+					   current_keypair);
+		/* At this point we can get rid of the old previous keypair, and
+		 * set up the new keypair.
+		 */
+		wg_noise_keypair_put(previous_keypair, true);
+		rcu_assign_pointer(keypairs->current_keypair, new_keypair);
+	} else {
+		/* If we're the responder, it means we can't use the new keypair
+		 * until we receive confirmation via the first data packet, so
+		 * we get rid of the existing previous one, the possibly
+		 * existing next one, and slide in the new next one.
+		 */
+		rcu_assign_pointer(keypairs->next_keypair, new_keypair);
+		wg_noise_keypair_put(next_keypair, true);
+		RCU_INIT_POINTER(keypairs->previous_keypair, NULL);
+		wg_noise_keypair_put(previous_keypair, true);
+	}
+	spin_unlock_bh(&keypairs->keypair_update_lock);
+}
+
+bool wg_noise_received_with_keypair(struct noise_keypairs *keypairs,
+				    struct noise_keypair *received_keypair)
+{
+	struct noise_keypair *old_keypair;
+	bool key_is_new;
+
+	/* We first check without taking the spinlock. */
+	key_is_new = received_keypair ==
+		     rcu_access_pointer(keypairs->next_keypair);
+	if (likely(!key_is_new))
+		return false;
+
+	spin_lock_bh(&keypairs->keypair_update_lock);
+	/* After locking, we double check that things didn't change from
+	 * beneath us.
+	 */
+	if (unlikely(received_keypair !=
+		    rcu_dereference_protected(keypairs->next_keypair,
+			    lockdep_is_held(&keypairs->keypair_update_lock)))) {
+		spin_unlock_bh(&keypairs->keypair_update_lock);
+		return false;
+	}
+
+	/* When we've finally received the confirmation, we slide the next
+	 * into the current, the current into the previous, and get rid of
+	 * the old previous.
+	 */
+	old_keypair = rcu_dereference_protected(keypairs->previous_keypair,
+		lockdep_is_held(&keypairs->keypair_update_lock));
+	rcu_assign_pointer(keypairs->previous_keypair,
+		rcu_dereference_protected(keypairs->current_keypair,
+			lockdep_is_held(&keypairs->keypair_update_lock)));
+	wg_noise_keypair_put(old_keypair, true);
+	rcu_assign_pointer(keypairs->current_keypair, received_keypair);
+	RCU_INIT_POINTER(keypairs->next_keypair, NULL);
+
+	spin_unlock_bh(&keypairs->keypair_update_lock);
+	return true;
+}
+
+/* Must hold static_identity->lock */
+void wg_noise_set_static_identity_private_key(
+	struct noise_static_identity *static_identity,
+	const u8 private_key[NOISE_PUBLIC_KEY_LEN])
+{
+	memcpy(static_identity->static_private, private_key,
+	       NOISE_PUBLIC_KEY_LEN);
+	curve25519_clamp_secret(static_identity->static_private);
+	static_identity->has_identity = curve25519_generate_public(
+		static_identity->static_public, private_key);
+}
+
+/* This is Hugo Krawczyk's HKDF:
+ *  - https://eprint.iacr.org/2010/264.pdf
+ *  - https://tools.ietf.org/html/rfc5869
+ */
+static void kdf(u8 *first_dst, u8 *second_dst, u8 *third_dst, const u8 *data,
+		size_t first_len, size_t second_len, size_t third_len,
+		size_t data_len, const u8 chaining_key[NOISE_HASH_LEN])
+{
+	u8 output[BLAKE2S_HASH_SIZE + 1];
+	u8 secret[BLAKE2S_HASH_SIZE];
+
+	WARN_ON(IS_ENABLED(DEBUG) &&
+		(first_len > BLAKE2S_HASH_SIZE ||
+		 second_len > BLAKE2S_HASH_SIZE ||
+		 third_len > BLAKE2S_HASH_SIZE ||
+		 ((second_len || second_dst || third_len || third_dst) &&
+		  (!first_len || !first_dst)) ||
+		 ((third_len || third_dst) && (!second_len || !second_dst))));
+
+	/* Extract entropy from data into secret */
+	blake2s256_hmac(secret, data, chaining_key, data_len, NOISE_HASH_LEN);
+
+	if (!first_dst || !first_len)
+		goto out;
+
+	/* Expand first key: key = secret, data = 0x1 */
+	output[0] = 1;
+	blake2s256_hmac(output, output, secret, 1, BLAKE2S_HASH_SIZE);
+	memcpy(first_dst, output, first_len);
+
+	if (!second_dst || !second_len)
+		goto out;
+
+	/* Expand second key: key = secret, data = first-key || 0x2 */
+	output[BLAKE2S_HASH_SIZE] = 2;
+	blake2s256_hmac(output, output, secret, BLAKE2S_HASH_SIZE + 1,
+			BLAKE2S_HASH_SIZE);
+	memcpy(second_dst, output, second_len);
+
+	if (!third_dst || !third_len)
+		goto out;
+
+	/* Expand third key: key = secret, data = second-key || 0x3 */
+	output[BLAKE2S_HASH_SIZE] = 3;
+	blake2s256_hmac(output, output, secret, BLAKE2S_HASH_SIZE + 1,
+			BLAKE2S_HASH_SIZE);
+	memcpy(third_dst, output, third_len);
+
+out:
+	/* Clear sensitive data from stack */
+	memzero_explicit(secret, BLAKE2S_HASH_SIZE);
+	memzero_explicit(output, BLAKE2S_HASH_SIZE + 1);
+}
+
+static void derive_keys(struct noise_symmetric_key *first_dst,
+			struct noise_symmetric_key *second_dst,
+			const u8 chaining_key[NOISE_HASH_LEN])
+{
+	u64 birthdate = ktime_get_coarse_boottime_ns();
+	kdf(first_dst->key, second_dst->key, NULL, NULL,
+	    NOISE_SYMMETRIC_KEY_LEN, NOISE_SYMMETRIC_KEY_LEN, 0, 0,
+	    chaining_key);
+	first_dst->birthdate = second_dst->birthdate = birthdate;
+	first_dst->is_valid = second_dst->is_valid = true;
+}
+
+static bool __must_check mix_dh(u8 chaining_key[NOISE_HASH_LEN],
+				u8 key[NOISE_SYMMETRIC_KEY_LEN],
+				const u8 private[NOISE_PUBLIC_KEY_LEN],
+				const u8 public[NOISE_PUBLIC_KEY_LEN])
+{
+	u8 dh_calculation[NOISE_PUBLIC_KEY_LEN];
+
+	if (unlikely(!curve25519(dh_calculation, private, public)))
+		return false;
+	kdf(chaining_key, key, NULL, dh_calculation, NOISE_HASH_LEN,
+	    NOISE_SYMMETRIC_KEY_LEN, 0, NOISE_PUBLIC_KEY_LEN, chaining_key);
+	memzero_explicit(dh_calculation, NOISE_PUBLIC_KEY_LEN);
+	return true;
+}
+
+static bool __must_check mix_precomputed_dh(u8 chaining_key[NOISE_HASH_LEN],
+					    u8 key[NOISE_SYMMETRIC_KEY_LEN],
+					    const u8 precomputed[NOISE_PUBLIC_KEY_LEN])
+{
+	static u8 zero_point[NOISE_PUBLIC_KEY_LEN];
+	if (unlikely(!crypto_memneq(precomputed, zero_point, NOISE_PUBLIC_KEY_LEN)))
+		return false;
+	kdf(chaining_key, key, NULL, precomputed, NOISE_HASH_LEN,
+	    NOISE_SYMMETRIC_KEY_LEN, 0, NOISE_PUBLIC_KEY_LEN,
+	    chaining_key);
+	return true;
+}
+
+static void mix_hash(u8 hash[NOISE_HASH_LEN], const u8 *src, size_t src_len)
+{
+	struct blake2s_state blake;
+
+	blake2s_init(&blake, NOISE_HASH_LEN);
+	blake2s_update(&blake, hash, NOISE_HASH_LEN);
+	blake2s_update(&blake, src, src_len);
+	blake2s_final(&blake, hash);
+}
+
+static void mix_psk(u8 chaining_key[NOISE_HASH_LEN], u8 hash[NOISE_HASH_LEN],
+		    u8 key[NOISE_SYMMETRIC_KEY_LEN],
+		    const u8 psk[NOISE_SYMMETRIC_KEY_LEN])
+{
+	u8 temp_hash[NOISE_HASH_LEN];
+
+	kdf(chaining_key, temp_hash, key, psk, NOISE_HASH_LEN, NOISE_HASH_LEN,
+	    NOISE_SYMMETRIC_KEY_LEN, NOISE_SYMMETRIC_KEY_LEN, chaining_key);
+	mix_hash(hash, temp_hash, NOISE_HASH_LEN);
+	memzero_explicit(temp_hash, NOISE_HASH_LEN);
+}
+
+static void handshake_init(u8 chaining_key[NOISE_HASH_LEN],
+			   u8 hash[NOISE_HASH_LEN],
+			   const u8 remote_static[NOISE_PUBLIC_KEY_LEN])
+{
+	memcpy(hash, handshake_init_hash, NOISE_HASH_LEN);
+	memcpy(chaining_key, handshake_init_chaining_key, NOISE_HASH_LEN);
+	mix_hash(hash, remote_static, NOISE_PUBLIC_KEY_LEN);
+}
+
+static void message_encrypt(u8 *dst_ciphertext, const u8 *src_plaintext,
+			    size_t src_len, u8 key[NOISE_SYMMETRIC_KEY_LEN],
+			    u8 hash[NOISE_HASH_LEN])
+{
+	chacha20poly1305_encrypt(dst_ciphertext, src_plaintext, src_len, hash,
+				 NOISE_HASH_LEN,
+				 0 /* Always zero for Noise_IK */, key);
+	mix_hash(hash, dst_ciphertext, noise_encrypted_len(src_len));
+}
+
+static bool message_decrypt(u8 *dst_plaintext, const u8 *src_ciphertext,
+			    size_t src_len, u8 key[NOISE_SYMMETRIC_KEY_LEN],
+			    u8 hash[NOISE_HASH_LEN])
+{
+	if (!chacha20poly1305_decrypt(dst_plaintext, src_ciphertext, src_len,
+				      hash, NOISE_HASH_LEN,
+				      0 /* Always zero for Noise_IK */, key))
+		return false;
+	mix_hash(hash, src_ciphertext, src_len);
+	return true;
+}
+
+static void message_ephemeral(u8 ephemeral_dst[NOISE_PUBLIC_KEY_LEN],
+			      const u8 ephemeral_src[NOISE_PUBLIC_KEY_LEN],
+			      u8 chaining_key[NOISE_HASH_LEN],
+			      u8 hash[NOISE_HASH_LEN])
+{
+	if (ephemeral_dst != ephemeral_src)
+		memcpy(ephemeral_dst, ephemeral_src, NOISE_PUBLIC_KEY_LEN);
+	mix_hash(hash, ephemeral_src, NOISE_PUBLIC_KEY_LEN);
+	kdf(chaining_key, NULL, NULL, ephemeral_src, NOISE_HASH_LEN, 0, 0,
+	    NOISE_PUBLIC_KEY_LEN, chaining_key);
+}
+
+static void tai64n_now(u8 output[NOISE_TIMESTAMP_LEN])
+{
+	struct timespec64 now;
+
+	ktime_get_real_ts64(&now);
+
+	/* In order to prevent some sort of infoleak from precise timers, we
+	 * round down the nanoseconds part to the closest rounded-down power of
+	 * two to the maximum initiations per second allowed anyway by the
+	 * implementation.
+	 */
+	now.tv_nsec = ALIGN_DOWN(now.tv_nsec,
+		rounddown_pow_of_two(NSEC_PER_SEC / INITIATIONS_PER_SECOND));
+
+	/* https://cr.yp.to/libtai/tai64.html */
+	*(__be64 *)output = cpu_to_be64(0x400000000000000aULL + now.tv_sec);
+	*(__be32 *)(output + sizeof(__be64)) = cpu_to_be32(now.tv_nsec);
+}
+
+bool
+wg_noise_handshake_create_initiation(struct message_handshake_initiation *dst,
+				     struct noise_handshake *handshake)
+{
+	u8 timestamp[NOISE_TIMESTAMP_LEN];
+	u8 key[NOISE_SYMMETRIC_KEY_LEN];
+	bool ret = false;
+
+	/* We need to wait for crng _before_ taking any locks, since
+	 * curve25519_generate_secret uses get_random_bytes_wait.
+	 */
+	wait_for_random_bytes();
+
+	down_read(&handshake->static_identity->lock);
+	down_write(&handshake->lock);
+
+	if (unlikely(!handshake->static_identity->has_identity))
+		goto out;
+
+	dst->header.type = cpu_to_le32(MESSAGE_HANDSHAKE_INITIATION);
+
+	handshake_init(handshake->chaining_key, handshake->hash,
+		       handshake->remote_static);
+
+	/* e */
+	curve25519_generate_secret(handshake->ephemeral_private);
+	if (!curve25519_generate_public(dst->unencrypted_ephemeral,
+					handshake->ephemeral_private))
+		goto out;
+	message_ephemeral(dst->unencrypted_ephemeral,
+			  dst->unencrypted_ephemeral, handshake->chaining_key,
+			  handshake->hash);
+
+	/* es */
+	if (!mix_dh(handshake->chaining_key, key, handshake->ephemeral_private,
+		    handshake->remote_static))
+		goto out;
+
+	/* s */
+	message_encrypt(dst->encrypted_static,
+			handshake->static_identity->static_public,
+			NOISE_PUBLIC_KEY_LEN, key, handshake->hash);
+
+	/* ss */
+	if (!mix_precomputed_dh(handshake->chaining_key, key,
+				handshake->precomputed_static_static))
+		goto out;
+
+	/* {t} */
+	tai64n_now(timestamp);
+	message_encrypt(dst->encrypted_timestamp, timestamp,
+			NOISE_TIMESTAMP_LEN, key, handshake->hash);
+
+	dst->sender_index = wg_index_hashtable_insert(
+		handshake->entry.peer->device->index_hashtable,
+		&handshake->entry);
+
+	handshake->state = HANDSHAKE_CREATED_INITIATION;
+	ret = true;
+
+out:
+	up_write(&handshake->lock);
+	up_read(&handshake->static_identity->lock);
+	memzero_explicit(key, NOISE_SYMMETRIC_KEY_LEN);
+	return ret;
+}
+
+struct wg_peer *
+wg_noise_handshake_consume_initiation(struct message_handshake_initiation *src,
+				      struct wg_device *wg)
+{
+	struct wg_peer *peer = NULL, *ret_peer = NULL;
+	struct noise_handshake *handshake;
+	bool replay_attack, flood_attack;
+	u8 key[NOISE_SYMMETRIC_KEY_LEN];
+	u8 chaining_key[NOISE_HASH_LEN];
+	u8 hash[NOISE_HASH_LEN];
+	u8 s[NOISE_PUBLIC_KEY_LEN];
+	u8 e[NOISE_PUBLIC_KEY_LEN];
+	u8 t[NOISE_TIMESTAMP_LEN];
+	u64 initiation_consumption;
+
+	down_read(&wg->static_identity.lock);
+	if (unlikely(!wg->static_identity.has_identity))
+		goto out;
+
+	handshake_init(chaining_key, hash, wg->static_identity.static_public);
+
+	/* e */
+	message_ephemeral(e, src->unencrypted_ephemeral, chaining_key, hash);
+
+	/* es */
+	if (!mix_dh(chaining_key, key, wg->static_identity.static_private, e))
+		goto out;
+
+	/* s */
+	if (!message_decrypt(s, src->encrypted_static,
+			     sizeof(src->encrypted_static), key, hash))
+		goto out;
+
+	/* Lookup which peer we're actually talking to */
+	peer = wg_pubkey_hashtable_lookup(wg->peer_hashtable, s);
+	if (!peer)
+		goto out;
+	handshake = &peer->handshake;
+
+	/* ss */
+	if (!mix_precomputed_dh(chaining_key, key,
+				handshake->precomputed_static_static))
+	    goto out;
+
+	/* {t} */
+	if (!message_decrypt(t, src->encrypted_timestamp,
+			     sizeof(src->encrypted_timestamp), key, hash))
+		goto out;
+
+	down_read(&handshake->lock);
+	replay_attack = memcmp(t, handshake->latest_timestamp,
+			       NOISE_TIMESTAMP_LEN) <= 0;
+	flood_attack = (s64)handshake->last_initiation_consumption +
+			       NSEC_PER_SEC / INITIATIONS_PER_SECOND >
+		       (s64)ktime_get_coarse_boottime_ns();
+	up_read(&handshake->lock);
+	if (replay_attack || flood_attack)
+		goto out;
+
+	/* Success! Copy everything to peer */
+	down_write(&handshake->lock);
+	memcpy(handshake->remote_ephemeral, e, NOISE_PUBLIC_KEY_LEN);
+	if (memcmp(t, handshake->latest_timestamp, NOISE_TIMESTAMP_LEN) > 0)
+		memcpy(handshake->latest_timestamp, t, NOISE_TIMESTAMP_LEN);
+	memcpy(handshake->hash, hash, NOISE_HASH_LEN);
+	memcpy(handshake->chaining_key, chaining_key, NOISE_HASH_LEN);
+	handshake->remote_index = src->sender_index;
+	initiation_consumption = ktime_get_coarse_boottime_ns();
+	if ((s64)(handshake->last_initiation_consumption - initiation_consumption) < 0)
+		handshake->last_initiation_consumption = initiation_consumption;
+	handshake->state = HANDSHAKE_CONSUMED_INITIATION;
+	up_write(&handshake->lock);
+	ret_peer = peer;
+
+out:
+	memzero_explicit(key, NOISE_SYMMETRIC_KEY_LEN);
+	memzero_explicit(hash, NOISE_HASH_LEN);
+	memzero_explicit(chaining_key, NOISE_HASH_LEN);
+	up_read(&wg->static_identity.lock);
+	if (!ret_peer)
+		wg_peer_put(peer);
+	return ret_peer;
+}
+
+bool wg_noise_handshake_create_response(struct message_handshake_response *dst,
+					struct noise_handshake *handshake)
+{
+	u8 key[NOISE_SYMMETRIC_KEY_LEN];
+	bool ret = false;
+
+	/* We need to wait for crng _before_ taking any locks, since
+	 * curve25519_generate_secret uses get_random_bytes_wait.
+	 */
+	wait_for_random_bytes();
+
+	down_read(&handshake->static_identity->lock);
+	down_write(&handshake->lock);
+
+	if (handshake->state != HANDSHAKE_CONSUMED_INITIATION)
+		goto out;
+
+	dst->header.type = cpu_to_le32(MESSAGE_HANDSHAKE_RESPONSE);
+	dst->receiver_index = handshake->remote_index;
+
+	/* e */
+	curve25519_generate_secret(handshake->ephemeral_private);
+	if (!curve25519_generate_public(dst->unencrypted_ephemeral,
+					handshake->ephemeral_private))
+		goto out;
+	message_ephemeral(dst->unencrypted_ephemeral,
+			  dst->unencrypted_ephemeral, handshake->chaining_key,
+			  handshake->hash);
+
+	/* ee */
+	if (!mix_dh(handshake->chaining_key, NULL, handshake->ephemeral_private,
+		    handshake->remote_ephemeral))
+		goto out;
+
+	/* se */
+	if (!mix_dh(handshake->chaining_key, NULL, handshake->ephemeral_private,
+		    handshake->remote_static))
+		goto out;
+
+	/* psk */
+	mix_psk(handshake->chaining_key, handshake->hash, key,
+		handshake->preshared_key);
+
+	/* {} */
+	message_encrypt(dst->encrypted_nothing, NULL, 0, key, handshake->hash);
+
+	dst->sender_index = wg_index_hashtable_insert(
+		handshake->entry.peer->device->index_hashtable,
+		&handshake->entry);
+
+	handshake->state = HANDSHAKE_CREATED_RESPONSE;
+	ret = true;
+
+out:
+	up_write(&handshake->lock);
+	up_read(&handshake->static_identity->lock);
+	memzero_explicit(key, NOISE_SYMMETRIC_KEY_LEN);
+	return ret;
+}
+
+struct wg_peer *
+wg_noise_handshake_consume_response(struct message_handshake_response *src,
+				    struct wg_device *wg)
+{
+	enum noise_handshake_state state = HANDSHAKE_ZEROED;
+	struct wg_peer *peer = NULL, *ret_peer = NULL;
+	struct noise_handshake *handshake;
+	u8 key[NOISE_SYMMETRIC_KEY_LEN];
+	u8 hash[NOISE_HASH_LEN];
+	u8 chaining_key[NOISE_HASH_LEN];
+	u8 e[NOISE_PUBLIC_KEY_LEN];
+	u8 ephemeral_private[NOISE_PUBLIC_KEY_LEN];
+	u8 static_private[NOISE_PUBLIC_KEY_LEN];
+	u8 preshared_key[NOISE_SYMMETRIC_KEY_LEN];
+
+	down_read(&wg->static_identity.lock);
+
+	if (unlikely(!wg->static_identity.has_identity))
+		goto out;
+
+	handshake = (struct noise_handshake *)wg_index_hashtable_lookup(
+		wg->index_hashtable, INDEX_HASHTABLE_HANDSHAKE,
+		src->receiver_index, &peer);
+	if (unlikely(!handshake))
+		goto out;
+
+	down_read(&handshake->lock);
+	state = handshake->state;
+	memcpy(hash, handshake->hash, NOISE_HASH_LEN);
+	memcpy(chaining_key, handshake->chaining_key, NOISE_HASH_LEN);
+	memcpy(ephemeral_private, handshake->ephemeral_private,
+	       NOISE_PUBLIC_KEY_LEN);
+	memcpy(preshared_key, handshake->preshared_key,
+	       NOISE_SYMMETRIC_KEY_LEN);
+	up_read(&handshake->lock);
+
+	if (state != HANDSHAKE_CREATED_INITIATION)
+		goto fail;
+
+	/* e */
+	message_ephemeral(e, src->unencrypted_ephemeral, chaining_key, hash);
+
+	/* ee */
+	if (!mix_dh(chaining_key, NULL, ephemeral_private, e))
+		goto fail;
+
+	/* se */
+	if (!mix_dh(chaining_key, NULL, wg->static_identity.static_private, e))
+		goto fail;
+
+	/* psk */
+	mix_psk(chaining_key, hash, key, preshared_key);
+
+	/* {} */
+	if (!message_decrypt(NULL, src->encrypted_nothing,
+			     sizeof(src->encrypted_nothing), key, hash))
+		goto fail;
+
+	/* Success! Copy everything to peer */
+	down_write(&handshake->lock);
+	/* It's important to check that the state is still the same, while we
+	 * have an exclusive lock.
+	 */
+	if (handshake->state != state) {
+		up_write(&handshake->lock);
+		goto fail;
+	}
+	memcpy(handshake->remote_ephemeral, e, NOISE_PUBLIC_KEY_LEN);
+	memcpy(handshake->hash, hash, NOISE_HASH_LEN);
+	memcpy(handshake->chaining_key, chaining_key, NOISE_HASH_LEN);
+	handshake->remote_index = src->sender_index;
+	handshake->state = HANDSHAKE_CONSUMED_RESPONSE;
+	up_write(&handshake->lock);
+	ret_peer = peer;
+	goto out;
+
+fail:
+	wg_peer_put(peer);
+out:
+	memzero_explicit(key, NOISE_SYMMETRIC_KEY_LEN);
+	memzero_explicit(hash, NOISE_HASH_LEN);
+	memzero_explicit(chaining_key, NOISE_HASH_LEN);
+	memzero_explicit(ephemeral_private, NOISE_PUBLIC_KEY_LEN);
+	memzero_explicit(static_private, NOISE_PUBLIC_KEY_LEN);
+	memzero_explicit(preshared_key, NOISE_SYMMETRIC_KEY_LEN);
+	up_read(&wg->static_identity.lock);
+	return ret_peer;
+}
+
+bool wg_noise_handshake_begin_session(struct noise_handshake *handshake,
+				      struct noise_keypairs *keypairs)
+{
+	struct noise_keypair *new_keypair;
+	bool ret = false;
+
+	down_write(&handshake->lock);
+	if (handshake->state != HANDSHAKE_CREATED_RESPONSE &&
+	    handshake->state != HANDSHAKE_CONSUMED_RESPONSE)
+		goto out;
+
+	new_keypair = keypair_create(handshake->entry.peer);
+	if (!new_keypair)
+		goto out;
+	new_keypair->i_am_the_initiator = handshake->state ==
+					  HANDSHAKE_CONSUMED_RESPONSE;
+	new_keypair->remote_index = handshake->remote_index;
+
+	if (new_keypair->i_am_the_initiator)
+		derive_keys(&new_keypair->sending, &new_keypair->receiving,
+			    handshake->chaining_key);
+	else
+		derive_keys(&new_keypair->receiving, &new_keypair->sending,
+			    handshake->chaining_key);
+
+	handshake_zero(handshake);
+	rcu_read_lock_bh();
+	if (likely(!READ_ONCE(container_of(handshake, struct wg_peer,
+					   handshake)->is_dead))) {
+		add_new_keypair(keypairs, new_keypair);
+		net_dbg_ratelimited("%s: Keypair %llu created for peer %llu\n",
+				    handshake->entry.peer->device->dev->name,
+				    new_keypair->internal_id,
+				    handshake->entry.peer->internal_id);
+		ret = wg_index_hashtable_replace(
+			handshake->entry.peer->device->index_hashtable,
+			&handshake->entry, &new_keypair->entry);
+	} else {
+		kzfree(new_keypair);
+	}
+	rcu_read_unlock_bh();
+
+out:
+	up_write(&handshake->lock);
+	return ret;
+}
diff --git a/drivers/net/wireguard/noise.h b/drivers/net/wireguard/noise.h
new file mode 100644
index 0000000..c527253
--- /dev/null
+++ b/drivers/net/wireguard/noise.h
@@ -0,0 +1,135 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+#ifndef _WG_NOISE_H
+#define _WG_NOISE_H
+
+#include "messages.h"
+#include "peerlookup.h"
+
+#include <linux/types.h>
+#include <linux/spinlock.h>
+#include <linux/atomic.h>
+#include <linux/rwsem.h>
+#include <linux/mutex.h>
+#include <linux/kref.h>
+
+struct noise_replay_counter {
+	u64 counter;
+	spinlock_t lock;
+	unsigned long backtrack[COUNTER_BITS_TOTAL / BITS_PER_LONG];
+};
+
+struct noise_symmetric_key {
+	u8 key[NOISE_SYMMETRIC_KEY_LEN];
+	u64 birthdate;
+	bool is_valid;
+};
+
+struct noise_keypair {
+	struct index_hashtable_entry entry;
+	struct noise_symmetric_key sending;
+	atomic64_t sending_counter;
+	struct noise_symmetric_key receiving;
+	struct noise_replay_counter receiving_counter;
+	__le32 remote_index;
+	bool i_am_the_initiator;
+	struct kref refcount;
+	struct rcu_head rcu;
+	u64 internal_id;
+};
+
+struct noise_keypairs {
+	struct noise_keypair __rcu *current_keypair;
+	struct noise_keypair __rcu *previous_keypair;
+	struct noise_keypair __rcu *next_keypair;
+	spinlock_t keypair_update_lock;
+};
+
+struct noise_static_identity {
+	u8 static_public[NOISE_PUBLIC_KEY_LEN];
+	u8 static_private[NOISE_PUBLIC_KEY_LEN];
+	struct rw_semaphore lock;
+	bool has_identity;
+};
+
+enum noise_handshake_state {
+	HANDSHAKE_ZEROED,
+	HANDSHAKE_CREATED_INITIATION,
+	HANDSHAKE_CONSUMED_INITIATION,
+	HANDSHAKE_CREATED_RESPONSE,
+	HANDSHAKE_CONSUMED_RESPONSE
+};
+
+struct noise_handshake {
+	struct index_hashtable_entry entry;
+
+	enum noise_handshake_state state;
+	u64 last_initiation_consumption;
+
+	struct noise_static_identity *static_identity;
+
+	u8 ephemeral_private[NOISE_PUBLIC_KEY_LEN];
+	u8 remote_static[NOISE_PUBLIC_KEY_LEN];
+	u8 remote_ephemeral[NOISE_PUBLIC_KEY_LEN];
+	u8 precomputed_static_static[NOISE_PUBLIC_KEY_LEN];
+
+	u8 preshared_key[NOISE_SYMMETRIC_KEY_LEN];
+
+	u8 hash[NOISE_HASH_LEN];
+	u8 chaining_key[NOISE_HASH_LEN];
+
+	u8 latest_timestamp[NOISE_TIMESTAMP_LEN];
+	__le32 remote_index;
+
+	/* Protects all members except the immutable (after noise_handshake_
+	 * init): remote_static, precomputed_static_static, static_identity.
+	 */
+	struct rw_semaphore lock;
+};
+
+struct wg_device;
+
+void wg_noise_init(void);
+void wg_noise_handshake_init(struct noise_handshake *handshake,
+			     struct noise_static_identity *static_identity,
+			     const u8 peer_public_key[NOISE_PUBLIC_KEY_LEN],
+			     const u8 peer_preshared_key[NOISE_SYMMETRIC_KEY_LEN],
+			     struct wg_peer *peer);
+void wg_noise_handshake_clear(struct noise_handshake *handshake);
+static inline void wg_noise_reset_last_sent_handshake(atomic64_t *handshake_ns)
+{
+	atomic64_set(handshake_ns, ktime_get_coarse_boottime_ns() -
+				       (u64)(REKEY_TIMEOUT + 1) * NSEC_PER_SEC);
+}
+
+void wg_noise_keypair_put(struct noise_keypair *keypair, bool unreference_now);
+struct noise_keypair *wg_noise_keypair_get(struct noise_keypair *keypair);
+void wg_noise_keypairs_clear(struct noise_keypairs *keypairs);
+bool wg_noise_received_with_keypair(struct noise_keypairs *keypairs,
+				    struct noise_keypair *received_keypair);
+void wg_noise_expire_current_peer_keypairs(struct wg_peer *peer);
+
+void wg_noise_set_static_identity_private_key(
+	struct noise_static_identity *static_identity,
+	const u8 private_key[NOISE_PUBLIC_KEY_LEN]);
+void wg_noise_precompute_static_static(struct wg_peer *peer);
+
+bool
+wg_noise_handshake_create_initiation(struct message_handshake_initiation *dst,
+				     struct noise_handshake *handshake);
+struct wg_peer *
+wg_noise_handshake_consume_initiation(struct message_handshake_initiation *src,
+				      struct wg_device *wg);
+
+bool wg_noise_handshake_create_response(struct message_handshake_response *dst,
+					struct noise_handshake *handshake);
+struct wg_peer *
+wg_noise_handshake_consume_response(struct message_handshake_response *src,
+				    struct wg_device *wg);
+
+bool wg_noise_handshake_begin_session(struct noise_handshake *handshake,
+				      struct noise_keypairs *keypairs);
+
+#endif /* _WG_NOISE_H */
diff --git a/drivers/net/wireguard/peer.c b/drivers/net/wireguard/peer.c
new file mode 100644
index 0000000..1d634bd
--- /dev/null
+++ b/drivers/net/wireguard/peer.c
@@ -0,0 +1,237 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "peer.h"
+#include "device.h"
+#include "queueing.h"
+#include "timers.h"
+#include "peerlookup.h"
+#include "noise.h"
+
+#include <linux/kref.h>
+#include <linux/lockdep.h>
+#include <linux/rcupdate.h>
+#include <linux/list.h>
+
+static atomic64_t peer_counter = ATOMIC64_INIT(0);
+
+struct wg_peer *wg_peer_create(struct wg_device *wg,
+			       const u8 public_key[NOISE_PUBLIC_KEY_LEN],
+			       const u8 preshared_key[NOISE_SYMMETRIC_KEY_LEN])
+{
+	struct wg_peer *peer;
+	int ret = -ENOMEM;
+
+	lockdep_assert_held(&wg->device_update_lock);
+
+	if (wg->num_peers >= MAX_PEERS_PER_DEVICE)
+		return ERR_PTR(ret);
+
+	peer = kzalloc(sizeof(*peer), GFP_KERNEL);
+	if (unlikely(!peer))
+		return ERR_PTR(ret);
+	peer->device = wg;
+
+	wg_noise_handshake_init(&peer->handshake, &wg->static_identity,
+				public_key, preshared_key, peer);
+	if (dst_cache_init(&peer->endpoint_cache, GFP_KERNEL))
+		goto err_1;
+	if (wg_packet_queue_init(&peer->tx_queue, wg_packet_tx_worker, false,
+				 MAX_QUEUED_PACKETS))
+		goto err_2;
+	if (wg_packet_queue_init(&peer->rx_queue, NULL, false,
+				 MAX_QUEUED_PACKETS))
+		goto err_3;
+
+	peer->internal_id = atomic64_inc_return(&peer_counter);
+	peer->serial_work_cpu = nr_cpumask_bits;
+	wg_cookie_init(&peer->latest_cookie);
+	wg_timers_init(peer);
+	wg_cookie_checker_precompute_peer_keys(peer);
+	spin_lock_init(&peer->keypairs.keypair_update_lock);
+	INIT_WORK(&peer->transmit_handshake_work,
+		  wg_packet_handshake_send_worker);
+	rwlock_init(&peer->endpoint_lock);
+	kref_init(&peer->refcount);
+	skb_queue_head_init(&peer->staged_packet_queue);
+	wg_noise_reset_last_sent_handshake(&peer->last_sent_handshake);
+	set_bit(NAPI_STATE_NO_BUSY_POLL, &peer->napi.state);
+	netif_napi_add(wg->dev, &peer->napi, wg_packet_rx_poll,
+		       NAPI_POLL_WEIGHT);
+	napi_enable(&peer->napi);
+	list_add_tail(&peer->peer_list, &wg->peer_list);
+	INIT_LIST_HEAD(&peer->allowedips_list);
+	wg_pubkey_hashtable_add(wg->peer_hashtable, peer);
+	++wg->num_peers;
+	pr_debug("%s: Peer %llu created\n", wg->dev->name, peer->internal_id);
+	return peer;
+
+err_3:
+	wg_packet_queue_free(&peer->tx_queue, false);
+err_2:
+	dst_cache_destroy(&peer->endpoint_cache);
+err_1:
+	kfree(peer);
+	return ERR_PTR(ret);
+}
+
+struct wg_peer *wg_peer_get_maybe_zero(struct wg_peer *peer)
+{
+	RCU_LOCKDEP_WARN(!rcu_read_lock_bh_held(),
+			 "Taking peer reference without holding the RCU read lock");
+	if (unlikely(!peer || !kref_get_unless_zero(&peer->refcount)))
+		return NULL;
+	return peer;
+}
+
+static void peer_make_dead(struct wg_peer *peer)
+{
+	/* Remove from configuration-time lookup structures. */
+	list_del_init(&peer->peer_list);
+	wg_allowedips_remove_by_peer(&peer->device->peer_allowedips, peer,
+				     &peer->device->device_update_lock);
+	wg_pubkey_hashtable_remove(peer->device->peer_hashtable, peer);
+
+	/* Mark as dead, so that we don't allow jumping contexts after. */
+	WRITE_ONCE(peer->is_dead, true);
+
+	/* The caller must now synchronize_rcu() for this to take effect. */
+}
+
+static void peer_remove_after_dead(struct wg_peer *peer)
+{
+	WARN_ON(!peer->is_dead);
+
+	/* No more keypairs can be created for this peer, since is_dead protects
+	 * add_new_keypair, so we can now destroy existing ones.
+	 */
+	wg_noise_keypairs_clear(&peer->keypairs);
+
+	/* Destroy all ongoing timers that were in-flight at the beginning of
+	 * this function.
+	 */
+	wg_timers_stop(peer);
+
+	/* The transition between packet encryption/decryption queues isn't
+	 * guarded by is_dead, but each reference's life is strictly bounded by
+	 * two generations: once for parallel crypto and once for serial
+	 * ingestion, so we can simply flush twice, and be sure that we no
+	 * longer have references inside these queues.
+	 */
+
+	/* a) For encrypt/decrypt. */
+	flush_workqueue(peer->device->packet_crypt_wq);
+	/* b.1) For send (but not receive, since that's napi). */
+	flush_workqueue(peer->device->packet_crypt_wq);
+	/* b.2.1) For receive (but not send, since that's wq). */
+	napi_disable(&peer->napi);
+	/* b.2.1) It's now safe to remove the napi struct, which must be done
+	 * here from process context.
+	 */
+	netif_napi_del(&peer->napi);
+
+	/* Ensure any workstructs we own (like transmit_handshake_work or
+	 * clear_peer_work) no longer are in use.
+	 */
+	flush_workqueue(peer->device->handshake_send_wq);
+
+	/* After the above flushes, a peer might still be active in a few
+	 * different contexts: 1) from xmit(), before hitting is_dead and
+	 * returning, 2) from wg_packet_consume_data(), before hitting is_dead
+	 * and returning, 3) from wg_receive_handshake_packet() after a point
+	 * where it has processed an incoming handshake packet, but where
+	 * all calls to pass it off to timers fails because of is_dead. We won't
+	 * have new references in (1) eventually, because we're removed from
+	 * allowedips; we won't have new references in (2) eventually, because
+	 * wg_index_hashtable_lookup will always return NULL, since we removed
+	 * all existing keypairs and no more can be created; we won't have new
+	 * references in (3) eventually, because we're removed from the pubkey
+	 * hash table, which allows for a maximum of one handshake response,
+	 * via the still-uncleared index hashtable entry, but not more than one,
+	 * and in wg_cookie_message_consume, the lookup eventually gets a peer
+	 * with a refcount of zero, so no new reference is taken.
+	 */
+
+	--peer->device->num_peers;
+	wg_peer_put(peer);
+}
+
+/* We have a separate "remove" function make sure that all active places where
+ * a peer is currently operating will eventually come to an end and not pass
+ * their reference onto another context.
+ */
+void wg_peer_remove(struct wg_peer *peer)
+{
+	if (unlikely(!peer))
+		return;
+	lockdep_assert_held(&peer->device->device_update_lock);
+
+	peer_make_dead(peer);
+	synchronize_rcu();
+	peer_remove_after_dead(peer);
+}
+
+void wg_peer_remove_all(struct wg_device *wg)
+{
+	struct wg_peer *peer, *temp;
+	LIST_HEAD(dead_peers);
+
+	lockdep_assert_held(&wg->device_update_lock);
+
+	/* Avoid having to traverse individually for each one. */
+	wg_allowedips_free(&wg->peer_allowedips, &wg->device_update_lock);
+
+	list_for_each_entry_safe(peer, temp, &wg->peer_list, peer_list) {
+		peer_make_dead(peer);
+		list_add_tail(&peer->peer_list, &dead_peers);
+	}
+	synchronize_rcu();
+	list_for_each_entry_safe(peer, temp, &dead_peers, peer_list)
+		peer_remove_after_dead(peer);
+}
+
+static void rcu_release(struct rcu_head *rcu)
+{
+	struct wg_peer *peer = container_of(rcu, struct wg_peer, rcu);
+
+	dst_cache_destroy(&peer->endpoint_cache);
+	wg_packet_queue_free(&peer->rx_queue, false);
+	wg_packet_queue_free(&peer->tx_queue, false);
+
+	/* The final zeroing takes care of clearing any remaining handshake key
+	 * material and other potentially sensitive information.
+	 */
+	kzfree(peer);
+}
+
+static void kref_release(struct kref *refcount)
+{
+	struct wg_peer *peer = container_of(refcount, struct wg_peer, refcount);
+
+	pr_debug("%s: Peer %llu (%pISpfsc) destroyed\n",
+		 peer->device->dev->name, peer->internal_id,
+		 &peer->endpoint.addr);
+
+	/* Remove ourself from dynamic runtime lookup structures, now that the
+	 * last reference is gone.
+	 */
+	wg_index_hashtable_remove(peer->device->index_hashtable,
+				  &peer->handshake.entry);
+
+	/* Remove any lingering packets that didn't have a chance to be
+	 * transmitted.
+	 */
+	wg_packet_purge_staged_packets(peer);
+
+	/* Free the memory used. */
+	call_rcu(&peer->rcu, rcu_release);
+}
+
+void wg_peer_put(struct wg_peer *peer)
+{
+	if (unlikely(!peer))
+		return;
+	kref_put(&peer->refcount, kref_release);
+}
diff --git a/drivers/net/wireguard/peer.h b/drivers/net/wireguard/peer.h
new file mode 100644
index 0000000..23af409
--- /dev/null
+++ b/drivers/net/wireguard/peer.h
@@ -0,0 +1,83 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_PEER_H
+#define _WG_PEER_H
+
+#include "device.h"
+#include "noise.h"
+#include "cookie.h"
+
+#include <linux/types.h>
+#include <linux/netfilter.h>
+#include <linux/spinlock.h>
+#include <linux/kref.h>
+#include <net/dst_cache.h>
+
+struct wg_device;
+
+struct endpoint {
+	union {
+		struct sockaddr addr;
+		struct sockaddr_in addr4;
+		struct sockaddr_in6 addr6;
+	};
+	union {
+		struct {
+			struct in_addr src4;
+			/* Essentially the same as addr6->scope_id */
+			int src_if4;
+		};
+		struct in6_addr src6;
+	};
+};
+
+struct wg_peer {
+	struct wg_device *device;
+	struct crypt_queue tx_queue, rx_queue;
+	struct sk_buff_head staged_packet_queue;
+	int serial_work_cpu;
+	struct noise_keypairs keypairs;
+	struct endpoint endpoint;
+	struct dst_cache endpoint_cache;
+	rwlock_t endpoint_lock;
+	struct noise_handshake handshake;
+	atomic64_t last_sent_handshake;
+	struct work_struct transmit_handshake_work, clear_peer_work;
+	struct cookie latest_cookie;
+	struct hlist_node pubkey_hash;
+	u64 rx_bytes, tx_bytes;
+	struct timer_list timer_retransmit_handshake, timer_send_keepalive;
+	struct timer_list timer_new_handshake, timer_zero_key_material;
+	struct timer_list timer_persistent_keepalive;
+	unsigned int timer_handshake_attempts;
+	u16 persistent_keepalive_interval;
+	bool timer_need_another_keepalive;
+	bool sent_lastminute_handshake;
+	struct timespec64 walltime_last_handshake;
+	struct kref refcount;
+	struct rcu_head rcu;
+	struct list_head peer_list;
+	struct list_head allowedips_list;
+	u64 internal_id;
+	struct napi_struct napi;
+	bool is_dead;
+};
+
+struct wg_peer *wg_peer_create(struct wg_device *wg,
+			       const u8 public_key[NOISE_PUBLIC_KEY_LEN],
+			       const u8 preshared_key[NOISE_SYMMETRIC_KEY_LEN]);
+
+struct wg_peer *__must_check wg_peer_get_maybe_zero(struct wg_peer *peer);
+static inline struct wg_peer *wg_peer_get(struct wg_peer *peer)
+{
+	kref_get(&peer->refcount);
+	return peer;
+}
+void wg_peer_put(struct wg_peer *peer);
+void wg_peer_remove(struct wg_peer *peer);
+void wg_peer_remove_all(struct wg_device *wg);
+
+#endif /* _WG_PEER_H */
diff --git a/drivers/net/wireguard/peerlookup.c b/drivers/net/wireguard/peerlookup.c
new file mode 100644
index 0000000..f2783aa
--- /dev/null
+++ b/drivers/net/wireguard/peerlookup.c
@@ -0,0 +1,226 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "peerlookup.h"
+#include "peer.h"
+#include "noise.h"
+
+static struct hlist_head *pubkey_bucket(struct pubkey_hashtable *table,
+					const u8 pubkey[NOISE_PUBLIC_KEY_LEN])
+{
+	/* siphash gives us a secure 64bit number based on a random key. Since
+	 * the bits are uniformly distributed, we can then mask off to get the
+	 * bits we need.
+	 */
+	const u64 hash = siphash(pubkey, NOISE_PUBLIC_KEY_LEN, &table->key);
+
+	return &table->hashtable[hash & (HASH_SIZE(table->hashtable) - 1)];
+}
+
+struct pubkey_hashtable *wg_pubkey_hashtable_alloc(void)
+{
+	struct pubkey_hashtable *table = kvmalloc(sizeof(*table), GFP_KERNEL);
+
+	if (!table)
+		return NULL;
+
+	get_random_bytes(&table->key, sizeof(table->key));
+	hash_init(table->hashtable);
+	mutex_init(&table->lock);
+	return table;
+}
+
+void wg_pubkey_hashtable_add(struct pubkey_hashtable *table,
+			     struct wg_peer *peer)
+{
+	mutex_lock(&table->lock);
+	hlist_add_head_rcu(&peer->pubkey_hash,
+			   pubkey_bucket(table, peer->handshake.remote_static));
+	mutex_unlock(&table->lock);
+}
+
+void wg_pubkey_hashtable_remove(struct pubkey_hashtable *table,
+				struct wg_peer *peer)
+{
+	mutex_lock(&table->lock);
+	hlist_del_init_rcu(&peer->pubkey_hash);
+	mutex_unlock(&table->lock);
+}
+
+/* Returns a strong reference to a peer */
+struct wg_peer *
+wg_pubkey_hashtable_lookup(struct pubkey_hashtable *table,
+			   const u8 pubkey[NOISE_PUBLIC_KEY_LEN])
+{
+	struct wg_peer *iter_peer, *peer = NULL;
+
+	rcu_read_lock_bh();
+	hlist_for_each_entry_rcu_bh(iter_peer, pubkey_bucket(table, pubkey),
+				    pubkey_hash) {
+		if (!memcmp(pubkey, iter_peer->handshake.remote_static,
+			    NOISE_PUBLIC_KEY_LEN)) {
+			peer = iter_peer;
+			break;
+		}
+	}
+	peer = wg_peer_get_maybe_zero(peer);
+	rcu_read_unlock_bh();
+	return peer;
+}
+
+static struct hlist_head *index_bucket(struct index_hashtable *table,
+				       const __le32 index)
+{
+	/* Since the indices are random and thus all bits are uniformly
+	 * distributed, we can find its bucket simply by masking.
+	 */
+	return &table->hashtable[(__force u32)index &
+				 (HASH_SIZE(table->hashtable) - 1)];
+}
+
+struct index_hashtable *wg_index_hashtable_alloc(void)
+{
+	struct index_hashtable *table = kvmalloc(sizeof(*table), GFP_KERNEL);
+
+	if (!table)
+		return NULL;
+
+	hash_init(table->hashtable);
+	spin_lock_init(&table->lock);
+	return table;
+}
+
+/* At the moment, we limit ourselves to 2^20 total peers, which generally might
+ * amount to 2^20*3 items in this hashtable. The algorithm below works by
+ * picking a random number and testing it. We can see that these limits mean we
+ * usually succeed pretty quickly:
+ *
+ * >>> def calculation(tries, size):
+ * ...     return (size / 2**32)**(tries - 1) *  (1 - (size / 2**32))
+ * ...
+ * >>> calculation(1, 2**20 * 3)
+ * 0.999267578125
+ * >>> calculation(2, 2**20 * 3)
+ * 0.0007318854331970215
+ * >>> calculation(3, 2**20 * 3)
+ * 5.360489012673497e-07
+ * >>> calculation(4, 2**20 * 3)
+ * 3.9261394135792216e-10
+ *
+ * At the moment, we don't do any masking, so this algorithm isn't exactly
+ * constant time in either the random guessing or in the hash list lookup. We
+ * could require a minimum of 3 tries, which would successfully mask the
+ * guessing. this would not, however, help with the growing hash lengths, which
+ * is another thing to consider moving forward.
+ */
+
+__le32 wg_index_hashtable_insert(struct index_hashtable *table,
+				 struct index_hashtable_entry *entry)
+{
+	struct index_hashtable_entry *existing_entry;
+
+	spin_lock_bh(&table->lock);
+	hlist_del_init_rcu(&entry->index_hash);
+	spin_unlock_bh(&table->lock);
+
+	rcu_read_lock_bh();
+
+search_unused_slot:
+	/* First we try to find an unused slot, randomly, while unlocked. */
+	entry->index = (__force __le32)get_random_u32();
+	hlist_for_each_entry_rcu_bh(existing_entry,
+				    index_bucket(table, entry->index),
+				    index_hash) {
+		if (existing_entry->index == entry->index)
+			/* If it's already in use, we continue searching. */
+			goto search_unused_slot;
+	}
+
+	/* Once we've found an unused slot, we lock it, and then double-check
+	 * that nobody else stole it from us.
+	 */
+	spin_lock_bh(&table->lock);
+	hlist_for_each_entry_rcu_bh(existing_entry,
+				    index_bucket(table, entry->index),
+				    index_hash) {
+		if (existing_entry->index == entry->index) {
+			spin_unlock_bh(&table->lock);
+			/* If it was stolen, we start over. */
+			goto search_unused_slot;
+		}
+	}
+	/* Otherwise, we know we have it exclusively (since we're locked),
+	 * so we insert.
+	 */
+	hlist_add_head_rcu(&entry->index_hash,
+			   index_bucket(table, entry->index));
+	spin_unlock_bh(&table->lock);
+
+	rcu_read_unlock_bh();
+
+	return entry->index;
+}
+
+bool wg_index_hashtable_replace(struct index_hashtable *table,
+				struct index_hashtable_entry *old,
+				struct index_hashtable_entry *new)
+{
+	bool ret;
+
+	spin_lock_bh(&table->lock);
+	ret = !hlist_unhashed(&old->index_hash);
+	if (unlikely(!ret))
+		goto out;
+
+	new->index = old->index;
+	hlist_replace_rcu(&old->index_hash, &new->index_hash);
+
+	/* Calling init here NULLs out index_hash, and in fact after this
+	 * function returns, it's theoretically possible for this to get
+	 * reinserted elsewhere. That means the RCU lookup below might either
+	 * terminate early or jump between buckets, in which case the packet
+	 * simply gets dropped, which isn't terrible.
+	 */
+	INIT_HLIST_NODE(&old->index_hash);
+out:
+	spin_unlock_bh(&table->lock);
+	return ret;
+}
+
+void wg_index_hashtable_remove(struct index_hashtable *table,
+			       struct index_hashtable_entry *entry)
+{
+	spin_lock_bh(&table->lock);
+	hlist_del_init_rcu(&entry->index_hash);
+	spin_unlock_bh(&table->lock);
+}
+
+/* Returns a strong reference to a entry->peer */
+struct index_hashtable_entry *
+wg_index_hashtable_lookup(struct index_hashtable *table,
+			  const enum index_hashtable_type type_mask,
+			  const __le32 index, struct wg_peer **peer)
+{
+	struct index_hashtable_entry *iter_entry, *entry = NULL;
+
+	rcu_read_lock_bh();
+	hlist_for_each_entry_rcu_bh(iter_entry, index_bucket(table, index),
+				    index_hash) {
+		if (iter_entry->index == index) {
+			if (likely(iter_entry->type & type_mask))
+				entry = iter_entry;
+			break;
+		}
+	}
+	if (likely(entry)) {
+		entry->peer = wg_peer_get_maybe_zero(entry->peer);
+		if (likely(entry->peer))
+			*peer = entry->peer;
+		else
+			entry = NULL;
+	}
+	rcu_read_unlock_bh();
+	return entry;
+}
diff --git a/drivers/net/wireguard/peerlookup.h b/drivers/net/wireguard/peerlookup.h
new file mode 100644
index 0000000..ced8117
--- /dev/null
+++ b/drivers/net/wireguard/peerlookup.h
@@ -0,0 +1,64 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_PEERLOOKUP_H
+#define _WG_PEERLOOKUP_H
+
+#include "messages.h"
+
+#include <linux/hashtable.h>
+#include <linux/mutex.h>
+#include <linux/siphash.h>
+
+struct wg_peer;
+
+struct pubkey_hashtable {
+	/* TODO: move to rhashtable */
+	DECLARE_HASHTABLE(hashtable, 11);
+	siphash_key_t key;
+	struct mutex lock;
+};
+
+struct pubkey_hashtable *wg_pubkey_hashtable_alloc(void);
+void wg_pubkey_hashtable_add(struct pubkey_hashtable *table,
+			     struct wg_peer *peer);
+void wg_pubkey_hashtable_remove(struct pubkey_hashtable *table,
+				struct wg_peer *peer);
+struct wg_peer *
+wg_pubkey_hashtable_lookup(struct pubkey_hashtable *table,
+			   const u8 pubkey[NOISE_PUBLIC_KEY_LEN]);
+
+struct index_hashtable {
+	/* TODO: move to rhashtable */
+	DECLARE_HASHTABLE(hashtable, 13);
+	spinlock_t lock;
+};
+
+enum index_hashtable_type {
+	INDEX_HASHTABLE_HANDSHAKE = 1U << 0,
+	INDEX_HASHTABLE_KEYPAIR = 1U << 1
+};
+
+struct index_hashtable_entry {
+	struct wg_peer *peer;
+	struct hlist_node index_hash;
+	enum index_hashtable_type type;
+	__le32 index;
+};
+
+struct index_hashtable *wg_index_hashtable_alloc(void);
+__le32 wg_index_hashtable_insert(struct index_hashtable *table,
+				 struct index_hashtable_entry *entry);
+bool wg_index_hashtable_replace(struct index_hashtable *table,
+				struct index_hashtable_entry *old,
+				struct index_hashtable_entry *new);
+void wg_index_hashtable_remove(struct index_hashtable *table,
+			       struct index_hashtable_entry *entry);
+struct index_hashtable_entry *
+wg_index_hashtable_lookup(struct index_hashtable *table,
+			  const enum index_hashtable_type type_mask,
+			  const __le32 index, struct wg_peer **peer);
+
+#endif /* _WG_PEERLOOKUP_H */
diff --git a/drivers/net/wireguard/queueing.c b/drivers/net/wireguard/queueing.c
new file mode 100644
index 0000000..71b8e80
--- /dev/null
+++ b/drivers/net/wireguard/queueing.c
@@ -0,0 +1,55 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "queueing.h"
+
+struct multicore_worker __percpu *
+wg_packet_percpu_multicore_worker_alloc(work_func_t function, void *ptr)
+{
+	int cpu;
+	struct multicore_worker __percpu *worker =
+		alloc_percpu(struct multicore_worker);
+
+	if (!worker)
+		return NULL;
+
+	for_each_possible_cpu(cpu) {
+		per_cpu_ptr(worker, cpu)->ptr = ptr;
+		INIT_WORK(&per_cpu_ptr(worker, cpu)->work, function);
+	}
+	return worker;
+}
+
+int wg_packet_queue_init(struct crypt_queue *queue, work_func_t function,
+			 bool multicore, unsigned int len)
+{
+	int ret;
+
+	memset(queue, 0, sizeof(*queue));
+	ret = ptr_ring_init(&queue->ring, len, GFP_KERNEL);
+	if (ret)
+		return ret;
+	if (function) {
+		if (multicore) {
+			queue->worker = wg_packet_percpu_multicore_worker_alloc(
+				function, queue);
+			if (!queue->worker) {
+				ptr_ring_cleanup(&queue->ring, NULL);
+				return -ENOMEM;
+			}
+		} else {
+			INIT_WORK(&queue->work, function);
+		}
+	}
+	return 0;
+}
+
+void wg_packet_queue_free(struct crypt_queue *queue, bool multicore)
+{
+	if (multicore)
+		free_percpu(queue->worker);
+	WARN_ON(!__ptr_ring_empty(&queue->ring));
+	ptr_ring_cleanup(&queue->ring, NULL);
+}
diff --git a/drivers/net/wireguard/queueing.h b/drivers/net/wireguard/queueing.h
new file mode 100644
index 0000000..dfb674e
--- /dev/null
+++ b/drivers/net/wireguard/queueing.h
@@ -0,0 +1,193 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_QUEUEING_H
+#define _WG_QUEUEING_H
+
+#include "peer.h"
+#include <linux/types.h>
+#include <linux/skbuff.h>
+#include <linux/ip.h>
+#include <linux/ipv6.h>
+#include <net/ip_tunnels.h>
+
+struct wg_device;
+struct wg_peer;
+struct multicore_worker;
+struct crypt_queue;
+struct sk_buff;
+
+/* queueing.c APIs: */
+int wg_packet_queue_init(struct crypt_queue *queue, work_func_t function,
+			 bool multicore, unsigned int len);
+void wg_packet_queue_free(struct crypt_queue *queue, bool multicore);
+struct multicore_worker __percpu *
+wg_packet_percpu_multicore_worker_alloc(work_func_t function, void *ptr);
+
+/* receive.c APIs: */
+void wg_packet_receive(struct wg_device *wg, struct sk_buff *skb);
+void wg_packet_handshake_receive_worker(struct work_struct *work);
+/* NAPI poll function: */
+int wg_packet_rx_poll(struct napi_struct *napi, int budget);
+/* Workqueue worker: */
+void wg_packet_decrypt_worker(struct work_struct *work);
+
+/* send.c APIs: */
+void wg_packet_send_queued_handshake_initiation(struct wg_peer *peer,
+						bool is_retry);
+void wg_packet_send_handshake_response(struct wg_peer *peer);
+void wg_packet_send_handshake_cookie(struct wg_device *wg,
+				     struct sk_buff *initiating_skb,
+				     __le32 sender_index);
+void wg_packet_send_keepalive(struct wg_peer *peer);
+void wg_packet_purge_staged_packets(struct wg_peer *peer);
+void wg_packet_send_staged_packets(struct wg_peer *peer);
+/* Workqueue workers: */
+void wg_packet_handshake_send_worker(struct work_struct *work);
+void wg_packet_tx_worker(struct work_struct *work);
+void wg_packet_encrypt_worker(struct work_struct *work);
+
+enum packet_state {
+	PACKET_STATE_UNCRYPTED,
+	PACKET_STATE_CRYPTED,
+	PACKET_STATE_DEAD
+};
+
+struct packet_cb {
+	u64 nonce;
+	struct noise_keypair *keypair;
+	atomic_t state;
+	u32 mtu;
+	u8 ds;
+};
+
+#define PACKET_CB(skb) ((struct packet_cb *)((skb)->cb))
+#define PACKET_PEER(skb) (PACKET_CB(skb)->keypair->entry.peer)
+
+static inline bool wg_check_packet_protocol(struct sk_buff *skb)
+{
+	__be16 real_protocol = ip_tunnel_parse_protocol(skb);
+	return real_protocol && skb->protocol == real_protocol;
+}
+
+static inline void wg_reset_packet(struct sk_buff *skb, bool encapsulating)
+{
+	u8 l4_hash = skb->l4_hash;
+	u8 sw_hash = skb->sw_hash;
+	u32 hash = skb->hash;
+	skb_scrub_packet(skb, true);
+	memset(&skb->headers_start, 0,
+	       offsetof(struct sk_buff, headers_end) -
+		       offsetof(struct sk_buff, headers_start));
+	if (encapsulating) {
+		skb->l4_hash = l4_hash;
+		skb->sw_hash = sw_hash;
+		skb->hash = hash;
+	}
+	skb->queue_mapping = 0;
+	skb->nohdr = 0;
+	skb->peeked = 0;
+	skb->mac_len = 0;
+	skb->dev = NULL;
+#ifdef CONFIG_NET_SCHED
+	skb->tc_index = 0;
+#endif
+	skb_reset_redirect(skb);
+	skb->hdr_len = skb_headroom(skb);
+	skb_reset_mac_header(skb);
+	skb_reset_network_header(skb);
+	skb_reset_transport_header(skb);
+	skb_probe_transport_header(skb);
+	skb_reset_inner_headers(skb);
+}
+
+static inline int wg_cpumask_choose_online(int *stored_cpu, unsigned int id)
+{
+	unsigned int cpu = *stored_cpu, cpu_index, i;
+
+	if (unlikely(cpu == nr_cpumask_bits ||
+		     !cpumask_test_cpu(cpu, cpu_online_mask))) {
+		cpu_index = id % cpumask_weight(cpu_online_mask);
+		cpu = cpumask_first(cpu_online_mask);
+		for (i = 0; i < cpu_index; ++i)
+			cpu = cpumask_next(cpu, cpu_online_mask);
+		*stored_cpu = cpu;
+	}
+	return cpu;
+}
+
+/* This function is racy, in the sense that next is unlocked, so it could return
+ * the same CPU twice. A race-free version of this would be to instead store an
+ * atomic sequence number, do an increment-and-return, and then iterate through
+ * every possible CPU until we get to that index -- choose_cpu. However that's
+ * a bit slower, and it doesn't seem like this potential race actually
+ * introduces any performance loss, so we live with it.
+ */
+static inline int wg_cpumask_next_online(int *next)
+{
+	int cpu = *next;
+
+	while (unlikely(!cpumask_test_cpu(cpu, cpu_online_mask)))
+		cpu = cpumask_next(cpu, cpu_online_mask) % nr_cpumask_bits;
+	*next = cpumask_next(cpu, cpu_online_mask) % nr_cpumask_bits;
+	return cpu;
+}
+
+static inline int wg_queue_enqueue_per_device_and_peer(
+	struct crypt_queue *device_queue, struct crypt_queue *peer_queue,
+	struct sk_buff *skb, struct workqueue_struct *wq, int *next_cpu)
+{
+	int cpu;
+
+	atomic_set_release(&PACKET_CB(skb)->state, PACKET_STATE_UNCRYPTED);
+	/* We first queue this up for the peer ingestion, but the consumer
+	 * will wait for the state to change to CRYPTED or DEAD before.
+	 */
+	if (unlikely(ptr_ring_produce_bh(&peer_queue->ring, skb)))
+		return -ENOSPC;
+	/* Then we queue it up in the device queue, which consumes the
+	 * packet as soon as it can.
+	 */
+	cpu = wg_cpumask_next_online(next_cpu);
+	if (unlikely(ptr_ring_produce_bh(&device_queue->ring, skb)))
+		return -EPIPE;
+	queue_work_on(cpu, wq, &per_cpu_ptr(device_queue->worker, cpu)->work);
+	return 0;
+}
+
+static inline void wg_queue_enqueue_per_peer(struct crypt_queue *queue,
+					     struct sk_buff *skb,
+					     enum packet_state state)
+{
+	/* We take a reference, because as soon as we call atomic_set, the
+	 * peer can be freed from below us.
+	 */
+	struct wg_peer *peer = wg_peer_get(PACKET_PEER(skb));
+
+	atomic_set_release(&PACKET_CB(skb)->state, state);
+	queue_work_on(wg_cpumask_choose_online(&peer->serial_work_cpu,
+					       peer->internal_id),
+		      peer->device->packet_crypt_wq, &queue->work);
+	wg_peer_put(peer);
+}
+
+static inline void wg_queue_enqueue_per_peer_napi(struct sk_buff *skb,
+						  enum packet_state state)
+{
+	/* We take a reference, because as soon as we call atomic_set, the
+	 * peer can be freed from below us.
+	 */
+	struct wg_peer *peer = wg_peer_get(PACKET_PEER(skb));
+
+	atomic_set_release(&PACKET_CB(skb)->state, state);
+	napi_schedule(&peer->napi);
+	wg_peer_put(peer);
+}
+
+#ifdef DEBUG
+bool wg_packet_counter_selftest(void);
+#endif
+
+#endif /* _WG_QUEUEING_H */
diff --git a/drivers/net/wireguard/ratelimiter.c b/drivers/net/wireguard/ratelimiter.c
new file mode 100644
index 0000000..3fedd1d
--- /dev/null
+++ b/drivers/net/wireguard/ratelimiter.c
@@ -0,0 +1,223 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "ratelimiter.h"
+#include <linux/siphash.h>
+#include <linux/mm.h>
+#include <linux/slab.h>
+#include <net/ip.h>
+
+static struct kmem_cache *entry_cache;
+static hsiphash_key_t key;
+static spinlock_t table_lock = __SPIN_LOCK_UNLOCKED("ratelimiter_table_lock");
+static DEFINE_MUTEX(init_lock);
+static u64 init_refcnt; /* Protected by init_lock, hence not atomic. */
+static atomic_t total_entries = ATOMIC_INIT(0);
+static unsigned int max_entries, table_size;
+static void wg_ratelimiter_gc_entries(struct work_struct *);
+static DECLARE_DEFERRABLE_WORK(gc_work, wg_ratelimiter_gc_entries);
+static struct hlist_head *table_v4;
+#if IS_ENABLED(CONFIG_IPV6)
+static struct hlist_head *table_v6;
+#endif
+
+struct ratelimiter_entry {
+	u64 last_time_ns, tokens, ip;
+	void *net;
+	spinlock_t lock;
+	struct hlist_node hash;
+	struct rcu_head rcu;
+};
+
+enum {
+	PACKETS_PER_SECOND = 20,
+	PACKETS_BURSTABLE = 5,
+	PACKET_COST = NSEC_PER_SEC / PACKETS_PER_SECOND,
+	TOKEN_MAX = PACKET_COST * PACKETS_BURSTABLE
+};
+
+static void entry_free(struct rcu_head *rcu)
+{
+	kmem_cache_free(entry_cache,
+			container_of(rcu, struct ratelimiter_entry, rcu));
+	atomic_dec(&total_entries);
+}
+
+static void entry_uninit(struct ratelimiter_entry *entry)
+{
+	hlist_del_rcu(&entry->hash);
+	call_rcu(&entry->rcu, entry_free);
+}
+
+/* Calling this function with a NULL work uninits all entries. */
+static void wg_ratelimiter_gc_entries(struct work_struct *work)
+{
+	const u64 now = ktime_get_coarse_boottime_ns();
+	struct ratelimiter_entry *entry;
+	struct hlist_node *temp;
+	unsigned int i;
+
+	for (i = 0; i < table_size; ++i) {
+		spin_lock(&table_lock);
+		hlist_for_each_entry_safe(entry, temp, &table_v4[i], hash) {
+			if (unlikely(!work) ||
+			    now - entry->last_time_ns > NSEC_PER_SEC)
+				entry_uninit(entry);
+		}
+#if IS_ENABLED(CONFIG_IPV6)
+		hlist_for_each_entry_safe(entry, temp, &table_v6[i], hash) {
+			if (unlikely(!work) ||
+			    now - entry->last_time_ns > NSEC_PER_SEC)
+				entry_uninit(entry);
+		}
+#endif
+		spin_unlock(&table_lock);
+		if (likely(work))
+			cond_resched();
+	}
+	if (likely(work))
+		queue_delayed_work(system_power_efficient_wq, &gc_work, HZ);
+}
+
+bool wg_ratelimiter_allow(struct sk_buff *skb, struct net *net)
+{
+	/* We only take the bottom half of the net pointer, so that we can hash
+	 * 3 words in the end. This way, siphash's len param fits into the final
+	 * u32, and we don't incur an extra round.
+	 */
+	const u32 net_word = (unsigned long)net;
+	struct ratelimiter_entry *entry;
+	struct hlist_head *bucket;
+	u64 ip;
+
+	if (skb->protocol == htons(ETH_P_IP)) {
+		ip = (u64 __force)ip_hdr(skb)->saddr;
+		bucket = &table_v4[hsiphash_2u32(net_word, ip, &key) &
+				   (table_size - 1)];
+	}
+#if IS_ENABLED(CONFIG_IPV6)
+	else if (skb->protocol == htons(ETH_P_IPV6)) {
+		/* Only use 64 bits, so as to ratelimit the whole /64. */
+		memcpy(&ip, &ipv6_hdr(skb)->saddr, sizeof(ip));
+		bucket = &table_v6[hsiphash_3u32(net_word, ip >> 32, ip, &key) &
+				   (table_size - 1)];
+	}
+#endif
+	else
+		return false;
+	rcu_read_lock();
+	hlist_for_each_entry_rcu(entry, bucket, hash) {
+		if (entry->net == net && entry->ip == ip) {
+			u64 now, tokens;
+			bool ret;
+			/* Quasi-inspired by nft_limit.c, but this is actually a
+			 * slightly different algorithm. Namely, we incorporate
+			 * the burst as part of the maximum tokens, rather than
+			 * as part of the rate.
+			 */
+			spin_lock(&entry->lock);
+			now = ktime_get_coarse_boottime_ns();
+			tokens = min_t(u64, TOKEN_MAX,
+				       entry->tokens + now -
+					       entry->last_time_ns);
+			entry->last_time_ns = now;
+			ret = tokens >= PACKET_COST;
+			entry->tokens = ret ? tokens - PACKET_COST : tokens;
+			spin_unlock(&entry->lock);
+			rcu_read_unlock();
+			return ret;
+		}
+	}
+	rcu_read_unlock();
+
+	if (atomic_inc_return(&total_entries) > max_entries)
+		goto err_oom;
+
+	entry = kmem_cache_alloc(entry_cache, GFP_KERNEL);
+	if (unlikely(!entry))
+		goto err_oom;
+
+	entry->net = net;
+	entry->ip = ip;
+	INIT_HLIST_NODE(&entry->hash);
+	spin_lock_init(&entry->lock);
+	entry->last_time_ns = ktime_get_coarse_boottime_ns();
+	entry->tokens = TOKEN_MAX - PACKET_COST;
+	spin_lock(&table_lock);
+	hlist_add_head_rcu(&entry->hash, bucket);
+	spin_unlock(&table_lock);
+	return true;
+
+err_oom:
+	atomic_dec(&total_entries);
+	return false;
+}
+
+int wg_ratelimiter_init(void)
+{
+	mutex_lock(&init_lock);
+	if (++init_refcnt != 1)
+		goto out;
+
+	entry_cache = KMEM_CACHE(ratelimiter_entry, 0);
+	if (!entry_cache)
+		goto err;
+
+	/* xt_hashlimit.c uses a slightly different algorithm for ratelimiting,
+	 * but what it shares in common is that it uses a massive hashtable. So,
+	 * we borrow their wisdom about good table sizes on different systems
+	 * dependent on RAM. This calculation here comes from there.
+	 */
+	table_size = (totalram_pages() > (1U << 30) / PAGE_SIZE) ? 8192 :
+		max_t(unsigned long, 16, roundup_pow_of_two(
+			(totalram_pages() << PAGE_SHIFT) /
+			(1U << 14) / sizeof(struct hlist_head)));
+	max_entries = table_size * 8;
+
+	table_v4 = kvzalloc(table_size * sizeof(*table_v4), GFP_KERNEL);
+	if (unlikely(!table_v4))
+		goto err_kmemcache;
+
+#if IS_ENABLED(CONFIG_IPV6)
+	table_v6 = kvzalloc(table_size * sizeof(*table_v6), GFP_KERNEL);
+	if (unlikely(!table_v6)) {
+		kvfree(table_v4);
+		goto err_kmemcache;
+	}
+#endif
+
+	queue_delayed_work(system_power_efficient_wq, &gc_work, HZ);
+	get_random_bytes(&key, sizeof(key));
+out:
+	mutex_unlock(&init_lock);
+	return 0;
+
+err_kmemcache:
+	kmem_cache_destroy(entry_cache);
+err:
+	--init_refcnt;
+	mutex_unlock(&init_lock);
+	return -ENOMEM;
+}
+
+void wg_ratelimiter_uninit(void)
+{
+	mutex_lock(&init_lock);
+	if (!init_refcnt || --init_refcnt)
+		goto out;
+
+	cancel_delayed_work_sync(&gc_work);
+	wg_ratelimiter_gc_entries(NULL);
+	rcu_barrier();
+	kvfree(table_v4);
+#if IS_ENABLED(CONFIG_IPV6)
+	kvfree(table_v6);
+#endif
+	kmem_cache_destroy(entry_cache);
+out:
+	mutex_unlock(&init_lock);
+}
+
+#include "selftest/ratelimiter.c"
diff --git a/drivers/net/wireguard/ratelimiter.h b/drivers/net/wireguard/ratelimiter.h
new file mode 100644
index 0000000..83067f7
--- /dev/null
+++ b/drivers/net/wireguard/ratelimiter.h
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_RATELIMITER_H
+#define _WG_RATELIMITER_H
+
+#include <linux/skbuff.h>
+
+int wg_ratelimiter_init(void);
+void wg_ratelimiter_uninit(void);
+bool wg_ratelimiter_allow(struct sk_buff *skb, struct net *net);
+
+#ifdef DEBUG
+bool wg_ratelimiter_selftest(void);
+#endif
+
+#endif /* _WG_RATELIMITER_H */
diff --git a/drivers/net/wireguard/receive.c b/drivers/net/wireguard/receive.c
new file mode 100644
index 0000000..2c9551e
--- /dev/null
+++ b/drivers/net/wireguard/receive.c
@@ -0,0 +1,590 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "queueing.h"
+#include "device.h"
+#include "peer.h"
+#include "timers.h"
+#include "messages.h"
+#include "cookie.h"
+#include "socket.h"
+
+#include <linux/ip.h>
+#include <linux/ipv6.h>
+#include <linux/udp.h>
+#include <net/ip_tunnels.h>
+
+/* Must be called with bh disabled. */
+static void update_rx_stats(struct wg_peer *peer, size_t len)
+{
+	struct pcpu_sw_netstats *tstats =
+		get_cpu_ptr(peer->device->dev->tstats);
+
+	u64_stats_update_begin(&tstats->syncp);
+	++tstats->rx_packets;
+	tstats->rx_bytes += len;
+	peer->rx_bytes += len;
+	u64_stats_update_end(&tstats->syncp);
+	put_cpu_ptr(tstats);
+}
+
+#define SKB_TYPE_LE32(skb) (((struct message_header *)(skb)->data)->type)
+
+static size_t validate_header_len(struct sk_buff *skb)
+{
+	if (unlikely(skb->len < sizeof(struct message_header)))
+		return 0;
+	if (SKB_TYPE_LE32(skb) == cpu_to_le32(MESSAGE_DATA) &&
+	    skb->len >= MESSAGE_MINIMUM_LENGTH)
+		return sizeof(struct message_data);
+	if (SKB_TYPE_LE32(skb) == cpu_to_le32(MESSAGE_HANDSHAKE_INITIATION) &&
+	    skb->len == sizeof(struct message_handshake_initiation))
+		return sizeof(struct message_handshake_initiation);
+	if (SKB_TYPE_LE32(skb) == cpu_to_le32(MESSAGE_HANDSHAKE_RESPONSE) &&
+	    skb->len == sizeof(struct message_handshake_response))
+		return sizeof(struct message_handshake_response);
+	if (SKB_TYPE_LE32(skb) == cpu_to_le32(MESSAGE_HANDSHAKE_COOKIE) &&
+	    skb->len == sizeof(struct message_handshake_cookie))
+		return sizeof(struct message_handshake_cookie);
+	return 0;
+}
+
+static int prepare_skb_header(struct sk_buff *skb, struct wg_device *wg)
+{
+	size_t data_offset, data_len, header_len;
+	struct udphdr *udp;
+
+	if (unlikely(!wg_check_packet_protocol(skb) ||
+		     skb_transport_header(skb) < skb->head ||
+		     (skb_transport_header(skb) + sizeof(struct udphdr)) >
+			     skb_tail_pointer(skb)))
+		return -EINVAL; /* Bogus IP header */
+	udp = udp_hdr(skb);
+	data_offset = (u8 *)udp - skb->data;
+	if (unlikely(data_offset > U16_MAX ||
+		     data_offset + sizeof(struct udphdr) > skb->len))
+		/* Packet has offset at impossible location or isn't big enough
+		 * to have UDP fields.
+		 */
+		return -EINVAL;
+	data_len = ntohs(udp->len);
+	if (unlikely(data_len < sizeof(struct udphdr) ||
+		     data_len > skb->len - data_offset))
+		/* UDP packet is reporting too small of a size or lying about
+		 * its size.
+		 */
+		return -EINVAL;
+	data_len -= sizeof(struct udphdr);
+	data_offset = (u8 *)udp + sizeof(struct udphdr) - skb->data;
+	if (unlikely(!pskb_may_pull(skb,
+				data_offset + sizeof(struct message_header)) ||
+		     pskb_trim(skb, data_len + data_offset) < 0))
+		return -EINVAL;
+	skb_pull(skb, data_offset);
+	if (unlikely(skb->len != data_len))
+		/* Final len does not agree with calculated len */
+		return -EINVAL;
+	header_len = validate_header_len(skb);
+	if (unlikely(!header_len))
+		return -EINVAL;
+	__skb_push(skb, data_offset);
+	if (unlikely(!pskb_may_pull(skb, data_offset + header_len)))
+		return -EINVAL;
+	__skb_pull(skb, data_offset);
+	return 0;
+}
+
+static void wg_receive_handshake_packet(struct wg_device *wg,
+					struct sk_buff *skb)
+{
+	enum cookie_mac_state mac_state;
+	struct wg_peer *peer = NULL;
+	/* This is global, so that our load calculation applies to the whole
+	 * system. We don't care about races with it at all.
+	 */
+	static u64 last_under_load;
+	bool packet_needs_cookie;
+	bool under_load;
+
+	if (SKB_TYPE_LE32(skb) == cpu_to_le32(MESSAGE_HANDSHAKE_COOKIE)) {
+		net_dbg_skb_ratelimited("%s: Receiving cookie response from %pISpfsc\n",
+					wg->dev->name, skb);
+		wg_cookie_message_consume(
+			(struct message_handshake_cookie *)skb->data, wg);
+		return;
+	}
+
+	under_load = skb_queue_len(&wg->incoming_handshakes) >=
+		     MAX_QUEUED_INCOMING_HANDSHAKES / 8;
+	if (under_load) {
+		last_under_load = ktime_get_coarse_boottime_ns();
+	} else if (last_under_load) {
+		under_load = !wg_birthdate_has_expired(last_under_load, 1);
+		if (!under_load)
+			last_under_load = 0;
+	}
+	mac_state = wg_cookie_validate_packet(&wg->cookie_checker, skb,
+					      under_load);
+	if ((under_load && mac_state == VALID_MAC_WITH_COOKIE) ||
+	    (!under_load && mac_state == VALID_MAC_BUT_NO_COOKIE)) {
+		packet_needs_cookie = false;
+	} else if (under_load && mac_state == VALID_MAC_BUT_NO_COOKIE) {
+		packet_needs_cookie = true;
+	} else {
+		net_dbg_skb_ratelimited("%s: Invalid MAC of handshake, dropping packet from %pISpfsc\n",
+					wg->dev->name, skb);
+		return;
+	}
+
+	switch (SKB_TYPE_LE32(skb)) {
+	case cpu_to_le32(MESSAGE_HANDSHAKE_INITIATION): {
+		struct message_handshake_initiation *message =
+			(struct message_handshake_initiation *)skb->data;
+
+		if (packet_needs_cookie) {
+			wg_packet_send_handshake_cookie(wg, skb,
+							message->sender_index);
+			return;
+		}
+		peer = wg_noise_handshake_consume_initiation(message, wg);
+		if (unlikely(!peer)) {
+			net_dbg_skb_ratelimited("%s: Invalid handshake initiation from %pISpfsc\n",
+						wg->dev->name, skb);
+			return;
+		}
+		wg_socket_set_peer_endpoint_from_skb(peer, skb);
+		net_dbg_ratelimited("%s: Receiving handshake initiation from peer %llu (%pISpfsc)\n",
+				    wg->dev->name, peer->internal_id,
+				    &peer->endpoint.addr);
+		wg_packet_send_handshake_response(peer);
+		break;
+	}
+	case cpu_to_le32(MESSAGE_HANDSHAKE_RESPONSE): {
+		struct message_handshake_response *message =
+			(struct message_handshake_response *)skb->data;
+
+		if (packet_needs_cookie) {
+			wg_packet_send_handshake_cookie(wg, skb,
+							message->sender_index);
+			return;
+		}
+		peer = wg_noise_handshake_consume_response(message, wg);
+		if (unlikely(!peer)) {
+			net_dbg_skb_ratelimited("%s: Invalid handshake response from %pISpfsc\n",
+						wg->dev->name, skb);
+			return;
+		}
+		wg_socket_set_peer_endpoint_from_skb(peer, skb);
+		net_dbg_ratelimited("%s: Receiving handshake response from peer %llu (%pISpfsc)\n",
+				    wg->dev->name, peer->internal_id,
+				    &peer->endpoint.addr);
+		if (wg_noise_handshake_begin_session(&peer->handshake,
+						     &peer->keypairs)) {
+			wg_timers_session_derived(peer);
+			wg_timers_handshake_complete(peer);
+			/* Calling this function will either send any existing
+			 * packets in the queue and not send a keepalive, which
+			 * is the best case, Or, if there's nothing in the
+			 * queue, it will send a keepalive, in order to give
+			 * immediate confirmation of the session.
+			 */
+			wg_packet_send_keepalive(peer);
+		}
+		break;
+	}
+	}
+
+	if (unlikely(!peer)) {
+		WARN(1, "Somehow a wrong type of packet wound up in the handshake queue!\n");
+		return;
+	}
+
+	local_bh_disable();
+	update_rx_stats(peer, skb->len);
+	local_bh_enable();
+
+	wg_timers_any_authenticated_packet_received(peer);
+	wg_timers_any_authenticated_packet_traversal(peer);
+	wg_peer_put(peer);
+}
+
+void wg_packet_handshake_receive_worker(struct work_struct *work)
+{
+	struct wg_device *wg = container_of(work, struct multicore_worker,
+					    work)->ptr;
+	struct sk_buff *skb;
+
+	while ((skb = skb_dequeue(&wg->incoming_handshakes)) != NULL) {
+		wg_receive_handshake_packet(wg, skb);
+		dev_kfree_skb(skb);
+		cond_resched();
+	}
+}
+
+static void keep_key_fresh(struct wg_peer *peer)
+{
+	struct noise_keypair *keypair;
+	bool send;
+
+	if (peer->sent_lastminute_handshake)
+		return;
+
+	rcu_read_lock_bh();
+	keypair = rcu_dereference_bh(peer->keypairs.current_keypair);
+	send = keypair && READ_ONCE(keypair->sending.is_valid) &&
+	       keypair->i_am_the_initiator &&
+	       wg_birthdate_has_expired(keypair->sending.birthdate,
+			REJECT_AFTER_TIME - KEEPALIVE_TIMEOUT - REKEY_TIMEOUT);
+	rcu_read_unlock_bh();
+
+	if (unlikely(send)) {
+		peer->sent_lastminute_handshake = true;
+		wg_packet_send_queued_handshake_initiation(peer, false);
+	}
+}
+
+static bool decrypt_packet(struct sk_buff *skb, struct noise_keypair *keypair)
+{
+	struct scatterlist sg[MAX_SKB_FRAGS + 8];
+	struct sk_buff *trailer;
+	unsigned int offset;
+	int num_frags;
+
+	if (unlikely(!keypair))
+		return false;
+
+	if (unlikely(!READ_ONCE(keypair->receiving.is_valid) ||
+		  wg_birthdate_has_expired(keypair->receiving.birthdate, REJECT_AFTER_TIME) ||
+		  keypair->receiving_counter.counter >= REJECT_AFTER_MESSAGES)) {
+		WRITE_ONCE(keypair->receiving.is_valid, false);
+		return false;
+	}
+
+	PACKET_CB(skb)->nonce =
+		le64_to_cpu(((struct message_data *)skb->data)->counter);
+
+	/* We ensure that the network header is part of the packet before we
+	 * call skb_cow_data, so that there's no chance that data is removed
+	 * from the skb, so that later we can extract the original endpoint.
+	 */
+	offset = skb->data - skb_network_header(skb);
+	skb_push(skb, offset);
+	num_frags = skb_cow_data(skb, 0, &trailer);
+	offset += sizeof(struct message_data);
+	skb_pull(skb, offset);
+	if (unlikely(num_frags < 0 || num_frags > ARRAY_SIZE(sg)))
+		return false;
+
+	sg_init_table(sg, num_frags);
+	if (skb_to_sgvec(skb, sg, 0, skb->len) <= 0)
+		return false;
+
+	if (!chacha20poly1305_decrypt_sg_inplace(sg, skb->len, NULL, 0,
+					         PACKET_CB(skb)->nonce,
+						 keypair->receiving.key))
+		return false;
+
+	/* Another ugly situation of pushing and pulling the header so as to
+	 * keep endpoint information intact.
+	 */
+	skb_push(skb, offset);
+	if (pskb_trim(skb, skb->len - noise_encrypted_len(0)))
+		return false;
+	skb_pull(skb, offset);
+
+	return true;
+}
+
+/* This is RFC6479, a replay detection bitmap algorithm that avoids bitshifts */
+static bool counter_validate(struct noise_replay_counter *counter, u64 their_counter)
+{
+	unsigned long index, index_current, top, i;
+	bool ret = false;
+
+	spin_lock_bh(&counter->lock);
+
+	if (unlikely(counter->counter >= REJECT_AFTER_MESSAGES + 1 ||
+		     their_counter >= REJECT_AFTER_MESSAGES))
+		goto out;
+
+	++their_counter;
+
+	if (unlikely((COUNTER_WINDOW_SIZE + their_counter) <
+		     counter->counter))
+		goto out;
+
+	index = their_counter >> ilog2(BITS_PER_LONG);
+
+	if (likely(their_counter > counter->counter)) {
+		index_current = counter->counter >> ilog2(BITS_PER_LONG);
+		top = min_t(unsigned long, index - index_current,
+			    COUNTER_BITS_TOTAL / BITS_PER_LONG);
+		for (i = 1; i <= top; ++i)
+			counter->backtrack[(i + index_current) &
+				((COUNTER_BITS_TOTAL / BITS_PER_LONG) - 1)] = 0;
+		counter->counter = their_counter;
+	}
+
+	index &= (COUNTER_BITS_TOTAL / BITS_PER_LONG) - 1;
+	ret = !test_and_set_bit(their_counter & (BITS_PER_LONG - 1),
+				&counter->backtrack[index]);
+
+out:
+	spin_unlock_bh(&counter->lock);
+	return ret;
+}
+
+#include "selftest/counter.c"
+
+static void wg_packet_consume_data_done(struct wg_peer *peer,
+					struct sk_buff *skb,
+					struct endpoint *endpoint)
+{
+	struct net_device *dev = peer->device->dev;
+	unsigned int len, len_before_trim;
+	struct wg_peer *routed_peer;
+
+	wg_socket_set_peer_endpoint(peer, endpoint);
+
+	if (unlikely(wg_noise_received_with_keypair(&peer->keypairs,
+						    PACKET_CB(skb)->keypair))) {
+		wg_timers_handshake_complete(peer);
+		wg_packet_send_staged_packets(peer);
+	}
+
+	keep_key_fresh(peer);
+
+	wg_timers_any_authenticated_packet_received(peer);
+	wg_timers_any_authenticated_packet_traversal(peer);
+
+	/* A packet with length 0 is a keepalive packet */
+	if (unlikely(!skb->len)) {
+		update_rx_stats(peer, message_data_len(0));
+		net_dbg_ratelimited("%s: Receiving keepalive packet from peer %llu (%pISpfsc)\n",
+				    dev->name, peer->internal_id,
+				    &peer->endpoint.addr);
+		goto packet_processed;
+	}
+
+	wg_timers_data_received(peer);
+
+	if (unlikely(skb_network_header(skb) < skb->head))
+		goto dishonest_packet_size;
+	if (unlikely(!(pskb_network_may_pull(skb, sizeof(struct iphdr)) &&
+		       (ip_hdr(skb)->version == 4 ||
+			(ip_hdr(skb)->version == 6 &&
+			 pskb_network_may_pull(skb, sizeof(struct ipv6hdr)))))))
+		goto dishonest_packet_type;
+
+	skb->dev = dev;
+	/* We've already verified the Poly1305 auth tag, which means this packet
+	 * was not modified in transit. We can therefore tell the networking
+	 * stack that all checksums of every layer of encapsulation have already
+	 * been checked "by the hardware" and therefore is unnecessary to check
+	 * again in software.
+	 */
+	skb->ip_summed = CHECKSUM_UNNECESSARY;
+	skb->csum_level = ~0; /* All levels */
+	skb->protocol = ip_tunnel_parse_protocol(skb);
+	if (skb->protocol == htons(ETH_P_IP)) {
+		len = ntohs(ip_hdr(skb)->tot_len);
+		if (unlikely(len < sizeof(struct iphdr)))
+			goto dishonest_packet_size;
+		INET_ECN_decapsulate(skb, PACKET_CB(skb)->ds, ip_hdr(skb)->tos);
+	} else if (skb->protocol == htons(ETH_P_IPV6)) {
+		len = ntohs(ipv6_hdr(skb)->payload_len) +
+		      sizeof(struct ipv6hdr);
+		INET_ECN_decapsulate(skb, PACKET_CB(skb)->ds, ipv6_get_dsfield(ipv6_hdr(skb)));
+	} else {
+		goto dishonest_packet_type;
+	}
+
+	if (unlikely(len > skb->len))
+		goto dishonest_packet_size;
+	len_before_trim = skb->len;
+	if (unlikely(pskb_trim(skb, len)))
+		goto packet_processed;
+
+	routed_peer = wg_allowedips_lookup_src(&peer->device->peer_allowedips,
+					       skb);
+	wg_peer_put(routed_peer); /* We don't need the extra reference. */
+
+	if (unlikely(routed_peer != peer))
+		goto dishonest_packet_peer;
+
+	napi_gro_receive(&peer->napi, skb);
+	update_rx_stats(peer, message_data_len(len_before_trim));
+	return;
+
+dishonest_packet_peer:
+	net_dbg_skb_ratelimited("%s: Packet has unallowed src IP (%pISc) from peer %llu (%pISpfsc)\n",
+				dev->name, skb, peer->internal_id,
+				&peer->endpoint.addr);
+	++dev->stats.rx_errors;
+	++dev->stats.rx_frame_errors;
+	goto packet_processed;
+dishonest_packet_type:
+	net_dbg_ratelimited("%s: Packet is neither ipv4 nor ipv6 from peer %llu (%pISpfsc)\n",
+			    dev->name, peer->internal_id, &peer->endpoint.addr);
+	++dev->stats.rx_errors;
+	++dev->stats.rx_frame_errors;
+	goto packet_processed;
+dishonest_packet_size:
+	net_dbg_ratelimited("%s: Packet has incorrect size from peer %llu (%pISpfsc)\n",
+			    dev->name, peer->internal_id, &peer->endpoint.addr);
+	++dev->stats.rx_errors;
+	++dev->stats.rx_length_errors;
+	goto packet_processed;
+packet_processed:
+	dev_kfree_skb(skb);
+}
+
+int wg_packet_rx_poll(struct napi_struct *napi, int budget)
+{
+	struct wg_peer *peer = container_of(napi, struct wg_peer, napi);
+	struct crypt_queue *queue = &peer->rx_queue;
+	struct noise_keypair *keypair;
+	struct endpoint endpoint;
+	enum packet_state state;
+	struct sk_buff *skb;
+	int work_done = 0;
+	bool free;
+
+	if (unlikely(budget <= 0))
+		return 0;
+
+	while ((skb = __ptr_ring_peek(&queue->ring)) != NULL &&
+	       (state = atomic_read_acquire(&PACKET_CB(skb)->state)) !=
+		       PACKET_STATE_UNCRYPTED) {
+		__ptr_ring_discard_one(&queue->ring);
+		peer = PACKET_PEER(skb);
+		keypair = PACKET_CB(skb)->keypair;
+		free = true;
+
+		if (unlikely(state != PACKET_STATE_CRYPTED))
+			goto next;
+
+		if (unlikely(!counter_validate(&keypair->receiving_counter,
+					       PACKET_CB(skb)->nonce))) {
+			net_dbg_ratelimited("%s: Packet has invalid nonce %llu (max %llu)\n",
+					    peer->device->dev->name,
+					    PACKET_CB(skb)->nonce,
+					    keypair->receiving_counter.counter);
+			goto next;
+		}
+
+		if (unlikely(wg_socket_endpoint_from_skb(&endpoint, skb)))
+			goto next;
+
+		wg_reset_packet(skb, false);
+		wg_packet_consume_data_done(peer, skb, &endpoint);
+		free = false;
+
+next:
+		wg_noise_keypair_put(keypair, false);
+		wg_peer_put(peer);
+		if (unlikely(free))
+			dev_kfree_skb(skb);
+
+		if (++work_done >= budget)
+			break;
+	}
+
+	if (work_done < budget)
+		napi_complete_done(napi, work_done);
+
+	return work_done;
+}
+
+void wg_packet_decrypt_worker(struct work_struct *work)
+{
+	struct crypt_queue *queue = container_of(work, struct multicore_worker,
+						 work)->ptr;
+	struct sk_buff *skb;
+
+	while ((skb = ptr_ring_consume_bh(&queue->ring)) != NULL) {
+		enum packet_state state =
+			likely(decrypt_packet(skb, PACKET_CB(skb)->keypair)) ?
+				PACKET_STATE_CRYPTED : PACKET_STATE_DEAD;
+		wg_queue_enqueue_per_peer_napi(skb, state);
+		if (need_resched())
+			cond_resched();
+	}
+}
+
+static void wg_packet_consume_data(struct wg_device *wg, struct sk_buff *skb)
+{
+	__le32 idx = ((struct message_data *)skb->data)->key_idx;
+	struct wg_peer *peer = NULL;
+	int ret;
+
+	rcu_read_lock_bh();
+	PACKET_CB(skb)->keypair =
+		(struct noise_keypair *)wg_index_hashtable_lookup(
+			wg->index_hashtable, INDEX_HASHTABLE_KEYPAIR, idx,
+			&peer);
+	if (unlikely(!wg_noise_keypair_get(PACKET_CB(skb)->keypair)))
+		goto err_keypair;
+
+	if (unlikely(READ_ONCE(peer->is_dead)))
+		goto err;
+
+	ret = wg_queue_enqueue_per_device_and_peer(&wg->decrypt_queue,
+						   &peer->rx_queue, skb,
+						   wg->packet_crypt_wq,
+						   &wg->decrypt_queue.last_cpu);
+	if (unlikely(ret == -EPIPE))
+		wg_queue_enqueue_per_peer_napi(skb, PACKET_STATE_DEAD);
+	if (likely(!ret || ret == -EPIPE)) {
+		rcu_read_unlock_bh();
+		return;
+	}
+err:
+	wg_noise_keypair_put(PACKET_CB(skb)->keypair, false);
+err_keypair:
+	rcu_read_unlock_bh();
+	wg_peer_put(peer);
+	dev_kfree_skb(skb);
+}
+
+void wg_packet_receive(struct wg_device *wg, struct sk_buff *skb)
+{
+	if (unlikely(prepare_skb_header(skb, wg) < 0))
+		goto err;
+	switch (SKB_TYPE_LE32(skb)) {
+	case cpu_to_le32(MESSAGE_HANDSHAKE_INITIATION):
+	case cpu_to_le32(MESSAGE_HANDSHAKE_RESPONSE):
+	case cpu_to_le32(MESSAGE_HANDSHAKE_COOKIE): {
+		int cpu;
+
+		if (skb_queue_len(&wg->incoming_handshakes) >
+			    MAX_QUEUED_INCOMING_HANDSHAKES ||
+		    unlikely(!rng_is_initialized())) {
+			net_dbg_skb_ratelimited("%s: Dropping handshake packet from %pISpfsc\n",
+						wg->dev->name, skb);
+			goto err;
+		}
+		skb_queue_tail(&wg->incoming_handshakes, skb);
+		/* Queues up a call to packet_process_queued_handshake_
+		 * packets(skb):
+		 */
+		cpu = wg_cpumask_next_online(&wg->incoming_handshake_cpu);
+		queue_work_on(cpu, wg->handshake_receive_wq,
+			&per_cpu_ptr(wg->incoming_handshakes_worker, cpu)->work);
+		break;
+	}
+	case cpu_to_le32(MESSAGE_DATA):
+		PACKET_CB(skb)->ds = ip_tunnel_get_dsfield(ip_hdr(skb), skb);
+		wg_packet_consume_data(wg, skb);
+		break;
+	default:
+		WARN(1, "Non-exhaustive parsing of packet header lead to unknown packet type!\n");
+		goto err;
+	}
+	return;
+
+err:
+	dev_kfree_skb(skb);
+}
diff --git a/drivers/net/wireguard/selftest/allowedips.c b/drivers/net/wireguard/selftest/allowedips.c
new file mode 100644
index 0000000..846db14
--- /dev/null
+++ b/drivers/net/wireguard/selftest/allowedips.c
@@ -0,0 +1,683 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This contains some basic static unit tests for the allowedips data structure.
+ * It also has two additional modes that are disabled and meant to be used by
+ * folks directly playing with this file. If you define the macro
+ * DEBUG_PRINT_TRIE_GRAPHVIZ to be 1, then every time there's a full tree in
+ * memory, it will be printed out as KERN_DEBUG in a format that can be passed
+ * to graphviz (the dot command) to visualize it. If you define the macro
+ * DEBUG_RANDOM_TRIE to be 1, then there will be an extremely costly set of
+ * randomized tests done against a trivial implementation, which may take
+ * upwards of a half-hour to complete. There's no set of users who should be
+ * enabling these, and the only developers that should go anywhere near these
+ * nobs are the ones who are reading this comment.
+ */
+
+#ifdef DEBUG
+
+#include <linux/siphash.h>
+
+static __init void swap_endian_and_apply_cidr(u8 *dst, const u8 *src, u8 bits,
+					      u8 cidr)
+{
+	swap_endian(dst, src, bits);
+	memset(dst + (cidr + 7) / 8, 0, bits / 8 - (cidr + 7) / 8);
+	if (cidr)
+		dst[(cidr + 7) / 8 - 1] &= ~0U << ((8 - (cidr % 8)) % 8);
+}
+
+static __init void print_node(struct allowedips_node *node, u8 bits)
+{
+	char *fmt_connection = KERN_DEBUG "\t\"%p/%d\" -> \"%p/%d\";\n";
+	char *fmt_declaration = KERN_DEBUG
+		"\t\"%p/%d\"[style=%s, color=\"#%06x\"];\n";
+	char *style = "dotted";
+	u8 ip1[16], ip2[16];
+	u32 color = 0;
+
+	if (bits == 32) {
+		fmt_connection = KERN_DEBUG "\t\"%pI4/%d\" -> \"%pI4/%d\";\n";
+		fmt_declaration = KERN_DEBUG
+			"\t\"%pI4/%d\"[style=%s, color=\"#%06x\"];\n";
+	} else if (bits == 128) {
+		fmt_connection = KERN_DEBUG "\t\"%pI6/%d\" -> \"%pI6/%d\";\n";
+		fmt_declaration = KERN_DEBUG
+			"\t\"%pI6/%d\"[style=%s, color=\"#%06x\"];\n";
+	}
+	if (node->peer) {
+		hsiphash_key_t key = { { 0 } };
+
+		memcpy(&key, &node->peer, sizeof(node->peer));
+		color = hsiphash_1u32(0xdeadbeef, &key) % 200 << 16 |
+			hsiphash_1u32(0xbabecafe, &key) % 200 << 8 |
+			hsiphash_1u32(0xabad1dea, &key) % 200;
+		style = "bold";
+	}
+	swap_endian_and_apply_cidr(ip1, node->bits, bits, node->cidr);
+	printk(fmt_declaration, ip1, node->cidr, style, color);
+	if (node->bit[0]) {
+		swap_endian_and_apply_cidr(ip2,
+				rcu_dereference_raw(node->bit[0])->bits, bits,
+				node->cidr);
+		printk(fmt_connection, ip1, node->cidr, ip2,
+		       rcu_dereference_raw(node->bit[0])->cidr);
+		print_node(rcu_dereference_raw(node->bit[0]), bits);
+	}
+	if (node->bit[1]) {
+		swap_endian_and_apply_cidr(ip2,
+				rcu_dereference_raw(node->bit[1])->bits,
+				bits, node->cidr);
+		printk(fmt_connection, ip1, node->cidr, ip2,
+		       rcu_dereference_raw(node->bit[1])->cidr);
+		print_node(rcu_dereference_raw(node->bit[1]), bits);
+	}
+}
+
+static __init void print_tree(struct allowedips_node __rcu *top, u8 bits)
+{
+	printk(KERN_DEBUG "digraph trie {\n");
+	print_node(rcu_dereference_raw(top), bits);
+	printk(KERN_DEBUG "}\n");
+}
+
+enum {
+	NUM_PEERS = 2000,
+	NUM_RAND_ROUTES = 400,
+	NUM_MUTATED_ROUTES = 100,
+	NUM_QUERIES = NUM_RAND_ROUTES * NUM_MUTATED_ROUTES * 30
+};
+
+struct horrible_allowedips {
+	struct hlist_head head;
+};
+
+struct horrible_allowedips_node {
+	struct hlist_node table;
+	union nf_inet_addr ip;
+	union nf_inet_addr mask;
+	u8 ip_version;
+	void *value;
+};
+
+static __init void horrible_allowedips_init(struct horrible_allowedips *table)
+{
+	INIT_HLIST_HEAD(&table->head);
+}
+
+static __init void horrible_allowedips_free(struct horrible_allowedips *table)
+{
+	struct horrible_allowedips_node *node;
+	struct hlist_node *h;
+
+	hlist_for_each_entry_safe(node, h, &table->head, table) {
+		hlist_del(&node->table);
+		kfree(node);
+	}
+}
+
+static __init inline union nf_inet_addr horrible_cidr_to_mask(u8 cidr)
+{
+	union nf_inet_addr mask;
+
+	memset(&mask, 0x00, 128 / 8);
+	memset(&mask, 0xff, cidr / 8);
+	if (cidr % 32)
+		mask.all[cidr / 32] = (__force u32)htonl(
+			(0xFFFFFFFFUL << (32 - (cidr % 32))) & 0xFFFFFFFFUL);
+	return mask;
+}
+
+static __init inline u8 horrible_mask_to_cidr(union nf_inet_addr subnet)
+{
+	return hweight32(subnet.all[0]) + hweight32(subnet.all[1]) +
+	       hweight32(subnet.all[2]) + hweight32(subnet.all[3]);
+}
+
+static __init inline void
+horrible_mask_self(struct horrible_allowedips_node *node)
+{
+	if (node->ip_version == 4) {
+		node->ip.ip &= node->mask.ip;
+	} else if (node->ip_version == 6) {
+		node->ip.ip6[0] &= node->mask.ip6[0];
+		node->ip.ip6[1] &= node->mask.ip6[1];
+		node->ip.ip6[2] &= node->mask.ip6[2];
+		node->ip.ip6[3] &= node->mask.ip6[3];
+	}
+}
+
+static __init inline bool
+horrible_match_v4(const struct horrible_allowedips_node *node,
+		  struct in_addr *ip)
+{
+	return (ip->s_addr & node->mask.ip) == node->ip.ip;
+}
+
+static __init inline bool
+horrible_match_v6(const struct horrible_allowedips_node *node,
+		  struct in6_addr *ip)
+{
+	return (ip->in6_u.u6_addr32[0] & node->mask.ip6[0]) ==
+		       node->ip.ip6[0] &&
+	       (ip->in6_u.u6_addr32[1] & node->mask.ip6[1]) ==
+		       node->ip.ip6[1] &&
+	       (ip->in6_u.u6_addr32[2] & node->mask.ip6[2]) ==
+		       node->ip.ip6[2] &&
+	       (ip->in6_u.u6_addr32[3] & node->mask.ip6[3]) == node->ip.ip6[3];
+}
+
+static __init void
+horrible_insert_ordered(struct horrible_allowedips *table,
+			struct horrible_allowedips_node *node)
+{
+	struct horrible_allowedips_node *other = NULL, *where = NULL;
+	u8 my_cidr = horrible_mask_to_cidr(node->mask);
+
+	hlist_for_each_entry(other, &table->head, table) {
+		if (!memcmp(&other->mask, &node->mask,
+			    sizeof(union nf_inet_addr)) &&
+		    !memcmp(&other->ip, &node->ip,
+			    sizeof(union nf_inet_addr)) &&
+		    other->ip_version == node->ip_version) {
+			other->value = node->value;
+			kfree(node);
+			return;
+		}
+		where = other;
+		if (horrible_mask_to_cidr(other->mask) <= my_cidr)
+			break;
+	}
+	if (!other && !where)
+		hlist_add_head(&node->table, &table->head);
+	else if (!other)
+		hlist_add_behind(&node->table, &where->table);
+	else
+		hlist_add_before(&node->table, &where->table);
+}
+
+static __init int
+horrible_allowedips_insert_v4(struct horrible_allowedips *table,
+			      struct in_addr *ip, u8 cidr, void *value)
+{
+	struct horrible_allowedips_node *node = kzalloc(sizeof(*node),
+							GFP_KERNEL);
+
+	if (unlikely(!node))
+		return -ENOMEM;
+	node->ip.in = *ip;
+	node->mask = horrible_cidr_to_mask(cidr);
+	node->ip_version = 4;
+	node->value = value;
+	horrible_mask_self(node);
+	horrible_insert_ordered(table, node);
+	return 0;
+}
+
+static __init int
+horrible_allowedips_insert_v6(struct horrible_allowedips *table,
+			      struct in6_addr *ip, u8 cidr, void *value)
+{
+	struct horrible_allowedips_node *node = kzalloc(sizeof(*node),
+							GFP_KERNEL);
+
+	if (unlikely(!node))
+		return -ENOMEM;
+	node->ip.in6 = *ip;
+	node->mask = horrible_cidr_to_mask(cidr);
+	node->ip_version = 6;
+	node->value = value;
+	horrible_mask_self(node);
+	horrible_insert_ordered(table, node);
+	return 0;
+}
+
+static __init void *
+horrible_allowedips_lookup_v4(struct horrible_allowedips *table,
+			      struct in_addr *ip)
+{
+	struct horrible_allowedips_node *node;
+	void *ret = NULL;
+
+	hlist_for_each_entry(node, &table->head, table) {
+		if (node->ip_version != 4)
+			continue;
+		if (horrible_match_v4(node, ip)) {
+			ret = node->value;
+			break;
+		}
+	}
+	return ret;
+}
+
+static __init void *
+horrible_allowedips_lookup_v6(struct horrible_allowedips *table,
+			      struct in6_addr *ip)
+{
+	struct horrible_allowedips_node *node;
+	void *ret = NULL;
+
+	hlist_for_each_entry(node, &table->head, table) {
+		if (node->ip_version != 6)
+			continue;
+		if (horrible_match_v6(node, ip)) {
+			ret = node->value;
+			break;
+		}
+	}
+	return ret;
+}
+
+static __init bool randomized_test(void)
+{
+	unsigned int i, j, k, mutate_amount, cidr;
+	u8 ip[16], mutate_mask[16], mutated[16];
+	struct wg_peer **peers, *peer;
+	struct horrible_allowedips h;
+	DEFINE_MUTEX(mutex);
+	struct allowedips t;
+	bool ret = false;
+
+	mutex_init(&mutex);
+
+	wg_allowedips_init(&t);
+	horrible_allowedips_init(&h);
+
+	peers = kcalloc(NUM_PEERS, sizeof(*peers), GFP_KERNEL);
+	if (unlikely(!peers)) {
+		pr_err("allowedips random self-test malloc: FAIL\n");
+		goto free;
+	}
+	for (i = 0; i < NUM_PEERS; ++i) {
+		peers[i] = kzalloc(sizeof(*peers[i]), GFP_KERNEL);
+		if (unlikely(!peers[i])) {
+			pr_err("allowedips random self-test malloc: FAIL\n");
+			goto free;
+		}
+		kref_init(&peers[i]->refcount);
+	}
+
+	mutex_lock(&mutex);
+
+	for (i = 0; i < NUM_RAND_ROUTES; ++i) {
+		prandom_bytes(ip, 4);
+		cidr = prandom_u32_max(32) + 1;
+		peer = peers[prandom_u32_max(NUM_PEERS)];
+		if (wg_allowedips_insert_v4(&t, (struct in_addr *)ip, cidr,
+					    peer, &mutex) < 0) {
+			pr_err("allowedips random self-test malloc: FAIL\n");
+			goto free_locked;
+		}
+		if (horrible_allowedips_insert_v4(&h, (struct in_addr *)ip,
+						  cidr, peer) < 0) {
+			pr_err("allowedips random self-test malloc: FAIL\n");
+			goto free_locked;
+		}
+		for (j = 0; j < NUM_MUTATED_ROUTES; ++j) {
+			memcpy(mutated, ip, 4);
+			prandom_bytes(mutate_mask, 4);
+			mutate_amount = prandom_u32_max(32);
+			for (k = 0; k < mutate_amount / 8; ++k)
+				mutate_mask[k] = 0xff;
+			mutate_mask[k] = 0xff
+					 << ((8 - (mutate_amount % 8)) % 8);
+			for (; k < 4; ++k)
+				mutate_mask[k] = 0;
+			for (k = 0; k < 4; ++k)
+				mutated[k] = (mutated[k] & mutate_mask[k]) |
+					     (~mutate_mask[k] &
+					      prandom_u32_max(256));
+			cidr = prandom_u32_max(32) + 1;
+			peer = peers[prandom_u32_max(NUM_PEERS)];
+			if (wg_allowedips_insert_v4(&t,
+						    (struct in_addr *)mutated,
+						    cidr, peer, &mutex) < 0) {
+				pr_err("allowedips random malloc: FAIL\n");
+				goto free_locked;
+			}
+			if (horrible_allowedips_insert_v4(&h,
+				(struct in_addr *)mutated, cidr, peer)) {
+				pr_err("allowedips random self-test malloc: FAIL\n");
+				goto free_locked;
+			}
+		}
+	}
+
+	for (i = 0; i < NUM_RAND_ROUTES; ++i) {
+		prandom_bytes(ip, 16);
+		cidr = prandom_u32_max(128) + 1;
+		peer = peers[prandom_u32_max(NUM_PEERS)];
+		if (wg_allowedips_insert_v6(&t, (struct in6_addr *)ip, cidr,
+					    peer, &mutex) < 0) {
+			pr_err("allowedips random self-test malloc: FAIL\n");
+			goto free_locked;
+		}
+		if (horrible_allowedips_insert_v6(&h, (struct in6_addr *)ip,
+						  cidr, peer) < 0) {
+			pr_err("allowedips random self-test malloc: FAIL\n");
+			goto free_locked;
+		}
+		for (j = 0; j < NUM_MUTATED_ROUTES; ++j) {
+			memcpy(mutated, ip, 16);
+			prandom_bytes(mutate_mask, 16);
+			mutate_amount = prandom_u32_max(128);
+			for (k = 0; k < mutate_amount / 8; ++k)
+				mutate_mask[k] = 0xff;
+			mutate_mask[k] = 0xff
+					 << ((8 - (mutate_amount % 8)) % 8);
+			for (; k < 4; ++k)
+				mutate_mask[k] = 0;
+			for (k = 0; k < 4; ++k)
+				mutated[k] = (mutated[k] & mutate_mask[k]) |
+					     (~mutate_mask[k] &
+					      prandom_u32_max(256));
+			cidr = prandom_u32_max(128) + 1;
+			peer = peers[prandom_u32_max(NUM_PEERS)];
+			if (wg_allowedips_insert_v6(&t,
+						    (struct in6_addr *)mutated,
+						    cidr, peer, &mutex) < 0) {
+				pr_err("allowedips random self-test malloc: FAIL\n");
+				goto free_locked;
+			}
+			if (horrible_allowedips_insert_v6(
+				    &h, (struct in6_addr *)mutated, cidr,
+				    peer)) {
+				pr_err("allowedips random self-test malloc: FAIL\n");
+				goto free_locked;
+			}
+		}
+	}
+
+	mutex_unlock(&mutex);
+
+	if (IS_ENABLED(DEBUG_PRINT_TRIE_GRAPHVIZ)) {
+		print_tree(t.root4, 32);
+		print_tree(t.root6, 128);
+	}
+
+	for (i = 0; i < NUM_QUERIES; ++i) {
+		prandom_bytes(ip, 4);
+		if (lookup(t.root4, 32, ip) !=
+		    horrible_allowedips_lookup_v4(&h, (struct in_addr *)ip)) {
+			pr_err("allowedips random self-test: FAIL\n");
+			goto free;
+		}
+	}
+
+	for (i = 0; i < NUM_QUERIES; ++i) {
+		prandom_bytes(ip, 16);
+		if (lookup(t.root6, 128, ip) !=
+		    horrible_allowedips_lookup_v6(&h, (struct in6_addr *)ip)) {
+			pr_err("allowedips random self-test: FAIL\n");
+			goto free;
+		}
+	}
+	ret = true;
+
+free:
+	mutex_lock(&mutex);
+free_locked:
+	wg_allowedips_free(&t, &mutex);
+	mutex_unlock(&mutex);
+	horrible_allowedips_free(&h);
+	if (peers) {
+		for (i = 0; i < NUM_PEERS; ++i)
+			kfree(peers[i]);
+	}
+	kfree(peers);
+	return ret;
+}
+
+static __init inline struct in_addr *ip4(u8 a, u8 b, u8 c, u8 d)
+{
+	static struct in_addr ip;
+	u8 *split = (u8 *)&ip;
+
+	split[0] = a;
+	split[1] = b;
+	split[2] = c;
+	split[3] = d;
+	return &ip;
+}
+
+static __init inline struct in6_addr *ip6(u32 a, u32 b, u32 c, u32 d)
+{
+	static struct in6_addr ip;
+	__be32 *split = (__be32 *)&ip;
+
+	split[0] = cpu_to_be32(a);
+	split[1] = cpu_to_be32(b);
+	split[2] = cpu_to_be32(c);
+	split[3] = cpu_to_be32(d);
+	return &ip;
+}
+
+static __init struct wg_peer *init_peer(void)
+{
+	struct wg_peer *peer = kzalloc(sizeof(*peer), GFP_KERNEL);
+
+	if (!peer)
+		return NULL;
+	kref_init(&peer->refcount);
+	INIT_LIST_HEAD(&peer->allowedips_list);
+	return peer;
+}
+
+#define insert(version, mem, ipa, ipb, ipc, ipd, cidr)                       \
+	wg_allowedips_insert_v##version(&t, ip##version(ipa, ipb, ipc, ipd), \
+					cidr, mem, &mutex)
+
+#define maybe_fail() do {                                               \
+		++i;                                                    \
+		if (!_s) {                                              \
+			pr_info("allowedips self-test %zu: FAIL\n", i); \
+			success = false;                                \
+		}                                                       \
+	} while (0)
+
+#define test(version, mem, ipa, ipb, ipc, ipd) do {                          \
+		bool _s = lookup(t.root##version, (version) == 4 ? 32 : 128, \
+				 ip##version(ipa, ipb, ipc, ipd)) == (mem);  \
+		maybe_fail();                                                \
+	} while (0)
+
+#define test_negative(version, mem, ipa, ipb, ipc, ipd) do {                 \
+		bool _s = lookup(t.root##version, (version) == 4 ? 32 : 128, \
+				 ip##version(ipa, ipb, ipc, ipd)) != (mem);  \
+		maybe_fail();                                                \
+	} while (0)
+
+#define test_boolean(cond) do {   \
+		bool _s = (cond); \
+		maybe_fail();     \
+	} while (0)
+
+bool __init wg_allowedips_selftest(void)
+{
+	bool found_a = false, found_b = false, found_c = false, found_d = false,
+	     found_e = false, found_other = false;
+	struct wg_peer *a = init_peer(), *b = init_peer(), *c = init_peer(),
+		       *d = init_peer(), *e = init_peer(), *f = init_peer(),
+		       *g = init_peer(), *h = init_peer();
+	struct allowedips_node *iter_node;
+	bool success = false;
+	struct allowedips t;
+	DEFINE_MUTEX(mutex);
+	struct in6_addr ip;
+	size_t i = 0, count = 0;
+	__be64 part;
+
+	mutex_init(&mutex);
+	mutex_lock(&mutex);
+	wg_allowedips_init(&t);
+
+	if (!a || !b || !c || !d || !e || !f || !g || !h) {
+		pr_err("allowedips self-test malloc: FAIL\n");
+		goto free;
+	}
+
+	insert(4, a, 192, 168, 4, 0, 24);
+	insert(4, b, 192, 168, 4, 4, 32);
+	insert(4, c, 192, 168, 0, 0, 16);
+	insert(4, d, 192, 95, 5, 64, 27);
+	/* replaces previous entry, and maskself is required */
+	insert(4, c, 192, 95, 5, 65, 27);
+	insert(6, d, 0x26075300, 0x60006b00, 0, 0xc05f0543, 128);
+	insert(6, c, 0x26075300, 0x60006b00, 0, 0, 64);
+	insert(4, e, 0, 0, 0, 0, 0);
+	insert(6, e, 0, 0, 0, 0, 0);
+	/* replaces previous entry */
+	insert(6, f, 0, 0, 0, 0, 0);
+	insert(6, g, 0x24046800, 0, 0, 0, 32);
+	/* maskself is required */
+	insert(6, h, 0x24046800, 0x40040800, 0xdeadbeef, 0xdeadbeef, 64);
+	insert(6, a, 0x24046800, 0x40040800, 0xdeadbeef, 0xdeadbeef, 128);
+	insert(6, c, 0x24446800, 0x40e40800, 0xdeaebeef, 0xdefbeef, 128);
+	insert(6, b, 0x24446800, 0xf0e40800, 0xeeaebeef, 0, 98);
+	insert(4, g, 64, 15, 112, 0, 20);
+	/* maskself is required */
+	insert(4, h, 64, 15, 123, 211, 25);
+	insert(4, a, 10, 0, 0, 0, 25);
+	insert(4, b, 10, 0, 0, 128, 25);
+	insert(4, a, 10, 1, 0, 0, 30);
+	insert(4, b, 10, 1, 0, 4, 30);
+	insert(4, c, 10, 1, 0, 8, 29);
+	insert(4, d, 10, 1, 0, 16, 29);
+
+	if (IS_ENABLED(DEBUG_PRINT_TRIE_GRAPHVIZ)) {
+		print_tree(t.root4, 32);
+		print_tree(t.root6, 128);
+	}
+
+	success = true;
+
+	test(4, a, 192, 168, 4, 20);
+	test(4, a, 192, 168, 4, 0);
+	test(4, b, 192, 168, 4, 4);
+	test(4, c, 192, 168, 200, 182);
+	test(4, c, 192, 95, 5, 68);
+	test(4, e, 192, 95, 5, 96);
+	test(6, d, 0x26075300, 0x60006b00, 0, 0xc05f0543);
+	test(6, c, 0x26075300, 0x60006b00, 0, 0xc02e01ee);
+	test(6, f, 0x26075300, 0x60006b01, 0, 0);
+	test(6, g, 0x24046800, 0x40040806, 0, 0x1006);
+	test(6, g, 0x24046800, 0x40040806, 0x1234, 0x5678);
+	test(6, f, 0x240467ff, 0x40040806, 0x1234, 0x5678);
+	test(6, f, 0x24046801, 0x40040806, 0x1234, 0x5678);
+	test(6, h, 0x24046800, 0x40040800, 0x1234, 0x5678);
+	test(6, h, 0x24046800, 0x40040800, 0, 0);
+	test(6, h, 0x24046800, 0x40040800, 0x10101010, 0x10101010);
+	test(6, a, 0x24046800, 0x40040800, 0xdeadbeef, 0xdeadbeef);
+	test(4, g, 64, 15, 116, 26);
+	test(4, g, 64, 15, 127, 3);
+	test(4, g, 64, 15, 123, 1);
+	test(4, h, 64, 15, 123, 128);
+	test(4, h, 64, 15, 123, 129);
+	test(4, a, 10, 0, 0, 52);
+	test(4, b, 10, 0, 0, 220);
+	test(4, a, 10, 1, 0, 2);
+	test(4, b, 10, 1, 0, 6);
+	test(4, c, 10, 1, 0, 10);
+	test(4, d, 10, 1, 0, 20);
+
+	insert(4, a, 1, 0, 0, 0, 32);
+	insert(4, a, 64, 0, 0, 0, 32);
+	insert(4, a, 128, 0, 0, 0, 32);
+	insert(4, a, 192, 0, 0, 0, 32);
+	insert(4, a, 255, 0, 0, 0, 32);
+	wg_allowedips_remove_by_peer(&t, a, &mutex);
+	test_negative(4, a, 1, 0, 0, 0);
+	test_negative(4, a, 64, 0, 0, 0);
+	test_negative(4, a, 128, 0, 0, 0);
+	test_negative(4, a, 192, 0, 0, 0);
+	test_negative(4, a, 255, 0, 0, 0);
+
+	wg_allowedips_free(&t, &mutex);
+	wg_allowedips_init(&t);
+	insert(4, a, 192, 168, 0, 0, 16);
+	insert(4, a, 192, 168, 0, 0, 24);
+	wg_allowedips_remove_by_peer(&t, a, &mutex);
+	test_negative(4, a, 192, 168, 0, 1);
+
+	/* These will hit the WARN_ON(len >= 128) in free_node if something
+	 * goes wrong.
+	 */
+	for (i = 0; i < 128; ++i) {
+		part = cpu_to_be64(~(1LLU << (i % 64)));
+		memset(&ip, 0xff, 16);
+		memcpy((u8 *)&ip + (i < 64) * 8, &part, 8);
+		wg_allowedips_insert_v6(&t, &ip, 128, a, &mutex);
+	}
+
+	wg_allowedips_free(&t, &mutex);
+
+	wg_allowedips_init(&t);
+	insert(4, a, 192, 95, 5, 93, 27);
+	insert(6, a, 0x26075300, 0x60006b00, 0, 0xc05f0543, 128);
+	insert(4, a, 10, 1, 0, 20, 29);
+	insert(6, a, 0x26075300, 0x6d8a6bf8, 0xdab1f1df, 0xc05f1523, 83);
+	insert(6, a, 0x26075300, 0x6d8a6bf8, 0xdab1f1df, 0xc05f1523, 21);
+	list_for_each_entry(iter_node, &a->allowedips_list, peer_list) {
+		u8 cidr, ip[16] __aligned(__alignof(u64));
+		int family = wg_allowedips_read_node(iter_node, ip, &cidr);
+
+		count++;
+
+		if (cidr == 27 && family == AF_INET &&
+		    !memcmp(ip, ip4(192, 95, 5, 64), sizeof(struct in_addr)))
+			found_a = true;
+		else if (cidr == 128 && family == AF_INET6 &&
+			 !memcmp(ip, ip6(0x26075300, 0x60006b00, 0, 0xc05f0543),
+				 sizeof(struct in6_addr)))
+			found_b = true;
+		else if (cidr == 29 && family == AF_INET &&
+			 !memcmp(ip, ip4(10, 1, 0, 16), sizeof(struct in_addr)))
+			found_c = true;
+		else if (cidr == 83 && family == AF_INET6 &&
+			 !memcmp(ip, ip6(0x26075300, 0x6d8a6bf8, 0xdab1e000, 0),
+				 sizeof(struct in6_addr)))
+			found_d = true;
+		else if (cidr == 21 && family == AF_INET6 &&
+			 !memcmp(ip, ip6(0x26075000, 0, 0, 0),
+				 sizeof(struct in6_addr)))
+			found_e = true;
+		else
+			found_other = true;
+	}
+	test_boolean(count == 5);
+	test_boolean(found_a);
+	test_boolean(found_b);
+	test_boolean(found_c);
+	test_boolean(found_d);
+	test_boolean(found_e);
+	test_boolean(!found_other);
+
+	if (IS_ENABLED(DEBUG_RANDOM_TRIE) && success)
+		success = randomized_test();
+
+	if (success)
+		pr_info("allowedips self-tests: pass\n");
+
+free:
+	wg_allowedips_free(&t, &mutex);
+	kfree(a);
+	kfree(b);
+	kfree(c);
+	kfree(d);
+	kfree(e);
+	kfree(f);
+	kfree(g);
+	kfree(h);
+	mutex_unlock(&mutex);
+
+	return success;
+}
+
+#undef test_negative
+#undef test
+#undef remove
+#undef insert
+#undef init_peer
+
+#endif
diff --git a/drivers/net/wireguard/selftest/counter.c b/drivers/net/wireguard/selftest/counter.c
new file mode 100644
index 0000000..ec3c156
--- /dev/null
+++ b/drivers/net/wireguard/selftest/counter.c
@@ -0,0 +1,111 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifdef DEBUG
+bool __init wg_packet_counter_selftest(void)
+{
+	struct noise_replay_counter *counter;
+	unsigned int test_num = 0, i;
+	bool success = true;
+
+	counter = kmalloc(sizeof(*counter), GFP_KERNEL);
+	if (unlikely(!counter)) {
+		pr_err("nonce counter self-test malloc: FAIL\n");
+		return false;
+	}
+
+#define T_INIT do {                                    \
+		memset(counter, 0, sizeof(*counter));  \
+		spin_lock_init(&counter->lock);        \
+	} while (0)
+#define T_LIM (COUNTER_WINDOW_SIZE + 1)
+#define T(n, v) do {                                                  \
+		++test_num;                                           \
+		if (counter_validate(counter, n) != (v)) {            \
+			pr_err("nonce counter self-test %u: FAIL\n",  \
+			       test_num);                             \
+			success = false;                              \
+		}                                                     \
+	} while (0)
+
+	T_INIT;
+	/*  1 */ T(0, true);
+	/*  2 */ T(1, true);
+	/*  3 */ T(1, false);
+	/*  4 */ T(9, true);
+	/*  5 */ T(8, true);
+	/*  6 */ T(7, true);
+	/*  7 */ T(7, false);
+	/*  8 */ T(T_LIM, true);
+	/*  9 */ T(T_LIM - 1, true);
+	/* 10 */ T(T_LIM - 1, false);
+	/* 11 */ T(T_LIM - 2, true);
+	/* 12 */ T(2, true);
+	/* 13 */ T(2, false);
+	/* 14 */ T(T_LIM + 16, true);
+	/* 15 */ T(3, false);
+	/* 16 */ T(T_LIM + 16, false);
+	/* 17 */ T(T_LIM * 4, true);
+	/* 18 */ T(T_LIM * 4 - (T_LIM - 1), true);
+	/* 19 */ T(10, false);
+	/* 20 */ T(T_LIM * 4 - T_LIM, false);
+	/* 21 */ T(T_LIM * 4 - (T_LIM + 1), false);
+	/* 22 */ T(T_LIM * 4 - (T_LIM - 2), true);
+	/* 23 */ T(T_LIM * 4 + 1 - T_LIM, false);
+	/* 24 */ T(0, false);
+	/* 25 */ T(REJECT_AFTER_MESSAGES, false);
+	/* 26 */ T(REJECT_AFTER_MESSAGES - 1, true);
+	/* 27 */ T(REJECT_AFTER_MESSAGES, false);
+	/* 28 */ T(REJECT_AFTER_MESSAGES - 1, false);
+	/* 29 */ T(REJECT_AFTER_MESSAGES - 2, true);
+	/* 30 */ T(REJECT_AFTER_MESSAGES + 1, false);
+	/* 31 */ T(REJECT_AFTER_MESSAGES + 2, false);
+	/* 32 */ T(REJECT_AFTER_MESSAGES - 2, false);
+	/* 33 */ T(REJECT_AFTER_MESSAGES - 3, true);
+	/* 34 */ T(0, false);
+
+	T_INIT;
+	for (i = 1; i <= COUNTER_WINDOW_SIZE; ++i)
+		T(i, true);
+	T(0, true);
+	T(0, false);
+
+	T_INIT;
+	for (i = 2; i <= COUNTER_WINDOW_SIZE + 1; ++i)
+		T(i, true);
+	T(1, true);
+	T(0, false);
+
+	T_INIT;
+	for (i = COUNTER_WINDOW_SIZE + 1; i-- > 0;)
+		T(i, true);
+
+	T_INIT;
+	for (i = COUNTER_WINDOW_SIZE + 2; i-- > 1;)
+		T(i, true);
+	T(0, false);
+
+	T_INIT;
+	for (i = COUNTER_WINDOW_SIZE + 1; i-- > 1;)
+		T(i, true);
+	T(COUNTER_WINDOW_SIZE + 1, true);
+	T(0, false);
+
+	T_INIT;
+	for (i = COUNTER_WINDOW_SIZE + 1; i-- > 1;)
+		T(i, true);
+	T(0, true);
+	T(COUNTER_WINDOW_SIZE + 1, true);
+
+#undef T
+#undef T_LIM
+#undef T_INIT
+
+	if (success)
+		pr_info("nonce counter self-tests: pass\n");
+	kfree(counter);
+	return success;
+}
+#endif
diff --git a/drivers/net/wireguard/selftest/ratelimiter.c b/drivers/net/wireguard/selftest/ratelimiter.c
new file mode 100644
index 0000000..007cd44
--- /dev/null
+++ b/drivers/net/wireguard/selftest/ratelimiter.c
@@ -0,0 +1,226 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifdef DEBUG
+
+#include <linux/jiffies.h>
+
+static const struct {
+	bool result;
+	unsigned int msec_to_sleep_before;
+} expected_results[] __initconst = {
+	[0 ... PACKETS_BURSTABLE - 1] = { true, 0 },
+	[PACKETS_BURSTABLE] = { false, 0 },
+	[PACKETS_BURSTABLE + 1] = { true, MSEC_PER_SEC / PACKETS_PER_SECOND },
+	[PACKETS_BURSTABLE + 2] = { false, 0 },
+	[PACKETS_BURSTABLE + 3] = { true, (MSEC_PER_SEC / PACKETS_PER_SECOND) * 2 },
+	[PACKETS_BURSTABLE + 4] = { true, 0 },
+	[PACKETS_BURSTABLE + 5] = { false, 0 }
+};
+
+static __init unsigned int maximum_jiffies_at_index(int index)
+{
+	unsigned int total_msecs = 2 * MSEC_PER_SEC / PACKETS_PER_SECOND / 3;
+	int i;
+
+	for (i = 0; i <= index; ++i)
+		total_msecs += expected_results[i].msec_to_sleep_before;
+	return msecs_to_jiffies(total_msecs);
+}
+
+static __init int timings_test(struct sk_buff *skb4, struct iphdr *hdr4,
+			       struct sk_buff *skb6, struct ipv6hdr *hdr6,
+			       int *test)
+{
+	unsigned long loop_start_time;
+	int i;
+
+	wg_ratelimiter_gc_entries(NULL);
+	rcu_barrier();
+	loop_start_time = jiffies;
+
+	for (i = 0; i < ARRAY_SIZE(expected_results); ++i) {
+		if (expected_results[i].msec_to_sleep_before)
+			msleep(expected_results[i].msec_to_sleep_before);
+
+		if (time_is_before_jiffies(loop_start_time +
+					   maximum_jiffies_at_index(i)))
+			return -ETIMEDOUT;
+		if (wg_ratelimiter_allow(skb4, &init_net) !=
+					expected_results[i].result)
+			return -EXFULL;
+		++(*test);
+
+		hdr4->saddr = htonl(ntohl(hdr4->saddr) + i + 1);
+		if (time_is_before_jiffies(loop_start_time +
+					   maximum_jiffies_at_index(i)))
+			return -ETIMEDOUT;
+		if (!wg_ratelimiter_allow(skb4, &init_net))
+			return -EXFULL;
+		++(*test);
+
+		hdr4->saddr = htonl(ntohl(hdr4->saddr) - i - 1);
+
+#if IS_ENABLED(CONFIG_IPV6)
+		hdr6->saddr.in6_u.u6_addr32[2] = htonl(i);
+		hdr6->saddr.in6_u.u6_addr32[3] = htonl(i);
+		if (time_is_before_jiffies(loop_start_time +
+					   maximum_jiffies_at_index(i)))
+			return -ETIMEDOUT;
+		if (wg_ratelimiter_allow(skb6, &init_net) !=
+					expected_results[i].result)
+			return -EXFULL;
+		++(*test);
+
+		hdr6->saddr.in6_u.u6_addr32[0] =
+			htonl(ntohl(hdr6->saddr.in6_u.u6_addr32[0]) + i + 1);
+		if (time_is_before_jiffies(loop_start_time +
+					   maximum_jiffies_at_index(i)))
+			return -ETIMEDOUT;
+		if (!wg_ratelimiter_allow(skb6, &init_net))
+			return -EXFULL;
+		++(*test);
+
+		hdr6->saddr.in6_u.u6_addr32[0] =
+			htonl(ntohl(hdr6->saddr.in6_u.u6_addr32[0]) - i - 1);
+
+		if (time_is_before_jiffies(loop_start_time +
+					   maximum_jiffies_at_index(i)))
+			return -ETIMEDOUT;
+#endif
+	}
+	return 0;
+}
+
+static __init int capacity_test(struct sk_buff *skb4, struct iphdr *hdr4,
+				int *test)
+{
+	int i;
+
+	wg_ratelimiter_gc_entries(NULL);
+	rcu_barrier();
+
+	if (atomic_read(&total_entries))
+		return -EXFULL;
+	++(*test);
+
+	for (i = 0; i <= max_entries; ++i) {
+		hdr4->saddr = htonl(i);
+		if (wg_ratelimiter_allow(skb4, &init_net) != (i != max_entries))
+			return -EXFULL;
+		++(*test);
+	}
+	return 0;
+}
+
+bool __init wg_ratelimiter_selftest(void)
+{
+	enum { TRIALS_BEFORE_GIVING_UP = 5000 };
+	bool success = false;
+	int test = 0, trials;
+	struct sk_buff *skb4, *skb6 = NULL;
+	struct iphdr *hdr4;
+	struct ipv6hdr *hdr6 = NULL;
+
+	if (IS_ENABLED(CONFIG_KASAN) || IS_ENABLED(CONFIG_UBSAN))
+		return true;
+
+	BUILD_BUG_ON(MSEC_PER_SEC % PACKETS_PER_SECOND != 0);
+
+	if (wg_ratelimiter_init())
+		goto out;
+	++test;
+	if (wg_ratelimiter_init()) {
+		wg_ratelimiter_uninit();
+		goto out;
+	}
+	++test;
+	if (wg_ratelimiter_init()) {
+		wg_ratelimiter_uninit();
+		wg_ratelimiter_uninit();
+		goto out;
+	}
+	++test;
+
+	skb4 = alloc_skb(sizeof(struct iphdr), GFP_KERNEL);
+	if (unlikely(!skb4))
+		goto err_nofree;
+	skb4->protocol = htons(ETH_P_IP);
+	hdr4 = (struct iphdr *)skb_put(skb4, sizeof(*hdr4));
+	hdr4->saddr = htonl(8182);
+	skb_reset_network_header(skb4);
+	++test;
+
+#if IS_ENABLED(CONFIG_IPV6)
+	skb6 = alloc_skb(sizeof(struct ipv6hdr), GFP_KERNEL);
+	if (unlikely(!skb6)) {
+		kfree_skb(skb4);
+		goto err_nofree;
+	}
+	skb6->protocol = htons(ETH_P_IPV6);
+	hdr6 = (struct ipv6hdr *)skb_put(skb6, sizeof(*hdr6));
+	hdr6->saddr.in6_u.u6_addr32[0] = htonl(1212);
+	hdr6->saddr.in6_u.u6_addr32[1] = htonl(289188);
+	skb_reset_network_header(skb6);
+	++test;
+#endif
+
+	for (trials = TRIALS_BEFORE_GIVING_UP;;) {
+		int test_count = 0, ret;
+
+		ret = timings_test(skb4, hdr4, skb6, hdr6, &test_count);
+		if (ret == -ETIMEDOUT) {
+			if (!trials--) {
+				test += test_count;
+				goto err;
+			}
+			msleep(500);
+			continue;
+		} else if (ret < 0) {
+			test += test_count;
+			goto err;
+		} else {
+			test += test_count;
+			break;
+		}
+	}
+
+	for (trials = TRIALS_BEFORE_GIVING_UP;;) {
+		int test_count = 0;
+
+		if (capacity_test(skb4, hdr4, &test_count) < 0) {
+			if (!trials--) {
+				test += test_count;
+				goto err;
+			}
+			msleep(50);
+			continue;
+		}
+		test += test_count;
+		break;
+	}
+
+	success = true;
+
+err:
+	kfree_skb(skb4);
+#if IS_ENABLED(CONFIG_IPV6)
+	kfree_skb(skb6);
+#endif
+err_nofree:
+	wg_ratelimiter_uninit();
+	wg_ratelimiter_uninit();
+	wg_ratelimiter_uninit();
+	/* Uninit one extra time to check underflow detection. */
+	wg_ratelimiter_uninit();
+out:
+	if (success)
+		pr_info("ratelimiter self-tests: pass\n");
+	else
+		pr_err("ratelimiter self-test %d: FAIL\n", test);
+
+	return success;
+}
+#endif
diff --git a/drivers/net/wireguard/send.c b/drivers/net/wireguard/send.c
new file mode 100644
index 0000000..f74b934
--- /dev/null
+++ b/drivers/net/wireguard/send.c
@@ -0,0 +1,422 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "queueing.h"
+#include "timers.h"
+#include "device.h"
+#include "peer.h"
+#include "socket.h"
+#include "messages.h"
+#include "cookie.h"
+
+#include <linux/uio.h>
+#include <linux/inetdevice.h>
+#include <linux/socket.h>
+#include <net/ip_tunnels.h>
+#include <net/udp.h>
+#include <net/sock.h>
+
+static void wg_packet_send_handshake_initiation(struct wg_peer *peer)
+{
+	struct message_handshake_initiation packet;
+
+	if (!wg_birthdate_has_expired(atomic64_read(&peer->last_sent_handshake),
+				      REKEY_TIMEOUT))
+		return; /* This function is rate limited. */
+
+	atomic64_set(&peer->last_sent_handshake, ktime_get_coarse_boottime_ns());
+	net_dbg_ratelimited("%s: Sending handshake initiation to peer %llu (%pISpfsc)\n",
+			    peer->device->dev->name, peer->internal_id,
+			    &peer->endpoint.addr);
+
+	if (wg_noise_handshake_create_initiation(&packet, &peer->handshake)) {
+		wg_cookie_add_mac_to_packet(&packet, sizeof(packet), peer);
+		wg_timers_any_authenticated_packet_traversal(peer);
+		wg_timers_any_authenticated_packet_sent(peer);
+		atomic64_set(&peer->last_sent_handshake,
+			     ktime_get_coarse_boottime_ns());
+		wg_socket_send_buffer_to_peer(peer, &packet, sizeof(packet),
+					      HANDSHAKE_DSCP);
+		wg_timers_handshake_initiated(peer);
+	}
+}
+
+void wg_packet_handshake_send_worker(struct work_struct *work)
+{
+	struct wg_peer *peer = container_of(work, struct wg_peer,
+					    transmit_handshake_work);
+
+	wg_packet_send_handshake_initiation(peer);
+	wg_peer_put(peer);
+}
+
+void wg_packet_send_queued_handshake_initiation(struct wg_peer *peer,
+						bool is_retry)
+{
+	if (!is_retry)
+		peer->timer_handshake_attempts = 0;
+
+	rcu_read_lock_bh();
+	/* We check last_sent_handshake here in addition to the actual function
+	 * we're queueing up, so that we don't queue things if not strictly
+	 * necessary:
+	 */
+	if (!wg_birthdate_has_expired(atomic64_read(&peer->last_sent_handshake),
+				      REKEY_TIMEOUT) ||
+			unlikely(READ_ONCE(peer->is_dead)))
+		goto out;
+
+	wg_peer_get(peer);
+	/* Queues up calling packet_send_queued_handshakes(peer), where we do a
+	 * peer_put(peer) after:
+	 */
+	if (!queue_work(peer->device->handshake_send_wq,
+			&peer->transmit_handshake_work))
+		/* If the work was already queued, we want to drop the
+		 * extra reference:
+		 */
+		wg_peer_put(peer);
+out:
+	rcu_read_unlock_bh();
+}
+
+void wg_packet_send_handshake_response(struct wg_peer *peer)
+{
+	struct message_handshake_response packet;
+
+	atomic64_set(&peer->last_sent_handshake, ktime_get_coarse_boottime_ns());
+	net_dbg_ratelimited("%s: Sending handshake response to peer %llu (%pISpfsc)\n",
+			    peer->device->dev->name, peer->internal_id,
+			    &peer->endpoint.addr);
+
+	if (wg_noise_handshake_create_response(&packet, &peer->handshake)) {
+		wg_cookie_add_mac_to_packet(&packet, sizeof(packet), peer);
+		if (wg_noise_handshake_begin_session(&peer->handshake,
+						     &peer->keypairs)) {
+			wg_timers_session_derived(peer);
+			wg_timers_any_authenticated_packet_traversal(peer);
+			wg_timers_any_authenticated_packet_sent(peer);
+			atomic64_set(&peer->last_sent_handshake,
+				     ktime_get_coarse_boottime_ns());
+			wg_socket_send_buffer_to_peer(peer, &packet,
+						      sizeof(packet),
+						      HANDSHAKE_DSCP);
+		}
+	}
+}
+
+void wg_packet_send_handshake_cookie(struct wg_device *wg,
+				     struct sk_buff *initiating_skb,
+				     __le32 sender_index)
+{
+	struct message_handshake_cookie packet;
+
+	net_dbg_skb_ratelimited("%s: Sending cookie response for denied handshake message for %pISpfsc\n",
+				wg->dev->name, initiating_skb);
+	wg_cookie_message_create(&packet, initiating_skb, sender_index,
+				 &wg->cookie_checker);
+	wg_socket_send_buffer_as_reply_to_skb(wg, initiating_skb, &packet,
+					      sizeof(packet));
+}
+
+static void keep_key_fresh(struct wg_peer *peer)
+{
+	struct noise_keypair *keypair;
+	bool send;
+
+	rcu_read_lock_bh();
+	keypair = rcu_dereference_bh(peer->keypairs.current_keypair);
+	send = keypair && READ_ONCE(keypair->sending.is_valid) &&
+	       (atomic64_read(&keypair->sending_counter) > REKEY_AFTER_MESSAGES ||
+		(keypair->i_am_the_initiator &&
+		 wg_birthdate_has_expired(keypair->sending.birthdate, REKEY_AFTER_TIME)));
+	rcu_read_unlock_bh();
+
+	if (unlikely(send))
+		wg_packet_send_queued_handshake_initiation(peer, false);
+}
+
+static unsigned int calculate_skb_padding(struct sk_buff *skb)
+{
+	unsigned int padded_size, last_unit = skb->len;
+
+	if (unlikely(!PACKET_CB(skb)->mtu))
+		return ALIGN(last_unit, MESSAGE_PADDING_MULTIPLE) - last_unit;
+
+	/* We do this modulo business with the MTU, just in case the networking
+	 * layer gives us a packet that's bigger than the MTU. In that case, we
+	 * wouldn't want the final subtraction to overflow in the case of the
+	 * padded_size being clamped. Fortunately, that's very rarely the case,
+	 * so we optimize for that not happening.
+	 */
+	if (unlikely(last_unit > PACKET_CB(skb)->mtu))
+		last_unit %= PACKET_CB(skb)->mtu;
+
+	padded_size = min(PACKET_CB(skb)->mtu,
+			  ALIGN(last_unit, MESSAGE_PADDING_MULTIPLE));
+	return padded_size - last_unit;
+}
+
+static bool encrypt_packet(struct sk_buff *skb, struct noise_keypair *keypair)
+{
+	unsigned int padding_len, plaintext_len, trailer_len;
+	struct scatterlist sg[MAX_SKB_FRAGS + 8];
+	struct message_data *header;
+	struct sk_buff *trailer;
+	int num_frags;
+
+	/* Force hash calculation before encryption so that flow analysis is
+	 * consistent over the inner packet.
+	 */
+	skb_get_hash(skb);
+
+	/* Calculate lengths. */
+	padding_len = calculate_skb_padding(skb);
+	trailer_len = padding_len + noise_encrypted_len(0);
+	plaintext_len = skb->len + padding_len;
+
+	/* Expand data section to have room for padding and auth tag. */
+	num_frags = skb_cow_data(skb, trailer_len, &trailer);
+	if (unlikely(num_frags < 0 || num_frags > ARRAY_SIZE(sg)))
+		return false;
+
+	/* Set the padding to zeros, and make sure it and the auth tag are part
+	 * of the skb.
+	 */
+	memset(skb_tail_pointer(trailer), 0, padding_len);
+
+	/* Expand head section to have room for our header and the network
+	 * stack's headers.
+	 */
+	if (unlikely(skb_cow_head(skb, DATA_PACKET_HEAD_ROOM) < 0))
+		return false;
+
+	/* Finalize checksum calculation for the inner packet, if required. */
+	if (unlikely(skb->ip_summed == CHECKSUM_PARTIAL &&
+		     skb_checksum_help(skb)))
+		return false;
+
+	/* Only after checksumming can we safely add on the padding at the end
+	 * and the header.
+	 */
+	skb_set_inner_network_header(skb, 0);
+	header = (struct message_data *)skb_push(skb, sizeof(*header));
+	header->header.type = cpu_to_le32(MESSAGE_DATA);
+	header->key_idx = keypair->remote_index;
+	header->counter = cpu_to_le64(PACKET_CB(skb)->nonce);
+	pskb_put(skb, trailer, trailer_len);
+
+	/* Now we can encrypt the scattergather segments */
+	sg_init_table(sg, num_frags);
+	if (skb_to_sgvec(skb, sg, sizeof(struct message_data),
+			 noise_encrypted_len(plaintext_len)) <= 0)
+		return false;
+	return chacha20poly1305_encrypt_sg_inplace(sg, plaintext_len, NULL, 0,
+						   PACKET_CB(skb)->nonce,
+						   keypair->sending.key);
+}
+
+void wg_packet_send_keepalive(struct wg_peer *peer)
+{
+	struct sk_buff *skb;
+
+	if (skb_queue_empty(&peer->staged_packet_queue)) {
+		skb = alloc_skb(DATA_PACKET_HEAD_ROOM + MESSAGE_MINIMUM_LENGTH,
+				GFP_ATOMIC);
+		if (unlikely(!skb))
+			return;
+		skb_reserve(skb, DATA_PACKET_HEAD_ROOM);
+		skb->dev = peer->device->dev;
+		PACKET_CB(skb)->mtu = skb->dev->mtu;
+		skb_queue_tail(&peer->staged_packet_queue, skb);
+		net_dbg_ratelimited("%s: Sending keepalive packet to peer %llu (%pISpfsc)\n",
+				    peer->device->dev->name, peer->internal_id,
+				    &peer->endpoint.addr);
+	}
+
+	wg_packet_send_staged_packets(peer);
+}
+
+static void wg_packet_create_data_done(struct sk_buff *first,
+				       struct wg_peer *peer)
+{
+	struct sk_buff *skb, *next;
+	bool is_keepalive, data_sent = false;
+
+	wg_timers_any_authenticated_packet_traversal(peer);
+	wg_timers_any_authenticated_packet_sent(peer);
+	skb_list_walk_safe(first, skb, next) {
+		is_keepalive = skb->len == message_data_len(0);
+		if (likely(!wg_socket_send_skb_to_peer(peer, skb,
+				PACKET_CB(skb)->ds) && !is_keepalive))
+			data_sent = true;
+	}
+
+	if (likely(data_sent))
+		wg_timers_data_sent(peer);
+
+	keep_key_fresh(peer);
+}
+
+void wg_packet_tx_worker(struct work_struct *work)
+{
+	struct crypt_queue *queue = container_of(work, struct crypt_queue,
+						 work);
+	struct noise_keypair *keypair;
+	enum packet_state state;
+	struct sk_buff *first;
+	struct wg_peer *peer;
+
+	while ((first = __ptr_ring_peek(&queue->ring)) != NULL &&
+	       (state = atomic_read_acquire(&PACKET_CB(first)->state)) !=
+		       PACKET_STATE_UNCRYPTED) {
+		__ptr_ring_discard_one(&queue->ring);
+		peer = PACKET_PEER(first);
+		keypair = PACKET_CB(first)->keypair;
+
+		if (likely(state == PACKET_STATE_CRYPTED))
+			wg_packet_create_data_done(first, peer);
+		else
+			kfree_skb_list(first);
+
+		wg_noise_keypair_put(keypair, false);
+		wg_peer_put(peer);
+		if (need_resched())
+			cond_resched();
+	}
+}
+
+void wg_packet_encrypt_worker(struct work_struct *work)
+{
+	struct crypt_queue *queue = container_of(work, struct multicore_worker,
+						 work)->ptr;
+	struct sk_buff *first, *skb, *next;
+
+	while ((first = ptr_ring_consume_bh(&queue->ring)) != NULL) {
+		enum packet_state state = PACKET_STATE_CRYPTED;
+
+		skb_list_walk_safe(first, skb, next) {
+			if (likely(encrypt_packet(skb,
+					PACKET_CB(first)->keypair))) {
+				wg_reset_packet(skb, true);
+			} else {
+				state = PACKET_STATE_DEAD;
+				break;
+			}
+		}
+		wg_queue_enqueue_per_peer(&PACKET_PEER(first)->tx_queue, first,
+					  state);
+		if (need_resched())
+			cond_resched();
+	}
+}
+
+static void wg_packet_create_data(struct sk_buff *first)
+{
+	struct wg_peer *peer = PACKET_PEER(first);
+	struct wg_device *wg = peer->device;
+	int ret = -EINVAL;
+
+	rcu_read_lock_bh();
+	if (unlikely(READ_ONCE(peer->is_dead)))
+		goto err;
+
+	ret = wg_queue_enqueue_per_device_and_peer(&wg->encrypt_queue,
+						   &peer->tx_queue, first,
+						   wg->packet_crypt_wq,
+						   &wg->encrypt_queue.last_cpu);
+	if (unlikely(ret == -EPIPE))
+		wg_queue_enqueue_per_peer(&peer->tx_queue, first,
+					  PACKET_STATE_DEAD);
+err:
+	rcu_read_unlock_bh();
+	if (likely(!ret || ret == -EPIPE))
+		return;
+	wg_noise_keypair_put(PACKET_CB(first)->keypair, false);
+	wg_peer_put(peer);
+	kfree_skb_list(first);
+}
+
+void wg_packet_purge_staged_packets(struct wg_peer *peer)
+{
+	spin_lock_bh(&peer->staged_packet_queue.lock);
+	peer->device->dev->stats.tx_dropped += peer->staged_packet_queue.qlen;
+	__skb_queue_purge(&peer->staged_packet_queue);
+	spin_unlock_bh(&peer->staged_packet_queue.lock);
+}
+
+void wg_packet_send_staged_packets(struct wg_peer *peer)
+{
+	struct noise_keypair *keypair;
+	struct sk_buff_head packets;
+	struct sk_buff *skb;
+
+	/* Steal the current queue into our local one. */
+	__skb_queue_head_init(&packets);
+	spin_lock_bh(&peer->staged_packet_queue.lock);
+	skb_queue_splice_init(&peer->staged_packet_queue, &packets);
+	spin_unlock_bh(&peer->staged_packet_queue.lock);
+	if (unlikely(skb_queue_empty(&packets)))
+		return;
+
+	/* First we make sure we have a valid reference to a valid key. */
+	rcu_read_lock_bh();
+	keypair = wg_noise_keypair_get(
+		rcu_dereference_bh(peer->keypairs.current_keypair));
+	rcu_read_unlock_bh();
+	if (unlikely(!keypair))
+		goto out_nokey;
+	if (unlikely(!READ_ONCE(keypair->sending.is_valid)))
+		goto out_nokey;
+	if (unlikely(wg_birthdate_has_expired(keypair->sending.birthdate,
+					      REJECT_AFTER_TIME)))
+		goto out_invalid;
+
+	/* After we know we have a somewhat valid key, we now try to assign
+	 * nonces to all of the packets in the queue. If we can't assign nonces
+	 * for all of them, we just consider it a failure and wait for the next
+	 * handshake.
+	 */
+	skb_queue_walk(&packets, skb) {
+		/* 0 for no outer TOS: no leak. TODO: at some later point, we
+		 * might consider using flowi->tos as outer instead.
+		 */
+		PACKET_CB(skb)->ds = ip_tunnel_ecn_encap(0, ip_hdr(skb), skb);
+		PACKET_CB(skb)->nonce =
+				atomic64_inc_return(&keypair->sending_counter) - 1;
+		if (unlikely(PACKET_CB(skb)->nonce >= REJECT_AFTER_MESSAGES))
+			goto out_invalid;
+	}
+
+	packets.prev->next = NULL;
+	wg_peer_get(keypair->entry.peer);
+	PACKET_CB(packets.next)->keypair = keypair;
+	wg_packet_create_data(packets.next);
+	return;
+
+out_invalid:
+	WRITE_ONCE(keypair->sending.is_valid, false);
+out_nokey:
+	wg_noise_keypair_put(keypair, false);
+
+	/* We orphan the packets if we're waiting on a handshake, so that they
+	 * don't block a socket's pool.
+	 */
+	skb_queue_walk(&packets, skb)
+		skb_orphan(skb);
+	/* Then we put them back on the top of the queue. We're not too
+	 * concerned about accidentally getting things a little out of order if
+	 * packets are being added really fast, because this queue is for before
+	 * packets can even be sent and it's small anyway.
+	 */
+	spin_lock_bh(&peer->staged_packet_queue.lock);
+	skb_queue_splice(&packets, &peer->staged_packet_queue);
+	spin_unlock_bh(&peer->staged_packet_queue.lock);
+
+	/* If we're exiting because there's something wrong with the key, it
+	 * means we should initiate a new handshake.
+	 */
+	wg_packet_send_queued_handshake_initiation(peer, false);
+}
diff --git a/drivers/net/wireguard/socket.c b/drivers/net/wireguard/socket.c
new file mode 100644
index 0000000..c33e2c8
--- /dev/null
+++ b/drivers/net/wireguard/socket.c
@@ -0,0 +1,436 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "device.h"
+#include "peer.h"
+#include "socket.h"
+#include "queueing.h"
+#include "messages.h"
+
+#include <linux/ctype.h>
+#include <linux/net.h>
+#include <linux/if_vlan.h>
+#include <linux/if_ether.h>
+#include <linux/inetdevice.h>
+#include <net/udp_tunnel.h>
+#include <net/ipv6.h>
+
+static int send4(struct wg_device *wg, struct sk_buff *skb,
+		 struct endpoint *endpoint, u8 ds, struct dst_cache *cache)
+{
+	struct flowi4 fl = {
+		.saddr = endpoint->src4.s_addr,
+		.daddr = endpoint->addr4.sin_addr.s_addr,
+		.fl4_dport = endpoint->addr4.sin_port,
+		.flowi4_mark = wg->fwmark,
+		.flowi4_proto = IPPROTO_UDP
+	};
+	struct rtable *rt = NULL;
+	struct sock *sock;
+	int ret = 0;
+
+	skb_mark_not_on_list(skb);
+	skb->dev = wg->dev;
+	skb->mark = wg->fwmark;
+
+	rcu_read_lock_bh();
+	sock = rcu_dereference_bh(wg->sock4);
+
+	if (unlikely(!sock)) {
+		ret = -ENONET;
+		goto err;
+	}
+
+	fl.fl4_sport = inet_sk(sock)->inet_sport;
+
+	if (cache)
+		rt = dst_cache_get_ip4(cache, &fl.saddr);
+
+	if (!rt) {
+		security_sk_classify_flow(sock, flowi4_to_flowi(&fl));
+		if (unlikely(!inet_confirm_addr(sock_net(sock), NULL, 0,
+						fl.saddr, RT_SCOPE_HOST))) {
+			endpoint->src4.s_addr = 0;
+			*(__force __be32 *)&endpoint->src_if4 = 0;
+			fl.saddr = 0;
+			if (cache)
+				dst_cache_reset(cache);
+		}
+		rt = ip_route_output_flow(sock_net(sock), &fl, sock);
+		if (unlikely(endpoint->src_if4 && ((IS_ERR(rt) &&
+			     PTR_ERR(rt) == -EINVAL) || (!IS_ERR(rt) &&
+			     rt->dst.dev->ifindex != endpoint->src_if4)))) {
+			endpoint->src4.s_addr = 0;
+			*(__force __be32 *)&endpoint->src_if4 = 0;
+			fl.saddr = 0;
+			if (cache)
+				dst_cache_reset(cache);
+			if (!IS_ERR(rt))
+				ip_rt_put(rt);
+			rt = ip_route_output_flow(sock_net(sock), &fl, sock);
+		}
+		if (unlikely(IS_ERR(rt))) {
+			ret = PTR_ERR(rt);
+			net_dbg_ratelimited("%s: No route to %pISpfsc, error %d\n",
+					    wg->dev->name, &endpoint->addr, ret);
+			goto err;
+		}
+		if (cache)
+			dst_cache_set_ip4(cache, &rt->dst, fl.saddr);
+	}
+
+	skb->ignore_df = 1;
+	udp_tunnel_xmit_skb(rt, sock, skb, fl.saddr, fl.daddr, ds,
+			    ip4_dst_hoplimit(&rt->dst), 0, fl.fl4_sport,
+			    fl.fl4_dport, false, false);
+	goto out;
+
+err:
+	kfree_skb(skb);
+out:
+	rcu_read_unlock_bh();
+	return ret;
+}
+
+static int send6(struct wg_device *wg, struct sk_buff *skb,
+		 struct endpoint *endpoint, u8 ds, struct dst_cache *cache)
+{
+#if IS_ENABLED(CONFIG_IPV6)
+	struct flowi6 fl = {
+		.saddr = endpoint->src6,
+		.daddr = endpoint->addr6.sin6_addr,
+		.fl6_dport = endpoint->addr6.sin6_port,
+		.flowi6_mark = wg->fwmark,
+		.flowi6_oif = endpoint->addr6.sin6_scope_id,
+		.flowi6_proto = IPPROTO_UDP
+		/* TODO: addr->sin6_flowinfo */
+	};
+	struct dst_entry *dst = NULL;
+	struct sock *sock;
+	int ret = 0;
+
+	skb_mark_not_on_list(skb);
+	skb->dev = wg->dev;
+	skb->mark = wg->fwmark;
+
+	rcu_read_lock_bh();
+	sock = rcu_dereference_bh(wg->sock6);
+
+	if (unlikely(!sock)) {
+		ret = -ENONET;
+		goto err;
+	}
+
+	fl.fl6_sport = inet_sk(sock)->inet_sport;
+
+	if (cache)
+		dst = dst_cache_get_ip6(cache, &fl.saddr);
+
+	if (!dst) {
+		security_sk_classify_flow(sock, flowi6_to_flowi(&fl));
+		if (unlikely(!ipv6_addr_any(&fl.saddr) &&
+			     !ipv6_chk_addr(sock_net(sock), &fl.saddr, NULL, 0))) {
+			endpoint->src6 = fl.saddr = in6addr_any;
+			if (cache)
+				dst_cache_reset(cache);
+		}
+		dst = ipv6_stub->ipv6_dst_lookup_flow(sock_net(sock), sock, &fl,
+						      NULL);
+		if (unlikely(IS_ERR(dst))) {
+			ret = PTR_ERR(dst);
+			net_dbg_ratelimited("%s: No route to %pISpfsc, error %d\n",
+					    wg->dev->name, &endpoint->addr, ret);
+			goto err;
+		}
+		if (cache)
+			dst_cache_set_ip6(cache, dst, &fl.saddr);
+	}
+
+	skb->ignore_df = 1;
+	udp_tunnel6_xmit_skb(dst, sock, skb, skb->dev, &fl.saddr, &fl.daddr, ds,
+			     ip6_dst_hoplimit(dst), 0, fl.fl6_sport,
+			     fl.fl6_dport, false);
+	goto out;
+
+err:
+	kfree_skb(skb);
+out:
+	rcu_read_unlock_bh();
+	return ret;
+#else
+	return -EAFNOSUPPORT;
+#endif
+}
+
+int wg_socket_send_skb_to_peer(struct wg_peer *peer, struct sk_buff *skb, u8 ds)
+{
+	size_t skb_len = skb->len;
+	int ret = -EAFNOSUPPORT;
+
+	read_lock_bh(&peer->endpoint_lock);
+	if (peer->endpoint.addr.sa_family == AF_INET)
+		ret = send4(peer->device, skb, &peer->endpoint, ds,
+			    &peer->endpoint_cache);
+	else if (peer->endpoint.addr.sa_family == AF_INET6)
+		ret = send6(peer->device, skb, &peer->endpoint, ds,
+			    &peer->endpoint_cache);
+	else
+		dev_kfree_skb(skb);
+	if (likely(!ret))
+		peer->tx_bytes += skb_len;
+	read_unlock_bh(&peer->endpoint_lock);
+
+	return ret;
+}
+
+int wg_socket_send_buffer_to_peer(struct wg_peer *peer, void *buffer,
+				  size_t len, u8 ds)
+{
+	struct sk_buff *skb = alloc_skb(len + SKB_HEADER_LEN, GFP_ATOMIC);
+
+	if (unlikely(!skb))
+		return -ENOMEM;
+
+	skb_reserve(skb, SKB_HEADER_LEN);
+	skb_set_inner_network_header(skb, 0);
+	skb_put_data(skb, buffer, len);
+	return wg_socket_send_skb_to_peer(peer, skb, ds);
+}
+
+int wg_socket_send_buffer_as_reply_to_skb(struct wg_device *wg,
+					  struct sk_buff *in_skb, void *buffer,
+					  size_t len)
+{
+	int ret = 0;
+	struct sk_buff *skb;
+	struct endpoint endpoint;
+
+	if (unlikely(!in_skb))
+		return -EINVAL;
+	ret = wg_socket_endpoint_from_skb(&endpoint, in_skb);
+	if (unlikely(ret < 0))
+		return ret;
+
+	skb = alloc_skb(len + SKB_HEADER_LEN, GFP_ATOMIC);
+	if (unlikely(!skb))
+		return -ENOMEM;
+	skb_reserve(skb, SKB_HEADER_LEN);
+	skb_set_inner_network_header(skb, 0);
+	skb_put_data(skb, buffer, len);
+
+	if (endpoint.addr.sa_family == AF_INET)
+		ret = send4(wg, skb, &endpoint, 0, NULL);
+	else if (endpoint.addr.sa_family == AF_INET6)
+		ret = send6(wg, skb, &endpoint, 0, NULL);
+	/* No other possibilities if the endpoint is valid, which it is,
+	 * as we checked above.
+	 */
+
+	return ret;
+}
+
+int wg_socket_endpoint_from_skb(struct endpoint *endpoint,
+				const struct sk_buff *skb)
+{
+	memset(endpoint, 0, sizeof(*endpoint));
+	if (skb->protocol == htons(ETH_P_IP)) {
+		endpoint->addr4.sin_family = AF_INET;
+		endpoint->addr4.sin_port = udp_hdr(skb)->source;
+		endpoint->addr4.sin_addr.s_addr = ip_hdr(skb)->saddr;
+		endpoint->src4.s_addr = ip_hdr(skb)->daddr;
+		endpoint->src_if4 = skb->skb_iif;
+	} else if (skb->protocol == htons(ETH_P_IPV6)) {
+		endpoint->addr6.sin6_family = AF_INET6;
+		endpoint->addr6.sin6_port = udp_hdr(skb)->source;
+		endpoint->addr6.sin6_addr = ipv6_hdr(skb)->saddr;
+		endpoint->addr6.sin6_scope_id = ipv6_iface_scope_id(
+			&ipv6_hdr(skb)->saddr, skb->skb_iif);
+		endpoint->src6 = ipv6_hdr(skb)->daddr;
+	} else {
+		return -EINVAL;
+	}
+	return 0;
+}
+
+static bool endpoint_eq(const struct endpoint *a, const struct endpoint *b)
+{
+	return (a->addr.sa_family == AF_INET && b->addr.sa_family == AF_INET &&
+		a->addr4.sin_port == b->addr4.sin_port &&
+		a->addr4.sin_addr.s_addr == b->addr4.sin_addr.s_addr &&
+		a->src4.s_addr == b->src4.s_addr && a->src_if4 == b->src_if4) ||
+	       (a->addr.sa_family == AF_INET6 &&
+		b->addr.sa_family == AF_INET6 &&
+		a->addr6.sin6_port == b->addr6.sin6_port &&
+		ipv6_addr_equal(&a->addr6.sin6_addr, &b->addr6.sin6_addr) &&
+		a->addr6.sin6_scope_id == b->addr6.sin6_scope_id &&
+		ipv6_addr_equal(&a->src6, &b->src6)) ||
+	       unlikely(!a->addr.sa_family && !b->addr.sa_family);
+}
+
+void wg_socket_set_peer_endpoint(struct wg_peer *peer,
+				 const struct endpoint *endpoint)
+{
+	/* First we check unlocked, in order to optimize, since it's pretty rare
+	 * that an endpoint will change. If we happen to be mid-write, and two
+	 * CPUs wind up writing the same thing or something slightly different,
+	 * it doesn't really matter much either.
+	 */
+	if (endpoint_eq(endpoint, &peer->endpoint))
+		return;
+	write_lock_bh(&peer->endpoint_lock);
+	if (endpoint->addr.sa_family == AF_INET) {
+		peer->endpoint.addr4 = endpoint->addr4;
+		peer->endpoint.src4 = endpoint->src4;
+		peer->endpoint.src_if4 = endpoint->src_if4;
+	} else if (endpoint->addr.sa_family == AF_INET6) {
+		peer->endpoint.addr6 = endpoint->addr6;
+		peer->endpoint.src6 = endpoint->src6;
+	} else {
+		goto out;
+	}
+	dst_cache_reset(&peer->endpoint_cache);
+out:
+	write_unlock_bh(&peer->endpoint_lock);
+}
+
+void wg_socket_set_peer_endpoint_from_skb(struct wg_peer *peer,
+					  const struct sk_buff *skb)
+{
+	struct endpoint endpoint;
+
+	if (!wg_socket_endpoint_from_skb(&endpoint, skb))
+		wg_socket_set_peer_endpoint(peer, &endpoint);
+}
+
+void wg_socket_clear_peer_endpoint_src(struct wg_peer *peer)
+{
+	write_lock_bh(&peer->endpoint_lock);
+	memset(&peer->endpoint.src6, 0, sizeof(peer->endpoint.src6));
+	dst_cache_reset(&peer->endpoint_cache);
+	write_unlock_bh(&peer->endpoint_lock);
+}
+
+static int wg_receive(struct sock *sk, struct sk_buff *skb)
+{
+	struct wg_device *wg;
+
+	if (unlikely(!sk))
+		goto err;
+	wg = sk->sk_user_data;
+	if (unlikely(!wg))
+		goto err;
+	skb_mark_not_on_list(skb);
+	wg_packet_receive(wg, skb);
+	return 0;
+
+err:
+	kfree_skb(skb);
+	return 0;
+}
+
+static void sock_free(struct sock *sock)
+{
+	if (unlikely(!sock))
+		return;
+	sk_clear_memalloc(sock);
+	udp_tunnel_sock_release(sock->sk_socket);
+}
+
+static void set_sock_opts(struct socket *sock)
+{
+	sock->sk->sk_allocation = GFP_ATOMIC;
+	sock->sk->sk_sndbuf = INT_MAX;
+	sk_set_memalloc(sock->sk);
+}
+
+int wg_socket_init(struct wg_device *wg, u16 port)
+{
+	struct net *net;
+	int ret;
+	struct udp_tunnel_sock_cfg cfg = {
+		.sk_user_data = wg,
+		.encap_type = 1,
+		.encap_rcv = wg_receive
+	};
+	struct socket *new4 = NULL, *new6 = NULL;
+	struct udp_port_cfg port4 = {
+		.family = AF_INET,
+		.local_ip.s_addr = htonl(INADDR_ANY),
+		.local_udp_port = htons(port),
+		.use_udp_checksums = true
+	};
+#if IS_ENABLED(CONFIG_IPV6)
+	int retries = 0;
+	struct udp_port_cfg port6 = {
+		.family = AF_INET6,
+		.local_ip6 = IN6ADDR_ANY_INIT,
+		.use_udp6_tx_checksums = true,
+		.use_udp6_rx_checksums = true,
+		.ipv6_v6only = true
+	};
+#endif
+
+	rcu_read_lock();
+	net = rcu_dereference(wg->creating_net);
+	net = net ? maybe_get_net(net) : NULL;
+	rcu_read_unlock();
+	if (unlikely(!net))
+		return -ENONET;
+
+#if IS_ENABLED(CONFIG_IPV6)
+retry:
+#endif
+
+	ret = udp_sock_create(net, &port4, &new4);
+	if (ret < 0) {
+		pr_err("%s: Could not create IPv4 socket\n", wg->dev->name);
+		goto out;
+	}
+	set_sock_opts(new4);
+	setup_udp_tunnel_sock(net, new4, &cfg);
+
+#if IS_ENABLED(CONFIG_IPV6)
+	if (ipv6_mod_enabled()) {
+		port6.local_udp_port = inet_sk(new4->sk)->inet_sport;
+		ret = udp_sock_create(net, &port6, &new6);
+		if (ret < 0) {
+			udp_tunnel_sock_release(new4);
+			if (ret == -EADDRINUSE && !port && retries++ < 100)
+				goto retry;
+			pr_err("%s: Could not create IPv6 socket\n",
+			       wg->dev->name);
+			goto out;
+		}
+		set_sock_opts(new6);
+		setup_udp_tunnel_sock(net, new6, &cfg);
+	}
+#endif
+
+	wg_socket_reinit(wg, new4->sk, new6 ? new6->sk : NULL);
+	ret = 0;
+out:
+	put_net(net);
+	return ret;
+}
+
+void wg_socket_reinit(struct wg_device *wg, struct sock *new4,
+		      struct sock *new6)
+{
+	struct sock *old4, *old6;
+
+	mutex_lock(&wg->socket_update_lock);
+	old4 = rcu_dereference_protected(wg->sock4,
+				lockdep_is_held(&wg->socket_update_lock));
+	old6 = rcu_dereference_protected(wg->sock6,
+				lockdep_is_held(&wg->socket_update_lock));
+	rcu_assign_pointer(wg->sock4, new4);
+	rcu_assign_pointer(wg->sock6, new6);
+	if (new4)
+		wg->incoming_port = ntohs(inet_sk(new4)->inet_sport);
+	mutex_unlock(&wg->socket_update_lock);
+	synchronize_rcu();
+	sock_free(old4);
+	sock_free(old6);
+}
diff --git a/drivers/net/wireguard/socket.h b/drivers/net/wireguard/socket.h
new file mode 100644
index 0000000..bab5848
--- /dev/null
+++ b/drivers/net/wireguard/socket.h
@@ -0,0 +1,44 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_SOCKET_H
+#define _WG_SOCKET_H
+
+#include <linux/netdevice.h>
+#include <linux/udp.h>
+#include <linux/if_vlan.h>
+#include <linux/if_ether.h>
+
+int wg_socket_init(struct wg_device *wg, u16 port);
+void wg_socket_reinit(struct wg_device *wg, struct sock *new4,
+		      struct sock *new6);
+int wg_socket_send_buffer_to_peer(struct wg_peer *peer, void *data,
+				  size_t len, u8 ds);
+int wg_socket_send_skb_to_peer(struct wg_peer *peer, struct sk_buff *skb,
+			       u8 ds);
+int wg_socket_send_buffer_as_reply_to_skb(struct wg_device *wg,
+					  struct sk_buff *in_skb,
+					  void *out_buffer, size_t len);
+
+int wg_socket_endpoint_from_skb(struct endpoint *endpoint,
+				const struct sk_buff *skb);
+void wg_socket_set_peer_endpoint(struct wg_peer *peer,
+				 const struct endpoint *endpoint);
+void wg_socket_set_peer_endpoint_from_skb(struct wg_peer *peer,
+					  const struct sk_buff *skb);
+void wg_socket_clear_peer_endpoint_src(struct wg_peer *peer);
+
+#if defined(CONFIG_DYNAMIC_DEBUG) || defined(DEBUG)
+#define net_dbg_skb_ratelimited(fmt, dev, skb, ...) do {                       \
+		struct endpoint __endpoint;                                    \
+		wg_socket_endpoint_from_skb(&__endpoint, skb);                 \
+		net_dbg_ratelimited(fmt, dev, &__endpoint.addr,                \
+				    ##__VA_ARGS__);                            \
+	} while (0)
+#else
+#define net_dbg_skb_ratelimited(fmt, skb, ...)
+#endif
+
+#endif /* _WG_SOCKET_H */
diff --git a/drivers/net/wireguard/timers.c b/drivers/net/wireguard/timers.c
new file mode 100644
index 0000000..d54d32a
--- /dev/null
+++ b/drivers/net/wireguard/timers.c
@@ -0,0 +1,243 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "timers.h"
+#include "device.h"
+#include "peer.h"
+#include "queueing.h"
+#include "socket.h"
+
+/*
+ * - Timer for retransmitting the handshake if we don't hear back after
+ * `REKEY_TIMEOUT + jitter` ms.
+ *
+ * - Timer for sending empty packet if we have received a packet but after have
+ * not sent one for `KEEPALIVE_TIMEOUT` ms.
+ *
+ * - Timer for initiating new handshake if we have sent a packet but after have
+ * not received one (even empty) for `(KEEPALIVE_TIMEOUT + REKEY_TIMEOUT) +
+ * jitter` ms.
+ *
+ * - Timer for zeroing out all ephemeral keys after `(REJECT_AFTER_TIME * 3)` ms
+ * if no new keys have been received.
+ *
+ * - Timer for, if enabled, sending an empty authenticated packet every user-
+ * specified seconds.
+ */
+
+static inline void mod_peer_timer(struct wg_peer *peer,
+				  struct timer_list *timer,
+				  unsigned long expires)
+{
+	rcu_read_lock_bh();
+	if (likely(netif_running(peer->device->dev) &&
+		   !READ_ONCE(peer->is_dead)))
+		mod_timer(timer, expires);
+	rcu_read_unlock_bh();
+}
+
+static void wg_expired_retransmit_handshake(struct timer_list *timer)
+{
+	struct wg_peer *peer = from_timer(peer, timer,
+					  timer_retransmit_handshake);
+
+	if (peer->timer_handshake_attempts > MAX_TIMER_HANDSHAKES) {
+		pr_debug("%s: Handshake for peer %llu (%pISpfsc) did not complete after %d attempts, giving up\n",
+			 peer->device->dev->name, peer->internal_id,
+			 &peer->endpoint.addr, MAX_TIMER_HANDSHAKES + 2);
+
+		del_timer(&peer->timer_send_keepalive);
+		/* We drop all packets without a keypair and don't try again,
+		 * if we try unsuccessfully for too long to make a handshake.
+		 */
+		wg_packet_purge_staged_packets(peer);
+
+		/* We set a timer for destroying any residue that might be left
+		 * of a partial exchange.
+		 */
+		if (!timer_pending(&peer->timer_zero_key_material))
+			mod_peer_timer(peer, &peer->timer_zero_key_material,
+				       jiffies + REJECT_AFTER_TIME * 3 * HZ);
+	} else {
+		++peer->timer_handshake_attempts;
+		pr_debug("%s: Handshake for peer %llu (%pISpfsc) did not complete after %d seconds, retrying (try %d)\n",
+			 peer->device->dev->name, peer->internal_id,
+			 &peer->endpoint.addr, REKEY_TIMEOUT,
+			 peer->timer_handshake_attempts + 1);
+
+		/* We clear the endpoint address src address, in case this is
+		 * the cause of trouble.
+		 */
+		wg_socket_clear_peer_endpoint_src(peer);
+
+		wg_packet_send_queued_handshake_initiation(peer, true);
+	}
+}
+
+static void wg_expired_send_keepalive(struct timer_list *timer)
+{
+	struct wg_peer *peer = from_timer(peer, timer, timer_send_keepalive);
+
+	wg_packet_send_keepalive(peer);
+	if (peer->timer_need_another_keepalive) {
+		peer->timer_need_another_keepalive = false;
+		mod_peer_timer(peer, &peer->timer_send_keepalive,
+			       jiffies + KEEPALIVE_TIMEOUT * HZ);
+	}
+}
+
+static void wg_expired_new_handshake(struct timer_list *timer)
+{
+	struct wg_peer *peer = from_timer(peer, timer, timer_new_handshake);
+
+	pr_debug("%s: Retrying handshake with peer %llu (%pISpfsc) because we stopped hearing back after %d seconds\n",
+		 peer->device->dev->name, peer->internal_id,
+		 &peer->endpoint.addr, KEEPALIVE_TIMEOUT + REKEY_TIMEOUT);
+	/* We clear the endpoint address src address, in case this is the cause
+	 * of trouble.
+	 */
+	wg_socket_clear_peer_endpoint_src(peer);
+	wg_packet_send_queued_handshake_initiation(peer, false);
+}
+
+static void wg_expired_zero_key_material(struct timer_list *timer)
+{
+	struct wg_peer *peer = from_timer(peer, timer, timer_zero_key_material);
+
+	rcu_read_lock_bh();
+	if (!READ_ONCE(peer->is_dead)) {
+		wg_peer_get(peer);
+		if (!queue_work(peer->device->handshake_send_wq,
+				&peer->clear_peer_work))
+			/* If the work was already on the queue, we want to drop
+			 * the extra reference.
+			 */
+			wg_peer_put(peer);
+	}
+	rcu_read_unlock_bh();
+}
+
+static void wg_queued_expired_zero_key_material(struct work_struct *work)
+{
+	struct wg_peer *peer = container_of(work, struct wg_peer,
+					    clear_peer_work);
+
+	pr_debug("%s: Zeroing out all keys for peer %llu (%pISpfsc), since we haven't received a new one in %d seconds\n",
+		 peer->device->dev->name, peer->internal_id,
+		 &peer->endpoint.addr, REJECT_AFTER_TIME * 3);
+	wg_noise_handshake_clear(&peer->handshake);
+	wg_noise_keypairs_clear(&peer->keypairs);
+	wg_peer_put(peer);
+}
+
+static void wg_expired_send_persistent_keepalive(struct timer_list *timer)
+{
+	struct wg_peer *peer = from_timer(peer, timer,
+					  timer_persistent_keepalive);
+
+	if (likely(peer->persistent_keepalive_interval))
+		wg_packet_send_keepalive(peer);
+}
+
+/* Should be called after an authenticated data packet is sent. */
+void wg_timers_data_sent(struct wg_peer *peer)
+{
+	if (!timer_pending(&peer->timer_new_handshake))
+		mod_peer_timer(peer, &peer->timer_new_handshake,
+			jiffies + (KEEPALIVE_TIMEOUT + REKEY_TIMEOUT) * HZ +
+			prandom_u32_max(REKEY_TIMEOUT_JITTER_MAX_JIFFIES));
+}
+
+/* Should be called after an authenticated data packet is received. */
+void wg_timers_data_received(struct wg_peer *peer)
+{
+	if (likely(netif_running(peer->device->dev))) {
+		if (!timer_pending(&peer->timer_send_keepalive))
+			mod_peer_timer(peer, &peer->timer_send_keepalive,
+				       jiffies + KEEPALIVE_TIMEOUT * HZ);
+		else
+			peer->timer_need_another_keepalive = true;
+	}
+}
+
+/* Should be called after any type of authenticated packet is sent, whether
+ * keepalive, data, or handshake.
+ */
+void wg_timers_any_authenticated_packet_sent(struct wg_peer *peer)
+{
+	del_timer(&peer->timer_send_keepalive);
+}
+
+/* Should be called after any type of authenticated packet is received, whether
+ * keepalive, data, or handshake.
+ */
+void wg_timers_any_authenticated_packet_received(struct wg_peer *peer)
+{
+	del_timer(&peer->timer_new_handshake);
+}
+
+/* Should be called after a handshake initiation message is sent. */
+void wg_timers_handshake_initiated(struct wg_peer *peer)
+{
+	mod_peer_timer(peer, &peer->timer_retransmit_handshake,
+		       jiffies + REKEY_TIMEOUT * HZ +
+		       prandom_u32_max(REKEY_TIMEOUT_JITTER_MAX_JIFFIES));
+}
+
+/* Should be called after a handshake response message is received and processed
+ * or when getting key confirmation via the first data message.
+ */
+void wg_timers_handshake_complete(struct wg_peer *peer)
+{
+	del_timer(&peer->timer_retransmit_handshake);
+	peer->timer_handshake_attempts = 0;
+	peer->sent_lastminute_handshake = false;
+	ktime_get_real_ts64(&peer->walltime_last_handshake);
+}
+
+/* Should be called after an ephemeral key is created, which is before sending a
+ * handshake response or after receiving a handshake response.
+ */
+void wg_timers_session_derived(struct wg_peer *peer)
+{
+	mod_peer_timer(peer, &peer->timer_zero_key_material,
+		       jiffies + REJECT_AFTER_TIME * 3 * HZ);
+}
+
+/* Should be called before a packet with authentication, whether
+ * keepalive, data, or handshakem is sent, or after one is received.
+ */
+void wg_timers_any_authenticated_packet_traversal(struct wg_peer *peer)
+{
+	if (peer->persistent_keepalive_interval)
+		mod_peer_timer(peer, &peer->timer_persistent_keepalive,
+			jiffies + peer->persistent_keepalive_interval * HZ);
+}
+
+void wg_timers_init(struct wg_peer *peer)
+{
+	timer_setup(&peer->timer_retransmit_handshake,
+		    wg_expired_retransmit_handshake, 0);
+	timer_setup(&peer->timer_send_keepalive, wg_expired_send_keepalive, 0);
+	timer_setup(&peer->timer_new_handshake, wg_expired_new_handshake, 0);
+	timer_setup(&peer->timer_zero_key_material,
+		    wg_expired_zero_key_material, 0);
+	timer_setup(&peer->timer_persistent_keepalive,
+		    wg_expired_send_persistent_keepalive, 0);
+	INIT_WORK(&peer->clear_peer_work, wg_queued_expired_zero_key_material);
+	peer->timer_handshake_attempts = 0;
+	peer->sent_lastminute_handshake = false;
+	peer->timer_need_another_keepalive = false;
+}
+
+void wg_timers_stop(struct wg_peer *peer)
+{
+	del_timer_sync(&peer->timer_retransmit_handshake);
+	del_timer_sync(&peer->timer_send_keepalive);
+	del_timer_sync(&peer->timer_new_handshake);
+	del_timer_sync(&peer->timer_zero_key_material);
+	del_timer_sync(&peer->timer_persistent_keepalive);
+	flush_work(&peer->clear_peer_work);
+}
diff --git a/drivers/net/wireguard/timers.h b/drivers/net/wireguard/timers.h
new file mode 100644
index 0000000..f0653dc
--- /dev/null
+++ b/drivers/net/wireguard/timers.h
@@ -0,0 +1,31 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_TIMERS_H
+#define _WG_TIMERS_H
+
+#include <linux/ktime.h>
+
+struct wg_peer;
+
+void wg_timers_init(struct wg_peer *peer);
+void wg_timers_stop(struct wg_peer *peer);
+void wg_timers_data_sent(struct wg_peer *peer);
+void wg_timers_data_received(struct wg_peer *peer);
+void wg_timers_any_authenticated_packet_sent(struct wg_peer *peer);
+void wg_timers_any_authenticated_packet_received(struct wg_peer *peer);
+void wg_timers_handshake_initiated(struct wg_peer *peer);
+void wg_timers_handshake_complete(struct wg_peer *peer);
+void wg_timers_session_derived(struct wg_peer *peer);
+void wg_timers_any_authenticated_packet_traversal(struct wg_peer *peer);
+
+static inline bool wg_birthdate_has_expired(u64 birthday_nanoseconds,
+					    u64 expiration_seconds)
+{
+	return (s64)(birthday_nanoseconds + expiration_seconds * NSEC_PER_SEC)
+		<= (s64)ktime_get_coarse_boottime_ns();
+}
+
+#endif /* _WG_TIMERS_H */
diff --git a/drivers/net/wireguard/version.h b/drivers/net/wireguard/version.h
new file mode 100644
index 0000000..a1a269a
--- /dev/null
+++ b/drivers/net/wireguard/version.h
@@ -0,0 +1 @@
+#define WIREGUARD_VERSION "1.0.0"
diff --git a/drivers/net/wireless/ath/ath10k/qmi.c b/drivers/net/wireless/ath/ath10k/qmi.c
index 545ac1f..86fde22 100644
--- a/drivers/net/wireless/ath/ath10k/qmi.c
+++ b/drivers/net/wireless/ath/ath10k/qmi.c
@@ -746,6 +746,13 @@ static void ath10k_qmi_event_server_arrive(struct ath10k_qmi *qmi)
 	if (ret)
 		return;
 
+	/*
+	 * HACK: sleep for a while inbetween receiving the msa info response
+	 * and the XPU update to prevent SDM845 from crashing due to a security
+	 * violation, when running MPSS.AT.4.0.c2-01184-SDM845_GEN_PACK-1.
+	 */
+	msleep(20);
+
 	ret = ath10k_qmi_setup_msa_permissions(qmi);
 	if (ret)
 		return;
diff --git a/drivers/net/wireless/ath/wil6210/txrx.c b/drivers/net/wireless/ath/wil6210/txrx.c
index 598c1fb..579bfa2 100644
--- a/drivers/net/wireless/ath/wil6210/txrx.c
+++ b/drivers/net/wireless/ath/wil6210/txrx.c
@@ -907,7 +907,6 @@ static void wil_rx_handle_eapol(struct wil6210_vif *vif, struct sk_buff *skb)
 void wil_netif_rx(struct sk_buff *skb, struct net_device *ndev, int cid,
 		  struct wil_net_stats *stats, bool gro)
 {
-	gro_result_t rc = GRO_NORMAL;
 	struct wil6210_vif *vif = ndev_to_vif(ndev);
 	struct wil6210_priv *wil = ndev_to_wil(ndev);
 	struct wireless_dev *wdev = vif_to_wdev(vif);
@@ -918,22 +917,16 @@ void wil_netif_rx(struct sk_buff *skb, struct net_device *ndev, int cid,
 	 */
 	int mcast = is_multicast_ether_addr(da);
 	struct sk_buff *xmit_skb = NULL;
-	static const char * const gro_res_str[] = {
-		[GRO_MERGED]		= "GRO_MERGED",
-		[GRO_MERGED_FREE]	= "GRO_MERGED_FREE",
-		[GRO_HELD]		= "GRO_HELD",
-		[GRO_NORMAL]		= "GRO_NORMAL",
-		[GRO_DROP]		= "GRO_DROP",
-		[GRO_CONSUMED]		= "GRO_CONSUMED",
-	};
 
 	if (wdev->iftype == NL80211_IFTYPE_STATION) {
 		sa = wil_skb_get_sa(skb);
 		if (mcast && ether_addr_equal(sa, ndev->dev_addr)) {
 			/* mcast packet looped back to us */
-			rc = GRO_DROP;
 			dev_kfree_skb(skb);
-			goto stats;
+			ndev->stats.rx_dropped++;
+			stats->rx_dropped++;
+			wil_dbg_txrx(wil, "Rx drop %d bytes\n", len);
+			return;
 		}
 	} else if (wdev->iftype == NL80211_IFTYPE_AP && !vif->ap_isolate) {
 		if (mcast) {
@@ -977,26 +970,16 @@ void wil_netif_rx(struct sk_buff *skb, struct net_device *ndev, int cid,
 			wil_rx_handle_eapol(vif, skb);
 
 		if (gro)
-			rc = napi_gro_receive(&wil->napi_rx, skb);
+			napi_gro_receive(&wil->napi_rx, skb);
 		else
 			netif_rx_ni(skb);
-		wil_dbg_txrx(wil, "Rx complete %d bytes => %s\n",
-			     len, gro_res_str[rc]);
 	}
-stats:
-	/* statistics. rc set to GRO_NORMAL for AP bridging */
-	if (unlikely(rc == GRO_DROP)) {
-		ndev->stats.rx_dropped++;
-		stats->rx_dropped++;
-		wil_dbg_txrx(wil, "Rx drop %d bytes\n", len);
-	} else {
-		ndev->stats.rx_packets++;
-		stats->rx_packets++;
-		ndev->stats.rx_bytes += len;
-		stats->rx_bytes += len;
-		if (mcast)
-			ndev->stats.multicast++;
-	}
+	ndev->stats.rx_packets++;
+	stats->rx_packets++;
+	ndev->stats.rx_bytes += len;
+	stats->rx_bytes += len;
+	if (mcast)
+		ndev->stats.multicast++;
 }
 
 void wil_netif_rx_any(struct sk_buff *skb, struct net_device *ndev)
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index c48c680..a9fc831 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -4,7 +4,7 @@
  * Copyright (c) 2008, Jouni Malinen <j@w1.fi>
  * Copyright (c) 2011, Javier Lopez <jlopex@gmail.com>
  * Copyright (c) 2016 - 2017 Intel Deutschland GmbH
- * Copyright (C) 2018 Intel Corporation
+ * Copyright (C) 2018 - 2020 Intel Corporation
  */
 
 /*
@@ -33,6 +33,9 @@
 #include <net/netns/generic.h>
 #include <linux/rhashtable.h>
 #include <linux/nospec.h>
+#include <linux/virtio.h>
+#include <linux/virtio_ids.h>
+#include <linux/virtio_config.h>
 #include "mac80211_hwsim.h"
 
 #define WARN_QUEUE 100
@@ -62,6 +65,10 @@ static bool support_p2p_device = true;
 module_param(support_p2p_device, bool, 0444);
 MODULE_PARM_DESC(support_p2p_device, "Support P2P-Device interface type");
 
+static ushort mac_prefix;
+module_param(mac_prefix, ushort, 0444);
+MODULE_PARM_DESC(mac_prefix, "Second and third most significant octets in MAC");
+
 /**
  * enum hwsim_regtest - the type of regulatory tests we offer
  *
@@ -595,14 +602,14 @@ static const struct genl_multicast_group hwsim_mcgrps[] = {
 /* MAC80211_HWSIM netlink policy */
 
 static const struct nla_policy hwsim_genl_policy[HWSIM_ATTR_MAX + 1] = {
-	[HWSIM_ATTR_ADDR_RECEIVER] = { .type = NLA_UNSPEC, .len = ETH_ALEN },
-	[HWSIM_ATTR_ADDR_TRANSMITTER] = { .type = NLA_UNSPEC, .len = ETH_ALEN },
+	[HWSIM_ATTR_ADDR_RECEIVER] = NLA_POLICY_ETH_ADDR_COMPAT,
+	[HWSIM_ATTR_ADDR_TRANSMITTER] = NLA_POLICY_ETH_ADDR_COMPAT,
 	[HWSIM_ATTR_FRAME] = { .type = NLA_BINARY,
 			       .len = IEEE80211_MAX_DATA_LEN },
 	[HWSIM_ATTR_FLAGS] = { .type = NLA_U32 },
 	[HWSIM_ATTR_RX_RATE] = { .type = NLA_U32 },
 	[HWSIM_ATTR_SIGNAL] = { .type = NLA_U32 },
-	[HWSIM_ATTR_TX_INFO] = { .type = NLA_UNSPEC,
+	[HWSIM_ATTR_TX_INFO] = { .type = NLA_BINARY,
 				 .len = IEEE80211_TX_MAX_RATES *
 					sizeof(struct hwsim_tx_rate)},
 	[HWSIM_ATTR_COOKIE] = { .type = NLA_U64 },
@@ -612,15 +619,61 @@ static const struct nla_policy hwsim_genl_policy[HWSIM_ATTR_MAX + 1] = {
 	[HWSIM_ATTR_REG_CUSTOM_REG] = { .type = NLA_U32 },
 	[HWSIM_ATTR_REG_STRICT_REG] = { .type = NLA_FLAG },
 	[HWSIM_ATTR_SUPPORT_P2P_DEVICE] = { .type = NLA_FLAG },
+	[HWSIM_ATTR_USE_CHANCTX] = { .type = NLA_FLAG },
 	[HWSIM_ATTR_DESTROY_RADIO_ON_CLOSE] = { .type = NLA_FLAG },
 	[HWSIM_ATTR_RADIO_NAME] = { .type = NLA_STRING },
 	[HWSIM_ATTR_NO_VIF] = { .type = NLA_FLAG },
 	[HWSIM_ATTR_FREQ] = { .type = NLA_U32 },
-	[HWSIM_ATTR_PERM_ADDR] = { .type = NLA_UNSPEC, .len = ETH_ALEN },
+	[HWSIM_ATTR_TX_INFO_FLAGS] = { .type = NLA_BINARY },
+	[HWSIM_ATTR_PERM_ADDR] = NLA_POLICY_ETH_ADDR_COMPAT,
 	[HWSIM_ATTR_IFTYPE_SUPPORT] = { .type = NLA_U32 },
 	[HWSIM_ATTR_CIPHER_SUPPORT] = { .type = NLA_BINARY },
 };
 
+#if IS_REACHABLE(CONFIG_VIRTIO)
+
+/* MAC80211_HWSIM virtio queues */
+static struct virtqueue *hwsim_vqs[HWSIM_NUM_VQS];
+static bool hwsim_virtio_enabled;
+static spinlock_t hwsim_virtio_lock;
+
+static void hwsim_virtio_rx_work(struct work_struct *work);
+static DECLARE_WORK(hwsim_virtio_rx, hwsim_virtio_rx_work);
+
+static int hwsim_tx_virtio(struct mac80211_hwsim_data *data,
+			   struct sk_buff *skb)
+{
+	struct scatterlist sg[1];
+	unsigned long flags;
+	int err;
+
+	spin_lock_irqsave(&hwsim_virtio_lock, flags);
+	if (!hwsim_virtio_enabled) {
+		err = -ENODEV;
+		goto out_free;
+	}
+
+	sg_init_one(sg, skb->head, skb_end_offset(skb));
+	err = virtqueue_add_outbuf(hwsim_vqs[HWSIM_VQ_TX], sg, 1, skb,
+				   GFP_ATOMIC);
+	if (err)
+		goto out_free;
+	virtqueue_kick(hwsim_vqs[HWSIM_VQ_TX]);
+	spin_unlock_irqrestore(&hwsim_virtio_lock, flags);
+	return 0;
+
+out_free:
+	spin_unlock_irqrestore(&hwsim_virtio_lock, flags);
+	nlmsg_free(skb);
+	return err;
+}
+#else
+/* cause a linker error if this ends up being needed */
+extern int hwsim_tx_virtio(struct mac80211_hwsim_data *data,
+			   struct sk_buff *skb);
+#define hwsim_virtio_enabled false
+#endif
+
 static void mac80211_hwsim_tx_frame(struct ieee80211_hw *hw,
 				    struct sk_buff *skb,
 				    struct ieee80211_channel *chan);
@@ -1120,8 +1173,14 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
 		goto nla_put_failure;
 
 	genlmsg_end(skb, msg_head);
-	if (hwsim_unicast_netgroup(data, skb, dst_portid))
-		goto err_free_txskb;
+
+	if (hwsim_virtio_enabled) {
+		if (hwsim_tx_virtio(data, skb))
+			goto err_free_txskb;
+	} else {
+		if (hwsim_unicast_netgroup(data, skb, dst_portid))
+			goto err_free_txskb;
+	}
 
 	/* Enqueue the packet */
 	skb_queue_tail(&data->pending, my_skb);
@@ -1423,7 +1482,7 @@ static void mac80211_hwsim_tx(struct ieee80211_hw *hw,
 	/* wmediumd mode check */
 	_portid = READ_ONCE(data->wmediumd);
 
-	if (_portid)
+	if (_portid || hwsim_virtio_enabled)
 		return mac80211_hwsim_tx_frame_nl(hw, skb, _portid);
 
 	/* NO wmediumd detected, perfect medium simulation */
@@ -1529,7 +1588,7 @@ static void mac80211_hwsim_tx_frame(struct ieee80211_hw *hw,
 
 	mac80211_hwsim_monitor_rx(hw, skb, chan);
 
-	if (_pid)
+	if (_pid || hwsim_virtio_enabled)
 		return mac80211_hwsim_tx_frame_nl(hw, skb, _pid);
 
 	mac80211_hwsim_tx_frame_no_nl(hw, skb, chan);
@@ -2788,6 +2847,8 @@ static int mac80211_hwsim_new_radio(struct genl_info *info,
 	if (!param->perm_addr) {
 		eth_zero_addr(addr);
 		addr[0] = 0x02;
+		addr[1] = (mac_prefix >> 8) & 0xFF;
+		addr[2] = mac_prefix & 0xFF;
 		addr[3] = idx >> 8;
 		addr[4] = idx;
 		memcpy(data->addresses[0].addr, addr, ETH_ALEN);
@@ -3260,11 +3321,14 @@ static int hwsim_tx_info_frame_received_nl(struct sk_buff *skb_2,
 	if (!data2)
 		goto out;
 
-	if (hwsim_net_get_netgroup(genl_info_net(info)) != data2->netgroup)
-		goto out;
+	if (!hwsim_virtio_enabled) {
+		if (hwsim_net_get_netgroup(genl_info_net(info)) !=
+		    data2->netgroup)
+			goto out;
 
-	if (info->snd_portid != data2->wmediumd)
-		goto out;
+		if (info->snd_portid != data2->wmediumd)
+			goto out;
+	}
 
 	/* look for the skb matching the cookie passed back from user */
 	skb_queue_walk_safe(&data2->pending, skb, tmp) {
@@ -3354,11 +3418,14 @@ static int hwsim_cloned_frame_received_nl(struct sk_buff *skb_2,
 	if (!data2)
 		goto out;
 
-	if (hwsim_net_get_netgroup(genl_info_net(info)) != data2->netgroup)
-		goto out;
+	if (!hwsim_virtio_enabled) {
+		if (hwsim_net_get_netgroup(genl_info_net(info)) !=
+		    data2->netgroup)
+			goto out;
 
-	if (info->snd_portid != data2->wmediumd)
-		goto out;
+		if (info->snd_portid != data2->wmediumd)
+			goto out;
+	}
 
 	/* check if radio is configured properly */
 
@@ -3899,6 +3966,229 @@ static void hwsim_exit_netlink(void)
 	genl_unregister_family(&hwsim_genl_family);
 }
 
+#if IS_REACHABLE(CONFIG_VIRTIO)
+static void hwsim_virtio_tx_done(struct virtqueue *vq)
+{
+	unsigned int len;
+	struct sk_buff *skb;
+	unsigned long flags;
+
+	spin_lock_irqsave(&hwsim_virtio_lock, flags);
+	while ((skb = virtqueue_get_buf(vq, &len)))
+		nlmsg_free(skb);
+	spin_unlock_irqrestore(&hwsim_virtio_lock, flags);
+}
+
+static int hwsim_virtio_handle_cmd(struct sk_buff *skb)
+{
+	struct nlmsghdr *nlh;
+	struct genlmsghdr *gnlh;
+	struct nlattr *tb[HWSIM_ATTR_MAX + 1];
+	struct genl_info info = {};
+	int err;
+
+	nlh = nlmsg_hdr(skb);
+	gnlh = nlmsg_data(nlh);
+	err = genlmsg_parse(nlh, &hwsim_genl_family, tb, HWSIM_ATTR_MAX,
+			    hwsim_genl_policy, NULL);
+	if (err) {
+		pr_err_ratelimited("hwsim: genlmsg_parse returned %d\n", err);
+		return err;
+	}
+
+	info.attrs = tb;
+
+	switch (gnlh->cmd) {
+	case HWSIM_CMD_FRAME:
+		hwsim_cloned_frame_received_nl(skb, &info);
+		break;
+	case HWSIM_CMD_TX_INFO_FRAME:
+		hwsim_tx_info_frame_received_nl(skb, &info);
+		break;
+	default:
+		pr_err_ratelimited("hwsim: invalid cmd: %d\n", gnlh->cmd);
+		return -EPROTO;
+	}
+	return 0;
+}
+
+static void hwsim_virtio_rx_work(struct work_struct *work)
+{
+	struct virtqueue *vq;
+	unsigned int len;
+	struct sk_buff *skb;
+	struct scatterlist sg[1];
+	int err;
+	unsigned long flags;
+
+	spin_lock_irqsave(&hwsim_virtio_lock, flags);
+	if (!hwsim_virtio_enabled)
+		goto out_unlock;
+
+	skb = virtqueue_get_buf(hwsim_vqs[HWSIM_VQ_RX], &len);
+	if (!skb)
+		goto out_unlock;
+	spin_unlock_irqrestore(&hwsim_virtio_lock, flags);
+
+	skb->data = skb->head;
+	skb_set_tail_pointer(skb, len);
+	hwsim_virtio_handle_cmd(skb);
+
+	spin_lock_irqsave(&hwsim_virtio_lock, flags);
+	if (!hwsim_virtio_enabled) {
+		nlmsg_free(skb);
+		goto out_unlock;
+	}
+	vq = hwsim_vqs[HWSIM_VQ_RX];
+	sg_init_one(sg, skb->head, skb_end_offset(skb));
+	err = virtqueue_add_inbuf(vq, sg, 1, skb, GFP_KERNEL);
+	if (WARN(err, "virtqueue_add_inbuf returned %d\n", err))
+		nlmsg_free(skb);
+	else
+		virtqueue_kick(vq);
+	schedule_work(&hwsim_virtio_rx);
+
+out_unlock:
+	spin_unlock_irqrestore(&hwsim_virtio_lock, flags);
+}
+
+static void hwsim_virtio_rx_done(struct virtqueue *vq)
+{
+	schedule_work(&hwsim_virtio_rx);
+}
+
+static int init_vqs(struct virtio_device *vdev)
+{
+	vq_callback_t *callbacks[HWSIM_NUM_VQS] = {
+		[HWSIM_VQ_TX] = hwsim_virtio_tx_done,
+		[HWSIM_VQ_RX] = hwsim_virtio_rx_done,
+	};
+	const char *names[HWSIM_NUM_VQS] = {
+		[HWSIM_VQ_TX] = "tx",
+		[HWSIM_VQ_RX] = "rx",
+	};
+
+	return virtio_find_vqs(vdev, HWSIM_NUM_VQS,
+			       hwsim_vqs, callbacks, names, NULL);
+}
+
+static int fill_vq(struct virtqueue *vq)
+{
+	int i, err;
+	struct sk_buff *skb;
+	struct scatterlist sg[1];
+
+	for (i = 0; i < virtqueue_get_vring_size(vq); i++) {
+		skb = genlmsg_new(GENLMSG_DEFAULT_SIZE, GFP_KERNEL);
+		if (!skb)
+			return -ENOMEM;
+
+		sg_init_one(sg, skb->head, skb_end_offset(skb));
+		err = virtqueue_add_inbuf(vq, sg, 1, skb, GFP_KERNEL);
+		if (err) {
+			nlmsg_free(skb);
+			return err;
+		}
+	}
+	virtqueue_kick(vq);
+	return 0;
+}
+
+static void remove_vqs(struct virtio_device *vdev)
+{
+	int i;
+
+	vdev->config->reset(vdev);
+
+	for (i = 0; i < ARRAY_SIZE(hwsim_vqs); i++) {
+		struct virtqueue *vq = hwsim_vqs[i];
+		struct sk_buff *skb;
+
+		while ((skb = virtqueue_detach_unused_buf(vq)))
+			nlmsg_free(skb);
+	}
+
+	vdev->config->del_vqs(vdev);
+}
+
+static int hwsim_virtio_probe(struct virtio_device *vdev)
+{
+	int err;
+	unsigned long flags;
+
+	spin_lock_irqsave(&hwsim_virtio_lock, flags);
+	if (hwsim_virtio_enabled) {
+		spin_unlock_irqrestore(&hwsim_virtio_lock, flags);
+		return -EEXIST;
+	}
+	spin_unlock_irqrestore(&hwsim_virtio_lock, flags);
+
+	err = init_vqs(vdev);
+	if (err)
+		return err;
+
+	err = fill_vq(hwsim_vqs[HWSIM_VQ_RX]);
+	if (err)
+		goto out_remove;
+
+	spin_lock_irqsave(&hwsim_virtio_lock, flags);
+	hwsim_virtio_enabled = true;
+	spin_unlock_irqrestore(&hwsim_virtio_lock, flags);
+
+	schedule_work(&hwsim_virtio_rx);
+	return 0;
+
+out_remove:
+	remove_vqs(vdev);
+	return err;
+}
+
+static void hwsim_virtio_remove(struct virtio_device *vdev)
+{
+	hwsim_virtio_enabled = false;
+
+	cancel_work_sync(&hwsim_virtio_rx);
+
+	remove_vqs(vdev);
+}
+
+/* MAC80211_HWSIM virtio device id table */
+static const struct virtio_device_id id_table[] = {
+	{ VIRTIO_ID_MAC80211_HWSIM, VIRTIO_DEV_ANY_ID },
+	{ 0 }
+};
+MODULE_DEVICE_TABLE(virtio, id_table);
+
+static struct virtio_driver virtio_hwsim = {
+	.driver.name = KBUILD_MODNAME,
+	.driver.owner = THIS_MODULE,
+	.id_table = id_table,
+	.probe = hwsim_virtio_probe,
+	.remove = hwsim_virtio_remove,
+};
+
+static int hwsim_register_virtio_driver(void)
+{
+	spin_lock_init(&hwsim_virtio_lock);
+
+	return register_virtio_driver(&virtio_hwsim);
+}
+
+static void hwsim_unregister_virtio_driver(void)
+{
+	unregister_virtio_driver(&virtio_hwsim);
+}
+#else
+static inline int hwsim_register_virtio_driver(void)
+{
+	return 0;
+}
+
+static inline void hwsim_unregister_virtio_driver(void)
+{
+}
+#endif
+
 static int __init init_mac80211_hwsim(void)
 {
 	int i, err;
@@ -3927,10 +4217,14 @@ static int __init init_mac80211_hwsim(void)
 	if (err)
 		goto out_unregister_driver;
 
+	err = hwsim_register_virtio_driver();
+	if (err)
+		goto out_exit_netlink;
+
 	hwsim_class = class_create(THIS_MODULE, "mac80211_hwsim");
 	if (IS_ERR(hwsim_class)) {
 		err = PTR_ERR(hwsim_class);
-		goto out_exit_netlink;
+		goto out_exit_virtio;
 	}
 
 	for (i = 0; i < radios; i++) {
@@ -4042,6 +4336,8 @@ static int __init init_mac80211_hwsim(void)
 	free_netdev(hwsim_mon);
 out_free_radios:
 	mac80211_hwsim_free();
+out_exit_virtio:
+	hwsim_unregister_virtio_driver();
 out_exit_netlink:
 	hwsim_exit_netlink();
 out_unregister_driver:
@@ -4058,6 +4354,7 @@ static void __exit exit_mac80211_hwsim(void)
 {
 	pr_debug("mac80211_hwsim: unregister radios\n");
 
+	hwsim_unregister_virtio_driver();
 	hwsim_exit_netlink();
 
 	mac80211_hwsim_free();
diff --git a/drivers/net/wireless/mac80211_hwsim.h b/drivers/net/wireless/mac80211_hwsim.h
index a85bc7c..28ade92 100644
--- a/drivers/net/wireless/mac80211_hwsim.h
+++ b/drivers/net/wireless/mac80211_hwsim.h
@@ -3,6 +3,7 @@
  * mac80211_hwsim - software simulator of 802.11 radio(s) for mac80211
  * Copyright (c) 2008, Jouni Malinen <j@w1.fi>
  * Copyright (c) 2011, Javier Lopez <jlopex@gmail.com>
+ * Copyright (C) 2020 Intel Corporation
  */
 
 #ifndef __MAC80211_HWSIM_H
@@ -245,4 +246,24 @@ struct hwsim_tx_rate_flag {
 	s8 idx;
 	u16 flags;
 } __packed;
+
+/**
+ * DOC: Frame transmission support over virtio
+ *
+ * Frame transmission is also supported over virtio to allow communication
+ * with external entities.
+ */
+
+/**
+ * enum hwsim_vqs - queues for virtio frame transmission
+ *
+ * @HWSIM_VQ_TX: send frames to external entity
+ * @HWSIM_VQ_RX: receive frames and transmission info reports
+ * @HWSIM_NUM_VQS: enum limit
+ */
+enum {
+	HWSIM_VQ_TX,
+	HWSIM_VQ_RX,
+	HWSIM_NUM_VQS,
+};
 #endif /* __MAC80211_HWSIM_H */
diff --git a/drivers/net/wireless/virt_wifi.c b/drivers/net/wireless/virt_wifi.c
index 01305ba..b80f7de 100644
--- a/drivers/net/wireless/virt_wifi.c
+++ b/drivers/net/wireless/virt_wifi.c
@@ -13,6 +13,7 @@
 #include <net/rtnetlink.h>
 #include <linux/etherdevice.h>
 #include <linux/module.h>
+#include <net/virt_wifi.h>
 
 static struct wiphy *common_wiphy;
 
@@ -20,6 +21,7 @@ struct virt_wifi_wiphy_priv {
 	struct delayed_work scan_result;
 	struct cfg80211_scan_request *scan_request;
 	bool being_deleted;
+	struct virt_wifi_network_simulation *network_simulation;
 };
 
 static struct ieee80211_channel channel_2ghz = {
@@ -148,6 +150,9 @@ static int virt_wifi_scan(struct wiphy *wiphy,
 
 	priv->scan_request = request;
 	schedule_delayed_work(&priv->scan_result, HZ * 2);
+	if (priv->network_simulation &&
+	    priv->network_simulation->notify_scan_trigger)
+		priv->network_simulation->notify_scan_trigger(wiphy, request);
 
 	return 0;
 }
@@ -178,6 +183,12 @@ static void virt_wifi_scan_result(struct work_struct *work)
 					   DBM_TO_MBM(-50), GFP_KERNEL);
 	cfg80211_put_bss(wiphy, informed_bss);
 
+	if(priv->network_simulation &&
+	   priv->network_simulation->generate_virt_scan_result) {
+		if(priv->network_simulation->generate_virt_scan_result(wiphy))
+			wiphy_err(wiphy, "Fail to generater the simulated scan result.\n");
+	}
+
 	/* Schedules work which acquires and releases the rtnl lock. */
 	cfg80211_scan_done(priv->scan_request, &scan_info);
 	priv->scan_request = NULL;
@@ -365,6 +376,8 @@ static struct wiphy *virt_wifi_make_wiphy(void)
 	priv = wiphy_priv(wiphy);
 	priv->being_deleted = false;
 	priv->scan_request = NULL;
+	priv->network_simulation = NULL;
+
 	INIT_DELAYED_WORK(&priv->scan_result, virt_wifi_scan_result);
 
 	err = wiphy_register(wiphy);
@@ -380,7 +393,6 @@ static struct wiphy *virt_wifi_make_wiphy(void)
 static void virt_wifi_destroy_wiphy(struct wiphy *wiphy)
 {
 	struct virt_wifi_wiphy_priv *priv;
-
 	WARN(!wiphy, "%s called with null wiphy", __func__);
 	if (!wiphy)
 		return;
@@ -414,8 +426,13 @@ static netdev_tx_t virt_wifi_start_xmit(struct sk_buff *skb,
 static int virt_wifi_net_device_open(struct net_device *dev)
 {
 	struct virt_wifi_netdev_priv *priv = netdev_priv(dev);
-
+	struct virt_wifi_wiphy_priv *w_priv;
 	priv->is_up = true;
+	w_priv = wiphy_priv(dev->ieee80211_ptr->wiphy);
+	if(w_priv->network_simulation &&
+	   w_priv->network_simulation->notify_device_open)
+		w_priv->network_simulation->notify_device_open(dev);
+
 	return 0;
 }
 
@@ -423,16 +440,22 @@ static int virt_wifi_net_device_open(struct net_device *dev)
 static int virt_wifi_net_device_stop(struct net_device *dev)
 {
 	struct virt_wifi_netdev_priv *n_priv = netdev_priv(dev);
+	struct virt_wifi_wiphy_priv *w_priv;
 
 	n_priv->is_up = false;
 
 	if (!dev->ieee80211_ptr)
 		return 0;
+	w_priv = wiphy_priv(dev->ieee80211_ptr->wiphy);
 
 	virt_wifi_cancel_scan(dev->ieee80211_ptr->wiphy);
 	virt_wifi_cancel_connect(dev);
 	netif_carrier_off(dev);
 
+	if (w_priv->network_simulation &&
+	    w_priv->network_simulation->notify_device_stop)
+		w_priv->network_simulation->notify_device_stop(dev);
+
 	return 0;
 }
 
@@ -667,6 +690,27 @@ static void __exit virt_wifi_cleanup_module(void)
 	unregister_netdevice_notifier(&virt_wifi_notifier);
 }
 
+int virt_wifi_register_network_simulation
+	(struct virt_wifi_network_simulation *ops)
+{
+	struct virt_wifi_wiphy_priv *priv = wiphy_priv(common_wiphy);
+	if (priv->network_simulation)
+		return -EEXIST;
+	priv->network_simulation = ops;
+	return 0;
+}
+EXPORT_SYMBOL_GPL(virt_wifi_register_network_simulation);
+
+int virt_wifi_unregister_network_simulation(void)
+{
+	struct virt_wifi_wiphy_priv *priv = wiphy_priv(common_wiphy);
+	if(!priv->network_simulation)
+		return -ENODATA;
+	priv->network_simulation = NULL;
+	return 0;
+}
+EXPORT_SYMBOL_GPL(virt_wifi_unregister_network_simulation);
+
 module_init(virt_wifi_init_module);
 module_exit(virt_wifi_cleanup_module);
 
diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
index c2ec750..8fd425d 100644
--- a/drivers/nvmem/Kconfig
+++ b/drivers/nvmem/Kconfig
@@ -230,4 +230,15 @@
 
 	  If sure, say yes. If unsure, say no.
 
+config SPRD_EFUSE
+	tristate "Spreadtrum SoC eFuse Support"
+	depends on ARCH_SPRD || COMPILE_TEST
+	depends on HAS_IOMEM
+	help
+	  This is a simple driver to dump specified values of Spreadtrum
+	  SoCs from eFuse.
+
+	  This driver can also be built as a module. If so, the module
+	  will be called nvmem-sprd-efuse.
+
 endif
diff --git a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile
index e5c153d..7c19870 100644
--- a/drivers/nvmem/Makefile
+++ b/drivers/nvmem/Makefile
@@ -50,3 +50,5 @@
 nvmem-sc27xx-efuse-y		:= sc27xx-efuse.o
 obj-$(CONFIG_NVMEM_ZYNQMP)	+= nvmem_zynqmp_nvmem.o
 nvmem_zynqmp_nvmem-y		:= zynqmp_nvmem.o
+obj-$(CONFIG_SPRD_EFUSE)	+= nvmem_sprd_efuse.o
+nvmem_sprd_efuse-y		:= sprd-efuse.o
diff --git a/drivers/nvmem/sprd-efuse.c b/drivers/nvmem/sprd-efuse.c
new file mode 100644
index 0000000..5952324
--- /dev/null
+++ b/drivers/nvmem/sprd-efuse.c
@@ -0,0 +1,441 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (C) 2019 Spreadtrum Communications Inc.
+
+#include <linux/clk.h>
+#include <linux/delay.h>
+#include <linux/hwspinlock.h>
+#include <linux/io.h>
+#include <linux/module.h>
+#include <linux/nvmem-provider.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
+
+#define SPRD_EFUSE_ENABLE		0x20
+#define SPRD_EFUSE_ERR_FLAG		0x24
+#define SPRD_EFUSE_ERR_CLR		0x28
+#define SPRD_EFUSE_MAGIC_NUM		0x2c
+#define SPRD_EFUSE_FW_CFG		0x50
+#define SPRD_EFUSE_PW_SWT		0x54
+#define SPRD_EFUSE_MEM(val)		(0x1000 + ((val) << 2))
+
+#define SPRD_EFUSE_VDD_EN		BIT(0)
+#define SPRD_EFUSE_AUTO_CHECK_EN	BIT(1)
+#define SPRD_EFUSE_DOUBLE_EN		BIT(2)
+#define SPRD_EFUSE_MARGIN_RD_EN		BIT(3)
+#define SPRD_EFUSE_LOCK_WR_EN		BIT(4)
+
+#define SPRD_EFUSE_ERR_CLR_MASK		GENMASK(13, 0)
+
+#define SPRD_EFUSE_ENK1_ON		BIT(0)
+#define SPRD_EFUSE_ENK2_ON		BIT(1)
+#define SPRD_EFUSE_PROG_EN		BIT(2)
+
+#define SPRD_EFUSE_MAGIC_NUMBER		0x8810
+
+/* Block width (bytes) definitions */
+#define SPRD_EFUSE_BLOCK_WIDTH		4
+
+/*
+ * The Spreadtrum AP efuse contains 2 parts: normal efuse and secure efuse,
+ * and we can only access the normal efuse in kernel. So define the normal
+ * block offset index and normal block numbers.
+ */
+#define SPRD_EFUSE_NORMAL_BLOCK_NUMS	24
+#define SPRD_EFUSE_NORMAL_BLOCK_OFFSET	72
+
+/* Timeout (ms) for the trylock of hardware spinlocks */
+#define SPRD_EFUSE_HWLOCK_TIMEOUT	5000
+
+/*
+ * Since different Spreadtrum SoC chip can have different normal block numbers
+ * and offset. And some SoC can support block double feature, which means
+ * when reading or writing data to efuse memory, the controller can save double
+ * data in case one data become incorrect after a long period.
+ *
+ * Thus we should save them in the device data structure.
+ */
+struct sprd_efuse_variant_data {
+	u32 blk_nums;
+	u32 blk_offset;
+	bool blk_double;
+};
+
+struct sprd_efuse {
+	struct device *dev;
+	struct clk *clk;
+	struct hwspinlock *hwlock;
+	struct mutex mutex;
+	void __iomem *base;
+	const struct sprd_efuse_variant_data *data;
+};
+
+static const struct sprd_efuse_variant_data ums312_data = {
+	.blk_nums = SPRD_EFUSE_NORMAL_BLOCK_NUMS,
+	.blk_offset = SPRD_EFUSE_NORMAL_BLOCK_OFFSET,
+	.blk_double = false,
+};
+
+/*
+ * On Spreadtrum platform, we have multi-subsystems will access the unique
+ * efuse controller, so we need one hardware spinlock to synchronize between
+ * the multiple subsystems.
+ */
+static int sprd_efuse_lock(struct sprd_efuse *efuse)
+{
+	int ret;
+
+	mutex_lock(&efuse->mutex);
+
+	ret = hwspin_lock_timeout_raw(efuse->hwlock,
+				      SPRD_EFUSE_HWLOCK_TIMEOUT);
+	if (ret) {
+		dev_err(efuse->dev, "timeout get the hwspinlock\n");
+		mutex_unlock(&efuse->mutex);
+		return ret;
+	}
+
+	return 0;
+}
+
+static void sprd_efuse_unlock(struct sprd_efuse *efuse)
+{
+	hwspin_unlock_raw(efuse->hwlock);
+	mutex_unlock(&efuse->mutex);
+}
+
+static void sprd_efuse_set_prog_power(struct sprd_efuse *efuse, bool en)
+{
+	u32 val = readl(efuse->base + SPRD_EFUSE_PW_SWT);
+
+	if (en)
+		val &= ~SPRD_EFUSE_ENK2_ON;
+	else
+		val &= ~SPRD_EFUSE_ENK1_ON;
+
+	writel(val, efuse->base + SPRD_EFUSE_PW_SWT);
+
+	/* Open or close efuse power need wait 1000us to make power stable. */
+	usleep_range(1000, 1200);
+
+	if (en)
+		val |= SPRD_EFUSE_ENK1_ON;
+	else
+		val |= SPRD_EFUSE_ENK2_ON;
+
+	writel(val, efuse->base + SPRD_EFUSE_PW_SWT);
+
+	/* Open or close efuse power need wait 1000us to make power stable. */
+	usleep_range(1000, 1200);
+}
+
+static void sprd_efuse_set_read_power(struct sprd_efuse *efuse, bool en)
+{
+	u32 val = readl(efuse->base + SPRD_EFUSE_ENABLE);
+
+	if (en)
+		val |= SPRD_EFUSE_VDD_EN;
+	else
+		val &= ~SPRD_EFUSE_VDD_EN;
+
+	writel(val, efuse->base + SPRD_EFUSE_ENABLE);
+
+	/* Open or close efuse power need wait 1000us to make power stable. */
+	usleep_range(1000, 1200);
+}
+
+static void sprd_efuse_set_prog_lock(struct sprd_efuse *efuse, bool en)
+{
+	u32 val = readl(efuse->base + SPRD_EFUSE_ENABLE);
+
+	if (en)
+		val |= SPRD_EFUSE_LOCK_WR_EN;
+	else
+		val &= ~SPRD_EFUSE_LOCK_WR_EN;
+
+	writel(val, efuse->base + SPRD_EFUSE_ENABLE);
+}
+
+static void sprd_efuse_set_auto_check(struct sprd_efuse *efuse, bool en)
+{
+	u32 val = readl(efuse->base + SPRD_EFUSE_ENABLE);
+
+	if (en)
+		val |= SPRD_EFUSE_AUTO_CHECK_EN;
+	else
+		val &= ~SPRD_EFUSE_AUTO_CHECK_EN;
+
+	writel(val, efuse->base + SPRD_EFUSE_ENABLE);
+}
+
+static void sprd_efuse_set_data_double(struct sprd_efuse *efuse, bool en)
+{
+	u32 val = readl(efuse->base + SPRD_EFUSE_ENABLE);
+
+	if (en)
+		val |= SPRD_EFUSE_DOUBLE_EN;
+	else
+		val &= ~SPRD_EFUSE_DOUBLE_EN;
+
+	writel(val, efuse->base + SPRD_EFUSE_ENABLE);
+}
+
+static void sprd_efuse_set_prog_en(struct sprd_efuse *efuse, bool en)
+{
+	u32 val = readl(efuse->base + SPRD_EFUSE_PW_SWT);
+
+	if (en)
+		val |= SPRD_EFUSE_PROG_EN;
+	else
+		val &= ~SPRD_EFUSE_PROG_EN;
+
+	writel(val, efuse->base + SPRD_EFUSE_PW_SWT);
+}
+
+static int sprd_efuse_raw_prog(struct sprd_efuse *efuse, u32 blk, bool doub,
+			       bool lock, u32 *data)
+{
+	u32 status;
+	int ret = 0;
+
+	/*
+	 * We need set the correct magic number before writing the efuse to
+	 * allow programming, and block other programming until we clear the
+	 * magic number.
+	 */
+	writel(SPRD_EFUSE_MAGIC_NUMBER,
+	       efuse->base + SPRD_EFUSE_MAGIC_NUM);
+
+	/*
+	 * Power on the efuse, enable programme and enable double data
+	 * if asked.
+	 */
+	sprd_efuse_set_prog_power(efuse, true);
+	sprd_efuse_set_prog_en(efuse, true);
+	sprd_efuse_set_data_double(efuse, doub);
+
+	/*
+	 * Enable the auto-check function to validate if the programming is
+	 * successful.
+	 */
+	if (lock)
+		sprd_efuse_set_auto_check(efuse, true);
+
+	writel(*data, efuse->base + SPRD_EFUSE_MEM(blk));
+
+	/* Disable auto-check and data double after programming */
+	if (lock)
+		sprd_efuse_set_auto_check(efuse, false);
+	sprd_efuse_set_data_double(efuse, false);
+
+	/*
+	 * Check the efuse error status, if the programming is successful,
+	 * we should lock this efuse block to avoid programming again.
+	 */
+	status = readl(efuse->base + SPRD_EFUSE_ERR_FLAG);
+	if (status) {
+		dev_err(efuse->dev,
+			"write error status %d of block %d\n", ret, blk);
+
+		writel(SPRD_EFUSE_ERR_CLR_MASK,
+		       efuse->base + SPRD_EFUSE_ERR_CLR);
+		ret = -EBUSY;
+	} else if (lock) {
+		sprd_efuse_set_prog_lock(efuse, lock);
+		writel(0, efuse->base + SPRD_EFUSE_MEM(blk));
+		sprd_efuse_set_prog_lock(efuse, false);
+	}
+
+	sprd_efuse_set_prog_power(efuse, false);
+	writel(0, efuse->base + SPRD_EFUSE_MAGIC_NUM);
+
+	return ret;
+}
+
+static int sprd_efuse_raw_read(struct sprd_efuse *efuse, int blk, u32 *val,
+			       bool doub)
+{
+	u32 status;
+
+	/*
+	 * Need power on the efuse before reading data from efuse, and will
+	 * power off the efuse after reading process.
+	 */
+	sprd_efuse_set_read_power(efuse, true);
+
+	/* Enable double data if asked */
+	sprd_efuse_set_data_double(efuse, doub);
+
+	/* Start to read data from efuse block */
+	*val = readl(efuse->base + SPRD_EFUSE_MEM(blk));
+
+	/* Disable double data */
+	sprd_efuse_set_data_double(efuse, false);
+
+	/* Power off the efuse */
+	sprd_efuse_set_read_power(efuse, false);
+
+	/*
+	 * Check the efuse error status and clear them if there are some
+	 * errors occurred.
+	 */
+	status = readl(efuse->base + SPRD_EFUSE_ERR_FLAG);
+	if (status) {
+		dev_err(efuse->dev,
+			"read error status %d of block %d\n", status, blk);
+
+		writel(SPRD_EFUSE_ERR_CLR_MASK,
+		       efuse->base + SPRD_EFUSE_ERR_CLR);
+		return -EBUSY;
+	}
+
+	return 0;
+}
+
+static int sprd_efuse_read(void *context, u32 offset, void *val, size_t bytes)
+{
+	struct sprd_efuse *efuse = context;
+	bool blk_double = efuse->data->blk_double;
+	u32 index = offset / SPRD_EFUSE_BLOCK_WIDTH + efuse->data->blk_offset;
+	u32 blk_offset = (offset % SPRD_EFUSE_BLOCK_WIDTH) * BITS_PER_BYTE;
+	u32 data;
+	int ret;
+
+	ret = sprd_efuse_lock(efuse);
+	if (ret)
+		return ret;
+
+	ret = clk_prepare_enable(efuse->clk);
+	if (ret)
+		goto unlock;
+
+	ret = sprd_efuse_raw_read(efuse, index, &data, blk_double);
+	if (!ret) {
+		data >>= blk_offset;
+		memcpy(val, &data, bytes);
+	}
+
+	clk_disable_unprepare(efuse->clk);
+
+unlock:
+	sprd_efuse_unlock(efuse);
+	return ret;
+}
+
+static int sprd_efuse_write(void *context, u32 offset, void *val, size_t bytes)
+{
+	struct sprd_efuse *efuse = context;
+	bool blk_double = efuse->data->blk_double;
+	bool lock;
+	int ret;
+
+	ret = sprd_efuse_lock(efuse);
+	if (ret)
+		return ret;
+
+	ret = clk_prepare_enable(efuse->clk);
+	if (ret)
+		goto unlock;
+
+	/*
+	 * If the writing bytes are equal with the block width, which means the
+	 * whole block will be programmed. For this case, we should not allow
+	 * this block to be programmed again by locking this block.
+	 *
+	 * If the block was programmed partially, we should allow this block to
+	 * be programmed again.
+	 */
+	if (bytes < SPRD_EFUSE_BLOCK_WIDTH)
+		lock = false;
+	else
+		lock = true;
+
+	ret = sprd_efuse_raw_prog(efuse, offset, blk_double, lock, val);
+
+	clk_disable_unprepare(efuse->clk);
+
+unlock:
+	sprd_efuse_unlock(efuse);
+	return ret;
+}
+
+static int sprd_efuse_probe(struct platform_device *pdev)
+{
+	struct device_node *np = pdev->dev.of_node;
+	struct nvmem_device *nvmem;
+	struct nvmem_config econfig = { };
+	struct sprd_efuse *efuse;
+	const struct sprd_efuse_variant_data *pdata;
+	int ret;
+
+	pdata = of_device_get_match_data(&pdev->dev);
+	if (!pdata) {
+		dev_err(&pdev->dev, "No matching driver data found\n");
+		return -EINVAL;
+	}
+
+	efuse = devm_kzalloc(&pdev->dev, sizeof(*efuse), GFP_KERNEL);
+	if (!efuse)
+		return -ENOMEM;
+
+	efuse->base = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(efuse->base))
+		return PTR_ERR(efuse->base);
+
+	ret = of_hwspin_lock_get_id(np, 0);
+	if (ret < 0) {
+		dev_err(&pdev->dev, "failed to get hwlock id\n");
+		return ret;
+	}
+
+	efuse->hwlock = devm_hwspin_lock_request_specific(&pdev->dev, ret);
+	if (!efuse->hwlock) {
+		dev_err(&pdev->dev, "failed to request hwlock\n");
+		return -ENXIO;
+	}
+
+	efuse->clk = devm_clk_get(&pdev->dev, "enable");
+	if (IS_ERR(efuse->clk)) {
+		dev_err(&pdev->dev, "failed to get enable clock\n");
+		return PTR_ERR(efuse->clk);
+	}
+
+	mutex_init(&efuse->mutex);
+	efuse->dev = &pdev->dev;
+	efuse->data = pdata;
+
+	econfig.stride = 1;
+	econfig.word_size = 1;
+	econfig.read_only = false;
+	econfig.name = "sprd-efuse";
+	econfig.size = efuse->data->blk_nums * SPRD_EFUSE_BLOCK_WIDTH;
+	econfig.reg_read = sprd_efuse_read;
+	econfig.reg_write = sprd_efuse_write;
+	econfig.priv = efuse;
+	econfig.dev = &pdev->dev;
+	nvmem = devm_nvmem_register(&pdev->dev, &econfig);
+	if (IS_ERR(nvmem)) {
+		dev_err(&pdev->dev, "failed to register nvmem\n");
+		return PTR_ERR(nvmem);
+	}
+
+	return 0;
+}
+
+static const struct of_device_id sprd_efuse_of_match[] = {
+	{ .compatible = "sprd,ums312-efuse", .data = &ums312_data },
+	{ }
+};
+
+static struct platform_driver sprd_efuse_driver = {
+	.probe = sprd_efuse_probe,
+	.driver = {
+		.name = "sprd-efuse",
+		.of_match_table = sprd_efuse_of_match,
+	},
+};
+
+module_platform_driver(sprd_efuse_driver);
+
+MODULE_AUTHOR("Freeman Liu <freeman.liu@spreadtrum.com>");
+MODULE_DESCRIPTION("Spreadtrum AP efuse driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/of/address.c b/drivers/of/address.c
index 5abb056..c06f5ab 100644
--- a/drivers/of/address.c
+++ b/drivers/of/address.c
@@ -14,6 +14,8 @@
 #include <linux/slab.h>
 #include <linux/string.h>
 
+#include "of_private.h"
+
 /* Max address size we deal with */
 #define OF_MAX_ADDR_CELLS	4
 #define OF_CHECK_ADDR_COUNT(na)	((na) > 0 && (na) <= OF_MAX_ADDR_CELLS)
@@ -241,6 +243,7 @@ static int parser_init(struct of_pci_range_parser *parser,
 	parser->node = node;
 	parser->pna = of_n_addr_cells(node);
 	parser->np = parser->pna + na + ns;
+	parser->dma = !strcmp(name, "dma-ranges");
 
 	parser->range = of_get_property(node, name, &rlen);
 	if (parser->range == NULL)
@@ -279,7 +282,11 @@ struct of_pci_range *of_pci_range_parser_one(struct of_pci_range_parser *parser,
 	range->pci_space = be32_to_cpup(parser->range);
 	range->flags = of_bus_pci_get_flags(parser->range);
 	range->pci_addr = of_read_number(parser->range + 1, ns);
-	range->cpu_addr = of_translate_address(parser->node,
+	if (parser->dma)
+		range->cpu_addr = of_translate_dma_address(parser->node,
+				parser->range + na);
+	else
+		range->cpu_addr = of_translate_address(parser->node,
 				parser->range + na);
 	range->size = of_read_number(parser->range + parser->pna + na, ns);
 
@@ -292,8 +299,12 @@ struct of_pci_range *of_pci_range_parser_one(struct of_pci_range_parser *parser,
 
 		flags = of_bus_pci_get_flags(parser->range);
 		pci_addr = of_read_number(parser->range + 1, ns);
-		cpu_addr = of_translate_address(parser->node,
-				parser->range + na);
+		if (parser->dma)
+			cpu_addr = of_translate_dma_address(parser->node,
+					parser->range + na);
+		else
+			cpu_addr = of_translate_address(parser->node,
+					parser->range + na);
 		size = of_read_number(parser->range + parser->pna + na, ns);
 
 		if (flags != range->flags)
@@ -517,9 +528,13 @@ static int of_translate_one(struct device_node *parent, struct of_bus *bus,
 	 *
 	 * As far as we know, this damage only exists on Apple machines, so
 	 * This code is only enabled on powerpc. --gcl
+	 *
+	 * This quirk also applies for 'dma-ranges' which frequently exist in
+	 * child nodes without 'dma-ranges' in the parent nodes. --RobH
 	 */
 	ranges = of_get_property(parent, rprop, &rlen);
-	if (ranges == NULL && !of_empty_ranges_quirk(parent)) {
+	if (ranges == NULL && !of_empty_ranges_quirk(parent) &&
+	    strcmp(rprop, "dma-ranges")) {
 		pr_debug("no ranges; cannot translate\n");
 		return 1;
 	}
@@ -695,6 +710,16 @@ static struct device_node *__of_get_dma_parent(const struct device_node *np)
 	return of_node_get(args.np);
 }
 
+static struct device_node *of_get_next_dma_parent(struct device_node *np)
+{
+	struct device_node *parent;
+
+	parent = __of_get_dma_parent(np);
+	of_node_put(np);
+
+	return parent;
+}
+
 u64 of_translate_dma_address(struct device_node *dev, const __be32 *in_addr)
 {
 	struct device_node *host;
@@ -924,47 +949,39 @@ int of_dma_get_range(struct device_node *np, u64 *dma_addr, u64 *paddr, u64 *siz
 	const __be32 *ranges = NULL;
 	int len, naddr, nsize, pna;
 	int ret = 0;
+	bool found_dma_ranges = false;
 	u64 dmaaddr;
 
-	if (!node)
-		return -EINVAL;
-
-	while (1) {
-		struct device_node *parent;
-
-		naddr = of_n_addr_cells(node);
-		nsize = of_n_size_cells(node);
-
-		parent = __of_get_dma_parent(node);
-		of_node_put(node);
-
-		node = parent;
-		if (!node)
-			break;
-
+	while (node) {
 		ranges = of_get_property(node, "dma-ranges", &len);
 
 		/* Ignore empty ranges, they imply no translation required */
 		if (ranges && len > 0)
 			break;
 
-		/*
-		 * At least empty ranges has to be defined for parent node if
-		 * DMA is supported
-		 */
-		if (!ranges)
-			break;
+		/* Once we find 'dma-ranges', then a missing one is an error */
+		if (found_dma_ranges && !ranges) {
+			ret = -ENODEV;
+			goto out;
+		}
+		found_dma_ranges = true;
+
+		node = of_get_next_dma_parent(node);
 	}
 
-	if (!ranges) {
+	if (!node || !ranges) {
 		pr_debug("no dma-ranges found for node(%pOF)\n", np);
 		ret = -ENODEV;
 		goto out;
 	}
 
-	len /= sizeof(u32);
-
+	naddr = of_bus_n_addr_cells(node);
+	nsize = of_bus_n_size_cells(node);
 	pna = of_n_addr_cells(node);
+	if ((len / sizeof(__be32)) % (pna + naddr + nsize)) {
+		ret = -EINVAL;
+		goto out;
+	}
 
 	/* dma-ranges format:
 	 * DMA addr	: naddr cells
@@ -972,7 +989,7 @@ int of_dma_get_range(struct device_node *np, u64 *dma_addr, u64 *paddr, u64 *siz
 	 * size		: nsize cells
 	 */
 	dmaaddr = of_read_number(ranges, naddr);
-	*paddr = of_translate_dma_address(np, ranges);
+	*paddr = of_translate_dma_address(node, ranges + naddr);
 	if (*paddr == OF_BAD_ADDR) {
 		pr_err("translation of DMA address(%pad) to CPU address failed node(%pOF)\n",
 		       dma_addr, np);
@@ -991,7 +1008,6 @@ int of_dma_get_range(struct device_node *np, u64 *dma_addr, u64 *paddr, u64 *siz
 
 	return ret;
 }
-EXPORT_SYMBOL_GPL(of_dma_get_range);
 
 /**
  * of_dma_is_coherent - Check if device is coherent
@@ -1015,7 +1031,7 @@ bool of_dma_is_coherent(struct device_node *np)
 			of_node_put(node);
 			return true;
 		}
-		node = of_get_next_parent(node);
+		node = of_get_next_dma_parent(node);
 	}
 	of_node_put(node);
 	return false;
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 1d667eb..db7fbc0 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -86,34 +86,46 @@ static bool __of_node_is_type(const struct device_node *np, const char *type)
 	return np && match && type && !strcmp(match, type);
 }
 
-int of_n_addr_cells(struct device_node *np)
+int of_bus_n_addr_cells(struct device_node *np)
 {
 	u32 cells;
 
-	do {
-		if (np->parent)
-			np = np->parent;
+	for (; np; np = np->parent)
 		if (!of_property_read_u32(np, "#address-cells", &cells))
 			return cells;
-	} while (np->parent);
+
 	/* No #address-cells property for the root node */
 	return OF_ROOT_NODE_ADDR_CELLS_DEFAULT;
 }
+
+int of_n_addr_cells(struct device_node *np)
+{
+	if (np->parent)
+		np = np->parent;
+
+	return of_bus_n_addr_cells(np);
+}
 EXPORT_SYMBOL(of_n_addr_cells);
 
-int of_n_size_cells(struct device_node *np)
+int of_bus_n_size_cells(struct device_node *np)
 {
 	u32 cells;
 
-	do {
-		if (np->parent)
-			np = np->parent;
+	for (; np; np = np->parent)
 		if (!of_property_read_u32(np, "#size-cells", &cells))
 			return cells;
-	} while (np->parent);
+
 	/* No #size-cells property for the root node */
 	return OF_ROOT_NODE_SIZE_CELLS_DEFAULT;
 }
+
+int of_n_size_cells(struct device_node *np)
+{
+	if (np->parent)
+		np = np->parent;
+
+	return of_bus_n_size_cells(np);
+}
 EXPORT_SYMBOL(of_n_size_cells);
 
 #ifdef CONFIG_NUMA
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index 223d617..650c028 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
@@ -1040,43 +1040,67 @@ int __init early_init_dt_scan_memory(unsigned long node, const char *uname,
 	return 0;
 }
 
+/*
+ * Convert configs to something easy to use in C code
+ */
+#if defined(CONFIG_CMDLINE_FORCE)
+static const int overwrite_incoming_cmdline = 1;
+static const int read_dt_cmdline;
+static const int concat_cmdline;
+#elif defined(CONFIG_CMDLINE_EXTEND)
+static const int overwrite_incoming_cmdline;
+static const int read_dt_cmdline = 1;
+static const int concat_cmdline = 1;
+#else /* CMDLINE_FROM_BOOTLOADER */
+static const int overwrite_incoming_cmdline;
+static const int read_dt_cmdline = 1;
+static const int concat_cmdline;
+#endif
+
+#ifdef CONFIG_CMDLINE
+static const char *config_cmdline = CONFIG_CMDLINE;
+#else
+static const char *config_cmdline = "";
+#endif
+
 int __init early_init_dt_scan_chosen(unsigned long node, const char *uname,
 				     int depth, void *data)
 {
-	int l;
-	const char *p;
+	int l = 0;
+	const char *p = NULL;
 	const void *rng_seed;
+	char *cmdline = data;
 
 	pr_debug("search \"chosen\", depth: %d, uname: %s\n", depth, uname);
 
-	if (depth != 1 || !data ||
+	if (depth != 1 || !cmdline ||
 	    (strcmp(uname, "chosen") != 0 && strcmp(uname, "chosen@0") != 0))
 		return 0;
 
 	early_init_dt_check_for_initrd(node);
 
-	/* Retrieve command line */
-	p = of_get_flat_dt_prop(node, "bootargs", &l);
-	if (p != NULL && l > 0)
-		strlcpy(data, p, min(l, COMMAND_LINE_SIZE));
+	/* Put CONFIG_CMDLINE in if forced or if data had nothing in it to start */
+	if (overwrite_incoming_cmdline || !cmdline[0])
+		strlcpy(cmdline, config_cmdline, COMMAND_LINE_SIZE);
 
-	/*
-	 * CONFIG_CMDLINE is meant to be a default in case nothing else
-	 * managed to set the command line, unless CONFIG_CMDLINE_FORCE
-	 * is set in which case we override whatever was found earlier.
-	 */
-#ifdef CONFIG_CMDLINE
-#if defined(CONFIG_CMDLINE_EXTEND)
-	strlcat(data, " ", COMMAND_LINE_SIZE);
-	strlcat(data, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
-#elif defined(CONFIG_CMDLINE_FORCE)
-	strlcpy(data, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
-#else
-	/* No arguments from boot loader, use kernel's  cmdl*/
-	if (!((char *)data)[0])
-		strlcpy(data, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
-#endif
-#endif /* CONFIG_CMDLINE */
+	/* Retrieve command line unless forcing */
+	if (read_dt_cmdline)
+		p = of_get_flat_dt_prop(node, "bootargs", &l);
+
+	if (p != NULL && l > 0) {
+		if (concat_cmdline) {
+			int cmdline_len;
+			int copy_len;
+			strlcat(cmdline, " ", COMMAND_LINE_SIZE);
+			cmdline_len = strlen(cmdline);
+			copy_len = COMMAND_LINE_SIZE - cmdline_len - 1;
+			copy_len = min((int)l, copy_len);
+			strncpy(cmdline + cmdline_len, p, copy_len);
+			cmdline[cmdline_len + copy_len] = '\0';
+		} else {
+			strlcpy(cmdline, p, min(l, COMMAND_LINE_SIZE));
+		}
+	}
 
 	pr_debug("Command line is: %s\n", (char*)data);
 
diff --git a/drivers/of/of_private.h b/drivers/of/of_private.h
index 2478681..66294d2 100644
--- a/drivers/of/of_private.h
+++ b/drivers/of/of_private.h
@@ -158,4 +158,18 @@ extern void __of_sysfs_remove_bin_file(struct device_node *np,
 #define for_each_transaction_entry_reverse(_oft, _te) \
 	list_for_each_entry_reverse(_te, &(_oft)->te_list, node)
 
+extern int of_bus_n_addr_cells(struct device_node *np);
+extern int of_bus_n_size_cells(struct device_node *np);
+
+#ifdef CONFIG_OF_ADDRESS
+extern int of_dma_get_range(struct device_node *np, u64 *dma_addr,
+			    u64 *paddr, u64 *size);
+#else
+static inline int of_dma_get_range(struct device_node *np, u64 *dma_addr,
+				   u64 *paddr, u64 *size)
+{
+	return -ENODEV;
+}
+#endif
+
 #endif /* _LINUX_OF_PRIVATE_H */
diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c
index 3fb5d8c..26b3d5a 100644
--- a/drivers/of/of_reserved_mem.c
+++ b/drivers/of/of_reserved_mem.c
@@ -22,7 +22,7 @@
 #include <linux/slab.h>
 #include <linux/memblock.h>
 
-#define MAX_RESERVED_REGIONS	32
+#define MAX_RESERVED_REGIONS	64
 static struct reserved_mem reserved_mem[MAX_RESERVED_REGIONS];
 static int reserved_mem_count;
 
diff --git a/drivers/of/platform.c b/drivers/of/platform.c
index b47a229..55d7193 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -480,6 +480,7 @@ int of_platform_populate(struct device_node *root,
 	pr_debug("%s()\n", __func__);
 	pr_debug(" starting at: %pOF\n", root);
 
+	device_links_supplier_sync_state_pause();
 	for_each_child_of_node(root, child) {
 		rc = of_platform_bus_create(child, matches, lookup, parent, true);
 		if (rc) {
@@ -487,6 +488,8 @@ int of_platform_populate(struct device_node *root,
 			break;
 		}
 	}
+	device_links_supplier_sync_state_resume();
+
 	of_node_set_flag(root, OF_POPULATED_BUS);
 
 	of_node_put(root);
@@ -515,6 +518,8 @@ static int __init of_platform_default_populate_init(void)
 {
 	struct device_node *node;
 
+	device_links_supplier_sync_state_pause();
+
 	if (!of_have_populated_dt())
 		return -ENODEV;
 
@@ -533,11 +538,20 @@ static int __init of_platform_default_populate_init(void)
 	}
 
 	/* Populate everything else. */
+	fw_devlink_pause();
 	of_platform_default_populate(NULL, NULL, NULL);
+	fw_devlink_resume();
 
 	return 0;
 }
 arch_initcall_sync(of_platform_default_populate_init);
+
+static int __init of_platform_sync_state_init(void)
+{
+	device_links_supplier_sync_state_resume();
+	return 0;
+}
+late_initcall_sync(of_platform_sync_state_init);
 #endif
 
 int of_platform_device_destroy(struct device *dev, void *data)
diff --git a/drivers/of/property.c b/drivers/of/property.c
index d7fa75e..c3cca63 100644
--- a/drivers/of/property.c
+++ b/drivers/of/property.c
@@ -25,6 +25,7 @@
 #include <linux/of_device.h>
 #include <linux/of_graph.h>
 #include <linux/string.h>
+#include <linux/moduleparam.h>
 
 #include "of_private.h"
 
@@ -985,6 +986,365 @@ of_fwnode_device_get_match_data(const struct fwnode_handle *fwnode,
 	return of_device_get_match_data(dev);
 }
 
+static bool of_is_ancestor_of(struct device_node *test_ancestor,
+			      struct device_node *child)
+{
+	of_node_get(child);
+	while (child) {
+		if (child == test_ancestor) {
+			of_node_put(child);
+			return true;
+		}
+		child = of_get_next_parent(child);
+	}
+	return false;
+}
+
+/**
+ * of_link_to_phandle - Add device link to supplier from supplier phandle
+ * @dev: consumer device
+ * @sup_np: phandle to supplier device tree node
+ *
+ * Given a phandle to a supplier device tree node (@sup_np), this function
+ * finds the device that owns the supplier device tree node and creates a
+ * device link from @dev consumer device to the supplier device. This function
+ * doesn't create device links for invalid scenarios such as trying to create a
+ * link with a parent device as the consumer of its child device. In such
+ * cases, it returns an error.
+ *
+ * Returns:
+ * - 0 if link successfully created to supplier
+ * - -EAGAIN if linking to the supplier should be reattempted
+ * - -EINVAL if the supplier link is invalid and should not be created
+ * - -ENODEV if there is no device that corresponds to the supplier phandle
+ */
+static int of_link_to_phandle(struct device *dev, struct device_node *sup_np,
+			      u32 dl_flags)
+{
+	struct device *sup_dev;
+	int ret = 0;
+	struct device_node *tmp_np = sup_np;
+	int is_populated;
+
+	of_node_get(sup_np);
+	/*
+	 * Find the device node that contains the supplier phandle.  It may be
+	 * @sup_np or it may be an ancestor of @sup_np.
+	 */
+	while (sup_np) {
+
+		/* Don't allow linking to a disabled supplier */
+		if (!of_device_is_available(sup_np)) {
+			of_node_put(sup_np);
+			sup_np = NULL;
+		}
+
+		if (of_find_property(sup_np, "compatible", NULL))
+			break;
+
+		sup_np = of_get_next_parent(sup_np);
+	}
+
+	if (!sup_np) {
+		dev_dbg(dev, "Not linking to %pOFP - No device\n", tmp_np);
+		return -ENODEV;
+	}
+
+	/*
+	 * Don't allow linking a device node as a consumer of one of its
+	 * descendant nodes. By definition, a child node can't be a functional
+	 * dependency for the parent node.
+	 */
+	if (of_is_ancestor_of(dev->of_node, sup_np)) {
+		dev_dbg(dev, "Not linking to %pOFP - is descendant\n", sup_np);
+		of_node_put(sup_np);
+		return -EINVAL;
+	}
+	sup_dev = get_dev_from_fwnode(&sup_np->fwnode);
+	is_populated = of_node_check_flag(sup_np, OF_POPULATED);
+	of_node_put(sup_np);
+	if (!sup_dev && is_populated) {
+		/* Early device without struct device. */
+		dev_dbg(dev, "Not linking to %pOFP - No struct device\n",
+			sup_np);
+		return -ENODEV;
+	} else if (!sup_dev) {
+		return -EAGAIN;
+	}
+	if (!device_link_add(dev, sup_dev, dl_flags))
+		ret = -EAGAIN;
+	put_device(sup_dev);
+	return ret;
+}
+
+/**
+ * parse_prop_cells - Property parsing function for suppliers
+ *
+ * @np:		Pointer to device tree node containing a list
+ * @prop_name:	Name of property to be parsed. Expected to hold phandle values
+ * @index:	For properties holding a list of phandles, this is the index
+ *		into the list.
+ * @list_name:	Property name that is known to contain list of phandle(s) to
+ *		supplier(s)
+ * @cells_name:	property name that specifies phandles' arguments count
+ *
+ * This is a helper function to parse properties that have a known fixed name
+ * and are a list of phandles and phandle arguments.
+ *
+ * Returns:
+ * - phandle node pointer with refcount incremented. Caller must of_node_put()
+ *   on it when done.
+ * - NULL if no phandle found at index
+ */
+static struct device_node *parse_prop_cells(struct device_node *np,
+					    const char *prop_name, int index,
+					    const char *list_name,
+					    const char *cells_name)
+{
+	struct of_phandle_args sup_args;
+
+	if (strcmp(prop_name, list_name))
+		return NULL;
+
+	if (of_parse_phandle_with_args(np, list_name, cells_name, index,
+				       &sup_args))
+		return NULL;
+
+	return sup_args.np;
+}
+
+#define DEFINE_SIMPLE_PROP(fname, name, cells)				  \
+static struct device_node *parse_##fname(struct device_node *np,	  \
+					const char *prop_name, int index) \
+{									  \
+	return parse_prop_cells(np, prop_name, index, name, cells);	  \
+}
+
+static int strcmp_suffix(const char *str, const char *suffix)
+{
+	unsigned int len, suffix_len;
+
+	len = strlen(str);
+	suffix_len = strlen(suffix);
+	if (len <= suffix_len)
+		return -1;
+	return strcmp(str + len - suffix_len, suffix);
+}
+
+/**
+ * parse_suffix_prop_cells - Suffix property parsing function for suppliers
+ *
+ * @np:		Pointer to device tree node containing a list
+ * @prop_name:	Name of property to be parsed. Expected to hold phandle values
+ * @index:	For properties holding a list of phandles, this is the index
+ *		into the list.
+ * @suffix:	Property suffix that is known to contain list of phandle(s) to
+ *		supplier(s)
+ * @cells_name:	property name that specifies phandles' arguments count
+ *
+ * This is a helper function to parse properties that have a known fixed suffix
+ * and are a list of phandles and phandle arguments.
+ *
+ * Returns:
+ * - phandle node pointer with refcount incremented. Caller must of_node_put()
+ *   on it when done.
+ * - NULL if no phandle found at index
+ */
+static struct device_node *parse_suffix_prop_cells(struct device_node *np,
+					    const char *prop_name, int index,
+					    const char *suffix,
+					    const char *cells_name)
+{
+	struct of_phandle_args sup_args;
+
+	if (strcmp_suffix(prop_name, suffix))
+		return NULL;
+
+	if (of_parse_phandle_with_args(np, prop_name, cells_name, index,
+				       &sup_args))
+		return NULL;
+
+	return sup_args.np;
+}
+
+#define DEFINE_SUFFIX_PROP(fname, suffix, cells)			     \
+static struct device_node *parse_##fname(struct device_node *np,	     \
+					const char *prop_name, int index)    \
+{									     \
+	return parse_suffix_prop_cells(np, prop_name, index, suffix, cells); \
+}
+
+/**
+ * struct supplier_bindings - Property parsing functions for suppliers
+ *
+ * @parse_prop: function name
+ *	parse_prop() finds the node corresponding to a supplier phandle
+ * @parse_prop.np: Pointer to device node holding supplier phandle property
+ * @parse_prop.prop_name: Name of property holding a phandle value
+ * @parse_prop.index: For properties holding a list of phandles, this is the
+ *		      index into the list
+ *
+ * Returns:
+ * parse_prop() return values are
+ * - phandle node pointer with refcount incremented. Caller must of_node_put()
+ *   on it when done.
+ * - NULL if no phandle found at index
+ */
+struct supplier_bindings {
+	struct device_node *(*parse_prop)(struct device_node *np,
+					  const char *prop_name, int index);
+};
+
+DEFINE_SIMPLE_PROP(clocks, "clocks", "#clock-cells")
+DEFINE_SIMPLE_PROP(interconnects, "interconnects", "#interconnect-cells")
+DEFINE_SIMPLE_PROP(iommus, "iommus", "#iommu-cells")
+DEFINE_SIMPLE_PROP(mboxes, "mboxes", "#mbox-cells")
+DEFINE_SIMPLE_PROP(io_channels, "io-channel", "#io-channel-cells")
+DEFINE_SIMPLE_PROP(interrupt_parent, "interrupt-parent", NULL)
+DEFINE_SIMPLE_PROP(dmas, "dmas", "#dma-cells")
+DEFINE_SIMPLE_PROP(power_domains, "power-domains", "#power-domain-cells")
+DEFINE_SIMPLE_PROP(hwlocks, "hwlocks", "#hwlock-cells")
+DEFINE_SIMPLE_PROP(extcon, "extcon", NULL)
+DEFINE_SIMPLE_PROP(interrupts_extended, "interrupts-extended",
+					"#interrupt-cells")
+DEFINE_SIMPLE_PROP(nvmem_cells, "nvmem-cells", NULL)
+DEFINE_SIMPLE_PROP(phys, "phys", "#phy-cells")
+DEFINE_SIMPLE_PROP(wakeup_parent, "wakeup-parent", NULL)
+DEFINE_SIMPLE_PROP(pinctrl0, "pinctrl-0", NULL)
+DEFINE_SIMPLE_PROP(pinctrl1, "pinctrl-1", NULL)
+DEFINE_SIMPLE_PROP(pinctrl2, "pinctrl-2", NULL)
+DEFINE_SIMPLE_PROP(pinctrl3, "pinctrl-3", NULL)
+DEFINE_SIMPLE_PROP(pinctrl4, "pinctrl-4", NULL)
+DEFINE_SIMPLE_PROP(pinctrl5, "pinctrl-5", NULL)
+DEFINE_SIMPLE_PROP(pinctrl6, "pinctrl-6", NULL)
+DEFINE_SIMPLE_PROP(pinctrl7, "pinctrl-7", NULL)
+DEFINE_SIMPLE_PROP(pinctrl8, "pinctrl-8", NULL)
+DEFINE_SUFFIX_PROP(regulators, "-supply", NULL)
+DEFINE_SUFFIX_PROP(gpio, "-gpio", "#gpio-cells")
+DEFINE_SUFFIX_PROP(gpios, "-gpios", "#gpio-cells")
+
+static struct device_node *parse_iommu_maps(struct device_node *np,
+					    const char *prop_name, int index)
+{
+	if (strcmp(prop_name, "iommu-map"))
+		return NULL;
+
+	return of_parse_phandle(np, prop_name, (index * 4) + 1);
+}
+
+static const struct supplier_bindings of_supplier_bindings[] = {
+	{ .parse_prop = parse_clocks, },
+	{ .parse_prop = parse_interconnects, },
+	{ .parse_prop = parse_iommus, },
+	{ .parse_prop = parse_iommu_maps, },
+	{ .parse_prop = parse_mboxes, },
+	{ .parse_prop = parse_io_channels, },
+	{ .parse_prop = parse_interrupt_parent, },
+	{ .parse_prop = parse_dmas, },
+	{ .parse_prop = parse_power_domains, },
+	{ .parse_prop = parse_hwlocks, },
+	{ .parse_prop = parse_extcon, },
+	{ .parse_prop = parse_interrupts_extended, },
+	{ .parse_prop = parse_nvmem_cells, },
+	{ .parse_prop = parse_phys, },
+	{ .parse_prop = parse_wakeup_parent, },
+	{ .parse_prop = parse_pinctrl0, },
+	{ .parse_prop = parse_pinctrl1, },
+	{ .parse_prop = parse_pinctrl2, },
+	{ .parse_prop = parse_pinctrl3, },
+	{ .parse_prop = parse_pinctrl4, },
+	{ .parse_prop = parse_pinctrl5, },
+	{ .parse_prop = parse_pinctrl6, },
+	{ .parse_prop = parse_pinctrl7, },
+	{ .parse_prop = parse_pinctrl8, },
+	{ .parse_prop = parse_regulators, },
+	{ .parse_prop = parse_gpio, },
+	{ .parse_prop = parse_gpios, },
+	{}
+};
+
+/**
+ * of_link_property - Create device links to suppliers listed in a property
+ * @dev: Consumer device
+ * @con_np: The consumer device tree node which contains the property
+ * @prop_name: Name of property to be parsed
+ *
+ * This function checks if the property @prop_name that is present in the
+ * @con_np device tree node is one of the known common device tree bindings
+ * that list phandles to suppliers. If @prop_name isn't one, this function
+ * doesn't do anything.
+ *
+ * If @prop_name is one, this function attempts to create device links from the
+ * consumer device @dev to all the devices of the suppliers listed in
+ * @prop_name.
+ *
+ * Any failed attempt to create a device link will NOT result in an immediate
+ * return.  of_link_property() must create links to all the available supplier
+ * devices even when attempts to create a link to one or more suppliers fail.
+ */
+static int of_link_property(struct device *dev, struct device_node *con_np,
+			     const char *prop_name)
+{
+	struct device_node *phandle;
+	const struct supplier_bindings *s = of_supplier_bindings;
+	unsigned int i = 0;
+	bool matched = false;
+	int ret = 0;
+	u32 dl_flags;
+
+	if (dev->of_node == con_np)
+		dl_flags = DL_FLAG_AUTOPROBE_CONSUMER;
+	else
+		dl_flags = DL_FLAG_SYNC_STATE_ONLY;
+
+	/* Do not stop at first failed link, link all available suppliers. */
+	while (!matched && s->parse_prop) {
+		while ((phandle = s->parse_prop(con_np, prop_name, i))) {
+			matched = true;
+			i++;
+			if (of_link_to_phandle(dev, phandle, dl_flags)
+								== -EAGAIN)
+				ret = -EAGAIN;
+			of_node_put(phandle);
+		}
+		s++;
+	}
+	return ret;
+}
+
+static int of_link_to_suppliers(struct device *dev,
+				  struct device_node *con_np)
+{
+	struct device_node *child;
+	struct property *p;
+	int ret = 0;
+
+	for_each_property_of_node(con_np, p)
+		if (of_link_property(dev, con_np, p->name))
+			ret = -ENODEV;
+
+	for_each_available_child_of_node(con_np, child)
+		if (of_link_to_suppliers(dev, child) && !ret)
+			ret = -EAGAIN;
+
+	return ret;
+}
+
+static bool of_devlink = true;
+core_param(of_devlink, of_devlink, bool, 0);
+
+static int of_fwnode_add_links(const struct fwnode_handle *fwnode,
+			       struct device *dev)
+{
+	if (!of_devlink)
+		return 0;
+
+	if (unlikely(!is_of_node(fwnode)))
+		return 0;
+
+	return of_link_to_suppliers(dev, to_of_node(fwnode));
+}
+
 const struct fwnode_operations of_fwnode_ops = {
 	.get = of_fwnode_get,
 	.put = of_fwnode_put,
@@ -1001,5 +1361,6 @@ const struct fwnode_operations of_fwnode_ops = {
 	.graph_get_remote_endpoint = of_fwnode_graph_get_remote_endpoint,
 	.graph_get_port_parent = of_fwnode_graph_get_port_parent,
 	.graph_parse_endpoint = of_fwnode_graph_parse_endpoint,
+	.add_links = of_fwnode_add_links,
 };
 EXPORT_SYMBOL_GPL(of_fwnode_ops);
diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/controller/dwc/pcie-designware-ep.c
index 3dd2e26..d6d9667 100644
--- a/drivers/pci/controller/dwc/pcie-designware-ep.c
+++ b/drivers/pci/controller/dwc/pcie-designware-ep.c
@@ -18,6 +18,7 @@ void dw_pcie_ep_linkup(struct dw_pcie_ep *ep)
 
 	pci_epc_linkup(epc);
 }
+EXPORT_SYMBOL_GPL(dw_pcie_ep_linkup);
 
 static void __dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar,
 				   int flags)
@@ -607,3 +608,4 @@ int dw_pcie_ep_init(struct dw_pcie_ep *ep)
 
 	return 0;
 }
+EXPORT_SYMBOL_GPL(dw_pcie_ep_init);
diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c
index 14196c0..52197f7 100644
--- a/drivers/pci/controller/dwc/pcie-qcom.c
+++ b/drivers/pci/controller/dwc/pcie-qcom.c
@@ -60,6 +60,7 @@
 #define PCIE20_PARF_LTSSM			0x1B0
 #define PCIE20_PARF_SID_OFFSET			0x234
 #define PCIE20_PARF_BDF_TRANSLATE_CFG		0x24C
+#define PCIE20_PARF_DEVICE_TYPE			0x1000
 
 #define PCIE20_ELBI_SYS_CTRL			0x04
 #define PCIE20_ELBI_SYS_CTRL_LT_ENABLE		BIT(0)
@@ -98,6 +99,8 @@
 #define PCIE20_v3_PARF_SLV_ADDR_SPACE_SIZE	0x358
 #define SLV_ADDR_SPACE_SZ			0x10000000
 
+#define DEVICE_TYPE_RC				0x4
+
 #define QCOM_PCIE_2_1_0_MAX_SUPPLY	3
 struct qcom_pcie_resources_2_1_0 {
 	struct clk *iface_clk;
@@ -160,12 +163,20 @@ struct qcom_pcie_resources_2_3_3 {
 	struct reset_control *rst[7];
 };
 
+struct qcom_pcie_resources_2_7_0 {
+	struct clk_bulk_data clks[6];
+	struct regulator_bulk_data supplies[2];
+	struct reset_control *pci_reset;
+	struct clk *pipe_clk;
+};
+
 union qcom_pcie_resources {
 	struct qcom_pcie_resources_1_0_0 v1_0_0;
 	struct qcom_pcie_resources_2_1_0 v2_1_0;
 	struct qcom_pcie_resources_2_3_2 v2_3_2;
 	struct qcom_pcie_resources_2_3_3 v2_3_3;
 	struct qcom_pcie_resources_2_4_0 v2_4_0;
+	struct qcom_pcie_resources_2_7_0 v2_7_0;
 };
 
 struct qcom_pcie;
@@ -1158,6 +1169,136 @@ static int qcom_pcie_init_2_3_3(struct qcom_pcie *pcie)
 	return ret;
 }
 
+static int qcom_pcie_get_resources_2_7_0(struct qcom_pcie *pcie)
+{
+	struct qcom_pcie_resources_2_7_0 *res = &pcie->res.v2_7_0;
+	struct dw_pcie *pci = pcie->pci;
+	struct device *dev = pci->dev;
+	int ret;
+
+	res->pci_reset = devm_reset_control_get_exclusive(dev, "pci");
+	if (IS_ERR(res->pci_reset))
+		return PTR_ERR(res->pci_reset);
+
+	res->supplies[0].supply = "vdda";
+	res->supplies[1].supply = "vddpe-3v3";
+	ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(res->supplies),
+				      res->supplies);
+	if (ret)
+		return ret;
+
+	res->clks[0].id = "aux";
+	res->clks[1].id = "cfg";
+	res->clks[2].id = "bus_master";
+	res->clks[3].id = "bus_slave";
+	res->clks[4].id = "slave_q2a";
+	res->clks[5].id = "tbu";
+
+	ret = devm_clk_bulk_get(dev, ARRAY_SIZE(res->clks), res->clks);
+	if (ret < 0)
+		return ret;
+
+	res->pipe_clk = devm_clk_get(dev, "pipe");
+	return PTR_ERR_OR_ZERO(res->pipe_clk);
+}
+
+static int qcom_pcie_init_2_7_0(struct qcom_pcie *pcie)
+{
+	struct qcom_pcie_resources_2_7_0 *res = &pcie->res.v2_7_0;
+	struct dw_pcie *pci = pcie->pci;
+	struct device *dev = pci->dev;
+	u32 val;
+	int ret;
+
+	ret = regulator_bulk_enable(ARRAY_SIZE(res->supplies), res->supplies);
+	if (ret < 0) {
+		dev_err(dev, "cannot enable regulators\n");
+		return ret;
+	}
+
+	ret = clk_bulk_prepare_enable(ARRAY_SIZE(res->clks), res->clks);
+	if (ret < 0)
+		goto err_disable_regulators;
+
+	ret = reset_control_assert(res->pci_reset);
+	if (ret < 0) {
+		dev_err(dev, "cannot deassert pci reset\n");
+		goto err_disable_clocks;
+	}
+
+	msleep(10);
+
+	ret = reset_control_deassert(res->pci_reset);
+	if (ret < 0) {
+		dev_err(dev, "cannot deassert pci reset\n");
+		goto err_assert_resets;
+	}
+
+	ret = clk_prepare_enable(res->pipe_clk);
+	if (ret) {
+		dev_err(dev, "cannot prepare/enable pipe clock\n");
+		goto err_assert_resets;
+	}
+
+	/* configure PCIe to RC mode */
+	writel(DEVICE_TYPE_RC, pcie->parf + PCIE20_PARF_DEVICE_TYPE);
+
+	/* enable PCIe clocks and resets */
+	val = readl(pcie->parf + PCIE20_PARF_PHY_CTRL);
+	val &= ~BIT(0);
+	writel(val, pcie->parf + PCIE20_PARF_PHY_CTRL);
+
+	/* change DBI base address */
+	writel(0, pcie->parf + PCIE20_PARF_DBI_BASE_ADDR);
+
+	/* MAC PHY_POWERDOWN MUX DISABLE  */
+	val = readl(pcie->parf + PCIE20_PARF_SYS_CTRL);
+	val &= ~BIT(29);
+	writel(val, pcie->parf + PCIE20_PARF_SYS_CTRL);
+
+	val = readl(pcie->parf + PCIE20_PARF_MHI_CLOCK_RESET_CTRL);
+	val |= BIT(4);
+	writel(val, pcie->parf + PCIE20_PARF_MHI_CLOCK_RESET_CTRL);
+
+	if (IS_ENABLED(CONFIG_PCI_MSI)) {
+		val = readl(pcie->parf + PCIE20_PARF_AXI_MSTR_WR_ADDR_HALT);
+		val |= BIT(31);
+		writel(val, pcie->parf + PCIE20_PARF_AXI_MSTR_WR_ADDR_HALT);
+	}
+
+	return 0;
+err_assert_resets:
+	reset_control_assert(res->pci_reset);
+err_disable_clocks:
+	clk_bulk_disable_unprepare(ARRAY_SIZE(res->clks), res->clks);
+err_disable_regulators:
+	regulator_bulk_disable(ARRAY_SIZE(res->supplies), res->supplies);
+
+	return ret;
+}
+
+static void qcom_pcie_deinit_2_7_0(struct qcom_pcie *pcie)
+{
+	struct qcom_pcie_resources_2_7_0 *res = &pcie->res.v2_7_0;
+
+	clk_bulk_disable_unprepare(ARRAY_SIZE(res->clks), res->clks);
+	regulator_bulk_disable(ARRAY_SIZE(res->supplies), res->supplies);
+}
+
+static int qcom_pcie_post_init_2_7_0(struct qcom_pcie *pcie)
+{
+	struct qcom_pcie_resources_2_7_0 *res = &pcie->res.v2_7_0;
+
+	return clk_prepare_enable(res->pipe_clk);
+}
+
+static void qcom_pcie_post_deinit_2_7_0(struct qcom_pcie *pcie)
+{
+	struct qcom_pcie_resources_2_7_0 *res = &pcie->res.v2_7_0;
+
+	clk_disable_unprepare(res->pipe_clk);
+}
+
 static int qcom_pcie_link_up(struct dw_pcie *pci)
 {
 	u16 val = readw(pci->dbi_base + PCIE20_CAP + PCI_EXP_LNKSTA);
@@ -1257,6 +1398,16 @@ static const struct qcom_pcie_ops ops_2_3_3 = {
 	.ltssm_enable = qcom_pcie_2_3_2_ltssm_enable,
 };
 
+/* Qcom IP rev.: 2.7.0	Synopsys IP rev.: 4.30a */
+static const struct qcom_pcie_ops ops_2_7_0 = {
+	.get_resources = qcom_pcie_get_resources_2_7_0,
+	.init = qcom_pcie_init_2_7_0,
+	.deinit = qcom_pcie_deinit_2_7_0,
+	.ltssm_enable = qcom_pcie_2_3_2_ltssm_enable,
+	.post_init = qcom_pcie_post_init_2_7_0,
+	.post_deinit = qcom_pcie_post_deinit_2_7_0,
+};
+
 static const struct dw_pcie_ops dw_pcie_ops = {
 	.link_up = qcom_pcie_link_up,
 };
@@ -1372,6 +1523,7 @@ static const struct of_device_id qcom_pcie_match[] = {
 	{ .compatible = "qcom,pcie-ipq8074", .data = &ops_2_3_3 },
 	{ .compatible = "qcom,pcie-ipq4019", .data = &ops_2_4_0 },
 	{ .compatible = "qcom,pcie-qcs404", .data = &ops_2_4_0 },
+	{ .compatible = "qcom,pcie-sdm845", .data = &ops_2_7_0 },
 	{ }
 };
 
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 89dece8..2c8c956 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -123,6 +123,7 @@ bool pci_ats_disabled(void)
 {
 	return pcie_ats_disabled;
 }
+EXPORT_SYMBOL_GPL(pci_ats_disabled);
 
 /* Disable bridge_d3 for all PCIe ports */
 static bool pci_bridge_d3_disable;
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index a5adc2e..ea692e5 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -3,6 +3,7 @@
 #define DRIVERS_PCI_H
 
 #include <linux/pci.h>
+#include <linux/android_kabi.h>
 
 /* Number of possible devfns: 0.0 to 1f.7 inclusive */
 #define MAX_NR_DEVFNS 256
@@ -338,6 +339,11 @@ struct pci_sriov {
 	u16		subsystem_device; /* VF subsystem device */
 	resource_size_t	barsz[PCI_SRIOV_NUM_BARS];	/* VF BAR size */
 	bool		drivers_autoprobe; /* Auto probing of VFs by driver */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /**
diff --git a/drivers/phy/qualcomm/phy-qcom-qmp.c b/drivers/phy/qualcomm/phy-qcom-qmp.c
index 5ddbf9a..7f00228 100644
--- a/drivers/phy/qualcomm/phy-qcom-qmp.c
+++ b/drivers/phy/qualcomm/phy-qcom-qmp.c
@@ -160,6 +160,18 @@ static const unsigned int qmp_v3_usb3phy_regs_layout[] = {
 	[QPHY_PCS_LFPS_RXTERM_IRQ_STATUS] = 0x170,
 };
 
+static const unsigned int sdm845_qmp_pciephy_regs_layout[] = {
+	[QPHY_SW_RESET]			= 0x00,
+	[QPHY_START_CTRL]		= 0x08,
+	[QPHY_PCS_STATUS]		= 0x174,
+};
+
+static const unsigned int sdm845_qhp_pciephy_regs_layout[] = {
+	[QPHY_SW_RESET]			= 0x00,
+	[QPHY_START_CTRL]		= 0x08,
+	[QPHY_PCS_STATUS]		= 0x2ac,
+};
+
 static const unsigned int sdm845_ufsphy_regs_layout[] = {
 	[QPHY_START_CTRL]		= 0x00,
 	[QPHY_PCS_READY_STATUS]		= 0x160,
@@ -474,6 +486,229 @@ static const struct qmp_phy_init_tbl ipq8074_pcie_pcs_tbl[] = {
 	QMP_PHY_INIT_CFG_L(QPHY_START_CTRL, 0x3),
 };
 
+static const struct qmp_phy_init_tbl sdm845_qmp_pcie_serdes_tbl[] = {
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_BIAS_EN_CLKBUFLR_EN, 0x14),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x30),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_IVCO, 0x007),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_CONFIG, 0x06),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_EN, 0x01),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_RESETSM_CNTRL, 0x20),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_MAP, 0x00),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE2_MODE0, 0x01),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE1_MODE0, 0xc9),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_TIMER1, 0xff),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_TIMER2, 0x3f),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SVS_MODE_CLK_SEL, 0x01),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORE_CLK_EN, 0x00),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORECLK_DIV_MODE0, 0x0a),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_EP_DIV, 0x19),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_ENABLE1, 0x90),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_DEC_START_MODE0, 0x82),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START3_MODE0, 0x02),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START2_MODE0, 0xea),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START1_MODE0, 0xab),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP3_MODE0, 0x00),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP2_MODE0, 0x0d),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP1_MODE0, 0x04),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_HSCLK_SEL, 0x00),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CP_CTRL_MODE0, 0x06),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_RCTRL_MODE0, 0x16),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_CCTRL_MODE0, 0x36),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_MODE, 0x01),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x33),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYS_CLK_CTRL, 0x02),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_BUF_ENABLE, 0x06),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_EN_SEL, 0x04),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN1_MODE0, 0x00),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN0_MODE0, 0x3f),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_BG_TIMER, 0x09),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_EN_CENTER, 0x01),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER1, 0x40),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER2, 0x01),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER1, 0x02),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER2, 0x00),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE1, 0x7e),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE2, 0x15),
+};
+
+static const struct qmp_phy_init_tbl sdm845_qmp_pcie_tx_tbl[] = {
+	QMP_PHY_INIT_CFG(QSERDES_V3_TX_RES_CODE_LANE_OFFSET_TX, 0x02),
+	QMP_PHY_INIT_CFG(QSERDES_V3_TX_RCV_DETECT_LVL_2, 0x12),
+	QMP_PHY_INIT_CFG(QSERDES_V3_TX_HIGHZ_DRVR_EN, 0x10),
+	QMP_PHY_INIT_CFG(QSERDES_V3_TX_LANE_MODE_1, 0x06),
+};
+
+static const struct qmp_phy_init_tbl sdm845_qmp_pcie_rx_tbl[] = {
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_CNTRL, 0x03),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_ENABLES, 0x10),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_DEGLITCH_CNTRL, 0x14),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0e),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL3, 0x04),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL4, 0x1a),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x4b),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_GAIN, 0x04),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_GAIN_HALF, 0x04),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x71),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_MODE_00, 0x59),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_MODE_01, 0x59),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_INTERFACE_MODE, 0x40),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_PI_CONTROLS, 0x71),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_FASTLOCK_COUNT_LOW, 0x40),
+};
+
+static const struct qmp_phy_init_tbl sdm845_qmp_pcie_pcs_tbl[] = {
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_ENDPOINT_REFCLK_DRIVE, 0x04),
+
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNTRL2, 0x83),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNT_VAL_L, 0x09),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNT_VAL_H_TOL, 0xa2),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_MAN_CODE, 0x40),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNTRL1, 0x02),
+
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_OSC_DTCT_ACTIONS, 0x00),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_PWRUP_RESET_DLY_TIME_AUXCLK, 0x01),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_MSB, 0x00),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_LSB, 0x20),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_LP_WAKEUP_DLY_TIME_AUXCLK_MSB, 0x00),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_LP_WAKEUP_DLY_TIME_AUXCLK, 0x01),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_PLL_LOCK_CHK_DLY_TIME, 0x73),
+
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_RX_SIGDET_LVL, 0xbb),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_SIGDET_CNTRL, 0x03),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_REFGEN_REQ_CONFIG1, 0x0d),
+
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_POWER_STATE_CONFIG4, 0x00),
+};
+
+static const struct qmp_phy_init_tbl sdm845_qmp_pcie_pcs_misc_tbl[] = {
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_CONFIG2, 0x52),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_MODE2_CONFIG2, 0x10),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_MODE2_CONFIG4, 0x1a),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_MODE2_CONFIG5, 0x06),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_PCIE_INT_AUX_CLK_CONFIG1, 0x00),
+};
+
+static const struct qmp_phy_init_tbl sdm845_qhp_pcie_serdes_tbl[] = {
+	{ 0x0dc, 0x27 },
+	{ 0x014, 0x01 },
+	{ 0x020, 0x31 },
+	{ 0x024, 0x01 },
+	{ 0x028, 0xde },
+	{ 0x02c, 0x07 },
+	{ 0x034, 0x4c },
+	{ 0x038, 0x06 },
+	{ 0x054, 0x18 },
+	{ 0x058, 0xb0 },
+	{ 0x06c, 0x8c },
+	{ 0x070, 0x20 },
+	{ 0x078, 0x14 },
+	{ 0x07c, 0x34 },
+	{ 0x0b4, 0x06 },
+	{ 0x0b8, 0x06 },
+	{ 0x0c0, 0x16 },
+	{ 0x0c4, 0x16 },
+	{ 0x0cc, 0x36 },
+	{ 0x0d0, 0x36 },
+	{ 0x0f0, 0x05 },
+	{ 0x0f8, 0x42 },
+	{ 0x100, 0x82 },
+	{ 0x108, 0x68 },
+	{ 0x11c, 0x55 },
+	{ 0x120, 0x55 },
+	{ 0x124, 0x03 },
+	{ 0x128, 0xab },
+	{ 0x12c, 0xaa },
+	{ 0x130, 0x02 },
+	{ 0x150, 0x3f },
+	{ 0x158, 0x3f },
+	{ 0x178, 0x10 },
+	{ 0x1cc, 0x04 },
+	{ 0x1d0, 0x30 },
+	{ 0x1e0, 0x04 },
+	{ 0x1e8, 0x73 },
+	{ 0x1f0, 0x0c },
+	{ 0x1fc, 0x15 },
+	{ 0x21c, 0x04 },
+	{ 0x224, 0x01 },
+	{ 0x228, 0x22 },
+	{ 0x22c, 0x00 },
+	{ 0x098, 0x20 },
+	{ 0x1c8, 0x07 },
+};
+
+static const struct qmp_phy_init_tbl sdm845_qhp_pcie_tx_tbl[] = {
+	{ 0x00c, 0x00 },
+	{ 0x018, 0x0d },
+	{ 0x060, 0x01 },
+	{ 0x064, 0x1a },
+	{ 0x07c, 0x2f },
+	{ 0x0c0, 0x09 },
+	{ 0x0c4, 0x09 },
+	{ 0x0c8, 0x1b },
+	{ 0x0d0, 0x01 },
+	{ 0x0d4, 0x07 },
+	{ 0x0d8, 0x31 },
+	{ 0x0dc, 0x31 },
+	{ 0x0e0, 0x03 },
+	{ 0x0fc, 0x02 },
+	{ 0x100, 0x00 },
+	{ 0x108, 0x12 },
+	{ 0x114, 0x25 },
+	{ 0x118, 0x00 },
+	{ 0x11c, 0x05 },
+	{ 0x120, 0x01 },
+	{ 0x124, 0x26 },
+	{ 0x128, 0x12 },
+	{ 0x130, 0x04 },
+	{ 0x134, 0x04 },
+	{ 0x138, 0x09 },
+	{ 0x154, 0x15 },
+	{ 0x160, 0x28 },
+	{ 0x168, 0x7f },
+	{ 0x16c, 0x07 },
+	{ 0x178, 0x04 },
+	{ 0x180, 0x70 },
+	{ 0x184, 0x8b },
+	{ 0x188, 0x08 },
+	{ 0x18c, 0x0a },
+	{ 0x190, 0x03 },
+	{ 0x194, 0x04 },
+	{ 0x198, 0x04 },
+	{ 0x19c, 0x0c },
+	{ 0x1a4, 0x02 },
+	{ 0x1c0, 0x5c },
+	{ 0x1c4, 0x3e },
+	{ 0x1c8, 0x3f },
+	{ 0x230, 0x01 },
+	{ 0x234, 0xa0 },
+	{ 0x238, 0x08 },
+	{ 0x2a4, 0x01 },
+	{ 0x2ac, 0xc3 },
+	{ 0x2b0, 0x00 },
+	{ 0x2b8, 0xbc },
+	{ 0x2c0, 0x7f },
+	{ 0x2c4, 0x15 },
+	{ 0x010, 0x0c },
+	{ 0x014, 0x0f },
+	{ 0x2cc, 0x04 },
+	{ 0x13c, 0x20 },
+	{ 0x2a8, 0x01 },
+};
+
+static const struct qmp_phy_init_tbl sdm845_qhp_pcie_rx_tbl[] = {
+};
+
+static const struct qmp_phy_init_tbl sdm845_qhp_pcie_pcs_tbl[] = {
+	{ 0x15c, 0x3f },
+	{ 0x174, 0x50 },
+	{ 0x02c, 0x19 },
+	{ 0x040, 0x07 },
+	{ 0x054, 0x17 },
+	{ 0x068, 0x09 },
+	{ 0x16c, 0x9f },
+};
+
 static const struct qmp_phy_init_tbl qmp_v3_usb3_serdes_tbl[] = {
 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_IVCO, 0x07),
 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_EN_SEL, 0x14),
@@ -895,6 +1130,8 @@ struct qmp_phy_cfg {
 	int rx_tbl_num;
 	const struct qmp_phy_init_tbl *pcs_tbl;
 	int pcs_tbl_num;
+	const struct qmp_phy_init_tbl *pcs_misc_tbl;
+	int pcs_misc_tbl_num;
 
 	/* clock ids to be requested */
 	const char * const *clk_list;
@@ -1033,6 +1270,10 @@ static const char * const qmp_v3_phy_clk_l[] = {
 	"aux", "cfg_ahb", "ref", "com_aux",
 };
 
+static const char * const sdm845_pciephy_clk_l[] = {
+	"aux", "cfg_ahb", "ref", "refgen",
+};
+
 static const char * const sdm845_ufs_phy_clk_l[] = {
 	"ref", "ref_aux",
 };
@@ -1046,6 +1287,10 @@ static const char * const msm8996_usb3phy_reset_l[] = {
 	"phy", "common",
 };
 
+static const char * const sdm845_pciephy_reset_l[] = {
+	"phy",
+};
+
 /* list of regulators */
 static const char * const qmp_phy_vreg_l[] = {
 	"vdda-phy", "vdda-pll",
@@ -1144,6 +1389,64 @@ static const struct qmp_phy_cfg ipq8074_pciephy_cfg = {
 	.pwrdn_delay_max	= 1005,		/* us */
 };
 
+static const struct qmp_phy_cfg sdm845_qmp_pciephy_cfg = {
+	.type = PHY_TYPE_PCIE,
+	.nlanes = 1,
+
+	.serdes_tbl		= sdm845_qmp_pcie_serdes_tbl,
+	.serdes_tbl_num		= ARRAY_SIZE(sdm845_qmp_pcie_serdes_tbl),
+	.tx_tbl			= sdm845_qmp_pcie_tx_tbl,
+	.tx_tbl_num		= ARRAY_SIZE(sdm845_qmp_pcie_tx_tbl),
+	.rx_tbl			= sdm845_qmp_pcie_rx_tbl,
+	.rx_tbl_num		= ARRAY_SIZE(sdm845_qmp_pcie_rx_tbl),
+	.pcs_tbl		= sdm845_qmp_pcie_pcs_tbl,
+	.pcs_tbl_num		= ARRAY_SIZE(sdm845_qmp_pcie_pcs_tbl),
+	.pcs_misc_tbl		= sdm845_qmp_pcie_pcs_misc_tbl,
+	.pcs_misc_tbl_num	= ARRAY_SIZE(sdm845_qmp_pcie_pcs_misc_tbl),
+	.clk_list		= sdm845_pciephy_clk_l,
+	.num_clks		= ARRAY_SIZE(sdm845_pciephy_clk_l),
+	.reset_list		= sdm845_pciephy_reset_l,
+	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
+	.vreg_list		= qmp_phy_vreg_l,
+	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
+	.regs			= sdm845_qmp_pciephy_regs_layout,
+
+	.start_ctrl		= PCS_START | SERDES_START,
+	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
+
+	.has_pwrdn_delay	= true,
+	.pwrdn_delay_min	= 995,		/* us */
+	.pwrdn_delay_max	= 1005,		/* us */
+};
+
+static const struct qmp_phy_cfg sdm845_qhp_pciephy_cfg = {
+	.type = PHY_TYPE_PCIE,
+	.nlanes = 1,
+
+	.serdes_tbl		= sdm845_qhp_pcie_serdes_tbl,
+	.serdes_tbl_num		= ARRAY_SIZE(sdm845_qhp_pcie_serdes_tbl),
+	.tx_tbl			= sdm845_qhp_pcie_tx_tbl,
+	.tx_tbl_num		= ARRAY_SIZE(sdm845_qhp_pcie_tx_tbl),
+	.rx_tbl			= sdm845_qhp_pcie_rx_tbl,
+	.rx_tbl_num		= ARRAY_SIZE(sdm845_qhp_pcie_rx_tbl),
+	.pcs_tbl		= sdm845_qhp_pcie_pcs_tbl,
+	.pcs_tbl_num		= ARRAY_SIZE(sdm845_qhp_pcie_pcs_tbl),
+	.clk_list		= sdm845_pciephy_clk_l,
+	.num_clks		= ARRAY_SIZE(sdm845_pciephy_clk_l),
+	.reset_list		= sdm845_pciephy_reset_l,
+	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
+	.vreg_list		= qmp_phy_vreg_l,
+	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
+	.regs			= sdm845_qhp_pciephy_regs_layout,
+
+	.start_ctrl		= PCS_START | SERDES_START,
+	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
+
+	.has_pwrdn_delay	= true,
+	.pwrdn_delay_min	= 995,		/* us */
+	.pwrdn_delay_max	= 1005,		/* us */
+};
+
 static const struct qmp_phy_cfg qmp_v3_usb3phy_cfg = {
 	.type			= PHY_TYPE_USB3,
 	.nlanes			= 1,
@@ -1449,6 +1752,7 @@ static int qcom_qmp_phy_enable(struct phy *phy)
 	void __iomem *tx = qphy->tx;
 	void __iomem *rx = qphy->rx;
 	void __iomem *pcs = qphy->pcs;
+	void __iomem *pcs_misc = qphy->pcs_misc;
 	void __iomem *dp_com = qmp->dp_com;
 	void __iomem *status;
 	unsigned int mask, val, ready;
@@ -1519,6 +1823,9 @@ static int qcom_qmp_phy_enable(struct phy *phy)
 	if (ret)
 		goto err_lane_rst;
 
+	qcom_qmp_phy_configure(pcs_misc, cfg->regs, cfg->pcs_misc_tbl,
+			       cfg->pcs_misc_tbl_num);
+
 	/*
 	 * Pull out PHY from POWER DOWN state.
 	 * This is active low enable signal to power-down PHY.
@@ -1853,7 +2160,7 @@ static const struct phy_ops qcom_qmp_phy_gen_ops = {
 	.owner		= THIS_MODULE,
 };
 
-static const struct phy_ops qcom_qmp_ufs_ops = {
+static const struct phy_ops qcom_qmp_pcie_ufs_ops = {
 	.power_on	= qcom_qmp_phy_enable,
 	.power_off	= qcom_qmp_phy_disable,
 	.set_mode	= qcom_qmp_phy_set_mode,
@@ -1953,8 +2260,8 @@ int qcom_qmp_phy_create(struct device *dev, struct device_node *np, int id)
 		}
 	}
 
-	if (qmp->cfg->type == PHY_TYPE_UFS)
-		ops = &qcom_qmp_ufs_ops;
+	if (qmp->cfg->type == PHY_TYPE_UFS || qmp->cfg->type == PHY_TYPE_PCIE)
+		ops = &qcom_qmp_pcie_ufs_ops;
 
 	generic_phy = devm_phy_create(dev, np, ops);
 	if (IS_ERR(generic_phy)) {
@@ -1989,6 +2296,12 @@ static const struct of_device_id qcom_qmp_phy_of_match_table[] = {
 		.compatible = "qcom,ipq8074-qmp-pcie-phy",
 		.data = &ipq8074_pciephy_cfg,
 	}, {
+		.compatible = "qcom,sdm845-qhp-pcie-phy",
+		.data = &sdm845_qhp_pciephy_cfg,
+	}, {
+		.compatible = "qcom,sdm845-qmp-pcie-phy",
+		.data = &sdm845_qmp_pciephy_cfg,
+	}, {
 		.compatible = "qcom,sdm845-qmp-usb3-phy",
 		.data = &qmp_v3_usb3phy_cfg,
 	}, {
diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c
index 6381745..b4ef9b6 100644
--- a/drivers/pinctrl/core.c
+++ b/drivers/pinctrl/core.c
@@ -176,6 +176,7 @@ const char *pin_get_name(struct pinctrl_dev *pctldev, const unsigned pin)
 
 	return desc->name;
 }
+EXPORT_SYMBOL_GPL(pin_get_name);
 
 /* Deletes a range of pin descriptors */
 static void pinctrl_free_pindescs(struct pinctrl_dev *pctldev,
diff --git a/drivers/pinctrl/pinconf-generic.c b/drivers/pinctrl/pinconf-generic.c
index 9eb8630..dfef471 100644
--- a/drivers/pinctrl/pinconf-generic.c
+++ b/drivers/pinctrl/pinconf-generic.c
@@ -286,6 +286,7 @@ int pinconf_generic_parse_dt_config(struct device_node *np,
 	kfree(cfg);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(pinconf_generic_parse_dt_config);
 
 int pinconf_generic_dt_subnode_to_map(struct pinctrl_dev *pctldev,
 		struct device_node *np, struct pinctrl_map **map,
diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
index 4432032..4e0bbfc 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm.c
@@ -23,6 +23,8 @@
 #include <linux/pm.h>
 #include <linux/log2.h>
 
+#include <linux/soc/qcom/irq.h>
+
 #include "../core.h"
 #include "../pinconf.h"
 #include "pinctrl-msm.h"
@@ -44,6 +46,7 @@
  * @enabled_irqs:   Bitmap of currently enabled irqs.
  * @dual_edge_irqs: Bitmap of irqs that need sw emulated dual edge
  *                  detection.
+ * @skip_wake_irqs: Skip IRQs that are handled by wakeup interrupt contrroller
  * @soc;            Reference to soc_data of platform specific data.
  * @regs:           Base addresses for the TLMM tiles.
  */
@@ -61,6 +64,7 @@ struct msm_pinctrl {
 
 	DECLARE_BITMAP(dual_edge_irqs, MAX_NR_GPIO);
 	DECLARE_BITMAP(enabled_irqs, MAX_NR_GPIO);
+	DECLARE_BITMAP(skip_wake_irqs, MAX_NR_GPIO);
 
 	const struct msm_pinctrl_soc_data *soc;
 	void __iomem *regs[MAX_NR_TILES];
@@ -707,6 +711,12 @@ static void msm_gpio_irq_mask(struct irq_data *d)
 	unsigned long flags;
 	u32 val;
 
+	if (d->parent_data)
+		irq_chip_mask_parent(d);
+
+	if (test_bit(d->hwirq, pctrl->skip_wake_irqs))
+		return;
+
 	g = &pctrl->soc->groups[d->hwirq];
 
 	raw_spin_lock_irqsave(&pctrl->lock, flags);
@@ -751,6 +761,12 @@ static void msm_gpio_irq_clear_unmask(struct irq_data *d, bool status_clear)
 	unsigned long flags;
 	u32 val;
 
+	if (d->parent_data)
+		irq_chip_unmask_parent(d);
+
+	if (test_bit(d->hwirq, pctrl->skip_wake_irqs))
+		return;
+
 	g = &pctrl->soc->groups[d->hwirq];
 
 	raw_spin_lock_irqsave(&pctrl->lock, flags);
@@ -778,10 +794,37 @@ static void msm_gpio_irq_clear_unmask(struct irq_data *d, bool status_clear)
 
 static void msm_gpio_irq_enable(struct irq_data *d)
 {
+	/*
+	 * Clear the interrupt that may be pending before we enable
+	 * the line.
+	 * This is especially a problem with the GPIOs routed to the
+	 * PDC. These GPIOs are direct-connect interrupts to the GIC.
+	 * Disabling the interrupt line at the PDC does not prevent
+	 * the interrupt from being latched at the GIC. The state at
+	 * GIC needs to be cleared before enabling.
+	 */
+	if (d->parent_data) {
+		irq_chip_set_parent_state(d, IRQCHIP_STATE_PENDING, 0);
+		irq_chip_enable_parent(d);
+	}
 
 	msm_gpio_irq_clear_unmask(d, true);
 }
 
+static void msm_gpio_irq_disable(struct irq_data *d)
+{
+	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
+	struct msm_pinctrl *pctrl = gpiochip_get_data(gc);
+
+	if (d->parent_data)
+		irq_chip_disable_parent(d);
+
+	if (test_bit(d->hwirq, pctrl->skip_wake_irqs))
+		return;
+
+	msm_gpio_irq_mask(d);
+}
+
 static void msm_gpio_irq_unmask(struct irq_data *d)
 {
 	msm_gpio_irq_clear_unmask(d, false);
@@ -795,6 +838,9 @@ static void msm_gpio_irq_ack(struct irq_data *d)
 	unsigned long flags;
 	u32 val;
 
+	if (test_bit(d->hwirq, pctrl->skip_wake_irqs))
+		return;
+
 	g = &pctrl->soc->groups[d->hwirq];
 
 	raw_spin_lock_irqsave(&pctrl->lock, flags);
@@ -820,6 +866,12 @@ static int msm_gpio_irq_set_type(struct irq_data *d, unsigned int type)
 	unsigned long flags;
 	u32 val;
 
+	if (d->parent_data)
+		irq_chip_set_type_parent(d, type);
+
+	if (test_bit(d->hwirq, pctrl->skip_wake_irqs))
+		return 0;
+
 	g = &pctrl->soc->groups[d->hwirq];
 
 	raw_spin_lock_irqsave(&pctrl->lock, flags);
@@ -912,6 +964,15 @@ static int msm_gpio_irq_set_wake(struct irq_data *d, unsigned int on)
 	struct msm_pinctrl *pctrl = gpiochip_get_data(gc);
 	unsigned long flags;
 
+	if (d->parent_data)
+		irq_chip_set_wake_parent(d, on);
+
+	/*
+	 * While they may not wake up when the TLMM is powered off,
+	 * some GPIOs would like to wakeup the system from suspend
+	 * when TLMM is powered on. To allow that, enable the GPIO
+	 * summary line to be wakeup capable at GIC.
+	 */
 	raw_spin_lock_irqsave(&pctrl->lock, flags);
 
 	irq_set_irq_wake(pctrl->irq, on);
@@ -990,6 +1051,30 @@ static void msm_gpio_irq_handler(struct irq_desc *desc)
 	chained_irq_exit(chip, desc);
 }
 
+static int msm_gpio_wakeirq(struct gpio_chip *gc,
+			    unsigned int child,
+			    unsigned int child_type,
+			    unsigned int *parent,
+			    unsigned int *parent_type)
+{
+	struct msm_pinctrl *pctrl = gpiochip_get_data(gc);
+	const struct msm_gpio_wakeirq_map *map;
+	int i;
+
+	*parent = GPIO_NO_WAKE_IRQ;
+	*parent_type = IRQ_TYPE_EDGE_RISING;
+
+	for (i = 0; i < pctrl->soc->nwakeirq_map; i++) {
+		map = &pctrl->soc->wakeirq_map[i];
+		if (map->gpio == child) {
+			*parent = map->wakeirq;
+			break;
+		}
+	}
+
+	return 0;
+}
+
 static bool msm_gpio_needs_valid_mask(struct msm_pinctrl *pctrl)
 {
 	if (pctrl->soc->reserved_gpios)
@@ -1004,6 +1089,7 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
 	struct gpio_irq_chip *girq;
 	int ret;
 	unsigned ngpio = pctrl->soc->ngpios;
+	struct device_node *dn;
 
 	if (WARN_ON(ngpio > MAX_NR_GPIO))
 		return -EINVAL;
@@ -1020,17 +1106,40 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
 
 	pctrl->irq_chip.name = "msmgpio";
 	pctrl->irq_chip.irq_enable = msm_gpio_irq_enable;
+	pctrl->irq_chip.irq_disable = msm_gpio_irq_disable;
 	pctrl->irq_chip.irq_mask = msm_gpio_irq_mask;
 	pctrl->irq_chip.irq_unmask = msm_gpio_irq_unmask;
 	pctrl->irq_chip.irq_ack = msm_gpio_irq_ack;
+	pctrl->irq_chip.irq_eoi = irq_chip_eoi_parent;
 	pctrl->irq_chip.irq_set_type = msm_gpio_irq_set_type;
 	pctrl->irq_chip.irq_set_wake = msm_gpio_irq_set_wake;
 	pctrl->irq_chip.irq_request_resources = msm_gpio_irq_reqres;
 	pctrl->irq_chip.irq_release_resources = msm_gpio_irq_relres;
 
+	dn = of_parse_phandle(pctrl->dev->of_node, "wakeup-parent", 0);
+	if (dn) {
+		int i;
+		bool skip;
+		unsigned int gpio;
+
+		chip->irq.parent_domain = irq_find_matching_host(dn,
+						 DOMAIN_BUS_WAKEUP);
+		of_node_put(dn);
+		if (!chip->irq.parent_domain)
+			return -EPROBE_DEFER;
+		chip->irq.child_to_parent_hwirq = msm_gpio_wakeirq;
+
+		skip = irq_domain_qcom_handle_wakeup(chip->irq.parent_domain);
+		for (i = 0; skip && i < pctrl->soc->nwakeirq_map; i++) {
+			gpio = pctrl->soc->wakeirq_map[i].gpio;
+			set_bit(gpio, pctrl->skip_wake_irqs);
+		}
+	}
+
 	girq = &chip->irq;
 	girq->chip = &pctrl->irq_chip;
 	girq->parent_handler = msm_gpio_irq_handler;
+	girq->fwnode = pctrl->dev->fwnode;
 	girq->num_parents = 1;
 	girq->parents = devm_kcalloc(pctrl->dev, 1, sizeof(*girq->parents),
 				     GFP_KERNEL);
@@ -1066,6 +1175,16 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
 		}
 	}
 
+	/*
+	 * Since we are chained to the GIC using the TLMM summary line
+	 * and in hierarchy with the wakeup parent interrupt controller,
+	 * explicitly set the chained summary line. We need to do this because
+	 * the summary line is not routed to the wakeup parent but directly
+	 * to the GIC.
+	 */
+	gpiochip_set_chained_irqchip(chip, &pctrl->irq_chip, pctrl->irq,
+				     msm_gpio_irq_handler);
+
 	return 0;
 }
 
diff --git a/drivers/pinctrl/qcom/pinctrl-msm.h b/drivers/pinctrl/qcom/pinctrl-msm.h
index 48569cda8..1547020 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm.h
+++ b/drivers/pinctrl/qcom/pinctrl-msm.h
@@ -5,6 +5,8 @@
 #ifndef __PINCTRL_MSM_H__
 #define __PINCTRL_MSM_H__
 
+#include <linux/gpio/driver.h>
+
 struct pinctrl_pin_desc;
 
 /**
@@ -92,6 +94,16 @@ struct msm_pingroup {
 };
 
 /**
+ * struct msm_gpio_wakeirq_map - Map of GPIOs and their wakeup pins
+ * @gpio:          The GPIOs that are wakeup capable
+ * @wakeirq:       The interrupt at the always-on interrupt controller
+ */
+struct msm_gpio_wakeirq_map {
+	unsigned int gpio;
+	unsigned int wakeirq;
+};
+
+/**
  * struct msm_pinctrl_soc_data - Qualcomm pin controller driver configuration
  * @pins:	    An array describing all pins the pin controller affects.
  * @npins:	    The number of entries in @pins.
@@ -101,6 +113,8 @@ struct msm_pingroup {
  * @ngroups:	    The numbmer of entries in @groups.
  * @ngpio:	    The number of pingroups the driver should expose as GPIOs.
  * @pull_no_keeper: The SoC does not support keeper bias.
+ * @wakeirq_map:    The map of wakeup capable GPIOs and the pin at PDC/MPM
+ * @nwakeirq_map:   The number of entries in @hierarchy_map
  */
 struct msm_pinctrl_soc_data {
 	const struct pinctrl_pin_desc *pins;
@@ -114,6 +128,8 @@ struct msm_pinctrl_soc_data {
 	const char *const *tiles;
 	unsigned int ntiles;
 	const int *reserved_gpios;
+	const struct msm_gpio_wakeirq_map *wakeirq_map;
+	unsigned int nwakeirq_map;
 };
 
 extern const struct dev_pm_ops msm_pinctrl_dev_pm_ops;
diff --git a/drivers/pinctrl/sprd/Kconfig b/drivers/pinctrl/sprd/Kconfig
index b6c5479..eef35d0 100644
--- a/drivers/pinctrl/sprd/Kconfig
+++ b/drivers/pinctrl/sprd/Kconfig
@@ -4,9 +4,7 @@
 #
 
 config PINCTRL_SPRD
-	bool "Spreadtrum pinctrl driver"
-	depends on OF
-	depends on ARCH_SPRD || COMPILE_TEST
+	tristate
 	select PINMUX
 	select PINCONF
 	select GENERIC_PINCONF
@@ -15,7 +13,9 @@
 	  Say Y here to enable Spreadtrum pinctrl driver
 
 config PINCTRL_SPRD_SC9860
-	bool "Spreadtrum SC9860 pinctrl driver"
-	depends on PINCTRL_SPRD
+	tristate "Spreadtrum SC9860 pinctrl driver"
+	depends on OF
+	depends on ARCH_SPRD || COMPILE_TEST
+	select PINCTRL_SPRD
 	help
 	  Say Y here to enable Spreadtrum SC9860 pinctrl driver
diff --git a/drivers/pinctrl/sprd/pinctrl-sprd.c b/drivers/pinctrl/sprd/pinctrl-sprd.c
index 7b95bf5..48cbf2a 100644
--- a/drivers/pinctrl/sprd/pinctrl-sprd.c
+++ b/drivers/pinctrl/sprd/pinctrl-sprd.c
@@ -41,7 +41,8 @@
 #define PUBCP_SLEEP_MODE		BIT(14)
 #define TGLDSP_SLEEP_MODE		BIT(15)
 #define AGDSP_SLEEP_MODE		BIT(16)
-#define SLEEP_MODE_MASK			GENMASK(3, 0)
+#define CM4_SLEEP_MODE			BIT(17)
+#define SLEEP_MODE_MASK			GENMASK(5, 0)
 #define SLEEP_MODE_SHIFT		13
 
 #define SLEEP_INPUT			BIT(1)
@@ -81,6 +82,7 @@ enum pin_sleep_mode {
 	PUBCP_SLEEP = BIT(1),
 	TGLDSP_SLEEP = BIT(2),
 	AGDSP_SLEEP = BIT(3),
+	CM4_SLEEP = BIT(4),
 };
 
 enum pin_func_sel {
@@ -462,9 +464,15 @@ static int sprd_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin_id,
 		case PIN_CONFIG_INPUT_ENABLE:
 			arg = (reg >> SLEEP_INPUT_SHIFT) & SLEEP_INPUT_MASK;
 			break;
-		case PIN_CONFIG_OUTPUT:
+		case PIN_CONFIG_OUTPUT_ENABLE:
 			arg = reg & SLEEP_OUTPUT_MASK;
 			break;
+		case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
+			if ((reg & SLEEP_OUTPUT) || (reg & SLEEP_INPUT))
+				return -EINVAL;
+
+			arg = 1;
+			break;
 		case PIN_CONFIG_DRIVE_STRENGTH:
 			arg = (reg >> DRIVE_STRENGTH_SHIFT) &
 				DRIVE_STRENGTH_MASK;
@@ -484,6 +492,13 @@ static int sprd_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin_id,
 			       SLEEP_PULL_UP_MASK) << 16;
 			arg |= (reg >> PULL_UP_SHIFT) & PULL_UP_MASK;
 			break;
+		case PIN_CONFIG_BIAS_DISABLE:
+			if ((reg & (SLEEP_PULL_DOWN | SLEEP_PULL_UP)) ||
+			    (reg & (PULL_DOWN | PULL_UP_4_7K | PULL_UP_20K)))
+				return -EINVAL;
+
+			arg = 1;
+			break;
 		case PIN_CONFIG_SLEEP_HARDWARE_STATE:
 			arg = 0;
 			break;
@@ -609,6 +624,8 @@ static int sprd_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin_id,
 					val |= TGLDSP_SLEEP_MODE;
 				if (arg & AGDSP_SLEEP)
 					val |= AGDSP_SLEEP_MODE;
+				if (arg & CM4_SLEEP)
+					val |= CM4_SLEEP_MODE;
 
 				mask = SLEEP_MODE_MASK;
 				shift = SLEEP_MODE_SHIFT;
@@ -624,13 +641,23 @@ static int sprd_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin_id,
 					shift = SLEEP_INPUT_SHIFT;
 				}
 				break;
-			case PIN_CONFIG_OUTPUT:
+			case PIN_CONFIG_OUTPUT_ENABLE:
 				if (is_sleep_config == true) {
-					val |= SLEEP_OUTPUT;
+					if (arg > 0)
+						val |= SLEEP_OUTPUT;
+					else
+						val &= ~SLEEP_OUTPUT;
+
 					mask = SLEEP_OUTPUT_MASK;
 					shift = SLEEP_OUTPUT_SHIFT;
 				}
 				break;
+			case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
+				if (is_sleep_config == true) {
+					val = shift = 0;
+					mask = SLEEP_OUTPUT | SLEEP_INPUT;
+				}
+				break;
 			case PIN_CONFIG_DRIVE_STRENGTH:
 				if (arg < 2 || arg > 60)
 					return -EINVAL;
@@ -674,6 +701,16 @@ static int sprd_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin_id,
 					shift = PULL_UP_SHIFT;
 				}
 				break;
+			case PIN_CONFIG_BIAS_DISABLE:
+				if (is_sleep_config == true) {
+					val = shift = 0;
+					mask = SLEEP_PULL_DOWN | SLEEP_PULL_UP;
+				} else {
+					val = shift = 0;
+					mask = PULL_DOWN | PULL_UP_20K |
+						PULL_UP_4_7K;
+				}
+				break;
 			case PIN_CONFIG_SLEEP_HARDWARE_STATE:
 				continue;
 			default:
@@ -1069,6 +1106,7 @@ int sprd_pinctrl_core_probe(struct platform_device *pdev,
 
 	return 0;
 }
+EXPORT_SYMBOL_GPL(sprd_pinctrl_core_probe);
 
 int sprd_pinctrl_remove(struct platform_device *pdev)
 {
@@ -1077,6 +1115,7 @@ int sprd_pinctrl_remove(struct platform_device *pdev)
 	pinctrl_unregister(sprd_pctl->pctl);
 	return 0;
 }
+EXPORT_SYMBOL_GPL(sprd_pinctrl_remove);
 
 void sprd_pinctrl_shutdown(struct platform_device *pdev)
 {
@@ -1091,6 +1130,7 @@ void sprd_pinctrl_shutdown(struct platform_device *pdev)
 		return;
 	pinctrl_select_state(pinctl, state);
 }
+EXPORT_SYMBOL_GPL(sprd_pinctrl_shutdown);
 
 MODULE_DESCRIPTION("SPREADTRUM Pin Controller Driver");
 MODULE_AUTHOR("Baolin Wang <baolin.wang@spreadtrum.com>");
diff --git a/drivers/pinctrl/sunxi/Kconfig b/drivers/pinctrl/sunxi/Kconfig
index f7aae20..5932935 100644
--- a/drivers/pinctrl/sunxi/Kconfig
+++ b/drivers/pinctrl/sunxi/Kconfig
@@ -94,6 +94,16 @@
 	default ARM64 && ARCH_SUNXI
 	select PINCTRL_SUNXI
 
+config PINCTRL_SUN50I_A100
+	bool "Support for the Allwinner A100 PIO"
+	default ARM64 && ARCH_SUNXI
+	select PINCTRL_SUNXI
+
+config PINCTRL_SUN50I_A100_R
+	bool "Support for the Allwinner A100 R-PIO"
+	default ARM64 && ARCH_SUNXI
+	select PINCTRL_SUNXI
+
 config PINCTRL_SUN50I_H5
 	bool "Support for the Allwinner H5 PIO"
 	default ARM64 && ARCH_SUNXI
diff --git a/drivers/pinctrl/sunxi/Makefile b/drivers/pinctrl/sunxi/Makefile
index fafcdae..8b7ff0d 100644
--- a/drivers/pinctrl/sunxi/Makefile
+++ b/drivers/pinctrl/sunxi/Makefile
@@ -13,6 +13,8 @@
 obj-$(CONFIG_PINCTRL_SUN8I_A33)		+= pinctrl-sun8i-a33.o
 obj-$(CONFIG_PINCTRL_SUN50I_A64)	+= pinctrl-sun50i-a64.o
 obj-$(CONFIG_PINCTRL_SUN50I_A64_R)	+= pinctrl-sun50i-a64-r.o
+obj-$(CONFIG_PINCTRL_SUN50I_A100)	+= pinctrl-sun50i-a100.o
+obj-$(CONFIG_PINCTRL_SUN50I_A100_R)	+= pinctrl-sun50i-a100-r.o
 obj-$(CONFIG_PINCTRL_SUN8I_A83T)	+= pinctrl-sun8i-a83t.o
 obj-$(CONFIG_PINCTRL_SUN8I_A83T_R)	+= pinctrl-sun8i-a83t-r.o
 obj-$(CONFIG_PINCTRL_SUN8I_H3)		+= pinctrl-sun8i-h3.o
diff --git a/drivers/pinctrl/sunxi/pinctrl-sun50i-a100-r.c b/drivers/pinctrl/sunxi/pinctrl-sun50i-a100-r.c
new file mode 100644
index 0000000..21054fc
--- /dev/null
+++ b/drivers/pinctrl/sunxi/pinctrl-sun50i-a100-r.c
@@ -0,0 +1,105 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ *
+ * Based on:
+ * huangshuosheng <huangshuosheng@allwinnertech.com>
+ */
+
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
+#include <linux/pinctrl/pinctrl.h>
+#include <linux/platform_device.h>
+
+#include "pinctrl-sunxi.h"
+
+static const struct sunxi_desc_pin a100_r_pins[] = {
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 0),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_i2c0"),	/* SCK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 0)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 1),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_i2c0"),	/* SDA */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 1)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 2),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_uart0"),	/* TX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 2)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 3),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_uart0"),	/* RX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 3)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 4),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_jtag"),	/* MS */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 4)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 5),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_jtag"),	/* CK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 5)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 6),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_jtag"),	/* DO */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 6)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 7),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_jtag"),	/* DI */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 7)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 8),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_i2c1"),	/* SCK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 8)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 9),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_i2c1"),	/* SDA */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 9)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 10),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_pwm"),
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 10)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 11),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "s_cir"),		/* IN */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 11)),
+};
+
+static const struct sunxi_pinctrl_desc a100_r_pinctrl_data = {
+	.pins = a100_r_pins,
+	.npins = ARRAY_SIZE(a100_r_pins),
+	.pin_base = PL_BASE,
+	.irq_banks = 1,
+};
+
+static int a100_r_pinctrl_probe(struct platform_device *pdev)
+{
+	return sunxi_pinctrl_init(pdev, &a100_r_pinctrl_data);
+}
+
+static const struct of_device_id a100_r_pinctrl_match[] = {
+	{ .compatible = "allwinner,sun50i-a100-r-pinctrl", },
+	{}
+};
+MODULE_DEVICE_TABLE(of, a100_r_pinctrl_match);
+
+static struct platform_driver a100_r_pinctrl_driver = {
+	.probe	= a100_r_pinctrl_probe,
+	.driver	= {
+		.name		= "sun50iw10p1-r-pinctrl",
+		.of_match_table	= a100_r_pinctrl_match,
+	},
+};
+module_platform_driver(a100_r_pinctrl_driver);
diff --git a/drivers/pinctrl/sunxi/pinctrl-sun50i-a100.c b/drivers/pinctrl/sunxi/pinctrl-sun50i-a100.c
new file mode 100644
index 0000000..19cfd1e
--- /dev/null
+++ b/drivers/pinctrl/sunxi/pinctrl-sun50i-a100.c
@@ -0,0 +1,708 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ *
+ * Based on:
+ * huangshuosheng <huangshuosheng@allwinnertech.com>
+ */
+
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
+#include <linux/pinctrl/pinctrl.h>
+#include <linux/platform_device.h>
+
+#include "pinctrl-sunxi.h"
+
+static const struct sunxi_desc_pin a100_pins[] = {
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 0),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart2"),		/* TX */
+		  SUNXI_FUNCTION(0x3, "spi2"),		/* CS */
+		  SUNXI_FUNCTION(0x4, "jtag"),		/* MS */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 0)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 1),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart2"),		/* RX */
+		  SUNXI_FUNCTION(0x3, "spi2"),		/* CLK */
+		  SUNXI_FUNCTION(0x4, "jtag"),		/* CK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 1)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 2),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart2"),		/* RTS */
+		  SUNXI_FUNCTION(0x3, "spi2"),		/* MOSI */
+		  SUNXI_FUNCTION(0x4, "jtag"),		/* DO */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 2)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 3),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart2"),		/* CTS */
+		  SUNXI_FUNCTION(0x3, "spi2"),		/* MISO */
+		  SUNXI_FUNCTION(0x4, "jtag"),		/* DI */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 3)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 4),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c1"),		/* SCK */
+		  SUNXI_FUNCTION(0x3, "i2s0"),		/* MCLK */
+		  SUNXI_FUNCTION(0x4, "jtag_gpu"),	/* MS_GPU */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 4)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 5),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c1"),		/* SDA */
+		  SUNXI_FUNCTION(0x3, "i2s0"),		/* BCLK */
+		  SUNXI_FUNCTION(0x4, "jtag_gpu"),	/* CK_GPU */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 5)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 6),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "i2s0"),		/* LRCK */
+		  SUNXI_FUNCTION(0x4, "jtag_gpu"),	/* DO_GPU */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 6)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 7),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "spdif"),		/* DIN */
+		  SUNXI_FUNCTION(0x3, "i2s0_dout0"),	/* DOUT0 */
+		  SUNXI_FUNCTION(0x4, "i2s0_din1"),	/* DIN1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 7)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 8),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "spdif"),		/* DOUT */
+		  SUNXI_FUNCTION(0x3, "i2s0_din0"),	/* DIN0 */
+		  SUNXI_FUNCTION(0x4, "i2s0_dout1"),	/* DOUT1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 8)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 9),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart0"),		/* TX */
+		  SUNXI_FUNCTION(0x3, "i2c0"),		/* SCK */
+		  SUNXI_FUNCTION(0x4, "jtag_gpu"),	/* DI_GPU */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 9)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 10),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart0"),		/* RX */
+		  SUNXI_FUNCTION(0x3, "i2c0"),		/* SDA */
+		  SUNXI_FUNCTION(0x4, "pwm1"),
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 10)),
+	/* HOLE */
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* WE */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* DS */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 0)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 1),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* ALE */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* RST */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 1)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 2),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* CLE */
+		  SUNXI_FUNCTION(0x4, "spi0"),		/* MOSI */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 2)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 3),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* CE1 */
+		  SUNXI_FUNCTION(0x4, "spi0"),		/* CS0 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 3)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 4),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* CE0 */
+		  SUNXI_FUNCTION(0x4, "spi0"),		/* MISO */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 4)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 5),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* RE */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* CLK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 5)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 6),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* RB0 */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* CMD */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 6)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 7),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* RB1 */
+		  SUNXI_FUNCTION(0x4, "spi0"),		/* CS1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 7)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 8),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ7 */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* D3 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 8)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 9),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ6 */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* D4 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 9)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 10),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ5 */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* D0 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 10)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 11),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ4 */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* D5 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 11)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 12),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQS */
+		  SUNXI_FUNCTION(0x4, "spi0"),		/* CLK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 12)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 13),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ3 */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* D1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 13)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 14),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ2 */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* D6 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 14)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 15),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ1 */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* D2 */
+		  SUNXI_FUNCTION(0x4, "spi0"),		/* WP */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 15)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 16),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ0 */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* D7 */
+		  SUNXI_FUNCTION(0x4, "spi0"),		/* HOLD */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 16)),
+	/* HOLE */
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 0),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D2 */
+		  SUNXI_FUNCTION(0x3, "lvds0"),		/* D0P */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* DP0 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 0)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 1),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D3 */
+		  SUNXI_FUNCTION(0x3, "lvds0"),		/* D0N */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* DM0 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 1)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 2),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D4 */
+		  SUNXI_FUNCTION(0x3, "lvds0"),		/* D1P */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* DP1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 2)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 3),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D5 */
+		  SUNXI_FUNCTION(0x3, "lvds0"),		/* D1N */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* DM1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 3)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 4),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D6 */
+		  SUNXI_FUNCTION(0x3, "lvds0"),		/* D2P */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* CKP */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 4)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 5),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D7 */
+		  SUNXI_FUNCTION(0x3, "lvds0"),		/* D2N */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* CKM */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 5)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 6),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D10 */
+		  SUNXI_FUNCTION(0x3, "lvds0"),		/* CKP */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* DP2 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 6)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 7),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D11 */
+		  SUNXI_FUNCTION(0x3, "lvds0"),		/* CKN */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* DM2 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 7)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 8),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D12 */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* DP3 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 8)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 9),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D13 */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* DM3 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 9)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 10),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D14 */
+		  SUNXI_FUNCTION(0x4, "spi1"),		/* CS */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 10)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 11),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D15 */
+		  SUNXI_FUNCTION(0x4, "spi1"),		/* CLK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 11)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 12),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D18 */
+		  SUNXI_FUNCTION(0x4, "spi1"),		/* MOSI */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 12)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 13),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D19 */
+		  SUNXI_FUNCTION(0x4, "spi1"),		/* MISO */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 13)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 14),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D20 */
+		  SUNXI_FUNCTION(0x4, "uart3"),		/* TX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 14)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D21 */
+		  SUNXI_FUNCTION(0x4, "uart3"),		/* RX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 15)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 16),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D22 */
+		  SUNXI_FUNCTION(0x4, "uart3"),		/* RTS */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 16)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 17),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D23 */
+		  SUNXI_FUNCTION(0x4, "uart3"),		/* CTS */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 17)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 18),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* CLK */
+		  SUNXI_FUNCTION(0x4, "uart4"),		/* TX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 18)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 19),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* DE */
+		  SUNXI_FUNCTION(0x4, "uart4"),		/* RX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 19)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 20),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* HSYNC */
+		  SUNXI_FUNCTION(0x3, "pwm2"),
+		  SUNXI_FUNCTION(0x4, "uart4"),		/* RTS */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 20)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 21),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* VSYNC */
+		  SUNXI_FUNCTION(0x3, "pwm3"),
+		  SUNXI_FUNCTION(0x4, "uart4"),		/* CTS */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 21)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 22),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "pwm1"),
+		  SUNXI_FUNCTION(0x4, "i2c0"),		/* SCK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 22)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 23),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "pwm0"),
+		  SUNXI_FUNCTION(0x4, "i2c0"),		/* SDA */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 23)),
+	/* HOLE */
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 0),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "csi"),		/* MCLK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 0)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 1),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c2"),		/* SCK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 1)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 2),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c2"),		/* SDA */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 2)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 3),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c3"),		/* SCK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 3)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 4),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c3"),		/* SDA */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 4)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 5),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "csi"),		/* MCLK */
+		  SUNXI_FUNCTION(0x3, "pll"),		/* LOCK_DBG */
+		  SUNXI_FUNCTION(0x4, "i2s2"),		/* MCLK */
+		  SUNXI_FUNCTION(0x5, "ledc"),		/* LEDC */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 5)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 6),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "bist0"),		/* RESULT0 */
+		  SUNXI_FUNCTION(0x4, "i2s2"),		/* BCLK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 6)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 7),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "csi"),		/* SM_VS */
+		  SUNXI_FUNCTION(0x3, "bist0"),		/* RESULT1 */
+		  SUNXI_FUNCTION(0x4, "i2s2"),		/* LRCK */
+		  SUNXI_FUNCTION(0x5, "tcon0"),		/* TRIG */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3,	7)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 8),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "bist0"),		/* RESULT2 */
+		  SUNXI_FUNCTION(0x4, "i2s2"),		/* DOUT0 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 8)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 9),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "bist0"),		/* RESULT3 */
+		  SUNXI_FUNCTION(0x4, "i2s2"),		/* DIN0 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 9)),
+	/* HOLE */
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 0),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D1 */
+		  SUNXI_FUNCTION(0x3, "jtag"),		/* MS1 */
+		  SUNXI_FUNCTION(0x4, "jtag_gpu"),	/* MS_GPU */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 0)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 1),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D0 */
+		  SUNXI_FUNCTION(0x3, "jtag"),		/* DI1 */
+		  SUNXI_FUNCTION(0x4, "jtag_gpu"),	/* DI_GPU */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 1)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 2),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc0"),		/* CLK */
+		  SUNXI_FUNCTION(0x3, "uart0"),		/* TX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 2)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 3),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc0"),		/* CMD */
+		  SUNXI_FUNCTION(0x3, "jtag"),		/* DO */
+		  SUNXI_FUNCTION(0x4, "jtag_gpu"),	/* DO_GPU */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 3)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 4),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D3 */
+		  SUNXI_FUNCTION(0x3, "uart0"),		/* RX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 4)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D2 */
+		  SUNXI_FUNCTION(0x3, "jtag"),		/* CK */
+		  SUNXI_FUNCTION(0x4, "jtag_gpu"),	/* CK_GPU */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 5)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 6),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 6)),
+	/* HOLE */
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 0),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc1"),		/* CLK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 0)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 1),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc1"),		/* CMD */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 1)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 2),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D0 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 2)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 3),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 3)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 4),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D2 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 4)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 5),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D3 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 5)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 6),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart1"),		/* TX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 6)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 7),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart1"),		/* RX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 7)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 8),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart1"),		/* RTS */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 8)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 9),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart1"),		/* CTS */
+		  SUNXI_FUNCTION(0x3, "i2s1"),		/* MCLK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 9)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 10),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "i2s1"),		/* BCLK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 10)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 11),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "i2s1"),		/* LRCK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 11)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 12),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "i2s1_dout0"),	/* DOUT0 */
+		  SUNXI_FUNCTION(0x4, "i2s1_din1"),	/* DIN1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 12)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 13),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "i2s1_din0"),	/* DIN0 */
+		  SUNXI_FUNCTION(0x4, "i2s1_dout1"),	/* DOUT1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 13)),
+	/* HOLE */
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 0),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c0"),		/* SCK */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* RXD1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 0)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 1),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c0"),		/* SDA */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* RXD0 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 1)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 2),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c1"),		/* SCK */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* RXCTL */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 2)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 3),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c1"),		/* SDA */
+		  SUNXI_FUNCTION(0x3, "cir0"),		/* OUT */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* CLKIN */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 3)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 4),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart3"),		/* TX */
+		  SUNXI_FUNCTION(0x3, "spi1"),		/* CS */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* TXD1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 4)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 5),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart3"),		/* RX */
+		  SUNXI_FUNCTION(0x3, "spi1"),		/* CLK */
+		  SUNXI_FUNCTION(0x4, "ledc"),
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* TXD0 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 5)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 6),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart3"),		/* RTS */
+		  SUNXI_FUNCTION(0x3, "spi1"),		/* MOSI */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* TXCK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 6)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 7),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart3"),		/* CTS */
+		  SUNXI_FUNCTION(0x3, "spi1"),		/* MISO */
+		  SUNXI_FUNCTION(0x4, "spdif"),		/* OUT */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* TXCTL */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 7)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 8),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "dmic"),		/* CLK */
+		  SUNXI_FUNCTION(0x3, "spi2"),		/* CS */
+		  SUNXI_FUNCTION(0x4, "i2s2"),		/* MCLK */
+		  SUNXI_FUNCTION(0x5, "i2s2_din2"),	/* DIN2 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 8)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 9),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "dmic"),		/* DATA0 */
+		  SUNXI_FUNCTION(0x3, "spi2"),		/* CLK */
+		  SUNXI_FUNCTION(0x4, "i2s2"),		/* BCLK */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* MDC */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 9)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 10),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "dmic"),		/* DATA1 */
+		  SUNXI_FUNCTION(0x3, "spi2"),		/* MOSI */
+		  SUNXI_FUNCTION(0x4, "i2s2"),		/* LRCK */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* MDIO */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 10)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 11),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "dmic"),		/* DATA2 */
+		  SUNXI_FUNCTION(0x3, "spi2"),		/* MISO */
+		  SUNXI_FUNCTION(0x4, "i2s2_dout0"),	/* DOUT0 */
+		  SUNXI_FUNCTION(0x5, "i2s2_din1"),	/* DIN1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 11)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 12),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "dmic"),		/* DATA3 */
+		  SUNXI_FUNCTION(0x3, "i2c3"),		/* SCK */
+		  SUNXI_FUNCTION(0x4, "i2s2_din0"),	/* DIN0 */
+		  SUNXI_FUNCTION(0x5, "i2s2_dout1"),	/* DOUT1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 12)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 13),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "i2c3"),		/* SCK */
+		  SUNXI_FUNCTION(0x4, "i2s3"),		/* MCLK */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* EPHY */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 13)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 14),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x4, "i2s3"),		/* BCLK */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* RXD3 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 14)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 15),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x4, "i2s3"),		/* LRCK */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* RXD2 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 15)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 16),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "i2s3_dout0"),	/* DOUT0 */
+		  SUNXI_FUNCTION(0x4, "i2s3_din1"),	/* DIN1 */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* RXCK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 16)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 17),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "i2s3_dout1"),	/* DOUT1 */
+		  SUNXI_FUNCTION(0x4, "i2s3_din0"),	/* DIN0 */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* TXD3 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 17)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 18),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "cir0"),		/* OUT */
+		  SUNXI_FUNCTION(0x3, "i2s3_dout2"),	/* DOUT2 */
+		  SUNXI_FUNCTION(0x4, "i2s3_din2"),	/* DIN2 */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* TXD2 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 18)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 19),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "cir0"),		/* IN */
+		  SUNXI_FUNCTION(0x3, "i2s3_dout3"),	/* DOUT3 */
+		  SUNXI_FUNCTION(0x4, "i2s3_din3"),	/* DIN3 */
+		  SUNXI_FUNCTION(0x5, "ledc"),
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 19)),
+};
+
+static const unsigned int a100_irq_bank_map[] = { 0, 1, 2, 3, 4, 5, 6};
+
+static const struct sunxi_pinctrl_desc a100_pinctrl_data = {
+	.pins = a100_pins,
+	.npins = ARRAY_SIZE(a100_pins),
+	.irq_banks = 7,
+	.irq_bank_map = a100_irq_bank_map,
+	.io_bias_cfg_variant = BIAS_VOLTAGE_PIO_POW_MODE_SEL,
+};
+
+static int a100_pinctrl_probe(struct platform_device *pdev)
+{
+	return sunxi_pinctrl_init(pdev, &a100_pinctrl_data);
+}
+
+static const struct of_device_id a100_pinctrl_match[] = {
+	{ .compatible = "allwinner,sun50i-a100-pinctrl", },
+	{}
+};
+MODULE_DEVICE_TABLE(of, a100_pinctrl_match);
+
+static struct platform_driver a100_pinctrl_driver = {
+	.probe	= a100_pinctrl_probe,
+	.driver	= {
+		.name		= "sun50i-a100-pinctrl",
+		.of_match_table	= a100_pinctrl_match,
+	},
+};
+module_platform_driver(a100_pinctrl_driver);
diff --git a/drivers/power/reset/Kconfig b/drivers/power/reset/Kconfig
index a564237..f58f303 100644
--- a/drivers/power/reset/Kconfig
+++ b/drivers/power/reset/Kconfig
@@ -94,7 +94,7 @@
 	  create a binding in your devicetree.
 
 config POWER_RESET_HISI
-	bool "Hisilicon power-off driver"
+	tristate "Hisilicon power-off driver"
 	depends on ARCH_HISI
 	help
 	  Reboot support for Hisilicon boards.
@@ -238,7 +238,7 @@
 	  action according to the mode.
 
 config POWER_RESET_SC27XX
-	bool "Spreadtrum SC27xx PMIC power-off driver"
+	tristate "Spreadtrum SC27xx PMIC power-off driver"
 	depends on MFD_SC27XX_PMIC || COMPILE_TEST
 	help
 	  This driver supports powering off a system through
diff --git a/drivers/power/reset/hisi-reboot.c b/drivers/power/reset/hisi-reboot.c
index 0ba5fdc..283afb5 100644
--- a/drivers/power/reset/hisi-reboot.c
+++ b/drivers/power/reset/hisi-reboot.c
@@ -8,26 +8,64 @@
  * Author: Haojian Zhuang <haojian.zhuang@linaro.org>
  */
 
+#include <linux/bitops.h>
 #include <linux/delay.h>
 #include <linux/io.h>
 #include <linux/module.h>
+#include <linux/mfd/syscon.h>
 #include <linux/notifier.h>
 #include <linux/of_address.h>
 #include <linux/platform_device.h>
 #include <linux/reboot.h>
+#include <linux/regmap.h>
+#include <asm/system_misc.h>
 
 #include <asm/proc-fns.h>
 
 static void __iomem *base;
 static u32 reboot_offset;
+static struct regmap *pmu_regmap;
+static struct regmap *sctrl_regmap;
+
+#define REBOOT_REASON_BOOTLOADER (0x01)
+#define REBOOT_REASON_COLDBOOT   (0x00)
+#define DDR_BYPASS               BIT(31)
+
+#define RST_FLAG_MASK            GENMASK(7, 0)
+
+#define PMU_HRST_OFFSET		((0x101) << 2)
+#define SCPEREN1_OFFSET		(0x170)
 
 static int hisi_restart_handler(struct notifier_block *this,
 				unsigned long mode, void *cmd)
 {
-	writel_relaxed(0xdeadbeef, base + reboot_offset);
+	int ret;
+	char reboot_reason;
+
+	if (!cmd || !strcmp(cmd, "bootloader"))
+		reboot_reason = REBOOT_REASON_BOOTLOADER;
+	else
+		reboot_reason = REBOOT_REASON_COLDBOOT;
+
+	if (base) {
+		writel_relaxed(0xdeadbeef, base + reboot_offset);
+	} else {
+		ret = regmap_update_bits(pmu_regmap, PMU_HRST_OFFSET,
+					 RST_FLAG_MASK, reboot_reason);
+		if (ret)
+			return ret;
+
+		ret = regmap_write(sctrl_regmap, SCPEREN1_OFFSET, DDR_BYPASS);
+		if (ret)
+			return ret;
+
+		ret = regmap_write(sctrl_regmap, reboot_offset, 0xdeadbeef);
+		if (ret)
+			return ret;
+	}
 
 	while (1)
-		cpu_do_idle();
+		mdelay(1);
 
 	return NOTIFY_DONE;
 }
@@ -44,8 +82,17 @@ static int hisi_reboot_probe(struct platform_device *pdev)
 
 	base = of_iomap(np, 0);
 	if (!base) {
-		WARN(1, "failed to map base address");
-		return -ENODEV;
+		pmu_regmap = syscon_regmap_lookup_by_phandle(np, "pmu-regmap");
+		if (!pmu_regmap) {
+			WARN(1, "failed to regmap pmu address");
+			return -ENODEV;
+		}
+
+		sctrl_regmap = syscon_regmap_lookup_by_phandle(np, "sctrl-regmap");
+		if (!sctrl_regmap) {
+			WARN(1, "failed to regmap sctrl address");
+			return -ENODEV;
+		}
 	}
 
 	if (of_property_read_u32(np, "reboot-offset", &reboot_offset) < 0) {
@@ -66,6 +113,7 @@ static int hisi_reboot_probe(struct platform_device *pdev)
 
 static const struct of_device_id hisi_reboot_of_match[] = {
 	{ .compatible = "hisilicon,sysctrl" },
+	{ .compatible = "hisilicon,hi3660-reboot" },
 	{}
 };
 
@@ -77,3 +125,6 @@ static struct platform_driver hisi_reboot_driver = {
 	},
 };
 module_platform_driver(hisi_reboot_driver);
+
+MODULE_DESCRIPTION("Reset driver for HiSi SoCs");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/power/reset/sc27xx-poweroff.c b/drivers/power/reset/sc27xx-poweroff.c
index 29fb08b..6986307 100644
--- a/drivers/power/reset/sc27xx-poweroff.c
+++ b/drivers/power/reset/sc27xx-poweroff.c
@@ -6,6 +6,7 @@
 
 #include <linux/cpu.h>
 #include <linux/kernel.h>
+#include <linux/module.h>
 #include <linux/platform_device.h>
 #include <linux/pm.h>
 #include <linux/regmap.h>
@@ -13,6 +14,8 @@
 
 #define SC27XX_PWR_PD_HW	0xc2c
 #define SC27XX_PWR_OFF_EN	BIT(0)
+#define SC27XX_SLP_CTRL		0xdf0
+#define SC27XX_LDO_XTL_EN	BIT(3)
 
 static struct regmap *regmap;
 
@@ -27,10 +30,13 @@ static struct regmap *regmap;
  */
 static void sc27xx_poweroff_shutdown(void)
 {
-#ifdef CONFIG_PM_SLEEP_SMP
-	int cpu = smp_processor_id();
+#ifdef CONFIG_HOTPLUG_CPU
+	int cpu;
 
-	freeze_secondary_cpus(cpu);
+	for_each_online_cpu(cpu) {
+		if (cpu != smp_processor_id())
+			cpu_down(cpu);
+	}
 #endif
 }
 
@@ -40,6 +46,9 @@ static struct syscore_ops poweroff_syscore_ops = {
 
 static void sc27xx_poweroff_do_poweroff(void)
 {
+	/* Disable the external subsys connection's power firstly */
+	regmap_write(regmap, SC27XX_SLP_CTRL, SC27XX_LDO_XTL_EN);
+
 	regmap_write(regmap, SC27XX_PWR_PD_HW, SC27XX_PWR_OFF_EN);
 }
 
@@ -63,4 +72,8 @@ static struct platform_driver sc27xx_poweroff_driver = {
 		.name = "sc27xx-poweroff",
 	},
 };
-builtin_platform_driver(sc27xx_poweroff_driver);
+module_platform_driver(sc27xx_poweroff_driver);
+
+MODULE_DESCRIPTION("Power off driver for SC27XX PMIC Device");
+MODULE_AUTHOR("Baolin Wang <baolin.wang@unisoc.com>");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/power/supply/Kconfig b/drivers/power/supply/Kconfig
index d6fdc10..dff0a9f 100644
--- a/drivers/power/supply/Kconfig
+++ b/drivers/power/supply/Kconfig
@@ -480,7 +480,7 @@
 	  called gpio-charger.
 
 config CHARGER_MANAGER
-	bool "Battery charger manager for multiple chargers"
+	tristate "Battery charger manager for multiple chargers"
 	depends on REGULATOR
 	select EXTCON
 	help
diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c
index 5c36c43..b9b0ff7 100644
--- a/drivers/power/supply/power_supply_core.c
+++ b/drivers/power/supply/power_supply_core.c
@@ -32,6 +32,13 @@ EXPORT_SYMBOL_GPL(power_supply_notifier);
 
 static struct device_type power_supply_dev_type;
 
+struct match_device_node_array_param {
+	struct device_node *parent_of_node;
+	struct power_supply **psy;
+	ssize_t psy_size;
+	ssize_t psy_count;
+};
+
 #define POWER_SUPPLY_DEFERRED_REGISTER_TIME	msecs_to_jiffies(10)
 
 static bool __power_supply_is_supplied_by(struct power_supply *supplier,
@@ -522,6 +529,77 @@ struct power_supply *power_supply_get_by_phandle(struct device_node *np,
 }
 EXPORT_SYMBOL_GPL(power_supply_get_by_phandle);
 
+static int power_supply_match_device_node_array(struct device *dev,
+						void *data)
+{
+	struct match_device_node_array_param *param =
+		(struct match_device_node_array_param *)data;
+	struct power_supply **psy = param->psy;
+	ssize_t size = param->psy_size;
+	ssize_t *count = &param->psy_count;
+
+	if (!dev->parent || dev->parent->of_node != param->parent_of_node)
+		return 0;
+
+	if (*count >= size)
+		return -EOVERFLOW;
+
+	psy[*count] = dev_get_drvdata(dev);
+	atomic_inc(&psy[*count]->use_cnt);
+	(*count)++;
+
+	return 0;
+}
+
+/**
+ * power_supply_get_by_phandle_array() - Similar to
+ * power_supply_get_by_phandle but returns an array of power supply
+ * objects which are associated with the phandle.
+ * @np: Pointer to device node holding phandle property.
+ * @property: Name of property holding a power supply name.
+ * @psy: Array of power_supply pointers provided by the client which is
+ * filled by power_supply_get_by_phandle_array.
+ * @size: size of power_supply pointer array.
+ *
+ * If power supply was found, it increases reference count for the
+ * internal power supply's device. The user should power_supply_put()
+ * after usage.
+ *
+ * Return: On success returns the number of power supply objects filled
+ * in the @psy array.
+ * -EOVERFLOW when size of @psy array is not suffice.
+ * -EINVAL when @psy is NULL or @size is 0.
+ * -ENODEV when matching device_node is not found.
+ */
+int power_supply_get_by_phandle_array(struct device_node *np,
+				      const char *property,
+				      struct power_supply **psy,
+				      ssize_t size)
+{
+	struct device_node *power_supply_np;
+	int ret;
+	struct match_device_node_array_param param;
+
+	if (!psy || !size)
+		return -EINVAL;
+
+	power_supply_np = of_parse_phandle(np, property, 0);
+	if (!power_supply_np)
+		return -ENODEV;
+
+	param.parent_of_node = power_supply_np;
+	param.psy = psy;
+	param.psy_size = size;
+	param.psy_count = 0;
+	ret = class_for_each_device(power_supply_class, NULL, &param,
+				    power_supply_match_device_node_array);
+
+	of_node_put(power_supply_np);
+
+	return param.psy_count;
+}
+EXPORT_SYMBOL_GPL(power_supply_get_by_phandle_array);
+
 static void devm_power_supply_put(struct device *dev, void *res)
 {
 	struct power_supply **psy = res;
@@ -565,9 +643,11 @@ EXPORT_SYMBOL_GPL(devm_power_supply_get_by_phandle);
 int power_supply_get_battery_info(struct power_supply *psy,
 				  struct power_supply_battery_info *info)
 {
+	struct power_supply_resistance_temp_table *resist_table;
 	struct device_node *battery_np;
 	const char *value;
 	int err, len, index;
+	const __be32 *list;
 
 	info->energy_full_design_uwh         = -EINVAL;
 	info->charge_full_design_uah         = -EINVAL;
@@ -578,6 +658,7 @@ int power_supply_get_battery_info(struct power_supply *psy,
 	info->constant_charge_current_max_ua = -EINVAL;
 	info->constant_charge_voltage_max_uv = -EINVAL;
 	info->factory_internal_resistance_uohm  = -EINVAL;
+	info->resist_table = NULL;
 
 	for (index = 0; index < POWER_SUPPLY_OCV_TEMP_MAX; index++) {
 		info->ocv_table[index]       = NULL;
@@ -644,7 +725,6 @@ int power_supply_get_battery_info(struct power_supply *psy,
 	for (index = 0; index < len; index++) {
 		struct power_supply_battery_ocv_table *table;
 		char *propname;
-		const __be32 *list;
 		int i, tab_len, size;
 
 		propname = kasprintf(GFP_KERNEL, "ocv-capacity-table-%d", index);
@@ -677,6 +757,26 @@ int power_supply_get_battery_info(struct power_supply *psy,
 		}
 	}
 
+	list = of_get_property(battery_np, "resistance-temp-table", &len);
+	if (!list || !len)
+		goto out_put_node;
+
+	info->resist_table_size = len / (2 * sizeof(__be32));
+	resist_table = info->resist_table = devm_kcalloc(&psy->dev,
+							 info->resist_table_size,
+							 sizeof(*resist_table),
+							 GFP_KERNEL);
+	if (!info->resist_table) {
+		power_supply_put_battery_info(psy, info);
+		err = -ENOMEM;
+		goto out_put_node;
+	}
+
+	for (index = 0; index < info->resist_table_size; index++) {
+		resist_table[index].temp = be32_to_cpu(*list++);
+		resist_table[index].resistance = be32_to_cpu(*list++);
+	}
+
 out_put_node:
 	of_node_put(battery_np);
 	return err;
@@ -692,10 +792,53 @@ void power_supply_put_battery_info(struct power_supply *psy,
 		if (info->ocv_table[i])
 			devm_kfree(&psy->dev, info->ocv_table[i]);
 	}
+
+	if (info->resist_table)
+		devm_kfree(&psy->dev, info->resist_table);
 }
 EXPORT_SYMBOL_GPL(power_supply_put_battery_info);
 
 /**
+ * power_supply_temp2resist_simple() - find the battery internal resistance
+ * percent
+ * @table: Pointer to battery resistance temperature table
+ * @table_len: The table length
+ * @ocv: Current temperature
+ *
+ * This helper function is used to look up battery internal resistance percent
+ * according to current temperature value from the resistance temperature table,
+ * and the table must be ordered descending. Then the actual battery internal
+ * resistance = the ideal battery internal resistance * percent / 100.
+ *
+ * Return: the battery internal resistance percent
+ */
+int power_supply_temp2resist_simple(struct power_supply_resistance_temp_table *table,
+				    int table_len, int temp)
+{
+	int i, resist;
+
+	for (i = 0; i < table_len; i++)
+		if (temp > table[i].temp)
+			break;
+
+	if (i > 0 && i < table_len) {
+		int tmp;
+
+		tmp = (table[i - 1].resistance - table[i].resistance) *
+			(temp - table[i].temp);
+		tmp /= table[i - 1].temp - table[i].temp;
+		resist = tmp + table[i].resistance;
+	} else if (i == 0) {
+		resist = table[0].resistance;
+	} else {
+		resist = table[table_len - 1].resistance;
+	}
+
+	return resist;
+}
+EXPORT_SYMBOL_GPL(power_supply_temp2resist_simple);
+
+/**
  * power_supply_ocv2cap_simple() - find the battery capacity
  * @table: Pointer to battery OCV lookup table
  * @table_len: OCV table length
diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c
index f37ad4e..583a90f 100644
--- a/drivers/power/supply/power_supply_sysfs.c
+++ b/drivers/power/supply/power_supply_sysfs.c
@@ -18,68 +18,216 @@
 
 #include "power_supply.h"
 
-/*
- * This is because the name "current" breaks the device attr macro.
- * The "current" word resolves to "(get_current())" so instead of
- * "current" "(get_current())" appears in the sysfs.
- *
- * The source of this definition is the device.h which calls __ATTR
- * macro in sysfs.h which calls the __stringify macro.
- *
- * Only modification that the name is not tried to be resolved
- * (as a macro let's say).
- */
+#define MAX_PROP_NAME_LEN 30
 
-#define POWER_SUPPLY_ATTR(_name)					\
-{									\
-	.attr = { .name = #_name },					\
-	.show = power_supply_show_property,				\
-	.store = power_supply_store_property,				\
+struct power_supply_attr {
+	const char *prop_name;
+	char attr_name[MAX_PROP_NAME_LEN + 1];
+	struct device_attribute dev_attr;
+	const char * const *text_values;
+	int text_values_len;
+};
+
+#define _POWER_SUPPLY_ATTR(_name, _text, _len)	\
+[POWER_SUPPLY_PROP_ ## _name] =			\
+{						\
+	.prop_name = #_name,			\
+	.attr_name = #_name "\0",		\
+	.text_values = _text,			\
+	.text_values_len = _len,		\
 }
 
-static struct device_attribute power_supply_attrs[];
+#define POWER_SUPPLY_ATTR(_name) _POWER_SUPPLY_ATTR(_name, NULL, 0)
+#define _POWER_SUPPLY_ENUM_ATTR(_name, _text)	\
+	_POWER_SUPPLY_ATTR(_name, _text, ARRAY_SIZE(_text))
+#define POWER_SUPPLY_ENUM_ATTR(_name)	\
+	_POWER_SUPPLY_ENUM_ATTR(_name, POWER_SUPPLY_ ## _name ## _TEXT)
 
-static const char * const power_supply_type_text[] = {
-	"Unknown", "Battery", "UPS", "Mains", "USB",
-	"USB_DCP", "USB_CDP", "USB_ACA", "USB_C",
-	"USB_PD", "USB_PD_DRP", "BrickID"
+static const char * const POWER_SUPPLY_TYPE_TEXT[] = {
+	[POWER_SUPPLY_TYPE_UNKNOWN]		= "Unknown",
+	[POWER_SUPPLY_TYPE_BATTERY]		= "Battery",
+	[POWER_SUPPLY_TYPE_UPS]			= "UPS",
+	[POWER_SUPPLY_TYPE_MAINS]		= "Mains",
+	[POWER_SUPPLY_TYPE_USB]			= "USB",
+	[POWER_SUPPLY_TYPE_USB_DCP]		= "USB_DCP",
+	[POWER_SUPPLY_TYPE_USB_CDP]		= "USB_CDP",
+	[POWER_SUPPLY_TYPE_USB_ACA]		= "USB_ACA",
+	[POWER_SUPPLY_TYPE_USB_TYPE_C]		= "USB_C",
+	[POWER_SUPPLY_TYPE_USB_PD]		= "USB_PD",
+	[POWER_SUPPLY_TYPE_USB_PD_DRP]		= "USB_PD_DRP",
+	[POWER_SUPPLY_TYPE_APPLE_BRICK_ID]	= "BrickID",
+	[POWER_SUPPLY_TYPE_WIRELESS]		= "Wireless",
 };
 
-static const char * const power_supply_usb_type_text[] = {
-	"Unknown", "SDP", "DCP", "CDP", "ACA", "C",
-	"PD", "PD_DRP", "PD_PPS", "BrickID"
+static const char * const POWER_SUPPLY_USB_TYPE_TEXT[] = {
+	[POWER_SUPPLY_USB_TYPE_UNKNOWN]		= "Unknown",
+	[POWER_SUPPLY_USB_TYPE_SDP]		= "SDP",
+	[POWER_SUPPLY_USB_TYPE_DCP]		= "DCP",
+	[POWER_SUPPLY_USB_TYPE_CDP]		= "CDP",
+	[POWER_SUPPLY_USB_TYPE_ACA]		= "ACA",
+	[POWER_SUPPLY_USB_TYPE_C]		= "C",
+	[POWER_SUPPLY_USB_TYPE_PD]		= "PD",
+	[POWER_SUPPLY_USB_TYPE_PD_DRP]		= "PD_DRP",
+	[POWER_SUPPLY_USB_TYPE_PD_PPS]		= "PD_PPS",
+	[POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID]	= "BrickID",
 };
 
-static const char * const power_supply_status_text[] = {
-	"Unknown", "Charging", "Discharging", "Not charging", "Full"
+static const char * const POWER_SUPPLY_STATUS_TEXT[] = {
+	[POWER_SUPPLY_STATUS_UNKNOWN]		= "Unknown",
+	[POWER_SUPPLY_STATUS_CHARGING]		= "Charging",
+	[POWER_SUPPLY_STATUS_DISCHARGING]	= "Discharging",
+	[POWER_SUPPLY_STATUS_NOT_CHARGING]	= "Not charging",
+	[POWER_SUPPLY_STATUS_FULL]		= "Full",
 };
 
-static const char * const power_supply_charge_type_text[] = {
-	"Unknown", "N/A", "Trickle", "Fast", "Standard", "Adaptive", "Custom"
+static const char * const POWER_SUPPLY_CHARGE_TYPE_TEXT[] = {
+	[POWER_SUPPLY_CHARGE_TYPE_UNKNOWN]	= "Unknown",
+	[POWER_SUPPLY_CHARGE_TYPE_NONE]		= "N/A",
+	[POWER_SUPPLY_CHARGE_TYPE_TRICKLE]	= "Trickle",
+	[POWER_SUPPLY_CHARGE_TYPE_FAST]		= "Fast",
+	[POWER_SUPPLY_CHARGE_TYPE_STANDARD]	= "Standard",
+	[POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE]	= "Adaptive",
+	[POWER_SUPPLY_CHARGE_TYPE_CUSTOM]	= "Custom",
+	[POWER_SUPPLY_CHARGE_TYPE_TAPER]        = "Taper",
 };
 
-static const char * const power_supply_health_text[] = {
-	"Unknown", "Good", "Overheat", "Dead", "Over voltage",
-	"Unspecified failure", "Cold", "Watchdog timer expire",
-	"Safety timer expire", "Over current"
+static const char * const POWER_SUPPLY_HEALTH_TEXT[] = {
+	[POWER_SUPPLY_HEALTH_UNKNOWN]		    = "Unknown",
+	[POWER_SUPPLY_HEALTH_GOOD]		    = "Good",
+	[POWER_SUPPLY_HEALTH_OVERHEAT]		    = "Overheat",
+	[POWER_SUPPLY_HEALTH_DEAD]		    = "Dead",
+	[POWER_SUPPLY_HEALTH_OVERVOLTAGE]	    = "Over voltage",
+	[POWER_SUPPLY_HEALTH_UNSPEC_FAILURE]	    = "Unspecified failure",
+	[POWER_SUPPLY_HEALTH_COLD]		    = "Cold",
+	[POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE] = "Watchdog timer expire",
+	[POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE]   = "Safety timer expire",
+	[POWER_SUPPLY_HEALTH_OVERCURRENT]	    = "Over current",
+	[POWER_SUPPLY_HEALTH_CALIBRATION_REQUIRED]  = "Calibration required",
+	[POWER_SUPPLY_HEALTH_WARM]		    = "Warm",
+	[POWER_SUPPLY_HEALTH_COOL]		    = "Cool",
+	[POWER_SUPPLY_HEALTH_HOT]		    = "Hot",
 };
 
-static const char * const power_supply_technology_text[] = {
-	"Unknown", "NiMH", "Li-ion", "Li-poly", "LiFe", "NiCd",
-	"LiMn"
+static const char * const POWER_SUPPLY_TECHNOLOGY_TEXT[] = {
+	[POWER_SUPPLY_TECHNOLOGY_UNKNOWN]	= "Unknown",
+	[POWER_SUPPLY_TECHNOLOGY_NiMH]		= "NiMH",
+	[POWER_SUPPLY_TECHNOLOGY_LION]		= "Li-ion",
+	[POWER_SUPPLY_TECHNOLOGY_LIPO]		= "Li-poly",
+	[POWER_SUPPLY_TECHNOLOGY_LiFe]		= "LiFe",
+	[POWER_SUPPLY_TECHNOLOGY_NiCd]		= "NiCd",
+	[POWER_SUPPLY_TECHNOLOGY_LiMn]		= "LiMn",
 };
 
-static const char * const power_supply_capacity_level_text[] = {
-	"Unknown", "Critical", "Low", "Normal", "High", "Full"
+static const char * const POWER_SUPPLY_CAPACITY_LEVEL_TEXT[] = {
+	[POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN]	= "Unknown",
+	[POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL]	= "Critical",
+	[POWER_SUPPLY_CAPACITY_LEVEL_LOW]	= "Low",
+	[POWER_SUPPLY_CAPACITY_LEVEL_NORMAL]	= "Normal",
+	[POWER_SUPPLY_CAPACITY_LEVEL_HIGH]	= "High",
+	[POWER_SUPPLY_CAPACITY_LEVEL_FULL]	= "Full",
 };
 
-static const char * const power_supply_scope_text[] = {
-	"Unknown", "System", "Device"
+static const char * const POWER_SUPPLY_SCOPE_TEXT[] = {
+	[POWER_SUPPLY_SCOPE_UNKNOWN]	= "Unknown",
+	[POWER_SUPPLY_SCOPE_SYSTEM]	= "System",
+	[POWER_SUPPLY_SCOPE_DEVICE]	= "Device",
 };
 
+static struct power_supply_attr power_supply_attrs[] = {
+	/* Properties of type `int' */
+	POWER_SUPPLY_ENUM_ATTR(STATUS),
+	POWER_SUPPLY_ENUM_ATTR(CHARGE_TYPE),
+	POWER_SUPPLY_ENUM_ATTR(HEALTH),
+	POWER_SUPPLY_ATTR(PRESENT),
+	POWER_SUPPLY_ATTR(ONLINE),
+	POWER_SUPPLY_ATTR(AUTHENTIC),
+	POWER_SUPPLY_ENUM_ATTR(TECHNOLOGY),
+	POWER_SUPPLY_ATTR(CYCLE_COUNT),
+	POWER_SUPPLY_ATTR(VOLTAGE_MAX),
+	POWER_SUPPLY_ATTR(VOLTAGE_MIN),
+	POWER_SUPPLY_ATTR(VOLTAGE_MAX_DESIGN),
+	POWER_SUPPLY_ATTR(VOLTAGE_MIN_DESIGN),
+	POWER_SUPPLY_ATTR(VOLTAGE_NOW),
+	POWER_SUPPLY_ATTR(VOLTAGE_AVG),
+	POWER_SUPPLY_ATTR(VOLTAGE_OCV),
+	POWER_SUPPLY_ATTR(VOLTAGE_BOOT),
+	POWER_SUPPLY_ATTR(CURRENT_MAX),
+	POWER_SUPPLY_ATTR(CURRENT_NOW),
+	POWER_SUPPLY_ATTR(CURRENT_AVG),
+	POWER_SUPPLY_ATTR(CURRENT_BOOT),
+	POWER_SUPPLY_ATTR(POWER_NOW),
+	POWER_SUPPLY_ATTR(POWER_AVG),
+	POWER_SUPPLY_ATTR(CHARGE_FULL_DESIGN),
+	POWER_SUPPLY_ATTR(CHARGE_EMPTY_DESIGN),
+	POWER_SUPPLY_ATTR(CHARGE_FULL),
+	POWER_SUPPLY_ATTR(CHARGE_EMPTY),
+	POWER_SUPPLY_ATTR(CHARGE_NOW),
+	POWER_SUPPLY_ATTR(CHARGE_AVG),
+	POWER_SUPPLY_ATTR(CHARGE_COUNTER),
+	POWER_SUPPLY_ATTR(CONSTANT_CHARGE_CURRENT),
+	POWER_SUPPLY_ATTR(CONSTANT_CHARGE_CURRENT_MAX),
+	POWER_SUPPLY_ATTR(CONSTANT_CHARGE_VOLTAGE),
+	POWER_SUPPLY_ATTR(CONSTANT_CHARGE_VOLTAGE_MAX),
+	POWER_SUPPLY_ATTR(CHARGE_CONTROL_LIMIT),
+	POWER_SUPPLY_ATTR(CHARGE_CONTROL_LIMIT_MAX),
+	POWER_SUPPLY_ATTR(CHARGE_CONTROL_START_THRESHOLD),
+	POWER_SUPPLY_ATTR(CHARGE_CONTROL_END_THRESHOLD),
+	POWER_SUPPLY_ATTR(INPUT_CURRENT_LIMIT),
+	POWER_SUPPLY_ATTR(INPUT_VOLTAGE_LIMIT),
+	POWER_SUPPLY_ATTR(INPUT_POWER_LIMIT),
+	POWER_SUPPLY_ATTR(ENERGY_FULL_DESIGN),
+	POWER_SUPPLY_ATTR(ENERGY_EMPTY_DESIGN),
+	POWER_SUPPLY_ATTR(ENERGY_FULL),
+	POWER_SUPPLY_ATTR(ENERGY_EMPTY),
+	POWER_SUPPLY_ATTR(ENERGY_NOW),
+	POWER_SUPPLY_ATTR(ENERGY_AVG),
+	POWER_SUPPLY_ATTR(CAPACITY),
+	POWER_SUPPLY_ATTR(CAPACITY_ALERT_MIN),
+	POWER_SUPPLY_ATTR(CAPACITY_ALERT_MAX),
+	POWER_SUPPLY_ATTR(CAPACITY_ERROR_MARGIN),
+	POWER_SUPPLY_ENUM_ATTR(CAPACITY_LEVEL),
+	POWER_SUPPLY_ATTR(TEMP),
+	POWER_SUPPLY_ATTR(TEMP_MAX),
+	POWER_SUPPLY_ATTR(TEMP_MIN),
+	POWER_SUPPLY_ATTR(TEMP_ALERT_MIN),
+	POWER_SUPPLY_ATTR(TEMP_ALERT_MAX),
+	POWER_SUPPLY_ATTR(TEMP_AMBIENT),
+	POWER_SUPPLY_ATTR(TEMP_AMBIENT_ALERT_MIN),
+	POWER_SUPPLY_ATTR(TEMP_AMBIENT_ALERT_MAX),
+	POWER_SUPPLY_ATTR(TIME_TO_EMPTY_NOW),
+	POWER_SUPPLY_ATTR(TIME_TO_EMPTY_AVG),
+	POWER_SUPPLY_ATTR(TIME_TO_FULL_NOW),
+	POWER_SUPPLY_ATTR(TIME_TO_FULL_AVG),
+	POWER_SUPPLY_ENUM_ATTR(TYPE),
+	POWER_SUPPLY_ATTR(USB_TYPE),
+	POWER_SUPPLY_ENUM_ATTR(SCOPE),
+	POWER_SUPPLY_ATTR(PRECHARGE_CURRENT),
+	POWER_SUPPLY_ATTR(CHARGE_TERM_CURRENT),
+	POWER_SUPPLY_ATTR(CALIBRATE),
+	POWER_SUPPLY_ATTR(MANUFACTURE_YEAR),
+	POWER_SUPPLY_ATTR(MANUFACTURE_MONTH),
+	POWER_SUPPLY_ATTR(MANUFACTURE_DAY),
+	/* Properties of type `const char *' */
+	POWER_SUPPLY_ATTR(MODEL_NAME),
+	POWER_SUPPLY_ATTR(MANUFACTURER),
+	POWER_SUPPLY_ATTR(SERIAL_NUMBER),
+};
+
+static struct attribute *
+__power_supply_attrs[ARRAY_SIZE(power_supply_attrs) + 1];
+
+static struct power_supply_attr *to_ps_attr(struct device_attribute *attr)
+{
+	return container_of(attr, struct power_supply_attr, dev_attr);
+}
+
+static enum power_supply_property dev_attr_psp(struct device_attribute *attr)
+{
+	return  to_ps_attr(attr) - power_supply_attrs;
+}
+
 static ssize_t power_supply_show_usb_type(struct device *dev,
-					  enum power_supply_usb_type *usb_types,
-					  ssize_t num_usb_types,
+					  const struct power_supply_desc *desc,
 					  union power_supply_propval *value,
 					  char *buf)
 {
@@ -88,16 +236,16 @@ static ssize_t power_supply_show_usb_type(struct device *dev,
 	bool match = false;
 	int i;
 
-	for (i = 0; i < num_usb_types; ++i) {
-		usb_type = usb_types[i];
+	for (i = 0; i < desc->num_usb_types; ++i) {
+		usb_type = desc->usb_types[i];
 
 		if (value->intval == usb_type) {
 			count += sprintf(buf + count, "[%s] ",
-					 power_supply_usb_type_text[usb_type]);
+					 POWER_SUPPLY_USB_TYPE_TEXT[usb_type]);
 			match = true;
 		} else {
 			count += sprintf(buf + count, "%s ",
-					 power_supply_usb_type_text[usb_type]);
+					 POWER_SUPPLY_USB_TYPE_TEXT[usb_type]);
 		}
 	}
 
@@ -117,7 +265,8 @@ static ssize_t power_supply_show_property(struct device *dev,
 					  char *buf) {
 	ssize_t ret;
 	struct power_supply *psy = dev_get_drvdata(dev);
-	enum power_supply_property psp = attr - power_supply_attrs;
+	struct power_supply_attr *ps_attr = to_ps_attr(attr);
+	enum power_supply_property psp = dev_attr_psp(attr);
 	union power_supply_propval value;
 
 	if (psp == POWER_SUPPLY_PROP_TYPE) {
@@ -137,39 +286,15 @@ static ssize_t power_supply_show_property(struct device *dev,
 		}
 	}
 
+	if (ps_attr->text_values_len > 0 &&
+	    value.intval < ps_attr->text_values_len && value.intval >= 0) {
+		return sprintf(buf, "%s\n", ps_attr->text_values[value.intval]);
+	}
+
 	switch (psp) {
-	case POWER_SUPPLY_PROP_STATUS:
-		ret = sprintf(buf, "%s\n",
-			      power_supply_status_text[value.intval]);
-		break;
-	case POWER_SUPPLY_PROP_CHARGE_TYPE:
-		ret = sprintf(buf, "%s\n",
-			      power_supply_charge_type_text[value.intval]);
-		break;
-	case POWER_SUPPLY_PROP_HEALTH:
-		ret = sprintf(buf, "%s\n",
-			      power_supply_health_text[value.intval]);
-		break;
-	case POWER_SUPPLY_PROP_TECHNOLOGY:
-		ret = sprintf(buf, "%s\n",
-			      power_supply_technology_text[value.intval]);
-		break;
-	case POWER_SUPPLY_PROP_CAPACITY_LEVEL:
-		ret = sprintf(buf, "%s\n",
-			      power_supply_capacity_level_text[value.intval]);
-		break;
-	case POWER_SUPPLY_PROP_TYPE:
-		ret = sprintf(buf, "%s\n",
-			      power_supply_type_text[value.intval]);
-		break;
 	case POWER_SUPPLY_PROP_USB_TYPE:
-		ret = power_supply_show_usb_type(dev, psy->desc->usb_types,
-						 psy->desc->num_usb_types,
-						 &value, buf);
-		break;
-	case POWER_SUPPLY_PROP_SCOPE:
-		ret = sprintf(buf, "%s\n",
-			      power_supply_scope_text[value.intval]);
+		ret = power_supply_show_usb_type(dev, psy->desc,
+						&value, buf);
 		break;
 	case POWER_SUPPLY_PROP_MODEL_NAME ... POWER_SUPPLY_PROP_SERIAL_NUMBER:
 		ret = sprintf(buf, "%s\n", value.strval);
@@ -186,30 +311,14 @@ static ssize_t power_supply_store_property(struct device *dev,
 					   const char *buf, size_t count) {
 	ssize_t ret;
 	struct power_supply *psy = dev_get_drvdata(dev);
-	enum power_supply_property psp = attr - power_supply_attrs;
+	struct power_supply_attr *ps_attr = to_ps_attr(attr);
+	enum power_supply_property psp = dev_attr_psp(attr);
 	union power_supply_propval value;
 
-	switch (psp) {
-	case POWER_SUPPLY_PROP_STATUS:
-		ret = sysfs_match_string(power_supply_status_text, buf);
-		break;
-	case POWER_SUPPLY_PROP_CHARGE_TYPE:
-		ret = sysfs_match_string(power_supply_charge_type_text, buf);
-		break;
-	case POWER_SUPPLY_PROP_HEALTH:
-		ret = sysfs_match_string(power_supply_health_text, buf);
-		break;
-	case POWER_SUPPLY_PROP_TECHNOLOGY:
-		ret = sysfs_match_string(power_supply_technology_text, buf);
-		break;
-	case POWER_SUPPLY_PROP_CAPACITY_LEVEL:
-		ret = sysfs_match_string(power_supply_capacity_level_text, buf);
-		break;
-	case POWER_SUPPLY_PROP_SCOPE:
-		ret = sysfs_match_string(power_supply_scope_text, buf);
-		break;
-	default:
-		ret = -EINVAL;
+	ret = -EINVAL;
+	if (ps_attr->text_values_len > 0) {
+		ret = __sysfs_match_string(ps_attr->text_values,
+					   ps_attr->text_values_len, buf);
 	}
 
 	/*
@@ -235,86 +344,6 @@ static ssize_t power_supply_store_property(struct device *dev,
 	return count;
 }
 
-/* Must be in the same order as POWER_SUPPLY_PROP_* */
-static struct device_attribute power_supply_attrs[] = {
-	/* Properties of type `int' */
-	POWER_SUPPLY_ATTR(status),
-	POWER_SUPPLY_ATTR(charge_type),
-	POWER_SUPPLY_ATTR(health),
-	POWER_SUPPLY_ATTR(present),
-	POWER_SUPPLY_ATTR(online),
-	POWER_SUPPLY_ATTR(authentic),
-	POWER_SUPPLY_ATTR(technology),
-	POWER_SUPPLY_ATTR(cycle_count),
-	POWER_SUPPLY_ATTR(voltage_max),
-	POWER_SUPPLY_ATTR(voltage_min),
-	POWER_SUPPLY_ATTR(voltage_max_design),
-	POWER_SUPPLY_ATTR(voltage_min_design),
-	POWER_SUPPLY_ATTR(voltage_now),
-	POWER_SUPPLY_ATTR(voltage_avg),
-	POWER_SUPPLY_ATTR(voltage_ocv),
-	POWER_SUPPLY_ATTR(voltage_boot),
-	POWER_SUPPLY_ATTR(current_max),
-	POWER_SUPPLY_ATTR(current_now),
-	POWER_SUPPLY_ATTR(current_avg),
-	POWER_SUPPLY_ATTR(current_boot),
-	POWER_SUPPLY_ATTR(power_now),
-	POWER_SUPPLY_ATTR(power_avg),
-	POWER_SUPPLY_ATTR(charge_full_design),
-	POWER_SUPPLY_ATTR(charge_empty_design),
-	POWER_SUPPLY_ATTR(charge_full),
-	POWER_SUPPLY_ATTR(charge_empty),
-	POWER_SUPPLY_ATTR(charge_now),
-	POWER_SUPPLY_ATTR(charge_avg),
-	POWER_SUPPLY_ATTR(charge_counter),
-	POWER_SUPPLY_ATTR(constant_charge_current),
-	POWER_SUPPLY_ATTR(constant_charge_current_max),
-	POWER_SUPPLY_ATTR(constant_charge_voltage),
-	POWER_SUPPLY_ATTR(constant_charge_voltage_max),
-	POWER_SUPPLY_ATTR(charge_control_limit),
-	POWER_SUPPLY_ATTR(charge_control_limit_max),
-	POWER_SUPPLY_ATTR(charge_control_start_threshold),
-	POWER_SUPPLY_ATTR(charge_control_end_threshold),
-	POWER_SUPPLY_ATTR(input_current_limit),
-	POWER_SUPPLY_ATTR(input_voltage_limit),
-	POWER_SUPPLY_ATTR(input_power_limit),
-	POWER_SUPPLY_ATTR(energy_full_design),
-	POWER_SUPPLY_ATTR(energy_empty_design),
-	POWER_SUPPLY_ATTR(energy_full),
-	POWER_SUPPLY_ATTR(energy_empty),
-	POWER_SUPPLY_ATTR(energy_now),
-	POWER_SUPPLY_ATTR(energy_avg),
-	POWER_SUPPLY_ATTR(capacity),
-	POWER_SUPPLY_ATTR(capacity_alert_min),
-	POWER_SUPPLY_ATTR(capacity_alert_max),
-	POWER_SUPPLY_ATTR(capacity_level),
-	POWER_SUPPLY_ATTR(temp),
-	POWER_SUPPLY_ATTR(temp_max),
-	POWER_SUPPLY_ATTR(temp_min),
-	POWER_SUPPLY_ATTR(temp_alert_min),
-	POWER_SUPPLY_ATTR(temp_alert_max),
-	POWER_SUPPLY_ATTR(temp_ambient),
-	POWER_SUPPLY_ATTR(temp_ambient_alert_min),
-	POWER_SUPPLY_ATTR(temp_ambient_alert_max),
-	POWER_SUPPLY_ATTR(time_to_empty_now),
-	POWER_SUPPLY_ATTR(time_to_empty_avg),
-	POWER_SUPPLY_ATTR(time_to_full_now),
-	POWER_SUPPLY_ATTR(time_to_full_avg),
-	POWER_SUPPLY_ATTR(type),
-	POWER_SUPPLY_ATTR(usb_type),
-	POWER_SUPPLY_ATTR(scope),
-	POWER_SUPPLY_ATTR(precharge_current),
-	POWER_SUPPLY_ATTR(charge_term_current),
-	POWER_SUPPLY_ATTR(calibrate),
-	/* Properties of type `const char *' */
-	POWER_SUPPLY_ATTR(model_name),
-	POWER_SUPPLY_ATTR(manufacturer),
-	POWER_SUPPLY_ATTR(serial_number),
-};
-
-static struct attribute *
-__power_supply_attrs[ARRAY_SIZE(power_supply_attrs) + 1];
-
 static umode_t power_supply_attr_is_visible(struct kobject *kobj,
 					   struct attribute *attr,
 					   int attrno)
@@ -324,6 +353,9 @@ static umode_t power_supply_attr_is_visible(struct kobject *kobj,
 	umode_t mode = S_IRUSR | S_IRGRP | S_IROTH;
 	int i;
 
+	if (!power_supply_attrs[attrno].prop_name)
+		return 0;
+
 	if (attrno == POWER_SUPPLY_PROP_TYPE)
 		return mode;
 
@@ -352,31 +384,69 @@ static const struct attribute_group *power_supply_attr_groups[] = {
 	NULL,
 };
 
+static void str_to_lower(char *str)
+{
+	while (*str) {
+		*str = tolower(*str);
+		str++;
+	}
+}
+
 void power_supply_init_attrs(struct device_type *dev_type)
 {
 	int i;
 
 	dev_type->groups = power_supply_attr_groups;
 
-	for (i = 0; i < ARRAY_SIZE(power_supply_attrs); i++)
-		__power_supply_attrs[i] = &power_supply_attrs[i].attr;
+	for (i = 0; i < ARRAY_SIZE(power_supply_attrs); i++) {
+		struct device_attribute *attr;
+
+		if (!power_supply_attrs[i].prop_name) {
+			pr_warn("%s: Property %d skipped because is is missing from power_supply_attrs\n",
+				__func__, i);
+			sprintf(power_supply_attrs[i].attr_name, "_err_%d", i);
+		} else {
+			str_to_lower(power_supply_attrs[i].attr_name);
+		}
+
+		attr = &power_supply_attrs[i].dev_attr;
+
+		attr->attr.name = power_supply_attrs[i].attr_name;
+		attr->show = power_supply_show_property;
+		attr->store = power_supply_store_property;
+		__power_supply_attrs[i] = &attr->attr;
+	}
 }
 
-static char *kstruprdup(const char *str, gfp_t gfp)
+static int add_prop_uevent(struct device *dev, struct kobj_uevent_env *env,
+			   enum power_supply_property prop, char *prop_buf)
 {
-	char *ret, *ustr;
+	int ret = 0;
+	struct power_supply_attr *pwr_attr;
+	struct device_attribute *dev_attr;
+	char *line;
 
-	ustr = ret = kmalloc(strlen(str) + 1, gfp);
+	pwr_attr = &power_supply_attrs[prop];
+	dev_attr = &pwr_attr->dev_attr;
 
-	if (!ret)
-		return NULL;
+	ret = power_supply_show_property(dev, dev_attr, prop_buf);
+	if (ret == -ENODEV || ret == -ENODATA) {
+		/*
+		 * When a battery is absent, we expect -ENODEV. Don't abort;
+		 * send the uevent with at least the the PRESENT=0 property
+		 */
+		return 0;
+	}
 
-	while (*str)
-		*ustr++ = toupper(*str++);
+	if (ret < 0)
+		return ret;
 
-	*ustr = 0;
+	line = strchr(prop_buf, '\n');
+	if (line)
+		*line = 0;
 
-	return ret;
+	return add_uevent_var(env, "POWER_SUPPLY_%s=%s",
+			      pwr_attr->prop_name, prop_buf);
 }
 
 int power_supply_uevent(struct device *dev, struct kobj_uevent_env *env)
@@ -384,7 +454,6 @@ int power_supply_uevent(struct device *dev, struct kobj_uevent_env *env)
 	struct power_supply *psy = dev_get_drvdata(dev);
 	int ret = 0, j;
 	char *prop_buf;
-	char *attrname;
 
 	if (!psy || !psy->desc) {
 		dev_dbg(dev, "No power supply yet\n");
@@ -399,35 +468,13 @@ int power_supply_uevent(struct device *dev, struct kobj_uevent_env *env)
 	if (!prop_buf)
 		return -ENOMEM;
 
+	ret = add_prop_uevent(dev, env, POWER_SUPPLY_PROP_TYPE, prop_buf);
+	if (ret)
+		goto out;
+
 	for (j = 0; j < psy->desc->num_properties; j++) {
-		struct device_attribute *attr;
-		char *line;
-
-		attr = &power_supply_attrs[psy->desc->properties[j]];
-
-		ret = power_supply_show_property(dev, attr, prop_buf);
-		if (ret == -ENODEV || ret == -ENODATA) {
-			/* When a battery is absent, we expect -ENODEV. Don't abort;
-			   send the uevent with at least the the PRESENT=0 property */
-			ret = 0;
-			continue;
-		}
-
-		if (ret < 0)
-			goto out;
-
-		line = strchr(prop_buf, '\n');
-		if (line)
-			*line = 0;
-
-		attrname = kstruprdup(attr->attr.name, GFP_KERNEL);
-		if (!attrname) {
-			ret = -ENOMEM;
-			goto out;
-		}
-
-		ret = add_uevent_var(env, "POWER_SUPPLY_%s=%s", attrname, prop_buf);
-		kfree(attrname);
+		ret = add_prop_uevent(dev, env, psy->desc->properties[j],
+				      prop_buf);
 		if (ret)
 			goto out;
 	}
diff --git a/drivers/power/supply/sc27xx_fuel_gauge.c b/drivers/power/supply/sc27xx_fuel_gauge.c
index bc8f5bd..a7c8a845 100644
--- a/drivers/power/supply/sc27xx_fuel_gauge.c
+++ b/drivers/power/supply/sc27xx_fuel_gauge.c
@@ -62,6 +62,8 @@
 
 #define SC27XX_FGU_CUR_BASIC_ADC	8192
 #define SC27XX_FGU_SAMPLE_HZ		2
+/* micro Ohms */
+#define SC27XX_FGU_IDEAL_RESISTANCE	20000
 
 /*
  * struct sc27xx_fgu_data: describe the FGU device
@@ -81,9 +83,12 @@
  * @max_volt: the maximum constant input voltage in millivolt
  * @min_volt: the minimum drained battery voltage in microvolt
  * @table_len: the capacity table length
+ * @resist_table_len: the resistance table length
  * @cur_1000ma_adc: ADC value corresponding to 1000 mA
  * @vol_1000mv_adc: ADC value corresponding to 1000 mV
+ * @calib_resist: the real resistance of coulomb counter chip in uOhm
  * @cap_table: capacity table with corresponding ocv
+ * @resist_table: resistance percent table with corresponding temperature
  */
 struct sc27xx_fgu_data {
 	struct regmap *regmap;
@@ -103,15 +108,19 @@ struct sc27xx_fgu_data {
 	int max_volt;
 	int min_volt;
 	int table_len;
+	int resist_table_len;
 	int cur_1000ma_adc;
 	int vol_1000mv_adc;
+	int calib_resist;
 	struct power_supply_battery_ocv_table *cap_table;
+	struct power_supply_resistance_temp_table *resist_table;
 };
 
 static int sc27xx_fgu_cap_to_clbcnt(struct sc27xx_fgu_data *data, int capacity);
 static void sc27xx_fgu_capacity_calibration(struct sc27xx_fgu_data *data,
 					    int cap, bool int_mode);
 static void sc27xx_fgu_adjust_cap(struct sc27xx_fgu_data *data, int cap);
+static int sc27xx_fgu_get_temp(struct sc27xx_fgu_data *data, int *temp);
 
 static const char * const sc27xx_charger_supply_name[] = {
 	"sc2731_charger",
@@ -434,7 +443,7 @@ static int sc27xx_fgu_get_current(struct sc27xx_fgu_data *data, int *val)
 
 static int sc27xx_fgu_get_vbat_ocv(struct sc27xx_fgu_data *data, int *val)
 {
-	int vol, cur, ret;
+	int vol, cur, ret, temp, resistance;
 
 	ret = sc27xx_fgu_get_vbat_vol(data, &vol);
 	if (ret)
@@ -444,8 +453,19 @@ static int sc27xx_fgu_get_vbat_ocv(struct sc27xx_fgu_data *data, int *val)
 	if (ret)
 		return ret;
 
+	resistance = data->internal_resist;
+	if (data->resist_table_len > 0) {
+		ret = sc27xx_fgu_get_temp(data, &temp);
+		if (ret)
+			return ret;
+
+		resistance = power_supply_temp2resist_simple(data->resist_table,
+						data->resist_table_len, temp);
+		resistance = data->internal_resist * resistance / 100;
+	}
+
 	/* Return the battery OCV in micro volts. */
-	*val = vol * 1000 - cur * data->internal_resist;
+	*val = vol * 1000 - cur * resistance;
 
 	return 0;
 }
@@ -594,6 +614,17 @@ static int sc27xx_fgu_get_property(struct power_supply *psy,
 		val->intval = data->total_cap * 1000;
 		break;
 
+	case POWER_SUPPLY_PROP_CHARGE_NOW:
+		ret = sc27xx_fgu_get_clbcnt(data, &value);
+		if (ret)
+			goto error;
+
+		value = DIV_ROUND_CLOSEST(value * 10,
+					  36 * SC27XX_FGU_SAMPLE_HZ);
+		val->intval = sc27xx_fgu_adc_to_current(data, value);
+
+		break;
+
 	default:
 		ret = -EINVAL;
 		break;
@@ -662,6 +693,7 @@ static enum power_supply_property sc27xx_fgu_props[] = {
 	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE,
 	POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN,
 	POWER_SUPPLY_PROP_CALIBRATE,
+	POWER_SUPPLY_PROP_CHARGE_NOW
 };
 
 static const struct power_supply_desc sc27xx_fgu_desc = {
@@ -884,7 +916,9 @@ static int sc27xx_fgu_calibration(struct sc27xx_fgu_data *data)
 	 */
 	cal_4200mv = (calib_data & 0x1ff) + 6963 - 4096 - 256;
 	data->vol_1000mv_adc = DIV_ROUND_CLOSEST(cal_4200mv * 10, 42);
-	data->cur_1000ma_adc = data->vol_1000mv_adc * 4;
+	data->cur_1000ma_adc =
+		DIV_ROUND_CLOSEST(data->vol_1000mv_adc * 4 * data->calib_resist,
+				  SC27XX_FGU_IDEAL_RESISTANCE);
 
 	kfree(buf);
 	return 0;
@@ -929,6 +963,18 @@ static int sc27xx_fgu_hw_init(struct sc27xx_fgu_data *data)
 	if (!data->alarm_cap)
 		data->alarm_cap += 1;
 
+	data->resist_table_len = info.resist_table_size;
+	if (data->resist_table_len > 0) {
+		data->resist_table = devm_kmemdup(data->dev, info.resist_table,
+						  data->resist_table_len *
+						  sizeof(struct power_supply_resistance_temp_table),
+						  GFP_KERNEL);
+		if (!data->resist_table) {
+			power_supply_put_battery_info(data->battery, &info);
+			return -ENOMEM;
+		}
+	}
+
 	power_supply_put_battery_info(data->battery, &info);
 
 	ret = sc27xx_fgu_calibration(data);
@@ -1051,6 +1097,15 @@ static int sc27xx_fgu_probe(struct platform_device *pdev)
 		return ret;
 	}
 
+	ret = device_property_read_u32(&pdev->dev,
+				       "sprd,calib-resistance-micro-ohms",
+				       &data->calib_resist);
+	if (ret) {
+		dev_err(&pdev->dev,
+			"failed to get fgu calibration resistance\n");
+		return ret;
+	}
+
 	data->channel = devm_iio_channel_get(dev, "bat-temp");
 	if (IS_ERR(data->channel)) {
 		dev_err(dev, "failed to get IIO channel\n");
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
index f877e77..ff3dacb 100644
--- a/drivers/pwm/core.c
+++ b/drivers/pwm/core.c
@@ -282,6 +282,7 @@ int pwmchip_add_with_polarity(struct pwm_chip *chip,
 		pwm->pwm = chip->base + i;
 		pwm->hwpwm = i;
 		pwm->state.polarity = polarity;
+		pwm->state.output_type = PWM_OUTPUT_FIXED;
 
 		if (chip->ops->get_state)
 			chip->ops->get_state(chip, pwm, &pwm->state);
@@ -1156,8 +1157,8 @@ static void pwm_dbg_show(struct pwm_chip *chip, struct seq_file *s)
 		if (state.enabled)
 			seq_puts(s, " enabled");
 
-		seq_printf(s, " period: %u ns", state.period);
-		seq_printf(s, " duty: %u ns", state.duty_cycle);
+		seq_printf(s, " period: %llu ns", state.period);
+		seq_printf(s, " duty: %llu ns", state.duty_cycle);
 		seq_printf(s, " polarity: %s",
 			   state.polarity ? "inverse" : "normal");
 
diff --git a/drivers/pwm/pwm-clps711x.c b/drivers/pwm/pwm-clps711x.c
index 924d39a..ba9500a 100644
--- a/drivers/pwm/pwm-clps711x.c
+++ b/drivers/pwm/pwm-clps711x.c
@@ -43,7 +43,7 @@ static void clps711x_pwm_update_val(struct clps711x_chip *priv, u32 n, u32 v)
 static unsigned int clps711x_get_duty(struct pwm_device *pwm, unsigned int v)
 {
 	/* Duty cycle 0..15 max */
-	return DIV_ROUND_CLOSEST(v * 0xf, pwm->args.period);
+	return DIV64_U64_ROUND_CLOSEST(v * 0xf, pwm->args.period);
 }
 
 static int clps711x_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm)
diff --git a/drivers/pwm/pwm-imx-tpm.c b/drivers/pwm/pwm-imx-tpm.c
index 9145f61..53bf3643 100644
--- a/drivers/pwm/pwm-imx-tpm.c
+++ b/drivers/pwm/pwm-imx-tpm.c
@@ -126,7 +126,7 @@ static int pwm_imx_tpm_round_state(struct pwm_chip *chip,
 		real_state->duty_cycle = state->duty_cycle;
 
 	tmp = (u64)p->mod * real_state->duty_cycle;
-	p->val = DIV_ROUND_CLOSEST_ULL(tmp, real_state->period);
+	p->val = DIV64_U64_ROUND_CLOSEST(tmp, real_state->period);
 
 	real_state->polarity = state->polarity;
 	real_state->enabled = state->enabled;
diff --git a/drivers/pwm/pwm-imx27.c b/drivers/pwm/pwm-imx27.c
index ae11d85..b4b0fbd 100644
--- a/drivers/pwm/pwm-imx27.c
+++ b/drivers/pwm/pwm-imx27.c
@@ -198,7 +198,7 @@ static void pwm_imx27_wait_fifo_slot(struct pwm_chip *chip,
 	sr = readl(imx->mmio_base + MX3_PWMSR);
 	fifoav = FIELD_GET(MX3_PWMSR_FIFOAV, sr);
 	if (fifoav == MX3_PWMSR_FIFOAV_4WORDS) {
-		period_ms = DIV_ROUND_UP(pwm_get_period(pwm),
+		period_ms = DIV_ROUND_UP_ULL(pwm_get_period(pwm),
 					 NSEC_PER_MSEC);
 		msleep(period_ms);
 
@@ -231,8 +231,7 @@ static int pwm_imx27_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 
 		period_cycles /= prescale;
 		c = (unsigned long long)period_cycles * state->duty_cycle;
-		do_div(c, state->period);
-		duty_cycles = c;
+		duty_cycles = div64_u64(c, state->period);
 
 		/*
 		 * according to imx pwm RM, the real period value should be
diff --git a/drivers/pwm/pwm-sifive.c b/drivers/pwm/pwm-sifive.c
index cc63f9b..62de0bb 100644
--- a/drivers/pwm/pwm-sifive.c
+++ b/drivers/pwm/pwm-sifive.c
@@ -181,7 +181,7 @@ static int pwm_sifive_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 	 * consecutively
 	 */
 	num = (u64)duty_cycle * (1U << PWM_SIFIVE_CMPWIDTH);
-	frac = DIV_ROUND_CLOSEST_ULL(num, state->period);
+	frac = DIV64_U64_ROUND_CLOSEST(num, state->period);
 	/* The hardware cannot generate a 100% duty cycle */
 	frac = min(frac, (1U << PWM_SIFIVE_CMPWIDTH) - 1);
 
diff --git a/drivers/pwm/pwm-sti.c b/drivers/pwm/pwm-sti.c
index 1508616..857f2ad 100644
--- a/drivers/pwm/pwm-sti.c
+++ b/drivers/pwm/pwm-sti.c
@@ -371,10 +371,10 @@ static int sti_pwm_capture(struct pwm_chip *chip, struct pwm_device *pwm,
 		effective_ticks = clk_get_rate(pc->cpt_clk);
 
 		result->period = (high + low) * NSEC_PER_SEC;
-		result->period /= effective_ticks;
+		do_div(result->period, effective_ticks);
 
 		result->duty_cycle = high * NSEC_PER_SEC;
-		result->duty_cycle /= effective_ticks;
+		do_div(result->duty_cycle, effective_ticks);
 
 		break;
 
diff --git a/drivers/pwm/pwm-stm32-lp.c b/drivers/pwm/pwm-stm32-lp.c
index 67fca62..134c146 100644
--- a/drivers/pwm/pwm-stm32-lp.c
+++ b/drivers/pwm/pwm-stm32-lp.c
@@ -61,7 +61,7 @@ static int stm32_pwm_lp_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 	do_div(div, NSEC_PER_SEC);
 	if (!div) {
 		/* Clock is too slow to achieve requested period. */
-		dev_dbg(priv->chip.dev, "Can't reach %u ns\n",	state->period);
+		dev_dbg(priv->chip.dev, "Can't reach %llu ns\n", state->period);
 		return -EINVAL;
 	}
 
diff --git a/drivers/pwm/pwm-sun4i.c b/drivers/pwm/pwm-sun4i.c
index 0527372..cb3feab 100644
--- a/drivers/pwm/pwm-sun4i.c
+++ b/drivers/pwm/pwm-sun4i.c
@@ -245,7 +245,7 @@ static int sun4i_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
 		val = (duty & PWM_DTY_MASK) | PWM_PRD(period);
 		sun4i_pwm_writel(sun4i_pwm, val, PWM_CH_PRD(pwm->hwpwm));
 		sun4i_pwm->next_period[pwm->hwpwm] = jiffies +
-			usecs_to_jiffies(cstate.period / 1000 + 1);
+			usecs_to_jiffies(div_u64(cstate.period, 1000) + 1);
 		sun4i_pwm->needs_delay[pwm->hwpwm] = true;
 	}
 
diff --git a/drivers/pwm/sysfs.c b/drivers/pwm/sysfs.c
index 2389b86..417ecd7 100644
--- a/drivers/pwm/sysfs.c
+++ b/drivers/pwm/sysfs.c
@@ -42,7 +42,7 @@ static ssize_t period_show(struct device *child,
 
 	pwm_get_state(pwm, &state);
 
-	return sprintf(buf, "%u\n", state.period);
+	return sprintf(buf, "%llu\n", state.period);
 }
 
 static ssize_t period_store(struct device *child,
@@ -52,10 +52,10 @@ static ssize_t period_store(struct device *child,
 	struct pwm_export *export = child_to_pwm_export(child);
 	struct pwm_device *pwm = export->pwm;
 	struct pwm_state state;
-	unsigned int val;
+	u64 val;
 	int ret;
 
-	ret = kstrtouint(buf, 0, &val);
+	ret = kstrtou64(buf, 0, &val);
 	if (ret)
 		return ret;
 
@@ -77,7 +77,7 @@ static ssize_t duty_cycle_show(struct device *child,
 
 	pwm_get_state(pwm, &state);
 
-	return sprintf(buf, "%u\n", state.duty_cycle);
+	return sprintf(buf, "%llu\n", state.duty_cycle);
 }
 
 static ssize_t duty_cycle_store(struct device *child,
@@ -212,7 +212,30 @@ static ssize_t capture_show(struct device *child,
 	if (ret)
 		return ret;
 
-	return sprintf(buf, "%u %u\n", result.period, result.duty_cycle);
+	return sprintf(buf, "%llu %llu\n", result.period, result.duty_cycle);
+}
+
+static ssize_t output_type_show(struct device *child,
+			     struct device_attribute *attr,
+			     char *buf)
+{
+	const struct pwm_device *pwm = child_to_pwm_device(child);
+	const char *output_type = "unknown";
+	struct pwm_state state;
+
+	pwm_get_state(pwm, &state);
+	switch (state.output_type) {
+	case PWM_OUTPUT_FIXED:
+		output_type = "fixed";
+		break;
+	case PWM_OUTPUT_MODULATED:
+		output_type = "modulated";
+		break;
+	default:
+		break;
+	}
+
+	return snprintf(buf, PAGE_SIZE, "%s\n", output_type);
 }
 
 static DEVICE_ATTR_RW(period);
@@ -220,6 +243,7 @@ static DEVICE_ATTR_RW(duty_cycle);
 static DEVICE_ATTR_RW(enable);
 static DEVICE_ATTR_RW(polarity);
 static DEVICE_ATTR_RO(capture);
+static DEVICE_ATTR_RO(output_type);
 
 static struct attribute *pwm_attrs[] = {
 	&dev_attr_period.attr,
@@ -227,6 +251,7 @@ static struct attribute *pwm_attrs[] = {
 	&dev_attr_enable.attr,
 	&dev_attr_polarity.attr,
 	&dev_attr_capture.attr,
+	&dev_attr_output_type.attr,
 	NULL
 };
 ATTRIBUTE_GROUPS(pwm);
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 5b9d570d..76355525 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -1881,6 +1881,7 @@ struct regulator *_regulator_get(struct device *dev, const char *id,
 	struct regulator_dev *rdev;
 	struct regulator *regulator;
 	const char *devname = dev ? dev_name(dev) : "deviceless";
+	struct device_link *link;
 	int ret;
 
 	if (get_type >= MAX_GET_TYPE) {
@@ -1988,7 +1989,9 @@ struct regulator *_regulator_get(struct device *dev, const char *id,
 			rdev->use_count = 0;
 	}
 
-	device_link_add(dev, &rdev->dev, DL_FLAG_STATELESS);
+	link = device_link_add(dev, &rdev->dev, DL_FLAG_STATELESS);
+	if (!IS_ERR_OR_NULL(link))
+		regulator->device_link = true;
 
 	return regulator;
 }
@@ -2083,7 +2086,8 @@ static void _regulator_put(struct regulator *regulator)
 	debugfs_remove_recursive(regulator->debugfs);
 
 	if (regulator->dev) {
-		device_link_remove(regulator->dev, &rdev->dev);
+		if (regulator->device_link)
+			device_link_remove(regulator->dev, &rdev->dev);
 
 		/* remove any sysfs entries */
 		sysfs_remove_link(&rdev->dev.kobj, regulator->supply_name);
diff --git a/drivers/regulator/internal.h b/drivers/regulator/internal.h
index 83ae442..2391b56 100644
--- a/drivers/regulator/internal.h
+++ b/drivers/regulator/internal.h
@@ -36,6 +36,7 @@ struct regulator {
 	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;
diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig
index 7b07281..1bacffd 100644
--- a/drivers/reset/Kconfig
+++ b/drivers/reset/Kconfig
@@ -99,7 +99,7 @@
 	  This enables the reset driver for ImgTec Pistachio SoCs.
 
 config RESET_QCOM_AOSS
-	bool "Qcom AOSS Reset Driver"
+	tristate "Qcom AOSS Reset Driver"
 	depends on ARCH_QCOM || COMPILE_TEST
 	help
 	  This enables the AOSS (always on subsystem) reset driver
diff --git a/drivers/reset/reset-qcom-aoss.c b/drivers/reset/reset-qcom-aoss.c
index 36db967..9333b92 100644
--- a/drivers/reset/reset-qcom-aoss.c
+++ b/drivers/reset/reset-qcom-aoss.c
@@ -118,6 +118,7 @@ static const struct of_device_id qcom_aoss_reset_of_match[] = {
 	{ .compatible = "qcom,sdm845-aoss-cc", .data = &sdm845_aoss_desc },
 	{}
 };
+MODULE_DEVICE_TABLE(of, qcom_aoss_reset_of_match);
 
 static struct platform_driver qcom_aoss_reset_driver = {
 	.probe = qcom_aoss_reset_probe,
@@ -127,7 +128,7 @@ static struct platform_driver qcom_aoss_reset_driver = {
 	},
 };
 
-builtin_platform_driver(qcom_aoss_reset_driver);
+module_platform_driver(qcom_aoss_reset_driver);
 
 MODULE_DESCRIPTION("Qualcomm AOSS Reset Driver");
 MODULE_LICENSE("GPL v2");
diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c
index e330ec4..a3c25bb 100644
--- a/drivers/rpmsg/rpmsg_core.c
+++ b/drivers/rpmsg/rpmsg_core.c
@@ -81,7 +81,7 @@ EXPORT_SYMBOL(rpmsg_create_ept);
  */
 void rpmsg_destroy_ept(struct rpmsg_endpoint *ept)
 {
-	if (ept)
+	if (ept && ept->ops)
 		ept->ops->destroy_ept(ept);
 }
 EXPORT_SYMBOL(rpmsg_destroy_ept);
@@ -283,6 +283,42 @@ int rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst,
 }
 EXPORT_SYMBOL(rpmsg_trysend_offchannel);
 
+/**
+ * rpmsg_get_signals() - get the signals for this endpoint
+ * @ept:	the rpmsg endpoint
+ *
+ * Returns signal bits on success and an appropriate error value on failure.
+ */
+int rpmsg_get_signals(struct rpmsg_endpoint *ept)
+{
+	if (WARN_ON(!ept))
+		return -EINVAL;
+	if (!ept->ops->get_signals)
+		return -ENXIO;
+
+	return ept->ops->get_signals(ept);
+}
+EXPORT_SYMBOL(rpmsg_get_signals);
+
+/**
+ * rpmsg_set_signals() - set the remote signals for this endpoint
+ * @ept:	the rpmsg endpoint
+ * @set:	set mask for signals
+ * @clear:	clear mask for signals
+ *
+ * Returns 0 on success and an appropriate error value on failure.
+ */
+int rpmsg_set_signals(struct rpmsg_endpoint *ept, u32 set, u32 clear)
+{
+	if (WARN_ON(!ept))
+		return -EINVAL;
+	if (!ept->ops->set_signals)
+		return -ENXIO;
+
+	return ept->ops->set_signals(ept, set, clear);
+}
+EXPORT_SYMBOL(rpmsg_set_signals);
+
 /*
  * match an rpmsg channel with a channel info struct.
  * this is used to make sure we're not creating rpmsg devices for channels
@@ -468,6 +504,10 @@ static int rpmsg_dev_probe(struct device *dev)
 
 		rpdev->ept = ept;
 		rpdev->src = ept->addr;
+
+		if (rpdrv->signals)
+			ept->sig_cb = rpdrv->signals;
+
 	}
 
 	err = rpdrv->probe(rpdev);
diff --git a/drivers/rpmsg/rpmsg_internal.h b/drivers/rpmsg/rpmsg_internal.h
index 3fc83cd..03356e8 100644
--- a/drivers/rpmsg/rpmsg_internal.h
+++ b/drivers/rpmsg/rpmsg_internal.h
@@ -2,6 +2,7 @@
 /*
  * remote processor messaging bus internals
  *
+ * Copyright (c) 2020 The Linux Foundation.
  * Copyright (C) 2011 Texas Instruments, Inc.
  * Copyright (C) 2011 Google, Inc.
  *
@@ -47,6 +48,8 @@ struct rpmsg_device_ops {
  * @trysendto:		see @rpmsg_trysendto(), optional
  * @trysend_offchannel:	see @rpmsg_trysend_offchannel(), optional
  * @poll:		see @rpmsg_poll(), optional
+ * @get_signals:	see @rpmsg_get_signals(), optional
+ * @set_signals:	see @rpmsg_set_signals(), optional
  *
  * Indirection table for the operations that a rpmsg backend should implement.
  * In addition to @destroy_ept, the backend must at least implement @send and
@@ -66,6 +69,8 @@ struct rpmsg_endpoint_ops {
 			     void *data, int len);
 	__poll_t (*poll)(struct rpmsg_endpoint *ept, struct file *filp,
 			     poll_table *wait);
+	int (*get_signals)(struct rpmsg_endpoint *ept);
+	int (*set_signals)(struct rpmsg_endpoint *ept, u32 set, u32 clear);
 };
 
 int rpmsg_register_device(struct rpmsg_device *rpdev);
diff --git a/drivers/rtc/class.c b/drivers/rtc/class.c
index 9458e6d..970b19c 100644
--- a/drivers/rtc/class.c
+++ b/drivers/rtc/class.c
@@ -375,6 +375,11 @@ int __rtc_register_device(struct module *owner, struct rtc_device *rtc)
 	dev_info(rtc->dev.parent, "registered as %s\n",
 		 dev_name(&rtc->dev));
 
+#ifdef CONFIG_RTC_HCTOSYS_DEVICE
+	if (!strcmp(dev_name(&rtc->dev), CONFIG_RTC_HCTOSYS_DEVICE))
+		rtc_hctosys();
+#endif
+
 	return 0;
 }
 EXPORT_SYMBOL_GPL(__rtc_register_device);
diff --git a/drivers/rtc/hctosys.c b/drivers/rtc/hctosys.c
index a74d0d8..e3a4f26 100644
--- a/drivers/rtc/hctosys.c
+++ b/drivers/rtc/hctosys.c
@@ -21,7 +21,7 @@
  * the best guess is to add 0.5s.
  */
 
-static int __init rtc_hctosys(void)
+int rtc_hctosys(void)
 {
 	int err = -ENODEV;
 	struct rtc_time tm;
@@ -65,5 +65,3 @@ static int __init rtc_hctosys(void)
 
 	return err;
 }
-
-late_initcall(rtc_hctosys);
diff --git a/drivers/rtc/rtc-core.h b/drivers/rtc/rtc-core.h
index 0abf989..c38ef33 100644
--- a/drivers/rtc/rtc-core.h
+++ b/drivers/rtc/rtc-core.h
@@ -46,3 +46,7 @@ static inline const struct attribute_group **rtc_get_dev_attribute_groups(void)
 	return NULL;
 }
 #endif
+
+#ifdef CONFIG_RTC_HCTOSYS
+extern int rtc_hctosys(void);
+#endif
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index b5867e1..3245d3df 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -2121,6 +2121,8 @@ scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage,
 
 	memset(data, 0, sizeof(*data));
 	memset(&cmd[0], 0, 12);
+
+	dbd = sdev->set_dbd_for_ms ? 8 : dbd;
 	cmd[1] = dbd & 0x18;	/* allows DBD and LLBA bits */
 	cmd[2] = modepage;
 
diff --git a/drivers/scsi/scsi_pm.c b/drivers/scsi/scsi_pm.c
index 5f0ad8b..3717eea 100644
--- a/drivers/scsi/scsi_pm.c
+++ b/drivers/scsi/scsi_pm.c
@@ -80,10 +80,6 @@ static int scsi_dev_type_resume(struct device *dev,
 	dev_dbg(dev, "scsi resume: %d\n", err);
 
 	if (err == 0) {
-		bool was_runtime_suspended;
-
-		was_runtime_suspended = pm_runtime_suspended(dev);
-
 		pm_runtime_disable(dev);
 		err = pm_runtime_set_active(dev);
 		pm_runtime_enable(dev);
@@ -97,10 +93,8 @@ static int scsi_dev_type_resume(struct device *dev,
 		 */
 		if (!err && scsi_is_sdev_device(dev)) {
 			struct scsi_device *sdev = to_scsi_device(dev);
-			if (was_runtime_suspended)
-				blk_post_runtime_resume(sdev->request_queue, 0);
-			else
-				blk_set_runtime_active(sdev->request_queue);
+
+			blk_set_runtime_active(sdev->request_queue);
 		}
 	}
 
diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
index 6d7362e..fb07b44 100644
--- a/drivers/scsi/scsi_sysfs.c
+++ b/drivers/scsi/scsi_sysfs.c
@@ -1309,7 +1309,8 @@ int scsi_sysfs_add_sdev(struct scsi_device *sdev)
 	device_enable_async_suspend(&sdev->sdev_gendev);
 	scsi_autopm_get_target(starget);
 	pm_runtime_set_active(&sdev->sdev_gendev);
-	pm_runtime_forbid(&sdev->sdev_gendev);
+	if (!sdev->rpm_autosuspend)
+		pm_runtime_forbid(&sdev->sdev_gendev);
 	pm_runtime_enable(&sdev->sdev_gendev);
 	scsi_autopm_put_target(starget);
 
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index f552497..c974d5e 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -122,8 +122,6 @@ static void sd_eh_reset(struct scsi_cmnd *);
 static int sd_eh_action(struct scsi_cmnd *, int);
 static void sd_read_capacity(struct scsi_disk *sdkp, unsigned char *buffer);
 static void scsi_disk_release(struct device *cdev);
-static void sd_print_sense_hdr(struct scsi_disk *, struct scsi_sense_hdr *);
-static void sd_print_result(const struct scsi_disk *, const char *, int);
 
 static DEFINE_IDA(sd_index_ida);
 
@@ -1293,9 +1291,17 @@ static blk_status_t sd_init_command(struct scsi_cmnd *cmd)
 	case REQ_OP_WRITE:
 		return sd_setup_read_write_cmnd(cmd);
 	case REQ_OP_ZONE_RESET:
-		return sd_zbc_setup_reset_cmnd(cmd, false);
+		return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_RESET_WRITE_POINTER,
+						   false);
 	case REQ_OP_ZONE_RESET_ALL:
-		return sd_zbc_setup_reset_cmnd(cmd, true);
+		return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_RESET_WRITE_POINTER,
+						   true);
+	case REQ_OP_ZONE_OPEN:
+		return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_OPEN_ZONE, false);
+	case REQ_OP_ZONE_CLOSE:
+		return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_CLOSE_ZONE, false);
+	case REQ_OP_ZONE_FINISH:
+		return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_FINISH_ZONE, false);
 	default:
 		WARN_ON_ONCE(1);
 		return BLK_STS_NOTSUPP;
@@ -1973,6 +1979,9 @@ static int sd_done(struct scsi_cmnd *SCpnt)
 	case REQ_OP_WRITE_SAME:
 	case REQ_OP_ZONE_RESET:
 	case REQ_OP_ZONE_RESET_ALL:
+	case REQ_OP_ZONE_OPEN:
+	case REQ_OP_ZONE_CLOSE:
+	case REQ_OP_ZONE_FINISH:
 		if (!result) {
 			good_bytes = blk_rq_bytes(req);
 			scsi_set_resid(SCpnt, 0);
@@ -3385,6 +3394,10 @@ static int sd_probe(struct device *dev)
 	}
 
 	blk_pm_runtime_init(sdp->request_queue, dev);
+	if (sdp->rpm_autosuspend) {
+		pm_runtime_set_autosuspend_delay(dev,
+			sdp->host->hostt->rpm_autosuspend_delay);
+	}
 	device_add_disk(dev, gd, NULL);
 	if (sdkp->capacity)
 		sd_dif_config_host(sdkp);
@@ -3717,15 +3730,13 @@ static void __exit exit_sd(void)
 module_init(init_sd);
 module_exit(exit_sd);
 
-static void sd_print_sense_hdr(struct scsi_disk *sdkp,
-			       struct scsi_sense_hdr *sshdr)
+void sd_print_sense_hdr(struct scsi_disk *sdkp, struct scsi_sense_hdr *sshdr)
 {
 	scsi_print_sense_hdr(sdkp->device,
 			     sdkp->disk ? sdkp->disk->disk_name : NULL, sshdr);
 }
 
-static void sd_print_result(const struct scsi_disk *sdkp, const char *msg,
-			    int result)
+void sd_print_result(const struct scsi_disk *sdkp, const char *msg, int result)
 {
 	const char *hb_string = scsi_hostbyte_string(result);
 	const char *db_string = scsi_driverbyte_string(result);
@@ -3740,4 +3751,3 @@ static void sd_print_result(const struct scsi_disk *sdkp, const char *msg,
 			  "%s: Result: hostbyte=0x%02x driverbyte=0x%02x\n",
 			  msg, host_byte(result), driver_byte(result));
 }
-
diff --git a/drivers/scsi/sd.h b/drivers/scsi/sd.h
index 1eab779..048cf39 100644
--- a/drivers/scsi/sd.h
+++ b/drivers/scsi/sd.h
@@ -116,6 +116,9 @@ struct scsi_disk {
 	unsigned	urswrz : 1;
 	unsigned	security : 1;
 	unsigned	ignore_medium_access_errors : 1;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 #define to_scsi_disk(obj) container_of(obj,struct scsi_disk,dev)
 
@@ -209,11 +212,12 @@ static inline int sd_is_zoned(struct scsi_disk *sdkp)
 
 extern int sd_zbc_read_zones(struct scsi_disk *sdkp, unsigned char *buffer);
 extern void sd_zbc_print_zones(struct scsi_disk *sdkp);
-extern blk_status_t sd_zbc_setup_reset_cmnd(struct scsi_cmnd *cmd, bool all);
+blk_status_t sd_zbc_setup_zone_mgmt_cmnd(struct scsi_cmnd *cmd,
+					 unsigned char op, bool all);
 extern void sd_zbc_complete(struct scsi_cmnd *cmd, unsigned int good_bytes,
 			    struct scsi_sense_hdr *sshdr);
-extern int sd_zbc_report_zones(struct gendisk *disk, sector_t sector,
-			       struct blk_zone *zones, unsigned int *nr_zones);
+int sd_zbc_report_zones(struct gendisk *disk, sector_t sector,
+		unsigned int nr_zones, report_zones_cb cb, void *data);
 
 #else /* CONFIG_BLK_DEV_ZONED */
 
@@ -225,8 +229,9 @@ static inline int sd_zbc_read_zones(struct scsi_disk *sdkp,
 
 static inline void sd_zbc_print_zones(struct scsi_disk *sdkp) {}
 
-static inline blk_status_t sd_zbc_setup_reset_cmnd(struct scsi_cmnd *cmd,
-						   bool all)
+static inline blk_status_t sd_zbc_setup_zone_mgmt_cmnd(struct scsi_cmnd *cmd,
+						       unsigned char op,
+						       bool all)
 {
 	return BLK_STS_TARGET;
 }
@@ -239,4 +244,7 @@ static inline void sd_zbc_complete(struct scsi_cmnd *cmd,
 
 #endif /* CONFIG_BLK_DEV_ZONED */
 
+void sd_print_sense_hdr(struct scsi_disk *sdkp, struct scsi_sense_hdr *sshdr);
+void sd_print_result(const struct scsi_disk *sdkp, const char *msg, int result);
+
 #endif /* _SCSI_DISK_H */
diff --git a/drivers/scsi/sd_zbc.c b/drivers/scsi/sd_zbc.c
index 1efc69e..fecaf8d 100644
--- a/drivers/scsi/sd_zbc.c
+++ b/drivers/scsi/sd_zbc.c
@@ -19,34 +19,28 @@
 
 #include "sd.h"
 
-/**
- * sd_zbc_parse_report - Convert a zone descriptor to a struct blk_zone,
- * @sdkp: The disk the report originated from
- * @buf: Address of the report zone descriptor
- * @zone: the destination zone structure
- *
- * All LBA sized values are converted to 512B sectors unit.
- */
-static void sd_zbc_parse_report(struct scsi_disk *sdkp, u8 *buf,
-				struct blk_zone *zone)
+static int sd_zbc_parse_report(struct scsi_disk *sdkp, u8 *buf,
+			       unsigned int idx, report_zones_cb cb, void *data)
 {
 	struct scsi_device *sdp = sdkp->device;
+	struct blk_zone zone = { 0 };
 
-	memset(zone, 0, sizeof(struct blk_zone));
-
-	zone->type = buf[0] & 0x0f;
-	zone->cond = (buf[1] >> 4) & 0xf;
+	zone.type = buf[0] & 0x0f;
+	zone.cond = (buf[1] >> 4) & 0xf;
 	if (buf[1] & 0x01)
-		zone->reset = 1;
+		zone.reset = 1;
 	if (buf[1] & 0x02)
-		zone->non_seq = 1;
+		zone.non_seq = 1;
 
-	zone->len = logical_to_sectors(sdp, get_unaligned_be64(&buf[8]));
-	zone->start = logical_to_sectors(sdp, get_unaligned_be64(&buf[16]));
-	zone->wp = logical_to_sectors(sdp, get_unaligned_be64(&buf[24]));
-	if (zone->type != ZBC_ZONE_TYPE_CONV &&
-	    zone->cond == ZBC_ZONE_COND_FULL)
-		zone->wp = zone->start + zone->len;
+	zone.len = logical_to_sectors(sdp, get_unaligned_be64(&buf[8]));
+	zone.capacity = zone.len;
+	zone.start = logical_to_sectors(sdp, get_unaligned_be64(&buf[16]));
+	zone.wp = logical_to_sectors(sdp, get_unaligned_be64(&buf[24]));
+	if (zone.type != ZBC_ZONE_TYPE_CONV &&
+	    zone.cond == ZBC_ZONE_COND_FULL)
+		zone.wp = zone.start + zone.len;
+
+	return cb(&zone, idx, data);
 }
 
 /**
@@ -87,9 +81,11 @@ static int sd_zbc_do_report_zones(struct scsi_disk *sdkp, unsigned char *buf,
 				  timeout, SD_MAX_RETRIES, NULL);
 	if (result) {
 		sd_printk(KERN_ERR, sdkp,
-			  "REPORT ZONES lba %llu failed with %d/%d\n",
-			  (unsigned long long)lba,
-			  host_byte(result), driver_byte(result));
+			  "REPORT ZONES start lba %llu failed\n", lba);
+		sd_print_result(sdkp, "REPORT ZONES", result);
+		if (driver_byte(result) == DRIVER_SENSE &&
+		    scsi_sense_valid(&sshdr))
+			sd_print_sense_hdr(sdkp, &sshdr);
 		return -EIO;
 	}
 
@@ -104,11 +100,6 @@ static int sd_zbc_do_report_zones(struct scsi_disk *sdkp, unsigned char *buf,
 	return 0;
 }
 
-/*
- * Maximum number of zones to get with one report zones command.
- */
-#define SD_ZBC_REPORT_MAX_ZONES		8192U
-
 /**
  * Allocate a buffer for report zones reply.
  * @sdkp: The target disk
@@ -138,63 +129,24 @@ static void *sd_zbc_alloc_report_buffer(struct scsi_disk *sdkp,
 	 * sure that the allocated buffer can always be mapped by limiting the
 	 * number of pages allocated to the HBA max segments limit.
 	 */
-	nr_zones = min(nr_zones, SD_ZBC_REPORT_MAX_ZONES);
-	bufsize = roundup((nr_zones + 1) * 64, 512);
+	nr_zones = min(nr_zones, sdkp->nr_zones);
+	bufsize = roundup((nr_zones + 1) * 64, SECTOR_SIZE);
 	bufsize = min_t(size_t, bufsize,
 			queue_max_hw_sectors(q) << SECTOR_SHIFT);
 	bufsize = min_t(size_t, bufsize, queue_max_segments(q) << PAGE_SHIFT);
 
-	buf = vzalloc(bufsize);
-	if (buf)
-		*buflen = bufsize;
-
-	return buf;
-}
-
-/**
- * sd_zbc_report_zones - Disk report zones operation.
- * @disk: The target disk
- * @sector: Start 512B sector of the report
- * @zones: Array of zone descriptors
- * @nr_zones: Number of descriptors in the array
- *
- * Execute a report zones command on the target disk.
- */
-int sd_zbc_report_zones(struct gendisk *disk, sector_t sector,
-			struct blk_zone *zones, unsigned int *nr_zones)
-{
-	struct scsi_disk *sdkp = scsi_disk(disk);
-	unsigned int i, nrz = *nr_zones;
-	unsigned char *buf;
-	size_t buflen = 0, offset = 0;
-	int ret = 0;
-
-	if (!sd_is_zoned(sdkp))
-		/* Not a zoned device */
-		return -EOPNOTSUPP;
-
-	buf = sd_zbc_alloc_report_buffer(sdkp, nrz, &buflen);
-	if (!buf)
-		return -ENOMEM;
-
-	ret = sd_zbc_do_report_zones(sdkp, buf, buflen,
-			sectors_to_logical(sdkp->device, sector), true);
-	if (ret)
-		goto out;
-
-	nrz = min(nrz, get_unaligned_be32(&buf[0]) / 64);
-	for (i = 0; i < nrz; i++) {
-		offset += 64;
-		sd_zbc_parse_report(sdkp, buf + offset, zones);
-		zones++;
+	while (bufsize >= SECTOR_SIZE) {
+		buf = __vmalloc(bufsize,
+				GFP_KERNEL | __GFP_ZERO | __GFP_NORETRY,
+				PAGE_KERNEL);
+		if (buf) {
+			*buflen = bufsize;
+			return buf;
+		}
+		bufsize >>= 1;
 	}
 
-	*nr_zones = nrz;
-
-out:
-	kvfree(buf);
-
-	return ret;
+	return NULL;
 }
 
 /**
@@ -206,14 +158,65 @@ static inline sector_t sd_zbc_zone_sectors(struct scsi_disk *sdkp)
 	return logical_to_sectors(sdkp->device, sdkp->zone_blocks);
 }
 
+int sd_zbc_report_zones(struct gendisk *disk, sector_t sector,
+			unsigned int nr_zones, report_zones_cb cb, void *data)
+{
+	struct scsi_disk *sdkp = scsi_disk(disk);
+	unsigned int nr, i;
+	unsigned char *buf;
+	size_t offset, buflen = 0;
+	int zone_idx = 0;
+	int ret;
+
+	if (!sd_is_zoned(sdkp))
+		/* Not a zoned device */
+		return -EOPNOTSUPP;
+
+	buf = sd_zbc_alloc_report_buffer(sdkp, nr_zones, &buflen);
+	if (!buf)
+		return -ENOMEM;
+
+	while (zone_idx < nr_zones && sector < get_capacity(disk)) {
+		ret = sd_zbc_do_report_zones(sdkp, buf, buflen,
+				sectors_to_logical(sdkp->device, sector), true);
+		if (ret)
+			goto out;
+
+		offset = 0;
+		nr = min(nr_zones, get_unaligned_be32(&buf[0]) / 64);
+		if (!nr)
+			break;
+
+		for (i = 0; i < nr && zone_idx < nr_zones; i++) {
+			offset += 64;
+			ret = sd_zbc_parse_report(sdkp, buf + offset, zone_idx,
+						  cb, data);
+			if (ret)
+				goto out;
+			zone_idx++;
+		}
+
+		sector += sd_zbc_zone_sectors(sdkp) * i;
+	}
+
+	ret = zone_idx;
+out:
+	kvfree(buf);
+	return ret;
+}
+
 /**
- * sd_zbc_setup_reset_cmnd - Prepare a RESET WRITE POINTER scsi command.
+ * sd_zbc_setup_zone_mgmt_cmnd - Prepare a zone ZBC_OUT command. The operations
+ *			can be RESET WRITE POINTER, OPEN, CLOSE or FINISH.
  * @cmd: the command to setup
- * @all: Reset all zones control.
+ * @op: Operation to be performed
+ * @all: All zones control
  *
- * Called from sd_init_command() for a REQ_OP_ZONE_RESET request.
+ * Called from sd_init_command() for REQ_OP_ZONE_RESET, REQ_OP_ZONE_RESET_ALL,
+ * REQ_OP_ZONE_OPEN, REQ_OP_ZONE_CLOSE or REQ_OP_ZONE_FINISH requests.
  */
-blk_status_t sd_zbc_setup_reset_cmnd(struct scsi_cmnd *cmd, bool all)
+blk_status_t sd_zbc_setup_zone_mgmt_cmnd(struct scsi_cmnd *cmd,
+					 unsigned char op, bool all)
 {
 	struct request *rq = cmd->request;
 	struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
@@ -234,7 +237,7 @@ blk_status_t sd_zbc_setup_reset_cmnd(struct scsi_cmnd *cmd, bool all)
 	cmd->cmd_len = 16;
 	memset(cmd->cmnd, 0, cmd->cmd_len);
 	cmd->cmnd[0] = ZBC_OUT;
-	cmd->cmnd[1] = ZO_RESET_WRITE_POINTER;
+	cmd->cmnd[1] = op;
 	if (all)
 		cmd->cmnd[14] = 0x1;
 	else
@@ -263,14 +266,14 @@ void sd_zbc_complete(struct scsi_cmnd *cmd, unsigned int good_bytes,
 	int result = cmd->result;
 	struct request *rq = cmd->request;
 
-	if (req_op(rq) == REQ_OP_ZONE_RESET &&
+	if (op_is_zone_mgmt(req_op(rq)) &&
 	    result &&
 	    sshdr->sense_key == ILLEGAL_REQUEST &&
 	    sshdr->asc == 0x24) {
 		/*
-		 * INVALID FIELD IN CDB error: reset of a conventional
-		 * zone was attempted. Nothing to worry about, so be
-		 * quiet about the error.
+		 * INVALID FIELD IN CDB error: a zone management command was
+		 * attempted on a conventional zone. Nothing to worry about,
+		 * so be quiet about the error.
 		 */
 		rq->rq_flags |= RQF_QUIET;
 	}
@@ -335,32 +338,18 @@ static int sd_zbc_check_zoned_characteristics(struct scsi_disk *sdkp,
  * Returns the zone size in number of blocks upon success or an error code
  * upon failure.
  */
-static int sd_zbc_check_zones(struct scsi_disk *sdkp, u32 *zblocks)
+static int sd_zbc_check_zones(struct scsi_disk *sdkp, unsigned char *buf,
+			      u32 *zblocks)
 {
-	size_t bufsize, buflen;
-	unsigned int noio_flag;
 	u64 zone_blocks = 0;
-	sector_t max_lba, block = 0;
-	unsigned char *buf;
+	sector_t max_lba;
 	unsigned char *rec;
 	int ret;
-	u8 same;
 
-	/* Do all memory allocations as if GFP_NOIO was specified */
-	noio_flag = memalloc_noio_save();
-
-	/* Get a buffer */
-	buf = sd_zbc_alloc_report_buffer(sdkp, SD_ZBC_REPORT_MAX_ZONES,
-					 &bufsize);
-	if (!buf) {
-		ret = -ENOMEM;
-		goto out;
-	}
-
-	/* Do a report zone to get max_lba and the same field */
-	ret = sd_zbc_do_report_zones(sdkp, buf, bufsize, 0, false);
+	/* Do a report zone to get max_lba and the size of the first zone */
+	ret = sd_zbc_do_report_zones(sdkp, buf, SD_BUF_SIZE, 0, false);
 	if (ret)
-		goto out_free;
+		return ret;
 
 	if (sdkp->rc_basis == 0) {
 		/* The max_lba field is the capacity of this device */
@@ -375,82 +364,27 @@ static int sd_zbc_check_zones(struct scsi_disk *sdkp, u32 *zblocks)
 		}
 	}
 
-	/*
-	 * Check same field: for any value other than 0, we know that all zones
-	 * have the same size.
-	 */
-	same = buf[4] & 0x0f;
-	if (same > 0) {
-		rec = &buf[64];
-		zone_blocks = get_unaligned_be64(&rec[8]);
-		goto out;
-	}
-
-	/*
-	 * Check the size of all zones: all zones must be of
-	 * equal size, except the last zone which can be smaller
-	 * than other zones.
-	 */
-	do {
-
-		/* Parse REPORT ZONES header */
-		buflen = min_t(size_t, get_unaligned_be32(&buf[0]) + 64,
-			       bufsize);
-		rec = buf + 64;
-
-		/* Parse zone descriptors */
-		while (rec < buf + buflen) {
-			u64 this_zone_blocks = get_unaligned_be64(&rec[8]);
-
-			if (zone_blocks == 0) {
-				zone_blocks = this_zone_blocks;
-			} else if (this_zone_blocks != zone_blocks &&
-				   (block + this_zone_blocks < sdkp->capacity
-				    || this_zone_blocks > zone_blocks)) {
-				zone_blocks = 0;
-				goto out;
-			}
-			block += this_zone_blocks;
-			rec += 64;
-		}
-
-		if (block < sdkp->capacity) {
-			ret = sd_zbc_do_report_zones(sdkp, buf, bufsize, block,
-						     true);
-			if (ret)
-				goto out_free;
-		}
-
-	} while (block < sdkp->capacity);
-
-out:
-	if (!zone_blocks) {
-		if (sdkp->first_scan)
-			sd_printk(KERN_NOTICE, sdkp,
-				  "Devices with non constant zone "
-				  "size are not supported\n");
-		ret = -ENODEV;
-	} else if (!is_power_of_2(zone_blocks)) {
+	/* Parse REPORT ZONES header */
+	rec = buf + 64;
+	zone_blocks = get_unaligned_be64(&rec[8]);
+	if (!zone_blocks || !is_power_of_2(zone_blocks)) {
 		if (sdkp->first_scan)
 			sd_printk(KERN_NOTICE, sdkp,
 				  "Devices with non power of 2 zone "
 				  "size are not supported\n");
-		ret = -ENODEV;
-	} else if (logical_to_sectors(sdkp->device, zone_blocks) > UINT_MAX) {
+		return -ENODEV;
+	}
+
+	if (logical_to_sectors(sdkp->device, zone_blocks) > UINT_MAX) {
 		if (sdkp->first_scan)
 			sd_printk(KERN_NOTICE, sdkp,
 				  "Zone size too large\n");
-		ret = -EFBIG;
-	} else {
-		*zblocks = zone_blocks;
-		ret = 0;
+		return -EFBIG;
 	}
 
-out_free:
-	memalloc_noio_restore(noio_flag);
-	kvfree(buf);
+	*zblocks = zone_blocks;
 
-	return ret;
+	return 0;
 }
 
 int sd_zbc_read_zones(struct scsi_disk *sdkp, unsigned char *buf)
@@ -476,13 +410,11 @@ int sd_zbc_read_zones(struct scsi_disk *sdkp, unsigned char *buf)
 	 * Check zone size: only devices with a constant zone size (except
 	 * an eventual last runt zone) that is a power of 2 are supported.
 	 */
-	ret = sd_zbc_check_zones(sdkp, &zone_blocks);
+	ret = sd_zbc_check_zones(sdkp, buf, &zone_blocks);
 	if (ret != 0)
 		goto err;
 
 	/* The drive satisfies the kernel restrictions: set it up */
-	blk_queue_chunk_sectors(sdkp->disk->queue,
-			logical_to_sectors(sdkp->device, zone_blocks));
 	blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, sdkp->disk->queue);
 	blk_queue_required_elevator_features(sdkp->disk->queue,
 					     ELEVATOR_F_ZBD_SEQ_WRITE);
diff --git a/drivers/scsi/ufs/Kconfig b/drivers/scsi/ufs/Kconfig
index 0b845ab..dd2ee07 100644
--- a/drivers/scsi/ufs/Kconfig
+++ b/drivers/scsi/ufs/Kconfig
@@ -99,6 +99,7 @@
 config SCSI_UFS_QCOM
 	tristate "QCOM specific hooks to UFS controller platform driver"
 	depends on SCSI_UFSHCD_PLATFORM && ARCH_QCOM
+	select QCOM_SCM
 	select RESET_CONTROLLER
 	help
 	  This selects the QCOM specific additions to UFSHCD platform driver.
@@ -150,3 +151,12 @@
 
 	  Select this if you need a bsg device node for your UFS controller.
 	  If unsure, say N.
+
+config SCSI_UFS_CRYPTO
+	bool "UFS Crypto Engine Support"
+	depends on SCSI_UFSHCD && BLK_INLINE_ENCRYPTION
+	help
+	  Enable Crypto Engine Support in UFS.
+	  Enabling this makes it possible for the kernel to use the crypto
+	  capabilities of the UFS device (if present) to perform crypto
+	  operations on data being transferred to/from the device.
diff --git a/drivers/scsi/ufs/Makefile b/drivers/scsi/ufs/Makefile
index 2a90979..17352a3 100644
--- a/drivers/scsi/ufs/Makefile
+++ b/drivers/scsi/ufs/Makefile
@@ -3,10 +3,13 @@
 obj-$(CONFIG_SCSI_UFS_DWC_TC_PCI) += tc-dwc-g210-pci.o ufshcd-dwc.o tc-dwc-g210.o
 obj-$(CONFIG_SCSI_UFS_DWC_TC_PLATFORM) += tc-dwc-g210-pltfrm.o ufshcd-dwc.o tc-dwc-g210.o
 obj-$(CONFIG_SCSI_UFS_CDNS_PLATFORM) += cdns-pltfrm.o
-obj-$(CONFIG_SCSI_UFS_QCOM) += ufs-qcom.o
+obj-$(CONFIG_SCSI_UFS_QCOM) += ufs_qcom.o
+ufs_qcom-y += ufs-qcom.o
+ufs_qcom-$(CONFIG_SCSI_UFS_CRYPTO) += ufs-qcom-ice.o
 obj-$(CONFIG_SCSI_UFSHCD) += ufshcd-core.o
 ufshcd-core-y				+= ufshcd.o ufs-sysfs.o
 ufshcd-core-$(CONFIG_SCSI_UFS_BSG)	+= ufs_bsg.o
+ufshcd-core-$(CONFIG_SCSI_UFS_CRYPTO) += ufshcd-crypto.o
 obj-$(CONFIG_SCSI_UFSHCD_PCI) += ufshcd-pci.o
 obj-$(CONFIG_SCSI_UFSHCD_PLATFORM) += ufshcd-pltfrm.o
 obj-$(CONFIG_SCSI_UFS_HISI) += ufs-hisi.o
diff --git a/drivers/scsi/ufs/cdns-pltfrm.c b/drivers/scsi/ufs/cdns-pltfrm.c
index 6feeb0f..7669527 100644
--- a/drivers/scsi/ufs/cdns-pltfrm.c
+++ b/drivers/scsi/ufs/cdns-pltfrm.c
@@ -97,7 +97,7 @@ static int cdns_ufs_link_startup_notify(struct ufs_hba *hba,
 	 * and device TX LCC are disabled once link startup is
 	 * completed.
 	 */
-	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_LOCAL_TX_LCC_ENABLE), 0);
+	ufshcd_disable_host_tx_lcc(hba);
 
 	/*
 	 * Disabling Autohibern8 feature in cadence UFS
diff --git a/drivers/scsi/ufs/ufs-hisi.c b/drivers/scsi/ufs/ufs-hisi.c
index 6bbb167..0eb70b2 100644
--- a/drivers/scsi/ufs/ufs-hisi.c
+++ b/drivers/scsi/ufs/ufs-hisi.c
@@ -235,7 +235,7 @@ static int ufs_hisi_link_startup_pre_change(struct ufs_hba *hba)
 	ufshcd_writel(hba, reg, REG_AUTO_HIBERNATE_IDLE_TIMER);
 
 	/* Unipro PA_Local_TX_LCC_Enable */
-	ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x155E, 0x0), 0x0);
+	ufshcd_disable_host_tx_lcc(hba);
 	/* close Unipro VS_Mk2ExtnSupport */
 	ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0xD0AB, 0x0), 0x0);
 	ufshcd_dme_get(hba, UIC_ARG_MIB_SEL(0xD0AB, 0x0), &value);
diff --git a/drivers/scsi/ufs/ufs-mediatek.c b/drivers/scsi/ufs/ufs-mediatek.c
index d4a8be5..0b75572 100644
--- a/drivers/scsi/ufs/ufs-mediatek.c
+++ b/drivers/scsi/ufs/ufs-mediatek.c
@@ -6,17 +6,67 @@
  *	Peter Wang <peter.wang@mediatek.com>
  */
 
+#include <linux/arm-smccc.h>
+#include <linux/bitfield.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
+#include <linux/of_device.h>
 #include <linux/phy/phy.h>
 #include <linux/platform_device.h>
+#include <linux/regulator/consumer.h>
+#include <linux/reset.h>
+#include <linux/soc/mediatek/mtk_sip_svc.h>
 
 #include "ufshcd.h"
+#include "ufshcd-crypto.h"
 #include "ufshcd-pltfrm.h"
 #include "ufs_quirks.h"
 #include "unipro.h"
 #include "ufs-mediatek.h"
 
+#define ufs_mtk_smc(cmd, val, res) \
+	arm_smccc_smc(MTK_SIP_UFS_CONTROL, \
+		      cmd, val, 0, 0, 0, 0, 0, &(res))
+
+#define ufs_mtk_va09_pwr_ctrl(res, on) \
+	ufs_mtk_smc(UFS_MTK_SIP_VA09_PWR_CTRL, on, res)
+
+#define ufs_mtk_crypto_ctrl(res, enable) \
+	ufs_mtk_smc(UFS_MTK_SIP_CRYPTO_CTRL, enable, res)
+
+#define ufs_mtk_ref_clk_notify(on, res) \
+	ufs_mtk_smc(UFS_MTK_SIP_REF_CLK_NOTIFICATION, on, res)
+
+#define ufs_mtk_device_reset_ctrl(high, res) \
+	ufs_mtk_smc(UFS_MTK_SIP_DEVICE_RESET, high, res)
+
+static struct ufs_dev_fix ufs_mtk_dev_fixups[] = {
+	UFS_FIX(UFS_VENDOR_MICRON, UFS_ANY_MODEL,
+		UFS_DEVICE_QUIRK_DELAY_AFTER_LPM),
+	UFS_FIX(UFS_VENDOR_SKHYNIX, "H9HQ21AFAMZDAR",
+		UFS_DEVICE_QUIRK_SUPPORT_EXTENDED_FEATURES),
+	END_FIX
+};
+
+static const struct of_device_id ufs_mtk_of_match[] = {
+	{ .compatible = "mediatek,mt8183-ufshci" },
+	{},
+};
+
+static bool ufs_mtk_is_boost_crypt_enabled(struct ufs_hba *hba)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+
+	return !!(host->caps & UFS_MTK_CAP_BOOST_CRYPT_ENGINE);
+}
+
+static bool ufs_mtk_is_va09_supported(struct ufs_hba *hba)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+
+	return !!(host->caps & UFS_MTK_CAP_VA09_PWR_CTRL);
+}
+
 static void ufs_mtk_cfg_unipro_cg(struct ufs_hba *hba, bool enable)
 {
 	u32 tmp;
@@ -53,6 +103,89 @@ static void ufs_mtk_cfg_unipro_cg(struct ufs_hba *hba, bool enable)
 	}
 }
 
+static void ufs_mtk_crypto_enable(struct ufs_hba *hba)
+{
+	struct arm_smccc_res res;
+
+	ufs_mtk_crypto_ctrl(res, 1);
+	if (res.a0) {
+		dev_info(hba->dev, "%s: crypto enable failed, err: %lu\n",
+			 __func__, res.a0);
+		hba->caps &= ~UFSHCD_CAP_CRYPTO;
+	}
+}
+
+static void ufs_mtk_host_reset(struct ufs_hba *hba)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+
+	reset_control_assert(host->hci_reset);
+	reset_control_assert(host->crypto_reset);
+	reset_control_assert(host->unipro_reset);
+
+	usleep_range(100, 110);
+
+	reset_control_deassert(host->unipro_reset);
+	reset_control_deassert(host->crypto_reset);
+	reset_control_deassert(host->hci_reset);
+}
+
+static void ufs_mtk_init_reset_control(struct ufs_hba *hba,
+				       struct reset_control **rc,
+				       char *str)
+{
+	*rc = devm_reset_control_get(hba->dev, str);
+	if (IS_ERR(*rc)) {
+		dev_info(hba->dev, "Failed to get reset control %s: %ld\n",
+			 str, PTR_ERR(*rc));
+		*rc = NULL;
+	}
+}
+
+static void ufs_mtk_init_reset(struct ufs_hba *hba)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+
+	ufs_mtk_init_reset_control(hba, &host->hci_reset,
+				   "hci_rst");
+	ufs_mtk_init_reset_control(hba, &host->unipro_reset,
+				   "unipro_rst");
+	ufs_mtk_init_reset_control(hba, &host->crypto_reset,
+				   "crypto_rst");
+}
+
+static int ufs_mtk_hce_enable_notify(struct ufs_hba *hba,
+				     enum ufs_notify_change_status status)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	unsigned long flags;
+
+	if (status == PRE_CHANGE) {
+		if (host->unipro_lpm) {
+			hba->vps->hba_enable_delay_us = 0;
+		} else {
+			hba->vps->hba_enable_delay_us = 600;
+			ufs_mtk_host_reset(hba);
+		}
+
+		if (hba->caps & UFSHCD_CAP_CRYPTO)
+			ufs_mtk_crypto_enable(hba);
+
+		if (host->caps & UFS_MTK_CAP_DISABLE_AH8) {
+			spin_lock_irqsave(hba->host->host_lock, flags);
+			ufshcd_writel(hba, 0,
+				      REG_AUTO_HIBERNATE_IDLE_TIMER);
+			spin_unlock_irqrestore(hba->host->host_lock,
+					       flags);
+
+			hba->capabilities &= ~MASK_AUTO_HIBERN8_SUPPORT;
+			hba->ahit = 0;
+		}
+	}
+
+	return 0;
+}
+
 static int ufs_mtk_bind_mphy(struct ufs_hba *hba)
 {
 	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
@@ -73,15 +206,314 @@ static int ufs_mtk_bind_mphy(struct ufs_hba *hba)
 			__func__, err);
 	} else if (IS_ERR(host->mphy)) {
 		err = PTR_ERR(host->mphy);
-		dev_info(dev, "%s: PHY get failed %d\n", __func__, err);
+		if (err != -ENODEV) {
+			dev_info(dev, "%s: PHY get failed %d\n", __func__,
+				 err);
+		}
 	}
 
 	if (err)
 		host->mphy = NULL;
+	/*
+	 * Allow unbound mphy because not every platform needs specific
+	 * mphy control.
+	 */
+	if (err == -ENODEV)
+		err = 0;
 
 	return err;
 }
 
+static int ufs_mtk_setup_ref_clk(struct ufs_hba *hba, bool on)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	struct arm_smccc_res res;
+	ktime_t timeout, time_checked;
+	u32 value;
+
+	if (host->ref_clk_enabled == on)
+		return 0;
+
+	if (on) {
+		ufs_mtk_ref_clk_notify(on, res);
+		ufshcd_delay_us(host->ref_clk_ungating_wait_us, 10);
+		ufshcd_writel(hba, REFCLK_REQUEST, REG_UFS_REFCLK_CTRL);
+	} else {
+		ufshcd_writel(hba, REFCLK_RELEASE, REG_UFS_REFCLK_CTRL);
+	}
+
+	/* Wait for ack */
+	timeout = ktime_add_us(ktime_get(), REFCLK_REQ_TIMEOUT_US);
+	do {
+		time_checked = ktime_get();
+		value = ufshcd_readl(hba, REG_UFS_REFCLK_CTRL);
+
+		/* Wait until ack bit equals to req bit */
+		if (((value & REFCLK_ACK) >> 1) == (value & REFCLK_REQUEST))
+			goto out;
+
+		usleep_range(100, 200);
+	} while (ktime_before(time_checked, timeout));
+
+	dev_err(hba->dev, "missing ack of refclk req, reg: 0x%x\n", value);
+
+	ufs_mtk_ref_clk_notify(host->ref_clk_enabled, res);
+
+	return -ETIMEDOUT;
+
+out:
+	host->ref_clk_enabled = on;
+	if (!on) {
+		ufshcd_delay_us(host->ref_clk_gating_wait_us, 10);
+		ufs_mtk_ref_clk_notify(on, res);
+	}
+
+	return 0;
+}
+
+static void ufs_mtk_setup_ref_clk_wait_us(struct ufs_hba *hba,
+					  u16 gating_us, u16 ungating_us)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+
+	if (hba->dev_info.clk_gating_wait_us) {
+		host->ref_clk_gating_wait_us =
+			hba->dev_info.clk_gating_wait_us;
+	} else {
+		host->ref_clk_gating_wait_us = gating_us;
+	}
+
+	host->ref_clk_ungating_wait_us = ungating_us;
+}
+
+int ufs_mtk_wait_link_state(struct ufs_hba *hba, u32 state,
+			    unsigned long max_wait_ms)
+{
+	ktime_t timeout, time_checked;
+	u32 val;
+
+	timeout = ktime_add_ms(ktime_get(), max_wait_ms);
+	do {
+		time_checked = ktime_get();
+		ufshcd_writel(hba, 0x20, REG_UFS_DEBUG_SEL);
+		val = ufshcd_readl(hba, REG_UFS_PROBE);
+		val = val >> 28;
+
+		if (val == state)
+			return 0;
+
+		/* Sleep for max. 200us */
+		usleep_range(100, 200);
+	} while (ktime_before(time_checked, timeout));
+
+	if (val == state)
+		return 0;
+
+	return -ETIMEDOUT;
+}
+
+static int ufs_mtk_mphy_power_on(struct ufs_hba *hba, bool on)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	struct phy *mphy = host->mphy;
+	struct arm_smccc_res res;
+	int ret = 0;
+
+	if (!mphy || !(on ^ host->mphy_powered_on))
+		return 0;
+
+	if (on) {
+		if (ufs_mtk_is_va09_supported(hba)) {
+			ret = regulator_enable(host->reg_va09);
+			if (ret < 0)
+				goto out;
+			/* wait 200 us to stablize VA09 */
+			usleep_range(200, 210);
+			ufs_mtk_va09_pwr_ctrl(res, 1);
+		}
+		phy_power_on(mphy);
+	} else {
+		phy_power_off(mphy);
+		if (ufs_mtk_is_va09_supported(hba)) {
+			ufs_mtk_va09_pwr_ctrl(res, 0);
+			ret = regulator_disable(host->reg_va09);
+			if (ret < 0)
+				goto out;
+		}
+	}
+out:
+	if (ret) {
+		dev_info(hba->dev,
+			 "failed to %s va09: %d\n",
+			 on ? "enable" : "disable",
+			 ret);
+	} else {
+		host->mphy_powered_on = on;
+	}
+
+	return ret;
+}
+
+static int ufs_mtk_get_host_clk(struct device *dev, const char *name,
+				struct clk **clk_out)
+{
+	struct clk *clk;
+	int err = 0;
+
+	clk = devm_clk_get(dev, name);
+	if (IS_ERR(clk))
+		err = PTR_ERR(clk);
+	else
+		*clk_out = clk;
+
+	return err;
+}
+
+static void ufs_mtk_boost_crypt(struct ufs_hba *hba, bool boost)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	struct ufs_mtk_crypt_cfg *cfg;
+	struct regulator *reg;
+	int volt, ret;
+
+	if (!ufs_mtk_is_boost_crypt_enabled(hba))
+		return;
+
+	cfg = host->crypt;
+	volt = cfg->vcore_volt;
+	reg = cfg->reg_vcore;
+
+	ret = clk_prepare_enable(cfg->clk_crypt_mux);
+	if (ret) {
+		dev_info(hba->dev, "clk_prepare_enable(): %d\n",
+			 ret);
+		return;
+	}
+
+	if (boost) {
+		ret = regulator_set_voltage(reg, volt, INT_MAX);
+		if (ret) {
+			dev_info(hba->dev,
+				 "failed to set vcore to %d\n", volt);
+			goto out;
+		}
+
+		ret = clk_set_parent(cfg->clk_crypt_mux,
+				     cfg->clk_crypt_perf);
+		if (ret) {
+			dev_info(hba->dev,
+				 "failed to set clk_crypt_perf\n");
+			regulator_set_voltage(reg, 0, INT_MAX);
+			goto out;
+		}
+	} else {
+		ret = clk_set_parent(cfg->clk_crypt_mux,
+				     cfg->clk_crypt_lp);
+		if (ret) {
+			dev_info(hba->dev,
+				 "failed to set clk_crypt_lp\n");
+			goto out;
+		}
+
+		ret = regulator_set_voltage(reg, 0, INT_MAX);
+		if (ret) {
+			dev_info(hba->dev,
+				 "failed to set vcore to MIN\n");
+		}
+	}
+out:
+	clk_disable_unprepare(cfg->clk_crypt_mux);
+}
+
+static int ufs_mtk_init_host_clk(struct ufs_hba *hba, const char *name,
+				 struct clk **clk)
+{
+	int ret;
+
+	ret = ufs_mtk_get_host_clk(hba->dev, name, clk);
+	if (ret) {
+		dev_info(hba->dev, "%s: failed to get %s: %d", __func__,
+			 name, ret);
+	}
+
+	return ret;
+}
+
+static void ufs_mtk_init_boost_crypt(struct ufs_hba *hba)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	struct ufs_mtk_crypt_cfg *cfg;
+	struct device *dev = hba->dev;
+	struct regulator *reg;
+	u32 volt;
+
+	host->crypt = devm_kzalloc(dev, sizeof(*(host->crypt)),
+				   GFP_KERNEL);
+	if (!host->crypt)
+		goto disable_caps;
+
+	reg = devm_regulator_get_optional(dev, "dvfsrc-vcore");
+	if (IS_ERR(reg)) {
+		dev_info(dev, "failed to get dvfsrc-vcore: %ld",
+			 PTR_ERR(reg));
+		goto disable_caps;
+	}
+
+	if (of_property_read_u32(dev->of_node, "boost-crypt-vcore-min",
+				 &volt)) {
+		dev_info(dev, "failed to get boost-crypt-vcore-min");
+		goto disable_caps;
+	}
+
+	cfg = host->crypt;
+	if (ufs_mtk_init_host_clk(hba, "crypt_mux",
+				  &cfg->clk_crypt_mux))
+		goto disable_caps;
+
+	if (ufs_mtk_init_host_clk(hba, "crypt_lp",
+				  &cfg->clk_crypt_lp))
+		goto disable_caps;
+
+	if (ufs_mtk_init_host_clk(hba, "crypt_perf",
+				  &cfg->clk_crypt_perf))
+		goto disable_caps;
+
+	cfg->reg_vcore = reg;
+	cfg->vcore_volt = volt;
+	host->caps |= UFS_MTK_CAP_BOOST_CRYPT_ENGINE;
+
+disable_caps:
+	return;
+}
+
+static void ufs_mtk_init_va09_pwr_ctrl(struct ufs_hba *hba)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+
+	host->reg_va09 = regulator_get(hba->dev, "va09");
+	if (!host->reg_va09)
+		dev_info(hba->dev, "failed to get va09");
+	else
+		host->caps |= UFS_MTK_CAP_VA09_PWR_CTRL;
+}
+
+static void ufs_mtk_init_host_caps(struct ufs_hba *hba)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	struct device_node *np = hba->dev->of_node;
+
+	if (of_property_read_bool(np, "mediatek,ufs-boost-crypt"))
+		ufs_mtk_init_boost_crypt(hba);
+
+	if (of_property_read_bool(np, "mediatek,ufs-support-va09"))
+		ufs_mtk_init_va09_pwr_ctrl(hba);
+
+	if (of_property_read_bool(np, "mediatek,ufs-disable-ah8"))
+		host->caps |= UFS_MTK_CAP_DISABLE_AH8;
+
+	dev_info(hba->dev, "caps: 0x%x", host->caps);
+}
+
 /**
  * ufs_mtk_setup_clocks - enables/disable clocks
  * @hba: host controller instance
@@ -94,7 +526,8 @@ static int ufs_mtk_setup_clocks(struct ufs_hba *hba, bool on,
 				enum ufs_notify_change_status status)
 {
 	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
-	int ret = -EINVAL;
+	bool clk_pwr_off = false;
+	int ret = 0;
 
 	/*
 	 * In case ufs_mtk_init() is not yet done, simply ignore.
@@ -104,20 +537,56 @@ static int ufs_mtk_setup_clocks(struct ufs_hba *hba, bool on,
 	if (!host)
 		return 0;
 
-	switch (status) {
-	case PRE_CHANGE:
-		if (!on)
-			ret = phy_power_off(host->mphy);
-		break;
-	case POST_CHANGE:
-		if (on)
-			ret = phy_power_on(host->mphy);
-		break;
+	if (!on && status == PRE_CHANGE) {
+		if (ufshcd_is_link_off(hba)) {
+			clk_pwr_off = true;
+		} else if (ufshcd_is_link_hibern8(hba) ||
+			 (!ufshcd_can_hibern8_during_gating(hba) &&
+			 ufshcd_is_auto_hibern8_enabled(hba))) {
+			/*
+			 * Gate ref-clk and poweroff mphy if link state is in
+			 * OFF or Hibern8 by either Auto-Hibern8 or
+			 * ufshcd_link_state_transition().
+			 */
+			ret = ufs_mtk_wait_link_state(hba,
+						      VS_LINK_HIBERN8,
+						      15);
+			if (!ret)
+				clk_pwr_off = true;
+		}
+
+		if (clk_pwr_off) {
+			ufs_mtk_boost_crypt(hba, on);
+			ufs_mtk_setup_ref_clk(hba, on);
+			phy_power_off(host->mphy);
+		}
+	} else if (on && status == POST_CHANGE) {
+		phy_power_on(host->mphy);
+		ufs_mtk_setup_ref_clk(hba, on);
+		ufs_mtk_boost_crypt(hba, on);
 	}
 
 	return ret;
 }
 
+static void ufs_mtk_get_controller_version(struct ufs_hba *hba)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	int ret, ver = 0;
+
+	if (host->hw_ver.major)
+		return;
+
+	/* Set default (minimum) version anyway */
+	host->hw_ver.major = 2;
+
+	ret = ufshcd_dme_get(hba, UIC_ARG_MIB(PA_LOCALVERINFO), &ver);
+	if (!ret) {
+		if (ver >= UFS_UNIPRO_VER_1_8)
+			host->hw_ver.major = 3;
+	}
+}
+
 /**
  * ufs_mtk_init - find other essential mmio bases
  * @hba: host controller instance
@@ -130,8 +599,9 @@ static int ufs_mtk_setup_clocks(struct ufs_hba *hba, bool on,
  */
 static int ufs_mtk_init(struct ufs_hba *hba)
 {
-	struct ufs_mtk_host *host;
+	const struct of_device_id *id;
 	struct device *dev = hba->dev;
+	struct ufs_mtk_host *host;
 	int err = 0;
 
 	host = devm_kzalloc(dev, sizeof(*host), GFP_KERNEL);
@@ -144,10 +614,37 @@ static int ufs_mtk_init(struct ufs_hba *hba)
 	host->hba = hba;
 	ufshcd_set_variant(hba, host);
 
+	id = of_match_device(ufs_mtk_of_match, dev);
+	if (!id) {
+		err = -EINVAL;
+		goto out;
+	}
+
+	/* Initialize host capability */
+	ufs_mtk_init_host_caps(hba);
+
 	err = ufs_mtk_bind_mphy(hba);
 	if (err)
 		goto out_variant_clear;
 
+	ufs_mtk_init_reset(hba);
+
+	/* Enable runtime autosuspend */
+	hba->caps |= UFSHCD_CAP_RPM_AUTOSUSPEND;
+
+	/* Enable clock-gating */
+	hba->caps |= UFSHCD_CAP_CLK_GATING;
+
+	/* Enable inline encryption */
+	hba->caps |= UFSHCD_CAP_CRYPTO;
+
+	/* Enable WriteBooster */
+	hba->caps |= UFSHCD_CAP_WB_EN;
+	hba->vps->wb_flush_threshold = UFS_WB_BUF_REMAIN_PERCENT(80);
+
+	if (host->caps & UFS_MTK_CAP_DISABLE_AH8)
+		hba->caps |= UFSHCD_CAP_HIBERN8_WITH_CLK_GATING;
+
 	/*
 	 * ufshcd_vops_init() is invoked after
 	 * ufshcd_setup_clock(true) in ufshcd_hba_init() thus
@@ -155,6 +652,7 @@ static int ufs_mtk_init(struct ufs_hba *hba)
 	 *
 	 * Enable phy clocks specifically here.
 	 */
+	ufs_mtk_mphy_power_on(hba, true);
 	ufs_mtk_setup_clocks(hba, true, POST_CHANGE);
 
 	goto out;
@@ -169,7 +667,9 @@ static int ufs_mtk_pre_pwr_change(struct ufs_hba *hba,
 				  struct ufs_pa_layer_attr *dev_max_params,
 				  struct ufs_pa_layer_attr *dev_req_params)
 {
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
 	struct ufs_dev_params host_cap;
+	u32 adapt_val;
 	int ret;
 
 	host_cap.tx_lanes = UFS_MTK_LIMIT_NUM_LANES_TX;
@@ -194,6 +694,16 @@ static int ufs_mtk_pre_pwr_change(struct ufs_hba *hba,
 			__func__);
 	}
 
+	if (host->hw_ver.major >= 3) {
+		if (dev_req_params->gear_tx == UFS_HS_G4)
+			adapt_val = PA_INITIAL_ADAPT;
+		else
+			adapt_val = PA_NO_ADAPT;
+		ufshcd_dme_set(hba,
+			       UIC_ARG_MIB(PA_TXHSADAPTTYPE),
+			       adapt_val);
+	}
+
 	return ret;
 }
 
@@ -219,11 +729,46 @@ static int ufs_mtk_pwr_change_notify(struct ufs_hba *hba,
 	return ret;
 }
 
+static int ufs_mtk_unipro_set_lpm(struct ufs_hba *hba, bool lpm)
+{
+	int ret;
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+
+	ret = ufshcd_dme_set(hba,
+			     UIC_ARG_MIB_SEL(VS_UNIPROPOWERDOWNCONTROL, 0),
+			     lpm ? 1 : 0);
+	if (!ret || !lpm) {
+		/*
+		 * Forcibly set as non-LPM mode if UIC commands is failed
+		 * to use default hba_enable_delay_us value for re-enabling
+		 * the host.
+		 */
+		host->unipro_lpm = lpm;
+	}
+
+	return ret;
+}
+
 static int ufs_mtk_pre_link(struct ufs_hba *hba)
 {
 	int ret;
 	u32 tmp;
 
+	ufs_mtk_get_controller_version(hba);
+
+	ret = ufs_mtk_unipro_set_lpm(hba, false);
+	if (ret)
+		return ret;
+
+	/*
+	 * Setting PA_Local_TX_LCC_Enable to 0 before link startup
+	 * to make sure that both host and device TX LCC are disabled
+	 * once link startup is completed.
+	 */
+	ret = ufshcd_disable_host_tx_lcc(hba);
+	if (ret)
+		return ret;
+
 	/* disable deep stall */
 	ret = ufshcd_dme_get(hba, UIC_ARG_MIB(VS_SAVEPOWERCONTROL), &tmp);
 	if (ret)
@@ -236,14 +781,37 @@ static int ufs_mtk_pre_link(struct ufs_hba *hba)
 	return ret;
 }
 
+static void ufs_mtk_setup_clk_gating(struct ufs_hba *hba)
+{
+	unsigned long flags;
+	u32 ah_ms;
+
+	if (ufshcd_is_clkgating_allowed(hba)) {
+		if (ufshcd_is_auto_hibern8_supported(hba) && hba->ahit)
+			ah_ms = FIELD_GET(UFSHCI_AHIBERN8_TIMER_MASK,
+					  hba->ahit);
+		else
+			ah_ms = 10;
+		spin_lock_irqsave(hba->host->host_lock, flags);
+		hba->clk_gating.delay_ms = ah_ms + 5;
+		spin_unlock_irqrestore(hba->host->host_lock, flags);
+	}
+}
+
 static int ufs_mtk_post_link(struct ufs_hba *hba)
 {
-	/* disable device LCC */
-	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_LOCAL_TX_LCC_ENABLE), 0);
-
 	/* enable unipro clock gating feature */
 	ufs_mtk_cfg_unipro_cg(hba, true);
 
+	/* configure auto-hibern8 timer to 10ms */
+	if (ufshcd_is_auto_hibern8_supported(hba)) {
+		ufshcd_auto_hibern8_update(hba,
+			FIELD_PREP(UFSHCI_AHIBERN8_TIMER_MASK, 10) |
+			FIELD_PREP(UFSHCI_AHIBERN8_SCALE_MASK, 3));
+	}
+
+	ufs_mtk_setup_clk_gating(hba);
+
 	return 0;
 }
 
@@ -267,50 +835,197 @@ static int ufs_mtk_link_startup_notify(struct ufs_hba *hba,
 	return ret;
 }
 
-static int ufs_mtk_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
+static void ufs_mtk_device_reset(struct ufs_hba *hba)
 {
-	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	struct arm_smccc_res res;
 
-	if (ufshcd_is_link_hibern8(hba))
-		phy_power_off(host->mphy);
+	ufs_mtk_device_reset_ctrl(0, res);
+
+	/*
+	 * The reset signal is active low. UFS devices shall detect
+	 * more than or equal to 1us of positive or negative RST_n
+	 * pulse width.
+	 *
+	 * To be on safe side, keep the reset low for at least 10us.
+	 */
+	usleep_range(10, 15);
+
+	ufs_mtk_device_reset_ctrl(1, res);
+
+	/* Some devices may need time to respond to rst_n */
+	usleep_range(10000, 15000);
+
+	dev_info(hba->dev, "device reset done\n");
+}
+
+static int ufs_mtk_link_set_hpm(struct ufs_hba *hba)
+{
+	int err;
+
+	err = ufshcd_hba_enable(hba);
+	if (err)
+		return err;
+
+	err = ufs_mtk_unipro_set_lpm(hba, false);
+	if (err)
+		return err;
+
+	err = ufshcd_uic_hibern8_exit(hba);
+	if (!err)
+		ufshcd_set_link_active(hba);
+	else
+		return err;
+
+	err = ufshcd_make_hba_operational(hba);
+	if (err)
+		return err;
 
 	return 0;
 }
 
+static int ufs_mtk_link_set_lpm(struct ufs_hba *hba)
+{
+	int err;
+
+	err = ufs_mtk_unipro_set_lpm(hba, true);
+	if (err) {
+		/* Resume UniPro state for following error recovery */
+		ufs_mtk_unipro_set_lpm(hba, false);
+		return err;
+	}
+
+	return 0;
+}
+
+static void ufs_mtk_vreg_set_lpm(struct ufs_hba *hba, bool lpm)
+{
+	if (!hba->vreg_info.vccq2)
+		return;
+
+	if (lpm & !hba->vreg_info.vcc->enabled)
+		regulator_set_mode(hba->vreg_info.vccq2->reg,
+				   REGULATOR_MODE_IDLE);
+	else if (!lpm)
+		regulator_set_mode(hba->vreg_info.vccq2->reg,
+				   REGULATOR_MODE_NORMAL);
+}
+
+static int ufs_mtk_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
+{
+	int err;
+
+	if (ufshcd_is_link_hibern8(hba)) {
+		err = ufs_mtk_link_set_lpm(hba);
+		if (err)
+			goto fail;
+	}
+
+	if (!ufshcd_is_link_active(hba)) {
+		/*
+		 * Make sure no error will be returned to prevent
+		 * ufshcd_suspend() re-enabling regulators while vreg is still
+		 * in low-power mode.
+		 */
+		ufs_mtk_vreg_set_lpm(hba, true);
+		err = ufs_mtk_mphy_power_on(hba, false);
+		if (err)
+			goto fail;
+	}
+
+	return 0;
+fail:
+	/*
+	 * Set link as off state enforcedly to trigger
+	 * ufshcd_host_reset_and_restore() in ufshcd_suspend()
+	 * for completed host reset.
+	 */
+	ufshcd_set_link_off(hba);
+	return -EAGAIN;
+}
+
 static int ufs_mtk_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 {
-	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	int err;
 
-	if (ufshcd_is_link_hibern8(hba))
-		phy_power_on(host->mphy);
+	err = ufs_mtk_mphy_power_on(hba, true);
+	if (err)
+		goto fail;
+
+	ufs_mtk_vreg_set_lpm(hba, false);
+
+	if (ufshcd_is_link_hibern8(hba)) {
+		err = ufs_mtk_link_set_hpm(hba);
+		if (err)
+			goto fail;
+	}
 
 	return 0;
+fail:
+	return ufshcd_link_recovery(hba);
 }
 
-static int ufs_mtk_apply_dev_quirks(struct ufs_hba *hba,
-				    struct ufs_dev_desc *card)
+static void ufs_mtk_dbg_register_dump(struct ufs_hba *hba)
 {
-	if (card->wmanufacturerid == UFS_VENDOR_SAMSUNG)
+	ufshcd_dump_regs(hba, REG_UFS_REFCLK_CTRL, 0x4, "Ref-Clk Ctrl ");
+
+	ufshcd_dump_regs(hba, REG_UFS_EXTREG, 0x4, "Ext Reg ");
+
+	ufshcd_dump_regs(hba, REG_UFS_MPHYCTRL,
+			 REG_UFS_REJECT_MON - REG_UFS_MPHYCTRL + 4,
+			 "MPHY Ctrl ");
+
+	/* Direct debugging information to REG_MTK_PROBE */
+	ufshcd_writel(hba, 0x20, REG_UFS_DEBUG_SEL);
+	ufshcd_dump_regs(hba, REG_UFS_PROBE, 0x4, "Debug Probe ");
+}
+
+static int ufs_mtk_apply_dev_quirks(struct ufs_hba *hba)
+{
+	struct ufs_dev_info *dev_info = &hba->dev_info;
+	u16 mid = dev_info->wmanufacturerid;
+
+	if (mid == UFS_VENDOR_SAMSUNG)
 		ufshcd_dme_set(hba, UIC_ARG_MIB(PA_TACTIVATE), 6);
 
+	/*
+	 * Decide waiting time before gating reference clock and
+	 * after ungating reference clock according to vendors'
+	 * requirements.
+	 */
+	if (mid == UFS_VENDOR_SAMSUNG)
+		ufs_mtk_setup_ref_clk_wait_us(hba, 1, 1);
+	else if (mid == UFS_VENDOR_SKHYNIX)
+		ufs_mtk_setup_ref_clk_wait_us(hba, 30, 30);
+	else if (mid == UFS_VENDOR_TOSHIBA)
+		ufs_mtk_setup_ref_clk_wait_us(hba, 100, 32);
+
 	return 0;
 }
 
-/**
+static void ufs_mtk_fixup_dev_quirks(struct ufs_hba *hba)
+{
+	ufshcd_fixup_dev_quirks(hba, ufs_mtk_dev_fixups);
+}
+
+/*
  * struct ufs_hba_mtk_vops - UFS MTK specific variant operations
  *
  * The variant operations configure the necessary controller and PHY
  * handshake during initialization.
  */
-static struct ufs_hba_variant_ops ufs_hba_mtk_vops = {
+static const struct ufs_hba_variant_ops ufs_hba_mtk_vops = {
 	.name                = "mediatek.ufshci",
 	.init                = ufs_mtk_init,
 	.setup_clocks        = ufs_mtk_setup_clocks,
+	.hce_enable_notify   = ufs_mtk_hce_enable_notify,
 	.link_startup_notify = ufs_mtk_link_startup_notify,
 	.pwr_change_notify   = ufs_mtk_pwr_change_notify,
 	.apply_dev_quirks    = ufs_mtk_apply_dev_quirks,
+	.fixup_dev_quirks    = ufs_mtk_fixup_dev_quirks,
 	.suspend             = ufs_mtk_suspend,
 	.resume              = ufs_mtk_resume,
+	.dbg_register_dump   = ufs_mtk_dbg_register_dump,
+	.device_reset        = ufs_mtk_device_reset,
 };
 
 /**
@@ -347,11 +1062,6 @@ static int ufs_mtk_remove(struct platform_device *pdev)
 	return 0;
 }
 
-static const struct of_device_id ufs_mtk_of_match[] = {
-	{ .compatible = "mediatek,mt8183-ufshci"},
-	{},
-};
-
 static const struct dev_pm_ops ufs_mtk_pm_ops = {
 	.suspend         = ufshcd_pltfrm_suspend,
 	.resume          = ufshcd_pltfrm_resume,
diff --git a/drivers/scsi/ufs/ufs-mediatek.h b/drivers/scsi/ufs/ufs-mediatek.h
index 19f8c42..ac37b11 100644
--- a/drivers/scsi/ufs/ufs-mediatek.h
+++ b/drivers/scsi/ufs/ufs-mediatek.h
@@ -6,13 +6,37 @@
 #ifndef _UFS_MEDIATEK_H
 #define _UFS_MEDIATEK_H
 
+#include <linux/bitops.h>
+#include <linux/soc/mediatek/mtk_sip_svc.h>
+
+/*
+ * Vendor specific UFSHCI Registers
+ */
+#define REG_UFS_REFCLK_CTRL         0x144
+#define REG_UFS_EXTREG              0x2100
+#define REG_UFS_MPHYCTRL            0x2200
+#define REG_UFS_REJECT_MON          0x22AC
+#define REG_UFS_DEBUG_SEL           0x22C0
+#define REG_UFS_PROBE               0x22C8
+
+/*
+ * Ref-clk control
+ *
+ * Values for register REG_UFS_REFCLK_CTRL
+ */
+#define REFCLK_RELEASE              0x0
+#define REFCLK_REQUEST              BIT(0)
+#define REFCLK_ACK                  BIT(1)
+
+#define REFCLK_REQ_TIMEOUT_US       3000
+
 /*
  * Vendor specific pre-defined parameters
  */
-#define UFS_MTK_LIMIT_NUM_LANES_RX  1
-#define UFS_MTK_LIMIT_NUM_LANES_TX  1
-#define UFS_MTK_LIMIT_HSGEAR_RX     UFS_HS_G3
-#define UFS_MTK_LIMIT_HSGEAR_TX     UFS_HS_G3
+#define UFS_MTK_LIMIT_NUM_LANES_RX  2
+#define UFS_MTK_LIMIT_NUM_LANES_TX  2
+#define UFS_MTK_LIMIT_HSGEAR_RX     UFS_HS_G4
+#define UFS_MTK_LIMIT_HSGEAR_TX     UFS_HS_G4
 #define UFS_MTK_LIMIT_PWMGEAR_RX    UFS_PWM_G4
 #define UFS_MTK_LIMIT_PWMGEAR_TX    UFS_PWM_G4
 #define UFS_MTK_LIMIT_RX_PWR_PWM    SLOW_MODE
@@ -30,6 +54,27 @@
 #define VS_UNIPROPOWERDOWNCONTROL   0xD0A8
 
 /*
+ * Vendor specific link state
+ */
+enum {
+	VS_LINK_DISABLED            = 0,
+	VS_LINK_DOWN                = 1,
+	VS_LINK_UP                  = 2,
+	VS_LINK_HIBERN8             = 3,
+	VS_LINK_LOST                = 4,
+	VS_LINK_CFG                 = 5,
+};
+
+/*
+ * SiP commands
+ */
+#define MTK_SIP_UFS_CONTROL               MTK_SIP_SMC_CMD(0x276)
+#define UFS_MTK_SIP_VA09_PWR_CTRL         BIT(0)
+#define UFS_MTK_SIP_DEVICE_RESET          BIT(1)
+#define UFS_MTK_SIP_CRYPTO_CTRL           BIT(2)
+#define UFS_MTK_SIP_REF_CLK_NOTIFICATION  BIT(3)
+
+/*
  * VS_DEBUGCLOCKENABLE
  */
 enum {
@@ -45,9 +90,44 @@ enum {
 	TX_CLK_GATE_EN          = 3,
 };
 
+/*
+ * Host capability
+ */
+enum ufs_mtk_host_caps {
+	UFS_MTK_CAP_BOOST_CRYPT_ENGINE         = 1 << 0,
+	UFS_MTK_CAP_VA09_PWR_CTRL              = 1 << 1,
+	UFS_MTK_CAP_DISABLE_AH8                = 1 << 2,
+};
+
+struct ufs_mtk_crypt_cfg {
+	struct regulator *reg_vcore;
+	struct clk *clk_crypt_perf;
+	struct clk *clk_crypt_mux;
+	struct clk *clk_crypt_lp;
+	int vcore_volt;
+};
+
+struct ufs_mtk_hw_ver {
+	u8 step;
+	u8 minor;
+	u8 major;
+};
+
 struct ufs_mtk_host {
-	struct ufs_hba *hba;
 	struct phy *mphy;
+	struct regulator *reg_va09;
+	struct reset_control *hci_reset;
+	struct reset_control *unipro_reset;
+	struct reset_control *crypto_reset;
+	struct ufs_hba *hba;
+	struct ufs_mtk_crypt_cfg *crypt;
+	struct ufs_mtk_hw_ver hw_ver;
+	enum ufs_mtk_host_caps caps;
+	bool mphy_powered_on;
+	bool unipro_lpm;
+	bool ref_clk_enabled;
+	u16 ref_clk_ungating_wait_us;
+	u16 ref_clk_gating_wait_us;
 };
 
 #endif /* !_UFS_MEDIATEK_H */
diff --git a/drivers/scsi/ufs/ufs-qcom-ice.c b/drivers/scsi/ufs/ufs-qcom-ice.c
new file mode 100644
index 0000000..bbb0ad7
--- /dev/null
+++ b/drivers/scsi/ufs/ufs-qcom-ice.c
@@ -0,0 +1,245 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Qualcomm ICE (Inline Crypto Engine) support.
+ *
+ * Copyright (c) 2014-2019, The Linux Foundation. All rights reserved.
+ * Copyright 2019 Google LLC
+ */
+
+#include <linux/platform_device.h>
+#include <linux/qcom_scm.h>
+
+#include "ufshcd-crypto.h"
+#include "ufs-qcom.h"
+
+#define AES_256_XTS_KEY_SIZE			64
+
+/* QCOM ICE registers */
+
+#define QCOM_ICE_REG_CONTROL			0x0000
+#define QCOM_ICE_REG_RESET			0x0004
+#define QCOM_ICE_REG_VERSION			0x0008
+#define QCOM_ICE_REG_FUSE_SETTING		0x0010
+#define QCOM_ICE_REG_PARAMETERS_1		0x0014
+#define QCOM_ICE_REG_PARAMETERS_2		0x0018
+#define QCOM_ICE_REG_PARAMETERS_3		0x001C
+#define QCOM_ICE_REG_PARAMETERS_4		0x0020
+#define QCOM_ICE_REG_PARAMETERS_5		0x0024
+
+/* QCOM ICE v3.X only */
+#define QCOM_ICE_GENERAL_ERR_STTS		0x0040
+#define QCOM_ICE_INVALID_CCFG_ERR_STTS		0x0030
+#define QCOM_ICE_GENERAL_ERR_MASK		0x0044
+
+/* QCOM ICE v2.X only */
+#define QCOM_ICE_REG_NON_SEC_IRQ_STTS		0x0040
+#define QCOM_ICE_REG_NON_SEC_IRQ_MASK		0x0044
+
+#define QCOM_ICE_REG_NON_SEC_IRQ_CLR		0x0048
+#define QCOM_ICE_REG_STREAM1_ERROR_SYNDROME1	0x0050
+#define QCOM_ICE_REG_STREAM1_ERROR_SYNDROME2	0x0054
+#define QCOM_ICE_REG_STREAM2_ERROR_SYNDROME1	0x0058
+#define QCOM_ICE_REG_STREAM2_ERROR_SYNDROME2	0x005C
+#define QCOM_ICE_REG_STREAM1_BIST_ERROR_VEC	0x0060
+#define QCOM_ICE_REG_STREAM2_BIST_ERROR_VEC	0x0064
+#define QCOM_ICE_REG_STREAM1_BIST_FINISH_VEC	0x0068
+#define QCOM_ICE_REG_STREAM2_BIST_FINISH_VEC	0x006C
+#define QCOM_ICE_REG_BIST_STATUS		0x0070
+#define QCOM_ICE_REG_BYPASS_STATUS		0x0074
+#define QCOM_ICE_REG_ADVANCED_CONTROL		0x1000
+#define QCOM_ICE_REG_ENDIAN_SWAP		0x1004
+#define QCOM_ICE_REG_TEST_BUS_CONTROL		0x1010
+#define QCOM_ICE_REG_TEST_BUS_REG		0x1014
+
+/* BIST ("built-in self-test"?) status flags */
+#define QCOM_ICE_BIST_STATUS_MASK		0xF0000000
+
+#define QCOM_ICE_FUSE_SETTING_MASK		0x1
+#define QCOM_ICE_FORCE_HW_KEY0_SETTING_MASK	0x2
+#define QCOM_ICE_FORCE_HW_KEY1_SETTING_MASK	0x4
+
+#define qcom_ice_writel(host, val, reg)	\
+	writel((val), (host)->ice_mmio + (reg))
+#define qcom_ice_readl(host, reg)	\
+	readl((host)->ice_mmio + (reg))
+
+static bool qcom_ice_supported(struct ufs_qcom_host *host)
+{
+	struct device *dev = host->hba->dev;
+	u32 regval = qcom_ice_readl(host, QCOM_ICE_REG_VERSION);
+	int major = regval >> 24;
+	int minor = (regval >> 16) & 0xFF;
+	int step = regval & 0xFFFF;
+
+	/* For now this driver only supports ICE version 3. */
+	if (major != 3) {
+		dev_warn(dev, "Unsupported ICE version: v%d.%d.%d\n",
+			 major, minor, step);
+		return false;
+	}
+
+	dev_info(dev, "Found QC Inline Crypto Engine (ICE) v%d.%d.%d\n",
+		 major, minor, step);
+
+	/* If fuses are blown, ICE might not work in the standard way. */
+	regval = qcom_ice_readl(host, QCOM_ICE_REG_FUSE_SETTING);
+	if (regval & (QCOM_ICE_FUSE_SETTING_MASK |
+		      QCOM_ICE_FORCE_HW_KEY0_SETTING_MASK |
+		      QCOM_ICE_FORCE_HW_KEY1_SETTING_MASK)) {
+		dev_warn(dev, "Fuses are blown; ICE is unusable!\n");
+		return false;
+	}
+	return true;
+}
+
+int ufs_qcom_ice_init(struct ufs_qcom_host *host)
+{
+	struct ufs_hba *hba = host->hba;
+	struct device *dev = hba->dev;
+	struct platform_device *pdev = to_platform_device(dev);
+	struct resource *res;
+	int err;
+
+	if (!(ufshcd_readl(hba, REG_CONTROLLER_CAPABILITIES) &
+	      MASK_CRYPTO_SUPPORT))
+		return 0;
+
+	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ice");
+	if (!res) {
+		dev_warn(dev, "ICE registers not found\n");
+		goto disable;
+	}
+
+	if (!qcom_scm_ice_available()) {
+		dev_warn(dev, "ICE SCM interface not found\n");
+		goto disable;
+	}
+
+	host->ice_mmio = devm_ioremap_resource(dev, res);
+	if (IS_ERR(host->ice_mmio)) {
+		err = PTR_ERR(host->ice_mmio);
+		dev_err(dev, "Failed to map ICE registers; err=%d\n", err);
+		return err;
+	}
+
+	if (!qcom_ice_supported(host))
+		goto disable;
+
+	return 0;
+
+disable:
+	dev_warn(dev, "Disabling inline encryption support\n");
+	hba->caps &= ~UFSHCD_CAP_CRYPTO;
+	return 0;
+}
+
+static void qcom_ice_low_power_mode_enable(struct ufs_qcom_host *host)
+{
+	u32 regval;
+
+	regval = qcom_ice_readl(host, QCOM_ICE_REG_ADVANCED_CONTROL);
+	/*
+	 * Enable low power mode sequence
+	 * [0]-0, [1]-0, [2]-0, [3]-E, [4]-0, [5]-0, [6]-0, [7]-0
+	 */
+	regval |= 0x7000;
+	qcom_ice_writel(host, regval, QCOM_ICE_REG_ADVANCED_CONTROL);
+}
+
+static void qcom_ice_optimization_enable(struct ufs_qcom_host *host)
+{
+	u32 regval;
+
+	/* ICE Optimizations Enable Sequence */
+	regval = qcom_ice_readl(host, QCOM_ICE_REG_ADVANCED_CONTROL);
+	regval |= 0xD807100;
+	/* ICE HPG requires delay before writing */
+	udelay(5);
+	qcom_ice_writel(host, regval, QCOM_ICE_REG_ADVANCED_CONTROL);
+	udelay(5);
+}
+
+int ufs_qcom_ice_enable(struct ufs_qcom_host *host)
+{
+	if (!(host->hba->caps & UFSHCD_CAP_CRYPTO))
+		return 0;
+	qcom_ice_low_power_mode_enable(host);
+	qcom_ice_optimization_enable(host);
+	return ufs_qcom_ice_resume(host);
+}
+
+/* Poll until all BIST bits are reset */
+static int qcom_ice_wait_bist_status(struct ufs_qcom_host *host)
+{
+	int count;
+	u32 reg;
+
+	for (count = 0; count < 100; count++) {
+		reg = qcom_ice_readl(host, QCOM_ICE_REG_BIST_STATUS);
+		if (!(reg & QCOM_ICE_BIST_STATUS_MASK))
+			break;
+		udelay(50);
+	}
+	if (reg)
+		return -ETIMEDOUT;
+	return 0;
+}
+
+int ufs_qcom_ice_resume(struct ufs_qcom_host *host)
+{
+	int err;
+
+	if (!(host->hba->caps & UFSHCD_CAP_CRYPTO))
+		return 0;
+
+	err = qcom_ice_wait_bist_status(host);
+	if (err) {
+		dev_err(host->hba->dev, "BIST status error (%d)\n", err);
+		return err;
+	}
+	return 0;
+}
+
+/*
+ * Program a key into a QC ICE keyslot, or evict a keyslot.  QC ICE requires
+ * vendor-specific SCM calls for this; it doesn't support the standard way.
+ */
+int ufs_qcom_ice_program_key(struct ufs_hba *hba,
+			     const union ufs_crypto_cfg_entry *cfg, int slot)
+{
+	union ufs_crypto_cap_entry cap;
+	union {
+		u8 bytes[AES_256_XTS_KEY_SIZE];
+		u32 words[AES_256_XTS_KEY_SIZE / sizeof(u32)];
+	} key;
+	int i;
+	int err;
+
+	if (!(cfg->config_enable & UFS_CRYPTO_CONFIGURATION_ENABLE))
+		return qcom_scm_ice_invalidate_key(slot);
+
+	/* Only AES-256-XTS has been tested so far. */
+	cap = hba->crypto_cap_array[cfg->crypto_cap_idx];
+	if (cap.algorithm_id != UFS_CRYPTO_ALG_AES_XTS ||
+	    cap.key_size != UFS_CRYPTO_KEY_SIZE_256) {
+		dev_err_ratelimited(hba->dev,
+				    "Unhandled crypto capability; algorithm_id=%d, key_size=%d\n",
+				    cap.algorithm_id, cap.key_size);
+		return -EINVAL;
+	}
+
+	memcpy(key.bytes, cfg->crypto_key, AES_256_XTS_KEY_SIZE);
+
+	/*
+	 * The SCM call byte-swaps the 32-bit words of the key.  So we have to
+	 * do the same, in order for the final key be correct.
+	 */
+	for (i = 0; i < ARRAY_SIZE(key.words); i++)
+		__cpu_to_be32s(&key.words[i]);
+
+	err = qcom_scm_ice_set_key(slot, key.bytes, AES_256_XTS_KEY_SIZE,
+				   QCOM_SCM_ICE_CIPHER_AES_256_XTS,
+				   cfg->data_unit_size);
+	memzero_explicit(&key, sizeof(key));
+	return err;
+}
diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c
index 4f066e3..de81fee 100644
--- a/drivers/scsi/ufs/ufs-qcom.c
+++ b/drivers/scsi/ufs/ufs-qcom.c
@@ -10,6 +10,7 @@
 #include <linux/phy/phy.h>
 #include <linux/gpio/consumer.h>
 #include <linux/reset-controller.h>
+#include <linux/devfreq.h>
 
 #include "ufshcd.h"
 #include "ufshcd-pltfrm.h"
@@ -38,7 +39,6 @@ enum {
 
 static struct ufs_qcom_host *ufs_qcom_hosts[MAX_UFS_QCOM_HOSTS];
 
-static int ufs_qcom_set_bus_vote(struct ufs_qcom_host *host, int vote);
 static void ufs_qcom_get_default_testbus_cfg(struct ufs_qcom_host *host);
 static int ufs_qcom_set_dme_vs_core_clk_ctrl_clear_div(struct ufs_hba *hba,
 						       u32 clk_cycles);
@@ -246,6 +246,44 @@ static void ufs_qcom_select_unipro_mode(struct ufs_qcom_host *host)
 	mb();
 }
 
+/**
+ * ufs_qcom_host_reset - reset host controller and PHY
+ */
+static int ufs_qcom_host_reset(struct ufs_hba *hba)
+{
+	int ret = 0;
+	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
+
+	if (!host->core_reset) {
+		dev_warn(hba->dev, "%s: reset control not set\n", __func__);
+		goto out;
+	}
+
+	ret = reset_control_assert(host->core_reset);
+	if (ret) {
+		dev_err(hba->dev, "%s: core_reset assert failed, err = %d\n",
+				 __func__, ret);
+		goto out;
+	}
+
+	/*
+	 * The hardware requirement for delay between assert/deassert
+	 * is at least 3-4 sleep clock (32.7KHz) cycles, which comes to
+	 * ~125us (4/32768). To be on the safe side add 200us delay.
+	 */
+	usleep_range(200, 210);
+
+	ret = reset_control_deassert(host->core_reset);
+	if (ret)
+		dev_err(hba->dev, "%s: core_reset deassert failed, err = %d\n",
+				 __func__, ret);
+
+	usleep_range(1000, 1100);
+
+out:
+	return ret;
+}
+
 static int ufs_qcom_power_up_sequence(struct ufs_hba *hba)
 {
 	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
@@ -254,6 +292,12 @@ static int ufs_qcom_power_up_sequence(struct ufs_hba *hba)
 	bool is_rate_B = (UFS_QCOM_LIMIT_HS_RATE == PA_HS_MODE_B)
 							? true : false;
 
+	/* Reset UFS Host Controller and PHY */
+	ret = ufs_qcom_host_reset(hba);
+	if (ret)
+		dev_warn(hba->dev, "%s: host reset returned %d\n",
+				  __func__, ret);
+
 	if (is_rate_B)
 		phy_set_mode(phy, PHY_MODE_UFS_HS_B);
 
@@ -321,7 +365,7 @@ static int ufs_qcom_hce_enable_notify(struct ufs_hba *hba,
 		/* check if UFS PHY moved from DISABLED to HIBERN8 */
 		err = ufs_qcom_check_hibern8(hba);
 		ufs_qcom_enable_hw_clk_gating(hba);
-
+		ufs_qcom_ice_enable(host);
 		break;
 	default:
 		dev_err(hba->dev, "%s: invalid status %d\n", __func__, status);
@@ -510,9 +554,7 @@ static int ufs_qcom_link_startup_notify(struct ufs_hba *hba,
 		 * completed.
 		 */
 		if (ufshcd_get_local_unipro_ver(hba) != UFS_UNIPRO_VER_1_41)
-			err = ufshcd_dme_set(hba,
-					UIC_ARG_MIB(PA_LOCAL_TX_LCC_ENABLE),
-					0);
+			err = ufshcd_disable_host_tx_lcc(hba);
 
 		break;
 	case POST_CHANGE:
@@ -572,6 +614,10 @@ static int ufs_qcom_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 			return err;
 	}
 
+	err = ufs_qcom_ice_resume(host);
+	if (err)
+		return err;
+
 	hba->is_sys_suspended = false;
 	return 0;
 }
@@ -630,7 +676,7 @@ static void ufs_qcom_get_speed_mode(struct ufs_pa_layer_attr *p, char *result)
 	}
 }
 
-static int ufs_qcom_set_bus_vote(struct ufs_qcom_host *host, int vote)
+static int __ufs_qcom_set_bus_vote(struct ufs_qcom_host *host, int vote)
 {
 	int err = 0;
 
@@ -661,7 +707,7 @@ static int ufs_qcom_update_bus_bw_vote(struct ufs_qcom_host *host)
 
 	vote = ufs_qcom_get_bus_vote(host, mode);
 	if (vote >= 0)
-		err = ufs_qcom_set_bus_vote(host, vote);
+		err = __ufs_qcom_set_bus_vote(host, vote);
 	else
 		err = vote;
 
@@ -672,6 +718,35 @@ static int ufs_qcom_update_bus_bw_vote(struct ufs_qcom_host *host)
 	return err;
 }
 
+static int ufs_qcom_set_bus_vote(struct ufs_hba *hba, bool on)
+{
+	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
+	int vote, err;
+
+	/*
+	 * In case ufs_qcom_init() is not yet done, simply ignore.
+	 * This ufs_qcom_set_bus_vote() shall be called from
+	 * ufs_qcom_init() after init is done.
+	 */
+	if (!host)
+		return 0;
+
+	if (on) {
+		vote = host->bus_vote.saved_vote;
+		if (vote == host->bus_vote.min_bw_vote)
+			ufs_qcom_update_bus_bw_vote(host);
+	} else {
+		vote = host->bus_vote.min_bw_vote;
+	}
+
+	err = __ufs_qcom_set_bus_vote(host, vote);
+	if (err)
+		dev_err(hba->dev, "%s: set bus vote failed %d\n",
+				 __func__, err);
+
+	return err;
+}
+
 static ssize_t
 show_ufs_to_mem_max_bus_bw(struct device *dev, struct device_attribute *attr,
 			char *buf)
@@ -748,7 +823,7 @@ static int ufs_qcom_update_bus_bw_vote(struct ufs_qcom_host *host)
 	return 0;
 }
 
-static int ufs_qcom_set_bus_vote(struct ufs_qcom_host *host, int vote)
+static int ufs_qcom_set_bus_vote(struct ufs_hba *host, bool on)
 {
 	return 0;
 }
@@ -773,11 +848,27 @@ static void ufs_qcom_dev_ref_clk_ctrl(struct ufs_qcom_host *host, bool enable)
 		/*
 		 * If we are here to disable this clock it might be immediately
 		 * after entering into hibern8 in which case we need to make
-		 * sure that device ref_clk is active at least 1us after the
+		 * sure that device ref_clk is active for specific time after
 		 * hibern8 enter.
 		 */
-		if (!enable)
-			udelay(1);
+		if (!enable) {
+			unsigned long gating_wait;
+
+			gating_wait = host->hba->dev_info.clk_gating_wait_us;
+			if (!gating_wait) {
+				udelay(1);
+			} else {
+				/*
+				 * bRefClkGatingWaitTime defines the minimum
+				 * time for which the reference clock is
+				 * required by device during transition from
+				 * HS-MODE to LS-MODE or HIBERN8 state. Give it
+				 * more delay to be on the safe side.
+				 */
+				gating_wait += 10;
+				usleep_range(gating_wait, gating_wait + 10);
+			}
+		}
 
 		writel_relaxed(temp, host->dev_ref_clk_ctrl_mmio);
 
@@ -854,6 +945,20 @@ static int ufs_qcom_pwr_change_notify(struct ufs_hba *hba,
 		if (!ufshcd_is_hs_mode(&hba->pwr_info) &&
 			ufshcd_is_hs_mode(dev_req_params))
 			ufs_qcom_dev_ref_clk_ctrl(host, true);
+
+		if (host->hw_ver.major >= 0x4) {
+			if (dev_req_params->gear_tx == UFS_HS_G4) {
+				/* INITIAL ADAPT */
+				ufshcd_dme_set(hba,
+					       UIC_ARG_MIB(PA_TXHSADAPTTYPE),
+					       PA_INITIAL_ADAPT);
+			} else {
+				/* NO ADAPT */
+				ufshcd_dme_set(hba,
+					       UIC_ARG_MIB(PA_TXHSADAPTTYPE),
+					       PA_NO_ADAPT);
+			}
+		}
 		break;
 	case POST_CHANGE:
 		if (ufs_qcom_cfg_timers(hba, dev_req_params->gear_rx,
@@ -905,14 +1010,16 @@ static int ufs_qcom_quirk_host_pa_saveconfigtime(struct ufs_hba *hba)
 	return err;
 }
 
-static int ufs_qcom_apply_dev_quirks(struct ufs_hba *hba,
-				     struct ufs_dev_desc *card)
+static int ufs_qcom_apply_dev_quirks(struct ufs_hba *hba)
 {
 	int err = 0;
 
 	if (hba->dev_quirks & UFS_DEVICE_QUIRK_HOST_PA_SAVECONFIGTIME)
 		err = ufs_qcom_quirk_host_pa_saveconfigtime(hba);
 
+	if (hba->dev_info.wmanufacturerid == UFS_VENDOR_WDC)
+		hba->dev_quirks |= UFS_DEVICE_QUIRK_HOST_PA_TACTIVATE;
+
 	return err;
 }
 
@@ -968,6 +1075,8 @@ static void ufs_qcom_set_caps(struct ufs_hba *hba)
 	hba->caps |= UFSHCD_CAP_CLK_GATING | UFSHCD_CAP_HIBERN8_WITH_CLK_GATING;
 	hba->caps |= UFSHCD_CAP_CLK_SCALING;
 	hba->caps |= UFSHCD_CAP_AUTO_BKOPS_SUSPEND;
+	hba->caps |= UFSHCD_CAP_WB_EN;
+	hba->caps |= UFSHCD_CAP_CRYPTO;
 
 	if (host->hw_ver.major >= 0x2) {
 		host->caps = UFS_QCOM_CAP_QUNIPRO |
@@ -987,8 +1096,7 @@ static int ufs_qcom_setup_clocks(struct ufs_hba *hba, bool on,
 				 enum ufs_notify_change_status status)
 {
 	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
-	int err;
-	int vote = 0;
+	int err = 0;
 
 	/*
 	 * In case ufs_qcom_init() is not yet done, simply ignore.
@@ -998,28 +1106,28 @@ static int ufs_qcom_setup_clocks(struct ufs_hba *hba, bool on,
 	if (!host)
 		return 0;
 
-	if (on && (status == POST_CHANGE)) {
-		/* enable the device ref clock for HS mode*/
-		if (ufshcd_is_hs_mode(&hba->pwr_info))
-			ufs_qcom_dev_ref_clk_ctrl(host, true);
-		vote = host->bus_vote.saved_vote;
-		if (vote == host->bus_vote.min_bw_vote)
-			ufs_qcom_update_bus_bw_vote(host);
-
-	} else if (!on && (status == PRE_CHANGE)) {
-		if (!ufs_qcom_is_link_active(hba)) {
-			/* disable device ref_clk */
-			ufs_qcom_dev_ref_clk_ctrl(host, false);
+	switch (status) {
+	case PRE_CHANGE:
+		if (on) {
+			err = ufs_qcom_set_bus_vote(hba, true);
+		} else {
+			if (!ufs_qcom_is_link_active(hba)) {
+				/* disable device ref_clk */
+				ufs_qcom_dev_ref_clk_ctrl(host, false);
+			}
 		}
-
-		vote = host->bus_vote.min_bw_vote;
+		break;
+	case POST_CHANGE:
+		if (on) {
+			/* enable the device ref clock for HS mode*/
+			if (ufshcd_is_hs_mode(&hba->pwr_info))
+				ufs_qcom_dev_ref_clk_ctrl(host, true);
+		} else {
+			err = ufs_qcom_set_bus_vote(hba, false);
+		}
+		break;
 	}
 
-	err = ufs_qcom_set_bus_vote(host, vote);
-	if (err)
-		dev_err(hba->dev, "%s: set bus vote failed %d\n",
-				__func__, err);
-
 	return err;
 }
 
@@ -1102,6 +1210,15 @@ static int ufs_qcom_init(struct ufs_hba *hba)
 	host->hba = hba;
 	ufshcd_set_variant(hba, host);
 
+	/* Setup the reset control of HCI */
+	host->core_reset = devm_reset_control_get(hba->dev, "rst");
+	if (IS_ERR(host->core_reset)) {
+		err = PTR_ERR(host->core_reset);
+		dev_warn(dev, "Failed to get reset control %d\n", err);
+		host->core_reset = NULL;
+		err = 0;
+	}
+
 	/* Fire up the reset controller. Failure here is non-fatal. */
 	host->rcdev.of_node = dev->of_node;
 	host->rcdev.ops = &ufs_qcom_reset_ops;
@@ -1164,7 +1281,8 @@ static int ufs_qcom_init(struct ufs_hba *hba)
 		host->dev_ref_clk_en_mask = BIT(26);
 	} else {
 		/* "dev_ref_clk_ctrl_mem" is optional resource */
-		res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+		res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
+						   "dev_ref_clk_ctrl_mem");
 		if (res) {
 			host->dev_ref_clk_ctrl_mmio =
 					devm_ioremap_resource(dev, res);
@@ -1186,6 +1304,11 @@ static int ufs_qcom_init(struct ufs_hba *hba)
 	ufs_qcom_set_caps(hba);
 	ufs_qcom_advertise_quirks(hba);
 
+	err = ufs_qcom_ice_init(host);
+	if (err)
+		goto out_variant_clear;
+
+	ufs_qcom_set_bus_vote(hba, true);
 	ufs_qcom_setup_clocks(hba, true, POST_CHANGE);
 
 	if (hba->dev->id < MAX_UFS_QCOM_HOSTS)
@@ -1306,18 +1429,27 @@ static int ufs_qcom_clk_scale_notify(struct ufs_hba *hba,
 	int err = 0;
 
 	if (status == PRE_CHANGE) {
+		err = ufshcd_uic_hibern8_enter(hba);
+		if (err)
+			return err;
 		if (scale_up)
 			err = ufs_qcom_clk_scale_up_pre_change(hba);
 		else
 			err = ufs_qcom_clk_scale_down_pre_change(hba);
+		if (err)
+			ufshcd_uic_hibern8_exit(hba);
+
 	} else {
 		if (scale_up)
 			err = ufs_qcom_clk_scale_up_post_change(hba);
 		else
 			err = ufs_qcom_clk_scale_down_post_change(hba);
 
-		if (err || !dev_req_params)
+
+		if (err || !dev_req_params) {
+			ufshcd_uic_hibern8_exit(hba);
 			goto out;
+		}
 
 		ufs_qcom_cfg_timers(hba,
 				    dev_req_params->gear_rx,
@@ -1325,6 +1457,7 @@ static int ufs_qcom_clk_scale_notify(struct ufs_hba *hba,
 				    dev_req_params->hs_rate,
 				    false);
 		ufs_qcom_update_bus_bw_vote(host);
+		ufshcd_uic_hibern8_exit(hba);
 	}
 
 out:
@@ -1508,44 +1641,12 @@ int ufs_qcom_testbus_config(struct ufs_qcom_host *host)
 	return 0;
 }
 
-static void ufs_qcom_testbus_read(struct ufs_hba *hba)
-{
-	ufshcd_dump_regs(hba, UFS_TEST_BUS, 4, "UFS_TEST_BUS ");
-}
-
-static void ufs_qcom_print_unipro_testbus(struct ufs_hba *hba)
-{
-	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
-	u32 *testbus = NULL;
-	int i, nminor = 256, testbus_len = nminor * sizeof(u32);
-
-	testbus = kmalloc(testbus_len, GFP_KERNEL);
-	if (!testbus)
-		return;
-
-	host->testbus.select_major = TSTBUS_UNIPRO;
-	for (i = 0; i < nminor; i++) {
-		host->testbus.select_minor = i;
-		ufs_qcom_testbus_config(host);
-		testbus[i] = ufshcd_readl(hba, UFS_TEST_BUS);
-	}
-	print_hex_dump(KERN_ERR, "UNIPRO_TEST_BUS ", DUMP_PREFIX_OFFSET,
-			16, 4, testbus, testbus_len, false);
-	kfree(testbus);
-}
-
 static void ufs_qcom_dump_dbg_regs(struct ufs_hba *hba)
 {
 	ufshcd_dump_regs(hba, REG_UFS_SYS1CLK_1US, 16 * 4,
 			 "HCI Vendor Specific Registers ");
 
-	/* sleep a bit intermittently as we are dumping too much data */
 	ufs_qcom_print_hw_debug_reg_all(hba, NULL, ufs_qcom_dump_regs_wrapper);
-	udelay(1000);
-	ufs_qcom_testbus_read(hba);
-	udelay(1000);
-	ufs_qcom_print_unipro_testbus(hba);
-	udelay(1000);
 }
 
 /**
@@ -1573,6 +1674,29 @@ static void ufs_qcom_device_reset(struct ufs_hba *hba)
 	usleep_range(10, 15);
 }
 
+#if IS_ENABLED(CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND)
+static void ufs_qcom_config_scaling_param(struct ufs_hba *hba,
+					  struct devfreq_dev_profile *p,
+					  void *data)
+{
+	static struct devfreq_simple_ondemand_data *d;
+
+	if (!data)
+		return;
+
+	d = (struct devfreq_simple_ondemand_data *)data;
+	p->polling_ms = 60;
+	d->upthreshold = 70;
+	d->downdifferential = 5;
+}
+#else
+static void ufs_qcom_config_scaling_param(struct ufs_hba *hba,
+					  struct devfreq_dev_profile *p,
+					  void *data)
+{
+}
+#endif
+
 /**
  * struct ufs_hba_qcom_vops - UFS QCOM specific variant operations
  *
@@ -1594,6 +1718,8 @@ static const struct ufs_hba_variant_ops ufs_hba_qcom_vops = {
 	.resume			= ufs_qcom_resume,
 	.dbg_register_dump	= ufs_qcom_dump_dbg_regs,
 	.device_reset		= ufs_qcom_device_reset,
+	.config_scaling_param = ufs_qcom_config_scaling_param,
+	.program_key		= ufs_qcom_ice_program_key,
 };
 
 /**
diff --git a/drivers/scsi/ufs/ufs-qcom.h b/drivers/scsi/ufs/ufs-qcom.h
index d401f17..97247d1 100644
--- a/drivers/scsi/ufs/ufs-qcom.h
+++ b/drivers/scsi/ufs/ufs-qcom.h
@@ -6,6 +6,7 @@
 #define UFS_QCOM_H_
 
 #include <linux/reset-controller.h>
+#include <linux/reset.h>
 
 #define MAX_UFS_QCOM_HOSTS	1
 #define MAX_U32                 (~(u32)0)
@@ -226,6 +227,9 @@ struct ufs_qcom_host {
 	void __iomem *dev_ref_clk_ctrl_mmio;
 	bool is_dev_ref_clk_enabled;
 	struct ufs_hw_version hw_ver;
+#ifdef CONFIG_SCSI_UFS_CRYPTO
+	void __iomem *ice_mmio;
+#endif
 
 	u32 dev_ref_clk_en_mask;
 
@@ -233,6 +237,8 @@ struct ufs_qcom_host {
 	u32 dbg_print_en;
 	struct ufs_qcom_testbus testbus;
 
+	/* Reset control of HCI */
+	struct reset_control *core_reset;
 	struct reset_controller_dev rcdev;
 
 	struct gpio_desc *device_reset;
@@ -261,4 +267,28 @@ static inline bool ufs_qcom_cap_qunipro(struct ufs_qcom_host *host)
 		return false;
 }
 
+/* ufs-qcom-ice.c */
+
+#ifdef CONFIG_SCSI_UFS_CRYPTO
+int ufs_qcom_ice_init(struct ufs_qcom_host *host);
+int ufs_qcom_ice_enable(struct ufs_qcom_host *host);
+int ufs_qcom_ice_resume(struct ufs_qcom_host *host);
+int ufs_qcom_ice_program_key(struct ufs_hba *hba,
+			     const union ufs_crypto_cfg_entry *cfg, int slot);
+#else
+static inline int ufs_qcom_ice_init(struct ufs_qcom_host *host)
+{
+	return 0;
+}
+static inline int ufs_qcom_ice_enable(struct ufs_qcom_host *host)
+{
+	return 0;
+}
+static inline int ufs_qcom_ice_resume(struct ufs_qcom_host *host)
+{
+	return 0;
+}
+#define ufs_qcom_ice_program_key NULL
+#endif /* !CONFIG_SCSI_UFS_CRYPTO */
+
 #endif /* UFS_QCOM_H_ */
diff --git a/drivers/scsi/ufs/ufs-sysfs.c b/drivers/scsi/ufs/ufs-sysfs.c
index ad2abc9..a1ee867 100644
--- a/drivers/scsi/ufs/ufs-sysfs.c
+++ b/drivers/scsi/ufs/ufs-sysfs.c
@@ -16,6 +16,7 @@ static const char *ufschd_uic_link_state_to_string(
 	case UIC_LINK_OFF_STATE:	return "OFF";
 	case UIC_LINK_ACTIVE_STATE:	return "ACTIVE";
 	case UIC_LINK_HIBERN8_STATE:	return "HIBERN8";
+	case UIC_LINK_BROKEN_STATE:	return "BROKEN";
 	default:			return "UNKNOWN";
 	}
 }
@@ -118,26 +119,6 @@ static ssize_t spm_target_link_state_show(struct device *dev,
 				ufs_pm_lvl_states[hba->spm_lvl].link_state));
 }
 
-static void ufshcd_auto_hibern8_update(struct ufs_hba *hba, u32 ahit)
-{
-	unsigned long flags;
-
-	if (!ufshcd_is_auto_hibern8_supported(hba))
-		return;
-
-	spin_lock_irqsave(hba->host->host_lock, flags);
-	if (hba->ahit != ahit)
-		hba->ahit = ahit;
-	spin_unlock_irqrestore(hba->host->host_lock, flags);
-	if (!pm_runtime_suspended(hba->dev)) {
-		pm_runtime_get_sync(hba->dev);
-		ufshcd_hold(hba, false);
-		ufshcd_auto_hibern8_enable(hba);
-		ufshcd_release(hba);
-		pm_runtime_put(hba->dev);
-	}
-}
-
 /* Convert Auto-Hibernate Idle Timer register value to microseconds */
 static int ufshcd_ahit_to_us(u32 ahit)
 {
@@ -294,6 +275,10 @@ UFS_DEVICE_DESC_PARAM(device_version, _DEV_VER, 2);
 UFS_DEVICE_DESC_PARAM(number_of_secure_wpa, _NUM_SEC_WPA, 1);
 UFS_DEVICE_DESC_PARAM(psa_max_data_size, _PSA_MAX_DATA, 4);
 UFS_DEVICE_DESC_PARAM(psa_state_timeout, _PSA_TMT, 1);
+UFS_DEVICE_DESC_PARAM(ext_feature_sup, _EXT_UFS_FEATURE_SUP, 4);
+UFS_DEVICE_DESC_PARAM(wb_presv_us_en, _WB_PRESRV_USRSPC_EN, 1);
+UFS_DEVICE_DESC_PARAM(wb_type, _WB_TYPE, 1);
+UFS_DEVICE_DESC_PARAM(wb_shared_alloc_units, _WB_SHARED_ALLOC_UNITS, 4);
 
 static struct attribute *ufs_sysfs_device_descriptor[] = {
 	&dev_attr_device_type.attr,
@@ -322,6 +307,10 @@ static struct attribute *ufs_sysfs_device_descriptor[] = {
 	&dev_attr_number_of_secure_wpa.attr,
 	&dev_attr_psa_max_data_size.attr,
 	&dev_attr_psa_state_timeout.attr,
+	&dev_attr_ext_feature_sup.attr,
+	&dev_attr_wb_presv_us_en.attr,
+	&dev_attr_wb_type.attr,
+	&dev_attr_wb_shared_alloc_units.attr,
 	NULL,
 };
 
@@ -391,6 +380,12 @@ UFS_GEOMETRY_DESC_PARAM(enh4_memory_max_alloc_units,
 	_ENM4_MAX_NUM_UNITS, 4);
 UFS_GEOMETRY_DESC_PARAM(enh4_memory_capacity_adjustment_factor,
 	_ENM4_CAP_ADJ_FCTR, 2);
+UFS_GEOMETRY_DESC_PARAM(wb_max_alloc_units, _WB_MAX_ALLOC_UNITS, 4);
+UFS_GEOMETRY_DESC_PARAM(wb_max_wb_luns, _WB_MAX_WB_LUNS, 1);
+UFS_GEOMETRY_DESC_PARAM(wb_buff_cap_adj, _WB_BUFF_CAP_ADJ, 1);
+UFS_GEOMETRY_DESC_PARAM(wb_sup_red_type, _WB_SUP_RED_TYPE, 1);
+UFS_GEOMETRY_DESC_PARAM(wb_sup_wb_type, _WB_SUP_WB_TYPE, 1);
+
 
 static struct attribute *ufs_sysfs_geometry_descriptor[] = {
 	&dev_attr_raw_device_capacity.attr,
@@ -422,6 +417,11 @@ static struct attribute *ufs_sysfs_geometry_descriptor[] = {
 	&dev_attr_enh3_memory_capacity_adjustment_factor.attr,
 	&dev_attr_enh4_memory_max_alloc_units.attr,
 	&dev_attr_enh4_memory_capacity_adjustment_factor.attr,
+	&dev_attr_wb_max_alloc_units.attr,
+	&dev_attr_wb_max_wb_luns.attr,
+	&dev_attr_wb_buff_cap_adj.attr,
+	&dev_attr_wb_sup_red_type.attr,
+	&dev_attr_wb_sup_wb_type.attr,
 	NULL,
 };
 
@@ -619,16 +619,25 @@ static const struct attribute_group ufs_sysfs_string_descriptors_group = {
 	.attrs = ufs_sysfs_string_descriptors,
 };
 
+static inline bool ufshcd_is_wb_flags(enum flag_idn idn)
+{
+	return ((idn >= QUERY_FLAG_IDN_WB_EN) &&
+		(idn <= QUERY_FLAG_IDN_WB_BUFF_FLUSH_DURING_HIBERN8));
+}
+
 #define UFS_FLAG(_name, _uname)						\
 static ssize_t _name##_show(struct device *dev,				\
 	struct device_attribute *attr, char *buf)			\
 {									\
 	bool flag;							\
+	u8 index = 0;							\
 	struct ufs_hba *hba = dev_get_drvdata(dev);			\
+	if (ufshcd_is_wb_flags(QUERY_FLAG_IDN##_uname))			\
+		index = ufshcd_wb_get_query_index(hba);			\
 	if (ufshcd_query_flag(hba, UPIU_QUERY_OPCODE_READ_FLAG,		\
-		QUERY_FLAG_IDN##_uname, &flag))				\
+		QUERY_FLAG_IDN##_uname, index, &flag))			\
 		return -EINVAL;						\
-	return sprintf(buf, "%s\n", flag ? "true" : "false");		\
+	return sprintf(buf, "%s\n", flag ? "true" : "false"); \
 }									\
 static DEVICE_ATTR_RO(_name)
 
@@ -640,6 +649,9 @@ UFS_FLAG(life_span_mode_enable, _LIFE_SPAN_MODE_ENABLE);
 UFS_FLAG(phy_resource_removal, _FPHYRESOURCEREMOVAL);
 UFS_FLAG(busy_rtc, _BUSY_RTC);
 UFS_FLAG(disable_fw_update, _PERMANENTLY_DISABLE_FW_UPDATE);
+UFS_FLAG(wb_enable, _WB_EN);
+UFS_FLAG(wb_flush_en, _WB_BUFF_FLUSH_EN);
+UFS_FLAG(wb_flush_during_h8, _WB_BUFF_FLUSH_DURING_HIBERN8);
 
 static struct attribute *ufs_sysfs_device_flags[] = {
 	&dev_attr_device_init.attr,
@@ -650,6 +662,9 @@ static struct attribute *ufs_sysfs_device_flags[] = {
 	&dev_attr_phy_resource_removal.attr,
 	&dev_attr_busy_rtc.attr,
 	&dev_attr_disable_fw_update.attr,
+	&dev_attr_wb_enable.attr,
+	&dev_attr_wb_flush_en.attr,
+	&dev_attr_wb_flush_during_h8.attr,
 	NULL,
 };
 
@@ -658,14 +673,23 @@ static const struct attribute_group ufs_sysfs_flags_group = {
 	.attrs = ufs_sysfs_device_flags,
 };
 
+static inline bool ufshcd_is_wb_attrs(enum attr_idn idn)
+{
+	return ((idn >= QUERY_ATTR_IDN_WB_FLUSH_STATUS) &&
+		(idn <= QUERY_ATTR_IDN_CURR_WB_BUFF_SIZE));
+}
+
 #define UFS_ATTRIBUTE(_name, _uname)					\
 static ssize_t _name##_show(struct device *dev,				\
 	struct device_attribute *attr, char *buf)			\
 {									\
 	struct ufs_hba *hba = dev_get_drvdata(dev);			\
 	u32 value;							\
+	u8 index = 0;							\
+	if (ufshcd_is_wb_attrs(QUERY_ATTR_IDN##_uname))			\
+		index = ufshcd_wb_get_query_index(hba);			\
 	if (ufshcd_query_attr(hba, UPIU_QUERY_OPCODE_READ_ATTR,		\
-		QUERY_ATTR_IDN##_uname, 0, 0, &value))			\
+		QUERY_ATTR_IDN##_uname, index, 0, &value))		\
 		return -EINVAL;						\
 	return sprintf(buf, "0x%08X\n", value);				\
 }									\
@@ -687,6 +711,11 @@ UFS_ATTRIBUTE(exception_event_status, _EE_STATUS);
 UFS_ATTRIBUTE(ffu_status, _FFU_STATUS);
 UFS_ATTRIBUTE(psa_state, _PSA_STATE);
 UFS_ATTRIBUTE(psa_data_size, _PSA_DATA_SIZE);
+UFS_ATTRIBUTE(wb_flush_status, _WB_FLUSH_STATUS);
+UFS_ATTRIBUTE(wb_avail_buf, _AVAIL_WB_BUFF_SIZE);
+UFS_ATTRIBUTE(wb_life_time_est, _WB_BUFF_LIFE_TIME_EST);
+UFS_ATTRIBUTE(wb_cur_buf, _CURR_WB_BUFF_SIZE);
+
 
 static struct attribute *ufs_sysfs_attributes[] = {
 	&dev_attr_boot_lun_enabled.attr,
@@ -705,6 +734,10 @@ static struct attribute *ufs_sysfs_attributes[] = {
 	&dev_attr_ffu_status.attr,
 	&dev_attr_psa_state.attr,
 	&dev_attr_psa_data_size.attr,
+	&dev_attr_wb_flush_status.attr,
+	&dev_attr_wb_avail_buf.attr,
+	&dev_attr_wb_life_time_est.attr,
+	&dev_attr_wb_cur_buf.attr,
 	NULL,
 };
 
@@ -756,6 +789,8 @@ UFS_UNIT_DESC_PARAM(provisioning_type, _PROVISIONING_TYPE, 1);
 UFS_UNIT_DESC_PARAM(physical_memory_resourse_count, _PHY_MEM_RSRC_CNT, 8);
 UFS_UNIT_DESC_PARAM(context_capabilities, _CTX_CAPABILITIES, 2);
 UFS_UNIT_DESC_PARAM(large_unit_granularity, _LARGE_UNIT_SIZE_M1, 1);
+UFS_UNIT_DESC_PARAM(wb_buf_alloc_units, _WB_BUF_ALLOC_UNITS, 4);
+
 
 static struct attribute *ufs_sysfs_unit_descriptor[] = {
 	&dev_attr_boot_lun_id.attr,
@@ -771,6 +806,7 @@ static struct attribute *ufs_sysfs_unit_descriptor[] = {
 	&dev_attr_physical_memory_resourse_count.attr,
 	&dev_attr_context_capabilities.attr,
 	&dev_attr_large_unit_granularity.attr,
+	&dev_attr_wb_buf_alloc_units.attr,
 	NULL,
 };
 
@@ -803,15 +839,23 @@ const struct attribute_group ufs_sysfs_lun_attributes_group = {
 	.attrs = ufs_sysfs_lun_attributes,
 };
 
-void ufs_sysfs_add_nodes(struct device *dev)
+void ufs_sysfs_add_nodes(struct ufs_hba *hba)
 {
 	int ret;
 
-	ret = sysfs_create_groups(&dev->kobj, ufs_sysfs_groups);
-	if (ret)
-		dev_err(dev,
+	ret = sysfs_create_groups(&hba->dev->kobj, ufs_sysfs_groups);
+	if (ret) {
+		dev_err(hba->dev,
 			"%s: sysfs groups creation failed (err = %d)\n",
 			__func__, ret);
+		return;
+	}
+
+	ret = ufshcd_vops_update_sysfs(hba);
+	if (ret)
+		dev_err(hba->dev,
+			"%s: vops sysfs groups update failed (err = %d)\n",
+			__func__, ret);
 }
 
 void ufs_sysfs_remove_nodes(struct device *dev)
diff --git a/drivers/scsi/ufs/ufs-sysfs.h b/drivers/scsi/ufs/ufs-sysfs.h
index e5621e5..1c10e5a 100644
--- a/drivers/scsi/ufs/ufs-sysfs.h
+++ b/drivers/scsi/ufs/ufs-sysfs.h
@@ -9,7 +9,7 @@
 
 #include "ufshcd.h"
 
-void ufs_sysfs_add_nodes(struct device *dev);
+void ufs_sysfs_add_nodes(struct ufs_hba *hba);
 void ufs_sysfs_remove_nodes(struct device *dev);
 
 extern const struct attribute_group ufs_sysfs_unit_descriptor_group;
diff --git a/drivers/scsi/ufs/ufs.h b/drivers/scsi/ufs/ufs.h
index 3327981..80df4a1 100644
--- a/drivers/scsi/ufs/ufs.h
+++ b/drivers/scsi/ufs/ufs.h
@@ -65,6 +65,9 @@
 #define UFS_UPIU_WLUN_ID	(1 << 7)
 #define UFS_UPIU_MAX_GENERAL_LUN	8
 
+/* WriteBooster buffer is available only for the logical unit from 0 to 7 */
+#define UFS_UPIU_MAX_WB_LUN_ID	8
+
 /* Well known logical unit id in LUN field of UPIU */
 enum {
 	UFS_UPIU_REPORT_LUNS_WLUN	= 0x81,
@@ -141,6 +144,9 @@ enum flag_idn {
 	QUERY_FLAG_IDN_BUSY_RTC				= 0x09,
 	QUERY_FLAG_IDN_RESERVED3			= 0x0A,
 	QUERY_FLAG_IDN_PERMANENTLY_DISABLE_FW_UPDATE	= 0x0B,
+	QUERY_FLAG_IDN_WB_EN                            = 0x0E,
+	QUERY_FLAG_IDN_WB_BUFF_FLUSH_EN                 = 0x0F,
+	QUERY_FLAG_IDN_WB_BUFF_FLUSH_DURING_HIBERN8     = 0x10,
 };
 
 /* Attribute idn for Query requests */
@@ -168,6 +174,11 @@ enum attr_idn {
 	QUERY_ATTR_IDN_FFU_STATUS		= 0x14,
 	QUERY_ATTR_IDN_PSA_STATE		= 0x15,
 	QUERY_ATTR_IDN_PSA_DATA_SIZE		= 0x16,
+	QUERY_ATTR_IDN_REF_CLK_GATING_WAIT_TIME	= 0x17,
+	QUERY_ATTR_IDN_WB_FLUSH_STATUS	        = 0x1C,
+	QUERY_ATTR_IDN_AVAIL_WB_BUFF_SIZE       = 0x1D,
+	QUERY_ATTR_IDN_WB_BUFF_LIFE_TIME_EST    = 0x1E,
+	QUERY_ATTR_IDN_CURR_WB_BUFF_SIZE        = 0x1F,
 };
 
 /* Descriptor idn for Query requests */
@@ -191,9 +202,9 @@ enum desc_header_offset {
 };
 
 enum ufs_desc_def_size {
-	QUERY_DESC_DEVICE_DEF_SIZE		= 0x40,
+	QUERY_DESC_DEVICE_DEF_SIZE		= 0x59,
 	QUERY_DESC_CONFIGURATION_DEF_SIZE	= 0x90,
-	QUERY_DESC_UNIT_DEF_SIZE		= 0x23,
+	QUERY_DESC_UNIT_DEF_SIZE		= 0x2D,
 	QUERY_DESC_INTERCONNECT_DEF_SIZE	= 0x06,
 	QUERY_DESC_GEOMETRY_DEF_SIZE		= 0x48,
 	QUERY_DESC_POWER_DEF_SIZE		= 0x62,
@@ -219,6 +230,7 @@ enum unit_desc_param {
 	UNIT_DESC_PARAM_PHY_MEM_RSRC_CNT	= 0x18,
 	UNIT_DESC_PARAM_CTX_CAPABILITIES	= 0x20,
 	UNIT_DESC_PARAM_LARGE_UNIT_SIZE_M1	= 0x22,
+	UNIT_DESC_PARAM_WB_BUF_ALLOC_UNITS	= 0x29,
 };
 
 /* Device descriptor parameters offsets in bytes*/
@@ -258,6 +270,10 @@ enum device_desc_param {
 	DEVICE_DESC_PARAM_PSA_MAX_DATA		= 0x25,
 	DEVICE_DESC_PARAM_PSA_TMT		= 0x29,
 	DEVICE_DESC_PARAM_PRDCT_REV		= 0x2A,
+	DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP	= 0x4F,
+	DEVICE_DESC_PARAM_WB_PRESRV_USRSPC_EN	= 0x53,
+	DEVICE_DESC_PARAM_WB_TYPE		= 0x54,
+	DEVICE_DESC_PARAM_WB_SHARED_ALLOC_UNITS = 0x55,
 };
 
 /* Interconnect descriptor parameters offsets in bytes*/
@@ -302,6 +318,11 @@ enum geometry_desc_param {
 	GEOMETRY_DESC_PARAM_ENM4_MAX_NUM_UNITS	= 0x3E,
 	GEOMETRY_DESC_PARAM_ENM4_CAP_ADJ_FCTR	= 0x42,
 	GEOMETRY_DESC_PARAM_OPT_LOG_BLK_SIZE	= 0x44,
+	GEOMETRY_DESC_PARAM_WB_MAX_ALLOC_UNITS	= 0x4F,
+	GEOMETRY_DESC_PARAM_WB_MAX_WB_LUNS	= 0x53,
+	GEOMETRY_DESC_PARAM_WB_BUFF_CAP_ADJ	= 0x54,
+	GEOMETRY_DESC_PARAM_WB_SUP_RED_TYPE	= 0x55,
+	GEOMETRY_DESC_PARAM_WB_SUP_WB_TYPE	= 0x56,
 };
 
 /* Health descriptor parameters offsets in bytes*/
@@ -313,6 +334,12 @@ enum health_desc_param {
 	HEALTH_DESC_PARAM_LIFE_TIME_EST_B	= 0x4,
 };
 
+/* WriteBooster buffer mode */
+enum {
+	WB_BUF_MODE_LU_DEDICATED	= 0x0,
+	WB_BUF_MODE_SHARED		= 0x1,
+};
+
 /*
  * Logical Unit Write Protect
  * 00h: LU not write protected
@@ -333,6 +360,11 @@ enum {
 	UFSHCD_AMP		= 3,
 };
 
+/* Possible values for dExtendedUFSFeaturesSupport */
+enum {
+	UFS_DEV_WRITE_BOOSTER_SUP	= BIT(8),
+};
+
 #define POWER_DESC_MAX_SIZE			0x62
 #define POWER_DESC_MAX_ACTV_ICC_LVLS		16
 
@@ -447,6 +479,8 @@ enum ufs_dev_pwr_mode {
 	UFS_POWERDOWN_PWR_MODE	= 3,
 };
 
+#define UFS_WB_BUF_REMAIN_PERCENT(val) ((val) / 10)
+
 /**
  * struct utp_cmd_rsp - Response UPIU structure
  * @residual_transfer_count: Residual transfer count DW-3
@@ -499,9 +533,9 @@ struct ufs_query_res {
 #define UFS_VREG_VCC_MAX_UV	   3600000 /* uV */
 #define UFS_VREG_VCC_1P8_MIN_UV    1700000 /* uV */
 #define UFS_VREG_VCC_1P8_MAX_UV    1950000 /* uV */
-#define UFS_VREG_VCCQ_MIN_UV	   1100000 /* uV */
-#define UFS_VREG_VCCQ_MAX_UV	   1300000 /* uV */
-#define UFS_VREG_VCCQ2_MIN_UV	   1650000 /* uV */
+#define UFS_VREG_VCCQ_MIN_UV	   1140000 /* uV */
+#define UFS_VREG_VCCQ_MAX_UV	   1260000 /* uV */
+#define UFS_VREG_VCCQ2_MIN_UV	   1700000 /* uV */
 #define UFS_VREG_VCCQ2_MAX_UV	   1950000 /* uV */
 
 /*
@@ -530,18 +564,19 @@ struct ufs_dev_info {
 	bool f_power_on_wp_en;
 	/* Keeps information if any of the LU is power on write protected */
 	bool is_lu_power_on_wp;
-};
-
-#define MAX_MODEL_LEN 16
-/**
- * ufs_dev_desc - ufs device details from the device descriptor
- *
- * @wmanufacturerid: card details
- * @model: card model
- */
-struct ufs_dev_desc {
+	/* Maximum number of general LU supported by the UFS device */
+	u8 max_lu_supported;
+	u8 wb_dedicated_lu;
 	u16 wmanufacturerid;
+	/*UFS device Product Name */
 	u8 *model;
+	u16 wspecversion;
+	u32 clk_gating_wait_us;
+	u32 d_ext_ufs_feature_sup;
+	u8 b_wb_buffer_type;
+	u32 d_wb_alloc_units;
+	bool b_rpm_dev_flush_capable;
+	u8 b_presrv_uspc_en;
 };
 
 /**
diff --git a/drivers/scsi/ufs/ufs_quirks.h b/drivers/scsi/ufs/ufs_quirks.h
index 0398591..ce578f8 100644
--- a/drivers/scsi/ufs/ufs_quirks.h
+++ b/drivers/scsi/ufs/ufs_quirks.h
@@ -16,6 +16,7 @@
 #define UFS_VENDOR_TOSHIBA     0x198
 #define UFS_VENDOR_SAMSUNG     0x1CE
 #define UFS_VENDOR_SKHYNIX     0x1AD
+#define UFS_VENDOR_WDC         0x145
 
 /**
  * ufs_dev_fix - ufs device quirk info
@@ -23,16 +24,17 @@
  * @quirk: device quirk
  */
 struct ufs_dev_fix {
-	struct ufs_dev_desc card;
+	u16 wmanufacturerid;
+	u8 *model;
 	unsigned int quirk;
 };
 
-#define END_FIX { { 0 }, 0 }
+#define END_FIX { }
 
 /* add specific device quirk */
 #define UFS_FIX(_vendor, _model, _quirk) { \
-	.card.wmanufacturerid = (_vendor),\
-	.card.model = (_model),		   \
+	.wmanufacturerid = (_vendor),\
+	.model = (_model),		   \
 	.quirk = (_quirk),		   \
 }
 
@@ -100,4 +102,18 @@ struct ufs_dev_fix {
  */
 #define UFS_DEVICE_QUIRK_HOST_VS_DEBUGSAVECONFIGTIME	(1 << 9)
 
+/*
+ * Some pre-3.1 UFS devices can support extended features by upgrading
+ * the firmware. Enable this quirk to make UFS core driver probe and enable
+ * supported features on such devices.
+ */
+#define UFS_DEVICE_QUIRK_SUPPORT_EXTENDED_FEATURES (1 << 10)
+
+/*
+ * Some UFS devices require delay after VCC power rail is turned-off.
+ * Enable this quirk to introduce 5ms delays after VCC power-off during
+ * suspend flow.
+ */
+#define UFS_DEVICE_QUIRK_DELAY_AFTER_LPM        (1 << 11)
+
 #endif /* UFS_QUIRKS_H_ */
diff --git a/drivers/scsi/ufs/ufshcd-crypto.c b/drivers/scsi/ufs/ufshcd-crypto.c
new file mode 100644
index 0000000..734dd09
--- /dev/null
+++ b/drivers/scsi/ufs/ufshcd-crypto.c
@@ -0,0 +1,249 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2019 Google LLC
+ */
+
+#include "ufshcd.h"
+#include "ufshcd-crypto.h"
+
+/* Blk-crypto modes supported by UFS crypto */
+static const struct ufs_crypto_alg_entry {
+	enum ufs_crypto_alg ufs_alg;
+	enum ufs_crypto_key_size ufs_key_size;
+} ufs_crypto_algs[BLK_ENCRYPTION_MODE_MAX] = {
+	[BLK_ENCRYPTION_MODE_AES_256_XTS] = {
+		.ufs_alg = UFS_CRYPTO_ALG_AES_XTS,
+		.ufs_key_size = UFS_CRYPTO_KEY_SIZE_256,
+	},
+};
+
+static int ufshcd_program_key(struct ufs_hba *hba,
+			      const union ufs_crypto_cfg_entry *cfg, int slot)
+{
+	int i;
+	u32 slot_offset = hba->crypto_cfg_register + slot * sizeof(*cfg);
+	int err = 0;
+
+	ufshcd_hold(hba, false);
+
+	if (hba->vops && hba->vops->program_key) {
+		err = hba->vops->program_key(hba, cfg, slot);
+		goto out;
+	}
+
+	/* Ensure that CFGE is cleared before programming the key */
+	ufshcd_writel(hba, 0, slot_offset + 16 * sizeof(cfg->reg_val[0]));
+	for (i = 0; i < 16; i++) {
+		ufshcd_writel(hba, le32_to_cpu(cfg->reg_val[i]),
+			      slot_offset + i * sizeof(cfg->reg_val[0]));
+	}
+	/* Write dword 17 */
+	ufshcd_writel(hba, le32_to_cpu(cfg->reg_val[17]),
+		      slot_offset + 17 * sizeof(cfg->reg_val[0]));
+	/* Dword 16 must be written last */
+	ufshcd_writel(hba, le32_to_cpu(cfg->reg_val[16]),
+		      slot_offset + 16 * sizeof(cfg->reg_val[0]));
+out:
+	ufshcd_release(hba);
+	return err;
+}
+
+static int ufshcd_crypto_keyslot_program(struct blk_keyslot_manager *ksm,
+					 const struct blk_crypto_key *key,
+					 unsigned int slot)
+{
+	struct ufs_hba *hba = container_of(ksm, struct ufs_hba, ksm);
+	const union ufs_crypto_cap_entry *ccap_array = hba->crypto_cap_array;
+	const struct ufs_crypto_alg_entry *alg =
+			&ufs_crypto_algs[key->crypto_cfg.crypto_mode];
+	u8 data_unit_mask = key->crypto_cfg.data_unit_size / 512;
+	int i;
+	int cap_idx = -1;
+	union ufs_crypto_cfg_entry cfg = {};
+	int err;
+
+	BUILD_BUG_ON(UFS_CRYPTO_KEY_SIZE_INVALID != 0);
+	for (i = 0; i < hba->crypto_capabilities.num_crypto_cap; i++) {
+		if (ccap_array[i].algorithm_id == alg->ufs_alg &&
+		    ccap_array[i].key_size == alg->ufs_key_size &&
+		    (ccap_array[i].sdus_mask & data_unit_mask)) {
+			cap_idx = i;
+			break;
+		}
+	}
+
+	if (WARN_ON(cap_idx < 0))
+		return -EOPNOTSUPP;
+
+	cfg.data_unit_size = data_unit_mask;
+	cfg.crypto_cap_idx = cap_idx;
+	cfg.config_enable = UFS_CRYPTO_CONFIGURATION_ENABLE;
+
+	if (ccap_array[cap_idx].algorithm_id == UFS_CRYPTO_ALG_AES_XTS) {
+		/* In XTS mode, the blk_crypto_key's size is already doubled */
+		memcpy(cfg.crypto_key, key->raw, key->size/2);
+		memcpy(cfg.crypto_key + UFS_CRYPTO_KEY_MAX_SIZE/2,
+		       key->raw + key->size/2, key->size/2);
+	} else {
+		memcpy(cfg.crypto_key, key->raw, key->size);
+	}
+
+	err = ufshcd_program_key(hba, &cfg, slot);
+
+	memzero_explicit(&cfg, sizeof(cfg));
+	return err;
+}
+
+static int ufshcd_clear_keyslot(struct ufs_hba *hba, int slot)
+{
+	/*
+	 * Clear the crypto cfg on the device. Clearing CFGE
+	 * might not be sufficient, so just clear the entire cfg.
+	 */
+	union ufs_crypto_cfg_entry cfg = {};
+
+	return ufshcd_program_key(hba, &cfg, slot);
+}
+
+static int ufshcd_crypto_keyslot_evict(struct blk_keyslot_manager *ksm,
+				       const struct blk_crypto_key *key,
+				       unsigned int slot)
+{
+	struct ufs_hba *hba = container_of(ksm, struct ufs_hba, ksm);
+
+	return ufshcd_clear_keyslot(hba, slot);
+}
+
+bool ufshcd_crypto_enable(struct ufs_hba *hba)
+{
+	if (!(hba->caps & UFSHCD_CAP_CRYPTO))
+		return false;
+
+	/* Reset might clear all keys, so reprogram all the keys. */
+	if (hba->ksm.num_slots)
+		blk_ksm_reprogram_all_keys(&hba->ksm);
+
+	if (hba->quirks & UFSHCD_QUIRK_BROKEN_CRYPTO_ENABLE)
+		return false;
+
+	return true;
+}
+
+static const struct blk_ksm_ll_ops ufshcd_ksm_ops = {
+	.keyslot_program	= ufshcd_crypto_keyslot_program,
+	.keyslot_evict		= ufshcd_crypto_keyslot_evict,
+};
+
+static enum blk_crypto_mode_num
+ufshcd_find_blk_crypto_mode(union ufs_crypto_cap_entry cap)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(ufs_crypto_algs); i++) {
+		BUILD_BUG_ON(UFS_CRYPTO_KEY_SIZE_INVALID != 0);
+		if (ufs_crypto_algs[i].ufs_alg == cap.algorithm_id &&
+		    ufs_crypto_algs[i].ufs_key_size == cap.key_size) {
+			return i;
+		}
+	}
+	return BLK_ENCRYPTION_MODE_INVALID;
+}
+
+/**
+ * ufshcd_hba_init_crypto_capabilities - Read crypto capabilities, init crypto
+ *					 fields in hba
+ * @hba: Per adapter instance
+ *
+ * Return: 0 if crypto was initialized or is not supported, else a -errno value.
+ */
+int ufshcd_hba_init_crypto_capabilities(struct ufs_hba *hba)
+{
+	int cap_idx;
+	int err = 0;
+	enum blk_crypto_mode_num blk_mode_num;
+
+	if (hba->quirks & UFSHCD_QUIRK_CUSTOM_KEYSLOT_MANAGER)
+		return 0;
+
+	/*
+	 * Don't use crypto if either the hardware doesn't advertise the
+	 * standard crypto capability bit *or* if the vendor specific driver
+	 * hasn't advertised that crypto is supported.
+	 */
+	if (!(hba->capabilities & MASK_CRYPTO_SUPPORT) ||
+	    !(hba->caps & UFSHCD_CAP_CRYPTO))
+		goto out;
+
+	hba->crypto_capabilities.reg_val =
+			cpu_to_le32(ufshcd_readl(hba, REG_UFS_CCAP));
+	hba->crypto_cfg_register =
+		(u32)hba->crypto_capabilities.config_array_ptr * 0x100;
+	hba->crypto_cap_array =
+		devm_kcalloc(hba->dev, hba->crypto_capabilities.num_crypto_cap,
+			     sizeof(hba->crypto_cap_array[0]), GFP_KERNEL);
+	if (!hba->crypto_cap_array) {
+		err = -ENOMEM;
+		goto out;
+	}
+
+	/* The actual number of configurations supported is (CFGC+1) */
+	err = devm_blk_ksm_init(hba->dev, &hba->ksm,
+				hba->crypto_capabilities.config_count + 1);
+	if (err)
+		goto out_free_caps;
+
+	hba->ksm.ksm_ll_ops = ufshcd_ksm_ops;
+	/* UFS only supports 8 bytes for any DUN */
+	hba->ksm.max_dun_bytes_supported = 8;
+	hba->ksm.features = BLK_CRYPTO_FEATURE_STANDARD_KEYS;
+	hba->ksm.dev = hba->dev;
+
+	/*
+	 * Cache all the UFS crypto capabilities and advertise the supported
+	 * crypto modes and data unit sizes to the block layer.
+	 */
+	for (cap_idx = 0; cap_idx < hba->crypto_capabilities.num_crypto_cap;
+	     cap_idx++) {
+		hba->crypto_cap_array[cap_idx].reg_val =
+			cpu_to_le32(ufshcd_readl(hba,
+						 REG_UFS_CRYPTOCAP +
+						 cap_idx * sizeof(__le32)));
+		blk_mode_num = ufshcd_find_blk_crypto_mode(
+						hba->crypto_cap_array[cap_idx]);
+		if (blk_mode_num != BLK_ENCRYPTION_MODE_INVALID)
+			hba->ksm.crypto_modes_supported[blk_mode_num] |=
+				hba->crypto_cap_array[cap_idx].sdus_mask * 512;
+	}
+
+	return 0;
+
+out_free_caps:
+	devm_kfree(hba->dev, hba->crypto_cap_array);
+out:
+	/* Indicate that init failed by clearing UFSHCD_CAP_CRYPTO */
+	hba->caps &= ~UFSHCD_CAP_CRYPTO;
+	return err;
+}
+
+/**
+ * ufshcd_init_crypto - Initialize crypto hardware
+ * @hba: Per adapter instance
+ */
+void ufshcd_init_crypto(struct ufs_hba *hba)
+{
+	int slot;
+
+	if (!(hba->caps & UFSHCD_CAP_CRYPTO))
+		return;
+
+	/* Clear all keyslots */
+	for (slot = 0; slot < hba->ksm.num_slots; slot++)
+		hba->ksm.ksm_ll_ops.keyslot_evict(&hba->ksm, NULL, slot);
+}
+
+void ufshcd_crypto_setup_rq_keyslot_manager(struct ufs_hba *hba,
+					    struct request_queue *q)
+{
+	if (hba->caps & UFSHCD_CAP_CRYPTO)
+		blk_ksm_register(&hba->ksm, q);
+}
diff --git a/drivers/scsi/ufs/ufshcd-crypto.h b/drivers/scsi/ufs/ufshcd-crypto.h
new file mode 100644
index 0000000..83b0e50
--- /dev/null
+++ b/drivers/scsi/ufs/ufshcd-crypto.h
@@ -0,0 +1,88 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2019 Google LLC
+ */
+
+#ifndef _UFSHCD_CRYPTO_H
+#define _UFSHCD_CRYPTO_H
+
+#ifdef CONFIG_SCSI_UFS_CRYPTO
+#include "ufshcd.h"
+#include "ufshci.h"
+
+static inline void ufshcd_prepare_lrbp_crypto(struct request *rq,
+					      struct ufshcd_lrb *lrbp)
+{
+	if (!rq || !rq->crypt_keyslot) {
+		lrbp->crypto_key_slot = -1;
+		return;
+	}
+
+	lrbp->crypto_key_slot = blk_ksm_get_slot_idx(rq->crypt_keyslot);
+	lrbp->data_unit_num = rq->crypt_ctx->bc_dun[0];
+}
+
+static inline void
+ufshcd_prepare_req_desc_hdr_crypto(struct ufshcd_lrb *lrbp, u32 *dword_0,
+				   u32 *dword_1, u32 *dword_3)
+{
+	if (lrbp->crypto_key_slot >= 0) {
+		*dword_0 |= UTP_REQ_DESC_CRYPTO_ENABLE_CMD;
+		*dword_0 |= lrbp->crypto_key_slot;
+		*dword_1 = lower_32_bits(lrbp->data_unit_num);
+		*dword_3 = upper_32_bits(lrbp->data_unit_num);
+	}
+}
+
+static inline void ufshcd_crypto_clear_prdt(struct ufs_hba *hba,
+					    struct ufshcd_lrb *lrbp)
+{
+	if (!(hba->quirks & UFSHCD_QUIRK_KEYS_IN_PRDT))
+		return;
+
+	if (!lrbp->cmd->request->crypt_ctx)
+		return;
+
+	memzero_explicit(lrbp->ucd_prdt_ptr,
+			 hba->sg_entry_size * scsi_sg_count(lrbp->cmd));
+}
+
+bool ufshcd_crypto_enable(struct ufs_hba *hba);
+
+int ufshcd_hba_init_crypto_capabilities(struct ufs_hba *hba);
+
+void ufshcd_init_crypto(struct ufs_hba *hba);
+
+void ufshcd_crypto_setup_rq_keyslot_manager(struct ufs_hba *hba,
+					    struct request_queue *q);
+
+#else /* CONFIG_SCSI_UFS_CRYPTO */
+
+static inline void ufshcd_prepare_lrbp_crypto(struct request *rq,
+					      struct ufshcd_lrb *lrbp) { }
+
+static inline void
+ufshcd_prepare_req_desc_hdr_crypto(struct ufshcd_lrb *lrbp, u32 *dword_0,
+				   u32 *dword_1, u32 *dword_3) { }
+
+static inline void ufshcd_crypto_clear_prdt(struct ufs_hba *hba,
+					    struct ufshcd_lrb *lrbp) { }
+
+static inline bool ufshcd_crypto_enable(struct ufs_hba *hba)
+{
+	return false;
+}
+
+static inline int ufshcd_hba_init_crypto_capabilities(struct ufs_hba *hba)
+{
+	return 0;
+}
+
+static inline void ufshcd_init_crypto(struct ufs_hba *hba) { }
+
+static inline void ufshcd_crypto_setup_rq_keyslot_manager(struct ufs_hba *hba,
+						struct request_queue *q) { }
+
+#endif /* CONFIG_SCSI_UFS_CRYPTO */
+
+#endif /* _UFSHCD_CRYPTO_H */
diff --git a/drivers/scsi/ufs/ufshcd-pci.c b/drivers/scsi/ufs/ufshcd-pci.c
index e4ba244..84e6647 100644
--- a/drivers/scsi/ufs/ufshcd-pci.c
+++ b/drivers/scsi/ufs/ufshcd-pci.c
@@ -44,7 +44,7 @@ static int ufs_intel_disable_lcc(struct ufs_hba *hba)
 
 	ufshcd_dme_get(hba, attr, &lcc_enable);
 	if (lcc_enable)
-		ufshcd_dme_set(hba, attr, 0);
+		ufshcd_disable_host_tx_lcc(hba);
 
 	return 0;
 }
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 476ef80..df50cb5 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -42,11 +42,15 @@
 #include <linux/nls.h>
 #include <linux/of.h>
 #include <linux/bitfield.h>
+#include <linux/blk-pm.h>
+#include <asm/unaligned.h>
+#include <linux/blkdev.h>
 #include "ufshcd.h"
 #include "ufs_quirks.h"
 #include "unipro.h"
 #include "ufs-sysfs.h"
 #include "ufs_bsg.h"
+#include "ufshcd-crypto.h"
 
 #define CREATE_TRACE_POINTS
 #include <trace/events/ufs.h>
@@ -88,6 +92,18 @@
 /* Interrupt aggregation default timeout, unit: 40us */
 #define INT_AGGR_DEF_TO	0x02
 
+/* default delay of autosuspend: 2000 ms */
+#define RPM_AUTOSUSPEND_DELAY_MS 2000
+
+/* Default delay of RPM device flush delayed work */
+#define RPM_DEV_FLUSH_RECHECK_WORK_DELAY_MS 5000
+
+/* Default value of wait time before gating device ref clock */
+#define UFSHCD_REF_CLK_GATING_WAIT_US 0xFF /* microsecs */
+
+/* Polling time to wait for fDeviceInit  */
+#define FDEVICEINIT_COMPL_TIMEOUT 1500 /* millisecs */
+
 #define ufshcd_toggle_vreg(_dev, _vreg, _on)				\
 	({                                                              \
 		int _ret;                                               \
@@ -114,7 +130,7 @@ int ufshcd_dump_regs(struct ufs_hba *hba, size_t offset, size_t len,
 	if (offset % 4 != 0 || len % 4 != 0) /* keep readl happy */
 		return -EINVAL;
 
-	regs = kzalloc(len, GFP_KERNEL);
+	regs = kzalloc(len, GFP_ATOMIC);
 	if (!regs)
 		return -ENOMEM;
 
@@ -140,7 +156,8 @@ enum {
 	UFSHCD_STATE_RESET,
 	UFSHCD_STATE_ERROR,
 	UFSHCD_STATE_OPERATIONAL,
-	UFSHCD_STATE_EH_SCHEDULED,
+	UFSHCD_STATE_EH_SCHEDULED_FATAL,
+	UFSHCD_STATE_EH_SCHEDULED_NON_FATAL,
 };
 
 /* UFSHCD error handling flags */
@@ -156,6 +173,7 @@ enum {
 	UFSHCD_UIC_NL_ERROR = (1 << 3), /* Network layer error */
 	UFSHCD_UIC_TL_ERROR = (1 << 4), /* Transport Layer error */
 	UFSHCD_UIC_DME_ERROR = (1 << 5), /* DME error */
+	UFSHCD_UIC_PA_GENERIC_ERROR = (1 << 6), /* Generic PA error */
 };
 
 #define ufshcd_set_eh_in_progress(h) \
@@ -165,19 +183,6 @@ enum {
 #define ufshcd_clear_eh_in_progress(h) \
 	((h)->eh_flags &= ~UFSHCD_EH_IN_PROGRESS)
 
-#define ufshcd_set_ufs_dev_active(h) \
-	((h)->curr_dev_pwr_mode = UFS_ACTIVE_PWR_MODE)
-#define ufshcd_set_ufs_dev_sleep(h) \
-	((h)->curr_dev_pwr_mode = UFS_SLEEP_PWR_MODE)
-#define ufshcd_set_ufs_dev_poweroff(h) \
-	((h)->curr_dev_pwr_mode = UFS_POWERDOWN_PWR_MODE)
-#define ufshcd_is_ufs_dev_active(h) \
-	((h)->curr_dev_pwr_mode == UFS_ACTIVE_PWR_MODE)
-#define ufshcd_is_ufs_dev_sleep(h) \
-	((h)->curr_dev_pwr_mode == UFS_SLEEP_PWR_MODE)
-#define ufshcd_is_ufs_dev_poweroff(h) \
-	((h)->curr_dev_pwr_mode == UFS_POWERDOWN_PWR_MODE)
-
 struct ufs_pm_lvl_states ufs_pm_lvl_states[] = {
 	{UFS_ACTIVE_PWR_MODE, UIC_LINK_ACTIVE_STATE},
 	{UFS_ACTIVE_PWR_MODE, UIC_LINK_HIBERN8_STATE},
@@ -239,18 +244,16 @@ static struct ufs_dev_fix ufs_fixups[] = {
 	END_FIX
 };
 
-static void ufshcd_tmc_handler(struct ufs_hba *hba);
+static irqreturn_t ufshcd_tmc_handler(struct ufs_hba *hba);
 static void ufshcd_async_scan(void *data, async_cookie_t cookie);
 static int ufshcd_reset_and_restore(struct ufs_hba *hba);
 static int ufshcd_eh_host_reset_handler(struct scsi_cmnd *cmd);
 static int ufshcd_clear_tm_cmd(struct ufs_hba *hba, int tag);
 static void ufshcd_hba_exit(struct ufs_hba *hba);
-static int ufshcd_probe_hba(struct ufs_hba *hba);
+static int ufshcd_probe_hba(struct ufs_hba *hba, bool async);
 static int __ufshcd_setup_clocks(struct ufs_hba *hba, bool on,
 				 bool skip_ref_clk);
 static int ufshcd_setup_clocks(struct ufs_hba *hba, bool on);
-static int ufshcd_uic_hibern8_exit(struct ufs_hba *hba);
-static int ufshcd_uic_hibern8_enter(struct ufs_hba *hba);
 static inline void ufshcd_add_delay_before_dme_cmd(struct ufs_hba *hba);
 static int ufshcd_host_reset_and_restore(struct ufs_hba *hba);
 static void ufshcd_resume_clkscaling(struct ufs_hba *hba);
@@ -260,35 +263,58 @@ static int ufshcd_scale_clks(struct ufs_hba *hba, bool scale_up);
 static irqreturn_t ufshcd_intr(int irq, void *__hba);
 static int ufshcd_change_power_mode(struct ufs_hba *hba,
 			     struct ufs_pa_layer_attr *pwr_mode);
+static void ufshcd_schedule_eh_work(struct ufs_hba *hba);
+static int ufshcd_setup_hba_vreg(struct ufs_hba *hba, bool on);
+static int ufshcd_setup_vreg(struct ufs_hba *hba, bool on);
+static inline int ufshcd_config_vreg_hpm(struct ufs_hba *hba,
+					 struct ufs_vreg *vreg);
+static int ufshcd_try_to_abort_task(struct ufs_hba *hba, int tag);
+static int ufshcd_wb_buf_flush_enable(struct ufs_hba *hba);
+static int ufshcd_wb_buf_flush_disable(struct ufs_hba *hba);
+static int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable);
+static int ufshcd_wb_toggle_flush_during_h8(struct ufs_hba *hba, bool set);
+static inline void ufshcd_wb_toggle_flush(struct ufs_hba *hba, bool enable);
+
 static inline bool ufshcd_valid_tag(struct ufs_hba *hba, int tag)
 {
 	return tag >= 0 && tag < hba->nutrs;
 }
 
-static inline int ufshcd_enable_irq(struct ufs_hba *hba)
+static inline void ufshcd_enable_irq(struct ufs_hba *hba)
 {
-	int ret = 0;
-
 	if (!hba->is_irq_enabled) {
-		ret = request_irq(hba->irq, ufshcd_intr, IRQF_SHARED, UFSHCD,
-				hba);
-		if (ret)
-			dev_err(hba->dev, "%s: request_irq failed, ret=%d\n",
-				__func__, ret);
+		enable_irq(hba->irq);
 		hba->is_irq_enabled = true;
 	}
-
-	return ret;
 }
 
 static inline void ufshcd_disable_irq(struct ufs_hba *hba)
 {
 	if (hba->is_irq_enabled) {
-		free_irq(hba->irq, hba);
+		disable_irq(hba->irq);
 		hba->is_irq_enabled = false;
 	}
 }
 
+static inline void ufshcd_wb_config(struct ufs_hba *hba)
+{
+	int ret;
+
+	if (!ufshcd_is_wb_allowed(hba))
+		return;
+
+	ret = ufshcd_wb_ctrl(hba, true);
+	if (ret)
+		dev_err(hba->dev, "%s: Enable WB failed: %d\n", __func__, ret);
+	else
+		dev_info(hba->dev, "%s: Write Booster Configured\n", __func__);
+	ret = ufshcd_wb_toggle_flush_during_h8(hba, true);
+	if (ret)
+		dev_err(hba->dev, "%s: En WB flush during H8: failed: %d\n",
+			__func__, ret);
+	ufshcd_wb_toggle_flush(hba, true);
+}
+
 static void ufshcd_scsi_unblock_requests(struct ufs_hba *hba)
 {
 	if (atomic_dec_and_test(&hba->scsi_block_reqs_cnt))
@@ -327,11 +353,31 @@ static void ufshcd_add_tm_upiu_trace(struct ufs_hba *hba, unsigned int tag,
 			&descp->input_param1);
 }
 
+static void ufshcd_add_uic_command_trace(struct ufs_hba *hba,
+					 struct uic_command *ucmd,
+					 const char *str)
+{
+	u32 cmd;
+
+	if (!trace_ufshcd_uic_command_enabled())
+		return;
+
+	if (!strcmp(str, "send"))
+		cmd = ucmd->command;
+	else
+		cmd = ufshcd_readl(hba, REG_UIC_COMMAND);
+
+	trace_ufshcd_uic_command(dev_name(hba->dev), str, cmd,
+				 ufshcd_readl(hba, REG_UIC_COMMAND_ARG_1),
+				 ufshcd_readl(hba, REG_UIC_COMMAND_ARG_2),
+				 ufshcd_readl(hba, REG_UIC_COMMAND_ARG_3));
+}
+
 static void ufshcd_add_command_trace(struct ufs_hba *hba,
 		unsigned int tag, const char *str)
 {
 	sector_t lba = -1;
-	u8 opcode = 0;
+	u8 opcode = 0, group_id = 0;
 	u32 intr, doorbell;
 	struct ufshcd_lrb *lrbp = &hba->lrb[tag];
 	struct scsi_cmnd *cmd = lrbp->cmd;
@@ -357,13 +403,15 @@ static void ufshcd_add_command_trace(struct ufs_hba *hba,
 				lba = cmd->request->bio->bi_iter.bi_sector;
 			transfer_len = be32_to_cpu(
 				lrbp->ucd_req_ptr->sc.exp_data_transfer_len);
+			if (opcode == WRITE_10)
+				group_id = lrbp->cmd->cmnd[6];
 		}
 	}
 
 	intr = ufshcd_readl(hba, REG_INTERRUPT_STATUS);
 	doorbell = ufshcd_readl(hba, REG_UTP_TRANSFER_REQ_DOOR_BELL);
 	trace_ufshcd_command(dev_name(hba->dev), str, tag,
-				doorbell, transfer_len, intr, lba, opcode);
+			doorbell, transfer_len, intr, lba, opcode, group_id);
 }
 
 static void ufshcd_print_clk_freqs(struct ufs_hba *hba)
@@ -392,7 +440,7 @@ static void ufshcd_print_err_hist(struct ufs_hba *hba,
 	for (i = 0; i < UFS_ERR_REG_HIST_LENGTH; i++) {
 		int p = (i + err_hist->pos) % UFS_ERR_REG_HIST_LENGTH;
 
-		if (err_hist->reg[p] == 0)
+		if (err_hist->tstamp[p] == 0)
 			continue;
 		dev_err(hba->dev, "%s[%d] = 0x%x at %lld us\n", err_name, p,
 			err_hist->reg[p], ktime_to_us(err_hist->tstamp[p]));
@@ -406,15 +454,6 @@ static void ufshcd_print_err_hist(struct ufs_hba *hba,
 static void ufshcd_print_host_regs(struct ufs_hba *hba)
 {
 	ufshcd_dump_regs(hba, 0, UFSHCI_REG_SPACE_SIZE, "host_regs: ");
-	dev_err(hba->dev, "hba->ufs_version = 0x%x, hba->capabilities = 0x%x\n",
-		hba->ufs_version, hba->capabilities);
-	dev_err(hba->dev,
-		"hba->outstanding_reqs = 0x%x, hba->outstanding_tasks = 0x%x\n",
-		(u32)hba->outstanding_reqs, (u32)hba->outstanding_tasks);
-	dev_err(hba->dev,
-		"last_hibern8_exit_tstamp at %lld us, hibern8_exit_cnt = %d\n",
-		ktime_to_us(hba->ufs_stats.last_hibern8_exit_tstamp),
-		hba->ufs_stats.hibern8_exit_cnt);
 
 	ufshcd_print_err_hist(hba, &hba->ufs_stats.pa_err, "pa_err");
 	ufshcd_print_err_hist(hba, &hba->ufs_stats.dl_err, "dl_err");
@@ -433,10 +472,7 @@ static void ufshcd_print_host_regs(struct ufs_hba *hba)
 	ufshcd_print_err_hist(hba, &hba->ufs_stats.host_reset, "host_reset");
 	ufshcd_print_err_hist(hba, &hba->ufs_stats.task_abort, "task_abort");
 
-	ufshcd_print_clk_freqs(hba);
-
-	if (hba->vops && hba->vops->dbg_register_dump)
-		hba->vops->dbg_register_dump(hba);
+	ufshcd_vops_dbg_register_dump(hba);
 }
 
 static
@@ -468,8 +504,11 @@ void ufshcd_print_trs(struct ufs_hba *hba, unsigned long bitmap, bool pr_prdt)
 		ufshcd_hex_dump("UPIU RSP: ", lrbp->ucd_rsp_ptr,
 				sizeof(struct utp_upiu_rsp));
 
-		prdt_length = le16_to_cpu(
-			lrbp->utr_descriptor_ptr->prd_table_length);
+		prdt_length =
+			le16_to_cpu(lrbp->utr_descriptor_ptr->prd_table_length);
+		if (hba->quirks & UFSHCD_QUIRK_PRDT_BYTE_GRAN)
+			prdt_length /= hba->sg_entry_size;
+
 		dev_err(hba->dev,
 			"UPIU[%d] - PRDT - %d entries  phys@0x%llx\n",
 			tag, prdt_length,
@@ -477,7 +516,7 @@ void ufshcd_print_trs(struct ufs_hba *hba, unsigned long bitmap, bool pr_prdt)
 
 		if (pr_prdt)
 			ufshcd_hex_dump("UPIU PRDT: ", lrbp->ucd_prdt_ptr,
-				sizeof(struct ufshcd_sg_entry) * prdt_length);
+				hba->sg_entry_size * prdt_length);
 	}
 }
 
@@ -495,6 +534,8 @@ static void ufshcd_print_tmrs(struct ufs_hba *hba, unsigned long bitmap)
 
 static void ufshcd_print_host_state(struct ufs_hba *hba)
 {
+	struct scsi_device *sdev_ufs = hba->sdev_ufs_device;
+
 	dev_err(hba->dev, "UFS Host state=%d\n", hba->ufshcd_state);
 	dev_err(hba->dev, "lrb in use=0x%lx, outstanding reqs=0x%lx tasks=0x%lx\n",
 		hba->lrb_in_use, hba->outstanding_reqs, hba->outstanding_tasks);
@@ -507,12 +548,24 @@ static void ufshcd_print_host_state(struct ufs_hba *hba)
 	dev_err(hba->dev, "Auto BKOPS=%d, Host self-block=%d\n",
 		hba->auto_bkops_enabled, hba->host->host_self_blocked);
 	dev_err(hba->dev, "Clk gate=%d\n", hba->clk_gating.state);
+	dev_err(hba->dev,
+		"last_hibern8_exit_tstamp at %lld us, hibern8_exit_cnt=%d\n",
+		ktime_to_us(hba->ufs_stats.last_hibern8_exit_tstamp),
+		hba->ufs_stats.hibern8_exit_cnt);
+	dev_err(hba->dev, "last intr at %lld us, last intr status=0x%x\n",
+		ktime_to_us(hba->ufs_stats.last_intr_ts),
+		hba->ufs_stats.last_intr_status);
 	dev_err(hba->dev, "error handling flags=0x%x, req. abort count=%d\n",
 		hba->eh_flags, hba->req_abort_count);
-	dev_err(hba->dev, "Host capabilities=0x%x, caps=0x%x\n",
-		hba->capabilities, hba->caps);
+	dev_err(hba->dev, "hba->ufs_version=0x%x, Host capabilities=0x%x, caps=0x%x\n",
+		hba->ufs_version, hba->capabilities, hba->caps);
 	dev_err(hba->dev, "quirks=0x%x, dev. quirks=0x%x\n", hba->quirks,
 		hba->dev_quirks);
+	if (sdev_ufs)
+		dev_err(hba->dev, "UFS dev info: %.8s %.16s rev %.4s\n",
+			sdev_ufs->vendor, sdev_ufs->model, sdev_ufs->rev);
+
+	ufshcd_print_clk_freqs(hba);
 }
 
 /**
@@ -541,6 +594,18 @@ static void ufshcd_print_pwr_info(struct ufs_hba *hba)
 		 hba->pwr_info.hs_rate);
 }
 
+void ufshcd_delay_us(unsigned long us, unsigned long tolerance)
+{
+	if (!us)
+		return;
+
+	if (us < 10)
+		udelay(us);
+	else
+		usleep_range(us, us + tolerance);
+}
+EXPORT_SYMBOL_GPL(ufshcd_delay_us);
+
 /*
  * ufshcd_wait_for_register - wait for register value to change
  * @hba - per-adapter interface
@@ -859,7 +924,12 @@ static void ufshcd_enable_run_stop_reg(struct ufs_hba *hba)
  */
 static inline void ufshcd_hba_start(struct ufs_hba *hba)
 {
-	ufshcd_writel(hba, CONTROLLER_ENABLE, REG_CONTROLLER_ENABLE);
+	u32 val = CONTROLLER_ENABLE;
+
+	if (ufshcd_crypto_enable(hba))
+		val |= CRYPTO_GENERAL_ENABLE;
+
+	ufshcd_writel(hba, val, REG_CONTROLLER_ENABLE);
 }
 
 /**
@@ -902,28 +972,29 @@ static bool ufshcd_is_unipro_pa_params_tuning_req(struct ufs_hba *hba)
 		return false;
 }
 
-static int ufshcd_scale_clks(struct ufs_hba *hba, bool scale_up)
+/**
+ * ufshcd_set_clk_freq - set UFS controller clock frequencies
+ * @hba: per adapter instance
+ * @scale_up: If True, set max possible frequency othewise set low frequency
+ *
+ * Returns 0 if successful
+ * Returns < 0 for any other errors
+ */
+static int ufshcd_set_clk_freq(struct ufs_hba *hba, bool scale_up)
 {
 	int ret = 0;
 	struct ufs_clk_info *clki;
 	struct list_head *head = &hba->clk_list_head;
-	ktime_t start = ktime_get();
-	bool clk_state_changed = false;
 
 	if (list_empty(head))
 		goto out;
 
-	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, PRE_CHANGE);
-	if (ret)
-		return ret;
-
 	list_for_each_entry(clki, head, list) {
 		if (!IS_ERR_OR_NULL(clki->clk)) {
 			if (scale_up && clki->max_freq) {
 				if (clki->curr_freq == clki->max_freq)
 					continue;
 
-				clk_state_changed = true;
 				ret = clk_set_rate(clki->clk, clki->max_freq);
 				if (ret) {
 					dev_err(hba->dev, "%s: %s clk set rate(%dHz) failed, %d\n",
@@ -942,7 +1013,6 @@ static int ufshcd_scale_clks(struct ufs_hba *hba, bool scale_up)
 				if (clki->curr_freq == clki->min_freq)
 					continue;
 
-				clk_state_changed = true;
 				ret = clk_set_rate(clki->clk, clki->min_freq);
 				if (ret) {
 					dev_err(hba->dev, "%s: %s clk set rate(%dHz) failed, %d\n",
@@ -961,13 +1031,36 @@ static int ufshcd_scale_clks(struct ufs_hba *hba, bool scale_up)
 				clki->name, clk_get_rate(clki->clk));
 	}
 
-	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, POST_CHANGE);
-
 out:
-	if (clk_state_changed)
-		trace_ufshcd_profile_clk_scaling(dev_name(hba->dev),
-			(scale_up ? "up" : "down"),
-			ktime_to_us(ktime_sub(ktime_get(), start)), ret);
+	return ret;
+}
+
+/**
+ * ufshcd_scale_clks - scale up or scale down UFS controller clocks
+ * @hba: per adapter instance
+ * @scale_up: True if scaling up and false if scaling down
+ *
+ * Returns 0 if successful
+ * Returns < 0 for any other errors
+ */
+static int ufshcd_scale_clks(struct ufs_hba *hba, bool scale_up)
+{
+	int ret = 0;
+
+	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, PRE_CHANGE);
+	if (ret)
+		return ret;
+
+	ret = ufshcd_set_clk_freq(hba, scale_up);
+	if (ret)
+		return ret;
+
+	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, POST_CHANGE);
+	if (ret) {
+		ufshcd_set_clk_freq(hba, !scale_up);
+		return ret;
+	}
+
 	return ret;
 }
 
@@ -1099,8 +1192,7 @@ static int ufshcd_scale_gear(struct ufs_hba *hba, bool scale_up)
 	}
 
 	/* check if the power mode needs to be changed or not? */
-	ret = ufshcd_change_power_mode(hba, &new_pwr_info);
-
+	ret = ufshcd_config_pwr_mode(hba, &new_pwr_info);
 	if (ret)
 		dev_err(hba->dev, "%s: failed err %d, old gear: (tx %d rx %d), new gear: (tx %d rx %d)",
 			__func__, ret,
@@ -1153,35 +1245,41 @@ static int ufshcd_devfreq_scale(struct ufs_hba *hba, bool scale_up)
 
 	ret = ufshcd_clock_scaling_prepare(hba);
 	if (ret)
-		return ret;
+		goto out;
 
 	/* scale down the gear before scaling down clocks */
 	if (!scale_up) {
 		ret = ufshcd_scale_gear(hba, false);
 		if (ret)
-			goto out;
+			goto clk_scaling_unprepare;
 	}
 
 	ret = ufshcd_scale_clks(hba, scale_up);
-	if (ret) {
-		if (!scale_up)
-			ufshcd_scale_gear(hba, true);
-		goto out;
-	}
+	if (ret)
+		goto scale_up_gear;
 
 	/* scale up the gear after scaling up clocks */
 	if (scale_up) {
 		ret = ufshcd_scale_gear(hba, true);
 		if (ret) {
 			ufshcd_scale_clks(hba, false);
-			goto out;
+			goto clk_scaling_unprepare;
 		}
 	}
 
-	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, POST_CHANGE);
+	/* Enable Write Booster if we have scaled up else disable it */
+	up_write(&hba->clk_scaling_lock);
+	ufshcd_wb_ctrl(hba, scale_up);
+	down_write(&hba->clk_scaling_lock);
 
-out:
+	goto clk_scaling_unprepare;
+
+scale_up_gear:
+	if (!scale_up)
+		ufshcd_scale_gear(hba, true);
+clk_scaling_unprepare:
 	ufshcd_clock_scaling_unprepare(hba);
+out:
 	ufshcd_release(hba);
 	return ret;
 }
@@ -1234,6 +1332,9 @@ static int ufshcd_devfreq_target(struct device *dev,
 	if (!ufshcd_is_clkscaling_supported(hba))
 		return -EINVAL;
 
+	clki = list_first_entry(&hba->clk_list_head, struct ufs_clk_info, list);
+	/* Override with the closest supported frequency */
+	*freq = (unsigned long) clk_round_rate(clki->clk, *freq);
 	spin_lock_irqsave(hba->host->host_lock, irq_flags);
 	if (ufshcd_eh_in_progress(hba)) {
 		spin_unlock_irqrestore(hba->host->host_lock, irq_flags);
@@ -1248,8 +1349,11 @@ static int ufshcd_devfreq_target(struct device *dev,
 		goto out;
 	}
 
-	clki = list_first_entry(&hba->clk_list_head, struct ufs_clk_info, list);
+	/* Decide based on the rounded-off frequency and update */
 	scale_up = (*freq == clki->max_freq) ? true : false;
+	if (!scale_up)
+		*freq = clki->min_freq;
+	/* Update the frequency */
 	if (!ufshcd_is_devfreq_scaling_required(hba, scale_up)) {
 		spin_unlock_irqrestore(hba->host->host_lock, irq_flags);
 		ret = 0;
@@ -1286,6 +1390,9 @@ static int ufshcd_devfreq_get_dev_status(struct device *dev,
 	struct ufs_hba *hba = dev_get_drvdata(dev);
 	struct ufs_clk_scaling *scaling = &hba->clk_scaling;
 	unsigned long flags;
+	struct list_head *clk_list = &hba->clk_list_head;
+	struct ufs_clk_info *clki;
+	ktime_t curr_t;
 
 	if (!ufshcd_is_clkscaling_supported(hba))
 		return -EINVAL;
@@ -1293,22 +1400,29 @@ static int ufshcd_devfreq_get_dev_status(struct device *dev,
 	memset(stat, 0, sizeof(*stat));
 
 	spin_lock_irqsave(hba->host->host_lock, flags);
+	curr_t = ktime_get();
 	if (!scaling->window_start_t)
 		goto start_window;
 
+	clki = list_first_entry(clk_list, struct ufs_clk_info, list);
+	/*
+	 * If current frequency is 0, then the ondemand governor considers
+	 * there's no initial frequency set. And it always requests to set
+	 * to max. frequency.
+	 */
+	stat->current_frequency = clki->curr_freq;
 	if (scaling->is_busy_started)
-		scaling->tot_busy_t += ktime_to_us(ktime_sub(ktime_get(),
-					scaling->busy_start_t));
+		scaling->tot_busy_t += ktime_us_delta(curr_t,
+				scaling->busy_start_t);
 
-	stat->total_time = jiffies_to_usecs((long)jiffies -
-				(long)scaling->window_start_t);
+	stat->total_time = ktime_us_delta(curr_t, scaling->window_start_t);
 	stat->busy_time = scaling->tot_busy_t;
 start_window:
-	scaling->window_start_t = jiffies;
+	scaling->window_start_t = curr_t;
 	scaling->tot_busy_t = 0;
 
 	if (hba->outstanding_reqs) {
-		scaling->busy_start_t = ktime_get();
+		scaling->busy_start_t = curr_t;
 		scaling->is_busy_started = true;
 	} else {
 		scaling->busy_start_t = 0;
@@ -1318,12 +1432,6 @@ static int ufshcd_devfreq_get_dev_status(struct device *dev,
 	return 0;
 }
 
-static struct devfreq_dev_profile ufs_devfreq_profile = {
-	.polling_ms	= 100,
-	.target		= ufshcd_devfreq_target,
-	.get_dev_status	= ufshcd_devfreq_get_dev_status,
-};
-
 static int ufshcd_devfreq_init(struct ufs_hba *hba)
 {
 	struct list_head *clk_list = &hba->clk_list_head;
@@ -1339,10 +1447,12 @@ static int ufshcd_devfreq_init(struct ufs_hba *hba)
 	dev_pm_opp_add(hba->dev, clki->min_freq, 0);
 	dev_pm_opp_add(hba->dev, clki->max_freq, 0);
 
+	ufshcd_vops_config_scaling_param(hba, &hba->vps->devfreq_profile,
+					 &hba->vps->ondemand_data);
 	devfreq = devfreq_add_device(hba->dev,
-			&ufs_devfreq_profile,
+			&hba->vps->devfreq_profile,
 			DEVFREQ_GOV_SIMPLE_ONDEMAND,
-			NULL);
+			&hba->vps->ondemand_data);
 	if (IS_ERR(devfreq)) {
 		ret = PTR_ERR(devfreq);
 		dev_err(hba->dev, "Unable to register with devfreq %d\n", ret);
@@ -1496,6 +1606,8 @@ static void ufshcd_ungate_work(struct work_struct *work)
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 	ufshcd_setup_clocks(hba, true);
 
+	ufshcd_enable_irq(hba);
+
 	/* Exit from hibern8 */
 	if (ufshcd_can_hibern8_during_gating(hba)) {
 		/* Prevent gating in this path */
@@ -1531,11 +1643,6 @@ int ufshcd_hold(struct ufs_hba *hba, bool async)
 	spin_lock_irqsave(hba->host->host_lock, flags);
 	hba->clk_gating.active_reqs++;
 
-	if (ufshcd_eh_in_progress(hba)) {
-		spin_unlock_irqrestore(hba->host->host_lock, flags);
-		return 0;
-	}
-
 start:
 	switch (hba->clk_gating.state) {
 	case CLKS_ON:
@@ -1615,6 +1722,7 @@ static void ufshcd_gate_work(struct work_struct *work)
 	struct ufs_hba *hba = container_of(work, struct ufs_hba,
 			clk_gating.gate_work.work);
 	unsigned long flags;
+	int ret;
 
 	spin_lock_irqsave(hba->host->host_lock, flags);
 	/*
@@ -1624,7 +1732,7 @@ static void ufshcd_gate_work(struct work_struct *work)
 	 * state to CLKS_ON.
 	 */
 	if (hba->clk_gating.is_suspended ||
-		(hba->clk_gating.state == REQ_CLKS_ON)) {
+		(hba->clk_gating.state != REQ_CLKS_OFF)) {
 		hba->clk_gating.state = CLKS_ON;
 		trace_ufshcd_clk_gating(dev_name(hba->dev),
 					hba->clk_gating.state);
@@ -1641,8 +1749,11 @@ static void ufshcd_gate_work(struct work_struct *work)
 
 	/* put the link into hibern8 mode before turning off clocks */
 	if (ufshcd_can_hibern8_during_gating(hba)) {
-		if (ufshcd_uic_hibern8_enter(hba)) {
+		ret = ufshcd_uic_hibern8_enter(hba);
+		if (ret) {
 			hba->clk_gating.state = CLKS_ON;
+			dev_err(hba->dev, "%s: hibern8 enter failed %d\n",
+					__func__, ret);
 			trace_ufshcd_clk_gating(dev_name(hba->dev),
 						hba->clk_gating.state);
 			goto out;
@@ -1650,6 +1761,8 @@ static void ufshcd_gate_work(struct work_struct *work)
 		ufshcd_set_link_hibern8(hba);
 	}
 
+	ufshcd_disable_irq(hba);
+
 	if (!ufshcd_is_link_active(hba))
 		ufshcd_setup_clocks(hba, false);
 	else
@@ -1685,11 +1798,10 @@ static void __ufshcd_release(struct ufs_hba *hba)
 
 	hba->clk_gating.active_reqs--;
 
-	if (hba->clk_gating.active_reqs || hba->clk_gating.is_suspended
-		|| hba->ufshcd_state != UFSHCD_STATE_OPERATIONAL
-		|| hba->lrb_in_use || hba->outstanding_tasks
-		|| hba->active_uic_cmd || hba->uic_async_done
-		|| ufshcd_eh_in_progress(hba))
+	if (hba->clk_gating.active_reqs || hba->clk_gating.is_suspended ||
+	    hba->ufshcd_state != UFSHCD_STATE_OPERATIONAL ||
+	    hba->lrb_in_use || hba->outstanding_tasks ||
+	    hba->active_uic_cmd || hba->uic_async_done)
 		return;
 
 	hba->clk_gating.state = REQ_CLKS_OFF;
@@ -1751,19 +1863,19 @@ static ssize_t ufshcd_clkgate_enable_store(struct device *dev,
 		return -EINVAL;
 
 	value = !!value;
+
+	spin_lock_irqsave(hba->host->host_lock, flags);
 	if (value == hba->clk_gating.is_enabled)
 		goto out;
 
-	if (value) {
-		ufshcd_release(hba);
-	} else {
-		spin_lock_irqsave(hba->host->host_lock, flags);
+	if (value)
+		hba->clk_gating.active_reqs--;
+	else
 		hba->clk_gating.active_reqs++;
-		spin_unlock_irqrestore(hba->host->host_lock, flags);
-	}
 
 	hba->clk_gating.is_enabled = value;
 out:
+	spin_unlock_irqrestore(hba->host->host_lock, flags);
 	return count;
 }
 
@@ -1802,6 +1914,8 @@ static void ufshcd_init_clk_gating(struct ufs_hba *hba)
 	if (!ufshcd_is_clkgating_allowed(hba))
 		return;
 
+	hba->clk_gating.state = CLKS_ON;
+
 	hba->clk_gating.delay_ms = 150;
 	INIT_DELAYED_WORK(&hba->clk_gating.gate_work, ufshcd_gate_work);
 	INIT_WORK(&hba->clk_gating.ungate_work, ufshcd_ungate_work);
@@ -1809,7 +1923,7 @@ static void ufshcd_init_clk_gating(struct ufs_hba *hba)
 	snprintf(wq_name, ARRAY_SIZE(wq_name), "ufs_clk_gating_%d",
 		 hba->host->host_no);
 	hba->clk_gating.clk_gating_workq = alloc_ordered_workqueue(wq_name,
-							   WQ_MEM_RECLAIM);
+					WQ_MEM_RECLAIM | WQ_HIGHPRI);
 
 	hba->clk_gating.is_enabled = true;
 
@@ -1845,6 +1959,7 @@ static void ufshcd_exit_clk_gating(struct ufs_hba *hba)
 static void ufshcd_clk_scaling_start_busy(struct ufs_hba *hba)
 {
 	bool queue_resume_work = false;
+	ktime_t curr_t = ktime_get();
 
 	if (!ufshcd_is_clkscaling_supported(hba))
 		return;
@@ -1860,13 +1975,13 @@ static void ufshcd_clk_scaling_start_busy(struct ufs_hba *hba)
 			   &hba->clk_scaling.resume_work);
 
 	if (!hba->clk_scaling.window_start_t) {
-		hba->clk_scaling.window_start_t = jiffies;
+		hba->clk_scaling.window_start_t = curr_t;
 		hba->clk_scaling.tot_busy_t = 0;
 		hba->clk_scaling.is_busy_started = false;
 	}
 
 	if (!hba->clk_scaling.is_busy_started) {
-		hba->clk_scaling.busy_start_t = ktime_get();
+		hba->clk_scaling.busy_start_t = curr_t;
 		hba->clk_scaling.is_busy_started = true;
 	}
 }
@@ -1893,8 +2008,11 @@ static void ufshcd_clk_scaling_update_busy(struct ufs_hba *hba)
 static inline
 void ufshcd_send_command(struct ufs_hba *hba, unsigned int task_tag)
 {
-	hba->lrb[task_tag].issue_time_stamp = ktime_get();
-	hba->lrb[task_tag].compl_time_stamp = ktime_set(0, 0);
+	struct ufshcd_lrb *lrbp = &hba->lrb[task_tag];
+
+	lrbp->issue_time_stamp = ktime_get();
+	lrbp->compl_time_stamp = ktime_set(0, 0);
+	ufshcd_vops_setup_xfer_req(hba, task_tag, (lrbp->cmd ? true : false));
 	ufshcd_add_command_trace(hba, task_tag, "send");
 	ufshcd_clk_scaling_start_busy(hba);
 	__set_bit(task_tag, &hba->outstanding_reqs);
@@ -1964,15 +2082,26 @@ int ufshcd_copy_query_response(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
 /**
  * ufshcd_hba_capabilities - Read controller capabilities
  * @hba: per adapter instance
+ *
+ * Return: 0 on success, negative on error.
  */
-static inline void ufshcd_hba_capabilities(struct ufs_hba *hba)
+static inline int ufshcd_hba_capabilities(struct ufs_hba *hba)
 {
+	int err;
+
 	hba->capabilities = ufshcd_readl(hba, REG_CONTROLLER_CAPABILITIES);
 
 	/* nutrs and nutmrs are 0 based values */
 	hba->nutrs = (hba->capabilities & MASK_TRANSFER_REQUESTS_SLOTS) + 1;
 	hba->nutmrs =
 	((hba->capabilities & MASK_TASK_MANAGEMENT_REQUEST_SLOTS) >> 16) + 1;
+
+	/* Read crypto capabilities */
+	err = ufshcd_hba_init_crypto_capabilities(hba);
+	if (err)
+		dev_err(hba->dev, "crypto setup failed\n");
+
+	return err;
 }
 
 /**
@@ -2020,6 +2149,8 @@ ufshcd_dispatch_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd)
 	ufshcd_writel(hba, uic_cmd->argument2, REG_UIC_COMMAND_ARG_2);
 	ufshcd_writel(hba, uic_cmd->argument3, REG_UIC_COMMAND_ARG_3);
 
+	ufshcd_add_uic_command_trace(hba, uic_cmd, "send");
+
 	/* Write UIC Cmd */
 	ufshcd_writel(hba, uic_cmd->command & COMMAND_OPCODE_MASK,
 		      REG_UIC_COMMAND);
@@ -2117,7 +2248,7 @@ int ufshcd_send_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd)
  */
 static int ufshcd_map_sg(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
 {
-	struct ufshcd_sg_entry *prd_table;
+	struct ufshcd_sg_entry *prd;
 	struct scatterlist *sg;
 	struct scsi_cmnd *cmd;
 	int sg_segments;
@@ -2132,27 +2263,28 @@ static int ufshcd_map_sg(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
 		if (hba->quirks & UFSHCD_QUIRK_PRDT_BYTE_GRAN)
 			lrbp->utr_descriptor_ptr->prd_table_length =
 				cpu_to_le16((u16)(sg_segments *
-					sizeof(struct ufshcd_sg_entry)));
+						  hba->sg_entry_size));
 		else
 			lrbp->utr_descriptor_ptr->prd_table_length =
 				cpu_to_le16((u16) (sg_segments));
 
-		prd_table = (struct ufshcd_sg_entry *)lrbp->ucd_prdt_ptr;
+		prd = (struct ufshcd_sg_entry *)lrbp->ucd_prdt_ptr;
 
 		scsi_for_each_sg(cmd, sg, sg_segments, i) {
-			prd_table[i].size  =
+			prd->size =
 				cpu_to_le32(((u32) sg_dma_len(sg))-1);
-			prd_table[i].base_addr =
+			prd->base_addr =
 				cpu_to_le32(lower_32_bits(sg->dma_address));
-			prd_table[i].upper_addr =
+			prd->upper_addr =
 				cpu_to_le32(upper_32_bits(sg->dma_address));
-			prd_table[i].reserved = 0;
+			prd->reserved = 0;
+			prd = (void *)prd + hba->sg_entry_size;
 		}
 	} else {
 		lrbp->utr_descriptor_ptr->prd_table_length = 0;
 	}
 
-	return 0;
+	return ufshcd_vops_fill_prdt(hba, lrbp, sg_segments);
 }
 
 /**
@@ -2210,6 +2342,8 @@ static void ufshcd_prepare_req_desc_hdr(struct ufshcd_lrb *lrbp,
 	struct utp_transfer_req_desc *req_desc = lrbp->utr_descriptor_ptr;
 	u32 data_direction;
 	u32 dword_0;
+	u32 dword_1 = 0;
+	u32 dword_3 = 0;
 
 	if (cmd_dir == DMA_FROM_DEVICE) {
 		data_direction = UTP_DEVICE_TO_HOST;
@@ -2227,10 +2361,12 @@ static void ufshcd_prepare_req_desc_hdr(struct ufshcd_lrb *lrbp,
 	if (lrbp->intr_cmd)
 		dword_0 |= UTP_REQ_DESC_INT_CMD;
 
+	/* Prepare crypto related dwords */
+	ufshcd_prepare_req_desc_hdr_crypto(lrbp, &dword_0, &dword_1, &dword_3);
+
 	/* Transfer request descriptor header fields */
 	req_desc->header.dword_0 = cpu_to_le32(dword_0);
-	/* dword_1 is reserved, hence it is set to 0 */
-	req_desc->header.dword_1 = 0;
+	req_desc->header.dword_1 = cpu_to_le32(dword_1);
 	/*
 	 * assigning invalid value for command status. Controller
 	 * updates OCS on command completion, with the command
@@ -2238,8 +2374,7 @@ static void ufshcd_prepare_req_desc_hdr(struct ufshcd_lrb *lrbp,
 	 */
 	req_desc->header.dword_2 =
 		cpu_to_le32(OCS_INVALID_COMMAND_STATUS);
-	/* dword_3 is reserved, hence it is set to 0 */
-	req_desc->header.dword_3 = 0;
+	req_desc->header.dword_3 = cpu_to_le32(dword_3);
 
 	req_desc->prd_table_length = 0;
 }
@@ -2427,34 +2562,6 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
 	if (!down_read_trylock(&hba->clk_scaling_lock))
 		return SCSI_MLQUEUE_HOST_BUSY;
 
-	spin_lock_irqsave(hba->host->host_lock, flags);
-	switch (hba->ufshcd_state) {
-	case UFSHCD_STATE_OPERATIONAL:
-		break;
-	case UFSHCD_STATE_EH_SCHEDULED:
-	case UFSHCD_STATE_RESET:
-		err = SCSI_MLQUEUE_HOST_BUSY;
-		goto out_unlock;
-	case UFSHCD_STATE_ERROR:
-		set_host_byte(cmd, DID_ERROR);
-		cmd->scsi_done(cmd);
-		goto out_unlock;
-	default:
-		dev_WARN_ONCE(hba->dev, 1, "%s: invalid state %d\n",
-				__func__, hba->ufshcd_state);
-		set_host_byte(cmd, DID_BAD_TARGET);
-		cmd->scsi_done(cmd);
-		goto out_unlock;
-	}
-
-	/* if error handling is in progress, don't issue commands */
-	if (ufshcd_eh_in_progress(hba)) {
-		set_host_byte(cmd, DID_ERROR);
-		cmd->scsi_done(cmd);
-		goto out_unlock;
-	}
-	spin_unlock_irqrestore(hba->host->host_lock, flags);
-
 	hba->req_abort_count = 0;
 
 	/* acquire the tag to make sure device cmds don't use it */
@@ -2475,7 +2582,8 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
 		clear_bit_unlock(tag, &hba->lrb_in_use);
 		goto out;
 	}
-	WARN_ON(hba->clk_gating.state != CLKS_ON);
+	WARN_ON(ufshcd_is_clkgating_allowed(hba) &&
+		(hba->clk_gating.state != CLKS_ON));
 
 	lrbp = &hba->lrb[tag];
 
@@ -2486,6 +2594,17 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
 	lrbp->task_tag = tag;
 	lrbp->lun = ufshcd_scsi_to_upiu_lun(cmd->device->lun);
 	lrbp->intr_cmd = !ufshcd_is_intr_aggr_allowed(hba) ? true : false;
+
+	err = ufshcd_vops_prepare_command(hba, cmd->request, lrbp);
+	if (err) {
+		ufshcd_release(hba);
+		lrbp->cmd = NULL;
+		clear_bit_unlock(tag, &hba->lrb_in_use);
+		goto out;
+	}
+
+	ufshcd_prepare_lrbp_crypto(cmd->request, lrbp);
+
 	lrbp->req_abort_skip = false;
 
 	ufshcd_comp_scsi_upiu(hba, lrbp);
@@ -2500,12 +2619,52 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
 	/* Make sure descriptors are ready before ringing the doorbell */
 	wmb();
 
-	/* issue command to the controller */
 	spin_lock_irqsave(hba->host->host_lock, flags);
-	ufshcd_vops_setup_xfer_req(hba, tag, (lrbp->cmd ? true : false));
+	switch (hba->ufshcd_state) {
+	case UFSHCD_STATE_OPERATIONAL:
+	case UFSHCD_STATE_EH_SCHEDULED_NON_FATAL:
+		break;
+	case UFSHCD_STATE_EH_SCHEDULED_FATAL:
+		/*
+		 * pm_runtime_get_sync() is used at error handling preparation
+		 * stage. If a scsi cmd, e.g. the SSU cmd, is sent from hba's
+		 * PM ops, it can never be finished if we let SCSI layer keep
+		 * retrying it, which gets err handler stuck forever. Neither
+		 * can we let the scsi cmd pass through, because UFS is in bad
+		 * state, the scsi cmd may eventually time out, which will get
+		 * err handler blocked for too long. So, just fail the scsi cmd
+		 * sent from PM ops, err handler can recover PM error anyways.
+		 */
+		if (hba->pm_op_in_progress) {
+			hba->force_reset = true;
+			set_host_byte(cmd, DID_BAD_TARGET);
+			goto out_compl_cmd;
+		}
+		fallthrough;
+	case UFSHCD_STATE_RESET:
+		err = SCSI_MLQUEUE_HOST_BUSY;
+		goto out_compl_cmd;
+	case UFSHCD_STATE_ERROR:
+		set_host_byte(cmd, DID_ERROR);
+		goto out_compl_cmd;
+	default:
+		dev_WARN_ONCE(hba->dev, 1, "%s: invalid state %d\n",
+				__func__, hba->ufshcd_state);
+		set_host_byte(cmd, DID_BAD_TARGET);
+		goto out_compl_cmd;
+	}
 	ufshcd_send_command(hba, tag);
-out_unlock:
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
+	goto out;
+
+out_compl_cmd:
+	scsi_dma_unmap(lrbp->cmd);
+	lrbp->cmd = NULL;
+	clear_bit_unlock(tag, &hba->lrb_in_use);
+	spin_unlock_irqrestore(hba->host->host_lock, flags);
+	ufshcd_release(hba);
+	if (!err)
+		cmd->scsi_done(cmd);
 out:
 	up_read(&hba->clk_scaling_lock);
 	return err;
@@ -2520,6 +2679,7 @@ static int ufshcd_compose_dev_cmd(struct ufs_hba *hba,
 	lrbp->task_tag = tag;
 	lrbp->lun = 0; /* device management cmd is not specific to any LUN */
 	lrbp->intr_cmd = true; /* No interrupt aggregation */
+	ufshcd_prepare_lrbp_crypto(NULL, lrbp);
 	hba->dev_cmd.type = cmd_type;
 
 	return ufshcd_comp_devman_upiu(hba, lrbp);
@@ -2719,7 +2879,6 @@ static int ufshcd_exec_dev_cmd(struct ufs_hba *hba,
 	/* Make sure descriptors are ready before ringing the doorbell */
 	wmb();
 	spin_lock_irqsave(hba->host->host_lock, flags);
-	ufshcd_vops_setup_xfer_req(hba, tag, (lrbp->cmd ? true : false));
 	ufshcd_send_command(hba, tag);
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 
@@ -2759,14 +2918,14 @@ static inline void ufshcd_init_query(struct ufs_hba *hba,
 	(*request)->upiu_req.selector = selector;
 }
 
-static int ufshcd_query_flag_retry(struct ufs_hba *hba,
-	enum query_opcode opcode, enum flag_idn idn, bool *flag_res)
+int ufshcd_query_flag_retry(struct ufs_hba *hba,
+	enum query_opcode opcode, enum flag_idn idn, u8 index, bool *flag_res)
 {
 	int ret;
 	int retries;
 
 	for (retries = 0; retries < QUERY_REQ_RETRIES; retries++) {
-		ret = ufshcd_query_flag(hba, opcode, idn, flag_res);
+		ret = ufshcd_query_flag(hba, opcode, idn, index, flag_res);
 		if (ret)
 			dev_dbg(hba->dev,
 				"%s: failed with error %d, retries %d\n",
@@ -2781,22 +2940,24 @@ static int ufshcd_query_flag_retry(struct ufs_hba *hba,
 			__func__, opcode, idn, ret, retries);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(ufshcd_query_flag_retry);
 
 /**
  * ufshcd_query_flag() - API function for sending flag query requests
  * @hba: per-adapter instance
  * @opcode: flag query to perform
  * @idn: flag idn to access
+ * @index: flag index to access
  * @flag_res: the flag value after the query request completes
  *
  * Returns 0 for success, non-zero in case of failure
  */
 int ufshcd_query_flag(struct ufs_hba *hba, enum query_opcode opcode,
-			enum flag_idn idn, bool *flag_res)
+			enum flag_idn idn, u8 index, bool *flag_res)
 {
 	struct ufs_query_req *request = NULL;
 	struct ufs_query_res *response = NULL;
-	int err, index = 0, selector = 0;
+	int err, selector = 0;
 	int timeout = QUERY_REQ_TIMEOUT;
 
 	BUG_ON(!hba);
@@ -2848,6 +3009,7 @@ int ufshcd_query_flag(struct ufs_hba *hba, enum query_opcode opcode,
 	ufshcd_release(hba);
 	return err;
 }
+EXPORT_SYMBOL_GPL(ufshcd_query_flag);
 
 /**
  * ufshcd_query_attr - API function for sending attribute requests
@@ -2912,6 +3074,7 @@ int ufshcd_query_attr(struct ufs_hba *hba, enum query_opcode opcode,
 	ufshcd_release(hba);
 	return err;
 }
+EXPORT_SYMBOL_GPL(ufshcd_query_attr);
 
 /**
  * ufshcd_query_attr_retry() - API function for sending query
@@ -2926,7 +3089,7 @@ int ufshcd_query_attr(struct ufs_hba *hba, enum query_opcode opcode,
  *
  * Returns 0 for success, non-zero in case of failure
 */
-static int ufshcd_query_attr_retry(struct ufs_hba *hba,
+int ufshcd_query_attr_retry(struct ufs_hba *hba,
 	enum query_opcode opcode, enum attr_idn idn, u8 index, u8 selector,
 	u32 *attr_val)
 {
@@ -2949,6 +3112,7 @@ static int ufshcd_query_attr_retry(struct ufs_hba *hba,
 			__func__, idn, ret, QUERY_REQ_RETRIES);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(ufshcd_query_attr_retry);
 
 static int __ufshcd_query_descriptor(struct ufs_hba *hba,
 			enum query_opcode opcode, enum desc_idn idn, u8 index,
@@ -3046,6 +3210,7 @@ int ufshcd_query_descriptor_retry(struct ufs_hba *hba,
 
 	return err;
 }
+EXPORT_SYMBOL_GPL(ufshcd_query_descriptor_retry);
 
 /**
  * ufshcd_read_desc_length - read the specified descriptor length from header
@@ -3215,6 +3380,7 @@ int ufshcd_read_desc_param(struct ufs_hba *hba,
 		kfree(desc_buf);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(ufshcd_read_desc_param);
 
 static inline int ufshcd_read_desc(struct ufs_hba *hba,
 				   enum desc_idn desc_id,
@@ -3367,6 +3533,31 @@ static inline int ufshcd_read_unit_desc_param(struct ufs_hba *hba,
 				      param_offset, param_read_buf, param_size);
 }
 
+static int ufshcd_get_ref_clk_gating_wait(struct ufs_hba *hba)
+{
+	int err = 0;
+	u32 gating_wait = UFSHCD_REF_CLK_GATING_WAIT_US;
+
+	if (hba->dev_info.wspecversion >= 0x300) {
+		err = ufshcd_query_attr_retry(hba, UPIU_QUERY_OPCODE_READ_ATTR,
+				QUERY_ATTR_IDN_REF_CLK_GATING_WAIT_TIME, 0, 0,
+				&gating_wait);
+		if (err)
+			dev_err(hba->dev, "Failed reading bRefClkGatingWait. err = %d, use default %uus\n",
+					 err, gating_wait);
+
+		if (gating_wait == 0) {
+			gating_wait = UFSHCD_REF_CLK_GATING_WAIT_US;
+			dev_err(hba->dev, "Undefined ref clk gating wait time, use default %uus\n",
+					 gating_wait);
+		}
+
+		hba->dev_info.clk_gating_wait_us = gating_wait;
+	}
+
+	return err;
+}
+
 /**
  * ufshcd_memory_alloc - allocate memory for host memory space data structures
  * @hba: per adapter instance
@@ -3385,7 +3576,7 @@ static int ufshcd_memory_alloc(struct ufs_hba *hba)
 	size_t utmrdl_size, utrdl_size, ucdl_size;
 
 	/* Allocate memory for UTP command descriptors */
-	ucdl_size = (sizeof(struct utp_transfer_cmd_desc) * hba->nutrs);
+	ucdl_size = (sizeof_utp_transfer_cmd_desc(hba) * hba->nutrs);
 	hba->ucdl_base_addr = dmam_alloc_coherent(hba->dev,
 						  ucdl_size,
 						  &hba->ucdl_dma_addr,
@@ -3481,7 +3672,7 @@ static void ufshcd_host_memory_configure(struct ufs_hba *hba)
 	prdt_offset =
 		offsetof(struct utp_transfer_cmd_desc, prd_table);
 
-	cmd_desc_size = sizeof(struct utp_transfer_cmd_desc);
+	cmd_desc_size = sizeof_utp_transfer_cmd_desc(hba);
 	cmd_desc_dma_addr = hba->ucdl_dma_addr;
 
 	for (i = 0; i < hba->nutrs; i++) {
@@ -3513,17 +3704,17 @@ static void ufshcd_host_memory_configure(struct ufs_hba *hba)
 		hba->lrb[i].utr_descriptor_ptr = (utrdlp + i);
 		hba->lrb[i].utrd_dma_addr = hba->utrdl_dma_addr +
 				(i * sizeof(struct utp_transfer_req_desc));
-		hba->lrb[i].ucd_req_ptr =
-			(struct utp_upiu_req *)(cmd_descp + i);
+		hba->lrb[i].ucd_req_ptr = (struct utp_upiu_req *)cmd_descp;
 		hba->lrb[i].ucd_req_dma_addr = cmd_desc_element_addr;
 		hba->lrb[i].ucd_rsp_ptr =
-			(struct utp_upiu_rsp *)cmd_descp[i].response_upiu;
+			(struct utp_upiu_rsp *)cmd_descp->response_upiu;
 		hba->lrb[i].ucd_rsp_dma_addr = cmd_desc_element_addr +
 				response_offset;
 		hba->lrb[i].ucd_prdt_ptr =
-			(struct ufshcd_sg_entry *)cmd_descp[i].prd_table;
+			(struct ufshcd_sg_entry *)cmd_descp->prd_table;
 		hba->lrb[i].ucd_prdt_dma_addr = cmd_desc_element_addr +
 				prdt_offset;
+		cmd_descp = (void *)cmd_descp + cmd_desc_size;
 	}
 }
 
@@ -3777,6 +3968,10 @@ static int ufshcd_uic_pwr_ctrl(struct ufs_hba *hba, struct uic_command *cmd)
 	ufshcd_add_delay_before_dme_cmd(hba);
 
 	spin_lock_irqsave(hba->host->host_lock, flags);
+	if (ufshcd_is_link_broken(hba)) {
+		ret = -ENOLINK;
+		goto out_unlock;
+	}
 	hba->uic_async_done = &uic_async_done;
 	if (ufshcd_readl(hba, REG_INTERRUPT_ENABLE) & UIC_COMMAND_COMPL) {
 		ufshcd_disable_intr(hba, UIC_COMMAND_COMPL);
@@ -3824,6 +4019,11 @@ static int ufshcd_uic_pwr_ctrl(struct ufs_hba *hba, struct uic_command *cmd)
 	hba->uic_async_done = NULL;
 	if (reenable_intr)
 		ufshcd_enable_intr(hba, UIC_COMMAND_COMPL);
+	if (ret) {
+		ufshcd_set_link_broken(hba);
+		ufshcd_schedule_eh_work(hba);
+	}
+out_unlock:
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 	mutex_unlock(&hba->uic_cmd_mutex);
 
@@ -3864,7 +4064,7 @@ static int ufshcd_uic_change_pwr_mode(struct ufs_hba *hba, u8 mode)
 	return ret;
 }
 
-static int ufshcd_link_recovery(struct ufs_hba *hba)
+int ufshcd_link_recovery(struct ufs_hba *hba)
 {
 	int ret;
 	unsigned long flags;
@@ -3874,6 +4074,9 @@ static int ufshcd_link_recovery(struct ufs_hba *hba)
 	ufshcd_set_eh_in_progress(hba);
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 
+	/* Reset the attached device */
+	ufshcd_vops_device_reset(hba);
+
 	ret = ufshcd_host_reset_and_restore(hba);
 
 	spin_lock_irqsave(hba->host->host_lock, flags);
@@ -3888,8 +4091,9 @@ static int ufshcd_link_recovery(struct ufs_hba *hba)
 
 	return ret;
 }
+EXPORT_SYMBOL_GPL(ufshcd_link_recovery);
 
-static int __ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
+int ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
 {
 	int ret;
 	struct uic_command uic_cmd = {0};
@@ -3902,46 +4106,18 @@ static int __ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
 	trace_ufshcd_profile_hibern8(dev_name(hba->dev), "enter",
 			     ktime_to_us(ktime_sub(ktime_get(), start)), ret);
 
-	if (ret) {
-		int err;
-
+	if (ret)
 		dev_err(hba->dev, "%s: hibern8 enter failed. ret = %d\n",
 			__func__, ret);
-
-		/*
-		 * If link recovery fails then return error code returned from
-		 * ufshcd_link_recovery().
-		 * If link recovery succeeds then return -EAGAIN to attempt
-		 * hibern8 enter retry again.
-		 */
-		err = ufshcd_link_recovery(hba);
-		if (err) {
-			dev_err(hba->dev, "%s: link recovery failed", __func__);
-			ret = err;
-		} else {
-			ret = -EAGAIN;
-		}
-	} else
+	else
 		ufshcd_vops_hibern8_notify(hba, UIC_CMD_DME_HIBER_ENTER,
 								POST_CHANGE);
 
 	return ret;
 }
+EXPORT_SYMBOL_GPL(ufshcd_uic_hibern8_enter);
 
-static int ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
-{
-	int ret = 0, retries;
-
-	for (retries = UIC_HIBERN8_ENTER_RETRIES; retries > 0; retries--) {
-		ret = __ufshcd_uic_hibern8_enter(hba);
-		if (!ret)
-			goto out;
-	}
-out:
-	return ret;
-}
-
-static int ufshcd_uic_hibern8_exit(struct ufs_hba *hba)
+int ufshcd_uic_hibern8_exit(struct ufs_hba *hba)
 {
 	struct uic_command uic_cmd = {0};
 	int ret;
@@ -3957,7 +4133,6 @@ static int ufshcd_uic_hibern8_exit(struct ufs_hba *hba)
 	if (ret) {
 		dev_err(hba->dev, "%s: hibern8 exit failed. ret = %d\n",
 			__func__, ret);
-		ret = ufshcd_link_recovery(hba);
 	} else {
 		ufshcd_vops_hibern8_notify(hba, UIC_CMD_DME_HIBER_EXIT,
 								POST_CHANGE);
@@ -3967,6 +4142,32 @@ static int ufshcd_uic_hibern8_exit(struct ufs_hba *hba)
 
 	return ret;
 }
+EXPORT_SYMBOL_GPL(ufshcd_uic_hibern8_exit);
+
+void ufshcd_auto_hibern8_update(struct ufs_hba *hba, u32 ahit)
+{
+	unsigned long flags;
+	bool update = false;
+
+	if (!ufshcd_is_auto_hibern8_supported(hba))
+		return;
+
+	spin_lock_irqsave(hba->host->host_lock, flags);
+	if (hba->ahit != ahit) {
+		hba->ahit = ahit;
+		update = true;
+	}
+	spin_unlock_irqrestore(hba->host->host_lock, flags);
+
+	if (update && !pm_runtime_suspended(hba->dev)) {
+		pm_runtime_get_sync(hba->dev);
+		ufshcd_hold(hba, false);
+		ufshcd_auto_hibern8_enable(hba);
+		ufshcd_release(hba);
+		pm_runtime_put(hba->dev);
+	}
+}
+EXPORT_SYMBOL_GPL(ufshcd_auto_hibern8_update);
 
 void ufshcd_auto_hibern8_enable(struct ufs_hba *hba)
 {
@@ -4065,7 +4266,8 @@ static int ufshcd_change_power_mode(struct ufs_hba *hba,
 	int ret;
 
 	/* if already configured to the requested pwr_mode */
-	if (pwr_mode->gear_rx == hba->pwr_info.gear_rx &&
+	if (!hba->force_pmc &&
+	    pwr_mode->gear_rx == hba->pwr_info.gear_rx &&
 	    pwr_mode->gear_tx == hba->pwr_info.gear_tx &&
 	    pwr_mode->lane_rx == hba->pwr_info.lane_rx &&
 	    pwr_mode->lane_tx == hba->pwr_info.lane_tx &&
@@ -4107,6 +4309,26 @@ static int ufshcd_change_power_mode(struct ufs_hba *hba,
 		ufshcd_dme_set(hba, UIC_ARG_MIB(PA_HSSERIES),
 						pwr_mode->hs_rate);
 
+	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA0),
+			DL_FC0ProtectionTimeOutVal_Default);
+	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA1),
+			DL_TC0ReplayTimeOutVal_Default);
+	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA2),
+			DL_AFC0ReqTimeOutVal_Default);
+	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA3),
+			DL_FC1ProtectionTimeOutVal_Default);
+	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA4),
+			DL_TC1ReplayTimeOutVal_Default);
+	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA5),
+			DL_AFC1ReqTimeOutVal_Default);
+
+	ufshcd_dme_set(hba, UIC_ARG_MIB(DME_LocalFC0ProtectionTimeOutVal),
+			DL_FC0ProtectionTimeOutVal_Default);
+	ufshcd_dme_set(hba, UIC_ARG_MIB(DME_LocalTC0ReplayTimeOutVal),
+			DL_TC0ReplayTimeOutVal_Default);
+	ufshcd_dme_set(hba, UIC_ARG_MIB(DME_LocalAFC0ReqTimeOutVal),
+			DL_AFC0ReqTimeOutVal_Default);
+
 	ret = ufshcd_uic_change_pwr_mode(hba, pwr_mode->pwr_rx << 4
 			| pwr_mode->pwr_tx);
 
@@ -4142,8 +4364,6 @@ int ufshcd_config_pwr_mode(struct ufs_hba *hba,
 		memcpy(&final_params, desired_pwr_mode, sizeof(final_params));
 
 	ret = ufshcd_change_power_mode(hba, &final_params);
-	if (!ret)
-		ufshcd_print_pwr_info(hba);
 
 	return ret;
 }
@@ -4157,12 +4377,12 @@ EXPORT_SYMBOL_GPL(ufshcd_config_pwr_mode);
  */
 static int ufshcd_complete_dev_init(struct ufs_hba *hba)
 {
-	int i;
 	int err;
 	bool flag_res = 1;
+	ktime_t timeout;
 
 	err = ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_SET_FLAG,
-		QUERY_FLAG_IDN_FDEVICEINIT, NULL);
+		QUERY_FLAG_IDN_FDEVICEINIT, 0, NULL);
 	if (err) {
 		dev_err(hba->dev,
 			"%s setting fDeviceInit flag failed with error %d\n",
@@ -4170,20 +4390,26 @@ static int ufshcd_complete_dev_init(struct ufs_hba *hba)
 		goto out;
 	}
 
-	/* poll for max. 1000 iterations for fDeviceInit flag to clear */
-	for (i = 0; i < 1000 && !err && flag_res; i++)
-		err = ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_READ_FLAG,
-			QUERY_FLAG_IDN_FDEVICEINIT, &flag_res);
+	/* Poll fDeviceInit flag to be cleared */
+	timeout = ktime_add_ms(ktime_get(), FDEVICEINIT_COMPL_TIMEOUT);
+	do {
+		err = ufshcd_query_flag(hba, UPIU_QUERY_OPCODE_READ_FLAG,
+					QUERY_FLAG_IDN_FDEVICEINIT, 0, &flag_res);
+		if (!flag_res)
+			break;
+		usleep_range(5000, 10000);
+	} while (ktime_before(ktime_get(), timeout));
 
-	if (err)
+	if (err) {
 		dev_err(hba->dev,
-			"%s reading fDeviceInit flag failed with error %d\n",
-			__func__, err);
-	else if (flag_res)
+				"%s reading fDeviceInit flag failed with error %d\n",
+				__func__, err);
+	} else if (flag_res) {
 		dev_err(hba->dev,
-			"%s fDeviceInit was not cleared by the device\n",
-			__func__);
-
+				"%s fDeviceInit was not cleared by the device\n",
+				__func__);
+		err = -EBUSY;
+	}
 out:
 	return err;
 }
@@ -4200,7 +4426,7 @@ static int ufshcd_complete_dev_init(struct ufs_hba *hba)
  *
  * Returns 0 on success, non-zero value on failure
  */
-static int ufshcd_make_hba_operational(struct ufs_hba *hba)
+int ufshcd_make_hba_operational(struct ufs_hba *hba)
 {
 	int err = 0;
 	u32 reg;
@@ -4246,6 +4472,7 @@ static int ufshcd_make_hba_operational(struct ufs_hba *hba)
 out:
 	return err;
 }
+EXPORT_SYMBOL_GPL(ufshcd_make_hba_operational);
 
 /**
  * ufshcd_hba_stop - Send controller to reset state
@@ -4300,10 +4527,10 @@ static int ufshcd_hba_execute_hce(struct ufs_hba *hba)
 	 * instruction might be read back.
 	 * This delay can be changed based on the controller.
 	 */
-	usleep_range(1000, 1100);
+	ufshcd_delay_us(hba->vps->hba_enable_delay_us, 100);
 
 	/* wait for the host controller to complete initialization */
-	retry = 10;
+	retry = 50;
 	while (ufshcd_is_hba_active(hba)) {
 		if (retry) {
 			retry--;
@@ -4312,7 +4539,7 @@ static int ufshcd_hba_execute_hce(struct ufs_hba *hba)
 				"Controller enable failed\n");
 			return -EIO;
 		}
-		usleep_range(5000, 5100);
+		usleep_range(1000, 1100);
 	}
 
 	/* enable UIC related interrupts */
@@ -4323,7 +4550,7 @@ static int ufshcd_hba_execute_hce(struct ufs_hba *hba)
 	return 0;
 }
 
-static int ufshcd_hba_enable(struct ufs_hba *hba)
+int ufshcd_hba_enable(struct ufs_hba *hba)
 {
 	int ret;
 
@@ -4348,9 +4575,11 @@ static int ufshcd_hba_enable(struct ufs_hba *hba)
 
 	return ret;
 }
+EXPORT_SYMBOL_GPL(ufshcd_hba_enable);
+
 static int ufshcd_disable_tx_lcc(struct ufs_hba *hba, bool peer)
 {
-	int tx_lanes, i, err = 0;
+	int tx_lanes = 0, i, err = 0;
 
 	if (!peer)
 		ufshcd_dme_get(hba, UIC_ARG_MIB(PA_CONNECTEDTXDATALANES),
@@ -4384,13 +4613,14 @@ static inline int ufshcd_disable_device_tx_lcc(struct ufs_hba *hba)
 	return ufshcd_disable_tx_lcc(hba, true);
 }
 
-static void ufshcd_update_reg_hist(struct ufs_err_reg_hist *reg_hist,
-				   u32 reg)
+void ufshcd_update_reg_hist(struct ufs_err_reg_hist *reg_hist,
+			    u32 reg)
 {
 	reg_hist->reg[reg_hist->pos] = reg;
 	reg_hist->tstamp[reg_hist->pos] = ktime_get();
 	reg_hist->pos = (reg_hist->pos + 1) % UFS_ERR_REG_HIST_LENGTH;
 }
+EXPORT_SYMBOL_GPL(ufshcd_update_reg_hist);
 
 /**
  * ufshcd_link_startup - Initialize unipro link startup
@@ -4466,6 +4696,8 @@ static int ufshcd_link_startup(struct ufs_hba *hba)
 	if (ret)
 		goto out;
 
+	/* Clear UECPA once due to LINERESET has happened during LINK_STARTUP */
+	ufshcd_readl(hba, REG_UIC_ERROR_CODE_PHY_ADAPTER_LAYER);
 	ret = ufshcd_make_hba_operational(hba);
 out:
 	if (ret) {
@@ -4620,6 +4852,9 @@ static int ufshcd_slave_alloc(struct scsi_device *sdev)
 	/* Mode sense(6) is not supported by UFS, so use Mode sense(10) */
 	sdev->use_10_for_ms = 1;
 
+	/* DBD field should be set to 1 in mode sense(10) */
+	sdev->set_dbd_for_ms = 1;
+
 	/* allow SCSI layer to restart the device in case of errors */
 	sdev->allow_restart = 1;
 
@@ -4659,8 +4894,15 @@ static int ufshcd_change_queue_depth(struct scsi_device *sdev, int depth)
 static int ufshcd_slave_configure(struct scsi_device *sdev)
 {
 	struct request_queue *q = sdev->request_queue;
+	struct ufs_hba *hba = shost_priv(sdev->host);
 
 	blk_queue_update_dma_pad(q, PRDT_DATA_BYTE_COUNT_PAD - 1);
+
+	if (ufshcd_is_rpm_autosuspend_allowed(hba))
+		sdev->rpm_autosuspend = 1;
+
+	ufshcd_crypto_setup_rq_keyslot_manager(hba, q);
+
 	return 0;
 }
 
@@ -4735,6 +4977,12 @@ ufshcd_transfer_rsp_status(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
 	/* overall command status of utrd */
 	ocs = ufshcd_get_tr_ocs(lrbp);
 
+	if (hba->quirks & UFSHCD_QUIRK_BROKEN_OCS_FATAL_ERROR) {
+		if (be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_1) &
+					MASK_RSP_UPIU_RESULT)
+			ocs = OCS_SUCCESS;
+	}
+
 	switch (ocs) {
 	case OCS_SUCCESS:
 		result = ufshcd_get_req_rsp(lrbp->ucd_rsp_ptr);
@@ -4767,8 +5015,15 @@ ufshcd_transfer_rsp_status(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
 			 * UFS device needs urgent BKOPs.
 			 */
 			if (!hba->pm_op_in_progress &&
-			    ufshcd_is_exception_event(lrbp->ucd_rsp_ptr))
-				schedule_work(&hba->eeh_work);
+			    ufshcd_is_exception_event(lrbp->ucd_rsp_ptr)) {
+				/*
+				 * Prevent suspend once eeh_work is scheduled
+				 * to avoid deadlock between ufshcd_suspend
+				 * and exception event handler.
+				 */
+				if (schedule_work(&hba->eeh_work))
+					pm_runtime_get_noresume(hba->dev);
+			}
 			break;
 		case UPIU_TRANSACTION_REJECT_UPIU:
 			/* TODO: handle Reject UPIU Response */
@@ -4796,6 +5051,9 @@ ufshcd_transfer_rsp_status(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
 	case OCS_MISMATCH_RESP_UPIU_SIZE:
 	case OCS_PEER_COMM_FAILURE:
 	case OCS_FATAL_ERROR:
+	case OCS_DEVICE_FATAL_ERROR:
+	case OCS_INVALID_CRYPTO_CONFIG:
+	case OCS_GENERAL_CRYPTO_ERROR:
 	default:
 		result |= DID_ERROR << 16;
 		dev_err(hba->dev,
@@ -4815,19 +5073,33 @@ ufshcd_transfer_rsp_status(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
  * ufshcd_uic_cmd_compl - handle completion of uic command
  * @hba: per adapter instance
  * @intr_status: interrupt status generated by the controller
+ *
+ * Returns
+ *  IRQ_HANDLED - If interrupt is valid
+ *  IRQ_NONE    - If invalid interrupt
  */
-static void ufshcd_uic_cmd_compl(struct ufs_hba *hba, u32 intr_status)
+static irqreturn_t ufshcd_uic_cmd_compl(struct ufs_hba *hba, u32 intr_status)
 {
+	irqreturn_t retval = IRQ_NONE;
+
 	if ((intr_status & UIC_COMMAND_COMPL) && hba->active_uic_cmd) {
 		hba->active_uic_cmd->argument2 |=
 			ufshcd_get_uic_cmd_result(hba);
 		hba->active_uic_cmd->argument3 =
 			ufshcd_get_dme_attr_val(hba);
 		complete(&hba->active_uic_cmd->done);
+		retval = IRQ_HANDLED;
 	}
 
-	if ((intr_status & UFSHCD_UIC_PWR_MASK) && hba->uic_async_done)
+	if ((intr_status & UFSHCD_UIC_PWR_MASK) && hba->uic_async_done) {
 		complete(hba->uic_async_done);
+		retval = IRQ_HANDLED;
+	}
+
+	if (retval == IRQ_HANDLED)
+		ufshcd_add_uic_command_trace(hba, hba->active_uic_cmd,
+					     "complete");
+	return retval;
 }
 
 /**
@@ -4851,14 +5123,17 @@ static void __ufshcd_transfer_req_compl(struct ufs_hba *hba,
 			result = ufshcd_transfer_rsp_status(hba, lrbp);
 			scsi_dma_unmap(cmd);
 			cmd->result = result;
+			ufshcd_crypto_clear_prdt(hba, lrbp);
 			/* Mark completed command as NULL in LRB */
 			lrbp->cmd = NULL;
+			lrbp->compl_time_stamp = ktime_get();
 			clear_bit_unlock(index, &hba->lrb_in_use);
 			/* Do not touch lrbp after scsi done */
 			cmd->scsi_done(cmd);
 			__ufshcd_release(hba);
 		} else if (lrbp->command_type == UTP_CMD_TYPE_DEV_MANAGE ||
 			lrbp->command_type == UTP_CMD_TYPE_UFS_STORAGE) {
+			lrbp->compl_time_stamp = ktime_get();
 			if (hba->dev_cmd.complete) {
 				ufshcd_add_command_trace(hba, index,
 						"dev_complete");
@@ -4867,8 +5142,6 @@ static void __ufshcd_transfer_req_compl(struct ufs_hba *hba,
 		}
 		if (ufshcd_is_clkscaling_supported(hba))
 			hba->clk_scaling.active_reqs--;
-
-		lrbp->compl_time_stamp = ktime_get();
 	}
 
 	/* clear corresponding bits of completed commands */
@@ -4883,8 +5156,12 @@ static void __ufshcd_transfer_req_compl(struct ufs_hba *hba,
 /**
  * ufshcd_transfer_req_compl - handle SCSI and query command completion
  * @hba: per adapter instance
+ *
+ * Returns
+ *  IRQ_HANDLED - If interrupt is valid
+ *  IRQ_NONE    - If invalid interrupt
  */
-static void ufshcd_transfer_req_compl(struct ufs_hba *hba)
+static irqreturn_t ufshcd_transfer_req_compl(struct ufs_hba *hba)
 {
 	unsigned long completed_reqs;
 	u32 tr_doorbell;
@@ -4903,7 +5180,12 @@ static void ufshcd_transfer_req_compl(struct ufs_hba *hba)
 	tr_doorbell = ufshcd_readl(hba, REG_UTP_TRANSFER_REQ_DOOR_BELL);
 	completed_reqs = tr_doorbell ^ hba->outstanding_reqs;
 
-	__ufshcd_transfer_req_compl(hba, completed_reqs);
+	if (completed_reqs) {
+		__ufshcd_transfer_req_compl(hba, completed_reqs);
+		return IRQ_HANDLED;
+	} else {
+		return IRQ_NONE;
+	}
 }
 
 /**
@@ -4981,7 +5263,7 @@ static int ufshcd_enable_auto_bkops(struct ufs_hba *hba)
 		goto out;
 
 	err = ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_SET_FLAG,
-			QUERY_FLAG_IDN_BKOPS_EN, NULL);
+			QUERY_FLAG_IDN_BKOPS_EN, 0, NULL);
 	if (err) {
 		dev_err(hba->dev, "%s: failed to enable bkops %d\n",
 				__func__, err);
@@ -5031,7 +5313,7 @@ static int ufshcd_disable_auto_bkops(struct ufs_hba *hba)
 	}
 
 	err = ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_CLEAR_FLAG,
-			QUERY_FLAG_IDN_BKOPS_EN, NULL);
+			QUERY_FLAG_IDN_BKOPS_EN, 0, NULL);
 	if (err) {
 		dev_err(hba->dev, "%s: failed to disable bkops %d\n",
 				__func__, err);
@@ -5091,7 +5373,7 @@ static inline int ufshcd_get_bkops_status(struct ufs_hba *hba, u32 *status)
  * to know whether auto bkops is enabled or disabled after this function
  * returns control to it.
  */
-static int ufshcd_bkops_ctrl(struct ufs_hba *hba,
+int ufshcd_bkops_ctrl(struct ufs_hba *hba,
 			     enum bkops_status status)
 {
 	int err;
@@ -5116,6 +5398,7 @@ static int ufshcd_bkops_ctrl(struct ufs_hba *hba,
 out:
 	return err;
 }
+EXPORT_SYMBOL_GPL(ufshcd_bkops_ctrl);
 
 /**
  * ufshcd_urgent_bkops - handle urgent bkops exception event
@@ -5175,6 +5458,190 @@ static void ufshcd_bkops_exception_event_handler(struct ufs_hba *hba)
 				__func__, err);
 }
 
+static int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable)
+{
+	int ret;
+	u8 index;
+	enum query_opcode opcode;
+
+	if (!ufshcd_is_wb_allowed(hba))
+		return 0;
+
+	if (!(enable ^ hba->wb_enabled))
+		return 0;
+	if (enable)
+		opcode = UPIU_QUERY_OPCODE_SET_FLAG;
+	else
+		opcode = UPIU_QUERY_OPCODE_CLEAR_FLAG;
+
+	index = ufshcd_wb_get_query_index(hba);
+	ret = ufshcd_query_flag_retry(hba, opcode,
+				      QUERY_FLAG_IDN_WB_EN, index, NULL);
+	if (ret) {
+		dev_err(hba->dev, "%s write booster %s failed %d\n",
+			__func__, enable ? "enable" : "disable", ret);
+		return ret;
+	}
+
+	hba->wb_enabled = enable;
+	dev_dbg(hba->dev, "%s write booster %s %d\n",
+			__func__, enable ? "enable" : "disable", ret);
+
+	return ret;
+}
+
+static int ufshcd_wb_toggle_flush_during_h8(struct ufs_hba *hba, bool set)
+{
+	int val;
+	u8 index;
+
+	if (set)
+		val =  UPIU_QUERY_OPCODE_SET_FLAG;
+	else
+		val = UPIU_QUERY_OPCODE_CLEAR_FLAG;
+
+	index = ufshcd_wb_get_query_index(hba);
+	return ufshcd_query_flag_retry(hba, val,
+				QUERY_FLAG_IDN_WB_BUFF_FLUSH_DURING_HIBERN8,
+				index, NULL);
+}
+
+static inline void ufshcd_wb_toggle_flush(struct ufs_hba *hba, bool enable)
+{
+	if (enable)
+		ufshcd_wb_buf_flush_enable(hba);
+	else
+		ufshcd_wb_buf_flush_disable(hba);
+
+}
+
+static int ufshcd_wb_buf_flush_enable(struct ufs_hba *hba)
+{
+	int ret;
+	u8 index;
+
+	if (!ufshcd_is_wb_allowed(hba) || hba->wb_buf_flush_enabled)
+		return 0;
+
+	index = ufshcd_wb_get_query_index(hba);
+	ret = ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_SET_FLAG,
+				      QUERY_FLAG_IDN_WB_BUFF_FLUSH_EN,
+				      index, NULL);
+	if (ret)
+		dev_err(hba->dev, "%s WB - buf flush enable failed %d\n",
+			__func__, ret);
+	else
+		hba->wb_buf_flush_enabled = true;
+
+	dev_dbg(hba->dev, "WB - Flush enabled: %d\n", ret);
+	return ret;
+}
+
+static int ufshcd_wb_buf_flush_disable(struct ufs_hba *hba)
+{
+	int ret;
+	u8 index;
+
+	if (!ufshcd_is_wb_allowed(hba) || !hba->wb_buf_flush_enabled)
+		return 0;
+
+	index = ufshcd_wb_get_query_index(hba);
+	ret = ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_CLEAR_FLAG,
+				      QUERY_FLAG_IDN_WB_BUFF_FLUSH_EN,
+				      index, NULL);
+	if (ret) {
+		dev_warn(hba->dev, "%s: WB - buf flush disable failed %d\n",
+			 __func__, ret);
+	} else {
+		hba->wb_buf_flush_enabled = false;
+		dev_dbg(hba->dev, "WB - Flush disabled: %d\n", ret);
+	}
+
+	return ret;
+}
+
+static bool ufshcd_wb_presrv_usrspc_keep_vcc_on(struct ufs_hba *hba,
+						u32 avail_buf)
+{
+	u32 cur_buf;
+	int ret;
+	u8 index;
+
+	index = ufshcd_wb_get_query_index(hba);
+	ret = ufshcd_query_attr_retry(hba, UPIU_QUERY_OPCODE_READ_ATTR,
+					      QUERY_ATTR_IDN_CURR_WB_BUFF_SIZE,
+					      index, 0, &cur_buf);
+	if (ret) {
+		dev_err(hba->dev, "%s dCurWriteBoosterBufferSize read failed %d\n",
+			__func__, ret);
+		return false;
+	}
+
+	if (!cur_buf) {
+		dev_info(hba->dev, "dCurWBBuf: %d WB disabled until free-space is available\n",
+			 cur_buf);
+		return false;
+	}
+	/* Let it continue to flush when available buffer exceeds threshold */
+	if (avail_buf < hba->vps->wb_flush_threshold)
+		return true;
+
+	return false;
+}
+
+static bool ufshcd_wb_need_flush(struct ufs_hba *hba)
+{
+	int ret;
+	u32 avail_buf;
+	u8 index;
+
+	if (!ufshcd_is_wb_allowed(hba))
+		return false;
+	/*
+	 * The ufs device needs the vcc to be ON to flush.
+	 * With user-space reduction enabled, it's enough to enable flush
+	 * by checking only the available buffer. The threshold
+	 * defined here is > 90% full.
+	 * With user-space preserved enabled, the current-buffer
+	 * should be checked too because the wb buffer size can reduce
+	 * when disk tends to be full. This info is provided by current
+	 * buffer (dCurrentWriteBoosterBufferSize). There's no point in
+	 * keeping vcc on when current buffer is empty.
+	 */
+	index = ufshcd_wb_get_query_index(hba);
+	ret = ufshcd_query_attr_retry(hba, UPIU_QUERY_OPCODE_READ_ATTR,
+				      QUERY_ATTR_IDN_AVAIL_WB_BUFF_SIZE,
+				      index, 0, &avail_buf);
+	if (ret) {
+		dev_warn(hba->dev, "%s dAvailableWriteBoosterBufferSize read failed %d\n",
+			 __func__, ret);
+		return false;
+	}
+
+	if (!hba->dev_info.b_presrv_uspc_en) {
+		if (avail_buf <= UFS_WB_BUF_REMAIN_PERCENT(10))
+			return true;
+		return false;
+	}
+
+	return ufshcd_wb_presrv_usrspc_keep_vcc_on(hba, avail_buf);
+}
+
+static void ufshcd_rpm_dev_flush_recheck_work(struct work_struct *work)
+{
+	struct ufs_hba *hba = container_of(to_delayed_work(work),
+					   struct ufs_hba,
+					   rpm_dev_flush_recheck_work);
+	/*
+	 * To prevent unnecessary VCC power drain after device finishes
+	 * WriteBooster buffer flush or Auto BKOPs, force runtime resume
+	 * after a certain delay to recheck the threshold by next runtime
+	 * suspend.
+	 */
+	pm_runtime_get_sync(hba->dev);
+	pm_runtime_put_sync(hba->dev);
+}
+
 /**
  * ufshcd_exception_event_handler - handle exceptions raised by device
  * @work: pointer to work data
@@ -5190,7 +5657,7 @@ static void ufshcd_exception_event_handler(struct work_struct *work)
 	hba = container_of(work, struct ufs_hba, eeh_work);
 
 	pm_runtime_get_sync(hba->dev);
-	scsi_block_requests(hba->host);
+	ufshcd_scsi_block_requests(hba);
 	err = ufshcd_get_ee_status(hba, &status);
 	if (err) {
 		dev_err(hba->dev, "%s: failed to get exception status %d\n",
@@ -5204,8 +5671,15 @@ static void ufshcd_exception_event_handler(struct work_struct *work)
 		ufshcd_bkops_exception_event_handler(hba);
 
 out:
-	scsi_unblock_requests(hba->host);
-	pm_runtime_put_sync(hba->dev);
+	ufshcd_scsi_unblock_requests(hba);
+	/*
+	 * pm_runtime_get_noresume is called while scheduling
+	 * eeh_work to avoid suspend racing with exception work.
+	 * Hence decrement usage counter using pm_runtime_put_noidle
+	 * to allow suspend on completion of exception event handler.
+	 */
+	pm_runtime_put_noidle(hba->dev);
+	pm_runtime_put(hba->dev);
 	return;
 }
 
@@ -5289,6 +5763,121 @@ static bool ufshcd_quirk_dl_nac_errors(struct ufs_hba *hba)
 	return err_handling;
 }
 
+/* host lock must be held before calling this func */
+static inline bool ufshcd_is_saved_err_fatal(struct ufs_hba *hba)
+{
+	return (hba->saved_uic_err & UFSHCD_UIC_DL_PA_INIT_ERROR) ||
+	       (hba->saved_err & (INT_FATAL_ERRORS | UFSHCD_UIC_HIBERN8_MASK));
+}
+
+/* host lock must be held before calling this func */
+static inline void ufshcd_schedule_eh_work(struct ufs_hba *hba)
+{
+	/* handle fatal errors only when link is not in error state */
+	if (hba->ufshcd_state != UFSHCD_STATE_ERROR) {
+		if (hba->force_reset || ufshcd_is_link_broken(hba) ||
+		    ufshcd_is_saved_err_fatal(hba))
+			hba->ufshcd_state = UFSHCD_STATE_EH_SCHEDULED_FATAL;
+		else
+			hba->ufshcd_state = UFSHCD_STATE_EH_SCHEDULED_NON_FATAL;
+		queue_work(hba->eh_wq, &hba->eh_work);
+	}
+}
+
+static void ufshcd_err_handling_prepare(struct ufs_hba *hba)
+{
+	pm_runtime_get_sync(hba->dev);
+	if (pm_runtime_suspended(hba->dev)) {
+		/*
+		 * Don't assume anything of pm_runtime_get_sync(), if
+		 * resume fails, irq and clocks can be OFF, and powers
+		 * can be OFF or in LPM.
+		 */
+		ufshcd_setup_hba_vreg(hba, true);
+		ufshcd_enable_irq(hba);
+		ufshcd_setup_vreg(hba, true);
+		ufshcd_config_vreg_hpm(hba, hba->vreg_info.vccq);
+		ufshcd_config_vreg_hpm(hba, hba->vreg_info.vccq2);
+		ufshcd_hold(hba, false);
+		if (!ufshcd_is_clkgating_allowed(hba))
+			ufshcd_setup_clocks(hba, true);
+		ufshcd_release(hba);
+		ufshcd_vops_resume(hba, UFS_RUNTIME_PM);
+	} else {
+		ufshcd_hold(hba, false);
+		if (hba->clk_scaling.is_allowed) {
+			cancel_work_sync(&hba->clk_scaling.suspend_work);
+			cancel_work_sync(&hba->clk_scaling.resume_work);
+			ufshcd_suspend_clkscaling(hba);
+		}
+	}
+}
+
+static void ufshcd_err_handling_unprepare(struct ufs_hba *hba)
+{
+	ufshcd_release(hba);
+	if (hba->clk_scaling.is_allowed)
+		ufshcd_resume_clkscaling(hba);
+	pm_runtime_put(hba->dev);
+}
+
+static inline bool ufshcd_err_handling_should_stop(struct ufs_hba *hba)
+{
+	return (hba->ufshcd_state == UFSHCD_STATE_ERROR ||
+		(!(hba->saved_err || hba->saved_uic_err || hba->force_reset ||
+			ufshcd_is_link_broken(hba))));
+}
+
+#ifdef CONFIG_PM
+static void ufshcd_recover_pm_error(struct ufs_hba *hba)
+{
+	struct Scsi_Host *shost = hba->host;
+	struct scsi_device *sdev;
+	struct request_queue *q;
+	int ret;
+
+	/*
+	 * Set RPM status of hba device to RPM_ACTIVE,
+	 * this also clears its runtime error.
+	 */
+	ret = pm_runtime_set_active(hba->dev);
+	/*
+	 * If hba device had runtime error, we also need to resume those
+	 * scsi devices under hba in case any of them has failed to be
+	 * resumed due to hba runtime resume failure. This is to unblock
+	 * blk_queue_enter in case there are bios waiting inside it.
+	 */
+	if (!ret) {
+		shost_for_each_device(sdev, shost) {
+			q = sdev->request_queue;
+			if (q->dev && (q->rpm_status == RPM_SUSPENDED ||
+				       q->rpm_status == RPM_SUSPENDING))
+				pm_request_resume(q->dev);
+		}
+	}
+}
+#else
+static inline void ufshcd_recover_pm_error(struct ufs_hba *hba)
+{
+}
+#endif
+
+static bool ufshcd_is_pwr_mode_restore_needed(struct ufs_hba *hba)
+{
+	struct ufs_pa_layer_attr *pwr_info = &hba->pwr_info;
+	u32 mode;
+
+	ufshcd_dme_get(hba, UIC_ARG_MIB(PA_PWRMODE), &mode);
+
+	if (pwr_info->pwr_rx != ((mode >> PWRMODE_RX_OFFSET) & PWRMODE_MASK))
+		return true;
+
+	if (pwr_info->pwr_tx != (mode & PWRMODE_MASK))
+		return true;
+
+	return false;
+}
+
 /**
  * ufshcd_err_handler - handle UFS errors that require s/w attention
  * @work: pointer to work structure
@@ -5297,23 +5886,36 @@ static void ufshcd_err_handler(struct work_struct *work)
 {
 	struct ufs_hba *hba;
 	unsigned long flags;
-	u32 err_xfer = 0;
-	u32 err_tm = 0;
-	int err = 0;
+	bool err_xfer = false;
+	bool err_tm = false;
+	int err = 0, pmc_err;
 	int tag;
-	bool needs_reset = false;
+	bool needs_reset = false, needs_restore = false;
 
 	hba = container_of(work, struct ufs_hba, eh_work);
 
-	pm_runtime_get_sync(hba->dev);
-	ufshcd_hold(hba, false);
-
 	spin_lock_irqsave(hba->host->host_lock, flags);
-	if (hba->ufshcd_state == UFSHCD_STATE_RESET)
-		goto out;
-
-	hba->ufshcd_state = UFSHCD_STATE_RESET;
+	if (ufshcd_err_handling_should_stop(hba)) {
+		if (hba->ufshcd_state != UFSHCD_STATE_ERROR)
+			hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL;
+		spin_unlock_irqrestore(hba->host->host_lock, flags);
+		return;
+	}
 	ufshcd_set_eh_in_progress(hba);
+	spin_unlock_irqrestore(hba->host->host_lock, flags);
+	ufshcd_err_handling_prepare(hba);
+	spin_lock_irqsave(hba->host->host_lock, flags);
+	ufshcd_scsi_block_requests(hba);
+	/*
+	 * A full reset and restore might have happened after preparation
+	 * is finished, double check whether we should stop.
+	 */
+	if (ufshcd_err_handling_should_stop(hba)) {
+		if (hba->ufshcd_state != UFSHCD_STATE_ERROR)
+			hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL;
+		goto out;
+	}
+	hba->ufshcd_state = UFSHCD_STATE_RESET;
 
 	/* Complete requests that have door-bell cleared by h/w */
 	ufshcd_complete_requests(hba);
@@ -5325,30 +5927,61 @@ static void ufshcd_err_handler(struct work_struct *work)
 		/* release the lock as ufshcd_quirk_dl_nac_errors() may sleep */
 		ret = ufshcd_quirk_dl_nac_errors(hba);
 		spin_lock_irqsave(hba->host->host_lock, flags);
-		if (!ret)
+		if (!ret && !hba->force_reset && ufshcd_is_link_active(hba))
 			goto skip_err_handling;
 	}
-	if ((hba->saved_err & INT_FATAL_ERRORS) ||
-	    (hba->saved_err & UFSHCD_UIC_HIBERN8_MASK) ||
+
+	if (hba->force_reset || ufshcd_is_link_broken(hba) ||
+	    ufshcd_is_saved_err_fatal(hba) ||
 	    ((hba->saved_err & UIC_ERROR) &&
-	    (hba->saved_uic_err & (UFSHCD_UIC_DL_PA_INIT_ERROR |
-				   UFSHCD_UIC_DL_NAC_RECEIVED_ERROR |
-				   UFSHCD_UIC_DL_TCx_REPLAY_ERROR))))
+	     (hba->saved_uic_err & (UFSHCD_UIC_DL_NAC_RECEIVED_ERROR |
+				    UFSHCD_UIC_DL_TCx_REPLAY_ERROR))))
 		needs_reset = true;
 
+	if ((hba->saved_err & (INT_FATAL_ERRORS | UFSHCD_UIC_HIBERN8_MASK)) ||
+	    (hba->saved_uic_err &&
+	     (hba->saved_uic_err != UFSHCD_UIC_PA_GENERIC_ERROR))) {
+		bool pr_prdt = !!(hba->saved_err & SYSTEM_BUS_FATAL_ERROR);
+
+		spin_unlock_irqrestore(hba->host->host_lock, flags);
+		ufshcd_print_host_state(hba);
+		ufshcd_print_pwr_info(hba);
+		ufshcd_print_host_regs(hba);
+		ufshcd_print_tmrs(hba, hba->outstanding_tasks);
+		ufshcd_print_trs(hba, hba->outstanding_reqs, pr_prdt);
+		spin_lock_irqsave(hba->host->host_lock, flags);
+	}
+
 	/*
 	 * if host reset is required then skip clearing the pending
 	 * transfers forcefully because they will get cleared during
 	 * host reset and restore
 	 */
 	if (needs_reset)
-		goto skip_pending_xfer_clear;
+		goto do_reset;
 
+	/*
+	 * If LINERESET was caught, UFS might have been put to PWM mode,
+	 * check if power mode restore is needed.
+	 */
+	if (hba->saved_uic_err & UFSHCD_UIC_PA_GENERIC_ERROR) {
+		hba->saved_uic_err &= ~UFSHCD_UIC_PA_GENERIC_ERROR;
+		if (!hba->saved_uic_err)
+			hba->saved_err &= ~UIC_ERROR;
+		spin_unlock_irqrestore(hba->host->host_lock, flags);
+		if (ufshcd_is_pwr_mode_restore_needed(hba))
+			needs_restore = true;
+		spin_lock_irqsave(hba->host->host_lock, flags);
+		if (!hba->saved_err && !needs_restore)
+			goto skip_err_handling;
+	}
+
+	hba->silence_err_logs = true;
 	/* release lock as clear command might sleep */
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 	/* Clear pending transfer requests */
 	for_each_set_bit(tag, &hba->outstanding_reqs, hba->nutrs) {
-		if (ufshcd_clear_cmd(hba, tag)) {
+		if (ufshcd_try_to_abort_task(hba, tag)) {
 			err_xfer = true;
 			goto lock_skip_pending_xfer_clear;
 		}
@@ -5367,11 +6000,38 @@ static void ufshcd_err_handler(struct work_struct *work)
 
 	/* Complete the requests that are cleared by s/w */
 	ufshcd_complete_requests(hba);
+	hba->silence_err_logs = false;
 
-	if (err_xfer || err_tm)
+	if (err_xfer || err_tm) {
 		needs_reset = true;
+		goto do_reset;
+	}
 
-skip_pending_xfer_clear:
+	/*
+	 * After all reqs and tasks are cleared from doorbell,
+	 * now it is safe to retore power mode.
+	 */
+	if (needs_restore) {
+		spin_unlock_irqrestore(hba->host->host_lock, flags);
+		/*
+		 * Hold the scaling lock just in case dev cmds
+		 * are sent via bsg and/or sysfs.
+		 */
+		down_write(&hba->clk_scaling_lock);
+		hba->force_pmc = true;
+		pmc_err = ufshcd_config_pwr_mode(hba, &(hba->pwr_info));
+		if (pmc_err) {
+			needs_reset = true;
+			dev_err(hba->dev, "%s: Failed to restore power mode, err = %d\n",
+					__func__, pmc_err);
+		}
+		hba->force_pmc = false;
+		ufshcd_print_pwr_info(hba);
+		up_write(&hba->clk_scaling_lock);
+		spin_lock_irqsave(hba->host->host_lock, flags);
+	}
+
+do_reset:
 	/* Fatal errors need reset */
 	if (needs_reset) {
 		unsigned long max_doorbells = (1UL << hba->nutrs) - 1;
@@ -5387,98 +6047,123 @@ static void ufshcd_err_handler(struct work_struct *work)
 			__ufshcd_transfer_req_compl(hba,
 						    (1UL << (hba->nutrs - 1)));
 
+		hba->force_reset = false;
 		spin_unlock_irqrestore(hba->host->host_lock, flags);
 		err = ufshcd_reset_and_restore(hba);
+		if (err)
+			dev_err(hba->dev, "%s: reset and restore failed with err %d\n",
+					__func__, err);
+		else
+			ufshcd_recover_pm_error(hba);
 		spin_lock_irqsave(hba->host->host_lock, flags);
-		if (err) {
-			dev_err(hba->dev, "%s: reset and restore failed\n",
-					__func__);
-			hba->ufshcd_state = UFSHCD_STATE_ERROR;
-		}
-		/*
-		 * Inform scsi mid-layer that we did reset and allow to handle
-		 * Unit Attention properly.
-		 */
-		scsi_report_bus_reset(hba->host, 0);
-		hba->saved_err = 0;
-		hba->saved_uic_err = 0;
 	}
 
 skip_err_handling:
 	if (!needs_reset) {
-		hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL;
+		if (hba->ufshcd_state == UFSHCD_STATE_RESET)
+			hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL;
 		if (hba->saved_err || hba->saved_uic_err)
 			dev_err_ratelimited(hba->dev, "%s: exit: saved_err 0x%x saved_uic_err 0x%x",
 			    __func__, hba->saved_err, hba->saved_uic_err);
 	}
 
-	ufshcd_clear_eh_in_progress(hba);
-
 out:
+	ufshcd_clear_eh_in_progress(hba);
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 	ufshcd_scsi_unblock_requests(hba);
-	ufshcd_release(hba);
-	pm_runtime_put_sync(hba->dev);
+	ufshcd_err_handling_unprepare(hba);
 }
 
 /**
  * ufshcd_update_uic_error - check and set fatal UIC error flags.
  * @hba: per-adapter instance
+ *
+ * Returns
+ *  IRQ_HANDLED - If interrupt is valid
+ *  IRQ_NONE    - If invalid interrupt
  */
-static void ufshcd_update_uic_error(struct ufs_hba *hba)
+static irqreturn_t ufshcd_update_uic_error(struct ufs_hba *hba)
 {
 	u32 reg;
+	irqreturn_t retval = IRQ_NONE;
 
-	/* PHY layer lane error */
+	/* PHY layer error */
 	reg = ufshcd_readl(hba, REG_UIC_ERROR_CODE_PHY_ADAPTER_LAYER);
-	/* Ignore LINERESET indication, as this is not an error */
 	if ((reg & UIC_PHY_ADAPTER_LAYER_ERROR) &&
-			(reg & UIC_PHY_ADAPTER_LAYER_LANE_ERR_MASK)) {
+	    (reg & UIC_PHY_ADAPTER_LAYER_ERROR_CODE_MASK)) {
+		ufshcd_update_reg_hist(&hba->ufs_stats.pa_err, reg);
 		/*
 		 * To know whether this error is fatal or not, DB timeout
 		 * must be checked but this error is handled separately.
 		 */
-		dev_dbg(hba->dev, "%s: UIC Lane error reported\n", __func__);
-		ufshcd_update_reg_hist(&hba->ufs_stats.pa_err, reg);
+		if (reg & UIC_PHY_ADAPTER_LAYER_LANE_ERR_MASK)
+			dev_dbg(hba->dev, "%s: UIC Lane error reported\n",
+					__func__);
+
+		/* Got a LINERESET indication. */
+		if (reg & UIC_PHY_ADAPTER_LAYER_GENERIC_ERROR) {
+			struct uic_command *cmd = NULL;
+
+			hba->uic_error |= UFSHCD_UIC_PA_GENERIC_ERROR;
+			if (hba->uic_async_done && hba->active_uic_cmd)
+				cmd = hba->active_uic_cmd;
+			/*
+			 * Ignore the LINERESET during power mode change
+			 * operation via DME_SET command.
+			 */
+			if (cmd && (cmd->command == UIC_CMD_DME_SET))
+				hba->uic_error &= ~UFSHCD_UIC_PA_GENERIC_ERROR;
+		}
+		retval |= IRQ_HANDLED;
 	}
 
 	/* PA_INIT_ERROR is fatal and needs UIC reset */
 	reg = ufshcd_readl(hba, REG_UIC_ERROR_CODE_DATA_LINK_LAYER);
-	if (reg)
+	if ((reg & UIC_DATA_LINK_LAYER_ERROR) &&
+	    (reg & UIC_DATA_LINK_LAYER_ERROR_CODE_MASK)) {
 		ufshcd_update_reg_hist(&hba->ufs_stats.dl_err, reg);
 
-	if (reg & UIC_DATA_LINK_LAYER_ERROR_PA_INIT)
-		hba->uic_error |= UFSHCD_UIC_DL_PA_INIT_ERROR;
-	else if (hba->dev_quirks &
-		   UFS_DEVICE_QUIRK_RECOVERY_FROM_DL_NAC_ERRORS) {
-		if (reg & UIC_DATA_LINK_LAYER_ERROR_NAC_RECEIVED)
-			hba->uic_error |=
-				UFSHCD_UIC_DL_NAC_RECEIVED_ERROR;
-		else if (reg & UIC_DATA_LINK_LAYER_ERROR_TCx_REPLAY_TIMEOUT)
-			hba->uic_error |= UFSHCD_UIC_DL_TCx_REPLAY_ERROR;
+		if (reg & UIC_DATA_LINK_LAYER_ERROR_PA_INIT)
+			hba->uic_error |= UFSHCD_UIC_DL_PA_INIT_ERROR;
+		else if (hba->dev_quirks &
+				UFS_DEVICE_QUIRK_RECOVERY_FROM_DL_NAC_ERRORS) {
+			if (reg & UIC_DATA_LINK_LAYER_ERROR_NAC_RECEIVED)
+				hba->uic_error |=
+					UFSHCD_UIC_DL_NAC_RECEIVED_ERROR;
+			else if (reg & UIC_DATA_LINK_LAYER_ERROR_TCx_REPLAY_TIMEOUT)
+				hba->uic_error |= UFSHCD_UIC_DL_TCx_REPLAY_ERROR;
+		}
+		retval |= IRQ_HANDLED;
 	}
 
 	/* UIC NL/TL/DME errors needs software retry */
 	reg = ufshcd_readl(hba, REG_UIC_ERROR_CODE_NETWORK_LAYER);
-	if (reg) {
+	if ((reg & UIC_NETWORK_LAYER_ERROR) &&
+	    (reg & UIC_NETWORK_LAYER_ERROR_CODE_MASK)) {
 		ufshcd_update_reg_hist(&hba->ufs_stats.nl_err, reg);
 		hba->uic_error |= UFSHCD_UIC_NL_ERROR;
+		retval |= IRQ_HANDLED;
 	}
 
 	reg = ufshcd_readl(hba, REG_UIC_ERROR_CODE_TRANSPORT_LAYER);
-	if (reg) {
+	if ((reg & UIC_TRANSPORT_LAYER_ERROR) &&
+	    (reg & UIC_TRANSPORT_LAYER_ERROR_CODE_MASK)) {
 		ufshcd_update_reg_hist(&hba->ufs_stats.tl_err, reg);
 		hba->uic_error |= UFSHCD_UIC_TL_ERROR;
+		retval |= IRQ_HANDLED;
 	}
 
 	reg = ufshcd_readl(hba, REG_UIC_ERROR_CODE_DME);
-	if (reg) {
+	if ((reg & UIC_DME_ERROR) &&
+	    (reg & UIC_DME_ERROR_CODE_MASK)) {
 		ufshcd_update_reg_hist(&hba->ufs_stats.dme_err, reg);
 		hba->uic_error |= UFSHCD_UIC_DME_ERROR;
+		retval |= IRQ_HANDLED;
 	}
 
 	dev_dbg(hba->dev, "%s: UIC error flags = 0x%08x\n",
 			__func__, hba->uic_error);
+	return retval;
 }
 
 static bool ufshcd_is_auto_hibern8_error(struct ufs_hba *hba,
@@ -5502,10 +6187,15 @@ static bool ufshcd_is_auto_hibern8_error(struct ufs_hba *hba,
 /**
  * ufshcd_check_errors - Check for errors that need s/w attention
  * @hba: per-adapter instance
+ *
+ * Returns
+ *  IRQ_HANDLED - If interrupt is valid
+ *  IRQ_NONE    - If invalid interrupt
  */
-static void ufshcd_check_errors(struct ufs_hba *hba)
+static irqreturn_t ufshcd_check_errors(struct ufs_hba *hba)
 {
 	bool queue_eh_work = false;
+	irqreturn_t retval = IRQ_NONE;
 
 	if (hba->errors & INT_FATAL_ERRORS) {
 		ufshcd_update_reg_hist(&hba->ufs_stats.fatal_err, hba->errors);
@@ -5514,7 +6204,7 @@ static void ufshcd_check_errors(struct ufs_hba *hba)
 
 	if (hba->errors & UIC_ERROR) {
 		hba->uic_error = 0;
-		ufshcd_update_uic_error(hba);
+		retval = ufshcd_update_uic_error(hba);
 		if (hba->uic_error)
 			queue_eh_work = true;
 	}
@@ -5527,6 +6217,7 @@ static void ufshcd_check_errors(struct ufs_hba *hba)
 			hba->errors, ufshcd_get_upmcrs(hba));
 		ufshcd_update_reg_hist(&hba->ufs_stats.auto_hibern8_err,
 				       hba->errors);
+		ufshcd_set_link_broken(hba);
 		queue_eh_work = true;
 	}
 
@@ -5538,30 +6229,19 @@ static void ufshcd_check_errors(struct ufs_hba *hba)
 		hba->saved_err |= hba->errors;
 		hba->saved_uic_err |= hba->uic_error;
 
-		/* handle fatal errors only when link is functional */
-		if (hba->ufshcd_state == UFSHCD_STATE_OPERATIONAL) {
-			/* block commands from scsi mid-layer */
-			ufshcd_scsi_block_requests(hba);
-
-			hba->ufshcd_state = UFSHCD_STATE_EH_SCHEDULED;
-
-			/* dump controller state before resetting */
-			if (hba->saved_err & (INT_FATAL_ERRORS | UIC_ERROR)) {
-				bool pr_prdt = !!(hba->saved_err &
-						SYSTEM_BUS_FATAL_ERROR);
-
-				dev_err(hba->dev, "%s: saved_err 0x%x saved_uic_err 0x%x\n",
+		/* dump controller state before resetting */
+		if ((hba->saved_err & (INT_FATAL_ERRORS)) ||
+		    (hba->saved_uic_err &&
+		     (hba->saved_uic_err != UFSHCD_UIC_PA_GENERIC_ERROR))) {
+			dev_err(hba->dev, "%s: saved_err 0x%x saved_uic_err 0x%x\n",
 					__func__, hba->saved_err,
 					hba->saved_uic_err);
-
-				ufshcd_print_host_regs(hba);
-				ufshcd_print_pwr_info(hba);
-				ufshcd_print_tmrs(hba, hba->outstanding_tasks);
-				ufshcd_print_trs(hba, hba->outstanding_reqs,
-							pr_prdt);
-			}
-			schedule_work(&hba->eh_work);
+			ufshcd_dump_regs(hba, 0, UFSHCI_REG_SPACE_SIZE,
+					 "host_regs: ");
+			ufshcd_print_pwr_info(hba);
 		}
+		ufshcd_schedule_eh_work(hba);
+		retval |= IRQ_HANDLED;
 	}
 	/*
 	 * if (!queue_eh_work) -
@@ -5569,44 +6249,62 @@ static void ufshcd_check_errors(struct ufs_hba *hba)
 	 * itself without s/w intervention or errors that will be
 	 * handled by the SCSI core layer.
 	 */
+	return retval;
 }
 
 /**
  * ufshcd_tmc_handler - handle task management function completion
  * @hba: per adapter instance
+ *
+ * Returns
+ *  IRQ_HANDLED - If interrupt is valid
+ *  IRQ_NONE    - If invalid interrupt
  */
-static void ufshcd_tmc_handler(struct ufs_hba *hba)
+static irqreturn_t ufshcd_tmc_handler(struct ufs_hba *hba)
 {
 	u32 tm_doorbell;
 
 	tm_doorbell = ufshcd_readl(hba, REG_UTP_TASK_REQ_DOOR_BELL);
 	hba->tm_condition = tm_doorbell ^ hba->outstanding_tasks;
-	wake_up(&hba->tm_wq);
+	if (hba->tm_condition) {
+		wake_up(&hba->tm_wq);
+		return IRQ_HANDLED;
+	} else {
+		return IRQ_NONE;
+	}
 }
 
 /**
  * ufshcd_sl_intr - Interrupt service routine
  * @hba: per adapter instance
  * @intr_status: contains interrupts generated by the controller
+ *
+ * Returns
+ *  IRQ_HANDLED - If interrupt is valid
+ *  IRQ_NONE    - If invalid interrupt
  */
-static void ufshcd_sl_intr(struct ufs_hba *hba, u32 intr_status)
+static irqreturn_t ufshcd_sl_intr(struct ufs_hba *hba, u32 intr_status)
 {
+	irqreturn_t retval = IRQ_NONE;
+
 	hba->errors = UFSHCD_ERROR_MASK & intr_status;
 
 	if (ufshcd_is_auto_hibern8_error(hba, intr_status))
 		hba->errors |= (UFSHCD_UIC_HIBERN8_MASK & intr_status);
 
 	if (hba->errors)
-		ufshcd_check_errors(hba);
+		retval |= ufshcd_check_errors(hba);
 
 	if (intr_status & UFSHCD_UIC_MASK)
-		ufshcd_uic_cmd_compl(hba, intr_status);
+		retval |= ufshcd_uic_cmd_compl(hba, intr_status);
 
 	if (intr_status & UTP_TASK_REQ_COMPL)
-		ufshcd_tmc_handler(hba);
+		retval |= ufshcd_tmc_handler(hba);
 
 	if (intr_status & UTP_TRANSFER_REQ_COMPL)
-		ufshcd_transfer_req_compl(hba);
+		retval |= ufshcd_transfer_req_compl(hba);
+
+	return retval;
 }
 
 /**
@@ -5614,8 +6312,9 @@ static void ufshcd_sl_intr(struct ufs_hba *hba, u32 intr_status)
  * @irq: irq number
  * @__hba: pointer to adapter instance
  *
- * Returns IRQ_HANDLED - If interrupt is valid
- *		IRQ_NONE - If invalid interrupt
+ * Returns
+ *  IRQ_HANDLED - If interrupt is valid
+ *  IRQ_NONE    - If invalid interrupt
  */
 static irqreturn_t ufshcd_intr(int irq, void *__hba)
 {
@@ -5626,6 +6325,8 @@ static irqreturn_t ufshcd_intr(int irq, void *__hba)
 
 	spin_lock(hba->host->host_lock);
 	intr_status = ufshcd_readl(hba, REG_INTERRUPT_STATUS);
+	hba->ufs_stats.last_intr_status = intr_status;
+	hba->ufs_stats.last_intr_ts = ktime_get();
 
 	/*
 	 * There could be max of hba->nutrs reqs in flight and in worst case
@@ -5638,14 +6339,18 @@ static irqreturn_t ufshcd_intr(int irq, void *__hba)
 			intr_status & ufshcd_readl(hba, REG_INTERRUPT_ENABLE);
 		if (intr_status)
 			ufshcd_writel(hba, intr_status, REG_INTERRUPT_STATUS);
-		if (enabled_intr_status) {
-			ufshcd_sl_intr(hba, enabled_intr_status);
-			retval = IRQ_HANDLED;
-		}
+		if (enabled_intr_status)
+			retval |= ufshcd_sl_intr(hba, enabled_intr_status);
 
 		intr_status = ufshcd_readl(hba, REG_INTERRUPT_STATUS);
 	}
 
+	if (enabled_intr_status && retval == IRQ_NONE) {
+		dev_err(hba->dev, "%s: Unhandled interrupt 0x%08x\n",
+					__func__, intr_status);
+		ufshcd_dump_regs(hba, 0, UFSHCI_REG_SPACE_SIZE, "host_regs: ");
+	}
+
 	spin_unlock(hba->host->host_lock);
 	return retval;
 }
@@ -5830,6 +6535,7 @@ static int ufshcd_issue_devman_upiu_cmd(struct ufs_hba *hba,
 	lrbp->task_tag = tag;
 	lrbp->lun = 0;
 	lrbp->intr_cmd = true;
+	ufshcd_prepare_lrbp_crypto(NULL, lrbp);
 	hba->dev_cmd.type = cmd_type;
 
 	switch (hba->ufs_version) {
@@ -6032,7 +6738,7 @@ static void ufshcd_set_req_abort_skip(struct ufs_hba *hba, unsigned long bitmap)
 }
 
 /**
- * ufshcd_abort - abort a specific command
+ * ufshcd_try_to_abort_task - abort a specific task
  * @cmd: SCSI command pointer
  *
  * Abort the pending command in device by sending UFS_ABORT_TASK task management
@@ -6041,6 +6747,80 @@ static void ufshcd_set_req_abort_skip(struct ufs_hba *hba, unsigned long bitmap)
  * issued. To avoid that, first issue UFS_QUERY_TASK to check if the command is
  * really issued and then try to abort it.
  *
+ * Returns zero on success, non-zero on failure
+ */
+static int ufshcd_try_to_abort_task(struct ufs_hba *hba, int tag)
+{
+	struct ufshcd_lrb *lrbp = &hba->lrb[tag];
+	int err = 0;
+	int poll_cnt;
+	u8 resp = 0xF;
+	u32 reg;
+
+	for (poll_cnt = 100; poll_cnt; poll_cnt--) {
+		err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag,
+				UFS_QUERY_TASK, &resp);
+		if (!err && resp == UPIU_TASK_MANAGEMENT_FUNC_SUCCEEDED) {
+			/* cmd pending in the device */
+			dev_err(hba->dev, "%s: cmd pending in the device. tag = %d\n",
+				__func__, tag);
+			break;
+		} else if (!err && resp == UPIU_TASK_MANAGEMENT_FUNC_COMPL) {
+			/*
+			 * cmd not pending in the device, check if it is
+			 * in transition.
+			 */
+			dev_err(hba->dev, "%s: cmd at tag %d not pending in the device.\n",
+				__func__, tag);
+			reg = ufshcd_readl(hba, REG_UTP_TRANSFER_REQ_DOOR_BELL);
+			if (reg & (1 << tag)) {
+				/* sleep for max. 200us to stabilize */
+				usleep_range(100, 200);
+				continue;
+			}
+			/* command completed already */
+			dev_err(hba->dev, "%s: cmd at tag %d successfully cleared from DB.\n",
+				__func__, tag);
+			goto out;
+		} else {
+			dev_err(hba->dev,
+				"%s: no response from device. tag = %d, err %d\n",
+				__func__, tag, err);
+			if (!err)
+				err = resp; /* service response error */
+			goto out;
+		}
+	}
+
+	if (!poll_cnt) {
+		err = -EBUSY;
+		goto out;
+	}
+
+	err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag,
+			UFS_ABORT_TASK, &resp);
+	if (err || resp != UPIU_TASK_MANAGEMENT_FUNC_COMPL) {
+		if (!err) {
+			err = resp; /* service response error */
+			dev_err(hba->dev, "%s: issued. tag = %d, err %d\n",
+				__func__, tag, err);
+		}
+		goto out;
+	}
+
+	err = ufshcd_clear_cmd(hba, tag);
+	if (err)
+		dev_err(hba->dev, "%s: Failed clearing cmd at tag %d, err %d\n",
+			__func__, tag, err);
+
+out:
+	return err;
+}
+
+/**
+ * ufshcd_abort - scsi host template eh_abort_handler callback
+ * @cmd: SCSI command pointer
+ *
  * Returns SUCCESS/FAILED
  */
 static int ufshcd_abort(struct scsi_cmnd *cmd)
@@ -6050,8 +6830,6 @@ static int ufshcd_abort(struct scsi_cmnd *cmd)
 	unsigned long flags;
 	unsigned int tag;
 	int err = 0;
-	int poll_cnt;
-	u8 resp = 0xF;
 	struct ufshcd_lrb *lrbp;
 	u32 reg;
 
@@ -6120,75 +6898,14 @@ static int ufshcd_abort(struct scsi_cmnd *cmd)
 		goto out;
 	}
 
-	for (poll_cnt = 100; poll_cnt; poll_cnt--) {
-		err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag,
-				UFS_QUERY_TASK, &resp);
-		if (!err && resp == UPIU_TASK_MANAGEMENT_FUNC_SUCCEEDED) {
-			/* cmd pending in the device */
-			dev_err(hba->dev, "%s: cmd pending in the device. tag = %d\n",
-				__func__, tag);
-			break;
-		} else if (!err && resp == UPIU_TASK_MANAGEMENT_FUNC_COMPL) {
-			/*
-			 * cmd not pending in the device, check if it is
-			 * in transition.
-			 */
-			dev_err(hba->dev, "%s: cmd at tag %d not pending in the device.\n",
-				__func__, tag);
-			reg = ufshcd_readl(hba, REG_UTP_TRANSFER_REQ_DOOR_BELL);
-			if (reg & (1 << tag)) {
-				/* sleep for max. 200us to stabilize */
-				usleep_range(100, 200);
-				continue;
-			}
-			/* command completed already */
-			dev_err(hba->dev, "%s: cmd at tag %d successfully cleared from DB.\n",
-				__func__, tag);
-			goto cleanup;
-		} else {
-			dev_err(hba->dev,
-				"%s: no response from device. tag = %d, err %d\n",
-				__func__, tag, err);
-			if (!err)
-				err = resp; /* service response error */
-			goto out;
-		}
-	}
-
-	if (!poll_cnt) {
-		err = -EBUSY;
+	err = ufshcd_try_to_abort_task(hba, tag);
+	if (err)
 		goto out;
-	}
-
-	err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag,
-			UFS_ABORT_TASK, &resp);
-	if (err || resp != UPIU_TASK_MANAGEMENT_FUNC_COMPL) {
-		if (!err) {
-			err = resp; /* service response error */
-			dev_err(hba->dev, "%s: issued. tag = %d, err %d\n",
-				__func__, tag, err);
-		}
-		goto out;
-	}
-
-	err = ufshcd_clear_cmd(hba, tag);
-	if (err) {
-		dev_err(hba->dev, "%s: Failed clearing cmd at tag %d, err %d\n",
-			__func__, tag, err);
-		goto out;
-	}
-
-cleanup:
-	scsi_dma_unmap(cmd);
 
 	spin_lock_irqsave(host->host_lock, flags);
-	ufshcd_outstanding_req_clear(hba, tag);
-	hba->lrb[tag].cmd = NULL;
+	__ufshcd_transfer_req_compl(hba, (1UL << tag));
 	spin_unlock_irqrestore(host->host_lock, flags);
 
-	clear_bit_unlock(tag, &hba->lrb_in_use);
-	wake_up(&hba->dev_cmd.tag_wq);
-
 out:
 	if (!err) {
 		err = SUCCESS;
@@ -6233,17 +6950,15 @@ static int ufshcd_host_reset_and_restore(struct ufs_hba *hba)
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 
 	/* scale up clocks to max frequency before full reinitialization */
-	ufshcd_scale_clks(hba, true);
+	ufshcd_set_clk_freq(hba, true);
 
 	err = ufshcd_hba_enable(hba);
 	if (err)
 		goto out;
 
 	/* Establish the link again and restore the device */
-	err = ufshcd_probe_hba(hba);
+	err = ufshcd_probe_hba(hba, false);
 
-	if (!err && (hba->ufshcd_state != UFSHCD_STATE_OPERATIONAL))
-		err = -EIO;
 out:
 	if (err)
 		dev_err(hba->dev, "%s: Host init failed %d\n", __func__, err);
@@ -6262,9 +6977,23 @@ static int ufshcd_host_reset_and_restore(struct ufs_hba *hba)
  */
 static int ufshcd_reset_and_restore(struct ufs_hba *hba)
 {
+	u32 saved_err;
+	u32 saved_uic_err;
 	int err = 0;
+	unsigned long flags;
 	int retries = MAX_HOST_RESET_RETRIES;
 
+	/*
+	 * This is a fresh start, cache and clear saved error first,
+	 * in case new error generated during reset and restore.
+	 */
+	spin_lock_irqsave(hba->host->host_lock, flags);
+	saved_err = hba->saved_err;
+	saved_uic_err = hba->saved_uic_err;
+	hba->saved_err = 0;
+	hba->saved_uic_err = 0;
+	spin_unlock_irqrestore(hba->host->host_lock, flags);
+
 	do {
 		/* Reset the attached device */
 		ufshcd_vops_device_reset(hba);
@@ -6272,6 +7001,18 @@ static int ufshcd_reset_and_restore(struct ufs_hba *hba)
 		err = ufshcd_host_reset_and_restore(hba);
 	} while (err && --retries);
 
+	spin_lock_irqsave(hba->host->host_lock, flags);
+	/*
+	 * Inform scsi mid-layer that we did reset and allow to handle
+	 * Unit Attention properly.
+	 */
+	scsi_report_bus_reset(hba->host, 0);
+	if (err) {
+		hba->saved_err |= saved_err;
+		hba->saved_uic_err |= saved_uic_err;
+	}
+	spin_unlock_irqrestore(hba->host->host_lock, flags);
+
 	return err;
 }
 
@@ -6283,48 +7024,25 @@ static int ufshcd_reset_and_restore(struct ufs_hba *hba)
  */
 static int ufshcd_eh_host_reset_handler(struct scsi_cmnd *cmd)
 {
-	int err;
+	int err = SUCCESS;
 	unsigned long flags;
 	struct ufs_hba *hba;
 
 	hba = shost_priv(cmd->device->host);
 
-	ufshcd_hold(hba, false);
-	/*
-	 * Check if there is any race with fatal error handling.
-	 * If so, wait for it to complete. Even though fatal error
-	 * handling does reset and restore in some cases, don't assume
-	 * anything out of it. We are just avoiding race here.
-	 */
-	do {
-		spin_lock_irqsave(hba->host->host_lock, flags);
-		if (!(work_pending(&hba->eh_work) ||
-			    hba->ufshcd_state == UFSHCD_STATE_RESET ||
-			    hba->ufshcd_state == UFSHCD_STATE_EH_SCHEDULED))
-			break;
-		spin_unlock_irqrestore(hba->host->host_lock, flags);
-		dev_dbg(hba->dev, "%s: reset in progress\n", __func__);
-		flush_work(&hba->eh_work);
-	} while (1);
-
-	hba->ufshcd_state = UFSHCD_STATE_RESET;
-	ufshcd_set_eh_in_progress(hba);
+	spin_lock_irqsave(hba->host->host_lock, flags);
+	hba->force_reset = true;
+	ufshcd_schedule_eh_work(hba);
+	dev_err(hba->dev, "%s: reset in progress - 1\n", __func__);
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 
-	err = ufshcd_reset_and_restore(hba);
+	flush_work(&hba->eh_work);
 
 	spin_lock_irqsave(hba->host->host_lock, flags);
-	if (!err) {
-		err = SUCCESS;
-		hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL;
-	} else {
+	if (hba->ufshcd_state == UFSHCD_STATE_ERROR)
 		err = FAILED;
-		hba->ufshcd_state = UFSHCD_STATE_ERROR;
-	}
-	ufshcd_clear_eh_in_progress(hba);
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 
-	ufshcd_release(hba);
 	return err;
 }
 
@@ -6416,11 +7134,12 @@ static u32 ufshcd_find_max_sup_active_icc_level(struct ufs_hba *hba,
 	return icc_level;
 }
 
-static void ufshcd_init_icc_levels(struct ufs_hba *hba)
+static void ufshcd_set_active_icc_lvl(struct ufs_hba *hba)
 {
 	int ret;
 	int buff_len = hba->desc_size.pwr_desc;
 	u8 *desc_buf;
+	u32 icc_level;
 
 	desc_buf = kmalloc(buff_len, GFP_KERNEL);
 	if (!desc_buf)
@@ -6434,25 +7153,32 @@ static void ufshcd_init_icc_levels(struct ufs_hba *hba)
 		goto out;
 	}
 
-	hba->init_prefetch_data.icc_level =
-			ufshcd_find_max_sup_active_icc_level(hba,
-			desc_buf, buff_len);
-	dev_dbg(hba->dev, "%s: setting icc_level 0x%x",
-			__func__, hba->init_prefetch_data.icc_level);
+	icc_level = ufshcd_find_max_sup_active_icc_level(hba, desc_buf,
+							 buff_len);
+	dev_dbg(hba->dev, "%s: setting icc_level 0x%x", __func__, icc_level);
 
 	ret = ufshcd_query_attr_retry(hba, UPIU_QUERY_OPCODE_WRITE_ATTR,
-		QUERY_ATTR_IDN_ACTIVE_ICC_LVL, 0, 0,
-		&hba->init_prefetch_data.icc_level);
+		QUERY_ATTR_IDN_ACTIVE_ICC_LVL, 0, 0, &icc_level);
 
 	if (ret)
 		dev_err(hba->dev,
 			"%s: Failed configuring bActiveICCLevel = %d ret = %d",
-			__func__, hba->init_prefetch_data.icc_level , ret);
+			__func__, icc_level, ret);
 
 out:
 	kfree(desc_buf);
 }
 
+static inline void ufshcd_blk_pm_runtime_init(struct scsi_device *sdev)
+{
+	scsi_autopm_get_device(sdev);
+	blk_pm_runtime_init(sdev->request_queue, &sdev->sdev_gendev);
+	if (sdev->rpm_autosuspend)
+		pm_runtime_set_autosuspend_delay(&sdev->sdev_gendev,
+						 RPM_AUTOSUSPEND_DELAY_MS);
+	scsi_autopm_put_device(sdev);
+}
+
 /**
  * ufshcd_scsi_add_wlus - Adds required W-LUs
  * @hba: per-adapter instance
@@ -6492,6 +7218,7 @@ static int ufshcd_scsi_add_wlus(struct ufs_hba *hba)
 		hba->sdev_ufs_device = NULL;
 		goto out;
 	}
+	ufshcd_blk_pm_runtime_init(hba->sdev_ufs_device);
 	scsi_device_put(hba->sdev_ufs_device);
 
 	sdev_rpmb = __scsi_add_device(hba->host, 0, 0,
@@ -6500,14 +7227,17 @@ static int ufshcd_scsi_add_wlus(struct ufs_hba *hba)
 		ret = PTR_ERR(sdev_rpmb);
 		goto remove_sdev_ufs_device;
 	}
+	ufshcd_blk_pm_runtime_init(sdev_rpmb);
 	scsi_device_put(sdev_rpmb);
 
 	sdev_boot = __scsi_add_device(hba->host, 0, 0,
 		ufshcd_upiu_wlun_to_scsi_wlun(UFS_UPIU_BOOT_WLUN), NULL);
-	if (IS_ERR(sdev_boot))
+	if (IS_ERR(sdev_boot)) {
 		dev_err(hba->dev, "%s: BOOT WLUN not found\n", __func__);
-	else
+	} else {
+		ufshcd_blk_pm_runtime_init(sdev_boot);
 		scsi_device_put(sdev_boot);
+	}
 	goto out;
 
 remove_sdev_ufs_device:
@@ -6516,16 +7246,110 @@ static int ufshcd_scsi_add_wlus(struct ufs_hba *hba)
 	return ret;
 }
 
-static int ufs_get_device_desc(struct ufs_hba *hba,
-			       struct ufs_dev_desc *dev_desc)
+static void ufshcd_wb_probe(struct ufs_hba *hba, u8 *desc_buf)
+{
+	struct ufs_dev_info *dev_info = &hba->dev_info;
+	u8 lun;
+	u32 d_lu_wb_buf_alloc;
+
+	if (!ufshcd_is_wb_allowed(hba))
+		return;
+	/*
+	 * Probe WB only for UFS-2.2 and UFS-3.1 (and later) devices or
+	 * UFS devices with quirk UFS_DEVICE_QUIRK_SUPPORT_EXTENDED_FEATURES
+	 * enabled
+	 */
+	if (!(dev_info->wspecversion >= 0x310 ||
+	      dev_info->wspecversion == 0x220 ||
+	     (hba->dev_quirks & UFS_DEVICE_QUIRK_SUPPORT_EXTENDED_FEATURES)))
+		goto wb_disabled;
+
+	if (hba->desc_size.dev_desc < DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP + 4)
+		goto wb_disabled;
+
+	dev_info->d_ext_ufs_feature_sup =
+		get_unaligned_be32(desc_buf +
+				   DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP);
+
+	if (!(dev_info->d_ext_ufs_feature_sup & UFS_DEV_WRITE_BOOSTER_SUP))
+		goto wb_disabled;
+
+	/*
+	 * WB may be supported but not configured while provisioning.
+	 * The spec says, in dedicated wb buffer mode,
+	 * a max of 1 lun would have wb buffer configured.
+	 * Now only shared buffer mode is supported.
+	 */
+	dev_info->b_wb_buffer_type =
+		desc_buf[DEVICE_DESC_PARAM_WB_TYPE];
+
+	dev_info->b_presrv_uspc_en =
+		desc_buf[DEVICE_DESC_PARAM_WB_PRESRV_USRSPC_EN];
+
+	if (dev_info->b_wb_buffer_type == WB_BUF_MODE_SHARED) {
+		dev_info->d_wb_alloc_units =
+		get_unaligned_be32(desc_buf +
+				   DEVICE_DESC_PARAM_WB_SHARED_ALLOC_UNITS);
+		if (!dev_info->d_wb_alloc_units)
+			goto wb_disabled;
+	} else {
+		for (lun = 0; lun < UFS_UPIU_MAX_WB_LUN_ID; lun++) {
+			d_lu_wb_buf_alloc = 0;
+			ufshcd_read_unit_desc_param(hba,
+					lun,
+					UNIT_DESC_PARAM_WB_BUF_ALLOC_UNITS,
+					(u8 *)&d_lu_wb_buf_alloc,
+					sizeof(d_lu_wb_buf_alloc));
+			if (d_lu_wb_buf_alloc) {
+				dev_info->wb_dedicated_lu = lun;
+				break;
+			}
+		}
+
+		if (!d_lu_wb_buf_alloc)
+			goto wb_disabled;
+	}
+	return;
+
+wb_disabled:
+	hba->caps &= ~UFSHCD_CAP_WB_EN;
+}
+
+void ufshcd_fixup_dev_quirks(struct ufs_hba *hba, struct ufs_dev_fix *fixups)
+{
+	struct ufs_dev_fix *f;
+	struct ufs_dev_info *dev_info = &hba->dev_info;
+
+	if (!fixups)
+		return;
+
+	for (f = fixups; f->quirk; f++) {
+		if ((f->wmanufacturerid == dev_info->wmanufacturerid ||
+		     f->wmanufacturerid == UFS_ANY_VENDOR) &&
+		     ((dev_info->model &&
+		       STR_PRFX_EQUAL(f->model, dev_info->model)) ||
+		      !strcmp(f->model, UFS_ANY_MODEL)))
+			hba->dev_quirks |= f->quirk;
+	}
+}
+EXPORT_SYMBOL_GPL(ufshcd_fixup_dev_quirks);
+
+static void ufs_fixup_device_setup(struct ufs_hba *hba)
+{
+	/* fix by general quirk table */
+	ufshcd_fixup_dev_quirks(hba, ufs_fixups);
+
+	/* allow vendors to fix quirks */
+	ufshcd_vops_fixup_dev_quirks(hba);
+}
+
+static int ufs_get_device_desc(struct ufs_hba *hba)
 {
 	int err;
 	size_t buff_len;
 	u8 model_index;
 	u8 *desc_buf;
-
-	if (!dev_desc)
-		return -EINVAL;
+	struct ufs_dev_info *dev_info = &hba->dev_info;
 
 	buff_len = max_t(size_t, hba->desc_size.dev_desc,
 			 QUERY_DESC_MAX_SIZE + 1);
@@ -6546,18 +7370,29 @@ static int ufs_get_device_desc(struct ufs_hba *hba,
 	 * getting vendor (manufacturerID) and Bank Index in big endian
 	 * format
 	 */
-	dev_desc->wmanufacturerid = desc_buf[DEVICE_DESC_PARAM_MANF_ID] << 8 |
+	dev_info->wmanufacturerid = desc_buf[DEVICE_DESC_PARAM_MANF_ID] << 8 |
 				     desc_buf[DEVICE_DESC_PARAM_MANF_ID + 1];
 
+	/* getting Specification Version in big endian format */
+	dev_info->wspecversion = desc_buf[DEVICE_DESC_PARAM_SPEC_VER] << 8 |
+				      desc_buf[DEVICE_DESC_PARAM_SPEC_VER + 1];
+
 	model_index = desc_buf[DEVICE_DESC_PARAM_PRDCT_NAME];
+
 	err = ufshcd_read_string_desc(hba, model_index,
-				      &dev_desc->model, SD_ASCII_STD);
+				      &dev_info->model, SD_ASCII_STD);
 	if (err < 0) {
 		dev_err(hba->dev, "%s: Failed reading Product Name. err = %d\n",
 			__func__, err);
 		goto out;
 	}
 
+	ufshcd_get_ref_clk_gating_wait(hba);
+
+	ufs_fixup_device_setup(hba);
+
+	ufshcd_wb_probe(hba, desc_buf);
+
 	/*
 	 * ufshcd_read_string_desc returns size of the string
 	 * reset the error value
@@ -6569,25 +7404,12 @@ static int ufs_get_device_desc(struct ufs_hba *hba,
 	return err;
 }
 
-static void ufs_put_device_desc(struct ufs_dev_desc *dev_desc)
+static void ufs_put_device_desc(struct ufs_hba *hba)
 {
-	kfree(dev_desc->model);
-	dev_desc->model = NULL;
-}
+	struct ufs_dev_info *dev_info = &hba->dev_info;
 
-static void ufs_fixup_device_setup(struct ufs_hba *hba,
-				   struct ufs_dev_desc *dev_desc)
-{
-	struct ufs_dev_fix *f;
-
-	for (f = ufs_fixups; f->quirk; f++) {
-		if ((f->card.wmanufacturerid == dev_desc->wmanufacturerid ||
-		     f->card.wmanufacturerid == UFS_ANY_VENDOR) &&
-		     ((dev_desc->model &&
-		       STR_PRFX_EQUAL(f->card.model, dev_desc->model)) ||
-		      !strcmp(f->card.model, UFS_ANY_MODEL)))
-			hba->dev_quirks |= f->quirk;
-	}
+	kfree(dev_info->model);
+	dev_info->model = NULL;
 }
 
 /**
@@ -6737,22 +7559,21 @@ static int ufshcd_quirk_tune_host_pa_tactivate(struct ufs_hba *hba)
 	return ret;
 }
 
-static void ufshcd_tune_unipro_params(struct ufs_hba *hba,
-				      struct ufs_dev_desc *card)
+static void ufshcd_tune_unipro_params(struct ufs_hba *hba)
 {
 	if (ufshcd_is_unipro_pa_params_tuning_req(hba)) {
 		ufshcd_tune_pa_tactivate(hba);
 		ufshcd_tune_pa_hibern8time(hba);
 	}
 
+	ufshcd_vops_apply_dev_quirks(hba);
+
 	if (hba->dev_quirks & UFS_DEVICE_QUIRK_PA_TACTIVATE)
 		/* set 1ms timeout for PA_TACTIVATE */
 		ufshcd_dme_set(hba, UIC_ARG_MIB(PA_TACTIVATE), 10);
 
 	if (hba->dev_quirks & UFS_DEVICE_QUIRK_HOST_PA_TACTIVATE)
 		ufshcd_quirk_tune_host_pa_tactivate(hba);
-
-	ufshcd_vops_apply_dev_quirks(hba, card);
 }
 
 static void ufshcd_clear_dbg_ufs_stats(struct ufs_hba *hba)
@@ -6802,6 +7623,37 @@ static void ufshcd_init_desc_sizes(struct ufs_hba *hba)
 		hba->desc_size.hlth_desc = QUERY_DESC_HEALTH_DEF_SIZE;
 }
 
+static int ufshcd_device_geo_params_init(struct ufs_hba *hba)
+{
+	int err;
+	size_t buff_len;
+	u8 *desc_buf;
+
+	buff_len = hba->desc_size.geom_desc;
+	desc_buf = kmalloc(buff_len, GFP_KERNEL);
+	if (!desc_buf) {
+		err = -ENOMEM;
+		goto out;
+	}
+
+	err = ufshcd_read_desc(hba, QUERY_DESC_IDN_GEOMETRY, 0,
+			desc_buf, buff_len);
+	if (err) {
+		dev_err(hba->dev, "%s: Failed reading Geometry Desc. err = %d\n",
+				__func__, err);
+		goto out;
+	}
+
+	if (desc_buf[GEOMETRY_DESC_PARAM_MAX_NUM_LUN] == 1)
+		hba->dev_info.max_lu_supported = 32;
+	else if (desc_buf[GEOMETRY_DESC_PARAM_MAX_NUM_LUN] == 0)
+		hba->dev_info.max_lu_supported = 8;
+
+out:
+	kfree(desc_buf);
+	return err;
+}
+
 static struct ufs_ref_clk ufs_ref_clk_freqs[] = {
 	{19200000, REF_CLK_FREQ_19_2_MHZ},
 	{26000000, REF_CLK_FREQ_26_MHZ},
@@ -6870,16 +7722,126 @@ static int ufshcd_set_dev_ref_clk(struct ufs_hba *hba)
 	return err;
 }
 
+static int ufshcd_device_params_init(struct ufs_hba *hba)
+{
+	bool flag;
+	int ret;
+
+	/* Init check for device descriptor sizes */
+	ufshcd_init_desc_sizes(hba);
+
+	/* Init UFS geometry descriptor related parameters */
+	ret = ufshcd_device_geo_params_init(hba);
+	if (ret)
+		goto out;
+
+	/* Check and apply UFS device quirks */
+	ret = ufs_get_device_desc(hba);
+	if (ret) {
+		dev_err(hba->dev, "%s: Failed getting device info. err = %d\n",
+			__func__, ret);
+		goto out;
+	}
+
+	if (!ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_READ_FLAG,
+			QUERY_FLAG_IDN_PWR_ON_WPE, 0, &flag))
+		hba->dev_info.f_power_on_wp_en = flag;
+
+	/* Probe maximum power mode co-supported by both UFS host and device */
+	if (ufshcd_get_max_pwr_mode(hba))
+		dev_err(hba->dev,
+			"%s: Failed getting max supported power mode\n",
+			__func__);
+out:
+	return ret;
+}
+
+/**
+ * ufshcd_add_lus - probe and add UFS logical units
+ * @hba: per-adapter instance
+ */
+static int ufshcd_add_lus(struct ufs_hba *hba)
+{
+	int ret;
+
+	/* Add required well known logical units to scsi mid layer */
+	ret = ufshcd_scsi_add_wlus(hba);
+	if (ret)
+		goto out;
+
+	/* Initialize devfreq after UFS device is detected */
+	if (ufshcd_is_clkscaling_supported(hba)) {
+		memcpy(&hba->clk_scaling.saved_pwr_info.info,
+			&hba->pwr_info,
+			sizeof(struct ufs_pa_layer_attr));
+		hba->clk_scaling.saved_pwr_info.is_valid = true;
+		if (!hba->devfreq) {
+			ret = ufshcd_devfreq_init(hba);
+			if (ret)
+				goto out;
+		}
+
+		hba->clk_scaling.is_allowed = true;
+	}
+
+	ufs_bsg_probe(hba);
+	scsi_scan_host(hba->host);
+	pm_runtime_put_sync(hba->dev);
+
+out:
+	return ret;
+}
+
+static int
+ufshcd_send_request_sense(struct ufs_hba *hba, struct scsi_device *sdp);
+
+static int ufshcd_clear_uac(struct ufs_hba *hba)
+{
+	struct scsi_device *sdp;
+	unsigned long flags;
+	int ret = 0;
+
+	spin_lock_irqsave(hba->host->host_lock, flags);
+	sdp = hba->sdev_ufs_device;
+	if (sdp) {
+		ret = scsi_device_get(sdp);
+		if (!ret && !scsi_device_online(sdp)) {
+			ret = -ENODEV;
+			scsi_device_put(sdp);
+		}
+	} else {
+		ret = -ENODEV;
+	}
+	spin_unlock_irqrestore(hba->host->host_lock, flags);
+	if (ret)
+		goto out_err;
+
+	if (hba->wlun_dev_clr_ua) {
+		ret = ufshcd_send_request_sense(hba, sdp);
+		if (ret)
+			goto out;
+		/* Unit attention condition is cleared now */
+		hba->wlun_dev_clr_ua = false;
+	}
+out:
+	scsi_device_put(sdp);
+out_err:
+	if (ret)
+		dev_err(hba->dev, "%s: UAC clear ret = %d\n", __func__, ret);
+	return ret;
+}
+
 /**
  * ufshcd_probe_hba - probe hba to detect device and initialize
  * @hba: per-adapter instance
+ * @async: asynchronous execution or not
  *
  * Execute link-startup and verify device initialization
  */
-static int ufshcd_probe_hba(struct ufs_hba *hba)
+static int ufshcd_probe_hba(struct ufs_hba *hba, bool async)
 {
-	struct ufs_dev_desc card = {0};
 	int ret;
+	unsigned long flags;
 	ktime_t start = ktime_get();
 
 	ret = ufshcd_link_startup(hba);
@@ -6896,38 +7858,35 @@ static int ufshcd_probe_hba(struct ufs_hba *hba)
 	/* UniPro link is active now */
 	ufshcd_set_link_active(hba);
 
+	/* Verify device initialization by sending NOP OUT UPIU */
 	ret = ufshcd_verify_dev_init(hba);
 	if (ret)
 		goto out;
 
+	/* Initiate UFS initialization, and waiting until completion */
 	ret = ufshcd_complete_dev_init(hba);
 	if (ret)
 		goto out;
 
-	/* Init check for device descriptor sizes */
-	ufshcd_init_desc_sizes(hba);
-
-	ret = ufs_get_device_desc(hba, &card);
-	if (ret) {
-		dev_err(hba->dev, "%s: Failed getting device info. err = %d\n",
-			__func__, ret);
-		goto out;
+	/*
+	 * Initialize UFS device parameters used by driver, these
+	 * parameters are associated with UFS descriptors.
+	 */
+	if (async) {
+		ret = ufshcd_device_params_init(hba);
+		if (ret)
+			goto out;
 	}
 
-	ufs_fixup_device_setup(hba, &card);
-	ufshcd_tune_unipro_params(hba, &card);
-	ufs_put_device_desc(&card);
+	ufshcd_tune_unipro_params(hba);
 
 	/* UFS device is also active now */
 	ufshcd_set_ufs_dev_active(hba);
 	ufshcd_force_reset_auto_bkops(hba);
 	hba->wlun_dev_clr_ua = true;
 
-	if (ufshcd_get_max_pwr_mode(hba)) {
-		dev_err(hba->dev,
-			"%s: Failed getting max supported power mode\n",
-			__func__);
-	} else {
+	/* Gear up to HS gear if supported */
+	if (hba->max_pwr_info.is_valid) {
 		/*
 		 * Set the right value to bRefClkFreq before attempting to
 		 * switch to HS gears.
@@ -6940,68 +7899,28 @@ static int ufshcd_probe_hba(struct ufs_hba *hba)
 					__func__, ret);
 			goto out;
 		}
+		ufshcd_print_pwr_info(hba);
 	}
 
-	/* set the state as operational after switching to desired gear */
-	hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL;
+	/*
+	 * bActiveICCLevel is volatile for UFS device (as per latest v2.1 spec)
+	 * and for removable UFS card as well, hence always set the parameter.
+	 * Note: Error handler may issue the device reset hence resetting
+	 *       bActiveICCLevel as well so it is always safe to set this here.
+	 */
+	ufshcd_set_active_icc_lvl(hba);
 
+	ufshcd_wb_config(hba);
 	/* Enable Auto-Hibernate if configured */
 	ufshcd_auto_hibern8_enable(hba);
 
-	/*
-	 * If we are in error handling context or in power management callbacks
-	 * context, no need to scan the host
-	 */
-	if (!ufshcd_eh_in_progress(hba) && !hba->pm_op_in_progress) {
-		bool flag;
-
-		/* clear any previous UFS device information */
-		memset(&hba->dev_info, 0, sizeof(hba->dev_info));
-		if (!ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_READ_FLAG,
-				QUERY_FLAG_IDN_PWR_ON_WPE, &flag))
-			hba->dev_info.f_power_on_wp_en = flag;
-
-		if (!hba->is_init_prefetch)
-			ufshcd_init_icc_levels(hba);
-
-		/* Add required well known logical units to scsi mid layer */
-		ret = ufshcd_scsi_add_wlus(hba);
-		if (ret)
-			goto out;
-
-		/* Initialize devfreq after UFS device is detected */
-		if (ufshcd_is_clkscaling_supported(hba)) {
-			memcpy(&hba->clk_scaling.saved_pwr_info.info,
-				&hba->pwr_info,
-				sizeof(struct ufs_pa_layer_attr));
-			hba->clk_scaling.saved_pwr_info.is_valid = true;
-			if (!hba->devfreq) {
-				ret = ufshcd_devfreq_init(hba);
-				if (ret)
-					goto out;
-			}
-			hba->clk_scaling.is_allowed = true;
-		}
-
-		ufs_bsg_probe(hba);
-
-		scsi_scan_host(hba->host);
-		pm_runtime_put_sync(hba->dev);
-	}
-
-	if (!hba->is_init_prefetch)
-		hba->is_init_prefetch = true;
-
 out:
-	/*
-	 * If we failed to initialize the device or the device is not
-	 * present, turn off the power/clocks etc.
-	 */
-	if (ret && !ufshcd_eh_in_progress(hba) && !hba->pm_op_in_progress) {
-		pm_runtime_put_sync(hba->dev);
-		ufshcd_exit_clk_scaling(hba);
-		ufshcd_hba_exit(hba);
-	}
+	spin_lock_irqsave(hba->host->host_lock, flags);
+	if (ret)
+		hba->ufshcd_state = UFSHCD_STATE_ERROR;
+	else if (hba->ufshcd_state == UFSHCD_STATE_RESET)
+		hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL;
+	spin_unlock_irqrestore(hba->host->host_lock, flags);
 
 	trace_ufshcd_init(dev_name(hba->dev), ret,
 		ktime_to_us(ktime_sub(ktime_get(), start)),
@@ -7017,8 +7936,27 @@ static int ufshcd_probe_hba(struct ufs_hba *hba)
 static void ufshcd_async_scan(void *data, async_cookie_t cookie)
 {
 	struct ufs_hba *hba = (struct ufs_hba *)data;
+	int ret;
 
-	ufshcd_probe_hba(hba);
+	/* Initialize hba, detect and initialize UFS device */
+	ret = ufshcd_probe_hba(hba, true);
+	if (ret)
+		goto out;
+
+	/* Probe and add UFS logical units  */
+	ret = ufshcd_add_lus(hba);
+out:
+	/*
+	 * If we failed to initialize the device or the device is not
+	 * present, turn off the power/clocks etc.
+	 */
+	if (ret) {
+		pm_runtime_put_sync(hba->dev);
+		ufshcd_exit_clk_scaling(hba);
+		ufshcd_hba_exit(hba);
+	} else {
+		ufshcd_clear_uac(hba);
+	}
 }
 
 static enum blk_eh_timer_return ufshcd_eh_timed_out(struct scsi_cmnd *scmd)
@@ -7062,6 +8000,16 @@ static const struct attribute_group *ufshcd_driver_groups[] = {
 	NULL,
 };
 
+static struct ufs_hba_variant_params ufs_hba_vps = {
+	.hba_enable_delay_us		= 1000,
+	.wb_flush_threshold		= UFS_WB_BUF_REMAIN_PERCENT(40),
+	.devfreq_profile.polling_ms	= 100,
+	.devfreq_profile.target		= ufshcd_devfreq_target,
+	.devfreq_profile.get_dev_status	= ufshcd_devfreq_get_dev_status,
+	.ondemand_data.upthreshold	= 70,
+	.ondemand_data.downdifferential	= 5,
+};
+
 static struct scsi_host_template ufshcd_driver_template = {
 	.module			= THIS_MODULE,
 	.name			= UFSHCD,
@@ -7084,6 +8032,7 @@ static struct scsi_host_template ufshcd_driver_template = {
 	.track_queue_depth	= 1,
 	.sdev_groups		= ufshcd_driver_groups,
 	.dma_boundary		= PAGE_SIZE - 1,
+	.rpm_autosuspend_delay	= RPM_AUTOSUSPEND_DELAY_MS,
 };
 
 static int ufshcd_config_vreg_load(struct device *dev, struct ufs_vreg *vreg,
@@ -7141,6 +8090,11 @@ static int ufshcd_config_vreg(struct device *dev,
 	name = vreg->name;
 
 	if (regulator_count_voltages(reg) > 0) {
+		uA_load = on ? vreg->max_uA : 0;
+		ret = ufshcd_config_vreg_load(dev, vreg, uA_load);
+		if (ret)
+			goto out;
+
 		if (vreg->min_uV && vreg->max_uV) {
 			min_uV = on ? vreg->min_uV : 0;
 			ret = regulator_set_voltage(reg, min_uV, vreg->max_uV);
@@ -7151,11 +8105,6 @@ static int ufshcd_config_vreg(struct device *dev,
 				goto out;
 			}
 		}
-
-		uA_load = on ? vreg->max_uA : 0;
-		ret = ufshcd_config_vreg_load(dev, vreg, uA_load);
-		if (ret)
-			goto out;
 	}
 out:
 	return ret;
@@ -7295,16 +8244,9 @@ static int __ufshcd_setup_clocks(struct ufs_hba *hba, bool on,
 	if (list_empty(head))
 		goto out;
 
-	/*
-	 * vendor specific setup_clocks ops may depend on clocks managed by
-	 * this standard driver hence call the vendor specific setup_clocks
-	 * before disabling the clocks managed here.
-	 */
-	if (!on) {
-		ret = ufshcd_vops_setup_clocks(hba, on, PRE_CHANGE);
-		if (ret)
-			return ret;
-	}
+	ret = ufshcd_vops_setup_clocks(hba, on, PRE_CHANGE);
+	if (ret)
+		return ret;
 
 	list_for_each_entry(clki, head, list) {
 		if (!IS_ERR_OR_NULL(clki->clk)) {
@@ -7328,16 +8270,9 @@ static int __ufshcd_setup_clocks(struct ufs_hba *hba, bool on,
 		}
 	}
 
-	/*
-	 * vendor specific setup_clocks ops may depend on clocks managed by
-	 * this standard driver hence call the vendor specific setup_clocks
-	 * after enabling the clocks managed here.
-	 */
-	if (on) {
-		ret = ufshcd_vops_setup_clocks(hba, on, POST_CHANGE);
-		if (ret)
-			return ret;
-	}
+	ret = ufshcd_vops_setup_clocks(hba, on, POST_CHANGE);
+	if (ret)
+		return ret;
 
 out:
 	if (ret) {
@@ -7512,6 +8447,7 @@ static void ufshcd_hba_exit(struct ufs_hba *hba)
 		ufshcd_setup_clocks(hba, false);
 		ufshcd_setup_hba_vreg(hba, false);
 		hba->is_powered = false;
+		ufs_put_device_desc(hba);
 	}
 }
 
@@ -7629,10 +8565,13 @@ static int ufshcd_link_state_transition(struct ufs_hba *hba,
 
 	if (req_link_state == UIC_LINK_HIBERN8_STATE) {
 		ret = ufshcd_uic_hibern8_enter(hba);
-		if (!ret)
+		if (!ret) {
 			ufshcd_set_link_hibern8(hba);
-		else
+		} else {
+			dev_err(hba->dev, "%s: hibern8 enter failed %d\n",
+					__func__, ret);
 			goto out;
+		}
 	}
 	/*
 	 * If autobkops is enabled, link can't be turned off because
@@ -7649,8 +8588,11 @@ static int ufshcd_link_state_transition(struct ufs_hba *hba,
 		 * unipro. But putting the link in hibern8 is much faster.
 		 */
 		ret = ufshcd_uic_hibern8_enter(hba);
-		if (ret)
+		if (ret) {
+			dev_err(hba->dev, "%s: hibern8 enter failed %d\n",
+					__func__, ret);
 			goto out;
+		}
 		/*
 		 * Change controller state to "reset state" which
 		 * should also put the link in off/reset state
@@ -7669,6 +8611,8 @@ static int ufshcd_link_state_transition(struct ufs_hba *hba,
 
 static void ufshcd_vreg_set_lpm(struct ufs_hba *hba)
 {
+	bool vcc_off = false;
+
 	/*
 	 * It seems some UFS devices may keep drawing more than sleep current
 	 * (atleast for 500us) from UFS rails (especially from VCCQ rail).
@@ -7690,17 +8634,29 @@ static void ufshcd_vreg_set_lpm(struct ufs_hba *hba)
 	 *
 	 * Ignore the error returned by ufshcd_toggle_vreg() as device is anyway
 	 * in low power state which would save some power.
+	 *
+	 * If Write Booster is enabled and the device needs to flush the WB
+	 * buffer OR if bkops status is urgent for WB, keep Vcc on.
 	 */
 	if (ufshcd_is_ufs_dev_poweroff(hba) && ufshcd_is_link_off(hba) &&
 	    !hba->dev_info.is_lu_power_on_wp) {
 		ufshcd_setup_vreg(hba, false);
+		vcc_off = true;
 	} else if (!ufshcd_is_ufs_dev_active(hba)) {
 		ufshcd_toggle_vreg(hba->dev, hba->vreg_info.vcc, false);
+		vcc_off = true;
 		if (!ufshcd_is_link_active(hba)) {
 			ufshcd_config_vreg_lpm(hba, hba->vreg_info.vccq);
 			ufshcd_config_vreg_lpm(hba, hba->vreg_info.vccq2);
 		}
 	}
+
+	/*
+	 * Some UFS devices require delay after VCC power rail is turned-off.
+	 */
+	if (vcc_off && hba->vreg_info.vcc &&
+		hba->dev_quirks & UFS_DEVICE_QUIRK_DELAY_AFTER_LPM)
+		usleep_range(5000, 5100);
 }
 
 static int ufshcd_vreg_set_hpm(struct ufs_hba *hba)
@@ -7819,18 +8775,34 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 			/* make sure that auto bkops is disabled */
 			ufshcd_disable_auto_bkops(hba);
 		}
+		/*
+		 * If device needs to do BKOP or WB buffer flush during
+		 * Hibern8, keep device power mode as "active power mode"
+		 * and VCC supply.
+		 */
+		hba->dev_info.b_rpm_dev_flush_capable =
+			hba->auto_bkops_enabled ||
+			(((req_link_state == UIC_LINK_HIBERN8_STATE) ||
+			((req_link_state == UIC_LINK_ACTIVE_STATE) &&
+			ufshcd_is_auto_hibern8_enabled(hba))) &&
+			ufshcd_wb_need_flush(hba));
 	}
 
-	if ((req_dev_pwr_mode != hba->curr_dev_pwr_mode) &&
-	     ((ufshcd_is_runtime_pm(pm_op) && !hba->auto_bkops_enabled) ||
-	       !ufshcd_is_runtime_pm(pm_op))) {
-		/* ensure that bkops is disabled */
-		ufshcd_disable_auto_bkops(hba);
-		ret = ufshcd_set_dev_pwr_mode(hba, req_dev_pwr_mode);
-		if (ret)
-			goto enable_gating;
+	if (req_dev_pwr_mode != hba->curr_dev_pwr_mode) {
+		if ((ufshcd_is_runtime_pm(pm_op) && !hba->auto_bkops_enabled) ||
+		    !ufshcd_is_runtime_pm(pm_op)) {
+			/* ensure that bkops is disabled */
+			ufshcd_disable_auto_bkops(hba);
+		}
+
+		if (!hba->dev_info.b_rpm_dev_flush_capable) {
+			ret = ufshcd_set_dev_pwr_mode(hba, req_dev_pwr_mode);
+			if (ret)
+				goto enable_gating;
+		}
 	}
 
+	flush_work(&hba->eeh_work);
 	ret = ufshcd_link_state_transition(hba, req_link_state, 1);
 	if (ret)
 		goto set_dev_active;
@@ -7846,6 +8818,11 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 	ret = ufshcd_vops_suspend(hba, pm_op);
 	if (ret)
 		goto set_link_active;
+	/*
+	 * Disable the host irq as host controller as there won't be any
+	 * host controller transaction expected till resume.
+	 */
+	ufshcd_disable_irq(hba);
 
 	if (!ufshcd_is_link_active(hba))
 		ufshcd_setup_clocks(hba, false);
@@ -7853,13 +8830,12 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 		/* If link is active, device ref_clk can't be switched off */
 		__ufshcd_setup_clocks(hba, false, true);
 
-	hba->clk_gating.state = CLKS_OFF;
-	trace_ufshcd_clk_gating(dev_name(hba->dev), hba->clk_gating.state);
-	/*
-	 * Disable the host irq as host controller as there won't be any
-	 * host controller transaction expected till resume.
-	 */
-	ufshcd_disable_irq(hba);
+	if (ufshcd_is_clkgating_allowed(hba)) {
+		hba->clk_gating.state = CLKS_OFF;
+		trace_ufshcd_clk_gating(dev_name(hba->dev),
+					hba->clk_gating.state);
+	}
+
 	/* Put the host controller in low power mode if possible */
 	ufshcd_hba_vreg_set_lpm(hba);
 	goto out;
@@ -7879,9 +8855,16 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 	if (hba->clk_scaling.is_allowed)
 		ufshcd_resume_clkscaling(hba);
 	hba->clk_gating.is_suspended = false;
+	hba->dev_info.b_rpm_dev_flush_capable = false;
 	ufshcd_release(hba);
 out:
+	if (hba->dev_info.b_rpm_dev_flush_capable) {
+		schedule_delayed_work(&hba->rpm_dev_flush_recheck_work,
+			msecs_to_jiffies(RPM_DEV_FLUSH_RECHECK_WORK_DELAY_MS));
+	}
+
 	hba->pm_op_in_progress = 0;
+
 	if (ret)
 		ufshcd_update_reg_hist(&hba->ufs_stats.suspend_err, (u32)ret);
 	return ret;
@@ -7912,9 +8895,7 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 		goto out;
 
 	/* enable the host irq as host controller would be active soon */
-	ret = ufshcd_enable_irq(hba);
-	if (ret)
-		goto disable_irq_and_vops_clks;
+	ufshcd_enable_irq(hba);
 
 	ret = ufshcd_vreg_set_hpm(hba);
 	if (ret)
@@ -7931,14 +8912,21 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 
 	if (ufshcd_is_link_hibern8(hba)) {
 		ret = ufshcd_uic_hibern8_exit(hba);
-		if (!ret)
+		if (!ret) {
 			ufshcd_set_link_active(hba);
-		else
+		} else {
+			dev_err(hba->dev, "%s: hibern8 exit failed %d\n",
+					__func__, ret);
 			goto vendor_suspend;
+		}
 	} else if (ufshcd_is_link_off(hba)) {
-		ret = ufshcd_host_reset_and_restore(hba);
 		/*
-		 * ufshcd_host_reset_and_restore() should have already
+		 * A full initialization of the host and the device is required
+		 * since the link was put to off during suspend.
+		 */
+		ret = ufshcd_reset_and_restore(hba);
+		/*
+		 * ufshcd_reset_and_restore() should have already
 		 * set the link state as active
 		 */
 		if (ret || !ufshcd_is_link_active(hba))
@@ -7968,6 +8956,11 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 	/* Enable Auto-Hibernate if configured */
 	ufshcd_auto_hibern8_enable(hba);
 
+	if (hba->dev_info.b_rpm_dev_flush_capable) {
+		hba->dev_info.b_rpm_dev_flush_capable = false;
+		cancel_delayed_work(&hba->rpm_dev_flush_recheck_work);
+	}
+
 	/* Schedule clock gating in case of no access to UFS device yet */
 	ufshcd_release(hba);
 
@@ -7984,6 +8977,11 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 	if (hba->clk_scaling.is_allowed)
 		ufshcd_suspend_clkscaling(hba);
 	ufshcd_setup_clocks(hba, false);
+	if (ufshcd_is_clkgating_allowed(hba)) {
+		hba->clk_gating.state = CLKS_OFF;
+		trace_ufshcd_clk_gating(dev_name(hba->dev),
+					hba->clk_gating.state);
+	}
 out:
 	hba->pm_op_in_progress = 0;
 	if (ret)
@@ -8254,6 +9252,7 @@ int ufshcd_alloc_host(struct device *dev, struct ufs_hba **hba_handle)
 	hba->dev = dev;
 	*hba_handle = hba;
 	hba->dev_ref_clk_freq = REF_CLK_FREQ_INVAL;
+	hba->sg_entry_size = sizeof(struct ufshcd_sg_entry);
 
 	INIT_LIST_HEAD(&hba->clk_list_head);
 
@@ -8274,6 +9273,7 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq)
 	int err;
 	struct Scsi_Host *host = hba->host;
 	struct device *dev = hba->dev;
+	char eh_wq_name[sizeof("ufs_eh_wq_00")];
 
 	if (!mmio_base) {
 		dev_err(hba->dev,
@@ -8284,13 +9284,16 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq)
 
 	hba->mmio_base = mmio_base;
 	hba->irq = irq;
+	hba->vps = &ufs_hba_vps;
 
 	err = ufshcd_hba_init(hba);
 	if (err)
 		goto out_error;
 
 	/* Read capabilities registers */
-	ufshcd_hba_capabilities(hba);
+	err = ufshcd_hba_capabilities(hba);
+	if (err)
+		goto out_disable;
 
 	/* Get UFS version supported by the controller */
 	hba->ufs_version = ufshcd_get_ufs_version(hba);
@@ -8336,6 +9339,15 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq)
 	init_waitqueue_head(&hba->tm_tag_wq);
 
 	/* Initialize work queues */
+	snprintf(eh_wq_name, sizeof(eh_wq_name), "ufs_eh_wq_%d",
+		 hba->host->host_no);
+	hba->eh_wq = create_singlethread_workqueue(eh_wq_name);
+	if (!hba->eh_wq) {
+		dev_err(hba->dev, "%s: failed to create eh workqueue\n",
+				__func__);
+		err = -ENOMEM;
+		goto out_disable;
+	}
 	INIT_WORK(&hba->eh_work, ufshcd_err_handler);
 	INIT_WORK(&hba->eeh_work, ufshcd_exception_event_handler);
 
@@ -8386,6 +9398,8 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq)
 	/* Reset the attached device */
 	ufshcd_vops_device_reset(hba);
 
+	ufshcd_init_crypto(hba);
+
 	/* Host controller enable */
 	err = ufshcd_hba_enable(hba);
 	if (err) {
@@ -8407,6 +9421,9 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq)
 						UFS_SLEEP_PWR_MODE,
 						UIC_LINK_HIBERN8_STATE);
 
+	INIT_DELAYED_WORK(&hba->rpm_dev_flush_recheck_work,
+			  ufshcd_rpm_dev_flush_recheck_work);
+
 	/* Set the default auto-hiberate idle timer value to 150 ms */
 	if (ufshcd_is_auto_hibern8_supported(hba) && !hba->ahit) {
 		hba->ahit = FIELD_PREP(UFSHCI_AHIBERN8_TIMER_MASK, 150) |
@@ -8425,7 +9442,7 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq)
 	ufshcd_set_ufs_dev_active(hba);
 
 	async_schedule(ufshcd_async_scan, hba);
-	ufs_sysfs_add_nodes(hba->dev);
+	ufs_sysfs_add_nodes(hba);
 
 	return 0;
 
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index 4f1dec6..7084670 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -56,6 +56,8 @@
 #include <linux/completion.h>
 #include <linux/regulator/consumer.h>
 #include <linux/bitfield.h>
+#include <linux/devfreq.h>
+#include <linux/keyslot-manager.h>
 #include "unipro.h"
 
 #include <asm/irq.h>
@@ -66,8 +68,10 @@
 #include <scsi/scsi_tcq.h>
 #include <scsi/scsi_dbg.h>
 #include <scsi/scsi_eh.h>
+#include <linux/android_kabi.h>
 
 #include "ufs.h"
+#include "ufs_quirks.h"
 #include "ufshci.h"
 
 #define UFSHCD "ufshcd"
@@ -116,6 +120,7 @@ enum uic_link_state {
 	UIC_LINK_OFF_STATE	= 0, /* Link powered down or disabled */
 	UIC_LINK_ACTIVE_STATE	= 1, /* Link is in Fast/Slow/Sleep state */
 	UIC_LINK_HIBERN8_STATE	= 2, /* Link is in Hibernate state */
+	UIC_LINK_BROKEN_STATE	= 3, /* Link is in broken state */
 };
 
 #define ufshcd_is_link_off(hba) ((hba)->uic_link_state == UIC_LINK_OFF_STATE)
@@ -123,11 +128,28 @@ enum uic_link_state {
 				    UIC_LINK_ACTIVE_STATE)
 #define ufshcd_is_link_hibern8(hba) ((hba)->uic_link_state == \
 				    UIC_LINK_HIBERN8_STATE)
+#define ufshcd_is_link_broken(hba) ((hba)->uic_link_state == \
+				   UIC_LINK_BROKEN_STATE)
 #define ufshcd_set_link_off(hba) ((hba)->uic_link_state = UIC_LINK_OFF_STATE)
 #define ufshcd_set_link_active(hba) ((hba)->uic_link_state = \
 				    UIC_LINK_ACTIVE_STATE)
 #define ufshcd_set_link_hibern8(hba) ((hba)->uic_link_state = \
 				    UIC_LINK_HIBERN8_STATE)
+#define ufshcd_set_link_broken(hba) ((hba)->uic_link_state = \
+				    UIC_LINK_BROKEN_STATE)
+
+#define ufshcd_set_ufs_dev_active(h) \
+	((h)->curr_dev_pwr_mode = UFS_ACTIVE_PWR_MODE)
+#define ufshcd_set_ufs_dev_sleep(h) \
+	((h)->curr_dev_pwr_mode = UFS_SLEEP_PWR_MODE)
+#define ufshcd_set_ufs_dev_poweroff(h) \
+	((h)->curr_dev_pwr_mode = UFS_POWERDOWN_PWR_MODE)
+#define ufshcd_is_ufs_dev_active(h) \
+	((h)->curr_dev_pwr_mode == UFS_ACTIVE_PWR_MODE)
+#define ufshcd_is_ufs_dev_sleep(h) \
+	((h)->curr_dev_pwr_mode == UFS_SLEEP_PWR_MODE)
+#define ufshcd_is_ufs_dev_poweroff(h) \
+	((h)->curr_dev_pwr_mode == UFS_POWERDOWN_PWR_MODE)
 
 /*
  * UFS Power management levels.
@@ -168,6 +190,8 @@ struct ufs_pm_lvl_states {
  * @intr_cmd: Interrupt command (doesn't participate in interrupt aggregation)
  * @issue_time_stamp: time stamp for debug purposes
  * @compl_time_stamp: time stamp for statistics
+ * @crypto_key_slot: the key slot to use for inline crypto (-1 if none)
+ * @data_unit_num: the data unit number for the first block for inline crypto
  * @req_abort_skip: skip request abort task flag
  */
 struct ufshcd_lrb {
@@ -192,6 +216,10 @@ struct ufshcd_lrb {
 	bool intr_cmd;
 	ktime_t issue_time_stamp;
 	ktime_t compl_time_stamp;
+#ifdef CONFIG_SCSI_UFS_CRYPTO
+	int crypto_key_slot;
+	u64 data_unit_num;
+#endif
 
 	bool req_abort_skip;
 };
@@ -300,6 +328,11 @@ struct ufs_pwr_mode_info {
  * @dbg_register_dump: used to dump controller debug information
  * @phy_initialization: used to initialize phys
  * @device_reset: called to issue a reset pulse on the UFS device
+ * @program_key: program or evict an inline encryption key
+ * @fill_prdt: called after initializing the standard PRDT fields so that any
+ *	       variant-specific PRDT fields can be initialized too
+ * @prepare_command: called when receiving a request in the first place
+ * @update_sysfs: adds vendor-specific sysfs entries
  */
 struct ufs_hba_variant_ops {
 	const char *name;
@@ -323,12 +356,28 @@ struct ufs_hba_variant_ops {
 	void	(*setup_task_mgmt)(struct ufs_hba *, int, u8);
 	void    (*hibern8_notify)(struct ufs_hba *, enum uic_cmd_dme,
 					enum ufs_notify_change_status);
-	int	(*apply_dev_quirks)(struct ufs_hba *, struct ufs_dev_desc *);
+	int	(*apply_dev_quirks)(struct ufs_hba *hba);
+	void	(*fixup_dev_quirks)(struct ufs_hba *hba);
 	int     (*suspend)(struct ufs_hba *, enum ufs_pm_op);
 	int     (*resume)(struct ufs_hba *, enum ufs_pm_op);
 	void	(*dbg_register_dump)(struct ufs_hba *hba);
 	int	(*phy_initialization)(struct ufs_hba *);
 	void	(*device_reset)(struct ufs_hba *hba);
+	void	(*config_scaling_param)(struct ufs_hba *hba,
+					struct devfreq_dev_profile *profile,
+					void *data);
+	int	(*program_key)(struct ufs_hba *hba,
+			       const union ufs_crypto_cfg_entry *cfg, int slot);
+	int	(*fill_prdt)(struct ufs_hba *hba, struct ufshcd_lrb *lrbp,
+			     unsigned int segments);
+	int	(*prepare_command)(struct ufs_hba *hba,
+				struct request *rq, struct ufshcd_lrb *lrbp);
+	int     (*update_sysfs)(struct ufs_hba *hba);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /* clock gating state  */
@@ -394,7 +443,7 @@ struct ufs_saved_pwr_info {
 struct ufs_clk_scaling {
 	int active_reqs;
 	unsigned long tot_busy_t;
-	unsigned long window_start_t;
+	ktime_t window_start_t;
 	ktime_t busy_start_t;
 	struct device_attribute enable_attr;
 	struct ufs_saved_pwr_info saved_pwr_info;
@@ -406,15 +455,6 @@ struct ufs_clk_scaling {
 	bool is_suspended;
 };
 
-/**
- * struct ufs_init_prefetch - contains data that is pre-fetched once during
- * initialization
- * @icc_level: icc level which was read during initialization
- */
-struct ufs_init_prefetch {
-	u32 icc_level;
-};
-
 #define UFS_ERR_REG_HIST_LENGTH 8
 /**
  * struct ufs_err_reg_hist - keeps history of errors
@@ -430,6 +470,8 @@ struct ufs_err_reg_hist {
 
 /**
  * struct ufs_stats - keeps usage/err statistics
+ * @last_intr_status: record the last interrupt status.
+ * @last_intr_ts: record the last interrupt timestamp.
  * @hibern8_exit_cnt: Counter to keep track of number of exits,
  *		reset this after link-startup.
  * @last_hibern8_exit_tstamp: Set time after the hibern8 exit.
@@ -449,6 +491,9 @@ struct ufs_err_reg_hist {
  * @tsk_abort: tracks task abort events
  */
 struct ufs_stats {
+	u32 last_intr_status;
+	ktime_t last_intr_ts;
+
 	u32 hibern8_exit_cnt;
 	ktime_t last_hibern8_exit_tstamp;
 
@@ -472,6 +517,13 @@ struct ufs_stats {
 	struct ufs_err_reg_hist task_abort;
 };
 
+struct ufs_hba_variant_params {
+	struct devfreq_dev_profile devfreq_profile;
+	struct devfreq_simple_ondemand_data ondemand_data;
+	u16 hba_enable_delay_us;
+	u32 wb_flush_threshold;
+};
+
 /**
  * struct ufs_hba - per adapter private structure
  * @mmio_base: UFSHCI base register address
@@ -493,6 +545,7 @@ struct ufs_stats {
  * @ufs_version: UFS Version to which controller complies
  * @vops: pointer to variant specific operations
  * @priv: pointer to variant specific private data
+ * @sg_entry_size: size of struct ufshcd_sg_entry (may include variant fields)
  * @irq: Irq number of the controller
  * @active_uic_cmd: handle of active UIC command
  * @uic_cmd_mutex: mutex for uic command
@@ -506,14 +559,15 @@ struct ufs_stats {
  * @intr_mask: Interrupt Mask Bits
  * @ee_ctrl_mask: Exception event control mask
  * @is_powered: flag to check if HBA is powered
- * @is_init_prefetch: flag to check if data was pre-fetched in initialization
- * @init_prefetch_data: data pre-fetched during initialization
+ * @eh_wq: Workqueue that eh_work works on
  * @eh_work: Worker to handle UFS errors that require s/w attention
  * @eeh_work: Worker to handle exception events
  * @errors: HBA errors
  * @uic_error: UFS interconnect layer error status
  * @saved_err: sticky error mask
  * @saved_uic_err: sticky UIC error mask
+ * @force_reset: flag to force eh_work perform a full reset
+ * @force_pmc: flag to force a power mode change
  * @silence_err_logs: flag to silence error logs
  * @dev_cmd: ufs device management command information
  * @last_dme_cmd_tstamp: time stamp of the last completed DME command
@@ -527,6 +581,10 @@ struct ufs_stats {
  * @is_urgent_bkops_lvl_checked: keeps track if the urgent bkops level for
  *  device is known or not.
  * @scsi_block_reqs_cnt: reference counting for scsi block requests
+ * @crypto_capabilities: Content of crypto capabilities register (0x100)
+ * @crypto_cap_array: Array of crypto capabilities
+ * @crypto_cfg_register: Start of the crypto cfg array
+ * @ksm: the keyslot manager tied to this hba
  */
 struct ufs_hba {
 	void __iomem *mmio_base;
@@ -573,7 +631,9 @@ struct ufs_hba {
 	int nutmrs;
 	u32 ufs_version;
 	const struct ufs_hba_variant_ops *vops;
+	struct ufs_hba_variant_params *vps;
 	void *priv;
+	size_t sg_entry_size;
 	unsigned int irq;
 	bool is_irq_enabled;
 	enum ufs_ref_clk_freq dev_ref_clk_freq;
@@ -640,6 +700,36 @@ struct ufs_hba {
 	 * enabled via HCE register.
 	 */
 	#define UFSHCI_QUIRK_BROKEN_HCE				0x400
+
+	/*
+	 * This quirk needs to be enabled if the host controller reports
+	 * OCS FATAL ERROR with device error through sense data
+	 */
+	#define UFSHCD_QUIRK_BROKEN_OCS_FATAL_ERROR		0x1000
+
+	/*
+	 * This quirk needs to be enabled if the host controller supports inline
+	 * encryption, but it needs to initialize the crypto capabilities in a
+	 * nonstandard way and/or it needs to override blk_ksm_ll_ops.  If
+	 * enabled, the standard code won't initialize the blk_keyslot_manager;
+	 * ufs_hba_variant_ops::init() must do it instead.
+	 */
+	#define UFSHCD_QUIRK_CUSTOM_KEYSLOT_MANAGER		0x100000
+
+	/*
+	 * This quirk needs to be enabled if the host controller supports inline
+	 * encryption, but the CRYPTO_GENERAL_ENABLE bit is not implemented and
+	 * breaks the HCE sequence if used.
+	 */
+	#define UFSHCD_QUIRK_BROKEN_CRYPTO_ENABLE		0x200000
+
+	/*
+	 * This quirk needs to be enabled if the host controller requires that
+	 * the PRDT be cleared after each encrypted request because encryption
+	 * keys were stored in it.
+	 */
+	#define UFSHCD_QUIRK_KEYS_IN_PRDT			0x400000
+
 	unsigned int quirks;	/* Deviations from standard UFSHCI spec. */
 
 	/* Device deviations from standard UFS device spec. */
@@ -659,10 +749,9 @@ struct ufs_hba {
 	u32 intr_mask;
 	u16 ee_ctrl_mask;
 	bool is_powered;
-	bool is_init_prefetch;
-	struct ufs_init_prefetch init_prefetch_data;
 
 	/* Work Queues */
+	struct workqueue_struct *eh_wq;
 	struct work_struct eh_work;
 	struct work_struct eeh_work;
 
@@ -672,6 +761,8 @@ struct ufs_hba {
 	u32 saved_err;
 	u32 saved_uic_err;
 	struct ufs_stats ufs_stats;
+	bool force_reset;
+	bool force_pmc;
 	bool silence_err_logs;
 
 	/* Device management request data */
@@ -719,6 +810,23 @@ struct ufs_hba {
 	 * the performance of ongoing read/write operations.
 	 */
 #define UFSHCD_CAP_KEEP_AUTO_BKOPS_ENABLED_EXCEPT_SUSPEND (1 << 5)
+	/*
+	 * This capability allows host controller driver to automatically
+	 * enable runtime power management by itself instead of waiting
+	 * for userspace to control the power management.
+	 */
+#define UFSHCD_CAP_RPM_AUTOSUSPEND (1 << 6)
+	/*
+	 * This capability allows the host controller driver to turn-on
+	 * WriteBooster, if the underlying device supports it and is
+	 * provisioned to be used. This would increase the write performance.
+	 */
+#define UFSHCD_CAP_WB_EN (1 << 7)
+	/*
+	 * This capability allows the host controller driver to use the
+	 * inline crypto engine, if it is present
+	 */
+#define UFSHCD_CAP_CRYPTO (1 << 8)
 
 	struct devfreq *devfreq;
 	struct ufs_clk_scaling clk_scaling;
@@ -733,6 +841,22 @@ struct ufs_hba {
 
 	struct device		bsg_dev;
 	struct request_queue	*bsg_queue;
+
+	bool wb_buf_flush_enabled;
+	bool wb_enabled;
+	struct delayed_work rpm_dev_flush_recheck_work;
+
+#ifdef CONFIG_SCSI_UFS_CRYPTO
+	union ufs_crypto_capabilities crypto_capabilities;
+	union ufs_crypto_cap_entry *crypto_cap_array;
+	u32 crypto_cfg_register;
+	struct blk_keyslot_manager ksm;
+#endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /* Returns true if clocks can be gated. Otherwise false */
@@ -752,6 +876,10 @@ static inline bool ufshcd_can_autobkops_during_suspend(struct ufs_hba *hba)
 {
 	return hba->caps & UFSHCD_CAP_AUTO_BKOPS_SUSPEND;
 }
+static inline bool ufshcd_is_rpm_autosuspend_allowed(struct ufs_hba *hba)
+{
+	return hba->caps & UFSHCD_CAP_RPM_AUTOSUSPEND;
+}
 
 static inline bool ufshcd_is_intr_aggr_allowed(struct ufs_hba *hba)
 {
@@ -777,6 +905,11 @@ static inline bool ufshcd_is_auto_hibern8_enabled(struct ufs_hba *hba)
 	return FIELD_GET(UFSHCI_AHIBERN8_TIMER_MASK, hba->ahit) ? true : false;
 }
 
+static inline bool ufshcd_is_wb_allowed(struct ufs_hba *hba)
+{
+	return hba->caps & UFSHCD_CAP_WB_EN;
+}
+
 #define ufshcd_writel(hba, val, reg)	\
 	writel((val), (hba)->mmio_base + (reg))
 #define ufshcd_readl(hba, reg)	\
@@ -801,12 +934,19 @@ static inline void ufshcd_rmwl(struct ufs_hba *hba, u32 mask, u32 val, u32 reg)
 
 int ufshcd_alloc_host(struct device *, struct ufs_hba **);
 void ufshcd_dealloc_host(struct ufs_hba *);
+int ufshcd_hba_enable(struct ufs_hba *hba);
 int ufshcd_init(struct ufs_hba * , void __iomem * , unsigned int);
+int ufshcd_link_recovery(struct ufs_hba *hba);
+int ufshcd_make_hba_operational(struct ufs_hba *hba);
 void ufshcd_remove(struct ufs_hba *);
+int ufshcd_uic_hibern8_exit(struct ufs_hba *hba);
+void ufshcd_delay_us(unsigned long us, unsigned long tolerance);
 int ufshcd_wait_for_register(struct ufs_hba *hba, u32 reg, u32 mask,
 				u32 val, unsigned long interval_us,
 				unsigned long timeout_ms, bool can_sleep);
 void ufshcd_parse_dev_ref_clk_freq(struct ufs_hba *hba, struct clk *refclk);
+void ufshcd_update_reg_hist(struct ufs_err_reg_hist *reg_hist,
+			    u32 reg);
 
 static inline void check_upiu_size(void)
 {
@@ -840,6 +980,13 @@ static inline bool ufshcd_keep_autobkops_enabled_except_suspend(
 	return hba->caps & UFSHCD_CAP_KEEP_AUTO_BKOPS_ENABLED_EXCEPT_SUSPEND;
 }
 
+static inline u8 ufshcd_wb_get_query_index(struct ufs_hba *hba)
+{
+	if (hba->dev_info.b_wb_buffer_type == WB_BUF_MODE_LU_DEDICATED)
+		return hba->dev_info.wb_dedicated_lu;
+	return 0;
+}
+
 extern int ufshcd_runtime_suspend(struct ufs_hba *hba);
 extern int ufshcd_runtime_resume(struct ufs_hba *hba);
 extern int ufshcd_runtime_idle(struct ufs_hba *hba);
@@ -907,6 +1054,11 @@ static inline bool ufshcd_is_hs_mode(struct ufs_pa_layer_attr *pwr_info)
 		pwr_info->pwr_tx == FASTAUTO_MODE);
 }
 
+static inline int ufshcd_disable_host_tx_lcc(struct ufs_hba *hba)
+{
+	return ufshcd_dme_set(hba, UIC_ARG_MIB(PA_LOCAL_TX_LCC_ENABLE), 0);
+}
+
 /* Expose Query-Request API */
 int ufshcd_query_descriptor_retry(struct ufs_hba *hba,
 				  enum query_opcode opcode,
@@ -921,11 +1073,18 @@ int ufshcd_read_desc_param(struct ufs_hba *hba,
 			   u8 param_size);
 int ufshcd_query_attr(struct ufs_hba *hba, enum query_opcode opcode,
 		      enum attr_idn idn, u8 index, u8 selector, u32 *attr_val);
+int ufshcd_query_attr_retry(struct ufs_hba *hba,
+	enum query_opcode opcode, enum attr_idn idn, u8 index, u8 selector,
+	u32 *attr_val);
 int ufshcd_query_flag(struct ufs_hba *hba, enum query_opcode opcode,
-	enum flag_idn idn, bool *flag_res);
+	enum flag_idn idn, u8 index, bool *flag_res);
+int ufshcd_query_flag_retry(struct ufs_hba *hba,
+	enum query_opcode opcode, enum flag_idn idn, u8 index, bool *flag_res);
+int ufshcd_bkops_ctrl(struct ufs_hba *hba, enum bkops_status status);
 
 void ufshcd_auto_hibern8_enable(struct ufs_hba *hba);
-
+void ufshcd_auto_hibern8_update(struct ufs_hba *hba, u32 ahit);
+void ufshcd_fixup_dev_quirks(struct ufs_hba *hba, struct ufs_dev_fix *fixups);
 #define SD_ASCII_STD true
 #define SD_RAW false
 int ufshcd_read_string_desc(struct ufs_hba *hba, u8 desc_index,
@@ -1053,14 +1212,19 @@ static inline void ufshcd_vops_hibern8_notify(struct ufs_hba *hba,
 		return hba->vops->hibern8_notify(hba, cmd, status);
 }
 
-static inline int ufshcd_vops_apply_dev_quirks(struct ufs_hba *hba,
-					       struct ufs_dev_desc *card)
+static inline int ufshcd_vops_apply_dev_quirks(struct ufs_hba *hba)
 {
 	if (hba->vops && hba->vops->apply_dev_quirks)
-		return hba->vops->apply_dev_quirks(hba, card);
+		return hba->vops->apply_dev_quirks(hba);
 	return 0;
 }
 
+static inline void ufshcd_vops_fixup_dev_quirks(struct ufs_hba *hba)
+{
+	if (hba->vops && hba->vops->fixup_dev_quirks)
+		hba->vops->fixup_dev_quirks(hba);
+}
+
 static inline int ufshcd_vops_suspend(struct ufs_hba *hba, enum ufs_pm_op op)
 {
 	if (hba->vops && hba->vops->suspend)
@@ -1085,8 +1249,44 @@ static inline void ufshcd_vops_dbg_register_dump(struct ufs_hba *hba)
 
 static inline void ufshcd_vops_device_reset(struct ufs_hba *hba)
 {
-	if (hba->vops && hba->vops->device_reset)
+	if (hba->vops && hba->vops->device_reset) {
 		hba->vops->device_reset(hba);
+		ufshcd_set_ufs_dev_active(hba);
+		ufshcd_update_reg_hist(&hba->ufs_stats.dev_reset, 0);
+	}
+}
+
+static inline void ufshcd_vops_config_scaling_param(struct ufs_hba *hba,
+						    struct devfreq_dev_profile
+						    *profile, void *data)
+{
+	if (hba->vops && hba->vops->config_scaling_param)
+		hba->vops->config_scaling_param(hba, profile, data);
+}
+
+static inline int ufshcd_vops_fill_prdt(struct ufs_hba *hba,
+					struct ufshcd_lrb *lrbp,
+					unsigned int segments)
+{
+	if (hba->vops && hba->vops->fill_prdt)
+		return hba->vops->fill_prdt(hba, lrbp, segments);
+
+	return 0;
+}
+
+static inline int ufshcd_vops_prepare_command(struct ufs_hba *hba,
+		struct request *rq, struct ufshcd_lrb *lrbp)
+{
+	if (hba->vops && hba->vops->prepare_command)
+		return hba->vops->prepare_command(hba, rq, lrbp);
+	return 0;
+}
+
+static inline int ufshcd_vops_update_sysfs(struct ufs_hba *hba)
+{
+	if (hba->vops && hba->vops->update_sysfs)
+		return hba->vops->update_sysfs(hba);
+	return 0;
 }
 
 extern struct ufs_pm_lvl_states ufs_pm_lvl_states[];
@@ -1108,5 +1308,6 @@ static inline u8 ufshcd_scsi_to_upiu_lun(unsigned int scsi_lun)
 
 int ufshcd_dump_regs(struct ufs_hba *hba, size_t offset, size_t len,
 		     const char *prefix);
-
+int ufshcd_uic_hibern8_enter(struct ufs_hba *hba);
+int ufshcd_uic_hibern8_exit(struct ufs_hba *hba);
 #endif /* End of Header */
diff --git a/drivers/scsi/ufs/ufshci.h b/drivers/scsi/ufs/ufshci.h
index dbb75cd..a8adfcc 100644
--- a/drivers/scsi/ufs/ufshci.h
+++ b/drivers/scsi/ufs/ufshci.h
@@ -90,6 +90,7 @@ enum {
 	MASK_64_ADDRESSING_SUPPORT		= 0x01000000,
 	MASK_OUT_OF_ORDER_DATA_DELIVERY_SUPPORT	= 0x02000000,
 	MASK_UIC_DME_TEST_MODE_SUPPORT		= 0x04000000,
+	MASK_CRYPTO_SUPPORT			= 0x10000000,
 };
 
 #define UFS_MASK(mask, offset)		((mask) << (offset))
@@ -143,6 +144,7 @@ enum {
 #define DEVICE_FATAL_ERROR			0x800
 #define CONTROLLER_FATAL_ERROR			0x10000
 #define SYSTEM_BUS_FATAL_ERROR			0x20000
+#define CRYPTO_ENGINE_FATAL_ERROR		0x40000
 
 #define UFSHCD_UIC_HIBERN8_MASK	(UIC_HIBERNATE_ENTER |\
 				UIC_HIBERNATE_EXIT)
@@ -155,11 +157,13 @@ enum {
 #define UFSHCD_ERROR_MASK	(UIC_ERROR |\
 				DEVICE_FATAL_ERROR |\
 				CONTROLLER_FATAL_ERROR |\
-				SYSTEM_BUS_FATAL_ERROR)
+				SYSTEM_BUS_FATAL_ERROR |\
+				CRYPTO_ENGINE_FATAL_ERROR)
 
 #define INT_FATAL_ERRORS	(DEVICE_FATAL_ERROR |\
 				CONTROLLER_FATAL_ERROR |\
-				SYSTEM_BUS_FATAL_ERROR)
+				SYSTEM_BUS_FATAL_ERROR |\
+				CRYPTO_ENGINE_FATAL_ERROR)
 
 /* HCS - Host Controller Status 30h */
 #define DEVICE_PRESENT				0x1
@@ -192,10 +196,11 @@ enum {
 #define UIC_PHY_ADAPTER_LAYER_ERROR			0x80000000
 #define UIC_PHY_ADAPTER_LAYER_ERROR_CODE_MASK		0x1F
 #define UIC_PHY_ADAPTER_LAYER_LANE_ERR_MASK		0xF
+#define UIC_PHY_ADAPTER_LAYER_GENERIC_ERROR		0x10
 
 /* UECDL - Host UIC Error Code Data Link Layer 3Ch */
 #define UIC_DATA_LINK_LAYER_ERROR		0x80000000
-#define UIC_DATA_LINK_LAYER_ERROR_CODE_MASK	0x7FFF
+#define UIC_DATA_LINK_LAYER_ERROR_CODE_MASK	0xFFFF
 #define UIC_DATA_LINK_LAYER_ERROR_TCX_REP_TIMER_EXP	0x2
 #define UIC_DATA_LINK_LAYER_ERROR_AFCX_REQ_TIMER_EXP	0x4
 #define UIC_DATA_LINK_LAYER_ERROR_FCX_PRO_TIMER_EXP	0x8
@@ -318,6 +323,61 @@ enum {
 	INTERRUPT_MASK_ALL_VER_21	= 0x71FFF,
 };
 
+/* CCAP - Crypto Capability 100h */
+union ufs_crypto_capabilities {
+	__le32 reg_val;
+	struct {
+		u8 num_crypto_cap;
+		u8 config_count;
+		u8 reserved;
+		u8 config_array_ptr;
+	};
+};
+
+enum ufs_crypto_key_size {
+	UFS_CRYPTO_KEY_SIZE_INVALID	= 0x0,
+	UFS_CRYPTO_KEY_SIZE_128		= 0x1,
+	UFS_CRYPTO_KEY_SIZE_192		= 0x2,
+	UFS_CRYPTO_KEY_SIZE_256		= 0x3,
+	UFS_CRYPTO_KEY_SIZE_512		= 0x4,
+};
+
+enum ufs_crypto_alg {
+	UFS_CRYPTO_ALG_AES_XTS			= 0x0,
+	UFS_CRYPTO_ALG_BITLOCKER_AES_CBC	= 0x1,
+	UFS_CRYPTO_ALG_AES_ECB			= 0x2,
+	UFS_CRYPTO_ALG_ESSIV_AES_CBC		= 0x3,
+};
+
+/* x-CRYPTOCAP - Crypto Capability X */
+union ufs_crypto_cap_entry {
+	__le32 reg_val;
+	struct {
+		u8 algorithm_id;
+		u8 sdus_mask; /* Supported data unit size mask */
+		u8 key_size;
+		u8 reserved;
+	};
+};
+
+#define UFS_CRYPTO_CONFIGURATION_ENABLE (1 << 7)
+#define UFS_CRYPTO_KEY_MAX_SIZE 64
+/* x-CRYPTOCFG - Crypto Configuration X */
+union ufs_crypto_cfg_entry {
+	__le32 reg_val[32];
+	struct {
+		u8 crypto_key[UFS_CRYPTO_KEY_MAX_SIZE];
+		u8 data_unit_size;
+		u8 crypto_cap_idx;
+		u8 reserved_1;
+		u8 config_enable;
+		u8 reserved_multi_host;
+		u8 reserved_2;
+		u8 vsb[2];
+		u8 reserved_3[56];
+	};
+};
+
 /*
  * Request Descriptor Definitions
  */
@@ -339,6 +399,7 @@ enum {
 	UTP_NATIVE_UFS_COMMAND		= 0x10000000,
 	UTP_DEVICE_MANAGEMENT_FUNCTION	= 0x20000000,
 	UTP_REQ_DESC_INT_CMD		= 0x01000000,
+	UTP_REQ_DESC_CRYPTO_ENABLE_CMD	= 0x00800000,
 };
 
 /* UTP Transfer Request Data Direction (DD) */
@@ -358,6 +419,9 @@ enum {
 	OCS_PEER_COMM_FAILURE		= 0x5,
 	OCS_ABORTED			= 0x6,
 	OCS_FATAL_ERROR			= 0x7,
+	OCS_DEVICE_FATAL_ERROR		= 0x8,
+	OCS_INVALID_CRYPTO_CONFIG	= 0x9,
+	OCS_GENERAL_CRYPTO_ERROR	= 0xA,
 	OCS_INVALID_COMMAND_STATUS	= 0x0F,
 	MASK_OCS			= 0x0F,
 };
@@ -379,20 +443,28 @@ struct ufshcd_sg_entry {
 	__le32    upper_addr;
 	__le32    reserved;
 	__le32    size;
+	/*
+	 * followed by variant-specific fields if
+	 * hba->sg_entry_size != sizeof(struct ufshcd_sg_entry)
+	 */
 };
 
 /**
  * struct utp_transfer_cmd_desc - UFS Command Descriptor structure
  * @command_upiu: Command UPIU Frame address
  * @response_upiu: Response UPIU Frame address
- * @prd_table: Physical Region Descriptor
+ * @prd_table: Physical Region Descriptor: an array of SG_ALL struct
+ *	ufshcd_sg_entry's.  Variant-specific fields may be present after each.
  */
 struct utp_transfer_cmd_desc {
 	u8 command_upiu[ALIGNED_UPIU_SIZE];
 	u8 response_upiu[ALIGNED_UPIU_SIZE];
-	struct ufshcd_sg_entry    prd_table[SG_ALL];
+	u8 prd_table[];
 };
 
+#define sizeof_utp_transfer_cmd_desc(hba)	\
+	(sizeof(struct utp_transfer_cmd_desc) + SG_ALL * (hba)->sg_entry_size)
+
 /**
  * struct request_desc_header - Descriptor Header common to both UTRD and UTMRD
  * @dword0: Descriptor Header DW0
diff --git a/drivers/scsi/ufs/unipro.h b/drivers/scsi/ufs/unipro.h
index f539f87..851cebc 100644
--- a/drivers/scsi/ufs/unipro.h
+++ b/drivers/scsi/ufs/unipro.h
@@ -146,6 +146,12 @@
 #define PA_SLEEPNOCONFIGTIME	0x15A2
 #define PA_STALLNOCONFIGTIME	0x15A3
 #define PA_SAVECONFIGTIME	0x15A4
+#define PA_TXHSADAPTTYPE       0x15D4
+
+/* Adpat type for PA_TXHSADAPTTYPE attribute */
+#define PA_REFRESH_ADAPT       0x00
+#define PA_INITIAL_ADAPT       0x01
+#define PA_NO_ADAPT            0x03
 
 #define PA_TACTIVATE_TIME_UNIT_US	10
 #define PA_HIBERN8_TIME_UNIT_US		100
@@ -161,6 +167,17 @@
 /* PHY Adapter Protocol Constants */
 #define PA_MAXDATALANES	4
 
+#define DL_FC0ProtectionTimeOutVal_Default	8191
+#define DL_TC0ReplayTimeOutVal_Default		65535
+#define DL_AFC0ReqTimeOutVal_Default		32767
+#define DL_FC1ProtectionTimeOutVal_Default	8191
+#define DL_TC1ReplayTimeOutVal_Default		65535
+#define DL_AFC1ReqTimeOutVal_Default		32767
+
+#define DME_LocalFC0ProtectionTimeOutVal	0xD041
+#define DME_LocalTC0ReplayTimeOutVal		0xD042
+#define DME_LocalAFC0ReqTimeOutVal		0xD043
+
 /* PA power modes */
 enum {
 	FAST_MODE	= 1,
@@ -170,6 +187,9 @@ enum {
 	UNCHANGED	= 7,
 };
 
+#define PWRMODE_MASK		0xF
+#define PWRMODE_RX_OFFSET	4
+
 /* PA TX/RX Frequency Series */
 enum {
 	PA_HS_MODE_A	= 1,
@@ -192,14 +212,17 @@ enum ufs_hs_gear_tag {
 	UFS_HS_G1,		/* HS Gear 1 (default for reset) */
 	UFS_HS_G2,		/* HS Gear 2 */
 	UFS_HS_G3,		/* HS Gear 3 */
+	UFS_HS_G4,		/* HS Gear 4 */
 };
 
 enum ufs_unipro_ver {
 	UFS_UNIPRO_VER_RESERVED = 0,
 	UFS_UNIPRO_VER_1_40 = 1, /* UniPro version 1.40 */
 	UFS_UNIPRO_VER_1_41 = 2, /* UniPro version 1.41 */
-	UFS_UNIPRO_VER_1_6 = 3,  /* UniPro version 1.6 */
-	UFS_UNIPRO_VER_MAX = 4,  /* UniPro unsupported version */
+	UFS_UNIPRO_VER_1_6  = 3, /* UniPro version 1.6 */
+	UFS_UNIPRO_VER_1_61 = 4, /* UniPro version 1.61 */
+	UFS_UNIPRO_VER_1_8  = 5, /* UniPro version 1.8 */
+	UFS_UNIPRO_VER_MAX  = 6, /* UniPro unsupported version */
 	/* UniPro version field mask in PA_LOCALVERINFO */
 	UFS_UNIPRO_VER_MASK = 0xF,
 };
diff --git a/drivers/slimbus/core.c b/drivers/slimbus/core.c
index 130c798..1d2bc18 100644
--- a/drivers/slimbus/core.c
+++ b/drivers/slimbus/core.c
@@ -162,9 +162,8 @@ static int slim_add_device(struct slim_controller *ctrl,
 	sbdev->ctrl = ctrl;
 	INIT_LIST_HEAD(&sbdev->stream_list);
 	spin_lock_init(&sbdev->stream_list_lock);
-
-	if (node)
-		sbdev->dev.of_node = of_node_get(node);
+	sbdev->dev.of_node = of_node_get(node);
+	sbdev->dev.fwnode = of_fwnode_handle(node);
 
 	dev_set_name(&sbdev->dev, "%x:%x:%x:%x",
 				  sbdev->e_addr.manf_id,
diff --git a/drivers/soc/qcom/Kconfig b/drivers/soc/qcom/Kconfig
index 661e47a..68e18c2 100644
--- a/drivers/soc/qcom/Kconfig
+++ b/drivers/soc/qcom/Kconfig
@@ -17,7 +17,7 @@
 	  Subsystem (AOSS) using Qualcomm Messaging Protocol (QMP).
 
 config QCOM_COMMAND_DB
-	bool "Qualcomm Command DB"
+	tristate "Qualcomm Command DB"
 	depends on ARCH_QCOM || COMPILE_TEST
 	depends on OF_RESERVED_MEM
 	help
@@ -102,7 +102,7 @@
 	  Say y here if you intend to boot the modem remoteproc.
 
 config QCOM_RPMH
-	bool "Qualcomm RPM-Hardened (RPMH) Communication"
+	tristate "Qualcomm RPM-Hardened (RPMH) Communication"
 	depends on ARCH_QCOM && ARM64 || COMPILE_TEST
 	help
 	  Support for communication with the hardened-RPM blocks in
@@ -112,7 +112,7 @@
 	  help apply the aggregated state on the resource.
 
 config QCOM_RPMHPD
-	bool "Qualcomm RPMh Power domain driver"
+	tristate "Qualcomm RPMh Power domain driver"
 	depends on QCOM_RPMH && QCOM_COMMAND_DB
 	help
 	  QCOM RPMh Power domain driver to support power-domains with
@@ -121,8 +121,8 @@
 	  for the voltage rail.
 
 config QCOM_RPMPD
-	bool "Qualcomm RPM Power domain driver"
-	depends on QCOM_SMD_RPM=y
+	tristate "Qualcomm RPM Power domain driver"
+	depends on QCOM_SMD_RPM
 	help
 	  QCOM RPM Power domain driver to support power-domains with
 	  performance states. The driver communicates a performance state
diff --git a/drivers/soc/qcom/cmd-db.c b/drivers/soc/qcom/cmd-db.c
index f6c3d17..f79a81a 100644
--- a/drivers/soc/qcom/cmd-db.c
+++ b/drivers/soc/qcom/cmd-db.c
@@ -1,7 +1,8 @@
 /* SPDX-License-Identifier: GPL-2.0 */
-/* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. */
+/* Copyright (c) 2016-2018, 2020, The Linux Foundation. All rights reserved. */
 
 #include <linux/kernel.h>
+#include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/of_platform.h>
@@ -266,12 +267,14 @@ static const struct of_device_id cmd_db_match_table[] = {
 	{ .compatible = "qcom,cmd-db" },
 	{ },
 };
+MODULE_DEVICE_TABLE(of, cmd_db_match_table);
 
 static struct platform_driver cmd_db_dev_driver = {
 	.probe  = cmd_db_dev_probe,
 	.driver = {
 		   .name = "cmd-db",
 		   .of_match_table = cmd_db_match_table,
+		   .suppress_bind_attrs = true,
 	},
 };
 
@@ -280,3 +283,6 @@ static int __init cmd_db_device_init(void)
 	return platform_driver_register(&cmd_db_dev_driver);
 }
 arch_initcall(cmd_db_device_init);
+
+MODULE_DESCRIPTION("Qualcomm Technologies, Inc. Command DB Driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/soc/qcom/qmi_interface.c b/drivers/soc/qcom/qmi_interface.c
index f9e309f..1a03eaa 100644
--- a/drivers/soc/qcom/qmi_interface.c
+++ b/drivers/soc/qcom/qmi_interface.c
@@ -655,8 +655,12 @@ int qmi_handle_init(struct qmi_handle *qmi, size_t recv_buf_size,
 
 	qmi->sock = qmi_sock_create(qmi, &qmi->sq);
 	if (IS_ERR(qmi->sock)) {
-		pr_err("failed to create QMI socket\n");
-		ret = PTR_ERR(qmi->sock);
+		if (PTR_ERR(qmi->sock) == -EAFNOSUPPORT) {
+			ret = -EPROBE_DEFER;
+		} else {
+			pr_err("failed to create QMI socket\n");
+			ret = PTR_ERR(qmi->sock);
+		}
 		goto err_destroy_wq;
 	}
 
diff --git a/drivers/soc/qcom/rpmh-rsc.c b/drivers/soc/qcom/rpmh-rsc.c
index 8924fcd..f3409fe6 100644
--- a/drivers/soc/qcom/rpmh-rsc.c
+++ b/drivers/soc/qcom/rpmh-rsc.c
@@ -11,6 +11,7 @@
 #include <linux/io.h>
 #include <linux/kernel.h>
 #include <linux/list.h>
+#include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_irq.h>
 #include <linux/of_platform.h>
@@ -709,6 +710,8 @@ static const struct of_device_id rpmh_drv_match[] = {
 	{ .compatible = "qcom,rpmh-rsc", },
 	{ }
 };
+MODULE_DEVICE_TABLE(of, rpmh_drv_match);
+
 
 static struct platform_driver rpmh_driver = {
 	.probe = rpmh_rsc_probe,
@@ -724,3 +727,6 @@ static int __init rpmh_driver_init(void)
 	return platform_driver_register(&rpmh_driver);
 }
 arch_initcall(rpmh_driver_init);
+
+MODULE_DESCRIPTION("Qualcomm Technologies, Inc. RPMh Driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/soc/qcom/rpmhpd.c b/drivers/soc/qcom/rpmhpd.c
index 51850cc..a858a17 100644
--- a/drivers/soc/qcom/rpmhpd.c
+++ b/drivers/soc/qcom/rpmhpd.c
@@ -4,6 +4,7 @@
 #include <linux/err.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
+#include <linux/module.h>
 #include <linux/mutex.h>
 #include <linux/pm_domain.h>
 #include <linux/slab.h>
@@ -135,6 +136,7 @@ static const struct of_device_id rpmhpd_match_table[] = {
 	{ .compatible = "qcom,sdm845-rpmhpd", .data = &sdm845_desc },
 	{ }
 };
+MODULE_DEVICE_TABLE(of, rpmhpd_match_table);
 
 static int rpmhpd_send_corner(struct rpmhpd *pd, int state,
 			      unsigned int corner, bool sync)
@@ -406,3 +408,6 @@ static int __init rpmhpd_init(void)
 	return platform_driver_register(&rpmhpd_driver);
 }
 core_initcall(rpmhpd_init);
+
+MODULE_DESCRIPTION("Qualcomm Technologies, Inc. RPMh Power Domain Driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/soc/qcom/rpmpd.c b/drivers/soc/qcom/rpmpd.c
index 3c1a55c..32258d8 100644
--- a/drivers/soc/qcom/rpmpd.c
+++ b/drivers/soc/qcom/rpmpd.c
@@ -5,6 +5,7 @@
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/mutex.h>
+#include <linux/module.h>
 #include <linux/pm_domain.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
@@ -203,6 +204,7 @@ static const struct of_device_id rpmpd_match_table[] = {
 	{ .compatible = "qcom,qcs404-rpmpd", .data = &qcs404_desc },
 	{ }
 };
+MODULE_DEVICE_TABLE(of, rpmpd_match_table);
 
 static int rpmpd_send_enable(struct rpmpd *pd, bool enable)
 {
@@ -399,3 +401,7 @@ static int __init rpmpd_init(void)
 	return platform_driver_register(&rpmpd_driver);
 }
 core_initcall(rpmpd_init);
+
+MODULE_DESCRIPTION("Qualcomm Technologies, Inc. RPM Power Domain Driver");
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS("platform:qcom-rpmpd");
diff --git a/drivers/soc/tegra/Kconfig b/drivers/soc/tegra/Kconfig
index 25df4406..ce3f127 100644
--- a/drivers/soc/tegra/Kconfig
+++ b/drivers/soc/tegra/Kconfig
@@ -78,6 +78,7 @@
 	select SOC_TEGRA_FLOWCTRL
 	select SOC_TEGRA_PMC
 	select TEGRA_TIMER
+	depends on !LTO_CLANG
 	help
 	  Enable support for the NVIDIA Tegra210 SoC. Also known as Tegra X1,
 	  the Tegra210 has four Cortex-A57 cores paired with four Cortex-A53
diff --git a/drivers/spi/spi-sprd-adi.c b/drivers/spi/spi-sprd-adi.c
index 09f9835..8e84e25 100644
--- a/drivers/spi/spi-sprd-adi.c
+++ b/drivers/spi/spi-sprd-adi.c
@@ -77,6 +77,7 @@
 
 /* Bits definitions for register REG_WDG_CTRL */
 #define BIT_WDG_RUN			BIT(1)
+#define BIT_WDG_NEW			BIT(2)
 #define BIT_WDG_RST			BIT(3)
 
 /* Registers definitions for PMIC */
@@ -383,6 +384,10 @@ static int sprd_adi_restart_handler(struct notifier_block *this,
 	/* Unlock the watchdog */
 	sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOCK, WDG_UNLOCK_KEY);
 
+	sprd_adi_read(sadi, sadi->slave_pbase + REG_WDG_CTRL, &val);
+	val |= BIT_WDG_NEW;
+	sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_CTRL, val);
+
 	/* Load the watchdog timeout value, 50ms is always enough. */
 	sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOAD_HIGH, 0);
 	sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOAD_LOW,
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index e1205d7..3853e99 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -3173,7 +3173,29 @@ int spi_setup(struct spi_device *spi)
 	if (spi->controller->setup)
 		status = spi->controller->setup(spi);
 
-	spi_set_cs(spi, false);
+	if (spi->controller->auto_runtime_pm && spi->controller->set_cs) {
+		status = pm_runtime_get_sync(spi->controller->dev.parent);
+		if (status < 0) {
+			pm_runtime_put_noidle(spi->controller->dev.parent);
+			dev_err(&spi->controller->dev, "Failed to power device: %d\n",
+				status);
+			return status;
+		}
+
+		/*
+		 * We do not want to return positive value from pm_runtime_get,
+		 * there are many instances of devices calling spi_setup() and
+		 * checking for a non-zero return value instead of a negative
+		 * return value.
+		 */
+		status = 0;
+
+		spi_set_cs(spi, false);
+		pm_runtime_mark_last_busy(spi->controller->dev.parent);
+		pm_runtime_put_autosuspend(spi->controller->dev.parent);
+	} else {
+		spi_set_cs(spi, false);
+	}
 
 	if (spi->rt && !spi->controller->rt) {
 		spi->controller->rt = true;
diff --git a/drivers/staging/android/ion/Kconfig b/drivers/staging/android/ion/Kconfig
index 989fe84..7b7da97 100644
--- a/drivers/staging/android/ion/Kconfig
+++ b/drivers/staging/android/ion/Kconfig
@@ -11,17 +11,4 @@
 	  If you're not using Android its probably safe to
 	  say N here.
 
-config ION_SYSTEM_HEAP
-	bool "Ion system heap"
-	depends on ION
-	help
-	  Choose this option to enable the Ion system heap. The system heap
-	  is backed by pages from the buddy allocator. If in doubt, say Y.
-
-config ION_CMA_HEAP
-	bool "Ion CMA heap support"
-	depends on ION && DMA_CMA
-	help
-	  Choose this option to enable CMA heaps with Ion. This heap is backed
-	  by the Contiguous Memory Allocator (CMA). If your system has these
-	  regions, you should say Y here.
+source "drivers/staging/android/ion/heaps/Kconfig"
diff --git a/drivers/staging/android/ion/Makefile b/drivers/staging/android/ion/Makefile
index 5f4487b..7f8fd0f 100644
--- a/drivers/staging/android/ion/Makefile
+++ b/drivers/staging/android/ion/Makefile
@@ -1,4 +1,4 @@
 # SPDX-License-Identifier: GPL-2.0
-obj-$(CONFIG_ION) += ion.o ion_heap.o
-obj-$(CONFIG_ION_SYSTEM_HEAP) += ion_system_heap.o ion_page_pool.o
-obj-$(CONFIG_ION_CMA_HEAP) += ion_cma_heap.o
+obj-$(CONFIG_ION)	+= ion.o ion_buffer.o ion_dma_buf.o ion_heap.o
+CFLAGS_ion_buffer.o 	= -I$(src)
+obj-y			+= heaps/
diff --git a/drivers/staging/android/ion/heaps/Kconfig b/drivers/staging/android/ion/heaps/Kconfig
new file mode 100644
index 0000000..5034c45
--- /dev/null
+++ b/drivers/staging/android/ion/heaps/Kconfig
@@ -0,0 +1,15 @@
+# SPDX-License-Identifier: GPL-2.0
+config ION_SYSTEM_HEAP
+	tristate "Ion system heap"
+	depends on ION
+	help
+	  Choose this option to enable the Ion system heap. The system heap
+	  is backed by pages from the buddy allocator. If in doubt, say Y.
+
+config ION_CMA_HEAP
+	tristate "Ion CMA heap support"
+	depends on ION && DMA_CMA
+	help
+	  Choose this option to enable CMA heaps with Ion. This heap is backed
+	  by the Contiguous Memory Allocator (CMA). If your system has these
+	  regions, you should say Y here.
diff --git a/drivers/staging/android/ion/heaps/Makefile b/drivers/staging/android/ion/heaps/Makefile
new file mode 100644
index 0000000..82e36e8
--- /dev/null
+++ b/drivers/staging/android/ion/heaps/Makefile
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0
+obj-$(CONFIG_ION_SYSTEM_HEAP) += ion_sys_heap.o
+ion_sys_heap-y := ion_system_heap.o ion_page_pool.o
+
+obj-$(CONFIG_ION_CMA_HEAP) += ion_cma_heap.o
diff --git a/drivers/staging/android/ion/heaps/ion_cma_heap.c b/drivers/staging/android/ion/heaps/ion_cma_heap.c
new file mode 100644
index 0000000..6ba7fd8
--- /dev/null
+++ b/drivers/staging/android/ion/heaps/ion_cma_heap.c
@@ -0,0 +1,151 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * ION Memory Allocator CMA heap exporter
+ *
+ * Copyright (C) Linaro 2012
+ * Author: <benjamin.gaignard@linaro.org> for ST-Ericsson.
+ */
+
+#include <linux/device.h>
+#include <linux/ion.h>
+#include <linux/slab.h>
+#include <linux/errno.h>
+#include <linux/err.h>
+#include <linux/cma.h>
+#include <linux/scatterlist.h>
+#include <linux/highmem.h>
+
+struct ion_cma_heap {
+	struct ion_heap heap;
+	struct cma *cma;
+} cma_heaps[MAX_CMA_AREAS];
+
+#define to_cma_heap(x) container_of(x, struct ion_cma_heap, heap)
+
+/* ION CMA heap operations functions */
+static int ion_cma_allocate(struct ion_heap *heap, struct ion_buffer *buffer,
+			    unsigned long len,
+			    unsigned long flags)
+{
+	struct ion_cma_heap *cma_heap = to_cma_heap(heap);
+	struct sg_table *table;
+	struct page *pages;
+	unsigned long size = PAGE_ALIGN(len);
+	unsigned long nr_pages = size >> PAGE_SHIFT;
+	unsigned long align = get_order(size);
+	int ret;
+
+	if (align > CONFIG_CMA_ALIGNMENT)
+		align = CONFIG_CMA_ALIGNMENT;
+
+	pages = cma_alloc(cma_heap->cma, nr_pages, align, false);
+	if (!pages)
+		return -ENOMEM;
+
+	if (PageHighMem(pages)) {
+		unsigned long nr_clear_pages = nr_pages;
+		struct page *page = pages;
+
+		while (nr_clear_pages > 0) {
+			void *vaddr = kmap_atomic(page);
+
+			memset(vaddr, 0, PAGE_SIZE);
+			kunmap_atomic(vaddr);
+			page++;
+			nr_clear_pages--;
+		}
+	} else {
+		memset(page_address(pages), 0, size);
+	}
+
+	table = kmalloc(sizeof(*table), GFP_KERNEL);
+	if (!table)
+		goto err;
+
+	ret = sg_alloc_table(table, 1, GFP_KERNEL);
+	if (ret)
+		goto free_mem;
+
+	sg_set_page(table->sgl, pages, size, 0);
+
+	buffer->priv_virt = pages;
+	buffer->sg_table = table;
+
+	ion_buffer_prep_noncached(buffer);
+
+	return 0;
+
+free_mem:
+	kfree(table);
+err:
+	cma_release(cma_heap->cma, pages, nr_pages);
+	return -ENOMEM;
+}
+
+static void ion_cma_free(struct ion_buffer *buffer)
+{
+	struct ion_cma_heap *cma_heap = to_cma_heap(buffer->heap);
+	struct page *pages = buffer->priv_virt;
+	unsigned long nr_pages = PAGE_ALIGN(buffer->size) >> PAGE_SHIFT;
+
+	/* release memory */
+	cma_release(cma_heap->cma, pages, nr_pages);
+	/* release sg table */
+	sg_free_table(buffer->sg_table);
+	kfree(buffer->sg_table);
+}
+
+static struct ion_heap_ops ion_cma_ops = {
+	.allocate = ion_cma_allocate,
+	.free = ion_cma_free,
+};
+
+static int __ion_add_cma_heap(struct cma *cma, void *data)
+{
+	int *cma_nr = data;
+	struct ion_cma_heap *cma_heap;
+	int ret;
+
+	if (*cma_nr >= MAX_CMA_AREAS)
+		return -EINVAL;
+
+	cma_heap = &cma_heaps[*cma_nr];
+	cma_heap->heap.ops = &ion_cma_ops;
+	cma_heap->heap.type = ION_HEAP_TYPE_DMA;
+	cma_heap->heap.name = cma_get_name(cma);
+
+	ret = ion_device_add_heap(&cma_heap->heap);
+	if (ret)
+		goto out;
+
+	cma_heap->cma = cma;
+	*cma_nr += 1;
+out:
+	return 0;
+}
+
+static int __init ion_cma_heap_init(void)
+{
+	int ret;
+	int nr = 0;
+
+	ret = cma_for_each_area(__ion_add_cma_heap, &nr);
+	if (ret) {
+		for (nr = 0; nr < MAX_CMA_AREAS && cma_heaps[nr].cma; nr++)
+			ion_device_remove_heap(&cma_heaps[nr].heap);
+	}
+
+	return ret;
+}
+
+static void __exit ion_cma_heap_exit(void)
+{
+	int nr;
+
+	for (nr = 0; nr < MAX_CMA_AREAS && cma_heaps[nr].cma; nr++)
+		ion_device_remove_heap(&cma_heaps[nr].heap);
+}
+
+module_init(ion_cma_heap_init);
+module_exit(ion_cma_heap_exit);
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/staging/android/ion/heaps/ion_page_pool.c b/drivers/staging/android/ion/heaps/ion_page_pool.c
new file mode 100644
index 0000000..77c5b79
--- /dev/null
+++ b/drivers/staging/android/ion/heaps/ion_page_pool.c
@@ -0,0 +1,172 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * ION Memory Allocator page pool helpers
+ *
+ * Copyright (C) 2011 Google, Inc.
+ */
+
+#include <linux/list.h>
+#include <linux/slab.h>
+#include <linux/swap.h>
+#include <linux/sched/signal.h>
+
+#include "ion_page_pool.h"
+
+static inline struct page *ion_page_pool_alloc_pages(struct ion_page_pool *pool)
+{
+	if (fatal_signal_pending(current))
+		return NULL;
+	return alloc_pages(pool->gfp_mask, pool->order);
+}
+
+static void ion_page_pool_free_pages(struct ion_page_pool *pool,
+				     struct page *page)
+{
+	__free_pages(page, pool->order);
+}
+
+static void ion_page_pool_add(struct ion_page_pool *pool, struct page *page)
+{
+	mutex_lock(&pool->mutex);
+	if (PageHighMem(page)) {
+		list_add_tail(&page->lru, &pool->high_items);
+		pool->high_count++;
+	} else {
+		list_add_tail(&page->lru, &pool->low_items);
+		pool->low_count++;
+	}
+
+	mod_node_page_state(page_pgdat(page), NR_KERNEL_MISC_RECLAIMABLE,
+							1 << pool->order);
+	mutex_unlock(&pool->mutex);
+}
+
+static struct page *ion_page_pool_remove(struct ion_page_pool *pool, bool high)
+{
+	struct page *page;
+
+	if (high) {
+		BUG_ON(!pool->high_count);
+		page = list_first_entry(&pool->high_items, struct page, lru);
+		pool->high_count--;
+	} else {
+		BUG_ON(!pool->low_count);
+		page = list_first_entry(&pool->low_items, struct page, lru);
+		pool->low_count--;
+	}
+
+	list_del(&page->lru);
+	mod_node_page_state(page_pgdat(page), NR_KERNEL_MISC_RECLAIMABLE,
+							-(1 << pool->order));
+	return page;
+}
+
+struct page *ion_page_pool_alloc(struct ion_page_pool *pool)
+{
+	struct page *page = NULL;
+
+	BUG_ON(!pool);
+
+	mutex_lock(&pool->mutex);
+	if (pool->high_count)
+		page = ion_page_pool_remove(pool, true);
+	else if (pool->low_count)
+		page = ion_page_pool_remove(pool, false);
+	mutex_unlock(&pool->mutex);
+
+	if (!page)
+		page = ion_page_pool_alloc_pages(pool);
+
+	return page;
+}
+EXPORT_SYMBOL_GPL(ion_page_pool_alloc);
+
+void ion_page_pool_free(struct ion_page_pool *pool, struct page *page)
+{
+	BUG_ON(pool->order != compound_order(page));
+
+	ion_page_pool_add(pool, page);
+}
+EXPORT_SYMBOL_GPL(ion_page_pool_free);
+
+static int ion_page_pool_total(struct ion_page_pool *pool, bool high)
+{
+	int count = pool->low_count;
+
+	if (high)
+		count += pool->high_count;
+
+	return count << pool->order;
+}
+
+int ion_page_pool_nr_pages(struct ion_page_pool *pool)
+{
+	int nr_total_pages;
+
+	mutex_lock(&pool->mutex);
+	nr_total_pages = ion_page_pool_total(pool, true);
+	mutex_unlock(&pool->mutex);
+
+	return nr_total_pages;
+}
+EXPORT_SYMBOL_GPL(ion_page_pool_nr_pages);
+
+int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask,
+			 int nr_to_scan)
+{
+	int freed = 0;
+	bool high;
+
+	if (current_is_kswapd())
+		high = true;
+	else
+		high = !!(gfp_mask & __GFP_HIGHMEM);
+
+	if (nr_to_scan == 0)
+		return ion_page_pool_total(pool, high);
+
+	while (freed < nr_to_scan) {
+		struct page *page;
+
+		mutex_lock(&pool->mutex);
+		if (pool->low_count) {
+			page = ion_page_pool_remove(pool, false);
+		} else if (high && pool->high_count) {
+			page = ion_page_pool_remove(pool, true);
+		} else {
+			mutex_unlock(&pool->mutex);
+			break;
+		}
+		mutex_unlock(&pool->mutex);
+		ion_page_pool_free_pages(pool, page);
+		freed += (1 << pool->order);
+	}
+
+	return freed;
+}
+EXPORT_SYMBOL_GPL(ion_page_pool_shrink);
+
+struct ion_page_pool *ion_page_pool_create(gfp_t gfp_mask, unsigned int order)
+{
+	struct ion_page_pool *pool = kmalloc(sizeof(*pool), GFP_KERNEL);
+
+	if (!pool)
+		return NULL;
+	pool->high_count = 0;
+	pool->low_count = 0;
+	INIT_LIST_HEAD(&pool->low_items);
+	INIT_LIST_HEAD(&pool->high_items);
+	pool->gfp_mask = gfp_mask | __GFP_COMP;
+	pool->order = order;
+	mutex_init(&pool->mutex);
+	plist_node_init(&pool->list, order);
+
+	return pool;
+}
+EXPORT_SYMBOL_GPL(ion_page_pool_create);
+
+void ion_page_pool_destroy(struct ion_page_pool *pool)
+{
+	kfree(pool);
+}
+EXPORT_SYMBOL_GPL(ion_page_pool_destroy);
diff --git a/drivers/staging/android/ion/heaps/ion_page_pool.h b/drivers/staging/android/ion/heaps/ion_page_pool.h
new file mode 100644
index 0000000..10c7909
--- /dev/null
+++ b/drivers/staging/android/ion/heaps/ion_page_pool.h
@@ -0,0 +1,67 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * ION Page Pool kernel interface header
+ *
+ * Copyright (C) 2011 Google, Inc.
+ */
+
+#ifndef _ION_PAGE_POOL_H
+#define _ION_PAGE_POOL_H
+
+#include <linux/mm_types.h>
+#include <linux/mutex.h>
+#include <linux/shrinker.h>
+#include <linux/types.h>
+
+/**
+ * functions for creating and destroying a heap pool -- allows you
+ * to keep a pool of pre allocated memory to use from your heap.  Keeping
+ * a pool of memory that is ready for dma, ie any cached mapping have been
+ * invalidated from the cache, provides a significant performance benefit on
+ * many systems
+ */
+
+/**
+ * struct ion_page_pool - pagepool struct
+ * @high_count:		number of highmem items in the pool
+ * @low_count:		number of lowmem items in the pool
+ * @high_items:		list of highmem items
+ * @low_items:		list of lowmem items
+ * @mutex:		lock protecting this struct and especially the count
+ *			item list
+ * @gfp_mask:		gfp_mask to use from alloc
+ * @order:		order of pages in the pool
+ * @list:		plist node for list of pools
+ *
+ * Allows you to keep a pool of pre allocated pages to use from your heap.
+ * Keeping a pool of pages that is ready for dma, ie any cached mapping have
+ * been invalidated from the cache, provides a significant performance benefit
+ * on many systems
+ */
+struct ion_page_pool {
+	int high_count;
+	int low_count;
+	struct list_head high_items;
+	struct list_head low_items;
+	struct mutex mutex;
+	gfp_t gfp_mask;
+	unsigned int order;
+	struct plist_node list;
+};
+
+struct ion_page_pool *ion_page_pool_create(gfp_t gfp_mask, unsigned int order);
+void ion_page_pool_destroy(struct ion_page_pool *pool);
+struct page *ion_page_pool_alloc(struct ion_page_pool *pool);
+void ion_page_pool_free(struct ion_page_pool *pool, struct page *page);
+int ion_page_pool_nr_pages(struct ion_page_pool *pool);
+
+/** ion_page_pool_shrink - shrinks the size of the memory cached in the pool
+ * @pool:		the pool
+ * @gfp_mask:		the memory type to reclaim
+ * @nr_to_scan:		number of items to shrink in pages
+ *
+ * returns the number of items freed in pages
+ */
+int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask,
+			 int nr_to_scan);
+#endif /* _ION_PAGE_POOL_H */
diff --git a/drivers/staging/android/ion/heaps/ion_system_heap.c b/drivers/staging/android/ion/heaps/ion_system_heap.c
new file mode 100644
index 0000000..d76595e
--- /dev/null
+++ b/drivers/staging/android/ion/heaps/ion_system_heap.c
@@ -0,0 +1,290 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * ION Memory Allocator system heap exporter
+ *
+ * Copyright (C) 2011 Google, Inc.
+ */
+
+#include <asm/page.h>
+#include <linux/dma-mapping.h>
+#include <linux/err.h>
+#include <linux/highmem.h>
+#include <linux/ion.h>
+#include <linux/mm.h>
+#include <linux/module.h>
+#include <linux/scatterlist.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+
+#include "ion_page_pool.h"
+
+#define NUM_ORDERS ARRAY_SIZE(orders)
+
+static gfp_t high_order_gfp_flags = (GFP_HIGHUSER | __GFP_ZERO | __GFP_NOWARN |
+				     __GFP_NORETRY) & ~__GFP_RECLAIM;
+static gfp_t low_order_gfp_flags  = GFP_HIGHUSER | __GFP_ZERO;
+static const unsigned int orders[] = {8, 4, 0};
+
+static int order_to_index(unsigned int order)
+{
+	int i;
+
+	for (i = 0; i < NUM_ORDERS; i++)
+		if (order == orders[i])
+			return i;
+	BUG();
+	return -1;
+}
+
+static inline unsigned int order_to_size(int order)
+{
+	return PAGE_SIZE << order;
+}
+
+struct ion_system_heap {
+	struct ion_heap heap;
+	struct ion_page_pool *pools[NUM_ORDERS];
+};
+
+static struct page *alloc_buffer_page(struct ion_system_heap *heap,
+				      struct ion_buffer *buffer,
+				      unsigned long order)
+{
+	struct ion_page_pool *pool = heap->pools[order_to_index(order)];
+
+	return ion_page_pool_alloc(pool);
+}
+
+static void free_buffer_page(struct ion_system_heap *heap,
+			     struct ion_buffer *buffer, struct page *page)
+{
+	struct ion_page_pool *pool;
+	unsigned int order = compound_order(page);
+
+	/* go to system */
+	if (buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE) {
+		__free_pages(page, order);
+		return;
+	}
+
+	pool = heap->pools[order_to_index(order)];
+
+	ion_page_pool_free(pool, page);
+}
+
+static struct page *alloc_largest_available(struct ion_system_heap *heap,
+					    struct ion_buffer *buffer,
+					    unsigned long size,
+					    unsigned int max_order)
+{
+	struct page *page;
+	int i;
+
+	for (i = 0; i < NUM_ORDERS; i++) {
+		if (size < order_to_size(orders[i]))
+			continue;
+		if (max_order < orders[i])
+			continue;
+
+		page = alloc_buffer_page(heap, buffer, orders[i]);
+		if (!page)
+			continue;
+
+		return page;
+	}
+
+	return NULL;
+}
+
+static int ion_system_heap_allocate(struct ion_heap *heap,
+				    struct ion_buffer *buffer,
+				    unsigned long size,
+				    unsigned long flags)
+{
+	struct ion_system_heap *sys_heap = container_of(heap,
+							struct ion_system_heap,
+							heap);
+	struct sg_table *table;
+	struct scatterlist *sg;
+	struct list_head pages;
+	struct page *page, *tmp_page;
+	int i = 0;
+	unsigned long size_remaining = PAGE_ALIGN(size);
+	unsigned int max_order = orders[0];
+
+	if (size / PAGE_SIZE > totalram_pages() / 2)
+		return -ENOMEM;
+
+	INIT_LIST_HEAD(&pages);
+	while (size_remaining > 0) {
+		page = alloc_largest_available(sys_heap, buffer, size_remaining,
+					       max_order);
+		if (!page)
+			goto free_pages;
+		list_add_tail(&page->lru, &pages);
+		size_remaining -= page_size(page);
+		max_order = compound_order(page);
+		i++;
+	}
+	table = kmalloc(sizeof(*table), GFP_KERNEL);
+	if (!table)
+		goto free_pages;
+
+	if (sg_alloc_table(table, i, GFP_KERNEL))
+		goto free_table;
+
+	sg = table->sgl;
+	list_for_each_entry_safe(page, tmp_page, &pages, lru) {
+		sg_set_page(sg, page, page_size(page), 0);
+		sg = sg_next(sg);
+		list_del(&page->lru);
+	}
+
+	buffer->sg_table = table;
+
+	ion_buffer_prep_noncached(buffer);
+
+	return 0;
+
+free_table:
+	kfree(table);
+free_pages:
+	list_for_each_entry_safe(page, tmp_page, &pages, lru)
+		free_buffer_page(sys_heap, buffer, page);
+	return -ENOMEM;
+}
+
+static void ion_system_heap_free(struct ion_buffer *buffer)
+{
+	struct ion_system_heap *sys_heap = container_of(buffer->heap,
+							struct ion_system_heap,
+							heap);
+	struct sg_table *table = buffer->sg_table;
+	struct scatterlist *sg;
+	int i;
+
+	/* zero the buffer before goto page pool */
+	if (!(buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE))
+		ion_buffer_zero(buffer);
+
+	for_each_sg(table->sgl, sg, table->nents, i)
+		free_buffer_page(sys_heap, buffer, sg_page(sg));
+	sg_free_table(table);
+	kfree(table);
+}
+
+static int ion_system_heap_shrink(struct ion_heap *heap, gfp_t gfp_mask,
+				  int nr_to_scan)
+{
+	struct ion_page_pool *pool;
+	struct ion_system_heap *sys_heap;
+	int nr_total = 0;
+	int i, nr_freed;
+	int only_scan = 0;
+
+	sys_heap = container_of(heap, struct ion_system_heap, heap);
+
+	if (!nr_to_scan)
+		only_scan = 1;
+
+	for (i = 0; i < NUM_ORDERS; i++) {
+		pool = sys_heap->pools[i];
+
+		if (only_scan) {
+			nr_total += ion_page_pool_shrink(pool,
+							 gfp_mask,
+							 nr_to_scan);
+
+		} else {
+			nr_freed = ion_page_pool_shrink(pool,
+							gfp_mask,
+							nr_to_scan);
+			nr_to_scan -= nr_freed;
+			nr_total += nr_freed;
+			if (nr_to_scan <= 0)
+				break;
+		}
+	}
+	return nr_total;
+}
+
+static long ion_system_get_pool_size(struct ion_heap *heap)
+{
+	struct ion_system_heap *sys_heap;
+	long total_pages = 0;
+	int i;
+
+	sys_heap = container_of(heap, struct ion_system_heap, heap);
+	for (i = 0; i < NUM_ORDERS; i++)
+		total_pages += ion_page_pool_nr_pages(sys_heap->pools[i]);
+
+	return total_pages;
+}
+
+static void ion_system_heap_destroy_pools(struct ion_page_pool **pools)
+{
+	int i;
+
+	for (i = 0; i < NUM_ORDERS; i++)
+		if (pools[i])
+			ion_page_pool_destroy(pools[i]);
+}
+
+static int ion_system_heap_create_pools(struct ion_page_pool **pools)
+{
+	int i;
+
+	for (i = 0; i < NUM_ORDERS; i++) {
+		struct ion_page_pool *pool;
+		gfp_t gfp_flags = low_order_gfp_flags;
+
+		if (orders[i] > 4)
+			gfp_flags = high_order_gfp_flags;
+
+		pool = ion_page_pool_create(gfp_flags, orders[i]);
+		if (!pool)
+			goto err_create_pool;
+		pools[i] = pool;
+	}
+
+	return 0;
+
+err_create_pool:
+	ion_system_heap_destroy_pools(pools);
+	return -ENOMEM;
+}
+
+static struct ion_heap_ops system_heap_ops = {
+	.allocate = ion_system_heap_allocate,
+	.free = ion_system_heap_free,
+	.shrink = ion_system_heap_shrink,
+	.get_pool_size = ion_system_get_pool_size,
+};
+
+static struct ion_system_heap system_heap = {
+	.heap = {
+		.ops = &system_heap_ops,
+		.type = ION_HEAP_TYPE_SYSTEM,
+		.flags = ION_HEAP_FLAG_DEFER_FREE,
+		.name = "ion_system_heap",
+	}
+};
+
+static int __init ion_system_heap_init(void)
+{
+	int ret = ion_system_heap_create_pools(system_heap.pools);
+	if (ret)
+		return ret;
+
+	return ion_device_add_heap(&system_heap.heap);
+}
+
+static void __exit ion_system_heap_exit(void)
+{
+	ion_device_remove_heap(&system_heap.heap);
+	ion_system_heap_destroy_pools(system_heap.pools);
+}
+
+module_init(ion_system_heap_init);
+module_exit(ion_system_heap_exit);
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
index e6b1ca1..61d2a8c 100644
--- a/drivers/staging/android/ion/ion.c
+++ b/drivers/staging/android/ion/ion.c
@@ -3,8 +3,11 @@
  * ION Memory Allocator
  *
  * Copyright (C) 2011 Google, Inc.
+ * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ *
  */
 
+#include <linux/bitmap.h>
 #include <linux/debugfs.h>
 #include <linux/device.h>
 #include <linux/dma-buf.h>
@@ -15,393 +18,42 @@
 #include <linux/fs.h>
 #include <linux/kthread.h>
 #include <linux/list.h>
-#include <linux/miscdevice.h>
 #include <linux/mm.h>
 #include <linux/mm_types.h>
 #include <linux/rbtree.h>
 #include <linux/sched/task.h>
 #include <linux/slab.h>
 #include <linux/uaccess.h>
-#include <linux/vmalloc.h>
 
-#include "ion.h"
+#include "ion_private.h"
+
+#define ION_CURRENT_ABI_VERSION  2
 
 static struct ion_device *internal_dev;
-static int heap_id;
 
-/* this function should only be called while dev->lock is held */
-static struct ion_buffer *ion_buffer_create(struct ion_heap *heap,
-					    struct ion_device *dev,
-					    unsigned long len,
-					    unsigned long flags)
+/* Entry into ION allocator for rest of the kernel */
+struct dma_buf *ion_alloc(size_t len, unsigned int heap_id_mask,
+			  unsigned int flags)
 {
-	struct ion_buffer *buffer;
-	int ret;
-
-	buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
-	if (!buffer)
-		return ERR_PTR(-ENOMEM);
-
-	buffer->heap = heap;
-	buffer->flags = flags;
-	buffer->dev = dev;
-	buffer->size = len;
-
-	ret = heap->ops->allocate(heap, buffer, len, flags);
-
-	if (ret) {
-		if (!(heap->flags & ION_HEAP_FLAG_DEFER_FREE))
-			goto err2;
-
-		ion_heap_freelist_drain(heap, 0);
-		ret = heap->ops->allocate(heap, buffer, len, flags);
-		if (ret)
-			goto err2;
-	}
-
-	if (!buffer->sg_table) {
-		WARN_ONCE(1, "This heap needs to set the sgtable");
-		ret = -EINVAL;
-		goto err1;
-	}
-
-	spin_lock(&heap->stat_lock);
-	heap->num_of_buffers++;
-	heap->num_of_alloc_bytes += len;
-	if (heap->num_of_alloc_bytes > heap->alloc_bytes_wm)
-		heap->alloc_bytes_wm = heap->num_of_alloc_bytes;
-	spin_unlock(&heap->stat_lock);
-
-	INIT_LIST_HEAD(&buffer->attachments);
-	mutex_init(&buffer->lock);
-	return buffer;
-
-err1:
-	heap->ops->free(buffer);
-err2:
-	kfree(buffer);
-	return ERR_PTR(ret);
+	return ion_dmabuf_alloc(internal_dev, len, heap_id_mask, flags);
 }
+EXPORT_SYMBOL_GPL(ion_alloc);
 
-void ion_buffer_destroy(struct ion_buffer *buffer)
+int ion_free(struct ion_buffer *buffer)
 {
-	if (buffer->kmap_cnt > 0) {
-		pr_warn_once("%s: buffer still mapped in the kernel\n",
-			     __func__);
-		buffer->heap->ops->unmap_kernel(buffer->heap, buffer);
-	}
-	buffer->heap->ops->free(buffer);
-	spin_lock(&buffer->heap->stat_lock);
-	buffer->heap->num_of_buffers--;
-	buffer->heap->num_of_alloc_bytes -= buffer->size;
-	spin_unlock(&buffer->heap->stat_lock);
-
-	kfree(buffer);
+	return ion_buffer_destroy(internal_dev, buffer);
 }
+EXPORT_SYMBOL_GPL(ion_free);
 
-static void _ion_buffer_destroy(struct ion_buffer *buffer)
+static int ion_alloc_fd(size_t len, unsigned int heap_id_mask,
+			unsigned int flags)
 {
-	struct ion_heap *heap = buffer->heap;
-
-	if (heap->flags & ION_HEAP_FLAG_DEFER_FREE)
-		ion_heap_freelist_add(heap, buffer);
-	else
-		ion_buffer_destroy(buffer);
-}
-
-static void *ion_buffer_kmap_get(struct ion_buffer *buffer)
-{
-	void *vaddr;
-
-	if (buffer->kmap_cnt) {
-		buffer->kmap_cnt++;
-		return buffer->vaddr;
-	}
-	vaddr = buffer->heap->ops->map_kernel(buffer->heap, buffer);
-	if (WARN_ONCE(!vaddr,
-		      "heap->ops->map_kernel should return ERR_PTR on error"))
-		return ERR_PTR(-EINVAL);
-	if (IS_ERR(vaddr))
-		return vaddr;
-	buffer->vaddr = vaddr;
-	buffer->kmap_cnt++;
-	return vaddr;
-}
-
-static void ion_buffer_kmap_put(struct ion_buffer *buffer)
-{
-	buffer->kmap_cnt--;
-	if (!buffer->kmap_cnt) {
-		buffer->heap->ops->unmap_kernel(buffer->heap, buffer);
-		buffer->vaddr = NULL;
-	}
-}
-
-static struct sg_table *dup_sg_table(struct sg_table *table)
-{
-	struct sg_table *new_table;
-	int ret, i;
-	struct scatterlist *sg, *new_sg;
-
-	new_table = kzalloc(sizeof(*new_table), GFP_KERNEL);
-	if (!new_table)
-		return ERR_PTR(-ENOMEM);
-
-	ret = sg_alloc_table(new_table, table->nents, GFP_KERNEL);
-	if (ret) {
-		kfree(new_table);
-		return ERR_PTR(-ENOMEM);
-	}
-
-	new_sg = new_table->sgl;
-	for_each_sg(table->sgl, sg, table->nents, i) {
-		memcpy(new_sg, sg, sizeof(*sg));
-		new_sg->dma_address = 0;
-		new_sg = sg_next(new_sg);
-	}
-
-	return new_table;
-}
-
-static void free_duped_table(struct sg_table *table)
-{
-	sg_free_table(table);
-	kfree(table);
-}
-
-struct ion_dma_buf_attachment {
-	struct device *dev;
-	struct sg_table *table;
-	struct list_head list;
-};
-
-static int ion_dma_buf_attach(struct dma_buf *dmabuf,
-			      struct dma_buf_attachment *attachment)
-{
-	struct ion_dma_buf_attachment *a;
-	struct sg_table *table;
-	struct ion_buffer *buffer = dmabuf->priv;
-
-	a = kzalloc(sizeof(*a), GFP_KERNEL);
-	if (!a)
-		return -ENOMEM;
-
-	table = dup_sg_table(buffer->sg_table);
-	if (IS_ERR(table)) {
-		kfree(a);
-		return -ENOMEM;
-	}
-
-	a->table = table;
-	a->dev = attachment->dev;
-	INIT_LIST_HEAD(&a->list);
-
-	attachment->priv = a;
-
-	mutex_lock(&buffer->lock);
-	list_add(&a->list, &buffer->attachments);
-	mutex_unlock(&buffer->lock);
-
-	return 0;
-}
-
-static void ion_dma_buf_detatch(struct dma_buf *dmabuf,
-				struct dma_buf_attachment *attachment)
-{
-	struct ion_dma_buf_attachment *a = attachment->priv;
-	struct ion_buffer *buffer = dmabuf->priv;
-
-	mutex_lock(&buffer->lock);
-	list_del(&a->list);
-	mutex_unlock(&buffer->lock);
-	free_duped_table(a->table);
-
-	kfree(a);
-}
-
-static struct sg_table *ion_map_dma_buf(struct dma_buf_attachment *attachment,
-					enum dma_data_direction direction)
-{
-	struct ion_dma_buf_attachment *a = attachment->priv;
-	struct sg_table *table;
-
-	table = a->table;
-
-	if (!dma_map_sg(attachment->dev, table->sgl, table->nents,
-			direction))
-		return ERR_PTR(-ENOMEM);
-
-	return table;
-}
-
-static void ion_unmap_dma_buf(struct dma_buf_attachment *attachment,
-			      struct sg_table *table,
-			      enum dma_data_direction direction)
-{
-	dma_unmap_sg(attachment->dev, table->sgl, table->nents, direction);
-}
-
-static int ion_mmap(struct dma_buf *dmabuf, struct vm_area_struct *vma)
-{
-	struct ion_buffer *buffer = dmabuf->priv;
-	int ret = 0;
-
-	if (!buffer->heap->ops->map_user) {
-		pr_err("%s: this heap does not define a method for mapping to userspace\n",
-		       __func__);
-		return -EINVAL;
-	}
-
-	if (!(buffer->flags & ION_FLAG_CACHED))
-		vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
-
-	mutex_lock(&buffer->lock);
-	/* now map it to userspace */
-	ret = buffer->heap->ops->map_user(buffer->heap, buffer, vma);
-	mutex_unlock(&buffer->lock);
-
-	if (ret)
-		pr_err("%s: failure mapping buffer to userspace\n",
-		       __func__);
-
-	return ret;
-}
-
-static void ion_dma_buf_release(struct dma_buf *dmabuf)
-{
-	struct ion_buffer *buffer = dmabuf->priv;
-
-	_ion_buffer_destroy(buffer);
-}
-
-static void *ion_dma_buf_kmap(struct dma_buf *dmabuf, unsigned long offset)
-{
-	struct ion_buffer *buffer = dmabuf->priv;
-
-	return buffer->vaddr + offset * PAGE_SIZE;
-}
-
-static void ion_dma_buf_kunmap(struct dma_buf *dmabuf, unsigned long offset,
-			       void *ptr)
-{
-}
-
-static int ion_dma_buf_begin_cpu_access(struct dma_buf *dmabuf,
-					enum dma_data_direction direction)
-{
-	struct ion_buffer *buffer = dmabuf->priv;
-	void *vaddr;
-	struct ion_dma_buf_attachment *a;
-	int ret = 0;
-
-	/*
-	 * TODO: Move this elsewhere because we don't always need a vaddr
-	 */
-	if (buffer->heap->ops->map_kernel) {
-		mutex_lock(&buffer->lock);
-		vaddr = ion_buffer_kmap_get(buffer);
-		if (IS_ERR(vaddr)) {
-			ret = PTR_ERR(vaddr);
-			goto unlock;
-		}
-		mutex_unlock(&buffer->lock);
-	}
-
-	mutex_lock(&buffer->lock);
-	list_for_each_entry(a, &buffer->attachments, list) {
-		dma_sync_sg_for_cpu(a->dev, a->table->sgl, a->table->nents,
-				    direction);
-	}
-
-unlock:
-	mutex_unlock(&buffer->lock);
-	return ret;
-}
-
-static int ion_dma_buf_end_cpu_access(struct dma_buf *dmabuf,
-				      enum dma_data_direction direction)
-{
-	struct ion_buffer *buffer = dmabuf->priv;
-	struct ion_dma_buf_attachment *a;
-
-	if (buffer->heap->ops->map_kernel) {
-		mutex_lock(&buffer->lock);
-		ion_buffer_kmap_put(buffer);
-		mutex_unlock(&buffer->lock);
-	}
-
-	mutex_lock(&buffer->lock);
-	list_for_each_entry(a, &buffer->attachments, list) {
-		dma_sync_sg_for_device(a->dev, a->table->sgl, a->table->nents,
-				       direction);
-	}
-	mutex_unlock(&buffer->lock);
-
-	return 0;
-}
-
-static const struct dma_buf_ops dma_buf_ops = {
-	.map_dma_buf = ion_map_dma_buf,
-	.unmap_dma_buf = ion_unmap_dma_buf,
-	.mmap = ion_mmap,
-	.release = ion_dma_buf_release,
-	.attach = ion_dma_buf_attach,
-	.detach = ion_dma_buf_detatch,
-	.begin_cpu_access = ion_dma_buf_begin_cpu_access,
-	.end_cpu_access = ion_dma_buf_end_cpu_access,
-	.map = ion_dma_buf_kmap,
-	.unmap = ion_dma_buf_kunmap,
-};
-
-static int ion_alloc(size_t len, unsigned int heap_id_mask, unsigned int flags)
-{
-	struct ion_device *dev = internal_dev;
-	struct ion_buffer *buffer = NULL;
-	struct ion_heap *heap;
-	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
 	int fd;
 	struct dma_buf *dmabuf;
 
-	pr_debug("%s: len %zu heap_id_mask %u flags %x\n", __func__,
-		 len, heap_id_mask, flags);
-	/*
-	 * traverse the list of heaps available in this system in priority
-	 * order.  If the heap type is supported by the client, and matches the
-	 * request of the caller allocate from it.  Repeat until allocate has
-	 * succeeded or all heaps have been tried
-	 */
-	len = PAGE_ALIGN(len);
-
-	if (!len)
-		return -EINVAL;
-
-	down_read(&dev->lock);
-	plist_for_each_entry(heap, &dev->heaps, node) {
-		/* if the caller didn't specify this heap id */
-		if (!((1 << heap->id) & heap_id_mask))
-			continue;
-		buffer = ion_buffer_create(heap, dev, len, flags);
-		if (!IS_ERR(buffer))
-			break;
-	}
-	up_read(&dev->lock);
-
-	if (!buffer)
-		return -ENODEV;
-
-	if (IS_ERR(buffer))
-		return PTR_ERR(buffer);
-
-	exp_info.ops = &dma_buf_ops;
-	exp_info.size = buffer->size;
-	exp_info.flags = O_RDWR;
-	exp_info.priv = buffer;
-
-	dmabuf = dma_buf_export(&exp_info);
-	if (IS_ERR(dmabuf)) {
-		_ion_buffer_destroy(buffer);
+	dmabuf = ion_dmabuf_alloc(internal_dev, len, heap_id_mask, flags);
+	if (IS_ERR(dmabuf))
 		return PTR_ERR(dmabuf);
-	}
 
 	fd = dma_buf_fd(dmabuf, O_CLOEXEC);
 	if (fd < 0)
@@ -410,6 +62,38 @@ static int ion_alloc(size_t len, unsigned int heap_id_mask, unsigned int flags)
 	return fd;
 }
 
+size_t ion_query_heaps_kernel(struct ion_heap_data *hdata, size_t size)
+{
+	struct ion_device *dev = internal_dev;
+	size_t i = 0, num_heaps = 0;
+	struct ion_heap *heap;
+
+	down_read(&dev->lock);
+
+	// If size is 0, return without updating hdata.
+	if (size == 0) {
+		num_heaps = dev->heap_cnt;
+		goto out;
+	}
+
+	plist_for_each_entry(heap, &dev->heaps, node) {
+		strncpy(hdata[i].name, heap->name, MAX_HEAP_NAME);
+		hdata[i].name[MAX_HEAP_NAME - 1] = '\0';
+		hdata[i].type = heap->type;
+		hdata[i].heap_id = heap->id;
+
+		i++;
+		if (i >= size)
+			break;
+	}
+
+	num_heaps = i;
+out:
+	up_read(&dev->lock);
+	return num_heaps;
+}
+EXPORT_SYMBOL_GPL(ion_query_heaps_kernel);
+
 static int ion_query_heaps(struct ion_heap_query *query)
 {
 	struct ion_device *dev = internal_dev;
@@ -458,6 +142,7 @@ static int ion_query_heaps(struct ion_heap_query *query)
 union ion_ioctl_arg {
 	struct ion_allocation_data allocation;
 	struct ion_heap_query query;
+	u32 ion_abi_version;
 };
 
 static int validate_ioctl_arg(unsigned int cmd, union ion_ioctl_arg *arg)
@@ -506,9 +191,9 @@ static long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 	{
 		int fd;
 
-		fd = ion_alloc(data.allocation.len,
-			       data.allocation.heap_id_mask,
-			       data.allocation.flags);
+		fd = ion_alloc_fd(data.allocation.len,
+				  data.allocation.heap_id_mask,
+				  data.allocation.flags);
 		if (fd < 0)
 			return fd;
 
@@ -519,6 +204,9 @@ static long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 	case ION_IOC_HEAP_QUERY:
 		ret = ion_query_heaps(&data.query);
 		break;
+	case ION_IOC_ABI_VERSION:
+		data.ion_abi_version = ION_CURRENT_ABI_VERSION;
+		break;
 	default:
 		return -ENOTTY;
 	}
@@ -573,31 +261,88 @@ static int debug_shrink_get(void *data, u64 *val)
 DEFINE_SIMPLE_ATTRIBUTE(debug_shrink_fops, debug_shrink_get,
 			debug_shrink_set, "%llu\n");
 
-void ion_device_add_heap(struct ion_heap *heap)
+static int ion_assign_heap_id(struct ion_heap *heap, struct ion_device *dev)
+{
+	int id_bit = -EINVAL;
+	int start_bit = -1, end_bit = -1;
+
+	switch (heap->type) {
+	case ION_HEAP_TYPE_SYSTEM:
+		id_bit = __ffs(ION_HEAP_SYSTEM);
+		break;
+	case ION_HEAP_TYPE_DMA:
+		start_bit = __ffs(ION_HEAP_DMA_START);
+		end_bit = __ffs(ION_HEAP_DMA_END);
+		break;
+	case ION_HEAP_TYPE_CUSTOM ... ION_HEAP_TYPE_MAX:
+		start_bit = __ffs(ION_HEAP_CUSTOM_START);
+		end_bit = __ffs(ION_HEAP_CUSTOM_END);
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	/* For carveout, dma & custom heaps, we first let the heaps choose their
+	 * own IDs. This allows the old behaviour of knowing the heap ids
+	 * of these type of heaps  in advance in user space. If a heap with
+	 * that ID already exists, it is an error.
+	 *
+	 * If the heap hasn't picked an id by itself, then we assign it
+	 * one.
+	 */
+	if (id_bit < 0) {
+		if (heap->id) {
+			id_bit = __ffs(heap->id);
+			if (id_bit < start_bit || id_bit > end_bit)
+				return -EINVAL;
+		} else {
+			id_bit = find_next_zero_bit(dev->heap_ids, end_bit + 1,
+						    start_bit);
+			if (id_bit > end_bit)
+				return -ENOSPC;
+		}
+	}
+
+	if (test_and_set_bit(id_bit, dev->heap_ids))
+		return -EEXIST;
+	heap->id = id_bit;
+	dev->heap_cnt++;
+
+	return 0;
+}
+
+int __ion_device_add_heap(struct ion_heap *heap, struct module *owner)
 {
 	struct ion_device *dev = internal_dev;
 	int ret;
 	struct dentry *heap_root;
 	char debug_name[64];
 
-	if (!heap->ops->allocate || !heap->ops->free)
-		pr_err("%s: can not add heap with invalid ops struct.\n",
-		       __func__);
+	if (!heap || !heap->ops || !heap->ops->allocate || !heap->ops->free) {
+		pr_err("%s: invalid heap or heap_ops\n", __func__);
+		ret = -EINVAL;
+		goto out;
+	}
 
+	heap->owner = owner;
 	spin_lock_init(&heap->free_lock);
 	spin_lock_init(&heap->stat_lock);
 	heap->free_list_size = 0;
 
-	if (heap->flags & ION_HEAP_FLAG_DEFER_FREE)
-		ion_heap_init_deferred_free(heap);
+	if (heap->flags & ION_HEAP_FLAG_DEFER_FREE) {
+		ret = ion_heap_init_deferred_free(heap);
+		if (ret)
+			goto out_heap_cleanup;
+	}
 
 	if ((heap->flags & ION_HEAP_FLAG_DEFER_FREE) || heap->ops->shrink) {
 		ret = ion_heap_init_shrinker(heap);
-		if (ret)
+		if (ret) {
 			pr_err("%s: Failed to register shrinker\n", __func__);
+			goto out_heap_cleanup;
+		}
 	}
 
-	heap->dev = dev;
 	heap->num_of_buffers = 0;
 	heap->num_of_alloc_bytes = 0;
 	heap->alloc_bytes_wm = 0;
@@ -625,8 +370,16 @@ void ion_device_add_heap(struct ion_heap *heap)
 				    &debug_shrink_fops);
 	}
 
+	heap->debugfs_dir = heap_root;
 	down_write(&dev->lock);
-	heap->id = heap_id++;
+	ret = ion_assign_heap_id(heap, dev);
+	if (ret) {
+		pr_err("%s: Failed to assign heap id for heap type %x\n",
+		       __func__, heap->type);
+		up_write(&dev->lock);
+		goto out_debugfs_cleanup;
+	}
+
 	/*
 	 * use negative heap->id to reverse the priority -- when traversing
 	 * the list later attempt higher id numbers first
@@ -634,10 +387,99 @@ void ion_device_add_heap(struct ion_heap *heap)
 	plist_node_init(&heap->node, -heap->id);
 	plist_add(&heap->node, &dev->heaps);
 
-	dev->heap_cnt++;
+	up_write(&dev->lock);
+
+	return 0;
+
+out_debugfs_cleanup:
+	debugfs_remove_recursive(heap->debugfs_dir);
+out_heap_cleanup:
+	ion_heap_cleanup(heap);
+out:
+	return ret;
+}
+EXPORT_SYMBOL_GPL(__ion_device_add_heap);
+
+void ion_device_remove_heap(struct ion_heap *heap)
+{
+	struct ion_device *dev = internal_dev;
+
+	if (!heap) {
+		pr_err("%s: Invalid argument\n", __func__);
+		return;
+	}
+
+	// take semaphore and remove the heap from dev->heap list
+	down_write(&dev->lock);
+	/* So no new allocations can happen from this heap */
+	plist_del(&heap->node, &dev->heaps);
+	if (ion_heap_cleanup(heap) != 0) {
+		pr_warn("%s: failed to cleanup heap (%s)\n",
+			__func__, heap->name);
+	}
+	debugfs_remove_recursive(heap->debugfs_dir);
+	clear_bit(heap->id, dev->heap_ids);
+	dev->heap_cnt--;
 	up_write(&dev->lock);
 }
-EXPORT_SYMBOL(ion_device_add_heap);
+EXPORT_SYMBOL_GPL(ion_device_remove_heap);
+
+static ssize_t
+total_heaps_kb_show(struct kobject *kobj, struct kobj_attribute *attr,
+		    char *buf)
+{
+	return sprintf(buf, "%llu\n",
+		       div_u64(ion_get_total_heap_bytes(), 1024));
+}
+
+static ssize_t
+total_pools_kb_show(struct kobject *kobj, struct kobj_attribute *attr,
+		    char *buf)
+{
+	struct ion_device *dev = internal_dev;
+	struct ion_heap *heap;
+	u64 total_pages = 0;
+
+	down_read(&dev->lock);
+	plist_for_each_entry(heap, &dev->heaps, node)
+		if (heap->ops->get_pool_size)
+			total_pages += heap->ops->get_pool_size(heap);
+	up_read(&dev->lock);
+
+	return sprintf(buf, "%llu\n", total_pages * (PAGE_SIZE / 1024));
+}
+
+static struct kobj_attribute total_heaps_kb_attr =
+	__ATTR_RO(total_heaps_kb);
+
+static struct kobj_attribute total_pools_kb_attr =
+	__ATTR_RO(total_pools_kb);
+
+static struct attribute *ion_device_attrs[] = {
+	&total_heaps_kb_attr.attr,
+	&total_pools_kb_attr.attr,
+	NULL,
+};
+
+ATTRIBUTE_GROUPS(ion_device);
+
+static int ion_init_sysfs(void)
+{
+	struct kobject *ion_kobj;
+	int ret;
+
+	ion_kobj = kobject_create_and_add("ion", kernel_kobj);
+	if (!ion_kobj)
+		return -ENOMEM;
+
+	ret = sysfs_create_groups(ion_kobj, ion_device_groups);
+	if (ret) {
+		kobject_put(ion_kobj);
+		return ret;
+	}
+
+	return 0;
+}
 
 static int ion_device_create(void)
 {
@@ -655,8 +497,13 @@ static int ion_device_create(void)
 	ret = misc_register(&idev->dev);
 	if (ret) {
 		pr_err("ion: failed to register misc device.\n");
-		kfree(idev);
-		return ret;
+		goto err_reg;
+	}
+
+	ret = ion_init_sysfs();
+	if (ret) {
+		pr_err("ion: failed to add sysfs attributes.\n");
+		goto err_sysfs;
 	}
 
 	idev->debug_root = debugfs_create_dir("ion", NULL);
@@ -664,5 +511,11 @@ static int ion_device_create(void)
 	plist_head_init(&idev->heaps);
 	internal_dev = idev;
 	return 0;
+
+err_sysfs:
+	misc_deregister(&idev->dev);
+err_reg:
+	kfree(idev);
+	return ret;
 }
 subsys_initcall(ion_device_create);
diff --git a/drivers/staging/android/ion/ion.h b/drivers/staging/android/ion/ion.h
deleted file mode 100644
index 74914a2..0000000
--- a/drivers/staging/android/ion/ion.h
+++ /dev/null
@@ -1,303 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * ION Memory Allocator kernel interface header
- *
- * Copyright (C) 2011 Google, Inc.
- */
-
-#ifndef _ION_H
-#define _ION_H
-
-#include <linux/device.h>
-#include <linux/dma-direction.h>
-#include <linux/kref.h>
-#include <linux/mm_types.h>
-#include <linux/mutex.h>
-#include <linux/rbtree.h>
-#include <linux/sched.h>
-#include <linux/shrinker.h>
-#include <linux/types.h>
-#include <linux/miscdevice.h>
-
-#include "../uapi/ion.h"
-
-/**
- * struct ion_buffer - metadata for a particular buffer
- * @list:		element in list of deferred freeable buffers
- * @dev:		back pointer to the ion_device
- * @heap:		back pointer to the heap the buffer came from
- * @flags:		buffer specific flags
- * @private_flags:	internal buffer specific flags
- * @size:		size of the buffer
- * @priv_virt:		private data to the buffer representable as
- *			a void *
- * @lock:		protects the buffers cnt fields
- * @kmap_cnt:		number of times the buffer is mapped to the kernel
- * @vaddr:		the kernel mapping if kmap_cnt is not zero
- * @sg_table:		the sg table for the buffer
- * @attachments:	list of devices attached to this buffer
- */
-struct ion_buffer {
-	struct list_head list;
-	struct ion_device *dev;
-	struct ion_heap *heap;
-	unsigned long flags;
-	unsigned long private_flags;
-	size_t size;
-	void *priv_virt;
-	struct mutex lock;
-	int kmap_cnt;
-	void *vaddr;
-	struct sg_table *sg_table;
-	struct list_head attachments;
-};
-
-void ion_buffer_destroy(struct ion_buffer *buffer);
-
-/**
- * struct ion_device - the metadata of the ion device node
- * @dev:		the actual misc device
- * @lock:		rwsem protecting the tree of heaps and clients
- */
-struct ion_device {
-	struct miscdevice dev;
-	struct rw_semaphore lock;
-	struct plist_head heaps;
-	struct dentry *debug_root;
-	int heap_cnt;
-};
-
-/**
- * struct ion_heap_ops - ops to operate on a given heap
- * @allocate:		allocate memory
- * @free:		free memory
- * @map_kernel		map memory to the kernel
- * @unmap_kernel	unmap memory to the kernel
- * @map_user		map memory to userspace
- *
- * allocate, phys, and map_user return 0 on success, -errno on error.
- * map_dma and map_kernel return pointer on success, ERR_PTR on
- * error. @free will be called with ION_PRIV_FLAG_SHRINKER_FREE set in
- * the buffer's private_flags when called from a shrinker. In that
- * case, the pages being free'd must be truly free'd back to the
- * system, not put in a page pool or otherwise cached.
- */
-struct ion_heap_ops {
-	int (*allocate)(struct ion_heap *heap,
-			struct ion_buffer *buffer, unsigned long len,
-			unsigned long flags);
-	void (*free)(struct ion_buffer *buffer);
-	void * (*map_kernel)(struct ion_heap *heap, struct ion_buffer *buffer);
-	void (*unmap_kernel)(struct ion_heap *heap, struct ion_buffer *buffer);
-	int (*map_user)(struct ion_heap *mapper, struct ion_buffer *buffer,
-			struct vm_area_struct *vma);
-	int (*shrink)(struct ion_heap *heap, gfp_t gfp_mask, int nr_to_scan);
-};
-
-/**
- * heap flags - flags between the heaps and core ion code
- */
-#define ION_HEAP_FLAG_DEFER_FREE BIT(0)
-
-/**
- * private flags - flags internal to ion
- */
-/*
- * Buffer is being freed from a shrinker function. Skip any possible
- * heap-specific caching mechanism (e.g. page pools). Guarantees that
- * any buffer storage that came from the system allocator will be
- * returned to the system allocator.
- */
-#define ION_PRIV_FLAG_SHRINKER_FREE BIT(0)
-
-/**
- * struct ion_heap - represents a heap in the system
- * @node:		rb node to put the heap on the device's tree of heaps
- * @dev:		back pointer to the ion_device
- * @type:		type of heap
- * @ops:		ops struct as above
- * @flags:		flags
- * @id:			id of heap, also indicates priority of this heap when
- *			allocating.  These are specified by platform data and
- *			MUST be unique
- * @name:		used for debugging
- * @shrinker:		a shrinker for the heap
- * @free_list:		free list head if deferred free is used
- * @free_list_size	size of the deferred free list in bytes
- * @lock:		protects the free list
- * @waitqueue:		queue to wait on from deferred free thread
- * @task:		task struct of deferred free thread
- * @num_of_buffers	the number of currently allocated buffers
- * @num_of_alloc_bytes	the number of allocated bytes
- * @alloc_bytes_wm	the number of allocated bytes watermark
- *
- * Represents a pool of memory from which buffers can be made.  In some
- * systems the only heap is regular system memory allocated via vmalloc.
- * On others, some blocks might require large physically contiguous buffers
- * that are allocated from a specially reserved heap.
- */
-struct ion_heap {
-	struct plist_node node;
-	struct ion_device *dev;
-	enum ion_heap_type type;
-	struct ion_heap_ops *ops;
-	unsigned long flags;
-	unsigned int id;
-	const char *name;
-
-	/* deferred free support */
-	struct shrinker shrinker;
-	struct list_head free_list;
-	size_t free_list_size;
-	spinlock_t free_lock;
-	wait_queue_head_t waitqueue;
-	struct task_struct *task;
-
-	/* heap statistics */
-	u64 num_of_buffers;
-	u64 num_of_alloc_bytes;
-	u64 alloc_bytes_wm;
-
-	/* protect heap statistics */
-	spinlock_t stat_lock;
-};
-
-/**
- * ion_device_add_heap - adds a heap to the ion device
- * @heap:		the heap to add
- */
-void ion_device_add_heap(struct ion_heap *heap);
-
-/**
- * some helpers for common operations on buffers using the sg_table
- * and vaddr fields
- */
-void *ion_heap_map_kernel(struct ion_heap *heap, struct ion_buffer *buffer);
-void ion_heap_unmap_kernel(struct ion_heap *heap, struct ion_buffer *buffer);
-int ion_heap_map_user(struct ion_heap *heap, struct ion_buffer *buffer,
-		      struct vm_area_struct *vma);
-int ion_heap_buffer_zero(struct ion_buffer *buffer);
-int ion_heap_pages_zero(struct page *page, size_t size, pgprot_t pgprot);
-
-/**
- * ion_heap_init_shrinker
- * @heap:		the heap
- *
- * If a heap sets the ION_HEAP_FLAG_DEFER_FREE flag or defines the shrink op
- * this function will be called to setup a shrinker to shrink the freelists
- * and call the heap's shrink op.
- */
-int ion_heap_init_shrinker(struct ion_heap *heap);
-
-/**
- * ion_heap_init_deferred_free -- initialize deferred free functionality
- * @heap:		the heap
- *
- * If a heap sets the ION_HEAP_FLAG_DEFER_FREE flag this function will
- * be called to setup deferred frees. Calls to free the buffer will
- * return immediately and the actual free will occur some time later
- */
-int ion_heap_init_deferred_free(struct ion_heap *heap);
-
-/**
- * ion_heap_freelist_add - add a buffer to the deferred free list
- * @heap:		the heap
- * @buffer:		the buffer
- *
- * Adds an item to the deferred freelist.
- */
-void ion_heap_freelist_add(struct ion_heap *heap, struct ion_buffer *buffer);
-
-/**
- * ion_heap_freelist_drain - drain the deferred free list
- * @heap:		the heap
- * @size:		amount of memory to drain in bytes
- *
- * Drains the indicated amount of memory from the deferred freelist immediately.
- * Returns the total amount freed.  The total freed may be higher depending
- * on the size of the items in the list, or lower if there is insufficient
- * total memory on the freelist.
- */
-size_t ion_heap_freelist_drain(struct ion_heap *heap, size_t size);
-
-/**
- * ion_heap_freelist_shrink - drain the deferred free
- *				list, skipping any heap-specific
- *				pooling or caching mechanisms
- *
- * @heap:		the heap
- * @size:		amount of memory to drain in bytes
- *
- * Drains the indicated amount of memory from the deferred freelist immediately.
- * Returns the total amount freed.  The total freed may be higher depending
- * on the size of the items in the list, or lower if there is insufficient
- * total memory on the freelist.
- *
- * Unlike with @ion_heap_freelist_drain, don't put any pages back into
- * page pools or otherwise cache the pages. Everything must be
- * genuinely free'd back to the system. If you're free'ing from a
- * shrinker you probably want to use this. Note that this relies on
- * the heap.ops.free callback honoring the ION_PRIV_FLAG_SHRINKER_FREE
- * flag.
- */
-size_t ion_heap_freelist_shrink(struct ion_heap *heap,
-				size_t size);
-
-/**
- * ion_heap_freelist_size - returns the size of the freelist in bytes
- * @heap:		the heap
- */
-size_t ion_heap_freelist_size(struct ion_heap *heap);
-
-/**
- * functions for creating and destroying a heap pool -- allows you
- * to keep a pool of pre allocated memory to use from your heap.  Keeping
- * a pool of memory that is ready for dma, ie any cached mapping have been
- * invalidated from the cache, provides a significant performance benefit on
- * many systems
- */
-
-/**
- * struct ion_page_pool - pagepool struct
- * @high_count:		number of highmem items in the pool
- * @low_count:		number of lowmem items in the pool
- * @high_items:		list of highmem items
- * @low_items:		list of lowmem items
- * @mutex:		lock protecting this struct and especially the count
- *			item list
- * @gfp_mask:		gfp_mask to use from alloc
- * @order:		order of pages in the pool
- * @list:		plist node for list of pools
- *
- * Allows you to keep a pool of pre allocated pages to use from your heap.
- * Keeping a pool of pages that is ready for dma, ie any cached mapping have
- * been invalidated from the cache, provides a significant performance benefit
- * on many systems
- */
-struct ion_page_pool {
-	int high_count;
-	int low_count;
-	struct list_head high_items;
-	struct list_head low_items;
-	struct mutex mutex;
-	gfp_t gfp_mask;
-	unsigned int order;
-	struct plist_node list;
-};
-
-struct ion_page_pool *ion_page_pool_create(gfp_t gfp_mask, unsigned int order);
-void ion_page_pool_destroy(struct ion_page_pool *pool);
-struct page *ion_page_pool_alloc(struct ion_page_pool *pool);
-void ion_page_pool_free(struct ion_page_pool *pool, struct page *page);
-
-/** ion_page_pool_shrink - shrinks the size of the memory cached in the pool
- * @pool:		the pool
- * @gfp_mask:		the memory type to reclaim
- * @nr_to_scan:		number of items to shrink in pages
- *
- * returns the number of items freed in pages
- */
-int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask,
-			 int nr_to_scan);
-
-#endif /* _ION_H */
diff --git a/drivers/staging/android/ion/ion_buffer.c b/drivers/staging/android/ion/ion_buffer.c
new file mode 100644
index 0000000..e22330f
--- /dev/null
+++ b/drivers/staging/android/ion/ion_buffer.c
@@ -0,0 +1,278 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * ION Memory Allocator - buffer interface
+ *
+ * Copyright (c) 2019, Google, Inc.
+ */
+
+#include <linux/mm.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+#include <linux/dma-noncoherent.h>
+
+#define CREATE_TRACE_POINTS
+#include "ion_trace.h"
+#include "ion_private.h"
+
+static atomic_long_t total_heap_bytes;
+
+static void track_buffer_created(struct ion_buffer *buffer)
+{
+	long total = atomic_long_add_return(buffer->size, &total_heap_bytes);
+
+	trace_ion_stat(buffer->sg_table, buffer->size, total);
+}
+
+static void track_buffer_destroyed(struct ion_buffer *buffer)
+{
+	long total = atomic_long_sub_return(buffer->size, &total_heap_bytes);
+
+	trace_ion_stat(buffer->sg_table, -buffer->size, total);
+}
+
+/* this function should only be called while dev->lock is held */
+static struct ion_buffer *ion_buffer_create(struct ion_heap *heap,
+					    struct ion_device *dev,
+					    unsigned long len,
+					    unsigned long flags)
+{
+	struct ion_buffer *buffer;
+	int ret;
+
+	buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
+	if (!buffer)
+		return ERR_PTR(-ENOMEM);
+
+	buffer->heap = heap;
+	buffer->flags = flags;
+	buffer->size = len;
+
+	ret = heap->ops->allocate(heap, buffer, len, flags);
+
+	if (ret) {
+		if (!(heap->flags & ION_HEAP_FLAG_DEFER_FREE))
+			goto err2;
+
+		ion_heap_freelist_drain(heap, 0);
+		ret = heap->ops->allocate(heap, buffer, len, flags);
+		if (ret)
+			goto err2;
+	}
+
+	if (!buffer->sg_table) {
+		WARN_ONCE(1, "This heap needs to set the sgtable");
+		ret = -EINVAL;
+		goto err1;
+	}
+
+	spin_lock(&heap->stat_lock);
+	heap->num_of_buffers++;
+	heap->num_of_alloc_bytes += len;
+	if (heap->num_of_alloc_bytes > heap->alloc_bytes_wm)
+		heap->alloc_bytes_wm = heap->num_of_alloc_bytes;
+	if (heap->num_of_buffers == 1) {
+		/* This module reference lasts as long as at least one
+		 * buffer is allocated from the heap. We are protected
+		 * against ion_device_remove_heap() with dev->lock, so we can
+		 * safely assume the module reference is going to* succeed.
+		 */
+		__module_get(heap->owner);
+	}
+	spin_unlock(&heap->stat_lock);
+
+	INIT_LIST_HEAD(&buffer->attachments);
+	mutex_init(&buffer->lock);
+	track_buffer_created(buffer);
+	return buffer;
+
+err1:
+	heap->ops->free(buffer);
+err2:
+	kfree(buffer);
+	return ERR_PTR(ret);
+}
+
+static int ion_clear_pages(struct page **pages, int num, pgprot_t pgprot)
+{
+	void *addr = vmap(pages, num, VM_MAP, pgprot);
+
+	if (!addr)
+		return -ENOMEM;
+	memset(addr, 0, PAGE_SIZE * num);
+	vunmap(addr);
+
+	return 0;
+}
+
+static int ion_sglist_zero(struct scatterlist *sgl, unsigned int nents,
+			   pgprot_t pgprot)
+{
+	int p = 0;
+	int ret = 0;
+	struct sg_page_iter piter;
+	struct page *pages[32];
+
+	for_each_sg_page(sgl, &piter, nents, 0) {
+		pages[p++] = sg_page_iter_page(&piter);
+		if (p == ARRAY_SIZE(pages)) {
+			ret = ion_clear_pages(pages, p, pgprot);
+			if (ret)
+				return ret;
+			p = 0;
+		}
+	}
+	if (p)
+		ret = ion_clear_pages(pages, p, pgprot);
+
+	return ret;
+}
+
+struct ion_buffer *ion_buffer_alloc(struct ion_device *dev, size_t len,
+				    unsigned int heap_id_mask,
+				    unsigned int flags)
+{
+	struct ion_buffer *buffer = NULL;
+	struct ion_heap *heap;
+
+	if (!dev || !len) {
+		return ERR_PTR(-EINVAL);
+	}
+
+	/*
+	 * traverse the list of heaps available in this system in priority
+	 * order.  If the heap type is supported by the client, and matches the
+	 * request of the caller allocate from it.  Repeat until allocate has
+	 * succeeded or all heaps have been tried
+	 */
+	len = PAGE_ALIGN(len);
+	if (!len)
+		return ERR_PTR(-EINVAL);
+
+	down_read(&dev->lock);
+	plist_for_each_entry(heap, &dev->heaps, node) {
+		/* if the caller didn't specify this heap id */
+		if (!((1 << heap->id) & heap_id_mask))
+			continue;
+		buffer = ion_buffer_create(heap, dev, len, flags);
+		if (!IS_ERR(buffer))
+			break;
+	}
+	up_read(&dev->lock);
+
+	if (!buffer)
+		return ERR_PTR(-ENODEV);
+
+	if (IS_ERR(buffer))
+		return ERR_CAST(buffer);
+
+	return buffer;
+}
+
+int ion_buffer_zero(struct ion_buffer *buffer)
+{
+	struct sg_table *table;
+	pgprot_t pgprot;
+
+	if (!buffer)
+		return -EINVAL;
+
+	table = buffer->sg_table;
+	if (buffer->flags & ION_FLAG_CACHED)
+		pgprot = PAGE_KERNEL;
+	else
+		pgprot = pgprot_writecombine(PAGE_KERNEL);
+
+	return ion_sglist_zero(table->sgl, table->nents, pgprot);
+}
+EXPORT_SYMBOL_GPL(ion_buffer_zero);
+
+void ion_buffer_prep_noncached(struct ion_buffer *buffer)
+{
+	struct scatterlist *sg;
+	struct sg_table *table;
+	int i;
+
+	if (WARN_ONCE(!buffer || !buffer->sg_table,
+		      "%s needs a buffer and a sg_table", __func__) ||
+	    buffer->flags & ION_FLAG_CACHED)
+		return;
+
+	table = buffer->sg_table;
+
+	for_each_sg(table->sgl, sg, table->orig_nents, i)
+		arch_dma_prep_coherent(sg_page(sg), sg->length);
+}
+EXPORT_SYMBOL_GPL(ion_buffer_prep_noncached);
+
+void ion_buffer_release(struct ion_buffer *buffer)
+{
+	if (buffer->kmap_cnt > 0) {
+		pr_warn_once("%s: buffer still mapped in the kernel\n",
+			     __func__);
+		ion_heap_unmap_kernel(buffer->heap, buffer);
+	}
+	buffer->heap->ops->free(buffer);
+	spin_lock(&buffer->heap->stat_lock);
+	buffer->heap->num_of_buffers--;
+	buffer->heap->num_of_alloc_bytes -= buffer->size;
+	if (buffer->heap->num_of_buffers == 0)
+		module_put(buffer->heap->owner);
+	spin_unlock(&buffer->heap->stat_lock);
+	/* drop reference to the heap module */
+
+	kfree(buffer);
+}
+
+int ion_buffer_destroy(struct ion_device *dev, struct ion_buffer *buffer)
+{
+	struct ion_heap *heap;
+
+	if (!dev || !buffer) {
+		pr_warn("%s: invalid argument\n", __func__);
+		return -EINVAL;
+	}
+
+	heap = buffer->heap;
+	track_buffer_destroyed(buffer);
+
+	if (heap->flags & ION_HEAP_FLAG_DEFER_FREE)
+		ion_heap_freelist_add(heap, buffer);
+	else
+		ion_buffer_release(buffer);
+
+	return 0;
+}
+
+void *ion_buffer_kmap_get(struct ion_buffer *buffer)
+{
+	void *vaddr;
+
+	if (buffer->kmap_cnt) {
+		buffer->kmap_cnt++;
+		return buffer->vaddr;
+	}
+	vaddr = ion_heap_map_kernel(buffer->heap, buffer);
+	if (WARN_ONCE(!vaddr,
+		      "heap->ops->map_kernel should return ERR_PTR on error"))
+		return ERR_PTR(-EINVAL);
+	if (IS_ERR(vaddr))
+		return vaddr;
+	buffer->vaddr = vaddr;
+	buffer->kmap_cnt++;
+	return vaddr;
+}
+
+void ion_buffer_kmap_put(struct ion_buffer *buffer)
+{
+	buffer->kmap_cnt--;
+	if (!buffer->kmap_cnt) {
+		ion_heap_unmap_kernel(buffer->heap, buffer);
+		buffer->vaddr = NULL;
+	}
+}
+
+u64 ion_get_total_heap_bytes(void)
+{
+	return atomic_long_read(&total_heap_bytes);
+}
diff --git a/drivers/staging/android/ion/ion_cma_heap.c b/drivers/staging/android/ion/ion_cma_heap.c
deleted file mode 100644
index bf65e67..0000000
--- a/drivers/staging/android/ion/ion_cma_heap.c
+++ /dev/null
@@ -1,138 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * ION Memory Allocator CMA heap exporter
- *
- * Copyright (C) Linaro 2012
- * Author: <benjamin.gaignard@linaro.org> for ST-Ericsson.
- */
-
-#include <linux/device.h>
-#include <linux/slab.h>
-#include <linux/errno.h>
-#include <linux/err.h>
-#include <linux/cma.h>
-#include <linux/scatterlist.h>
-#include <linux/highmem.h>
-
-#include "ion.h"
-
-struct ion_cma_heap {
-	struct ion_heap heap;
-	struct cma *cma;
-};
-
-#define to_cma_heap(x) container_of(x, struct ion_cma_heap, heap)
-
-/* ION CMA heap operations functions */
-static int ion_cma_allocate(struct ion_heap *heap, struct ion_buffer *buffer,
-			    unsigned long len,
-			    unsigned long flags)
-{
-	struct ion_cma_heap *cma_heap = to_cma_heap(heap);
-	struct sg_table *table;
-	struct page *pages;
-	unsigned long size = PAGE_ALIGN(len);
-	unsigned long nr_pages = size >> PAGE_SHIFT;
-	unsigned long align = get_order(size);
-	int ret;
-
-	if (align > CONFIG_CMA_ALIGNMENT)
-		align = CONFIG_CMA_ALIGNMENT;
-
-	pages = cma_alloc(cma_heap->cma, nr_pages, align, false);
-	if (!pages)
-		return -ENOMEM;
-
-	if (PageHighMem(pages)) {
-		unsigned long nr_clear_pages = nr_pages;
-		struct page *page = pages;
-
-		while (nr_clear_pages > 0) {
-			void *vaddr = kmap_atomic(page);
-
-			memset(vaddr, 0, PAGE_SIZE);
-			kunmap_atomic(vaddr);
-			page++;
-			nr_clear_pages--;
-		}
-	} else {
-		memset(page_address(pages), 0, size);
-	}
-
-	table = kmalloc(sizeof(*table), GFP_KERNEL);
-	if (!table)
-		goto err;
-
-	ret = sg_alloc_table(table, 1, GFP_KERNEL);
-	if (ret)
-		goto free_mem;
-
-	sg_set_page(table->sgl, pages, size, 0);
-
-	buffer->priv_virt = pages;
-	buffer->sg_table = table;
-	return 0;
-
-free_mem:
-	kfree(table);
-err:
-	cma_release(cma_heap->cma, pages, nr_pages);
-	return -ENOMEM;
-}
-
-static void ion_cma_free(struct ion_buffer *buffer)
-{
-	struct ion_cma_heap *cma_heap = to_cma_heap(buffer->heap);
-	struct page *pages = buffer->priv_virt;
-	unsigned long nr_pages = PAGE_ALIGN(buffer->size) >> PAGE_SHIFT;
-
-	/* release memory */
-	cma_release(cma_heap->cma, pages, nr_pages);
-	/* release sg table */
-	sg_free_table(buffer->sg_table);
-	kfree(buffer->sg_table);
-}
-
-static struct ion_heap_ops ion_cma_ops = {
-	.allocate = ion_cma_allocate,
-	.free = ion_cma_free,
-	.map_user = ion_heap_map_user,
-	.map_kernel = ion_heap_map_kernel,
-	.unmap_kernel = ion_heap_unmap_kernel,
-};
-
-static struct ion_heap *__ion_cma_heap_create(struct cma *cma)
-{
-	struct ion_cma_heap *cma_heap;
-
-	cma_heap = kzalloc(sizeof(*cma_heap), GFP_KERNEL);
-
-	if (!cma_heap)
-		return ERR_PTR(-ENOMEM);
-
-	cma_heap->heap.ops = &ion_cma_ops;
-	cma_heap->cma = cma;
-	cma_heap->heap.type = ION_HEAP_TYPE_DMA;
-	return &cma_heap->heap;
-}
-
-static int __ion_add_cma_heaps(struct cma *cma, void *data)
-{
-	struct ion_heap *heap;
-
-	heap = __ion_cma_heap_create(cma);
-	if (IS_ERR(heap))
-		return PTR_ERR(heap);
-
-	heap->name = cma_get_name(cma);
-
-	ion_device_add_heap(heap);
-	return 0;
-}
-
-static int ion_add_cma_heaps(void)
-{
-	cma_for_each_area(__ion_add_cma_heaps, NULL);
-	return 0;
-}
-device_initcall(ion_add_cma_heaps);
diff --git a/drivers/staging/android/ion/ion_dma_buf.c b/drivers/staging/android/ion/ion_dma_buf.c
new file mode 100644
index 0000000..b7295fe
--- /dev/null
+++ b/drivers/staging/android/ion/ion_dma_buf.c
@@ -0,0 +1,383 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * ION Memory Allocator - dmabuf interface
+ *
+ * Copyright (c) 2019, Google, Inc.
+ */
+
+#include <linux/device.h>
+#include <linux/mm.h>
+#include <linux/scatterlist.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+
+#include "ion_private.h"
+
+static struct sg_table *dup_sg_table(struct sg_table *table)
+{
+	struct sg_table *new_table;
+	int ret, i;
+	struct scatterlist *sg, *new_sg;
+
+	new_table = kzalloc(sizeof(*new_table), GFP_KERNEL);
+	if (!new_table)
+		return ERR_PTR(-ENOMEM);
+
+	ret = sg_alloc_table(new_table, table->nents, GFP_KERNEL);
+	if (ret) {
+		kfree(new_table);
+		return ERR_PTR(-ENOMEM);
+	}
+
+	new_sg = new_table->sgl;
+	for_each_sg(table->sgl, sg, table->nents, i) {
+		memcpy(new_sg, sg, sizeof(*sg));
+		new_sg->dma_address = 0;
+		new_sg = sg_next(new_sg);
+	}
+
+	return new_table;
+}
+
+static void free_duped_table(struct sg_table *table)
+{
+	sg_free_table(table);
+	kfree(table);
+}
+
+static int ion_dma_buf_attach(struct dma_buf *dmabuf,
+			      struct dma_buf_attachment *attachment)
+{
+	struct ion_dma_buf_attachment *a;
+	struct sg_table *table;
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+
+	if (heap->buf_ops.attach)
+		return heap->buf_ops.attach(dmabuf, attachment);
+
+	a = kzalloc(sizeof(*a), GFP_KERNEL);
+	if (!a)
+		return -ENOMEM;
+
+	table = dup_sg_table(buffer->sg_table);
+	if (IS_ERR(table)) {
+		kfree(a);
+		return -ENOMEM;
+	}
+
+	a->table = table;
+	a->dev = attachment->dev;
+	INIT_LIST_HEAD(&a->list);
+	a->mapped = false;
+
+	attachment->priv = a;
+
+	mutex_lock(&buffer->lock);
+	list_add(&a->list, &buffer->attachments);
+	mutex_unlock(&buffer->lock);
+
+	return 0;
+}
+
+static void ion_dma_buf_detatch(struct dma_buf *dmabuf,
+				struct dma_buf_attachment *attachment)
+{
+	struct ion_dma_buf_attachment *a = attachment->priv;
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+
+	if (heap->buf_ops.detach)
+		return heap->buf_ops.detach(dmabuf, attachment);
+
+	mutex_lock(&buffer->lock);
+	list_del(&a->list);
+	mutex_unlock(&buffer->lock);
+	free_duped_table(a->table);
+
+	kfree(a);
+}
+
+static struct sg_table *ion_map_dma_buf(struct dma_buf_attachment *attachment,
+					enum dma_data_direction direction)
+{
+	struct ion_buffer *buffer = attachment->dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+	struct ion_dma_buf_attachment *a;
+	struct sg_table *table;
+	unsigned long attrs = attachment->dma_map_attrs;
+
+	if (heap->buf_ops.map_dma_buf)
+		return heap->buf_ops.map_dma_buf(attachment, direction);
+
+	a = attachment->priv;
+	table = a->table;
+
+	if (!(buffer->flags & ION_FLAG_CACHED))
+		attrs |= DMA_ATTR_SKIP_CPU_SYNC;
+
+	if (!dma_map_sg_attrs(attachment->dev, table->sgl, table->nents,
+			      direction, attrs))
+		return ERR_PTR(-ENOMEM);
+
+	a->mapped = true;
+
+	return table;
+}
+
+static void ion_unmap_dma_buf(struct dma_buf_attachment *attachment,
+			      struct sg_table *table,
+			      enum dma_data_direction direction)
+{
+	struct ion_buffer *buffer = attachment->dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+	struct ion_dma_buf_attachment *a = attachment->priv;
+	unsigned long attrs = attachment->dma_map_attrs;
+
+	if (heap->buf_ops.unmap_dma_buf)
+		return heap->buf_ops.unmap_dma_buf(attachment, table,
+						   direction);
+
+	a->mapped = false;
+
+	if (!(buffer->flags & ION_FLAG_CACHED))
+		attrs |= DMA_ATTR_SKIP_CPU_SYNC;
+
+	dma_unmap_sg_attrs(attachment->dev, table->sgl, table->nents,
+			   direction, attrs);
+}
+
+static void ion_dma_buf_release(struct dma_buf *dmabuf)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+
+	if (heap->buf_ops.release)
+		return heap->buf_ops.release(dmabuf);
+
+	ion_free(buffer);
+}
+
+static int ion_dma_buf_begin_cpu_access(struct dma_buf *dmabuf,
+					enum dma_data_direction direction)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+	struct ion_dma_buf_attachment *a;
+
+	if (heap->buf_ops.begin_cpu_access)
+		return heap->buf_ops.begin_cpu_access(dmabuf, direction);
+
+	mutex_lock(&buffer->lock);
+	if (!(buffer->flags & ION_FLAG_CACHED))
+		goto unlock;
+
+	list_for_each_entry(a, &buffer->attachments, list) {
+		if (!a->mapped)
+			continue;
+		dma_sync_sg_for_cpu(a->dev, a->table->sgl, a->table->nents,
+				    direction);
+	}
+
+unlock:
+	mutex_unlock(&buffer->lock);
+	return 0;
+}
+
+static int
+ion_dma_buf_begin_cpu_access_partial(struct dma_buf *dmabuf,
+				     enum dma_data_direction direction,
+				     unsigned int offset, unsigned int len)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+
+	/* This is done to make sure partial buffer cache flush / invalidate is
+	 * allowed. The implementation may be vendor specific in this case, so
+	 * ion core does not provide a default implementation
+	 */
+	if (!heap->buf_ops.begin_cpu_access_partial)
+		return -EOPNOTSUPP;
+
+	return heap->buf_ops.begin_cpu_access_partial(dmabuf, direction, offset,
+						      len);
+}
+
+static int ion_dma_buf_end_cpu_access(struct dma_buf *dmabuf,
+				      enum dma_data_direction direction)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+	struct ion_dma_buf_attachment *a;
+
+	if (heap->buf_ops.end_cpu_access)
+		return heap->buf_ops.end_cpu_access(dmabuf, direction);
+
+	mutex_lock(&buffer->lock);
+	if (!(buffer->flags & ION_FLAG_CACHED))
+		goto unlock;
+
+	list_for_each_entry(a, &buffer->attachments, list) {
+		if (!a->mapped)
+			continue;
+		dma_sync_sg_for_device(a->dev, a->table->sgl, a->table->nents,
+				       direction);
+	}
+unlock:
+	mutex_unlock(&buffer->lock);
+
+	return 0;
+}
+
+static int ion_dma_buf_end_cpu_access_partial(struct dma_buf *dmabuf,
+					      enum dma_data_direction direction,
+					      unsigned int offset,
+					      unsigned int len)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+
+	/* This is done to make sure partial buffer cache flush / invalidate is
+	 * allowed. The implementation may be vendor specific in this case, so
+	 * ion core does not provide a default implementation
+	 */
+	if (!heap->buf_ops.end_cpu_access_partial)
+		return -EOPNOTSUPP;
+
+	return heap->buf_ops.end_cpu_access_partial(dmabuf, direction, offset,
+						    len);
+}
+
+static void *ion_dma_buf_map(struct dma_buf *dmabuf, unsigned long offset)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+
+	if (heap->buf_ops.map)
+		return heap->buf_ops.map(dmabuf, offset);
+
+	return ion_buffer_kmap_get(buffer) + offset * PAGE_SIZE;
+}
+
+static int ion_dma_buf_mmap(struct dma_buf *dmabuf, struct vm_area_struct *vma)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+	int ret;
+
+	/* now map it to userspace */
+	if (heap->buf_ops.mmap) {
+		ret = heap->buf_ops.mmap(dmabuf, vma);
+	} else {
+		mutex_lock(&buffer->lock);
+		if (!(buffer->flags & ION_FLAG_CACHED))
+			vma->vm_page_prot =
+				pgprot_writecombine(vma->vm_page_prot);
+
+		ret = ion_heap_map_user(heap, buffer, vma);
+		mutex_unlock(&buffer->lock);
+	}
+
+	if (ret)
+		pr_err("%s: failure mapping buffer to userspace\n", __func__);
+
+	return ret;
+}
+
+static void ion_dma_buf_unmap(struct dma_buf *dmabuf, unsigned long offset,
+			      void *addr)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+
+	if (!heap->buf_ops.unmap)
+		return;
+	heap->buf_ops.unmap(dmabuf, offset, addr);
+}
+
+static void *ion_dma_buf_vmap(struct dma_buf *dmabuf)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+	void *vaddr;
+
+	if (heap->buf_ops.vmap)
+		return heap->buf_ops.vmap(dmabuf);
+
+	mutex_lock(&buffer->lock);
+	vaddr = ion_buffer_kmap_get(buffer);
+	mutex_unlock(&buffer->lock);
+
+	return vaddr;
+}
+
+static void ion_dma_buf_vunmap(struct dma_buf *dmabuf, void *vaddr)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+
+	if (heap->buf_ops.vunmap) {
+		heap->buf_ops.vunmap(dmabuf, vaddr);
+		return;
+	}
+
+	mutex_lock(&buffer->lock);
+	ion_buffer_kmap_put(buffer);
+	mutex_unlock(&buffer->lock);
+}
+
+static int ion_dma_buf_get_flags(struct dma_buf *dmabuf, unsigned long *flags)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+
+	if (!heap->buf_ops.get_flags)
+		return -EOPNOTSUPP;
+
+	return heap->buf_ops.get_flags(dmabuf, flags);
+}
+
+static const struct dma_buf_ops dma_buf_ops = {
+	.attach = ion_dma_buf_attach,
+	.detach = ion_dma_buf_detatch,
+	.map_dma_buf = ion_map_dma_buf,
+	.unmap_dma_buf = ion_unmap_dma_buf,
+	.release = ion_dma_buf_release,
+	.begin_cpu_access = ion_dma_buf_begin_cpu_access,
+	.begin_cpu_access_partial = ion_dma_buf_begin_cpu_access_partial,
+	.end_cpu_access = ion_dma_buf_end_cpu_access,
+	.end_cpu_access_partial = ion_dma_buf_end_cpu_access_partial,
+	.mmap = ion_dma_buf_mmap,
+	.map = ion_dma_buf_map,
+	.unmap = ion_dma_buf_unmap,
+	.vmap = ion_dma_buf_vmap,
+	.vunmap = ion_dma_buf_vunmap,
+	.get_flags = ion_dma_buf_get_flags,
+};
+
+struct dma_buf *ion_dmabuf_alloc(struct ion_device *dev, size_t len,
+				 unsigned int heap_id_mask,
+				 unsigned int flags)
+{
+	struct ion_buffer *buffer;
+	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
+	struct dma_buf *dmabuf;
+
+	pr_debug("%s: len %zu heap_id_mask %u flags %x\n", __func__,
+		 len, heap_id_mask, flags);
+
+	buffer = ion_buffer_alloc(dev, len, heap_id_mask, flags);
+	if (IS_ERR(buffer))
+		return ERR_CAST(buffer);
+
+	exp_info.ops = &dma_buf_ops;
+	exp_info.size = buffer->size;
+	exp_info.flags = O_RDWR;
+	exp_info.priv = buffer;
+
+	dmabuf = dma_buf_export(&exp_info);
+	if (IS_ERR(dmabuf))
+		ion_buffer_destroy(dev, buffer);
+
+	return dmabuf;
+}
diff --git a/drivers/staging/android/ion/ion_heap.c b/drivers/staging/android/ion/ion_heap.c
index 0755b11..e102f6a 100644
--- a/drivers/staging/android/ion/ion_heap.c
+++ b/drivers/staging/android/ion/ion_heap.c
@@ -15,250 +15,7 @@
 #include <linux/scatterlist.h>
 #include <linux/vmalloc.h>
 
-#include "ion.h"
-
-void *ion_heap_map_kernel(struct ion_heap *heap,
-			  struct ion_buffer *buffer)
-{
-	struct scatterlist *sg;
-	int i, j;
-	void *vaddr;
-	pgprot_t pgprot;
-	struct sg_table *table = buffer->sg_table;
-	int npages = PAGE_ALIGN(buffer->size) / PAGE_SIZE;
-	struct page **pages = vmalloc(array_size(npages,
-						 sizeof(struct page *)));
-	struct page **tmp = pages;
-
-	if (!pages)
-		return ERR_PTR(-ENOMEM);
-
-	if (buffer->flags & ION_FLAG_CACHED)
-		pgprot = PAGE_KERNEL;
-	else
-		pgprot = pgprot_writecombine(PAGE_KERNEL);
-
-	for_each_sg(table->sgl, sg, table->nents, i) {
-		int npages_this_entry = PAGE_ALIGN(sg->length) / PAGE_SIZE;
-		struct page *page = sg_page(sg);
-
-		BUG_ON(i >= npages);
-		for (j = 0; j < npages_this_entry; j++)
-			*(tmp++) = page++;
-	}
-	vaddr = vmap(pages, npages, VM_MAP, pgprot);
-	vfree(pages);
-
-	if (!vaddr)
-		return ERR_PTR(-ENOMEM);
-
-	return vaddr;
-}
-
-void ion_heap_unmap_kernel(struct ion_heap *heap,
-			   struct ion_buffer *buffer)
-{
-	vunmap(buffer->vaddr);
-}
-
-int ion_heap_map_user(struct ion_heap *heap, struct ion_buffer *buffer,
-		      struct vm_area_struct *vma)
-{
-	struct sg_table *table = buffer->sg_table;
-	unsigned long addr = vma->vm_start;
-	unsigned long offset = vma->vm_pgoff * PAGE_SIZE;
-	struct scatterlist *sg;
-	int i;
-	int ret;
-
-	for_each_sg(table->sgl, sg, table->nents, i) {
-		struct page *page = sg_page(sg);
-		unsigned long remainder = vma->vm_end - addr;
-		unsigned long len = sg->length;
-
-		if (offset >= sg->length) {
-			offset -= sg->length;
-			continue;
-		} else if (offset) {
-			page += offset / PAGE_SIZE;
-			len = sg->length - offset;
-			offset = 0;
-		}
-		len = min(len, remainder);
-		ret = remap_pfn_range(vma, addr, page_to_pfn(page), len,
-				      vma->vm_page_prot);
-		if (ret)
-			return ret;
-		addr += len;
-		if (addr >= vma->vm_end)
-			return 0;
-	}
-
-	return 0;
-}
-
-static int ion_heap_clear_pages(struct page **pages, int num, pgprot_t pgprot)
-{
-	void *addr = vmap(pages, num, VM_MAP, pgprot);
-
-	if (!addr)
-		return -ENOMEM;
-	memset(addr, 0, PAGE_SIZE * num);
-	vunmap(addr);
-
-	return 0;
-}
-
-static int ion_heap_sglist_zero(struct scatterlist *sgl, unsigned int nents,
-				pgprot_t pgprot)
-{
-	int p = 0;
-	int ret = 0;
-	struct sg_page_iter piter;
-	struct page *pages[32];
-
-	for_each_sg_page(sgl, &piter, nents, 0) {
-		pages[p++] = sg_page_iter_page(&piter);
-		if (p == ARRAY_SIZE(pages)) {
-			ret = ion_heap_clear_pages(pages, p, pgprot);
-			if (ret)
-				return ret;
-			p = 0;
-		}
-	}
-	if (p)
-		ret = ion_heap_clear_pages(pages, p, pgprot);
-
-	return ret;
-}
-
-int ion_heap_buffer_zero(struct ion_buffer *buffer)
-{
-	struct sg_table *table = buffer->sg_table;
-	pgprot_t pgprot;
-
-	if (buffer->flags & ION_FLAG_CACHED)
-		pgprot = PAGE_KERNEL;
-	else
-		pgprot = pgprot_writecombine(PAGE_KERNEL);
-
-	return ion_heap_sglist_zero(table->sgl, table->nents, pgprot);
-}
-
-int ion_heap_pages_zero(struct page *page, size_t size, pgprot_t pgprot)
-{
-	struct scatterlist sg;
-
-	sg_init_table(&sg, 1);
-	sg_set_page(&sg, page, size, 0);
-	return ion_heap_sglist_zero(&sg, 1, pgprot);
-}
-
-void ion_heap_freelist_add(struct ion_heap *heap, struct ion_buffer *buffer)
-{
-	spin_lock(&heap->free_lock);
-	list_add(&buffer->list, &heap->free_list);
-	heap->free_list_size += buffer->size;
-	spin_unlock(&heap->free_lock);
-	wake_up(&heap->waitqueue);
-}
-
-size_t ion_heap_freelist_size(struct ion_heap *heap)
-{
-	size_t size;
-
-	spin_lock(&heap->free_lock);
-	size = heap->free_list_size;
-	spin_unlock(&heap->free_lock);
-
-	return size;
-}
-
-static size_t _ion_heap_freelist_drain(struct ion_heap *heap, size_t size,
-				       bool skip_pools)
-{
-	struct ion_buffer *buffer;
-	size_t total_drained = 0;
-
-	if (ion_heap_freelist_size(heap) == 0)
-		return 0;
-
-	spin_lock(&heap->free_lock);
-	if (size == 0)
-		size = heap->free_list_size;
-
-	while (!list_empty(&heap->free_list)) {
-		if (total_drained >= size)
-			break;
-		buffer = list_first_entry(&heap->free_list, struct ion_buffer,
-					  list);
-		list_del(&buffer->list);
-		heap->free_list_size -= buffer->size;
-		if (skip_pools)
-			buffer->private_flags |= ION_PRIV_FLAG_SHRINKER_FREE;
-		total_drained += buffer->size;
-		spin_unlock(&heap->free_lock);
-		ion_buffer_destroy(buffer);
-		spin_lock(&heap->free_lock);
-	}
-	spin_unlock(&heap->free_lock);
-
-	return total_drained;
-}
-
-size_t ion_heap_freelist_drain(struct ion_heap *heap, size_t size)
-{
-	return _ion_heap_freelist_drain(heap, size, false);
-}
-
-size_t ion_heap_freelist_shrink(struct ion_heap *heap, size_t size)
-{
-	return _ion_heap_freelist_drain(heap, size, true);
-}
-
-static int ion_heap_deferred_free(void *data)
-{
-	struct ion_heap *heap = data;
-
-	while (true) {
-		struct ion_buffer *buffer;
-
-		wait_event_freezable(heap->waitqueue,
-				     ion_heap_freelist_size(heap) > 0);
-
-		spin_lock(&heap->free_lock);
-		if (list_empty(&heap->free_list)) {
-			spin_unlock(&heap->free_lock);
-			continue;
-		}
-		buffer = list_first_entry(&heap->free_list, struct ion_buffer,
-					  list);
-		list_del(&buffer->list);
-		heap->free_list_size -= buffer->size;
-		spin_unlock(&heap->free_lock);
-		ion_buffer_destroy(buffer);
-	}
-
-	return 0;
-}
-
-int ion_heap_init_deferred_free(struct ion_heap *heap)
-{
-	struct sched_param param = { .sched_priority = 0 };
-
-	INIT_LIST_HEAD(&heap->free_list);
-	init_waitqueue_head(&heap->waitqueue);
-	heap->task = kthread_run(ion_heap_deferred_free, heap,
-				 "%s", heap->name);
-	if (IS_ERR(heap->task)) {
-		pr_err("%s: creating thread for deferred free failed\n",
-		       __func__);
-		return PTR_ERR_OR_ZERO(heap->task);
-	}
-	sched_setscheduler(heap->task, SCHED_IDLE, &param);
-
-	return 0;
-}
+#include "ion_private.h"
 
 static unsigned long ion_heap_shrink_count(struct shrinker *shrinker,
 					   struct shrink_control *sc)
@@ -304,6 +61,198 @@ static unsigned long ion_heap_shrink_scan(struct shrinker *shrinker,
 	return freed;
 }
 
+static size_t _ion_heap_freelist_drain(struct ion_heap *heap, size_t size,
+				       bool skip_pools)
+{
+	struct ion_buffer *buffer;
+	size_t total_drained = 0;
+
+	if (ion_heap_freelist_size(heap) == 0)
+		return 0;
+
+	spin_lock(&heap->free_lock);
+	if (size == 0)
+		size = heap->free_list_size;
+
+	while (!list_empty(&heap->free_list)) {
+		if (total_drained >= size)
+			break;
+		buffer = list_first_entry(&heap->free_list, struct ion_buffer,
+					  list);
+		list_del(&buffer->list);
+		heap->free_list_size -= buffer->size;
+		if (skip_pools)
+			buffer->private_flags |= ION_PRIV_FLAG_SHRINKER_FREE;
+		total_drained += buffer->size;
+		spin_unlock(&heap->free_lock);
+		ion_buffer_release(buffer);
+		spin_lock(&heap->free_lock);
+	}
+	spin_unlock(&heap->free_lock);
+
+	return total_drained;
+}
+
+static int ion_heap_deferred_free(void *data)
+{
+	struct ion_heap *heap = data;
+
+	while (true) {
+		struct ion_buffer *buffer;
+
+		wait_event_freezable(heap->waitqueue,
+				     (ion_heap_freelist_size(heap) > 0 ||
+				      kthread_should_stop()));
+
+		spin_lock(&heap->free_lock);
+		if (list_empty(&heap->free_list)) {
+			spin_unlock(&heap->free_lock);
+			if (!kthread_should_stop())
+				continue;
+			break;
+		}
+		buffer = list_first_entry(&heap->free_list, struct ion_buffer,
+					  list);
+		list_del(&buffer->list);
+		heap->free_list_size -= buffer->size;
+		spin_unlock(&heap->free_lock);
+		ion_buffer_release(buffer);
+	}
+
+	return 0;
+}
+
+void *ion_heap_map_kernel(struct ion_heap *heap,
+			  struct ion_buffer *buffer)
+{
+	struct scatterlist *sg;
+	int i, j;
+	void *vaddr;
+	pgprot_t pgprot;
+	struct sg_table *table = buffer->sg_table;
+	int npages = PAGE_ALIGN(buffer->size) / PAGE_SIZE;
+	struct page **pages = vmalloc(array_size(npages,
+						 sizeof(struct page *)));
+	struct page **tmp = pages;
+
+	if (!pages)
+		return ERR_PTR(-ENOMEM);
+
+	if (buffer->flags & ION_FLAG_CACHED)
+		pgprot = PAGE_KERNEL;
+	else
+		pgprot = pgprot_writecombine(PAGE_KERNEL);
+
+	for_each_sg(table->sgl, sg, table->nents, i) {
+		int npages_this_entry = PAGE_ALIGN(sg->length) / PAGE_SIZE;
+		struct page *page = sg_page(sg);
+
+		BUG_ON(i >= npages);
+		for (j = 0; j < npages_this_entry; j++)
+			*(tmp++) = page++;
+	}
+	vaddr = vmap(pages, npages, VM_MAP, pgprot);
+	vfree(pages);
+
+	if (!vaddr)
+		return ERR_PTR(-ENOMEM);
+
+	return vaddr;
+}
+EXPORT_SYMBOL_GPL(ion_heap_map_kernel);
+
+void ion_heap_unmap_kernel(struct ion_heap *heap,
+			   struct ion_buffer *buffer)
+{
+	vunmap(buffer->vaddr);
+}
+EXPORT_SYMBOL_GPL(ion_heap_unmap_kernel);
+
+int ion_heap_map_user(struct ion_heap *heap, struct ion_buffer *buffer,
+		      struct vm_area_struct *vma)
+{
+	struct sg_table *table = buffer->sg_table;
+	unsigned long addr = vma->vm_start;
+	unsigned long offset = vma->vm_pgoff * PAGE_SIZE;
+	struct scatterlist *sg;
+	int i;
+	int ret;
+
+	for_each_sg(table->sgl, sg, table->nents, i) {
+		struct page *page = sg_page(sg);
+		unsigned long remainder = vma->vm_end - addr;
+		unsigned long len = sg->length;
+
+		if (offset >= sg->length) {
+			offset -= sg->length;
+			continue;
+		} else if (offset) {
+			page += offset / PAGE_SIZE;
+			len = sg->length - offset;
+			offset = 0;
+		}
+		len = min(len, remainder);
+		ret = remap_pfn_range(vma, addr, page_to_pfn(page), len,
+				      vma->vm_page_prot);
+		if (ret)
+			return ret;
+		addr += len;
+		if (addr >= vma->vm_end)
+			return 0;
+	}
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(ion_heap_map_user);
+
+void ion_heap_freelist_add(struct ion_heap *heap, struct ion_buffer *buffer)
+{
+	spin_lock(&heap->free_lock);
+	list_add(&buffer->list, &heap->free_list);
+	heap->free_list_size += buffer->size;
+	spin_unlock(&heap->free_lock);
+	wake_up(&heap->waitqueue);
+}
+
+size_t ion_heap_freelist_size(struct ion_heap *heap)
+{
+	size_t size;
+
+	spin_lock(&heap->free_lock);
+	size = heap->free_list_size;
+	spin_unlock(&heap->free_lock);
+
+	return size;
+}
+
+size_t ion_heap_freelist_drain(struct ion_heap *heap, size_t size)
+{
+	return _ion_heap_freelist_drain(heap, size, false);
+}
+
+size_t ion_heap_freelist_shrink(struct ion_heap *heap, size_t size)
+{
+	return _ion_heap_freelist_drain(heap, size, true);
+}
+
+int ion_heap_init_deferred_free(struct ion_heap *heap)
+{
+	struct sched_param param = { .sched_priority = 0 };
+
+	INIT_LIST_HEAD(&heap->free_list);
+	init_waitqueue_head(&heap->waitqueue);
+	heap->task = kthread_run(ion_heap_deferred_free, heap,
+				 "%s", heap->name);
+	if (IS_ERR(heap->task)) {
+		pr_err("%s: creating thread for deferred free failed\n",
+		       __func__);
+		return PTR_ERR_OR_ZERO(heap->task);
+	}
+	sched_setscheduler(heap->task, SCHED_IDLE, &param);
+
+	return 0;
+}
+
 int ion_heap_init_shrinker(struct ion_heap *heap)
 {
 	heap->shrinker.count_objects = ion_heap_shrink_count;
@@ -313,3 +262,32 @@ int ion_heap_init_shrinker(struct ion_heap *heap)
 
 	return register_shrinker(&heap->shrinker);
 }
+
+int ion_heap_cleanup(struct ion_heap *heap)
+{
+	int ret;
+
+	if (heap->flags & ION_HEAP_FLAG_DEFER_FREE &&
+	    !IS_ERR_OR_NULL(heap->task)) {
+		size_t free_list_size = ion_heap_freelist_size(heap);
+		size_t total_drained = ion_heap_freelist_drain(heap, 0);
+
+		if (total_drained != free_list_size) {
+			pr_err("%s: %s heap drained %zu bytes, requested %zu\n",
+			       __func__, heap->name, free_list_size,
+			       total_drained);
+			return -EBUSY;
+		}
+		ret = kthread_stop(heap->task);
+		if (ret < 0) {
+			pr_err("%s: failed to stop heap free thread\n",
+			       __func__);
+			return ret;
+		}
+	}
+
+	if ((heap->flags & ION_HEAP_FLAG_DEFER_FREE) || heap->ops->shrink)
+		unregister_shrinker(&heap->shrinker);
+
+	return 0;
+}
diff --git a/drivers/staging/android/ion/ion_page_pool.c b/drivers/staging/android/ion/ion_page_pool.c
deleted file mode 100644
index f85ec5b..0000000
--- a/drivers/staging/android/ion/ion_page_pool.c
+++ /dev/null
@@ -1,155 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * ION Memory Allocator page pool helpers
- *
- * Copyright (C) 2011 Google, Inc.
- */
-
-#include <linux/list.h>
-#include <linux/slab.h>
-#include <linux/swap.h>
-#include <linux/sched/signal.h>
-
-#include "ion.h"
-
-static inline struct page *ion_page_pool_alloc_pages(struct ion_page_pool *pool)
-{
-	if (fatal_signal_pending(current))
-		return NULL;
-	return alloc_pages(pool->gfp_mask, pool->order);
-}
-
-static void ion_page_pool_free_pages(struct ion_page_pool *pool,
-				     struct page *page)
-{
-	__free_pages(page, pool->order);
-}
-
-static void ion_page_pool_add(struct ion_page_pool *pool, struct page *page)
-{
-	mutex_lock(&pool->mutex);
-	if (PageHighMem(page)) {
-		list_add_tail(&page->lru, &pool->high_items);
-		pool->high_count++;
-	} else {
-		list_add_tail(&page->lru, &pool->low_items);
-		pool->low_count++;
-	}
-
-	mod_node_page_state(page_pgdat(page), NR_KERNEL_MISC_RECLAIMABLE,
-							1 << pool->order);
-	mutex_unlock(&pool->mutex);
-}
-
-static struct page *ion_page_pool_remove(struct ion_page_pool *pool, bool high)
-{
-	struct page *page;
-
-	if (high) {
-		BUG_ON(!pool->high_count);
-		page = list_first_entry(&pool->high_items, struct page, lru);
-		pool->high_count--;
-	} else {
-		BUG_ON(!pool->low_count);
-		page = list_first_entry(&pool->low_items, struct page, lru);
-		pool->low_count--;
-	}
-
-	list_del(&page->lru);
-	mod_node_page_state(page_pgdat(page), NR_KERNEL_MISC_RECLAIMABLE,
-							-(1 << pool->order));
-	return page;
-}
-
-struct page *ion_page_pool_alloc(struct ion_page_pool *pool)
-{
-	struct page *page = NULL;
-
-	BUG_ON(!pool);
-
-	mutex_lock(&pool->mutex);
-	if (pool->high_count)
-		page = ion_page_pool_remove(pool, true);
-	else if (pool->low_count)
-		page = ion_page_pool_remove(pool, false);
-	mutex_unlock(&pool->mutex);
-
-	if (!page)
-		page = ion_page_pool_alloc_pages(pool);
-
-	return page;
-}
-
-void ion_page_pool_free(struct ion_page_pool *pool, struct page *page)
-{
-	BUG_ON(pool->order != compound_order(page));
-
-	ion_page_pool_add(pool, page);
-}
-
-static int ion_page_pool_total(struct ion_page_pool *pool, bool high)
-{
-	int count = pool->low_count;
-
-	if (high)
-		count += pool->high_count;
-
-	return count << pool->order;
-}
-
-int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask,
-			 int nr_to_scan)
-{
-	int freed = 0;
-	bool high;
-
-	if (current_is_kswapd())
-		high = true;
-	else
-		high = !!(gfp_mask & __GFP_HIGHMEM);
-
-	if (nr_to_scan == 0)
-		return ion_page_pool_total(pool, high);
-
-	while (freed < nr_to_scan) {
-		struct page *page;
-
-		mutex_lock(&pool->mutex);
-		if (pool->low_count) {
-			page = ion_page_pool_remove(pool, false);
-		} else if (high && pool->high_count) {
-			page = ion_page_pool_remove(pool, true);
-		} else {
-			mutex_unlock(&pool->mutex);
-			break;
-		}
-		mutex_unlock(&pool->mutex);
-		ion_page_pool_free_pages(pool, page);
-		freed += (1 << pool->order);
-	}
-
-	return freed;
-}
-
-struct ion_page_pool *ion_page_pool_create(gfp_t gfp_mask, unsigned int order)
-{
-	struct ion_page_pool *pool = kmalloc(sizeof(*pool), GFP_KERNEL);
-
-	if (!pool)
-		return NULL;
-	pool->high_count = 0;
-	pool->low_count = 0;
-	INIT_LIST_HEAD(&pool->low_items);
-	INIT_LIST_HEAD(&pool->high_items);
-	pool->gfp_mask = gfp_mask | __GFP_COMP;
-	pool->order = order;
-	mutex_init(&pool->mutex);
-	plist_node_init(&pool->list, order);
-
-	return pool;
-}
-
-void ion_page_pool_destroy(struct ion_page_pool *pool)
-{
-	kfree(pool);
-}
diff --git a/drivers/staging/android/ion/ion_private.h b/drivers/staging/android/ion/ion_private.h
new file mode 100644
index 0000000..db4e906
--- /dev/null
+++ b/drivers/staging/android/ion/ion_private.h
@@ -0,0 +1,58 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * ION Memory Allocator - Internal header
+ *
+ * Copyright (C) 2019 Google, Inc.
+ */
+
+#ifndef _ION_PRIVATE_H
+#define _ION_PRIVATE_H
+
+#include <linux/dcache.h>
+#include <linux/dma-buf.h>
+#include <linux/ion.h>
+#include <linux/miscdevice.h>
+#include <linux/mutex.h>
+#include <linux/plist.h>
+#include <linux/rbtree.h>
+#include <linux/rwsem.h>
+#include <linux/types.h>
+
+/**
+ * struct ion_device - the metadata of the ion device node
+ * @dev:		the actual misc device
+ * @lock:		rwsem protecting the tree of heaps, heap_bitmap and
+ *			clients
+ * @heap_ids:		bitmap of register heap ids
+ */
+struct ion_device {
+	struct miscdevice dev;
+	struct rw_semaphore lock;
+	DECLARE_BITMAP(heap_ids, ION_NUM_MAX_HEAPS);
+	struct plist_head heaps;
+	struct dentry *debug_root;
+	int heap_cnt;
+};
+
+/* ion_buffer manipulators */
+extern struct ion_buffer *ion_buffer_alloc(struct ion_device *dev, size_t len,
+					   unsigned int heap_id_mask,
+					   unsigned int flags);
+extern void ion_buffer_release(struct ion_buffer *buffer);
+extern int ion_buffer_destroy(struct ion_device *dev,
+			      struct ion_buffer *buffer);
+extern void *ion_buffer_kmap_get(struct ion_buffer *buffer);
+extern void ion_buffer_kmap_put(struct ion_buffer *buffer);
+
+/* ion dmabuf allocator */
+extern struct dma_buf *ion_dmabuf_alloc(struct ion_device *dev, size_t len,
+					unsigned int heap_id_mask,
+					unsigned int flags);
+extern int ion_free(struct ion_buffer *buffer);
+
+/* ion heap helpers */
+extern int ion_heap_cleanup(struct ion_heap *heap);
+
+u64 ion_get_total_heap_bytes(void);
+
+#endif /* _ION_PRIVATE_H */
diff --git a/drivers/staging/android/ion/ion_system_heap.c b/drivers/staging/android/ion/ion_system_heap.c
deleted file mode 100644
index b83a1d1..0000000
--- a/drivers/staging/android/ion/ion_system_heap.c
+++ /dev/null
@@ -1,377 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * ION Memory Allocator system heap exporter
- *
- * Copyright (C) 2011 Google, Inc.
- */
-
-#include <asm/page.h>
-#include <linux/dma-mapping.h>
-#include <linux/err.h>
-#include <linux/highmem.h>
-#include <linux/mm.h>
-#include <linux/scatterlist.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-
-#include "ion.h"
-
-#define NUM_ORDERS ARRAY_SIZE(orders)
-
-static gfp_t high_order_gfp_flags = (GFP_HIGHUSER | __GFP_ZERO | __GFP_NOWARN |
-				     __GFP_NORETRY) & ~__GFP_RECLAIM;
-static gfp_t low_order_gfp_flags  = GFP_HIGHUSER | __GFP_ZERO;
-static const unsigned int orders[] = {8, 4, 0};
-
-static int order_to_index(unsigned int order)
-{
-	int i;
-
-	for (i = 0; i < NUM_ORDERS; i++)
-		if (order == orders[i])
-			return i;
-	BUG();
-	return -1;
-}
-
-static inline unsigned int order_to_size(int order)
-{
-	return PAGE_SIZE << order;
-}
-
-struct ion_system_heap {
-	struct ion_heap heap;
-	struct ion_page_pool *pools[NUM_ORDERS];
-};
-
-static struct page *alloc_buffer_page(struct ion_system_heap *heap,
-				      struct ion_buffer *buffer,
-				      unsigned long order)
-{
-	struct ion_page_pool *pool = heap->pools[order_to_index(order)];
-
-	return ion_page_pool_alloc(pool);
-}
-
-static void free_buffer_page(struct ion_system_heap *heap,
-			     struct ion_buffer *buffer, struct page *page)
-{
-	struct ion_page_pool *pool;
-	unsigned int order = compound_order(page);
-
-	/* go to system */
-	if (buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE) {
-		__free_pages(page, order);
-		return;
-	}
-
-	pool = heap->pools[order_to_index(order)];
-
-	ion_page_pool_free(pool, page);
-}
-
-static struct page *alloc_largest_available(struct ion_system_heap *heap,
-					    struct ion_buffer *buffer,
-					    unsigned long size,
-					    unsigned int max_order)
-{
-	struct page *page;
-	int i;
-
-	for (i = 0; i < NUM_ORDERS; i++) {
-		if (size < order_to_size(orders[i]))
-			continue;
-		if (max_order < orders[i])
-			continue;
-
-		page = alloc_buffer_page(heap, buffer, orders[i]);
-		if (!page)
-			continue;
-
-		return page;
-	}
-
-	return NULL;
-}
-
-static int ion_system_heap_allocate(struct ion_heap *heap,
-				    struct ion_buffer *buffer,
-				    unsigned long size,
-				    unsigned long flags)
-{
-	struct ion_system_heap *sys_heap = container_of(heap,
-							struct ion_system_heap,
-							heap);
-	struct sg_table *table;
-	struct scatterlist *sg;
-	struct list_head pages;
-	struct page *page, *tmp_page;
-	int i = 0;
-	unsigned long size_remaining = PAGE_ALIGN(size);
-	unsigned int max_order = orders[0];
-
-	if (size / PAGE_SIZE > totalram_pages() / 2)
-		return -ENOMEM;
-
-	INIT_LIST_HEAD(&pages);
-	while (size_remaining > 0) {
-		page = alloc_largest_available(sys_heap, buffer, size_remaining,
-					       max_order);
-		if (!page)
-			goto free_pages;
-		list_add_tail(&page->lru, &pages);
-		size_remaining -= page_size(page);
-		max_order = compound_order(page);
-		i++;
-	}
-	table = kmalloc(sizeof(*table), GFP_KERNEL);
-	if (!table)
-		goto free_pages;
-
-	if (sg_alloc_table(table, i, GFP_KERNEL))
-		goto free_table;
-
-	sg = table->sgl;
-	list_for_each_entry_safe(page, tmp_page, &pages, lru) {
-		sg_set_page(sg, page, page_size(page), 0);
-		sg = sg_next(sg);
-		list_del(&page->lru);
-	}
-
-	buffer->sg_table = table;
-	return 0;
-
-free_table:
-	kfree(table);
-free_pages:
-	list_for_each_entry_safe(page, tmp_page, &pages, lru)
-		free_buffer_page(sys_heap, buffer, page);
-	return -ENOMEM;
-}
-
-static void ion_system_heap_free(struct ion_buffer *buffer)
-{
-	struct ion_system_heap *sys_heap = container_of(buffer->heap,
-							struct ion_system_heap,
-							heap);
-	struct sg_table *table = buffer->sg_table;
-	struct scatterlist *sg;
-	int i;
-
-	/* zero the buffer before goto page pool */
-	if (!(buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE))
-		ion_heap_buffer_zero(buffer);
-
-	for_each_sg(table->sgl, sg, table->nents, i)
-		free_buffer_page(sys_heap, buffer, sg_page(sg));
-	sg_free_table(table);
-	kfree(table);
-}
-
-static int ion_system_heap_shrink(struct ion_heap *heap, gfp_t gfp_mask,
-				  int nr_to_scan)
-{
-	struct ion_page_pool *pool;
-	struct ion_system_heap *sys_heap;
-	int nr_total = 0;
-	int i, nr_freed;
-	int only_scan = 0;
-
-	sys_heap = container_of(heap, struct ion_system_heap, heap);
-
-	if (!nr_to_scan)
-		only_scan = 1;
-
-	for (i = 0; i < NUM_ORDERS; i++) {
-		pool = sys_heap->pools[i];
-
-		if (only_scan) {
-			nr_total += ion_page_pool_shrink(pool,
-							 gfp_mask,
-							 nr_to_scan);
-
-		} else {
-			nr_freed = ion_page_pool_shrink(pool,
-							gfp_mask,
-							nr_to_scan);
-			nr_to_scan -= nr_freed;
-			nr_total += nr_freed;
-			if (nr_to_scan <= 0)
-				break;
-		}
-	}
-	return nr_total;
-}
-
-static struct ion_heap_ops system_heap_ops = {
-	.allocate = ion_system_heap_allocate,
-	.free = ion_system_heap_free,
-	.map_kernel = ion_heap_map_kernel,
-	.unmap_kernel = ion_heap_unmap_kernel,
-	.map_user = ion_heap_map_user,
-	.shrink = ion_system_heap_shrink,
-};
-
-static void ion_system_heap_destroy_pools(struct ion_page_pool **pools)
-{
-	int i;
-
-	for (i = 0; i < NUM_ORDERS; i++)
-		if (pools[i])
-			ion_page_pool_destroy(pools[i]);
-}
-
-static int ion_system_heap_create_pools(struct ion_page_pool **pools)
-{
-	int i;
-
-	for (i = 0; i < NUM_ORDERS; i++) {
-		struct ion_page_pool *pool;
-		gfp_t gfp_flags = low_order_gfp_flags;
-
-		if (orders[i] > 4)
-			gfp_flags = high_order_gfp_flags;
-
-		pool = ion_page_pool_create(gfp_flags, orders[i]);
-		if (!pool)
-			goto err_create_pool;
-		pools[i] = pool;
-	}
-
-	return 0;
-
-err_create_pool:
-	ion_system_heap_destroy_pools(pools);
-	return -ENOMEM;
-}
-
-static struct ion_heap *__ion_system_heap_create(void)
-{
-	struct ion_system_heap *heap;
-
-	heap = kzalloc(sizeof(*heap), GFP_KERNEL);
-	if (!heap)
-		return ERR_PTR(-ENOMEM);
-	heap->heap.ops = &system_heap_ops;
-	heap->heap.type = ION_HEAP_TYPE_SYSTEM;
-	heap->heap.flags = ION_HEAP_FLAG_DEFER_FREE;
-
-	if (ion_system_heap_create_pools(heap->pools))
-		goto free_heap;
-
-	return &heap->heap;
-
-free_heap:
-	kfree(heap);
-	return ERR_PTR(-ENOMEM);
-}
-
-static int ion_system_heap_create(void)
-{
-	struct ion_heap *heap;
-
-	heap = __ion_system_heap_create();
-	if (IS_ERR(heap))
-		return PTR_ERR(heap);
-	heap->name = "ion_system_heap";
-
-	ion_device_add_heap(heap);
-
-	return 0;
-}
-device_initcall(ion_system_heap_create);
-
-static int ion_system_contig_heap_allocate(struct ion_heap *heap,
-					   struct ion_buffer *buffer,
-					   unsigned long len,
-					   unsigned long flags)
-{
-	int order = get_order(len);
-	struct page *page;
-	struct sg_table *table;
-	unsigned long i;
-	int ret;
-
-	page = alloc_pages(low_order_gfp_flags | __GFP_NOWARN, order);
-	if (!page)
-		return -ENOMEM;
-
-	split_page(page, order);
-
-	len = PAGE_ALIGN(len);
-	for (i = len >> PAGE_SHIFT; i < (1 << order); i++)
-		__free_page(page + i);
-
-	table = kmalloc(sizeof(*table), GFP_KERNEL);
-	if (!table) {
-		ret = -ENOMEM;
-		goto free_pages;
-	}
-
-	ret = sg_alloc_table(table, 1, GFP_KERNEL);
-	if (ret)
-		goto free_table;
-
-	sg_set_page(table->sgl, page, len, 0);
-
-	buffer->sg_table = table;
-
-	return 0;
-
-free_table:
-	kfree(table);
-free_pages:
-	for (i = 0; i < len >> PAGE_SHIFT; i++)
-		__free_page(page + i);
-
-	return ret;
-}
-
-static void ion_system_contig_heap_free(struct ion_buffer *buffer)
-{
-	struct sg_table *table = buffer->sg_table;
-	struct page *page = sg_page(table->sgl);
-	unsigned long pages = PAGE_ALIGN(buffer->size) >> PAGE_SHIFT;
-	unsigned long i;
-
-	for (i = 0; i < pages; i++)
-		__free_page(page + i);
-	sg_free_table(table);
-	kfree(table);
-}
-
-static struct ion_heap_ops kmalloc_ops = {
-	.allocate = ion_system_contig_heap_allocate,
-	.free = ion_system_contig_heap_free,
-	.map_kernel = ion_heap_map_kernel,
-	.unmap_kernel = ion_heap_unmap_kernel,
-	.map_user = ion_heap_map_user,
-};
-
-static struct ion_heap *__ion_system_contig_heap_create(void)
-{
-	struct ion_heap *heap;
-
-	heap = kzalloc(sizeof(*heap), GFP_KERNEL);
-	if (!heap)
-		return ERR_PTR(-ENOMEM);
-	heap->ops = &kmalloc_ops;
-	heap->type = ION_HEAP_TYPE_SYSTEM_CONTIG;
-	heap->name = "ion_system_contig_heap";
-
-	return heap;
-}
-
-static int ion_system_contig_heap_create(void)
-{
-	struct ion_heap *heap;
-
-	heap = __ion_system_contig_heap_create();
-	if (IS_ERR(heap))
-		return PTR_ERR(heap);
-
-	ion_device_add_heap(heap);
-
-	return 0;
-}
-device_initcall(ion_system_contig_heap_create);
diff --git a/drivers/staging/android/ion/ion_trace.h b/drivers/staging/android/ion/ion_trace.h
new file mode 100644
index 0000000..eacb47d
--- /dev/null
+++ b/drivers/staging/android/ion/ion_trace.h
@@ -0,0 +1,55 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * drivers/staging/android/ion/ion-trace.h
+ *
+ * Copyright (C) 2020 Google, Inc.
+ */
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM ion
+
+#if !defined(_ION_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _ION_TRACE_H
+
+#include <linux/tracepoint.h>
+
+#ifndef __ION_PTR_TO_HASHVAL
+static unsigned int __maybe_unused __ion_ptr_to_hash(const void *ptr)
+{
+	unsigned long hashval;
+
+	if (ptr_to_hashval(ptr, &hashval))
+		return 0;
+
+	/* The hashed value is only 32-bit */
+	return (unsigned int)hashval;
+}
+
+#define __ION_PTR_TO_HASHVAL
+#endif
+
+TRACE_EVENT(ion_stat,
+	    TP_PROTO(const void *addr, long len,
+		     unsigned long total_allocated),
+	    TP_ARGS(addr, len, total_allocated),
+	    TP_STRUCT__entry(__field(unsigned int, buffer_id)
+		__field(long, len)
+		__field(unsigned long, total_allocated)
+	    ),
+	    TP_fast_assign(__entry->buffer_id = __ion_ptr_to_hash(addr);
+		__entry->len = len;
+		__entry->total_allocated = total_allocated;
+	    ),
+	    TP_printk("buffer_id=%u len=%ldB total_allocated=%ldB",
+		      __entry->buffer_id,
+		      __entry->len,
+		      __entry->total_allocated)
+	    );
+
+#endif /* _ION_TRACE_H */
+
+/* This part must be outside protection */
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH .
+#define TRACE_INCLUDE_FILE ion_trace
+#include <trace/define_trace.h>
diff --git a/drivers/staging/android/uapi/ion.h b/drivers/staging/android/uapi/ion.h
deleted file mode 100644
index 46c93fc..0000000
--- a/drivers/staging/android/uapi/ion.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-/*
- * drivers/staging/android/uapi/ion.h
- *
- * Copyright (C) 2011 Google, Inc.
- */
-
-#ifndef _UAPI_LINUX_ION_H
-#define _UAPI_LINUX_ION_H
-
-#include <linux/ioctl.h>
-#include <linux/types.h>
-
-/**
- * enum ion_heap_types - list of all possible types of heaps
- * @ION_HEAP_TYPE_SYSTEM:	 memory allocated via vmalloc
- * @ION_HEAP_TYPE_SYSTEM_CONTIG: memory allocated via kmalloc
- * @ION_HEAP_TYPE_CARVEOUT:	 memory allocated from a prereserved
- *				 carveout heap, allocations are physically
- *				 contiguous
- * @ION_HEAP_TYPE_DMA:		 memory allocated via DMA API
- * @ION_NUM_HEAPS:		 helper for iterating over heaps, a bit mask
- *				 is used to identify the heaps, so only 32
- *				 total heap types are supported
- */
-enum ion_heap_type {
-	ION_HEAP_TYPE_SYSTEM,
-	ION_HEAP_TYPE_SYSTEM_CONTIG,
-	ION_HEAP_TYPE_CARVEOUT,
-	ION_HEAP_TYPE_CHUNK,
-	ION_HEAP_TYPE_DMA,
-	ION_HEAP_TYPE_CUSTOM, /*
-			       * must be last so device specific heaps always
-			       * are at the end of this enum
-			       */
-};
-
-#define ION_NUM_HEAP_IDS		(sizeof(unsigned int) * 8)
-
-/**
- * allocation flags - the lower 16 bits are used by core ion, the upper 16
- * bits are reserved for use by the heaps themselves.
- */
-
-/*
- * mappings of this buffer should be cached, ion will do cache maintenance
- * when the buffer is mapped for dma
- */
-#define ION_FLAG_CACHED 1
-
-/**
- * DOC: Ion Userspace API
- *
- * create a client by opening /dev/ion
- * most operations handled via following ioctls
- *
- */
-
-/**
- * struct ion_allocation_data - metadata passed from userspace for allocations
- * @len:		size of the allocation
- * @heap_id_mask:	mask of heap ids to allocate from
- * @flags:		flags passed to heap
- * @handle:		pointer that will be populated with a cookie to use to
- *			refer to this allocation
- *
- * Provided by userspace as an argument to the ioctl
- */
-struct ion_allocation_data {
-	__u64 len;
-	__u32 heap_id_mask;
-	__u32 flags;
-	__u32 fd;
-	__u32 unused;
-};
-
-#define MAX_HEAP_NAME			32
-
-/**
- * struct ion_heap_data - data about a heap
- * @name - first 32 characters of the heap name
- * @type - heap type
- * @heap_id - heap id for the heap
- */
-struct ion_heap_data {
-	char name[MAX_HEAP_NAME];
-	__u32 type;
-	__u32 heap_id;
-	__u32 reserved0;
-	__u32 reserved1;
-	__u32 reserved2;
-};
-
-/**
- * struct ion_heap_query - collection of data about all heaps
- * @cnt - total number of heaps to be copied
- * @heaps - buffer to copy heap data
- */
-struct ion_heap_query {
-	__u32 cnt; /* Total number of heaps to be copied */
-	__u32 reserved0; /* align to 64bits */
-	__u64 heaps; /* buffer to be populated */
-	__u32 reserved1;
-	__u32 reserved2;
-};
-
-#define ION_IOC_MAGIC		'I'
-
-/**
- * DOC: ION_IOC_ALLOC - allocate memory
- *
- * Takes an ion_allocation_data struct and returns it with the handle field
- * populated with the opaque handle for the allocation.
- */
-#define ION_IOC_ALLOC		_IOWR(ION_IOC_MAGIC, 0, \
-				      struct ion_allocation_data)
-
-/**
- * DOC: ION_IOC_HEAP_QUERY - information about available heaps
- *
- * Takes an ion_heap_query structure and populates information about
- * available Ion heaps.
- */
-#define ION_IOC_HEAP_QUERY     _IOWR(ION_IOC_MAGIC, 8, \
-					struct ion_heap_query)
-
-#endif /* _UAPI_LINUX_ION_H */
diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
index 001a21a..f08f465 100644
--- a/drivers/thermal/Kconfig
+++ b/drivers/thermal/Kconfig
@@ -108,7 +108,7 @@
 
 config THERMAL_DEFAULT_GOV_POWER_ALLOCATOR
 	bool "power_allocator"
-	select THERMAL_GOV_POWER_ALLOCATOR
+	depends on THERMAL_GOV_POWER_ALLOCATOR
 	help
 	  Select this if you want to control temperature based on
 	  system and device power allocation. This governor can only
@@ -417,4 +417,11 @@
 	  Enable this to plug in UniPhier on-chip PVT thermal driver into the
 	  thermal framework. The driver supports CPU thermal zone temperature
 	  reporting and a couple of trip points.
+
+config SPRD_THERMAL
+	tristate "Temperature sensor on Spreadtrum SoCs"
+	depends on ARCH_SPRD || COMPILE_TEST
+	help
+	  Support for the Spreadtrum thermal sensor driver in the Linux thermal
+	  framework.
 endif
diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
index 74a37c7..ef4c032 100644
--- a/drivers/thermal/Makefile
+++ b/drivers/thermal/Makefile
@@ -54,3 +54,4 @@
 obj-$(CONFIG_GENERIC_ADC_THERMAL)	+= thermal-generic-adc.o
 obj-$(CONFIG_ZX2967_THERMAL)	+= zx2967_thermal.o
 obj-$(CONFIG_UNIPHIER_THERMAL)	+= uniphier_thermal.o
+obj-$(CONFIG_SPRD_THERMAL)	+= sprd_thermal.o
diff --git a/drivers/thermal/sprd_thermal.c b/drivers/thermal/sprd_thermal.c
new file mode 100644
index 0000000..4cde70d
--- /dev/null
+++ b/drivers/thermal/sprd_thermal.c
@@ -0,0 +1,552 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (C) 2020 Spreadtrum Communications Inc.
+
+#include <linux/clk.h>
+#include <linux/io.h>
+#include <linux/iopoll.h>
+#include <linux/module.h>
+#include <linux/nvmem-consumer.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
+#include <linux/slab.h>
+#include <linux/thermal.h>
+
+#define SPRD_THM_CTL			0x0
+#define SPRD_THM_INT_EN			0x4
+#define SPRD_THM_INT_STS		0x8
+#define SPRD_THM_INT_RAW_STS		0xc
+#define SPRD_THM_DET_PERIOD		0x10
+#define SPRD_THM_INT_CLR		0x14
+#define SPRD_THM_INT_CLR_ST		0x18
+#define SPRD_THM_MON_PERIOD		0x4c
+#define SPRD_THM_MON_CTL		0x50
+#define SPRD_THM_INTERNAL_STS1		0x54
+#define SPRD_THM_RAW_READ_MSK		0x3ff
+
+#define SPRD_THM_OFFSET(id)		((id) * 0x4)
+#define SPRD_THM_TEMP(id)		(SPRD_THM_OFFSET(id) + 0x5c)
+#define SPRD_THM_THRES(id)		(SPRD_THM_OFFSET(id) + 0x2c)
+
+#define SPRD_THM_SEN(id)		BIT((id) + 2)
+#define SPRD_THM_SEN_OVERHEAT_EN(id)	BIT((id) + 8)
+#define SPRD_THM_SEN_OVERHEAT_ALARM_EN(id)	BIT((id) + 0)
+
+/* bits definitions for register THM_CTL */
+#define SPRD_THM_SET_RDY_ST		BIT(13)
+#define SPRD_THM_SET_RDY		BIT(12)
+#define SPRD_THM_MON_EN			BIT(1)
+#define SPRD_THM_EN			BIT(0)
+
+/* bits definitions for register THM_INT_CTL */
+#define SPRD_THM_BIT_INT_EN		BIT(26)
+#define SPRD_THM_OVERHEAT_EN		BIT(25)
+#define SPRD_THM_OTP_TRIP_SHIFT		10
+
+/* bits definitions for register SPRD_THM_INTERNAL_STS1 */
+#define SPRD_THM_TEMPER_RDY		BIT(0)
+
+#define SPRD_THM_DET_PERIOD_DATA	0x800
+#define SPRD_THM_DET_PERIOD_MASK	GENMASK(19, 0)
+#define SPRD_THM_MON_MODE		0x7
+#define SPRD_THM_MON_MODE_MASK		GENMASK(3, 0)
+#define SPRD_THM_MON_PERIOD_DATA	0x10
+#define SPRD_THM_MON_PERIOD_MASK	GENMASK(15, 0)
+#define SPRD_THM_THRES_MASK		GENMASK(19, 0)
+#define SPRD_THM_INT_CLR_MASK		GENMASK(24, 0)
+
+/* thermal sensor calibration parameters */
+#define SPRD_THM_TEMP_LOW		-40000
+#define SPRD_THM_TEMP_HIGH		120000
+#define SPRD_THM_OTP_TEMP		120000
+#define SPRD_THM_HOT_TEMP		75000
+#define SPRD_THM_RAW_DATA_LOW		0
+#define SPRD_THM_RAW_DATA_HIGH		1000
+#define SPRD_THM_SEN_NUM		8
+#define SPRD_THM_DT_OFFSET		24
+#define SPRD_THM_RATION_OFFSET		17
+#define SPRD_THM_RATION_SIGN		16
+
+#define SPRD_THM_RDYST_POLLING_TIME	10
+#define SPRD_THM_RDYST_TIMEOUT		700
+#define SPRD_THM_TEMP_READY_POLL_TIME	10000
+#define SPRD_THM_TEMP_READY_TIMEOUT	600000
+#define SPRD_THM_MAX_SENSOR		8
+
+struct sprd_thermal_sensor {
+	struct thermal_zone_device *tzd;
+	struct sprd_thermal_data *data;
+	struct device *dev;
+	int cal_slope;
+	int cal_offset;
+	int id;
+};
+
+struct sprd_thermal_data {
+	const struct sprd_thm_variant_data *var_data;
+	struct sprd_thermal_sensor *sensor[SPRD_THM_MAX_SENSOR];
+	struct clk *clk;
+	void __iomem *base;
+	u32 ratio_off;
+	int ratio_sign;
+	int nr_sensors;
+};
+
+/*
+ * The conversion between ADC and temperature is based on linear relationship,
+ * and use idea_k to specify the slope and ideal_b to specify the offset.
+ *
+ * Since different Spreadtrum SoCs have different ideal_k and ideal_b,
+ * we should save ideal_k and ideal_b in the device data structure.
+ */
+struct sprd_thm_variant_data {
+	u32 ideal_k;
+	u32 ideal_b;
+};
+
+static const struct sprd_thm_variant_data ums512_data = {
+	.ideal_k = 262,
+	.ideal_b = 66400,
+};
+
+static inline void sprd_thm_update_bits(void __iomem *reg, u32 mask, u32 val)
+{
+	u32 tmp, orig;
+
+	orig = readl(reg);
+	tmp = orig & ~mask;
+	tmp |= val & mask;
+	writel(tmp, reg);
+}
+
+static int sprd_thm_cal_read(struct device_node *np, const char *cell_id,
+			     u32 *val)
+{
+	struct nvmem_cell *cell;
+	void *buf;
+	size_t len;
+
+	cell = of_nvmem_cell_get(np, cell_id);
+	if (IS_ERR(cell))
+		return PTR_ERR(cell);
+
+	buf = nvmem_cell_read(cell, &len);
+	nvmem_cell_put(cell);
+	if (IS_ERR(buf))
+		return PTR_ERR(buf);
+
+	if (len > sizeof(u32)) {
+		kfree(buf);
+		return -EINVAL;
+	}
+
+	memcpy(val, buf, len);
+
+	kfree(buf);
+	return 0;
+}
+
+static int sprd_thm_sensor_calibration(struct device_node *np,
+				       struct sprd_thermal_data *thm,
+				       struct sprd_thermal_sensor *sen)
+{
+	int ret;
+	/*
+	 * According to thermal datasheet, the default calibration offset is 64,
+	 * and the default ratio is 1000.
+	 */
+	int dt_offset = 64, ratio = 1000;
+
+	ret = sprd_thm_cal_read(np, "sen_delta_cal", &dt_offset);
+	if (ret)
+		return ret;
+
+	ratio += thm->ratio_sign * thm->ratio_off;
+
+	/*
+	 * According to the ideal slope K and ideal offset B, combined with
+	 * calibration value of thermal from efuse, then calibrate the real
+	 * slope k and offset b:
+	 * k_cal = (k * ratio) / 1000.
+	 * b_cal = b + (dt_offset - 64) * 500.
+	 */
+	sen->cal_slope = (thm->var_data->ideal_k * ratio) / 1000;
+	sen->cal_offset = thm->var_data->ideal_b + (dt_offset - 128) * 250;
+
+	return 0;
+}
+
+static int sprd_thm_rawdata_to_temp(struct sprd_thermal_sensor *sen,
+				    u32 rawdata)
+{
+	clamp(rawdata, (u32)SPRD_THM_RAW_DATA_LOW, (u32)SPRD_THM_RAW_DATA_HIGH);
+
+	/*
+	 * According to the thermal datasheet, the formula of converting
+	 * adc value to the temperature value should be:
+	 * T_final = k_cal * x - b_cal.
+	 */
+	return sen->cal_slope * rawdata - sen->cal_offset;
+}
+
+static int sprd_thm_temp_to_rawdata(int temp, struct sprd_thermal_sensor *sen)
+{
+	u32 val;
+
+	clamp(temp, (int)SPRD_THM_TEMP_LOW, (int)SPRD_THM_TEMP_HIGH);
+
+	/*
+	 * According to the thermal datasheet, the formula of converting
+	 * adc value to the temperature value should be:
+	 * T_final = k_cal * x - b_cal.
+	 */
+	val = (temp + sen->cal_offset) / sen->cal_slope;
+
+	return clamp(val, val, (u32)(SPRD_THM_RAW_DATA_HIGH - 1));
+}
+
+static int sprd_thm_read_temp(void *devdata, int *temp)
+{
+	struct sprd_thermal_sensor *sen = devdata;
+	u32 data;
+
+	data = readl(sen->data->base + SPRD_THM_TEMP(sen->id)) &
+		SPRD_THM_RAW_READ_MSK;
+
+	*temp = sprd_thm_rawdata_to_temp(sen, data);
+
+	return 0;
+}
+
+static const struct thermal_zone_of_device_ops sprd_thm_ops = {
+	.get_temp = sprd_thm_read_temp,
+};
+
+static int sprd_thm_poll_ready_status(struct sprd_thermal_data *thm)
+{
+	u32 val;
+	int ret;
+
+	/*
+	 * Wait for thermal ready status before configuring thermal parameters.
+	 */
+	ret = readl_poll_timeout(thm->base + SPRD_THM_CTL, val,
+				 !(val & SPRD_THM_SET_RDY_ST),
+				 SPRD_THM_RDYST_POLLING_TIME,
+				 SPRD_THM_RDYST_TIMEOUT);
+	if (ret)
+		return ret;
+
+	sprd_thm_update_bits(thm->base + SPRD_THM_CTL, SPRD_THM_MON_EN,
+			     SPRD_THM_MON_EN);
+	sprd_thm_update_bits(thm->base + SPRD_THM_CTL, SPRD_THM_SET_RDY,
+			     SPRD_THM_SET_RDY);
+	return 0;
+}
+
+static int sprd_thm_wait_temp_ready(struct sprd_thermal_data *thm)
+{
+	u32 val;
+
+	/* Wait for first temperature data ready before reading temperature */
+	return readl_poll_timeout(thm->base + SPRD_THM_INTERNAL_STS1, val,
+				  !(val & SPRD_THM_TEMPER_RDY),
+				  SPRD_THM_TEMP_READY_POLL_TIME,
+				  SPRD_THM_TEMP_READY_TIMEOUT);
+}
+
+static int sprd_thm_set_ready(struct sprd_thermal_data *thm)
+{
+	int ret;
+
+	ret = sprd_thm_poll_ready_status(thm);
+	if (ret)
+		return ret;
+
+	/*
+	 * Clear interrupt status, enable thermal interrupt and enable thermal.
+	 *
+	 * The SPRD thermal controller integrates a hardware interrupt signal,
+	 * which means if the temperature is overheat, it will generate an
+	 * interrupt and notify the event to PMIC automatically to shutdown the
+	 * system. So here we should enable the interrupt bits, though we have
+	 * not registered an irq handler.
+	 */
+	writel(SPRD_THM_INT_CLR_MASK, thm->base + SPRD_THM_INT_CLR);
+	sprd_thm_update_bits(thm->base + SPRD_THM_INT_EN,
+			     SPRD_THM_BIT_INT_EN, SPRD_THM_BIT_INT_EN);
+	sprd_thm_update_bits(thm->base + SPRD_THM_CTL,
+			     SPRD_THM_EN, SPRD_THM_EN);
+	return 0;
+}
+
+static void sprd_thm_sensor_init(struct sprd_thermal_data *thm,
+				 struct sprd_thermal_sensor *sen)
+{
+	u32 otp_rawdata, hot_rawdata;
+
+	otp_rawdata = sprd_thm_temp_to_rawdata(SPRD_THM_OTP_TEMP, sen);
+	hot_rawdata = sprd_thm_temp_to_rawdata(SPRD_THM_HOT_TEMP, sen);
+
+	/* Enable the sensor' overheat temperature protection interrupt */
+	sprd_thm_update_bits(thm->base + SPRD_THM_INT_EN,
+			     SPRD_THM_SEN_OVERHEAT_ALARM_EN(sen->id),
+			     SPRD_THM_SEN_OVERHEAT_ALARM_EN(sen->id));
+
+	/* Set the sensor' overheat and hot threshold temperature */
+	sprd_thm_update_bits(thm->base + SPRD_THM_THRES(sen->id),
+			     SPRD_THM_THRES_MASK,
+			     (otp_rawdata << SPRD_THM_OTP_TRIP_SHIFT) |
+			     hot_rawdata);
+
+	/* Enable the corresponding sensor */
+	sprd_thm_update_bits(thm->base + SPRD_THM_CTL, SPRD_THM_SEN(sen->id),
+			     SPRD_THM_SEN(sen->id));
+}
+
+static void sprd_thm_para_config(struct sprd_thermal_data *thm)
+{
+	/* Set the period of two valid temperature detection action */
+	sprd_thm_update_bits(thm->base + SPRD_THM_DET_PERIOD,
+			     SPRD_THM_DET_PERIOD_MASK, SPRD_THM_DET_PERIOD);
+
+	/* Set the sensors' monitor mode */
+	sprd_thm_update_bits(thm->base + SPRD_THM_MON_CTL,
+			     SPRD_THM_MON_MODE_MASK, SPRD_THM_MON_MODE);
+
+	/* Set the sensors' monitor period */
+	sprd_thm_update_bits(thm->base + SPRD_THM_MON_PERIOD,
+			     SPRD_THM_MON_PERIOD_MASK, SPRD_THM_MON_PERIOD);
+}
+
+static void sprd_thm_toggle_sensor(struct sprd_thermal_sensor *sen, bool on)
+{
+	struct thermal_zone_device *tzd = sen->tzd;
+
+	tzd->ops->set_mode(tzd,
+		on ? THERMAL_DEVICE_ENABLED : THERMAL_DEVICE_DISABLED);
+}
+
+static int sprd_thm_probe(struct platform_device *pdev)
+{
+	struct device_node *np = pdev->dev.of_node;
+	struct device_node *sen_child;
+	struct sprd_thermal_data *thm;
+	struct sprd_thermal_sensor *sen;
+	const struct sprd_thm_variant_data *pdata;
+	int ret, i;
+	u32 val;
+
+	pdata = of_device_get_match_data(&pdev->dev);
+	if (!pdata) {
+		dev_err(&pdev->dev, "No matching driver data found\n");
+		return -EINVAL;
+	}
+
+	thm = devm_kzalloc(&pdev->dev, sizeof(*thm), GFP_KERNEL);
+	if (!thm)
+		return -ENOMEM;
+
+	thm->var_data = pdata;
+	thm->base = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(thm->base))
+		return PTR_ERR(thm->base);
+
+	thm->nr_sensors = of_get_child_count(np);
+	if (thm->nr_sensors == 0 || thm->nr_sensors > SPRD_THM_MAX_SENSOR) {
+		dev_err(&pdev->dev, "incorrect sensor count\n");
+		return -EINVAL;
+	}
+
+	thm->clk = devm_clk_get(&pdev->dev, "enable");
+	if (IS_ERR(thm->clk)) {
+		dev_err(&pdev->dev, "failed to get enable clock\n");
+		return PTR_ERR(thm->clk);
+	}
+
+	ret = clk_prepare_enable(thm->clk);
+	if (ret)
+		return ret;
+
+	sprd_thm_para_config(thm);
+
+	ret = sprd_thm_cal_read(np, "thm_sign_cal", &val);
+	if (ret)
+		goto disable_clk;
+
+	if (val > 0)
+		thm->ratio_sign = -1;
+	else
+		thm->ratio_sign = 1;
+
+	ret = sprd_thm_cal_read(np, "thm_ratio_cal", &thm->ratio_off);
+	if (ret)
+		goto disable_clk;
+
+	for_each_child_of_node(np, sen_child) {
+		sen = devm_kzalloc(&pdev->dev, sizeof(*sen), GFP_KERNEL);
+		if (!sen) {
+			ret = -ENOMEM;
+			goto disable_clk;
+		}
+
+		sen->data = thm;
+		sen->dev = &pdev->dev;
+
+		ret = of_property_read_u32(sen_child, "reg", &sen->id);
+		if (ret) {
+			dev_err(&pdev->dev, "get sensor reg failed");
+			goto disable_clk;
+		}
+
+		ret = sprd_thm_sensor_calibration(sen_child, thm, sen);
+		if (ret) {
+			dev_err(&pdev->dev, "efuse cal analysis failed");
+			goto disable_clk;
+		}
+
+		sprd_thm_sensor_init(thm, sen);
+
+		sen->tzd = devm_thermal_zone_of_sensor_register(sen->dev,
+								sen->id,
+								sen,
+								&sprd_thm_ops);
+		if (IS_ERR(sen->tzd)) {
+			dev_err(&pdev->dev, "register thermal zone failed %d\n",
+				sen->id);
+			ret = PTR_ERR(sen->tzd);
+			goto disable_clk;
+		}
+
+		thm->sensor[sen->id] = sen;
+	}
+
+	ret = sprd_thm_set_ready(thm);
+	if (ret)
+		goto disable_clk;
+
+	ret = sprd_thm_wait_temp_ready(thm);
+	if (ret)
+		goto disable_clk;
+
+	for (i = 0; i < thm->nr_sensors; i++)
+		sprd_thm_toggle_sensor(thm->sensor[i], true);
+
+	platform_set_drvdata(pdev, thm);
+	return 0;
+
+disable_clk:
+	clk_disable_unprepare(thm->clk);
+	return ret;
+}
+
+#ifdef CONFIG_PM_SLEEP
+static void sprd_thm_hw_suspend(struct sprd_thermal_data *thm)
+{
+	int i;
+
+	for (i = 0; i < thm->nr_sensors; i++) {
+		sprd_thm_update_bits(thm->base + SPRD_THM_CTL,
+				     SPRD_THM_SEN(thm->sensor[i]->id), 0);
+	}
+
+	sprd_thm_update_bits(thm->base + SPRD_THM_CTL,
+			     SPRD_THM_EN, 0x0);
+}
+
+static int sprd_thm_suspend(struct device *dev)
+{
+	struct sprd_thermal_data *thm = dev_get_drvdata(dev);
+	int i;
+
+	for (i = 0; i < thm->nr_sensors; i++)
+		sprd_thm_toggle_sensor(thm->sensor[i], false);
+
+	sprd_thm_hw_suspend(thm);
+	clk_disable_unprepare(thm->clk);
+
+	return 0;
+}
+
+static int sprd_thm_hw_resume(struct sprd_thermal_data *thm)
+{
+	int ret, i;
+
+	for (i = 0; i < thm->nr_sensors; i++) {
+		sprd_thm_update_bits(thm->base + SPRD_THM_CTL,
+				     SPRD_THM_SEN(thm->sensor[i]->id),
+				     SPRD_THM_SEN(thm->sensor[i]->id));
+	}
+
+	ret = sprd_thm_poll_ready_status(thm);
+	if (ret)
+		return ret;
+
+	writel(SPRD_THM_INT_CLR_MASK, thm->base + SPRD_THM_INT_CLR);
+	sprd_thm_update_bits(thm->base + SPRD_THM_CTL,
+			     SPRD_THM_EN, SPRD_THM_EN);
+	return sprd_thm_wait_temp_ready(thm);
+}
+
+static int sprd_thm_resume(struct device *dev)
+{
+	struct sprd_thermal_data *thm = dev_get_drvdata(dev);
+	int ret, i;
+
+	ret = clk_prepare_enable(thm->clk);
+	if (ret)
+		return ret;
+
+	ret = sprd_thm_hw_resume(thm);
+	if (ret)
+		goto disable_clk;
+
+	for (i = 0; i < thm->nr_sensors; i++)
+		sprd_thm_toggle_sensor(thm->sensor[i], true);
+
+	return 0;
+
+disable_clk:
+	clk_disable_unprepare(thm->clk);
+	return ret;
+}
+#endif
+
+static int sprd_thm_remove(struct platform_device *pdev)
+{
+	struct sprd_thermal_data *thm = platform_get_drvdata(pdev);
+	int i;
+
+	for (i = 0; i < thm->nr_sensors; i++) {
+		sprd_thm_toggle_sensor(thm->sensor[i], false);
+		devm_thermal_zone_of_sensor_unregister(&pdev->dev,
+						       thm->sensor[i]->tzd);
+	}
+
+	clk_disable_unprepare(thm->clk);
+	return 0;
+}
+
+static const struct of_device_id sprd_thermal_of_match[] = {
+	{ .compatible = "sprd,ums512-thermal", .data = &ums512_data },
+	{ },
+};
+
+static const struct dev_pm_ops sprd_thermal_pm_ops = {
+	SET_SYSTEM_SLEEP_PM_OPS(sprd_thm_suspend, sprd_thm_resume)
+};
+
+static struct platform_driver sprd_thermal_driver = {
+	.probe = sprd_thm_probe,
+	.remove = sprd_thm_remove,
+	.driver = {
+		.name = "sprd-thermal",
+		.pm = &sprd_thermal_pm_ops,
+		.of_match_table = sprd_thermal_of_match,
+	},
+};
+
+module_platform_driver(sprd_thermal_driver);
+
+MODULE_AUTHOR("Freeman Liu <freeman.liu@unisoc.com>");
+MODULE_DESCRIPTION("Spreadtrum thermal driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/tty/hvc/hvc_console.h b/drivers/tty/hvc/hvc_console.h
index e931995..e092b8b 100644
--- a/drivers/tty/hvc/hvc_console.h
+++ b/drivers/tty/hvc/hvc_console.h
@@ -30,7 +30,7 @@
  * for the tty device.  Since this driver supports hotplug of vty adapters we
  * need to make sure we have enough allocated.
  */
-#define HVC_ALLOC_TTY_ADAPTERS	8
+#define HVC_ALLOC_TTY_ADAPTERS	64
 
 struct hvc_struct {
 	struct tty_port port;
diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
index a971985..3ed2fdbd 100644
--- a/drivers/tty/serdev/core.c
+++ b/drivers/tty/serdev/core.c
@@ -31,7 +31,18 @@ static ssize_t modalias_show(struct device *dev,
 	if (len != -ENODEV)
 		return len;
 
-	return of_device_modalias(dev, buf, PAGE_SIZE);
+	len = of_device_modalias(dev, buf, PAGE_SIZE);
+	if (len != -ENODEV)
+		return len;
+
+	if (dev->parent->parent->bus == &platform_bus_type) {
+		struct platform_device *pdev =
+			to_platform_device(dev->parent->parent);
+
+		len = snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name);
+	}
+
+	return len;
 }
 static DEVICE_ATTR_RO(modalias);
 
@@ -45,13 +56,18 @@ static int serdev_device_uevent(struct device *dev, struct kobj_uevent_env *env)
 {
 	int rc;
 
-	/* TODO: platform modalias */
-
 	rc = acpi_device_uevent_modalias(dev, env);
 	if (rc != -ENODEV)
 		return rc;
 
-	return of_device_uevent_modalias(dev, env);
+	rc = of_device_uevent_modalias(dev, env);
+	if (rc != -ENODEV)
+		return rc;
+
+	if (dev->parent->parent->bus == &platform_bus_type)
+		rc = dev->parent->parent->bus->uevent(dev->parent->parent, env);
+
+	return rc;
 }
 
 static void serdev_device_release(struct device *dev)
@@ -87,11 +103,17 @@ static int serdev_device_match(struct device *dev, struct device_driver *drv)
 	if (!is_serdev_device(dev))
 		return 0;
 
-	/* TODO: platform matching */
 	if (acpi_driver_match_device(dev, drv))
 		return 1;
 
-	return of_driver_match_device(dev, drv);
+	if (of_driver_match_device(dev, drv))
+		return 1;
+
+	if (dev->parent->parent->bus == &platform_bus_type &&
+	    dev->parent->parent->bus->match(dev->parent->parent, drv))
+		return 1;
+
+	return 0;
 }
 
 /**
@@ -630,16 +652,45 @@ static inline int acpi_serdev_register_devices(struct serdev_controller *ctrl)
 }
 #endif /* CONFIG_ACPI */
 
+static int platform_serdev_register_devices(struct serdev_controller *ctrl)
+{
+	struct serdev_device *serdev;
+	int err;
+
+	if (ctrl->dev.parent->bus != &platform_bus_type)
+		return -ENODEV;
+
+	serdev = serdev_device_alloc(ctrl);
+	if (!serdev) {
+		dev_err(&ctrl->dev, "failed to allocate serdev device for %s\n",
+				    dev_name(ctrl->dev.parent));
+		return -ENOMEM;
+	}
+
+	pm_runtime_no_callbacks(&serdev->dev);
+
+	err = serdev_device_add(serdev);
+	if (err) {
+		dev_err(&serdev->dev,
+			"failure adding device. status %d\n", err);
+		serdev_device_put(serdev);
+	}
+
+	return err;
+}
+
+
 /**
- * serdev_controller_add() - Add an serdev controller
+ * serdev_controller_add_platform() - Add an serdev controller
  * @ctrl:	controller to be registered.
+ * @platform:	whether to permit fallthrough to platform device probe
  *
  * Register a controller previously allocated via serdev_controller_alloc() with
- * the serdev core.
+ * the serdev core. Optionally permit probing via a platform device fallback.
  */
-int serdev_controller_add(struct serdev_controller *ctrl)
+int serdev_controller_add_platform(struct serdev_controller *ctrl, bool platform)
 {
-	int ret_of, ret_acpi, ret;
+	int ret, ret_of, ret_acpi, ret_platform = -ENODEV;
 
 	/* Can't register until after driver model init */
 	if (WARN_ON(!is_registered))
@@ -653,9 +704,12 @@ int serdev_controller_add(struct serdev_controller *ctrl)
 
 	ret_of = of_serdev_register_devices(ctrl);
 	ret_acpi = acpi_serdev_register_devices(ctrl);
-	if (ret_of && ret_acpi) {
-		dev_dbg(&ctrl->dev, "no devices registered: of:%d acpi:%d\n",
-			ret_of, ret_acpi);
+	if (platform)
+		ret_platform = platform_serdev_register_devices(ctrl);
+	if (ret_of && ret_acpi && ret_platform) {
+		dev_dbg(&ctrl->dev, "no devices registered: of:%d acpi:%d "
+				    "platform:%d\n",
+				    ret_of, ret_acpi, ret_platform);
 		ret = -ENODEV;
 		goto err_rpm_disable;
 	}
@@ -669,7 +723,7 @@ int serdev_controller_add(struct serdev_controller *ctrl)
 	device_del(&ctrl->dev);
 	return ret;
 };
-EXPORT_SYMBOL_GPL(serdev_controller_add);
+EXPORT_SYMBOL_GPL(serdev_controller_add_platform);
 
 /* Remove a device associated with a controller */
 static int serdev_remove_device(struct device *dev, void *data)
diff --git a/drivers/tty/serdev/serdev-ttyport.c b/drivers/tty/serdev/serdev-ttyport.c
index d367803e..6cdffde 100644
--- a/drivers/tty/serdev/serdev-ttyport.c
+++ b/drivers/tty/serdev/serdev-ttyport.c
@@ -7,9 +7,15 @@
 #include <linux/tty.h>
 #include <linux/tty_driver.h>
 #include <linux/poll.h>
+#include <linux/platform_device.h>
+#include <linux/module.h>
 
 #define SERPORT_ACTIVE		1
 
+static char *pdev_tty_port;
+module_param(pdev_tty_port, charp, 0644);
+MODULE_PARM_DESC(pdev_tty_port, "platform device tty port to claim");
+
 struct serport {
 	struct tty_port *port;
 	struct tty_struct *tty;
@@ -267,6 +273,7 @@ struct device *serdev_tty_port_register(struct tty_port *port,
 {
 	struct serdev_controller *ctrl;
 	struct serport *serport;
+	bool platform = false;
 	int ret;
 
 	if (!port || !drv || !parent)
@@ -286,7 +293,28 @@ struct device *serdev_tty_port_register(struct tty_port *port,
 	port->client_ops = &client_ops;
 	port->client_data = ctrl;
 
-	ret = serdev_controller_add(ctrl);
+	/* There is not always a way to bind specific platform devices because
+	 * they may be defined on platforms without DT or ACPI. When dealing
+	 * with a platform devices, do not allow direct binding unless it is
+	 * whitelisted by module parameter. If a platform device is otherwise
+	 * described by DT or ACPI it will still be bound and this check will
+	 * be ignored.
+	 */
+	if (parent->bus == &platform_bus_type) {
+		if (pdev_tty_port) {
+			unsigned long pdev_idx;
+			int tty_len = strlen(drv->name);
+
+			if (!strncmp(pdev_tty_port, drv->name, tty_len)) {
+				if (!kstrtoul(pdev_tty_port + tty_len, 10,
+					     &pdev_idx) && pdev_idx == idx) {
+					platform = true;
+				}
+			}
+		}
+	}
+
+	ret = serdev_controller_add_platform(ctrl, platform);
 	if (ret)
 		goto err_reset_data;
 
diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
index a9751a8..b1254c0 100644
--- a/drivers/tty/serial/Kconfig
+++ b/drivers/tty/serial/Kconfig
@@ -238,7 +238,6 @@
 
 config SERIAL_SAMSUNG
 	tristate "Samsung SoC serial support"
-	depends on PLAT_SAMSUNG || ARCH_EXYNOS
 	select SERIAL_CORE
 	help
 	  Support for the on-chip UARTs on the Samsung S3C24XX series CPUs,
@@ -261,15 +260,6 @@
 	help
 	  Select the number of available UART ports for the Samsung S3C
 	  serial driver
-	
-config SERIAL_SAMSUNG_DEBUG
-	bool "Samsung SoC serial debug"
-	depends on SERIAL_SAMSUNG && DEBUG_LL
-	help
-	  Add support for debugging the serial driver. Since this is
-	  generally being used as a console, we use our own output
-	  routines that go via the low-level debug printascii()
-	  function.
 
 config SERIAL_SAMSUNG_CONSOLE
 	bool "Support for console on Samsung SoC serial port"
@@ -976,7 +966,7 @@
 
 config SERIAL_QCOM_GENI_CONSOLE
 	bool "QCOM GENI Serial Console support"
-	depends on SERIAL_QCOM_GENI=y
+	depends on SERIAL_QCOM_GENI
 	select SERIAL_CORE_CONSOLE
 	select SERIAL_EARLYCON
 	help
@@ -1453,7 +1443,6 @@
 
 config SERIAL_SPRD
 	tristate "Support for Spreadtrum serial"
-	depends on ARCH_SPRD
 	select SERIAL_CORE
 	help
 	  This enables the driver for the Spreadtrum's serial.
diff --git a/drivers/tty/serial/Makefile b/drivers/tty/serial/Makefile
index 863f470..d056ee6 100644
--- a/drivers/tty/serial/Makefile
+++ b/drivers/tty/serial/Makefile
@@ -30,7 +30,7 @@
 obj-$(CONFIG_SERIAL_PNX8XXX) += pnx8xxx_uart.o
 obj-$(CONFIG_SERIAL_SA1100) += sa1100.o
 obj-$(CONFIG_SERIAL_BCM63XX) += bcm63xx_uart.o
-obj-$(CONFIG_SERIAL_SAMSUNG) += samsung.o
+obj-$(CONFIG_SERIAL_SAMSUNG) += samsung_tty.o
 obj-$(CONFIG_SERIAL_MAX3100) += max3100.o
 obj-$(CONFIG_SERIAL_MAX310X) += max310x.o
 obj-$(CONFIG_SERIAL_IP22_ZILOG) += ip22zilog.o
diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
deleted file mode 100644
index c7683be..0000000
--- a/drivers/tty/serial/samsung.c
+++ /dev/null
@@ -1,2597 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Driver core for Samsung SoC onboard UARTs.
- *
- * Ben Dooks, Copyright (c) 2003-2008 Simtec Electronics
- *	http://armlinux.simtec.co.uk/
-*/
-
-/* Hote on 2410 error handling
- *
- * The s3c2410 manual has a love/hate affair with the contents of the
- * UERSTAT register in the UART blocks, and keeps marking some of the
- * error bits as reserved. Having checked with the s3c2410x01,
- * it copes with BREAKs properly, so I am happy to ignore the RESERVED
- * feature from the latter versions of the manual.
- *
- * If it becomes aparrent that latter versions of the 2410 remove these
- * bits, then action will have to be taken to differentiate the versions
- * and change the policy on BREAK
- *
- * BJD, 04-Nov-2004
-*/
-
-#if defined(CONFIG_SERIAL_SAMSUNG_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
-#define SUPPORT_SYSRQ
-#endif
-
-#include <linux/dmaengine.h>
-#include <linux/dma-mapping.h>
-#include <linux/slab.h>
-#include <linux/module.h>
-#include <linux/ioport.h>
-#include <linux/io.h>
-#include <linux/platform_device.h>
-#include <linux/init.h>
-#include <linux/sysrq.h>
-#include <linux/console.h>
-#include <linux/tty.h>
-#include <linux/tty_flip.h>
-#include <linux/serial_core.h>
-#include <linux/serial.h>
-#include <linux/serial_s3c.h>
-#include <linux/delay.h>
-#include <linux/clk.h>
-#include <linux/cpufreq.h>
-#include <linux/of.h>
-
-#include <asm/irq.h>
-
-#include "samsung.h"
-
-#if	defined(CONFIG_SERIAL_SAMSUNG_DEBUG) &&	\
-	!defined(MODULE)
-
-extern void printascii(const char *);
-
-__printf(1, 2)
-static void dbg(const char *fmt, ...)
-{
-	va_list va;
-	char buff[256];
-
-	va_start(va, fmt);
-	vscnprintf(buff, sizeof(buff), fmt, va);
-	va_end(va);
-
-	printascii(buff);
-}
-
-#else
-#define dbg(fmt, ...) do { if (0) no_printk(fmt, ##__VA_ARGS__); } while (0)
-#endif
-
-/* UART name and device definitions */
-
-#define S3C24XX_SERIAL_NAME	"ttySAC"
-#define S3C24XX_SERIAL_MAJOR	204
-#define S3C24XX_SERIAL_MINOR	64
-
-#define S3C24XX_TX_PIO			1
-#define S3C24XX_TX_DMA			2
-#define S3C24XX_RX_PIO			1
-#define S3C24XX_RX_DMA			2
-/* macros to change one thing to another */
-
-#define tx_enabled(port) ((port)->unused[0])
-#define rx_enabled(port) ((port)->unused[1])
-
-/* flag to ignore all characters coming in */
-#define RXSTAT_DUMMY_READ (0x10000000)
-
-static inline struct s3c24xx_uart_port *to_ourport(struct uart_port *port)
-{
-	return container_of(port, struct s3c24xx_uart_port, port);
-}
-
-/* translate a port to the device name */
-
-static inline const char *s3c24xx_serial_portname(struct uart_port *port)
-{
-	return to_platform_device(port->dev)->name;
-}
-
-static int s3c24xx_serial_txempty_nofifo(struct uart_port *port)
-{
-	return rd_regl(port, S3C2410_UTRSTAT) & S3C2410_UTRSTAT_TXE;
-}
-
-/*
- * s3c64xx and later SoC's include the interrupt mask and status registers in
- * the controller itself, unlike the s3c24xx SoC's which have these registers
- * in the interrupt controller. Check if the port type is s3c64xx or higher.
- */
-static int s3c24xx_serial_has_interrupt_mask(struct uart_port *port)
-{
-	return to_ourport(port)->info->type == PORT_S3C6400;
-}
-
-static void s3c24xx_serial_rx_enable(struct uart_port *port)
-{
-	unsigned long flags;
-	unsigned int ucon, ufcon;
-	int count = 10000;
-
-	spin_lock_irqsave(&port->lock, flags);
-
-	while (--count && !s3c24xx_serial_txempty_nofifo(port))
-		udelay(100);
-
-	ufcon = rd_regl(port, S3C2410_UFCON);
-	ufcon |= S3C2410_UFCON_RESETRX;
-	wr_regl(port, S3C2410_UFCON, ufcon);
-
-	ucon = rd_regl(port, S3C2410_UCON);
-	ucon |= S3C2410_UCON_RXIRQMODE;
-	wr_regl(port, S3C2410_UCON, ucon);
-
-	rx_enabled(port) = 1;
-	spin_unlock_irqrestore(&port->lock, flags);
-}
-
-static void s3c24xx_serial_rx_disable(struct uart_port *port)
-{
-	unsigned long flags;
-	unsigned int ucon;
-
-	spin_lock_irqsave(&port->lock, flags);
-
-	ucon = rd_regl(port, S3C2410_UCON);
-	ucon &= ~S3C2410_UCON_RXIRQMODE;
-	wr_regl(port, S3C2410_UCON, ucon);
-
-	rx_enabled(port) = 0;
-	spin_unlock_irqrestore(&port->lock, flags);
-}
-
-static void s3c24xx_serial_stop_tx(struct uart_port *port)
-{
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-	struct s3c24xx_uart_dma *dma = ourport->dma;
-	struct circ_buf *xmit = &port->state->xmit;
-	struct dma_tx_state state;
-	int count;
-
-	if (!tx_enabled(port))
-		return;
-
-	if (s3c24xx_serial_has_interrupt_mask(port))
-		s3c24xx_set_bit(port, S3C64XX_UINTM_TXD, S3C64XX_UINTM);
-	else
-		disable_irq_nosync(ourport->tx_irq);
-
-	if (dma && dma->tx_chan && ourport->tx_in_progress == S3C24XX_TX_DMA) {
-		dmaengine_pause(dma->tx_chan);
-		dmaengine_tx_status(dma->tx_chan, dma->tx_cookie, &state);
-		dmaengine_terminate_all(dma->tx_chan);
-		dma_sync_single_for_cpu(ourport->port.dev,
-			dma->tx_transfer_addr, dma->tx_size, DMA_TO_DEVICE);
-		async_tx_ack(dma->tx_desc);
-		count = dma->tx_bytes_requested - state.residue;
-		xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1);
-		port->icount.tx += count;
-	}
-
-	tx_enabled(port) = 0;
-	ourport->tx_in_progress = 0;
-
-	if (port->flags & UPF_CONS_FLOW)
-		s3c24xx_serial_rx_enable(port);
-
-	ourport->tx_mode = 0;
-}
-
-static void s3c24xx_serial_start_next_tx(struct s3c24xx_uart_port *ourport);
-
-static void s3c24xx_serial_tx_dma_complete(void *args)
-{
-	struct s3c24xx_uart_port *ourport = args;
-	struct uart_port *port = &ourport->port;
-	struct circ_buf *xmit = &port->state->xmit;
-	struct s3c24xx_uart_dma *dma = ourport->dma;
-	struct dma_tx_state state;
-	unsigned long flags;
-	int count;
-
-
-	dmaengine_tx_status(dma->tx_chan, dma->tx_cookie, &state);
-	count = dma->tx_bytes_requested - state.residue;
-	async_tx_ack(dma->tx_desc);
-
-	dma_sync_single_for_cpu(ourport->port.dev, dma->tx_transfer_addr,
-				dma->tx_size, DMA_TO_DEVICE);
-
-	spin_lock_irqsave(&port->lock, flags);
-
-	xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1);
-	port->icount.tx += count;
-	ourport->tx_in_progress = 0;
-
-	if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
-		uart_write_wakeup(port);
-
-	s3c24xx_serial_start_next_tx(ourport);
-	spin_unlock_irqrestore(&port->lock, flags);
-}
-
-static void enable_tx_dma(struct s3c24xx_uart_port *ourport)
-{
-	struct uart_port *port = &ourport->port;
-	u32 ucon;
-
-	/* Mask Tx interrupt */
-	if (s3c24xx_serial_has_interrupt_mask(port))
-		s3c24xx_set_bit(port, S3C64XX_UINTM_TXD, S3C64XX_UINTM);
-	else
-		disable_irq_nosync(ourport->tx_irq);
-
-	/* Enable tx dma mode */
-	ucon = rd_regl(port, S3C2410_UCON);
-	ucon &= ~(S3C64XX_UCON_TXBURST_MASK | S3C64XX_UCON_TXMODE_MASK);
-	ucon |= (dma_get_cache_alignment() >= 16) ?
-		S3C64XX_UCON_TXBURST_16 : S3C64XX_UCON_TXBURST_1;
-	ucon |= S3C64XX_UCON_TXMODE_DMA;
-	wr_regl(port,  S3C2410_UCON, ucon);
-
-	ourport->tx_mode = S3C24XX_TX_DMA;
-}
-
-static void enable_tx_pio(struct s3c24xx_uart_port *ourport)
-{
-	struct uart_port *port = &ourport->port;
-	u32 ucon, ufcon;
-
-	/* Set ufcon txtrig */
-	ourport->tx_in_progress = S3C24XX_TX_PIO;
-	ufcon = rd_regl(port, S3C2410_UFCON);
-	wr_regl(port,  S3C2410_UFCON, ufcon);
-
-	/* Enable tx pio mode */
-	ucon = rd_regl(port, S3C2410_UCON);
-	ucon &= ~(S3C64XX_UCON_TXMODE_MASK);
-	ucon |= S3C64XX_UCON_TXMODE_CPU;
-	wr_regl(port,  S3C2410_UCON, ucon);
-
-	/* Unmask Tx interrupt */
-	if (s3c24xx_serial_has_interrupt_mask(port))
-		s3c24xx_clear_bit(port, S3C64XX_UINTM_TXD,
-				  S3C64XX_UINTM);
-	else
-		enable_irq(ourport->tx_irq);
-
-	ourport->tx_mode = S3C24XX_TX_PIO;
-}
-
-static void s3c24xx_serial_start_tx_pio(struct s3c24xx_uart_port *ourport)
-{
-	if (ourport->tx_mode != S3C24XX_TX_PIO)
-		enable_tx_pio(ourport);
-}
-
-static int s3c24xx_serial_start_tx_dma(struct s3c24xx_uart_port *ourport,
-				      unsigned int count)
-{
-	struct uart_port *port = &ourport->port;
-	struct circ_buf *xmit = &port->state->xmit;
-	struct s3c24xx_uart_dma *dma = ourport->dma;
-
-
-	if (ourport->tx_mode != S3C24XX_TX_DMA)
-		enable_tx_dma(ourport);
-
-	dma->tx_size = count & ~(dma_get_cache_alignment() - 1);
-	dma->tx_transfer_addr = dma->tx_addr + xmit->tail;
-
-	dma_sync_single_for_device(ourport->port.dev, dma->tx_transfer_addr,
-				dma->tx_size, DMA_TO_DEVICE);
-
-	dma->tx_desc = dmaengine_prep_slave_single(dma->tx_chan,
-				dma->tx_transfer_addr, dma->tx_size,
-				DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT);
-	if (!dma->tx_desc) {
-		dev_err(ourport->port.dev, "Unable to get desc for Tx\n");
-		return -EIO;
-	}
-
-	dma->tx_desc->callback = s3c24xx_serial_tx_dma_complete;
-	dma->tx_desc->callback_param = ourport;
-	dma->tx_bytes_requested = dma->tx_size;
-
-	ourport->tx_in_progress = S3C24XX_TX_DMA;
-	dma->tx_cookie = dmaengine_submit(dma->tx_desc);
-	dma_async_issue_pending(dma->tx_chan);
-	return 0;
-}
-
-static void s3c24xx_serial_start_next_tx(struct s3c24xx_uart_port *ourport)
-{
-	struct uart_port *port = &ourport->port;
-	struct circ_buf *xmit = &port->state->xmit;
-	unsigned long count;
-
-	/* Get data size up to the end of buffer */
-	count = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
-
-	if (!count) {
-		s3c24xx_serial_stop_tx(port);
-		return;
-	}
-
-	if (!ourport->dma || !ourport->dma->tx_chan ||
-	    count < ourport->min_dma_size ||
-	    xmit->tail & (dma_get_cache_alignment() - 1))
-		s3c24xx_serial_start_tx_pio(ourport);
-	else
-		s3c24xx_serial_start_tx_dma(ourport, count);
-}
-
-static void s3c24xx_serial_start_tx(struct uart_port *port)
-{
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-	struct circ_buf *xmit = &port->state->xmit;
-
-	if (!tx_enabled(port)) {
-		if (port->flags & UPF_CONS_FLOW)
-			s3c24xx_serial_rx_disable(port);
-
-		tx_enabled(port) = 1;
-		if (!ourport->dma || !ourport->dma->tx_chan)
-			s3c24xx_serial_start_tx_pio(ourport);
-	}
-
-	if (ourport->dma && ourport->dma->tx_chan) {
-		if (!uart_circ_empty(xmit) && !ourport->tx_in_progress)
-			s3c24xx_serial_start_next_tx(ourport);
-	}
-}
-
-static void s3c24xx_uart_copy_rx_to_tty(struct s3c24xx_uart_port *ourport,
-		struct tty_port *tty, int count)
-{
-	struct s3c24xx_uart_dma *dma = ourport->dma;
-	int copied;
-
-	if (!count)
-		return;
-
-	dma_sync_single_for_cpu(ourport->port.dev, dma->rx_addr,
-				dma->rx_size, DMA_FROM_DEVICE);
-
-	ourport->port.icount.rx += count;
-	if (!tty) {
-		dev_err(ourport->port.dev, "No tty port\n");
-		return;
-	}
-	copied = tty_insert_flip_string(tty,
-			((unsigned char *)(ourport->dma->rx_buf)), count);
-	if (copied != count) {
-		WARN_ON(1);
-		dev_err(ourport->port.dev, "RxData copy to tty layer failed\n");
-	}
-}
-
-static void s3c24xx_serial_stop_rx(struct uart_port *port)
-{
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-	struct s3c24xx_uart_dma *dma = ourport->dma;
-	struct tty_port *t = &port->state->port;
-	struct dma_tx_state state;
-	enum dma_status dma_status;
-	unsigned int received;
-
-	if (rx_enabled(port)) {
-		dbg("s3c24xx_serial_stop_rx: port=%p\n", port);
-		if (s3c24xx_serial_has_interrupt_mask(port))
-			s3c24xx_set_bit(port, S3C64XX_UINTM_RXD,
-					S3C64XX_UINTM);
-		else
-			disable_irq_nosync(ourport->rx_irq);
-		rx_enabled(port) = 0;
-	}
-	if (dma && dma->rx_chan) {
-		dmaengine_pause(dma->tx_chan);
-		dma_status = dmaengine_tx_status(dma->rx_chan,
-				dma->rx_cookie, &state);
-		if (dma_status == DMA_IN_PROGRESS ||
-			dma_status == DMA_PAUSED) {
-			received = dma->rx_bytes_requested - state.residue;
-			dmaengine_terminate_all(dma->rx_chan);
-			s3c24xx_uart_copy_rx_to_tty(ourport, t, received);
-		}
-	}
-}
-
-static inline struct s3c24xx_uart_info
-	*s3c24xx_port_to_info(struct uart_port *port)
-{
-	return to_ourport(port)->info;
-}
-
-static inline struct s3c2410_uartcfg
-	*s3c24xx_port_to_cfg(struct uart_port *port)
-{
-	struct s3c24xx_uart_port *ourport;
-
-	if (port->dev == NULL)
-		return NULL;
-
-	ourport = container_of(port, struct s3c24xx_uart_port, port);
-	return ourport->cfg;
-}
-
-static int s3c24xx_serial_rx_fifocnt(struct s3c24xx_uart_port *ourport,
-				     unsigned long ufstat)
-{
-	struct s3c24xx_uart_info *info = ourport->info;
-
-	if (ufstat & info->rx_fifofull)
-		return ourport->port.fifosize;
-
-	return (ufstat & info->rx_fifomask) >> info->rx_fifoshift;
-}
-
-static void s3c64xx_start_rx_dma(struct s3c24xx_uart_port *ourport);
-static void s3c24xx_serial_rx_dma_complete(void *args)
-{
-	struct s3c24xx_uart_port *ourport = args;
-	struct uart_port *port = &ourport->port;
-
-	struct s3c24xx_uart_dma *dma = ourport->dma;
-	struct tty_port *t = &port->state->port;
-	struct tty_struct *tty = tty_port_tty_get(&ourport->port.state->port);
-
-	struct dma_tx_state state;
-	unsigned long flags;
-	int received;
-
-	dmaengine_tx_status(dma->rx_chan,  dma->rx_cookie, &state);
-	received  = dma->rx_bytes_requested - state.residue;
-	async_tx_ack(dma->rx_desc);
-
-	spin_lock_irqsave(&port->lock, flags);
-
-	if (received)
-		s3c24xx_uart_copy_rx_to_tty(ourport, t, received);
-
-	if (tty) {
-		tty_flip_buffer_push(t);
-		tty_kref_put(tty);
-	}
-
-	s3c64xx_start_rx_dma(ourport);
-
-	spin_unlock_irqrestore(&port->lock, flags);
-}
-
-static void s3c64xx_start_rx_dma(struct s3c24xx_uart_port *ourport)
-{
-	struct s3c24xx_uart_dma *dma = ourport->dma;
-
-	dma_sync_single_for_device(ourport->port.dev, dma->rx_addr,
-				dma->rx_size, DMA_FROM_DEVICE);
-
-	dma->rx_desc = dmaengine_prep_slave_single(dma->rx_chan,
-				dma->rx_addr, dma->rx_size, DMA_DEV_TO_MEM,
-				DMA_PREP_INTERRUPT);
-	if (!dma->rx_desc) {
-		dev_err(ourport->port.dev, "Unable to get desc for Rx\n");
-		return;
-	}
-
-	dma->rx_desc->callback = s3c24xx_serial_rx_dma_complete;
-	dma->rx_desc->callback_param = ourport;
-	dma->rx_bytes_requested = dma->rx_size;
-
-	dma->rx_cookie = dmaengine_submit(dma->rx_desc);
-	dma_async_issue_pending(dma->rx_chan);
-}
-
-/* ? - where has parity gone?? */
-#define S3C2410_UERSTAT_PARITY (0x1000)
-
-static void enable_rx_dma(struct s3c24xx_uart_port *ourport)
-{
-	struct uart_port *port = &ourport->port;
-	unsigned int ucon;
-
-	/* set Rx mode to DMA mode */
-	ucon = rd_regl(port, S3C2410_UCON);
-	ucon &= ~(S3C64XX_UCON_RXBURST_MASK |
-			S3C64XX_UCON_TIMEOUT_MASK |
-			S3C64XX_UCON_EMPTYINT_EN |
-			S3C64XX_UCON_DMASUS_EN |
-			S3C64XX_UCON_TIMEOUT_EN |
-			S3C64XX_UCON_RXMODE_MASK);
-	ucon |= S3C64XX_UCON_RXBURST_16 |
-			0xf << S3C64XX_UCON_TIMEOUT_SHIFT |
-			S3C64XX_UCON_EMPTYINT_EN |
-			S3C64XX_UCON_TIMEOUT_EN |
-			S3C64XX_UCON_RXMODE_DMA;
-	wr_regl(port, S3C2410_UCON, ucon);
-
-	ourport->rx_mode = S3C24XX_RX_DMA;
-}
-
-static void enable_rx_pio(struct s3c24xx_uart_port *ourport)
-{
-	struct uart_port *port = &ourport->port;
-	unsigned int ucon;
-
-	/* set Rx mode to DMA mode */
-	ucon = rd_regl(port, S3C2410_UCON);
-	ucon &= ~(S3C64XX_UCON_TIMEOUT_MASK |
-			S3C64XX_UCON_EMPTYINT_EN |
-			S3C64XX_UCON_DMASUS_EN |
-			S3C64XX_UCON_TIMEOUT_EN |
-			S3C64XX_UCON_RXMODE_MASK);
-	ucon |= 0xf << S3C64XX_UCON_TIMEOUT_SHIFT |
-			S3C64XX_UCON_TIMEOUT_EN |
-			S3C64XX_UCON_RXMODE_CPU;
-	wr_regl(port, S3C2410_UCON, ucon);
-
-	ourport->rx_mode = S3C24XX_RX_PIO;
-}
-
-static void s3c24xx_serial_rx_drain_fifo(struct s3c24xx_uart_port *ourport);
-
-static irqreturn_t s3c24xx_serial_rx_chars_dma(void *dev_id)
-{
-	unsigned int utrstat, ufstat, received;
-	struct s3c24xx_uart_port *ourport = dev_id;
-	struct uart_port *port = &ourport->port;
-	struct s3c24xx_uart_dma *dma = ourport->dma;
-	struct tty_struct *tty = tty_port_tty_get(&ourport->port.state->port);
-	struct tty_port *t = &port->state->port;
-	unsigned long flags;
-	struct dma_tx_state state;
-
-	utrstat = rd_regl(port, S3C2410_UTRSTAT);
-	ufstat = rd_regl(port, S3C2410_UFSTAT);
-
-	spin_lock_irqsave(&port->lock, flags);
-
-	if (!(utrstat & S3C2410_UTRSTAT_TIMEOUT)) {
-		s3c64xx_start_rx_dma(ourport);
-		if (ourport->rx_mode == S3C24XX_RX_PIO)
-			enable_rx_dma(ourport);
-		goto finish;
-	}
-
-	if (ourport->rx_mode == S3C24XX_RX_DMA) {
-		dmaengine_pause(dma->rx_chan);
-		dmaengine_tx_status(dma->rx_chan, dma->rx_cookie, &state);
-		dmaengine_terminate_all(dma->rx_chan);
-		received = dma->rx_bytes_requested - state.residue;
-		s3c24xx_uart_copy_rx_to_tty(ourport, t, received);
-
-		enable_rx_pio(ourport);
-	}
-
-	s3c24xx_serial_rx_drain_fifo(ourport);
-
-	if (tty) {
-		tty_flip_buffer_push(t);
-		tty_kref_put(tty);
-	}
-
-	wr_regl(port, S3C2410_UTRSTAT, S3C2410_UTRSTAT_TIMEOUT);
-
-finish:
-	spin_unlock_irqrestore(&port->lock, flags);
-
-	return IRQ_HANDLED;
-}
-
-static void s3c24xx_serial_rx_drain_fifo(struct s3c24xx_uart_port *ourport)
-{
-	struct uart_port *port = &ourport->port;
-	unsigned int ufcon, ch, flag, ufstat, uerstat;
-	unsigned int fifocnt = 0;
-	int max_count = port->fifosize;
-
-	while (max_count-- > 0) {
-		/*
-		 * Receive all characters known to be in FIFO
-		 * before reading FIFO level again
-		 */
-		if (fifocnt == 0) {
-			ufstat = rd_regl(port, S3C2410_UFSTAT);
-			fifocnt = s3c24xx_serial_rx_fifocnt(ourport, ufstat);
-			if (fifocnt == 0)
-				break;
-		}
-		fifocnt--;
-
-		uerstat = rd_regl(port, S3C2410_UERSTAT);
-		ch = rd_regb(port, S3C2410_URXH);
-
-		if (port->flags & UPF_CONS_FLOW) {
-			int txe = s3c24xx_serial_txempty_nofifo(port);
-
-			if (rx_enabled(port)) {
-				if (!txe) {
-					rx_enabled(port) = 0;
-					continue;
-				}
-			} else {
-				if (txe) {
-					ufcon = rd_regl(port, S3C2410_UFCON);
-					ufcon |= S3C2410_UFCON_RESETRX;
-					wr_regl(port, S3C2410_UFCON, ufcon);
-					rx_enabled(port) = 1;
-					return;
-				}
-				continue;
-			}
-		}
-
-		/* insert the character into the buffer */
-
-		flag = TTY_NORMAL;
-		port->icount.rx++;
-
-		if (unlikely(uerstat & S3C2410_UERSTAT_ANY)) {
-			dbg("rxerr: port ch=0x%02x, rxs=0x%08x\n",
-			    ch, uerstat);
-
-			/* check for break */
-			if (uerstat & S3C2410_UERSTAT_BREAK) {
-				dbg("break!\n");
-				port->icount.brk++;
-				if (uart_handle_break(port))
-					continue; /* Ignore character */
-			}
-
-			if (uerstat & S3C2410_UERSTAT_FRAME)
-				port->icount.frame++;
-			if (uerstat & S3C2410_UERSTAT_OVERRUN)
-				port->icount.overrun++;
-
-			uerstat &= port->read_status_mask;
-
-			if (uerstat & S3C2410_UERSTAT_BREAK)
-				flag = TTY_BREAK;
-			else if (uerstat & S3C2410_UERSTAT_PARITY)
-				flag = TTY_PARITY;
-			else if (uerstat & (S3C2410_UERSTAT_FRAME |
-					    S3C2410_UERSTAT_OVERRUN))
-				flag = TTY_FRAME;
-		}
-
-		if (uart_handle_sysrq_char(port, ch))
-			continue; /* Ignore character */
-
-		uart_insert_char(port, uerstat, S3C2410_UERSTAT_OVERRUN,
-				 ch, flag);
-	}
-
-	tty_flip_buffer_push(&port->state->port);
-}
-
-static irqreturn_t s3c24xx_serial_rx_chars_pio(void *dev_id)
-{
-	struct s3c24xx_uart_port *ourport = dev_id;
-	struct uart_port *port = &ourport->port;
-	unsigned long flags;
-
-	spin_lock_irqsave(&port->lock, flags);
-	s3c24xx_serial_rx_drain_fifo(ourport);
-	spin_unlock_irqrestore(&port->lock, flags);
-
-	return IRQ_HANDLED;
-}
-
-
-static irqreturn_t s3c24xx_serial_rx_chars(int irq, void *dev_id)
-{
-	struct s3c24xx_uart_port *ourport = dev_id;
-
-	if (ourport->dma && ourport->dma->rx_chan)
-		return s3c24xx_serial_rx_chars_dma(dev_id);
-	return s3c24xx_serial_rx_chars_pio(dev_id);
-}
-
-static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id)
-{
-	struct s3c24xx_uart_port *ourport = id;
-	struct uart_port *port = &ourport->port;
-	struct circ_buf *xmit = &port->state->xmit;
-	unsigned long flags;
-	int count, dma_count = 0;
-
-	spin_lock_irqsave(&port->lock, flags);
-
-	count = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
-
-	if (ourport->dma && ourport->dma->tx_chan &&
-	    count >= ourport->min_dma_size) {
-		int align = dma_get_cache_alignment() -
-			(xmit->tail & (dma_get_cache_alignment() - 1));
-		if (count-align >= ourport->min_dma_size) {
-			dma_count = count-align;
-			count = align;
-		}
-	}
-
-	if (port->x_char) {
-		wr_regb(port, S3C2410_UTXH, port->x_char);
-		port->icount.tx++;
-		port->x_char = 0;
-		goto out;
-	}
-
-	/* if there isn't anything more to transmit, or the uart is now
-	 * stopped, disable the uart and exit
-	*/
-
-	if (uart_circ_empty(xmit) || uart_tx_stopped(port)) {
-		s3c24xx_serial_stop_tx(port);
-		goto out;
-	}
-
-	/* try and drain the buffer... */
-
-	if (count > port->fifosize) {
-		count = port->fifosize;
-		dma_count = 0;
-	}
-
-	while (!uart_circ_empty(xmit) && count > 0) {
-		if (rd_regl(port, S3C2410_UFSTAT) & ourport->info->tx_fifofull)
-			break;
-
-		wr_regb(port, S3C2410_UTXH, xmit->buf[xmit->tail]);
-		xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
-		port->icount.tx++;
-		count--;
-	}
-
-	if (!count && dma_count) {
-		s3c24xx_serial_start_tx_dma(ourport, dma_count);
-		goto out;
-	}
-
-	if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) {
-		spin_unlock(&port->lock);
-		uart_write_wakeup(port);
-		spin_lock(&port->lock);
-	}
-
-	if (uart_circ_empty(xmit))
-		s3c24xx_serial_stop_tx(port);
-
-out:
-	spin_unlock_irqrestore(&port->lock, flags);
-	return IRQ_HANDLED;
-}
-
-/* interrupt handler for s3c64xx and later SoC's.*/
-static irqreturn_t s3c64xx_serial_handle_irq(int irq, void *id)
-{
-	struct s3c24xx_uart_port *ourport = id;
-	struct uart_port *port = &ourport->port;
-	unsigned int pend = rd_regl(port, S3C64XX_UINTP);
-	irqreturn_t ret = IRQ_HANDLED;
-
-	if (pend & S3C64XX_UINTM_RXD_MSK) {
-		ret = s3c24xx_serial_rx_chars(irq, id);
-		wr_regl(port, S3C64XX_UINTP, S3C64XX_UINTM_RXD_MSK);
-	}
-	if (pend & S3C64XX_UINTM_TXD_MSK) {
-		ret = s3c24xx_serial_tx_chars(irq, id);
-		wr_regl(port, S3C64XX_UINTP, S3C64XX_UINTM_TXD_MSK);
-	}
-	return ret;
-}
-
-static unsigned int s3c24xx_serial_tx_empty(struct uart_port *port)
-{
-	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
-	unsigned long ufstat = rd_regl(port, S3C2410_UFSTAT);
-	unsigned long ufcon = rd_regl(port, S3C2410_UFCON);
-
-	if (ufcon & S3C2410_UFCON_FIFOMODE) {
-		if ((ufstat & info->tx_fifomask) != 0 ||
-		    (ufstat & info->tx_fifofull))
-			return 0;
-
-		return 1;
-	}
-
-	return s3c24xx_serial_txempty_nofifo(port);
-}
-
-/* no modem control lines */
-static unsigned int s3c24xx_serial_get_mctrl(struct uart_port *port)
-{
-	unsigned int umstat = rd_regb(port, S3C2410_UMSTAT);
-
-	if (umstat & S3C2410_UMSTAT_CTS)
-		return TIOCM_CAR | TIOCM_DSR | TIOCM_CTS;
-	else
-		return TIOCM_CAR | TIOCM_DSR;
-}
-
-static void s3c24xx_serial_set_mctrl(struct uart_port *port, unsigned int mctrl)
-{
-	unsigned int umcon = rd_regl(port, S3C2410_UMCON);
-
-	if (mctrl & TIOCM_RTS)
-		umcon |= S3C2410_UMCOM_RTS_LOW;
-	else
-		umcon &= ~S3C2410_UMCOM_RTS_LOW;
-
-	wr_regl(port, S3C2410_UMCON, umcon);
-}
-
-static void s3c24xx_serial_break_ctl(struct uart_port *port, int break_state)
-{
-	unsigned long flags;
-	unsigned int ucon;
-
-	spin_lock_irqsave(&port->lock, flags);
-
-	ucon = rd_regl(port, S3C2410_UCON);
-
-	if (break_state)
-		ucon |= S3C2410_UCON_SBREAK;
-	else
-		ucon &= ~S3C2410_UCON_SBREAK;
-
-	wr_regl(port, S3C2410_UCON, ucon);
-
-	spin_unlock_irqrestore(&port->lock, flags);
-}
-
-static int s3c24xx_serial_request_dma(struct s3c24xx_uart_port *p)
-{
-	struct s3c24xx_uart_dma	*dma = p->dma;
-	struct dma_slave_caps dma_caps;
-	const char *reason = NULL;
-	int ret;
-
-	/* Default slave configuration parameters */
-	dma->rx_conf.direction		= DMA_DEV_TO_MEM;
-	dma->rx_conf.src_addr_width	= DMA_SLAVE_BUSWIDTH_1_BYTE;
-	dma->rx_conf.src_addr		= p->port.mapbase + S3C2410_URXH;
-	dma->rx_conf.src_maxburst	= 1;
-
-	dma->tx_conf.direction		= DMA_MEM_TO_DEV;
-	dma->tx_conf.dst_addr_width	= DMA_SLAVE_BUSWIDTH_1_BYTE;
-	dma->tx_conf.dst_addr		= p->port.mapbase + S3C2410_UTXH;
-	dma->tx_conf.dst_maxburst	= 1;
-
-	dma->rx_chan = dma_request_chan(p->port.dev, "rx");
-
-	if (IS_ERR(dma->rx_chan)) {
-		reason = "DMA RX channel request failed";
-		ret = PTR_ERR(dma->rx_chan);
-		goto err_warn;
-	}
-
-	ret = dma_get_slave_caps(dma->rx_chan, &dma_caps);
-	if (ret < 0 ||
-	    dma_caps.residue_granularity < DMA_RESIDUE_GRANULARITY_BURST) {
-		reason = "insufficient DMA RX engine capabilities";
-		ret = -EOPNOTSUPP;
-		goto err_release_rx;
-	}
-
-	dmaengine_slave_config(dma->rx_chan, &dma->rx_conf);
-
-	dma->tx_chan = dma_request_chan(p->port.dev, "tx");
-	if (IS_ERR(dma->tx_chan)) {
-		reason = "DMA TX channel request failed";
-		ret = PTR_ERR(dma->tx_chan);
-		goto err_release_rx;
-	}
-
-	ret = dma_get_slave_caps(dma->tx_chan, &dma_caps);
-	if (ret < 0 ||
-	    dma_caps.residue_granularity < DMA_RESIDUE_GRANULARITY_BURST) {
-		reason = "insufficient DMA TX engine capabilities";
-		ret = -EOPNOTSUPP;
-		goto err_release_tx;
-	}
-
-	dmaengine_slave_config(dma->tx_chan, &dma->tx_conf);
-
-	/* RX buffer */
-	dma->rx_size = PAGE_SIZE;
-
-	dma->rx_buf = kmalloc(dma->rx_size, GFP_KERNEL);
-	if (!dma->rx_buf) {
-		ret = -ENOMEM;
-		goto err_release_tx;
-	}
-
-	dma->rx_addr = dma_map_single(p->port.dev, dma->rx_buf,
-				dma->rx_size, DMA_FROM_DEVICE);
-	if (dma_mapping_error(p->port.dev, dma->rx_addr)) {
-		reason = "DMA mapping error for RX buffer";
-		ret = -EIO;
-		goto err_free_rx;
-	}
-
-	/* TX buffer */
-	dma->tx_addr = dma_map_single(p->port.dev, p->port.state->xmit.buf,
-				UART_XMIT_SIZE, DMA_TO_DEVICE);
-	if (dma_mapping_error(p->port.dev, dma->tx_addr)) {
-		reason = "DMA mapping error for TX buffer";
-		ret = -EIO;
-		goto err_unmap_rx;
-	}
-
-	return 0;
-
-err_unmap_rx:
-	dma_unmap_single(p->port.dev, dma->rx_addr, dma->rx_size,
-			 DMA_FROM_DEVICE);
-err_free_rx:
-	kfree(dma->rx_buf);
-err_release_tx:
-	dma_release_channel(dma->tx_chan);
-err_release_rx:
-	dma_release_channel(dma->rx_chan);
-err_warn:
-	if (reason)
-		dev_warn(p->port.dev, "%s, DMA will not be used\n", reason);
-	return ret;
-}
-
-static void s3c24xx_serial_release_dma(struct s3c24xx_uart_port *p)
-{
-	struct s3c24xx_uart_dma	*dma = p->dma;
-
-	if (dma->rx_chan) {
-		dmaengine_terminate_all(dma->rx_chan);
-		dma_unmap_single(p->port.dev, dma->rx_addr,
-				dma->rx_size, DMA_FROM_DEVICE);
-		kfree(dma->rx_buf);
-		dma_release_channel(dma->rx_chan);
-		dma->rx_chan = NULL;
-	}
-
-	if (dma->tx_chan) {
-		dmaengine_terminate_all(dma->tx_chan);
-		dma_unmap_single(p->port.dev, dma->tx_addr,
-				UART_XMIT_SIZE, DMA_TO_DEVICE);
-		dma_release_channel(dma->tx_chan);
-		dma->tx_chan = NULL;
-	}
-}
-
-static void s3c24xx_serial_shutdown(struct uart_port *port)
-{
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-
-	if (ourport->tx_claimed) {
-		if (!s3c24xx_serial_has_interrupt_mask(port))
-			free_irq(ourport->tx_irq, ourport);
-		tx_enabled(port) = 0;
-		ourport->tx_claimed = 0;
-		ourport->tx_mode = 0;
-	}
-
-	if (ourport->rx_claimed) {
-		if (!s3c24xx_serial_has_interrupt_mask(port))
-			free_irq(ourport->rx_irq, ourport);
-		ourport->rx_claimed = 0;
-		rx_enabled(port) = 0;
-	}
-
-	/* Clear pending interrupts and mask all interrupts */
-	if (s3c24xx_serial_has_interrupt_mask(port)) {
-		free_irq(port->irq, ourport);
-
-		wr_regl(port, S3C64XX_UINTP, 0xf);
-		wr_regl(port, S3C64XX_UINTM, 0xf);
-	}
-
-	if (ourport->dma)
-		s3c24xx_serial_release_dma(ourport);
-
-	ourport->tx_in_progress = 0;
-}
-
-static int s3c24xx_serial_startup(struct uart_port *port)
-{
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-	int ret;
-
-	dbg("s3c24xx_serial_startup: port=%p (%08llx,%p)\n",
-	    port, (unsigned long long)port->mapbase, port->membase);
-
-	rx_enabled(port) = 1;
-
-	ret = request_irq(ourport->rx_irq, s3c24xx_serial_rx_chars, 0,
-			  s3c24xx_serial_portname(port), ourport);
-
-	if (ret != 0) {
-		dev_err(port->dev, "cannot get irq %d\n", ourport->rx_irq);
-		return ret;
-	}
-
-	ourport->rx_claimed = 1;
-
-	dbg("requesting tx irq...\n");
-
-	tx_enabled(port) = 1;
-
-	ret = request_irq(ourport->tx_irq, s3c24xx_serial_tx_chars, 0,
-			  s3c24xx_serial_portname(port), ourport);
-
-	if (ret) {
-		dev_err(port->dev, "cannot get irq %d\n", ourport->tx_irq);
-		goto err;
-	}
-
-	ourport->tx_claimed = 1;
-
-	dbg("s3c24xx_serial_startup ok\n");
-
-	/* the port reset code should have done the correct
-	 * register setup for the port controls */
-
-	return ret;
-
-err:
-	s3c24xx_serial_shutdown(port);
-	return ret;
-}
-
-static int s3c64xx_serial_startup(struct uart_port *port)
-{
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-	unsigned long flags;
-	unsigned int ufcon;
-	int ret;
-
-	dbg("s3c64xx_serial_startup: port=%p (%08llx,%p)\n",
-	    port, (unsigned long long)port->mapbase, port->membase);
-
-	wr_regl(port, S3C64XX_UINTM, 0xf);
-	if (ourport->dma) {
-		ret = s3c24xx_serial_request_dma(ourport);
-		if (ret < 0) {
-			devm_kfree(port->dev, ourport->dma);
-			ourport->dma = NULL;
-		}
-	}
-
-	ret = request_irq(port->irq, s3c64xx_serial_handle_irq, IRQF_SHARED,
-			  s3c24xx_serial_portname(port), ourport);
-	if (ret) {
-		dev_err(port->dev, "cannot get irq %d\n", port->irq);
-		return ret;
-	}
-
-	/* For compatibility with s3c24xx Soc's */
-	rx_enabled(port) = 1;
-	ourport->rx_claimed = 1;
-	tx_enabled(port) = 0;
-	ourport->tx_claimed = 1;
-
-	spin_lock_irqsave(&port->lock, flags);
-
-	ufcon = rd_regl(port, S3C2410_UFCON);
-	ufcon |= S3C2410_UFCON_RESETRX | S5PV210_UFCON_RXTRIG8;
-	if (!uart_console(port))
-		ufcon |= S3C2410_UFCON_RESETTX;
-	wr_regl(port, S3C2410_UFCON, ufcon);
-
-	enable_rx_pio(ourport);
-
-	spin_unlock_irqrestore(&port->lock, flags);
-
-	/* Enable Rx Interrupt */
-	s3c24xx_clear_bit(port, S3C64XX_UINTM_RXD, S3C64XX_UINTM);
-
-	dbg("s3c64xx_serial_startup ok\n");
-	return ret;
-}
-
-/* power power management control */
-
-static void s3c24xx_serial_pm(struct uart_port *port, unsigned int level,
-			      unsigned int old)
-{
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-	int timeout = 10000;
-
-	ourport->pm_level = level;
-
-	switch (level) {
-	case 3:
-		while (--timeout && !s3c24xx_serial_txempty_nofifo(port))
-			udelay(100);
-
-		if (!IS_ERR(ourport->baudclk))
-			clk_disable_unprepare(ourport->baudclk);
-
-		clk_disable_unprepare(ourport->clk);
-		break;
-
-	case 0:
-		clk_prepare_enable(ourport->clk);
-
-		if (!IS_ERR(ourport->baudclk))
-			clk_prepare_enable(ourport->baudclk);
-
-		break;
-	default:
-		dev_err(port->dev, "s3c24xx_serial: unknown pm %d\n", level);
-	}
-}
-
-/* baud rate calculation
- *
- * The UARTs on the S3C2410/S3C2440 can take their clocks from a number
- * of different sources, including the peripheral clock ("pclk") and an
- * external clock ("uclk"). The S3C2440 also adds the core clock ("fclk")
- * with a programmable extra divisor.
- *
- * The following code goes through the clock sources, and calculates the
- * baud clocks (and the resultant actual baud rates) and then tries to
- * pick the closest one and select that.
- *
-*/
-
-#define MAX_CLK_NAME_LENGTH 15
-
-static inline int s3c24xx_serial_getsource(struct uart_port *port)
-{
-	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
-	unsigned int ucon;
-
-	if (info->num_clks == 1)
-		return 0;
-
-	ucon = rd_regl(port, S3C2410_UCON);
-	ucon &= info->clksel_mask;
-	return ucon >> info->clksel_shift;
-}
-
-static void s3c24xx_serial_setsource(struct uart_port *port,
-			unsigned int clk_sel)
-{
-	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
-	unsigned int ucon;
-
-	if (info->num_clks == 1)
-		return;
-
-	ucon = rd_regl(port, S3C2410_UCON);
-	if ((ucon & info->clksel_mask) >> info->clksel_shift == clk_sel)
-		return;
-
-	ucon &= ~info->clksel_mask;
-	ucon |= clk_sel << info->clksel_shift;
-	wr_regl(port, S3C2410_UCON, ucon);
-}
-
-static unsigned int s3c24xx_serial_getclk(struct s3c24xx_uart_port *ourport,
-			unsigned int req_baud, struct clk **best_clk,
-			unsigned int *clk_num)
-{
-	struct s3c24xx_uart_info *info = ourport->info;
-	struct clk *clk;
-	unsigned long rate;
-	unsigned int cnt, baud, quot, best_quot = 0;
-	char clkname[MAX_CLK_NAME_LENGTH];
-	int calc_deviation, deviation = (1 << 30) - 1;
-
-	for (cnt = 0; cnt < info->num_clks; cnt++) {
-		/* Keep selected clock if provided */
-		if (ourport->cfg->clk_sel &&
-			!(ourport->cfg->clk_sel & (1 << cnt)))
-			continue;
-
-		sprintf(clkname, "clk_uart_baud%d", cnt);
-		clk = clk_get(ourport->port.dev, clkname);
-		if (IS_ERR(clk))
-			continue;
-
-		rate = clk_get_rate(clk);
-		if (!rate)
-			continue;
-
-		if (ourport->info->has_divslot) {
-			unsigned long div = rate / req_baud;
-
-			/* The UDIVSLOT register on the newer UARTs allows us to
-			 * get a divisor adjustment of 1/16th on the baud clock.
-			 *
-			 * We don't keep the UDIVSLOT value (the 16ths we
-			 * calculated by not multiplying the baud by 16) as it
-			 * is easy enough to recalculate.
-			 */
-
-			quot = div / 16;
-			baud = rate / div;
-		} else {
-			quot = (rate + (8 * req_baud)) / (16 * req_baud);
-			baud = rate / (quot * 16);
-		}
-		quot--;
-
-		calc_deviation = req_baud - baud;
-		if (calc_deviation < 0)
-			calc_deviation = -calc_deviation;
-
-		if (calc_deviation < deviation) {
-			*best_clk = clk;
-			best_quot = quot;
-			*clk_num = cnt;
-			deviation = calc_deviation;
-		}
-	}
-
-	return best_quot;
-}
-
-/* udivslot_table[]
- *
- * This table takes the fractional value of the baud divisor and gives
- * the recommended setting for the UDIVSLOT register.
- */
-static u16 udivslot_table[16] = {
-	[0] = 0x0000,
-	[1] = 0x0080,
-	[2] = 0x0808,
-	[3] = 0x0888,
-	[4] = 0x2222,
-	[5] = 0x4924,
-	[6] = 0x4A52,
-	[7] = 0x54AA,
-	[8] = 0x5555,
-	[9] = 0xD555,
-	[10] = 0xD5D5,
-	[11] = 0xDDD5,
-	[12] = 0xDDDD,
-	[13] = 0xDFDD,
-	[14] = 0xDFDF,
-	[15] = 0xFFDF,
-};
-
-static void s3c24xx_serial_set_termios(struct uart_port *port,
-				       struct ktermios *termios,
-				       struct ktermios *old)
-{
-	struct s3c2410_uartcfg *cfg = s3c24xx_port_to_cfg(port);
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-	struct clk *clk = ERR_PTR(-EINVAL);
-	unsigned long flags;
-	unsigned int baud, quot, clk_sel = 0;
-	unsigned int ulcon;
-	unsigned int umcon;
-	unsigned int udivslot = 0;
-
-	/*
-	 * We don't support modem control lines.
-	 */
-	termios->c_cflag &= ~(HUPCL | CMSPAR);
-	termios->c_cflag |= CLOCAL;
-
-	/*
-	 * Ask the core to calculate the divisor for us.
-	 */
-
-	baud = uart_get_baud_rate(port, termios, old, 0, 3000000);
-	quot = s3c24xx_serial_getclk(ourport, baud, &clk, &clk_sel);
-	if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST)
-		quot = port->custom_divisor;
-	if (IS_ERR(clk))
-		return;
-
-	/* check to see if we need  to change clock source */
-
-	if (ourport->baudclk != clk) {
-		clk_prepare_enable(clk);
-
-		s3c24xx_serial_setsource(port, clk_sel);
-
-		if (!IS_ERR(ourport->baudclk)) {
-			clk_disable_unprepare(ourport->baudclk);
-			ourport->baudclk = ERR_PTR(-EINVAL);
-		}
-
-		ourport->baudclk = clk;
-		ourport->baudclk_rate = clk ? clk_get_rate(clk) : 0;
-	}
-
-	if (ourport->info->has_divslot) {
-		unsigned int div = ourport->baudclk_rate / baud;
-
-		if (cfg->has_fracval) {
-			udivslot = (div & 15);
-			dbg("fracval = %04x\n", udivslot);
-		} else {
-			udivslot = udivslot_table[div & 15];
-			dbg("udivslot = %04x (div %d)\n", udivslot, div & 15);
-		}
-	}
-
-	switch (termios->c_cflag & CSIZE) {
-	case CS5:
-		dbg("config: 5bits/char\n");
-		ulcon = S3C2410_LCON_CS5;
-		break;
-	case CS6:
-		dbg("config: 6bits/char\n");
-		ulcon = S3C2410_LCON_CS6;
-		break;
-	case CS7:
-		dbg("config: 7bits/char\n");
-		ulcon = S3C2410_LCON_CS7;
-		break;
-	case CS8:
-	default:
-		dbg("config: 8bits/char\n");
-		ulcon = S3C2410_LCON_CS8;
-		break;
-	}
-
-	/* preserve original lcon IR settings */
-	ulcon |= (cfg->ulcon & S3C2410_LCON_IRM);
-
-	if (termios->c_cflag & CSTOPB)
-		ulcon |= S3C2410_LCON_STOPB;
-
-	if (termios->c_cflag & PARENB) {
-		if (termios->c_cflag & PARODD)
-			ulcon |= S3C2410_LCON_PODD;
-		else
-			ulcon |= S3C2410_LCON_PEVEN;
-	} else {
-		ulcon |= S3C2410_LCON_PNONE;
-	}
-
-	spin_lock_irqsave(&port->lock, flags);
-
-	dbg("setting ulcon to %08x, brddiv to %d, udivslot %08x\n",
-	    ulcon, quot, udivslot);
-
-	wr_regl(port, S3C2410_ULCON, ulcon);
-	wr_regl(port, S3C2410_UBRDIV, quot);
-
-	port->status &= ~UPSTAT_AUTOCTS;
-
-	umcon = rd_regl(port, S3C2410_UMCON);
-	if (termios->c_cflag & CRTSCTS) {
-		umcon |= S3C2410_UMCOM_AFC;
-		/* Disable RTS when RX FIFO contains 63 bytes */
-		umcon &= ~S3C2412_UMCON_AFC_8;
-		port->status = UPSTAT_AUTOCTS;
-	} else {
-		umcon &= ~S3C2410_UMCOM_AFC;
-	}
-	wr_regl(port, S3C2410_UMCON, umcon);
-
-	if (ourport->info->has_divslot)
-		wr_regl(port, S3C2443_DIVSLOT, udivslot);
-
-	dbg("uart: ulcon = 0x%08x, ucon = 0x%08x, ufcon = 0x%08x\n",
-	    rd_regl(port, S3C2410_ULCON),
-	    rd_regl(port, S3C2410_UCON),
-	    rd_regl(port, S3C2410_UFCON));
-
-	/*
-	 * Update the per-port timeout.
-	 */
-	uart_update_timeout(port, termios->c_cflag, baud);
-
-	/*
-	 * Which character status flags are we interested in?
-	 */
-	port->read_status_mask = S3C2410_UERSTAT_OVERRUN;
-	if (termios->c_iflag & INPCK)
-		port->read_status_mask |= S3C2410_UERSTAT_FRAME |
-			S3C2410_UERSTAT_PARITY;
-	/*
-	 * Which character status flags should we ignore?
-	 */
-	port->ignore_status_mask = 0;
-	if (termios->c_iflag & IGNPAR)
-		port->ignore_status_mask |= S3C2410_UERSTAT_OVERRUN;
-	if (termios->c_iflag & IGNBRK && termios->c_iflag & IGNPAR)
-		port->ignore_status_mask |= S3C2410_UERSTAT_FRAME;
-
-	/*
-	 * Ignore all characters if CREAD is not set.
-	 */
-	if ((termios->c_cflag & CREAD) == 0)
-		port->ignore_status_mask |= RXSTAT_DUMMY_READ;
-
-	spin_unlock_irqrestore(&port->lock, flags);
-}
-
-static const char *s3c24xx_serial_type(struct uart_port *port)
-{
-	switch (port->type) {
-	case PORT_S3C2410:
-		return "S3C2410";
-	case PORT_S3C2440:
-		return "S3C2440";
-	case PORT_S3C2412:
-		return "S3C2412";
-	case PORT_S3C6400:
-		return "S3C6400/10";
-	default:
-		return NULL;
-	}
-}
-
-#define MAP_SIZE (0x100)
-
-static void s3c24xx_serial_release_port(struct uart_port *port)
-{
-	release_mem_region(port->mapbase, MAP_SIZE);
-}
-
-static int s3c24xx_serial_request_port(struct uart_port *port)
-{
-	const char *name = s3c24xx_serial_portname(port);
-	return request_mem_region(port->mapbase, MAP_SIZE, name) ? 0 : -EBUSY;
-}
-
-static void s3c24xx_serial_config_port(struct uart_port *port, int flags)
-{
-	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
-
-	if (flags & UART_CONFIG_TYPE &&
-	    s3c24xx_serial_request_port(port) == 0)
-		port->type = info->type;
-}
-
-/*
- * verify the new serial_struct (for TIOCSSERIAL).
- */
-static int
-s3c24xx_serial_verify_port(struct uart_port *port, struct serial_struct *ser)
-{
-	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
-
-	if (ser->type != PORT_UNKNOWN && ser->type != info->type)
-		return -EINVAL;
-
-	return 0;
-}
-
-
-#ifdef CONFIG_SERIAL_SAMSUNG_CONSOLE
-
-static struct console s3c24xx_serial_console;
-
-static int __init s3c24xx_serial_console_init(void)
-{
-	register_console(&s3c24xx_serial_console);
-	return 0;
-}
-console_initcall(s3c24xx_serial_console_init);
-
-#define S3C24XX_SERIAL_CONSOLE &s3c24xx_serial_console
-#else
-#define S3C24XX_SERIAL_CONSOLE NULL
-#endif
-
-#if defined(CONFIG_SERIAL_SAMSUNG_CONSOLE) && defined(CONFIG_CONSOLE_POLL)
-static int s3c24xx_serial_get_poll_char(struct uart_port *port);
-static void s3c24xx_serial_put_poll_char(struct uart_port *port,
-			 unsigned char c);
-#endif
-
-static struct uart_ops s3c24xx_serial_ops = {
-	.pm		= s3c24xx_serial_pm,
-	.tx_empty	= s3c24xx_serial_tx_empty,
-	.get_mctrl	= s3c24xx_serial_get_mctrl,
-	.set_mctrl	= s3c24xx_serial_set_mctrl,
-	.stop_tx	= s3c24xx_serial_stop_tx,
-	.start_tx	= s3c24xx_serial_start_tx,
-	.stop_rx	= s3c24xx_serial_stop_rx,
-	.break_ctl	= s3c24xx_serial_break_ctl,
-	.startup	= s3c24xx_serial_startup,
-	.shutdown	= s3c24xx_serial_shutdown,
-	.set_termios	= s3c24xx_serial_set_termios,
-	.type		= s3c24xx_serial_type,
-	.release_port	= s3c24xx_serial_release_port,
-	.request_port	= s3c24xx_serial_request_port,
-	.config_port	= s3c24xx_serial_config_port,
-	.verify_port	= s3c24xx_serial_verify_port,
-#if defined(CONFIG_SERIAL_SAMSUNG_CONSOLE) && defined(CONFIG_CONSOLE_POLL)
-	.poll_get_char = s3c24xx_serial_get_poll_char,
-	.poll_put_char = s3c24xx_serial_put_poll_char,
-#endif
-};
-
-static struct uart_driver s3c24xx_uart_drv = {
-	.owner		= THIS_MODULE,
-	.driver_name	= "s3c2410_serial",
-	.nr		= CONFIG_SERIAL_SAMSUNG_UARTS,
-	.cons		= S3C24XX_SERIAL_CONSOLE,
-	.dev_name	= S3C24XX_SERIAL_NAME,
-	.major		= S3C24XX_SERIAL_MAJOR,
-	.minor		= S3C24XX_SERIAL_MINOR,
-};
-
-#define __PORT_LOCK_UNLOCKED(i) \
-	__SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[i].port.lock)
-static struct s3c24xx_uart_port
-s3c24xx_serial_ports[CONFIG_SERIAL_SAMSUNG_UARTS] = {
-	[0] = {
-		.port = {
-			.lock		= __PORT_LOCK_UNLOCKED(0),
-			.iotype		= UPIO_MEM,
-			.uartclk	= 0,
-			.fifosize	= 16,
-			.ops		= &s3c24xx_serial_ops,
-			.flags		= UPF_BOOT_AUTOCONF,
-			.line		= 0,
-		}
-	},
-	[1] = {
-		.port = {
-			.lock		= __PORT_LOCK_UNLOCKED(1),
-			.iotype		= UPIO_MEM,
-			.uartclk	= 0,
-			.fifosize	= 16,
-			.ops		= &s3c24xx_serial_ops,
-			.flags		= UPF_BOOT_AUTOCONF,
-			.line		= 1,
-		}
-	},
-#if CONFIG_SERIAL_SAMSUNG_UARTS > 2
-
-	[2] = {
-		.port = {
-			.lock		= __PORT_LOCK_UNLOCKED(2),
-			.iotype		= UPIO_MEM,
-			.uartclk	= 0,
-			.fifosize	= 16,
-			.ops		= &s3c24xx_serial_ops,
-			.flags		= UPF_BOOT_AUTOCONF,
-			.line		= 2,
-		}
-	},
-#endif
-#if CONFIG_SERIAL_SAMSUNG_UARTS > 3
-	[3] = {
-		.port = {
-			.lock		= __PORT_LOCK_UNLOCKED(3),
-			.iotype		= UPIO_MEM,
-			.uartclk	= 0,
-			.fifosize	= 16,
-			.ops		= &s3c24xx_serial_ops,
-			.flags		= UPF_BOOT_AUTOCONF,
-			.line		= 3,
-		}
-	}
-#endif
-};
-#undef __PORT_LOCK_UNLOCKED
-
-/* s3c24xx_serial_resetport
- *
- * reset the fifos and other the settings.
-*/
-
-static void s3c24xx_serial_resetport(struct uart_port *port,
-				   struct s3c2410_uartcfg *cfg)
-{
-	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
-	unsigned long ucon = rd_regl(port, S3C2410_UCON);
-	unsigned int ucon_mask;
-
-	ucon_mask = info->clksel_mask;
-	if (info->type == PORT_S3C2440)
-		ucon_mask |= S3C2440_UCON0_DIVMASK;
-
-	ucon &= ucon_mask;
-	wr_regl(port, S3C2410_UCON,  ucon | cfg->ucon);
-
-	/* reset both fifos */
-	wr_regl(port, S3C2410_UFCON, cfg->ufcon | S3C2410_UFCON_RESETBOTH);
-	wr_regl(port, S3C2410_UFCON, cfg->ufcon);
-
-	/* some delay is required after fifo reset */
-	udelay(1);
-}
-
-
-#ifdef CONFIG_ARM_S3C24XX_CPUFREQ
-
-static int s3c24xx_serial_cpufreq_transition(struct notifier_block *nb,
-					     unsigned long val, void *data)
-{
-	struct s3c24xx_uart_port *port;
-	struct uart_port *uport;
-
-	port = container_of(nb, struct s3c24xx_uart_port, freq_transition);
-	uport = &port->port;
-
-	/* check to see if port is enabled */
-
-	if (port->pm_level != 0)
-		return 0;
-
-	/* try and work out if the baudrate is changing, we can detect
-	 * a change in rate, but we do not have support for detecting
-	 * a disturbance in the clock-rate over the change.
-	 */
-
-	if (IS_ERR(port->baudclk))
-		goto exit;
-
-	if (port->baudclk_rate == clk_get_rate(port->baudclk))
-		goto exit;
-
-	if (val == CPUFREQ_PRECHANGE) {
-		/* we should really shut the port down whilst the
-		 * frequency change is in progress. */
-
-	} else if (val == CPUFREQ_POSTCHANGE) {
-		struct ktermios *termios;
-		struct tty_struct *tty;
-
-		if (uport->state == NULL)
-			goto exit;
-
-		tty = uport->state->port.tty;
-
-		if (tty == NULL)
-			goto exit;
-
-		termios = &tty->termios;
-
-		if (termios == NULL) {
-			dev_warn(uport->dev, "%s: no termios?\n", __func__);
-			goto exit;
-		}
-
-		s3c24xx_serial_set_termios(uport, termios, NULL);
-	}
-
-exit:
-	return 0;
-}
-
-static inline int
-s3c24xx_serial_cpufreq_register(struct s3c24xx_uart_port *port)
-{
-	port->freq_transition.notifier_call = s3c24xx_serial_cpufreq_transition;
-
-	return cpufreq_register_notifier(&port->freq_transition,
-					 CPUFREQ_TRANSITION_NOTIFIER);
-}
-
-static inline void
-s3c24xx_serial_cpufreq_deregister(struct s3c24xx_uart_port *port)
-{
-	cpufreq_unregister_notifier(&port->freq_transition,
-				    CPUFREQ_TRANSITION_NOTIFIER);
-}
-
-#else
-static inline int
-s3c24xx_serial_cpufreq_register(struct s3c24xx_uart_port *port)
-{
-	return 0;
-}
-
-static inline void
-s3c24xx_serial_cpufreq_deregister(struct s3c24xx_uart_port *port)
-{
-}
-#endif
-
-static int s3c24xx_serial_enable_baudclk(struct s3c24xx_uart_port *ourport)
-{
-	struct device *dev = ourport->port.dev;
-	struct s3c24xx_uart_info *info = ourport->info;
-	char clk_name[MAX_CLK_NAME_LENGTH];
-	unsigned int clk_sel;
-	struct clk *clk;
-	int clk_num;
-	int ret;
-
-	clk_sel = ourport->cfg->clk_sel ? : info->def_clk_sel;
-	for (clk_num = 0; clk_num < info->num_clks; clk_num++) {
-		if (!(clk_sel & (1 << clk_num)))
-			continue;
-
-		sprintf(clk_name, "clk_uart_baud%d", clk_num);
-		clk = clk_get(dev, clk_name);
-		if (IS_ERR(clk))
-			continue;
-
-		ret = clk_prepare_enable(clk);
-		if (ret) {
-			clk_put(clk);
-			continue;
-		}
-
-		ourport->baudclk = clk;
-		ourport->baudclk_rate = clk_get_rate(clk);
-		s3c24xx_serial_setsource(&ourport->port, clk_num);
-
-		return 0;
-	}
-
-	return -EINVAL;
-}
-
-/* s3c24xx_serial_init_port
- *
- * initialise a single serial port from the platform device given
- */
-
-static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport,
-				    struct platform_device *platdev)
-{
-	struct uart_port *port = &ourport->port;
-	struct s3c2410_uartcfg *cfg = ourport->cfg;
-	struct resource *res;
-	int ret;
-
-	dbg("s3c24xx_serial_init_port: port=%p, platdev=%p\n", port, platdev);
-
-	if (platdev == NULL)
-		return -ENODEV;
-
-	if (port->mapbase != 0)
-		return -EINVAL;
-
-	/* setup info for port */
-	port->dev	= &platdev->dev;
-
-	/* Startup sequence is different for s3c64xx and higher SoC's */
-	if (s3c24xx_serial_has_interrupt_mask(port))
-		s3c24xx_serial_ops.startup = s3c64xx_serial_startup;
-
-	port->uartclk = 1;
-
-	if (cfg->uart_flags & UPF_CONS_FLOW) {
-		dbg("s3c24xx_serial_init_port: enabling flow control\n");
-		port->flags |= UPF_CONS_FLOW;
-	}
-
-	/* sort our the physical and virtual addresses for each UART */
-
-	res = platform_get_resource(platdev, IORESOURCE_MEM, 0);
-	if (res == NULL) {
-		dev_err(port->dev, "failed to find memory resource for uart\n");
-		return -EINVAL;
-	}
-
-	dbg("resource %pR)\n", res);
-
-	port->membase = devm_ioremap(port->dev, res->start, resource_size(res));
-	if (!port->membase) {
-		dev_err(port->dev, "failed to remap controller address\n");
-		return -EBUSY;
-	}
-
-	port->mapbase = res->start;
-	ret = platform_get_irq(platdev, 0);
-	if (ret < 0)
-		port->irq = 0;
-	else {
-		port->irq = ret;
-		ourport->rx_irq = ret;
-		ourport->tx_irq = ret + 1;
-	}
-
-	if (!s3c24xx_serial_has_interrupt_mask(port)) {
-		ret = platform_get_irq(platdev, 1);
-		if (ret > 0)
-			ourport->tx_irq = ret;
-	}
-	/*
-	 * DMA is currently supported only on DT platforms, if DMA properties
-	 * are specified.
-	 */
-	if (platdev->dev.of_node && of_find_property(platdev->dev.of_node,
-						     "dmas", NULL)) {
-		ourport->dma = devm_kzalloc(port->dev,
-					    sizeof(*ourport->dma),
-					    GFP_KERNEL);
-		if (!ourport->dma) {
-			ret = -ENOMEM;
-			goto err;
-		}
-	}
-
-	ourport->clk	= clk_get(&platdev->dev, "uart");
-	if (IS_ERR(ourport->clk)) {
-		pr_err("%s: Controller clock not found\n",
-				dev_name(&platdev->dev));
-		ret = PTR_ERR(ourport->clk);
-		goto err;
-	}
-
-	ret = clk_prepare_enable(ourport->clk);
-	if (ret) {
-		pr_err("uart: clock failed to prepare+enable: %d\n", ret);
-		clk_put(ourport->clk);
-		goto err;
-	}
-
-	ret = s3c24xx_serial_enable_baudclk(ourport);
-	if (ret)
-		pr_warn("uart: failed to enable baudclk\n");
-
-	/* Keep all interrupts masked and cleared */
-	if (s3c24xx_serial_has_interrupt_mask(port)) {
-		wr_regl(port, S3C64XX_UINTM, 0xf);
-		wr_regl(port, S3C64XX_UINTP, 0xf);
-		wr_regl(port, S3C64XX_UINTSP, 0xf);
-	}
-
-	dbg("port: map=%pa, mem=%p, irq=%d (%d,%d), clock=%u\n",
-	    &port->mapbase, port->membase, port->irq,
-	    ourport->rx_irq, ourport->tx_irq, port->uartclk);
-
-	/* reset the fifos (and setup the uart) */
-	s3c24xx_serial_resetport(port, cfg);
-
-	return 0;
-
-err:
-	port->mapbase = 0;
-	return ret;
-}
-
-/* Device driver serial port probe */
-
-static const struct of_device_id s3c24xx_uart_dt_match[];
-static int probe_index;
-
-static inline struct s3c24xx_serial_drv_data *s3c24xx_get_driver_data(
-			struct platform_device *pdev)
-{
-#ifdef CONFIG_OF
-	if (pdev->dev.of_node) {
-		const struct of_device_id *match;
-		match = of_match_node(s3c24xx_uart_dt_match, pdev->dev.of_node);
-		return (struct s3c24xx_serial_drv_data *)match->data;
-	}
-#endif
-	return (struct s3c24xx_serial_drv_data *)
-			platform_get_device_id(pdev)->driver_data;
-}
-
-static int s3c24xx_serial_probe(struct platform_device *pdev)
-{
-	struct device_node *np = pdev->dev.of_node;
-	struct s3c24xx_uart_port *ourport;
-	int index = probe_index;
-	int ret;
-
-	if (np) {
-		ret = of_alias_get_id(np, "serial");
-		if (ret >= 0)
-			index = ret;
-	}
-
-	dbg("s3c24xx_serial_probe(%p) %d\n", pdev, index);
-
-	if (index >= ARRAY_SIZE(s3c24xx_serial_ports)) {
-		dev_err(&pdev->dev, "serial%d out of range\n", index);
-		return -EINVAL;
-	}
-	ourport = &s3c24xx_serial_ports[index];
-
-	ourport->drv_data = s3c24xx_get_driver_data(pdev);
-	if (!ourport->drv_data) {
-		dev_err(&pdev->dev, "could not find driver data\n");
-		return -ENODEV;
-	}
-
-	ourport->baudclk = ERR_PTR(-EINVAL);
-	ourport->info = ourport->drv_data->info;
-	ourport->cfg = (dev_get_platdata(&pdev->dev)) ?
-			dev_get_platdata(&pdev->dev) :
-			ourport->drv_data->def_cfg;
-
-	if (np)
-		of_property_read_u32(np,
-			"samsung,uart-fifosize", &ourport->port.fifosize);
-
-	if (ourport->drv_data->fifosize[index])
-		ourport->port.fifosize = ourport->drv_data->fifosize[index];
-	else if (ourport->info->fifosize)
-		ourport->port.fifosize = ourport->info->fifosize;
-
-	/*
-	 * DMA transfers must be aligned at least to cache line size,
-	 * so find minimal transfer size suitable for DMA mode
-	 */
-	ourport->min_dma_size = max_t(int, ourport->port.fifosize,
-				    dma_get_cache_alignment());
-
-	dbg("%s: initialising port %p...\n", __func__, ourport);
-
-	ret = s3c24xx_serial_init_port(ourport, pdev);
-	if (ret < 0)
-		return ret;
-
-	if (!s3c24xx_uart_drv.state) {
-		ret = uart_register_driver(&s3c24xx_uart_drv);
-		if (ret < 0) {
-			pr_err("Failed to register Samsung UART driver\n");
-			return ret;
-		}
-	}
-
-	dbg("%s: adding port\n", __func__);
-	uart_add_one_port(&s3c24xx_uart_drv, &ourport->port);
-	platform_set_drvdata(pdev, &ourport->port);
-
-	/*
-	 * Deactivate the clock enabled in s3c24xx_serial_init_port here,
-	 * so that a potential re-enablement through the pm-callback overlaps
-	 * and keeps the clock enabled in this case.
-	 */
-	clk_disable_unprepare(ourport->clk);
-	if (!IS_ERR(ourport->baudclk))
-		clk_disable_unprepare(ourport->baudclk);
-
-	ret = s3c24xx_serial_cpufreq_register(ourport);
-	if (ret < 0)
-		dev_err(&pdev->dev, "failed to add cpufreq notifier\n");
-
-	probe_index++;
-
-	return 0;
-}
-
-static int s3c24xx_serial_remove(struct platform_device *dev)
-{
-	struct uart_port *port = s3c24xx_dev_to_port(&dev->dev);
-
-	if (port) {
-		s3c24xx_serial_cpufreq_deregister(to_ourport(port));
-		uart_remove_one_port(&s3c24xx_uart_drv, port);
-	}
-
-	uart_unregister_driver(&s3c24xx_uart_drv);
-
-	return 0;
-}
-
-/* UART power management code */
-#ifdef CONFIG_PM_SLEEP
-static int s3c24xx_serial_suspend(struct device *dev)
-{
-	struct uart_port *port = s3c24xx_dev_to_port(dev);
-
-	if (port)
-		uart_suspend_port(&s3c24xx_uart_drv, port);
-
-	return 0;
-}
-
-static int s3c24xx_serial_resume(struct device *dev)
-{
-	struct uart_port *port = s3c24xx_dev_to_port(dev);
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-
-	if (port) {
-		clk_prepare_enable(ourport->clk);
-		if (!IS_ERR(ourport->baudclk))
-			clk_prepare_enable(ourport->baudclk);
-		s3c24xx_serial_resetport(port, s3c24xx_port_to_cfg(port));
-		if (!IS_ERR(ourport->baudclk))
-			clk_disable_unprepare(ourport->baudclk);
-		clk_disable_unprepare(ourport->clk);
-
-		uart_resume_port(&s3c24xx_uart_drv, port);
-	}
-
-	return 0;
-}
-
-static int s3c24xx_serial_resume_noirq(struct device *dev)
-{
-	struct uart_port *port = s3c24xx_dev_to_port(dev);
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-
-	if (port) {
-		/* restore IRQ mask */
-		if (s3c24xx_serial_has_interrupt_mask(port)) {
-			unsigned int uintm = 0xf;
-			if (tx_enabled(port))
-				uintm &= ~S3C64XX_UINTM_TXD_MSK;
-			if (rx_enabled(port))
-				uintm &= ~S3C64XX_UINTM_RXD_MSK;
-			clk_prepare_enable(ourport->clk);
-			if (!IS_ERR(ourport->baudclk))
-				clk_prepare_enable(ourport->baudclk);
-			wr_regl(port, S3C64XX_UINTM, uintm);
-			if (!IS_ERR(ourport->baudclk))
-				clk_disable_unprepare(ourport->baudclk);
-			clk_disable_unprepare(ourport->clk);
-		}
-	}
-
-	return 0;
-}
-
-static const struct dev_pm_ops s3c24xx_serial_pm_ops = {
-	.suspend = s3c24xx_serial_suspend,
-	.resume = s3c24xx_serial_resume,
-	.resume_noirq = s3c24xx_serial_resume_noirq,
-};
-#define SERIAL_SAMSUNG_PM_OPS	(&s3c24xx_serial_pm_ops)
-
-#else /* !CONFIG_PM_SLEEP */
-
-#define SERIAL_SAMSUNG_PM_OPS	NULL
-#endif /* CONFIG_PM_SLEEP */
-
-/* Console code */
-
-#ifdef CONFIG_SERIAL_SAMSUNG_CONSOLE
-
-static struct uart_port *cons_uart;
-
-static int
-s3c24xx_serial_console_txrdy(struct uart_port *port, unsigned int ufcon)
-{
-	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
-	unsigned long ufstat, utrstat;
-
-	if (ufcon & S3C2410_UFCON_FIFOMODE) {
-		/* fifo mode - check amount of data in fifo registers... */
-
-		ufstat = rd_regl(port, S3C2410_UFSTAT);
-		return (ufstat & info->tx_fifofull) ? 0 : 1;
-	}
-
-	/* in non-fifo mode, we go and use the tx buffer empty */
-
-	utrstat = rd_regl(port, S3C2410_UTRSTAT);
-	return (utrstat & S3C2410_UTRSTAT_TXE) ? 1 : 0;
-}
-
-static bool
-s3c24xx_port_configured(unsigned int ucon)
-{
-	/* consider the serial port configured if the tx/rx mode set */
-	return (ucon & 0xf) != 0;
-}
-
-#ifdef CONFIG_CONSOLE_POLL
-/*
- * Console polling routines for writing and reading from the uart while
- * in an interrupt or debug context.
- */
-
-static int s3c24xx_serial_get_poll_char(struct uart_port *port)
-{
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-	unsigned int ufstat;
-
-	ufstat = rd_regl(port, S3C2410_UFSTAT);
-	if (s3c24xx_serial_rx_fifocnt(ourport, ufstat) == 0)
-		return NO_POLL_CHAR;
-
-	return rd_regb(port, S3C2410_URXH);
-}
-
-static void s3c24xx_serial_put_poll_char(struct uart_port *port,
-		unsigned char c)
-{
-	unsigned int ufcon = rd_regl(port, S3C2410_UFCON);
-	unsigned int ucon = rd_regl(port, S3C2410_UCON);
-
-	/* not possible to xmit on unconfigured port */
-	if (!s3c24xx_port_configured(ucon))
-		return;
-
-	while (!s3c24xx_serial_console_txrdy(port, ufcon))
-		cpu_relax();
-	wr_regb(port, S3C2410_UTXH, c);
-}
-
-#endif /* CONFIG_CONSOLE_POLL */
-
-static void
-s3c24xx_serial_console_putchar(struct uart_port *port, int ch)
-{
-	unsigned int ufcon = rd_regl(port, S3C2410_UFCON);
-
-	while (!s3c24xx_serial_console_txrdy(port, ufcon))
-		cpu_relax();
-	wr_regb(port, S3C2410_UTXH, ch);
-}
-
-static void
-s3c24xx_serial_console_write(struct console *co, const char *s,
-			     unsigned int count)
-{
-	unsigned int ucon = rd_regl(cons_uart, S3C2410_UCON);
-
-	/* not possible to xmit on unconfigured port */
-	if (!s3c24xx_port_configured(ucon))
-		return;
-
-	uart_console_write(cons_uart, s, count, s3c24xx_serial_console_putchar);
-}
-
-static void __init
-s3c24xx_serial_get_options(struct uart_port *port, int *baud,
-			   int *parity, int *bits)
-{
-	struct clk *clk;
-	unsigned int ulcon;
-	unsigned int ucon;
-	unsigned int ubrdiv;
-	unsigned long rate;
-	unsigned int clk_sel;
-	char clk_name[MAX_CLK_NAME_LENGTH];
-
-	ulcon  = rd_regl(port, S3C2410_ULCON);
-	ucon   = rd_regl(port, S3C2410_UCON);
-	ubrdiv = rd_regl(port, S3C2410_UBRDIV);
-
-	dbg("s3c24xx_serial_get_options: port=%p\n"
-	    "registers: ulcon=%08x, ucon=%08x, ubdriv=%08x\n",
-	    port, ulcon, ucon, ubrdiv);
-
-	if (s3c24xx_port_configured(ucon)) {
-		switch (ulcon & S3C2410_LCON_CSMASK) {
-		case S3C2410_LCON_CS5:
-			*bits = 5;
-			break;
-		case S3C2410_LCON_CS6:
-			*bits = 6;
-			break;
-		case S3C2410_LCON_CS7:
-			*bits = 7;
-			break;
-		case S3C2410_LCON_CS8:
-		default:
-			*bits = 8;
-			break;
-		}
-
-		switch (ulcon & S3C2410_LCON_PMASK) {
-		case S3C2410_LCON_PEVEN:
-			*parity = 'e';
-			break;
-
-		case S3C2410_LCON_PODD:
-			*parity = 'o';
-			break;
-
-		case S3C2410_LCON_PNONE:
-		default:
-			*parity = 'n';
-		}
-
-		/* now calculate the baud rate */
-
-		clk_sel = s3c24xx_serial_getsource(port);
-		sprintf(clk_name, "clk_uart_baud%d", clk_sel);
-
-		clk = clk_get(port->dev, clk_name);
-		if (!IS_ERR(clk))
-			rate = clk_get_rate(clk);
-		else
-			rate = 1;
-
-		*baud = rate / (16 * (ubrdiv + 1));
-		dbg("calculated baud %d\n", *baud);
-	}
-
-}
-
-static int __init
-s3c24xx_serial_console_setup(struct console *co, char *options)
-{
-	struct uart_port *port;
-	int baud = 9600;
-	int bits = 8;
-	int parity = 'n';
-	int flow = 'n';
-
-	dbg("s3c24xx_serial_console_setup: co=%p (%d), %s\n",
-	    co, co->index, options);
-
-	/* is this a valid port */
-
-	if (co->index == -1 || co->index >= CONFIG_SERIAL_SAMSUNG_UARTS)
-		co->index = 0;
-
-	port = &s3c24xx_serial_ports[co->index].port;
-
-	/* is the port configured? */
-
-	if (port->mapbase == 0x0)
-		return -ENODEV;
-
-	cons_uart = port;
-
-	dbg("s3c24xx_serial_console_setup: port=%p (%d)\n", port, co->index);
-
-	/*
-	 * Check whether an invalid uart number has been specified, and
-	 * if so, search for the first available port that does have
-	 * console support.
-	 */
-	if (options)
-		uart_parse_options(options, &baud, &parity, &bits, &flow);
-	else
-		s3c24xx_serial_get_options(port, &baud, &parity, &bits);
-
-	dbg("s3c24xx_serial_console_setup: baud %d\n", baud);
-
-	return uart_set_options(port, co, baud, parity, bits, flow);
-}
-
-static struct console s3c24xx_serial_console = {
-	.name		= S3C24XX_SERIAL_NAME,
-	.device		= uart_console_device,
-	.flags		= CON_PRINTBUFFER,
-	.index		= -1,
-	.write		= s3c24xx_serial_console_write,
-	.setup		= s3c24xx_serial_console_setup,
-	.data		= &s3c24xx_uart_drv,
-};
-#endif /* CONFIG_SERIAL_SAMSUNG_CONSOLE */
-
-#ifdef CONFIG_CPU_S3C2410
-static struct s3c24xx_serial_drv_data s3c2410_serial_drv_data = {
-	.info = &(struct s3c24xx_uart_info) {
-		.name		= "Samsung S3C2410 UART",
-		.type		= PORT_S3C2410,
-		.fifosize	= 16,
-		.rx_fifomask	= S3C2410_UFSTAT_RXMASK,
-		.rx_fifoshift	= S3C2410_UFSTAT_RXSHIFT,
-		.rx_fifofull	= S3C2410_UFSTAT_RXFULL,
-		.tx_fifofull	= S3C2410_UFSTAT_TXFULL,
-		.tx_fifomask	= S3C2410_UFSTAT_TXMASK,
-		.tx_fifoshift	= S3C2410_UFSTAT_TXSHIFT,
-		.def_clk_sel	= S3C2410_UCON_CLKSEL0,
-		.num_clks	= 2,
-		.clksel_mask	= S3C2410_UCON_CLKMASK,
-		.clksel_shift	= S3C2410_UCON_CLKSHIFT,
-	},
-	.def_cfg = &(struct s3c2410_uartcfg) {
-		.ucon		= S3C2410_UCON_DEFAULT,
-		.ufcon		= S3C2410_UFCON_DEFAULT,
-	},
-};
-#define S3C2410_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c2410_serial_drv_data)
-#else
-#define S3C2410_SERIAL_DRV_DATA (kernel_ulong_t)NULL
-#endif
-
-#ifdef CONFIG_CPU_S3C2412
-static struct s3c24xx_serial_drv_data s3c2412_serial_drv_data = {
-	.info = &(struct s3c24xx_uart_info) {
-		.name		= "Samsung S3C2412 UART",
-		.type		= PORT_S3C2412,
-		.fifosize	= 64,
-		.has_divslot	= 1,
-		.rx_fifomask	= S3C2440_UFSTAT_RXMASK,
-		.rx_fifoshift	= S3C2440_UFSTAT_RXSHIFT,
-		.rx_fifofull	= S3C2440_UFSTAT_RXFULL,
-		.tx_fifofull	= S3C2440_UFSTAT_TXFULL,
-		.tx_fifomask	= S3C2440_UFSTAT_TXMASK,
-		.tx_fifoshift	= S3C2440_UFSTAT_TXSHIFT,
-		.def_clk_sel	= S3C2410_UCON_CLKSEL2,
-		.num_clks	= 4,
-		.clksel_mask	= S3C2412_UCON_CLKMASK,
-		.clksel_shift	= S3C2412_UCON_CLKSHIFT,
-	},
-	.def_cfg = &(struct s3c2410_uartcfg) {
-		.ucon		= S3C2410_UCON_DEFAULT,
-		.ufcon		= S3C2410_UFCON_DEFAULT,
-	},
-};
-#define S3C2412_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c2412_serial_drv_data)
-#else
-#define S3C2412_SERIAL_DRV_DATA (kernel_ulong_t)NULL
-#endif
-
-#if defined(CONFIG_CPU_S3C2440) || defined(CONFIG_CPU_S3C2416) || \
-	defined(CONFIG_CPU_S3C2443) || defined(CONFIG_CPU_S3C2442)
-static struct s3c24xx_serial_drv_data s3c2440_serial_drv_data = {
-	.info = &(struct s3c24xx_uart_info) {
-		.name		= "Samsung S3C2440 UART",
-		.type		= PORT_S3C2440,
-		.fifosize	= 64,
-		.has_divslot	= 1,
-		.rx_fifomask	= S3C2440_UFSTAT_RXMASK,
-		.rx_fifoshift	= S3C2440_UFSTAT_RXSHIFT,
-		.rx_fifofull	= S3C2440_UFSTAT_RXFULL,
-		.tx_fifofull	= S3C2440_UFSTAT_TXFULL,
-		.tx_fifomask	= S3C2440_UFSTAT_TXMASK,
-		.tx_fifoshift	= S3C2440_UFSTAT_TXSHIFT,
-		.def_clk_sel	= S3C2410_UCON_CLKSEL2,
-		.num_clks	= 4,
-		.clksel_mask	= S3C2412_UCON_CLKMASK,
-		.clksel_shift	= S3C2412_UCON_CLKSHIFT,
-	},
-	.def_cfg = &(struct s3c2410_uartcfg) {
-		.ucon		= S3C2410_UCON_DEFAULT,
-		.ufcon		= S3C2410_UFCON_DEFAULT,
-	},
-};
-#define S3C2440_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c2440_serial_drv_data)
-#else
-#define S3C2440_SERIAL_DRV_DATA (kernel_ulong_t)NULL
-#endif
-
-#if defined(CONFIG_CPU_S3C6400) || defined(CONFIG_CPU_S3C6410)
-static struct s3c24xx_serial_drv_data s3c6400_serial_drv_data = {
-	.info = &(struct s3c24xx_uart_info) {
-		.name		= "Samsung S3C6400 UART",
-		.type		= PORT_S3C6400,
-		.fifosize	= 64,
-		.has_divslot	= 1,
-		.rx_fifomask	= S3C2440_UFSTAT_RXMASK,
-		.rx_fifoshift	= S3C2440_UFSTAT_RXSHIFT,
-		.rx_fifofull	= S3C2440_UFSTAT_RXFULL,
-		.tx_fifofull	= S3C2440_UFSTAT_TXFULL,
-		.tx_fifomask	= S3C2440_UFSTAT_TXMASK,
-		.tx_fifoshift	= S3C2440_UFSTAT_TXSHIFT,
-		.def_clk_sel	= S3C2410_UCON_CLKSEL2,
-		.num_clks	= 4,
-		.clksel_mask	= S3C6400_UCON_CLKMASK,
-		.clksel_shift	= S3C6400_UCON_CLKSHIFT,
-	},
-	.def_cfg = &(struct s3c2410_uartcfg) {
-		.ucon		= S3C2410_UCON_DEFAULT,
-		.ufcon		= S3C2410_UFCON_DEFAULT,
-	},
-};
-#define S3C6400_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c6400_serial_drv_data)
-#else
-#define S3C6400_SERIAL_DRV_DATA (kernel_ulong_t)NULL
-#endif
-
-#ifdef CONFIG_CPU_S5PV210
-static struct s3c24xx_serial_drv_data s5pv210_serial_drv_data = {
-	.info = &(struct s3c24xx_uart_info) {
-		.name		= "Samsung S5PV210 UART",
-		.type		= PORT_S3C6400,
-		.has_divslot	= 1,
-		.rx_fifomask	= S5PV210_UFSTAT_RXMASK,
-		.rx_fifoshift	= S5PV210_UFSTAT_RXSHIFT,
-		.rx_fifofull	= S5PV210_UFSTAT_RXFULL,
-		.tx_fifofull	= S5PV210_UFSTAT_TXFULL,
-		.tx_fifomask	= S5PV210_UFSTAT_TXMASK,
-		.tx_fifoshift	= S5PV210_UFSTAT_TXSHIFT,
-		.def_clk_sel	= S3C2410_UCON_CLKSEL0,
-		.num_clks	= 2,
-		.clksel_mask	= S5PV210_UCON_CLKMASK,
-		.clksel_shift	= S5PV210_UCON_CLKSHIFT,
-	},
-	.def_cfg = &(struct s3c2410_uartcfg) {
-		.ucon		= S5PV210_UCON_DEFAULT,
-		.ufcon		= S5PV210_UFCON_DEFAULT,
-	},
-	.fifosize = { 256, 64, 16, 16 },
-};
-#define S5PV210_SERIAL_DRV_DATA ((kernel_ulong_t)&s5pv210_serial_drv_data)
-#else
-#define S5PV210_SERIAL_DRV_DATA	(kernel_ulong_t)NULL
-#endif
-
-#if defined(CONFIG_ARCH_EXYNOS)
-#define EXYNOS_COMMON_SERIAL_DRV_DATA				\
-	.info = &(struct s3c24xx_uart_info) {			\
-		.name		= "Samsung Exynos UART",	\
-		.type		= PORT_S3C6400,			\
-		.has_divslot	= 1,				\
-		.rx_fifomask	= S5PV210_UFSTAT_RXMASK,	\
-		.rx_fifoshift	= S5PV210_UFSTAT_RXSHIFT,	\
-		.rx_fifofull	= S5PV210_UFSTAT_RXFULL,	\
-		.tx_fifofull	= S5PV210_UFSTAT_TXFULL,	\
-		.tx_fifomask	= S5PV210_UFSTAT_TXMASK,	\
-		.tx_fifoshift	= S5PV210_UFSTAT_TXSHIFT,	\
-		.def_clk_sel	= S3C2410_UCON_CLKSEL0,		\
-		.num_clks	= 1,				\
-		.clksel_mask	= 0,				\
-		.clksel_shift	= 0,				\
-	},							\
-	.def_cfg = &(struct s3c2410_uartcfg) {			\
-		.ucon		= S5PV210_UCON_DEFAULT,		\
-		.ufcon		= S5PV210_UFCON_DEFAULT,	\
-		.has_fracval	= 1,				\
-	}							\
-
-static struct s3c24xx_serial_drv_data exynos4210_serial_drv_data = {
-	EXYNOS_COMMON_SERIAL_DRV_DATA,
-	.fifosize = { 256, 64, 16, 16 },
-};
-
-static struct s3c24xx_serial_drv_data exynos5433_serial_drv_data = {
-	EXYNOS_COMMON_SERIAL_DRV_DATA,
-	.fifosize = { 64, 256, 16, 256 },
-};
-
-#define EXYNOS4210_SERIAL_DRV_DATA ((kernel_ulong_t)&exynos4210_serial_drv_data)
-#define EXYNOS5433_SERIAL_DRV_DATA ((kernel_ulong_t)&exynos5433_serial_drv_data)
-#else
-#define EXYNOS4210_SERIAL_DRV_DATA (kernel_ulong_t)NULL
-#define EXYNOS5433_SERIAL_DRV_DATA (kernel_ulong_t)NULL
-#endif
-
-static const struct platform_device_id s3c24xx_serial_driver_ids[] = {
-	{
-		.name		= "s3c2410-uart",
-		.driver_data	= S3C2410_SERIAL_DRV_DATA,
-	}, {
-		.name		= "s3c2412-uart",
-		.driver_data	= S3C2412_SERIAL_DRV_DATA,
-	}, {
-		.name		= "s3c2440-uart",
-		.driver_data	= S3C2440_SERIAL_DRV_DATA,
-	}, {
-		.name		= "s3c6400-uart",
-		.driver_data	= S3C6400_SERIAL_DRV_DATA,
-	}, {
-		.name		= "s5pv210-uart",
-		.driver_data	= S5PV210_SERIAL_DRV_DATA,
-	}, {
-		.name		= "exynos4210-uart",
-		.driver_data	= EXYNOS4210_SERIAL_DRV_DATA,
-	}, {
-		.name		= "exynos5433-uart",
-		.driver_data	= EXYNOS5433_SERIAL_DRV_DATA,
-	},
-	{ },
-};
-MODULE_DEVICE_TABLE(platform, s3c24xx_serial_driver_ids);
-
-#ifdef CONFIG_OF
-static const struct of_device_id s3c24xx_uart_dt_match[] = {
-	{ .compatible = "samsung,s3c2410-uart",
-		.data = (void *)S3C2410_SERIAL_DRV_DATA },
-	{ .compatible = "samsung,s3c2412-uart",
-		.data = (void *)S3C2412_SERIAL_DRV_DATA },
-	{ .compatible = "samsung,s3c2440-uart",
-		.data = (void *)S3C2440_SERIAL_DRV_DATA },
-	{ .compatible = "samsung,s3c6400-uart",
-		.data = (void *)S3C6400_SERIAL_DRV_DATA },
-	{ .compatible = "samsung,s5pv210-uart",
-		.data = (void *)S5PV210_SERIAL_DRV_DATA },
-	{ .compatible = "samsung,exynos4210-uart",
-		.data = (void *)EXYNOS4210_SERIAL_DRV_DATA },
-	{ .compatible = "samsung,exynos5433-uart",
-		.data = (void *)EXYNOS5433_SERIAL_DRV_DATA },
-	{},
-};
-MODULE_DEVICE_TABLE(of, s3c24xx_uart_dt_match);
-#endif
-
-static struct platform_driver samsung_serial_driver = {
-	.probe		= s3c24xx_serial_probe,
-	.remove		= s3c24xx_serial_remove,
-	.id_table	= s3c24xx_serial_driver_ids,
-	.driver		= {
-		.name	= "samsung-uart",
-		.pm	= SERIAL_SAMSUNG_PM_OPS,
-		.of_match_table	= of_match_ptr(s3c24xx_uart_dt_match),
-	},
-};
-
-module_platform_driver(samsung_serial_driver);
-
-#ifdef CONFIG_SERIAL_SAMSUNG_CONSOLE
-/*
- * Early console.
- */
-
-struct samsung_early_console_data {
-	u32 txfull_mask;
-};
-
-static void samsung_early_busyuart(struct uart_port *port)
-{
-	while (!(readl(port->membase + S3C2410_UTRSTAT) & S3C2410_UTRSTAT_TXFE))
-		;
-}
-
-static void samsung_early_busyuart_fifo(struct uart_port *port)
-{
-	struct samsung_early_console_data *data = port->private_data;
-
-	while (readl(port->membase + S3C2410_UFSTAT) & data->txfull_mask)
-		;
-}
-
-static void samsung_early_putc(struct uart_port *port, int c)
-{
-	if (readl(port->membase + S3C2410_UFCON) & S3C2410_UFCON_FIFOMODE)
-		samsung_early_busyuart_fifo(port);
-	else
-		samsung_early_busyuart(port);
-
-	writeb(c, port->membase + S3C2410_UTXH);
-}
-
-static void samsung_early_write(struct console *con, const char *s, unsigned n)
-{
-	struct earlycon_device *dev = con->data;
-
-	uart_console_write(&dev->port, s, n, samsung_early_putc);
-}
-
-static int __init samsung_early_console_setup(struct earlycon_device *device,
-					      const char *opt)
-{
-	if (!device->port.membase)
-		return -ENODEV;
-
-	device->con->write = samsung_early_write;
-	return 0;
-}
-
-/* S3C2410 */
-static struct samsung_early_console_data s3c2410_early_console_data = {
-	.txfull_mask = S3C2410_UFSTAT_TXFULL,
-};
-
-static int __init s3c2410_early_console_setup(struct earlycon_device *device,
-					      const char *opt)
-{
-	device->port.private_data = &s3c2410_early_console_data;
-	return samsung_early_console_setup(device, opt);
-}
-OF_EARLYCON_DECLARE(s3c2410, "samsung,s3c2410-uart",
-			s3c2410_early_console_setup);
-
-/* S3C2412, S3C2440, S3C64xx */
-static struct samsung_early_console_data s3c2440_early_console_data = {
-	.txfull_mask = S3C2440_UFSTAT_TXFULL,
-};
-
-static int __init s3c2440_early_console_setup(struct earlycon_device *device,
-					      const char *opt)
-{
-	device->port.private_data = &s3c2440_early_console_data;
-	return samsung_early_console_setup(device, opt);
-}
-OF_EARLYCON_DECLARE(s3c2412, "samsung,s3c2412-uart",
-			s3c2440_early_console_setup);
-OF_EARLYCON_DECLARE(s3c2440, "samsung,s3c2440-uart",
-			s3c2440_early_console_setup);
-OF_EARLYCON_DECLARE(s3c6400, "samsung,s3c6400-uart",
-			s3c2440_early_console_setup);
-
-/* S5PV210, EXYNOS */
-static struct samsung_early_console_data s5pv210_early_console_data = {
-	.txfull_mask = S5PV210_UFSTAT_TXFULL,
-};
-
-static int __init s5pv210_early_console_setup(struct earlycon_device *device,
-					      const char *opt)
-{
-	device->port.private_data = &s5pv210_early_console_data;
-	return samsung_early_console_setup(device, opt);
-}
-OF_EARLYCON_DECLARE(s5pv210, "samsung,s5pv210-uart",
-			s5pv210_early_console_setup);
-OF_EARLYCON_DECLARE(exynos4210, "samsung,exynos4210-uart",
-			s5pv210_early_console_setup);
-#endif
-
-MODULE_ALIAS("platform:samsung-uart");
-MODULE_DESCRIPTION("Samsung SoC Serial port driver");
-MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
-MODULE_LICENSE("GPL v2");
diff --git a/drivers/tty/serial/samsung.h b/drivers/tty/serial/samsung.h
deleted file mode 100644
index f930221..0000000
--- a/drivers/tty/serial/samsung.h
+++ /dev/null
@@ -1,147 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-#ifndef __SAMSUNG_H
-#define __SAMSUNG_H
-
-/*
- * Driver for Samsung SoC onboard UARTs.
- *
- * Ben Dooks, Copyright (c) 2003-2008 Simtec Electronics
- *	http://armlinux.simtec.co.uk/
-*/
-
-#include <linux/dmaengine.h>
-
-struct s3c24xx_uart_info {
-	char			*name;
-	unsigned int		type;
-	unsigned int		fifosize;
-	unsigned long		rx_fifomask;
-	unsigned long		rx_fifoshift;
-	unsigned long		rx_fifofull;
-	unsigned long		tx_fifomask;
-	unsigned long		tx_fifoshift;
-	unsigned long		tx_fifofull;
-	unsigned int		def_clk_sel;
-	unsigned long		num_clks;
-	unsigned long		clksel_mask;
-	unsigned long		clksel_shift;
-
-	/* uart port features */
-
-	unsigned int		has_divslot:1;
-
-	/* uart controls */
-	int (*reset_port)(struct uart_port *, struct s3c2410_uartcfg *);
-};
-
-struct s3c24xx_serial_drv_data {
-	struct s3c24xx_uart_info	*info;
-	struct s3c2410_uartcfg		*def_cfg;
-	unsigned int			fifosize[CONFIG_SERIAL_SAMSUNG_UARTS];
-};
-
-struct s3c24xx_uart_dma {
-	unsigned int			rx_chan_id;
-	unsigned int			tx_chan_id;
-
-	struct dma_slave_config		rx_conf;
-	struct dma_slave_config		tx_conf;
-
-	struct dma_chan			*rx_chan;
-	struct dma_chan			*tx_chan;
-
-	dma_addr_t			rx_addr;
-	dma_addr_t			tx_addr;
-
-	dma_cookie_t			rx_cookie;
-	dma_cookie_t			tx_cookie;
-
-	char				*rx_buf;
-
-	dma_addr_t			tx_transfer_addr;
-
-	size_t				rx_size;
-	size_t				tx_size;
-
-	struct dma_async_tx_descriptor	*tx_desc;
-	struct dma_async_tx_descriptor	*rx_desc;
-
-	int				tx_bytes_requested;
-	int				rx_bytes_requested;
-};
-
-struct s3c24xx_uart_port {
-	unsigned char			rx_claimed;
-	unsigned char			tx_claimed;
-	unsigned int			pm_level;
-	unsigned long			baudclk_rate;
-	unsigned int			min_dma_size;
-
-	unsigned int			rx_irq;
-	unsigned int			tx_irq;
-
-	unsigned int			tx_in_progress;
-	unsigned int			tx_mode;
-	unsigned int			rx_mode;
-
-	struct s3c24xx_uart_info	*info;
-	struct clk			*clk;
-	struct clk			*baudclk;
-	struct uart_port		port;
-	struct s3c24xx_serial_drv_data	*drv_data;
-
-	/* reference to platform data */
-	struct s3c2410_uartcfg		*cfg;
-
-	struct s3c24xx_uart_dma		*dma;
-
-#ifdef CONFIG_ARM_S3C24XX_CPUFREQ
-	struct notifier_block		freq_transition;
-#endif
-};
-
-/* conversion functions */
-
-#define s3c24xx_dev_to_port(__dev) dev_get_drvdata(__dev)
-
-/* register access controls */
-
-#define portaddr(port, reg) ((port)->membase + (reg))
-#define portaddrl(port, reg) \
-	((unsigned long *)(unsigned long)((port)->membase + (reg)))
-
-#define rd_regb(port, reg) (readb_relaxed(portaddr(port, reg)))
-#define rd_regl(port, reg) (readl_relaxed(portaddr(port, reg)))
-
-#define wr_regb(port, reg, val) writeb_relaxed(val, portaddr(port, reg))
-#define wr_regl(port, reg, val) writel_relaxed(val, portaddr(port, reg))
-
-/* Byte-order aware bit setting/clearing functions. */
-
-static inline void s3c24xx_set_bit(struct uart_port *port, int idx,
-				   unsigned int reg)
-{
-	unsigned long flags;
-	u32 val;
-
-	local_irq_save(flags);
-	val = rd_regl(port, reg);
-	val |= (1 << idx);
-	wr_regl(port, reg, val);
-	local_irq_restore(flags);
-}
-
-static inline void s3c24xx_clear_bit(struct uart_port *port, int idx,
-				     unsigned int reg)
-{
-	unsigned long flags;
-	u32 val;
-
-	local_irq_save(flags);
-	val = rd_regl(port, reg);
-	val &= ~(1 << idx);
-	wr_regl(port, reg, val);
-	local_irq_restore(flags);
-}
-
-#endif
diff --git a/drivers/tty/serial/samsung_tty.c b/drivers/tty/serial/samsung_tty.c
new file mode 100644
index 0000000..896b573
--- /dev/null
+++ b/drivers/tty/serial/samsung_tty.c
@@ -0,0 +1,2745 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Driver core for Samsung SoC onboard UARTs.
+ *
+ * Ben Dooks, Copyright (c) 2003-2008 Simtec Electronics
+ *	http://armlinux.simtec.co.uk/
+ */
+
+/* Hote on 2410 error handling
+ *
+ * The s3c2410 manual has a love/hate affair with the contents of the
+ * UERSTAT register in the UART blocks, and keeps marking some of the
+ * error bits as reserved. Having checked with the s3c2410x01,
+ * it copes with BREAKs properly, so I am happy to ignore the RESERVED
+ * feature from the latter versions of the manual.
+ *
+ * If it becomes aparrent that latter versions of the 2410 remove these
+ * bits, then action will have to be taken to differentiate the versions
+ * and change the policy on BREAK
+ *
+ * BJD, 04-Nov-2004
+ */
+
+#if defined(CONFIG_SERIAL_SAMSUNG_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
+#define SUPPORT_SYSRQ
+#endif
+
+#include <linux/dmaengine.h>
+#include <linux/dma-mapping.h>
+#include <linux/slab.h>
+#include <linux/module.h>
+#include <linux/ioport.h>
+#include <linux/io.h>
+#include <linux/platform_device.h>
+#include <linux/init.h>
+#include <linux/sysrq.h>
+#include <linux/console.h>
+#include <linux/tty.h>
+#include <linux/tty_flip.h>
+#include <linux/serial_core.h>
+#include <linux/serial.h>
+#include <linux/serial_s3c.h>
+#include <linux/delay.h>
+#include <linux/clk.h>
+#include <linux/cpufreq.h>
+#include <linux/of.h>
+#include <asm/irq.h>
+
+/* UART name and device definitions */
+
+#define S3C24XX_SERIAL_NAME	"ttySAC"
+#define S3C24XX_SERIAL_MAJOR	204
+#define S3C24XX_SERIAL_MINOR	64
+
+#define S3C24XX_TX_PIO			1
+#define S3C24XX_TX_DMA			2
+#define S3C24XX_RX_PIO			1
+#define S3C24XX_RX_DMA			2
+
+/* flag to ignore all characters coming in */
+#define RXSTAT_DUMMY_READ (0x10000000)
+
+struct s3c24xx_uart_info {
+	char			*name;
+	unsigned int		type;
+	unsigned int		fifosize;
+	unsigned long		rx_fifomask;
+	unsigned long		rx_fifoshift;
+	unsigned long		rx_fifofull;
+	unsigned long		tx_fifomask;
+	unsigned long		tx_fifoshift;
+	unsigned long		tx_fifofull;
+	unsigned int		def_clk_sel;
+	unsigned long		num_clks;
+	unsigned long		clksel_mask;
+	unsigned long		clksel_shift;
+
+	/* uart port features */
+
+	unsigned int		has_divslot:1;
+};
+
+struct s3c24xx_serial_drv_data {
+	struct s3c24xx_uart_info	*info;
+	struct s3c2410_uartcfg		*def_cfg;
+	unsigned int			fifosize[CONFIG_SERIAL_SAMSUNG_UARTS];
+};
+
+struct s3c24xx_uart_dma {
+	unsigned int			rx_chan_id;
+	unsigned int			tx_chan_id;
+
+	struct dma_slave_config		rx_conf;
+	struct dma_slave_config		tx_conf;
+
+	struct dma_chan			*rx_chan;
+	struct dma_chan			*tx_chan;
+
+	dma_addr_t			rx_addr;
+	dma_addr_t			tx_addr;
+
+	dma_cookie_t			rx_cookie;
+	dma_cookie_t			tx_cookie;
+
+	char				*rx_buf;
+
+	dma_addr_t			tx_transfer_addr;
+
+	size_t				rx_size;
+	size_t				tx_size;
+
+	struct dma_async_tx_descriptor	*tx_desc;
+	struct dma_async_tx_descriptor	*rx_desc;
+
+	int				tx_bytes_requested;
+	int				rx_bytes_requested;
+};
+
+struct s3c24xx_uart_port {
+	unsigned char			rx_claimed;
+	unsigned char			tx_claimed;
+	unsigned char			rx_enabled;
+	unsigned char			tx_enabled;
+	unsigned int			pm_level;
+	unsigned long			baudclk_rate;
+	unsigned int			min_dma_size;
+
+	unsigned int			rx_irq;
+	unsigned int			tx_irq;
+
+	unsigned int			tx_in_progress;
+	unsigned int			tx_mode;
+	unsigned int			rx_mode;
+
+	struct s3c24xx_uart_info	*info;
+	struct clk			*clk;
+	struct clk			*baudclk;
+	struct uart_port		port;
+	struct s3c24xx_serial_drv_data	*drv_data;
+
+	/* reference to platform data */
+	struct s3c2410_uartcfg		*cfg;
+
+	struct s3c24xx_uart_dma		*dma;
+
+#ifdef CONFIG_ARM_S3C24XX_CPUFREQ
+	struct notifier_block		freq_transition;
+#endif
+};
+
+/* conversion functions */
+
+#define s3c24xx_dev_to_port(__dev) dev_get_drvdata(__dev)
+
+/* register access controls */
+
+#define portaddr(port, reg) ((port)->membase + (reg))
+#define portaddrl(port, reg) \
+	((unsigned long *)(unsigned long)((port)->membase + (reg)))
+
+static u32 rd_reg(struct uart_port *port, u32 reg)
+{
+	switch (port->iotype) {
+	case UPIO_MEM:
+		return readb_relaxed(portaddr(port, reg));
+	case UPIO_MEM32:
+		return readl_relaxed(portaddr(port, reg));
+	default:
+		return 0;
+	}
+	return 0;
+}
+
+#define rd_regl(port, reg) (readl_relaxed(portaddr(port, reg)))
+
+static void wr_reg(struct uart_port *port, u32 reg, u32 val)
+{
+	switch (port->iotype) {
+	case UPIO_MEM:
+		writeb_relaxed(val, portaddr(port, reg));
+		break;
+	case UPIO_MEM32:
+		writel_relaxed(val, portaddr(port, reg));
+		break;
+	}
+}
+
+#define wr_regl(port, reg, val) writel_relaxed(val, portaddr(port, reg))
+
+/* Byte-order aware bit setting/clearing functions. */
+
+static inline void s3c24xx_set_bit(struct uart_port *port, int idx,
+				   unsigned int reg)
+{
+	unsigned long flags;
+	u32 val;
+
+	local_irq_save(flags);
+	val = rd_regl(port, reg);
+	val |= (1 << idx);
+	wr_regl(port, reg, val);
+	local_irq_restore(flags);
+}
+
+static inline void s3c24xx_clear_bit(struct uart_port *port, int idx,
+				     unsigned int reg)
+{
+	unsigned long flags;
+	u32 val;
+
+	local_irq_save(flags);
+	val = rd_regl(port, reg);
+	val &= ~(1 << idx);
+	wr_regl(port, reg, val);
+	local_irq_restore(flags);
+}
+
+static inline struct s3c24xx_uart_port *to_ourport(struct uart_port *port)
+{
+	return container_of(port, struct s3c24xx_uart_port, port);
+}
+
+/* translate a port to the device name */
+
+static inline const char *s3c24xx_serial_portname(struct uart_port *port)
+{
+	return to_platform_device(port->dev)->name;
+}
+
+static int s3c24xx_serial_txempty_nofifo(struct uart_port *port)
+{
+	return rd_regl(port, S3C2410_UTRSTAT) & S3C2410_UTRSTAT_TXE;
+}
+
+/*
+ * s3c64xx and later SoC's include the interrupt mask and status registers in
+ * the controller itself, unlike the s3c24xx SoC's which have these registers
+ * in the interrupt controller. Check if the port type is s3c64xx or higher.
+ */
+static int s3c24xx_serial_has_interrupt_mask(struct uart_port *port)
+{
+	return to_ourport(port)->info->type == PORT_S3C6400;
+}
+
+static void s3c24xx_serial_rx_enable(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	unsigned long flags;
+	unsigned int ucon, ufcon;
+	int count = 10000;
+
+	spin_lock_irqsave(&port->lock, flags);
+
+	while (--count && !s3c24xx_serial_txempty_nofifo(port))
+		udelay(100);
+
+	ufcon = rd_regl(port, S3C2410_UFCON);
+	ufcon |= S3C2410_UFCON_RESETRX;
+	wr_regl(port, S3C2410_UFCON, ufcon);
+
+	ucon = rd_regl(port, S3C2410_UCON);
+	ucon |= S3C2410_UCON_RXIRQMODE;
+	wr_regl(port, S3C2410_UCON, ucon);
+
+	ourport->rx_enabled = 1;
+	spin_unlock_irqrestore(&port->lock, flags);
+}
+
+static void s3c24xx_serial_rx_disable(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	unsigned long flags;
+	unsigned int ucon;
+
+	spin_lock_irqsave(&port->lock, flags);
+
+	ucon = rd_regl(port, S3C2410_UCON);
+	ucon &= ~S3C2410_UCON_RXIRQMODE;
+	wr_regl(port, S3C2410_UCON, ucon);
+
+	ourport->rx_enabled = 0;
+	spin_unlock_irqrestore(&port->lock, flags);
+}
+
+static void s3c24xx_serial_stop_tx(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	struct s3c24xx_uart_dma *dma = ourport->dma;
+	struct circ_buf *xmit = &port->state->xmit;
+	struct dma_tx_state state;
+	int count;
+
+	if (!ourport->tx_enabled)
+		return;
+
+	if (s3c24xx_serial_has_interrupt_mask(port))
+		s3c24xx_set_bit(port, S3C64XX_UINTM_TXD, S3C64XX_UINTM);
+	else
+		disable_irq_nosync(ourport->tx_irq);
+
+	if (dma && dma->tx_chan && ourport->tx_in_progress == S3C24XX_TX_DMA) {
+		dmaengine_pause(dma->tx_chan);
+		dmaengine_tx_status(dma->tx_chan, dma->tx_cookie, &state);
+		dmaengine_terminate_all(dma->tx_chan);
+		dma_sync_single_for_cpu(ourport->port.dev,
+			dma->tx_transfer_addr, dma->tx_size, DMA_TO_DEVICE);
+		async_tx_ack(dma->tx_desc);
+		count = dma->tx_bytes_requested - state.residue;
+		xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1);
+		port->icount.tx += count;
+	}
+
+	ourport->tx_enabled = 0;
+	ourport->tx_in_progress = 0;
+
+	if (port->flags & UPF_CONS_FLOW)
+		s3c24xx_serial_rx_enable(port);
+
+	ourport->tx_mode = 0;
+}
+
+static void s3c24xx_serial_start_next_tx(struct s3c24xx_uart_port *ourport);
+
+static void s3c24xx_serial_tx_dma_complete(void *args)
+{
+	struct s3c24xx_uart_port *ourport = args;
+	struct uart_port *port = &ourport->port;
+	struct circ_buf *xmit = &port->state->xmit;
+	struct s3c24xx_uart_dma *dma = ourport->dma;
+	struct dma_tx_state state;
+	unsigned long flags;
+	int count;
+
+
+	dmaengine_tx_status(dma->tx_chan, dma->tx_cookie, &state);
+	count = dma->tx_bytes_requested - state.residue;
+	async_tx_ack(dma->tx_desc);
+
+	dma_sync_single_for_cpu(ourport->port.dev, dma->tx_transfer_addr,
+				dma->tx_size, DMA_TO_DEVICE);
+
+	spin_lock_irqsave(&port->lock, flags);
+
+	xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1);
+	port->icount.tx += count;
+	ourport->tx_in_progress = 0;
+
+	if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
+		uart_write_wakeup(port);
+
+	s3c24xx_serial_start_next_tx(ourport);
+	spin_unlock_irqrestore(&port->lock, flags);
+}
+
+static void enable_tx_dma(struct s3c24xx_uart_port *ourport)
+{
+	struct uart_port *port = &ourport->port;
+	u32 ucon;
+
+	/* Mask Tx interrupt */
+	if (s3c24xx_serial_has_interrupt_mask(port))
+		s3c24xx_set_bit(port, S3C64XX_UINTM_TXD, S3C64XX_UINTM);
+	else
+		disable_irq_nosync(ourport->tx_irq);
+
+	/* Enable tx dma mode */
+	ucon = rd_regl(port, S3C2410_UCON);
+	ucon &= ~(S3C64XX_UCON_TXBURST_MASK | S3C64XX_UCON_TXMODE_MASK);
+	ucon |= (dma_get_cache_alignment() >= 16) ?
+		S3C64XX_UCON_TXBURST_16 : S3C64XX_UCON_TXBURST_1;
+	ucon |= S3C64XX_UCON_TXMODE_DMA;
+	wr_regl(port,  S3C2410_UCON, ucon);
+
+	ourport->tx_mode = S3C24XX_TX_DMA;
+}
+
+static void enable_tx_pio(struct s3c24xx_uart_port *ourport)
+{
+	struct uart_port *port = &ourport->port;
+	u32 ucon, ufcon;
+
+	/* Set ufcon txtrig */
+	ourport->tx_in_progress = S3C24XX_TX_PIO;
+	ufcon = rd_regl(port, S3C2410_UFCON);
+	wr_regl(port,  S3C2410_UFCON, ufcon);
+
+	/* Enable tx pio mode */
+	ucon = rd_regl(port, S3C2410_UCON);
+	ucon &= ~(S3C64XX_UCON_TXMODE_MASK);
+	ucon |= S3C64XX_UCON_TXMODE_CPU;
+	wr_regl(port,  S3C2410_UCON, ucon);
+
+	/* Unmask Tx interrupt */
+	if (s3c24xx_serial_has_interrupt_mask(port))
+		s3c24xx_clear_bit(port, S3C64XX_UINTM_TXD,
+				  S3C64XX_UINTM);
+	else
+		enable_irq(ourport->tx_irq);
+
+	ourport->tx_mode = S3C24XX_TX_PIO;
+}
+
+static void s3c24xx_serial_start_tx_pio(struct s3c24xx_uart_port *ourport)
+{
+	if (ourport->tx_mode != S3C24XX_TX_PIO)
+		enable_tx_pio(ourport);
+}
+
+static int s3c24xx_serial_start_tx_dma(struct s3c24xx_uart_port *ourport,
+				      unsigned int count)
+{
+	struct uart_port *port = &ourport->port;
+	struct circ_buf *xmit = &port->state->xmit;
+	struct s3c24xx_uart_dma *dma = ourport->dma;
+
+
+	if (ourport->tx_mode != S3C24XX_TX_DMA)
+		enable_tx_dma(ourport);
+
+	dma->tx_size = count & ~(dma_get_cache_alignment() - 1);
+	dma->tx_transfer_addr = dma->tx_addr + xmit->tail;
+
+	dma_sync_single_for_device(ourport->port.dev, dma->tx_transfer_addr,
+				dma->tx_size, DMA_TO_DEVICE);
+
+	dma->tx_desc = dmaengine_prep_slave_single(dma->tx_chan,
+				dma->tx_transfer_addr, dma->tx_size,
+				DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT);
+	if (!dma->tx_desc) {
+		dev_err(ourport->port.dev, "Unable to get desc for Tx\n");
+		return -EIO;
+	}
+
+	dma->tx_desc->callback = s3c24xx_serial_tx_dma_complete;
+	dma->tx_desc->callback_param = ourport;
+	dma->tx_bytes_requested = dma->tx_size;
+
+	ourport->tx_in_progress = S3C24XX_TX_DMA;
+	dma->tx_cookie = dmaengine_submit(dma->tx_desc);
+	dma_async_issue_pending(dma->tx_chan);
+	return 0;
+}
+
+static void s3c24xx_serial_start_next_tx(struct s3c24xx_uart_port *ourport)
+{
+	struct uart_port *port = &ourport->port;
+	struct circ_buf *xmit = &port->state->xmit;
+	unsigned long count;
+
+	/* Get data size up to the end of buffer */
+	count = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
+
+	if (!count) {
+		s3c24xx_serial_stop_tx(port);
+		return;
+	}
+
+	if (!ourport->dma || !ourport->dma->tx_chan ||
+	    count < ourport->min_dma_size ||
+	    xmit->tail & (dma_get_cache_alignment() - 1))
+		s3c24xx_serial_start_tx_pio(ourport);
+	else
+		s3c24xx_serial_start_tx_dma(ourport, count);
+}
+
+static void s3c24xx_serial_start_tx(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	struct circ_buf *xmit = &port->state->xmit;
+
+	if (!ourport->tx_enabled) {
+		if (port->flags & UPF_CONS_FLOW)
+			s3c24xx_serial_rx_disable(port);
+
+		ourport->tx_enabled = 1;
+		if (!ourport->dma || !ourport->dma->tx_chan)
+			s3c24xx_serial_start_tx_pio(ourport);
+	}
+
+	if (ourport->dma && ourport->dma->tx_chan) {
+		if (!uart_circ_empty(xmit) && !ourport->tx_in_progress)
+			s3c24xx_serial_start_next_tx(ourport);
+	}
+}
+
+static void s3c24xx_uart_copy_rx_to_tty(struct s3c24xx_uart_port *ourport,
+		struct tty_port *tty, int count)
+{
+	struct s3c24xx_uart_dma *dma = ourport->dma;
+	int copied;
+
+	if (!count)
+		return;
+
+	dma_sync_single_for_cpu(ourport->port.dev, dma->rx_addr,
+				dma->rx_size, DMA_FROM_DEVICE);
+
+	ourport->port.icount.rx += count;
+	if (!tty) {
+		dev_err(ourport->port.dev, "No tty port\n");
+		return;
+	}
+	copied = tty_insert_flip_string(tty,
+			((unsigned char *)(ourport->dma->rx_buf)), count);
+	if (copied != count) {
+		WARN_ON(1);
+		dev_err(ourport->port.dev, "RxData copy to tty layer failed\n");
+	}
+}
+
+static void s3c24xx_serial_stop_rx(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	struct s3c24xx_uart_dma *dma = ourport->dma;
+	struct tty_port *t = &port->state->port;
+	struct dma_tx_state state;
+	enum dma_status dma_status;
+	unsigned int received;
+
+	if (ourport->rx_enabled) {
+		dev_dbg(port->dev, "stopping rx\n");
+		if (s3c24xx_serial_has_interrupt_mask(port))
+			s3c24xx_set_bit(port, S3C64XX_UINTM_RXD,
+					S3C64XX_UINTM);
+		else
+			disable_irq_nosync(ourport->rx_irq);
+		ourport->rx_enabled = 0;
+	}
+	if (dma && dma->rx_chan) {
+		dmaengine_pause(dma->tx_chan);
+		dma_status = dmaengine_tx_status(dma->rx_chan,
+				dma->rx_cookie, &state);
+		if (dma_status == DMA_IN_PROGRESS ||
+			dma_status == DMA_PAUSED) {
+			received = dma->rx_bytes_requested - state.residue;
+			dmaengine_terminate_all(dma->rx_chan);
+			s3c24xx_uart_copy_rx_to_tty(ourport, t, received);
+		}
+	}
+}
+
+static inline struct s3c24xx_uart_info
+	*s3c24xx_port_to_info(struct uart_port *port)
+{
+	return to_ourport(port)->info;
+}
+
+static inline struct s3c2410_uartcfg
+	*s3c24xx_port_to_cfg(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport;
+
+	if (port->dev == NULL)
+		return NULL;
+
+	ourport = container_of(port, struct s3c24xx_uart_port, port);
+	return ourport->cfg;
+}
+
+static int s3c24xx_serial_rx_fifocnt(struct s3c24xx_uart_port *ourport,
+				     unsigned long ufstat)
+{
+	struct s3c24xx_uart_info *info = ourport->info;
+
+	if (ufstat & info->rx_fifofull)
+		return ourport->port.fifosize;
+
+	return (ufstat & info->rx_fifomask) >> info->rx_fifoshift;
+}
+
+static void s3c64xx_start_rx_dma(struct s3c24xx_uart_port *ourport);
+static void s3c24xx_serial_rx_dma_complete(void *args)
+{
+	struct s3c24xx_uart_port *ourport = args;
+	struct uart_port *port = &ourport->port;
+
+	struct s3c24xx_uart_dma *dma = ourport->dma;
+	struct tty_port *t = &port->state->port;
+	struct tty_struct *tty = tty_port_tty_get(&ourport->port.state->port);
+
+	struct dma_tx_state state;
+	unsigned long flags;
+	int received;
+
+	dmaengine_tx_status(dma->rx_chan,  dma->rx_cookie, &state);
+	received  = dma->rx_bytes_requested - state.residue;
+	async_tx_ack(dma->rx_desc);
+
+	spin_lock_irqsave(&port->lock, flags);
+
+	if (received)
+		s3c24xx_uart_copy_rx_to_tty(ourport, t, received);
+
+	if (tty) {
+		tty_flip_buffer_push(t);
+		tty_kref_put(tty);
+	}
+
+	s3c64xx_start_rx_dma(ourport);
+
+	spin_unlock_irqrestore(&port->lock, flags);
+}
+
+static void s3c64xx_start_rx_dma(struct s3c24xx_uart_port *ourport)
+{
+	struct s3c24xx_uart_dma *dma = ourport->dma;
+
+	dma_sync_single_for_device(ourport->port.dev, dma->rx_addr,
+				dma->rx_size, DMA_FROM_DEVICE);
+
+	dma->rx_desc = dmaengine_prep_slave_single(dma->rx_chan,
+				dma->rx_addr, dma->rx_size, DMA_DEV_TO_MEM,
+				DMA_PREP_INTERRUPT);
+	if (!dma->rx_desc) {
+		dev_err(ourport->port.dev, "Unable to get desc for Rx\n");
+		return;
+	}
+
+	dma->rx_desc->callback = s3c24xx_serial_rx_dma_complete;
+	dma->rx_desc->callback_param = ourport;
+	dma->rx_bytes_requested = dma->rx_size;
+
+	dma->rx_cookie = dmaengine_submit(dma->rx_desc);
+	dma_async_issue_pending(dma->rx_chan);
+}
+
+/* ? - where has parity gone?? */
+#define S3C2410_UERSTAT_PARITY (0x1000)
+
+static void enable_rx_dma(struct s3c24xx_uart_port *ourport)
+{
+	struct uart_port *port = &ourport->port;
+	unsigned int ucon;
+
+	/* set Rx mode to DMA mode */
+	ucon = rd_regl(port, S3C2410_UCON);
+	ucon &= ~(S3C64XX_UCON_RXBURST_MASK |
+			S3C64XX_UCON_TIMEOUT_MASK |
+			S3C64XX_UCON_EMPTYINT_EN |
+			S3C64XX_UCON_DMASUS_EN |
+			S3C64XX_UCON_TIMEOUT_EN |
+			S3C64XX_UCON_RXMODE_MASK);
+	ucon |= S3C64XX_UCON_RXBURST_16 |
+			0xf << S3C64XX_UCON_TIMEOUT_SHIFT |
+			S3C64XX_UCON_EMPTYINT_EN |
+			S3C64XX_UCON_TIMEOUT_EN |
+			S3C64XX_UCON_RXMODE_DMA;
+	wr_regl(port, S3C2410_UCON, ucon);
+
+	ourport->rx_mode = S3C24XX_RX_DMA;
+}
+
+static void enable_rx_pio(struct s3c24xx_uart_port *ourport)
+{
+	struct uart_port *port = &ourport->port;
+	unsigned int ucon;
+
+	/* set Rx mode to DMA mode */
+	ucon = rd_regl(port, S3C2410_UCON);
+	ucon &= ~(S3C64XX_UCON_TIMEOUT_MASK |
+			S3C64XX_UCON_EMPTYINT_EN |
+			S3C64XX_UCON_DMASUS_EN |
+			S3C64XX_UCON_TIMEOUT_EN |
+			S3C64XX_UCON_RXMODE_MASK);
+	ucon |= 0xf << S3C64XX_UCON_TIMEOUT_SHIFT |
+			S3C64XX_UCON_TIMEOUT_EN |
+			S3C64XX_UCON_RXMODE_CPU;
+	wr_regl(port, S3C2410_UCON, ucon);
+
+	ourport->rx_mode = S3C24XX_RX_PIO;
+}
+
+static void s3c24xx_serial_rx_drain_fifo(struct s3c24xx_uart_port *ourport);
+
+static irqreturn_t s3c24xx_serial_rx_chars_dma(void *dev_id)
+{
+	unsigned int utrstat, received;
+	struct s3c24xx_uart_port *ourport = dev_id;
+	struct uart_port *port = &ourport->port;
+	struct s3c24xx_uart_dma *dma = ourport->dma;
+	struct tty_struct *tty = tty_port_tty_get(&ourport->port.state->port);
+	struct tty_port *t = &port->state->port;
+	unsigned long flags;
+	struct dma_tx_state state;
+
+	utrstat = rd_regl(port, S3C2410_UTRSTAT);
+	rd_regl(port, S3C2410_UFSTAT);
+
+	spin_lock_irqsave(&port->lock, flags);
+
+	if (!(utrstat & S3C2410_UTRSTAT_TIMEOUT)) {
+		s3c64xx_start_rx_dma(ourport);
+		if (ourport->rx_mode == S3C24XX_RX_PIO)
+			enable_rx_dma(ourport);
+		goto finish;
+	}
+
+	if (ourport->rx_mode == S3C24XX_RX_DMA) {
+		dmaengine_pause(dma->rx_chan);
+		dmaengine_tx_status(dma->rx_chan, dma->rx_cookie, &state);
+		dmaengine_terminate_all(dma->rx_chan);
+		received = dma->rx_bytes_requested - state.residue;
+		s3c24xx_uart_copy_rx_to_tty(ourport, t, received);
+
+		enable_rx_pio(ourport);
+	}
+
+	s3c24xx_serial_rx_drain_fifo(ourport);
+
+	if (tty) {
+		tty_flip_buffer_push(t);
+		tty_kref_put(tty);
+	}
+
+	wr_regl(port, S3C2410_UTRSTAT, S3C2410_UTRSTAT_TIMEOUT);
+
+finish:
+	spin_unlock_irqrestore(&port->lock, flags);
+
+	return IRQ_HANDLED;
+}
+
+static void s3c24xx_serial_rx_drain_fifo(struct s3c24xx_uart_port *ourport)
+{
+	struct uart_port *port = &ourport->port;
+	unsigned int ufcon, ch, flag, ufstat, uerstat;
+	unsigned int fifocnt = 0;
+	int max_count = port->fifosize;
+
+	while (max_count-- > 0) {
+		/*
+		 * Receive all characters known to be in FIFO
+		 * before reading FIFO level again
+		 */
+		if (fifocnt == 0) {
+			ufstat = rd_regl(port, S3C2410_UFSTAT);
+			fifocnt = s3c24xx_serial_rx_fifocnt(ourport, ufstat);
+			if (fifocnt == 0)
+				break;
+		}
+		fifocnt--;
+
+		uerstat = rd_regl(port, S3C2410_UERSTAT);
+		ch = rd_reg(port, S3C2410_URXH);
+
+		if (port->flags & UPF_CONS_FLOW) {
+			int txe = s3c24xx_serial_txempty_nofifo(port);
+
+			if (ourport->rx_enabled) {
+				if (!txe) {
+					ourport->rx_enabled = 0;
+					continue;
+				}
+			} else {
+				if (txe) {
+					ufcon = rd_regl(port, S3C2410_UFCON);
+					ufcon |= S3C2410_UFCON_RESETRX;
+					wr_regl(port, S3C2410_UFCON, ufcon);
+					ourport->rx_enabled = 1;
+					return;
+				}
+				continue;
+			}
+		}
+
+		/* insert the character into the buffer */
+
+		flag = TTY_NORMAL;
+		port->icount.rx++;
+
+		if (unlikely(uerstat & S3C2410_UERSTAT_ANY)) {
+			dev_dbg(port->dev,
+				"rxerr: port ch=0x%02x, rxs=0x%08x\n",
+				ch, uerstat);
+
+			/* check for break */
+			if (uerstat & S3C2410_UERSTAT_BREAK) {
+				dev_dbg(port->dev, "break!\n");
+				port->icount.brk++;
+				if (uart_handle_break(port))
+					continue; /* Ignore character */
+			}
+
+			if (uerstat & S3C2410_UERSTAT_FRAME)
+				port->icount.frame++;
+			if (uerstat & S3C2410_UERSTAT_OVERRUN)
+				port->icount.overrun++;
+
+			uerstat &= port->read_status_mask;
+
+			if (uerstat & S3C2410_UERSTAT_BREAK)
+				flag = TTY_BREAK;
+			else if (uerstat & S3C2410_UERSTAT_PARITY)
+				flag = TTY_PARITY;
+			else if (uerstat & (S3C2410_UERSTAT_FRAME |
+					    S3C2410_UERSTAT_OVERRUN))
+				flag = TTY_FRAME;
+		}
+
+		if (uart_handle_sysrq_char(port, ch))
+			continue; /* Ignore character */
+
+		uart_insert_char(port, uerstat, S3C2410_UERSTAT_OVERRUN,
+				 ch, flag);
+	}
+
+	tty_flip_buffer_push(&port->state->port);
+}
+
+static irqreturn_t s3c24xx_serial_rx_chars_pio(void *dev_id)
+{
+	struct s3c24xx_uart_port *ourport = dev_id;
+	struct uart_port *port = &ourport->port;
+	unsigned long flags;
+
+	spin_lock_irqsave(&port->lock, flags);
+	s3c24xx_serial_rx_drain_fifo(ourport);
+	spin_unlock_irqrestore(&port->lock, flags);
+
+	return IRQ_HANDLED;
+}
+
+
+static irqreturn_t s3c24xx_serial_rx_chars(int irq, void *dev_id)
+{
+	struct s3c24xx_uart_port *ourport = dev_id;
+
+	if (ourport->dma && ourport->dma->rx_chan)
+		return s3c24xx_serial_rx_chars_dma(dev_id);
+	return s3c24xx_serial_rx_chars_pio(dev_id);
+}
+
+static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id)
+{
+	struct s3c24xx_uart_port *ourport = id;
+	struct uart_port *port = &ourport->port;
+	struct circ_buf *xmit = &port->state->xmit;
+	unsigned long flags;
+	int count, dma_count = 0;
+
+	spin_lock_irqsave(&port->lock, flags);
+
+	count = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
+
+	if (ourport->dma && ourport->dma->tx_chan &&
+	    count >= ourport->min_dma_size) {
+		int align = dma_get_cache_alignment() -
+			(xmit->tail & (dma_get_cache_alignment() - 1));
+		if (count-align >= ourport->min_dma_size) {
+			dma_count = count-align;
+			count = align;
+		}
+	}
+
+	if (port->x_char) {
+		wr_reg(port, S3C2410_UTXH, port->x_char);
+		port->icount.tx++;
+		port->x_char = 0;
+		goto out;
+	}
+
+	/* if there isn't anything more to transmit, or the uart is now
+	 * stopped, disable the uart and exit
+	 */
+
+	if (uart_circ_empty(xmit) || uart_tx_stopped(port)) {
+		s3c24xx_serial_stop_tx(port);
+		goto out;
+	}
+
+	/* try and drain the buffer... */
+
+	if (count > port->fifosize) {
+		count = port->fifosize;
+		dma_count = 0;
+	}
+
+	while (!uart_circ_empty(xmit) && count > 0) {
+		if (rd_regl(port, S3C2410_UFSTAT) & ourport->info->tx_fifofull)
+			break;
+
+		wr_reg(port, S3C2410_UTXH, xmit->buf[xmit->tail]);
+		xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
+		port->icount.tx++;
+		count--;
+	}
+
+	if (!count && dma_count) {
+		s3c24xx_serial_start_tx_dma(ourport, dma_count);
+		goto out;
+	}
+
+	if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) {
+		spin_unlock(&port->lock);
+		uart_write_wakeup(port);
+		spin_lock(&port->lock);
+	}
+
+	if (uart_circ_empty(xmit))
+		s3c24xx_serial_stop_tx(port);
+
+out:
+	spin_unlock_irqrestore(&port->lock, flags);
+	return IRQ_HANDLED;
+}
+
+/* interrupt handler for s3c64xx and later SoC's.*/
+static irqreturn_t s3c64xx_serial_handle_irq(int irq, void *id)
+{
+	struct s3c24xx_uart_port *ourport = id;
+	struct uart_port *port = &ourport->port;
+	unsigned int pend = rd_regl(port, S3C64XX_UINTP);
+	irqreturn_t ret = IRQ_HANDLED;
+
+	if (pend & S3C64XX_UINTM_RXD_MSK) {
+		ret = s3c24xx_serial_rx_chars(irq, id);
+		wr_regl(port, S3C64XX_UINTP, S3C64XX_UINTM_RXD_MSK);
+	}
+	if (pend & S3C64XX_UINTM_TXD_MSK) {
+		ret = s3c24xx_serial_tx_chars(irq, id);
+		wr_regl(port, S3C64XX_UINTP, S3C64XX_UINTM_TXD_MSK);
+	}
+	return ret;
+}
+
+static unsigned int s3c24xx_serial_tx_empty(struct uart_port *port)
+{
+	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
+	unsigned long ufstat = rd_regl(port, S3C2410_UFSTAT);
+	unsigned long ufcon = rd_regl(port, S3C2410_UFCON);
+
+	if (ufcon & S3C2410_UFCON_FIFOMODE) {
+		if ((ufstat & info->tx_fifomask) != 0 ||
+		    (ufstat & info->tx_fifofull))
+			return 0;
+
+		return 1;
+	}
+
+	return s3c24xx_serial_txempty_nofifo(port);
+}
+
+/* no modem control lines */
+static unsigned int s3c24xx_serial_get_mctrl(struct uart_port *port)
+{
+	unsigned int umstat = rd_reg(port, S3C2410_UMSTAT);
+
+	if (umstat & S3C2410_UMSTAT_CTS)
+		return TIOCM_CAR | TIOCM_DSR | TIOCM_CTS;
+	else
+		return TIOCM_CAR | TIOCM_DSR;
+}
+
+static void s3c24xx_serial_set_mctrl(struct uart_port *port, unsigned int mctrl)
+{
+	unsigned int umcon = rd_regl(port, S3C2410_UMCON);
+
+	if (mctrl & TIOCM_RTS)
+		umcon |= S3C2410_UMCOM_RTS_LOW;
+	else
+		umcon &= ~S3C2410_UMCOM_RTS_LOW;
+
+	wr_regl(port, S3C2410_UMCON, umcon);
+}
+
+static void s3c24xx_serial_break_ctl(struct uart_port *port, int break_state)
+{
+	unsigned long flags;
+	unsigned int ucon;
+
+	spin_lock_irqsave(&port->lock, flags);
+
+	ucon = rd_regl(port, S3C2410_UCON);
+
+	if (break_state)
+		ucon |= S3C2410_UCON_SBREAK;
+	else
+		ucon &= ~S3C2410_UCON_SBREAK;
+
+	wr_regl(port, S3C2410_UCON, ucon);
+
+	spin_unlock_irqrestore(&port->lock, flags);
+}
+
+static int s3c24xx_serial_request_dma(struct s3c24xx_uart_port *p)
+{
+	struct s3c24xx_uart_dma	*dma = p->dma;
+	struct dma_slave_caps dma_caps;
+	const char *reason = NULL;
+	int ret;
+
+	/* Default slave configuration parameters */
+	dma->rx_conf.direction		= DMA_DEV_TO_MEM;
+	dma->rx_conf.src_addr_width	= DMA_SLAVE_BUSWIDTH_1_BYTE;
+	dma->rx_conf.src_addr		= p->port.mapbase + S3C2410_URXH;
+	dma->rx_conf.src_maxburst	= 1;
+
+	dma->tx_conf.direction		= DMA_MEM_TO_DEV;
+	dma->tx_conf.dst_addr_width	= DMA_SLAVE_BUSWIDTH_1_BYTE;
+	dma->tx_conf.dst_addr		= p->port.mapbase + S3C2410_UTXH;
+	dma->tx_conf.dst_maxburst	= 1;
+
+	dma->rx_chan = dma_request_chan(p->port.dev, "rx");
+
+	if (IS_ERR(dma->rx_chan)) {
+		reason = "DMA RX channel request failed";
+		ret = PTR_ERR(dma->rx_chan);
+		goto err_warn;
+	}
+
+	ret = dma_get_slave_caps(dma->rx_chan, &dma_caps);
+	if (ret < 0 ||
+	    dma_caps.residue_granularity < DMA_RESIDUE_GRANULARITY_BURST) {
+		reason = "insufficient DMA RX engine capabilities";
+		ret = -EOPNOTSUPP;
+		goto err_release_rx;
+	}
+
+	dmaengine_slave_config(dma->rx_chan, &dma->rx_conf);
+
+	dma->tx_chan = dma_request_chan(p->port.dev, "tx");
+	if (IS_ERR(dma->tx_chan)) {
+		reason = "DMA TX channel request failed";
+		ret = PTR_ERR(dma->tx_chan);
+		goto err_release_rx;
+	}
+
+	ret = dma_get_slave_caps(dma->tx_chan, &dma_caps);
+	if (ret < 0 ||
+	    dma_caps.residue_granularity < DMA_RESIDUE_GRANULARITY_BURST) {
+		reason = "insufficient DMA TX engine capabilities";
+		ret = -EOPNOTSUPP;
+		goto err_release_tx;
+	}
+
+	dmaengine_slave_config(dma->tx_chan, &dma->tx_conf);
+
+	/* RX buffer */
+	dma->rx_size = PAGE_SIZE;
+
+	dma->rx_buf = kmalloc(dma->rx_size, GFP_KERNEL);
+	if (!dma->rx_buf) {
+		ret = -ENOMEM;
+		goto err_release_tx;
+	}
+
+	dma->rx_addr = dma_map_single(p->port.dev, dma->rx_buf,
+				dma->rx_size, DMA_FROM_DEVICE);
+	if (dma_mapping_error(p->port.dev, dma->rx_addr)) {
+		reason = "DMA mapping error for RX buffer";
+		ret = -EIO;
+		goto err_free_rx;
+	}
+
+	/* TX buffer */
+	dma->tx_addr = dma_map_single(p->port.dev, p->port.state->xmit.buf,
+				UART_XMIT_SIZE, DMA_TO_DEVICE);
+	if (dma_mapping_error(p->port.dev, dma->tx_addr)) {
+		reason = "DMA mapping error for TX buffer";
+		ret = -EIO;
+		goto err_unmap_rx;
+	}
+
+	return 0;
+
+err_unmap_rx:
+	dma_unmap_single(p->port.dev, dma->rx_addr, dma->rx_size,
+			 DMA_FROM_DEVICE);
+err_free_rx:
+	kfree(dma->rx_buf);
+err_release_tx:
+	dma_release_channel(dma->tx_chan);
+err_release_rx:
+	dma_release_channel(dma->rx_chan);
+err_warn:
+	if (reason)
+		dev_warn(p->port.dev, "%s, DMA will not be used\n", reason);
+	return ret;
+}
+
+static void s3c24xx_serial_release_dma(struct s3c24xx_uart_port *p)
+{
+	struct s3c24xx_uart_dma	*dma = p->dma;
+
+	if (dma->rx_chan) {
+		dmaengine_terminate_all(dma->rx_chan);
+		dma_unmap_single(p->port.dev, dma->rx_addr,
+				dma->rx_size, DMA_FROM_DEVICE);
+		kfree(dma->rx_buf);
+		dma_release_channel(dma->rx_chan);
+		dma->rx_chan = NULL;
+	}
+
+	if (dma->tx_chan) {
+		dmaengine_terminate_all(dma->tx_chan);
+		dma_unmap_single(p->port.dev, dma->tx_addr,
+				UART_XMIT_SIZE, DMA_TO_DEVICE);
+		dma_release_channel(dma->tx_chan);
+		dma->tx_chan = NULL;
+	}
+}
+
+static void s3c24xx_serial_shutdown(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+
+	if (ourport->tx_claimed) {
+		if (!s3c24xx_serial_has_interrupt_mask(port))
+			free_irq(ourport->tx_irq, ourport);
+		ourport->tx_enabled = 0;
+		ourport->tx_claimed = 0;
+		ourport->tx_mode = 0;
+	}
+
+	if (ourport->rx_claimed) {
+		if (!s3c24xx_serial_has_interrupt_mask(port))
+			free_irq(ourport->rx_irq, ourport);
+		ourport->rx_claimed = 0;
+		ourport->rx_enabled = 0;
+	}
+
+	/* Clear pending interrupts and mask all interrupts */
+	if (s3c24xx_serial_has_interrupt_mask(port)) {
+		free_irq(port->irq, ourport);
+
+		wr_regl(port, S3C64XX_UINTP, 0xf);
+		wr_regl(port, S3C64XX_UINTM, 0xf);
+	}
+
+	if (ourport->dma)
+		s3c24xx_serial_release_dma(ourport);
+
+	ourport->tx_in_progress = 0;
+}
+
+static int s3c24xx_serial_startup(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	int ret;
+
+	ourport->rx_enabled = 1;
+
+	ret = request_irq(ourport->rx_irq, s3c24xx_serial_rx_chars, 0,
+			  s3c24xx_serial_portname(port), ourport);
+
+	if (ret != 0) {
+		dev_err(port->dev, "cannot get irq %d\n", ourport->rx_irq);
+		return ret;
+	}
+
+	ourport->rx_claimed = 1;
+
+	dev_dbg(port->dev, "requesting tx irq...\n");
+
+	ourport->tx_enabled = 1;
+
+	ret = request_irq(ourport->tx_irq, s3c24xx_serial_tx_chars, 0,
+			  s3c24xx_serial_portname(port), ourport);
+
+	if (ret) {
+		dev_err(port->dev, "cannot get irq %d\n", ourport->tx_irq);
+		goto err;
+	}
+
+	ourport->tx_claimed = 1;
+
+	/* the port reset code should have done the correct
+	 * register setup for the port controls
+	 */
+
+	return ret;
+
+err:
+	s3c24xx_serial_shutdown(port);
+	return ret;
+}
+
+static int s3c64xx_serial_startup(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	unsigned long flags;
+	unsigned int ufcon;
+	int ret;
+
+	wr_regl(port, S3C64XX_UINTM, 0xf);
+	if (ourport->dma) {
+		ret = s3c24xx_serial_request_dma(ourport);
+		if (ret < 0) {
+			devm_kfree(port->dev, ourport->dma);
+			ourport->dma = NULL;
+		}
+	}
+
+	ret = request_irq(port->irq, s3c64xx_serial_handle_irq, IRQF_SHARED,
+			  s3c24xx_serial_portname(port), ourport);
+	if (ret) {
+		dev_err(port->dev, "cannot get irq %d\n", port->irq);
+		return ret;
+	}
+
+	/* For compatibility with s3c24xx Soc's */
+	ourport->rx_enabled = 1;
+	ourport->rx_claimed = 1;
+	ourport->tx_enabled = 0;
+	ourport->tx_claimed = 1;
+
+	spin_lock_irqsave(&port->lock, flags);
+
+	ufcon = rd_regl(port, S3C2410_UFCON);
+	ufcon |= S3C2410_UFCON_RESETRX | S5PV210_UFCON_RXTRIG8;
+	if (!uart_console(port))
+		ufcon |= S3C2410_UFCON_RESETTX;
+	wr_regl(port, S3C2410_UFCON, ufcon);
+
+	enable_rx_pio(ourport);
+
+	spin_unlock_irqrestore(&port->lock, flags);
+
+	/* Enable Rx Interrupt */
+	s3c24xx_clear_bit(port, S3C64XX_UINTM_RXD, S3C64XX_UINTM);
+
+	return ret;
+}
+
+/* power power management control */
+
+static void s3c24xx_serial_pm(struct uart_port *port, unsigned int level,
+			      unsigned int old)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	int timeout = 10000;
+
+	ourport->pm_level = level;
+
+	switch (level) {
+	case 3:
+		while (--timeout && !s3c24xx_serial_txempty_nofifo(port))
+			udelay(100);
+
+		if (!IS_ERR(ourport->baudclk))
+			clk_disable_unprepare(ourport->baudclk);
+
+		clk_disable_unprepare(ourport->clk);
+		break;
+
+	case 0:
+		clk_prepare_enable(ourport->clk);
+
+		if (!IS_ERR(ourport->baudclk))
+			clk_prepare_enable(ourport->baudclk);
+
+		break;
+	default:
+		dev_err(port->dev, "s3c24xx_serial: unknown pm %d\n", level);
+	}
+}
+
+/* baud rate calculation
+ *
+ * The UARTs on the S3C2410/S3C2440 can take their clocks from a number
+ * of different sources, including the peripheral clock ("pclk") and an
+ * external clock ("uclk"). The S3C2440 also adds the core clock ("fclk")
+ * with a programmable extra divisor.
+ *
+ * The following code goes through the clock sources, and calculates the
+ * baud clocks (and the resultant actual baud rates) and then tries to
+ * pick the closest one and select that.
+ *
+ */
+
+#define MAX_CLK_NAME_LENGTH 15
+
+static inline int s3c24xx_serial_getsource(struct uart_port *port)
+{
+	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
+	unsigned int ucon;
+
+	if (info->num_clks == 1)
+		return 0;
+
+	ucon = rd_regl(port, S3C2410_UCON);
+	ucon &= info->clksel_mask;
+	return ucon >> info->clksel_shift;
+}
+
+static void s3c24xx_serial_setsource(struct uart_port *port,
+			unsigned int clk_sel)
+{
+	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
+	unsigned int ucon;
+
+	if (info->num_clks == 1)
+		return;
+
+	ucon = rd_regl(port, S3C2410_UCON);
+	if ((ucon & info->clksel_mask) >> info->clksel_shift == clk_sel)
+		return;
+
+	ucon &= ~info->clksel_mask;
+	ucon |= clk_sel << info->clksel_shift;
+	wr_regl(port, S3C2410_UCON, ucon);
+}
+
+static unsigned int s3c24xx_serial_getclk(struct s3c24xx_uart_port *ourport,
+			unsigned int req_baud, struct clk **best_clk,
+			unsigned int *clk_num)
+{
+	struct s3c24xx_uart_info *info = ourport->info;
+	struct clk *clk;
+	unsigned long rate;
+	unsigned int cnt, baud, quot, best_quot = 0;
+	char clkname[MAX_CLK_NAME_LENGTH];
+	int calc_deviation, deviation = (1 << 30) - 1;
+
+	for (cnt = 0; cnt < info->num_clks; cnt++) {
+		/* Keep selected clock if provided */
+		if (ourport->cfg->clk_sel &&
+			!(ourport->cfg->clk_sel & (1 << cnt)))
+			continue;
+
+		sprintf(clkname, "clk_uart_baud%d", cnt);
+		clk = clk_get(ourport->port.dev, clkname);
+		if (IS_ERR(clk))
+			continue;
+
+		rate = clk_get_rate(clk);
+		if (!rate)
+			continue;
+
+		if (ourport->info->has_divslot) {
+			unsigned long div = rate / req_baud;
+
+			/* The UDIVSLOT register on the newer UARTs allows us to
+			 * get a divisor adjustment of 1/16th on the baud clock.
+			 *
+			 * We don't keep the UDIVSLOT value (the 16ths we
+			 * calculated by not multiplying the baud by 16) as it
+			 * is easy enough to recalculate.
+			 */
+
+			quot = div / 16;
+			baud = rate / div;
+		} else {
+			quot = (rate + (8 * req_baud)) / (16 * req_baud);
+			baud = rate / (quot * 16);
+		}
+		quot--;
+
+		calc_deviation = req_baud - baud;
+		if (calc_deviation < 0)
+			calc_deviation = -calc_deviation;
+
+		if (calc_deviation < deviation) {
+			*best_clk = clk;
+			best_quot = quot;
+			*clk_num = cnt;
+			deviation = calc_deviation;
+		}
+	}
+
+	return best_quot;
+}
+
+/* udivslot_table[]
+ *
+ * This table takes the fractional value of the baud divisor and gives
+ * the recommended setting for the UDIVSLOT register.
+ */
+static u16 udivslot_table[16] = {
+	[0] = 0x0000,
+	[1] = 0x0080,
+	[2] = 0x0808,
+	[3] = 0x0888,
+	[4] = 0x2222,
+	[5] = 0x4924,
+	[6] = 0x4A52,
+	[7] = 0x54AA,
+	[8] = 0x5555,
+	[9] = 0xD555,
+	[10] = 0xD5D5,
+	[11] = 0xDDD5,
+	[12] = 0xDDDD,
+	[13] = 0xDFDD,
+	[14] = 0xDFDF,
+	[15] = 0xFFDF,
+};
+
+static void s3c24xx_serial_set_termios(struct uart_port *port,
+				       struct ktermios *termios,
+				       struct ktermios *old)
+{
+	struct s3c2410_uartcfg *cfg = s3c24xx_port_to_cfg(port);
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	struct clk *clk = ERR_PTR(-EINVAL);
+	unsigned long flags;
+	unsigned int baud, quot, clk_sel = 0;
+	unsigned int ulcon;
+	unsigned int umcon;
+	unsigned int udivslot = 0;
+
+	/*
+	 * We don't support modem control lines.
+	 */
+	termios->c_cflag &= ~(HUPCL | CMSPAR);
+	termios->c_cflag |= CLOCAL;
+
+	/*
+	 * Ask the core to calculate the divisor for us.
+	 */
+
+	baud = uart_get_baud_rate(port, termios, old, 0, 3000000);
+	quot = s3c24xx_serial_getclk(ourport, baud, &clk, &clk_sel);
+	if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST)
+		quot = port->custom_divisor;
+	if (IS_ERR(clk))
+		return;
+
+	/* check to see if we need  to change clock source */
+
+	if (ourport->baudclk != clk) {
+		clk_prepare_enable(clk);
+
+		s3c24xx_serial_setsource(port, clk_sel);
+
+		if (!IS_ERR(ourport->baudclk)) {
+			clk_disable_unprepare(ourport->baudclk);
+			ourport->baudclk = ERR_PTR(-EINVAL);
+		}
+
+		ourport->baudclk = clk;
+		ourport->baudclk_rate = clk ? clk_get_rate(clk) : 0;
+	}
+
+	if (ourport->info->has_divslot) {
+		unsigned int div = ourport->baudclk_rate / baud;
+
+		if (cfg->has_fracval) {
+			udivslot = (div & 15);
+			dev_dbg(port->dev, "fracval = %04x\n", udivslot);
+		} else {
+			udivslot = udivslot_table[div & 15];
+			dev_dbg(port->dev, "udivslot = %04x (div %d)\n",
+				udivslot, div & 15);
+		}
+	}
+
+	switch (termios->c_cflag & CSIZE) {
+	case CS5:
+		dev_dbg(port->dev, "config: 5bits/char\n");
+		ulcon = S3C2410_LCON_CS5;
+		break;
+	case CS6:
+		dev_dbg(port->dev, "config: 6bits/char\n");
+		ulcon = S3C2410_LCON_CS6;
+		break;
+	case CS7:
+		dev_dbg(port->dev, "config: 7bits/char\n");
+		ulcon = S3C2410_LCON_CS7;
+		break;
+	case CS8:
+	default:
+		dev_dbg(port->dev, "config: 8bits/char\n");
+		ulcon = S3C2410_LCON_CS8;
+		break;
+	}
+
+	/* preserve original lcon IR settings */
+	ulcon |= (cfg->ulcon & S3C2410_LCON_IRM);
+
+	if (termios->c_cflag & CSTOPB)
+		ulcon |= S3C2410_LCON_STOPB;
+
+	if (termios->c_cflag & PARENB) {
+		if (termios->c_cflag & PARODD)
+			ulcon |= S3C2410_LCON_PODD;
+		else
+			ulcon |= S3C2410_LCON_PEVEN;
+	} else {
+		ulcon |= S3C2410_LCON_PNONE;
+	}
+
+	spin_lock_irqsave(&port->lock, flags);
+
+	dev_dbg(port->dev,
+		"setting ulcon to %08x, brddiv to %d, udivslot %08x\n",
+		ulcon, quot, udivslot);
+
+	wr_regl(port, S3C2410_ULCON, ulcon);
+	wr_regl(port, S3C2410_UBRDIV, quot);
+
+	port->status &= ~UPSTAT_AUTOCTS;
+
+	umcon = rd_regl(port, S3C2410_UMCON);
+	if (termios->c_cflag & CRTSCTS) {
+		umcon |= S3C2410_UMCOM_AFC;
+		/* Disable RTS when RX FIFO contains 63 bytes */
+		umcon &= ~S3C2412_UMCON_AFC_8;
+		port->status = UPSTAT_AUTOCTS;
+	} else {
+		umcon &= ~S3C2410_UMCOM_AFC;
+	}
+	wr_regl(port, S3C2410_UMCON, umcon);
+
+	if (ourport->info->has_divslot)
+		wr_regl(port, S3C2443_DIVSLOT, udivslot);
+
+	dev_dbg(port->dev,
+		"uart: ulcon = 0x%08x, ucon = 0x%08x, ufcon = 0x%08x\n",
+		rd_regl(port, S3C2410_ULCON),
+		rd_regl(port, S3C2410_UCON),
+		rd_regl(port, S3C2410_UFCON));
+
+	/*
+	 * Update the per-port timeout.
+	 */
+	uart_update_timeout(port, termios->c_cflag, baud);
+
+	/*
+	 * Which character status flags are we interested in?
+	 */
+	port->read_status_mask = S3C2410_UERSTAT_OVERRUN;
+	if (termios->c_iflag & INPCK)
+		port->read_status_mask |= S3C2410_UERSTAT_FRAME |
+			S3C2410_UERSTAT_PARITY;
+	/*
+	 * Which character status flags should we ignore?
+	 */
+	port->ignore_status_mask = 0;
+	if (termios->c_iflag & IGNPAR)
+		port->ignore_status_mask |= S3C2410_UERSTAT_OVERRUN;
+	if (termios->c_iflag & IGNBRK && termios->c_iflag & IGNPAR)
+		port->ignore_status_mask |= S3C2410_UERSTAT_FRAME;
+
+	/*
+	 * Ignore all characters if CREAD is not set.
+	 */
+	if ((termios->c_cflag & CREAD) == 0)
+		port->ignore_status_mask |= RXSTAT_DUMMY_READ;
+
+	spin_unlock_irqrestore(&port->lock, flags);
+}
+
+static const char *s3c24xx_serial_type(struct uart_port *port)
+{
+	switch (port->type) {
+	case PORT_S3C2410:
+		return "S3C2410";
+	case PORT_S3C2440:
+		return "S3C2440";
+	case PORT_S3C2412:
+		return "S3C2412";
+	case PORT_S3C6400:
+		return "S3C6400/10";
+	default:
+		return NULL;
+	}
+}
+
+#define MAP_SIZE (0x100)
+
+static void s3c24xx_serial_release_port(struct uart_port *port)
+{
+	release_mem_region(port->mapbase, MAP_SIZE);
+}
+
+static int s3c24xx_serial_request_port(struct uart_port *port)
+{
+	const char *name = s3c24xx_serial_portname(port);
+
+	return request_mem_region(port->mapbase, MAP_SIZE, name) ? 0 : -EBUSY;
+}
+
+static void s3c24xx_serial_config_port(struct uart_port *port, int flags)
+{
+	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
+
+	if (flags & UART_CONFIG_TYPE &&
+	    s3c24xx_serial_request_port(port) == 0)
+		port->type = info->type;
+}
+
+/*
+ * verify the new serial_struct (for TIOCSSERIAL).
+ */
+static int
+s3c24xx_serial_verify_port(struct uart_port *port, struct serial_struct *ser)
+{
+	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
+
+	if (ser->type != PORT_UNKNOWN && ser->type != info->type)
+		return -EINVAL;
+
+	return 0;
+}
+
+
+#ifdef CONFIG_SERIAL_SAMSUNG_CONSOLE
+
+static struct console s3c24xx_serial_console;
+
+static int __init s3c24xx_serial_console_init(void)
+{
+	register_console(&s3c24xx_serial_console);
+	return 0;
+}
+console_initcall(s3c24xx_serial_console_init);
+
+#define S3C24XX_SERIAL_CONSOLE &s3c24xx_serial_console
+#else
+#define S3C24XX_SERIAL_CONSOLE NULL
+#endif
+
+#if defined(CONFIG_SERIAL_SAMSUNG_CONSOLE) && defined(CONFIG_CONSOLE_POLL)
+static int s3c24xx_serial_get_poll_char(struct uart_port *port);
+static void s3c24xx_serial_put_poll_char(struct uart_port *port,
+			 unsigned char c);
+#endif
+
+static struct uart_ops s3c24xx_serial_ops = {
+	.pm		= s3c24xx_serial_pm,
+	.tx_empty	= s3c24xx_serial_tx_empty,
+	.get_mctrl	= s3c24xx_serial_get_mctrl,
+	.set_mctrl	= s3c24xx_serial_set_mctrl,
+	.stop_tx	= s3c24xx_serial_stop_tx,
+	.start_tx	= s3c24xx_serial_start_tx,
+	.stop_rx	= s3c24xx_serial_stop_rx,
+	.break_ctl	= s3c24xx_serial_break_ctl,
+	.startup	= s3c24xx_serial_startup,
+	.shutdown	= s3c24xx_serial_shutdown,
+	.set_termios	= s3c24xx_serial_set_termios,
+	.type		= s3c24xx_serial_type,
+	.release_port	= s3c24xx_serial_release_port,
+	.request_port	= s3c24xx_serial_request_port,
+	.config_port	= s3c24xx_serial_config_port,
+	.verify_port	= s3c24xx_serial_verify_port,
+#if defined(CONFIG_SERIAL_SAMSUNG_CONSOLE) && defined(CONFIG_CONSOLE_POLL)
+	.poll_get_char = s3c24xx_serial_get_poll_char,
+	.poll_put_char = s3c24xx_serial_put_poll_char,
+#endif
+};
+
+static struct uart_driver s3c24xx_uart_drv = {
+	.owner		= THIS_MODULE,
+	.driver_name	= "s3c2410_serial",
+	.nr		= CONFIG_SERIAL_SAMSUNG_UARTS,
+	.cons		= S3C24XX_SERIAL_CONSOLE,
+	.dev_name	= S3C24XX_SERIAL_NAME,
+	.major		= S3C24XX_SERIAL_MAJOR,
+	.minor		= S3C24XX_SERIAL_MINOR,
+};
+
+#define __PORT_LOCK_UNLOCKED(i) \
+	__SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[i].port.lock)
+static struct s3c24xx_uart_port
+s3c24xx_serial_ports[CONFIG_SERIAL_SAMSUNG_UARTS] = {
+	[0] = {
+		.port = {
+			.lock		= __PORT_LOCK_UNLOCKED(0),
+			.iotype		= UPIO_MEM,
+			.uartclk	= 0,
+			.fifosize	= 16,
+			.ops		= &s3c24xx_serial_ops,
+			.flags		= UPF_BOOT_AUTOCONF,
+			.line		= 0,
+		}
+	},
+	[1] = {
+		.port = {
+			.lock		= __PORT_LOCK_UNLOCKED(1),
+			.iotype		= UPIO_MEM,
+			.uartclk	= 0,
+			.fifosize	= 16,
+			.ops		= &s3c24xx_serial_ops,
+			.flags		= UPF_BOOT_AUTOCONF,
+			.line		= 1,
+		}
+	},
+#if CONFIG_SERIAL_SAMSUNG_UARTS > 2
+
+	[2] = {
+		.port = {
+			.lock		= __PORT_LOCK_UNLOCKED(2),
+			.iotype		= UPIO_MEM,
+			.uartclk	= 0,
+			.fifosize	= 16,
+			.ops		= &s3c24xx_serial_ops,
+			.flags		= UPF_BOOT_AUTOCONF,
+			.line		= 2,
+		}
+	},
+#endif
+#if CONFIG_SERIAL_SAMSUNG_UARTS > 3
+	[3] = {
+		.port = {
+			.lock		= __PORT_LOCK_UNLOCKED(3),
+			.iotype		= UPIO_MEM,
+			.uartclk	= 0,
+			.fifosize	= 16,
+			.ops		= &s3c24xx_serial_ops,
+			.flags		= UPF_BOOT_AUTOCONF,
+			.line		= 3,
+		}
+	}
+#endif
+};
+#undef __PORT_LOCK_UNLOCKED
+
+/* s3c24xx_serial_resetport
+ *
+ * reset the fifos and other the settings.
+ */
+
+static void s3c24xx_serial_resetport(struct uart_port *port,
+				   struct s3c2410_uartcfg *cfg)
+{
+	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
+	unsigned long ucon = rd_regl(port, S3C2410_UCON);
+	unsigned int ucon_mask;
+
+	ucon_mask = info->clksel_mask;
+	if (info->type == PORT_S3C2440)
+		ucon_mask |= S3C2440_UCON0_DIVMASK;
+
+	ucon &= ucon_mask;
+	wr_regl(port, S3C2410_UCON,  ucon | cfg->ucon);
+
+	/* reset both fifos */
+	wr_regl(port, S3C2410_UFCON, cfg->ufcon | S3C2410_UFCON_RESETBOTH);
+	wr_regl(port, S3C2410_UFCON, cfg->ufcon);
+
+	/* some delay is required after fifo reset */
+	udelay(1);
+}
+
+
+#ifdef CONFIG_ARM_S3C24XX_CPUFREQ
+
+static int s3c24xx_serial_cpufreq_transition(struct notifier_block *nb,
+					     unsigned long val, void *data)
+{
+	struct s3c24xx_uart_port *port;
+	struct uart_port *uport;
+
+	port = container_of(nb, struct s3c24xx_uart_port, freq_transition);
+	uport = &port->port;
+
+	/* check to see if port is enabled */
+
+	if (port->pm_level != 0)
+		return 0;
+
+	/* try and work out if the baudrate is changing, we can detect
+	 * a change in rate, but we do not have support for detecting
+	 * a disturbance in the clock-rate over the change.
+	 */
+
+	if (IS_ERR(port->baudclk))
+		goto exit;
+
+	if (port->baudclk_rate == clk_get_rate(port->baudclk))
+		goto exit;
+
+	if (val == CPUFREQ_PRECHANGE) {
+		/* we should really shut the port down whilst the
+		 * frequency change is in progress.
+		 */
+
+	} else if (val == CPUFREQ_POSTCHANGE) {
+		struct ktermios *termios;
+		struct tty_struct *tty;
+
+		if (uport->state == NULL)
+			goto exit;
+
+		tty = uport->state->port.tty;
+
+		if (tty == NULL)
+			goto exit;
+
+		termios = &tty->termios;
+
+		if (termios == NULL) {
+			dev_warn(uport->dev, "%s: no termios?\n", __func__);
+			goto exit;
+		}
+
+		s3c24xx_serial_set_termios(uport, termios, NULL);
+	}
+
+exit:
+	return 0;
+}
+
+static inline int
+s3c24xx_serial_cpufreq_register(struct s3c24xx_uart_port *port)
+{
+	port->freq_transition.notifier_call = s3c24xx_serial_cpufreq_transition;
+
+	return cpufreq_register_notifier(&port->freq_transition,
+					 CPUFREQ_TRANSITION_NOTIFIER);
+}
+
+static inline void
+s3c24xx_serial_cpufreq_deregister(struct s3c24xx_uart_port *port)
+{
+	cpufreq_unregister_notifier(&port->freq_transition,
+				    CPUFREQ_TRANSITION_NOTIFIER);
+}
+
+#else
+static inline int
+s3c24xx_serial_cpufreq_register(struct s3c24xx_uart_port *port)
+{
+	return 0;
+}
+
+static inline void
+s3c24xx_serial_cpufreq_deregister(struct s3c24xx_uart_port *port)
+{
+}
+#endif
+
+static int s3c24xx_serial_enable_baudclk(struct s3c24xx_uart_port *ourport)
+{
+	struct device *dev = ourport->port.dev;
+	struct s3c24xx_uart_info *info = ourport->info;
+	char clk_name[MAX_CLK_NAME_LENGTH];
+	unsigned int clk_sel;
+	struct clk *clk;
+	int clk_num;
+	int ret;
+
+	clk_sel = ourport->cfg->clk_sel ? : info->def_clk_sel;
+	for (clk_num = 0; clk_num < info->num_clks; clk_num++) {
+		if (!(clk_sel & (1 << clk_num)))
+			continue;
+
+		sprintf(clk_name, "clk_uart_baud%d", clk_num);
+		clk = clk_get(dev, clk_name);
+		if (IS_ERR(clk))
+			continue;
+
+		ret = clk_prepare_enable(clk);
+		if (ret) {
+			clk_put(clk);
+			continue;
+		}
+
+		ourport->baudclk = clk;
+		ourport->baudclk_rate = clk_get_rate(clk);
+		s3c24xx_serial_setsource(&ourport->port, clk_num);
+
+		return 0;
+	}
+
+	return -EINVAL;
+}
+
+/* s3c24xx_serial_init_port
+ *
+ * initialise a single serial port from the platform device given
+ */
+
+static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport,
+				    struct platform_device *platdev)
+{
+	struct uart_port *port = &ourport->port;
+	struct s3c2410_uartcfg *cfg = ourport->cfg;
+	struct resource *res;
+	int ret;
+
+	if (platdev == NULL)
+		return -ENODEV;
+
+	if (port->mapbase != 0)
+		return -EINVAL;
+
+	/* setup info for port */
+	port->dev	= &platdev->dev;
+
+	/* Startup sequence is different for s3c64xx and higher SoC's */
+	if (s3c24xx_serial_has_interrupt_mask(port))
+		s3c24xx_serial_ops.startup = s3c64xx_serial_startup;
+
+	port->uartclk = 1;
+
+	if (cfg->uart_flags & UPF_CONS_FLOW) {
+		dev_dbg(port->dev, "enabling flow control\n");
+		port->flags |= UPF_CONS_FLOW;
+	}
+
+	/* sort our the physical and virtual addresses for each UART */
+
+	res = platform_get_resource(platdev, IORESOURCE_MEM, 0);
+	if (res == NULL) {
+		dev_err(port->dev, "failed to find memory resource for uart\n");
+		return -EINVAL;
+	}
+
+	dev_dbg(port->dev, "resource %pR)\n", res);
+
+	port->membase = devm_ioremap(port->dev, res->start, resource_size(res));
+	if (!port->membase) {
+		dev_err(port->dev, "failed to remap controller address\n");
+		return -EBUSY;
+	}
+
+	port->mapbase = res->start;
+	ret = platform_get_irq(platdev, 0);
+	if (ret < 0)
+		port->irq = 0;
+	else {
+		port->irq = ret;
+		ourport->rx_irq = ret;
+		ourport->tx_irq = ret + 1;
+	}
+
+	if (!s3c24xx_serial_has_interrupt_mask(port)) {
+		ret = platform_get_irq(platdev, 1);
+		if (ret > 0)
+			ourport->tx_irq = ret;
+	}
+	/*
+	 * DMA is currently supported only on DT platforms, if DMA properties
+	 * are specified.
+	 */
+	if (platdev->dev.of_node && of_find_property(platdev->dev.of_node,
+						     "dmas", NULL)) {
+		ourport->dma = devm_kzalloc(port->dev,
+					    sizeof(*ourport->dma),
+					    GFP_KERNEL);
+		if (!ourport->dma) {
+			ret = -ENOMEM;
+			goto err;
+		}
+	}
+
+	ourport->clk	= clk_get(&platdev->dev, "uart");
+	if (IS_ERR(ourport->clk)) {
+		pr_err("%s: Controller clock not found\n",
+				dev_name(&platdev->dev));
+		ret = PTR_ERR(ourport->clk);
+		goto err;
+	}
+
+	ret = clk_prepare_enable(ourport->clk);
+	if (ret) {
+		pr_err("uart: clock failed to prepare+enable: %d\n", ret);
+		clk_put(ourport->clk);
+		goto err;
+	}
+
+	ret = s3c24xx_serial_enable_baudclk(ourport);
+	if (ret)
+		pr_warn("uart: failed to enable baudclk\n");
+
+	/* Keep all interrupts masked and cleared */
+	if (s3c24xx_serial_has_interrupt_mask(port)) {
+		wr_regl(port, S3C64XX_UINTM, 0xf);
+		wr_regl(port, S3C64XX_UINTP, 0xf);
+		wr_regl(port, S3C64XX_UINTSP, 0xf);
+	}
+
+	dev_dbg(port->dev, "port: map=%pa, mem=%p, irq=%d (%d,%d), clock=%u\n",
+		&port->mapbase, port->membase, port->irq,
+		ourport->rx_irq, ourport->tx_irq, port->uartclk);
+
+	/* reset the fifos (and setup the uart) */
+	s3c24xx_serial_resetport(port, cfg);
+
+	return 0;
+
+err:
+	port->mapbase = 0;
+	return ret;
+}
+
+/* Device driver serial port probe */
+
+#ifdef CONFIG_OF
+static const struct of_device_id s3c24xx_uart_dt_match[];
+#endif
+
+static int probe_index;
+
+static inline struct s3c24xx_serial_drv_data *s3c24xx_get_driver_data(
+			struct platform_device *pdev)
+{
+#ifdef CONFIG_OF
+	if (pdev->dev.of_node) {
+		const struct of_device_id *match;
+
+		match = of_match_node(s3c24xx_uart_dt_match, pdev->dev.of_node);
+		return (struct s3c24xx_serial_drv_data *)match->data;
+	}
+#endif
+	return (struct s3c24xx_serial_drv_data *)
+			platform_get_device_id(pdev)->driver_data;
+}
+
+static int s3c24xx_serial_probe(struct platform_device *pdev)
+{
+	struct device_node *np = pdev->dev.of_node;
+	struct s3c24xx_uart_port *ourport;
+	int index = probe_index;
+	int ret, prop = 0;
+
+	if (np) {
+		ret = of_alias_get_id(np, "serial");
+		if (ret >= 0)
+			index = ret;
+	}
+
+	if (index >= ARRAY_SIZE(s3c24xx_serial_ports)) {
+		dev_err(&pdev->dev, "serial%d out of range\n", index);
+		return -EINVAL;
+	}
+	ourport = &s3c24xx_serial_ports[index];
+
+	ourport->drv_data = s3c24xx_get_driver_data(pdev);
+	if (!ourport->drv_data) {
+		dev_err(&pdev->dev, "could not find driver data\n");
+		return -ENODEV;
+	}
+
+	ourport->baudclk = ERR_PTR(-EINVAL);
+	ourport->info = ourport->drv_data->info;
+	ourport->cfg = (dev_get_platdata(&pdev->dev)) ?
+			dev_get_platdata(&pdev->dev) :
+			ourport->drv_data->def_cfg;
+
+	if (np) {
+		of_property_read_u32(np,
+			"samsung,uart-fifosize", &ourport->port.fifosize);
+
+		if (of_property_read_u32(np, "reg-io-width", &prop) == 0) {
+			switch (prop) {
+			case 1:
+				ourport->port.iotype = UPIO_MEM;
+				break;
+			case 4:
+				ourport->port.iotype = UPIO_MEM32;
+				break;
+			default:
+				dev_warn(&pdev->dev, "unsupported reg-io-width (%d)\n",
+						prop);
+				ret = -EINVAL;
+				break;
+			}
+		}
+	}
+
+	if (ourport->drv_data->fifosize[index])
+		ourport->port.fifosize = ourport->drv_data->fifosize[index];
+	else if (ourport->info->fifosize)
+		ourport->port.fifosize = ourport->info->fifosize;
+
+	/*
+	 * DMA transfers must be aligned at least to cache line size,
+	 * so find minimal transfer size suitable for DMA mode
+	 */
+	ourport->min_dma_size = max_t(int, ourport->port.fifosize,
+				    dma_get_cache_alignment());
+
+	dev_dbg(&pdev->dev, "%s: initialising port %p...\n", __func__, ourport);
+
+	ret = s3c24xx_serial_init_port(ourport, pdev);
+	if (ret < 0)
+		return ret;
+
+	if (!s3c24xx_uart_drv.state) {
+		ret = uart_register_driver(&s3c24xx_uart_drv);
+		if (ret < 0) {
+			pr_err("Failed to register Samsung UART driver\n");
+			return ret;
+		}
+	}
+
+	dev_dbg(&pdev->dev, "%s: adding port\n", __func__);
+	uart_add_one_port(&s3c24xx_uart_drv, &ourport->port);
+	platform_set_drvdata(pdev, &ourport->port);
+
+	/*
+	 * Deactivate the clock enabled in s3c24xx_serial_init_port here,
+	 * so that a potential re-enablement through the pm-callback overlaps
+	 * and keeps the clock enabled in this case.
+	 */
+	clk_disable_unprepare(ourport->clk);
+	if (!IS_ERR(ourport->baudclk))
+		clk_disable_unprepare(ourport->baudclk);
+
+	ret = s3c24xx_serial_cpufreq_register(ourport);
+	if (ret < 0)
+		dev_err(&pdev->dev, "failed to add cpufreq notifier\n");
+
+	probe_index++;
+
+	return 0;
+}
+
+static int s3c24xx_serial_remove(struct platform_device *dev)
+{
+	struct uart_port *port = s3c24xx_dev_to_port(&dev->dev);
+
+	if (port) {
+		s3c24xx_serial_cpufreq_deregister(to_ourport(port));
+		uart_remove_one_port(&s3c24xx_uart_drv, port);
+	}
+
+	uart_unregister_driver(&s3c24xx_uart_drv);
+
+	return 0;
+}
+
+/* UART power management code */
+#ifdef CONFIG_PM_SLEEP
+static int s3c24xx_serial_suspend(struct device *dev)
+{
+	struct uart_port *port = s3c24xx_dev_to_port(dev);
+
+	if (port)
+		uart_suspend_port(&s3c24xx_uart_drv, port);
+
+	return 0;
+}
+
+static int s3c24xx_serial_resume(struct device *dev)
+{
+	struct uart_port *port = s3c24xx_dev_to_port(dev);
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+
+	if (port) {
+		clk_prepare_enable(ourport->clk);
+		if (!IS_ERR(ourport->baudclk))
+			clk_prepare_enable(ourport->baudclk);
+		s3c24xx_serial_resetport(port, s3c24xx_port_to_cfg(port));
+		if (!IS_ERR(ourport->baudclk))
+			clk_disable_unprepare(ourport->baudclk);
+		clk_disable_unprepare(ourport->clk);
+
+		uart_resume_port(&s3c24xx_uart_drv, port);
+	}
+
+	return 0;
+}
+
+static int s3c24xx_serial_resume_noirq(struct device *dev)
+{
+	struct uart_port *port = s3c24xx_dev_to_port(dev);
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+
+	if (port) {
+		/* restore IRQ mask */
+		if (s3c24xx_serial_has_interrupt_mask(port)) {
+			unsigned int uintm = 0xf;
+
+			if (ourport->tx_enabled)
+				uintm &= ~S3C64XX_UINTM_TXD_MSK;
+			if (ourport->rx_enabled)
+				uintm &= ~S3C64XX_UINTM_RXD_MSK;
+			clk_prepare_enable(ourport->clk);
+			if (!IS_ERR(ourport->baudclk))
+				clk_prepare_enable(ourport->baudclk);
+			wr_regl(port, S3C64XX_UINTM, uintm);
+			if (!IS_ERR(ourport->baudclk))
+				clk_disable_unprepare(ourport->baudclk);
+			clk_disable_unprepare(ourport->clk);
+		}
+	}
+
+	return 0;
+}
+
+static const struct dev_pm_ops s3c24xx_serial_pm_ops = {
+	.suspend = s3c24xx_serial_suspend,
+	.resume = s3c24xx_serial_resume,
+	.resume_noirq = s3c24xx_serial_resume_noirq,
+};
+#define SERIAL_SAMSUNG_PM_OPS	(&s3c24xx_serial_pm_ops)
+
+#else /* !CONFIG_PM_SLEEP */
+
+#define SERIAL_SAMSUNG_PM_OPS	NULL
+#endif /* CONFIG_PM_SLEEP */
+
+/* Console code */
+
+#ifdef CONFIG_SERIAL_SAMSUNG_CONSOLE
+
+static struct uart_port *cons_uart;
+
+static int
+s3c24xx_serial_console_txrdy(struct uart_port *port, unsigned int ufcon)
+{
+	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
+	unsigned long ufstat, utrstat;
+
+	if (ufcon & S3C2410_UFCON_FIFOMODE) {
+		/* fifo mode - check amount of data in fifo registers... */
+
+		ufstat = rd_regl(port, S3C2410_UFSTAT);
+		return (ufstat & info->tx_fifofull) ? 0 : 1;
+	}
+
+	/* in non-fifo mode, we go and use the tx buffer empty */
+
+	utrstat = rd_regl(port, S3C2410_UTRSTAT);
+	return (utrstat & S3C2410_UTRSTAT_TXE) ? 1 : 0;
+}
+
+static bool
+s3c24xx_port_configured(unsigned int ucon)
+{
+	/* consider the serial port configured if the tx/rx mode set */
+	return (ucon & 0xf) != 0;
+}
+
+#ifdef CONFIG_CONSOLE_POLL
+/*
+ * Console polling routines for writing and reading from the uart while
+ * in an interrupt or debug context.
+ */
+
+static int s3c24xx_serial_get_poll_char(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	unsigned int ufstat;
+
+	ufstat = rd_regl(port, S3C2410_UFSTAT);
+	if (s3c24xx_serial_rx_fifocnt(ourport, ufstat) == 0)
+		return NO_POLL_CHAR;
+
+	return rd_reg(port, S3C2410_URXH);
+}
+
+static void s3c24xx_serial_put_poll_char(struct uart_port *port,
+		unsigned char c)
+{
+	unsigned int ufcon = rd_regl(port, S3C2410_UFCON);
+	unsigned int ucon = rd_regl(port, S3C2410_UCON);
+
+	/* not possible to xmit on unconfigured port */
+	if (!s3c24xx_port_configured(ucon))
+		return;
+
+	while (!s3c24xx_serial_console_txrdy(port, ufcon))
+		cpu_relax();
+	wr_reg(port, S3C2410_UTXH, c);
+}
+
+#endif /* CONFIG_CONSOLE_POLL */
+
+static void
+s3c24xx_serial_console_putchar(struct uart_port *port, int ch)
+{
+	unsigned int ufcon = rd_regl(port, S3C2410_UFCON);
+
+	while (!s3c24xx_serial_console_txrdy(port, ufcon))
+		cpu_relax();
+	wr_reg(port, S3C2410_UTXH, ch);
+}
+
+static void
+s3c24xx_serial_console_write(struct console *co, const char *s,
+			     unsigned int count)
+{
+	unsigned int ucon = rd_regl(cons_uart, S3C2410_UCON);
+
+	/* not possible to xmit on unconfigured port */
+	if (!s3c24xx_port_configured(ucon))
+		return;
+
+	uart_console_write(cons_uart, s, count, s3c24xx_serial_console_putchar);
+}
+
+static void __init
+s3c24xx_serial_get_options(struct uart_port *port, int *baud,
+			   int *parity, int *bits)
+{
+	struct clk *clk;
+	unsigned int ulcon;
+	unsigned int ucon;
+	unsigned int ubrdiv;
+	unsigned long rate;
+	unsigned int clk_sel;
+	char clk_name[MAX_CLK_NAME_LENGTH];
+
+	ulcon  = rd_regl(port, S3C2410_ULCON);
+	ucon   = rd_regl(port, S3C2410_UCON);
+	ubrdiv = rd_regl(port, S3C2410_UBRDIV);
+
+	if (s3c24xx_port_configured(ucon)) {
+		switch (ulcon & S3C2410_LCON_CSMASK) {
+		case S3C2410_LCON_CS5:
+			*bits = 5;
+			break;
+		case S3C2410_LCON_CS6:
+			*bits = 6;
+			break;
+		case S3C2410_LCON_CS7:
+			*bits = 7;
+			break;
+		case S3C2410_LCON_CS8:
+		default:
+			*bits = 8;
+			break;
+		}
+
+		switch (ulcon & S3C2410_LCON_PMASK) {
+		case S3C2410_LCON_PEVEN:
+			*parity = 'e';
+			break;
+
+		case S3C2410_LCON_PODD:
+			*parity = 'o';
+			break;
+
+		case S3C2410_LCON_PNONE:
+		default:
+			*parity = 'n';
+		}
+
+		/* now calculate the baud rate */
+
+		clk_sel = s3c24xx_serial_getsource(port);
+		sprintf(clk_name, "clk_uart_baud%d", clk_sel);
+
+		clk = clk_get(port->dev, clk_name);
+		if (!IS_ERR(clk))
+			rate = clk_get_rate(clk);
+		else
+			rate = 1;
+
+		*baud = rate / (16 * (ubrdiv + 1));
+		dev_dbg(port->dev, "calculated baud %d\n", *baud);
+	}
+
+}
+
+static int __init
+s3c24xx_serial_console_setup(struct console *co, char *options)
+{
+	struct uart_port *port;
+	int baud = 9600;
+	int bits = 8;
+	int parity = 'n';
+	int flow = 'n';
+
+	/* is this a valid port */
+
+	if (co->index == -1 || co->index >= CONFIG_SERIAL_SAMSUNG_UARTS)
+		co->index = 0;
+
+	port = &s3c24xx_serial_ports[co->index].port;
+
+	/* is the port configured? */
+
+	if (port->mapbase == 0x0)
+		return -ENODEV;
+
+	cons_uart = port;
+
+	/*
+	 * Check whether an invalid uart number has been specified, and
+	 * if so, search for the first available port that does have
+	 * console support.
+	 */
+	if (options)
+		uart_parse_options(options, &baud, &parity, &bits, &flow);
+	else
+		s3c24xx_serial_get_options(port, &baud, &parity, &bits);
+
+	dev_dbg(port->dev, "baud %d\n", baud);
+
+	return uart_set_options(port, co, baud, parity, bits, flow);
+}
+
+static struct console s3c24xx_serial_console = {
+	.name		= S3C24XX_SERIAL_NAME,
+	.device		= uart_console_device,
+	.flags		= CON_PRINTBUFFER,
+	.index		= -1,
+	.write		= s3c24xx_serial_console_write,
+	.setup		= s3c24xx_serial_console_setup,
+	.data		= &s3c24xx_uart_drv,
+};
+#endif /* CONFIG_SERIAL_SAMSUNG_CONSOLE */
+
+#ifdef CONFIG_CPU_S3C2410
+static struct s3c24xx_serial_drv_data s3c2410_serial_drv_data = {
+	.info = &(struct s3c24xx_uart_info) {
+		.name		= "Samsung S3C2410 UART",
+		.type		= PORT_S3C2410,
+		.fifosize	= 16,
+		.rx_fifomask	= S3C2410_UFSTAT_RXMASK,
+		.rx_fifoshift	= S3C2410_UFSTAT_RXSHIFT,
+		.rx_fifofull	= S3C2410_UFSTAT_RXFULL,
+		.tx_fifofull	= S3C2410_UFSTAT_TXFULL,
+		.tx_fifomask	= S3C2410_UFSTAT_TXMASK,
+		.tx_fifoshift	= S3C2410_UFSTAT_TXSHIFT,
+		.def_clk_sel	= S3C2410_UCON_CLKSEL0,
+		.num_clks	= 2,
+		.clksel_mask	= S3C2410_UCON_CLKMASK,
+		.clksel_shift	= S3C2410_UCON_CLKSHIFT,
+	},
+	.def_cfg = &(struct s3c2410_uartcfg) {
+		.ucon		= S3C2410_UCON_DEFAULT,
+		.ufcon		= S3C2410_UFCON_DEFAULT,
+	},
+};
+#define S3C2410_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c2410_serial_drv_data)
+#else
+#define S3C2410_SERIAL_DRV_DATA (kernel_ulong_t)NULL
+#endif
+
+#ifdef CONFIG_CPU_S3C2412
+static struct s3c24xx_serial_drv_data s3c2412_serial_drv_data = {
+	.info = &(struct s3c24xx_uart_info) {
+		.name		= "Samsung S3C2412 UART",
+		.type		= PORT_S3C2412,
+		.fifosize	= 64,
+		.has_divslot	= 1,
+		.rx_fifomask	= S3C2440_UFSTAT_RXMASK,
+		.rx_fifoshift	= S3C2440_UFSTAT_RXSHIFT,
+		.rx_fifofull	= S3C2440_UFSTAT_RXFULL,
+		.tx_fifofull	= S3C2440_UFSTAT_TXFULL,
+		.tx_fifomask	= S3C2440_UFSTAT_TXMASK,
+		.tx_fifoshift	= S3C2440_UFSTAT_TXSHIFT,
+		.def_clk_sel	= S3C2410_UCON_CLKSEL2,
+		.num_clks	= 4,
+		.clksel_mask	= S3C2412_UCON_CLKMASK,
+		.clksel_shift	= S3C2412_UCON_CLKSHIFT,
+	},
+	.def_cfg = &(struct s3c2410_uartcfg) {
+		.ucon		= S3C2410_UCON_DEFAULT,
+		.ufcon		= S3C2410_UFCON_DEFAULT,
+	},
+};
+#define S3C2412_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c2412_serial_drv_data)
+#else
+#define S3C2412_SERIAL_DRV_DATA (kernel_ulong_t)NULL
+#endif
+
+#if defined(CONFIG_CPU_S3C2440) || defined(CONFIG_CPU_S3C2416) || \
+	defined(CONFIG_CPU_S3C2443) || defined(CONFIG_CPU_S3C2442)
+static struct s3c24xx_serial_drv_data s3c2440_serial_drv_data = {
+	.info = &(struct s3c24xx_uart_info) {
+		.name		= "Samsung S3C2440 UART",
+		.type		= PORT_S3C2440,
+		.fifosize	= 64,
+		.has_divslot	= 1,
+		.rx_fifomask	= S3C2440_UFSTAT_RXMASK,
+		.rx_fifoshift	= S3C2440_UFSTAT_RXSHIFT,
+		.rx_fifofull	= S3C2440_UFSTAT_RXFULL,
+		.tx_fifofull	= S3C2440_UFSTAT_TXFULL,
+		.tx_fifomask	= S3C2440_UFSTAT_TXMASK,
+		.tx_fifoshift	= S3C2440_UFSTAT_TXSHIFT,
+		.def_clk_sel	= S3C2410_UCON_CLKSEL2,
+		.num_clks	= 4,
+		.clksel_mask	= S3C2412_UCON_CLKMASK,
+		.clksel_shift	= S3C2412_UCON_CLKSHIFT,
+	},
+	.def_cfg = &(struct s3c2410_uartcfg) {
+		.ucon		= S3C2410_UCON_DEFAULT,
+		.ufcon		= S3C2410_UFCON_DEFAULT,
+	},
+};
+#define S3C2440_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c2440_serial_drv_data)
+#else
+#define S3C2440_SERIAL_DRV_DATA (kernel_ulong_t)NULL
+#endif
+
+#if defined(CONFIG_CPU_S3C6400) || defined(CONFIG_CPU_S3C6410)
+static struct s3c24xx_serial_drv_data s3c6400_serial_drv_data = {
+	.info = &(struct s3c24xx_uart_info) {
+		.name		= "Samsung S3C6400 UART",
+		.type		= PORT_S3C6400,
+		.fifosize	= 64,
+		.has_divslot	= 1,
+		.rx_fifomask	= S3C2440_UFSTAT_RXMASK,
+		.rx_fifoshift	= S3C2440_UFSTAT_RXSHIFT,
+		.rx_fifofull	= S3C2440_UFSTAT_RXFULL,
+		.tx_fifofull	= S3C2440_UFSTAT_TXFULL,
+		.tx_fifomask	= S3C2440_UFSTAT_TXMASK,
+		.tx_fifoshift	= S3C2440_UFSTAT_TXSHIFT,
+		.def_clk_sel	= S3C2410_UCON_CLKSEL2,
+		.num_clks	= 4,
+		.clksel_mask	= S3C6400_UCON_CLKMASK,
+		.clksel_shift	= S3C6400_UCON_CLKSHIFT,
+	},
+	.def_cfg = &(struct s3c2410_uartcfg) {
+		.ucon		= S3C2410_UCON_DEFAULT,
+		.ufcon		= S3C2410_UFCON_DEFAULT,
+	},
+};
+#define S3C6400_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c6400_serial_drv_data)
+#else
+#define S3C6400_SERIAL_DRV_DATA (kernel_ulong_t)NULL
+#endif
+
+#ifdef CONFIG_CPU_S5PV210
+static struct s3c24xx_serial_drv_data s5pv210_serial_drv_data = {
+	.info = &(struct s3c24xx_uart_info) {
+		.name		= "Samsung S5PV210 UART",
+		.type		= PORT_S3C6400,
+		.has_divslot	= 1,
+		.rx_fifomask	= S5PV210_UFSTAT_RXMASK,
+		.rx_fifoshift	= S5PV210_UFSTAT_RXSHIFT,
+		.rx_fifofull	= S5PV210_UFSTAT_RXFULL,
+		.tx_fifofull	= S5PV210_UFSTAT_TXFULL,
+		.tx_fifomask	= S5PV210_UFSTAT_TXMASK,
+		.tx_fifoshift	= S5PV210_UFSTAT_TXSHIFT,
+		.def_clk_sel	= S3C2410_UCON_CLKSEL0,
+		.num_clks	= 2,
+		.clksel_mask	= S5PV210_UCON_CLKMASK,
+		.clksel_shift	= S5PV210_UCON_CLKSHIFT,
+	},
+	.def_cfg = &(struct s3c2410_uartcfg) {
+		.ucon		= S5PV210_UCON_DEFAULT,
+		.ufcon		= S5PV210_UFCON_DEFAULT,
+	},
+	.fifosize = { 256, 64, 16, 16 },
+};
+#define S5PV210_SERIAL_DRV_DATA ((kernel_ulong_t)&s5pv210_serial_drv_data)
+#else
+#define S5PV210_SERIAL_DRV_DATA	(kernel_ulong_t)NULL
+#endif
+
+#if defined(CONFIG_ARCH_EXYNOS)
+#define EXYNOS_COMMON_SERIAL_DRV_DATA				\
+	.info = &(struct s3c24xx_uart_info) {			\
+		.name		= "Samsung Exynos UART",	\
+		.type		= PORT_S3C6400,			\
+		.has_divslot	= 1,				\
+		.rx_fifomask	= S5PV210_UFSTAT_RXMASK,	\
+		.rx_fifoshift	= S5PV210_UFSTAT_RXSHIFT,	\
+		.rx_fifofull	= S5PV210_UFSTAT_RXFULL,	\
+		.tx_fifofull	= S5PV210_UFSTAT_TXFULL,	\
+		.tx_fifomask	= S5PV210_UFSTAT_TXMASK,	\
+		.tx_fifoshift	= S5PV210_UFSTAT_TXSHIFT,	\
+		.def_clk_sel	= S3C2410_UCON_CLKSEL0,		\
+		.num_clks	= 1,				\
+		.clksel_mask	= 0,				\
+		.clksel_shift	= 0,				\
+	},							\
+	.def_cfg = &(struct s3c2410_uartcfg) {			\
+		.ucon		= S5PV210_UCON_DEFAULT,		\
+		.ufcon		= S5PV210_UFCON_DEFAULT,	\
+		.has_fracval	= 1,				\
+	}							\
+
+static struct s3c24xx_serial_drv_data exynos4210_serial_drv_data = {
+	EXYNOS_COMMON_SERIAL_DRV_DATA,
+	.fifosize = { 256, 64, 16, 16 },
+};
+
+static struct s3c24xx_serial_drv_data exynos5433_serial_drv_data = {
+	EXYNOS_COMMON_SERIAL_DRV_DATA,
+	.fifosize = { 64, 256, 16, 256 },
+};
+
+#define EXYNOS4210_SERIAL_DRV_DATA ((kernel_ulong_t)&exynos4210_serial_drv_data)
+#define EXYNOS5433_SERIAL_DRV_DATA ((kernel_ulong_t)&exynos5433_serial_drv_data)
+#else
+#define EXYNOS4210_SERIAL_DRV_DATA (kernel_ulong_t)NULL
+#define EXYNOS5433_SERIAL_DRV_DATA (kernel_ulong_t)NULL
+#endif
+
+static const struct platform_device_id s3c24xx_serial_driver_ids[] = {
+	{
+		.name		= "s3c2410-uart",
+		.driver_data	= S3C2410_SERIAL_DRV_DATA,
+	}, {
+		.name		= "s3c2412-uart",
+		.driver_data	= S3C2412_SERIAL_DRV_DATA,
+	}, {
+		.name		= "s3c2440-uart",
+		.driver_data	= S3C2440_SERIAL_DRV_DATA,
+	}, {
+		.name		= "s3c6400-uart",
+		.driver_data	= S3C6400_SERIAL_DRV_DATA,
+	}, {
+		.name		= "s5pv210-uart",
+		.driver_data	= S5PV210_SERIAL_DRV_DATA,
+	}, {
+		.name		= "exynos4210-uart",
+		.driver_data	= EXYNOS4210_SERIAL_DRV_DATA,
+	}, {
+		.name		= "exynos5433-uart",
+		.driver_data	= EXYNOS5433_SERIAL_DRV_DATA,
+	},
+	{ },
+};
+MODULE_DEVICE_TABLE(platform, s3c24xx_serial_driver_ids);
+
+#ifdef CONFIG_OF
+static const struct of_device_id s3c24xx_uart_dt_match[] = {
+	{ .compatible = "samsung,s3c2410-uart",
+		.data = (void *)S3C2410_SERIAL_DRV_DATA },
+	{ .compatible = "samsung,s3c2412-uart",
+		.data = (void *)S3C2412_SERIAL_DRV_DATA },
+	{ .compatible = "samsung,s3c2440-uart",
+		.data = (void *)S3C2440_SERIAL_DRV_DATA },
+	{ .compatible = "samsung,s3c6400-uart",
+		.data = (void *)S3C6400_SERIAL_DRV_DATA },
+	{ .compatible = "samsung,s5pv210-uart",
+		.data = (void *)S5PV210_SERIAL_DRV_DATA },
+	{ .compatible = "samsung,exynos4210-uart",
+		.data = (void *)EXYNOS4210_SERIAL_DRV_DATA },
+	{ .compatible = "samsung,exynos5433-uart",
+		.data = (void *)EXYNOS5433_SERIAL_DRV_DATA },
+	{},
+};
+MODULE_DEVICE_TABLE(of, s3c24xx_uart_dt_match);
+#endif
+
+static struct platform_driver samsung_serial_driver = {
+	.probe		= s3c24xx_serial_probe,
+	.remove		= s3c24xx_serial_remove,
+	.id_table	= s3c24xx_serial_driver_ids,
+	.driver		= {
+		.name	= "samsung-uart",
+		.pm	= SERIAL_SAMSUNG_PM_OPS,
+		.of_match_table	= of_match_ptr(s3c24xx_uart_dt_match),
+	},
+};
+
+module_platform_driver(samsung_serial_driver);
+
+#ifdef CONFIG_SERIAL_SAMSUNG_CONSOLE
+/*
+ * Early console.
+ */
+
+static void wr_reg_barrier(struct uart_port *port, u32 reg, u32 val)
+{
+	switch (port->iotype) {
+	case UPIO_MEM:
+		writeb(val, portaddr(port, reg));
+		break;
+	case UPIO_MEM32:
+		writel(val, portaddr(port, reg));
+		break;
+	}
+}
+
+struct samsung_early_console_data {
+	u32 txfull_mask;
+};
+
+static void samsung_early_busyuart(struct uart_port *port)
+{
+	while (!(readl(port->membase + S3C2410_UTRSTAT) & S3C2410_UTRSTAT_TXFE))
+		;
+}
+
+static void samsung_early_busyuart_fifo(struct uart_port *port)
+{
+	struct samsung_early_console_data *data = port->private_data;
+
+	while (readl(port->membase + S3C2410_UFSTAT) & data->txfull_mask)
+		;
+}
+
+static void samsung_early_putc(struct uart_port *port, int c)
+{
+	if (readl(port->membase + S3C2410_UFCON) & S3C2410_UFCON_FIFOMODE)
+		samsung_early_busyuart_fifo(port);
+	else
+		samsung_early_busyuart(port);
+
+	wr_reg_barrier(port, S3C2410_UTXH, c);
+}
+
+static void samsung_early_write(struct console *con, const char *s,
+				unsigned int n)
+{
+	struct earlycon_device *dev = con->data;
+
+	uart_console_write(&dev->port, s, n, samsung_early_putc);
+}
+
+static int __init samsung_early_console_setup(struct earlycon_device *device,
+					      const char *opt)
+{
+	if (!device->port.membase)
+		return -ENODEV;
+
+	device->con->write = samsung_early_write;
+	return 0;
+}
+
+/* S3C2410 */
+static struct samsung_early_console_data s3c2410_early_console_data = {
+	.txfull_mask = S3C2410_UFSTAT_TXFULL,
+};
+
+static int __init s3c2410_early_console_setup(struct earlycon_device *device,
+					      const char *opt)
+{
+	device->port.private_data = &s3c2410_early_console_data;
+	return samsung_early_console_setup(device, opt);
+}
+OF_EARLYCON_DECLARE(s3c2410, "samsung,s3c2410-uart",
+			s3c2410_early_console_setup);
+
+/* S3C2412, S3C2440, S3C64xx */
+static struct samsung_early_console_data s3c2440_early_console_data = {
+	.txfull_mask = S3C2440_UFSTAT_TXFULL,
+};
+
+static int __init s3c2440_early_console_setup(struct earlycon_device *device,
+					      const char *opt)
+{
+	device->port.private_data = &s3c2440_early_console_data;
+	return samsung_early_console_setup(device, opt);
+}
+OF_EARLYCON_DECLARE(s3c2412, "samsung,s3c2412-uart",
+			s3c2440_early_console_setup);
+OF_EARLYCON_DECLARE(s3c2440, "samsung,s3c2440-uart",
+			s3c2440_early_console_setup);
+OF_EARLYCON_DECLARE(s3c6400, "samsung,s3c6400-uart",
+			s3c2440_early_console_setup);
+
+/* S5PV210, EXYNOS */
+static struct samsung_early_console_data s5pv210_early_console_data = {
+	.txfull_mask = S5PV210_UFSTAT_TXFULL,
+};
+
+static int __init s5pv210_early_console_setup(struct earlycon_device *device,
+					      const char *opt)
+{
+	device->port.private_data = &s5pv210_early_console_data;
+	return samsung_early_console_setup(device, opt);
+}
+OF_EARLYCON_DECLARE(s5pv210, "samsung,s5pv210-uart",
+			s5pv210_early_console_setup);
+OF_EARLYCON_DECLARE(exynos4210, "samsung,exynos4210-uart",
+			s5pv210_early_console_setup);
+#endif
+
+MODULE_ALIAS("platform:samsung-uart");
+MODULE_DESCRIPTION("Samsung SoC Serial port driver");
+MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index ad26234..faa120b1 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -2607,6 +2607,7 @@ struct tty_driver *uart_console_device(struct console *co, int *index)
 	*index = co->index;
 	return p->tty_driver;
 }
+EXPORT_SYMBOL_GPL(uart_console_device);
 
 static ssize_t uart_get_attr_uartclk(struct device *dev,
 	struct device_attribute *attr, char *buf)
diff --git a/drivers/tty/serial/sprd_serial.c b/drivers/tty/serial/sprd_serial.c
index 07573de..685041d 100644
--- a/drivers/tty/serial/sprd_serial.c
+++ b/drivers/tty/serial/sprd_serial.c
@@ -922,6 +922,34 @@ static void sprd_pm(struct uart_port *port, unsigned int state,
 	}
 }
 
+#ifdef CONFIG_CONSOLE_POLL
+static int sprd_poll_init(struct uart_port *port)
+{
+	if (port->state->pm_state != UART_PM_STATE_ON) {
+		sprd_pm(port, UART_PM_STATE_ON, 0);
+		port->state->pm_state = UART_PM_STATE_ON;
+	}
+
+	return 0;
+}
+
+static int sprd_poll_get_char(struct uart_port *port)
+{
+	while (!(serial_in(port, SPRD_STS1) & SPRD_RX_FIFO_CNT_MASK))
+		cpu_relax();
+
+	return serial_in(port, SPRD_RXD);
+}
+
+static void sprd_poll_put_char(struct uart_port *port, unsigned char ch)
+{
+	while (serial_in(port, SPRD_STS1) & SPRD_TX_FIFO_CNT_MASK)
+		cpu_relax();
+
+	serial_out(port, SPRD_TXD, ch);
+}
+#endif
+
 static const struct uart_ops serial_sprd_ops = {
 	.tx_empty = sprd_tx_empty,
 	.get_mctrl = sprd_get_mctrl,
@@ -939,6 +967,11 @@ static const struct uart_ops serial_sprd_ops = {
 	.config_port = sprd_config_port,
 	.verify_port = sprd_verify_port,
 	.pm = sprd_pm,
+#ifdef CONFIG_CONSOLE_POLL
+	.poll_init	= sprd_poll_init,
+	.poll_get_char	= sprd_poll_get_char,
+	.poll_put_char	= sprd_poll_put_char,
+#endif
 };
 
 #ifdef CONFIG_SERIAL_SPRD_CONSOLE
diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
index 573b205..0329f5e 100644
--- a/drivers/tty/sysrq.c
+++ b/drivers/tty/sysrq.c
@@ -54,6 +54,8 @@
 #include <asm/ptrace.h>
 #include <asm/irq_regs.h>
 
+#include <trace/hooks/sysrqcrash.h>
+
 /* Whether we react on sysrq keys or just ignore them */
 static int __read_mostly sysrq_enabled = CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE;
 static bool __read_mostly sysrq_always_enabled;
@@ -137,6 +139,8 @@ static void sysrq_handle_crash(int key)
 	/* release the RCU read lock before crashing */
 	rcu_read_unlock();
 
+	trace_android_vh_sysrq_crash(current);
+
 	panic("sysrq triggered crash\n");
 }
 static struct sysrq_key_op sysrq_crash_op = {
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 4d3de33..d459bea 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -18,6 +18,7 @@
 #include <linux/sched/mm.h>
 #include <linux/list.h>
 #include <linux/slab.h>
+#include <linux/kcov.h>
 #include <linux/ioctl.h>
 #include <linux/usb.h>
 #include <linux/usbdevice_fs.h>
@@ -5398,6 +5399,8 @@ static void hub_event(struct work_struct *work)
 	hub_dev = hub->intfdev;
 	intf = to_usb_interface(hub_dev);
 
+	kcov_remote_start_usb((u64)hdev->bus->busnum);
+
 	dev_dbg(hub_dev, "state %d ports %d chg %04x evt %04x\n",
 			hdev->state, hdev->maxchild,
 			/* NOTE: expects max 15 ports... */
@@ -5504,6 +5507,8 @@ static void hub_event(struct work_struct *work)
 	/* Balance the stuff in kick_hub_wq() and allow autosuspend */
 	usb_autopm_put_interface(intf);
 	kref_put(&hub->kref, hub_release);
+
+	kcov_remote_stop();
 }
 
 static const struct usb_device_id hub_id_table[] = {
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 90ec65d..fc3bf92 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -295,12 +295,6 @@ static int dwc3_core_soft_reset(struct dwc3 *dwc)
 	return 0;
 }
 
-static const struct clk_bulk_data dwc3_core_clks[] = {
-	{ .id = "ref" },
-	{ .id = "bus_early" },
-	{ .id = "suspend" },
-};
-
 /*
  * dwc3_frame_length_adjustment - Adjusts frame length if required
  * @dwc3: Pointer to our controller context structure
@@ -1418,11 +1412,6 @@ static int dwc3_probe(struct platform_device *pdev)
 	if (!dwc)
 		return -ENOMEM;
 
-	dwc->clks = devm_kmemdup(dev, dwc3_core_clks, sizeof(dwc3_core_clks),
-				 GFP_KERNEL);
-	if (!dwc->clks)
-		return -ENOMEM;
-
 	dwc->dev = dev;
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -1453,22 +1442,23 @@ static int dwc3_probe(struct platform_device *pdev)
 
 	dwc3_get_properties(dwc);
 
-	dwc->reset = devm_reset_control_get_optional_shared(dev, NULL);
+	dwc->reset = devm_reset_control_array_get(dev, true, true);
 	if (IS_ERR(dwc->reset))
 		return PTR_ERR(dwc->reset);
 
 	if (dev->of_node) {
-		dwc->num_clks = ARRAY_SIZE(dwc3_core_clks);
-
-		ret = devm_clk_bulk_get(dev, dwc->num_clks, dwc->clks);
+		ret = devm_clk_bulk_get_all(dev, &dwc->clks);
 		if (ret == -EPROBE_DEFER)
 			return ret;
 		/*
 		 * Clocks are optional, but new DT platforms should support all
 		 * clocks as required by the DT-binding.
 		 */
-		if (ret)
+		if (ret < 0)
 			dwc->num_clks = 0;
+		else
+			dwc->num_clks = ret;
+
 	}
 
 	ret = reset_control_deassert(dwc->reset);
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index da296f8..e5b6a1a 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -25,6 +25,7 @@
 #include <linux/usb/ch9.h>
 #include <linux/usb/gadget.h>
 #include <linux/usb/otg.h>
+#include <linux/usb/role.h>
 #include <linux/ulpi/interface.h>
 
 #include <linux/phy/phy.h>
@@ -964,6 +965,9 @@ struct dwc3_scratchpad_array {
  * @hsphy_mode: UTMI phy mode, one of following:
  *		- USBPHY_INTERFACE_MODE_UTMI
  *		- USBPHY_INTERFACE_MODE_UTMIW
+ * @role_sw: usb_role_switch handle
+ * @role_switch_default_mode: default operation mode of controller while
+ *			usb role is USB_ROLE_NONE.
  * @usb2_phy: pointer to USB2 PHY
  * @usb3_phy: pointer to USB3 PHY
  * @usb2_generic_phy: pointer to USB2 PHY
@@ -1100,6 +1104,8 @@ struct dwc3 {
 	struct extcon_dev	*edev;
 	struct notifier_block	edev_nb;
 	enum usb_phy_interface	hsphy_mode;
+	struct usb_role_switch	*role_sw;
+	enum usb_dr_mode	role_switch_default_mode;
 
 	u32			fladj;
 	u32			irq_gadget;
diff --git a/drivers/usb/dwc3/drd.c b/drivers/usb/dwc3/drd.c
index c946d64..db68d48 100644
--- a/drivers/usb/dwc3/drd.c
+++ b/drivers/usb/dwc3/drd.c
@@ -476,6 +476,92 @@ static struct extcon_dev *dwc3_get_extcon(struct dwc3 *dwc)
 	return edev;
 }
 
+#if IS_ENABLED(CONFIG_USB_ROLE_SWITCH)
+#define ROLE_SWITCH 1
+static int dwc3_usb_role_switch_set(struct device *dev, enum usb_role role)
+{
+	struct dwc3 *dwc = dev_get_drvdata(dev);
+	u32 mode;
+
+	switch (role) {
+	case USB_ROLE_HOST:
+		mode = DWC3_GCTL_PRTCAP_HOST;
+		break;
+	case USB_ROLE_DEVICE:
+		mode = DWC3_GCTL_PRTCAP_DEVICE;
+		break;
+	default:
+		if (dwc->role_switch_default_mode == USB_DR_MODE_HOST)
+			mode = DWC3_GCTL_PRTCAP_HOST;
+		else
+			mode = DWC3_GCTL_PRTCAP_DEVICE;
+		break;
+	}
+
+	dwc3_set_mode(dwc, mode);
+	return 0;
+}
+
+static enum usb_role dwc3_usb_role_switch_get(struct device *dev)
+{
+	struct dwc3 *dwc = dev_get_drvdata(dev);
+	unsigned long flags;
+	enum usb_role role;
+
+	spin_lock_irqsave(&dwc->lock, flags);
+	switch (dwc->current_dr_role) {
+	case DWC3_GCTL_PRTCAP_HOST:
+		role = USB_ROLE_HOST;
+		break;
+	case DWC3_GCTL_PRTCAP_DEVICE:
+		role = USB_ROLE_DEVICE;
+		break;
+	case DWC3_GCTL_PRTCAP_OTG:
+		role = dwc->current_otg_role;
+		break;
+	default:
+		if (dwc->role_switch_default_mode == USB_DR_MODE_HOST)
+			role = USB_ROLE_HOST;
+		else
+			role = USB_ROLE_DEVICE;
+		break;
+	}
+	spin_unlock_irqrestore(&dwc->lock, flags);
+	return role;
+}
+
+static int dwc3_setup_role_switch(struct dwc3 *dwc)
+{
+	struct usb_role_switch_desc dwc3_role_switch = {NULL};
+	const char *str;
+	u32 mode;
+	int ret;
+
+	ret = device_property_read_string(dwc->dev, "role-switch-default-mode",
+					  &str);
+	if (ret >= 0  && !strncmp(str, "host", strlen("host"))) {
+		dwc->role_switch_default_mode = USB_DR_MODE_HOST;
+		mode = DWC3_GCTL_PRTCAP_HOST;
+	} else {
+		dwc->role_switch_default_mode = USB_DR_MODE_PERIPHERAL;
+		mode = DWC3_GCTL_PRTCAP_DEVICE;
+	}
+
+	dwc3_role_switch.fwnode = dev_fwnode(dwc->dev);
+	dwc3_role_switch.set = dwc3_usb_role_switch_set;
+	dwc3_role_switch.get = dwc3_usb_role_switch_get;
+	dwc->role_sw = usb_role_switch_register(dwc->dev, &dwc3_role_switch);
+	if (IS_ERR(dwc->role_sw))
+		return PTR_ERR(dwc->role_sw);
+
+	dwc3_set_mode(dwc, mode);
+	return 0;
+}
+#else
+#define ROLE_SWITCH 0
+#define dwc3_setup_role_switch(x) 0
+#endif
+
 int dwc3_drd_init(struct dwc3 *dwc)
 {
 	int ret, irq;
@@ -484,7 +570,12 @@ int dwc3_drd_init(struct dwc3 *dwc)
 	if (IS_ERR(dwc->edev))
 		return PTR_ERR(dwc->edev);
 
-	if (dwc->edev) {
+	if (ROLE_SWITCH &&
+	    device_property_read_bool(dwc->dev, "usb-role-switch")) {
+		ret = dwc3_setup_role_switch(dwc);
+		if (ret < 0)
+			return ret;
+	} else if (dwc->edev) {
 		dwc->edev_nb.notifier_call = dwc3_drd_notifier;
 		ret = extcon_register_notifier(dwc->edev, EXTCON_USB_HOST,
 					       &dwc->edev_nb);
@@ -531,6 +622,9 @@ void dwc3_drd_exit(struct dwc3 *dwc)
 {
 	unsigned long flags;
 
+	if (dwc->role_sw)
+		usb_role_switch_unregister(dwc->role_sw);
+
 	if (dwc->edev)
 		extcon_unregister_notifier(dwc->edev, EXTCON_USB_HOST,
 					   &dwc->edev_nb);
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
index 09ba3af..35f3090ea 100644
--- a/drivers/usb/gadget/Kconfig
+++ b/drivers/usb/gadget/Kconfig
@@ -216,6 +216,12 @@
 config USB_F_TCM
 	tristate
 
+config USB_F_ACC
+	tristate
+
+config USB_F_AUDIO_SRC
+	tristate
+
 # this first set of drivers all depend on bulk-capable hardware.
 
 config USB_CONFIGFS
@@ -230,6 +236,14 @@
 	  appropriate symbolic links.
 	  For more information see Documentation/usb/gadget_configfs.rst.
 
+config USB_CONFIGFS_UEVENT
+	bool "Uevent notification of Gadget state"
+	depends on USB_CONFIGFS
+	help
+	  Enable uevent notifications to userspace when the gadget
+	  state changes. The gadget can be in any of the following
+	  three states: "CONNECTED/DISCONNECTED/CONFIGURED"
+
 config USB_CONFIGFS_SERIAL
 	bool "Generic serial bulk in/out"
 	depends on USB_CONFIGFS
@@ -371,6 +385,23 @@
 	  implemented in kernel space (for instance Ethernet, serial or
 	  mass storage) and other are implemented in user space.
 
+config USB_CONFIGFS_F_ACC
+	bool "Accessory gadget"
+	depends on USB_CONFIGFS
+	depends on HID=y
+	select USB_F_ACC
+	help
+	  USB gadget Accessory support
+
+config USB_CONFIGFS_F_AUDIO_SRC
+	bool "Audio Source gadget"
+	depends on USB_CONFIGFS
+	depends on SND
+	select SND_PCM
+	select USB_F_AUDIO_SRC
+	help
+	  USB gadget Audio Source support
+
 config USB_CONFIGFS_F_UAC1
 	bool "Audio Class 1.0"
 	depends on USB_CONFIGFS
@@ -485,34 +516,6 @@
 	  Both protocols can work on USB2.0 and USB3.0.
 	  UAS utilizes the USB 3.0 feature called streams support.
 
-choice
-	tristate "USB Gadget precomposed configurations"
-	default USB_ETH
-	optional
-	help
-	  A Linux "Gadget Driver" talks to the USB Peripheral Controller
-	  driver through the abstract "gadget" API.  Some other operating
-	  systems call these "client" drivers, of which "class drivers"
-	  are a subset (implementing a USB device class specification).
-	  A gadget driver implements one or more USB functions using
-	  the peripheral hardware.
-
-	  Gadget drivers are hardware-neutral, or "platform independent",
-	  except that they sometimes must understand quirks or limitations
-	  of the particular controllers they work with.  For example, when
-	  a controller doesn't support alternate configurations or provide
-	  enough of the right types of endpoints, the gadget driver might
-	  not be able work with that controller, or might need to implement
-	  a less common variant of a device class protocol.
-
-	  The available choices each represent a single precomposed USB
-	  gadget configuration. In the device model, each option contains
-	  both the device instantiation as a child for a USB gadget
-	  controller, and the relevant drivers for each function declared
-	  by the device.
-
 source "drivers/usb/gadget/legacy/Kconfig"
 
-endchoice
-
 endif # USB_GADGET
diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
index 5b8b2ca..ae96849 100644
--- a/drivers/usb/gadget/configfs.c
+++ b/drivers/usb/gadget/configfs.c
@@ -10,6 +10,32 @@
 #include "u_f.h"
 #include "u_os_desc.h"
 
+#ifdef CONFIG_USB_CONFIGFS_UEVENT
+#include <linux/platform_device.h>
+#include <linux/kdev_t.h>
+#include <linux/usb/ch9.h>
+
+#ifdef CONFIG_USB_CONFIGFS_F_ACC
+extern int acc_ctrlrequest(struct usb_composite_dev *cdev,
+				const struct usb_ctrlrequest *ctrl);
+void acc_disconnect(void);
+#endif
+static struct class *android_class;
+static struct device *android_device;
+static int index;
+static int gadget_index;
+
+struct device *create_function_device(char *name)
+{
+	if (android_device && !IS_ERR(android_device))
+		return device_create(android_class, android_device,
+			MKDEV(0, index++), NULL, name);
+	else
+		return ERR_PTR(-EINVAL);
+}
+EXPORT_SYMBOL_GPL(create_function_device);
+#endif
+
 int check_user_usb_string(const char *name,
 		struct usb_gadget_strings *stringtab_dev)
 {
@@ -63,6 +89,12 @@ struct gadget_info {
 	char qw_sign[OS_STRING_QW_SIGN_LEN];
 	spinlock_t spinlock;
 	bool unbind;
+#ifdef CONFIG_USB_CONFIGFS_UEVENT
+	bool connected;
+	bool sw_connected;
+	struct work_struct work;
+	struct device *dev;
+#endif
 };
 
 static inline struct gadget_info *to_gadget_info(struct config_item *item)
@@ -278,7 +310,7 @@ static ssize_t gadget_dev_desc_UDC_store(struct config_item *item,
 
 	mutex_lock(&gi->lock);
 
-	if (!strlen(name)) {
+	if (!strlen(name) || strcmp(name, "none") == 0) {
 		ret = unregister_gadget(gi);
 		if (ret)
 			goto err;
@@ -303,6 +335,36 @@ static ssize_t gadget_dev_desc_UDC_store(struct config_item *item,
 	return ret;
 }
 
+static ssize_t gadget_driver_match_existing_only_store(struct config_item *item,
+		const char *page, size_t len)
+{
+	struct gadget_info *gi = to_gadget_info(item);
+	struct usb_gadget_driver *gadget_driver = &(gi->composite.gadget_driver);
+	bool match_existing_only;
+	int ret;
+
+	ret = kstrtobool(page, &match_existing_only);
+	if (ret)
+		return ret;
+
+	if (match_existing_only)
+		gadget_driver->match_existing_only = 1;
+	else
+		gadget_driver->match_existing_only = 0;
+
+	return len;
+}
+
+static ssize_t gadget_driver_match_existing_only_show(struct config_item *item,
+		char *page)
+{
+	struct gadget_info *gi = to_gadget_info(item);
+	struct usb_gadget_driver *gadget_driver = &(gi->composite.gadget_driver);
+	bool match_existing_only = !!gadget_driver->match_existing_only;
+
+	return sprintf(page, "%s\n", match_existing_only ? "true" : "false");
+}
+
 CONFIGFS_ATTR(gadget_dev_desc_, bDeviceClass);
 CONFIGFS_ATTR(gadget_dev_desc_, bDeviceSubClass);
 CONFIGFS_ATTR(gadget_dev_desc_, bDeviceProtocol);
@@ -312,6 +374,7 @@ CONFIGFS_ATTR(gadget_dev_desc_, idProduct);
 CONFIGFS_ATTR(gadget_dev_desc_, bcdDevice);
 CONFIGFS_ATTR(gadget_dev_desc_, bcdUSB);
 CONFIGFS_ATTR(gadget_dev_desc_, UDC);
+CONFIGFS_ATTR(gadget_, driver_match_existing_only);
 
 static struct configfs_attribute *gadget_root_attrs[] = {
 	&gadget_dev_desc_attr_bDeviceClass,
@@ -323,6 +386,7 @@ static struct configfs_attribute *gadget_root_attrs[] = {
 	&gadget_dev_desc_attr_bcdDevice,
 	&gadget_dev_desc_attr_bcdUSB,
 	&gadget_dev_desc_attr_UDC,
+	&gadget_attr_driver_match_existing_only,
 	NULL,
 };
 
@@ -1385,6 +1449,57 @@ static int configfs_composite_bind(struct usb_gadget *gadget,
 	return ret;
 }
 
+#ifdef CONFIG_USB_CONFIGFS_UEVENT
+static void android_work(struct work_struct *data)
+{
+	struct gadget_info *gi = container_of(data, struct gadget_info, work);
+	struct usb_composite_dev *cdev = &gi->cdev;
+	char *disconnected[2] = { "USB_STATE=DISCONNECTED", NULL };
+	char *connected[2]    = { "USB_STATE=CONNECTED", NULL };
+	char *configured[2]   = { "USB_STATE=CONFIGURED", NULL };
+	/* 0-connected 1-configured 2-disconnected*/
+	bool status[3] = { false, false, false };
+	unsigned long flags;
+	bool uevent_sent = false;
+
+	spin_lock_irqsave(&cdev->lock, flags);
+	if (cdev->config)
+		status[1] = true;
+
+	if (gi->connected != gi->sw_connected) {
+		if (gi->connected)
+			status[0] = true;
+		else
+			status[2] = true;
+		gi->sw_connected = gi->connected;
+	}
+	spin_unlock_irqrestore(&cdev->lock, flags);
+
+	if (status[0]) {
+		kobject_uevent_env(&gi->dev->kobj, KOBJ_CHANGE, connected);
+		pr_info("%s: sent uevent %s\n", __func__, connected[0]);
+		uevent_sent = true;
+	}
+
+	if (status[1]) {
+		kobject_uevent_env(&gi->dev->kobj, KOBJ_CHANGE, configured);
+		pr_info("%s: sent uevent %s\n", __func__, configured[0]);
+		uevent_sent = true;
+	}
+
+	if (status[2]) {
+		kobject_uevent_env(&gi->dev->kobj, KOBJ_CHANGE, disconnected);
+		pr_info("%s: sent uevent %s\n", __func__, disconnected[0]);
+		uevent_sent = true;
+	}
+
+	if (!uevent_sent) {
+		pr_info("%s: did not send uevent (%d %d %p)\n", __func__,
+			gi->connected, gi->sw_connected, cdev->config);
+	}
+}
+#endif
+
 static void configfs_composite_unbind(struct usb_gadget *gadget)
 {
 	struct usb_composite_dev	*cdev;
@@ -1410,6 +1525,80 @@ static void configfs_composite_unbind(struct usb_gadget *gadget)
 	spin_unlock_irqrestore(&gi->spinlock, flags);
 }
 
+#ifdef CONFIG_USB_CONFIGFS_UEVENT
+static int android_setup(struct usb_gadget *gadget,
+			const struct usb_ctrlrequest *c)
+{
+	struct usb_composite_dev *cdev = get_gadget_data(gadget);
+	unsigned long flags;
+	struct gadget_info *gi = container_of(cdev, struct gadget_info, cdev);
+	int value = -EOPNOTSUPP;
+	struct usb_function_instance *fi;
+
+	spin_lock_irqsave(&cdev->lock, flags);
+	if (!gi->connected) {
+		gi->connected = 1;
+		schedule_work(&gi->work);
+	}
+	spin_unlock_irqrestore(&cdev->lock, flags);
+	list_for_each_entry(fi, &gi->available_func, cfs_list) {
+		if (fi != NULL && fi->f != NULL && fi->f->setup != NULL) {
+			value = fi->f->setup(fi->f, c);
+			if (value >= 0)
+				break;
+		}
+	}
+
+#ifdef CONFIG_USB_CONFIGFS_F_ACC
+	if (value < 0)
+		value = acc_ctrlrequest(cdev, c);
+#endif
+
+	if (value < 0)
+		value = composite_setup(gadget, c);
+
+	spin_lock_irqsave(&cdev->lock, flags);
+	if (c->bRequest == USB_REQ_SET_CONFIGURATION &&
+						cdev->config) {
+		schedule_work(&gi->work);
+	}
+	spin_unlock_irqrestore(&cdev->lock, flags);
+
+	return value;
+}
+
+static void android_disconnect(struct usb_gadget *gadget)
+{
+	struct usb_composite_dev        *cdev = get_gadget_data(gadget);
+	struct gadget_info *gi = container_of(cdev, struct gadget_info, cdev);
+
+	/* FIXME: There's a race between usb_gadget_udc_stop() which is likely
+	 * to set the gadget driver to NULL in the udc driver and this drivers
+	 * gadget disconnect fn which likely checks for the gadget driver to
+	 * be a null ptr. It happens that unbind (doing set_gadget_data(NULL))
+	 * is called before the gadget driver is set to NULL and the udc driver
+	 * calls disconnect fn which results in cdev being a null ptr.
+	 */
+	if (cdev == NULL) {
+		WARN(1, "%s: gadget driver already disconnected\n", __func__);
+		return;
+	}
+
+	/* accessory HID support can be active while the
+		accessory function is not actually enabled,
+		so we need to inform it when we are disconnected.
+	*/
+
+#ifdef CONFIG_USB_CONFIGFS_F_ACC
+	acc_disconnect();
+#endif
+	gi->connected = 0;
+	schedule_work(&gi->work);
+	composite_disconnect(gadget);
+}
+
+#else // CONFIG_USB_CONFIGFS_UEVENT
+
 static int configfs_composite_setup(struct usb_gadget *gadget,
 		const struct usb_ctrlrequest *ctrl)
 {
@@ -1457,6 +1646,8 @@ static void configfs_composite_disconnect(struct usb_gadget *gadget)
 	spin_unlock_irqrestore(&gi->spinlock, flags);
 }
 
+#endif // CONFIG_USB_CONFIGFS_UEVENT
+
 static void configfs_composite_suspend(struct usb_gadget *gadget)
 {
 	struct usb_composite_dev *cdev;
@@ -1505,10 +1696,15 @@ static const struct usb_gadget_driver configfs_driver_template = {
 	.bind           = configfs_composite_bind,
 	.unbind         = configfs_composite_unbind,
 
+#ifdef CONFIG_USB_CONFIGFS_UEVENT
+	.setup          = android_setup,
+	.reset          = android_disconnect,
+	.disconnect     = android_disconnect,
+#else
 	.setup          = configfs_composite_setup,
 	.reset          = configfs_composite_disconnect,
 	.disconnect     = configfs_composite_disconnect,
-
+#endif
 	.suspend	= configfs_composite_suspend,
 	.resume		= configfs_composite_resume,
 
@@ -1520,6 +1716,91 @@ static const struct usb_gadget_driver configfs_driver_template = {
 	.match_existing_only = 1,
 };
 
+#ifdef CONFIG_USB_CONFIGFS_UEVENT
+static ssize_t state_show(struct device *pdev, struct device_attribute *attr,
+			char *buf)
+{
+	struct gadget_info *dev = dev_get_drvdata(pdev);
+	struct usb_composite_dev *cdev;
+	char *state = "DISCONNECTED";
+	unsigned long flags;
+
+	if (!dev)
+		goto out;
+
+	cdev = &dev->cdev;
+
+	if (!cdev)
+		goto out;
+
+	spin_lock_irqsave(&cdev->lock, flags);
+	if (cdev->config)
+		state = "CONFIGURED";
+	else if (dev->connected)
+		state = "CONNECTED";
+	spin_unlock_irqrestore(&cdev->lock, flags);
+out:
+	return sprintf(buf, "%s\n", state);
+}
+
+static DEVICE_ATTR(state, S_IRUGO, state_show, NULL);
+
+static struct device_attribute *android_usb_attributes[] = {
+	&dev_attr_state,
+	NULL
+};
+
+static int android_device_create(struct gadget_info *gi)
+{
+	struct device_attribute **attrs;
+	struct device_attribute *attr;
+
+	INIT_WORK(&gi->work, android_work);
+	gi->dev = device_create(android_class, NULL,
+			MKDEV(0, 0), NULL, "android%d", gadget_index++);
+	if (IS_ERR(gi->dev))
+		return PTR_ERR(gi->dev);
+
+	dev_set_drvdata(gi->dev, gi);
+	if (!android_device)
+		android_device = gi->dev;
+
+	attrs = android_usb_attributes;
+	while ((attr = *attrs++)) {
+		int err;
+
+		err = device_create_file(gi->dev, attr);
+		if (err) {
+			device_destroy(gi->dev->class,
+				       gi->dev->devt);
+			return err;
+		}
+	}
+
+	return 0;
+}
+
+static void android_device_destroy(struct gadget_info *gi)
+{
+	struct device_attribute **attrs;
+	struct device_attribute *attr;
+
+	attrs = android_usb_attributes;
+	while ((attr = *attrs++))
+		device_remove_file(gi->dev, attr);
+	device_destroy(gi->dev->class, gi->dev->devt);
+}
+#else
+static inline int android_device_create(struct gadget_info *gi)
+{
+	return 0;
+}
+
+static inline void android_device_destroy(struct gadget_info *gi)
+{
+}
+#endif
+
 static struct config_group *gadgets_make(
 		struct config_group *group,
 		const char *name)
@@ -1572,7 +1853,11 @@ static struct config_group *gadgets_make(
 	if (!gi->composite.gadget_driver.function)
 		goto err;
 
+	if (android_device_create(gi) < 0)
+		goto err;
+
 	return &gi->group;
+
 err:
 	kfree(gi);
 	return ERR_PTR(-ENOMEM);
@@ -1580,7 +1865,11 @@ static struct config_group *gadgets_make(
 
 static void gadgets_drop(struct config_group *group, struct config_item *item)
 {
+	struct gadget_info *gi;
+
+	gi = container_of(to_config_group(item), struct gadget_info, group);
 	config_item_put(item);
+	android_device_destroy(gi);
 }
 
 static struct configfs_group_operations gadgets_ops = {
@@ -1620,6 +1909,13 @@ static int __init gadget_cfs_init(void)
 	config_group_init(&gadget_subsys.su_group);
 
 	ret = configfs_register_subsystem(&gadget_subsys);
+
+#ifdef CONFIG_USB_CONFIGFS_UEVENT
+	android_class = class_create(THIS_MODULE, "android_usb");
+	if (IS_ERR(android_class))
+		return PTR_ERR(android_class);
+#endif
+
 	return ret;
 }
 module_init(gadget_cfs_init);
@@ -1627,5 +1923,10 @@ module_init(gadget_cfs_init);
 static void __exit gadget_cfs_exit(void)
 {
 	configfs_unregister_subsystem(&gadget_subsys);
+#ifdef CONFIG_USB_CONFIGFS_UEVENT
+	if (!IS_ERR(android_class))
+		class_destroy(android_class);
+#endif
+
 }
 module_exit(gadget_cfs_exit);
diff --git a/drivers/usb/gadget/function/Makefile b/drivers/usb/gadget/function/Makefile
index 5d3a6cf..dd33a12 100644
--- a/drivers/usb/gadget/function/Makefile
+++ b/drivers/usb/gadget/function/Makefile
@@ -50,3 +50,7 @@
 obj-$(CONFIG_USB_F_PRINTER)	+= usb_f_printer.o
 usb_f_tcm-y			:= f_tcm.o
 obj-$(CONFIG_USB_F_TCM)		+= usb_f_tcm.o
+usb_f_accessory-y		:= f_accessory.o
+obj-$(CONFIG_USB_F_ACC)		+= usb_f_accessory.o
+usb_f_audio_source-y		:= f_audio_source.o
+obj-$(CONFIG_USB_F_AUDIO_SRC)	+= usb_f_audio_source.o
diff --git a/drivers/usb/gadget/function/f_accessory.c b/drivers/usb/gadget/function/f_accessory.c
new file mode 100644
index 0000000..718e01e
--- /dev/null
+++ b/drivers/usb/gadget/function/f_accessory.c
@@ -0,0 +1,1435 @@
+/*
+ * Gadget Function Driver for Android USB accessories
+ *
+ * Copyright (C) 2011 Google, Inc.
+ * Author: Mike Lockwood <lockwood@android.com>
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+/* #define DEBUG */
+/* #define VERBOSE_DEBUG */
+
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/poll.h>
+#include <linux/delay.h>
+#include <linux/wait.h>
+#include <linux/err.h>
+#include <linux/interrupt.h>
+#include <linux/kthread.h>
+#include <linux/freezer.h>
+#include <linux/kref.h>
+
+#include <linux/types.h>
+#include <linux/file.h>
+#include <linux/device.h>
+#include <linux/miscdevice.h>
+
+#include <linux/hid.h>
+#include <linux/hiddev.h>
+#include <linux/usb.h>
+#include <linux/usb/ch9.h>
+#include <linux/usb/f_accessory.h>
+
+#include <linux/configfs.h>
+#include <linux/usb/composite.h>
+
+#define MAX_INST_NAME_LEN        40
+#define BULK_BUFFER_SIZE    16384
+#define ACC_STRING_SIZE     256
+
+#define PROTOCOL_VERSION    2
+
+/* String IDs */
+#define INTERFACE_STRING_INDEX	0
+
+/* number of tx and rx requests to allocate */
+#define TX_REQ_MAX 4
+#define RX_REQ_MAX 2
+
+struct acc_hid_dev {
+	struct list_head	list;
+	struct hid_device *hid;
+	struct acc_dev *dev;
+	/* accessory defined ID */
+	int id;
+	/* HID report descriptor */
+	u8 *report_desc;
+	/* length of HID report descriptor */
+	int report_desc_len;
+	/* number of bytes of report_desc we have received so far */
+	int report_desc_offset;
+};
+
+struct acc_dev {
+	struct usb_function function;
+	struct usb_composite_dev *cdev;
+	spinlock_t lock;
+	struct acc_dev_ref *ref;
+
+	struct usb_ep *ep_in;
+	struct usb_ep *ep_out;
+
+	/* online indicates state of function_set_alt & function_unbind
+	 * set to 1 when we connect
+	 */
+	int online;
+
+	/* disconnected indicates state of open & release
+	 * Set to 1 when we disconnect.
+	 * Not cleared until our file is closed.
+	 */
+	int disconnected;
+
+	/* strings sent by the host */
+	char manufacturer[ACC_STRING_SIZE];
+	char model[ACC_STRING_SIZE];
+	char description[ACC_STRING_SIZE];
+	char version[ACC_STRING_SIZE];
+	char uri[ACC_STRING_SIZE];
+	char serial[ACC_STRING_SIZE];
+
+	/* for acc_complete_set_string */
+	int string_index;
+
+	/* set to 1 if we have a pending start request */
+	int start_requested;
+
+	int audio_mode;
+
+	/* synchronize access to our device file */
+	atomic_t open_excl;
+
+	struct list_head tx_idle;
+
+	wait_queue_head_t read_wq;
+	wait_queue_head_t write_wq;
+	struct usb_request *rx_req[RX_REQ_MAX];
+	int rx_done;
+
+	/* delayed work for handling ACCESSORY_START */
+	struct delayed_work start_work;
+
+	/* worker for registering and unregistering hid devices */
+	struct work_struct hid_work;
+
+	/* list of active HID devices */
+	struct list_head	hid_list;
+
+	/* list of new HID devices to register */
+	struct list_head	new_hid_list;
+
+	/* list of dead HID devices to unregister */
+	struct list_head	dead_hid_list;
+};
+
+static struct usb_interface_descriptor acc_interface_desc = {
+	.bLength                = USB_DT_INTERFACE_SIZE,
+	.bDescriptorType        = USB_DT_INTERFACE,
+	.bInterfaceNumber       = 0,
+	.bNumEndpoints          = 2,
+	.bInterfaceClass        = USB_CLASS_VENDOR_SPEC,
+	.bInterfaceSubClass     = USB_SUBCLASS_VENDOR_SPEC,
+	.bInterfaceProtocol     = 0,
+};
+
+static struct usb_endpoint_descriptor acc_highspeed_in_desc = {
+	.bLength                = USB_DT_ENDPOINT_SIZE,
+	.bDescriptorType        = USB_DT_ENDPOINT,
+	.bEndpointAddress       = USB_DIR_IN,
+	.bmAttributes           = USB_ENDPOINT_XFER_BULK,
+	.wMaxPacketSize         = __constant_cpu_to_le16(512),
+};
+
+static struct usb_endpoint_descriptor acc_highspeed_out_desc = {
+	.bLength                = USB_DT_ENDPOINT_SIZE,
+	.bDescriptorType        = USB_DT_ENDPOINT,
+	.bEndpointAddress       = USB_DIR_OUT,
+	.bmAttributes           = USB_ENDPOINT_XFER_BULK,
+	.wMaxPacketSize         = __constant_cpu_to_le16(512),
+};
+
+static struct usb_endpoint_descriptor acc_fullspeed_in_desc = {
+	.bLength                = USB_DT_ENDPOINT_SIZE,
+	.bDescriptorType        = USB_DT_ENDPOINT,
+	.bEndpointAddress       = USB_DIR_IN,
+	.bmAttributes           = USB_ENDPOINT_XFER_BULK,
+};
+
+static struct usb_endpoint_descriptor acc_fullspeed_out_desc = {
+	.bLength                = USB_DT_ENDPOINT_SIZE,
+	.bDescriptorType        = USB_DT_ENDPOINT,
+	.bEndpointAddress       = USB_DIR_OUT,
+	.bmAttributes           = USB_ENDPOINT_XFER_BULK,
+};
+
+static struct usb_descriptor_header *fs_acc_descs[] = {
+	(struct usb_descriptor_header *) &acc_interface_desc,
+	(struct usb_descriptor_header *) &acc_fullspeed_in_desc,
+	(struct usb_descriptor_header *) &acc_fullspeed_out_desc,
+	NULL,
+};
+
+static struct usb_descriptor_header *hs_acc_descs[] = {
+	(struct usb_descriptor_header *) &acc_interface_desc,
+	(struct usb_descriptor_header *) &acc_highspeed_in_desc,
+	(struct usb_descriptor_header *) &acc_highspeed_out_desc,
+	NULL,
+};
+
+static struct usb_string acc_string_defs[] = {
+	[INTERFACE_STRING_INDEX].s	= "Android Accessory Interface",
+	{  },	/* end of list */
+};
+
+static struct usb_gadget_strings acc_string_table = {
+	.language		= 0x0409,	/* en-US */
+	.strings		= acc_string_defs,
+};
+
+static struct usb_gadget_strings *acc_strings[] = {
+	&acc_string_table,
+	NULL,
+};
+
+struct acc_dev_ref {
+	struct kref	kref;
+	struct acc_dev	*acc_dev;
+};
+
+static struct acc_dev_ref _acc_dev_ref = {
+	.kref = KREF_INIT(0),
+};
+
+struct acc_instance {
+	struct usb_function_instance func_inst;
+	const char *name;
+};
+
+static struct acc_dev *get_acc_dev(void)
+{
+	struct acc_dev_ref *ref = &_acc_dev_ref;
+
+	return kref_get_unless_zero(&ref->kref) ? ref->acc_dev : NULL;
+}
+
+static void __put_acc_dev(struct kref *kref)
+{
+	struct acc_dev_ref *ref = container_of(kref, struct acc_dev_ref, kref);
+	struct acc_dev *dev = ref->acc_dev;
+
+	/* Cancel any async work */
+	cancel_delayed_work_sync(&dev->start_work);
+	cancel_work_sync(&dev->hid_work);
+
+	ref->acc_dev = NULL;
+	kfree(dev);
+}
+
+static void put_acc_dev(struct acc_dev *dev)
+{
+	struct acc_dev_ref *ref = dev->ref;
+
+	WARN_ON(ref->acc_dev != dev);
+	kref_put(&ref->kref, __put_acc_dev);
+}
+
+static inline struct acc_dev *func_to_dev(struct usb_function *f)
+{
+	return container_of(f, struct acc_dev, function);
+}
+
+static struct usb_request *acc_request_new(struct usb_ep *ep, int buffer_size)
+{
+	struct usb_request *req = usb_ep_alloc_request(ep, GFP_KERNEL);
+
+	if (!req)
+		return NULL;
+
+	/* now allocate buffers for the requests */
+	req->buf = kmalloc(buffer_size, GFP_KERNEL);
+	if (!req->buf) {
+		usb_ep_free_request(ep, req);
+		return NULL;
+	}
+
+	return req;
+}
+
+static void acc_request_free(struct usb_request *req, struct usb_ep *ep)
+{
+	if (req) {
+		kfree(req->buf);
+		usb_ep_free_request(ep, req);
+	}
+}
+
+/* add a request to the tail of a list */
+static void req_put(struct acc_dev *dev, struct list_head *head,
+		struct usb_request *req)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	list_add_tail(&req->list, head);
+	spin_unlock_irqrestore(&dev->lock, flags);
+}
+
+/* remove a request from the head of a list */
+static struct usb_request *req_get(struct acc_dev *dev, struct list_head *head)
+{
+	unsigned long flags;
+	struct usb_request *req;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (list_empty(head)) {
+		req = 0;
+	} else {
+		req = list_first_entry(head, struct usb_request, list);
+		list_del(&req->list);
+	}
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return req;
+}
+
+static void acc_set_disconnected(struct acc_dev *dev)
+{
+	dev->disconnected = 1;
+}
+
+static void acc_complete_in(struct usb_ep *ep, struct usb_request *req)
+{
+	struct acc_dev *dev = get_acc_dev();
+
+	if (!dev)
+		return;
+
+	if (req->status == -ESHUTDOWN) {
+		pr_debug("acc_complete_in set disconnected");
+		acc_set_disconnected(dev);
+	}
+
+	req_put(dev, &dev->tx_idle, req);
+
+	wake_up(&dev->write_wq);
+	put_acc_dev(dev);
+}
+
+static void acc_complete_out(struct usb_ep *ep, struct usb_request *req)
+{
+	struct acc_dev *dev = get_acc_dev();
+
+	if (!dev)
+		return;
+
+	dev->rx_done = 1;
+	if (req->status == -ESHUTDOWN) {
+		pr_debug("acc_complete_out set disconnected");
+		acc_set_disconnected(dev);
+	}
+
+	wake_up(&dev->read_wq);
+	put_acc_dev(dev);
+}
+
+static void acc_complete_set_string(struct usb_ep *ep, struct usb_request *req)
+{
+	struct acc_dev	*dev = ep->driver_data;
+	char *string_dest = NULL;
+	int length = req->actual;
+
+	if (req->status != 0) {
+		pr_err("acc_complete_set_string, err %d\n", req->status);
+		return;
+	}
+
+	switch (dev->string_index) {
+	case ACCESSORY_STRING_MANUFACTURER:
+		string_dest = dev->manufacturer;
+		break;
+	case ACCESSORY_STRING_MODEL:
+		string_dest = dev->model;
+		break;
+	case ACCESSORY_STRING_DESCRIPTION:
+		string_dest = dev->description;
+		break;
+	case ACCESSORY_STRING_VERSION:
+		string_dest = dev->version;
+		break;
+	case ACCESSORY_STRING_URI:
+		string_dest = dev->uri;
+		break;
+	case ACCESSORY_STRING_SERIAL:
+		string_dest = dev->serial;
+		break;
+	}
+	if (string_dest) {
+		unsigned long flags;
+
+		if (length >= ACC_STRING_SIZE)
+			length = ACC_STRING_SIZE - 1;
+
+		spin_lock_irqsave(&dev->lock, flags);
+		memcpy(string_dest, req->buf, length);
+		/* ensure zero termination */
+		string_dest[length] = 0;
+		spin_unlock_irqrestore(&dev->lock, flags);
+	} else {
+		pr_err("unknown accessory string index %d\n",
+			dev->string_index);
+	}
+}
+
+static void acc_complete_set_hid_report_desc(struct usb_ep *ep,
+		struct usb_request *req)
+{
+	struct acc_hid_dev *hid = req->context;
+	struct acc_dev *dev = hid->dev;
+	int length = req->actual;
+
+	if (req->status != 0) {
+		pr_err("acc_complete_set_hid_report_desc, err %d\n",
+			req->status);
+		return;
+	}
+
+	memcpy(hid->report_desc + hid->report_desc_offset, req->buf, length);
+	hid->report_desc_offset += length;
+	if (hid->report_desc_offset == hid->report_desc_len) {
+		/* After we have received the entire report descriptor
+		 * we schedule work to initialize the HID device
+		 */
+		schedule_work(&dev->hid_work);
+	}
+}
+
+static void acc_complete_send_hid_event(struct usb_ep *ep,
+		struct usb_request *req)
+{
+	struct acc_hid_dev *hid = req->context;
+	int length = req->actual;
+
+	if (req->status != 0) {
+		pr_err("acc_complete_send_hid_event, err %d\n", req->status);
+		return;
+	}
+
+	hid_report_raw_event(hid->hid, HID_INPUT_REPORT, req->buf, length, 1);
+}
+
+static int acc_hid_parse(struct hid_device *hid)
+{
+	struct acc_hid_dev *hdev = hid->driver_data;
+
+	hid_parse_report(hid, hdev->report_desc, hdev->report_desc_len);
+	return 0;
+}
+
+static int acc_hid_start(struct hid_device *hid)
+{
+	return 0;
+}
+
+static void acc_hid_stop(struct hid_device *hid)
+{
+}
+
+static int acc_hid_open(struct hid_device *hid)
+{
+	return 0;
+}
+
+static void acc_hid_close(struct hid_device *hid)
+{
+}
+
+static int acc_hid_raw_request(struct hid_device *hid, unsigned char reportnum,
+	__u8 *buf, size_t len, unsigned char rtype, int reqtype)
+{
+	return 0;
+}
+
+static struct hid_ll_driver acc_hid_ll_driver = {
+	.parse = acc_hid_parse,
+	.start = acc_hid_start,
+	.stop = acc_hid_stop,
+	.open = acc_hid_open,
+	.close = acc_hid_close,
+	.raw_request = acc_hid_raw_request,
+};
+
+static struct acc_hid_dev *acc_hid_new(struct acc_dev *dev,
+		int id, int desc_len)
+{
+	struct acc_hid_dev *hdev;
+
+	hdev = kzalloc(sizeof(*hdev), GFP_ATOMIC);
+	if (!hdev)
+		return NULL;
+	hdev->report_desc = kzalloc(desc_len, GFP_ATOMIC);
+	if (!hdev->report_desc) {
+		kfree(hdev);
+		return NULL;
+	}
+	hdev->dev = dev;
+	hdev->id = id;
+	hdev->report_desc_len = desc_len;
+
+	return hdev;
+}
+
+static struct acc_hid_dev *acc_hid_get(struct list_head *list, int id)
+{
+	struct acc_hid_dev *hid;
+
+	list_for_each_entry(hid, list, list) {
+		if (hid->id == id)
+			return hid;
+	}
+	return NULL;
+}
+
+static int acc_register_hid(struct acc_dev *dev, int id, int desc_length)
+{
+	struct acc_hid_dev *hid;
+	unsigned long flags;
+
+	/* report descriptor length must be > 0 */
+	if (desc_length <= 0)
+		return -EINVAL;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	/* replace HID if one already exists with this ID */
+	hid = acc_hid_get(&dev->hid_list, id);
+	if (!hid)
+		hid = acc_hid_get(&dev->new_hid_list, id);
+	if (hid)
+		list_move(&hid->list, &dev->dead_hid_list);
+
+	hid = acc_hid_new(dev, id, desc_length);
+	if (!hid) {
+		spin_unlock_irqrestore(&dev->lock, flags);
+		return -ENOMEM;
+	}
+
+	list_add(&hid->list, &dev->new_hid_list);
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	/* schedule work to register the HID device */
+	schedule_work(&dev->hid_work);
+	return 0;
+}
+
+static int acc_unregister_hid(struct acc_dev *dev, int id)
+{
+	struct acc_hid_dev *hid;
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	hid = acc_hid_get(&dev->hid_list, id);
+	if (!hid)
+		hid = acc_hid_get(&dev->new_hid_list, id);
+	if (!hid) {
+		spin_unlock_irqrestore(&dev->lock, flags);
+		return -EINVAL;
+	}
+
+	list_move(&hid->list, &dev->dead_hid_list);
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	schedule_work(&dev->hid_work);
+	return 0;
+}
+
+static int create_bulk_endpoints(struct acc_dev *dev,
+				struct usb_endpoint_descriptor *in_desc,
+				struct usb_endpoint_descriptor *out_desc)
+{
+	struct usb_composite_dev *cdev = dev->cdev;
+	struct usb_request *req;
+	struct usb_ep *ep;
+	int i;
+
+	DBG(cdev, "create_bulk_endpoints dev: %p\n", dev);
+
+	ep = usb_ep_autoconfig(cdev->gadget, in_desc);
+	if (!ep) {
+		DBG(cdev, "usb_ep_autoconfig for ep_in failed\n");
+		return -ENODEV;
+	}
+	DBG(cdev, "usb_ep_autoconfig for ep_in got %s\n", ep->name);
+	ep->driver_data = dev;		/* claim the endpoint */
+	dev->ep_in = ep;
+
+	ep = usb_ep_autoconfig(cdev->gadget, out_desc);
+	if (!ep) {
+		DBG(cdev, "usb_ep_autoconfig for ep_out failed\n");
+		return -ENODEV;
+	}
+	DBG(cdev, "usb_ep_autoconfig for ep_out got %s\n", ep->name);
+	ep->driver_data = dev;		/* claim the endpoint */
+	dev->ep_out = ep;
+
+	/* now allocate requests for our endpoints */
+	for (i = 0; i < TX_REQ_MAX; i++) {
+		req = acc_request_new(dev->ep_in, BULK_BUFFER_SIZE);
+		if (!req)
+			goto fail;
+		req->complete = acc_complete_in;
+		req_put(dev, &dev->tx_idle, req);
+	}
+	for (i = 0; i < RX_REQ_MAX; i++) {
+		req = acc_request_new(dev->ep_out, BULK_BUFFER_SIZE);
+		if (!req)
+			goto fail;
+		req->complete = acc_complete_out;
+		dev->rx_req[i] = req;
+	}
+
+	return 0;
+
+fail:
+	pr_err("acc_bind() could not allocate requests\n");
+	while ((req = req_get(dev, &dev->tx_idle)))
+		acc_request_free(req, dev->ep_in);
+	for (i = 0; i < RX_REQ_MAX; i++)
+		acc_request_free(dev->rx_req[i], dev->ep_out);
+	return -1;
+}
+
+static ssize_t acc_read(struct file *fp, char __user *buf,
+	size_t count, loff_t *pos)
+{
+	struct acc_dev *dev = fp->private_data;
+	struct usb_request *req;
+	ssize_t r = count;
+	ssize_t data_length;
+	unsigned xfer;
+	int ret = 0;
+
+	pr_debug("acc_read(%zu)\n", count);
+
+	if (dev->disconnected) {
+		pr_debug("acc_read disconnected");
+		return -ENODEV;
+	}
+
+	if (count > BULK_BUFFER_SIZE)
+		count = BULK_BUFFER_SIZE;
+
+	/* we will block until we're online */
+	pr_debug("acc_read: waiting for online\n");
+	ret = wait_event_interruptible(dev->read_wq, dev->online);
+	if (ret < 0) {
+		r = ret;
+		goto done;
+	}
+
+	/*
+	 * Calculate the data length by considering termination character.
+	 * Then compansite the difference of rounding up to
+	 * integer multiple of maxpacket size.
+	 */
+	data_length = count;
+	data_length += dev->ep_out->maxpacket - 1;
+	data_length -= data_length % dev->ep_out->maxpacket;
+
+	if (dev->rx_done) {
+		// last req cancelled. try to get it.
+		req = dev->rx_req[0];
+		goto copy_data;
+	}
+
+requeue_req:
+	/* queue a request */
+	req = dev->rx_req[0];
+	req->length = data_length;
+	dev->rx_done = 0;
+	ret = usb_ep_queue(dev->ep_out, req, GFP_KERNEL);
+	if (ret < 0) {
+		r = -EIO;
+		goto done;
+	} else {
+		pr_debug("rx %p queue\n", req);
+	}
+
+	/* wait for a request to complete */
+	ret = wait_event_interruptible(dev->read_wq, dev->rx_done);
+	if (ret < 0) {
+		r = ret;
+		ret = usb_ep_dequeue(dev->ep_out, req);
+		if (ret != 0) {
+			// cancel failed. There can be a data already received.
+			// it will be retrieved in the next read.
+			pr_debug("acc_read: cancelling failed %d", ret);
+		}
+		goto done;
+	}
+
+copy_data:
+	dev->rx_done = 0;
+	if (dev->online) {
+		/* If we got a 0-len packet, throw it back and try again. */
+		if (req->actual == 0)
+			goto requeue_req;
+
+		pr_debug("rx %p %u\n", req, req->actual);
+		xfer = (req->actual < count) ? req->actual : count;
+		r = xfer;
+		if (copy_to_user(buf, req->buf, xfer))
+			r = -EFAULT;
+	} else
+		r = -EIO;
+
+done:
+	pr_debug("acc_read returning %zd\n", r);
+	return r;
+}
+
+static ssize_t acc_write(struct file *fp, const char __user *buf,
+	size_t count, loff_t *pos)
+{
+	struct acc_dev *dev = fp->private_data;
+	struct usb_request *req = 0;
+	ssize_t r = count;
+	unsigned xfer;
+	int ret;
+
+	pr_debug("acc_write(%zu)\n", count);
+
+	if (!dev->online || dev->disconnected) {
+		pr_debug("acc_write disconnected or not online");
+		return -ENODEV;
+	}
+
+	while (count > 0) {
+		if (!dev->online) {
+			pr_debug("acc_write dev->error\n");
+			r = -EIO;
+			break;
+		}
+
+		/* get an idle tx request to use */
+		req = 0;
+		ret = wait_event_interruptible(dev->write_wq,
+			((req = req_get(dev, &dev->tx_idle)) || !dev->online));
+		if (!req) {
+			r = ret;
+			break;
+		}
+
+		if (count > BULK_BUFFER_SIZE) {
+			xfer = BULK_BUFFER_SIZE;
+			/* ZLP, They will be more TX requests so not yet. */
+			req->zero = 0;
+		} else {
+			xfer = count;
+			/* If the data length is a multple of the
+			 * maxpacket size then send a zero length packet(ZLP).
+			*/
+			req->zero = ((xfer % dev->ep_in->maxpacket) == 0);
+		}
+		if (copy_from_user(req->buf, buf, xfer)) {
+			r = -EFAULT;
+			break;
+		}
+
+		req->length = xfer;
+		ret = usb_ep_queue(dev->ep_in, req, GFP_KERNEL);
+		if (ret < 0) {
+			pr_debug("acc_write: xfer error %d\n", ret);
+			r = -EIO;
+			break;
+		}
+
+		buf += xfer;
+		count -= xfer;
+
+		/* zero this so we don't try to free it on error exit */
+		req = 0;
+	}
+
+	if (req)
+		req_put(dev, &dev->tx_idle, req);
+
+	pr_debug("acc_write returning %zd\n", r);
+	return r;
+}
+
+static long acc_ioctl(struct file *fp, unsigned code, unsigned long value)
+{
+	struct acc_dev *dev = fp->private_data;
+	char *src = NULL;
+	int ret;
+
+	switch (code) {
+	case ACCESSORY_GET_STRING_MANUFACTURER:
+		src = dev->manufacturer;
+		break;
+	case ACCESSORY_GET_STRING_MODEL:
+		src = dev->model;
+		break;
+	case ACCESSORY_GET_STRING_DESCRIPTION:
+		src = dev->description;
+		break;
+	case ACCESSORY_GET_STRING_VERSION:
+		src = dev->version;
+		break;
+	case ACCESSORY_GET_STRING_URI:
+		src = dev->uri;
+		break;
+	case ACCESSORY_GET_STRING_SERIAL:
+		src = dev->serial;
+		break;
+	case ACCESSORY_IS_START_REQUESTED:
+		return dev->start_requested;
+	case ACCESSORY_GET_AUDIO_MODE:
+		return dev->audio_mode;
+	}
+	if (!src)
+		return -EINVAL;
+
+	ret = strlen(src) + 1;
+	if (copy_to_user((void __user *)value, src, ret))
+		ret = -EFAULT;
+	return ret;
+}
+
+static int acc_open(struct inode *ip, struct file *fp)
+{
+	struct acc_dev *dev = get_acc_dev();
+
+	if (!dev)
+		return -ENODEV;
+
+	if (atomic_xchg(&dev->open_excl, 1)) {
+		put_acc_dev(dev);
+		return -EBUSY;
+	}
+
+	dev->disconnected = 0;
+	fp->private_data = dev;
+	return 0;
+}
+
+static int acc_release(struct inode *ip, struct file *fp)
+{
+	struct acc_dev *dev = fp->private_data;
+
+	if (!dev)
+		return -ENOENT;
+
+	/* indicate that we are disconnected
+	 * still could be online so don't touch online flag
+	 */
+	dev->disconnected = 1;
+
+	fp->private_data = NULL;
+	WARN_ON(!atomic_xchg(&dev->open_excl, 0));
+	put_acc_dev(dev);
+	return 0;
+}
+
+/* file operations for /dev/usb_accessory */
+static const struct file_operations acc_fops = {
+	.owner = THIS_MODULE,
+	.read = acc_read,
+	.write = acc_write,
+	.unlocked_ioctl = acc_ioctl,
+	.open = acc_open,
+	.release = acc_release,
+};
+
+static int acc_hid_probe(struct hid_device *hdev,
+		const struct hid_device_id *id)
+{
+	int ret;
+
+	ret = hid_parse(hdev);
+	if (ret)
+		return ret;
+	return hid_hw_start(hdev, HID_CONNECT_DEFAULT);
+}
+
+static struct miscdevice acc_device = {
+	.minor = MISC_DYNAMIC_MINOR,
+	.name = "usb_accessory",
+	.fops = &acc_fops,
+};
+
+static const struct hid_device_id acc_hid_table[] = {
+	{ HID_USB_DEVICE(HID_ANY_ID, HID_ANY_ID) },
+	{ }
+};
+
+static struct hid_driver acc_hid_driver = {
+	.name = "USB accessory",
+	.id_table = acc_hid_table,
+	.probe = acc_hid_probe,
+};
+
+static void acc_complete_setup_noop(struct usb_ep *ep, struct usb_request *req)
+{
+	/*
+	 * Default no-op function when nothing needs to be done for the
+	 * setup request
+	 */
+}
+
+int acc_ctrlrequest(struct usb_composite_dev *cdev,
+				const struct usb_ctrlrequest *ctrl)
+{
+	struct acc_dev	*dev = get_acc_dev();
+	int	value = -EOPNOTSUPP;
+	struct acc_hid_dev *hid;
+	int offset;
+	u8 b_requestType = ctrl->bRequestType;
+	u8 b_request = ctrl->bRequest;
+	u16	w_index = le16_to_cpu(ctrl->wIndex);
+	u16	w_value = le16_to_cpu(ctrl->wValue);
+	u16	w_length = le16_to_cpu(ctrl->wLength);
+	unsigned long flags;
+
+	/*
+	 * If instance is not created which is the case in power off charging
+	 * mode, dev will be NULL. Hence return error if it is the case.
+	 */
+	if (!dev)
+		return -ENODEV;
+
+	if (b_requestType == (USB_DIR_OUT | USB_TYPE_VENDOR)) {
+		if (b_request == ACCESSORY_START) {
+			dev->start_requested = 1;
+			schedule_delayed_work(
+				&dev->start_work, msecs_to_jiffies(10));
+			value = 0;
+			cdev->req->complete = acc_complete_setup_noop;
+		} else if (b_request == ACCESSORY_SEND_STRING) {
+			dev->string_index = w_index;
+			cdev->gadget->ep0->driver_data = dev;
+			cdev->req->complete = acc_complete_set_string;
+			value = w_length;
+		} else if (b_request == ACCESSORY_SET_AUDIO_MODE &&
+				w_index == 0 && w_length == 0) {
+			dev->audio_mode = w_value;
+			cdev->req->complete = acc_complete_setup_noop;
+			value = 0;
+		} else if (b_request == ACCESSORY_REGISTER_HID) {
+			cdev->req->complete = acc_complete_setup_noop;
+			value = acc_register_hid(dev, w_value, w_index);
+		} else if (b_request == ACCESSORY_UNREGISTER_HID) {
+			cdev->req->complete = acc_complete_setup_noop;
+			value = acc_unregister_hid(dev, w_value);
+		} else if (b_request == ACCESSORY_SET_HID_REPORT_DESC) {
+			spin_lock_irqsave(&dev->lock, flags);
+			hid = acc_hid_get(&dev->new_hid_list, w_value);
+			spin_unlock_irqrestore(&dev->lock, flags);
+			if (!hid) {
+				value = -EINVAL;
+				goto err;
+			}
+			offset = w_index;
+			if (offset != hid->report_desc_offset
+				|| offset + w_length > hid->report_desc_len) {
+				value = -EINVAL;
+				goto err;
+			}
+			cdev->req->context = hid;
+			cdev->req->complete = acc_complete_set_hid_report_desc;
+			value = w_length;
+		} else if (b_request == ACCESSORY_SEND_HID_EVENT) {
+			spin_lock_irqsave(&dev->lock, flags);
+			hid = acc_hid_get(&dev->hid_list, w_value);
+			spin_unlock_irqrestore(&dev->lock, flags);
+			if (!hid) {
+				value = -EINVAL;
+				goto err;
+			}
+			cdev->req->context = hid;
+			cdev->req->complete = acc_complete_send_hid_event;
+			value = w_length;
+		}
+	} else if (b_requestType == (USB_DIR_IN | USB_TYPE_VENDOR)) {
+		if (b_request == ACCESSORY_GET_PROTOCOL) {
+			*((u16 *)cdev->req->buf) = PROTOCOL_VERSION;
+			value = sizeof(u16);
+			cdev->req->complete = acc_complete_setup_noop;
+			/* clear any string left over from a previous session */
+			memset(dev->manufacturer, 0, sizeof(dev->manufacturer));
+			memset(dev->model, 0, sizeof(dev->model));
+			memset(dev->description, 0, sizeof(dev->description));
+			memset(dev->version, 0, sizeof(dev->version));
+			memset(dev->uri, 0, sizeof(dev->uri));
+			memset(dev->serial, 0, sizeof(dev->serial));
+			dev->start_requested = 0;
+			dev->audio_mode = 0;
+		}
+	}
+
+	if (value >= 0) {
+		cdev->req->zero = 0;
+		cdev->req->length = value;
+		value = usb_ep_queue(cdev->gadget->ep0, cdev->req, GFP_ATOMIC);
+		if (value < 0)
+			ERROR(cdev, "%s setup response queue error\n",
+				__func__);
+	}
+
+err:
+	if (value == -EOPNOTSUPP)
+		VDBG(cdev,
+			"unknown class-specific control req "
+			"%02x.%02x v%04x i%04x l%u\n",
+			ctrl->bRequestType, ctrl->bRequest,
+			w_value, w_index, w_length);
+	put_acc_dev(dev);
+	return value;
+}
+EXPORT_SYMBOL_GPL(acc_ctrlrequest);
+
+static int
+__acc_function_bind(struct usb_configuration *c,
+			struct usb_function *f, bool configfs)
+{
+	struct usb_composite_dev *cdev = c->cdev;
+	struct acc_dev	*dev = func_to_dev(f);
+	int			id;
+	int			ret;
+
+	DBG(cdev, "acc_function_bind dev: %p\n", dev);
+
+	if (configfs) {
+		if (acc_string_defs[INTERFACE_STRING_INDEX].id == 0) {
+			ret = usb_string_id(c->cdev);
+			if (ret < 0)
+				return ret;
+			acc_string_defs[INTERFACE_STRING_INDEX].id = ret;
+			acc_interface_desc.iInterface = ret;
+		}
+		dev->cdev = c->cdev;
+	}
+	ret = hid_register_driver(&acc_hid_driver);
+	if (ret)
+		return ret;
+
+	dev->start_requested = 0;
+
+	/* allocate interface ID(s) */
+	id = usb_interface_id(c, f);
+	if (id < 0)
+		return id;
+	acc_interface_desc.bInterfaceNumber = id;
+
+	/* allocate endpoints */
+	ret = create_bulk_endpoints(dev, &acc_fullspeed_in_desc,
+			&acc_fullspeed_out_desc);
+	if (ret)
+		return ret;
+
+	/* support high speed hardware */
+	if (gadget_is_dualspeed(c->cdev->gadget)) {
+		acc_highspeed_in_desc.bEndpointAddress =
+			acc_fullspeed_in_desc.bEndpointAddress;
+		acc_highspeed_out_desc.bEndpointAddress =
+			acc_fullspeed_out_desc.bEndpointAddress;
+	}
+
+	DBG(cdev, "%s speed %s: IN/%s, OUT/%s\n",
+			gadget_is_dualspeed(c->cdev->gadget) ? "dual" : "full",
+			f->name, dev->ep_in->name, dev->ep_out->name);
+	return 0;
+}
+
+static int
+acc_function_bind_configfs(struct usb_configuration *c,
+			struct usb_function *f) {
+	return __acc_function_bind(c, f, true);
+}
+
+static void
+kill_all_hid_devices(struct acc_dev *dev)
+{
+	struct acc_hid_dev *hid;
+	struct list_head *entry, *temp;
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	list_for_each_safe(entry, temp, &dev->hid_list) {
+		hid = list_entry(entry, struct acc_hid_dev, list);
+		list_del(&hid->list);
+		list_add(&hid->list, &dev->dead_hid_list);
+	}
+	list_for_each_safe(entry, temp, &dev->new_hid_list) {
+		hid = list_entry(entry, struct acc_hid_dev, list);
+		list_del(&hid->list);
+		list_add(&hid->list, &dev->dead_hid_list);
+	}
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	schedule_work(&dev->hid_work);
+}
+
+static void
+acc_hid_unbind(struct acc_dev *dev)
+{
+	hid_unregister_driver(&acc_hid_driver);
+	kill_all_hid_devices(dev);
+}
+
+static void
+acc_function_unbind(struct usb_configuration *c, struct usb_function *f)
+{
+	struct acc_dev	*dev = func_to_dev(f);
+	struct usb_request *req;
+	int i;
+
+	dev->online = 0;		/* clear online flag */
+	wake_up(&dev->read_wq);		/* unblock reads on closure */
+	wake_up(&dev->write_wq);	/* likewise for writes */
+
+	while ((req = req_get(dev, &dev->tx_idle)))
+		acc_request_free(req, dev->ep_in);
+	for (i = 0; i < RX_REQ_MAX; i++)
+		acc_request_free(dev->rx_req[i], dev->ep_out);
+
+	acc_hid_unbind(dev);
+}
+
+static void acc_start_work(struct work_struct *data)
+{
+	char *envp[2] = { "ACCESSORY=START", NULL };
+
+	kobject_uevent_env(&acc_device.this_device->kobj, KOBJ_CHANGE, envp);
+}
+
+static int acc_hid_init(struct acc_hid_dev *hdev)
+{
+	struct hid_device *hid;
+	int ret;
+
+	hid = hid_allocate_device();
+	if (IS_ERR(hid))
+		return PTR_ERR(hid);
+
+	hid->ll_driver = &acc_hid_ll_driver;
+	hid->dev.parent = acc_device.this_device;
+
+	hid->bus = BUS_USB;
+	hid->vendor = HID_ANY_ID;
+	hid->product = HID_ANY_ID;
+	hid->driver_data = hdev;
+	ret = hid_add_device(hid);
+	if (ret) {
+		pr_err("can't add hid device: %d\n", ret);
+		hid_destroy_device(hid);
+		return ret;
+	}
+
+	hdev->hid = hid;
+	return 0;
+}
+
+static void acc_hid_delete(struct acc_hid_dev *hid)
+{
+	kfree(hid->report_desc);
+	kfree(hid);
+}
+
+static void acc_hid_work(struct work_struct *data)
+{
+	struct acc_dev *dev = get_acc_dev();
+	struct list_head	*entry, *temp;
+	struct acc_hid_dev *hid;
+	struct list_head	new_list, dead_list;
+	unsigned long flags;
+
+	if (!dev)
+		return;
+
+	INIT_LIST_HEAD(&new_list);
+
+	spin_lock_irqsave(&dev->lock, flags);
+
+	/* copy hids that are ready for initialization to new_list */
+	list_for_each_safe(entry, temp, &dev->new_hid_list) {
+		hid = list_entry(entry, struct acc_hid_dev, list);
+		if (hid->report_desc_offset == hid->report_desc_len)
+			list_move(&hid->list, &new_list);
+	}
+
+	if (list_empty(&dev->dead_hid_list)) {
+		INIT_LIST_HEAD(&dead_list);
+	} else {
+		/* move all of dev->dead_hid_list to dead_list */
+		dead_list.prev = dev->dead_hid_list.prev;
+		dead_list.next = dev->dead_hid_list.next;
+		dead_list.next->prev = &dead_list;
+		dead_list.prev->next = &dead_list;
+		INIT_LIST_HEAD(&dev->dead_hid_list);
+	}
+
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	/* register new HID devices */
+	list_for_each_safe(entry, temp, &new_list) {
+		hid = list_entry(entry, struct acc_hid_dev, list);
+		if (acc_hid_init(hid)) {
+			pr_err("can't add HID device %p\n", hid);
+			acc_hid_delete(hid);
+		} else {
+			spin_lock_irqsave(&dev->lock, flags);
+			list_move(&hid->list, &dev->hid_list);
+			spin_unlock_irqrestore(&dev->lock, flags);
+		}
+	}
+
+	/* remove dead HID devices */
+	list_for_each_safe(entry, temp, &dead_list) {
+		hid = list_entry(entry, struct acc_hid_dev, list);
+		list_del(&hid->list);
+		if (hid->hid)
+			hid_destroy_device(hid->hid);
+		acc_hid_delete(hid);
+	}
+
+	put_acc_dev(dev);
+}
+
+static int acc_function_set_alt(struct usb_function *f,
+		unsigned intf, unsigned alt)
+{
+	struct acc_dev	*dev = func_to_dev(f);
+	struct usb_composite_dev *cdev = f->config->cdev;
+	int ret;
+
+	DBG(cdev, "acc_function_set_alt intf: %d alt: %d\n", intf, alt);
+
+	ret = config_ep_by_speed(cdev->gadget, f, dev->ep_in);
+	if (ret)
+		return ret;
+
+	ret = usb_ep_enable(dev->ep_in);
+	if (ret)
+		return ret;
+
+	ret = config_ep_by_speed(cdev->gadget, f, dev->ep_out);
+	if (ret)
+		return ret;
+
+	ret = usb_ep_enable(dev->ep_out);
+	if (ret) {
+		usb_ep_disable(dev->ep_in);
+		return ret;
+	}
+
+	dev->online = 1;
+	dev->disconnected = 0; /* if online then not disconnected */
+
+	/* readers may be blocked waiting for us to go online */
+	wake_up(&dev->read_wq);
+	return 0;
+}
+
+static void acc_function_disable(struct usb_function *f)
+{
+	struct acc_dev	*dev = func_to_dev(f);
+	struct usb_composite_dev	*cdev = dev->cdev;
+
+	DBG(cdev, "acc_function_disable\n");
+	acc_set_disconnected(dev); /* this now only sets disconnected */
+	dev->online = 0; /* so now need to clear online flag here too */
+	usb_ep_disable(dev->ep_in);
+	usb_ep_disable(dev->ep_out);
+
+	/* readers may be blocked waiting for us to go online */
+	wake_up(&dev->read_wq);
+
+	VDBG(cdev, "%s disabled\n", dev->function.name);
+}
+
+static int acc_setup(void)
+{
+	struct acc_dev_ref *ref = &_acc_dev_ref;
+	struct acc_dev *dev;
+	int ret;
+
+	if (kref_read(&ref->kref))
+		return -EBUSY;
+
+	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	if (!dev)
+		return -ENOMEM;
+
+	spin_lock_init(&dev->lock);
+	init_waitqueue_head(&dev->read_wq);
+	init_waitqueue_head(&dev->write_wq);
+	atomic_set(&dev->open_excl, 0);
+	INIT_LIST_HEAD(&dev->tx_idle);
+	INIT_LIST_HEAD(&dev->hid_list);
+	INIT_LIST_HEAD(&dev->new_hid_list);
+	INIT_LIST_HEAD(&dev->dead_hid_list);
+	INIT_DELAYED_WORK(&dev->start_work, acc_start_work);
+	INIT_WORK(&dev->hid_work, acc_hid_work);
+
+	dev->ref = ref;
+	if (cmpxchg_relaxed(&ref->acc_dev, NULL, dev)) {
+		ret = -EBUSY;
+		goto err_free_dev;
+	}
+
+	ret = misc_register(&acc_device);
+	if (ret)
+		goto err_zap_ptr;
+
+	kref_init(&ref->kref);
+	return 0;
+
+err_zap_ptr:
+	ref->acc_dev = NULL;
+err_free_dev:
+	kfree(dev);
+	pr_err("USB accessory gadget driver failed to initialize\n");
+	return ret;
+}
+
+void acc_disconnect(void)
+{
+	struct acc_dev *dev = get_acc_dev();
+
+	if (!dev)
+		return;
+
+	/* unregister all HID devices if USB is disconnected */
+	kill_all_hid_devices(dev);
+	put_acc_dev(dev);
+}
+EXPORT_SYMBOL_GPL(acc_disconnect);
+
+static void acc_cleanup(void)
+{
+	struct acc_dev *dev = get_acc_dev();
+
+	misc_deregister(&acc_device);
+	put_acc_dev(dev);
+	put_acc_dev(dev); /* Pairs with kref_init() in acc_setup() */
+}
+static struct acc_instance *to_acc_instance(struct config_item *item)
+{
+	return container_of(to_config_group(item), struct acc_instance,
+		func_inst.group);
+}
+
+static void acc_attr_release(struct config_item *item)
+{
+	struct acc_instance *fi_acc = to_acc_instance(item);
+
+	usb_put_function_instance(&fi_acc->func_inst);
+}
+
+static struct configfs_item_operations acc_item_ops = {
+	.release        = acc_attr_release,
+};
+
+static struct config_item_type acc_func_type = {
+	.ct_item_ops    = &acc_item_ops,
+	.ct_owner       = THIS_MODULE,
+};
+
+static struct acc_instance *to_fi_acc(struct usb_function_instance *fi)
+{
+	return container_of(fi, struct acc_instance, func_inst);
+}
+
+static int acc_set_inst_name(struct usb_function_instance *fi, const char *name)
+{
+	struct acc_instance *fi_acc;
+	char *ptr;
+	int name_len;
+
+	name_len = strlen(name) + 1;
+	if (name_len > MAX_INST_NAME_LEN)
+		return -ENAMETOOLONG;
+
+	ptr = kstrndup(name, name_len, GFP_KERNEL);
+	if (!ptr)
+		return -ENOMEM;
+
+	fi_acc = to_fi_acc(fi);
+	fi_acc->name = ptr;
+	return 0;
+}
+
+static void acc_free_inst(struct usb_function_instance *fi)
+{
+	struct acc_instance *fi_acc;
+
+	fi_acc = to_fi_acc(fi);
+	kfree(fi_acc->name);
+	acc_cleanup();
+}
+
+static struct usb_function_instance *acc_alloc_inst(void)
+{
+	struct acc_instance *fi_acc;
+	int err;
+
+	fi_acc = kzalloc(sizeof(*fi_acc), GFP_KERNEL);
+	if (!fi_acc)
+		return ERR_PTR(-ENOMEM);
+	fi_acc->func_inst.set_inst_name = acc_set_inst_name;
+	fi_acc->func_inst.free_func_inst = acc_free_inst;
+
+	err = acc_setup();
+	if (err) {
+		kfree(fi_acc);
+		return ERR_PTR(err);
+	}
+
+	config_group_init_type_name(&fi_acc->func_inst.group,
+					"", &acc_func_type);
+	return  &fi_acc->func_inst;
+}
+
+static void acc_free(struct usb_function *f)
+{
+	struct acc_dev *dev = func_to_dev(f);
+
+	put_acc_dev(dev);
+}
+
+int acc_ctrlrequest_configfs(struct usb_function *f,
+			const struct usb_ctrlrequest *ctrl) {
+	if (f->config != NULL && f->config->cdev != NULL)
+		return acc_ctrlrequest(f->config->cdev, ctrl);
+	else
+		return -1;
+}
+
+static struct usb_function *acc_alloc(struct usb_function_instance *fi)
+{
+	struct acc_dev *dev = get_acc_dev();
+
+	dev->function.name = "accessory";
+	dev->function.strings = acc_strings,
+	dev->function.fs_descriptors = fs_acc_descs;
+	dev->function.hs_descriptors = hs_acc_descs;
+	dev->function.bind = acc_function_bind_configfs;
+	dev->function.unbind = acc_function_unbind;
+	dev->function.set_alt = acc_function_set_alt;
+	dev->function.disable = acc_function_disable;
+	dev->function.free_func = acc_free;
+	dev->function.setup = acc_ctrlrequest_configfs;
+
+	return &dev->function;
+}
+DECLARE_USB_FUNCTION_INIT(accessory, acc_alloc_inst, acc_alloc);
+MODULE_LICENSE("GPL");
diff --git a/drivers/usb/gadget/function/f_audio_source.c b/drivers/usb/gadget/function/f_audio_source.c
new file mode 100644
index 0000000..8124af3
--- /dev/null
+++ b/drivers/usb/gadget/function/f_audio_source.c
@@ -0,0 +1,1071 @@
+/*
+ * Gadget Function Driver for USB audio source device
+ *
+ * Copyright (C) 2012 Google, Inc.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <linux/device.h>
+#include <linux/usb/audio.h>
+#include <linux/wait.h>
+#include <linux/pm_qos.h>
+#include <sound/core.h>
+#include <sound/initval.h>
+#include <sound/pcm.h>
+
+#include <linux/usb.h>
+#include <linux/usb_usual.h>
+#include <linux/usb/ch9.h>
+#include <linux/configfs.h>
+#include <linux/usb/composite.h>
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#define SAMPLE_RATE 44100
+#define FRAMES_PER_MSEC (SAMPLE_RATE / 1000)
+
+#define IN_EP_MAX_PACKET_SIZE 256
+
+/* Number of requests to allocate */
+#define IN_EP_REQ_COUNT 4
+
+#define AUDIO_AC_INTERFACE	0
+#define AUDIO_AS_INTERFACE	1
+#define AUDIO_NUM_INTERFACES	2
+#define MAX_INST_NAME_LEN     40
+
+/* B.3.1  Standard AC Interface Descriptor */
+static struct usb_interface_descriptor ac_interface_desc = {
+	.bLength =		USB_DT_INTERFACE_SIZE,
+	.bDescriptorType =	USB_DT_INTERFACE,
+	.bNumEndpoints =	0,
+	.bInterfaceClass =	USB_CLASS_AUDIO,
+	.bInterfaceSubClass =	USB_SUBCLASS_AUDIOCONTROL,
+};
+
+DECLARE_UAC_AC_HEADER_DESCRIPTOR(2);
+
+#define UAC_DT_AC_HEADER_LENGTH	UAC_DT_AC_HEADER_SIZE(AUDIO_NUM_INTERFACES)
+/* 1 input terminal, 1 output terminal and 1 feature unit */
+#define UAC_DT_TOTAL_LENGTH (UAC_DT_AC_HEADER_LENGTH \
+	+ UAC_DT_INPUT_TERMINAL_SIZE + UAC_DT_OUTPUT_TERMINAL_SIZE \
+	+ UAC_DT_FEATURE_UNIT_SIZE(0))
+/* B.3.2  Class-Specific AC Interface Descriptor */
+static struct uac1_ac_header_descriptor_2 ac_header_desc = {
+	.bLength =		UAC_DT_AC_HEADER_LENGTH,
+	.bDescriptorType =	USB_DT_CS_INTERFACE,
+	.bDescriptorSubtype =	UAC_HEADER,
+	.bcdADC =		__constant_cpu_to_le16(0x0100),
+	.wTotalLength =		__constant_cpu_to_le16(UAC_DT_TOTAL_LENGTH),
+	.bInCollection =	AUDIO_NUM_INTERFACES,
+	.baInterfaceNr = {
+		[0] =		AUDIO_AC_INTERFACE,
+		[1] =		AUDIO_AS_INTERFACE,
+	}
+};
+
+#define INPUT_TERMINAL_ID	1
+static struct uac_input_terminal_descriptor input_terminal_desc = {
+	.bLength =		UAC_DT_INPUT_TERMINAL_SIZE,
+	.bDescriptorType =	USB_DT_CS_INTERFACE,
+	.bDescriptorSubtype =	UAC_INPUT_TERMINAL,
+	.bTerminalID =		INPUT_TERMINAL_ID,
+	.wTerminalType =	UAC_INPUT_TERMINAL_MICROPHONE,
+	.bAssocTerminal =	0,
+	.wChannelConfig =	0x3,
+};
+
+DECLARE_UAC_FEATURE_UNIT_DESCRIPTOR(0);
+
+#define FEATURE_UNIT_ID		2
+static struct uac_feature_unit_descriptor_0 feature_unit_desc = {
+	.bLength		= UAC_DT_FEATURE_UNIT_SIZE(0),
+	.bDescriptorType	= USB_DT_CS_INTERFACE,
+	.bDescriptorSubtype	= UAC_FEATURE_UNIT,
+	.bUnitID		= FEATURE_UNIT_ID,
+	.bSourceID		= INPUT_TERMINAL_ID,
+	.bControlSize		= 2,
+};
+
+#define OUTPUT_TERMINAL_ID	3
+static struct uac1_output_terminal_descriptor output_terminal_desc = {
+	.bLength		= UAC_DT_OUTPUT_TERMINAL_SIZE,
+	.bDescriptorType	= USB_DT_CS_INTERFACE,
+	.bDescriptorSubtype	= UAC_OUTPUT_TERMINAL,
+	.bTerminalID		= OUTPUT_TERMINAL_ID,
+	.wTerminalType		= UAC_TERMINAL_STREAMING,
+	.bAssocTerminal		= FEATURE_UNIT_ID,
+	.bSourceID		= FEATURE_UNIT_ID,
+};
+
+/* B.4.1  Standard AS Interface Descriptor */
+static struct usb_interface_descriptor as_interface_alt_0_desc = {
+	.bLength =		USB_DT_INTERFACE_SIZE,
+	.bDescriptorType =	USB_DT_INTERFACE,
+	.bAlternateSetting =	0,
+	.bNumEndpoints =	0,
+	.bInterfaceClass =	USB_CLASS_AUDIO,
+	.bInterfaceSubClass =	USB_SUBCLASS_AUDIOSTREAMING,
+};
+
+static struct usb_interface_descriptor as_interface_alt_1_desc = {
+	.bLength =		USB_DT_INTERFACE_SIZE,
+	.bDescriptorType =	USB_DT_INTERFACE,
+	.bAlternateSetting =	1,
+	.bNumEndpoints =	1,
+	.bInterfaceClass =	USB_CLASS_AUDIO,
+	.bInterfaceSubClass =	USB_SUBCLASS_AUDIOSTREAMING,
+};
+
+/* B.4.2  Class-Specific AS Interface Descriptor */
+static struct uac1_as_header_descriptor as_header_desc = {
+	.bLength =		UAC_DT_AS_HEADER_SIZE,
+	.bDescriptorType =	USB_DT_CS_INTERFACE,
+	.bDescriptorSubtype =	UAC_AS_GENERAL,
+	.bTerminalLink =	INPUT_TERMINAL_ID,
+	.bDelay =		1,
+	.wFormatTag =		UAC_FORMAT_TYPE_I_PCM,
+};
+
+DECLARE_UAC_FORMAT_TYPE_I_DISCRETE_DESC(1);
+
+static struct uac_format_type_i_discrete_descriptor_1 as_type_i_desc = {
+	.bLength =		UAC_FORMAT_TYPE_I_DISCRETE_DESC_SIZE(1),
+	.bDescriptorType =	USB_DT_CS_INTERFACE,
+	.bDescriptorSubtype =	UAC_FORMAT_TYPE,
+	.bFormatType =		UAC_FORMAT_TYPE_I,
+	.bSubframeSize =	2,
+	.bBitResolution =	16,
+	.bSamFreqType =		1,
+};
+
+/* Standard ISO IN Endpoint Descriptor for highspeed */
+static struct usb_endpoint_descriptor hs_as_in_ep_desc  = {
+	.bLength =		USB_DT_ENDPOINT_AUDIO_SIZE,
+	.bDescriptorType =	USB_DT_ENDPOINT,
+	.bEndpointAddress =	USB_DIR_IN,
+	.bmAttributes =		USB_ENDPOINT_SYNC_SYNC
+				| USB_ENDPOINT_XFER_ISOC,
+	.wMaxPacketSize =	__constant_cpu_to_le16(IN_EP_MAX_PACKET_SIZE),
+	.bInterval =		4, /* poll 1 per millisecond */
+};
+
+/* Standard ISO IN Endpoint Descriptor for highspeed */
+static struct usb_endpoint_descriptor fs_as_in_ep_desc  = {
+	.bLength =		USB_DT_ENDPOINT_AUDIO_SIZE,
+	.bDescriptorType =	USB_DT_ENDPOINT,
+	.bEndpointAddress =	USB_DIR_IN,
+	.bmAttributes =		USB_ENDPOINT_SYNC_SYNC
+				| USB_ENDPOINT_XFER_ISOC,
+	.wMaxPacketSize =	__constant_cpu_to_le16(IN_EP_MAX_PACKET_SIZE),
+	.bInterval =		1, /* poll 1 per millisecond */
+};
+
+/* Class-specific AS ISO OUT Endpoint Descriptor */
+static struct uac_iso_endpoint_descriptor as_iso_in_desc = {
+	.bLength =		UAC_ISO_ENDPOINT_DESC_SIZE,
+	.bDescriptorType =	USB_DT_CS_ENDPOINT,
+	.bDescriptorSubtype =	UAC_EP_GENERAL,
+	.bmAttributes =		1,
+	.bLockDelayUnits =	1,
+	.wLockDelay =		__constant_cpu_to_le16(1),
+};
+
+static struct usb_descriptor_header *hs_audio_desc[] = {
+	(struct usb_descriptor_header *)&ac_interface_desc,
+	(struct usb_descriptor_header *)&ac_header_desc,
+
+	(struct usb_descriptor_header *)&input_terminal_desc,
+	(struct usb_descriptor_header *)&output_terminal_desc,
+	(struct usb_descriptor_header *)&feature_unit_desc,
+
+	(struct usb_descriptor_header *)&as_interface_alt_0_desc,
+	(struct usb_descriptor_header *)&as_interface_alt_1_desc,
+	(struct usb_descriptor_header *)&as_header_desc,
+
+	(struct usb_descriptor_header *)&as_type_i_desc,
+
+	(struct usb_descriptor_header *)&hs_as_in_ep_desc,
+	(struct usb_descriptor_header *)&as_iso_in_desc,
+	NULL,
+};
+
+static struct usb_descriptor_header *fs_audio_desc[] = {
+	(struct usb_descriptor_header *)&ac_interface_desc,
+	(struct usb_descriptor_header *)&ac_header_desc,
+
+	(struct usb_descriptor_header *)&input_terminal_desc,
+	(struct usb_descriptor_header *)&output_terminal_desc,
+	(struct usb_descriptor_header *)&feature_unit_desc,
+
+	(struct usb_descriptor_header *)&as_interface_alt_0_desc,
+	(struct usb_descriptor_header *)&as_interface_alt_1_desc,
+	(struct usb_descriptor_header *)&as_header_desc,
+
+	(struct usb_descriptor_header *)&as_type_i_desc,
+
+	(struct usb_descriptor_header *)&fs_as_in_ep_desc,
+	(struct usb_descriptor_header *)&as_iso_in_desc,
+	NULL,
+};
+
+static struct snd_pcm_hardware audio_hw_info = {
+	.info =			SNDRV_PCM_INFO_MMAP |
+				SNDRV_PCM_INFO_MMAP_VALID |
+				SNDRV_PCM_INFO_BATCH |
+				SNDRV_PCM_INFO_INTERLEAVED |
+				SNDRV_PCM_INFO_BLOCK_TRANSFER,
+
+	.formats		= SNDRV_PCM_FMTBIT_S16_LE,
+	.channels_min		= 2,
+	.channels_max		= 2,
+	.rate_min		= SAMPLE_RATE,
+	.rate_max		= SAMPLE_RATE,
+
+	.buffer_bytes_max =	1024 * 1024,
+	.period_bytes_min =	64,
+	.period_bytes_max =	512 * 1024,
+	.periods_min =		2,
+	.periods_max =		1024,
+};
+
+/*-------------------------------------------------------------------------*/
+
+struct audio_source_config {
+	int	card;
+	int	device;
+};
+
+struct audio_dev {
+	struct usb_function		func;
+	struct snd_card			*card;
+	struct snd_pcm			*pcm;
+	struct snd_pcm_substream *substream;
+
+	struct list_head		idle_reqs;
+	struct usb_ep			*in_ep;
+
+	spinlock_t			lock;
+
+	/* beginning, end and current position in our buffer */
+	void				*buffer_start;
+	void				*buffer_end;
+	void				*buffer_pos;
+
+	/* byte size of a "period" */
+	unsigned int			period;
+	/* bytes sent since last call to snd_pcm_period_elapsed */
+	unsigned int			period_offset;
+	/* time we started playing */
+	ktime_t				start_time;
+	/* number of frames sent since start_time */
+	s64				frames_sent;
+	struct audio_source_config	*config;
+	/* for creating and issuing QoS requests */
+	struct pm_qos_request pm_qos;
+};
+
+static inline struct audio_dev *func_to_audio(struct usb_function *f)
+{
+	return container_of(f, struct audio_dev, func);
+}
+
+/*-------------------------------------------------------------------------*/
+
+struct audio_source_instance {
+	struct usb_function_instance func_inst;
+	const char *name;
+	struct audio_source_config *config;
+	struct device *audio_device;
+};
+
+static void audio_source_attr_release(struct config_item *item);
+
+static struct configfs_item_operations audio_source_item_ops = {
+	.release        = audio_source_attr_release,
+};
+
+static struct config_item_type audio_source_func_type = {
+	.ct_item_ops    = &audio_source_item_ops,
+	.ct_owner       = THIS_MODULE,
+};
+
+static ssize_t audio_source_pcm_show(struct device *dev,
+		struct device_attribute *attr, char *buf);
+
+static DEVICE_ATTR(pcm, S_IRUGO, audio_source_pcm_show, NULL);
+
+static struct device_attribute *audio_source_function_attributes[] = {
+	&dev_attr_pcm,
+	NULL
+};
+
+/*--------------------------------------------------------------------------*/
+
+static struct usb_request *audio_request_new(struct usb_ep *ep, int buffer_size)
+{
+	struct usb_request *req = usb_ep_alloc_request(ep, GFP_KERNEL);
+
+	if (!req)
+		return NULL;
+
+	req->buf = kmalloc(buffer_size, GFP_KERNEL);
+	if (!req->buf) {
+		usb_ep_free_request(ep, req);
+		return NULL;
+	}
+	req->length = buffer_size;
+	return req;
+}
+
+static void audio_request_free(struct usb_request *req, struct usb_ep *ep)
+{
+	if (req) {
+		kfree(req->buf);
+		usb_ep_free_request(ep, req);
+	}
+}
+
+static void audio_req_put(struct audio_dev *audio, struct usb_request *req)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&audio->lock, flags);
+	list_add_tail(&req->list, &audio->idle_reqs);
+	spin_unlock_irqrestore(&audio->lock, flags);
+}
+
+static struct usb_request *audio_req_get(struct audio_dev *audio)
+{
+	unsigned long flags;
+	struct usb_request *req;
+
+	spin_lock_irqsave(&audio->lock, flags);
+	if (list_empty(&audio->idle_reqs)) {
+		req = 0;
+	} else {
+		req = list_first_entry(&audio->idle_reqs, struct usb_request,
+				list);
+		list_del(&req->list);
+	}
+	spin_unlock_irqrestore(&audio->lock, flags);
+	return req;
+}
+
+/* send the appropriate number of packets to match our bitrate */
+static void audio_send(struct audio_dev *audio)
+{
+	struct snd_pcm_runtime *runtime;
+	struct usb_request *req;
+	int length, length1, length2, ret;
+	s64 msecs;
+	s64 frames;
+	ktime_t now;
+
+	/* audio->substream will be null if we have been closed */
+	if (!audio->substream)
+		return;
+	/* audio->buffer_pos will be null if we have been stopped */
+	if (!audio->buffer_pos)
+		return;
+
+	runtime = audio->substream->runtime;
+
+	/* compute number of frames to send */
+	now = ktime_get();
+	msecs = div_s64((ktime_to_ns(now) - ktime_to_ns(audio->start_time)),
+			1000000);
+	frames = div_s64((msecs * SAMPLE_RATE), 1000);
+
+	/* Readjust our frames_sent if we fall too far behind.
+	 * If we get too far behind it is better to drop some frames than
+	 * to keep sending data too fast in an attempt to catch up.
+	 */
+	if (frames - audio->frames_sent > 10 * FRAMES_PER_MSEC)
+		audio->frames_sent = frames - FRAMES_PER_MSEC;
+
+	frames -= audio->frames_sent;
+
+	/* We need to send something to keep the pipeline going */
+	if (frames <= 0)
+		frames = FRAMES_PER_MSEC;
+
+	while (frames > 0) {
+		req = audio_req_get(audio);
+		if (!req)
+			break;
+
+		length = frames_to_bytes(runtime, frames);
+		if (length > IN_EP_MAX_PACKET_SIZE)
+			length = IN_EP_MAX_PACKET_SIZE;
+
+		if (audio->buffer_pos + length > audio->buffer_end)
+			length1 = audio->buffer_end - audio->buffer_pos;
+		else
+			length1 = length;
+		memcpy(req->buf, audio->buffer_pos, length1);
+		if (length1 < length) {
+			/* Wrap around and copy remaining length
+			 * at beginning of buffer.
+			 */
+			length2 = length - length1;
+			memcpy(req->buf + length1, audio->buffer_start,
+					length2);
+			audio->buffer_pos = audio->buffer_start + length2;
+		} else {
+			audio->buffer_pos += length1;
+			if (audio->buffer_pos >= audio->buffer_end)
+				audio->buffer_pos = audio->buffer_start;
+		}
+
+		req->length = length;
+		ret = usb_ep_queue(audio->in_ep, req, GFP_ATOMIC);
+		if (ret < 0) {
+			pr_err("usb_ep_queue failed ret: %d\n", ret);
+			audio_req_put(audio, req);
+			break;
+		}
+
+		frames -= bytes_to_frames(runtime, length);
+		audio->frames_sent += bytes_to_frames(runtime, length);
+	}
+}
+
+static void audio_control_complete(struct usb_ep *ep, struct usb_request *req)
+{
+	/* nothing to do here */
+}
+
+static void audio_data_complete(struct usb_ep *ep, struct usb_request *req)
+{
+	struct audio_dev *audio = req->context;
+
+	pr_debug("audio_data_complete req->status %d req->actual %d\n",
+		req->status, req->actual);
+
+	audio_req_put(audio, req);
+
+	if (!audio->buffer_start || req->status)
+		return;
+
+	audio->period_offset += req->actual;
+	if (audio->period_offset >= audio->period) {
+		snd_pcm_period_elapsed(audio->substream);
+		audio->period_offset = 0;
+	}
+	audio_send(audio);
+}
+
+static int audio_set_endpoint_req(struct usb_function *f,
+		const struct usb_ctrlrequest *ctrl)
+{
+	int value = -EOPNOTSUPP;
+	u16 ep = le16_to_cpu(ctrl->wIndex);
+	u16 len = le16_to_cpu(ctrl->wLength);
+	u16 w_value = le16_to_cpu(ctrl->wValue);
+
+	pr_debug("bRequest 0x%x, w_value 0x%04x, len %d, endpoint %d\n",
+			ctrl->bRequest, w_value, len, ep);
+
+	switch (ctrl->bRequest) {
+	case UAC_SET_CUR:
+	case UAC_SET_MIN:
+	case UAC_SET_MAX:
+	case UAC_SET_RES:
+		value = len;
+		break;
+	default:
+		break;
+	}
+
+	return value;
+}
+
+static int audio_get_endpoint_req(struct usb_function *f,
+		const struct usb_ctrlrequest *ctrl)
+{
+	struct usb_composite_dev *cdev = f->config->cdev;
+	int value = -EOPNOTSUPP;
+	u8 ep = ((le16_to_cpu(ctrl->wIndex) >> 8) & 0xFF);
+	u16 len = le16_to_cpu(ctrl->wLength);
+	u16 w_value = le16_to_cpu(ctrl->wValue);
+	u8 *buf = cdev->req->buf;
+
+	pr_debug("bRequest 0x%x, w_value 0x%04x, len %d, endpoint %d\n",
+			ctrl->bRequest, w_value, len, ep);
+
+	if (w_value == UAC_EP_CS_ATTR_SAMPLE_RATE << 8) {
+		switch (ctrl->bRequest) {
+		case UAC_GET_CUR:
+		case UAC_GET_MIN:
+		case UAC_GET_MAX:
+		case UAC_GET_RES:
+			/* return our sample rate */
+			buf[0] = (u8)SAMPLE_RATE;
+			buf[1] = (u8)(SAMPLE_RATE >> 8);
+			buf[2] = (u8)(SAMPLE_RATE >> 16);
+			value = 3;
+			break;
+		default:
+			break;
+		}
+	}
+
+	return value;
+}
+
+static int
+audio_setup(struct usb_function *f, const struct usb_ctrlrequest *ctrl)
+{
+	struct usb_composite_dev *cdev = f->config->cdev;
+	struct usb_request *req = cdev->req;
+	int value = -EOPNOTSUPP;
+	u16 w_index = le16_to_cpu(ctrl->wIndex);
+	u16 w_value = le16_to_cpu(ctrl->wValue);
+	u16 w_length = le16_to_cpu(ctrl->wLength);
+
+	/* composite driver infrastructure handles everything; interface
+	 * activation uses set_alt().
+	 */
+	switch (ctrl->bRequestType) {
+	case USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_ENDPOINT:
+		value = audio_set_endpoint_req(f, ctrl);
+		break;
+
+	case USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT:
+		value = audio_get_endpoint_req(f, ctrl);
+		break;
+	}
+
+	/* respond with data transfer or status phase? */
+	if (value >= 0) {
+		pr_debug("audio req%02x.%02x v%04x i%04x l%d\n",
+			ctrl->bRequestType, ctrl->bRequest,
+			w_value, w_index, w_length);
+		req->zero = 0;
+		req->length = value;
+		req->complete = audio_control_complete;
+		value = usb_ep_queue(cdev->gadget->ep0, req, GFP_ATOMIC);
+		if (value < 0)
+			pr_err("audio response on err %d\n", value);
+	}
+
+	/* device either stalls (value < 0) or reports success */
+	return value;
+}
+
+static int audio_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
+{
+	struct audio_dev *audio = func_to_audio(f);
+	struct usb_composite_dev *cdev = f->config->cdev;
+	int ret;
+
+	pr_debug("audio_set_alt intf %d, alt %d\n", intf, alt);
+
+	ret = config_ep_by_speed(cdev->gadget, f, audio->in_ep);
+	if (ret)
+		return ret;
+
+	usb_ep_enable(audio->in_ep);
+	return 0;
+}
+
+static void audio_disable(struct usb_function *f)
+{
+	struct audio_dev	*audio = func_to_audio(f);
+
+	pr_debug("audio_disable\n");
+	usb_ep_disable(audio->in_ep);
+}
+
+static void audio_free_func(struct usb_function *f)
+{
+	/* no-op */
+}
+
+/*-------------------------------------------------------------------------*/
+
+static void audio_build_desc(struct audio_dev *audio)
+{
+	u8 *sam_freq;
+	int rate;
+
+	/* Set channel numbers */
+	input_terminal_desc.bNrChannels = 2;
+	as_type_i_desc.bNrChannels = 2;
+
+	/* Set sample rates */
+	rate = SAMPLE_RATE;
+	sam_freq = as_type_i_desc.tSamFreq[0];
+	memcpy(sam_freq, &rate, 3);
+}
+
+
+static int snd_card_setup(struct usb_configuration *c,
+	struct audio_source_config *config);
+static struct audio_source_instance *to_fi_audio_source(
+	const struct usb_function_instance *fi);
+
+
+/* audio function driver setup/binding */
+static int
+audio_bind(struct usb_configuration *c, struct usb_function *f)
+{
+	struct usb_composite_dev *cdev = c->cdev;
+	struct audio_dev *audio = func_to_audio(f);
+	int status;
+	struct usb_ep *ep;
+	struct usb_request *req;
+	int i;
+	int err;
+
+	if (IS_ENABLED(CONFIG_USB_CONFIGFS)) {
+		struct audio_source_instance *fi_audio =
+				to_fi_audio_source(f->fi);
+		struct audio_source_config *config =
+				fi_audio->config;
+
+		err = snd_card_setup(c, config);
+		if (err)
+			return err;
+	}
+
+	audio_build_desc(audio);
+
+	/* allocate instance-specific interface IDs, and patch descriptors */
+	status = usb_interface_id(c, f);
+	if (status < 0)
+		goto fail;
+	ac_interface_desc.bInterfaceNumber = status;
+
+	/* AUDIO_AC_INTERFACE */
+	ac_header_desc.baInterfaceNr[0] = status;
+
+	status = usb_interface_id(c, f);
+	if (status < 0)
+		goto fail;
+	as_interface_alt_0_desc.bInterfaceNumber = status;
+	as_interface_alt_1_desc.bInterfaceNumber = status;
+
+	/* AUDIO_AS_INTERFACE */
+	ac_header_desc.baInterfaceNr[1] = status;
+
+	status = -ENODEV;
+
+	/* allocate our endpoint */
+	ep = usb_ep_autoconfig(cdev->gadget, &fs_as_in_ep_desc);
+	if (!ep)
+		goto fail;
+	audio->in_ep = ep;
+	ep->driver_data = audio; /* claim */
+
+	if (gadget_is_dualspeed(c->cdev->gadget))
+		hs_as_in_ep_desc.bEndpointAddress =
+			fs_as_in_ep_desc.bEndpointAddress;
+
+	f->fs_descriptors = fs_audio_desc;
+	f->hs_descriptors = hs_audio_desc;
+
+	for (i = 0, status = 0; i < IN_EP_REQ_COUNT && status == 0; i++) {
+		req = audio_request_new(ep, IN_EP_MAX_PACKET_SIZE);
+		if (req) {
+			req->context = audio;
+			req->complete = audio_data_complete;
+			audio_req_put(audio, req);
+		} else
+			status = -ENOMEM;
+	}
+
+fail:
+	return status;
+}
+
+static void
+audio_unbind(struct usb_configuration *c, struct usb_function *f)
+{
+	struct audio_dev *audio = func_to_audio(f);
+	struct usb_request *req;
+
+	while ((req = audio_req_get(audio)))
+		audio_request_free(req, audio->in_ep);
+
+	snd_card_free_when_closed(audio->card);
+	audio->card = NULL;
+	audio->pcm = NULL;
+	audio->substream = NULL;
+	audio->in_ep = NULL;
+
+	if (IS_ENABLED(CONFIG_USB_CONFIGFS)) {
+		struct audio_source_instance *fi_audio =
+				to_fi_audio_source(f->fi);
+		struct audio_source_config *config =
+				fi_audio->config;
+
+		config->card = -1;
+		config->device = -1;
+	}
+}
+
+static void audio_pcm_playback_start(struct audio_dev *audio)
+{
+	audio->start_time = ktime_get();
+	audio->frames_sent = 0;
+	audio_send(audio);
+}
+
+static void audio_pcm_playback_stop(struct audio_dev *audio)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&audio->lock, flags);
+	audio->buffer_start = 0;
+	audio->buffer_end = 0;
+	audio->buffer_pos = 0;
+	spin_unlock_irqrestore(&audio->lock, flags);
+}
+
+static int audio_pcm_open(struct snd_pcm_substream *substream)
+{
+	struct snd_pcm_runtime *runtime = substream->runtime;
+	struct audio_dev *audio = substream->private_data;
+
+	runtime->private_data = audio;
+	runtime->hw = audio_hw_info;
+	snd_pcm_limit_hw_rates(runtime);
+	runtime->hw.channels_max = 2;
+
+	audio->substream = substream;
+
+	/* Add the QoS request and set the latency to 0 */
+	pm_qos_add_request(&audio->pm_qos, PM_QOS_CPU_DMA_LATENCY, 0);
+
+	return 0;
+}
+
+static int audio_pcm_close(struct snd_pcm_substream *substream)
+{
+	struct audio_dev *audio = substream->private_data;
+	unsigned long flags;
+
+	spin_lock_irqsave(&audio->lock, flags);
+
+	/* Remove the QoS request */
+	pm_qos_remove_request(&audio->pm_qos);
+
+	audio->substream = NULL;
+	spin_unlock_irqrestore(&audio->lock, flags);
+
+	return 0;
+}
+
+static int audio_pcm_hw_params(struct snd_pcm_substream *substream,
+				struct snd_pcm_hw_params *params)
+{
+	unsigned int channels = params_channels(params);
+	unsigned int rate = params_rate(params);
+
+	if (rate != SAMPLE_RATE)
+		return -EINVAL;
+	if (channels != 2)
+		return -EINVAL;
+
+	return snd_pcm_lib_alloc_vmalloc_buffer(substream,
+		params_buffer_bytes(params));
+}
+
+static int audio_pcm_hw_free(struct snd_pcm_substream *substream)
+{
+	return snd_pcm_lib_free_vmalloc_buffer(substream);
+}
+
+static int audio_pcm_prepare(struct snd_pcm_substream *substream)
+{
+	struct snd_pcm_runtime *runtime = substream->runtime;
+	struct audio_dev *audio = runtime->private_data;
+
+	audio->period = snd_pcm_lib_period_bytes(substream);
+	audio->period_offset = 0;
+	audio->buffer_start = runtime->dma_area;
+	audio->buffer_end = audio->buffer_start
+		+ snd_pcm_lib_buffer_bytes(substream);
+	audio->buffer_pos = audio->buffer_start;
+
+	return 0;
+}
+
+static snd_pcm_uframes_t audio_pcm_pointer(struct snd_pcm_substream *substream)
+{
+	struct snd_pcm_runtime *runtime = substream->runtime;
+	struct audio_dev *audio = runtime->private_data;
+	ssize_t bytes = audio->buffer_pos - audio->buffer_start;
+
+	/* return offset of next frame to fill in our buffer */
+	return bytes_to_frames(runtime, bytes);
+}
+
+static int audio_pcm_playback_trigger(struct snd_pcm_substream *substream,
+					int cmd)
+{
+	struct audio_dev *audio = substream->runtime->private_data;
+	int ret = 0;
+
+	switch (cmd) {
+	case SNDRV_PCM_TRIGGER_START:
+	case SNDRV_PCM_TRIGGER_RESUME:
+		audio_pcm_playback_start(audio);
+		break;
+
+	case SNDRV_PCM_TRIGGER_STOP:
+	case SNDRV_PCM_TRIGGER_SUSPEND:
+		audio_pcm_playback_stop(audio);
+		break;
+
+	default:
+		ret = -EINVAL;
+	}
+
+	return ret;
+}
+
+static struct audio_dev _audio_dev = {
+	.func = {
+		.name = "audio_source",
+		.bind = audio_bind,
+		.unbind = audio_unbind,
+		.set_alt = audio_set_alt,
+		.setup = audio_setup,
+		.disable = audio_disable,
+		.free_func = audio_free_func,
+	},
+	.lock = __SPIN_LOCK_UNLOCKED(_audio_dev.lock),
+	.idle_reqs = LIST_HEAD_INIT(_audio_dev.idle_reqs),
+};
+
+static struct snd_pcm_ops audio_playback_ops = {
+	.open		= audio_pcm_open,
+	.close		= audio_pcm_close,
+	.ioctl		= snd_pcm_lib_ioctl,
+	.hw_params	= audio_pcm_hw_params,
+	.hw_free	= audio_pcm_hw_free,
+	.prepare	= audio_pcm_prepare,
+	.trigger	= audio_pcm_playback_trigger,
+	.pointer	= audio_pcm_pointer,
+};
+
+int audio_source_bind_config(struct usb_configuration *c,
+		struct audio_source_config *config)
+{
+	struct audio_dev *audio;
+	int err;
+
+	config->card = -1;
+	config->device = -1;
+
+	audio = &_audio_dev;
+
+	err = snd_card_setup(c, config);
+	if (err)
+		return err;
+
+	err = usb_add_function(c, &audio->func);
+	if (err)
+		goto add_fail;
+
+	return 0;
+
+add_fail:
+	snd_card_free(audio->card);
+	return err;
+}
+
+static int snd_card_setup(struct usb_configuration *c,
+		struct audio_source_config *config)
+{
+	struct audio_dev *audio;
+	struct snd_card *card;
+	struct snd_pcm *pcm;
+	int err;
+
+	audio = &_audio_dev;
+
+	err = snd_card_new(&c->cdev->gadget->dev,
+			SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1,
+			THIS_MODULE, 0, &card);
+	if (err)
+		return err;
+
+	err = snd_pcm_new(card, "USB audio source", 0, 1, 0, &pcm);
+	if (err)
+		goto pcm_fail;
+
+	pcm->private_data = audio;
+	pcm->info_flags = 0;
+	audio->pcm = pcm;
+
+	strlcpy(pcm->name, "USB gadget audio", sizeof(pcm->name));
+
+	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &audio_playback_ops);
+	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
+				NULL, 0, 64 * 1024);
+
+	strlcpy(card->driver, "audio_source", sizeof(card->driver));
+	strlcpy(card->shortname, card->driver, sizeof(card->shortname));
+	strlcpy(card->longname, "USB accessory audio source",
+		sizeof(card->longname));
+
+	err = snd_card_register(card);
+	if (err)
+		goto register_fail;
+
+	config->card = pcm->card->number;
+	config->device = pcm->device;
+	audio->card = card;
+	return 0;
+
+register_fail:
+pcm_fail:
+	snd_card_free(audio->card);
+	return err;
+}
+
+static struct audio_source_instance *to_audio_source_instance(
+					struct config_item *item)
+{
+	return container_of(to_config_group(item), struct audio_source_instance,
+		func_inst.group);
+}
+
+static struct audio_source_instance *to_fi_audio_source(
+					const struct usb_function_instance *fi)
+{
+	return container_of(fi, struct audio_source_instance, func_inst);
+}
+
+static void audio_source_attr_release(struct config_item *item)
+{
+	struct audio_source_instance *fi_audio = to_audio_source_instance(item);
+
+	usb_put_function_instance(&fi_audio->func_inst);
+}
+
+static int audio_source_set_inst_name(struct usb_function_instance *fi,
+					const char *name)
+{
+	struct audio_source_instance *fi_audio;
+	char *ptr;
+	int name_len;
+
+	name_len = strlen(name) + 1;
+	if (name_len > MAX_INST_NAME_LEN)
+		return -ENAMETOOLONG;
+
+	ptr = kstrndup(name, name_len, GFP_KERNEL);
+	if (!ptr)
+		return -ENOMEM;
+
+	fi_audio = to_fi_audio_source(fi);
+	fi_audio->name = ptr;
+
+	return 0;
+}
+
+static void audio_source_free_inst(struct usb_function_instance *fi)
+{
+	struct audio_source_instance *fi_audio;
+
+	fi_audio = to_fi_audio_source(fi);
+	device_destroy(fi_audio->audio_device->class,
+			fi_audio->audio_device->devt);
+	kfree(fi_audio->name);
+	kfree(fi_audio->config);
+}
+
+static ssize_t audio_source_pcm_show(struct device *dev,
+		struct device_attribute *attr, char *buf)
+{
+	struct audio_source_instance *fi_audio = dev_get_drvdata(dev);
+	struct audio_source_config *config = fi_audio->config;
+
+	/* print PCM card and device numbers */
+	return sprintf(buf, "%d %d\n", config->card, config->device);
+}
+
+struct device *create_function_device(char *name);
+
+static struct usb_function_instance *audio_source_alloc_inst(void)
+{
+	struct audio_source_instance *fi_audio;
+	struct device_attribute **attrs;
+	struct device_attribute *attr;
+	struct device *dev;
+	void *err_ptr;
+	int err = 0;
+
+	fi_audio = kzalloc(sizeof(*fi_audio), GFP_KERNEL);
+	if (!fi_audio)
+		return ERR_PTR(-ENOMEM);
+
+	fi_audio->func_inst.set_inst_name = audio_source_set_inst_name;
+	fi_audio->func_inst.free_func_inst = audio_source_free_inst;
+
+	fi_audio->config = kzalloc(sizeof(struct audio_source_config),
+							GFP_KERNEL);
+	if (!fi_audio->config) {
+		err_ptr = ERR_PTR(-ENOMEM);
+		goto fail_audio;
+	}
+
+	config_group_init_type_name(&fi_audio->func_inst.group, "",
+						&audio_source_func_type);
+	dev = create_function_device("f_audio_source");
+
+	if (IS_ERR(dev)) {
+		err_ptr = dev;
+		goto fail_audio_config;
+	}
+
+	fi_audio->config->card = -1;
+	fi_audio->config->device = -1;
+	fi_audio->audio_device = dev;
+
+	attrs = audio_source_function_attributes;
+	if (attrs) {
+		while ((attr = *attrs++) && !err)
+			err = device_create_file(dev, attr);
+		if (err) {
+			err_ptr = ERR_PTR(-EINVAL);
+			goto fail_device;
+		}
+	}
+
+	dev_set_drvdata(dev, fi_audio);
+	_audio_dev.config = fi_audio->config;
+
+	return  &fi_audio->func_inst;
+
+fail_device:
+	device_destroy(dev->class, dev->devt);
+fail_audio_config:
+	kfree(fi_audio->config);
+fail_audio:
+	kfree(fi_audio);
+	return err_ptr;
+
+}
+
+static struct usb_function *audio_source_alloc(struct usb_function_instance *fi)
+{
+	return &_audio_dev.func;
+}
+
+DECLARE_USB_FUNCTION_INIT(audio_source, audio_source_alloc_inst,
+			audio_source_alloc);
+MODULE_LICENSE("GPL");
diff --git a/drivers/usb/gadget/function/f_midi.c b/drivers/usb/gadget/function/f_midi.c
index 0e083a5..6745919 100644
--- a/drivers/usb/gadget/function/f_midi.c
+++ b/drivers/usb/gadget/function/f_midi.c
@@ -1222,6 +1222,65 @@ static void f_midi_free_inst(struct usb_function_instance *f)
 	}
 }
 
+#ifdef CONFIG_USB_CONFIGFS_UEVENT
+extern struct device *create_function_device(char *name);
+static ssize_t alsa_show(struct device *dev,
+		struct device_attribute *attr, char *buf)
+{
+	struct usb_function_instance *fi_midi = dev_get_drvdata(dev);
+	struct f_midi *midi;
+
+	if (!fi_midi->f)
+		dev_warn(dev, "f_midi: function not set\n");
+
+	if (fi_midi && fi_midi->f) {
+		midi = func_to_midi(fi_midi->f);
+		if (midi->rmidi && midi->rmidi->card)
+			return sprintf(buf, "%d %d\n",
+			midi->rmidi->card->number, midi->rmidi->device);
+	}
+
+	/* print PCM card and device numbers */
+	return sprintf(buf, "%d %d\n", -1, -1);
+}
+
+static DEVICE_ATTR(alsa, S_IRUGO, alsa_show, NULL);
+
+static struct device_attribute *alsa_function_attributes[] = {
+	&dev_attr_alsa,
+	NULL
+};
+
+static int create_alsa_device(struct usb_function_instance *fi)
+{
+	struct device *dev;
+	struct device_attribute **attrs;
+	struct device_attribute *attr;
+	int err = 0;
+
+	dev = create_function_device("f_midi");
+	if (IS_ERR(dev))
+		return PTR_ERR(dev);
+
+	attrs = alsa_function_attributes;
+	if (attrs) {
+		while ((attr = *attrs++) && !err)
+			err = device_create_file(dev, attr);
+		if (err) {
+			device_destroy(dev->class, dev->devt);
+			return -EINVAL;
+		}
+	}
+	dev_set_drvdata(dev, fi);
+	return 0;
+}
+#else
+static int create_alsa_device(struct usb_function_instance *fi)
+{
+	return 0;
+}
+#endif
+
 static struct usb_function_instance *f_midi_alloc_inst(void)
 {
 	struct f_midi_opts *opts;
@@ -1240,6 +1299,11 @@ static struct usb_function_instance *f_midi_alloc_inst(void)
 	opts->out_ports = 1;
 	opts->refcnt = 1;
 
+	if (create_alsa_device(&opts->func_inst)) {
+		kfree(opts);
+		return ERR_PTR(-ENODEV);
+	}
+
 	config_group_init_type_name(&opts->func_inst.group, "",
 				    &midi_func_type);
 
@@ -1260,6 +1324,7 @@ static void f_midi_free(struct usb_function *f)
 		kfifo_free(&midi->in_req_fifo);
 		kfree(midi);
 		free = true;
+		opts->func_inst.f = NULL;
 	}
 	mutex_unlock(&opts->lock);
 
@@ -1347,6 +1412,7 @@ static struct usb_function *f_midi_alloc(struct usb_function_instance *fi)
 	midi->func.disable	= f_midi_disable;
 	midi->func.free_func	= f_midi_free;
 
+	fi->f = &midi->func;
 	return &midi->func;
 
 midi_free:
diff --git a/drivers/usb/gadget/legacy/Kconfig b/drivers/usb/gadget/legacy/Kconfig
index 69ff7f8..abf7a05 100644
--- a/drivers/usb/gadget/legacy/Kconfig
+++ b/drivers/usb/gadget/legacy/Kconfig
@@ -14,6 +14,32 @@
 # both kinds of controller can also support "USB On-the-Go" (CONFIG_USB_OTG).
 #
 
+choice
+	tristate "USB Gadget precomposed configurations"
+	default USB_ETH
+	optional
+	help
+	  A Linux "Gadget Driver" talks to the USB Peripheral Controller
+	  driver through the abstract "gadget" API.  Some other operating
+	  systems call these "client" drivers, of which "class drivers"
+	  are a subset (implementing a USB device class specification).
+	  A gadget driver implements one or more USB functions using
+	  the peripheral hardware.
+
+	  Gadget drivers are hardware-neutral, or "platform independent",
+	  except that they sometimes must understand quirks or limitations
+	  of the particular controllers they work with.  For example, when
+	  a controller doesn't support alternate configurations or provide
+	  enough of the right types of endpoints, the gadget driver might
+	  not be able work with that controller, or might need to implement
+	  a less common variant of a device class protocol.
+
+	  The available choices each represent a single precomposed USB
+	  gadget configuration. In the device model, each option contains
+	  both the device instantiation as a child for a USB gadget
+	  controller, and the relevant drivers for each function declared
+	  by the device.
+
 config USB_ZERO
 	tristate "Gadget Zero (DEVELOPMENT)"
 	select USB_LIBCOMPOSITE
@@ -489,3 +515,16 @@
 
 	  Say "y" to link the driver statically, or "m" to build a
 	  dynamically linked module called "g_webcam".
+
+config USB_RAW_GADGET
+	tristate "USB Raw Gadget"
+	help
+	  USB Raw Gadget is a kernel module that provides a userspace interface
+	  for the USB Gadget subsystem. Essentially it allows to emulate USB
+	  devices from userspace. See Documentation/usb/raw-gadget.rst for
+	  details.
+
+	  Say "y" to link the driver statically, or "m" to build a
+	  dynamically linked module called "raw_gadget".
+
+endchoice
diff --git a/drivers/usb/gadget/legacy/Makefile b/drivers/usb/gadget/legacy/Makefile
index abd0c3e..4d864bf 100644
--- a/drivers/usb/gadget/legacy/Makefile
+++ b/drivers/usb/gadget/legacy/Makefile
@@ -43,3 +43,4 @@
 obj-$(CONFIG_USB_G_NCM)		+= g_ncm.o
 obj-$(CONFIG_USB_G_ACM_MS)	+= g_acm_ms.o
 obj-$(CONFIG_USB_GADGET_TARGET)	+= tcm_usb_gadget.o
+obj-$(CONFIG_USB_RAW_GADGET)	+= raw_gadget.o
diff --git a/drivers/usb/gadget/legacy/raw_gadget.c b/drivers/usb/gadget/legacy/raw_gadget.c
new file mode 100644
index 0000000..e01e366
--- /dev/null
+++ b/drivers/usb/gadget/legacy/raw_gadget.c
@@ -0,0 +1,1280 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * USB Raw Gadget driver.
+ * See Documentation/usb/raw-gadget.rst for more details.
+ *
+ * Andrey Konovalov <andreyknvl@gmail.com>
+ */
+
+#include <linux/compiler.h>
+#include <linux/ctype.h>
+#include <linux/debugfs.h>
+#include <linux/delay.h>
+#include <linux/kref.h>
+#include <linux/miscdevice.h>
+#include <linux/module.h>
+#include <linux/semaphore.h>
+#include <linux/sched.h>
+#include <linux/slab.h>
+#include <linux/uaccess.h>
+#include <linux/wait.h>
+
+#include <linux/usb.h>
+#include <linux/usb/ch9.h>
+#include <linux/usb/ch11.h>
+#include <linux/usb/gadget.h>
+
+#include <uapi/linux/usb/raw_gadget.h>
+
+#define	DRIVER_DESC "USB Raw Gadget"
+#define DRIVER_NAME "raw-gadget"
+
+MODULE_DESCRIPTION(DRIVER_DESC);
+MODULE_AUTHOR("Andrey Konovalov");
+MODULE_LICENSE("GPL");
+
+/*----------------------------------------------------------------------*/
+
+#define RAW_EVENT_QUEUE_SIZE	16
+
+struct raw_event_queue {
+	/* See the comment in raw_event_queue_fetch() for locking details. */
+	spinlock_t		lock;
+	struct semaphore	sema;
+	struct usb_raw_event	*events[RAW_EVENT_QUEUE_SIZE];
+	int			size;
+};
+
+static void raw_event_queue_init(struct raw_event_queue *queue)
+{
+	spin_lock_init(&queue->lock);
+	sema_init(&queue->sema, 0);
+	queue->size = 0;
+}
+
+static int raw_event_queue_add(struct raw_event_queue *queue,
+	enum usb_raw_event_type type, size_t length, const void *data)
+{
+	unsigned long flags;
+	struct usb_raw_event *event;
+
+	spin_lock_irqsave(&queue->lock, flags);
+	if (WARN_ON(queue->size >= RAW_EVENT_QUEUE_SIZE)) {
+		spin_unlock_irqrestore(&queue->lock, flags);
+		return -ENOMEM;
+	}
+	event = kmalloc(sizeof(*event) + length, GFP_ATOMIC);
+	if (!event) {
+		spin_unlock_irqrestore(&queue->lock, flags);
+		return -ENOMEM;
+	}
+	event->type = type;
+	event->length = length;
+	if (event->length)
+		memcpy(&event->data[0], data, length);
+	queue->events[queue->size] = event;
+	queue->size++;
+	up(&queue->sema);
+	spin_unlock_irqrestore(&queue->lock, flags);
+	return 0;
+}
+
+static struct usb_raw_event *raw_event_queue_fetch(
+				struct raw_event_queue *queue)
+{
+	int ret;
+	unsigned long flags;
+	struct usb_raw_event *event;
+
+	/*
+	 * This function can be called concurrently. We first check that
+	 * there's at least one event queued by decrementing the semaphore,
+	 * and then take the lock to protect queue struct fields.
+	 */
+	ret = down_interruptible(&queue->sema);
+	if (ret)
+		return ERR_PTR(ret);
+	spin_lock_irqsave(&queue->lock, flags);
+	/*
+	 * queue->size must have the same value as queue->sema counter (before
+	 * the down_interruptible() call above), so this check is a fail-safe.
+	 */
+	if (WARN_ON(!queue->size)) {
+		spin_unlock_irqrestore(&queue->lock, flags);
+		return ERR_PTR(-ENODEV);
+	}
+	event = queue->events[0];
+	queue->size--;
+	memmove(&queue->events[0], &queue->events[1],
+			queue->size * sizeof(queue->events[0]));
+	spin_unlock_irqrestore(&queue->lock, flags);
+	return event;
+}
+
+static void raw_event_queue_destroy(struct raw_event_queue *queue)
+{
+	int i;
+
+	for (i = 0; i < queue->size; i++)
+		kfree(queue->events[i]);
+	queue->size = 0;
+}
+
+/*----------------------------------------------------------------------*/
+
+struct raw_dev;
+
+enum ep_state {
+	STATE_EP_DISABLED,
+	STATE_EP_ENABLED,
+};
+
+struct raw_ep {
+	struct raw_dev		*dev;
+	enum ep_state		state;
+	struct usb_ep		*ep;
+	u8			addr;
+	struct usb_request	*req;
+	bool			urb_queued;
+	bool			disabling;
+	ssize_t			status;
+};
+
+enum dev_state {
+	STATE_DEV_INVALID = 0,
+	STATE_DEV_OPENED,
+	STATE_DEV_INITIALIZED,
+	STATE_DEV_RUNNING,
+	STATE_DEV_CLOSED,
+	STATE_DEV_FAILED
+};
+
+struct raw_dev {
+	struct kref			count;
+	spinlock_t			lock;
+
+	const char			*udc_name;
+	struct usb_gadget_driver	driver;
+
+	/* Reference to misc device: */
+	struct device			*dev;
+
+	/* Protected by lock: */
+	enum dev_state			state;
+	bool				gadget_registered;
+	struct usb_gadget		*gadget;
+	struct usb_request		*req;
+	bool				ep0_in_pending;
+	bool				ep0_out_pending;
+	bool				ep0_urb_queued;
+	ssize_t				ep0_status;
+	struct raw_ep			eps[USB_RAW_EPS_NUM_MAX];
+	int				eps_num;
+
+	struct completion		ep0_done;
+	struct raw_event_queue		queue;
+};
+
+static struct raw_dev *dev_new(void)
+{
+	struct raw_dev *dev;
+
+	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	if (!dev)
+		return NULL;
+	/* Matches kref_put() in raw_release(). */
+	kref_init(&dev->count);
+	spin_lock_init(&dev->lock);
+	init_completion(&dev->ep0_done);
+	raw_event_queue_init(&dev->queue);
+	return dev;
+}
+
+static void dev_free(struct kref *kref)
+{
+	struct raw_dev *dev = container_of(kref, struct raw_dev, count);
+	int i;
+
+	kfree(dev->udc_name);
+	kfree(dev->driver.udc_name);
+	if (dev->req) {
+		if (dev->ep0_urb_queued)
+			usb_ep_dequeue(dev->gadget->ep0, dev->req);
+		usb_ep_free_request(dev->gadget->ep0, dev->req);
+	}
+	raw_event_queue_destroy(&dev->queue);
+	for (i = 0; i < dev->eps_num; i++) {
+		if (dev->eps[i].state == STATE_EP_DISABLED)
+			continue;
+		usb_ep_disable(dev->eps[i].ep);
+		usb_ep_free_request(dev->eps[i].ep, dev->eps[i].req);
+		kfree(dev->eps[i].ep->desc);
+		dev->eps[i].state = STATE_EP_DISABLED;
+	}
+	kfree(dev);
+}
+
+/*----------------------------------------------------------------------*/
+
+static int raw_queue_event(struct raw_dev *dev,
+	enum usb_raw_event_type type, size_t length, const void *data)
+{
+	int ret = 0;
+	unsigned long flags;
+
+	ret = raw_event_queue_add(&dev->queue, type, length, data);
+	if (ret < 0) {
+		spin_lock_irqsave(&dev->lock, flags);
+		dev->state = STATE_DEV_FAILED;
+		spin_unlock_irqrestore(&dev->lock, flags);
+	}
+	return ret;
+}
+
+static void gadget_ep0_complete(struct usb_ep *ep, struct usb_request *req)
+{
+	struct raw_dev *dev = req->context;
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (req->status)
+		dev->ep0_status = req->status;
+	else
+		dev->ep0_status = req->actual;
+	if (dev->ep0_in_pending)
+		dev->ep0_in_pending = false;
+	else
+		dev->ep0_out_pending = false;
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	complete(&dev->ep0_done);
+}
+
+static u8 get_ep_addr(const char *name)
+{
+	/* If the endpoint has fixed function (named as e.g. "ep12out-bulk"),
+	 * parse the endpoint address from its name. We deliberately use
+	 * deprecated simple_strtoul() function here, as the number isn't
+	 * followed by '\0' nor '\n'.
+	 */
+	if (isdigit(name[2]))
+		return simple_strtoul(&name[2], NULL, 10);
+	/* Otherwise the endpoint is configurable (named as e.g. "ep-a"). */
+	return USB_RAW_EP_ADDR_ANY;
+}
+
+static int gadget_bind(struct usb_gadget *gadget,
+			struct usb_gadget_driver *driver)
+{
+	int ret = 0, i = 0;
+	struct raw_dev *dev = container_of(driver, struct raw_dev, driver);
+	struct usb_request *req;
+	struct usb_ep *ep;
+	unsigned long flags;
+
+	if (strcmp(gadget->name, dev->udc_name) != 0)
+		return -ENODEV;
+
+	set_gadget_data(gadget, dev);
+	req = usb_ep_alloc_request(gadget->ep0, GFP_KERNEL);
+	if (!req) {
+		dev_err(&gadget->dev, "usb_ep_alloc_request failed\n");
+		set_gadget_data(gadget, NULL);
+		return -ENOMEM;
+	}
+
+	spin_lock_irqsave(&dev->lock, flags);
+	dev->req = req;
+	dev->req->context = dev;
+	dev->req->complete = gadget_ep0_complete;
+	dev->gadget = gadget;
+	gadget_for_each_ep(ep, dev->gadget) {
+		dev->eps[i].ep = ep;
+		dev->eps[i].addr = get_ep_addr(ep->name);
+		dev->eps[i].state = STATE_EP_DISABLED;
+		i++;
+	}
+	dev->eps_num = i;
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	/* Matches kref_put() in gadget_unbind(). */
+	kref_get(&dev->count);
+
+	ret = raw_queue_event(dev, USB_RAW_EVENT_CONNECT, 0, NULL);
+	if (ret < 0)
+		dev_err(&gadget->dev, "failed to queue event\n");
+
+	return ret;
+}
+
+static void gadget_unbind(struct usb_gadget *gadget)
+{
+	struct raw_dev *dev = get_gadget_data(gadget);
+
+	set_gadget_data(gadget, NULL);
+	/* Matches kref_get() in gadget_bind(). */
+	kref_put(&dev->count, dev_free);
+}
+
+static int gadget_setup(struct usb_gadget *gadget,
+			const struct usb_ctrlrequest *ctrl)
+{
+	int ret = 0;
+	struct raw_dev *dev = get_gadget_data(gadget);
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_err(&gadget->dev, "ignoring, device is not running\n");
+		ret = -ENODEV;
+		goto out_unlock;
+	}
+	if (dev->ep0_in_pending || dev->ep0_out_pending) {
+		dev_dbg(&gadget->dev, "stalling, request already pending\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if ((ctrl->bRequestType & USB_DIR_IN) && ctrl->wLength)
+		dev->ep0_in_pending = true;
+	else
+		dev->ep0_out_pending = true;
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	ret = raw_queue_event(dev, USB_RAW_EVENT_CONTROL, sizeof(*ctrl), ctrl);
+	if (ret < 0)
+		dev_err(&gadget->dev, "failed to queue event\n");
+	goto out;
+
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+out:
+	return ret;
+}
+
+/* These are currently unused but present in case UDC driver requires them. */
+static void gadget_disconnect(struct usb_gadget *gadget) { }
+static void gadget_suspend(struct usb_gadget *gadget) { }
+static void gadget_resume(struct usb_gadget *gadget) { }
+static void gadget_reset(struct usb_gadget *gadget) { }
+
+/*----------------------------------------------------------------------*/
+
+static struct miscdevice raw_misc_device;
+
+static int raw_open(struct inode *inode, struct file *fd)
+{
+	struct raw_dev *dev;
+
+	/* Nonblocking I/O is not supported yet. */
+	if (fd->f_flags & O_NONBLOCK)
+		return -EINVAL;
+
+	dev = dev_new();
+	if (!dev)
+		return -ENOMEM;
+	fd->private_data = dev;
+	dev->state = STATE_DEV_OPENED;
+	dev->dev = raw_misc_device.this_device;
+	return 0;
+}
+
+static int raw_release(struct inode *inode, struct file *fd)
+{
+	int ret = 0;
+	struct raw_dev *dev = fd->private_data;
+	unsigned long flags;
+	bool unregister = false;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	dev->state = STATE_DEV_CLOSED;
+	if (!dev->gadget) {
+		spin_unlock_irqrestore(&dev->lock, flags);
+		goto out_put;
+	}
+	if (dev->gadget_registered)
+		unregister = true;
+	dev->gadget_registered = false;
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	if (unregister) {
+		ret = usb_gadget_unregister_driver(&dev->driver);
+		if (ret != 0)
+			dev_err(dev->dev,
+				"usb_gadget_unregister_driver() failed with %d\n",
+				ret);
+		/* Matches kref_get() in raw_ioctl_run(). */
+		kref_put(&dev->count, dev_free);
+	}
+
+out_put:
+	/* Matches dev_new() in raw_open(). */
+	kref_put(&dev->count, dev_free);
+	return ret;
+}
+
+/*----------------------------------------------------------------------*/
+
+static int raw_ioctl_init(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0;
+	struct usb_raw_init arg;
+	char *udc_driver_name;
+	char *udc_device_name;
+	unsigned long flags;
+
+	if (copy_from_user(&arg, (void __user *)value, sizeof(arg)))
+		return -EFAULT;
+
+	switch (arg.speed) {
+	case USB_SPEED_UNKNOWN:
+		arg.speed = USB_SPEED_HIGH;
+		break;
+	case USB_SPEED_LOW:
+	case USB_SPEED_FULL:
+	case USB_SPEED_HIGH:
+	case USB_SPEED_SUPER:
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	udc_driver_name = kmalloc(UDC_NAME_LENGTH_MAX, GFP_KERNEL);
+	if (!udc_driver_name)
+		return -ENOMEM;
+	ret = strscpy(udc_driver_name, &arg.driver_name[0],
+				UDC_NAME_LENGTH_MAX);
+	if (ret < 0) {
+		kfree(udc_driver_name);
+		return ret;
+	}
+	ret = 0;
+
+	udc_device_name = kmalloc(UDC_NAME_LENGTH_MAX, GFP_KERNEL);
+	if (!udc_device_name) {
+		kfree(udc_driver_name);
+		return -ENOMEM;
+	}
+	ret = strscpy(udc_device_name, &arg.device_name[0],
+				UDC_NAME_LENGTH_MAX);
+	if (ret < 0) {
+		kfree(udc_driver_name);
+		kfree(udc_device_name);
+		return ret;
+	}
+	ret = 0;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_OPENED) {
+		dev_dbg(dev->dev, "fail, device is not opened\n");
+		kfree(udc_driver_name);
+		kfree(udc_device_name);
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	dev->udc_name = udc_driver_name;
+
+	dev->driver.function = DRIVER_DESC;
+	dev->driver.max_speed = arg.speed;
+	dev->driver.setup = gadget_setup;
+	dev->driver.disconnect = gadget_disconnect;
+	dev->driver.bind = gadget_bind;
+	dev->driver.unbind = gadget_unbind;
+	dev->driver.suspend = gadget_suspend;
+	dev->driver.resume = gadget_resume;
+	dev->driver.reset = gadget_reset;
+	dev->driver.driver.name = DRIVER_NAME;
+	dev->driver.udc_name = udc_device_name;
+	dev->driver.match_existing_only = 1;
+
+	dev->state = STATE_DEV_INITIALIZED;
+
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static int raw_ioctl_run(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0;
+	unsigned long flags;
+
+	if (value)
+		return -EINVAL;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_INITIALIZED) {
+		dev_dbg(dev->dev, "fail, device is not initialized\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	ret = usb_gadget_probe_driver(&dev->driver);
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (ret) {
+		dev_err(dev->dev,
+			"fail, usb_gadget_probe_driver returned %d\n", ret);
+		dev->state = STATE_DEV_FAILED;
+		goto out_unlock;
+	}
+	dev->gadget_registered = true;
+	dev->state = STATE_DEV_RUNNING;
+	/* Matches kref_put() in raw_release(). */
+	kref_get(&dev->count);
+
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static int raw_ioctl_event_fetch(struct raw_dev *dev, unsigned long value)
+{
+	struct usb_raw_event arg;
+	unsigned long flags;
+	struct usb_raw_event *event;
+	uint32_t length;
+
+	if (copy_from_user(&arg, (void __user *)value, sizeof(arg)))
+		return -EFAULT;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		spin_unlock_irqrestore(&dev->lock, flags);
+		return -EINVAL;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		spin_unlock_irqrestore(&dev->lock, flags);
+		return -EBUSY;
+	}
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	event = raw_event_queue_fetch(&dev->queue);
+	if (PTR_ERR(event) == -EINTR) {
+		dev_dbg(&dev->gadget->dev, "event fetching interrupted\n");
+		return -EINTR;
+	}
+	if (IS_ERR(event)) {
+		dev_err(&dev->gadget->dev, "failed to fetch event\n");
+		spin_lock_irqsave(&dev->lock, flags);
+		dev->state = STATE_DEV_FAILED;
+		spin_unlock_irqrestore(&dev->lock, flags);
+		return -ENODEV;
+	}
+	length = min(arg.length, event->length);
+	if (copy_to_user((void __user *)value, event, sizeof(*event) + length))
+		return -EFAULT;
+
+	return 0;
+}
+
+static void *raw_alloc_io_data(struct usb_raw_ep_io *io, void __user *ptr,
+				bool get_from_user)
+{
+	void *data;
+
+	if (copy_from_user(io, ptr, sizeof(*io)))
+		return ERR_PTR(-EFAULT);
+	if (io->ep >= USB_RAW_EPS_NUM_MAX)
+		return ERR_PTR(-EINVAL);
+	if (!usb_raw_io_flags_valid(io->flags))
+		return ERR_PTR(-EINVAL);
+	if (io->length > PAGE_SIZE)
+		return ERR_PTR(-EINVAL);
+	if (get_from_user)
+		data = memdup_user(ptr + sizeof(*io), io->length);
+	else {
+		data = kmalloc(io->length, GFP_KERNEL);
+		if (!data)
+			data = ERR_PTR(-ENOMEM);
+	}
+	return data;
+}
+
+static int raw_process_ep0_io(struct raw_dev *dev, struct usb_raw_ep_io *io,
+				void *data, bool in)
+{
+	int ret = 0;
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (dev->ep0_urb_queued) {
+		dev_dbg(&dev->gadget->dev, "fail, urb already queued\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if ((in && !dev->ep0_in_pending) ||
+			(!in && !dev->ep0_out_pending)) {
+		dev_dbg(&dev->gadget->dev, "fail, wrong direction\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (WARN_ON(in && dev->ep0_out_pending)) {
+		ret = -ENODEV;
+		dev->state = STATE_DEV_FAILED;
+		goto out_done;
+	}
+	if (WARN_ON(!in && dev->ep0_in_pending)) {
+		ret = -ENODEV;
+		dev->state = STATE_DEV_FAILED;
+		goto out_done;
+	}
+
+	dev->req->buf = data;
+	dev->req->length = io->length;
+	dev->req->zero = usb_raw_io_flags_zero(io->flags);
+	dev->ep0_urb_queued = true;
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	ret = usb_ep_queue(dev->gadget->ep0, dev->req, GFP_KERNEL);
+	if (ret) {
+		dev_err(&dev->gadget->dev,
+				"fail, usb_ep_queue returned %d\n", ret);
+		spin_lock_irqsave(&dev->lock, flags);
+		dev->state = STATE_DEV_FAILED;
+		goto out_done;
+	}
+
+	ret = wait_for_completion_interruptible(&dev->ep0_done);
+	if (ret) {
+		dev_dbg(&dev->gadget->dev, "wait interrupted\n");
+		usb_ep_dequeue(dev->gadget->ep0, dev->req);
+		wait_for_completion(&dev->ep0_done);
+		spin_lock_irqsave(&dev->lock, flags);
+		goto out_done;
+	}
+
+	spin_lock_irqsave(&dev->lock, flags);
+	ret = dev->ep0_status;
+
+out_done:
+	dev->ep0_urb_queued = false;
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static int raw_ioctl_ep0_write(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0;
+	void *data;
+	struct usb_raw_ep_io io;
+
+	data = raw_alloc_io_data(&io, (void __user *)value, true);
+	if (IS_ERR(data))
+		return PTR_ERR(data);
+	ret = raw_process_ep0_io(dev, &io, data, true);
+	kfree(data);
+	return ret;
+}
+
+static int raw_ioctl_ep0_read(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0;
+	void *data;
+	struct usb_raw_ep_io io;
+	unsigned int length;
+
+	data = raw_alloc_io_data(&io, (void __user *)value, false);
+	if (IS_ERR(data))
+		return PTR_ERR(data);
+	ret = raw_process_ep0_io(dev, &io, data, false);
+	if (ret < 0)
+		goto free;
+
+	length = min(io.length, (unsigned int)ret);
+	if (copy_to_user((void __user *)(value + sizeof(io)), data, length))
+		ret = -EFAULT;
+	else
+		ret = length;
+free:
+	kfree(data);
+	return ret;
+}
+
+static int raw_ioctl_ep0_stall(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0;
+	unsigned long flags;
+
+	if (value)
+		return -EINVAL;
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (dev->ep0_urb_queued) {
+		dev_dbg(&dev->gadget->dev, "fail, urb already queued\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (!dev->ep0_in_pending && !dev->ep0_out_pending) {
+		dev_dbg(&dev->gadget->dev, "fail, no request pending\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+
+	ret = usb_ep_set_halt(dev->gadget->ep0);
+	if (ret < 0)
+		dev_err(&dev->gadget->dev,
+				"fail, usb_ep_set_halt returned %d\n", ret);
+
+	if (dev->ep0_in_pending)
+		dev->ep0_in_pending = false;
+	else
+		dev->ep0_out_pending = false;
+
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static int raw_ioctl_ep_enable(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0, i;
+	unsigned long flags;
+	struct usb_endpoint_descriptor *desc;
+	struct raw_ep *ep;
+
+	desc = memdup_user((void __user *)value, sizeof(*desc));
+	if (IS_ERR(desc))
+		return PTR_ERR(desc);
+
+	/*
+	 * Endpoints with a maxpacket length of 0 can cause crashes in UDC
+	 * drivers.
+	 */
+	if (usb_endpoint_maxp(desc) == 0) {
+		dev_dbg(dev->dev, "fail, bad endpoint maxpacket\n");
+		kfree(desc);
+		return -EINVAL;
+	}
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		ret = -EINVAL;
+		goto out_free;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		ret = -EBUSY;
+		goto out_free;
+	}
+
+	for (i = 0; i < dev->eps_num; i++) {
+		ep = &dev->eps[i];
+		if (ep->state != STATE_EP_DISABLED)
+			continue;
+		if (ep->addr != usb_endpoint_num(desc) &&
+				ep->addr != USB_RAW_EP_ADDR_ANY)
+			continue;
+		if (!usb_gadget_ep_match_desc(dev->gadget, ep->ep, desc, NULL))
+			continue;
+		ep->ep->desc = desc;
+		ret = usb_ep_enable(ep->ep);
+		if (ret < 0) {
+			dev_err(&dev->gadget->dev,
+				"fail, usb_ep_enable returned %d\n", ret);
+			goto out_free;
+		}
+		ep->req = usb_ep_alloc_request(ep->ep, GFP_ATOMIC);
+		if (!ep->req) {
+			dev_err(&dev->gadget->dev,
+				"fail, usb_ep_alloc_request failed\n");
+			usb_ep_disable(ep->ep);
+			ret = -ENOMEM;
+			goto out_free;
+		}
+		ep->state = STATE_EP_ENABLED;
+		ep->ep->driver_data = ep;
+		ret = i;
+		goto out_unlock;
+	}
+
+	dev_dbg(&dev->gadget->dev, "fail, no gadget endpoints available\n");
+	ret = -EBUSY;
+
+out_free:
+	kfree(desc);
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static int raw_ioctl_ep_disable(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0, i = value;
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (i < 0 || i >= dev->eps_num) {
+		dev_dbg(dev->dev, "fail, invalid endpoint\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (dev->eps[i].state == STATE_EP_DISABLED) {
+		dev_dbg(&dev->gadget->dev, "fail, endpoint is not enabled\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (dev->eps[i].disabling) {
+		dev_dbg(&dev->gadget->dev,
+				"fail, disable already in progress\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (dev->eps[i].urb_queued) {
+		dev_dbg(&dev->gadget->dev,
+				"fail, waiting for urb completion\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	dev->eps[i].disabling = true;
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	usb_ep_disable(dev->eps[i].ep);
+
+	spin_lock_irqsave(&dev->lock, flags);
+	usb_ep_free_request(dev->eps[i].ep, dev->eps[i].req);
+	kfree(dev->eps[i].ep->desc);
+	dev->eps[i].state = STATE_EP_DISABLED;
+	dev->eps[i].disabling = false;
+
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static int raw_ioctl_ep_set_clear_halt_wedge(struct raw_dev *dev,
+		unsigned long value, bool set, bool halt)
+{
+	int ret = 0, i = value;
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (i < 0 || i >= dev->eps_num) {
+		dev_dbg(dev->dev, "fail, invalid endpoint\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (dev->eps[i].state == STATE_EP_DISABLED) {
+		dev_dbg(&dev->gadget->dev, "fail, endpoint is not enabled\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (dev->eps[i].disabling) {
+		dev_dbg(&dev->gadget->dev,
+				"fail, disable is in progress\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (dev->eps[i].urb_queued) {
+		dev_dbg(&dev->gadget->dev,
+				"fail, waiting for urb completion\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (usb_endpoint_xfer_isoc(dev->eps[i].ep->desc)) {
+		dev_dbg(&dev->gadget->dev,
+				"fail, can't halt/wedge ISO endpoint\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+
+	if (set && halt) {
+		ret = usb_ep_set_halt(dev->eps[i].ep);
+		if (ret < 0)
+			dev_err(&dev->gadget->dev,
+				"fail, usb_ep_set_halt returned %d\n", ret);
+	} else if (!set && halt) {
+		ret = usb_ep_clear_halt(dev->eps[i].ep);
+		if (ret < 0)
+			dev_err(&dev->gadget->dev,
+				"fail, usb_ep_clear_halt returned %d\n", ret);
+	} else if (set && !halt) {
+		ret = usb_ep_set_wedge(dev->eps[i].ep);
+		if (ret < 0)
+			dev_err(&dev->gadget->dev,
+				"fail, usb_ep_set_wedge returned %d\n", ret);
+	}
+
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static void gadget_ep_complete(struct usb_ep *ep, struct usb_request *req)
+{
+	struct raw_ep *r_ep = (struct raw_ep *)ep->driver_data;
+	struct raw_dev *dev = r_ep->dev;
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (req->status)
+		r_ep->status = req->status;
+	else
+		r_ep->status = req->actual;
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	complete((struct completion *)req->context);
+}
+
+static int raw_process_ep_io(struct raw_dev *dev, struct usb_raw_ep_io *io,
+				void *data, bool in)
+{
+	int ret = 0;
+	unsigned long flags;
+	struct raw_ep *ep;
+	DECLARE_COMPLETION_ONSTACK(done);
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (io->ep >= dev->eps_num) {
+		dev_dbg(&dev->gadget->dev, "fail, invalid endpoint\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	ep = &dev->eps[io->ep];
+	if (ep->state != STATE_EP_ENABLED) {
+		dev_dbg(&dev->gadget->dev, "fail, endpoint is not enabled\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (ep->disabling) {
+		dev_dbg(&dev->gadget->dev,
+				"fail, endpoint is already being disabled\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (ep->urb_queued) {
+		dev_dbg(&dev->gadget->dev, "fail, urb already queued\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if ((in && !ep->ep->caps.dir_in) || (!in && ep->ep->caps.dir_in)) {
+		dev_dbg(&dev->gadget->dev, "fail, wrong direction\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+
+	ep->dev = dev;
+	ep->req->context = &done;
+	ep->req->complete = gadget_ep_complete;
+	ep->req->buf = data;
+	ep->req->length = io->length;
+	ep->req->zero = usb_raw_io_flags_zero(io->flags);
+	ep->urb_queued = true;
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	ret = usb_ep_queue(ep->ep, ep->req, GFP_KERNEL);
+	if (ret) {
+		dev_err(&dev->gadget->dev,
+				"fail, usb_ep_queue returned %d\n", ret);
+		spin_lock_irqsave(&dev->lock, flags);
+		dev->state = STATE_DEV_FAILED;
+		goto out_done;
+	}
+
+	ret = wait_for_completion_interruptible(&done);
+	if (ret) {
+		dev_dbg(&dev->gadget->dev, "wait interrupted\n");
+		usb_ep_dequeue(ep->ep, ep->req);
+		wait_for_completion(&done);
+		spin_lock_irqsave(&dev->lock, flags);
+		goto out_done;
+	}
+
+	spin_lock_irqsave(&dev->lock, flags);
+	ret = ep->status;
+
+out_done:
+	ep->urb_queued = false;
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static int raw_ioctl_ep_write(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0;
+	char *data;
+	struct usb_raw_ep_io io;
+
+	data = raw_alloc_io_data(&io, (void __user *)value, true);
+	if (IS_ERR(data))
+		return PTR_ERR(data);
+	ret = raw_process_ep_io(dev, &io, data, true);
+	kfree(data);
+	return ret;
+}
+
+static int raw_ioctl_ep_read(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0;
+	char *data;
+	struct usb_raw_ep_io io;
+	unsigned int length;
+
+	data = raw_alloc_io_data(&io, (void __user *)value, false);
+	if (IS_ERR(data))
+		return PTR_ERR(data);
+	ret = raw_process_ep_io(dev, &io, data, false);
+	if (ret < 0)
+		goto free;
+
+	length = min(io.length, (unsigned int)ret);
+	if (copy_to_user((void __user *)(value + sizeof(io)), data, length))
+		ret = -EFAULT;
+	else
+		ret = length;
+free:
+	kfree(data);
+	return ret;
+}
+
+static int raw_ioctl_configure(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0;
+	unsigned long flags;
+
+	if (value)
+		return -EINVAL;
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	usb_gadget_set_state(dev->gadget, USB_STATE_CONFIGURED);
+
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static int raw_ioctl_vbus_draw(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0;
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	usb_gadget_vbus_draw(dev->gadget, 2 * value);
+
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static void fill_ep_caps(struct usb_ep_caps *caps,
+				struct usb_raw_ep_caps *raw_caps)
+{
+	raw_caps->type_control = caps->type_control;
+	raw_caps->type_iso = caps->type_iso;
+	raw_caps->type_bulk = caps->type_bulk;
+	raw_caps->type_int = caps->type_int;
+	raw_caps->dir_in = caps->dir_in;
+	raw_caps->dir_out = caps->dir_out;
+}
+
+static void fill_ep_limits(struct usb_ep *ep, struct usb_raw_ep_limits *limits)
+{
+	limits->maxpacket_limit = ep->maxpacket_limit;
+	limits->max_streams = ep->max_streams;
+}
+
+static int raw_ioctl_eps_info(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0, i;
+	unsigned long flags;
+	struct usb_raw_eps_info *info;
+	struct raw_ep *ep;
+
+	info = kmalloc(sizeof(*info), GFP_KERNEL);
+	if (!info) {
+		ret = -ENOMEM;
+		goto out;
+	}
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		ret = -EINVAL;
+		spin_unlock_irqrestore(&dev->lock, flags);
+		goto out_free;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		ret = -EBUSY;
+		spin_unlock_irqrestore(&dev->lock, flags);
+		goto out_free;
+	}
+
+	memset(info, 0, sizeof(*info));
+	for (i = 0; i < dev->eps_num; i++) {
+		ep = &dev->eps[i];
+		strscpy(&info->eps[i].name[0], ep->ep->name,
+				USB_RAW_EP_NAME_MAX);
+		info->eps[i].addr = ep->addr;
+		fill_ep_caps(&ep->ep->caps, &info->eps[i].caps);
+		fill_ep_limits(ep->ep, &info->eps[i].limits);
+	}
+	ret = dev->eps_num;
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	if (copy_to_user((void __user *)value, info, sizeof(*info)))
+		ret = -EFAULT;
+
+out_free:
+	kfree(info);
+out:
+	return ret;
+}
+
+static long raw_ioctl(struct file *fd, unsigned int cmd, unsigned long value)
+{
+	struct raw_dev *dev = fd->private_data;
+	int ret = 0;
+
+	if (!dev)
+		return -EBUSY;
+
+	switch (cmd) {
+	case USB_RAW_IOCTL_INIT:
+		ret = raw_ioctl_init(dev, value);
+		break;
+	case USB_RAW_IOCTL_RUN:
+		ret = raw_ioctl_run(dev, value);
+		break;
+	case USB_RAW_IOCTL_EVENT_FETCH:
+		ret = raw_ioctl_event_fetch(dev, value);
+		break;
+	case USB_RAW_IOCTL_EP0_WRITE:
+		ret = raw_ioctl_ep0_write(dev, value);
+		break;
+	case USB_RAW_IOCTL_EP0_READ:
+		ret = raw_ioctl_ep0_read(dev, value);
+		break;
+	case USB_RAW_IOCTL_EP_ENABLE:
+		ret = raw_ioctl_ep_enable(dev, value);
+		break;
+	case USB_RAW_IOCTL_EP_DISABLE:
+		ret = raw_ioctl_ep_disable(dev, value);
+		break;
+	case USB_RAW_IOCTL_EP_WRITE:
+		ret = raw_ioctl_ep_write(dev, value);
+		break;
+	case USB_RAW_IOCTL_EP_READ:
+		ret = raw_ioctl_ep_read(dev, value);
+		break;
+	case USB_RAW_IOCTL_CONFIGURE:
+		ret = raw_ioctl_configure(dev, value);
+		break;
+	case USB_RAW_IOCTL_VBUS_DRAW:
+		ret = raw_ioctl_vbus_draw(dev, value);
+		break;
+	case USB_RAW_IOCTL_EPS_INFO:
+		ret = raw_ioctl_eps_info(dev, value);
+		break;
+	case USB_RAW_IOCTL_EP0_STALL:
+		ret = raw_ioctl_ep0_stall(dev, value);
+		break;
+	case USB_RAW_IOCTL_EP_SET_HALT:
+		ret = raw_ioctl_ep_set_clear_halt_wedge(
+					dev, value, true, true);
+		break;
+	case USB_RAW_IOCTL_EP_CLEAR_HALT:
+		ret = raw_ioctl_ep_set_clear_halt_wedge(
+					dev, value, false, true);
+		break;
+	case USB_RAW_IOCTL_EP_SET_WEDGE:
+		ret = raw_ioctl_ep_set_clear_halt_wedge(
+					dev, value, true, false);
+		break;
+	default:
+		ret = -EINVAL;
+	}
+
+	return ret;
+}
+
+/*----------------------------------------------------------------------*/
+
+static const struct file_operations raw_fops = {
+	.open =			raw_open,
+	.unlocked_ioctl =	raw_ioctl,
+	.compat_ioctl =		raw_ioctl,
+	.release =		raw_release,
+	.llseek =		no_llseek,
+};
+
+static struct miscdevice raw_misc_device = {
+	.minor = MISC_DYNAMIC_MINOR,
+	.name = DRIVER_NAME,
+	.fops = &raw_fops,
+};
+
+module_misc_device(raw_misc_device);
diff --git a/drivers/usb/gadget/udc/dummy_hcd.c b/drivers/usb/gadget/udc/dummy_hcd.c
index a49c27b..0f744b3 100644
--- a/drivers/usb/gadget/udc/dummy_hcd.c
+++ b/drivers/usb/gadget/udc/dummy_hcd.c
@@ -187,31 +187,31 @@ static const struct {
 		USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_IN)),
 
 	/* and now some generic EPs so we have enough in multi config */
-	EP_INFO("ep3out",
+	EP_INFO("ep-aout",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
-	EP_INFO("ep4in",
+	EP_INFO("ep-bin",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
-	EP_INFO("ep5out",
+	EP_INFO("ep-cout",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
-	EP_INFO("ep6out",
+	EP_INFO("ep-dout",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
-	EP_INFO("ep7in",
+	EP_INFO("ep-ein",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
-	EP_INFO("ep8out",
+	EP_INFO("ep-fout",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
-	EP_INFO("ep9in",
+	EP_INFO("ep-gin",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
-	EP_INFO("ep10out",
+	EP_INFO("ep-hout",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
-	EP_INFO("ep11out",
+	EP_INFO("ep-iout",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
-	EP_INFO("ep12in",
+	EP_INFO("ep-jin",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
-	EP_INFO("ep13out",
+	EP_INFO("ep-kout",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
-	EP_INFO("ep14in",
+	EP_INFO("ep-lin",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
-	EP_INFO("ep15out",
+	EP_INFO("ep-mout",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
 
 #undef EP_INFO
diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
index 79b2e79..ffb8165 100644
--- a/drivers/usb/host/Kconfig
+++ b/drivers/usb/host/Kconfig
@@ -42,6 +42,15 @@
        depends on USB_PCI
        default y
 
+config USB_XHCI_PCI_RENESAS
+	tristate "Renesas USB XHCI Driver"
+	depends on USB_XHCI_PCI
+	---help---
+	  Say 'Y' to enable the support for renesas USB XHCI Driver if
+	  you have such a device. These devices need additional firmware,
+	  make sure that is available.
+	  If unsure, say 'N'.
+
 config USB_XHCI_PLATFORM
 	tristate "Generic xHCI driver for a platform device"
 	select USB_XHCI_RCAR if ARCH_RENESAS
diff --git a/drivers/usb/host/Makefile b/drivers/usb/host/Makefile
index b191361..b6955d5 100644
--- a/drivers/usb/host/Makefile
+++ b/drivers/usb/host/Makefile
@@ -70,6 +70,7 @@
 obj-$(CONFIG_USB_UHCI_HCD)	+= uhci-hcd.o
 obj-$(CONFIG_USB_FHCI_HCD)	+= fhci.o
 obj-$(CONFIG_USB_XHCI_HCD)	+= xhci-hcd.o
+obj-$(CONFIG_USB_XHCI_PCI_RENESAS)	+= xhci-pci-renesas.o
 obj-$(CONFIG_USB_XHCI_PCI)	+= xhci-pci.o
 obj-$(CONFIG_USB_XHCI_PLATFORM) += xhci-plat-hcd.o
 obj-$(CONFIG_USB_XHCI_HISTB)	+= xhci-histb.o
diff --git a/drivers/usb/host/xhci-pci-renesas.c b/drivers/usb/host/xhci-pci-renesas.c
new file mode 100644
index 0000000..02fcb01
--- /dev/null
+++ b/drivers/usb/host/xhci-pci-renesas.c
@@ -0,0 +1,985 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (C) 2019-2020 Linaro Limited */
+
+#include <linux/acpi.h>
+#include <linux/debugfs.h>
+#include <linux/firmware.h>
+#include <linux/module.h>
+#include <linux/pci.h>
+#include <linux/slab.h>
+#include <asm/unaligned.h>
+
+#include "xhci.h"
+#include "xhci-trace.h"
+#include "xhci-pci.h"
+
+#define RENESAS_FW_VERSION				0x6C
+#define RENESAS_ROM_CONFIG				0xF0
+#define RENESAS_FW_STATUS				0xF4
+#define RENESAS_FW_STATUS_MSB				0xF5
+#define RENESAS_ROM_STATUS				0xF6
+#define RENESAS_ROM_STATUS_MSB				0xF7
+#define RENESAS_DATA0					0xF8
+#define RENESAS_DATA1					0xFC
+
+#define RENESAS_FW_VERSION_FIELD			GENMASK(23, 7)
+#define RENESAS_FW_VERSION_OFFSET			8
+
+#define RENESAS_FW_STATUS_DOWNLOAD_ENABLE		BIT(0)
+#define RENESAS_FW_STATUS_LOCK				BIT(1)
+#define RENESAS_FW_STATUS_RESULT			GENMASK(6, 4)
+  #define RENESAS_FW_STATUS_INVALID			0
+  #define RENESAS_FW_STATUS_SUCCESS			BIT(4)
+  #define RENESAS_FW_STATUS_ERROR			BIT(5)
+#define RENESAS_FW_STATUS_SET_DATA0			BIT(8)
+#define RENESAS_FW_STATUS_SET_DATA1			BIT(9)
+
+#define RENESAS_ROM_STATUS_ACCESS			BIT(0)
+#define RENESAS_ROM_STATUS_ERASE			BIT(1)
+#define RENESAS_ROM_STATUS_RELOAD			BIT(2)
+#define RENESAS_ROM_STATUS_RESULT			GENMASK(6, 4)
+  #define RENESAS_ROM_STATUS_INVALID			0
+  #define RENESAS_ROM_STATUS_SUCCESS			BIT(4)
+  #define RENESAS_ROM_STATUS_ERROR			BIT(5)
+#define RENESAS_ROM_STATUS_SET_DATA0			BIT(8)
+#define RENESAS_ROM_STATUS_SET_DATA1			BIT(9)
+#define RENESAS_ROM_STATUS_ROM_EXISTS			BIT(15)
+
+#define RENESAS_ROM_ERASE_MAGIC				0x5A65726F
+#define RENESAS_ROM_WRITE_MAGIC				0x53524F4D
+
+#define RENESAS_RETRY	10000
+#define RENESAS_DELAY	10
+
+static struct hc_driver __read_mostly xhci_pci_hc_driver;
+
+static const struct xhci_driver_overrides xhci_pci_overrides __initconst = {
+	.reset = xhci_pci_setup,
+};
+
+static const struct renesas_fw_entry {
+	const char *firmware_name;
+	u16 device;
+	u8 revision;
+	u16 expected_version;
+} renesas_fw_table[] = {
+	/*
+	 * Only the uPD720201K8-711-BAC-A or uPD720202K8-711-BAA-A
+	 * are listed in R19UH0078EJ0500 Rev.5.00 as devices which
+	 * need the software loader.
+	 *
+	 * PP2U/ReleaseNote_USB3-201-202-FW.txt:
+	 *
+	 * Note: This firmware is for the following devices.
+	 *  - uPD720201 ES 2.0 sample whose revision ID is 2.
+	 *  - uPD720201 ES 2.1 sample & CS sample & Mass product, ID is 3.
+	 *  - uPD720202 ES 2.0 sample & CS sample & Mass product, ID is 2.
+	 *
+	 *  Entry expected_version should be kept in decreasing order for a
+	 *  chip, so that driver will pick latest version and if that fails
+	 *  then next one will be picked
+	 */
+	{ "K2013080.mem", 0x0014, 0x02, 0x2013 },
+	{ "K2026090.mem", 0x0014, 0x03, 0x2026 },
+	{ "K2013080.mem", 0x0014, 0x03, 0x2013 },
+	{ "K2026090.mem", 0x0015, 0x02, 0x2026 },
+	{ "K2013080.mem", 0x0015, 0x02, 0x2013 },
+};
+
+MODULE_FIRMWARE("K2013080.mem");
+MODULE_FIRMWARE("K2026090.mem");
+
+static const struct renesas_fw_entry *renesas_needs_fw_dl(struct pci_dev *dev)
+{
+	const struct renesas_fw_entry *entry;
+	size_t i;
+
+	/* This loader will only work with a RENESAS device. */
+	if (!(dev->vendor == PCI_VENDOR_ID_RENESAS))
+		return NULL;
+
+	for (i = 0; i < ARRAY_SIZE(renesas_fw_table); i++) {
+		entry = &renesas_fw_table[i];
+		if (entry->device == dev->device &&
+		    entry->revision == dev->revision)
+			return entry;
+	}
+
+	return NULL;
+}
+
+static const struct
+renesas_fw_entry *renesas_get_next_entry(struct pci_dev *dev,
+					 const struct renesas_fw_entry *entry)
+{
+	const struct renesas_fw_entry *next_entry;
+	size_t i;
+
+	for (i = 0; i < ARRAY_SIZE(renesas_fw_table); i++) {
+		next_entry = &renesas_fw_table[i];
+		if (next_entry->device == dev->device &&
+		    next_entry->revision == dev->revision &&
+		    next_entry->expected_version < entry->expected_version)
+			return next_entry;
+	}
+
+	return NULL;
+}
+
+static int renesas_fw_download_image(struct pci_dev *dev,
+				     const u32 *fw,
+				     size_t step)
+{
+	size_t i;
+	int err;
+	u8 fw_status;
+	bool data0_or_data1;
+
+	/*
+	 * The hardware does alternate between two 32-bit pages.
+	 * (This is because each row of the firmware is 8 bytes).
+	 *
+	 * for even steps we use DATA0, for odd steps DATA1.
+	 */
+	data0_or_data1 = (step & 1) == 1;
+
+	/* step+1. Read "Set DATAX" and confirm it is cleared. */
+	for (i = 0; i < RENESAS_RETRY; i++) {
+		err = pci_read_config_byte(dev, RENESAS_FW_STATUS_MSB,
+					   &fw_status);
+		if (err)
+			return pcibios_err_to_errno(err);
+		if (!(fw_status & BIT(data0_or_data1)))
+			break;
+
+		udelay(RENESAS_DELAY);
+	}
+	if (i == RENESAS_RETRY)
+		return -ETIMEDOUT;
+
+	/*
+	 * step+2. Write FW data to "DATAX".
+	 * "LSB is left" => force little endian
+	 */
+	err = pci_write_config_dword(dev, data0_or_data1 ?
+				     RENESAS_DATA1 : RENESAS_DATA0,
+				     (__force u32)cpu_to_le32(fw[step]));
+	if (err)
+		return pcibios_err_to_errno(err);
+
+	udelay(100);
+
+	/* step+3. Set "Set DATAX". */
+	err = pci_write_config_byte(dev, RENESAS_FW_STATUS_MSB,
+				    BIT(data0_or_data1));
+	if (err)
+		return pcibios_err_to_errno(err);
+
+	return 0;
+}
+
+static int renesas_fw_verify(struct pci_dev *dev,
+			     const void *fw_data,
+			     size_t length)
+{
+	const struct renesas_fw_entry *entry = renesas_needs_fw_dl(dev);
+	u16 fw_version_pointer;
+	u16 fw_version;
+
+	if (!entry)
+		return -EINVAL;
+
+	/*
+	 * The Firmware's Data Format is describe in
+	 * "6.3 Data Format" R19UH0078EJ0500 Rev.5.00 page 124
+	 */
+
+	/*
+	 * The bootrom chips of the big brother have sizes up to 64k, let's
+	 * assume that's the biggest the firmware can get.
+	 */
+	if (length < 0x1000 || length >= 0x10000) {
+		dev_err(&dev->dev, "firmware is size %zd is not (4k - 64k).",
+			length);
+		return -EINVAL;
+	}
+
+	/* The First 2 bytes are fixed value (55aa). "LSB on Left" */
+	if (get_unaligned_le16(fw_data) != 0x55aa) {
+		dev_err(&dev->dev, "no valid firmware header found.");
+		return -EINVAL;
+	}
+
+	/* verify the firmware version position and print it. */
+	fw_version_pointer = get_unaligned_le16(fw_data + 4);
+	if (fw_version_pointer + 2 >= length) {
+		dev_err(&dev->dev,
+			"firmware version pointer is outside of the firmware image.");
+		return -EINVAL;
+	}
+
+	fw_version = get_unaligned_le16(fw_data + fw_version_pointer);
+	dev_dbg(&dev->dev, "got firmware version: %02x.", fw_version);
+
+	if (fw_version != entry->expected_version) {
+		dev_err(&dev->dev,
+			"firmware version mismatch, expected version: %02x.",
+			entry->expected_version);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static void debugfs_init(struct pci_dev *pdev);
+
+static int renesas_check_rom_state(struct pci_dev *pdev)
+{
+	const struct renesas_fw_entry *entry;
+	u16 rom_state;
+	u32 version;
+	bool valid_version = false;
+	int err, i;
+
+	/* check FW version */
+	err = pci_read_config_dword(pdev, RENESAS_FW_VERSION, &version);
+	if (err)
+		return pcibios_err_to_errno(err);
+
+	version &= RENESAS_FW_VERSION_FIELD;
+	version = version >> RENESAS_FW_VERSION_OFFSET;
+	dev_dbg(&pdev->dev, "Found FW version loaded is %x\n", version);
+
+	/* treat version in renesas_fw_table as correct ones */
+	for (i = 0; i < ARRAY_SIZE(renesas_fw_table); i++) {
+		entry = &renesas_fw_table[i];
+		if (version == entry->expected_version) {
+			dev_dbg(&pdev->dev, "Detected valid ROM version..\n");
+			valid_version = true;
+			debugfs_init(pdev);
+		}
+	}
+	if (valid_version == false)
+		dev_dbg(&pdev->dev, "Didn't find valid ROM version\n");
+
+	/*
+	 * Test if ROM is present and loaded, if so we can skip everything
+	 */
+	err = pci_read_config_word(pdev, RENESAS_ROM_STATUS, &rom_state);
+	if (err)
+		return pcibios_err_to_errno(err);
+
+	if (rom_state & BIT(15)) {
+		/* ROM exists */
+		dev_dbg(&pdev->dev, "ROM exists\n");
+
+		/* Check the "Result Code" Bits (6:4) and act accordingly */
+		switch (rom_state & RENESAS_ROM_STATUS_RESULT) {
+		case RENESAS_ROM_STATUS_SUCCESS:
+			dev_dbg(&pdev->dev, "Success ROM load...");
+			/* we have valid version and status so success */
+			if (valid_version)
+				return 0;
+			break;
+
+		case RENESAS_ROM_STATUS_INVALID: /* No result yet */
+			dev_dbg(&pdev->dev, "No result as it is ROM...");
+			/* we have valid version and status so success */
+			if (valid_version)
+				return 0;
+			break;
+
+		case RENESAS_ROM_STATUS_ERROR: /* Error State */
+		default: /* All other states are marked as "Reserved states" */
+			dev_err(&pdev->dev, "Invalid ROM..");
+			break;
+		}
+	}
+
+	return -EIO;
+}
+
+static int renesas_fw_check_running(struct pci_dev *pdev)
+{
+	int err;
+	u8 fw_state;
+
+	/* Check if device has ROM and loaded, if so skip everything */
+	err = renesas_check_rom_state(pdev);
+	if (!err)
+		return err;
+
+	/*
+	 * Test if the device is actually needing the firmware. As most
+	 * BIOSes will initialize the device for us. If the device is
+	 * initialized.
+	 */
+	err = pci_read_config_byte(pdev, RENESAS_FW_STATUS, &fw_state);
+	if (err)
+		return pcibios_err_to_errno(err);
+
+	/*
+	 * Check if "FW Download Lock" is locked. If it is and the FW is
+	 * ready we can simply continue. If the FW is not ready, we have
+	 * to give up.
+	 */
+	if (fw_state & RENESAS_FW_STATUS_LOCK) {
+		dev_dbg(&pdev->dev, "FW Download Lock is engaged.");
+
+		if (fw_state & RENESAS_FW_STATUS_SUCCESS)
+			return 0;
+
+		dev_err(&pdev->dev,
+			"FW Download Lock is set and FW is not ready. Giving Up.");
+		return -EIO;
+	}
+
+	/*
+	 * Check if "FW Download Enable" is set. If someone (us?) tampered
+	 * with it and it can't be resetted, we have to give up too... and
+	 * ask for a forgiveness and a reboot.
+	 */
+	if (fw_state & RENESAS_FW_STATUS_DOWNLOAD_ENABLE) {
+		dev_err(&pdev->dev,
+			"FW Download Enable is stale. Giving Up (poweroff/reboot needed).");
+		return -EIO;
+	}
+
+	/* Otherwise, Check the "Result Code" Bits (6:4) and act accordingly */
+	switch (fw_state & RENESAS_FW_STATUS_RESULT) {
+	case 0: /* No result yet */
+		dev_dbg(&pdev->dev, "FW is not ready/loaded yet.");
+
+		/* tell the caller, that this device needs the firmware. */
+		return 1;
+
+	case RENESAS_FW_STATUS_SUCCESS: /* Success, device should be working. */
+		dev_dbg(&pdev->dev, "FW is ready.");
+		return 0;
+
+	case RENESAS_FW_STATUS_ERROR: /* Error State */
+		dev_err(&pdev->dev,
+			"hardware is in an error state. Giving up (poweroff/reboot needed).");
+		return -ENODEV;
+
+	default: /* All other states are marked as "Reserved states" */
+		dev_err(&pdev->dev,
+			"hardware is in an invalid state %lx. Giving up (poweroff/reboot needed).",
+			(fw_state & RENESAS_FW_STATUS_RESULT) >> 4);
+		return -EINVAL;
+	}
+}
+
+static int renesas_fw_download(struct pci_dev *pdev,
+			       const struct firmware *fw)
+{
+	const u32 *fw_data = (const u32 *)fw->data;
+	size_t i;
+	int err;
+	u8 fw_status;
+
+	/*
+	 * For more information and the big picture: please look at the
+	 * "Firmware Download Sequence" in "7.1 FW Download Interface"
+	 * of R19UH0078EJ0500 Rev.5.00 page 131
+	 */
+
+	/*
+	 * 0. Set "FW Download Enable" bit in the
+	 * "FW Download Control & Status Register" at 0xF4
+	 */
+	err = pci_write_config_byte(pdev, RENESAS_FW_STATUS,
+				    RENESAS_FW_STATUS_DOWNLOAD_ENABLE);
+	if (err)
+		return pcibios_err_to_errno(err);
+
+	/* 1 - 10 follow one step after the other. */
+	for (i = 0; i < fw->size / 4; i++) {
+		err = renesas_fw_download_image(pdev, fw_data, i);
+		if (err) {
+			dev_err(&pdev->dev,
+				"Firmware Download Step %zd failed at position %zd bytes with (%d).",
+				i, i * 4, err);
+			return err;
+		}
+	}
+
+	/*
+	 * This sequence continues until the last data is written to
+	 * "DATA0" or "DATA1". Naturally, we wait until "SET DATA0/1"
+	 * is cleared by the hardware beforehand.
+	 */
+	for (i = 0; i < RENESAS_RETRY; i++) {
+		err = pci_read_config_byte(pdev, RENESAS_FW_STATUS_MSB,
+					   &fw_status);
+		if (err)
+			return pcibios_err_to_errno(err);
+		if (!(fw_status & (BIT(0) | BIT(1))))
+			break;
+
+		udelay(RENESAS_DELAY);
+	}
+	if (i == RENESAS_RETRY)
+		dev_warn(&pdev->dev, "Final Firmware Download step timed out.");
+
+	/*
+	 * 11. After finishing writing the last data of FW, the
+	 * System Software must clear "FW Download Enable"
+	 */
+	err = pci_write_config_byte(pdev, RENESAS_FW_STATUS, 0);
+	if (err)
+		return pcibios_err_to_errno(err);
+
+	/* 12. Read "Result Code" and confirm it is good. */
+	for (i = 0; i < RENESAS_RETRY; i++) {
+		err = pci_read_config_byte(pdev, RENESAS_FW_STATUS, &fw_status);
+		if (err)
+			return pcibios_err_to_errno(err);
+		if (fw_status & RENESAS_FW_STATUS_SUCCESS)
+			break;
+
+		udelay(RENESAS_DELAY);
+	}
+	if (i == RENESAS_RETRY) {
+		/* Timed out / Error - let's see if we can fix this */
+		err = renesas_fw_check_running(pdev);
+		switch (err) {
+		case 0: /*
+			 * we shouldn't end up here.
+			 * maybe it took a little bit longer.
+			 * But all should be well?
+			 */
+			break;
+
+		case 1: /* (No result yet! */
+			return -ETIMEDOUT;
+
+		default:
+			return err;
+		}
+	}
+	/*
+	 * Optional last step: Engage Firmware Lock
+	 *
+	 * err = pci_write_config_byte(pdev, 0xF4, BIT(2));
+	 * if (err)
+	 *	return pcibios_err_to_errno(err);
+	 */
+
+	return 0;
+}
+
+struct renesas_fw_ctx {
+	struct pci_dev *pdev;
+	const struct pci_device_id *id;
+	bool resume;
+	const struct renesas_fw_entry *entry;
+};
+
+static bool renesas_check_rom(struct pci_dev *pdev)
+{
+	u16 rom_status;
+	int retval;
+
+	/* 1. Check if external ROM exists */
+	retval = pci_read_config_word(pdev, RENESAS_ROM_STATUS, &rom_status);
+	if (retval)
+		return false;
+
+	rom_status &= RENESAS_ROM_STATUS_ROM_EXISTS;
+	if (rom_status) {
+		dev_dbg(&pdev->dev, "External ROM exists\n");
+		return true; /* External ROM exists */
+	}
+
+	return false;
+}
+
+static void renesas_rom_erase(struct pci_dev *pdev)
+{
+	int retval, i;
+	u8 status;
+
+	dev_dbg(&pdev->dev, "Performing ROM Erase...\n");
+	retval = pci_write_config_dword(pdev, RENESAS_DATA0,
+					RENESAS_ROM_ERASE_MAGIC);
+	if (retval) {
+		dev_err(&pdev->dev, "ROM erase, magic word write failed: %d\n",
+			pcibios_err_to_errno(retval));
+		return;
+	}
+
+	retval = pci_read_config_byte(pdev, RENESAS_ROM_STATUS, &status);
+	if (retval) {
+		dev_err(&pdev->dev, "ROM status read failed: %d\n",
+			pcibios_err_to_errno(retval));
+		return;
+	}
+	status |= RENESAS_ROM_STATUS_ERASE;
+	retval = pci_write_config_byte(pdev, RENESAS_ROM_STATUS, status);
+	if (retval) {
+		dev_err(&pdev->dev, "ROM erase set word write failed\n");
+		return;
+	}
+
+	/* sleep a bit while ROM is erased */
+	msleep(20);
+
+	for (i = 0; i < RENESAS_RETRY; i++) {
+		retval = pci_read_config_byte(pdev, RENESAS_ROM_STATUS,
+					      &status);
+		status &= RENESAS_ROM_STATUS_ERASE;
+		if (!status)
+			break;
+
+		mdelay(RENESAS_DELAY);
+	}
+
+	if (i == RENESAS_RETRY)
+		dev_dbg(&pdev->dev, "Chip erase timedout: %x\n", status);
+
+	dev_dbg(&pdev->dev, "ROM Erase... Done success\n");
+}
+
+static int debugfs_rom_erase(void *data, u64 value)
+{
+	struct pci_dev *pdev = data;
+
+	if (value == 1) {
+		dev_dbg(&pdev->dev, "Userspace requested ROM erase\n");
+		renesas_rom_erase(pdev);
+		return 0;
+	}
+	return -EINVAL;
+}
+DEFINE_DEBUGFS_ATTRIBUTE(rom_erase_ops, NULL, debugfs_rom_erase, "%llu\n");
+
+static struct dentry *debugfs_root;
+
+static void debugfs_init(struct pci_dev *pdev)
+{
+	debugfs_root = debugfs_create_dir("renesas-usb", NULL);
+
+	debugfs_create_file("rom_erase", 0200, debugfs_root,
+			    pdev, &rom_erase_ops);
+}
+
+static void debugfs_exit(void)
+{
+	debugfs_remove_recursive(debugfs_root);
+}
+
+static bool renesas_download_rom(struct pci_dev *pdev,
+				 const u32 *fw, size_t step)
+{
+	bool data0_or_data1;
+	u8 fw_status;
+	size_t i;
+	int err;
+
+	/*
+	 * The hardware does alternate between two 32-bit pages.
+	 * (This is because each row of the firmware is 8 bytes).
+	 *
+	 * for even steps we use DATA0, for odd steps DATA1.
+	 */
+	data0_or_data1 = (step & 1) == 1;
+
+	/* Read "Set DATAX" and confirm it is cleared. */
+	for (i = 0; i < RENESAS_RETRY; i++) {
+		err = pci_read_config_byte(pdev, RENESAS_ROM_STATUS_MSB,
+					   &fw_status);
+		if (err) {
+			dev_err(&pdev->dev, "Read ROM Status failed: %d\n",
+				pcibios_err_to_errno(err));
+			return false;
+		}
+		if (!(fw_status & BIT(data0_or_data1)))
+			break;
+
+		udelay(RENESAS_DELAY);
+	}
+	if (i == RENESAS_RETRY) {
+		dev_err(&pdev->dev, "Timeout for Set DATAX step: %zd\n", step);
+		return false;
+	}
+
+	/*
+	 * Write FW data to "DATAX".
+	 * "LSB is left" => force little endian
+	 */
+	err = pci_write_config_dword(pdev, data0_or_data1 ?
+				     RENESAS_DATA1 : RENESAS_DATA0,
+				     (__force u32)cpu_to_le32(fw[step]));
+	if (err) {
+		dev_err(&pdev->dev, "Write to DATAX failed: %d\n",
+			pcibios_err_to_errno(err));
+		return false;
+	}
+
+	udelay(100);
+
+	/* Set "Set DATAX". */
+	err = pci_write_config_byte(pdev, RENESAS_ROM_STATUS_MSB,
+				    BIT(data0_or_data1));
+	if (err) {
+		dev_err(&pdev->dev, "Write config for DATAX failed: %d\n",
+			pcibios_err_to_errno(err));
+		return false;
+	}
+
+	return true;
+}
+
+static bool renesas_setup_rom(struct pci_dev *pdev, const struct firmware *fw)
+{
+	const u32 *fw_data = (const u32 *)fw->data;
+	int err, i;
+	u8 status;
+
+	/* 2. Write magic word to Data0 */
+	err = pci_write_config_dword(pdev, RENESAS_DATA0,
+				     RENESAS_ROM_WRITE_MAGIC);
+	if (err)
+		return false;
+
+	/* 3. Set External ROM access */
+	err = pci_write_config_byte(pdev, RENESAS_ROM_STATUS,
+				    RENESAS_ROM_STATUS_ACCESS);
+	if (err)
+		goto remove_bypass;
+
+	/* 4. Check the result */
+	err = pci_read_config_byte(pdev, RENESAS_ROM_STATUS, &status);
+	if (err)
+		goto remove_bypass;
+	status &= GENMASK(6, 4);
+	if (status) {
+		dev_err(&pdev->dev,
+			"setting external rom failed: %x\n", status);
+		goto remove_bypass;
+	}
+
+	/* 5 to 16 Write FW to DATA0/1 while checking SetData0/1 */
+	for (i = 0; i < fw->size / 4; i++) {
+		err = renesas_download_rom(pdev, fw_data, i);
+		if (!err) {
+			dev_err(&pdev->dev,
+				"ROM Download Step %d failed at position %d bytes\n",
+				 i, i * 4);
+			goto remove_bypass;
+		}
+	}
+
+	/*
+	 * wait till DATA0/1 is cleared
+	 */
+	for (i = 0; i < RENESAS_RETRY; i++) {
+		err = pci_read_config_byte(pdev, RENESAS_ROM_STATUS_MSB,
+					   &status);
+		if (err)
+			goto remove_bypass;
+		if (!(status & (BIT(0) | BIT(1))))
+			break;
+
+		udelay(RENESAS_DELAY);
+	}
+	if (i == RENESAS_RETRY) {
+		dev_err(&pdev->dev, "Final Firmware ROM Download step timed out\n");
+		goto remove_bypass;
+	}
+
+	/* 17. Remove bypass */
+	err = pci_write_config_byte(pdev, RENESAS_ROM_STATUS, 0);
+	if (err)
+		return false;
+
+	udelay(10);
+
+	/* 18. check result */
+	for (i = 0; i < RENESAS_RETRY; i++) {
+		err = pci_read_config_byte(pdev, RENESAS_ROM_STATUS, &status);
+		if (err) {
+			dev_err(&pdev->dev, "Read ROM status failed:%d\n",
+				pcibios_err_to_errno(err));
+			return false;
+		}
+		status &= RENESAS_ROM_STATUS_RESULT;
+		if (status ==  RENESAS_ROM_STATUS_SUCCESS) {
+			dev_dbg(&pdev->dev, "Download ROM success\n");
+			break;
+		}
+		udelay(RENESAS_DELAY);
+	}
+	if (i == RENESAS_RETRY) { /* Timed out */
+		dev_err(&pdev->dev,
+			"Download to external ROM TO: %x\n", status);
+		return false;
+	}
+
+	dev_dbg(&pdev->dev, "Download to external ROM scuceeded\n");
+
+	/* Last step set Reload */
+	err = pci_write_config_byte(pdev, RENESAS_ROM_STATUS,
+				    RENESAS_ROM_STATUS_RELOAD);
+	if (err) {
+		dev_err(&pdev->dev, "Set ROM execute failed: %d\n",
+			pcibios_err_to_errno(err));
+		return false;
+	}
+
+	/*
+	 * wait till Reload is cleared
+	 */
+	for (i = 0; i < RENESAS_RETRY; i++) {
+		err = pci_read_config_byte(pdev, RENESAS_ROM_STATUS, &status);
+		if (err)
+			return false;
+		if (!(status & RENESAS_ROM_STATUS_RELOAD))
+			break;
+
+		udelay(RENESAS_DELAY);
+	}
+	if (i == RENESAS_RETRY) {
+		dev_err(&pdev->dev, "ROM Exec timed out: %x\n", status);
+		return false;
+	}
+
+	return true;
+
+remove_bypass:
+	pci_write_config_byte(pdev, RENESAS_ROM_STATUS, 0);
+	return false;
+}
+
+static void renesas_fw_callback(const struct firmware *fw,
+				void *context)
+{
+	struct renesas_fw_ctx *ctx = context;
+	struct pci_dev *pdev = ctx->pdev;
+	struct device *parent = pdev->dev.parent;
+	const struct renesas_fw_entry *next_entry;
+	bool rom;
+	int err;
+
+	if (!fw) {
+		dev_err(&pdev->dev, "firmware failed to load\n");
+		/*
+		 * we didn't find firmware, check if we have another
+		 * entry for this device
+		 */
+		next_entry = renesas_get_next_entry(ctx->pdev, ctx->entry);
+		if (next_entry) {
+			ctx->entry = next_entry;
+			dev_dbg(&pdev->dev, "Found next entry, requesting: %s\n",
+				next_entry->firmware_name);
+			request_firmware_nowait(THIS_MODULE, 1,
+						next_entry->firmware_name,
+						&pdev->dev, GFP_KERNEL,
+						ctx, renesas_fw_callback);
+			return;
+		} else {
+			goto cleanup;
+		}
+	}
+
+	err = renesas_fw_verify(pdev, fw->data, fw->size);
+	if (err)
+		goto cleanup;
+
+	/* Check if the device has external ROM */
+	rom = renesas_check_rom(pdev);
+	if (rom) {
+		/* perfrom chip erase first */
+		renesas_rom_erase(pdev);
+
+		/* lets try loading fw on ROM first */
+		rom = renesas_setup_rom(pdev, fw);
+		if (!rom) {
+			dev_err(&pdev->dev,
+				"ROM load failed, falling back on FW load\n");
+		} else {
+			dev_dbg(&pdev->dev, "ROM load done..\n");
+
+			release_firmware(fw);
+			goto do_probe;
+		}
+	}
+
+	err = renesas_fw_download(pdev, fw);
+	release_firmware(fw);
+	if (err) {
+		dev_err(&pdev->dev, "firmware failed to download (%d).", err);
+		goto cleanup;
+	}
+
+do_probe:
+	if (ctx->resume)
+		return;
+
+	err = xhci_pci_probe(pdev, ctx->id);
+	if (!err) {
+		/* everything worked */
+		devm_kfree(&pdev->dev, ctx);
+		return;
+	}
+
+cleanup:
+	/* in case of an error - fall through */
+	dev_info(&pdev->dev, "Unloading driver");
+
+	if (parent)
+		device_lock(parent);
+
+	device_release_driver(&pdev->dev);
+
+	if (parent)
+		device_unlock(parent);
+
+	pci_dev_put(pdev);
+}
+
+static int renesas_fw_alive_check(struct pci_dev *pdev)
+{
+	const struct renesas_fw_entry *entry;
+
+	/* check if we have a eligible RENESAS' uPD720201/2 w/o FW. */
+	entry = renesas_needs_fw_dl(pdev);
+	if (!entry)
+		return 0;
+
+	return renesas_fw_check_running(pdev);
+}
+
+static int renesas_fw_download_to_hw(struct pci_dev *pdev,
+				     const struct pci_device_id *id,
+				     bool do_resume)
+{
+	const struct renesas_fw_entry *entry;
+	struct renesas_fw_ctx *ctx;
+	int err;
+
+	/* check if we have a eligible RENESAS' uPD720201/2 w/o FW. */
+	entry = renesas_needs_fw_dl(pdev);
+	if (!entry)
+		return 0;
+
+	err = renesas_fw_check_running(pdev);
+	/* Continue ahead, if the firmware is already running. */
+	if (err == 0)
+		return 0;
+
+	if (err != 1)
+		return err;
+
+	ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL);
+	if (!ctx)
+		return -ENOMEM;
+	ctx->pdev = pdev;
+	ctx->resume = do_resume;
+	ctx->id = id;
+	ctx->entry = entry;
+
+	pci_dev_get(pdev);
+	err = request_firmware_nowait(THIS_MODULE, 1, entry->firmware_name,
+				      &pdev->dev, GFP_KERNEL,
+				      ctx, renesas_fw_callback);
+	if (err) {
+		pci_dev_put(pdev);
+		return err;
+	}
+
+	/*
+	 * The renesas_fw_callback() callback will continue the probe
+	 * process, once it aquires the firmware.
+	 */
+	return 1;
+}
+
+static int renesas_xhci_pci_probe(struct pci_dev *dev,
+				  const struct pci_device_id *id)
+{
+	int retval;
+
+	/*
+	 * Check if this device is a RENESAS uPD720201/2 device.
+	 * Otherwise, we can continue with xhci_pci_probe as usual.
+	 */
+	retval = renesas_fw_download_to_hw(dev, id, false);
+	switch (retval) {
+	case 0:
+		break;
+
+	case 1: /* let it load the firmware and recontinue the probe. */
+		return 0;
+
+	default:
+		return retval;
+	};
+
+	return xhci_pci_probe(dev, id);
+}
+
+static void renesas_xhci_pci_remove(struct pci_dev *dev)
+{
+	debugfs_exit();
+
+	if (renesas_fw_alive_check(dev)) {
+		/*
+		 * bail out early, if this was a renesas device w/o FW.
+		 * Else we might hit the NMI watchdog in xhci_handsake
+		 * during xhci_reset as part of the driver's unloading.
+		 * which we forced in the renesas_fw_callback().
+		 */
+		return;
+	}
+
+	xhci_pci_remove(dev);
+}
+
+static const struct pci_device_id pci_ids[] = {
+	{ PCI_DEVICE(0x1912, 0x0014),
+		.driver_data =	(unsigned long)&xhci_pci_hc_driver,
+	},
+	{ PCI_DEVICE(0x1912, 0x0015),
+		.driver_data =	(unsigned long)&xhci_pci_hc_driver,
+	},
+	{ /* sentinal */ }
+};
+MODULE_DEVICE_TABLE(pci, pci_ids);
+
+static struct pci_driver renesas_xhci_pci_driver = {
+	.name =		"renesas xhci",
+	.id_table =	pci_ids,
+
+	.probe =	renesas_xhci_pci_probe,
+	.remove =	renesas_xhci_pci_remove,
+	/* suspend and resume implemented later */
+
+	.shutdown =	usb_hcd_pci_shutdown,
+#ifdef CONFIG_PM
+	.driver = {
+		.pm = &usb_hcd_pci_pm_ops
+	},
+#endif
+};
+
+static int __init xhci_pci_init(void)
+{
+	xhci_init_driver(&xhci_pci_hc_driver, &xhci_pci_overrides);
+#ifdef CONFIG_PM
+	xhci_pci_hc_driver.pci_suspend = xhci_pci_suspend;
+	xhci_pci_hc_driver.pci_resume = xhci_pci_resume;
+#endif
+	return pci_register_driver(&renesas_xhci_pci_driver);
+}
+module_init(xhci_pci_init);
+
+static void __exit xhci_pci_exit(void)
+{
+	pci_unregister_driver(&renesas_xhci_pci_driver);
+}
+module_exit(xhci_pci_exit);
+
+MODULE_DESCRIPTION("xHCI PCI Host Controller Driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
index d08b007..cdde7833 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -15,6 +15,7 @@
 
 #include "xhci.h"
 #include "xhci-trace.h"
+#include "xhci-pci.h"
 
 #define SSIC_PORT_NUM		2
 #define SSIC_PORT_CFG2		0x880c
@@ -67,8 +68,6 @@ static const char hcd_name[] = "xhci_hcd";
 
 static struct hc_driver __read_mostly xhci_pci_hc_driver;
 
-static int xhci_pci_setup(struct usb_hcd *hcd);
-
 static const struct xhci_driver_overrides xhci_pci_overrides __initconst = {
 	.reset = xhci_pci_setup,
 };
@@ -299,7 +298,7 @@ static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { }
 #endif /* CONFIG_ACPI */
 
 /* called during probe() after chip reset completes */
-static int xhci_pci_setup(struct usb_hcd *hcd)
+int xhci_pci_setup(struct usb_hcd *hcd)
 {
 	struct xhci_hcd		*xhci;
 	struct pci_dev		*pdev = to_pci_dev(hcd->self.controller);
@@ -327,12 +326,13 @@ static int xhci_pci_setup(struct usb_hcd *hcd)
 	/* Find any debug ports */
 	return xhci_pci_reinit(xhci, pdev);
 }
+EXPORT_SYMBOL_GPL(xhci_pci_setup);
 
 /*
  * We need to register our own PCI probe function (instead of the USB core's
  * function) in order to create a second roothub under xHCI.
  */
-static int xhci_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
+int xhci_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
 {
 	int retval;
 	struct xhci_hcd *xhci;
@@ -395,8 +395,9 @@ static int xhci_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
 	pm_runtime_put_noidle(&dev->dev);
 	return retval;
 }
+EXPORT_SYMBOL_GPL(xhci_pci_probe);
 
-static void xhci_pci_remove(struct pci_dev *dev)
+void xhci_pci_remove(struct pci_dev *dev)
 {
 	struct xhci_hcd *xhci;
 
@@ -418,6 +419,7 @@ static void xhci_pci_remove(struct pci_dev *dev)
 
 	usb_hcd_pci_remove(dev);
 }
+EXPORT_SYMBOL_GPL(xhci_pci_remove);
 
 #ifdef CONFIG_PM
 /*
@@ -483,7 +485,7 @@ static void xhci_sparse_control_quirk(struct usb_hcd *hcd)
 	writel(reg, hcd->regs + SPARSE_CNTL_ENABLE);
 }
 
-static int xhci_pci_suspend(struct usb_hcd *hcd, bool do_wakeup)
+int xhci_pci_suspend(struct usb_hcd *hcd, bool do_wakeup)
 {
 	struct xhci_hcd	*xhci = hcd_to_xhci(hcd);
 	struct pci_dev		*pdev = to_pci_dev(hcd->self.controller);
@@ -511,8 +513,9 @@ static int xhci_pci_suspend(struct usb_hcd *hcd, bool do_wakeup)
 
 	return ret;
 }
+EXPORT_SYMBOL_GPL(xhci_pci_suspend);
 
-static int xhci_pci_resume(struct usb_hcd *hcd, bool hibernated)
+int xhci_pci_resume(struct usb_hcd *hcd, bool hibernated)
 {
 	struct xhci_hcd		*xhci = hcd_to_xhci(hcd);
 	struct pci_dev		*pdev = to_pci_dev(hcd->self.controller);
@@ -560,6 +563,7 @@ static void xhci_pci_shutdown(struct usb_hcd *hcd)
 	if (xhci->quirks & XHCI_SPURIOUS_WAKEUP)
 		pci_set_power_state(pdev, PCI_D3hot);
 }
+EXPORT_SYMBOL_GPL(xhci_pci_resume);
 #endif /* CONFIG_PM */
 
 /*-------------------------------------------------------------------------*/
diff --git a/drivers/usb/host/xhci-pci.h b/drivers/usb/host/xhci-pci.h
new file mode 100644
index 0000000..587f71d
--- /dev/null
+++ b/drivers/usb/host/xhci-pci.h
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright (C) 2008 Intel Corp. */
+
+#ifndef XHCI_PCI_H
+#define XHCI_PCI_H
+
+int xhci_pci_setup(struct usb_hcd *hcd);
+
+int xhci_pci_probe(struct pci_dev *pdev,
+		   const struct pci_device_id *id);
+
+void xhci_pci_remove(struct pci_dev *dev);
+
+int xhci_pci_suspend(struct usb_hcd *hcd, bool do_wakeup);
+
+int xhci_pci_resume(struct usb_hcd *hcd, bool hibernated);
+
+#endif
diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig
index 52f8e2b..767c5da 100644
--- a/drivers/usb/musb/Kconfig
+++ b/drivers/usb/musb/Kconfig
@@ -116,6 +116,13 @@
 	depends on USB_MUSB_GADGET
 	depends on USB=n || USB_OTG_BLACKLIST_HUB
 
+config USB_MUSB_MEDIATEK
+	tristate "MediaTek platforms"
+	depends on ARCH_MEDIATEK || COMPILE_TEST
+	depends on NOP_USB_XCEIV
+	depends on GENERIC_PHY
+	select USB_ROLE_SWITCH
+
 config USB_MUSB_AM335X_CHILD
 	tristate
 
@@ -142,7 +149,7 @@
 
 config USB_INVENTRA_DMA
 	bool 'Inventra'
-	depends on USB_MUSB_OMAP2PLUS
+	depends on USB_MUSB_OMAP2PLUS || USB_MUSB_MEDIATEK
 	help
 	  Enable DMA transfers using Mentor's engine.
 
diff --git a/drivers/usb/musb/Makefile b/drivers/usb/musb/Makefile
index 3a88c79..63d82d0 100644
--- a/drivers/usb/musb/Makefile
+++ b/drivers/usb/musb/Makefile
@@ -24,6 +24,7 @@
 obj-$(CONFIG_USB_MUSB_UX500)			+= ux500.o
 obj-$(CONFIG_USB_MUSB_JZ4740)			+= jz4740.o
 obj-$(CONFIG_USB_MUSB_SUNXI)			+= sunxi.o
+obj-$(CONFIG_USB_MUSB_MEDIATEK)      		+= mediatek.o
 
 
 obj-$(CONFIG_USB_MUSB_AM335X_CHILD)		+= musb_am335x.o
diff --git a/drivers/usb/musb/mediatek.c b/drivers/usb/musb/mediatek.c
new file mode 100644
index 0000000..df013d6
--- /dev/null
+++ b/drivers/usb/musb/mediatek.c
@@ -0,0 +1,588 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2019 MediaTek Inc.
+ *
+ * Author:
+ *  Min Guo <min.guo@mediatek.com>
+ *  Yonglong Wu <yonglong.wu@mediatek.com>
+ */
+
+#include <linux/clk.h>
+#include <linux/dma-mapping.h>
+#include <linux/module.h>
+#include <linux/of_platform.h>
+#include <linux/platform_device.h>
+#include <linux/usb/role.h>
+#include <linux/usb/usb_phy_generic.h>
+#include "musb_core.h"
+#include "musb_dma.h"
+
+#define USB_L1INTS		0x00a0
+#define USB_L1INTM		0x00a4
+#define MTK_MUSB_TXFUNCADDR	0x0480
+
+/* MediaTek controller toggle enable and status reg */
+#define MUSB_RXTOG		0x80
+#define MUSB_RXTOGEN		0x82
+#define MUSB_TXTOG		0x84
+#define MUSB_TXTOGEN		0x86
+#define MTK_TOGGLE_EN		GENMASK(15, 0)
+
+#define TX_INT_STATUS		BIT(0)
+#define RX_INT_STATUS		BIT(1)
+#define USBCOM_INT_STATUS	BIT(2)
+#define DMA_INT_STATUS		BIT(3)
+
+#define DMA_INTR_STATUS_MSK	GENMASK(7, 0)
+#define DMA_INTR_UNMASK_SET_MSK	GENMASK(31, 24)
+
+struct mtk_glue {
+	struct device *dev;
+	struct musb *musb;
+	struct platform_device *musb_pdev;
+	struct platform_device *usb_phy;
+	struct phy *phy;
+	struct usb_phy *xceiv;
+	enum phy_mode phy_mode;
+	struct clk *main;
+	struct clk *mcu;
+	struct clk *univpll;
+	enum usb_role role;
+	struct usb_role_switch *role_sw;
+};
+
+static int mtk_musb_clks_get(struct mtk_glue *glue)
+{
+	struct device *dev = glue->dev;
+
+	glue->main = devm_clk_get(dev, "main");
+	if (IS_ERR(glue->main)) {
+		dev_err(dev, "fail to get main clock\n");
+		return PTR_ERR(glue->main);
+	}
+
+	glue->mcu = devm_clk_get(dev, "mcu");
+	if (IS_ERR(glue->mcu)) {
+		dev_err(dev, "fail to get mcu clock\n");
+		return PTR_ERR(glue->mcu);
+	}
+
+	glue->univpll = devm_clk_get(dev, "univpll");
+	if (IS_ERR(glue->univpll)) {
+		dev_err(dev, "fail to get univpll clock\n");
+		return PTR_ERR(glue->univpll);
+	}
+
+	return 0;
+}
+
+static int mtk_musb_clks_enable(struct mtk_glue *glue)
+{
+	int ret;
+
+	ret = clk_prepare_enable(glue->main);
+	if (ret) {
+		dev_err(glue->dev, "failed to enable main clock\n");
+		goto err_main_clk;
+	}
+
+	ret = clk_prepare_enable(glue->mcu);
+	if (ret) {
+		dev_err(glue->dev, "failed to enable mcu clock\n");
+		goto err_mcu_clk;
+	}
+
+	ret = clk_prepare_enable(glue->univpll);
+	if (ret) {
+		dev_err(glue->dev, "failed to enable univpll clock\n");
+		goto err_univpll_clk;
+	}
+
+	return 0;
+
+err_univpll_clk:
+	clk_disable_unprepare(glue->mcu);
+err_mcu_clk:
+	clk_disable_unprepare(glue->main);
+err_main_clk:
+	return ret;
+}
+
+static void mtk_musb_clks_disable(struct mtk_glue *glue)
+{
+	clk_disable_unprepare(glue->univpll);
+	clk_disable_unprepare(glue->mcu);
+	clk_disable_unprepare(glue->main);
+}
+
+static int musb_usb_role_sx_set(struct device *dev, enum usb_role role)
+{
+	struct mtk_glue *glue = dev_get_drvdata(dev);
+	struct musb *musb = glue->musb;
+	u8 devctl = readb(musb->mregs + MUSB_DEVCTL);
+	enum usb_role new_role;
+
+	if (role == glue->role)
+		return 0;
+
+	switch (role) {
+	case USB_ROLE_HOST:
+		musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE;
+		glue->phy_mode = PHY_MODE_USB_HOST;
+		new_role = USB_ROLE_HOST;
+		if (glue->role == USB_ROLE_NONE)
+			phy_power_on(glue->phy);
+
+		devctl |= MUSB_DEVCTL_SESSION;
+		musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
+		MUSB_HST_MODE(musb);
+		break;
+	case USB_ROLE_DEVICE:
+		musb->xceiv->otg->state = OTG_STATE_B_IDLE;
+		glue->phy_mode = PHY_MODE_USB_DEVICE;
+		new_role = USB_ROLE_DEVICE;
+		devctl &= ~MUSB_DEVCTL_SESSION;
+		musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
+		if (glue->role == USB_ROLE_NONE)
+			phy_power_on(glue->phy);
+
+		MUSB_DEV_MODE(musb);
+		break;
+	case USB_ROLE_NONE:
+		glue->phy_mode = PHY_MODE_USB_OTG;
+		new_role = USB_ROLE_NONE;
+		devctl &= ~MUSB_DEVCTL_SESSION;
+		musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
+		if (glue->role != USB_ROLE_NONE)
+			phy_power_off(glue->phy);
+
+		break;
+	default:
+		dev_err(glue->dev, "Invalid State\n");
+		return -EINVAL;
+	}
+
+	glue->role = new_role;
+	phy_set_mode(glue->phy, glue->phy_mode);
+
+	return 0;
+}
+
+static enum usb_role musb_usb_role_sx_get(struct device *dev)
+{
+	struct mtk_glue *glue = dev_get_drvdata(dev);
+
+	return glue->role;
+}
+
+static int mtk_otg_switch_init(struct mtk_glue *glue)
+{
+	struct usb_role_switch_desc role_sx_desc = { 0 };
+
+	role_sx_desc.set = musb_usb_role_sx_set;
+	role_sx_desc.get = musb_usb_role_sx_get;
+	role_sx_desc.fwnode = dev_fwnode(glue->dev);
+	glue->role_sw = usb_role_switch_register(glue->dev, &role_sx_desc);
+
+	return PTR_ERR_OR_ZERO(glue->role_sw);
+}
+
+static void mtk_otg_switch_exit(struct mtk_glue *glue)
+{
+	return usb_role_switch_unregister(glue->role_sw);
+}
+
+static irqreturn_t generic_interrupt(int irq, void *__hci)
+{
+	unsigned long flags;
+	irqreturn_t retval = IRQ_NONE;
+	struct musb *musb = __hci;
+
+	spin_lock_irqsave(&musb->lock, flags);
+	musb->int_usb = musb_clearb(musb->mregs, MUSB_INTRUSB);
+	musb->int_rx = musb_clearw(musb->mregs, MUSB_INTRRX);
+	musb->int_tx = musb_clearw(musb->mregs, MUSB_INTRTX);
+
+	if ((musb->int_usb & MUSB_INTR_RESET) && !is_host_active(musb)) {
+		/* ep0 FADDR must be 0 when (re)entering peripheral mode */
+		musb_ep_select(musb->mregs, 0);
+		musb_writeb(musb->mregs, MUSB_FADDR, 0);
+	}
+
+	if (musb->int_usb || musb->int_tx || musb->int_rx)
+		retval = musb_interrupt(musb);
+
+	spin_unlock_irqrestore(&musb->lock, flags);
+
+	return retval;
+}
+
+static irqreturn_t mtk_musb_interrupt(int irq, void *dev_id)
+{
+	irqreturn_t retval = IRQ_NONE;
+	struct musb *musb = (struct musb *)dev_id;
+	u32 l1_ints;
+
+	l1_ints = musb_readl(musb->mregs, USB_L1INTS) &
+			musb_readl(musb->mregs, USB_L1INTM);
+
+	if (l1_ints & (TX_INT_STATUS | RX_INT_STATUS | USBCOM_INT_STATUS))
+		retval = generic_interrupt(irq, musb);
+
+#if defined(CONFIG_USB_INVENTRA_DMA)
+	if (l1_ints & DMA_INT_STATUS)
+		retval = dma_controller_irq(irq, musb->dma_controller);
+#endif
+	return retval;
+}
+
+static u32 mtk_musb_busctl_offset(u8 epnum, u16 offset)
+{
+	return MTK_MUSB_TXFUNCADDR + offset + 8 * epnum;
+}
+
+static u8 mtk_musb_clearb(void __iomem *addr, unsigned int offset)
+{
+	u8 data;
+
+	/* W1C */
+	data = musb_readb(addr, offset);
+	musb_writeb(addr, offset, data);
+	return data;
+}
+
+static u16 mtk_musb_clearw(void __iomem *addr, unsigned int offset)
+{
+	u16 data;
+
+	/* W1C */
+	data = musb_readw(addr, offset);
+	musb_writew(addr, offset, data);
+	return data;
+}
+
+static int mtk_musb_set_mode(struct musb *musb, u8 mode)
+{
+	struct device *dev = musb->controller;
+	struct mtk_glue *glue = dev_get_drvdata(dev->parent);
+	enum phy_mode new_mode;
+	enum usb_role new_role;
+
+	switch (mode) {
+	case MUSB_HOST:
+		new_mode = PHY_MODE_USB_HOST;
+		new_role = USB_ROLE_HOST;
+		break;
+	case MUSB_PERIPHERAL:
+		new_mode = PHY_MODE_USB_DEVICE;
+		new_role = USB_ROLE_DEVICE;
+		break;
+	case MUSB_OTG:
+		new_mode = PHY_MODE_USB_OTG;
+		new_role = USB_ROLE_NONE;
+		break;
+	default:
+		dev_err(glue->dev, "Invalid mode request\n");
+		return -EINVAL;
+	}
+
+	if (glue->phy_mode == new_mode)
+		return 0;
+
+	if (musb->port_mode != MUSB_OTG) {
+		dev_err(glue->dev, "Does not support changing modes\n");
+		return -EINVAL;
+	}
+
+	glue->role = new_role;
+	musb_usb_role_sx_set(dev, glue->role);
+	return 0;
+}
+
+static int mtk_musb_init(struct musb *musb)
+{
+	struct device *dev = musb->controller;
+	struct mtk_glue *glue = dev_get_drvdata(dev->parent);
+	int ret;
+
+	glue->musb = musb;
+	musb->phy = glue->phy;
+	musb->xceiv = glue->xceiv;
+	musb->is_host = false;
+	musb->isr = mtk_musb_interrupt;
+
+	/* Set TX/RX toggle enable */
+	musb_writew(musb->mregs, MUSB_TXTOGEN, MTK_TOGGLE_EN);
+	musb_writew(musb->mregs, MUSB_RXTOGEN, MTK_TOGGLE_EN);
+
+	if (musb->port_mode == MUSB_OTG) {
+		ret = mtk_otg_switch_init(glue);
+		if (ret)
+			return ret;
+	}
+
+	ret = phy_init(glue->phy);
+	if (ret)
+		goto err_phy_init;
+
+	ret = phy_power_on(glue->phy);
+	if (ret)
+		goto err_phy_power_on;
+
+	phy_set_mode(glue->phy, glue->phy_mode);
+
+#if defined(CONFIG_USB_INVENTRA_DMA)
+	musb_writel(musb->mregs, MUSB_HSDMA_INTR,
+		    DMA_INTR_STATUS_MSK | DMA_INTR_UNMASK_SET_MSK);
+#endif
+	musb_writel(musb->mregs, USB_L1INTM, TX_INT_STATUS | RX_INT_STATUS |
+		    USBCOM_INT_STATUS | DMA_INT_STATUS);
+	return 0;
+
+err_phy_power_on:
+	phy_exit(glue->phy);
+err_phy_init:
+	mtk_otg_switch_exit(glue);
+	return ret;
+}
+
+static u16 mtk_musb_get_toggle(struct musb_qh *qh, int is_out)
+{
+	struct musb *musb = qh->hw_ep->musb;
+	u8 epnum = qh->hw_ep->epnum;
+	u16 toggle;
+
+	toggle = musb_readw(musb->mregs, is_out ? MUSB_TXTOG : MUSB_RXTOG);
+	return toggle & (1 << epnum);
+}
+
+static u16 mtk_musb_set_toggle(struct musb_qh *qh, int is_out, struct urb *urb)
+{
+	struct musb *musb = qh->hw_ep->musb;
+	u8 epnum = qh->hw_ep->epnum;
+	u16 value, toggle;
+
+	toggle = usb_gettoggle(urb->dev, qh->epnum, is_out);
+
+	if (is_out) {
+		value = musb_readw(musb->mregs, MUSB_TXTOG);
+		value |= toggle << epnum;
+		musb_writew(musb->mregs, MUSB_TXTOG, value);
+	} else {
+		value = musb_readw(musb->mregs, MUSB_RXTOG);
+		value |= toggle << epnum;
+		musb_writew(musb->mregs, MUSB_RXTOG, value);
+	}
+
+	return 0;
+}
+
+static int mtk_musb_exit(struct musb *musb)
+{
+	struct device *dev = musb->controller;
+	struct mtk_glue *glue = dev_get_drvdata(dev->parent);
+
+	mtk_otg_switch_exit(glue);
+	phy_power_off(glue->phy);
+	phy_exit(glue->phy);
+	mtk_musb_clks_disable(glue);
+
+	pm_runtime_put_sync(dev);
+	pm_runtime_disable(dev);
+	return 0;
+}
+
+static const struct musb_platform_ops mtk_musb_ops = {
+	.quirks = MUSB_DMA_INVENTRA,
+	.init = mtk_musb_init,
+	.get_toggle = mtk_musb_get_toggle,
+	.set_toggle = mtk_musb_set_toggle,
+	.exit = mtk_musb_exit,
+#ifdef CONFIG_USB_INVENTRA_DMA
+	.dma_init = musbhs_dma_controller_create_noirq,
+	.dma_exit = musbhs_dma_controller_destroy,
+#endif
+	.clearb = mtk_musb_clearb,
+	.clearw = mtk_musb_clearw,
+	.busctl_offset = mtk_musb_busctl_offset,
+	.set_mode = mtk_musb_set_mode,
+};
+
+#define MTK_MUSB_MAX_EP_NUM	8
+#define MTK_MUSB_RAM_BITS	11
+
+static struct musb_fifo_cfg mtk_musb_mode_cfg[] = {
+	{ .hw_ep_num = 1, .style = FIFO_TX, .maxpacket = 512, },
+	{ .hw_ep_num = 1, .style = FIFO_RX, .maxpacket = 512, },
+	{ .hw_ep_num = 2, .style = FIFO_TX, .maxpacket = 512, },
+	{ .hw_ep_num = 2, .style = FIFO_RX, .maxpacket = 512, },
+	{ .hw_ep_num = 3, .style = FIFO_TX, .maxpacket = 512, },
+	{ .hw_ep_num = 3, .style = FIFO_RX, .maxpacket = 512, },
+	{ .hw_ep_num = 4, .style = FIFO_TX, .maxpacket = 512, },
+	{ .hw_ep_num = 4, .style = FIFO_RX, .maxpacket = 512, },
+	{ .hw_ep_num = 5, .style = FIFO_TX, .maxpacket = 512, },
+	{ .hw_ep_num = 5, .style = FIFO_RX, .maxpacket = 512, },
+	{ .hw_ep_num = 6, .style = FIFO_TX, .maxpacket = 1024, },
+	{ .hw_ep_num = 6, .style = FIFO_RX, .maxpacket = 1024, },
+	{ .hw_ep_num = 7, .style = FIFO_TX, .maxpacket = 512, },
+	{ .hw_ep_num = 7, .style = FIFO_RX, .maxpacket = 64, },
+};
+
+static const struct musb_hdrc_config mtk_musb_hdrc_config = {
+	.fifo_cfg = mtk_musb_mode_cfg,
+	.fifo_cfg_size = ARRAY_SIZE(mtk_musb_mode_cfg),
+	.multipoint = true,
+	.dyn_fifo = true,
+	.num_eps = MTK_MUSB_MAX_EP_NUM,
+	.ram_bits = MTK_MUSB_RAM_BITS,
+};
+
+static const struct platform_device_info mtk_dev_info = {
+	.name = "musb-hdrc",
+	.id = PLATFORM_DEVID_AUTO,
+	.dma_mask = DMA_BIT_MASK(32),
+};
+
+static int mtk_musb_probe(struct platform_device *pdev)
+{
+	struct musb_hdrc_platform_data *pdata;
+	struct mtk_glue *glue;
+	struct platform_device_info pinfo;
+	struct device *dev = &pdev->dev;
+	struct device_node *np = dev->of_node;
+	int ret = -ENOMEM;
+
+	glue = devm_kzalloc(dev, sizeof(*glue), GFP_KERNEL);
+	if (!glue)
+		return -ENOMEM;
+
+	glue->dev = dev;
+	pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
+	if (!pdata)
+		return -ENOMEM;
+
+	ret = of_platform_populate(np, NULL, NULL, dev);
+	if (ret) {
+		dev_err(dev, "failed to create child devices at %p\n", np);
+		return ret;
+	}
+
+	ret = mtk_musb_clks_get(glue);
+	if (ret)
+		return ret;
+
+	pdata->config = &mtk_musb_hdrc_config;
+	pdata->platform_ops = &mtk_musb_ops;
+	pdata->mode = usb_get_dr_mode(dev);
+
+	if (IS_ENABLED(CONFIG_USB_MUSB_HOST))
+		pdata->mode = USB_DR_MODE_HOST;
+	else if (IS_ENABLED(CONFIG_USB_MUSB_GADGET))
+		pdata->mode = USB_DR_MODE_PERIPHERAL;
+
+	switch (pdata->mode) {
+	case USB_DR_MODE_HOST:
+		glue->phy_mode = PHY_MODE_USB_HOST;
+		glue->role = USB_ROLE_HOST;
+		break;
+	case USB_DR_MODE_PERIPHERAL:
+		glue->phy_mode = PHY_MODE_USB_DEVICE;
+		glue->role = USB_ROLE_DEVICE;
+		break;
+	case USB_DR_MODE_OTG:
+		glue->phy_mode = PHY_MODE_USB_OTG;
+		glue->role = USB_ROLE_NONE;
+		break;
+	default:
+		dev_err(&pdev->dev, "Error 'dr_mode' property\n");
+		return -EINVAL;
+	}
+
+	glue->phy = devm_of_phy_get_by_index(dev, np, 0);
+	if (IS_ERR(glue->phy)) {
+		dev_err(dev, "fail to getting phy %ld\n",
+			PTR_ERR(glue->phy));
+		return PTR_ERR(glue->phy);
+	}
+
+	glue->usb_phy = usb_phy_generic_register();
+	if (IS_ERR(glue->usb_phy)) {
+		dev_err(dev, "fail to registering usb-phy %ld\n",
+			PTR_ERR(glue->usb_phy));
+		return PTR_ERR(glue->usb_phy);
+	}
+
+	glue->xceiv = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
+	if (IS_ERR(glue->xceiv)) {
+		dev_err(dev, "fail to getting usb-phy %d\n", ret);
+		ret = PTR_ERR(glue->xceiv);
+		goto err_unregister_usb_phy;
+	}
+
+	platform_set_drvdata(pdev, glue);
+	pm_runtime_enable(dev);
+	pm_runtime_get_sync(dev);
+
+	ret = mtk_musb_clks_enable(glue);
+	if (ret)
+		goto err_enable_clk;
+
+	pinfo = mtk_dev_info;
+	pinfo.parent = dev;
+	pinfo.res = pdev->resource;
+	pinfo.num_res = pdev->num_resources;
+	pinfo.data = pdata;
+	pinfo.size_data = sizeof(*pdata);
+
+	glue->musb_pdev = platform_device_register_full(&pinfo);
+	if (IS_ERR(glue->musb_pdev)) {
+		ret = PTR_ERR(glue->musb_pdev);
+		dev_err(dev, "failed to register musb device: %d\n", ret);
+		goto err_device_register;
+	}
+
+	return 0;
+
+err_device_register:
+	mtk_musb_clks_disable(glue);
+err_enable_clk:
+	pm_runtime_put_sync(dev);
+	pm_runtime_disable(dev);
+err_unregister_usb_phy:
+	usb_phy_generic_unregister(glue->usb_phy);
+	return ret;
+}
+
+static int mtk_musb_remove(struct platform_device *pdev)
+{
+	struct mtk_glue *glue = platform_get_drvdata(pdev);
+	struct platform_device *usb_phy = glue->usb_phy;
+
+	platform_device_unregister(glue->musb_pdev);
+	usb_phy_generic_unregister(usb_phy);
+
+	return 0;
+}
+
+#ifdef CONFIG_OF
+static const struct of_device_id mtk_musb_match[] = {
+	{.compatible = "mediatek,mtk-musb",},
+	{},
+};
+MODULE_DEVICE_TABLE(of, mtk_musb_match);
+#endif
+
+static struct platform_driver mtk_musb_driver = {
+	.probe = mtk_musb_probe,
+	.remove = mtk_musb_remove,
+	.driver = {
+		   .name = "musb-mtk",
+		   .of_match_table = of_match_ptr(mtk_musb_match),
+	},
+};
+
+module_platform_driver(mtk_musb_driver);
+
+MODULE_DESCRIPTION("MediaTek MUSB Glue Layer");
+MODULE_AUTHOR("Min Guo <min.guo@mediatek.com>");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 0fbf9ad..66e269d 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -246,7 +246,7 @@ static u32 musb_default_busctl_offset(u8 epnum, u16 offset)
 	return 0x80 + (0x08 * epnum) + offset;
 }
 
-static u8 musb_default_readb(const void __iomem *addr, unsigned offset)
+static u8 musb_default_readb(void __iomem *addr, u32 offset)
 {
 	u8 data =  __raw_readb(addr + offset);
 
@@ -254,13 +254,13 @@ static u8 musb_default_readb(const void __iomem *addr, unsigned offset)
 	return data;
 }
 
-static void musb_default_writeb(void __iomem *addr, unsigned offset, u8 data)
+static void musb_default_writeb(void __iomem *addr, u32 offset, u8 data)
 {
 	trace_musb_writeb(__builtin_return_address(0), addr, offset, data);
 	__raw_writeb(data, addr + offset);
 }
 
-static u16 musb_default_readw(const void __iomem *addr, unsigned offset)
+static u16 musb_default_readw(void __iomem *addr, u32 offset)
 {
 	u16 data = __raw_readw(addr + offset);
 
@@ -268,12 +268,44 @@ static u16 musb_default_readw(const void __iomem *addr, unsigned offset)
 	return data;
 }
 
-static void musb_default_writew(void __iomem *addr, unsigned offset, u16 data)
+static void musb_default_writew(void __iomem *addr, u32 offset, u16 data)
 {
 	trace_musb_writew(__builtin_return_address(0), addr, offset, data);
 	__raw_writew(data, addr + offset);
 }
 
+static u16 musb_default_get_toggle(struct musb_qh *qh, int is_out)
+{
+	void __iomem *epio = qh->hw_ep->regs;
+	u16 csr;
+
+	if (is_out)
+		csr = musb_readw(epio, MUSB_TXCSR) & MUSB_TXCSR_H_DATATOGGLE;
+	else
+		csr = musb_readw(epio, MUSB_RXCSR) & MUSB_RXCSR_H_DATATOGGLE;
+
+	return csr;
+}
+
+static u16 musb_default_set_toggle(struct musb_qh *qh, int is_out,
+				   struct urb *urb)
+{
+	u16 csr;
+	u16 toggle;
+
+	toggle = usb_gettoggle(urb->dev, qh->epnum, is_out);
+
+	if (is_out)
+		csr = toggle ? (MUSB_TXCSR_H_WR_DATATOGGLE
+				| MUSB_TXCSR_H_DATATOGGLE)
+				: MUSB_TXCSR_CLRDATATOG;
+	else
+		csr = toggle ? (MUSB_RXCSR_H_WR_DATATOGGLE
+				| MUSB_RXCSR_H_DATATOGGLE) : 0;
+
+	return csr;
+}
+
 /*
  * Load an endpoint's FIFO
  */
@@ -364,19 +396,25 @@ static void musb_default_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst)
 /*
  * Old style IO functions
  */
-u8 (*musb_readb)(const void __iomem *addr, unsigned offset);
+u8 (*musb_readb)(void __iomem *addr, u32 offset);
 EXPORT_SYMBOL_GPL(musb_readb);
 
-void (*musb_writeb)(void __iomem *addr, unsigned offset, u8 data);
+void (*musb_writeb)(void __iomem *addr, u32 offset, u8 data);
 EXPORT_SYMBOL_GPL(musb_writeb);
 
-u16 (*musb_readw)(const void __iomem *addr, unsigned offset);
+u8 (*musb_clearb)(void __iomem *addr, u32 offset);
+EXPORT_SYMBOL_GPL(musb_clearb);
+
+u16 (*musb_readw)(void __iomem *addr, u32 offset);
 EXPORT_SYMBOL_GPL(musb_readw);
 
-void (*musb_writew)(void __iomem *addr, unsigned offset, u16 data);
+void (*musb_writew)(void __iomem *addr, u32 offset, u16 data);
 EXPORT_SYMBOL_GPL(musb_writew);
 
-u32 musb_readl(const void __iomem *addr, unsigned offset)
+u16 (*musb_clearw)(void __iomem *addr, u32 offset);
+EXPORT_SYMBOL_GPL(musb_clearw);
+
+u32 musb_readl(void __iomem *addr, u32 offset)
 {
 	u32 data = __raw_readl(addr + offset);
 
@@ -385,7 +423,7 @@ u32 musb_readl(const void __iomem *addr, unsigned offset)
 }
 EXPORT_SYMBOL_GPL(musb_readl);
 
-void musb_writel(void __iomem *addr, unsigned offset, u32 data)
+void musb_writel(void __iomem *addr, u32 offset, u32 data)
 {
 	trace_musb_writel(__builtin_return_address(0), addr, offset, data);
 	__raw_writel(data, addr + offset);
@@ -1015,7 +1053,6 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
 static void musb_disable_interrupts(struct musb *musb)
 {
 	void __iomem	*mbase = musb->mregs;
-	u16	temp;
 
 	/* disable interrupts */
 	musb_writeb(mbase, MUSB_INTRUSBE, 0);
@@ -1025,9 +1062,9 @@ static void musb_disable_interrupts(struct musb *musb)
 	musb_writew(mbase, MUSB_INTRRXE, 0);
 
 	/*  flush pending interrupts */
-	temp = musb_readb(mbase, MUSB_INTRUSB);
-	temp = musb_readw(mbase, MUSB_INTRTX);
-	temp = musb_readw(mbase, MUSB_INTRRX);
+	musb_clearb(mbase, MUSB_INTRUSB);
+	musb_clearw(mbase, MUSB_INTRTX);
+	musb_clearw(mbase, MUSB_INTRRX);
 }
 
 static void musb_enable_interrupts(struct musb *musb)
@@ -2254,10 +2291,19 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
 		musb_readb = musb->ops->readb;
 	if (musb->ops->writeb)
 		musb_writeb = musb->ops->writeb;
+	if (musb->ops->clearb)
+		musb_clearb = musb->ops->clearb;
+	else
+		musb_clearb = musb_readb;
+
 	if (musb->ops->readw)
 		musb_readw = musb->ops->readw;
 	if (musb->ops->writew)
 		musb_writew = musb->ops->writew;
+	if (musb->ops->clearw)
+		musb_clearw = musb->ops->clearw;
+	else
+		musb_clearw = musb_readw;
 
 #ifndef CONFIG_MUSB_PIO_ONLY
 	if (!musb->ops->dma_init || !musb->ops->dma_exit) {
@@ -2279,6 +2325,16 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
 	else
 		musb->io.write_fifo = musb_default_write_fifo;
 
+	if (musb->ops->get_toggle)
+		musb->io.get_toggle = musb->ops->get_toggle;
+	else
+		musb->io.get_toggle = musb_default_get_toggle;
+
+	if (musb->ops->set_toggle)
+		musb->io.set_toggle = musb->ops->set_toggle;
+	else
+		musb->io.set_toggle = musb_default_set_toggle;
+
 	if (!musb->xceiv->io_ops) {
 		musb->xceiv->io_dev = musb->controller;
 		musb->xceiv->io_priv = musb->mregs;
diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h
index 04203b7..6060a7c 100644
--- a/drivers/usb/musb/musb_core.h
+++ b/drivers/usb/musb/musb_core.h
@@ -27,6 +27,7 @@
 struct musb;
 struct musb_hw_ep;
 struct musb_ep;
+struct musb_qh;
 
 /* Helper defines for struct musb->hwvers */
 #define MUSB_HWVERS_MAJOR(x)	((x >> 10) & 0x1f)
@@ -119,10 +120,14 @@ struct musb_io;
  * @fifo_offset: returns the fifo offset
  * @readb:	read 8 bits
  * @writeb:	write 8 bits
+ * @clearb:	could be clear-on-readb or W1C
  * @readw:	read 16 bits
  * @writew:	write 16 bits
+ * @clearw:	could be clear-on-readw or W1C
  * @read_fifo:	reads the fifo
  * @write_fifo:	writes to fifo
+ * @get_toggle:	platform specific get toggle function
+ * @set_toggle:	platform specific set toggle function
  * @dma_init:	platform specific dma init function
  * @dma_exit:	platform specific dma exit function
  * @init:	turns on clocks, sets up platform-specific registers, etc
@@ -161,12 +166,16 @@ struct musb_platform_ops {
 	u16	fifo_mode;
 	u32	(*fifo_offset)(u8 epnum);
 	u32	(*busctl_offset)(u8 epnum, u16 offset);
-	u8	(*readb)(const void __iomem *addr, unsigned offset);
-	void	(*writeb)(void __iomem *addr, unsigned offset, u8 data);
-	u16	(*readw)(const void __iomem *addr, unsigned offset);
-	void	(*writew)(void __iomem *addr, unsigned offset, u16 data);
+	u8	(*readb)(void __iomem *addr, u32 offset);
+	void	(*writeb)(void __iomem *addr, u32 offset, u8 data);
+	u8	(*clearb)(void __iomem *addr, u32 offset);
+	u16	(*readw)(void __iomem *addr, u32 offset);
+	void	(*writew)(void __iomem *addr, u32 offset, u16 data);
+	u16	(*clearw)(void __iomem *addr, u32 offset);
 	void	(*read_fifo)(struct musb_hw_ep *hw_ep, u16 len, u8 *buf);
 	void	(*write_fifo)(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf);
+	u16	(*get_toggle)(struct musb_qh *qh, int is_out);
+	u16	(*set_toggle)(struct musb_qh *qh, int is_out, struct urb *urb);
 	struct dma_controller *
 		(*dma_init) (struct musb *musb, void __iomem *base);
 	void	(*dma_exit)(struct dma_controller *c);
diff --git a/drivers/usb/musb/musb_dma.h b/drivers/usb/musb/musb_dma.h
index 8f60271..4b4d8dc 100644
--- a/drivers/usb/musb/musb_dma.h
+++ b/drivers/usb/musb/musb_dma.h
@@ -35,6 +35,12 @@ struct musb_hw_ep;
  *    whether shared with the Inventra core or separate.
  */
 
+#define MUSB_HSDMA_BASE		0x200
+#define MUSB_HSDMA_INTR		(MUSB_HSDMA_BASE + 0)
+#define MUSB_HSDMA_CONTROL	0x4
+#define MUSB_HSDMA_ADDRESS	0x8
+#define MUSB_HSDMA_COUNT	0xc
+
 #define	DMA_ADDR_INVALID	(~(dma_addr_t)0)
 
 #ifdef CONFIG_MUSB_PIO_ONLY
@@ -191,6 +197,9 @@ extern void (*musb_dma_controller_destroy)(struct dma_controller *);
 extern struct dma_controller *
 musbhs_dma_controller_create(struct musb *musb, void __iomem *base);
 extern void musbhs_dma_controller_destroy(struct dma_controller *c);
+extern struct dma_controller *
+musbhs_dma_controller_create_noirq(struct musb *musb, void __iomem *base);
+extern irqreturn_t dma_controller_irq(int irq, void *private_data);
 
 extern struct dma_controller *
 tusb_dma_controller_create(struct musb *musb, void __iomem *base);
diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
index fa9922c..5267ad2 100644
--- a/drivers/usb/musb/musb_host.c
+++ b/drivers/usb/musb/musb_host.c
@@ -286,26 +286,6 @@ __acquires(musb->lock)
 	spin_lock(&musb->lock);
 }
 
-/* For bulk/interrupt endpoints only */
-static inline void musb_save_toggle(struct musb_qh *qh, int is_in,
-				    struct urb *urb)
-{
-	void __iomem		*epio = qh->hw_ep->regs;
-	u16			csr;
-
-	/*
-	 * FIXME: the current Mentor DMA code seems to have
-	 * problems getting toggle correct.
-	 */
-
-	if (is_in)
-		csr = musb_readw(epio, MUSB_RXCSR) & MUSB_RXCSR_H_DATATOGGLE;
-	else
-		csr = musb_readw(epio, MUSB_TXCSR) & MUSB_TXCSR_H_DATATOGGLE;
-
-	usb_settoggle(urb->dev, qh->epnum, !is_in, csr ? 1 : 0);
-}
-
 /*
  * Advance this hardware endpoint's queue, completing the specified URB and
  * advancing to either the next URB queued to that qh, or else invalidating
@@ -320,6 +300,7 @@ static void musb_advance_schedule(struct musb *musb, struct urb *urb,
 	struct musb_hw_ep	*ep = qh->hw_ep;
 	int			ready = qh->is_ready;
 	int			status;
+	u16			toggle;
 
 	status = (urb->status == -EINPROGRESS) ? 0 : urb->status;
 
@@ -327,7 +308,8 @@ static void musb_advance_schedule(struct musb *musb, struct urb *urb,
 	switch (qh->type) {
 	case USB_ENDPOINT_XFER_BULK:
 	case USB_ENDPOINT_XFER_INT:
-		musb_save_toggle(qh, is_in, urb);
+		toggle = musb->io.get_toggle(qh, !is_in);
+		usb_settoggle(urb->dev, qh->epnum, !is_in, toggle ? 1 : 0);
 		break;
 	case USB_ENDPOINT_XFER_ISOC:
 		if (status == 0 && urb->error_count)
@@ -772,13 +754,8 @@ static void musb_ep_program(struct musb *musb, u8 epnum,
 					);
 			csr |= MUSB_TXCSR_MODE;
 
-			if (!hw_ep->tx_double_buffered) {
-				if (usb_gettoggle(urb->dev, qh->epnum, 1))
-					csr |= MUSB_TXCSR_H_WR_DATATOGGLE
-						| MUSB_TXCSR_H_DATATOGGLE;
-				else
-					csr |= MUSB_TXCSR_CLRDATATOG;
-			}
+			if (!hw_ep->tx_double_buffered)
+				csr |= musb->io.set_toggle(qh, is_out, urb);
 
 			musb_writew(epio, MUSB_TXCSR, csr);
 			/* REVISIT may need to clear FLUSHFIFO ... */
@@ -860,17 +837,12 @@ static void musb_ep_program(struct musb *musb, u8 epnum,
 
 	/* IN/receive */
 	} else {
-		u16	csr;
+		u16 csr = 0;
 
 		if (hw_ep->rx_reinit) {
 			musb_rx_reinit(musb, qh, epnum);
+			csr |= musb->io.set_toggle(qh, is_out, urb);
 
-			/* init new state: toggle and NYET, maybe DMA later */
-			if (usb_gettoggle(urb->dev, qh->epnum, 0))
-				csr = MUSB_RXCSR_H_WR_DATATOGGLE
-					| MUSB_RXCSR_H_DATATOGGLE;
-			else
-				csr = 0;
 			if (qh->type == USB_ENDPOINT_XFER_INT)
 				csr |= MUSB_RXCSR_DISNYET;
 
@@ -933,6 +905,7 @@ static void musb_bulk_nak_timeout(struct musb *musb, struct musb_hw_ep *ep,
 	void __iomem		*epio = ep->regs;
 	struct musb_qh		*cur_qh, *next_qh;
 	u16			rx_csr, tx_csr;
+	u16			toggle;
 
 	musb_ep_select(mbase, ep->epnum);
 	if (is_in) {
@@ -970,7 +943,8 @@ static void musb_bulk_nak_timeout(struct musb *musb, struct musb_hw_ep *ep,
 			urb->actual_length += dma->actual_len;
 			dma->actual_len = 0L;
 		}
-		musb_save_toggle(cur_qh, is_in, urb);
+		toggle = musb->io.get_toggle(cur_qh, !is_in);
+		usb_settoggle(urb->dev, cur_qh->epnum, !is_in, toggle ? 1 : 0);
 
 		if (is_in) {
 			/* move cur_qh to end of queue */
diff --git a/drivers/usb/musb/musb_io.h b/drivers/usb/musb/musb_io.h
index 8058a58..f17aabd 100644
--- a/drivers/usb/musb/musb_io.h
+++ b/drivers/usb/musb/musb_io.h
@@ -22,6 +22,8 @@
  * @read_fifo:	platform specific function to read fifo
  * @write_fifo:	platform specific function to write fifo
  * @busctl_offset: platform specific function to get busctl offset
+ * @get_toggle: platform specific function to get toggle
+ * @set_toggle: platform specific function to set toggle
  */
 struct musb_io {
 	u32	(*ep_offset)(u8 epnum, u16 offset);
@@ -30,14 +32,18 @@ struct musb_io {
 	void	(*read_fifo)(struct musb_hw_ep *hw_ep, u16 len, u8 *buf);
 	void	(*write_fifo)(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf);
 	u32	(*busctl_offset)(u8 epnum, u16 offset);
+	u16	(*get_toggle)(struct musb_qh *qh, int is_out);
+	u16	(*set_toggle)(struct musb_qh *qh, int is_out, struct urb *urb);
 };
 
 /* Do not add new entries here, add them the struct musb_io instead */
-extern u8 (*musb_readb)(const void __iomem *addr, unsigned offset);
-extern void (*musb_writeb)(void __iomem *addr, unsigned offset, u8 data);
-extern u16 (*musb_readw)(const void __iomem *addr, unsigned offset);
-extern void (*musb_writew)(void __iomem *addr, unsigned offset, u16 data);
-extern u32 musb_readl(const void __iomem *addr, unsigned offset);
-extern void musb_writel(void __iomem *addr, unsigned offset, u32 data);
+extern u8 (*musb_readb)(void __iomem *addr, u32 offset);
+extern void (*musb_writeb)(void __iomem *addr, u32 offset, u8 data);
+extern u8 (*musb_clearb)(void __iomem *addr, u32 offset);
+extern u16 (*musb_readw)(void __iomem *addr, u32 offset);
+extern void (*musb_writew)(void __iomem *addr, u32 offset, u16 data);
+extern u16 (*musb_clearw)(void __iomem *addr, u32 offset);
+extern u32 musb_readl(void __iomem *addr, u32 offset);
+extern void musb_writel(void __iomem *addr, u32 offset, u32 data);
 
 #endif
diff --git a/drivers/usb/musb/musbhsdma.c b/drivers/usb/musb/musbhsdma.c
index 2d3751d..0aacfc8 100644
--- a/drivers/usb/musb/musbhsdma.c
+++ b/drivers/usb/musb/musbhsdma.c
@@ -10,12 +10,7 @@
 #include <linux/platform_device.h>
 #include <linux/slab.h>
 #include "musb_core.h"
-
-#define MUSB_HSDMA_BASE		0x200
-#define MUSB_HSDMA_INTR		(MUSB_HSDMA_BASE + 0)
-#define MUSB_HSDMA_CONTROL		0x4
-#define MUSB_HSDMA_ADDRESS		0x8
-#define MUSB_HSDMA_COUNT		0xc
+#include "musb_dma.h"
 
 #define MUSB_HSDMA_CHANNEL_OFFSET(_bchannel, _offset)		\
 		(MUSB_HSDMA_BASE + (_bchannel << 4) + _offset)
@@ -268,7 +263,7 @@ static int dma_channel_abort(struct dma_channel *channel)
 	return 0;
 }
 
-static irqreturn_t dma_controller_irq(int irq, void *private_data)
+irqreturn_t dma_controller_irq(int irq, void *private_data)
 {
 	struct musb_dma_controller *controller = private_data;
 	struct musb *musb = controller->private_data;
@@ -289,7 +284,7 @@ static irqreturn_t dma_controller_irq(int irq, void *private_data)
 
 	spin_lock_irqsave(&musb->lock, flags);
 
-	int_hsdma = musb_readb(mbase, MUSB_HSDMA_INTR);
+	int_hsdma = musb_clearb(mbase, MUSB_HSDMA_INTR);
 
 	if (!int_hsdma) {
 		musb_dbg(musb, "spurious DMA irq");
@@ -383,6 +378,7 @@ static irqreturn_t dma_controller_irq(int irq, void *private_data)
 	spin_unlock_irqrestore(&musb->lock, flags);
 	return retval;
 }
+EXPORT_SYMBOL_GPL(dma_controller_irq);
 
 void musbhs_dma_controller_destroy(struct dma_controller *c)
 {
@@ -398,18 +394,10 @@ void musbhs_dma_controller_destroy(struct dma_controller *c)
 }
 EXPORT_SYMBOL_GPL(musbhs_dma_controller_destroy);
 
-struct dma_controller *musbhs_dma_controller_create(struct musb *musb,
-						    void __iomem *base)
+static struct musb_dma_controller *
+dma_controller_alloc(struct musb *musb, void __iomem *base)
 {
 	struct musb_dma_controller *controller;
-	struct device *dev = musb->controller;
-	struct platform_device *pdev = to_platform_device(dev);
-	int irq = platform_get_irq_byname(pdev, "dma");
-
-	if (irq <= 0) {
-		dev_err(dev, "No DMA interrupt line!\n");
-		return NULL;
-	}
 
 	controller = kzalloc(sizeof(*controller), GFP_KERNEL);
 	if (!controller)
@@ -423,6 +411,25 @@ struct dma_controller *musbhs_dma_controller_create(struct musb *musb,
 	controller->controller.channel_release = dma_channel_release;
 	controller->controller.channel_program = dma_channel_program;
 	controller->controller.channel_abort = dma_channel_abort;
+	return controller;
+}
+
+struct dma_controller *
+musbhs_dma_controller_create(struct musb *musb, void __iomem *base)
+{
+	struct musb_dma_controller *controller;
+	struct device *dev = musb->controller;
+	struct platform_device *pdev = to_platform_device(dev);
+	int irq = platform_get_irq_byname(pdev, "dma");
+
+	if (irq <= 0) {
+		dev_err(dev, "No DMA interrupt line!\n");
+		return NULL;
+	}
+
+	controller = dma_controller_alloc(musb, base);
+	if (!controller)
+		return NULL;
 
 	if (request_irq(irq, dma_controller_irq, 0,
 			dev_name(musb->controller), controller)) {
@@ -437,3 +444,16 @@ struct dma_controller *musbhs_dma_controller_create(struct musb *musb,
 	return &controller->controller;
 }
 EXPORT_SYMBOL_GPL(musbhs_dma_controller_create);
+
+struct dma_controller *
+musbhs_dma_controller_create_noirq(struct musb *musb, void __iomem *base)
+{
+	struct musb_dma_controller *controller;
+
+	controller = dma_controller_alloc(musb, base);
+	if (!controller)
+		return NULL;
+
+	return &controller->controller;
+}
+EXPORT_SYMBOL_GPL(musbhs_dma_controller_create_noirq);
diff --git a/drivers/usb/musb/sunxi.c b/drivers/usb/musb/sunxi.c
index 832a41f..e6b3d71 100644
--- a/drivers/usb/musb/sunxi.c
+++ b/drivers/usb/musb/sunxi.c
@@ -407,7 +407,7 @@ static u32 sunxi_musb_busctl_offset(u8 epnum, u16 offset)
 	return SUNXI_MUSB_TXFUNCADDR + offset;
 }
 
-static u8 sunxi_musb_readb(const void __iomem *addr, unsigned offset)
+static u8 sunxi_musb_readb(void __iomem *addr, u32 offset)
 {
 	struct sunxi_glue *glue;
 
@@ -520,7 +520,7 @@ static void sunxi_musb_writeb(void __iomem *addr, unsigned offset, u8 data)
 		(int)(addr - sunxi_musb->mregs));
 }
 
-static u16 sunxi_musb_readw(const void __iomem *addr, unsigned offset)
+static u16 sunxi_musb_readw(void __iomem *addr, u32 offset)
 {
 	if (addr == sunxi_musb->mregs) {
 		/* generic control or fifo control reg access */
diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c
index 3945328..5d44908 100644
--- a/drivers/usb/musb/tusb6010.c
+++ b/drivers/usb/musb/tusb6010.c
@@ -142,7 +142,7 @@ static void tusb_ep_select(void __iomem *mbase, u8 epnum)
 /*
  * TUSB6010 doesn't allow 8-bit access; 16-bit access is the minimum.
  */
-static u8 tusb_readb(const void __iomem *addr, unsigned offset)
+static u8 tusb_readb(void __iomem *addr, u32 offset)
 {
 	u16 tmp;
 	u8 val;
diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c
index a400b65..91d6227 100644
--- a/drivers/usb/typec/class.c
+++ b/drivers/usb/typec/class.c
@@ -53,6 +53,7 @@ struct typec_port {
 	struct typec_mux		*mux;
 
 	const struct typec_capability	*cap;
+	const struct typec_operations   *ops;
 };
 
 #define to_typec_port(_dev_) container_of(_dev_, struct typec_port, dev)
@@ -955,7 +956,7 @@ preferred_role_store(struct device *dev, struct device_attribute *attr,
 		return -EOPNOTSUPP;
 	}
 
-	if (!port->cap->try_role) {
+	if (!port->ops || !port->ops->try_role) {
 		dev_dbg(dev, "Setting preferred role not supported\n");
 		return -EOPNOTSUPP;
 	}
@@ -968,7 +969,7 @@ preferred_role_store(struct device *dev, struct device_attribute *attr,
 			return -EINVAL;
 	}
 
-	ret = port->cap->try_role(port->cap, role);
+	ret = port->ops->try_role(port, role);
 	if (ret)
 		return ret;
 
@@ -999,7 +1000,7 @@ static ssize_t data_role_store(struct device *dev,
 	struct typec_port *port = to_typec_port(dev);
 	int ret;
 
-	if (!port->cap->dr_set) {
+	if (!port->ops || !port->ops->dr_set) {
 		dev_dbg(dev, "data role swapping not supported\n");
 		return -EOPNOTSUPP;
 	}
@@ -1014,7 +1015,7 @@ static ssize_t data_role_store(struct device *dev,
 		goto unlock_and_ret;
 	}
 
-	ret = port->cap->dr_set(port->cap, ret);
+	ret = port->ops->dr_set(port, ret);
 	if (ret)
 		goto unlock_and_ret;
 
@@ -1049,7 +1050,7 @@ static ssize_t power_role_store(struct device *dev,
 		return -EOPNOTSUPP;
 	}
 
-	if (!port->cap->pr_set) {
+	if (!port->ops || !port->ops->pr_set) {
 		dev_dbg(dev, "power role swapping not supported\n");
 		return -EOPNOTSUPP;
 	}
@@ -1071,7 +1072,7 @@ static ssize_t power_role_store(struct device *dev,
 		goto unlock_and_ret;
 	}
 
-	ret = port->cap->pr_set(port->cap, ret);
+	ret = port->ops->pr_set(port, ret);
 	if (ret)
 		goto unlock_and_ret;
 
@@ -1102,7 +1103,8 @@ port_type_store(struct device *dev, struct device_attribute *attr,
 	int ret;
 	enum typec_port_type type;
 
-	if (!port->cap->port_type_set || port->cap->type != TYPEC_PORT_DRP) {
+	if (port->cap->type != TYPEC_PORT_DRP ||
+	    !port->ops || !port->ops->port_type_set) {
 		dev_dbg(dev, "changing port type not supported\n");
 		return -EOPNOTSUPP;
 	}
@@ -1119,7 +1121,7 @@ port_type_store(struct device *dev, struct device_attribute *attr,
 		goto unlock_and_ret;
 	}
 
-	ret = port->cap->port_type_set(port->cap, type);
+	ret = port->ops->port_type_set(port, type);
 	if (ret)
 		goto unlock_and_ret;
 
@@ -1175,7 +1177,7 @@ static ssize_t vconn_source_store(struct device *dev,
 		return -EOPNOTSUPP;
 	}
 
-	if (!port->cap->vconn_set) {
+	if (!port->ops || !port->ops->vconn_set) {
 		dev_dbg(dev, "VCONN swapping not supported\n");
 		return -EOPNOTSUPP;
 	}
@@ -1184,7 +1186,7 @@ static ssize_t vconn_source_store(struct device *dev,
 	if (ret)
 		return ret;
 
-	ret = port->cap->vconn_set(port->cap, (enum typec_role)source);
+	ret = port->ops->vconn_set(port, (enum typec_role)source);
 	if (ret)
 		return ret;
 
@@ -1278,6 +1280,7 @@ static void typec_release(struct device *dev)
 	ida_destroy(&port->mode_ids);
 	typec_switch_put(port->sw);
 	typec_mux_put(port->mux);
+	kfree(port->cap);
 	kfree(port);
 }
 
@@ -1487,6 +1490,16 @@ EXPORT_SYMBOL_GPL(typec_set_mode);
 /* --------------------------------------- */
 
 /**
+ * typec_get_drvdata - Return private driver data pointer
+ * @port: USB Type-C port
+ */
+void *typec_get_drvdata(struct typec_port *port)
+{
+	return dev_get_drvdata(&port->dev);
+}
+EXPORT_SYMBOL_GPL(typec_get_drvdata);
+
+/**
  * typec_port_register_altmode - Register USB Type-C Port Alternate Mode
  * @port: USB Type-C Port that supports the alternate mode
  * @desc: Description of the alternate mode
@@ -1579,7 +1592,7 @@ struct typec_port *typec_register_port(struct device *parent,
 	mutex_init(&port->port_type_lock);
 
 	port->id = id;
-	port->cap = cap;
+	port->ops = cap->ops;
 	port->port_type = cap->type;
 	port->prefer_role = cap->prefer_role;
 
@@ -1589,6 +1602,13 @@ struct typec_port *typec_register_port(struct device *parent,
 	port->dev.fwnode = cap->fwnode;
 	port->dev.type = &typec_port_dev_type;
 	dev_set_name(&port->dev, "port%d", id);
+	dev_set_drvdata(&port->dev, cap->driver_data);
+
+	port->cap = kmemdup(cap, sizeof(*cap), GFP_KERNEL);
+	if (!port->cap) {
+		put_device(&port->dev);
+		return ERR_PTR(-ENOMEM);
+	}
 
 	port->sw = typec_switch_get(&port->dev);
 	if (IS_ERR(port->sw)) {
diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
index 5bb84cb..7dfcd78 100644
--- a/drivers/usb/typec/tcpm/tcpm.c
+++ b/drivers/usb/typec/tcpm/tcpm.c
@@ -390,12 +390,6 @@ static enum tcpm_state tcpm_default_state(struct tcpm_port *port)
 	return SRC_UNATTACHED;
 }
 
-static inline
-struct tcpm_port *typec_cap_to_tcpm(const struct typec_capability *cap)
-{
-	return container_of(cap, struct tcpm_port, typec_caps);
-}
-
 static bool tcpm_port_is_disconnected(struct tcpm_port *port)
 {
 	return (!port->attached && port->cc1 == TYPEC_CC_OPEN &&
@@ -3996,10 +3990,9 @@ void tcpm_pd_hard_reset(struct tcpm_port *port)
 }
 EXPORT_SYMBOL_GPL(tcpm_pd_hard_reset);
 
-static int tcpm_dr_set(const struct typec_capability *cap,
-		       enum typec_data_role data)
+static int tcpm_dr_set(struct typec_port *p, enum typec_data_role data)
 {
-	struct tcpm_port *port = typec_cap_to_tcpm(cap);
+	struct tcpm_port *port = typec_get_drvdata(p);
 	int ret;
 
 	mutex_lock(&port->swap_lock);
@@ -4064,10 +4057,9 @@ static int tcpm_dr_set(const struct typec_capability *cap,
 	return ret;
 }
 
-static int tcpm_pr_set(const struct typec_capability *cap,
-		       enum typec_role role)
+static int tcpm_pr_set(struct typec_port *p, enum typec_role role)
 {
-	struct tcpm_port *port = typec_cap_to_tcpm(cap);
+	struct tcpm_port *port = typec_get_drvdata(p);
 	int ret;
 
 	mutex_lock(&port->swap_lock);
@@ -4108,10 +4100,9 @@ static int tcpm_pr_set(const struct typec_capability *cap,
 	return ret;
 }
 
-static int tcpm_vconn_set(const struct typec_capability *cap,
-			  enum typec_role role)
+static int tcpm_vconn_set(struct typec_port *p, enum typec_role role)
 {
-	struct tcpm_port *port = typec_cap_to_tcpm(cap);
+	struct tcpm_port *port = typec_get_drvdata(p);
 	int ret;
 
 	mutex_lock(&port->swap_lock);
@@ -4148,9 +4139,9 @@ static int tcpm_vconn_set(const struct typec_capability *cap,
 	return ret;
 }
 
-static int tcpm_try_role(const struct typec_capability *cap, int role)
+static int tcpm_try_role(struct typec_port *p, int role)
 {
-	struct tcpm_port *port = typec_cap_to_tcpm(cap);
+	struct tcpm_port *port = typec_get_drvdata(p);
 	struct tcpc_dev	*tcpc = port->tcpc;
 	int ret = 0;
 
@@ -4357,10 +4348,9 @@ static void tcpm_init(struct tcpm_port *port)
 	tcpm_set_state(port, PORT_RESET, 0);
 }
 
-static int tcpm_port_type_set(const struct typec_capability *cap,
-			      enum typec_port_type type)
+static int tcpm_port_type_set(struct typec_port *p, enum typec_port_type type)
 {
-	struct tcpm_port *port = typec_cap_to_tcpm(cap);
+	struct tcpm_port *port = typec_get_drvdata(p);
 
 	mutex_lock(&port->lock);
 	if (type == port->port_type)
@@ -4385,6 +4375,14 @@ static int tcpm_port_type_set(const struct typec_capability *cap,
 	return 0;
 }
 
+static const struct typec_operations tcpm_ops = {
+	.try_role = tcpm_try_role,
+	.dr_set = tcpm_dr_set,
+	.pr_set = tcpm_pr_set,
+	.vconn_set = tcpm_vconn_set,
+	.port_type_set = tcpm_port_type_set
+};
+
 void tcpm_tcpc_reset(struct tcpm_port *port)
 {
 	mutex_lock(&port->lock);
@@ -4798,11 +4796,8 @@ struct tcpm_port *tcpm_register_port(struct device *dev, struct tcpc_dev *tcpc)
 	port->typec_caps.fwnode = tcpc->fwnode;
 	port->typec_caps.revision = 0x0120;	/* Type-C spec release 1.2 */
 	port->typec_caps.pd_revision = 0x0300;	/* USB-PD spec release 3.0 */
-	port->typec_caps.dr_set = tcpm_dr_set;
-	port->typec_caps.pr_set = tcpm_pr_set;
-	port->typec_caps.vconn_set = tcpm_vconn_set;
-	port->typec_caps.try_role = tcpm_try_role;
-	port->typec_caps.port_type_set = tcpm_port_type_set;
+	port->typec_caps.driver_data = port;
+	port->typec_caps.ops = &tcpm_ops;
 
 	port->partner_desc.identity = &port->partner_ident;
 	port->port_type = port->typec_caps.type;
diff --git a/drivers/usb/typec/tps6598x.c b/drivers/usb/typec/tps6598x.c
index a38d140..0698add 100644
--- a/drivers/usb/typec/tps6598x.c
+++ b/drivers/usb/typec/tps6598x.c
@@ -94,7 +94,6 @@ struct tps6598x {
 	struct typec_port *port;
 	struct typec_partner *partner;
 	struct usb_pd_identity partner_identity;
-	struct typec_capability typec_cap;
 };
 
 /*
@@ -307,11 +306,10 @@ static int tps6598x_exec_cmd(struct tps6598x *tps, const char *cmd,
 	return 0;
 }
 
-static int
-tps6598x_dr_set(const struct typec_capability *cap, enum typec_data_role role)
+static int tps6598x_dr_set(struct typec_port *port, enum typec_data_role role)
 {
-	struct tps6598x *tps = container_of(cap, struct tps6598x, typec_cap);
 	const char *cmd = (role == TYPEC_DEVICE) ? "SWUF" : "SWDF";
+	struct tps6598x *tps = typec_get_drvdata(port);
 	u32 status;
 	int ret;
 
@@ -338,11 +336,10 @@ tps6598x_dr_set(const struct typec_capability *cap, enum typec_data_role role)
 	return ret;
 }
 
-static int
-tps6598x_pr_set(const struct typec_capability *cap, enum typec_role role)
+static int tps6598x_pr_set(struct typec_port *port, enum typec_role role)
 {
-	struct tps6598x *tps = container_of(cap, struct tps6598x, typec_cap);
 	const char *cmd = (role == TYPEC_SINK) ? "SWSk" : "SWSr";
+	struct tps6598x *tps = typec_get_drvdata(port);
 	u32 status;
 	int ret;
 
@@ -369,6 +366,11 @@ tps6598x_pr_set(const struct typec_capability *cap, enum typec_role role)
 	return ret;
 }
 
+static const struct typec_operations tps6598x_ops = {
+	.dr_set = tps6598x_dr_set,
+	.pr_set = tps6598x_pr_set,
+};
+
 static irqreturn_t tps6598x_interrupt(int irq, void *data)
 {
 	struct tps6598x *tps = data;
@@ -448,6 +450,7 @@ static const struct regmap_config tps6598x_regmap_config = {
 
 static int tps6598x_probe(struct i2c_client *client)
 {
+	struct typec_capability typec_cap = { };
 	struct tps6598x *tps;
 	u32 status;
 	u32 conf;
@@ -492,40 +495,40 @@ static int tps6598x_probe(struct i2c_client *client)
 	if (ret < 0)
 		return ret;
 
-	tps->typec_cap.revision = USB_TYPEC_REV_1_2;
-	tps->typec_cap.pd_revision = 0x200;
-	tps->typec_cap.prefer_role = TYPEC_NO_PREFERRED_ROLE;
-	tps->typec_cap.pr_set = tps6598x_pr_set;
-	tps->typec_cap.dr_set = tps6598x_dr_set;
+	typec_cap.revision = USB_TYPEC_REV_1_2;
+	typec_cap.pd_revision = 0x200;
+	typec_cap.prefer_role = TYPEC_NO_PREFERRED_ROLE;
+	typec_cap.driver_data = tps;
+	typec_cap.ops = &tps6598x_ops;
 
 	switch (TPS_SYSCONF_PORTINFO(conf)) {
 	case TPS_PORTINFO_SINK_ACCESSORY:
 	case TPS_PORTINFO_SINK:
-		tps->typec_cap.type = TYPEC_PORT_SNK;
-		tps->typec_cap.data = TYPEC_PORT_UFP;
+		typec_cap.type = TYPEC_PORT_SNK;
+		typec_cap.data = TYPEC_PORT_UFP;
 		break;
 	case TPS_PORTINFO_DRP_UFP_DRD:
 	case TPS_PORTINFO_DRP_DFP_DRD:
-		tps->typec_cap.type = TYPEC_PORT_DRP;
-		tps->typec_cap.data = TYPEC_PORT_DRD;
+		typec_cap.type = TYPEC_PORT_DRP;
+		typec_cap.data = TYPEC_PORT_DRD;
 		break;
 	case TPS_PORTINFO_DRP_UFP:
-		tps->typec_cap.type = TYPEC_PORT_DRP;
-		tps->typec_cap.data = TYPEC_PORT_UFP;
+		typec_cap.type = TYPEC_PORT_DRP;
+		typec_cap.data = TYPEC_PORT_UFP;
 		break;
 	case TPS_PORTINFO_DRP_DFP:
-		tps->typec_cap.type = TYPEC_PORT_DRP;
-		tps->typec_cap.data = TYPEC_PORT_DFP;
+		typec_cap.type = TYPEC_PORT_DRP;
+		typec_cap.data = TYPEC_PORT_DFP;
 		break;
 	case TPS_PORTINFO_SOURCE:
-		tps->typec_cap.type = TYPEC_PORT_SRC;
-		tps->typec_cap.data = TYPEC_PORT_DFP;
+		typec_cap.type = TYPEC_PORT_SRC;
+		typec_cap.data = TYPEC_PORT_DFP;
 		break;
 	default:
 		return -ENODEV;
 	}
 
-	tps->port = typec_register_port(&client->dev, &tps->typec_cap);
+	tps->port = typec_register_port(&client->dev, &typec_cap);
 	if (IS_ERR(tps->port))
 		return PTR_ERR(tps->port);
 
diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
index 4d56408a..4edbf28 100644
--- a/drivers/usb/typec/ucsi/ucsi.c
+++ b/drivers/usb/typec/ucsi/ucsi.c
@@ -17,9 +17,6 @@
 #include "ucsi.h"
 #include "trace.h"
 
-#define to_ucsi_connector(_cap_) container_of(_cap_, struct ucsi_connector, \
-					      typec_cap)
-
 /*
  * UCSI_TIMEOUT_MS - PPM communication timeout
  *
@@ -723,10 +720,9 @@ static int ucsi_role_cmd(struct ucsi_connector *con, struct ucsi_control *ctrl)
 	return ret;
 }
 
-static int
-ucsi_dr_swap(const struct typec_capability *cap, enum typec_data_role role)
+static int ucsi_dr_swap(struct typec_port *port, enum typec_data_role role)
 {
-	struct ucsi_connector *con = to_ucsi_connector(cap);
+	struct ucsi_connector *con = typec_get_drvdata(port);
 	struct ucsi_control ctrl;
 	int ret = 0;
 
@@ -758,10 +754,9 @@ ucsi_dr_swap(const struct typec_capability *cap, enum typec_data_role role)
 	return ret < 0 ? ret : 0;
 }
 
-static int
-ucsi_pr_swap(const struct typec_capability *cap, enum typec_role role)
+static int ucsi_pr_swap(struct typec_port *port, enum typec_role role)
 {
-	struct ucsi_connector *con = to_ucsi_connector(cap);
+	struct ucsi_connector *con = typec_get_drvdata(port);
 	struct ucsi_control ctrl;
 	int ret = 0;
 
@@ -798,6 +793,11 @@ ucsi_pr_swap(const struct typec_capability *cap, enum typec_role role)
 	return ret;
 }
 
+static const struct typec_operations ucsi_ops = {
+	.dr_set = ucsi_dr_swap,
+	.pr_set = ucsi_pr_swap
+};
+
 static struct fwnode_handle *ucsi_find_fwnode(struct ucsi_connector *con)
 {
 	struct fwnode_handle *fwnode;
@@ -853,8 +853,8 @@ static int ucsi_register_port(struct ucsi *ucsi, int index)
 		*accessory = TYPEC_ACCESSORY_DEBUG;
 
 	cap->fwnode = ucsi_find_fwnode(con);
-	cap->dr_set = ucsi_dr_swap;
-	cap->pr_set = ucsi_pr_swap;
+	cap->driver_data = con;
+	cap->ops = &ucsi_ops;
 
 	/* Register the connector */
 	con->port = typec_register_port(ucsi->dev, cap);
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
index 57ab79f..459483c 100644
--- a/drivers/vhost/vhost.c
+++ b/drivers/vhost/vhost.c
@@ -30,6 +30,7 @@
 #include <linux/sched/signal.h>
 #include <linux/interval_tree_generic.h>
 #include <linux/nospec.h>
+#include <linux/kcov.h>
 
 #include "vhost.h"
 
@@ -357,7 +358,9 @@ static int vhost_worker(void *data)
 		llist_for_each_entry_safe(work, work_next, node, node) {
 			clear_bit(VHOST_WORK_QUEUED, &work->flags);
 			__set_current_state(TASK_RUNNING);
+			kcov_remote_start_common(dev->kcov_handle);
 			work->fn(work);
+			kcov_remote_stop();
 			if (need_resched())
 				schedule();
 		}
@@ -546,6 +549,7 @@ long vhost_dev_set_owner(struct vhost_dev *dev)
 
 	/* No owner, become one */
 	dev->mm = get_task_mm(current);
+	dev->kcov_handle = kcov_common_handle();
 	worker = kthread_create(vhost_worker, dev, "vhost-%d", current->pid);
 	if (IS_ERR(worker)) {
 		err = PTR_ERR(worker);
@@ -571,6 +575,7 @@ long vhost_dev_set_owner(struct vhost_dev *dev)
 	if (dev->mm)
 		mmput(dev->mm);
 	dev->mm = NULL;
+	dev->kcov_handle = 0;
 err_mm:
 	return err;
 }
@@ -682,6 +687,7 @@ void vhost_dev_cleanup(struct vhost_dev *dev)
 	if (dev->worker) {
 		kthread_stop(dev->worker);
 		dev->worker = NULL;
+		dev->kcov_handle = 0;
 	}
 	if (dev->mm)
 		mmput(dev->mm);
diff --git a/drivers/vhost/vhost.h b/drivers/vhost/vhost.h
index e9ed272..a123fd7 100644
--- a/drivers/vhost/vhost.h
+++ b/drivers/vhost/vhost.h
@@ -173,6 +173,7 @@ struct vhost_dev {
 	int iov_limit;
 	int weight;
 	int byte_weight;
+	u64 kcov_handle;
 };
 
 bool vhost_exceeds_weight(struct vhost_virtqueue *vq, int pkts, int total_len);
diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c
index f21f5bf..3399368 100644
--- a/drivers/vhost/vsock.c
+++ b/drivers/vhost/vsock.c
@@ -386,6 +386,8 @@ static bool vhost_vsock_more_replies(struct vhost_vsock *vsock)
 
 static struct virtio_transport vhost_transport = {
 	.transport = {
+		.module                   = THIS_MODULE,
+
 		.get_local_cid            = vhost_transport_get_local_cid,
 
 		.init                     = virtio_transport_do_socket_init,
@@ -418,13 +420,8 @@ static struct virtio_transport vhost_transport = {
 		.notify_send_pre_block    = virtio_transport_notify_send_pre_block,
 		.notify_send_pre_enqueue  = virtio_transport_notify_send_pre_enqueue,
 		.notify_send_post_enqueue = virtio_transport_notify_send_post_enqueue,
+		.notify_buffer_size       = virtio_transport_notify_buffer_size,
 
-		.set_buffer_size          = virtio_transport_set_buffer_size,
-		.set_min_buffer_size      = virtio_transport_set_min_buffer_size,
-		.set_max_buffer_size      = virtio_transport_set_max_buffer_size,
-		.get_buffer_size          = virtio_transport_get_buffer_size,
-		.get_min_buffer_size      = virtio_transport_get_min_buffer_size,
-		.get_max_buffer_size      = virtio_transport_get_max_buffer_size,
 	},
 
 	.send_pkt = vhost_transport_send_pkt,
@@ -728,6 +725,12 @@ static int vhost_vsock_set_cid(struct vhost_vsock *vsock, u64 guest_cid)
 	if (guest_cid > U32_MAX)
 		return -EINVAL;
 
+	/* Refuse if CID is assigned to the guest->host transport (i.e. nested
+	 * VM), to make the loopback work.
+	 */
+	if (vsock_find_cid(guest_cid))
+		return -EADDRINUSE;
+
 	/* Refuse if CID is already in use */
 	mutex_lock(&vhost_vsock_mutex);
 	other = vhost_vsock_get(guest_cid);
@@ -843,7 +846,8 @@ static int __init vhost_vsock_init(void)
 {
 	int ret;
 
-	ret = vsock_core_init(&vhost_transport.transport);
+	ret = vsock_core_register(&vhost_transport.transport,
+				  VSOCK_TRANSPORT_F_H2G);
 	if (ret < 0)
 		return ret;
 	return misc_register(&vhost_vsock_misc);
@@ -852,7 +856,7 @@ static int __init vhost_vsock_init(void)
 static void __exit vhost_vsock_exit(void)
 {
 	misc_deregister(&vhost_vsock_misc);
-	vsock_core_exit();
+	vsock_core_unregister(&vhost_transport.transport);
 };
 
 module_init(vhost_vsock_init);
diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c
index 746eebc..c79ea13 100644
--- a/drivers/video/backlight/pwm_bl.c
+++ b/drivers/video/backlight/pwm_bl.c
@@ -616,7 +616,8 @@ static int pwm_backlight_probe(struct platform_device *pdev)
 		pb->scale = data->max_brightness;
 	}
 
-	pb->lth_brightness = data->lth_brightness * (state.period / pb->scale);
+	pb->lth_brightness = data->lth_brightness * (div_u64(state.period,
+				pb->scale));
 
 	props.type = BACKLIGHT_RAW;
 	props.max_brightness = data->max_brightness;
diff --git a/drivers/virtio/virtio_input.c b/drivers/virtio/virtio_input.c
index 5ae5296..8a0b047 100644
--- a/drivers/virtio/virtio_input.c
+++ b/drivers/virtio/virtio_input.c
@@ -3,6 +3,7 @@
 #include <linux/virtio.h>
 #include <linux/virtio_config.h>
 #include <linux/input.h>
+#include <linux/input/mt.h>
 
 #include <uapi/linux/virtio_ids.h>
 #include <uapi/linux/virtio_input.h>
@@ -164,6 +165,15 @@ static void virtinput_cfg_abs(struct virtio_input *vi, int abs)
 	virtio_cread(vi->vdev, struct virtio_input_config, u.abs.flat, &fl);
 	input_set_abs_params(vi->idev, abs, mi, ma, fu, fl);
 	input_abs_set_res(vi->idev, abs, re);
+	if (abs == ABS_MT_TRACKING_ID) {
+		unsigned int slot_flags =
+			test_bit(INPUT_PROP_DIRECT, vi->idev->propbit) ?
+				INPUT_MT_DIRECT : 0;
+
+		input_mt_init_slots(vi->idev,
+				    ma, /* input max finger */
+				    slot_flags);
+	}
 }
 
 static int virtinput_init_vqs(struct virtio_input *vi)
diff --git a/fs/9p/acl.c b/fs/9p/acl.c
index 6261719..cb14e8b 100644
--- a/fs/9p/acl.c
+++ b/fs/9p/acl.c
@@ -214,7 +214,8 @@ int v9fs_acl_mode(struct inode *dir, umode_t *modep,
 
 static int v9fs_xattr_get_acl(const struct xattr_handler *handler,
 			      struct dentry *dentry, struct inode *inode,
-			      const char *name, void *buffer, size_t size)
+			      const char *name, void *buffer, size_t size,
+			      int flags)
 {
 	struct v9fs_session_info *v9ses;
 	struct posix_acl *acl;
diff --git a/fs/9p/xattr.c b/fs/9p/xattr.c
index ac8ff8c..5cfa772 100644
--- a/fs/9p/xattr.c
+++ b/fs/9p/xattr.c
@@ -139,7 +139,8 @@ ssize_t v9fs_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size)
 
 static int v9fs_xattr_handler_get(const struct xattr_handler *handler,
 				  struct dentry *dentry, struct inode *inode,
-				  const char *name, void *buffer, size_t size)
+				  const char *name, void *buffer, size_t size,
+				  int flags)
 {
 	const char *full_name = xattr_full_name(handler, name);
 
diff --git a/fs/Kconfig b/fs/Kconfig
index 2501e6f..1c3298e4 100644
--- a/fs/Kconfig
+++ b/fs/Kconfig
@@ -121,6 +121,7 @@
 source "fs/autofs/Kconfig"
 source "fs/fuse/Kconfig"
 source "fs/overlayfs/Kconfig"
+source "fs/incfs/Kconfig"
 
 menu "Caches"
 
diff --git a/fs/Makefile b/fs/Makefile
index 14231b4..3d717a6 100644
--- a/fs/Makefile
+++ b/fs/Makefile
@@ -111,6 +111,7 @@
 obj-$(CONFIG_FUSE_FS)		+= fuse/
 obj-$(CONFIG_OVERLAY_FS)	+= overlayfs/
 obj-$(CONFIG_ORANGEFS_FS)       += orangefs/
+obj-$(CONFIG_INCREMENTAL_FS)	+= incfs/
 obj-$(CONFIG_UDF_FS)		+= udf/
 obj-$(CONFIG_SUN_OPENPROMFS)	+= openpromfs/
 obj-$(CONFIG_OMFS_FS)		+= omfs/
diff --git a/fs/afs/xattr.c b/fs/afs/xattr.c
index 5552d03..e3a33d7 100644
--- a/fs/afs/xattr.c
+++ b/fs/afs/xattr.c
@@ -40,7 +40,7 @@ ssize_t afs_listxattr(struct dentry *dentry, char *buffer, size_t size)
 static int afs_xattr_get_acl(const struct xattr_handler *handler,
 			     struct dentry *dentry,
 			     struct inode *inode, const char *name,
-			     void *buffer, size_t size)
+			     void *buffer, size_t size, int flags)
 {
 	struct afs_fs_cursor fc;
 	struct afs_status_cb *scb;
@@ -163,7 +163,7 @@ static const struct xattr_handler afs_xattr_afs_acl_handler = {
 static int afs_xattr_get_yfs(const struct xattr_handler *handler,
 			     struct dentry *dentry,
 			     struct inode *inode, const char *name,
-			     void *buffer, size_t size)
+			     void *buffer, size_t size, int flags)
 {
 	struct afs_fs_cursor fc;
 	struct afs_status_cb *scb;
@@ -228,11 +228,11 @@ static int afs_xattr_get_yfs(const struct xattr_handler *handler,
 		break;
 	case 1:
 		data = buf;
-		dsize = snprintf(buf, sizeof(buf), "%u", yacl->inherit_flag);
+		dsize = scnprintf(buf, sizeof(buf), "%u", yacl->inherit_flag);
 		break;
 	case 2:
 		data = buf;
-		dsize = snprintf(buf, sizeof(buf), "%u", yacl->num_cleaned);
+		dsize = scnprintf(buf, sizeof(buf), "%u", yacl->num_cleaned);
 		break;
 	case 3:
 		data = yacl->vol_acl->data;
@@ -334,7 +334,7 @@ static const struct xattr_handler afs_xattr_yfs_handler = {
 static int afs_xattr_get_cell(const struct xattr_handler *handler,
 			      struct dentry *dentry,
 			      struct inode *inode, const char *name,
-			      void *buffer, size_t size)
+			      void *buffer, size_t size, int flags)
 {
 	struct afs_vnode *vnode = AFS_FS_I(inode);
 	struct afs_cell *cell = vnode->volume->cell;
@@ -361,7 +361,7 @@ static const struct xattr_handler afs_xattr_afs_cell_handler = {
 static int afs_xattr_get_fid(const struct xattr_handler *handler,
 			     struct dentry *dentry,
 			     struct inode *inode, const char *name,
-			     void *buffer, size_t size)
+			     void *buffer, size_t size, int flags)
 {
 	struct afs_vnode *vnode = AFS_FS_I(inode);
 	char text[16 + 1 + 24 + 1 + 8 + 1];
@@ -370,13 +370,15 @@ static int afs_xattr_get_fid(const struct xattr_handler *handler,
 	/* The volume ID is 64-bit, the vnode ID is 96-bit and the
 	 * uniquifier is 32-bit.
 	 */
-	len = sprintf(text, "%llx:", vnode->fid.vid);
+	len = scnprintf(text, sizeof(text), "%llx:", vnode->fid.vid);
 	if (vnode->fid.vnode_hi)
-		len += sprintf(text + len, "%x%016llx",
-			       vnode->fid.vnode_hi, vnode->fid.vnode);
+		len += scnprintf(text + len, sizeof(text) - len, "%x%016llx",
+				vnode->fid.vnode_hi, vnode->fid.vnode);
 	else
-		len += sprintf(text + len, "%llx", vnode->fid.vnode);
-	len += sprintf(text + len, ":%x", vnode->fid.unique);
+		len += scnprintf(text + len, sizeof(text) - len, "%llx",
+				 vnode->fid.vnode);
+	len += scnprintf(text + len, sizeof(text) - len, ":%x",
+			 vnode->fid.unique);
 
 	if (size == 0)
 		return len;
@@ -397,7 +399,7 @@ static const struct xattr_handler afs_xattr_afs_fid_handler = {
 static int afs_xattr_get_volume(const struct xattr_handler *handler,
 			      struct dentry *dentry,
 			      struct inode *inode, const char *name,
-			      void *buffer, size_t size)
+			      void *buffer, size_t size, int flags)
 {
 	struct afs_vnode *vnode = AFS_FS_I(inode);
 	const char *volname = vnode->volume->name;
diff --git a/fs/aio.c b/fs/aio.c
index 47bb7b5..f245823 100644
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -325,13 +325,16 @@ static void aio_free_ring(struct kioctx *ctx)
 	}
 }
 
-static int aio_ring_mremap(struct vm_area_struct *vma)
+static int aio_ring_mremap(struct vm_area_struct *vma, unsigned long flags)
 {
 	struct file *file = vma->vm_file;
 	struct mm_struct *mm = vma->vm_mm;
 	struct kioctx_table *table;
 	int i, res = -EINVAL;
 
+	if (flags & MREMAP_DONTUNMAP)
+		return -EINVAL;
+
 	spin_lock(&mm->ioctx_lock);
 	rcu_read_lock();
 	table = rcu_dereference(mm->ioctx_table);
diff --git a/fs/btrfs/xattr.c b/fs/btrfs/xattr.c
index 95d9aeb..1e522e1 100644
--- a/fs/btrfs/xattr.c
+++ b/fs/btrfs/xattr.c
@@ -353,7 +353,8 @@ ssize_t btrfs_listxattr(struct dentry *dentry, char *buffer, size_t size)
 
 static int btrfs_xattr_handler_get(const struct xattr_handler *handler,
 				   struct dentry *unused, struct inode *inode,
-				   const char *name, void *buffer, size_t size)
+				   const char *name, void *buffer, size_t size,
+				   int flags)
 {
 	name = xattr_full_name(handler, name);
 	return btrfs_getxattr(inode, name, buffer, size);
diff --git a/fs/buffer.c b/fs/buffer.c
index 0d7bd77..eefc907 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -47,6 +47,7 @@
 #include <linux/pagevec.h>
 #include <linux/sched/mm.h>
 #include <trace/events/block.h>
+#include <linux/fscrypt.h>
 
 static int fsync_buffers_list(spinlock_t *lock, struct list_head *list);
 static int submit_bh_wbc(int op, int op_flags, struct buffer_head *bh,
@@ -3040,6 +3041,8 @@ static int submit_bh_wbc(int op, int op_flags, struct buffer_head *bh,
 	 */
 	bio = bio_alloc(GFP_NOIO, 1);
 
+	fscrypt_set_bio_crypt_ctx_bh(bio, bh, GFP_NOIO);
+
 	bio->bi_iter.bi_sector = bh->b_blocknr * (bh->b_size >> 9);
 	bio_set_dev(bio, bh->b_bdev);
 	bio->bi_write_hint = write_hint;
diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c
index cb18ee6..a789f1e 100644
--- a/fs/ceph/xattr.c
+++ b/fs/ceph/xattr.c
@@ -1153,7 +1153,8 @@ int __ceph_setxattr(struct inode *inode, const char *name,
 
 static int ceph_get_xattr_handler(const struct xattr_handler *handler,
 				  struct dentry *dentry, struct inode *inode,
-				  const char *name, void *value, size_t size)
+				  const char *name, void *value, size_t size,
+				  int flags)
 {
 	if (!ceph_is_valid_xattr(name))
 		return -EOPNOTSUPP;
diff --git a/fs/cifs/xattr.c b/fs/cifs/xattr.c
index db4ba8f..e44e562 100644
--- a/fs/cifs/xattr.c
+++ b/fs/cifs/xattr.c
@@ -199,7 +199,7 @@ static int cifs_creation_time_get(struct dentry *dentry, struct inode *inode,
 
 static int cifs_xattr_get(const struct xattr_handler *handler,
 			  struct dentry *dentry, struct inode *inode,
-			  const char *name, void *value, size_t size)
+			  const char *name, void *value, size_t size, int flags)
 {
 	ssize_t rc = -EOPNOTSUPP;
 	unsigned int xid;
diff --git a/fs/crypto/Kconfig b/fs/crypto/Kconfig
index ff5a174..39605aa 100644
--- a/fs/crypto/Kconfig
+++ b/fs/crypto/Kconfig
@@ -2,13 +2,9 @@
 config FS_ENCRYPTION
 	bool "FS Encryption (Per-file encryption)"
 	select CRYPTO
-	select CRYPTO_AES
-	select CRYPTO_CBC
-	select CRYPTO_ECB
-	select CRYPTO_XTS
-	select CRYPTO_CTS
-	select CRYPTO_SHA512
-	select CRYPTO_HMAC
+	select CRYPTO_HASH
+	select CRYPTO_BLKCIPHER
+	select CRYPTO_LIB_SHA256
 	select KEYS
 	help
 	  Enable encryption of files and directories.  This
@@ -16,3 +12,21 @@
 	  efficient since it avoids caching the encrypted and
 	  decrypted pages in the page cache.  Currently Ext4,
 	  F2FS and UBIFS make use of this feature.
+
+# Filesystems supporting encryption must select this if FS_ENCRYPTION.  This
+# allows the algorithms to be built as modules when all the filesystems are.
+config FS_ENCRYPTION_ALGS
+	tristate
+	select CRYPTO_AES
+	select CRYPTO_CBC
+	select CRYPTO_CTS
+	select CRYPTO_ECB
+	select CRYPTO_HMAC
+	select CRYPTO_SHA512
+	select CRYPTO_XTS
+
+config FS_ENCRYPTION_INLINE_CRYPT
+	bool "Enable fscrypt to use inline crypto"
+	depends on FS_ENCRYPTION && BLK_INLINE_ENCRYPTION
+	help
+	  Enable fscrypt to use inline encryption hardware if available.
diff --git a/fs/crypto/Makefile b/fs/crypto/Makefile
index 232e2bb..652c718 100644
--- a/fs/crypto/Makefile
+++ b/fs/crypto/Makefile
@@ -11,3 +11,4 @@
 	      policy.o
 
 fscrypto-$(CONFIG_BLOCK) += bio.o
+fscrypto-$(CONFIG_FS_ENCRYPTION_INLINE_CRYPT) += inline_crypt.o
diff --git a/fs/crypto/bio.c b/fs/crypto/bio.c
index 82da251..b048a0e 100644
--- a/fs/crypto/bio.c
+++ b/fs/crypto/bio.c
@@ -26,7 +26,7 @@
 #include <linux/namei.h>
 #include "fscrypt_private.h"
 
-static void __fscrypt_decrypt_bio(struct bio *bio, bool done)
+void fscrypt_decrypt_bio(struct bio *bio)
 {
 	struct bio_vec *bv;
 	struct bvec_iter_all iter_all;
@@ -37,84 +37,156 @@ static void __fscrypt_decrypt_bio(struct bio *bio, bool done)
 							   bv->bv_offset);
 		if (ret)
 			SetPageError(page);
-		else if (done)
-			SetPageUptodate(page);
-		if (done)
-			unlock_page(page);
 	}
 }
-
-void fscrypt_decrypt_bio(struct bio *bio)
-{
-	__fscrypt_decrypt_bio(bio, false);
-}
 EXPORT_SYMBOL(fscrypt_decrypt_bio);
 
-static void completion_pages(struct work_struct *work)
+static int fscrypt_zeroout_range_inline_crypt(const struct inode *inode,
+					      pgoff_t lblk, sector_t pblk,
+					      unsigned int len)
 {
-	struct fscrypt_ctx *ctx = container_of(work, struct fscrypt_ctx, work);
-	struct bio *bio = ctx->bio;
+	const unsigned int blockbits = inode->i_blkbits;
+	const unsigned int blocks_per_page = 1 << (PAGE_SHIFT - blockbits);
+	struct bio *bio;
+	int ret, err = 0;
+	int num_pages = 0;
 
-	__fscrypt_decrypt_bio(bio, true);
-	fscrypt_release_ctx(ctx);
+	/* This always succeeds since __GFP_DIRECT_RECLAIM is set. */
+	bio = bio_alloc(GFP_NOFS, BIO_MAX_PAGES);
+
+	while (len) {
+		unsigned int blocks_this_page = min(len, blocks_per_page);
+		unsigned int bytes_this_page = blocks_this_page << blockbits;
+
+		if (num_pages == 0) {
+			fscrypt_set_bio_crypt_ctx(bio, inode, lblk, GFP_NOFS);
+			bio_set_dev(bio, inode->i_sb->s_bdev);
+			bio->bi_iter.bi_sector =
+					pblk << (blockbits - SECTOR_SHIFT);
+			bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
+		}
+		ret = bio_add_page(bio, ZERO_PAGE(0), bytes_this_page, 0);
+		if (WARN_ON(ret != bytes_this_page)) {
+			err = -EIO;
+			goto out;
+		}
+		num_pages++;
+		len -= blocks_this_page;
+		lblk += blocks_this_page;
+		pblk += blocks_this_page;
+		if (num_pages == BIO_MAX_PAGES || !len ||
+		    !fscrypt_mergeable_bio(bio, inode, lblk)) {
+			err = submit_bio_wait(bio);
+			if (err)
+				goto out;
+			bio_reset(bio);
+			num_pages = 0;
+		}
+	}
+out:
 	bio_put(bio);
+	return err;
 }
 
-void fscrypt_enqueue_decrypt_bio(struct fscrypt_ctx *ctx, struct bio *bio)
-{
-	INIT_WORK(&ctx->work, completion_pages);
-	ctx->bio = bio;
-	fscrypt_enqueue_decrypt_work(&ctx->work);
-}
-EXPORT_SYMBOL(fscrypt_enqueue_decrypt_bio);
-
+/**
+ * fscrypt_zeroout_range() - zero out a range of blocks in an encrypted file
+ * @inode: the file's inode
+ * @lblk: the first file logical block to zero out
+ * @pblk: the first filesystem physical block to zero out
+ * @len: number of blocks to zero out
+ *
+ * Zero out filesystem blocks in an encrypted regular file on-disk, i.e. write
+ * ciphertext blocks which decrypt to the all-zeroes block.  The blocks must be
+ * both logically and physically contiguous.  It's also assumed that the
+ * filesystem only uses a single block device, ->s_bdev.
+ *
+ * Note that since each block uses a different IV, this involves writing a
+ * different ciphertext to each block; we can't simply reuse the same one.
+ *
+ * Return: 0 on success; -errno on failure.
+ */
 int fscrypt_zeroout_range(const struct inode *inode, pgoff_t lblk,
-				sector_t pblk, unsigned int len)
+			  sector_t pblk, unsigned int len)
 {
 	const unsigned int blockbits = inode->i_blkbits;
 	const unsigned int blocksize = 1 << blockbits;
-	struct page *ciphertext_page;
+	const unsigned int blocks_per_page_bits = PAGE_SHIFT - blockbits;
+	const unsigned int blocks_per_page = 1 << blocks_per_page_bits;
+	struct page *pages[16]; /* write up to 16 pages at a time */
+	unsigned int nr_pages;
+	unsigned int i;
+	unsigned int offset;
 	struct bio *bio;
-	int ret, err = 0;
+	int ret, err;
 
-	ciphertext_page = fscrypt_alloc_bounce_page(GFP_NOWAIT);
-	if (!ciphertext_page)
-		return -ENOMEM;
+	if (len == 0)
+		return 0;
 
-	while (len--) {
-		err = fscrypt_crypt_block(inode, FS_ENCRYPT, lblk,
-					  ZERO_PAGE(0), ciphertext_page,
-					  blocksize, 0, GFP_NOFS);
-		if (err)
-			goto errout;
+	if (fscrypt_inode_uses_inline_crypto(inode))
+		return fscrypt_zeroout_range_inline_crypt(inode, lblk, pblk,
+							  len);
 
-		bio = bio_alloc(GFP_NOWAIT, 1);
-		if (!bio) {
-			err = -ENOMEM;
-			goto errout;
-		}
+	BUILD_BUG_ON(ARRAY_SIZE(pages) > BIO_MAX_PAGES);
+	nr_pages = min_t(unsigned int, ARRAY_SIZE(pages),
+			 (len + blocks_per_page - 1) >> blocks_per_page_bits);
+
+	/*
+	 * We need at least one page for ciphertext.  Allocate the first one
+	 * from a mempool, with __GFP_DIRECT_RECLAIM set so that it can't fail.
+	 *
+	 * Any additional page allocations are allowed to fail, as they only
+	 * help performance, and waiting on the mempool for them could deadlock.
+	 */
+	for (i = 0; i < nr_pages; i++) {
+		pages[i] = fscrypt_alloc_bounce_page(i == 0 ? GFP_NOFS :
+						     GFP_NOWAIT | __GFP_NOWARN);
+		if (!pages[i])
+			break;
+	}
+	nr_pages = i;
+	if (WARN_ON(nr_pages <= 0))
+		return -EINVAL;
+
+	/* This always succeeds since __GFP_DIRECT_RECLAIM is set. */
+	bio = bio_alloc(GFP_NOFS, nr_pages);
+
+	do {
 		bio_set_dev(bio, inode->i_sb->s_bdev);
 		bio->bi_iter.bi_sector = pblk << (blockbits - 9);
 		bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
-		ret = bio_add_page(bio, ciphertext_page, blocksize, 0);
-		if (WARN_ON(ret != blocksize)) {
-			/* should never happen! */
-			bio_put(bio);
-			err = -EIO;
-			goto errout;
-		}
+
+		i = 0;
+		offset = 0;
+		do {
+			err = fscrypt_crypt_block(inode, FS_ENCRYPT, lblk,
+						  ZERO_PAGE(0), pages[i],
+						  blocksize, offset, GFP_NOFS);
+			if (err)
+				goto out;
+			lblk++;
+			pblk++;
+			len--;
+			offset += blocksize;
+			if (offset == PAGE_SIZE || len == 0) {
+				ret = bio_add_page(bio, pages[i++], offset, 0);
+				if (WARN_ON(ret != offset)) {
+					err = -EIO;
+					goto out;
+				}
+				offset = 0;
+			}
+		} while (i != nr_pages && len != 0);
+
 		err = submit_bio_wait(bio);
-		if (err == 0 && bio->bi_status)
-			err = -EIO;
-		bio_put(bio);
 		if (err)
-			goto errout;
-		lblk++;
-		pblk++;
-	}
+			goto out;
+		bio_reset(bio);
+	} while (len != 0);
 	err = 0;
-errout:
-	fscrypt_free_bounce_page(ciphertext_page);
+out:
+	bio_put(bio);
+	for (i = 0; i < nr_pages; i++)
+		fscrypt_free_bounce_page(pages[i]);
 	return err;
 }
 EXPORT_SYMBOL(fscrypt_zeroout_range);
diff --git a/fs/crypto/crypto.c b/fs/crypto/crypto.c
index 32a7ad0..4fcca79f 100644
--- a/fs/crypto/crypto.c
+++ b/fs/crypto/crypto.c
@@ -25,31 +25,20 @@
 #include <linux/module.h>
 #include <linux/scatterlist.h>
 #include <linux/ratelimit.h>
-#include <linux/dcache.h>
-#include <linux/namei.h>
-#include <crypto/aes.h>
 #include <crypto/skcipher.h>
 #include "fscrypt_private.h"
 
 static unsigned int num_prealloc_crypto_pages = 32;
-static unsigned int num_prealloc_crypto_ctxs = 128;
 
 module_param(num_prealloc_crypto_pages, uint, 0444);
 MODULE_PARM_DESC(num_prealloc_crypto_pages,
 		"Number of crypto pages to preallocate");
-module_param(num_prealloc_crypto_ctxs, uint, 0444);
-MODULE_PARM_DESC(num_prealloc_crypto_ctxs,
-		"Number of crypto contexts to preallocate");
 
 static mempool_t *fscrypt_bounce_page_pool = NULL;
 
-static LIST_HEAD(fscrypt_free_ctxs);
-static DEFINE_SPINLOCK(fscrypt_ctx_lock);
-
 static struct workqueue_struct *fscrypt_read_workqueue;
 static DEFINE_MUTEX(fscrypt_init_mutex);
 
-static struct kmem_cache *fscrypt_ctx_cachep;
 struct kmem_cache *fscrypt_info_cachep;
 
 void fscrypt_enqueue_decrypt_work(struct work_struct *work)
@@ -58,62 +47,6 @@ void fscrypt_enqueue_decrypt_work(struct work_struct *work)
 }
 EXPORT_SYMBOL(fscrypt_enqueue_decrypt_work);
 
-/**
- * fscrypt_release_ctx() - Release a decryption context
- * @ctx: The decryption context to release.
- *
- * If the decryption context was allocated from the pre-allocated pool, return
- * it to that pool.  Else, free it.
- */
-void fscrypt_release_ctx(struct fscrypt_ctx *ctx)
-{
-	unsigned long flags;
-
-	if (ctx->flags & FS_CTX_REQUIRES_FREE_ENCRYPT_FL) {
-		kmem_cache_free(fscrypt_ctx_cachep, ctx);
-	} else {
-		spin_lock_irqsave(&fscrypt_ctx_lock, flags);
-		list_add(&ctx->free_list, &fscrypt_free_ctxs);
-		spin_unlock_irqrestore(&fscrypt_ctx_lock, flags);
-	}
-}
-EXPORT_SYMBOL(fscrypt_release_ctx);
-
-/**
- * fscrypt_get_ctx() - Get a decryption context
- * @gfp_flags:   The gfp flag for memory allocation
- *
- * Allocate and initialize a decryption context.
- *
- * Return: A new decryption context on success; an ERR_PTR() otherwise.
- */
-struct fscrypt_ctx *fscrypt_get_ctx(gfp_t gfp_flags)
-{
-	struct fscrypt_ctx *ctx;
-	unsigned long flags;
-
-	/*
-	 * First try getting a ctx from the free list so that we don't have to
-	 * call into the slab allocator.
-	 */
-	spin_lock_irqsave(&fscrypt_ctx_lock, flags);
-	ctx = list_first_entry_or_null(&fscrypt_free_ctxs,
-					struct fscrypt_ctx, free_list);
-	if (ctx)
-		list_del(&ctx->free_list);
-	spin_unlock_irqrestore(&fscrypt_ctx_lock, flags);
-	if (!ctx) {
-		ctx = kmem_cache_zalloc(fscrypt_ctx_cachep, gfp_flags);
-		if (!ctx)
-			return ERR_PTR(-ENOMEM);
-		ctx->flags |= FS_CTX_REQUIRES_FREE_ENCRYPT_FL;
-	} else {
-		ctx->flags &= ~FS_CTX_REQUIRES_FREE_ENCRYPT_FL;
-	}
-	return ctx;
-}
-EXPORT_SYMBOL(fscrypt_get_ctx);
-
 struct page *fscrypt_alloc_bounce_page(gfp_t gfp_flags)
 {
 	return mempool_alloc(fscrypt_bounce_page_pool, gfp_flags);
@@ -121,6 +54,7 @@ struct page *fscrypt_alloc_bounce_page(gfp_t gfp_flags)
 
 /**
  * fscrypt_free_bounce_page() - free a ciphertext bounce page
+ * @bounce_page: the bounce page to free, or NULL
  *
  * Free a bounce page that was allocated by fscrypt_encrypt_pagecache_blocks(),
  * or by fscrypt_alloc_bounce_page() directly.
@@ -135,17 +69,32 @@ void fscrypt_free_bounce_page(struct page *bounce_page)
 }
 EXPORT_SYMBOL(fscrypt_free_bounce_page);
 
+/*
+ * Generate the IV for the given logical block number within the given file.
+ * For filenames encryption, lblk_num == 0.
+ *
+ * Keep this in sync with fscrypt_limit_io_blocks().  fscrypt_limit_io_blocks()
+ * needs to know about any IV generation methods where the low bits of IV don't
+ * simply contain the lblk_num (e.g., IV_INO_LBLK_32).
+ */
 void fscrypt_generate_iv(union fscrypt_iv *iv, u64 lblk_num,
 			 const struct fscrypt_info *ci)
 {
+	u8 flags = fscrypt_policy_flags(&ci->ci_policy);
+
 	memset(iv, 0, ci->ci_mode->ivsize);
+
+	if (flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64) {
+		WARN_ON_ONCE(lblk_num > U32_MAX);
+		WARN_ON_ONCE(ci->ci_inode->i_ino > U32_MAX);
+		lblk_num |= (u64)ci->ci_inode->i_ino << 32;
+	} else if (flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32) {
+		WARN_ON_ONCE(lblk_num > U32_MAX);
+		lblk_num = (u32)(ci->ci_hashed_ino + lblk_num);
+	} else if (flags & FSCRYPT_POLICY_FLAG_DIRECT_KEY) {
+		memcpy(iv->nonce, ci->ci_nonce, FSCRYPT_FILE_NONCE_SIZE);
+	}
 	iv->lblk_num = cpu_to_le64(lblk_num);
-
-	if (fscrypt_is_direct_key_policy(&ci->ci_policy))
-		memcpy(iv->nonce, ci->ci_nonce, FS_KEY_DERIVATION_NONCE_SIZE);
-
-	if (ci->ci_essiv_tfm != NULL)
-		crypto_cipher_encrypt_one(ci->ci_essiv_tfm, iv->raw, iv->raw);
 }
 
 /* Encrypt or decrypt a single filesystem block of file contents */
@@ -159,7 +108,7 @@ int fscrypt_crypt_block(const struct inode *inode, fscrypt_direction_t rw,
 	DECLARE_CRYPTO_WAIT(wait);
 	struct scatterlist dst, src;
 	struct fscrypt_info *ci = inode->i_crypt_info;
-	struct crypto_skcipher *tfm = ci->ci_ctfm;
+	struct crypto_skcipher *tfm = ci->ci_enc_key.tfm;
 	int res = 0;
 
 	if (WARN_ON_ONCE(len <= 0))
@@ -196,13 +145,14 @@ int fscrypt_crypt_block(const struct inode *inode, fscrypt_direction_t rw,
 }
 
 /**
- * fscrypt_encrypt_pagecache_blocks() - Encrypt filesystem blocks from a pagecache page
+ * fscrypt_encrypt_pagecache_blocks() - Encrypt filesystem blocks from a
+ *					pagecache page
  * @page:      The locked pagecache page containing the block(s) to encrypt
  * @len:       Total size of the block(s) to encrypt.  Must be a nonzero
  *		multiple of the filesystem's block size.
  * @offs:      Byte offset within @page of the first block to encrypt.  Must be
  *		a multiple of the filesystem's block size.
- * @gfp_flags: Memory allocation flags
+ * @gfp_flags: Memory allocation flags.  See details below.
  *
  * A new bounce page is allocated, and the specified block(s) are encrypted into
  * it.  In the bounce page, the ciphertext block(s) will be located at the same
@@ -212,6 +162,11 @@ int fscrypt_crypt_block(const struct inode *inode, fscrypt_direction_t rw,
  *
  * This is for use by the filesystem's ->writepages() method.
  *
+ * The bounce page allocation is mempool-backed, so it will always succeed when
+ * @gfp_flags includes __GFP_DIRECT_RECLAIM, e.g. when it's GFP_NOFS.  However,
+ * only the first page of each bio can be allocated this way.  To prevent
+ * deadlocks, for any additional pages a mask like GFP_NOWAIT must be used.
+ *
  * Return: the new encrypted bounce page on success; an ERR_PTR() on failure
  */
 struct page *fscrypt_encrypt_pagecache_blocks(struct page *page,
@@ -281,7 +236,8 @@ int fscrypt_encrypt_block_inplace(const struct inode *inode, struct page *page,
 EXPORT_SYMBOL(fscrypt_encrypt_block_inplace);
 
 /**
- * fscrypt_decrypt_pagecache_blocks() - Decrypt filesystem blocks in a pagecache page
+ * fscrypt_decrypt_pagecache_blocks() - Decrypt filesystem blocks in a
+ *					pagecache page
  * @page:      The locked pagecache page containing the block(s) to decrypt
  * @len:       Total size of the block(s) to decrypt.  Must be a nonzero
  *		multiple of the filesystem's block size.
@@ -348,65 +304,6 @@ int fscrypt_decrypt_block_inplace(const struct inode *inode, struct page *page,
 }
 EXPORT_SYMBOL(fscrypt_decrypt_block_inplace);
 
-/*
- * Validate dentries in encrypted directories to make sure we aren't potentially
- * caching stale dentries after a key has been added.
- */
-static int fscrypt_d_revalidate(struct dentry *dentry, unsigned int flags)
-{
-	struct dentry *dir;
-	int err;
-	int valid;
-
-	/*
-	 * Plaintext names are always valid, since fscrypt doesn't support
-	 * reverting to ciphertext names without evicting the directory's inode
-	 * -- which implies eviction of the dentries in the directory.
-	 */
-	if (!(dentry->d_flags & DCACHE_ENCRYPTED_NAME))
-		return 1;
-
-	/*
-	 * Ciphertext name; valid if the directory's key is still unavailable.
-	 *
-	 * Although fscrypt forbids rename() on ciphertext names, we still must
-	 * use dget_parent() here rather than use ->d_parent directly.  That's
-	 * because a corrupted fs image may contain directory hard links, which
-	 * the VFS handles by moving the directory's dentry tree in the dcache
-	 * each time ->lookup() finds the directory and it already has a dentry
-	 * elsewhere.  Thus ->d_parent can be changing, and we must safely grab
-	 * a reference to some ->d_parent to prevent it from being freed.
-	 */
-
-	if (flags & LOOKUP_RCU)
-		return -ECHILD;
-
-	dir = dget_parent(dentry);
-	err = fscrypt_get_encryption_info(d_inode(dir));
-	valid = !fscrypt_has_encryption_key(d_inode(dir));
-	dput(dir);
-
-	if (err < 0)
-		return err;
-
-	return valid;
-}
-
-const struct dentry_operations fscrypt_d_ops = {
-	.d_revalidate = fscrypt_d_revalidate,
-};
-
-static void fscrypt_destroy(void)
-{
-	struct fscrypt_ctx *pos, *n;
-
-	list_for_each_entry_safe(pos, n, &fscrypt_free_ctxs, free_list)
-		kmem_cache_free(fscrypt_ctx_cachep, pos);
-	INIT_LIST_HEAD(&fscrypt_free_ctxs);
-	mempool_destroy(fscrypt_bounce_page_pool);
-	fscrypt_bounce_page_pool = NULL;
-}
-
 /**
  * fscrypt_initialize() - allocate major buffers for fs encryption.
  * @cop_flags:  fscrypt operations flags
@@ -414,11 +311,11 @@ static void fscrypt_destroy(void)
  * We only call this when we start accessing encrypted files, since it
  * results in memory getting allocated that wouldn't otherwise be used.
  *
- * Return: Zero on success, non-zero otherwise.
+ * Return: 0 on success; -errno on failure
  */
 int fscrypt_initialize(unsigned int cop_flags)
 {
-	int i, res = -ENOMEM;
+	int err = 0;
 
 	/* No need to allocate a bounce page pool if this FS won't use it. */
 	if (cop_flags & FS_CFLG_OWN_PAGES)
@@ -426,29 +323,18 @@ int fscrypt_initialize(unsigned int cop_flags)
 
 	mutex_lock(&fscrypt_init_mutex);
 	if (fscrypt_bounce_page_pool)
-		goto already_initialized;
+		goto out_unlock;
 
-	for (i = 0; i < num_prealloc_crypto_ctxs; i++) {
-		struct fscrypt_ctx *ctx;
-
-		ctx = kmem_cache_zalloc(fscrypt_ctx_cachep, GFP_NOFS);
-		if (!ctx)
-			goto fail;
-		list_add(&ctx->free_list, &fscrypt_free_ctxs);
-	}
-
+	err = -ENOMEM;
 	fscrypt_bounce_page_pool =
 		mempool_create_page_pool(num_prealloc_crypto_pages, 0);
 	if (!fscrypt_bounce_page_pool)
-		goto fail;
+		goto out_unlock;
 
-already_initialized:
+	err = 0;
+out_unlock:
 	mutex_unlock(&fscrypt_init_mutex);
-	return 0;
-fail:
-	fscrypt_destroy();
-	mutex_unlock(&fscrypt_init_mutex);
-	return res;
+	return err;
 }
 
 void fscrypt_msg(const struct inode *inode, const char *level,
@@ -465,9 +351,11 @@ void fscrypt_msg(const struct inode *inode, const char *level,
 	va_start(args, fmt);
 	vaf.fmt = fmt;
 	vaf.va = &args;
-	if (inode)
+	if (inode && inode->i_ino)
 		printk("%sfscrypt (%s, inode %lu): %pV\n",
 		       level, inode->i_sb->s_id, inode->i_ino, &vaf);
+	else if (inode)
+		printk("%sfscrypt (%s): %pV\n", level, inode->i_sb->s_id, &vaf);
 	else
 		printk("%sfscrypt: %pV\n", level, &vaf);
 	va_end(args);
@@ -475,6 +363,8 @@ void fscrypt_msg(const struct inode *inode, const char *level,
 
 /**
  * fscrypt_init() - Set up for fs encryption.
+ *
+ * Return: 0 on success; -errno on failure
  */
 static int __init fscrypt_init(void)
 {
@@ -494,13 +384,9 @@ static int __init fscrypt_init(void)
 	if (!fscrypt_read_workqueue)
 		goto fail;
 
-	fscrypt_ctx_cachep = KMEM_CACHE(fscrypt_ctx, SLAB_RECLAIM_ACCOUNT);
-	if (!fscrypt_ctx_cachep)
-		goto fail_free_queue;
-
 	fscrypt_info_cachep = KMEM_CACHE(fscrypt_info, SLAB_RECLAIM_ACCOUNT);
 	if (!fscrypt_info_cachep)
-		goto fail_free_ctx;
+		goto fail_free_queue;
 
 	err = fscrypt_init_keyring();
 	if (err)
@@ -510,8 +396,6 @@ static int __init fscrypt_init(void)
 
 fail_free_info:
 	kmem_cache_destroy(fscrypt_info_cachep);
-fail_free_ctx:
-	kmem_cache_destroy(fscrypt_ctx_cachep);
 fail_free_queue:
 	destroy_workqueue(fscrypt_read_workqueue);
 fail:
diff --git a/fs/crypto/fname.c b/fs/crypto/fname.c
index 3da3707..f3cd592 100644
--- a/fs/crypto/fname.c
+++ b/fs/crypto/fname.c
@@ -11,10 +11,56 @@
  * This has not yet undergone a rigorous security audit.
  */
 
+#include <linux/namei.h>
 #include <linux/scatterlist.h>
+#include <crypto/hash.h>
+#include <crypto/sha.h>
 #include <crypto/skcipher.h>
 #include "fscrypt_private.h"
 
+/*
+ * struct fscrypt_nokey_name - identifier for directory entry when key is absent
+ *
+ * When userspace lists an encrypted directory without access to the key, the
+ * filesystem must present a unique "no-key name" for each filename that allows
+ * it to find the directory entry again if requested.  Naively, that would just
+ * mean using the ciphertext filenames.  However, since the ciphertext filenames
+ * can contain illegal characters ('\0' and '/'), they must be encoded in some
+ * way.  We use base64.  But that can cause names to exceed NAME_MAX (255
+ * bytes), so we also need to use a strong hash to abbreviate long names.
+ *
+ * The filesystem may also need another kind of hash, the "dirhash", to quickly
+ * find the directory entry.  Since filesystems normally compute the dirhash
+ * over the on-disk filename (i.e. the ciphertext), it's not computable from
+ * no-key names that abbreviate the ciphertext using the strong hash to fit in
+ * NAME_MAX.  It's also not computable if it's a keyed hash taken over the
+ * plaintext (but it may still be available in the on-disk directory entry);
+ * casefolded directories use this type of dirhash.  At least in these cases,
+ * each no-key name must include the name's dirhash too.
+ *
+ * To meet all these requirements, we base64-encode the following
+ * variable-length structure.  It contains the dirhash, or 0's if the filesystem
+ * didn't provide one; up to 149 bytes of the ciphertext name; and for
+ * ciphertexts longer than 149 bytes, also the SHA-256 of the remaining bytes.
+ *
+ * This ensures that each no-key name contains everything needed to find the
+ * directory entry again, contains only legal characters, doesn't exceed
+ * NAME_MAX, is unambiguous unless there's a SHA-256 collision, and that we only
+ * take the performance hit of SHA-256 on very long filenames (which are rare).
+ */
+struct fscrypt_nokey_name {
+	u32 dirhash[2];
+	u8 bytes[149];
+	u8 sha256[SHA256_DIGEST_SIZE];
+}; /* 189 bytes => 252 bytes base64-encoded, which is <= NAME_MAX (255) */
+
+/*
+ * Decoded size of max-size nokey name, i.e. a name that was abbreviated using
+ * the strong hash and thus includes the 'sha256' field.  This isn't simply
+ * sizeof(struct fscrypt_nokey_name), as the padding at the end isn't included.
+ */
+#define FSCRYPT_NOKEY_NAME_MAX	offsetofend(struct fscrypt_nokey_name, sha256)
+
 static inline bool fscrypt_is_dot_dotdot(const struct qstr *str)
 {
 	if (str->len == 1 && str->name[0] == '.')
@@ -27,20 +73,23 @@ static inline bool fscrypt_is_dot_dotdot(const struct qstr *str)
 }
 
 /**
- * fname_encrypt() - encrypt a filename
- *
- * The output buffer must be at least as large as the input buffer.
- * Any extra space is filled with NUL padding before encryption.
+ * fscrypt_fname_encrypt() - encrypt a filename
+ * @inode: inode of the parent directory (for regular filenames)
+ *	   or of the symlink (for symlink targets)
+ * @iname: the filename to encrypt
+ * @out: (output) the encrypted filename
+ * @olen: size of the encrypted filename.  It must be at least @iname->len.
+ *	  Any extra space is filled with NUL padding before encryption.
  *
  * Return: 0 on success, -errno on failure
  */
-int fname_encrypt(struct inode *inode, const struct qstr *iname,
-		  u8 *out, unsigned int olen)
+int fscrypt_fname_encrypt(const struct inode *inode, const struct qstr *iname,
+			  u8 *out, unsigned int olen)
 {
 	struct skcipher_request *req = NULL;
 	DECLARE_CRYPTO_WAIT(wait);
-	struct fscrypt_info *ci = inode->i_crypt_info;
-	struct crypto_skcipher *tfm = ci->ci_ctfm;
+	const struct fscrypt_info *ci = inode->i_crypt_info;
+	struct crypto_skcipher *tfm = ci->ci_enc_key.tfm;
 	union fscrypt_iv iv;
 	struct scatterlist sg;
 	int res;
@@ -80,20 +129,23 @@ int fname_encrypt(struct inode *inode, const struct qstr *iname,
 
 /**
  * fname_decrypt() - decrypt a filename
- *
- * The caller must have allocated sufficient memory for the @oname string.
+ * @inode: inode of the parent directory (for regular filenames)
+ *	   or of the symlink (for symlink targets)
+ * @iname: the encrypted filename to decrypt
+ * @oname: (output) the decrypted filename.  The caller must have allocated
+ *	   enough space for this, e.g. using fscrypt_fname_alloc_buffer().
  *
  * Return: 0 on success, -errno on failure
  */
-static int fname_decrypt(struct inode *inode,
-				const struct fscrypt_str *iname,
-				struct fscrypt_str *oname)
+static int fname_decrypt(const struct inode *inode,
+			 const struct fscrypt_str *iname,
+			 struct fscrypt_str *oname)
 {
 	struct skcipher_request *req = NULL;
 	DECLARE_CRYPTO_WAIT(wait);
 	struct scatterlist src_sg, dst_sg;
-	struct fscrypt_info *ci = inode->i_crypt_info;
-	struct crypto_skcipher *tfm = ci->ci_ctfm;
+	const struct fscrypt_info *ci = inode->i_crypt_info;
+	struct crypto_skcipher *tfm = ci->ci_enc_key.tfm;
 	union fscrypt_iv iv;
 	int res;
 
@@ -129,7 +181,10 @@ static const char lookup_table[65] =
 #define BASE64_CHARS(nbytes)	DIV_ROUND_UP((nbytes) * 4, 3)
 
 /**
- * base64_encode() -
+ * base64_encode() - base64-encode some bytes
+ * @src: the bytes to encode
+ * @len: number of bytes to encode
+ * @dst: (output) the base64-encoded string.  Not NUL-terminated.
  *
  * Encodes the input string using characters from the set [A-Za-z0-9+,].
  * The encoded string is roughly 4/3 times the size of the input string.
@@ -178,11 +233,11 @@ static int base64_decode(const char *src, int len, u8 *dst)
 	return cp - dst;
 }
 
-bool fscrypt_fname_encrypted_size(const struct inode *inode, u32 orig_len,
-				  u32 max_len, u32 *encrypted_len_ret)
+bool fscrypt_fname_encrypted_size(const union fscrypt_policy *policy,
+				  u32 orig_len, u32 max_len,
+				  u32 *encrypted_len_ret)
 {
-	const struct fscrypt_info *ci = inode->i_crypt_info;
-	int padding = 4 << (fscrypt_policy_flags(&ci->ci_policy) &
+	int padding = 4 << (fscrypt_policy_flags(policy) &
 			    FSCRYPT_POLICY_FLAGS_PAD_MASK);
 	u32 encrypted_len;
 
@@ -195,20 +250,20 @@ bool fscrypt_fname_encrypted_size(const struct inode *inode, u32 orig_len,
 }
 
 /**
- * fscrypt_fname_alloc_buffer - allocate a buffer for presented filenames
+ * fscrypt_fname_alloc_buffer() - allocate a buffer for presented filenames
+ * @max_encrypted_len: maximum length of encrypted filenames the buffer will be
+ *		       used to present
+ * @crypto_str: (output) buffer to allocate
  *
  * Allocate a buffer that is large enough to hold any decrypted or encoded
  * filename (null-terminated), for the given maximum encrypted filename length.
  *
  * Return: 0 on success, -errno on failure
  */
-int fscrypt_fname_alloc_buffer(const struct inode *inode,
-			       u32 max_encrypted_len,
+int fscrypt_fname_alloc_buffer(u32 max_encrypted_len,
 			       struct fscrypt_str *crypto_str)
 {
-	const u32 max_encoded_len =
-		max_t(u32, BASE64_CHARS(FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE),
-		      1 + BASE64_CHARS(sizeof(struct fscrypt_digested_name)));
+	const u32 max_encoded_len = BASE64_CHARS(FSCRYPT_NOKEY_NAME_MAX);
 	u32 max_presented_len;
 
 	max_presented_len = max(max_encoded_len, max_encrypted_len);
@@ -222,9 +277,10 @@ int fscrypt_fname_alloc_buffer(const struct inode *inode,
 EXPORT_SYMBOL(fscrypt_fname_alloc_buffer);
 
 /**
- * fscrypt_fname_free_buffer - free the buffer for presented filenames
+ * fscrypt_fname_free_buffer() - free a buffer for presented filenames
+ * @crypto_str: the buffer to free
  *
- * Free the buffer allocated by fscrypt_fname_alloc_buffer().
+ * Free a buffer that was allocated by fscrypt_fname_alloc_buffer().
  */
 void fscrypt_fname_free_buffer(struct fscrypt_str *crypto_str)
 {
@@ -236,24 +292,34 @@ void fscrypt_fname_free_buffer(struct fscrypt_str *crypto_str)
 EXPORT_SYMBOL(fscrypt_fname_free_buffer);
 
 /**
- * fscrypt_fname_disk_to_usr() - converts a filename from disk space to user
- * space
+ * fscrypt_fname_disk_to_usr() - convert an encrypted filename to
+ *				 user-presentable form
+ * @inode: inode of the parent directory (for regular filenames)
+ *	   or of the symlink (for symlink targets)
+ * @hash: first part of the name's dirhash, if applicable.  This only needs to
+ *	  be provided if the filename is located in an indexed directory whose
+ *	  encryption key may be unavailable.  Not needed for symlink targets.
+ * @minor_hash: second part of the name's dirhash, if applicable
+ * @iname: encrypted filename to convert.  May also be "." or "..", which
+ *	   aren't actually encrypted.
+ * @oname: output buffer for the user-presentable filename.  The caller must
+ *	   have allocated enough space for this, e.g. using
+ *	   fscrypt_fname_alloc_buffer().
  *
- * The caller must have allocated sufficient memory for the @oname string.
- *
- * If the key is available, we'll decrypt the disk name; otherwise, we'll encode
- * it for presentation.  Short names are directly base64-encoded, while long
- * names are encoded in fscrypt_digested_name format.
+ * If the key is available, we'll decrypt the disk name.  Otherwise, we'll
+ * encode it for presentation in fscrypt_nokey_name format.
+ * See struct fscrypt_nokey_name for details.
  *
  * Return: 0 on success, -errno on failure
  */
-int fscrypt_fname_disk_to_usr(struct inode *inode,
-			u32 hash, u32 minor_hash,
-			const struct fscrypt_str *iname,
-			struct fscrypt_str *oname)
+int fscrypt_fname_disk_to_usr(const struct inode *inode,
+			      u32 hash, u32 minor_hash,
+			      const struct fscrypt_str *iname,
+			      struct fscrypt_str *oname)
 {
 	const struct qstr qname = FSTR_TO_QSTR(iname);
-	struct fscrypt_digested_name digested_name;
+	struct fscrypt_nokey_name nokey_name;
+	u32 size; /* size of the unencoded no-key name */
 
 	if (fscrypt_is_dot_dotdot(&qname)) {
 		oname->name[0] = '.';
@@ -268,24 +334,35 @@ int fscrypt_fname_disk_to_usr(struct inode *inode,
 	if (fscrypt_has_encryption_key(inode))
 		return fname_decrypt(inode, iname, oname);
 
-	if (iname->len <= FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE) {
-		oname->len = base64_encode(iname->name, iname->len,
-					   oname->name);
-		return 0;
-	}
+	/*
+	 * Sanity check that struct fscrypt_nokey_name doesn't have padding
+	 * between fields and that its encoded size never exceeds NAME_MAX.
+	 */
+	BUILD_BUG_ON(offsetofend(struct fscrypt_nokey_name, dirhash) !=
+		     offsetof(struct fscrypt_nokey_name, bytes));
+	BUILD_BUG_ON(offsetofend(struct fscrypt_nokey_name, bytes) !=
+		     offsetof(struct fscrypt_nokey_name, sha256));
+	BUILD_BUG_ON(BASE64_CHARS(FSCRYPT_NOKEY_NAME_MAX) > NAME_MAX);
+
 	if (hash) {
-		digested_name.hash = hash;
-		digested_name.minor_hash = minor_hash;
+		nokey_name.dirhash[0] = hash;
+		nokey_name.dirhash[1] = minor_hash;
 	} else {
-		digested_name.hash = 0;
-		digested_name.minor_hash = 0;
+		nokey_name.dirhash[0] = 0;
+		nokey_name.dirhash[1] = 0;
 	}
-	memcpy(digested_name.digest,
-	       FSCRYPT_FNAME_DIGEST(iname->name, iname->len),
-	       FSCRYPT_FNAME_DIGEST_SIZE);
-	oname->name[0] = '_';
-	oname->len = 1 + base64_encode((const u8 *)&digested_name,
-				       sizeof(digested_name), oname->name + 1);
+	if (iname->len <= sizeof(nokey_name.bytes)) {
+		memcpy(nokey_name.bytes, iname->name, iname->len);
+		size = offsetof(struct fscrypt_nokey_name, bytes[iname->len]);
+	} else {
+		memcpy(nokey_name.bytes, iname->name, sizeof(nokey_name.bytes));
+		/* Compute strong hash of remaining part of name. */
+		sha256(&iname->name[sizeof(nokey_name.bytes)],
+		       iname->len - sizeof(nokey_name.bytes),
+		       nokey_name.sha256);
+		size = FSCRYPT_NOKEY_NAME_MAX;
+	}
+	oname->len = base64_encode((const u8 *)&nokey_name, size, oname->name);
 	return 0;
 }
 EXPORT_SYMBOL(fscrypt_fname_disk_to_usr);
@@ -305,10 +382,9 @@ EXPORT_SYMBOL(fscrypt_fname_disk_to_usr);
  * directory's encryption key, then @iname is the plaintext, so we encrypt it to
  * get the disk_name.
  *
- * Else, for keyless @lookup operations, @iname is the presented ciphertext, so
- * we decode it to get either the ciphertext disk_name (for short names) or the
- * fscrypt_digested_name (for long names).  Non-@lookup operations will be
- * impossible in this case, so we fail them with ENOKEY.
+ * Else, for keyless @lookup operations, @iname should be a no-key name, so we
+ * decode it to get the struct fscrypt_nokey_name.  Non-@lookup operations will
+ * be impossible in this case, so we fail them with ENOKEY.
  *
  * If successful, fscrypt_free_filename() must be called later to clean up.
  *
@@ -317,8 +393,8 @@ EXPORT_SYMBOL(fscrypt_fname_disk_to_usr);
 int fscrypt_setup_filename(struct inode *dir, const struct qstr *iname,
 			      int lookup, struct fscrypt_name *fname)
 {
+	struct fscrypt_nokey_name *nokey_name;
 	int ret;
-	int digested;
 
 	memset(fname, 0, sizeof(struct fscrypt_name));
 	fname->usr_fname = iname;
@@ -328,12 +404,13 @@ int fscrypt_setup_filename(struct inode *dir, const struct qstr *iname,
 		fname->disk_name.len = iname->len;
 		return 0;
 	}
-	ret = fscrypt_get_encryption_info(dir);
+	ret = fscrypt_get_encryption_info(dir, lookup);
 	if (ret)
 		return ret;
 
 	if (fscrypt_has_encryption_key(dir)) {
-		if (!fscrypt_fname_encrypted_size(dir, iname->len,
+		if (!fscrypt_fname_encrypted_size(&dir->i_crypt_info->ci_policy,
+						  iname->len,
 						  dir->i_sb->s_cop->max_namelen,
 						  &fname->crypto_buf.len))
 			return -ENAMETOOLONG;
@@ -342,8 +419,8 @@ int fscrypt_setup_filename(struct inode *dir, const struct qstr *iname,
 		if (!fname->crypto_buf.name)
 			return -ENOMEM;
 
-		ret = fname_encrypt(dir, iname, fname->crypto_buf.name,
-				    fname->crypto_buf.len);
+		ret = fscrypt_fname_encrypt(dir, iname, fname->crypto_buf.name,
+					    fname->crypto_buf.len);
 		if (ret)
 			goto errout;
 		fname->disk_name.name = fname->crypto_buf.name;
@@ -352,46 +429,37 @@ int fscrypt_setup_filename(struct inode *dir, const struct qstr *iname,
 	}
 	if (!lookup)
 		return -ENOKEY;
-	fname->is_ciphertext_name = true;
+	fname->is_nokey_name = true;
 
 	/*
 	 * We don't have the key and we are doing a lookup; decode the
 	 * user-supplied name
 	 */
-	if (iname->name[0] == '_') {
-		if (iname->len !=
-		    1 + BASE64_CHARS(sizeof(struct fscrypt_digested_name)))
-			return -ENOENT;
-		digested = 1;
-	} else {
-		if (iname->len >
-		    BASE64_CHARS(FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE))
-			return -ENOENT;
-		digested = 0;
-	}
 
-	fname->crypto_buf.name =
-		kmalloc(max_t(size_t, FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE,
-			      sizeof(struct fscrypt_digested_name)),
-			GFP_KERNEL);
+	if (iname->len > BASE64_CHARS(FSCRYPT_NOKEY_NAME_MAX))
+		return -ENOENT;
+
+	fname->crypto_buf.name = kmalloc(FSCRYPT_NOKEY_NAME_MAX, GFP_KERNEL);
 	if (fname->crypto_buf.name == NULL)
 		return -ENOMEM;
 
-	ret = base64_decode(iname->name + digested, iname->len - digested,
-			    fname->crypto_buf.name);
-	if (ret < 0) {
+	ret = base64_decode(iname->name, iname->len, fname->crypto_buf.name);
+	if (ret < (int)offsetof(struct fscrypt_nokey_name, bytes[1]) ||
+	    (ret > offsetof(struct fscrypt_nokey_name, sha256) &&
+	     ret != FSCRYPT_NOKEY_NAME_MAX)) {
 		ret = -ENOENT;
 		goto errout;
 	}
 	fname->crypto_buf.len = ret;
-	if (digested) {
-		const struct fscrypt_digested_name *n =
-			(const void *)fname->crypto_buf.name;
-		fname->hash = n->hash;
-		fname->minor_hash = n->minor_hash;
-	} else {
-		fname->disk_name.name = fname->crypto_buf.name;
-		fname->disk_name.len = fname->crypto_buf.len;
+
+	nokey_name = (void *)fname->crypto_buf.name;
+	fname->hash = nokey_name->dirhash[0];
+	fname->minor_hash = nokey_name->dirhash[1];
+	if (ret != FSCRYPT_NOKEY_NAME_MAX) {
+		/* The full ciphertext filename is available. */
+		fname->disk_name.name = nokey_name->bytes;
+		fname->disk_name.len =
+			ret - offsetof(struct fscrypt_nokey_name, bytes);
 	}
 	return 0;
 
@@ -400,3 +468,109 @@ int fscrypt_setup_filename(struct inode *dir, const struct qstr *iname,
 	return ret;
 }
 EXPORT_SYMBOL(fscrypt_setup_filename);
+
+/**
+ * fscrypt_match_name() - test whether the given name matches a directory entry
+ * @fname: the name being searched for
+ * @de_name: the name from the directory entry
+ * @de_name_len: the length of @de_name in bytes
+ *
+ * Normally @fname->disk_name will be set, and in that case we simply compare
+ * that to the name stored in the directory entry.  The only exception is that
+ * if we don't have the key for an encrypted directory and the name we're
+ * looking for is very long, then we won't have the full disk_name and instead
+ * we'll need to match against a fscrypt_nokey_name that includes a strong hash.
+ *
+ * Return: %true if the name matches, otherwise %false.
+ */
+bool fscrypt_match_name(const struct fscrypt_name *fname,
+			const u8 *de_name, u32 de_name_len)
+{
+	const struct fscrypt_nokey_name *nokey_name =
+		(const void *)fname->crypto_buf.name;
+	u8 digest[SHA256_DIGEST_SIZE];
+
+	if (likely(fname->disk_name.name)) {
+		if (de_name_len != fname->disk_name.len)
+			return false;
+		return !memcmp(de_name, fname->disk_name.name, de_name_len);
+	}
+	if (de_name_len <= sizeof(nokey_name->bytes))
+		return false;
+	if (memcmp(de_name, nokey_name->bytes, sizeof(nokey_name->bytes)))
+		return false;
+	sha256(&de_name[sizeof(nokey_name->bytes)],
+	       de_name_len - sizeof(nokey_name->bytes), digest);
+	return !memcmp(digest, nokey_name->sha256, sizeof(digest));
+}
+EXPORT_SYMBOL_GPL(fscrypt_match_name);
+
+/**
+ * fscrypt_fname_siphash() - calculate the SipHash of a filename
+ * @dir: the parent directory
+ * @name: the filename to calculate the SipHash of
+ *
+ * Given a plaintext filename @name and a directory @dir which uses SipHash as
+ * its dirhash method and has had its fscrypt key set up, this function
+ * calculates the SipHash of that name using the directory's secret dirhash key.
+ *
+ * Return: the SipHash of @name using the hash key of @dir
+ */
+u64 fscrypt_fname_siphash(const struct inode *dir, const struct qstr *name)
+{
+	const struct fscrypt_info *ci = dir->i_crypt_info;
+
+	WARN_ON(!ci->ci_dirhash_key_initialized);
+
+	return siphash(name->name, name->len, &ci->ci_dirhash_key);
+}
+EXPORT_SYMBOL_GPL(fscrypt_fname_siphash);
+
+/*
+ * Validate dentries in encrypted directories to make sure we aren't potentially
+ * caching stale dentries after a key has been added.
+ */
+int fscrypt_d_revalidate(struct dentry *dentry, unsigned int flags)
+{
+	struct dentry *dir;
+	int err;
+	int valid;
+
+	/*
+	 * Plaintext names are always valid, since fscrypt doesn't support
+	 * reverting to no-key names without evicting the directory's inode
+	 * -- which implies eviction of the dentries in the directory.
+	 */
+	if (!(dentry->d_flags & DCACHE_NOKEY_NAME))
+		return 1;
+
+	/*
+	 * No-key name; valid if the directory's key is still unavailable.
+	 *
+	 * Although fscrypt forbids rename() on no-key names, we still must use
+	 * dget_parent() here rather than use ->d_parent directly.  That's
+	 * because a corrupted fs image may contain directory hard links, which
+	 * the VFS handles by moving the directory's dentry tree in the dcache
+	 * each time ->lookup() finds the directory and it already has a dentry
+	 * elsewhere.  Thus ->d_parent can be changing, and we must safely grab
+	 * a reference to some ->d_parent to prevent it from being freed.
+	 */
+
+	if (flags & LOOKUP_RCU)
+		return -ECHILD;
+
+	dir = dget_parent(dentry);
+	/*
+	 * Pass allow_unsupported=true, so that files with an unsupported
+	 * encryption policy can be deleted.
+	 */
+	err = fscrypt_get_encryption_info(d_inode(dir), true);
+	valid = !fscrypt_has_encryption_key(d_inode(dir));
+	dput(dir);
+
+	if (err < 0)
+		return err;
+
+	return valid;
+}
+EXPORT_SYMBOL_GPL(fscrypt_d_revalidate);
diff --git a/fs/crypto/fscrypt_private.h b/fs/crypto/fscrypt_private.h
index ec73872..a455e29e 100644
--- a/fs/crypto/fscrypt_private.h
+++ b/fs/crypto/fscrypt_private.h
@@ -12,13 +12,17 @@
 #define _FSCRYPT_PRIVATE_H
 
 #include <linux/fscrypt.h>
+#include <linux/siphash.h>
 #include <crypto/hash.h>
+#include <linux/blk-crypto.h>
 
 #define CONST_STRLEN(str)	(sizeof(str) - 1)
 
-#define FS_KEY_DERIVATION_NONCE_SIZE	16
+#define FSCRYPT_FILE_NONCE_SIZE	16
 
-#define FSCRYPT_MIN_KEY_SIZE		16
+#define FSCRYPT_MIN_KEY_SIZE	16
+
+#define FSCRYPT_MAX_HW_WRAPPED_KEY_SIZE	128
 
 #define FSCRYPT_CONTEXT_V1	1
 #define FSCRYPT_CONTEXT_V2	2
@@ -32,7 +36,7 @@ struct fscrypt_context_v1 {
 	u8 filenames_encryption_mode;
 	u8 flags;
 	u8 master_key_descriptor[FSCRYPT_KEY_DESCRIPTOR_SIZE];
-	u8 nonce[FS_KEY_DERIVATION_NONCE_SIZE];
+	u8 nonce[FSCRYPT_FILE_NONCE_SIZE];
 };
 
 struct fscrypt_context_v2 {
@@ -42,10 +46,10 @@ struct fscrypt_context_v2 {
 	u8 flags;
 	u8 __reserved[4];
 	u8 master_key_identifier[FSCRYPT_KEY_IDENTIFIER_SIZE];
-	u8 nonce[FS_KEY_DERIVATION_NONCE_SIZE];
+	u8 nonce[FSCRYPT_FILE_NONCE_SIZE];
 };
 
-/**
+/*
  * fscrypt_context - the encryption context of an inode
  *
  * This is the on-disk equivalent of an fscrypt_policy, stored alongside each
@@ -78,7 +82,26 @@ static inline int fscrypt_context_size(const union fscrypt_context *ctx)
 	return 0;
 }
 
-#undef fscrypt_policy
+/* Check whether an fscrypt_context has a recognized version number and size */
+static inline bool fscrypt_context_is_valid(const union fscrypt_context *ctx,
+					    int ctx_size)
+{
+	return ctx_size >= 1 && ctx_size == fscrypt_context_size(ctx);
+}
+
+/* Retrieve the context's nonce, assuming the context was already validated */
+static inline const u8 *fscrypt_context_nonce(const union fscrypt_context *ctx)
+{
+	switch (ctx->version) {
+	case FSCRYPT_CONTEXT_V1:
+		return ctx->v1.nonce;
+	case FSCRYPT_CONTEXT_V2:
+		return ctx->v2.nonce;
+	}
+	WARN_ON(1);
+	return NULL;
+}
+
 union fscrypt_policy {
 	u8 version;
 	struct fscrypt_policy_v1 v1;
@@ -139,13 +162,7 @@ fscrypt_policy_flags(const union fscrypt_policy *policy)
 	BUG();
 }
 
-static inline bool
-fscrypt_is_direct_key_policy(const union fscrypt_policy *policy)
-{
-	return fscrypt_policy_flags(policy) & FSCRYPT_POLICY_FLAG_DIRECT_KEY;
-}
-
-/**
+/*
  * For encrypted symlinks, the ciphertext length is stored at the beginning
  * of the string in little-endian format.
  */
@@ -154,6 +171,20 @@ struct fscrypt_symlink_data {
 	char encrypted_path[1];
 } __packed;
 
+/**
+ * struct fscrypt_prepared_key - a key prepared for actual encryption/decryption
+ * @tfm: crypto API transform object
+ * @blk_key: key for blk-crypto
+ *
+ * Normally only one of the fields will be non-NULL.
+ */
+struct fscrypt_prepared_key {
+	struct crypto_skcipher *tfm;
+#ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
+	struct fscrypt_blk_crypto_key *blk_key;
+#endif
+};
+
 /*
  * fscrypt_info - the "encryption key" for an inode
  *
@@ -163,14 +194,19 @@ struct fscrypt_symlink_data {
  */
 struct fscrypt_info {
 
-	/* The actual crypto transform used for encryption and decryption */
-	struct crypto_skcipher *ci_ctfm;
+	/* The key in a form prepared for actual encryption/decryption */
+	struct fscrypt_prepared_key ci_enc_key;
 
+	/* True if ci_enc_key should be freed when this fscrypt_info is freed */
+	bool ci_owns_key;
+
+#ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
 	/*
-	 * Cipher for ESSIV IV generation.  Only set for CBC contents
-	 * encryption, otherwise is NULL.
+	 * True if this inode will use inline encryption (blk-crypto) instead of
+	 * the traditional filesystem-layer encryption.
 	 */
-	struct crypto_cipher *ci_essiv_tfm;
+	bool ci_inlinecrypt;
+#endif
 
 	/*
 	 * Encryption mode used for this inode.  It corresponds to either the
@@ -196,15 +232,26 @@ struct fscrypt_info {
 
 	/*
 	 * If non-NULL, then encryption is done using the master key directly
-	 * and ci_ctfm will equal ci_direct_key->dk_ctfm.
+	 * and ci_enc_key will equal ci_direct_key->dk_key.
 	 */
 	struct fscrypt_direct_key *ci_direct_key;
 
+	/*
+	 * This inode's hash key for filenames.  This is a 128-bit SipHash-2-4
+	 * key.  This is only set for directories that use a keyed dirhash over
+	 * the plaintext filenames -- currently just casefolded directories.
+	 */
+	siphash_key_t ci_dirhash_key;
+	bool ci_dirhash_key_initialized;
+
 	/* The encryption policy used by this inode */
 	union fscrypt_policy ci_policy;
 
 	/* This inode's nonce, copied from the fscrypt_context */
-	u8 ci_nonce[FS_KEY_DERIVATION_NONCE_SIZE];
+	u8 ci_nonce[FSCRYPT_FILE_NONCE_SIZE];
+
+	/* Hashed inode number.  Only set for IV_INO_LBLK_32 */
+	u32 ci_hashed_ino;
 };
 
 typedef enum {
@@ -212,38 +259,16 @@ typedef enum {
 	FS_ENCRYPT,
 } fscrypt_direction_t;
 
-#define FS_CTX_REQUIRES_FREE_ENCRYPT_FL		0x00000001
-
-static inline bool fscrypt_valid_enc_modes(u32 contents_mode,
-					   u32 filenames_mode)
-{
-	if (contents_mode == FSCRYPT_MODE_AES_128_CBC &&
-	    filenames_mode == FSCRYPT_MODE_AES_128_CTS)
-		return true;
-
-	if (contents_mode == FSCRYPT_MODE_AES_256_XTS &&
-	    filenames_mode == FSCRYPT_MODE_AES_256_CTS)
-		return true;
-
-	if (contents_mode == FSCRYPT_MODE_ADIANTUM &&
-	    filenames_mode == FSCRYPT_MODE_ADIANTUM)
-		return true;
-
-	return false;
-}
-
 /* crypto.c */
 extern struct kmem_cache *fscrypt_info_cachep;
-extern int fscrypt_initialize(unsigned int cop_flags);
-extern int fscrypt_crypt_block(const struct inode *inode,
-			       fscrypt_direction_t rw, u64 lblk_num,
-			       struct page *src_page, struct page *dest_page,
-			       unsigned int len, unsigned int offs,
-			       gfp_t gfp_flags);
-extern struct page *fscrypt_alloc_bounce_page(gfp_t gfp_flags);
-extern const struct dentry_operations fscrypt_d_ops;
+int fscrypt_initialize(unsigned int cop_flags);
+int fscrypt_crypt_block(const struct inode *inode, fscrypt_direction_t rw,
+			u64 lblk_num, struct page *src_page,
+			struct page *dest_page, unsigned int len,
+			unsigned int offs, gfp_t gfp_flags);
+struct page *fscrypt_alloc_bounce_page(gfp_t gfp_flags);
 
-extern void __printf(3, 4) __cold
+void __printf(3, 4) __cold
 fscrypt_msg(const struct inode *inode, const char *level, const char *fmt, ...);
 
 #define fscrypt_warn(inode, fmt, ...)		\
@@ -259,20 +284,21 @@ union fscrypt_iv {
 		__le64 lblk_num;
 
 		/* per-file nonce; only set in DIRECT_KEY mode */
-		u8 nonce[FS_KEY_DERIVATION_NONCE_SIZE];
+		u8 nonce[FSCRYPT_FILE_NONCE_SIZE];
 	};
 	u8 raw[FSCRYPT_MAX_IV_SIZE];
+	__le64 dun[FSCRYPT_MAX_IV_SIZE / sizeof(__le64)];
 };
 
 void fscrypt_generate_iv(union fscrypt_iv *iv, u64 lblk_num,
 			 const struct fscrypt_info *ci);
 
 /* fname.c */
-extern int fname_encrypt(struct inode *inode, const struct qstr *iname,
-			 u8 *out, unsigned int olen);
-extern bool fscrypt_fname_encrypted_size(const struct inode *inode,
-					 u32 orig_len, u32 max_len,
-					 u32 *encrypted_len_ret);
+int fscrypt_fname_encrypt(const struct inode *inode, const struct qstr *iname,
+			  u8 *out, unsigned int olen);
+bool fscrypt_fname_encrypted_size(const union fscrypt_policy *policy,
+				  u32 orig_len, u32 max_len,
+				  u32 *encrypted_len_ret);
 
 /* hkdf.c */
 
@@ -280,8 +306,8 @@ struct fscrypt_hkdf {
 	struct crypto_shash *hmac_tfm;
 };
 
-extern int fscrypt_init_hkdf(struct fscrypt_hkdf *hkdf, const u8 *master_key,
-			     unsigned int master_key_size);
+int fscrypt_init_hkdf(struct fscrypt_hkdf *hkdf, const u8 *master_key,
+		      unsigned int master_key_size);
 
 /*
  * The list of contexts in which fscrypt uses HKDF.  These values are used as
@@ -290,15 +316,113 @@ extern int fscrypt_init_hkdf(struct fscrypt_hkdf *hkdf, const u8 *master_key,
  * outputs are unique and cryptographically isolated, i.e. knowledge of one
  * output doesn't reveal another.
  */
-#define HKDF_CONTEXT_KEY_IDENTIFIER	1
-#define HKDF_CONTEXT_PER_FILE_KEY	2
-#define HKDF_CONTEXT_PER_MODE_KEY	3
+#define HKDF_CONTEXT_KEY_IDENTIFIER	1 /* info=<empty>		*/
+#define HKDF_CONTEXT_PER_FILE_ENC_KEY	2 /* info=file_nonce		*/
+#define HKDF_CONTEXT_DIRECT_KEY		3 /* info=mode_num		*/
+#define HKDF_CONTEXT_IV_INO_LBLK_64_KEY	4 /* info=mode_num||fs_uuid	*/
+#define HKDF_CONTEXT_DIRHASH_KEY	5 /* info=file_nonce		*/
+#define HKDF_CONTEXT_IV_INO_LBLK_32_KEY	6 /* info=mode_num||fs_uuid	*/
+#define HKDF_CONTEXT_INODE_HASH_KEY	7 /* info=<empty>		*/
 
-extern int fscrypt_hkdf_expand(struct fscrypt_hkdf *hkdf, u8 context,
-			       const u8 *info, unsigned int infolen,
-			       u8 *okm, unsigned int okmlen);
+int fscrypt_hkdf_expand(const struct fscrypt_hkdf *hkdf, u8 context,
+			const u8 *info, unsigned int infolen,
+			u8 *okm, unsigned int okmlen);
 
-extern void fscrypt_destroy_hkdf(struct fscrypt_hkdf *hkdf);
+void fscrypt_destroy_hkdf(struct fscrypt_hkdf *hkdf);
+
+/* inline_crypt.c */
+#ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
+int fscrypt_select_encryption_impl(struct fscrypt_info *ci,
+				   bool is_hw_wrapped_key);
+
+static inline bool
+fscrypt_using_inline_encryption(const struct fscrypt_info *ci)
+{
+	return ci->ci_inlinecrypt;
+}
+
+int fscrypt_prepare_inline_crypt_key(struct fscrypt_prepared_key *prep_key,
+				     const u8 *raw_key,
+				     unsigned int raw_key_size,
+				     bool is_hw_wrapped,
+				     const struct fscrypt_info *ci);
+
+void fscrypt_destroy_inline_crypt_key(struct fscrypt_prepared_key *prep_key);
+
+extern int fscrypt_derive_raw_secret(struct super_block *sb,
+				     const u8 *wrapped_key,
+				     unsigned int wrapped_key_size,
+				     u8 *raw_secret,
+				     unsigned int raw_secret_size);
+
+/*
+ * Check whether the crypto transform or blk-crypto key has been allocated in
+ * @prep_key, depending on which encryption implementation the file will use.
+ */
+static inline bool
+fscrypt_is_key_prepared(struct fscrypt_prepared_key *prep_key,
+			const struct fscrypt_info *ci)
+{
+	/*
+	 * The two smp_load_acquire()'s here pair with the smp_store_release()'s
+	 * in fscrypt_prepare_inline_crypt_key() and fscrypt_prepare_key().
+	 * I.e., in some cases (namely, if this prep_key is a per-mode
+	 * encryption key) another task can publish blk_key or tfm concurrently,
+	 * executing a RELEASE barrier.  We need to use smp_load_acquire() here
+	 * to safely ACQUIRE the memory the other task published.
+	 */
+	if (fscrypt_using_inline_encryption(ci))
+		return smp_load_acquire(&prep_key->blk_key) != NULL;
+	return smp_load_acquire(&prep_key->tfm) != NULL;
+}
+
+#else /* CONFIG_FS_ENCRYPTION_INLINE_CRYPT */
+
+static inline int fscrypt_select_encryption_impl(struct fscrypt_info *ci,
+						 bool is_hw_wrapped_key)
+{
+	return 0;
+}
+
+static inline bool
+fscrypt_using_inline_encryption(const struct fscrypt_info *ci)
+{
+	return false;
+}
+
+static inline int
+fscrypt_prepare_inline_crypt_key(struct fscrypt_prepared_key *prep_key,
+				 const u8 *raw_key, unsigned int raw_key_size,
+				 bool is_hw_wrapped,
+				 const struct fscrypt_info *ci)
+{
+	WARN_ON(1);
+	return -EOPNOTSUPP;
+}
+
+static inline void
+fscrypt_destroy_inline_crypt_key(struct fscrypt_prepared_key *prep_key)
+{
+}
+
+static inline int fscrypt_derive_raw_secret(struct super_block *sb,
+					    const u8 *wrapped_key,
+					    unsigned int wrapped_key_size,
+					    u8 *raw_secret,
+					    unsigned int raw_secret_size)
+{
+	fscrypt_warn(NULL,
+		     "kernel built without support for hardware-wrapped keys");
+	return -EOPNOTSUPP;
+}
+
+static inline bool
+fscrypt_is_key_prepared(struct fscrypt_prepared_key *prep_key,
+			const struct fscrypt_info *ci)
+{
+	return smp_load_acquire(&prep_key->tfm) != NULL;
+}
+#endif /* !CONFIG_FS_ENCRYPTION_INLINE_CRYPT */
 
 /* keyring.c */
 
@@ -316,8 +440,15 @@ struct fscrypt_master_key_secret {
 	/* Size of the raw key in bytes.  Set even if ->raw isn't set. */
 	u32			size;
 
-	/* For v1 policy keys: the raw key.  Wiped for v2 policy keys. */
-	u8			raw[FSCRYPT_MAX_KEY_SIZE];
+	/* True if the key in ->raw is a hardware-wrapped key. */
+	bool			is_hw_wrapped;
+
+	/*
+	 * For v1 policy keys: the raw key.  Wiped for v2 policy keys, unless
+	 * ->is_hw_wrapped is true, in which case this contains the wrapped key
+	 * rather than the key with which 'hkdf' was keyed.
+	 */
+	u8			raw[FSCRYPT_MAX_HW_WRAPPED_KEY_SIZE];
 
 } __randomize_layout;
 
@@ -338,16 +469,9 @@ struct fscrypt_master_key {
 	 * FS_IOC_REMOVE_ENCRYPTION_KEY can be retried, or
 	 * FS_IOC_ADD_ENCRYPTION_KEY can add the secret again.
 	 *
-	 * Locking: protected by key->sem (outer) and mk_secret_sem (inner).
-	 * The reason for two locks is that key->sem also protects modifying
-	 * mk_users, which ranks it above the semaphore for the keyring key
-	 * type, which is in turn above page faults (via keyring_read).  But
-	 * sometimes filesystems call fscrypt_get_encryption_info() from within
-	 * a transaction, which ranks it below page faults.  So we need a
-	 * separate lock which protects mk_secret but not also mk_users.
+	 * Locking: protected by this master key's key->sem.
 	 */
 	struct fscrypt_master_key_secret	mk_secret;
-	struct rw_semaphore			mk_secret_sem;
 
 	/*
 	 * For v1 policy keys: an arbitrary key descriptor which was assigned by
@@ -366,8 +490,8 @@ struct fscrypt_master_key {
 	 *
 	 * This is NULL for v1 policy keys; those can only be added by root.
 	 *
-	 * Locking: in addition to this keyrings own semaphore, this is
-	 * protected by the master key's key->sem, so we can do atomic
+	 * Locking: in addition to this keyring's own semaphore, this is
+	 * protected by this master key's key->sem, so we can do atomic
 	 * search+insert.  It can also be searched without taking any locks, but
 	 * in that case the returned key may have already been removed.
 	 */
@@ -389,8 +513,17 @@ struct fscrypt_master_key {
 	struct list_head	mk_decrypted_inodes;
 	spinlock_t		mk_decrypted_inodes_lock;
 
-	/* Per-mode tfms for DIRECT_KEY policies, allocated on-demand */
-	struct crypto_skcipher	*mk_mode_keys[FSCRYPT_MODE_MAX + 1];
+	/*
+	 * Per-mode encryption keys for the various types of encryption policies
+	 * that use them.  Allocated and derived on-demand.
+	 */
+	struct fscrypt_prepared_key mk_direct_keys[FSCRYPT_MODE_MAX + 1];
+	struct fscrypt_prepared_key mk_iv_ino_lblk_64_keys[FSCRYPT_MODE_MAX + 1];
+	struct fscrypt_prepared_key mk_iv_ino_lblk_32_keys[FSCRYPT_MODE_MAX + 1];
+
+	/* Hash key for inode numbers.  Initialized only when needed. */
+	siphash_key_t		mk_ino_hash_key;
+	bool			mk_ino_hash_key_initialized;
 
 } __randomize_layout;
 
@@ -400,9 +533,9 @@ is_master_key_secret_present(const struct fscrypt_master_key_secret *secret)
 	/*
 	 * The READ_ONCE() is only necessary for fscrypt_drop_inode() and
 	 * fscrypt_key_describe().  These run in atomic context, so they can't
-	 * take ->mk_secret_sem and thus 'secret' can change concurrently which
-	 * would be a data race.  But they only need to know whether the secret
-	 * *was* present at the time of check, so READ_ONCE() suffices.
+	 * take the key semaphore and thus 'secret' can change concurrently
+	 * which would be a data race.  But they only need to know whether the
+	 * secret *was* present at the time of check, so READ_ONCE() suffices.
 	 */
 	return READ_ONCE(secret->size) != 0;
 }
@@ -430,14 +563,17 @@ static inline int master_key_spec_len(const struct fscrypt_key_specifier *spec)
 	return 0;
 }
 
-extern struct key *
+struct key *
 fscrypt_find_master_key(struct super_block *sb,
 			const struct fscrypt_key_specifier *mk_spec);
 
-extern int fscrypt_verify_key_added(struct super_block *sb,
-				    const u8 identifier[FSCRYPT_KEY_IDENTIFIER_SIZE]);
+int fscrypt_add_test_dummy_key(struct super_block *sb,
+			       struct fscrypt_key_specifier *key_spec);
 
-extern int __init fscrypt_init_keyring(void);
+int fscrypt_verify_key_added(struct super_block *sb,
+			     const u8 identifier[FSCRYPT_KEY_IDENTIFIER_SIZE]);
+
+int __init fscrypt_init_keyring(void);
 
 /* keysetup.c */
 
@@ -446,40 +582,72 @@ struct fscrypt_mode {
 	const char *cipher_str;
 	int keysize;
 	int ivsize;
-	bool logged_impl_name;
-	bool needs_essiv;
+	int logged_impl_name;
+	enum blk_crypto_mode_num blk_crypto_mode;
 };
 
-static inline bool
-fscrypt_mode_supports_direct_key(const struct fscrypt_mode *mode)
+extern struct fscrypt_mode fscrypt_modes[];
+
+int fscrypt_prepare_key(struct fscrypt_prepared_key *prep_key,
+			const u8 *raw_key, unsigned int raw_key_size,
+			bool is_hw_wrapped, const struct fscrypt_info *ci);
+
+void fscrypt_destroy_prepared_key(struct fscrypt_prepared_key *prep_key);
+
+int fscrypt_set_per_file_enc_key(struct fscrypt_info *ci, const u8 *raw_key);
+
+int fscrypt_derive_dirhash_key(struct fscrypt_info *ci,
+			       const struct fscrypt_master_key *mk);
+
+void fscrypt_hash_inode_number(struct fscrypt_info *ci,
+			       const struct fscrypt_master_key *mk);
+
+int fscrypt_get_encryption_info(struct inode *inode, bool allow_unsupported);
+
+/**
+ * fscrypt_require_key() - require an inode's encryption key
+ * @inode: the inode we need the key for
+ *
+ * If the inode is encrypted, set up its encryption key if not already done.
+ * Then require that the key be present and return -ENOKEY otherwise.
+ *
+ * No locks are needed, and the key will live as long as the struct inode --- so
+ * it won't go away from under you.
+ *
+ * Return: 0 on success, -ENOKEY if the key is missing, or another -errno code
+ * if a problem occurred while setting up the encryption key.
+ */
+static inline int fscrypt_require_key(struct inode *inode)
 {
-	return mode->ivsize >= offsetofend(union fscrypt_iv, nonce);
+	if (IS_ENCRYPTED(inode)) {
+		int err = fscrypt_get_encryption_info(inode, false);
+
+		if (err)
+			return err;
+		if (!fscrypt_has_encryption_key(inode))
+			return -ENOKEY;
+	}
+	return 0;
 }
 
-extern struct crypto_skcipher *
-fscrypt_allocate_skcipher(struct fscrypt_mode *mode, const u8 *raw_key,
-			  const struct inode *inode);
-
-extern int fscrypt_set_derived_key(struct fscrypt_info *ci,
-				   const u8 *derived_key);
-
 /* keysetup_v1.c */
 
-extern void fscrypt_put_direct_key(struct fscrypt_direct_key *dk);
+void fscrypt_put_direct_key(struct fscrypt_direct_key *dk);
 
-extern int fscrypt_setup_v1_file_key(struct fscrypt_info *ci,
-				     const u8 *raw_master_key);
+int fscrypt_setup_v1_file_key(struct fscrypt_info *ci,
+			      const u8 *raw_master_key);
 
-extern int fscrypt_setup_v1_file_key_via_subscribed_keyrings(
-					struct fscrypt_info *ci);
+int fscrypt_setup_v1_file_key_via_subscribed_keyrings(struct fscrypt_info *ci);
+
 /* policy.c */
 
-extern bool fscrypt_policies_equal(const union fscrypt_policy *policy1,
-				   const union fscrypt_policy *policy2);
-extern bool fscrypt_supported_policy(const union fscrypt_policy *policy_u,
-				     const struct inode *inode);
-extern int fscrypt_policy_from_context(union fscrypt_policy *policy_u,
-				       const union fscrypt_context *ctx_u,
-				       int ctx_size);
+bool fscrypt_policies_equal(const union fscrypt_policy *policy1,
+			    const union fscrypt_policy *policy2);
+bool fscrypt_supported_policy(const union fscrypt_policy *policy_u,
+			      const struct inode *inode);
+int fscrypt_policy_from_context(union fscrypt_policy *policy_u,
+				const union fscrypt_context *ctx_u,
+				int ctx_size);
+const union fscrypt_policy *fscrypt_policy_to_inherit(struct inode *dir);
 
 #endif /* _FSCRYPT_PRIVATE_H */
diff --git a/fs/crypto/hkdf.c b/fs/crypto/hkdf.c
index f21873e..efb95bd 100644
--- a/fs/crypto/hkdf.c
+++ b/fs/crypto/hkdf.c
@@ -112,7 +112,7 @@ int fscrypt_init_hkdf(struct fscrypt_hkdf *hkdf, const u8 *master_key,
  * adds to its application-specific info strings to guarantee that it doesn't
  * accidentally repeat an info string when using HKDF for different purposes.)
  */
-int fscrypt_hkdf_expand(struct fscrypt_hkdf *hkdf, u8 context,
+int fscrypt_hkdf_expand(const struct fscrypt_hkdf *hkdf, u8 context,
 			const u8 *info, unsigned int infolen,
 			u8 *okm, unsigned int okmlen)
 {
diff --git a/fs/crypto/hooks.c b/fs/crypto/hooks.c
index a5a40a7..a73b037 100644
--- a/fs/crypto/hooks.c
+++ b/fs/crypto/hooks.c
@@ -5,10 +5,12 @@
  * Encryption hooks for higher-level filesystem operations.
  */
 
+#include <linux/key.h>
+
 #include "fscrypt_private.h"
 
 /**
- * fscrypt_file_open - prepare to open a possibly-encrypted regular file
+ * fscrypt_file_open() - prepare to open a possibly-encrypted regular file
  * @inode: the inode being opened
  * @filp: the struct file being set up
  *
@@ -52,15 +54,12 @@ EXPORT_SYMBOL_GPL(fscrypt_file_open);
 int __fscrypt_prepare_link(struct inode *inode, struct inode *dir,
 			   struct dentry *dentry)
 {
-	int err;
-
-	err = fscrypt_require_key(dir);
-	if (err)
-		return err;
-
-	/* ... in case we looked up no-key name before key was added */
 	if (fscrypt_is_nokey_name(dentry))
 		return -ENOKEY;
+	/*
+	 * We don't need to separately check that the directory inode's key is
+	 * available, as it's implied by the dentry not being a no-key name.
+	 */
 
 	if (!fscrypt_has_permitted_context(dir, inode))
 		return -EXDEV;
@@ -73,20 +72,13 @@ int __fscrypt_prepare_rename(struct inode *old_dir, struct dentry *old_dentry,
 			     struct inode *new_dir, struct dentry *new_dentry,
 			     unsigned int flags)
 {
-	int err;
-
-	err = fscrypt_require_key(old_dir);
-	if (err)
-		return err;
-
-	err = fscrypt_require_key(new_dir);
-	if (err)
-		return err;
-
-	/* ... in case we looked up no-key name(s) before key was added */
 	if (fscrypt_is_nokey_name(old_dentry) ||
 	    fscrypt_is_nokey_name(new_dentry))
 		return -ENOKEY;
+	/*
+	 * We don't need to separately check that the directory inodes' keys are
+	 * available, as it's implied by the dentries not being no-key names.
+	 */
 
 	if (old_dir != new_dir) {
 		if (IS_ENCRYPTED(new_dir) &&
@@ -112,36 +104,118 @@ int __fscrypt_prepare_lookup(struct inode *dir, struct dentry *dentry,
 	if (err && err != -ENOENT)
 		return err;
 
-	if (fname->is_ciphertext_name) {
+	if (fname->is_nokey_name) {
 		spin_lock(&dentry->d_lock);
-		dentry->d_flags |= DCACHE_ENCRYPTED_NAME;
+		dentry->d_flags |= DCACHE_NOKEY_NAME;
 		spin_unlock(&dentry->d_lock);
-		d_set_d_op(dentry, &fscrypt_d_ops);
 	}
 	return err;
 }
 EXPORT_SYMBOL_GPL(__fscrypt_prepare_lookup);
 
-int __fscrypt_prepare_symlink(struct inode *dir, unsigned int len,
-			      unsigned int max_len,
-			      struct fscrypt_str *disk_link)
+int __fscrypt_prepare_readdir(struct inode *dir)
 {
+	return fscrypt_get_encryption_info(dir, true);
+}
+EXPORT_SYMBOL_GPL(__fscrypt_prepare_readdir);
+
+int __fscrypt_prepare_setattr(struct dentry *dentry, struct iattr *attr)
+{
+	if (attr->ia_valid & ATTR_SIZE)
+		return fscrypt_require_key(d_inode(dentry));
+	return 0;
+}
+EXPORT_SYMBOL_GPL(__fscrypt_prepare_setattr);
+
+/**
+ * fscrypt_prepare_setflags() - prepare to change flags with FS_IOC_SETFLAGS
+ * @inode: the inode on which flags are being changed
+ * @oldflags: the old flags
+ * @flags: the new flags
+ *
+ * The caller should be holding i_rwsem for write.
+ *
+ * Return: 0 on success; -errno if the flags change isn't allowed or if
+ *	   another error occurs.
+ */
+int fscrypt_prepare_setflags(struct inode *inode,
+			     unsigned int oldflags, unsigned int flags)
+{
+	struct fscrypt_info *ci;
+	struct key *key;
+	struct fscrypt_master_key *mk;
 	int err;
 
 	/*
+	 * When the CASEFOLD flag is set on an encrypted directory, we must
+	 * derive the secret key needed for the dirhash.  This is only possible
+	 * if the directory uses a v2 encryption policy.
+	 */
+	if (IS_ENCRYPTED(inode) && (flags & ~oldflags & FS_CASEFOLD_FL)) {
+		err = fscrypt_require_key(inode);
+		if (err)
+			return err;
+		ci = inode->i_crypt_info;
+		if (ci->ci_policy.version != FSCRYPT_POLICY_V2)
+			return -EINVAL;
+		key = ci->ci_master_key;
+		mk = key->payload.data[0];
+		down_read(&key->sem);
+		if (is_master_key_secret_present(&mk->mk_secret))
+			err = fscrypt_derive_dirhash_key(ci, mk);
+		else
+			err = -ENOKEY;
+		up_read(&key->sem);
+		return err;
+	}
+	return 0;
+}
+
+/**
+ * fscrypt_prepare_symlink() - prepare to create a possibly-encrypted symlink
+ * @dir: directory in which the symlink is being created
+ * @target: plaintext symlink target
+ * @len: length of @target excluding null terminator
+ * @max_len: space the filesystem has available to store the symlink target
+ * @disk_link: (out) the on-disk symlink target being prepared
+ *
+ * This function computes the size the symlink target will require on-disk,
+ * stores it in @disk_link->len, and validates it against @max_len.  An
+ * encrypted symlink may be longer than the original.
+ *
+ * Additionally, @disk_link->name is set to @target if the symlink will be
+ * unencrypted, but left NULL if the symlink will be encrypted.  For encrypted
+ * symlinks, the filesystem must call fscrypt_encrypt_symlink() to create the
+ * on-disk target later.  (The reason for the two-step process is that some
+ * filesystems need to know the size of the symlink target before creating the
+ * inode, e.g. to determine whether it will be a "fast" or "slow" symlink.)
+ *
+ * Return: 0 on success, -ENAMETOOLONG if the symlink target is too long,
+ * -ENOKEY if the encryption key is missing, or another -errno code if a problem
+ * occurred while setting up the encryption key.
+ */
+int fscrypt_prepare_symlink(struct inode *dir, const char *target,
+			    unsigned int len, unsigned int max_len,
+			    struct fscrypt_str *disk_link)
+{
+	const union fscrypt_policy *policy;
+
+	/*
 	 * To calculate the size of the encrypted symlink target we need to know
 	 * the amount of NUL padding, which is determined by the flags set in
 	 * the encryption policy which will be inherited from the directory.
-	 * The easiest way to get access to this is to just load the directory's
-	 * fscrypt_info, since we'll need it to create the dir_entry anyway.
-	 *
-	 * Note: in test_dummy_encryption mode, @dir may be unencrypted.
 	 */
-	err = fscrypt_get_encryption_info(dir);
-	if (err)
-		return err;
-	if (!fscrypt_has_encryption_key(dir))
-		return -ENOKEY;
+	policy = fscrypt_policy_to_inherit(dir);
+	if (policy == NULL) {
+		/* Not encrypted */
+		disk_link->name = (unsigned char *)target;
+		disk_link->len = len + 1;
+		if (disk_link->len > max_len)
+			return -ENAMETOOLONG;
+		return 0;
+	}
+	if (IS_ERR(policy))
+		return PTR_ERR(policy);
 
 	/*
 	 * Calculate the size of the encrypted symlink and verify it won't
@@ -154,7 +228,7 @@ int __fscrypt_prepare_symlink(struct inode *dir, unsigned int len,
 	 * counting it (even though it is meaningless for ciphertext) is simpler
 	 * for now since filesystems will assume it is there and subtract it.
 	 */
-	if (!fscrypt_fname_encrypted_size(dir, len,
+	if (!fscrypt_fname_encrypted_size(policy, len,
 					  max_len - sizeof(struct fscrypt_symlink_data),
 					  &disk_link->len))
 		return -ENAMETOOLONG;
@@ -163,7 +237,7 @@ int __fscrypt_prepare_symlink(struct inode *dir, unsigned int len,
 	disk_link->name = NULL;
 	return 0;
 }
-EXPORT_SYMBOL_GPL(__fscrypt_prepare_symlink);
+EXPORT_SYMBOL_GPL(fscrypt_prepare_symlink);
 
 int __fscrypt_encrypt_symlink(struct inode *inode, const char *target,
 			      unsigned int len, struct fscrypt_str *disk_link)
@@ -173,9 +247,13 @@ int __fscrypt_encrypt_symlink(struct inode *inode, const char *target,
 	struct fscrypt_symlink_data *sd;
 	unsigned int ciphertext_len;
 
-	err = fscrypt_require_key(inode);
-	if (err)
-		return err;
+	/*
+	 * fscrypt_prepare_new_inode() should have already set up the new
+	 * symlink inode's encryption key.  We don't wait until now to do it,
+	 * since we may be in a filesystem transaction now.
+	 */
+	if (WARN_ON_ONCE(!fscrypt_has_encryption_key(inode)))
+		return -ENOKEY;
 
 	if (disk_link->name) {
 		/* filesystem-provided buffer */
@@ -188,7 +266,8 @@ int __fscrypt_encrypt_symlink(struct inode *inode, const char *target,
 	ciphertext_len = disk_link->len - sizeof(*sd);
 	sd->len = cpu_to_le16(ciphertext_len);
 
-	err = fname_encrypt(inode, &iname, sd->encrypted_path, ciphertext_len);
+	err = fscrypt_fname_encrypt(inode, &iname, sd->encrypted_path,
+				    ciphertext_len);
 	if (err)
 		goto err_free_sd;
 
@@ -217,7 +296,7 @@ int __fscrypt_encrypt_symlink(struct inode *inode, const char *target,
 EXPORT_SYMBOL_GPL(__fscrypt_encrypt_symlink);
 
 /**
- * fscrypt_get_symlink - get the target of an encrypted symlink
+ * fscrypt_get_symlink() - get the target of an encrypted symlink
  * @inode: the symlink inode
  * @caddr: the on-disk contents of the symlink
  * @max_size: size of @caddr buffer
@@ -252,7 +331,7 @@ const char *fscrypt_get_symlink(struct inode *inode, const void *caddr,
 	 * Try to set up the symlink's encryption key, but we can continue
 	 * regardless of whether the key is available or not.
 	 */
-	err = fscrypt_get_encryption_info(inode);
+	err = fscrypt_get_encryption_info(inode, false);
 	if (err)
 		return ERR_PTR(err);
 	has_key = fscrypt_has_encryption_key(inode);
@@ -274,7 +353,7 @@ const char *fscrypt_get_symlink(struct inode *inode, const void *caddr,
 	if (cstr.len + sizeof(*sd) - 1 > max_size)
 		return ERR_PTR(-EUCLEAN);
 
-	err = fscrypt_fname_alloc_buffer(inode, cstr.len, &pstr);
+	err = fscrypt_fname_alloc_buffer(cstr.len, &pstr);
 	if (err)
 		return ERR_PTR(err);
 
diff --git a/fs/crypto/inline_crypt.c b/fs/crypto/inline_crypt.c
new file mode 100644
index 0000000..5817a04
--- /dev/null
+++ b/fs/crypto/inline_crypt.c
@@ -0,0 +1,474 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Inline encryption support for fscrypt
+ *
+ * Copyright 2019 Google LLC
+ */
+
+/*
+ * With "inline encryption", the block layer handles the decryption/encryption
+ * as part of the bio, instead of the filesystem doing the crypto itself via
+ * crypto API.  See Documentation/block/inline-encryption.rst.  fscrypt still
+ * provides the key and IV to use.
+ */
+
+#include <linux/blk-crypto.h>
+#include <linux/blkdev.h>
+#include <linux/buffer_head.h>
+#include <linux/keyslot-manager.h>
+#include <linux/sched/mm.h>
+#include <linux/uio.h>
+
+#include "fscrypt_private.h"
+
+struct fscrypt_blk_crypto_key {
+	struct blk_crypto_key base;
+	int num_devs;
+	struct request_queue *devs[];
+};
+
+static int fscrypt_get_num_devices(struct super_block *sb)
+{
+	if (sb->s_cop->get_num_devices)
+		return sb->s_cop->get_num_devices(sb);
+	return 1;
+}
+
+static void fscrypt_get_devices(struct super_block *sb, int num_devs,
+				struct request_queue **devs)
+{
+	if (num_devs == 1)
+		devs[0] = bdev_get_queue(sb->s_bdev);
+	else
+		sb->s_cop->get_devices(sb, devs);
+}
+
+static unsigned int fscrypt_get_dun_bytes(const struct fscrypt_info *ci)
+{
+	struct super_block *sb = ci->ci_inode->i_sb;
+	unsigned int flags = fscrypt_policy_flags(&ci->ci_policy);
+	int ino_bits = 64, lblk_bits = 64;
+
+	if (flags & FSCRYPT_POLICY_FLAG_DIRECT_KEY)
+		return offsetofend(union fscrypt_iv, nonce);
+
+	if (flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64)
+		return sizeof(__le64);
+
+	if (flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32)
+		return sizeof(__le32);
+
+	/* Default case: IVs are just the file logical block number */
+	if (sb->s_cop->get_ino_and_lblk_bits)
+		sb->s_cop->get_ino_and_lblk_bits(sb, &ino_bits, &lblk_bits);
+	return DIV_ROUND_UP(lblk_bits, 8);
+}
+
+/* Enable inline encryption for this file if supported. */
+int fscrypt_select_encryption_impl(struct fscrypt_info *ci,
+				   bool is_hw_wrapped_key)
+{
+	const struct inode *inode = ci->ci_inode;
+	struct super_block *sb = inode->i_sb;
+	struct blk_crypto_config crypto_cfg;
+	int num_devs;
+	struct request_queue **devs;
+	int i;
+
+	/* The file must need contents encryption, not filenames encryption */
+	if (!S_ISREG(inode->i_mode))
+		return 0;
+
+	/* The crypto mode must have a blk-crypto counterpart */
+	if (ci->ci_mode->blk_crypto_mode == BLK_ENCRYPTION_MODE_INVALID)
+		return 0;
+
+	/* The filesystem must be mounted with -o inlinecrypt */
+	if (!(sb->s_flags & SB_INLINECRYPT))
+		return 0;
+
+	/*
+	 * When a page contains multiple logically contiguous filesystem blocks,
+	 * some filesystem code only calls fscrypt_mergeable_bio() for the first
+	 * block in the page. This is fine for most of fscrypt's IV generation
+	 * strategies, where contiguous blocks imply contiguous IVs. But it
+	 * doesn't work with IV_INO_LBLK_32. For now, simply exclude
+	 * IV_INO_LBLK_32 with blocksize != PAGE_SIZE from inline encryption.
+	 */
+	if ((fscrypt_policy_flags(&ci->ci_policy) &
+	     FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32) &&
+	    sb->s_blocksize != PAGE_SIZE)
+		return 0;
+
+	/*
+	 * On all the filesystem's devices, blk-crypto must support the crypto
+	 * configuration that the file would use.
+	 */
+	crypto_cfg.crypto_mode = ci->ci_mode->blk_crypto_mode;
+	crypto_cfg.data_unit_size = sb->s_blocksize;
+	crypto_cfg.dun_bytes = fscrypt_get_dun_bytes(ci);
+	crypto_cfg.is_hw_wrapped = is_hw_wrapped_key;
+	num_devs = fscrypt_get_num_devices(sb);
+	devs = kmalloc_array(num_devs, sizeof(*devs), GFP_KERNEL);
+	if (!devs)
+		return -ENOMEM;
+	fscrypt_get_devices(sb, num_devs, devs);
+
+	for (i = 0; i < num_devs; i++) {
+		if (!blk_crypto_config_supported(devs[i], &crypto_cfg))
+			goto out_free_devs;
+	}
+
+	ci->ci_inlinecrypt = true;
+out_free_devs:
+	kfree(devs);
+
+	return 0;
+}
+
+int fscrypt_prepare_inline_crypt_key(struct fscrypt_prepared_key *prep_key,
+				     const u8 *raw_key,
+				     unsigned int raw_key_size,
+				     bool is_hw_wrapped,
+				     const struct fscrypt_info *ci)
+{
+	const struct inode *inode = ci->ci_inode;
+	struct super_block *sb = inode->i_sb;
+	enum blk_crypto_mode_num crypto_mode = ci->ci_mode->blk_crypto_mode;
+	int num_devs = fscrypt_get_num_devices(sb);
+	int queue_refs = 0;
+	struct fscrypt_blk_crypto_key *blk_key;
+	int err;
+	int i;
+
+	blk_key = kzalloc(struct_size(blk_key, devs, num_devs), GFP_KERNEL);
+	if (!blk_key)
+		return -ENOMEM;
+
+	blk_key->num_devs = num_devs;
+	fscrypt_get_devices(sb, num_devs, blk_key->devs);
+
+	BUILD_BUG_ON(FSCRYPT_MAX_HW_WRAPPED_KEY_SIZE >
+		     BLK_CRYPTO_MAX_WRAPPED_KEY_SIZE);
+
+	err = blk_crypto_init_key(&blk_key->base, raw_key, raw_key_size,
+				  is_hw_wrapped, crypto_mode,
+				  fscrypt_get_dun_bytes(ci), sb->s_blocksize);
+	if (err) {
+		fscrypt_err(inode, "error %d initializing blk-crypto key", err);
+		goto fail;
+	}
+
+	/*
+	 * We have to start using blk-crypto on all the filesystem's devices.
+	 * We also have to save all the request_queue's for later so that the
+	 * key can be evicted from them.  This is needed because some keys
+	 * aren't destroyed until after the filesystem was already unmounted
+	 * (namely, the per-mode keys in struct fscrypt_master_key).
+	 */
+	for (i = 0; i < num_devs; i++) {
+		if (!blk_get_queue(blk_key->devs[i])) {
+			fscrypt_err(inode, "couldn't get request_queue");
+			err = -EAGAIN;
+			goto fail;
+		}
+		queue_refs++;
+
+		err = blk_crypto_start_using_key(&blk_key->base,
+						 blk_key->devs[i]);
+		if (err) {
+			fscrypt_err(inode,
+				    "error %d starting to use blk-crypto", err);
+			goto fail;
+		}
+	}
+	/*
+	 * Pairs with the smp_load_acquire() in fscrypt_is_key_prepared().
+	 * I.e., here we publish ->blk_key with a RELEASE barrier so that
+	 * concurrent tasks can ACQUIRE it.  Note that this concurrency is only
+	 * possible for per-mode keys, not for per-file keys.
+	 */
+	smp_store_release(&prep_key->blk_key, blk_key);
+	return 0;
+
+fail:
+	for (i = 0; i < queue_refs; i++)
+		blk_put_queue(blk_key->devs[i]);
+	kzfree(blk_key);
+	return err;
+}
+
+void fscrypt_destroy_inline_crypt_key(struct fscrypt_prepared_key *prep_key)
+{
+	struct fscrypt_blk_crypto_key *blk_key = prep_key->blk_key;
+	int i;
+
+	if (blk_key) {
+		for (i = 0; i < blk_key->num_devs; i++) {
+			blk_crypto_evict_key(blk_key->devs[i], &blk_key->base);
+			blk_put_queue(blk_key->devs[i]);
+		}
+		kzfree(blk_key);
+	}
+}
+
+int fscrypt_derive_raw_secret(struct super_block *sb,
+			      const u8 *wrapped_key,
+			      unsigned int wrapped_key_size,
+			      u8 *raw_secret, unsigned int raw_secret_size)
+{
+	struct request_queue *q;
+
+	q = bdev_get_queue(sb->s_bdev);
+	if (!q->ksm)
+		return -EOPNOTSUPP;
+
+	return blk_ksm_derive_raw_secret(q->ksm, wrapped_key, wrapped_key_size,
+					 raw_secret, raw_secret_size);
+}
+
+bool __fscrypt_inode_uses_inline_crypto(const struct inode *inode)
+{
+	return inode->i_crypt_info->ci_inlinecrypt;
+}
+EXPORT_SYMBOL_GPL(__fscrypt_inode_uses_inline_crypto);
+
+static void fscrypt_generate_dun(const struct fscrypt_info *ci, u64 lblk_num,
+				 u64 dun[BLK_CRYPTO_DUN_ARRAY_SIZE])
+{
+	union fscrypt_iv iv;
+	int i;
+
+	fscrypt_generate_iv(&iv, lblk_num, ci);
+
+	BUILD_BUG_ON(FSCRYPT_MAX_IV_SIZE > BLK_CRYPTO_MAX_IV_SIZE);
+	memset(dun, 0, BLK_CRYPTO_MAX_IV_SIZE);
+	for (i = 0; i < ci->ci_mode->ivsize/sizeof(dun[0]); i++)
+		dun[i] = le64_to_cpu(iv.dun[i]);
+}
+
+/**
+ * fscrypt_set_bio_crypt_ctx() - prepare a file contents bio for inline crypto
+ * @bio: a bio which will eventually be submitted to the file
+ * @inode: the file's inode
+ * @first_lblk: the first file logical block number in the I/O
+ * @gfp_mask: memory allocation flags - these must be a waiting mask so that
+ *					bio_crypt_set_ctx can't fail.
+ *
+ * If the contents of the file should be encrypted (or decrypted) with inline
+ * encryption, then assign the appropriate encryption context to the bio.
+ *
+ * Normally the bio should be newly allocated (i.e. no pages added yet), as
+ * otherwise fscrypt_mergeable_bio() won't work as intended.
+ *
+ * The encryption context will be freed automatically when the bio is freed.
+ *
+ * This function also handles setting bi_skip_dm_default_key when needed.
+ */
+void fscrypt_set_bio_crypt_ctx(struct bio *bio, const struct inode *inode,
+			       u64 first_lblk, gfp_t gfp_mask)
+{
+	const struct fscrypt_info *ci;
+	u64 dun[BLK_CRYPTO_DUN_ARRAY_SIZE];
+
+	if (fscrypt_inode_should_skip_dm_default_key(inode))
+		bio_set_skip_dm_default_key(bio);
+
+	if (!fscrypt_inode_uses_inline_crypto(inode))
+		return;
+	ci = inode->i_crypt_info;
+
+	fscrypt_generate_dun(ci, first_lblk, dun);
+	bio_crypt_set_ctx(bio, &ci->ci_enc_key.blk_key->base, dun, gfp_mask);
+}
+EXPORT_SYMBOL_GPL(fscrypt_set_bio_crypt_ctx);
+
+/* Extract the inode and logical block number from a buffer_head. */
+static bool bh_get_inode_and_lblk_num(const struct buffer_head *bh,
+				      const struct inode **inode_ret,
+				      u64 *lblk_num_ret)
+{
+	struct page *page = bh->b_page;
+	const struct address_space *mapping;
+	const struct inode *inode;
+
+	/*
+	 * The ext4 journal (jbd2) can submit a buffer_head it directly created
+	 * for a non-pagecache page.  fscrypt doesn't care about these.
+	 */
+	mapping = page_mapping(page);
+	if (!mapping)
+		return false;
+	inode = mapping->host;
+
+	*inode_ret = inode;
+	*lblk_num_ret = ((u64)page->index << (PAGE_SHIFT - inode->i_blkbits)) +
+			(bh_offset(bh) >> inode->i_blkbits);
+	return true;
+}
+
+/**
+ * fscrypt_set_bio_crypt_ctx_bh() - prepare a file contents bio for inline
+ *				    crypto
+ * @bio: a bio which will eventually be submitted to the file
+ * @first_bh: the first buffer_head for which I/O will be submitted
+ * @gfp_mask: memory allocation flags
+ *
+ * Same as fscrypt_set_bio_crypt_ctx(), except this takes a buffer_head instead
+ * of an inode and block number directly.
+ */
+void fscrypt_set_bio_crypt_ctx_bh(struct bio *bio,
+				  const struct buffer_head *first_bh,
+				  gfp_t gfp_mask)
+{
+	const struct inode *inode;
+	u64 first_lblk;
+
+	if (bh_get_inode_and_lblk_num(first_bh, &inode, &first_lblk))
+		fscrypt_set_bio_crypt_ctx(bio, inode, first_lblk, gfp_mask);
+}
+EXPORT_SYMBOL_GPL(fscrypt_set_bio_crypt_ctx_bh);
+
+/**
+ * fscrypt_mergeable_bio() - test whether data can be added to a bio
+ * @bio: the bio being built up
+ * @inode: the inode for the next part of the I/O
+ * @next_lblk: the next file logical block number in the I/O
+ *
+ * When building a bio which may contain data which should undergo inline
+ * encryption (or decryption) via fscrypt, filesystems should call this function
+ * to ensure that the resulting bio contains only contiguous data unit numbers.
+ * This will return false if the next part of the I/O cannot be merged with the
+ * bio because either the encryption key would be different or the encryption
+ * data unit numbers would be discontiguous.
+ *
+ * fscrypt_set_bio_crypt_ctx() must have already been called on the bio.
+ *
+ * This function also returns false if the next part of the I/O would need to
+ * have a different value for the bi_skip_dm_default_key flag.
+ *
+ * Return: true iff the I/O is mergeable
+ */
+bool fscrypt_mergeable_bio(struct bio *bio, const struct inode *inode,
+			   u64 next_lblk)
+{
+	const struct bio_crypt_ctx *bc = bio->bi_crypt_context;
+	u64 next_dun[BLK_CRYPTO_DUN_ARRAY_SIZE];
+
+	if (!!bc != fscrypt_inode_uses_inline_crypto(inode))
+		return false;
+	if (bio_should_skip_dm_default_key(bio) !=
+	    fscrypt_inode_should_skip_dm_default_key(inode))
+		return false;
+	if (!bc)
+		return true;
+
+	/*
+	 * Comparing the key pointers is good enough, as all I/O for each key
+	 * uses the same pointer.  I.e., there's currently no need to support
+	 * merging requests where the keys are the same but the pointers differ.
+	 */
+	if (bc->bc_key != &inode->i_crypt_info->ci_enc_key.blk_key->base)
+		return false;
+
+	fscrypt_generate_dun(inode->i_crypt_info, next_lblk, next_dun);
+	return bio_crypt_dun_is_contiguous(bc, bio->bi_iter.bi_size, next_dun);
+}
+EXPORT_SYMBOL_GPL(fscrypt_mergeable_bio);
+
+/**
+ * fscrypt_mergeable_bio_bh() - test whether data can be added to a bio
+ * @bio: the bio being built up
+ * @next_bh: the next buffer_head for which I/O will be submitted
+ *
+ * Same as fscrypt_mergeable_bio(), except this takes a buffer_head instead of
+ * an inode and block number directly.
+ *
+ * Return: true iff the I/O is mergeable
+ */
+bool fscrypt_mergeable_bio_bh(struct bio *bio,
+			      const struct buffer_head *next_bh)
+{
+	const struct inode *inode;
+	u64 next_lblk;
+
+	if (!bh_get_inode_and_lblk_num(next_bh, &inode, &next_lblk))
+		return !bio->bi_crypt_context &&
+		       !bio_should_skip_dm_default_key(bio);
+
+	return fscrypt_mergeable_bio(bio, inode, next_lblk);
+}
+EXPORT_SYMBOL_GPL(fscrypt_mergeable_bio_bh);
+
+/**
+ * fscrypt_dio_supported() - check whether a direct I/O request is unsupported
+ *			     due to encryption constraints
+ * @iocb: the file and position the I/O is targeting
+ * @iter: the I/O data segment(s)
+ *
+ * Return: true if direct I/O is supported
+ */
+bool fscrypt_dio_supported(struct kiocb *iocb, struct iov_iter *iter)
+{
+	const struct inode *inode = file_inode(iocb->ki_filp);
+	const unsigned int blocksize = i_blocksize(inode);
+
+	/* If the file is unencrypted, no veto from us. */
+	if (!fscrypt_needs_contents_encryption(inode))
+		return true;
+
+	/* We only support direct I/O with inline crypto, not fs-layer crypto */
+	if (!fscrypt_inode_uses_inline_crypto(inode))
+		return false;
+
+	/*
+	 * Since the granularity of encryption is filesystem blocks, the I/O
+	 * must be block aligned -- not just disk sector aligned.
+	 */
+	if (!IS_ALIGNED(iocb->ki_pos | iov_iter_alignment(iter), blocksize))
+		return false;
+
+	return true;
+}
+EXPORT_SYMBOL_GPL(fscrypt_dio_supported);
+
+/**
+ * fscrypt_limit_io_blocks() - limit I/O blocks to avoid discontiguous DUNs
+ * @inode: the file on which I/O is being done
+ * @lblk: the block at which the I/O is being started from
+ * @nr_blocks: the number of blocks we want to submit starting at @pos
+ *
+ * Determine the limit to the number of blocks that can be submitted in the bio
+ * targeting @pos without causing a data unit number (DUN) discontinuity.
+ *
+ * This is normally just @nr_blocks, as normally the DUNs just increment along
+ * with the logical blocks.  (Or the file is not encrypted.)
+ *
+ * In rare cases, fscrypt can be using an IV generation method that allows the
+ * DUN to wrap around within logically continuous blocks, and that wraparound
+ * will occur.  If this happens, a value less than @nr_blocks will be returned
+ * so that the wraparound doesn't occur in the middle of the bio.
+ *
+ * Return: the actual number of blocks that can be submitted
+ */
+u64 fscrypt_limit_io_blocks(const struct inode *inode, u64 lblk, u64 nr_blocks)
+{
+	const struct fscrypt_info *ci = inode->i_crypt_info;
+	u32 dun;
+
+	if (!fscrypt_inode_uses_inline_crypto(inode))
+		return nr_blocks;
+
+	if (nr_blocks <= 1)
+		return nr_blocks;
+
+	if (!(fscrypt_policy_flags(&ci->ci_policy) &
+	      FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32))
+		return nr_blocks;
+
+	/* With IV_INO_LBLK_32, the DUN can wrap around from U32_MAX to 0. */
+
+	dun = ci->ci_hashed_ino + lblk;
+
+	return min_t(u64, nr_blocks, (u64)U32_MAX + 1 - dun);
+}
diff --git a/fs/crypto/keyring.c b/fs/crypto/keyring.c
index 4ee65b2..a604ac4 100644
--- a/fs/crypto/keyring.c
+++ b/fs/crypto/keyring.c
@@ -20,6 +20,7 @@
 
 #include <crypto/skcipher.h>
 #include <linux/key-type.h>
+#include <linux/random.h>
 #include <linux/seq_file.h>
 
 #include "fscrypt_private.h"
@@ -43,8 +44,11 @@ static void free_master_key(struct fscrypt_master_key *mk)
 
 	wipe_master_key_secret(&mk->mk_secret);
 
-	for (i = 0; i < ARRAY_SIZE(mk->mk_mode_keys); i++)
-		crypto_free_skcipher(mk->mk_mode_keys[i]);
+	for (i = 0; i <= FSCRYPT_MODE_MAX; i++) {
+		fscrypt_destroy_prepared_key(&mk->mk_direct_keys[i]);
+		fscrypt_destroy_prepared_key(&mk->mk_iv_ino_lblk_64_keys[i]);
+		fscrypt_destroy_prepared_key(&mk->mk_iv_ino_lblk_32_keys[i]);
+	}
 
 	key_put(mk->mk_users);
 	kzfree(mk);
@@ -209,7 +213,11 @@ static int allocate_filesystem_keyring(struct super_block *sb)
 	if (IS_ERR(keyring))
 		return PTR_ERR(keyring);
 
-	/* Pairs with READ_ONCE() in fscrypt_find_master_key() */
+	/*
+	 * Pairs with the smp_load_acquire() in fscrypt_find_master_key().
+	 * I.e., here we publish ->s_master_keys with a RELEASE barrier so that
+	 * concurrent tasks can ACQUIRE it.
+	 */
 	smp_store_release(&sb->s_master_keys, keyring);
 	return 0;
 }
@@ -230,8 +238,13 @@ struct key *fscrypt_find_master_key(struct super_block *sb,
 	struct key *keyring;
 	char description[FSCRYPT_MK_DESCRIPTION_SIZE];
 
-	/* pairs with smp_store_release() in allocate_filesystem_keyring() */
-	keyring = READ_ONCE(sb->s_master_keys);
+	/*
+	 * Pairs with the smp_store_release() in allocate_filesystem_keyring().
+	 * I.e., another task can publish ->s_master_keys concurrently,
+	 * executing a RELEASE barrier.  We need to use smp_load_acquire() here
+	 * to safely ACQUIRE the memory the other task published.
+	 */
+	keyring = smp_load_acquire(&sb->s_master_keys);
 	if (keyring == NULL)
 		return ERR_PTR(-ENOKEY); /* No keyring yet, so no keys yet. */
 
@@ -334,7 +347,6 @@ static int add_new_master_key(struct fscrypt_master_key_secret *secret,
 	mk->mk_spec = *mk_spec;
 
 	move_master_key_secret(&mk->mk_secret, secret);
-	init_rwsem(&mk->mk_secret_sem);
 
 	refcount_set(&mk->mk_refcount, 1); /* secret is present */
 	INIT_LIST_HEAD(&mk->mk_decrypted_inodes);
@@ -414,17 +426,14 @@ static int add_existing_master_key(struct fscrypt_master_key *mk,
 	}
 
 	/* Re-add the secret if needed. */
-	if (rekey) {
-		down_write(&mk->mk_secret_sem);
+	if (rekey)
 		move_master_key_secret(&mk->mk_secret, secret);
-		up_write(&mk->mk_secret_sem);
-	}
 	return 0;
 }
 
-static int add_master_key(struct super_block *sb,
-			  struct fscrypt_master_key_secret *secret,
-			  const struct fscrypt_key_specifier *mk_spec)
+static int do_add_master_key(struct super_block *sb,
+			     struct fscrypt_master_key_secret *secret,
+			     const struct fscrypt_key_specifier *mk_spec)
 {
 	static DEFINE_MUTEX(fscrypt_add_key_mutex);
 	struct key *key;
@@ -463,6 +472,154 @@ static int add_master_key(struct super_block *sb,
 	return err;
 }
 
+/* Size of software "secret" derived from hardware-wrapped key */
+#define RAW_SECRET_SIZE 32
+
+static int add_master_key(struct super_block *sb,
+			  struct fscrypt_master_key_secret *secret,
+			  struct fscrypt_key_specifier *key_spec)
+{
+	int err;
+
+	if (key_spec->type == FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER) {
+		u8 _kdf_key[RAW_SECRET_SIZE];
+		u8 *kdf_key = secret->raw;
+		unsigned int kdf_key_size = secret->size;
+
+		if (secret->is_hw_wrapped) {
+			kdf_key = _kdf_key;
+			kdf_key_size = RAW_SECRET_SIZE;
+			err = fscrypt_derive_raw_secret(sb, secret->raw,
+							secret->size,
+							kdf_key, kdf_key_size);
+			if (err)
+				return err;
+		}
+		err = fscrypt_init_hkdf(&secret->hkdf, kdf_key, kdf_key_size);
+		/*
+		 * Now that the HKDF context is initialized, the raw HKDF key is
+		 * no longer needed.
+		 */
+		memzero_explicit(kdf_key, kdf_key_size);
+		if (err)
+			return err;
+
+		/* Calculate the key identifier */
+		err = fscrypt_hkdf_expand(&secret->hkdf,
+					  HKDF_CONTEXT_KEY_IDENTIFIER, NULL, 0,
+					  key_spec->u.identifier,
+					  FSCRYPT_KEY_IDENTIFIER_SIZE);
+		if (err)
+			return err;
+	}
+	return do_add_master_key(sb, secret, key_spec);
+}
+
+static int fscrypt_provisioning_key_preparse(struct key_preparsed_payload *prep)
+{
+	const struct fscrypt_provisioning_key_payload *payload = prep->data;
+
+	BUILD_BUG_ON(FSCRYPT_MAX_HW_WRAPPED_KEY_SIZE < FSCRYPT_MAX_KEY_SIZE);
+
+	if (prep->datalen < sizeof(*payload) + FSCRYPT_MIN_KEY_SIZE ||
+	    prep->datalen > sizeof(*payload) + FSCRYPT_MAX_HW_WRAPPED_KEY_SIZE)
+		return -EINVAL;
+
+	if (payload->type != FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR &&
+	    payload->type != FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER)
+		return -EINVAL;
+
+	if (payload->__reserved)
+		return -EINVAL;
+
+	prep->payload.data[0] = kmemdup(payload, prep->datalen, GFP_KERNEL);
+	if (!prep->payload.data[0])
+		return -ENOMEM;
+
+	prep->quotalen = prep->datalen;
+	return 0;
+}
+
+static void fscrypt_provisioning_key_free_preparse(
+					struct key_preparsed_payload *prep)
+{
+	kzfree(prep->payload.data[0]);
+}
+
+static void fscrypt_provisioning_key_describe(const struct key *key,
+					      struct seq_file *m)
+{
+	seq_puts(m, key->description);
+	if (key_is_positive(key)) {
+		const struct fscrypt_provisioning_key_payload *payload =
+			key->payload.data[0];
+
+		seq_printf(m, ": %u [%u]", key->datalen, payload->type);
+	}
+}
+
+static void fscrypt_provisioning_key_destroy(struct key *key)
+{
+	kzfree(key->payload.data[0]);
+}
+
+static struct key_type key_type_fscrypt_provisioning = {
+	.name			= "fscrypt-provisioning",
+	.preparse		= fscrypt_provisioning_key_preparse,
+	.free_preparse		= fscrypt_provisioning_key_free_preparse,
+	.instantiate		= generic_key_instantiate,
+	.describe		= fscrypt_provisioning_key_describe,
+	.destroy		= fscrypt_provisioning_key_destroy,
+};
+
+/*
+ * Retrieve the raw key from the Linux keyring key specified by 'key_id', and
+ * store it into 'secret'.
+ *
+ * The key must be of type "fscrypt-provisioning" and must have the field
+ * fscrypt_provisioning_key_payload::type set to 'type', indicating that it's
+ * only usable with fscrypt with the particular KDF version identified by
+ * 'type'.  We don't use the "logon" key type because there's no way to
+ * completely restrict the use of such keys; they can be used by any kernel API
+ * that accepts "logon" keys and doesn't require a specific service prefix.
+ *
+ * The ability to specify the key via Linux keyring key is intended for cases
+ * where userspace needs to re-add keys after the filesystem is unmounted and
+ * re-mounted.  Most users should just provide the raw key directly instead.
+ */
+static int get_keyring_key(u32 key_id, u32 type,
+			   struct fscrypt_master_key_secret *secret)
+{
+	key_ref_t ref;
+	struct key *key;
+	const struct fscrypt_provisioning_key_payload *payload;
+	int err;
+
+	ref = lookup_user_key(key_id, 0, KEY_NEED_SEARCH);
+	if (IS_ERR(ref))
+		return PTR_ERR(ref);
+	key = key_ref_to_ptr(ref);
+
+	if (key->type != &key_type_fscrypt_provisioning)
+		goto bad_key;
+	payload = key->payload.data[0];
+
+	/* Don't allow fscrypt v1 keys to be used as v2 keys and vice versa. */
+	if (payload->type != type)
+		goto bad_key;
+
+	secret->size = key->datalen - sizeof(*payload);
+	memcpy(secret->raw, payload->raw, secret->size);
+	err = 0;
+	goto out_put;
+
+bad_key:
+	err = -EKEYREJECTED;
+out_put:
+	key_ref_put(ref);
+	return err;
+}
+
 /*
  * Add a master encryption key to the filesystem, causing all files which were
  * encrypted with it to appear "unlocked" (decrypted) when accessed.
@@ -501,61 +658,60 @@ int fscrypt_ioctl_add_key(struct file *filp, void __user *_uarg)
 	if (!valid_key_spec(&arg.key_spec))
 		return -EINVAL;
 
-	if (arg.raw_size < FSCRYPT_MIN_KEY_SIZE ||
-	    arg.raw_size > FSCRYPT_MAX_KEY_SIZE)
-		return -EINVAL;
-
 	if (memchr_inv(arg.__reserved, 0, sizeof(arg.__reserved)))
 		return -EINVAL;
 
+	/*
+	 * Only root can add keys that are identified by an arbitrary descriptor
+	 * rather than by a cryptographic hash --- since otherwise a malicious
+	 * user could add the wrong key.
+	 */
+	if (arg.key_spec.type == FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR &&
+	    !capable(CAP_SYS_ADMIN))
+		return -EACCES;
+
 	memset(&secret, 0, sizeof(secret));
-	secret.size = arg.raw_size;
-	err = -EFAULT;
-	if (copy_from_user(secret.raw, uarg->raw, secret.size))
-		goto out_wipe_secret;
 
-	switch (arg.key_spec.type) {
-	case FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR:
-		/*
-		 * Only root can add keys that are identified by an arbitrary
-		 * descriptor rather than by a cryptographic hash --- since
-		 * otherwise a malicious user could add the wrong key.
-		 */
-		err = -EACCES;
-		if (!capable(CAP_SYS_ADMIN))
-			goto out_wipe_secret;
-		break;
-	case FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER:
-		err = fscrypt_init_hkdf(&secret.hkdf, secret.raw, secret.size);
+	if (arg.__flags) {
+		if (arg.__flags & ~__FSCRYPT_ADD_KEY_FLAG_HW_WRAPPED)
+			return -EINVAL;
+		if (arg.key_spec.type != FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER)
+			return -EINVAL;
+		secret.is_hw_wrapped = true;
+	}
+
+	if (arg.key_id) {
+		if (arg.raw_size != 0)
+			return -EINVAL;
+		err = get_keyring_key(arg.key_id, arg.key_spec.type, &secret);
 		if (err)
 			goto out_wipe_secret;
-
-		/*
-		 * Now that the HKDF context is initialized, the raw key is no
-		 * longer needed.
-		 */
-		memzero_explicit(secret.raw, secret.size);
-
-		/* Calculate the key identifier and return it to userspace. */
-		err = fscrypt_hkdf_expand(&secret.hkdf,
-					  HKDF_CONTEXT_KEY_IDENTIFIER,
-					  NULL, 0, arg.key_spec.u.identifier,
-					  FSCRYPT_KEY_IDENTIFIER_SIZE);
-		if (err)
-			goto out_wipe_secret;
-		err = -EFAULT;
-		if (copy_to_user(uarg->key_spec.u.identifier,
-				 arg.key_spec.u.identifier,
-				 FSCRYPT_KEY_IDENTIFIER_SIZE))
-			goto out_wipe_secret;
-		break;
-	default:
-		WARN_ON(1);
 		err = -EINVAL;
-		goto out_wipe_secret;
+		if (secret.size > FSCRYPT_MAX_KEY_SIZE && !secret.is_hw_wrapped)
+			goto out_wipe_secret;
+	} else {
+		if (arg.raw_size < FSCRYPT_MIN_KEY_SIZE ||
+		    arg.raw_size > (secret.is_hw_wrapped ?
+				    FSCRYPT_MAX_HW_WRAPPED_KEY_SIZE :
+				    FSCRYPT_MAX_KEY_SIZE))
+			return -EINVAL;
+		secret.size = arg.raw_size;
+		err = -EFAULT;
+		if (copy_from_user(secret.raw, uarg->raw, secret.size))
+			goto out_wipe_secret;
 	}
 
 	err = add_master_key(sb, &secret, &arg.key_spec);
+	if (err)
+		goto out_wipe_secret;
+
+	/* Return the key identifier to userspace, if applicable */
+	err = -EFAULT;
+	if (arg.key_spec.type == FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER &&
+	    copy_to_user(uarg->key_spec.u.identifier, arg.key_spec.u.identifier,
+			 FSCRYPT_KEY_IDENTIFIER_SIZE))
+		goto out_wipe_secret;
+	err = 0;
 out_wipe_secret:
 	wipe_master_key_secret(&secret);
 	return err;
@@ -563,6 +719,29 @@ int fscrypt_ioctl_add_key(struct file *filp, void __user *_uarg)
 EXPORT_SYMBOL_GPL(fscrypt_ioctl_add_key);
 
 /*
+ * Add the key for '-o test_dummy_encryption' to the filesystem keyring.
+ *
+ * Use a per-boot random key to prevent people from misusing this option.
+ */
+int fscrypt_add_test_dummy_key(struct super_block *sb,
+			       struct fscrypt_key_specifier *key_spec)
+{
+	static u8 test_key[FSCRYPT_MAX_KEY_SIZE];
+	struct fscrypt_master_key_secret secret;
+	int err;
+
+	get_random_once(test_key, FSCRYPT_MAX_KEY_SIZE);
+
+	memset(&secret, 0, sizeof(secret));
+	secret.size = FSCRYPT_MAX_KEY_SIZE;
+	memcpy(secret.raw, test_key, FSCRYPT_MAX_KEY_SIZE);
+
+	err = add_master_key(sb, &secret, key_spec);
+	wipe_master_key_secret(&secret);
+	return err;
+}
+
+/*
  * Verify that the current user has added a master key with the given identifier
  * (returns -ENOKEY if not).  This is needed to prevent a user from encrypting
  * their files using some other user's key which they don't actually know.
@@ -664,6 +843,7 @@ static int check_for_busy_inodes(struct super_block *sb,
 	struct list_head *pos;
 	size_t busy_count = 0;
 	unsigned long ino;
+	char ino_str[50] = "";
 
 	spin_lock(&mk->mk_decrypted_inodes_lock);
 
@@ -685,11 +865,15 @@ static int check_for_busy_inodes(struct super_block *sb,
 	}
 	spin_unlock(&mk->mk_decrypted_inodes_lock);
 
+	/* If the inode is currently being created, ino may still be 0. */
+	if (ino)
+		snprintf(ino_str, sizeof(ino_str), ", including ino %lu", ino);
+
 	fscrypt_warn(NULL,
-		     "%s: %zu inode(s) still busy after removing key with %s %*phN, including ino %lu",
+		     "%s: %zu inode(s) still busy after removing key with %s %*phN%s",
 		     sb->s_id, busy_count, master_key_spec_type(&mk->mk_spec),
 		     master_key_spec_len(&mk->mk_spec), (u8 *)&mk->mk_spec.u,
-		     ino);
+		     ino_str);
 	return -EBUSY;
 }
 
@@ -817,10 +1001,8 @@ static int do_remove_key(struct file *filp, void __user *_uarg, bool all_users)
 	/* No user claims remaining.  Go ahead and wipe the secret. */
 	dead = false;
 	if (is_master_key_secret_present(&mk->mk_secret)) {
-		down_write(&mk->mk_secret_sem);
 		wipe_master_key_secret(&mk->mk_secret);
 		dead = refcount_dec_and_test(&mk->mk_refcount);
-		up_write(&mk->mk_secret_sem);
 	}
 	up_write(&key->sem);
 	if (dead) {
@@ -965,8 +1147,14 @@ int __init fscrypt_init_keyring(void)
 	if (err)
 		goto err_unregister_fscrypt;
 
+	err = register_key_type(&key_type_fscrypt_provisioning);
+	if (err)
+		goto err_unregister_fscrypt_user;
+
 	return 0;
 
+err_unregister_fscrypt_user:
+	unregister_key_type(&key_type_fscrypt_user);
 err_unregister_fscrypt:
 	unregister_key_type(&key_type_fscrypt);
 	return err;
diff --git a/fs/crypto/keysetup.c b/fs/crypto/keysetup.c
index 3e86f75..163dba6 100644
--- a/fs/crypto/keysetup.c
+++ b/fs/crypto/keysetup.c
@@ -8,21 +8,19 @@
  * Heavily modified since then.
  */
 
-#include <crypto/aes.h>
-#include <crypto/sha.h>
 #include <crypto/skcipher.h>
 #include <linux/key.h>
+#include <linux/random.h>
 
 #include "fscrypt_private.h"
 
-static struct crypto_shash *essiv_hash_tfm;
-
-static struct fscrypt_mode available_modes[] = {
+struct fscrypt_mode fscrypt_modes[] = {
 	[FSCRYPT_MODE_AES_256_XTS] = {
 		.friendly_name = "AES-256-XTS",
 		.cipher_str = "xts(aes)",
 		.keysize = 64,
 		.ivsize = 16,
+		.blk_crypto_mode = BLK_ENCRYPTION_MODE_AES_256_XTS,
 	},
 	[FSCRYPT_MODE_AES_256_CTS] = {
 		.friendly_name = "AES-256-CTS-CBC",
@@ -31,11 +29,11 @@ static struct fscrypt_mode available_modes[] = {
 		.ivsize = 16,
 	},
 	[FSCRYPT_MODE_AES_128_CBC] = {
-		.friendly_name = "AES-128-CBC",
-		.cipher_str = "cbc(aes)",
+		.friendly_name = "AES-128-CBC-ESSIV",
+		.cipher_str = "essiv(cbc(aes),sha256)",
 		.keysize = 16,
 		.ivsize = 16,
-		.needs_essiv = true,
+		.blk_crypto_mode = BLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV,
 	},
 	[FSCRYPT_MODE_AES_128_CTS] = {
 		.friendly_name = "AES-128-CTS-CBC",
@@ -48,20 +46,23 @@ static struct fscrypt_mode available_modes[] = {
 		.cipher_str = "adiantum(xchacha12,aes)",
 		.keysize = 32,
 		.ivsize = 32,
+		.blk_crypto_mode = BLK_ENCRYPTION_MODE_ADIANTUM,
 	},
 };
 
+static DEFINE_MUTEX(fscrypt_mode_key_setup_mutex);
+
 static struct fscrypt_mode *
 select_encryption_mode(const union fscrypt_policy *policy,
 		       const struct inode *inode)
 {
-	BUILD_BUG_ON(ARRAY_SIZE(available_modes) != FSCRYPT_MODE_MAX + 1);
+	BUILD_BUG_ON(ARRAY_SIZE(fscrypt_modes) != FSCRYPT_MODE_MAX + 1);
 
 	if (S_ISREG(inode->i_mode))
-		return &available_modes[fscrypt_policy_contents_mode(policy)];
+		return &fscrypt_modes[fscrypt_policy_contents_mode(policy)];
 
 	if (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode))
-		return &available_modes[fscrypt_policy_fnames_mode(policy)];
+		return &fscrypt_modes[fscrypt_policy_fnames_mode(policy)];
 
 	WARN_ONCE(1, "fscrypt: filesystem tried to load encryption info for inode %lu, which is not encryptable (file type %d)\n",
 		  inode->i_ino, (inode->i_mode & S_IFMT));
@@ -69,9 +70,9 @@ select_encryption_mode(const union fscrypt_policy *policy,
 }
 
 /* Create a symmetric cipher object for the given encryption mode and key */
-struct crypto_skcipher *fscrypt_allocate_skcipher(struct fscrypt_mode *mode,
-						  const u8 *raw_key,
-						  const struct inode *inode)
+static struct crypto_skcipher *
+fscrypt_allocate_skcipher(struct fscrypt_mode *mode, const u8 *raw_key,
+			  const struct inode *inode)
 {
 	struct crypto_skcipher *tfm;
 	int err;
@@ -88,18 +89,19 @@ struct crypto_skcipher *fscrypt_allocate_skcipher(struct fscrypt_mode *mode,
 			    mode->cipher_str, PTR_ERR(tfm));
 		return tfm;
 	}
-	if (unlikely(!mode->logged_impl_name)) {
+	if (!xchg(&mode->logged_impl_name, 1)) {
 		/*
 		 * fscrypt performance can vary greatly depending on which
 		 * crypto algorithm implementation is used.  Help people debug
 		 * performance problems by logging the ->cra_driver_name the
-		 * first time a mode is used.  Note that multiple threads can
-		 * race here, but it doesn't really matter.
+		 * first time a mode is used.
 		 */
-		mode->logged_impl_name = true;
 		pr_info("fscrypt: %s using implementation \"%s\"\n",
-			mode->friendly_name,
-			crypto_skcipher_alg(tfm)->base.cra_driver_name);
+			mode->friendly_name, crypto_skcipher_driver_name(tfm));
+	}
+	if (WARN_ON(crypto_skcipher_ivsize(tfm) != mode->ivsize)) {
+		err = -EINVAL;
+		goto err_free_tfm;
 	}
 	crypto_skcipher_set_flags(tfm, CRYPTO_TFM_REQ_FORBID_WEAK_KEYS);
 	err = crypto_skcipher_setkey(tfm, raw_key, mode->keysize);
@@ -113,187 +115,275 @@ struct crypto_skcipher *fscrypt_allocate_skcipher(struct fscrypt_mode *mode,
 	return ERR_PTR(err);
 }
 
-static int derive_essiv_salt(const u8 *key, int keysize, u8 *salt)
+/*
+ * Prepare the crypto transform object or blk-crypto key in @prep_key, given the
+ * raw key, encryption mode, and flag indicating which encryption implementation
+ * (fs-layer or blk-crypto) will be used.
+ */
+int fscrypt_prepare_key(struct fscrypt_prepared_key *prep_key,
+			const u8 *raw_key, unsigned int raw_key_size,
+			bool is_hw_wrapped, const struct fscrypt_info *ci)
 {
-	struct crypto_shash *tfm = READ_ONCE(essiv_hash_tfm);
+	struct crypto_skcipher *tfm;
 
-	/* init hash transform on demand */
-	if (unlikely(!tfm)) {
-		struct crypto_shash *prev_tfm;
+	if (fscrypt_using_inline_encryption(ci))
+		return fscrypt_prepare_inline_crypt_key(prep_key,
+				raw_key, raw_key_size, is_hw_wrapped, ci);
 
-		tfm = crypto_alloc_shash("sha256", 0, 0);
-		if (IS_ERR(tfm)) {
-			if (PTR_ERR(tfm) == -ENOENT) {
-				fscrypt_warn(NULL,
-					     "Missing crypto API support for SHA-256");
-				return -ENOPKG;
-			}
-			fscrypt_err(NULL,
-				    "Error allocating SHA-256 transform: %ld",
-				    PTR_ERR(tfm));
-			return PTR_ERR(tfm);
-		}
-		prev_tfm = cmpxchg(&essiv_hash_tfm, NULL, tfm);
-		if (prev_tfm) {
-			crypto_free_shash(tfm);
-			tfm = prev_tfm;
-		}
-	}
-
-	{
-		SHASH_DESC_ON_STACK(desc, tfm);
-		desc->tfm = tfm;
-
-		return crypto_shash_digest(desc, key, keysize, salt);
-	}
-}
-
-static int init_essiv_generator(struct fscrypt_info *ci, const u8 *raw_key,
-				int keysize)
-{
-	int err;
-	struct crypto_cipher *essiv_tfm;
-	u8 salt[SHA256_DIGEST_SIZE];
-
-	if (WARN_ON(ci->ci_mode->ivsize != AES_BLOCK_SIZE))
+	if (WARN_ON(is_hw_wrapped || raw_key_size != ci->ci_mode->keysize))
 		return -EINVAL;
 
-	essiv_tfm = crypto_alloc_cipher("aes", 0, 0);
-	if (IS_ERR(essiv_tfm))
-		return PTR_ERR(essiv_tfm);
-
-	ci->ci_essiv_tfm = essiv_tfm;
-
-	err = derive_essiv_salt(raw_key, keysize, salt);
-	if (err)
-		goto out;
-
+	tfm = fscrypt_allocate_skcipher(ci->ci_mode, raw_key, ci->ci_inode);
+	if (IS_ERR(tfm))
+		return PTR_ERR(tfm);
 	/*
-	 * Using SHA256 to derive the salt/key will result in AES-256 being
-	 * used for IV generation. File contents encryption will still use the
-	 * configured keysize (AES-128) nevertheless.
+	 * Pairs with the smp_load_acquire() in fscrypt_is_key_prepared().
+	 * I.e., here we publish ->tfm with a RELEASE barrier so that
+	 * concurrent tasks can ACQUIRE it.  Note that this concurrency is only
+	 * possible for per-mode keys, not for per-file keys.
 	 */
-	err = crypto_cipher_setkey(essiv_tfm, salt, sizeof(salt));
-	if (err)
-		goto out;
-
-out:
-	memzero_explicit(salt, sizeof(salt));
-	return err;
-}
-
-/* Given the per-file key, set up the file's crypto transform object(s) */
-int fscrypt_set_derived_key(struct fscrypt_info *ci, const u8 *derived_key)
-{
-	struct fscrypt_mode *mode = ci->ci_mode;
-	struct crypto_skcipher *ctfm;
-	int err;
-
-	ctfm = fscrypt_allocate_skcipher(mode, derived_key, ci->ci_inode);
-	if (IS_ERR(ctfm))
-		return PTR_ERR(ctfm);
-
-	ci->ci_ctfm = ctfm;
-
-	if (mode->needs_essiv) {
-		err = init_essiv_generator(ci, derived_key, mode->keysize);
-		if (err) {
-			fscrypt_warn(ci->ci_inode,
-				     "Error initializing ESSIV generator: %d",
-				     err);
-			return err;
-		}
-	}
+	smp_store_release(&prep_key->tfm, tfm);
 	return 0;
 }
 
-static int setup_per_mode_key(struct fscrypt_info *ci,
-			      struct fscrypt_master_key *mk)
+/* Destroy a crypto transform object and/or blk-crypto key. */
+void fscrypt_destroy_prepared_key(struct fscrypt_prepared_key *prep_key)
 {
+	crypto_free_skcipher(prep_key->tfm);
+	fscrypt_destroy_inline_crypt_key(prep_key);
+}
+
+/* Given a per-file encryption key, set up the file's crypto transform object */
+int fscrypt_set_per_file_enc_key(struct fscrypt_info *ci, const u8 *raw_key)
+{
+	ci->ci_owns_key = true;
+	return fscrypt_prepare_key(&ci->ci_enc_key, raw_key,
+				   ci->ci_mode->keysize,
+				   false /*is_hw_wrapped*/, ci);
+}
+
+static int setup_per_mode_enc_key(struct fscrypt_info *ci,
+				  struct fscrypt_master_key *mk,
+				  struct fscrypt_prepared_key *keys,
+				  u8 hkdf_context, bool include_fs_uuid)
+{
+	const struct inode *inode = ci->ci_inode;
+	const struct super_block *sb = inode->i_sb;
 	struct fscrypt_mode *mode = ci->ci_mode;
-	u8 mode_num = mode - available_modes;
-	struct crypto_skcipher *tfm, *prev_tfm;
+	const u8 mode_num = mode - fscrypt_modes;
+	struct fscrypt_prepared_key *prep_key;
 	u8 mode_key[FSCRYPT_MAX_KEY_SIZE];
+	u8 hkdf_info[sizeof(mode_num) + sizeof(sb->s_uuid)];
+	unsigned int hkdf_infolen = 0;
 	int err;
 
-	if (WARN_ON(mode_num >= ARRAY_SIZE(mk->mk_mode_keys)))
+	if (WARN_ON(mode_num > FSCRYPT_MODE_MAX))
 		return -EINVAL;
 
-	/* pairs with cmpxchg() below */
-	tfm = READ_ONCE(mk->mk_mode_keys[mode_num]);
-	if (likely(tfm != NULL))
-		goto done;
+	prep_key = &keys[mode_num];
+	if (fscrypt_is_key_prepared(prep_key, ci)) {
+		ci->ci_enc_key = *prep_key;
+		return 0;
+	}
 
-	BUILD_BUG_ON(sizeof(mode_num) != 1);
-	err = fscrypt_hkdf_expand(&mk->mk_secret.hkdf,
-				  HKDF_CONTEXT_PER_MODE_KEY,
-				  &mode_num, sizeof(mode_num),
-				  mode_key, mode->keysize);
+	mutex_lock(&fscrypt_mode_key_setup_mutex);
+
+	if (fscrypt_is_key_prepared(prep_key, ci))
+		goto done_unlock;
+
+	if (mk->mk_secret.is_hw_wrapped && S_ISREG(inode->i_mode)) {
+		int i;
+
+		if (!fscrypt_using_inline_encryption(ci)) {
+			fscrypt_warn(ci->ci_inode,
+				     "Hardware-wrapped keys require inline encryption (-o inlinecrypt)");
+			err = -EINVAL;
+			goto out_unlock;
+		}
+		for (i = 0; i <= FSCRYPT_MODE_MAX; i++) {
+			if (fscrypt_is_key_prepared(&keys[i], ci)) {
+				fscrypt_warn(ci->ci_inode,
+					     "Each hardware-wrapped key can only be used with one encryption mode");
+				err = -EINVAL;
+				goto out_unlock;
+			}
+		}
+		err = fscrypt_prepare_key(prep_key, mk->mk_secret.raw,
+					  mk->mk_secret.size, true, ci);
+		if (err)
+			goto out_unlock;
+	} else {
+		BUILD_BUG_ON(sizeof(mode_num) != 1);
+		BUILD_BUG_ON(sizeof(sb->s_uuid) != 16);
+		BUILD_BUG_ON(sizeof(hkdf_info) != 17);
+		hkdf_info[hkdf_infolen++] = mode_num;
+		if (include_fs_uuid) {
+			memcpy(&hkdf_info[hkdf_infolen], &sb->s_uuid,
+				   sizeof(sb->s_uuid));
+			hkdf_infolen += sizeof(sb->s_uuid);
+		}
+		err = fscrypt_hkdf_expand(&mk->mk_secret.hkdf,
+					  hkdf_context, hkdf_info, hkdf_infolen,
+					  mode_key, mode->keysize);
+		if (err)
+			goto out_unlock;
+		err = fscrypt_prepare_key(prep_key, mode_key, mode->keysize,
+					  false /*is_hw_wrapped*/, ci);
+		memzero_explicit(mode_key, mode->keysize);
+		if (err)
+			goto out_unlock;
+	}
+done_unlock:
+	ci->ci_enc_key = *prep_key;
+	err = 0;
+out_unlock:
+	mutex_unlock(&fscrypt_mode_key_setup_mutex);
+	return err;
+}
+
+int fscrypt_derive_dirhash_key(struct fscrypt_info *ci,
+			       const struct fscrypt_master_key *mk)
+{
+	int err;
+
+	err = fscrypt_hkdf_expand(&mk->mk_secret.hkdf, HKDF_CONTEXT_DIRHASH_KEY,
+				  ci->ci_nonce, FSCRYPT_FILE_NONCE_SIZE,
+				  (u8 *)&ci->ci_dirhash_key,
+				  sizeof(ci->ci_dirhash_key));
 	if (err)
 		return err;
-	tfm = fscrypt_allocate_skcipher(mode, mode_key, ci->ci_inode);
-	memzero_explicit(mode_key, mode->keysize);
-	if (IS_ERR(tfm))
-		return PTR_ERR(tfm);
+	ci->ci_dirhash_key_initialized = true;
+	return 0;
+}
 
-	/* pairs with READ_ONCE() above */
-	prev_tfm = cmpxchg(&mk->mk_mode_keys[mode_num], NULL, tfm);
-	if (prev_tfm != NULL) {
-		crypto_free_skcipher(tfm);
-		tfm = prev_tfm;
+void fscrypt_hash_inode_number(struct fscrypt_info *ci,
+			       const struct fscrypt_master_key *mk)
+{
+	WARN_ON(ci->ci_inode->i_ino == 0);
+	WARN_ON(!mk->mk_ino_hash_key_initialized);
+
+	ci->ci_hashed_ino = (u32)siphash_1u64(ci->ci_inode->i_ino,
+					      &mk->mk_ino_hash_key);
+}
+
+static int fscrypt_setup_iv_ino_lblk_32_key(struct fscrypt_info *ci,
+					    struct fscrypt_master_key *mk)
+{
+	int err;
+
+	err = setup_per_mode_enc_key(ci, mk, mk->mk_iv_ino_lblk_32_keys,
+				     HKDF_CONTEXT_IV_INO_LBLK_32_KEY, true);
+	if (err)
+		return err;
+
+	/* pairs with smp_store_release() below */
+	if (!smp_load_acquire(&mk->mk_ino_hash_key_initialized)) {
+
+		mutex_lock(&fscrypt_mode_key_setup_mutex);
+
+		if (mk->mk_ino_hash_key_initialized)
+			goto unlock;
+
+		err = fscrypt_hkdf_expand(&mk->mk_secret.hkdf,
+					  HKDF_CONTEXT_INODE_HASH_KEY, NULL, 0,
+					  (u8 *)&mk->mk_ino_hash_key,
+					  sizeof(mk->mk_ino_hash_key));
+		if (err)
+			goto unlock;
+		/* pairs with smp_load_acquire() above */
+		smp_store_release(&mk->mk_ino_hash_key_initialized, true);
+unlock:
+		mutex_unlock(&fscrypt_mode_key_setup_mutex);
+		if (err)
+			return err;
 	}
-done:
-	ci->ci_ctfm = tfm;
+
+	/*
+	 * New inodes may not have an inode number assigned yet.
+	 * Hashing their inode number is delayed until later.
+	 */
+	if (ci->ci_inode->i_ino)
+		fscrypt_hash_inode_number(ci, mk);
 	return 0;
 }
 
 static int fscrypt_setup_v2_file_key(struct fscrypt_info *ci,
-				     struct fscrypt_master_key *mk)
+				     struct fscrypt_master_key *mk,
+				     bool need_dirhash_key)
 {
-	u8 derived_key[FSCRYPT_MAX_KEY_SIZE];
 	int err;
 
+	if (mk->mk_secret.is_hw_wrapped &&
+	    !(ci->ci_policy.v2.flags & (FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64 |
+					FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32))) {
+		fscrypt_warn(ci->ci_inode,
+			     "Hardware-wrapped keys are only supported with IV_INO_LBLK policies");
+		return -EINVAL;
+	}
+
 	if (ci->ci_policy.v2.flags & FSCRYPT_POLICY_FLAG_DIRECT_KEY) {
 		/*
-		 * DIRECT_KEY: instead of deriving per-file keys, the per-file
-		 * nonce will be included in all the IVs.  But unlike v1
-		 * policies, for v2 policies in this case we don't encrypt with
-		 * the master key directly but rather derive a per-mode key.
-		 * This ensures that the master key is consistently used only
-		 * for HKDF, avoiding key reuse issues.
+		 * DIRECT_KEY: instead of deriving per-file encryption keys, the
+		 * per-file nonce will be included in all the IVs.  But unlike
+		 * v1 policies, for v2 policies in this case we don't encrypt
+		 * with the master key directly but rather derive a per-mode
+		 * encryption key.  This ensures that the master key is
+		 * consistently used only for HKDF, avoiding key reuse issues.
 		 */
-		if (!fscrypt_mode_supports_direct_key(ci->ci_mode)) {
-			fscrypt_warn(ci->ci_inode,
-				     "Direct key flag not allowed with %s",
-				     ci->ci_mode->friendly_name);
-			return -EINVAL;
-		}
-		return setup_per_mode_key(ci, mk);
-	}
+		err = setup_per_mode_enc_key(ci, mk, mk->mk_direct_keys,
+					     HKDF_CONTEXT_DIRECT_KEY, false);
+	} else if (ci->ci_policy.v2.flags &
+		   FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64) {
+		/*
+		 * IV_INO_LBLK_64: encryption keys are derived from (master_key,
+		 * mode_num, filesystem_uuid), and inode number is included in
+		 * the IVs.  This format is optimized for use with inline
+		 * encryption hardware compliant with the UFS standard.
+		 */
+		err = setup_per_mode_enc_key(ci, mk, mk->mk_iv_ino_lblk_64_keys,
+					     HKDF_CONTEXT_IV_INO_LBLK_64_KEY,
+					     true);
+	} else if (ci->ci_policy.v2.flags &
+		   FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32) {
+		err = fscrypt_setup_iv_ino_lblk_32_key(ci, mk);
+	} else {
+		u8 derived_key[FSCRYPT_MAX_KEY_SIZE];
 
-	err = fscrypt_hkdf_expand(&mk->mk_secret.hkdf,
-				  HKDF_CONTEXT_PER_FILE_KEY,
-				  ci->ci_nonce, FS_KEY_DERIVATION_NONCE_SIZE,
-				  derived_key, ci->ci_mode->keysize);
+		err = fscrypt_hkdf_expand(&mk->mk_secret.hkdf,
+					  HKDF_CONTEXT_PER_FILE_ENC_KEY,
+					  ci->ci_nonce, FSCRYPT_FILE_NONCE_SIZE,
+					  derived_key, ci->ci_mode->keysize);
+		if (err)
+			return err;
+
+		err = fscrypt_set_per_file_enc_key(ci, derived_key);
+		memzero_explicit(derived_key, ci->ci_mode->keysize);
+	}
 	if (err)
 		return err;
 
-	err = fscrypt_set_derived_key(ci, derived_key);
-	memzero_explicit(derived_key, ci->ci_mode->keysize);
-	return err;
+	/* Derive a secret dirhash key for directories that need it. */
+	if (need_dirhash_key) {
+		err = fscrypt_derive_dirhash_key(ci, mk);
+		if (err)
+			return err;
+	}
+
+	return 0;
 }
 
 /*
  * Find the master key, then set up the inode's actual encryption key.
  *
  * If the master key is found in the filesystem-level keyring, then the
- * corresponding 'struct key' is returned in *master_key_ret with
- * ->mk_secret_sem read-locked.  This is needed to ensure that only one task
- * links the fscrypt_info into ->mk_decrypted_inodes (as multiple tasks may race
- * to create an fscrypt_info for the same inode), and to synchronize the master
- * key being removed with a new inode starting to use it.
+ * corresponding 'struct key' is returned in *master_key_ret with its semaphore
+ * read-locked.  This is needed to ensure that only one task links the
+ * fscrypt_info into ->mk_decrypted_inodes (as multiple tasks may race to create
+ * an fscrypt_info for the same inode), and to synchronize the master key being
+ * removed with a new inode starting to use it.
  */
 static int setup_file_encryption_key(struct fscrypt_info *ci,
+				     bool need_dirhash_key,
 				     struct key **master_key_ret)
 {
 	struct key *key;
@@ -325,6 +415,10 @@ static int setup_file_encryption_key(struct fscrypt_info *ci,
 		    ci->ci_policy.version != FSCRYPT_POLICY_V1)
 			return PTR_ERR(key);
 
+		err = fscrypt_select_encryption_impl(ci, false);
+		if (err)
+			return err;
+
 		/*
 		 * As a legacy fallback for v1 policies, search for the key in
 		 * the current task's subscribed keyrings too.  Don't move this
@@ -335,7 +429,7 @@ static int setup_file_encryption_key(struct fscrypt_info *ci,
 	}
 
 	mk = key->payload.data[0];
-	down_read(&mk->mk_secret_sem);
+	down_read(&key->sem);
 
 	/* Has the secret been removed (via FS_IOC_REMOVE_ENCRYPTION_KEY)? */
 	if (!is_master_key_secret_present(&mk->mk_secret)) {
@@ -359,12 +453,16 @@ static int setup_file_encryption_key(struct fscrypt_info *ci,
 		goto out_release_key;
 	}
 
+	err = fscrypt_select_encryption_impl(ci, mk->mk_secret.is_hw_wrapped);
+	if (err)
+		goto out_release_key;
+
 	switch (ci->ci_policy.version) {
 	case FSCRYPT_POLICY_V1:
 		err = fscrypt_setup_v1_file_key(ci, mk->mk_secret.raw);
 		break;
 	case FSCRYPT_POLICY_V2:
-		err = fscrypt_setup_v2_file_key(ci, mk);
+		err = fscrypt_setup_v2_file_key(ci, mk, need_dirhash_key);
 		break;
 	default:
 		WARN_ON(1);
@@ -378,7 +476,7 @@ static int setup_file_encryption_key(struct fscrypt_info *ci,
 	return 0;
 
 out_release_key:
-	up_read(&mk->mk_secret_sem);
+	up_read(&key->sem);
 	key_put(key);
 	return err;
 }
@@ -390,13 +488,10 @@ static void put_crypt_info(struct fscrypt_info *ci)
 	if (!ci)
 		return;
 
-	if (ci->ci_direct_key) {
+	if (ci->ci_direct_key)
 		fscrypt_put_direct_key(ci->ci_direct_key);
-	} else if ((ci->ci_ctfm != NULL || ci->ci_essiv_tfm != NULL) &&
-		   !fscrypt_is_direct_key_policy(&ci->ci_policy)) {
-		crypto_free_skcipher(ci->ci_ctfm);
-		crypto_free_cipher(ci->ci_essiv_tfm);
-	}
+	else if (ci->ci_owns_key)
+		fscrypt_destroy_prepared_key(&ci->ci_enc_key);
 
 	key = ci->ci_master_key;
 	if (key) {
@@ -417,75 +512,32 @@ static void put_crypt_info(struct fscrypt_info *ci)
 			key_invalidate(key);
 		key_put(key);
 	}
+	memzero_explicit(ci, sizeof(*ci));
 	kmem_cache_free(fscrypt_info_cachep, ci);
 }
 
-int fscrypt_get_encryption_info(struct inode *inode)
+static int
+fscrypt_setup_encryption_info(struct inode *inode,
+			      const union fscrypt_policy *policy,
+			      const u8 nonce[FSCRYPT_FILE_NONCE_SIZE],
+			      bool need_dirhash_key)
 {
 	struct fscrypt_info *crypt_info;
-	union fscrypt_context ctx;
 	struct fscrypt_mode *mode;
 	struct key *master_key = NULL;
 	int res;
 
-	if (fscrypt_has_encryption_key(inode))
-		return 0;
-
 	res = fscrypt_initialize(inode->i_sb->s_cop->flags);
 	if (res)
 		return res;
 
-	res = inode->i_sb->s_cop->get_context(inode, &ctx, sizeof(ctx));
-	if (res < 0) {
-		if (!fscrypt_dummy_context_enabled(inode) ||
-		    IS_ENCRYPTED(inode)) {
-			fscrypt_warn(inode,
-				     "Error %d getting encryption context",
-				     res);
-			return res;
-		}
-		/* Fake up a context for an unencrypted directory */
-		memset(&ctx, 0, sizeof(ctx));
-		ctx.version = FSCRYPT_CONTEXT_V1;
-		ctx.v1.contents_encryption_mode = FSCRYPT_MODE_AES_256_XTS;
-		ctx.v1.filenames_encryption_mode = FSCRYPT_MODE_AES_256_CTS;
-		memset(ctx.v1.master_key_descriptor, 0x42,
-		       FSCRYPT_KEY_DESCRIPTOR_SIZE);
-		res = sizeof(ctx.v1);
-	}
-
-	crypt_info = kmem_cache_zalloc(fscrypt_info_cachep, GFP_NOFS);
+	crypt_info = kmem_cache_zalloc(fscrypt_info_cachep, GFP_KERNEL);
 	if (!crypt_info)
 		return -ENOMEM;
 
 	crypt_info->ci_inode = inode;
-
-	res = fscrypt_policy_from_context(&crypt_info->ci_policy, &ctx, res);
-	if (res) {
-		fscrypt_warn(inode,
-			     "Unrecognized or corrupt encryption context");
-		goto out;
-	}
-
-	switch (ctx.version) {
-	case FSCRYPT_CONTEXT_V1:
-		memcpy(crypt_info->ci_nonce, ctx.v1.nonce,
-		       FS_KEY_DERIVATION_NONCE_SIZE);
-		break;
-	case FSCRYPT_CONTEXT_V2:
-		memcpy(crypt_info->ci_nonce, ctx.v2.nonce,
-		       FS_KEY_DERIVATION_NONCE_SIZE);
-		break;
-	default:
-		WARN_ON(1);
-		res = -EINVAL;
-		goto out;
-	}
-
-	if (!fscrypt_supported_policy(&crypt_info->ci_policy, inode)) {
-		res = -EINVAL;
-		goto out;
-	}
+	crypt_info->ci_policy = *policy;
+	memcpy(crypt_info->ci_nonce, nonce, FSCRYPT_FILE_NONCE_SIZE);
 
 	mode = select_encryption_mode(&crypt_info->ci_policy, inode);
 	if (IS_ERR(mode)) {
@@ -495,11 +547,22 @@ int fscrypt_get_encryption_info(struct inode *inode)
 	WARN_ON(mode->ivsize > FSCRYPT_MAX_IV_SIZE);
 	crypt_info->ci_mode = mode;
 
-	res = setup_file_encryption_key(crypt_info, &master_key);
+	res = setup_file_encryption_key(crypt_info, need_dirhash_key,
+					&master_key);
 	if (res)
 		goto out;
 
+	/*
+	 * For existing inodes, multiple tasks may race to set ->i_crypt_info.
+	 * So use cmpxchg_release().  This pairs with the smp_load_acquire() in
+	 * fscrypt_get_info().  I.e., here we publish ->i_crypt_info with a
+	 * RELEASE barrier so that other tasks can ACQUIRE it.
+	 */
 	if (cmpxchg_release(&inode->i_crypt_info, NULL, crypt_info) == NULL) {
+		/*
+		 * We won the race and set ->i_crypt_info to our crypt_info.
+		 * Now link it into the master key's inode list.
+		 */
 		if (master_key) {
 			struct fscrypt_master_key *mk =
 				master_key->payload.data[0];
@@ -516,20 +579,132 @@ int fscrypt_get_encryption_info(struct inode *inode)
 	res = 0;
 out:
 	if (master_key) {
-		struct fscrypt_master_key *mk = master_key->payload.data[0];
-
-		up_read(&mk->mk_secret_sem);
+		up_read(&master_key->sem);
 		key_put(master_key);
 	}
-	if (res == -ENOKEY)
-		res = 0;
 	put_crypt_info(crypt_info);
 	return res;
 }
-EXPORT_SYMBOL(fscrypt_get_encryption_info);
 
 /**
- * fscrypt_put_encryption_info - free most of an inode's fscrypt data
+ * fscrypt_get_encryption_info() - set up an inode's encryption key
+ * @inode: the inode to set up the key for.  Must be encrypted.
+ * @allow_unsupported: if %true, treat an unsupported encryption policy (or
+ *		       unrecognized encryption context) the same way as the key
+ *		       being unavailable, instead of returning an error.  Use
+ *		       %false unless the operation being performed is needed in
+ *		       order for files (or directories) to be deleted.
+ *
+ * Set up ->i_crypt_info, if it hasn't already been done.
+ *
+ * Note: unless ->i_crypt_info is already set, this isn't %GFP_NOFS-safe.  So
+ * generally this shouldn't be called from within a filesystem transaction.
+ *
+ * Return: 0 if ->i_crypt_info was set or was already set, *or* if the
+ *	   encryption key is unavailable.  (Use fscrypt_has_encryption_key() to
+ *	   distinguish these cases.)  Also can return another -errno code.
+ */
+int fscrypt_get_encryption_info(struct inode *inode, bool allow_unsupported)
+{
+	int res;
+	union fscrypt_context ctx;
+	union fscrypt_policy policy;
+
+	if (fscrypt_has_encryption_key(inode))
+		return 0;
+
+	res = inode->i_sb->s_cop->get_context(inode, &ctx, sizeof(ctx));
+	if (res < 0) {
+		if (res == -ERANGE && allow_unsupported)
+			return 0;
+		fscrypt_warn(inode, "Error %d getting encryption context", res);
+		return res;
+	}
+
+	res = fscrypt_policy_from_context(&policy, &ctx, res);
+	if (res) {
+		if (allow_unsupported)
+			return 0;
+		fscrypt_warn(inode,
+			     "Unrecognized or corrupt encryption context");
+		return res;
+	}
+
+	if (!fscrypt_supported_policy(&policy, inode)) {
+		if (allow_unsupported)
+			return 0;
+		return -EINVAL;
+	}
+
+	res = fscrypt_setup_encryption_info(inode, &policy,
+					    fscrypt_context_nonce(&ctx),
+					    IS_CASEFOLDED(inode) &&
+					    S_ISDIR(inode->i_mode));
+
+	if (res == -ENOPKG && allow_unsupported) /* Algorithm unavailable? */
+		res = 0;
+	if (res == -ENOKEY)
+		res = 0;
+	return res;
+}
+
+/**
+ * fscrypt_prepare_new_inode() - prepare to create a new inode in a directory
+ * @dir: a possibly-encrypted directory
+ * @inode: the new inode.  ->i_mode must be set already.
+ *	   ->i_ino doesn't need to be set yet.
+ * @encrypt_ret: (output) set to %true if the new inode will be encrypted
+ *
+ * If the directory is encrypted, set up its ->i_crypt_info in preparation for
+ * encrypting the name of the new file.  Also, if the new inode will be
+ * encrypted, set up its ->i_crypt_info and set *encrypt_ret=true.
+ *
+ * This isn't %GFP_NOFS-safe, and therefore it should be called before starting
+ * any filesystem transaction to create the inode.  For this reason, ->i_ino
+ * isn't required to be set yet, as the filesystem may not have set it yet.
+ *
+ * This doesn't persist the new inode's encryption context.  That still needs to
+ * be done later by calling fscrypt_set_context().
+ *
+ * Return: 0 on success, -ENOKEY if the encryption key is missing, or another
+ *	   -errno code
+ */
+int fscrypt_prepare_new_inode(struct inode *dir, struct inode *inode,
+			      bool *encrypt_ret)
+{
+	const union fscrypt_policy *policy;
+	u8 nonce[FSCRYPT_FILE_NONCE_SIZE];
+
+	policy = fscrypt_policy_to_inherit(dir);
+	if (policy == NULL)
+		return 0;
+	if (IS_ERR(policy))
+		return PTR_ERR(policy);
+
+	if (WARN_ON_ONCE(inode->i_mode == 0))
+		return -EINVAL;
+
+	/*
+	 * Only regular files, directories, and symlinks are encrypted.
+	 * Special files like device nodes and named pipes aren't.
+	 */
+	if (!S_ISREG(inode->i_mode) &&
+	    !S_ISDIR(inode->i_mode) &&
+	    !S_ISLNK(inode->i_mode))
+		return 0;
+
+	*encrypt_ret = true;
+
+	get_random_bytes(nonce, FSCRYPT_FILE_NONCE_SIZE);
+	return fscrypt_setup_encryption_info(inode, policy, nonce,
+					     IS_CASEFOLDED(dir) &&
+					     S_ISDIR(inode->i_mode));
+}
+EXPORT_SYMBOL_GPL(fscrypt_prepare_new_inode);
+
+/**
+ * fscrypt_put_encryption_info() - free most of an inode's fscrypt data
+ * @inode: an inode being evicted
  *
  * Free the inode's fscrypt_info.  Filesystems must call this when the inode is
  * being evicted.  An RCU grace period need not have elapsed yet.
@@ -542,7 +717,8 @@ void fscrypt_put_encryption_info(struct inode *inode)
 EXPORT_SYMBOL(fscrypt_put_encryption_info);
 
 /**
- * fscrypt_free_inode - free an inode's fscrypt data requiring RCU delay
+ * fscrypt_free_inode() - free an inode's fscrypt data requiring RCU delay
+ * @inode: an inode being freed
  *
  * Free the inode's cached decrypted symlink target, if any.  Filesystems must
  * call this after an RCU grace period, just before they free the inode.
@@ -557,7 +733,8 @@ void fscrypt_free_inode(struct inode *inode)
 EXPORT_SYMBOL(fscrypt_free_inode);
 
 /**
- * fscrypt_drop_inode - check whether the inode's master key has been removed
+ * fscrypt_drop_inode() - check whether the inode's master key has been removed
+ * @inode: an inode being considered for eviction
  *
  * Filesystems supporting fscrypt must call this from their ->drop_inode()
  * method so that encrypted inodes are evicted as soon as they're no longer in
@@ -567,7 +744,7 @@ EXPORT_SYMBOL(fscrypt_free_inode);
  */
 int fscrypt_drop_inode(struct inode *inode)
 {
-	const struct fscrypt_info *ci = READ_ONCE(inode->i_crypt_info);
+	const struct fscrypt_info *ci = fscrypt_get_info(inode);
 	const struct fscrypt_master_key *mk;
 
 	/*
@@ -590,7 +767,7 @@ int fscrypt_drop_inode(struct inode *inode)
 		return 0;
 
 	/*
-	 * Note: since we aren't holding ->mk_secret_sem, the result here can
+	 * Note: since we aren't holding the key semaphore, the result here can
 	 * immediately become outdated.  But there's no correctness problem with
 	 * unnecessarily evicting.  Nor is there a correctness problem with not
 	 * evicting while iput() is racing with the key being removed, since
diff --git a/fs/crypto/keysetup_v1.c b/fs/crypto/keysetup_v1.c
index ad1a36c..c2faa37 100644
--- a/fs/crypto/keysetup_v1.c
+++ b/fs/crypto/keysetup_v1.c
@@ -9,7 +9,7 @@
  * This file implements compatibility functions for the original encryption
  * policy version ("v1"), including:
  *
- * - Deriving per-file keys using the AES-128-ECB based KDF
+ * - Deriving per-file encryption keys using the AES-128-ECB based KDF
  *   (rather than the new method of using HKDF-SHA512)
  *
  * - Retrieving fscrypt master keys from process-subscribed keyrings
@@ -45,7 +45,7 @@ static DEFINE_SPINLOCK(fscrypt_direct_keys_lock);
  * key is longer, then only the first 'derived_keysize' bytes are used.
  */
 static int derive_key_aes(const u8 *master_key,
-			  const u8 nonce[FS_KEY_DERIVATION_NONCE_SIZE],
+			  const u8 nonce[FSCRYPT_FILE_NONCE_SIZE],
 			  u8 *derived_key, unsigned int derived_keysize)
 {
 	int res = 0;
@@ -60,7 +60,7 @@ static int derive_key_aes(const u8 *master_key,
 		goto out;
 	}
 	crypto_skcipher_set_flags(tfm, CRYPTO_TFM_REQ_FORBID_WEAK_KEYS);
-	req = skcipher_request_alloc(tfm, GFP_NOFS);
+	req = skcipher_request_alloc(tfm, GFP_KERNEL);
 	if (!req) {
 		res = -ENOMEM;
 		goto out;
@@ -68,7 +68,7 @@ static int derive_key_aes(const u8 *master_key,
 	skcipher_request_set_callback(req,
 			CRYPTO_TFM_REQ_MAY_BACKLOG | CRYPTO_TFM_REQ_MAY_SLEEP,
 			crypto_req_done, &wait);
-	res = crypto_skcipher_setkey(tfm, nonce, FS_KEY_DERIVATION_NONCE_SIZE);
+	res = crypto_skcipher_setkey(tfm, nonce, FSCRYPT_FILE_NONCE_SIZE);
 	if (res < 0)
 		goto out;
 
@@ -99,7 +99,7 @@ find_and_lock_process_key(const char *prefix,
 	const struct user_key_payload *ukp;
 	const struct fscrypt_key *payload;
 
-	description = kasprintf(GFP_NOFS, "%s%*phN", prefix,
+	description = kasprintf(GFP_KERNEL, "%s%*phN", prefix,
 				FSCRYPT_KEY_DESCRIPTOR_SIZE, descriptor);
 	if (!description)
 		return ERR_PTR(-ENOMEM);
@@ -146,7 +146,7 @@ struct fscrypt_direct_key {
 	struct hlist_node		dk_node;
 	refcount_t			dk_refcount;
 	const struct fscrypt_mode	*dk_mode;
-	struct crypto_skcipher		*dk_ctfm;
+	struct fscrypt_prepared_key	dk_key;
 	u8				dk_descriptor[FSCRYPT_KEY_DESCRIPTOR_SIZE];
 	u8				dk_raw[FSCRYPT_MAX_KEY_SIZE];
 };
@@ -154,7 +154,7 @@ struct fscrypt_direct_key {
 static void free_direct_key(struct fscrypt_direct_key *dk)
 {
 	if (dk) {
-		crypto_free_skcipher(dk->dk_ctfm);
+		fscrypt_destroy_prepared_key(&dk->dk_key);
 		kzfree(dk);
 	}
 }
@@ -199,6 +199,8 @@ find_or_insert_direct_key(struct fscrypt_direct_key *to_insert,
 			continue;
 		if (ci->ci_mode != dk->dk_mode)
 			continue;
+		if (!fscrypt_is_key_prepared(&dk->dk_key, ci))
+			continue;
 		if (crypto_memneq(raw_key, dk->dk_raw, ci->ci_mode->keysize))
 			continue;
 		/* using existing tfm with same (descriptor, mode, raw_key) */
@@ -226,18 +228,15 @@ fscrypt_get_direct_key(const struct fscrypt_info *ci, const u8 *raw_key)
 		return dk;
 
 	/* Nope, allocate one. */
-	dk = kzalloc(sizeof(*dk), GFP_NOFS);
+	dk = kzalloc(sizeof(*dk), GFP_KERNEL);
 	if (!dk)
 		return ERR_PTR(-ENOMEM);
 	refcount_set(&dk->dk_refcount, 1);
 	dk->dk_mode = ci->ci_mode;
-	dk->dk_ctfm = fscrypt_allocate_skcipher(ci->ci_mode, raw_key,
-						ci->ci_inode);
-	if (IS_ERR(dk->dk_ctfm)) {
-		err = PTR_ERR(dk->dk_ctfm);
-		dk->dk_ctfm = NULL;
+	err = fscrypt_prepare_key(&dk->dk_key, raw_key, ci->ci_mode->keysize,
+				  false /*is_hw_wrapped*/, ci);
+	if (err)
 		goto err_free_dk;
-	}
 	memcpy(dk->dk_descriptor, ci->ci_policy.v1.master_key_descriptor,
 	       FSCRYPT_KEY_DESCRIPTOR_SIZE);
 	memcpy(dk->dk_raw, raw_key, ci->ci_mode->keysize);
@@ -253,32 +252,13 @@ fscrypt_get_direct_key(const struct fscrypt_info *ci, const u8 *raw_key)
 static int setup_v1_file_key_direct(struct fscrypt_info *ci,
 				    const u8 *raw_master_key)
 {
-	const struct fscrypt_mode *mode = ci->ci_mode;
 	struct fscrypt_direct_key *dk;
 
-	if (!fscrypt_mode_supports_direct_key(mode)) {
-		fscrypt_warn(ci->ci_inode,
-			     "Direct key mode not allowed with %s",
-			     mode->friendly_name);
-		return -EINVAL;
-	}
-
-	if (ci->ci_policy.v1.contents_encryption_mode !=
-	    ci->ci_policy.v1.filenames_encryption_mode) {
-		fscrypt_warn(ci->ci_inode,
-			     "Direct key mode not allowed with different contents and filenames modes");
-		return -EINVAL;
-	}
-
-	/* ESSIV implies 16-byte IVs which implies !DIRECT_KEY */
-	if (WARN_ON(mode->needs_essiv))
-		return -EINVAL;
-
 	dk = fscrypt_get_direct_key(ci, raw_master_key);
 	if (IS_ERR(dk))
 		return PTR_ERR(dk);
 	ci->ci_direct_key = dk;
-	ci->ci_ctfm = dk->dk_ctfm;
+	ci->ci_enc_key = dk->dk_key;
 	return 0;
 }
 
@@ -293,7 +273,7 @@ static int setup_v1_file_key_derived(struct fscrypt_info *ci,
 	 * This cannot be a stack buffer because it will be passed to the
 	 * scatterlist crypto API during derive_key_aes().
 	 */
-	derived_key = kmalloc(ci->ci_mode->keysize, GFP_NOFS);
+	derived_key = kmalloc(ci->ci_mode->keysize, GFP_KERNEL);
 	if (!derived_key)
 		return -ENOMEM;
 
@@ -302,7 +282,7 @@ static int setup_v1_file_key_derived(struct fscrypt_info *ci,
 	if (err)
 		goto out;
 
-	err = fscrypt_set_derived_key(ci, derived_key);
+	err = fscrypt_set_per_file_enc_key(ci, derived_key);
 out:
 	kzfree(derived_key);
 	return err;
diff --git a/fs/crypto/policy.c b/fs/crypto/policy.c
index 8e1b108..a51cef6 100644
--- a/fs/crypto/policy.c
+++ b/fs/crypto/policy.c
@@ -11,12 +11,15 @@
  */
 
 #include <linux/random.h>
+#include <linux/seq_file.h>
 #include <linux/string.h>
 #include <linux/mount.h>
 #include "fscrypt_private.h"
 
 /**
- * fscrypt_policies_equal - check whether two encryption policies are the same
+ * fscrypt_policies_equal() - check whether two encryption policies are the same
+ * @policy1: the first policy
+ * @policy2: the second policy
  *
  * Return: %true if equal, else %false
  */
@@ -29,13 +32,205 @@ bool fscrypt_policies_equal(const union fscrypt_policy *policy1,
 	return !memcmp(policy1, policy2, fscrypt_policy_size(policy1));
 }
 
+static const union fscrypt_policy *
+fscrypt_get_dummy_policy(struct super_block *sb)
+{
+	if (!sb->s_cop->get_dummy_policy)
+		return NULL;
+	return sb->s_cop->get_dummy_policy(sb);
+}
+
+static bool fscrypt_valid_enc_modes(u32 contents_mode, u32 filenames_mode)
+{
+	if (contents_mode == FSCRYPT_MODE_AES_256_XTS &&
+	    filenames_mode == FSCRYPT_MODE_AES_256_CTS)
+		return true;
+
+	if (contents_mode == FSCRYPT_MODE_AES_128_CBC &&
+	    filenames_mode == FSCRYPT_MODE_AES_128_CTS)
+		return true;
+
+	if (contents_mode == FSCRYPT_MODE_ADIANTUM &&
+	    filenames_mode == FSCRYPT_MODE_ADIANTUM)
+		return true;
+
+	return false;
+}
+
+static bool supported_direct_key_modes(const struct inode *inode,
+				       u32 contents_mode, u32 filenames_mode)
+{
+	const struct fscrypt_mode *mode;
+
+	if (contents_mode != filenames_mode) {
+		fscrypt_warn(inode,
+			     "Direct key flag not allowed with different contents and filenames modes");
+		return false;
+	}
+	mode = &fscrypt_modes[contents_mode];
+
+	if (mode->ivsize < offsetofend(union fscrypt_iv, nonce)) {
+		fscrypt_warn(inode, "Direct key flag not allowed with %s",
+			     mode->friendly_name);
+		return false;
+	}
+	return true;
+}
+
+static bool supported_iv_ino_lblk_policy(const struct fscrypt_policy_v2 *policy,
+					 const struct inode *inode,
+					 const char *type,
+					 int max_ino_bits, int max_lblk_bits)
+{
+	struct super_block *sb = inode->i_sb;
+	int ino_bits = 64, lblk_bits = 64;
+
+	/*
+	 * IV_INO_LBLK_* exist only because of hardware limitations, and
+	 * currently the only known use case for them involves AES-256-XTS.
+	 * That's also all we test currently.  For these reasons, for now only
+	 * allow AES-256-XTS here.  This can be relaxed later if a use case for
+	 * IV_INO_LBLK_* with other encryption modes arises.
+	 */
+	if (policy->contents_encryption_mode != FSCRYPT_MODE_AES_256_XTS) {
+		fscrypt_warn(inode,
+			     "Can't use %s policy with contents mode other than AES-256-XTS",
+			     type);
+		return false;
+	}
+
+	/*
+	 * It's unsafe to include inode numbers in the IVs if the filesystem can
+	 * potentially renumber inodes, e.g. via filesystem shrinking.
+	 */
+	if (!sb->s_cop->has_stable_inodes ||
+	    !sb->s_cop->has_stable_inodes(sb)) {
+		fscrypt_warn(inode,
+			     "Can't use %s policy on filesystem '%s' because it doesn't have stable inode numbers",
+			     type, sb->s_id);
+		return false;
+	}
+	if (sb->s_cop->get_ino_and_lblk_bits)
+		sb->s_cop->get_ino_and_lblk_bits(sb, &ino_bits, &lblk_bits);
+	if (ino_bits > max_ino_bits) {
+		fscrypt_warn(inode,
+			     "Can't use %s policy on filesystem '%s' because its inode numbers are too long",
+			     type, sb->s_id);
+		return false;
+	}
+	if (lblk_bits > max_lblk_bits) {
+		fscrypt_warn(inode,
+			     "Can't use %s policy on filesystem '%s' because its block numbers are too long",
+			     type, sb->s_id);
+		return false;
+	}
+	return true;
+}
+
+static bool fscrypt_supported_v1_policy(const struct fscrypt_policy_v1 *policy,
+					const struct inode *inode)
+{
+	if (!fscrypt_valid_enc_modes(policy->contents_encryption_mode,
+				     policy->filenames_encryption_mode)) {
+		fscrypt_warn(inode,
+			     "Unsupported encryption modes (contents %d, filenames %d)",
+			     policy->contents_encryption_mode,
+			     policy->filenames_encryption_mode);
+		return false;
+	}
+
+	if (policy->flags & ~(FSCRYPT_POLICY_FLAGS_PAD_MASK |
+			      FSCRYPT_POLICY_FLAG_DIRECT_KEY)) {
+		fscrypt_warn(inode, "Unsupported encryption flags (0x%02x)",
+			     policy->flags);
+		return false;
+	}
+
+	if ((policy->flags & FSCRYPT_POLICY_FLAG_DIRECT_KEY) &&
+	    !supported_direct_key_modes(inode, policy->contents_encryption_mode,
+					policy->filenames_encryption_mode))
+		return false;
+
+	if (IS_CASEFOLDED(inode)) {
+		/* With v1, there's no way to derive dirhash keys. */
+		fscrypt_warn(inode,
+			     "v1 policies can't be used on casefolded directories");
+		return false;
+	}
+
+	return true;
+}
+
+static bool fscrypt_supported_v2_policy(const struct fscrypt_policy_v2 *policy,
+					const struct inode *inode)
+{
+	int count = 0;
+
+	if (!fscrypt_valid_enc_modes(policy->contents_encryption_mode,
+				     policy->filenames_encryption_mode)) {
+		fscrypt_warn(inode,
+			     "Unsupported encryption modes (contents %d, filenames %d)",
+			     policy->contents_encryption_mode,
+			     policy->filenames_encryption_mode);
+		return false;
+	}
+
+	if (policy->flags & ~(FSCRYPT_POLICY_FLAGS_PAD_MASK |
+			      FSCRYPT_POLICY_FLAG_DIRECT_KEY |
+			      FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64 |
+			      FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32)) {
+		fscrypt_warn(inode, "Unsupported encryption flags (0x%02x)",
+			     policy->flags);
+		return false;
+	}
+
+	count += !!(policy->flags & FSCRYPT_POLICY_FLAG_DIRECT_KEY);
+	count += !!(policy->flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64);
+	count += !!(policy->flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32);
+	if (count > 1) {
+		fscrypt_warn(inode, "Mutually exclusive encryption flags (0x%02x)",
+			     policy->flags);
+		return false;
+	}
+
+	if ((policy->flags & FSCRYPT_POLICY_FLAG_DIRECT_KEY) &&
+	    !supported_direct_key_modes(inode, policy->contents_encryption_mode,
+					policy->filenames_encryption_mode))
+		return false;
+
+	if ((policy->flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64) &&
+	    !supported_iv_ino_lblk_policy(policy, inode, "IV_INO_LBLK_64",
+					  32, 32))
+		return false;
+
+	/*
+	 * IV_INO_LBLK_32 hashes the inode number, so in principle it can
+	 * support any ino_bits.  However, currently the inode number is gotten
+	 * from inode::i_ino which is 'unsigned long'.  So for now the
+	 * implementation limit is 32 bits.
+	 */
+	if ((policy->flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32) &&
+	    !supported_iv_ino_lblk_policy(policy, inode, "IV_INO_LBLK_32",
+					  32, 32))
+		return false;
+
+	if (memchr_inv(policy->__reserved, 0, sizeof(policy->__reserved))) {
+		fscrypt_warn(inode, "Reserved bits set in encryption policy");
+		return false;
+	}
+
+	return true;
+}
+
 /**
- * fscrypt_supported_policy - check whether an encryption policy is supported
+ * fscrypt_supported_policy() - check whether an encryption policy is supported
+ * @policy_u: the encryption policy
+ * @inode: the inode on which the policy will be used
  *
  * Given an encryption policy, check whether all its encryption modes and other
- * settings are supported by this kernel.  (But we don't currently don't check
- * for crypto API support here, so attempting to use an algorithm not configured
- * into the crypto API will still fail later.)
+ * settings are supported by this kernel on the given inode.  (But we don't
+ * currently don't check for crypto API support here, so attempting to use an
+ * algorithm not configured into the crypto API will still fail later.)
  *
  * Return: %true if supported, else %false
  */
@@ -43,71 +238,28 @@ bool fscrypt_supported_policy(const union fscrypt_policy *policy_u,
 			      const struct inode *inode)
 {
 	switch (policy_u->version) {
-	case FSCRYPT_POLICY_V1: {
-		const struct fscrypt_policy_v1 *policy = &policy_u->v1;
-
-		if (!fscrypt_valid_enc_modes(policy->contents_encryption_mode,
-					     policy->filenames_encryption_mode)) {
-			fscrypt_warn(inode,
-				     "Unsupported encryption modes (contents %d, filenames %d)",
-				     policy->contents_encryption_mode,
-				     policy->filenames_encryption_mode);
-			return false;
-		}
-
-		if (policy->flags & ~(FSCRYPT_POLICY_FLAGS_PAD_MASK |
-				      FSCRYPT_POLICY_FLAG_DIRECT_KEY)) {
-			fscrypt_warn(inode,
-				     "Unsupported encryption flags (0x%02x)",
-				     policy->flags);
-			return false;
-		}
-
-		return true;
-	}
-	case FSCRYPT_POLICY_V2: {
-		const struct fscrypt_policy_v2 *policy = &policy_u->v2;
-
-		if (!fscrypt_valid_enc_modes(policy->contents_encryption_mode,
-					     policy->filenames_encryption_mode)) {
-			fscrypt_warn(inode,
-				     "Unsupported encryption modes (contents %d, filenames %d)",
-				     policy->contents_encryption_mode,
-				     policy->filenames_encryption_mode);
-			return false;
-		}
-
-		if (policy->flags & ~(FSCRYPT_POLICY_FLAGS_PAD_MASK |
-				      FSCRYPT_POLICY_FLAG_DIRECT_KEY)) {
-			fscrypt_warn(inode,
-				     "Unsupported encryption flags (0x%02x)",
-				     policy->flags);
-			return false;
-		}
-
-		if (memchr_inv(policy->__reserved, 0,
-			       sizeof(policy->__reserved))) {
-			fscrypt_warn(inode,
-				     "Reserved bits set in encryption policy");
-			return false;
-		}
-
-		return true;
-	}
+	case FSCRYPT_POLICY_V1:
+		return fscrypt_supported_v1_policy(&policy_u->v1, inode);
+	case FSCRYPT_POLICY_V2:
+		return fscrypt_supported_v2_policy(&policy_u->v2, inode);
 	}
 	return false;
 }
 
 /**
- * fscrypt_new_context_from_policy - create a new fscrypt_context from a policy
+ * fscrypt_new_context() - create a new fscrypt_context
+ * @ctx_u: output context
+ * @policy_u: input policy
+ * @nonce: nonce to use
  *
  * Create an fscrypt_context for an inode that is being assigned the given
- * encryption policy.  A new nonce is randomly generated.
+ * encryption policy.  @nonce must be a new random nonce.
  *
  * Return: the size of the new context in bytes.
  */
-static int fscrypt_new_context_from_policy(union fscrypt_context *ctx_u,
-					   const union fscrypt_policy *policy_u)
+static int fscrypt_new_context(union fscrypt_context *ctx_u,
+			       const union fscrypt_policy *policy_u,
+			       const u8 nonce[FSCRYPT_FILE_NONCE_SIZE])
 {
 	memset(ctx_u, 0, sizeof(*ctx_u));
 
@@ -125,7 +277,7 @@ static int fscrypt_new_context_from_policy(union fscrypt_context *ctx_u,
 		memcpy(ctx->master_key_descriptor,
 		       policy->master_key_descriptor,
 		       sizeof(ctx->master_key_descriptor));
-		get_random_bytes(ctx->nonce, sizeof(ctx->nonce));
+		memcpy(ctx->nonce, nonce, FSCRYPT_FILE_NONCE_SIZE);
 		return sizeof(*ctx);
 	}
 	case FSCRYPT_POLICY_V2: {
@@ -141,7 +293,7 @@ static int fscrypt_new_context_from_policy(union fscrypt_context *ctx_u,
 		memcpy(ctx->master_key_identifier,
 		       policy->master_key_identifier,
 		       sizeof(ctx->master_key_identifier));
-		get_random_bytes(ctx->nonce, sizeof(ctx->nonce));
+		memcpy(ctx->nonce, nonce, FSCRYPT_FILE_NONCE_SIZE);
 		return sizeof(*ctx);
 	}
 	}
@@ -149,7 +301,11 @@ static int fscrypt_new_context_from_policy(union fscrypt_context *ctx_u,
 }
 
 /**
- * fscrypt_policy_from_context - convert an fscrypt_context to an fscrypt_policy
+ * fscrypt_policy_from_context() - convert an fscrypt_context to
+ *				   an fscrypt_policy
+ * @policy_u: output policy
+ * @ctx_u: input context
+ * @ctx_size: size of input context in bytes
  *
  * Given an fscrypt_context, build the corresponding fscrypt_policy.
  *
@@ -165,7 +321,7 @@ int fscrypt_policy_from_context(union fscrypt_policy *policy_u,
 {
 	memset(policy_u, 0, sizeof(*policy_u));
 
-	if (ctx_size <= 0 || ctx_size != fscrypt_context_size(ctx_u))
+	if (!fscrypt_context_is_valid(ctx_u, ctx_size))
 		return -EINVAL;
 
 	switch (ctx_u->version) {
@@ -213,7 +369,7 @@ static int fscrypt_get_policy(struct inode *inode, union fscrypt_policy *policy)
 	union fscrypt_context ctx;
 	int ret;
 
-	ci = READ_ONCE(inode->i_crypt_info);
+	ci = fscrypt_get_info(inode);
 	if (ci) {
 		/* key available, use the cached policy */
 		*policy = ci->ci_policy;
@@ -233,6 +389,7 @@ static int fscrypt_get_policy(struct inode *inode, union fscrypt_policy *policy)
 static int set_encryption_policy(struct inode *inode,
 				 const union fscrypt_policy *policy)
 {
+	u8 nonce[FSCRYPT_FILE_NONCE_SIZE];
 	union fscrypt_context ctx;
 	int ctxsize;
 	int err;
@@ -261,13 +418,17 @@ static int set_encryption_policy(struct inode *inode,
 					       policy->v2.master_key_identifier);
 		if (err)
 			return err;
+		if (policy->v2.flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32)
+			pr_warn_once("%s (pid %d) is setting an IV_INO_LBLK_32 encryption policy.  This should only be used if there are certain hardware limitations.\n",
+				     current->comm, current->pid);
 		break;
 	default:
 		WARN_ON(1);
 		return -EINVAL;
 	}
 
-	ctxsize = fscrypt_new_context_from_policy(&ctx, policy);
+	get_random_bytes(nonce, FSCRYPT_FILE_NONCE_SIZE);
+	ctxsize = fscrypt_new_context(&ctx, policy, nonce);
 
 	return inode->i_sb->s_cop->set_context(inode, &ctx, ctxsize, NULL);
 }
@@ -388,6 +549,25 @@ int fscrypt_ioctl_get_policy_ex(struct file *filp, void __user *uarg)
 }
 EXPORT_SYMBOL_GPL(fscrypt_ioctl_get_policy_ex);
 
+/* FS_IOC_GET_ENCRYPTION_NONCE: retrieve file's encryption nonce for testing */
+int fscrypt_ioctl_get_nonce(struct file *filp, void __user *arg)
+{
+	struct inode *inode = file_inode(filp);
+	union fscrypt_context ctx;
+	int ret;
+
+	ret = inode->i_sb->s_cop->get_context(inode, &ctx, sizeof(ctx));
+	if (ret < 0)
+		return ret;
+	if (!fscrypt_context_is_valid(&ctx, ret))
+		return -EINVAL;
+	if (copy_to_user(arg, fscrypt_context_nonce(&ctx),
+			 FSCRYPT_FILE_NONCE_SIZE))
+		return -EFAULT;
+	return 0;
+}
+EXPORT_SYMBOL_GPL(fscrypt_ioctl_get_nonce);
+
 /**
  * fscrypt_has_permitted_context() - is a file's encryption policy permitted
  *				     within its directory?
@@ -410,7 +590,7 @@ EXPORT_SYMBOL_GPL(fscrypt_ioctl_get_policy_ex);
 int fscrypt_has_permitted_context(struct inode *parent, struct inode *child)
 {
 	union fscrypt_policy parent_policy, child_policy;
-	int err;
+	int err, err1, err2;
 
 	/* No restrictions on file types which are never encrypted */
 	if (!S_ISREG(child->i_mode) && !S_ISDIR(child->i_mode) &&
@@ -440,56 +620,199 @@ int fscrypt_has_permitted_context(struct inode *parent, struct inode *child)
 	 * In any case, if an unexpected error occurs, fall back to "forbidden".
 	 */
 
-	err = fscrypt_get_encryption_info(parent);
+	err = fscrypt_get_encryption_info(parent, true);
 	if (err)
 		return 0;
-	err = fscrypt_get_encryption_info(child);
+	err = fscrypt_get_encryption_info(child, true);
 	if (err)
 		return 0;
 
-	err = fscrypt_get_policy(parent, &parent_policy);
-	if (err)
-		return 0;
+	err1 = fscrypt_get_policy(parent, &parent_policy);
+	err2 = fscrypt_get_policy(child, &child_policy);
 
-	err = fscrypt_get_policy(child, &child_policy);
-	if (err)
+	/*
+	 * Allow the case where the parent and child both have an unrecognized
+	 * encryption policy, so that files with an unrecognized encryption
+	 * policy can be deleted.
+	 */
+	if (err1 == -EINVAL && err2 == -EINVAL)
+		return 1;
+
+	if (err1 || err2)
 		return 0;
 
 	return fscrypt_policies_equal(&parent_policy, &child_policy);
 }
 EXPORT_SYMBOL(fscrypt_has_permitted_context);
 
+/*
+ * Return the encryption policy that new files in the directory will inherit, or
+ * NULL if none, or an ERR_PTR() on error.  If the directory is encrypted, also
+ * ensure that its key is set up, so that the new filename can be encrypted.
+ */
+const union fscrypt_policy *fscrypt_policy_to_inherit(struct inode *dir)
+{
+	int err;
+
+	if (IS_ENCRYPTED(dir)) {
+		err = fscrypt_require_key(dir);
+		if (err)
+			return ERR_PTR(err);
+		return &dir->i_crypt_info->ci_policy;
+	}
+
+	return fscrypt_get_dummy_policy(dir->i_sb);
+}
+
 /**
- * fscrypt_inherit_context() - Sets a child context from its parent
- * @parent: Parent inode from which the context is inherited.
- * @child:  Child inode that inherits the context from @parent.
- * @fs_data:  private data given by FS.
- * @preload:  preload child i_crypt_info if true
+ * fscrypt_set_context() - Set the fscrypt context of a new inode
+ * @inode: a new inode
+ * @fs_data: private data given by FS and passed to ->set_context()
+ *
+ * This should be called after fscrypt_prepare_new_inode(), generally during a
+ * filesystem transaction.  Everything here must be %GFP_NOFS-safe.
  *
  * Return: 0 on success, -errno on failure
  */
-int fscrypt_inherit_context(struct inode *parent, struct inode *child,
-						void *fs_data, bool preload)
+int fscrypt_set_context(struct inode *inode, void *fs_data)
 {
+	struct fscrypt_info *ci = inode->i_crypt_info;
 	union fscrypt_context ctx;
 	int ctxsize;
-	struct fscrypt_info *ci;
-	int res;
 
-	res = fscrypt_get_encryption_info(parent);
-	if (res < 0)
-		return res;
-
-	ci = READ_ONCE(parent->i_crypt_info);
-	if (ci == NULL)
+	/* fscrypt_prepare_new_inode() should have set up the key already. */
+	if (WARN_ON_ONCE(!ci))
 		return -ENOKEY;
 
-	ctxsize = fscrypt_new_context_from_policy(&ctx, &ci->ci_policy);
-
 	BUILD_BUG_ON(sizeof(ctx) != FSCRYPT_SET_CONTEXT_MAX_SIZE);
-	res = parent->i_sb->s_cop->set_context(child, &ctx, ctxsize, fs_data);
-	if (res)
-		return res;
-	return preload ? fscrypt_get_encryption_info(child): 0;
+	ctxsize = fscrypt_new_context(&ctx, &ci->ci_policy, ci->ci_nonce);
+
+	/*
+	 * This may be the first time the inode number is available, so do any
+	 * delayed key setup that requires the inode number.
+	 */
+	if (ci->ci_policy.version == FSCRYPT_POLICY_V2 &&
+	    (ci->ci_policy.v2.flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32)) {
+		const struct fscrypt_master_key *mk =
+			ci->ci_master_key->payload.data[0];
+
+		fscrypt_hash_inode_number(ci, mk);
+	}
+
+	return inode->i_sb->s_cop->set_context(inode, &ctx, ctxsize, fs_data);
 }
-EXPORT_SYMBOL(fscrypt_inherit_context);
+EXPORT_SYMBOL_GPL(fscrypt_set_context);
+
+/**
+ * fscrypt_set_test_dummy_encryption() - handle '-o test_dummy_encryption'
+ * @sb: the filesystem on which test_dummy_encryption is being specified
+ * @arg: the argument to the test_dummy_encryption option.  May be NULL.
+ * @dummy_policy: the filesystem's current dummy policy (input/output, see
+ *		  below)
+ *
+ * Handle the test_dummy_encryption mount option by creating a dummy encryption
+ * policy, saving it in @dummy_policy, and adding the corresponding dummy
+ * encryption key to the filesystem.  If the @dummy_policy is already set, then
+ * instead validate that it matches @arg.  Don't support changing it via
+ * remount, as that is difficult to do safely.
+ *
+ * Return: 0 on success (dummy policy set, or the same policy is already set);
+ *         -EEXIST if a different dummy policy is already set;
+ *         or another -errno value.
+ */
+int fscrypt_set_test_dummy_encryption(struct super_block *sb, const char *arg,
+				      struct fscrypt_dummy_policy *dummy_policy)
+{
+	struct fscrypt_key_specifier key_spec = { 0 };
+	int version;
+	union fscrypt_policy *policy = NULL;
+	int err;
+
+	if (!arg)
+		arg = "v2";
+
+	if (!strcmp(arg, "v1")) {
+		version = FSCRYPT_POLICY_V1;
+		key_spec.type = FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR;
+		memset(key_spec.u.descriptor, 0x42,
+		       FSCRYPT_KEY_DESCRIPTOR_SIZE);
+	} else if (!strcmp(arg, "v2")) {
+		version = FSCRYPT_POLICY_V2;
+		key_spec.type = FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER;
+		/* key_spec.u.identifier gets filled in when adding the key */
+	} else {
+		err = -EINVAL;
+		goto out;
+	}
+
+	policy = kzalloc(sizeof(*policy), GFP_KERNEL);
+	if (!policy) {
+		err = -ENOMEM;
+		goto out;
+	}
+
+	err = fscrypt_add_test_dummy_key(sb, &key_spec);
+	if (err)
+		goto out;
+
+	policy->version = version;
+	switch (policy->version) {
+	case FSCRYPT_POLICY_V1:
+		policy->v1.contents_encryption_mode = FSCRYPT_MODE_AES_256_XTS;
+		policy->v1.filenames_encryption_mode = FSCRYPT_MODE_AES_256_CTS;
+		memcpy(policy->v1.master_key_descriptor, key_spec.u.descriptor,
+		       FSCRYPT_KEY_DESCRIPTOR_SIZE);
+		break;
+	case FSCRYPT_POLICY_V2:
+		policy->v2.contents_encryption_mode = FSCRYPT_MODE_AES_256_XTS;
+		policy->v2.filenames_encryption_mode = FSCRYPT_MODE_AES_256_CTS;
+		memcpy(policy->v2.master_key_identifier, key_spec.u.identifier,
+		       FSCRYPT_KEY_IDENTIFIER_SIZE);
+		break;
+	default:
+		WARN_ON(1);
+		err = -EINVAL;
+		goto out;
+	}
+
+	if (dummy_policy->policy) {
+		if (fscrypt_policies_equal(policy, dummy_policy->policy))
+			err = 0;
+		else
+			err = -EEXIST;
+		goto out;
+	}
+	dummy_policy->policy = policy;
+	policy = NULL;
+	err = 0;
+out:
+	kfree(policy);
+	return err;
+}
+EXPORT_SYMBOL_GPL(fscrypt_set_test_dummy_encryption);
+
+/**
+ * fscrypt_show_test_dummy_encryption() - show '-o test_dummy_encryption'
+ * @seq: the seq_file to print the option to
+ * @sep: the separator character to use
+ * @sb: the filesystem whose options are being shown
+ *
+ * Show the test_dummy_encryption mount option, if it was specified.
+ * This is mainly used for /proc/mounts.
+ */
+void fscrypt_show_test_dummy_encryption(struct seq_file *seq, char sep,
+					struct super_block *sb)
+{
+	const union fscrypt_policy *policy = fscrypt_get_dummy_policy(sb);
+	int vers;
+
+	if (!policy)
+		return;
+
+	vers = policy->version;
+	if (vers == FSCRYPT_POLICY_V1) /* Handle numbering quirk */
+		vers = 1;
+
+	seq_printf(seq, "%ctest_dummy_encryption=v%d", sep, vers);
+}
+EXPORT_SYMBOL_GPL(fscrypt_show_test_dummy_encryption);
diff --git a/fs/direct-io.c b/fs/direct-io.c
index 9329ced..f55ff75 100644
--- a/fs/direct-io.c
+++ b/fs/direct-io.c
@@ -24,6 +24,7 @@
 #include <linux/module.h>
 #include <linux/types.h>
 #include <linux/fs.h>
+#include <linux/fscrypt.h>
 #include <linux/mm.h>
 #include <linux/slab.h>
 #include <linux/highmem.h>
@@ -430,6 +431,7 @@ dio_bio_alloc(struct dio *dio, struct dio_submit *sdio,
 	      sector_t first_sector, int nr_vecs)
 {
 	struct bio *bio;
+	struct inode *inode = dio->inode;
 
 	/*
 	 * bio_alloc() is guaranteed to return a bio when allowed to sleep and
@@ -437,6 +439,9 @@ dio_bio_alloc(struct dio *dio, struct dio_submit *sdio,
 	 */
 	bio = bio_alloc(GFP_KERNEL, nr_vecs);
 
+	fscrypt_set_bio_crypt_ctx(bio, inode,
+				  sdio->cur_page_fs_offset >> inode->i_blkbits,
+				  GFP_KERNEL);
 	bio_set_dev(bio, bdev);
 	bio->bi_iter.bi_sector = first_sector;
 	bio_set_op_attrs(bio, dio->op, dio->op_flags);
@@ -801,9 +806,17 @@ static inline int dio_send_cur_page(struct dio *dio, struct dio_submit *sdio,
 		 * current logical offset in the file does not equal what would
 		 * be the next logical offset in the bio, submit the bio we
 		 * have.
+		 *
+		 * When fscrypt inline encryption is used, data unit number
+		 * (DUN) contiguity is also required.  Normally that's implied
+		 * by logical contiguity.  However, certain IV generation
+		 * methods (e.g. IV_INO_LBLK_32) don't guarantee it.  So, we
+		 * must explicitly check fscrypt_mergeable_bio() too.
 		 */
 		if (sdio->final_block_in_bio != sdio->cur_page_block ||
-		    cur_offset != bio_next_offset)
+		    cur_offset != bio_next_offset ||
+		    !fscrypt_mergeable_bio(sdio->bio, dio->inode,
+					   cur_offset >> dio->inode->i_blkbits))
 			dio_bio_submit(dio, sdio);
 	}
 
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
index e23752d..12616d5 100644
--- a/fs/ecryptfs/inode.c
+++ b/fs/ecryptfs/inode.c
@@ -1040,7 +1040,8 @@ ecryptfs_getxattr_lower(struct dentry *lower_dentry, struct inode *lower_inode,
 		goto out;
 	}
 	inode_lock(lower_inode);
-	rc = __vfs_getxattr(lower_dentry, lower_inode, name, value, size);
+	rc = __vfs_getxattr(lower_dentry, lower_inode, name, value, size,
+			    XATTR_NOSECURITY);
 	inode_unlock(lower_inode);
 out:
 	return rc;
@@ -1125,7 +1126,8 @@ const struct inode_operations ecryptfs_main_iops = {
 
 static int ecryptfs_xattr_get(const struct xattr_handler *handler,
 			      struct dentry *dentry, struct inode *inode,
-			      const char *name, void *buffer, size_t size)
+			      const char *name, void *buffer, size_t size,
+			      int flags)
 {
 	return ecryptfs_getxattr(dentry, inode, name, buffer, size);
 }
diff --git a/fs/ecryptfs/mmap.c b/fs/ecryptfs/mmap.c
index cffa0c1..2362be3 100644
--- a/fs/ecryptfs/mmap.c
+++ b/fs/ecryptfs/mmap.c
@@ -422,7 +422,7 @@ static int ecryptfs_write_inode_size_to_xattr(struct inode *ecryptfs_inode)
 	}
 	inode_lock(lower_inode);
 	size = __vfs_getxattr(lower_dentry, lower_inode, ECRYPTFS_XATTR_NAME,
-			      xattr_virt, PAGE_SIZE);
+			      xattr_virt, PAGE_SIZE, XATTR_NOSECURITY);
 	if (size < 0)
 		size = 8;
 	put_unaligned_be64(i_size_read(ecryptfs_inode), xattr_virt);
diff --git a/fs/erofs/xattr.c b/fs/erofs/xattr.c
index 503bea2..ee94c6a 100644
--- a/fs/erofs/xattr.c
+++ b/fs/erofs/xattr.c
@@ -463,7 +463,8 @@ int erofs_getxattr(struct inode *inode, int index,
 
 static int erofs_xattr_generic_get(const struct xattr_handler *handler,
 				   struct dentry *unused, struct inode *inode,
-				   const char *name, void *buffer, size_t size)
+				   const char *name, void *buffer, size_t size,
+				   int flags)
 {
 	struct erofs_sb_info *const sbi = EROFS_I_SB(inode);
 
diff --git a/fs/eventpoll.c b/fs/eventpoll.c
index 339453a..2ffc294 100644
--- a/fs/eventpoll.c
+++ b/fs/eventpoll.c
@@ -29,6 +29,7 @@
 #include <linux/mutex.h>
 #include <linux/anon_inodes.h>
 #include <linux/device.h>
+#include <linux/freezer.h>
 #include <linux/uaccess.h>
 #include <asm/io.h>
 #include <asm/mman.h>
@@ -1911,7 +1912,8 @@ static int ep_poll(struct eventpoll *ep, struct epoll_event __user *events,
 			break;
 		}
 
-		if (!schedule_hrtimeout_range(to, slack, HRTIMER_MODE_ABS)) {
+		if (!freezable_schedule_hrtimeout_range(to, slack,
+						        HRTIMER_MODE_ABS)) {
 			timed_out = 1;
 			break;
 		}
diff --git a/fs/ext2/xattr_security.c b/fs/ext2/xattr_security.c
index 9a682e4..d5f6eb0 100644
--- a/fs/ext2/xattr_security.c
+++ b/fs/ext2/xattr_security.c
@@ -11,7 +11,7 @@
 static int
 ext2_xattr_security_get(const struct xattr_handler *handler,
 			struct dentry *unused, struct inode *inode,
-			const char *name, void *buffer, size_t size)
+			const char *name, void *buffer, size_t size, int flags)
 {
 	return ext2_xattr_get(inode, EXT2_XATTR_INDEX_SECURITY, name,
 			      buffer, size);
diff --git a/fs/ext2/xattr_trusted.c b/fs/ext2/xattr_trusted.c
index 49add11..8d31366 100644
--- a/fs/ext2/xattr_trusted.c
+++ b/fs/ext2/xattr_trusted.c
@@ -18,7 +18,7 @@ ext2_xattr_trusted_list(struct dentry *dentry)
 static int
 ext2_xattr_trusted_get(const struct xattr_handler *handler,
 		       struct dentry *unused, struct inode *inode,
-		       const char *name, void *buffer, size_t size)
+		       const char *name, void *buffer, size_t size, int flags)
 {
 	return ext2_xattr_get(inode, EXT2_XATTR_INDEX_TRUSTED, name,
 			      buffer, size);
diff --git a/fs/ext2/xattr_user.c b/fs/ext2/xattr_user.c
index c243a3b..712b7c9 100644
--- a/fs/ext2/xattr_user.c
+++ b/fs/ext2/xattr_user.c
@@ -20,7 +20,7 @@ ext2_xattr_user_list(struct dentry *dentry)
 static int
 ext2_xattr_user_get(const struct xattr_handler *handler,
 		    struct dentry *unused, struct inode *inode,
-		    const char *name, void *buffer, size_t size)
+		    const char *name, void *buffer, size_t size, int flags)
 {
 	if (!test_opt(inode->i_sb, XATTR_USER))
 		return -EOPNOTSUPP;
diff --git a/fs/ext4/Kconfig b/fs/ext4/Kconfig
index cbb5ca8..2de970c 100644
--- a/fs/ext4/Kconfig
+++ b/fs/ext4/Kconfig
@@ -39,6 +39,7 @@
 	select CRYPTO
 	select CRYPTO_CRC32C
 	select FS_IOMAP
+	select FS_ENCRYPTION_ALGS if FS_ENCRYPTION
 	help
 	  This is the next generation of the ext3 filesystem.
 
@@ -106,3 +107,20 @@
 	  If you select Y here, then you will be able to turn on debugging
 	  with a command such as:
 		echo 1 > /sys/module/ext4/parameters/mballoc_debug
+
+config EXT4_KUNIT_TESTS
+	tristate "KUnit tests for ext4"
+	select EXT4_FS
+	depends on KUNIT
+	help
+	  This builds the ext4 KUnit tests.
+
+	  KUnit tests run during boot and output the results to the debug log
+	  in TAP format (http://testanything.org/). Only useful for kernel devs
+	  running KUnit test harness and are not for inclusion into a production
+	  build.
+
+	  For more information on KUnit and unit tests in general please refer
+	  to the KUnit documentation in Documentation/dev-tools/kunit/.
+
+	  If unsure, say N.
diff --git a/fs/ext4/Makefile b/fs/ext4/Makefile
index b17ddc2..4ccb3c9 100644
--- a/fs/ext4/Makefile
+++ b/fs/ext4/Makefile
@@ -13,4 +13,6 @@
 
 ext4-$(CONFIG_EXT4_FS_POSIX_ACL)	+= acl.o
 ext4-$(CONFIG_EXT4_FS_SECURITY)		+= xattr_security.o
+ext4-inode-test-objs			+= inode-test.o
+obj-$(CONFIG_EXT4_KUNIT_TESTS)		+= ext4-inode-test.o
 ext4-$(CONFIG_FS_VERITY)		+= verity.o
diff --git a/fs/ext4/dir.c b/fs/ext4/dir.c
index 0589e91..da7ea58 100644
--- a/fs/ext4/dir.c
+++ b/fs/ext4/dir.c
@@ -30,6 +30,8 @@
 #include "ext4.h"
 #include "xattr.h"
 
+#define DOTDOT_OFFSET 12
+
 static int ext4_dx_readdir(struct file *, struct dir_context *);
 
 /**
@@ -55,6 +57,19 @@ static int is_dx_dir(struct inode *inode)
 	return 0;
 }
 
+static bool is_fake_entry(struct inode *dir, ext4_lblk_t lblk,
+			  unsigned int offset, unsigned int blocksize)
+{
+	/* Entries in the first block before this value refer to . or .. */
+	if (lblk == 0 && offset <= DOTDOT_OFFSET)
+		return true;
+	/* Check if this is likely the csum entry */
+	if (ext4_has_metadata_csum(dir->i_sb) && offset % blocksize ==
+				blocksize - sizeof(struct ext4_dir_entry_tail))
+		return true;
+	return false;
+}
+
 /*
  * Return 0 if the directory entry is OK, and 1 if there is a problem
  *
@@ -67,25 +82,30 @@ int __ext4_check_dir_entry(const char *function, unsigned int line,
 			   struct inode *dir, struct file *filp,
 			   struct ext4_dir_entry_2 *de,
 			   struct buffer_head *bh, char *buf, int size,
+			   ext4_lblk_t lblk,
 			   unsigned int offset)
 {
 	const char *error_msg = NULL;
 	const int rlen = ext4_rec_len_from_disk(de->rec_len,
 						dir->i_sb->s_blocksize);
+	const int next_offset = ((char *) de - buf) + rlen;
+	unsigned int blocksize = dir->i_sb->s_blocksize;
+	bool fake = is_fake_entry(dir, lblk, offset, blocksize);
+	bool next_fake = is_fake_entry(dir, lblk, next_offset, blocksize);
 
-	if (unlikely(rlen < EXT4_DIR_REC_LEN(1)))
+	if (unlikely(rlen < ext4_dir_rec_len(1, fake ? NULL : dir)))
 		error_msg = "rec_len is smaller than minimal";
 	else if (unlikely(rlen % 4 != 0))
 		error_msg = "rec_len % 4 != 0";
-	else if (unlikely(rlen < EXT4_DIR_REC_LEN(de->name_len)))
+	else if (unlikely(rlen < ext4_dir_rec_len(de->name_len,
+							fake ? NULL : dir)))
 		error_msg = "rec_len is too small for name_len";
 	else if (unlikely(((char *) de - buf) + rlen > size))
 		error_msg = "directory entry overrun";
-	else if (unlikely(((char *) de - buf) + rlen >
-			  size - EXT4_DIR_REC_LEN(1) &&
-			  ((char *) de - buf) + rlen != size)) {
+	else if (unlikely(next_offset > size - ext4_dir_rec_len(1,
+						next_fake ? NULL : dir) &&
+			  next_offset != size))
 		error_msg = "directory entry too close to block end";
-	}
 	else if (unlikely(le32_to_cpu(de->inode) >
 			le32_to_cpu(EXT4_SB(dir->i_sb)->s_es->s_inodes_count)))
 		error_msg = "inode out of bounds";
@@ -95,15 +115,15 @@ int __ext4_check_dir_entry(const char *function, unsigned int line,
 	if (filp)
 		ext4_error_file(filp, function, line, bh->b_blocknr,
 				"bad entry in directory: %s - offset=%u, "
-				"inode=%u, rec_len=%d, name_len=%d, size=%d",
+				"inode=%u, rec_len=%d, lblk=%d, size=%d fake=%d",
 				error_msg, offset, le32_to_cpu(de->inode),
-				rlen, de->name_len, size);
+				rlen, lblk, size, fake);
 	else
 		ext4_error_inode(dir, function, line, bh->b_blocknr,
 				"bad entry in directory: %s - offset=%u, "
-				"inode=%u, rec_len=%d, name_len=%d, size=%d",
+				"inode=%u, rec_len=%d, lblk=%d, size=%d fake=%d",
 				 error_msg, offset, le32_to_cpu(de->inode),
-				 rlen, de->name_len, size);
+				 rlen, lblk, size, fake);
 
 	return 1;
 }
@@ -119,11 +139,9 @@ static int ext4_readdir(struct file *file, struct dir_context *ctx)
 	struct buffer_head *bh = NULL;
 	struct fscrypt_str fstr = FSTR_INIT(NULL, 0);
 
-	if (IS_ENCRYPTED(inode)) {
-		err = fscrypt_get_encryption_info(inode);
-		if (err && err != -ENOKEY)
-			return err;
-	}
+	err = fscrypt_prepare_readdir(inode);
+	if (err)
+		return err;
 
 	if (is_dx_dir(inode)) {
 		err = ext4_dx_readdir(file, ctx);
@@ -149,7 +167,7 @@ static int ext4_readdir(struct file *file, struct dir_context *ctx)
 	}
 
 	if (IS_ENCRYPTED(inode)) {
-		err = fscrypt_fname_alloc_buffer(inode, EXT4_NAME_LEN, &fstr);
+		err = fscrypt_fname_alloc_buffer(EXT4_NAME_LEN, &fstr);
 		if (err < 0)
 			return err;
 	}
@@ -227,7 +245,8 @@ static int ext4_readdir(struct file *file, struct dir_context *ctx)
 				 * failure will be detected in the
 				 * dirent test below. */
 				if (ext4_rec_len_from_disk(de->rec_len,
-					sb->s_blocksize) < EXT4_DIR_REC_LEN(1))
+					sb->s_blocksize) < ext4_dir_rec_len(1,
+									inode))
 					break;
 				i += ext4_rec_len_from_disk(de->rec_len,
 							    sb->s_blocksize);
@@ -243,7 +262,7 @@ static int ext4_readdir(struct file *file, struct dir_context *ctx)
 			de = (struct ext4_dir_entry_2 *) (bh->b_data + offset);
 			if (ext4_check_dir_entry(inode, file, de, bh,
 						 bh->b_data, bh->b_size,
-						 offset)) {
+						 map.m_lblk, offset)) {
 				/*
 				 * On error, skip to the next block
 				 */
@@ -268,7 +287,9 @@ static int ext4_readdir(struct file *file, struct dir_context *ctx)
 
 					/* Directory is encrypted */
 					err = fscrypt_fname_disk_to_usr(inode,
-						0, 0, &de_name, &fstr);
+						EXT4_DIRENT_HASH(de),
+						EXT4_DIRENT_MINOR_HASH(de),
+						&de_name, &fstr);
 					de_name = fstr;
 					fstr.len = save_len;
 					if (err)
@@ -618,13 +639,6 @@ static int ext4_dx_readdir(struct file *file, struct dir_context *ctx)
 	return 0;
 }
 
-static int ext4_dir_open(struct inode * inode, struct file * filp)
-{
-	if (IS_ENCRYPTED(inode))
-		return fscrypt_get_encryption_info(inode) ? -EACCES : 0;
-	return 0;
-}
-
 static int ext4_release_dir(struct inode *inode, struct file *filp)
 {
 	if (filp->private_data)
@@ -645,7 +659,7 @@ int ext4_check_all_de(struct inode *dir, struct buffer_head *bh, void *buf,
 	top = buf + buf_size;
 	while ((char *) de < top) {
 		if (ext4_check_dir_entry(dir, NULL, de, bh,
-					 buf, buf_size, offset))
+					 buf, buf_size, 0, offset))
 			return -EFSCORRUPTED;
 		rlen = ext4_rec_len_from_disk(de->rec_len, buf_size);
 		de = (struct ext4_dir_entry_2 *)((char *)de + rlen);
@@ -666,73 +680,5 @@ const struct file_operations ext4_dir_operations = {
 	.compat_ioctl	= ext4_compat_ioctl,
 #endif
 	.fsync		= ext4_sync_file,
-	.open		= ext4_dir_open,
 	.release	= ext4_release_dir,
 };
-
-#ifdef CONFIG_UNICODE
-static int ext4_d_compare(const struct dentry *dentry, unsigned int len,
-			  const char *str, const struct qstr *name)
-{
-	struct qstr qstr = {.name = str, .len = len };
-	const struct dentry *parent = READ_ONCE(dentry->d_parent);
-	const struct inode *inode = READ_ONCE(parent->d_inode);
-	char strbuf[DNAME_INLINE_LEN];
-
-	if (!inode || !IS_CASEFOLDED(inode) ||
-	    !EXT4_SB(inode->i_sb)->s_encoding) {
-		if (len != name->len)
-			return -1;
-		return memcmp(str, name->name, len);
-	}
-
-	/*
-	 * If the dentry name is stored in-line, then it may be concurrently
-	 * modified by a rename.  If this happens, the VFS will eventually retry
-	 * the lookup, so it doesn't matter what ->d_compare() returns.
-	 * However, it's unsafe to call utf8_strncasecmp() with an unstable
-	 * string.  Therefore, we have to copy the name into a temporary buffer.
-	 */
-	if (len <= DNAME_INLINE_LEN - 1) {
-		memcpy(strbuf, str, len);
-		strbuf[len] = 0;
-		qstr.name = strbuf;
-		/* prevent compiler from optimizing out the temporary buffer */
-		barrier();
-	}
-
-	return ext4_ci_compare(inode, name, &qstr, false);
-}
-
-static int ext4_d_hash(const struct dentry *dentry, struct qstr *str)
-{
-	const struct ext4_sb_info *sbi = EXT4_SB(dentry->d_sb);
-	const struct unicode_map *um = sbi->s_encoding;
-	const struct inode *inode = READ_ONCE(dentry->d_inode);
-	unsigned char *norm;
-	int len, ret = 0;
-
-	if (!inode || !IS_CASEFOLDED(inode) || !um)
-		return 0;
-
-	norm = kmalloc(PATH_MAX, GFP_ATOMIC);
-	if (!norm)
-		return -ENOMEM;
-
-	len = utf8_casefold(um, str, norm, PATH_MAX);
-	if (len < 0) {
-		if (ext4_has_strict_mode(sbi))
-			ret = -EINVAL;
-		goto out;
-	}
-	str->hash = full_name_hash(dentry, norm, len);
-out:
-	kfree(norm);
-	return ret;
-}
-
-const struct dentry_operations ext4_dentry_ops = {
-	.d_hash = ext4_d_hash,
-	.d_compare = ext4_d_compare,
-};
-#endif
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index 1c558b5..fca2f30 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -1354,11 +1354,9 @@ struct ext4_super_block {
  */
 #define EXT4_MF_MNTDIR_SAMPLED		0x0001
 #define EXT4_MF_FS_ABORTED		0x0002	/* Fatal error detected */
-#define EXT4_MF_TEST_DUMMY_ENCRYPTION	0x0004
 
 #ifdef CONFIG_FS_ENCRYPTION
-#define DUMMY_ENCRYPTION_ENABLED(sbi) (unlikely((sbi)->s_mount_flags & \
-						EXT4_MF_TEST_DUMMY_ENCRYPTION))
+#define DUMMY_ENCRYPTION_ENABLED(sbi) ((sbi)->s_dummy_enc_policy.policy != NULL)
 #else
 #define DUMMY_ENCRYPTION_ENABLED(sbi) (0)
 #endif
@@ -1369,14 +1367,6 @@ struct ext4_super_block {
 #define EXT4_ENC_UTF8_12_1	1
 
 /*
- * Flags for ext4_sb_info.s_encoding_flags.
- */
-#define EXT4_ENC_STRICT_MODE_FL	(1 << 0)
-
-#define ext4_has_strict_mode(sbi) \
-	(sbi->s_encoding_flags & EXT4_ENC_STRICT_MODE_FL)
-
-/*
  * fourth extended-fs super-block data in memory
  */
 struct ext4_sb_info {
@@ -1425,10 +1415,6 @@ struct ext4_sb_info {
 	struct kobject s_kobj;
 	struct completion s_kobj_unregister;
 	struct super_block *s_sb;
-#ifdef CONFIG_UNICODE
-	struct unicode_map *s_encoding;
-	__u16 s_encoding_flags;
-#endif
 
 	/* Journaling */
 	struct journal_s *s_journal;
@@ -1548,6 +1534,9 @@ struct ext4_sb_info {
 	struct ratelimit_state s_warning_ratelimit_state;
 	struct ratelimit_state s_msg_ratelimit_state;
 
+	/* Encryption policy for '-o test_dummy_encryption' */
+	struct fscrypt_dummy_policy s_dummy_enc_policy;
+
 	/*
 	 * Barrier between writepages ops and changing any inode's JOURNAL_DATA
 	 * or EXTENTS flag.
@@ -1698,6 +1687,7 @@ static inline bool ext4_verity_in_progress(struct inode *inode)
 #define EXT4_FEATURE_COMPAT_RESIZE_INODE	0x0010
 #define EXT4_FEATURE_COMPAT_DIR_INDEX		0x0020
 #define EXT4_FEATURE_COMPAT_SPARSE_SUPER2	0x0200
+#define EXT4_FEATURE_COMPAT_STABLE_INODES	0x0800
 
 #define EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER	0x0001
 #define EXT4_FEATURE_RO_COMPAT_LARGE_FILE	0x0002
@@ -1799,6 +1789,7 @@ EXT4_FEATURE_COMPAT_FUNCS(xattr,		EXT_ATTR)
 EXT4_FEATURE_COMPAT_FUNCS(resize_inode,		RESIZE_INODE)
 EXT4_FEATURE_COMPAT_FUNCS(dir_index,		DIR_INDEX)
 EXT4_FEATURE_COMPAT_FUNCS(sparse_super2,	SPARSE_SUPER2)
+EXT4_FEATURE_COMPAT_FUNCS(stable_inodes,	STABLE_INODES)
 
 EXT4_FEATURE_RO_COMPAT_FUNCS(sparse_super,	SPARSE_SUPER)
 EXT4_FEATURE_RO_COMPAT_FUNCS(large_file,	LARGE_FILE)
@@ -1973,6 +1964,17 @@ struct ext4_dir_entry {
 	char	name[EXT4_NAME_LEN];	/* File name */
 };
 
+
+/*
+ * Encrypted Casefolded entries require saving the hash on disk. This structure
+ * followed ext4_dir_entry_2's name[name_len] at the next 4 byte aligned
+ * boundary.
+ */
+struct ext4_dir_entry_hash {
+	__le32 hash;
+	__le32 minor_hash;
+};
+
 /*
  * The new version of the directory entry.  Since EXT4 structures are
  * stored in intel byte order, and the name_len field could never be
@@ -1988,6 +1990,22 @@ struct ext4_dir_entry_2 {
 };
 
 /*
+ * Access the hashes at the end of ext4_dir_entry_2
+ */
+#define EXT4_DIRENT_HASHES(entry) \
+	((struct ext4_dir_entry_hash *) \
+		(((void *)(entry)) + \
+		((8 + (entry)->name_len + EXT4_DIR_ROUND) & ~EXT4_DIR_ROUND)))
+#define EXT4_DIRENT_HASH(entry) le32_to_cpu(EXT4_DIRENT_HASHES(de)->hash)
+#define EXT4_DIRENT_MINOR_HASH(entry) \
+		le32_to_cpu(EXT4_DIRENT_HASHES(de)->minor_hash)
+
+static inline bool ext4_hash_in_dirent(const struct inode *inode)
+{
+	return IS_CASEFOLDED(inode) && IS_ENCRYPTED(inode);
+}
+
+/*
  * This is a bogus directory entry at the end of each leaf block that
  * records checksums.
  */
@@ -2028,11 +2046,25 @@ struct ext4_dir_entry_tail {
  */
 #define EXT4_DIR_PAD			4
 #define EXT4_DIR_ROUND			(EXT4_DIR_PAD - 1)
-#define EXT4_DIR_REC_LEN(name_len)	(((name_len) + 8 + EXT4_DIR_ROUND) & \
-					 ~EXT4_DIR_ROUND)
 #define EXT4_MAX_REC_LEN		((1<<16)-1)
 
 /*
+ * The rec_len is dependent on the type of directory. Directories that are
+ * casefolded and encrypted need to store the hash as well, so we add room for
+ * ext4_extended_dir_entry_2. For all entries related to '.' or '..' you should
+ * pass NULL for dir, as those entries do not use the extra fields.
+ */
+static inline unsigned int ext4_dir_rec_len(__u8 name_len,
+						const struct inode *dir)
+{
+	int rec_len = (name_len + 8 + EXT4_DIR_ROUND);
+
+	if (dir && ext4_hash_in_dirent(dir))
+		rec_len += sizeof(struct ext4_dir_entry_hash);
+	return (rec_len & ~EXT4_DIR_ROUND);
+}
+
+/*
  * If we ever get support for fs block sizes > page_size, we'll need
  * to remove the #if statements in the next two functions...
  */
@@ -2088,6 +2120,7 @@ static inline __le16 ext4_rec_len_to_disk(unsigned len, unsigned blocksize)
 #define DX_HASH_LEGACY_UNSIGNED		3
 #define DX_HASH_HALF_MD4_UNSIGNED	4
 #define DX_HASH_TEA_UNSIGNED		5
+#define DX_HASH_SIPHASH			6
 
 static inline u32 ext4_chksum(struct ext4_sb_info *sbi, u32 crc,
 			      const void *address, unsigned int length)
@@ -2142,6 +2175,7 @@ struct ext4_filename {
 };
 
 #define fname_name(p) ((p)->disk_name.name)
+#define fname_usr_name(p) ((p)->usr_fname->name)
 #define fname_len(p)  ((p)->disk_name.len)
 
 /*
@@ -2365,9 +2399,9 @@ extern unsigned ext4_free_clusters_after_init(struct super_block *sb,
 ext4_fsblk_t ext4_inode_to_goal_block(struct inode *);
 
 #ifdef CONFIG_UNICODE
-extern void ext4_fname_setup_ci_filename(struct inode *dir,
+extern int ext4_fname_setup_ci_filename(struct inode *dir,
 					 const struct qstr *iname,
-					 struct fscrypt_str *fname);
+					 struct ext4_filename *fname);
 #endif
 
 #ifdef CONFIG_FS_ENCRYPTION
@@ -2398,9 +2432,9 @@ static inline int ext4_fname_setup_filename(struct inode *dir,
 	ext4_fname_from_fscrypt_name(fname, &name);
 
 #ifdef CONFIG_UNICODE
-	ext4_fname_setup_ci_filename(dir, iname, &fname->cf_name);
+	err = ext4_fname_setup_ci_filename(dir, iname, fname);
 #endif
-	return 0;
+	return err;
 }
 
 static inline int ext4_fname_prepare_lookup(struct inode *dir,
@@ -2417,9 +2451,9 @@ static inline int ext4_fname_prepare_lookup(struct inode *dir,
 	ext4_fname_from_fscrypt_name(fname, &name);
 
 #ifdef CONFIG_UNICODE
-	ext4_fname_setup_ci_filename(dir, &dentry->d_name, &fname->cf_name);
+	err = ext4_fname_setup_ci_filename(dir, &dentry->d_name, fname);
 #endif
-	return 0;
+	return err;
 }
 
 static inline void ext4_fname_free_filename(struct ext4_filename *fname)
@@ -2444,15 +2478,16 @@ static inline int ext4_fname_setup_filename(struct inode *dir,
 					    int lookup,
 					    struct ext4_filename *fname)
 {
+	int err = 0;
 	fname->usr_fname = iname;
 	fname->disk_name.name = (unsigned char *) iname->name;
 	fname->disk_name.len = iname->len;
 
 #ifdef CONFIG_UNICODE
-	ext4_fname_setup_ci_filename(dir, iname, &fname->cf_name);
+	err = ext4_fname_setup_ci_filename(dir, iname, fname);
 #endif
 
-	return 0;
+	return err;
 }
 
 static inline int ext4_fname_prepare_lookup(struct inode *dir,
@@ -2476,21 +2511,22 @@ extern int __ext4_check_dir_entry(const char *, unsigned int, struct inode *,
 				  struct file *,
 				  struct ext4_dir_entry_2 *,
 				  struct buffer_head *, char *, int,
-				  unsigned int);
-#define ext4_check_dir_entry(dir, filp, de, bh, buf, size, offset)	\
+				  ext4_lblk_t, unsigned int);
+#define ext4_check_dir_entry(dir, filp, de, bh, buf, size, lblk, offset) \
 	unlikely(__ext4_check_dir_entry(__func__, __LINE__, (dir), (filp), \
-					(de), (bh), (buf), (size), (offset)))
+				(de), (bh), (buf), (size), (lblk), (offset)))
 extern int ext4_htree_store_dirent(struct file *dir_file, __u32 hash,
 				__u32 minor_hash,
 				struct ext4_dir_entry_2 *dirent,
 				struct fscrypt_str *ent_name);
 extern void ext4_htree_free_dir_info(struct dir_private_info *p);
 extern int ext4_find_dest_de(struct inode *dir, struct inode *inode,
+			     ext4_lblk_t lblk,
 			     struct buffer_head *bh,
 			     void *buf, int buf_size,
 			     struct ext4_filename *fname,
 			     struct ext4_dir_entry_2 **dest_de);
-void ext4_insert_dentry(struct inode *inode,
+void ext4_insert_dentry(struct inode *dir, struct inode *inode,
 			struct ext4_dir_entry_2 *de,
 			int buf_size,
 			struct ext4_filename *fname);
@@ -2675,11 +2711,12 @@ extern int ext4_search_dir(struct buffer_head *bh,
 			   int buf_size,
 			   struct inode *dir,
 			   struct ext4_filename *fname,
-			   unsigned int offset,
+			   ext4_lblk_t lblk, unsigned int offset,
 			   struct ext4_dir_entry_2 **res_dir);
 extern int ext4_generic_delete_entry(handle_t *handle,
 				     struct inode *dir,
 				     struct ext4_dir_entry_2 *de_del,
+				     ext4_lblk_t lblk,
 				     struct buffer_head *bh,
 				     void *entry_buf,
 				     int buf_size,
@@ -3119,10 +3156,6 @@ static inline void ext4_unlock_group(struct super_block *sb,
 /* dir.c */
 extern const struct file_operations ext4_dir_operations;
 
-#ifdef CONFIG_UNICODE
-extern const struct dentry_operations ext4_dentry_ops;
-#endif
-
 /* file.c */
 extern const struct inode_operations ext4_file_inode_operations;
 extern const struct file_operations ext4_file_operations;
@@ -3214,9 +3247,6 @@ extern void ext4_initialize_dirent_tail(struct buffer_head *bh,
 					unsigned int blocksize);
 extern int ext4_handle_dirty_dirblock(handle_t *handle, struct inode *inode,
 				      struct buffer_head *bh);
-extern int ext4_ci_compare(const struct inode *parent,
-			   const struct qstr *fname,
-			   const struct qstr *entry, bool quick);
 
 #define S_SHIFT 12
 static const unsigned char ext4_type_by_mode[(S_IFMT >> S_SHIFT) + 1] = {
diff --git a/fs/ext4/hash.c b/fs/ext4/hash.c
index 3e13379..b929901 100644
--- a/fs/ext4/hash.c
+++ b/fs/ext4/hash.c
@@ -197,7 +197,7 @@ static void str2hashbuf_unsigned(const char *msg, int len, __u32 *buf, int num)
  * represented, and whether or not the returned hash is 32 bits or 64
  * bits.  32 bit hashes will return 0 for the minor hash.
  */
-static int __ext4fs_dirhash(const char *name, int len,
+static int __ext4fs_dirhash(const struct inode *dir, const char *name, int len,
 			    struct dx_hash_info *hinfo)
 {
 	__u32	hash;
@@ -259,6 +259,22 @@ static int __ext4fs_dirhash(const char *name, int len,
 		hash = buf[0];
 		minor_hash = buf[1];
 		break;
+	case DX_HASH_SIPHASH:
+	{
+		struct qstr qname = QSTR_INIT(name, len);
+		__u64	combined_hash;
+
+		if (fscrypt_has_encryption_key(dir)) {
+			combined_hash = fscrypt_fname_siphash(dir, &qname);
+		} else {
+			ext4_warning_inode(dir, "Siphash requires key");
+			return -1;
+		}
+
+		hash = (__u32)(combined_hash >> 32);
+		minor_hash = (__u32)combined_hash;
+		break;
+	}
 	default:
 		hinfo->hash = 0;
 		return -1;
@@ -275,12 +291,13 @@ int ext4fs_dirhash(const struct inode *dir, const char *name, int len,
 		   struct dx_hash_info *hinfo)
 {
 #ifdef CONFIG_UNICODE
-	const struct unicode_map *um = EXT4_SB(dir->i_sb)->s_encoding;
+	const struct unicode_map *um = dir->i_sb->s_encoding;
 	int r, dlen;
 	unsigned char *buff;
 	struct qstr qstr = {.name = name, .len = len };
 
-	if (len && IS_CASEFOLDED(dir) && um) {
+	if (len && IS_CASEFOLDED(dir) && um &&
+	    (!IS_ENCRYPTED(dir) || fscrypt_has_encryption_key(dir))) {
 		buff = kzalloc(sizeof(char) * PATH_MAX, GFP_KERNEL);
 		if (!buff)
 			return -ENOMEM;
@@ -291,12 +308,12 @@ int ext4fs_dirhash(const struct inode *dir, const char *name, int len,
 			goto opaque_seq;
 		}
 
-		r = __ext4fs_dirhash(buff, dlen, hinfo);
+		r = __ext4fs_dirhash(dir, buff, dlen, hinfo);
 
 		kfree(buff);
 		return r;
 	}
 opaque_seq:
 #endif
-	return __ext4fs_dirhash(name, len, hinfo);
+	return __ext4fs_dirhash(dir, name, len, hinfo);
 }
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c
index 64b6549..e9804eb 100644
--- a/fs/ext4/ialloc.c
+++ b/fs/ext4/ialloc.c
@@ -451,7 +451,10 @@ static int find_group_orlov(struct super_block *sb, struct inode *parent,
 		int ret = -1;
 
 		if (qstr) {
-			hinfo.hash_version = DX_HASH_HALF_MD4;
+			if (ext4_hash_in_dirent(parent))
+				hinfo.hash_version = DX_HASH_SIPHASH;
+			else
+				hinfo.hash_version = DX_HASH_HALF_MD4;
 			hinfo.seed = sbi->s_hash_seed;
 			ext4fs_dirhash(parent, qstr->name, qstr->len, &hinfo);
 			grp = hinfo.hash;
@@ -727,6 +730,53 @@ static int find_inode_bit(struct super_block *sb, ext4_group_t group,
 	return 1;
 }
 
+static int ext4_xattr_credits_for_new_inode(struct inode *dir, mode_t mode,
+					    bool encrypt)
+{
+	struct super_block *sb = dir->i_sb;
+	int nblocks = 0;
+#ifdef CONFIG_EXT4_FS_POSIX_ACL
+	struct posix_acl *p = get_acl(dir, ACL_TYPE_DEFAULT);
+
+	if (IS_ERR(p))
+		return PTR_ERR(p);
+	if (p) {
+		int acl_size = p->a_count * sizeof(ext4_acl_entry);
+
+		nblocks += (S_ISDIR(mode) ? 2 : 1) *
+			__ext4_xattr_set_credits(sb, NULL /* inode */,
+						 NULL /* block_bh */, acl_size,
+						 true /* is_create */);
+		posix_acl_release(p);
+	}
+#endif
+
+#ifdef CONFIG_SECURITY
+	{
+		int num_security_xattrs = 1;
+
+#ifdef CONFIG_INTEGRITY
+		num_security_xattrs++;
+#endif
+		/*
+		 * We assume that security xattrs are never more than 1k.
+		 * In practice they are under 128 bytes.
+		 */
+		nblocks += num_security_xattrs *
+			__ext4_xattr_set_credits(sb, NULL /* inode */,
+						 NULL /* block_bh */, 1024,
+						 true /* is_create */);
+	}
+#endif
+	if (encrypt)
+		nblocks += __ext4_xattr_set_credits(sb,
+						    NULL /* inode */,
+						    NULL /* block_bh */,
+						    FSCRYPT_SET_CONTEXT_MAX_SIZE,
+						    true /* is_create */);
+	return nblocks;
+}
+
 /*
  * There are two policies for allocating an inode.  If the new inode is
  * a directory, then a forward search is made for a block group with both
@@ -757,7 +807,7 @@ struct inode *__ext4_new_inode(handle_t *handle, struct inode *dir,
 	ext4_group_t i;
 	ext4_group_t flex_group;
 	struct ext4_group_info *grp;
-	int encrypt = 0;
+	bool encrypt = false;
 
 	/* Cannot create files in a deleted directory */
 	if (!dir || !dir->i_nlink)
@@ -769,59 +819,6 @@ struct inode *__ext4_new_inode(handle_t *handle, struct inode *dir,
 	if (unlikely(ext4_forced_shutdown(sbi)))
 		return ERR_PTR(-EIO);
 
-	if ((IS_ENCRYPTED(dir) || DUMMY_ENCRYPTION_ENABLED(sbi)) &&
-	    (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)) &&
-	    !(i_flags & EXT4_EA_INODE_FL)) {
-		err = fscrypt_get_encryption_info(dir);
-		if (err)
-			return ERR_PTR(err);
-		if (!fscrypt_has_encryption_key(dir))
-			return ERR_PTR(-ENOKEY);
-		encrypt = 1;
-	}
-
-	if (!handle && sbi->s_journal && !(i_flags & EXT4_EA_INODE_FL)) {
-#ifdef CONFIG_EXT4_FS_POSIX_ACL
-		struct posix_acl *p = get_acl(dir, ACL_TYPE_DEFAULT);
-
-		if (IS_ERR(p))
-			return ERR_CAST(p);
-		if (p) {
-			int acl_size = p->a_count * sizeof(ext4_acl_entry);
-
-			nblocks += (S_ISDIR(mode) ? 2 : 1) *
-				__ext4_xattr_set_credits(sb, NULL /* inode */,
-					NULL /* block_bh */, acl_size,
-					true /* is_create */);
-			posix_acl_release(p);
-		}
-#endif
-
-#ifdef CONFIG_SECURITY
-		{
-			int num_security_xattrs = 1;
-
-#ifdef CONFIG_INTEGRITY
-			num_security_xattrs++;
-#endif
-			/*
-			 * We assume that security xattrs are never
-			 * more than 1k.  In practice they are under
-			 * 128 bytes.
-			 */
-			nblocks += num_security_xattrs *
-				__ext4_xattr_set_credits(sb, NULL /* inode */,
-					NULL /* block_bh */, 1024,
-					true /* is_create */);
-		}
-#endif
-		if (encrypt)
-			nblocks += __ext4_xattr_set_credits(sb,
-					NULL /* inode */, NULL /* block_bh */,
-					FSCRYPT_SET_CONTEXT_MAX_SIZE,
-					true /* is_create */);
-	}
-
 	ngroups = ext4_get_groups_count(sb);
 	trace_ext4_request_inode(dir, mode);
 	inode = new_inode(sb);
@@ -851,10 +848,25 @@ struct inode *__ext4_new_inode(handle_t *handle, struct inode *dir,
 	else
 		ei->i_projid = make_kprojid(&init_user_ns, EXT4_DEF_PROJID);
 
+	if (!(i_flags & EXT4_EA_INODE_FL)) {
+		err = fscrypt_prepare_new_inode(dir, inode, &encrypt);
+		if (err)
+			goto out;
+	}
+
 	err = dquot_initialize(inode);
 	if (err)
 		goto out;
 
+	if (!handle && sbi->s_journal && !(i_flags & EXT4_EA_INODE_FL)) {
+		ret2 = ext4_xattr_credits_for_new_inode(dir, mode, encrypt);
+		if (ret2 < 0) {
+			err = ret2;
+			goto out;
+		}
+		nblocks += ret2;
+	}
+
 	if (!goal)
 		goal = sbi->s_inode_goal;
 
@@ -1147,7 +1159,7 @@ struct inode *__ext4_new_inode(handle_t *handle, struct inode *dir,
 	 * prevent its deduplication.
 	 */
 	if (encrypt) {
-		err = fscrypt_inherit_context(dir, inode, handle, true);
+		err = fscrypt_set_context(inode, handle);
 		if (err)
 			goto fail_free_drop;
 	}
diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
index 519378a..e20f217 100644
--- a/fs/ext4/inline.c
+++ b/fs/ext4/inline.c
@@ -12,6 +12,7 @@
 #include "ext4.h"
 #include "xattr.h"
 #include "truncate.h"
+#include <trace/events/android_fs.h>
 
 #define EXT4_XATTR_SYSTEM_DATA	"data"
 #define EXT4_MIN_INLINE_DATA_SIZE	((sizeof(__le32) * EXT4_N_BLOCKS))
@@ -505,6 +506,17 @@ int ext4_readpage_inline(struct inode *inode, struct page *page)
 		return -EAGAIN;
 	}
 
+	if (trace_android_fs_dataread_start_enabled()) {
+		char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+		path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    inode);
+		trace_android_fs_dataread_start(inode, page_offset(page),
+						PAGE_SIZE, current->pid,
+						path, current->comm);
+	}
+
 	/*
 	 * Current inline data can only exist in the 1st page,
 	 * So for all the other pages, just set them uptodate.
@@ -516,6 +528,8 @@ int ext4_readpage_inline(struct inode *inode, struct page *page)
 		SetPageUptodate(page);
 	}
 
+	trace_android_fs_dataread_end(inode, page_offset(page), PAGE_SIZE);
+
 	up_read(&EXT4_I(inode)->xattr_sem);
 
 	unlock_page(page);
@@ -996,7 +1010,7 @@ void ext4_show_inline_dir(struct inode *dir, struct buffer_head *bh,
 			     offset, de_len, de->name_len, de->name,
 			     de->name_len, le32_to_cpu(de->inode));
 		if (ext4_check_dir_entry(dir, NULL, de, bh,
-					 inline_start, inline_size, offset))
+					 inline_start, inline_size, 0, offset))
 			BUG();
 
 		offset += de_len;
@@ -1022,7 +1036,7 @@ static int ext4_add_dirent_to_inline(handle_t *handle,
 	int		err;
 	struct ext4_dir_entry_2 *de;
 
-	err = ext4_find_dest_de(dir, inode, iloc->bh, inline_start,
+	err = ext4_find_dest_de(dir, inode, 0, iloc->bh, inline_start,
 				inline_size, fname, &de);
 	if (err)
 		return err;
@@ -1031,7 +1045,7 @@ static int ext4_add_dirent_to_inline(handle_t *handle,
 	err = ext4_journal_get_write_access(handle, iloc->bh);
 	if (err)
 		return err;
-	ext4_insert_dentry(inode, de, inline_size, fname);
+	ext4_insert_dentry(dir, inode, de, inline_size, fname);
 
 	ext4_show_inline_dir(dir, iloc->bh, inline_start, inline_size);
 
@@ -1100,7 +1114,7 @@ static int ext4_update_inline_dir(handle_t *handle, struct inode *dir,
 	int old_size = EXT4_I(dir)->i_inline_size - EXT4_MIN_INLINE_DATA_SIZE;
 	int new_size = get_max_inline_xattr_value_size(dir, iloc);
 
-	if (new_size - old_size <= EXT4_DIR_REC_LEN(1))
+	if (new_size - old_size <= ext4_dir_rec_len(1, NULL))
 		return -ENOSPC;
 
 	ret = ext4_update_inline_data(handle, dir,
@@ -1378,8 +1392,8 @@ int ext4_inlinedir_to_tree(struct file *dir_file,
 			fake.name_len = 1;
 			strcpy(fake.name, ".");
 			fake.rec_len = ext4_rec_len_to_disk(
-						EXT4_DIR_REC_LEN(fake.name_len),
-						inline_size);
+					  ext4_dir_rec_len(fake.name_len, NULL),
+					  inline_size);
 			ext4_set_de_type(inode->i_sb, &fake, S_IFDIR);
 			de = &fake;
 			pos = EXT4_INLINE_DOTDOT_OFFSET;
@@ -1388,8 +1402,8 @@ int ext4_inlinedir_to_tree(struct file *dir_file,
 			fake.name_len = 2;
 			strcpy(fake.name, "..");
 			fake.rec_len = ext4_rec_len_to_disk(
-						EXT4_DIR_REC_LEN(fake.name_len),
-						inline_size);
+					  ext4_dir_rec_len(fake.name_len, NULL),
+					  inline_size);
 			ext4_set_de_type(inode->i_sb, &fake, S_IFDIR);
 			de = &fake;
 			pos = EXT4_INLINE_DOTDOT_SIZE;
@@ -1398,13 +1412,18 @@ int ext4_inlinedir_to_tree(struct file *dir_file,
 			pos += ext4_rec_len_from_disk(de->rec_len, inline_size);
 			if (ext4_check_dir_entry(inode, dir_file, de,
 					 iloc.bh, dir_buf,
-					 inline_size, pos)) {
+					 inline_size, block, pos)) {
 				ret = count;
 				goto out;
 			}
 		}
 
-		ext4fs_dirhash(dir, de->name, de->name_len, hinfo);
+		if (ext4_hash_in_dirent(dir)) {
+			hinfo->hash = EXT4_DIRENT_HASH(de);
+			hinfo->minor_hash = EXT4_DIRENT_MINOR_HASH(de);
+		} else {
+			ext4fs_dirhash(dir, de->name, de->name_len, hinfo);
+		}
 		if ((hinfo->hash < start_hash) ||
 		    ((hinfo->hash == start_hash) &&
 		     (hinfo->minor_hash < start_minor_hash)))
@@ -1486,8 +1505,8 @@ int ext4_read_inline_dir(struct file *file,
 	 * So we will use extra_offset and extra_size to indicate them
 	 * during the inline dir iteration.
 	 */
-	dotdot_offset = EXT4_DIR_REC_LEN(1);
-	dotdot_size = dotdot_offset + EXT4_DIR_REC_LEN(2);
+	dotdot_offset = ext4_dir_rec_len(1, NULL);
+	dotdot_size = dotdot_offset + ext4_dir_rec_len(2, NULL);
 	extra_offset = dotdot_size - EXT4_INLINE_DOTDOT_SIZE;
 	extra_size = extra_offset + inline_size;
 
@@ -1522,7 +1541,7 @@ int ext4_read_inline_dir(struct file *file,
 			 * failure will be detected in the
 			 * dirent test below. */
 			if (ext4_rec_len_from_disk(de->rec_len, extra_size)
-				< EXT4_DIR_REC_LEN(1))
+				< ext4_dir_rec_len(1, NULL))
 				break;
 			i += ext4_rec_len_from_disk(de->rec_len,
 						    extra_size);
@@ -1550,7 +1569,7 @@ int ext4_read_inline_dir(struct file *file,
 		de = (struct ext4_dir_entry_2 *)
 			(dir_buf + ctx->pos - extra_offset);
 		if (ext4_check_dir_entry(inode, file, de, iloc.bh, dir_buf,
-					 extra_size, ctx->pos))
+					 extra_size, 0, ctx->pos))
 			goto out;
 		if (le32_to_cpu(de->inode)) {
 			if (!dir_emit(ctx, de->name, de->name_len,
@@ -1642,7 +1661,7 @@ struct buffer_head *ext4_find_inline_entry(struct inode *dir,
 						EXT4_INLINE_DOTDOT_SIZE;
 	inline_size = EXT4_MIN_INLINE_DATA_SIZE - EXT4_INLINE_DOTDOT_SIZE;
 	ret = ext4_search_dir(iloc.bh, inline_start, inline_size,
-			      dir, fname, 0, res_dir);
+			      dir, fname, 0, 0, res_dir);
 	if (ret == 1)
 		goto out_find;
 	if (ret < 0)
@@ -1655,7 +1674,7 @@ struct buffer_head *ext4_find_inline_entry(struct inode *dir,
 	inline_size = ext4_get_inline_size(dir) - EXT4_MIN_INLINE_DATA_SIZE;
 
 	ret = ext4_search_dir(iloc.bh, inline_start, inline_size,
-			      dir, fname, 0, res_dir);
+			      dir, fname, 0, 0, res_dir);
 	if (ret == 1)
 		goto out_find;
 
@@ -1704,7 +1723,7 @@ int ext4_delete_inline_entry(handle_t *handle,
 	if (err)
 		goto out;
 
-	err = ext4_generic_delete_entry(handle, dir, de_del, bh,
+	err = ext4_generic_delete_entry(handle, dir, de_del, 0, bh,
 					inline_start, inline_size, 0);
 	if (err)
 		goto out;
@@ -1788,7 +1807,7 @@ bool empty_inline_dir(struct inode *dir, int *has_inline_data)
 					   &inline_pos, &inline_size);
 		if (ext4_check_dir_entry(dir, NULL, de,
 					 iloc.bh, inline_pos,
-					 inline_size, offset)) {
+					 inline_size, 0, offset)) {
 			ext4_warning(dir->i_sb,
 				     "bad inline directory (dir #%lu) - "
 				     "inode %u, rec_len %u, name_len %d"
diff --git a/fs/ext4/inode-test.c b/fs/ext4/inode-test.c
new file mode 100644
index 0000000..95620bf
--- /dev/null
+++ b/fs/ext4/inode-test.c
@@ -0,0 +1,274 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * KUnit test of ext4 inode that verify the seconds part of [a/c/m]
+ * timestamps in ext4 inode structs are decoded correctly.
+ */
+
+#include <kunit/test.h>
+#include <linux/kernel.h>
+#include <linux/time64.h>
+
+#include "ext4.h"
+
+/*
+ * For constructing the nonnegative timestamp lower bound value.
+ * binary: 00000000 00000000 00000000 00000000
+ */
+#define LOWER_MSB_0 0L
+/*
+ * For constructing the nonnegative timestamp upper bound value.
+ * binary: 01111111 11111111 11111111 11111111
+ *
+ */
+#define UPPER_MSB_0 0x7fffffffL
+/*
+ * For constructing the negative timestamp lower bound value.
+ * binary: 10000000 00000000 00000000 00000000
+ */
+#define LOWER_MSB_1 (-0x80000000L)
+/*
+ * For constructing the negative timestamp upper bound value.
+ * binary: 11111111 11111111 11111111 11111111
+ */
+#define UPPER_MSB_1 (-1L)
+/*
+ * Upper bound for nanoseconds value supported by the encoding.
+ * binary: 00111111 11111111 11111111 11111111
+ */
+#define MAX_NANOSECONDS ((1L << 30) - 1)
+
+#define CASE_NAME_FORMAT "%s: msb:%x lower_bound:%x extra_bits: %x"
+
+#define LOWER_BOUND_NEG_NO_EXTRA_BITS_CASE\
+	"1901-12-13 Lower bound of 32bit < 0 timestamp, no extra bits"
+#define UPPER_BOUND_NEG_NO_EXTRA_BITS_CASE\
+	"1969-12-31 Upper bound of 32bit < 0 timestamp, no extra bits"
+#define LOWER_BOUND_NONNEG_NO_EXTRA_BITS_CASE\
+	"1970-01-01 Lower bound of 32bit >=0 timestamp, no extra bits"
+#define UPPER_BOUND_NONNEG_NO_EXTRA_BITS_CASE\
+	"2038-01-19 Upper bound of 32bit >=0 timestamp, no extra bits"
+#define LOWER_BOUND_NEG_LO_1_CASE\
+	"2038-01-19 Lower bound of 32bit <0 timestamp, lo extra sec bit on"
+#define UPPER_BOUND_NEG_LO_1_CASE\
+	"2106-02-07 Upper bound of 32bit <0 timestamp, lo extra sec bit on"
+#define LOWER_BOUND_NONNEG_LO_1_CASE\
+	"2106-02-07 Lower bound of 32bit >=0 timestamp, lo extra sec bit on"
+#define UPPER_BOUND_NONNEG_LO_1_CASE\
+	"2174-02-25 Upper bound of 32bit >=0 timestamp, lo extra sec bit on"
+#define LOWER_BOUND_NEG_HI_1_CASE\
+	"2174-02-25 Lower bound of 32bit <0 timestamp, hi extra sec bit on"
+#define UPPER_BOUND_NEG_HI_1_CASE\
+	"2242-03-16 Upper bound of 32bit <0 timestamp, hi extra sec bit on"
+#define LOWER_BOUND_NONNEG_HI_1_CASE\
+	"2242-03-16 Lower bound of 32bit >=0 timestamp, hi extra sec bit on"
+#define UPPER_BOUND_NONNEG_HI_1_CASE\
+	"2310-04-04 Upper bound of 32bit >=0 timestamp, hi extra sec bit on"
+#define UPPER_BOUND_NONNEG_HI_1_NS_1_CASE\
+	"2310-04-04 Upper bound of 32bit>=0 timestamp, hi extra sec bit 1. 1 ns"
+#define LOWER_BOUND_NONNEG_HI_1_NS_MAX_CASE\
+	"2378-04-22 Lower bound of 32bit>= timestamp. Extra sec bits 1. Max ns"
+#define LOWER_BOUND_NONNEG_EXTRA_BITS_1_CASE\
+	"2378-04-22 Lower bound of 32bit >=0 timestamp. All extra sec bits on"
+#define UPPER_BOUND_NONNEG_EXTRA_BITS_1_CASE\
+	"2446-05-10 Upper bound of 32bit >=0 timestamp. All extra sec bits on"
+
+struct timestamp_expectation {
+	const char *test_case_name;
+	struct timespec64 expected;
+	u32 extra_bits;
+	bool msb_set;
+	bool lower_bound;
+};
+
+static time64_t get_32bit_time(const struct timestamp_expectation * const test)
+{
+	if (test->msb_set) {
+		if (test->lower_bound)
+			return LOWER_MSB_1;
+
+		return UPPER_MSB_1;
+	}
+
+	if (test->lower_bound)
+		return LOWER_MSB_0;
+	return UPPER_MSB_0;
+}
+
+
+/*
+ *  Test data is derived from the table in the Inode Timestamps section of
+ *  Documentation/filesystems/ext4/inodes.rst.
+ */
+static void inode_test_xtimestamp_decoding(struct kunit *test)
+{
+	const struct timestamp_expectation test_data[] = {
+		{
+			.test_case_name = LOWER_BOUND_NEG_NO_EXTRA_BITS_CASE,
+			.msb_set = true,
+			.lower_bound = true,
+			.extra_bits = 0,
+			.expected = {.tv_sec = -0x80000000LL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = UPPER_BOUND_NEG_NO_EXTRA_BITS_CASE,
+			.msb_set = true,
+			.lower_bound = false,
+			.extra_bits = 0,
+			.expected = {.tv_sec = -1LL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = LOWER_BOUND_NONNEG_NO_EXTRA_BITS_CASE,
+			.msb_set = false,
+			.lower_bound = true,
+			.extra_bits = 0,
+			.expected = {0LL, 0L},
+		},
+
+		{
+			.test_case_name = UPPER_BOUND_NONNEG_NO_EXTRA_BITS_CASE,
+			.msb_set = false,
+			.lower_bound = false,
+			.extra_bits = 0,
+			.expected = {.tv_sec = 0x7fffffffLL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = LOWER_BOUND_NEG_LO_1_CASE,
+			.msb_set = true,
+			.lower_bound = true,
+			.extra_bits = 1,
+			.expected = {.tv_sec = 0x80000000LL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = UPPER_BOUND_NEG_LO_1_CASE,
+			.msb_set = true,
+			.lower_bound = false,
+			.extra_bits = 1,
+			.expected = {.tv_sec = 0xffffffffLL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = LOWER_BOUND_NONNEG_LO_1_CASE,
+			.msb_set = false,
+			.lower_bound = true,
+			.extra_bits = 1,
+			.expected = {.tv_sec = 0x100000000LL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = UPPER_BOUND_NONNEG_LO_1_CASE,
+			.msb_set = false,
+			.lower_bound = false,
+			.extra_bits = 1,
+			.expected = {.tv_sec = 0x17fffffffLL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = LOWER_BOUND_NEG_HI_1_CASE,
+			.msb_set = true,
+			.lower_bound = true,
+			.extra_bits =  2,
+			.expected = {.tv_sec = 0x180000000LL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = UPPER_BOUND_NEG_HI_1_CASE,
+			.msb_set = true,
+			.lower_bound = false,
+			.extra_bits = 2,
+			.expected = {.tv_sec = 0x1ffffffffLL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = LOWER_BOUND_NONNEG_HI_1_CASE,
+			.msb_set = false,
+			.lower_bound = true,
+			.extra_bits = 2,
+			.expected = {.tv_sec = 0x200000000LL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = UPPER_BOUND_NONNEG_HI_1_CASE,
+			.msb_set = false,
+			.lower_bound = false,
+			.extra_bits = 2,
+			.expected = {.tv_sec = 0x27fffffffLL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = UPPER_BOUND_NONNEG_HI_1_NS_1_CASE,
+			.msb_set = false,
+			.lower_bound = false,
+			.extra_bits = 6,
+			.expected = {.tv_sec = 0x27fffffffLL, .tv_nsec = 1L},
+		},
+
+		{
+			.test_case_name = LOWER_BOUND_NONNEG_HI_1_NS_MAX_CASE,
+			.msb_set = false,
+			.lower_bound = true,
+			.extra_bits = 0xFFFFFFFF,
+			.expected = {.tv_sec = 0x300000000LL,
+				     .tv_nsec = MAX_NANOSECONDS},
+		},
+
+		{
+			.test_case_name = LOWER_BOUND_NONNEG_EXTRA_BITS_1_CASE,
+			.msb_set = false,
+			.lower_bound = true,
+			.extra_bits = 3,
+			.expected = {.tv_sec = 0x300000000LL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = UPPER_BOUND_NONNEG_EXTRA_BITS_1_CASE,
+			.msb_set = false,
+			.lower_bound = false,
+			.extra_bits = 3,
+			.expected = {.tv_sec = 0x37fffffffLL, .tv_nsec = 0L},
+		}
+	};
+
+	struct timespec64 timestamp;
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(test_data); ++i) {
+		timestamp.tv_sec = get_32bit_time(&test_data[i]);
+		ext4_decode_extra_time(&timestamp,
+				       cpu_to_le32(test_data[i].extra_bits));
+
+		KUNIT_EXPECT_EQ_MSG(test,
+				    test_data[i].expected.tv_sec,
+				    timestamp.tv_sec,
+				    CASE_NAME_FORMAT,
+				    test_data[i].test_case_name,
+				    test_data[i].msb_set,
+				    test_data[i].lower_bound,
+				    test_data[i].extra_bits);
+		KUNIT_EXPECT_EQ_MSG(test,
+				    test_data[i].expected.tv_nsec,
+				    timestamp.tv_nsec,
+				    CASE_NAME_FORMAT,
+				    test_data[i].test_case_name,
+				    test_data[i].msb_set,
+				    test_data[i].lower_bound,
+				    test_data[i].extra_bits);
+	}
+}
+
+static struct kunit_case ext4_inode_test_cases[] = {
+	KUNIT_CASE(inode_test_xtimestamp_decoding),
+	{}
+};
+
+static struct kunit_suite ext4_inode_test_suite = {
+	.name = "ext4_inode_test",
+	.test_cases = ext4_inode_test_cases,
+};
+
+kunit_test_suites(&ext4_inode_test_suite);
+
+MODULE_LICENSE("GPL v2");
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 539d95b..9a78376 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -47,6 +47,7 @@
 #include "truncate.h"
 
 #include <trace/events/ext4.h>
+#include <trace/events/android_fs.h>
 
 #define MPAGE_DA_EXTENT_TAIL 0x01
 
@@ -1255,7 +1256,7 @@ static int ext4_block_write_begin(struct page *page, loff_t pos, unsigned len,
 	}
 	if (unlikely(err)) {
 		page_zero_new_buffers(page, from, to);
-	} else if (IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode)) {
+	} else if (fscrypt_inode_uses_fs_layer_crypto(inode)) {
 		for (i = 0; i < nr_wait; i++) {
 			int err2;
 
@@ -1287,6 +1288,16 @@ static int ext4_write_begin(struct file *file, struct address_space *mapping,
 	if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
 		return -EIO;
 
+	if (trace_android_fs_datawrite_start_enabled()) {
+		char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+		path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    inode);
+		trace_android_fs_datawrite_start(inode, pos, len,
+						 current->pid, path,
+						 current->comm);
+	}
 	trace_ext4_write_begin(inode, pos, len, flags);
 	/*
 	 * Reserve one block more for addition to orphan list in case
@@ -1429,6 +1440,7 @@ static int ext4_write_end(struct file *file,
 	int inline_data = ext4_has_inline_data(inode);
 	bool verity = ext4_verity_in_progress(inode);
 
+	trace_android_fs_datawrite_end(inode, pos, len);
 	trace_ext4_write_end(inode, pos, len, copied);
 	if (inline_data) {
 		ret = ext4_write_inline_data_end(inode, pos, len,
@@ -1539,6 +1551,7 @@ static int ext4_journalled_write_end(struct file *file,
 	int inline_data = ext4_has_inline_data(inode);
 	bool verity = ext4_verity_in_progress(inode);
 
+	trace_android_fs_datawrite_end(inode, pos, len);
 	trace_ext4_journalled_write_end(inode, pos, len, copied);
 	from = pos & (PAGE_SIZE - 1);
 	to = from + len;
@@ -3058,6 +3071,16 @@ static int ext4_da_write_begin(struct file *file, struct address_space *mapping,
 					len, flags, pagep, fsdata);
 	}
 	*fsdata = (void *)0;
+	if (trace_android_fs_datawrite_start_enabled()) {
+		char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+		path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    inode);
+		trace_android_fs_datawrite_start(inode, pos, len,
+						 current->pid,
+						 path, current->comm);
+	}
 	trace_ext4_da_write_begin(inode, pos, len, flags);
 
 	if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) {
@@ -3176,6 +3199,7 @@ static int ext4_da_write_end(struct file *file,
 		return ext4_write_end(file, mapping, pos,
 				      len, copied, page, fsdata);
 
+	trace_android_fs_datawrite_end(inode, pos, len);
 	trace_ext4_da_write_end(inode, pos, len, copied);
 	start = pos & (PAGE_SIZE - 1);
 	end = start + copied - 1;
@@ -3881,11 +3905,11 @@ static ssize_t ext4_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
 	size_t count = iov_iter_count(iter);
 	loff_t offset = iocb->ki_pos;
 	ssize_t ret;
+	int rw = iov_iter_rw(iter);
 
-#ifdef CONFIG_FS_ENCRYPTION
-	if (IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode))
+	if (!fscrypt_dio_supported(iocb, iter))
 		return 0;
-#endif
+
 	if (fsverity_active(inode))
 		return 0;
 
@@ -3899,12 +3923,42 @@ static ssize_t ext4_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
 	if (ext4_has_inline_data(inode))
 		return 0;
 
+	if (trace_android_fs_dataread_start_enabled() &&
+	    (rw == READ)) {
+		char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+		path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    inode);
+		trace_android_fs_dataread_start(inode, offset, count,
+						current->pid, path,
+						current->comm);
+	}
+	if (trace_android_fs_datawrite_start_enabled() &&
+	    (rw == WRITE)) {
+		char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+		path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    inode);
+		trace_android_fs_datawrite_start(inode, offset, count,
+						 current->pid, path,
+						 current->comm);
+	}
 	trace_ext4_direct_IO_enter(inode, offset, count, iov_iter_rw(iter));
 	if (iov_iter_rw(iter) == READ)
 		ret = ext4_direct_IO_read(iocb, iter);
 	else
 		ret = ext4_direct_IO_write(iocb, iter);
 	trace_ext4_direct_IO_exit(inode, offset, count, iov_iter_rw(iter), ret);
+
+	if (trace_android_fs_dataread_start_enabled() &&
+	    (rw == READ))
+		trace_android_fs_dataread_end(inode, offset, count);
+	if (trace_android_fs_datawrite_start_enabled() &&
+	    (rw == WRITE))
+		trace_android_fs_datawrite_end(inode, offset, count);
+
 	return ret;
 }
 
@@ -4069,7 +4123,7 @@ static int __ext4_block_zero_page_range(handle_t *handle,
 		/* Uhhuh. Read error. Complain and punt. */
 		if (!buffer_uptodate(bh))
 			goto unlock;
-		if (S_ISREG(inode->i_mode) && IS_ENCRYPTED(inode)) {
+		if (fscrypt_inode_uses_fs_layer_crypto(inode)) {
 			/* We expect the key to be set. */
 			BUG_ON(!fscrypt_has_encryption_key(inode));
 			WARN_ON_ONCE(fscrypt_decrypt_pagecache_blocks(
@@ -5769,12 +5823,15 @@ int ext4_getattr(const struct path *path, struct kstat *stat,
 		stat->attributes |= STATX_ATTR_IMMUTABLE;
 	if (flags & EXT4_NODUMP_FL)
 		stat->attributes |= STATX_ATTR_NODUMP;
+	if (flags & EXT4_VERITY_FL)
+		stat->attributes |= STATX_ATTR_VERITY;
 
 	stat->attributes_mask |= (STATX_ATTR_APPEND |
 				  STATX_ATTR_COMPRESSED |
 				  STATX_ATTR_ENCRYPTED |
 				  STATX_ATTR_IMMUTABLE |
-				  STATX_ATTR_NODUMP);
+				  STATX_ATTR_NODUMP |
+				  STATX_ATTR_VERITY);
 
 	generic_fillattr(inode, stat);
 	return 0;
diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c
index ba13fbb..09b43f3 100644
--- a/fs/ext4/ioctl.c
+++ b/fs/ext4/ioctl.c
@@ -1213,6 +1213,11 @@ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 			return -EOPNOTSUPP;
 		return fscrypt_ioctl_get_key_status(filp, (void __user *)arg);
 
+	case FS_IOC_GET_ENCRYPTION_NONCE:
+		if (!ext4_has_feature_encrypt(sb))
+			return -EOPNOTSUPP;
+		return fscrypt_ioctl_get_nonce(filp, (void __user *)arg);
+
 	case EXT4_IOC_CLEAR_ES_CACHE:
 	{
 		if (!inode_owner_or_capable(inode))
@@ -1372,6 +1377,7 @@ long ext4_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 	case FS_IOC_REMOVE_ENCRYPTION_KEY:
 	case FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS:
 	case FS_IOC_GET_ENCRYPTION_KEY_STATUS:
+	case FS_IOC_GET_ENCRYPTION_NONCE:
 	case EXT4_IOC_SHUTDOWN:
 	case FS_IOC_GETFSMAP:
 	case FS_IOC_ENABLE_VERITY:
@@ -1379,6 +1385,8 @@ long ext4_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 	case EXT4_IOC_CLEAR_ES_CACHE:
 	case EXT4_IOC_GETSTATE:
 	case EXT4_IOC_GET_ES_CACHE:
+	case EXT4_IOC_FSGETXATTR:
+	case EXT4_IOC_FSSETXATTR:
 		break;
 	default:
 		return -ENOIOCTLCMD;
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
index f05ec9b..edba1bf 100644
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -277,9 +277,11 @@ static int dx_make_map(struct inode *dir, struct ext4_dir_entry_2 *de,
 		       unsigned blocksize, struct dx_hash_info *hinfo,
 		       struct dx_map_entry map[]);
 static void dx_sort_map(struct dx_map_entry *map, unsigned count);
-static struct ext4_dir_entry_2 *dx_move_dirents(char *from, char *to,
-		struct dx_map_entry *offsets, int count, unsigned blocksize);
-static struct ext4_dir_entry_2* dx_pack_dirents(char *base, unsigned blocksize);
+static struct ext4_dir_entry_2 *dx_move_dirents(struct inode *dir, char *from,
+					char *to, struct dx_map_entry *offsets,
+					int count, unsigned int blocksize);
+static struct ext4_dir_entry_2 *dx_pack_dirents(struct inode *dir, char *base,
+						unsigned int blocksize);
 static void dx_insert_block(struct dx_frame *frame,
 					u32 hash, ext4_lblk_t block);
 static int ext4_htree_next_block(struct inode *dir, __u32 hash,
@@ -288,7 +290,7 @@ static int ext4_htree_next_block(struct inode *dir, __u32 hash,
 				 __u32 *start_hash);
 static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
 		struct ext4_filename *fname,
-		struct ext4_dir_entry_2 **res_dir);
+		struct ext4_dir_entry_2 **res_dir, ext4_lblk_t *lblk);
 static int ext4_dx_add_entry(handle_t *handle, struct ext4_filename *fname,
 			     struct inode *dir, struct inode *inode);
 
@@ -571,8 +573,9 @@ static inline void dx_set_limit(struct dx_entry *entries, unsigned value)
 
 static inline unsigned dx_root_limit(struct inode *dir, unsigned infosize)
 {
-	unsigned entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(1) -
-		EXT4_DIR_REC_LEN(2) - infosize;
+	unsigned int entry_space = dir->i_sb->s_blocksize -
+			ext4_dir_rec_len(1, NULL) -
+			ext4_dir_rec_len(2, NULL) - infosize;
 
 	if (ext4_has_metadata_csum(dir->i_sb))
 		entry_space -= sizeof(struct dx_tail);
@@ -581,7 +584,8 @@ static inline unsigned dx_root_limit(struct inode *dir, unsigned infosize)
 
 static inline unsigned dx_node_limit(struct inode *dir)
 {
-	unsigned entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(0);
+	unsigned int entry_space = dir->i_sb->s_blocksize -
+			ext4_dir_rec_len(0, dir);
 
 	if (ext4_has_metadata_csum(dir->i_sb))
 		entry_space -= sizeof(struct dx_tail);
@@ -636,13 +640,7 @@ static struct stats dx_show_leaf(struct inode *dir,
 
 				name  = de->name;
 				len = de->name_len;
-				if (IS_ENCRYPTED(dir))
-					res = fscrypt_get_encryption_info(dir);
-				if (res) {
-					printk(KERN_WARNING "Error setting up"
-					       " fname crypto: %d\n", res);
-				}
-				if (!fscrypt_has_encryption_key(dir)) {
+				if (!IS_ENCRYPTED(dir)) {
 					/* Directory is not encrypted */
 					ext4fs_dirhash(dir, de->name,
 						de->name_len, &h);
@@ -656,8 +654,7 @@ static struct stats dx_show_leaf(struct inode *dir,
 
 					/* Directory is encrypted */
 					res = fscrypt_fname_alloc_buffer(
-						dir, len,
-						&fname_crypto_str);
+						len, &fname_crypto_str);
 					if (res)
 						printk(KERN_WARNING "Error "
 							"allocating crypto "
@@ -677,7 +674,10 @@ static struct stats dx_show_leaf(struct inode *dir,
 						name = fname_crypto_str.name;
 						len = fname_crypto_str.len;
 					}
-					ext4fs_dirhash(dir, de->name,
+					if (IS_CASEFOLDED(dir))
+						h.hash = EXT4_DIRENT_HASH(de);
+					else
+						ext4fs_dirhash(dir, de->name,
 						       de->name_len, &h);
 					printk("%*.s:(E)%x.%u ", len, name,
 					       h.hash, (unsigned) ((char *) de
@@ -693,7 +693,7 @@ static struct stats dx_show_leaf(struct inode *dir,
 				       (unsigned) ((char *) de - base));
 #endif
 			}
-			space += EXT4_DIR_REC_LEN(de->name_len);
+			space += ext4_dir_rec_len(de->name_len, dir);
 			names++;
 		}
 		de = ext4_next_entry(de, size);
@@ -765,18 +765,34 @@ dx_probe(struct ext4_filename *fname, struct inode *dir,
 	root = (struct dx_root *) frame->bh->b_data;
 	if (root->info.hash_version != DX_HASH_TEA &&
 	    root->info.hash_version != DX_HASH_HALF_MD4 &&
-	    root->info.hash_version != DX_HASH_LEGACY) {
+	    root->info.hash_version != DX_HASH_LEGACY &&
+	    root->info.hash_version != DX_HASH_SIPHASH) {
 		ext4_warning_inode(dir, "Unrecognised inode hash code %u",
 				   root->info.hash_version);
 		goto fail;
 	}
+	if (ext4_hash_in_dirent(dir)) {
+		if (root->info.hash_version != DX_HASH_SIPHASH) {
+			ext4_warning_inode(dir,
+				"Hash in dirent, but hash is not SIPHASH");
+			goto fail;
+		}
+	} else {
+		if (root->info.hash_version == DX_HASH_SIPHASH) {
+			ext4_warning_inode(dir,
+				"Hash code is SIPHASH, but hash not in dirent");
+			goto fail;
+		}
+	}
 	if (fname)
 		hinfo = &fname->hinfo;
 	hinfo->hash_version = root->info.hash_version;
 	if (hinfo->hash_version <= DX_HASH_TEA)
 		hinfo->hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned;
 	hinfo->seed = EXT4_SB(dir->i_sb)->s_hash_seed;
-	if (fname && fname_name(fname))
+	/* hash is already computed for encrypted casefolded directory */
+	if (fname && fname_name(fname) &&
+				!(IS_ENCRYPTED(dir) && IS_CASEFOLDED(dir)))
 		ext4fs_dirhash(dir, fname_name(fname), fname_len(fname), hinfo);
 	hash = hinfo->hash;
 
@@ -991,6 +1007,7 @@ static int htree_dirblock_to_tree(struct file *dir_file,
 	struct ext4_dir_entry_2 *de, *top;
 	int err = 0, count = 0;
 	struct fscrypt_str fname_crypto_str = FSTR_INIT(NULL, 0), tmp_str;
+	int csum = ext4_has_metadata_csum(dir->i_sb);
 
 	dxtrace(printk(KERN_INFO "In htree dirblock_to_tree: block %lu\n",
 							(unsigned long)block));
@@ -999,19 +1016,21 @@ static int htree_dirblock_to_tree(struct file *dir_file,
 		return PTR_ERR(bh);
 
 	de = (struct ext4_dir_entry_2 *) bh->b_data;
+	/* csum entries are not larger in the casefolded encrypted case */
 	top = (struct ext4_dir_entry_2 *) ((char *) de +
 					   dir->i_sb->s_blocksize -
-					   EXT4_DIR_REC_LEN(0));
+					   ext4_dir_rec_len(0,
+							   csum ? NULL : dir));
 #ifdef CONFIG_FS_ENCRYPTION
 	/* Check if the directory is encrypted */
 	if (IS_ENCRYPTED(dir)) {
-		err = fscrypt_get_encryption_info(dir);
+		err = fscrypt_prepare_readdir(dir);
 		if (err < 0) {
 			brelse(bh);
 			return err;
 		}
-		err = fscrypt_fname_alloc_buffer(dir, EXT4_NAME_LEN,
-						     &fname_crypto_str);
+		err = fscrypt_fname_alloc_buffer(EXT4_NAME_LEN,
+						 &fname_crypto_str);
 		if (err < 0) {
 			brelse(bh);
 			return err;
@@ -1020,13 +1039,23 @@ static int htree_dirblock_to_tree(struct file *dir_file,
 #endif
 	for (; de < top; de = ext4_next_entry(de, dir->i_sb->s_blocksize)) {
 		if (ext4_check_dir_entry(dir, NULL, de, bh,
-				bh->b_data, bh->b_size,
+				bh->b_data, bh->b_size, block,
 				(block<<EXT4_BLOCK_SIZE_BITS(dir->i_sb))
 					 + ((char *)de - bh->b_data))) {
 			/* silently ignore the rest of the block */
 			break;
 		}
-		ext4fs_dirhash(dir, de->name, de->name_len, hinfo);
+		if (ext4_hash_in_dirent(dir)) {
+			if (de->name_len && de->inode) {
+				hinfo->hash = EXT4_DIRENT_HASH(de);
+				hinfo->minor_hash = EXT4_DIRENT_MINOR_HASH(de);
+			} else {
+				hinfo->hash = 0;
+				hinfo->minor_hash = 0;
+			}
+		} else {
+			ext4fs_dirhash(dir, de->name, de->name_len, hinfo);
+		}
 		if ((hinfo->hash < start_hash) ||
 		    ((hinfo->hash == start_hash) &&
 		     (hinfo->minor_hash < start_minor_hash)))
@@ -1097,7 +1126,11 @@ int ext4_htree_fill_tree(struct file *dir_file, __u32 start_hash,
 		       start_hash, start_minor_hash));
 	dir = file_inode(dir_file);
 	if (!(ext4_test_inode_flag(dir, EXT4_INODE_INDEX))) {
-		hinfo.hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version;
+		if (ext4_hash_in_dirent(dir))
+			hinfo.hash_version = DX_HASH_SIPHASH;
+		else
+			hinfo.hash_version =
+					EXT4_SB(dir->i_sb)->s_def_hash_version;
 		if (hinfo.hash_version <= DX_HASH_TEA)
 			hinfo.hash_version +=
 				EXT4_SB(dir->i_sb)->s_hash_unsigned;
@@ -1190,11 +1223,12 @@ int ext4_htree_fill_tree(struct file *dir_file, __u32 start_hash,
 static inline int search_dirblock(struct buffer_head *bh,
 				  struct inode *dir,
 				  struct ext4_filename *fname,
+				  ext4_lblk_t lblk,
 				  unsigned int offset,
 				  struct ext4_dir_entry_2 **res_dir)
 {
 	return ext4_search_dir(bh, bh->b_data, dir->i_sb->s_blocksize, dir,
-			       fname, offset, res_dir);
+			       fname, lblk, offset, res_dir);
 }
 
 /*
@@ -1215,7 +1249,10 @@ static int dx_make_map(struct inode *dir, struct ext4_dir_entry_2 *de,
 
 	while ((char *) de < base + blocksize) {
 		if (de->name_len && de->inode) {
-			ext4fs_dirhash(dir, de->name, de->name_len, &h);
+			if (ext4_hash_in_dirent(dir))
+				h.hash = EXT4_DIRENT_HASH(de);
+			else
+				ext4fs_dirhash(dir, de->name, de->name_len, &h);
 			map_tail--;
 			map_tail->hash = h.hash;
 			map_tail->offs = ((char *) de - base)>>2;
@@ -1279,58 +1316,85 @@ static void dx_insert_block(struct dx_frame *frame, u32 hash, ext4_lblk_t block)
  * Returns: 0 if the directory entry matches, more than 0 if it
  * doesn't match or less than zero on error.
  */
-int ext4_ci_compare(const struct inode *parent, const struct qstr *name,
-		    const struct qstr *entry, bool quick)
+static int ext4_ci_compare(const struct inode *parent, const struct qstr *name,
+			   u8 *de_name, size_t de_name_len, bool quick)
 {
-	const struct ext4_sb_info *sbi = EXT4_SB(parent->i_sb);
-	const struct unicode_map *um = sbi->s_encoding;
+	const struct super_block *sb = parent->i_sb;
+	const struct unicode_map *um = sb->s_encoding;
+	struct fscrypt_str decrypted_name = FSTR_INIT(NULL, de_name_len);
+	struct qstr entry = QSTR_INIT(de_name, de_name_len);
 	int ret;
 
-	if (quick)
-		ret = utf8_strncasecmp_folded(um, name, entry);
-	else
-		ret = utf8_strncasecmp(um, name, entry);
+	if (IS_ENCRYPTED(parent)) {
+		const struct fscrypt_str encrypted_name =
+				FSTR_INIT(de_name, de_name_len);
 
+		decrypted_name.name = kmalloc(de_name_len, GFP_KERNEL);
+		if (!decrypted_name.name)
+			return -ENOMEM;
+		ret = fscrypt_fname_disk_to_usr(parent, 0, 0, &encrypted_name,
+						&decrypted_name);
+		if (ret < 0)
+			goto out;
+		entry.name = decrypted_name.name;
+		entry.len = decrypted_name.len;
+	}
+
+	if (quick)
+		ret = utf8_strncasecmp_folded(um, name, &entry);
+	else
+		ret = utf8_strncasecmp(um, name, &entry);
 	if (ret < 0) {
 		/* Handle invalid character sequence as either an error
 		 * or as an opaque byte sequence.
 		 */
-		if (ext4_has_strict_mode(sbi))
-			return -EINVAL;
-
-		if (name->len != entry->len)
-			return 1;
-
-		return !!memcmp(name->name, entry->name, name->len);
+		if (sb_has_strict_encoding(sb))
+			ret = -EINVAL;
+		else if (name->len != entry.len)
+			ret = 1;
+		else
+			ret = !!memcmp(name->name, entry.name, entry.len);
 	}
-
+out:
+	kfree(decrypted_name.name);
 	return ret;
 }
 
-void ext4_fname_setup_ci_filename(struct inode *dir, const struct qstr *iname,
-				  struct fscrypt_str *cf_name)
+int ext4_fname_setup_ci_filename(struct inode *dir, const struct qstr *iname,
+				  struct ext4_filename *name)
 {
+	struct fscrypt_str *cf_name = &name->cf_name;
+	struct dx_hash_info *hinfo = &name->hinfo;
 	int len;
 
-	if (!IS_CASEFOLDED(dir) || !EXT4_SB(dir->i_sb)->s_encoding) {
+	if (!IS_CASEFOLDED(dir) || !dir->i_sb->s_encoding ||
+	    (IS_ENCRYPTED(dir) && !fscrypt_has_encryption_key(dir))) {
 		cf_name->name = NULL;
-		return;
+		return 0;
 	}
 
 	cf_name->name = kmalloc(EXT4_NAME_LEN, GFP_NOFS);
 	if (!cf_name->name)
-		return;
+		return -ENOMEM;
 
-	len = utf8_casefold(EXT4_SB(dir->i_sb)->s_encoding,
+	len = utf8_casefold(dir->i_sb->s_encoding,
 			    iname, cf_name->name,
 			    EXT4_NAME_LEN);
 	if (len <= 0) {
 		kfree(cf_name->name);
 		cf_name->name = NULL;
-		return;
 	}
 	cf_name->len = (unsigned) len;
+	if (!IS_ENCRYPTED(dir))
+		return 0;
 
+	hinfo->hash_version = DX_HASH_SIPHASH;
+	hinfo->seed = NULL;
+	if (cf_name->name)
+		ext4fs_dirhash(dir, cf_name->name, cf_name->len, hinfo);
+	else
+		ext4fs_dirhash(dir, iname->name, iname->len, hinfo);
+	return 0;
 }
 #endif
 
@@ -1339,14 +1403,11 @@ void ext4_fname_setup_ci_filename(struct inode *dir, const struct qstr *iname,
  *
  * Return: %true if the directory entry matches, otherwise %false.
  */
-static inline bool ext4_match(const struct inode *parent,
+static bool ext4_match(struct inode *parent,
 			      const struct ext4_filename *fname,
-			      const struct ext4_dir_entry_2 *de)
+			      struct ext4_dir_entry_2 *de)
 {
 	struct fscrypt_name f;
-#ifdef CONFIG_UNICODE
-	const struct qstr entry = {.name = de->name, .len = de->name_len};
-#endif
 
 	if (!de->inode)
 		return false;
@@ -1358,14 +1419,24 @@ static inline bool ext4_match(const struct inode *parent,
 #endif
 
 #ifdef CONFIG_UNICODE
-	if (EXT4_SB(parent->i_sb)->s_encoding && IS_CASEFOLDED(parent)) {
+	if (parent->i_sb->s_encoding && IS_CASEFOLDED(parent) &&
+	    (!IS_ENCRYPTED(parent) || fscrypt_has_encryption_key(parent))) {
 		if (fname->cf_name.name) {
 			struct qstr cf = {.name = fname->cf_name.name,
 					  .len = fname->cf_name.len};
-			return !ext4_ci_compare(parent, &cf, &entry, true);
+			if (IS_ENCRYPTED(parent)) {
+				if (fname->hinfo.hash != EXT4_DIRENT_HASH(de) ||
+					fname->hinfo.minor_hash !=
+						EXT4_DIRENT_MINOR_HASH(de)) {
+
+					return 0;
+				}
+			}
+			return !ext4_ci_compare(parent, &cf, de->name,
+							de->name_len, true);
 		}
-		return !ext4_ci_compare(parent, fname->usr_fname, &entry,
-					false);
+		return !ext4_ci_compare(parent, fname->usr_fname, de->name,
+						de->name_len, false);
 	}
 #endif
 
@@ -1377,7 +1448,8 @@ static inline bool ext4_match(const struct inode *parent,
  */
 int ext4_search_dir(struct buffer_head *bh, char *search_buf, int buf_size,
 		    struct inode *dir, struct ext4_filename *fname,
-		    unsigned int offset, struct ext4_dir_entry_2 **res_dir)
+		    ext4_lblk_t lblk, unsigned int offset,
+		    struct ext4_dir_entry_2 **res_dir)
 {
 	struct ext4_dir_entry_2 * de;
 	char * dlimit;
@@ -1393,7 +1465,7 @@ int ext4_search_dir(struct buffer_head *bh, char *search_buf, int buf_size,
 			/* found a match - just to be sure, do
 			 * a full check */
 			if (ext4_check_dir_entry(dir, NULL, de, bh, search_buf,
-						 buf_size, offset))
+						 buf_size, lblk, offset))
 				return -1;
 			*res_dir = de;
 			return 1;
@@ -1439,7 +1511,7 @@ static int is_dx_internal_node(struct inode *dir, ext4_lblk_t block,
 static struct buffer_head *__ext4_find_entry(struct inode *dir,
 					     struct ext4_filename *fname,
 					     struct ext4_dir_entry_2 **res_dir,
-					     int *inlined)
+					     int *inlined, ext4_lblk_t *lblk)
 {
 	struct super_block *sb;
 	struct buffer_head *bh_use[NAMEI_RA_SIZE];
@@ -1463,6 +1535,8 @@ static struct buffer_head *__ext4_find_entry(struct inode *dir,
 		int has_inline_data = 1;
 		ret = ext4_find_inline_entry(dir, fname, res_dir,
 					     &has_inline_data);
+		if (lblk)
+			*lblk = 0;
 		if (has_inline_data) {
 			if (inlined)
 				*inlined = 1;
@@ -1481,7 +1555,7 @@ static struct buffer_head *__ext4_find_entry(struct inode *dir,
 		goto restart;
 	}
 	if (is_dx(dir)) {
-		ret = ext4_dx_find_entry(dir, fname, res_dir);
+		ret = ext4_dx_find_entry(dir, fname, res_dir, lblk);
 		/*
 		 * On success, or if the error was file not found,
 		 * return.  Otherwise, fall back to doing a search the
@@ -1545,9 +1619,11 @@ static struct buffer_head *__ext4_find_entry(struct inode *dir,
 			goto cleanup_and_exit;
 		}
 		set_buffer_verified(bh);
-		i = search_dirblock(bh, dir, fname,
+		i = search_dirblock(bh, dir, fname, block,
 			    block << EXT4_BLOCK_SIZE_BITS(sb), res_dir);
 		if (i == 1) {
+			if (lblk)
+				*lblk = block;
 			EXT4_I(dir)->i_dir_start_lookup = block;
 			ret = bh;
 			goto cleanup_and_exit;
@@ -1582,7 +1658,7 @@ static struct buffer_head *__ext4_find_entry(struct inode *dir,
 static struct buffer_head *ext4_find_entry(struct inode *dir,
 					   const struct qstr *d_name,
 					   struct ext4_dir_entry_2 **res_dir,
-					   int *inlined)
+					   int *inlined, ext4_lblk_t *lblk)
 {
 	int err;
 	struct ext4_filename fname;
@@ -1594,7 +1670,7 @@ static struct buffer_head *ext4_find_entry(struct inode *dir,
 	if (err)
 		return ERR_PTR(err);
 
-	bh = __ext4_find_entry(dir, &fname, res_dir, inlined);
+	bh = __ext4_find_entry(dir, &fname, res_dir, inlined, lblk);
 
 	ext4_fname_free_filename(&fname);
 	return bh;
@@ -1609,12 +1685,13 @@ static struct buffer_head *ext4_lookup_entry(struct inode *dir,
 	struct buffer_head *bh;
 
 	err = ext4_fname_prepare_lookup(dir, dentry, &fname);
+	generic_set_encrypted_ci_d_ops(dentry);
 	if (err == -ENOENT)
 		return NULL;
 	if (err)
 		return ERR_PTR(err);
 
-	bh = __ext4_find_entry(dir, &fname, res_dir, NULL);
+	bh = __ext4_find_entry(dir, &fname, res_dir, NULL, NULL);
 
 	ext4_fname_free_filename(&fname);
 	return bh;
@@ -1622,7 +1699,7 @@ static struct buffer_head *ext4_lookup_entry(struct inode *dir,
 
 static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
 			struct ext4_filename *fname,
-			struct ext4_dir_entry_2 **res_dir)
+			struct ext4_dir_entry_2 **res_dir, ext4_lblk_t *lblk)
 {
 	struct super_block * sb = dir->i_sb;
 	struct dx_frame frames[EXT4_HTREE_LEVEL], *frame;
@@ -1638,11 +1715,13 @@ static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
 		return (struct buffer_head *) frame;
 	do {
 		block = dx_get_block(frame->at);
+		if (lblk)
+			*lblk = block;
 		bh = ext4_read_dirblock(dir, block, DIRENT_HTREE);
 		if (IS_ERR(bh))
 			goto errout;
 
-		retval = search_dirblock(bh, dir, fname,
+		retval = search_dirblock(bh, dir, fname, block,
 					 block << EXT4_BLOCK_SIZE_BITS(sb),
 					 res_dir);
 		if (retval == 1)
@@ -1737,7 +1816,7 @@ struct dentry *ext4_get_parent(struct dentry *child)
 	struct ext4_dir_entry_2 * de;
 	struct buffer_head *bh;
 
-	bh = ext4_find_entry(d_inode(child), &dotdot, &de, NULL);
+	bh = ext4_find_entry(d_inode(child), &dotdot, &de, NULL, NULL);
 	if (IS_ERR(bh))
 		return ERR_CAST(bh);
 	if (!bh)
@@ -1759,7 +1838,8 @@ struct dentry *ext4_get_parent(struct dentry *child)
  * Returns pointer to last entry moved.
  */
 static struct ext4_dir_entry_2 *
-dx_move_dirents(char *from, char *to, struct dx_map_entry *map, int count,
+dx_move_dirents(struct inode *dir, char *from, char *to,
+		struct dx_map_entry *map, int count,
 		unsigned blocksize)
 {
 	unsigned rec_len = 0;
@@ -1767,7 +1847,8 @@ dx_move_dirents(char *from, char *to, struct dx_map_entry *map, int count,
 	while (count--) {
 		struct ext4_dir_entry_2 *de = (struct ext4_dir_entry_2 *)
 						(from + (map->offs<<2));
-		rec_len = EXT4_DIR_REC_LEN(de->name_len);
+		rec_len = ext4_dir_rec_len(de->name_len, dir);
+
 		memcpy (to, de, rec_len);
 		((struct ext4_dir_entry_2 *) to)->rec_len =
 				ext4_rec_len_to_disk(rec_len, blocksize);
@@ -1782,7 +1863,8 @@ dx_move_dirents(char *from, char *to, struct dx_map_entry *map, int count,
  * Compact each dir entry in the range to the minimal rec_len.
  * Returns pointer to last entry in range.
  */
-static struct ext4_dir_entry_2* dx_pack_dirents(char *base, unsigned blocksize)
+static struct ext4_dir_entry_2 *dx_pack_dirents(struct inode *dir, char *base,
+							unsigned int blocksize)
 {
 	struct ext4_dir_entry_2 *next, *to, *prev, *de = (struct ext4_dir_entry_2 *) base;
 	unsigned rec_len = 0;
@@ -1791,7 +1873,7 @@ static struct ext4_dir_entry_2* dx_pack_dirents(char *base, unsigned blocksize)
 	while ((char*)de < base + blocksize) {
 		next = ext4_next_entry(de, blocksize);
 		if (de->inode && de->name_len) {
-			rec_len = EXT4_DIR_REC_LEN(de->name_len);
+			rec_len = ext4_dir_rec_len(de->name_len, dir);
 			if (de > to)
 				memmove(to, de, rec_len);
 			to->rec_len = ext4_rec_len_to_disk(rec_len, blocksize);
@@ -1809,13 +1891,12 @@ static struct ext4_dir_entry_2* dx_pack_dirents(char *base, unsigned blocksize)
  * Returns pointer to de in block into which the new entry will be inserted.
  */
 static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
-			struct buffer_head **bh,struct dx_frame *frame,
-			struct dx_hash_info *hinfo)
+			struct buffer_head **bh, struct dx_frame *frame,
+			struct dx_hash_info *hinfo, ext4_lblk_t *newblock)
 {
 	unsigned blocksize = dir->i_sb->s_blocksize;
 	unsigned count, continued;
 	struct buffer_head *bh2;
-	ext4_lblk_t newblock;
 	u32 hash2;
 	struct dx_map_entry *map;
 	char *data1 = (*bh)->b_data, *data2;
@@ -1827,7 +1908,7 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
 	if (ext4_has_metadata_csum(dir->i_sb))
 		csum_size = sizeof(struct ext4_dir_entry_tail);
 
-	bh2 = ext4_append(handle, dir, &newblock);
+	bh2 = ext4_append(handle, dir, newblock);
 	if (IS_ERR(bh2)) {
 		brelse(*bh);
 		*bh = NULL;
@@ -1881,9 +1962,9 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
 					hash2, split, count-split));
 
 	/* Fancy dance to stay within two buffers */
-	de2 = dx_move_dirents(data1, data2, map + split, count - split,
+	de2 = dx_move_dirents(dir, data1, data2, map + split, count - split,
 			      blocksize);
-	de = dx_pack_dirents(data1, blocksize);
+	de = dx_pack_dirents(dir, data1, blocksize);
 	de->rec_len = ext4_rec_len_to_disk(data1 + (blocksize - csum_size) -
 					   (char *) de,
 					   blocksize);
@@ -1905,7 +1986,7 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
 		swap(*bh, bh2);
 		de = de2;
 	}
-	dx_insert_block(frame, hash2 + continued, newblock);
+	dx_insert_block(frame, hash2 + continued, *newblock);
 	err = ext4_handle_dirty_dirblock(handle, dir, bh2);
 	if (err)
 		goto journal_error;
@@ -1925,13 +2006,14 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
 }
 
 int ext4_find_dest_de(struct inode *dir, struct inode *inode,
+		      ext4_lblk_t lblk,
 		      struct buffer_head *bh,
 		      void *buf, int buf_size,
 		      struct ext4_filename *fname,
 		      struct ext4_dir_entry_2 **dest_de)
 {
 	struct ext4_dir_entry_2 *de;
-	unsigned short reclen = EXT4_DIR_REC_LEN(fname_len(fname));
+	unsigned short reclen = ext4_dir_rec_len(fname_len(fname), dir);
 	int nlen, rlen;
 	unsigned int offset = 0;
 	char *top;
@@ -1940,11 +2022,11 @@ int ext4_find_dest_de(struct inode *dir, struct inode *inode,
 	top = buf + buf_size - reclen;
 	while ((char *) de <= top) {
 		if (ext4_check_dir_entry(dir, NULL, de, bh,
-					 buf, buf_size, offset))
+					 buf, buf_size, lblk, offset))
 			return -EFSCORRUPTED;
 		if (ext4_match(dir, fname, de))
 			return -EEXIST;
-		nlen = EXT4_DIR_REC_LEN(de->name_len);
+		nlen = ext4_dir_rec_len(de->name_len, dir);
 		rlen = ext4_rec_len_from_disk(de->rec_len, buf_size);
 		if ((de->inode ? rlen - nlen : rlen) >= reclen)
 			break;
@@ -1958,7 +2040,8 @@ int ext4_find_dest_de(struct inode *dir, struct inode *inode,
 	return 0;
 }
 
-void ext4_insert_dentry(struct inode *inode,
+void ext4_insert_dentry(struct inode *dir,
+			struct inode *inode,
 			struct ext4_dir_entry_2 *de,
 			int buf_size,
 			struct ext4_filename *fname)
@@ -1966,7 +2049,7 @@ void ext4_insert_dentry(struct inode *inode,
 
 	int nlen, rlen;
 
-	nlen = EXT4_DIR_REC_LEN(de->name_len);
+	nlen = ext4_dir_rec_len(de->name_len, dir);
 	rlen = ext4_rec_len_from_disk(de->rec_len, buf_size);
 	if (de->inode) {
 		struct ext4_dir_entry_2 *de1 =
@@ -1980,6 +2063,13 @@ void ext4_insert_dentry(struct inode *inode,
 	ext4_set_de_type(inode->i_sb, de, inode->i_mode);
 	de->name_len = fname_len(fname);
 	memcpy(de->name, fname_name(fname), fname_len(fname));
+	if (ext4_hash_in_dirent(dir)) {
+		struct dx_hash_info *hinfo = &fname->hinfo;
+
+		EXT4_DIRENT_HASHES(de)->hash = cpu_to_le32(hinfo->hash);
+		EXT4_DIRENT_HASHES(de)->minor_hash =
+						cpu_to_le32(hinfo->minor_hash);
+	}
 }
 
 /*
@@ -1993,6 +2083,7 @@ void ext4_insert_dentry(struct inode *inode,
 static int add_dirent_to_buf(handle_t *handle, struct ext4_filename *fname,
 			     struct inode *dir,
 			     struct inode *inode, struct ext4_dir_entry_2 *de,
+			     ext4_lblk_t blk,
 			     struct buffer_head *bh)
 {
 	unsigned int	blocksize = dir->i_sb->s_blocksize;
@@ -2003,7 +2094,7 @@ static int add_dirent_to_buf(handle_t *handle, struct ext4_filename *fname,
 		csum_size = sizeof(struct ext4_dir_entry_tail);
 
 	if (!de) {
-		err = ext4_find_dest_de(dir, inode, bh, bh->b_data,
+		err = ext4_find_dest_de(dir, inode, blk, bh, bh->b_data,
 					blocksize - csum_size, fname, &de);
 		if (err)
 			return err;
@@ -2016,7 +2107,7 @@ static int add_dirent_to_buf(handle_t *handle, struct ext4_filename *fname,
 	}
 
 	/* By now the buffer is marked for journaling */
-	ext4_insert_dentry(inode, de, blocksize, fname);
+	ext4_insert_dentry(dir, inode, de, blocksize, fname);
 
 	/*
 	 * XXX shouldn't update any times until successful
@@ -2108,11 +2199,16 @@ static int make_indexed_dir(handle_t *handle, struct ext4_filename *fname,
 
 	/* Initialize the root; the dot dirents already exist */
 	de = (struct ext4_dir_entry_2 *) (&root->dotdot);
-	de->rec_len = ext4_rec_len_to_disk(blocksize - EXT4_DIR_REC_LEN(2),
-					   blocksize);
+	de->rec_len = ext4_rec_len_to_disk(
+			blocksize - ext4_dir_rec_len(2, NULL), blocksize);
 	memset (&root->info, 0, sizeof(root->info));
 	root->info.info_length = sizeof(root->info);
-	root->info.hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version;
+	if (ext4_hash_in_dirent(dir))
+		root->info.hash_version = DX_HASH_SIPHASH;
+	else
+		root->info.hash_version =
+				EXT4_SB(dir->i_sb)->s_def_hash_version;
+
 	entries = root->entries;
 	dx_set_block(entries, 1);
 	dx_set_count(entries, 1);
@@ -2123,7 +2219,11 @@ static int make_indexed_dir(handle_t *handle, struct ext4_filename *fname,
 	if (fname->hinfo.hash_version <= DX_HASH_TEA)
 		fname->hinfo.hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned;
 	fname->hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed;
-	ext4fs_dirhash(dir, fname_name(fname), fname_len(fname), &fname->hinfo);
+
+	/* casefolded encrypted hashes are computed on fname setup */
+	if (!ext4_hash_in_dirent(dir))
+		ext4fs_dirhash(dir, fname_name(fname),
+				fname_len(fname), &fname->hinfo);
 
 	memset(frames, 0, sizeof(frames));
 	frame = frames;
@@ -2138,13 +2238,13 @@ static int make_indexed_dir(handle_t *handle, struct ext4_filename *fname,
 	if (retval)
 		goto out_frames;	
 
-	de = do_split(handle,dir, &bh2, frame, &fname->hinfo);
+	de = do_split(handle, dir, &bh2, frame, &fname->hinfo, &block);
 	if (IS_ERR(de)) {
 		retval = PTR_ERR(de);
 		goto out_frames;
 	}
 
-	retval = add_dirent_to_buf(handle, fname, dir, inode, de, bh2);
+	retval = add_dirent_to_buf(handle, fname, dir, inode, de, block, bh2);
 out_frames:
 	/*
 	 * Even if the block split failed, we have to properly write
@@ -2175,7 +2275,6 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
 	struct buffer_head *bh = NULL;
 	struct ext4_dir_entry_2 *de;
 	struct super_block *sb;
-	struct ext4_sb_info *sbi;
 	struct ext4_filename fname;
 	int	retval;
 	int	dx_fallback=0;
@@ -2187,7 +2286,6 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
 		csum_size = sizeof(struct ext4_dir_entry_tail);
 
 	sb = dir->i_sb;
-	sbi = EXT4_SB(sb);
 	blocksize = sb->s_blocksize;
 	if (!dentry->d_name.len)
 		return -EINVAL;
@@ -2196,8 +2294,8 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
 		return -ENOKEY;
 
 #ifdef CONFIG_UNICODE
-	if (ext4_has_strict_mode(sbi) && IS_CASEFOLDED(dir) &&
-	    sbi->s_encoding && utf8_validate(sbi->s_encoding, &dentry->d_name))
+	if (sb_has_strict_encoding(sb) && IS_CASEFOLDED(dir) &&
+	    sb->s_encoding && utf8_validate(sb->s_encoding, &dentry->d_name))
 		return -EINVAL;
 #endif
 
@@ -2244,7 +2342,7 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
 			goto out;
 		}
 		retval = add_dirent_to_buf(handle, &fname, dir, inode,
-					   NULL, bh);
+					   NULL, block, bh);
 		if (retval != -ENOSPC)
 			goto out;
 
@@ -2271,7 +2369,7 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
 	if (csum_size)
 		ext4_initialize_dirent_tail(bh, blocksize);
 
-	retval = add_dirent_to_buf(handle, &fname, dir, inode, de, bh);
+	retval = add_dirent_to_buf(handle, &fname, dir, inode, de, block, bh);
 out:
 	ext4_fname_free_filename(&fname);
 	brelse(bh);
@@ -2293,6 +2391,7 @@ static int ext4_dx_add_entry(handle_t *handle, struct ext4_filename *fname,
 	struct ext4_dir_entry_2 *de;
 	int restart;
 	int err;
+	ext4_lblk_t lblk;
 
 again:
 	restart = 0;
@@ -2301,7 +2400,8 @@ static int ext4_dx_add_entry(handle_t *handle, struct ext4_filename *fname,
 		return PTR_ERR(frame);
 	entries = frame->entries;
 	at = frame->at;
-	bh = ext4_read_dirblock(dir, dx_get_block(frame->at), DIRENT_HTREE);
+	lblk = dx_get_block(frame->at);
+	bh = ext4_read_dirblock(dir, lblk, DIRENT_HTREE);
 	if (IS_ERR(bh)) {
 		err = PTR_ERR(bh);
 		bh = NULL;
@@ -2313,7 +2413,7 @@ static int ext4_dx_add_entry(handle_t *handle, struct ext4_filename *fname,
 	if (err)
 		goto journal_error;
 
-	err = add_dirent_to_buf(handle, fname, dir, inode, NULL, bh);
+	err = add_dirent_to_buf(handle, fname, dir, inode, NULL, lblk, bh);
 	if (err != -ENOSPC)
 		goto cleanup;
 
@@ -2433,12 +2533,12 @@ static int ext4_dx_add_entry(handle_t *handle, struct ext4_filename *fname,
 			goto journal_error;
 		}
 	}
-	de = do_split(handle, dir, &bh, frame, &fname->hinfo);
+	de = do_split(handle, dir, &bh, frame, &fname->hinfo, &lblk);
 	if (IS_ERR(de)) {
 		err = PTR_ERR(de);
 		goto cleanup;
 	}
-	err = add_dirent_to_buf(handle, fname, dir, inode, de, bh);
+	err = add_dirent_to_buf(handle, fname, dir, inode, de, lblk, bh);
 	goto cleanup;
 
 journal_error:
@@ -2461,6 +2561,7 @@ static int ext4_dx_add_entry(handle_t *handle, struct ext4_filename *fname,
 int ext4_generic_delete_entry(handle_t *handle,
 			      struct inode *dir,
 			      struct ext4_dir_entry_2 *de_del,
+			      ext4_lblk_t lblk,
 			      struct buffer_head *bh,
 			      void *entry_buf,
 			      int buf_size,
@@ -2475,7 +2576,7 @@ int ext4_generic_delete_entry(handle_t *handle,
 	de = (struct ext4_dir_entry_2 *)entry_buf;
 	while (i < buf_size - csum_size) {
 		if (ext4_check_dir_entry(dir, NULL, de, bh,
-					 entry_buf, buf_size, i))
+					 entry_buf, buf_size, lblk, i))
 			return -EFSCORRUPTED;
 		if (de == de_del)  {
 			if (pde)
@@ -2500,6 +2601,7 @@ int ext4_generic_delete_entry(handle_t *handle,
 static int ext4_delete_entry(handle_t *handle,
 			     struct inode *dir,
 			     struct ext4_dir_entry_2 *de_del,
+			     ext4_lblk_t lblk,
 			     struct buffer_head *bh)
 {
 	int err, csum_size = 0;
@@ -2520,7 +2622,7 @@ static int ext4_delete_entry(handle_t *handle,
 	if (unlikely(err))
 		goto out;
 
-	err = ext4_generic_delete_entry(handle, dir, de_del,
+	err = ext4_generic_delete_entry(handle, dir, de_del, lblk,
 					bh, bh->b_data,
 					dir->i_sb->s_blocksize, csum_size);
 	if (err)
@@ -2703,7 +2805,7 @@ struct ext4_dir_entry_2 *ext4_init_dot_dotdot(struct inode *inode,
 {
 	de->inode = cpu_to_le32(inode->i_ino);
 	de->name_len = 1;
-	de->rec_len = ext4_rec_len_to_disk(EXT4_DIR_REC_LEN(de->name_len),
+	de->rec_len = ext4_rec_len_to_disk(ext4_dir_rec_len(de->name_len, NULL),
 					   blocksize);
 	strcpy(de->name, ".");
 	ext4_set_de_type(inode->i_sb, de, S_IFDIR);
@@ -2713,11 +2815,12 @@ struct ext4_dir_entry_2 *ext4_init_dot_dotdot(struct inode *inode,
 	de->name_len = 2;
 	if (!dotdot_real_len)
 		de->rec_len = ext4_rec_len_to_disk(blocksize -
-					(csum_size + EXT4_DIR_REC_LEN(1)),
+					(csum_size + ext4_dir_rec_len(1, NULL)),
 					blocksize);
 	else
 		de->rec_len = ext4_rec_len_to_disk(
-				EXT4_DIR_REC_LEN(de->name_len), blocksize);
+					ext4_dir_rec_len(de->name_len, NULL),
+					blocksize);
 	strcpy(de->name, "..");
 	ext4_set_de_type(inode->i_sb, de, S_IFDIR);
 
@@ -2842,7 +2945,8 @@ bool ext4_empty_dir(struct inode *inode)
 	}
 
 	sb = inode->i_sb;
-	if (inode->i_size < EXT4_DIR_REC_LEN(1) + EXT4_DIR_REC_LEN(2)) {
+	if (inode->i_size < ext4_dir_rec_len(1, NULL) +
+					ext4_dir_rec_len(2, NULL)) {
 		EXT4_ERROR_INODE(inode, "invalid size");
 		return true;
 	}
@@ -2854,7 +2958,7 @@ bool ext4_empty_dir(struct inode *inode)
 		return true;
 
 	de = (struct ext4_dir_entry_2 *) bh->b_data;
-	if (ext4_check_dir_entry(inode, NULL, de, bh, bh->b_data, bh->b_size,
+	if (ext4_check_dir_entry(inode, NULL, de, bh, bh->b_data, bh->b_size, 0,
 				 0) ||
 	    le32_to_cpu(de->inode) != inode->i_ino || strcmp(".", de->name)) {
 		ext4_warning_inode(inode, "directory missing '.'");
@@ -2863,7 +2967,7 @@ bool ext4_empty_dir(struct inode *inode)
 	}
 	offset = ext4_rec_len_from_disk(de->rec_len, sb->s_blocksize);
 	de = ext4_next_entry(de, sb->s_blocksize);
-	if (ext4_check_dir_entry(inode, NULL, de, bh, bh->b_data, bh->b_size,
+	if (ext4_check_dir_entry(inode, NULL, de, bh, bh->b_data, bh->b_size, 0,
 				 offset) ||
 	    le32_to_cpu(de->inode) == 0 || strcmp("..", de->name)) {
 		ext4_warning_inode(inode, "directory missing '..'");
@@ -2887,7 +2991,7 @@ bool ext4_empty_dir(struct inode *inode)
 		de = (struct ext4_dir_entry_2 *) (bh->b_data +
 					(offset & (sb->s_blocksize - 1)));
 		if (ext4_check_dir_entry(inode, NULL, de, bh,
-					 bh->b_data, bh->b_size, offset)) {
+					 bh->b_data, bh->b_size, 0, offset)) {
 			offset = (offset | (sb->s_blocksize - 1)) + 1;
 			continue;
 		}
@@ -3082,6 +3186,8 @@ static int ext4_rmdir(struct inode *dir, struct dentry *dentry)
 	struct buffer_head *bh;
 	struct ext4_dir_entry_2 *de;
 	handle_t *handle = NULL;
+	ext4_lblk_t lblk;
+
 
 	if (unlikely(ext4_forced_shutdown(EXT4_SB(dir->i_sb))))
 		return -EIO;
@@ -3096,7 +3202,7 @@ static int ext4_rmdir(struct inode *dir, struct dentry *dentry)
 		return retval;
 
 	retval = -ENOENT;
-	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL);
+	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL, &lblk);
 	if (IS_ERR(bh))
 		return PTR_ERR(bh);
 	if (!bh)
@@ -3123,7 +3229,7 @@ static int ext4_rmdir(struct inode *dir, struct dentry *dentry)
 	if (IS_DIRSYNC(dir))
 		ext4_handle_sync(handle);
 
-	retval = ext4_delete_entry(handle, dir, de, bh);
+	retval = ext4_delete_entry(handle, dir, de, lblk, bh);
 	if (retval)
 		goto end_rmdir;
 	if (!EXT4_DIR_LINK_EMPTY(inode))
@@ -3169,6 +3275,7 @@ static int ext4_unlink(struct inode *dir, struct dentry *dentry)
 	struct buffer_head *bh;
 	struct ext4_dir_entry_2 *de;
 	handle_t *handle = NULL;
+	ext4_lblk_t lblk;
 
 	if (unlikely(ext4_forced_shutdown(EXT4_SB(dir->i_sb))))
 		return -EIO;
@@ -3184,7 +3291,7 @@ static int ext4_unlink(struct inode *dir, struct dentry *dentry)
 		return retval;
 
 	retval = -ENOENT;
-	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL);
+	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL, &lblk);
 	if (IS_ERR(bh))
 		return PTR_ERR(bh);
 	if (!bh)
@@ -3207,7 +3314,7 @@ static int ext4_unlink(struct inode *dir, struct dentry *dentry)
 	if (IS_DIRSYNC(dir))
 		ext4_handle_sync(handle);
 
-	retval = ext4_delete_entry(handle, dir, de, bh);
+	retval = ext4_delete_entry(handle, dir, de, lblk, bh);
 	if (retval)
 		goto end_unlink;
 	dir->i_ctime = dir->i_mtime = current_time(dir);
@@ -3469,6 +3576,7 @@ struct ext4_renament {
 	int dir_nlink_delta;
 
 	/* entry for "dentry" */
+	ext4_lblk_t lblk;
 	struct buffer_head *bh;
 	struct ext4_dir_entry_2 *de;
 	int inlined;
@@ -3554,12 +3662,13 @@ static int ext4_find_delete_entry(handle_t *handle, struct inode *dir,
 	int retval = -ENOENT;
 	struct buffer_head *bh;
 	struct ext4_dir_entry_2 *de;
+	ext4_lblk_t lblk;
 
-	bh = ext4_find_entry(dir, d_name, &de, NULL);
+	bh = ext4_find_entry(dir, d_name, &de, NULL, &lblk);
 	if (IS_ERR(bh))
 		return PTR_ERR(bh);
 	if (bh) {
-		retval = ext4_delete_entry(handle, dir, de, bh);
+		retval = ext4_delete_entry(handle, dir, de, lblk, bh);
 		brelse(bh);
 	}
 	return retval;
@@ -3583,7 +3692,8 @@ static void ext4_rename_delete(handle_t *handle, struct ext4_renament *ent,
 		retval = ext4_find_delete_entry(handle, ent->dir,
 						&ent->dentry->d_name);
 	} else {
-		retval = ext4_delete_entry(handle, ent->dir, ent->de, ent->bh);
+		retval = ext4_delete_entry(handle, ent->dir, ent->de,
+						ent->lblk, ent->bh);
 		if (retval == -ENOENT) {
 			retval = ext4_find_delete_entry(handle, ent->dir,
 							&ent->dentry->d_name);
@@ -3696,7 +3806,8 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry,
 			return retval;
 	}
 
-	old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL);
+	old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL,
+				&old.lblk);
 	if (IS_ERR(old.bh))
 		return PTR_ERR(old.bh);
 	/*
@@ -3710,7 +3821,7 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry,
 		goto end_rename;
 
 	new.bh = ext4_find_entry(new.dir, &new.dentry->d_name,
-				 &new.de, &new.inlined);
+				 &new.de, &new.inlined, NULL);
 	if (IS_ERR(new.bh)) {
 		retval = PTR_ERR(new.bh);
 		new.bh = NULL;
@@ -3894,7 +4005,7 @@ static int ext4_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
 		return retval;
 
 	old.bh = ext4_find_entry(old.dir, &old.dentry->d_name,
-				 &old.de, &old.inlined);
+				 &old.de, &old.inlined, NULL);
 	if (IS_ERR(old.bh))
 		return PTR_ERR(old.bh);
 	/*
@@ -3908,7 +4019,7 @@ static int ext4_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
 		goto end_rename;
 
 	new.bh = ext4_find_entry(new.dir, &new.dentry->d_name,
-				 &new.de, &new.inlined);
+				 &new.de, &new.inlined, NULL);
 	if (IS_ERR(new.bh)) {
 		retval = PTR_ERR(new.bh);
 		new.bh = NULL;
diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
index 2cc9f21..11a50ba 100644
--- a/fs/ext4/page-io.c
+++ b/fs/ext4/page-io.c
@@ -366,6 +366,7 @@ static int io_submit_init_bio(struct ext4_io_submit *io,
 	bio = bio_alloc(GFP_NOIO, BIO_MAX_PAGES);
 	if (!bio)
 		return -ENOMEM;
+	fscrypt_set_bio_crypt_ctx_bh(bio, bh, GFP_NOIO);
 	bio->bi_iter.bi_sector = bh->b_blocknr * (bh->b_size >> 9);
 	bio_set_dev(bio, bh->b_bdev);
 	bio->bi_end_io = ext4_end_bio;
@@ -383,7 +384,8 @@ static int io_submit_add_bh(struct ext4_io_submit *io,
 {
 	int ret;
 
-	if (io->io_bio && bh->b_blocknr != io->io_next_block) {
+	if (io->io_bio && (bh->b_blocknr != io->io_next_block ||
+			   !fscrypt_mergeable_bio_bh(io->io_bio, bh))) {
 submit_and_retry:
 		ext4_io_submit(io);
 	}
@@ -474,7 +476,7 @@ int ext4_bio_write_page(struct ext4_io_submit *io,
 	 * (e.g. holes) to be unnecessarily encrypted, but this is rare and
 	 * can't happen in the common case of blocksize == PAGE_SIZE.
 	 */
-	if (IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode) && nr_to_submit) {
+	if (fscrypt_inode_uses_fs_layer_crypto(inode) && nr_to_submit) {
 		gfp_t gfp_flags = GFP_NOFS;
 		unsigned int enc_bytes = round_up(len, i_blocksize(inode));
 
diff --git a/fs/ext4/readpage.c b/fs/ext4/readpage.c
index a5f55fe..fd1a1e2 100644
--- a/fs/ext4/readpage.c
+++ b/fs/ext4/readpage.c
@@ -46,6 +46,7 @@
 #include <linux/cleancache.h>
 
 #include "ext4.h"
+#include <trace/events/android_fs.h>
 
 #define NUM_PREALLOC_POST_READ_CTXS	128
 
@@ -159,6 +160,17 @@ static bool bio_post_read_required(struct bio *bio)
 	return bio->bi_private && !bio->bi_status;
 }
 
+static void
+ext4_trace_read_completion(struct bio *bio)
+{
+	struct page *first_page = bio->bi_io_vec[0].bv_page;
+
+	if (first_page != NULL)
+		trace_android_fs_dataread_end(first_page->mapping->host,
+					      page_offset(first_page),
+					      bio->bi_iter.bi_size);
+}
+
 /*
  * I/O completion handler for multipage BIOs.
  *
@@ -173,6 +185,9 @@ static bool bio_post_read_required(struct bio *bio)
  */
 static void mpage_end_io(struct bio *bio)
 {
+	if (trace_android_fs_dataread_start_enabled())
+		ext4_trace_read_completion(bio);
+
 	if (bio_post_read_required(bio)) {
 		struct bio_post_read_ctx *ctx = bio->bi_private;
 
@@ -196,7 +211,7 @@ static struct bio_post_read_ctx *get_bio_post_read_ctx(struct inode *inode,
 	unsigned int post_read_steps = 0;
 	struct bio_post_read_ctx *ctx = NULL;
 
-	if (IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode))
+	if (fscrypt_inode_uses_fs_layer_crypto(inode))
 		post_read_steps |= 1 << STEP_DECRYPT;
 
 	if (ext4_need_verity(inode, first_idx))
@@ -222,6 +237,30 @@ static inline loff_t ext4_readpage_limit(struct inode *inode)
 	return i_size_read(inode);
 }
 
+static void
+ext4_submit_bio_read(struct bio *bio)
+{
+	if (trace_android_fs_dataread_start_enabled()) {
+		struct page *first_page = bio->bi_io_vec[0].bv_page;
+
+		if (first_page != NULL) {
+			char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+			path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    first_page->mapping->host);
+			trace_android_fs_dataread_start(
+				first_page->mapping->host,
+				page_offset(first_page),
+				bio->bi_iter.bi_size,
+				current->pid,
+				path,
+				current->comm);
+		}
+	}
+	submit_bio(bio);
+}
+
 int ext4_mpage_readpages(struct address_space *mapping,
 			 struct list_head *pages, struct page *page,
 			 unsigned nr_pages, bool is_readahead)
@@ -233,6 +272,7 @@ int ext4_mpage_readpages(struct address_space *mapping,
 	const unsigned blkbits = inode->i_blkbits;
 	const unsigned blocks_per_page = PAGE_SIZE >> blkbits;
 	const unsigned blocksize = 1 << blkbits;
+	sector_t next_block;
 	sector_t block_in_file;
 	sector_t last_block;
 	sector_t last_block_in_file;
@@ -265,7 +305,8 @@ int ext4_mpage_readpages(struct address_space *mapping,
 		if (page_has_buffers(page))
 			goto confused;
 
-		block_in_file = (sector_t)page->index << (PAGE_SHIFT - blkbits);
+		block_in_file = next_block =
+			(sector_t)page->index << (PAGE_SHIFT - blkbits);
 		last_block = block_in_file + nr_pages * blocks_per_page;
 		last_block_in_file = (ext4_readpage_limit(inode) +
 				      blocksize - 1) >> blkbits;
@@ -365,9 +406,10 @@ int ext4_mpage_readpages(struct address_space *mapping,
 		 * This page will go to BIO.  Do we need to send this
 		 * BIO off first?
 		 */
-		if (bio && (last_block_in_bio != blocks[0] - 1)) {
+		if (bio && (last_block_in_bio != blocks[0] - 1 ||
+			    !fscrypt_mergeable_bio(bio, inode, next_block))) {
 		submit_and_realloc:
-			submit_bio(bio);
+			ext4_submit_bio_read(bio);
 			bio = NULL;
 		}
 		if (bio == NULL) {
@@ -377,6 +419,8 @@ int ext4_mpage_readpages(struct address_space *mapping,
 				min_t(int, nr_pages, BIO_MAX_PAGES));
 			if (!bio)
 				goto set_error_page;
+			fscrypt_set_bio_crypt_ctx(bio, inode, next_block,
+						  GFP_KERNEL);
 			ctx = get_bio_post_read_ctx(inode, bio, page->index);
 			if (IS_ERR(ctx)) {
 				bio_put(bio);
@@ -398,14 +442,14 @@ int ext4_mpage_readpages(struct address_space *mapping,
 		if (((map.m_flags & EXT4_MAP_BOUNDARY) &&
 		     (relative_block == map.m_len)) ||
 		    (first_hole != blocks_per_page)) {
-			submit_bio(bio);
+			ext4_submit_bio_read(bio);
 			bio = NULL;
 		} else
 			last_block_in_bio = blocks[blocks_per_page - 1];
 		goto next_page;
 	confused:
 		if (bio) {
-			submit_bio(bio);
+			ext4_submit_bio_read(bio);
 			bio = NULL;
 		}
 		if (!PageUptodate(page))
@@ -418,7 +462,7 @@ int ext4_mpage_readpages(struct address_space *mapping,
 	}
 	BUG_ON(pages && !list_empty(pages));
 	if (bio)
-		submit_bio(bio);
+		ext4_submit_bio_read(bio);
 	return 0;
 }
 
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 0656846..cbca96b 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -1064,8 +1064,9 @@ static void ext4_put_super(struct super_block *sb)
 		crypto_free_shash(sbi->s_chksum_driver);
 	kfree(sbi->s_blockgroup_lock);
 	fs_put_dax(sbi->s_daxdev);
+	fscrypt_free_dummy_policy(&sbi->s_dummy_enc_policy);
 #ifdef CONFIG_UNICODE
-	utf8_unload(sbi->s_encoding);
+	utf8_unload(sb->s_encoding);
 #endif
 	kfree(sbi);
 }
@@ -1349,18 +1350,32 @@ static int ext4_set_context(struct inode *inode, const void *ctx, size_t len,
 	return res;
 }
 
-static bool ext4_dummy_context(struct inode *inode)
+static const union fscrypt_policy *ext4_get_dummy_policy(struct super_block *sb)
 {
-	return DUMMY_ENCRYPTION_ENABLED(EXT4_SB(inode->i_sb));
+	return EXT4_SB(sb)->s_dummy_enc_policy.policy;
+}
+
+static bool ext4_has_stable_inodes(struct super_block *sb)
+{
+	return ext4_has_feature_stable_inodes(sb);
+}
+
+static void ext4_get_ino_and_lblk_bits(struct super_block *sb,
+				       int *ino_bits_ret, int *lblk_bits_ret)
+{
+	*ino_bits_ret = 8 * sizeof(EXT4_SB(sb)->s_es->s_inodes_count);
+	*lblk_bits_ret = 8 * sizeof(ext4_lblk_t);
 }
 
 static const struct fscrypt_operations ext4_cryptops = {
 	.key_prefix		= "ext4:",
 	.get_context		= ext4_get_context,
 	.set_context		= ext4_set_context,
-	.dummy_context		= ext4_dummy_context,
+	.get_dummy_policy	= ext4_get_dummy_policy,
 	.empty_dir		= ext4_empty_dir,
 	.max_namelen		= EXT4_NAME_LEN,
+	.has_stable_inodes	= ext4_has_stable_inodes,
+	.get_ino_and_lblk_bits	= ext4_get_ino_and_lblk_bits,
 };
 #endif
 
@@ -1456,6 +1471,7 @@ enum {
 	Opt_journal_path, Opt_journal_checksum, Opt_journal_async_commit,
 	Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback,
 	Opt_data_err_abort, Opt_data_err_ignore, Opt_test_dummy_encryption,
+	Opt_inlinecrypt,
 	Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
 	Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_jqfmt_vfsv1, Opt_quota,
 	Opt_noquota, Opt_barrier, Opt_nobarrier, Opt_err,
@@ -1551,7 +1567,9 @@ static const match_table_t tokens = {
 	{Opt_init_itable, "init_itable"},
 	{Opt_noinit_itable, "noinit_itable"},
 	{Opt_max_dir_size_kb, "max_dir_size_kb=%u"},
+	{Opt_test_dummy_encryption, "test_dummy_encryption=%s"},
 	{Opt_test_dummy_encryption, "test_dummy_encryption"},
+	{Opt_inlinecrypt, "inlinecrypt"},
 	{Opt_nombcache, "nombcache"},
 	{Opt_nombcache, "no_mbcache"},	/* for backward compatibility */
 	{Opt_removed, "check=none"},	/* mount option from ext2/3 */
@@ -1762,7 +1780,7 @@ static const struct mount_opts {
 	{Opt_jqfmt_vfsv0, QFMT_VFS_V0, MOPT_QFMT},
 	{Opt_jqfmt_vfsv1, QFMT_VFS_V1, MOPT_QFMT},
 	{Opt_max_dir_size_kb, 0, MOPT_GTE0},
-	{Opt_test_dummy_encryption, 0, MOPT_GTE0},
+	{Opt_test_dummy_encryption, 0, MOPT_STRING},
 	{Opt_nombcache, EXT4_MOUNT_NO_MBCACHE, MOPT_SET},
 	{Opt_err, 0, 0}
 };
@@ -1797,6 +1815,49 @@ static int ext4_sb_read_encoding(const struct ext4_super_block *es,
 }
 #endif
 
+static int ext4_set_test_dummy_encryption(struct super_block *sb,
+					  const char *opt,
+					  const substring_t *arg,
+					  bool is_remount)
+{
+#ifdef CONFIG_FS_ENCRYPTION
+	struct ext4_sb_info *sbi = EXT4_SB(sb);
+	int err;
+
+	/*
+	 * This mount option is just for testing, and it's not worthwhile to
+	 * implement the extra complexity (e.g. RCU protection) that would be
+	 * needed to allow it to be set or changed during remount.  We do allow
+	 * it to be specified during remount, but only if there is no change.
+	 */
+	if (is_remount && !sbi->s_dummy_enc_policy.policy) {
+		ext4_msg(sb, KERN_WARNING,
+			 "Can't set test_dummy_encryption on remount");
+		return -1;
+	}
+	err = fscrypt_set_test_dummy_encryption(sb, arg->from,
+						&sbi->s_dummy_enc_policy);
+	if (err) {
+		if (err == -EEXIST)
+			ext4_msg(sb, KERN_WARNING,
+				 "Can't change test_dummy_encryption on remount");
+		else if (err == -EINVAL)
+			ext4_msg(sb, KERN_WARNING,
+				 "Value of option \"%s\" is unrecognized", opt);
+		else
+			ext4_msg(sb, KERN_WARNING,
+				 "Error processing option \"%s\" [%d]",
+				 opt, err);
+		return -1;
+	}
+	ext4_msg(sb, KERN_WARNING, "Test dummy encryption mode enabled");
+#else
+	ext4_msg(sb, KERN_WARNING,
+		 "Test dummy encryption mount option ignored");
+#endif
+	return 1;
+}
+
 static int handle_mount_opt(struct super_block *sb, char *opt, int token,
 			    substring_t *args, unsigned long *journal_devnum,
 			    unsigned int *journal_ioprio, int is_remount)
@@ -1839,6 +1900,13 @@ static int handle_mount_opt(struct super_block *sb, char *opt, int token,
 	case Opt_nolazytime:
 		sb->s_flags &= ~SB_LAZYTIME;
 		return 1;
+	case Opt_inlinecrypt:
+#ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
+		sb->s_flags |= SB_INLINECRYPT;
+#else
+		ext4_msg(sb, KERN_ERR, "inline encryption not supported");
+#endif
+		return 1;
 	}
 
 	for (m = ext4_mount_opts; m->token != Opt_err; m++)
@@ -1993,14 +2061,8 @@ static int handle_mount_opt(struct super_block *sb, char *opt, int token,
 		*journal_ioprio =
 			IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, arg);
 	} else if (token == Opt_test_dummy_encryption) {
-#ifdef CONFIG_FS_ENCRYPTION
-		sbi->s_mount_flags |= EXT4_MF_TEST_DUMMY_ENCRYPTION;
-		ext4_msg(sb, KERN_WARNING,
-			 "Test dummy encryption mode enabled");
-#else
-		ext4_msg(sb, KERN_WARNING,
-			 "Test dummy encryption mount option ignored");
-#endif
+		return ext4_set_test_dummy_encryption(sb, opt, &args[0],
+						      is_remount);
 	} else if (m->flags & MOPT_DATAJ) {
 		if (is_remount) {
 			if (!sbi->s_journal)
@@ -2269,8 +2331,11 @@ static int _ext4_show_options(struct seq_file *seq, struct super_block *sb,
 		SEQ_OPTS_PRINT("max_dir_size_kb=%u", sbi->s_max_dir_size_kb);
 	if (test_opt(sb, DATA_ERR_ABORT))
 		SEQ_OPTS_PUTS("data_err=abort");
-	if (DUMMY_ENCRYPTION_ENABLED(sbi))
-		SEQ_OPTS_PUTS("test_dummy_encryption");
+
+	fscrypt_show_test_dummy_encryption(seq, sep, sb);
+
+	if (sb->s_flags & SB_INLINECRYPT)
+		SEQ_OPTS_PUTS("inlinecrypt");
 
 	ext4_show_quota_options(seq, sb);
 	return 0;
@@ -3888,17 +3953,11 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
 		goto failed_mount;
 
 #ifdef CONFIG_UNICODE
-	if (ext4_has_feature_casefold(sb) && !sbi->s_encoding) {
+	if (ext4_has_feature_casefold(sb) && !sb->s_encoding) {
 		const struct ext4_sb_encodings *encoding_info;
 		struct unicode_map *encoding;
 		__u16 encoding_flags;
 
-		if (ext4_has_feature_encrypt(sb)) {
-			ext4_msg(sb, KERN_ERR,
-				 "Can't mount with encoding and encryption");
-			goto failed_mount;
-		}
-
 		if (ext4_sb_read_encoding(es, &encoding_info,
 					  &encoding_flags)) {
 			ext4_msg(sb, KERN_ERR,
@@ -3919,8 +3978,8 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
 			 "%s-%s with flags 0x%hx", encoding_info->name,
 			 encoding_info->version?:"\b", encoding_flags);
 
-		sbi->s_encoding = encoding;
-		sbi->s_encoding_flags = encoding_flags;
+		sb->s_encoding = encoding;
+		sb->s_encoding_flags = encoding_flags;
 	}
 #endif
 
@@ -4540,11 +4599,6 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
 		goto failed_mount4;
 	}
 
-#ifdef CONFIG_UNICODE
-	if (sbi->s_encoding)
-		sb->s_d_op = &ext4_dentry_ops;
-#endif
-
 	sb->s_root = d_make_root(root);
 	if (!sb->s_root) {
 		ext4_msg(sb, KERN_ERR, "get root dentry failed");
@@ -4739,13 +4793,14 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
 		crypto_free_shash(sbi->s_chksum_driver);
 
 #ifdef CONFIG_UNICODE
-	utf8_unload(sbi->s_encoding);
+	utf8_unload(sb->s_encoding);
 #endif
 
 #ifdef CONFIG_QUOTA
 	for (i = 0; i < EXT4_MAXQUOTAS; i++)
 		kfree(get_qf_name(sb, sbi, i));
 #endif
+	fscrypt_free_dummy_policy(&sbi->s_dummy_enc_policy);
 	ext4_blkdev_remove(sbi);
 	brelse(bh);
 out_fail:
diff --git a/fs/ext4/sysfs.c b/fs/ext4/sysfs.c
index eb1efad..23067bd 100644
--- a/fs/ext4/sysfs.c
+++ b/fs/ext4/sysfs.c
@@ -238,6 +238,7 @@ EXT4_ATTR_FEATURE(batched_discard);
 EXT4_ATTR_FEATURE(meta_bg_resize);
 #ifdef CONFIG_FS_ENCRYPTION
 EXT4_ATTR_FEATURE(encryption);
+EXT4_ATTR_FEATURE(test_dummy_encryption_v2);
 #endif
 #ifdef CONFIG_UNICODE
 EXT4_ATTR_FEATURE(casefold);
@@ -253,6 +254,7 @@ static struct attribute *ext4_feat_attrs[] = {
 	ATTR_LIST(meta_bg_resize),
 #ifdef CONFIG_FS_ENCRYPTION
 	ATTR_LIST(encryption),
+	ATTR_LIST(test_dummy_encryption_v2),
 #endif
 #ifdef CONFIG_UNICODE
 	ATTR_LIST(casefold),
diff --git a/fs/ext4/verity.c b/fs/ext4/verity.c
index d0d8a97..dc5ec72 100644
--- a/fs/ext4/verity.c
+++ b/fs/ext4/verity.c
@@ -342,12 +342,55 @@ static int ext4_get_verity_descriptor(struct inode *inode, void *buf,
 	return desc_size;
 }
 
-static struct page *ext4_read_merkle_tree_page(struct inode *inode,
-					       pgoff_t index)
+/*
+ * Prefetch some pages from the file's Merkle tree.
+ *
+ * This is basically a stripped-down version of __do_page_cache_readahead()
+ * which works on pages past i_size.
+ */
+static void ext4_merkle_tree_readahead(struct address_space *mapping,
+				       pgoff_t start_index, unsigned long count)
 {
+	LIST_HEAD(pages);
+	unsigned int nr_pages = 0;
+	struct page *page;
+	pgoff_t index;
+	struct blk_plug plug;
+
+	for (index = start_index; index < start_index + count; index++) {
+		page = xa_load(&mapping->i_pages, index);
+		if (!page || xa_is_value(page)) {
+			page = __page_cache_alloc(readahead_gfp_mask(mapping));
+			if (!page)
+				break;
+			page->index = index;
+			list_add(&page->lru, &pages);
+			nr_pages++;
+		}
+	}
+	blk_start_plug(&plug);
+	ext4_mpage_readpages(mapping, &pages, NULL, nr_pages, true);
+	blk_finish_plug(&plug);
+}
+
+static struct page *ext4_read_merkle_tree_page(struct inode *inode,
+					       pgoff_t index,
+					       unsigned long num_ra_pages)
+{
+	struct page *page;
+
 	index += ext4_verity_metadata_pos(inode) >> PAGE_SHIFT;
 
-	return read_mapping_page(inode->i_mapping, index, NULL);
+	page = find_get_page_flags(inode->i_mapping, index, FGP_ACCESSED);
+	if (!page || !PageUptodate(page)) {
+		if (page)
+			put_page(page);
+		else if (num_ra_pages > 1)
+			ext4_merkle_tree_readahead(inode->i_mapping, index,
+						   num_ra_pages);
+		page = read_mapping_page(inode->i_mapping, index, NULL);
+	}
+	return page;
 }
 
 static int ext4_write_merkle_tree_block(struct inode *inode, const void *buf,
diff --git a/fs/ext4/xattr_security.c b/fs/ext4/xattr_security.c
index 197a9d8..50fb713 100644
--- a/fs/ext4/xattr_security.c
+++ b/fs/ext4/xattr_security.c
@@ -15,7 +15,7 @@
 static int
 ext4_xattr_security_get(const struct xattr_handler *handler,
 			struct dentry *unused, struct inode *inode,
-			const char *name, void *buffer, size_t size)
+			const char *name, void *buffer, size_t size, int flags)
 {
 	return ext4_xattr_get(inode, EXT4_XATTR_INDEX_SECURITY,
 			      name, buffer, size);
diff --git a/fs/ext4/xattr_trusted.c b/fs/ext4/xattr_trusted.c
index e9389e5..64bd8f8 100644
--- a/fs/ext4/xattr_trusted.c
+++ b/fs/ext4/xattr_trusted.c
@@ -22,7 +22,7 @@ ext4_xattr_trusted_list(struct dentry *dentry)
 static int
 ext4_xattr_trusted_get(const struct xattr_handler *handler,
 		       struct dentry *unused, struct inode *inode,
-		       const char *name, void *buffer, size_t size)
+		       const char *name, void *buffer, size_t size, int flags)
 {
 	return ext4_xattr_get(inode, EXT4_XATTR_INDEX_TRUSTED,
 			      name, buffer, size);
diff --git a/fs/ext4/xattr_user.c b/fs/ext4/xattr_user.c
index d454618..b730137 100644
--- a/fs/ext4/xattr_user.c
+++ b/fs/ext4/xattr_user.c
@@ -21,7 +21,7 @@ ext4_xattr_user_list(struct dentry *dentry)
 static int
 ext4_xattr_user_get(const struct xattr_handler *handler,
 		    struct dentry *unused, struct inode *inode,
-		    const char *name, void *buffer, size_t size)
+		    const char *name, void *buffer, size_t size, int flags)
 {
 	if (!test_opt(inode->i_sb, XATTR_USER))
 		return -EOPNOTSUPP;
diff --git a/fs/f2fs/Kconfig b/fs/f2fs/Kconfig
index 652fd2e..d13c5c6 100644
--- a/fs/f2fs/Kconfig
+++ b/fs/f2fs/Kconfig
@@ -6,6 +6,7 @@
 	select CRYPTO
 	select CRYPTO_CRC32
 	select F2FS_FS_XATTR if FS_ENCRYPTION
+	select FS_ENCRYPTION_ALGS if FS_ENCRYPTION
 	help
 	  F2FS is based on Log-structured File System (LFS), which supports
 	  versatile "flash-friendly" features. The design has been focused on
@@ -21,7 +22,7 @@
 
 config F2FS_STAT_FS
 	bool "F2FS Status Information"
-	depends on F2FS_FS && DEBUG_FS
+	depends on F2FS_FS
 	default y
 	help
 	  /sys/kernel/debug/f2fs/ contains information about all the partitions
@@ -92,3 +93,47 @@
 	  Test F2FS to inject faults such as ENOMEM, ENOSPC, and so on.
 
 	  If unsure, say N.
+
+config F2FS_FS_COMPRESSION
+	bool "F2FS compression feature"
+	depends on F2FS_FS
+	help
+	  Enable filesystem-level compression on f2fs regular files,
+	  multiple back-end compression algorithms are supported.
+
+config F2FS_FS_LZO
+	bool "LZO compression support"
+	depends on F2FS_FS_COMPRESSION
+	select LZO_COMPRESS
+	select LZO_DECOMPRESS
+	default y
+	help
+	  Support LZO compress algorithm, if unsure, say Y.
+
+config F2FS_FS_LZ4
+	bool "LZ4 compression support"
+	depends on F2FS_FS_COMPRESSION
+	select LZ4_COMPRESS
+	select LZ4_DECOMPRESS
+	default y
+	help
+	  Support LZ4 compress algorithm, if unsure, say Y.
+
+config F2FS_FS_ZSTD
+	bool "ZSTD compression support"
+	depends on F2FS_FS_COMPRESSION
+	select ZSTD_COMPRESS
+	select ZSTD_DECOMPRESS
+	default y
+	help
+	  Support ZSTD compress algorithm, if unsure, say Y.
+
+config F2FS_FS_LZORLE
+	bool "LZO-RLE compression support"
+	depends on F2FS_FS_COMPRESSION
+	depends on F2FS_FS_LZO
+	select LZO_COMPRESS
+	select LZO_DECOMPRESS
+	default y
+	help
+	  Support LZO-RLE compress algorithm, if unsure, say Y.
diff --git a/fs/f2fs/Makefile b/fs/f2fs/Makefile
index 2aaecc6..ee7316b 100644
--- a/fs/f2fs/Makefile
+++ b/fs/f2fs/Makefile
@@ -9,3 +9,4 @@
 f2fs-$(CONFIG_F2FS_FS_POSIX_ACL) += acl.o
 f2fs-$(CONFIG_F2FS_IO_TRACE) += trace.o
 f2fs-$(CONFIG_FS_VERITY) += verity.o
+f2fs-$(CONFIG_F2FS_FS_COMPRESSION) += compress.o
diff --git a/fs/f2fs/acl.c b/fs/f2fs/acl.c
index 217b290..1e5e9b1 100644
--- a/fs/f2fs/acl.c
+++ b/fs/f2fs/acl.c
@@ -160,7 +160,7 @@ static void *f2fs_acl_to_disk(struct f2fs_sb_info *sbi,
 	return (void *)f2fs_acl;
 
 fail:
-	kvfree(f2fs_acl);
+	kfree(f2fs_acl);
 	return ERR_PTR(-EINVAL);
 }
 
@@ -190,7 +190,7 @@ static struct posix_acl *__f2fs_get_acl(struct inode *inode, int type,
 		acl = NULL;
 	else
 		acl = ERR_PTR(retval);
-	kvfree(value);
+	kfree(value);
 
 	return acl;
 }
@@ -240,7 +240,7 @@ static int __f2fs_set_acl(struct inode *inode, int type,
 
 	error = f2fs_setxattr(inode, name_index, "", value, size, ipage, 0);
 
-	kvfree(value);
+	kfree(value);
 	if (!error)
 		set_cached_acl(inode, type, acl);
 
@@ -384,7 +384,7 @@ int f2fs_init_acl(struct inode *inode, struct inode *dir, struct page *ipage,
 							struct page *dpage)
 {
 	struct posix_acl *default_acl = NULL, *acl = NULL;
-	int error = 0;
+	int error;
 
 	error = f2fs_acl_create(dir, &inode->i_mode, &default_acl, &acl, dpage);
 	if (error)
diff --git a/fs/f2fs/acl.h b/fs/f2fs/acl.h
index b96823c..124868c 100644
--- a/fs/f2fs/acl.h
+++ b/fs/f2fs/acl.h
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * fs/f2fs/acl.h
  *
diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index a57219c..617d0f6 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -37,7 +37,7 @@ void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io)
 struct page *f2fs_grab_meta_page(struct f2fs_sb_info *sbi, pgoff_t index)
 {
 	struct address_space *mapping = META_MAPPING(sbi);
-	struct page *page = NULL;
+	struct page *page;
 repeat:
 	page = f2fs_grab_cache_page(mapping, index, false);
 	if (!page) {
@@ -50,9 +50,6 @@ struct page *f2fs_grab_meta_page(struct f2fs_sb_info *sbi, pgoff_t index)
 	return page;
 }
 
-/*
- * We guarantee no failure on the returned page.
- */
 static struct page *__get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index,
 							bool is_meta)
 {
@@ -89,6 +86,8 @@ static struct page *__get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index,
 		return ERR_PTR(err);
 	}
 
+	f2fs_update_iostat(sbi, FS_META_READ_IO, F2FS_BLKSIZE);
+
 	lock_page(page);
 	if (unlikely(page->mapping != mapping)) {
 		f2fs_put_page(page, 1);
@@ -206,7 +205,7 @@ bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,
 }
 
 /*
- * Readahead CP/NAT/SIT/SSA pages
+ * Readahead CP/NAT/SIT/SSA/POR pages
  */
 int f2fs_ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages,
 							int type, bool sync)
@@ -223,6 +222,7 @@ int f2fs_ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages,
 		.is_por = (type == META_POR),
 	};
 	struct blk_plug plug;
+	int err;
 
 	if (unlikely(type == META_POR))
 		fio.op_flags &= ~REQ_META;
@@ -268,8 +268,11 @@ int f2fs_ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages,
 		}
 
 		fio.page = page;
-		f2fs_submit_page_bio(&fio);
-		f2fs_put_page(page, 0);
+		err = f2fs_submit_page_bio(&fio);
+		f2fs_put_page(page, err ? 1 : 0);
+
+		if (!err)
+			f2fs_update_iostat(sbi, FS_META_READ_IO, F2FS_BLKSIZE);
 	}
 out:
 	blk_finish_plug(&plug);
@@ -345,13 +348,13 @@ static int f2fs_write_meta_pages(struct address_space *mapping,
 		goto skip_write;
 
 	/* if locked failed, cp will flush dirty pages instead */
-	if (!mutex_trylock(&sbi->cp_mutex))
+	if (!down_write_trylock(&sbi->cp_global_sem))
 		goto skip_write;
 
 	trace_f2fs_writepages(mapping->host, wbc, META);
 	diff = nr_pages_to_write(sbi, META, wbc);
 	written = f2fs_sync_meta_pages(sbi, META, wbc->nr_to_write, FS_META_IO);
-	mutex_unlock(&sbi->cp_mutex);
+	up_write(&sbi->cp_global_sem);
 	wbc->nr_to_write = max((long)0, wbc->nr_to_write - written - diff);
 	return 0;
 
@@ -522,7 +525,7 @@ void f2fs_remove_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type)
 	__remove_ino_entry(sbi, ino, type);
 }
 
-/* mode should be APPEND_INO or UPDATE_INO */
+/* mode should be APPEND_INO, UPDATE_INO or TRANS_DIR_INO */
 bool f2fs_exist_written_data(struct f2fs_sb_info *sbi, nid_t ino, int mode)
 {
 	struct inode_management *im = &sbi->im[mode];
@@ -583,7 +586,7 @@ int f2fs_acquire_orphan_inode(struct f2fs_sb_info *sbi)
 
 	if (time_to_inject(sbi, FAULT_ORPHAN)) {
 		spin_unlock(&im->ino_lock);
-		f2fs_show_injection_info(FAULT_ORPHAN);
+		f2fs_show_injection_info(sbi, FAULT_ORPHAN);
 		return -ENOSPC;
 	}
 
@@ -900,7 +903,7 @@ int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi)
 		return -ENOMEM;
 	/*
 	 * Finding out valid cp block involves read both
-	 * sets( cp pack1 and cp pack 2)
+	 * sets( cp pack 1 and cp pack 2)
 	 */
 	cp_start_blk_no = le32_to_cpu(fsb->cp_blkaddr);
 	cp1 = validate_checkpoint(sbi, cp_start_blk_no, &cp1_version);
@@ -1169,10 +1172,12 @@ static int block_operations(struct f2fs_sb_info *sbi)
 		.nr_to_write = LONG_MAX,
 		.for_reclaim = 0,
 	};
-	struct blk_plug plug;
 	int err = 0, cnt = 0;
 
-	blk_start_plug(&plug);
+	/*
+	 * Let's flush inline_data in dirty node pages.
+	 */
+	f2fs_flush_inline_data(sbi);
 
 retry_flush_quotas:
 	f2fs_lock_all(sbi);
@@ -1201,7 +1206,7 @@ static int block_operations(struct f2fs_sb_info *sbi)
 		f2fs_unlock_all(sbi);
 		err = f2fs_sync_dirty_inodes(sbi, DIR_INODE);
 		if (err)
-			goto out;
+			return err;
 		cond_resched();
 		goto retry_flush_quotas;
 	}
@@ -1217,7 +1222,7 @@ static int block_operations(struct f2fs_sb_info *sbi)
 		f2fs_unlock_all(sbi);
 		err = f2fs_sync_inode_meta(sbi);
 		if (err)
-			goto out;
+			return err;
 		cond_resched();
 		goto retry_flush_quotas;
 	}
@@ -1233,7 +1238,7 @@ static int block_operations(struct f2fs_sb_info *sbi)
 		if (err) {
 			up_write(&sbi->node_change);
 			f2fs_unlock_all(sbi);
-			goto out;
+			return err;
 		}
 		cond_resched();
 		goto retry_flush_nodes;
@@ -1245,8 +1250,6 @@ static int block_operations(struct f2fs_sb_info *sbi)
 	 */
 	__prepare_cp_block(sbi);
 	up_write(&sbi->node_change);
-out:
-	blk_finish_plug(&plug);
 	return err;
 }
 
@@ -1261,15 +1264,20 @@ void f2fs_wait_on_all_pages(struct f2fs_sb_info *sbi, int type)
 	DEFINE_WAIT(wait);
 
 	for (;;) {
-		prepare_to_wait(&sbi->cp_wait, &wait, TASK_UNINTERRUPTIBLE);
-
 		if (!get_pages(sbi, type))
 			break;
 
 		if (unlikely(f2fs_cp_error(sbi)))
 			break;
 
-		io_schedule_timeout(HZ/50);
+		if (type == F2FS_DIRTY_META)
+			f2fs_sync_meta_pages(sbi, META, LONG_MAX,
+							FS_CP_META_IO);
+		else if (type == F2FS_WB_CP_DATA)
+			f2fs_submit_merged_write(sbi, DATA);
+
+		prepare_to_wait(&sbi->cp_wait, &wait, TASK_UNINTERRUPTIBLE);
+		io_schedule_timeout(DEFAULT_IO_TIMEOUT);
 	}
 	finish_wait(&sbi->cp_wait, &wait);
 }
@@ -1377,6 +1385,27 @@ static void commit_checkpoint(struct f2fs_sb_info *sbi,
 	f2fs_submit_merged_write(sbi, META_FLUSH);
 }
 
+static inline u64 get_sectors_written(struct block_device *bdev)
+{
+	return bdev->bd_part ?
+		(u64)part_stat_read(bdev->bd_part, sectors[STAT_WRITE]) : 0;
+}
+
+u64 f2fs_get_sectors_written(struct f2fs_sb_info *sbi)
+{
+	if (f2fs_is_multi_device(sbi)) {
+		u64 sectors = 0;
+		int i;
+
+		for (i = 0; i < sbi->s_ndevs; i++)
+			sectors += get_sectors_written(FDEV(i).bdev);
+
+		return sectors;
+	}
+
+	return get_sectors_written(sbi->sb->s_bdev);
+}
+
 static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
 {
 	struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
@@ -1387,7 +1416,6 @@ static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
 	__u32 crc32 = 0;
 	int i;
 	int cp_payload_blks = __cp_payload(sbi);
-	struct super_block *sb = sbi->sb;
 	struct curseg_info *seg_i = CURSEG_I(sbi, CURSEG_HOT_NODE);
 	u64 kbytes_written;
 	int err;
@@ -1395,10 +1423,7 @@ static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
 	/* Flush all the NAT/SIT pages */
 	f2fs_sync_meta_pages(sbi, META, LONG_MAX, FS_CP_META_IO);
 
-	/*
-	 * modify checkpoint
-	 * version number is already updated
-	 */
+	/* start to update checkpoint, cp ver is already updated previously */
 	ckpt->elapsed_time = cpu_to_le64(get_mtime(sbi, true));
 	ckpt->free_segment_count = cpu_to_le32(free_segments(sbi));
 	for (i = 0; i < NR_CURSEG_NODE_TYPE; i++) {
@@ -1418,7 +1443,7 @@ static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
 				curseg_alloc_type(sbi, i + CURSEG_HOT_DATA);
 	}
 
-	/* 2 cp  + n data seg summary + orphan inode blocks */
+	/* 2 cp + n data seg summary + orphan inode blocks */
 	data_sum_blocks = f2fs_npages_for_summary_flush(sbi, false);
 	spin_lock_irqsave(&sbi->cp_lock, flags);
 	if (data_sum_blocks < NR_CURSEG_DATA_TYPE)
@@ -1485,9 +1510,8 @@ static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
 
 	/* Record write statistics in the hot node summary */
 	kbytes_written = sbi->kbytes_written;
-	if (sb->s_bdev->bd_part)
-		kbytes_written += BD_PART_WRITTEN(sbi);
-
+	kbytes_written += (f2fs_get_sectors_written(sbi) -
+				sbi->sectors_written_start) >> 1;
 	seg_i->journal->info.kbytes_written = cpu_to_le64(kbytes_written);
 
 	if (__remain_node_summaries(cpc->reason)) {
@@ -1517,10 +1541,11 @@ static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
 	f2fs_wait_on_all_pages(sbi, F2FS_WB_CP_DATA);
 
 	/*
-	 * invalidate intermediate page cache borrowed from meta inode
-	 * which are used for migration of encrypted inode's blocks.
+	 * invalidate intermediate page cache borrowed from meta inode which are
+	 * used for migration of encrypted, verity or compressed inode's blocks.
 	 */
-	if (f2fs_sb_has_encrypt(sbi))
+	if (f2fs_sb_has_encrypt(sbi) || f2fs_sb_has_verity(sbi) ||
+		f2fs_sb_has_compression(sbi))
 		invalidate_mapping_pages(META_MAPPING(sbi),
 				MAIN_BLKADDR(sbi), MAX_BLKADDR(sbi) - 1);
 
@@ -1551,9 +1576,6 @@ static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
 	return unlikely(f2fs_cp_error(sbi)) ? -EIO : 0;
 }
 
-/*
- * We guarantee that this checkpoint procedure will not fail.
- */
 int f2fs_write_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
 {
 	struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
@@ -1568,7 +1590,8 @@ int f2fs_write_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
 			return 0;
 		f2fs_warn(sbi, "Start checkpoint disabled!");
 	}
-	mutex_lock(&sbi->cp_mutex);
+	if (cpc->reason != CP_RESIZE)
+		down_write(&sbi->cp_global_sem);
 
 	if (!is_sbi_flag_set(sbi, SBI_IS_DIRTY) &&
 		((cpc->reason & CP_FASTBOOT) || (cpc->reason & CP_SYNC) ||
@@ -1621,12 +1644,16 @@ int f2fs_write_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
 
 	f2fs_flush_sit_entries(sbi, cpc);
 
-	/* unlock all the fs_lock[] in do_checkpoint() */
+	/* save inmem log status */
+	f2fs_save_inmem_curseg(sbi);
+
 	err = do_checkpoint(sbi, cpc);
 	if (err)
 		f2fs_release_discard_addrs(sbi);
 	else
 		f2fs_clear_prefree_segments(sbi, cpc);
+
+	f2fs_restore_inmem_curseg(sbi);
 stop:
 	unblock_operations(sbi);
 	stat_inc_cp_count(sbi->stat_info);
@@ -1634,11 +1661,12 @@ int f2fs_write_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
 	if (cpc->reason & CP_RECOVERY)
 		f2fs_notice(sbi, "checkpoint: version = %llx", ckpt_ver);
 
-	/* do checkpoint periodically */
+	/* update CP_TIME to trigger checkpoint periodically */
 	f2fs_update_time(sbi, CP_TIME);
 	trace_f2fs_write_checkpoint(sbi->sb, cpc->reason, "finish checkpoint");
 out:
-	mutex_unlock(&sbi->cp_mutex);
+	if (cpc->reason != CP_RESIZE)
+		up_write(&sbi->cp_global_sem);
 	return err;
 }
 
@@ -1656,7 +1684,7 @@ void f2fs_init_ino_entry_info(struct f2fs_sb_info *sbi)
 	}
 
 	sbi->max_orphans = (sbi->blocks_per_seg - F2FS_CP_PACKS -
-			NR_CURSEG_TYPE - __cp_payload(sbi)) *
+			NR_CURSEG_PERSIST_TYPE - __cp_payload(sbi)) *
 				F2FS_ORPHANS_PER_BLOCK;
 }
 
diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
new file mode 100644
index 0000000..e375e95
--- /dev/null
+++ b/fs/f2fs/compress.c
@@ -0,0 +1,1675 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * f2fs compress support
+ *
+ * Copyright (c) 2019 Chao Yu <chao@kernel.org>
+ */
+
+#include <linux/fs.h>
+#include <linux/f2fs_fs.h>
+#include <linux/writeback.h>
+#include <linux/backing-dev.h>
+#include <linux/lzo.h>
+#include <linux/lz4.h>
+#include <linux/zstd.h>
+#include <linux/moduleparam.h>
+
+#include "f2fs.h"
+#include "node.h"
+#include <trace/events/f2fs.h>
+
+static struct kmem_cache *cic_entry_slab;
+static struct kmem_cache *dic_entry_slab;
+
+static void *page_array_alloc(struct inode *inode, int nr)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	unsigned int size = sizeof(struct page *) * nr;
+
+	if (likely(size <= sbi->page_array_slab_size))
+		return kmem_cache_zalloc(sbi->page_array_slab, GFP_NOFS);
+	return f2fs_kzalloc(sbi, size, GFP_NOFS);
+}
+
+static void page_array_free(struct inode *inode, void *pages, int nr)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	unsigned int size = sizeof(struct page *) * nr;
+
+	if (!pages)
+		return;
+
+	if (likely(size <= sbi->page_array_slab_size))
+		kmem_cache_free(sbi->page_array_slab, pages);
+	else
+		kfree(pages);
+}
+
+struct f2fs_compress_ops {
+	int (*init_compress_ctx)(struct compress_ctx *cc);
+	void (*destroy_compress_ctx)(struct compress_ctx *cc);
+	int (*compress_pages)(struct compress_ctx *cc);
+	int (*init_decompress_ctx)(struct decompress_io_ctx *dic);
+	void (*destroy_decompress_ctx)(struct decompress_io_ctx *dic);
+	int (*decompress_pages)(struct decompress_io_ctx *dic);
+};
+
+static unsigned int offset_in_cluster(struct compress_ctx *cc, pgoff_t index)
+{
+	return index & (cc->cluster_size - 1);
+}
+
+static pgoff_t cluster_idx(struct compress_ctx *cc, pgoff_t index)
+{
+	return index >> cc->log_cluster_size;
+}
+
+static pgoff_t start_idx_of_cluster(struct compress_ctx *cc)
+{
+	return cc->cluster_idx << cc->log_cluster_size;
+}
+
+bool f2fs_is_compressed_page(struct page *page)
+{
+	if (!PagePrivate(page))
+		return false;
+	if (!page_private(page))
+		return false;
+	if (IS_ATOMIC_WRITTEN_PAGE(page) || IS_DUMMY_WRITTEN_PAGE(page))
+		return false;
+	/*
+	 * page->private may be set with pid.
+	 * pid_max is enough to check if it is traced.
+	 */
+	if (IS_IO_TRACED_PAGE(page))
+		return false;
+
+	f2fs_bug_on(F2FS_M_SB(page->mapping),
+		*((u32 *)page_private(page)) != F2FS_COMPRESSED_PAGE_MAGIC);
+	return true;
+}
+
+static void f2fs_set_compressed_page(struct page *page,
+		struct inode *inode, pgoff_t index, void *data)
+{
+	SetPagePrivate(page);
+	set_page_private(page, (unsigned long)data);
+
+	/* i_crypto_info and iv index */
+	page->index = index;
+	page->mapping = inode->i_mapping;
+}
+
+static void f2fs_drop_rpages(struct compress_ctx *cc, int len, bool unlock)
+{
+	int i;
+
+	for (i = 0; i < len; i++) {
+		if (!cc->rpages[i])
+			continue;
+		if (unlock)
+			unlock_page(cc->rpages[i]);
+		else
+			put_page(cc->rpages[i]);
+	}
+}
+
+static void f2fs_put_rpages(struct compress_ctx *cc)
+{
+	f2fs_drop_rpages(cc, cc->cluster_size, false);
+}
+
+static void f2fs_unlock_rpages(struct compress_ctx *cc, int len)
+{
+	f2fs_drop_rpages(cc, len, true);
+}
+
+static void f2fs_put_rpages_mapping(struct address_space *mapping,
+				pgoff_t start, int len)
+{
+	int i;
+
+	for (i = 0; i < len; i++) {
+		struct page *page = find_get_page(mapping, start + i);
+
+		put_page(page);
+		put_page(page);
+	}
+}
+
+static void f2fs_put_rpages_wbc(struct compress_ctx *cc,
+		struct writeback_control *wbc, bool redirty, int unlock)
+{
+	unsigned int i;
+
+	for (i = 0; i < cc->cluster_size; i++) {
+		if (!cc->rpages[i])
+			continue;
+		if (redirty)
+			redirty_page_for_writepage(wbc, cc->rpages[i]);
+		f2fs_put_page(cc->rpages[i], unlock);
+	}
+}
+
+struct page *f2fs_compress_control_page(struct page *page)
+{
+	return ((struct compress_io_ctx *)page_private(page))->rpages[0];
+}
+
+int f2fs_init_compress_ctx(struct compress_ctx *cc)
+{
+	if (cc->rpages)
+		return 0;
+
+	cc->rpages = page_array_alloc(cc->inode, cc->cluster_size);
+	return cc->rpages ? 0 : -ENOMEM;
+}
+
+void f2fs_destroy_compress_ctx(struct compress_ctx *cc)
+{
+	page_array_free(cc->inode, cc->rpages, cc->cluster_size);
+	cc->rpages = NULL;
+	cc->nr_rpages = 0;
+	cc->nr_cpages = 0;
+	cc->cluster_idx = NULL_CLUSTER;
+}
+
+void f2fs_compress_ctx_add_page(struct compress_ctx *cc, struct page *page)
+{
+	unsigned int cluster_ofs;
+
+	if (!f2fs_cluster_can_merge_page(cc, page->index))
+		f2fs_bug_on(F2FS_I_SB(cc->inode), 1);
+
+	cluster_ofs = offset_in_cluster(cc, page->index);
+	cc->rpages[cluster_ofs] = page;
+	cc->nr_rpages++;
+	cc->cluster_idx = cluster_idx(cc, page->index);
+}
+
+#ifdef CONFIG_F2FS_FS_LZO
+static int lzo_init_compress_ctx(struct compress_ctx *cc)
+{
+	cc->private = f2fs_kvmalloc(F2FS_I_SB(cc->inode),
+				LZO1X_MEM_COMPRESS, GFP_NOFS);
+	if (!cc->private)
+		return -ENOMEM;
+
+	cc->clen = lzo1x_worst_compress(PAGE_SIZE << cc->log_cluster_size);
+	return 0;
+}
+
+static void lzo_destroy_compress_ctx(struct compress_ctx *cc)
+{
+	kvfree(cc->private);
+	cc->private = NULL;
+}
+
+static int lzo_compress_pages(struct compress_ctx *cc)
+{
+	int ret;
+
+	ret = lzo1x_1_compress(cc->rbuf, cc->rlen, cc->cbuf->cdata,
+					&cc->clen, cc->private);
+	if (ret != LZO_E_OK) {
+		printk_ratelimited("%sF2FS-fs (%s): lzo compress failed, ret:%d\n",
+				KERN_ERR, F2FS_I_SB(cc->inode)->sb->s_id, ret);
+		return -EIO;
+	}
+	return 0;
+}
+
+static int lzo_decompress_pages(struct decompress_io_ctx *dic)
+{
+	int ret;
+
+	ret = lzo1x_decompress_safe(dic->cbuf->cdata, dic->clen,
+						dic->rbuf, &dic->rlen);
+	if (ret != LZO_E_OK) {
+		printk_ratelimited("%sF2FS-fs (%s): lzo decompress failed, ret:%d\n",
+				KERN_ERR, F2FS_I_SB(dic->inode)->sb->s_id, ret);
+		return -EIO;
+	}
+
+	if (dic->rlen != PAGE_SIZE << dic->log_cluster_size) {
+		printk_ratelimited("%sF2FS-fs (%s): lzo invalid rlen:%zu, "
+					"expected:%lu\n", KERN_ERR,
+					F2FS_I_SB(dic->inode)->sb->s_id,
+					dic->rlen,
+					PAGE_SIZE << dic->log_cluster_size);
+		return -EIO;
+	}
+	return 0;
+}
+
+static const struct f2fs_compress_ops f2fs_lzo_ops = {
+	.init_compress_ctx	= lzo_init_compress_ctx,
+	.destroy_compress_ctx	= lzo_destroy_compress_ctx,
+	.compress_pages		= lzo_compress_pages,
+	.decompress_pages	= lzo_decompress_pages,
+};
+#endif
+
+#ifdef CONFIG_F2FS_FS_LZ4
+static int lz4_init_compress_ctx(struct compress_ctx *cc)
+{
+	cc->private = f2fs_kvmalloc(F2FS_I_SB(cc->inode),
+				LZ4_MEM_COMPRESS, GFP_NOFS);
+	if (!cc->private)
+		return -ENOMEM;
+
+	/*
+	 * we do not change cc->clen to LZ4_compressBound(inputsize) to
+	 * adapt worst compress case, because lz4 compressor can handle
+	 * output budget properly.
+	 */
+	cc->clen = cc->rlen - PAGE_SIZE - COMPRESS_HEADER_SIZE;
+	return 0;
+}
+
+static void lz4_destroy_compress_ctx(struct compress_ctx *cc)
+{
+	kvfree(cc->private);
+	cc->private = NULL;
+}
+
+static int lz4_compress_pages(struct compress_ctx *cc)
+{
+	int len;
+
+	len = LZ4_compress_default(cc->rbuf, cc->cbuf->cdata, cc->rlen,
+						cc->clen, cc->private);
+	if (!len)
+		return -EAGAIN;
+
+	cc->clen = len;
+	return 0;
+}
+
+static int lz4_decompress_pages(struct decompress_io_ctx *dic)
+{
+	int ret;
+
+	ret = LZ4_decompress_safe(dic->cbuf->cdata, dic->rbuf,
+						dic->clen, dic->rlen);
+	if (ret < 0) {
+		printk_ratelimited("%sF2FS-fs (%s): lz4 decompress failed, ret:%d\n",
+				KERN_ERR, F2FS_I_SB(dic->inode)->sb->s_id, ret);
+		return -EIO;
+	}
+
+	if (ret != PAGE_SIZE << dic->log_cluster_size) {
+		printk_ratelimited("%sF2FS-fs (%s): lz4 invalid rlen:%zu, "
+					"expected:%lu\n", KERN_ERR,
+					F2FS_I_SB(dic->inode)->sb->s_id,
+					dic->rlen,
+					PAGE_SIZE << dic->log_cluster_size);
+		return -EIO;
+	}
+	return 0;
+}
+
+static const struct f2fs_compress_ops f2fs_lz4_ops = {
+	.init_compress_ctx	= lz4_init_compress_ctx,
+	.destroy_compress_ctx	= lz4_destroy_compress_ctx,
+	.compress_pages		= lz4_compress_pages,
+	.decompress_pages	= lz4_decompress_pages,
+};
+#endif
+
+#ifdef CONFIG_F2FS_FS_ZSTD
+#define F2FS_ZSTD_DEFAULT_CLEVEL	1
+
+static int zstd_init_compress_ctx(struct compress_ctx *cc)
+{
+	ZSTD_parameters params;
+	ZSTD_CStream *stream;
+	void *workspace;
+	unsigned int workspace_size;
+
+	params = ZSTD_getParams(F2FS_ZSTD_DEFAULT_CLEVEL, cc->rlen, 0);
+	workspace_size = ZSTD_CStreamWorkspaceBound(params.cParams);
+
+	workspace = f2fs_kvmalloc(F2FS_I_SB(cc->inode),
+					workspace_size, GFP_NOFS);
+	if (!workspace)
+		return -ENOMEM;
+
+	stream = ZSTD_initCStream(params, 0, workspace, workspace_size);
+	if (!stream) {
+		printk_ratelimited("%sF2FS-fs (%s): %s ZSTD_initCStream failed\n",
+				KERN_ERR, F2FS_I_SB(cc->inode)->sb->s_id,
+				__func__);
+		kvfree(workspace);
+		return -EIO;
+	}
+
+	cc->private = workspace;
+	cc->private2 = stream;
+
+	cc->clen = cc->rlen - PAGE_SIZE - COMPRESS_HEADER_SIZE;
+	return 0;
+}
+
+static void zstd_destroy_compress_ctx(struct compress_ctx *cc)
+{
+	kvfree(cc->private);
+	cc->private = NULL;
+	cc->private2 = NULL;
+}
+
+static int zstd_compress_pages(struct compress_ctx *cc)
+{
+	ZSTD_CStream *stream = cc->private2;
+	ZSTD_inBuffer inbuf;
+	ZSTD_outBuffer outbuf;
+	int src_size = cc->rlen;
+	int dst_size = src_size - PAGE_SIZE - COMPRESS_HEADER_SIZE;
+	int ret;
+
+	inbuf.pos = 0;
+	inbuf.src = cc->rbuf;
+	inbuf.size = src_size;
+
+	outbuf.pos = 0;
+	outbuf.dst = cc->cbuf->cdata;
+	outbuf.size = dst_size;
+
+	ret = ZSTD_compressStream(stream, &outbuf, &inbuf);
+	if (ZSTD_isError(ret)) {
+		printk_ratelimited("%sF2FS-fs (%s): %s ZSTD_compressStream failed, ret: %d\n",
+				KERN_ERR, F2FS_I_SB(cc->inode)->sb->s_id,
+				__func__, ZSTD_getErrorCode(ret));
+		return -EIO;
+	}
+
+	ret = ZSTD_endStream(stream, &outbuf);
+	if (ZSTD_isError(ret)) {
+		printk_ratelimited("%sF2FS-fs (%s): %s ZSTD_endStream returned %d\n",
+				KERN_ERR, F2FS_I_SB(cc->inode)->sb->s_id,
+				__func__, ZSTD_getErrorCode(ret));
+		return -EIO;
+	}
+
+	/*
+	 * there is compressed data remained in intermediate buffer due to
+	 * no more space in cbuf.cdata
+	 */
+	if (ret)
+		return -EAGAIN;
+
+	cc->clen = outbuf.pos;
+	return 0;
+}
+
+static int zstd_init_decompress_ctx(struct decompress_io_ctx *dic)
+{
+	ZSTD_DStream *stream;
+	void *workspace;
+	unsigned int workspace_size;
+	unsigned int max_window_size =
+			MAX_COMPRESS_WINDOW_SIZE(dic->log_cluster_size);
+
+	workspace_size = ZSTD_DStreamWorkspaceBound(max_window_size);
+
+	workspace = f2fs_kvmalloc(F2FS_I_SB(dic->inode),
+					workspace_size, GFP_NOFS);
+	if (!workspace)
+		return -ENOMEM;
+
+	stream = ZSTD_initDStream(max_window_size, workspace, workspace_size);
+	if (!stream) {
+		printk_ratelimited("%sF2FS-fs (%s): %s ZSTD_initDStream failed\n",
+				KERN_ERR, F2FS_I_SB(dic->inode)->sb->s_id,
+				__func__);
+		kvfree(workspace);
+		return -EIO;
+	}
+
+	dic->private = workspace;
+	dic->private2 = stream;
+
+	return 0;
+}
+
+static void zstd_destroy_decompress_ctx(struct decompress_io_ctx *dic)
+{
+	kvfree(dic->private);
+	dic->private = NULL;
+	dic->private2 = NULL;
+}
+
+static int zstd_decompress_pages(struct decompress_io_ctx *dic)
+{
+	ZSTD_DStream *stream = dic->private2;
+	ZSTD_inBuffer inbuf;
+	ZSTD_outBuffer outbuf;
+	int ret;
+
+	inbuf.pos = 0;
+	inbuf.src = dic->cbuf->cdata;
+	inbuf.size = dic->clen;
+
+	outbuf.pos = 0;
+	outbuf.dst = dic->rbuf;
+	outbuf.size = dic->rlen;
+
+	ret = ZSTD_decompressStream(stream, &outbuf, &inbuf);
+	if (ZSTD_isError(ret)) {
+		printk_ratelimited("%sF2FS-fs (%s): %s ZSTD_compressStream failed, ret: %d\n",
+				KERN_ERR, F2FS_I_SB(dic->inode)->sb->s_id,
+				__func__, ZSTD_getErrorCode(ret));
+		return -EIO;
+	}
+
+	if (dic->rlen != outbuf.pos) {
+		printk_ratelimited("%sF2FS-fs (%s): %s ZSTD invalid rlen:%zu, "
+				"expected:%lu\n", KERN_ERR,
+				F2FS_I_SB(dic->inode)->sb->s_id,
+				__func__, dic->rlen,
+				PAGE_SIZE << dic->log_cluster_size);
+		return -EIO;
+	}
+
+	return 0;
+}
+
+static const struct f2fs_compress_ops f2fs_zstd_ops = {
+	.init_compress_ctx	= zstd_init_compress_ctx,
+	.destroy_compress_ctx	= zstd_destroy_compress_ctx,
+	.compress_pages		= zstd_compress_pages,
+	.init_decompress_ctx	= zstd_init_decompress_ctx,
+	.destroy_decompress_ctx	= zstd_destroy_decompress_ctx,
+	.decompress_pages	= zstd_decompress_pages,
+};
+#endif
+
+#ifdef CONFIG_F2FS_FS_LZO
+#ifdef CONFIG_F2FS_FS_LZORLE
+static int lzorle_compress_pages(struct compress_ctx *cc)
+{
+	int ret;
+
+	ret = lzorle1x_1_compress(cc->rbuf, cc->rlen, cc->cbuf->cdata,
+					&cc->clen, cc->private);
+	if (ret != LZO_E_OK) {
+		printk_ratelimited("%sF2FS-fs (%s): lzo-rle compress failed, ret:%d\n",
+				KERN_ERR, F2FS_I_SB(cc->inode)->sb->s_id, ret);
+		return -EIO;
+	}
+	return 0;
+}
+
+static const struct f2fs_compress_ops f2fs_lzorle_ops = {
+	.init_compress_ctx	= lzo_init_compress_ctx,
+	.destroy_compress_ctx	= lzo_destroy_compress_ctx,
+	.compress_pages		= lzorle_compress_pages,
+	.decompress_pages	= lzo_decompress_pages,
+};
+#endif
+#endif
+
+static const struct f2fs_compress_ops *f2fs_cops[COMPRESS_MAX] = {
+#ifdef CONFIG_F2FS_FS_LZO
+	&f2fs_lzo_ops,
+#else
+	NULL,
+#endif
+#ifdef CONFIG_F2FS_FS_LZ4
+	&f2fs_lz4_ops,
+#else
+	NULL,
+#endif
+#ifdef CONFIG_F2FS_FS_ZSTD
+	&f2fs_zstd_ops,
+#else
+	NULL,
+#endif
+#if defined(CONFIG_F2FS_FS_LZO) && defined(CONFIG_F2FS_FS_LZORLE)
+	&f2fs_lzorle_ops,
+#else
+	NULL,
+#endif
+};
+
+bool f2fs_is_compress_backend_ready(struct inode *inode)
+{
+	if (!f2fs_compressed_file(inode))
+		return true;
+	return f2fs_cops[F2FS_I(inode)->i_compress_algorithm];
+}
+
+static mempool_t *compress_page_pool;
+static int num_compress_pages = 512;
+module_param(num_compress_pages, uint, 0444);
+MODULE_PARM_DESC(num_compress_pages,
+		"Number of intermediate compress pages to preallocate");
+
+int f2fs_init_compress_mempool(void)
+{
+	compress_page_pool = mempool_create_page_pool(num_compress_pages, 0);
+	if (!compress_page_pool)
+		return -ENOMEM;
+
+	return 0;
+}
+
+void f2fs_destroy_compress_mempool(void)
+{
+	mempool_destroy(compress_page_pool);
+}
+
+static struct page *f2fs_compress_alloc_page(void)
+{
+	struct page *page;
+
+	page = mempool_alloc(compress_page_pool, GFP_NOFS);
+	lock_page(page);
+
+	return page;
+}
+
+static void f2fs_compress_free_page(struct page *page)
+{
+	if (!page)
+		return;
+	set_page_private(page, (unsigned long)NULL);
+	ClearPagePrivate(page);
+	page->mapping = NULL;
+	unlock_page(page);
+	mempool_free(page, compress_page_pool);
+}
+
+#define MAX_VMAP_RETRIES	3
+
+static void *f2fs_vmap(struct page **pages, unsigned int count)
+{
+	int i;
+	void *buf = NULL;
+
+	for (i = 0; i < MAX_VMAP_RETRIES; i++) {
+		buf = vm_map_ram(pages, count, -1, PAGE_KERNEL);
+		if (buf)
+			break;
+		vm_unmap_aliases();
+	}
+	return buf;
+}
+
+static int f2fs_compress_pages(struct compress_ctx *cc)
+{
+	struct f2fs_inode_info *fi = F2FS_I(cc->inode);
+	const struct f2fs_compress_ops *cops =
+				f2fs_cops[fi->i_compress_algorithm];
+	unsigned int max_len, new_nr_cpages;
+	struct page **new_cpages;
+	u32 chksum = 0;
+	int i, ret;
+
+	trace_f2fs_compress_pages_start(cc->inode, cc->cluster_idx,
+				cc->cluster_size, fi->i_compress_algorithm);
+
+	if (cops->init_compress_ctx) {
+		ret = cops->init_compress_ctx(cc);
+		if (ret)
+			goto out;
+	}
+
+	max_len = COMPRESS_HEADER_SIZE + cc->clen;
+	cc->nr_cpages = DIV_ROUND_UP(max_len, PAGE_SIZE);
+
+	cc->cpages = page_array_alloc(cc->inode, cc->nr_cpages);
+	if (!cc->cpages) {
+		ret = -ENOMEM;
+		goto destroy_compress_ctx;
+	}
+
+	for (i = 0; i < cc->nr_cpages; i++) {
+		cc->cpages[i] = f2fs_compress_alloc_page();
+		if (!cc->cpages[i]) {
+			ret = -ENOMEM;
+			goto out_free_cpages;
+		}
+	}
+
+	cc->rbuf = f2fs_vmap(cc->rpages, cc->cluster_size);
+	if (!cc->rbuf) {
+		ret = -ENOMEM;
+		goto out_free_cpages;
+	}
+
+	cc->cbuf = f2fs_vmap(cc->cpages, cc->nr_cpages);
+	if (!cc->cbuf) {
+		ret = -ENOMEM;
+		goto out_vunmap_rbuf;
+	}
+
+	ret = cops->compress_pages(cc);
+	if (ret)
+		goto out_vunmap_cbuf;
+
+	max_len = PAGE_SIZE * (cc->cluster_size - 1) - COMPRESS_HEADER_SIZE;
+
+	if (cc->clen > max_len) {
+		ret = -EAGAIN;
+		goto out_vunmap_cbuf;
+	}
+
+	cc->cbuf->clen = cpu_to_le32(cc->clen);
+
+	if (fi->i_compress_flag & 1 << COMPRESS_CHKSUM)
+		chksum = f2fs_crc32(F2FS_I_SB(cc->inode),
+					cc->cbuf->cdata, cc->clen);
+	cc->cbuf->chksum = cpu_to_le32(chksum);
+
+	for (i = 0; i < COMPRESS_DATA_RESERVED_SIZE; i++)
+		cc->cbuf->reserved[i] = cpu_to_le32(0);
+
+	new_nr_cpages = DIV_ROUND_UP(cc->clen + COMPRESS_HEADER_SIZE, PAGE_SIZE);
+
+	/* Now we're going to cut unnecessary tail pages */
+	new_cpages = page_array_alloc(cc->inode, new_nr_cpages);
+	if (!new_cpages) {
+		ret = -ENOMEM;
+		goto out_vunmap_cbuf;
+	}
+
+	/* zero out any unused part of the last page */
+	memset(&cc->cbuf->cdata[cc->clen], 0,
+			(new_nr_cpages * PAGE_SIZE) -
+			(cc->clen + COMPRESS_HEADER_SIZE));
+
+	vm_unmap_ram(cc->cbuf, cc->nr_cpages);
+	vm_unmap_ram(cc->rbuf, cc->cluster_size);
+
+	for (i = 0; i < cc->nr_cpages; i++) {
+		if (i < new_nr_cpages) {
+			new_cpages[i] = cc->cpages[i];
+			continue;
+		}
+		f2fs_compress_free_page(cc->cpages[i]);
+		cc->cpages[i] = NULL;
+	}
+
+	if (cops->destroy_compress_ctx)
+		cops->destroy_compress_ctx(cc);
+
+	page_array_free(cc->inode, cc->cpages, cc->nr_cpages);
+	cc->cpages = new_cpages;
+	cc->nr_cpages = new_nr_cpages;
+
+	trace_f2fs_compress_pages_end(cc->inode, cc->cluster_idx,
+							cc->clen, ret);
+	return 0;
+
+out_vunmap_cbuf:
+	vm_unmap_ram(cc->cbuf, cc->nr_cpages);
+out_vunmap_rbuf:
+	vm_unmap_ram(cc->rbuf, cc->cluster_size);
+out_free_cpages:
+	for (i = 0; i < cc->nr_cpages; i++) {
+		if (cc->cpages[i])
+			f2fs_compress_free_page(cc->cpages[i]);
+	}
+	page_array_free(cc->inode, cc->cpages, cc->nr_cpages);
+	cc->cpages = NULL;
+destroy_compress_ctx:
+	if (cops->destroy_compress_ctx)
+		cops->destroy_compress_ctx(cc);
+out:
+	trace_f2fs_compress_pages_end(cc->inode, cc->cluster_idx,
+							cc->clen, ret);
+	return ret;
+}
+
+void f2fs_decompress_pages(struct bio *bio, struct page *page, bool verity)
+{
+	struct decompress_io_ctx *dic =
+			(struct decompress_io_ctx *)page_private(page);
+	struct f2fs_sb_info *sbi = F2FS_I_SB(dic->inode);
+	struct f2fs_inode_info *fi= F2FS_I(dic->inode);
+	const struct f2fs_compress_ops *cops =
+			f2fs_cops[fi->i_compress_algorithm];
+	int ret;
+	int i;
+
+	dec_page_count(sbi, F2FS_RD_DATA);
+
+	if (bio->bi_status || PageError(page))
+		dic->failed = true;
+
+	if (atomic_dec_return(&dic->pending_pages))
+		return;
+
+	trace_f2fs_decompress_pages_start(dic->inode, dic->cluster_idx,
+				dic->cluster_size, fi->i_compress_algorithm);
+
+	/* submit partial compressed pages */
+	if (dic->failed) {
+		ret = -EIO;
+		goto out_free_dic;
+	}
+
+	dic->tpages = page_array_alloc(dic->inode, dic->cluster_size);
+	if (!dic->tpages) {
+		ret = -ENOMEM;
+		goto out_free_dic;
+	}
+
+	for (i = 0; i < dic->cluster_size; i++) {
+		if (dic->rpages[i]) {
+			dic->tpages[i] = dic->rpages[i];
+			continue;
+		}
+
+		dic->tpages[i] = f2fs_compress_alloc_page();
+		if (!dic->tpages[i]) {
+			ret = -ENOMEM;
+			goto out_free_dic;
+		}
+	}
+
+	if (cops->init_decompress_ctx) {
+		ret = cops->init_decompress_ctx(dic);
+		if (ret)
+			goto out_free_dic;
+	}
+
+	dic->rbuf = f2fs_vmap(dic->tpages, dic->cluster_size);
+	if (!dic->rbuf) {
+		ret = -ENOMEM;
+		goto destroy_decompress_ctx;
+	}
+
+	dic->cbuf = f2fs_vmap(dic->cpages, dic->nr_cpages);
+	if (!dic->cbuf) {
+		ret = -ENOMEM;
+		goto out_vunmap_rbuf;
+	}
+
+	dic->clen = le32_to_cpu(dic->cbuf->clen);
+	dic->rlen = PAGE_SIZE << dic->log_cluster_size;
+
+	if (dic->clen > PAGE_SIZE * dic->nr_cpages - COMPRESS_HEADER_SIZE) {
+		ret = -EFSCORRUPTED;
+		goto out_vunmap_cbuf;
+	}
+
+	ret = cops->decompress_pages(dic);
+
+	if (!ret && (fi->i_compress_flag & 1 << COMPRESS_CHKSUM)) {
+		u32 provided = le32_to_cpu(dic->cbuf->chksum);
+		u32 calculated = f2fs_crc32(sbi, dic->cbuf->cdata, dic->clen);
+
+		if (provided != calculated) {
+			if (!is_inode_flag_set(dic->inode, FI_COMPRESS_CORRUPT)) {
+				set_inode_flag(dic->inode, FI_COMPRESS_CORRUPT);
+				printk_ratelimited(
+					"%sF2FS-fs (%s): checksum invalid, nid = %lu, %x vs %x",
+					KERN_INFO, sbi->sb->s_id, dic->inode->i_ino,
+					provided, calculated);
+			}
+			set_sbi_flag(sbi, SBI_NEED_FSCK);
+		}
+	}
+
+out_vunmap_cbuf:
+	vm_unmap_ram(dic->cbuf, dic->nr_cpages);
+out_vunmap_rbuf:
+	vm_unmap_ram(dic->rbuf, dic->cluster_size);
+destroy_decompress_ctx:
+	if (cops->destroy_decompress_ctx)
+		cops->destroy_decompress_ctx(dic);
+out_free_dic:
+	if (!verity)
+		f2fs_decompress_end_io(dic->rpages, dic->cluster_size,
+								ret, false);
+
+	trace_f2fs_decompress_pages_end(dic->inode, dic->cluster_idx,
+							dic->clen, ret);
+	if (!verity)
+		f2fs_free_dic(dic);
+}
+
+static bool is_page_in_cluster(struct compress_ctx *cc, pgoff_t index)
+{
+	if (cc->cluster_idx == NULL_CLUSTER)
+		return true;
+	return cc->cluster_idx == cluster_idx(cc, index);
+}
+
+bool f2fs_cluster_is_empty(struct compress_ctx *cc)
+{
+	return cc->nr_rpages == 0;
+}
+
+static bool f2fs_cluster_is_full(struct compress_ctx *cc)
+{
+	return cc->cluster_size == cc->nr_rpages;
+}
+
+bool f2fs_cluster_can_merge_page(struct compress_ctx *cc, pgoff_t index)
+{
+	if (f2fs_cluster_is_empty(cc))
+		return true;
+	return is_page_in_cluster(cc, index);
+}
+
+static bool __cluster_may_compress(struct compress_ctx *cc)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(cc->inode);
+	loff_t i_size = i_size_read(cc->inode);
+	unsigned nr_pages = DIV_ROUND_UP(i_size, PAGE_SIZE);
+	int i;
+
+	for (i = 0; i < cc->cluster_size; i++) {
+		struct page *page = cc->rpages[i];
+
+		f2fs_bug_on(sbi, !page);
+
+		if (unlikely(f2fs_cp_error(sbi)))
+			return false;
+		if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
+			return false;
+
+		/* beyond EOF */
+		if (page->index >= nr_pages)
+			return false;
+	}
+	return true;
+}
+
+static int __f2fs_cluster_blocks(struct compress_ctx *cc, bool compr)
+{
+	struct dnode_of_data dn;
+	int ret;
+
+	set_new_dnode(&dn, cc->inode, NULL, NULL, 0);
+	ret = f2fs_get_dnode_of_data(&dn, start_idx_of_cluster(cc),
+							LOOKUP_NODE);
+	if (ret) {
+		if (ret == -ENOENT)
+			ret = 0;
+		goto fail;
+	}
+
+	if (dn.data_blkaddr == COMPRESS_ADDR) {
+		int i;
+
+		ret = 1;
+		for (i = 1; i < cc->cluster_size; i++) {
+			block_t blkaddr;
+
+			blkaddr = data_blkaddr(dn.inode,
+					dn.node_page, dn.ofs_in_node + i);
+			if (compr) {
+				if (__is_valid_data_blkaddr(blkaddr))
+					ret++;
+			} else {
+				if (blkaddr != NULL_ADDR)
+					ret++;
+			}
+		}
+	}
+fail:
+	f2fs_put_dnode(&dn);
+	return ret;
+}
+
+/* return # of compressed blocks in compressed cluster */
+static int f2fs_compressed_blocks(struct compress_ctx *cc)
+{
+	return __f2fs_cluster_blocks(cc, true);
+}
+
+/* return # of valid blocks in compressed cluster */
+static int f2fs_cluster_blocks(struct compress_ctx *cc)
+{
+	return __f2fs_cluster_blocks(cc, false);
+}
+
+int f2fs_is_compressed_cluster(struct inode *inode, pgoff_t index)
+{
+	struct compress_ctx cc = {
+		.inode = inode,
+		.log_cluster_size = F2FS_I(inode)->i_log_cluster_size,
+		.cluster_size = F2FS_I(inode)->i_cluster_size,
+		.cluster_idx = index >> F2FS_I(inode)->i_log_cluster_size,
+	};
+
+	return f2fs_cluster_blocks(&cc);
+}
+
+static bool cluster_may_compress(struct compress_ctx *cc)
+{
+	if (!f2fs_need_compress_data(cc->inode))
+		return false;
+	if (f2fs_is_atomic_file(cc->inode))
+		return false;
+	if (f2fs_is_mmap_file(cc->inode))
+		return false;
+	if (!f2fs_cluster_is_full(cc))
+		return false;
+	if (unlikely(f2fs_cp_error(F2FS_I_SB(cc->inode))))
+		return false;
+	return __cluster_may_compress(cc);
+}
+
+static void set_cluster_writeback(struct compress_ctx *cc)
+{
+	int i;
+
+	for (i = 0; i < cc->cluster_size; i++) {
+		if (cc->rpages[i])
+			set_page_writeback(cc->rpages[i]);
+	}
+}
+
+static void set_cluster_dirty(struct compress_ctx *cc)
+{
+	int i;
+
+	for (i = 0; i < cc->cluster_size; i++)
+		if (cc->rpages[i])
+			set_page_dirty(cc->rpages[i]);
+}
+
+static int prepare_compress_overwrite(struct compress_ctx *cc,
+		struct page **pagep, pgoff_t index, void **fsdata)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(cc->inode);
+	struct address_space *mapping = cc->inode->i_mapping;
+	struct page *page;
+	struct dnode_of_data dn;
+	sector_t last_block_in_bio;
+	unsigned fgp_flag = FGP_LOCK | FGP_WRITE | FGP_CREAT;
+	pgoff_t start_idx = start_idx_of_cluster(cc);
+	int i, ret;
+	bool prealloc;
+
+retry:
+	ret = f2fs_cluster_blocks(cc);
+	if (ret <= 0)
+		return ret;
+
+	/* compressed case */
+	prealloc = (ret < cc->cluster_size);
+
+	ret = f2fs_init_compress_ctx(cc);
+	if (ret)
+		return ret;
+
+	/* keep page reference to avoid page reclaim */
+	for (i = 0; i < cc->cluster_size; i++) {
+		page = f2fs_pagecache_get_page(mapping, start_idx + i,
+							fgp_flag, GFP_NOFS);
+		if (!page) {
+			ret = -ENOMEM;
+			goto unlock_pages;
+		}
+
+		if (PageUptodate(page))
+			unlock_page(page);
+		else
+			f2fs_compress_ctx_add_page(cc, page);
+	}
+
+	if (!f2fs_cluster_is_empty(cc)) {
+		struct bio *bio = NULL;
+
+		ret = f2fs_read_multi_pages(cc, &bio, cc->cluster_size,
+					&last_block_in_bio, false, true);
+		f2fs_destroy_compress_ctx(cc);
+		if (ret)
+			goto release_pages;
+		if (bio)
+			f2fs_submit_bio(sbi, bio, DATA);
+
+		ret = f2fs_init_compress_ctx(cc);
+		if (ret)
+			goto release_pages;
+	}
+
+	for (i = 0; i < cc->cluster_size; i++) {
+		f2fs_bug_on(sbi, cc->rpages[i]);
+
+		page = find_lock_page(mapping, start_idx + i);
+		f2fs_bug_on(sbi, !page);
+
+		f2fs_wait_on_page_writeback(page, DATA, true, true);
+
+		f2fs_compress_ctx_add_page(cc, page);
+		f2fs_put_page(page, 0);
+
+		if (!PageUptodate(page)) {
+			f2fs_unlock_rpages(cc, i + 1);
+			f2fs_put_rpages_mapping(mapping, start_idx,
+					cc->cluster_size);
+			f2fs_destroy_compress_ctx(cc);
+			goto retry;
+		}
+	}
+
+	if (prealloc) {
+		f2fs_do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO, true);
+
+		set_new_dnode(&dn, cc->inode, NULL, NULL, 0);
+
+		for (i = cc->cluster_size - 1; i > 0; i--) {
+			ret = f2fs_get_block(&dn, start_idx + i);
+			if (ret) {
+				i = cc->cluster_size;
+				break;
+			}
+
+			if (dn.data_blkaddr != NEW_ADDR)
+				break;
+		}
+
+		f2fs_do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO, false);
+	}
+
+	if (likely(!ret)) {
+		*fsdata = cc->rpages;
+		*pagep = cc->rpages[offset_in_cluster(cc, index)];
+		return cc->cluster_size;
+	}
+
+unlock_pages:
+	f2fs_unlock_rpages(cc, i);
+release_pages:
+	f2fs_put_rpages_mapping(mapping, start_idx, i);
+	f2fs_destroy_compress_ctx(cc);
+	return ret;
+}
+
+int f2fs_prepare_compress_overwrite(struct inode *inode,
+		struct page **pagep, pgoff_t index, void **fsdata)
+{
+	struct compress_ctx cc = {
+		.inode = inode,
+		.log_cluster_size = F2FS_I(inode)->i_log_cluster_size,
+		.cluster_size = F2FS_I(inode)->i_cluster_size,
+		.cluster_idx = index >> F2FS_I(inode)->i_log_cluster_size,
+		.rpages = NULL,
+		.nr_rpages = 0,
+	};
+
+	return prepare_compress_overwrite(&cc, pagep, index, fsdata);
+}
+
+bool f2fs_compress_write_end(struct inode *inode, void *fsdata,
+					pgoff_t index, unsigned copied)
+
+{
+	struct compress_ctx cc = {
+		.inode = inode,
+		.log_cluster_size = F2FS_I(inode)->i_log_cluster_size,
+		.cluster_size = F2FS_I(inode)->i_cluster_size,
+		.rpages = fsdata,
+	};
+	bool first_index = (index == cc.rpages[0]->index);
+
+	if (copied)
+		set_cluster_dirty(&cc);
+
+	f2fs_put_rpages_wbc(&cc, NULL, false, 1);
+	f2fs_destroy_compress_ctx(&cc);
+
+	return first_index;
+}
+
+int f2fs_truncate_partial_cluster(struct inode *inode, u64 from, bool lock)
+{
+	void *fsdata = NULL;
+	struct page *pagep;
+	int log_cluster_size = F2FS_I(inode)->i_log_cluster_size;
+	pgoff_t start_idx = from >> (PAGE_SHIFT + log_cluster_size) <<
+							log_cluster_size;
+	int err;
+
+	err = f2fs_is_compressed_cluster(inode, start_idx);
+	if (err < 0)
+		return err;
+
+	/* truncate normal cluster */
+	if (!err)
+		return f2fs_do_truncate_blocks(inode, from, lock);
+
+	/* truncate compressed cluster */
+	err = f2fs_prepare_compress_overwrite(inode, &pagep,
+						start_idx, &fsdata);
+
+	/* should not be a normal cluster */
+	f2fs_bug_on(F2FS_I_SB(inode), err == 0);
+
+	if (err <= 0)
+		return err;
+
+	if (err > 0) {
+		struct page **rpages = fsdata;
+		int cluster_size = F2FS_I(inode)->i_cluster_size;
+		int i;
+
+		for (i = cluster_size - 1; i >= 0; i--) {
+			loff_t start = rpages[i]->index << PAGE_SHIFT;
+
+			if (from <= start) {
+				zero_user_segment(rpages[i], 0, PAGE_SIZE);
+			} else {
+				zero_user_segment(rpages[i], from - start,
+								PAGE_SIZE);
+				break;
+			}
+		}
+
+		f2fs_compress_write_end(inode, fsdata, start_idx, true);
+	}
+	return 0;
+}
+
+static int f2fs_write_compressed_pages(struct compress_ctx *cc,
+					int *submitted,
+					struct writeback_control *wbc,
+					enum iostat_type io_type)
+{
+	struct inode *inode = cc->inode;
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	struct f2fs_inode_info *fi = F2FS_I(inode);
+	struct f2fs_io_info fio = {
+		.sbi = sbi,
+		.ino = cc->inode->i_ino,
+		.type = DATA,
+		.op = REQ_OP_WRITE,
+		.op_flags = wbc_to_write_flags(wbc),
+		.old_blkaddr = NEW_ADDR,
+		.page = NULL,
+		.encrypted_page = NULL,
+		.compressed_page = NULL,
+		.submitted = false,
+		.io_type = io_type,
+		.io_wbc = wbc,
+		.encrypted = fscrypt_inode_uses_fs_layer_crypto(cc->inode),
+	};
+	struct dnode_of_data dn;
+	struct node_info ni;
+	struct compress_io_ctx *cic;
+	pgoff_t start_idx = start_idx_of_cluster(cc);
+	unsigned int last_index = cc->cluster_size - 1;
+	loff_t psize;
+	int i, err;
+
+	if (IS_NOQUOTA(inode)) {
+		/*
+		 * We need to wait for node_write to avoid block allocation during
+		 * checkpoint. This can only happen to quota writes which can cause
+		 * the below discard race condition.
+		 */
+		down_read(&sbi->node_write);
+	} else if (!f2fs_trylock_op(sbi)) {
+		goto out_free;
+	}
+
+	set_new_dnode(&dn, cc->inode, NULL, NULL, 0);
+
+	err = f2fs_get_dnode_of_data(&dn, start_idx, LOOKUP_NODE);
+	if (err)
+		goto out_unlock_op;
+
+	for (i = 0; i < cc->cluster_size; i++) {
+		if (data_blkaddr(dn.inode, dn.node_page,
+					dn.ofs_in_node + i) == NULL_ADDR)
+			goto out_put_dnode;
+	}
+
+	psize = (loff_t)(cc->rpages[last_index]->index + 1) << PAGE_SHIFT;
+
+	err = f2fs_get_node_info(fio.sbi, dn.nid, &ni);
+	if (err)
+		goto out_put_dnode;
+
+	fio.version = ni.version;
+
+	cic = kmem_cache_zalloc(cic_entry_slab, GFP_NOFS);
+	if (!cic)
+		goto out_put_dnode;
+
+	cic->magic = F2FS_COMPRESSED_PAGE_MAGIC;
+	cic->inode = inode;
+	atomic_set(&cic->pending_pages, cc->nr_cpages);
+	cic->rpages = page_array_alloc(cc->inode, cc->cluster_size);
+	if (!cic->rpages)
+		goto out_put_cic;
+
+	cic->nr_rpages = cc->cluster_size;
+
+	for (i = 0; i < cc->nr_cpages; i++) {
+		f2fs_set_compressed_page(cc->cpages[i], inode,
+					cc->rpages[i + 1]->index, cic);
+		fio.compressed_page = cc->cpages[i];
+
+		fio.old_blkaddr = data_blkaddr(dn.inode, dn.node_page,
+						dn.ofs_in_node + i + 1);
+
+		/* wait for GCed page writeback via META_MAPPING */
+		f2fs_wait_on_block_writeback(inode, fio.old_blkaddr);
+
+		if (fio.encrypted) {
+			fio.page = cc->rpages[i + 1];
+			err = f2fs_encrypt_one_page(&fio);
+			if (err)
+				goto out_destroy_crypt;
+			cc->cpages[i] = fio.encrypted_page;
+		}
+	}
+
+	set_cluster_writeback(cc);
+
+	for (i = 0; i < cc->cluster_size; i++)
+		cic->rpages[i] = cc->rpages[i];
+
+	for (i = 0; i < cc->cluster_size; i++, dn.ofs_in_node++) {
+		block_t blkaddr;
+
+		blkaddr = f2fs_data_blkaddr(&dn);
+		fio.page = cc->rpages[i];
+		fio.old_blkaddr = blkaddr;
+
+		/* cluster header */
+		if (i == 0) {
+			if (blkaddr == COMPRESS_ADDR)
+				fio.compr_blocks++;
+			if (__is_valid_data_blkaddr(blkaddr))
+				f2fs_invalidate_blocks(sbi, blkaddr);
+			f2fs_update_data_blkaddr(&dn, COMPRESS_ADDR);
+			goto unlock_continue;
+		}
+
+		if (fio.compr_blocks && __is_valid_data_blkaddr(blkaddr))
+			fio.compr_blocks++;
+
+		if (i > cc->nr_cpages) {
+			if (__is_valid_data_blkaddr(blkaddr)) {
+				f2fs_invalidate_blocks(sbi, blkaddr);
+				f2fs_update_data_blkaddr(&dn, NEW_ADDR);
+			}
+			goto unlock_continue;
+		}
+
+		f2fs_bug_on(fio.sbi, blkaddr == NULL_ADDR);
+
+		if (fio.encrypted)
+			fio.encrypted_page = cc->cpages[i - 1];
+		else
+			fio.compressed_page = cc->cpages[i - 1];
+
+		cc->cpages[i - 1] = NULL;
+		f2fs_outplace_write_data(&dn, &fio);
+		(*submitted)++;
+unlock_continue:
+		inode_dec_dirty_pages(cc->inode);
+		unlock_page(fio.page);
+	}
+
+	if (fio.compr_blocks)
+		f2fs_i_compr_blocks_update(inode, fio.compr_blocks - 1, false);
+	f2fs_i_compr_blocks_update(inode, cc->nr_cpages, true);
+
+	set_inode_flag(cc->inode, FI_APPEND_WRITE);
+	if (cc->cluster_idx == 0)
+		set_inode_flag(inode, FI_FIRST_BLOCK_WRITTEN);
+
+	f2fs_put_dnode(&dn);
+	if (IS_NOQUOTA(inode))
+		up_read(&sbi->node_write);
+	else
+		f2fs_unlock_op(sbi);
+
+	spin_lock(&fi->i_size_lock);
+	if (fi->last_disk_size < psize)
+		fi->last_disk_size = psize;
+	spin_unlock(&fi->i_size_lock);
+
+	f2fs_put_rpages(cc);
+	page_array_free(cc->inode, cc->cpages, cc->nr_cpages);
+	cc->cpages = NULL;
+	f2fs_destroy_compress_ctx(cc);
+	return 0;
+
+out_destroy_crypt:
+	page_array_free(cc->inode, cic->rpages, cc->cluster_size);
+
+	for (--i; i >= 0; i--)
+		fscrypt_finalize_bounce_page(&cc->cpages[i]);
+	for (i = 0; i < cc->nr_cpages; i++) {
+		if (!cc->cpages[i])
+			continue;
+		f2fs_put_page(cc->cpages[i], 1);
+	}
+out_put_cic:
+	kmem_cache_free(cic_entry_slab, cic);
+out_put_dnode:
+	f2fs_put_dnode(&dn);
+out_unlock_op:
+	if (IS_NOQUOTA(inode))
+		up_read(&sbi->node_write);
+	else
+		f2fs_unlock_op(sbi);
+out_free:
+	page_array_free(cc->inode, cc->cpages, cc->nr_cpages);
+	cc->cpages = NULL;
+	return -EAGAIN;
+}
+
+void f2fs_compress_write_end_io(struct bio *bio, struct page *page)
+{
+	struct f2fs_sb_info *sbi = bio->bi_private;
+	struct compress_io_ctx *cic =
+			(struct compress_io_ctx *)page_private(page);
+	int i;
+
+	if (unlikely(bio->bi_status))
+		mapping_set_error(cic->inode->i_mapping, -EIO);
+
+	f2fs_compress_free_page(page);
+
+	dec_page_count(sbi, F2FS_WB_DATA);
+
+	if (atomic_dec_return(&cic->pending_pages))
+		return;
+
+	for (i = 0; i < cic->nr_rpages; i++) {
+		WARN_ON(!cic->rpages[i]);
+		clear_cold_data(cic->rpages[i]);
+		end_page_writeback(cic->rpages[i]);
+	}
+
+	page_array_free(cic->inode, cic->rpages, cic->nr_rpages);
+	kmem_cache_free(cic_entry_slab, cic);
+}
+
+static int f2fs_write_raw_pages(struct compress_ctx *cc,
+					int *submitted,
+					struct writeback_control *wbc,
+					enum iostat_type io_type)
+{
+	struct address_space *mapping = cc->inode->i_mapping;
+	int _submitted, compr_blocks, ret;
+	int i = -1, err = 0;
+
+	compr_blocks = f2fs_compressed_blocks(cc);
+	if (compr_blocks < 0) {
+		err = compr_blocks;
+		goto out_err;
+	}
+
+	for (i = 0; i < cc->cluster_size; i++) {
+		if (!cc->rpages[i])
+			continue;
+retry_write:
+		if (cc->rpages[i]->mapping != mapping) {
+			unlock_page(cc->rpages[i]);
+			continue;
+		}
+
+		BUG_ON(!PageLocked(cc->rpages[i]));
+
+		ret = f2fs_write_single_data_page(cc->rpages[i], &_submitted,
+						NULL, NULL, wbc, io_type,
+						compr_blocks);
+		if (ret) {
+			if (ret == AOP_WRITEPAGE_ACTIVATE) {
+				unlock_page(cc->rpages[i]);
+				ret = 0;
+			} else if (ret == -EAGAIN) {
+				/*
+				 * for quota file, just redirty left pages to
+				 * avoid deadlock caused by cluster update race
+				 * from foreground operation.
+				 */
+				if (IS_NOQUOTA(cc->inode)) {
+					err = 0;
+					goto out_err;
+				}
+				ret = 0;
+				cond_resched();
+				congestion_wait(BLK_RW_ASYNC,
+						DEFAULT_IO_TIMEOUT);
+				lock_page(cc->rpages[i]);
+
+				if (!PageDirty(cc->rpages[i])) {
+					unlock_page(cc->rpages[i]);
+					continue;
+				}
+
+				clear_page_dirty_for_io(cc->rpages[i]);
+				goto retry_write;
+			}
+			err = ret;
+			goto out_err;
+		}
+
+		*submitted += _submitted;
+	}
+	return 0;
+out_err:
+	for (++i; i < cc->cluster_size; i++) {
+		if (!cc->rpages[i])
+			continue;
+		redirty_page_for_writepage(wbc, cc->rpages[i]);
+		unlock_page(cc->rpages[i]);
+	}
+	return err;
+}
+
+int f2fs_write_multi_pages(struct compress_ctx *cc,
+					int *submitted,
+					struct writeback_control *wbc,
+					enum iostat_type io_type)
+{
+	int err;
+
+	*submitted = 0;
+	if (cluster_may_compress(cc)) {
+		err = f2fs_compress_pages(cc);
+		if (err == -EAGAIN) {
+			goto write;
+		} else if (err) {
+			f2fs_put_rpages_wbc(cc, wbc, true, 1);
+			goto destroy_out;
+		}
+
+		err = f2fs_write_compressed_pages(cc, submitted,
+							wbc, io_type);
+		if (!err)
+			return 0;
+		f2fs_bug_on(F2FS_I_SB(cc->inode), err != -EAGAIN);
+	}
+write:
+	f2fs_bug_on(F2FS_I_SB(cc->inode), *submitted);
+
+	err = f2fs_write_raw_pages(cc, submitted, wbc, io_type);
+	f2fs_put_rpages_wbc(cc, wbc, false, 0);
+destroy_out:
+	f2fs_destroy_compress_ctx(cc);
+	return err;
+}
+
+struct decompress_io_ctx *f2fs_alloc_dic(struct compress_ctx *cc)
+{
+	struct decompress_io_ctx *dic;
+	pgoff_t start_idx = start_idx_of_cluster(cc);
+	int i;
+
+	dic = kmem_cache_zalloc(dic_entry_slab, GFP_NOFS);
+	if (!dic)
+		return ERR_PTR(-ENOMEM);
+
+	dic->rpages = page_array_alloc(cc->inode, cc->cluster_size);
+	if (!dic->rpages) {
+		kmem_cache_free(dic_entry_slab, dic);
+		return ERR_PTR(-ENOMEM);
+	}
+
+	dic->magic = F2FS_COMPRESSED_PAGE_MAGIC;
+	dic->inode = cc->inode;
+	atomic_set(&dic->pending_pages, cc->nr_cpages);
+	dic->cluster_idx = cc->cluster_idx;
+	dic->cluster_size = cc->cluster_size;
+	dic->log_cluster_size = cc->log_cluster_size;
+	dic->nr_cpages = cc->nr_cpages;
+	dic->failed = false;
+
+	for (i = 0; i < dic->cluster_size; i++)
+		dic->rpages[i] = cc->rpages[i];
+	dic->nr_rpages = cc->cluster_size;
+
+	dic->cpages = page_array_alloc(dic->inode, dic->nr_cpages);
+	if (!dic->cpages)
+		goto out_free;
+
+	for (i = 0; i < dic->nr_cpages; i++) {
+		struct page *page;
+
+		page = f2fs_compress_alloc_page();
+		if (!page)
+			goto out_free;
+
+		f2fs_set_compressed_page(page, cc->inode,
+					start_idx + i + 1, dic);
+		dic->cpages[i] = page;
+	}
+
+	return dic;
+
+out_free:
+	f2fs_free_dic(dic);
+	return ERR_PTR(-ENOMEM);
+}
+
+void f2fs_free_dic(struct decompress_io_ctx *dic)
+{
+	int i;
+
+	if (dic->tpages) {
+		for (i = 0; i < dic->cluster_size; i++) {
+			if (dic->rpages[i])
+				continue;
+			if (!dic->tpages[i])
+				continue;
+			f2fs_compress_free_page(dic->tpages[i]);
+		}
+		page_array_free(dic->inode, dic->tpages, dic->cluster_size);
+	}
+
+	if (dic->cpages) {
+		for (i = 0; i < dic->nr_cpages; i++) {
+			if (!dic->cpages[i])
+				continue;
+			f2fs_compress_free_page(dic->cpages[i]);
+		}
+		page_array_free(dic->inode, dic->cpages, dic->nr_cpages);
+	}
+
+	page_array_free(dic->inode, dic->rpages, dic->nr_rpages);
+	kmem_cache_free(dic_entry_slab, dic);
+}
+
+void f2fs_decompress_end_io(struct page **rpages,
+			unsigned int cluster_size, bool err, bool verity)
+{
+	int i;
+
+	for (i = 0; i < cluster_size; i++) {
+		struct page *rpage = rpages[i];
+
+		if (!rpage)
+			continue;
+
+		if (err || PageError(rpage))
+			goto clear_uptodate;
+
+		if (!verity || fsverity_verify_page(rpage)) {
+			SetPageUptodate(rpage);
+			goto unlock;
+		}
+clear_uptodate:
+		ClearPageUptodate(rpage);
+		ClearPageError(rpage);
+unlock:
+		unlock_page(rpage);
+	}
+}
+
+int f2fs_init_page_array_cache(struct f2fs_sb_info *sbi)
+{
+	dev_t dev = sbi->sb->s_bdev->bd_dev;
+	char slab_name[32];
+
+	sprintf(slab_name, "f2fs_page_array_entry-%u:%u", MAJOR(dev), MINOR(dev));
+
+	sbi->page_array_slab_size = sizeof(struct page *) <<
+					F2FS_OPTION(sbi).compress_log_size;
+
+	sbi->page_array_slab = f2fs_kmem_cache_create(slab_name,
+					sbi->page_array_slab_size);
+	if (!sbi->page_array_slab)
+		return -ENOMEM;
+	return 0;
+}
+
+void f2fs_destroy_page_array_cache(struct f2fs_sb_info *sbi)
+{
+	kmem_cache_destroy(sbi->page_array_slab);
+}
+
+static int __init f2fs_init_cic_cache(void)
+{
+	cic_entry_slab = f2fs_kmem_cache_create("f2fs_cic_entry",
+					sizeof(struct compress_io_ctx));
+	if (!cic_entry_slab)
+		return -ENOMEM;
+	return 0;
+}
+
+static void f2fs_destroy_cic_cache(void)
+{
+	kmem_cache_destroy(cic_entry_slab);
+}
+
+static int __init f2fs_init_dic_cache(void)
+{
+	dic_entry_slab = f2fs_kmem_cache_create("f2fs_dic_entry",
+					sizeof(struct decompress_io_ctx));
+	if (!dic_entry_slab)
+		return -ENOMEM;
+	return 0;
+}
+
+static void f2fs_destroy_dic_cache(void)
+{
+	kmem_cache_destroy(dic_entry_slab);
+}
+
+int __init f2fs_init_compress_cache(void)
+{
+	int err;
+
+	err = f2fs_init_cic_cache();
+	if (err)
+		goto out;
+	err = f2fs_init_dic_cache();
+	if (err)
+		goto free_cic;
+	return 0;
+free_cic:
+	f2fs_destroy_cic_cache();
+out:
+	return -ENOMEM;
+}
+
+void f2fs_destroy_compress_cache(void)
+{
+	f2fs_destroy_dic_cache();
+	f2fs_destroy_cic_cache();
+}
diff --git a/fs/f2fs/compress.h b/fs/f2fs/compress.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/fs/f2fs/compress.h
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 68be334..e247b9b 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -14,6 +14,7 @@
 #include <linux/pagevec.h>
 #include <linux/blkdev.h>
 #include <linux/bio.h>
+#include <linux/blk-crypto.h>
 #include <linux/swap.h>
 #include <linux/prefetch.h>
 #include <linux/uio.h>
@@ -25,11 +26,50 @@
 #include "segment.h"
 #include "trace.h"
 #include <trace/events/f2fs.h>
+#include <trace/events/android_fs.h>
 
 #define NUM_PREALLOC_POST_READ_CTXS	128
 
 static struct kmem_cache *bio_post_read_ctx_cache;
+static struct kmem_cache *bio_entry_slab;
 static mempool_t *bio_post_read_ctx_pool;
+static struct bio_set f2fs_bioset;
+
+#define	F2FS_BIO_POOL_SIZE	NR_CURSEG_TYPE
+
+int __init f2fs_init_bioset(void)
+{
+	if (bioset_init(&f2fs_bioset, F2FS_BIO_POOL_SIZE,
+					0, BIOSET_NEED_BVECS))
+		return -ENOMEM;
+	return 0;
+}
+
+void f2fs_destroy_bioset(void)
+{
+	bioset_exit(&f2fs_bioset);
+}
+
+static inline struct bio *__f2fs_bio_alloc(gfp_t gfp_mask,
+						unsigned int nr_iovecs)
+{
+	return bio_alloc_bioset(gfp_mask, nr_iovecs, &f2fs_bioset);
+}
+
+struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi, int npages, bool noio)
+{
+	if (noio) {
+		/* No failure on bio allocation */
+		return __f2fs_bio_alloc(GFP_NOIO, npages);
+	}
+
+	if (time_to_inject(sbi, FAULT_ALLOC_BIO)) {
+		f2fs_show_injection_info(sbi, FAULT_ALLOC_BIO);
+		return NULL;
+	}
+
+	return __f2fs_bio_alloc(GFP_KERNEL, npages);
+}
 
 static bool __is_cp_guaranteed(struct page *page)
 {
@@ -40,11 +80,14 @@ static bool __is_cp_guaranteed(struct page *page)
 	if (!mapping)
 		return false;
 
+	if (f2fs_is_compressed_page(page))
+		return false;
+
 	inode = mapping->host;
 	sbi = F2FS_I_SB(inode);
 
 	if (inode->i_ino == F2FS_META_INO(sbi) ||
-			inode->i_ino ==  F2FS_NODE_INO(sbi) ||
+			inode->i_ino == F2FS_NODE_INO(sbi) ||
 			S_ISDIR(inode->i_mode) ||
 			(S_ISREG(inode->i_mode) &&
 			(f2fs_is_atomic_file(inode) || IS_NOQUOTA(inode))) ||
@@ -72,19 +115,20 @@ static enum count_type __read_io_type(struct page *page)
 
 /* postprocessing steps for read bios */
 enum bio_post_read_step {
-	STEP_INITIAL = 0,
 	STEP_DECRYPT,
+	STEP_DECOMPRESS_NOWQ,		/* handle normal cluster data inplace */
+	STEP_DECOMPRESS,		/* handle compressed cluster data in workqueue */
 	STEP_VERITY,
 };
 
 struct bio_post_read_ctx {
 	struct bio *bio;
+	struct f2fs_sb_info *sbi;
 	struct work_struct work;
-	unsigned int cur_step;
 	unsigned int enabled_steps;
 };
 
-static void __read_end_io(struct bio *bio)
+static void __read_end_io(struct bio *bio, bool compr, bool verity)
 {
 	struct page *page;
 	struct bio_vec *bv;
@@ -93,6 +137,15 @@ static void __read_end_io(struct bio *bio)
 	bio_for_each_segment_all(bv, bio, iter_all) {
 		page = bv->bv_page;
 
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+		if (compr && f2fs_is_compressed_page(page)) {
+			f2fs_decompress_pages(bio, page, verity);
+			continue;
+		}
+		if (verity)
+			continue;
+#endif
+
 		/* PG_error was set if any post_read step failed */
 		if (bio->bi_status || PageError(page)) {
 			ClearPageUptodate(page);
@@ -104,31 +157,133 @@ static void __read_end_io(struct bio *bio)
 		dec_page_count(F2FS_P_SB(page), __read_io_type(page));
 		unlock_page(page);
 	}
-	if (bio->bi_private)
-		mempool_free(bio->bi_private, bio_post_read_ctx_pool);
-	bio_put(bio);
+}
+
+static void f2fs_release_read_bio(struct bio *bio);
+static void __f2fs_read_end_io(struct bio *bio, bool compr, bool verity)
+{
+	if (!compr)
+		__read_end_io(bio, false, verity);
+	f2fs_release_read_bio(bio);
+}
+
+static void f2fs_decompress_bio(struct bio *bio, bool verity)
+{
+	__read_end_io(bio, true, verity);
 }
 
 static void bio_post_read_processing(struct bio_post_read_ctx *ctx);
 
-static void decrypt_work(struct work_struct *work)
+static void f2fs_decrypt_work(struct bio_post_read_ctx *ctx)
 {
-	struct bio_post_read_ctx *ctx =
-		container_of(work, struct bio_post_read_ctx, work);
-
 	fscrypt_decrypt_bio(ctx->bio);
-
-	bio_post_read_processing(ctx);
 }
 
-static void verity_work(struct work_struct *work)
+static void f2fs_decompress_work(struct bio_post_read_ctx *ctx)
+{
+	f2fs_decompress_bio(ctx->bio, ctx->enabled_steps & (1 << STEP_VERITY));
+}
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+static void f2fs_verify_pages(struct page **rpages, unsigned int cluster_size)
+{
+	f2fs_decompress_end_io(rpages, cluster_size, false, true);
+}
+
+static void f2fs_verify_bio(struct bio *bio)
+{
+	struct bio_vec *bv;
+	struct bvec_iter_all iter_all;
+
+	bio_for_each_segment_all(bv, bio, iter_all) {
+		struct page *page = bv->bv_page;
+		struct decompress_io_ctx *dic;
+
+		dic = (struct decompress_io_ctx *)page_private(page);
+
+		if (dic) {
+			if (atomic_dec_return(&dic->verity_pages))
+				continue;
+			f2fs_verify_pages(dic->rpages,
+						dic->cluster_size);
+			f2fs_free_dic(dic);
+			continue;
+		}
+
+		if (bio->bi_status || PageError(page))
+			goto clear_uptodate;
+
+		if (fsverity_verify_page(page)) {
+			SetPageUptodate(page);
+			goto unlock;
+		}
+clear_uptodate:
+		ClearPageUptodate(page);
+		ClearPageError(page);
+unlock:
+		dec_page_count(F2FS_P_SB(page), __read_io_type(page));
+		unlock_page(page);
+	}
+}
+#endif
+
+static void f2fs_verity_work(struct work_struct *work)
+{
+	struct bio_post_read_ctx *ctx =
+		container_of(work, struct bio_post_read_ctx, work);
+	struct bio *bio = ctx->bio;
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	unsigned int enabled_steps = ctx->enabled_steps;
+#endif
+
+	/*
+	 * fsverity_verify_bio() may call readpages() again, and while verity
+	 * will be disabled for this, decryption may still be needed, resulting
+	 * in another bio_post_read_ctx being allocated.  So to prevent
+	 * deadlocks we need to release the current ctx to the mempool first.
+	 * This assumes that verity is the last post-read step.
+	 */
+	mempool_free(ctx, bio_post_read_ctx_pool);
+	bio->bi_private = NULL;
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	/* previous step is decompression */
+	if (enabled_steps & (1 << STEP_DECOMPRESS)) {
+		f2fs_verify_bio(bio);
+		f2fs_release_read_bio(bio);
+		return;
+	}
+#endif
+
+	fsverity_verify_bio(bio);
+	__f2fs_read_end_io(bio, false, false);
+}
+
+static void f2fs_post_read_work(struct work_struct *work)
 {
 	struct bio_post_read_ctx *ctx =
 		container_of(work, struct bio_post_read_ctx, work);
 
-	fsverity_verify_bio(ctx->bio);
+	if (ctx->enabled_steps & (1 << STEP_DECRYPT))
+		f2fs_decrypt_work(ctx);
 
-	bio_post_read_processing(ctx);
+	if (ctx->enabled_steps & (1 << STEP_DECOMPRESS))
+		f2fs_decompress_work(ctx);
+
+	if (ctx->enabled_steps & (1 << STEP_VERITY)) {
+		INIT_WORK(&ctx->work, f2fs_verity_work);
+		fsverity_enqueue_verify_work(&ctx->work);
+		return;
+	}
+
+	__f2fs_read_end_io(ctx->bio,
+		ctx->enabled_steps & (1 << STEP_DECOMPRESS), false);
+}
+
+static void f2fs_enqueue_post_read_work(struct f2fs_sb_info *sbi,
+						struct work_struct *work)
+{
+	queue_work(sbi->post_read_wq, work);
 }
 
 static void bio_post_read_processing(struct bio_post_read_ctx *ctx)
@@ -138,50 +293,45 @@ static void bio_post_read_processing(struct bio_post_read_ctx *ctx)
 	 * verity may require reading metadata pages that need decryption, and
 	 * we shouldn't recurse to the same workqueue.
 	 */
-	switch (++ctx->cur_step) {
-	case STEP_DECRYPT:
-		if (ctx->enabled_steps & (1 << STEP_DECRYPT)) {
-			INIT_WORK(&ctx->work, decrypt_work);
-			fscrypt_enqueue_decrypt_work(&ctx->work);
-			return;
-		}
-		ctx->cur_step++;
-		/* fall-through */
-	case STEP_VERITY:
-		if (ctx->enabled_steps & (1 << STEP_VERITY)) {
-			INIT_WORK(&ctx->work, verity_work);
-			fsverity_enqueue_verify_work(&ctx->work);
-			return;
-		}
-		ctx->cur_step++;
-		/* fall-through */
-	default:
-		__read_end_io(ctx->bio);
+
+	if (ctx->enabled_steps & (1 << STEP_DECRYPT) ||
+		ctx->enabled_steps & (1 << STEP_DECOMPRESS)) {
+		INIT_WORK(&ctx->work, f2fs_post_read_work);
+		f2fs_enqueue_post_read_work(ctx->sbi, &ctx->work);
+		return;
 	}
+
+	if (ctx->enabled_steps & (1 << STEP_VERITY)) {
+		INIT_WORK(&ctx->work, f2fs_verity_work);
+		fsverity_enqueue_verify_work(&ctx->work);
+		return;
+	}
+
+	__f2fs_read_end_io(ctx->bio, false, false);
 }
 
 static bool f2fs_bio_post_read_required(struct bio *bio)
 {
-	return bio->bi_private && !bio->bi_status;
+	return bio->bi_private;
 }
 
 static void f2fs_read_end_io(struct bio *bio)
 {
-	if (time_to_inject(F2FS_P_SB(bio_first_page_all(bio)),
-						FAULT_READ_IO)) {
-		f2fs_show_injection_info(FAULT_READ_IO);
+	struct f2fs_sb_info *sbi = F2FS_P_SB(bio_first_page_all(bio));
+
+	if (time_to_inject(sbi, FAULT_READ_IO)) {
+		f2fs_show_injection_info(sbi, FAULT_READ_IO);
 		bio->bi_status = BLK_STS_IOERR;
 	}
 
 	if (f2fs_bio_post_read_required(bio)) {
 		struct bio_post_read_ctx *ctx = bio->bi_private;
 
-		ctx->cur_step = STEP_INITIAL;
 		bio_post_read_processing(ctx);
 		return;
 	}
 
-	__read_end_io(bio);
+	__f2fs_read_end_io(bio, false, false);
 }
 
 static void f2fs_write_end_io(struct bio *bio)
@@ -191,7 +341,7 @@ static void f2fs_write_end_io(struct bio *bio)
 	struct bvec_iter_all iter_all;
 
 	if (time_to_inject(sbi, FAULT_WRITE_IO)) {
-		f2fs_show_injection_info(FAULT_WRITE_IO);
+		f2fs_show_injection_info(sbi, FAULT_WRITE_IO);
 		bio->bi_status = BLK_STS_IOERR;
 	}
 
@@ -212,6 +362,13 @@ static void f2fs_write_end_io(struct bio *bio)
 
 		fscrypt_finalize_bounce_page(&page);
 
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+		if (f2fs_is_compressed_page(page)) {
+			f2fs_compress_write_end_io(bio, page);
+			continue;
+		}
+#endif
+
 		if (unlikely(bio->bi_status)) {
 			mapping_set_error(page->mapping, -EIO);
 			if (type == F2FS_WB_CP_DATA)
@@ -234,9 +391,6 @@ static void f2fs_write_end_io(struct bio *bio)
 	bio_put(bio);
 }
 
-/*
- * Return true, if pre_bio's bdev is same as its target device.
- */
 struct block_device *f2fs_target_device(struct f2fs_sb_info *sbi,
 				block_t blk_addr, struct bio *bio)
 {
@@ -273,6 +427,9 @@ int f2fs_target_device_index(struct f2fs_sb_info *sbi, block_t blkaddr)
 	return 0;
 }
 
+/*
+ * Return true, if pre_bio's bdev is same as its target device.
+ */
 static bool __same_bdev(struct f2fs_sb_info *sbi,
 				block_t blk_addr, struct bio *bio)
 {
@@ -280,9 +437,6 @@ static bool __same_bdev(struct f2fs_sb_info *sbi,
 	return bio->bi_disk == b->bd_disk && bio->bi_partno == b->bd_partno;
 }
 
-/*
- * Low-level block read/write IO operations.
- */
 static struct bio *__bio_alloc(struct f2fs_io_info *fio, int npages)
 {
 	struct f2fs_sb_info *sbi = fio->sbi;
@@ -306,6 +460,37 @@ static struct bio *__bio_alloc(struct f2fs_io_info *fio, int npages)
 	return bio;
 }
 
+static void f2fs_set_bio_crypt_ctx(struct bio *bio, const struct inode *inode,
+				  pgoff_t first_idx,
+				  const struct f2fs_io_info *fio,
+				  gfp_t gfp_mask)
+{
+	/*
+	 * The f2fs garbage collector sets ->encrypted_page when it wants to
+	 * read/write raw data without encryption.
+	 */
+	if (!fio || !fio->encrypted_page)
+		fscrypt_set_bio_crypt_ctx(bio, inode, first_idx, gfp_mask);
+	else if (fscrypt_inode_should_skip_dm_default_key(inode))
+		bio_set_skip_dm_default_key(bio);
+}
+
+static bool f2fs_crypt_mergeable_bio(struct bio *bio, const struct inode *inode,
+				     pgoff_t next_idx,
+				     const struct f2fs_io_info *fio)
+{
+	/*
+	 * The f2fs garbage collector sets ->encrypted_page when it wants to
+	 * read/write raw data without encryption.
+	 */
+	if (fio && fio->encrypted_page)
+		return !bio_has_crypt_ctx(bio) &&
+			(bio_should_skip_dm_default_key(bio) ==
+			 fscrypt_inode_should_skip_dm_default_key(inode));
+
+	return fscrypt_mergeable_bio(bio, inode, next_idx);
+}
+
 static inline void __submit_bio(struct f2fs_sb_info *sbi,
 				struct bio *bio, enum page_type type)
 {
@@ -315,7 +500,7 @@ static inline void __submit_bio(struct f2fs_sb_info *sbi,
 		if (type != DATA && type != NODE)
 			goto submit_io;
 
-		if (test_opt(sbi, LFS) && current->plug)
+		if (f2fs_lfs_mode(sbi) && current->plug)
 			blk_finish_plug(current->plug);
 
 		if (F2FS_IO_ALIGNED(sbi))
@@ -336,7 +521,7 @@ static inline void __submit_bio(struct f2fs_sb_info *sbi,
 
 			zero_user_segment(page, 0, PAGE_SIZE);
 			SetPagePrivate(page);
-			set_page_private(page, (unsigned long)DUMMY_WRITTEN_PAGE);
+			set_page_private(page, DUMMY_WRITTEN_PAGE);
 			lock_page(page);
 			if (bio_add_page(bio, page, PAGE_SIZE, 0) < PAGE_SIZE)
 				f2fs_bug_on(sbi, 1);
@@ -356,6 +541,40 @@ static inline void __submit_bio(struct f2fs_sb_info *sbi,
 	submit_bio(bio);
 }
 
+void f2fs_submit_bio(struct f2fs_sb_info *sbi,
+				struct bio *bio, enum page_type type)
+{
+	__submit_bio(sbi, bio, type);
+}
+
+static void __attach_io_flag(struct f2fs_io_info *fio)
+{
+	struct f2fs_sb_info *sbi = fio->sbi;
+	unsigned int temp_mask = (1 << NR_TEMP_TYPE) - 1;
+	unsigned int io_flag, fua_flag, meta_flag;
+
+	if (fio->type == DATA)
+		io_flag = sbi->data_io_flag;
+	else if (fio->type == NODE)
+		io_flag = sbi->node_io_flag;
+	else
+		return;
+
+	fua_flag = io_flag & temp_mask;
+	meta_flag = (io_flag >> NR_TEMP_TYPE) & temp_mask;
+
+	/*
+	 * data/node io flag bits per temp:
+	 *      REQ_META     |      REQ_FUA      |
+	 *    5 |    4 |   3 |    2 |    1 |   0 |
+	 * Cold | Warm | Hot | Cold | Warm | Hot |
+	 */
+	if ((1 << fio->temp) & meta_flag)
+		fio->op_flags |= REQ_META;
+	if ((1 << fio->temp) & fua_flag)
+		fio->op_flags |= REQ_FUA;
+}
+
 static void __submit_merged_bio(struct f2fs_bio_info *io)
 {
 	struct f2fs_io_info *fio = &io->fio;
@@ -363,6 +582,7 @@ static void __submit_merged_bio(struct f2fs_bio_info *io)
 	if (!io->bio)
 		return;
 
+	__attach_io_flag(fio);
 	bio_set_op_attrs(io->bio, fio->op, fio->op_flags);
 
 	if (is_read_io(fio->op))
@@ -378,7 +598,6 @@ static bool __has_merged_page(struct bio *bio, struct inode *inode,
 						struct page *page, nid_t ino)
 {
 	struct bio_vec *bvec;
-	struct page *target;
 	struct bvec_iter_all iter_all;
 
 	if (!bio)
@@ -388,10 +607,18 @@ static bool __has_merged_page(struct bio *bio, struct inode *inode,
 		return true;
 
 	bio_for_each_segment_all(bvec, bio, iter_all) {
+		struct page *target = bvec->bv_page;
 
-		target = bvec->bv_page;
-		if (fscrypt_is_bounce_page(target))
+		if (fscrypt_is_bounce_page(target)) {
 			target = fscrypt_pagecache_page(target);
+			if (IS_ERR(target))
+				continue;
+		}
+		if (f2fs_is_compressed_page(target)) {
+			target = f2fs_compress_control_page(target);
+			if (IS_ERR(target))
+				continue;
+		}
 
 		if (inode && inode == target->mapping->host)
 			return true;
@@ -489,6 +716,9 @@ int f2fs_submit_page_bio(struct f2fs_io_info *fio)
 	/* Allocate a new bio */
 	bio = __bio_alloc(fio, 1);
 
+	f2fs_set_bio_crypt_ctx(bio, fio->page->mapping->host,
+			       fio->page->index, fio, GFP_NOIO);
+
 	if (bio_add_page(bio, page, PAGE_SIZE, 0) < PAGE_SIZE) {
 		bio_put(bio);
 		return -EFAULT;
@@ -497,6 +727,7 @@ int f2fs_submit_page_bio(struct f2fs_io_info *fio)
 	if (fio->io_wbc && !is_read_io(fio->op))
 		wbc_account_cgroup_owner(fio->io_wbc, page, PAGE_SIZE);
 
+	__attach_io_flag(fio);
 	bio_set_op_attrs(bio, fio->op, fio->op_flags);
 
 	inc_page_count(fio->sbi, is_read_io(fio->op) ?
@@ -509,6 +740,9 @@ int f2fs_submit_page_bio(struct f2fs_io_info *fio)
 static bool page_is_mergeable(struct f2fs_sb_info *sbi, struct bio *bio,
 				block_t last_blkaddr, block_t cur_blkaddr)
 {
+	if (unlikely(sbi->max_io_bytes &&
+			bio->bi_iter.bi_size >= sbi->max_io_bytes))
+		return false;
 	if (last_blkaddr + 1 != cur_blkaddr)
 		return false;
 	return __same_bdev(sbi, cur_blkaddr, bio);
@@ -543,6 +777,134 @@ static bool io_is_mergeable(struct f2fs_sb_info *sbi, struct bio *bio,
 	return io_type_is_mergeable(io, fio);
 }
 
+static void add_bio_entry(struct f2fs_sb_info *sbi, struct bio *bio,
+				struct page *page, enum temp_type temp)
+{
+	struct f2fs_bio_info *io = sbi->write_io[DATA] + temp;
+	struct bio_entry *be;
+
+	be = f2fs_kmem_cache_alloc(bio_entry_slab, GFP_NOFS);
+	be->bio = bio;
+	bio_get(bio);
+
+	if (bio_add_page(bio, page, PAGE_SIZE, 0) != PAGE_SIZE)
+		f2fs_bug_on(sbi, 1);
+
+	down_write(&io->bio_list_lock);
+	list_add_tail(&be->list, &io->bio_list);
+	up_write(&io->bio_list_lock);
+}
+
+static void del_bio_entry(struct bio_entry *be)
+{
+	list_del(&be->list);
+	kmem_cache_free(bio_entry_slab, be);
+}
+
+static int add_ipu_page(struct f2fs_io_info *fio, struct bio **bio,
+							struct page *page)
+{
+	struct f2fs_sb_info *sbi = fio->sbi;
+	enum temp_type temp;
+	bool found = false;
+	int ret = -EAGAIN;
+
+	for (temp = HOT; temp < NR_TEMP_TYPE && !found; temp++) {
+		struct f2fs_bio_info *io = sbi->write_io[DATA] + temp;
+		struct list_head *head = &io->bio_list;
+		struct bio_entry *be;
+
+		down_write(&io->bio_list_lock);
+		list_for_each_entry(be, head, list) {
+			if (be->bio != *bio)
+				continue;
+
+			found = true;
+
+			f2fs_bug_on(sbi, !page_is_mergeable(sbi, *bio,
+							    *fio->last_block,
+							    fio->new_blkaddr));
+			if (f2fs_crypt_mergeable_bio(*bio,
+					fio->page->mapping->host,
+					fio->page->index, fio) &&
+			    bio_add_page(*bio, page, PAGE_SIZE, 0) ==
+					PAGE_SIZE) {
+				ret = 0;
+				break;
+			}
+
+			/* page can't be merged into bio; submit the bio */
+			del_bio_entry(be);
+			__submit_bio(sbi, *bio, DATA);
+			break;
+		}
+		up_write(&io->bio_list_lock);
+	}
+
+	if (ret) {
+		bio_put(*bio);
+		*bio = NULL;
+	}
+
+	return ret;
+}
+
+void f2fs_submit_merged_ipu_write(struct f2fs_sb_info *sbi,
+					struct bio **bio, struct page *page)
+{
+	enum temp_type temp;
+	bool found = false;
+	struct bio *target = bio ? *bio : NULL;
+
+	for (temp = HOT; temp < NR_TEMP_TYPE && !found; temp++) {
+		struct f2fs_bio_info *io = sbi->write_io[DATA] + temp;
+		struct list_head *head = &io->bio_list;
+		struct bio_entry *be;
+
+		if (list_empty(head))
+			continue;
+
+		down_read(&io->bio_list_lock);
+		list_for_each_entry(be, head, list) {
+			if (target)
+				found = (target == be->bio);
+			else
+				found = __has_merged_page(be->bio, NULL,
+								page, 0);
+			if (found)
+				break;
+		}
+		up_read(&io->bio_list_lock);
+
+		if (!found)
+			continue;
+
+		found = false;
+
+		down_write(&io->bio_list_lock);
+		list_for_each_entry(be, head, list) {
+			if (target)
+				found = (target == be->bio);
+			else
+				found = __has_merged_page(be->bio, NULL,
+								page, 0);
+			if (found) {
+				target = be->bio;
+				del_bio_entry(be);
+				break;
+			}
+		}
+		up_write(&io->bio_list_lock);
+	}
+
+	if (found)
+		__submit_bio(sbi, target, DATA);
+	if (bio && *bio) {
+		bio_put(*bio);
+		*bio = NULL;
+	}
+}
+
 int f2fs_merge_page_bio(struct f2fs_io_info *fio)
 {
 	struct bio *bio = *fio->bio;
@@ -557,20 +919,20 @@ int f2fs_merge_page_bio(struct f2fs_io_info *fio)
 	f2fs_trace_ios(fio, 0);
 
 	if (bio && !page_is_mergeable(fio->sbi, bio, *fio->last_block,
-						fio->new_blkaddr)) {
-		__submit_bio(fio->sbi, bio, fio->type);
-		bio = NULL;
-	}
+						fio->new_blkaddr))
+		f2fs_submit_merged_ipu_write(fio->sbi, &bio, NULL);
 alloc_new:
 	if (!bio) {
 		bio = __bio_alloc(fio, BIO_MAX_PAGES);
+		__attach_io_flag(fio);
+		f2fs_set_bio_crypt_ctx(bio, fio->page->mapping->host,
+				       fio->page->index, fio, GFP_NOIO);
 		bio_set_op_attrs(bio, fio->op, fio->op_flags);
-	}
 
-	if (bio_add_page(bio, page, PAGE_SIZE, 0) < PAGE_SIZE) {
-		__submit_bio(fio->sbi, bio, fio->type);
-		bio = NULL;
-		goto alloc_new;
+		add_bio_entry(fio->sbi, bio, page, fio->temp);
+	} else {
+		if (add_ipu_page(fio, &bio, page))
+			goto alloc_new;
 	}
 
 	if (fio->io_wbc)
@@ -584,19 +946,6 @@ int f2fs_merge_page_bio(struct f2fs_io_info *fio)
 	return 0;
 }
 
-static void f2fs_submit_ipu_bio(struct f2fs_sb_info *sbi, struct bio **bio,
-							struct page *page)
-{
-	if (!bio)
-		return;
-
-	if (!__has_merged_page(*bio, NULL, page, 0))
-		return;
-
-	__submit_bio(sbi, *bio, DATA);
-	*bio = NULL;
-}
-
 void f2fs_submit_page_write(struct f2fs_io_info *fio)
 {
 	struct f2fs_sb_info *sbi = fio->sbi;
@@ -622,15 +971,23 @@ void f2fs_submit_page_write(struct f2fs_io_info *fio)
 
 	verify_fio_blkaddr(fio);
 
-	bio_page = fio->encrypted_page ? fio->encrypted_page : fio->page;
+	if (fio->encrypted_page)
+		bio_page = fio->encrypted_page;
+	else if (fio->compressed_page)
+		bio_page = fio->compressed_page;
+	else
+		bio_page = fio->page;
 
 	/* set submitted = true as a return value */
 	fio->submitted = true;
 
 	inc_page_count(sbi, WB_DATA_TYPE(bio_page));
 
-	if (io->bio && !io_is_mergeable(sbi, io->bio, io, fio,
-			io->last_block_in_bio, fio->new_blkaddr))
+	if (io->bio &&
+	    (!io_is_mergeable(sbi, io->bio, io, fio, io->last_block_in_bio,
+			      fio->new_blkaddr) ||
+	     !f2fs_crypt_mergeable_bio(io->bio, fio->page->mapping->host,
+				       bio_page->index, fio)))
 		__submit_merged_bio(io);
 alloc_new:
 	if (io->bio == NULL) {
@@ -642,6 +999,8 @@ void f2fs_submit_page_write(struct f2fs_io_info *fio)
 			goto skip;
 		}
 		io->bio = __bio_alloc(fio, BIO_MAX_PAGES);
+		f2fs_set_bio_crypt_ctx(io->bio, fio->page->mapping->host,
+				       bio_page->index, fio, GFP_NOIO);
 		io->fio = *fio;
 	}
 
@@ -675,33 +1034,37 @@ static inline bool f2fs_need_verity(const struct inode *inode, pgoff_t idx)
 
 static struct bio *f2fs_grab_read_bio(struct inode *inode, block_t blkaddr,
 				      unsigned nr_pages, unsigned op_flag,
-				      pgoff_t first_idx)
+				      pgoff_t first_idx, bool for_write,
+				      bool for_verity)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct bio *bio;
 	struct bio_post_read_ctx *ctx;
 	unsigned int post_read_steps = 0;
 
-	bio = f2fs_bio_alloc(sbi, min_t(int, nr_pages, BIO_MAX_PAGES), false);
+	bio = f2fs_bio_alloc(sbi, min_t(int, nr_pages, BIO_MAX_PAGES),
+								for_write);
 	if (!bio)
 		return ERR_PTR(-ENOMEM);
+
+	f2fs_set_bio_crypt_ctx(bio, inode, first_idx, NULL, GFP_NOFS);
+
 	f2fs_target_device(sbi, blkaddr, bio);
 	bio->bi_end_io = f2fs_read_end_io;
 	bio_set_op_attrs(bio, REQ_OP_READ, op_flag);
 
-	if (f2fs_encrypted_file(inode))
+	if (fscrypt_inode_uses_fs_layer_crypto(inode))
 		post_read_steps |= 1 << STEP_DECRYPT;
-
-	if (f2fs_need_verity(inode, first_idx))
+	if (f2fs_compressed_file(inode))
+		post_read_steps |= 1 << STEP_DECOMPRESS_NOWQ;
+	if (for_verity && f2fs_need_verity(inode, first_idx))
 		post_read_steps |= 1 << STEP_VERITY;
 
 	if (post_read_steps) {
+		/* Due to the mempool, this never fails. */
 		ctx = mempool_alloc(bio_post_read_ctx_pool, GFP_NOFS);
-		if (!ctx) {
-			bio_put(bio);
-			return ERR_PTR(-ENOMEM);
-		}
 		ctx->bio = bio;
+		ctx->sbi = sbi;
 		ctx->enabled_steps = post_read_steps;
 		bio->bi_private = ctx;
 	}
@@ -709,14 +1072,22 @@ static struct bio *f2fs_grab_read_bio(struct inode *inode, block_t blkaddr,
 	return bio;
 }
 
+static void f2fs_release_read_bio(struct bio *bio)
+{
+	if (bio->bi_private)
+		mempool_free(bio->bi_private, bio_post_read_ctx_pool);
+	bio_put(bio);
+}
+
 /* This can handle encryption stuffs */
 static int f2fs_submit_page_read(struct inode *inode, struct page *page,
-							block_t blkaddr)
+				 block_t blkaddr, int op_flags, bool for_write)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct bio *bio;
 
-	bio = f2fs_grab_read_bio(inode, blkaddr, 1, 0, page->index);
+	bio = f2fs_grab_read_bio(inode, blkaddr, 1, op_flags,
+					page->index, for_write, true);
 	if (IS_ERR(bio))
 		return PTR_ERR(bio);
 
@@ -729,6 +1100,7 @@ static int f2fs_submit_page_read(struct inode *inode, struct page *page,
 	}
 	ClearPageError(page);
 	inc_page_count(sbi, F2FS_RD_DATA);
+	f2fs_update_iostat(sbi, FS_DATA_READ_IO, F2FS_BLKSIZE);
 	__submit_bio(sbi, bio, DATA);
 	return 0;
 }
@@ -788,8 +1160,7 @@ int f2fs_reserve_new_blocks(struct dnode_of_data *dn, blkcnt_t count)
 	f2fs_wait_on_page_writeback(dn->node_page, NODE, true, true);
 
 	for (; count > 0; dn->ofs_in_node++) {
-		block_t blkaddr = datablock_addr(dn->inode,
-					dn->node_page, dn->ofs_in_node);
+		block_t blkaddr = f2fs_data_blkaddr(dn);
 		if (blkaddr == NULL_ADDR) {
 			dn->data_blkaddr = NEW_ADDR;
 			__set_data_blkaddr(dn);
@@ -831,7 +1202,7 @@ int f2fs_reserve_block(struct dnode_of_data *dn, pgoff_t index)
 
 int f2fs_get_block(struct dnode_of_data *dn, pgoff_t index)
 {
-	struct extent_info ei  = {0,0,0};
+	struct extent_info ei = {0, 0, 0};
 	struct inode *inode = dn->inode;
 
 	if (f2fs_lookup_extent_cache(inode, index, &ei)) {
@@ -903,7 +1274,8 @@ struct page *f2fs_get_read_data_page(struct inode *inode, pgoff_t index,
 		return page;
 	}
 
-	err = f2fs_submit_page_read(inode, page, dn.data_blkaddr);
+	err = f2fs_submit_page_read(inode, page, dn.data_blkaddr,
+						op_flags, for_write);
 	if (err)
 		goto put_err;
 	return page;
@@ -1041,8 +1413,7 @@ static int __allocate_data_block(struct dnode_of_data *dn, int seg_type)
 	if (err)
 		return err;
 
-	dn->data_blkaddr = datablock_addr(dn->inode,
-				dn->node_page, dn->ofs_in_node);
+	dn->data_blkaddr = f2fs_data_blkaddr(dn);
 	if (dn->data_blkaddr != NULL_ADDR)
 		goto alloc;
 
@@ -1053,7 +1424,7 @@ static int __allocate_data_block(struct dnode_of_data *dn, int seg_type)
 	set_summary(&sum, dn->nid, dn->ofs_in_node, ni.version);
 	old_blkaddr = dn->data_blkaddr;
 	f2fs_allocate_data_block(sbi, NULL, old_blkaddr, &dn->data_blkaddr,
-					&sum, seg_type, NULL, false);
+				&sum, seg_type, NULL);
 	if (GET_SEGNO(sbi, old_blkaddr) != NULL_SEGNO)
 		invalidate_mapping_pages(META_MAPPING(sbi),
 					old_blkaddr, old_blkaddr);
@@ -1113,7 +1484,7 @@ int f2fs_preallocate_blocks(struct kiocb *iocb, struct iov_iter *from)
 	return err;
 }
 
-void __do_map_lock(struct f2fs_sb_info *sbi, int flag, bool lock)
+void f2fs_do_map_lock(struct f2fs_sb_info *sbi, int flag, bool lock)
 {
 	if (flag == F2FS_GET_BLOCK_PRE_AIO) {
 		if (lock)
@@ -1129,13 +1500,9 @@ void __do_map_lock(struct f2fs_sb_info *sbi, int flag, bool lock)
 }
 
 /*
- * f2fs_map_blocks() now supported readahead/bmap/rw direct_IO with
- * f2fs_map_blocks structure.
- * If original data blocks are allocated, then give them to blockdev.
- * Otherwise,
- *     a. preallocate requested block addresses
- *     b. do not use extent cache for better performance
- *     c. give the block addresses to blockdev
+ * f2fs_map_blocks() tries to find or build mapping relationship which
+ * maps continuous logical blocks to physical blocks, and return such
+ * info via f2fs_map_blocks structure.
  */
 int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map,
 						int create, int flag)
@@ -1163,7 +1530,7 @@ int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map,
 	end = pgofs + maxblocks;
 
 	if (!create && f2fs_lookup_extent_cache(inode, pgofs, &ei)) {
-		if (test_opt(sbi, LFS) && flag == F2FS_GET_BLOCK_DIO &&
+		if (f2fs_lfs_mode(sbi) && flag == F2FS_GET_BLOCK_DIO &&
 							map->m_may_create)
 			goto next_dnode;
 
@@ -1182,7 +1549,7 @@ int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map,
 
 next_dnode:
 	if (map->m_may_create)
-		__do_map_lock(sbi, flag, true);
+		f2fs_do_map_lock(sbi, flag, true);
 
 	/* When reading holes, we need its node page */
 	set_new_dnode(&dn, inode, NULL, NULL, 0);
@@ -1208,7 +1575,7 @@ int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map,
 	end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
 
 next_block:
-	blkaddr = datablock_addr(dn.inode, dn.node_page, dn.ofs_in_node);
+	blkaddr = f2fs_data_blkaddr(&dn);
 
 	if (__is_valid_data_blkaddr(blkaddr) &&
 		!f2fs_is_valid_blkaddr(sbi, blkaddr, DATA_GENERIC_ENHANCE)) {
@@ -1218,7 +1585,7 @@ int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map,
 
 	if (__is_valid_data_blkaddr(blkaddr)) {
 		/* use out-place-update for driect IO under LFS mode */
-		if (test_opt(sbi, LFS) && flag == F2FS_GET_BLOCK_DIO &&
+		if (f2fs_lfs_mode(sbi) && flag == F2FS_GET_BLOCK_DIO &&
 							map->m_may_create) {
 			err = __allocate_data_block(&dn, map->m_seg_type);
 			if (err)
@@ -1331,7 +1698,7 @@ int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map,
 	f2fs_put_dnode(&dn);
 
 	if (map->m_may_create) {
-		__do_map_lock(sbi, flag, false);
+		f2fs_do_map_lock(sbi, flag, false);
 		f2fs_balance_fs(sbi, dn.node_changed);
 	}
 	goto next_dnode;
@@ -1357,7 +1724,7 @@ int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map,
 	f2fs_put_dnode(&dn);
 unlock_out:
 	if (map->m_may_create) {
-		__do_map_lock(sbi, flag, false);
+		f2fs_do_map_lock(sbi, flag, false);
 		f2fs_balance_fs(sbi, dn.node_changed);
 	}
 out:
@@ -1391,6 +1758,16 @@ bool f2fs_overwrite_io(struct inode *inode, loff_t pos, size_t len)
 	return true;
 }
 
+static inline u64 bytes_to_blks(struct inode *inode, u64 bytes)
+{
+	return (bytes >> inode->i_blkbits);
+}
+
+static inline u64 blks_to_bytes(struct inode *inode, u64 blks)
+{
+	return (blks << inode->i_blkbits);
+}
+
 static int __get_data_block(struct inode *inode, sector_t iblock,
 			struct buffer_head *bh, int create, int flag,
 			pgoff_t *next_pgofs, int seg_type, bool may_write)
@@ -1399,7 +1776,7 @@ static int __get_data_block(struct inode *inode, sector_t iblock,
 	int err;
 
 	map.m_lblk = iblock;
-	map.m_len = bh->b_size >> inode->i_blkbits;
+	map.m_len = bytes_to_blks(inode, bh->b_size);
 	map.m_next_pgofs = next_pgofs;
 	map.m_next_extent = NULL;
 	map.m_seg_type = seg_type;
@@ -1409,20 +1786,11 @@ static int __get_data_block(struct inode *inode, sector_t iblock,
 	if (!err) {
 		map_bh(bh, inode->i_sb, map.m_pblk);
 		bh->b_state = (bh->b_state & ~F2FS_MAP_FLAGS) | map.m_flags;
-		bh->b_size = (u64)map.m_len << inode->i_blkbits;
+		bh->b_size = blks_to_bytes(inode, map.m_len);
 	}
 	return err;
 }
 
-static int get_data_block(struct inode *inode, sector_t iblock,
-			struct buffer_head *bh_result, int create, int flag,
-			pgoff_t *next_pgofs)
-{
-	return __get_data_block(inode, iblock, bh_result, create,
-							flag, next_pgofs,
-							NO_CHECK_TYPE, create);
-}
-
 static int get_data_block_dio_write(struct inode *inode, sector_t iblock,
 			struct buffer_head *bh_result, int create)
 {
@@ -1441,28 +1809,6 @@ static int get_data_block_dio(struct inode *inode, sector_t iblock,
 				false);
 }
 
-static int get_data_block_bmap(struct inode *inode, sector_t iblock,
-			struct buffer_head *bh_result, int create)
-{
-	/* Block number less than F2FS MAX BLOCKS */
-	if (unlikely(iblock >= F2FS_I_SB(inode)->max_file_blocks))
-		return -EFBIG;
-
-	return __get_data_block(inode, iblock, bh_result, create,
-						F2FS_GET_BLOCK_BMAP, NULL,
-						NO_CHECK_TYPE, create);
-}
-
-static inline sector_t logical_to_blk(struct inode *inode, loff_t offset)
-{
-	return (offset >> inode->i_blkbits);
-}
-
-static inline loff_t blk_to_logical(struct inode *inode, sector_t blk)
-{
-	return (blk << inode->i_blkbits);
-}
-
 static int f2fs_xattr_fiemap(struct inode *inode,
 				struct fiemap_extent_info *fieinfo)
 {
@@ -1488,7 +1834,7 @@ static int f2fs_xattr_fiemap(struct inode *inode,
 			return err;
 		}
 
-		phys = (__u64)blk_to_logical(inode, ni.blk_addr);
+		phys = blks_to_bytes(inode, ni.blk_addr);
 		offset = offsetof(struct f2fs_inode, i_addr) +
 					sizeof(__le32) * (DEF_ADDRS_PER_INODE -
 					get_inline_xattr_addrs(inode));
@@ -1504,6 +1850,7 @@ static int f2fs_xattr_fiemap(struct inode *inode,
 			flags |= FIEMAP_EXTENT_LAST;
 
 		err = fiemap_fill_next_extent(fieinfo, 0, phys, len, flags);
+		trace_f2fs_fiemap(inode, 0, phys, len, flags, err);
 		if (err || err == 1)
 			return err;
 	}
@@ -1519,7 +1866,7 @@ static int f2fs_xattr_fiemap(struct inode *inode,
 			return err;
 		}
 
-		phys = (__u64)blk_to_logical(inode, ni.blk_addr);
+		phys = blks_to_bytes(inode, ni.blk_addr);
 		len = inode->i_sb->s_blocksize;
 
 		f2fs_put_page(page, 1);
@@ -1527,21 +1874,44 @@ static int f2fs_xattr_fiemap(struct inode *inode,
 		flags = FIEMAP_EXTENT_LAST;
 	}
 
-	if (phys)
+	if (phys) {
 		err = fiemap_fill_next_extent(fieinfo, 0, phys, len, flags);
+		trace_f2fs_fiemap(inode, 0, phys, len, flags, err);
+	}
 
 	return (err < 0 ? err : 0);
 }
 
+static loff_t max_inode_blocks(struct inode *inode)
+{
+	loff_t result = ADDRS_PER_INODE(inode);
+	loff_t leaf_count = ADDRS_PER_BLOCK(inode);
+
+	/* two direct node blocks */
+	result += (leaf_count * 2);
+
+	/* two indirect node blocks */
+	leaf_count *= NIDS_PER_BLOCK;
+	result += (leaf_count * 2);
+
+	/* one double indirect node block */
+	leaf_count *= NIDS_PER_BLOCK;
+	result += leaf_count;
+
+	return result;
+}
+
 int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
 		u64 start, u64 len)
 {
-	struct buffer_head map_bh;
+	struct f2fs_map_blocks map;
 	sector_t start_blk, last_blk;
 	pgoff_t next_pgofs;
 	u64 logical = 0, phys = 0, size = 0;
 	u32 flags = 0;
 	int ret = 0;
+	bool compr_cluster = false;
+	unsigned int cluster_size = F2FS_I(inode)->i_cluster_size;
 
 	if (fieinfo->fi_flags & FIEMAP_FLAG_CACHE) {
 		ret = f2fs_precache_extents(inode);
@@ -1549,7 +1919,8 @@ int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
 			return ret;
 	}
 
-	ret = fiemap_check_flags(fieinfo, FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR);
+	ret = fiemap_prep(inode, fieinfo, start, &len,
+			FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR);
 	if (ret)
 		return ret;
 
@@ -1566,27 +1937,32 @@ int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
 			goto out;
 	}
 
-	if (logical_to_blk(inode, len) == 0)
-		len = blk_to_logical(inode, 1);
+	if (bytes_to_blks(inode, len) == 0)
+		len = blks_to_bytes(inode, 1);
 
-	start_blk = logical_to_blk(inode, start);
-	last_blk = logical_to_blk(inode, start + len - 1);
+	start_blk = bytes_to_blks(inode, start);
+	last_blk = bytes_to_blks(inode, start + len - 1);
 
 next:
-	memset(&map_bh, 0, sizeof(struct buffer_head));
-	map_bh.b_size = len;
+	memset(&map, 0, sizeof(map));
+	map.m_lblk = start_blk;
+	map.m_len = bytes_to_blks(inode, len);
+	map.m_next_pgofs = &next_pgofs;
+	map.m_seg_type = NO_CHECK_TYPE;
 
-	ret = get_data_block(inode, start_blk, &map_bh, 0,
-					F2FS_GET_BLOCK_FIEMAP, &next_pgofs);
+	if (compr_cluster)
+		map.m_len = cluster_size - 1;
+
+	ret = f2fs_map_blocks(inode, &map, 0, F2FS_GET_BLOCK_FIEMAP);
 	if (ret)
 		goto out;
 
 	/* HOLE */
-	if (!buffer_mapped(&map_bh)) {
+	if (!(map.m_flags & F2FS_MAP_FLAGS)) {
 		start_blk = next_pgofs;
 
-		if (blk_to_logical(inode, start_blk) < blk_to_logical(inode,
-					F2FS_I_SB(inode)->max_file_blocks))
+		if (blks_to_bytes(inode, start_blk) < blks_to_bytes(inode,
+						max_inode_blocks(inode)))
 			goto prep_next;
 
 		flags |= FIEMAP_EXTENT_LAST;
@@ -1598,19 +1974,47 @@ int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
 
 		ret = fiemap_fill_next_extent(fieinfo, logical,
 				phys, size, flags);
+		trace_f2fs_fiemap(inode, logical, phys, size, flags, ret);
+		if (ret)
+			goto out;
+		size = 0;
 	}
 
-	if (start_blk > last_blk || ret)
+	if (start_blk > last_blk)
 		goto out;
 
-	logical = blk_to_logical(inode, start_blk);
-	phys = blk_to_logical(inode, map_bh.b_blocknr);
-	size = map_bh.b_size;
+	if (compr_cluster) {
+		compr_cluster = false;
+
+
+		logical = blks_to_bytes(inode, start_blk - 1);
+		phys = blks_to_bytes(inode, map.m_pblk);
+		size = blks_to_bytes(inode, cluster_size);
+
+		flags |= FIEMAP_EXTENT_ENCODED;
+
+		start_blk += cluster_size - 1;
+
+		if (start_blk > last_blk)
+			goto out;
+
+		goto prep_next;
+	}
+
+	if (map.m_pblk == COMPRESS_ADDR) {
+		compr_cluster = true;
+		start_blk++;
+		goto prep_next;
+	}
+
+	logical = blks_to_bytes(inode, start_blk);
+	phys = blks_to_bytes(inode, map.m_pblk);
+	size = blks_to_bytes(inode, map.m_len);
 	flags = 0;
-	if (buffer_unwritten(&map_bh))
+	if (map.m_flags & F2FS_MAP_UNWRITTEN)
 		flags = FIEMAP_EXTENT_UNWRITTEN;
 
-	start_blk += logical_to_blk(inode, size);
+	start_blk += bytes_to_blks(inode, size);
 
 prep_next:
 	cond_resched();
@@ -1643,8 +2047,7 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page,
 					bool is_readahead)
 {
 	struct bio *bio = *bio_ret;
-	const unsigned blkbits = inode->i_blkbits;
-	const unsigned blocksize = 1 << blkbits;
+	const unsigned blocksize = blks_to_bytes(inode, 1);
 	sector_t block_in_file;
 	sector_t last_block;
 	sector_t last_block_in_file;
@@ -1653,8 +2056,8 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page,
 
 	block_in_file = (sector_t)page_index(page);
 	last_block = block_in_file + nr_pages;
-	last_block_in_file = (f2fs_readpage_limit(inode) + blocksize - 1) >>
-							blkbits;
+	last_block_in_file = bytes_to_blks(inode,
+			f2fs_readpage_limit(inode) + blocksize - 1);
 	if (last_block > last_block_in_file)
 		last_block = last_block_in_file;
 
@@ -1713,15 +2116,17 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page,
 	 * This page will go to BIO.  Do we need to send this
 	 * BIO off first?
 	 */
-	if (bio && !page_is_mergeable(F2FS_I_SB(inode), bio,
-				*last_block_in_bio, block_nr)) {
+	if (bio && (!page_is_mergeable(F2FS_I_SB(inode), bio,
+				       *last_block_in_bio, block_nr) ||
+		    !f2fs_crypt_mergeable_bio(bio, inode, page->index, NULL))) {
 submit_and_realloc:
 		__submit_bio(F2FS_I_SB(inode), bio, DATA);
 		bio = NULL;
 	}
 	if (bio == NULL) {
 		bio = f2fs_grab_read_bio(inode, block_nr, nr_pages,
-				is_readahead ? REQ_RAHEAD : 0, page->index);
+				is_readahead ? REQ_RAHEAD : 0, page->index,
+				false, true);
 		if (IS_ERR(bio)) {
 			ret = PTR_ERR(bio);
 			bio = NULL;
@@ -1739,6 +2144,7 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page,
 		goto submit_and_realloc;
 
 	inc_page_count(F2FS_I_SB(inode), F2FS_RD_DATA);
+	f2fs_update_iostat(F2FS_I_SB(inode), FS_DATA_READ_IO, F2FS_BLKSIZE);
 	ClearPageError(page);
 	*last_block_in_bio = block_nr;
 	goto out;
@@ -1753,6 +2159,186 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page,
 	return ret;
 }
 
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+int f2fs_read_multi_pages(struct compress_ctx *cc, struct bio **bio_ret,
+				unsigned nr_pages, sector_t *last_block_in_bio,
+				bool is_readahead, bool for_write)
+{
+	struct dnode_of_data dn;
+	struct inode *inode = cc->inode;
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	struct bio *bio = *bio_ret;
+	unsigned int start_idx = cc->cluster_idx << cc->log_cluster_size;
+	sector_t last_block_in_file;
+	const unsigned blocksize = blks_to_bytes(inode, 1);
+	struct decompress_io_ctx *dic = NULL;
+	struct bio_post_read_ctx *ctx;
+	bool for_verity = false;
+	int i;
+	int ret = 0;
+
+	f2fs_bug_on(sbi, f2fs_cluster_is_empty(cc));
+
+	last_block_in_file = bytes_to_blks(inode,
+			f2fs_readpage_limit(inode) + blocksize - 1);
+
+	/* get rid of pages beyond EOF */
+	for (i = 0; i < cc->cluster_size; i++) {
+		struct page *page = cc->rpages[i];
+
+		if (!page)
+			continue;
+		if ((sector_t)page->index >= last_block_in_file) {
+			zero_user_segment(page, 0, PAGE_SIZE);
+			if (!PageUptodate(page))
+				SetPageUptodate(page);
+		} else if (!PageUptodate(page)) {
+			continue;
+		}
+		unlock_page(page);
+		cc->rpages[i] = NULL;
+		cc->nr_rpages--;
+	}
+
+	/* we are done since all pages are beyond EOF */
+	if (f2fs_cluster_is_empty(cc))
+		goto out;
+
+	set_new_dnode(&dn, inode, NULL, NULL, 0);
+	ret = f2fs_get_dnode_of_data(&dn, start_idx, LOOKUP_NODE);
+	if (ret)
+		goto out;
+
+	f2fs_bug_on(sbi, dn.data_blkaddr != COMPRESS_ADDR);
+
+	for (i = 1; i < cc->cluster_size; i++) {
+		block_t blkaddr;
+
+		blkaddr = data_blkaddr(dn.inode, dn.node_page,
+						dn.ofs_in_node + i);
+
+		if (!__is_valid_data_blkaddr(blkaddr))
+			break;
+
+		if (!f2fs_is_valid_blkaddr(sbi, blkaddr, DATA_GENERIC)) {
+			ret = -EFAULT;
+			goto out_put_dnode;
+		}
+		cc->nr_cpages++;
+	}
+
+	/* nothing to decompress */
+	if (cc->nr_cpages == 0) {
+		ret = 0;
+		goto out_put_dnode;
+	}
+
+	dic = f2fs_alloc_dic(cc);
+	if (IS_ERR(dic)) {
+		ret = PTR_ERR(dic);
+		goto out_put_dnode;
+	}
+
+	/*
+	 * It's possible to enable fsverity on the fly when handling a cluster,
+	 * which requires complicated error handling. Instead of adding more
+	 * complexity, let's give a rule where end_io post-processes fsverity
+	 * per cluster. In order to do that, we need to submit bio, if previous
+	 * bio sets a different post-process policy.
+	 */
+	if (fsverity_active(cc->inode)) {
+		atomic_set(&dic->verity_pages, cc->nr_cpages);
+		for_verity = true;
+
+		if (bio) {
+			ctx = bio->bi_private;
+			if (!(ctx->enabled_steps & (1 << STEP_VERITY))) {
+				__submit_bio(sbi, bio, DATA);
+				bio = NULL;
+			}
+		}
+	}
+
+	for (i = 0; i < dic->nr_cpages; i++) {
+		struct page *page = dic->cpages[i];
+		block_t blkaddr;
+
+		blkaddr = data_blkaddr(dn.inode, dn.node_page,
+						dn.ofs_in_node + i + 1);
+
+		if (bio && (!page_is_mergeable(sbi, bio,
+					*last_block_in_bio, blkaddr) ||
+		    !f2fs_crypt_mergeable_bio(bio, inode, page->index, NULL))) {
+submit_and_realloc:
+			__submit_bio(sbi, bio, DATA);
+			bio = NULL;
+		}
+
+		if (!bio) {
+			bio = f2fs_grab_read_bio(inode, blkaddr, nr_pages,
+					is_readahead ? REQ_RAHEAD : 0,
+					page->index, for_write, for_verity);
+			if (IS_ERR(bio)) {
+				unsigned int remained = dic->nr_cpages - i;
+				bool release = false;
+
+				ret = PTR_ERR(bio);
+				dic->failed = true;
+
+				if (for_verity) {
+					if (!atomic_sub_return(remained,
+						&dic->verity_pages))
+						release = true;
+				} else {
+					if (!atomic_sub_return(remained,
+						&dic->pending_pages))
+						release = true;
+				}
+
+				if (release) {
+					f2fs_decompress_end_io(dic->rpages,
+						cc->cluster_size, true,
+						false);
+					f2fs_free_dic(dic);
+				}
+
+				f2fs_put_dnode(&dn);
+				*bio_ret = NULL;
+				return ret;
+			}
+		}
+
+		f2fs_wait_on_block_writeback(inode, blkaddr);
+
+		if (bio_add_page(bio, page, blocksize, 0) < blocksize)
+			goto submit_and_realloc;
+
+		/* tag STEP_DECOMPRESS to handle IO in wq */
+		ctx = bio->bi_private;
+		if (!(ctx->enabled_steps & (1 << STEP_DECOMPRESS)))
+			ctx->enabled_steps |= 1 << STEP_DECOMPRESS;
+
+		inc_page_count(sbi, F2FS_RD_DATA);
+		f2fs_update_iostat(sbi, FS_DATA_READ_IO, F2FS_BLKSIZE);
+		f2fs_update_iostat(sbi, FS_CDATA_READ_IO, F2FS_BLKSIZE);
+		ClearPageError(page);
+		*last_block_in_bio = blkaddr;
+	}
+
+	f2fs_put_dnode(&dn);
+
+	*bio_ret = bio;
+	return 0;
+
+out_put_dnode:
+	f2fs_put_dnode(&dn);
+out:
+	f2fs_decompress_end_io(cc->rpages, cc->cluster_size, true, false);
+	*bio_ret = bio;
+	return ret;
+}
+#endif
+
 /*
  * This function was originally taken from fs/mpage.c, and customized for f2fs.
  * Major change was from block_size == page_size in f2fs by default.
@@ -1762,7 +2348,7 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page,
  * use ->readpage() or do the necessary surgery to decouple ->readpages()
  * from read-ahead.
  */
-static int f2fs_mpage_readpages(struct address_space *mapping,
+int f2fs_mpage_readpages(struct address_space *mapping,
 			struct list_head *pages, struct page *page,
 			unsigned nr_pages, bool is_readahead)
 {
@@ -1770,7 +2356,21 @@ static int f2fs_mpage_readpages(struct address_space *mapping,
 	sector_t last_block_in_bio = 0;
 	struct inode *inode = mapping->host;
 	struct f2fs_map_blocks map;
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	struct compress_ctx cc = {
+		.inode = inode,
+		.log_cluster_size = F2FS_I(inode)->i_log_cluster_size,
+		.cluster_size = F2FS_I(inode)->i_cluster_size,
+		.cluster_idx = NULL_CLUSTER,
+		.rpages = NULL,
+		.cpages = NULL,
+		.nr_rpages = 0,
+		.nr_cpages = 0,
+	};
+#endif
+	unsigned max_nr_pages = nr_pages;
 	int ret = 0;
+	bool drop_ra = false;
 
 	map.m_pblk = 0;
 	map.m_lblk = 0;
@@ -1781,21 +2381,65 @@ static int f2fs_mpage_readpages(struct address_space *mapping,
 	map.m_seg_type = NO_CHECK_TYPE;
 	map.m_may_create = false;
 
+	/*
+	 * Two readahead threads for same address range can cause race condition
+	 * which fragments sequential read IOs. So let's avoid each other.
+	 */
+	if (pages && is_readahead) {
+		page = list_last_entry(pages, struct page, lru);
+		if (READ_ONCE(F2FS_I(inode)->ra_offset) == page_index(page))
+			drop_ra = true;
+		else
+			WRITE_ONCE(F2FS_I(inode)->ra_offset, page_index(page));
+	}
+
 	for (; nr_pages; nr_pages--) {
 		if (pages) {
 			page = list_last_entry(pages, struct page, lru);
 
 			prefetchw(&page->flags);
 			list_del(&page->lru);
-			if (add_to_page_cache_lru(page, mapping,
+			if (drop_ra || add_to_page_cache_lru(page, mapping,
 						  page_index(page),
 						  readahead_gfp_mask(mapping)))
 				goto next_page;
 		}
 
-		ret = f2fs_read_single_page(inode, page, nr_pages, &map, &bio,
-					&last_block_in_bio, is_readahead);
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+		if (f2fs_compressed_file(inode)) {
+			/* there are remained comressed pages, submit them */
+			if (!f2fs_cluster_can_merge_page(&cc, page->index)) {
+				ret = f2fs_read_multi_pages(&cc, &bio,
+							max_nr_pages,
+							&last_block_in_bio,
+							is_readahead, false);
+				f2fs_destroy_compress_ctx(&cc);
+				if (ret)
+					goto set_error_page;
+			}
+			ret = f2fs_is_compressed_cluster(inode, page->index);
+			if (ret < 0)
+				goto set_error_page;
+			else if (!ret)
+				goto read_single_page;
+
+			ret = f2fs_init_compress_ctx(&cc);
+			if (ret)
+				goto set_error_page;
+
+			f2fs_compress_ctx_add_page(&cc, page);
+
+			goto next_page;
+		}
+read_single_page:
+#endif
+
+		ret = f2fs_read_single_page(inode, page, max_nr_pages, &map,
+					&bio, &last_block_in_bio, is_readahead);
 		if (ret) {
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+set_error_page:
+#endif
 			SetPageError(page);
 			zero_user_segment(page, 0, PAGE_SIZE);
 			unlock_page(page);
@@ -1803,10 +2447,26 @@ static int f2fs_mpage_readpages(struct address_space *mapping,
 next_page:
 		if (pages)
 			put_page(page);
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+		if (f2fs_compressed_file(inode)) {
+			/* last page */
+			if (nr_pages == 1 && !f2fs_cluster_is_empty(&cc)) {
+				ret = f2fs_read_multi_pages(&cc, &bio,
+							max_nr_pages,
+							&last_block_in_bio,
+							is_readahead, false);
+				f2fs_destroy_compress_ctx(&cc);
+			}
+		}
+#endif
 	}
 	BUG_ON(pages && !list_empty(pages));
 	if (bio)
 		__submit_bio(F2FS_I_SB(inode), bio, DATA);
+
+	if (pages && is_readahead && !drop_ra)
+		WRITE_ONCE(F2FS_I(inode)->ra_offset, -1);
 	return pages ? 0 : ret;
 }
 
@@ -1817,6 +2477,11 @@ static int f2fs_read_data_page(struct file *file, struct page *page)
 
 	trace_f2fs_readpage(page, DATA);
 
+	if (!f2fs_is_compress_backend_ready(inode)) {
+		unlock_page(page);
+		return -EOPNOTSUPP;
+	}
+
 	/* If the file has inline data, try to read it directly */
 	if (f2fs_has_inline_data(inode))
 		ret = f2fs_read_inline_data(inode, page);
@@ -1835,6 +2500,9 @@ static int f2fs_read_data_pages(struct file *file,
 
 	trace_f2fs_readpages(inode, page, nr_pages);
 
+	if (!f2fs_is_compress_backend_ready(inode))
+		return 0;
+
 	/* If the file has inline data, skip readpages */
 	if (f2fs_has_inline_data(inode))
 		return 0;
@@ -1842,27 +2510,31 @@ static int f2fs_read_data_pages(struct file *file,
 	return f2fs_mpage_readpages(mapping, pages, NULL, nr_pages, true);
 }
 
-static int encrypt_one_page(struct f2fs_io_info *fio)
+int f2fs_encrypt_one_page(struct f2fs_io_info *fio)
 {
 	struct inode *inode = fio->page->mapping->host;
-	struct page *mpage;
+	struct page *mpage, *page;
 	gfp_t gfp_flags = GFP_NOFS;
 
 	if (!f2fs_encrypted_file(inode))
 		return 0;
 
+	page = fio->compressed_page ? fio->compressed_page : fio->page;
+
 	/* wait for GCed page writeback via META_MAPPING */
 	f2fs_wait_on_block_writeback(inode, fio->old_blkaddr);
 
+	if (fscrypt_inode_uses_inline_crypto(inode))
+		return 0;
+
 retry_encrypt:
-	fio->encrypted_page = fscrypt_encrypt_pagecache_blocks(fio->page,
-							       PAGE_SIZE, 0,
-							       gfp_flags);
+	fio->encrypted_page = fscrypt_encrypt_pagecache_blocks(page,
+					PAGE_SIZE, 0, gfp_flags);
 	if (IS_ERR(fio->encrypted_page)) {
 		/* flush pending IOs and wait for a while in the ENOMEM case */
 		if (PTR_ERR(fio->encrypted_page) == -ENOMEM) {
 			f2fs_flush_merged_writes(fio->sbi);
-			congestion_wait(BLK_RW_ASYNC, HZ/50);
+			congestion_wait(BLK_RW_ASYNC, DEFAULT_IO_TIMEOUT);
 			gfp_flags |= __GFP_NOFAIL;
 			goto retry_encrypt;
 		}
@@ -1933,7 +2605,7 @@ bool f2fs_should_update_outplace(struct inode *inode, struct f2fs_io_info *fio)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 
-	if (test_opt(sbi, LFS))
+	if (f2fs_lfs_mode(sbi))
 		return true;
 	if (S_ISDIR(inode->i_mode))
 		return true;
@@ -2017,7 +2689,7 @@ int f2fs_do_write_data_page(struct f2fs_io_info *fio)
 	if (ipu_force ||
 		(__is_valid_data_blkaddr(fio->old_blkaddr) &&
 					need_inplace_update(fio))) {
-		err = encrypt_one_page(fio);
+		err = f2fs_encrypt_one_page(fio);
 		if (err)
 			goto out_writepage;
 
@@ -2028,7 +2700,7 @@ int f2fs_do_write_data_page(struct f2fs_io_info *fio)
 			f2fs_unlock_op(fio->sbi);
 		err = f2fs_inplace_write_data(fio);
 		if (err) {
-			if (f2fs_encrypted_file(inode))
+			if (fscrypt_inode_uses_fs_layer_crypto(inode))
 				fscrypt_finalize_bounce_page(&fio->encrypted_page);
 			if (PageWriteback(page))
 				end_page_writeback(page);
@@ -2053,13 +2725,16 @@ int f2fs_do_write_data_page(struct f2fs_io_info *fio)
 
 	fio->version = ni.version;
 
-	err = encrypt_one_page(fio);
+	err = f2fs_encrypt_one_page(fio);
 	if (err)
 		goto out_writepage;
 
 	set_page_writeback(page);
 	ClearPageError(page);
 
+	if (fio->compr_blocks && fio->old_blkaddr == COMPRESS_ADDR)
+		f2fs_i_compr_blocks_update(inode, fio->compr_blocks - 1, false);
+
 	/* LFS mode write path */
 	f2fs_outplace_write_data(&dn, fio);
 	trace_f2fs_do_write_data_page(page, OPU);
@@ -2074,16 +2749,17 @@ int f2fs_do_write_data_page(struct f2fs_io_info *fio)
 	return err;
 }
 
-static int __write_data_page(struct page *page, bool *submitted,
+int f2fs_write_single_data_page(struct page *page, int *submitted,
 				struct bio **bio,
 				sector_t *last_block,
 				struct writeback_control *wbc,
-				enum iostat_type io_type)
+				enum iostat_type io_type,
+				int compr_blocks)
 {
 	struct inode *inode = page->mapping->host;
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	loff_t i_size = i_size_read(inode);
-	const pgoff_t end_index = ((unsigned long long) i_size)
+	const pgoff_t end_index = ((unsigned long long)i_size)
 							>> PAGE_SHIFT;
 	loff_t psize = (loff_t)(page->index + 1) << PAGE_SHIFT;
 	unsigned offset = 0;
@@ -2099,6 +2775,7 @@ static int __write_data_page(struct page *page, bool *submitted,
 		.page = page,
 		.encrypted_page = NULL,
 		.submitted = false,
+		.compr_blocks = compr_blocks,
 		.need_lock = LOCK_RETRY,
 		.io_type = io_type,
 		.io_wbc = wbc,
@@ -2123,7 +2800,9 @@ static int __write_data_page(struct page *page, bool *submitted,
 	if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
 		goto redirty_out;
 
-	if (page->index < end_index || f2fs_verity_in_progress(inode))
+	if (page->index < end_index ||
+			f2fs_verity_in_progress(inode) ||
+			compr_blocks)
 		goto write;
 
 	/*
@@ -2144,10 +2823,22 @@ static int __write_data_page(struct page *page, bool *submitted,
 			f2fs_available_free_memory(sbi, BASE_CHECK))))
 		goto redirty_out;
 
-	/* Dentry blocks are controlled by checkpoint */
-	if (S_ISDIR(inode->i_mode)) {
+	/* Dentry/quota blocks are controlled by checkpoint */
+	if (S_ISDIR(inode->i_mode) || IS_NOQUOTA(inode)) {
+		/*
+		 * We need to wait for node_write to avoid block allocation during
+		 * checkpoint. This can only happen to quota writes which can cause
+		 * the below discard race condition.
+		 */
+		if (IS_NOQUOTA(inode))
+			down_read(&sbi->node_write);
+
 		fio.need_lock = LOCK_DONE;
 		err = f2fs_do_write_data_page(&fio);
+
+		if (IS_NOQUOTA(inode))
+			up_read(&sbi->node_write);
+
 		goto done;
 	}
 
@@ -2176,10 +2867,10 @@ static int __write_data_page(struct page *page, bool *submitted,
 	if (err) {
 		file_set_keep_isize(inode);
 	} else {
-		down_write(&F2FS_I(inode)->i_sem);
+		spin_lock(&F2FS_I(inode)->i_size_lock);
 		if (F2FS_I(inode)->last_disk_size < psize)
 			F2FS_I(inode)->last_disk_size = psize;
-		up_write(&F2FS_I(inode)->i_sem);
+		spin_unlock(&F2FS_I(inode)->i_size_lock);
 	}
 
 done:
@@ -2199,22 +2890,19 @@ static int __write_data_page(struct page *page, bool *submitted,
 		f2fs_remove_dirty_inode(inode);
 		submitted = NULL;
 	}
-
 	unlock_page(page);
 	if (!S_ISDIR(inode->i_mode) && !IS_NOQUOTA(inode) &&
-					!F2FS_I(inode)->cp_task) {
-		f2fs_submit_ipu_bio(sbi, bio, page);
+					!F2FS_I(inode)->cp_task)
 		f2fs_balance_fs(sbi, need_balance_fs);
-	}
 
 	if (unlikely(f2fs_cp_error(sbi))) {
-		f2fs_submit_ipu_bio(sbi, bio, page);
 		f2fs_submit_merged_write(sbi, DATA);
+		f2fs_submit_merged_ipu_write(sbi, bio, NULL);
 		submitted = NULL;
 	}
 
 	if (submitted)
-		*submitted = fio.submitted;
+		*submitted = fio.submitted ? 1 : 0;
 
 	return 0;
 
@@ -2235,7 +2923,23 @@ static int __write_data_page(struct page *page, bool *submitted,
 static int f2fs_write_data_page(struct page *page,
 					struct writeback_control *wbc)
 {
-	return __write_data_page(page, NULL, NULL, NULL, wbc, FS_DATA_IO);
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	struct inode *inode = page->mapping->host;
+
+	if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
+		goto out;
+
+	if (f2fs_compressed_file(inode)) {
+		if (f2fs_is_compressed_cluster(inode, page->index)) {
+			redirty_page_for_writepage(wbc, page);
+			return AOP_WRITEPAGE_ACTIVATE;
+		}
+	}
+out:
+#endif
+
+	return f2fs_write_single_data_page(page, NULL, NULL, NULL,
+						wbc, FS_DATA_IO, 0);
 }
 
 /*
@@ -2248,20 +2952,37 @@ static int f2fs_write_cache_pages(struct address_space *mapping,
 					enum iostat_type io_type)
 {
 	int ret = 0;
-	int done = 0;
+	int done = 0, retry = 0;
 	struct pagevec pvec;
 	struct f2fs_sb_info *sbi = F2FS_M_SB(mapping);
 	struct bio *bio = NULL;
 	sector_t last_block;
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	struct inode *inode = mapping->host;
+	struct compress_ctx cc = {
+		.inode = inode,
+		.log_cluster_size = F2FS_I(inode)->i_log_cluster_size,
+		.cluster_size = F2FS_I(inode)->i_cluster_size,
+		.cluster_idx = NULL_CLUSTER,
+		.rpages = NULL,
+		.nr_rpages = 0,
+		.cpages = NULL,
+		.rbuf = NULL,
+		.cbuf = NULL,
+		.rlen = PAGE_SIZE * F2FS_I(inode)->i_cluster_size,
+		.private = NULL,
+	};
+#endif
 	int nr_pages;
 	pgoff_t uninitialized_var(writeback_index);
 	pgoff_t index;
 	pgoff_t end;		/* Inclusive */
 	pgoff_t done_index;
-	int cycled;
 	int range_whole = 0;
 	xa_mark_t tag;
 	int nwritten = 0;
+	int submitted = 0;
+	int i;
 
 	pagevec_init(&pvec);
 
@@ -2274,29 +2995,23 @@ static int f2fs_write_cache_pages(struct address_space *mapping,
 	if (wbc->range_cyclic) {
 		writeback_index = mapping->writeback_index; /* prev offset */
 		index = writeback_index;
-		if (index == 0)
-			cycled = 1;
-		else
-			cycled = 0;
 		end = -1;
 	} else {
 		index = wbc->range_start >> PAGE_SHIFT;
 		end = wbc->range_end >> PAGE_SHIFT;
 		if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
 			range_whole = 1;
-		cycled = 1; /* ignore range_cyclic tests */
 	}
 	if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
 		tag = PAGECACHE_TAG_TOWRITE;
 	else
 		tag = PAGECACHE_TAG_DIRTY;
 retry:
+	retry = 0;
 	if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
 		tag_pages_for_writeback(mapping, index, end);
 	done_index = index;
-	while (!done && (index <= end)) {
-		int i;
-
+	while (!done && !retry && (index <= end)) {
 		nr_pages = pagevec_lookup_range_tag(&pvec, mapping, &index, end,
 				tag);
 		if (nr_pages == 0)
@@ -2304,15 +3019,62 @@ static int f2fs_write_cache_pages(struct address_space *mapping,
 
 		for (i = 0; i < nr_pages; i++) {
 			struct page *page = pvec.pages[i];
-			bool submitted = false;
+			bool need_readd;
+readd:
+			need_readd = false;
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+			if (f2fs_compressed_file(inode)) {
+				ret = f2fs_init_compress_ctx(&cc);
+				if (ret) {
+					done = 1;
+					break;
+				}
 
+				if (!f2fs_cluster_can_merge_page(&cc,
+								page->index)) {
+					ret = f2fs_write_multi_pages(&cc,
+						&submitted, wbc, io_type);
+					if (!ret)
+						need_readd = true;
+					goto result;
+				}
+
+				if (unlikely(f2fs_cp_error(sbi)))
+					goto lock_page;
+
+				if (f2fs_cluster_is_empty(&cc)) {
+					void *fsdata = NULL;
+					struct page *pagep;
+					int ret2;
+
+					ret2 = f2fs_prepare_compress_overwrite(
+							inode, &pagep,
+							page->index, &fsdata);
+					if (ret2 < 0) {
+						ret = ret2;
+						done = 1;
+						break;
+					} else if (ret2 &&
+						!f2fs_compress_write_end(inode,
+								fsdata, page->index,
+								1)) {
+						retry = 1;
+						break;
+					}
+				} else {
+					goto lock_page;
+				}
+			}
+#endif
 			/* give a priority to WB_SYNC threads */
 			if (atomic_read(&sbi->wb_sync_req[DATA]) &&
 					wbc->sync_mode == WB_SYNC_NONE) {
 				done = 1;
 				break;
 			}
-
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+lock_page:
+#endif
 			done_index = page->index;
 retry_write:
 			lock_page(page);
@@ -2329,62 +3091,89 @@ static int f2fs_write_cache_pages(struct address_space *mapping,
 			}
 
 			if (PageWriteback(page)) {
-				if (wbc->sync_mode != WB_SYNC_NONE) {
+				if (wbc->sync_mode != WB_SYNC_NONE)
 					f2fs_wait_on_page_writeback(page,
 							DATA, true, true);
-					f2fs_submit_ipu_bio(sbi, &bio, page);
-				} else {
+				else
 					goto continue_unlock;
-				}
 			}
 
 			if (!clear_page_dirty_for_io(page))
 				goto continue_unlock;
 
-			ret = __write_data_page(page, &submitted, &bio,
-					&last_block, wbc, io_type);
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+			if (f2fs_compressed_file(inode)) {
+				get_page(page);
+				f2fs_compress_ctx_add_page(&cc, page);
+				continue;
+			}
+#endif
+			ret = f2fs_write_single_data_page(page, &submitted,
+					&bio, &last_block, wbc, io_type, 0);
+			if (ret == AOP_WRITEPAGE_ACTIVATE)
+				unlock_page(page);
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+result:
+#endif
+			nwritten += submitted;
+			wbc->nr_to_write -= submitted;
+
 			if (unlikely(ret)) {
 				/*
 				 * keep nr_to_write, since vfs uses this to
 				 * get # of written pages.
 				 */
 				if (ret == AOP_WRITEPAGE_ACTIVATE) {
-					unlock_page(page);
 					ret = 0;
-					continue;
+					goto next;
 				} else if (ret == -EAGAIN) {
 					ret = 0;
 					if (wbc->sync_mode == WB_SYNC_ALL) {
 						cond_resched();
 						congestion_wait(BLK_RW_ASYNC,
-									HZ/50);
+							DEFAULT_IO_TIMEOUT);
 						goto retry_write;
 					}
-					continue;
+					goto next;
 				}
 				done_index = page->index + 1;
 				done = 1;
 				break;
-			} else if (submitted) {
-				nwritten++;
 			}
 
-			if (--wbc->nr_to_write <= 0 &&
+			if (wbc->nr_to_write <= 0 &&
 					wbc->sync_mode == WB_SYNC_NONE) {
 				done = 1;
 				break;
 			}
+next:
+			if (need_readd)
+				goto readd;
 		}
 		pagevec_release(&pvec);
 		cond_resched();
 	}
-
-	if (!cycled && !done) {
-		cycled = 1;
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	/* flush remained pages in compress cluster */
+	if (f2fs_compressed_file(inode) && !f2fs_cluster_is_empty(&cc)) {
+		ret = f2fs_write_multi_pages(&cc, &submitted, wbc, io_type);
+		nwritten += submitted;
+		wbc->nr_to_write -= submitted;
+		if (ret) {
+			done = 1;
+			retry = 0;
+		}
+	}
+	if (f2fs_compressed_file(inode))
+		f2fs_destroy_compress_ctx(&cc);
+#endif
+	if (retry) {
 		index = 0;
-		end = writeback_index - 1;
+		end = -1;
 		goto retry;
 	}
+	if (wbc->range_cyclic && !done)
+		done_index = 0;
 	if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
 		mapping->writeback_index = done_index;
 
@@ -2393,7 +3182,7 @@ static int f2fs_write_cache_pages(struct address_space *mapping,
 								NULL, 0, DATA);
 	/* submit cached bio of IPU write */
 	if (bio)
-		__submit_bio(sbi, bio, DATA);
+		f2fs_submit_merged_ipu_write(sbi, &bio, NULL);
 
 	return ret;
 }
@@ -2401,13 +3190,17 @@ static int f2fs_write_cache_pages(struct address_space *mapping,
 static inline bool __should_serialize_io(struct inode *inode,
 					struct writeback_control *wbc)
 {
+	/* to avoid deadlock in path of data flush */
+	if (F2FS_I(inode)->cp_task)
+		return false;
+
 	if (!S_ISREG(inode->i_mode))
 		return false;
 	if (IS_NOQUOTA(inode))
 		return false;
-	/* to avoid deadlock in path of data flush */
-	if (F2FS_I(inode)->cp_task)
-		return false;
+
+	if (f2fs_need_compress_data(inode))
+		return true;
 	if (wbc->sync_mode != WB_SYNC_ALL)
 		return true;
 	if (get_dirty_pages(inode) >= SM_I(F2FS_I_SB(inode))->min_seq_blocks)
@@ -2498,14 +3291,16 @@ static void f2fs_write_failed(struct address_space *mapping, loff_t to)
 	struct inode *inode = mapping->host;
 	loff_t i_size = i_size_read(inode);
 
+	if (IS_NOQUOTA(inode))
+		return;
+
 	/* In the fs-verity case, f2fs_end_enable_verity() does the truncate */
 	if (to > i_size && !f2fs_verity_in_progress(inode)) {
 		down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
 		down_write(&F2FS_I(inode)->i_mmap_sem);
 
 		truncate_pagecache(inode, i_size);
-		if (!IS_NOQUOTA(inode))
-			f2fs_truncate_blocks(inode, i_size, true);
+		f2fs_truncate_blocks(inode, i_size, true);
 
 		up_write(&F2FS_I(inode)->i_mmap_sem);
 		up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
@@ -2542,9 +3337,10 @@ static int prepare_write_begin(struct f2fs_sb_info *sbi,
 
 	if (f2fs_has_inline_data(inode) ||
 			(pos & PAGE_MASK) >= i_size_read(inode)) {
-		__do_map_lock(sbi, flag, true);
+		f2fs_do_map_lock(sbi, flag, true);
 		locked = true;
 	}
+
 restart:
 	/* check inline_data */
 	ipage = f2fs_get_node_page(sbi, inode->i_ino);
@@ -2578,7 +3374,7 @@ static int prepare_write_begin(struct f2fs_sb_info *sbi,
 			err = f2fs_get_dnode_of_data(&dn, index, LOOKUP_NODE);
 			if (err || dn.data_blkaddr == NULL_ADDR) {
 				f2fs_put_dnode(&dn);
-				__do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO,
+				f2fs_do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO,
 								true);
 				WARN_ON(flag != F2FS_GET_BLOCK_PRE_AIO);
 				locked = true;
@@ -2594,7 +3390,7 @@ static int prepare_write_begin(struct f2fs_sb_info *sbi,
 	f2fs_put_dnode(&dn);
 unlock_out:
 	if (locked)
-		__do_map_lock(sbi, flag, false);
+		f2fs_do_map_lock(sbi, flag, false);
 	return err;
 }
 
@@ -2610,6 +3406,16 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
 	block_t blkaddr = NULL_ADDR;
 	int err = 0;
 
+	if (trace_android_fs_datawrite_start_enabled()) {
+		char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+		path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    inode);
+		trace_android_fs_datawrite_start(inode, pos, len,
+						 current->pid, path,
+						 current->comm);
+	}
 	trace_f2fs_write_begin(inode, pos, len, flags);
 
 	if (!f2fs_is_checkpoint_ready(sbi)) {
@@ -2635,6 +3441,24 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
 		if (err)
 			goto fail;
 	}
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	if (f2fs_compressed_file(inode)) {
+		int ret;
+
+		*fsdata = NULL;
+
+		ret = f2fs_prepare_compress_overwrite(inode, pagep,
+							index, fsdata);
+		if (ret < 0) {
+			err = ret;
+			goto fail;
+		} else if (ret) {
+			return 0;
+		}
+	}
+#endif
+
 repeat:
 	/*
 	 * Do not use grab_cache_page_write_begin() to avoid deadlock due to
@@ -2647,6 +3471,8 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
 		goto fail;
 	}
 
+	/* TODO: cluster can be compressed due to race with .writepage */
+
 	*pagep = page;
 
 	err = prepare_write_begin(sbi, page, pos, len,
@@ -2686,7 +3512,7 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
 			err = -EFSCORRUPTED;
 			goto fail;
 		}
-		err = f2fs_submit_page_read(inode, page, blkaddr);
+		err = f2fs_submit_page_read(inode, page, blkaddr, 0, true);
 		if (err)
 			goto fail;
 
@@ -2717,6 +3543,7 @@ static int f2fs_write_end(struct file *file,
 {
 	struct inode *inode = page->mapping->host;
 
+	trace_android_fs_datawrite_end(inode, pos, len);
 	trace_f2fs_write_end(inode, pos, len, copied);
 
 	/*
@@ -2730,6 +3557,20 @@ static int f2fs_write_end(struct file *file,
 		else
 			SetPageUptodate(page);
 	}
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	/* overwrite compressed file */
+	if (f2fs_compressed_file(inode) && fsdata) {
+		f2fs_compress_write_end(inode, fsdata, page->index, copied);
+		f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
+
+		if (pos + copied > i_size_read(inode) &&
+				!f2fs_verity_in_progress(inode))
+			f2fs_i_size_write(inode, pos + copied);
+		return copied;
+	}
+#endif
+
 	if (!copied)
 		goto unlock_out;
 
@@ -2777,7 +3618,7 @@ static void f2fs_dio_end_io(struct bio *bio)
 	bio->bi_private = dio->orig_private;
 	bio->bi_end_io = dio->orig_end_io;
 
-	kvfree(dio);
+	kfree(dio);
 
 	bio_endio(bio);
 }
@@ -2836,6 +3677,29 @@ static ssize_t f2fs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
 
 	trace_f2fs_direct_IO_enter(inode, offset, count, rw);
 
+	if (trace_android_fs_dataread_start_enabled() &&
+	    (rw == READ)) {
+		char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+		path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    inode);
+		trace_android_fs_dataread_start(inode, offset,
+						count, current->pid, path,
+						current->comm);
+	}
+	if (trace_android_fs_datawrite_start_enabled() &&
+	    (rw == WRITE)) {
+		char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+		path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    inode);
+		trace_android_fs_datawrite_start(inode, offset, count,
+						 current->pid, path,
+						 current->comm);
+	}
+
 	if (rw == WRITE && whint_mode == WHINT_MODE_OFF)
 		iocb->ki_hint = WRITE_LIFE_NOT_SET;
 
@@ -2860,7 +3724,8 @@ static ssize_t f2fs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
 	err = __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev,
 			iter, rw == WRITE ? get_data_block_dio_write :
 			get_data_block_dio, NULL, f2fs_dio_submit_bio,
-			DIO_LOCKING | DIO_SKIP_HOLES);
+			rw == WRITE ? DIO_LOCKING | DIO_SKIP_HOLES :
+			DIO_SKIP_HOLES);
 
 	if (do_opu)
 		up_read(&fi->i_gc_rwsem[READ]);
@@ -2875,12 +3740,28 @@ static ssize_t f2fs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
 									err);
 			if (!do_opu)
 				set_inode_flag(inode, FI_UPDATE_WRITE);
+		} else if (err == -EIOCBQUEUED) {
+			f2fs_update_iostat(F2FS_I_SB(inode), APP_DIRECT_IO,
+						count - iov_iter_count(iter));
 		} else if (err < 0) {
 			f2fs_write_failed(mapping, offset + count);
 		}
+	} else {
+		if (err > 0)
+			f2fs_update_iostat(sbi, APP_DIRECT_READ_IO, err);
+		else if (err == -EIOCBQUEUED)
+			f2fs_update_iostat(F2FS_I_SB(inode), APP_DIRECT_READ_IO,
+						count - iov_iter_count(iter));
 	}
 
 out:
+	if (trace_android_fs_dataread_start_enabled() &&
+	    (rw == READ))
+		trace_android_fs_dataread_end(inode, offset, count);
+	if (trace_android_fs_datawrite_start_enabled() &&
+	    (rw == WRITE))
+		trace_android_fs_datawrite_end(inode, offset, count);
+
 	trace_f2fs_direct_IO_exit(inode, offset, count, rw, err);
 
 	return err;
@@ -2961,18 +3842,69 @@ static int f2fs_set_data_page_dirty(struct page *page)
 	return 0;
 }
 
+
+static sector_t f2fs_bmap_compress(struct inode *inode, sector_t block)
+{
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	struct dnode_of_data dn;
+	sector_t start_idx, blknr = 0;
+	int ret;
+
+	start_idx = round_down(block, F2FS_I(inode)->i_cluster_size);
+
+	set_new_dnode(&dn, inode, NULL, NULL, 0);
+	ret = f2fs_get_dnode_of_data(&dn, start_idx, LOOKUP_NODE);
+	if (ret)
+		return 0;
+
+	if (dn.data_blkaddr != COMPRESS_ADDR) {
+		dn.ofs_in_node += block - start_idx;
+		blknr = f2fs_data_blkaddr(&dn);
+		if (!__is_valid_data_blkaddr(blknr))
+			blknr = 0;
+	}
+
+	f2fs_put_dnode(&dn);
+	return blknr;
+#else
+	return 0;
+#endif
+}
+
+
 static sector_t f2fs_bmap(struct address_space *mapping, sector_t block)
 {
 	struct inode *inode = mapping->host;
+	sector_t blknr = 0;
 
 	if (f2fs_has_inline_data(inode))
-		return 0;
+		goto out;
 
 	/* make sure allocating whole blocks */
 	if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
 		filemap_write_and_wait(mapping);
 
-	return generic_block_bmap(mapping, block, get_data_block_bmap);
+	/* Block number less than F2FS MAX BLOCKS */
+	if (unlikely(block >= F2FS_I_SB(inode)->max_file_blocks))
+		goto out;
+
+	if (f2fs_compressed_file(inode)) {
+		blknr = f2fs_bmap_compress(inode, block);
+	} else {
+		struct f2fs_map_blocks map;
+
+		memset(&map, 0, sizeof(map));
+		map.m_lblk = block;
+		map.m_len = 1;
+		map.m_next_pgofs = NULL;
+		map.m_seg_type = NO_CHECK_TYPE;
+
+		if (!f2fs_map_blocks(inode, &map, 0, F2FS_GET_BLOCK_BMAP))
+			blknr = map.m_pblk;
+	}
+out:
+	trace_f2fs_bmap(inode, block, blknr);
+	return blknr;
 }
 
 #ifdef CONFIG_MIGRATION
@@ -3032,6 +3964,85 @@ int f2fs_migrate_page(struct address_space *mapping,
 #endif
 
 #ifdef CONFIG_SWAP
+static int check_swap_activate_fast(struct swap_info_struct *sis,
+				struct file *swap_file, sector_t *span)
+{
+	struct address_space *mapping = swap_file->f_mapping;
+	struct inode *inode = mapping->host;
+	sector_t cur_lblock;
+	sector_t last_lblock;
+	sector_t pblock;
+	sector_t lowest_pblock = -1;
+	sector_t highest_pblock = 0;
+	int nr_extents = 0;
+	unsigned long nr_pblocks;
+	u64 len;
+	int ret;
+
+	/*
+	 * Map all the blocks into the extent list.  This code doesn't try
+	 * to be very smart.
+	 */
+	cur_lblock = 0;
+	last_lblock = bytes_to_blks(inode, i_size_read(inode));
+	len = i_size_read(inode);
+
+	while (cur_lblock <= last_lblock && cur_lblock < sis->max) {
+		struct f2fs_map_blocks map;
+		pgoff_t next_pgofs;
+
+		cond_resched();
+
+		memset(&map, 0, sizeof(map));
+		map.m_lblk = cur_lblock;
+		map.m_len = bytes_to_blks(inode, len) - cur_lblock;
+		map.m_next_pgofs = &next_pgofs;
+		map.m_seg_type = NO_CHECK_TYPE;
+
+		ret = f2fs_map_blocks(inode, &map, 0, F2FS_GET_BLOCK_FIEMAP);
+		if (ret)
+			goto err_out;
+
+		/* hole */
+		if (!(map.m_flags & F2FS_MAP_FLAGS))
+			goto err_out;
+
+		pblock = map.m_pblk;
+		nr_pblocks = map.m_len;
+
+		if (cur_lblock + nr_pblocks >= sis->max)
+			nr_pblocks = sis->max - cur_lblock;
+
+		if (cur_lblock) {	/* exclude the header page */
+			if (pblock < lowest_pblock)
+				lowest_pblock = pblock;
+			if (pblock + nr_pblocks - 1 > highest_pblock)
+				highest_pblock = pblock + nr_pblocks - 1;
+		}
+
+		/*
+		 * We found a PAGE_SIZE-length, PAGE_SIZE-aligned run of blocks
+		 */
+		ret = add_swap_extent(sis, cur_lblock, nr_pblocks, pblock);
+		if (ret < 0)
+			goto out;
+		nr_extents += ret;
+		cur_lblock += nr_pblocks;
+	}
+	ret = nr_extents;
+	*span = 1 + highest_pblock - lowest_pblock;
+	if (cur_lblock == 0)
+		cur_lblock = 1;	/* force Empty message */
+	sis->max = cur_lblock;
+	sis->pages = cur_lblock - 1;
+	sis->highest_bit = cur_lblock - 1;
+out:
+	return ret;
+err_out:
+	pr_err("swapon: swapfile has holes\n");
+	return -EINVAL;
+}
+
 /* Copied from generic_swapfile_activate() to check any holes */
 static int check_swap_activate(struct swap_info_struct *sis,
 				struct file *swap_file, sector_t *span)
@@ -3040,7 +4051,6 @@ static int check_swap_activate(struct swap_info_struct *sis,
 	struct inode *inode = mapping->host;
 	unsigned blocks_per_page;
 	unsigned long page_no;
-	unsigned blkbits;
 	sector_t probe_block;
 	sector_t last_block;
 	sector_t lowest_block = -1;
@@ -3048,8 +4058,10 @@ static int check_swap_activate(struct swap_info_struct *sis,
 	int nr_extents = 0;
 	int ret;
 
-	blkbits = inode->i_blkbits;
-	blocks_per_page = PAGE_SIZE >> blkbits;
+	if (PAGE_SIZE == F2FS_BLKSIZE)
+		return check_swap_activate_fast(sis, swap_file, span);
+
+	blocks_per_page = bytes_to_blks(inode, PAGE_SIZE);
 
 	/*
 	 * Map all the blocks into the extent list.  This code doesn't try
@@ -3057,7 +4069,7 @@ static int check_swap_activate(struct swap_info_struct *sis,
 	 */
 	probe_block = 0;
 	page_no = 0;
-	last_block = i_size_read(inode) >> blkbits;
+	last_block = bytes_to_blks(inode, i_size_read(inode));
 	while ((probe_block + blocks_per_page) <= last_block &&
 			page_no < sis->max) {
 		unsigned block_in_page;
@@ -3091,7 +4103,7 @@ static int check_swap_activate(struct swap_info_struct *sis,
 			}
 		}
 
-		first_block >>= (PAGE_SHIFT - blkbits);
+		first_block >>= (PAGE_SHIFT - inode->i_blkbits);
 		if (page_no) {	/* exclude the header page */
 			if (first_block < lowest_block)
 				lowest_block = first_block;
@@ -3141,6 +4153,9 @@ static int f2fs_swap_activate(struct swap_info_struct *sis, struct file *file,
 	if (ret)
 		return ret;
 
+	if (!f2fs_disable_compressed_file(inode))
+		return -EINVAL;
+
 	ret = check_swap_activate(sis, file, span);
 	if (ret < 0)
 		return ret;
@@ -3219,8 +4234,43 @@ int __init f2fs_init_post_read_processing(void)
 	return -ENOMEM;
 }
 
-void __exit f2fs_destroy_post_read_processing(void)
+void f2fs_destroy_post_read_processing(void)
 {
 	mempool_destroy(bio_post_read_ctx_pool);
 	kmem_cache_destroy(bio_post_read_ctx_cache);
 }
+
+int f2fs_init_post_read_wq(struct f2fs_sb_info *sbi)
+{
+	if (!f2fs_sb_has_encrypt(sbi) &&
+		!f2fs_sb_has_verity(sbi) &&
+		!f2fs_sb_has_compression(sbi))
+		return 0;
+
+	sbi->post_read_wq = alloc_workqueue("f2fs_post_read_wq",
+						 WQ_UNBOUND | WQ_HIGHPRI,
+						 num_online_cpus());
+	if (!sbi->post_read_wq)
+		return -ENOMEM;
+	return 0;
+}
+
+void f2fs_destroy_post_read_wq(struct f2fs_sb_info *sbi)
+{
+	if (sbi->post_read_wq)
+		destroy_workqueue(sbi->post_read_wq);
+}
+
+int __init f2fs_init_bio_entry_cache(void)
+{
+	bio_entry_slab = f2fs_kmem_cache_create("f2fs_bio_entry_slab",
+			sizeof(struct bio_entry));
+	if (!bio_entry_slab)
+		return -ENOMEM;
+	return 0;
+}
+
+void f2fs_destroy_bio_entry_cache(void)
+{
+	kmem_cache_destroy(bio_entry_slab);
+}
diff --git a/fs/f2fs/debug.c b/fs/f2fs/debug.c
index d8d6444..197c914 100644
--- a/fs/f2fs/debug.c
+++ b/fs/f2fs/debug.c
@@ -21,9 +21,45 @@
 #include "gc.h"
 
 static LIST_HEAD(f2fs_stat_list);
-static struct dentry *f2fs_debugfs_root;
 static DEFINE_MUTEX(f2fs_stat_mutex);
+#ifdef CONFIG_DEBUG_FS
+static struct dentry *f2fs_debugfs_root;
+#endif
 
+/*
+ * This function calculates BDF of every segments
+ */
+void f2fs_update_sit_info(struct f2fs_sb_info *sbi)
+{
+	struct f2fs_stat_info *si = F2FS_STAT(sbi);
+	unsigned long long blks_per_sec, hblks_per_sec, total_vblocks;
+	unsigned long long bimodal, dist;
+	unsigned int segno, vblocks;
+	int ndirty = 0;
+
+	bimodal = 0;
+	total_vblocks = 0;
+	blks_per_sec = BLKS_PER_SEC(sbi);
+	hblks_per_sec = blks_per_sec / 2;
+	for (segno = 0; segno < MAIN_SEGS(sbi); segno += sbi->segs_per_sec) {
+		vblocks = get_valid_blocks(sbi, segno, true);
+		dist = abs(vblocks - hblks_per_sec);
+		bimodal += dist * dist;
+
+		if (vblocks > 0 && vblocks < blks_per_sec) {
+			total_vblocks += vblocks;
+			ndirty++;
+		}
+	}
+	dist = div_u64(MAIN_SECS(sbi) * hblks_per_sec * hblks_per_sec, 100);
+	si->bimodal = div64_u64(bimodal, dist);
+	if (si->dirty_count)
+		si->avg_vblocks = div_u64(total_vblocks, ndirty);
+	else
+		si->avg_vblocks = 0;
+}
+
+#ifdef CONFIG_DEBUG_FS
 static void update_general_status(struct f2fs_sb_info *sbi)
 {
 	struct f2fs_stat_info *si = F2FS_STAT(sbi);
@@ -56,7 +92,7 @@ static void update_general_status(struct f2fs_sb_info *sbi)
 	si->nquota_files = sbi->nquota_files;
 	si->ndirty_all = sbi->ndirty_inode[DIRTY_META];
 	si->inmem_pages = get_pages(sbi, F2FS_INMEM_PAGES);
-	si->aw_cnt = atomic_read(&sbi->aw_cnt);
+	si->aw_cnt = sbi->atomic_files;
 	si->vw_cnt = atomic_read(&sbi->vw_cnt);
 	si->max_aw_cnt = atomic_read(&sbi->max_aw_cnt);
 	si->max_vw_cnt = atomic_read(&sbi->max_vw_cnt);
@@ -94,6 +130,8 @@ static void update_general_status(struct f2fs_sb_info *sbi)
 	si->inline_xattr = atomic_read(&sbi->inline_xattr);
 	si->inline_inode = atomic_read(&sbi->inline_inode);
 	si->inline_dir = atomic_read(&sbi->inline_dir);
+	si->compr_inode = atomic_read(&sbi->compr_inode);
+	si->compr_blocks = atomic64_read(&sbi->compr_blocks);
 	si->append = sbi->im[APPEND_INO].ino_num;
 	si->update = sbi->im[UPDATE_INO].ino_num;
 	si->orphans = sbi->im[ORPHAN_INO].ino_num;
@@ -114,7 +152,6 @@ static void update_general_status(struct f2fs_sb_info *sbi)
 	si->free_nids = NM_I(sbi)->nid_cnt[FREE_NID];
 	si->avail_nids = NM_I(sbi)->available_nids;
 	si->alloc_nids = NM_I(sbi)->nid_cnt[PREALLOC_NID];
-	si->bg_gc = sbi->bg_gc;
 	si->io_skip_bggc = sbi->io_skip_bggc;
 	si->other_skip_bggc = sbi->other_skip_bggc;
 	si->skipped_atomic_files[BG_GC] = sbi->skipped_atomic_files[BG_GC];
@@ -127,7 +164,7 @@ static void update_general_status(struct f2fs_sb_info *sbi)
 		* 100 / (int)(sbi->user_block_count >> sbi->log_blocks_per_seg)
 		/ 2;
 	si->util_invalid = 50 - si->util_free - si->util_valid;
-	for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_NODE; i++) {
+	for (i = CURSEG_HOT_DATA; i < NO_CHECK_TYPE; i++) {
 		struct curseg_info *curseg = CURSEG_I(sbi, i);
 		si->curseg[i] = curseg->segno;
 		si->cursec[i] = GET_SEC_FROM_SEG(sbi, curseg->segno);
@@ -137,6 +174,26 @@ static void update_general_status(struct f2fs_sb_info *sbi)
 	for (i = META_CP; i < META_MAX; i++)
 		si->meta_count[i] = atomic_read(&sbi->meta_count[i]);
 
+	for (i = 0; i < NO_CHECK_TYPE; i++) {
+		si->dirty_seg[i] = 0;
+		si->full_seg[i] = 0;
+		si->valid_blks[i] = 0;
+	}
+
+	for (i = 0; i < MAIN_SEGS(sbi); i++) {
+		int blks = get_seg_entry(sbi, i)->valid_blocks;
+		int type = get_seg_entry(sbi, i)->type;
+
+		if (!blks)
+			continue;
+
+		if (blks == sbi->blocks_per_seg)
+			si->full_seg[type]++;
+		else
+			si->dirty_seg[type]++;
+		si->valid_blks[type] += blks;
+	}
+
 	for (i = 0; i < 2; i++) {
 		si->segment_count[i] = sbi->segment_count[i];
 		si->block_count[i] = sbi->block_count[i];
@@ -146,39 +203,6 @@ static void update_general_status(struct f2fs_sb_info *sbi)
 }
 
 /*
- * This function calculates BDF of every segments
- */
-static void update_sit_info(struct f2fs_sb_info *sbi)
-{
-	struct f2fs_stat_info *si = F2FS_STAT(sbi);
-	unsigned long long blks_per_sec, hblks_per_sec, total_vblocks;
-	unsigned long long bimodal, dist;
-	unsigned int segno, vblocks;
-	int ndirty = 0;
-
-	bimodal = 0;
-	total_vblocks = 0;
-	blks_per_sec = BLKS_PER_SEC(sbi);
-	hblks_per_sec = blks_per_sec / 2;
-	for (segno = 0; segno < MAIN_SEGS(sbi); segno += sbi->segs_per_sec) {
-		vblocks = get_valid_blocks(sbi, segno, true);
-		dist = abs(vblocks - hblks_per_sec);
-		bimodal += dist * dist;
-
-		if (vblocks > 0 && vblocks < blks_per_sec) {
-			total_vblocks += vblocks;
-			ndirty++;
-		}
-	}
-	dist = div_u64(MAIN_SECS(sbi) * hblks_per_sec * hblks_per_sec, 100);
-	si->bimodal = div64_u64(bimodal, dist);
-	if (si->dirty_count)
-		si->avg_vblocks = div_u64(total_vblocks, ndirty);
-	else
-		si->avg_vblocks = 0;
-}
-
-/*
  * This function calculates memory footprint.
  */
 static void update_mem_info(struct f2fs_sb_info *sbi)
@@ -298,6 +322,9 @@ static int stat_show(struct seq_file *s, void *v)
 			   si->ssa_area_segs, si->main_area_segs);
 		seq_printf(s, "(OverProv:%d Resv:%d)]\n\n",
 			   si->overp_segs, si->rsvd_segs);
+		seq_printf(s, "Current Time Sec: %llu / Mounted Time Sec: %llu\n\n",
+					ktime_get_boottime_seconds(),
+					SIT_I(si->sbi)->mounted_time);
 		if (test_opt(si->sbi, DISCARD))
 			seq_printf(s, "Utilization: %u%% (%u valid blocks, %u discard blocks)\n",
 				si->utilization, si->valid_count, si->discard_blks);
@@ -316,35 +343,65 @@ static int stat_show(struct seq_file *s, void *v)
 			   si->inline_inode);
 		seq_printf(s, "  - Inline_dentry Inode: %u\n",
 			   si->inline_dir);
+		seq_printf(s, "  - Compressed Inode: %u, Blocks: %llu\n",
+			   si->compr_inode, si->compr_blocks);
 		seq_printf(s, "  - Orphan/Append/Update Inode: %u, %u, %u\n",
 			   si->orphans, si->append, si->update);
 		seq_printf(s, "\nMain area: %d segs, %d secs %d zones\n",
 			   si->main_area_segs, si->main_area_sections,
 			   si->main_area_zones);
-		seq_printf(s, "  - COLD  data: %d, %d, %d\n",
+		seq_printf(s, "    TYPE         %8s %8s %8s %10s %10s %10s\n",
+			   "segno", "secno", "zoneno", "dirty_seg", "full_seg", "valid_blk");
+		seq_printf(s, "  - COLD   data: %8d %8d %8d %10u %10u %10u\n",
 			   si->curseg[CURSEG_COLD_DATA],
 			   si->cursec[CURSEG_COLD_DATA],
-			   si->curzone[CURSEG_COLD_DATA]);
-		seq_printf(s, "  - WARM  data: %d, %d, %d\n",
+			   si->curzone[CURSEG_COLD_DATA],
+			   si->dirty_seg[CURSEG_COLD_DATA],
+			   si->full_seg[CURSEG_COLD_DATA],
+			   si->valid_blks[CURSEG_COLD_DATA]);
+		seq_printf(s, "  - WARM   data: %8d %8d %8d %10u %10u %10u\n",
 			   si->curseg[CURSEG_WARM_DATA],
 			   si->cursec[CURSEG_WARM_DATA],
-			   si->curzone[CURSEG_WARM_DATA]);
-		seq_printf(s, "  - HOT   data: %d, %d, %d\n",
+			   si->curzone[CURSEG_WARM_DATA],
+			   si->dirty_seg[CURSEG_WARM_DATA],
+			   si->full_seg[CURSEG_WARM_DATA],
+			   si->valid_blks[CURSEG_WARM_DATA]);
+		seq_printf(s, "  - HOT    data: %8d %8d %8d %10u %10u %10u\n",
 			   si->curseg[CURSEG_HOT_DATA],
 			   si->cursec[CURSEG_HOT_DATA],
-			   si->curzone[CURSEG_HOT_DATA]);
-		seq_printf(s, "  - Dir   dnode: %d, %d, %d\n",
+			   si->curzone[CURSEG_HOT_DATA],
+			   si->dirty_seg[CURSEG_HOT_DATA],
+			   si->full_seg[CURSEG_HOT_DATA],
+			   si->valid_blks[CURSEG_HOT_DATA]);
+		seq_printf(s, "  - Dir   dnode: %8d %8d %8d %10u %10u %10u\n",
 			   si->curseg[CURSEG_HOT_NODE],
 			   si->cursec[CURSEG_HOT_NODE],
-			   si->curzone[CURSEG_HOT_NODE]);
-		seq_printf(s, "  - File   dnode: %d, %d, %d\n",
+			   si->curzone[CURSEG_HOT_NODE],
+			   si->dirty_seg[CURSEG_HOT_NODE],
+			   si->full_seg[CURSEG_HOT_NODE],
+			   si->valid_blks[CURSEG_HOT_NODE]);
+		seq_printf(s, "  - File  dnode: %8d %8d %8d %10u %10u %10u\n",
 			   si->curseg[CURSEG_WARM_NODE],
 			   si->cursec[CURSEG_WARM_NODE],
-			   si->curzone[CURSEG_WARM_NODE]);
-		seq_printf(s, "  - Indir nodes: %d, %d, %d\n",
+			   si->curzone[CURSEG_WARM_NODE],
+			   si->dirty_seg[CURSEG_WARM_NODE],
+			   si->full_seg[CURSEG_WARM_NODE],
+			   si->valid_blks[CURSEG_WARM_NODE]);
+		seq_printf(s, "  - Indir nodes: %8d %8d %8d %10u %10u %10u\n",
 			   si->curseg[CURSEG_COLD_NODE],
 			   si->cursec[CURSEG_COLD_NODE],
-			   si->curzone[CURSEG_COLD_NODE]);
+			   si->curzone[CURSEG_COLD_NODE],
+			   si->dirty_seg[CURSEG_COLD_NODE],
+			   si->full_seg[CURSEG_COLD_NODE],
+			   si->valid_blks[CURSEG_COLD_NODE]);
+		seq_printf(s, "  - Pinned file: %8d %8d %8d\n",
+			   si->curseg[CURSEG_COLD_DATA_PINNED],
+			   si->cursec[CURSEG_COLD_DATA_PINNED],
+			   si->curzone[CURSEG_COLD_DATA_PINNED]);
+		seq_printf(s, "  - ATGC   data: %8d %8d %8d\n",
+			   si->curseg[CURSEG_ALL_DATA_ATGC],
+			   si->cursec[CURSEG_ALL_DATA_ATGC],
+			   si->curzone[CURSEG_ALL_DATA_ATGC]);
 		seq_printf(s, "\n  - Valid: %d\n  - Dirty: %d\n",
 			   si->main_area_segs - si->dirty_count -
 			   si->prefree_count - si->free_segs,
@@ -442,7 +499,7 @@ static int stat_show(struct seq_file *s, void *v)
 			   si->block_count[LFS], si->segment_count[LFS]);
 
 		/* segment usage info */
-		update_sit_info(si->sbi);
+		f2fs_update_sit_info(si->sbi);
 		seq_printf(s, "\nBDF: %u, avg. vblocks: %u\n",
 			   si->bimodal, si->avg_vblocks);
 
@@ -462,6 +519,7 @@ static int stat_show(struct seq_file *s, void *v)
 }
 
 DEFINE_SHOW_ATTRIBUTE(stat);
+#endif
 
 int f2fs_build_stats(struct f2fs_sb_info *sbi)
 {
@@ -492,11 +550,12 @@ int f2fs_build_stats(struct f2fs_sb_info *sbi)
 	atomic_set(&sbi->inline_xattr, 0);
 	atomic_set(&sbi->inline_inode, 0);
 	atomic_set(&sbi->inline_dir, 0);
+	atomic_set(&sbi->compr_inode, 0);
+	atomic64_set(&sbi->compr_blocks, 0);
 	atomic_set(&sbi->inplace_count, 0);
 	for (i = META_CP; i < META_MAX; i++)
 		atomic_set(&sbi->meta_count[i], 0);
 
-	atomic_set(&sbi->aw_cnt, 0);
 	atomic_set(&sbi->vw_cnt, 0);
 	atomic_set(&sbi->max_aw_cnt, 0);
 	atomic_set(&sbi->max_vw_cnt, 0);
@@ -516,19 +575,23 @@ void f2fs_destroy_stats(struct f2fs_sb_info *sbi)
 	list_del(&si->stat_list);
 	mutex_unlock(&f2fs_stat_mutex);
 
-	kvfree(si);
+	kfree(si);
 }
 
 void __init f2fs_create_root_stats(void)
 {
+#ifdef CONFIG_DEBUG_FS
 	f2fs_debugfs_root = debugfs_create_dir("f2fs", NULL);
 
 	debugfs_create_file("status", S_IRUGO, f2fs_debugfs_root, NULL,
 			    &stat_fops);
+#endif
 }
 
 void f2fs_destroy_root_stats(void)
 {
+#ifdef CONFIG_DEBUG_FS
 	debugfs_remove_recursive(f2fs_debugfs_root);
 	f2fs_debugfs_root = NULL;
+#endif
 }
diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 78d041f..e6270a8 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -5,6 +5,7 @@
  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  *             http://www.samsung.com/
  */
+#include <asm/unaligned.h>
 #include <linux/fs.h>
 #include <linux/f2fs_fs.h>
 #include <linux/sched/signal.h>
@@ -70,6 +71,112 @@ unsigned char f2fs_get_de_type(struct f2fs_dir_entry *de)
 	return DT_UNKNOWN;
 }
 
+/* If @dir is casefolded, initialize @fname->cf_name from @fname->usr_fname. */
+int f2fs_init_casefolded_name(const struct inode *dir,
+			      struct f2fs_filename *fname)
+{
+#ifdef CONFIG_UNICODE
+	struct super_block *sb = dir->i_sb;
+	struct f2fs_sb_info *sbi = F2FS_SB(sb);
+
+	if (IS_CASEFOLDED(dir)) {
+		fname->cf_name.name = f2fs_kmalloc(sbi, F2FS_NAME_LEN,
+						   GFP_NOFS);
+		if (!fname->cf_name.name)
+			return -ENOMEM;
+		fname->cf_name.len = utf8_casefold(sb->s_encoding,
+						   fname->usr_fname,
+						   fname->cf_name.name,
+						   F2FS_NAME_LEN);
+		if ((int)fname->cf_name.len <= 0) {
+			kfree(fname->cf_name.name);
+			fname->cf_name.name = NULL;
+			if (sb_has_strict_encoding(sb))
+				return -EINVAL;
+			/* fall back to treating name as opaque byte sequence */
+		}
+	}
+#endif
+	return 0;
+}
+
+static int __f2fs_setup_filename(const struct inode *dir,
+				 const struct fscrypt_name *crypt_name,
+				 struct f2fs_filename *fname)
+{
+	int err;
+
+	memset(fname, 0, sizeof(*fname));
+
+	fname->usr_fname = crypt_name->usr_fname;
+	fname->disk_name = crypt_name->disk_name;
+#ifdef CONFIG_FS_ENCRYPTION
+	fname->crypto_buf = crypt_name->crypto_buf;
+#endif
+	if (crypt_name->is_nokey_name) {
+		/* hash was decoded from the no-key name */
+		fname->hash = cpu_to_le32(crypt_name->hash);
+	} else {
+		err = f2fs_init_casefolded_name(dir, fname);
+		if (err) {
+			f2fs_free_filename(fname);
+			return err;
+		}
+		f2fs_hash_filename(dir, fname);
+	}
+	return 0;
+}
+
+/*
+ * Prepare to search for @iname in @dir.  This is similar to
+ * fscrypt_setup_filename(), but this also handles computing the casefolded name
+ * and the f2fs dirhash if needed, then packing all the information about this
+ * filename up into a 'struct f2fs_filename'.
+ */
+int f2fs_setup_filename(struct inode *dir, const struct qstr *iname,
+			int lookup, struct f2fs_filename *fname)
+{
+	struct fscrypt_name crypt_name;
+	int err;
+
+	err = fscrypt_setup_filename(dir, iname, lookup, &crypt_name);
+	if (err)
+		return err;
+
+	return __f2fs_setup_filename(dir, &crypt_name, fname);
+}
+
+/*
+ * Prepare to look up @dentry in @dir.  This is similar to
+ * fscrypt_prepare_lookup(), but this also handles computing the casefolded name
+ * and the f2fs dirhash if needed, then packing all the information about this
+ * filename up into a 'struct f2fs_filename'.
+ */
+int f2fs_prepare_lookup(struct inode *dir, struct dentry *dentry,
+			struct f2fs_filename *fname)
+{
+	struct fscrypt_name crypt_name;
+	int err;
+
+	err = fscrypt_prepare_lookup(dir, dentry, &crypt_name);
+	if (err)
+		return err;
+
+	return __f2fs_setup_filename(dir, &crypt_name, fname);
+}
+
+void f2fs_free_filename(struct f2fs_filename *fname)
+{
+#ifdef CONFIG_FS_ENCRYPTION
+	kfree(fname->crypto_buf.name);
+	fname->crypto_buf.name = NULL;
+#endif
+#ifdef CONFIG_UNICODE
+	kfree(fname->cf_name.name);
+	fname->cf_name.name = NULL;
+#endif
+}
+
 static unsigned long dir_block_index(unsigned int level,
 				int dir_level, unsigned int idx)
 {
@@ -84,126 +191,98 @@ static unsigned long dir_block_index(unsigned int level,
 
 static struct f2fs_dir_entry *find_in_block(struct inode *dir,
 				struct page *dentry_page,
-				struct fscrypt_name *fname,
-				f2fs_hash_t namehash,
-				int *max_slots,
-				struct page **res_page)
+				const struct f2fs_filename *fname,
+				int *max_slots)
 {
 	struct f2fs_dentry_block *dentry_blk;
-	struct f2fs_dir_entry *de;
 	struct f2fs_dentry_ptr d;
 
 	dentry_blk = (struct f2fs_dentry_block *)page_address(dentry_page);
 
 	make_dentry_ptr_block(dir, &d, dentry_blk);
-	de = f2fs_find_target_dentry(fname, namehash, max_slots, &d);
-	if (de)
-		*res_page = dentry_page;
-
-	return de;
+	return f2fs_find_target_dentry(&d, fname, max_slots);
 }
 
 #ifdef CONFIG_UNICODE
 /*
  * Test whether a case-insensitive directory entry matches the filename
  * being searched for.
+ *
+ * Returns 1 for a match, 0 for no match, and -errno on an error.
  */
-static bool f2fs_match_ci_name(const struct inode *dir, const struct qstr *name,
-			       const struct qstr *entry, bool quick)
+static int f2fs_match_ci_name(const struct inode *dir, const struct qstr *name,
+			       const u8 *de_name, u32 de_name_len)
 {
-	const struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb);
-	const struct unicode_map *um = sbi->s_encoding;
+	const struct super_block *sb = dir->i_sb;
+	const struct unicode_map *um = sb->s_encoding;
+	struct fscrypt_str decrypted_name = FSTR_INIT(NULL, de_name_len);
+	struct qstr entry = QSTR_INIT(de_name, de_name_len);
 	int res;
 
-	if (quick)
-		res = utf8_strncasecmp_folded(um, name, entry);
-	else
-		res = utf8_strncasecmp(um, name, entry);
-	if (res < 0) {
-		/*
-		 * In strict mode, ignore invalid names.  In non-strict mode,
-		 * fall back to treating them as opaque byte sequences.
-		 */
-		if (f2fs_has_strict_mode(sbi) || name->len != entry->len)
-			return false;
-		return !memcmp(name->name, entry->name, name->len);
+	if (IS_ENCRYPTED(dir)) {
+		const struct fscrypt_str encrypted_name =
+			FSTR_INIT((u8 *)de_name, de_name_len);
+
+		if (WARN_ON_ONCE(!fscrypt_has_encryption_key(dir)))
+			return -EINVAL;
+
+		decrypted_name.name = kmalloc(de_name_len, GFP_KERNEL);
+		if (!decrypted_name.name)
+			return -ENOMEM;
+		res = fscrypt_fname_disk_to_usr(dir, 0, 0, &encrypted_name,
+						&decrypted_name);
+		if (res < 0)
+			goto out;
+		entry.name = decrypted_name.name;
+		entry.len = decrypted_name.len;
 	}
-	return res == 0;
+
+	res = utf8_strncasecmp_folded(um, name, &entry);
+	/*
+	 * In strict mode, ignore invalid names.  In non-strict mode,
+	 * fall back to treating them as opaque byte sequences.
+	 */
+	if (res < 0 && !sb_has_strict_encoding(sb)) {
+		res = name->len == entry.len &&
+				memcmp(name->name, entry.name, name->len) == 0;
+	} else {
+		/* utf8_strncasecmp_folded returns 0 on match */
+		res = (res == 0);
+	}
+out:
+	kfree(decrypted_name.name);
+	return res;
 }
+#endif /* CONFIG_UNICODE */
 
-static void f2fs_fname_setup_ci_filename(struct inode *dir,
-					const struct qstr *iname,
-					struct fscrypt_str *cf_name)
+static inline int f2fs_match_name(const struct inode *dir,
+				   const struct f2fs_filename *fname,
+				   const u8 *de_name, u32 de_name_len)
 {
-	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
-
-	if (!IS_CASEFOLDED(dir)) {
-		cf_name->name = NULL;
-		return;
-	}
-
-	cf_name->name = f2fs_kmalloc(sbi, F2FS_NAME_LEN, GFP_NOFS);
-	if (!cf_name->name)
-		return;
-
-	cf_name->len = utf8_casefold(sbi->s_encoding,
-					iname, cf_name->name,
-					F2FS_NAME_LEN);
-	if ((int)cf_name->len <= 0) {
-		kvfree(cf_name->name);
-		cf_name->name = NULL;
-	}
-}
-#endif
-
-static inline bool f2fs_match_name(struct f2fs_dentry_ptr *d,
-					struct f2fs_dir_entry *de,
-					struct fscrypt_name *fname,
-					struct fscrypt_str *cf_str,
-					unsigned long bit_pos,
-					f2fs_hash_t namehash)
-{
-#ifdef CONFIG_UNICODE
-	struct inode *parent = d->inode;
-	struct f2fs_sb_info *sbi = F2FS_I_SB(parent);
-	struct qstr entry;
-#endif
-
-	if (de->hash_code != namehash)
-		return false;
+	struct fscrypt_name f;
 
 #ifdef CONFIG_UNICODE
-	entry.name = d->filename[bit_pos];
-	entry.len = de->name_len;
+	if (fname->cf_name.name) {
+		struct qstr cf = FSTR_TO_QSTR(&fname->cf_name);
 
-	if (sbi->s_encoding && IS_CASEFOLDED(parent)) {
-		if (cf_str->name) {
-			struct qstr cf = {.name = cf_str->name,
-					  .len = cf_str->len};
-			return f2fs_match_ci_name(parent, &cf, &entry, true);
-		}
-		return f2fs_match_ci_name(parent, fname->usr_fname, &entry,
-					  false);
+		return f2fs_match_ci_name(dir, &cf, de_name, de_name_len);
 	}
 #endif
-	if (fscrypt_match_name(fname, d->filename[bit_pos],
-				le16_to_cpu(de->name_len)))
-		return true;
-	return false;
+	f.usr_fname = fname->usr_fname;
+	f.disk_name = fname->disk_name;
+#ifdef CONFIG_FS_ENCRYPTION
+	f.crypto_buf = fname->crypto_buf;
+#endif
+	return fscrypt_match_name(&f, de_name, de_name_len);
 }
 
-struct f2fs_dir_entry *f2fs_find_target_dentry(struct fscrypt_name *fname,
-			f2fs_hash_t namehash, int *max_slots,
-			struct f2fs_dentry_ptr *d)
+struct f2fs_dir_entry *f2fs_find_target_dentry(const struct f2fs_dentry_ptr *d,
+			const struct f2fs_filename *fname, int *max_slots)
 {
 	struct f2fs_dir_entry *de;
-	struct fscrypt_str cf_str = { .name = NULL, .len = 0 };
 	unsigned long bit_pos = 0;
 	int max_len = 0;
-
-#ifdef CONFIG_UNICODE
-	f2fs_fname_setup_ci_filename(d->inode, fname->usr_fname, &cf_str);
-#endif
+	int res = 0;
 
 	if (max_slots)
 		*max_slots = 0;
@@ -221,8 +300,15 @@ struct f2fs_dir_entry *f2fs_find_target_dentry(struct fscrypt_name *fname,
 			continue;
 		}
 
-		if (f2fs_match_name(d, de, fname, &cf_str, bit_pos, namehash))
-			goto found;
+		if (de->hash_code == fname->hash) {
+			res = f2fs_match_name(d->inode, fname,
+					      d->filename[bit_pos],
+					      le16_to_cpu(de->name_len));
+			if (res < 0)
+				return ERR_PTR(res);
+			if (res)
+				goto found;
+		}
 
 		if (max_slots && max_len > *max_slots)
 			*max_slots = max_len;
@@ -235,33 +321,27 @@ struct f2fs_dir_entry *f2fs_find_target_dentry(struct fscrypt_name *fname,
 found:
 	if (max_slots && max_len > *max_slots)
 		*max_slots = max_len;
-
-#ifdef CONFIG_UNICODE
-	kvfree(cf_str.name);
-#endif
 	return de;
 }
 
 static struct f2fs_dir_entry *find_in_level(struct inode *dir,
 					unsigned int level,
-					struct fscrypt_name *fname,
+					const struct f2fs_filename *fname,
 					struct page **res_page)
 {
-	struct qstr name = FSTR_TO_QSTR(&fname->disk_name);
-	int s = GET_DENTRY_SLOTS(name.len);
+	int s = GET_DENTRY_SLOTS(fname->disk_name.len);
 	unsigned int nbucket, nblock;
 	unsigned int bidx, end_block;
 	struct page *dentry_page;
 	struct f2fs_dir_entry *de = NULL;
 	bool room = false;
 	int max_slots;
-	f2fs_hash_t namehash = f2fs_dentry_hash(dir, &name, fname);
 
 	nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level);
 	nblock = bucket_blocks(level);
 
 	bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level,
-					le32_to_cpu(namehash) % nbucket);
+			       le32_to_cpu(fname->hash) % nbucket);
 	end_block = bidx + nblock;
 
 	for (; bidx < end_block; bidx++) {
@@ -277,18 +357,23 @@ static struct f2fs_dir_entry *find_in_level(struct inode *dir,
 			}
 		}
 
-		de = find_in_block(dir, dentry_page, fname, namehash,
-							&max_slots, res_page);
-		if (de)
+		de = find_in_block(dir, dentry_page, fname, &max_slots);
+		if (IS_ERR(de)) {
+			*res_page = ERR_CAST(de);
+			de = NULL;
 			break;
+		} else if (de) {
+			*res_page = dentry_page;
+			break;
+		}
 
 		if (max_slots >= s)
 			room = true;
 		f2fs_put_page(dentry_page, 0);
 	}
 
-	if (!de && room && F2FS_I(dir)->chash != namehash) {
-		F2FS_I(dir)->chash = namehash;
+	if (!de && room && F2FS_I(dir)->chash != fname->hash) {
+		F2FS_I(dir)->chash = fname->hash;
 		F2FS_I(dir)->clevel = level;
 	}
 
@@ -296,7 +381,8 @@ static struct f2fs_dir_entry *find_in_level(struct inode *dir,
 }
 
 struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
-			struct fscrypt_name *fname, struct page **res_page)
+					 const struct f2fs_filename *fname,
+					 struct page **res_page)
 {
 	unsigned long npages = dir_blocks(dir);
 	struct f2fs_dir_entry *de = NULL;
@@ -343,18 +429,10 @@ struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
 			const struct qstr *child, struct page **res_page)
 {
 	struct f2fs_dir_entry *de = NULL;
-	struct fscrypt_name fname;
+	struct f2fs_filename fname;
 	int err;
 
-#ifdef CONFIG_UNICODE
-	if (f2fs_has_strict_mode(F2FS_I_SB(dir)) && IS_CASEFOLDED(dir) &&
-			utf8_validate(F2FS_I_SB(dir)->s_encoding, child)) {
-		*res_page = ERR_PTR(-EINVAL);
-		return NULL;
-	}
-#endif
-
-	err = fscrypt_setup_filename(dir, child, 1, &fname);
+	err = f2fs_setup_filename(dir, child, 1, &fname);
 	if (err) {
 		if (err == -ENOENT)
 			*res_page = NULL;
@@ -365,7 +443,7 @@ struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
 
 	de = __f2fs_find_entry(dir, &fname, res_page);
 
-	fscrypt_free_filename(&fname);
+	f2fs_free_filename(&fname);
 	return de;
 }
 
@@ -406,24 +484,47 @@ void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
 	f2fs_put_page(page, 1);
 }
 
-static void init_dent_inode(const struct qstr *name, struct page *ipage)
+static void init_dent_inode(struct inode *dir, struct inode *inode,
+			    const struct f2fs_filename *fname,
+			    struct page *ipage)
 {
 	struct f2fs_inode *ri;
 
+	if (!fname) /* tmpfile case? */
+		return;
+
 	f2fs_wait_on_page_writeback(ipage, NODE, true, true);
 
 	/* copy name info. to this inode page */
 	ri = F2FS_INODE(ipage);
-	ri->i_namelen = cpu_to_le32(name->len);
-	memcpy(ri->i_name, name->name, name->len);
+	ri->i_namelen = cpu_to_le32(fname->disk_name.len);
+	memcpy(ri->i_name, fname->disk_name.name, fname->disk_name.len);
+	if (IS_ENCRYPTED(dir)) {
+		file_set_enc_name(inode);
+		/*
+		 * Roll-forward recovery doesn't have encryption keys available,
+		 * so it can't compute the dirhash for encrypted+casefolded
+		 * filenames.  Append it to i_name if possible.  Else, disable
+		 * roll-forward recovery of the dentry (i.e., make fsync'ing the
+		 * file force a checkpoint) by setting LOST_PINO.
+		 */
+		if (IS_CASEFOLDED(dir)) {
+			if (fname->disk_name.len + sizeof(f2fs_hash_t) <=
+			    F2FS_NAME_LEN)
+				put_unaligned(fname->hash, (f2fs_hash_t *)
+					&ri->i_name[fname->disk_name.len]);
+			else
+				file_lost_pino(inode);
+		}
+	}
 	set_page_dirty(ipage);
 }
 
 void f2fs_do_make_empty_dir(struct inode *inode, struct inode *parent,
 					struct f2fs_dentry_ptr *d)
 {
-	struct qstr dot = QSTR_INIT(".", 1);
-	struct qstr dotdot = QSTR_INIT("..", 2);
+	struct fscrypt_str dot = FSTR_INIT(".", 1);
+	struct fscrypt_str dotdot = FSTR_INIT("..", 2);
 
 	/* update dirent of "." */
 	f2fs_update_dentry(inode->i_ino, inode->i_mode, d, &dot, 0, 0);
@@ -457,11 +558,9 @@ static int make_empty_dir(struct inode *inode,
 }
 
 struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
-			const struct qstr *new_name, const struct qstr *orig_name,
-			struct page *dpage)
+			const struct f2fs_filename *fname, struct page *dpage)
 {
 	struct page *page;
-	int dummy_encrypt = DUMMY_ENCRYPTION_ENABLED(F2FS_I_SB(dir));
 	int err;
 
 	if (is_inode_flag_set(inode, FI_NEW_INODE)) {
@@ -484,13 +583,13 @@ struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
 		if (err)
 			goto put_error;
 
-		err = f2fs_init_security(inode, dir, orig_name, page);
+		err = f2fs_init_security(inode, dir,
+					 fname ? fname->usr_fname : NULL, page);
 		if (err)
 			goto put_error;
 
-		if ((IS_ENCRYPTED(dir) || dummy_encrypt) &&
-					f2fs_may_encrypt(inode)) {
-			err = fscrypt_inherit_context(dir, inode, page, false);
+		if (IS_ENCRYPTED(inode)) {
+			err = fscrypt_set_context(inode, page);
 			if (err)
 				goto put_error;
 		}
@@ -500,11 +599,7 @@ struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
 			return page;
 	}
 
-	if (new_name) {
-		init_dent_inode(new_name, page);
-		if (IS_ENCRYPTED(dir))
-			file_set_enc_name(inode);
-	}
+	init_dent_inode(dir, inode, fname, page);
 
 	/*
 	 * This file should be checkpointed during fsync.
@@ -568,9 +663,23 @@ int f2fs_room_for_filename(const void *bitmap, int slots, int max_slots)
 	goto next;
 }
 
+bool f2fs_has_enough_room(struct inode *dir, struct page *ipage,
+			  const struct f2fs_filename *fname)
+{
+	struct f2fs_dentry_ptr d;
+	unsigned int bit_pos;
+	int slots = GET_DENTRY_SLOTS(fname->disk_name.len);
+
+	make_dentry_ptr_inline(dir, &d, inline_data_addr(dir, ipage));
+
+	bit_pos = f2fs_room_for_filename(d.bitmap, slots, d.max);
+
+	return bit_pos < d.max;
+}
+
 void f2fs_update_dentry(nid_t ino, umode_t mode, struct f2fs_dentry_ptr *d,
-				const struct qstr *name, f2fs_hash_t name_hash,
-				unsigned int bit_pos)
+			const struct fscrypt_str *name, f2fs_hash_t name_hash,
+			unsigned int bit_pos)
 {
 	struct f2fs_dir_entry *de;
 	int slots = GET_DENTRY_SLOTS(name->len);
@@ -590,15 +699,13 @@ void f2fs_update_dentry(nid_t ino, umode_t mode, struct f2fs_dentry_ptr *d,
 	}
 }
 
-int f2fs_add_regular_entry(struct inode *dir, const struct qstr *new_name,
-				const struct qstr *orig_name,
-				struct inode *inode, nid_t ino, umode_t mode)
+int f2fs_add_regular_entry(struct inode *dir, const struct f2fs_filename *fname,
+			   struct inode *inode, nid_t ino, umode_t mode)
 {
 	unsigned int bit_pos;
 	unsigned int level;
 	unsigned int current_depth;
 	unsigned long bidx, block;
-	f2fs_hash_t dentry_hash;
 	unsigned int nbucket, nblock;
 	struct page *dentry_page = NULL;
 	struct f2fs_dentry_block *dentry_blk = NULL;
@@ -607,18 +714,17 @@ int f2fs_add_regular_entry(struct inode *dir, const struct qstr *new_name,
 	int slots, err = 0;
 
 	level = 0;
-	slots = GET_DENTRY_SLOTS(new_name->len);
-	dentry_hash = f2fs_dentry_hash(dir, new_name, NULL);
+	slots = GET_DENTRY_SLOTS(fname->disk_name.len);
 
 	current_depth = F2FS_I(dir)->i_current_depth;
-	if (F2FS_I(dir)->chash == dentry_hash) {
+	if (F2FS_I(dir)->chash == fname->hash) {
 		level = F2FS_I(dir)->clevel;
 		F2FS_I(dir)->chash = 0;
 	}
 
 start:
 	if (time_to_inject(F2FS_I_SB(dir), FAULT_DIR_DEPTH)) {
-		f2fs_show_injection_info(FAULT_DIR_DEPTH);
+		f2fs_show_injection_info(F2FS_I_SB(dir), FAULT_DIR_DEPTH);
 		return -ENOSPC;
 	}
 
@@ -633,7 +739,7 @@ int f2fs_add_regular_entry(struct inode *dir, const struct qstr *new_name,
 	nblock = bucket_blocks(level);
 
 	bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level,
-				(le32_to_cpu(dentry_hash) % nbucket));
+				(le32_to_cpu(fname->hash) % nbucket));
 
 	for (block = bidx; block <= (bidx + nblock - 1); block++) {
 		dentry_page = f2fs_get_new_data_page(dir, NULL, block, true);
@@ -657,8 +763,7 @@ int f2fs_add_regular_entry(struct inode *dir, const struct qstr *new_name,
 
 	if (inode) {
 		down_write(&F2FS_I(inode)->i_sem);
-		page = f2fs_init_inode_metadata(inode, dir, new_name,
-						orig_name, NULL);
+		page = f2fs_init_inode_metadata(inode, dir, fname, NULL);
 		if (IS_ERR(page)) {
 			err = PTR_ERR(page);
 			goto fail;
@@ -666,7 +771,8 @@ int f2fs_add_regular_entry(struct inode *dir, const struct qstr *new_name,
 	}
 
 	make_dentry_ptr_block(NULL, &d, dentry_blk);
-	f2fs_update_dentry(ino, mode, &d, new_name, dentry_hash, bit_pos);
+	f2fs_update_dentry(ino, mode, &d, &fname->disk_name, fname->hash,
+			   bit_pos);
 
 	set_page_dirty(dentry_page);
 
@@ -690,21 +796,15 @@ int f2fs_add_regular_entry(struct inode *dir, const struct qstr *new_name,
 	return err;
 }
 
-int f2fs_add_dentry(struct inode *dir, struct fscrypt_name *fname,
-				struct inode *inode, nid_t ino, umode_t mode)
+int f2fs_add_dentry(struct inode *dir, const struct f2fs_filename *fname,
+		    struct inode *inode, nid_t ino, umode_t mode)
 {
-	struct qstr new_name;
 	int err = -EAGAIN;
 
-	new_name.name = fname_name(fname);
-	new_name.len = fname_len(fname);
-
 	if (f2fs_has_inline_dentry(dir))
-		err = f2fs_add_inline_entry(dir, &new_name, fname->usr_fname,
-							inode, ino, mode);
+		err = f2fs_add_inline_entry(dir, fname, inode, ino, mode);
 	if (err == -EAGAIN)
-		err = f2fs_add_regular_entry(dir, &new_name, fname->usr_fname,
-							inode, ino, mode);
+		err = f2fs_add_regular_entry(dir, fname, inode, ino, mode);
 
 	f2fs_update_time(F2FS_I_SB(dir), REQ_TIME);
 	return err;
@@ -717,17 +817,17 @@ int f2fs_add_dentry(struct inode *dir, struct fscrypt_name *fname,
 int f2fs_do_add_link(struct inode *dir, const struct qstr *name,
 				struct inode *inode, nid_t ino, umode_t mode)
 {
-	struct fscrypt_name fname;
+	struct f2fs_filename fname;
 	struct page *page = NULL;
 	struct f2fs_dir_entry *de = NULL;
 	int err;
 
-	err = fscrypt_setup_filename(dir, name, 0, &fname);
+	err = f2fs_setup_filename(dir, name, 0, &fname);
 	if (err)
 		return err;
 
 	/*
-	 * An immature stakable filesystem shows a race condition between lookup
+	 * An immature stackable filesystem shows a race condition between lookup
 	 * and create. If we have same task when doing lookup and create, it's
 	 * definitely fine as expected by VFS normally. Otherwise, let's just
 	 * verify on-disk dentry one more time, which guarantees filesystem
@@ -745,7 +845,7 @@ int f2fs_do_add_link(struct inode *dir, const struct qstr *name,
 	} else {
 		err = f2fs_add_dentry(dir, &fname, inode, ino, mode);
 	}
-	fscrypt_free_filename(&fname);
+	f2fs_free_filename(&fname);
 	return err;
 }
 
@@ -755,7 +855,7 @@ int f2fs_do_tmpfile(struct inode *inode, struct inode *dir)
 	int err = 0;
 
 	down_write(&F2FS_I(inode)->i_sem);
-	page = f2fs_init_inode_metadata(inode, dir, NULL, NULL, NULL);
+	page = f2fs_init_inode_metadata(inode, dir, NULL, NULL);
 	if (IS_ERR(page)) {
 		err = PTR_ERR(page);
 		goto fail;
@@ -826,12 +926,6 @@ void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,
 			0);
 	set_page_dirty(page);
 
-	dir->i_ctime = dir->i_mtime = current_time(dir);
-	f2fs_mark_inode_dirty_sync(dir, false);
-
-	if (inode)
-		f2fs_drop_nlink(dir, inode);
-
 	if (bit_pos == NR_DENTRY_IN_BLOCK &&
 		!f2fs_truncate_hole(dir, page->index, page->index + 1)) {
 		f2fs_clear_page_cache_dirty_tag(page);
@@ -843,6 +937,12 @@ void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,
 		f2fs_remove_dirty_inode(dir);
 	}
 	f2fs_put_page(page, 1);
+
+	dir->i_ctime = dir->i_mtime = current_time(dir);
+	f2fs_mark_inode_dirty_sync(dir, false);
+
+	if (inode)
+		f2fs_drop_nlink(dir, inode);
 }
 
 bool f2fs_empty_dir(struct inode *dir)
@@ -909,8 +1009,9 @@ int f2fs_fill_dentries(struct dir_context *ctx, struct f2fs_dentry_ptr *d,
 			bit_pos++;
 			ctx->pos = start_pos + bit_pos;
 			printk_ratelimited(
-				"%s, invalid namelen(0), ino:%u, run fsck to fix.",
-				KERN_WARNING, le32_to_cpu(de->ino));
+				"%sF2FS-fs (%s): invalid namelen(0), ino:%u, run fsck to fix.",
+				KERN_WARNING, sbi->sb->s_id,
+				le32_to_cpu(de->ino));
 			set_sbi_flag(sbi, SBI_NEED_FSCK);
 			continue;
 		}
@@ -975,11 +1076,11 @@ static int f2fs_readdir(struct file *file, struct dir_context *ctx)
 	int err = 0;
 
 	if (IS_ENCRYPTED(inode)) {
-		err = fscrypt_get_encryption_info(inode);
-		if (err && err != -ENOKEY)
+		err = fscrypt_prepare_readdir(inode);
+		if (err)
 			goto out;
 
-		err = fscrypt_fname_alloc_buffer(inode, F2FS_NAME_LEN, &fstr);
+		err = fscrypt_fname_alloc_buffer(F2FS_NAME_LEN, &fstr);
 		if (err < 0)
 			goto out;
 	}
@@ -1034,95 +1135,13 @@ static int f2fs_readdir(struct file *file, struct dir_context *ctx)
 	return err < 0 ? err : 0;
 }
 
-static int f2fs_dir_open(struct inode *inode, struct file *filp)
-{
-	if (IS_ENCRYPTED(inode))
-		return fscrypt_get_encryption_info(inode) ? -EACCES : 0;
-	return 0;
-}
-
 const struct file_operations f2fs_dir_operations = {
 	.llseek		= generic_file_llseek,
 	.read		= generic_read_dir,
 	.iterate_shared	= f2fs_readdir,
 	.fsync		= f2fs_sync_file,
-	.open		= f2fs_dir_open,
 	.unlocked_ioctl	= f2fs_ioctl,
 #ifdef CONFIG_COMPAT
 	.compat_ioctl   = f2fs_compat_ioctl,
 #endif
 };
-
-#ifdef CONFIG_UNICODE
-static int f2fs_d_compare(const struct dentry *dentry, unsigned int len,
-			  const char *str, const struct qstr *name)
-{
-	const struct dentry *parent = READ_ONCE(dentry->d_parent);
-	const struct inode *dir = READ_ONCE(parent->d_inode);
-	const struct f2fs_sb_info *sbi = F2FS_SB(dentry->d_sb);
-	struct qstr entry = QSTR_INIT(str, len);
-	char strbuf[DNAME_INLINE_LEN];
-	int res;
-
-	if (!dir || !IS_CASEFOLDED(dir))
-		goto fallback;
-
-	/*
-	 * If the dentry name is stored in-line, then it may be concurrently
-	 * modified by a rename.  If this happens, the VFS will eventually retry
-	 * the lookup, so it doesn't matter what ->d_compare() returns.
-	 * However, it's unsafe to call utf8_strncasecmp() with an unstable
-	 * string.  Therefore, we have to copy the name into a temporary buffer.
-	 */
-	if (len <= DNAME_INLINE_LEN - 1) {
-		memcpy(strbuf, str, len);
-		strbuf[len] = 0;
-		entry.name = strbuf;
-		/* prevent compiler from optimizing out the temporary buffer */
-		barrier();
-	}
-
-	res = utf8_strncasecmp(sbi->s_encoding, name, &entry);
-	if (res >= 0)
-		return res;
-
-	if (f2fs_has_strict_mode(sbi))
-		return -EINVAL;
-fallback:
-	if (len != name->len)
-		return 1;
-	return !!memcmp(str, name->name, len);
-}
-
-static int f2fs_d_hash(const struct dentry *dentry, struct qstr *str)
-{
-	struct f2fs_sb_info *sbi = F2FS_SB(dentry->d_sb);
-	const struct unicode_map *um = sbi->s_encoding;
-	const struct inode *inode = READ_ONCE(dentry->d_inode);
-	unsigned char *norm;
-	int len, ret = 0;
-
-	if (!inode || !IS_CASEFOLDED(inode))
-		return 0;
-
-	norm = f2fs_kmalloc(sbi, PATH_MAX, GFP_ATOMIC);
-	if (!norm)
-		return -ENOMEM;
-
-	len = utf8_casefold(um, str, norm, PATH_MAX);
-	if (len < 0) {
-		if (f2fs_has_strict_mode(sbi))
-			ret = -EINVAL;
-		goto out;
-	}
-	str->hash = full_name_hash(dentry, norm, len);
-out:
-	kvfree(norm);
-	return ret;
-}
-
-const struct dentry_operations f2fs_dentry_ops = {
-	.d_hash = f2fs_d_hash,
-	.d_compare = f2fs_d_compare,
-};
-#endif
diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
index e600784..3ebf976 100644
--- a/fs/f2fs/extent_cache.c
+++ b/fs/f2fs/extent_cache.c
@@ -58,6 +58,29 @@ struct rb_entry *f2fs_lookup_rb_tree(struct rb_root_cached *root,
 	return re;
 }
 
+struct rb_node **f2fs_lookup_rb_tree_ext(struct f2fs_sb_info *sbi,
+					struct rb_root_cached *root,
+					struct rb_node **parent,
+					unsigned long long key, bool *leftmost)
+{
+	struct rb_node **p = &root->rb_root.rb_node;
+	struct rb_entry *re;
+
+	while (*p) {
+		*parent = *p;
+		re = rb_entry(*parent, struct rb_entry, rb_node);
+
+		if (key < re->key) {
+			p = &(*p)->rb_left;
+		} else {
+			p = &(*p)->rb_right;
+			*leftmost = false;
+		}
+	}
+
+	return p;
+}
+
 struct rb_node **f2fs_lookup_rb_tree_for_insert(struct f2fs_sb_info *sbi,
 				struct rb_root_cached *root,
 				struct rb_node **parent,
@@ -166,7 +189,7 @@ struct rb_entry *f2fs_lookup_rb_tree_ret(struct rb_root_cached *root,
 }
 
 bool f2fs_check_rb_tree_consistence(struct f2fs_sb_info *sbi,
-						struct rb_root_cached *root)
+				struct rb_root_cached *root, bool check_key)
 {
 #ifdef CONFIG_F2FS_CHECK_FS
 	struct rb_node *cur = rb_first_cached(root), *next;
@@ -183,13 +206,23 @@ bool f2fs_check_rb_tree_consistence(struct f2fs_sb_info *sbi,
 		cur_re = rb_entry(cur, struct rb_entry, rb_node);
 		next_re = rb_entry(next, struct rb_entry, rb_node);
 
+		if (check_key) {
+			if (cur_re->key > next_re->key) {
+				f2fs_info(sbi, "inconsistent rbtree, "
+					"cur(%llu) next(%llu)",
+					cur_re->key, next_re->key);
+				return false;
+			}
+			goto next;
+		}
+
 		if (cur_re->ofs + cur_re->len > next_re->ofs) {
 			f2fs_info(sbi, "inconsistent rbtree, cur(%u, %u) next(%u, %u)",
 				  cur_re->ofs, cur_re->len,
 				  next_re->ofs, next_re->len);
 			return false;
 		}
-
+next:
 		cur = next;
 	}
 #endif
@@ -325,9 +358,10 @@ static void __drop_largest_extent(struct extent_tree *et,
 }
 
 /* return true, if inode page is changed */
-static bool __f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_ext)
+static void __f2fs_init_extent_tree(struct inode *inode, struct page *ipage)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	struct f2fs_extent *i_ext = ipage ? &F2FS_INODE(ipage)->i_ext : NULL;
 	struct extent_tree *et;
 	struct extent_node *en;
 	struct extent_info ei;
@@ -335,16 +369,18 @@ static bool __f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_e
 	if (!f2fs_may_extent_tree(inode)) {
 		/* drop largest extent */
 		if (i_ext && i_ext->len) {
+			f2fs_wait_on_page_writeback(ipage, NODE, true, true);
 			i_ext->len = 0;
-			return true;
+			set_page_dirty(ipage);
+			return;
 		}
-		return false;
+		return;
 	}
 
 	et = __grab_extent_tree(inode);
 
 	if (!i_ext || !i_ext->len)
-		return false;
+		return;
 
 	get_extent_info(&ei, i_ext);
 
@@ -360,17 +396,14 @@ static bool __f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_e
 	}
 out:
 	write_unlock(&et->lock);
-	return false;
 }
 
-bool f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_ext)
+void f2fs_init_extent_tree(struct inode *inode, struct page *ipage)
 {
-	bool ret =  __f2fs_init_extent_tree(inode, i_ext);
+	__f2fs_init_extent_tree(inode, ipage);
 
 	if (!F2FS_I(inode)->extent_tree)
 		set_inode_flag(inode, FI_NO_EXTENT);
-
-	return ret;
 }
 
 static bool f2fs_lookup_extent_tree(struct inode *inode, pgoff_t pgofs,
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 4ca3c2a..b3a8fb4 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * fs/f2fs/f2fs.h
  *
@@ -32,10 +32,8 @@
 #else
 #define f2fs_bug_on(sbi, condition)					\
 	do {								\
-		if (unlikely(condition)) {				\
-			WARN_ON(1);					\
+		if (WARN_ON(condition))					\
 			set_sbi_flag(sbi, SBI_NEED_FSCK);		\
-		}							\
 	} while (0)
 #endif
 
@@ -74,7 +72,6 @@ extern const char *f2fs_fault_name[FAULT_MAX];
 /*
  * For mount options
  */
-#define F2FS_MOUNT_BG_GC		0x00000001
 #define F2FS_MOUNT_DISABLE_ROLL_FORWARD	0x00000002
 #define F2FS_MOUNT_DISCARD		0x00000004
 #define F2FS_MOUNT_NOHEAP		0x00000008
@@ -88,11 +85,8 @@ extern const char *f2fs_fault_name[FAULT_MAX];
 #define F2FS_MOUNT_NOBARRIER		0x00000800
 #define F2FS_MOUNT_FASTBOOT		0x00001000
 #define F2FS_MOUNT_EXTENT_CACHE		0x00002000
-#define F2FS_MOUNT_FORCE_FG_GC		0x00004000
 #define F2FS_MOUNT_DATA_FLUSH		0x00008000
 #define F2FS_MOUNT_FAULT_INJECTION	0x00010000
-#define F2FS_MOUNT_ADAPTIVE		0x00020000
-#define F2FS_MOUNT_LFS			0x00040000
 #define F2FS_MOUNT_USRQUOTA		0x00080000
 #define F2FS_MOUNT_GRPQUOTA		0x00100000
 #define F2FS_MOUNT_PRJQUOTA		0x00200000
@@ -101,6 +95,7 @@ extern const char *f2fs_fault_name[FAULT_MAX];
 #define F2FS_MOUNT_RESERVE_ROOT		0x01000000
 #define F2FS_MOUNT_DISABLE_CHECKPOINT	0x02000000
 #define F2FS_MOUNT_NORECOVERY		0x04000000
+#define F2FS_MOUNT_ATGC			0x08000000
 
 #define F2FS_OPTION(sbi)	((sbi)->mount_opt)
 #define clear_opt(sbi, option)	(F2FS_OPTION(sbi).opt &= ~F2FS_MOUNT_##option)
@@ -117,6 +112,8 @@ typedef u32 block_t;	/*
 			 */
 typedef u32 nid_t;
 
+#define COMPRESS_EXT_NUM		16
+
 struct f2fs_mount_info {
 	unsigned int opt;
 	int write_io_size_bits;		/* Write IO size bits */
@@ -137,11 +134,21 @@ struct f2fs_mount_info {
 	int whint_mode;
 	int alloc_mode;			/* segment allocation policy */
 	int fsync_mode;			/* fsync policy */
-	bool test_dummy_encryption;	/* test dummy encryption */
+	int fs_mode;			/* fs mode: LFS or ADAPTIVE */
+	int bggc_mode;			/* bggc mode: off, on or sync */
+	struct fscrypt_dummy_policy dummy_enc_policy; /* test dummy encryption */
 	block_t unusable_cap_perc;	/* percentage for cap */
 	block_t unusable_cap;		/* Amount of space allowed to be
 					 * unusable when disabling checkpoint
 					 */
+
+	/* For compression */
+	unsigned char compress_algorithm;	/* algorithm type */
+	unsigned char compress_log_size;	/* cluster log size */
+	bool compress_chksum;			/* compressed data chksum */
+	unsigned char compress_ext_cnt;		/* extension count */
+	int compress_mode;			/* compression mode */
+	unsigned char extensions[COMPRESS_EXT_NUM][F2FS_EXTENSION_LEN];	/* extensions */
 };
 
 #define F2FS_FEATURE_ENCRYPT		0x0001
@@ -157,6 +164,7 @@ struct f2fs_mount_info {
 #define F2FS_FEATURE_VERITY		0x0400
 #define F2FS_FEATURE_SB_CHKSUM		0x0800
 #define F2FS_FEATURE_CASEFOLD		0x1000
+#define F2FS_FEATURE_COMPRESSION	0x2000
 
 #define __F2FS_HAS_FEATURE(raw_super, mask)				\
 	((raw_super->feature & cpu_to_le32(mask)) != 0)
@@ -187,6 +195,7 @@ enum {
 #define	CP_DISCARD	0x00000010
 #define CP_TRIMMED	0x00000020
 #define CP_PAUSE	0x00000040
+#define CP_RESIZE 	0x00000080
 
 #define MAX_DISCARD_BLOCKS(sbi)		BLKS_PER_SEC(sbi)
 #define DEF_MAX_DISCARD_REQUEST		8	/* issue 8 discards per round */
@@ -324,8 +333,8 @@ struct discard_policy {
 	bool io_aware;			/* issue discard in idle time */
 	bool sync;			/* submit discard with REQ_SYNC flag */
 	bool ordered;			/* issue discard by lba order */
+	bool timeout;			/* discard timeout for put_super */
 	unsigned int granularity;	/* discard granularity */
-	int timeout;			/* discard timeout for put_super */
 };
 
 struct discard_cmd_control {
@@ -392,88 +401,6 @@ static inline bool __has_cursum_space(struct f2fs_journal *journal,
 	return size <= MAX_SIT_JENTRIES(journal);
 }
 
-/*
- * ioctl commands
- */
-#define F2FS_IOC_GETFLAGS		FS_IOC_GETFLAGS
-#define F2FS_IOC_SETFLAGS		FS_IOC_SETFLAGS
-#define F2FS_IOC_GETVERSION		FS_IOC_GETVERSION
-
-#define F2FS_IOCTL_MAGIC		0xf5
-#define F2FS_IOC_START_ATOMIC_WRITE	_IO(F2FS_IOCTL_MAGIC, 1)
-#define F2FS_IOC_COMMIT_ATOMIC_WRITE	_IO(F2FS_IOCTL_MAGIC, 2)
-#define F2FS_IOC_START_VOLATILE_WRITE	_IO(F2FS_IOCTL_MAGIC, 3)
-#define F2FS_IOC_RELEASE_VOLATILE_WRITE	_IO(F2FS_IOCTL_MAGIC, 4)
-#define F2FS_IOC_ABORT_VOLATILE_WRITE	_IO(F2FS_IOCTL_MAGIC, 5)
-#define F2FS_IOC_GARBAGE_COLLECT	_IOW(F2FS_IOCTL_MAGIC, 6, __u32)
-#define F2FS_IOC_WRITE_CHECKPOINT	_IO(F2FS_IOCTL_MAGIC, 7)
-#define F2FS_IOC_DEFRAGMENT		_IOWR(F2FS_IOCTL_MAGIC, 8,	\
-						struct f2fs_defragment)
-#define F2FS_IOC_MOVE_RANGE		_IOWR(F2FS_IOCTL_MAGIC, 9,	\
-						struct f2fs_move_range)
-#define F2FS_IOC_FLUSH_DEVICE		_IOW(F2FS_IOCTL_MAGIC, 10,	\
-						struct f2fs_flush_device)
-#define F2FS_IOC_GARBAGE_COLLECT_RANGE	_IOW(F2FS_IOCTL_MAGIC, 11,	\
-						struct f2fs_gc_range)
-#define F2FS_IOC_GET_FEATURES		_IOR(F2FS_IOCTL_MAGIC, 12, __u32)
-#define F2FS_IOC_SET_PIN_FILE		_IOW(F2FS_IOCTL_MAGIC, 13, __u32)
-#define F2FS_IOC_GET_PIN_FILE		_IOR(F2FS_IOCTL_MAGIC, 14, __u32)
-#define F2FS_IOC_PRECACHE_EXTENTS	_IO(F2FS_IOCTL_MAGIC, 15)
-#define F2FS_IOC_RESIZE_FS		_IOW(F2FS_IOCTL_MAGIC, 16, __u64)
-
-#define F2FS_IOC_GET_VOLUME_NAME	FS_IOC_GETFSLABEL
-#define F2FS_IOC_SET_VOLUME_NAME	FS_IOC_SETFSLABEL
-
-#define F2FS_IOC_SET_ENCRYPTION_POLICY	FS_IOC_SET_ENCRYPTION_POLICY
-#define F2FS_IOC_GET_ENCRYPTION_POLICY	FS_IOC_GET_ENCRYPTION_POLICY
-#define F2FS_IOC_GET_ENCRYPTION_PWSALT	FS_IOC_GET_ENCRYPTION_PWSALT
-
-/*
- * should be same as XFS_IOC_GOINGDOWN.
- * Flags for going down operation used by FS_IOC_GOINGDOWN
- */
-#define F2FS_IOC_SHUTDOWN	_IOR('X', 125, __u32)	/* Shutdown */
-#define F2FS_GOING_DOWN_FULLSYNC	0x0	/* going down with full sync */
-#define F2FS_GOING_DOWN_METASYNC	0x1	/* going down with metadata */
-#define F2FS_GOING_DOWN_NOSYNC		0x2	/* going down */
-#define F2FS_GOING_DOWN_METAFLUSH	0x3	/* going down with meta flush */
-#define F2FS_GOING_DOWN_NEED_FSCK	0x4	/* going down to trigger fsck */
-
-#if defined(__KERNEL__) && defined(CONFIG_COMPAT)
-/*
- * ioctl commands in 32 bit emulation
- */
-#define F2FS_IOC32_GETFLAGS		FS_IOC32_GETFLAGS
-#define F2FS_IOC32_SETFLAGS		FS_IOC32_SETFLAGS
-#define F2FS_IOC32_GETVERSION		FS_IOC32_GETVERSION
-#endif
-
-#define F2FS_IOC_FSGETXATTR		FS_IOC_FSGETXATTR
-#define F2FS_IOC_FSSETXATTR		FS_IOC_FSSETXATTR
-
-struct f2fs_gc_range {
-	u32 sync;
-	u64 start;
-	u64 len;
-};
-
-struct f2fs_defragment {
-	u64 start;
-	u64 len;
-};
-
-struct f2fs_move_range {
-	u32 dst_fd;		/* destination fd */
-	u64 pos_in;		/* start position in src_fd */
-	u64 pos_out;		/* start position in dst_fd */
-	u64 len;		/* size to move */
-};
-
-struct f2fs_flush_device {
-	u32 dev_num;		/* device number to flush */
-	u32 segments;		/* # of segments to flush */
-};
-
 /* for inline stuff */
 #define DEF_INLINE_RESERVED_SIZE	1
 static inline int get_extra_isize(struct inode *inode);
@@ -498,6 +425,44 @@ static inline int get_inline_xattr_addrs(struct inode *inode);
  * For INODE and NODE manager
  */
 /* for directory operations */
+
+struct f2fs_filename {
+	/*
+	 * The filename the user specified.  This is NULL for some
+	 * filesystem-internal operations, e.g. converting an inline directory
+	 * to a non-inline one, or roll-forward recovering an encrypted dentry.
+	 */
+	const struct qstr *usr_fname;
+
+	/*
+	 * The on-disk filename.  For encrypted directories, this is encrypted.
+	 * This may be NULL for lookups in an encrypted dir without the key.
+	 */
+	struct fscrypt_str disk_name;
+
+	/* The dirhash of this filename */
+	f2fs_hash_t hash;
+
+#ifdef CONFIG_FS_ENCRYPTION
+	/*
+	 * For lookups in encrypted directories: either the buffer backing
+	 * disk_name, or a buffer that holds the decoded no-key name.
+	 */
+	struct fscrypt_str crypto_buf;
+#endif
+#ifdef CONFIG_UNICODE
+	/*
+	 * For casefolded directories: the casefolded name, but it's left NULL
+	 * if the original name is not valid Unicode, if the directory is both
+	 * casefolded and encrypted and its encryption key is unavailable, or if
+	 * the filesystem is doing an internal operation where usr_fname is also
+	 * NULL.  In all these cases we fall back to treating the name as an
+	 * opaque byte sequence.
+	 */
+	struct fscrypt_str cf_name;
+#endif
+};
+
 struct f2fs_dentry_ptr {
 	struct inode *inode;
 	void *bitmap;
@@ -552,6 +517,9 @@ enum {
 
 #define DEFAULT_RETRY_IO_COUNT	8	/* maximum retry read IO count */
 
+/* congestion wait timeout value, default: 20ms */
+#define	DEFAULT_IO_TIMEOUT	(msecs_to_jiffies(20))
+
 /* maximum retry quota flush count */
 #define DEFAULT_RETRY_QUOTA_FLUSH_COUNT		8
 
@@ -567,8 +535,13 @@ enum {
 
 struct rb_entry {
 	struct rb_node rb_node;		/* rb node located in rb-tree */
-	unsigned int ofs;		/* start offset of the entry */
-	unsigned int len;		/* length of the entry */
+	union {
+		struct {
+			unsigned int ofs;	/* start offset of the entry */
+			unsigned int len;	/* length of the entry */
+		};
+		unsigned long long key;		/* 64-bits key */
+	} __packed;
 };
 
 struct extent_info {
@@ -668,6 +641,46 @@ enum {
 	MAX_GC_FAILURE
 };
 
+/* used for f2fs_inode_info->flags */
+enum {
+	FI_NEW_INODE,		/* indicate newly allocated inode */
+	FI_DIRTY_INODE,		/* indicate inode is dirty or not */
+	FI_AUTO_RECOVER,	/* indicate inode is recoverable */
+	FI_DIRTY_DIR,		/* indicate directory has dirty pages */
+	FI_INC_LINK,		/* need to increment i_nlink */
+	FI_ACL_MODE,		/* indicate acl mode */
+	FI_NO_ALLOC,		/* should not allocate any blocks */
+	FI_FREE_NID,		/* free allocated nide */
+	FI_NO_EXTENT,		/* not to use the extent cache */
+	FI_INLINE_XATTR,	/* used for inline xattr */
+	FI_INLINE_DATA,		/* used for inline data*/
+	FI_INLINE_DENTRY,	/* used for inline dentry */
+	FI_APPEND_WRITE,	/* inode has appended data */
+	FI_UPDATE_WRITE,	/* inode has in-place-update data */
+	FI_NEED_IPU,		/* used for ipu per file */
+	FI_ATOMIC_FILE,		/* indicate atomic file */
+	FI_ATOMIC_COMMIT,	/* indicate the state of atomical committing */
+	FI_VOLATILE_FILE,	/* indicate volatile file */
+	FI_FIRST_BLOCK_WRITTEN,	/* indicate #0 data block was written */
+	FI_DROP_CACHE,		/* drop dirty page cache */
+	FI_DATA_EXIST,		/* indicate data exists */
+	FI_INLINE_DOTS,		/* indicate inline dot dentries */
+	FI_DO_DEFRAG,		/* indicate defragment is running */
+	FI_DIRTY_FILE,		/* indicate regular/symlink has dirty pages */
+	FI_NO_PREALLOC,		/* indicate skipped preallocated blocks */
+	FI_HOT_DATA,		/* indicate file is hot */
+	FI_EXTRA_ATTR,		/* indicate file has extra attribute */
+	FI_PROJ_INHERIT,	/* indicate file inherits projectid */
+	FI_PIN_FILE,		/* indicate file should not be gced */
+	FI_ATOMIC_REVOKE_REQUEST, /* request to drop atomic data */
+	FI_VERITY_IN_PROGRESS,	/* building fs-verity Merkle tree */
+	FI_COMPRESSED_FILE,	/* indicate file's data can be compressed */
+	FI_COMPRESS_CORRUPT,	/* indicate compressed cluster is corrupted */
+	FI_MMAP_FILE,		/* indicate file was mmapped */
+	FI_ENABLE_COMPRESS,	/* enable compression in "user" compression mode */
+	FI_MAX,			/* max flag, never be used */
+};
+
 struct f2fs_inode_info {
 	struct inode vfs_inode;		/* serve a vfs inode */
 	unsigned long i_flags;		/* keep an inode flags for ioctl */
@@ -680,7 +693,7 @@ struct f2fs_inode_info {
 	umode_t i_acl_mode;		/* keep file acl mode temporarily */
 
 	/* Use below internally in f2fs*/
-	unsigned long flags;		/* use to pass per-file flags */
+	unsigned long flags[BITS_TO_LONGS(FI_MAX)];	/* use to pass per-file flags */
 	struct rw_semaphore i_sem;	/* protect fi info */
 	atomic_t dirty_pages;		/* # of dirty pages */
 	f2fs_hash_t chash;		/* hash value of given file name */
@@ -689,6 +702,7 @@ struct f2fs_inode_info {
 	struct task_struct *cp_task;	/* separate cp/wb IO stats*/
 	nid_t i_xattr_nid;		/* node id that contains xattrs */
 	loff_t	last_disk_size;		/* lastly written file size */
+	spinlock_t i_size_lock;		/* protect last_disk_size */
 
 #ifdef CONFIG_QUOTA
 	struct dquot *i_dquot[MAXQUOTAS];
@@ -702,6 +716,7 @@ struct f2fs_inode_info {
 	struct list_head inmem_pages;	/* inmemory pages managed by f2fs */
 	struct task_struct *inmem_task;	/* store inmemory task */
 	struct mutex inmem_lock;	/* lock for inmemory pages */
+	pgoff_t ra_offset;		/* ongoing readahead offset */
 	struct extent_tree *extent_tree;	/* cached extent_tree entry */
 
 	/* avoid racing between foreground op and gc */
@@ -714,6 +729,13 @@ struct f2fs_inode_info {
 	int i_inline_xattr_size;	/* inline xattr size */
 	struct timespec64 i_crtime;	/* inode creation time */
 	struct timespec64 i_disk_time[4];/* inode disk times */
+
+	/* for file compress */
+	atomic_t i_compr_blocks;		/* # of compressed blocks */
+	unsigned char i_compress_algorithm;	/* algorithm type */
+	unsigned char i_log_cluster_size;	/* log of cluster size */
+	unsigned short i_compress_flag;		/* compress flag */
+	unsigned int i_cluster_size;		/* cluster size */
 };
 
 static inline void get_extent_info(struct extent_info *ext,
@@ -888,7 +910,9 @@ static inline void set_new_dnode(struct dnode_of_data *dn, struct inode *inode,
  */
 #define	NR_CURSEG_DATA_TYPE	(3)
 #define NR_CURSEG_NODE_TYPE	(3)
-#define NR_CURSEG_TYPE	(NR_CURSEG_DATA_TYPE + NR_CURSEG_NODE_TYPE)
+#define NR_CURSEG_INMEM_TYPE	(2)
+#define NR_CURSEG_PERSIST_TYPE	(NR_CURSEG_DATA_TYPE + NR_CURSEG_NODE_TYPE)
+#define NR_CURSEG_TYPE		(NR_CURSEG_INMEM_TYPE + NR_CURSEG_PERSIST_TYPE)
 
 enum {
 	CURSEG_HOT_DATA	= 0,	/* directory entry blocks */
@@ -897,7 +921,11 @@ enum {
 	CURSEG_HOT_NODE,	/* direct node blocks of directory files */
 	CURSEG_WARM_NODE,	/* direct node blocks of normal files */
 	CURSEG_COLD_NODE,	/* indirect node blocks */
-	NO_CHECK_TYPE,
+	NR_PERSISTENT_LOG,	/* number of persistent log */
+	CURSEG_COLD_DATA_PINNED = NR_PERSISTENT_LOG,
+				/* pinned file that needs consecutive block address */
+	CURSEG_ALL_DATA_ATGC,	/* SSR alloctor in hot/warm/cold data area */
+	NO_CHECK_TYPE,		/* number of persistent & inmem log */
 };
 
 struct flush_cmd {
@@ -1025,6 +1053,7 @@ enum need_lock_type {
 enum cp_reason_type {
 	CP_NO_NEEDED,
 	CP_NON_REGULAR,
+	CP_COMPRESSED,
 	CP_HARDLINK,
 	CP_SB_NEED_CP,
 	CP_WRONG_PINO,
@@ -1036,8 +1065,9 @@ enum cp_reason_type {
 };
 
 enum iostat_type {
-	APP_DIRECT_IO,			/* app direct IOs */
-	APP_BUFFERED_IO,		/* app buffered IOs */
+	/* WRITE IO */
+	APP_DIRECT_IO,			/* app direct write IOs */
+	APP_BUFFERED_IO,		/* app buffered write IOs */
 	APP_WRITE_IO,			/* app write IOs */
 	APP_MAPPED_IO,			/* app mapped IOs */
 	FS_DATA_IO,			/* data IOs from kworker/fsync/reclaimer */
@@ -1048,6 +1078,19 @@ enum iostat_type {
 	FS_CP_DATA_IO,			/* data IOs from checkpoint */
 	FS_CP_NODE_IO,			/* node IOs from checkpoint */
 	FS_CP_META_IO,			/* meta IOs from checkpoint */
+
+	/* READ IO */
+	APP_DIRECT_READ_IO,		/* app direct read IOs */
+	APP_BUFFERED_READ_IO,		/* app buffered read IOs */
+	APP_READ_IO,			/* app read IOs */
+	APP_MAPPED_READ_IO,		/* app mapped read IOs */
+	FS_DATA_READ_IO,		/* data read IOs */
+	FS_GDATA_READ_IO,		/* data read IOs from background gc */
+	FS_CDATA_READ_IO,		/* compressed data read IOs */
+	FS_NODE_READ_IO,		/* node read IOs */
+	FS_META_READ_IO,		/* meta read IOs */
+
+	/* other */
 	FS_DISCARD,			/* discard */
 	NR_IO_TYPE,
 };
@@ -1063,12 +1106,15 @@ struct f2fs_io_info {
 	block_t old_blkaddr;	/* old block address before Cow */
 	struct page *page;	/* page to be written */
 	struct page *encrypted_page;	/* encrypted page */
+	struct page *compressed_page;	/* compressed page */
 	struct list_head list;		/* serialize IOs */
 	bool submitted;		/* indicate IO submission */
 	int need_lock;		/* indicate we need to lock cp_rwsem */
 	bool in_list;		/* indicate fio is in io_list */
 	bool is_por;		/* indicate IO is from recovery or not */
 	bool retry;		/* need to reallocate block address */
+	int compr_blocks;	/* # of compressed block addresses */
+	bool encrypted;		/* indicate file is encrypted */
 	enum iostat_type io_type;	/* io type */
 	struct writeback_control *io_wbc; /* writeback control */
 	struct bio **bio;		/* bio for ipu */
@@ -1076,6 +1122,11 @@ struct f2fs_io_info {
 	unsigned char version;		/* version of the node */
 };
 
+struct bio_entry {
+	struct bio *bio;
+	struct list_head list;
+};
+
 #define is_read_io(rw) ((rw) == READ)
 struct f2fs_bio_info {
 	struct f2fs_sb_info *sbi;	/* f2fs superblock */
@@ -1085,6 +1136,8 @@ struct f2fs_bio_info {
 	struct rw_semaphore io_rwsem;	/* blocking op for bio */
 	spinlock_t io_lock;		/* serialize DATA/NODE IOs */
 	struct list_head io_list;	/* track fios */
+	struct list_head bio_list;	/* bio entry list head */
+	struct rw_semaphore bio_list_lock;	/* lock to protect bio entry list */
 };
 
 #define FDEV(i)				(sbi->devs[i])
@@ -1098,6 +1151,7 @@ struct f2fs_dev_info {
 #ifdef CONFIG_BLK_DEV_ZONED
 	unsigned int nr_blkz;		/* Total number of zones */
 	unsigned long *blkz_seq;	/* Bitmap indicating sequential zones */
+	block_t *zone_capacity_blocks;  /* Array of zone capacity in blks */
 #endif
 };
 
@@ -1117,6 +1171,18 @@ struct inode_management {
 	unsigned long ino_num;			/* number of entries */
 };
 
+/* for GC_AT */
+struct atgc_management {
+	bool atgc_enabled;			/* ATGC is enabled or not */
+	struct rb_root_cached root;		/* root of victim rb-tree */
+	struct list_head victim_list;		/* linked with all victim entries */
+	unsigned int victim_count;		/* victim count in rb-tree */
+	unsigned int candidate_ratio;		/* candidate ratio */
+	unsigned int max_candidate_count;	/* max candidate count */
+	unsigned int age_weight;		/* age weight, vblock_weight = 100 - age_weight */
+	unsigned long long age_threshold;	/* age threshold */
+};
+
 /* For s_flag in struct f2fs_sb_info */
 enum {
 	SBI_IS_DIRTY,				/* dirty flag for checkpoint */
@@ -1149,7 +1215,23 @@ enum {
 	GC_NORMAL,
 	GC_IDLE_CB,
 	GC_IDLE_GREEDY,
-	GC_URGENT,
+	GC_IDLE_AT,
+	GC_URGENT_HIGH,
+	GC_URGENT_LOW,
+};
+
+enum {
+	BGGC_MODE_ON,		/* background gc is on */
+	BGGC_MODE_OFF,		/* background gc is off */
+	BGGC_MODE_SYNC,		/*
+				 * background gc is on, migrating blocks
+				 * like foreground gc
+				 */
+};
+
+enum {
+	FS_MODE_ADAPTIVE,	/* use both lfs/ssr allocation */
+	FS_MODE_LFS,		/* use lfs allocation only */
 };
 
 enum {
@@ -1169,13 +1251,119 @@ enum fsync_mode {
 	FSYNC_MODE_NOBARRIER,	/* fsync behaves nobarrier based on posix */
 };
 
-#ifdef CONFIG_FS_ENCRYPTION
-#define DUMMY_ENCRYPTION_ENABLED(sbi) \
-			(unlikely(F2FS_OPTION(sbi).test_dummy_encryption))
+enum {
+	COMPR_MODE_FS,		/*
+				 * automatically compress compression
+				 * enabled files
+				 */
+	COMPR_MODE_USER,	/*
+				 * automatical compression is disabled.
+				 * user can control the file compression
+				 * using ioctls
+				 */
+};
+
+/*
+ * this value is set in page as a private data which indicate that
+ * the page is atomically written, and it is in inmem_pages list.
+ */
+#define ATOMIC_WRITTEN_PAGE		((unsigned long)-1)
+#define DUMMY_WRITTEN_PAGE		((unsigned long)-2)
+
+#define IS_ATOMIC_WRITTEN_PAGE(page)			\
+		(page_private(page) == ATOMIC_WRITTEN_PAGE)
+#define IS_DUMMY_WRITTEN_PAGE(page)			\
+		(page_private(page) == DUMMY_WRITTEN_PAGE)
+
+#ifdef CONFIG_F2FS_IO_TRACE
+#define IS_IO_TRACED_PAGE(page)			\
+		(page_private(page) > 0 &&		\
+		 page_private(page) < (unsigned long)PID_MAX_LIMIT)
 #else
-#define DUMMY_ENCRYPTION_ENABLED(sbi) (0)
+#define IS_IO_TRACED_PAGE(page) (0)
 #endif
 
+/* For compression */
+enum compress_algorithm_type {
+	COMPRESS_LZO,
+	COMPRESS_LZ4,
+	COMPRESS_ZSTD,
+	COMPRESS_LZORLE,
+	COMPRESS_MAX,
+};
+
+enum compress_flag {
+	COMPRESS_CHKSUM,
+	COMPRESS_MAX_FLAG,
+};
+
+#define COMPRESS_DATA_RESERVED_SIZE		4
+struct compress_data {
+	__le32 clen;			/* compressed data size */
+	__le32 chksum;			/* compressed data chksum */
+	__le32 reserved[COMPRESS_DATA_RESERVED_SIZE];	/* reserved */
+	u8 cdata[];			/* compressed data */
+};
+
+#define COMPRESS_HEADER_SIZE	(sizeof(struct compress_data))
+
+#define F2FS_COMPRESSED_PAGE_MAGIC	0xF5F2C000
+
+/* compress context */
+struct compress_ctx {
+	struct inode *inode;		/* inode the context belong to */
+	pgoff_t cluster_idx;		/* cluster index number */
+	unsigned int cluster_size;	/* page count in cluster */
+	unsigned int log_cluster_size;	/* log of cluster size */
+	struct page **rpages;		/* pages store raw data in cluster */
+	unsigned int nr_rpages;		/* total page number in rpages */
+	struct page **cpages;		/* pages store compressed data in cluster */
+	unsigned int nr_cpages;		/* total page number in cpages */
+	void *rbuf;			/* virtual mapped address on rpages */
+	struct compress_data *cbuf;	/* virtual mapped address on cpages */
+	size_t rlen;			/* valid data length in rbuf */
+	size_t clen;			/* valid data length in cbuf */
+	void *private;			/* payload buffer for specified compression algorithm */
+	void *private2;			/* extra payload buffer */
+};
+
+/* compress context for write IO path */
+struct compress_io_ctx {
+	u32 magic;			/* magic number to indicate page is compressed */
+	struct inode *inode;		/* inode the context belong to */
+	struct page **rpages;		/* pages store raw data in cluster */
+	unsigned int nr_rpages;		/* total page number in rpages */
+	atomic_t pending_pages;		/* in-flight compressed page count */
+};
+
+/* decompress io context for read IO path */
+struct decompress_io_ctx {
+	u32 magic;			/* magic number to indicate page is compressed */
+	struct inode *inode;		/* inode the context belong to */
+	pgoff_t cluster_idx;		/* cluster index number */
+	unsigned int cluster_size;	/* page count in cluster */
+	unsigned int log_cluster_size;	/* log of cluster size */
+	struct page **rpages;		/* pages store raw data in cluster */
+	unsigned int nr_rpages;		/* total page number in rpages */
+	struct page **cpages;		/* pages store compressed data in cluster */
+	unsigned int nr_cpages;		/* total page number in cpages */
+	struct page **tpages;		/* temp pages to pad holes in cluster */
+	void *rbuf;			/* virtual mapped address on rpages */
+	struct compress_data *cbuf;	/* virtual mapped address on cpages */
+	size_t rlen;			/* valid data length in rbuf */
+	size_t clen;			/* valid data length in cbuf */
+	atomic_t pending_pages;		/* in-flight compressed page count */
+	atomic_t verity_pages;		/* in-flight page count for verity */
+	bool failed;			/* indicate IO error during decompression */
+	void *private;			/* payload buffer for specified decompression algorithm */
+	void *private2;			/* extra payload buffer */
+};
+
+#define NULL_CLUSTER			((unsigned int)(~0))
+#define MIN_COMPRESS_LOG_SIZE		2
+#define MAX_COMPRESS_LOG_SIZE		8
+#define MAX_COMPRESS_WINDOW_SIZE(log_size)	((PAGE_SIZE) << (log_size))
+
 struct f2fs_sb_info {
 	struct super_block *sb;			/* pointer to VFS super block */
 	struct proc_dir_entry *s_proc;		/* proc entry */
@@ -1184,10 +1372,6 @@ struct f2fs_sb_info {
 	int valid_super_block;			/* valid super block no */
 	unsigned long s_flag;				/* flags for sbi */
 	struct mutex writepages;		/* mutex for writepages() */
-#ifdef CONFIG_UNICODE
-	struct unicode_map *s_encoding;
-	__u16 s_encoding_flags;
-#endif
 
 #ifdef CONFIG_BLK_DEV_ZONED
 	unsigned int blocks_per_blkz;		/* F2FS blocks per zone */
@@ -1212,7 +1396,7 @@ struct f2fs_sb_info {
 	int cur_cp_pack;			/* remain current cp pack */
 	spinlock_t cp_lock;			/* for flag in ckpt */
 	struct inode *meta_inode;		/* cache meta blocks */
-	struct mutex cp_mutex;			/* checkpoint procedure lock */
+	struct rw_semaphore cp_global_sem;	/* checkpoint procedure lock */
 	struct rw_semaphore cp_rwsem;		/* blocking FS operations */
 	struct rw_semaphore node_write;		/* locking node writes */
 	struct rw_semaphore node_change;	/* locking node change */
@@ -1220,7 +1404,7 @@ struct f2fs_sb_info {
 	unsigned long last_time[MAX_TIME];	/* to store time in jiffies */
 	long interval_time[MAX_TIME];		/* to store thresholds */
 
-	struct inode_management im[MAX_INO_ENTRY];      /* manage inode cache */
+	struct inode_management im[MAX_INO_ENTRY];	/* manage inode cache */
 
 	spinlock_t fsync_node_lock;		/* for node entry lock */
 	struct list_head fsync_node_list;	/* node list head */
@@ -1257,12 +1441,12 @@ struct f2fs_sb_info {
 	unsigned int segs_per_sec;		/* segments per section */
 	unsigned int secs_per_zone;		/* sections per zone */
 	unsigned int total_sections;		/* total section count */
-	struct mutex resize_mutex;		/* for resize exclusion */
 	unsigned int total_node_count;		/* total node block count */
 	unsigned int total_valid_node_count;	/* valid node block count */
 	loff_t max_file_blocks;			/* max block index of file */
 	int dir_level;				/* directory level */
 	int readdir_ra;				/* readahead inode in readdir */
+	u64 max_io_bytes;			/* max io bytes to merge IOs */
 
 	block_t user_block_count;		/* # of user blocks */
 	block_t total_valid_block_count;	/* # of valid blocks */
@@ -1291,18 +1475,24 @@ struct f2fs_sb_info {
 	struct f2fs_mount_info mount_opt;	/* mount options */
 
 	/* for cleaning operations */
-	struct mutex gc_mutex;			/* mutex for GC */
+	struct rw_semaphore gc_lock;		/*
+						 * semaphore for GC, avoid
+						 * race between GC and GC or CP
+						 */
 	struct f2fs_gc_kthread	*gc_thread;	/* GC thread */
+	struct atgc_management am;		/* atgc management */
 	unsigned int cur_victim_sec;		/* current victim section num */
 	unsigned int gc_mode;			/* current GC state */
 	unsigned int next_victim_seg[2];	/* next segment in victim section */
+
 	/* for skip statistic */
-	unsigned int atomic_files;              /* # of opened atomic file */
+	unsigned int atomic_files;		/* # of opened atomic file */
 	unsigned long long skipped_atomic_files[2];	/* FG_GC and BG_GC */
 	unsigned long long skipped_gc_rwsem;		/* FG_GC only */
 
 	/* threshold for gc trials on pinned files */
 	u64 gc_pin_file_threshold;
+	struct rw_semaphore pin_sem;
 
 	/* maximum # of trials to find a victim segment for SSR and GC */
 	unsigned int max_victim_search;
@@ -1326,11 +1516,11 @@ struct f2fs_sb_info {
 	atomic_t inline_xattr;			/* # of inline_xattr inodes */
 	atomic_t inline_inode;			/* # of inline_data inodes */
 	atomic_t inline_dir;			/* # of inline_dentry inodes */
-	atomic_t aw_cnt;			/* # of atomic writes */
+	atomic_t compr_inode;			/* # of compressed inodes */
+	atomic64_t compr_blocks;		/* # of compressed blocks */
 	atomic_t vw_cnt;			/* # of volatile writes */
 	atomic_t max_aw_cnt;			/* max # of atomic writes */
 	atomic_t max_vw_cnt;			/* max # of volatile writes */
-	int bg_gc;				/* background gc calls */
 	unsigned int io_skip_bggc;		/* skip background gc for in-flight IO */
 	unsigned int other_skip_bggc;		/* skip background gc for other reasons */
 	unsigned int ndirty_inode[NR_INODE_TYPE];	/* # of dirty inodes */
@@ -1339,8 +1529,15 @@ struct f2fs_sb_info {
 
 	/* For app/fs IO statistics */
 	spinlock_t iostat_lock;
-	unsigned long long write_iostat[NR_IO_TYPE];
+	unsigned long long rw_iostat[NR_IO_TYPE];
+	unsigned long long prev_rw_iostat[NR_IO_TYPE];
 	bool iostat_enable;
+	unsigned long iostat_next_period;
+	unsigned int iostat_period_ms;
+
+	/* to attach REQ_META|REQ_FUA flags */
+	unsigned int data_io_flag;
+	unsigned int node_io_flag;
 
 	/* For sysfs suppport */
 	struct kobject s_kobj;
@@ -1364,6 +1561,16 @@ struct f2fs_sb_info {
 
 	/* Precomputed FS UUID checksum for seeding other checksums */
 	__u32 s_chksum_seed;
+
+	struct workqueue_struct *post_read_wq;	/* post read workqueue */
+
+	struct kmem_cache *inline_xattr_slab;	/* inline xattr entry */
+	unsigned int inline_xattr_slab_size;	/* default inline xattr slab size */
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	struct kmem_cache *page_array_slab;	/* page array entry */
+	unsigned int page_array_slab_size;	/* default page array slab size */
+#endif
 };
 
 struct f2fs_private_dio {
@@ -1374,9 +1581,10 @@ struct f2fs_private_dio {
 };
 
 #ifdef CONFIG_F2FS_FAULT_INJECTION
-#define f2fs_show_injection_info(type)					\
-	printk_ratelimited("%sF2FS-fs : inject %s in %s of %pS\n",	\
-		KERN_INFO, f2fs_fault_name[type],			\
+#define f2fs_show_injection_info(sbi, type)					\
+	printk_ratelimited("%sF2FS-fs (%s) : inject %s in %s of %pS\n",	\
+		KERN_INFO, sbi->sb->s_id,				\
+		f2fs_fault_name[type],					\
 		__func__, __builtin_return_address(0))
 static inline bool time_to_inject(struct f2fs_sb_info *sbi, int type)
 {
@@ -1396,7 +1604,7 @@ static inline bool time_to_inject(struct f2fs_sb_info *sbi, int type)
 	return false;
 }
 #else
-#define f2fs_show_injection_info(type) do { } while (0)
+#define f2fs_show_injection_info(sbi, type) do { } while (0)
 static inline bool time_to_inject(struct f2fs_sb_info *sbi, int type)
 {
 	return false;
@@ -1414,13 +1622,6 @@ static inline bool f2fs_is_multi_device(struct f2fs_sb_info *sbi)
 	return sbi->s_ndevs > 1;
 }
 
-/* For write statistics. Suppose sector size is 512 bytes,
- * and the return value is in kbytes. s is of struct f2fs_sb_info.
- */
-#define BD_PART_WRITTEN(s)						 \
-(((u64)part_stat_read((s)->sb->s_bdev->bd_part, sectors[STAT_WRITE]) -   \
-		(s)->sectors_written_start) >> 1)
-
 static inline void f2fs_update_time(struct f2fs_sb_info *sbi, int type)
 {
 	unsigned long now = jiffies;
@@ -1781,7 +1982,7 @@ static inline int inc_valid_block_count(struct f2fs_sb_info *sbi,
 		return ret;
 
 	if (time_to_inject(sbi, FAULT_BLOCK)) {
-		f2fs_show_injection_info(FAULT_BLOCK);
+		f2fs_show_injection_info(sbi, FAULT_BLOCK);
 		release = *count;
 		goto release_quota;
 	}
@@ -2033,7 +2234,7 @@ static inline int inc_valid_node_count(struct f2fs_sb_info *sbi,
 	}
 
 	if (time_to_inject(sbi, FAULT_BLOCK)) {
-		f2fs_show_injection_info(FAULT_BLOCK);
+		f2fs_show_injection_info(sbi, FAULT_BLOCK);
 		goto enospc;
 	}
 
@@ -2103,7 +2304,7 @@ static inline void dec_valid_node_count(struct f2fs_sb_info *sbi,
 		dquot_free_inode(inode);
 	} else {
 		if (unlikely(inode->i_blocks == 0)) {
-			f2fs_warn(sbi, "Inconsistent i_blocks, ino:%lu, iblocks:%llu",
+			f2fs_warn(sbi, "dec_valid_node_count: inconsistent i_blocks, ino:%lu, iblocks:%llu",
 				  inode->i_ino,
 				  (unsigned long long)inode->i_blocks);
 			set_sbi_flag(sbi, SBI_NEED_FSCK);
@@ -2148,7 +2349,8 @@ static inline struct page *f2fs_grab_cache_page(struct address_space *mapping,
 			return page;
 
 		if (time_to_inject(F2FS_M_SB(mapping), FAULT_PAGE_ALLOC)) {
-			f2fs_show_injection_info(FAULT_PAGE_ALLOC);
+			f2fs_show_injection_info(F2FS_M_SB(mapping),
+							FAULT_PAGE_ALLOC);
 			return NULL;
 		}
 	}
@@ -2163,7 +2365,7 @@ static inline struct page *f2fs_pagecache_get_page(
 				int fgp_flags, gfp_t gfp_mask)
 {
 	if (time_to_inject(F2FS_M_SB(mapping), FAULT_PAGE_GET)) {
-		f2fs_show_injection_info(FAULT_PAGE_GET);
+		f2fs_show_injection_info(F2FS_M_SB(mapping), FAULT_PAGE_GET);
 		return NULL;
 	}
 
@@ -2219,46 +2421,37 @@ static inline void *f2fs_kmem_cache_alloc(struct kmem_cache *cachep,
 	return entry;
 }
 
-static inline struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi,
-						int npages, bool no_fail)
+static inline bool is_inflight_io(struct f2fs_sb_info *sbi, int type)
 {
-	struct bio *bio;
-
-	if (no_fail) {
-		/* No failure on bio allocation */
-		bio = bio_alloc(GFP_NOIO, npages);
-		if (!bio)
-			bio = bio_alloc(GFP_NOIO | __GFP_NOFAIL, npages);
-		return bio;
-	}
-	if (time_to_inject(sbi, FAULT_ALLOC_BIO)) {
-		f2fs_show_injection_info(FAULT_ALLOC_BIO);
-		return NULL;
-	}
-
-	return bio_alloc(GFP_KERNEL, npages);
-}
-
-static inline bool is_idle(struct f2fs_sb_info *sbi, int type)
-{
-	if (sbi->gc_mode == GC_URGENT)
-		return true;
-
 	if (get_pages(sbi, F2FS_RD_DATA) || get_pages(sbi, F2FS_RD_NODE) ||
 		get_pages(sbi, F2FS_RD_META) || get_pages(sbi, F2FS_WB_DATA) ||
 		get_pages(sbi, F2FS_WB_CP_DATA) ||
 		get_pages(sbi, F2FS_DIO_READ) ||
 		get_pages(sbi, F2FS_DIO_WRITE))
-		return false;
+		return true;
 
 	if (type != DISCARD_TIME && SM_I(sbi) && SM_I(sbi)->dcc_info &&
 			atomic_read(&SM_I(sbi)->dcc_info->queued_discard))
-		return false;
+		return true;
 
 	if (SM_I(sbi) && SM_I(sbi)->fcc_info &&
 			atomic_read(&SM_I(sbi)->fcc_info->queued_flush))
+		return true;
+	return false;
+}
+
+static inline bool is_idle(struct f2fs_sb_info *sbi, int type)
+{
+	if (sbi->gc_mode == GC_URGENT_HIGH)
+		return true;
+
+	if (is_inflight_io(sbi, type))
 		return false;
 
+	if (sbi->gc_mode == GC_URGENT_LOW &&
+			(type == DISCARD_TIME || type == GC_TIME))
+		return true;
+
 	return f2fs_time_over(sbi, type);
 }
 
@@ -2290,7 +2483,7 @@ static inline __le32 *blkaddr_in_node(struct f2fs_node *node)
 }
 
 static inline int f2fs_has_extra_attr(struct inode *inode);
-static inline block_t datablock_addr(struct inode *inode,
+static inline block_t data_blkaddr(struct inode *inode,
 			struct page *node_page, unsigned int offset)
 {
 	struct f2fs_node *raw_node;
@@ -2300,9 +2493,9 @@ static inline block_t datablock_addr(struct inode *inode,
 
 	raw_node = F2FS_NODE(node_page);
 
-	/* from GC path only */
 	if (is_inode) {
 		if (!inode)
+			/* from GC path only */
 			base = offset_in_addr(&raw_node->i);
 		else if (f2fs_has_extra_attr(inode))
 			base = get_extra_isize(inode);
@@ -2312,6 +2505,11 @@ static inline block_t datablock_addr(struct inode *inode,
 	return le32_to_cpu(addr_array[base + offset]);
 }
 
+static inline block_t f2fs_data_blkaddr(struct dnode_of_data *dn)
+{
+	return data_blkaddr(dn->inode, dn->node_page, dn->ofs_in_node);
+}
+
 static inline int f2fs_test_bit(unsigned int nr, char *addr)
 {
 	int mask;
@@ -2375,11 +2573,13 @@ static inline void f2fs_change_bit(unsigned int nr, char *addr)
 /*
  * On-disk inode flags (f2fs_inode::i_flags)
  */
+#define F2FS_COMPR_FL			0x00000004 /* Compress file */
 #define F2FS_SYNC_FL			0x00000008 /* Synchronous updates */
 #define F2FS_IMMUTABLE_FL		0x00000010 /* Immutable file */
 #define F2FS_APPEND_FL			0x00000020 /* writes to file may only append */
 #define F2FS_NODUMP_FL			0x00000040 /* do not dump file */
 #define F2FS_NOATIME_FL			0x00000080 /* do not update atime */
+#define F2FS_NOCOMP_FL			0x00000400 /* Don't compress */
 #define F2FS_INDEX_FL			0x00001000 /* hash-indexed directory */
 #define F2FS_DIRSYNC_FL			0x00010000 /* dirsync behaviour (directories only) */
 #define F2FS_PROJINHERIT_FL		0x20000000 /* Create with parents projid */
@@ -2388,7 +2588,7 @@ static inline void f2fs_change_bit(unsigned int nr, char *addr)
 /* Flags that should be inherited by new inodes from their parent. */
 #define F2FS_FL_INHERITED (F2FS_SYNC_FL | F2FS_NODUMP_FL | F2FS_NOATIME_FL | \
 			   F2FS_DIRSYNC_FL | F2FS_PROJINHERIT_FL | \
-			   F2FS_CASEFOLD_FL)
+			   F2FS_CASEFOLD_FL | F2FS_COMPR_FL | F2FS_NOCOMP_FL)
 
 /* Flags that are appropriate for regular files (all but dir-specific ones). */
 #define F2FS_REG_FLMASK		(~(F2FS_DIRSYNC_FL | F2FS_PROJINHERIT_FL | \
@@ -2407,41 +2607,6 @@ static inline __u32 f2fs_mask_flags(umode_t mode, __u32 flags)
 		return flags & F2FS_OTHER_FLMASK;
 }
 
-/* used for f2fs_inode_info->flags */
-enum {
-	FI_NEW_INODE,		/* indicate newly allocated inode */
-	FI_DIRTY_INODE,		/* indicate inode is dirty or not */
-	FI_AUTO_RECOVER,	/* indicate inode is recoverable */
-	FI_DIRTY_DIR,		/* indicate directory has dirty pages */
-	FI_INC_LINK,		/* need to increment i_nlink */
-	FI_ACL_MODE,		/* indicate acl mode */
-	FI_NO_ALLOC,		/* should not allocate any blocks */
-	FI_FREE_NID,		/* free allocated nide */
-	FI_NO_EXTENT,		/* not to use the extent cache */
-	FI_INLINE_XATTR,	/* used for inline xattr */
-	FI_INLINE_DATA,		/* used for inline data*/
-	FI_INLINE_DENTRY,	/* used for inline dentry */
-	FI_APPEND_WRITE,	/* inode has appended data */
-	FI_UPDATE_WRITE,	/* inode has in-place-update data */
-	FI_NEED_IPU,		/* used for ipu per file */
-	FI_ATOMIC_FILE,		/* indicate atomic file */
-	FI_ATOMIC_COMMIT,	/* indicate the state of atomical committing */
-	FI_VOLATILE_FILE,	/* indicate volatile file */
-	FI_FIRST_BLOCK_WRITTEN,	/* indicate #0 data block was written */
-	FI_DROP_CACHE,		/* drop dirty page cache */
-	FI_DATA_EXIST,		/* indicate data exists */
-	FI_INLINE_DOTS,		/* indicate inline dot dentries */
-	FI_DO_DEFRAG,		/* indicate defragment is running */
-	FI_DIRTY_FILE,		/* indicate regular/symlink has dirty pages */
-	FI_NO_PREALLOC,		/* indicate skipped preallocated blocks */
-	FI_HOT_DATA,		/* indicate file is hot */
-	FI_EXTRA_ATTR,		/* indicate file has extra attribute */
-	FI_PROJ_INHERIT,	/* indicate file inherits projectid */
-	FI_PIN_FILE,		/* indicate file should not be gced */
-	FI_ATOMIC_REVOKE_REQUEST, /* request to drop atomic data */
-	FI_VERITY_IN_PROGRESS,	/* building fs-verity Merkle tree */
-};
-
 static inline void __mark_inode_dirty_flag(struct inode *inode,
 						int flag, bool set)
 {
@@ -2462,20 +2627,18 @@ static inline void __mark_inode_dirty_flag(struct inode *inode,
 
 static inline void set_inode_flag(struct inode *inode, int flag)
 {
-	if (!test_bit(flag, &F2FS_I(inode)->flags))
-		set_bit(flag, &F2FS_I(inode)->flags);
+	set_bit(flag, F2FS_I(inode)->flags);
 	__mark_inode_dirty_flag(inode, flag, true);
 }
 
 static inline int is_inode_flag_set(struct inode *inode, int flag)
 {
-	return test_bit(flag, &F2FS_I(inode)->flags);
+	return test_bit(flag, F2FS_I(inode)->flags);
 }
 
 static inline void clear_inode_flag(struct inode *inode, int flag)
 {
-	if (test_bit(flag, &F2FS_I(inode)->flags))
-		clear_bit(flag, &F2FS_I(inode)->flags);
+	clear_bit(flag, F2FS_I(inode)->flags);
 	__mark_inode_dirty_flag(inode, flag, false);
 }
 
@@ -2566,19 +2729,19 @@ static inline void get_inline_info(struct inode *inode, struct f2fs_inode *ri)
 	struct f2fs_inode_info *fi = F2FS_I(inode);
 
 	if (ri->i_inline & F2FS_INLINE_XATTR)
-		set_bit(FI_INLINE_XATTR, &fi->flags);
+		set_bit(FI_INLINE_XATTR, fi->flags);
 	if (ri->i_inline & F2FS_INLINE_DATA)
-		set_bit(FI_INLINE_DATA, &fi->flags);
+		set_bit(FI_INLINE_DATA, fi->flags);
 	if (ri->i_inline & F2FS_INLINE_DENTRY)
-		set_bit(FI_INLINE_DENTRY, &fi->flags);
+		set_bit(FI_INLINE_DENTRY, fi->flags);
 	if (ri->i_inline & F2FS_DATA_EXIST)
-		set_bit(FI_DATA_EXIST, &fi->flags);
+		set_bit(FI_DATA_EXIST, fi->flags);
 	if (ri->i_inline & F2FS_INLINE_DOTS)
-		set_bit(FI_INLINE_DOTS, &fi->flags);
+		set_bit(FI_INLINE_DOTS, fi->flags);
 	if (ri->i_inline & F2FS_EXTRA_ATTR)
-		set_bit(FI_EXTRA_ATTR, &fi->flags);
+		set_bit(FI_EXTRA_ATTR, fi->flags);
 	if (ri->i_inline & F2FS_PIN_FILE)
-		set_bit(FI_PIN_FILE, &fi->flags);
+		set_bit(FI_PIN_FILE, fi->flags);
 }
 
 static inline void set_raw_inline(struct inode *inode, struct f2fs_inode *ri)
@@ -2611,16 +2774,43 @@ static inline int f2fs_has_inline_xattr(struct inode *inode)
 	return is_inode_flag_set(inode, FI_INLINE_XATTR);
 }
 
+static inline int f2fs_compressed_file(struct inode *inode)
+{
+	return S_ISREG(inode->i_mode) &&
+		is_inode_flag_set(inode, FI_COMPRESSED_FILE);
+}
+
+static inline bool f2fs_need_compress_data(struct inode *inode)
+{
+	int compress_mode = F2FS_OPTION(F2FS_I_SB(inode)).compress_mode;
+
+	if (!f2fs_compressed_file(inode))
+		return false;
+
+	if (compress_mode == COMPR_MODE_FS)
+		return true;
+	else if (compress_mode == COMPR_MODE_USER &&
+			is_inode_flag_set(inode, FI_ENABLE_COMPRESS))
+		return true;
+
+	return false;
+}
+
 static inline unsigned int addrs_per_inode(struct inode *inode)
 {
 	unsigned int addrs = CUR_ADDRS_PER_INODE(inode) -
 				get_inline_xattr_addrs(inode);
-	return ALIGN_DOWN(addrs, 1);
+
+	if (!f2fs_compressed_file(inode))
+		return addrs;
+	return ALIGN_DOWN(addrs, F2FS_I(inode)->i_cluster_size);
 }
 
 static inline unsigned int addrs_per_block(struct inode *inode)
 {
-	return ALIGN_DOWN(DEF_ADDRS_PER_BLOCK, 1);
+	if (!f2fs_compressed_file(inode))
+		return DEF_ADDRS_PER_BLOCK;
+	return ALIGN_DOWN(DEF_ADDRS_PER_BLOCK, F2FS_I(inode)->i_cluster_size);
 }
 
 static inline void *inline_xattr_addr(struct inode *inode, struct page *page)
@@ -2653,6 +2843,11 @@ static inline int f2fs_has_inline_dots(struct inode *inode)
 	return is_inode_flag_set(inode, FI_INLINE_DOTS);
 }
 
+static inline int f2fs_is_mmap_file(struct inode *inode)
+{
+	return is_inode_flag_set(inode, FI_MMAP_FILE);
+}
+
 static inline bool f2fs_is_pinned_file(struct inode *inode)
 {
 	return is_inode_flag_set(inode, FI_PIN_FILE);
@@ -2747,9 +2942,9 @@ static inline bool f2fs_skip_inode_update(struct inode *inode, int dsync)
 	if (!f2fs_is_time_consistent(inode))
 		return false;
 
-	down_read(&F2FS_I(inode)->i_sem);
+	spin_lock(&F2FS_I(inode)->i_size_lock);
 	ret = F2FS_I(inode)->last_disk_size == i_size_read(inode);
-	up_read(&F2FS_I(inode)->i_sem);
+	spin_unlock(&F2FS_I(inode)->i_size_lock);
 
 	return ret;
 }
@@ -2764,12 +2959,12 @@ static inline bool f2fs_cp_error(struct f2fs_sb_info *sbi)
 	return is_set_ckpt_flags(sbi, CP_ERROR_FLAG);
 }
 
-static inline bool is_dot_dotdot(const struct qstr *str)
+static inline bool is_dot_dotdot(const u8 *name, size_t len)
 {
-	if (str->len == 1 && str->name[0] == '.')
+	if (len == 1 && name[0] == '.')
 		return true;
 
-	if (str->len == 2 && str->name[0] == '.' && str->name[1] == '.')
+	if (len == 2 && name[0] == '.' && name[1] == '.')
 		return true;
 
 	return false;
@@ -2780,7 +2975,8 @@ static inline bool f2fs_may_extent_tree(struct inode *inode)
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 
 	if (!test_opt(sbi, EXTENT_CACHE) ||
-			is_inode_flag_set(inode, FI_NO_EXTENT))
+			is_inode_flag_set(inode, FI_NO_EXTENT) ||
+			is_inode_flag_set(inode, FI_COMPRESSED_FILE))
 		return false;
 
 	/*
@@ -2797,7 +2993,7 @@ static inline void *f2fs_kmalloc(struct f2fs_sb_info *sbi,
 					size_t size, gfp_t flags)
 {
 	if (time_to_inject(sbi, FAULT_KMALLOC)) {
-		f2fs_show_injection_info(FAULT_KMALLOC);
+		f2fs_show_injection_info(sbi, FAULT_KMALLOC);
 		return NULL;
 	}
 
@@ -2814,7 +3010,7 @@ static inline void *f2fs_kvmalloc(struct f2fs_sb_info *sbi,
 					size_t size, gfp_t flags)
 {
 	if (time_to_inject(sbi, FAULT_KVMALLOC)) {
-		f2fs_show_injection_info(FAULT_KVMALLOC);
+		f2fs_show_injection_info(sbi, FAULT_KVMALLOC);
 		return NULL;
 	}
 
@@ -2851,29 +3047,45 @@ static inline int get_inline_xattr_addrs(struct inode *inode)
 		sizeof((f2fs_inode)->field))			\
 		<= (F2FS_OLD_ATTRIBUTE_SIZE + (extra_isize)))	\
 
+#define DEFAULT_IOSTAT_PERIOD_MS	3000
+#define MIN_IOSTAT_PERIOD_MS		100
+/* maximum period of iostat tracing is 1 day */
+#define MAX_IOSTAT_PERIOD_MS		8640000
+
 static inline void f2fs_reset_iostat(struct f2fs_sb_info *sbi)
 {
 	int i;
 
 	spin_lock(&sbi->iostat_lock);
-	for (i = 0; i < NR_IO_TYPE; i++)
-		sbi->write_iostat[i] = 0;
+	for (i = 0; i < NR_IO_TYPE; i++) {
+		sbi->rw_iostat[i] = 0;
+		sbi->prev_rw_iostat[i] = 0;
+	}
 	spin_unlock(&sbi->iostat_lock);
 }
 
+extern void f2fs_record_iostat(struct f2fs_sb_info *sbi);
+
 static inline void f2fs_update_iostat(struct f2fs_sb_info *sbi,
 			enum iostat_type type, unsigned long long io_bytes)
 {
 	if (!sbi->iostat_enable)
 		return;
 	spin_lock(&sbi->iostat_lock);
-	sbi->write_iostat[type] += io_bytes;
+	sbi->rw_iostat[type] += io_bytes;
 
 	if (type == APP_WRITE_IO || type == APP_DIRECT_IO)
-		sbi->write_iostat[APP_BUFFERED_IO] =
-			sbi->write_iostat[APP_WRITE_IO] -
-			sbi->write_iostat[APP_DIRECT_IO];
+		sbi->rw_iostat[APP_BUFFERED_IO] =
+			sbi->rw_iostat[APP_WRITE_IO] -
+			sbi->rw_iostat[APP_DIRECT_IO];
+
+	if (type == APP_READ_IO || type == APP_DIRECT_READ_IO)
+		sbi->rw_iostat[APP_BUFFERED_READ_IO] =
+			sbi->rw_iostat[APP_READ_IO] -
+			sbi->rw_iostat[APP_DIRECT_READ_IO];
 	spin_unlock(&sbi->iostat_lock);
+
+	f2fs_record_iostat(sbi);
 }
 
 #define __is_large_section(sbi)		((sbi)->segs_per_sec > 1)
@@ -2894,7 +3106,8 @@ static inline void verify_blkaddr(struct f2fs_sb_info *sbi,
 
 static inline bool __is_valid_data_blkaddr(block_t blkaddr)
 {
-	if (blkaddr == NEW_ADDR || blkaddr == NULL_ADDR)
+	if (blkaddr == NEW_ADDR || blkaddr == NULL_ADDR ||
+			blkaddr == COMPRESS_ADDR)
 		return false;
 	return true;
 }
@@ -2925,6 +3138,7 @@ static inline void f2fs_clear_page_private(struct page *page)
  */
 int f2fs_sync_file(struct file *file, loff_t start, loff_t end, int datasync);
 void f2fs_truncate_data_blocks(struct dnode_of_data *dn);
+int f2fs_do_truncate_blocks(struct inode *inode, u64 from, bool lock);
 int f2fs_truncate_blocks(struct inode *inode, u64 from, bool lock);
 int f2fs_truncate(struct inode *inode);
 int f2fs_getattr(const struct path *path, struct kstat *stat,
@@ -2964,22 +3178,28 @@ struct dentry *f2fs_get_parent(struct dentry *child);
  * dir.c
  */
 unsigned char f2fs_get_de_type(struct f2fs_dir_entry *de);
-struct f2fs_dir_entry *f2fs_find_target_dentry(struct fscrypt_name *fname,
-			f2fs_hash_t namehash, int *max_slots,
-			struct f2fs_dentry_ptr *d);
+int f2fs_init_casefolded_name(const struct inode *dir,
+			      struct f2fs_filename *fname);
+int f2fs_setup_filename(struct inode *dir, const struct qstr *iname,
+			int lookup, struct f2fs_filename *fname);
+int f2fs_prepare_lookup(struct inode *dir, struct dentry *dentry,
+			struct f2fs_filename *fname);
+void f2fs_free_filename(struct f2fs_filename *fname);
+struct f2fs_dir_entry *f2fs_find_target_dentry(const struct f2fs_dentry_ptr *d,
+			const struct f2fs_filename *fname, int *max_slots);
 int f2fs_fill_dentries(struct dir_context *ctx, struct f2fs_dentry_ptr *d,
 			unsigned int start_pos, struct fscrypt_str *fstr);
 void f2fs_do_make_empty_dir(struct inode *inode, struct inode *parent,
 			struct f2fs_dentry_ptr *d);
 struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
-			const struct qstr *new_name,
-			const struct qstr *orig_name, struct page *dpage);
+			const struct f2fs_filename *fname, struct page *dpage);
 void f2fs_update_parent_metadata(struct inode *dir, struct inode *inode,
 			unsigned int current_depth);
 int f2fs_room_for_filename(const void *bitmap, int slots, int max_slots);
 void f2fs_drop_nlink(struct inode *dir, struct inode *inode);
 struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
-			struct fscrypt_name *fname, struct page **res_page);
+					 const struct f2fs_filename *fname,
+					 struct page **res_page);
 struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
 			const struct qstr *child, struct page **res_page);
 struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct page **p);
@@ -2987,13 +3207,14 @@ ino_t f2fs_inode_by_name(struct inode *dir, const struct qstr *qstr,
 			struct page **page);
 void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
 			struct page *page, struct inode *inode);
+bool f2fs_has_enough_room(struct inode *dir, struct page *ipage,
+			  const struct f2fs_filename *fname);
 void f2fs_update_dentry(nid_t ino, umode_t mode, struct f2fs_dentry_ptr *d,
-			const struct qstr *name, f2fs_hash_t name_hash,
+			const struct fscrypt_str *name, f2fs_hash_t name_hash,
 			unsigned int bit_pos);
-int f2fs_add_regular_entry(struct inode *dir, const struct qstr *new_name,
-			const struct qstr *orig_name,
+int f2fs_add_regular_entry(struct inode *dir, const struct f2fs_filename *fname,
 			struct inode *inode, nid_t ino, umode_t mode);
-int f2fs_add_dentry(struct inode *dir, struct fscrypt_name *fname,
+int f2fs_add_dentry(struct inode *dir, const struct f2fs_filename *fname,
 			struct inode *inode, nid_t ino, umode_t mode);
 int f2fs_do_add_link(struct inode *dir, const struct qstr *name,
 			struct inode *inode, nid_t ino, umode_t mode);
@@ -3025,8 +3246,7 @@ int f2fs_sanity_check_ckpt(struct f2fs_sb_info *sbi);
 /*
  * hash.c
  */
-f2fs_hash_t f2fs_dentry_hash(const struct inode *dir,
-		const struct qstr *name_info, struct fscrypt_name *fname);
+void f2fs_hash_filename(const struct inode *dir, struct f2fs_filename *fname);
 
 /*
  * node.c
@@ -3058,6 +3278,7 @@ void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid);
 struct page *f2fs_get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid);
 struct page *f2fs_get_node_page_ra(struct page *parent, int start);
 int f2fs_move_node_page(struct page *node_page, int gc_type);
+void f2fs_flush_inline_data(struct f2fs_sb_info *sbi);
 int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
 			struct writeback_control *wbc, bool atomic,
 			unsigned int *seq_id);
@@ -3090,7 +3311,7 @@ void f2fs_drop_inmem_pages(struct inode *inode);
 void f2fs_drop_inmem_page(struct inode *inode, struct page *page);
 int f2fs_commit_inmem_pages(struct inode *inode);
 void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need);
-void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi);
+void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi, bool from_bg);
 int f2fs_issue_flush(struct f2fs_sb_info *sbi, nid_t ino);
 int f2fs_create_flush_cmd_control(struct f2fs_sb_info *sbi);
 int f2fs_flush_device_cache(struct f2fs_sb_info *sbi);
@@ -3107,8 +3328,14 @@ block_t f2fs_get_unusable_blocks(struct f2fs_sb_info *sbi);
 int f2fs_disable_cp_again(struct f2fs_sb_info *sbi, block_t unusable);
 void f2fs_release_discard_addrs(struct f2fs_sb_info *sbi);
 int f2fs_npages_for_summary_flush(struct f2fs_sb_info *sbi, bool for_ra);
-void allocate_segment_for_resize(struct f2fs_sb_info *sbi, int type,
+void f2fs_init_inmem_curseg(struct f2fs_sb_info *sbi);
+void f2fs_save_inmem_curseg(struct f2fs_sb_info *sbi);
+void f2fs_restore_inmem_curseg(struct f2fs_sb_info *sbi);
+void f2fs_get_new_segment(struct f2fs_sb_info *sbi,
+			unsigned int *newseg, bool new_sec, int dir);
+void f2fs_allocate_segment_for_resize(struct f2fs_sb_info *sbi, int type,
 					unsigned int start, unsigned int end);
+void f2fs_allocate_new_segment(struct f2fs_sb_info *sbi, int type);
 void f2fs_allocate_new_segments(struct f2fs_sb_info *sbi);
 int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range);
 bool f2fs_exist_trim_candidates(struct f2fs_sb_info *sbi,
@@ -3124,7 +3351,8 @@ void f2fs_outplace_write_data(struct dnode_of_data *dn,
 int f2fs_inplace_write_data(struct f2fs_io_info *fio);
 void f2fs_do_replace_block(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
 			block_t old_blkaddr, block_t new_blkaddr,
-			bool recover_curseg, bool recover_newaddr);
+			bool recover_curseg, bool recover_newaddr,
+			bool from_gc);
 void f2fs_replace_block(struct f2fs_sb_info *sbi, struct dnode_of_data *dn,
 			block_t old_addr, block_t new_addr,
 			unsigned char version, bool recover_curseg,
@@ -3132,7 +3360,7 @@ void f2fs_replace_block(struct f2fs_sb_info *sbi, struct dnode_of_data *dn,
 void f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
 			block_t old_blkaddr, block_t *new_blkaddr,
 			struct f2fs_summary *sum, int type,
-			struct f2fs_io_info *fio, bool add_list);
+			struct f2fs_io_info *fio);
 void f2fs_wait_on_page_writeback(struct page *page,
 			enum page_type type, bool ordered, bool locked);
 void f2fs_wait_on_block_writeback(struct inode *inode, block_t blkaddr);
@@ -3143,6 +3371,8 @@ void f2fs_write_node_summaries(struct f2fs_sb_info *sbi, block_t start_blk);
 int f2fs_lookup_journal_in_cursum(struct f2fs_journal *journal, int type,
 			unsigned int val, int alloc);
 void f2fs_flush_sit_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc);
+int f2fs_fix_curseg_write_pointer(struct f2fs_sb_info *sbi);
+int f2fs_check_write_pointer(struct f2fs_sb_info *sbi);
 int f2fs_build_segment_manager(struct f2fs_sb_info *sbi);
 void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi);
 int __init f2fs_create_segment_manager_caches(void);
@@ -3150,6 +3380,10 @@ void f2fs_destroy_segment_manager_caches(void);
 int f2fs_rw_hint_to_seg_type(enum rw_hint hint);
 enum rw_hint f2fs_io_type_to_rw_hint(struct f2fs_sb_info *sbi,
 			enum page_type type, enum temp_type temp);
+unsigned int f2fs_usable_segs_in_sec(struct f2fs_sb_info *sbi,
+			unsigned int segno);
+unsigned int f2fs_usable_blks_in_seg(struct f2fs_sb_info *sbi,
+			unsigned int segno);
 
 /*
  * checkpoint.c
@@ -3185,6 +3419,7 @@ void f2fs_update_dirty_page(struct inode *inode, struct page *page);
 void f2fs_remove_dirty_inode(struct inode *inode);
 int f2fs_sync_dirty_inodes(struct f2fs_sb_info *sbi, enum inode_type type);
 void f2fs_wait_on_all_pages(struct f2fs_sb_info *sbi, int type);
+u64 f2fs_get_sectors_written(struct f2fs_sb_info *sbi);
 int f2fs_write_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc);
 void f2fs_init_ino_entry_info(struct f2fs_sb_info *sbi);
 int __init f2fs_create_checkpoint_caches(void);
@@ -3193,12 +3428,19 @@ void f2fs_destroy_checkpoint_caches(void);
 /*
  * data.c
  */
-int f2fs_init_post_read_processing(void);
-void f2fs_destroy_post_read_processing(void);
+int __init f2fs_init_bioset(void);
+void f2fs_destroy_bioset(void);
+struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi, int npages, bool noio);
+int f2fs_init_bio_entry_cache(void);
+void f2fs_destroy_bio_entry_cache(void);
+void f2fs_submit_bio(struct f2fs_sb_info *sbi,
+				struct bio *bio, enum page_type type);
 void f2fs_submit_merged_write(struct f2fs_sb_info *sbi, enum page_type type);
 void f2fs_submit_merged_write_cond(struct f2fs_sb_info *sbi,
 				struct inode *inode, struct page *page,
 				nid_t ino, enum page_type type);
+void f2fs_submit_merged_ipu_write(struct f2fs_sb_info *sbi,
+					struct bio **bio, struct page *page);
 void f2fs_flush_merged_writes(struct f2fs_sb_info *sbi);
 int f2fs_submit_page_bio(struct f2fs_io_info *fio);
 int f2fs_merge_page_bio(struct f2fs_io_info *fio);
@@ -3213,6 +3455,9 @@ int f2fs_reserve_new_block(struct dnode_of_data *dn);
 int f2fs_get_block(struct dnode_of_data *dn, pgoff_t index);
 int f2fs_preallocate_blocks(struct kiocb *iocb, struct iov_iter *from);
 int f2fs_reserve_block(struct dnode_of_data *dn, pgoff_t index);
+int f2fs_mpage_readpages(struct address_space *mapping,
+			struct list_head *pages, struct page *page,
+			unsigned nr_pages, bool is_readahead);
 struct page *f2fs_get_read_data_page(struct inode *inode, pgoff_t index,
 			int op_flags, bool for_write);
 struct page *f2fs_find_data_page(struct inode *inode, pgoff_t index);
@@ -3221,13 +3466,19 @@ struct page *f2fs_get_lock_data_page(struct inode *inode, pgoff_t index,
 struct page *f2fs_get_new_data_page(struct inode *inode,
 			struct page *ipage, pgoff_t index, bool new_i_size);
 int f2fs_do_write_data_page(struct f2fs_io_info *fio);
-void __do_map_lock(struct f2fs_sb_info *sbi, int flag, bool lock);
+void f2fs_do_map_lock(struct f2fs_sb_info *sbi, int flag, bool lock);
 int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map,
 			int create, int flag);
 int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
 			u64 start, u64 len);
+int f2fs_encrypt_one_page(struct f2fs_io_info *fio);
 bool f2fs_should_update_inplace(struct inode *inode, struct f2fs_io_info *fio);
 bool f2fs_should_update_outplace(struct inode *inode, struct f2fs_io_info *fio);
+int f2fs_write_single_data_page(struct page *page, int *submitted,
+				struct bio **bio, sector_t *last_block,
+				struct writeback_control *wbc,
+				enum iostat_type io_type,
+				int compr_blocks);
 void f2fs_invalidate_page(struct page *page, unsigned int offset,
 			unsigned int length);
 int f2fs_release_page(struct page *page, gfp_t wait);
@@ -3237,6 +3488,10 @@ int f2fs_migrate_page(struct address_space *mapping, struct page *newpage,
 #endif
 bool f2fs_overwrite_io(struct inode *inode, loff_t pos, size_t len);
 void f2fs_clear_page_cache_dirty_tag(struct page *page);
+int f2fs_init_post_read_processing(void);
+void f2fs_destroy_post_read_processing(void);
+int f2fs_init_post_read_wq(struct f2fs_sb_info *sbi);
+void f2fs_destroy_post_read_wq(struct f2fs_sb_info *sbi);
 
 /*
  * gc.c
@@ -3248,6 +3503,8 @@ int f2fs_gc(struct f2fs_sb_info *sbi, bool sync, bool background,
 			unsigned int segno);
 void f2fs_build_gc_manager(struct f2fs_sb_info *sbi);
 int f2fs_resize_fs(struct f2fs_sb_info *sbi, __u64 block_count);
+int __init f2fs_create_garbage_collection_cache(void);
+void f2fs_destroy_garbage_collection_cache(void);
 
 /*
  * recovery.c
@@ -3283,6 +3540,8 @@ struct f2fs_stat_info {
 	int nr_discard_cmd;
 	unsigned int undiscard_blks;
 	int inline_xattr, inline_inode, inline_dir, append, update, orphans;
+	int compr_inode;
+	unsigned long long compr_blocks;
 	int aw_cnt, max_aw_cnt, vw_cnt, max_vw_cnt;
 	unsigned int valid_count, valid_node_count, valid_inode_count, discard_blks;
 	unsigned int bimodal, avg_vblocks;
@@ -3298,6 +3557,9 @@ struct f2fs_stat_info {
 	int curseg[NR_CURSEG_TYPE];
 	int cursec[NR_CURSEG_TYPE];
 	int curzone[NR_CURSEG_TYPE];
+	unsigned int dirty_seg[NR_CURSEG_TYPE];
+	unsigned int full_seg[NR_CURSEG_TYPE];
+	unsigned int valid_blks[NR_CURSEG_TYPE];
 
 	unsigned int meta_count[META_MAX];
 	unsigned int segment_count[2];
@@ -3314,7 +3576,7 @@ static inline struct f2fs_stat_info *F2FS_STAT(struct f2fs_sb_info *sbi)
 #define stat_inc_cp_count(si)		((si)->cp_count++)
 #define stat_inc_bg_cp_count(si)	((si)->bg_cp_count++)
 #define stat_inc_call_count(si)		((si)->call_count++)
-#define stat_inc_bggc_count(sbi)	((sbi)->bg_gc++)
+#define stat_inc_bggc_count(si)		((si)->bg_gc++)
 #define stat_io_skip_bggc_count(sbi)	((sbi)->io_skip_bggc++)
 #define stat_other_skip_bggc_count(sbi)	((sbi)->other_skip_bggc++)
 #define stat_inc_dirty_inode(sbi, type)	((sbi)->ndirty_inode[type]++)
@@ -3353,6 +3615,20 @@ static inline struct f2fs_stat_info *F2FS_STAT(struct f2fs_sb_info *sbi)
 		if (f2fs_has_inline_dentry(inode))			\
 			(atomic_dec(&F2FS_I_SB(inode)->inline_dir));	\
 	} while (0)
+#define stat_inc_compr_inode(inode)					\
+	do {								\
+		if (f2fs_compressed_file(inode))			\
+			(atomic_inc(&F2FS_I_SB(inode)->compr_inode));	\
+	} while (0)
+#define stat_dec_compr_inode(inode)					\
+	do {								\
+		if (f2fs_compressed_file(inode))			\
+			(atomic_dec(&F2FS_I_SB(inode)->compr_inode));	\
+	} while (0)
+#define stat_add_compr_blocks(inode, blocks)				\
+		(atomic64_add(blocks, &F2FS_I_SB(inode)->compr_blocks))
+#define stat_sub_compr_blocks(inode, blocks)				\
+		(atomic64_sub(blocks, &F2FS_I_SB(inode)->compr_blocks))
 #define stat_inc_meta_count(sbi, blkaddr)				\
 	do {								\
 		if (blkaddr < SIT_I(sbi)->sit_base_addr)		\
@@ -3370,13 +3646,9 @@ static inline struct f2fs_stat_info *F2FS_STAT(struct f2fs_sb_info *sbi)
 		((sbi)->block_count[(curseg)->alloc_type]++)
 #define stat_inc_inplace_blocks(sbi)					\
 		(atomic_inc(&(sbi)->inplace_count))
-#define stat_inc_atomic_write(inode)					\
-		(atomic_inc(&F2FS_I_SB(inode)->aw_cnt))
-#define stat_dec_atomic_write(inode)					\
-		(atomic_dec(&F2FS_I_SB(inode)->aw_cnt))
 #define stat_update_max_atomic_write(inode)				\
 	do {								\
-		int cur = atomic_read(&F2FS_I_SB(inode)->aw_cnt);	\
+		int cur = F2FS_I_SB(inode)->atomic_files;	\
 		int max = atomic_read(&F2FS_I_SB(inode)->max_aw_cnt);	\
 		if (cur > max)						\
 			atomic_set(&F2FS_I_SB(inode)->max_aw_cnt, cur);	\
@@ -3428,6 +3700,7 @@ int f2fs_build_stats(struct f2fs_sb_info *sbi);
 void f2fs_destroy_stats(struct f2fs_sb_info *sbi);
 void __init f2fs_create_root_stats(void);
 void f2fs_destroy_root_stats(void);
+void f2fs_update_sit_info(struct f2fs_sb_info *sbi);
 #else
 #define stat_inc_cp_count(si)				do { } while (0)
 #define stat_inc_bg_cp_count(si)			do { } while (0)
@@ -3437,8 +3710,8 @@ void f2fs_destroy_root_stats(void);
 #define stat_other_skip_bggc_count(sbi)			do { } while (0)
 #define stat_inc_dirty_inode(sbi, type)			do { } while (0)
 #define stat_dec_dirty_inode(sbi, type)			do { } while (0)
-#define stat_inc_total_hit(sb)				do { } while (0)
-#define stat_inc_rbtree_node_hit(sb)			do { } while (0)
+#define stat_inc_total_hit(sbi)				do { } while (0)
+#define stat_inc_rbtree_node_hit(sbi)			do { } while (0)
 #define stat_inc_largest_node_hit(sbi)			do { } while (0)
 #define stat_inc_cached_node_hit(sbi)			do { } while (0)
 #define stat_inc_inline_xattr(inode)			do { } while (0)
@@ -3447,6 +3720,10 @@ void f2fs_destroy_root_stats(void);
 #define stat_dec_inline_inode(inode)			do { } while (0)
 #define stat_inc_inline_dir(inode)			do { } while (0)
 #define stat_dec_inline_dir(inode)			do { } while (0)
+#define stat_inc_compr_inode(inode)			do { } while (0)
+#define stat_dec_compr_inode(inode)			do { } while (0)
+#define stat_add_compr_blocks(inode, blocks)		do { } while (0)
+#define stat_sub_compr_blocks(inode, blocks)		do { } while (0)
 #define stat_inc_atomic_write(inode)			do { } while (0)
 #define stat_dec_atomic_write(inode)			do { } while (0)
 #define stat_update_max_atomic_write(inode)		do { } while (0)
@@ -3466,12 +3743,10 @@ static inline int f2fs_build_stats(struct f2fs_sb_info *sbi) { return 0; }
 static inline void f2fs_destroy_stats(struct f2fs_sb_info *sbi) { }
 static inline void __init f2fs_create_root_stats(void) { }
 static inline void f2fs_destroy_root_stats(void) { }
+static inline void f2fs_update_sit_info(struct f2fs_sb_info *sbi) {}
 #endif
 
 extern const struct file_operations f2fs_dir_operations;
-#ifdef CONFIG_UNICODE
-extern const struct dentry_operations f2fs_dentry_ops;
-#endif
 extern const struct file_operations f2fs_file_operations;
 extern const struct inode_operations f2fs_file_inode_operations;
 extern const struct address_space_operations f2fs_dblock_aops;
@@ -3494,14 +3769,15 @@ void f2fs_truncate_inline_inode(struct inode *inode,
 int f2fs_read_inline_data(struct inode *inode, struct page *page);
 int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page);
 int f2fs_convert_inline_inode(struct inode *inode);
+int f2fs_try_convert_inline_dir(struct inode *dir, struct dentry *dentry);
 int f2fs_write_inline_data(struct inode *inode, struct page *page);
 int f2fs_recover_inline_data(struct inode *inode, struct page *npage);
 struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir,
-			struct fscrypt_name *fname, struct page **res_page);
+					const struct f2fs_filename *fname,
+					struct page **res_page);
 int f2fs_make_empty_inline_dir(struct inode *inode, struct inode *parent,
 			struct page *ipage);
-int f2fs_add_inline_entry(struct inode *dir, const struct qstr *new_name,
-			const struct qstr *orig_name,
+int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
 			struct inode *inode, nid_t ino, umode_t mode);
 void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry,
 				struct page *page, struct inode *dir,
@@ -3528,6 +3804,10 @@ void f2fs_leave_shrinker(struct f2fs_sb_info *sbi);
  */
 struct rb_entry *f2fs_lookup_rb_tree(struct rb_root_cached *root,
 				struct rb_entry *cached_re, unsigned int ofs);
+struct rb_node **f2fs_lookup_rb_tree_ext(struct f2fs_sb_info *sbi,
+				struct rb_root_cached *root,
+				struct rb_node **parent,
+				unsigned long long key, bool *left_most);
 struct rb_node **f2fs_lookup_rb_tree_for_insert(struct f2fs_sb_info *sbi,
 				struct rb_root_cached *root,
 				struct rb_node **parent,
@@ -3538,9 +3818,9 @@ struct rb_entry *f2fs_lookup_rb_tree_ret(struct rb_root_cached *root,
 		struct rb_node ***insert_p, struct rb_node **insert_parent,
 		bool force, bool *leftmost);
 bool f2fs_check_rb_tree_consistence(struct f2fs_sb_info *sbi,
-						struct rb_root_cached *root);
+				struct rb_root_cached *root, bool check_key);
 unsigned int f2fs_shrink_extent_tree(struct f2fs_sb_info *sbi, int nr_shrink);
-bool f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_ext);
+void f2fs_init_extent_tree(struct inode *inode, struct page *ipage);
 void f2fs_drop_extent_tree(struct inode *inode);
 unsigned int f2fs_destroy_extent_node(struct inode *inode);
 void f2fs_destroy_extent_tree(struct inode *inode);
@@ -3586,7 +3866,104 @@ static inline void f2fs_set_encrypted_inode(struct inode *inode)
  */
 static inline bool f2fs_post_read_required(struct inode *inode)
 {
-	return f2fs_encrypted_file(inode) || fsverity_active(inode);
+	return f2fs_encrypted_file(inode) || fsverity_active(inode) ||
+		f2fs_compressed_file(inode);
+}
+
+/*
+ * compress.c
+ */
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+bool f2fs_is_compressed_page(struct page *page);
+struct page *f2fs_compress_control_page(struct page *page);
+int f2fs_prepare_compress_overwrite(struct inode *inode,
+			struct page **pagep, pgoff_t index, void **fsdata);
+bool f2fs_compress_write_end(struct inode *inode, void *fsdata,
+					pgoff_t index, unsigned copied);
+int f2fs_truncate_partial_cluster(struct inode *inode, u64 from, bool lock);
+void f2fs_compress_write_end_io(struct bio *bio, struct page *page);
+bool f2fs_is_compress_backend_ready(struct inode *inode);
+int f2fs_init_compress_mempool(void);
+void f2fs_destroy_compress_mempool(void);
+void f2fs_decompress_pages(struct bio *bio, struct page *page, bool verity);
+bool f2fs_cluster_is_empty(struct compress_ctx *cc);
+bool f2fs_cluster_can_merge_page(struct compress_ctx *cc, pgoff_t index);
+void f2fs_compress_ctx_add_page(struct compress_ctx *cc, struct page *page);
+int f2fs_write_multi_pages(struct compress_ctx *cc,
+						int *submitted,
+						struct writeback_control *wbc,
+						enum iostat_type io_type);
+int f2fs_is_compressed_cluster(struct inode *inode, pgoff_t index);
+int f2fs_read_multi_pages(struct compress_ctx *cc, struct bio **bio_ret,
+				unsigned nr_pages, sector_t *last_block_in_bio,
+				bool is_readahead, bool for_write);
+struct decompress_io_ctx *f2fs_alloc_dic(struct compress_ctx *cc);
+void f2fs_free_dic(struct decompress_io_ctx *dic);
+void f2fs_decompress_end_io(struct page **rpages,
+			unsigned int cluster_size, bool err, bool verity);
+int f2fs_init_compress_ctx(struct compress_ctx *cc);
+void f2fs_destroy_compress_ctx(struct compress_ctx *cc);
+void f2fs_init_compress_info(struct f2fs_sb_info *sbi);
+int f2fs_init_page_array_cache(struct f2fs_sb_info *sbi);
+void f2fs_destroy_page_array_cache(struct f2fs_sb_info *sbi);
+int __init f2fs_init_compress_cache(void);
+void f2fs_destroy_compress_cache(void);
+#else
+static inline bool f2fs_is_compressed_page(struct page *page) { return false; }
+static inline bool f2fs_is_compress_backend_ready(struct inode *inode)
+{
+	if (!f2fs_compressed_file(inode))
+		return true;
+	/* not support compression */
+	return false;
+}
+static inline struct page *f2fs_compress_control_page(struct page *page)
+{
+	WARN_ON_ONCE(1);
+	return ERR_PTR(-EINVAL);
+}
+static inline int f2fs_init_compress_mempool(void) { return 0; }
+static inline void f2fs_destroy_compress_mempool(void) { }
+static inline int f2fs_init_page_array_cache(struct f2fs_sb_info *sbi) { return 0; }
+static inline void f2fs_destroy_page_array_cache(struct f2fs_sb_info *sbi) { }
+static inline int __init f2fs_init_compress_cache(void) { return 0; }
+static inline void f2fs_destroy_compress_cache(void) { }
+#endif
+
+static inline void set_compress_context(struct inode *inode)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+
+	F2FS_I(inode)->i_compress_algorithm =
+			F2FS_OPTION(sbi).compress_algorithm;
+	F2FS_I(inode)->i_log_cluster_size =
+			F2FS_OPTION(sbi).compress_log_size;
+	F2FS_I(inode)->i_compress_flag =
+			F2FS_OPTION(sbi).compress_chksum ?
+				1 << COMPRESS_CHKSUM : 0;
+	F2FS_I(inode)->i_cluster_size =
+			1 << F2FS_I(inode)->i_log_cluster_size;
+	F2FS_I(inode)->i_flags |= F2FS_COMPR_FL;
+	set_inode_flag(inode, FI_COMPRESSED_FILE);
+	stat_inc_compr_inode(inode);
+	f2fs_mark_inode_dirty_sync(inode, true);
+}
+
+static inline bool f2fs_disable_compressed_file(struct inode *inode)
+{
+	struct f2fs_inode_info *fi = F2FS_I(inode);
+
+	if (!f2fs_compressed_file(inode))
+		return true;
+	if (S_ISREG(inode->i_mode) &&
+		(get_dirty_pages(inode) || atomic_read(&fi->i_compr_blocks)))
+		return false;
+
+	fi->i_flags &= ~F2FS_COMPR_FL;
+	stat_dec_compr_inode(inode);
+	clear_inode_flag(inode, FI_COMPRESSED_FILE);
+	f2fs_mark_inode_dirty_sync(inode, true);
+	return true;
 }
 
 #define F2FS_FEATURE_FUNCS(name, flagname) \
@@ -3607,6 +3984,7 @@ F2FS_FEATURE_FUNCS(lost_found, LOST_FOUND);
 F2FS_FEATURE_FUNCS(verity, VERITY);
 F2FS_FEATURE_FUNCS(sb_chksum, SB_CHKSUM);
 F2FS_FEATURE_FUNCS(casefold, CASEFOLD);
+F2FS_FEATURE_FUNCS(compression, COMPRESSION);
 
 #ifdef CONFIG_BLK_DEV_ZONED
 static inline bool f2fs_blkz_is_seq(struct f2fs_sb_info *sbi, int devi,
@@ -3661,31 +4039,38 @@ static inline bool f2fs_hw_is_readonly(struct f2fs_sb_info *sbi)
 	return false;
 }
 
-
-static inline void set_opt_mode(struct f2fs_sb_info *sbi, unsigned int mt)
+static inline bool f2fs_lfs_mode(struct f2fs_sb_info *sbi)
 {
-	clear_opt(sbi, ADAPTIVE);
-	clear_opt(sbi, LFS);
-
-	switch (mt) {
-	case F2FS_MOUNT_ADAPTIVE:
-		set_opt(sbi, ADAPTIVE);
-		break;
-	case F2FS_MOUNT_LFS:
-		set_opt(sbi, LFS);
-		break;
-	}
+	return F2FS_OPTION(sbi).fs_mode == FS_MODE_LFS;
 }
 
-static inline bool f2fs_may_encrypt(struct inode *inode)
+static inline bool f2fs_may_compress(struct inode *inode)
 {
-#ifdef CONFIG_FS_ENCRYPTION
-	umode_t mode = inode->i_mode;
+	if (IS_SWAPFILE(inode) || f2fs_is_pinned_file(inode) ||
+				f2fs_is_atomic_file(inode) ||
+				f2fs_is_volatile_file(inode))
+		return false;
+	return S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode);
+}
 
-	return (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode));
-#else
-	return false;
-#endif
+static inline void f2fs_i_compr_blocks_update(struct inode *inode,
+						u64 blocks, bool add)
+{
+	int diff = F2FS_I(inode)->i_cluster_size - blocks;
+	struct f2fs_inode_info *fi = F2FS_I(inode);
+
+	/* don't update i_compr_blocks if saved blocks were released */
+	if (!add && !atomic_read(&fi->i_compr_blocks))
+		return;
+
+	if (add) {
+		atomic_add(diff, &fi->i_compr_blocks);
+		stat_add_compr_blocks(inode, diff);
+	} else {
+		atomic_sub(diff, &fi->i_compr_blocks);
+		stat_sub_compr_blocks(inode, diff);
+	}
+	f2fs_mark_inode_dirty_sync(inode, true);
 }
 
 static inline int block_unaligned_IO(struct inode *inode,
@@ -3705,7 +4090,7 @@ static inline int allow_outplace_dio(struct inode *inode,
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	int rw = iov_iter_rw(iter);
 
-	return (test_opt(sbi, LFS) && (rw == WRITE) &&
+	return (f2fs_lfs_mode(sbi) && (rw == WRITE) &&
 				!block_unaligned_IO(inode, iocb, iter));
 }
 
@@ -3715,7 +4100,11 @@ static inline bool f2fs_force_buffered_io(struct inode *inode,
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	int rw = iov_iter_rw(iter);
 
-	if (f2fs_post_read_required(inode))
+	if (!fscrypt_dio_supported(iocb, iter))
+		return true;
+	if (fsverity_active(inode))
+		return true;
+	if (f2fs_compressed_file(inode))
 		return true;
 	if (f2fs_is_multi_device(sbi))
 		return true;
@@ -3725,7 +4114,7 @@ static inline bool f2fs_force_buffered_io(struct inode *inode,
 	 */
 	if (f2fs_sb_has_blkzoned(sbi))
 		return true;
-	if (test_opt(sbi, LFS) && (rw == WRITE)) {
+	if (f2fs_lfs_mode(sbi) && (rw == WRITE)) {
 		if (block_unaligned_IO(inode, iocb, iter))
 			return true;
 		if (F2FS_IO_ALIGNED(sbi))
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 5d94abe..183c77b 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -21,6 +21,7 @@
 #include <linux/uuid.h>
 #include <linux/file.h>
 #include <linux/nls.h>
+#include <linux/sched/signal.h>
 
 #include "f2fs.h"
 #include "node.h"
@@ -30,6 +31,7 @@
 #include "gc.h"
 #include "trace.h"
 #include <trace/events/f2fs.h>
+#include <uapi/linux/f2fs.h>
 
 static vm_fault_t f2fs_filemap_fault(struct vm_fault *vmf)
 {
@@ -40,6 +42,10 @@ static vm_fault_t f2fs_filemap_fault(struct vm_fault *vmf)
 	ret = filemap_fault(vmf);
 	up_read(&F2FS_I(inode)->i_mmap_sem);
 
+	if (!ret)
+		f2fs_update_iostat(F2FS_I_SB(inode), APP_MAPPED_READ_IO,
+							F2FS_BLKSIZE);
+
 	trace_f2fs_filemap_fault(inode, vmf->pgoff, (unsigned long)ret);
 
 	return ret;
@@ -51,7 +57,8 @@ static vm_fault_t f2fs_vm_page_mkwrite(struct vm_fault *vmf)
 	struct inode *inode = file_inode(vmf->vma->vm_file);
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct dnode_of_data dn;
-	int err;
+	bool need_alloc = true;
+	int err = 0;
 
 	if (unlikely(f2fs_cp_error(sbi))) {
 		err = -EIO;
@@ -63,8 +70,25 @@ static vm_fault_t f2fs_vm_page_mkwrite(struct vm_fault *vmf)
 		goto err;
 	}
 
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	if (f2fs_compressed_file(inode)) {
+		int ret = f2fs_is_compressed_cluster(inode, page->index);
+
+		if (ret < 0) {
+			err = ret;
+			goto err;
+		} else if (ret) {
+			if (ret < F2FS_I(inode)->i_cluster_size) {
+				err = -EAGAIN;
+				goto err;
+			}
+			need_alloc = false;
+		}
+	}
+#endif
 	/* should do out of any locked page */
-	f2fs_balance_fs(sbi, true);
+	if (need_alloc)
+		f2fs_balance_fs(sbi, true);
 
 	sb_start_pagefault(inode->i_sb);
 
@@ -81,18 +105,27 @@ static vm_fault_t f2fs_vm_page_mkwrite(struct vm_fault *vmf)
 		goto out_sem;
 	}
 
-	/* block allocation */
-	__do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO, true);
-	set_new_dnode(&dn, inode, NULL, NULL, 0);
-	err = f2fs_get_block(&dn, page->index);
-	f2fs_put_dnode(&dn);
-	__do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO, false);
+	if (need_alloc) {
+		/* block allocation */
+		f2fs_do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO, true);
+		set_new_dnode(&dn, inode, NULL, NULL, 0);
+		err = f2fs_get_block(&dn, page->index);
+		f2fs_put_dnode(&dn);
+		f2fs_do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO, false);
+	}
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	if (!need_alloc) {
+		set_new_dnode(&dn, inode, NULL, NULL, 0);
+		err = f2fs_get_dnode_of_data(&dn, page->index, LOOKUP_NODE);
+		f2fs_put_dnode(&dn);
+	}
+#endif
 	if (err) {
 		unlock_page(page);
 		goto out_sem;
 	}
 
-	/* fill the page */
 	f2fs_wait_on_page_writeback(page, DATA, false, true);
 
 	/* wait for GCed page writeback via META_MAPPING */
@@ -138,9 +171,11 @@ static int get_parent_ino(struct inode *inode, nid_t *pino)
 {
 	struct dentry *dentry;
 
-	inode = igrab(inode);
-	dentry = d_find_any_alias(inode);
-	iput(inode);
+	/*
+	 * Make sure to get the non-deleted alias.  The alias associated with
+	 * the open file descriptor being fsync()'ed may be deleted already.
+	 */
+	dentry = d_find_alias(inode);
 	if (!dentry)
 		return 0;
 
@@ -156,6 +191,8 @@ static inline enum cp_reason_type need_do_checkpoint(struct inode *inode)
 
 	if (!S_ISREG(inode->i_mode))
 		cp_reason = CP_NON_REGULAR;
+	else if (f2fs_compressed_file(inode))
+		cp_reason = CP_COMPRESSED;
 	else if (inode->i_nlink != 1)
 		cp_reason = CP_HARDLINK;
 	else if (is_sbi_flag_set(sbi, SBI_NEED_CP))
@@ -340,32 +377,15 @@ int f2fs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
 	return f2fs_do_sync_file(file, start, end, datasync, false);
 }
 
-static pgoff_t __get_first_dirty_index(struct address_space *mapping,
-						pgoff_t pgofs, int whence)
-{
-	struct page *page;
-	int nr_pages;
-
-	if (whence != SEEK_DATA)
-		return 0;
-
-	/* find first dirty page index */
-	nr_pages = find_get_pages_tag(mapping, &pgofs, PAGECACHE_TAG_DIRTY,
-				      1, &page);
-	if (!nr_pages)
-		return ULONG_MAX;
-	pgofs = page->index;
-	put_page(page);
-	return pgofs;
-}
-
-static bool __found_offset(struct f2fs_sb_info *sbi, block_t blkaddr,
-				pgoff_t dirty, pgoff_t pgofs, int whence)
+static bool __found_offset(struct address_space *mapping, block_t blkaddr,
+				pgoff_t index, int whence)
 {
 	switch (whence) {
 	case SEEK_DATA:
-		if ((blkaddr == NEW_ADDR && dirty == pgofs) ||
-			__is_valid_data_blkaddr(blkaddr))
+		if (__is_valid_data_blkaddr(blkaddr))
+			return true;
+		if (blkaddr == NEW_ADDR &&
+		    xa_get_mark(&mapping->i_pages, index, PAGECACHE_TAG_DIRTY))
 			return true;
 		break;
 	case SEEK_HOLE:
@@ -381,7 +401,7 @@ static loff_t f2fs_seek_block(struct file *file, loff_t offset, int whence)
 	struct inode *inode = file->f_mapping->host;
 	loff_t maxbytes = inode->i_sb->s_maxbytes;
 	struct dnode_of_data dn;
-	pgoff_t pgofs, end_offset, dirty;
+	pgoff_t pgofs, end_offset;
 	loff_t data_ofs = offset;
 	loff_t isize;
 	int err = 0;
@@ -393,16 +413,18 @@ static loff_t f2fs_seek_block(struct file *file, loff_t offset, int whence)
 		goto fail;
 
 	/* handle inline data case */
-	if (f2fs_has_inline_data(inode) || f2fs_has_inline_dentry(inode)) {
-		if (whence == SEEK_HOLE)
+	if (f2fs_has_inline_data(inode)) {
+		if (whence == SEEK_HOLE) {
 			data_ofs = isize;
-		goto found;
+			goto found;
+		} else if (whence == SEEK_DATA) {
+			data_ofs = offset;
+			goto found;
+		}
 	}
 
 	pgofs = (pgoff_t)(offset >> PAGE_SHIFT);
 
-	dirty = __get_first_dirty_index(inode->i_mapping, pgofs, whence);
-
 	for (; data_ofs < isize; data_ofs = (loff_t)pgofs << PAGE_SHIFT) {
 		set_new_dnode(&dn, inode, NULL, NULL, 0);
 		err = f2fs_get_dnode_of_data(&dn, pgofs, LOOKUP_NODE);
@@ -426,8 +448,7 @@ static loff_t f2fs_seek_block(struct file *file, loff_t offset, int whence)
 				data_ofs = (loff_t)pgofs << PAGE_SHIFT) {
 			block_t blkaddr;
 
-			blkaddr = datablock_addr(dn.inode,
-					dn.node_page, dn.ofs_in_node);
+			blkaddr = f2fs_data_blkaddr(&dn);
 
 			if (__is_valid_data_blkaddr(blkaddr) &&
 				!f2fs_is_valid_blkaddr(F2FS_I_SB(inode),
@@ -436,7 +457,7 @@ static loff_t f2fs_seek_block(struct file *file, loff_t offset, int whence)
 				goto fail;
 			}
 
-			if (__found_offset(F2FS_I_SB(inode), blkaddr, dirty,
+			if (__found_offset(file->f_mapping, blkaddr,
 							pgofs, whence)) {
 				f2fs_put_dnode(&dn);
 				goto found;
@@ -486,6 +507,9 @@ static int f2fs_file_mmap(struct file *file, struct vm_area_struct *vma)
 	if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
 		return -EIO;
 
+	if (!f2fs_is_compress_backend_ready(inode))
+		return -EOPNOTSUPP;
+
 	/* we don't need to use inline_data strictly */
 	err = f2fs_convert_inline_inode(inode);
 	if (err)
@@ -493,6 +517,7 @@ static int f2fs_file_mmap(struct file *file, struct vm_area_struct *vma)
 
 	file_accessed(file);
 	vma->vm_ops = &f2fs_file_vm_ops;
+	set_inode_flag(inode, FI_MMAP_FILE);
 	return 0;
 }
 
@@ -503,6 +528,9 @@ static int f2fs_file_open(struct inode *inode, struct file *filp)
 	if (err)
 		return err;
 
+	if (!f2fs_is_compress_backend_ready(inode))
+		return -EOPNOTSUPP;
+
 	err = fsverity_file_open(inode, filp);
 	if (err)
 		return err;
@@ -519,6 +547,10 @@ void f2fs_truncate_data_blocks_range(struct dnode_of_data *dn, int count)
 	int nr_free = 0, ofs = dn->ofs_in_node, len = count;
 	__le32 *addr;
 	int base = 0;
+	bool compressed_cluster = false;
+	int cluster_index = 0, valid_blocks = 0;
+	int cluster_size = F2FS_I(dn->inode)->i_cluster_size;
+	bool released = !atomic_read(&F2FS_I(dn->inode)->i_compr_blocks);
 
 	if (IS_INODE(dn->node_page) && f2fs_has_extra_attr(dn->inode))
 		base = get_extra_isize(dn->inode);
@@ -526,26 +558,45 @@ void f2fs_truncate_data_blocks_range(struct dnode_of_data *dn, int count)
 	raw_node = F2FS_NODE(dn->node_page);
 	addr = blkaddr_in_node(raw_node) + base + ofs;
 
-	for (; count > 0; count--, addr++, dn->ofs_in_node++) {
+	/* Assumption: truncateion starts with cluster */
+	for (; count > 0; count--, addr++, dn->ofs_in_node++, cluster_index++) {
 		block_t blkaddr = le32_to_cpu(*addr);
 
+		if (f2fs_compressed_file(dn->inode) &&
+					!(cluster_index & (cluster_size - 1))) {
+			if (compressed_cluster)
+				f2fs_i_compr_blocks_update(dn->inode,
+							valid_blocks, false);
+			compressed_cluster = (blkaddr == COMPRESS_ADDR);
+			valid_blocks = 0;
+		}
+
 		if (blkaddr == NULL_ADDR)
 			continue;
 
 		dn->data_blkaddr = NULL_ADDR;
 		f2fs_set_data_blkaddr(dn);
 
-		if (__is_valid_data_blkaddr(blkaddr) &&
-			!f2fs_is_valid_blkaddr(sbi, blkaddr,
+		if (__is_valid_data_blkaddr(blkaddr)) {
+			if (!f2fs_is_valid_blkaddr(sbi, blkaddr,
 					DATA_GENERIC_ENHANCE))
-			continue;
+				continue;
+			if (compressed_cluster)
+				valid_blocks++;
+		}
 
-		f2fs_invalidate_blocks(sbi, blkaddr);
 		if (dn->ofs_in_node == 0 && IS_INODE(dn->node_page))
 			clear_inode_flag(dn->inode, FI_FIRST_BLOCK_WRITTEN);
-		nr_free++;
+
+		f2fs_invalidate_blocks(sbi, blkaddr);
+
+		if (!released || blkaddr != COMPRESS_ADDR)
+			nr_free++;
 	}
 
+	if (compressed_cluster)
+		f2fs_i_compr_blocks_update(dn->inode, valid_blocks, false);
+
 	if (nr_free) {
 		pgoff_t fofs;
 		/*
@@ -603,7 +654,7 @@ static int truncate_partial_data_page(struct inode *inode, u64 from,
 	return 0;
 }
 
-int f2fs_truncate_blocks(struct inode *inode, u64 from, bool lock)
+int f2fs_do_truncate_blocks(struct inode *inode, u64 from, bool lock)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct dnode_of_data dn;
@@ -668,6 +719,36 @@ int f2fs_truncate_blocks(struct inode *inode, u64 from, bool lock)
 	return err;
 }
 
+int f2fs_truncate_blocks(struct inode *inode, u64 from, bool lock)
+{
+	u64 free_from = from;
+	int err;
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	/*
+	 * for compressed file, only support cluster size
+	 * aligned truncation.
+	 */
+	if (f2fs_compressed_file(inode))
+		free_from = round_up(from,
+				F2FS_I(inode)->i_cluster_size << PAGE_SHIFT);
+#endif
+
+	err = f2fs_do_truncate_blocks(inode, free_from, lock);
+	if (err)
+		return err;
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	if (from != free_from) {
+		err = f2fs_truncate_partial_cluster(inode, from, lock);
+		if (err)
+			return err;
+	}
+#endif
+
+	return 0;
+}
+
 int f2fs_truncate(struct inode *inode)
 {
 	int err;
@@ -682,7 +763,7 @@ int f2fs_truncate(struct inode *inode)
 	trace_f2fs_truncate(inode);
 
 	if (time_to_inject(F2FS_I_SB(inode), FAULT_TRUNCATE)) {
-		f2fs_show_injection_info(FAULT_TRUNCATE);
+		f2fs_show_injection_info(F2FS_I_SB(inode), FAULT_TRUNCATE);
 		return -EIO;
 	}
 
@@ -719,6 +800,8 @@ int f2fs_getattr(const struct path *path, struct kstat *stat,
 	}
 
 	flags = fi->i_flags;
+	if (flags & F2FS_COMPR_FL)
+		stat->attributes |= STATX_ATTR_COMPRESSED;
 	if (flags & F2FS_APPEND_FL)
 		stat->attributes |= STATX_ATTR_APPEND;
 	if (IS_ENCRYPTED(inode))
@@ -727,11 +810,15 @@ int f2fs_getattr(const struct path *path, struct kstat *stat,
 		stat->attributes |= STATX_ATTR_IMMUTABLE;
 	if (flags & F2FS_NODUMP_FL)
 		stat->attributes |= STATX_ATTR_NODUMP;
+	if (IS_VERITY(inode))
+		stat->attributes |= STATX_ATTR_VERITY;
 
-	stat->attributes_mask |= (STATX_ATTR_APPEND |
+	stat->attributes_mask |= (STATX_ATTR_COMPRESSED |
+				  STATX_ATTR_APPEND |
 				  STATX_ATTR_ENCRYPTED |
 				  STATX_ATTR_IMMUTABLE |
-				  STATX_ATTR_NODUMP);
+				  STATX_ATTR_NODUMP |
+				  STATX_ATTR_VERITY);
 
 	generic_fillattr(inode, stat);
 
@@ -778,6 +865,10 @@ int f2fs_setattr(struct dentry *dentry, struct iattr *attr)
 	if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
 		return -EIO;
 
+	if ((attr->ia_valid & ATTR_SIZE) &&
+		!f2fs_is_compress_backend_ready(inode))
+		return -EOPNOTSUPP;
+
 	err = setattr_prepare(dentry, attr);
 	if (err)
 		return err;
@@ -848,10 +939,10 @@ int f2fs_setattr(struct dentry *dentry, struct iattr *attr)
 		if (err)
 			return err;
 
-		down_write(&F2FS_I(inode)->i_sem);
+		spin_lock(&F2FS_I(inode)->i_size_lock);
 		inode->i_mtime = inode->i_ctime = current_time(inode);
 		F2FS_I(inode)->last_disk_size = i_size_read(inode);
-		up_write(&F2FS_I(inode)->i_sem);
+		spin_unlock(&F2FS_I(inode)->i_size_lock);
 	}
 
 	__setattr_copy(inode, attr);
@@ -878,9 +969,7 @@ const struct inode_operations f2fs_file_inode_operations = {
 	.setattr	= f2fs_setattr,
 	.get_acl	= f2fs_get_acl,
 	.set_acl	= f2fs_set_acl,
-#ifdef CONFIG_F2FS_FS_XATTR
 	.listxattr	= f2fs_listxattr,
-#endif
 	.fiemap		= f2fs_fiemap,
 };
 
@@ -1018,8 +1107,8 @@ static int __read_out_blkaddrs(struct inode *inode, block_t *blkaddr,
 	} else if (ret == -ENOENT) {
 		if (dn.max_level == 0)
 			return -ENOENT;
-		done = min((pgoff_t)ADDRS_PER_BLOCK(inode) - dn.ofs_in_node,
-									len);
+		done = min((pgoff_t)ADDRS_PER_BLOCK(inode) -
+						dn.ofs_in_node, len);
 		blkaddr += done;
 		do_replace += done;
 		goto next;
@@ -1028,8 +1117,7 @@ static int __read_out_blkaddrs(struct inode *inode, block_t *blkaddr,
 	done = min((pgoff_t)ADDRS_PER_PAGE(dn.node_page, inode) -
 							dn.ofs_in_node, len);
 	for (i = 0; i < done; i++, blkaddr++, do_replace++, dn.ofs_in_node++) {
-		*blkaddr = datablock_addr(dn.inode,
-					dn.node_page, dn.ofs_in_node);
+		*blkaddr = f2fs_data_blkaddr(&dn);
 
 		if (__is_valid_data_blkaddr(*blkaddr) &&
 			!f2fs_is_valid_blkaddr(sbi, *blkaddr,
@@ -1040,7 +1128,7 @@ static int __read_out_blkaddrs(struct inode *inode, block_t *blkaddr,
 
 		if (!f2fs_is_checkpointed_data(sbi, *blkaddr)) {
 
-			if (test_opt(sbi, LFS)) {
+			if (f2fs_lfs_mode(sbi)) {
 				f2fs_put_dnode(&dn);
 				return -EOPNOTSUPP;
 			}
@@ -1118,8 +1206,7 @@ static int __clone_blkaddrs(struct inode *src_inode, struct inode *dst_inode,
 				ADDRS_PER_PAGE(dn.node_page, dst_inode) -
 						dn.ofs_in_node, len - i);
 			do {
-				dn.data_blkaddr = datablock_addr(dn.inode,
-						dn.node_page, dn.ofs_in_node);
+				dn.data_blkaddr = f2fs_data_blkaddr(&dn);
 				f2fs_truncate_data_blocks_range(&dn, 1);
 
 				if (do_replace[i]) {
@@ -1182,13 +1269,13 @@ static int __exchange_data_block(struct inode *src_inode,
 
 		src_blkaddr = f2fs_kvzalloc(F2FS_I_SB(src_inode),
 					array_size(olen, sizeof(block_t)),
-					GFP_KERNEL);
+					GFP_NOFS);
 		if (!src_blkaddr)
 			return -ENOMEM;
 
 		do_replace = f2fs_kvzalloc(F2FS_I_SB(src_inode),
 					array_size(olen, sizeof(int)),
-					GFP_KERNEL);
+					GFP_NOFS);
 		if (!do_replace) {
 			kvfree(src_blkaddr);
 			return -ENOMEM;
@@ -1276,8 +1363,6 @@ static int f2fs_collapse_range(struct inode *inode, loff_t offset, loff_t len)
 	truncate_pagecache(inode, offset);
 
 	new_size = i_size_read(inode) - len;
-	truncate_pagecache(inode, new_size);
-
 	ret = f2fs_truncate_blocks(inode, new_size, true);
 	up_write(&F2FS_I(inode)->i_mmap_sem);
 	if (!ret)
@@ -1295,8 +1380,7 @@ static int f2fs_do_zero_range(struct dnode_of_data *dn, pgoff_t start,
 	int ret;
 
 	for (; index < end; index++, dn->ofs_in_node++) {
-		if (datablock_addr(dn->inode, dn->node_page,
-					dn->ofs_in_node) == NULL_ADDR)
+		if (f2fs_data_blkaddr(dn) == NULL_ADDR)
 			count++;
 	}
 
@@ -1307,8 +1391,7 @@ static int f2fs_do_zero_range(struct dnode_of_data *dn, pgoff_t start,
 
 	dn->ofs_in_node = ofs_in_node;
 	for (index = start; index < end; index++, dn->ofs_in_node++) {
-		dn->data_blkaddr = datablock_addr(dn->inode,
-					dn->node_page, dn->ofs_in_node);
+		dn->data_blkaddr = f2fs_data_blkaddr(dn);
 		/*
 		 * f2fs_reserve_new_blocks will not guarantee entire block
 		 * allocation.
@@ -1540,12 +1623,49 @@ static int expand_inode_data(struct inode *inode, loff_t offset,
 	if (off_end)
 		map.m_len++;
 
-	if (f2fs_is_pinned_file(inode))
-		map.m_seg_type = CURSEG_COLD_DATA;
+	if (!map.m_len)
+		return 0;
 
-	err = f2fs_map_blocks(inode, &map, 1, (f2fs_is_pinned_file(inode) ?
-						F2FS_GET_BLOCK_PRE_DIO :
-						F2FS_GET_BLOCK_PRE_AIO));
+	if (f2fs_is_pinned_file(inode)) {
+		block_t len = (map.m_len >> sbi->log_blocks_per_seg) <<
+					sbi->log_blocks_per_seg;
+		block_t done = 0;
+
+		if (map.m_len % sbi->blocks_per_seg)
+			len += sbi->blocks_per_seg;
+
+		map.m_len = sbi->blocks_per_seg;
+next_alloc:
+		if (has_not_enough_free_secs(sbi, 0,
+			GET_SEC_FROM_SEG(sbi, overprovision_segments(sbi)))) {
+			down_write(&sbi->gc_lock);
+			err = f2fs_gc(sbi, true, false, NULL_SEGNO);
+			if (err && err != -ENODATA && err != -EAGAIN)
+				goto out_err;
+		}
+
+		down_write(&sbi->pin_sem);
+
+		f2fs_lock_op(sbi);
+		f2fs_allocate_new_segment(sbi, CURSEG_COLD_DATA_PINNED);
+		f2fs_unlock_op(sbi);
+
+		map.m_seg_type = CURSEG_COLD_DATA_PINNED;
+		err = f2fs_map_blocks(inode, &map, 1, F2FS_GET_BLOCK_PRE_DIO);
+
+		up_write(&sbi->pin_sem);
+
+		done += map.m_len;
+		len -= map.m_len;
+		map.m_lblk += map.m_len;
+		if (!err && len)
+			goto next_alloc;
+
+		map.m_len = done;
+	} else {
+		err = f2fs_map_blocks(inode, &map, 1, F2FS_GET_BLOCK_PRE_AIO);
+	}
+out_err:
 	if (err) {
 		pgoff_t last_off;
 
@@ -1581,6 +1701,8 @@ static long f2fs_fallocate(struct file *file, int mode,
 		return -EIO;
 	if (!f2fs_is_checkpoint_ready(F2FS_I_SB(inode)))
 		return -ENOSPC;
+	if (!f2fs_is_compress_backend_ready(inode))
+		return -EOPNOTSUPP;
 
 	/* f2fs only support ->fallocate for regular file */
 	if (!S_ISREG(inode->i_mode))
@@ -1590,6 +1712,11 @@ static long f2fs_fallocate(struct file *file, int mode,
 		(mode & (FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_INSERT_RANGE)))
 		return -EOPNOTSUPP;
 
+	if (f2fs_compressed_file(inode) &&
+		(mode & (FALLOC_FL_PUNCH_HOLE | FALLOC_FL_COLLAPSE_RANGE |
+			FALLOC_FL_ZERO_RANGE | FALLOC_FL_INSERT_RANGE)))
+		return -EOPNOTSUPP;
+
 	if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE |
 			FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_ZERO_RANGE |
 			FALLOC_FL_INSERT_RANGE))
@@ -1667,19 +1794,52 @@ static int f2fs_file_flush(struct file *file, fl_owner_t id)
 static int f2fs_setflags_common(struct inode *inode, u32 iflags, u32 mask)
 {
 	struct f2fs_inode_info *fi = F2FS_I(inode);
+	u32 masked_flags = fi->i_flags & mask;
+
+	f2fs_bug_on(F2FS_I_SB(inode), (iflags & ~mask));
 
 	/* Is it quota file? Do not allow user to mess with it */
 	if (IS_NOQUOTA(inode))
 		return -EPERM;
 
-	if ((iflags ^ fi->i_flags) & F2FS_CASEFOLD_FL) {
+	if ((iflags ^ masked_flags) & F2FS_CASEFOLD_FL) {
 		if (!f2fs_sb_has_casefold(F2FS_I_SB(inode)))
 			return -EOPNOTSUPP;
 		if (!f2fs_empty_dir(inode))
 			return -ENOTEMPTY;
 	}
 
+	if (iflags & (F2FS_COMPR_FL | F2FS_NOCOMP_FL)) {
+		if (!f2fs_sb_has_compression(F2FS_I_SB(inode)))
+			return -EOPNOTSUPP;
+		if ((iflags & F2FS_COMPR_FL) && (iflags & F2FS_NOCOMP_FL))
+			return -EINVAL;
+	}
+
+	if ((iflags ^ masked_flags) & F2FS_COMPR_FL) {
+		if (masked_flags & F2FS_COMPR_FL) {
+			if (!f2fs_disable_compressed_file(inode))
+				return -EINVAL;
+		}
+		if (iflags & F2FS_NOCOMP_FL)
+			return -EINVAL;
+		if (iflags & F2FS_COMPR_FL) {
+			if (!f2fs_may_compress(inode))
+				return -EINVAL;
+			if (S_ISREG(inode->i_mode) && inode->i_size)
+				return -EINVAL;
+
+			set_compress_context(inode);
+		}
+	}
+	if ((iflags ^ masked_flags) & F2FS_NOCOMP_FL) {
+		if (masked_flags & F2FS_COMPR_FL)
+			return -EINVAL;
+	}
+
 	fi->i_flags = iflags | (fi->i_flags & ~mask);
+	f2fs_bug_on(F2FS_I_SB(inode), (fi->i_flags & F2FS_COMPR_FL) &&
+					(fi->i_flags & F2FS_NOCOMP_FL));
 
 	if (fi->i_flags & F2FS_PROJINHERIT_FL)
 		set_inode_flag(inode, FI_PROJ_INHERIT);
@@ -1705,11 +1865,13 @@ static const struct {
 	u32 iflag;
 	u32 fsflag;
 } f2fs_fsflags_map[] = {
+	{ F2FS_COMPR_FL,	FS_COMPR_FL },
 	{ F2FS_SYNC_FL,		FS_SYNC_FL },
 	{ F2FS_IMMUTABLE_FL,	FS_IMMUTABLE_FL },
 	{ F2FS_APPEND_FL,	FS_APPEND_FL },
 	{ F2FS_NODUMP_FL,	FS_NODUMP_FL },
 	{ F2FS_NOATIME_FL,	FS_NOATIME_FL },
+	{ F2FS_NOCOMP_FL,	FS_NOCOMP_FL },
 	{ F2FS_INDEX_FL,	FS_INDEX_FL },
 	{ F2FS_DIRSYNC_FL,	FS_DIRSYNC_FL },
 	{ F2FS_PROJINHERIT_FL,	FS_PROJINHERIT_FL },
@@ -1717,11 +1879,13 @@ static const struct {
 };
 
 #define F2FS_GETTABLE_FS_FL (		\
+		FS_COMPR_FL |		\
 		FS_SYNC_FL |		\
 		FS_IMMUTABLE_FL |	\
 		FS_APPEND_FL |		\
 		FS_NODUMP_FL |		\
 		FS_NOATIME_FL |		\
+		FS_NOCOMP_FL |		\
 		FS_INDEX_FL |		\
 		FS_DIRSYNC_FL |		\
 		FS_PROJINHERIT_FL |	\
@@ -1732,11 +1896,13 @@ static const struct {
 		FS_CASEFOLD_FL)
 
 #define F2FS_SETTABLE_FS_FL (		\
+		FS_COMPR_FL |		\
 		FS_SYNC_FL |		\
 		FS_IMMUTABLE_FL |	\
 		FS_APPEND_FL |		\
 		FS_NODUMP_FL |		\
 		FS_NOATIME_FL |		\
+		FS_NOCOMP_FL |		\
 		FS_DIRSYNC_FL |		\
 		FS_PROJINHERIT_FL |	\
 		FS_CASEFOLD_FL)
@@ -1857,6 +2023,8 @@ static int f2fs_ioc_start_atomic_write(struct file *filp)
 
 	inode_lock(inode);
 
+	f2fs_disable_compressed_file(inode);
+
 	if (f2fs_is_atomic_file(inode)) {
 		if (is_inode_flag_set(inode, FI_ATOMIC_REVOKE_REQUEST))
 			ret = -EINVAL;
@@ -1895,7 +2063,6 @@ static int f2fs_ioc_start_atomic_write(struct file *filp)
 
 	f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
 	F2FS_I(inode)->inmem_task = current;
-	stat_inc_atomic_write(inode);
 	stat_update_max_atomic_write(inode);
 out:
 	inode_unlock(inode);
@@ -2270,6 +2437,14 @@ static int f2fs_ioc_get_encryption_key_status(struct file *filp,
 	return fscrypt_ioctl_get_key_status(filp, (void __user *)arg);
 }
 
+static int f2fs_ioc_get_encryption_nonce(struct file *filp, unsigned long arg)
+{
+	if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
+		return -EOPNOTSUPP;
+
+	return fscrypt_ioctl_get_nonce(filp, (void __user *)arg);
+}
+
 static int f2fs_ioc_gc(struct file *filp, unsigned long arg)
 {
 	struct inode *inode = file_inode(filp);
@@ -2291,12 +2466,12 @@ static int f2fs_ioc_gc(struct file *filp, unsigned long arg)
 		return ret;
 
 	if (!sync) {
-		if (!mutex_trylock(&sbi->gc_mutex)) {
+		if (!down_write_trylock(&sbi->gc_lock)) {
 			ret = -EBUSY;
 			goto out;
 		}
 	} else {
-		mutex_lock(&sbi->gc_mutex);
+		down_write(&sbi->gc_lock);
 	}
 
 	ret = f2fs_gc(sbi, sync, true, NULL_SEGNO);
@@ -2305,26 +2480,19 @@ static int f2fs_ioc_gc(struct file *filp, unsigned long arg)
 	return ret;
 }
 
-static int f2fs_ioc_gc_range(struct file *filp, unsigned long arg)
+static int __f2fs_ioc_gc_range(struct file *filp, struct f2fs_gc_range *range)
 {
-	struct inode *inode = file_inode(filp);
-	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
-	struct f2fs_gc_range range;
+	struct f2fs_sb_info *sbi = F2FS_I_SB(file_inode(filp));
 	u64 end;
 	int ret;
 
 	if (!capable(CAP_SYS_ADMIN))
 		return -EPERM;
-
-	if (copy_from_user(&range, (struct f2fs_gc_range __user *)arg,
-							sizeof(range)))
-		return -EFAULT;
-
 	if (f2fs_readonly(sbi->sb))
 		return -EROFS;
 
-	end = range.start + range.len;
-	if (end < range.start || range.start < MAIN_BLKADDR(sbi) ||
+	end = range->start + range->len;
+	if (end < range->start || range->start < MAIN_BLKADDR(sbi) ||
 					end >= MAX_BLKADDR(sbi))
 		return -EINVAL;
 
@@ -2333,24 +2501,39 @@ static int f2fs_ioc_gc_range(struct file *filp, unsigned long arg)
 		return ret;
 
 do_more:
-	if (!range.sync) {
-		if (!mutex_trylock(&sbi->gc_mutex)) {
+	if (!range->sync) {
+		if (!down_write_trylock(&sbi->gc_lock)) {
 			ret = -EBUSY;
 			goto out;
 		}
 	} else {
-		mutex_lock(&sbi->gc_mutex);
+		down_write(&sbi->gc_lock);
 	}
 
-	ret = f2fs_gc(sbi, range.sync, true, GET_SEGNO(sbi, range.start));
-	range.start += BLKS_PER_SEC(sbi);
-	if (range.start <= end)
+	ret = f2fs_gc(sbi, range->sync, true, GET_SEGNO(sbi, range->start));
+	if (ret) {
+		if (ret == -EBUSY)
+			ret = -EAGAIN;
+		goto out;
+	}
+	range->start += BLKS_PER_SEC(sbi);
+	if (range->start <= end)
 		goto do_more;
 out:
 	mnt_drop_write_file(filp);
 	return ret;
 }
 
+static int f2fs_ioc_gc_range(struct file *filp, unsigned long arg)
+{
+	struct f2fs_gc_range range;
+
+	if (copy_from_user(&range, (struct f2fs_gc_range __user *)arg,
+							sizeof(range)))
+		return -EFAULT;
+	return __f2fs_ioc_gc_range(filp, &range);
+}
+
 static int f2fs_ioc_write_checkpoint(struct file *filp, unsigned long arg)
 {
 	struct inode *inode = file_inode(filp);
@@ -2595,6 +2778,9 @@ static int f2fs_move_file_range(struct file *file_in, loff_t pos_in,
 	if (IS_ENCRYPTED(src) || IS_ENCRYPTED(dst))
 		return -EOPNOTSUPP;
 
+	if (pos_out < 0 || pos_in < 0)
+		return -EINVAL;
+
 	if (src == dst) {
 		if (pos_in == pos_out)
 			return 0;
@@ -2684,9 +2870,9 @@ static int f2fs_move_file_range(struct file *file_in, loff_t pos_in,
 	return ret;
 }
 
-static int f2fs_ioc_move_range(struct file *filp, unsigned long arg)
+static int __f2fs_ioc_move_range(struct file *filp,
+				struct f2fs_move_range *range)
 {
-	struct f2fs_move_range range;
 	struct fd dst;
 	int err;
 
@@ -2694,11 +2880,7 @@ static int f2fs_ioc_move_range(struct file *filp, unsigned long arg)
 			!(filp->f_mode & FMODE_WRITE))
 		return -EBADF;
 
-	if (copy_from_user(&range, (struct f2fs_move_range __user *)arg,
-							sizeof(range)))
-		return -EFAULT;
-
-	dst = fdget(range.dst_fd);
+	dst = fdget(range->dst_fd);
 	if (!dst.file)
 		return -EBADF;
 
@@ -2711,21 +2893,25 @@ static int f2fs_ioc_move_range(struct file *filp, unsigned long arg)
 	if (err)
 		goto err_out;
 
-	err = f2fs_move_file_range(filp, range.pos_in, dst.file,
-					range.pos_out, range.len);
+	err = f2fs_move_file_range(filp, range->pos_in, dst.file,
+					range->pos_out, range->len);
 
 	mnt_drop_write_file(filp);
-	if (err)
-		goto err_out;
-
-	if (copy_to_user((struct f2fs_move_range __user *)arg,
-						&range, sizeof(range)))
-		err = -EFAULT;
 err_out:
 	fdput(dst);
 	return err;
 }
 
+static int f2fs_ioc_move_range(struct file *filp, unsigned long arg)
+{
+	struct f2fs_move_range range;
+
+	if (copy_from_user(&range, (struct f2fs_move_range __user *)arg,
+							sizeof(range)))
+		return -EFAULT;
+	return __f2fs_ioc_move_range(filp, &range);
+}
+
 static int f2fs_ioc_flush_device(struct file *filp, unsigned long arg)
 {
 	struct inode *inode = file_inode(filp);
@@ -2770,7 +2956,7 @@ static int f2fs_ioc_flush_device(struct file *filp, unsigned long arg)
 	end_segno = min(start_segno + range.segments, dev_end_segno);
 
 	while (start_segno < end_segno) {
-		if (!mutex_trylock(&sbi->gc_mutex)) {
+		if (!down_write_trylock(&sbi->gc_lock)) {
 			ret = -EBUSY;
 			goto out;
 		}
@@ -3065,10 +3251,16 @@ static int f2fs_ioc_set_pin_file(struct file *filp, unsigned long arg)
 		ret = -EAGAIN;
 		goto out;
 	}
+
 	ret = f2fs_convert_inline_inode(inode);
 	if (ret)
 		goto out;
 
+	if (!f2fs_disable_compressed_file(inode)) {
+		ret = -EOPNOTSUPP;
+		goto out;
+	}
+
 	set_inode_flag(inode, FI_PIN_FILE);
 	ret = F2FS_I(inode)->i_gc_failures[GC_FAILURE_PIN];
 done:
@@ -3131,7 +3323,6 @@ static int f2fs_ioc_resize_fs(struct file *filp, unsigned long arg)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(file_inode(filp));
 	__u64 block_count;
-	int ret;
 
 	if (!capable(CAP_SYS_ADMIN))
 		return -EPERM;
@@ -3143,9 +3334,7 @@ static int f2fs_ioc_resize_fs(struct file *filp, unsigned long arg)
 			   sizeof(block_count)))
 		return -EFAULT;
 
-	ret = f2fs_resize_fs(sbi, block_count);
-
-	return ret;
+	return f2fs_resize_fs(sbi, block_count);
 }
 
 static int f2fs_ioc_enable_verity(struct file *filp, unsigned long arg)
@@ -3172,7 +3361,7 @@ static int f2fs_ioc_measure_verity(struct file *filp, unsigned long arg)
 	return fsverity_ioctl_measure(filp, (void __user *)arg);
 }
 
-static int f2fs_get_volume_name(struct file *filp, unsigned long arg)
+static int f2fs_ioc_getfslabel(struct file *filp, unsigned long arg)
 {
 	struct inode *inode = file_inode(filp);
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
@@ -3194,11 +3383,11 @@ static int f2fs_get_volume_name(struct file *filp, unsigned long arg)
 				min(FSLABEL_MAX, count)))
 		err = -EFAULT;
 
-	kvfree(vbuf);
+	kfree(vbuf);
 	return err;
 }
 
-static int f2fs_set_volume_name(struct file *filp, unsigned long arg)
+static int f2fs_ioc_setfslabel(struct file *filp, unsigned long arg)
 {
 	struct inode *inode = file_inode(filp);
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
@@ -3234,19 +3423,793 @@ static int f2fs_set_volume_name(struct file *filp, unsigned long arg)
 	return err;
 }
 
-long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
+static int f2fs_get_compress_blocks(struct file *filp, unsigned long arg)
 {
-	if (unlikely(f2fs_cp_error(F2FS_I_SB(file_inode(filp)))))
-		return -EIO;
-	if (!f2fs_is_checkpoint_ready(F2FS_I_SB(file_inode(filp))))
-		return -ENOSPC;
+	struct inode *inode = file_inode(filp);
+	__u64 blocks;
 
+	if (!f2fs_sb_has_compression(F2FS_I_SB(inode)))
+		return -EOPNOTSUPP;
+
+	if (!f2fs_compressed_file(inode))
+		return -EINVAL;
+
+	blocks = atomic_read(&F2FS_I(inode)->i_compr_blocks);
+	return put_user(blocks, (u64 __user *)arg);
+}
+
+static int release_compress_blocks(struct dnode_of_data *dn, pgoff_t count)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
+	unsigned int released_blocks = 0;
+	int cluster_size = F2FS_I(dn->inode)->i_cluster_size;
+	block_t blkaddr;
+	int i;
+
+	for (i = 0; i < count; i++) {
+		blkaddr = data_blkaddr(dn->inode, dn->node_page,
+						dn->ofs_in_node + i);
+
+		if (!__is_valid_data_blkaddr(blkaddr))
+			continue;
+		if (unlikely(!f2fs_is_valid_blkaddr(sbi, blkaddr,
+					DATA_GENERIC_ENHANCE)))
+			return -EFSCORRUPTED;
+	}
+
+	while (count) {
+		int compr_blocks = 0;
+
+		for (i = 0; i < cluster_size; i++, dn->ofs_in_node++) {
+			blkaddr = f2fs_data_blkaddr(dn);
+
+			if (i == 0) {
+				if (blkaddr == COMPRESS_ADDR)
+					continue;
+				dn->ofs_in_node += cluster_size;
+				goto next;
+			}
+
+			if (__is_valid_data_blkaddr(blkaddr))
+				compr_blocks++;
+
+			if (blkaddr != NEW_ADDR)
+				continue;
+
+			dn->data_blkaddr = NULL_ADDR;
+			f2fs_set_data_blkaddr(dn);
+		}
+
+		f2fs_i_compr_blocks_update(dn->inode, compr_blocks, false);
+		dec_valid_block_count(sbi, dn->inode,
+					cluster_size - compr_blocks);
+
+		released_blocks += cluster_size - compr_blocks;
+next:
+		count -= cluster_size;
+	}
+
+	return released_blocks;
+}
+
+static int f2fs_release_compress_blocks(struct file *filp, unsigned long arg)
+{
+	struct inode *inode = file_inode(filp);
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	pgoff_t page_idx = 0, last_idx;
+	unsigned int released_blocks = 0;
+	int ret;
+	int writecount;
+
+	if (!f2fs_sb_has_compression(F2FS_I_SB(inode)))
+		return -EOPNOTSUPP;
+
+	if (!f2fs_compressed_file(inode))
+		return -EINVAL;
+
+	if (f2fs_readonly(sbi->sb))
+		return -EROFS;
+
+	ret = mnt_want_write_file(filp);
+	if (ret)
+		return ret;
+
+	f2fs_balance_fs(F2FS_I_SB(inode), true);
+
+	inode_lock(inode);
+
+	writecount = atomic_read(&inode->i_writecount);
+	if ((filp->f_mode & FMODE_WRITE && writecount != 1) ||
+			(!(filp->f_mode & FMODE_WRITE) && writecount)) {
+		ret = -EBUSY;
+		goto out;
+	}
+
+	if (IS_IMMUTABLE(inode)) {
+		ret = -EINVAL;
+		goto out;
+	}
+
+	ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
+	if (ret)
+		goto out;
+
+	F2FS_I(inode)->i_flags |= F2FS_IMMUTABLE_FL;
+	f2fs_set_inode_flags(inode);
+	inode->i_ctime = current_time(inode);
+	f2fs_mark_inode_dirty_sync(inode, true);
+
+	if (!atomic_read(&F2FS_I(inode)->i_compr_blocks))
+		goto out;
+
+	down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
+	down_write(&F2FS_I(inode)->i_mmap_sem);
+
+	last_idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
+
+	while (page_idx < last_idx) {
+		struct dnode_of_data dn;
+		pgoff_t end_offset, count;
+
+		set_new_dnode(&dn, inode, NULL, NULL, 0);
+		ret = f2fs_get_dnode_of_data(&dn, page_idx, LOOKUP_NODE);
+		if (ret) {
+			if (ret == -ENOENT) {
+				page_idx = f2fs_get_next_page_offset(&dn,
+								page_idx);
+				ret = 0;
+				continue;
+			}
+			break;
+		}
+
+		end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
+		count = min(end_offset - dn.ofs_in_node, last_idx - page_idx);
+		count = round_up(count, F2FS_I(inode)->i_cluster_size);
+
+		ret = release_compress_blocks(&dn, count);
+
+		f2fs_put_dnode(&dn);
+
+		if (ret < 0)
+			break;
+
+		page_idx += count;
+		released_blocks += ret;
+	}
+
+	up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
+	up_write(&F2FS_I(inode)->i_mmap_sem);
+out:
+	inode_unlock(inode);
+
+	mnt_drop_write_file(filp);
+
+	if (ret >= 0) {
+		ret = put_user(released_blocks, (u64 __user *)arg);
+	} else if (released_blocks &&
+			atomic_read(&F2FS_I(inode)->i_compr_blocks)) {
+		set_sbi_flag(sbi, SBI_NEED_FSCK);
+		f2fs_warn(sbi, "%s: partial blocks were released i_ino=%lx "
+			"iblocks=%llu, released=%u, compr_blocks=%u, "
+			"run fsck to fix.",
+			__func__, inode->i_ino, inode->i_blocks,
+			released_blocks,
+			atomic_read(&F2FS_I(inode)->i_compr_blocks));
+	}
+
+	return ret;
+}
+
+static int reserve_compress_blocks(struct dnode_of_data *dn, pgoff_t count)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
+	unsigned int reserved_blocks = 0;
+	int cluster_size = F2FS_I(dn->inode)->i_cluster_size;
+	block_t blkaddr;
+	int i;
+
+	for (i = 0; i < count; i++) {
+		blkaddr = data_blkaddr(dn->inode, dn->node_page,
+						dn->ofs_in_node + i);
+
+		if (!__is_valid_data_blkaddr(blkaddr))
+			continue;
+		if (unlikely(!f2fs_is_valid_blkaddr(sbi, blkaddr,
+					DATA_GENERIC_ENHANCE)))
+			return -EFSCORRUPTED;
+	}
+
+	while (count) {
+		int compr_blocks = 0;
+		blkcnt_t reserved;
+		int ret;
+
+		for (i = 0; i < cluster_size; i++, dn->ofs_in_node++) {
+			blkaddr = f2fs_data_blkaddr(dn);
+
+			if (i == 0) {
+				if (blkaddr == COMPRESS_ADDR)
+					continue;
+				dn->ofs_in_node += cluster_size;
+				goto next;
+			}
+
+			if (__is_valid_data_blkaddr(blkaddr)) {
+				compr_blocks++;
+				continue;
+			}
+
+			dn->data_blkaddr = NEW_ADDR;
+			f2fs_set_data_blkaddr(dn);
+		}
+
+		reserved = cluster_size - compr_blocks;
+		ret = inc_valid_block_count(sbi, dn->inode, &reserved);
+		if (ret)
+			return ret;
+
+		if (reserved != cluster_size - compr_blocks)
+			return -ENOSPC;
+
+		f2fs_i_compr_blocks_update(dn->inode, compr_blocks, true);
+
+		reserved_blocks += reserved;
+next:
+		count -= cluster_size;
+	}
+
+	return reserved_blocks;
+}
+
+static int f2fs_reserve_compress_blocks(struct file *filp, unsigned long arg)
+{
+	struct inode *inode = file_inode(filp);
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	pgoff_t page_idx = 0, last_idx;
+	unsigned int reserved_blocks = 0;
+	int ret;
+
+	if (!f2fs_sb_has_compression(F2FS_I_SB(inode)))
+		return -EOPNOTSUPP;
+
+	if (!f2fs_compressed_file(inode))
+		return -EINVAL;
+
+	if (f2fs_readonly(sbi->sb))
+		return -EROFS;
+
+	ret = mnt_want_write_file(filp);
+	if (ret)
+		return ret;
+
+	if (atomic_read(&F2FS_I(inode)->i_compr_blocks))
+		goto out;
+
+	f2fs_balance_fs(F2FS_I_SB(inode), true);
+
+	inode_lock(inode);
+
+	if (!IS_IMMUTABLE(inode)) {
+		ret = -EINVAL;
+		goto unlock_inode;
+	}
+
+	down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
+	down_write(&F2FS_I(inode)->i_mmap_sem);
+
+	last_idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
+
+	while (page_idx < last_idx) {
+		struct dnode_of_data dn;
+		pgoff_t end_offset, count;
+
+		set_new_dnode(&dn, inode, NULL, NULL, 0);
+		ret = f2fs_get_dnode_of_data(&dn, page_idx, LOOKUP_NODE);
+		if (ret) {
+			if (ret == -ENOENT) {
+				page_idx = f2fs_get_next_page_offset(&dn,
+								page_idx);
+				ret = 0;
+				continue;
+			}
+			break;
+		}
+
+		end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
+		count = min(end_offset - dn.ofs_in_node, last_idx - page_idx);
+		count = round_up(count, F2FS_I(inode)->i_cluster_size);
+
+		ret = reserve_compress_blocks(&dn, count);
+
+		f2fs_put_dnode(&dn);
+
+		if (ret < 0)
+			break;
+
+		page_idx += count;
+		reserved_blocks += ret;
+	}
+
+	up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
+	up_write(&F2FS_I(inode)->i_mmap_sem);
+
+	if (ret >= 0) {
+		F2FS_I(inode)->i_flags &= ~F2FS_IMMUTABLE_FL;
+		f2fs_set_inode_flags(inode);
+		inode->i_ctime = current_time(inode);
+		f2fs_mark_inode_dirty_sync(inode, true);
+	}
+unlock_inode:
+	inode_unlock(inode);
+out:
+	mnt_drop_write_file(filp);
+
+	if (ret >= 0) {
+		ret = put_user(reserved_blocks, (u64 __user *)arg);
+	} else if (reserved_blocks &&
+			atomic_read(&F2FS_I(inode)->i_compr_blocks)) {
+		set_sbi_flag(sbi, SBI_NEED_FSCK);
+		f2fs_warn(sbi, "%s: partial blocks were released i_ino=%lx "
+			"iblocks=%llu, reserved=%u, compr_blocks=%u, "
+			"run fsck to fix.",
+			__func__, inode->i_ino, inode->i_blocks,
+			reserved_blocks,
+			atomic_read(&F2FS_I(inode)->i_compr_blocks));
+	}
+
+	return ret;
+}
+
+static int f2fs_secure_erase(struct block_device *bdev, struct inode *inode,
+		pgoff_t off, block_t block, block_t len, u32 flags)
+{
+	struct request_queue *q = bdev_get_queue(bdev);
+	sector_t sector = SECTOR_FROM_BLOCK(block);
+	sector_t nr_sects = SECTOR_FROM_BLOCK(len);
+	int ret = 0;
+
+	if (!q)
+		return -ENXIO;
+
+	if (flags & F2FS_TRIM_FILE_DISCARD)
+		ret = blkdev_issue_discard(bdev, sector, nr_sects, GFP_NOFS,
+						blk_queue_secure_erase(q) ?
+						BLKDEV_DISCARD_SECURE : 0);
+
+	if (!ret && (flags & F2FS_TRIM_FILE_ZEROOUT)) {
+		if (IS_ENCRYPTED(inode))
+			ret = fscrypt_zeroout_range(inode, off, block, len);
+		else
+			ret = blkdev_issue_zeroout(bdev, sector, nr_sects,
+					GFP_NOFS, 0);
+	}
+
+	return ret;
+}
+
+static int f2fs_sec_trim_file(struct file *filp, unsigned long arg)
+{
+	struct inode *inode = file_inode(filp);
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	struct address_space *mapping = inode->i_mapping;
+	struct block_device *prev_bdev = NULL;
+	struct f2fs_sectrim_range range;
+	pgoff_t index, pg_end, prev_index = 0;
+	block_t prev_block = 0, len = 0;
+	loff_t end_addr;
+	bool to_end = false;
+	int ret = 0;
+
+	if (!(filp->f_mode & FMODE_WRITE))
+		return -EBADF;
+
+	if (copy_from_user(&range, (struct f2fs_sectrim_range __user *)arg,
+				sizeof(range)))
+		return -EFAULT;
+
+	if (range.flags == 0 || (range.flags & ~F2FS_TRIM_FILE_MASK) ||
+			!S_ISREG(inode->i_mode))
+		return -EINVAL;
+
+	if (((range.flags & F2FS_TRIM_FILE_DISCARD) &&
+			!f2fs_hw_support_discard(sbi)) ||
+			((range.flags & F2FS_TRIM_FILE_ZEROOUT) &&
+			 IS_ENCRYPTED(inode) && f2fs_is_multi_device(sbi)))
+		return -EOPNOTSUPP;
+
+	file_start_write(filp);
+	inode_lock(inode);
+
+	if (f2fs_is_atomic_file(inode) || f2fs_compressed_file(inode) ||
+			range.start >= inode->i_size) {
+		ret = -EINVAL;
+		goto err;
+	}
+
+	if (range.len == 0)
+		goto err;
+
+	if (inode->i_size - range.start > range.len) {
+		end_addr = range.start + range.len;
+	} else {
+		end_addr = range.len == (u64)-1 ?
+			sbi->sb->s_maxbytes : inode->i_size;
+		to_end = true;
+	}
+
+	if (!IS_ALIGNED(range.start, F2FS_BLKSIZE) ||
+			(!to_end && !IS_ALIGNED(end_addr, F2FS_BLKSIZE))) {
+		ret = -EINVAL;
+		goto err;
+	}
+
+	index = F2FS_BYTES_TO_BLK(range.start);
+	pg_end = DIV_ROUND_UP(end_addr, F2FS_BLKSIZE);
+
+	ret = f2fs_convert_inline_inode(inode);
+	if (ret)
+		goto err;
+
+	down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
+	down_write(&F2FS_I(inode)->i_mmap_sem);
+
+	ret = filemap_write_and_wait_range(mapping, range.start,
+			to_end ? LLONG_MAX : end_addr - 1);
+	if (ret)
+		goto out;
+
+	truncate_inode_pages_range(mapping, range.start,
+			to_end ? -1 : end_addr - 1);
+
+	while (index < pg_end) {
+		struct dnode_of_data dn;
+		pgoff_t end_offset, count;
+		int i;
+
+		set_new_dnode(&dn, inode, NULL, NULL, 0);
+		ret = f2fs_get_dnode_of_data(&dn, index, LOOKUP_NODE);
+		if (ret) {
+			if (ret == -ENOENT) {
+				index = f2fs_get_next_page_offset(&dn, index);
+				continue;
+			}
+			goto out;
+		}
+
+		end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
+		count = min(end_offset - dn.ofs_in_node, pg_end - index);
+		for (i = 0; i < count; i++, index++, dn.ofs_in_node++) {
+			struct block_device *cur_bdev;
+			block_t blkaddr = f2fs_data_blkaddr(&dn);
+
+			if (!__is_valid_data_blkaddr(blkaddr))
+				continue;
+
+			if (!f2fs_is_valid_blkaddr(sbi, blkaddr,
+						DATA_GENERIC_ENHANCE)) {
+				ret = -EFSCORRUPTED;
+				f2fs_put_dnode(&dn);
+				goto out;
+			}
+
+			cur_bdev = f2fs_target_device(sbi, blkaddr, NULL);
+			if (f2fs_is_multi_device(sbi)) {
+				int di = f2fs_target_device_index(sbi, blkaddr);
+
+				blkaddr -= FDEV(di).start_blk;
+			}
+
+			if (len) {
+				if (prev_bdev == cur_bdev &&
+						index == prev_index + len &&
+						blkaddr == prev_block + len) {
+					len++;
+				} else {
+					ret = f2fs_secure_erase(prev_bdev,
+						inode, prev_index, prev_block,
+						len, range.flags);
+					if (ret) {
+						f2fs_put_dnode(&dn);
+						goto out;
+					}
+
+					len = 0;
+				}
+			}
+
+			if (!len) {
+				prev_bdev = cur_bdev;
+				prev_index = index;
+				prev_block = blkaddr;
+				len = 1;
+			}
+		}
+
+		f2fs_put_dnode(&dn);
+
+		if (fatal_signal_pending(current)) {
+			ret = -EINTR;
+			goto out;
+		}
+		cond_resched();
+	}
+
+	if (len)
+		ret = f2fs_secure_erase(prev_bdev, inode, prev_index,
+				prev_block, len, range.flags);
+out:
+	up_write(&F2FS_I(inode)->i_mmap_sem);
+	up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
+err:
+	inode_unlock(inode);
+	file_end_write(filp);
+
+	return ret;
+}
+
+static int f2fs_ioc_get_compress_option(struct file *filp, unsigned long arg)
+{
+	struct inode *inode = file_inode(filp);
+	struct f2fs_comp_option option;
+
+	if (!f2fs_sb_has_compression(F2FS_I_SB(inode)))
+		return -EOPNOTSUPP;
+
+	inode_lock_shared(inode);
+
+	if (!f2fs_compressed_file(inode)) {
+		inode_unlock_shared(inode);
+		return -ENODATA;
+	}
+
+	option.algorithm = F2FS_I(inode)->i_compress_algorithm;
+	option.log_cluster_size = F2FS_I(inode)->i_log_cluster_size;
+
+	inode_unlock_shared(inode);
+
+	if (copy_to_user((struct f2fs_comp_option __user *)arg, &option,
+				sizeof(option)))
+		return -EFAULT;
+
+	return 0;
+}
+
+static int f2fs_ioc_set_compress_option(struct file *filp, unsigned long arg)
+{
+	struct inode *inode = file_inode(filp);
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	struct f2fs_comp_option option;
+	int ret = 0;
+
+	if (!f2fs_sb_has_compression(sbi))
+		return -EOPNOTSUPP;
+
+	if (!(filp->f_mode & FMODE_WRITE))
+		return -EBADF;
+
+	if (copy_from_user(&option, (struct f2fs_comp_option __user *)arg,
+				sizeof(option)))
+		return -EFAULT;
+
+	if (!f2fs_compressed_file(inode) ||
+			option.log_cluster_size < MIN_COMPRESS_LOG_SIZE ||
+			option.log_cluster_size > MAX_COMPRESS_LOG_SIZE ||
+			option.algorithm >= COMPRESS_MAX)
+		return -EINVAL;
+
+	file_start_write(filp);
+	inode_lock(inode);
+
+	if (f2fs_is_mmap_file(inode) || get_dirty_pages(inode)) {
+		ret = -EBUSY;
+		goto out;
+	}
+
+	if (inode->i_size != 0) {
+		ret = -EFBIG;
+		goto out;
+	}
+
+	F2FS_I(inode)->i_compress_algorithm = option.algorithm;
+	F2FS_I(inode)->i_log_cluster_size = option.log_cluster_size;
+	F2FS_I(inode)->i_cluster_size = 1 << option.log_cluster_size;
+	f2fs_mark_inode_dirty_sync(inode, true);
+
+	if (!f2fs_is_compress_backend_ready(inode))
+		f2fs_warn(sbi, "compression algorithm is successfully set, "
+			"but current kernel doesn't support this algorithm.");
+out:
+	inode_unlock(inode);
+	file_end_write(filp);
+
+	return ret;
+}
+
+static int redirty_blocks(struct inode *inode, pgoff_t page_idx, int len)
+{
+	struct address_space *mapping = inode->i_mapping;
+	struct page *page;
+	pgoff_t redirty_idx = page_idx;
+	int i, page_len = 0, ret = 0;
+
+	for (i = 0; i < len; i++, page_idx++) {
+		page = read_cache_page(mapping, page_idx, NULL, NULL);
+		if (IS_ERR(page)) {
+			ret = PTR_ERR(page);
+			break;
+		}
+		page_len++;
+	}
+
+	for (i = 0; i < page_len; i++, redirty_idx++) {
+		page = find_lock_page(mapping, redirty_idx);
+		if (!page)
+			ret = -ENOENT;
+		set_page_dirty(page);
+		f2fs_put_page(page, 1);
+		f2fs_put_page(page, 0);
+	}
+
+	return ret;
+}
+
+static int f2fs_ioc_decompress_file(struct file *filp, unsigned long arg)
+{
+	struct inode *inode = file_inode(filp);
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	struct f2fs_inode_info *fi = F2FS_I(inode);
+	pgoff_t page_idx = 0, last_idx;
+	unsigned int blk_per_seg = sbi->blocks_per_seg;
+	int cluster_size = F2FS_I(inode)->i_cluster_size;
+	int count, ret;
+
+	if (!f2fs_sb_has_compression(sbi) ||
+			F2FS_OPTION(sbi).compress_mode != COMPR_MODE_USER)
+		return -EOPNOTSUPP;
+
+	if (!(filp->f_mode & FMODE_WRITE))
+		return -EBADF;
+
+	if (!f2fs_compressed_file(inode))
+		return -EINVAL;
+
+	f2fs_balance_fs(F2FS_I_SB(inode), true);
+
+	file_start_write(filp);
+	inode_lock(inode);
+
+	if (!f2fs_is_compress_backend_ready(inode)) {
+		ret = -EOPNOTSUPP;
+		goto out;
+	}
+
+	if (f2fs_is_mmap_file(inode)) {
+		ret = -EBUSY;
+		goto out;
+	}
+
+	ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
+	if (ret)
+		goto out;
+
+	if (!atomic_read(&fi->i_compr_blocks))
+		goto out;
+
+	last_idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
+
+	count = last_idx - page_idx;
+	while (count) {
+		int len = min(cluster_size, count);
+
+		ret = redirty_blocks(inode, page_idx, len);
+		if (ret < 0)
+			break;
+
+		if (get_dirty_pages(inode) >= blk_per_seg)
+			filemap_fdatawrite(inode->i_mapping);
+
+		count -= len;
+		page_idx += len;
+	}
+
+	if (!ret)
+		ret = filemap_write_and_wait_range(inode->i_mapping, 0,
+							LLONG_MAX);
+
+	if (ret)
+		f2fs_warn(sbi, "%s: The file might be partially decompressed "
+				"(errno=%d). Please delete the file.\n",
+				__func__, ret);
+out:
+	inode_unlock(inode);
+	file_end_write(filp);
+
+	return ret;
+}
+
+static int f2fs_ioc_compress_file(struct file *filp, unsigned long arg)
+{
+	struct inode *inode = file_inode(filp);
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	pgoff_t page_idx = 0, last_idx;
+	unsigned int blk_per_seg = sbi->blocks_per_seg;
+	int cluster_size = F2FS_I(inode)->i_cluster_size;
+	int count, ret;
+
+	if (!f2fs_sb_has_compression(sbi) ||
+			F2FS_OPTION(sbi).compress_mode != COMPR_MODE_USER)
+		return -EOPNOTSUPP;
+
+	if (!(filp->f_mode & FMODE_WRITE))
+		return -EBADF;
+
+	if (!f2fs_compressed_file(inode))
+		return -EINVAL;
+
+	f2fs_balance_fs(F2FS_I_SB(inode), true);
+
+	file_start_write(filp);
+	inode_lock(inode);
+
+	if (!f2fs_is_compress_backend_ready(inode)) {
+		ret = -EOPNOTSUPP;
+		goto out;
+	}
+
+	if (f2fs_is_mmap_file(inode)) {
+		ret = -EBUSY;
+		goto out;
+	}
+
+	ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
+	if (ret)
+		goto out;
+
+	set_inode_flag(inode, FI_ENABLE_COMPRESS);
+
+	last_idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
+
+	count = last_idx - page_idx;
+	while (count) {
+		int len = min(cluster_size, count);
+
+		ret = redirty_blocks(inode, page_idx, len);
+		if (ret < 0)
+			break;
+
+		if (get_dirty_pages(inode) >= blk_per_seg)
+			filemap_fdatawrite(inode->i_mapping);
+
+		count -= len;
+		page_idx += len;
+	}
+
+	if (!ret)
+		ret = filemap_write_and_wait_range(inode->i_mapping, 0,
+							LLONG_MAX);
+
+	clear_inode_flag(inode, FI_ENABLE_COMPRESS);
+
+	if (ret)
+		f2fs_warn(sbi, "%s: The file might be partially compressed "
+				"(errno=%d). Please delete the file.\n",
+				__func__, ret);
+out:
+	inode_unlock(inode);
+	file_end_write(filp);
+
+	return ret;
+}
+
+static long __f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
+{
 	switch (cmd) {
-	case F2FS_IOC_GETFLAGS:
+	case FS_IOC_GETFLAGS:
 		return f2fs_ioc_getflags(filp, arg);
-	case F2FS_IOC_SETFLAGS:
+	case FS_IOC_SETFLAGS:
 		return f2fs_ioc_setflags(filp, arg);
-	case F2FS_IOC_GETVERSION:
+	case FS_IOC_GETVERSION:
 		return f2fs_ioc_getversion(filp, arg);
 	case F2FS_IOC_START_ATOMIC_WRITE:
 		return f2fs_ioc_start_atomic_write(filp);
@@ -3262,11 +4225,11 @@ long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 		return f2fs_ioc_shutdown(filp, arg);
 	case FITRIM:
 		return f2fs_ioc_fitrim(filp, arg);
-	case F2FS_IOC_SET_ENCRYPTION_POLICY:
+	case FS_IOC_SET_ENCRYPTION_POLICY:
 		return f2fs_ioc_set_encryption_policy(filp, arg);
-	case F2FS_IOC_GET_ENCRYPTION_POLICY:
+	case FS_IOC_GET_ENCRYPTION_POLICY:
 		return f2fs_ioc_get_encryption_policy(filp, arg);
-	case F2FS_IOC_GET_ENCRYPTION_PWSALT:
+	case FS_IOC_GET_ENCRYPTION_PWSALT:
 		return f2fs_ioc_get_encryption_pwsalt(filp, arg);
 	case FS_IOC_GET_ENCRYPTION_POLICY_EX:
 		return f2fs_ioc_get_encryption_policy_ex(filp, arg);
@@ -3278,6 +4241,8 @@ long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 		return f2fs_ioc_remove_encryption_key_all_users(filp, arg);
 	case FS_IOC_GET_ENCRYPTION_KEY_STATUS:
 		return f2fs_ioc_get_encryption_key_status(filp, arg);
+	case FS_IOC_GET_ENCRYPTION_NONCE:
+		return f2fs_ioc_get_encryption_nonce(filp, arg);
 	case F2FS_IOC_GARBAGE_COLLECT:
 		return f2fs_ioc_gc(filp, arg);
 	case F2FS_IOC_GARBAGE_COLLECT_RANGE:
@@ -3292,9 +4257,9 @@ long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 		return f2fs_ioc_flush_device(filp, arg);
 	case F2FS_IOC_GET_FEATURES:
 		return f2fs_ioc_get_features(filp, arg);
-	case F2FS_IOC_FSGETXATTR:
+	case FS_IOC_FSGETXATTR:
 		return f2fs_ioc_fsgetxattr(filp, arg);
-	case F2FS_IOC_FSSETXATTR:
+	case FS_IOC_FSSETXATTR:
 		return f2fs_ioc_fssetxattr(filp, arg);
 	case F2FS_IOC_GET_PIN_FILE:
 		return f2fs_ioc_get_pin_file(filp, arg);
@@ -3308,15 +4273,58 @@ long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 		return f2fs_ioc_enable_verity(filp, arg);
 	case FS_IOC_MEASURE_VERITY:
 		return f2fs_ioc_measure_verity(filp, arg);
-	case F2FS_IOC_GET_VOLUME_NAME:
-		return f2fs_get_volume_name(filp, arg);
-	case F2FS_IOC_SET_VOLUME_NAME:
-		return f2fs_set_volume_name(filp, arg);
+	case FS_IOC_GETFSLABEL:
+		return f2fs_ioc_getfslabel(filp, arg);
+	case FS_IOC_SETFSLABEL:
+		return f2fs_ioc_setfslabel(filp, arg);
+	case F2FS_IOC_GET_COMPRESS_BLOCKS:
+		return f2fs_get_compress_blocks(filp, arg);
+	case F2FS_IOC_RELEASE_COMPRESS_BLOCKS:
+		return f2fs_release_compress_blocks(filp, arg);
+	case F2FS_IOC_RESERVE_COMPRESS_BLOCKS:
+		return f2fs_reserve_compress_blocks(filp, arg);
+	case F2FS_IOC_SEC_TRIM_FILE:
+		return f2fs_sec_trim_file(filp, arg);
+	case F2FS_IOC_GET_COMPRESS_OPTION:
+		return f2fs_ioc_get_compress_option(filp, arg);
+	case F2FS_IOC_SET_COMPRESS_OPTION:
+		return f2fs_ioc_set_compress_option(filp, arg);
+	case F2FS_IOC_DECOMPRESS_FILE:
+		return f2fs_ioc_decompress_file(filp, arg);
+	case F2FS_IOC_COMPRESS_FILE:
+		return f2fs_ioc_compress_file(filp, arg);
 	default:
 		return -ENOTTY;
 	}
 }
 
+long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
+{
+	if (unlikely(f2fs_cp_error(F2FS_I_SB(file_inode(filp)))))
+		return -EIO;
+	if (!f2fs_is_checkpoint_ready(F2FS_I_SB(file_inode(filp))))
+		return -ENOSPC;
+
+	return __f2fs_ioctl(filp, cmd, arg);
+}
+
+static ssize_t f2fs_file_read_iter(struct kiocb *iocb, struct iov_iter *iter)
+{
+	struct file *file = iocb->ki_filp;
+	struct inode *inode = file_inode(file);
+	int ret;
+
+	if (!f2fs_is_compress_backend_ready(inode))
+		return -EOPNOTSUPP;
+
+	ret = generic_file_read_iter(iocb, iter);
+
+	if (ret > 0)
+		f2fs_update_iostat(F2FS_I_SB(inode), APP_READ_IO, ret);
+
+	return ret;
+}
+
 static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
 {
 	struct file *file = iocb->ki_filp;
@@ -3328,6 +4336,11 @@ static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
 		goto out;
 	}
 
+	if (!f2fs_is_compress_backend_ready(inode)) {
+		ret = -EOPNOTSUPP;
+		goto out;
+	}
+
 	if (iocb->ki_flags & IOCB_NOWAIT) {
 		if (!inode_trylock(inode)) {
 			ret = -EAGAIN;
@@ -3411,60 +4424,126 @@ static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
 }
 
 #ifdef CONFIG_COMPAT
+struct compat_f2fs_gc_range {
+	u32 sync;
+	compat_u64 start;
+	compat_u64 len;
+};
+#define F2FS_IOC32_GARBAGE_COLLECT_RANGE	_IOW(F2FS_IOCTL_MAGIC, 11,\
+						struct compat_f2fs_gc_range)
+
+static int f2fs_compat_ioc_gc_range(struct file *file, unsigned long arg)
+{
+	struct compat_f2fs_gc_range __user *urange;
+	struct f2fs_gc_range range;
+	int err;
+
+	urange = compat_ptr(arg);
+	err = get_user(range.sync, &urange->sync);
+	err |= get_user(range.start, &urange->start);
+	err |= get_user(range.len, &urange->len);
+	if (err)
+		return -EFAULT;
+
+	return __f2fs_ioc_gc_range(file, &range);
+}
+
+struct compat_f2fs_move_range {
+	u32 dst_fd;
+	compat_u64 pos_in;
+	compat_u64 pos_out;
+	compat_u64 len;
+};
+#define F2FS_IOC32_MOVE_RANGE		_IOWR(F2FS_IOCTL_MAGIC, 9,	\
+					struct compat_f2fs_move_range)
+
+static int f2fs_compat_ioc_move_range(struct file *file, unsigned long arg)
+{
+	struct compat_f2fs_move_range __user *urange;
+	struct f2fs_move_range range;
+	int err;
+
+	urange = compat_ptr(arg);
+	err = get_user(range.dst_fd, &urange->dst_fd);
+	err |= get_user(range.pos_in, &urange->pos_in);
+	err |= get_user(range.pos_out, &urange->pos_out);
+	err |= get_user(range.len, &urange->len);
+	if (err)
+		return -EFAULT;
+
+	return __f2fs_ioc_move_range(file, &range);
+}
+
 long f2fs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 {
+	if (unlikely(f2fs_cp_error(F2FS_I_SB(file_inode(file)))))
+		return -EIO;
+	if (!f2fs_is_checkpoint_ready(F2FS_I_SB(file_inode(file))))
+		return -ENOSPC;
+
 	switch (cmd) {
-	case F2FS_IOC32_GETFLAGS:
-		cmd = F2FS_IOC_GETFLAGS;
+	case FS_IOC32_GETFLAGS:
+		cmd = FS_IOC_GETFLAGS;
 		break;
-	case F2FS_IOC32_SETFLAGS:
-		cmd = F2FS_IOC_SETFLAGS;
+	case FS_IOC32_SETFLAGS:
+		cmd = FS_IOC_SETFLAGS;
 		break;
-	case F2FS_IOC32_GETVERSION:
-		cmd = F2FS_IOC_GETVERSION;
+	case FS_IOC32_GETVERSION:
+		cmd = FS_IOC_GETVERSION;
 		break;
+	case F2FS_IOC32_GARBAGE_COLLECT_RANGE:
+		return f2fs_compat_ioc_gc_range(file, arg);
+	case F2FS_IOC32_MOVE_RANGE:
+		return f2fs_compat_ioc_move_range(file, arg);
 	case F2FS_IOC_START_ATOMIC_WRITE:
 	case F2FS_IOC_COMMIT_ATOMIC_WRITE:
 	case F2FS_IOC_START_VOLATILE_WRITE:
 	case F2FS_IOC_RELEASE_VOLATILE_WRITE:
 	case F2FS_IOC_ABORT_VOLATILE_WRITE:
 	case F2FS_IOC_SHUTDOWN:
-	case F2FS_IOC_SET_ENCRYPTION_POLICY:
-	case F2FS_IOC_GET_ENCRYPTION_PWSALT:
-	case F2FS_IOC_GET_ENCRYPTION_POLICY:
+	case FS_IOC_SET_ENCRYPTION_POLICY:
+	case FS_IOC_GET_ENCRYPTION_PWSALT:
+	case FS_IOC_GET_ENCRYPTION_POLICY:
 	case FS_IOC_GET_ENCRYPTION_POLICY_EX:
 	case FS_IOC_ADD_ENCRYPTION_KEY:
 	case FS_IOC_REMOVE_ENCRYPTION_KEY:
 	case FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS:
 	case FS_IOC_GET_ENCRYPTION_KEY_STATUS:
+	case FS_IOC_GET_ENCRYPTION_NONCE:
 	case F2FS_IOC_GARBAGE_COLLECT:
-	case F2FS_IOC_GARBAGE_COLLECT_RANGE:
 	case F2FS_IOC_WRITE_CHECKPOINT:
 	case F2FS_IOC_DEFRAGMENT:
-	case F2FS_IOC_MOVE_RANGE:
 	case F2FS_IOC_FLUSH_DEVICE:
 	case F2FS_IOC_GET_FEATURES:
-	case F2FS_IOC_FSGETXATTR:
-	case F2FS_IOC_FSSETXATTR:
+	case FS_IOC_FSGETXATTR:
+	case FS_IOC_FSSETXATTR:
 	case F2FS_IOC_GET_PIN_FILE:
 	case F2FS_IOC_SET_PIN_FILE:
 	case F2FS_IOC_PRECACHE_EXTENTS:
 	case F2FS_IOC_RESIZE_FS:
 	case FS_IOC_ENABLE_VERITY:
 	case FS_IOC_MEASURE_VERITY:
-	case F2FS_IOC_GET_VOLUME_NAME:
-	case F2FS_IOC_SET_VOLUME_NAME:
+	case FS_IOC_GETFSLABEL:
+	case FS_IOC_SETFSLABEL:
+	case F2FS_IOC_GET_COMPRESS_BLOCKS:
+	case F2FS_IOC_RELEASE_COMPRESS_BLOCKS:
+	case F2FS_IOC_RESERVE_COMPRESS_BLOCKS:
+	case F2FS_IOC_SEC_TRIM_FILE:
+	case F2FS_IOC_GET_COMPRESS_OPTION:
+	case F2FS_IOC_SET_COMPRESS_OPTION:
+	case F2FS_IOC_DECOMPRESS_FILE:
+	case F2FS_IOC_COMPRESS_FILE:
 		break;
 	default:
 		return -ENOIOCTLCMD;
 	}
-	return f2fs_ioctl(file, cmd, (unsigned long) compat_ptr(arg));
+	return __f2fs_ioctl(file, cmd, (unsigned long) compat_ptr(arg));
 }
 #endif
 
 const struct file_operations f2fs_file_operations = {
 	.llseek		= f2fs_llseek,
-	.read_iter	= generic_file_read_iter,
+	.read_iter	= f2fs_file_read_iter,
 	.write_iter	= f2fs_file_write_iter,
 	.open		= f2fs_file_open,
 	.release	= f2fs_release_file,
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index a78aa54..3ef84e6 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -13,6 +13,7 @@
 #include <linux/kthread.h>
 #include <linux/delay.h>
 #include <linux/freezer.h>
+#include <linux/sched/signal.h>
 
 #include "f2fs.h"
 #include "node.h"
@@ -20,6 +21,11 @@
 #include "gc.h"
 #include <trace/events/f2fs.h>
 
+static struct kmem_cache *victim_entry_slab;
+
+static unsigned int count_bits(const unsigned long *addr,
+				unsigned int offset, unsigned int len);
+
 static int gc_thread_func(void *data)
 {
 	struct f2fs_sb_info *sbi = data;
@@ -31,6 +37,8 @@ static int gc_thread_func(void *data)
 
 	set_freezable();
 	do {
+		bool sync_mode;
+
 		wait_event_interruptible_timeout(*wq,
 				kthread_should_stop() || freezing(current) ||
 				gc_th->gc_wake,
@@ -54,7 +62,7 @@ static int gc_thread_func(void *data)
 		}
 
 		if (time_to_inject(sbi, FAULT_CHECKPOINT)) {
-			f2fs_show_injection_info(FAULT_CHECKPOINT);
+			f2fs_show_injection_info(sbi, FAULT_CHECKPOINT);
 			f2fs_stop_checkpoint(sbi, false);
 		}
 
@@ -76,20 +84,20 @@ static int gc_thread_func(void *data)
 		 * invalidated soon after by user update or deletion.
 		 * So, I'd like to wait some time to collect dirty segments.
 		 */
-		if (sbi->gc_mode == GC_URGENT) {
+		if (sbi->gc_mode == GC_URGENT_HIGH) {
 			wait_ms = gc_th->urgent_sleep_time;
-			mutex_lock(&sbi->gc_mutex);
+			down_write(&sbi->gc_lock);
 			goto do_gc;
 		}
 
-		if (!mutex_trylock(&sbi->gc_mutex)) {
+		if (!down_write_trylock(&sbi->gc_lock)) {
 			stat_other_skip_bggc_count(sbi);
 			goto next;
 		}
 
 		if (!is_idle(sbi, GC_TIME)) {
 			increase_sleep_time(gc_th, &wait_ms);
-			mutex_unlock(&sbi->gc_mutex);
+			up_write(&sbi->gc_lock);
 			stat_io_skip_bggc_count(sbi);
 			goto next;
 		}
@@ -99,17 +107,19 @@ static int gc_thread_func(void *data)
 		else
 			increase_sleep_time(gc_th, &wait_ms);
 do_gc:
-		stat_inc_bggc_count(sbi);
+		stat_inc_bggc_count(sbi->stat_info);
+
+		sync_mode = F2FS_OPTION(sbi).bggc_mode == BGGC_MODE_SYNC;
 
 		/* if return value is not zero, no victim was selected */
-		if (f2fs_gc(sbi, test_opt(sbi, FORCE_FG_GC), true, NULL_SEGNO))
+		if (f2fs_gc(sbi, sync_mode, true, NULL_SEGNO))
 			wait_ms = gc_th->no_gc_sleep_time;
 
 		trace_f2fs_background_gc(sbi->sb, wait_ms,
 				prefree_segments(sbi), free_segments(sbi));
 
 		/* balancing f2fs's metadata periodically */
-		f2fs_balance_fs_bg(sbi);
+		f2fs_balance_fs_bg(sbi, true);
 next:
 		sb_end_write(sbi->sb);
 
@@ -142,7 +152,7 @@ int f2fs_start_gc_thread(struct f2fs_sb_info *sbi)
 			"f2fs_gc-%u:%u", MAJOR(dev), MINOR(dev));
 	if (IS_ERR(gc_th->f2fs_gc_task)) {
 		err = PTR_ERR(gc_th->f2fs_gc_task);
-		kvfree(gc_th);
+		kfree(gc_th);
 		sbi->gc_thread = NULL;
 	}
 out:
@@ -155,23 +165,36 @@ void f2fs_stop_gc_thread(struct f2fs_sb_info *sbi)
 	if (!gc_th)
 		return;
 	kthread_stop(gc_th->f2fs_gc_task);
-	kvfree(gc_th);
+	kfree(gc_th);
 	sbi->gc_thread = NULL;
 }
 
 static int select_gc_type(struct f2fs_sb_info *sbi, int gc_type)
 {
-	int gc_mode = (gc_type == BG_GC) ? GC_CB : GC_GREEDY;
+	int gc_mode;
+
+	if (gc_type == BG_GC) {
+		if (sbi->am.atgc_enabled)
+			gc_mode = GC_AT;
+		else
+			gc_mode = GC_CB;
+	} else {
+		gc_mode = GC_GREEDY;
+	}
 
 	switch (sbi->gc_mode) {
 	case GC_IDLE_CB:
 		gc_mode = GC_CB;
 		break;
 	case GC_IDLE_GREEDY:
-	case GC_URGENT:
+	case GC_URGENT_HIGH:
 		gc_mode = GC_GREEDY;
 		break;
+	case GC_IDLE_AT:
+		gc_mode = GC_AT;
+		break;
 	}
+
 	return gc_mode;
 }
 
@@ -182,19 +205,34 @@ static void select_policy(struct f2fs_sb_info *sbi, int gc_type,
 
 	if (p->alloc_mode == SSR) {
 		p->gc_mode = GC_GREEDY;
-		p->dirty_segmap = dirty_i->dirty_segmap[type];
+		p->dirty_bitmap = dirty_i->dirty_segmap[type];
+		p->max_search = dirty_i->nr_dirty[type];
+		p->ofs_unit = 1;
+	} else if (p->alloc_mode == AT_SSR) {
+		p->gc_mode = GC_GREEDY;
+		p->dirty_bitmap = dirty_i->dirty_segmap[type];
 		p->max_search = dirty_i->nr_dirty[type];
 		p->ofs_unit = 1;
 	} else {
 		p->gc_mode = select_gc_type(sbi, gc_type);
-		p->dirty_segmap = dirty_i->dirty_segmap[DIRTY];
-		p->max_search = dirty_i->nr_dirty[DIRTY];
 		p->ofs_unit = sbi->segs_per_sec;
+		if (__is_large_section(sbi)) {
+			p->dirty_bitmap = dirty_i->dirty_secmap;
+			p->max_search = count_bits(p->dirty_bitmap,
+						0, MAIN_SECS(sbi));
+		} else {
+			p->dirty_bitmap = dirty_i->dirty_segmap[DIRTY];
+			p->max_search = dirty_i->nr_dirty[DIRTY];
+		}
 	}
 
-	/* we need to check every dirty segments in the FG_GC case */
+	/*
+	 * adjust candidates range, should select all dirty segments for
+	 * foreground GC and urgent GC cases.
+	 */
 	if (gc_type != FG_GC &&
-			(sbi->gc_mode != GC_URGENT) &&
+			(sbi->gc_mode != GC_URGENT_HIGH) &&
+			(p->gc_mode != GC_AT && p->alloc_mode != AT_SSR) &&
 			p->max_search > sbi->max_victim_search)
 		p->max_search = sbi->max_victim_search;
 
@@ -212,10 +250,16 @@ static unsigned int get_max_cost(struct f2fs_sb_info *sbi,
 	/* SSR allocates in a segment unit */
 	if (p->alloc_mode == SSR)
 		return sbi->blocks_per_seg;
+	else if (p->alloc_mode == AT_SSR)
+		return UINT_MAX;
+
+	/* LFS */
 	if (p->gc_mode == GC_GREEDY)
 		return 2 * sbi->blocks_per_seg * p->ofs_unit;
 	else if (p->gc_mode == GC_CB)
 		return UINT_MAX;
+	else if (p->gc_mode == GC_AT)
+		return UINT_MAX;
 	else /* No other gc_mode */
 		return 0;
 }
@@ -249,13 +293,14 @@ static unsigned int get_cb_cost(struct f2fs_sb_info *sbi, unsigned int segno)
 	unsigned char age = 0;
 	unsigned char u;
 	unsigned int i;
+	unsigned int usable_segs_per_sec = f2fs_usable_segs_in_sec(sbi, segno);
 
-	for (i = 0; i < sbi->segs_per_sec; i++)
+	for (i = 0; i < usable_segs_per_sec; i++)
 		mtime += get_seg_entry(sbi, start + i)->mtime;
 	vblocks = get_valid_blocks(sbi, segno, true);
 
-	mtime = div_u64(mtime, sbi->segs_per_sec);
-	vblocks = div_u64(vblocks, sbi->segs_per_sec);
+	mtime = div_u64(mtime, usable_segs_per_sec);
+	vblocks = div_u64(vblocks, usable_segs_per_sec);
 
 	u = (vblocks * 100) >> sbi->log_blocks_per_seg;
 
@@ -280,8 +325,11 @@ static inline unsigned int get_gc_cost(struct f2fs_sb_info *sbi,
 	/* alloc_mode == LFS */
 	if (p->gc_mode == GC_GREEDY)
 		return get_valid_blocks(sbi, segno, true);
-	else
+	else if (p->gc_mode == GC_CB)
 		return get_cb_cost(sbi, segno);
+
+	f2fs_bug_on(sbi, 1);
+	return 0;
 }
 
 static unsigned int count_bits(const unsigned long *addr,
@@ -296,6 +344,273 @@ static unsigned int count_bits(const unsigned long *addr,
 	return sum;
 }
 
+static struct victim_entry *attach_victim_entry(struct f2fs_sb_info *sbi,
+				unsigned long long mtime, unsigned int segno,
+				struct rb_node *parent, struct rb_node **p,
+				bool left_most)
+{
+	struct atgc_management *am = &sbi->am;
+	struct victim_entry *ve;
+
+	ve =  f2fs_kmem_cache_alloc(victim_entry_slab, GFP_NOFS);
+
+	ve->mtime = mtime;
+	ve->segno = segno;
+
+	rb_link_node(&ve->rb_node, parent, p);
+	rb_insert_color_cached(&ve->rb_node, &am->root, left_most);
+
+	list_add_tail(&ve->list, &am->victim_list);
+
+	am->victim_count++;
+
+	return ve;
+}
+
+static void insert_victim_entry(struct f2fs_sb_info *sbi,
+				unsigned long long mtime, unsigned int segno)
+{
+	struct atgc_management *am = &sbi->am;
+	struct rb_node **p;
+	struct rb_node *parent = NULL;
+	bool left_most = true;
+
+	p = f2fs_lookup_rb_tree_ext(sbi, &am->root, &parent, mtime, &left_most);
+	attach_victim_entry(sbi, mtime, segno, parent, p, left_most);
+}
+
+static void add_victim_entry(struct f2fs_sb_info *sbi,
+				struct victim_sel_policy *p, unsigned int segno)
+{
+	struct sit_info *sit_i = SIT_I(sbi);
+	unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
+	unsigned int start = GET_SEG_FROM_SEC(sbi, secno);
+	unsigned long long mtime = 0;
+	unsigned int i;
+
+	if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
+		if (p->gc_mode == GC_AT &&
+			get_valid_blocks(sbi, segno, true) == 0)
+			return;
+
+		if (p->alloc_mode == AT_SSR &&
+			get_seg_entry(sbi, segno)->ckpt_valid_blocks == 0)
+			return;
+	}
+
+	for (i = 0; i < sbi->segs_per_sec; i++)
+		mtime += get_seg_entry(sbi, start + i)->mtime;
+	mtime = div_u64(mtime, sbi->segs_per_sec);
+
+	/* Handle if the system time has changed by the user */
+	if (mtime < sit_i->min_mtime)
+		sit_i->min_mtime = mtime;
+	if (mtime > sit_i->max_mtime)
+		sit_i->max_mtime = mtime;
+	if (mtime < sit_i->dirty_min_mtime)
+		sit_i->dirty_min_mtime = mtime;
+	if (mtime > sit_i->dirty_max_mtime)
+		sit_i->dirty_max_mtime = mtime;
+
+	/* don't choose young section as candidate */
+	if (sit_i->dirty_max_mtime - mtime < p->age_threshold)
+		return;
+
+	insert_victim_entry(sbi, mtime, segno);
+}
+
+static struct rb_node *lookup_central_victim(struct f2fs_sb_info *sbi,
+						struct victim_sel_policy *p)
+{
+	struct atgc_management *am = &sbi->am;
+	struct rb_node *parent = NULL;
+	bool left_most;
+
+	f2fs_lookup_rb_tree_ext(sbi, &am->root, &parent, p->age, &left_most);
+
+	return parent;
+}
+
+static void atgc_lookup_victim(struct f2fs_sb_info *sbi,
+						struct victim_sel_policy *p)
+{
+	struct sit_info *sit_i = SIT_I(sbi);
+	struct atgc_management *am = &sbi->am;
+	struct rb_root_cached *root = &am->root;
+	struct rb_node *node;
+	struct rb_entry *re;
+	struct victim_entry *ve;
+	unsigned long long total_time;
+	unsigned long long age, u, accu;
+	unsigned long long max_mtime = sit_i->dirty_max_mtime;
+	unsigned long long min_mtime = sit_i->dirty_min_mtime;
+	unsigned int sec_blocks = BLKS_PER_SEC(sbi);
+	unsigned int vblocks;
+	unsigned int dirty_threshold = max(am->max_candidate_count,
+					am->candidate_ratio *
+					am->victim_count / 100);
+	unsigned int age_weight = am->age_weight;
+	unsigned int cost;
+	unsigned int iter = 0;
+
+	if (max_mtime < min_mtime)
+		return;
+
+	max_mtime += 1;
+	total_time = max_mtime - min_mtime;
+
+	accu = div64_u64(ULLONG_MAX, total_time);
+	accu = min_t(unsigned long long, div_u64(accu, 100),
+					DEFAULT_ACCURACY_CLASS);
+
+	node = rb_first_cached(root);
+next:
+	re = rb_entry_safe(node, struct rb_entry, rb_node);
+	if (!re)
+		return;
+
+	ve = (struct victim_entry *)re;
+
+	if (ve->mtime >= max_mtime || ve->mtime < min_mtime)
+		goto skip;
+
+	/* age = 10000 * x% * 60 */
+	age = div64_u64(accu * (max_mtime - ve->mtime), total_time) *
+								age_weight;
+
+	vblocks = get_valid_blocks(sbi, ve->segno, true);
+	f2fs_bug_on(sbi, !vblocks || vblocks == sec_blocks);
+
+	/* u = 10000 * x% * 40 */
+	u = div64_u64(accu * (sec_blocks - vblocks), sec_blocks) *
+							(100 - age_weight);
+
+	f2fs_bug_on(sbi, age + u >= UINT_MAX);
+
+	cost = UINT_MAX - (age + u);
+	iter++;
+
+	if (cost < p->min_cost ||
+			(cost == p->min_cost && age > p->oldest_age)) {
+		p->min_cost = cost;
+		p->oldest_age = age;
+		p->min_segno = ve->segno;
+	}
+skip:
+	if (iter < dirty_threshold) {
+		node = rb_next(node);
+		goto next;
+	}
+}
+
+/*
+ * select candidates around source section in range of
+ * [target - dirty_threshold, target + dirty_threshold]
+ */
+static void atssr_lookup_victim(struct f2fs_sb_info *sbi,
+						struct victim_sel_policy *p)
+{
+	struct sit_info *sit_i = SIT_I(sbi);
+	struct atgc_management *am = &sbi->am;
+	struct rb_node *node;
+	struct rb_entry *re;
+	struct victim_entry *ve;
+	unsigned long long age;
+	unsigned long long max_mtime = sit_i->dirty_max_mtime;
+	unsigned long long min_mtime = sit_i->dirty_min_mtime;
+	unsigned int seg_blocks = sbi->blocks_per_seg;
+	unsigned int vblocks;
+	unsigned int dirty_threshold = max(am->max_candidate_count,
+					am->candidate_ratio *
+					am->victim_count / 100);
+	unsigned int cost;
+	unsigned int iter = 0;
+	int stage = 0;
+
+	if (max_mtime < min_mtime)
+		return;
+	max_mtime += 1;
+next_stage:
+	node = lookup_central_victim(sbi, p);
+next_node:
+	re = rb_entry_safe(node, struct rb_entry, rb_node);
+	if (!re) {
+		if (stage == 0)
+			goto skip_stage;
+		return;
+	}
+
+	ve = (struct victim_entry *)re;
+
+	if (ve->mtime >= max_mtime || ve->mtime < min_mtime)
+		goto skip_node;
+
+	age = max_mtime - ve->mtime;
+
+	vblocks = get_seg_entry(sbi, ve->segno)->ckpt_valid_blocks;
+	f2fs_bug_on(sbi, !vblocks);
+
+	/* rare case */
+	if (vblocks == seg_blocks)
+		goto skip_node;
+
+	iter++;
+
+	age = max_mtime - abs(p->age - age);
+	cost = UINT_MAX - vblocks;
+
+	if (cost < p->min_cost ||
+			(cost == p->min_cost && age > p->oldest_age)) {
+		p->min_cost = cost;
+		p->oldest_age = age;
+		p->min_segno = ve->segno;
+	}
+skip_node:
+	if (iter < dirty_threshold) {
+		if (stage == 0)
+			node = rb_prev(node);
+		else if (stage == 1)
+			node = rb_next(node);
+		goto next_node;
+	}
+skip_stage:
+	if (stage < 1) {
+		stage++;
+		iter = 0;
+		goto next_stage;
+	}
+}
+static void lookup_victim_by_age(struct f2fs_sb_info *sbi,
+						struct victim_sel_policy *p)
+{
+	f2fs_bug_on(sbi, !f2fs_check_rb_tree_consistence(sbi,
+						&sbi->am.root, true));
+
+	if (p->gc_mode == GC_AT)
+		atgc_lookup_victim(sbi, p);
+	else if (p->alloc_mode == AT_SSR)
+		atssr_lookup_victim(sbi, p);
+	else
+		f2fs_bug_on(sbi, 1);
+}
+
+static void release_victim_entry(struct f2fs_sb_info *sbi)
+{
+	struct atgc_management *am = &sbi->am;
+	struct victim_entry *ve, *tmp;
+
+	list_for_each_entry_safe(ve, tmp, &am->victim_list, list) {
+		list_del(&ve->list);
+		kmem_cache_free(victim_entry_slab, ve);
+		am->victim_count--;
+	}
+
+	am->root = RB_ROOT_CACHED;
+
+	f2fs_bug_on(sbi, am->victim_count);
+	f2fs_bug_on(sbi, !list_empty(&am->victim_list));
+}
+
 /*
  * This function is called from two paths.
  * One is garbage collection and the other is SSR segment selection.
@@ -305,31 +620,51 @@ static unsigned int count_bits(const unsigned long *addr,
  * which has minimum valid blocks and removes it from dirty seglist.
  */
 static int get_victim_by_default(struct f2fs_sb_info *sbi,
-		unsigned int *result, int gc_type, int type, char alloc_mode)
+			unsigned int *result, int gc_type, int type,
+			char alloc_mode, unsigned long long age)
 {
 	struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
 	struct sit_info *sm = SIT_I(sbi);
 	struct victim_sel_policy p;
 	unsigned int secno, last_victim;
 	unsigned int last_segment;
-	unsigned int nsearched = 0;
+	unsigned int nsearched;
+	bool is_atgc;
+	int ret = 0;
 
 	mutex_lock(&dirty_i->seglist_lock);
 	last_segment = MAIN_SECS(sbi) * sbi->segs_per_sec;
 
 	p.alloc_mode = alloc_mode;
-	select_policy(sbi, gc_type, type, &p);
+	p.age = age;
+	p.age_threshold = sbi->am.age_threshold;
 
+retry:
+	select_policy(sbi, gc_type, type, &p);
 	p.min_segno = NULL_SEGNO;
+	p.oldest_age = 0;
 	p.min_cost = get_max_cost(sbi, &p);
 
+	is_atgc = (p.gc_mode == GC_AT || p.alloc_mode == AT_SSR);
+	nsearched = 0;
+
+	if (is_atgc)
+		SIT_I(sbi)->dirty_min_mtime = ULLONG_MAX;
+
 	if (*result != NULL_SEGNO) {
-		if (get_valid_blocks(sbi, *result, false) &&
-			!sec_usage_check(sbi, GET_SEC_FROM_SEG(sbi, *result)))
+		if (!get_valid_blocks(sbi, *result, false)) {
+			ret = -ENODATA;
+			goto out;
+		}
+
+		if (sec_usage_check(sbi, GET_SEC_FROM_SEG(sbi, *result)))
+			ret = -EBUSY;
+		else
 			p.min_segno = *result;
 		goto out;
 	}
 
+	ret = -ENODATA;
 	if (p.max_search == 0)
 		goto out;
 
@@ -357,10 +692,14 @@ static int get_victim_by_default(struct f2fs_sb_info *sbi,
 	}
 
 	while (1) {
-		unsigned long cost;
-		unsigned int segno;
+		unsigned long cost, *dirty_bitmap;
+		unsigned int unit_no, segno;
 
-		segno = find_next_bit(p.dirty_segmap, last_segment, p.offset);
+		dirty_bitmap = p.dirty_bitmap;
+		unit_no = find_next_bit(dirty_bitmap,
+				last_segment / p.ofs_unit,
+				p.offset / p.ofs_unit);
+		segno = unit_no * p.ofs_unit;
 		if (segno >= last_segment) {
 			if (sm->last_victim[p.gc_mode]) {
 				last_segment =
@@ -373,14 +712,7 @@ static int get_victim_by_default(struct f2fs_sb_info *sbi,
 		}
 
 		p.offset = segno + p.ofs_unit;
-		if (p.ofs_unit > 1) {
-			p.offset -= segno % p.ofs_unit;
-			nsearched += count_bits(p.dirty_segmap,
-						p.offset - p.ofs_unit,
-						p.ofs_unit);
-		} else {
-			nsearched++;
-		}
+		nsearched++;
 
 #ifdef CONFIG_F2FS_CHECK_FS
 		/*
@@ -399,11 +731,16 @@ static int get_victim_by_default(struct f2fs_sb_info *sbi,
 		/* Don't touch checkpointed data */
 		if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED) &&
 					get_ckpt_valid_blocks(sbi, segno) &&
-					p.alloc_mode != SSR))
+					p.alloc_mode == LFS))
 			goto next;
 		if (gc_type == BG_GC && test_bit(secno, dirty_i->victim_secmap))
 			goto next;
 
+		if (is_atgc) {
+			add_victim_entry(sbi, &p, segno);
+			goto next;
+		}
+
 		cost = get_gc_cost(sbi, segno, &p);
 
 		if (p.min_cost > cost) {
@@ -413,14 +750,28 @@ static int get_victim_by_default(struct f2fs_sb_info *sbi,
 next:
 		if (nsearched >= p.max_search) {
 			if (!sm->last_victim[p.gc_mode] && segno <= last_victim)
-				sm->last_victim[p.gc_mode] = last_victim + 1;
+				sm->last_victim[p.gc_mode] =
+					last_victim + p.ofs_unit;
 			else
-				sm->last_victim[p.gc_mode] = segno + 1;
+				sm->last_victim[p.gc_mode] = segno + p.ofs_unit;
 			sm->last_victim[p.gc_mode] %=
 				(MAIN_SECS(sbi) * sbi->segs_per_sec);
 			break;
 		}
 	}
+
+	/* get victim for GC_AT/AT_SSR */
+	if (is_atgc) {
+		lookup_victim_by_age(sbi, &p);
+		release_victim_entry(sbi);
+	}
+
+	if (is_atgc && p.min_segno == NULL_SEGNO &&
+			sm->elapsed_time < p.age_threshold) {
+		p.age_threshold = 0;
+		goto retry;
+	}
+
 	if (p.min_segno != NULL_SEGNO) {
 got_it:
 		*result = (p.min_segno / p.ofs_unit) * p.ofs_unit;
@@ -432,6 +783,7 @@ static int get_victim_by_default(struct f2fs_sb_info *sbi,
 			else
 				set_bit(secno, dirty_i->victim_secmap);
 		}
+		ret = 0;
 
 	}
 out:
@@ -441,7 +793,7 @@ static int get_victim_by_default(struct f2fs_sb_info *sbi,
 				prefree_segments(sbi), free_segments(sbi));
 	mutex_unlock(&dirty_i->seglist_lock);
 
-	return (p.min_segno == NULL_SEGNO) ? 0 : 1;
+	return ret;
 }
 
 static const struct victim_selection default_v_ops = {
@@ -512,6 +864,7 @@ static int gc_node_segment(struct f2fs_sb_info *sbi,
 	int phase = 0;
 	bool fggc = (gc_type == FG_GC);
 	int submitted = 0;
+	unsigned int usable_blks_in_seg = f2fs_usable_blks_in_seg(sbi, segno);
 
 	start_addr = START_BLOCK(sbi, segno);
 
@@ -521,7 +874,7 @@ static int gc_node_segment(struct f2fs_sb_info *sbi,
 	if (fggc && phase == 2)
 		atomic_inc(&sbi->wb_sync_req[NODE]);
 
-	for (off = 0; off < sbi->blocks_per_seg; off++, entry++) {
+	for (off = 0; off < usable_blks_in_seg; off++, entry++) {
 		nid_t nid = le32_to_cpu(entry->nid);
 		struct page *node_page;
 		struct node_info ni;
@@ -634,7 +987,7 @@ static bool is_alive(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
 	}
 
 	*nofs = ofs_of_node(node_page);
-	source_blkaddr = datablock_addr(NULL, node_page, ofs_in_node);
+	source_blkaddr = data_blkaddr(NULL, node_page, ofs_in_node);
 	f2fs_put_page(node_page, 1);
 
 	if (source_blkaddr != blkaddr) {
@@ -730,6 +1083,10 @@ static int ra_data_block(struct inode *inode, pgoff_t index)
 		goto put_encrypted_page;
 	f2fs_put_page(fio.encrypted_page, 0);
 	f2fs_put_page(page, 1);
+
+	f2fs_update_iostat(sbi, FS_DATA_READ_IO, F2FS_BLKSIZE);
+	f2fs_update_iostat(sbi, FS_GDATA_READ_IO, F2FS_BLKSIZE);
+
 	return 0;
 put_encrypted_page:
 	f2fs_put_page(fio.encrypted_page, 1);
@@ -762,7 +1119,9 @@ static int move_data_block(struct inode *inode, block_t bidx,
 	struct page *page, *mpage;
 	block_t newaddr;
 	int err = 0;
-	bool lfs_mode = test_opt(fio.sbi, LFS);
+	bool lfs_mode = f2fs_lfs_mode(fio.sbi);
+	int type = fio.sbi->am.atgc_enabled ?
+				CURSEG_ALL_DATA_ATGC : CURSEG_COLD_DATA;
 
 	/* do not read out */
 	page = f2fs_grab_cache_page(inode->i_mapping, bidx, false);
@@ -821,8 +1180,10 @@ static int move_data_block(struct inode *inode, block_t bidx,
 
 	mpage = f2fs_grab_cache_page(META_MAPPING(fio.sbi),
 					fio.old_blkaddr, false);
-	if (!mpage)
+	if (!mpage) {
+		err = -ENOMEM;
 		goto up_out;
+	}
 
 	fio.encrypted_page = mpage;
 
@@ -833,6 +1194,10 @@ static int move_data_block(struct inode *inode, block_t bidx,
 			f2fs_put_page(mpage, 1);
 			goto up_out;
 		}
+
+		f2fs_update_iostat(fio.sbi, FS_DATA_READ_IO, F2FS_BLKSIZE);
+		f2fs_update_iostat(fio.sbi, FS_GDATA_READ_IO, F2FS_BLKSIZE);
+
 		lock_page(mpage);
 		if (unlikely(mpage->mapping != META_MAPPING(fio.sbi) ||
 						!PageUptodate(mpage))) {
@@ -843,7 +1208,7 @@ static int move_data_block(struct inode *inode, block_t bidx,
 	}
 
 	f2fs_allocate_data_block(fio.sbi, NULL, fio.old_blkaddr, &newaddr,
-					&sum, CURSEG_COLD_DATA, NULL, false);
+				&sum, type, NULL);
 
 	fio.encrypted_page = f2fs_pagecache_get_page(META_MAPPING(fio.sbi),
 				newaddr, FGP_LOCK | FGP_CREAT, GFP_NOFS);
@@ -893,7 +1258,7 @@ static int move_data_block(struct inode *inode, block_t bidx,
 recover_block:
 	if (err)
 		f2fs_do_replace_block(fio.sbi, &sum, newaddr, fio.old_blkaddr,
-								true, true);
+							true, true, true);
 up_out:
 	if (lfs_mode)
 		up_write(&fio.sbi->io_order_lock);
@@ -970,7 +1335,8 @@ static int move_data_page(struct inode *inode, block_t bidx, int gc_type,
 		if (err) {
 			clear_cold_data(page);
 			if (err == -ENOMEM) {
-				congestion_wait(BLK_RW_ASYNC, HZ/50);
+				congestion_wait(BLK_RW_ASYNC,
+						DEFAULT_IO_TIMEOUT);
 				goto retry;
 			}
 			if (is_dirty)
@@ -998,13 +1364,14 @@ static int gc_data_segment(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
 	int off;
 	int phase = 0;
 	int submitted = 0;
+	unsigned int usable_blks_in_seg = f2fs_usable_blks_in_seg(sbi, segno);
 
 	start_addr = START_BLOCK(sbi, segno);
 
 next_step:
 	entry = sum;
 
-	for (off = 0; off < sbi->blocks_per_seg; off++, entry++) {
+	for (off = 0; off < usable_blks_in_seg; off++, entry++) {
 		struct page *data_page;
 		struct inode *inode;
 		struct node_info dni; /* dnode info for the data */
@@ -1018,8 +1385,8 @@ static int gc_data_segment(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
 		 * race condition along with SSR block allocation.
 		 */
 		if ((gc_type == BG_GC && has_not_enough_free_secs(sbi, 0, 0)) ||
-				get_valid_blocks(sbi, segno, false) ==
-							sbi->blocks_per_seg)
+				get_valid_blocks(sbi, segno, true) ==
+							BLKS_PER_SEC(sbi))
 			return submitted;
 
 		if (check_valid_map(sbi, segno, off) == 0)
@@ -1049,8 +1416,10 @@ static int gc_data_segment(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
 
 		if (phase == 3) {
 			inode = f2fs_iget(sb, dni.ino);
-			if (IS_ERR(inode) || is_bad_inode(inode))
+			if (IS_ERR(inode) || is_bad_inode(inode)) {
+				set_sbi_flag(sbi, SBI_NEED_FSCK);
 				continue;
+			}
 
 			if (!down_write_trylock(
 				&F2FS_I(inode)->i_gc_rwsem[WRITE])) {
@@ -1145,7 +1514,7 @@ static int __get_victim(struct f2fs_sb_info *sbi, unsigned int *victim,
 
 	down_write(&sit_i->sentry_lock);
 	ret = DIRTY_I(sbi)->v_ops->get_victim(sbi, victim, gc_type,
-					      NO_CHECK_TYPE, LFS);
+					      NO_CHECK_TYPE, LFS, 0);
 	up_write(&sit_i->sentry_lock);
 	return ret;
 }
@@ -1167,6 +1536,17 @@ static int do_garbage_collect(struct f2fs_sb_info *sbi,
 	if (__is_large_section(sbi))
 		end_segno = rounddown(end_segno, sbi->segs_per_sec);
 
+	/*
+	 * zone-capacity can be less than zone-size in zoned devices,
+	 * resulting in less than expected usable segments in the zone,
+	 * calculate the end segno in the zone which can be garbage collected
+	 */
+	if (f2fs_sb_has_blkzoned(sbi))
+		end_segno -= sbi->segs_per_sec -
+					f2fs_usable_segs_in_sec(sbi, segno);
+
+	sanity_check_seg_type(sbi, get_seg_entry(sbi, segno)->type);
+
 	/* readahead multi ssa blocks those have contiguous address */
 	if (__is_large_section(sbi))
 		f2fs_ra_meta_pages(sbi, GET_SUM_BLOCK(sbi, segno),
@@ -1201,7 +1581,7 @@ static int do_garbage_collect(struct f2fs_sb_info *sbi,
 
 		if (get_valid_blocks(sbi, segno, false) == 0)
 			goto freed;
-		if (__is_large_section(sbi) &&
+		if (gc_type == BG_GC && __is_large_section(sbi) &&
 				migrated >= sbi->migration_granularity)
 			goto skip;
 		if (!PageUptodate(sum_page) || unlikely(f2fs_cp_error(sbi)))
@@ -1231,12 +1611,12 @@ static int do_garbage_collect(struct f2fs_sb_info *sbi,
 							segno, gc_type);
 
 		stat_inc_seg_count(sbi, type, gc_type);
+		migrated++;
 
 freed:
 		if (gc_type == FG_GC &&
 				get_valid_blocks(sbi, segno, false) == 0)
 			seg_freed++;
-		migrated++;
 
 		if (__is_large_section(sbi) && segno + 1 < end_segno)
 			sbi->next_victim_seg[gc_type] = segno + 1;
@@ -1314,13 +1694,13 @@ int f2fs_gc(struct f2fs_sb_info *sbi, bool sync,
 		ret = -EINVAL;
 		goto stop;
 	}
-	if (!__get_victim(sbi, &segno, gc_type)) {
-		ret = -ENODATA;
+	ret = __get_victim(sbi, &segno, gc_type);
+	if (ret)
 		goto stop;
-	}
 
 	seg_freed = do_garbage_collect(sbi, segno, &gc_list, gc_type);
-	if (gc_type == FG_GC && seg_freed == sbi->segs_per_sec)
+	if (gc_type == FG_GC &&
+		seg_freed == f2fs_usable_segs_in_sec(sbi, segno))
 		sec_freed++;
 	total_freed += seg_freed;
 
@@ -1368,7 +1748,7 @@ int f2fs_gc(struct f2fs_sb_info *sbi, bool sync,
 				reserved_segments(sbi),
 				prefree_segments(sbi));
 
-	mutex_unlock(&sbi->gc_mutex);
+	up_write(&sbi->gc_lock);
 
 	put_gc_inode(&gc_list);
 
@@ -1377,6 +1757,37 @@ int f2fs_gc(struct f2fs_sb_info *sbi, bool sync,
 	return ret;
 }
 
+int __init f2fs_create_garbage_collection_cache(void)
+{
+	victim_entry_slab = f2fs_kmem_cache_create("f2fs_victim_entry",
+					sizeof(struct victim_entry));
+	if (!victim_entry_slab)
+		return -ENOMEM;
+	return 0;
+}
+
+void f2fs_destroy_garbage_collection_cache(void)
+{
+	kmem_cache_destroy(victim_entry_slab);
+}
+
+static void init_atgc_management(struct f2fs_sb_info *sbi)
+{
+	struct atgc_management *am = &sbi->am;
+
+	if (test_opt(sbi, ATGC) &&
+		SIT_I(sbi)->elapsed_time >= DEF_GC_THREAD_AGE_THRESHOLD)
+		am->atgc_enabled = true;
+
+	am->root = RB_ROOT_CACHED;
+	INIT_LIST_HEAD(&am->victim_list);
+	am->victim_count = 0;
+
+	am->candidate_ratio = DEF_GC_THREAD_CANDIDATE_RATIO;
+	am->max_candidate_count = DEF_GC_THREAD_MAX_CANDIDATE_COUNT;
+	am->age_weight = DEF_GC_THREAD_AGE_WEIGHT;
+}
+
 void f2fs_build_gc_manager(struct f2fs_sb_info *sbi)
 {
 	DIRTY_I(sbi)->v_ops = &default_v_ops;
@@ -1387,18 +1798,37 @@ void f2fs_build_gc_manager(struct f2fs_sb_info *sbi)
 	if (f2fs_is_multi_device(sbi) && !__is_large_section(sbi))
 		SIT_I(sbi)->last_victim[ALLOC_NEXT] =
 				GET_SEGNO(sbi, FDEV(0).end_blk) + 1;
+
+	init_atgc_management(sbi);
 }
 
-static int free_segment_range(struct f2fs_sb_info *sbi, unsigned int start,
-							unsigned int end)
+static int free_segment_range(struct f2fs_sb_info *sbi,
+				unsigned int secs, bool gc_only)
 {
-	int type;
-	unsigned int segno, next_inuse;
+	unsigned int segno, next_inuse, start, end;
+	struct cp_control cpc = { CP_RESIZE, 0, 0, 0 };
+	int gc_mode, gc_type;
 	int err = 0;
+	int type;
+
+	/* Force block allocation for GC */
+	MAIN_SECS(sbi) -= secs;
+	start = MAIN_SECS(sbi) * sbi->segs_per_sec;
+	end = MAIN_SEGS(sbi) - 1;
+
+	mutex_lock(&DIRTY_I(sbi)->seglist_lock);
+	for (gc_mode = 0; gc_mode < MAX_GC_POLICY; gc_mode++)
+		if (SIT_I(sbi)->last_victim[gc_mode] >= start)
+			SIT_I(sbi)->last_victim[gc_mode] = 0;
+
+	for (gc_type = BG_GC; gc_type <= FG_GC; gc_type++)
+		if (sbi->next_victim_seg[gc_type] >= start)
+			sbi->next_victim_seg[gc_type] = NULL_SEGNO;
+	mutex_unlock(&DIRTY_I(sbi)->seglist_lock);
 
 	/* Move out cursegs from the target range */
-	for (type = CURSEG_HOT_DATA; type < NR_CURSEG_TYPE; type++)
-		allocate_segment_for_resize(sbi, type, start, end);
+	for (type = CURSEG_HOT_DATA; type < NR_CURSEG_PERSIST_TYPE; type++)
+		f2fs_allocate_segment_for_resize(sbi, type, start, end);
 
 	/* do GC to move out valid blocks in the range */
 	for (segno = start; segno <= end; segno += sbi->segs_per_sec) {
@@ -1407,18 +1837,24 @@ static int free_segment_range(struct f2fs_sb_info *sbi, unsigned int start,
 			.iroot = RADIX_TREE_INIT(gc_list.iroot, GFP_NOFS),
 		};
 
-		mutex_lock(&sbi->gc_mutex);
 		do_garbage_collect(sbi, segno, &gc_list, FG_GC);
-		mutex_unlock(&sbi->gc_mutex);
 		put_gc_inode(&gc_list);
 
-		if (get_valid_blocks(sbi, segno, true))
-			return -EAGAIN;
+		if (!gc_only && get_valid_blocks(sbi, segno, true)) {
+			err = -EAGAIN;
+			goto out;
+		}
+		if (fatal_signal_pending(current)) {
+			err = -ERESTARTSYS;
+			goto out;
+		}
 	}
+	if (gc_only)
+		goto out;
 
-	err = f2fs_sync_fs(sbi->sb, 1);
+	err = f2fs_write_checkpoint(sbi, &cpc);
 	if (err)
-		return err;
+		goto out;
 
 	next_inuse = find_next_inuse(FREE_I(sbi), end + 1, start);
 	if (next_inuse <= end) {
@@ -1426,44 +1862,77 @@ static int free_segment_range(struct f2fs_sb_info *sbi, unsigned int start,
 			 next_inuse);
 		f2fs_bug_on(sbi, 1);
 	}
+out:
+	MAIN_SECS(sbi) += secs;
 	return err;
 }
 
 static void update_sb_metadata(struct f2fs_sb_info *sbi, int secs)
 {
 	struct f2fs_super_block *raw_sb = F2FS_RAW_SUPER(sbi);
-	int section_count = le32_to_cpu(raw_sb->section_count);
-	int segment_count = le32_to_cpu(raw_sb->segment_count);
-	int segment_count_main = le32_to_cpu(raw_sb->segment_count_main);
-	long long block_count = le64_to_cpu(raw_sb->block_count);
+	int section_count;
+	int segment_count;
+	int segment_count_main;
+	long long block_count;
 	int segs = secs * sbi->segs_per_sec;
 
+	down_write(&sbi->sb_lock);
+
+	section_count = le32_to_cpu(raw_sb->section_count);
+	segment_count = le32_to_cpu(raw_sb->segment_count);
+	segment_count_main = le32_to_cpu(raw_sb->segment_count_main);
+	block_count = le64_to_cpu(raw_sb->block_count);
+
 	raw_sb->section_count = cpu_to_le32(section_count + secs);
 	raw_sb->segment_count = cpu_to_le32(segment_count + segs);
 	raw_sb->segment_count_main = cpu_to_le32(segment_count_main + segs);
 	raw_sb->block_count = cpu_to_le64(block_count +
 					(long long)segs * sbi->blocks_per_seg);
+	if (f2fs_is_multi_device(sbi)) {
+		int last_dev = sbi->s_ndevs - 1;
+		int dev_segs =
+			le32_to_cpu(raw_sb->devs[last_dev].total_segments);
+
+		raw_sb->devs[last_dev].total_segments =
+						cpu_to_le32(dev_segs + segs);
+	}
+
+	up_write(&sbi->sb_lock);
 }
 
 static void update_fs_metadata(struct f2fs_sb_info *sbi, int secs)
 {
 	int segs = secs * sbi->segs_per_sec;
+	long long blks = (long long)segs * sbi->blocks_per_seg;
 	long long user_block_count =
 				le64_to_cpu(F2FS_CKPT(sbi)->user_block_count);
 
 	SM_I(sbi)->segment_count = (int)SM_I(sbi)->segment_count + segs;
 	MAIN_SEGS(sbi) = (int)MAIN_SEGS(sbi) + segs;
+	MAIN_SECS(sbi) += secs;
 	FREE_I(sbi)->free_sections = (int)FREE_I(sbi)->free_sections + secs;
 	FREE_I(sbi)->free_segments = (int)FREE_I(sbi)->free_segments + segs;
-	F2FS_CKPT(sbi)->user_block_count = cpu_to_le64(user_block_count +
-					(long long)segs * sbi->blocks_per_seg);
+	F2FS_CKPT(sbi)->user_block_count = cpu_to_le64(user_block_count + blks);
+
+	if (f2fs_is_multi_device(sbi)) {
+		int last_dev = sbi->s_ndevs - 1;
+
+		FDEV(last_dev).total_segments =
+				(int)FDEV(last_dev).total_segments + segs;
+		FDEV(last_dev).end_blk =
+				(long long)FDEV(last_dev).end_blk + blks;
+#ifdef CONFIG_BLK_DEV_ZONED
+		FDEV(last_dev).nr_blkz = (int)FDEV(last_dev).nr_blkz +
+					(int)(blks >> sbi->log_blocks_per_blkz);
+#endif
+	}
 }
 
 int f2fs_resize_fs(struct f2fs_sb_info *sbi, __u64 block_count)
 {
 	__u64 old_block_count, shrunk_blocks;
+	struct cp_control cpc = { CP_RESIZE, 0, 0, 0 };
 	unsigned int secs;
-	int gc_mode, gc_type;
 	int err = 0;
 	__u32 rem;
 
@@ -1471,6 +1940,15 @@ int f2fs_resize_fs(struct f2fs_sb_info *sbi, __u64 block_count)
 	if (block_count > old_block_count)
 		return -EINVAL;
 
+	if (f2fs_is_multi_device(sbi)) {
+		int last_dev = sbi->s_ndevs - 1;
+		__u64 last_segs = FDEV(last_dev).total_segments;
+
+		if (block_count + last_segs * sbi->blocks_per_seg <=
+								old_block_count)
+			return -EINVAL;
+	}
+
 	/* new fs size should align to section size */
 	div_u64_rem(block_count, BLKS_PER_SEC(sbi), &rem);
 	if (rem)
@@ -1489,10 +1967,27 @@ int f2fs_resize_fs(struct f2fs_sb_info *sbi, __u64 block_count)
 		return -EINVAL;
 	}
 
-	freeze_bdev(sbi->sb->s_bdev);
-
 	shrunk_blocks = old_block_count - block_count;
 	secs = div_u64(shrunk_blocks, BLKS_PER_SEC(sbi));
+
+	/* stop other GC */
+	if (!down_write_trylock(&sbi->gc_lock))
+		return -EAGAIN;
+
+	/* stop CP to protect MAIN_SEC in free_segment_range */
+	f2fs_lock_op(sbi);
+	err = free_segment_range(sbi, secs, true);
+	f2fs_unlock_op(sbi);
+	up_write(&sbi->gc_lock);
+	if (err)
+		return err;
+
+	set_sbi_flag(sbi, SBI_IS_RESIZEFS);
+
+	freeze_super(sbi->sb);
+	down_write(&sbi->gc_lock);
+	down_write(&sbi->cp_global_sem);
+
 	spin_lock(&sbi->stat_lock);
 	if (shrunk_blocks + valid_user_blocks(sbi) +
 		sbi->current_reserved_blocks + sbi->unusable_block_count +
@@ -1501,69 +1996,44 @@ int f2fs_resize_fs(struct f2fs_sb_info *sbi, __u64 block_count)
 	else
 		sbi->user_block_count -= shrunk_blocks;
 	spin_unlock(&sbi->stat_lock);
-	if (err) {
-		thaw_bdev(sbi->sb->s_bdev, sbi->sb);
-		return err;
-	}
-
-	mutex_lock(&sbi->resize_mutex);
-	set_sbi_flag(sbi, SBI_IS_RESIZEFS);
-
-	mutex_lock(&DIRTY_I(sbi)->seglist_lock);
-
-	MAIN_SECS(sbi) -= secs;
-
-	for (gc_mode = 0; gc_mode < MAX_GC_POLICY; gc_mode++)
-		if (SIT_I(sbi)->last_victim[gc_mode] >=
-					MAIN_SECS(sbi) * sbi->segs_per_sec)
-			SIT_I(sbi)->last_victim[gc_mode] = 0;
-
-	for (gc_type = BG_GC; gc_type <= FG_GC; gc_type++)
-		if (sbi->next_victim_seg[gc_type] >=
-					MAIN_SECS(sbi) * sbi->segs_per_sec)
-			sbi->next_victim_seg[gc_type] = NULL_SEGNO;
-
-	mutex_unlock(&DIRTY_I(sbi)->seglist_lock);
-
-	err = free_segment_range(sbi, MAIN_SECS(sbi) * sbi->segs_per_sec,
-			MAIN_SEGS(sbi) - 1);
 	if (err)
-		goto out;
+		goto out_err;
+
+	err = free_segment_range(sbi, secs, false);
+	if (err)
+		goto recover_out;
 
 	update_sb_metadata(sbi, -secs);
 
 	err = f2fs_commit_super(sbi, false);
 	if (err) {
 		update_sb_metadata(sbi, secs);
-		goto out;
+		goto recover_out;
 	}
 
-	mutex_lock(&sbi->cp_mutex);
 	update_fs_metadata(sbi, -secs);
 	clear_sbi_flag(sbi, SBI_IS_RESIZEFS);
 	set_sbi_flag(sbi, SBI_IS_DIRTY);
-	mutex_unlock(&sbi->cp_mutex);
 
-	err = f2fs_sync_fs(sbi->sb, 1);
+	err = f2fs_write_checkpoint(sbi, &cpc);
 	if (err) {
-		mutex_lock(&sbi->cp_mutex);
 		update_fs_metadata(sbi, secs);
-		mutex_unlock(&sbi->cp_mutex);
 		update_sb_metadata(sbi, secs);
 		f2fs_commit_super(sbi, false);
 	}
-out:
+recover_out:
 	if (err) {
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
 		f2fs_err(sbi, "resize_fs failed, should run fsck to repair!");
 
-		MAIN_SECS(sbi) += secs;
 		spin_lock(&sbi->stat_lock);
 		sbi->user_block_count += shrunk_blocks;
 		spin_unlock(&sbi->stat_lock);
 	}
+out_err:
+	up_write(&sbi->cp_global_sem);
+	up_write(&sbi->gc_lock);
+	thaw_super(sbi->sb);
 	clear_sbi_flag(sbi, SBI_IS_RESIZEFS);
-	mutex_unlock(&sbi->resize_mutex);
-	thaw_bdev(sbi->sb->s_bdev, sbi->sb);
 	return err;
 }
diff --git a/fs/f2fs/gc.h b/fs/f2fs/gc.h
index bbac9d3..0c8dae1 100644
--- a/fs/f2fs/gc.h
+++ b/fs/f2fs/gc.h
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * fs/f2fs/gc.h
  *
@@ -14,6 +14,14 @@
 #define DEF_GC_THREAD_MIN_SLEEP_TIME	30000	/* milliseconds */
 #define DEF_GC_THREAD_MAX_SLEEP_TIME	60000
 #define DEF_GC_THREAD_NOGC_SLEEP_TIME	300000	/* wait 5 min */
+
+/* choose candidates from sections which has age of more than 7 days */
+#define DEF_GC_THREAD_AGE_THRESHOLD		(60 * 60 * 24 * 7)
+#define DEF_GC_THREAD_CANDIDATE_RATIO		20	/* select 20% oldest sections as candidates */
+#define DEF_GC_THREAD_MAX_CANDIDATE_COUNT	10	/* select at most 10 sections as candidates */
+#define DEF_GC_THREAD_AGE_WEIGHT		60	/* age weight */
+#define DEFAULT_ACCURACY_CLASS			10000	/* accuracy class */
+
 #define LIMIT_INVALID_BLOCK	40 /* percentage over total user space */
 #define LIMIT_FREE_BLOCK	40 /* percentage over invalid + free space */
 
@@ -41,16 +49,69 @@ struct gc_inode_list {
 	struct radix_tree_root iroot;
 };
 
+struct victim_info {
+	unsigned long long mtime;	/* mtime of section */
+	unsigned int segno;		/* section No. */
+};
+
+struct victim_entry {
+	struct rb_node rb_node;		/* rb node located in rb-tree */
+	union {
+		struct {
+			unsigned long long mtime;	/* mtime of section */
+			unsigned int segno;		/* segment No. */
+		};
+		struct victim_info vi;	/* victim info */
+	};
+	struct list_head list;
+};
+
 /*
  * inline functions
  */
+
+/*
+ * On a Zoned device zone-capacity can be less than zone-size and if
+ * zone-capacity is not aligned to f2fs segment size(2MB), then the segment
+ * starting just before zone-capacity has some blocks spanning across the
+ * zone-capacity, these blocks are not usable.
+ * Such spanning segments can be in free list so calculate the sum of usable
+ * blocks in currently free segments including normal and spanning segments.
+ */
+static inline block_t free_segs_blk_count_zoned(struct f2fs_sb_info *sbi)
+{
+	block_t free_seg_blks = 0;
+	struct free_segmap_info *free_i = FREE_I(sbi);
+	int j;
+
+	spin_lock(&free_i->segmap_lock);
+	for (j = 0; j < MAIN_SEGS(sbi); j++)
+		if (!test_bit(j, free_i->free_segmap))
+			free_seg_blks += f2fs_usable_blks_in_seg(sbi, j);
+	spin_unlock(&free_i->segmap_lock);
+
+	return free_seg_blks;
+}
+
+static inline block_t free_segs_blk_count(struct f2fs_sb_info *sbi)
+{
+	if (f2fs_sb_has_blkzoned(sbi))
+		return free_segs_blk_count_zoned(sbi);
+
+	return free_segments(sbi) << sbi->log_blocks_per_seg;
+}
+
 static inline block_t free_user_blocks(struct f2fs_sb_info *sbi)
 {
-	if (free_segments(sbi) < overprovision_segments(sbi))
+	block_t free_blks, ovp_blks;
+
+	free_blks = free_segs_blk_count(sbi);
+	ovp_blks = overprovision_segments(sbi) << sbi->log_blocks_per_seg;
+
+	if (free_blks < ovp_blks)
 		return 0;
-	else
-		return (free_segments(sbi) - overprovision_segments(sbi))
-			<< sbi->log_blocks_per_seg;
+
+	return free_blks - ovp_blks;
 }
 
 static inline block_t limit_invalid_user_blocks(struct f2fs_sb_info *sbi)
diff --git a/fs/f2fs/hash.c b/fs/f2fs/hash.c
index 5bc4dcd..f9b7064 100644
--- a/fs/f2fs/hash.c
+++ b/fs/f2fs/hash.c
@@ -68,22 +68,9 @@ static void str2hashbuf(const unsigned char *msg, size_t len,
 		*buf++ = pad;
 }
 
-static f2fs_hash_t __f2fs_dentry_hash(const struct qstr *name_info,
-				struct fscrypt_name *fname)
+static u32 TEA_hash_name(const u8 *p, size_t len)
 {
-	__u32 hash;
-	f2fs_hash_t f2fs_hash;
-	const unsigned char *p;
 	__u32 in[8], buf[4];
-	const unsigned char *name = name_info->name;
-	size_t len = name_info->len;
-
-	/* encrypted bigname case */
-	if (fname && !fname->disk_name.name)
-		return cpu_to_le32(fname->hash);
-
-	if (is_dot_dotdot(name_info))
-		return 0;
 
 	/* Initialize the default seed for the hash checksum functions */
 	buf[0] = 0x67452301;
@@ -91,7 +78,6 @@ static f2fs_hash_t __f2fs_dentry_hash(const struct qstr *name_info,
 	buf[2] = 0x98badcfe;
 	buf[3] = 0x10325476;
 
-	p = name;
 	while (1) {
 		str2hashbuf(p, len, in, 4);
 		TEA_transform(buf, in);
@@ -100,41 +86,52 @@ static f2fs_hash_t __f2fs_dentry_hash(const struct qstr *name_info,
 			break;
 		len -= 16;
 	}
-	hash = buf[0];
-	f2fs_hash = cpu_to_le32(hash & ~F2FS_HASH_COL_BIT);
-	return f2fs_hash;
+	return buf[0] & ~F2FS_HASH_COL_BIT;
 }
 
-f2fs_hash_t f2fs_dentry_hash(const struct inode *dir,
-		const struct qstr *name_info, struct fscrypt_name *fname)
+/*
+ * Compute @fname->hash.  For all directories, @fname->disk_name must be set.
+ * For casefolded directories, @fname->usr_fname must be set, and also
+ * @fname->cf_name if the filename is valid Unicode.
+ */
+void f2fs_hash_filename(const struct inode *dir, struct f2fs_filename *fname)
 {
-#ifdef CONFIG_UNICODE
-	struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb);
-	const struct unicode_map *um = sbi->s_encoding;
-	int r, dlen;
-	unsigned char *buff;
-	struct qstr folded;
+	const u8 *name = fname->disk_name.name;
+	size_t len = fname->disk_name.len;
 
-	if (!name_info->len || !IS_CASEFOLDED(dir))
-		goto opaque_seq;
+	WARN_ON_ONCE(!name);
 
-	buff = f2fs_kzalloc(sbi, sizeof(char) * PATH_MAX, GFP_KERNEL);
-	if (!buff)
-		return -ENOMEM;
-
-	dlen = utf8_casefold(um, name_info, buff, PATH_MAX);
-	if (dlen < 0) {
-		kvfree(buff);
-		goto opaque_seq;
+	if (is_dot_dotdot(name, len)) {
+		fname->hash = 0;
+		return;
 	}
-	folded.name = buff;
-	folded.len = dlen;
-	r = __f2fs_dentry_hash(&folded, fname);
 
-	kvfree(buff);
-	return r;
+#ifdef CONFIG_UNICODE
+	if (IS_CASEFOLDED(dir)) {
+		/*
+		 * If the casefolded name is provided, hash it instead of the
+		 * on-disk name.  If the casefolded name is *not* provided, that
+		 * should only be because the name wasn't valid Unicode, so fall
+		 * back to treating the name as an opaque byte sequence.  Note
+		 * that to handle encrypted directories, the fallback must use
+		 * usr_fname (plaintext) rather than disk_name (ciphertext).
+		 */
+		WARN_ON_ONCE(!fname->usr_fname->name);
+		if (fname->cf_name.name) {
+			name = fname->cf_name.name;
+			len = fname->cf_name.len;
+		} else {
+			name = fname->usr_fname->name;
+			len = fname->usr_fname->len;
+		}
+		if (IS_ENCRYPTED(dir)) {
+			struct qstr tmp = QSTR_INIT(name, len);
 
-opaque_seq:
+			fname->hash =
+				cpu_to_le32(fscrypt_fname_siphash(dir, &tmp));
+			return;
+		}
+	}
 #endif
-	return __f2fs_dentry_hash(name_info, fname);
+	fname->hash = cpu_to_le32(TEA_hash_name(name, len));
 }
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index 1833883..9847f00 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -11,6 +11,8 @@
 
 #include "f2fs.h"
 #include "node.h"
+#include <trace/events/f2fs.h>
+#include <trace/events/android_fs.h>
 
 bool f2fs_may_inline_data(struct inode *inode)
 {
@@ -84,14 +86,29 @@ int f2fs_read_inline_data(struct inode *inode, struct page *page)
 {
 	struct page *ipage;
 
+	if (trace_android_fs_dataread_start_enabled()) {
+		char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+		path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    inode);
+		trace_android_fs_dataread_start(inode, page_offset(page),
+						PAGE_SIZE, current->pid,
+						path, current->comm);
+	}
+
 	ipage = f2fs_get_node_page(F2FS_I_SB(inode), inode->i_ino);
 	if (IS_ERR(ipage)) {
+		trace_android_fs_dataread_end(inode, page_offset(page),
+					      PAGE_SIZE);
 		unlock_page(page);
 		return PTR_ERR(ipage);
 	}
 
 	if (!f2fs_has_inline_data(inode)) {
 		f2fs_put_page(ipage, 1);
+		trace_android_fs_dataread_end(inode, page_offset(page),
+					      PAGE_SIZE);
 		return -EAGAIN;
 	}
 
@@ -103,6 +120,8 @@ int f2fs_read_inline_data(struct inode *inode, struct page *page)
 	if (!PageUptodate(page))
 		SetPageUptodate(page);
 	f2fs_put_page(ipage, 1);
+	trace_android_fs_dataread_end(inode, page_offset(page),
+				      PAGE_SIZE);
 	unlock_page(page);
 	return 0;
 }
@@ -186,7 +205,8 @@ int f2fs_convert_inline_inode(struct inode *inode)
 	struct page *ipage, *page;
 	int err = 0;
 
-	if (!f2fs_has_inline_data(inode))
+	if (!f2fs_has_inline_data(inode) ||
+			f2fs_hw_is_readonly(sbi) || f2fs_readonly(sbi->sb))
 		return 0;
 
 	page = f2fs_grab_cache_page(inode->i_mapping, 0, false);
@@ -264,7 +284,7 @@ int f2fs_recover_inline_data(struct inode *inode, struct page *npage)
 	 * [prev.] [next] of inline_data flag
 	 *    o       o  -> recover inline_data
 	 *    o       x  -> remove inline_data, and then recover data blocks
-	 *    x       o  -> remove inline_data, and then recover inline_data
+	 *    x       o  -> remove data blocks, and then recover inline_data
 	 *    x       x  -> recover data blocks
 	 */
 	if (IS_INODE(npage))
@@ -296,6 +316,7 @@ int f2fs_recover_inline_data(struct inode *inode, struct page *npage)
 		if (IS_ERR(ipage))
 			return PTR_ERR(ipage);
 		f2fs_truncate_inline_inode(inode, ipage, 0);
+		stat_dec_inline_inode(inode);
 		clear_inode_flag(inode, FI_INLINE_DATA);
 		f2fs_put_page(ipage, 1);
 	} else if (ri && (ri->i_inline & F2FS_INLINE_DATA)) {
@@ -304,21 +325,21 @@ int f2fs_recover_inline_data(struct inode *inode, struct page *npage)
 		ret = f2fs_truncate_blocks(inode, 0, false);
 		if (ret)
 			return ret;
+		stat_inc_inline_inode(inode);
 		goto process_inline;
 	}
 	return 0;
 }
 
 struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir,
-			struct fscrypt_name *fname, struct page **res_page)
+					const struct f2fs_filename *fname,
+					struct page **res_page)
 {
 	struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb);
-	struct qstr name = FSTR_TO_QSTR(&fname->disk_name);
 	struct f2fs_dir_entry *de;
 	struct f2fs_dentry_ptr d;
 	struct page *ipage;
 	void *inline_dentry;
-	f2fs_hash_t namehash;
 
 	ipage = f2fs_get_node_page(sbi, dir->i_ino);
 	if (IS_ERR(ipage)) {
@@ -326,13 +347,15 @@ struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir,
 		return NULL;
 	}
 
-	namehash = f2fs_dentry_hash(dir, &name, fname);
-
 	inline_dentry = inline_data_addr(dir, ipage);
 
 	make_dentry_ptr_inline(dir, &d, inline_dentry);
-	de = f2fs_find_target_dentry(fname, namehash, NULL, &d);
+	de = f2fs_find_target_dentry(&d, fname, NULL);
 	unlock_page(ipage);
+	if (IS_ERR(de)) {
+		*res_page = ERR_CAST(de);
+		de = NULL;
+	}
 	if (de)
 		*res_page = ipage;
 	else
@@ -373,7 +396,7 @@ static int f2fs_move_inline_dirents(struct inode *dir, struct page *ipage,
 	struct f2fs_dentry_ptr src, dst;
 	int err;
 
-	page = f2fs_grab_cache_page(dir->i_mapping, 0, false);
+	page = f2fs_grab_cache_page(dir->i_mapping, 0, true);
 	if (!page) {
 		f2fs_put_page(ipage, 1);
 		return -ENOMEM;
@@ -448,7 +471,7 @@ static int f2fs_add_inline_entries(struct inode *dir, void *inline_dentry)
 
 	while (bit_pos < d.max) {
 		struct f2fs_dir_entry *de;
-		struct qstr new_name;
+		struct f2fs_filename fname;
 		nid_t ino;
 		umode_t fake_mode;
 
@@ -464,14 +487,19 @@ static int f2fs_add_inline_entries(struct inode *dir, void *inline_dentry)
 			continue;
 		}
 
-		new_name.name = d.filename[bit_pos];
-		new_name.len = le16_to_cpu(de->name_len);
+		/*
+		 * We only need the disk_name and hash to move the dentry.
+		 * We don't need the original or casefolded filenames.
+		 */
+		memset(&fname, 0, sizeof(fname));
+		fname.disk_name.name = d.filename[bit_pos];
+		fname.disk_name.len = le16_to_cpu(de->name_len);
+		fname.hash = de->hash_code;
 
 		ino = le32_to_cpu(de->ino);
 		fake_mode = f2fs_get_de_type(de) << S_SHIFT;
 
-		err = f2fs_add_regular_entry(dir, &new_name, NULL, NULL,
-							ino, fake_mode);
+		err = f2fs_add_regular_entry(dir, &fname, NULL, ino, fake_mode);
 		if (err)
 			goto punch_dentry_pages;
 
@@ -520,7 +548,7 @@ static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage,
 			!f2fs_has_inline_xattr(dir))
 		F2FS_I(dir)->i_inline_xattr_size = 0;
 
-	kvfree(backup_dentry);
+	kfree(backup_dentry);
 	return 0;
 recover:
 	lock_page(ipage);
@@ -531,11 +559,11 @@ static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage,
 	set_page_dirty(ipage);
 	f2fs_put_page(ipage, 1);
 
-	kvfree(backup_dentry);
+	kfree(backup_dentry);
 	return err;
 }
 
-static int f2fs_convert_inline_dir(struct inode *dir, struct page *ipage,
+static int do_convert_inline_dir(struct inode *dir, struct page *ipage,
 							void *inline_dentry)
 {
 	if (!F2FS_I(dir)->i_dir_level)
@@ -544,17 +572,55 @@ static int f2fs_convert_inline_dir(struct inode *dir, struct page *ipage,
 		return f2fs_move_rehashed_dirents(dir, ipage, inline_dentry);
 }
 
-int f2fs_add_inline_entry(struct inode *dir, const struct qstr *new_name,
-				const struct qstr *orig_name,
-				struct inode *inode, nid_t ino, umode_t mode)
+int f2fs_try_convert_inline_dir(struct inode *dir, struct dentry *dentry)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
+	struct page *ipage;
+	struct f2fs_filename fname;
+	void *inline_dentry = NULL;
+	int err = 0;
+
+	if (!f2fs_has_inline_dentry(dir))
+		return 0;
+
+	f2fs_lock_op(sbi);
+
+	err = f2fs_setup_filename(dir, &dentry->d_name, 0, &fname);
+	if (err)
+		goto out;
+
+	ipage = f2fs_get_node_page(sbi, dir->i_ino);
+	if (IS_ERR(ipage)) {
+		err = PTR_ERR(ipage);
+		goto out_fname;
+	}
+
+	if (f2fs_has_enough_room(dir, ipage, &fname)) {
+		f2fs_put_page(ipage, 1);
+		goto out_fname;
+	}
+
+	inline_dentry = inline_data_addr(dir, ipage);
+
+	err = do_convert_inline_dir(dir, ipage, inline_dentry);
+	if (!err)
+		f2fs_put_page(ipage, 1);
+out_fname:
+	f2fs_free_filename(&fname);
+out:
+	f2fs_unlock_op(sbi);
+	return err;
+}
+
+int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
+			  struct inode *inode, nid_t ino, umode_t mode)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
 	struct page *ipage;
 	unsigned int bit_pos;
-	f2fs_hash_t name_hash;
 	void *inline_dentry = NULL;
 	struct f2fs_dentry_ptr d;
-	int slots = GET_DENTRY_SLOTS(new_name->len);
+	int slots = GET_DENTRY_SLOTS(fname->disk_name.len);
 	struct page *page = NULL;
 	int err = 0;
 
@@ -567,7 +633,7 @@ int f2fs_add_inline_entry(struct inode *dir, const struct qstr *new_name,
 
 	bit_pos = f2fs_room_for_filename(d.bitmap, slots, d.max);
 	if (bit_pos >= d.max) {
-		err = f2fs_convert_inline_dir(dir, ipage, inline_dentry);
+		err = do_convert_inline_dir(dir, ipage, inline_dentry);
 		if (err)
 			return err;
 		err = -EAGAIN;
@@ -576,8 +642,7 @@ int f2fs_add_inline_entry(struct inode *dir, const struct qstr *new_name,
 
 	if (inode) {
 		down_write(&F2FS_I(inode)->i_sem);
-		page = f2fs_init_inode_metadata(inode, dir, new_name,
-						orig_name, ipage);
+		page = f2fs_init_inode_metadata(inode, dir, fname, ipage);
 		if (IS_ERR(page)) {
 			err = PTR_ERR(page);
 			goto fail;
@@ -586,8 +651,8 @@ int f2fs_add_inline_entry(struct inode *dir, const struct qstr *new_name,
 
 	f2fs_wait_on_page_writeback(ipage, NODE, true, true);
 
-	name_hash = f2fs_dentry_hash(dir, new_name, NULL);
-	f2fs_update_dentry(ino, mode, &d, new_name, name_hash, bit_pos);
+	f2fs_update_dentry(ino, mode, &d, &fname->disk_name, fname->hash,
+			   bit_pos);
 
 	set_page_dirty(ipage);
 
@@ -741,6 +806,7 @@ int f2fs_inline_data_fiemap(struct inode *inode,
 	byteaddr += (char *)inline_data_addr(inode, ipage) -
 					(char *)F2FS_INODE(ipage);
 	err = fiemap_fill_next_extent(fieinfo, start, byteaddr, ilen, flags);
+	trace_f2fs_fiemap(inode, start, byteaddr, ilen, flags, err);
 out:
 	f2fs_put_page(ipage, 1);
 	return err;
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 386ad54..349d9cb 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -200,6 +200,7 @@ static bool sanity_check_inode(struct inode *inode, struct page *node_page)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct f2fs_inode_info *fi = F2FS_I(inode);
+	struct f2fs_inode *ri = F2FS_INODE(node_page);
 	unsigned long long iblocks;
 
 	iblocks = le64_to_cpu(F2FS_INODE(node_page)->i_blocks);
@@ -286,6 +287,46 @@ static bool sanity_check_inode(struct inode *inode, struct page *node_page)
 		return false;
 	}
 
+	if ((fi->i_flags & F2FS_CASEFOLD_FL) && !f2fs_sb_has_casefold(sbi)) {
+		set_sbi_flag(sbi, SBI_NEED_FSCK);
+		f2fs_warn(sbi, "%s: inode (ino=%lx) has casefold flag, but casefold feature is off",
+			  __func__, inode->i_ino);
+		return false;
+	}
+
+	if (f2fs_has_extra_attr(inode) && f2fs_sb_has_compression(sbi) &&
+			fi->i_flags & F2FS_COMPR_FL &&
+			F2FS_FITS_IN_INODE(ri, fi->i_extra_isize,
+						i_log_cluster_size)) {
+		if (ri->i_compress_algorithm >= COMPRESS_MAX) {
+			set_sbi_flag(sbi, SBI_NEED_FSCK);
+			f2fs_warn(sbi, "%s: inode (ino=%lx) has unsupported "
+				"compress algorithm: %u, run fsck to fix",
+				  __func__, inode->i_ino,
+				  ri->i_compress_algorithm);
+			return false;
+		}
+		if (le64_to_cpu(ri->i_compr_blocks) >
+				SECTOR_TO_BLOCK(inode->i_blocks)) {
+			set_sbi_flag(sbi, SBI_NEED_FSCK);
+			f2fs_warn(sbi, "%s: inode (ino=%lx) has inconsistent "
+				"i_compr_blocks:%llu, i_blocks:%llu, run fsck to fix",
+				  __func__, inode->i_ino,
+				  le64_to_cpu(ri->i_compr_blocks),
+				  SECTOR_TO_BLOCK(inode->i_blocks));
+			return false;
+		}
+		if (ri->i_log_cluster_size < MIN_COMPRESS_LOG_SIZE ||
+			ri->i_log_cluster_size > MAX_COMPRESS_LOG_SIZE) {
+			set_sbi_flag(sbi, SBI_NEED_FSCK);
+			f2fs_warn(sbi, "%s: inode (ino=%lx) has unsupported "
+				"log cluster size: %u, run fsck to fix",
+				  __func__, inode->i_ino,
+				  ri->i_log_cluster_size);
+			return false;
+		}
+	}
+
 	return true;
 }
 
@@ -331,13 +372,12 @@ static int do_read_inode(struct inode *inode)
 	fi->i_flags = le32_to_cpu(ri->i_flags);
 	if (S_ISREG(inode->i_mode))
 		fi->i_flags &= ~F2FS_PROJINHERIT_FL;
-	fi->flags = 0;
+	bitmap_zero(fi->flags, FI_MAX);
 	fi->i_advise = ri->i_advise;
 	fi->i_pino = le32_to_cpu(ri->i_pino);
 	fi->i_dir_level = ri->i_dir_level;
 
-	if (f2fs_init_extent_tree(inode, &ri->i_ext))
-		set_page_dirty(node_page);
+	f2fs_init_extent_tree(inode, node_page);
 
 	get_inline_info(inode, ri);
 
@@ -371,6 +411,7 @@ static int do_read_inode(struct inode *inode)
 
 	/* try to recover cold bit for non-dir inode */
 	if (!S_ISDIR(inode->i_mode) && !is_cold_node(node_page)) {
+		f2fs_wait_on_page_writeback(node_page, NODE, true, true);
 		set_cold_node(node_page, false);
 		set_page_dirty(node_page);
 	}
@@ -407,6 +448,20 @@ static int do_read_inode(struct inode *inode)
 		fi->i_crtime.tv_nsec = le32_to_cpu(ri->i_crtime_nsec);
 	}
 
+	if (f2fs_has_extra_attr(inode) && f2fs_sb_has_compression(sbi) &&
+					(fi->i_flags & F2FS_COMPR_FL)) {
+		if (F2FS_FITS_IN_INODE(ri, fi->i_extra_isize,
+					i_log_cluster_size)) {
+			atomic_set(&fi->i_compr_blocks,
+					le64_to_cpu(ri->i_compr_blocks));
+			fi->i_compress_algorithm = ri->i_compress_algorithm;
+			fi->i_log_cluster_size = ri->i_log_cluster_size;
+			fi->i_compress_flag = le16_to_cpu(ri->i_compress_flag);
+			fi->i_cluster_size = 1 << fi->i_log_cluster_size;
+			set_inode_flag(inode, FI_COMPRESSED_FILE);
+		}
+	}
+
 	F2FS_I(inode)->i_disk_time[0] = inode->i_atime;
 	F2FS_I(inode)->i_disk_time[1] = inode->i_ctime;
 	F2FS_I(inode)->i_disk_time[2] = inode->i_mtime;
@@ -416,6 +471,8 @@ static int do_read_inode(struct inode *inode)
 	stat_inc_inline_xattr(inode);
 	stat_inc_inline_inode(inode);
 	stat_inc_inline_dir(inode);
+	stat_inc_compr_inode(inode);
+	stat_add_compr_blocks(inode, atomic_read(&fi->i_compr_blocks));
 
 	return 0;
 }
@@ -490,7 +547,7 @@ struct inode *f2fs_iget_retry(struct super_block *sb, unsigned long ino)
 	inode = f2fs_iget(sb, ino);
 	if (IS_ERR(inode)) {
 		if (PTR_ERR(inode) == -ENOMEM) {
-			congestion_wait(BLK_RW_ASYNC, HZ/50);
+			congestion_wait(BLK_RW_ASYNC, DEFAULT_IO_TIMEOUT);
 			goto retry;
 		}
 	}
@@ -569,6 +626,20 @@ void f2fs_update_inode(struct inode *inode, struct page *node_page)
 			ri->i_crtime_nsec =
 				cpu_to_le32(F2FS_I(inode)->i_crtime.tv_nsec);
 		}
+
+		if (f2fs_sb_has_compression(F2FS_I_SB(inode)) &&
+			F2FS_FITS_IN_INODE(ri, F2FS_I(inode)->i_extra_isize,
+							i_log_cluster_size)) {
+			ri->i_compr_blocks =
+				cpu_to_le64(atomic_read(
+					&F2FS_I(inode)->i_compr_blocks));
+			ri->i_compress_algorithm =
+				F2FS_I(inode)->i_compress_algorithm;
+			ri->i_compress_flag =
+				cpu_to_le16(F2FS_I(inode)->i_compress_flag);
+			ri->i_log_cluster_size =
+				F2FS_I(inode)->i_log_cluster_size;
+		}
 	}
 
 	__set_inode_rdev(inode, ri);
@@ -681,7 +752,7 @@ void f2fs_evict_inode(struct inode *inode)
 		err = f2fs_truncate(inode);
 
 	if (time_to_inject(sbi, FAULT_EVICT_INODE)) {
-		f2fs_show_injection_info(FAULT_EVICT_INODE);
+		f2fs_show_injection_info(sbi, FAULT_EVICT_INODE);
 		err = -EIO;
 	}
 
@@ -711,6 +782,9 @@ void f2fs_evict_inode(struct inode *inode)
 	stat_dec_inline_xattr(inode);
 	stat_dec_inline_dir(inode);
 	stat_dec_inline_inode(inode);
+	stat_dec_compr_inode(inode);
+	stat_sub_compr_blocks(inode,
+			atomic_read(&F2FS_I(inode)->i_compr_blocks));
 
 	if (likely(!f2fs_cp_error(sbi) &&
 				!is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
@@ -718,7 +792,7 @@ void f2fs_evict_inode(struct inode *inode)
 	else
 		f2fs_inode_synced(inode);
 
-	/* ino == 0, if f2fs_new_inode() was failed t*/
+	/* for the case f2fs_new_inode() was failed, .i_ino is zero, skip it */
 	if (inode->i_ino)
 		invalidate_mapping_pages(NODE_MAPPING(sbi), inode->i_ino,
 							inode->i_ino);
diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index 5d95842..6edb1ab 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -28,6 +28,7 @@ static struct inode *f2fs_new_inode(struct inode *dir, umode_t mode)
 	nid_t ino;
 	struct inode *inode;
 	bool nid_free = false;
+	bool encrypt = false;
 	int xattr_size = 0;
 	int err;
 
@@ -69,15 +70,17 @@ static struct inode *f2fs_new_inode(struct inode *dir, umode_t mode)
 		F2FS_I(inode)->i_projid = make_kprojid(&init_user_ns,
 							F2FS_DEF_PROJID);
 
+	err = fscrypt_prepare_new_inode(dir, inode, &encrypt);
+	if (err)
+		goto fail_drop;
+
 	err = dquot_initialize(inode);
 	if (err)
 		goto fail_drop;
 
 	set_inode_flag(inode, FI_NEW_INODE);
 
-	/* If the directory encrypted, then we should encrypt the inode. */
-	if ((IS_ENCRYPTED(dir) || DUMMY_ENCRYPTION_ENABLED(sbi)) &&
-				f2fs_may_encrypt(inode))
+	if (encrypt)
 		f2fs_set_encrypted_inode(inode);
 
 	if (f2fs_sb_has_extra_attr(sbi)) {
@@ -119,6 +122,13 @@ static struct inode *f2fs_new_inode(struct inode *dir, umode_t mode)
 	if (F2FS_I(inode)->i_flags & F2FS_PROJINHERIT_FL)
 		set_inode_flag(inode, FI_PROJ_INHERIT);
 
+	if (f2fs_sb_has_compression(sbi)) {
+		/* Inherit the compression flag in directory */
+		if ((F2FS_I(dir)->i_flags & F2FS_COMPR_FL) &&
+					f2fs_may_compress(inode))
+			set_compress_context(inode);
+	}
+
 	f2fs_set_inode_flags(inode);
 
 	trace_f2fs_new_inode(inode, 0);
@@ -149,6 +159,9 @@ static inline int is_extension_exist(const unsigned char *s, const char *sub)
 	size_t sublen = strlen(sub);
 	int i;
 
+	if (sublen == 1 && *sub == '*')
+		return 1;
+
 	/*
 	 * filename format of multimedia file should be defined as:
 	 * "filename + '.' + extension + (optional: '.' + temp extension)".
@@ -167,7 +180,7 @@ static inline int is_extension_exist(const unsigned char *s, const char *sub)
 }
 
 /*
- * Set multimedia files as cold files for hot/cold data separation
+ * Set file's temperature for hot/cold data separation
  */
 static inline void set_file_temperature(struct f2fs_sb_info *sbi, struct inode *inode,
 		const unsigned char *name)
@@ -262,6 +275,45 @@ int f2fs_update_extension_list(struct f2fs_sb_info *sbi, const char *name,
 	return 0;
 }
 
+static void set_compress_inode(struct f2fs_sb_info *sbi, struct inode *inode,
+						const unsigned char *name)
+{
+	__u8 (*extlist)[F2FS_EXTENSION_LEN] = sbi->raw_super->extension_list;
+	unsigned char (*ext)[F2FS_EXTENSION_LEN];
+	unsigned int ext_cnt = F2FS_OPTION(sbi).compress_ext_cnt;
+	int i, cold_count, hot_count;
+
+	if (!f2fs_sb_has_compression(sbi) ||
+			is_inode_flag_set(inode, FI_COMPRESSED_FILE) ||
+			F2FS_I(inode)->i_flags & F2FS_NOCOMP_FL ||
+			!f2fs_may_compress(inode))
+		return;
+
+	down_read(&sbi->sb_lock);
+
+	cold_count = le32_to_cpu(sbi->raw_super->extension_count);
+	hot_count = sbi->raw_super->hot_ext_count;
+
+	for (i = cold_count; i < cold_count + hot_count; i++) {
+		if (is_extension_exist(name, extlist[i])) {
+			up_read(&sbi->sb_lock);
+			return;
+		}
+	}
+
+	up_read(&sbi->sb_lock);
+
+	ext = F2FS_OPTION(sbi).extensions;
+
+	for (i = 0; i < ext_cnt; i++) {
+		if (!is_extension_exist(name, ext[i]))
+			continue;
+
+		set_compress_context(inode);
+		return;
+	}
+}
+
 static int f2fs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
 						bool excl)
 {
@@ -286,6 +338,8 @@ static int f2fs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
 	if (!test_opt(sbi, DISABLE_EXT_IDENTIFY))
 		set_file_temperature(sbi, inode, dentry->d_name.name);
 
+	set_compress_inode(sbi, inode, dentry->d_name.name);
+
 	inode->i_op = &f2fs_file_inode_operations;
 	inode->i_fop = &f2fs_file_operations;
 	inode->i_mapping->a_ops = &f2fs_dblock_aops;
@@ -433,7 +487,7 @@ static struct dentry *f2fs_lookup(struct inode *dir, struct dentry *dentry,
 	nid_t ino = -1;
 	int err = 0;
 	unsigned int root_ino = F2FS_ROOT_INO(F2FS_I_SB(dir));
-	struct fscrypt_name fname;
+	struct f2fs_filename fname;
 
 	trace_f2fs_lookup_start(dir, dentry, flags);
 
@@ -442,19 +496,21 @@ static struct dentry *f2fs_lookup(struct inode *dir, struct dentry *dentry,
 		goto out;
 	}
 
-	err = fscrypt_prepare_lookup(dir, dentry, &fname);
+	err = f2fs_prepare_lookup(dir, dentry, &fname);
+	generic_set_encrypted_ci_d_ops(dentry);
 	if (err == -ENOENT)
 		goto out_splice;
 	if (err)
 		goto out;
 	de = __f2fs_find_entry(dir, &fname, &page);
-	fscrypt_free_filename(&fname);
+	f2fs_free_filename(&fname);
 
 	if (!de) {
 		if (IS_ERR(page)) {
 			err = PTR_ERR(page);
 			goto out;
 		}
+		err = -ENOENT;
 		goto out_splice;
 	}
 
@@ -500,7 +556,7 @@ static struct dentry *f2fs_lookup(struct inode *dir, struct dentry *dentry,
 #endif
 	new = d_splice_alias(inode, dentry);
 	err = PTR_ERR_OR_ZERO(new);
-	trace_f2fs_lookup_end(dir, dentry, ino, err);
+	trace_f2fs_lookup_end(dir, dentry, ino, !new ? -ENOENT : err);
 	return new;
 out_iput:
 	iput(inode);
@@ -515,19 +571,21 @@ static int f2fs_unlink(struct inode *dir, struct dentry *dentry)
 	struct inode *inode = d_inode(dentry);
 	struct f2fs_dir_entry *de;
 	struct page *page;
-	int err = -ENOENT;
+	int err;
 
 	trace_f2fs_unlink_enter(dir, dentry);
 
-	if (unlikely(f2fs_cp_error(sbi)))
-		return -EIO;
+	if (unlikely(f2fs_cp_error(sbi))) {
+		err = -EIO;
+		goto fail;
+	}
 
 	err = dquot_initialize(dir);
 	if (err)
-		return err;
+		goto fail;
 	err = dquot_initialize(inode);
 	if (err)
-		return err;
+		goto fail;
 
 	de = f2fs_find_entry(dir, &dentry->d_name, &page);
 	if (!de) {
@@ -550,7 +608,7 @@ static int f2fs_unlink(struct inode *dir, struct dentry *dentry)
 	/* VFS negative dentries are incompatible with Encoding and
 	 * Case-insensitiveness. Eventually we'll want avoid
 	 * invalidating the dentries here, alongside with returning the
-	 * negative dentries at f2fs_lookup(), when it is  better
+	 * negative dentries at f2fs_lookup(), when it is better
 	 * supported by the VFS for the CI case.
 	 */
 	if (IS_CASEFOLDED(dir))
@@ -655,7 +713,7 @@ static int f2fs_symlink(struct inode *dir, struct dentry *dentry,
 	f2fs_handle_failed_inode(inode);
 out_free_encrypted_link:
 	if (disk_link.name != (unsigned char *)symname)
-		kvfree(disk_link.name);
+		kfree(disk_link.name);
 	return err;
 }
 
@@ -825,12 +883,6 @@ static int f2fs_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode)
 	if (!f2fs_is_checkpoint_ready(sbi))
 		return -ENOSPC;
 
-	if (IS_ENCRYPTED(dir) || DUMMY_ENCRYPTION_ENABLED(sbi)) {
-		int err = fscrypt_get_encryption_info(dir);
-		if (err)
-			return err;
-	}
-
 	return __f2fs_tmpfile(dir, dentry, mode, NULL);
 }
 
@@ -850,12 +902,11 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
 	struct inode *old_inode = d_inode(old_dentry);
 	struct inode *new_inode = d_inode(new_dentry);
 	struct inode *whiteout = NULL;
-	struct page *old_dir_page;
+	struct page *old_dir_page = NULL;
 	struct page *old_page, *new_page = NULL;
 	struct f2fs_dir_entry *old_dir_entry = NULL;
 	struct f2fs_dir_entry *old_entry;
 	struct f2fs_dir_entry *new_entry;
-	bool is_old_inline = f2fs_has_inline_dentry(old_dir);
 	int err;
 
 	if (unlikely(f2fs_cp_error(sbi)))
@@ -868,6 +919,20 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
 			F2FS_I(old_dentry->d_inode)->i_projid)))
 		return -EXDEV;
 
+	/*
+	 * If new_inode is null, the below renaming flow will
+	 * add a link in old_dir which can conver inline_dir.
+	 * After then, if we failed to get the entry due to other
+	 * reasons like ENOMEM, we had to remove the new entry.
+	 * Instead of adding such the error handling routine, let's
+	 * simply convert first here.
+	 */
+	if (old_dir == new_dir && !new_inode) {
+		err = f2fs_try_convert_inline_dir(old_dir, new_dentry);
+		if (err)
+			return err;
+	}
+
 	if (flags & RENAME_WHITEOUT) {
 		err = f2fs_create_whiteout(old_dir, &whiteout);
 		if (err)
@@ -929,6 +994,7 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
 			goto put_out_dir;
 
 		f2fs_set_link(new_dir, new_entry, new_page, old_inode);
+		new_page = NULL;
 
 		new_inode->i_ctime = current_time(new_inode);
 		down_write(&F2FS_I(new_inode)->i_sem);
@@ -954,28 +1020,6 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
 
 		if (old_dir_entry)
 			f2fs_i_links_write(new_dir, true);
-
-		/*
-		 * old entry and new entry can locate in the same inline
-		 * dentry in inode, when attaching new entry in inline dentry,
-		 * it could force inline dentry conversion, after that,
-		 * old_entry and old_page will point to wrong address, in
-		 * order to avoid this, let's do the check and update here.
-		 */
-		if (is_old_inline && !f2fs_has_inline_dentry(old_dir)) {
-			f2fs_put_page(old_page, 0);
-			old_page = NULL;
-
-			old_entry = f2fs_find_entry(old_dir,
-						&old_dentry->d_name, &old_page);
-			if (!old_entry) {
-				err = -ENOENT;
-				if (IS_ERR(old_page))
-					err = PTR_ERR(old_page);
-				f2fs_unlock_op(sbi);
-				goto out_dir;
-			}
-		}
 	}
 
 	down_write(&F2FS_I(old_inode)->i_sem);
@@ -990,6 +1034,7 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
 	f2fs_mark_inode_dirty_sync(old_inode, false);
 
 	f2fs_delete_entry(old_entry, old_page, old_dir, NULL);
+	old_page = NULL;
 
 	if (whiteout) {
 		set_inode_flag(whiteout, FI_INC_LINK);
@@ -1025,8 +1070,7 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
 
 put_out_dir:
 	f2fs_unlock_op(sbi);
-	if (new_page)
-		f2fs_put_page(new_page, 0);
+	f2fs_put_page(new_page, 0);
 out_dir:
 	if (old_dir_entry)
 		f2fs_put_page(old_dir_page, 0);
@@ -1249,12 +1293,10 @@ static const char *f2fs_encrypted_get_link(struct dentry *dentry,
 }
 
 const struct inode_operations f2fs_encrypted_symlink_inode_operations = {
-	.get_link       = f2fs_encrypted_get_link,
+	.get_link	= f2fs_encrypted_get_link,
 	.getattr	= f2fs_getattr,
 	.setattr	= f2fs_setattr,
-#ifdef CONFIG_F2FS_FS_XATTR
 	.listxattr	= f2fs_listxattr,
-#endif
 };
 
 const struct inode_operations f2fs_dir_inode_operations = {
@@ -1272,27 +1314,21 @@ const struct inode_operations f2fs_dir_inode_operations = {
 	.setattr	= f2fs_setattr,
 	.get_acl	= f2fs_get_acl,
 	.set_acl	= f2fs_set_acl,
-#ifdef CONFIG_F2FS_FS_XATTR
 	.listxattr	= f2fs_listxattr,
-#endif
 	.fiemap		= f2fs_fiemap,
 };
 
 const struct inode_operations f2fs_symlink_inode_operations = {
-	.get_link       = f2fs_get_link,
+	.get_link	= f2fs_get_link,
 	.getattr	= f2fs_getattr,
 	.setattr	= f2fs_setattr,
-#ifdef CONFIG_F2FS_FS_XATTR
 	.listxattr	= f2fs_listxattr,
-#endif
 };
 
 const struct inode_operations f2fs_special_inode_operations = {
 	.getattr	= f2fs_getattr,
-	.setattr        = f2fs_setattr,
+	.setattr	= f2fs_setattr,
 	.get_acl	= f2fs_get_acl,
 	.set_acl	= f2fs_set_acl,
-#ifdef CONFIG_F2FS_FS_XATTR
 	.listxattr	= f2fs_listxattr,
-#endif
 };
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 7ce3369..c2bb059 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -514,9 +514,6 @@ int f2fs_try_to_free_nats(struct f2fs_sb_info *sbi, int nr_shrink)
 	return nr - nr_shrink;
 }
 
-/*
- * This function always returns success
- */
 int f2fs_get_node_info(struct f2fs_sb_info *sbi, nid_t nid,
 						struct node_info *ni)
 {
@@ -720,8 +717,7 @@ static int get_node_path(struct inode *inode, long block,
 /*
  * Caller should call f2fs_put_dnode(dn).
  * Also, it should grab and release a rwsem by calling f2fs_lock_op() and
- * f2fs_unlock_op() only if ro is not set RDONLY_NODE.
- * In the case of RDONLY_NODE, we don't need to care about mutex.
+ * f2fs_unlock_op() only if mode is set with ALLOC_NODE.
  */
 int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
 {
@@ -813,8 +809,7 @@ int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
 	dn->nid = nids[level];
 	dn->ofs_in_node = offset[level];
 	dn->node_page = npage[level];
-	dn->data_blkaddr = datablock_addr(dn->inode,
-				dn->node_page, dn->ofs_in_node);
+	dn->data_blkaddr = f2fs_data_blkaddr(dn);
 	return 0;
 
 release_pages:
@@ -1050,8 +1045,10 @@ int f2fs_truncate_inode_blocks(struct inode *inode, pgoff_t from)
 	trace_f2fs_truncate_inode_blocks_enter(inode, from);
 
 	level = get_node_path(inode, from, offset, noffset);
-	if (level < 0)
+	if (level < 0) {
+		trace_f2fs_truncate_inode_blocks_exit(inode, level);
 		return level;
+	}
 
 	page = f2fs_get_node_page(sbi, inode->i_ino);
 	if (IS_ERR(page)) {
@@ -1192,8 +1189,9 @@ int f2fs_remove_inode_page(struct inode *inode)
 	}
 
 	if (unlikely(inode->i_blocks != 0 && inode->i_blocks != 8)) {
-		f2fs_warn(F2FS_I_SB(inode), "Inconsistent i_blocks, ino:%lu, iblocks:%llu",
-			  inode->i_ino, (unsigned long long)inode->i_blocks);
+		f2fs_warn(F2FS_I_SB(inode),
+			"f2fs_remove_inode_page: inconsistent i_blocks, ino:%lu, iblocks:%llu",
+			inode->i_ino, (unsigned long long)inode->i_blocks);
 		set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_FSCK);
 	}
 
@@ -1308,7 +1306,13 @@ static int read_node_page(struct page *page, int op_flags)
 	}
 
 	fio.new_blkaddr = fio.old_blkaddr = ni.blk_addr;
-	return f2fs_submit_page_bio(&fio);
+
+	err = f2fs_submit_page_bio(&fio);
+
+	if (!err)
+		f2fs_update_iostat(sbi, FS_NODE_READ_IO, F2FS_BLKSIZE);
+
+	return err;
 }
 
 /*
@@ -1522,8 +1526,15 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted,
 
 	trace_f2fs_writepage(page, NODE);
 
-	if (unlikely(f2fs_cp_error(sbi)))
+	if (unlikely(f2fs_cp_error(sbi))) {
+		if (is_sbi_flag_set(sbi, SBI_IS_CLOSE)) {
+			ClearPageUptodate(page);
+			dec_page_count(sbi, F2FS_DIRTY_NODES);
+			unlock_page(page);
+			return 0;
+		}
 		goto redirty_out;
+	}
 
 	if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
 		goto redirty_out;
@@ -1721,7 +1732,7 @@ int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
 					set_dentry_mark(page,
 						f2fs_need_dentry_mark(sbi, ino));
 				}
-				/*  may be written by other thread */
+				/* may be written by other thread */
 				if (!PageDirty(page))
 					set_page_dirty(page);
 			}
@@ -1809,6 +1820,51 @@ static bool flush_dirty_inode(struct page *page)
 	return true;
 }
 
+void f2fs_flush_inline_data(struct f2fs_sb_info *sbi)
+{
+	pgoff_t index = 0;
+	struct pagevec pvec;
+	int nr_pages;
+
+	pagevec_init(&pvec);
+
+	while ((nr_pages = pagevec_lookup_tag(&pvec,
+			NODE_MAPPING(sbi), &index, PAGECACHE_TAG_DIRTY))) {
+		int i;
+
+		for (i = 0; i < nr_pages; i++) {
+			struct page *page = pvec.pages[i];
+
+			if (!IS_DNODE(page))
+				continue;
+
+			lock_page(page);
+
+			if (unlikely(page->mapping != NODE_MAPPING(sbi))) {
+continue_unlock:
+				unlock_page(page);
+				continue;
+			}
+
+			if (!PageDirty(page)) {
+				/* someone wrote it for us */
+				goto continue_unlock;
+			}
+
+			/* flush inline_data, if it's async context. */
+			if (is_inline_node(page)) {
+				clear_inline_node(page);
+				unlock_page(page);
+				flush_inline_data(sbi, ino_of_node(page));
+				continue;
+			}
+			unlock_page(page);
+		}
+		pagevec_release(&pvec);
+		cond_resched();
+	}
+}
+
 int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,
 				struct writeback_control *wbc,
 				bool do_balance, enum iostat_type io_type)
@@ -1872,6 +1928,10 @@ int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,
 				goto continue_unlock;
 			}
 
+			/* flush inline_data/inode, if it's async context. */
+			if (!do_balance)
+				goto write_node;
+
 			/* flush inline_data */
 			if (is_inline_node(page)) {
 				clear_inline_node(page);
@@ -1886,7 +1946,7 @@ int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,
 				if (flush_dirty_inode(page))
 					goto lock_node;
 			}
-
+write_node:
 			f2fs_wait_on_page_writeback(page, NODE, true, true);
 
 			if (!clear_page_dirty_for_io(page))
@@ -1984,7 +2044,7 @@ static int f2fs_write_node_pages(struct address_space *mapping,
 		goto skip_write;
 
 	/* balancing f2fs's metadata in background */
-	f2fs_balance_fs_bg(sbi);
+	f2fs_balance_fs_bg(sbi, true);
 
 	/* collect a number of dirty node pages and write together */
 	if (wbc->sync_mode != WB_SYNC_ALL &&
@@ -2045,7 +2105,7 @@ const struct address_space_operations f2fs_node_aops = {
 	.invalidatepage	= f2fs_invalidate_page,
 	.releasepage	= f2fs_release_page,
 #ifdef CONFIG_MIGRATION
-	.migratepage    = f2fs_migrate_page,
+	.migratepage	= f2fs_migrate_page,
 #endif
 };
 
@@ -2056,7 +2116,7 @@ static struct free_nid *__lookup_free_nid_list(struct f2fs_nm_info *nm_i,
 }
 
 static int __insert_free_nid(struct f2fs_sb_info *sbi,
-			struct free_nid *i, enum nid_state state)
+				struct free_nid *i)
 {
 	struct f2fs_nm_info *nm_i = NM_I(sbi);
 
@@ -2064,10 +2124,8 @@ static int __insert_free_nid(struct f2fs_sb_info *sbi,
 	if (err)
 		return err;
 
-	f2fs_bug_on(sbi, state != i->state);
-	nm_i->nid_cnt[state]++;
-	if (state == FREE_NID)
-		list_add_tail(&i->list, &nm_i->free_nid_list);
+	nm_i->nid_cnt[FREE_NID]++;
+	list_add_tail(&i->list, &nm_i->free_nid_list);
 	return 0;
 }
 
@@ -2189,7 +2247,7 @@ static bool add_free_nid(struct f2fs_sb_info *sbi,
 		}
 	}
 	ret = true;
-	err = __insert_free_nid(sbi, i, FREE_NID);
+	err = __insert_free_nid(sbi, i);
 err_out:
 	if (update) {
 		update_free_nid_bitmap(sbi, nid, ret, build);
@@ -2406,7 +2464,7 @@ bool f2fs_alloc_nid(struct f2fs_sb_info *sbi, nid_t *nid)
 	struct free_nid *i = NULL;
 retry:
 	if (time_to_inject(sbi, FAULT_ALLOC_NID)) {
-		f2fs_show_injection_info(FAULT_ALLOC_NID);
+		f2fs_show_injection_info(sbi, FAULT_ALLOC_NID);
 		return false;
 	}
 
@@ -2493,7 +2551,6 @@ void f2fs_alloc_nid_failed(struct f2fs_sb_info *sbi, nid_t nid)
 int f2fs_try_to_free_nids(struct f2fs_sb_info *sbi, int nr_shrink)
 {
 	struct f2fs_nm_info *nm_i = NM_I(sbi);
-	struct free_nid *i, *next;
 	int nr = nr_shrink;
 
 	if (nm_i->nid_cnt[FREE_NID] <= MAX_FREE_NIDS)
@@ -2502,17 +2559,23 @@ int f2fs_try_to_free_nids(struct f2fs_sb_info *sbi, int nr_shrink)
 	if (!mutex_trylock(&nm_i->build_lock))
 		return 0;
 
-	spin_lock(&nm_i->nid_list_lock);
-	list_for_each_entry_safe(i, next, &nm_i->free_nid_list, list) {
-		if (nr_shrink <= 0 ||
-				nm_i->nid_cnt[FREE_NID] <= MAX_FREE_NIDS)
-			break;
+	while (nr_shrink && nm_i->nid_cnt[FREE_NID] > MAX_FREE_NIDS) {
+		struct free_nid *i, *next;
+		unsigned int batch = SHRINK_NID_BATCH_SIZE;
 
-		__remove_free_nid(sbi, i, FREE_NID);
-		kmem_cache_free(free_nid_slab, i);
-		nr_shrink--;
+		spin_lock(&nm_i->nid_list_lock);
+		list_for_each_entry_safe(i, next, &nm_i->free_nid_list, list) {
+			if (!nr_shrink || !batch ||
+				nm_i->nid_cnt[FREE_NID] <= MAX_FREE_NIDS)
+				break;
+			__remove_free_nid(sbi, i, FREE_NID);
+			kmem_cache_free(free_nid_slab, i);
+			nr_shrink--;
+			batch--;
+		}
+		spin_unlock(&nm_i->nid_list_lock);
 	}
-	spin_unlock(&nm_i->nid_list_lock);
+
 	mutex_unlock(&nm_i->build_lock);
 
 	return nr - nr_shrink;
@@ -2531,9 +2594,15 @@ int f2fs_recover_inline_xattr(struct inode *inode, struct page *page)
 
 	ri = F2FS_INODE(page);
 	if (ri->i_inline & F2FS_INLINE_XATTR) {
-		set_inode_flag(inode, FI_INLINE_XATTR);
+		if (!f2fs_has_inline_xattr(inode)) {
+			set_inode_flag(inode, FI_INLINE_XATTR);
+			stat_inc_inline_xattr(inode);
+		}
 	} else {
-		clear_inode_flag(inode, FI_INLINE_XATTR);
+		if (f2fs_has_inline_xattr(inode)) {
+			stat_dec_inline_xattr(inode);
+			clear_inode_flag(inode, FI_INLINE_XATTR);
+		}
 		goto update_inode;
 	}
 
@@ -2612,7 +2681,7 @@ int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct page *page)
 retry:
 	ipage = f2fs_grab_cache_page(NODE_MAPPING(sbi), ino, false);
 	if (!ipage) {
-		congestion_wait(BLK_RW_ASYNC, HZ/50);
+		congestion_wait(BLK_RW_ASYNC, DEFAULT_IO_TIMEOUT);
 		goto retry;
 	}
 
@@ -3049,9 +3118,6 @@ static int init_node_manager(struct f2fs_sb_info *sbi)
 	nm_i->next_scan_nid = le32_to_cpu(sbi->ckpt->next_free_nid);
 	nm_i->bitmap_size = __bitmap_size(sbi, NAT_BITMAP);
 	version_bitmap = __bitmap_ptr(sbi, NAT_BITMAP);
-	if (!version_bitmap)
-		return -EFAULT;
-
 	nm_i->nat_bitmap = kmemdup(version_bitmap, nm_i->bitmap_size,
 					GFP_KERNEL);
 	if (!nm_i->nat_bitmap)
@@ -3201,27 +3267,27 @@ void f2fs_destroy_node_manager(struct f2fs_sb_info *sbi)
 	kvfree(nm_i->nat_bitmap_mir);
 #endif
 	sbi->nm_info = NULL;
-	kvfree(nm_i);
+	kfree(nm_i);
 }
 
 int __init f2fs_create_node_manager_caches(void)
 {
-	nat_entry_slab = f2fs_kmem_cache_create("nat_entry",
+	nat_entry_slab = f2fs_kmem_cache_create("f2fs_nat_entry",
 			sizeof(struct nat_entry));
 	if (!nat_entry_slab)
 		goto fail;
 
-	free_nid_slab = f2fs_kmem_cache_create("free_nid",
+	free_nid_slab = f2fs_kmem_cache_create("f2fs_free_nid",
 			sizeof(struct free_nid));
 	if (!free_nid_slab)
 		goto destroy_nat_entry;
 
-	nat_entry_set_slab = f2fs_kmem_cache_create("nat_entry_set",
+	nat_entry_set_slab = f2fs_kmem_cache_create("f2fs_nat_entry_set",
 			sizeof(struct nat_entry_set));
 	if (!nat_entry_set_slab)
 		goto destroy_free_nid;
 
-	fsync_node_entry_slab = f2fs_kmem_cache_create("fsync_node_entry",
+	fsync_node_entry_slab = f2fs_kmem_cache_create("f2fs_fsync_node_entry",
 			sizeof(struct fsync_node_entry));
 	if (!fsync_node_entry_slab)
 		goto destroy_nat_entry_set;
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index 4a2e7ea..f84541b 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * fs/f2fs/node.h
  *
@@ -15,6 +15,9 @@
 #define FREE_NID_PAGES	8
 #define MAX_FREE_NIDS	(NAT_ENTRY_PER_BLOCK * FREE_NID_PAGES)
 
+/* size of free nid batch when shrinking */
+#define SHRINK_NID_BATCH_SIZE	8
+
 #define DEF_RA_NID_PAGES	0	/* # of nid pages to be readaheaded */
 
 /* maximum readahead size for node during getting data blocks */
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 5f230e9..da75d5d 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -5,6 +5,7 @@
  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  *             http://www.samsung.com/
  */
+#include <asm/unaligned.h>
 #include <linux/fs.h>
 #include <linux/f2fs_fs.h>
 #include "f2fs.h"
@@ -107,13 +108,60 @@ static void del_fsync_inode(struct fsync_inode_entry *entry, int drop)
 	kmem_cache_free(fsync_entry_slab, entry);
 }
 
+static int init_recovered_filename(const struct inode *dir,
+				   struct f2fs_inode *raw_inode,
+				   struct f2fs_filename *fname,
+				   struct qstr *usr_fname)
+{
+	int err;
+
+	memset(fname, 0, sizeof(*fname));
+	fname->disk_name.len = le32_to_cpu(raw_inode->i_namelen);
+	fname->disk_name.name = raw_inode->i_name;
+
+	if (WARN_ON(fname->disk_name.len > F2FS_NAME_LEN))
+		return -ENAMETOOLONG;
+
+	if (!IS_ENCRYPTED(dir)) {
+		usr_fname->name = fname->disk_name.name;
+		usr_fname->len = fname->disk_name.len;
+		fname->usr_fname = usr_fname;
+	}
+
+	/* Compute the hash of the filename */
+	if (IS_ENCRYPTED(dir) && IS_CASEFOLDED(dir)) {
+		/*
+		 * In this case the hash isn't computable without the key, so it
+		 * was saved on-disk.
+		 */
+		if (fname->disk_name.len + sizeof(f2fs_hash_t) > F2FS_NAME_LEN)
+			return -EINVAL;
+		fname->hash = get_unaligned((f2fs_hash_t *)
+				&raw_inode->i_name[fname->disk_name.len]);
+	} else if (IS_CASEFOLDED(dir)) {
+		err = f2fs_init_casefolded_name(dir, fname);
+		if (err)
+			return err;
+		f2fs_hash_filename(dir, fname);
+#ifdef CONFIG_UNICODE
+		/* Case-sensitive match is fine for recovery */
+		kfree(fname->cf_name.name);
+		fname->cf_name.name = NULL;
+#endif
+	} else {
+		f2fs_hash_filename(dir, fname);
+	}
+	return 0;
+}
+
 static int recover_dentry(struct inode *inode, struct page *ipage,
 						struct list_head *dir_list)
 {
 	struct f2fs_inode *raw_inode = F2FS_INODE(ipage);
 	nid_t pino = le32_to_cpu(raw_inode->i_pino);
 	struct f2fs_dir_entry *de;
-	struct fscrypt_name fname;
+	struct f2fs_filename fname;
+	struct qstr usr_fname;
 	struct page *page;
 	struct inode *dir, *einode;
 	struct fsync_inode_entry *entry;
@@ -132,16 +180,9 @@ static int recover_dentry(struct inode *inode, struct page *ipage,
 	}
 
 	dir = entry->inode;
-
-	memset(&fname, 0, sizeof(struct fscrypt_name));
-	fname.disk_name.len = le32_to_cpu(raw_inode->i_namelen);
-	fname.disk_name.name = raw_inode->i_name;
-
-	if (unlikely(fname.disk_name.len > F2FS_NAME_LEN)) {
-		WARN_ON(1);
-		err = -ENAMETOOLONG;
+	err = init_recovered_filename(dir, raw_inode, &fname, &usr_fname);
+	if (err)
 		goto out;
-	}
 retry:
 	de = __f2fs_find_entry(dir, &fname, &page);
 	if (de && inode->i_ino == le32_to_cpu(de->ino))
@@ -496,8 +537,7 @@ static int check_index_in_prev_nodes(struct f2fs_sb_info *sbi,
 	return 0;
 
 truncate_out:
-	if (datablock_addr(tdn.inode, tdn.node_page,
-					tdn.ofs_in_node) == blkaddr)
+	if (f2fs_data_blkaddr(&tdn) == blkaddr)
 		f2fs_truncate_data_blocks_range(&tdn, 1);
 	if (dn->inode->i_ino == nid && !dn->inode_page_locked)
 		unlock_page(dn->inode_page);
@@ -541,7 +581,7 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 	err = f2fs_get_dnode_of_data(&dn, start, ALLOC_NODE);
 	if (err) {
 		if (err == -ENOMEM) {
-			congestion_wait(BLK_RW_ASYNC, HZ/50);
+			congestion_wait(BLK_RW_ASYNC, DEFAULT_IO_TIMEOUT);
 			goto retry_dn;
 		}
 		goto out;
@@ -566,8 +606,8 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 	for (; start < end; start++, dn.ofs_in_node++) {
 		block_t src, dest;
 
-		src = datablock_addr(dn.inode, dn.node_page, dn.ofs_in_node);
-		dest = datablock_addr(dn.inode, page, dn.ofs_in_node);
+		src = f2fs_data_blkaddr(&dn);
+		dest = data_blkaddr(dn.inode, page, dn.ofs_in_node);
 
 		if (__is_valid_data_blkaddr(src) &&
 			!f2fs_is_valid_blkaddr(sbi, src, META_POR)) {
@@ -624,7 +664,8 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 			err = check_index_in_prev_nodes(sbi, dest, &dn);
 			if (err) {
 				if (err == -ENOMEM) {
-					congestion_wait(BLK_RW_ASYNC, HZ/50);
+					congestion_wait(BLK_RW_ASYNC,
+							DEFAULT_IO_TIMEOUT);
 					goto retry_prev;
 				}
 				goto err;
@@ -729,6 +770,7 @@ int f2fs_recover_fsync_data(struct f2fs_sb_info *sbi, bool check_only)
 	int ret = 0;
 	unsigned long s_flags = sbi->sb->s_flags;
 	bool need_writecp = false;
+	bool fix_curseg_write_pointer = false;
 #ifdef CONFIG_QUOTA
 	int quota_enabled;
 #endif
@@ -757,7 +799,7 @@ int f2fs_recover_fsync_data(struct f2fs_sb_info *sbi, bool check_only)
 	INIT_LIST_HEAD(&dir_list);
 
 	/* prevent checkpoint */
-	mutex_lock(&sbi->cp_mutex);
+	down_write(&sbi->cp_global_sem);
 
 	/* step #1: find fsynced inode numbers */
 	err = find_fsync_dnodes(sbi, &inode_list, check_only);
@@ -780,6 +822,8 @@ int f2fs_recover_fsync_data(struct f2fs_sb_info *sbi, bool check_only)
 		sbi->sb->s_flags = s_flags;
 	}
 skip:
+	fix_curseg_write_pointer = !check_only || list_empty(&inode_list);
+
 	destroy_fsync_dnodes(&inode_list, err);
 	destroy_fsync_dnodes(&tmp_inode_list, err);
 
@@ -790,10 +834,23 @@ int f2fs_recover_fsync_data(struct f2fs_sb_info *sbi, bool check_only)
 	if (err) {
 		truncate_inode_pages_final(NODE_MAPPING(sbi));
 		truncate_inode_pages_final(META_MAPPING(sbi));
-	} else {
-		clear_sbi_flag(sbi, SBI_POR_DOING);
 	}
-	mutex_unlock(&sbi->cp_mutex);
+
+	/*
+	 * If fsync data succeeds or there is no fsync data to recover,
+	 * and the f2fs is not read only, check and fix zoned block devices'
+	 * write pointer consistency.
+	 */
+	if (!err && fix_curseg_write_pointer && !f2fs_readonly(sbi->sb) &&
+			f2fs_sb_has_blkzoned(sbi)) {
+		err = f2fs_fix_curseg_write_pointer(sbi);
+		ret = err;
+	}
+
+	if (!err)
+		clear_sbi_flag(sbi, SBI_POR_DOING);
+
+	up_write(&sbi->cp_global_sem);
 
 	/* let's drop all the directory inodes for clean checkpoint */
 	destroy_fsync_dnodes(&dir_list, err);
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 5ba677f..deca74c 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -172,9 +172,9 @@ bool f2fs_need_SSR(struct f2fs_sb_info *sbi)
 	int dent_secs = get_blocktype_secs(sbi, F2FS_DIRTY_DENTS);
 	int imeta_secs = get_blocktype_secs(sbi, F2FS_DIRTY_IMETA);
 
-	if (test_opt(sbi, LFS))
+	if (f2fs_lfs_mode(sbi))
 		return false;
-	if (sbi->gc_mode == GC_URGENT)
+	if (sbi->gc_mode == GC_URGENT_HIGH)
 		return true;
 	if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
 		return true;
@@ -189,7 +189,7 @@ void f2fs_register_inmem_page(struct inode *inode, struct page *page)
 
 	f2fs_trace_pid(page);
 
-	f2fs_set_page_private(page, (unsigned long)ATOMIC_WRITTEN_PAGE);
+	f2fs_set_page_private(page, ATOMIC_WRITTEN_PAGE);
 
 	new = f2fs_kmem_cache_alloc(inmem_entry_slab, GFP_NOFS);
 
@@ -245,7 +245,8 @@ static int __revoke_inmem_pages(struct inode *inode,
 								LOOKUP_NODE);
 			if (err) {
 				if (err == -ENOMEM) {
-					congestion_wait(BLK_RW_ASYNC, HZ/50);
+					congestion_wait(BLK_RW_ASYNC,
+							DEFAULT_IO_TIMEOUT);
 					cond_resched();
 					goto retry;
 				}
@@ -312,7 +313,7 @@ void f2fs_drop_inmem_pages_all(struct f2fs_sb_info *sbi, bool gc_failure)
 skip:
 		iput(inode);
 	}
-	congestion_wait(BLK_RW_ASYNC, HZ/50);
+	congestion_wait(BLK_RW_ASYNC, DEFAULT_IO_TIMEOUT);
 	cond_resched();
 	if (gc_failure) {
 		if (++looped >= count)
@@ -334,7 +335,6 @@ void f2fs_drop_inmem_pages(struct inode *inode)
 	}
 
 	fi->i_gc_failures[GC_FAILURE_ATOMIC] = 0;
-	stat_dec_atomic_write(inode);
 
 	spin_lock(&sbi->inode_lock[ATOMIC_FILE]);
 	if (!list_empty(&fi->inmem_ilist))
@@ -416,7 +416,8 @@ static int __f2fs_commit_inmem_pages(struct inode *inode)
 			err = f2fs_do_write_data_page(&fio);
 			if (err) {
 				if (err == -ENOMEM) {
-					congestion_wait(BLK_RW_ASYNC, HZ/50);
+					congestion_wait(BLK_RW_ASYNC,
+							DEFAULT_IO_TIMEOUT);
 					cond_resched();
 					goto retry;
 				}
@@ -489,13 +490,13 @@ int f2fs_commit_inmem_pages(struct inode *inode)
 void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need)
 {
 	if (time_to_inject(sbi, FAULT_CHECKPOINT)) {
-		f2fs_show_injection_info(FAULT_CHECKPOINT);
+		f2fs_show_injection_info(sbi, FAULT_CHECKPOINT);
 		f2fs_stop_checkpoint(sbi, false);
 	}
 
 	/* balance_fs_bg is able to be pending */
 	if (need && excess_cached_nats(sbi))
-		f2fs_balance_fs_bg(sbi);
+		f2fs_balance_fs_bg(sbi, false);
 
 	if (!f2fs_is_checkpoint_ready(sbi))
 		return;
@@ -505,12 +506,12 @@ void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need)
 	 * dir/node pages without enough free segments.
 	 */
 	if (has_not_enough_free_secs(sbi, 0, 0)) {
-		mutex_lock(&sbi->gc_mutex);
+		down_write(&sbi->gc_lock);
 		f2fs_gc(sbi, false, false, NULL_SEGNO);
 	}
 }
 
-void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi)
+void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi, bool from_bg)
 {
 	if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
 		return;
@@ -528,31 +529,38 @@ void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi)
 	else
 		f2fs_build_free_nids(sbi, false, false);
 
-	if (!is_idle(sbi, REQ_TIME) &&
-		(!excess_dirty_nats(sbi) && !excess_dirty_nodes(sbi)))
+	if (excess_dirty_nats(sbi) || excess_dirty_nodes(sbi) ||
+		excess_prefree_segs(sbi))
+		goto do_sync;
+
+	/* there is background inflight IO or foreground operation recently */
+	if (is_inflight_io(sbi, REQ_TIME) ||
+		(!f2fs_time_over(sbi, REQ_TIME) && rwsem_is_locked(&sbi->cp_rwsem)))
 		return;
 
+	/* exceed periodical checkpoint timeout threshold */
+	if (f2fs_time_over(sbi, CP_TIME))
+		goto do_sync;
+
 	/* checkpoint is the only way to shrink partial cached entries */
-	if (!f2fs_available_free_memory(sbi, NAT_ENTRIES) ||
-			!f2fs_available_free_memory(sbi, INO_ENTRIES) ||
-			excess_prefree_segs(sbi) ||
-			excess_dirty_nats(sbi) ||
-			excess_dirty_nodes(sbi) ||
-			f2fs_time_over(sbi, CP_TIME)) {
-		if (test_opt(sbi, DATA_FLUSH)) {
-			struct blk_plug plug;
+	if (f2fs_available_free_memory(sbi, NAT_ENTRIES) ||
+		f2fs_available_free_memory(sbi, INO_ENTRIES))
+		return;
 
-			mutex_lock(&sbi->flush_lock);
+do_sync:
+	if (test_opt(sbi, DATA_FLUSH) && from_bg) {
+		struct blk_plug plug;
 
-			blk_start_plug(&plug);
-			f2fs_sync_dirty_inodes(sbi, FILE_INODE);
-			blk_finish_plug(&plug);
+		mutex_lock(&sbi->flush_lock);
 
-			mutex_unlock(&sbi->flush_lock);
-		}
-		f2fs_sync_fs(sbi->sb, true);
-		stat_inc_bg_cp_count(sbi->stat_info);
+		blk_start_plug(&plug);
+		f2fs_sync_dirty_inodes(sbi, FILE_INODE);
+		blk_finish_plug(&plug);
+
+		mutex_unlock(&sbi->flush_lock);
 	}
+	f2fs_sync_fs(sbi->sb, true);
+	stat_inc_bg_cp_count(sbi->stat_info);
 }
 
 static int __submit_flush_wait(struct f2fs_sb_info *sbi,
@@ -727,7 +735,7 @@ int f2fs_create_flush_cmd_control(struct f2fs_sb_info *sbi)
 				"f2fs_flush-%u:%u", MAJOR(dev), MINOR(dev));
 	if (IS_ERR(fcc->f2fs_issue_flush)) {
 		err = PTR_ERR(fcc->f2fs_issue_flush);
-		kvfree(fcc);
+		kfree(fcc);
 		SM_I(sbi)->fcc_info = NULL;
 		return err;
 	}
@@ -746,7 +754,7 @@ void f2fs_destroy_flush_cmd_control(struct f2fs_sb_info *sbi, bool free)
 		kthread_stop(flush_thread);
 	}
 	if (free) {
-		kvfree(fcc);
+		kfree(fcc);
 		SM_I(sbi)->fcc_info = NULL;
 	}
 }
@@ -758,6 +766,9 @@ int f2fs_flush_device_cache(struct f2fs_sb_info *sbi)
 	if (!f2fs_is_multi_device(sbi))
 		return 0;
 
+	if (test_opt(sbi, NOBARRIER))
+		return 0;
+
 	for (i = 1; i < sbi->s_ndevs; i++) {
 		if (!f2fs_test_bit(i, (char *)&sbi->dirty_device))
 			continue;
@@ -795,6 +806,18 @@ static void __locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno,
 		}
 		if (!test_and_set_bit(segno, dirty_i->dirty_segmap[t]))
 			dirty_i->nr_dirty[t]++;
+
+		if (__is_large_section(sbi)) {
+			unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
+			block_t valid_blocks =
+				get_valid_blocks(sbi, segno, true);
+
+			f2fs_bug_on(sbi, unlikely(!valid_blocks ||
+					valid_blocks == BLKS_PER_SEC(sbi)));
+
+			if (!IS_CURSEC(sbi, secno))
+				set_bit(secno, dirty_i->dirty_secmap);
+		}
 	}
 }
 
@@ -802,6 +825,7 @@ static void __remove_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno,
 		enum dirty_type dirty_type)
 {
 	struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
+	block_t valid_blocks;
 
 	if (test_and_clear_bit(segno, dirty_i->dirty_segmap[dirty_type]))
 		dirty_i->nr_dirty[dirty_type]--;
@@ -813,13 +837,26 @@ static void __remove_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno,
 		if (test_and_clear_bit(segno, dirty_i->dirty_segmap[t]))
 			dirty_i->nr_dirty[t]--;
 
-		if (get_valid_blocks(sbi, segno, true) == 0) {
+		valid_blocks = get_valid_blocks(sbi, segno, true);
+		if (valid_blocks == 0) {
 			clear_bit(GET_SEC_FROM_SEG(sbi, segno),
 						dirty_i->victim_secmap);
 #ifdef CONFIG_F2FS_CHECK_FS
 			clear_bit(segno, SIT_I(sbi)->invalid_segmap);
 #endif
 		}
+		if (__is_large_section(sbi)) {
+			unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
+
+			if (!valid_blocks ||
+					valid_blocks == BLKS_PER_SEC(sbi)) {
+				clear_bit(secno, dirty_i->dirty_secmap);
+				return;
+			}
+
+			if (!IS_CURSEC(sbi, secno))
+				set_bit(secno, dirty_i->dirty_secmap);
+		}
 	}
 }
 
@@ -832,20 +869,22 @@ static void locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno)
 {
 	struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
 	unsigned short valid_blocks, ckpt_valid_blocks;
+	unsigned int usable_blocks;
 
 	if (segno == NULL_SEGNO || IS_CURSEG(sbi, segno))
 		return;
 
+	usable_blocks = f2fs_usable_blks_in_seg(sbi, segno);
 	mutex_lock(&dirty_i->seglist_lock);
 
 	valid_blocks = get_valid_blocks(sbi, segno, false);
 	ckpt_valid_blocks = get_ckpt_valid_blocks(sbi, segno);
 
 	if (valid_blocks == 0 && (!is_sbi_flag_set(sbi, SBI_CP_DISABLED) ||
-				ckpt_valid_blocks == sbi->blocks_per_seg)) {
+		ckpt_valid_blocks == usable_blocks)) {
 		__locate_dirty_segment(sbi, segno, PRE);
 		__remove_dirty_segment(sbi, segno, DIRTY);
-	} else if (valid_blocks < sbi->blocks_per_seg) {
+	} else if (valid_blocks < usable_blocks) {
 		__locate_dirty_segment(sbi, segno, DIRTY);
 	} else {
 		/* Recovery routine with SSR needs this */
@@ -888,9 +927,11 @@ block_t f2fs_get_unusable_blocks(struct f2fs_sb_info *sbi)
 	for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) {
 		se = get_seg_entry(sbi, segno);
 		if (IS_NODESEG(se->type))
-			holes[NODE] += sbi->blocks_per_seg - se->valid_blocks;
+			holes[NODE] += f2fs_usable_blks_in_seg(sbi, segno) -
+							se->valid_blocks;
 		else
-			holes[DATA] += sbi->blocks_per_seg - se->valid_blocks;
+			holes[DATA] += f2fs_usable_blks_in_seg(sbi, segno) -
+							se->valid_blocks;
 	}
 	mutex_unlock(&dirty_i->seglist_lock);
 
@@ -1017,8 +1058,9 @@ static void __remove_discard_cmd(struct f2fs_sb_info *sbi,
 
 	if (dc->error)
 		printk_ratelimited(
-			"%sF2FS-fs: Issue discard(%u, %u, %u) failed, ret: %d",
-			KERN_INFO, dc->lstart, dc->start, dc->len, dc->error);
+			"%sF2FS-fs (%s): Issue discard(%u, %u, %u) failed, ret: %d",
+			KERN_INFO, sbi->sb->s_id,
+			dc->lstart, dc->start, dc->len, dc->error);
 	__detach_discard_cmd(dcc, dc);
 }
 
@@ -1027,9 +1069,9 @@ static void f2fs_submit_discard_endio(struct bio *bio)
 	struct discard_cmd *dc = (struct discard_cmd *)bio->bi_private;
 	unsigned long flags;
 
-	dc->error = blk_status_to_errno(bio->bi_status);
-
 	spin_lock_irqsave(&dc->lock, flags);
+	if (!dc->error)
+		dc->error = blk_status_to_errno(bio->bi_status);
 	dc->bio_ref--;
 	if (!dc->bio_ref && dc->state == D_SUBMIT) {
 		dc->state = D_DONE;
@@ -1078,7 +1120,7 @@ static void __init_discard_policy(struct f2fs_sb_info *sbi,
 
 	dpolicy->max_requests = DEF_MAX_DISCARD_REQUEST;
 	dpolicy->io_aware_gran = MAX_PLIST_NUM;
-	dpolicy->timeout = 0;
+	dpolicy->timeout = false;
 
 	if (discard_type == DPOLICY_BG) {
 		dpolicy->min_interval = DEF_MIN_DISCARD_ISSUE_TIME;
@@ -1099,10 +1141,10 @@ static void __init_discard_policy(struct f2fs_sb_info *sbi,
 	} else if (discard_type == DPOLICY_FSTRIM) {
 		dpolicy->io_aware = false;
 	} else if (discard_type == DPOLICY_UMOUNT) {
-		dpolicy->max_requests = UINT_MAX;
 		dpolicy->io_aware = false;
 		/* we need to issue all to keep CP_TRIMMED_FLAG */
 		dpolicy->granularity = 1;
+		dpolicy->timeout = true;
 	}
 }
 
@@ -1158,7 +1200,7 @@ static int __submit_discard_cmd(struct f2fs_sb_info *sbi,
 		dc->len += len;
 
 		if (time_to_inject(sbi, FAULT_DISCARD)) {
-			f2fs_show_injection_info(FAULT_DISCARD);
+			f2fs_show_injection_info(sbi, FAULT_DISCARD);
 			err = -EIO;
 			goto submit;
 		}
@@ -1212,12 +1254,14 @@ static int __submit_discard_cmd(struct f2fs_sb_info *sbi,
 		len = total_len;
 	}
 
-	if (!err && len)
+	if (!err && len) {
+		dcc->undiscard_blks -= len;
 		__update_discard_tree_range(sbi, bdev, lstart, start, len);
+	}
 	return err;
 }
 
-static struct discard_cmd *__insert_discard_tree(struct f2fs_sb_info *sbi,
+static void __insert_discard_tree(struct f2fs_sb_info *sbi,
 				struct block_device *bdev, block_t lstart,
 				block_t start, block_t len,
 				struct rb_node **insert_p,
@@ -1226,7 +1270,6 @@ static struct discard_cmd *__insert_discard_tree(struct f2fs_sb_info *sbi,
 	struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
 	struct rb_node **p;
 	struct rb_node *parent = NULL;
-	struct discard_cmd *dc = NULL;
 	bool leftmost = true;
 
 	if (insert_p && insert_parent) {
@@ -1238,12 +1281,8 @@ static struct discard_cmd *__insert_discard_tree(struct f2fs_sb_info *sbi,
 	p = f2fs_lookup_rb_tree_for_insert(sbi, &dcc->root, &parent,
 							lstart, &leftmost);
 do_insert:
-	dc = __attach_discard_cmd(sbi, bdev, lstart, start, len, parent,
+	__attach_discard_cmd(sbi, bdev, lstart, start, len, parent,
 								p, leftmost);
-	if (!dc)
-		return NULL;
-
-	return dc;
 }
 
 static void __relocate_discard_cmd(struct discard_cmd_control *dcc,
@@ -1460,6 +1499,8 @@ static unsigned int __issue_discard_cmd_orderly(struct f2fs_sb_info *sbi,
 
 	return issued;
 }
+static unsigned int __wait_all_discard_cmd(struct f2fs_sb_info *sbi,
+					struct discard_policy *dpolicy);
 
 static int __issue_discard_cmd(struct f2fs_sb_info *sbi,
 					struct discard_policy *dpolicy)
@@ -1468,15 +1509,17 @@ static int __issue_discard_cmd(struct f2fs_sb_info *sbi,
 	struct list_head *pend_list;
 	struct discard_cmd *dc, *tmp;
 	struct blk_plug plug;
-	int i, issued = 0;
+	int i, issued;
 	bool io_interrupted = false;
 
-	if (dpolicy->timeout != 0)
-		f2fs_update_time(sbi, dpolicy->timeout);
+	if (dpolicy->timeout)
+		f2fs_update_time(sbi, UMOUNT_DISCARD_TIMEOUT);
 
+retry:
+	issued = 0;
 	for (i = MAX_PLIST_NUM - 1; i >= 0; i--) {
-		if (dpolicy->timeout != 0 &&
-				f2fs_time_over(sbi, dpolicy->timeout))
+		if (dpolicy->timeout &&
+				f2fs_time_over(sbi, UMOUNT_DISCARD_TIMEOUT))
 			break;
 
 		if (i + 1 < dpolicy->granularity)
@@ -1492,13 +1535,13 @@ static int __issue_discard_cmd(struct f2fs_sb_info *sbi,
 			goto next;
 		if (unlikely(dcc->rbtree_check))
 			f2fs_bug_on(sbi, !f2fs_check_rb_tree_consistence(sbi,
-								&dcc->root));
+							&dcc->root, false));
 		blk_start_plug(&plug);
 		list_for_each_entry_safe(dc, tmp, pend_list, list) {
 			f2fs_bug_on(sbi, dc->state != D_PREP);
 
-			if (dpolicy->timeout != 0 &&
-				f2fs_time_over(sbi, dpolicy->timeout))
+			if (dpolicy->timeout &&
+				f2fs_time_over(sbi, UMOUNT_DISCARD_TIMEOUT))
 				break;
 
 			if (dpolicy->io_aware && i < dpolicy->io_aware_gran &&
@@ -1520,6 +1563,11 @@ static int __issue_discard_cmd(struct f2fs_sb_info *sbi,
 			break;
 	}
 
+	if (dpolicy->type == DPOLICY_UMOUNT && issued) {
+		__wait_all_discard_cmd(sbi, dpolicy);
+		goto retry;
+	}
+
 	if (!issued && io_interrupted)
 		issued = -1;
 
@@ -1677,7 +1725,6 @@ bool f2fs_issue_discard_timeout(struct f2fs_sb_info *sbi)
 
 	__init_discard_policy(sbi, &dpolicy, DPOLICY_UMOUNT,
 					dcc->discard_granularity);
-	dpolicy.timeout = UMOUNT_DISCARD_TIMEOUT;
 	__issue_discard_cmd(sbi, &dpolicy);
 	dropped = __drop_discard_cmd(sbi);
 
@@ -1726,7 +1773,7 @@ static int issue_discard_thread(void *data)
 			continue;
 		}
 
-		if (sbi->gc_mode == GC_URGENT)
+		if (sbi->gc_mode == GC_URGENT_HIGH)
 			__init_discard_policy(sbi, &dpolicy, DPOLICY_FORCE, 1);
 
 		sb_start_intwrite(sbi->sb);
@@ -1780,7 +1827,8 @@ static int __f2fs_issue_discard_zone(struct f2fs_sb_info *sbi,
 			return -EIO;
 		}
 		trace_f2fs_issue_reset_zone(bdev, blkstart);
-		return blkdev_reset_zones(bdev, sector, nr_sects, GFP_NOFS);
+		return blkdev_zone_mgmt(bdev, REQ_OP_ZONE_RESET,
+					sector, nr_sects, GFP_NOFS);
 	}
 
 	/* For conventional zones, use regular discard if supported */
@@ -1924,7 +1972,7 @@ static void set_prefree_as_free_segments(struct f2fs_sb_info *sbi)
 
 	mutex_lock(&dirty_i->seglist_lock);
 	for_each_set_bit(segno, dirty_i->dirty_segmap[PRE], MAIN_SEGS(sbi))
-		__set_test_and_free(sbi, segno);
+		__set_test_and_free(sbi, segno, false);
 	mutex_unlock(&dirty_i->seglist_lock);
 }
 
@@ -1939,7 +1987,7 @@ void f2fs_clear_prefree_segments(struct f2fs_sb_info *sbi,
 	unsigned int start = 0, end = -1;
 	unsigned int secno, start_segno;
 	bool force = (cpc->reason & CP_DISCARD);
-	bool need_align = test_opt(sbi, LFS) && __is_large_section(sbi);
+	bool need_align = f2fs_lfs_mode(sbi) && __is_large_section(sbi);
 
 	mutex_lock(&dirty_i->seglist_lock);
 
@@ -1971,7 +2019,7 @@ void f2fs_clear_prefree_segments(struct f2fs_sb_info *sbi,
 					(end - 1) <= cpc->trim_end)
 				continue;
 
-		if (!test_opt(sbi, LFS) || !__is_large_section(sbi)) {
+		if (!f2fs_lfs_mode(sbi) || !__is_large_section(sbi)) {
 			f2fs_issue_discard(sbi, START_BLOCK(sbi, start),
 				(end - start) << sbi->log_blocks_per_seg);
 			continue;
@@ -2067,7 +2115,7 @@ static int create_discard_cmd_control(struct f2fs_sb_info *sbi)
 				"f2fs_discard-%u:%u", MAJOR(dev), MINOR(dev));
 	if (IS_ERR(dcc->f2fs_issue_discard)) {
 		err = PTR_ERR(dcc->f2fs_issue_discard);
-		kvfree(dcc);
+		kfree(dcc);
 		SM_I(sbi)->dcc_info = NULL;
 		return err;
 	}
@@ -2091,7 +2139,7 @@ static void destroy_discard_cmd_control(struct f2fs_sb_info *sbi)
 	if (unlikely(atomic_read(&dcc->discard_cmd_cnt)))
 		f2fs_issue_discard_timeout(sbi);
 
-	kvfree(dcc);
+	kfree(dcc);
 	SM_I(sbi)->dcc_info = NULL;
 }
 
@@ -2116,6 +2164,39 @@ static void __set_sit_entry_type(struct f2fs_sb_info *sbi, int type,
 		__mark_sit_entry_dirty(sbi, segno);
 }
 
+static inline unsigned long long get_segment_mtime(struct f2fs_sb_info *sbi,
+								block_t blkaddr)
+{
+	unsigned int segno = GET_SEGNO(sbi, blkaddr);
+
+	if (segno == NULL_SEGNO)
+		return 0;
+	return get_seg_entry(sbi, segno)->mtime;
+}
+
+static void update_segment_mtime(struct f2fs_sb_info *sbi, block_t blkaddr,
+						unsigned long long old_mtime)
+{
+	struct seg_entry *se;
+	unsigned int segno = GET_SEGNO(sbi, blkaddr);
+	unsigned long long ctime = get_mtime(sbi, false);
+	unsigned long long mtime = old_mtime ? old_mtime : ctime;
+
+	if (segno == NULL_SEGNO)
+		return;
+
+	se = get_seg_entry(sbi, segno);
+
+	if (!se->mtime)
+		se->mtime = mtime;
+	else
+		se->mtime = div_u64(se->mtime * se->valid_blocks + mtime,
+						se->valid_blocks + 1);
+
+	if (ctime > SIT_I(sbi)->max_mtime)
+		SIT_I(sbi)->max_mtime = ctime;
+}
+
 static void update_sit_entry(struct f2fs_sb_info *sbi, block_t blkaddr, int del)
 {
 	struct seg_entry *se;
@@ -2132,13 +2213,10 @@ static void update_sit_entry(struct f2fs_sb_info *sbi, block_t blkaddr, int del)
 	new_vblocks = se->valid_blocks + del;
 	offset = GET_BLKOFF_FROM_SEG0(sbi, blkaddr);
 
-	f2fs_bug_on(sbi, (new_vblocks >> (sizeof(unsigned short) << 3) ||
-				(new_vblocks > sbi->blocks_per_seg)));
+	f2fs_bug_on(sbi, (new_vblocks < 0 ||
+			(new_vblocks > f2fs_usable_blks_in_seg(sbi, segno))));
 
 	se->valid_blocks = new_vblocks;
-	se->mtime = get_mtime(sbi, false);
-	if (se->mtime > SIT_I(sbi)->max_mtime)
-		SIT_I(sbi)->max_mtime = se->mtime;
 
 	/* Update valid block bitmap */
 	if (del > 0) {
@@ -2223,7 +2301,7 @@ void f2fs_invalidate_blocks(struct f2fs_sb_info *sbi, block_t addr)
 	struct sit_info *sit_i = SIT_I(sbi);
 
 	f2fs_bug_on(sbi, addr == NULL_ADDR);
-	if (addr == NEW_ADDR)
+	if (addr == NEW_ADDR || addr == COMPRESS_ADDR)
 		return;
 
 	invalidate_mapping_pages(META_MAPPING(sbi), addr, addr);
@@ -2231,6 +2309,7 @@ void f2fs_invalidate_blocks(struct f2fs_sb_info *sbi, block_t addr)
 	/* add it into sit main buffer */
 	down_write(&sit_i->sentry_lock);
 
+	update_segment_mtime(sbi, addr, 0);
 	update_sit_entry(sbi, addr, -1);
 
 	/* add it into dirty seglist */
@@ -2357,9 +2436,9 @@ static void write_current_sum_page(struct f2fs_sb_info *sbi,
 	f2fs_put_page(page, 1);
 }
 
-static int is_next_segment_free(struct f2fs_sb_info *sbi, int type)
+static int is_next_segment_free(struct f2fs_sb_info *sbi,
+				struct curseg_info *curseg, int type)
 {
-	struct curseg_info *curseg = CURSEG_I(sbi, type);
 	unsigned int segno = curseg->segno + 1;
 	struct free_segmap_info *free_i = FREE_I(sbi);
 
@@ -2463,7 +2542,9 @@ static void reset_curseg(struct f2fs_sb_info *sbi, int type, int modified)
 {
 	struct curseg_info *curseg = CURSEG_I(sbi, type);
 	struct summary_footer *sum_footer;
+	unsigned short seg_type = curseg->seg_type;
 
+	curseg->inited = true;
 	curseg->segno = curseg->next_segno;
 	curseg->zone = GET_ZONE_FROM_SEG(sbi, curseg->segno);
 	curseg->next_blkoff = 0;
@@ -2471,24 +2552,36 @@ static void reset_curseg(struct f2fs_sb_info *sbi, int type, int modified)
 
 	sum_footer = &(curseg->sum_blk->footer);
 	memset(sum_footer, 0, sizeof(struct summary_footer));
-	if (IS_DATASEG(type))
+
+	sanity_check_seg_type(sbi, seg_type);
+
+	if (IS_DATASEG(seg_type))
 		SET_SUM_TYPE(sum_footer, SUM_TYPE_DATA);
-	if (IS_NODESEG(type))
+	if (IS_NODESEG(seg_type))
 		SET_SUM_TYPE(sum_footer, SUM_TYPE_NODE);
-	__set_sit_entry_type(sbi, type, curseg->segno, modified);
+	__set_sit_entry_type(sbi, seg_type, curseg->segno, modified);
 }
 
 static unsigned int __get_next_segno(struct f2fs_sb_info *sbi, int type)
 {
+	struct curseg_info *curseg = CURSEG_I(sbi, type);
+	unsigned short seg_type = curseg->seg_type;
+
+	sanity_check_seg_type(sbi, seg_type);
+
 	/* if segs_per_sec is large than 1, we need to keep original policy. */
 	if (__is_large_section(sbi))
-		return CURSEG_I(sbi, type)->segno;
+		return curseg->segno;
+
+	/* inmem log may not locate on any segment after mount */
+	if (!curseg->inited)
+		return 0;
 
 	if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
 		return 0;
 
 	if (test_opt(sbi, NOHEAP) &&
-		(type == CURSEG_HOT_DATA || IS_NODESEG(type)))
+		(seg_type == CURSEG_HOT_DATA || IS_NODESEG(seg_type)))
 		return 0;
 
 	if (SIT_I(sbi)->last_victim[ALLOC_NEXT])
@@ -2498,7 +2591,7 @@ static unsigned int __get_next_segno(struct f2fs_sb_info *sbi, int type)
 	if (F2FS_OPTION(sbi).alloc_mode == ALLOC_MODE_REUSE)
 		return 0;
 
-	return CURSEG_I(sbi, type)->segno;
+	return curseg->segno;
 }
 
 /*
@@ -2508,12 +2601,14 @@ static unsigned int __get_next_segno(struct f2fs_sb_info *sbi, int type)
 static void new_curseg(struct f2fs_sb_info *sbi, int type, bool new_sec)
 {
 	struct curseg_info *curseg = CURSEG_I(sbi, type);
+	unsigned short seg_type = curseg->seg_type;
 	unsigned int segno = curseg->segno;
 	int dir = ALLOC_LEFT;
 
-	write_sum_page(sbi, curseg->sum_blk,
+	if (curseg->inited)
+		write_sum_page(sbi, curseg->sum_blk,
 				GET_SUM_BLOCK(sbi, segno));
-	if (type == CURSEG_WARM_DATA || type == CURSEG_COLD_DATA)
+	if (seg_type == CURSEG_WARM_DATA || seg_type == CURSEG_COLD_DATA)
 		dir = ALLOC_RIGHT;
 
 	if (test_opt(sbi, NOHEAP))
@@ -2562,7 +2657,7 @@ static void __refresh_next_blkoff(struct f2fs_sb_info *sbi,
  * This function always allocates a used segment(from dirty seglist) by SSR
  * manner, so it should recover the existing segment information of valid blocks
  */
-static void change_curseg(struct f2fs_sb_info *sbi, int type)
+static void change_curseg(struct f2fs_sb_info *sbi, int type, bool flush)
 {
 	struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
 	struct curseg_info *curseg = CURSEG_I(sbi, type);
@@ -2570,8 +2665,10 @@ static void change_curseg(struct f2fs_sb_info *sbi, int type)
 	struct f2fs_summary_block *sum_node;
 	struct page *sum_page;
 
-	write_sum_page(sbi, curseg->sum_blk,
-				GET_SUM_BLOCK(sbi, curseg->segno));
+	if (flush)
+		write_sum_page(sbi, curseg->sum_blk,
+					GET_SUM_BLOCK(sbi, curseg->segno));
+
 	__set_test_and_inuse(sbi, new_segno);
 
 	mutex_lock(&dirty_i->seglist_lock);
@@ -2594,23 +2691,129 @@ static void change_curseg(struct f2fs_sb_info *sbi, int type)
 	f2fs_put_page(sum_page, 1);
 }
 
-static int get_ssr_segment(struct f2fs_sb_info *sbi, int type)
+static int get_ssr_segment(struct f2fs_sb_info *sbi, int type,
+				int alloc_mode, unsigned long long age);
+
+static void get_atssr_segment(struct f2fs_sb_info *sbi, int type,
+					int target_type, int alloc_mode,
+					unsigned long long age)
+{
+	struct curseg_info *curseg = CURSEG_I(sbi, type);
+
+	curseg->seg_type = target_type;
+
+	if (get_ssr_segment(sbi, type, alloc_mode, age)) {
+		struct seg_entry *se = get_seg_entry(sbi, curseg->next_segno);
+
+		curseg->seg_type = se->type;
+		change_curseg(sbi, type, true);
+	} else {
+		/* allocate cold segment by default */
+		curseg->seg_type = CURSEG_COLD_DATA;
+		new_curseg(sbi, type, true);
+	}
+	stat_inc_seg_type(sbi, curseg);
+}
+
+static void __f2fs_init_atgc_curseg(struct f2fs_sb_info *sbi)
+{
+	struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_ALL_DATA_ATGC);
+
+	if (!sbi->am.atgc_enabled)
+		return;
+
+	down_read(&SM_I(sbi)->curseg_lock);
+
+	mutex_lock(&curseg->curseg_mutex);
+	down_write(&SIT_I(sbi)->sentry_lock);
+
+	get_atssr_segment(sbi, CURSEG_ALL_DATA_ATGC, CURSEG_COLD_DATA, SSR, 0);
+
+	up_write(&SIT_I(sbi)->sentry_lock);
+	mutex_unlock(&curseg->curseg_mutex);
+
+	up_read(&SM_I(sbi)->curseg_lock);
+
+}
+void f2fs_init_inmem_curseg(struct f2fs_sb_info *sbi)
+{
+	__f2fs_init_atgc_curseg(sbi);
+}
+
+static void __f2fs_save_inmem_curseg(struct f2fs_sb_info *sbi, int type)
+{
+	struct curseg_info *curseg = CURSEG_I(sbi, type);
+
+	mutex_lock(&curseg->curseg_mutex);
+	if (!curseg->inited)
+		goto out;
+
+	if (get_valid_blocks(sbi, curseg->segno, false)) {
+		write_sum_page(sbi, curseg->sum_blk,
+				GET_SUM_BLOCK(sbi, curseg->segno));
+	} else {
+		mutex_lock(&DIRTY_I(sbi)->seglist_lock);
+		__set_test_and_free(sbi, curseg->segno, true);
+		mutex_unlock(&DIRTY_I(sbi)->seglist_lock);
+	}
+out:
+	mutex_unlock(&curseg->curseg_mutex);
+}
+
+void f2fs_save_inmem_curseg(struct f2fs_sb_info *sbi)
+{
+	__f2fs_save_inmem_curseg(sbi, CURSEG_COLD_DATA_PINNED);
+
+	if (sbi->am.atgc_enabled)
+		__f2fs_save_inmem_curseg(sbi, CURSEG_ALL_DATA_ATGC);
+}
+
+static void __f2fs_restore_inmem_curseg(struct f2fs_sb_info *sbi, int type)
+{
+	struct curseg_info *curseg = CURSEG_I(sbi, type);
+
+	mutex_lock(&curseg->curseg_mutex);
+	if (!curseg->inited)
+		goto out;
+	if (get_valid_blocks(sbi, curseg->segno, false))
+		goto out;
+
+	mutex_lock(&DIRTY_I(sbi)->seglist_lock);
+	__set_test_and_inuse(sbi, curseg->segno);
+	mutex_unlock(&DIRTY_I(sbi)->seglist_lock);
+out:
+	mutex_unlock(&curseg->curseg_mutex);
+}
+
+void f2fs_restore_inmem_curseg(struct f2fs_sb_info *sbi)
+{
+	__f2fs_restore_inmem_curseg(sbi, CURSEG_COLD_DATA_PINNED);
+
+	if (sbi->am.atgc_enabled)
+		__f2fs_restore_inmem_curseg(sbi, CURSEG_ALL_DATA_ATGC);
+}
+
+static int get_ssr_segment(struct f2fs_sb_info *sbi, int type,
+				int alloc_mode, unsigned long long age)
 {
 	struct curseg_info *curseg = CURSEG_I(sbi, type);
 	const struct victim_selection *v_ops = DIRTY_I(sbi)->v_ops;
 	unsigned segno = NULL_SEGNO;
+	unsigned short seg_type = curseg->seg_type;
 	int i, cnt;
 	bool reversed = false;
 
+	sanity_check_seg_type(sbi, seg_type);
+
 	/* f2fs_need_SSR() already forces to do this */
-	if (v_ops->get_victim(sbi, &segno, BG_GC, type, SSR)) {
+	if (!v_ops->get_victim(sbi, &segno, BG_GC, seg_type, alloc_mode, age)) {
 		curseg->next_segno = segno;
 		return 1;
 	}
 
 	/* For node segments, let's do SSR more intensively */
-	if (IS_NODESEG(type)) {
-		if (type >= CURSEG_WARM_NODE) {
+	if (IS_NODESEG(seg_type)) {
+		if (seg_type >= CURSEG_WARM_NODE) {
 			reversed = true;
 			i = CURSEG_COLD_NODE;
 		} else {
@@ -2618,7 +2821,7 @@ static int get_ssr_segment(struct f2fs_sb_info *sbi, int type)
 		}
 		cnt = NR_CURSEG_NODE_TYPE;
 	} else {
-		if (type >= CURSEG_WARM_DATA) {
+		if (seg_type >= CURSEG_WARM_DATA) {
 			reversed = true;
 			i = CURSEG_COLD_DATA;
 		} else {
@@ -2628,9 +2831,9 @@ static int get_ssr_segment(struct f2fs_sb_info *sbi, int type)
 	}
 
 	for (; cnt-- > 0; reversed ? i-- : i++) {
-		if (i == type)
+		if (i == seg_type)
 			continue;
-		if (v_ops->get_victim(sbi, &segno, BG_GC, i, SSR)) {
+		if (!v_ops->get_victim(sbi, &segno, BG_GC, i, alloc_mode, age)) {
 			curseg->next_segno = segno;
 			return 1;
 		}
@@ -2659,20 +2862,22 @@ static void allocate_segment_by_default(struct f2fs_sb_info *sbi,
 	if (force)
 		new_curseg(sbi, type, true);
 	else if (!is_set_ckpt_flags(sbi, CP_CRC_RECOVERY_FLAG) &&
-					type == CURSEG_WARM_NODE)
+					curseg->seg_type == CURSEG_WARM_NODE)
 		new_curseg(sbi, type, false);
-	else if (curseg->alloc_type == LFS && is_next_segment_free(sbi, type) &&
+	else if (curseg->alloc_type == LFS &&
+			is_next_segment_free(sbi, curseg, type) &&
 			likely(!is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
 		new_curseg(sbi, type, false);
-	else if (f2fs_need_SSR(sbi) && get_ssr_segment(sbi, type))
-		change_curseg(sbi, type);
+	else if (f2fs_need_SSR(sbi) &&
+			get_ssr_segment(sbi, type, SSR, 0))
+		change_curseg(sbi, type, true);
 	else
 		new_curseg(sbi, type, false);
 
 	stat_inc_seg_type(sbi, curseg);
 }
 
-void allocate_segment_for_resize(struct f2fs_sb_info *sbi, int type,
+void f2fs_allocate_segment_for_resize(struct f2fs_sb_info *sbi, int type,
 					unsigned int start, unsigned int end)
 {
 	struct curseg_info *curseg = CURSEG_I(sbi, type);
@@ -2686,8 +2891,8 @@ void allocate_segment_for_resize(struct f2fs_sb_info *sbi, int type,
 	if (segno < start || segno > end)
 		goto unlock;
 
-	if (f2fs_need_SSR(sbi) && get_ssr_segment(sbi, type))
-		change_curseg(sbi, type);
+	if (f2fs_need_SSR(sbi) && get_ssr_segment(sbi, type, SSR, 0))
+		change_curseg(sbi, type, true);
 	else
 		new_curseg(sbi, type, true);
 
@@ -2705,21 +2910,39 @@ void allocate_segment_for_resize(struct f2fs_sb_info *sbi, int type,
 	up_read(&SM_I(sbi)->curseg_lock);
 }
 
+static void __allocate_new_segment(struct f2fs_sb_info *sbi, int type)
+{
+	struct curseg_info *curseg = CURSEG_I(sbi, type);
+	unsigned int old_segno;
+
+	if (!curseg->inited)
+		goto alloc;
+
+	if (!curseg->next_blkoff &&
+		!get_valid_blocks(sbi, curseg->segno, false) &&
+		!get_ckpt_valid_blocks(sbi, curseg->segno))
+		return;
+
+alloc:
+	old_segno = curseg->segno;
+	SIT_I(sbi)->s_ops->allocate_segment(sbi, type, true);
+	locate_dirty_segment(sbi, old_segno);
+}
+
+void f2fs_allocate_new_segment(struct f2fs_sb_info *sbi, int type)
+{
+	down_write(&SIT_I(sbi)->sentry_lock);
+	__allocate_new_segment(sbi, type);
+	up_write(&SIT_I(sbi)->sentry_lock);
+}
+
 void f2fs_allocate_new_segments(struct f2fs_sb_info *sbi)
 {
-	struct curseg_info *curseg;
-	unsigned int old_segno;
 	int i;
 
 	down_write(&SIT_I(sbi)->sentry_lock);
-
-	for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++) {
-		curseg = CURSEG_I(sbi, i);
-		old_segno = curseg->segno;
-		SIT_I(sbi)->s_ops->allocate_segment(sbi, i, true);
-		locate_dirty_segment(sbi, old_segno);
-	}
-
+	for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++)
+		__allocate_new_segment(sbi, i);
 	up_write(&SIT_I(sbi)->sentry_lock);
 }
 
@@ -2764,7 +2987,7 @@ static unsigned int __issue_discard_cmd_range(struct f2fs_sb_info *sbi,
 	mutex_lock(&dcc->cmd_lock);
 	if (unlikely(dcc->rbtree_check))
 		f2fs_bug_on(sbi, !f2fs_check_rb_tree_consistence(sbi,
-								&dcc->root));
+							&dcc->root, false));
 
 	dc = (struct discard_cmd *)f2fs_lookup_rb_tree_ret(&dcc->root,
 					NULL, start,
@@ -2799,7 +3022,7 @@ static unsigned int __issue_discard_cmd_range(struct f2fs_sb_info *sbi,
 			blk_finish_plug(&plug);
 			mutex_unlock(&dcc->cmd_lock);
 			trimmed += __wait_all_discard_cmd(sbi, NULL);
-			congestion_wait(BLK_RW_ASYNC, HZ/50);
+			congestion_wait(BLK_RW_ASYNC, DEFAULT_IO_TIMEOUT);
 			goto next;
 		}
 skip:
@@ -2828,7 +3051,7 @@ int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range)
 	struct discard_policy dpolicy;
 	unsigned long long trimmed = 0;
 	int err = 0;
-	bool need_align = test_opt(sbi, LFS) && __is_large_section(sbi);
+	bool need_align = f2fs_lfs_mode(sbi) && __is_large_section(sbi);
 
 	if (start >= MAX_BLKADDR(sbi) || range->len < sbi->blocksize)
 		return -EINVAL;
@@ -2858,9 +3081,9 @@ int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range)
 	if (sbi->discard_blks == 0)
 		goto out;
 
-	mutex_lock(&sbi->gc_mutex);
+	down_write(&sbi->gc_lock);
 	err = f2fs_write_checkpoint(sbi, &cpc);
-	mutex_unlock(&sbi->gc_mutex);
+	up_write(&sbi->gc_lock);
 	if (err)
 		goto out;
 
@@ -2888,12 +3111,11 @@ int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range)
 	return err;
 }
 
-static bool __has_curseg_space(struct f2fs_sb_info *sbi, int type)
+static bool __has_curseg_space(struct f2fs_sb_info *sbi,
+					struct curseg_info *curseg)
 {
-	struct curseg_info *curseg = CURSEG_I(sbi, type);
-	if (curseg->next_blkoff < sbi->blocks_per_seg)
-		return true;
-	return false;
+	return curseg->next_blkoff < f2fs_usable_blks_in_seg(sbi,
+							curseg->segno);
 }
 
 int f2fs_rw_hint_to_seg_type(enum rw_hint hint)
@@ -3033,7 +3255,13 @@ static int __get_segment_type_6(struct f2fs_io_info *fio)
 	if (fio->type == DATA) {
 		struct inode *inode = fio->page->mapping->host;
 
-		if (is_cold_data(fio->page) || file_is_cold(inode))
+		if (is_cold_data(fio->page)) {
+			if (fio->sbi->am.atgc_enabled)
+				return CURSEG_ALL_DATA_ATGC;
+			else
+				return CURSEG_COLD_DATA;
+		}
+		if (file_is_cold(inode) || f2fs_need_compress_data(inode))
 			return CURSEG_COLD_DATA;
 		if (file_is_hot(inode) ||
 				is_inode_flag_set(inode, FI_HOT_DATA) ||
@@ -3079,18 +3307,29 @@ static int __get_segment_type(struct f2fs_io_info *fio)
 void f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
 		block_t old_blkaddr, block_t *new_blkaddr,
 		struct f2fs_summary *sum, int type,
-		struct f2fs_io_info *fio, bool add_list)
+		struct f2fs_io_info *fio)
 {
 	struct sit_info *sit_i = SIT_I(sbi);
 	struct curseg_info *curseg = CURSEG_I(sbi, type);
+	unsigned long long old_mtime;
+	bool from_gc = (type == CURSEG_ALL_DATA_ATGC);
+	struct seg_entry *se = NULL;
 
 	down_read(&SM_I(sbi)->curseg_lock);
 
 	mutex_lock(&curseg->curseg_mutex);
 	down_write(&sit_i->sentry_lock);
 
+	if (from_gc) {
+		f2fs_bug_on(sbi, GET_SEGNO(sbi, old_blkaddr) == NULL_SEGNO);
+		se = get_seg_entry(sbi, GET_SEGNO(sbi, old_blkaddr));
+		sanity_check_seg_type(sbi, se->type);
+		f2fs_bug_on(sbi, IS_NODESEG(se->type));
+	}
 	*new_blkaddr = NEXT_FREE_BLKADDR(sbi, curseg);
 
+	f2fs_bug_on(sbi, curseg->next_blkoff >= sbi->blocks_per_seg);
+
 	f2fs_wait_discard_bio(sbi, *new_blkaddr);
 
 	/*
@@ -3104,6 +3343,14 @@ void f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
 
 	stat_inc_block_count(sbi, curseg);
 
+	if (from_gc) {
+		old_mtime = get_segment_mtime(sbi, old_blkaddr);
+	} else {
+		update_segment_mtime(sbi, old_blkaddr, 0);
+		old_mtime = 0;
+	}
+	update_segment_mtime(sbi, *new_blkaddr, old_mtime);
+
 	/*
 	 * SIT information should be updated before segment allocation,
 	 * since SSR needs latest valid block information.
@@ -3112,9 +3359,13 @@ void f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
 	if (GET_SEGNO(sbi, old_blkaddr) != NULL_SEGNO)
 		update_sit_entry(sbi, old_blkaddr, -1);
 
-	if (!__has_curseg_space(sbi, type))
-		sit_i->s_ops->allocate_segment(sbi, type, false);
-
+	if (!__has_curseg_space(sbi, curseg)) {
+		if (from_gc)
+			get_atssr_segment(sbi, type, se->type,
+						AT_SSR, se->mtime);
+		else
+			sit_i->s_ops->allocate_segment(sbi, type, false);
+	}
 	/*
 	 * segment dirty status should be updated after segment allocation,
 	 * so we just need to update status only one time after previous
@@ -3134,7 +3385,7 @@ void f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
 	if (F2FS_IO_ALIGNED(sbi))
 		fio->retry = false;
 
-	if (add_list) {
+	if (fio) {
 		struct f2fs_bio_info *io;
 
 		INIT_LIST_HEAD(&fio->list);
@@ -3174,13 +3425,13 @@ static void update_device_state(struct f2fs_io_info *fio)
 static void do_write_page(struct f2fs_summary *sum, struct f2fs_io_info *fio)
 {
 	int type = __get_segment_type(fio);
-	bool keep_order = (test_opt(fio->sbi, LFS) && type == CURSEG_COLD_DATA);
+	bool keep_order = (f2fs_lfs_mode(fio->sbi) && type == CURSEG_COLD_DATA);
 
 	if (keep_order)
 		down_read(&fio->sbi->io_order_lock);
 reallocate:
 	f2fs_allocate_data_block(fio->sbi, fio->page, fio->old_blkaddr,
-			&fio->new_blkaddr, sum, type, fio, true);
+			&fio->new_blkaddr, sum, type, fio);
 	if (GET_SEGNO(fio->sbi, fio->old_blkaddr) != NULL_SEGNO)
 		invalidate_mapping_pages(META_MAPPING(fio->sbi),
 					fio->old_blkaddr, fio->old_blkaddr);
@@ -3270,7 +3521,7 @@ int f2fs_inplace_write_data(struct f2fs_io_info *fio)
 
 	stat_inc_inplace_blocks(fio->sbi);
 
-	if (fio->bio)
+	if (fio->bio && !(SM_I(sbi)->ipu_policy & (1 << F2FS_IPU_NOCACHE)))
 		err = f2fs_merge_page_bio(fio);
 	else
 		err = f2fs_submit_page_bio(fio);
@@ -3296,7 +3547,8 @@ static inline int __f2fs_get_curseg(struct f2fs_sb_info *sbi,
 
 void f2fs_do_replace_block(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
 				block_t old_blkaddr, block_t new_blkaddr,
-				bool recover_curseg, bool recover_newaddr)
+				bool recover_curseg, bool recover_newaddr,
+				bool from_gc)
 {
 	struct sit_info *sit_i = SIT_I(sbi);
 	struct curseg_info *curseg;
@@ -3341,17 +3593,22 @@ void f2fs_do_replace_block(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
 	/* change the current segment */
 	if (segno != curseg->segno) {
 		curseg->next_segno = segno;
-		change_curseg(sbi, type);
+		change_curseg(sbi, type, true);
 	}
 
 	curseg->next_blkoff = GET_BLKOFF_FROM_SEG0(sbi, new_blkaddr);
 	__add_sum_entry(sbi, type, sum);
 
-	if (!recover_curseg || recover_newaddr)
+	if (!recover_curseg || recover_newaddr) {
+		if (!from_gc)
+			update_segment_mtime(sbi, new_blkaddr, 0);
 		update_sit_entry(sbi, new_blkaddr, 1);
+	}
 	if (GET_SEGNO(sbi, old_blkaddr) != NULL_SEGNO) {
 		invalidate_mapping_pages(META_MAPPING(sbi),
 					old_blkaddr, old_blkaddr);
+		if (!from_gc)
+			update_segment_mtime(sbi, old_blkaddr, 0);
 		update_sit_entry(sbi, old_blkaddr, -1);
 	}
 
@@ -3363,7 +3620,7 @@ void f2fs_do_replace_block(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
 	if (recover_curseg) {
 		if (old_cursegno != curseg->segno) {
 			curseg->next_segno = old_cursegno;
-			change_curseg(sbi, type);
+			change_curseg(sbi, type, true);
 		}
 		curseg->next_blkoff = old_blkoff;
 	}
@@ -3383,7 +3640,7 @@ void f2fs_replace_block(struct f2fs_sb_info *sbi, struct dnode_of_data *dn,
 	set_summary(&sum, dn->nid, dn->ofs_in_node, version);
 
 	f2fs_do_replace_block(sbi, &sum, old_addr, new_addr,
-					recover_curseg, recover_newaddr);
+					recover_curseg, recover_newaddr, false);
 
 	f2fs_update_data_blkaddr(dn, new_addr);
 }
@@ -3394,7 +3651,10 @@ void f2fs_wait_on_page_writeback(struct page *page,
 	if (PageWriteback(page)) {
 		struct f2fs_sb_info *sbi = F2FS_P_SB(page);
 
+		/* submit cached LFS IO */
 		f2fs_submit_merged_write_cond(sbi, NULL, page, 0, type);
+		/* sbumit cached IPU IO */
+		f2fs_submit_merged_ipu_write(sbi, NULL, page);
 		if (ordered) {
 			wait_on_page_writeback(page);
 			f2fs_bug_on(sbi, locked && PageWriteback(page));
@@ -3512,7 +3772,7 @@ static int read_normal_summaries(struct f2fs_sb_info *sbi, int type)
 		blk_off = le16_to_cpu(ckpt->cur_data_blkoff[type -
 							CURSEG_HOT_DATA]);
 		if (__exist_node_summaries(sbi))
-			blk_addr = sum_blk_addr(sbi, NR_CURSEG_TYPE, type);
+			blk_addr = sum_blk_addr(sbi, NR_CURSEG_PERSIST_TYPE, type);
 		else
 			blk_addr = sum_blk_addr(sbi, NR_CURSEG_DATA_TYPE, type);
 	} else {
@@ -3590,8 +3850,9 @@ static int restore_curseg_summaries(struct f2fs_sb_info *sbi)
 	}
 
 	if (__exist_node_summaries(sbi))
-		f2fs_ra_meta_pages(sbi, sum_blk_addr(sbi, NR_CURSEG_TYPE, type),
-					NR_CURSEG_TYPE - type, META_CP, true);
+		f2fs_ra_meta_pages(sbi,
+				sum_blk_addr(sbi, NR_CURSEG_PERSIST_TYPE, type),
+				NR_CURSEG_PERSIST_TYPE - type, META_CP, true);
 
 	for (; type <= CURSEG_COLD_NODE; type++) {
 		err = read_normal_summaries(sbi, type);
@@ -4049,7 +4310,7 @@ static int build_sit_info(struct f2fs_sb_info *sbi)
 	sit_i->dirty_sentries = 0;
 	sit_i->sents_per_block = SIT_ENTRY_PER_BLOCK;
 	sit_i->elapsed_time = le64_to_cpu(sbi->ckpt->elapsed_time);
-	sit_i->mounted_time = ktime_get_real_seconds();
+	sit_i->mounted_time = ktime_get_boottime_seconds();
 	init_rwsem(&sit_i->sentry_lock);
 	return 0;
 }
@@ -4093,14 +4354,14 @@ static int build_curseg(struct f2fs_sb_info *sbi)
 	struct curseg_info *array;
 	int i;
 
-	array = f2fs_kzalloc(sbi, array_size(NR_CURSEG_TYPE, sizeof(*array)),
-			     GFP_KERNEL);
+	array = f2fs_kzalloc(sbi, array_size(NR_CURSEG_TYPE,
+					sizeof(*array)), GFP_KERNEL);
 	if (!array)
 		return -ENOMEM;
 
 	SM_I(sbi)->curseg_array = array;
 
-	for (i = 0; i < NR_CURSEG_TYPE; i++) {
+	for (i = 0; i < NO_CHECK_TYPE; i++) {
 		mutex_init(&array[i].curseg_mutex);
 		array[i].sum_blk = f2fs_kzalloc(sbi, PAGE_SIZE, GFP_KERNEL);
 		if (!array[i].sum_blk)
@@ -4110,8 +4371,15 @@ static int build_curseg(struct f2fs_sb_info *sbi)
 				sizeof(struct f2fs_journal), GFP_KERNEL);
 		if (!array[i].journal)
 			return -ENOMEM;
+		if (i < NR_PERSISTENT_LOG)
+			array[i].seg_type = CURSEG_HOT_DATA + i;
+		else if (i == CURSEG_COLD_DATA_PINNED)
+			array[i].seg_type = CURSEG_COLD_DATA;
+		else if (i == CURSEG_ALL_DATA_ATGC)
+			array[i].seg_type = CURSEG_COLD_DATA;
 		array[i].segno = NULL_SEGNO;
 		array[i].next_blkoff = 0;
+		array[i].inited = false;
 	}
 	return restore_curseg_summaries(sbi);
 }
@@ -4232,9 +4500,12 @@ static void init_free_segmap(struct f2fs_sb_info *sbi)
 {
 	unsigned int start;
 	int type;
+	struct seg_entry *sentry;
 
 	for (start = 0; start < MAIN_SEGS(sbi); start++) {
-		struct seg_entry *sentry = get_seg_entry(sbi, start);
+		if (f2fs_usable_blks_in_seg(sbi, start) == 0)
+			continue;
+		sentry = get_seg_entry(sbi, start);
 		if (!sentry->valid_blocks)
 			__set_free(sbi, start);
 		else
@@ -4253,8 +4524,9 @@ static void init_dirty_segmap(struct f2fs_sb_info *sbi)
 {
 	struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
 	struct free_segmap_info *free_i = FREE_I(sbi);
-	unsigned int segno = 0, offset = 0;
-	unsigned short valid_blocks;
+	unsigned int segno = 0, offset = 0, secno;
+	block_t valid_blocks, usable_blks_in_seg;
+	block_t blks_per_sec = BLKS_PER_SEC(sbi);
 
 	while (1) {
 		/* find dirty segment based on free segmap */
@@ -4263,9 +4535,10 @@ static void init_dirty_segmap(struct f2fs_sb_info *sbi)
 			break;
 		offset = segno + 1;
 		valid_blocks = get_valid_blocks(sbi, segno, false);
-		if (valid_blocks == sbi->blocks_per_seg || !valid_blocks)
+		usable_blks_in_seg = f2fs_usable_blks_in_seg(sbi, segno);
+		if (valid_blocks == usable_blks_in_seg || !valid_blocks)
 			continue;
-		if (valid_blocks > sbi->blocks_per_seg) {
+		if (valid_blocks > usable_blks_in_seg) {
 			f2fs_bug_on(sbi, 1);
 			continue;
 		}
@@ -4273,6 +4546,22 @@ static void init_dirty_segmap(struct f2fs_sb_info *sbi)
 		__locate_dirty_segment(sbi, segno, DIRTY);
 		mutex_unlock(&dirty_i->seglist_lock);
 	}
+
+	if (!__is_large_section(sbi))
+		return;
+
+	mutex_lock(&dirty_i->seglist_lock);
+	for (segno = 0; segno < MAIN_SEGS(sbi); segno += sbi->segs_per_sec) {
+		valid_blocks = get_valid_blocks(sbi, segno, true);
+		secno = GET_SEC_FROM_SEG(sbi, segno);
+
+		if (!valid_blocks || valid_blocks == blks_per_sec)
+			continue;
+		if (IS_CURSEC(sbi, secno))
+			continue;
+		set_bit(secno, dirty_i->dirty_secmap);
+	}
+	mutex_unlock(&dirty_i->seglist_lock);
 }
 
 static int init_victim_secmap(struct f2fs_sb_info *sbi)
@@ -4309,6 +4598,14 @@ static int build_dirty_segmap(struct f2fs_sb_info *sbi)
 			return -ENOMEM;
 	}
 
+	if (__is_large_section(sbi)) {
+		bitmap_size = f2fs_bitmap_size(MAIN_SECS(sbi));
+		dirty_i->dirty_secmap = f2fs_kvzalloc(sbi,
+						bitmap_size, GFP_KERNEL);
+		if (!dirty_i->dirty_secmap)
+			return -ENOMEM;
+	}
+
 	init_dirty_segmap(sbi);
 	return init_victim_secmap(sbi);
 }
@@ -4321,11 +4618,13 @@ static int sanity_check_curseg(struct f2fs_sb_info *sbi)
 	 * In LFS/SSR curseg, .next_blkoff should point to an unused blkaddr;
 	 * In LFS curseg, all blkaddr after .next_blkoff should be unused.
 	 */
-	for (i = 0; i < NO_CHECK_TYPE; i++) {
+	for (i = 0; i < NR_PERSISTENT_LOG; i++) {
 		struct curseg_info *curseg = CURSEG_I(sbi, i);
 		struct seg_entry *se = get_seg_entry(sbi, curseg->segno);
 		unsigned int blkofs = curseg->next_blkoff;
 
+		sanity_check_seg_type(sbi, curseg->seg_type);
+
 		if (f2fs_test_bit(blkofs, se->cur_valid_map))
 			goto out;
 
@@ -4346,6 +4645,387 @@ static int sanity_check_curseg(struct f2fs_sb_info *sbi)
 	return 0;
 }
 
+#ifdef CONFIG_BLK_DEV_ZONED
+
+static int check_zone_write_pointer(struct f2fs_sb_info *sbi,
+				    struct f2fs_dev_info *fdev,
+				    struct blk_zone *zone)
+{
+	unsigned int wp_segno, wp_blkoff, zone_secno, zone_segno, segno;
+	block_t zone_block, wp_block, last_valid_block;
+	unsigned int log_sectors_per_block = sbi->log_blocksize - SECTOR_SHIFT;
+	int i, s, b, ret;
+	struct seg_entry *se;
+
+	if (zone->type != BLK_ZONE_TYPE_SEQWRITE_REQ)
+		return 0;
+
+	wp_block = fdev->start_blk + (zone->wp >> log_sectors_per_block);
+	wp_segno = GET_SEGNO(sbi, wp_block);
+	wp_blkoff = wp_block - START_BLOCK(sbi, wp_segno);
+	zone_block = fdev->start_blk + (zone->start >> log_sectors_per_block);
+	zone_segno = GET_SEGNO(sbi, zone_block);
+	zone_secno = GET_SEC_FROM_SEG(sbi, zone_segno);
+
+	if (zone_segno >= MAIN_SEGS(sbi))
+		return 0;
+
+	/*
+	 * Skip check of zones cursegs point to, since
+	 * fix_curseg_write_pointer() checks them.
+	 */
+	for (i = 0; i < NO_CHECK_TYPE; i++)
+		if (zone_secno == GET_SEC_FROM_SEG(sbi,
+						   CURSEG_I(sbi, i)->segno))
+			return 0;
+
+	/*
+	 * Get last valid block of the zone.
+	 */
+	last_valid_block = zone_block - 1;
+	for (s = sbi->segs_per_sec - 1; s >= 0; s--) {
+		segno = zone_segno + s;
+		se = get_seg_entry(sbi, segno);
+		for (b = sbi->blocks_per_seg - 1; b >= 0; b--)
+			if (f2fs_test_bit(b, se->cur_valid_map)) {
+				last_valid_block = START_BLOCK(sbi, segno) + b;
+				break;
+			}
+		if (last_valid_block >= zone_block)
+			break;
+	}
+
+	/*
+	 * If last valid block is beyond the write pointer, report the
+	 * inconsistency. This inconsistency does not cause write error
+	 * because the zone will not be selected for write operation until
+	 * it get discarded. Just report it.
+	 */
+	if (last_valid_block >= wp_block) {
+		f2fs_notice(sbi, "Valid block beyond write pointer: "
+			    "valid block[0x%x,0x%x] wp[0x%x,0x%x]",
+			    GET_SEGNO(sbi, last_valid_block),
+			    GET_BLKOFF_FROM_SEG0(sbi, last_valid_block),
+			    wp_segno, wp_blkoff);
+		return 0;
+	}
+
+	/*
+	 * If there is no valid block in the zone and if write pointer is
+	 * not at zone start, reset the write pointer.
+	 */
+	if (last_valid_block + 1 == zone_block && zone->wp != zone->start) {
+		f2fs_notice(sbi,
+			    "Zone without valid block has non-zero write "
+			    "pointer. Reset the write pointer: wp[0x%x,0x%x]",
+			    wp_segno, wp_blkoff);
+		ret = __f2fs_issue_discard_zone(sbi, fdev->bdev, zone_block,
+					zone->len >> log_sectors_per_block);
+		if (ret) {
+			f2fs_err(sbi, "Discard zone failed: %s (errno=%d)",
+				 fdev->path, ret);
+			return ret;
+		}
+	}
+
+	return 0;
+}
+
+static struct f2fs_dev_info *get_target_zoned_dev(struct f2fs_sb_info *sbi,
+						  block_t zone_blkaddr)
+{
+	int i;
+
+	for (i = 0; i < sbi->s_ndevs; i++) {
+		if (!bdev_is_zoned(FDEV(i).bdev))
+			continue;
+		if (sbi->s_ndevs == 1 || (FDEV(i).start_blk <= zone_blkaddr &&
+				zone_blkaddr <= FDEV(i).end_blk))
+			return &FDEV(i);
+	}
+
+	return NULL;
+}
+
+static int report_one_zone_cb(struct blk_zone *zone, unsigned int idx,
+			      void *data) {
+	memcpy(data, zone, sizeof(struct blk_zone));
+	return 0;
+}
+
+static int fix_curseg_write_pointer(struct f2fs_sb_info *sbi, int type)
+{
+	struct curseg_info *cs = CURSEG_I(sbi, type);
+	struct f2fs_dev_info *zbd;
+	struct blk_zone zone;
+	unsigned int cs_section, wp_segno, wp_blkoff, wp_sector_off;
+	block_t cs_zone_block, wp_block;
+	unsigned int log_sectors_per_block = sbi->log_blocksize - SECTOR_SHIFT;
+	sector_t zone_sector;
+	int err;
+
+	cs_section = GET_SEC_FROM_SEG(sbi, cs->segno);
+	cs_zone_block = START_BLOCK(sbi, GET_SEG_FROM_SEC(sbi, cs_section));
+
+	zbd = get_target_zoned_dev(sbi, cs_zone_block);
+	if (!zbd)
+		return 0;
+
+	/* report zone for the sector the curseg points to */
+	zone_sector = (sector_t)(cs_zone_block - zbd->start_blk)
+		<< log_sectors_per_block;
+	err = blkdev_report_zones(zbd->bdev, zone_sector, 1,
+				  report_one_zone_cb, &zone);
+	if (err != 1) {
+		f2fs_err(sbi, "Report zone failed: %s errno=(%d)",
+			 zbd->path, err);
+		return err;
+	}
+
+	if (zone.type != BLK_ZONE_TYPE_SEQWRITE_REQ)
+		return 0;
+
+	wp_block = zbd->start_blk + (zone.wp >> log_sectors_per_block);
+	wp_segno = GET_SEGNO(sbi, wp_block);
+	wp_blkoff = wp_block - START_BLOCK(sbi, wp_segno);
+	wp_sector_off = zone.wp & GENMASK(log_sectors_per_block - 1, 0);
+
+	if (cs->segno == wp_segno && cs->next_blkoff == wp_blkoff &&
+		wp_sector_off == 0)
+		return 0;
+
+	f2fs_notice(sbi, "Unaligned curseg[%d] with write pointer: "
+		    "curseg[0x%x,0x%x] wp[0x%x,0x%x]",
+		    type, cs->segno, cs->next_blkoff, wp_segno, wp_blkoff);
+
+	f2fs_notice(sbi, "Assign new section to curseg[%d]: "
+		    "curseg[0x%x,0x%x]", type, cs->segno, cs->next_blkoff);
+	allocate_segment_by_default(sbi, type, true);
+
+	/* check consistency of the zone curseg pointed to */
+	if (check_zone_write_pointer(sbi, zbd, &zone))
+		return -EIO;
+
+	/* check newly assigned zone */
+	cs_section = GET_SEC_FROM_SEG(sbi, cs->segno);
+	cs_zone_block = START_BLOCK(sbi, GET_SEG_FROM_SEC(sbi, cs_section));
+
+	zbd = get_target_zoned_dev(sbi, cs_zone_block);
+	if (!zbd)
+		return 0;
+
+	zone_sector = (sector_t)(cs_zone_block - zbd->start_blk)
+		<< log_sectors_per_block;
+	err = blkdev_report_zones(zbd->bdev, zone_sector, 1,
+				  report_one_zone_cb, &zone);
+	if (err != 1) {
+		f2fs_err(sbi, "Report zone failed: %s errno=(%d)",
+			 zbd->path, err);
+		return err;
+	}
+
+	if (zone.type != BLK_ZONE_TYPE_SEQWRITE_REQ)
+		return 0;
+
+	if (zone.wp != zone.start) {
+		f2fs_notice(sbi,
+			    "New zone for curseg[%d] is not yet discarded. "
+			    "Reset the zone: curseg[0x%x,0x%x]",
+			    type, cs->segno, cs->next_blkoff);
+		err = __f2fs_issue_discard_zone(sbi, zbd->bdev,
+				zone_sector >> log_sectors_per_block,
+				zone.len >> log_sectors_per_block);
+		if (err) {
+			f2fs_err(sbi, "Discard zone failed: %s (errno=%d)",
+				 zbd->path, err);
+			return err;
+		}
+	}
+
+	return 0;
+}
+
+int f2fs_fix_curseg_write_pointer(struct f2fs_sb_info *sbi)
+{
+	int i, ret;
+
+	for (i = 0; i < NR_PERSISTENT_LOG; i++) {
+		ret = fix_curseg_write_pointer(sbi, i);
+		if (ret)
+			return ret;
+	}
+
+	return 0;
+}
+
+struct check_zone_write_pointer_args {
+	struct f2fs_sb_info *sbi;
+	struct f2fs_dev_info *fdev;
+};
+
+static int check_zone_write_pointer_cb(struct blk_zone *zone, unsigned int idx,
+				      void *data) {
+	struct check_zone_write_pointer_args *args;
+	args = (struct check_zone_write_pointer_args *)data;
+
+	return check_zone_write_pointer(args->sbi, args->fdev, zone);
+}
+
+int f2fs_check_write_pointer(struct f2fs_sb_info *sbi)
+{
+	int i, ret;
+	struct check_zone_write_pointer_args args;
+
+	for (i = 0; i < sbi->s_ndevs; i++) {
+		if (!bdev_is_zoned(FDEV(i).bdev))
+			continue;
+
+		args.sbi = sbi;
+		args.fdev = &FDEV(i);
+		ret = blkdev_report_zones(FDEV(i).bdev, 0, BLK_ALL_ZONES,
+					  check_zone_write_pointer_cb, &args);
+		if (ret < 0)
+			return ret;
+	}
+
+	return 0;
+}
+
+static bool is_conv_zone(struct f2fs_sb_info *sbi, unsigned int zone_idx,
+						unsigned int dev_idx)
+{
+	if (!bdev_is_zoned(FDEV(dev_idx).bdev))
+		return true;
+	return !test_bit(zone_idx, FDEV(dev_idx).blkz_seq);
+}
+
+/* Return the zone index in the given device */
+static unsigned int get_zone_idx(struct f2fs_sb_info *sbi, unsigned int secno,
+					int dev_idx)
+{
+	block_t sec_start_blkaddr = START_BLOCK(sbi, GET_SEG_FROM_SEC(sbi, secno));
+
+	return (sec_start_blkaddr - FDEV(dev_idx).start_blk) >>
+						sbi->log_blocks_per_blkz;
+}
+
+/*
+ * Return the usable segments in a section based on the zone's
+ * corresponding zone capacity. Zone is equal to a section.
+ */
+static inline unsigned int f2fs_usable_zone_segs_in_sec(
+		struct f2fs_sb_info *sbi, unsigned int segno)
+{
+	unsigned int dev_idx, zone_idx, unusable_segs_in_sec;
+
+	dev_idx = f2fs_target_device_index(sbi, START_BLOCK(sbi, segno));
+	zone_idx = get_zone_idx(sbi, GET_SEC_FROM_SEG(sbi, segno), dev_idx);
+
+	/* Conventional zone's capacity is always equal to zone size */
+	if (is_conv_zone(sbi, zone_idx, dev_idx))
+		return sbi->segs_per_sec;
+
+	/*
+	 * If the zone_capacity_blocks array is NULL, then zone capacity
+	 * is equal to the zone size for all zones
+	 */
+	if (!FDEV(dev_idx).zone_capacity_blocks)
+		return sbi->segs_per_sec;
+
+	/* Get the segment count beyond zone capacity block */
+	unusable_segs_in_sec = (sbi->blocks_per_blkz -
+				FDEV(dev_idx).zone_capacity_blocks[zone_idx]) >>
+				sbi->log_blocks_per_seg;
+	return sbi->segs_per_sec - unusable_segs_in_sec;
+}
+
+/*
+ * Return the number of usable blocks in a segment. The number of blocks
+ * returned is always equal to the number of blocks in a segment for
+ * segments fully contained within a sequential zone capacity or a
+ * conventional zone. For segments partially contained in a sequential
+ * zone capacity, the number of usable blocks up to the zone capacity
+ * is returned. 0 is returned in all other cases.
+ */
+static inline unsigned int f2fs_usable_zone_blks_in_seg(
+			struct f2fs_sb_info *sbi, unsigned int segno)
+{
+	block_t seg_start, sec_start_blkaddr, sec_cap_blkaddr;
+	unsigned int zone_idx, dev_idx, secno;
+
+	secno = GET_SEC_FROM_SEG(sbi, segno);
+	seg_start = START_BLOCK(sbi, segno);
+	dev_idx = f2fs_target_device_index(sbi, seg_start);
+	zone_idx = get_zone_idx(sbi, secno, dev_idx);
+
+	/*
+	 * Conventional zone's capacity is always equal to zone size,
+	 * so, blocks per segment is unchanged.
+	 */
+	if (is_conv_zone(sbi, zone_idx, dev_idx))
+		return sbi->blocks_per_seg;
+
+	if (!FDEV(dev_idx).zone_capacity_blocks)
+		return sbi->blocks_per_seg;
+
+	sec_start_blkaddr = START_BLOCK(sbi, GET_SEG_FROM_SEC(sbi, secno));
+	sec_cap_blkaddr = sec_start_blkaddr +
+				FDEV(dev_idx).zone_capacity_blocks[zone_idx];
+
+	/*
+	 * If segment starts before zone capacity and spans beyond
+	 * zone capacity, then usable blocks are from seg start to
+	 * zone capacity. If the segment starts after the zone capacity,
+	 * then there are no usable blocks.
+	 */
+	if (seg_start >= sec_cap_blkaddr)
+		return 0;
+	if (seg_start + sbi->blocks_per_seg > sec_cap_blkaddr)
+		return sec_cap_blkaddr - seg_start;
+
+	return sbi->blocks_per_seg;
+}
+#else
+int f2fs_fix_curseg_write_pointer(struct f2fs_sb_info *sbi)
+{
+	return 0;
+}
+
+int f2fs_check_write_pointer(struct f2fs_sb_info *sbi)
+{
+	return 0;
+}
+
+static inline unsigned int f2fs_usable_zone_blks_in_seg(struct f2fs_sb_info *sbi,
+							unsigned int segno)
+{
+	return 0;
+}
+
+static inline unsigned int f2fs_usable_zone_segs_in_sec(struct f2fs_sb_info *sbi,
+							unsigned int segno)
+{
+	return 0;
+}
+#endif
+unsigned int f2fs_usable_blks_in_seg(struct f2fs_sb_info *sbi,
+					unsigned int segno)
+{
+	if (f2fs_sb_has_blkzoned(sbi))
+		return f2fs_usable_zone_blks_in_seg(sbi, segno);
+
+	return sbi->blocks_per_seg;
+}
+
+unsigned int f2fs_usable_segs_in_sec(struct f2fs_sb_info *sbi,
+					unsigned int segno)
+{
+	if (f2fs_sb_has_blkzoned(sbi))
+		return f2fs_usable_zone_segs_in_sec(sbi, segno);
+
+	return sbi->segs_per_sec;
+}
+
 /*
  * Update min, max modified time for cost-benefit GC algorithm
  */
@@ -4371,6 +5051,7 @@ static void init_min_max_mtime(struct f2fs_sb_info *sbi)
 			sit_i->min_mtime = mtime;
 	}
 	sit_i->max_mtime = get_mtime(sbi, false);
+	sit_i->dirty_max_mtime = 0;
 	up_write(&sit_i->sentry_lock);
 }
 
@@ -4399,7 +5080,7 @@ int f2fs_build_segment_manager(struct f2fs_sb_info *sbi)
 	if (sm_info->rec_prefree_segments > DEF_MAX_RECLAIM_PREFREE_SEGMENTS)
 		sm_info->rec_prefree_segments = DEF_MAX_RECLAIM_PREFREE_SEGMENTS;
 
-	if (!test_opt(sbi, LFS))
+	if (!f2fs_lfs_mode(sbi))
 		sm_info->ipu_policy = 1 << F2FS_IPU_FSYNC;
 	sm_info->min_ipu_util = DEF_MIN_IPU_UTIL;
 	sm_info->min_fsync_blocks = DEF_MIN_FSYNC_BLOCKS;
@@ -4478,9 +5159,15 @@ static void destroy_dirty_segmap(struct f2fs_sb_info *sbi)
 	for (i = 0; i < NR_DIRTY_TYPE; i++)
 		discard_dirty_segmap(sbi, i);
 
+	if (__is_large_section(sbi)) {
+		mutex_lock(&dirty_i->seglist_lock);
+		kvfree(dirty_i->dirty_secmap);
+		mutex_unlock(&dirty_i->seglist_lock);
+	}
+
 	destroy_victim_secmap(sbi);
 	SM_I(sbi)->dirty_info = NULL;
-	kvfree(dirty_i);
+	kfree(dirty_i);
 }
 
 static void destroy_curseg(struct f2fs_sb_info *sbi)
@@ -4492,10 +5179,10 @@ static void destroy_curseg(struct f2fs_sb_info *sbi)
 		return;
 	SM_I(sbi)->curseg_array = NULL;
 	for (i = 0; i < NR_CURSEG_TYPE; i++) {
-		kvfree(array[i].sum_blk);
-		kvfree(array[i].journal);
+		kfree(array[i].sum_blk);
+		kfree(array[i].journal);
 	}
-	kvfree(array);
+	kfree(array);
 }
 
 static void destroy_free_segmap(struct f2fs_sb_info *sbi)
@@ -4506,7 +5193,7 @@ static void destroy_free_segmap(struct f2fs_sb_info *sbi)
 	SM_I(sbi)->free_info = NULL;
 	kvfree(free_i->free_segmap);
 	kvfree(free_i->free_secmap);
-	kvfree(free_i);
+	kfree(free_i);
 }
 
 static void destroy_sit_info(struct f2fs_sb_info *sbi)
@@ -4518,7 +5205,7 @@ static void destroy_sit_info(struct f2fs_sb_info *sbi)
 
 	if (sit_i->sentries)
 		kvfree(sit_i->bitmap);
-	kvfree(sit_i->tmp_map);
+	kfree(sit_i->tmp_map);
 
 	kvfree(sit_i->sentries);
 	kvfree(sit_i->sec_entries);
@@ -4530,7 +5217,7 @@ static void destroy_sit_info(struct f2fs_sb_info *sbi)
 	kvfree(sit_i->sit_bitmap_mir);
 	kvfree(sit_i->invalid_segmap);
 #endif
-	kvfree(sit_i);
+	kfree(sit_i);
 }
 
 void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi)
@@ -4546,27 +5233,27 @@ void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi)
 	destroy_free_segmap(sbi);
 	destroy_sit_info(sbi);
 	sbi->sm_info = NULL;
-	kvfree(sm_info);
+	kfree(sm_info);
 }
 
 int __init f2fs_create_segment_manager_caches(void)
 {
-	discard_entry_slab = f2fs_kmem_cache_create("discard_entry",
+	discard_entry_slab = f2fs_kmem_cache_create("f2fs_discard_entry",
 			sizeof(struct discard_entry));
 	if (!discard_entry_slab)
 		goto fail;
 
-	discard_cmd_slab = f2fs_kmem_cache_create("discard_cmd",
+	discard_cmd_slab = f2fs_kmem_cache_create("f2fs_discard_cmd",
 			sizeof(struct discard_cmd));
 	if (!discard_cmd_slab)
 		goto destroy_discard_entry;
 
-	sit_entry_set_slab = f2fs_kmem_cache_create("sit_entry_set",
+	sit_entry_set_slab = f2fs_kmem_cache_create("f2fs_sit_entry_set",
 			sizeof(struct sit_entry_set));
 	if (!sit_entry_set_slab)
 		goto destroy_discard_cmd;
 
-	inmem_entry_slab = f2fs_kmem_cache_create("inmem_page_entry",
+	inmem_entry_slab = f2fs_kmem_cache_create("f2fs_inmem_page_entry",
 			sizeof(struct inmem_pages));
 	if (!inmem_entry_slab)
 		goto destroy_sit_entry_set;
diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
index 325781a..e81eb07 100644
--- a/fs/f2fs/segment.h
+++ b/fs/f2fs/segment.h
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * fs/f2fs/segment.h
  *
@@ -16,13 +16,20 @@
 #define DEF_MAX_RECLAIM_PREFREE_SEGMENTS	4096	/* 8GB in maximum */
 
 #define F2FS_MIN_SEGMENTS	9 /* SB + 2 (CP + SIT + NAT) + SSA + MAIN */
+#define F2FS_MIN_META_SEGMENTS	8 /* SB + 2 (CP + SIT + NAT) + SSA */
 
 /* L: Logical segment # in volume, R: Relative segment # in main area */
 #define GET_L2R_SEGNO(free_i, segno)	((segno) - (free_i)->start_segno)
 #define GET_R2L_SEGNO(free_i, segno)	((segno) + (free_i)->start_segno)
 
 #define IS_DATASEG(t)	((t) <= CURSEG_COLD_DATA)
-#define IS_NODESEG(t)	((t) >= CURSEG_HOT_NODE)
+#define IS_NODESEG(t)	((t) >= CURSEG_HOT_NODE && (t) <= CURSEG_COLD_NODE)
+
+static inline void sanity_check_seg_type(struct f2fs_sb_info *sbi,
+						unsigned short seg_type)
+{
+	f2fs_bug_on(sbi, seg_type >= NR_PERSISTENT_LOG);
+}
 
 #define IS_HOT(t)	((t) == CURSEG_HOT_NODE || (t) == CURSEG_HOT_DATA)
 #define IS_WARM(t)	((t) == CURSEG_WARM_NODE || (t) == CURSEG_WARM_DATA)
@@ -34,7 +41,9 @@
 	 ((seg) == CURSEG_I(sbi, CURSEG_COLD_DATA)->segno) ||	\
 	 ((seg) == CURSEG_I(sbi, CURSEG_HOT_NODE)->segno) ||	\
 	 ((seg) == CURSEG_I(sbi, CURSEG_WARM_NODE)->segno) ||	\
-	 ((seg) == CURSEG_I(sbi, CURSEG_COLD_NODE)->segno))
+	 ((seg) == CURSEG_I(sbi, CURSEG_COLD_NODE)->segno) ||	\
+	 ((seg) == CURSEG_I(sbi, CURSEG_COLD_DATA_PINNED)->segno) ||	\
+	 ((seg) == CURSEG_I(sbi, CURSEG_ALL_DATA_ATGC)->segno))
 
 #define IS_CURSEC(sbi, secno)						\
 	(((secno) == CURSEG_I(sbi, CURSEG_HOT_DATA)->segno /		\
@@ -48,7 +57,11 @@
 	 ((secno) == CURSEG_I(sbi, CURSEG_WARM_NODE)->segno /		\
 	  (sbi)->segs_per_sec) ||	\
 	 ((secno) == CURSEG_I(sbi, CURSEG_COLD_NODE)->segno /		\
-	  (sbi)->segs_per_sec))	\
+	  (sbi)->segs_per_sec) ||	\
+	 ((secno) == CURSEG_I(sbi, CURSEG_COLD_DATA_PINNED)->segno /	\
+	  (sbi)->segs_per_sec) ||	\
+	 ((secno) == CURSEG_I(sbi, CURSEG_ALL_DATA_ATGC)->segno /	\
+	  (sbi)->segs_per_sec))
 
 #define MAIN_BLKADDR(sbi)						\
 	(SM_I(sbi) ? SM_I(sbi)->main_blkaddr : 				\
@@ -132,20 +145,25 @@ enum {
  * In the victim_sel_policy->alloc_mode, there are two block allocation modes.
  * LFS writes data sequentially with cleaning operations.
  * SSR (Slack Space Recycle) reuses obsolete space without cleaning operations.
+ * AT_SSR (Age Threshold based Slack Space Recycle) merges fragments into
+ * fragmented segment which has similar aging degree.
  */
 enum {
 	LFS = 0,
-	SSR
+	SSR,
+	AT_SSR,
 };
 
 /*
  * In the victim_sel_policy->gc_mode, there are two gc, aka cleaning, modes.
  * GC_CB is based on cost-benefit algorithm.
  * GC_GREEDY is based on greedy algorithm.
+ * GC_AT is based on age-threshold algorithm.
  */
 enum {
 	GC_CB = 0,
 	GC_GREEDY,
+	GC_AT,
 	ALLOC_NEXT,
 	FLUSH_DEVICE,
 	MAX_GC_POLICY,
@@ -166,12 +184,18 @@ enum {
 struct victim_sel_policy {
 	int alloc_mode;			/* LFS or SSR */
 	int gc_mode;			/* GC_CB or GC_GREEDY */
-	unsigned long *dirty_segmap;	/* dirty segment bitmap */
-	unsigned int max_search;	/* maximum # of segments to search */
+	unsigned long *dirty_bitmap;	/* dirty segment/section bitmap */
+	unsigned int max_search;	/*
+					 * maximum # of segments/sections
+					 * to search
+					 */
 	unsigned int offset;		/* last scanned bitmap offset */
 	unsigned int ofs_unit;		/* bitmap search unit */
 	unsigned int min_cost;		/* minimum cost */
+	unsigned long long oldest_age;	/* oldest age of segments having the same min cost */
 	unsigned int min_segno;		/* segment # having min. cost */
+	unsigned long long age;		/* mtime of GCed section*/
+	unsigned long long age_threshold;/* age threshold */
 };
 
 struct seg_entry {
@@ -184,7 +208,7 @@ struct seg_entry {
 	unsigned char *cur_valid_map_mir;	/* mirror of current valid bitmap */
 #endif
 	/*
-	 * # of valid blocks and the validity bitmap stored in the the last
+	 * # of valid blocks and the validity bitmap stored in the last
 	 * checkpoint pack. This information is used by the SSR mode.
 	 */
 	unsigned char *ckpt_valid_map;	/* validity bitmap of blocks last cp */
@@ -200,18 +224,6 @@ struct segment_allocation {
 	void (*allocate_segment)(struct f2fs_sb_info *, int, bool);
 };
 
-/*
- * this value is set in page as a private data which indicate that
- * the page is atomically written, and it is in inmem_pages list.
- */
-#define ATOMIC_WRITTEN_PAGE		((unsigned long)-1)
-#define DUMMY_WRITTEN_PAGE		((unsigned long)-2)
-
-#define IS_ATOMIC_WRITTEN_PAGE(page)			\
-		(page_private(page) == (unsigned long)ATOMIC_WRITTEN_PAGE)
-#define IS_DUMMY_WRITTEN_PAGE(page)			\
-		(page_private(page) == (unsigned long)DUMMY_WRITTEN_PAGE)
-
 #define MAX_SKIP_GC_COUNT			16
 
 struct inmem_pages {
@@ -249,6 +261,8 @@ struct sit_info {
 	unsigned long long mounted_time;	/* mount time */
 	unsigned long long min_mtime;		/* min. modification time */
 	unsigned long long max_mtime;		/* max. modification time */
+	unsigned long long dirty_min_mtime;	/* rerange candidates in GC_AT */
+	unsigned long long dirty_max_mtime;	/* rerange candidates in GC_AT */
 
 	unsigned int last_victim[MAX_GC_POLICY]; /* last victim segment # */
 };
@@ -278,6 +292,7 @@ enum dirty_type {
 struct dirty_seglist_info {
 	const struct victim_selection *v_ops;	/* victim selction operation */
 	unsigned long *dirty_segmap[NR_DIRTY_TYPE];
+	unsigned long *dirty_secmap;
 	struct mutex seglist_lock;		/* lock for segment bitmaps */
 	int nr_dirty[NR_DIRTY_TYPE];		/* # of dirty segments */
 	unsigned long *victim_secmap;		/* background GC victims */
@@ -286,7 +301,7 @@ struct dirty_seglist_info {
 /* victim selection function for cleaning and SSR */
 struct victim_selection {
 	int (*get_victim)(struct f2fs_sb_info *, unsigned int *,
-							int, int, char);
+					int, int, char, unsigned long long);
 };
 
 /* for active log information */
@@ -296,10 +311,12 @@ struct curseg_info {
 	struct rw_semaphore journal_rwsem;	/* protect journal area */
 	struct f2fs_journal *journal;		/* cached journal info */
 	unsigned char alloc_type;		/* current allocation type */
+	unsigned short seg_type;		/* segment type like CURSEG_XXX_TYPE */
 	unsigned int segno;			/* current segment number */
 	unsigned short next_blkoff;		/* next block offset to write */
 	unsigned int zone;			/* current zone number */
 	unsigned int next_segno;		/* preallocated segment */
+	bool inited;				/* indicate inmem log is inited */
 };
 
 struct sit_entry_set {
@@ -417,6 +434,7 @@ static inline void __set_free(struct f2fs_sb_info *sbi, unsigned int segno)
 	unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
 	unsigned int start_segno = GET_SEG_FROM_SEC(sbi, secno);
 	unsigned int next;
+	unsigned int usable_segs = f2fs_usable_segs_in_sec(sbi, segno);
 
 	spin_lock(&free_i->segmap_lock);
 	clear_bit(segno, free_i->free_segmap);
@@ -424,7 +442,7 @@ static inline void __set_free(struct f2fs_sb_info *sbi, unsigned int segno)
 
 	next = find_next_bit(free_i->free_segmap,
 			start_segno + sbi->segs_per_sec, start_segno);
-	if (next >= start_segno + sbi->segs_per_sec) {
+	if (next >= start_segno + usable_segs) {
 		clear_bit(secno, free_i->free_secmap);
 		free_i->free_sections++;
 	}
@@ -444,22 +462,23 @@ static inline void __set_inuse(struct f2fs_sb_info *sbi,
 }
 
 static inline void __set_test_and_free(struct f2fs_sb_info *sbi,
-		unsigned int segno)
+		unsigned int segno, bool inmem)
 {
 	struct free_segmap_info *free_i = FREE_I(sbi);
 	unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
 	unsigned int start_segno = GET_SEG_FROM_SEC(sbi, secno);
 	unsigned int next;
+	unsigned int usable_segs = f2fs_usable_segs_in_sec(sbi, segno);
 
 	spin_lock(&free_i->segmap_lock);
 	if (test_and_clear_bit(segno, free_i->free_segmap)) {
 		free_i->free_segments++;
 
-		if (IS_CURSEC(sbi, secno))
+		if (!inmem && IS_CURSEC(sbi, secno))
 			goto skip_free;
 		next = find_next_bit(free_i->free_segmap,
 				start_segno + sbi->segs_per_sec, start_segno);
-		if (next >= start_segno + sbi->segs_per_sec) {
+		if (next >= start_segno + usable_segs) {
 			if (test_and_clear_bit(secno, free_i->free_secmap))
 				free_i->free_sections++;
 		}
@@ -506,7 +525,7 @@ static inline unsigned int free_segments(struct f2fs_sb_info *sbi)
 	return FREE_I(sbi)->free_segments;
 }
 
-static inline int reserved_segments(struct f2fs_sb_info *sbi)
+static inline unsigned int reserved_segments(struct f2fs_sb_info *sbi)
 {
 	return SM_I(sbi)->reserved_segments;
 }
@@ -538,7 +557,7 @@ static inline int overprovision_segments(struct f2fs_sb_info *sbi)
 
 static inline int reserved_sections(struct f2fs_sb_info *sbi)
 {
-	return GET_SEC_FROM_SEG(sbi, (unsigned int)reserved_segments(sbi));
+	return GET_SEC_FROM_SEG(sbi, reserved_segments(sbi));
 }
 
 static inline bool has_curseg_enough_space(struct f2fs_sb_info *sbi)
@@ -552,8 +571,8 @@ static inline bool has_curseg_enough_space(struct f2fs_sb_info *sbi)
 	/* check current node segment */
 	for (i = CURSEG_HOT_NODE; i <= CURSEG_COLD_NODE; i++) {
 		segno = CURSEG_I(sbi, i)->segno;
-		left_blocks = sbi->blocks_per_seg -
-			get_seg_entry(sbi, segno)->ckpt_valid_blocks;
+		left_blocks = f2fs_usable_blks_in_seg(sbi, segno) -
+				get_seg_entry(sbi, segno)->ckpt_valid_blocks;
 
 		if (node_blocks > left_blocks)
 			return false;
@@ -561,7 +580,7 @@ static inline bool has_curseg_enough_space(struct f2fs_sb_info *sbi)
 
 	/* check current data segment */
 	segno = CURSEG_I(sbi, CURSEG_HOT_DATA)->segno;
-	left_blocks = sbi->blocks_per_seg -
+	left_blocks = f2fs_usable_blks_in_seg(sbi, segno) -
 			get_seg_entry(sbi, segno)->ckpt_valid_blocks;
 	if (dent_blocks > left_blocks)
 		return false;
@@ -617,8 +636,10 @@ static inline int utilization(struct f2fs_sb_info *sbi)
  *                     threashold,
  * F2FS_IPU_FSYNC - activated in fsync path only for high performance flash
  *                     storages. IPU will be triggered only if the # of dirty
- *                     pages over min_fsync_blocks.
- * F2FS_IPUT_DISABLE - disable IPU. (=default option)
+ *                     pages over min_fsync_blocks. (=default option)
+ * F2FS_IPU_ASYNC - do IPU given by asynchronous write requests.
+ * F2FS_IPU_NOCACHE - disable IPU bio cache.
+ * F2FS_IPUT_DISABLE - disable IPU. (=default option in LFS mode)
  */
 #define DEF_MIN_IPU_UTIL	70
 #define DEF_MIN_FSYNC_BLOCKS	8
@@ -633,6 +654,7 @@ enum {
 	F2FS_IPU_SSR_UTIL,
 	F2FS_IPU_FSYNC,
 	F2FS_IPU_ASYNC,
+	F2FS_IPU_NOCACHE,
 };
 
 static inline unsigned int curseg_segno(struct f2fs_sb_info *sbi,
@@ -680,21 +702,22 @@ static inline int check_block_count(struct f2fs_sb_info *sbi,
 	bool is_valid  = test_bit_le(0, raw_sit->valid_map) ? true : false;
 	int valid_blocks = 0;
 	int cur_pos = 0, next_pos;
+	unsigned int usable_blks_per_seg = f2fs_usable_blks_in_seg(sbi, segno);
 
 	/* check bitmap with valid block count */
 	do {
 		if (is_valid) {
 			next_pos = find_next_zero_bit_le(&raw_sit->valid_map,
-					sbi->blocks_per_seg,
+					usable_blks_per_seg,
 					cur_pos);
 			valid_blocks += next_pos - cur_pos;
 		} else
 			next_pos = find_next_bit_le(&raw_sit->valid_map,
-					sbi->blocks_per_seg,
+					usable_blks_per_seg,
 					cur_pos);
 		cur_pos = next_pos;
 		is_valid = !is_valid;
-	} while (cur_pos < sbi->blocks_per_seg);
+	} while (cur_pos < usable_blks_per_seg);
 
 	if (unlikely(GET_SIT_VBLOCKS(raw_sit) != valid_blocks)) {
 		f2fs_err(sbi, "Mismatch valid blocks %d vs. %d",
@@ -703,8 +726,13 @@ static inline int check_block_count(struct f2fs_sb_info *sbi,
 		return -EFSCORRUPTED;
 	}
 
+	if (usable_blks_per_seg < sbi->blocks_per_seg)
+		f2fs_bug_on(sbi, find_next_bit_le(&raw_sit->valid_map,
+				sbi->blocks_per_seg,
+				usable_blks_per_seg) != sbi->blocks_per_seg);
+
 	/* check segment usage, and check boundary of a given segment number */
-	if (unlikely(GET_SIT_VBLOCKS(raw_sit) > sbi->blocks_per_seg
+	if (unlikely(GET_SIT_VBLOCKS(raw_sit) > usable_blks_per_seg
 					|| segno > TOTAL_SEGS(sbi) - 1)) {
 		f2fs_err(sbi, "Wrong valid blocks %d or segno %u",
 			 GET_SIT_VBLOCKS(raw_sit), segno);
@@ -763,7 +791,7 @@ static inline unsigned long long get_mtime(struct f2fs_sb_info *sbi,
 						bool base_time)
 {
 	struct sit_info *sit_i = SIT_I(sbi);
-	time64_t diff, now = ktime_get_real_seconds();
+	time64_t diff, now = ktime_get_boottime_seconds();
 
 	if (now >= sit_i->mounted_time)
 		return sit_i->elapsed_time + now - sit_i->mounted_time;
diff --git a/fs/f2fs/shrinker.c b/fs/f2fs/shrinker.c
index 3ceebaa..dd3c3c7 100644
--- a/fs/f2fs/shrinker.c
+++ b/fs/f2fs/shrinker.c
@@ -56,7 +56,7 @@ unsigned long f2fs_shrink_count(struct shrinker *shrink,
 		/* count extent cache entries */
 		count += __count_extent_cache(sbi);
 
-		/* shrink clean nat cache entries */
+		/* count clean nat cache entries */
 		count += __count_nat_entries(sbi);
 
 		/* count free nids cache entries */
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index a9a0832..bc989af 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -137,10 +137,17 @@ enum {
 	Opt_alloc,
 	Opt_fsync,
 	Opt_test_dummy_encryption,
+	Opt_inlinecrypt,
 	Opt_checkpoint_disable,
 	Opt_checkpoint_disable_cap,
 	Opt_checkpoint_disable_cap_perc,
 	Opt_checkpoint_enable,
+	Opt_compress_algorithm,
+	Opt_compress_log_size,
+	Opt_compress_extension,
+	Opt_compress_chksum,
+	Opt_compress_mode,
+	Opt_atgc,
 	Opt_err,
 };
 
@@ -198,11 +205,19 @@ static match_table_t f2fs_tokens = {
 	{Opt_whint, "whint_mode=%s"},
 	{Opt_alloc, "alloc_mode=%s"},
 	{Opt_fsync, "fsync_mode=%s"},
+	{Opt_test_dummy_encryption, "test_dummy_encryption=%s"},
 	{Opt_test_dummy_encryption, "test_dummy_encryption"},
+	{Opt_inlinecrypt, "inlinecrypt"},
 	{Opt_checkpoint_disable, "checkpoint=disable"},
 	{Opt_checkpoint_disable_cap, "checkpoint=disable:%u"},
 	{Opt_checkpoint_disable_cap_perc, "checkpoint=disable:%u%%"},
 	{Opt_checkpoint_enable, "checkpoint=enable"},
+	{Opt_compress_algorithm, "compress_algorithm=%s"},
+	{Opt_compress_log_size, "compress_log_size=%u"},
+	{Opt_compress_extension, "compress_extension=%s"},
+	{Opt_compress_chksum, "compress_chksum"},
+	{Opt_compress_mode, "compress_mode=%s"},
+	{Opt_atgc, "atgc"},
 	{Opt_err, NULL},
 };
 
@@ -340,7 +355,7 @@ static int f2fs_set_qf_name(struct super_block *sb, int qtype,
 	set_opt(sbi, QUOTA);
 	return 0;
 errout:
-	kvfree(qname);
+	kfree(qname);
 	return ret;
 }
 
@@ -352,7 +367,7 @@ static int f2fs_clear_qf_name(struct super_block *sb, int qtype)
 		f2fs_err(sbi, "Cannot change journaled quota options when quota turned on");
 		return -EINVAL;
 	}
-	kvfree(F2FS_OPTION(sbi).s_qf_names[qtype]);
+	kfree(F2FS_OPTION(sbi).s_qf_names[qtype]);
 	F2FS_OPTION(sbi).s_qf_names[qtype] = NULL;
 	return 0;
 }
@@ -403,17 +418,64 @@ static int f2fs_check_quota_options(struct f2fs_sb_info *sbi)
 }
 #endif
 
-static int parse_options(struct super_block *sb, char *options)
+static int f2fs_set_test_dummy_encryption(struct super_block *sb,
+					  const char *opt,
+					  const substring_t *arg,
+					  bool is_remount)
+{
+	struct f2fs_sb_info *sbi = F2FS_SB(sb);
+#ifdef CONFIG_FS_ENCRYPTION
+	int err;
+
+	if (!f2fs_sb_has_encrypt(sbi)) {
+		f2fs_err(sbi, "Encrypt feature is off");
+		return -EINVAL;
+	}
+
+	/*
+	 * This mount option is just for testing, and it's not worthwhile to
+	 * implement the extra complexity (e.g. RCU protection) that would be
+	 * needed to allow it to be set or changed during remount.  We do allow
+	 * it to be specified during remount, but only if there is no change.
+	 */
+	if (is_remount && !F2FS_OPTION(sbi).dummy_enc_policy.policy) {
+		f2fs_warn(sbi, "Can't set test_dummy_encryption on remount");
+		return -EINVAL;
+	}
+	err = fscrypt_set_test_dummy_encryption(
+		sb, arg->from, &F2FS_OPTION(sbi).dummy_enc_policy);
+	if (err) {
+		if (err == -EEXIST)
+			f2fs_warn(sbi,
+				  "Can't change test_dummy_encryption on remount");
+		else if (err == -EINVAL)
+			f2fs_warn(sbi, "Value of option \"%s\" is unrecognized",
+				  opt);
+		else
+			f2fs_warn(sbi, "Error processing option \"%s\" [%d]",
+				  opt, err);
+		return -EINVAL;
+	}
+	f2fs_warn(sbi, "Test dummy encryption mode enabled");
+#else
+	f2fs_warn(sbi, "Test dummy encryption mount option ignored");
+#endif
+	return 0;
+}
+
+static int parse_options(struct super_block *sb, char *options, bool is_remount)
 {
 	struct f2fs_sb_info *sbi = F2FS_SB(sb);
 	substring_t args[MAX_OPT_ARGS];
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	unsigned char (*ext)[F2FS_EXTENSION_LEN];
+	int ext_cnt;
+#endif
 	char *p, *name;
 	int arg = 0;
 	kuid_t uid;
 	kgid_t gid;
-#ifdef CONFIG_QUOTA
 	int ret;
-#endif
 
 	if (!options)
 		return 0;
@@ -435,20 +497,17 @@ static int parse_options(struct super_block *sb, char *options)
 
 			if (!name)
 				return -ENOMEM;
-			if (strlen(name) == 2 && !strncmp(name, "on", 2)) {
-				set_opt(sbi, BG_GC);
-				clear_opt(sbi, FORCE_FG_GC);
-			} else if (strlen(name) == 3 && !strncmp(name, "off", 3)) {
-				clear_opt(sbi, BG_GC);
-				clear_opt(sbi, FORCE_FG_GC);
-			} else if (strlen(name) == 4 && !strncmp(name, "sync", 4)) {
-				set_opt(sbi, BG_GC);
-				set_opt(sbi, FORCE_FG_GC);
+			if (!strcmp(name, "on")) {
+				F2FS_OPTION(sbi).bggc_mode = BGGC_MODE_ON;
+			} else if (!strcmp(name, "off")) {
+				F2FS_OPTION(sbi).bggc_mode = BGGC_MODE_OFF;
+			} else if (!strcmp(name, "sync")) {
+				F2FS_OPTION(sbi).bggc_mode = BGGC_MODE_SYNC;
 			} else {
-				kvfree(name);
+				kfree(name);
 				return -EINVAL;
 			}
-			kvfree(name);
+			kfree(name);
 			break;
 		case Opt_disable_roll_forward:
 			set_opt(sbi, DISABLE_ROLL_FORWARD);
@@ -526,7 +585,8 @@ static int parse_options(struct super_block *sb, char *options)
 		case Opt_active_logs:
 			if (args->from && match_int(args, &arg))
 				return -EINVAL;
-			if (arg != 2 && arg != 4 && arg != NR_CURSEG_TYPE)
+			if (arg != 2 && arg != 4 &&
+				arg != NR_CURSEG_PERSIST_TYPE)
 				return -EINVAL;
 			F2FS_OPTION(sbi).active_logs = arg;
 			break;
@@ -602,22 +662,20 @@ static int parse_options(struct super_block *sb, char *options)
 
 			if (!name)
 				return -ENOMEM;
-			if (strlen(name) == 8 &&
-					!strncmp(name, "adaptive", 8)) {
+			if (!strcmp(name, "adaptive")) {
 				if (f2fs_sb_has_blkzoned(sbi)) {
 					f2fs_warn(sbi, "adaptive mode is not allowed with zoned block device feature");
-					kvfree(name);
+					kfree(name);
 					return -EINVAL;
 				}
-				set_opt_mode(sbi, F2FS_MOUNT_ADAPTIVE);
-			} else if (strlen(name) == 3 &&
-					!strncmp(name, "lfs", 3)) {
-				set_opt_mode(sbi, F2FS_MOUNT_LFS);
+				F2FS_OPTION(sbi).fs_mode = FS_MODE_ADAPTIVE;
+			} else if (!strcmp(name, "lfs")) {
+				F2FS_OPTION(sbi).fs_mode = FS_MODE_LFS;
 			} else {
-				kvfree(name);
+				kfree(name);
 				return -EINVAL;
 			}
-			kvfree(name);
+			kfree(name);
 			break;
 		case Opt_io_size_bits:
 			if (args->from && match_int(args, &arg))
@@ -736,69 +794,61 @@ static int parse_options(struct super_block *sb, char *options)
 			name = match_strdup(&args[0]);
 			if (!name)
 				return -ENOMEM;
-			if (strlen(name) == 10 &&
-					!strncmp(name, "user-based", 10)) {
+			if (!strcmp(name, "user-based")) {
 				F2FS_OPTION(sbi).whint_mode = WHINT_MODE_USER;
-			} else if (strlen(name) == 3 &&
-					!strncmp(name, "off", 3)) {
+			} else if (!strcmp(name, "off")) {
 				F2FS_OPTION(sbi).whint_mode = WHINT_MODE_OFF;
-			} else if (strlen(name) == 8 &&
-					!strncmp(name, "fs-based", 8)) {
+			} else if (!strcmp(name, "fs-based")) {
 				F2FS_OPTION(sbi).whint_mode = WHINT_MODE_FS;
 			} else {
-				kvfree(name);
+				kfree(name);
 				return -EINVAL;
 			}
-			kvfree(name);
+			kfree(name);
 			break;
 		case Opt_alloc:
 			name = match_strdup(&args[0]);
 			if (!name)
 				return -ENOMEM;
 
-			if (strlen(name) == 7 &&
-					!strncmp(name, "default", 7)) {
+			if (!strcmp(name, "default")) {
 				F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_DEFAULT;
-			} else if (strlen(name) == 5 &&
-					!strncmp(name, "reuse", 5)) {
+			} else if (!strcmp(name, "reuse")) {
 				F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_REUSE;
 			} else {
-				kvfree(name);
+				kfree(name);
 				return -EINVAL;
 			}
-			kvfree(name);
+			kfree(name);
 			break;
 		case Opt_fsync:
 			name = match_strdup(&args[0]);
 			if (!name)
 				return -ENOMEM;
-			if (strlen(name) == 5 &&
-					!strncmp(name, "posix", 5)) {
+			if (!strcmp(name, "posix")) {
 				F2FS_OPTION(sbi).fsync_mode = FSYNC_MODE_POSIX;
-			} else if (strlen(name) == 6 &&
-					!strncmp(name, "strict", 6)) {
+			} else if (!strcmp(name, "strict")) {
 				F2FS_OPTION(sbi).fsync_mode = FSYNC_MODE_STRICT;
-			} else if (strlen(name) == 9 &&
-					!strncmp(name, "nobarrier", 9)) {
+			} else if (!strcmp(name, "nobarrier")) {
 				F2FS_OPTION(sbi).fsync_mode =
 							FSYNC_MODE_NOBARRIER;
 			} else {
-				kvfree(name);
+				kfree(name);
 				return -EINVAL;
 			}
-			kvfree(name);
+			kfree(name);
 			break;
 		case Opt_test_dummy_encryption:
-#ifdef CONFIG_FS_ENCRYPTION
-			if (!f2fs_sb_has_encrypt(sbi)) {
-				f2fs_err(sbi, "Encrypt feature is off");
-				return -EINVAL;
-			}
-
-			F2FS_OPTION(sbi).test_dummy_encryption = true;
-			f2fs_info(sbi, "Test dummy encryption mode enabled");
+			ret = f2fs_set_test_dummy_encryption(sb, p, &args[0],
+							     is_remount);
+			if (ret)
+				return ret;
+			break;
+		case Opt_inlinecrypt:
+#ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
+			sb->s_flags |= SB_INLINECRYPT;
 #else
-			f2fs_info(sbi, "Test dummy encryption mount option ignored");
+			f2fs_info(sbi, "inline encryption not supported");
 #endif
 			break;
 		case Opt_checkpoint_disable_cap_perc:
@@ -821,6 +871,101 @@ static int parse_options(struct super_block *sb, char *options)
 		case Opt_checkpoint_enable:
 			clear_opt(sbi, DISABLE_CHECKPOINT);
 			break;
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+		case Opt_compress_algorithm:
+			if (!f2fs_sb_has_compression(sbi)) {
+				f2fs_info(sbi, "Image doesn't support compression");
+				break;
+			}
+			name = match_strdup(&args[0]);
+			if (!name)
+				return -ENOMEM;
+			if (!strcmp(name, "lzo")) {
+				F2FS_OPTION(sbi).compress_algorithm =
+								COMPRESS_LZO;
+			} else if (!strcmp(name, "lz4")) {
+				F2FS_OPTION(sbi).compress_algorithm =
+								COMPRESS_LZ4;
+			} else if (!strcmp(name, "zstd")) {
+				F2FS_OPTION(sbi).compress_algorithm =
+								COMPRESS_ZSTD;
+			} else if (!strcmp(name, "lzo-rle")) {
+				F2FS_OPTION(sbi).compress_algorithm =
+								COMPRESS_LZORLE;
+			} else {
+				kfree(name);
+				return -EINVAL;
+			}
+			kfree(name);
+			break;
+		case Opt_compress_log_size:
+			if (!f2fs_sb_has_compression(sbi)) {
+				f2fs_info(sbi, "Image doesn't support compression");
+				break;
+			}
+			if (args->from && match_int(args, &arg))
+				return -EINVAL;
+			if (arg < MIN_COMPRESS_LOG_SIZE ||
+				arg > MAX_COMPRESS_LOG_SIZE) {
+				f2fs_err(sbi,
+					"Compress cluster log size is out of range");
+				return -EINVAL;
+			}
+			F2FS_OPTION(sbi).compress_log_size = arg;
+			break;
+		case Opt_compress_extension:
+			if (!f2fs_sb_has_compression(sbi)) {
+				f2fs_info(sbi, "Image doesn't support compression");
+				break;
+			}
+			name = match_strdup(&args[0]);
+			if (!name)
+				return -ENOMEM;
+
+			ext = F2FS_OPTION(sbi).extensions;
+			ext_cnt = F2FS_OPTION(sbi).compress_ext_cnt;
+
+			if (strlen(name) >= F2FS_EXTENSION_LEN ||
+				ext_cnt >= COMPRESS_EXT_NUM) {
+				f2fs_err(sbi,
+					"invalid extension length/number");
+				kfree(name);
+				return -EINVAL;
+			}
+
+			strcpy(ext[ext_cnt], name);
+			F2FS_OPTION(sbi).compress_ext_cnt++;
+			kfree(name);
+			break;
+		case Opt_compress_chksum:
+			F2FS_OPTION(sbi).compress_chksum = true;
+			break;
+		case Opt_compress_mode:
+			name = match_strdup(&args[0]);
+			if (!name)
+				return -ENOMEM;
+			if (!strcmp(name, "fs")) {
+				F2FS_OPTION(sbi).compress_mode = COMPR_MODE_FS;
+			} else if (!strcmp(name, "user")) {
+				F2FS_OPTION(sbi).compress_mode = COMPR_MODE_USER;
+			} else {
+				kfree(name);
+				return -EINVAL;
+			}
+			kfree(name);
+			break;
+#else
+		case Opt_compress_algorithm:
+		case Opt_compress_log_size:
+		case Opt_compress_extension:
+		case Opt_compress_chksum:
+		case Opt_compress_mode:
+			f2fs_info(sbi, "compression options not supported");
+			break;
+#endif
+		case Opt_atgc:
+			set_opt(sbi, ATGC);
+			break;
 		default:
 			f2fs_err(sbi, "Unrecognized mount option \"%s\" or missing value",
 				 p);
@@ -847,8 +992,19 @@ static int parse_options(struct super_block *sb, char *options)
 		return -EINVAL;
 	}
 #endif
+	/*
+	 * The BLKZONED feature indicates that the drive was formatted with
+	 * zone alignment optimization. This is optional for host-aware
+	 * devices, but mandatory for host-managed zoned block devices.
+	 */
+#ifndef CONFIG_BLK_DEV_ZONED
+	if (f2fs_sb_has_blkzoned(sbi)) {
+		f2fs_err(sbi, "Zoned block device support is not enabled");
+		return -EINVAL;
+	}
+#endif
 
-	if (F2FS_IO_SIZE_BITS(sbi) && !test_opt(sbi, LFS)) {
+	if (F2FS_IO_SIZE_BITS(sbi) && !f2fs_lfs_mode(sbi)) {
 		f2fs_err(sbi, "Should set mode=lfs with %uKB-sized IO",
 			 F2FS_IO_SIZE_KB(sbi));
 		return -EINVAL;
@@ -878,13 +1034,13 @@ static int parse_options(struct super_block *sb, char *options)
 		}
 	}
 
-	if (test_opt(sbi, DISABLE_CHECKPOINT) && test_opt(sbi, LFS)) {
+	if (test_opt(sbi, DISABLE_CHECKPOINT) && f2fs_lfs_mode(sbi)) {
 		f2fs_err(sbi, "LFS not compatible with checkpoint=disable\n");
 		return -EINVAL;
 	}
 
 	/* Not pass down write hints if the number of active logs is lesser
-	 * than NR_CURSEG_TYPE.
+	 * than NR_CURSEG_PERSIST_TYPE.
 	 */
 	if (F2FS_OPTION(sbi).active_logs != NR_CURSEG_TYPE)
 		F2FS_OPTION(sbi).whint_mode = WHINT_MODE_OFF;
@@ -903,7 +1059,9 @@ static struct inode *f2fs_alloc_inode(struct super_block *sb)
 
 	/* Initialize f2fs-specific inode info */
 	atomic_set(&fi->dirty_pages, 0);
+	atomic_set(&fi->i_compr_blocks, 0);
 	init_rwsem(&fi->i_sem);
+	spin_lock_init(&fi->i_size_lock);
 	INIT_LIST_HEAD(&fi->dirty_list);
 	INIT_LIST_HEAD(&fi->gdirty_list);
 	INIT_LIST_HEAD(&fi->inmem_ilist);
@@ -917,6 +1075,8 @@ static struct inode *f2fs_alloc_inode(struct super_block *sb)
 	/* Will be used by directory only */
 	fi->i_dir_level = F2FS_SB(sb)->dir_level;
 
+	fi->ra_offset = -1;
+
 	return &fi->vfs_inode;
 }
 
@@ -1064,6 +1224,7 @@ static void destroy_device_list(struct f2fs_sb_info *sbi)
 		blkdev_put(FDEV(i).bdev, FMODE_EXCL);
 #ifdef CONFIG_BLK_DEV_ZONED
 		kvfree(FDEV(i).blkz_seq);
+		kfree(FDEV(i).zone_capacity_blocks);
 #endif
 	}
 	kvfree(sbi->devs);
@@ -1139,26 +1300,31 @@ static void f2fs_put_super(struct super_block *sb)
 	f2fs_destroy_node_manager(sbi);
 	f2fs_destroy_segment_manager(sbi);
 
+	f2fs_destroy_post_read_wq(sbi);
+
 	kvfree(sbi->ckpt);
 
 	sb->s_fs_info = NULL;
 	if (sbi->s_chksum_driver)
 		crypto_free_shash(sbi->s_chksum_driver);
-	kvfree(sbi->raw_super);
+	kfree(sbi->raw_super);
 
 	destroy_device_list(sbi);
+	f2fs_destroy_page_array_cache(sbi);
+	f2fs_destroy_xattr_caches(sbi);
 	mempool_destroy(sbi->write_io_dummy);
 #ifdef CONFIG_QUOTA
 	for (i = 0; i < MAXQUOTAS; i++)
-		kvfree(F2FS_OPTION(sbi).s_qf_names[i]);
+		kfree(F2FS_OPTION(sbi).s_qf_names[i]);
 #endif
+	fscrypt_free_dummy_policy(&F2FS_OPTION(sbi).dummy_enc_policy);
 	destroy_percpu_info(sbi);
 	for (i = 0; i < NR_PAGE_TYPE; i++)
 		kvfree(sbi->write_io[i]);
 #ifdef CONFIG_UNICODE
-	utf8_unload(sbi->s_encoding);
+	utf8_unload(sb->s_encoding);
 #endif
-	kvfree(sbi);
+	kfree(sbi);
 }
 
 int f2fs_sync_fs(struct super_block *sb, int sync)
@@ -1181,9 +1347,9 @@ int f2fs_sync_fs(struct super_block *sb, int sync)
 
 		cpc.reason = __get_cp_reason(sbi);
 
-		mutex_lock(&sbi->gc_mutex);
+		down_write(&sbi->gc_lock);
 		err = f2fs_write_checkpoint(sbi, &cpc);
-		mutex_unlock(&sbi->gc_mutex);
+		up_write(&sbi->gc_lock);
 	}
 	f2fs_trace_ios(NULL, 1);
 
@@ -1347,18 +1513,60 @@ static inline void f2fs_show_quota_options(struct seq_file *seq,
 #endif
 }
 
+static inline void f2fs_show_compress_options(struct seq_file *seq,
+							struct super_block *sb)
+{
+	struct f2fs_sb_info *sbi = F2FS_SB(sb);
+	char *algtype = "";
+	int i;
+
+	if (!f2fs_sb_has_compression(sbi))
+		return;
+
+	switch (F2FS_OPTION(sbi).compress_algorithm) {
+	case COMPRESS_LZO:
+		algtype = "lzo";
+		break;
+	case COMPRESS_LZ4:
+		algtype = "lz4";
+		break;
+	case COMPRESS_ZSTD:
+		algtype = "zstd";
+		break;
+	case COMPRESS_LZORLE:
+		algtype = "lzo-rle";
+		break;
+	}
+	seq_printf(seq, ",compress_algorithm=%s", algtype);
+
+	seq_printf(seq, ",compress_log_size=%u",
+			F2FS_OPTION(sbi).compress_log_size);
+
+	for (i = 0; i < F2FS_OPTION(sbi).compress_ext_cnt; i++) {
+		seq_printf(seq, ",compress_extension=%s",
+			F2FS_OPTION(sbi).extensions[i]);
+	}
+
+	if (F2FS_OPTION(sbi).compress_chksum)
+		seq_puts(seq, ",compress_chksum");
+
+	if (F2FS_OPTION(sbi).compress_mode == COMPR_MODE_FS)
+		seq_printf(seq, ",compress_mode=%s", "fs");
+	else if (F2FS_OPTION(sbi).compress_mode == COMPR_MODE_USER)
+		seq_printf(seq, ",compress_mode=%s", "user");
+}
+
 static int f2fs_show_options(struct seq_file *seq, struct dentry *root)
 {
 	struct f2fs_sb_info *sbi = F2FS_SB(root->d_sb);
 
-	if (!f2fs_readonly(sbi->sb) && test_opt(sbi, BG_GC)) {
-		if (test_opt(sbi, FORCE_FG_GC))
-			seq_printf(seq, ",background_gc=%s", "sync");
-		else
-			seq_printf(seq, ",background_gc=%s", "on");
-	} else {
+	if (F2FS_OPTION(sbi).bggc_mode == BGGC_MODE_SYNC)
+		seq_printf(seq, ",background_gc=%s", "sync");
+	else if (F2FS_OPTION(sbi).bggc_mode == BGGC_MODE_ON)
+		seq_printf(seq, ",background_gc=%s", "on");
+	else if (F2FS_OPTION(sbi).bggc_mode == BGGC_MODE_OFF)
 		seq_printf(seq, ",background_gc=%s", "off");
-	}
+
 	if (test_opt(sbi, DISABLE_ROLL_FORWARD))
 		seq_puts(seq, ",disable_roll_forward");
 	if (test_opt(sbi, NORECOVERY))
@@ -1414,9 +1622,9 @@ static int f2fs_show_options(struct seq_file *seq, struct dentry *root)
 		seq_puts(seq, ",data_flush");
 
 	seq_puts(seq, ",mode=");
-	if (test_opt(sbi, ADAPTIVE))
+	if (F2FS_OPTION(sbi).fs_mode == FS_MODE_ADAPTIVE)
 		seq_puts(seq, "adaptive");
-	else if (test_opt(sbi, LFS))
+	else if (F2FS_OPTION(sbi).fs_mode == FS_MODE_LFS)
 		seq_puts(seq, "lfs");
 	seq_printf(seq, ",active_logs=%u", F2FS_OPTION(sbi).active_logs);
 	if (test_opt(sbi, RESERVE_ROOT))
@@ -1452,10 +1660,11 @@ static int f2fs_show_options(struct seq_file *seq, struct dentry *root)
 		seq_printf(seq, ",whint_mode=%s", "user-based");
 	else if (F2FS_OPTION(sbi).whint_mode == WHINT_MODE_FS)
 		seq_printf(seq, ",whint_mode=%s", "fs-based");
-#ifdef CONFIG_FS_ENCRYPTION
-	if (F2FS_OPTION(sbi).test_dummy_encryption)
-		seq_puts(seq, ",test_dummy_encryption");
-#endif
+
+	fscrypt_show_test_dummy_encryption(seq, ',', sbi->sb);
+
+	if (sbi->sb->s_flags & SB_INLINECRYPT)
+		seq_puts(seq, ",inlinecrypt");
 
 	if (F2FS_OPTION(sbi).alloc_mode == ALLOC_MODE_DEFAULT)
 		seq_printf(seq, ",alloc_mode=%s", "default");
@@ -1471,22 +1680,34 @@ static int f2fs_show_options(struct seq_file *seq, struct dentry *root)
 		seq_printf(seq, ",fsync_mode=%s", "strict");
 	else if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_NOBARRIER)
 		seq_printf(seq, ",fsync_mode=%s", "nobarrier");
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	f2fs_show_compress_options(seq, sbi->sb);
+#endif
+
+	if (test_opt(sbi, ATGC))
+		seq_puts(seq, ",atgc");
 	return 0;
 }
 
 static void default_options(struct f2fs_sb_info *sbi)
 {
 	/* init some FS parameters */
-	F2FS_OPTION(sbi).active_logs = NR_CURSEG_TYPE;
+	F2FS_OPTION(sbi).active_logs = NR_CURSEG_PERSIST_TYPE;
 	F2FS_OPTION(sbi).inline_xattr_size = DEFAULT_INLINE_XATTR_ADDRS;
 	F2FS_OPTION(sbi).whint_mode = WHINT_MODE_OFF;
 	F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_DEFAULT;
 	F2FS_OPTION(sbi).fsync_mode = FSYNC_MODE_POSIX;
-	F2FS_OPTION(sbi).test_dummy_encryption = false;
 	F2FS_OPTION(sbi).s_resuid = make_kuid(&init_user_ns, F2FS_DEF_RESUID);
 	F2FS_OPTION(sbi).s_resgid = make_kgid(&init_user_ns, F2FS_DEF_RESGID);
+	F2FS_OPTION(sbi).compress_algorithm = COMPRESS_LZ4;
+	F2FS_OPTION(sbi).compress_log_size = MIN_COMPRESS_LOG_SIZE;
+	F2FS_OPTION(sbi).compress_ext_cnt = 0;
+	F2FS_OPTION(sbi).compress_mode = COMPR_MODE_FS;
+	F2FS_OPTION(sbi).bggc_mode = BGGC_MODE_ON;
 
-	set_opt(sbi, BG_GC);
+	sbi->sb->s_flags &= ~SB_INLINECRYPT;
+
 	set_opt(sbi, INLINE_XATTR);
 	set_opt(sbi, INLINE_DATA);
 	set_opt(sbi, INLINE_DENTRY);
@@ -1498,9 +1719,9 @@ static void default_options(struct f2fs_sb_info *sbi)
 	set_opt(sbi, FLUSH_MERGE);
 	set_opt(sbi, DISCARD);
 	if (f2fs_sb_has_blkzoned(sbi))
-		set_opt_mode(sbi, F2FS_MOUNT_LFS);
+		F2FS_OPTION(sbi).fs_mode = FS_MODE_LFS;
 	else
-		set_opt_mode(sbi, F2FS_MOUNT_ADAPTIVE);
+		F2FS_OPTION(sbi).fs_mode = FS_MODE_ADAPTIVE;
 
 #ifdef CONFIG_F2FS_FS_XATTR
 	set_opt(sbi, XATTR_USER);
@@ -1533,7 +1754,7 @@ static int f2fs_disable_checkpoint(struct f2fs_sb_info *sbi)
 	f2fs_update_time(sbi, DISABLE_TIME);
 
 	while (!f2fs_time_over(sbi, DISABLE_TIME)) {
-		mutex_lock(&sbi->gc_mutex);
+		down_write(&sbi->gc_lock);
 		err = f2fs_gc(sbi, true, false, NULL_SEGNO);
 		if (err == -ENODATA) {
 			err = 0;
@@ -1555,7 +1776,7 @@ static int f2fs_disable_checkpoint(struct f2fs_sb_info *sbi)
 		goto restore_flag;
 	}
 
-	mutex_lock(&sbi->gc_mutex);
+	down_write(&sbi->gc_lock);
 	cpc.reason = CP_PAUSE;
 	set_sbi_flag(sbi, SBI_CP_DISABLED);
 	err = f2fs_write_checkpoint(sbi, &cpc);
@@ -1567,20 +1788,23 @@ static int f2fs_disable_checkpoint(struct f2fs_sb_info *sbi)
 	spin_unlock(&sbi->stat_lock);
 
 out_unlock:
-	mutex_unlock(&sbi->gc_mutex);
+	up_write(&sbi->gc_lock);
 restore_flag:
-	sbi->sb->s_flags = s_flags;	/* Restore MS_RDONLY status */
+	sbi->sb->s_flags = s_flags;	/* Restore SB_RDONLY status */
 	return err;
 }
 
 static void f2fs_enable_checkpoint(struct f2fs_sb_info *sbi)
 {
-	mutex_lock(&sbi->gc_mutex);
+	/* we should flush all the data to keep data consistency */
+	sync_inodes_sb(sbi->sb);
+
+	down_write(&sbi->gc_lock);
 	f2fs_dirty_to_prefree(sbi);
 
 	clear_sbi_flag(sbi, SBI_CP_DISABLED);
 	set_sbi_flag(sbi, SBI_IS_DIRTY);
-	mutex_unlock(&sbi->gc_mutex);
+	up_write(&sbi->gc_lock);
 
 	f2fs_sync_fs(sbi->sb, 1);
 }
@@ -1596,6 +1820,7 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data)
 	bool no_extent_cache = !test_opt(sbi, EXTENT_CACHE);
 	bool disable_checkpoint = test_opt(sbi, DISABLE_CHECKPOINT);
 	bool no_io_align = !F2FS_IO_ALIGNED(sbi);
+	bool no_atgc = !test_opt(sbi, ATGC);
 	bool checkpoint_changed;
 #ifdef CONFIG_QUOTA
 	int i, j;
@@ -1617,7 +1842,7 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data)
 				GFP_KERNEL);
 			if (!org_mount_opt.s_qf_names[i]) {
 				for (j = 0; j < i; j++)
-					kvfree(org_mount_opt.s_qf_names[j]);
+					kfree(org_mount_opt.s_qf_names[j]);
 				return -ENOMEM;
 			}
 		} else {
@@ -1638,7 +1863,7 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data)
 	default_options(sbi);
 
 	/* parse mount options */
-	err = parse_options(sb, data);
+	err = parse_options(sb, data, true);
 	if (err)
 		goto restore_opts;
 	checkpoint_changed =
@@ -1668,6 +1893,13 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data)
 		}
 	}
 #endif
+	/* disallow enable atgc dynamically */
+	if (no_atgc == !!test_opt(sbi, ATGC)) {
+		err = -EINVAL;
+		f2fs_warn(sbi, "switch atgc option is not allowed");
+		goto restore_opts;
+	}
+
 	/* disallow enable/disable extent_cache dynamically */
 	if (no_extent_cache == !!test_opt(sbi, EXTENT_CACHE)) {
 		err = -EINVAL;
@@ -1692,7 +1924,8 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data)
 	 * or if background_gc = off is passed in mount
 	 * option. Also sync the filesystem.
 	 */
-	if ((*flags & SB_RDONLY) || !test_opt(sbi, BG_GC)) {
+	if ((*flags & SB_RDONLY) ||
+			F2FS_OPTION(sbi).bggc_mode == BGGC_MODE_OFF) {
 		if (sbi->gc_thread) {
 			f2fs_stop_gc_thread(sbi);
 			need_restart_gc = true;
@@ -1706,7 +1939,6 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data)
 
 	if (*flags & SB_RDONLY ||
 		F2FS_OPTION(sbi).whint_mode != org_mount_opt.whint_mode) {
-		writeback_inodes_sb(sb, WB_REASON_SYNC);
 		sync_inodes_sb(sb);
 
 		set_sbi_flag(sbi, SBI_IS_DIRTY);
@@ -1741,7 +1973,7 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data)
 #ifdef CONFIG_QUOTA
 	/* Release old quota file names */
 	for (i = 0; i < MAXQUOTAS; i++)
-		kvfree(org_mount_opt.s_qf_names[i]);
+		kfree(org_mount_opt.s_qf_names[i]);
 #endif
 	/* Update the POSIXACL Flag */
 	sb->s_flags = (sb->s_flags & ~SB_POSIXACL) |
@@ -1762,7 +1994,7 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data)
 #ifdef CONFIG_QUOTA
 	F2FS_OPTION(sbi).s_jquota_fmt = org_mount_opt.s_jquota_fmt;
 	for (i = 0; i < MAXQUOTAS; i++) {
-		kvfree(F2FS_OPTION(sbi).s_qf_names[i]);
+		kfree(F2FS_OPTION(sbi).s_qf_names[i]);
 		F2FS_OPTION(sbi).s_qf_names[i] = org_mount_opt.s_qf_names[i];
 	}
 #endif
@@ -1798,7 +2030,8 @@ static ssize_t f2fs_quota_read(struct super_block *sb, int type, char *data,
 		page = read_cache_page_gfp(mapping, blkidx, GFP_NOFS);
 		if (IS_ERR(page)) {
 			if (PTR_ERR(page) == -ENOMEM) {
-				congestion_wait(BLK_RW_ASYNC, HZ/50);
+				congestion_wait(BLK_RW_ASYNC,
+						DEFAULT_IO_TIMEOUT);
 				goto repeat;
 			}
 			set_sbi_flag(F2FS_SB(sb), SBI_QUOTA_NEED_REPAIR);
@@ -1853,7 +2086,8 @@ static ssize_t f2fs_quota_write(struct super_block *sb, int type,
 							&page, &fsdata);
 		if (unlikely(err)) {
 			if (err == -ENOMEM) {
-				congestion_wait(BLK_RW_ASYNC, HZ/50);
+				congestion_wait(BLK_RW_ASYNC,
+						DEFAULT_IO_TIMEOUT);
 				goto retry;
 			}
 			set_sbi_flag(F2FS_SB(sb), SBI_QUOTA_NEED_REPAIR);
@@ -2169,7 +2403,7 @@ static int f2fs_dquot_commit(struct dquot *dquot)
 	struct f2fs_sb_info *sbi = F2FS_SB(dquot->dq_sb);
 	int ret;
 
-	down_read(&sbi->quota_sem);
+	down_read_nested(&sbi->quota_sem, SINGLE_DEPTH_NESTING);
 	ret = dquot_commit(dquot);
 	if (ret < 0)
 		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
@@ -2193,13 +2427,10 @@ static int f2fs_dquot_acquire(struct dquot *dquot)
 static int f2fs_dquot_release(struct dquot *dquot)
 {
 	struct f2fs_sb_info *sbi = F2FS_SB(dquot->dq_sb);
-	int ret;
+	int ret = dquot_release(dquot);
 
-	down_read(&sbi->quota_sem);
-	ret = dquot_release(dquot);
 	if (ret < 0)
 		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
-	up_read(&sbi->quota_sem);
 	return ret;
 }
 
@@ -2207,29 +2438,22 @@ static int f2fs_dquot_mark_dquot_dirty(struct dquot *dquot)
 {
 	struct super_block *sb = dquot->dq_sb;
 	struct f2fs_sb_info *sbi = F2FS_SB(sb);
-	int ret;
-
-	down_read(&sbi->quota_sem);
-	ret = dquot_mark_dquot_dirty(dquot);
+	int ret = dquot_mark_dquot_dirty(dquot);
 
 	/* if we are using journalled quota */
 	if (is_journalled_quota(sbi))
 		set_sbi_flag(sbi, SBI_QUOTA_NEED_FLUSH);
 
-	up_read(&sbi->quota_sem);
 	return ret;
 }
 
 static int f2fs_dquot_commit_info(struct super_block *sb, int type)
 {
 	struct f2fs_sb_info *sbi = F2FS_SB(sb);
-	int ret;
+	int ret = dquot_commit_info(sb, type);
 
-	down_read(&sbi->quota_sem);
-	ret = dquot_commit_info(sb, type);
 	if (ret < 0)
 		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
-	up_read(&sbi->quota_sem);
 	return ret;
 }
 
@@ -2322,18 +2546,53 @@ static int f2fs_set_context(struct inode *inode, const void *ctx, size_t len,
 				ctx, len, fs_data, XATTR_CREATE);
 }
 
-static bool f2fs_dummy_context(struct inode *inode)
+static const union fscrypt_policy *f2fs_get_dummy_policy(struct super_block *sb)
 {
-	return DUMMY_ENCRYPTION_ENABLED(F2FS_I_SB(inode));
+	return F2FS_OPTION(F2FS_SB(sb)).dummy_enc_policy.policy;
+}
+
+static bool f2fs_has_stable_inodes(struct super_block *sb)
+{
+	return true;
+}
+
+static void f2fs_get_ino_and_lblk_bits(struct super_block *sb,
+				       int *ino_bits_ret, int *lblk_bits_ret)
+{
+	*ino_bits_ret = 8 * sizeof(nid_t);
+	*lblk_bits_ret = 8 * sizeof(block_t);
+}
+
+static int f2fs_get_num_devices(struct super_block *sb)
+{
+	struct f2fs_sb_info *sbi = F2FS_SB(sb);
+
+	if (f2fs_is_multi_device(sbi))
+		return sbi->s_ndevs;
+	return 1;
+}
+
+static void f2fs_get_devices(struct super_block *sb,
+			     struct request_queue **devs)
+{
+	struct f2fs_sb_info *sbi = F2FS_SB(sb);
+	int i;
+
+	for (i = 0; i < sbi->s_ndevs; i++)
+		devs[i] = bdev_get_queue(FDEV(i).bdev);
 }
 
 static const struct fscrypt_operations f2fs_cryptops = {
-	.key_prefix	= "f2fs:",
-	.get_context	= f2fs_get_context,
-	.set_context	= f2fs_set_context,
-	.dummy_context	= f2fs_dummy_context,
-	.empty_dir	= f2fs_empty_dir,
-	.max_namelen	= F2FS_NAME_LEN,
+	.key_prefix		= "f2fs:",
+	.get_context		= f2fs_get_context,
+	.set_context		= f2fs_set_context,
+	.get_dummy_policy	= f2fs_get_dummy_policy,
+	.empty_dir		= f2fs_empty_dir,
+	.max_namelen		= F2FS_NAME_LEN,
+	.has_stable_inodes	= f2fs_has_stable_inodes,
+	.get_ino_and_lblk_bits	= f2fs_get_ino_and_lblk_bits,
+	.get_num_devices	= f2fs_get_num_devices,
+	.get_devices		= f2fs_get_devices,
 };
 #endif
 
@@ -2484,10 +2743,8 @@ static inline bool sanity_check_area_boundary(struct f2fs_sb_info *sbi,
 	}
 
 	if (main_end_blkaddr > seg_end_blkaddr) {
-		f2fs_info(sbi, "Wrong MAIN_AREA boundary, start(%u) end(%u) block(%u)",
-			  main_blkaddr,
-			  segment0_blkaddr +
-			  (segment_count << log_blocks_per_seg),
+		f2fs_info(sbi, "Wrong MAIN_AREA boundary, start(%u) end(%llu) block(%u)",
+			  main_blkaddr, seg_end_blkaddr,
 			  segment_count_main << log_blocks_per_seg);
 		return true;
 	} else if (main_end_blkaddr < seg_end_blkaddr) {
@@ -2505,10 +2762,8 @@ static inline bool sanity_check_area_boundary(struct f2fs_sb_info *sbi,
 			err = __f2fs_commit_super(bh, NULL);
 			res = err ? "failed" : "done";
 		}
-		f2fs_info(sbi, "Fix alignment : %s, start(%u) end(%u) block(%u)",
-			  res, main_blkaddr,
-			  segment0_blkaddr +
-			  (segment_count << log_blocks_per_seg),
+		f2fs_info(sbi, "Fix alignment : %s, start(%u) end(%llu) block(%u)",
+			  res, main_blkaddr, seg_end_blkaddr,
 			  segment_count_main << log_blocks_per_seg);
 		if (err)
 			return true;
@@ -2519,7 +2774,7 @@ static inline bool sanity_check_area_boundary(struct f2fs_sb_info *sbi,
 static int sanity_check_raw_super(struct f2fs_sb_info *sbi,
 				struct buffer_head *bh)
 {
-	block_t segment_count, segs_per_sec, secs_per_zone;
+	block_t segment_count, segs_per_sec, secs_per_zone, segment_count_main;
 	block_t total_sections, blocks_per_seg;
 	struct f2fs_super_block *raw_super = (struct f2fs_super_block *)
 					(bh->b_data + F2FS_SUPER_OFFSET);
@@ -2548,13 +2803,6 @@ static int sanity_check_raw_super(struct f2fs_sb_info *sbi,
 		}
 	}
 
-	/* Currently, support only 4KB page cache size */
-	if (F2FS_BLKSIZE != PAGE_SIZE) {
-		f2fs_info(sbi, "Invalid page_cache_size (%lu), supports only 4KB",
-			  PAGE_SIZE);
-		return -EFSCORRUPTED;
-	}
-
 	/* Currently, support only 4KB block size */
 	if (le32_to_cpu(raw_super->log_blocksize) != F2FS_BLKSIZE_BITS) {
 		f2fs_info(sbi, "Invalid log_blocksize (%u), supports only %u",
@@ -2589,6 +2837,7 @@ static int sanity_check_raw_super(struct f2fs_sb_info *sbi,
 	}
 
 	segment_count = le32_to_cpu(raw_super->segment_count);
+	segment_count_main = le32_to_cpu(raw_super->segment_count_main);
 	segs_per_sec = le32_to_cpu(raw_super->segs_per_sec);
 	secs_per_zone = le32_to_cpu(raw_super->secs_per_zone);
 	total_sections = le32_to_cpu(raw_super->section_count);
@@ -2602,14 +2851,19 @@ static int sanity_check_raw_super(struct f2fs_sb_info *sbi,
 		return -EFSCORRUPTED;
 	}
 
-	if (total_sections > segment_count ||
-			total_sections < F2FS_MIN_SEGMENTS ||
+	if (total_sections > segment_count_main || total_sections < 1 ||
 			segs_per_sec > segment_count || !segs_per_sec) {
 		f2fs_info(sbi, "Invalid segment/section count (%u, %u x %u)",
 			  segment_count, total_sections, segs_per_sec);
 		return -EFSCORRUPTED;
 	}
 
+	if (segment_count_main != total_sections * segs_per_sec) {
+		f2fs_info(sbi, "Invalid segment/section count (%u != %u * %u)",
+			  segment_count_main, total_sections, segs_per_sec);
+		return -EFSCORRUPTED;
+	}
+
 	if ((segment_count / segs_per_sec) < total_sections) {
 		f2fs_info(sbi, "Small segment_count (%u < %u * %u)",
 			  segment_count, segs_per_sec, total_sections);
@@ -2622,6 +2876,27 @@ static int sanity_check_raw_super(struct f2fs_sb_info *sbi,
 		return -EFSCORRUPTED;
 	}
 
+	if (RDEV(0).path[0]) {
+		block_t dev_seg_count = le32_to_cpu(RDEV(0).total_segments);
+		int i = 1;
+
+		while (i < MAX_DEVICES && RDEV(i).path[0]) {
+			dev_seg_count += le32_to_cpu(RDEV(i).total_segments);
+			i++;
+		}
+		if (segment_count != dev_seg_count) {
+			f2fs_info(sbi, "Segment count (%u) mismatch with total segments from devices (%u)",
+					segment_count, dev_seg_count);
+			return -EFSCORRUPTED;
+		}
+	} else {
+		if (__F2FS_HAS_FEATURE(raw_super, F2FS_FEATURE_BLKZONED) &&
+					!bdev_is_zoned(sbi->sb->s_bdev)) {
+			f2fs_info(sbi, "Zoned block device path is missing");
+			return -EFSCORRUPTED;
+		}
+	}
+
 	if (secs_per_zone > total_sections || !secs_per_zone) {
 		f2fs_info(sbi, "Wrong secs_per_zone / total_sections (%u, %u)",
 			  secs_per_zone, total_sections);
@@ -2695,7 +2970,7 @@ int f2fs_sanity_check_ckpt(struct f2fs_sb_info *sbi)
 	ovp_segments = le32_to_cpu(ckpt->overprov_segment_count);
 	reserved_segments = le32_to_cpu(ckpt->rsvd_segment_count);
 
-	if (unlikely(fsmeta < F2FS_MIN_SEGMENTS ||
+	if (unlikely(fsmeta < F2FS_MIN_META_SEGMENTS ||
 			ovp_segments == 0 || reserved_segments == 0)) {
 		f2fs_err(sbi, "Wrong layout: check mkfs.f2fs version");
 		return 1;
@@ -2783,7 +3058,7 @@ int f2fs_sanity_check_ckpt(struct f2fs_sb_info *sbi)
 	cp_payload = __cp_payload(sbi);
 	if (cp_pack_start_sum < cp_payload + 1 ||
 		cp_pack_start_sum > blocks_per_seg - 1 -
-			NR_CURSEG_TYPE) {
+			NR_CURSEG_PERSIST_TYPE) {
 		f2fs_err(sbi, "Wrong cp_pack_start_sum: %u",
 			 cp_pack_start_sum);
 		return 1;
@@ -2822,9 +3097,9 @@ static void init_sb_info(struct f2fs_sb_info *sbi)
 	sbi->total_node_count =
 		(le32_to_cpu(raw_super->segment_count_nat) / 2)
 			* sbi->blocks_per_seg * NAT_ENTRY_PER_BLOCK;
-	sbi->root_ino_num = le32_to_cpu(raw_super->root_ino);
-	sbi->node_ino_num = le32_to_cpu(raw_super->node_ino);
-	sbi->meta_ino_num = le32_to_cpu(raw_super->meta_ino);
+	F2FS_ROOT_INO(sbi) = le32_to_cpu(raw_super->root_ino);
+	F2FS_NODE_INO(sbi) = le32_to_cpu(raw_super->node_ino);
+	F2FS_META_INO(sbi) = le32_to_cpu(raw_super->meta_ino);
 	sbi->cur_victim_sec = NULL_SECNO;
 	sbi->next_victim_seg[BG_GC] = NULL_SEGNO;
 	sbi->next_victim_seg[FG_GC] = NULL_SEGNO;
@@ -2856,6 +3131,7 @@ static void init_sb_info(struct f2fs_sb_info *sbi)
 	spin_lock_init(&sbi->dev_lock);
 
 	init_rwsem(&sbi->sb_lock);
+	init_rwsem(&sbi->pin_sem);
 }
 
 static int init_percpu_info(struct f2fs_sb_info *sbi)
@@ -2875,15 +3151,35 @@ static int init_percpu_info(struct f2fs_sb_info *sbi)
 }
 
 #ifdef CONFIG_BLK_DEV_ZONED
+
+struct f2fs_report_zones_args {
+	struct f2fs_dev_info *dev;
+	bool zone_cap_mismatch;
+};
+
+static int f2fs_report_zone_cb(struct blk_zone *zone, unsigned int idx,
+			      void *data)
+{
+	struct f2fs_report_zones_args *rz_args = data;
+
+	if (zone->type == BLK_ZONE_TYPE_CONVENTIONAL)
+		return 0;
+
+	set_bit(idx, rz_args->dev->blkz_seq);
+	rz_args->dev->zone_capacity_blocks[idx] = zone->capacity >>
+						F2FS_LOG_SECTORS_PER_BLOCK;
+	if (zone->len != zone->capacity && !rz_args->zone_cap_mismatch)
+		rz_args->zone_cap_mismatch = true;
+
+	return 0;
+}
+
 static int init_blkz_info(struct f2fs_sb_info *sbi, int devi)
 {
 	struct block_device *bdev = FDEV(devi).bdev;
 	sector_t nr_sectors = bdev->bd_part->nr_sects;
-	sector_t sector = 0;
-	struct blk_zone *zones;
-	unsigned int i, nr_zones;
-	unsigned int n = 0;
-	int err = -EIO;
+	struct f2fs_report_zones_args rep_zone_arg;
+	int ret;
 
 	if (!f2fs_sb_has_blkzoned(sbi))
 		return 0;
@@ -2908,38 +3204,27 @@ static int init_blkz_info(struct f2fs_sb_info *sbi, int devi)
 	if (!FDEV(devi).blkz_seq)
 		return -ENOMEM;
 
-#define F2FS_REPORT_NR_ZONES   4096
-
-	zones = f2fs_kzalloc(sbi,
-			     array_size(F2FS_REPORT_NR_ZONES,
-					sizeof(struct blk_zone)),
-			     GFP_KERNEL);
-	if (!zones)
+	/* Get block zones type and zone-capacity */
+	FDEV(devi).zone_capacity_blocks = f2fs_kzalloc(sbi,
+					FDEV(devi).nr_blkz * sizeof(block_t),
+					GFP_KERNEL);
+	if (!FDEV(devi).zone_capacity_blocks)
 		return -ENOMEM;
 
-	/* Get block zones type */
-	while (zones && sector < nr_sectors) {
+	rep_zone_arg.dev = &FDEV(devi);
+	rep_zone_arg.zone_cap_mismatch = false;
 
-		nr_zones = F2FS_REPORT_NR_ZONES;
-		err = blkdev_report_zones(bdev, sector, zones, &nr_zones);
-		if (err)
-			break;
-		if (!nr_zones) {
-			err = -EIO;
-			break;
-		}
+	ret = blkdev_report_zones(bdev, 0, BLK_ALL_ZONES, f2fs_report_zone_cb,
+				  &rep_zone_arg);
+	if (ret < 0)
+		return ret;
 
-		for (i = 0; i < nr_zones; i++) {
-			if (zones[i].type != BLK_ZONE_TYPE_CONVENTIONAL)
-				set_bit(n, FDEV(devi).blkz_seq);
-			sector += zones[i].len;
-			n++;
-		}
+	if (!rep_zone_arg.zone_cap_mismatch) {
+		kfree(FDEV(devi).zone_capacity_blocks);
+		FDEV(devi).zone_capacity_blocks = NULL;
 	}
 
-	kvfree(zones);
-
-	return err;
+	return 0;
 }
 #endif
 
@@ -2969,6 +3254,7 @@ static int read_raw_super_block(struct f2fs_sb_info *sbi,
 			f2fs_err(sbi, "Unable to read %dth superblock",
 				 block + 1);
 			err = -EIO;
+			*recovery = 1;
 			continue;
 		}
 
@@ -2978,6 +3264,7 @@ static int read_raw_super_block(struct f2fs_sb_info *sbi,
 			f2fs_err(sbi, "Can't find valid F2FS filesystem in %dth superblock",
 				 block + 1);
 			brelse(bh);
+			*recovery = 1;
 			continue;
 		}
 
@@ -2990,13 +3277,9 @@ static int read_raw_super_block(struct f2fs_sb_info *sbi,
 		brelse(bh);
 	}
 
-	/* Fail to read any one of the superblocks*/
-	if (err < 0)
-		*recovery = 1;
-
 	/* No valid superblock */
 	if (!*raw_super)
-		kvfree(super);
+		kfree(super);
 	else
 		err = 0;
 
@@ -3137,17 +3420,11 @@ static int f2fs_scan_devices(struct f2fs_sb_info *sbi)
 static int f2fs_setup_casefold(struct f2fs_sb_info *sbi)
 {
 #ifdef CONFIG_UNICODE
-	if (f2fs_sb_has_casefold(sbi) && !sbi->s_encoding) {
+	if (f2fs_sb_has_casefold(sbi) && !sbi->sb->s_encoding) {
 		const struct f2fs_sb_encodings *encoding_info;
 		struct unicode_map *encoding;
 		__u16 encoding_flags;
 
-		if (f2fs_sb_has_encrypt(sbi)) {
-			f2fs_err(sbi,
-				"Can't mount with encoding and encryption");
-			return -EINVAL;
-		}
-
 		if (f2fs_sb_read_encoding(sbi->raw_super, &encoding_info,
 					  &encoding_flags)) {
 			f2fs_err(sbi,
@@ -3168,9 +3445,8 @@ static int f2fs_setup_casefold(struct f2fs_sb_info *sbi)
 			 "%s-%s with flags 0x%hx", encoding_info->name,
 			 encoding_info->version?:"\b", encoding_flags);
 
-		sbi->s_encoding = encoding;
-		sbi->s_encoding_flags = encoding_flags;
-		sbi->sb->s_d_op = &f2fs_dentry_ops;
+		sbi->sb->s_encoding = encoding;
+		sbi->sb->s_encoding_flags = encoding_flags;
 	}
 #else
 	if (f2fs_sb_has_casefold(sbi)) {
@@ -3248,18 +3524,6 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
 		sbi->s_chksum_seed = f2fs_chksum(sbi, ~0, raw_super->uuid,
 						sizeof(raw_super->uuid));
 
-	/*
-	 * The BLKZONED feature indicates that the drive was formatted with
-	 * zone alignment optimization. This is optional for host-aware
-	 * devices, but mandatory for host-managed zoned block devices.
-	 */
-#ifndef CONFIG_BLK_DEV_ZONED
-	if (f2fs_sb_has_blkzoned(sbi)) {
-		f2fs_err(sbi, "Zoned block device support is not enabled");
-		err = -EOPNOTSUPP;
-		goto free_sb_buf;
-	}
-#endif
 	default_options(sbi);
 	/* parse mount options */
 	options = kstrdup((const char *)data, GFP_KERNEL);
@@ -3268,7 +3532,7 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
 		goto free_sb_buf;
 	}
 
-	err = parse_options(sb, options);
+	err = parse_options(sb, options, false);
 	if (err)
 		goto free_options;
 
@@ -3312,10 +3576,9 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
 
 	/* init f2fs-specific super block info */
 	sbi->valid_super_block = valid_super_block;
-	mutex_init(&sbi->gc_mutex);
+	init_rwsem(&sbi->gc_lock);
 	mutex_init(&sbi->writepages);
-	mutex_init(&sbi->cp_mutex);
-	mutex_init(&sbi->resize_mutex);
+	init_rwsem(&sbi->cp_global_sem);
 	init_rwsem(&sbi->node_write);
 	init_rwsem(&sbi->node_change);
 
@@ -3326,6 +3589,7 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
 	/* init iostat info */
 	spin_lock_init(&sbi->iostat_lock);
 	sbi->iostat_enable = false;
+	sbi->iostat_period_ms = DEFAULT_IOSTAT_PERIOD_MS;
 
 	for (i = 0; i < NR_PAGE_TYPE; i++) {
 		int n = (i == META) ? 1: NR_TEMP_TYPE;
@@ -3347,6 +3611,8 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
 			sbi->write_io[i][j].bio = NULL;
 			spin_lock_init(&sbi->write_io[i][j].io_lock);
 			INIT_LIST_HEAD(&sbi->write_io[i][j].io_list);
+			INIT_LIST_HEAD(&sbi->write_io[i][j].bio_list);
+			init_rwsem(&sbi->write_io[i][j].bio_list_lock);
 		}
 	}
 
@@ -3368,12 +3634,20 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
 		}
 	}
 
+	/* init per sbi slab cache */
+	err = f2fs_init_xattr_caches(sbi);
+	if (err)
+		goto free_io_dummy;
+	err = f2fs_init_page_array_cache(sbi);
+	if (err)
+		goto free_xattr_cache;
+
 	/* get an inode for meta space */
 	sbi->meta_inode = f2fs_iget(sb, F2FS_META_INO(sbi));
 	if (IS_ERR(sbi->meta_inode)) {
 		f2fs_err(sbi, "Failed to read F2FS meta data inode");
 		err = PTR_ERR(sbi->meta_inode);
-		goto free_io_dummy;
+		goto free_page_array_cache;
 	}
 
 	err = f2fs_get_valid_checkpoint(sbi);
@@ -3399,6 +3673,12 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
 		goto free_devices;
 	}
 
+	err = f2fs_init_post_read_wq(sbi);
+	if (err) {
+		f2fs_err(sbi, "Failed to initialize post read workqueue");
+		goto free_devices;
+	}
+
 	sbi->total_valid_node_count =
 				le32_to_cpu(sbi->ckpt->valid_node_count);
 	percpu_counter_set(&sbi->total_valid_inode_count,
@@ -3439,10 +3719,7 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
 	}
 
 	/* For write statistics */
-	if (sb->s_bdev->bd_part)
-		sbi->sectors_written_start =
-			(u64)part_stat_read(sb->s_bdev->bd_part,
-					    sectors[STAT_WRITE]);
+	sbi->sectors_written_start = f2fs_get_sectors_written(sbi);
 
 	/* Read accumulated write IO statistics if exists */
 	seg_i = CURSEG_I(sbi, CURSEG_HOT_NODE);
@@ -3496,7 +3773,7 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
 			f2fs_err(sbi, "Cannot turn on quotas: error %d", err);
 	}
 #endif
-	/* if there are nt orphan nodes free them */
+	/* if there are any orphan inodes, free them */
 	err = f2fs_recover_orphan_inodes(sbi);
 	if (err)
 		goto free_meta;
@@ -3545,7 +3822,20 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
 			goto free_meta;
 		}
 	}
+
+	/*
+	 * If the f2fs is not readonly and fsync data recovery succeeds,
+	 * check zoned block devices' write pointer consistency.
+	 */
+	if (!err && !f2fs_readonly(sb) && f2fs_sb_has_blkzoned(sbi)) {
+		err = f2fs_check_write_pointer(sbi);
+		if (err)
+			goto free_meta;
+	}
+
 reset_checkpoint:
+	f2fs_init_inmem_curseg(sbi);
+
 	/* f2fs_recover_fsync_data() cleared this already */
 	clear_sbi_flag(sbi, SBI_POR_DOING);
 
@@ -3561,7 +3851,7 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
 	 * If filesystem is not mounted as read-only then
 	 * do start the gc_thread.
 	 */
-	if (test_opt(sbi, BG_GC) && !f2fs_readonly(sb)) {
+	if (F2FS_OPTION(sbi).bggc_mode != BGGC_MODE_OFF && !f2fs_readonly(sb)) {
 		/* After POR, we can run background GC thread.*/
 		err = f2fs_start_gc_thread(sbi);
 		if (err)
@@ -3622,6 +3912,7 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
 	f2fs_destroy_node_manager(sbi);
 free_sm:
 	f2fs_destroy_segment_manager(sbi);
+	f2fs_destroy_post_read_wq(sbi);
 free_devices:
 	destroy_device_list(sbi);
 	kvfree(sbi->ckpt);
@@ -3629,6 +3920,10 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
 	make_bad_inode(sbi->meta_inode);
 	iput(sbi->meta_inode);
 	sbi->meta_inode = NULL;
+free_page_array_cache:
+	f2fs_destroy_page_array_cache(sbi);
+free_xattr_cache:
+	f2fs_destroy_xattr_caches(sbi);
 free_io_dummy:
 	mempool_destroy(sbi->write_io_dummy);
 free_percpu:
@@ -3638,20 +3933,22 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
 		kvfree(sbi->write_io[i]);
 
 #ifdef CONFIG_UNICODE
-	utf8_unload(sbi->s_encoding);
+	utf8_unload(sb->s_encoding);
+	sb->s_encoding = NULL;
 #endif
 free_options:
 #ifdef CONFIG_QUOTA
 	for (i = 0; i < MAXQUOTAS; i++)
-		kvfree(F2FS_OPTION(sbi).s_qf_names[i]);
+		kfree(F2FS_OPTION(sbi).s_qf_names[i]);
 #endif
+	fscrypt_free_dummy_policy(&F2FS_OPTION(sbi).dummy_enc_policy);
 	kvfree(options);
 free_sb_buf:
-	kvfree(raw_super);
+	kfree(raw_super);
 free_sbi:
 	if (sbi->s_chksum_driver)
 		crypto_free_shash(sbi->s_chksum_driver);
-	kvfree(sbi);
+	kfree(sbi);
 
 	/* give only one another chance */
 	if (retry_cnt > 0 && skip_recovery) {
@@ -3747,9 +4044,12 @@ static int __init init_f2fs_fs(void)
 	err = f2fs_create_extent_cache();
 	if (err)
 		goto free_checkpoint_caches;
-	err = f2fs_init_sysfs();
+	err = f2fs_create_garbage_collection_cache();
 	if (err)
 		goto free_extent_cache;
+	err = f2fs_init_sysfs();
+	if (err)
+		goto free_garbage_collection_cache;
 	err = register_shrinker(&f2fs_shrinker_info);
 	if (err)
 		goto free_sysfs;
@@ -3760,8 +4060,27 @@ static int __init init_f2fs_fs(void)
 	err = f2fs_init_post_read_processing();
 	if (err)
 		goto free_root_stats;
+	err = f2fs_init_bio_entry_cache();
+	if (err)
+		goto free_post_read;
+	err = f2fs_init_bioset();
+	if (err)
+		goto free_bio_enrty_cache;
+	err = f2fs_init_compress_mempool();
+	if (err)
+		goto free_bioset;
+	err = f2fs_init_compress_cache();
+	if (err)
+		goto free_compress_mempool;
 	return 0;
-
+free_compress_mempool:
+	f2fs_destroy_compress_mempool();
+free_bioset:
+	f2fs_destroy_bioset();
+free_bio_enrty_cache:
+	f2fs_destroy_bio_entry_cache();
+free_post_read:
+	f2fs_destroy_post_read_processing();
 free_root_stats:
 	f2fs_destroy_root_stats();
 	unregister_filesystem(&f2fs_fs_type);
@@ -3769,6 +4088,8 @@ static int __init init_f2fs_fs(void)
 	unregister_shrinker(&f2fs_shrinker_info);
 free_sysfs:
 	f2fs_exit_sysfs();
+free_garbage_collection_cache:
+	f2fs_destroy_garbage_collection_cache();
 free_extent_cache:
 	f2fs_destroy_extent_cache();
 free_checkpoint_caches:
@@ -3785,11 +4106,16 @@ static int __init init_f2fs_fs(void)
 
 static void __exit exit_f2fs_fs(void)
 {
+	f2fs_destroy_compress_cache();
+	f2fs_destroy_compress_mempool();
+	f2fs_destroy_bioset();
+	f2fs_destroy_bio_entry_cache();
 	f2fs_destroy_post_read_processing();
 	f2fs_destroy_root_stats();
 	unregister_filesystem(&f2fs_fs_type);
 	unregister_shrinker(&f2fs_shrinker_info);
 	f2fs_exit_sysfs();
+	f2fs_destroy_garbage_collection_cache();
 	f2fs_destroy_extent_cache();
 	f2fs_destroy_checkpoint_caches();
 	f2fs_destroy_segment_manager_caches();
diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
index 029e693..989a649 100644
--- a/fs/f2fs/sysfs.c
+++ b/fs/f2fs/sysfs.c
@@ -15,6 +15,7 @@
 #include "f2fs.h"
 #include "segment.h"
 #include "gc.h"
+#include <trace/events/f2fs.h>
 
 static struct proc_dir_entry *f2fs_proc_root;
 
@@ -25,6 +26,9 @@ enum {
 	DCC_INFO,	/* struct discard_cmd_control */
 	NM_INFO,	/* struct f2fs_nm_info */
 	F2FS_SBI,	/* struct f2fs_sb_info */
+#ifdef CONFIG_F2FS_STAT_FS
+	STAT_INFO,	/* struct f2fs_stat_info */
+#endif
 #ifdef CONFIG_F2FS_FAULT_INJECTION
 	FAULT_INFO_RATE,	/* struct f2fs_fault_info */
 	FAULT_INFO_TYPE,	/* struct f2fs_fault_info */
@@ -42,6 +46,9 @@ struct f2fs_attr {
 	int id;
 };
 
+static ssize_t f2fs_sbi_show(struct f2fs_attr *a,
+			     struct f2fs_sb_info *sbi, char *buf);
+
 static unsigned char *__struct_ptr(struct f2fs_sb_info *sbi, int struct_type)
 {
 	if (struct_type == GC_THREAD)
@@ -59,14 +66,99 @@ static unsigned char *__struct_ptr(struct f2fs_sb_info *sbi, int struct_type)
 					struct_type == FAULT_INFO_TYPE)
 		return (unsigned char *)&F2FS_OPTION(sbi).fault_info;
 #endif
+#ifdef CONFIG_F2FS_STAT_FS
+	else if (struct_type == STAT_INFO)
+		return (unsigned char *)F2FS_STAT(sbi);
+#endif
 	return NULL;
 }
 
 static ssize_t dirty_segments_show(struct f2fs_attr *a,
 		struct f2fs_sb_info *sbi, char *buf)
 {
-	return snprintf(buf, PAGE_SIZE, "%llu\n",
-		(unsigned long long)(dirty_segments(sbi)));
+	return sprintf(buf, "%llu\n",
+			(unsigned long long)(dirty_segments(sbi)));
+}
+
+static ssize_t free_segments_show(struct f2fs_attr *a,
+		struct f2fs_sb_info *sbi, char *buf)
+{
+	return sprintf(buf, "%llu\n",
+			(unsigned long long)(free_segments(sbi)));
+}
+
+static ssize_t lifetime_write_kbytes_show(struct f2fs_attr *a,
+		struct f2fs_sb_info *sbi, char *buf)
+{
+	struct super_block *sb = sbi->sb;
+
+	if (!sb->s_bdev->bd_part)
+		return sprintf(buf, "0\n");
+
+	return sprintf(buf, "%llu\n",
+			(unsigned long long)(sbi->kbytes_written +
+			((f2fs_get_sectors_written(sbi) -
+				sbi->sectors_written_start) >> 1)));
+}
+
+static ssize_t features_show(struct f2fs_attr *a,
+		struct f2fs_sb_info *sbi, char *buf)
+{
+	struct super_block *sb = sbi->sb;
+	int len = 0;
+
+	if (!sb->s_bdev->bd_part)
+		return sprintf(buf, "0\n");
+
+	if (f2fs_sb_has_encrypt(sbi))
+		len += scnprintf(buf, PAGE_SIZE - len, "%s",
+						"encryption");
+	if (f2fs_sb_has_blkzoned(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "blkzoned");
+	if (f2fs_sb_has_extra_attr(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "extra_attr");
+	if (f2fs_sb_has_project_quota(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "projquota");
+	if (f2fs_sb_has_inode_chksum(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "inode_checksum");
+	if (f2fs_sb_has_flexible_inline_xattr(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "flexible_inline_xattr");
+	if (f2fs_sb_has_quota_ino(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "quota_ino");
+	if (f2fs_sb_has_inode_crtime(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "inode_crtime");
+	if (f2fs_sb_has_lost_found(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "lost_found");
+	if (f2fs_sb_has_verity(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "verity");
+	if (f2fs_sb_has_sb_chksum(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "sb_checksum");
+	if (f2fs_sb_has_casefold(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "casefold");
+	if (f2fs_sb_has_compression(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "compression");
+	len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "pin_file");
+	len += scnprintf(buf + len, PAGE_SIZE - len, "\n");
+	return len;
+}
+
+static ssize_t current_reserved_blocks_show(struct f2fs_attr *a,
+					struct f2fs_sb_info *sbi, char *buf)
+{
+	return sprintf(buf, "%u\n", sbi->current_reserved_blocks);
 }
 
 static ssize_t unusable_show(struct f2fs_attr *a,
@@ -78,90 +170,67 @@ static ssize_t unusable_show(struct f2fs_attr *a,
 		unusable = sbi->unusable_block_count;
 	else
 		unusable = f2fs_get_unusable_blocks(sbi);
-	return snprintf(buf, PAGE_SIZE, "%llu\n",
-		(unsigned long long)unusable);
+	return sprintf(buf, "%llu\n", (unsigned long long)unusable);
 }
 
 static ssize_t encoding_show(struct f2fs_attr *a,
 		struct f2fs_sb_info *sbi, char *buf)
 {
 #ifdef CONFIG_UNICODE
+	struct super_block *sb = sbi->sb;
+
 	if (f2fs_sb_has_casefold(sbi))
 		return snprintf(buf, PAGE_SIZE, "%s (%d.%d.%d)\n",
-			sbi->s_encoding->charset,
-			(sbi->s_encoding->version >> 16) & 0xff,
-			(sbi->s_encoding->version >> 8) & 0xff,
-			sbi->s_encoding->version & 0xff);
+			sb->s_encoding->charset,
+			(sb->s_encoding->version >> 16) & 0xff,
+			(sb->s_encoding->version >> 8) & 0xff,
+			sb->s_encoding->version & 0xff);
 #endif
-	return snprintf(buf, PAGE_SIZE, "(none)");
+	return sprintf(buf, "(none)");
 }
 
-static ssize_t lifetime_write_kbytes_show(struct f2fs_attr *a,
+static ssize_t mounted_time_sec_show(struct f2fs_attr *a,
 		struct f2fs_sb_info *sbi, char *buf)
 {
-	struct super_block *sb = sbi->sb;
+	return sprintf(buf, "%llu", SIT_I(sbi)->mounted_time);
+}
 
-	if (!sb->s_bdev->bd_part)
-		return snprintf(buf, PAGE_SIZE, "0\n");
+#ifdef CONFIG_F2FS_STAT_FS
+static ssize_t moved_blocks_foreground_show(struct f2fs_attr *a,
+				struct f2fs_sb_info *sbi, char *buf)
+{
+	struct f2fs_stat_info *si = F2FS_STAT(sbi);
 
+	return sprintf(buf, "%llu\n",
+		(unsigned long long)(si->tot_blks -
+			(si->bg_data_blks + si->bg_node_blks)));
+}
+
+static ssize_t moved_blocks_background_show(struct f2fs_attr *a,
+				struct f2fs_sb_info *sbi, char *buf)
+{
+	struct f2fs_stat_info *si = F2FS_STAT(sbi);
+
+	return sprintf(buf, "%llu\n",
+		(unsigned long long)(si->bg_data_blks + si->bg_node_blks));
+}
+
+static ssize_t avg_vblocks_show(struct f2fs_attr *a,
+		struct f2fs_sb_info *sbi, char *buf)
+{
+	struct f2fs_stat_info *si = F2FS_STAT(sbi);
+
+	si->dirty_count = dirty_segments(sbi);
+	f2fs_update_sit_info(sbi);
+	return sprintf(buf, "%llu\n", (unsigned long long)(si->avg_vblocks));
+}
+#endif
+
+static ssize_t main_blkaddr_show(struct f2fs_attr *a,
+				struct f2fs_sb_info *sbi, char *buf)
+{
 	return snprintf(buf, PAGE_SIZE, "%llu\n",
-		(unsigned long long)(sbi->kbytes_written +
-			BD_PART_WRITTEN(sbi)));
-}
-
-static ssize_t features_show(struct f2fs_attr *a,
-		struct f2fs_sb_info *sbi, char *buf)
-{
-	struct super_block *sb = sbi->sb;
-	int len = 0;
-
-	if (!sb->s_bdev->bd_part)
-		return snprintf(buf, PAGE_SIZE, "0\n");
-
-	if (f2fs_sb_has_encrypt(sbi))
-		len += snprintf(buf, PAGE_SIZE - len, "%s",
-						"encryption");
-	if (f2fs_sb_has_blkzoned(sbi))
-		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
-				len ? ", " : "", "blkzoned");
-	if (f2fs_sb_has_extra_attr(sbi))
-		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
-				len ? ", " : "", "extra_attr");
-	if (f2fs_sb_has_project_quota(sbi))
-		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
-				len ? ", " : "", "projquota");
-	if (f2fs_sb_has_inode_chksum(sbi))
-		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
-				len ? ", " : "", "inode_checksum");
-	if (f2fs_sb_has_flexible_inline_xattr(sbi))
-		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
-				len ? ", " : "", "flexible_inline_xattr");
-	if (f2fs_sb_has_quota_ino(sbi))
-		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
-				len ? ", " : "", "quota_ino");
-	if (f2fs_sb_has_inode_crtime(sbi))
-		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
-				len ? ", " : "", "inode_crtime");
-	if (f2fs_sb_has_lost_found(sbi))
-		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
-				len ? ", " : "", "lost_found");
-	if (f2fs_sb_has_verity(sbi))
-		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
-				len ? ", " : "", "verity");
-	if (f2fs_sb_has_sb_chksum(sbi))
-		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
-				len ? ", " : "", "sb_checksum");
-	if (f2fs_sb_has_casefold(sbi))
-		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
-				len ? ", " : "", "casefold");
-	len += snprintf(buf + len, PAGE_SIZE - len, "\n");
-	return len;
-}
-
-static ssize_t current_reserved_blocks_show(struct f2fs_attr *a,
-					struct f2fs_sb_info *sbi, char *buf)
-{
-	return snprintf(buf, PAGE_SIZE, "%u\n", sbi->current_reserved_blocks);
+			(unsigned long long)MAIN_BLKADDR(sbi));
 }
 
 static ssize_t f2fs_sbi_show(struct f2fs_attr *a,
@@ -181,23 +250,23 @@ static ssize_t f2fs_sbi_show(struct f2fs_attr *a,
 		int hot_count = sbi->raw_super->hot_ext_count;
 		int len = 0, i;
 
-		len += snprintf(buf + len, PAGE_SIZE - len,
+		len += scnprintf(buf + len, PAGE_SIZE - len,
 						"cold file extension:\n");
 		for (i = 0; i < cold_count; i++)
-			len += snprintf(buf + len, PAGE_SIZE - len, "%s\n",
+			len += scnprintf(buf + len, PAGE_SIZE - len, "%s\n",
 								extlist[i]);
 
-		len += snprintf(buf + len, PAGE_SIZE - len,
+		len += scnprintf(buf + len, PAGE_SIZE - len,
 						"hot file extension:\n");
 		for (i = cold_count; i < cold_count + hot_count; i++)
-			len += snprintf(buf + len, PAGE_SIZE - len, "%s\n",
+			len += scnprintf(buf + len, PAGE_SIZE - len, "%s\n",
 								extlist[i]);
 		return len;
 	}
 
 	ui = (unsigned int *)(ptr + a->offset);
 
-	return snprintf(buf, PAGE_SIZE, "%u\n", *ui);
+	return sprintf(buf, "%u\n", *ui);
 }
 
 static ssize_t __sbi_store(struct f2fs_attr *a,
@@ -291,29 +360,37 @@ static ssize_t __sbi_store(struct f2fs_attr *a,
 		return -EINVAL;
 
 	if (!strcmp(a->attr.name, "gc_urgent")) {
-		if (t >= 1) {
-			sbi->gc_mode = GC_URGENT;
+		if (t == 0) {
+			sbi->gc_mode = GC_NORMAL;
+		} else if (t == 1) {
+			sbi->gc_mode = GC_URGENT_HIGH;
 			if (sbi->gc_thread) {
 				sbi->gc_thread->gc_wake = 1;
 				wake_up_interruptible_all(
 					&sbi->gc_thread->gc_wait_queue_head);
 				wake_up_discard_thread(sbi, true);
 			}
+		} else if (t == 2) {
+			sbi->gc_mode = GC_URGENT_LOW;
+		} else {
+			return -EINVAL;
+		}
+		return count;
+	}
+	if (!strcmp(a->attr.name, "gc_idle")) {
+		if (t == GC_IDLE_CB) {
+			sbi->gc_mode = GC_IDLE_CB;
+		} else if (t == GC_IDLE_GREEDY) {
+			sbi->gc_mode = GC_IDLE_GREEDY;
+		} else if (t == GC_IDLE_AT) {
+			if (!sbi->am.atgc_enabled)
+				return -EINVAL;
+			sbi->gc_mode = GC_AT;
 		} else {
 			sbi->gc_mode = GC_NORMAL;
 		}
 		return count;
 	}
-	if (!strcmp(a->attr.name, "gc_idle")) {
-		if (t == GC_IDLE_CB)
-			sbi->gc_mode = GC_IDLE_CB;
-		else if (t == GC_IDLE_GREEDY)
-			sbi->gc_mode = GC_IDLE_GREEDY;
-		else
-			sbi->gc_mode = GC_NORMAL;
-		return count;
-	}
-
 
 	if (!strcmp(a->attr.name, "iostat_enable")) {
 		sbi->iostat_enable = !!t;
@@ -322,6 +399,15 @@ static ssize_t __sbi_store(struct f2fs_attr *a,
 		return count;
 	}
 
+	if (!strcmp(a->attr.name, "iostat_period_ms")) {
+		if (t < MIN_IOSTAT_PERIOD_MS || t > MAX_IOSTAT_PERIOD_MS)
+			return -EINVAL;
+		spin_lock(&sbi->iostat_lock);
+		sbi->iostat_period_ms = (unsigned int)t;
+		spin_unlock(&sbi->iostat_lock);
+		return count;
+	}
+
 	*ui = (unsigned int)t;
 
 	return count;
@@ -387,6 +473,8 @@ enum feat_id {
 	FEAT_VERITY,
 	FEAT_SB_CHECKSUM,
 	FEAT_CASEFOLD,
+	FEAT_COMPRESSION,
+	FEAT_TEST_DUMMY_ENCRYPTION_V2,
 };
 
 static ssize_t f2fs_feature_show(struct f2fs_attr *a,
@@ -406,7 +494,9 @@ static ssize_t f2fs_feature_show(struct f2fs_attr *a,
 	case FEAT_VERITY:
 	case FEAT_SB_CHECKSUM:
 	case FEAT_CASEFOLD:
-		return snprintf(buf, PAGE_SIZE, "supported\n");
+	case FEAT_COMPRESSION:
+	case FEAT_TEST_DUMMY_ENCRYPTION_V2:
+		return sprintf(buf, "supported\n");
 	}
 	return 0;
 }
@@ -435,6 +525,14 @@ static struct f2fs_attr f2fs_attr_##_name = {			\
 	.id	= _id,						\
 }
 
+#define F2FS_STAT_ATTR(_struct_type, _struct_name, _name, _elname)	\
+static struct f2fs_attr f2fs_attr_##_name = {			\
+	.attr = {.name = __stringify(_name), .mode = 0444 },	\
+	.show = f2fs_sbi_show,					\
+	.struct_type = _struct_type,				\
+	.offset = offsetof(struct _struct_name, _elname),       \
+}
+
 F2FS_RW_ATTR(GC_THREAD, f2fs_gc_kthread, gc_urgent_sleep_time,
 							urgent_sleep_time);
 F2FS_RW_ATTR(GC_THREAD, f2fs_gc_kthread, gc_min_sleep_time, min_sleep_time);
@@ -467,22 +565,39 @@ F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, gc_idle_interval, interval_time[GC_TIME]);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info,
 		umount_discard_timeout, interval_time[UMOUNT_DISCARD_TIMEOUT]);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, iostat_enable, iostat_enable);
+F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, iostat_period_ms, iostat_period_ms);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, readdir_ra, readdir_ra);
+F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, max_io_bytes, max_io_bytes);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, gc_pin_file_thresh, gc_pin_file_threshold);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_super_block, extension_list, extension_list);
 #ifdef CONFIG_F2FS_FAULT_INJECTION
 F2FS_RW_ATTR(FAULT_INFO_RATE, f2fs_fault_info, inject_rate, inject_rate);
 F2FS_RW_ATTR(FAULT_INFO_TYPE, f2fs_fault_info, inject_type, inject_type);
 #endif
+F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, data_io_flag, data_io_flag);
+F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, node_io_flag, node_io_flag);
 F2FS_GENERAL_RO_ATTR(dirty_segments);
+F2FS_GENERAL_RO_ATTR(free_segments);
 F2FS_GENERAL_RO_ATTR(lifetime_write_kbytes);
 F2FS_GENERAL_RO_ATTR(features);
 F2FS_GENERAL_RO_ATTR(current_reserved_blocks);
 F2FS_GENERAL_RO_ATTR(unusable);
 F2FS_GENERAL_RO_ATTR(encoding);
+F2FS_GENERAL_RO_ATTR(mounted_time_sec);
+F2FS_GENERAL_RO_ATTR(main_blkaddr);
+#ifdef CONFIG_F2FS_STAT_FS
+F2FS_STAT_ATTR(STAT_INFO, f2fs_stat_info, cp_foreground_calls, cp_count);
+F2FS_STAT_ATTR(STAT_INFO, f2fs_stat_info, cp_background_calls, bg_cp_count);
+F2FS_STAT_ATTR(STAT_INFO, f2fs_stat_info, gc_foreground_calls, call_count);
+F2FS_STAT_ATTR(STAT_INFO, f2fs_stat_info, gc_background_calls, bg_gc);
+F2FS_GENERAL_RO_ATTR(moved_blocks_background);
+F2FS_GENERAL_RO_ATTR(moved_blocks_foreground);
+F2FS_GENERAL_RO_ATTR(avg_vblocks);
+#endif
 
 #ifdef CONFIG_FS_ENCRYPTION
 F2FS_FEATURE_RO_ATTR(encryption, FEAT_CRYPTO);
+F2FS_FEATURE_RO_ATTR(test_dummy_encryption_v2, FEAT_TEST_DUMMY_ENCRYPTION_V2);
 #endif
 #ifdef CONFIG_BLK_DEV_ZONED
 F2FS_FEATURE_RO_ATTR(block_zoned, FEAT_BLKZONED);
@@ -500,6 +615,9 @@ F2FS_FEATURE_RO_ATTR(verity, FEAT_VERITY);
 #endif
 F2FS_FEATURE_RO_ATTR(sb_checksum, FEAT_SB_CHECKSUM);
 F2FS_FEATURE_RO_ATTR(casefold, FEAT_CASEFOLD);
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+F2FS_FEATURE_RO_ATTR(compression, FEAT_COMPRESSION);
+#endif
 
 #define ATTR_LIST(name) (&f2fs_attr_##name.attr)
 static struct attribute *f2fs_attrs[] = {
@@ -510,6 +628,7 @@ static struct attribute *f2fs_attrs[] = {
 	ATTR_LIST(gc_idle),
 	ATTR_LIST(gc_urgent),
 	ATTR_LIST(reclaim_segments),
+	ATTR_LIST(main_blkaddr),
 	ATTR_LIST(max_small_discards),
 	ATTR_LIST(discard_granularity),
 	ATTR_LIST(batched_trim_sections),
@@ -531,20 +650,35 @@ static struct attribute *f2fs_attrs[] = {
 	ATTR_LIST(gc_idle_interval),
 	ATTR_LIST(umount_discard_timeout),
 	ATTR_LIST(iostat_enable),
+	ATTR_LIST(iostat_period_ms),
 	ATTR_LIST(readdir_ra),
+	ATTR_LIST(max_io_bytes),
 	ATTR_LIST(gc_pin_file_thresh),
 	ATTR_LIST(extension_list),
 #ifdef CONFIG_F2FS_FAULT_INJECTION
 	ATTR_LIST(inject_rate),
 	ATTR_LIST(inject_type),
 #endif
+	ATTR_LIST(data_io_flag),
+	ATTR_LIST(node_io_flag),
 	ATTR_LIST(dirty_segments),
+	ATTR_LIST(free_segments),
 	ATTR_LIST(unusable),
 	ATTR_LIST(lifetime_write_kbytes),
 	ATTR_LIST(features),
 	ATTR_LIST(reserved_blocks),
 	ATTR_LIST(current_reserved_blocks),
 	ATTR_LIST(encoding),
+	ATTR_LIST(mounted_time_sec),
+#ifdef CONFIG_F2FS_STAT_FS
+	ATTR_LIST(cp_foreground_calls),
+	ATTR_LIST(cp_background_calls),
+	ATTR_LIST(gc_foreground_calls),
+	ATTR_LIST(gc_background_calls),
+	ATTR_LIST(moved_blocks_foreground),
+	ATTR_LIST(moved_blocks_background),
+	ATTR_LIST(avg_vblocks),
+#endif
 	NULL,
 };
 ATTRIBUTE_GROUPS(f2fs);
@@ -552,6 +686,7 @@ ATTRIBUTE_GROUPS(f2fs);
 static struct attribute *f2fs_feat_attrs[] = {
 #ifdef CONFIG_FS_ENCRYPTION
 	ATTR_LIST(encryption),
+	ATTR_LIST(test_dummy_encryption_v2),
 #endif
 #ifdef CONFIG_BLK_DEV_ZONED
 	ATTR_LIST(block_zoned),
@@ -569,6 +704,9 @@ static struct attribute *f2fs_feat_attrs[] = {
 #endif
 	ATTR_LIST(sb_checksum),
 	ATTR_LIST(casefold),
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	ATTR_LIST(compression),
+#endif
 	NULL,
 };
 ATTRIBUTE_GROUPS(f2fs_feat);
@@ -589,7 +727,7 @@ static struct kobj_type f2fs_ktype = {
 };
 
 static struct kset f2fs_kset = {
-	.kobj   = {.ktype = &f2fs_ktype},
+	.kobj	= {.ktype = &f2fs_ktype},
 };
 
 static struct kobj_type f2fs_feat_ktype = {
@@ -652,6 +790,33 @@ static int __maybe_unused segment_bits_seq_show(struct seq_file *seq,
 	return 0;
 }
 
+void f2fs_record_iostat(struct f2fs_sb_info *sbi)
+{
+	unsigned long long iostat_diff[NR_IO_TYPE];
+	int i;
+
+	if (time_is_after_jiffies(sbi->iostat_next_period))
+		return;
+
+	/* Need double check under the lock */
+	spin_lock(&sbi->iostat_lock);
+	if (time_is_after_jiffies(sbi->iostat_next_period)) {
+		spin_unlock(&sbi->iostat_lock);
+		return;
+	}
+	sbi->iostat_next_period = jiffies +
+				msecs_to_jiffies(sbi->iostat_period_ms);
+
+	for (i = 0; i < NR_IO_TYPE; i++) {
+		iostat_diff[i] = sbi->rw_iostat[i] -
+				sbi->prev_rw_iostat[i];
+		sbi->prev_rw_iostat[i] = sbi->rw_iostat[i];
+	}
+	spin_unlock(&sbi->iostat_lock);
+
+	trace_f2fs_iostat(sbi, iostat_diff);
+}
+
 static int __maybe_unused iostat_info_seq_show(struct seq_file *seq,
 					       void *offset)
 {
@@ -664,33 +829,58 @@ static int __maybe_unused iostat_info_seq_show(struct seq_file *seq,
 
 	seq_printf(seq, "time:		%-16llu\n", now);
 
-	/* print app IOs */
+	/* print app write IOs */
+	seq_puts(seq, "[WRITE]\n");
 	seq_printf(seq, "app buffered:	%-16llu\n",
-				sbi->write_iostat[APP_BUFFERED_IO]);
+				sbi->rw_iostat[APP_BUFFERED_IO]);
 	seq_printf(seq, "app direct:	%-16llu\n",
-				sbi->write_iostat[APP_DIRECT_IO]);
+				sbi->rw_iostat[APP_DIRECT_IO]);
 	seq_printf(seq, "app mapped:	%-16llu\n",
-				sbi->write_iostat[APP_MAPPED_IO]);
+				sbi->rw_iostat[APP_MAPPED_IO]);
 
-	/* print fs IOs */
+	/* print fs write IOs */
 	seq_printf(seq, "fs data:	%-16llu\n",
-				sbi->write_iostat[FS_DATA_IO]);
+				sbi->rw_iostat[FS_DATA_IO]);
 	seq_printf(seq, "fs node:	%-16llu\n",
-				sbi->write_iostat[FS_NODE_IO]);
+				sbi->rw_iostat[FS_NODE_IO]);
 	seq_printf(seq, "fs meta:	%-16llu\n",
-				sbi->write_iostat[FS_META_IO]);
+				sbi->rw_iostat[FS_META_IO]);
 	seq_printf(seq, "fs gc data:	%-16llu\n",
-				sbi->write_iostat[FS_GC_DATA_IO]);
+				sbi->rw_iostat[FS_GC_DATA_IO]);
 	seq_printf(seq, "fs gc node:	%-16llu\n",
-				sbi->write_iostat[FS_GC_NODE_IO]);
+				sbi->rw_iostat[FS_GC_NODE_IO]);
 	seq_printf(seq, "fs cp data:	%-16llu\n",
-				sbi->write_iostat[FS_CP_DATA_IO]);
+				sbi->rw_iostat[FS_CP_DATA_IO]);
 	seq_printf(seq, "fs cp node:	%-16llu\n",
-				sbi->write_iostat[FS_CP_NODE_IO]);
+				sbi->rw_iostat[FS_CP_NODE_IO]);
 	seq_printf(seq, "fs cp meta:	%-16llu\n",
-				sbi->write_iostat[FS_CP_META_IO]);
+				sbi->rw_iostat[FS_CP_META_IO]);
+
+	/* print app read IOs */
+	seq_puts(seq, "[READ]\n");
+	seq_printf(seq, "app buffered:	%-16llu\n",
+				sbi->rw_iostat[APP_BUFFERED_READ_IO]);
+	seq_printf(seq, "app direct:	%-16llu\n",
+				sbi->rw_iostat[APP_DIRECT_READ_IO]);
+	seq_printf(seq, "app mapped:	%-16llu\n",
+				sbi->rw_iostat[APP_MAPPED_READ_IO]);
+
+	/* print fs read IOs */
+	seq_printf(seq, "fs data:	%-16llu\n",
+				sbi->rw_iostat[FS_DATA_READ_IO]);
+	seq_printf(seq, "fs gc data:	%-16llu\n",
+				sbi->rw_iostat[FS_GDATA_READ_IO]);
+	seq_printf(seq, "fs compr_data:	%-16llu\n",
+				sbi->rw_iostat[FS_CDATA_READ_IO]);
+	seq_printf(seq, "fs node:	%-16llu\n",
+				sbi->rw_iostat[FS_NODE_READ_IO]);
+	seq_printf(seq, "fs meta:	%-16llu\n",
+				sbi->rw_iostat[FS_META_READ_IO]);
+
+	/* print other IOs */
+	seq_puts(seq, "[OTHER]\n");
 	seq_printf(seq, "fs discard:	%-16llu\n",
-				sbi->write_iostat[FS_DISCARD]);
+				sbi->rw_iostat[FS_DISCARD]);
 
 	return 0;
 }
diff --git a/fs/f2fs/trace.h b/fs/f2fs/trace.h
index e8075fc..789f6aa 100644
--- a/fs/f2fs/trace.h
+++ b/fs/f2fs/trace.h
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * f2fs IO tracer
  *
diff --git a/fs/f2fs/verity.c b/fs/f2fs/verity.c
index a401ef7..5d5a2ac 100644
--- a/fs/f2fs/verity.c
+++ b/fs/f2fs/verity.c
@@ -29,6 +29,8 @@
 #include "f2fs.h"
 #include "xattr.h"
 
+#define F2FS_VERIFY_VER	(1)
+
 static inline loff_t f2fs_verity_metadata_pos(const struct inode *inode)
 {
 	return round_up(inode->i_size, 65536);
@@ -152,7 +154,7 @@ static int f2fs_end_enable_verity(struct file *filp, const void *desc,
 	struct inode *inode = file_inode(filp);
 	u64 desc_pos = f2fs_verity_metadata_pos(inode) + merkle_tree_size;
 	struct fsverity_descriptor_location dloc = {
-		.version = cpu_to_le32(1),
+		.version = cpu_to_le32(F2FS_VERIFY_VER),
 		.size = cpu_to_le32(desc_size),
 		.pos = cpu_to_le64(desc_pos),
 	};
@@ -199,7 +201,7 @@ static int f2fs_get_verity_descriptor(struct inode *inode, void *buf,
 			    F2FS_XATTR_NAME_VERITY, &dloc, sizeof(dloc), NULL);
 	if (res < 0 && res != -ERANGE)
 		return res;
-	if (res != sizeof(dloc) || dloc.version != cpu_to_le32(1)) {
+	if (res != sizeof(dloc) || dloc.version != cpu_to_le32(F2FS_VERIFY_VER)) {
 		f2fs_warn(F2FS_I_SB(inode), "unknown verity xattr format");
 		return -EINVAL;
 	}
@@ -222,12 +224,55 @@ static int f2fs_get_verity_descriptor(struct inode *inode, void *buf,
 	return size;
 }
 
-static struct page *f2fs_read_merkle_tree_page(struct inode *inode,
-					       pgoff_t index)
+/*
+ * Prefetch some pages from the file's Merkle tree.
+ *
+ * This is basically a stripped-down version of __do_page_cache_readahead()
+ * which works on pages past i_size.
+ */
+static void f2fs_merkle_tree_readahead(struct address_space *mapping,
+				       pgoff_t start_index, unsigned long count)
 {
+	LIST_HEAD(pages);
+	unsigned int nr_pages = 0;
+	struct page *page;
+	pgoff_t index;
+	struct blk_plug plug;
+
+	for (index = start_index; index < start_index + count; index++) {
+		page = xa_load(&mapping->i_pages, index);
+		if (!page || xa_is_value(page)) {
+			page = __page_cache_alloc(readahead_gfp_mask(mapping));
+			if (!page)
+				break;
+			page->index = index;
+			list_add(&page->lru, &pages);
+			nr_pages++;
+		}
+	}
+	blk_start_plug(&plug);
+	f2fs_mpage_readpages(mapping, &pages, NULL, nr_pages, true);
+	blk_finish_plug(&plug);
+}
+
+static struct page *f2fs_read_merkle_tree_page(struct inode *inode,
+					       pgoff_t index,
+					       unsigned long num_ra_pages)
+{
+	struct page *page;
+
 	index += f2fs_verity_metadata_pos(inode) >> PAGE_SHIFT;
 
-	return read_mapping_page(inode->i_mapping, index, NULL);
+	page = find_get_page_flags(inode->i_mapping, index, FGP_ACCESSED);
+	if (!page || !PageUptodate(page)) {
+		if (page)
+			put_page(page);
+		else if (num_ra_pages > 1)
+			f2fs_merkle_tree_readahead(inode->i_mapping, index,
+						   num_ra_pages);
+		page = read_mapping_page(inode->i_mapping, index, NULL);
+	}
+	return page;
 }
 
 static int f2fs_write_merkle_tree_block(struct inode *inode, const void *buf,
diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
index 296b318..eb892db 100644
--- a/fs/f2fs/xattr.c
+++ b/fs/f2fs/xattr.c
@@ -23,9 +23,28 @@
 #include "xattr.h"
 #include "segment.h"
 
+static void *xattr_alloc(struct f2fs_sb_info *sbi, int size, bool *is_inline)
+{
+	if (likely(size == sbi->inline_xattr_slab_size)) {
+		*is_inline = true;
+		return kmem_cache_zalloc(sbi->inline_xattr_slab, GFP_NOFS);
+	}
+	*is_inline = false;
+	return f2fs_kzalloc(sbi, size, GFP_NOFS);
+}
+
+static void xattr_free(struct f2fs_sb_info *sbi, void *xattr_addr,
+							bool is_inline)
+{
+	if (is_inline)
+		kmem_cache_free(sbi->inline_xattr_slab, xattr_addr);
+	else
+		kfree(xattr_addr);
+}
+
 static int f2fs_xattr_generic_get(const struct xattr_handler *handler,
 		struct dentry *unused, struct inode *inode,
-		const char *name, void *buffer, size_t size)
+		const char *name, void *buffer, size_t size, int flags)
 {
 	struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
 
@@ -80,7 +99,7 @@ static bool f2fs_xattr_trusted_list(struct dentry *dentry)
 
 static int f2fs_xattr_advise_get(const struct xattr_handler *handler,
 		struct dentry *unused, struct inode *inode,
-		const char *name, void *buffer, size_t size)
+		const char *name, void *buffer, size_t size, int flags)
 {
 	if (buffer)
 		*((char *)buffer) = F2FS_I(inode)->i_advise;
@@ -156,8 +175,8 @@ const struct xattr_handler f2fs_xattr_trusted_handler = {
 const struct xattr_handler f2fs_xattr_advise_handler = {
 	.name	= F2FS_SYSTEM_ADVISE_NAME,
 	.flags	= F2FS_XATTR_INDEX_ADVISE,
-	.get    = f2fs_xattr_advise_get,
-	.set    = f2fs_xattr_advise_set,
+	.get	= f2fs_xattr_advise_get,
+	.set	= f2fs_xattr_advise_set,
 };
 
 const struct xattr_handler f2fs_xattr_security_handler = {
@@ -301,7 +320,8 @@ static int read_xattr_block(struct inode *inode, void *txattr_addr)
 static int lookup_all_xattrs(struct inode *inode, struct page *ipage,
 				unsigned int index, unsigned int len,
 				const char *name, struct f2fs_xattr_entry **xe,
-				void **base_addr, int *base_size)
+				void **base_addr, int *base_size,
+				bool *is_inline)
 {
 	void *cur_addr, *txattr_addr, *last_txattr_addr;
 	void *last_addr = NULL;
@@ -312,12 +332,12 @@ static int lookup_all_xattrs(struct inode *inode, struct page *ipage,
 	if (!xnid && !inline_size)
 		return -ENODATA;
 
-	*base_size = XATTR_SIZE(xnid, inode) + XATTR_PADDING_SIZE;
-	txattr_addr = f2fs_kzalloc(F2FS_I_SB(inode), *base_size, GFP_NOFS);
+	*base_size = XATTR_SIZE(inode) + XATTR_PADDING_SIZE;
+	txattr_addr = xattr_alloc(F2FS_I_SB(inode), *base_size, is_inline);
 	if (!txattr_addr)
 		return -ENOMEM;
 
-	last_txattr_addr = (void *)txattr_addr + XATTR_SIZE(xnid, inode);
+	last_txattr_addr = (void *)txattr_addr + XATTR_SIZE(inode);
 
 	/* read from inline xattr */
 	if (inline_size) {
@@ -362,7 +382,7 @@ static int lookup_all_xattrs(struct inode *inode, struct page *ipage,
 	*base_addr = txattr_addr;
 	return 0;
 out:
-	kvfree(txattr_addr);
+	xattr_free(F2FS_I_SB(inode), txattr_addr, *is_inline);
 	return err;
 }
 
@@ -405,7 +425,7 @@ static int read_all_xattrs(struct inode *inode, struct page *ipage,
 	*base_addr = txattr_addr;
 	return 0;
 fail:
-	kvfree(txattr_addr);
+	kfree(txattr_addr);
 	return err;
 }
 
@@ -499,6 +519,7 @@ int f2fs_getxattr(struct inode *inode, int index, const char *name,
 	unsigned int size, len;
 	void *base_addr = NULL;
 	int base_size;
+	bool is_inline;
 
 	if (name == NULL)
 		return -EINVAL;
@@ -509,7 +530,7 @@ int f2fs_getxattr(struct inode *inode, int index, const char *name,
 
 	down_read(&F2FS_I(inode)->i_xattr_sem);
 	error = lookup_all_xattrs(inode, ipage, index, len, name,
-				&entry, &base_addr, &base_size);
+				&entry, &base_addr, &base_size, &is_inline);
 	up_read(&F2FS_I(inode)->i_xattr_sem);
 	if (error)
 		return error;
@@ -532,14 +553,13 @@ int f2fs_getxattr(struct inode *inode, int index, const char *name,
 	}
 	error = size;
 out:
-	kvfree(base_addr);
+	xattr_free(F2FS_I_SB(inode), base_addr, is_inline);
 	return error;
 }
 
 ssize_t f2fs_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size)
 {
 	struct inode *inode = d_inode(dentry);
-	nid_t xnid = F2FS_I(inode)->i_xattr_nid;
 	struct f2fs_xattr_entry *entry;
 	void *base_addr, *last_base_addr;
 	int error = 0;
@@ -551,7 +571,7 @@ ssize_t f2fs_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size)
 	if (error)
 		return error;
 
-	last_base_addr = (void *)base_addr + XATTR_SIZE(xnid, inode);
+	last_base_addr = (void *)base_addr + XATTR_SIZE(inode);
 
 	list_for_each_xattr(entry, base_addr) {
 		const struct xattr_handler *handler =
@@ -590,7 +610,7 @@ ssize_t f2fs_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size)
 	}
 	error = buffer_size - rest;
 cleanup:
-	kvfree(base_addr);
+	kfree(base_addr);
 	return error;
 }
 
@@ -609,7 +629,6 @@ static int __f2fs_setxattr(struct inode *inode, int index,
 {
 	struct f2fs_xattr_entry *here, *last;
 	void *base_addr, *last_base_addr;
-	nid_t xnid = F2FS_I(inode)->i_xattr_nid;
 	int found, newsize;
 	size_t len;
 	__u32 new_hsize;
@@ -633,7 +652,7 @@ static int __f2fs_setxattr(struct inode *inode, int index,
 	if (error)
 		return error;
 
-	last_base_addr = (void *)base_addr + XATTR_SIZE(xnid, inode);
+	last_base_addr = (void *)base_addr + XATTR_SIZE(inode);
 
 	/* find entry with wanted name. */
 	here = __find_xattr(base_addr, last_base_addr, index, len, name);
@@ -731,7 +750,7 @@ static int __f2fs_setxattr(struct inode *inode, int index,
 	if (!error && S_ISDIR(inode->i_mode))
 		set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_CP);
 exit:
-	kvfree(base_addr);
+	kfree(base_addr);
 	return error;
 }
 
@@ -758,14 +777,34 @@ int f2fs_setxattr(struct inode *inode, int index, const char *name,
 	f2fs_balance_fs(sbi, true);
 
 	f2fs_lock_op(sbi);
-	/* protect xattr_ver */
-	down_write(&F2FS_I(inode)->i_sem);
 	down_write(&F2FS_I(inode)->i_xattr_sem);
 	err = __f2fs_setxattr(inode, index, name, value, size, ipage, flags);
 	up_write(&F2FS_I(inode)->i_xattr_sem);
-	up_write(&F2FS_I(inode)->i_sem);
 	f2fs_unlock_op(sbi);
 
 	f2fs_update_time(sbi, REQ_TIME);
 	return err;
 }
+
+int f2fs_init_xattr_caches(struct f2fs_sb_info *sbi)
+{
+	dev_t dev = sbi->sb->s_bdev->bd_dev;
+	char slab_name[32];
+
+	sprintf(slab_name, "f2fs_xattr_entry-%u:%u", MAJOR(dev), MINOR(dev));
+
+	sbi->inline_xattr_slab_size = F2FS_OPTION(sbi).inline_xattr_size *
+					sizeof(__le32) + XATTR_PADDING_SIZE;
+
+	sbi->inline_xattr_slab = f2fs_kmem_cache_create(slab_name,
+					sbi->inline_xattr_slab_size);
+	if (!sbi->inline_xattr_slab)
+		return -ENOMEM;
+
+	return 0;
+}
+
+void f2fs_destroy_xattr_caches(struct f2fs_sb_info *sbi)
+{
+	kmem_cache_destroy(sbi->inline_xattr_slab);
+}
diff --git a/fs/f2fs/xattr.h b/fs/f2fs/xattr.h
index de0c600..416d6527 100644
--- a/fs/f2fs/xattr.h
+++ b/fs/f2fs/xattr.h
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * fs/f2fs/xattr.h
  *
@@ -49,7 +49,7 @@ struct f2fs_xattr_entry {
 	__u8    e_name_index;
 	__u8    e_name_len;
 	__le16  e_value_size;   /* size of attribute value */
-	char    e_name[0];      /* attribute name */
+	char    e_name[];      /* attribute name */
 };
 
 #define XATTR_HDR(ptr)		((struct f2fs_xattr_header *)(ptr))
@@ -73,7 +73,8 @@ struct f2fs_xattr_entry {
 				entry = XATTR_NEXT_ENTRY(entry))
 #define VALID_XATTR_BLOCK_SIZE	(PAGE_SIZE - sizeof(struct node_footer))
 #define XATTR_PADDING_SIZE	(sizeof(__u32))
-#define XATTR_SIZE(x,i)		(((x) ? VALID_XATTR_BLOCK_SIZE : 0) +	\
+#define XATTR_SIZE(i)		((F2FS_I(i)->i_xattr_nid ?		\
+					VALID_XATTR_BLOCK_SIZE : 0) +	\
 						(inline_xattr_size(i)))
 #define MIN_OFFSET(i)		XATTR_ALIGN(inline_xattr_size(i) +	\
 						VALID_XATTR_BLOCK_SIZE)
@@ -130,9 +131,12 @@ extern int f2fs_setxattr(struct inode *, int, const char *,
 extern int f2fs_getxattr(struct inode *, int, const char *, void *,
 						size_t, struct page *);
 extern ssize_t f2fs_listxattr(struct dentry *, char *, size_t);
+extern int f2fs_init_xattr_caches(struct f2fs_sb_info *);
+extern void f2fs_destroy_xattr_caches(struct f2fs_sb_info *);
 #else
 
 #define f2fs_xattr_handlers	NULL
+#define f2fs_listxattr		NULL
 static inline int f2fs_setxattr(struct inode *inode, int index,
 		const char *name, const void *value, size_t size,
 		struct page *page, int flags)
@@ -145,11 +149,8 @@ static inline int f2fs_getxattr(struct inode *inode, int index,
 {
 	return -EOPNOTSUPP;
 }
-static inline ssize_t f2fs_listxattr(struct dentry *dentry, char *buffer,
-		size_t buffer_size)
-{
-	return -EOPNOTSUPP;
-}
+static inline int f2fs_init_xattr_caches(struct f2fs_sb_info *sbi) { return 0; }
+static inline void f2fs_destroy_xattr_caches(struct f2fs_sb_info *sbi) { }
 #endif
 
 #ifdef CONFIG_F2FS_FS_SECURITY
diff --git a/fs/file_table.c b/fs/file_table.c
index 30d55c9..676e620 100644
--- a/fs/file_table.c
+++ b/fs/file_table.c
@@ -198,6 +198,7 @@ static struct file *alloc_file(const struct path *path, int flags,
 	file->f_inode = path->dentry->d_inode;
 	file->f_mapping = path->dentry->d_inode->i_mapping;
 	file->f_wb_err = filemap_sample_wb_err(file->f_mapping);
+	file->f_sb_err = file_sample_sb_err(file);
 	if ((file->f_mode & FMODE_READ) &&
 	     likely(fop->read || fop->read_iter))
 		file->f_mode |= FMODE_CAN_READ;
diff --git a/fs/fuse/Makefile b/fs/fuse/Makefile
index 3e8cebfb..6971454 100644
--- a/fs/fuse/Makefile
+++ b/fs/fuse/Makefile
@@ -8,4 +8,5 @@
 obj-$(CONFIG_VIRTIO_FS) += virtiofs.o
 
 fuse-objs := dev.o dir.o file.o inode.o control.o xattr.o acl.o readdir.o
+fuse-objs += passthrough.o
 virtiofs-y += virtio_fs.o
diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
index 40c262b..ea59c71 100644
--- a/fs/fuse/dev.c
+++ b/fs/fuse/dev.c
@@ -14,6 +14,7 @@
 #include <linux/sched/signal.h>
 #include <linux/uio.h>
 #include <linux/miscdevice.h>
+#include <linux/namei.h>
 #include <linux/pagemap.h>
 #include <linux/file.h>
 #include <linux/slab.h>
@@ -1906,6 +1907,14 @@ static ssize_t fuse_dev_do_write(struct fuse_dev *fud,
 		err = copy_out_args(cs, req->args, nbytes);
 	fuse_copy_finish(cs);
 
+	if (!err && req->in.h.opcode == FUSE_CANONICAL_PATH) {
+		char *path = (char *)req->args->out_args[0].value;
+
+		path[req->args->out_args[0].size - 1] = 0;
+		req->out.h.error =
+			kern_path(path, 0, req->args->canonical_path);
+	}
+
 	spin_lock(&fpq->lock);
 	clear_bit(FR_LOCKED, &req->flags);
 	if (!fpq->connected)
@@ -2225,37 +2234,56 @@ static int fuse_device_clone(struct fuse_conn *fc, struct file *new)
 static long fuse_dev_ioctl(struct file *file, unsigned int cmd,
 			   unsigned long arg)
 {
-	int err = -ENOTTY;
+	int res;
+	int oldfd;
+	struct fuse_dev *fud = NULL;
+	struct fuse_passthrough_out pto;
 
-	if (cmd == FUSE_DEV_IOC_CLONE) {
-		int oldfd;
+	if (_IOC_TYPE(cmd) != FUSE_DEV_IOC_MAGIC)
+		return -EINVAL;
 
-		err = -EFAULT;
-		if (!get_user(oldfd, (__u32 __user *) arg)) {
+	switch (_IOC_NR(cmd)) {
+	case _IOC_NR(FUSE_DEV_IOC_CLONE):
+		res = -EFAULT;
+		if (!get_user(oldfd, (__u32 __user *)arg)) {
 			struct file *old = fget(oldfd);
 
-			err = -EINVAL;
+			res = -EINVAL;
 			if (old) {
-				struct fuse_dev *fud = NULL;
-
 				/*
 				 * Check against file->f_op because CUSE
 				 * uses the same ioctl handler.
 				 */
 				if (old->f_op == file->f_op &&
-				    old->f_cred->user_ns == file->f_cred->user_ns)
+				    old->f_cred->user_ns ==
+					    file->f_cred->user_ns)
 					fud = fuse_get_dev(old);
 
 				if (fud) {
 					mutex_lock(&fuse_mutex);
-					err = fuse_device_clone(fud->fc, file);
+					res = fuse_device_clone(fud->fc, file);
 					mutex_unlock(&fuse_mutex);
 				}
 				fput(old);
 			}
 		}
+		break;
+	case _IOC_NR(FUSE_DEV_IOC_PASSTHROUGH_OPEN):
+		res = -EFAULT;
+		if (!copy_from_user(&pto,
+				    (struct fuse_passthrough_out __user *)arg,
+				    sizeof(pto))) {
+			res = -EINVAL;
+			fud = fuse_get_dev(file);
+			if (fud)
+				res = fuse_passthrough_open(fud, &pto);
+		}
+		break;
+	default:
+		res = -ENOTTY;
+		break;
 	}
-	return err;
+	return res;
 }
 
 const struct file_operations fuse_dev_operations = {
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
index 60378f3..7b39450 100644
--- a/fs/fuse/dir.c
+++ b/fs/fuse/dir.c
@@ -298,6 +298,44 @@ static int fuse_dentry_delete(const struct dentry *dentry)
 	return time_before64(fuse_dentry_time(dentry), get_jiffies_64());
 }
 
+/*
+ * Get the canonical path. Since we must translate to a path, this must be done
+ * in the context of the userspace daemon, however, the userspace daemon cannot
+ * look up paths on its own. Instead, we handle the lookup as a special case
+ * inside of the write request.
+ */
+static void fuse_dentry_canonical_path(const struct path *path,
+				       struct path *canonical_path)
+{
+	struct inode *inode = d_inode(path->dentry);
+	struct fuse_conn *fc = get_fuse_conn(inode);
+	FUSE_ARGS(args);
+	char *path_name;
+	int err;
+
+	path_name = (char *)__get_free_page(GFP_KERNEL);
+	if (!path_name)
+		goto default_path;
+
+	args.opcode = FUSE_CANONICAL_PATH;
+	args.nodeid = get_node_id(inode);
+	args.in_numargs = 0;
+	args.out_numargs = 1;
+	args.out_args[0].size = PATH_MAX;
+	args.out_args[0].value = path_name;
+	args.canonical_path = canonical_path;
+	args.out_argvar = 1;
+
+	err = fuse_simple_request(fc, &args);
+	free_page((unsigned long)path_name);
+	if (err > 0)
+		return;
+default_path:
+	canonical_path->dentry = path->dentry;
+	canonical_path->mnt = path->mnt;
+	path_get(canonical_path);
+}
+
 const struct dentry_operations fuse_dentry_operations = {
 	.d_revalidate	= fuse_dentry_revalidate,
 	.d_delete	= fuse_dentry_delete,
@@ -305,6 +343,7 @@ const struct dentry_operations fuse_dentry_operations = {
 	.d_init		= fuse_dentry_init,
 	.d_release	= fuse_dentry_release,
 #endif
+	.d_canonical_path = fuse_dentry_canonical_path,
 };
 
 const struct dentry_operations fuse_root_dentry_operations = {
@@ -492,6 +531,7 @@ static int fuse_create_open(struct inode *dir, struct dentry *entry,
 	ff->fh = outopen.fh;
 	ff->nodeid = outentry.nodeid;
 	ff->open_flags = outopen.open_flags;
+	fuse_passthrough_setup(fc, ff, &outopen);
 	inode = fuse_iget(dir->i_sb, outentry.nodeid, outentry.generation,
 			  &outentry.attr, entry_attr_timeout(&outentry), 0);
 	if (!inode) {
diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index 1e1aef1..95a22bd 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -151,7 +151,7 @@ int fuse_do_open(struct fuse_conn *fc, u64 nodeid, struct file *file,
 		if (!err) {
 			ff->fh = outarg.fh;
 			ff->open_flags = outarg.open_flags;
-
+			fuse_passthrough_setup(fc, ff, &outarg);
 		} else if (err != -ENOSYS) {
 			fuse_file_free(ff);
 			return err;
@@ -284,6 +284,8 @@ void fuse_release_common(struct file *file, bool isdir)
 	struct fuse_release_args *ra = ff->release_args;
 	int opcode = isdir ? FUSE_RELEASEDIR : FUSE_RELEASE;
 
+	fuse_passthrough_release(&ff->passthrough);
+
 	fuse_prepare_release(fi, ff, file->f_flags, opcode);
 
 	if (ff->flock) {
@@ -1575,7 +1577,9 @@ static ssize_t fuse_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
 	if (fuse_is_bad(file_inode(file)))
 		return -EIO;
 
-	if (!(ff->open_flags & FOPEN_DIRECT_IO))
+	if (ff->passthrough.filp)
+		return fuse_passthrough_read_iter(iocb, to);
+	else if (!(ff->open_flags & FOPEN_DIRECT_IO))
 		return fuse_cache_read_iter(iocb, to);
 	else
 		return fuse_direct_read_iter(iocb, to);
@@ -1589,7 +1593,9 @@ static ssize_t fuse_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
 	if (fuse_is_bad(file_inode(file)))
 		return -EIO;
 
-	if (!(ff->open_flags & FOPEN_DIRECT_IO))
+	if (ff->passthrough.filp)
+		return fuse_passthrough_write_iter(iocb, from);
+	else if (!(ff->open_flags & FOPEN_DIRECT_IO))
 		return fuse_cache_write_iter(iocb, from);
 	else
 		return fuse_direct_write_iter(iocb, from);
@@ -2303,6 +2309,9 @@ static int fuse_file_mmap(struct file *file, struct vm_area_struct *vma)
 {
 	struct fuse_file *ff = file->private_data;
 
+	if (ff->passthrough.filp)
+		return fuse_passthrough_mmap(file, vma);
+
 	if (ff->open_flags & FOPEN_DIRECT_IO) {
 		/* Can't provide the coherency needed for MAP_SHARED */
 		if (vma->vm_flags & VM_MAYSHARE)
diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h
index e368831..3ab13a7 100644
--- a/fs/fuse/fuse_i.h
+++ b/fs/fuse/fuse_i.h
@@ -165,6 +165,17 @@ enum {
 struct fuse_conn;
 struct fuse_release_args;
 
+/**
+ * Reference to lower filesystem file for read/write operations handled in
+ * passthrough mode.
+ * This struct also tracks the credentials to be used for handling read/write
+ * operations.
+ */
+struct fuse_passthrough {
+	struct file *filp;
+	struct cred *cred;
+};
+
 /** FUSE specific file data */
 struct fuse_file {
 	/** Fuse connection for this file */
@@ -210,6 +221,9 @@ struct fuse_file {
 
 	} readdir;
 
+	/** Container for data related to the passthrough functionality */
+	struct fuse_passthrough passthrough;
+
 	/** RB node to be linked on fuse_conn->polled_files */
 	struct rb_node polled_node;
 
@@ -255,6 +269,9 @@ struct fuse_args {
 	struct fuse_in_arg in_args[3];
 	struct fuse_arg out_args[2];
 	void (*end)(struct fuse_conn *fc, struct fuse_args *args, int error);
+
+	/* Path used for completing d_canonical_path */
+	struct path *canonical_path;
 };
 
 struct fuse_args_pages {
@@ -358,10 +375,8 @@ struct fuse_req {
 	/** Used to wake up the task waiting for completion of request*/
 	wait_queue_head_t waitq;
 
-#if IS_ENABLED(CONFIG_VIRTIO_FS)
 	/** virtio-fs's physically contiguous buffer for in and out args */
 	void *argbuf;
-#endif
 };
 
 struct fuse_iqueue;
@@ -722,6 +737,9 @@ struct fuse_conn {
 	/* Do not show mount options */
 	unsigned int no_mount_options:1;
 
+	/** Passthrough mode for read/write IO */
+	unsigned int passthrough:1;
+
 	/** The number of requests waiting for completion */
 	atomic_t num_waiting;
 
@@ -757,6 +775,12 @@ struct fuse_conn {
 
 	/** List of device instances belonging to this connection */
 	struct list_head devices;
+
+	/** IDR for passthrough requests */
+	struct idr passthrough_req;
+
+	/** Protects passthrough_req */
+	spinlock_t passthrough_req_lock;
 };
 
 static inline struct fuse_conn *get_fuse_conn_super(struct super_block *sb)
@@ -1105,4 +1129,14 @@ unsigned int fuse_len_args(unsigned int numargs, struct fuse_arg *args);
 u64 fuse_get_unique(struct fuse_iqueue *fiq);
 void fuse_free_conn(struct fuse_conn *fc);
 
+/* passthrough.c */
+int fuse_passthrough_open(struct fuse_dev *fud,
+			  struct fuse_passthrough_out *pto);
+int fuse_passthrough_setup(struct fuse_conn *fc, struct fuse_file *ff,
+			   struct fuse_open_out *openarg);
+void fuse_passthrough_release(struct fuse_passthrough *passthrough);
+ssize_t fuse_passthrough_read_iter(struct kiocb *iocb, struct iov_iter *to);
+ssize_t fuse_passthrough_write_iter(struct kiocb *iocb, struct iov_iter *from);
+ssize_t fuse_passthrough_mmap(struct file *file, struct vm_area_struct *vma);
+
 #endif /* _FS_FUSE_I_H */
diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
index aa1d5cf..cbe6d01 100644
--- a/fs/fuse/inode.c
+++ b/fs/fuse/inode.c
@@ -622,6 +622,7 @@ void fuse_conn_init(struct fuse_conn *fc, struct user_namespace *user_ns,
 	memset(fc, 0, sizeof(*fc));
 	spin_lock_init(&fc->lock);
 	spin_lock_init(&fc->bg_lock);
+	spin_lock_init(&fc->passthrough_req_lock);
 	init_rwsem(&fc->killsb);
 	refcount_set(&fc->count, 1);
 	atomic_set(&fc->dev_count, 1);
@@ -630,6 +631,7 @@ void fuse_conn_init(struct fuse_conn *fc, struct user_namespace *user_ns,
 	INIT_LIST_HEAD(&fc->bg_queue);
 	INIT_LIST_HEAD(&fc->entry);
 	INIT_LIST_HEAD(&fc->devices);
+	idr_init(&fc->passthrough_req);
 	atomic_set(&fc->num_waiting, 0);
 	fc->max_background = FUSE_DEFAULT_MAX_BACKGROUND;
 	fc->congestion_threshold = FUSE_DEFAULT_CONGESTION_THRESHOLD;
@@ -966,6 +968,12 @@ static void process_init_reply(struct fuse_conn *fc, struct fuse_args *args,
 					min_t(unsigned int, FUSE_MAX_MAX_PAGES,
 					max_t(unsigned int, arg->max_pages, 1));
 			}
+			if (arg->flags & FUSE_PASSTHROUGH) {
+				fc->passthrough = 1;
+				/* Prevent further stacking */
+				fc->sb->s_stack_depth =
+					FILESYSTEM_MAX_STACK_DEPTH;
+			}
 		} else {
 			ra_pages = fc->max_read / PAGE_SIZE;
 			fc->no_lock = 1;
@@ -1003,7 +1011,8 @@ void fuse_send_init(struct fuse_conn *fc)
 		FUSE_WRITEBACK_CACHE | FUSE_NO_OPEN_SUPPORT |
 		FUSE_PARALLEL_DIROPS | FUSE_HANDLE_KILLPRIV | FUSE_POSIX_ACL |
 		FUSE_ABORT_ERROR | FUSE_MAX_PAGES | FUSE_CACHE_SYMLINKS |
-		FUSE_NO_OPENDIR_SUPPORT | FUSE_EXPLICIT_INVAL_DATA;
+		FUSE_NO_OPENDIR_SUPPORT | FUSE_EXPLICIT_INVAL_DATA |
+		FUSE_PASSTHROUGH;
 	ia->args.opcode = FUSE_INIT;
 	ia->args.in_numargs = 1;
 	ia->args.in_args[0].size = sizeof(ia->in);
@@ -1024,9 +1033,21 @@ void fuse_send_init(struct fuse_conn *fc)
 }
 EXPORT_SYMBOL_GPL(fuse_send_init);
 
+static int free_fuse_passthrough(int id, void *p, void *data)
+{
+	struct fuse_passthrough *passthrough = (struct fuse_passthrough *)p;
+
+	fuse_passthrough_release(passthrough);
+	kfree(p);
+
+	return 0;
+}
+
 void fuse_free_conn(struct fuse_conn *fc)
 {
 	WARN_ON(!list_empty(&fc->devices));
+	idr_for_each(&fc->passthrough_req, free_fuse_passthrough, NULL);
+	idr_destroy(&fc->passthrough_req);
 	kfree_rcu(fc, rcu);
 }
 EXPORT_SYMBOL_GPL(fuse_free_conn);
diff --git a/fs/fuse/passthrough.c b/fs/fuse/passthrough.c
new file mode 100644
index 0000000..b5cc3d9
--- /dev/null
+++ b/fs/fuse/passthrough.c
@@ -0,0 +1,295 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include "fuse_i.h"
+
+#include <linux/fuse.h>
+#include <linux/idr.h>
+#include <linux/uio.h>
+
+#define PASSTHROUGH_IOCB_MASK                                                  \
+	(IOCB_APPEND | IOCB_DSYNC | IOCB_HIPRI | IOCB_NOWAIT | IOCB_SYNC)
+
+struct fuse_aio_req {
+	struct kiocb iocb;
+	struct kiocb *iocb_fuse;
+};
+
+static inline void kiocb_clone(struct kiocb *kiocb, struct kiocb *kiocb_src,
+			       struct file *filp)
+{
+	*kiocb = (struct kiocb){
+		.ki_filp = filp,
+		.ki_flags = kiocb_src->ki_flags,
+		.ki_hint = kiocb_src->ki_hint,
+		.ki_ioprio = kiocb_src->ki_ioprio,
+		.ki_pos = kiocb_src->ki_pos,
+	};
+}
+
+static void fuse_copyattr(struct file *dst_file, struct file *src_file)
+{
+	struct inode *dst = file_inode(dst_file);
+	struct inode *src = file_inode(src_file);
+
+	i_size_write(dst, i_size_read(src));
+}
+
+static void fuse_aio_cleanup_handler(struct fuse_aio_req *aio_req)
+{
+	struct kiocb *iocb = &aio_req->iocb;
+	struct kiocb *iocb_fuse = aio_req->iocb_fuse;
+
+	if (iocb->ki_flags & IOCB_WRITE) {
+		__sb_writers_acquired(file_inode(iocb->ki_filp)->i_sb,
+				      SB_FREEZE_WRITE);
+		file_end_write(iocb->ki_filp);
+		fuse_copyattr(iocb_fuse->ki_filp, iocb->ki_filp);
+	}
+
+	iocb_fuse->ki_pos = iocb->ki_pos;
+	kfree(aio_req);
+}
+
+static void fuse_aio_rw_complete(struct kiocb *iocb, long res, long res2)
+{
+	struct fuse_aio_req *aio_req =
+		container_of(iocb, struct fuse_aio_req, iocb);
+	struct kiocb *iocb_fuse = aio_req->iocb_fuse;
+
+	fuse_aio_cleanup_handler(aio_req);
+	iocb_fuse->ki_complete(iocb_fuse, res, res2);
+}
+
+ssize_t fuse_passthrough_read_iter(struct kiocb *iocb_fuse,
+				   struct iov_iter *iter)
+{
+	ssize_t ret;
+	const struct cred *old_cred;
+	struct file *fuse_filp = iocb_fuse->ki_filp;
+	struct fuse_file *ff = fuse_filp->private_data;
+	struct file *passthrough_filp = ff->passthrough.filp;
+
+	if (!iov_iter_count(iter))
+		return 0;
+
+	old_cred = override_creds(ff->passthrough.cred);
+	if (is_sync_kiocb(iocb_fuse)) {
+		ret = vfs_iter_read(passthrough_filp, iter, &iocb_fuse->ki_pos,
+				    iocb_to_rw_flags(iocb_fuse->ki_flags,
+						     PASSTHROUGH_IOCB_MASK));
+	} else {
+		struct fuse_aio_req *aio_req;
+
+		aio_req = kmalloc(sizeof(struct fuse_aio_req), GFP_KERNEL);
+		if (!aio_req) {
+			ret = -ENOMEM;
+			goto out;
+		}
+
+		aio_req->iocb_fuse = iocb_fuse;
+		kiocb_clone(&aio_req->iocb, iocb_fuse, passthrough_filp);
+		aio_req->iocb.ki_complete = fuse_aio_rw_complete;
+		ret = call_read_iter(passthrough_filp, &aio_req->iocb, iter);
+		if (ret != -EIOCBQUEUED)
+			fuse_aio_cleanup_handler(aio_req);
+	}
+out:
+	revert_creds(old_cred);
+
+	return ret;
+}
+
+ssize_t fuse_passthrough_write_iter(struct kiocb *iocb_fuse,
+				    struct iov_iter *iter)
+{
+	ssize_t ret;
+	const struct cred *old_cred;
+	struct file *fuse_filp = iocb_fuse->ki_filp;
+	struct fuse_file *ff = fuse_filp->private_data;
+	struct inode *fuse_inode = file_inode(fuse_filp);
+	struct file *passthrough_filp = ff->passthrough.filp;
+	struct inode *passthrough_inode = file_inode(passthrough_filp);
+
+	if (!iov_iter_count(iter))
+		return 0;
+
+	inode_lock(fuse_inode);
+
+	old_cred = override_creds(ff->passthrough.cred);
+	if (is_sync_kiocb(iocb_fuse)) {
+		file_start_write(passthrough_filp);
+		ret = vfs_iter_write(passthrough_filp, iter, &iocb_fuse->ki_pos,
+				     iocb_to_rw_flags(iocb_fuse->ki_flags,
+						      PASSTHROUGH_IOCB_MASK));
+		file_end_write(passthrough_filp);
+		if (ret > 0)
+			fuse_copyattr(fuse_filp, passthrough_filp);
+	} else {
+		struct fuse_aio_req *aio_req;
+
+		aio_req = kmalloc(sizeof(struct fuse_aio_req), GFP_KERNEL);
+		if (!aio_req) {
+			ret = -ENOMEM;
+			goto out;
+		}
+
+		file_start_write(passthrough_filp);
+		__sb_writers_release(passthrough_inode->i_sb, SB_FREEZE_WRITE);
+
+		aio_req->iocb_fuse = iocb_fuse;
+		kiocb_clone(&aio_req->iocb, iocb_fuse, passthrough_filp);
+		aio_req->iocb.ki_complete = fuse_aio_rw_complete;
+		ret = call_write_iter(passthrough_filp, &aio_req->iocb, iter);
+		if (ret != -EIOCBQUEUED)
+			fuse_aio_cleanup_handler(aio_req);
+	}
+out:
+	revert_creds(old_cred);
+	inode_unlock(fuse_inode);
+
+	return ret;
+}
+
+ssize_t fuse_passthrough_mmap(struct file *file, struct vm_area_struct *vma)
+{
+	int ret;
+	const struct cred *old_cred;
+	struct fuse_file *ff = file->private_data;
+	struct inode *fuse_inode = file_inode(file);
+	struct file *passthrough_filp = ff->passthrough.filp;
+	struct inode *passthrough_inode = file_inode(passthrough_filp);
+
+	if (!passthrough_filp->f_op->mmap)
+		return -ENODEV;
+
+	if (WARN_ON(file != vma->vm_file))
+		return -EIO;
+
+	vma->vm_file = get_file(passthrough_filp);
+
+	old_cred = override_creds(ff->passthrough.cred);
+	ret = call_mmap(vma->vm_file, vma);
+	revert_creds(old_cred);
+
+	if (ret)
+		fput(passthrough_filp);
+	else
+		fput(file);
+
+	if (file->f_flags & O_NOATIME)
+		return ret;
+
+	if ((!timespec64_equal(&fuse_inode->i_mtime,
+			       &passthrough_inode->i_mtime) ||
+	     !timespec64_equal(&fuse_inode->i_ctime,
+			       &passthrough_inode->i_ctime))) {
+		fuse_inode->i_mtime = passthrough_inode->i_mtime;
+		fuse_inode->i_ctime = passthrough_inode->i_ctime;
+	}
+	touch_atime(&file->f_path);
+
+	return ret;
+}
+
+int fuse_passthrough_open(struct fuse_dev *fud,
+			  struct fuse_passthrough_out *pto)
+{
+	int res;
+	struct file *passthrough_filp;
+	struct fuse_conn *fc = fud->fc;
+	struct inode *passthrough_inode;
+	struct super_block *passthrough_sb;
+	struct fuse_passthrough *passthrough;
+
+	if (!fc->passthrough)
+		return -EPERM;
+
+	/* This field is reserved for future implementation */
+	if (pto->len != 0)
+		return -EINVAL;
+
+	passthrough_filp = fget(pto->fd);
+	if (!passthrough_filp) {
+		pr_err("FUSE: invalid file descriptor for passthrough.\n");
+		return -EBADF;
+	}
+
+	if (!passthrough_filp->f_op->read_iter ||
+	    !passthrough_filp->f_op->write_iter) {
+		pr_err("FUSE: passthrough file misses file operations.\n");
+		res = -EBADF;
+		goto err_free_file;
+	}
+
+	passthrough_inode = file_inode(passthrough_filp);
+	passthrough_sb = passthrough_inode->i_sb;
+	if (passthrough_sb->s_stack_depth >= FILESYSTEM_MAX_STACK_DEPTH) {
+		pr_err("FUSE: fs stacking depth exceeded for passthrough\n");
+		res = -EINVAL;
+		goto err_free_file;
+	}
+
+	passthrough = kmalloc(sizeof(struct fuse_passthrough), GFP_KERNEL);
+	if (!passthrough) {
+		res = -ENOMEM;
+		goto err_free_file;
+	}
+
+	passthrough->filp = passthrough_filp;
+	passthrough->cred = prepare_creds();
+
+	idr_preload(GFP_KERNEL);
+	spin_lock(&fc->passthrough_req_lock);
+	res = idr_alloc(&fc->passthrough_req, passthrough, 1, 0, GFP_ATOMIC);
+	spin_unlock(&fc->passthrough_req_lock);
+	idr_preload_end();
+
+	if (res > 0)
+		return res;
+
+	fuse_passthrough_release(passthrough);
+	kfree(passthrough);
+
+err_free_file:
+	fput(passthrough_filp);
+
+	return res;
+}
+
+int fuse_passthrough_setup(struct fuse_conn *fc, struct fuse_file *ff,
+			   struct fuse_open_out *openarg)
+{
+	struct fuse_passthrough *passthrough;
+	int passthrough_fh = openarg->passthrough_fh;
+
+	if (!fc->passthrough)
+		return -EPERM;
+
+	/* Default case, passthrough is not requested */
+	if (passthrough_fh <= 0)
+		return -EINVAL;
+
+	spin_lock(&fc->passthrough_req_lock);
+	passthrough = idr_remove(&fc->passthrough_req, passthrough_fh);
+	spin_unlock(&fc->passthrough_req_lock);
+
+	if (!passthrough)
+		return -EINVAL;
+
+	ff->passthrough = *passthrough;
+	kfree(passthrough);
+
+	return 0;
+}
+
+void fuse_passthrough_release(struct fuse_passthrough *passthrough)
+{
+	if (passthrough->filp) {
+		fput(passthrough->filp);
+		passthrough->filp = NULL;
+	}
+	if (passthrough->cred) {
+		put_cred(passthrough->cred);
+		passthrough->cred = NULL;
+	}
+}
diff --git a/fs/fuse/xattr.c b/fs/fuse/xattr.c
index 28fed52..046b017 100644
--- a/fs/fuse/xattr.c
+++ b/fs/fuse/xattr.c
@@ -179,7 +179,7 @@ int fuse_removexattr(struct inode *inode, const char *name)
 
 static int fuse_xattr_get(const struct xattr_handler *handler,
 			 struct dentry *dentry, struct inode *inode,
-			 const char *name, void *value, size_t size)
+			 const char *name, void *value, size_t size, int flags)
 {
 	if (fuse_is_bad(inode))
 		return -EIO;
@@ -208,7 +208,7 @@ static bool no_xattr_list(struct dentry *dentry)
 
 static int no_xattr_get(const struct xattr_handler *handler,
 			struct dentry *dentry, struct inode *inode,
-			const char *name, void *value, size_t size)
+			const char *name, void *value, size_t size, int flags)
 {
 	return -EOPNOTSUPP;
 }
diff --git a/fs/gfs2/xattr.c b/fs/gfs2/xattr.c
index bbe593d..a9db067 100644
--- a/fs/gfs2/xattr.c
+++ b/fs/gfs2/xattr.c
@@ -588,7 +588,8 @@ static int __gfs2_xattr_get(struct inode *inode, const char *name,
 
 static int gfs2_xattr_get(const struct xattr_handler *handler,
 			  struct dentry *unused, struct inode *inode,
-			  const char *name, void *buffer, size_t size)
+			  const char *name, void *buffer, size_t size,
+			  int flags)
 {
 	struct gfs2_inode *ip = GFS2_I(inode);
 	struct gfs2_holder gh;
diff --git a/fs/hfs/attr.c b/fs/hfs/attr.c
index 74fa6264..08222a9 100644
--- a/fs/hfs/attr.c
+++ b/fs/hfs/attr.c
@@ -115,7 +115,7 @@ static ssize_t __hfs_getxattr(struct inode *inode, enum hfs_xattr_type type,
 
 static int hfs_xattr_get(const struct xattr_handler *handler,
 			 struct dentry *unused, struct inode *inode,
-			 const char *name, void *value, size_t size)
+			 const char *name, void *value, size_t size, int flags)
 {
 	return __hfs_getxattr(inode, handler->flags, value, size);
 }
diff --git a/fs/hfsplus/xattr.c b/fs/hfsplus/xattr.c
index bb0b27d8..381c2aa 100644
--- a/fs/hfsplus/xattr.c
+++ b/fs/hfsplus/xattr.c
@@ -839,7 +839,8 @@ static int hfsplus_removexattr(struct inode *inode, const char *name)
 
 static int hfsplus_osx_getxattr(const struct xattr_handler *handler,
 				struct dentry *unused, struct inode *inode,
-				const char *name, void *buffer, size_t size)
+				const char *name, void *buffer, size_t size,
+				int flags)
 {
 	/*
 	 * Don't allow retrieving properly prefixed attributes
diff --git a/fs/hfsplus/xattr_security.c b/fs/hfsplus/xattr_security.c
index cfbe6a3..43e28b3 100644
--- a/fs/hfsplus/xattr_security.c
+++ b/fs/hfsplus/xattr_security.c
@@ -15,7 +15,8 @@
 
 static int hfsplus_security_getxattr(const struct xattr_handler *handler,
 				     struct dentry *unused, struct inode *inode,
-				     const char *name, void *buffer, size_t size)
+				     const char *name, void *buffer,
+				     size_t size, int flags)
 {
 	return hfsplus_getxattr(inode, name, buffer, size,
 				XATTR_SECURITY_PREFIX,
diff --git a/fs/hfsplus/xattr_trusted.c b/fs/hfsplus/xattr_trusted.c
index fbad91e..54d9263 100644
--- a/fs/hfsplus/xattr_trusted.c
+++ b/fs/hfsplus/xattr_trusted.c
@@ -14,7 +14,8 @@
 
 static int hfsplus_trusted_getxattr(const struct xattr_handler *handler,
 				    struct dentry *unused, struct inode *inode,
-				    const char *name, void *buffer, size_t size)
+				    const char *name, void *buffer,
+				    size_t size, int flags)
 {
 	return hfsplus_getxattr(inode, name, buffer, size,
 				XATTR_TRUSTED_PREFIX,
diff --git a/fs/hfsplus/xattr_user.c b/fs/hfsplus/xattr_user.c
index 74d19fa..4d2b1ff 100644
--- a/fs/hfsplus/xattr_user.c
+++ b/fs/hfsplus/xattr_user.c
@@ -14,7 +14,8 @@
 
 static int hfsplus_user_getxattr(const struct xattr_handler *handler,
 				 struct dentry *unused, struct inode *inode,
-				 const char *name, void *buffer, size_t size)
+				 const char *name, void *buffer, size_t size,
+				 int flags)
 {
 
 	return hfsplus_getxattr(inode, name, buffer, size,
diff --git a/fs/incfs/Kconfig b/fs/incfs/Kconfig
new file mode 100644
index 0000000..8f7d522
--- /dev/null
+++ b/fs/incfs/Kconfig
@@ -0,0 +1,14 @@
+config INCREMENTAL_FS
+	tristate "Incremental file system support"
+	depends on BLOCK
+	select DECOMPRESS_LZ4
+	select DECOMPRESS_ZSTD
+	select CRYPTO_ZSTD
+	select CRYPTO_SHA256
+	help
+	  Incremental FS is a read-only virtual file system that facilitates execution
+	  of programs while their binaries are still being lazily downloaded over the
+	  network, USB or pigeon post.
+
+	  To compile this file system support as a module, choose M here: the
+	  module will be called incrementalfs.
diff --git a/fs/incfs/Makefile b/fs/incfs/Makefile
new file mode 100644
index 0000000..0c3f6d3
--- /dev/null
+++ b/fs/incfs/Makefile
@@ -0,0 +1,10 @@
+# SPDX-License-Identifier: GPL-2.0
+obj-$(CONFIG_INCREMENTAL_FS)	+= incrementalfs.o
+
+incrementalfs-y := \
+	data_mgmt.o \
+	format.o \
+	integrity.o \
+	main.o \
+	pseudo_files.o \
+	vfs.o
diff --git a/fs/incfs/data_mgmt.c b/fs/incfs/data_mgmt.c
new file mode 100644
index 0000000..70943fe
--- /dev/null
+++ b/fs/incfs/data_mgmt.c
@@ -0,0 +1,1688 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2019 Google LLC
+ */
+#include <linux/crc32.h>
+#include <linux/delay.h>
+#include <linux/file.h>
+#include <linux/gfp.h>
+#include <linux/ktime.h>
+#include <linux/lz4.h>
+#include <linux/mm.h>
+#include <linux/namei.h>
+#include <linux/pagemap.h>
+#include <linux/slab.h>
+#include <linux/types.h>
+#include <linux/workqueue.h>
+
+#include "data_mgmt.h"
+#include "format.h"
+#include "integrity.h"
+
+static int incfs_scan_metadata_chain(struct data_file *df);
+
+static void log_wake_up_all(struct work_struct *work)
+{
+	struct delayed_work *dw = container_of(work, struct delayed_work, work);
+	struct read_log *rl = container_of(dw, struct read_log, ml_wakeup_work);
+	wake_up_all(&rl->ml_notif_wq);
+}
+
+static void zstd_free_workspace(struct work_struct *work)
+{
+	struct delayed_work *dw = container_of(work, struct delayed_work, work);
+	struct mount_info *mi =
+		container_of(dw, struct mount_info, mi_zstd_cleanup_work);
+
+	mutex_lock(&mi->mi_zstd_workspace_mutex);
+	kvfree(mi->mi_zstd_workspace);
+	mi->mi_zstd_workspace = NULL;
+	mi->mi_zstd_stream = NULL;
+	mutex_unlock(&mi->mi_zstd_workspace_mutex);
+}
+
+struct mount_info *incfs_alloc_mount_info(struct super_block *sb,
+					  struct mount_options *options,
+					  struct path *backing_dir_path)
+{
+	struct mount_info *mi = NULL;
+	int error = 0;
+
+	mi = kzalloc(sizeof(*mi), GFP_NOFS);
+	if (!mi)
+		return ERR_PTR(-ENOMEM);
+
+	mi->mi_sb = sb;
+	mi->mi_backing_dir_path = *backing_dir_path;
+	mi->mi_owner = get_current_cred();
+	path_get(&mi->mi_backing_dir_path);
+	mutex_init(&mi->mi_dir_struct_mutex);
+	init_waitqueue_head(&mi->mi_pending_reads_notif_wq);
+	init_waitqueue_head(&mi->mi_log.ml_notif_wq);
+	init_waitqueue_head(&mi->mi_blocks_written_notif_wq);
+	atomic_set(&mi->mi_blocks_written, 0);
+	INIT_DELAYED_WORK(&mi->mi_log.ml_wakeup_work, log_wake_up_all);
+	spin_lock_init(&mi->mi_log.rl_lock);
+	spin_lock_init(&mi->pending_read_lock);
+	INIT_LIST_HEAD(&mi->mi_reads_list_head);
+	spin_lock_init(&mi->mi_per_uid_read_timeouts_lock);
+	mutex_init(&mi->mi_zstd_workspace_mutex);
+	INIT_DELAYED_WORK(&mi->mi_zstd_cleanup_work, zstd_free_workspace);
+
+	error = incfs_realloc_mount_info(mi, options);
+	if (error)
+		goto err;
+
+	return mi;
+
+err:
+	incfs_free_mount_info(mi);
+	return ERR_PTR(error);
+}
+
+int incfs_realloc_mount_info(struct mount_info *mi,
+			     struct mount_options *options)
+{
+	void *new_buffer = NULL;
+	void *old_buffer;
+	size_t new_buffer_size = 0;
+
+	if (options->read_log_pages != mi->mi_options.read_log_pages) {
+		struct read_log_state log_state;
+		/*
+		 * Even though having two buffers allocated at once isn't
+		 * usually good, allocating a multipage buffer under a spinlock
+		 * is even worse, so let's optimize for the shorter lock
+		 * duration. It's not end of the world if we fail to increase
+		 * the buffer size anyway.
+		 */
+		if (options->read_log_pages > 0) {
+			new_buffer_size = PAGE_SIZE * options->read_log_pages;
+			new_buffer = kzalloc(new_buffer_size, GFP_NOFS);
+			if (!new_buffer)
+				return -ENOMEM;
+		}
+
+		spin_lock(&mi->mi_log.rl_lock);
+		old_buffer = mi->mi_log.rl_ring_buf;
+		mi->mi_log.rl_ring_buf = new_buffer;
+		mi->mi_log.rl_size = new_buffer_size;
+		log_state = (struct read_log_state){
+			.generation_id = mi->mi_log.rl_head.generation_id + 1,
+		};
+		mi->mi_log.rl_head = log_state;
+		mi->mi_log.rl_tail = log_state;
+		spin_unlock(&mi->mi_log.rl_lock);
+
+		kfree(old_buffer);
+	}
+
+	mi->mi_options = *options;
+	return 0;
+}
+
+void incfs_free_mount_info(struct mount_info *mi)
+{
+	int i;
+	if (!mi)
+		return;
+
+	flush_delayed_work(&mi->mi_log.ml_wakeup_work);
+	flush_delayed_work(&mi->mi_zstd_cleanup_work);
+
+	dput(mi->mi_index_dir);
+	dput(mi->mi_incomplete_dir);
+	path_put(&mi->mi_backing_dir_path);
+	mutex_destroy(&mi->mi_dir_struct_mutex);
+	mutex_destroy(&mi->mi_zstd_workspace_mutex);
+	put_cred(mi->mi_owner);
+	kfree(mi->mi_log.rl_ring_buf);
+	for (i = 0; i < ARRAY_SIZE(mi->pseudo_file_xattr); ++i)
+		kfree(mi->pseudo_file_xattr[i].data);
+	kfree(mi->mi_per_uid_read_timeouts);
+	kfree(mi);
+}
+
+static void data_file_segment_init(struct data_file_segment *segment)
+{
+	init_waitqueue_head(&segment->new_data_arrival_wq);
+	init_rwsem(&segment->rwsem);
+	INIT_LIST_HEAD(&segment->reads_list_head);
+}
+
+char *file_id_to_str(incfs_uuid_t id)
+{
+	char *result = kmalloc(1 + sizeof(id.bytes) * 2, GFP_NOFS);
+	char *end;
+
+	if (!result)
+		return NULL;
+
+	end = bin2hex(result, id.bytes, sizeof(id.bytes));
+	*end = 0;
+	return result;
+}
+
+struct dentry *incfs_lookup_dentry(struct dentry *parent, const char *name)
+{
+	struct inode *inode;
+	struct dentry *result = NULL;
+
+	if (!parent)
+		return ERR_PTR(-EFAULT);
+
+	inode = d_inode(parent);
+	inode_lock_nested(inode, I_MUTEX_PARENT);
+	result = lookup_one_len(name, parent, strlen(name));
+	inode_unlock(inode);
+
+	if (IS_ERR(result))
+		pr_warn("%s err:%ld\n", __func__, PTR_ERR(result));
+
+	return result;
+}
+
+static struct data_file *handle_mapped_file(struct mount_info *mi,
+					    struct data_file *df)
+{
+	char *file_id_str;
+	struct dentry *index_file_dentry;
+	struct path path;
+	struct file *bf;
+	struct data_file *result = NULL;
+	const struct cred *old_cred;
+
+	file_id_str = file_id_to_str(df->df_id);
+	if (!file_id_str)
+		return ERR_PTR(-ENOENT);
+
+	index_file_dentry = incfs_lookup_dentry(mi->mi_index_dir,
+						file_id_str);
+	kfree(file_id_str);
+	if (!index_file_dentry)
+		return ERR_PTR(-ENOENT);
+	if (IS_ERR(index_file_dentry))
+		return (struct data_file *)index_file_dentry;
+	if (!d_really_is_positive(index_file_dentry)) {
+		result = ERR_PTR(-ENOENT);
+		goto out;
+	}
+
+	path = (struct path) {
+		.mnt = mi->mi_backing_dir_path.mnt,
+		.dentry = index_file_dentry
+	};
+
+	old_cred = override_creds(mi->mi_owner);
+	bf = dentry_open(&path, O_RDWR | O_NOATIME | O_LARGEFILE,
+			 current_cred());
+	revert_creds(old_cred);
+
+	if (IS_ERR(bf)) {
+		result = (struct data_file *)bf;
+		goto out;
+	}
+
+	result = incfs_open_data_file(mi, bf);
+	fput(bf);
+	if (IS_ERR(result))
+		goto out;
+
+	result->df_mapped_offset = df->df_metadata_off;
+
+out:
+	dput(index_file_dentry);
+	return result;
+}
+
+struct data_file *incfs_open_data_file(struct mount_info *mi, struct file *bf)
+{
+	struct data_file *df = NULL;
+	struct backing_file_context *bfc = NULL;
+	int md_records;
+	u64 size;
+	int error = 0;
+	int i;
+
+	if (!bf || !mi)
+		return ERR_PTR(-EFAULT);
+
+	if (!S_ISREG(bf->f_inode->i_mode))
+		return ERR_PTR(-EBADF);
+
+	bfc = incfs_alloc_bfc(mi, bf);
+	if (IS_ERR(bfc))
+		return ERR_CAST(bfc);
+
+	df = kzalloc(sizeof(*df), GFP_NOFS);
+	if (!df) {
+		error = -ENOMEM;
+		goto out;
+	}
+
+	df->df_backing_file_context = bfc;
+	df->df_mount_info = mi;
+	for (i = 0; i < ARRAY_SIZE(df->df_segments); i++)
+		data_file_segment_init(&df->df_segments[i]);
+
+	error = incfs_read_file_header(bfc, &df->df_metadata_off, &df->df_id,
+				       &size, &df->df_header_flags);
+
+	if (error)
+		goto out;
+
+	df->df_size = size;
+	if (size > 0)
+		df->df_data_block_count = get_blocks_count_for_size(size);
+
+	if (df->df_header_flags & INCFS_FILE_MAPPED) {
+		struct data_file *mapped_df = handle_mapped_file(mi, df);
+
+		incfs_free_data_file(df);
+		return mapped_df;
+	}
+
+	md_records = incfs_scan_metadata_chain(df);
+	if (md_records < 0)
+		error = md_records;
+
+out:
+	if (error) {
+		incfs_free_bfc(bfc);
+		if (df)
+			df->df_backing_file_context = NULL;
+		incfs_free_data_file(df);
+		return ERR_PTR(error);
+	}
+	return df;
+}
+
+void incfs_free_data_file(struct data_file *df)
+{
+	u32 data_blocks_written, hash_blocks_written;
+
+	if (!df)
+		return;
+
+	data_blocks_written = atomic_read(&df->df_data_blocks_written);
+	hash_blocks_written = atomic_read(&df->df_hash_blocks_written);
+
+	if (data_blocks_written != df->df_initial_data_blocks_written ||
+	    hash_blocks_written != df->df_initial_hash_blocks_written) {
+		struct backing_file_context *bfc = df->df_backing_file_context;
+		int error = -1;
+
+		if (bfc && !mutex_lock_interruptible(&bfc->bc_mutex)) {
+			error = incfs_write_status_to_backing_file(
+						df->df_backing_file_context,
+						df->df_status_offset,
+						data_blocks_written,
+						hash_blocks_written);
+			mutex_unlock(&bfc->bc_mutex);
+		}
+
+		if (error)
+			/* Nothing can be done, just warn */
+			pr_warn("incfs: failed to write status to backing file\n");
+	}
+
+	incfs_free_mtree(df->df_hash_tree);
+	incfs_free_bfc(df->df_backing_file_context);
+	kfree(df);
+}
+
+int make_inode_ready_for_data_ops(struct mount_info *mi,
+				struct inode *inode,
+				struct file *backing_file)
+{
+	struct inode_info *node = get_incfs_node(inode);
+	struct data_file *df = NULL;
+	int err = 0;
+
+	inode_lock(inode);
+	if (S_ISREG(inode->i_mode)) {
+		if (!node->n_file) {
+			df = incfs_open_data_file(mi, backing_file);
+
+			if (IS_ERR(df))
+				err = PTR_ERR(df);
+			else
+				node->n_file = df;
+		}
+	} else
+		err = -EBADF;
+	inode_unlock(inode);
+	return err;
+}
+
+struct dir_file *incfs_open_dir_file(struct mount_info *mi, struct file *bf)
+{
+	struct dir_file *dir = NULL;
+
+	if (!S_ISDIR(bf->f_inode->i_mode))
+		return ERR_PTR(-EBADF);
+
+	dir = kzalloc(sizeof(*dir), GFP_NOFS);
+	if (!dir)
+		return ERR_PTR(-ENOMEM);
+
+	dir->backing_dir = get_file(bf);
+	dir->mount_info = mi;
+	return dir;
+}
+
+void incfs_free_dir_file(struct dir_file *dir)
+{
+	if (!dir)
+		return;
+	if (dir->backing_dir)
+		fput(dir->backing_dir);
+	kfree(dir);
+}
+
+static ssize_t zstd_decompress_safe(struct mount_info *mi,
+				    struct mem_range src, struct mem_range dst)
+{
+	ssize_t result;
+	ZSTD_inBuffer inbuf = {.src = src.data,	.size = src.len};
+	ZSTD_outBuffer outbuf = {.dst = dst.data, .size = dst.len};
+
+	result = mutex_lock_interruptible(&mi->mi_zstd_workspace_mutex);
+	if (result)
+		return result;
+
+	if (!mi->mi_zstd_stream) {
+		unsigned int workspace_size = ZSTD_DStreamWorkspaceBound(
+						INCFS_DATA_FILE_BLOCK_SIZE);
+		void *workspace = kvmalloc(workspace_size, GFP_NOFS);
+		ZSTD_DStream *stream;
+
+		if (!workspace) {
+			result = -ENOMEM;
+			goto out;
+		}
+
+		stream = ZSTD_initDStream(INCFS_DATA_FILE_BLOCK_SIZE, workspace,
+				  workspace_size);
+		if (!stream) {
+			kvfree(workspace);
+			result = -EIO;
+			goto out;
+		}
+
+		mi->mi_zstd_workspace = workspace;
+		mi->mi_zstd_stream = stream;
+	}
+
+	result = ZSTD_decompressStream(mi->mi_zstd_stream, &outbuf, &inbuf) ?
+		-EBADMSG : outbuf.pos;
+
+	mod_delayed_work(system_wq, &mi->mi_zstd_cleanup_work,
+			 msecs_to_jiffies(5000));
+
+out:
+	mutex_unlock(&mi->mi_zstd_workspace_mutex);
+	return result;
+}
+
+static ssize_t decompress(struct mount_info *mi,
+			  struct mem_range src, struct mem_range dst, int alg)
+{
+	int result;
+
+	switch (alg) {
+	case INCFS_BLOCK_COMPRESSED_LZ4:
+		result = LZ4_decompress_safe(src.data, dst.data, src.len,
+					     dst.len);
+		if (result < 0)
+			return -EBADMSG;
+		return result;
+
+	case INCFS_BLOCK_COMPRESSED_ZSTD:
+		return zstd_decompress_safe(mi, src, dst);
+
+	default:
+		WARN_ON(true);
+		return -EOPNOTSUPP;
+	}
+}
+
+static void log_read_one_record(struct read_log *rl, struct read_log_state *rs)
+{
+	union log_record *record =
+		(union log_record *)((u8 *)rl->rl_ring_buf + rs->next_offset);
+	size_t record_size;
+
+	switch (record->full_record.type) {
+	case FULL:
+		rs->base_record = record->full_record;
+		record_size = sizeof(record->full_record);
+		break;
+
+	case SAME_FILE:
+		rs->base_record.block_index =
+			record->same_file_record.block_index;
+		rs->base_record.absolute_ts_us +=
+			record->same_file_record.relative_ts_us;
+		record_size = sizeof(record->same_file_record);
+		break;
+
+	case SAME_FILE_NEXT_BLOCK:
+		++rs->base_record.block_index;
+		rs->base_record.absolute_ts_us +=
+			record->same_file_next_block.relative_ts_us;
+		record_size = sizeof(record->same_file_next_block);
+		break;
+
+	case SAME_FILE_NEXT_BLOCK_SHORT:
+		++rs->base_record.block_index;
+		rs->base_record.absolute_ts_us +=
+			record->same_file_next_block_short.relative_ts_us;
+		record_size = sizeof(record->same_file_next_block_short);
+		break;
+	}
+
+	rs->next_offset += record_size;
+	if (rs->next_offset > rl->rl_size - sizeof(*record)) {
+		rs->next_offset = 0;
+		++rs->current_pass_no;
+	}
+	++rs->current_record_no;
+}
+
+static void log_block_read(struct mount_info *mi, incfs_uuid_t *id,
+			   int block_index)
+{
+	struct read_log *log = &mi->mi_log;
+	struct read_log_state *head, *tail;
+	s64 now_us;
+	s64 relative_us;
+	union log_record record;
+	size_t record_size;
+	uid_t uid = current_uid().val;
+
+	/*
+	 * This may read the old value, but it's OK to delay the logging start
+	 * right after the configuration update.
+	 */
+	if (READ_ONCE(log->rl_size) == 0)
+		return;
+
+	now_us = ktime_to_us(ktime_get());
+
+	spin_lock(&log->rl_lock);
+	if (log->rl_size == 0) {
+		spin_unlock(&log->rl_lock);
+		return;
+	}
+
+	head = &log->rl_head;
+	tail = &log->rl_tail;
+	relative_us = now_us - head->base_record.absolute_ts_us;
+
+	if (memcmp(id, &head->base_record.file_id, sizeof(incfs_uuid_t)) ||
+	    relative_us >= 1ll << 32 ||
+	    uid != head->base_record.uid) {
+		record.full_record = (struct full_record){
+			.type = FULL,
+			.block_index = block_index,
+			.file_id = *id,
+			.absolute_ts_us = now_us,
+			.uid = uid,
+		};
+		head->base_record.file_id = *id;
+		record_size = sizeof(struct full_record);
+	} else if (block_index != head->base_record.block_index + 1 ||
+		   relative_us >= 1 << 30) {
+		record.same_file_record = (struct same_file_record){
+			.type = SAME_FILE,
+			.block_index = block_index,
+			.relative_ts_us = relative_us,
+		};
+		record_size = sizeof(struct same_file_record);
+	} else if (relative_us >= 1 << 14) {
+		record.same_file_next_block = (struct same_file_next_block){
+			.type = SAME_FILE_NEXT_BLOCK,
+			.relative_ts_us = relative_us,
+		};
+		record_size = sizeof(struct same_file_next_block);
+	} else {
+		record.same_file_next_block_short =
+			(struct same_file_next_block_short){
+				.type = SAME_FILE_NEXT_BLOCK_SHORT,
+				.relative_ts_us = relative_us,
+			};
+		record_size = sizeof(struct same_file_next_block_short);
+	}
+
+	head->base_record.block_index = block_index;
+	head->base_record.absolute_ts_us = now_us;
+
+	/* Advance tail beyond area we are going to overwrite */
+	while (tail->current_pass_no < head->current_pass_no &&
+	       tail->next_offset < head->next_offset + record_size)
+		log_read_one_record(log, tail);
+
+	memcpy(((u8 *)log->rl_ring_buf) + head->next_offset, &record,
+	       record_size);
+	head->next_offset += record_size;
+	if (head->next_offset > log->rl_size - sizeof(record)) {
+		head->next_offset = 0;
+		++head->current_pass_no;
+	}
+	++head->current_record_no;
+
+	spin_unlock(&log->rl_lock);
+	schedule_delayed_work(&log->ml_wakeup_work, msecs_to_jiffies(16));
+}
+
+static int validate_hash_tree(struct backing_file_context *bfc, struct file *f,
+			      int block_index, struct mem_range data, u8 *buf)
+{
+	struct data_file *df = get_incfs_data_file(f);
+	u8 stored_digest[INCFS_MAX_HASH_SIZE] = {};
+	u8 calculated_digest[INCFS_MAX_HASH_SIZE] = {};
+	struct mtree *tree = NULL;
+	struct incfs_df_signature *sig = NULL;
+	int digest_size;
+	int hash_block_index = block_index;
+	int lvl;
+	int res;
+	loff_t hash_block_offset[INCFS_MAX_MTREE_LEVELS];
+	size_t hash_offset_in_block[INCFS_MAX_MTREE_LEVELS];
+	int hash_per_block;
+	pgoff_t file_pages;
+
+	tree = df->df_hash_tree;
+	sig = df->df_signature;
+	if (!tree || !sig)
+		return 0;
+
+	digest_size = tree->alg->digest_size;
+	hash_per_block = INCFS_DATA_FILE_BLOCK_SIZE / digest_size;
+	for (lvl = 0; lvl < tree->depth; lvl++) {
+		loff_t lvl_off = tree->hash_level_suboffset[lvl];
+
+		hash_block_offset[lvl] =
+			lvl_off + round_down(hash_block_index * digest_size,
+					     INCFS_DATA_FILE_BLOCK_SIZE);
+		hash_offset_in_block[lvl] = hash_block_index * digest_size %
+					    INCFS_DATA_FILE_BLOCK_SIZE;
+		hash_block_index /= hash_per_block;
+	}
+
+	memcpy(stored_digest, tree->root_hash, digest_size);
+
+	file_pages = DIV_ROUND_UP(df->df_size, INCFS_DATA_FILE_BLOCK_SIZE);
+	for (lvl = tree->depth - 1; lvl >= 0; lvl--) {
+		pgoff_t hash_page =
+			file_pages +
+			hash_block_offset[lvl] / INCFS_DATA_FILE_BLOCK_SIZE;
+		struct page *page = find_get_page_flags(
+			f->f_inode->i_mapping, hash_page, FGP_ACCESSED);
+
+		if (page && PageChecked(page)) {
+			u8 *addr = kmap_atomic(page);
+
+			memcpy(stored_digest, addr + hash_offset_in_block[lvl],
+			       digest_size);
+			kunmap_atomic(addr);
+			put_page(page);
+			continue;
+		}
+
+		if (page)
+			put_page(page);
+
+		res = incfs_kread(bfc, buf, INCFS_DATA_FILE_BLOCK_SIZE,
+				  hash_block_offset[lvl] + sig->hash_offset);
+		if (res < 0)
+			return res;
+		if (res != INCFS_DATA_FILE_BLOCK_SIZE)
+			return -EIO;
+		res = incfs_calc_digest(tree->alg,
+					range(buf, INCFS_DATA_FILE_BLOCK_SIZE),
+					range(calculated_digest, digest_size));
+		if (res)
+			return res;
+
+		if (memcmp(stored_digest, calculated_digest, digest_size)) {
+			int i;
+			bool zero = true;
+
+			pr_warn("incfs: Hash mismatch lvl:%d blk:%d\n",
+				lvl, block_index);
+			for (i = 0; i < digest_size; i++)
+				if (stored_digest[i]) {
+					zero = false;
+					break;
+				}
+
+			if (zero)
+				pr_debug("Note saved_digest all zero - did you forget to load the hashes?\n");
+			return -EBADMSG;
+		}
+
+		memcpy(stored_digest, buf + hash_offset_in_block[lvl],
+		       digest_size);
+
+		page = grab_cache_page(f->f_inode->i_mapping, hash_page);
+		if (page) {
+			u8 *addr = kmap_atomic(page);
+
+			memcpy(addr, buf, INCFS_DATA_FILE_BLOCK_SIZE);
+			kunmap_atomic(addr);
+			SetPageChecked(page);
+			unlock_page(page);
+			put_page(page);
+		}
+	}
+
+	res = incfs_calc_digest(tree->alg, data,
+				range(calculated_digest, digest_size));
+	if (res)
+		return res;
+
+	if (memcmp(stored_digest, calculated_digest, digest_size)) {
+		pr_debug("Leaf hash mismatch blk:%d\n", block_index);
+		return -EBADMSG;
+	}
+
+	return 0;
+}
+
+static struct data_file_segment *get_file_segment(struct data_file *df,
+						  int block_index)
+{
+	int seg_idx = block_index % ARRAY_SIZE(df->df_segments);
+
+	return &df->df_segments[seg_idx];
+}
+
+static bool is_data_block_present(struct data_file_block *block)
+{
+	return (block->db_backing_file_data_offset != 0) &&
+	       (block->db_stored_size != 0);
+}
+
+static void convert_data_file_block(struct incfs_blockmap_entry *bme,
+				    struct data_file_block *res_block)
+{
+	u16 flags = le16_to_cpu(bme->me_flags);
+
+	res_block->db_backing_file_data_offset =
+		le16_to_cpu(bme->me_data_offset_hi);
+	res_block->db_backing_file_data_offset <<= 32;
+	res_block->db_backing_file_data_offset |=
+		le32_to_cpu(bme->me_data_offset_lo);
+	res_block->db_stored_size = le16_to_cpu(bme->me_data_size);
+	res_block->db_comp_alg = flags & INCFS_BLOCK_COMPRESSED_MASK;
+}
+
+static int get_data_file_block(struct data_file *df, int index,
+			       struct data_file_block *res_block)
+{
+	struct incfs_blockmap_entry bme = {};
+	struct backing_file_context *bfc = NULL;
+	loff_t blockmap_off = 0;
+	int error = 0;
+
+	if (!df || !res_block)
+		return -EFAULT;
+
+	blockmap_off = df->df_blockmap_off;
+	bfc = df->df_backing_file_context;
+
+	if (index < 0 || blockmap_off == 0)
+		return -EINVAL;
+
+	error = incfs_read_blockmap_entry(bfc, index, blockmap_off, &bme);
+	if (error)
+		return error;
+
+	convert_data_file_block(&bme, res_block);
+	return 0;
+}
+
+static int check_room_for_one_range(u32 size, u32 size_out)
+{
+	if (size_out + sizeof(struct incfs_filled_range) > size)
+		return -ERANGE;
+	return 0;
+}
+
+static int copy_one_range(struct incfs_filled_range *range, void __user *buffer,
+			  u32 size, u32 *size_out)
+{
+	int error = check_room_for_one_range(size, *size_out);
+	if (error)
+		return error;
+
+	if (copy_to_user(((char __user *)buffer) + *size_out, range,
+				sizeof(*range)))
+		return -EFAULT;
+
+	*size_out += sizeof(*range);
+	return 0;
+}
+
+#define READ_BLOCKMAP_ENTRIES 512
+int incfs_get_filled_blocks(struct data_file *df,
+			    struct incfs_file_data *fd,
+			    struct incfs_get_filled_blocks_args *arg)
+{
+	int error = 0;
+	bool in_range = false;
+	struct incfs_filled_range range;
+	void __user *buffer = u64_to_user_ptr(arg->range_buffer);
+	u32 size = arg->range_buffer_size;
+	u32 end_index =
+		arg->end_index ? arg->end_index : df->df_total_block_count;
+	u32 *size_out = &arg->range_buffer_size_out;
+	int i = READ_BLOCKMAP_ENTRIES - 1;
+	int entries_read = 0;
+	struct incfs_blockmap_entry *bme;
+	int data_blocks_filled = 0;
+	int hash_blocks_filled = 0;
+
+	*size_out = 0;
+	if (end_index > df->df_total_block_count)
+		end_index = df->df_total_block_count;
+	arg->total_blocks_out = df->df_total_block_count;
+	arg->data_blocks_out = df->df_data_block_count;
+
+	if (atomic_read(&df->df_data_blocks_written) ==
+	    df->df_data_block_count) {
+		pr_debug("File marked full, fast get_filled_blocks");
+		if (arg->start_index > end_index) {
+			arg->index_out = arg->start_index;
+			return 0;
+		}
+		arg->index_out = arg->start_index;
+
+		error = check_room_for_one_range(size, *size_out);
+		if (error)
+			return error;
+
+		range = (struct incfs_filled_range){
+			.begin = arg->start_index,
+			.end = end_index,
+		};
+
+		error = copy_one_range(&range, buffer, size, size_out);
+		if (error)
+			return error;
+		arg->index_out = end_index;
+		return 0;
+	}
+
+	bme = kzalloc(sizeof(*bme) * READ_BLOCKMAP_ENTRIES,
+		      GFP_NOFS | __GFP_COMP);
+	if (!bme)
+		return -ENOMEM;
+
+	for (arg->index_out = arg->start_index; arg->index_out < end_index;
+	     ++arg->index_out) {
+		struct data_file_block dfb;
+
+		if (++i == READ_BLOCKMAP_ENTRIES) {
+			entries_read = incfs_read_blockmap_entries(
+				df->df_backing_file_context, bme,
+				arg->index_out, READ_BLOCKMAP_ENTRIES,
+				df->df_blockmap_off);
+			if (entries_read < 0) {
+				error = entries_read;
+				break;
+			}
+
+			i = 0;
+		}
+
+		if (i >= entries_read) {
+			error = -EIO;
+			break;
+		}
+
+		convert_data_file_block(bme + i, &dfb);
+
+		if (is_data_block_present(&dfb)) {
+			if (arg->index_out >= df->df_data_block_count)
+				++hash_blocks_filled;
+			else
+				++data_blocks_filled;
+		}
+
+		if (is_data_block_present(&dfb) == in_range)
+			continue;
+
+		if (!in_range) {
+			error = check_room_for_one_range(size, *size_out);
+			if (error)
+				break;
+			in_range = true;
+			range.begin = arg->index_out;
+		} else {
+			range.end = arg->index_out;
+			error = copy_one_range(&range, buffer, size, size_out);
+			if (error) {
+				/* there will be another try out of the loop,
+				 * it will reset the index_out if it fails too
+				 */
+				break;
+			}
+			in_range = false;
+		}
+	}
+
+	if (in_range) {
+		range.end = arg->index_out;
+		error = copy_one_range(&range, buffer, size, size_out);
+		if (error)
+			arg->index_out = range.begin;
+	}
+
+	if (arg->start_index == 0) {
+		fd->fd_get_block_pos = 0;
+		fd->fd_filled_data_blocks = 0;
+		fd->fd_filled_hash_blocks = 0;
+	}
+
+	if (arg->start_index == fd->fd_get_block_pos) {
+		fd->fd_get_block_pos = arg->index_out + 1;
+		fd->fd_filled_data_blocks += data_blocks_filled;
+		fd->fd_filled_hash_blocks += hash_blocks_filled;
+	}
+
+	if (fd->fd_get_block_pos == df->df_total_block_count + 1) {
+		if (fd->fd_filled_data_blocks >
+		   atomic_read(&df->df_data_blocks_written))
+			atomic_set(&df->df_data_blocks_written,
+				   fd->fd_filled_data_blocks);
+
+		if (fd->fd_filled_hash_blocks >
+		   atomic_read(&df->df_hash_blocks_written))
+			atomic_set(&df->df_hash_blocks_written,
+				   fd->fd_filled_hash_blocks);
+	}
+
+	kfree(bme);
+	return error;
+}
+
+static bool is_read_done(struct pending_read *read)
+{
+	return atomic_read_acquire(&read->done) != 0;
+}
+
+static void set_read_done(struct pending_read *read)
+{
+	atomic_set_release(&read->done, 1);
+}
+
+/*
+ * Notifies a given data file about pending read from a given block.
+ * Returns a new pending read entry.
+ */
+static struct pending_read *add_pending_read(struct data_file *df,
+					     int block_index)
+{
+	struct pending_read *result = NULL;
+	struct data_file_segment *segment = NULL;
+	struct mount_info *mi = NULL;
+
+	segment = get_file_segment(df, block_index);
+	mi = df->df_mount_info;
+
+	result = kzalloc(sizeof(*result), GFP_NOFS);
+	if (!result)
+		return NULL;
+
+	result->file_id = df->df_id;
+	result->block_index = block_index;
+	result->timestamp_us = ktime_to_us(ktime_get());
+	result->uid = current_uid().val;
+
+	spin_lock(&mi->pending_read_lock);
+
+	result->serial_number = ++mi->mi_last_pending_read_number;
+	mi->mi_pending_reads_count++;
+
+	list_add_rcu(&result->mi_reads_list, &mi->mi_reads_list_head);
+	list_add_rcu(&result->segment_reads_list, &segment->reads_list_head);
+
+	spin_unlock(&mi->pending_read_lock);
+
+	wake_up_all(&mi->mi_pending_reads_notif_wq);
+	return result;
+}
+
+static void free_pending_read_entry(struct rcu_head *entry)
+{
+	struct pending_read *read;
+
+	read = container_of(entry, struct pending_read, rcu);
+
+	kfree(read);
+}
+
+/* Notifies a given data file that pending read is completed. */
+static void remove_pending_read(struct data_file *df, struct pending_read *read)
+{
+	struct mount_info *mi = NULL;
+
+	if (!df || !read) {
+		WARN_ON(!df);
+		WARN_ON(!read);
+		return;
+	}
+
+	mi = df->df_mount_info;
+
+	spin_lock(&mi->pending_read_lock);
+
+	list_del_rcu(&read->mi_reads_list);
+	list_del_rcu(&read->segment_reads_list);
+
+	mi->mi_pending_reads_count--;
+
+	spin_unlock(&mi->pending_read_lock);
+
+	/* Don't free. Wait for readers */
+	call_rcu(&read->rcu, free_pending_read_entry);
+}
+
+static void notify_pending_reads(struct mount_info *mi,
+		struct data_file_segment *segment,
+		int index)
+{
+	struct pending_read *entry = NULL;
+
+	/* Notify pending reads waiting for this block. */
+	rcu_read_lock();
+	list_for_each_entry_rcu(entry, &segment->reads_list_head,
+						segment_reads_list) {
+		if (entry->block_index == index)
+			set_read_done(entry);
+	}
+	rcu_read_unlock();
+	wake_up_all(&segment->new_data_arrival_wq);
+
+	atomic_inc(&mi->mi_blocks_written);
+	wake_up_all(&mi->mi_blocks_written_notif_wq);
+}
+
+static int usleep_interruptible(u32 us)
+{
+	/* See:
+	 * https://www.kernel.org/doc/Documentation/timers/timers-howto.txt
+	 * for explanation
+	 */
+	if (us < 10) {
+		udelay(us);
+		return 0;
+	} else if (us < 20000) {
+		usleep_range(us, us + us / 10);
+		return 0;
+	} else
+		return msleep_interruptible(us / 1000);
+}
+
+static int wait_for_data_block(struct data_file *df, int block_index,
+			       u32 min_time_us, u32 min_pending_time_us,
+			       u32 max_pending_time_us,
+			       struct data_file_block *res_block)
+{
+	struct data_file_block block = {};
+	struct data_file_segment *segment = NULL;
+	struct pending_read *read = NULL;
+	struct mount_info *mi = NULL;
+	int error = 0;
+	int wait_res = 0;
+	u64 time;
+
+	if (!df || !res_block)
+		return -EFAULT;
+
+	if (block_index < 0 || block_index >= df->df_data_block_count)
+		return -EINVAL;
+
+	if (df->df_blockmap_off <= 0 || !df->df_mount_info)
+		return -ENODATA;
+
+	mi = df->df_mount_info;
+	segment = get_file_segment(df, block_index);
+
+	error = down_read_killable(&segment->rwsem);
+	if (error)
+		return error;
+
+	/* Look up the given block */
+	error = get_data_file_block(df, block_index, &block);
+
+	up_read(&segment->rwsem);
+
+	if (error)
+		return error;
+
+	/* If the block was found, just return it. No need to wait. */
+	if (is_data_block_present(&block)) {
+		if (min_time_us)
+			error = usleep_interruptible(min_time_us);
+		*res_block = block;
+		return error;
+	} else {
+		/* If it's not found, create a pending read */
+		if (max_pending_time_us != 0) {
+			read = add_pending_read(df, block_index);
+			if (!read)
+				return -ENOMEM;
+		} else {
+			log_block_read(mi, &df->df_id, block_index);
+			return -ETIME;
+		}
+	}
+
+	if (min_pending_time_us)
+		time = ktime_get_ns();
+
+	/* Wait for notifications about block's arrival */
+	wait_res =
+		wait_event_interruptible_timeout(segment->new_data_arrival_wq,
+					(is_read_done(read)),
+					usecs_to_jiffies(max_pending_time_us));
+
+	/* Woke up, the pending read is no longer needed. */
+	remove_pending_read(df, read);
+
+	if (wait_res == 0) {
+		/* Wait has timed out */
+		log_block_read(mi, &df->df_id, block_index);
+		return -ETIME;
+	}
+	if (wait_res < 0) {
+		/*
+		 * Only ERESTARTSYS is really expected here when a signal
+		 * comes while we wait.
+		 */
+		return wait_res;
+	}
+
+	if (min_pending_time_us) {
+		time = div_u64(ktime_get_ns() - time, 1000);
+		if (min_pending_time_us > time) {
+			error = usleep_interruptible(
+						min_pending_time_us - time);
+			if (error)
+				return error;
+		}
+	}
+
+	error = down_read_killable(&segment->rwsem);
+	if (error)
+		return error;
+
+	/*
+	 * Re-read block's info now, it has just arrived and
+	 * should be available.
+	 */
+	error = get_data_file_block(df, block_index, &block);
+	if (!error) {
+		if (is_data_block_present(&block))
+			*res_block = block;
+		else {
+			/*
+			 * Somehow wait finished successfully bug block still
+			 * can't be found. It's not normal.
+			 */
+			pr_warn("incfs: Wait succeeded but block not found.\n");
+			error = -ENODATA;
+		}
+	}
+
+	up_read(&segment->rwsem);
+	return error;
+}
+
+ssize_t incfs_read_data_file_block(struct mem_range dst, struct file *f,
+			int index, u32 min_time_us,
+			u32 min_pending_time_us, u32 max_pending_time_us,
+			struct mem_range tmp)
+{
+	loff_t pos;
+	ssize_t result;
+	size_t bytes_to_read;
+	struct mount_info *mi = NULL;
+	struct backing_file_context *bfc = NULL;
+	struct data_file_block block = {};
+	struct data_file *df = get_incfs_data_file(f);
+
+	if (!dst.data || !df || !tmp.data)
+		return -EFAULT;
+
+	if (tmp.len < 2 * INCFS_DATA_FILE_BLOCK_SIZE)
+		return -ERANGE;
+
+	mi = df->df_mount_info;
+	bfc = df->df_backing_file_context;
+
+	result = wait_for_data_block(df, index, min_time_us,
+			min_pending_time_us, max_pending_time_us, &block);
+	if (result < 0)
+		goto out;
+
+	pos = block.db_backing_file_data_offset;
+	if (block.db_comp_alg == COMPRESSION_NONE) {
+		bytes_to_read = min(dst.len, block.db_stored_size);
+		result = incfs_kread(bfc, dst.data, bytes_to_read, pos);
+
+		/* Some data was read, but not enough */
+		if (result >= 0 && result != bytes_to_read)
+			result = -EIO;
+	} else {
+		bytes_to_read = min(tmp.len, block.db_stored_size);
+		result = incfs_kread(bfc, tmp.data, bytes_to_read, pos);
+		if (result == bytes_to_read) {
+			result =
+				decompress(mi, range(tmp.data, bytes_to_read),
+					   dst, block.db_comp_alg);
+			if (result < 0) {
+				const char *name =
+				    bfc->bc_file->f_path.dentry->d_name.name;
+
+				pr_warn_once("incfs: Decompression error. %s",
+					     name);
+			}
+		} else if (result >= 0) {
+			/* Some data was read, but not enough */
+			result = -EIO;
+		}
+	}
+
+	if (result > 0) {
+		int err = validate_hash_tree(bfc, f, index, dst, tmp.data);
+
+		if (err < 0)
+			result = err;
+	}
+
+	if (result >= 0)
+		log_block_read(mi, &df->df_id, index);
+
+out:
+	return result;
+}
+
+int incfs_process_new_data_block(struct data_file *df,
+				 struct incfs_fill_block *block, u8 *data)
+{
+	struct mount_info *mi = NULL;
+	struct backing_file_context *bfc = NULL;
+	struct data_file_segment *segment = NULL;
+	struct data_file_block existing_block = {};
+	u16 flags = 0;
+	int error = 0;
+
+	if (!df || !block)
+		return -EFAULT;
+
+	bfc = df->df_backing_file_context;
+	mi = df->df_mount_info;
+
+	if (block->block_index >= df->df_data_block_count)
+		return -ERANGE;
+
+	segment = get_file_segment(df, block->block_index);
+	if (!segment)
+		return -EFAULT;
+
+	if (block->compression == COMPRESSION_LZ4)
+		flags |= INCFS_BLOCK_COMPRESSED_LZ4;
+	else if (block->compression == COMPRESSION_ZSTD)
+		flags |= INCFS_BLOCK_COMPRESSED_ZSTD;
+	else if (block->compression)
+		return -EINVAL;
+
+	error = down_read_killable(&segment->rwsem);
+	if (error)
+		return error;
+
+	error = get_data_file_block(df, block->block_index, &existing_block);
+
+	up_read(&segment->rwsem);
+
+	if (error)
+		return error;
+	if (is_data_block_present(&existing_block)) {
+		/* Block is already present, nothing to do here */
+		return 0;
+	}
+
+	error = down_write_killable(&segment->rwsem);
+	if (error)
+		return error;
+
+	error = mutex_lock_interruptible(&bfc->bc_mutex);
+	if (!error) {
+		error = incfs_write_data_block_to_backing_file(
+			bfc, range(data, block->data_len), block->block_index,
+			df->df_blockmap_off, flags);
+		mutex_unlock(&bfc->bc_mutex);
+	}
+	if (!error) {
+		notify_pending_reads(mi, segment, block->block_index);
+		atomic_inc(&df->df_data_blocks_written);
+	}
+
+	up_write(&segment->rwsem);
+
+	if (error)
+		pr_debug("%d error: %d\n", block->block_index, error);
+	return error;
+}
+
+int incfs_read_file_signature(struct data_file *df, struct mem_range dst)
+{
+	struct backing_file_context *bfc = df->df_backing_file_context;
+	struct incfs_df_signature *sig;
+	int read_res = 0;
+
+	if (!dst.data)
+		return -EFAULT;
+
+	sig = df->df_signature;
+	if (!sig)
+		return 0;
+
+	if (dst.len < sig->sig_size)
+		return -E2BIG;
+
+	read_res = incfs_kread(bfc, dst.data, sig->sig_size, sig->sig_offset);
+
+	if (read_res < 0)
+		return read_res;
+
+	if (read_res != sig->sig_size)
+		return -EIO;
+
+	return read_res;
+}
+
+int incfs_process_new_hash_block(struct data_file *df,
+				 struct incfs_fill_block *block, u8 *data)
+{
+	struct backing_file_context *bfc = NULL;
+	struct mount_info *mi = NULL;
+	struct mtree *hash_tree = NULL;
+	struct incfs_df_signature *sig = NULL;
+	loff_t hash_area_base = 0;
+	loff_t hash_area_size = 0;
+	int error = 0;
+
+	if (!df || !block)
+		return -EFAULT;
+
+	if (!(block->flags & INCFS_BLOCK_FLAGS_HASH))
+		return -EINVAL;
+
+	bfc = df->df_backing_file_context;
+	mi = df->df_mount_info;
+
+	if (!df)
+		return -ENOENT;
+
+	hash_tree = df->df_hash_tree;
+	sig = df->df_signature;
+	if (!hash_tree || !sig || sig->hash_offset == 0)
+		return -ENOTSUPP;
+
+	hash_area_base = sig->hash_offset;
+	hash_area_size = sig->hash_size;
+	if (hash_area_size < block->block_index * INCFS_DATA_FILE_BLOCK_SIZE
+				+ block->data_len) {
+		/* Hash block goes beyond dedicated hash area of this file. */
+		return -ERANGE;
+	}
+
+	error = mutex_lock_interruptible(&bfc->bc_mutex);
+	if (!error) {
+		error = incfs_write_hash_block_to_backing_file(
+			bfc, range(data, block->data_len), block->block_index,
+			hash_area_base, df->df_blockmap_off, df->df_size);
+		mutex_unlock(&bfc->bc_mutex);
+	}
+	if (!error)
+		atomic_inc(&df->df_hash_blocks_written);
+
+	return error;
+}
+
+static int process_blockmap_md(struct incfs_blockmap *bm,
+			       struct metadata_handler *handler)
+{
+	struct data_file *df = handler->context;
+	int error = 0;
+	loff_t base_off = le64_to_cpu(bm->m_base_offset);
+	u32 block_count = le32_to_cpu(bm->m_block_count);
+
+	if (!df)
+		return -EFAULT;
+
+	if (df->df_data_block_count > block_count)
+		return -EBADMSG;
+
+	df->df_total_block_count = block_count;
+	df->df_blockmap_off = base_off;
+	return error;
+}
+
+static int process_file_signature_md(struct incfs_file_signature *sg,
+				struct metadata_handler *handler)
+{
+	struct data_file *df = handler->context;
+	struct mtree *hash_tree = NULL;
+	int error = 0;
+	struct incfs_df_signature *signature =
+		kzalloc(sizeof(*signature), GFP_NOFS);
+	void *buf = NULL;
+	ssize_t read;
+
+	if (!signature)
+		return -ENOMEM;
+
+	if (!df || !df->df_backing_file_context ||
+	    !df->df_backing_file_context->bc_file) {
+		error = -ENOENT;
+		goto out;
+	}
+
+	signature->hash_offset = le64_to_cpu(sg->sg_hash_tree_offset);
+	signature->hash_size = le32_to_cpu(sg->sg_hash_tree_size);
+	signature->sig_offset = le64_to_cpu(sg->sg_sig_offset);
+	signature->sig_size = le32_to_cpu(sg->sg_sig_size);
+
+	buf = kzalloc(signature->sig_size, GFP_NOFS);
+	if (!buf) {
+		error = -ENOMEM;
+		goto out;
+	}
+
+	read = incfs_kread(df->df_backing_file_context, buf,
+			   signature->sig_size, signature->sig_offset);
+	if (read < 0) {
+		error = read;
+		goto out;
+	}
+
+	if (read != signature->sig_size) {
+		error = -EINVAL;
+		goto out;
+	}
+
+	hash_tree = incfs_alloc_mtree(range(buf, signature->sig_size),
+				      df->df_data_block_count);
+	if (IS_ERR(hash_tree)) {
+		error = PTR_ERR(hash_tree);
+		hash_tree = NULL;
+		goto out;
+	}
+	if (hash_tree->hash_tree_area_size != signature->hash_size) {
+		error = -EINVAL;
+		goto out;
+	}
+	if (signature->hash_size > 0 &&
+	    handler->md_record_offset <= signature->hash_offset) {
+		error = -EINVAL;
+		goto out;
+	}
+	if (handler->md_record_offset <= signature->sig_offset) {
+		error = -EINVAL;
+		goto out;
+	}
+	df->df_hash_tree = hash_tree;
+	hash_tree = NULL;
+	df->df_signature = signature;
+	signature = NULL;
+out:
+	incfs_free_mtree(hash_tree);
+	kfree(signature);
+	kfree(buf);
+
+	return error;
+}
+
+static int process_status_md(struct incfs_status *is,
+			     struct metadata_handler *handler)
+{
+	struct data_file *df = handler->context;
+
+	df->df_initial_data_blocks_written =
+		le32_to_cpu(is->is_data_blocks_written);
+	atomic_set(&df->df_data_blocks_written,
+		   df->df_initial_data_blocks_written);
+
+	df->df_initial_hash_blocks_written =
+		le32_to_cpu(is->is_hash_blocks_written);
+	atomic_set(&df->df_hash_blocks_written,
+		   df->df_initial_hash_blocks_written);
+
+	df->df_status_offset = handler->md_record_offset;
+
+	return 0;
+}
+
+static int incfs_scan_metadata_chain(struct data_file *df)
+{
+	struct metadata_handler *handler = NULL;
+	int result = 0;
+	int records_count = 0;
+	int error = 0;
+	struct backing_file_context *bfc = NULL;
+
+	if (!df || !df->df_backing_file_context)
+		return -EFAULT;
+
+	bfc = df->df_backing_file_context;
+
+	handler = kzalloc(sizeof(*handler), GFP_NOFS);
+	if (!handler)
+		return -ENOMEM;
+
+	handler->md_record_offset = df->df_metadata_off;
+	handler->context = df;
+	handler->handle_blockmap = process_blockmap_md;
+	handler->handle_signature = process_file_signature_md;
+	handler->handle_status = process_status_md;
+
+	while (handler->md_record_offset > 0) {
+		error = incfs_read_next_metadata_record(bfc, handler);
+		if (error) {
+			pr_warn("incfs: Error during reading incfs-metadata record. Offset: %lld Record #%d Error code: %d\n",
+				handler->md_record_offset, records_count + 1,
+				-error);
+			break;
+		}
+		records_count++;
+	}
+	if (error) {
+		pr_warn("incfs: Error %d after reading %d incfs-metadata records.\n",
+			 -error, records_count);
+		result = error;
+	} else
+		result = records_count;
+
+	if (df->df_hash_tree) {
+		int hash_block_count = get_blocks_count_for_size(
+			df->df_hash_tree->hash_tree_area_size);
+
+		if (df->df_data_block_count + hash_block_count !=
+		    df->df_total_block_count)
+			result = -EINVAL;
+	} else if (df->df_data_block_count != df->df_total_block_count)
+		result = -EINVAL;
+
+	kfree(handler);
+	return result;
+}
+
+/*
+ * Quickly checks if there are pending reads with a serial number larger
+ * than a given one.
+ */
+bool incfs_fresh_pending_reads_exist(struct mount_info *mi, int last_number)
+{
+	bool result = false;
+
+	spin_lock(&mi->pending_read_lock);
+	result = (mi->mi_last_pending_read_number > last_number) &&
+		(mi->mi_pending_reads_count > 0);
+	spin_unlock(&mi->pending_read_lock);
+	return result;
+}
+
+int incfs_collect_pending_reads(struct mount_info *mi, int sn_lowerbound,
+				struct incfs_pending_read_info *reads,
+				struct incfs_pending_read_info2 *reads2,
+				int reads_size, int *new_max_sn)
+{
+	int reported_reads = 0;
+	struct pending_read *entry = NULL;
+
+	if (!mi)
+		return -EFAULT;
+
+	if (reads_size <= 0)
+		return 0;
+
+	if (!incfs_fresh_pending_reads_exist(mi, sn_lowerbound))
+		return 0;
+
+	rcu_read_lock();
+
+	list_for_each_entry_rcu(entry, &mi->mi_reads_list_head, mi_reads_list) {
+		if (entry->serial_number <= sn_lowerbound)
+			continue;
+
+		if (reads) {
+			reads[reported_reads].file_id = entry->file_id;
+			reads[reported_reads].block_index = entry->block_index;
+			reads[reported_reads].serial_number =
+				entry->serial_number;
+			reads[reported_reads].timestamp_us =
+				entry->timestamp_us;
+		}
+
+		if (reads2) {
+			reads2[reported_reads].file_id = entry->file_id;
+			reads2[reported_reads].block_index = entry->block_index;
+			reads2[reported_reads].serial_number =
+				entry->serial_number;
+			reads2[reported_reads].timestamp_us =
+				entry->timestamp_us;
+			reads2[reported_reads].uid = entry->uid;
+		}
+
+		if (entry->serial_number > *new_max_sn)
+			*new_max_sn = entry->serial_number;
+
+		reported_reads++;
+		if (reported_reads >= reads_size)
+			break;
+	}
+
+	rcu_read_unlock();
+
+	return reported_reads;
+}
+
+struct read_log_state incfs_get_log_state(struct mount_info *mi)
+{
+	struct read_log *log = &mi->mi_log;
+	struct read_log_state result;
+
+	spin_lock(&log->rl_lock);
+	result = log->rl_head;
+	spin_unlock(&log->rl_lock);
+	return result;
+}
+
+int incfs_get_uncollected_logs_count(struct mount_info *mi,
+				     const struct read_log_state *state)
+{
+	struct read_log *log = &mi->mi_log;
+	u32 generation;
+	u64 head_no, tail_no;
+
+	spin_lock(&log->rl_lock);
+	tail_no = log->rl_tail.current_record_no;
+	head_no = log->rl_head.current_record_no;
+	generation = log->rl_head.generation_id;
+	spin_unlock(&log->rl_lock);
+
+	if (generation != state->generation_id)
+		return head_no - tail_no;
+	else
+		return head_no - max_t(u64, tail_no, state->current_record_no);
+}
+
+int incfs_collect_logged_reads(struct mount_info *mi,
+			       struct read_log_state *state,
+			       struct incfs_pending_read_info *reads,
+			       struct incfs_pending_read_info2 *reads2,
+			       int reads_size)
+{
+	int dst_idx;
+	struct read_log *log = &mi->mi_log;
+	struct read_log_state *head, *tail;
+
+	spin_lock(&log->rl_lock);
+	head = &log->rl_head;
+	tail = &log->rl_tail;
+
+	if (state->generation_id != head->generation_id) {
+		pr_debug("read ptr is wrong generation: %u/%u",
+			 state->generation_id, head->generation_id);
+
+		*state = (struct read_log_state){
+			.generation_id = head->generation_id,
+		};
+	}
+
+	if (state->current_record_no < tail->current_record_no) {
+		pr_debug("read ptr is behind, moving: %u/%u -> %u/%u\n",
+			 (u32)state->next_offset,
+			 (u32)state->current_pass_no,
+			 (u32)tail->next_offset, (u32)tail->current_pass_no);
+
+		*state = *tail;
+	}
+
+	for (dst_idx = 0; dst_idx < reads_size; dst_idx++) {
+		if (state->current_record_no == head->current_record_no)
+			break;
+
+		log_read_one_record(log, state);
+
+		if (reads)
+			reads[dst_idx] = (struct incfs_pending_read_info) {
+				.file_id = state->base_record.file_id,
+				.block_index = state->base_record.block_index,
+				.serial_number = state->current_record_no,
+				.timestamp_us =
+					state->base_record.absolute_ts_us,
+			};
+
+		if (reads2)
+			reads2[dst_idx] = (struct incfs_pending_read_info2) {
+				.file_id = state->base_record.file_id,
+				.block_index = state->base_record.block_index,
+				.serial_number = state->current_record_no,
+				.timestamp_us =
+					state->base_record.absolute_ts_us,
+				.uid = state->base_record.uid,
+			};
+	}
+
+	spin_unlock(&log->rl_lock);
+	return dst_idx;
+}
+
diff --git a/fs/incfs/data_mgmt.h b/fs/incfs/data_mgmt.h
new file mode 100644
index 0000000..77e0f55
--- /dev/null
+++ b/fs/incfs/data_mgmt.h
@@ -0,0 +1,452 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2019 Google LLC
+ */
+#ifndef _INCFS_DATA_MGMT_H
+#define _INCFS_DATA_MGMT_H
+
+#include <linux/cred.h>
+#include <linux/fs.h>
+#include <linux/types.h>
+#include <linux/mutex.h>
+#include <linux/spinlock.h>
+#include <linux/rcupdate.h>
+#include <linux/completion.h>
+#include <linux/wait.h>
+#include <linux/zstd.h>
+#include <crypto/hash.h>
+#include <linux/rwsem.h>
+
+#include <uapi/linux/incrementalfs.h>
+
+#include "internal.h"
+#include "pseudo_files.h"
+
+#define SEGMENTS_PER_FILE 3
+
+enum LOG_RECORD_TYPE {
+	FULL,
+	SAME_FILE,
+	SAME_FILE_NEXT_BLOCK,
+	SAME_FILE_NEXT_BLOCK_SHORT,
+};
+
+struct full_record {
+	enum LOG_RECORD_TYPE type : 2; /* FULL */
+	u32 block_index : 30;
+	incfs_uuid_t file_id;
+	u64 absolute_ts_us;
+	uid_t uid;
+} __packed; /* 28 bytes */
+
+struct same_file_record {
+	enum LOG_RECORD_TYPE type : 2; /* SAME_FILE */
+	u32 block_index : 30;
+	u32 relative_ts_us; /* max 2^32 us ~= 1 hour (1:11:30) */
+} __packed; /* 8 bytes */
+
+struct same_file_next_block {
+	enum LOG_RECORD_TYPE type : 2; /* SAME_FILE_NEXT_BLOCK */
+	u32 relative_ts_us : 30; /* max 2^30 us ~= 15 min (17:50) */
+} __packed; /* 4 bytes */
+
+struct same_file_next_block_short {
+	enum LOG_RECORD_TYPE type : 2; /* SAME_FILE_NEXT_BLOCK_SHORT */
+	u16 relative_ts_us : 14; /* max 2^14 us ~= 16 ms */
+} __packed; /* 2 bytes */
+
+union log_record {
+	struct full_record full_record;
+	struct same_file_record same_file_record;
+	struct same_file_next_block same_file_next_block;
+	struct same_file_next_block_short same_file_next_block_short;
+};
+
+struct read_log_state {
+	/* Log buffer generation id, incremented on configuration changes */
+	u32 generation_id;
+
+	/* Offset in rl_ring_buf to write into. */
+	u32 next_offset;
+
+	/* Current number of writer passes over rl_ring_buf */
+	u32 current_pass_no;
+
+	/* Current full_record to diff against */
+	struct full_record base_record;
+
+	/* Current record number counting from configuration change */
+	u64 current_record_no;
+};
+
+/* A ring buffer to save records about data blocks which were recently read. */
+struct read_log {
+	void *rl_ring_buf;
+
+	int rl_size;
+
+	struct read_log_state rl_head;
+
+	struct read_log_state rl_tail;
+
+	/* A lock to protect the above fields */
+	spinlock_t rl_lock;
+
+	/* A queue of waiters who want to be notified about reads */
+	wait_queue_head_t ml_notif_wq;
+
+	/* A work item to wake up those waiters without slowing down readers */
+	struct delayed_work ml_wakeup_work;
+};
+
+struct mount_options {
+	unsigned int read_timeout_ms;
+	unsigned int readahead_pages;
+	unsigned int read_log_pages;
+	unsigned int read_log_wakeup_count;
+	bool report_uid;
+};
+
+struct mount_info {
+	struct super_block *mi_sb;
+
+	struct path mi_backing_dir_path;
+
+	struct dentry *mi_index_dir;
+
+	struct dentry *mi_incomplete_dir;
+
+	const struct cred *mi_owner;
+
+	struct mount_options mi_options;
+
+	/* This mutex is to be taken before create, rename, delete */
+	struct mutex mi_dir_struct_mutex;
+
+	/*
+	 * A queue of waiters who want to be notified about new pending reads.
+	 */
+	wait_queue_head_t mi_pending_reads_notif_wq;
+
+	/*
+	 * Protects - RCU safe:
+	 *  - reads_list_head
+	 *  - mi_pending_reads_count
+	 *  - mi_last_pending_read_number
+	 *  - data_file_segment.reads_list_head
+	 */
+	spinlock_t pending_read_lock;
+
+	/* List of active pending_read objects */
+	struct list_head mi_reads_list_head;
+
+	/* Total number of items in reads_list_head */
+	int mi_pending_reads_count;
+
+	/*
+	 * Last serial number that was assigned to a pending read.
+	 * 0 means no pending reads have been seen yet.
+	 */
+	int mi_last_pending_read_number;
+
+	/* Temporary buffer for read logger. */
+	struct read_log mi_log;
+
+	/* SELinux needs special xattrs on our pseudo files */
+	struct mem_range pseudo_file_xattr[PSEUDO_FILE_COUNT];
+
+	/* A queue of waiters who want to be notified about blocks_written */
+	wait_queue_head_t mi_blocks_written_notif_wq;
+
+	/* Number of blocks written since mount */
+	atomic_t mi_blocks_written;
+
+	/* Per UID read timeouts */
+	spinlock_t mi_per_uid_read_timeouts_lock;
+	struct incfs_per_uid_read_timeouts *mi_per_uid_read_timeouts;
+	int mi_per_uid_read_timeouts_size;
+
+	/* zstd workspace */
+	struct mutex mi_zstd_workspace_mutex;
+	void *mi_zstd_workspace;
+	ZSTD_DStream *mi_zstd_stream;
+	struct delayed_work mi_zstd_cleanup_work;
+};
+
+struct data_file_block {
+	loff_t db_backing_file_data_offset;
+
+	size_t db_stored_size;
+
+	enum incfs_compression_alg db_comp_alg;
+};
+
+struct pending_read {
+	incfs_uuid_t file_id;
+
+	s64 timestamp_us;
+
+	atomic_t done;
+
+	int block_index;
+
+	int serial_number;
+
+	uid_t uid;
+
+	struct list_head mi_reads_list;
+
+	struct list_head segment_reads_list;
+
+	struct rcu_head rcu;
+};
+
+struct data_file_segment {
+	wait_queue_head_t new_data_arrival_wq;
+
+	/* Protects reads and writes from the blockmap */
+	struct rw_semaphore rwsem;
+
+	/* List of active pending_read objects belonging to this segment */
+	/* Protected by mount_info.pending_reads_mutex */
+	struct list_head reads_list_head;
+};
+
+/*
+ * Extra info associated with a file. Just a few bytes set by a user.
+ */
+struct file_attr {
+	loff_t fa_value_offset;
+
+	size_t fa_value_size;
+
+	u32 fa_crc;
+};
+
+
+struct data_file {
+	struct backing_file_context *df_backing_file_context;
+
+	struct mount_info *df_mount_info;
+
+	incfs_uuid_t df_id;
+
+	/*
+	 * Array of segments used to reduce lock contention for the file.
+	 * Segment is chosen for a block depends on the block's index.
+	 */
+	struct data_file_segment df_segments[SEGMENTS_PER_FILE];
+
+	/* Base offset of the first metadata record. */
+	loff_t df_metadata_off;
+
+	/* Base offset of the block map. */
+	loff_t df_blockmap_off;
+
+	/* File size in bytes */
+	loff_t df_size;
+
+	/* File header flags */
+	u32 df_header_flags;
+
+	/* File size in DATA_FILE_BLOCK_SIZE blocks */
+	int df_data_block_count;
+
+	/* Total number of blocks, data + hash */
+	int df_total_block_count;
+
+	/* For mapped files, the offset into the actual file */
+	loff_t df_mapped_offset;
+
+	/* Number of data blocks written to file */
+	atomic_t df_data_blocks_written;
+
+	/* Number of data blocks in the status block */
+	u32 df_initial_data_blocks_written;
+
+	/* Number of hash blocks written to file */
+	atomic_t df_hash_blocks_written;
+
+	/* Number of hash blocks in the status block */
+	u32 df_initial_hash_blocks_written;
+
+	/* Offset to status metadata header */
+	loff_t df_status_offset;
+
+	struct mtree *df_hash_tree;
+
+	struct incfs_df_signature *df_signature;
+};
+
+struct dir_file {
+	struct mount_info *mount_info;
+
+	struct file *backing_dir;
+};
+
+struct inode_info {
+	struct mount_info *n_mount_info; /* A mount, this file belongs to */
+
+	struct inode *n_backing_inode;
+
+	struct data_file *n_file;
+
+	struct inode n_vfs_inode;
+};
+
+struct dentry_info {
+	struct path backing_path;
+};
+
+enum FILL_PERMISSION {
+	CANT_FILL = 0,
+	CAN_FILL = 1,
+};
+
+struct incfs_file_data {
+	/* Does this file handle have INCFS_IOC_FILL_BLOCKS permission */
+	enum FILL_PERMISSION fd_fill_permission;
+
+	/* If INCFS_IOC_GET_FILLED_BLOCKS has been called, where are we */
+	int fd_get_block_pos;
+
+	/* And how many filled blocks are there up to that point */
+	int fd_filled_data_blocks;
+	int fd_filled_hash_blocks;
+};
+
+struct mount_info *incfs_alloc_mount_info(struct super_block *sb,
+					  struct mount_options *options,
+					  struct path *backing_dir_path);
+
+int incfs_realloc_mount_info(struct mount_info *mi,
+			     struct mount_options *options);
+
+void incfs_free_mount_info(struct mount_info *mi);
+
+char *file_id_to_str(incfs_uuid_t id);
+struct dentry *incfs_lookup_dentry(struct dentry *parent, const char *name);
+struct data_file *incfs_open_data_file(struct mount_info *mi, struct file *bf);
+void incfs_free_data_file(struct data_file *df);
+
+struct dir_file *incfs_open_dir_file(struct mount_info *mi, struct file *bf);
+void incfs_free_dir_file(struct dir_file *dir);
+
+ssize_t incfs_read_data_file_block(struct mem_range dst, struct file *f,
+			int index, u32 min_time_us,
+			u32 min_pending_time_us, u32 max_pending_time_us,
+			struct mem_range tmp);
+
+int incfs_get_filled_blocks(struct data_file *df,
+			    struct incfs_file_data *fd,
+			    struct incfs_get_filled_blocks_args *arg);
+
+int incfs_read_file_signature(struct data_file *df, struct mem_range dst);
+
+int incfs_process_new_data_block(struct data_file *df,
+				 struct incfs_fill_block *block, u8 *data);
+
+int incfs_process_new_hash_block(struct data_file *df,
+				 struct incfs_fill_block *block, u8 *data);
+
+bool incfs_fresh_pending_reads_exist(struct mount_info *mi, int last_number);
+
+/*
+ * Collects pending reads and saves them into the array (reads/reads_size).
+ * Only reads with serial_number > sn_lowerbound are reported.
+ * Returns how many reads were saved into the array.
+ */
+int incfs_collect_pending_reads(struct mount_info *mi, int sn_lowerbound,
+				struct incfs_pending_read_info *reads,
+				struct incfs_pending_read_info2 *reads2,
+				int reads_size, int *new_max_sn);
+
+int incfs_collect_logged_reads(struct mount_info *mi,
+			       struct read_log_state *start_state,
+			       struct incfs_pending_read_info *reads,
+			       struct incfs_pending_read_info2 *reads2,
+			       int reads_size);
+struct read_log_state incfs_get_log_state(struct mount_info *mi);
+int incfs_get_uncollected_logs_count(struct mount_info *mi,
+				     const struct read_log_state *state);
+
+static inline struct inode_info *get_incfs_node(struct inode *inode)
+{
+	if (!inode)
+		return NULL;
+
+	if (inode->i_sb->s_magic != (long) INCFS_MAGIC_NUMBER) {
+		/* This inode doesn't belong to us. */
+		pr_warn_once("incfs: %s on an alien inode.", __func__);
+		return NULL;
+	}
+
+	return container_of(inode, struct inode_info, n_vfs_inode);
+}
+
+static inline struct data_file *get_incfs_data_file(struct file *f)
+{
+	struct inode_info *node = NULL;
+
+	if (!f)
+		return NULL;
+
+	if (!S_ISREG(f->f_inode->i_mode))
+		return NULL;
+
+	node = get_incfs_node(f->f_inode);
+	if (!node)
+		return NULL;
+
+	return node->n_file;
+}
+
+static inline struct dir_file *get_incfs_dir_file(struct file *f)
+{
+	if (!f)
+		return NULL;
+
+	if (!S_ISDIR(f->f_inode->i_mode))
+		return NULL;
+
+	return (struct dir_file *)f->private_data;
+}
+
+/*
+ * Make sure that inode_info.n_file is initialized and inode can be used
+ * for reading and writing data from/to the backing file.
+ */
+int make_inode_ready_for_data_ops(struct mount_info *mi,
+				struct inode *inode,
+				struct file *backing_file);
+
+static inline struct dentry_info *get_incfs_dentry(const struct dentry *d)
+{
+	if (!d)
+		return NULL;
+
+	return (struct dentry_info *)d->d_fsdata;
+}
+
+static inline void get_incfs_backing_path(const struct dentry *d,
+					  struct path *path)
+{
+	struct dentry_info *di = get_incfs_dentry(d);
+
+	if (!di) {
+		*path = (struct path) {};
+		return;
+	}
+
+	*path = di->backing_path;
+	path_get(path);
+}
+
+static inline int get_blocks_count_for_size(u64 size)
+{
+	if (size == 0)
+		return 0;
+	return 1 + (size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+}
+
+#endif /* _INCFS_DATA_MGMT_H */
diff --git a/fs/incfs/format.c b/fs/incfs/format.c
new file mode 100644
index 0000000..d8ceb3f
--- /dev/null
+++ b/fs/incfs/format.c
@@ -0,0 +1,701 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2018 Google LLC
+ */
+#include <linux/fs.h>
+#include <linux/file.h>
+#include <linux/types.h>
+#include <linux/mutex.h>
+#include <linux/mm.h>
+#include <linux/falloc.h>
+#include <linux/slab.h>
+#include <linux/crc32.h>
+#include <linux/kernel.h>
+
+#include "format.h"
+#include "data_mgmt.h"
+
+struct backing_file_context *incfs_alloc_bfc(struct mount_info *mi,
+					     struct file *backing_file)
+{
+	struct backing_file_context *result = NULL;
+
+	result = kzalloc(sizeof(*result), GFP_NOFS);
+	if (!result)
+		return ERR_PTR(-ENOMEM);
+
+	result->bc_file = get_file(backing_file);
+	result->bc_cred = mi->mi_owner;
+	mutex_init(&result->bc_mutex);
+	return result;
+}
+
+void incfs_free_bfc(struct backing_file_context *bfc)
+{
+	if (!bfc)
+		return;
+
+	if (bfc->bc_file)
+		fput(bfc->bc_file);
+
+	mutex_destroy(&bfc->bc_mutex);
+	kfree(bfc);
+}
+
+static loff_t incfs_get_end_offset(struct file *f)
+{
+	/*
+	 * This function assumes that file size and the end-offset
+	 * are the same. This is not always true.
+	 */
+	return i_size_read(file_inode(f));
+}
+
+/*
+ * Truncate the tail of the file to the given length.
+ * Used to rollback partially successful multistep writes.
+ */
+static int truncate_backing_file(struct backing_file_context *bfc,
+				loff_t new_end)
+{
+	struct inode *inode = NULL;
+	struct dentry *dentry = NULL;
+	loff_t old_end = 0;
+	struct iattr attr;
+	int result = 0;
+
+	if (!bfc)
+		return -EFAULT;
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	if (!bfc->bc_file)
+		return -EFAULT;
+
+	old_end = incfs_get_end_offset(bfc->bc_file);
+	if (old_end == new_end)
+		return 0;
+	if (old_end < new_end)
+		return -EINVAL;
+
+	inode = bfc->bc_file->f_inode;
+	dentry = bfc->bc_file->f_path.dentry;
+
+	attr.ia_size = new_end;
+	attr.ia_valid = ATTR_SIZE;
+
+	inode_lock(inode);
+	result = notify_change(dentry, &attr, NULL);
+	inode_unlock(inode);
+
+	return result;
+}
+
+static int write_to_bf(struct backing_file_context *bfc, const void *buf,
+			size_t count, loff_t pos)
+{
+	ssize_t res = incfs_kwrite(bfc, buf, count, pos);
+
+	if (res < 0)
+		return res;
+	if (res != count)
+		return -EIO;
+	return 0;
+}
+
+static int append_zeros_no_fallocate(struct backing_file_context *bfc,
+				     size_t file_size, size_t len)
+{
+	u8 buffer[256] = {};
+	size_t i;
+
+	for (i = 0; i < len; i += sizeof(buffer)) {
+		int to_write = len - i > sizeof(buffer)
+			? sizeof(buffer) : len - i;
+		int err = write_to_bf(bfc, buffer, to_write, file_size + i);
+
+		if (err)
+			return err;
+	}
+
+	return 0;
+}
+
+/* Append a given number of zero bytes to the end of the backing file. */
+static int append_zeros(struct backing_file_context *bfc, size_t len)
+{
+	loff_t file_size = 0;
+	loff_t new_last_byte_offset = 0;
+	int result;
+
+	if (!bfc)
+		return -EFAULT;
+
+	if (len == 0)
+		return 0;
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	/*
+	 * Allocate only one byte at the new desired end of the file.
+	 * It will increase file size and create a zeroed area of
+	 * a given size.
+	 */
+	file_size = incfs_get_end_offset(bfc->bc_file);
+	new_last_byte_offset = file_size + len - 1;
+	result = vfs_fallocate(bfc->bc_file, 0, new_last_byte_offset, 1);
+	if (result != -EOPNOTSUPP)
+		return result;
+
+	return append_zeros_no_fallocate(bfc, file_size, len);
+}
+
+/*
+ * Append a given metadata record to the backing file and update a previous
+ * record to add the new record the the metadata list.
+ */
+static int append_md_to_backing_file(struct backing_file_context *bfc,
+			      struct incfs_md_header *record)
+{
+	int result = 0;
+	loff_t record_offset;
+	loff_t file_pos;
+	__le64 new_md_offset;
+	size_t record_size;
+
+	if (!bfc || !record)
+		return -EFAULT;
+
+	if (bfc->bc_last_md_record_offset < 0)
+		return -EINVAL;
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	record_size = le16_to_cpu(record->h_record_size);
+	file_pos = incfs_get_end_offset(bfc->bc_file);
+	record->h_next_md_offset = 0;
+
+	/* Write the metadata record to the end of the backing file */
+	record_offset = file_pos;
+	new_md_offset = cpu_to_le64(record_offset);
+	result = write_to_bf(bfc, record, record_size, file_pos);
+	if (result)
+		return result;
+
+	/* Update next metadata offset in a previous record or a superblock. */
+	if (bfc->bc_last_md_record_offset) {
+		/*
+		 * Find a place in the previous md record where new record's
+		 * offset needs to be saved.
+		 */
+		file_pos = bfc->bc_last_md_record_offset +
+			offsetof(struct incfs_md_header, h_next_md_offset);
+	} else {
+		/*
+		 * No metadata yet, file a place to update in the
+		 * file_header.
+		 */
+		file_pos = offsetof(struct incfs_file_header,
+				    fh_first_md_offset);
+	}
+	result = write_to_bf(bfc, &new_md_offset, sizeof(new_md_offset),
+			     file_pos);
+	if (result)
+		return result;
+
+	bfc->bc_last_md_record_offset = record_offset;
+	return result;
+}
+
+/*
+ * Reserve 0-filled space for the blockmap body, and append
+ * incfs_blockmap metadata record pointing to it.
+ */
+int incfs_write_blockmap_to_backing_file(struct backing_file_context *bfc,
+					 u32 block_count)
+{
+	struct incfs_blockmap blockmap = {};
+	int result = 0;
+	loff_t file_end = 0;
+	size_t map_size = block_count * sizeof(struct incfs_blockmap_entry);
+
+	if (!bfc)
+		return -EFAULT;
+
+	blockmap.m_header.h_md_entry_type = INCFS_MD_BLOCK_MAP;
+	blockmap.m_header.h_record_size = cpu_to_le16(sizeof(blockmap));
+	blockmap.m_header.h_next_md_offset = cpu_to_le64(0);
+	blockmap.m_block_count = cpu_to_le32(block_count);
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	/* Reserve 0-filled space for the blockmap body in the backing file. */
+	file_end = incfs_get_end_offset(bfc->bc_file);
+	result = append_zeros(bfc, map_size);
+	if (result)
+		return result;
+
+	/* Write blockmap metadata record pointing to the body written above. */
+	blockmap.m_base_offset = cpu_to_le64(file_end);
+	result = append_md_to_backing_file(bfc, &blockmap.m_header);
+	if (result)
+		/* Error, rollback file changes */
+		truncate_backing_file(bfc, file_end);
+
+	return result;
+}
+
+int incfs_write_signature_to_backing_file(struct backing_file_context *bfc,
+					  struct mem_range sig, u32 tree_size)
+{
+	struct incfs_file_signature sg = {};
+	int result = 0;
+	loff_t rollback_pos = 0;
+	loff_t tree_area_pos = 0;
+	size_t alignment = 0;
+
+	if (!bfc)
+		return -EFAULT;
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	rollback_pos = incfs_get_end_offset(bfc->bc_file);
+
+	sg.sg_header.h_md_entry_type = INCFS_MD_SIGNATURE;
+	sg.sg_header.h_record_size = cpu_to_le16(sizeof(sg));
+	sg.sg_header.h_next_md_offset = cpu_to_le64(0);
+	if (sig.data != NULL && sig.len > 0) {
+		loff_t pos = incfs_get_end_offset(bfc->bc_file);
+
+		sg.sg_sig_size = cpu_to_le32(sig.len);
+		sg.sg_sig_offset = cpu_to_le64(pos);
+
+		result = write_to_bf(bfc, sig.data, sig.len, pos);
+		if (result)
+			goto err;
+	}
+
+	tree_area_pos = incfs_get_end_offset(bfc->bc_file);
+	if (tree_size > 0) {
+		if (tree_size > 5 * INCFS_DATA_FILE_BLOCK_SIZE) {
+			/*
+			 * If hash tree is big enough, it makes sense to
+			 * align in the backing file for faster access.
+			 */
+			loff_t offset = round_up(tree_area_pos, PAGE_SIZE);
+
+			alignment = offset - tree_area_pos;
+			tree_area_pos = offset;
+		}
+
+		/*
+		 * If root hash is not the only hash in the tree.
+		 * reserve 0-filled space for the tree.
+		 */
+		result = append_zeros(bfc, tree_size + alignment);
+		if (result)
+			goto err;
+
+		sg.sg_hash_tree_size = cpu_to_le32(tree_size);
+		sg.sg_hash_tree_offset = cpu_to_le64(tree_area_pos);
+	}
+
+	/* Write a hash tree metadata record pointing to the hash tree above. */
+	result = append_md_to_backing_file(bfc, &sg.sg_header);
+err:
+	if (result)
+		/* Error, rollback file changes */
+		truncate_backing_file(bfc, rollback_pos);
+	return result;
+}
+
+static int write_new_status_to_backing_file(struct backing_file_context *bfc,
+				       u32 data_blocks_written,
+				       u32 hash_blocks_written)
+{
+	int result;
+	loff_t rollback_pos;
+	struct incfs_status is = {
+		.is_header = {
+			.h_md_entry_type = INCFS_MD_STATUS,
+			.h_record_size = cpu_to_le16(sizeof(is)),
+		},
+		.is_data_blocks_written = cpu_to_le32(data_blocks_written),
+		.is_hash_blocks_written = cpu_to_le32(hash_blocks_written),
+	};
+
+	if (!bfc)
+		return -EFAULT;
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+	rollback_pos = incfs_get_end_offset(bfc->bc_file);
+	result = append_md_to_backing_file(bfc, &is.is_header);
+	if (result)
+		truncate_backing_file(bfc, rollback_pos);
+
+	return result;
+}
+
+int incfs_write_status_to_backing_file(struct backing_file_context *bfc,
+				       loff_t status_offset,
+				       u32 data_blocks_written,
+				       u32 hash_blocks_written)
+{
+	struct incfs_status is;
+	int result;
+
+	if (status_offset == 0)
+		return write_new_status_to_backing_file(bfc,
+				data_blocks_written, hash_blocks_written);
+
+	result = incfs_kread(bfc, &is, sizeof(is), status_offset);
+	if (result != sizeof(is))
+		return -EIO;
+
+	is.is_data_blocks_written = cpu_to_le32(data_blocks_written);
+	is.is_hash_blocks_written = cpu_to_le32(hash_blocks_written);
+	result = incfs_kwrite(bfc, &is, sizeof(is), status_offset);
+	if (result != sizeof(is))
+		return -EIO;
+
+	return 0;
+}
+
+/*
+ * Write a backing file header
+ * It should always be called only on empty file.
+ * fh.fh_first_md_offset is 0 for now, but will be updated
+ * once first metadata record is added.
+ */
+int incfs_write_fh_to_backing_file(struct backing_file_context *bfc,
+				   incfs_uuid_t *uuid, u64 file_size)
+{
+	struct incfs_file_header fh = {};
+	loff_t file_pos = 0;
+
+	if (!bfc)
+		return -EFAULT;
+
+	fh.fh_magic = cpu_to_le64(INCFS_MAGIC_NUMBER);
+	fh.fh_version = cpu_to_le64(INCFS_FORMAT_CURRENT_VER);
+	fh.fh_header_size = cpu_to_le16(sizeof(fh));
+	fh.fh_first_md_offset = cpu_to_le64(0);
+	fh.fh_data_block_size = cpu_to_le16(INCFS_DATA_FILE_BLOCK_SIZE);
+
+	fh.fh_file_size = cpu_to_le64(file_size);
+	fh.fh_uuid = *uuid;
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	file_pos = incfs_get_end_offset(bfc->bc_file);
+	if (file_pos != 0)
+		return -EEXIST;
+
+	return write_to_bf(bfc, &fh, sizeof(fh), file_pos);
+}
+
+/*
+ * Write a backing file header for a mapping file
+ * It should always be called only on empty file.
+ */
+int incfs_write_mapping_fh_to_backing_file(struct backing_file_context *bfc,
+				incfs_uuid_t *uuid, u64 file_size, u64 offset)
+{
+	struct incfs_file_header fh = {};
+	loff_t file_pos = 0;
+
+	if (!bfc)
+		return -EFAULT;
+
+	fh.fh_magic = cpu_to_le64(INCFS_MAGIC_NUMBER);
+	fh.fh_version = cpu_to_le64(INCFS_FORMAT_CURRENT_VER);
+	fh.fh_header_size = cpu_to_le16(sizeof(fh));
+	fh.fh_original_offset = cpu_to_le64(offset);
+	fh.fh_data_block_size = cpu_to_le16(INCFS_DATA_FILE_BLOCK_SIZE);
+
+	fh.fh_mapped_file_size = cpu_to_le64(file_size);
+	fh.fh_original_uuid = *uuid;
+	fh.fh_flags = cpu_to_le32(INCFS_FILE_MAPPED);
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	file_pos = incfs_get_end_offset(bfc->bc_file);
+	if (file_pos != 0)
+		return -EEXIST;
+
+	return write_to_bf(bfc, &fh, sizeof(fh), file_pos);
+}
+
+/* Write a given data block and update file's blockmap to point it. */
+int incfs_write_data_block_to_backing_file(struct backing_file_context *bfc,
+				     struct mem_range block, int block_index,
+				     loff_t bm_base_off, u16 flags)
+{
+	struct incfs_blockmap_entry bm_entry = {};
+	int result = 0;
+	loff_t data_offset = 0;
+	loff_t bm_entry_off =
+		bm_base_off + sizeof(struct incfs_blockmap_entry) * block_index;
+
+	if (!bfc)
+		return -EFAULT;
+
+	if (block.len >= (1 << 16) || block_index < 0)
+		return -EINVAL;
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	data_offset = incfs_get_end_offset(bfc->bc_file);
+	if (data_offset <= bm_entry_off) {
+		/* Blockmap entry is beyond the file's end. It is not normal. */
+		return -EINVAL;
+	}
+
+	/* Write the block data at the end of the backing file. */
+	result = write_to_bf(bfc, block.data, block.len, data_offset);
+	if (result)
+		return result;
+
+	/* Update the blockmap to point to the newly written data. */
+	bm_entry.me_data_offset_lo = cpu_to_le32((u32)data_offset);
+	bm_entry.me_data_offset_hi = cpu_to_le16((u16)(data_offset >> 32));
+	bm_entry.me_data_size = cpu_to_le16((u16)block.len);
+	bm_entry.me_flags = cpu_to_le16(flags);
+
+	return write_to_bf(bfc, &bm_entry, sizeof(bm_entry),
+				bm_entry_off);
+}
+
+int incfs_write_hash_block_to_backing_file(struct backing_file_context *bfc,
+					   struct mem_range block,
+					   int block_index,
+					   loff_t hash_area_off,
+					   loff_t bm_base_off,
+					   loff_t file_size)
+{
+	struct incfs_blockmap_entry bm_entry = {};
+	int result;
+	loff_t data_offset = 0;
+	loff_t file_end = 0;
+	loff_t bm_entry_off =
+		bm_base_off +
+		sizeof(struct incfs_blockmap_entry) *
+			(block_index + get_blocks_count_for_size(file_size));
+
+	if (!bfc)
+		return -EFAULT;
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	data_offset = hash_area_off + block_index * INCFS_DATA_FILE_BLOCK_SIZE;
+	file_end = incfs_get_end_offset(bfc->bc_file);
+	if (data_offset + block.len > file_end) {
+		/* Block is located beyond the file's end. It is not normal. */
+		return -EINVAL;
+	}
+
+	result = write_to_bf(bfc, block.data, block.len, data_offset);
+	if (result)
+		return result;
+
+	bm_entry.me_data_offset_lo = cpu_to_le32((u32)data_offset);
+	bm_entry.me_data_offset_hi = cpu_to_le16((u16)(data_offset >> 32));
+	bm_entry.me_data_size = cpu_to_le16(INCFS_DATA_FILE_BLOCK_SIZE);
+
+	return write_to_bf(bfc, &bm_entry, sizeof(bm_entry), bm_entry_off);
+}
+
+int incfs_read_blockmap_entry(struct backing_file_context *bfc, int block_index,
+			loff_t bm_base_off,
+			struct incfs_blockmap_entry *bm_entry)
+{
+	int error = incfs_read_blockmap_entries(bfc, bm_entry, block_index, 1,
+						bm_base_off);
+
+	if (error < 0)
+		return error;
+
+	if (error == 0)
+		return -EIO;
+
+	if (error != 1)
+		return -EFAULT;
+
+	return 0;
+}
+
+int incfs_read_blockmap_entries(struct backing_file_context *bfc,
+		struct incfs_blockmap_entry *entries,
+		int start_index, int blocks_number,
+		loff_t bm_base_off)
+{
+	loff_t bm_entry_off =
+		bm_base_off + sizeof(struct incfs_blockmap_entry) * start_index;
+	const size_t bytes_to_read = sizeof(struct incfs_blockmap_entry)
+					* blocks_number;
+	int result = 0;
+
+	if (!bfc || !entries)
+		return -EFAULT;
+
+	if (start_index < 0 || bm_base_off <= 0)
+		return -ENODATA;
+
+	result = incfs_kread(bfc, entries, bytes_to_read, bm_entry_off);
+	if (result < 0)
+		return result;
+	return result / sizeof(*entries);
+}
+
+int incfs_read_file_header(struct backing_file_context *bfc,
+			   loff_t *first_md_off, incfs_uuid_t *uuid,
+			   u64 *file_size, u32 *flags)
+{
+	ssize_t bytes_read = 0;
+	struct incfs_file_header fh = {};
+
+	if (!bfc || !first_md_off)
+		return -EFAULT;
+
+	bytes_read = incfs_kread(bfc, &fh, sizeof(fh), 0);
+	if (bytes_read < 0)
+		return bytes_read;
+
+	if (bytes_read < sizeof(fh))
+		return -EBADMSG;
+
+	if (le64_to_cpu(fh.fh_magic) != INCFS_MAGIC_NUMBER)
+		return -EILSEQ;
+
+	if (le64_to_cpu(fh.fh_version) > INCFS_FORMAT_CURRENT_VER)
+		return -EILSEQ;
+
+	if (le16_to_cpu(fh.fh_data_block_size) != INCFS_DATA_FILE_BLOCK_SIZE)
+		return -EILSEQ;
+
+	if (le16_to_cpu(fh.fh_header_size) != sizeof(fh))
+		return -EILSEQ;
+
+	if (first_md_off)
+		*first_md_off = le64_to_cpu(fh.fh_first_md_offset);
+	if (uuid)
+		*uuid = fh.fh_uuid;
+	if (file_size)
+		*file_size = le64_to_cpu(fh.fh_file_size);
+	if (flags)
+		*flags = le32_to_cpu(fh.fh_flags);
+	return 0;
+}
+
+/*
+ * Read through metadata records from the backing file one by one
+ * and call provided metadata handlers.
+ */
+int incfs_read_next_metadata_record(struct backing_file_context *bfc,
+			      struct metadata_handler *handler)
+{
+	const ssize_t max_md_size = INCFS_MAX_METADATA_RECORD_SIZE;
+	ssize_t bytes_read = 0;
+	size_t md_record_size = 0;
+	loff_t next_record = 0;
+	int res = 0;
+	struct incfs_md_header *md_hdr = NULL;
+
+	if (!bfc || !handler)
+		return -EFAULT;
+
+	if (handler->md_record_offset == 0)
+		return -EPERM;
+
+	memset(&handler->md_buffer, 0, max_md_size);
+	bytes_read = incfs_kread(bfc, &handler->md_buffer, max_md_size,
+				 handler->md_record_offset);
+	if (bytes_read < 0)
+		return bytes_read;
+	if (bytes_read < sizeof(*md_hdr))
+		return -EBADMSG;
+
+	md_hdr = &handler->md_buffer.md_header;
+	next_record = le64_to_cpu(md_hdr->h_next_md_offset);
+	md_record_size = le16_to_cpu(md_hdr->h_record_size);
+
+	if (md_record_size > max_md_size) {
+		pr_warn("incfs: The record is too large. Size: %ld",
+				md_record_size);
+		return -EBADMSG;
+	}
+
+	if (bytes_read < md_record_size) {
+		pr_warn("incfs: The record hasn't been fully read.");
+		return -EBADMSG;
+	}
+
+	if (next_record <= handler->md_record_offset && next_record != 0) {
+		pr_warn("incfs: Next record (%lld) points back in file.",
+			next_record);
+		return -EBADMSG;
+	}
+
+	switch (md_hdr->h_md_entry_type) {
+	case INCFS_MD_NONE:
+		break;
+	case INCFS_MD_BLOCK_MAP:
+		if (handler->handle_blockmap)
+			res = handler->handle_blockmap(
+				&handler->md_buffer.blockmap, handler);
+		break;
+	case INCFS_MD_FILE_ATTR:
+		/*
+		 * File attrs no longer supported, ignore section for
+		 * compatibility
+		 */
+		break;
+	case INCFS_MD_SIGNATURE:
+		if (handler->handle_signature)
+			res = handler->handle_signature(
+				&handler->md_buffer.signature, handler);
+		break;
+	case INCFS_MD_STATUS:
+		if (handler->handle_status)
+			res = handler->handle_status(
+				&handler->md_buffer.status, handler);
+		break;
+	default:
+		res = -ENOTSUPP;
+		break;
+	}
+
+	if (!res) {
+		if (next_record == 0) {
+			/*
+			 * Zero offset for the next record means that the last
+			 * metadata record has just been processed.
+			 */
+			bfc->bc_last_md_record_offset =
+				handler->md_record_offset;
+		}
+		handler->md_prev_record_offset = handler->md_record_offset;
+		handler->md_record_offset = next_record;
+	}
+	return res;
+}
+
+ssize_t incfs_kread(struct backing_file_context *bfc, void *buf, size_t size,
+		    loff_t pos)
+{
+	const struct cred *old_cred = override_creds(bfc->bc_cred);
+	int ret = kernel_read(bfc->bc_file, buf, size, &pos);
+
+	revert_creds(old_cred);
+	return ret;
+}
+
+ssize_t incfs_kwrite(struct backing_file_context *bfc, const void *buf,
+		     size_t size, loff_t pos)
+{
+	const struct cred *old_cred = override_creds(bfc->bc_cred);
+	int ret = kernel_write(bfc->bc_file, buf, size, &pos);
+
+	revert_creds(old_cred);
+	return ret;
+}
diff --git a/fs/incfs/format.h b/fs/incfs/format.h
new file mode 100644
index 0000000..13a69ab
--- /dev/null
+++ b/fs/incfs/format.h
@@ -0,0 +1,365 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2018 Google LLC
+ */
+
+/*
+ * Overview
+ * --------
+ * The backbone of the incremental-fs ondisk format is an append only linked
+ * list of metadata blocks. Each metadata block contains an offset of the next
+ * one. These blocks describe files and directories on the
+ * file system. They also represent actions of adding and removing file names
+ * (hard links).
+ *
+ * Every time incremental-fs instance is mounted, it reads through this list
+ * to recreate filesystem's state in memory. An offset of the first record in
+ * the metadata list is stored in the superblock at the beginning of the backing
+ * file.
+ *
+ * Most of the backing file is taken by data areas and blockmaps.
+ * Since data blocks can be compressed and have different sizes,
+ * single per-file data area can't be pre-allocated. That's why blockmaps are
+ * needed in order to find a location and size of each data block in
+ * the backing file. Each time a file is created, a corresponding block map is
+ * allocated to store future offsets of data blocks.
+ *
+ * Whenever a data block is given by data loader to incremental-fs:
+ *   - A data area with the given block is appended to the end of
+ *     the backing file.
+ *   - A record in the blockmap for the given block index is updated to reflect
+ *     its location, size, and compression algorithm.
+
+ * Metadata records
+ * ----------------
+ * incfs_blockmap - metadata record that specifies size and location
+ *                           of a blockmap area for a given file. This area
+ *                           contains an array of incfs_blockmap_entry-s.
+ * incfs_file_signature - metadata record that specifies where file signature
+ *                           and its hash tree can be found in the backing file.
+ *
+ * incfs_file_attr - metadata record that specifies where additional file
+ *		        attributes blob can be found.
+ *
+ * Metadata header
+ * ---------------
+ * incfs_md_header - header of a metadata record. It's always a part
+ *                   of other structures and served purpose of metadata
+ *                   bookkeeping.
+ *
+ *              +-----------------------------------------------+       ^
+ *              |            incfs_md_header                    |       |
+ *              | 1. type of body(BLOCKMAP, FILE_ATTR..)        |       |
+ *              | 2. size of the whole record header + body     |       |
+ *              | 3. CRC the whole record header + body         |       |
+ *              | 4. offset of the previous md record           |]------+
+ *              | 5. offset of the next md record (md link)     |]---+
+ *              +-----------------------------------------------+    |
+ *              |  Metadata record body with useful data        |    |
+ *              +-----------------------------------------------+    |
+ *                                                                   +--->
+ *
+ * Other ondisk structures
+ * -----------------------
+ * incfs_super_block - backing file header
+ * incfs_blockmap_entry - a record in a blockmap area that describes size
+ *                       and location of a data block.
+ * Data blocks dont have any particular structure, they are written to the
+ * backing file in a raw form as they come from a data loader.
+ *
+ * Backing file layout
+ * -------------------
+ *
+ *
+ *              +-------------------------------------------+
+ *              |            incfs_file_header              |]---+
+ *              +-------------------------------------------+    |
+ *              |                 metadata                  |<---+
+ *              |           incfs_file_signature            |]---+
+ *              +-------------------------------------------+    |
+ *                        .........................              |
+ *              +-------------------------------------------+    |   metadata
+ *     +------->|               blockmap area               |    |  list links
+ *     |        |          [incfs_blockmap_entry]           |    |
+ *     |        |          [incfs_blockmap_entry]           |    |
+ *     |        |          [incfs_blockmap_entry]           |    |
+ *     |    +--[|          [incfs_blockmap_entry]           |    |
+ *     |    |   |          [incfs_blockmap_entry]           |    |
+ *     |    |   |          [incfs_blockmap_entry]           |    |
+ *     |    |   +-------------------------------------------+    |
+ *     |    |             .........................              |
+ *     |    |   +-------------------------------------------+    |
+ *     |    |   |                 metadata                  |<---+
+ *     +----|--[|               incfs_blockmap              |]---+
+ *          |   +-------------------------------------------+    |
+ *          |             .........................              |
+ *          |   +-------------------------------------------+    |
+ *          +-->|                 data block                |    |
+ *              +-------------------------------------------+    |
+ *                        .........................              |
+ *              +-------------------------------------------+    |
+ *              |                 metadata                  |<---+
+ *              |              incfs_file_attr              |
+ *              +-------------------------------------------+
+ */
+#ifndef _INCFS_FORMAT_H
+#define _INCFS_FORMAT_H
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <uapi/linux/incrementalfs.h>
+
+#include "internal.h"
+
+#define INCFS_MAX_NAME_LEN 255
+#define INCFS_FORMAT_V1 1
+#define INCFS_FORMAT_CURRENT_VER INCFS_FORMAT_V1
+
+enum incfs_metadata_type {
+	INCFS_MD_NONE = 0,
+	INCFS_MD_BLOCK_MAP = 1,
+	INCFS_MD_FILE_ATTR = 2,
+	INCFS_MD_SIGNATURE = 3,
+	INCFS_MD_STATUS = 4,
+};
+
+enum incfs_file_header_flags {
+	INCFS_FILE_MAPPED = 1 << 1,
+};
+
+/* Header included at the beginning of all metadata records on the disk. */
+struct incfs_md_header {
+	__u8 h_md_entry_type;
+
+	/*
+	 * Size of the metadata record.
+	 * (e.g. inode, dir entry etc) not just this struct.
+	 */
+	__le16 h_record_size;
+
+	/*
+	 * Was: CRC32 of the metadata record.
+	 * (e.g. inode, dir entry etc) not just this struct.
+	 */
+	__le32 h_unused1;
+
+	/* Offset of the next metadata entry if any */
+	__le64 h_next_md_offset;
+
+	/* Was: Offset of the previous metadata entry if any */
+	__le64 h_unused2;
+
+} __packed;
+
+/* Backing file header */
+struct incfs_file_header {
+	/* Magic number: INCFS_MAGIC_NUMBER */
+	__le64 fh_magic;
+
+	/* Format version: INCFS_FORMAT_CURRENT_VER */
+	__le64 fh_version;
+
+	/* sizeof(incfs_file_header) */
+	__le16 fh_header_size;
+
+	/* INCFS_DATA_FILE_BLOCK_SIZE */
+	__le16 fh_data_block_size;
+
+	/* File flags, from incfs_file_header_flags */
+	__le32 fh_flags;
+
+	union {
+		/* Standard incfs file */
+		struct {
+			/* Offset of the first metadata record */
+			__le64 fh_first_md_offset;
+
+			/* Full size of the file's content */
+			__le64 fh_file_size;
+
+			/* File uuid */
+			incfs_uuid_t fh_uuid;
+		};
+
+		/* Mapped file - INCFS_FILE_MAPPED set in fh_flags */
+		struct {
+			/* Offset in original file */
+			__le64 fh_original_offset;
+
+			/* Full size of the file's content */
+			__le64 fh_mapped_file_size;
+
+			/* Original file's uuid */
+			incfs_uuid_t fh_original_uuid;
+		};
+	};
+} __packed;
+
+enum incfs_block_map_entry_flags {
+	INCFS_BLOCK_COMPRESSED_LZ4 = 1,
+	INCFS_BLOCK_COMPRESSED_ZSTD = 2,
+
+	/* Reserve 3 bits for compression alg */
+	INCFS_BLOCK_COMPRESSED_MASK = 7,
+};
+
+/* Block map entry pointing to an actual location of the data block. */
+struct incfs_blockmap_entry {
+	/* Offset of the actual data block. Lower 32 bits */
+	__le32 me_data_offset_lo;
+
+	/* Offset of the actual data block. Higher 16 bits */
+	__le16 me_data_offset_hi;
+
+	/* How many bytes the data actually occupies in the backing file */
+	__le16 me_data_size;
+
+	/* Block flags from incfs_block_map_entry_flags */
+	__le16 me_flags;
+} __packed;
+
+/* Metadata record for locations of file blocks. Type = INCFS_MD_BLOCK_MAP */
+struct incfs_blockmap {
+	struct incfs_md_header m_header;
+
+	/* Base offset of the array of incfs_blockmap_entry */
+	__le64 m_base_offset;
+
+	/* Size of the map entry array in blocks */
+	__le32 m_block_count;
+} __packed;
+
+/* Metadata record for file signature. Type = INCFS_MD_SIGNATURE */
+struct incfs_file_signature {
+	struct incfs_md_header sg_header;
+
+	__le32 sg_sig_size; /* The size of the signature. */
+
+	__le64 sg_sig_offset; /* Signature's offset in the backing file */
+
+	__le32 sg_hash_tree_size; /* The size of the hash tree. */
+
+	__le64 sg_hash_tree_offset; /* Hash tree offset in the backing file */
+} __packed;
+
+/* In memory version of above */
+struct incfs_df_signature {
+	u32 sig_size;
+	u64 sig_offset;
+	u32 hash_size;
+	u64 hash_offset;
+};
+
+struct incfs_status {
+	struct incfs_md_header is_header;
+
+	__le32 is_data_blocks_written; /* Number of data blocks written */
+
+	__le32 is_hash_blocks_written; /* Number of hash blocks written */
+
+	__le32 is_dummy[6]; /* Spare fields */
+} __packed;
+
+/* State of the backing file. */
+struct backing_file_context {
+	/* Protects writes to bc_file */
+	struct mutex bc_mutex;
+
+	/* File object to read data from */
+	struct file *bc_file;
+
+	/*
+	 * Offset of the last known metadata record in the backing file.
+	 * 0 means there are no metadata records.
+	 */
+	loff_t bc_last_md_record_offset;
+
+	/*
+	 * Credentials to set before reads/writes
+	 * Note that this is a pointer to the mount_info mi_owner field so
+	 * there is no need to get/put the creds
+	 */
+	const struct cred *bc_cred;
+};
+
+struct metadata_handler {
+	loff_t md_record_offset;
+	loff_t md_prev_record_offset;
+	void *context;
+
+	union {
+		struct incfs_md_header md_header;
+		struct incfs_blockmap blockmap;
+		struct incfs_file_signature signature;
+		struct incfs_status status;
+	} md_buffer;
+
+	int (*handle_blockmap)(struct incfs_blockmap *bm,
+			       struct metadata_handler *handler);
+	int (*handle_signature)(struct incfs_file_signature *sig,
+				 struct metadata_handler *handler);
+	int (*handle_status)(struct incfs_status *sig,
+				 struct metadata_handler *handler);
+};
+#define INCFS_MAX_METADATA_RECORD_SIZE \
+	FIELD_SIZEOF(struct metadata_handler, md_buffer)
+
+/* Backing file context management */
+struct mount_info;
+struct backing_file_context *incfs_alloc_bfc(struct mount_info *mi,
+					     struct file *backing_file);
+
+void incfs_free_bfc(struct backing_file_context *bfc);
+
+/* Writing stuff */
+int incfs_write_blockmap_to_backing_file(struct backing_file_context *bfc,
+					 u32 block_count);
+
+int incfs_write_fh_to_backing_file(struct backing_file_context *bfc,
+				   incfs_uuid_t *uuid, u64 file_size);
+
+int incfs_write_mapping_fh_to_backing_file(struct backing_file_context *bfc,
+				incfs_uuid_t *uuid, u64 file_size, u64 offset);
+
+int incfs_write_data_block_to_backing_file(struct backing_file_context *bfc,
+					   struct mem_range block,
+					   int block_index, loff_t bm_base_off,
+					   u16 flags);
+
+int incfs_write_hash_block_to_backing_file(struct backing_file_context *bfc,
+					   struct mem_range block,
+					   int block_index,
+					   loff_t hash_area_off,
+					   loff_t bm_base_off,
+					   loff_t file_size);
+
+int incfs_write_signature_to_backing_file(struct backing_file_context *bfc,
+					  struct mem_range sig, u32 tree_size);
+
+int incfs_write_status_to_backing_file(struct backing_file_context *bfc,
+				       loff_t status_offset,
+				       u32 data_blocks_written,
+				       u32 hash_blocks_written);
+
+/* Reading stuff */
+int incfs_read_file_header(struct backing_file_context *bfc,
+			   loff_t *first_md_off, incfs_uuid_t *uuid,
+			   u64 *file_size, u32 *flags);
+
+int incfs_read_blockmap_entry(struct backing_file_context *bfc, int block_index,
+			      loff_t bm_base_off,
+			      struct incfs_blockmap_entry *bm_entry);
+
+int incfs_read_blockmap_entries(struct backing_file_context *bfc,
+		struct incfs_blockmap_entry *entries,
+		int start_index, int blocks_number,
+		loff_t bm_base_off);
+
+int incfs_read_next_metadata_record(struct backing_file_context *bfc,
+				    struct metadata_handler *handler);
+
+ssize_t incfs_kread(struct backing_file_context *bfc, void *buf, size_t size,
+		    loff_t pos);
+ssize_t incfs_kwrite(struct backing_file_context *bfc, const void *buf,
+		     size_t size, loff_t pos);
+
+#endif /* _INCFS_FORMAT_H */
diff --git a/fs/incfs/integrity.c b/fs/incfs/integrity.c
new file mode 100644
index 0000000..bce319e
--- /dev/null
+++ b/fs/incfs/integrity.c
@@ -0,0 +1,235 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2019 Google LLC
+ */
+#include <crypto/sha.h>
+#include <crypto/hash.h>
+#include <linux/err.h>
+#include <linux/version.h>
+
+#include "integrity.h"
+
+struct incfs_hash_alg *incfs_get_hash_alg(enum incfs_hash_tree_algorithm id)
+{
+	static struct incfs_hash_alg sha256 = {
+		.name = "sha256",
+		.digest_size = SHA256_DIGEST_SIZE,
+		.id = INCFS_HASH_TREE_SHA256
+	};
+	struct incfs_hash_alg *result = NULL;
+	struct crypto_shash *shash;
+
+	if (id == INCFS_HASH_TREE_SHA256) {
+		BUILD_BUG_ON(INCFS_MAX_HASH_SIZE < SHA256_DIGEST_SIZE);
+		result = &sha256;
+	}
+
+	if (result == NULL)
+		return ERR_PTR(-ENOENT);
+
+	/* pairs with cmpxchg_release() below */
+	shash = smp_load_acquire(&result->shash);
+	if (shash)
+		return result;
+
+	shash = crypto_alloc_shash(result->name, 0, 0);
+	if (IS_ERR(shash)) {
+		int err = PTR_ERR(shash);
+
+		pr_err("Can't allocate hash alg %s, error code:%d",
+			result->name, err);
+		return ERR_PTR(err);
+	}
+
+	/* pairs with smp_load_acquire() above */
+	if (cmpxchg_release(&result->shash, NULL, shash) != NULL)
+		crypto_free_shash(shash);
+
+	return result;
+}
+
+struct signature_info {
+	u32 version;
+	enum incfs_hash_tree_algorithm hash_algorithm;
+	u8 log2_blocksize;
+	struct mem_range salt;
+	struct mem_range root_hash;
+};
+
+static bool read_u32(u8 **p, u8 *top, u32 *result)
+{
+	if (*p + sizeof(u32) > top)
+		return false;
+
+	*result = le32_to_cpu(*(__le32 *)*p);
+	*p += sizeof(u32);
+	return true;
+}
+
+static bool read_u8(u8 **p, u8 *top, u8 *result)
+{
+	if (*p + sizeof(u8) > top)
+		return false;
+
+	*result = *(u8 *)*p;
+	*p += sizeof(u8);
+	return true;
+}
+
+static bool read_mem_range(u8 **p, u8 *top, struct mem_range *range)
+{
+	u32 len;
+
+	if (!read_u32(p, top, &len) || *p + len > top)
+		return false;
+
+	range->len = len;
+	range->data = *p;
+	*p += len;
+	return true;
+}
+
+static int incfs_parse_signature(struct mem_range signature,
+				 struct signature_info *si)
+{
+	u8 *p = signature.data;
+	u8 *top = signature.data + signature.len;
+	u32 hash_section_size;
+
+	if (signature.len > INCFS_MAX_SIGNATURE_SIZE)
+		return -EINVAL;
+
+	if (!read_u32(&p, top, &si->version) ||
+	    si->version != INCFS_SIGNATURE_VERSION)
+		return -EINVAL;
+
+	if (!read_u32(&p, top, &hash_section_size) ||
+	    p + hash_section_size > top)
+		return -EINVAL;
+	top = p + hash_section_size;
+
+	if (!read_u32(&p, top, &si->hash_algorithm) ||
+	    si->hash_algorithm != INCFS_HASH_TREE_SHA256)
+		return -EINVAL;
+
+	if (!read_u8(&p, top, &si->log2_blocksize) || si->log2_blocksize != 12)
+		return -EINVAL;
+
+	if (!read_mem_range(&p, top, &si->salt))
+		return -EINVAL;
+
+	if (!read_mem_range(&p, top, &si->root_hash))
+		return -EINVAL;
+
+	if (p != top)
+		return -EINVAL;
+
+	return 0;
+}
+
+struct mtree *incfs_alloc_mtree(struct mem_range signature,
+				int data_block_count)
+{
+	int error;
+	struct signature_info si;
+	struct mtree *result = NULL;
+	struct incfs_hash_alg *hash_alg = NULL;
+	int hash_per_block;
+	int lvl;
+	int total_blocks = 0;
+	int blocks_in_level[INCFS_MAX_MTREE_LEVELS];
+	int blocks = data_block_count;
+
+	if (data_block_count <= 0)
+		return ERR_PTR(-EINVAL);
+
+	error = incfs_parse_signature(signature, &si);
+	if (error)
+		return ERR_PTR(error);
+
+	hash_alg = incfs_get_hash_alg(si.hash_algorithm);
+	if (IS_ERR(hash_alg))
+		return ERR_PTR(PTR_ERR(hash_alg));
+
+	if (si.root_hash.len < hash_alg->digest_size)
+		return ERR_PTR(-EINVAL);
+
+	result = kzalloc(sizeof(*result), GFP_NOFS);
+	if (!result)
+		return ERR_PTR(-ENOMEM);
+
+	result->alg = hash_alg;
+	hash_per_block = INCFS_DATA_FILE_BLOCK_SIZE / result->alg->digest_size;
+
+	/* Calculating tree geometry. */
+	/* First pass: calculate how many blocks in each tree level. */
+	for (lvl = 0; blocks > 1; lvl++) {
+		if (lvl >= INCFS_MAX_MTREE_LEVELS) {
+			pr_err("incfs: too much data in mtree");
+			goto err;
+		}
+
+		blocks = (blocks + hash_per_block - 1) / hash_per_block;
+		blocks_in_level[lvl] = blocks;
+		total_blocks += blocks;
+	}
+	result->depth = lvl;
+	result->hash_tree_area_size = total_blocks * INCFS_DATA_FILE_BLOCK_SIZE;
+	if (result->hash_tree_area_size > INCFS_MAX_HASH_AREA_SIZE)
+		goto err;
+
+	blocks = 0;
+	/* Second pass: calculate offset of each level. 0th level goes last. */
+	for (lvl = 0; lvl < result->depth; lvl++) {
+		u32 suboffset;
+
+		blocks += blocks_in_level[lvl];
+		suboffset = (total_blocks - blocks)
+					* INCFS_DATA_FILE_BLOCK_SIZE;
+
+		result->hash_level_suboffset[lvl] = suboffset;
+	}
+
+	/* Root hash is stored separately from the rest of the tree. */
+	memcpy(result->root_hash, si.root_hash.data, hash_alg->digest_size);
+	return result;
+
+err:
+	kfree(result);
+	return ERR_PTR(-E2BIG);
+}
+
+void incfs_free_mtree(struct mtree *tree)
+{
+	kfree(tree);
+}
+
+int incfs_calc_digest(struct incfs_hash_alg *alg, struct mem_range data,
+			struct mem_range digest)
+{
+	SHASH_DESC_ON_STACK(desc, alg->shash);
+
+	if (!alg || !alg->shash || !data.data || !digest.data)
+		return -EFAULT;
+
+	if (alg->digest_size > digest.len)
+		return -EINVAL;
+
+	desc->tfm = alg->shash;
+
+	if (data.len < INCFS_DATA_FILE_BLOCK_SIZE) {
+		int err;
+		void *buf = kzalloc(INCFS_DATA_FILE_BLOCK_SIZE, GFP_NOFS);
+
+		if (!buf)
+			return -ENOMEM;
+
+		memcpy(buf, data.data, data.len);
+		err = crypto_shash_digest(desc, buf, INCFS_DATA_FILE_BLOCK_SIZE,
+					  digest.data);
+		kfree(buf);
+		return err;
+	}
+	return crypto_shash_digest(desc, data.data, data.len, digest.data);
+}
+
diff --git a/fs/incfs/integrity.h b/fs/incfs/integrity.h
new file mode 100644
index 0000000..cf79b64
--- /dev/null
+++ b/fs/incfs/integrity.h
@@ -0,0 +1,56 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2019 Google LLC
+ */
+#ifndef _INCFS_INTEGRITY_H
+#define _INCFS_INTEGRITY_H
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <crypto/hash.h>
+
+#include <uapi/linux/incrementalfs.h>
+
+#include "internal.h"
+
+#define INCFS_MAX_MTREE_LEVELS 8
+#define INCFS_MAX_HASH_AREA_SIZE (1280 * 1024 * 1024)
+
+struct incfs_hash_alg {
+	const char *name;
+	int digest_size;
+	enum incfs_hash_tree_algorithm id;
+
+	struct crypto_shash *shash;
+};
+
+/* Merkle tree structure. */
+struct mtree {
+	struct incfs_hash_alg *alg;
+
+	u8 root_hash[INCFS_MAX_HASH_SIZE];
+
+	/* Offset of each hash level in the hash area. */
+	u32 hash_level_suboffset[INCFS_MAX_MTREE_LEVELS];
+
+	u32 hash_tree_area_size;
+
+	/* Number of levels in hash_level_suboffset */
+	int depth;
+};
+
+struct incfs_hash_alg *incfs_get_hash_alg(enum incfs_hash_tree_algorithm id);
+
+struct mtree *incfs_alloc_mtree(struct mem_range signature,
+				int data_block_count);
+
+void incfs_free_mtree(struct mtree *tree);
+
+size_t incfs_get_mtree_depth(enum incfs_hash_tree_algorithm alg, loff_t size);
+
+size_t incfs_get_mtree_hash_count(enum incfs_hash_tree_algorithm alg,
+					loff_t size);
+
+int incfs_calc_digest(struct incfs_hash_alg *alg, struct mem_range data,
+			struct mem_range digest);
+
+#endif /* _INCFS_INTEGRITY_H */
diff --git a/fs/incfs/internal.h b/fs/incfs/internal.h
new file mode 100644
index 0000000..0a85eae
--- /dev/null
+++ b/fs/incfs/internal.h
@@ -0,0 +1,21 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2018 Google LLC
+ */
+#ifndef _INCFS_INTERNAL_H
+#define _INCFS_INTERNAL_H
+#include <linux/types.h>
+
+struct mem_range {
+	u8 *data;
+	size_t len;
+};
+
+static inline struct mem_range range(u8 *data, size_t len)
+{
+	return (struct mem_range){ .data = data, .len = len };
+}
+
+#define LOCK_REQUIRED(lock)  WARN_ON_ONCE(!mutex_is_locked(&lock))
+
+#endif /* _INCFS_INTERNAL_H */
diff --git a/fs/incfs/main.c b/fs/incfs/main.c
new file mode 100644
index 0000000..23cf3fe
--- /dev/null
+++ b/fs/incfs/main.c
@@ -0,0 +1,116 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2018 Google LLC
+ */
+#include <linux/fs.h>
+#include <linux/init.h>
+#include <linux/module.h>
+
+#include <uapi/linux/incrementalfs.h>
+
+#include "vfs.h"
+
+#define INCFS_NODE_FEATURES "features"
+
+static struct file_system_type incfs_fs_type = {
+	.owner = THIS_MODULE,
+	.name = INCFS_NAME,
+	.mount = incfs_mount_fs,
+	.kill_sb = incfs_kill_sb,
+	.fs_flags = 0
+};
+
+static struct kobject *sysfs_root, *featurefs_root;
+
+static ssize_t supported(struct kobject *kobj,
+			 struct kobj_attribute *attr, char *buff)
+{
+	return snprintf(buff, PAGE_SIZE, "supported\n");
+}
+
+typedef ssize_t (*const attr_show)(struct kobject *kobj,
+				   struct kobj_attribute *attr, char *buff);
+
+#define _DECLARE_FEATURE_FLAG(name)					\
+	static attr_show name##_show = supported;			\
+	static struct kobj_attribute name##_attr = __ATTR_RO(name)
+
+#define DECLARE_FEATURE_FLAG(name) _DECLARE_FEATURE_FLAG(name)
+
+DECLARE_FEATURE_FLAG(corefs);
+DECLARE_FEATURE_FLAG(zstd);
+DECLARE_FEATURE_FLAG(v2);
+
+static struct attribute *attributes[] = {
+	&corefs_attr.attr,
+	&zstd_attr.attr,
+	&v2_attr.attr,
+	NULL,
+};
+
+static const struct attribute_group attr_group = {
+	.attrs = attributes,
+};
+
+static int __init init_sysfs(void)
+{
+	int res = 0;
+
+	sysfs_root = kobject_create_and_add(INCFS_NAME, fs_kobj);
+	if (!sysfs_root)
+		return -ENOMEM;
+
+	featurefs_root = kobject_create_and_add(INCFS_NODE_FEATURES,
+						sysfs_root);
+	if (!featurefs_root)
+		return -ENOMEM;
+
+	res = sysfs_create_group(featurefs_root, &attr_group);
+	if (res) {
+		kobject_put(sysfs_root);
+		sysfs_root = NULL;
+	}
+	return res;
+}
+
+static void cleanup_sysfs(void)
+{
+	if (featurefs_root) {
+		sysfs_remove_group(featurefs_root, &attr_group);
+		kobject_put(featurefs_root);
+		featurefs_root = NULL;
+	}
+
+	if (sysfs_root) {
+		kobject_put(sysfs_root);
+		sysfs_root = NULL;
+	}
+}
+
+static int __init init_incfs_module(void)
+{
+	int err = 0;
+
+	err = init_sysfs();
+	if (err)
+		return err;
+
+	err = register_filesystem(&incfs_fs_type);
+	if (err)
+		cleanup_sysfs();
+
+	return err;
+}
+
+static void __exit cleanup_incfs_module(void)
+{
+	cleanup_sysfs();
+	unregister_filesystem(&incfs_fs_type);
+}
+
+module_init(init_incfs_module);
+module_exit(cleanup_incfs_module);
+
+MODULE_LICENSE("GPL v2");
+MODULE_AUTHOR("Eugene Zemtsov <ezemtsov@google.com>");
+MODULE_DESCRIPTION("Incremental File System");
diff --git a/fs/incfs/pseudo_files.c b/fs/incfs/pseudo_files.c
new file mode 100644
index 0000000..fb792a4
--- /dev/null
+++ b/fs/incfs/pseudo_files.c
@@ -0,0 +1,1265 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2020 Google LLC
+ */
+
+#include <linux/file.h>
+#include <linux/fs.h>
+#include <linux/namei.h>
+#include <linux/poll.h>
+#include <linux/syscalls.h>
+
+#include <uapi/linux/incrementalfs.h>
+
+#include "pseudo_files.h"
+
+#include "data_mgmt.h"
+#include "format.h"
+#include "integrity.h"
+#include "vfs.h"
+
+#define READ_WRITE_FILE_MODE 0666
+
+static bool is_pseudo_filename(struct mem_range name);
+
+/*******************************************************************************
+ * .pending_reads pseudo file definition
+ ******************************************************************************/
+#define INCFS_PENDING_READS_INODE 2
+static const char pending_reads_file_name[] = INCFS_PENDING_READS_FILENAME;
+
+/* State of an open .pending_reads file, unique for each file descriptor. */
+struct pending_reads_state {
+	/* A serial number of the last pending read obtained from this file. */
+	int last_pending_read_sn;
+};
+
+static ssize_t pending_reads_read(struct file *f, char __user *buf, size_t len,
+			    loff_t *ppos)
+{
+	struct pending_reads_state *pr_state = f->private_data;
+	struct mount_info *mi = get_mount_info(file_superblock(f));
+	bool report_uid;
+	unsigned long page = 0;
+	struct incfs_pending_read_info *reads_buf = NULL;
+	struct incfs_pending_read_info2 *reads_buf2 = NULL;
+	size_t record_size;
+	size_t reads_to_collect;
+	int last_known_read_sn = READ_ONCE(pr_state->last_pending_read_sn);
+	int new_max_sn = last_known_read_sn;
+	int reads_collected = 0;
+	ssize_t result = 0;
+
+	if (!mi)
+		return -EFAULT;
+
+	report_uid = mi->mi_options.report_uid;
+	record_size = report_uid ? sizeof(*reads_buf2) : sizeof(*reads_buf);
+	reads_to_collect = len / record_size;
+
+	if (!incfs_fresh_pending_reads_exist(mi, last_known_read_sn))
+		return 0;
+
+	page = get_zeroed_page(GFP_NOFS);
+	if (!page)
+		return -ENOMEM;
+
+	if (report_uid)
+		reads_buf2 = (struct incfs_pending_read_info2 *) page;
+	else
+		reads_buf = (struct incfs_pending_read_info *) page;
+
+	reads_to_collect =
+		min_t(size_t, PAGE_SIZE / record_size, reads_to_collect);
+
+	reads_collected = incfs_collect_pending_reads(mi, last_known_read_sn,
+				reads_buf, reads_buf2, reads_to_collect,
+				&new_max_sn);
+
+	if (reads_collected < 0) {
+		result = reads_collected;
+		goto out;
+	}
+
+	/*
+	 * Just to make sure that we don't accidentally copy more data
+	 * to reads buffer than userspace can handle.
+	 */
+	reads_collected = min_t(size_t, reads_collected, reads_to_collect);
+	result = reads_collected * record_size;
+
+	/* Copy reads info to the userspace buffer */
+	if (copy_to_user(buf, (void *)page, result)) {
+		result = -EFAULT;
+		goto out;
+	}
+
+	WRITE_ONCE(pr_state->last_pending_read_sn, new_max_sn);
+	*ppos = 0;
+
+out:
+	free_page(page);
+	return result;
+}
+
+static __poll_t pending_reads_poll(struct file *file, poll_table *wait)
+{
+	struct pending_reads_state *state = file->private_data;
+	struct mount_info *mi = get_mount_info(file_superblock(file));
+	__poll_t ret = 0;
+
+	poll_wait(file, &mi->mi_pending_reads_notif_wq, wait);
+	if (incfs_fresh_pending_reads_exist(mi,
+					    state->last_pending_read_sn))
+		ret = EPOLLIN | EPOLLRDNORM;
+
+	return ret;
+}
+
+static int pending_reads_open(struct inode *inode, struct file *file)
+{
+	struct pending_reads_state *state = NULL;
+
+	state = kzalloc(sizeof(*state), GFP_NOFS);
+	if (!state)
+		return -ENOMEM;
+
+	file->private_data = state;
+	return 0;
+}
+
+static int pending_reads_release(struct inode *inode, struct file *file)
+{
+	kfree(file->private_data);
+	return 0;
+}
+
+static long ioctl_permit_fill(struct file *f, void __user *arg)
+{
+	struct incfs_permit_fill __user *usr_permit_fill = arg;
+	struct incfs_permit_fill permit_fill;
+	long error = 0;
+	struct file *file = NULL;
+	struct incfs_file_data *fd;
+
+	if (copy_from_user(&permit_fill, usr_permit_fill, sizeof(permit_fill)))
+		return -EFAULT;
+
+	file = fget(permit_fill.file_descriptor);
+	if (IS_ERR(file))
+		return PTR_ERR(file);
+
+	if (file->f_op != &incfs_file_ops) {
+		error = -EPERM;
+		goto out;
+	}
+
+	if (file->f_inode->i_sb != f->f_inode->i_sb) {
+		error = -EPERM;
+		goto out;
+	}
+
+	fd = file->private_data;
+
+	switch (fd->fd_fill_permission) {
+	case CANT_FILL:
+		fd->fd_fill_permission = CAN_FILL;
+		break;
+
+	case CAN_FILL:
+		pr_debug("CAN_FILL already set");
+		break;
+
+	default:
+		pr_warn("Invalid file private data");
+		error = -EFAULT;
+		goto out;
+	}
+
+out:
+	fput(file);
+	return error;
+}
+
+static int chmod(struct dentry *dentry, umode_t mode)
+{
+	struct inode *inode = dentry->d_inode;
+	struct inode *delegated_inode = NULL;
+	struct iattr newattrs;
+	int error;
+
+retry_deleg:
+	inode_lock(inode);
+	newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO);
+	newattrs.ia_valid = ATTR_MODE | ATTR_CTIME;
+	error = notify_change(dentry, &newattrs, &delegated_inode);
+	inode_unlock(inode);
+	if (delegated_inode) {
+		error = break_deleg_wait(&delegated_inode);
+		if (!error)
+			goto retry_deleg;
+	}
+	return error;
+}
+
+static bool incfs_equal_ranges(struct mem_range lhs, struct mem_range rhs)
+{
+	if (lhs.len != rhs.len)
+		return false;
+	return memcmp(lhs.data, rhs.data, lhs.len) == 0;
+}
+
+static int validate_name(char *file_name)
+{
+	struct mem_range name = range(file_name, strlen(file_name));
+	int i = 0;
+
+	if (name.len > INCFS_MAX_NAME_LEN)
+		return -ENAMETOOLONG;
+
+	if (is_pseudo_filename(name))
+		return -EINVAL;
+
+	for (i = 0; i < name.len; i++)
+		if (name.data[i] == '/')
+			return -EINVAL;
+
+	return 0;
+}
+
+static int dir_relative_path_resolve(
+			struct mount_info *mi,
+			const char __user *relative_path,
+			struct path *result_path)
+{
+	struct path *base_path = &mi->mi_backing_dir_path;
+	int dir_fd = get_unused_fd_flags(0);
+	struct file *dir_f = NULL;
+	int error = 0;
+
+	if (dir_fd < 0)
+		return dir_fd;
+
+	dir_f = dentry_open(base_path, O_RDONLY | O_NOATIME, current_cred());
+
+	if (IS_ERR(dir_f)) {
+		error = PTR_ERR(dir_f);
+		goto out;
+	}
+	fd_install(dir_fd, dir_f);
+
+	if (!relative_path) {
+		/* No relative path given, just return the base dir. */
+		*result_path = *base_path;
+		path_get(result_path);
+		goto out;
+	}
+
+	error = user_path_at_empty(dir_fd, relative_path,
+		LOOKUP_FOLLOW | LOOKUP_DIRECTORY, result_path, NULL);
+
+out:
+	ksys_close(dir_fd);
+	if (error)
+		pr_debug("incfs: %s %d\n", __func__, error);
+	return error;
+}
+
+static struct mem_range incfs_copy_signature_info_from_user(u8 __user *original,
+							    u64 size)
+{
+	u8 *result;
+
+	if (!original)
+		return range(NULL, 0);
+
+	if (size > INCFS_MAX_SIGNATURE_SIZE)
+		return range(ERR_PTR(-EFAULT), 0);
+
+	result = kzalloc(size, GFP_NOFS | __GFP_COMP);
+	if (!result)
+		return range(ERR_PTR(-ENOMEM), 0);
+
+	if (copy_from_user(result, original, size)) {
+		kfree(result);
+		return range(ERR_PTR(-EFAULT), 0);
+	}
+
+	return range(result, size);
+}
+
+static int init_new_file(struct mount_info *mi, struct dentry *dentry,
+			 incfs_uuid_t *uuid, u64 size, struct mem_range attr,
+			 u8 __user *user_signature_info, u64 signature_size)
+{
+	struct path path = {};
+	struct file *new_file;
+	int error = 0;
+	struct backing_file_context *bfc = NULL;
+	u32 block_count;
+	struct mem_range raw_signature = { NULL };
+	struct mtree *hash_tree = NULL;
+
+	if (!mi || !dentry || !uuid)
+		return -EFAULT;
+
+	/* Resize newly created file to its true size. */
+	path = (struct path) {
+		.mnt = mi->mi_backing_dir_path.mnt,
+		.dentry = dentry
+	};
+
+	new_file = dentry_open(&path, O_RDWR | O_NOATIME | O_LARGEFILE,
+			       current_cred());
+
+	if (IS_ERR(new_file)) {
+		error = PTR_ERR(new_file);
+		goto out;
+	}
+
+	bfc = incfs_alloc_bfc(mi, new_file);
+	fput(new_file);
+	if (IS_ERR(bfc)) {
+		error = PTR_ERR(bfc);
+		bfc = NULL;
+		goto out;
+	}
+
+	mutex_lock(&bfc->bc_mutex);
+	error = incfs_write_fh_to_backing_file(bfc, uuid, size);
+	if (error)
+		goto out;
+
+	block_count = (u32)get_blocks_count_for_size(size);
+
+	if (user_signature_info) {
+		raw_signature = incfs_copy_signature_info_from_user(
+			user_signature_info, signature_size);
+
+		if (IS_ERR(raw_signature.data)) {
+			error = PTR_ERR(raw_signature.data);
+			raw_signature.data = NULL;
+			goto out;
+		}
+
+		hash_tree = incfs_alloc_mtree(raw_signature, block_count);
+		if (IS_ERR(hash_tree)) {
+			error = PTR_ERR(hash_tree);
+			hash_tree = NULL;
+			goto out;
+		}
+
+		error = incfs_write_signature_to_backing_file(
+			bfc, raw_signature, hash_tree->hash_tree_area_size);
+		if (error)
+			goto out;
+
+		block_count += get_blocks_count_for_size(
+			hash_tree->hash_tree_area_size);
+	}
+
+	if (block_count)
+		error = incfs_write_blockmap_to_backing_file(bfc, block_count);
+
+	if (error)
+		goto out;
+out:
+	if (bfc) {
+		mutex_unlock(&bfc->bc_mutex);
+		incfs_free_bfc(bfc);
+	}
+	incfs_free_mtree(hash_tree);
+	kfree(raw_signature.data);
+
+	if (error)
+		pr_debug("incfs: %s error: %d\n", __func__, error);
+	return error;
+}
+
+static long ioctl_create_file(struct mount_info *mi,
+			struct incfs_new_file_args __user *usr_args)
+{
+	struct incfs_new_file_args args;
+	char *file_id_str = NULL;
+	struct dentry *index_file_dentry = NULL;
+	struct dentry *named_file_dentry = NULL;
+	struct dentry *incomplete_file_dentry = NULL;
+	struct path parent_dir_path = {};
+	struct inode *index_dir_inode = NULL;
+	__le64 size_attr_value = 0;
+	char *file_name = NULL;
+	char *attr_value = NULL;
+	int error = 0;
+	bool locked = false;
+	bool index_linked = false;
+	bool name_linked = false;
+	bool incomplete_linked = false;
+
+	if (!mi || !mi->mi_index_dir || !mi->mi_incomplete_dir) {
+		error = -EFAULT;
+		goto out;
+	}
+
+	if (copy_from_user(&args, usr_args, sizeof(args)) > 0) {
+		error = -EFAULT;
+		goto out;
+	}
+
+	file_name = strndup_user(u64_to_user_ptr(args.file_name), PATH_MAX);
+	if (IS_ERR(file_name)) {
+		error = PTR_ERR(file_name);
+		file_name = NULL;
+		goto out;
+	}
+
+	error = validate_name(file_name);
+	if (error)
+		goto out;
+
+	file_id_str = file_id_to_str(args.file_id);
+	if (!file_id_str) {
+		error = -ENOMEM;
+		goto out;
+	}
+
+	error = mutex_lock_interruptible(&mi->mi_dir_struct_mutex);
+	if (error)
+		goto out;
+	locked = true;
+
+	/* Find a directory to put the file into. */
+	error = dir_relative_path_resolve(mi,
+			u64_to_user_ptr(args.directory_path),
+			&parent_dir_path);
+	if (error)
+		goto out;
+
+	if (parent_dir_path.dentry == mi->mi_index_dir) {
+		/* Can't create a file directly inside .index */
+		error = -EBUSY;
+		goto out;
+	}
+
+	if (parent_dir_path.dentry == mi->mi_incomplete_dir) {
+		/* Can't create a file directly inside .incomplete */
+		error = -EBUSY;
+		goto out;
+	}
+
+	/* Look up a dentry in the parent dir. It should be negative. */
+	named_file_dentry = incfs_lookup_dentry(parent_dir_path.dentry,
+					file_name);
+	if (!named_file_dentry) {
+		error = -EFAULT;
+		goto out;
+	}
+	if (IS_ERR(named_file_dentry)) {
+		error = PTR_ERR(named_file_dentry);
+		named_file_dentry = NULL;
+		goto out;
+	}
+	if (d_really_is_positive(named_file_dentry)) {
+		/* File with this path already exists. */
+		error = -EEXIST;
+		goto out;
+	}
+
+	/* Look up a dentry in the incomplete dir. It should be negative. */
+	incomplete_file_dentry = incfs_lookup_dentry(mi->mi_incomplete_dir,
+					file_id_str);
+	if (!incomplete_file_dentry) {
+		error = -EFAULT;
+		goto out;
+	}
+	if (IS_ERR(incomplete_file_dentry)) {
+		error = PTR_ERR(incomplete_file_dentry);
+		incomplete_file_dentry = NULL;
+		goto out;
+	}
+	if (d_really_is_positive(incomplete_file_dentry)) {
+		/* File with this path already exists. */
+		error = -EEXIST;
+		goto out;
+	}
+
+	/* Look up a dentry in the .index dir. It should be negative. */
+	index_file_dentry = incfs_lookup_dentry(mi->mi_index_dir, file_id_str);
+	if (!index_file_dentry) {
+		error = -EFAULT;
+		goto out;
+	}
+	if (IS_ERR(index_file_dentry)) {
+		error = PTR_ERR(index_file_dentry);
+		index_file_dentry = NULL;
+		goto out;
+	}
+	if (d_really_is_positive(index_file_dentry)) {
+		/* File with this ID already exists in index. */
+		error = -EEXIST;
+		goto out;
+	}
+
+	/* Creating a file in the .index dir. */
+	index_dir_inode = d_inode(mi->mi_index_dir);
+	inode_lock_nested(index_dir_inode, I_MUTEX_PARENT);
+	error = vfs_create(index_dir_inode, index_file_dentry, args.mode | 0222,
+			   true);
+	inode_unlock(index_dir_inode);
+
+	if (error)
+		goto out;
+	if (!d_really_is_positive(index_file_dentry)) {
+		error = -EINVAL;
+		goto out;
+	}
+
+	error = chmod(index_file_dentry, args.mode | 0222);
+	if (error) {
+		pr_debug("incfs: chmod err: %d\n", error);
+		goto out;
+	}
+
+	/* Save the file's ID as an xattr for easy fetching in future. */
+	error = vfs_setxattr(index_file_dentry, INCFS_XATTR_ID_NAME,
+		file_id_str, strlen(file_id_str), XATTR_CREATE);
+	if (error) {
+		pr_debug("incfs: vfs_setxattr err:%d\n", error);
+		goto out;
+	}
+
+	/* Save the file's size as an xattr for easy fetching in future. */
+	size_attr_value = cpu_to_le64(args.size);
+	error = vfs_setxattr(index_file_dentry, INCFS_XATTR_SIZE_NAME,
+		(char *)&size_attr_value, sizeof(size_attr_value),
+		XATTR_CREATE);
+	if (error) {
+		pr_debug("incfs: vfs_setxattr err:%d\n", error);
+		goto out;
+	}
+
+	/* Save the file's attribute as an xattr */
+	if (args.file_attr_len && args.file_attr) {
+		if (args.file_attr_len > INCFS_MAX_FILE_ATTR_SIZE) {
+			error = -E2BIG;
+			goto out;
+		}
+
+		attr_value = kmalloc(args.file_attr_len, GFP_NOFS);
+		if (!attr_value) {
+			error = -ENOMEM;
+			goto out;
+		}
+
+		if (copy_from_user(attr_value,
+				u64_to_user_ptr(args.file_attr),
+				args.file_attr_len) > 0) {
+			error = -EFAULT;
+			goto out;
+		}
+
+		error = vfs_setxattr(index_file_dentry,
+				INCFS_XATTR_METADATA_NAME,
+				attr_value, args.file_attr_len,
+				XATTR_CREATE);
+
+		if (error)
+			goto out;
+	}
+
+	/* Initializing a newly created file. */
+	error = init_new_file(mi, index_file_dentry, &args.file_id, args.size,
+			      range(attr_value, args.file_attr_len),
+			      (u8 __user *)args.signature_info,
+			      args.signature_size);
+	if (error)
+		goto out;
+	index_linked = true;
+
+	/* Linking a file with its real name from the requested dir. */
+	error = incfs_link(index_file_dentry, named_file_dentry);
+	if (error)
+		goto out;
+	name_linked = true;
+
+	if (args.size) {
+		/* Linking a file with its incomplete entry */
+		error = incfs_link(index_file_dentry, incomplete_file_dentry);
+		if (error)
+			goto out;
+		incomplete_linked = true;
+	}
+
+out:
+	if (error) {
+		pr_debug("incfs: %s err:%d\n", __func__, error);
+		if (index_linked)
+			incfs_unlink(index_file_dentry);
+		if (name_linked)
+			incfs_unlink(named_file_dentry);
+		if (incomplete_linked)
+			incfs_unlink(incomplete_file_dentry);
+	}
+
+	kfree(file_id_str);
+	kfree(file_name);
+	kfree(attr_value);
+	dput(named_file_dentry);
+	dput(index_file_dentry);
+	dput(incomplete_file_dentry);
+	path_put(&parent_dir_path);
+	if (locked)
+		mutex_unlock(&mi->mi_dir_struct_mutex);
+	return error;
+}
+
+static int init_new_mapped_file(struct mount_info *mi, struct dentry *dentry,
+			 incfs_uuid_t *uuid, u64 size, u64 offset)
+{
+	struct path path = {};
+	struct file *new_file;
+	int error = 0;
+	struct backing_file_context *bfc = NULL;
+
+	if (!mi || !dentry || !uuid)
+		return -EFAULT;
+
+	/* Resize newly created file to its true size. */
+	path = (struct path) {
+		.mnt = mi->mi_backing_dir_path.mnt,
+		.dentry = dentry
+	};
+	new_file = dentry_open(&path, O_RDWR | O_NOATIME | O_LARGEFILE,
+			       current_cred());
+
+	if (IS_ERR(new_file)) {
+		error = PTR_ERR(new_file);
+		goto out;
+	}
+
+	bfc = incfs_alloc_bfc(mi, new_file);
+	fput(new_file);
+	if (IS_ERR(bfc)) {
+		error = PTR_ERR(bfc);
+		bfc = NULL;
+		goto out;
+	}
+
+	mutex_lock(&bfc->bc_mutex);
+	error = incfs_write_mapping_fh_to_backing_file(bfc, uuid, size, offset);
+	if (error)
+		goto out;
+
+out:
+	if (bfc) {
+		mutex_unlock(&bfc->bc_mutex);
+		incfs_free_bfc(bfc);
+	}
+
+	if (error)
+		pr_debug("incfs: %s error: %d\n", __func__, error);
+	return error;
+}
+
+static long ioctl_create_mapped_file(struct mount_info *mi, void __user *arg)
+{
+	struct incfs_create_mapped_file_args __user *args_usr_ptr = arg;
+	struct incfs_create_mapped_file_args args = {};
+	char *file_name;
+	int error = 0;
+	struct path parent_dir_path = {};
+	char *source_file_name = NULL;
+	struct dentry *source_file_dentry = NULL;
+	u64 source_file_size;
+	struct dentry *file_dentry = NULL;
+	struct inode *parent_inode;
+	__le64 size_attr_value;
+
+	if (copy_from_user(&args, args_usr_ptr, sizeof(args)) > 0)
+		return -EINVAL;
+
+	file_name = strndup_user(u64_to_user_ptr(args.file_name), PATH_MAX);
+	if (IS_ERR(file_name)) {
+		error = PTR_ERR(file_name);
+		file_name = NULL;
+		goto out;
+	}
+
+	error = validate_name(file_name);
+	if (error)
+		goto out;
+
+	if (args.source_offset % INCFS_DATA_FILE_BLOCK_SIZE) {
+		error = -EINVAL;
+		goto out;
+	}
+
+	/* Validate file mapping is in range */
+	source_file_name = file_id_to_str(args.source_file_id);
+	if (!source_file_name) {
+		pr_warn("Failed to alloc source_file_name\n");
+		error = -ENOMEM;
+		goto out;
+	}
+
+	source_file_dentry = incfs_lookup_dentry(mi->mi_index_dir,
+						       source_file_name);
+	if (!source_file_dentry) {
+		pr_warn("Source file does not exist\n");
+		error = -EINVAL;
+		goto out;
+	}
+	if (IS_ERR(source_file_dentry)) {
+		pr_warn("Error opening source file\n");
+		error = PTR_ERR(source_file_dentry);
+		source_file_dentry = NULL;
+		goto out;
+	}
+	if (!d_really_is_positive(source_file_dentry)) {
+		pr_warn("Source file dentry negative\n");
+		error = -EINVAL;
+		goto out;
+	}
+
+	error = vfs_getxattr(source_file_dentry, INCFS_XATTR_SIZE_NAME,
+			     (char *)&size_attr_value, sizeof(size_attr_value));
+	if (error < 0)
+		goto out;
+
+	if (error != sizeof(size_attr_value)) {
+		pr_warn("Mapped file has no size attr\n");
+		error = -EINVAL;
+		goto out;
+	}
+
+	source_file_size = le64_to_cpu(size_attr_value);
+	if (args.source_offset + args.size > source_file_size) {
+		pr_warn("Mapped file out of range\n");
+		error = -EINVAL;
+		goto out;
+	}
+
+	/* Find a directory to put the file into. */
+	error = dir_relative_path_resolve(mi,
+			u64_to_user_ptr(args.directory_path),
+			&parent_dir_path);
+	if (error)
+		goto out;
+
+	if (parent_dir_path.dentry == mi->mi_index_dir) {
+		/* Can't create a file directly inside .index */
+		error = -EBUSY;
+		goto out;
+	}
+
+	/* Look up a dentry in the parent dir. It should be negative. */
+	file_dentry = incfs_lookup_dentry(parent_dir_path.dentry,
+					file_name);
+	if (!file_dentry) {
+		error = -EFAULT;
+		goto out;
+	}
+	if (IS_ERR(file_dentry)) {
+		error = PTR_ERR(file_dentry);
+		file_dentry = NULL;
+		goto out;
+	}
+	if (d_really_is_positive(file_dentry)) {
+		error = -EEXIST;
+		goto out;
+	}
+
+	parent_inode = d_inode(parent_dir_path.dentry);
+	inode_lock_nested(parent_inode, I_MUTEX_PARENT);
+	error = vfs_create(parent_inode, file_dentry, args.mode | 0222, true);
+	inode_unlock(parent_inode);
+	if (error)
+		goto out;
+
+	/* Save the file's size as an xattr for easy fetching in future. */
+	size_attr_value = cpu_to_le64(args.size);
+	error = vfs_setxattr(file_dentry, INCFS_XATTR_SIZE_NAME,
+		(char *)&size_attr_value, sizeof(size_attr_value),
+		XATTR_CREATE);
+	if (error) {
+		pr_debug("incfs: vfs_setxattr err:%d\n", error);
+		goto delete_file;
+	}
+
+	error = init_new_mapped_file(mi, file_dentry, &args.source_file_id,
+			args.size, args.source_offset);
+	if (error)
+		goto delete_file;
+
+	goto out;
+
+delete_file:
+	incfs_unlink(file_dentry);
+
+out:
+	dput(file_dentry);
+	dput(source_file_dentry);
+	path_put(&parent_dir_path);
+	kfree(file_name);
+	kfree(source_file_name);
+	return error;
+}
+
+static long ioctl_get_read_timeouts(struct mount_info *mi, void __user *arg)
+{
+	struct incfs_get_read_timeouts_args __user *args_usr_ptr = arg;
+	struct incfs_get_read_timeouts_args args = {};
+	int error = 0;
+	struct incfs_per_uid_read_timeouts *buffer;
+	int size;
+
+	if (copy_from_user(&args, args_usr_ptr, sizeof(args)))
+		return -EINVAL;
+
+	if (args.timeouts_array_size_out > INCFS_DATA_FILE_BLOCK_SIZE)
+		return -EINVAL;
+
+	buffer = kzalloc(args.timeouts_array_size_out, GFP_NOFS);
+	if (!buffer)
+		return -ENOMEM;
+
+	spin_lock(&mi->mi_per_uid_read_timeouts_lock);
+	size = mi->mi_per_uid_read_timeouts_size;
+	if (args.timeouts_array_size < size)
+		error = -E2BIG;
+	else if (size)
+		memcpy(buffer, mi->mi_per_uid_read_timeouts, size);
+	spin_unlock(&mi->mi_per_uid_read_timeouts_lock);
+
+	args.timeouts_array_size_out = size;
+	if (!error && size)
+		if (copy_to_user(u64_to_user_ptr(args.timeouts_array), buffer,
+				 size))
+			error = -EFAULT;
+
+	if (!error || error == -E2BIG)
+		if (copy_to_user(args_usr_ptr, &args, sizeof(args)) > 0)
+			error = -EFAULT;
+
+	kfree(buffer);
+	return error;
+}
+
+static long ioctl_set_read_timeouts(struct mount_info *mi, void __user *arg)
+{
+	struct incfs_set_read_timeouts_args __user *args_usr_ptr = arg;
+	struct incfs_set_read_timeouts_args args = {};
+	int error = 0;
+	int size;
+	struct incfs_per_uid_read_timeouts *buffer = NULL, *tmp;
+	int i;
+
+	if (copy_from_user(&args, args_usr_ptr, sizeof(args)))
+		return -EINVAL;
+
+	size = args.timeouts_array_size;
+	if (size) {
+		if (size > INCFS_DATA_FILE_BLOCK_SIZE ||
+		    size % sizeof(*buffer) != 0)
+			return -EINVAL;
+
+		buffer = kzalloc(size, GFP_NOFS);
+		if (!buffer)
+			return -ENOMEM;
+
+		if (copy_from_user(buffer, u64_to_user_ptr(args.timeouts_array),
+				   size)) {
+			error = -EINVAL;
+			goto out;
+		}
+
+		for (i = 0; i < size / sizeof(*buffer); ++i) {
+			struct incfs_per_uid_read_timeouts *t = &buffer[i];
+
+			if (t->min_pending_time_us > t->max_pending_time_us) {
+				error = -EINVAL;
+				goto out;
+			}
+		}
+	}
+
+	spin_lock(&mi->mi_per_uid_read_timeouts_lock);
+	mi->mi_per_uid_read_timeouts_size = size;
+	tmp = mi->mi_per_uid_read_timeouts;
+	mi->mi_per_uid_read_timeouts = buffer;
+	buffer = tmp;
+	spin_unlock(&mi->mi_per_uid_read_timeouts_lock);
+
+out:
+	kfree(buffer);
+	return error;
+}
+
+static long pending_reads_dispatch_ioctl(struct file *f, unsigned int req,
+					unsigned long arg)
+{
+	struct mount_info *mi = get_mount_info(file_superblock(f));
+
+	switch (req) {
+	case INCFS_IOC_CREATE_FILE:
+		return ioctl_create_file(mi, (void __user *)arg);
+	case INCFS_IOC_PERMIT_FILL:
+		return ioctl_permit_fill(f, (void __user *)arg);
+	case INCFS_IOC_CREATE_MAPPED_FILE:
+		return ioctl_create_mapped_file(mi, (void __user *)arg);
+	case INCFS_IOC_GET_READ_TIMEOUTS:
+		return ioctl_get_read_timeouts(mi, (void __user *)arg);
+	case INCFS_IOC_SET_READ_TIMEOUTS:
+		return ioctl_set_read_timeouts(mi, (void __user *)arg);
+	default:
+		return -EINVAL;
+	}
+}
+
+static const struct file_operations incfs_pending_reads_file_ops = {
+	.read = pending_reads_read,
+	.poll = pending_reads_poll,
+	.open = pending_reads_open,
+	.release = pending_reads_release,
+	.llseek = noop_llseek,
+	.unlocked_ioctl = pending_reads_dispatch_ioctl,
+	.compat_ioctl = pending_reads_dispatch_ioctl
+};
+
+/*******************************************************************************
+ * .log pseudo file definition
+ ******************************************************************************/
+#define INCFS_LOG_INODE 3
+static const char log_file_name[] = INCFS_LOG_FILENAME;
+
+/* State of an open .log file, unique for each file descriptor. */
+struct log_file_state {
+	struct read_log_state state;
+};
+
+static ssize_t log_read(struct file *f, char __user *buf, size_t len,
+			loff_t *ppos)
+{
+	struct log_file_state *log_state = f->private_data;
+	struct mount_info *mi = get_mount_info(file_superblock(f));
+	int total_reads_collected = 0;
+	int rl_size;
+	ssize_t result = 0;
+	bool report_uid;
+	unsigned long page = 0;
+	struct incfs_pending_read_info *reads_buf = NULL;
+	struct incfs_pending_read_info2 *reads_buf2 = NULL;
+	size_t record_size;
+	ssize_t reads_to_collect;
+	ssize_t reads_per_page;
+
+	if (!mi)
+		return -EFAULT;
+
+	report_uid = mi->mi_options.report_uid;
+	record_size = report_uid ? sizeof(*reads_buf2) : sizeof(*reads_buf);
+	reads_to_collect = len / record_size;
+	reads_per_page = PAGE_SIZE / record_size;
+
+	rl_size = READ_ONCE(mi->mi_log.rl_size);
+	if (rl_size == 0)
+		return 0;
+
+	page = __get_free_page(GFP_NOFS);
+	if (!page)
+		return -ENOMEM;
+
+	if (report_uid)
+		reads_buf2 = (struct incfs_pending_read_info2 *)page;
+	else
+		reads_buf = (struct incfs_pending_read_info *)page;
+
+	reads_to_collect = min_t(ssize_t, rl_size, reads_to_collect);
+	while (reads_to_collect > 0) {
+		struct read_log_state next_state;
+		int reads_collected;
+
+		memcpy(&next_state, &log_state->state, sizeof(next_state));
+		reads_collected = incfs_collect_logged_reads(
+			mi, &next_state, reads_buf, reads_buf2,
+			min_t(ssize_t, reads_to_collect, reads_per_page));
+		if (reads_collected <= 0) {
+			result = total_reads_collected ?
+					       total_reads_collected * record_size :
+					       reads_collected;
+			goto out;
+		}
+		if (copy_to_user(buf, (void *)page,
+				 reads_collected * record_size)) {
+			result = total_reads_collected ?
+					       total_reads_collected * record_size :
+					       -EFAULT;
+			goto out;
+		}
+
+		memcpy(&log_state->state, &next_state, sizeof(next_state));
+		total_reads_collected += reads_collected;
+		buf += reads_collected * record_size;
+		reads_to_collect -= reads_collected;
+	}
+
+	result = total_reads_collected * record_size;
+	*ppos = 0;
+out:
+	free_page(page);
+	return result;
+}
+
+static __poll_t log_poll(struct file *file, poll_table *wait)
+{
+	struct log_file_state *log_state = file->private_data;
+	struct mount_info *mi = get_mount_info(file_superblock(file));
+	int count;
+	__poll_t ret = 0;
+
+	poll_wait(file, &mi->mi_log.ml_notif_wq, wait);
+	count = incfs_get_uncollected_logs_count(mi, &log_state->state);
+	if (count >= mi->mi_options.read_log_wakeup_count)
+		ret = EPOLLIN | EPOLLRDNORM;
+
+	return ret;
+}
+
+static int log_open(struct inode *inode, struct file *file)
+{
+	struct log_file_state *log_state = NULL;
+	struct mount_info *mi = get_mount_info(file_superblock(file));
+
+	log_state = kzalloc(sizeof(*log_state), GFP_NOFS);
+	if (!log_state)
+		return -ENOMEM;
+
+	log_state->state = incfs_get_log_state(mi);
+	file->private_data = log_state;
+	return 0;
+}
+
+static int log_release(struct inode *inode, struct file *file)
+{
+	kfree(file->private_data);
+	return 0;
+}
+
+static const struct file_operations incfs_log_file_ops = {
+	.read = log_read,
+	.poll = log_poll,
+	.open = log_open,
+	.release = log_release,
+	.llseek = noop_llseek,
+};
+
+/*******************************************************************************
+ * .blocks_written pseudo file definition
+ ******************************************************************************/
+#define INCFS_BLOCKS_WRITTEN_INODE 4
+static const char blocks_written_file_name[] = INCFS_BLOCKS_WRITTEN_FILENAME;
+
+/* State of an open .blocks_written file, unique for each file descriptor. */
+struct blocks_written_file_state {
+	unsigned long blocks_written;
+};
+
+static ssize_t blocks_written_read(struct file *f, char __user *buf, size_t len,
+			loff_t *ppos)
+{
+	struct mount_info *mi = get_mount_info(file_superblock(f));
+	struct blocks_written_file_state *state = f->private_data;
+	unsigned long blocks_written;
+	char string[21];
+	int result = 0;
+
+	if (!mi)
+		return -EFAULT;
+
+	blocks_written = atomic_read(&mi->mi_blocks_written);
+	if (state->blocks_written == blocks_written)
+		return 0;
+
+	result = snprintf(string, sizeof(string), "%lu", blocks_written);
+	if (result > len)
+		result = len;
+	if (copy_to_user(buf, string, result))
+		return -EFAULT;
+
+	state->blocks_written = blocks_written;
+	return result;
+}
+
+static __poll_t blocks_written_poll(struct file *f, poll_table *wait)
+{
+	struct mount_info *mi = get_mount_info(file_superblock(f));
+	struct blocks_written_file_state *state = f->private_data;
+	unsigned long blocks_written;
+
+	if (!mi)
+		return 0;
+
+	poll_wait(f, &mi->mi_blocks_written_notif_wq, wait);
+	blocks_written = atomic_read(&mi->mi_blocks_written);
+	if (state->blocks_written == blocks_written)
+		return 0;
+
+	return EPOLLIN | EPOLLRDNORM;
+}
+
+static int blocks_written_open(struct inode *inode, struct file *file)
+{
+	struct blocks_written_file_state *state =
+		kzalloc(sizeof(*state), GFP_NOFS);
+
+	if (!state)
+		return -ENOMEM;
+
+	state->blocks_written = -1;
+	file->private_data = state;
+	return 0;
+}
+
+static int blocks_written_release(struct inode *inode, struct file *file)
+{
+	kfree(file->private_data);
+	return 0;
+}
+
+static const struct file_operations incfs_blocks_written_file_ops = {
+	.read = blocks_written_read,
+	.poll = blocks_written_poll,
+	.open = blocks_written_open,
+	.release = blocks_written_release,
+	.llseek = noop_llseek,
+};
+
+/*******************************************************************************
+ * Generic inode lookup functionality
+ ******************************************************************************/
+
+const struct mem_range incfs_pseudo_file_names[] = {
+	{ .data = (u8 *)pending_reads_file_name,
+	  .len = ARRAY_SIZE(pending_reads_file_name) - 1 },
+	{ .data = (u8 *)log_file_name, .len = ARRAY_SIZE(log_file_name) - 1 },
+	{ .data = (u8 *)blocks_written_file_name,
+	  .len = ARRAY_SIZE(blocks_written_file_name) - 1 }
+};
+
+const unsigned long incfs_pseudo_file_inodes[] = { INCFS_PENDING_READS_INODE,
+						   INCFS_LOG_INODE,
+						   INCFS_BLOCKS_WRITTEN_INODE };
+
+static const struct file_operations *const pseudo_file_operations[] = {
+	&incfs_pending_reads_file_ops, &incfs_log_file_ops,
+	&incfs_blocks_written_file_ops
+};
+
+static bool is_pseudo_filename(struct mem_range name)
+{
+	int i = 0;
+
+	for (; i < ARRAY_SIZE(incfs_pseudo_file_names); ++i)
+		if (incfs_equal_ranges(incfs_pseudo_file_names[i], name))
+			return true;
+	return false;
+}
+
+static bool get_pseudo_inode(int ino, struct inode *inode)
+{
+	int i = 0;
+
+	for (; i < ARRAY_SIZE(incfs_pseudo_file_inodes); ++i)
+		if (ino == incfs_pseudo_file_inodes[i])
+			break;
+	if (i == ARRAY_SIZE(incfs_pseudo_file_inodes))
+		return false;
+
+	inode->i_ctime = (struct timespec64){};
+	inode->i_mtime = inode->i_ctime;
+	inode->i_atime = inode->i_ctime;
+	inode->i_size = 0;
+	inode->i_ino = ino;
+	inode->i_private = NULL;
+	inode_init_owner(inode, NULL, S_IFREG | READ_WRITE_FILE_MODE);
+	inode->i_op = &incfs_file_inode_ops;
+	inode->i_fop = pseudo_file_operations[i];
+	return true;
+}
+
+struct inode_search {
+	unsigned long ino;
+};
+
+static int inode_test(struct inode *inode, void *opaque)
+{
+	struct inode_search *search = opaque;
+
+	return inode->i_ino == search->ino;
+}
+
+static int inode_set(struct inode *inode, void *opaque)
+{
+	struct inode_search *search = opaque;
+
+	if (get_pseudo_inode(search->ino, inode))
+		return 0;
+
+	/* Unknown inode requested. */
+	return -EINVAL;
+}
+
+static struct inode *fetch_inode(struct super_block *sb, unsigned long ino)
+{
+	struct inode_search search = {
+		.ino = ino
+	};
+	struct inode *inode = iget5_locked(sb, search.ino, inode_test,
+				inode_set, &search);
+
+	if (!inode)
+		return ERR_PTR(-ENOMEM);
+
+	if (inode->i_state & I_NEW)
+		unlock_new_inode(inode);
+
+	return inode;
+}
+
+int dir_lookup_pseudo_files(struct super_block *sb, struct dentry *dentry)
+{
+	struct mem_range name_range =
+			range((u8 *)dentry->d_name.name, dentry->d_name.len);
+	unsigned long ino;
+	struct inode *inode;
+	int i = 0;
+
+	for (; i < ARRAY_SIZE(incfs_pseudo_file_names); ++i)
+		if (incfs_equal_ranges(incfs_pseudo_file_names[i], name_range))
+			break;
+	if (i == ARRAY_SIZE(incfs_pseudo_file_names))
+		return -ENOENT;
+
+	ino = incfs_pseudo_file_inodes[i];
+
+	inode = fetch_inode(sb, ino);
+	if (IS_ERR(inode))
+		return PTR_ERR(inode);
+
+	d_add(dentry, inode);
+	return 0;
+}
+
+int emit_pseudo_files(struct dir_context *ctx)
+{
+	loff_t i = ctx->pos;
+
+	for (; i < ARRAY_SIZE(incfs_pseudo_file_names); ++i) {
+		if (!dir_emit(ctx, incfs_pseudo_file_names[i].data,
+			      incfs_pseudo_file_names[i].len,
+			      incfs_pseudo_file_inodes[i], DT_REG))
+			return -EINVAL;
+
+		ctx->pos++;
+	}
+	return 0;
+}
diff --git a/fs/incfs/pseudo_files.h b/fs/incfs/pseudo_files.h
new file mode 100644
index 0000000..1887218
--- /dev/null
+++ b/fs/incfs/pseudo_files.h
@@ -0,0 +1,20 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2020 Google LLC
+ */
+
+#ifndef _INCFS_PSEUDO_FILES_H
+#define _INCFS_PSEUDO_FILES_H
+
+#include "internal.h"
+
+#define PSEUDO_FILE_COUNT 3
+#define INCFS_START_INO_RANGE 10
+
+extern const struct mem_range incfs_pseudo_file_names[PSEUDO_FILE_COUNT];
+extern const unsigned long incfs_pseudo_file_inodes[PSEUDO_FILE_COUNT];
+
+int dir_lookup_pseudo_files(struct super_block *sb, struct dentry *dentry);
+int emit_pseudo_files(struct dir_context *ctx);
+
+#endif
diff --git a/fs/incfs/vfs.c b/fs/incfs/vfs.c
new file mode 100644
index 0000000..fa40983
--- /dev/null
+++ b/fs/incfs/vfs.c
@@ -0,0 +1,1677 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2018 Google LLC
+ */
+
+#include <linux/blkdev.h>
+#include <linux/file.h>
+#include <linux/fs.h>
+#include <linux/fs_stack.h>
+#include <linux/namei.h>
+#include <linux/parser.h>
+#include <linux/seq_file.h>
+
+#include <uapi/linux/incrementalfs.h>
+
+#include "vfs.h"
+
+#include "data_mgmt.h"
+#include "format.h"
+#include "internal.h"
+#include "pseudo_files.h"
+
+static int incfs_remount_fs(struct super_block *sb, int *flags, char *data);
+
+static int dentry_revalidate(struct dentry *dentry, unsigned int flags);
+static void dentry_release(struct dentry *d);
+
+static int iterate_incfs_dir(struct file *file, struct dir_context *ctx);
+static struct dentry *dir_lookup(struct inode *dir_inode,
+		struct dentry *dentry, unsigned int flags);
+static int dir_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode);
+static int dir_unlink(struct inode *dir, struct dentry *dentry);
+static int dir_link(struct dentry *old_dentry, struct inode *dir,
+			 struct dentry *new_dentry);
+static int dir_rmdir(struct inode *dir, struct dentry *dentry);
+static int dir_rename(struct inode *old_dir, struct dentry *old_dentry,
+		struct inode *new_dir, struct dentry *new_dentry);
+
+static int file_open(struct inode *inode, struct file *file);
+static int file_release(struct inode *inode, struct file *file);
+static int read_single_page(struct file *f, struct page *page);
+static long dispatch_ioctl(struct file *f, unsigned int req, unsigned long arg);
+
+static struct inode *alloc_inode(struct super_block *sb);
+static void free_inode(struct inode *inode);
+static void evict_inode(struct inode *inode);
+
+static int incfs_setattr(struct dentry *dentry, struct iattr *ia);
+static ssize_t incfs_getxattr(struct dentry *d, const char *name,
+			void *value, size_t size);
+static ssize_t incfs_setxattr(struct dentry *d, const char *name,
+			const void *value, size_t size, int flags);
+static ssize_t incfs_listxattr(struct dentry *d, char *list, size_t size);
+
+static int show_options(struct seq_file *, struct dentry *);
+
+static const struct super_operations incfs_super_ops = {
+	.statfs = simple_statfs,
+	.remount_fs = incfs_remount_fs,
+	.alloc_inode	= alloc_inode,
+	.destroy_inode	= free_inode,
+	.evict_inode = evict_inode,
+	.show_options = show_options
+};
+
+static int dir_rename_wrap(struct inode *old_dir, struct dentry *old_dentry,
+		struct inode *new_dir, struct dentry *new_dentry,
+		unsigned int flags)
+{
+	return dir_rename(old_dir, old_dentry, new_dir, new_dentry);
+}
+
+static const struct inode_operations incfs_dir_inode_ops = {
+	.lookup = dir_lookup,
+	.mkdir = dir_mkdir,
+	.rename = dir_rename_wrap,
+	.unlink = dir_unlink,
+	.link = dir_link,
+	.rmdir = dir_rmdir,
+	.setattr = incfs_setattr,
+};
+
+static const struct file_operations incfs_dir_fops = {
+	.llseek = generic_file_llseek,
+	.read = generic_read_dir,
+	.iterate = iterate_incfs_dir,
+	.open = file_open,
+	.release = file_release,
+};
+
+static const struct dentry_operations incfs_dentry_ops = {
+	.d_revalidate = dentry_revalidate,
+	.d_release = dentry_release
+};
+
+static const struct address_space_operations incfs_address_space_ops = {
+	.readpage = read_single_page,
+	/* .readpages = readpages */
+};
+
+const struct file_operations incfs_file_ops = {
+	.open = file_open,
+	.release = file_release,
+	.read_iter = generic_file_read_iter,
+	.mmap = generic_file_mmap,
+	.splice_read = generic_file_splice_read,
+	.llseek = generic_file_llseek,
+	.unlocked_ioctl = dispatch_ioctl,
+	.compat_ioctl = dispatch_ioctl
+};
+
+const struct inode_operations incfs_file_inode_ops = {
+	.setattr = incfs_setattr,
+	.getattr = simple_getattr,
+	.listxattr = incfs_listxattr
+};
+
+static int incfs_handler_getxattr(const struct xattr_handler *xh,
+				  struct dentry *d, struct inode *inode,
+				  const char *name, void *buffer, size_t size,
+                                  int flags)
+{
+	return incfs_getxattr(d, name, buffer, size);
+}
+
+static int incfs_handler_setxattr(const struct xattr_handler *xh,
+				  struct dentry *d, struct inode *inode,
+				  const char *name, const void *buffer,
+				  size_t size, int flags)
+{
+	return incfs_setxattr(d, name, buffer, size, flags);
+}
+
+static const struct xattr_handler incfs_xattr_handler = {
+	.prefix = "",	/* AKA all attributes */
+	.get = incfs_handler_getxattr,
+	.set = incfs_handler_setxattr,
+};
+
+static const struct xattr_handler *incfs_xattr_ops[] = {
+	&incfs_xattr_handler,
+	NULL,
+};
+
+struct inode_search {
+	unsigned long ino;
+
+	struct dentry *backing_dentry;
+
+	size_t size;
+};
+
+enum parse_parameter {
+	Opt_read_timeout,
+	Opt_readahead_pages,
+	Opt_rlog_pages,
+	Opt_rlog_wakeup_cnt,
+	Opt_report_uid,
+	Opt_err
+};
+
+static const match_table_t option_tokens = {
+	{ Opt_read_timeout, "read_timeout_ms=%u" },
+	{ Opt_readahead_pages, "readahead=%u" },
+	{ Opt_rlog_pages, "rlog_pages=%u" },
+	{ Opt_rlog_wakeup_cnt, "rlog_wakeup_cnt=%u" },
+	{ Opt_report_uid, "report_uid" },
+	{ Opt_err, NULL }
+};
+
+static int parse_options(struct mount_options *opts, char *str)
+{
+	substring_t args[MAX_OPT_ARGS];
+	int value;
+	char *position;
+
+	if (opts == NULL)
+		return -EFAULT;
+
+	*opts = (struct mount_options) {
+		.read_timeout_ms = 1000, /* Default: 1s */
+		.readahead_pages = 10,
+		.read_log_pages = 2,
+		.read_log_wakeup_count = 10,
+	};
+
+	if (str == NULL || *str == 0)
+		return 0;
+
+	while ((position = strsep(&str, ",")) != NULL) {
+		int token;
+
+		if (!*position)
+			continue;
+
+		token = match_token(position, option_tokens, args);
+
+		switch (token) {
+		case Opt_read_timeout:
+			if (match_int(&args[0], &value))
+				return -EINVAL;
+			if (value > 3600000)
+				return -EINVAL;
+			opts->read_timeout_ms = value;
+			break;
+		case Opt_readahead_pages:
+			if (match_int(&args[0], &value))
+				return -EINVAL;
+			opts->readahead_pages = value;
+			break;
+		case Opt_rlog_pages:
+			if (match_int(&args[0], &value))
+				return -EINVAL;
+			opts->read_log_pages = value;
+			break;
+		case Opt_rlog_wakeup_cnt:
+			if (match_int(&args[0], &value))
+				return -EINVAL;
+			opts->read_log_wakeup_count = value;
+			break;
+		case Opt_report_uid:
+			opts->report_uid = true;
+			break;
+		default:
+			return -EINVAL;
+		}
+	}
+
+	return 0;
+}
+
+/* Read file size from the attribute. Quicker than reading the header */
+static u64 read_size_attr(struct dentry *backing_dentry)
+{
+	__le64 attr_value;
+	ssize_t bytes_read;
+
+	bytes_read = vfs_getxattr(backing_dentry, INCFS_XATTR_SIZE_NAME,
+			(char *)&attr_value, sizeof(attr_value));
+
+	if (bytes_read != sizeof(attr_value))
+		return 0;
+
+	return le64_to_cpu(attr_value);
+}
+
+static int inode_test(struct inode *inode, void *opaque)
+{
+	struct inode_search *search = opaque;
+	struct inode_info *node = get_incfs_node(inode);
+	struct inode *backing_inode = d_inode(search->backing_dentry);
+
+	if (!node)
+		return 0;
+
+	return node->n_backing_inode == backing_inode &&
+		inode->i_ino == search->ino;
+}
+
+static int inode_set(struct inode *inode, void *opaque)
+{
+	struct inode_search *search = opaque;
+	struct inode_info *node = get_incfs_node(inode);
+	struct dentry *backing_dentry = search->backing_dentry;
+	struct inode *backing_inode = d_inode(backing_dentry);
+
+	fsstack_copy_attr_all(inode, backing_inode);
+	if (S_ISREG(inode->i_mode)) {
+		u64 size = search->size;
+
+		inode->i_size = size;
+		inode->i_blocks = get_blocks_count_for_size(size);
+		inode->i_mapping->a_ops = &incfs_address_space_ops;
+		inode->i_op = &incfs_file_inode_ops;
+		inode->i_fop = &incfs_file_ops;
+		inode->i_mode &= ~0222;
+	} else if (S_ISDIR(inode->i_mode)) {
+		inode->i_size = 0;
+		inode->i_blocks = 1;
+		inode->i_mapping->a_ops = &incfs_address_space_ops;
+		inode->i_op = &incfs_dir_inode_ops;
+		inode->i_fop = &incfs_dir_fops;
+	} else {
+		pr_warn_once("incfs: Unexpected inode type\n");
+		return -EBADF;
+	}
+
+	ihold(backing_inode);
+	node->n_backing_inode = backing_inode;
+	node->n_mount_info = get_mount_info(inode->i_sb);
+	inode->i_ctime = backing_inode->i_ctime;
+	inode->i_mtime = backing_inode->i_mtime;
+	inode->i_atime = backing_inode->i_atime;
+	inode->i_ino = backing_inode->i_ino;
+	if (backing_inode->i_ino < INCFS_START_INO_RANGE) {
+		pr_warn("incfs: ino conflict with backing FS %ld\n",
+			backing_inode->i_ino);
+	}
+
+	return 0;
+}
+
+static struct inode *fetch_regular_inode(struct super_block *sb,
+					struct dentry *backing_dentry)
+{
+	struct inode *backing_inode = d_inode(backing_dentry);
+	struct inode_search search = {
+		.ino = backing_inode->i_ino,
+		.backing_dentry = backing_dentry,
+		.size = read_size_attr(backing_dentry),
+	};
+	struct inode *inode = iget5_locked(sb, search.ino, inode_test,
+				inode_set, &search);
+
+	if (!inode)
+		return ERR_PTR(-ENOMEM);
+
+	if (inode->i_state & I_NEW)
+		unlock_new_inode(inode);
+
+	return inode;
+}
+
+static int iterate_incfs_dir(struct file *file, struct dir_context *ctx)
+{
+	struct dir_file *dir = get_incfs_dir_file(file);
+	int error = 0;
+	struct mount_info *mi = get_mount_info(file_superblock(file));
+	bool root;
+
+	if (!dir) {
+		error = -EBADF;
+		goto out;
+	}
+
+	root = dir->backing_dir->f_inode
+			== d_inode(mi->mi_backing_dir_path.dentry);
+
+	if (root) {
+		error = emit_pseudo_files(ctx);
+		if (error)
+			goto out;
+	}
+
+	ctx->pos -= PSEUDO_FILE_COUNT;
+	error = iterate_dir(dir->backing_dir, ctx);
+	ctx->pos += PSEUDO_FILE_COUNT;
+	file->f_pos = dir->backing_dir->f_pos;
+out:
+	if (error)
+		pr_warn("incfs: %s %s %d\n", __func__,
+			file->f_path.dentry->d_name.name, error);
+	return error;
+}
+
+static int incfs_init_dentry(struct dentry *dentry, struct path *path)
+{
+	struct dentry_info *d_info = NULL;
+
+	if (!dentry || !path)
+		return -EFAULT;
+
+	d_info = kzalloc(sizeof(*d_info), GFP_NOFS);
+	if (!d_info)
+		return -ENOMEM;
+
+	d_info->backing_path = *path;
+	path_get(path);
+
+	dentry->d_fsdata = d_info;
+	return 0;
+}
+
+static struct dentry *open_or_create_special_dir(struct dentry *backing_dir,
+						 const char *name)
+{
+	struct dentry *index_dentry;
+	struct inode *backing_inode = d_inode(backing_dir);
+	int err = 0;
+
+	index_dentry = incfs_lookup_dentry(backing_dir, name);
+	if (!index_dentry) {
+		return ERR_PTR(-EINVAL);
+	} else if (IS_ERR(index_dentry)) {
+		return index_dentry;
+	} else if (d_really_is_positive(index_dentry)) {
+		/* Index already exists. */
+		return index_dentry;
+	}
+
+	/* Index needs to be created. */
+	inode_lock_nested(backing_inode, I_MUTEX_PARENT);
+	err = vfs_mkdir(backing_inode, index_dentry, 0777);
+	inode_unlock(backing_inode);
+
+	if (err)
+		return ERR_PTR(err);
+
+	if (!d_really_is_positive(index_dentry) ||
+		unlikely(d_unhashed(index_dentry))) {
+		dput(index_dentry);
+		return ERR_PTR(-EINVAL);
+	}
+
+	return index_dentry;
+}
+
+static int read_single_page_timeouts(struct data_file *df, struct file *f,
+				     int block_index, struct mem_range range,
+				     struct mem_range tmp)
+{
+	struct mount_info *mi = df->df_mount_info;
+	u32 min_time_us = 0;
+	u32 min_pending_time_us = 0;
+	u32 max_pending_time_us = U32_MAX;
+	int uid = current_uid().val;
+	int i;
+
+	spin_lock(&mi->mi_per_uid_read_timeouts_lock);
+	for (i = 0; i < mi->mi_per_uid_read_timeouts_size /
+		sizeof(*mi->mi_per_uid_read_timeouts); ++i) {
+		struct incfs_per_uid_read_timeouts *t =
+			&mi->mi_per_uid_read_timeouts[i];
+
+		if(t->uid == uid) {
+			min_time_us = t->min_time_us;
+			min_pending_time_us = t->min_pending_time_us;
+			max_pending_time_us = t->max_pending_time_us;
+			break;
+		}
+	}
+	spin_unlock(&mi->mi_per_uid_read_timeouts_lock);
+	if (max_pending_time_us == U32_MAX) {
+		u64 read_timeout_us = (u64)mi->mi_options.read_timeout_ms *
+					1000;
+
+		max_pending_time_us = read_timeout_us <= U32_MAX ?
+					read_timeout_us : U32_MAX;
+	}
+
+	return incfs_read_data_file_block(range, f, block_index,
+		min_time_us, min_pending_time_us, max_pending_time_us,
+		tmp);
+}
+
+static int read_single_page(struct file *f, struct page *page)
+{
+	loff_t offset = 0;
+	loff_t size = 0;
+	ssize_t bytes_to_read = 0;
+	ssize_t read_result = 0;
+	struct data_file *df = get_incfs_data_file(f);
+	int result = 0;
+	void *page_start;
+	int block_index;
+
+	if (!df) {
+		SetPageError(page);
+		unlock_page(page);
+		return -EBADF;
+	}
+
+	page_start = kmap(page);
+	offset = page_offset(page);
+	block_index = (offset + df->df_mapped_offset) /
+		INCFS_DATA_FILE_BLOCK_SIZE;
+	size = df->df_size;
+
+	if (offset < size) {
+		struct mem_range tmp = {
+			.len = 2 * INCFS_DATA_FILE_BLOCK_SIZE
+		};
+		tmp.data = (u8 *)__get_free_pages(GFP_NOFS, get_order(tmp.len));
+		if (!tmp.data) {
+			read_result = -ENOMEM;
+			goto err;
+		}
+		bytes_to_read = min_t(loff_t, size - offset, PAGE_SIZE);
+
+		read_result = read_single_page_timeouts(df, f, block_index,
+					range(page_start, bytes_to_read), tmp);
+
+		free_pages((unsigned long)tmp.data, get_order(tmp.len));
+	} else {
+		bytes_to_read = 0;
+		read_result = 0;
+	}
+
+err:
+	if (read_result < 0)
+		result = read_result;
+	else if (read_result < PAGE_SIZE)
+		zero_user(page, read_result, PAGE_SIZE - read_result);
+
+	if (result == 0)
+		SetPageUptodate(page);
+	else
+		SetPageError(page);
+
+	flush_dcache_page(page);
+	kunmap(page);
+	unlock_page(page);
+	return result;
+}
+
+int incfs_link(struct dentry *what, struct dentry *where)
+{
+	struct dentry *parent_dentry = dget_parent(where);
+	struct inode *pinode = d_inode(parent_dentry);
+	int error = 0;
+
+	inode_lock_nested(pinode, I_MUTEX_PARENT);
+	error = vfs_link(what, pinode, where, NULL);
+	inode_unlock(pinode);
+
+	dput(parent_dentry);
+	return error;
+}
+
+int incfs_unlink(struct dentry *dentry)
+{
+	struct dentry *parent_dentry = dget_parent(dentry);
+	struct inode *pinode = d_inode(parent_dentry);
+	int error = 0;
+
+	inode_lock_nested(pinode, I_MUTEX_PARENT);
+	error = vfs_unlink(pinode, dentry, NULL);
+	inode_unlock(pinode);
+
+	dput(parent_dentry);
+	return error;
+}
+
+static int incfs_rmdir(struct dentry *dentry)
+{
+	struct dentry *parent_dentry = dget_parent(dentry);
+	struct inode *pinode = d_inode(parent_dentry);
+	int error = 0;
+
+	inode_lock_nested(pinode, I_MUTEX_PARENT);
+	error = vfs_rmdir(pinode, dentry);
+	inode_unlock(pinode);
+
+	dput(parent_dentry);
+	return error;
+}
+
+static void maybe_delete_incomplete_file(struct data_file *df)
+{
+	struct mount_info *mi = df->df_mount_info;
+	char *file_id_str = NULL;
+	struct dentry *incomplete_file_dentry = NULL;
+	const struct cred *old_cred = override_creds(mi->mi_owner);
+
+	if (atomic_read(&df->df_data_blocks_written) < df->df_data_block_count)
+		goto out;
+
+	/* This is best effort - there is no useful action to take on failure */
+	file_id_str = file_id_to_str(df->df_id);
+	if (!file_id_str)
+		goto out;
+
+	incomplete_file_dentry = incfs_lookup_dentry(
+					df->df_mount_info->mi_incomplete_dir,
+					file_id_str);
+	if (!incomplete_file_dentry || IS_ERR(incomplete_file_dentry)) {
+		incomplete_file_dentry = NULL;
+		goto out;
+	}
+
+	if (!d_really_is_positive(incomplete_file_dentry))
+		goto out;
+
+	vfs_fsync(df->df_backing_file_context->bc_file, 0);
+	incfs_unlink(incomplete_file_dentry);
+
+out:
+	dput(incomplete_file_dentry);
+	kfree(file_id_str);
+	revert_creds(old_cred);
+}
+
+static long ioctl_fill_blocks(struct file *f, void __user *arg)
+{
+	struct incfs_fill_blocks __user *usr_fill_blocks = arg;
+	struct incfs_fill_blocks fill_blocks;
+	struct incfs_fill_block __user *usr_fill_block_array;
+	struct data_file *df = get_incfs_data_file(f);
+	struct incfs_file_data *fd = f->private_data;
+	const ssize_t data_buf_size = 2 * INCFS_DATA_FILE_BLOCK_SIZE;
+	u8 *data_buf = NULL;
+	ssize_t error = 0;
+	int i = 0;
+
+	if (!df)
+		return -EBADF;
+
+	if (!fd || fd->fd_fill_permission != CAN_FILL)
+		return -EPERM;
+
+	if (copy_from_user(&fill_blocks, usr_fill_blocks, sizeof(fill_blocks)))
+		return -EFAULT;
+
+	usr_fill_block_array = u64_to_user_ptr(fill_blocks.fill_blocks);
+	data_buf = (u8 *)__get_free_pages(GFP_NOFS | __GFP_COMP,
+					  get_order(data_buf_size));
+	if (!data_buf)
+		return -ENOMEM;
+
+	for (i = 0; i < fill_blocks.count; i++) {
+		struct incfs_fill_block fill_block = {};
+
+		if (copy_from_user(&fill_block, &usr_fill_block_array[i],
+				   sizeof(fill_block)) > 0) {
+			error = -EFAULT;
+			break;
+		}
+
+		if (fill_block.data_len > data_buf_size) {
+			error = -E2BIG;
+			break;
+		}
+
+		if (copy_from_user(data_buf, u64_to_user_ptr(fill_block.data),
+				   fill_block.data_len) > 0) {
+			error = -EFAULT;
+			break;
+		}
+		fill_block.data = 0; /* To make sure nobody uses it. */
+		if (fill_block.flags & INCFS_BLOCK_FLAGS_HASH) {
+			error = incfs_process_new_hash_block(df, &fill_block,
+							     data_buf);
+		} else {
+			error = incfs_process_new_data_block(df, &fill_block,
+							     data_buf);
+		}
+		if (error)
+			break;
+	}
+
+	if (data_buf)
+		free_pages((unsigned long)data_buf, get_order(data_buf_size));
+
+	maybe_delete_incomplete_file(df);
+
+	/*
+	 * Only report the error if no records were processed, otherwise
+	 * just return how many were processed successfully.
+	 */
+	if (i == 0)
+		return error;
+
+	return i;
+}
+
+static long ioctl_read_file_signature(struct file *f, void __user *arg)
+{
+	struct incfs_get_file_sig_args __user *args_usr_ptr = arg;
+	struct incfs_get_file_sig_args args = {};
+	u8 *sig_buffer = NULL;
+	size_t sig_buf_size = 0;
+	int error = 0;
+	int read_result = 0;
+	struct data_file *df = get_incfs_data_file(f);
+
+	if (!df)
+		return -EINVAL;
+
+	if (copy_from_user(&args, args_usr_ptr, sizeof(args)) > 0)
+		return -EINVAL;
+
+	sig_buf_size = args.file_signature_buf_size;
+	if (sig_buf_size > INCFS_MAX_SIGNATURE_SIZE)
+		return -E2BIG;
+
+	sig_buffer = kzalloc(sig_buf_size, GFP_NOFS | __GFP_COMP);
+	if (!sig_buffer)
+		return -ENOMEM;
+
+	read_result = incfs_read_file_signature(df,
+			range(sig_buffer, sig_buf_size));
+
+	if (read_result < 0) {
+		error = read_result;
+		goto out;
+	}
+
+	if (copy_to_user(u64_to_user_ptr(args.file_signature), sig_buffer,
+			read_result)) {
+		error = -EFAULT;
+		goto out;
+	}
+
+	args.file_signature_len_out = read_result;
+	if (copy_to_user(args_usr_ptr, &args, sizeof(args)))
+		error = -EFAULT;
+
+out:
+	kfree(sig_buffer);
+
+	return error;
+}
+
+static long ioctl_get_filled_blocks(struct file *f, void __user *arg)
+{
+	struct incfs_get_filled_blocks_args __user *args_usr_ptr = arg;
+	struct incfs_get_filled_blocks_args args = {};
+	struct data_file *df = get_incfs_data_file(f);
+	struct incfs_file_data *fd = f->private_data;
+	int error;
+
+	if (!df || !fd)
+		return -EINVAL;
+
+	if (fd->fd_fill_permission != CAN_FILL)
+		return -EPERM;
+
+	if (copy_from_user(&args, args_usr_ptr, sizeof(args)) > 0)
+		return -EINVAL;
+
+	error = incfs_get_filled_blocks(df, fd, &args);
+
+	if (copy_to_user(args_usr_ptr, &args, sizeof(args)))
+		return -EFAULT;
+
+	return error;
+}
+
+static long ioctl_get_block_count(struct file *f, void __user *arg)
+{
+	struct incfs_get_block_count_args __user *args_usr_ptr = arg;
+	struct incfs_get_block_count_args args = {};
+	struct data_file *df = get_incfs_data_file(f);
+
+	if (!df)
+		return -EINVAL;
+
+	args.total_data_blocks_out = df->df_data_block_count;
+	args.filled_data_blocks_out = atomic_read(&df->df_data_blocks_written);
+	args.total_hash_blocks_out = df->df_total_block_count -
+		df->df_data_block_count;
+	args.filled_hash_blocks_out = atomic_read(&df->df_hash_blocks_written);
+
+	if (copy_to_user(args_usr_ptr, &args, sizeof(args)))
+		return -EFAULT;
+
+	return 0;
+}
+
+static long dispatch_ioctl(struct file *f, unsigned int req, unsigned long arg)
+{
+	switch (req) {
+	case INCFS_IOC_FILL_BLOCKS:
+		return ioctl_fill_blocks(f, (void __user *)arg);
+	case INCFS_IOC_READ_FILE_SIGNATURE:
+		return ioctl_read_file_signature(f, (void __user *)arg);
+	case INCFS_IOC_GET_FILLED_BLOCKS:
+		return ioctl_get_filled_blocks(f, (void __user *)arg);
+	case INCFS_IOC_GET_BLOCK_COUNT:
+		return ioctl_get_block_count(f, (void __user *)arg);
+	default:
+		return -EINVAL;
+	}
+}
+
+static struct dentry *dir_lookup(struct inode *dir_inode, struct dentry *dentry,
+				 unsigned int flags)
+{
+	struct mount_info *mi = get_mount_info(dir_inode->i_sb);
+	struct dentry *dir_dentry = NULL;
+	struct dentry *backing_dentry = NULL;
+	struct path dir_backing_path = {};
+	struct inode_info *dir_info = get_incfs_node(dir_inode);
+	int err = 0;
+
+	if (!mi || !dir_info || !dir_info->n_backing_inode)
+		return ERR_PTR(-EBADF);
+
+	if (d_inode(mi->mi_backing_dir_path.dentry) ==
+		dir_info->n_backing_inode) {
+		/* We do lookup in the FS root. Show pseudo files. */
+		err = dir_lookup_pseudo_files(dir_inode->i_sb, dentry);
+		if (err != -ENOENT)
+			goto out;
+		err = 0;
+	}
+
+	dir_dentry = dget_parent(dentry);
+	get_incfs_backing_path(dir_dentry, &dir_backing_path);
+	backing_dentry = incfs_lookup_dentry(dir_backing_path.dentry,
+						dentry->d_name.name);
+
+	if (!backing_dentry || IS_ERR(backing_dentry)) {
+		err = IS_ERR(backing_dentry)
+			? PTR_ERR(backing_dentry)
+			: -EFAULT;
+		backing_dentry = NULL;
+		goto out;
+	} else {
+		struct inode *inode = NULL;
+		struct path backing_path = {
+			.mnt = dir_backing_path.mnt,
+			.dentry = backing_dentry
+		};
+
+		err = incfs_init_dentry(dentry, &backing_path);
+		if (err)
+			goto out;
+
+		if (!d_really_is_positive(backing_dentry)) {
+			/*
+			 * No such entry found in the backing dir.
+			 * Create a negative entry.
+			 */
+			d_add(dentry, NULL);
+			err = 0;
+			goto out;
+		}
+
+		if (d_inode(backing_dentry)->i_sb !=
+				dir_info->n_backing_inode->i_sb) {
+			/*
+			 * Somehow after the path lookup we ended up in a
+			 * different fs mount. If we keep going it's going
+			 * to end badly.
+			 */
+			err = -EXDEV;
+			goto out;
+		}
+
+		inode = fetch_regular_inode(dir_inode->i_sb, backing_dentry);
+		if (IS_ERR(inode)) {
+			err = PTR_ERR(inode);
+			goto out;
+		}
+
+		d_add(dentry, inode);
+	}
+
+out:
+	dput(dir_dentry);
+	dput(backing_dentry);
+	path_put(&dir_backing_path);
+	if (err)
+		pr_debug("incfs: %s %s %d\n", __func__,
+			 dentry->d_name.name, err);
+	return ERR_PTR(err);
+}
+
+static int dir_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
+{
+	struct mount_info *mi = get_mount_info(dir->i_sb);
+	struct inode_info *dir_node = get_incfs_node(dir);
+	struct dentry *backing_dentry = NULL;
+	struct path backing_path = {};
+	int err = 0;
+
+
+	if (!mi || !dir_node || !dir_node->n_backing_inode)
+		return -EBADF;
+
+	err = mutex_lock_interruptible(&mi->mi_dir_struct_mutex);
+	if (err)
+		return err;
+
+	get_incfs_backing_path(dentry, &backing_path);
+	backing_dentry = backing_path.dentry;
+
+	if (!backing_dentry) {
+		err = -EBADF;
+		goto path_err;
+	}
+
+	if (backing_dentry->d_parent == mi->mi_index_dir) {
+		/* Can't create a subdir inside .index */
+		err = -EBUSY;
+		goto out;
+	}
+
+	if (backing_dentry->d_parent == mi->mi_incomplete_dir) {
+		/* Can't create a subdir inside .incomplete */
+		err = -EBUSY;
+		goto out;
+	}
+	inode_lock_nested(dir_node->n_backing_inode, I_MUTEX_PARENT);
+	err = vfs_mkdir(dir_node->n_backing_inode, backing_dentry, mode | 0222);
+	inode_unlock(dir_node->n_backing_inode);
+	if (!err) {
+		struct inode *inode = NULL;
+
+		if (d_really_is_negative(backing_dentry) ||
+			unlikely(d_unhashed(backing_dentry))) {
+			err = -EINVAL;
+			goto out;
+		}
+
+		inode = fetch_regular_inode(dir->i_sb, backing_dentry);
+		if (IS_ERR(inode)) {
+			err = PTR_ERR(inode);
+			goto out;
+		}
+		d_instantiate(dentry, inode);
+	}
+
+out:
+	if (d_really_is_negative(dentry))
+		d_drop(dentry);
+	path_put(&backing_path);
+
+path_err:
+	mutex_unlock(&mi->mi_dir_struct_mutex);
+	if (err)
+		pr_debug("incfs: %s err:%d\n", __func__, err);
+	return err;
+}
+
+/*
+ * Delete file referenced by backing_dentry and if appropriate its hardlink
+ * from .index and .incomplete
+ */
+static int file_delete(struct mount_info *mi,
+			struct dentry *backing_dentry,
+			int nlink)
+{
+	struct dentry *index_file_dentry = NULL;
+	struct dentry *incomplete_file_dentry = NULL;
+	/* 2 chars per byte of file ID + 1 char for \0 */
+	char file_id_str[2 * sizeof(incfs_uuid_t) + 1] = {0};
+	ssize_t uuid_size = 0;
+	int error = 0;
+
+	WARN_ON(!mutex_is_locked(&mi->mi_dir_struct_mutex));
+
+	if (nlink > 3)
+		goto just_unlink;
+
+	uuid_size = vfs_getxattr(backing_dentry, INCFS_XATTR_ID_NAME,
+			file_id_str, 2 * sizeof(incfs_uuid_t));
+	if (uuid_size < 0) {
+		error = uuid_size;
+		goto out;
+	}
+
+	if (uuid_size != 2 * sizeof(incfs_uuid_t)) {
+		error = -EBADMSG;
+		goto out;
+	}
+
+	index_file_dentry = incfs_lookup_dentry(mi->mi_index_dir, file_id_str);
+	if (IS_ERR(index_file_dentry)) {
+		error = PTR_ERR(index_file_dentry);
+		index_file_dentry = NULL;
+		goto out;
+	}
+
+	if (d_really_is_positive(index_file_dentry) && nlink > 0)
+		nlink--;
+
+	if (nlink > 2)
+		goto just_unlink;
+
+	incomplete_file_dentry = incfs_lookup_dentry(mi->mi_incomplete_dir,
+						     file_id_str);
+	if (IS_ERR(incomplete_file_dentry)) {
+		error = PTR_ERR(incomplete_file_dentry);
+		incomplete_file_dentry = NULL;
+		goto out;
+	}
+
+	if (d_really_is_positive(incomplete_file_dentry) && nlink > 0)
+		nlink--;
+
+	if (nlink > 1)
+		goto just_unlink;
+
+	if (d_really_is_positive(index_file_dentry))
+		error = incfs_unlink(index_file_dentry);
+	if (error)
+		goto out;
+
+	if (d_really_is_positive(incomplete_file_dentry))
+		error = incfs_unlink(incomplete_file_dentry);
+	if (error)
+		goto out;
+
+just_unlink:
+	error = incfs_unlink(backing_dentry);
+
+out:
+	dput(index_file_dentry);
+	dput(incomplete_file_dentry);
+	if (error)
+		pr_debug("incfs: delete_file_from_index err:%d\n", error);
+	return error;
+}
+
+static int dir_unlink(struct inode *dir, struct dentry *dentry)
+{
+	struct mount_info *mi = get_mount_info(dir->i_sb);
+	struct path backing_path = {};
+	struct kstat stat;
+	int err = 0;
+
+	if (!mi)
+		return -EBADF;
+
+	err = mutex_lock_interruptible(&mi->mi_dir_struct_mutex);
+	if (err)
+		return err;
+
+	get_incfs_backing_path(dentry, &backing_path);
+	if (!backing_path.dentry) {
+		err = -EBADF;
+		goto path_err;
+	}
+
+	if (backing_path.dentry->d_parent == mi->mi_index_dir) {
+		/* Direct unlink from .index are not allowed. */
+		err = -EBUSY;
+		goto out;
+	}
+
+	if (backing_path.dentry->d_parent == mi->mi_incomplete_dir) {
+		/* Direct unlink from .incomplete are not allowed. */
+		err = -EBUSY;
+		goto out;
+	}
+
+	err = vfs_getattr(&backing_path, &stat, STATX_NLINK,
+			  AT_STATX_SYNC_AS_STAT);
+	if (err)
+		goto out;
+
+	err = file_delete(mi, backing_path.dentry, stat.nlink);
+
+	d_drop(dentry);
+out:
+	path_put(&backing_path);
+path_err:
+	if (err)
+		pr_debug("incfs: %s err:%d\n", __func__, err);
+	mutex_unlock(&mi->mi_dir_struct_mutex);
+	return err;
+}
+
+static int dir_link(struct dentry *old_dentry, struct inode *dir,
+			 struct dentry *new_dentry)
+{
+	struct mount_info *mi = get_mount_info(dir->i_sb);
+	struct path backing_old_path = {};
+	struct path backing_new_path = {};
+	int error = 0;
+
+	if (!mi)
+		return -EBADF;
+
+	error = mutex_lock_interruptible(&mi->mi_dir_struct_mutex);
+	if (error)
+		return error;
+
+	get_incfs_backing_path(old_dentry, &backing_old_path);
+	get_incfs_backing_path(new_dentry, &backing_new_path);
+
+	if (backing_new_path.dentry->d_parent == mi->mi_index_dir) {
+		/* Can't link to .index */
+		error = -EBUSY;
+		goto out;
+	}
+
+	if (backing_new_path.dentry->d_parent == mi->mi_incomplete_dir) {
+		/* Can't link to .incomplete */
+		error = -EBUSY;
+		goto out;
+	}
+
+	error = incfs_link(backing_old_path.dentry, backing_new_path.dentry);
+	if (!error) {
+		struct inode *inode = NULL;
+		struct dentry *bdentry = backing_new_path.dentry;
+
+		if (d_really_is_negative(bdentry)) {
+			error = -EINVAL;
+			goto out;
+		}
+
+		inode = fetch_regular_inode(dir->i_sb, bdentry);
+		if (IS_ERR(inode)) {
+			error = PTR_ERR(inode);
+			goto out;
+		}
+		d_instantiate(new_dentry, inode);
+	}
+
+out:
+	path_put(&backing_old_path);
+	path_put(&backing_new_path);
+	if (error)
+		pr_debug("incfs: %s err:%d\n", __func__, error);
+	mutex_unlock(&mi->mi_dir_struct_mutex);
+	return error;
+}
+
+static int dir_rmdir(struct inode *dir, struct dentry *dentry)
+{
+	struct mount_info *mi = get_mount_info(dir->i_sb);
+	struct path backing_path = {};
+	int err = 0;
+
+	if (!mi)
+		return -EBADF;
+
+	err = mutex_lock_interruptible(&mi->mi_dir_struct_mutex);
+	if (err)
+		return err;
+
+	get_incfs_backing_path(dentry, &backing_path);
+	if (!backing_path.dentry) {
+		err = -EBADF;
+		goto path_err;
+	}
+
+	if (backing_path.dentry == mi->mi_index_dir) {
+		/* Can't delete .index */
+		err = -EBUSY;
+		goto out;
+	}
+
+	if (backing_path.dentry == mi->mi_incomplete_dir) {
+		/* Can't delete .incomplete */
+		err = -EBUSY;
+		goto out;
+	}
+
+	err = incfs_rmdir(backing_path.dentry);
+	if (!err)
+		d_drop(dentry);
+out:
+	path_put(&backing_path);
+
+path_err:
+	if (err)
+		pr_debug("incfs: %s err:%d\n", __func__, err);
+	mutex_unlock(&mi->mi_dir_struct_mutex);
+	return err;
+}
+
+static int dir_rename(struct inode *old_dir, struct dentry *old_dentry,
+		struct inode *new_dir, struct dentry *new_dentry)
+{
+	struct mount_info *mi = get_mount_info(old_dir->i_sb);
+	struct dentry *backing_old_dentry;
+	struct dentry *backing_new_dentry;
+	struct dentry *backing_old_dir_dentry;
+	struct dentry *backing_new_dir_dentry;
+	struct inode *target_inode;
+	struct dentry *trap;
+	int error = 0;
+
+	error = mutex_lock_interruptible(&mi->mi_dir_struct_mutex);
+	if (error)
+		return error;
+
+	backing_old_dentry = get_incfs_dentry(old_dentry)->backing_path.dentry;
+
+	if (!backing_old_dentry || backing_old_dentry == mi->mi_index_dir ||
+	    backing_old_dentry == mi->mi_incomplete_dir) {
+		/* Renaming .index or .incomplete not allowed */
+		error = -EBUSY;
+		goto exit;
+	}
+
+	backing_new_dentry = get_incfs_dentry(new_dentry)->backing_path.dentry;
+	dget(backing_old_dentry);
+	dget(backing_new_dentry);
+
+	backing_old_dir_dentry = dget_parent(backing_old_dentry);
+	backing_new_dir_dentry = dget_parent(backing_new_dentry);
+	target_inode = d_inode(new_dentry);
+
+	if (backing_old_dir_dentry == mi->mi_index_dir ||
+	    backing_old_dir_dentry == mi->mi_incomplete_dir) {
+		/* Direct moves from .index or .incomplete are not allowed. */
+		error = -EBUSY;
+		goto out;
+	}
+
+	trap = lock_rename(backing_old_dir_dentry, backing_new_dir_dentry);
+
+	if (trap == backing_old_dentry) {
+		error = -EINVAL;
+		goto unlock_out;
+	}
+	if (trap == backing_new_dentry) {
+		error = -ENOTEMPTY;
+		goto unlock_out;
+	}
+
+	error = vfs_rename(d_inode(backing_old_dir_dentry), backing_old_dentry,
+			d_inode(backing_new_dir_dentry), backing_new_dentry,
+			NULL, 0);
+	if (error)
+		goto unlock_out;
+	if (target_inode)
+		fsstack_copy_attr_all(target_inode,
+			get_incfs_node(target_inode)->n_backing_inode);
+	fsstack_copy_attr_all(new_dir, d_inode(backing_new_dir_dentry));
+	if (new_dir != old_dir)
+		fsstack_copy_attr_all(old_dir, d_inode(backing_old_dir_dentry));
+
+unlock_out:
+	unlock_rename(backing_old_dir_dentry, backing_new_dir_dentry);
+
+out:
+	dput(backing_new_dir_dentry);
+	dput(backing_old_dir_dentry);
+	dput(backing_new_dentry);
+	dput(backing_old_dentry);
+
+exit:
+	mutex_unlock(&mi->mi_dir_struct_mutex);
+	if (error)
+		pr_debug("incfs: %s err:%d\n", __func__, error);
+	return error;
+}
+
+
+static int file_open(struct inode *inode, struct file *file)
+{
+	struct mount_info *mi = get_mount_info(inode->i_sb);
+	struct file *backing_file = NULL;
+	struct path backing_path = {};
+	int err = 0;
+	int flags = O_NOATIME | O_LARGEFILE |
+		(S_ISDIR(inode->i_mode) ? O_RDONLY : O_RDWR);
+	const struct cred *old_cred;
+
+	WARN_ON(file->private_data);
+
+	if (!mi)
+		return -EBADF;
+
+	get_incfs_backing_path(file->f_path.dentry, &backing_path);
+	if (!backing_path.dentry)
+		return -EBADF;
+
+	old_cred = override_creds(mi->mi_owner);
+	backing_file = dentry_open(&backing_path, flags, current_cred());
+	revert_creds(old_cred);
+	path_put(&backing_path);
+
+	if (IS_ERR(backing_file)) {
+		err = PTR_ERR(backing_file);
+		backing_file = NULL;
+		goto out;
+	}
+
+	if (S_ISREG(inode->i_mode)) {
+		struct incfs_file_data *fd = kzalloc(sizeof(*fd), GFP_NOFS);
+
+		if (!fd) {
+			err = -ENOMEM;
+			goto out;
+		}
+
+		*fd = (struct incfs_file_data) {
+			.fd_fill_permission = CANT_FILL,
+		};
+		file->private_data = fd;
+
+		err = make_inode_ready_for_data_ops(mi, inode, backing_file);
+
+	} else if (S_ISDIR(inode->i_mode)) {
+		struct dir_file *dir = NULL;
+
+		dir = incfs_open_dir_file(mi, backing_file);
+		if (IS_ERR(dir))
+			err = PTR_ERR(dir);
+		else
+			file->private_data = dir;
+	} else
+		err = -EBADF;
+
+out:
+	if (err) {
+		pr_debug("name:%s err: %d\n",
+			 file->f_path.dentry->d_name.name, err);
+		if (S_ISREG(inode->i_mode))
+			kfree(file->private_data);
+		else if (S_ISDIR(inode->i_mode))
+			incfs_free_dir_file(file->private_data);
+
+		file->private_data = NULL;
+	}
+
+	if (backing_file)
+		fput(backing_file);
+	return err;
+}
+
+static int file_release(struct inode *inode, struct file *file)
+{
+	if (S_ISREG(inode->i_mode)) {
+		kfree(file->private_data);
+		file->private_data = NULL;
+	} else if (S_ISDIR(inode->i_mode)) {
+		struct dir_file *dir = get_incfs_dir_file(file);
+
+		incfs_free_dir_file(dir);
+	}
+
+	return 0;
+}
+
+static int dentry_revalidate(struct dentry *d, unsigned int flags)
+{
+	struct path backing_path = {};
+	struct inode_info *info = get_incfs_node(d_inode(d));
+	struct inode *binode = (info == NULL) ? NULL : info->n_backing_inode;
+	struct dentry *backing_dentry = NULL;
+	int result = 0;
+
+	if (flags & LOOKUP_RCU)
+		return -ECHILD;
+
+	get_incfs_backing_path(d, &backing_path);
+	backing_dentry = backing_path.dentry;
+	if (!backing_dentry)
+		goto out;
+
+	if (d_inode(backing_dentry) != binode) {
+		/*
+		 * Backing inodes obtained via dentry and inode don't match.
+		 * It indicates that most likely backing dir has changed
+		 * directly bypassing Incremental FS interface.
+		 */
+		goto out;
+	}
+
+	if (backing_dentry->d_flags & DCACHE_OP_REVALIDATE) {
+		result = backing_dentry->d_op->d_revalidate(backing_dentry,
+				flags);
+	} else
+		result = 1;
+
+out:
+	path_put(&backing_path);
+	return result;
+}
+
+static void dentry_release(struct dentry *d)
+{
+	struct dentry_info *di = get_incfs_dentry(d);
+
+	if (di)
+		path_put(&di->backing_path);
+	kfree(d->d_fsdata);
+	d->d_fsdata = NULL;
+}
+
+static struct inode *alloc_inode(struct super_block *sb)
+{
+	struct inode_info *node = kzalloc(sizeof(*node), GFP_NOFS);
+
+	/* TODO: add a slab-based cache here. */
+	if (!node)
+		return NULL;
+	inode_init_once(&node->n_vfs_inode);
+	return &node->n_vfs_inode;
+}
+
+static void free_inode(struct inode *inode)
+{
+	struct inode_info *node = get_incfs_node(inode);
+
+	kfree(node);
+}
+
+static void evict_inode(struct inode *inode)
+{
+	struct inode_info *node = get_incfs_node(inode);
+
+	if (node) {
+		if (node->n_backing_inode) {
+			iput(node->n_backing_inode);
+			node->n_backing_inode = NULL;
+		}
+		if (node->n_file) {
+			incfs_free_data_file(node->n_file);
+			node->n_file = NULL;
+		}
+	}
+
+	truncate_inode_pages(&inode->i_data, 0);
+	clear_inode(inode);
+}
+
+static int incfs_setattr(struct dentry *dentry, struct iattr *ia)
+{
+	struct dentry_info *di = get_incfs_dentry(dentry);
+	struct dentry *backing_dentry;
+	struct inode *backing_inode;
+	int error;
+
+	if (ia->ia_valid & ATTR_SIZE)
+		return -EINVAL;
+
+	if (!di)
+		return -EINVAL;
+	backing_dentry = di->backing_path.dentry;
+	if (!backing_dentry)
+		return -EINVAL;
+
+	backing_inode = d_inode(backing_dentry);
+
+	/* incfs files are readonly, but the backing files must be writeable */
+	if (S_ISREG(backing_inode->i_mode)) {
+		if ((ia->ia_valid & ATTR_MODE) && (ia->ia_mode & 0222))
+			return -EINVAL;
+
+		ia->ia_mode |= 0222;
+	}
+
+	inode_lock(d_inode(backing_dentry));
+	error = notify_change(backing_dentry, ia, NULL);
+	inode_unlock(d_inode(backing_dentry));
+
+	if (error)
+		return error;
+
+	if (S_ISREG(backing_inode->i_mode))
+		ia->ia_mode &= ~0222;
+
+	return simple_setattr(dentry, ia);
+}
+
+static ssize_t incfs_getxattr(struct dentry *d, const char *name,
+			void *value, size_t size)
+{
+	struct dentry_info *di = get_incfs_dentry(d);
+	struct mount_info *mi = get_mount_info(d->d_sb);
+	char *stored_value;
+	size_t stored_size;
+	int i;
+
+	if (di && di->backing_path.dentry)
+		return vfs_getxattr(di->backing_path.dentry, name, value, size);
+
+	if (strcmp(name, "security.selinux"))
+		return -ENODATA;
+
+	for (i = 0; i < PSEUDO_FILE_COUNT; ++i)
+		if (!strcmp(d->d_iname, incfs_pseudo_file_names[i].data))
+			break;
+	if (i == PSEUDO_FILE_COUNT)
+		return -ENODATA;
+
+	stored_value = mi->pseudo_file_xattr[i].data;
+	stored_size = mi->pseudo_file_xattr[i].len;
+	if (!stored_value)
+		return -ENODATA;
+
+	if (stored_size > size)
+		return -E2BIG;
+
+	memcpy(value, stored_value, stored_size);
+	return stored_size;
+}
+
+
+static ssize_t incfs_setxattr(struct dentry *d, const char *name,
+			const void *value, size_t size, int flags)
+{
+	struct dentry_info *di = get_incfs_dentry(d);
+	struct mount_info *mi = get_mount_info(d->d_sb);
+	u8 **stored_value;
+	size_t *stored_size;
+	int i;
+
+	if (di && di->backing_path.dentry)
+		return vfs_setxattr(di->backing_path.dentry, name, value, size,
+				    flags);
+
+	if (strcmp(name, "security.selinux"))
+		return -ENODATA;
+
+	if (size > INCFS_MAX_FILE_ATTR_SIZE)
+		return -E2BIG;
+
+	for (i = 0; i < PSEUDO_FILE_COUNT; ++i)
+		if (!strcmp(d->d_iname, incfs_pseudo_file_names[i].data))
+			break;
+	if (i == PSEUDO_FILE_COUNT)
+		return -ENODATA;
+
+	stored_value = &mi->pseudo_file_xattr[i].data;
+	stored_size = &mi->pseudo_file_xattr[i].len;
+	kfree (*stored_value);
+	*stored_value = kzalloc(size, GFP_NOFS);
+	if (!*stored_value)
+		return -ENOMEM;
+
+	memcpy(*stored_value, value, size);
+	*stored_size = size;
+	return 0;
+}
+
+static ssize_t incfs_listxattr(struct dentry *d, char *list, size_t size)
+{
+	struct dentry_info *di = get_incfs_dentry(d);
+
+	if (!di || !di->backing_path.dentry)
+		return -ENODATA;
+
+	return vfs_listxattr(di->backing_path.dentry, list, size);
+}
+
+struct dentry *incfs_mount_fs(struct file_system_type *type, int flags,
+			      const char *dev_name, void *data)
+{
+	static const char index_name[] = ".index";
+	static const char incomplete_name[] = ".incomplete";
+	struct mount_options options = {};
+	struct mount_info *mi = NULL;
+	struct path backing_dir_path = {};
+	struct dentry *index_dir = NULL;
+	struct dentry *incomplete_dir = NULL;
+	struct super_block *src_fs_sb = NULL;
+	struct inode *root_inode = NULL;
+	struct super_block *sb = sget(type, NULL, set_anon_super, flags, NULL);
+	int error = 0;
+
+	if (IS_ERR(sb))
+		return ERR_CAST(sb);
+
+	sb->s_op = &incfs_super_ops;
+	sb->s_d_op = &incfs_dentry_ops;
+	sb->s_flags |= S_NOATIME;
+	sb->s_magic = INCFS_MAGIC_NUMBER;
+	sb->s_time_gran = 1;
+	sb->s_blocksize = INCFS_DATA_FILE_BLOCK_SIZE;
+	sb->s_blocksize_bits = blksize_bits(sb->s_blocksize);
+	sb->s_xattr = incfs_xattr_ops;
+
+	BUILD_BUG_ON(PAGE_SIZE != INCFS_DATA_FILE_BLOCK_SIZE);
+
+	error = parse_options(&options, (char *)data);
+	if (error != 0) {
+		pr_err("incfs: Options parsing error. %d\n", error);
+		goto err;
+	}
+
+	sb->s_bdi->ra_pages = options.readahead_pages;
+	if (!dev_name) {
+		pr_err("incfs: Backing dir is not set, filesystem can't be mounted.\n");
+		error = -ENOENT;
+		goto err;
+	}
+
+	error = kern_path(dev_name, LOOKUP_FOLLOW | LOOKUP_DIRECTORY,
+			&backing_dir_path);
+	if (error || backing_dir_path.dentry == NULL ||
+		!d_really_is_positive(backing_dir_path.dentry)) {
+		pr_err("incfs: Error accessing: %s.\n",
+			dev_name);
+		goto err;
+	}
+	src_fs_sb = backing_dir_path.dentry->d_sb;
+	sb->s_maxbytes = src_fs_sb->s_maxbytes;
+
+	mi = incfs_alloc_mount_info(sb, &options, &backing_dir_path);
+
+	if (IS_ERR_OR_NULL(mi)) {
+		error = PTR_ERR(mi);
+		pr_err("incfs: Error allocating mount info. %d\n", error);
+		mi = NULL;
+		goto err;
+	}
+
+	index_dir = open_or_create_special_dir(backing_dir_path.dentry,
+					       index_name);
+	if (IS_ERR_OR_NULL(index_dir)) {
+		error = PTR_ERR(index_dir);
+		pr_err("incfs: Can't find or create .index dir in %s\n",
+			dev_name);
+		/* No need to null index_dir since we don't put it */
+		goto err;
+	}
+	mi->mi_index_dir = index_dir;
+
+	incomplete_dir = open_or_create_special_dir(backing_dir_path.dentry,
+						    incomplete_name);
+	if (IS_ERR_OR_NULL(incomplete_dir)) {
+		error = PTR_ERR(incomplete_dir);
+		pr_err("incfs: Can't find or create .incomplete dir in %s\n",
+			dev_name);
+		/* No need to null incomplete_dir since we don't put it */
+		goto err;
+	}
+	mi->mi_incomplete_dir = incomplete_dir;
+
+	sb->s_fs_info = mi;
+	root_inode = fetch_regular_inode(sb, backing_dir_path.dentry);
+	if (IS_ERR(root_inode)) {
+		error = PTR_ERR(root_inode);
+		goto err;
+	}
+
+	sb->s_root = d_make_root(root_inode);
+	if (!sb->s_root) {
+		error = -ENOMEM;
+		goto err;
+	}
+	error = incfs_init_dentry(sb->s_root, &backing_dir_path);
+	if (error)
+		goto err;
+
+	path_put(&backing_dir_path);
+	sb->s_flags |= SB_ACTIVE;
+
+	pr_debug("incfs: mount\n");
+	return dget(sb->s_root);
+err:
+	sb->s_fs_info = NULL;
+	path_put(&backing_dir_path);
+	incfs_free_mount_info(mi);
+	deactivate_locked_super(sb);
+	return ERR_PTR(error);
+}
+
+static int incfs_remount_fs(struct super_block *sb, int *flags, char *data)
+{
+	struct mount_options options;
+	struct mount_info *mi = get_mount_info(sb);
+	int err = 0;
+
+	sync_filesystem(sb);
+	err = parse_options(&options, (char *)data);
+	if (err)
+		return err;
+
+	if (options.report_uid != mi->mi_options.report_uid) {
+		pr_err("incfs: Can't change report_uid mount option on remount\n");
+		return -EOPNOTSUPP;
+	}
+
+	err = incfs_realloc_mount_info(mi, &options);
+	if (err)
+		return err;
+
+	pr_debug("incfs: remount\n");
+	return 0;
+}
+
+void incfs_kill_sb(struct super_block *sb)
+{
+	struct mount_info *mi = sb->s_fs_info;
+
+	pr_debug("incfs: unmount\n");
+	generic_shutdown_super(sb);
+	incfs_free_mount_info(mi);
+}
+
+static int show_options(struct seq_file *m, struct dentry *root)
+{
+	struct mount_info *mi = get_mount_info(root->d_sb);
+
+	seq_printf(m, ",read_timeout_ms=%u", mi->mi_options.read_timeout_ms);
+	seq_printf(m, ",readahead=%u", mi->mi_options.readahead_pages);
+	if (mi->mi_options.read_log_pages != 0) {
+		seq_printf(m, ",rlog_pages=%u", mi->mi_options.read_log_pages);
+		seq_printf(m, ",rlog_wakeup_cnt=%u",
+			   mi->mi_options.read_log_wakeup_count);
+	}
+	if (mi->mi_options.report_uid)
+		seq_puts(m, ",report_uid");
+	return 0;
+}
diff --git a/fs/incfs/vfs.h b/fs/incfs/vfs.h
new file mode 100644
index 0000000..79fdf24
--- /dev/null
+++ b/fs/incfs/vfs.h
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2018 Google LLC
+ */
+
+#ifndef _INCFS_VFS_H
+#define _INCFS_VFS_H
+
+extern const struct file_operations incfs_file_ops;
+extern const struct inode_operations incfs_file_inode_ops;
+
+void incfs_kill_sb(struct super_block *sb);
+struct dentry *incfs_mount_fs(struct file_system_type *type, int flags,
+			      const char *dev_name, void *data);
+int incfs_link(struct dentry *what, struct dentry *where);
+int incfs_unlink(struct dentry *dentry);
+
+static inline struct mount_info *get_mount_info(struct super_block *sb)
+{
+	struct mount_info *result = sb->s_fs_info;
+
+	WARN_ON(!result);
+	return result;
+}
+
+static inline struct super_block *file_superblock(struct file *f)
+{
+	struct inode *inode = file_inode(f);
+
+	return inode->i_sb;
+}
+
+#endif
diff --git a/fs/inode.c b/fs/inode.c
index c5267a4..dc5de2e 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -12,6 +12,7 @@
 #include <linux/security.h>
 #include <linux/cdev.h>
 #include <linux/memblock.h>
+#include <linux/fscrypt.h>
 #include <linux/fsnotify.h>
 #include <linux/mount.h>
 #include <linux/posix_acl.h>
@@ -2253,7 +2254,7 @@ int vfs_ioc_setflags_prepare(struct inode *inode, unsigned int oldflags,
 	    !capable(CAP_LINUX_IMMUTABLE))
 		return -EPERM;
 
-	return 0;
+	return fscrypt_prepare_setflags(inode, oldflags, flags);
 }
 EXPORT_SYMBOL(vfs_ioc_setflags_prepare);
 
diff --git a/fs/ioctl.c b/fs/ioctl.c
index 3118da0..63efa7c 100644
--- a/fs/ioctl.c
+++ b/fs/ioctl.c
@@ -175,6 +175,34 @@ static int fiemap_check_ranges(struct super_block *sb,
 	return 0;
 }
 
+int fiemap_prep(struct inode *inode, struct fiemap_extent_info *fieinfo,
+		u64 start, u64 *len, u32 supported_flags)
+{
+	u64 maxbytes = inode->i_sb->s_maxbytes;
+	u32 incompat_flags;
+
+	if (*len == 0)
+		return -EINVAL;
+
+	if (start > maxbytes)
+		return -EFBIG;
+
+	/*
+	 * Shrink request scope to what the fs can actually handle.
+	 */
+	if (*len > maxbytes || (maxbytes - *len) < start)
+		*len = maxbytes - start;
+
+	supported_flags &= FIEMAP_FLAGS_COMPAT;
+	incompat_flags = fieinfo->fi_flags & ~supported_flags;
+	if (incompat_flags) {
+		fieinfo->fi_flags = incompat_flags;
+		return -EBADR;
+	}
+	return 0;
+}
+EXPORT_SYMBOL(fiemap_prep);
+
 static int ioctl_fiemap(struct file *filp, unsigned long arg)
 {
 	struct fiemap fiemap;
diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c
index 8c98fd9..cdd039a 100644
--- a/fs/iomap/direct-io.c
+++ b/fs/iomap/direct-io.c
@@ -6,6 +6,7 @@
 #include <linux/module.h>
 #include <linux/compiler.h>
 #include <linux/fs.h>
+#include <linux/fscrypt.h>
 #include <linux/iomap.h>
 #include <linux/backing-dev.h>
 #include <linux/uio.h>
@@ -178,11 +179,14 @@ static void
 iomap_dio_zero(struct iomap_dio *dio, struct iomap *iomap, loff_t pos,
 		unsigned len)
 {
+	struct inode *inode = file_inode(dio->iocb->ki_filp);
 	struct page *page = ZERO_PAGE(0);
 	int flags = REQ_SYNC | REQ_IDLE;
 	struct bio *bio;
 
 	bio = bio_alloc(GFP_KERNEL, 1);
+	fscrypt_set_bio_crypt_ctx(bio, inode, pos >> inode->i_blkbits,
+				  GFP_KERNEL);
 	bio_set_dev(bio, iomap->bdev);
 	bio->bi_iter.bi_sector = iomap_sector(iomap, pos);
 	bio->bi_private = dio;
@@ -261,6 +265,8 @@ iomap_dio_bio_actor(struct inode *inode, loff_t pos, loff_t length,
 		}
 
 		bio = bio_alloc(GFP_KERNEL, nr_pages);
+		fscrypt_set_bio_crypt_ctx(bio, inode, pos >> inode->i_blkbits,
+					  GFP_KERNEL);
 		bio_set_dev(bio, iomap->bdev);
 		bio->bi_iter.bi_sector = iomap_sector(iomap, pos);
 		bio->bi_write_hint = dio->iocb->ki_hint;
diff --git a/fs/jffs2/security.c b/fs/jffs2/security.c
index c2332e3..e6f42fe4 100644
--- a/fs/jffs2/security.c
+++ b/fs/jffs2/security.c
@@ -50,7 +50,8 @@ int jffs2_init_security(struct inode *inode, struct inode *dir,
 /* ---- XATTR Handler for "security.*" ----------------- */
 static int jffs2_security_getxattr(const struct xattr_handler *handler,
 				   struct dentry *unused, struct inode *inode,
-				   const char *name, void *buffer, size_t size)
+				   const char *name, void *buffer, size_t size,
+				   int flags)
 {
 	return do_jffs2_getxattr(inode, JFFS2_XPREFIX_SECURITY,
 				 name, buffer, size);
diff --git a/fs/jffs2/xattr_trusted.c b/fs/jffs2/xattr_trusted.c
index 5d60308..9dccaae 100644
--- a/fs/jffs2/xattr_trusted.c
+++ b/fs/jffs2/xattr_trusted.c
@@ -18,7 +18,8 @@
 
 static int jffs2_trusted_getxattr(const struct xattr_handler *handler,
 				  struct dentry *unused, struct inode *inode,
-				  const char *name, void *buffer, size_t size)
+				  const char *name, void *buffer, size_t size,
+				  int flags)
 {
 	return do_jffs2_getxattr(inode, JFFS2_XPREFIX_TRUSTED,
 				 name, buffer, size);
diff --git a/fs/jffs2/xattr_user.c b/fs/jffs2/xattr_user.c
index 9d027b4..c0983a3 100644
--- a/fs/jffs2/xattr_user.c
+++ b/fs/jffs2/xattr_user.c
@@ -18,7 +18,8 @@
 
 static int jffs2_user_getxattr(const struct xattr_handler *handler,
 			       struct dentry *unused, struct inode *inode,
-			       const char *name, void *buffer, size_t size)
+			       const char *name, void *buffer, size_t size,
+			       int flags)
 {
 	return do_jffs2_getxattr(inode, JFFS2_XPREFIX_USER,
 				 name, buffer, size);
diff --git a/fs/jfs/xattr.c b/fs/jfs/xattr.c
index db41e78..5c79a35 100644
--- a/fs/jfs/xattr.c
+++ b/fs/jfs/xattr.c
@@ -925,7 +925,7 @@ static int __jfs_xattr_set(struct inode *inode, const char *name,
 
 static int jfs_xattr_get(const struct xattr_handler *handler,
 			 struct dentry *unused, struct inode *inode,
-			 const char *name, void *value, size_t size)
+			 const char *name, void *value, size_t size, int flags)
 {
 	name = xattr_full_name(handler, name);
 	return __jfs_getxattr(inode, name, value, size);
@@ -942,7 +942,8 @@ static int jfs_xattr_set(const struct xattr_handler *handler,
 
 static int jfs_xattr_get_os2(const struct xattr_handler *handler,
 			     struct dentry *unused, struct inode *inode,
-			     const char *name, void *value, size_t size)
+			     const char *name, void *value, size_t size,
+			     int flags)
 {
 	if (is_known_namespace(name))
 		return -EOPNOTSUPP;
diff --git a/fs/kernfs/inode.c b/fs/kernfs/inode.c
index f3eaa88..22357c6 100644
--- a/fs/kernfs/inode.c
+++ b/fs/kernfs/inode.c
@@ -308,7 +308,8 @@ int kernfs_xattr_set(struct kernfs_node *kn, const char *name,
 
 static int kernfs_vfs_xattr_get(const struct xattr_handler *handler,
 				struct dentry *unused, struct inode *inode,
-				const char *suffix, void *value, size_t size)
+				const char *suffix, void *value, size_t size,
+				int flags)
 {
 	const char *name = xattr_full_name(handler, suffix);
 	struct kernfs_node *kn = inode->i_private;
diff --git a/fs/libfs.c b/fs/libfs.c
index 247b58a..fc9f683 100644
--- a/fs/libfs.c
+++ b/fs/libfs.c
@@ -19,6 +19,8 @@
 #include <linux/buffer_head.h> /* sync_mapping_buffers */
 #include <linux/fs_context.h>
 #include <linux/pseudo_fs.h>
+#include <linux/unicode.h>
+#include <linux/fscrypt.h>
 
 #include <linux/uaccess.h>
 
@@ -1295,3 +1297,158 @@ bool is_empty_dir_inode(struct inode *inode)
 	return (inode->i_fop == &empty_dir_operations) &&
 		(inode->i_op == &empty_dir_inode_operations);
 }
+
+#ifdef CONFIG_UNICODE
+/*
+ * Determine if the name of a dentry should be casefolded.
+ *
+ * Return: if names will need casefolding
+ */
+static bool needs_casefold(const struct inode *dir)
+{
+	return IS_CASEFOLDED(dir) && dir->i_sb->s_encoding;
+}
+
+/**
+ * generic_ci_d_compare - generic d_compare implementation for casefolding filesystems
+ * @dentry:	dentry whose name we are checking against
+ * @len:	len of name of dentry
+ * @str:	str pointer to name of dentry
+ * @name:	Name to compare against
+ *
+ * Return: 0 if names match, 1 if mismatch, or -ERRNO
+ */
+int generic_ci_d_compare(const struct dentry *dentry, unsigned int len,
+			  const char *str, const struct qstr *name)
+{
+	const struct dentry *parent = READ_ONCE(dentry->d_parent);
+	const struct inode *dir = READ_ONCE(parent->d_inode);
+	const struct super_block *sb = dentry->d_sb;
+	const struct unicode_map *um = sb->s_encoding;
+	struct qstr qstr = QSTR_INIT(str, len);
+	char strbuf[DNAME_INLINE_LEN];
+	int ret;
+
+	if (!dir || !needs_casefold(dir))
+		goto fallback;
+	/*
+	 * If the dentry name is stored in-line, then it may be concurrently
+	 * modified by a rename.  If this happens, the VFS will eventually retry
+	 * the lookup, so it doesn't matter what ->d_compare() returns.
+	 * However, it's unsafe to call utf8_strncasecmp() with an unstable
+	 * string.  Therefore, we have to copy the name into a temporary buffer.
+	 */
+	if (len <= DNAME_INLINE_LEN - 1) {
+		memcpy(strbuf, str, len);
+		strbuf[len] = 0;
+		qstr.name = strbuf;
+		/* prevent compiler from optimizing out the temporary buffer */
+		barrier();
+	}
+	ret = utf8_strncasecmp(um, name, &qstr);
+	if (ret >= 0)
+		return ret;
+
+	if (sb_has_strict_encoding(sb))
+		return -EINVAL;
+fallback:
+	if (len != name->len)
+		return 1;
+	return !!memcmp(str, name->name, len);
+}
+EXPORT_SYMBOL(generic_ci_d_compare);
+
+/**
+ * generic_ci_d_hash - generic d_hash implementation for casefolding filesystems
+ * @dentry:	dentry of the parent directory
+ * @str:	qstr of name whose hash we should fill in
+ *
+ * Return: 0 if hash was successful or unchanged, and -EINVAL on error
+ */
+int generic_ci_d_hash(const struct dentry *dentry, struct qstr *str)
+{
+	const struct inode *dir = READ_ONCE(dentry->d_inode);
+	struct super_block *sb = dentry->d_sb;
+	const struct unicode_map *um = sb->s_encoding;
+	int ret = 0;
+
+	if (!dir || !needs_casefold(dir))
+		return 0;
+
+	ret = utf8_casefold_hash(um, dentry, str);
+	if (ret < 0 && sb_has_strict_encoding(sb))
+		return -EINVAL;
+	return 0;
+}
+EXPORT_SYMBOL(generic_ci_d_hash);
+
+static const struct dentry_operations generic_ci_dentry_ops = {
+	.d_hash = generic_ci_d_hash,
+	.d_compare = generic_ci_d_compare,
+};
+#endif
+
+#ifdef CONFIG_FS_ENCRYPTION
+static const struct dentry_operations generic_encrypted_dentry_ops = {
+	.d_revalidate = fscrypt_d_revalidate,
+};
+#endif
+
+#if defined(CONFIG_FS_ENCRYPTION) && defined(CONFIG_UNICODE)
+static const struct dentry_operations generic_encrypted_ci_dentry_ops = {
+	.d_hash = generic_ci_d_hash,
+	.d_compare = generic_ci_d_compare,
+	.d_revalidate = fscrypt_d_revalidate,
+};
+#endif
+
+/**
+ * generic_set_encrypted_ci_d_ops - helper for setting d_ops for given dentry
+ * @dentry:	dentry to set ops on
+ *
+ * Casefolded directories need d_hash and d_compare set, so that the dentries
+ * contained in them are handled case-insensitively.  Note that these operations
+ * are needed on the parent directory rather than on the dentries in it, and
+ * while the casefolding flag can be toggled on and off on an empty directory,
+ * dentry_operations can't be changed later.  As a result, if the filesystem has
+ * casefolding support enabled at all, we have to give all dentries the
+ * casefolding operations even if their inode doesn't have the casefolding flag
+ * currently (and thus the casefolding ops would be no-ops for now).
+ *
+ * Encryption works differently in that the only dentry operation it needs is
+ * d_revalidate, which it only needs on dentries that have the no-key name flag.
+ * The no-key flag can't be set "later", so we don't have to worry about that.
+ *
+ * Finally, to maximize compatibility with overlayfs (which isn't compatible
+ * with certain dentry operations) and to avoid taking an unnecessary
+ * performance hit, we use custom dentry_operations for each possible
+ * combination rather than always installing all operations.
+ */
+void generic_set_encrypted_ci_d_ops(struct dentry *dentry)
+{
+#ifdef CONFIG_FS_ENCRYPTION
+	bool needs_encrypt_ops = dentry->d_flags & DCACHE_NOKEY_NAME;
+#endif
+#ifdef CONFIG_UNICODE
+	bool needs_ci_ops = dentry->d_sb->s_encoding;
+#endif
+#if defined(CONFIG_FS_ENCRYPTION) && defined(CONFIG_UNICODE)
+	if (needs_encrypt_ops && needs_ci_ops) {
+		d_set_d_op(dentry, &generic_encrypted_ci_dentry_ops);
+		return;
+	}
+#endif
+#ifdef CONFIG_FS_ENCRYPTION
+	if (needs_encrypt_ops) {
+		d_set_d_op(dentry, &generic_encrypted_dentry_ops);
+		return;
+	}
+#endif
+#ifdef CONFIG_UNICODE
+	if (needs_ci_ops) {
+		d_set_d_op(dentry, &generic_ci_dentry_ops);
+		return;
+	}
+#endif
+}
+EXPORT_SYMBOL(generic_set_encrypted_ci_d_ops);
diff --git a/fs/mpage.c b/fs/mpage.c
index ccba3c4..f48de1f 100644
--- a/fs/mpage.c
+++ b/fs/mpage.c
@@ -32,6 +32,14 @@
 #include <linux/cleancache.h>
 #include "internal.h"
 
+#define CREATE_TRACE_POINTS
+#include <trace/events/android_fs.h>
+
+EXPORT_TRACEPOINT_SYMBOL(android_fs_datawrite_start);
+EXPORT_TRACEPOINT_SYMBOL(android_fs_datawrite_end);
+EXPORT_TRACEPOINT_SYMBOL(android_fs_dataread_start);
+EXPORT_TRACEPOINT_SYMBOL(android_fs_dataread_end);
+
 /*
  * I/O completion handler for multipage BIOs.
  *
@@ -49,6 +57,16 @@ static void mpage_end_io(struct bio *bio)
 	struct bio_vec *bv;
 	struct bvec_iter_all iter_all;
 
+	if (trace_android_fs_dataread_end_enabled() &&
+	    (bio_data_dir(bio) == READ)) {
+		struct page *first_page = bio->bi_io_vec[0].bv_page;
+
+		if (first_page != NULL)
+			trace_android_fs_dataread_end(first_page->mapping->host,
+						      page_offset(first_page),
+						      bio->bi_iter.bi_size);
+	}
+
 	bio_for_each_segment_all(bv, bio, iter_all) {
 		struct page *page = bv->bv_page;
 		page_endio(page, bio_op(bio),
@@ -60,6 +78,24 @@ static void mpage_end_io(struct bio *bio)
 
 static struct bio *mpage_bio_submit(int op, int op_flags, struct bio *bio)
 {
+	if (trace_android_fs_dataread_start_enabled() && (op == REQ_OP_READ)) {
+		struct page *first_page = bio->bi_io_vec[0].bv_page;
+
+		if (first_page != NULL) {
+			char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+			path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    first_page->mapping->host);
+			trace_android_fs_dataread_start(
+				first_page->mapping->host,
+				page_offset(first_page),
+				bio->bi_iter.bi_size,
+				current->pid,
+				path,
+				current->comm);
+		}
+	}
 	bio->bi_end_io = mpage_end_io;
 	bio_set_op_attrs(bio, op, op_flags);
 	guard_bio_eod(bio);
diff --git a/fs/namei.c b/fs/namei.c
index 5b5759d7..8a57cfd 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -43,6 +43,9 @@
 #include "internal.h"
 #include "mount.h"
 
+#define CREATE_TRACE_POINTS
+#include <trace/events/namei.h>
+
 /* [Feb-1997 T. Schoebel-Theuer]
  * Fundamental changes in the pathname lookup mechanisms (namei)
  * were necessary because of omirr.  The reason is that omirr needs
@@ -760,6 +763,81 @@ static inline int d_revalidate(struct dentry *dentry, unsigned int flags)
 		return 1;
 }
 
+#define INIT_PATH_SIZE 64
+
+static void success_walk_trace(struct nameidata *nd)
+{
+	struct path *pt = &nd->path;
+	struct inode *i = nd->inode;
+	char buf[INIT_PATH_SIZE], *try_buf;
+	int cur_path_size;
+	char *p;
+
+	/* When eBPF/ tracepoint is disabled, keep overhead low. */
+	if (!trace_inodepath_enabled())
+		return;
+
+	/* First try stack allocated buffer. */
+	try_buf = buf;
+	cur_path_size = INIT_PATH_SIZE;
+
+	while (cur_path_size <= PATH_MAX) {
+		/* Free previous heap allocation if we are now trying
+		 * a second or later heap allocation.
+		 */
+		if (try_buf != buf)
+			kfree(try_buf);
+
+		/* All but the first alloc are on the heap. */
+		if (cur_path_size != INIT_PATH_SIZE) {
+			try_buf = kmalloc(cur_path_size, GFP_KERNEL);
+			if (!try_buf) {
+				try_buf = buf;
+				sprintf(try_buf, "error:buf_alloc_failed");
+				break;
+			}
+		}
+
+		p = d_path(pt, try_buf, cur_path_size);
+
+		if (!IS_ERR(p)) {
+			char *end = mangle_path(try_buf, p, "\n");
+
+			if (end) {
+				try_buf[end - try_buf] = 0;
+				break;
+			} else {
+				/* On mangle errors, double path size
+				 * till PATH_MAX.
+				 */
+				cur_path_size = cur_path_size << 1;
+				continue;
+			}
+		}
+
+		if (PTR_ERR(p) == -ENAMETOOLONG) {
+			/* If d_path complains that name is too long,
+			 * then double path size till PATH_MAX.
+			 */
+			cur_path_size = cur_path_size << 1;
+			continue;
+		}
+
+		sprintf(try_buf, "error:d_path_failed_%lu",
+			-1 * PTR_ERR(p));
+		break;
+	}
+
+	if (cur_path_size > PATH_MAX)
+		sprintf(try_buf, "error:d_path_name_too_long");
+
+	trace_inodepath(i, try_buf);
+
+	if (try_buf != buf)
+		kfree(try_buf);
+	return;
+}
+
 /**
  * complete_walk - successful completion of path walk
  * @nd:  pointer nameidata
@@ -782,15 +860,21 @@ static int complete_walk(struct nameidata *nd)
 			return -ECHILD;
 	}
 
-	if (likely(!(nd->flags & LOOKUP_JUMPED)))
+	if (likely(!(nd->flags & LOOKUP_JUMPED))) {
+		success_walk_trace(nd);
 		return 0;
+	}
 
-	if (likely(!(dentry->d_flags & DCACHE_OP_WEAK_REVALIDATE)))
+	if (likely(!(dentry->d_flags & DCACHE_OP_WEAK_REVALIDATE))) {
+		success_walk_trace(nd);
 		return 0;
+	}
 
 	status = dentry->d_op->d_weak_revalidate(dentry, nd->flags);
-	if (status > 0)
+	if (status > 0) {
+		success_walk_trace(nd);
 		return 0;
+	}
 
 	if (!status)
 		status = -ESTALE;
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 30e44b3..7f3598aa 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -7348,7 +7348,8 @@ static int nfs4_xattr_set_nfs4_acl(const struct xattr_handler *handler,
 
 static int nfs4_xattr_get_nfs4_acl(const struct xattr_handler *handler,
 				   struct dentry *unused, struct inode *inode,
-				   const char *key, void *buf, size_t buflen)
+				   const char *key, void *buf, size_t buflen,
+				   int flags)
 {
 	return nfs4_proc_get_acl(inode, buf, buflen);
 }
@@ -7373,7 +7374,8 @@ static int nfs4_xattr_set_nfs4_label(const struct xattr_handler *handler,
 
 static int nfs4_xattr_get_nfs4_label(const struct xattr_handler *handler,
 				     struct dentry *unused, struct inode *inode,
-				     const char *key, void *buf, size_t buflen)
+				     const char *key, void *buf, size_t buflen,
+				     int flags)
 {
 	if (security_ismaclabel(key))
 		return nfs4_get_security_label(inode, buf, buflen);
diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c
index 81ffc86..a8c3f31 100644
--- a/fs/notify/inotify/inotify_user.c
+++ b/fs/notify/inotify/inotify_user.c
@@ -701,6 +701,8 @@ SYSCALL_DEFINE3(inotify_add_watch, int, fd, const char __user *, pathname,
 	struct fsnotify_group *group;
 	struct inode *inode;
 	struct path path;
+	struct path alteredpath;
+	struct path *canonical_path = &path;
 	struct fd f;
 	int ret;
 	unsigned flags = 0;
@@ -747,13 +749,23 @@ SYSCALL_DEFINE3(inotify_add_watch, int, fd, const char __user *, pathname,
 	if (ret)
 		goto fput_and_out;
 
+	/* support stacked filesystems */
+	if (path.dentry && path.dentry->d_op) {
+		if (path.dentry->d_op->d_canonical_path) {
+			path.dentry->d_op->d_canonical_path(&path,
+							    &alteredpath);
+			canonical_path = &alteredpath;
+			path_put(&path);
+		}
+	}
+
 	/* inode held in place by reference to path; group by fget on fd */
-	inode = path.dentry->d_inode;
+	inode = canonical_path->dentry->d_inode;
 	group = f.file->private_data;
 
 	/* create/update an inode mark */
 	ret = inotify_update_watch(group, inode, mask);
-	path_put(&path);
+	path_put(canonical_path);
 fput_and_out:
 	fdput(f);
 	return ret;
diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
index 90c830e3..5258358 100644
--- a/fs/ocfs2/xattr.c
+++ b/fs/ocfs2/xattr.c
@@ -7242,7 +7242,8 @@ int ocfs2_init_security_and_acl(struct inode *dir,
  */
 static int ocfs2_xattr_security_get(const struct xattr_handler *handler,
 				    struct dentry *unused, struct inode *inode,
-				    const char *name, void *buffer, size_t size)
+				    const char *name, void *buffer, size_t size,
+				    int flags)
 {
 	return ocfs2_xattr_get(inode, OCFS2_XATTR_INDEX_SECURITY,
 			       name, buffer, size);
@@ -7314,7 +7315,8 @@ const struct xattr_handler ocfs2_xattr_security_handler = {
  */
 static int ocfs2_xattr_trusted_get(const struct xattr_handler *handler,
 				   struct dentry *unused, struct inode *inode,
-				   const char *name, void *buffer, size_t size)
+				   const char *name, void *buffer, size_t size,
+				   int flags)
 {
 	return ocfs2_xattr_get(inode, OCFS2_XATTR_INDEX_TRUSTED,
 			       name, buffer, size);
@@ -7340,7 +7342,8 @@ const struct xattr_handler ocfs2_xattr_trusted_handler = {
  */
 static int ocfs2_xattr_user_get(const struct xattr_handler *handler,
 				struct dentry *unused, struct inode *inode,
-				const char *name, void *buffer, size_t size)
+				const char *name, void *buffer, size_t size,
+				int flags)
 {
 	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
 
diff --git a/fs/open.c b/fs/open.c
index dcbd016..461d711 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -743,9 +743,8 @@ static int do_dentry_open(struct file *f,
 	path_get(&f->f_path);
 	f->f_inode = inode;
 	f->f_mapping = inode->i_mapping;
-
-	/* Ensure that we skip any errors that predate opening of the file */
 	f->f_wb_err = filemap_sample_wb_err(f->f_mapping);
+	f->f_sb_err = file_sample_sb_err(f);
 
 	if (unlikely(f->f_flags & O_PATH)) {
 		f->f_mode = FMODE_PATH | FMODE_OPENED;
diff --git a/fs/orangefs/xattr.c b/fs/orangefs/xattr.c
index bdc285a..ef4180b 100644
--- a/fs/orangefs/xattr.c
+++ b/fs/orangefs/xattr.c
@@ -541,7 +541,8 @@ static int orangefs_xattr_get_default(const struct xattr_handler *handler,
 				      struct inode *inode,
 				      const char *name,
 				      void *buffer,
-				      size_t size)
+				      size_t size,
+				      int flags)
 {
 	return orangefs_inode_getxattr(inode, name, buffer, size);
 
diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
index 7b758d6..3ce3022 100644
--- a/fs/overlayfs/copy_up.c
+++ b/fs/overlayfs/copy_up.c
@@ -887,7 +887,7 @@ int ovl_copy_up_flags(struct dentry *dentry, int flags)
 		dput(parent);
 		dput(next);
 	}
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 
 	return err;
 }
diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c
index 6509ec3..df65bc2 100644
--- a/fs/overlayfs/dir.c
+++ b/fs/overlayfs/dir.c
@@ -536,7 +536,7 @@ static int ovl_create_or_link(struct dentry *dentry, struct inode *inode,
 			      struct ovl_cattr *attr, bool origin)
 {
 	int err;
-	const struct cred *old_cred;
+	const struct cred *old_cred, *hold_cred = NULL;
 	struct cred *override_cred;
 	struct dentry *parent = dentry->d_parent;
 
@@ -563,14 +563,15 @@ static int ovl_create_or_link(struct dentry *dentry, struct inode *inode,
 		override_cred->fsgid = inode->i_gid;
 		if (!attr->hardlink) {
 			err = security_dentry_create_files_as(dentry,
-					attr->mode, &dentry->d_name, old_cred,
+					attr->mode, &dentry->d_name,
+					old_cred ? old_cred : current_cred(),
 					override_cred);
 			if (err) {
 				put_cred(override_cred);
 				goto out_revert_creds;
 			}
 		}
-		put_cred(override_creds(override_cred));
+		hold_cred = override_creds(override_cred);
 		put_cred(override_cred);
 
 		if (!ovl_dentry_is_whiteout(dentry))
@@ -579,7 +580,9 @@ static int ovl_create_or_link(struct dentry *dentry, struct inode *inode,
 			err = ovl_create_over_whiteout(dentry, inode, attr);
 	}
 out_revert_creds:
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred ?: hold_cred);
+	if (old_cred && hold_cred)
+		put_cred(hold_cred);
 	return err;
 }
 
@@ -655,7 +658,7 @@ static int ovl_set_link_redirect(struct dentry *dentry)
 
 	old_cred = ovl_override_creds(dentry->d_sb);
 	err = ovl_set_redirect(dentry, false);
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 
 	return err;
 }
@@ -851,7 +854,7 @@ static int ovl_do_remove(struct dentry *dentry, bool is_dir)
 		err = ovl_remove_upper(dentry, is_dir, &list);
 	else
 		err = ovl_remove_and_whiteout(dentry, &list);
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 	if (!err) {
 		if (is_dir)
 			clear_nlink(dentry->d_inode);
@@ -1221,7 +1224,7 @@ static int ovl_rename(struct inode *olddir, struct dentry *old,
 out_unlock:
 	unlock_rename(new_upperdir, old_upperdir);
 out_revert_creds:
-	revert_creds(old_cred);
+	ovl_revert_creds(old->d_sb, old_cred);
 	if (update_nlink)
 		ovl_nlink_end(new);
 out_drop_write:
diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c
index 7a08a57..75d2b45 100644
--- a/fs/overlayfs/file.c
+++ b/fs/overlayfs/file.c
@@ -11,6 +11,8 @@
 #include <linux/uaccess.h>
 #include "overlayfs.h"
 
+#define OVL_IOCB_MASK (IOCB_DSYNC | IOCB_HIPRI | IOCB_NOWAIT | IOCB_SYNC)
+
 static char ovl_whatisit(struct inode *inode, struct inode *realinode)
 {
 	if (realinode != ovl_inode_upper(inode))
@@ -35,7 +37,7 @@ static struct file *ovl_open_realfile(const struct file *file,
 	old_cred = ovl_override_creds(inode->i_sb);
 	realfile = open_with_fake_path(&file->f_path, flags, realinode,
 				       current_cred());
-	revert_creds(old_cred);
+	ovl_revert_creds(inode->i_sb, old_cred);
 
 	pr_debug("open(%p[%pD2/%c], 0%o) -> (%p, 0%o)\n",
 		 file, file, ovl_whatisit(inode, realinode), file->f_flags,
@@ -178,7 +180,7 @@ static loff_t ovl_llseek(struct file *file, loff_t offset, int whence)
 
 	old_cred = ovl_override_creds(inode->i_sb);
 	ret = vfs_llseek(real.file, offset, whence);
-	revert_creds(old_cred);
+	ovl_revert_creds(inode->i_sb, old_cred);
 
 	file->f_pos = real.file->f_pos;
 	inode_unlock(inode);
@@ -210,23 +212,6 @@ static void ovl_file_accessed(struct file *file)
 	touch_atime(&file->f_path);
 }
 
-static rwf_t ovl_iocb_to_rwf(struct kiocb *iocb)
-{
-	int ifl = iocb->ki_flags;
-	rwf_t flags = 0;
-
-	if (ifl & IOCB_NOWAIT)
-		flags |= RWF_NOWAIT;
-	if (ifl & IOCB_HIPRI)
-		flags |= RWF_HIPRI;
-	if (ifl & IOCB_DSYNC)
-		flags |= RWF_DSYNC;
-	if (ifl & IOCB_SYNC)
-		flags |= RWF_SYNC;
-
-	return flags;
-}
-
 static ssize_t ovl_read_iter(struct kiocb *iocb, struct iov_iter *iter)
 {
 	struct file *file = iocb->ki_filp;
@@ -243,8 +228,8 @@ static ssize_t ovl_read_iter(struct kiocb *iocb, struct iov_iter *iter)
 
 	old_cred = ovl_override_creds(file_inode(file)->i_sb);
 	ret = vfs_iter_read(real.file, iter, &iocb->ki_pos,
-			    ovl_iocb_to_rwf(iocb));
-	revert_creds(old_cred);
+			    iocb_to_rw_flags(iocb->ki_flags, OVL_IOCB_MASK));
+	ovl_revert_creds(file_inode(file)->i_sb, old_cred);
 
 	ovl_file_accessed(file);
 
@@ -278,9 +263,9 @@ static ssize_t ovl_write_iter(struct kiocb *iocb, struct iov_iter *iter)
 	old_cred = ovl_override_creds(file_inode(file)->i_sb);
 	file_start_write(real.file);
 	ret = vfs_iter_write(real.file, iter, &iocb->ki_pos,
-			     ovl_iocb_to_rwf(iocb));
+			     iocb_to_rw_flags(iocb->ki_flags, OVL_IOCB_MASK));
 	file_end_write(real.file);
-	revert_creds(old_cred);
+	ovl_revert_creds(file_inode(file)->i_sb, old_cred);
 
 	/* Update size */
 	ovl_copyattr(ovl_inode_real(inode), inode);
@@ -307,7 +292,7 @@ static int ovl_fsync(struct file *file, loff_t start, loff_t end, int datasync)
 	if (file_inode(real.file) == ovl_inode_upper(file_inode(file))) {
 		old_cred = ovl_override_creds(file_inode(file)->i_sb);
 		ret = vfs_fsync_range(real.file, start, end, datasync);
-		revert_creds(old_cred);
+		ovl_revert_creds(file_inode(file)->i_sb, old_cred);
 	}
 
 	fdput(real);
@@ -331,7 +316,7 @@ static int ovl_mmap(struct file *file, struct vm_area_struct *vma)
 
 	old_cred = ovl_override_creds(file_inode(file)->i_sb);
 	ret = call_mmap(vma->vm_file, vma);
-	revert_creds(old_cred);
+	ovl_revert_creds(file_inode(file)->i_sb, old_cred);
 
 	if (ret) {
 		/* Drop reference count from new vm_file value */
@@ -359,7 +344,7 @@ static long ovl_fallocate(struct file *file, int mode, loff_t offset, loff_t len
 
 	old_cred = ovl_override_creds(file_inode(file)->i_sb);
 	ret = vfs_fallocate(real.file, mode, offset, len);
-	revert_creds(old_cred);
+	ovl_revert_creds(file_inode(file)->i_sb, old_cred);
 
 	/* Update size */
 	ovl_copyattr(ovl_inode_real(inode), inode);
@@ -381,7 +366,7 @@ static int ovl_fadvise(struct file *file, loff_t offset, loff_t len, int advice)
 
 	old_cred = ovl_override_creds(file_inode(file)->i_sb);
 	ret = vfs_fadvise(real.file, offset, len, advice);
-	revert_creds(old_cred);
+	ovl_revert_creds(file_inode(file)->i_sb, old_cred);
 
 	fdput(real);
 
@@ -401,7 +386,7 @@ static long ovl_real_ioctl(struct file *file, unsigned int cmd,
 
 	old_cred = ovl_override_creds(file_inode(file)->i_sb);
 	ret = vfs_ioctl(real.file, cmd, arg);
-	revert_creds(old_cred);
+	ovl_revert_creds(file_inode(file)->i_sb, old_cred);
 
 	fdput(real);
 
@@ -591,7 +576,7 @@ static loff_t ovl_copyfile(struct file *file_in, loff_t pos_in,
 						flags);
 		break;
 	}
-	revert_creds(old_cred);
+	ovl_revert_creds(file_inode(file_out)->i_sb, old_cred);
 
 	/* Update size */
 	ovl_copyattr(ovl_inode_real(inode_out), inode_out);
diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
index 56b5539..b5dd049 100644
--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
@@ -61,7 +61,7 @@ int ovl_setattr(struct dentry *dentry, struct iattr *attr)
 		inode_lock(upperdentry->d_inode);
 		old_cred = ovl_override_creds(dentry->d_sb);
 		err = notify_change(upperdentry, attr, NULL);
-		revert_creds(old_cred);
+		ovl_revert_creds(dentry->d_sb, old_cred);
 		if (!err)
 			ovl_copyattr(upperdentry->d_inode, dentry->d_inode);
 		inode_unlock(upperdentry->d_inode);
@@ -263,7 +263,7 @@ int ovl_getattr(const struct path *path, struct kstat *stat,
 		stat->nlink = dentry->d_inode->i_nlink;
 
 out:
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 
 	return err;
 }
@@ -297,7 +297,7 @@ int ovl_permission(struct inode *inode, int mask)
 		mask |= MAY_READ;
 	}
 	err = inode_permission(realinode, mask);
-	revert_creds(old_cred);
+	ovl_revert_creds(inode->i_sb, old_cred);
 
 	return err;
 }
@@ -314,7 +314,7 @@ static const char *ovl_get_link(struct dentry *dentry,
 
 	old_cred = ovl_override_creds(dentry->d_sb);
 	p = vfs_get_link(ovl_dentry_real(dentry), done);
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 	return p;
 }
 
@@ -359,7 +359,7 @@ int ovl_xattr_set(struct dentry *dentry, struct inode *inode, const char *name,
 		WARN_ON(flags != XATTR_REPLACE);
 		err = vfs_removexattr(realdentry, name);
 	}
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 
 	/* copy c/mtime */
 	ovl_copyattr(d_inode(realdentry), inode);
@@ -371,7 +371,7 @@ int ovl_xattr_set(struct dentry *dentry, struct inode *inode, const char *name,
 }
 
 int ovl_xattr_get(struct dentry *dentry, struct inode *inode, const char *name,
-		  void *value, size_t size)
+		  void *value, size_t size, int flags)
 {
 	ssize_t res;
 	const struct cred *old_cred;
@@ -379,8 +379,9 @@ int ovl_xattr_get(struct dentry *dentry, struct inode *inode, const char *name,
 		ovl_i_dentry_upper(inode) ?: ovl_dentry_lower(dentry);
 
 	old_cred = ovl_override_creds(dentry->d_sb);
-	res = vfs_getxattr(realdentry, name, value, size);
-	revert_creds(old_cred);
+	res = __vfs_getxattr(realdentry, d_inode(realdentry), name,
+			     value, size, flags);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 	return res;
 }
 
@@ -405,7 +406,7 @@ ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size)
 
 	old_cred = ovl_override_creds(dentry->d_sb);
 	res = vfs_listxattr(realdentry, list, size);
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 	if (res <= 0 || size == 0)
 		return res;
 
@@ -440,7 +441,7 @@ struct posix_acl *ovl_get_acl(struct inode *inode, int type)
 
 	old_cred = ovl_override_creds(inode->i_sb);
 	acl = get_acl(realinode, type);
-	revert_creds(old_cred);
+	ovl_revert_creds(inode->i_sb, old_cred);
 
 	return acl;
 }
@@ -478,7 +479,7 @@ static int ovl_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
 		filemap_write_and_wait(realinode->i_mapping);
 
 	err = realinode->i_op->fiemap(realinode, fieinfo, start, len);
-	revert_creds(old_cred);
+	ovl_revert_creds(inode->i_sb, old_cred);
 
 	return err;
 }
diff --git a/fs/overlayfs/namei.c b/fs/overlayfs/namei.c
index f47c591..4c4de7a 100644
--- a/fs/overlayfs/namei.c
+++ b/fs/overlayfs/namei.c
@@ -106,10 +106,11 @@ int ovl_check_fh_len(struct ovl_fh *fh, int fh_len)
 
 static struct ovl_fh *ovl_get_fh(struct dentry *dentry, const char *name)
 {
-	int res, err;
+	ssize_t res;
+	int err;
 	struct ovl_fh *fh = NULL;
 
-	res = vfs_getxattr(dentry, name, NULL, 0);
+	res = ovl_do_vfs_getxattr(dentry, name, NULL, 0);
 	if (res < 0) {
 		if (res == -ENODATA || res == -EOPNOTSUPP)
 			return NULL;
@@ -123,7 +124,7 @@ static struct ovl_fh *ovl_get_fh(struct dentry *dentry, const char *name)
 	if (!fh)
 		return ERR_PTR(-ENOMEM);
 
-	res = vfs_getxattr(dentry, name, fh, res);
+	res = ovl_do_vfs_getxattr(dentry, name, fh, res);
 	if (res < 0)
 		goto fail;
 
@@ -141,10 +142,11 @@ static struct ovl_fh *ovl_get_fh(struct dentry *dentry, const char *name)
 	return NULL;
 
 fail:
-	pr_warn_ratelimited("overlayfs: failed to get origin (%i)\n", res);
+	pr_warn_ratelimited("overlayfs: failed to get origin (%zi)\n", res);
 	goto out;
 invalid:
-	pr_warn_ratelimited("overlayfs: invalid origin (%*phN)\n", res, fh);
+	pr_warn_ratelimited("overlayfs: invalid origin (%*phN)\n",
+			    (int)res, fh);
 	goto out;
 }
 
@@ -1082,7 +1084,7 @@ struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry,
 			goto out_free_oe;
 	}
 
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 	if (origin_path) {
 		dput(origin_path->dentry);
 		kfree(origin_path);
@@ -1109,7 +1111,7 @@ struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry,
 	kfree(upperredirect);
 out:
 	kfree(d.redirect);
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 	return ERR_PTR(err);
 }
 
@@ -1163,7 +1165,7 @@ bool ovl_lower_positive(struct dentry *dentry)
 			dput(this);
 		}
 	}
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 
 	return positive;
 }
diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h
index 6934bcf..ab98022 100644
--- a/fs/overlayfs/overlayfs.h
+++ b/fs/overlayfs/overlayfs.h
@@ -200,11 +200,20 @@ static inline bool ovl_open_flags_need_copy_up(int flags)
 	return ((OPEN_FMODE(flags) & FMODE_WRITE) || (flags & O_TRUNC));
 }
 
+static inline ssize_t ovl_do_vfs_getxattr(struct dentry *dentry,
+					  const char *name, void *buf,
+					  size_t size)
+{
+	return __vfs_getxattr(dentry, d_inode(dentry), name, buf, size,
+			      XATTR_NOSECURITY);
+}
+
 /* util.c */
 int ovl_want_write(struct dentry *dentry);
 void ovl_drop_write(struct dentry *dentry);
 struct dentry *ovl_workdir(struct dentry *dentry);
 const struct cred *ovl_override_creds(struct super_block *sb);
+void ovl_revert_creds(struct super_block *sb, const struct cred *oldcred);
 struct super_block *ovl_same_sb(struct super_block *sb);
 int ovl_can_decode_fh(struct super_block *sb);
 struct dentry *ovl_indexdir(struct super_block *sb);
@@ -356,7 +365,7 @@ int ovl_permission(struct inode *inode, int mask);
 int ovl_xattr_set(struct dentry *dentry, struct inode *inode, const char *name,
 		  const void *value, size_t size, int flags);
 int ovl_xattr_get(struct dentry *dentry, struct inode *inode, const char *name,
-		  void *value, size_t size);
+		  void *value, size_t size, int flags);
 ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size);
 struct posix_acl *ovl_get_acl(struct inode *inode, int type);
 int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags);
diff --git a/fs/overlayfs/ovl_entry.h b/fs/overlayfs/ovl_entry.h
index 28348c4..e3b30f5 100644
--- a/fs/overlayfs/ovl_entry.h
+++ b/fs/overlayfs/ovl_entry.h
@@ -17,6 +17,7 @@ struct ovl_config {
 	bool nfs_export;
 	int xino;
 	bool metacopy;
+	bool override_creds;
 };
 
 struct ovl_sb {
diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c
index 7255e6a5..a32399d 100644
--- a/fs/overlayfs/readdir.c
+++ b/fs/overlayfs/readdir.c
@@ -286,7 +286,7 @@ static int ovl_check_whiteouts(struct dentry *dir, struct ovl_readdir_data *rdd)
 		}
 		inode_unlock(dir->d_inode);
 	}
-	revert_creds(old_cred);
+	ovl_revert_creds(rdd->dentry->d_sb, old_cred);
 
 	return err;
 }
@@ -924,7 +924,7 @@ int ovl_check_empty_dir(struct dentry *dentry, struct list_head *list)
 
 	old_cred = ovl_override_creds(dentry->d_sb);
 	err = ovl_dir_read_merged(dentry, list, &root);
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 	if (err)
 		return err;
 
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
index 87cf9b1..1a5fce9 100644
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
@@ -53,6 +53,11 @@ module_param_named(xino_auto, ovl_xino_auto_def, bool, 0644);
 MODULE_PARM_DESC(xino_auto,
 		 "Auto enable xino feature");
 
+static bool __read_mostly ovl_override_creds_def = true;
+module_param_named(override_creds, ovl_override_creds_def, bool, 0644);
+MODULE_PARM_DESC(ovl_override_creds_def,
+		 "Use mounter's credentials for accesses");
+
 static void ovl_entry_stack_free(struct ovl_entry *oe)
 {
 	unsigned int i;
@@ -366,6 +371,9 @@ static int ovl_show_options(struct seq_file *m, struct dentry *dentry)
 	if (ofs->config.metacopy != ovl_metacopy_def)
 		seq_printf(m, ",metacopy=%s",
 			   ofs->config.metacopy ? "on" : "off");
+	if (ofs->config.override_creds != ovl_override_creds_def)
+		seq_show_option(m, "override_creds",
+				ofs->config.override_creds ? "on" : "off");
 	return 0;
 }
 
@@ -406,6 +414,8 @@ enum {
 	OPT_XINO_AUTO,
 	OPT_METACOPY_ON,
 	OPT_METACOPY_OFF,
+	OPT_OVERRIDE_CREDS_ON,
+	OPT_OVERRIDE_CREDS_OFF,
 	OPT_ERR,
 };
 
@@ -424,6 +434,8 @@ static const match_table_t ovl_tokens = {
 	{OPT_XINO_AUTO,			"xino=auto"},
 	{OPT_METACOPY_ON,		"metacopy=on"},
 	{OPT_METACOPY_OFF,		"metacopy=off"},
+	{OPT_OVERRIDE_CREDS_ON,		"override_creds=on"},
+	{OPT_OVERRIDE_CREDS_OFF,	"override_creds=off"},
 	{OPT_ERR,			NULL}
 };
 
@@ -482,6 +494,7 @@ static int ovl_parse_opt(char *opt, struct ovl_config *config)
 	config->redirect_mode = kstrdup(ovl_redirect_mode_def(), GFP_KERNEL);
 	if (!config->redirect_mode)
 		return -ENOMEM;
+	config->override_creds = ovl_override_creds_def;
 
 	while ((p = ovl_next_opt(&opt)) != NULL) {
 		int token;
@@ -562,6 +575,14 @@ static int ovl_parse_opt(char *opt, struct ovl_config *config)
 			config->metacopy = false;
 			break;
 
+		case OPT_OVERRIDE_CREDS_ON:
+			config->override_creds = true;
+			break;
+
+		case OPT_OVERRIDE_CREDS_OFF:
+			config->override_creds = false;
+			break;
+
 		default:
 			pr_err("overlayfs: unrecognized mount option \"%s\" or missing value\n", p);
 			return -EINVAL;
@@ -858,9 +879,9 @@ static unsigned int ovl_split_lowerdirs(char *str)
 static int __maybe_unused
 ovl_posix_acl_xattr_get(const struct xattr_handler *handler,
 			struct dentry *dentry, struct inode *inode,
-			const char *name, void *buffer, size_t size)
+			const char *name, void *buffer, size_t size, int flags)
 {
-	return ovl_xattr_get(dentry, inode, handler->name, buffer, size);
+	return ovl_xattr_get(dentry, inode, handler->name, buffer, size, flags);
 }
 
 static int __maybe_unused
@@ -923,7 +944,8 @@ ovl_posix_acl_xattr_set(const struct xattr_handler *handler,
 
 static int ovl_own_xattr_get(const struct xattr_handler *handler,
 			     struct dentry *dentry, struct inode *inode,
-			     const char *name, void *buffer, size_t size)
+			     const char *name, void *buffer, size_t size,
+			     int flags)
 {
 	return -EOPNOTSUPP;
 }
@@ -938,9 +960,10 @@ static int ovl_own_xattr_set(const struct xattr_handler *handler,
 
 static int ovl_other_xattr_get(const struct xattr_handler *handler,
 			       struct dentry *dentry, struct inode *inode,
-			       const char *name, void *buffer, size_t size)
+			       const char *name, void *buffer, size_t size,
+			       int flags)
 {
-	return ovl_xattr_get(dentry, inode, name, buffer, size);
+	return ovl_xattr_get(dentry, inode, name, buffer, size, flags);
 }
 
 static int ovl_other_xattr_set(const struct xattr_handler *handler,
@@ -1727,7 +1750,6 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
 		       ovl_dentry_lower(root_dentry), NULL);
 
 	sb->s_root = root_dentry;
-
 	return 0;
 
 out_free_oe:
diff --git a/fs/overlayfs/util.c b/fs/overlayfs/util.c
index f5678a3..e1fd97fe 100644
--- a/fs/overlayfs/util.c
+++ b/fs/overlayfs/util.c
@@ -37,9 +37,17 @@ const struct cred *ovl_override_creds(struct super_block *sb)
 {
 	struct ovl_fs *ofs = sb->s_fs_info;
 
+	if (!ofs->config.override_creds)
+		return NULL;
 	return override_creds(ofs->creator_cred);
 }
 
+void ovl_revert_creds(struct super_block *sb, const struct cred *old_cred)
+{
+	if (old_cred)
+		revert_creds(old_cred);
+}
+
 struct super_block *ovl_same_sb(struct super_block *sb)
 {
 	struct ovl_fs *ofs = sb->s_fs_info;
@@ -537,9 +545,9 @@ void ovl_copy_up_end(struct dentry *dentry)
 
 bool ovl_check_origin_xattr(struct dentry *dentry)
 {
-	int res;
+	ssize_t res;
 
-	res = vfs_getxattr(dentry, OVL_XATTR_ORIGIN, NULL, 0);
+	res = ovl_do_vfs_getxattr(dentry, OVL_XATTR_ORIGIN, NULL, 0);
 
 	/* Zero size value means "copied up but origin unknown" */
 	if (res >= 0)
@@ -550,13 +558,13 @@ bool ovl_check_origin_xattr(struct dentry *dentry)
 
 bool ovl_check_dir_xattr(struct dentry *dentry, const char *name)
 {
-	int res;
+	ssize_t res;
 	char val;
 
 	if (!d_is_dir(dentry))
 		return false;
 
-	res = vfs_getxattr(dentry, name, &val, 1);
+	res = ovl_do_vfs_getxattr(dentry, name, &val, 1);
 	if (res == 1 && val == 'y')
 		return true;
 
@@ -791,7 +799,7 @@ int ovl_nlink_start(struct dentry *dentry)
 	 * value relative to the upper inode nlink in an upper inode xattr.
 	 */
 	err = ovl_set_nlink_upper(dentry);
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 
 out:
 	if (err)
@@ -809,7 +817,7 @@ void ovl_nlink_end(struct dentry *dentry)
 
 		old_cred = ovl_override_creds(dentry->d_sb);
 		ovl_cleanup_index(dentry);
-		revert_creds(old_cred);
+		ovl_revert_creds(dentry->d_sb, old_cred);
 	}
 
 	ovl_inode_unlock(inode);
@@ -837,13 +845,13 @@ int ovl_lock_rename_workdir(struct dentry *workdir, struct dentry *upperdir)
 /* err < 0, 0 if no metacopy xattr, 1 if metacopy xattr found */
 int ovl_check_metacopy_xattr(struct dentry *dentry)
 {
-	int res;
+	ssize_t res;
 
 	/* Only regular files can have metacopy xattr */
 	if (!S_ISREG(d_inode(dentry)->i_mode))
 		return 0;
 
-	res = vfs_getxattr(dentry, OVL_XATTR_METACOPY, NULL, 0);
+	res = ovl_do_vfs_getxattr(dentry, OVL_XATTR_METACOPY, NULL, 0);
 	if (res < 0) {
 		if (res == -ENODATA || res == -EOPNOTSUPP)
 			return 0;
@@ -852,7 +860,7 @@ int ovl_check_metacopy_xattr(struct dentry *dentry)
 
 	return 1;
 out:
-	pr_warn_ratelimited("overlayfs: failed to get metacopy (%i)\n", res);
+	pr_warn_ratelimited("overlayfs: failed to get metacopy (%zi)\n", res);
 	return res;
 }
 
@@ -878,7 +886,7 @@ ssize_t ovl_getxattr(struct dentry *dentry, char *name, char **value,
 	ssize_t res;
 	char *buf = NULL;
 
-	res = vfs_getxattr(dentry, name, NULL, 0);
+	res = ovl_do_vfs_getxattr(dentry, name, NULL, 0);
 	if (res < 0) {
 		if (res == -ENODATA || res == -EOPNOTSUPP)
 			return -ENODATA;
@@ -890,7 +898,7 @@ ssize_t ovl_getxattr(struct dentry *dentry, char *name, char **value,
 		if (!buf)
 			return -ENOMEM;
 
-		res = vfs_getxattr(dentry, name, buf, res);
+		res = ovl_do_vfs_getxattr(dentry, name, buf, res);
 		if (res < 0)
 			goto fail;
 	}
diff --git a/fs/posix_acl.c b/fs/posix_acl.c
index 84ad1c9..cd55621 100644
--- a/fs/posix_acl.c
+++ b/fs/posix_acl.c
@@ -832,7 +832,7 @@ EXPORT_SYMBOL (posix_acl_to_xattr);
 static int
 posix_acl_xattr_get(const struct xattr_handler *handler,
 		    struct dentry *unused, struct inode *inode,
-		    const char *name, void *value, size_t size)
+		    const char *name, void *value, size_t size, int flags)
 {
 	struct posix_acl *acl;
 	int error;
diff --git a/fs/proc/Makefile b/fs/proc/Makefile
index ead487e..bd08616 100644
--- a/fs/proc/Makefile
+++ b/fs/proc/Makefile
@@ -33,3 +33,4 @@
 proc-$(CONFIG_PROC_VMCORE)	+= vmcore.o
 proc-$(CONFIG_PRINTK)	+= kmsg.o
 proc-$(CONFIG_PROC_PAGE_MONITOR)	+= page.o
+proc-$(CONFIG_BOOT_CONFIG)	+= bootconfig.o
diff --git a/fs/proc/array.c b/fs/proc/array.c
index 46dcb6f0..6d9e56d 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -342,6 +342,8 @@ static inline void task_seccomp(struct seq_file *m, struct task_struct *p)
 	seq_put_decimal_ull(m, "NoNewPrivs:\t", task_no_new_privs(p));
 #ifdef CONFIG_SECCOMP
 	seq_put_decimal_ull(m, "\nSeccomp:\t", p->seccomp.mode);
+	seq_put_decimal_ull(m, "\nSeccomp_filters:\t",
+			    atomic_read(&p->seccomp.filter_count));
 #endif
 	seq_puts(m, "\nSpeculation_Store_Bypass:\t");
 	switch (arch_prctl_spec_ctrl_get(p, PR_SPEC_STORE_BYPASS)) {
diff --git a/fs/proc/base.c b/fs/proc/base.c
index 653c2d8..da7f461 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -94,6 +94,7 @@
 #include <linux/sched/debug.h>
 #include <linux/sched/stat.h>
 #include <linux/posix-timers.h>
+#include <linux/cpufreq_times.h>
 #include <trace/events/oom.h>
 #include "internal.h"
 #include "fd.h"
@@ -2999,7 +3000,7 @@ static const struct pid_entry tgid_base_stuff[] = {
 	DIR("task",       S_IRUGO|S_IXUGO, proc_task_inode_operations, proc_task_operations),
 	DIR("fd",         S_IRUSR|S_IXUSR, proc_fd_inode_operations, proc_fd_operations),
 	DIR("map_files",  S_IRUSR|S_IXUSR, proc_map_files_inode_operations, proc_map_files_operations),
-	DIR("fdinfo",     S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fdinfo_operations),
+	DIR("fdinfo",     S_IRUGO|S_IXUGO, proc_fdinfo_inode_operations, proc_fdinfo_operations),
 	DIR("ns",	  S_IRUSR|S_IXUGO, proc_ns_dir_inode_operations, proc_ns_dir_operations),
 #ifdef CONFIG_NET
 	DIR("net",        S_IRUGO|S_IXUGO, proc_net_inode_operations, proc_net_operations),
@@ -3090,6 +3091,9 @@ static const struct pid_entry tgid_base_stuff[] = {
 #ifdef CONFIG_LIVEPATCH
 	ONE("patch_state",  S_IRUSR, proc_pid_patch_state),
 #endif
+#ifdef CONFIG_CPU_FREQ_TIMES
+	ONE("time_in_state", 0444, proc_time_in_state_show),
+#endif
 #ifdef CONFIG_STACKLEAK_METRICS
 	ONE("stack_depth", S_IRUGO, proc_stack_depth),
 #endif
@@ -3398,7 +3402,7 @@ static const struct inode_operations proc_tid_comm_inode_operations = {
  */
 static const struct pid_entry tid_base_stuff[] = {
 	DIR("fd",        S_IRUSR|S_IXUSR, proc_fd_inode_operations, proc_fd_operations),
-	DIR("fdinfo",    S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fdinfo_operations),
+	DIR("fdinfo",    S_IRUGO|S_IXUGO, proc_fdinfo_inode_operations, proc_fdinfo_operations),
 	DIR("ns",	 S_IRUSR|S_IXUGO, proc_ns_dir_inode_operations, proc_ns_dir_operations),
 #ifdef CONFIG_NET
 	DIR("net",        S_IRUGO|S_IXUGO, proc_net_inode_operations, proc_net_operations),
@@ -3486,6 +3490,9 @@ static const struct pid_entry tid_base_stuff[] = {
 #ifdef CONFIG_PROC_PID_ARCH_STATUS
 	ONE("arch_status", S_IRUGO, proc_pid_arch_status),
 #endif
+#ifdef CONFIG_CPU_FREQ_TIMES
+	ONE("time_in_state", 0444, proc_time_in_state_show),
+#endif
 };
 
 static int proc_tid_base_readdir(struct file *file, struct dir_context *ctx)
diff --git a/fs/proc/bootconfig.c b/fs/proc/bootconfig.c
new file mode 100644
index 0000000..ad31ec4
--- /dev/null
+++ b/fs/proc/bootconfig.c
@@ -0,0 +1,94 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * /proc/bootconfig - Extra boot configuration
+ */
+#include <linux/fs.h>
+#include <linux/init.h>
+#include <linux/printk.h>
+#include <linux/proc_fs.h>
+#include <linux/seq_file.h>
+#include <linux/bootconfig.h>
+#include <linux/slab.h>
+
+static char *saved_boot_config;
+
+static int boot_config_proc_show(struct seq_file *m, void *v)
+{
+	if (saved_boot_config)
+		seq_puts(m, saved_boot_config);
+	return 0;
+}
+
+/* Rest size of buffer */
+#define rest(dst, end) ((end) > (dst) ? (end) - (dst) : 0)
+
+/* Return the needed total length if @size is 0 */
+static int __init copy_xbc_key_value_list(char *dst, size_t size)
+{
+	struct xbc_node *leaf, *vnode;
+	char *key, *end = dst + size;
+	const char *val;
+	char q;
+	int ret = 0;
+
+	key = kzalloc(XBC_KEYLEN_MAX, GFP_KERNEL);
+
+	xbc_for_each_key_value(leaf, val) {
+		ret = xbc_node_compose_key(leaf, key, XBC_KEYLEN_MAX);
+		if (ret < 0)
+			break;
+		ret = snprintf(dst, rest(dst, end), "%s = ", key);
+		if (ret < 0)
+			break;
+		dst += ret;
+		vnode = xbc_node_get_child(leaf);
+		if (vnode) {
+			xbc_array_for_each_value(vnode, val) {
+				if (strchr(val, '"'))
+					q = '\'';
+				else
+					q = '"';
+				ret = snprintf(dst, rest(dst, end), "%c%s%c%s",
+					q, val, q, vnode->next ? ", " : "\n");
+				if (ret < 0)
+					goto out;
+				dst += ret;
+			}
+		} else {
+			ret = snprintf(dst, rest(dst, end), "\"\"\n");
+			if (ret < 0)
+				break;
+			dst += ret;
+		}
+	}
+out:
+	kfree(key);
+
+	return ret < 0 ? ret : dst - (end - size);
+}
+
+static int __init proc_boot_config_init(void)
+{
+	int len;
+
+	len = copy_xbc_key_value_list(NULL, 0);
+	if (len < 0)
+		return len;
+
+	if (len > 0) {
+		saved_boot_config = kzalloc(len + 1, GFP_KERNEL);
+		if (!saved_boot_config)
+			return -ENOMEM;
+
+		len = copy_xbc_key_value_list(saved_boot_config, len + 1);
+		if (len < 0) {
+			kfree(saved_boot_config);
+			return len;
+		}
+	}
+
+	proc_create_single("bootconfig", 0, NULL, boot_config_proc_show);
+
+	return 0;
+}
+fs_initcall(proc_boot_config_init);
diff --git a/fs/proc/fd.c b/fs/proc/fd.c
index 81882a1..6157913 100644
--- a/fs/proc/fd.c
+++ b/fs/proc/fd.c
@@ -6,6 +6,7 @@
 #include <linux/fdtable.h>
 #include <linux/namei.h>
 #include <linux/pid.h>
+#include <linux/ptrace.h>
 #include <linux/security.h>
 #include <linux/file.h>
 #include <linux/seq_file.h>
@@ -53,9 +54,10 @@ static int seq_show(struct seq_file *m, void *v)
 	if (ret)
 		return ret;
 
-	seq_printf(m, "pos:\t%lli\nflags:\t0%o\nmnt_id:\t%i\n",
+	seq_printf(m, "pos:\t%lli\nflags:\t0%o\nmnt_id:\t%i\nino:\t%lu\n",
 		   (long long)file->f_pos, f_flags,
-		   real_mount(file->f_path.mnt)->mnt_id);
+		   real_mount(file->f_path.mnt)->mnt_id,
+		   file_inode(file)->i_ino);
 
 	show_fd_locks(m, file, files);
 	if (seq_has_overflowed(m))
@@ -71,6 +73,18 @@ static int seq_show(struct seq_file *m, void *v)
 
 static int seq_fdinfo_open(struct inode *inode, struct file *file)
 {
+	bool allowed = false;
+	struct task_struct *task = get_proc_task(inode);
+
+	if (!task)
+		return -ESRCH;
+
+	allowed = ptrace_may_access(task, PTRACE_MODE_READ_FSCREDS);
+	put_task_struct(task);
+
+	if (!allowed)
+		return -EACCES;
+
 	return single_open(file, seq_show, inode);
 }
 
@@ -325,7 +339,7 @@ static struct dentry *proc_fdinfo_instantiate(struct dentry *dentry,
 	struct proc_inode *ei;
 	struct inode *inode;
 
-	inode = proc_pid_make_inode(dentry->d_sb, task, S_IFREG | S_IRUSR);
+	inode = proc_pid_make_inode(dentry->d_sb, task, S_IFREG | S_IRUGO);
 	if (!inode)
 		return ERR_PTR(-ENOENT);
 
diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c
index 8c1f1bb..4976800 100644
--- a/fs/proc/meminfo.c
+++ b/fs/proc/meminfo.c
@@ -103,6 +103,10 @@ static int meminfo_proc_show(struct seq_file *m, void *v)
 	show_val_kb(m, "SUnreclaim:     ", sunreclaim);
 	seq_printf(m, "KernelStack:    %8lu kB\n",
 		   global_zone_page_state(NR_KERNEL_STACK_KB));
+#ifdef CONFIG_SHADOW_CALL_STACK
+	seq_printf(m, "ShadowCallStack:%8lu kB\n",
+		   global_zone_page_state(NR_KERNEL_SCS_BYTES) / 1024);
+#endif
 	show_val_kb(m, "PageTables:     ",
 		    global_zone_page_state(NR_PAGETABLE));
 
diff --git a/fs/proc/root.c b/fs/proc/root.c
index 0b7c8df..44f78d3 100644
--- a/fs/proc/root.c
+++ b/fs/proc/root.c
@@ -82,8 +82,7 @@ static int proc_parse_param(struct fs_context *fc, struct fs_parameter *param)
 	return 0;
 }
 
-static void proc_apply_options(struct super_block *s,
-			       struct fs_context *fc,
+static void proc_apply_options(struct fs_context *fc,
 			       struct pid_namespace *pid_ns,
 			       struct user_namespace *user_ns)
 {
@@ -101,7 +100,7 @@ static int proc_fill_super(struct super_block *s, struct fs_context *fc)
 	struct inode *root_inode;
 	int ret;
 
-	proc_apply_options(s, fc, pid_ns, current_user_ns());
+	proc_apply_options(fc, pid_ns, current_user_ns());
 
 	/* User space would break if executables or devices appear on proc */
 	s->s_iflags |= SB_I_USERNS_VISIBLE | SB_I_NOEXEC | SB_I_NODEV;
@@ -149,7 +148,7 @@ static int proc_reconfigure(struct fs_context *fc)
 
 	sync_filesystem(sb);
 
-	proc_apply_options(sb, fc, pid, current_user_ns());
+	proc_apply_options(fc, pid, current_user_ns());
 	return 0;
 }
 
@@ -157,6 +156,7 @@ static int proc_get_tree(struct fs_context *fc)
 {
 	struct proc_fs_context *ctx = fc->fs_private;
 
+	proc_apply_options(fc, ctx->pid_ns, current_user_ns());
 	return get_tree_keyed(fc, proc_fill_super, ctx->pid_ns);
 }
 
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
index f51dadd1..68a3ff1 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
@@ -123,6 +123,56 @@ static void release_task_mempolicy(struct proc_maps_private *priv)
 }
 #endif
 
+static void seq_print_vma_name(struct seq_file *m, struct vm_area_struct *vma)
+{
+	const char __user *name = vma_get_anon_name(vma);
+	struct mm_struct *mm = vma->vm_mm;
+
+	unsigned long page_start_vaddr;
+	unsigned long page_offset;
+	unsigned long num_pages;
+	unsigned long max_len = NAME_MAX;
+	int i;
+
+	page_start_vaddr = (unsigned long)name & PAGE_MASK;
+	page_offset = (unsigned long)name - page_start_vaddr;
+	num_pages = DIV_ROUND_UP(page_offset + max_len, PAGE_SIZE);
+
+	seq_puts(m, "[anon:");
+
+	for (i = 0; i < num_pages; i++) {
+		int len;
+		int write_len;
+		const char *kaddr;
+		long pages_pinned;
+		struct page *page;
+
+		pages_pinned = get_user_pages_remote(current, mm,
+				page_start_vaddr, 1, 0, &page, NULL, NULL);
+		if (pages_pinned < 1) {
+			seq_puts(m, "<fault>]");
+			return;
+		}
+
+		kaddr = (const char *)kmap(page);
+		len = min(max_len, PAGE_SIZE - page_offset);
+		write_len = strnlen(kaddr + page_offset, len);
+		seq_write(m, kaddr + page_offset, write_len);
+		kunmap(page);
+		put_page(page);
+
+		/* if strnlen hit a null terminator then we're done */
+		if (write_len != len)
+			break;
+
+		max_len -= len;
+		page_offset = 0;
+		page_start_vaddr += PAGE_SIZE;
+	}
+
+	seq_putc(m, ']');
+}
+
 static void vma_stop(struct proc_maps_private *priv)
 {
 	struct mm_struct *mm = priv->mm;
@@ -348,8 +398,15 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma)
 			goto done;
 		}
 
-		if (is_stack(vma))
+		if (is_stack(vma)) {
 			name = "[stack]";
+			goto done;
+		}
+
+		if (vma_get_anon_name(vma)) {
+			seq_pad(m, ' ');
+			seq_print_vma_name(m, vma);
+		}
 	}
 
 done:
@@ -832,6 +889,11 @@ static int show_smap(struct seq_file *m, void *v)
 	smap_gather_stats(vma, &mss);
 
 	show_map_vma(m, vma);
+	if (vma_get_anon_name(vma)) {
+		seq_puts(m, "Name:           ");
+		seq_print_vma_name(m, vma);
+		seq_putc(m, '\n');
+	}
 
 	SEQ_PUT_DEC("Size:           ", vma->vm_end - vma->vm_start);
 	SEQ_PUT_DEC(" kB\nKernelPageSize: ", vma_kernel_pagesize(vma));
diff --git a/fs/reiserfs/xattr_security.c b/fs/reiserfs/xattr_security.c
index 20be9a0..eedfa07 100644
--- a/fs/reiserfs/xattr_security.c
+++ b/fs/reiserfs/xattr_security.c
@@ -11,7 +11,8 @@
 
 static int
 security_get(const struct xattr_handler *handler, struct dentry *unused,
-	     struct inode *inode, const char *name, void *buffer, size_t size)
+	     struct inode *inode, const char *name, void *buffer, size_t size,
+	     int flags)
 {
 	if (IS_PRIVATE(inode))
 		return -EPERM;
diff --git a/fs/reiserfs/xattr_trusted.c b/fs/reiserfs/xattr_trusted.c
index 5ed48da..2d11d98 100644
--- a/fs/reiserfs/xattr_trusted.c
+++ b/fs/reiserfs/xattr_trusted.c
@@ -10,7 +10,8 @@
 
 static int
 trusted_get(const struct xattr_handler *handler, struct dentry *unused,
-	    struct inode *inode, const char *name, void *buffer, size_t size)
+	    struct inode *inode, const char *name, void *buffer, size_t size,
+	    int flags)
 {
 	if (!capable(CAP_SYS_ADMIN) || IS_PRIVATE(inode))
 		return -EPERM;
diff --git a/fs/reiserfs/xattr_user.c b/fs/reiserfs/xattr_user.c
index a573ca4..2a59d85 100644
--- a/fs/reiserfs/xattr_user.c
+++ b/fs/reiserfs/xattr_user.c
@@ -9,7 +9,8 @@
 
 static int
 user_get(const struct xattr_handler *handler, struct dentry *unused,
-	 struct inode *inode, const char *name, void *buffer, size_t size)
+	 struct inode *inode, const char *name, void *buffer, size_t size,
+	 int flags)
 {
 	if (!reiserfs_xattrs_user(inode->i_sb))
 		return -EOPNOTSUPP;
diff --git a/fs/squashfs/xattr.c b/fs/squashfs/xattr.c
index e1e3f3d..d8d58c9 100644
--- a/fs/squashfs/xattr.c
+++ b/fs/squashfs/xattr.c
@@ -204,7 +204,7 @@ static int squashfs_xattr_handler_get(const struct xattr_handler *handler,
 				      struct dentry *unused,
 				      struct inode *inode,
 				      const char *name,
-				      void *buffer, size_t size)
+				      void *buffer, size_t size, int flags)
 {
 	return squashfs_xattr_get(inode, handler->flags, name,
 		buffer, size);
diff --git a/fs/sync.c b/fs/sync.c
index 4d1ff01..863e257 100644
--- a/fs/sync.c
+++ b/fs/sync.c
@@ -9,7 +9,7 @@
 #include <linux/slab.h>
 #include <linux/export.h>
 #include <linux/namei.h>
-#include <linux/sched.h>
+#include <linux/sched/xacct.h>
 #include <linux/writeback.h>
 #include <linux/syscalls.h>
 #include <linux/linkage.h>
@@ -161,7 +161,7 @@ SYSCALL_DEFINE1(syncfs, int, fd)
 {
 	struct fd f = fdget(fd);
 	struct super_block *sb;
-	int ret;
+	int ret, ret2;
 
 	if (!f.file)
 		return -EBADF;
@@ -171,8 +171,10 @@ SYSCALL_DEFINE1(syncfs, int, fd)
 	ret = sync_filesystem(sb);
 	up_read(&sb->s_umount);
 
+	ret2 = errseq_check_and_advance(&sb->s_wb_err, &f.file->f_sb_err);
+
 	fdput(f);
-	return ret;
+	return ret ? ret : ret2;
 }
 
 /**
@@ -220,6 +222,7 @@ static int do_fsync(unsigned int fd, int datasync)
 	if (f.file) {
 		ret = vfs_fsync(f.file, datasync);
 		fdput(f);
+		inc_syscfs(current);
 	}
 	return ret;
 }
diff --git a/fs/ubifs/Kconfig b/fs/ubifs/Kconfig
index 69932bc..45d3d20 100644
--- a/fs/ubifs/Kconfig
+++ b/fs/ubifs/Kconfig
@@ -12,6 +12,7 @@
 	select CRYPTO_ZSTD if UBIFS_FS_ZSTD
 	select CRYPTO_HASH_INFO
 	select UBIFS_FS_XATTR if FS_ENCRYPTION
+	select FS_ENCRYPTION_ALGS if FS_ENCRYPTION
 	depends on MTD_UBI
 	help
 	  UBIFS is a file system for flash devices which works on top of UBI.
diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
index a5e5e9b..7347512 100644
--- a/fs/ubifs/dir.c
+++ b/fs/ubifs/dir.c
@@ -81,19 +81,6 @@ struct inode *ubifs_new_inode(struct ubifs_info *c, struct inode *dir,
 	struct ubifs_inode *ui;
 	bool encrypted = false;
 
-	if (ubifs_crypt_is_encrypted(dir)) {
-		err = fscrypt_get_encryption_info(dir);
-		if (err) {
-			ubifs_err(c, "fscrypt_get_encryption_info failed: %i", err);
-			return ERR_PTR(err);
-		}
-
-		if (!fscrypt_has_encryption_key(dir))
-			return ERR_PTR(-EPERM);
-
-		encrypted = true;
-	}
-
 	inode = new_inode(c->vfs_sb);
 	ui = ubifs_inode(inode);
 	if (!inode)
@@ -112,6 +99,12 @@ struct inode *ubifs_new_inode(struct ubifs_info *c, struct inode *dir,
 			 current_time(inode);
 	inode->i_mapping->nrpages = 0;
 
+	err = fscrypt_prepare_new_inode(dir, inode, &encrypted);
+	if (err) {
+		ubifs_err(c, "fscrypt_prepare_new_inode failed: %i", err);
+		goto out_iput;
+	}
+
 	switch (mode & S_IFMT) {
 	case S_IFREG:
 		inode->i_mapping->a_ops = &ubifs_file_address_operations;
@@ -131,7 +124,6 @@ struct inode *ubifs_new_inode(struct ubifs_info *c, struct inode *dir,
 	case S_IFBLK:
 	case S_IFCHR:
 		inode->i_op  = &ubifs_file_inode_operations;
-		encrypted = false;
 		break;
 	default:
 		BUG();
@@ -151,9 +143,8 @@ struct inode *ubifs_new_inode(struct ubifs_info *c, struct inode *dir,
 		if (c->highest_inum >= INUM_WATERMARK) {
 			spin_unlock(&c->cnt_lock);
 			ubifs_err(c, "out of inode numbers");
-			make_bad_inode(inode);
-			iput(inode);
-			return ERR_PTR(-EINVAL);
+			err = -EINVAL;
+			goto out_iput;
 		}
 		ubifs_warn(c, "running out of inode numbers (current %lu, max %u)",
 			   (unsigned long)c->highest_inum, INUM_WATERMARK);
@@ -171,16 +162,19 @@ struct inode *ubifs_new_inode(struct ubifs_info *c, struct inode *dir,
 	spin_unlock(&c->cnt_lock);
 
 	if (encrypted) {
-		err = fscrypt_inherit_context(dir, inode, &encrypted, true);
+		err = fscrypt_set_context(inode, NULL);
 		if (err) {
-			ubifs_err(c, "fscrypt_inherit_context failed: %i", err);
-			make_bad_inode(inode);
-			iput(inode);
-			return ERR_PTR(err);
+			ubifs_err(c, "fscrypt_set_context failed: %i", err);
+			goto out_iput;
 		}
 	}
 
 	return inode;
+
+out_iput:
+	make_bad_inode(inode);
+	iput(inode);
+	return ERR_PTR(err);
 }
 
 static int dbg_check_name(const struct ubifs_info *c,
@@ -209,6 +203,7 @@ static struct dentry *ubifs_lookup(struct inode *dir, struct dentry *dentry,
 	dbg_gen("'%pd' in dir ino %lu", dentry, dir->i_ino);
 
 	err = fscrypt_prepare_lookup(dir, dentry, &nm);
+	generic_set_encrypted_ci_d_ops(dentry);
 	if (err == -ENOENT)
 		return d_splice_alias(NULL, dentry);
 	if (err)
@@ -225,9 +220,7 @@ static struct dentry *ubifs_lookup(struct inode *dir, struct dentry *dentry,
 		goto done;
 	}
 
-	if (nm.hash) {
-		ubifs_assert(c, fname_len(&nm) == 0);
-		ubifs_assert(c, fname_name(&nm) == NULL);
+	if (fname_name(&nm) == NULL) {
 		if (nm.hash & ~UBIFS_S_KEY_HASH_MASK)
 			goto done; /* ENOENT */
 		dent_key_init_hash(c, &key, dir->i_ino, nm.hash);
@@ -263,7 +256,7 @@ static struct dentry *ubifs_lookup(struct inode *dir, struct dentry *dentry,
 		goto done;
 	}
 
-	if (ubifs_crypt_is_encrypted(dir) &&
+	if (IS_ENCRYPTED(dir) &&
 	    (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) &&
 	    !fscrypt_has_permitted_context(dir, inode)) {
 		ubifs_warn(c, "Inconsistent encryption contexts: %lu/%lu",
@@ -510,7 +503,7 @@ static int ubifs_readdir(struct file *file, struct dir_context *ctx)
 	struct ubifs_dent_node *dent;
 	struct inode *dir = file_inode(file);
 	struct ubifs_info *c = dir->i_sb->s_fs_info;
-	bool encrypted = ubifs_crypt_is_encrypted(dir);
+	bool encrypted = IS_ENCRYPTED(dir);
 
 	dbg_gen("dir ino %lu, f_pos %#llx", dir->i_ino, ctx->pos);
 
@@ -522,11 +515,11 @@ static int ubifs_readdir(struct file *file, struct dir_context *ctx)
 		return 0;
 
 	if (encrypted) {
-		err = fscrypt_get_encryption_info(dir);
-		if (err && err != -ENOKEY)
+		err = fscrypt_prepare_readdir(dir);
+		if (err)
 			return err;
 
-		err = fscrypt_fname_alloc_buffer(dir, UBIFS_MAX_NLEN, &fstr);
+		err = fscrypt_fname_alloc_buffer(UBIFS_MAX_NLEN, &fstr);
 		if (err)
 			return err;
 
@@ -1627,14 +1620,6 @@ int ubifs_getattr(const struct path *path, struct kstat *stat,
 	return 0;
 }
 
-static int ubifs_dir_open(struct inode *dir, struct file *file)
-{
-	if (ubifs_crypt_is_encrypted(dir))
-		return fscrypt_get_encryption_info(dir) ? -EACCES : 0;
-
-	return 0;
-}
-
 const struct inode_operations ubifs_dir_inode_operations = {
 	.lookup      = ubifs_lookup,
 	.create      = ubifs_create,
@@ -1661,7 +1646,6 @@ const struct file_operations ubifs_dir_operations = {
 	.iterate_shared = ubifs_readdir,
 	.fsync          = ubifs_fsync,
 	.unlocked_ioctl = ubifs_ioctl,
-	.open		= ubifs_dir_open,
 #ifdef CONFIG_COMPAT
 	.compat_ioctl   = ubifs_compat_ioctl,
 #endif
diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c
index 8dada89..49fe062 100644
--- a/fs/ubifs/file.c
+++ b/fs/ubifs/file.c
@@ -67,7 +67,7 @@ static int read_block(struct inode *inode, void *addr, unsigned int block,
 
 	dlen = le32_to_cpu(dn->ch.len) - UBIFS_DATA_NODE_SZ;
 
-	if (ubifs_crypt_is_encrypted(inode)) {
+	if (IS_ENCRYPTED(inode)) {
 		err = ubifs_decrypt(inode, dn, &dlen, block);
 		if (err)
 			goto dump;
@@ -647,7 +647,7 @@ static int populate_page(struct ubifs_info *c, struct page *page,
 			dlen = le32_to_cpu(dn->ch.len) - UBIFS_DATA_NODE_SZ;
 			out_len = UBIFS_BLOCK_SIZE;
 
-			if (ubifs_crypt_is_encrypted(inode)) {
+			if (IS_ENCRYPTED(inode)) {
 				err = ubifs_decrypt(inode, dn, &dlen, page_block);
 				if (err)
 					goto out_err;
diff --git a/fs/ubifs/ioctl.c b/fs/ubifs/ioctl.c
index eeb1be2..89712c9 100644
--- a/fs/ubifs/ioctl.c
+++ b/fs/ubifs/ioctl.c
@@ -201,6 +201,9 @@ long ubifs_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 	case FS_IOC_GET_ENCRYPTION_KEY_STATUS:
 		return fscrypt_ioctl_get_key_status(file, (void __user *)arg);
 
+	case FS_IOC_GET_ENCRYPTION_NONCE:
+		return fscrypt_ioctl_get_nonce(file, (void __user *)arg);
+
 	default:
 		return -ENOTTY;
 	}
@@ -223,6 +226,7 @@ long ubifs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 	case FS_IOC_REMOVE_ENCRYPTION_KEY:
 	case FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS:
 	case FS_IOC_GET_ENCRYPTION_KEY_STATUS:
+	case FS_IOC_GET_ENCRYPTION_NONCE:
 		break;
 	default:
 		return -ENOIOCTLCMD;
diff --git a/fs/ubifs/journal.c b/fs/ubifs/journal.c
index f78c3e3..2f2b6e9 100644
--- a/fs/ubifs/journal.c
+++ b/fs/ubifs/journal.c
@@ -588,7 +588,7 @@ int ubifs_jnl_update(struct ubifs_info *c, const struct inode *dir,
 
 	if (!xent) {
 		dent->ch.node_type = UBIFS_DENT_NODE;
-		if (nm->hash)
+		if (fname_name(nm) == NULL)
 			dent_key_init_hash(c, &dent_key, dir->i_ino, nm->hash);
 		else
 			dent_key_init(c, &dent_key, dir->i_ino, nm);
@@ -647,7 +647,7 @@ int ubifs_jnl_update(struct ubifs_info *c, const struct inode *dir,
 	ubifs_add_auth_dirt(c, lnum);
 
 	if (deletion) {
-		if (nm->hash)
+		if (fname_name(nm) == NULL)
 			err = ubifs_tnc_remove_dh(c, &dent_key, nm->minor_hash);
 		else
 			err = ubifs_tnc_remove_nm(c, &dent_key, nm);
@@ -728,7 +728,7 @@ int ubifs_jnl_write_data(struct ubifs_info *c, const struct inode *inode,
 	int dlen = COMPRESSED_DATA_NODE_BUF_SZ, allocated = 1;
 	int write_len;
 	struct ubifs_inode *ui = ubifs_inode(inode);
-	bool encrypted = ubifs_crypt_is_encrypted(inode);
+	bool encrypted = IS_ENCRYPTED(inode);
 	u8 hash[UBIFS_HASH_ARR_SZ];
 
 	dbg_jnlk(key, "ino %lu, blk %u, len %d, key ",
@@ -1454,7 +1454,7 @@ static int truncate_data_node(const struct ubifs_info *c, const struct inode *in
 	dlen = old_dlen = le32_to_cpu(dn->ch.len) - UBIFS_DATA_NODE_SZ;
 	compr_type = le16_to_cpu(dn->compr_type);
 
-	if (ubifs_crypt_is_encrypted(inode)) {
+	if (IS_ENCRYPTED(inode)) {
 		err = ubifs_decrypt(inode, dn, &dlen, block);
 		if (err)
 			goto out;
@@ -1470,7 +1470,7 @@ static int truncate_data_node(const struct ubifs_info *c, const struct inode *in
 		ubifs_compress(c, buf, *new_len, &dn->data, &out_len, &compr_type);
 	}
 
-	if (ubifs_crypt_is_encrypted(inode)) {
+	if (IS_ENCRYPTED(inode)) {
 		err = ubifs_encrypt(inode, dn, out_len, &old_dlen, block);
 		if (err)
 			goto out;
diff --git a/fs/ubifs/key.h b/fs/ubifs/key.h
index afa704f..8142d9d 100644
--- a/fs/ubifs/key.h
+++ b/fs/ubifs/key.h
@@ -150,7 +150,6 @@ static inline void dent_key_init(const struct ubifs_info *c,
 	uint32_t hash = c->key_hash(fname_name(nm), fname_len(nm));
 
 	ubifs_assert(c, !(hash & ~UBIFS_S_KEY_HASH_MASK));
-	ubifs_assert(c, !nm->hash && !nm->minor_hash);
 	key->u32[0] = inum;
 	key->u32[1] = hash | (UBIFS_DENT_KEY << UBIFS_S_KEY_HASH_BITS);
 }
diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h
index c55f212..bff6823 100644
--- a/fs/ubifs/ubifs.h
+++ b/fs/ubifs/ubifs.h
@@ -2095,13 +2095,6 @@ int ubifs_decrypt(const struct inode *inode, struct ubifs_data_node *dn,
 
 extern const struct fscrypt_operations ubifs_crypt_operations;
 
-static inline bool ubifs_crypt_is_encrypted(const struct inode *inode)
-{
-	const struct ubifs_inode *ui = ubifs_inode(inode);
-
-	return ui->flags & UBIFS_CRYPT_FL;
-}
-
 /* Normal UBIFS messages */
 __printf(2, 3)
 void ubifs_msg(const struct ubifs_info *c, const char *fmt, ...);
diff --git a/fs/ubifs/xattr.c b/fs/ubifs/xattr.c
index a0b9b349..1afb628 100644
--- a/fs/ubifs/xattr.c
+++ b/fs/ubifs/xattr.c
@@ -671,7 +671,8 @@ int ubifs_init_security(struct inode *dentry, struct inode *inode,
 
 static int xattr_get(const struct xattr_handler *handler,
 			   struct dentry *dentry, struct inode *inode,
-			   const char *name, void *buffer, size_t size)
+			   const char *name, void *buffer, size_t size,
+			   int flags)
 {
 	dbg_gen("xattr '%s', ino %lu ('%pd'), buf size %zd", name,
 		inode->i_ino, dentry, size);
diff --git a/fs/unicode/utf8-core.c b/fs/unicode/utf8-core.c
index 2a878b7..dc25823 100644
--- a/fs/unicode/utf8-core.c
+++ b/fs/unicode/utf8-core.c
@@ -6,6 +6,7 @@
 #include <linux/parser.h>
 #include <linux/errno.h>
 #include <linux/unicode.h>
+#include <linux/stringhash.h>
 
 #include "utf8n.h"
 
@@ -122,9 +123,29 @@ int utf8_casefold(const struct unicode_map *um, const struct qstr *str,
 	}
 	return -EINVAL;
 }
-
 EXPORT_SYMBOL(utf8_casefold);
 
+int utf8_casefold_hash(const struct unicode_map *um, const void *salt,
+		       struct qstr *str)
+{
+	const struct utf8data *data = utf8nfdicf(um->version);
+	struct utf8cursor cur;
+	int c;
+	unsigned long hash = init_name_hash(salt);
+
+	if (utf8ncursor(&cur, data, str->name, str->len) < 0)
+		return -EINVAL;
+
+	while ((c = utf8byte(&cur))) {
+		if (c < 0)
+			return -EINVAL;
+		hash = partial_name_hash((unsigned char)c, hash);
+	}
+	str->hash = end_name_hash(hash);
+	return 0;
+}
+EXPORT_SYMBOL(utf8_casefold_hash);
+
 int utf8_normalize(const struct unicode_map *um, const struct qstr *str,
 		   unsigned char *dest, size_t dlen)
 {
diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c
index d99d166..4859869 100644
--- a/fs/userfaultfd.c
+++ b/fs/userfaultfd.c
@@ -28,7 +28,7 @@
 #include <linux/security.h>
 #include <linux/hugetlb.h>
 
-int sysctl_unprivileged_userfaultfd __read_mostly = 1;
+int sysctl_unprivileged_userfaultfd __read_mostly;
 
 static struct kmem_cache *userfaultfd_ctx_cachep __read_mostly;
 
@@ -334,6 +334,30 @@ static inline bool userfaultfd_must_wait(struct userfaultfd_ctx *ctx,
 	return ret;
 }
 
+/* Should pair with userfaultfd_signal_pending() */
+static inline long userfaultfd_get_blocking_state(unsigned int flags)
+{
+	if (flags & FAULT_FLAG_INTERRUPTIBLE)
+		return TASK_INTERRUPTIBLE;
+
+	if (flags & FAULT_FLAG_KILLABLE)
+		return TASK_KILLABLE;
+
+	return TASK_UNINTERRUPTIBLE;
+}
+
+/* Should pair with userfaultfd_get_blocking_state() */
+static inline bool userfaultfd_signal_pending(unsigned int flags)
+{
+	if (flags & FAULT_FLAG_INTERRUPTIBLE)
+		return signal_pending(current);
+
+	if (flags & FAULT_FLAG_KILLABLE)
+		return fatal_signal_pending(current);
+
+	return false;
+}
+
 /*
  * The locking rules involved in returning VM_FAULT_RETRY depending on
  * FAULT_FLAG_ALLOW_RETRY, FAULT_FLAG_RETRY_NOWAIT and
@@ -355,7 +379,7 @@ vm_fault_t handle_userfault(struct vm_fault *vmf, unsigned long reason)
 	struct userfaultfd_ctx *ctx;
 	struct userfaultfd_wait_queue uwq;
 	vm_fault_t ret = VM_FAULT_SIGBUS;
-	bool must_wait, return_to_userland;
+	bool must_wait;
 	long blocking_state;
 
 	/*
@@ -389,6 +413,13 @@ vm_fault_t handle_userfault(struct vm_fault *vmf, unsigned long reason)
 
 	if (ctx->features & UFFD_FEATURE_SIGBUS)
 		goto out;
+	if ((vmf->flags & FAULT_FLAG_USER) == 0 &&
+	    ctx->flags & UFFD_USER_MODE_ONLY) {
+		printk_once(KERN_WARNING "uffd: Set unprivileged_userfaultfd "
+			"sysctl knob to 1 if kernel faults must be handled "
+			"without obtaining CAP_SYS_PTRACE capability\n");
+		goto out;
+	}
 
 	/*
 	 * If it's already released don't get it. This avoids to loop
@@ -462,11 +493,7 @@ vm_fault_t handle_userfault(struct vm_fault *vmf, unsigned long reason)
 	uwq.ctx = ctx;
 	uwq.waken = false;
 
-	return_to_userland =
-		(vmf->flags & (FAULT_FLAG_USER|FAULT_FLAG_KILLABLE)) ==
-		(FAULT_FLAG_USER|FAULT_FLAG_KILLABLE);
-	blocking_state = return_to_userland ? TASK_INTERRUPTIBLE :
-			 TASK_KILLABLE;
+	blocking_state = userfaultfd_get_blocking_state(vmf->flags);
 
 	spin_lock_irq(&ctx->fault_pending_wqh.lock);
 	/*
@@ -492,8 +519,7 @@ vm_fault_t handle_userfault(struct vm_fault *vmf, unsigned long reason)
 	up_read(&mm->mmap_sem);
 
 	if (likely(must_wait && !READ_ONCE(ctx->released) &&
-		   (return_to_userland ? !signal_pending(current) :
-		    !fatal_signal_pending(current)))) {
+		   !userfaultfd_signal_pending(vmf->flags))) {
 		wake_up_poll(&ctx->fd_wqh, EPOLLIN);
 		schedule();
 		ret |= VM_FAULT_MAJOR;
@@ -515,8 +541,7 @@ vm_fault_t handle_userfault(struct vm_fault *vmf, unsigned long reason)
 			set_current_state(blocking_state);
 			if (READ_ONCE(uwq.waken) ||
 			    READ_ONCE(ctx->released) ||
-			    (return_to_userland ? signal_pending(current) :
-			     fatal_signal_pending(current)))
+			    userfaultfd_signal_pending(vmf->flags))
 				break;
 			schedule();
 		}
@@ -524,30 +549,6 @@ vm_fault_t handle_userfault(struct vm_fault *vmf, unsigned long reason)
 
 	__set_current_state(TASK_RUNNING);
 
-	if (return_to_userland) {
-		if (signal_pending(current) &&
-		    !fatal_signal_pending(current)) {
-			/*
-			 * If we got a SIGSTOP or SIGCONT and this is
-			 * a normal userland page fault, just let
-			 * userland return so the signal will be
-			 * handled and gdb debugging works.  The page
-			 * fault code immediately after we return from
-			 * this function is going to release the
-			 * mmap_sem and it's not depending on it
-			 * (unlike gup would if we were not to return
-			 * VM_FAULT_RETRY).
-			 *
-			 * If a fatal signal is pending we still take
-			 * the streamlined VM_FAULT_RETRY failure path
-			 * and there's no need to retake the mmap_sem
-			 * in such case.
-			 */
-			down_read(&mm->mmap_sem);
-			ret = VM_FAULT_NOPAGE;
-		}
-	}
-
 	/*
 	 * Here we race with the list_del; list_add in
 	 * userfaultfd_ctx_read(), however because we don't ever run
@@ -912,7 +913,8 @@ static int userfaultfd_release(struct inode *inode, struct file *file)
 					 new_flags, vma->anon_vma,
 					 vma->vm_file, vma->vm_pgoff,
 					 vma_policy(vma),
-					 NULL_VM_UFFD_CTX);
+					 NULL_VM_UFFD_CTX,
+					 vma_get_anon_name(vma));
 			if (prev)
 				vma = prev;
 			else
@@ -1464,7 +1466,8 @@ static int userfaultfd_register(struct userfaultfd_ctx *ctx,
 		prev = vma_merge(mm, prev, start, vma_end, new_flags,
 				 vma->anon_vma, vma->vm_file, vma->vm_pgoff,
 				 vma_policy(vma),
-				 ((struct vm_userfaultfd_ctx){ ctx }));
+				 ((struct vm_userfaultfd_ctx){ ctx }),
+				 vma_get_anon_name(vma));
 		if (prev) {
 			vma = prev;
 			goto next;
@@ -1626,7 +1629,8 @@ static int userfaultfd_unregister(struct userfaultfd_ctx *ctx,
 		prev = vma_merge(mm, prev, start, vma_end, new_flags,
 				 vma->anon_vma, vma->vm_file, vma->vm_pgoff,
 				 vma_policy(vma),
-				 NULL_VM_UFFD_CTX);
+				 NULL_VM_UFFD_CTX,
+				 vma_get_anon_name(vma));
 		if (prev) {
 			vma = prev;
 			goto next;
@@ -1947,16 +1951,23 @@ SYSCALL_DEFINE1(userfaultfd, int, flags)
 	struct userfaultfd_ctx *ctx;
 	int fd;
 
-	if (!sysctl_unprivileged_userfaultfd && !capable(CAP_SYS_PTRACE))
+	if (!sysctl_unprivileged_userfaultfd &&
+	    (flags & UFFD_USER_MODE_ONLY) == 0 &&
+	    !capable(CAP_SYS_PTRACE)) {
+		printk_once(KERN_WARNING "uffd: Set unprivileged_userfaultfd "
+			"sysctl knob to 1 if kernel faults must be handled "
+			"without obtaining CAP_SYS_PTRACE capability\n");
 		return -EPERM;
+	}
 
 	BUG_ON(!current->mm);
 
 	/* Check the UFFD_* constants for consistency.  */
+	BUILD_BUG_ON(UFFD_USER_MODE_ONLY & UFFD_SHARED_FCNTL_FLAGS);
 	BUILD_BUG_ON(UFFD_CLOEXEC != O_CLOEXEC);
 	BUILD_BUG_ON(UFFD_NONBLOCK != O_NONBLOCK);
 
-	if (flags & ~UFFD_SHARED_FCNTL_FLAGS)
+	if (flags & ~(UFFD_SHARED_FCNTL_FLAGS | UFFD_USER_MODE_ONLY))
 		return -EINVAL;
 
 	ctx = kmem_cache_alloc(userfaultfd_ctx_cachep, GFP_KERNEL);
diff --git a/fs/verity/enable.c b/fs/verity/enable.c
index eabc6ac..835c3399f 100644
--- a/fs/verity/enable.c
+++ b/fs/verity/enable.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * fs/verity/enable.c: ioctl to enable verity on a file
+ * Ioctl to enable verity on a file
  *
  * Copyright 2019 Google LLC
  */
@@ -8,18 +8,48 @@
 #include "fsverity_private.h"
 
 #include <crypto/hash.h>
+#include <linux/backing-dev.h>
 #include <linux/mount.h>
 #include <linux/pagemap.h>
 #include <linux/sched/signal.h>
 #include <linux/uaccess.h>
 
-static int build_merkle_tree_level(struct inode *inode, unsigned int level,
+/*
+ * Read a file data page for Merkle tree construction.  Do aggressive readahead,
+ * since we're sequentially reading the entire file.
+ */
+static struct page *read_file_data_page(struct file *filp, pgoff_t index,
+					struct file_ra_state *ra,
+					unsigned long remaining_pages)
+{
+	struct page *page;
+
+	page = find_get_page_flags(filp->f_mapping, index, FGP_ACCESSED);
+	if (!page || !PageUptodate(page)) {
+		if (page)
+			put_page(page);
+		else
+			page_cache_sync_readahead(filp->f_mapping, ra, filp,
+						  index, remaining_pages);
+		page = read_mapping_page(filp->f_mapping, index, NULL);
+		if (IS_ERR(page))
+			return page;
+	}
+	if (PageReadahead(page))
+		page_cache_async_readahead(filp->f_mapping, ra, filp, page,
+					   index, remaining_pages);
+	return page;
+}
+
+static int build_merkle_tree_level(struct file *filp, unsigned int level,
 				   u64 num_blocks_to_hash,
 				   const struct merkle_tree_params *params,
 				   u8 *pending_hashes,
 				   struct ahash_request *req)
 {
+	struct inode *inode = file_inode(filp);
 	const struct fsverity_operations *vops = inode->i_sb->s_vop;
+	struct file_ra_state ra = { 0 };
 	unsigned int pending_size = 0;
 	u64 dst_block_num;
 	u64 i;
@@ -36,6 +66,8 @@ static int build_merkle_tree_level(struct inode *inode, unsigned int level,
 		dst_block_num = 0; /* unused */
 	}
 
+	file_ra_state_init(&ra, filp->f_mapping);
+
 	for (i = 0; i < num_blocks_to_hash; i++) {
 		struct page *src_page;
 
@@ -45,7 +77,8 @@ static int build_merkle_tree_level(struct inode *inode, unsigned int level,
 
 		if (level == 0) {
 			/* Leaf: hashing a data block */
-			src_page = read_mapping_page(inode->i_mapping, i, NULL);
+			src_page = read_file_data_page(filp, i, &ra,
+						       num_blocks_to_hash - i);
 			if (IS_ERR(src_page)) {
 				err = PTR_ERR(src_page);
 				fsverity_err(inode,
@@ -54,9 +87,14 @@ static int build_merkle_tree_level(struct inode *inode, unsigned int level,
 				return err;
 			}
 		} else {
+			unsigned long num_ra_pages =
+				min_t(unsigned long, num_blocks_to_hash - i,
+				      inode->i_sb->s_bdi->io_pages);
+
 			/* Non-leaf: hashing hash block from level below */
 			src_page = vops->read_merkle_tree_page(inode,
-					params->level_start[level - 1] + i);
+					params->level_start[level - 1] + i,
+					num_ra_pages);
 			if (IS_ERR(src_page)) {
 				err = PTR_ERR(src_page);
 				fsverity_err(inode,
@@ -103,17 +141,18 @@ static int build_merkle_tree_level(struct inode *inode, unsigned int level,
 }
 
 /*
- * Build the Merkle tree for the given inode using the given parameters, and
+ * Build the Merkle tree for the given file using the given parameters, and
  * return the root hash in @root_hash.
  *
  * The tree is written to a filesystem-specific location as determined by the
  * ->write_merkle_tree_block() method.  However, the blocks that comprise the
  * tree are the same for all filesystems.
  */
-static int build_merkle_tree(struct inode *inode,
+static int build_merkle_tree(struct file *filp,
 			     const struct merkle_tree_params *params,
 			     u8 *root_hash)
 {
+	struct inode *inode = file_inode(filp);
 	u8 *pending_hashes;
 	struct ahash_request *req;
 	u64 blocks;
@@ -126,9 +165,11 @@ static int build_merkle_tree(struct inode *inode,
 		return 0;
 	}
 
+	/* This allocation never fails, since it's mempool-backed. */
+	req = fsverity_alloc_hash_request(params->hash_alg, GFP_KERNEL);
+
 	pending_hashes = kmalloc(params->block_size, GFP_KERNEL);
-	req = ahash_request_alloc(params->hash_alg->tfm, GFP_KERNEL);
-	if (!pending_hashes || !req)
+	if (!pending_hashes)
 		goto out;
 
 	/*
@@ -139,7 +180,7 @@ static int build_merkle_tree(struct inode *inode,
 	blocks = (inode->i_size + params->block_size - 1) >>
 		 params->log_blocksize;
 	for (level = 0; level <= params->num_levels; level++) {
-		err = build_merkle_tree_level(inode, level, blocks, params,
+		err = build_merkle_tree_level(filp, level, blocks, params,
 					      pending_hashes, req);
 		if (err)
 			goto out;
@@ -150,7 +191,7 @@ static int build_merkle_tree(struct inode *inode,
 	err = 0;
 out:
 	kfree(pending_hashes);
-	ahash_request_free(req);
+	fsverity_free_hash_request(params->hash_alg, req);
 	return err;
 }
 
@@ -175,8 +216,7 @@ static int enable_verity(struct file *filp,
 
 	/* Get the salt if the user provided one */
 	if (arg->salt_size &&
-	    copy_from_user(desc->salt,
-			   (const u8 __user *)(uintptr_t)arg->salt_ptr,
+	    copy_from_user(desc->salt, u64_to_user_ptr(arg->salt_ptr),
 			   arg->salt_size)) {
 		err = -EFAULT;
 		goto out;
@@ -185,8 +225,7 @@ static int enable_verity(struct file *filp,
 
 	/* Get the signature if the user provided one */
 	if (arg->sig_size &&
-	    copy_from_user(desc->signature,
-			   (const u8 __user *)(uintptr_t)arg->sig_ptr,
+	    copy_from_user(desc->signature, u64_to_user_ptr(arg->sig_ptr),
 			   arg->sig_size)) {
 		err = -EFAULT;
 		goto out;
@@ -227,7 +266,7 @@ static int enable_verity(struct file *filp,
 	 */
 	pr_debug("Building Merkle tree...\n");
 	BUILD_BUG_ON(sizeof(desc->root_hash) < FS_VERITY_MAX_DIGEST_SIZE);
-	err = build_merkle_tree(inode, &params, desc->root_hash);
+	err = build_merkle_tree(filp, &params, desc->root_hash);
 	if (err) {
 		fsverity_err(inode, "Error %d building Merkle tree", err);
 		goto rollback;
@@ -290,6 +329,8 @@ static int enable_verity(struct file *filp,
 
 /**
  * fsverity_ioctl_enable() - enable verity on a file
+ * @filp: file to enable verity on
+ * @uarg: user pointer to fsverity_enable_arg
  *
  * Enable fs-verity on a file.  See the "FS_IOC_ENABLE_VERITY" section of
  * Documentation/filesystems/fsverity.rst for the documentation.
@@ -357,9 +398,9 @@ int fsverity_ioctl_enable(struct file *filp, const void __user *uarg)
 	 * Some pages of the file may have been evicted from pagecache after
 	 * being used in the Merkle tree construction, then read into pagecache
 	 * again by another process reading from the file concurrently.  Since
-	 * these pages didn't undergo verification against the file measurement
-	 * which fs-verity now claims to be enforcing, we have to wipe the
-	 * pagecache to ensure that all future reads are verified.
+	 * these pages didn't undergo verification against the file digest which
+	 * fs-verity now claims to be enforcing, we have to wipe the pagecache
+	 * to ensure that all future reads are verified.
 	 */
 	filemap_write_and_wait(inode->i_mapping);
 	invalidate_inode_pages2(inode->i_mapping);
diff --git a/fs/verity/fsverity_private.h b/fs/verity/fsverity_private.h
index e74c79b..96f7b33 100644
--- a/fs/verity/fsverity_private.h
+++ b/fs/verity/fsverity_private.h
@@ -16,6 +16,7 @@
 
 #include <crypto/sha.h>
 #include <linux/fsverity.h>
+#include <linux/mempool.h>
 
 struct ahash_request;
 
@@ -37,11 +38,12 @@ struct fsverity_hash_alg {
 	const char *name;	  /* crypto API name, e.g. sha256 */
 	unsigned int digest_size; /* digest size in bytes, e.g. 32 for SHA-256 */
 	unsigned int block_size;  /* block size in bytes, e.g. 64 for SHA-256 */
+	mempool_t req_pool;	  /* mempool with a preallocated hash request */
 };
 
 /* Merkle tree parameters: hash algorithm, initial hash state, and topology */
 struct merkle_tree_params {
-	const struct fsverity_hash_alg *hash_alg; /* the hash algorithm */
+	struct fsverity_hash_alg *hash_alg; /* the hash algorithm */
 	const u8 *hashstate;		/* initial hash state or NULL */
 	unsigned int digest_size;	/* same as hash_alg->digest_size */
 	unsigned int block_size;	/* size of data and tree blocks */
@@ -50,6 +52,7 @@ struct merkle_tree_params {
 	unsigned int log_arity;		/* log2(hashes_per_block) */
 	unsigned int num_levels;	/* number of levels in Merkle tree */
 	u64 tree_size;			/* Merkle tree size in bytes */
+	unsigned long level0_blocks;	/* number of blocks in tree level 0 */
 
 	/*
 	 * Starting block index for each tree level, ordered from leaf level (0)
@@ -58,76 +61,50 @@ struct merkle_tree_params {
 	u64 level_start[FS_VERITY_MAX_LEVELS];
 };
 
-/**
+/*
  * fsverity_info - cached verity metadata for an inode
  *
  * When a verity file is first opened, an instance of this struct is allocated
  * and stored in ->i_verity_info; it remains until the inode is evicted.  It
  * caches information about the Merkle tree that's needed to efficiently verify
- * data read from the file.  It also caches the file measurement.  The Merkle
- * tree pages themselves are not cached here, but the filesystem may cache them.
+ * data read from the file.  It also caches the file digest.  The Merkle tree
+ * pages themselves are not cached here, but the filesystem may cache them.
  */
 struct fsverity_info {
 	struct merkle_tree_params tree_params;
 	u8 root_hash[FS_VERITY_MAX_DIGEST_SIZE];
-	u8 measurement[FS_VERITY_MAX_DIGEST_SIZE];
+	u8 file_digest[FS_VERITY_MAX_DIGEST_SIZE];
 	const struct inode *inode;
 };
 
-/*
- * Merkle tree properties.  The file measurement is the hash of this structure
- * excluding the signature and with the sig_size field set to 0.
- */
-struct fsverity_descriptor {
-	__u8 version;		/* must be 1 */
-	__u8 hash_algorithm;	/* Merkle tree hash algorithm */
-	__u8 log_blocksize;	/* log2 of size of data and tree blocks */
-	__u8 salt_size;		/* size of salt in bytes; 0 if none */
-	__le32 sig_size;	/* size of signature in bytes; 0 if none */
-	__le64 data_size;	/* size of file the Merkle tree is built over */
-	__u8 root_hash[64];	/* Merkle tree root hash */
-	__u8 salt[32];		/* salt prepended to each hashed block */
-	__u8 __reserved[144];	/* must be 0's */
-	__u8 signature[];	/* optional PKCS#7 signature */
-};
-
 /* Arbitrary limit to bound the kmalloc() size.  Can be changed. */
 #define FS_VERITY_MAX_DESCRIPTOR_SIZE	16384
 
 #define FS_VERITY_MAX_SIGNATURE_SIZE	(FS_VERITY_MAX_DESCRIPTOR_SIZE - \
 					 sizeof(struct fsverity_descriptor))
 
-/*
- * Format in which verity file measurements are signed.  This is the same as
- * 'struct fsverity_digest', except here some magic bytes are prepended to
- * provide some context about what is being signed in case the same key is used
- * for non-fsverity purposes, and here the fields have fixed endianness.
- */
-struct fsverity_signed_digest {
-	char magic[8];			/* must be "FSVerity" */
-	__le16 digest_algorithm;
-	__le16 digest_size;
-	__u8 digest[];
-};
-
 /* hash_algs.c */
 
 extern struct fsverity_hash_alg fsverity_hash_algs[];
 
-const struct fsverity_hash_alg *fsverity_get_hash_alg(const struct inode *inode,
-						      unsigned int num);
-const u8 *fsverity_prepare_hash_state(const struct fsverity_hash_alg *alg,
+struct fsverity_hash_alg *fsverity_get_hash_alg(const struct inode *inode,
+						unsigned int num);
+struct ahash_request *fsverity_alloc_hash_request(struct fsverity_hash_alg *alg,
+						  gfp_t gfp_flags);
+void fsverity_free_hash_request(struct fsverity_hash_alg *alg,
+				struct ahash_request *req);
+const u8 *fsverity_prepare_hash_state(struct fsverity_hash_alg *alg,
 				      const u8 *salt, size_t salt_size);
 int fsverity_hash_page(const struct merkle_tree_params *params,
 		       const struct inode *inode,
 		       struct ahash_request *req, struct page *page, u8 *out);
-int fsverity_hash_buffer(const struct fsverity_hash_alg *alg,
+int fsverity_hash_buffer(struct fsverity_hash_alg *alg,
 			 const void *data, size_t size, u8 *out);
 void __init fsverity_check_hash_algs(void);
 
 /* init.c */
 
-extern void __printf(3, 4) __cold
+void __printf(3, 4) __cold
 fsverity_msg(const struct inode *inode, const char *level,
 	     const char *fmt, ...);
 
diff --git a/fs/verity/hash_algs.c b/fs/verity/hash_algs.c
index 31e6d7d..71d0fcc 100644
--- a/fs/verity/hash_algs.c
+++ b/fs/verity/hash_algs.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * fs/verity/hash_algs.c: fs-verity hash algorithms
+ * fs-verity hash algorithms
  *
  * Copyright 2019 Google LLC
  */
@@ -24,6 +24,8 @@ struct fsverity_hash_alg fsverity_hash_algs[] = {
 	},
 };
 
+static DEFINE_MUTEX(fsverity_hash_alg_init_mutex);
+
 /**
  * fsverity_get_hash_alg() - validate and prepare a hash algorithm
  * @inode: optional inode for logging purposes
@@ -36,8 +38,8 @@ struct fsverity_hash_alg fsverity_hash_algs[] = {
  *
  * Return: pointer to the hash alg on success, else an ERR_PTR()
  */
-const struct fsverity_hash_alg *fsverity_get_hash_alg(const struct inode *inode,
-						      unsigned int num)
+struct fsverity_hash_alg *fsverity_get_hash_alg(const struct inode *inode,
+						unsigned int num)
 {
 	struct fsverity_hash_alg *alg;
 	struct crypto_ahash *tfm;
@@ -50,10 +52,15 @@ const struct fsverity_hash_alg *fsverity_get_hash_alg(const struct inode *inode,
 	}
 	alg = &fsverity_hash_algs[num];
 
-	/* pairs with cmpxchg() below */
-	tfm = READ_ONCE(alg->tfm);
-	if (likely(tfm != NULL))
+	/* pairs with smp_store_release() below */
+	if (likely(smp_load_acquire(&alg->tfm) != NULL))
 		return alg;
+
+	mutex_lock(&fsverity_hash_alg_init_mutex);
+
+	if (alg->tfm != NULL)
+		goto out_unlock;
+
 	/*
 	 * Using the shash API would make things a bit simpler, but the ahash
 	 * API is preferable as it allows the use of crypto accelerators.
@@ -64,12 +71,14 @@ const struct fsverity_hash_alg *fsverity_get_hash_alg(const struct inode *inode,
 			fsverity_warn(inode,
 				      "Missing crypto API support for hash algorithm \"%s\"",
 				      alg->name);
-			return ERR_PTR(-ENOPKG);
+			alg = ERR_PTR(-ENOPKG);
+			goto out_unlock;
 		}
 		fsverity_err(inode,
 			     "Error allocating hash algorithm \"%s\": %ld",
 			     alg->name, PTR_ERR(tfm));
-		return ERR_CAST(tfm);
+		alg = ERR_CAST(tfm);
+		goto out_unlock;
 	}
 
 	err = -EINVAL;
@@ -78,18 +87,61 @@ const struct fsverity_hash_alg *fsverity_get_hash_alg(const struct inode *inode,
 	if (WARN_ON(alg->block_size != crypto_ahash_blocksize(tfm)))
 		goto err_free_tfm;
 
+	err = mempool_init_kmalloc_pool(&alg->req_pool, 1,
+					sizeof(struct ahash_request) +
+					crypto_ahash_reqsize(tfm));
+	if (err)
+		goto err_free_tfm;
+
 	pr_info("%s using implementation \"%s\"\n",
 		alg->name, crypto_ahash_driver_name(tfm));
 
-	/* pairs with READ_ONCE() above */
-	if (cmpxchg(&alg->tfm, NULL, tfm) != NULL)
-		crypto_free_ahash(tfm);
-
-	return alg;
+	/* pairs with smp_load_acquire() above */
+	smp_store_release(&alg->tfm, tfm);
+	goto out_unlock;
 
 err_free_tfm:
 	crypto_free_ahash(tfm);
-	return ERR_PTR(err);
+	alg = ERR_PTR(err);
+out_unlock:
+	mutex_unlock(&fsverity_hash_alg_init_mutex);
+	return alg;
+}
+
+/**
+ * fsverity_alloc_hash_request() - allocate a hash request object
+ * @alg: the hash algorithm for which to allocate the request
+ * @gfp_flags: memory allocation flags
+ *
+ * This is mempool-backed, so this never fails if __GFP_DIRECT_RECLAIM is set in
+ * @gfp_flags.  However, in that case this might need to wait for all
+ * previously-allocated requests to be freed.  So to avoid deadlocks, callers
+ * must never need multiple requests at a time to make forward progress.
+ *
+ * Return: the request object on success; NULL on failure (but see above)
+ */
+struct ahash_request *fsverity_alloc_hash_request(struct fsverity_hash_alg *alg,
+						  gfp_t gfp_flags)
+{
+	struct ahash_request *req = mempool_alloc(&alg->req_pool, gfp_flags);
+
+	if (req)
+		ahash_request_set_tfm(req, alg->tfm);
+	return req;
+}
+
+/**
+ * fsverity_free_hash_request() - free a hash request object
+ * @alg: the hash algorithm
+ * @req: the hash request object to free
+ */
+void fsverity_free_hash_request(struct fsverity_hash_alg *alg,
+				struct ahash_request *req)
+{
+	if (req) {
+		ahash_request_zero(req);
+		mempool_free(req, &alg->req_pool);
+	}
 }
 
 /**
@@ -101,7 +153,7 @@ const struct fsverity_hash_alg *fsverity_get_hash_alg(const struct inode *inode,
  * Return: NULL if the salt is empty, otherwise the kmalloc()'ed precomputed
  *	   initial hash state on success or an ERR_PTR() on failure.
  */
-const u8 *fsverity_prepare_hash_state(const struct fsverity_hash_alg *alg,
+const u8 *fsverity_prepare_hash_state(struct fsverity_hash_alg *alg,
 				      const u8 *salt, size_t salt_size)
 {
 	u8 *hashstate = NULL;
@@ -119,11 +171,8 @@ const u8 *fsverity_prepare_hash_state(const struct fsverity_hash_alg *alg,
 	if (!hashstate)
 		return ERR_PTR(-ENOMEM);
 
-	req = ahash_request_alloc(alg->tfm, GFP_KERNEL);
-	if (!req) {
-		err = -ENOMEM;
-		goto err_free;
-	}
+	/* This allocation never fails, since it's mempool-backed. */
+	req = fsverity_alloc_hash_request(alg, GFP_KERNEL);
 
 	/*
 	 * Zero-pad the salt to the next multiple of the input size of the hash
@@ -158,7 +207,7 @@ const u8 *fsverity_prepare_hash_state(const struct fsverity_hash_alg *alg,
 	if (err)
 		goto err_free;
 out:
-	ahash_request_free(req);
+	fsverity_free_hash_request(alg, req);
 	kfree(padded_salt);
 	return hashstate;
 
@@ -229,7 +278,7 @@ int fsverity_hash_page(const struct merkle_tree_params *params,
  *
  * Return: 0 on success, -errno on failure
  */
-int fsverity_hash_buffer(const struct fsverity_hash_alg *alg,
+int fsverity_hash_buffer(struct fsverity_hash_alg *alg,
 			 const void *data, size_t size, u8 *out)
 {
 	struct ahash_request *req;
@@ -237,9 +286,8 @@ int fsverity_hash_buffer(const struct fsverity_hash_alg *alg,
 	DECLARE_CRYPTO_WAIT(wait);
 	int err;
 
-	req = ahash_request_alloc(alg->tfm, GFP_KERNEL);
-	if (!req)
-		return -ENOMEM;
+	/* This allocation never fails, since it's mempool-backed. */
+	req = fsverity_alloc_hash_request(alg, GFP_KERNEL);
 
 	sg_init_one(&sg, data, size);
 	ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_SLEEP |
@@ -249,7 +297,7 @@ int fsverity_hash_buffer(const struct fsverity_hash_alg *alg,
 
 	err = crypto_wait_req(crypto_ahash_digest(req), &wait);
 
-	ahash_request_free(req);
+	fsverity_free_hash_request(alg, req);
 	return err;
 }
 
diff --git a/fs/verity/init.c b/fs/verity/init.c
index 94c104e..c98b701 100644
--- a/fs/verity/init.c
+++ b/fs/verity/init.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * fs/verity/init.c: fs-verity module initialization and logging
+ * fs-verity module initialization and logging
  *
  * Copyright 2019 Google LLC
  */
diff --git a/fs/verity/measure.c b/fs/verity/measure.c
index 05049b6..f0d7b30 100644
--- a/fs/verity/measure.c
+++ b/fs/verity/measure.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * fs/verity/measure.c: ioctl to get a verity file's measurement
+ * Ioctl to get a verity file's digest
  *
  * Copyright 2019 Google LLC
  */
@@ -10,10 +10,12 @@
 #include <linux/uaccess.h>
 
 /**
- * fsverity_ioctl_measure() - get a verity file's measurement
+ * fsverity_ioctl_measure() - get a verity file's digest
+ * @filp: file to get digest of
+ * @_uarg: user pointer to fsverity_digest
  *
- * Retrieve the file measurement that the kernel is enforcing for reads from a
- * verity file.  See the "FS_IOC_MEASURE_VERITY" section of
+ * Retrieve the file digest that the kernel is enforcing for reads from a verity
+ * file.  See the "FS_IOC_MEASURE_VERITY" section of
  * Documentation/filesystems/fsverity.rst for the documentation.
  *
  * Return: 0 on success, -errno on failure
@@ -49,7 +51,7 @@ int fsverity_ioctl_measure(struct file *filp, void __user *_uarg)
 	if (copy_to_user(uarg, &arg, sizeof(arg)))
 		return -EFAULT;
 
-	if (copy_to_user(uarg->digest, vi->measurement, hash_alg->digest_size))
+	if (copy_to_user(uarg->digest, vi->file_digest, hash_alg->digest_size))
 		return -EFAULT;
 
 	return 0;
diff --git a/fs/verity/open.c b/fs/verity/open.c
index 63d1004..228d0ec 100644
--- a/fs/verity/open.c
+++ b/fs/verity/open.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * fs/verity/open.c: opening fs-verity files
+ * Opening fs-verity files
  *
  * Copyright 2019 Google LLC
  */
@@ -31,7 +31,7 @@ int fsverity_init_merkle_tree_params(struct merkle_tree_params *params,
 				     unsigned int log_blocksize,
 				     const u8 *salt, size_t salt_size)
 {
-	const struct fsverity_hash_alg *hash_alg;
+	struct fsverity_hash_alg *hash_alg;
 	int err;
 	u64 blocks;
 	u64 offset;
@@ -102,6 +102,7 @@ int fsverity_init_merkle_tree_params(struct merkle_tree_params *params,
 		/* temporarily using level_start[] to store blocks in level */
 		params->level_start[params->num_levels++] = blocks;
 	}
+	params->level0_blocks = params->level_start[0];
 
 	/* Compute the starting block of each level */
 	offset = 0;
@@ -123,18 +124,18 @@ int fsverity_init_merkle_tree_params(struct merkle_tree_params *params,
 }
 
 /*
- * Compute the file measurement by hashing the fsverity_descriptor excluding the
+ * Compute the file digest by hashing the fsverity_descriptor excluding the
  * signature and with the sig_size field set to 0.
  */
-static int compute_file_measurement(const struct fsverity_hash_alg *hash_alg,
-				    struct fsverity_descriptor *desc,
-				    u8 *measurement)
+static int compute_file_digest(struct fsverity_hash_alg *hash_alg,
+			       struct fsverity_descriptor *desc,
+			       u8 *file_digest)
 {
 	__le32 sig_size = desc->sig_size;
 	int err;
 
 	desc->sig_size = 0;
-	err = fsverity_hash_buffer(hash_alg, desc, sizeof(*desc), measurement);
+	err = fsverity_hash_buffer(hash_alg, desc, sizeof(*desc), file_digest);
 	desc->sig_size = sig_size;
 
 	return err;
@@ -198,15 +199,15 @@ struct fsverity_info *fsverity_create_info(const struct inode *inode,
 
 	memcpy(vi->root_hash, desc->root_hash, vi->tree_params.digest_size);
 
-	err = compute_file_measurement(vi->tree_params.hash_alg, desc,
-				       vi->measurement);
+	err = compute_file_digest(vi->tree_params.hash_alg, desc,
+				  vi->file_digest);
 	if (err) {
-		fsverity_err(inode, "Error %d computing file measurement", err);
+		fsverity_err(inode, "Error %d computing file digest", err);
 		goto out;
 	}
-	pr_debug("Computed file measurement: %s:%*phN\n",
+	pr_debug("Computed file digest: %s:%*phN\n",
 		 vi->tree_params.hash_alg->name,
-		 vi->tree_params.digest_size, vi->measurement);
+		 vi->tree_params.digest_size, vi->file_digest);
 
 	err = fsverity_verify_signature(vi, desc, desc_size);
 out:
@@ -220,11 +221,20 @@ struct fsverity_info *fsverity_create_info(const struct inode *inode,
 void fsverity_set_info(struct inode *inode, struct fsverity_info *vi)
 {
 	/*
-	 * Multiple processes may race to set ->i_verity_info, so use cmpxchg.
-	 * This pairs with the READ_ONCE() in fsverity_get_info().
+	 * Multiple tasks may race to set ->i_verity_info, so use
+	 * cmpxchg_release().  This pairs with the smp_load_acquire() in
+	 * fsverity_get_info().  I.e., here we publish ->i_verity_info with a
+	 * RELEASE barrier so that other tasks can ACQUIRE it.
 	 */
-	if (cmpxchg(&inode->i_verity_info, NULL, vi) != NULL)
+	if (cmpxchg_release(&inode->i_verity_info, NULL, vi) != NULL) {
+		/* Lost the race, so free the fsverity_info we allocated. */
 		fsverity_free_info(vi);
+		/*
+		 * Afterwards, the caller may access ->i_verity_info directly,
+		 * so make sure to ACQUIRE the winning fsverity_info.
+		 */
+		(void)fsverity_get_info(inode);
+	}
 }
 
 void fsverity_free_info(struct fsverity_info *vi)
@@ -329,6 +339,7 @@ EXPORT_SYMBOL_GPL(fsverity_prepare_setattr);
 
 /**
  * fsverity_cleanup_inode() - free the inode's verity info, if present
+ * @inode: an inode being evicted
  *
  * Filesystems must call this on inode eviction to free ->i_verity_info.
  */
@@ -343,7 +354,7 @@ int __init fsverity_init_info_cache(void)
 {
 	fsverity_info_cachep = KMEM_CACHE_USERCOPY(fsverity_info,
 						   SLAB_RECLAIM_ACCOUNT,
-						   measurement);
+						   file_digest);
 	if (!fsverity_info_cachep)
 		return -ENOMEM;
 	return 0;
diff --git a/fs/verity/signature.c b/fs/verity/signature.c
index c8b2552..012468e 100644
--- a/fs/verity/signature.c
+++ b/fs/verity/signature.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * fs/verity/signature.c: verification of builtin signatures
+ * Verification of builtin signatures
  *
  * Copyright 2019 Google LLC
  */
@@ -28,9 +28,12 @@ static struct key *fsverity_keyring;
 
 /**
  * fsverity_verify_signature() - check a verity file's signature
+ * @vi: the file's fsverity_info
+ * @desc: the file's fsverity_descriptor
+ * @desc_size: size of @desc
  *
- * If the file's fs-verity descriptor includes a signature of the file
- * measurement, verify it against the certificates in the fs-verity keyring.
+ * If the file's fs-verity descriptor includes a signature of the file digest,
+ * verify it against the certificates in the fs-verity keyring.
  *
  * Return: 0 on success (signature valid or not required); -errno on failure
  */
@@ -41,7 +44,7 @@ int fsverity_verify_signature(const struct fsverity_info *vi,
 	const struct inode *inode = vi->inode;
 	const struct fsverity_hash_alg *hash_alg = vi->tree_params.hash_alg;
 	const u32 sig_size = le32_to_cpu(desc->sig_size);
-	struct fsverity_signed_digest *d;
+	struct fsverity_formatted_digest *d;
 	int err;
 
 	if (sig_size == 0) {
@@ -64,7 +67,7 @@ int fsverity_verify_signature(const struct fsverity_info *vi,
 	memcpy(d->magic, "FSVerity", 8);
 	d->digest_algorithm = cpu_to_le16(hash_alg - fsverity_hash_algs);
 	d->digest_size = cpu_to_le16(hash_alg->digest_size);
-	memcpy(d->digest, vi->measurement, hash_alg->digest_size);
+	memcpy(d->digest, vi->file_digest, hash_alg->digest_size);
 
 	err = verify_pkcs7_signature(d, sizeof(*d) + hash_alg->digest_size,
 				     desc->signature, sig_size,
@@ -87,8 +90,8 @@ int fsverity_verify_signature(const struct fsverity_info *vi,
 		return err;
 	}
 
-	pr_debug("Valid signature for file measurement %s:%*phN\n",
-		 hash_alg->name, hash_alg->digest_size, vi->measurement);
+	pr_debug("Valid signature for file digest %s:%*phN\n",
+		 hash_alg->name, hash_alg->digest_size, vi->file_digest);
 	return 0;
 }
 
diff --git a/fs/verity/verify.c b/fs/verity/verify.c
index 3e8f2de..0adb970f 100644
--- a/fs/verity/verify.c
+++ b/fs/verity/verify.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * fs/verity/verify.c: data verification functions, i.e. hooks for ->readpages()
+ * Data verification functions, i.e. hooks for ->readpages()
  *
  * Copyright 2019 Google LLC
  */
@@ -84,7 +84,8 @@ static inline int cmp_hashes(const struct fsverity_info *vi,
  * Return: true if the page is valid, else false.
  */
 static bool verify_page(struct inode *inode, const struct fsverity_info *vi,
-			struct ahash_request *req, struct page *data_page)
+			struct ahash_request *req, struct page *data_page,
+			unsigned long level0_ra_pages)
 {
 	const struct merkle_tree_params *params = &vi->tree_params;
 	const unsigned int hsize = params->digest_size;
@@ -117,8 +118,8 @@ static bool verify_page(struct inode *inode, const struct fsverity_info *vi,
 		pr_debug_ratelimited("Level %d: hindex=%lu, hoffset=%u\n",
 				     level, hindex, hoffset);
 
-		hpage = inode->i_sb->s_vop->read_merkle_tree_page(inode,
-								  hindex);
+		hpage = inode->i_sb->s_vop->read_merkle_tree_page(inode, hindex,
+				level == 0 ? level0_ra_pages : 0);
 		if (IS_ERR(hpage)) {
 			err = PTR_ERR(hpage);
 			fsverity_err(inode,
@@ -178,6 +179,7 @@ static bool verify_page(struct inode *inode, const struct fsverity_info *vi,
 
 /**
  * fsverity_verify_page() - verify a data page
+ * @page: the page to verity
  *
  * Verify a page that has just been read from a verity file.  The page must be a
  * pagecache page that is still locked and not yet uptodate.
@@ -191,13 +193,12 @@ bool fsverity_verify_page(struct page *page)
 	struct ahash_request *req;
 	bool valid;
 
-	req = ahash_request_alloc(vi->tree_params.hash_alg->tfm, GFP_NOFS);
-	if (unlikely(!req))
-		return false;
+	/* This allocation never fails, since it's mempool-backed. */
+	req = fsverity_alloc_hash_request(vi->tree_params.hash_alg, GFP_NOFS);
 
-	valid = verify_page(inode, vi, req, page);
+	valid = verify_page(inode, vi, req, page, 0);
 
-	ahash_request_free(req);
+	fsverity_free_hash_request(vi->tree_params.hash_alg, req);
 
 	return valid;
 }
@@ -206,6 +207,7 @@ EXPORT_SYMBOL_GPL(fsverity_verify_page);
 #ifdef CONFIG_BLOCK
 /**
  * fsverity_verify_bio() - verify a 'read' bio that has just completed
+ * @bio: the bio to verify
  *
  * Verify a set of pages that have just been read from a verity file.  The pages
  * must be pagecache pages that are still locked and not yet uptodate.  Pages
@@ -222,31 +224,49 @@ void fsverity_verify_bio(struct bio *bio)
 {
 	struct inode *inode = bio_first_page_all(bio)->mapping->host;
 	const struct fsverity_info *vi = inode->i_verity_info;
+	const struct merkle_tree_params *params = &vi->tree_params;
 	struct ahash_request *req;
 	struct bio_vec *bv;
 	struct bvec_iter_all iter_all;
+	unsigned long max_ra_pages = 0;
 
-	req = ahash_request_alloc(vi->tree_params.hash_alg->tfm, GFP_NOFS);
-	if (unlikely(!req)) {
+	/* This allocation never fails, since it's mempool-backed. */
+	req = fsverity_alloc_hash_request(params->hash_alg, GFP_NOFS);
+
+	if (bio->bi_opf & REQ_RAHEAD) {
+		/*
+		 * If this bio is for data readahead, then we also do readahead
+		 * of the first (largest) level of the Merkle tree.  Namely,
+		 * when a Merkle tree page is read, we also try to piggy-back on
+		 * some additional pages -- up to 1/4 the number of data pages.
+		 *
+		 * This improves sequential read performance, as it greatly
+		 * reduces the number of I/O requests made to the Merkle tree.
+		 */
 		bio_for_each_segment_all(bv, bio, iter_all)
-			SetPageError(bv->bv_page);
-		return;
+			max_ra_pages++;
+		max_ra_pages /= 4;
 	}
 
 	bio_for_each_segment_all(bv, bio, iter_all) {
 		struct page *page = bv->bv_page;
+		unsigned long level0_index = page->index >> params->log_arity;
+		unsigned long level0_ra_pages =
+			min(max_ra_pages, params->level0_blocks - level0_index);
 
-		if (!PageError(page) && !verify_page(inode, vi, req, page))
+		if (!PageError(page) &&
+		    !verify_page(inode, vi, req, page, level0_ra_pages))
 			SetPageError(page);
 	}
 
-	ahash_request_free(req);
+	fsverity_free_hash_request(params->hash_alg, req);
 }
 EXPORT_SYMBOL_GPL(fsverity_verify_bio);
 #endif /* CONFIG_BLOCK */
 
 /**
  * fsverity_enqueue_verify_work() - enqueue work on the fs-verity workqueue
+ * @work: the work to enqueue
  *
  * Enqueue verification work for asynchronous processing.
  */
diff --git a/fs/xattr.c b/fs/xattr.c
index f285457..81f0fb6 100644
--- a/fs/xattr.c
+++ b/fs/xattr.c
@@ -318,7 +318,7 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value,
 		return PTR_ERR(handler);
 	if (!handler->get)
 		return -EOPNOTSUPP;
-	error = handler->get(handler, dentry, inode, name, NULL, 0);
+	error = handler->get(handler, dentry, inode, name, NULL, 0, 0);
 	if (error < 0)
 		return error;
 
@@ -329,32 +329,20 @@ vfs_getxattr_alloc(struct dentry *dentry, const char *name, char **xattr_value,
 		memset(value, 0, error + 1);
 	}
 
-	error = handler->get(handler, dentry, inode, name, value, error);
+	error = handler->get(handler, dentry, inode, name, value, error, 0);
 	*xattr_value = value;
 	return error;
 }
 
 ssize_t
 __vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name,
-	       void *value, size_t size)
+	       void *value, size_t size, int flags)
 {
 	const struct xattr_handler *handler;
-
-	handler = xattr_resolve_name(inode, &name);
-	if (IS_ERR(handler))
-		return PTR_ERR(handler);
-	if (!handler->get)
-		return -EOPNOTSUPP;
-	return handler->get(handler, dentry, inode, name, value, size);
-}
-EXPORT_SYMBOL(__vfs_getxattr);
-
-ssize_t
-vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size)
-{
-	struct inode *inode = dentry->d_inode;
 	int error;
 
+	if (flags & XATTR_NOSECURITY)
+		goto nolsm;
 	error = xattr_permission(inode, name, MAY_READ);
 	if (error)
 		return error;
@@ -376,7 +364,19 @@ vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size)
 		return ret;
 	}
 nolsm:
-	return __vfs_getxattr(dentry, inode, name, value, size);
+	handler = xattr_resolve_name(inode, &name);
+	if (IS_ERR(handler))
+		return PTR_ERR(handler);
+	if (!handler->get)
+		return -EOPNOTSUPP;
+	return handler->get(handler, dentry, inode, name, value, size, flags);
+}
+EXPORT_SYMBOL(__vfs_getxattr);
+
+ssize_t
+vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size)
+{
+	return __vfs_getxattr(dentry, dentry->d_inode, name, value, size, 0);
 }
 EXPORT_SYMBOL_GPL(vfs_getxattr);
 
diff --git a/fs/xfs/xfs_xattr.c b/fs/xfs/xfs_xattr.c
index cb895b1..9d2030e 100644
--- a/fs/xfs/xfs_xattr.c
+++ b/fs/xfs/xfs_xattr.c
@@ -18,7 +18,8 @@
 
 static int
 xfs_xattr_get(const struct xattr_handler *handler, struct dentry *unused,
-		struct inode *inode, const char *name, void *value, size_t size)
+		struct inode *inode, const char *name, void *value, size_t size,
+		int flags)
 {
 	int xflags = handler->flags;
 	struct xfs_inode *ip = XFS_I(inode);
diff --git a/include/asm-generic/seccomp.h b/include/asm-generic/seccomp.h
index 1321ac7..6b6f42b 100644
--- a/include/asm-generic/seccomp.h
+++ b/include/asm-generic/seccomp.h
@@ -33,7 +33,7 @@ static inline const int *get_compat_mode1_syscalls(void)
 	static const int mode1_syscalls_32[] = {
 		__NR_seccomp_read_32, __NR_seccomp_write_32,
 		__NR_seccomp_exit_32, __NR_seccomp_sigreturn_32,
-		0, /* null terminated */
+		-1, /* negative terminated */
 	};
 	return mode1_syscalls_32;
 }
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 2267b7c..88b0a90 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -63,18 +63,23 @@
  * .data. We don't want to pull in .data..other sections, which Linux
  * has defined. Same for text and bss.
  *
+ * With LTO_CLANG, the linker also splits sections by default, so we need
+ * these macros to combine the sections during the final link.
+ *
  * RODATA_MAIN is not used because existing code already defines .rodata.x
  * sections to be brought in with rodata.
  */
-#ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
+#if defined(CONFIG_LD_DEAD_CODE_DATA_ELIMINATION) || defined(CONFIG_LTO_CLANG)
 #define TEXT_MAIN .text .text.[0-9a-zA-Z_]*
-#define DATA_MAIN .data .data.[0-9a-zA-Z_]* .data..LPBX*
+#define TEXT_CFI_MAIN .text.[0-9a-zA-Z_]*.cfi
+#define DATA_MAIN .data .data.[0-9a-zA-Z_]* .data..L* .data..compoundliteral*
 #define SDATA_MAIN .sdata .sdata.[0-9a-zA-Z_]*
-#define RODATA_MAIN .rodata .rodata.[0-9a-zA-Z_]*
-#define BSS_MAIN .bss .bss.[0-9a-zA-Z_]*
+#define RODATA_MAIN .rodata .rodata.[0-9a-zA-Z_]* .rodata..L*
+#define BSS_MAIN .bss .bss.[0-9a-zA-Z_]* .bss..compoundliteral*
 #define SBSS_MAIN .sbss .sbss.[0-9a-zA-Z_]*
 #else
 #define TEXT_MAIN .text
+#define TEXT_CFI_MAIN .text.cfi
 #define DATA_MAIN .data
 #define SDATA_MAIN .sdata
 #define RODATA_MAIN .rodata
@@ -533,8 +538,10 @@
 		*(TEXT_MAIN .text.fixup)				\
 		*(.text.unlikely .text.unlikely.*)			\
 		*(.text.unknown .text.unknown.*)			\
+		*(TEXT_CFI_MAIN)					\
 		NOINSTR_TEXT						\
 		*(.text..refcount)					\
+		*(.text..ftrace)					\
 		*(.ref.text)						\
 	MEM_KEEP(init.text*)						\
 	MEM_KEEP(exit.text*)						\
diff --git a/include/crypto/blake2b.h b/include/crypto/blake2b.h
new file mode 100644
index 0000000..18875f1
--- /dev/null
+++ b/include/crypto/blake2b.h
@@ -0,0 +1,67 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+
+#ifndef _CRYPTO_BLAKE2B_H
+#define _CRYPTO_BLAKE2B_H
+
+#include <linux/bug.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+
+enum blake2b_lengths {
+	BLAKE2B_BLOCK_SIZE = 128,
+	BLAKE2B_HASH_SIZE = 64,
+	BLAKE2B_KEY_SIZE = 64,
+
+	BLAKE2B_160_HASH_SIZE = 20,
+	BLAKE2B_256_HASH_SIZE = 32,
+	BLAKE2B_384_HASH_SIZE = 48,
+	BLAKE2B_512_HASH_SIZE = 64,
+};
+
+struct blake2b_state {
+	/* 'h', 't', and 'f' are used in assembly code, so keep them as-is. */
+	u64 h[8];
+	u64 t[2];
+	u64 f[2];
+	u8 buf[BLAKE2B_BLOCK_SIZE];
+	unsigned int buflen;
+	unsigned int outlen;
+};
+
+enum blake2b_iv {
+	BLAKE2B_IV0 = 0x6A09E667F3BCC908ULL,
+	BLAKE2B_IV1 = 0xBB67AE8584CAA73BULL,
+	BLAKE2B_IV2 = 0x3C6EF372FE94F82BULL,
+	BLAKE2B_IV3 = 0xA54FF53A5F1D36F1ULL,
+	BLAKE2B_IV4 = 0x510E527FADE682D1ULL,
+	BLAKE2B_IV5 = 0x9B05688C2B3E6C1FULL,
+	BLAKE2B_IV6 = 0x1F83D9ABFB41BD6BULL,
+	BLAKE2B_IV7 = 0x5BE0CD19137E2179ULL,
+};
+
+static inline void __blake2b_init(struct blake2b_state *state, size_t outlen,
+				  const void *key, size_t keylen)
+{
+	state->h[0] = BLAKE2B_IV0 ^ (0x01010000 | keylen << 8 | outlen);
+	state->h[1] = BLAKE2B_IV1;
+	state->h[2] = BLAKE2B_IV2;
+	state->h[3] = BLAKE2B_IV3;
+	state->h[4] = BLAKE2B_IV4;
+	state->h[5] = BLAKE2B_IV5;
+	state->h[6] = BLAKE2B_IV6;
+	state->h[7] = BLAKE2B_IV7;
+	state->t[0] = 0;
+	state->t[1] = 0;
+	state->f[0] = 0;
+	state->f[1] = 0;
+	state->buflen = 0;
+	state->outlen = outlen;
+	if (keylen) {
+		memcpy(state->buf, key, keylen);
+		memset(&state->buf[keylen], 0, BLAKE2B_BLOCK_SIZE - keylen);
+		state->buflen = BLAKE2B_BLOCK_SIZE;
+	}
+}
+
+#endif /* _CRYPTO_BLAKE2B_H */
diff --git a/include/crypto/blake2s.h b/include/crypto/blake2s.h
new file mode 100644
index 0000000..bc3fb59
--- /dev/null
+++ b/include/crypto/blake2s.h
@@ -0,0 +1,107 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _CRYPTO_BLAKE2S_H
+#define _CRYPTO_BLAKE2S_H
+
+#include <linux/bug.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+
+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 {
+	/* 'h', 't', and 'f' are used in assembly code, so keep them as-is. */
+	u32 h[8];
+	u32 t[2];
+	u32 f[2];
+	u8 buf[BLAKE2S_BLOCK_SIZE];
+	unsigned int buflen;
+	unsigned int outlen;
+};
+
+enum blake2s_iv {
+	BLAKE2S_IV0 = 0x6A09E667UL,
+	BLAKE2S_IV1 = 0xBB67AE85UL,
+	BLAKE2S_IV2 = 0x3C6EF372UL,
+	BLAKE2S_IV3 = 0xA54FF53AUL,
+	BLAKE2S_IV4 = 0x510E527FUL,
+	BLAKE2S_IV5 = 0x9B05688CUL,
+	BLAKE2S_IV6 = 0x1F83D9ABUL,
+	BLAKE2S_IV7 = 0x5BE0CD19UL,
+};
+
+static inline void __blake2s_init(struct blake2s_state *state, size_t outlen,
+				  const void *key, size_t keylen)
+{
+	state->h[0] = BLAKE2S_IV0 ^ (0x01010000 | keylen << 8 | outlen);
+	state->h[1] = BLAKE2S_IV1;
+	state->h[2] = BLAKE2S_IV2;
+	state->h[3] = BLAKE2S_IV3;
+	state->h[4] = BLAKE2S_IV4;
+	state->h[5] = BLAKE2S_IV5;
+	state->h[6] = BLAKE2S_IV6;
+	state->h[7] = BLAKE2S_IV7;
+	state->t[0] = 0;
+	state->t[1] = 0;
+	state->f[0] = 0;
+	state->f[1] = 0;
+	state->buflen = 0;
+	state->outlen = outlen;
+	if (keylen) {
+		memcpy(state->buf, key, keylen);
+		memset(&state->buf[keylen], 0, BLAKE2S_BLOCK_SIZE - keylen);
+		state->buflen = BLAKE2S_BLOCK_SIZE;
+	}
+}
+
+static inline void blake2s_init(struct blake2s_state *state,
+				const size_t outlen)
+{
+	__blake2s_init(state, outlen, NULL, 0);
+}
+
+static inline void blake2s_init_key(struct blake2s_state *state,
+				    const size_t outlen, const void *key,
+				    const size_t keylen)
+{
+	WARN_ON(IS_ENABLED(DEBUG) && (!outlen || outlen > BLAKE2S_HASH_SIZE ||
+		!key || !keylen || keylen > BLAKE2S_KEY_SIZE));
+
+	__blake2s_init(state, outlen, key, keylen);
+}
+
+void blake2s_update(struct blake2s_state *state, const u8 *in, size_t inlen);
+void blake2s_final(struct blake2s_state *state, u8 *out);
+
+static inline void blake2s(u8 *out, const u8 *in, const u8 *key,
+			   const size_t outlen, const size_t inlen,
+			   const size_t keylen)
+{
+	struct blake2s_state state;
+
+	WARN_ON(IS_ENABLED(DEBUG) && ((!in && inlen > 0) || !out || !outlen ||
+		outlen > BLAKE2S_HASH_SIZE || keylen > BLAKE2S_KEY_SIZE ||
+		(!key && keylen)));
+
+	__blake2s_init(&state, outlen, key, keylen);
+	blake2s_update(&state, in, inlen);
+	blake2s_final(&state, out);
+}
+
+void blake2s256_hmac(u8 *out, const u8 *in, const u8 *key, const size_t inlen,
+		     const size_t keylen);
+
+#endif /* _CRYPTO_BLAKE2S_H */
diff --git a/include/crypto/cast6.h b/include/crypto/cast6.h
index c71f6ef..4c8d0c7 100644
--- a/include/crypto/cast6.h
+++ b/include/crypto/cast6.h
@@ -19,7 +19,7 @@ int __cast6_setkey(struct cast6_ctx *ctx, const u8 *key,
 		   unsigned int keylen, u32 *flags);
 int cast6_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int keylen);
 
-void __cast6_encrypt(struct cast6_ctx *ctx, u8 *dst, const u8 *src);
-void __cast6_decrypt(struct cast6_ctx *ctx, u8 *dst, const u8 *src);
+void __cast6_encrypt(const void *ctx, u8 *dst, const u8 *src);
+void __cast6_decrypt(const void *ctx, u8 *dst, const u8 *src);
 
 #endif
diff --git a/include/crypto/chacha.h b/include/crypto/chacha.h
index d1e723c..3a1c72f 100644
--- a/include/crypto/chacha.h
+++ b/include/crypto/chacha.h
@@ -15,9 +15,8 @@
 #ifndef _CRYPTO_CHACHA_H
 #define _CRYPTO_CHACHA_H
 
-#include <crypto/skcipher.h>
+#include <asm/unaligned.h>
 #include <linux/types.h>
-#include <linux/crypto.h>
 
 /* 32-bit stream position, then 96-bit nonce (RFC7539 convention) */
 #define CHACHA_IV_SIZE		16
@@ -26,29 +25,75 @@
 #define CHACHA_BLOCK_SIZE	64
 #define CHACHAPOLY_IV_SIZE	12
 
+#define CHACHA_STATE_WORDS	(CHACHA_BLOCK_SIZE / sizeof(u32))
+
 /* 192-bit nonce, then 64-bit stream position */
 #define XCHACHA_IV_SIZE		32
 
-struct chacha_ctx {
-	u32 key[8];
-	int nrounds;
-};
-
-void chacha_block(u32 *state, u8 *stream, int nrounds);
+void chacha_block_generic(u32 *state, u8 *stream, int nrounds);
 static inline void chacha20_block(u32 *state, u8 *stream)
 {
-	chacha_block(state, stream, 20);
+	chacha_block_generic(state, stream, 20);
 }
-void hchacha_block(const u32 *in, u32 *out, int nrounds);
 
-void crypto_chacha_init(u32 *state, const struct chacha_ctx *ctx, const u8 *iv);
+void hchacha_block_arch(const u32 *state, u32 *out, int nrounds);
+void hchacha_block_generic(const u32 *state, u32 *out, int nrounds);
 
-int crypto_chacha20_setkey(struct crypto_skcipher *tfm, const u8 *key,
-			   unsigned int keysize);
-int crypto_chacha12_setkey(struct crypto_skcipher *tfm, const u8 *key,
-			   unsigned int keysize);
+static inline void hchacha_block(const u32 *state, u32 *out, int nrounds)
+{
+	if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA))
+		hchacha_block_arch(state, out, nrounds);
+	else
+		hchacha_block_generic(state, out, nrounds);
+}
 
-int crypto_chacha_crypt(struct skcipher_request *req);
-int crypto_xchacha_crypt(struct skcipher_request *req);
+void chacha_init_arch(u32 *state, const u32 *key, const u8 *iv);
+static inline void chacha_init_generic(u32 *state, const u32 *key, const u8 *iv)
+{
+	state[0]  = 0x61707865; /* "expa" */
+	state[1]  = 0x3320646e; /* "nd 3" */
+	state[2]  = 0x79622d32; /* "2-by" */
+	state[3]  = 0x6b206574; /* "te k" */
+	state[4]  = key[0];
+	state[5]  = key[1];
+	state[6]  = key[2];
+	state[7]  = key[3];
+	state[8]  = key[4];
+	state[9]  = key[5];
+	state[10] = key[6];
+	state[11] = key[7];
+	state[12] = get_unaligned_le32(iv +  0);
+	state[13] = get_unaligned_le32(iv +  4);
+	state[14] = get_unaligned_le32(iv +  8);
+	state[15] = get_unaligned_le32(iv + 12);
+}
+
+static inline void chacha_init(u32 *state, const u32 *key, const u8 *iv)
+{
+	if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA))
+		chacha_init_arch(state, key, iv);
+	else
+		chacha_init_generic(state, key, iv);
+}
+
+void chacha_crypt_arch(u32 *state, u8 *dst, const u8 *src,
+		       unsigned int bytes, int nrounds);
+void chacha_crypt_generic(u32 *state, u8 *dst, const u8 *src,
+			  unsigned int bytes, int nrounds);
+
+static inline void chacha_crypt(u32 *state, u8 *dst, const u8 *src,
+				unsigned int bytes, int nrounds)
+{
+	if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA))
+		chacha_crypt_arch(state, dst, src, bytes, nrounds);
+	else
+		chacha_crypt_generic(state, dst, src, bytes, nrounds);
+}
+
+static inline void chacha20_crypt(u32 *state, u8 *dst, const u8 *src,
+				  unsigned int bytes)
+{
+	chacha_crypt(state, dst, src, bytes, 20);
+}
 
 #endif /* _CRYPTO_CHACHA_H */
diff --git a/include/crypto/chacha20poly1305.h b/include/crypto/chacha20poly1305.h
new file mode 100644
index 0000000..d2ac3ff7d
--- /dev/null
+++ b/include/crypto/chacha20poly1305.h
@@ -0,0 +1,50 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef __CHACHA20POLY1305_H
+#define __CHACHA20POLY1305_H
+
+#include <linux/types.h>
+#include <linux/scatterlist.h>
+
+enum chacha20poly1305_lengths {
+	XCHACHA20POLY1305_NONCE_SIZE = 24,
+	CHACHA20POLY1305_KEY_SIZE = 32,
+	CHACHA20POLY1305_AUTHTAG_SIZE = 16
+};
+
+void chacha20poly1305_encrypt(u8 *dst, const u8 *src, const size_t src_len,
+			      const u8 *ad, const size_t ad_len,
+			      const u64 nonce,
+			      const u8 key[CHACHA20POLY1305_KEY_SIZE]);
+
+bool __must_check
+chacha20poly1305_decrypt(u8 *dst, const u8 *src, const size_t src_len,
+			 const u8 *ad, const size_t ad_len, const u64 nonce,
+			 const u8 key[CHACHA20POLY1305_KEY_SIZE]);
+
+void xchacha20poly1305_encrypt(u8 *dst, const u8 *src, const size_t src_len,
+			       const u8 *ad, const size_t ad_len,
+			       const u8 nonce[XCHACHA20POLY1305_NONCE_SIZE],
+			       const u8 key[CHACHA20POLY1305_KEY_SIZE]);
+
+bool __must_check xchacha20poly1305_decrypt(
+	u8 *dst, const u8 *src, const size_t src_len, const u8 *ad,
+	const size_t ad_len, const u8 nonce[XCHACHA20POLY1305_NONCE_SIZE],
+	const u8 key[CHACHA20POLY1305_KEY_SIZE]);
+
+bool chacha20poly1305_encrypt_sg_inplace(struct scatterlist *src, size_t src_len,
+					 const u8 *ad, const size_t ad_len,
+					 const u64 nonce,
+					 const u8 key[CHACHA20POLY1305_KEY_SIZE]);
+
+bool chacha20poly1305_decrypt_sg_inplace(struct scatterlist *src, size_t src_len,
+					 const u8 *ad, const size_t ad_len,
+					 const u64 nonce,
+					 const u8 key[CHACHA20POLY1305_KEY_SIZE]);
+
+bool chacha20poly1305_selftest(void);
+
+#endif /* __CHACHA20POLY1305_H */
diff --git a/include/crypto/curve25519.h b/include/crypto/curve25519.h
new file mode 100644
index 0000000..9ecb3c1
--- /dev/null
+++ b/include/crypto/curve25519.h
@@ -0,0 +1,73 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef CURVE25519_H
+#define CURVE25519_H
+
+#include <crypto/algapi.h> // For crypto_memneq.
+#include <linux/types.h>
+#include <linux/random.h>
+
+enum curve25519_lengths {
+	CURVE25519_KEY_SIZE = 32
+};
+
+extern const u8 curve25519_null_point[];
+extern const u8 curve25519_base_point[];
+
+void curve25519_generic(u8 out[CURVE25519_KEY_SIZE],
+			const u8 scalar[CURVE25519_KEY_SIZE],
+			const u8 point[CURVE25519_KEY_SIZE]);
+
+void curve25519_arch(u8 out[CURVE25519_KEY_SIZE],
+		     const u8 scalar[CURVE25519_KEY_SIZE],
+		     const u8 point[CURVE25519_KEY_SIZE]);
+
+void curve25519_base_arch(u8 pub[CURVE25519_KEY_SIZE],
+			  const u8 secret[CURVE25519_KEY_SIZE]);
+
+static inline
+bool __must_check curve25519(u8 mypublic[CURVE25519_KEY_SIZE],
+			     const u8 secret[CURVE25519_KEY_SIZE],
+			     const u8 basepoint[CURVE25519_KEY_SIZE])
+{
+	if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_CURVE25519) &&
+	    (!IS_ENABLED(CONFIG_CRYPTO_CURVE25519_X86) || IS_ENABLED(CONFIG_AS_ADX)))
+		curve25519_arch(mypublic, secret, basepoint);
+	else
+		curve25519_generic(mypublic, secret, basepoint);
+	return crypto_memneq(mypublic, curve25519_null_point,
+			     CURVE25519_KEY_SIZE);
+}
+
+static inline bool
+__must_check curve25519_generate_public(u8 pub[CURVE25519_KEY_SIZE],
+					const u8 secret[CURVE25519_KEY_SIZE])
+{
+	if (unlikely(!crypto_memneq(secret, curve25519_null_point,
+				    CURVE25519_KEY_SIZE)))
+		return false;
+
+	if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_CURVE25519) &&
+	    (!IS_ENABLED(CONFIG_CRYPTO_CURVE25519_X86) || IS_ENABLED(CONFIG_AS_ADX)))
+		curve25519_base_arch(pub, secret);
+	else
+		curve25519_generic(pub, secret, curve25519_base_point);
+	return crypto_memneq(pub, curve25519_null_point, CURVE25519_KEY_SIZE);
+}
+
+static inline void curve25519_clamp_secret(u8 secret[CURVE25519_KEY_SIZE])
+{
+	secret[0] &= 248;
+	secret[31] = (secret[31] & 127) | 64;
+}
+
+static inline void curve25519_generate_secret(u8 secret[CURVE25519_KEY_SIZE])
+{
+	get_random_bytes_wait(secret, CURVE25519_KEY_SIZE);
+	curve25519_clamp_secret(secret);
+}
+
+#endif /* CURVE25519_H */
diff --git a/include/crypto/internal/blake2b.h b/include/crypto/internal/blake2b.h
new file mode 100644
index 0000000..982fe5e
--- /dev/null
+++ b/include/crypto/internal/blake2b.h
@@ -0,0 +1,115 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/*
+ * Helper functions for BLAKE2b implementations.
+ * Keep this in sync with the corresponding BLAKE2s header.
+ */
+
+#ifndef _CRYPTO_INTERNAL_BLAKE2B_H
+#define _CRYPTO_INTERNAL_BLAKE2B_H
+
+#include <crypto/blake2b.h>
+#include <crypto/internal/hash.h>
+#include <linux/string.h>
+
+void blake2b_compress_generic(struct blake2b_state *state,
+			      const u8 *block, size_t nblocks, u32 inc);
+
+static inline void blake2b_set_lastblock(struct blake2b_state *state)
+{
+	state->f[0] = -1;
+}
+
+typedef void (*blake2b_compress_t)(struct blake2b_state *state,
+				   const u8 *block, size_t nblocks, u32 inc);
+
+static inline void __blake2b_update(struct blake2b_state *state,
+				    const u8 *in, size_t inlen,
+				    blake2b_compress_t compress)
+{
+	const size_t fill = BLAKE2B_BLOCK_SIZE - state->buflen;
+
+	if (unlikely(!inlen))
+		return;
+	if (inlen > fill) {
+		memcpy(state->buf + state->buflen, in, fill);
+		(*compress)(state, state->buf, 1, BLAKE2B_BLOCK_SIZE);
+		state->buflen = 0;
+		in += fill;
+		inlen -= fill;
+	}
+	if (inlen > BLAKE2B_BLOCK_SIZE) {
+		const size_t nblocks = DIV_ROUND_UP(inlen, BLAKE2B_BLOCK_SIZE);
+		/* Hash one less (full) block than strictly possible */
+		(*compress)(state, in, nblocks - 1, BLAKE2B_BLOCK_SIZE);
+		in += BLAKE2B_BLOCK_SIZE * (nblocks - 1);
+		inlen -= BLAKE2B_BLOCK_SIZE * (nblocks - 1);
+	}
+	memcpy(state->buf + state->buflen, in, inlen);
+	state->buflen += inlen;
+}
+
+static inline void __blake2b_final(struct blake2b_state *state, u8 *out,
+				   blake2b_compress_t compress)
+{
+	int i;
+
+	blake2b_set_lastblock(state);
+	memset(state->buf + state->buflen, 0,
+	       BLAKE2B_BLOCK_SIZE - state->buflen); /* Padding */
+	(*compress)(state, state->buf, 1, state->buflen);
+	for (i = 0; i < ARRAY_SIZE(state->h); i++)
+		__cpu_to_le64s(&state->h[i]);
+	memcpy(out, state->h, state->outlen);
+}
+
+/* Helper functions for shash implementations of BLAKE2b */
+
+struct blake2b_tfm_ctx {
+	u8 key[BLAKE2B_KEY_SIZE];
+	unsigned int keylen;
+};
+
+static inline int crypto_blake2b_setkey(struct crypto_shash *tfm,
+					const u8 *key, unsigned int keylen)
+{
+	struct blake2b_tfm_ctx *tctx = crypto_shash_ctx(tfm);
+
+	if (keylen == 0 || keylen > BLAKE2B_KEY_SIZE)
+		return -EINVAL;
+
+	memcpy(tctx->key, key, keylen);
+	tctx->keylen = keylen;
+
+	return 0;
+}
+
+static inline int crypto_blake2b_init(struct shash_desc *desc)
+{
+	const struct blake2b_tfm_ctx *tctx = crypto_shash_ctx(desc->tfm);
+	struct blake2b_state *state = shash_desc_ctx(desc);
+	unsigned int outlen = crypto_shash_digestsize(desc->tfm);
+
+	__blake2b_init(state, outlen, tctx->key, tctx->keylen);
+	return 0;
+}
+
+static inline int crypto_blake2b_update(struct shash_desc *desc,
+					const u8 *in, unsigned int inlen,
+					blake2b_compress_t compress)
+{
+	struct blake2b_state *state = shash_desc_ctx(desc);
+
+	__blake2b_update(state, in, inlen, compress);
+	return 0;
+}
+
+static inline int crypto_blake2b_final(struct shash_desc *desc, u8 *out,
+				       blake2b_compress_t compress)
+{
+	struct blake2b_state *state = shash_desc_ctx(desc);
+
+	__blake2b_final(state, out, compress);
+	return 0;
+}
+
+#endif /* _CRYPTO_INTERNAL_BLAKE2B_H */
diff --git a/include/crypto/internal/blake2s.h b/include/crypto/internal/blake2s.h
new file mode 100644
index 0000000..8e50d48
--- /dev/null
+++ b/include/crypto/internal/blake2s.h
@@ -0,0 +1,119 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/*
+ * Helper functions for BLAKE2s implementations.
+ * Keep this in sync with the corresponding BLAKE2b header.
+ */
+
+#ifndef _CRYPTO_INTERNAL_BLAKE2S_H
+#define _CRYPTO_INTERNAL_BLAKE2S_H
+
+#include <crypto/blake2s.h>
+#include <crypto/internal/hash.h>
+#include <linux/string.h>
+
+void blake2s_compress_generic(struct blake2s_state *state,const u8 *block,
+			      size_t nblocks, const u32 inc);
+
+void blake2s_compress_arch(struct blake2s_state *state,const u8 *block,
+			   size_t nblocks, const u32 inc);
+
+bool blake2s_selftest(void);
+
+static inline void blake2s_set_lastblock(struct blake2s_state *state)
+{
+	state->f[0] = -1;
+}
+
+typedef void (*blake2s_compress_t)(struct blake2s_state *state,
+				   const u8 *block, size_t nblocks, u32 inc);
+
+/* Helper functions for BLAKE2s shared by the library and shash APIs */
+
+static inline void __blake2s_update(struct blake2s_state *state,
+				    const u8 *in, size_t inlen,
+				    blake2s_compress_t compress)
+{
+	const size_t fill = BLAKE2S_BLOCK_SIZE - state->buflen;
+
+	if (unlikely(!inlen))
+		return;
+	if (inlen > fill) {
+		memcpy(state->buf + state->buflen, in, fill);
+		(*compress)(state, state->buf, 1, BLAKE2S_BLOCK_SIZE);
+		state->buflen = 0;
+		in += fill;
+		inlen -= fill;
+	}
+	if (inlen > BLAKE2S_BLOCK_SIZE) {
+		const size_t nblocks = DIV_ROUND_UP(inlen, BLAKE2S_BLOCK_SIZE);
+		/* Hash one less (full) block than strictly possible */
+		(*compress)(state, in, nblocks - 1, BLAKE2S_BLOCK_SIZE);
+		in += BLAKE2S_BLOCK_SIZE * (nblocks - 1);
+		inlen -= BLAKE2S_BLOCK_SIZE * (nblocks - 1);
+	}
+	memcpy(state->buf + state->buflen, in, inlen);
+	state->buflen += inlen;
+}
+
+static inline void __blake2s_final(struct blake2s_state *state, u8 *out,
+				   blake2s_compress_t compress)
+{
+	blake2s_set_lastblock(state);
+	memset(state->buf + state->buflen, 0,
+	       BLAKE2S_BLOCK_SIZE - state->buflen); /* Padding */
+	(*compress)(state, state->buf, 1, state->buflen);
+	cpu_to_le32_array(state->h, ARRAY_SIZE(state->h));
+	memcpy(out, state->h, state->outlen);
+}
+
+/* Helper functions for shash implementations of BLAKE2s */
+
+struct blake2s_tfm_ctx {
+	u8 key[BLAKE2S_KEY_SIZE];
+	unsigned int keylen;
+};
+
+static inline int crypto_blake2s_setkey(struct crypto_shash *tfm,
+					const u8 *key, unsigned int keylen)
+{
+	struct blake2s_tfm_ctx *tctx = crypto_shash_ctx(tfm);
+
+	if (keylen == 0 || keylen > BLAKE2S_KEY_SIZE)
+		return -EINVAL;
+
+	memcpy(tctx->key, key, keylen);
+	tctx->keylen = keylen;
+
+	return 0;
+}
+
+static inline int crypto_blake2s_init(struct shash_desc *desc)
+{
+	const struct blake2s_tfm_ctx *tctx = crypto_shash_ctx(desc->tfm);
+	struct blake2s_state *state = shash_desc_ctx(desc);
+	unsigned int outlen = crypto_shash_digestsize(desc->tfm);
+
+	__blake2s_init(state, outlen, tctx->key, tctx->keylen);
+	return 0;
+}
+
+static inline int crypto_blake2s_update(struct shash_desc *desc,
+					const u8 *in, unsigned int inlen,
+					blake2s_compress_t compress)
+{
+	struct blake2s_state *state = shash_desc_ctx(desc);
+
+	__blake2s_update(state, in, inlen, compress);
+	return 0;
+}
+
+static inline int crypto_blake2s_final(struct shash_desc *desc, u8 *out,
+				       blake2s_compress_t compress)
+{
+	struct blake2s_state *state = shash_desc_ctx(desc);
+
+	__blake2s_final(state, out, compress);
+	return 0;
+}
+
+#endif /* _CRYPTO_INTERNAL_BLAKE2S_H */
diff --git a/include/crypto/internal/chacha.h b/include/crypto/internal/chacha.h
new file mode 100644
index 0000000..b085dc1
--- /dev/null
+++ b/include/crypto/internal/chacha.h
@@ -0,0 +1,43 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef _CRYPTO_INTERNAL_CHACHA_H
+#define _CRYPTO_INTERNAL_CHACHA_H
+
+#include <crypto/chacha.h>
+#include <crypto/internal/skcipher.h>
+#include <linux/crypto.h>
+
+struct chacha_ctx {
+	u32 key[8];
+	int nrounds;
+};
+
+static inline int chacha_setkey(struct crypto_skcipher *tfm, const u8 *key,
+				unsigned int keysize, int nrounds)
+{
+	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
+	int i;
+
+	if (keysize != CHACHA_KEY_SIZE)
+		return -EINVAL;
+
+	for (i = 0; i < ARRAY_SIZE(ctx->key); i++)
+		ctx->key[i] = get_unaligned_le32(key + i * sizeof(u32));
+
+	ctx->nrounds = nrounds;
+	return 0;
+}
+
+static inline int chacha20_setkey(struct crypto_skcipher *tfm, const u8 *key,
+				  unsigned int keysize)
+{
+	return chacha_setkey(tfm, key, keysize, 20);
+}
+
+static inline int chacha12_setkey(struct crypto_skcipher *tfm, const u8 *key,
+				  unsigned int keysize)
+{
+	return chacha_setkey(tfm, key, keysize, 12);
+}
+
+#endif /* _CRYPTO_CHACHA_H */
diff --git a/include/crypto/internal/poly1305.h b/include/crypto/internal/poly1305.h
new file mode 100644
index 0000000..064e52ca
--- /dev/null
+++ b/include/crypto/internal/poly1305.h
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Common values for the Poly1305 algorithm
+ */
+
+#ifndef _CRYPTO_INTERNAL_POLY1305_H
+#define _CRYPTO_INTERNAL_POLY1305_H
+
+#include <asm/unaligned.h>
+#include <linux/types.h>
+#include <crypto/poly1305.h>
+
+/*
+ * Poly1305 core functions.  These only accept whole blocks; the caller must
+ * handle any needed block buffering and padding.  'hibit' must be 1 for any
+ * full blocks, or 0 for the final block if it had to be padded.  If 'nonce' is
+ * non-NULL, then it's added at the end to compute the Poly1305 MAC.  Otherwise,
+ * only the ε-almost-∆-universal hash function (not the full MAC) is computed.
+ */
+
+void poly1305_core_setkey(struct poly1305_core_key *key, const u8 *raw_key);
+static inline void poly1305_core_init(struct poly1305_state *state)
+{
+	*state = (struct poly1305_state){};
+}
+
+void poly1305_core_blocks(struct poly1305_state *state,
+			  const struct poly1305_core_key *key, const void *src,
+			  unsigned int nblocks, u32 hibit);
+void poly1305_core_emit(const struct poly1305_state *state, const u32 nonce[4],
+			void *dst);
+
+#endif
diff --git a/include/crypto/nhpoly1305.h b/include/crypto/nhpoly1305.h
index 53c0442..306925f 100644
--- a/include/crypto/nhpoly1305.h
+++ b/include/crypto/nhpoly1305.h
@@ -7,7 +7,7 @@
 #define _NHPOLY1305_H
 
 #include <crypto/hash.h>
-#include <crypto/poly1305.h>
+#include <crypto/internal/poly1305.h>
 
 /* NH parameterization: */
 
@@ -33,7 +33,7 @@
 #define NHPOLY1305_KEY_SIZE	(POLY1305_BLOCK_SIZE + NH_KEY_BYTES)
 
 struct nhpoly1305_key {
-	struct poly1305_key poly_key;
+	struct poly1305_core_key poly_key;
 	u32 nh_key[NH_KEY_WORDS];
 };
 
diff --git a/include/crypto/poly1305.h b/include/crypto/poly1305.h
index 34317ed..f1f67fc 100644
--- a/include/crypto/poly1305.h
+++ b/include/crypto/poly1305.h
@@ -13,52 +13,85 @@
 #define POLY1305_KEY_SIZE	32
 #define POLY1305_DIGEST_SIZE	16
 
+/* The poly1305_key and poly1305_state types are mostly opaque and
+ * implementation-defined. Limbs might be in base 2^64 or base 2^26, or
+ * different yet. The union type provided keeps these 64-bit aligned for the
+ * case in which this is implemented using 64x64 multiplies.
+ */
+
 struct poly1305_key {
-	u32 r[5];	/* key, base 2^26 */
+	union {
+		u32 r[5];
+		u64 r64[3];
+	};
+};
+
+struct poly1305_core_key {
+	struct poly1305_key key;
+	struct poly1305_key precomputed_s;
 };
 
 struct poly1305_state {
-	u32 h[5];	/* accumulator, base 2^26 */
+	union {
+		u32 h[5];
+		u64 h64[3];
+	};
 };
 
 struct poly1305_desc_ctx {
-	/* key */
-	struct poly1305_key r;
-	/* finalize key */
-	u32 s[4];
-	/* accumulator */
-	struct poly1305_state h;
 	/* partial buffer */
 	u8 buf[POLY1305_BLOCK_SIZE];
 	/* bytes used in partial buffer */
 	unsigned int buflen;
-	/* r key has been set */
-	bool rset;
-	/* s key has been set */
+	/* how many keys have been set in r[] */
+	unsigned short rset;
+	/* whether s[] has been set */
 	bool sset;
+	/* finalize key */
+	u32 s[4];
+	/* accumulator */
+	struct poly1305_state h;
+	/* key */
+	union {
+		struct poly1305_key opaque_r[CONFIG_CRYPTO_LIB_POLY1305_RSIZE];
+		struct poly1305_core_key core_r;
+	};
 };
 
-/*
- * Poly1305 core functions.  These implement the ε-almost-∆-universal hash
- * function underlying the Poly1305 MAC, i.e. they don't add an encrypted nonce
- * ("s key") at the end.  They also only support block-aligned inputs.
- */
-void poly1305_core_setkey(struct poly1305_key *key, const u8 *raw_key);
-static inline void poly1305_core_init(struct poly1305_state *state)
-{
-	memset(state->h, 0, sizeof(state->h));
-}
-void poly1305_core_blocks(struct poly1305_state *state,
-			  const struct poly1305_key *key,
-			  const void *src, unsigned int nblocks);
-void poly1305_core_emit(const struct poly1305_state *state, void *dst);
+void poly1305_init_arch(struct poly1305_desc_ctx *desc, const u8 *key);
+void poly1305_init_generic(struct poly1305_desc_ctx *desc, const u8 *key);
 
-/* Crypto API helper functions for the Poly1305 MAC */
-int crypto_poly1305_init(struct shash_desc *desc);
-unsigned int crypto_poly1305_setdesckey(struct poly1305_desc_ctx *dctx,
-					const u8 *src, unsigned int srclen);
-int crypto_poly1305_update(struct shash_desc *desc,
-			   const u8 *src, unsigned int srclen);
-int crypto_poly1305_final(struct shash_desc *desc, u8 *dst);
+static inline void poly1305_init(struct poly1305_desc_ctx *desc, const u8 *key)
+{
+	if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305))
+		poly1305_init_arch(desc, key);
+	else
+		poly1305_init_generic(desc, key);
+}
+
+void poly1305_update_arch(struct poly1305_desc_ctx *desc, const u8 *src,
+			  unsigned int nbytes);
+void poly1305_update_generic(struct poly1305_desc_ctx *desc, const u8 *src,
+			     unsigned int nbytes);
+
+static inline void poly1305_update(struct poly1305_desc_ctx *desc,
+				   const u8 *src, unsigned int nbytes)
+{
+	if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305))
+		poly1305_update_arch(desc, src, nbytes);
+	else
+		poly1305_update_generic(desc, src, nbytes);
+}
+
+void poly1305_final_arch(struct poly1305_desc_ctx *desc, u8 *digest);
+void poly1305_final_generic(struct poly1305_desc_ctx *desc, u8 *digest);
+
+static inline void poly1305_final(struct poly1305_desc_ctx *desc, u8 *digest)
+{
+	if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305))
+		poly1305_final_arch(desc, digest);
+	else
+		poly1305_final_generic(desc, digest);
+}
 
 #endif
diff --git a/include/crypto/serpent.h b/include/crypto/serpent.h
index 7dd780c..75c7eaa 100644
--- a/include/crypto/serpent.h
+++ b/include/crypto/serpent.h
@@ -22,7 +22,7 @@ int __serpent_setkey(struct serpent_ctx *ctx, const u8 *key,
 		     unsigned int keylen);
 int serpent_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int keylen);
 
-void __serpent_encrypt(struct serpent_ctx *ctx, u8 *dst, const u8 *src);
-void __serpent_decrypt(struct serpent_ctx *ctx, u8 *dst, const u8 *src);
+void __serpent_encrypt(const void *ctx, u8 *dst, const u8 *src);
+void __serpent_decrypt(const void *ctx, u8 *dst, const u8 *src);
 
 #endif
diff --git a/include/crypto/sha.h b/include/crypto/sha.h
index 5c2132c..8efa780 100644
--- a/include/crypto/sha.h
+++ b/include/crypto/sha.h
@@ -123,7 +123,7 @@ extern int crypto_sha512_finup(struct shash_desc *desc, const u8 *data,
  * For details see lib/crypto/sha256.c
  */
 
-static inline int sha256_init(struct sha256_state *sctx)
+static inline void sha256_init(struct sha256_state *sctx)
 {
 	sctx->state[0] = SHA256_H0;
 	sctx->state[1] = SHA256_H1;
@@ -134,14 +134,12 @@ static inline int sha256_init(struct sha256_state *sctx)
 	sctx->state[6] = SHA256_H6;
 	sctx->state[7] = SHA256_H7;
 	sctx->count = 0;
-
-	return 0;
 }
-extern int sha256_update(struct sha256_state *sctx, const u8 *input,
-			 unsigned int length);
-extern int sha256_final(struct sha256_state *sctx, u8 *hash);
+void sha256_update(struct sha256_state *sctx, const u8 *data, unsigned int len);
+void sha256_final(struct sha256_state *sctx, u8 *out);
+void sha256(const u8 *data, unsigned int len, u8 *out);
 
-static inline int sha224_init(struct sha256_state *sctx)
+static inline void sha224_init(struct sha256_state *sctx)
 {
 	sctx->state[0] = SHA224_H0;
 	sctx->state[1] = SHA224_H1;
@@ -152,11 +150,8 @@ static inline int sha224_init(struct sha256_state *sctx)
 	sctx->state[6] = SHA224_H6;
 	sctx->state[7] = SHA224_H7;
 	sctx->count = 0;
-
-	return 0;
 }
-extern int sha224_update(struct sha256_state *sctx, const u8 *input,
-			 unsigned int length);
-extern int sha224_final(struct sha256_state *sctx, u8 *hash);
+void sha224_update(struct sha256_state *sctx, const u8 *data, unsigned int len);
+void sha224_final(struct sha256_state *sctx, u8 *out);
 
 #endif
diff --git a/include/crypto/sha256_base.h b/include/crypto/sha256_base.h
index cea60cf..6ded110 100644
--- a/include/crypto/sha256_base.h
+++ b/include/crypto/sha256_base.h
@@ -22,14 +22,16 @@ static inline int sha224_base_init(struct shash_desc *desc)
 {
 	struct sha256_state *sctx = shash_desc_ctx(desc);
 
-	return sha224_init(sctx);
+	sha224_init(sctx);
+	return 0;
 }
 
 static inline int sha256_base_init(struct shash_desc *desc)
 {
 	struct sha256_state *sctx = shash_desc_ctx(desc);
 
-	return sha256_init(sctx);
+	sha256_init(sctx);
+	return 0;
 }
 
 static inline int sha256_base_do_update(struct shash_desc *desc,
diff --git a/include/crypto/xts.h b/include/crypto/xts.h
index 75fd96f..15ae7fd 100644
--- a/include/crypto/xts.h
+++ b/include/crypto/xts.h
@@ -8,8 +8,6 @@
 
 #define XTS_BLOCK_SIZE 16
 
-#define XTS_TWEAK_CAST(x) ((void (*)(void *, u8*, const u8*))(x))
-
 static inline int xts_check_key(struct crypto_tfm *tfm,
 				const u8 *key, unsigned int keylen)
 {
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index 681cb59..1b4bf51 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -40,6 +40,7 @@ struct drm_encoder;
 struct drm_property;
 struct drm_property_blob;
 struct drm_printer;
+struct drm_panel;
 struct edid;
 struct i2c_adapter;
 
@@ -281,6 +282,10 @@ enum drm_panel_orientation {
 /* Additional Colorimetry extension added as part of CTA 861.G */
 #define DRM_MODE_COLORIMETRY_DCI_P3_RGB_D65		11
 #define DRM_MODE_COLORIMETRY_DCI_P3_RGB_THEATER		12
+/* Additional Colorimetry Options added for DP 1.4a VSC Colorimetry Format */
+#define DRM_MODE_COLORIMETRY_RGB_WIDE_FIXED		13
+#define DRM_MODE_COLORIMETRY_RGB_WIDE_FLOAT		14
+#define DRM_MODE_COLORIMETRY_BT601_YCC			15
 
 /**
  * enum drm_bus_flags - bus_flags info for &drm_display_info
@@ -1345,6 +1350,12 @@ struct drm_connector {
 	 * rev1.1 4.2.2.6
 	 */
 	bool edid_corrupt;
+	/**
+	 * @real_edid_checksum: real edid checksum for corrupted edid block.
+	 * Required in Displayport 1.4 compliance testing
+	 * rev1.1 4.2.2.6
+	 */
+	u8 real_edid_checksum;
 
 	/** @debugfs_entry: debugfs directory for this connector */
 	struct dentry *debugfs_entry;
@@ -1410,6 +1421,13 @@ struct drm_connector {
 
 	/** @hdr_sink_metadata: HDR Metadata Information read from sink */
 	struct hdr_sink_metadata hdr_sink_metadata;
+
+	/**
+	 * @panel:
+	 *
+	 * Can find the panel which connected to drm_connector.
+	 */
+	struct drm_panel *panel;
 };
 
 #define obj_to_connector(x) container_of(x, struct drm_connector, base)
@@ -1523,7 +1541,8 @@ int drm_connector_attach_scaling_mode_property(struct drm_connector *connector,
 int drm_connector_attach_vrr_capable_property(
 		struct drm_connector *connector);
 int drm_mode_create_aspect_ratio_property(struct drm_device *dev);
-int drm_mode_create_colorspace_property(struct drm_connector *connector);
+int drm_mode_create_hdmi_colorspace_property(struct drm_connector *connector);
+int drm_mode_create_dp_colorspace_property(struct drm_connector *connector);
 int drm_mode_create_content_type_property(struct drm_device *dev);
 void drm_hdmi_avi_infoframe_content_type(struct hdmi_avi_infoframe *frame,
 					 const struct drm_connector_state *conn_state);
diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h
index 8364502..02ecfdc 100644
--- a/include/drm/drm_dp_helper.h
+++ b/include/drm/drm_dp_helper.h
@@ -649,6 +649,14 @@
 # define DP_TEST_COUNT_MASK		    0xf
 
 #define DP_TEST_PHY_PATTERN                 0x248
+# define DP_TEST_PHY_PATTERN_NONE			0x0
+# define DP_TEST_PHY_PATTERN_D10_2_NO_SCRAMBLING	0x1
+# define DP_TEST_PHY_PATTERN_SYMBOL_ERR_MEASUREMENT_CNT 0x2
+# define DP_TEST_PHY_PATTERN_PRBS7			0x3
+# define DP_TEST_PHY_PATTERN_80_BIT_CUSTOM_PATTERN	0x4
+# define DP_TEST_PHY_PATTERN_CP2520_PATTERN_1		0x5
+# define DP_TEST_PHY_PATTERN_CP2520_PATTERN_2		0x6
+# define DP_TEST_PHY_PATTERN_CP2520_PATTERN_3		0x7
 #define DP_TEST_80BIT_CUSTOM_PATTERN_7_0    0x250
 #define	DP_TEST_80BIT_CUSTOM_PATTERN_15_8   0x251
 #define	DP_TEST_80BIT_CUSTOM_PATTERN_23_16  0x252
@@ -1353,6 +1361,8 @@ static inline ssize_t drm_dp_dpcd_writeb(struct drm_dp_aux *aux,
 int drm_dp_dpcd_read_link_status(struct drm_dp_aux *aux,
 				 u8 status[DP_LINK_STATUS_SIZE]);
 
+bool drm_dp_send_real_edid_checksum(struct drm_dp_aux *aux,
+		u8 real_edid_checksum);
 /*
  * DisplayPort link
  */
diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
index 8976afe..7e8ddea 100644
--- a/include/drm/drm_drv.h
+++ b/include/drm/drm_drv.h
@@ -29,6 +29,7 @@
 
 #include <linux/list.h>
 #include <linux/irqreturn.h>
+#include <linux/uuid.h>
 
 #include <drm/drm_device.h>
 
@@ -654,6 +655,15 @@ struct drm_driver {
 				struct vm_area_struct *vma);
 
 	/**
+	 * @gem_prime_get_uuid
+	 *
+	 * get_uuid hook for GEM drivers. Retrieves the virtio uuid of the
+	 * given GEM buffer.
+	 */
+	int (*gem_prime_get_uuid)(struct drm_gem_object *obj,
+				  uuid_t *uuid);
+
+	/**
 	 * @dumb_create:
 	 *
 	 * This creates a new dumb buffer in the driver's backing storage manager (GEM,
diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h
index 13cf2ae..efd0590 100644
--- a/include/drm/drm_mipi_dsi.h
+++ b/include/drm/drm_mipi_dsi.h
@@ -18,12 +18,18 @@ struct mipi_dsi_device;
 #define MIPI_DSI_MSG_REQ_ACK	BIT(0)
 /* use Low Power Mode to transmit message */
 #define MIPI_DSI_MSG_USE_LPM	BIT(1)
+/* read mipi_dsi_msg.ctrl and unicast to only that ctrls */
+#define MIPI_DSI_MSG_UNICAST	BIT(2)
+/* Stack all commands until lastcommand bit and trigger all in one go */
+#define MIPI_DSI_MSG_LASTCOMMAND BIT(3)
 
 /**
  * struct mipi_dsi_msg - read/write DSI buffer
  * @channel: virtual channel id
  * @type: payload data type
  * @flags: flags controlling this message transmission
+ * @ctrl: ctrl index to transmit on
+ * @wait_ms: duration in ms to wait after message transmission
  * @tx_len: length of @tx_buf
  * @tx_buf: data to be written
  * @rx_len: length of @rx_buf
@@ -33,6 +39,8 @@ struct mipi_dsi_msg {
 	u8 channel;
 	u8 type;
 	u16 flags;
+	u32 ctrl;
+	u32 wait_ms;
 
 	size_t tx_len;
 	const void *tx_buf;
@@ -131,6 +139,10 @@ struct mipi_dsi_host *of_find_mipi_dsi_host_by_node(struct device_node *node);
 #define MIPI_DSI_CLOCK_NON_CONTINUOUS	BIT(10)
 /* transmit data in low power */
 #define MIPI_DSI_MODE_LPM		BIT(11)
+/* disable BLLP area */
+#define MIPI_DSI_MODE_VIDEO_BLLP	BIT(12)
+/* disable EOF BLLP area */
+#define MIPI_DSI_MODE_VIDEO_EOF_BLLP	BIT(13)
 
 enum mipi_dsi_pixel_format {
 	MIPI_DSI_FMT_RGB888,
diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
index 198b9d0..3bcbe30 100644
--- a/include/drm/drm_mode_config.h
+++ b/include/drm/drm_mode_config.h
@@ -866,18 +866,6 @@ struct drm_mode_config {
 	bool prefer_shadow_fbdev;
 
 	/**
-	 * @fbdev_use_iomem:
-	 *
-	 * Set to true if framebuffer reside in iomem.
-	 * When set to true memcpy_toio() is used when copying the framebuffer in
-	 * drm_fb_helper.drm_fb_helper_dirty_blit_real().
-	 *
-	 * FIXME: This should be replaced with a per-mapping is_iomem
-	 * flag (like ttm does), and then used everywhere in fbdev code.
-	 */
-	bool fbdev_use_iomem;
-
-	/**
 	 * @quirk_addfb_prefer_xbgr_30bpp:
 	 *
 	 * Special hack for legacy ADDFB to keep nouveau userspace happy. Should
diff --git a/include/drm/drm_mode_object.h b/include/drm/drm_mode_object.h
index c34a3e8..6292fa6 100644
--- a/include/drm/drm_mode_object.h
+++ b/include/drm/drm_mode_object.h
@@ -60,7 +60,7 @@ struct drm_mode_object {
 	void (*free_cb)(struct kref *kref);
 };
 
-#define DRM_OBJECT_MAX_PROPERTY 24
+#define DRM_OBJECT_MAX_PROPERTY 64
 /**
  * struct drm_object_properties - property tracking for &drm_mode_object
  */
diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h
index 624bd15..8997244 100644
--- a/include/drm/drm_panel.h
+++ b/include/drm/drm_panel.h
@@ -27,6 +27,23 @@
 #include <linux/err.h>
 #include <linux/errno.h>
 #include <linux/list.h>
+#include <linux/notifier.h>
+
+/* A hardware display blank change occurred */
+#define DRM_PANEL_EVENT_BLANK		0x01
+/* A hardware display blank early change occurred */
+#define DRM_PANEL_EARLY_EVENT_BLANK	0x02
+
+enum {
+	/* panel: power on */
+	DRM_PANEL_BLANK_UNBLANK,
+	/* panel: power off */
+	DRM_PANEL_BLANK_POWERDOWN,
+};
+
+struct drm_panel_notifier {
+	void *data;
+};
 
 struct device_node;
 struct drm_connector;
@@ -145,6 +162,13 @@ struct drm_panel {
 	 * Panel entry in registry.
 	 */
 	struct list_head list;
+
+	/**
+	 * @nh:
+	 *
+	 * panel notifier list head
+	 */
+	struct blocking_notifier_head nh;
 };
 
 void drm_panel_init(struct drm_panel *panel);
@@ -155,6 +179,13 @@ void drm_panel_remove(struct drm_panel *panel);
 int drm_panel_attach(struct drm_panel *panel, struct drm_connector *connector);
 void drm_panel_detach(struct drm_panel *panel);
 
+int drm_panel_notifier_register(struct drm_panel *panel,
+	struct notifier_block *nb);
+int drm_panel_notifier_unregister(struct drm_panel *panel,
+	struct notifier_block *nb);
+int drm_panel_notifier_call_chain(struct drm_panel *panel,
+	unsigned long val, void *v);
+
 int drm_panel_prepare(struct drm_panel *panel);
 int drm_panel_unprepare(struct drm_panel *panel);
 
diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
index d89311b..d920bc4 100644
--- a/include/drm/drm_prime.h
+++ b/include/drm/drm_prime.h
@@ -106,5 +106,6 @@ void drm_prime_gem_destroy(struct drm_gem_object *obj, struct sg_table *sg);
 int drm_prime_sg_to_page_addr_arrays(struct sg_table *sgt, struct page **pages,
 				     dma_addr_t *addrs, int max_pages);
 
+int drm_gem_dmabuf_get_uuid(struct dma_buf *dma_buf, uuid_t *uuid);
 
 #endif /* __DRM_PRIME_H__ */
diff --git a/include/dt-bindings/clock/sun50i-a100-ccu.h b/include/dt-bindings/clock/sun50i-a100-ccu.h
new file mode 100644
index 0000000..28dc36e
--- /dev/null
+++ b/include/dt-bindings/clock/sun50i-a100-ccu.h
@@ -0,0 +1,116 @@
+/* SPDX-License-Identifier: (GPL-2.0+ or MIT) */
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ */
+
+#ifndef _DT_BINDINGS_CLK_SUN50I_A100_H_
+#define _DT_BINDINGS_CLK_SUN50I_A100_H_
+
+#define CLK_PLL_PERIPH0		3
+
+#define CLK_CPUX		24
+
+#define CLK_APB1		29
+
+#define CLK_MBUS		31
+#define CLK_DE			32
+#define CLK_BUS_DE		33
+#define CLK_G2D			34
+#define CLK_BUS_G2D		35
+#define CLK_GPU			36
+#define CLK_BUS_GPU		37
+#define CLK_CE			38
+#define CLK_BUS_CE		39
+#define CLK_VE			40
+#define CLK_BUS_VE		41
+#define CLK_BUS_DMA		42
+#define CLK_BUS_MSGBOX		43
+#define CLK_BUS_SPINLOCK	44
+#define CLK_BUS_HSTIMER		45
+#define CLK_AVS			46
+#define CLK_BUS_DBG		47
+#define CLK_BUS_PSI		48
+#define CLK_BUS_PWM		49
+#define CLK_BUS_IOMMU		50
+#define CLK_MBUS_DMA		51
+#define CLK_MBUS_VE		52
+#define CLK_MBUS_CE		53
+#define CLK_MBUS_NAND		54
+#define CLK_MBUS_CSI		55
+#define CLK_MBUS_ISP		56
+#define CLK_MBUS_G2D		57
+
+#define CLK_NAND0		59
+#define CLK_NAND1		60
+#define CLK_BUS_NAND		61
+#define CLK_MMC0		62
+#define CLK_MMC1		63
+#define CLK_MMC2		64
+#define CLK_MMC3		65
+#define CLK_BUS_MMC0		66
+#define CLK_BUS_MMC1		67
+#define CLK_BUS_MMC2		68
+#define CLK_BUS_UART0		69
+#define CLK_BUS_UART1		70
+#define CLK_BUS_UART2		71
+#define CLK_BUS_UART3		72
+#define CLK_BUS_UART4		73
+#define CLK_BUS_I2C0		74
+#define CLK_BUS_I2C1		75
+#define CLK_BUS_I2C2		76
+#define CLK_BUS_I2C3		77
+#define CLK_SPI0		78
+#define CLK_SPI1		79
+#define CLK_SPI2		80
+#define CLK_BUS_SPI0		81
+#define CLK_BUS_SPI1		82
+#define CLK_BUS_SPI2		83
+#define CLK_EMAC_25M		84
+#define CLK_BUS_EMAC		85
+#define CLK_IR_RX		86
+#define CLK_BUS_IR_RX		87
+#define CLK_IR_TX		88
+#define CLK_BUS_IR_TX		89
+#define CLK_BUS_GPADC		90
+#define CLK_BUS_THS		91
+#define CLK_I2S0		92
+#define CLK_I2S1		93
+#define CLK_I2S2		94
+#define CLK_I2S3		95
+#define CLK_BUS_I2S0		96
+#define CLK_BUS_I2S1		97
+#define CLK_BUS_I2S2		98
+#define CLK_BUS_I2S3		99
+#define CLK_SPDIF		100
+#define CLK_BUS_SPDIF		101
+#define CLK_DMIC		102
+#define CLK_BUS_DMIC		103
+#define CLK_AUDIO_DAC		104
+#define CLK_AUDIO_ADC		105
+#define CLK_AUDIO_4X		106
+#define CLK_BUS_AUDIO_CODEC	107
+#define CLK_USB_OHCI0		108
+#define CLK_USB_PHY0		109
+#define CLK_USB_OHCI1		110
+#define CLK_USB_PHY1		111
+#define CLK_BUS_OHCI0		112
+#define CLK_BUS_OHCI1		113
+#define CLK_BUS_EHCI0		114
+#define CLK_BUS_EHCI1		115
+#define CLK_BUS_OTG		116
+#define CLK_BUS_LRADC		117
+#define CLK_BUS_DPSS_TOP0	118
+#define CLK_BUS_DPSS_TOP1	119
+#define CLK_MIPI_DSI		120
+#define CLK_BUS_MIPI_DSI	121
+#define CLK_TCON_LCD		122
+#define CLK_BUS_TCON_LCD	123
+#define CLK_LEDC		124
+#define CLK_BUS_LEDC		125
+#define CLK_CSI_TOP		126
+#define CLK_CSI0_MCLK		127
+#define CLK_CSI1_MCLK		128
+#define CLK_BUS_CSI		129
+#define CLK_CSI_ISP		130
+
+#endif /* _DT_BINDINGS_CLK_SUN50I_A100_H_ */
diff --git a/include/dt-bindings/clock/sun50i-a100-r-ccu.h b/include/dt-bindings/clock/sun50i-a100-r-ccu.h
new file mode 100644
index 0000000..07312e7
--- /dev/null
+++ b/include/dt-bindings/clock/sun50i-a100-r-ccu.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ */
+
+#ifndef _DT_BINDINGS_CLK_SUN50I_A100_R_CCU_H_
+#define _DT_BINDINGS_CLK_SUN50I_A100_R_CCU_H_
+
+#define CLK_R_APB1		2
+
+#define CLK_R_APB1_TIMER	4
+#define CLK_R_APB1_TWD		5
+#define CLK_R_APB1_PWM		6
+#define CLK_R_APB1_BUS_PWM	7
+#define CLK_R_APB1_PPU		8
+#define CLK_R_APB2_UART		9
+#define CLK_R_APB2_I2C0		10
+#define CLK_R_APB2_I2C1		11
+#define CLK_R_APB1_IR		12
+#define CLK_R_APB1_BUS_IR	13
+#define CLK_R_AHB_BUS_RTC	14
+
+#endif /* _DT_BINDINGS_CLK_SUN50I_A100_R_CCU_H_ */
diff --git a/include/dt-bindings/reset/sun50i-a100-ccu.h b/include/dt-bindings/reset/sun50i-a100-ccu.h
new file mode 100644
index 0000000..55c0ada
--- /dev/null
+++ b/include/dt-bindings/reset/sun50i-a100-ccu.h
@@ -0,0 +1,68 @@
+/* SPDX-License-Identifier: (GPL-2.0+ or MIT) */
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ */
+
+#ifndef _DT_BINDINGS_RESET_SUN50I_A100_H_
+#define _DT_BINDINGS_RESET_SUN50I_A100_H_
+
+#define RST_MBUS		0
+#define RST_BUS_DE		1
+#define RST_BUS_G2D		2
+#define RST_BUS_GPU		3
+#define RST_BUS_CE		4
+#define RST_BUS_VE		5
+#define RST_BUS_DMA		6
+#define RST_BUS_MSGBOX		7
+#define RST_BUS_SPINLOCK	8
+#define RST_BUS_HSTIMER		9
+#define RST_BUS_DBG		10
+#define RST_BUS_PSI		11
+#define RST_BUS_PWM		12
+#define RST_BUS_DRAM		13
+#define RST_BUS_NAND		14
+#define RST_BUS_MMC0		15
+#define RST_BUS_MMC1		16
+#define RST_BUS_MMC2		17
+#define RST_BUS_UART0		18
+#define RST_BUS_UART1		19
+#define RST_BUS_UART2		20
+#define RST_BUS_UART3		21
+#define RST_BUS_UART4		22
+#define RST_BUS_I2C0		23
+#define RST_BUS_I2C1		24
+#define RST_BUS_I2C2		25
+#define RST_BUS_I2C3		26
+#define RST_BUS_SPI0		27
+#define RST_BUS_SPI1		28
+#define RST_BUS_SPI2		29
+#define RST_BUS_EMAC		30
+#define RST_BUS_IR_RX		31
+#define RST_BUS_IR_TX		32
+#define RST_BUS_GPADC		33
+#define RST_BUS_THS		34
+#define RST_BUS_I2S0		35
+#define RST_BUS_I2S1		36
+#define RST_BUS_I2S2		37
+#define RST_BUS_I2S3		38
+#define RST_BUS_SPDIF		39
+#define RST_BUS_DMIC		40
+#define RST_BUS_AUDIO_CODEC	41
+#define RST_USB_PHY0		42
+#define RST_USB_PHY1		43
+#define RST_BUS_OHCI0		44
+#define RST_BUS_OHCI1		45
+#define RST_BUS_EHCI0		46
+#define RST_BUS_EHCI1		47
+#define RST_BUS_OTG		48
+#define RST_BUS_LRADC		49
+#define RST_BUS_DPSS_TOP0	50
+#define RST_BUS_DPSS_TOP1	51
+#define RST_BUS_MIPI_DSI	52
+#define RST_BUS_TCON_LCD	53
+#define RST_BUS_LVDS		54
+#define RST_BUS_LEDC		55
+#define RST_BUS_CSI		56
+#define RST_BUS_CSI_ISP		57
+
+#endif /* _DT_BINDINGS_RESET_SUN50I_A100_H_ */
diff --git a/include/dt-bindings/reset/sun50i-a100-r-ccu.h b/include/dt-bindings/reset/sun50i-a100-r-ccu.h
new file mode 100644
index 0000000..737bf6f
--- /dev/null
+++ b/include/dt-bindings/reset/sun50i-a100-r-ccu.h
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: (GPL-2.0+ or MIT) */
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ */
+
+#ifndef _DT_BINDINGS_RST_SUN50I_A100_R_CCU_H_
+#define _DT_BINDINGS_RST_SUN50I_A100_R_CCU_H_
+
+#define RST_R_APB1_TIMER	0
+#define RST_R_APB1_BUS_PWM	1
+#define RST_R_APB1_PPU		2
+#define RST_R_APB2_UART		3
+#define RST_R_APB2_I2C0		4
+#define RST_R_APB2_I2C1		5
+#define RST_R_APB1_BUS_IR	6
+#define RST_R_AHB_BUS_RTC	7
+
+#endif /* _DT_BINDINGS_RST_SUN50I_A100_R_CCU_H_ */
diff --git a/include/kunit/assert.h b/include/kunit/assert.h
new file mode 100644
index 0000000..ad889b5
--- /dev/null
+++ b/include/kunit/assert.h
@@ -0,0 +1,357 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Assertion and expectation serialization API.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#ifndef _KUNIT_ASSERT_H
+#define _KUNIT_ASSERT_H
+
+#include <linux/err.h>
+#include <linux/kernel.h>
+
+struct kunit;
+struct string_stream;
+
+/**
+ * enum kunit_assert_type - Type of expectation/assertion.
+ * @KUNIT_ASSERTION: Used to denote that a kunit_assert represents an assertion.
+ * @KUNIT_EXPECTATION: Denotes that a kunit_assert represents an expectation.
+ *
+ * Used in conjunction with a &struct kunit_assert to denote whether it
+ * represents an expectation or an assertion.
+ */
+enum kunit_assert_type {
+	KUNIT_ASSERTION,
+	KUNIT_EXPECTATION,
+};
+
+/**
+ * struct kunit_assert - Data for printing a failed assertion or expectation.
+ * @test: the test case this expectation/assertion is associated with.
+ * @type: the type (either an expectation or an assertion) of this kunit_assert.
+ * @line: the source code line number that the expectation/assertion is at.
+ * @file: the file path of the source file that the expectation/assertion is in.
+ * @message: an optional message to provide additional context.
+ * @format: a function which formats the data in this kunit_assert to a string.
+ *
+ * Represents a failed expectation/assertion. Contains all the data necessary to
+ * format a string to a user reporting the failure.
+ */
+struct kunit_assert {
+	struct kunit *test;
+	enum kunit_assert_type type;
+	int line;
+	const char *file;
+	struct va_format message;
+	void (*format)(const struct kunit_assert *assert,
+		       struct string_stream *stream);
+};
+
+/**
+ * KUNIT_INIT_VA_FMT_NULL - Default initializer for struct va_format.
+ *
+ * Used inside a struct initialization block to initialize struct va_format to
+ * default values where fmt and va are null.
+ */
+#define KUNIT_INIT_VA_FMT_NULL { .fmt = NULL, .va = NULL }
+
+/**
+ * KUNIT_INIT_ASSERT_STRUCT() - Initializer for a &struct kunit_assert.
+ * @kunit: The test case that this expectation/assertion is associated with.
+ * @assert_type: The type (assertion or expectation) of this kunit_assert.
+ * @fmt: The formatting function which builds a string out of this kunit_assert.
+ *
+ * The base initializer for a &struct kunit_assert.
+ */
+#define KUNIT_INIT_ASSERT_STRUCT(kunit, assert_type, fmt) {		       \
+	.test = kunit,							       \
+	.type = assert_type,						       \
+	.file = __FILE__,						       \
+	.line = __LINE__,						       \
+	.message = KUNIT_INIT_VA_FMT_NULL,				       \
+	.format = fmt							       \
+}
+
+void kunit_base_assert_format(const struct kunit_assert *assert,
+			      struct string_stream *stream);
+
+void kunit_assert_print_msg(const struct kunit_assert *assert,
+			    struct string_stream *stream);
+
+/**
+ * struct kunit_fail_assert - Represents a plain fail expectation/assertion.
+ * @assert: The parent of this type.
+ *
+ * Represents a simple KUNIT_FAIL/KUNIT_ASSERT_FAILURE that always fails.
+ */
+struct kunit_fail_assert {
+	struct kunit_assert assert;
+};
+
+void kunit_fail_assert_format(const struct kunit_assert *assert,
+			      struct string_stream *stream);
+
+/**
+ * KUNIT_INIT_FAIL_ASSERT_STRUCT() - Initializer for &struct kunit_fail_assert.
+ * @test: The test case that this expectation/assertion is associated with.
+ * @type: The type (assertion or expectation) of this kunit_assert.
+ *
+ * Initializes a &struct kunit_fail_assert. Intended to be used in
+ * KUNIT_EXPECT_* and KUNIT_ASSERT_* macros.
+ */
+#define KUNIT_INIT_FAIL_ASSERT_STRUCT(test, type) {			       \
+	.assert = KUNIT_INIT_ASSERT_STRUCT(test,			       \
+					   type,			       \
+					   kunit_fail_assert_format)	       \
+}
+
+/**
+ * struct kunit_unary_assert - Represents a KUNIT_{EXPECT|ASSERT}_{TRUE|FALSE}
+ * @assert: The parent of this type.
+ * @condition: A string representation of a conditional expression.
+ * @expected_true: True if of type KUNIT_{EXPECT|ASSERT}_TRUE, false otherwise.
+ *
+ * Represents a simple expectation or assertion that simply asserts something is
+ * true or false. In other words, represents the expectations:
+ * KUNIT_{EXPECT|ASSERT}_{TRUE|FALSE}
+ */
+struct kunit_unary_assert {
+	struct kunit_assert assert;
+	const char *condition;
+	bool expected_true;
+};
+
+void kunit_unary_assert_format(const struct kunit_assert *assert,
+			       struct string_stream *stream);
+
+/**
+ * KUNIT_INIT_UNARY_ASSERT_STRUCT() - Initializes &struct kunit_unary_assert.
+ * @test: The test case that this expectation/assertion is associated with.
+ * @type: The type (assertion or expectation) of this kunit_assert.
+ * @cond: A string representation of the expression asserted true or false.
+ * @expect_true: True if of type KUNIT_{EXPECT|ASSERT}_TRUE, false otherwise.
+ *
+ * Initializes a &struct kunit_unary_assert. Intended to be used in
+ * KUNIT_EXPECT_* and KUNIT_ASSERT_* macros.
+ */
+#define KUNIT_INIT_UNARY_ASSERT_STRUCT(test, type, cond, expect_true) {	       \
+	.assert = KUNIT_INIT_ASSERT_STRUCT(test,			       \
+					   type,			       \
+					   kunit_unary_assert_format),	       \
+	.condition = cond,						       \
+	.expected_true = expect_true					       \
+}
+
+/**
+ * struct kunit_ptr_not_err_assert - An expectation/assertion that a pointer is
+ *	not NULL and not a -errno.
+ * @assert: The parent of this type.
+ * @text: A string representation of the expression passed to the expectation.
+ * @value: The actual evaluated pointer value of the expression.
+ *
+ * Represents an expectation/assertion that a pointer is not null and is does
+ * not contain a -errno. (See IS_ERR_OR_NULL().)
+ */
+struct kunit_ptr_not_err_assert {
+	struct kunit_assert assert;
+	const char *text;
+	const void *value;
+};
+
+void kunit_ptr_not_err_assert_format(const struct kunit_assert *assert,
+				     struct string_stream *stream);
+
+/**
+ * KUNIT_INIT_PTR_NOT_ERR_ASSERT_STRUCT() - Initializes a
+ *	&struct kunit_ptr_not_err_assert.
+ * @test: The test case that this expectation/assertion is associated with.
+ * @type: The type (assertion or expectation) of this kunit_assert.
+ * @txt: A string representation of the expression passed to the expectation.
+ * @val: The actual evaluated pointer value of the expression.
+ *
+ * Initializes a &struct kunit_ptr_not_err_assert. Intended to be used in
+ * KUNIT_EXPECT_* and KUNIT_ASSERT_* macros.
+ */
+#define KUNIT_INIT_PTR_NOT_ERR_STRUCT(test, type, txt, val) {		       \
+	.assert = KUNIT_INIT_ASSERT_STRUCT(test,			       \
+					   type,			       \
+					   kunit_ptr_not_err_assert_format),   \
+	.text = txt,							       \
+	.value = val							       \
+}
+
+/**
+ * struct kunit_binary_assert - An expectation/assertion that compares two
+ *	non-pointer values (for example, KUNIT_EXPECT_EQ(test, 1 + 1, 2)).
+ * @assert: The parent of this type.
+ * @operation: A string representation of the comparison operator (e.g. "==").
+ * @left_text: A string representation of the expression in the left slot.
+ * @left_value: The actual evaluated value of the expression in the left slot.
+ * @right_text: A string representation of the expression in the right slot.
+ * @right_value: The actual evaluated value of the expression in the right slot.
+ *
+ * Represents an expectation/assertion that compares two non-pointer values. For
+ * example, to expect that 1 + 1 == 2, you can use the expectation
+ * KUNIT_EXPECT_EQ(test, 1 + 1, 2);
+ */
+struct kunit_binary_assert {
+	struct kunit_assert assert;
+	const char *operation;
+	const char *left_text;
+	long long left_value;
+	const char *right_text;
+	long long right_value;
+};
+
+void kunit_binary_assert_format(const struct kunit_assert *assert,
+				struct string_stream *stream);
+
+/**
+ * KUNIT_INIT_BINARY_ASSERT_STRUCT() - Initializes a
+ *	&struct kunit_binary_assert.
+ * @test: The test case that this expectation/assertion is associated with.
+ * @type: The type (assertion or expectation) of this kunit_assert.
+ * @op_str: A string representation of the comparison operator (e.g. "==").
+ * @left_str: A string representation of the expression in the left slot.
+ * @left_val: The actual evaluated value of the expression in the left slot.
+ * @right_str: A string representation of the expression in the right slot.
+ * @right_val: The actual evaluated value of the expression in the right slot.
+ *
+ * Initializes a &struct kunit_binary_assert. Intended to be used in
+ * KUNIT_EXPECT_* and KUNIT_ASSERT_* macros.
+ */
+#define KUNIT_INIT_BINARY_ASSERT_STRUCT(test,				       \
+					type,				       \
+					op_str,				       \
+					left_str,			       \
+					left_val,			       \
+					right_str,			       \
+					right_val) {			       \
+	.assert = KUNIT_INIT_ASSERT_STRUCT(test,			       \
+					   type,			       \
+					   kunit_binary_assert_format),	       \
+	.operation = op_str,						       \
+	.left_text = left_str,						       \
+	.left_value = left_val,						       \
+	.right_text = right_str,					       \
+	.right_value = right_val					       \
+}
+
+/**
+ * struct kunit_binary_ptr_assert - An expectation/assertion that compares two
+ *	pointer values (for example, KUNIT_EXPECT_PTR_EQ(test, foo, bar)).
+ * @assert: The parent of this type.
+ * @operation: A string representation of the comparison operator (e.g. "==").
+ * @left_text: A string representation of the expression in the left slot.
+ * @left_value: The actual evaluated value of the expression in the left slot.
+ * @right_text: A string representation of the expression in the right slot.
+ * @right_value: The actual evaluated value of the expression in the right slot.
+ *
+ * Represents an expectation/assertion that compares two pointer values. For
+ * example, to expect that foo and bar point to the same thing, you can use the
+ * expectation KUNIT_EXPECT_PTR_EQ(test, foo, bar);
+ */
+struct kunit_binary_ptr_assert {
+	struct kunit_assert assert;
+	const char *operation;
+	const char *left_text;
+	const void *left_value;
+	const char *right_text;
+	const void *right_value;
+};
+
+void kunit_binary_ptr_assert_format(const struct kunit_assert *assert,
+				    struct string_stream *stream);
+
+/**
+ * KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT() - Initializes a
+ *	&struct kunit_binary_ptr_assert.
+ * @test: The test case that this expectation/assertion is associated with.
+ * @type: The type (assertion or expectation) of this kunit_assert.
+ * @op_str: A string representation of the comparison operator (e.g. "==").
+ * @left_str: A string representation of the expression in the left slot.
+ * @left_val: The actual evaluated value of the expression in the left slot.
+ * @right_str: A string representation of the expression in the right slot.
+ * @right_val: The actual evaluated value of the expression in the right slot.
+ *
+ * Initializes a &struct kunit_binary_ptr_assert. Intended to be used in
+ * KUNIT_EXPECT_* and KUNIT_ASSERT_* macros.
+ */
+#define KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT(test,			       \
+					    type,			       \
+					    op_str,			       \
+					    left_str,			       \
+					    left_val,			       \
+					    right_str,			       \
+					    right_val) {		       \
+	.assert = KUNIT_INIT_ASSERT_STRUCT(test,			       \
+					   type,			       \
+					   kunit_binary_ptr_assert_format),    \
+	.operation = op_str,						       \
+	.left_text = left_str,						       \
+	.left_value = left_val,						       \
+	.right_text = right_str,					       \
+	.right_value = right_val					       \
+}
+
+/**
+ * struct kunit_binary_str_assert - An expectation/assertion that compares two
+ *	string values (for example, KUNIT_EXPECT_STREQ(test, foo, "bar")).
+ * @assert: The parent of this type.
+ * @operation: A string representation of the comparison operator (e.g. "==").
+ * @left_text: A string representation of the expression in the left slot.
+ * @left_value: The actual evaluated value of the expression in the left slot.
+ * @right_text: A string representation of the expression in the right slot.
+ * @right_value: The actual evaluated value of the expression in the right slot.
+ *
+ * Represents an expectation/assertion that compares two string values. For
+ * example, to expect that the string in foo is equal to "bar", you can use the
+ * expectation KUNIT_EXPECT_STREQ(test, foo, "bar");
+ */
+struct kunit_binary_str_assert {
+	struct kunit_assert assert;
+	const char *operation;
+	const char *left_text;
+	const char *left_value;
+	const char *right_text;
+	const char *right_value;
+};
+
+void kunit_binary_str_assert_format(const struct kunit_assert *assert,
+				    struct string_stream *stream);
+
+/**
+ * KUNIT_INIT_BINARY_STR_ASSERT_STRUCT() - Initializes a
+ *	&struct kunit_binary_str_assert.
+ * @test: The test case that this expectation/assertion is associated with.
+ * @type: The type (assertion or expectation) of this kunit_assert.
+ * @op_str: A string representation of the comparison operator (e.g. "==").
+ * @left_str: A string representation of the expression in the left slot.
+ * @left_val: The actual evaluated value of the expression in the left slot.
+ * @right_str: A string representation of the expression in the right slot.
+ * @right_val: The actual evaluated value of the expression in the right slot.
+ *
+ * Initializes a &struct kunit_binary_str_assert. Intended to be used in
+ * KUNIT_EXPECT_* and KUNIT_ASSERT_* macros.
+ */
+#define KUNIT_INIT_BINARY_STR_ASSERT_STRUCT(test,			       \
+					    type,			       \
+					    op_str,			       \
+					    left_str,			       \
+					    left_val,			       \
+					    right_str,			       \
+					    right_val) {		       \
+	.assert = KUNIT_INIT_ASSERT_STRUCT(test,			       \
+					   type,			       \
+					   kunit_binary_str_assert_format),    \
+	.operation = op_str,						       \
+	.left_text = left_str,						       \
+	.left_value = left_val,						       \
+	.right_text = right_str,					       \
+	.right_value = right_val					       \
+}
+
+#endif /*  _KUNIT_ASSERT_H */
diff --git a/include/kunit/test.h b/include/kunit/test.h
new file mode 100644
index 0000000..f7b2ed4c
--- /dev/null
+++ b/include/kunit/test.h
@@ -0,0 +1,1545 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Base unit test (KUnit) API.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#ifndef _KUNIT_TEST_H
+#define _KUNIT_TEST_H
+
+#include <kunit/assert.h>
+#include <kunit/try-catch.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <linux/types.h>
+
+struct kunit_resource;
+
+typedef int (*kunit_resource_init_t)(struct kunit_resource *, void *);
+typedef void (*kunit_resource_free_t)(struct kunit_resource *);
+
+/**
+ * struct kunit_resource - represents a *test managed resource*
+ * @allocation: for the user to store arbitrary data.
+ * @free: a user supplied function to free the resource. Populated by
+ * kunit_alloc_resource().
+ *
+ * Represents a *test managed resource*, a resource which will automatically be
+ * cleaned up at the end of a test case.
+ *
+ * Example:
+ *
+ * .. code-block:: c
+ *
+ *	struct kunit_kmalloc_params {
+ *		size_t size;
+ *		gfp_t gfp;
+ *	};
+ *
+ *	static int kunit_kmalloc_init(struct kunit_resource *res, void *context)
+ *	{
+ *		struct kunit_kmalloc_params *params = context;
+ *		res->allocation = kmalloc(params->size, params->gfp);
+ *
+ *		if (!res->allocation)
+ *			return -ENOMEM;
+ *
+ *		return 0;
+ *	}
+ *
+ *	static void kunit_kmalloc_free(struct kunit_resource *res)
+ *	{
+ *		kfree(res->allocation);
+ *	}
+ *
+ *	void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp)
+ *	{
+ *		struct kunit_kmalloc_params params;
+ *		struct kunit_resource *res;
+ *
+ *		params.size = size;
+ *		params.gfp = gfp;
+ *
+ *		res = kunit_alloc_resource(test, kunit_kmalloc_init,
+ *			kunit_kmalloc_free, &params);
+ *		if (res)
+ *			return res->allocation;
+ *
+ *		return NULL;
+ *	}
+ */
+struct kunit_resource {
+	void *allocation;
+	kunit_resource_free_t free;
+
+	/* private: internal use only. */
+	struct list_head node;
+};
+
+struct kunit;
+
+/* Size of log associated with test. */
+#define KUNIT_LOG_SIZE	512
+
+/**
+ * struct kunit_case - represents an individual test case.
+ *
+ * @run_case: the function representing the actual test case.
+ * @name:     the name of the test case.
+ *
+ * A test case is a function with the signature,
+ * ``void (*)(struct kunit *)``
+ * that makes expectations and assertions (see KUNIT_EXPECT_TRUE() and
+ * KUNIT_ASSERT_TRUE()) about code under test. Each test case is associated
+ * with a &struct kunit_suite and will be run after the suite's init
+ * function and followed by the suite's exit function.
+ *
+ * A test case should be static and should only be created with the
+ * KUNIT_CASE() macro; additionally, every array of test cases should be
+ * terminated with an empty test case.
+ *
+ * Example:
+ *
+ * .. code-block:: c
+ *
+ *	void add_test_basic(struct kunit *test)
+ *	{
+ *		KUNIT_EXPECT_EQ(test, 1, add(1, 0));
+ *		KUNIT_EXPECT_EQ(test, 2, add(1, 1));
+ *		KUNIT_EXPECT_EQ(test, 0, add(-1, 1));
+ *		KUNIT_EXPECT_EQ(test, INT_MAX, add(0, INT_MAX));
+ *		KUNIT_EXPECT_EQ(test, -1, add(INT_MAX, INT_MIN));
+ *	}
+ *
+ *	static struct kunit_case example_test_cases[] = {
+ *		KUNIT_CASE(add_test_basic),
+ *		{}
+ *	};
+ *
+ */
+struct kunit_case {
+	void (*run_case)(struct kunit *test);
+	const char *name;
+
+	/* private: internal use only. */
+	bool success;
+	char *log;
+};
+
+static inline char *kunit_status_to_string(bool status)
+{
+	return status ? "ok" : "not ok";
+}
+
+/**
+ * KUNIT_CASE - A helper for creating a &struct kunit_case
+ *
+ * @test_name: a reference to a test case function.
+ *
+ * Takes a symbol for a function representing a test case and creates a
+ * &struct kunit_case object from it. See the documentation for
+ * &struct kunit_case for an example on how to use it.
+ */
+#define KUNIT_CASE(test_name) { .run_case = test_name, .name = #test_name }
+
+/**
+ * struct kunit_suite - describes a related collection of &struct kunit_case
+ *
+ * @name:	the name of the test. Purely informational.
+ * @init:	called before every test case.
+ * @exit:	called after every test case.
+ * @test_cases:	a null terminated array of test cases.
+ *
+ * A kunit_suite is a collection of related &struct kunit_case s, such that
+ * @init is called before every test case and @exit is called after every
+ * test case, similar to the notion of a *test fixture* or a *test class*
+ * in other unit testing frameworks like JUnit or Googletest.
+ *
+ * Every &struct kunit_case must be associated with a kunit_suite for KUnit
+ * to run it.
+ */
+struct kunit_suite {
+	const char name[256];
+	int (*init)(struct kunit *test);
+	void (*exit)(struct kunit *test);
+	struct kunit_case *test_cases;
+
+	/* private - internal use only */
+	struct dentry *debugfs;
+	char *log;
+};
+
+/**
+ * struct kunit - represents a running instance of a test.
+ *
+ * @priv: for user to store arbitrary data. Commonly used to pass data
+ *	  created in the init function (see &struct kunit_suite).
+ *
+ * Used to store information about the current context under which the test
+ * is running. Most of this data is private and should only be accessed
+ * indirectly via public functions; the one exception is @priv which can be
+ * used by the test writer to store arbitrary data.
+ */
+struct kunit {
+	void *priv;
+
+	/* private: internal use only. */
+	const char *name; /* Read only after initialization! */
+	char *log; /* Points at case log after initialization */
+	struct kunit_try_catch try_catch;
+	/*
+	 * success starts as true, and may only be set to false during a
+	 * test case; thus, it is safe to update this across multiple
+	 * threads using WRITE_ONCE; however, as a consequence, it may only
+	 * be read after the test case finishes once all threads associated
+	 * with the test case have terminated.
+	 */
+	bool success; /* Read only after test_case finishes! */
+	spinlock_t lock; /* Guards all mutable test state. */
+	/*
+	 * Because resources is a list that may be updated multiple times (with
+	 * new resources) from any thread associated with a test case, we must
+	 * protect it with some type of lock.
+	 */
+	struct list_head resources; /* Protected by lock. */
+};
+
+void kunit_init_test(struct kunit *test, const char *name, char *log);
+
+int kunit_run_tests(struct kunit_suite *suite);
+
+size_t kunit_suite_num_test_cases(struct kunit_suite *suite);
+
+unsigned int kunit_test_case_num(struct kunit_suite *suite,
+				 struct kunit_case *test_case);
+
+int __kunit_test_suites_init(struct kunit_suite **suites);
+
+void __kunit_test_suites_exit(struct kunit_suite **suites);
+
+/**
+ * kunit_test_suites() - used to register one or more &struct kunit_suite
+ *			 with KUnit.
+ *
+ * @suites: a statically allocated list of &struct kunit_suite.
+ *
+ * Registers @suites with the test framework. See &struct kunit_suite for
+ * more information.
+ *
+ * When builtin,  KUnit tests are all run as late_initcalls; this means
+ * that they cannot test anything where tests must run at a different init
+ * phase. One significant restriction resulting from this is that KUnit
+ * cannot reliably test anything that is initialize in the late_init phase;
+ * another is that KUnit is useless to test things that need to be run in
+ * an earlier init phase.
+ *
+ * An alternative is to build the tests as a module.  Because modules
+ * do not support multiple late_initcall()s, we need to initialize an
+ * array of suites for a module.
+ *
+ * TODO(brendanhiggins@google.com): Don't run all KUnit tests as
+ * late_initcalls.  I have some future work planned to dispatch all KUnit
+ * tests from the same place, and at the very least to do so after
+ * everything else is definitely initialized.
+ */
+#define kunit_test_suites(...)						\
+	static struct kunit_suite *suites[] = { __VA_ARGS__, NULL};	\
+	static int kunit_test_suites_init(void)				\
+	{								\
+		return __kunit_test_suites_init(suites);		\
+	}								\
+	late_initcall(kunit_test_suites_init);				\
+	static void __exit kunit_test_suites_exit(void)			\
+	{								\
+		return __kunit_test_suites_exit(suites);		\
+	}								\
+	module_exit(kunit_test_suites_exit)
+
+#define kunit_test_suite(suite)	kunit_test_suites(&suite)
+
+#define kunit_suite_for_each_test_case(suite, test_case)		\
+	for (test_case = suite->test_cases; test_case->run_case; test_case++)
+
+bool kunit_suite_has_succeeded(struct kunit_suite *suite);
+
+/*
+ * Like kunit_alloc_resource() below, but returns the struct kunit_resource
+ * object that contains the allocation. This is mostly for testing purposes.
+ */
+struct kunit_resource *kunit_alloc_and_get_resource(struct kunit *test,
+						    kunit_resource_init_t init,
+						    kunit_resource_free_t free,
+						    gfp_t internal_gfp,
+						    void *context);
+
+/**
+ * kunit_alloc_resource() - Allocates a *test managed resource*.
+ * @test: The test context object.
+ * @init: a user supplied function to initialize the resource.
+ * @free: a user supplied function to free the resource.
+ * @internal_gfp: gfp to use for internal allocations, if unsure, use GFP_KERNEL
+ * @context: for the user to pass in arbitrary data to the init function.
+ *
+ * Allocates a *test managed resource*, a resource which will automatically be
+ * cleaned up at the end of a test case. See &struct kunit_resource for an
+ * example.
+ *
+ * NOTE: KUnit needs to allocate memory for each kunit_resource object. You must
+ * specify an @internal_gfp that is compatible with the use context of your
+ * resource.
+ */
+static inline void *kunit_alloc_resource(struct kunit *test,
+					 kunit_resource_init_t init,
+					 kunit_resource_free_t free,
+					 gfp_t internal_gfp,
+					 void *context)
+{
+	struct kunit_resource *res;
+
+	res = kunit_alloc_and_get_resource(test, init, free, internal_gfp,
+					   context);
+
+	if (res)
+		return res->allocation;
+
+	return NULL;
+}
+
+typedef bool (*kunit_resource_match_t)(struct kunit *test,
+				       const void *res,
+				       void *match_data);
+
+/**
+ * kunit_resource_instance_match() - Match a resource with the same instance.
+ * @test: Test case to which the resource belongs.
+ * @res: The data stored in kunit_resource->allocation.
+ * @match_data: The resource pointer to match against.
+ *
+ * An instance of kunit_resource_match_t that matches a resource whose
+ * allocation matches @match_data.
+ */
+static inline bool kunit_resource_instance_match(struct kunit *test,
+						 const void *res,
+						 void *match_data)
+{
+	return res == match_data;
+}
+
+/**
+ * kunit_resource_destroy() - Find a kunit_resource and destroy it.
+ * @test: Test case to which the resource belongs.
+ * @match: Match function. Returns whether a given resource matches @match_data.
+ * @free: Must match free on the kunit_resource to free.
+ * @match_data: Data passed into @match.
+ *
+ * Free the latest kunit_resource of @test for which @free matches the
+ * kunit_resource_free_t associated with the resource and for which @match
+ * returns true.
+ *
+ * RETURNS:
+ * 0 if kunit_resource is found and freed, -ENOENT if not found.
+ */
+int kunit_resource_destroy(struct kunit *test,
+			   kunit_resource_match_t match,
+			   kunit_resource_free_t free,
+			   void *match_data);
+
+/**
+ * kunit_kmalloc() - Like kmalloc() except the allocation is *test managed*.
+ * @test: The test context object.
+ * @size: The size in bytes of the desired memory.
+ * @gfp: flags passed to underlying kmalloc().
+ *
+ * Just like `kmalloc(...)`, except the allocation is managed by the test case
+ * and is automatically cleaned up after the test case concludes. See &struct
+ * kunit_resource for more information.
+ */
+void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp);
+
+/**
+ * kunit_kfree() - Like kfree except for allocations managed by KUnit.
+ * @test: The test case to which the resource belongs.
+ * @ptr: The memory allocation to free.
+ */
+void kunit_kfree(struct kunit *test, const void *ptr);
+
+/**
+ * kunit_kzalloc() - Just like kunit_kmalloc(), but zeroes the allocation.
+ * @test: The test context object.
+ * @size: The size in bytes of the desired memory.
+ * @gfp: flags passed to underlying kmalloc().
+ *
+ * See kzalloc() and kunit_kmalloc() for more information.
+ */
+static inline void *kunit_kzalloc(struct kunit *test, size_t size, gfp_t gfp)
+{
+	return kunit_kmalloc(test, size, gfp | __GFP_ZERO);
+}
+
+void kunit_cleanup(struct kunit *test);
+
+void kunit_log_append(char *log, const char *fmt, ...);
+
+/*
+ * printk and log to per-test or per-suite log buffer.  Logging only done
+ * if CONFIG_KUNIT_DEBUGFS is 'y'; if it is 'n', no log is allocated/used.
+ */
+#define kunit_log(lvl, test_or_suite, fmt, ...)				\
+	do {								\
+		printk(lvl fmt, ##__VA_ARGS__);				\
+		kunit_log_append((test_or_suite)->log,	fmt "\n",	\
+				 ##__VA_ARGS__);			\
+	} while (0)
+
+#define kunit_printk(lvl, test, fmt, ...)				\
+	kunit_log(lvl, test, "\t# %s: " fmt, (test)->name, ##__VA_ARGS__)
+
+/**
+ * kunit_info() - Prints an INFO level message associated with @test.
+ *
+ * @test: The test context object.
+ * @fmt:  A printk() style format string.
+ *
+ * Prints an info level message associated with the test suite being run.
+ * Takes a variable number of format parameters just like printk().
+ */
+#define kunit_info(test, fmt, ...) \
+	kunit_printk(KERN_INFO, test, fmt, ##__VA_ARGS__)
+
+/**
+ * kunit_warn() - Prints a WARN level message associated with @test.
+ *
+ * @test: The test context object.
+ * @fmt:  A printk() style format string.
+ *
+ * Prints a warning level message.
+ */
+#define kunit_warn(test, fmt, ...) \
+	kunit_printk(KERN_WARNING, test, fmt, ##__VA_ARGS__)
+
+/**
+ * kunit_err() - Prints an ERROR level message associated with @test.
+ *
+ * @test: The test context object.
+ * @fmt:  A printk() style format string.
+ *
+ * Prints an error level message.
+ */
+#define kunit_err(test, fmt, ...) \
+	kunit_printk(KERN_ERR, test, fmt, ##__VA_ARGS__)
+
+/**
+ * KUNIT_SUCCEED() - A no-op expectation. Only exists for code clarity.
+ * @test: The test context object.
+ *
+ * The opposite of KUNIT_FAIL(), it is an expectation that cannot fail. In other
+ * words, it does nothing and only exists for code clarity. See
+ * KUNIT_EXPECT_TRUE() for more information.
+ */
+#define KUNIT_SUCCEED(test) do {} while (0)
+
+void kunit_do_assertion(struct kunit *test,
+			struct kunit_assert *assert,
+			bool pass,
+			const char *fmt, ...);
+
+#define KUNIT_ASSERTION(test, pass, assert_class, INITIALIZER, fmt, ...) do {  \
+	struct assert_class __assertion = INITIALIZER;			       \
+	kunit_do_assertion(test,					       \
+			   &__assertion.assert,				       \
+			   pass,					       \
+			   fmt,						       \
+			   ##__VA_ARGS__);				       \
+} while (0)
+
+
+#define KUNIT_FAIL_ASSERTION(test, assert_type, fmt, ...)		       \
+	KUNIT_ASSERTION(test,						       \
+			false,						       \
+			kunit_fail_assert,				       \
+			KUNIT_INIT_FAIL_ASSERT_STRUCT(test, assert_type),      \
+			fmt,						       \
+			##__VA_ARGS__)
+
+/**
+ * KUNIT_FAIL() - Always causes a test to fail when evaluated.
+ * @test: The test context object.
+ * @fmt: an informational message to be printed when the assertion is made.
+ * @...: string format arguments.
+ *
+ * The opposite of KUNIT_SUCCEED(), it is an expectation that always fails. In
+ * other words, it always results in a failed expectation, and consequently
+ * always causes the test case to fail when evaluated. See KUNIT_EXPECT_TRUE()
+ * for more information.
+ */
+#define KUNIT_FAIL(test, fmt, ...)					       \
+	KUNIT_FAIL_ASSERTION(test,					       \
+			     KUNIT_EXPECTATION,				       \
+			     fmt,					       \
+			     ##__VA_ARGS__)
+
+#define KUNIT_UNARY_ASSERTION(test,					       \
+			      assert_type,				       \
+			      condition,				       \
+			      expected_true,				       \
+			      fmt,					       \
+			      ...)					       \
+	KUNIT_ASSERTION(test,						       \
+			!!(condition) == !!expected_true,		       \
+			kunit_unary_assert,				       \
+			KUNIT_INIT_UNARY_ASSERT_STRUCT(test,		       \
+						       assert_type,	       \
+						       #condition,	       \
+						       expected_true),	       \
+			fmt,						       \
+			##__VA_ARGS__)
+
+#define KUNIT_TRUE_MSG_ASSERTION(test, assert_type, condition, fmt, ...)       \
+	KUNIT_UNARY_ASSERTION(test,					       \
+			      assert_type,				       \
+			      condition,				       \
+			      true,					       \
+			      fmt,					       \
+			      ##__VA_ARGS__)
+
+#define KUNIT_TRUE_ASSERTION(test, assert_type, condition) \
+	KUNIT_TRUE_MSG_ASSERTION(test, assert_type, condition, NULL)
+
+#define KUNIT_FALSE_MSG_ASSERTION(test, assert_type, condition, fmt, ...)      \
+	KUNIT_UNARY_ASSERTION(test,					       \
+			      assert_type,				       \
+			      condition,				       \
+			      false,					       \
+			      fmt,					       \
+			      ##__VA_ARGS__)
+
+#define KUNIT_FALSE_ASSERTION(test, assert_type, condition) \
+	KUNIT_FALSE_MSG_ASSERTION(test, assert_type, condition, NULL)
+
+/*
+ * A factory macro for defining the assertions and expectations for the basic
+ * comparisons defined for the built in types.
+ *
+ * Unfortunately, there is no common type that all types can be promoted to for
+ * which all the binary operators behave the same way as for the actual types
+ * (for example, there is no type that long long and unsigned long long can
+ * both be cast to where the comparison result is preserved for all values). So
+ * the best we can do is do the comparison in the original types and then coerce
+ * everything to long long for printing; this way, the comparison behaves
+ * correctly and the printed out value usually makes sense without
+ * interpretation, but can always be interpreted to figure out the actual
+ * value.
+ */
+#define KUNIT_BASE_BINARY_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left,				       \
+				    op,					       \
+				    right,				       \
+				    fmt,				       \
+				    ...)				       \
+do {									       \
+	typeof(left) __left = (left);					       \
+	typeof(right) __right = (right);				       \
+	((void)__typecheck(__left, __right));				       \
+									       \
+	KUNIT_ASSERTION(test,						       \
+			__left op __right,				       \
+			assert_class,					       \
+			ASSERT_CLASS_INIT(test,				       \
+					  assert_type,			       \
+					  #op,				       \
+					  #left,			       \
+					  __left,			       \
+					  #right,			       \
+					  __right),			       \
+			fmt,						       \
+			##__VA_ARGS__);					       \
+} while (0)
+
+#define KUNIT_BASE_EQ_MSG_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ...)				       \
+	KUNIT_BASE_BINARY_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left, ==, right,			       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BASE_NE_MSG_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ...)				       \
+	KUNIT_BASE_BINARY_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left, !=, right,			       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BASE_LT_MSG_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ...)				       \
+	KUNIT_BASE_BINARY_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left, <, right,			       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BASE_LE_MSG_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ...)				       \
+	KUNIT_BASE_BINARY_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left, <=, right,			       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BASE_GT_MSG_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ...)				       \
+	KUNIT_BASE_BINARY_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left, >, right,			       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BASE_GE_MSG_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ...)				       \
+	KUNIT_BASE_BINARY_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left, >=, right,			       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_EQ_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
+	KUNIT_BASE_EQ_MSG_ASSERTION(test,				       \
+				    kunit_binary_assert,		       \
+				    KUNIT_INIT_BINARY_ASSERT_STRUCT,	       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_EQ_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_EQ_MSG_ASSERTION(test,				       \
+				      assert_type,			       \
+				      left,				       \
+				      right,				       \
+				      NULL)
+
+#define KUNIT_BINARY_PTR_EQ_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ...)				       \
+	KUNIT_BASE_EQ_MSG_ASSERTION(test,				       \
+				    kunit_binary_ptr_assert,		       \
+				    KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT,       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_PTR_EQ_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_PTR_EQ_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  NULL)
+
+#define KUNIT_BINARY_NE_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
+	KUNIT_BASE_NE_MSG_ASSERTION(test,				       \
+				    kunit_binary_assert,		       \
+				    KUNIT_INIT_BINARY_ASSERT_STRUCT,	       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_NE_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_NE_MSG_ASSERTION(test,				       \
+				      assert_type,			       \
+				      left,				       \
+				      right,				       \
+				      NULL)
+
+#define KUNIT_BINARY_PTR_NE_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ...)				       \
+	KUNIT_BASE_NE_MSG_ASSERTION(test,				       \
+				    kunit_binary_ptr_assert,		       \
+				    KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT,       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_PTR_NE_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_PTR_NE_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  NULL)
+
+#define KUNIT_BINARY_LT_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
+	KUNIT_BASE_LT_MSG_ASSERTION(test,				       \
+				    kunit_binary_assert,		       \
+				    KUNIT_INIT_BINARY_ASSERT_STRUCT,	       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_LT_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_LT_MSG_ASSERTION(test,				       \
+				      assert_type,			       \
+				      left,				       \
+				      right,				       \
+				      NULL)
+
+#define KUNIT_BINARY_PTR_LT_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ...)				       \
+	KUNIT_BASE_LT_MSG_ASSERTION(test,				       \
+				    kunit_binary_ptr_assert,		       \
+				    KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT,       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_PTR_LT_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_PTR_LT_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  NULL)
+
+#define KUNIT_BINARY_LE_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
+	KUNIT_BASE_LE_MSG_ASSERTION(test,				       \
+				    kunit_binary_assert,		       \
+				    KUNIT_INIT_BINARY_ASSERT_STRUCT,	       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_LE_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_LE_MSG_ASSERTION(test,				       \
+				      assert_type,			       \
+				      left,				       \
+				      right,				       \
+				      NULL)
+
+#define KUNIT_BINARY_PTR_LE_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ...)				       \
+	KUNIT_BASE_LE_MSG_ASSERTION(test,				       \
+				    kunit_binary_ptr_assert,		       \
+				    KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT,       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_PTR_LE_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_PTR_LE_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  NULL)
+
+#define KUNIT_BINARY_GT_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
+	KUNIT_BASE_GT_MSG_ASSERTION(test,				       \
+				    kunit_binary_assert,		       \
+				    KUNIT_INIT_BINARY_ASSERT_STRUCT,	       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_GT_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_GT_MSG_ASSERTION(test,				       \
+				      assert_type,			       \
+				      left,				       \
+				      right,				       \
+				      NULL)
+
+#define KUNIT_BINARY_PTR_GT_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ...)				       \
+	KUNIT_BASE_GT_MSG_ASSERTION(test,				       \
+				    kunit_binary_ptr_assert,		       \
+				    KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT,       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_PTR_GT_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_PTR_GT_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  NULL)
+
+#define KUNIT_BINARY_GE_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
+	KUNIT_BASE_GE_MSG_ASSERTION(test,				       \
+				    kunit_binary_assert,		       \
+				    KUNIT_INIT_BINARY_ASSERT_STRUCT,	       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_GE_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_GE_MSG_ASSERTION(test,				       \
+				      assert_type,			       \
+				      left,				       \
+				      right,				       \
+				      NULL)
+
+#define KUNIT_BINARY_PTR_GE_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ...)				       \
+	KUNIT_BASE_GE_MSG_ASSERTION(test,				       \
+				    kunit_binary_ptr_assert,		       \
+				    KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT,       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_PTR_GE_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_PTR_GE_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  NULL)
+
+#define KUNIT_BINARY_STR_ASSERTION(test,				       \
+				   assert_type,				       \
+				   left,				       \
+				   op,					       \
+				   right,				       \
+				   fmt,					       \
+				   ...)					       \
+do {									       \
+	typeof(left) __left = (left);					       \
+	typeof(right) __right = (right);				       \
+									       \
+	KUNIT_ASSERTION(test,						       \
+			strcmp(__left, __right) op 0,			       \
+			kunit_binary_str_assert,			       \
+			KUNIT_INIT_BINARY_ASSERT_STRUCT(test,		       \
+							assert_type,	       \
+							#op,		       \
+							#left,		       \
+							__left,		       \
+							#right,		       \
+							__right),	       \
+			fmt,						       \
+			##__VA_ARGS__);					       \
+} while (0)
+
+#define KUNIT_BINARY_STR_EQ_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ...)				       \
+	KUNIT_BINARY_STR_ASSERTION(test,				       \
+				   assert_type,				       \
+				   left, ==, right,			       \
+				   fmt,					       \
+				   ##__VA_ARGS__)
+
+#define KUNIT_BINARY_STR_EQ_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_STR_EQ_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  NULL)
+
+#define KUNIT_BINARY_STR_NE_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ...)				       \
+	KUNIT_BINARY_STR_ASSERTION(test,				       \
+				   assert_type,				       \
+				   left, !=, right,			       \
+				   fmt,					       \
+				   ##__VA_ARGS__)
+
+#define KUNIT_BINARY_STR_NE_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_STR_NE_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  NULL)
+
+#define KUNIT_PTR_NOT_ERR_OR_NULL_MSG_ASSERTION(test,			       \
+						assert_type,		       \
+						ptr,			       \
+						fmt,			       \
+						...)			       \
+do {									       \
+	typeof(ptr) __ptr = (ptr);					       \
+									       \
+	KUNIT_ASSERTION(test,						       \
+			!IS_ERR_OR_NULL(__ptr),				       \
+			kunit_ptr_not_err_assert,			       \
+			KUNIT_INIT_PTR_NOT_ERR_STRUCT(test,		       \
+						      assert_type,	       \
+						      #ptr,		       \
+						      __ptr),		       \
+			fmt,						       \
+			##__VA_ARGS__);					       \
+} while (0)
+
+#define KUNIT_PTR_NOT_ERR_OR_NULL_ASSERTION(test, assert_type, ptr)	       \
+	KUNIT_PTR_NOT_ERR_OR_NULL_MSG_ASSERTION(test,			       \
+						assert_type,		       \
+						ptr,			       \
+						NULL)
+
+/**
+ * KUNIT_EXPECT_TRUE() - Causes a test failure when the expression is not true.
+ * @test: The test context object.
+ * @condition: an arbitrary boolean expression. The test fails when this does
+ * not evaluate to true.
+ *
+ * This and expectations of the form `KUNIT_EXPECT_*` will cause the test case
+ * to fail when the specified condition is not met; however, it will not prevent
+ * the test case from continuing to run; this is otherwise known as an
+ * *expectation failure*.
+ */
+#define KUNIT_EXPECT_TRUE(test, condition) \
+	KUNIT_TRUE_ASSERTION(test, KUNIT_EXPECTATION, condition)
+
+#define KUNIT_EXPECT_TRUE_MSG(test, condition, fmt, ...)		       \
+	KUNIT_TRUE_MSG_ASSERTION(test,					       \
+				 KUNIT_EXPECTATION,			       \
+				 condition,				       \
+				 fmt,					       \
+				 ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_FALSE() - Makes a test failure when the expression is not false.
+ * @test: The test context object.
+ * @condition: an arbitrary boolean expression. The test fails when this does
+ * not evaluate to false.
+ *
+ * Sets an expectation that @condition evaluates to false. See
+ * KUNIT_EXPECT_TRUE() for more information.
+ */
+#define KUNIT_EXPECT_FALSE(test, condition) \
+	KUNIT_FALSE_ASSERTION(test, KUNIT_EXPECTATION, condition)
+
+#define KUNIT_EXPECT_FALSE_MSG(test, condition, fmt, ...)		       \
+	KUNIT_FALSE_MSG_ASSERTION(test,					       \
+				  KUNIT_EXPECTATION,			       \
+				  condition,				       \
+				  fmt,					       \
+				  ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_EQ() - Sets an expectation that @left and @right are equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an expectation that the values that @left and @right evaluate to are
+ * equal. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, (@left) == (@right)). See KUNIT_EXPECT_TRUE() for
+ * more information.
+ */
+#define KUNIT_EXPECT_EQ(test, left, right) \
+	KUNIT_BINARY_EQ_ASSERTION(test, KUNIT_EXPECTATION, left, right)
+
+#define KUNIT_EXPECT_EQ_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_EQ_MSG_ASSERTION(test,				       \
+				      KUNIT_EXPECTATION,		       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_PTR_EQ() - Expects that pointers @left and @right are equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a pointer.
+ * @right: an arbitrary expression that evaluates to a pointer.
+ *
+ * Sets an expectation that the values that @left and @right evaluate to are
+ * equal. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, (@left) == (@right)). See KUNIT_EXPECT_TRUE() for
+ * more information.
+ */
+#define KUNIT_EXPECT_PTR_EQ(test, left, right)				       \
+	KUNIT_BINARY_PTR_EQ_ASSERTION(test,				       \
+				      KUNIT_EXPECTATION,		       \
+				      left,				       \
+				      right)
+
+#define KUNIT_EXPECT_PTR_EQ_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_PTR_EQ_MSG_ASSERTION(test,				       \
+					  KUNIT_EXPECTATION,		       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_NE() - An expectation that @left and @right are not equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an expectation that the values that @left and @right evaluate to are not
+ * equal. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, (@left) != (@right)). See KUNIT_EXPECT_TRUE() for
+ * more information.
+ */
+#define KUNIT_EXPECT_NE(test, left, right) \
+	KUNIT_BINARY_NE_ASSERTION(test, KUNIT_EXPECTATION, left, right)
+
+#define KUNIT_EXPECT_NE_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_NE_MSG_ASSERTION(test,				       \
+				      KUNIT_EXPECTATION,		       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_PTR_NE() - Expects that pointers @left and @right are not equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a pointer.
+ * @right: an arbitrary expression that evaluates to a pointer.
+ *
+ * Sets an expectation that the values that @left and @right evaluate to are not
+ * equal. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, (@left) != (@right)). See KUNIT_EXPECT_TRUE() for
+ * more information.
+ */
+#define KUNIT_EXPECT_PTR_NE(test, left, right)				       \
+	KUNIT_BINARY_PTR_NE_ASSERTION(test,				       \
+				      KUNIT_EXPECTATION,		       \
+				      left,				       \
+				      right)
+
+#define KUNIT_EXPECT_PTR_NE_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_PTR_NE_MSG_ASSERTION(test,				       \
+					  KUNIT_EXPECTATION,		       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_LT() - An expectation that @left is less than @right.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an expectation that the value that @left evaluates to is less than the
+ * value that @right evaluates to. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, (@left) < (@right)). See KUNIT_EXPECT_TRUE() for
+ * more information.
+ */
+#define KUNIT_EXPECT_LT(test, left, right) \
+	KUNIT_BINARY_LT_ASSERTION(test, KUNIT_EXPECTATION, left, right)
+
+#define KUNIT_EXPECT_LT_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_LT_MSG_ASSERTION(test,				       \
+				      KUNIT_EXPECTATION,		       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_LE() - Expects that @left is less than or equal to @right.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an expectation that the value that @left evaluates to is less than or
+ * equal to the value that @right evaluates to. Semantically this is equivalent
+ * to KUNIT_EXPECT_TRUE(@test, (@left) <= (@right)). See KUNIT_EXPECT_TRUE() for
+ * more information.
+ */
+#define KUNIT_EXPECT_LE(test, left, right) \
+	KUNIT_BINARY_LE_ASSERTION(test, KUNIT_EXPECTATION, left, right)
+
+#define KUNIT_EXPECT_LE_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_LE_MSG_ASSERTION(test,				       \
+				      KUNIT_EXPECTATION,		       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_GT() - An expectation that @left is greater than @right.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an expectation that the value that @left evaluates to is greater than
+ * the value that @right evaluates to. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, (@left) > (@right)). See KUNIT_EXPECT_TRUE() for
+ * more information.
+ */
+#define KUNIT_EXPECT_GT(test, left, right) \
+	KUNIT_BINARY_GT_ASSERTION(test, KUNIT_EXPECTATION, left, right)
+
+#define KUNIT_EXPECT_GT_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_GT_MSG_ASSERTION(test,				       \
+				      KUNIT_EXPECTATION,		       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_GE() - Expects that @left is greater than or equal to @right.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an expectation that the value that @left evaluates to is greater than
+ * the value that @right evaluates to. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, (@left) >= (@right)). See KUNIT_EXPECT_TRUE() for
+ * more information.
+ */
+#define KUNIT_EXPECT_GE(test, left, right) \
+	KUNIT_BINARY_GE_ASSERTION(test, KUNIT_EXPECTATION, left, right)
+
+#define KUNIT_EXPECT_GE_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_GE_MSG_ASSERTION(test,				       \
+				      KUNIT_EXPECTATION,		       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_STREQ() - Expects that strings @left and @right are equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a null terminated string.
+ * @right: an arbitrary expression that evaluates to a null terminated string.
+ *
+ * Sets an expectation that the values that @left and @right evaluate to are
+ * equal. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, !strcmp((@left), (@right))). See KUNIT_EXPECT_TRUE()
+ * for more information.
+ */
+#define KUNIT_EXPECT_STREQ(test, left, right) \
+	KUNIT_BINARY_STR_EQ_ASSERTION(test, KUNIT_EXPECTATION, left, right)
+
+#define KUNIT_EXPECT_STREQ_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_STR_EQ_MSG_ASSERTION(test,				       \
+					  KUNIT_EXPECTATION,		       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_STRNEQ() - Expects that strings @left and @right are not equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a null terminated string.
+ * @right: an arbitrary expression that evaluates to a null terminated string.
+ *
+ * Sets an expectation that the values that @left and @right evaluate to are
+ * not equal. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, strcmp((@left), (@right))). See KUNIT_EXPECT_TRUE()
+ * for more information.
+ */
+#define KUNIT_EXPECT_STRNEQ(test, left, right) \
+	KUNIT_BINARY_STR_NE_ASSERTION(test, KUNIT_EXPECTATION, left, right)
+
+#define KUNIT_EXPECT_STRNEQ_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_STR_NE_MSG_ASSERTION(test,				       \
+					  KUNIT_EXPECTATION,		       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_NOT_ERR_OR_NULL() - Expects that @ptr is not null and not err.
+ * @test: The test context object.
+ * @ptr: an arbitrary pointer.
+ *
+ * Sets an expectation that the value that @ptr evaluates to is not null and not
+ * an errno stored in a pointer. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, !IS_ERR_OR_NULL(@ptr)). See KUNIT_EXPECT_TRUE() for
+ * more information.
+ */
+#define KUNIT_EXPECT_NOT_ERR_OR_NULL(test, ptr) \
+	KUNIT_PTR_NOT_ERR_OR_NULL_ASSERTION(test, KUNIT_EXPECTATION, ptr)
+
+#define KUNIT_EXPECT_NOT_ERR_OR_NULL_MSG(test, ptr, fmt, ...)		       \
+	KUNIT_PTR_NOT_ERR_OR_NULL_MSG_ASSERTION(test,			       \
+						KUNIT_EXPECTATION,	       \
+						ptr,			       \
+						fmt,			       \
+						##__VA_ARGS__)
+
+#define KUNIT_ASSERT_FAILURE(test, fmt, ...) \
+	KUNIT_FAIL_ASSERTION(test, KUNIT_ASSERTION, fmt, ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_TRUE() - Sets an assertion that @condition is true.
+ * @test: The test context object.
+ * @condition: an arbitrary boolean expression. The test fails and aborts when
+ * this does not evaluate to true.
+ *
+ * This and assertions of the form `KUNIT_ASSERT_*` will cause the test case to
+ * fail *and immediately abort* when the specified condition is not met. Unlike
+ * an expectation failure, it will prevent the test case from continuing to run;
+ * this is otherwise known as an *assertion failure*.
+ */
+#define KUNIT_ASSERT_TRUE(test, condition) \
+	KUNIT_TRUE_ASSERTION(test, KUNIT_ASSERTION, condition)
+
+#define KUNIT_ASSERT_TRUE_MSG(test, condition, fmt, ...)		       \
+	KUNIT_TRUE_MSG_ASSERTION(test,					       \
+				 KUNIT_ASSERTION,			       \
+				 condition,				       \
+				 fmt,					       \
+				 ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_FALSE() - Sets an assertion that @condition is false.
+ * @test: The test context object.
+ * @condition: an arbitrary boolean expression.
+ *
+ * Sets an assertion that the value that @condition evaluates to is false. This
+ * is the same as KUNIT_EXPECT_FALSE(), except it causes an assertion failure
+ * (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
+ */
+#define KUNIT_ASSERT_FALSE(test, condition) \
+	KUNIT_FALSE_ASSERTION(test, KUNIT_ASSERTION, condition)
+
+#define KUNIT_ASSERT_FALSE_MSG(test, condition, fmt, ...)		       \
+	KUNIT_FALSE_MSG_ASSERTION(test,					       \
+				  KUNIT_ASSERTION,			       \
+				  condition,				       \
+				  fmt,					       \
+				  ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_EQ() - Sets an assertion that @left and @right are equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an assertion that the values that @left and @right evaluate to are
+ * equal. This is the same as KUNIT_EXPECT_EQ(), except it causes an assertion
+ * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
+ */
+#define KUNIT_ASSERT_EQ(test, left, right) \
+	KUNIT_BINARY_EQ_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_EQ_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_EQ_MSG_ASSERTION(test,				       \
+				      KUNIT_ASSERTION,			       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_PTR_EQ() - Asserts that pointers @left and @right are equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a pointer.
+ * @right: an arbitrary expression that evaluates to a pointer.
+ *
+ * Sets an assertion that the values that @left and @right evaluate to are
+ * equal. This is the same as KUNIT_EXPECT_EQ(), except it causes an assertion
+ * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
+ */
+#define KUNIT_ASSERT_PTR_EQ(test, left, right) \
+	KUNIT_BINARY_PTR_EQ_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_PTR_EQ_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_PTR_EQ_MSG_ASSERTION(test,				       \
+					  KUNIT_ASSERTION,		       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_NE() - An assertion that @left and @right are not equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an assertion that the values that @left and @right evaluate to are not
+ * equal. This is the same as KUNIT_EXPECT_NE(), except it causes an assertion
+ * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
+ */
+#define KUNIT_ASSERT_NE(test, left, right) \
+	KUNIT_BINARY_NE_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_NE_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_NE_MSG_ASSERTION(test,				       \
+				      KUNIT_ASSERTION,			       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_PTR_NE() - Asserts that pointers @left and @right are not equal.
+ * KUNIT_ASSERT_PTR_EQ() - Asserts that pointers @left and @right are equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a pointer.
+ * @right: an arbitrary expression that evaluates to a pointer.
+ *
+ * Sets an assertion that the values that @left and @right evaluate to are not
+ * equal. This is the same as KUNIT_EXPECT_NE(), except it causes an assertion
+ * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
+ */
+#define KUNIT_ASSERT_PTR_NE(test, left, right) \
+	KUNIT_BINARY_PTR_NE_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_PTR_NE_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_PTR_NE_MSG_ASSERTION(test,				       \
+					  KUNIT_ASSERTION,		       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ##__VA_ARGS__)
+/**
+ * KUNIT_ASSERT_LT() - An assertion that @left is less than @right.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an assertion that the value that @left evaluates to is less than the
+ * value that @right evaluates to. This is the same as KUNIT_EXPECT_LT(), except
+ * it causes an assertion failure (see KUNIT_ASSERT_TRUE()) when the assertion
+ * is not met.
+ */
+#define KUNIT_ASSERT_LT(test, left, right) \
+	KUNIT_BINARY_LT_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_LT_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_LT_MSG_ASSERTION(test,				       \
+				      KUNIT_ASSERTION,			       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+/**
+ * KUNIT_ASSERT_LE() - An assertion that @left is less than or equal to @right.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an assertion that the value that @left evaluates to is less than or
+ * equal to the value that @right evaluates to. This is the same as
+ * KUNIT_EXPECT_LE(), except it causes an assertion failure (see
+ * KUNIT_ASSERT_TRUE()) when the assertion is not met.
+ */
+#define KUNIT_ASSERT_LE(test, left, right) \
+	KUNIT_BINARY_LE_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_LE_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_LE_MSG_ASSERTION(test,				       \
+				      KUNIT_ASSERTION,			       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_GT() - An assertion that @left is greater than @right.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an assertion that the value that @left evaluates to is greater than the
+ * value that @right evaluates to. This is the same as KUNIT_EXPECT_GT(), except
+ * it causes an assertion failure (see KUNIT_ASSERT_TRUE()) when the assertion
+ * is not met.
+ */
+#define KUNIT_ASSERT_GT(test, left, right) \
+	KUNIT_BINARY_GT_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_GT_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_GT_MSG_ASSERTION(test,				       \
+				      KUNIT_ASSERTION,			       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_GE() - Assertion that @left is greater than or equal to @right.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an assertion that the value that @left evaluates to is greater than the
+ * value that @right evaluates to. This is the same as KUNIT_EXPECT_GE(), except
+ * it causes an assertion failure (see KUNIT_ASSERT_TRUE()) when the assertion
+ * is not met.
+ */
+#define KUNIT_ASSERT_GE(test, left, right) \
+	KUNIT_BINARY_GE_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_GE_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_GE_MSG_ASSERTION(test,				       \
+				      KUNIT_ASSERTION,			       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_STREQ() - An assertion that strings @left and @right are equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a null terminated string.
+ * @right: an arbitrary expression that evaluates to a null terminated string.
+ *
+ * Sets an assertion that the values that @left and @right evaluate to are
+ * equal. This is the same as KUNIT_EXPECT_STREQ(), except it causes an
+ * assertion failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
+ */
+#define KUNIT_ASSERT_STREQ(test, left, right) \
+	KUNIT_BINARY_STR_EQ_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_STREQ_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_STR_EQ_MSG_ASSERTION(test,				       \
+					  KUNIT_ASSERTION,		       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_STRNEQ() - Expects that strings @left and @right are not equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a null terminated string.
+ * @right: an arbitrary expression that evaluates to a null terminated string.
+ *
+ * Sets an expectation that the values that @left and @right evaluate to are
+ * not equal. This is semantically equivalent to
+ * KUNIT_ASSERT_TRUE(@test, strcmp((@left), (@right))). See KUNIT_ASSERT_TRUE()
+ * for more information.
+ */
+#define KUNIT_ASSERT_STRNEQ(test, left, right) \
+	KUNIT_BINARY_STR_NE_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_STRNEQ_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_STR_NE_MSG_ASSERTION(test,				       \
+					  KUNIT_ASSERTION,		       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_NOT_ERR_OR_NULL() - Assertion that @ptr is not null and not err.
+ * @test: The test context object.
+ * @ptr: an arbitrary pointer.
+ *
+ * Sets an assertion that the value that @ptr evaluates to is not null and not
+ * an errno stored in a pointer. This is the same as
+ * KUNIT_EXPECT_NOT_ERR_OR_NULL(), except it causes an assertion failure (see
+ * KUNIT_ASSERT_TRUE()) when the assertion is not met.
+ */
+#define KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr) \
+	KUNIT_PTR_NOT_ERR_OR_NULL_ASSERTION(test, KUNIT_ASSERTION, ptr)
+
+#define KUNIT_ASSERT_NOT_ERR_OR_NULL_MSG(test, ptr, fmt, ...)		       \
+	KUNIT_PTR_NOT_ERR_OR_NULL_MSG_ASSERTION(test,			       \
+						KUNIT_ASSERTION,	       \
+						ptr,			       \
+						fmt,			       \
+						##__VA_ARGS__)
+
+#endif /* _KUNIT_TEST_H */
diff --git a/include/kunit/try-catch.h b/include/kunit/try-catch.h
new file mode 100644
index 0000000..c507dd4
--- /dev/null
+++ b/include/kunit/try-catch.h
@@ -0,0 +1,65 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * An API to allow a function, that may fail, to be executed, and recover in a
+ * controlled manner.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#ifndef _KUNIT_TRY_CATCH_H
+#define _KUNIT_TRY_CATCH_H
+
+#include <linux/types.h>
+
+typedef void (*kunit_try_catch_func_t)(void *);
+
+struct completion;
+struct kunit;
+
+/**
+ * struct kunit_try_catch - provides a generic way to run code which might fail.
+ * @test: The test case that is currently being executed.
+ * @try_completion: Completion that the control thread waits on while test runs.
+ * @try_result: Contains any errno obtained while running test case.
+ * @try: The function, the test case, to attempt to run.
+ * @catch: The function called if @try bails out.
+ * @context: used to pass user data to the try and catch functions.
+ *
+ * kunit_try_catch provides a generic, architecture independent way to execute
+ * an arbitrary function of type kunit_try_catch_func_t which may bail out by
+ * calling kunit_try_catch_throw(). If kunit_try_catch_throw() is called, @try
+ * is stopped at the site of invocation and @catch is called.
+ *
+ * struct kunit_try_catch provides a generic interface for the functionality
+ * needed to implement kunit->abort() which in turn is needed for implementing
+ * assertions. Assertions allow stating a precondition for a test simplifying
+ * how test cases are written and presented.
+ *
+ * Assertions are like expectations, except they abort (call
+ * kunit_try_catch_throw()) when the specified condition is not met. This is
+ * useful when you look at a test case as a logical statement about some piece
+ * of code, where assertions are the premises for the test case, and the
+ * conclusion is a set of predicates, rather expectations, that must all be
+ * true. If your premises are violated, it does not makes sense to continue.
+ */
+struct kunit_try_catch {
+	/* private: internal use only. */
+	struct kunit *test;
+	struct completion *try_completion;
+	int try_result;
+	kunit_try_catch_func_t try;
+	kunit_try_catch_func_t catch;
+	void *context;
+};
+
+void kunit_try_catch_run(struct kunit_try_catch *try_catch, void *context);
+
+void __noreturn kunit_try_catch_throw(struct kunit_try_catch *try_catch);
+
+static inline int kunit_try_catch_get_result(struct kunit_try_catch *try_catch)
+{
+	return try_catch->try_result;
+}
+
+#endif /* _KUNIT_TRY_CATCH_H */
diff --git a/include/linux/android_kabi.h b/include/linux/android_kabi.h
new file mode 100644
index 0000000..efa52953
--- /dev/null
+++ b/include/linux/android_kabi.h
@@ -0,0 +1,113 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * android_kabi.h - Android kernel abi abstraction header
+ *
+ * Copyright (C) 2020 Google, Inc.
+ *
+ * Heavily influenced by rh_kabi.h which came from the RHEL/CENTOS kernel and
+ * was:
+ *	Copyright (c) 2014 Don Zickus
+ *	Copyright (c) 2015-2018 Jiri Benc
+ *	Copyright (c) 2015 Sabrina Dubroca, Hannes Frederic Sowa
+ *	Copyright (c) 2016-2018 Prarit Bhargava
+ *	Copyright (c) 2017 Paolo Abeni, Larry Woodman
+ *
+ * These macros are to be used to try to help alleviate future kernel abi
+ * changes that will occur as LTS and other kernel patches are merged into the
+ * tree during a period in which the kernel abi is wishing to not be disturbed.
+ *
+ * There are two times these macros should be used:
+ *  - Before the kernel abi is "frozen"
+ *    Padding can be added to various kernel structures that have in the past
+ *    been known to change over time.  That will give "room" in the structure
+ *    that can then be used when fields are added so that the structure size
+ *    will not change.
+ *
+ *  - After the kernel abi is "frozen"
+ *    If a structure's field is changed to a type that is identical in size to
+ *    the previous type, it can be changed with a union macro
+ *    If a field is added to a structure, the padding fields can be used to add
+ *    the new field in a "safe" way.
+ */
+#ifndef _ANDROID_KABI_H
+#define _ANDROID_KABI_H
+
+#include <linux/compiler.h>
+
+/*
+ * Worker macros, don't use these, use the ones without a leading '_'
+ */
+
+#define __ANDROID_KABI_CHECK_SIZE_ALIGN(_orig, _new)				\
+	union {									\
+		_Static_assert(sizeof(struct{_new;}) <= sizeof(struct{_orig;}),	\
+			       __FILE__ ":" __stringify(__LINE__) ": "		\
+			       __stringify(_new)				\
+			       " is larger than "				\
+			       __stringify(_orig) );				\
+		_Static_assert(__alignof__(struct{_new;}) <= __alignof__(struct{_orig;}),	\
+			       __FILE__ ":" __stringify(__LINE__) ": "		\
+			       __stringify(_orig)				\
+			       " is not aligned the same as "			\
+			       __stringify(_new) );				\
+	}
+
+#ifdef __GENKSYMS__
+
+#define _ANDROID_KABI_REPLACE(_orig, _new)		_orig
+
+#else
+
+#define _ANDROID_KABI_REPLACE(_orig, _new)			\
+	union {							\
+		_new;						\
+		struct {					\
+			_orig;					\
+		} __UNIQUE_ID(android_kabi_hide);		\
+		__ANDROID_KABI_CHECK_SIZE_ALIGN(_orig, _new);	\
+	}
+
+#endif /* __GENKSYMS__ */
+
+#define _ANDROID_KABI_RESERVE(n)		u64 android_kabi_reserved##n
+
+
+/*
+ * Macros to use _before_ the ABI is frozen
+ */
+
+/*
+ * ANDROID_KABI_RESERVE
+ *   Reserve some "padding" in a structure for potential future use.
+ *   This normally placed at the end of a structure.
+ *   number: the "number" of the padding variable in the structure.  Start with
+ *   1 and go up.
+ */
+#define ANDROID_KABI_RESERVE(number)	_ANDROID_KABI_RESERVE(number)
+
+
+/*
+ * Macros to use _after_ the ABI is frozen
+ */
+
+/*
+ * ANDROID_KABI_USE(number, _new)
+ *   Use a previous padding entry that was defined with ANDROID_KABI_RESERVE
+ *   number: the previous "number" of the padding variable
+ *   _new: the variable to use now instead of the padding variable
+ */
+#define ANDROID_KABI_USE(number, _new)		\
+	_ANDROID_KABI_REPLACE(_ANDROID_KABI_RESERVE(number), _new)
+
+/*
+ * ANDROID_KABI_USE2(number, _new1, _new2)
+ *   Use a previous padding entry that was defined with ANDROID_KABI_RESERVE for
+ *   two new variables that fit into 64 bits.  This is good for when you do not
+ *   want to "burn" a 64bit padding variable for a smaller variable size if not
+ *   needed.
+ */
+#define ANDROID_KABI_USE2(number, _new1, _new2)			\
+	_ANDROID_KABI_REPLACE(_ANDROID_KABI_RESERVE(number), struct{ _new1; _new2; })
+
+
+#endif /* _ANDROID_KABI_H */
diff --git a/include/linux/android_vendor.h b/include/linux/android_vendor.h
new file mode 100644
index 0000000..59fc573
--- /dev/null
+++ b/include/linux/android_vendor.h
@@ -0,0 +1,35 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * android_vendor.h - Android vendor data
+ *
+ * Copyright 2020 Google LLC
+ *
+ * These macros are to be used to reserve space in kernel data structures
+ * for use by vendor modules.
+ *
+ * These macros should be used before the kernel abi is "frozen".
+ * Fields can be added to various kernel structures that need space
+ * for functionality implemented in vendor modules. The use of
+ * these fields is vendor specific.
+ */
+#ifndef _ANDROID_VENDOR_H
+#define _ANDROID_VENDOR_H
+
+/*
+ * ANDROID_VENDOR_DATA
+ *   Reserve some "padding" in a structure for potential future use.
+ *   This normally placed at the end of a structure.
+ *   number: the "number" of the padding variable in the structure.  Start with
+ *   1 and go up.
+ *
+ * ANDROID_VENDOR_DATA_ARRAY
+ *   Same as ANDROID_VENDOR_DATA but allocates an array of u64 with
+ *   the specified size
+ */
+#define ANDROID_VENDOR_DATA(n)		u64 android_vendor_data##n
+#define ANDROID_VENDOR_DATA_ARRAY(n, s)	u64 android_vendor_data##n[s]
+
+#define ANDROID_OEM_DATA(n)		u64 android_oem_data##n
+#define ANDROID_OEM_DATA_ARRAY(n, s)	u64 android_oem_data##n[s]
+
+#endif /* _ANDROID_VENDOR_H */
diff --git a/include/linux/arch_topology.h b/include/linux/arch_topology.h
index 42f2b51..5402bc0 100644
--- a/include/linux/arch_topology.h
+++ b/include/linux/arch_topology.h
@@ -33,6 +33,14 @@ unsigned long topology_get_freq_scale(int cpu)
 	return per_cpu(freq_scale, cpu);
 }
 
+DECLARE_PER_CPU(unsigned long, max_freq_scale);
+
+static inline
+unsigned long topology_get_max_freq_scale(struct sched_domain *sd, int cpu)
+{
+	return per_cpu(max_freq_scale, cpu);
+}
+
 struct cpu_topology {
 	int thread_id;
 	int core_id;
diff --git a/include/linux/bio.h b/include/linux/bio.h
index 853d92c..5ba9e20 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -8,6 +8,7 @@
 #include <linux/highmem.h>
 #include <linux/mempool.h>
 #include <linux/ioprio.h>
+#include <linux/android_kabi.h>
 
 #ifdef CONFIG_BLOCK
 /* struct bio, bio_vec and BIO_* flags are defined in blk_types.h */
@@ -319,6 +320,10 @@ struct bio_integrity_payload {
 	struct work_struct	bip_work;	/* I/O completion */
 
 	struct bio_vec		*bip_vec;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+
 	struct bio_vec		bip_inline_vecs[0];/* embedded bvec array */
 };
 
@@ -719,6 +724,11 @@ struct bio_set {
 	struct bio_list		rescue_list;
 	struct work_struct	rescue_work;
 	struct workqueue_struct	*rescue_workqueue;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct biovec_slab {
diff --git a/include/linux/bits.h b/include/linux/bits.h
index 669d694..a740bbc 100644
--- a/include/linux/bits.h
+++ b/include/linux/bits.h
@@ -3,9 +3,9 @@
 #define __LINUX_BITS_H
 
 #include <linux/const.h>
+#include <vdso/bits.h>
 #include <asm/bitsperlong.h>
 
-#define BIT(nr)			(UL(1) << (nr))
 #define BIT_ULL(nr)		(ULL(1) << (nr))
 #define BIT_MASK(nr)		(UL(1) << ((nr) % BITS_PER_LONG))
 #define BIT_WORD(nr)		((nr) / BITS_PER_LONG)
diff --git a/include/linux/blk-crypto.h b/include/linux/blk-crypto.h
new file mode 100644
index 0000000..c495572
--- /dev/null
+++ b/include/linux/blk-crypto.h
@@ -0,0 +1,178 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2019 Google LLC
+ */
+
+#ifndef __LINUX_BLK_CRYPTO_H
+#define __LINUX_BLK_CRYPTO_H
+
+#include <linux/types.h>
+
+enum blk_crypto_mode_num {
+	BLK_ENCRYPTION_MODE_INVALID,
+	BLK_ENCRYPTION_MODE_AES_256_XTS,
+	BLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV,
+	BLK_ENCRYPTION_MODE_ADIANTUM,
+	BLK_ENCRYPTION_MODE_MAX,
+};
+
+#define BLK_CRYPTO_MAX_KEY_SIZE		64
+#define BLK_CRYPTO_MAX_WRAPPED_KEY_SIZE                128
+
+/**
+ * struct blk_crypto_config - an inline encryption key's crypto configuration
+ * @crypto_mode: encryption algorithm this key is for
+ * @data_unit_size: the data unit size for all encryption/decryptions with this
+ *	key.  This is the size in bytes of each individual plaintext and
+ *	ciphertext.  This is always a power of 2.  It might be e.g. the
+ *	filesystem block size or the disk sector size.
+ * @dun_bytes: the maximum number of bytes of DUN used when using this key
+ * @is_hw_wrapped: @raw points to a wrapped key to be used by an inline
+ *	encryption hardware that accepts wrapped keys.
+ */
+struct blk_crypto_config {
+	enum blk_crypto_mode_num crypto_mode;
+	unsigned int data_unit_size;
+	unsigned int dun_bytes;
+	bool is_hw_wrapped;
+};
+
+/**
+ * struct blk_crypto_key - an inline encryption key
+ * @crypto_cfg: the crypto configuration (like crypto_mode, key size) for this
+ *		key
+ * @data_unit_size_bits: log2 of data_unit_size
+ * @size: size of this key in bytes (determined by @crypto_cfg.crypto_mode)
+ * @raw: the raw bytes of this key.  Only the first @size bytes are used.
+ *
+ * A blk_crypto_key is immutable once created, and many bios can reference it at
+ * the same time.  It must not be freed until all bios using it have completed
+ * and it has been evicted from all devices on which it may have been used.
+ */
+struct blk_crypto_key {
+	struct blk_crypto_config crypto_cfg;
+	unsigned int data_unit_size_bits;
+	unsigned int size;
+	u8 raw[BLK_CRYPTO_MAX_WRAPPED_KEY_SIZE];
+};
+
+#define BLK_CRYPTO_MAX_IV_SIZE		32
+#define BLK_CRYPTO_DUN_ARRAY_SIZE	(BLK_CRYPTO_MAX_IV_SIZE / sizeof(u64))
+
+/**
+ * struct bio_crypt_ctx - an inline encryption context
+ * @bc_key: the key, algorithm, and data unit size to use
+ * @bc_dun: the data unit number (starting IV) to use
+ *
+ * A bio_crypt_ctx specifies that the contents of the bio will be encrypted (for
+ * write requests) or decrypted (for read requests) inline by the storage device
+ * or controller, or by the crypto API fallback.
+ */
+struct bio_crypt_ctx {
+	const struct blk_crypto_key	*bc_key;
+	u64				bc_dun[BLK_CRYPTO_DUN_ARRAY_SIZE];
+};
+
+#include <linux/blk_types.h>
+#include <linux/blkdev.h>
+
+struct request;
+struct request_queue;
+
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+
+static inline bool bio_has_crypt_ctx(struct bio *bio)
+{
+	return bio->bi_crypt_context;
+}
+
+void bio_crypt_set_ctx(struct bio *bio, const struct blk_crypto_key *key,
+		       const u64 dun[BLK_CRYPTO_DUN_ARRAY_SIZE],
+		       gfp_t gfp_mask);
+
+bool bio_crypt_dun_is_contiguous(const struct bio_crypt_ctx *bc,
+				 unsigned int bytes,
+				 const u64 next_dun[BLK_CRYPTO_DUN_ARRAY_SIZE]);
+
+int blk_crypto_init_key(struct blk_crypto_key *blk_key,
+			const u8 *raw_key, unsigned int raw_key_size,
+			bool is_hw_wrapped,
+			enum blk_crypto_mode_num crypto_mode,
+			unsigned int dun_bytes,
+			unsigned int data_unit_size);
+
+int blk_crypto_start_using_key(const struct blk_crypto_key *key,
+			       struct request_queue *q);
+
+int blk_crypto_evict_key(struct request_queue *q,
+			 const struct blk_crypto_key *key);
+
+bool blk_crypto_config_supported(struct request_queue *q,
+				 const struct blk_crypto_config *cfg);
+
+#else /* CONFIG_BLK_INLINE_ENCRYPTION */
+
+static inline bool bio_has_crypt_ctx(struct bio *bio)
+{
+	return false;
+}
+
+#endif /* CONFIG_BLK_INLINE_ENCRYPTION */
+
+static inline void bio_clone_skip_dm_default_key(struct bio *dst,
+						 const struct bio *src);
+
+int __bio_crypt_clone(struct bio *dst, struct bio *src, gfp_t gfp_mask);
+/**
+ * bio_crypt_clone - clone bio encryption context
+ * @dst: destination bio
+ * @src: source bio
+ * @gfp_mask: memory allocation flags
+ *
+ * If @src has an encryption context, clone it to @dst.
+ *
+ * Return: 0 on success, -ENOMEM if out of memory.  -ENOMEM is only possible if
+ *	   @gfp_mask doesn't include %__GFP_DIRECT_RECLAIM.
+ */
+static inline int bio_crypt_clone(struct bio *dst, struct bio *src,
+				  gfp_t gfp_mask)
+{
+	bio_clone_skip_dm_default_key(dst, src);
+	if (bio_has_crypt_ctx(src))
+		return __bio_crypt_clone(dst, src, gfp_mask);
+	return 0;
+}
+
+#if IS_ENABLED(CONFIG_DM_DEFAULT_KEY)
+static inline void bio_set_skip_dm_default_key(struct bio *bio)
+{
+	bio->bi_skip_dm_default_key = true;
+}
+
+static inline bool bio_should_skip_dm_default_key(const struct bio *bio)
+{
+	return bio->bi_skip_dm_default_key;
+}
+
+static inline void bio_clone_skip_dm_default_key(struct bio *dst,
+						 const struct bio *src)
+{
+	dst->bi_skip_dm_default_key = src->bi_skip_dm_default_key;
+}
+#else /* CONFIG_DM_DEFAULT_KEY */
+static inline void bio_set_skip_dm_default_key(struct bio *bio)
+{
+}
+
+static inline bool bio_should_skip_dm_default_key(const struct bio *bio)
+{
+	return false;
+}
+
+static inline void bio_clone_skip_dm_default_key(struct bio *dst,
+						 const struct bio *src)
+{
+}
+#endif /* !CONFIG_DM_DEFAULT_KEY */
+
+#endif /* __LINUX_BLK_CRYPTO_H */
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
index d688b96..fc422173 100644
--- a/include/linux/blk_types.h
+++ b/include/linux/blk_types.h
@@ -9,6 +9,7 @@
 #include <linux/types.h>
 #include <linux/bvec.h>
 #include <linux/ktime.h>
+#include <linux/android_kabi.h>
 
 struct bio_set;
 struct bio;
@@ -18,6 +19,7 @@ struct block_device;
 struct io_context;
 struct cgroup_subsys_state;
 typedef void (bio_end_io_t) (struct bio *);
+struct bio_crypt_ctx;
 
 /*
  * Block error status values.  See block/blk-core:blk_errors for the details.
@@ -173,6 +175,14 @@ struct bio {
 	u64			bi_iocost_cost;
 #endif
 #endif
+
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+	struct bio_crypt_ctx	*bi_crypt_context;
+#if IS_ENABLED(CONFIG_DM_DEFAULT_KEY)
+	bool			bi_skip_dm_default_key;
+#endif
+#endif
+
 	union {
 #if defined(CONFIG_BLK_DEV_INTEGRITY)
 		struct bio_integrity_payload *bi_integrity; /* data integrity */
@@ -193,6 +203,9 @@ struct bio {
 
 	struct bio_set		*bi_pool;
 
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+
 	/*
 	 * We can inline a number of vecs at the end of the bio, to avoid
 	 * double allocations for a small number of bio_vecs. This member
@@ -290,6 +303,12 @@ enum req_opf {
 	REQ_OP_ZONE_RESET_ALL	= 8,
 	/* write the zero filled sector many times */
 	REQ_OP_WRITE_ZEROES	= 9,
+	/* Open a zone */
+	REQ_OP_ZONE_OPEN	= 10,
+	/* Close a zone */
+	REQ_OP_ZONE_CLOSE	= 11,
+	/* Transition a zone to full */
+	REQ_OP_ZONE_FINISH	= 12,
 
 	/* SCSI passthrough using struct scsi_request */
 	REQ_OP_SCSI_IN		= 32,
@@ -417,6 +436,25 @@ static inline bool op_is_discard(unsigned int op)
 	return (op & REQ_OP_MASK) == REQ_OP_DISCARD;
 }
 
+/*
+ * Check if a bio or request operation is a zone management operation, with
+ * the exception of REQ_OP_ZONE_RESET_ALL which is treated as a special case
+ * due to its different handling in the block layer and device response in
+ * case of command failure.
+ */
+static inline bool op_is_zone_mgmt(enum req_opf op)
+{
+	switch (op & REQ_OP_MASK) {
+	case REQ_OP_ZONE_RESET:
+	case REQ_OP_ZONE_OPEN:
+	case REQ_OP_ZONE_CLOSE:
+	case REQ_OP_ZONE_FINISH:
+		return true;
+	default:
+		return false;
+	}
+}
+
 static inline int op_stat_group(unsigned int op)
 {
 	if (op_is_discard(op))
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index d5338b9..8fd27ec 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -43,6 +43,7 @@ struct pr_ops;
 struct rq_qos;
 struct blk_queue_stats;
 struct blk_stat_callback;
+struct blk_keyslot_manager;
 
 #define BLKDEV_MIN_RQ	4
 #define BLKDEV_MAX_RQ	128	/* Default maximum */
@@ -223,6 +224,11 @@ struct request {
 	unsigned short nr_integrity_segments;
 #endif
 
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+	struct bio_crypt_ctx *crypt_ctx;
+	struct blk_ksm_keyslot *crypt_keyslot;
+#endif
+
 	unsigned short write_hint;
 	unsigned short ioprio;
 
@@ -349,34 +355,28 @@ struct queue_limits {
 	enum blk_zoned_model	zoned;
 };
 
+typedef int (*report_zones_cb)(struct blk_zone *zone, unsigned int idx,
+			       void *data);
+
 #ifdef CONFIG_BLK_DEV_ZONED
 
-/*
- * Maximum number of zones to report with a single report zones command.
- */
-#define BLK_ZONED_REPORT_MAX_ZONES	8192U
-
-extern unsigned int blkdev_nr_zones(struct block_device *bdev);
-extern int blkdev_report_zones(struct block_device *bdev,
-			       sector_t sector, struct blk_zone *zones,
-			       unsigned int *nr_zones);
-extern int blkdev_reset_zones(struct block_device *bdev, sector_t sectors,
-			      sector_t nr_sectors, gfp_t gfp_mask);
+#define BLK_ALL_ZONES  ((unsigned int)-1)
+int blkdev_report_zones(struct block_device *bdev, sector_t sector,
+			unsigned int nr_zones, report_zones_cb cb, void *data);
+unsigned int blkdev_nr_zones(struct gendisk *disk);
+extern int blkdev_zone_mgmt(struct block_device *bdev, enum req_opf op,
+			    sector_t sectors, sector_t nr_sectors,
+			    gfp_t gfp_mask);
 extern int blk_revalidate_disk_zones(struct gendisk *disk);
 
 extern int blkdev_report_zones_ioctl(struct block_device *bdev, fmode_t mode,
 				     unsigned int cmd, unsigned long arg);
-extern int blkdev_reset_zones_ioctl(struct block_device *bdev, fmode_t mode,
-				    unsigned int cmd, unsigned long arg);
+extern int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode,
+				  unsigned int cmd, unsigned long arg);
 
 #else /* CONFIG_BLK_DEV_ZONED */
 
-static inline unsigned int blkdev_nr_zones(struct block_device *bdev)
-{
-	return 0;
-}
-
-static inline int blk_revalidate_disk_zones(struct gendisk *disk)
+static inline unsigned int blkdev_nr_zones(struct gendisk *disk)
 {
 	return 0;
 }
@@ -388,9 +388,9 @@ static inline int blkdev_report_zones_ioctl(struct block_device *bdev,
 	return -ENOTTY;
 }
 
-static inline int blkdev_reset_zones_ioctl(struct block_device *bdev,
-					   fmode_t mode, unsigned int cmd,
-					   unsigned long arg)
+static inline int blkdev_zone_mgmt_ioctl(struct block_device *bdev,
+					 fmode_t mode, unsigned int cmd,
+					 unsigned long arg)
 {
 	return -ENOTTY;
 }
@@ -481,6 +481,11 @@ struct request_queue {
 	unsigned int		dma_pad_mask;
 	unsigned int		dma_alignment;
 
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+	/* Inline crypto capabilities */
+	struct blk_keyslot_manager *ksm;
+#endif
+
 	unsigned int		rq_timeout;
 	int			poll_nsec;
 
@@ -505,9 +510,9 @@ struct request_queue {
 	/*
 	 * Zoned block device information for request dispatch control.
 	 * nr_zones is the total number of zones of the device. This is always
-	 * 0 for regular block devices. seq_zones_bitmap is a bitmap of nr_zones
-	 * bits which indicates if a zone is conventional (bit clear) or
-	 * sequential (bit set). seq_zones_wlock is a bitmap of nr_zones
+	 * 0 for regular block devices. conv_zones_bitmap is a bitmap of nr_zones
+	 * bits which indicates if a zone is conventional (bit set) or
+	 * sequential (bit clear). seq_zones_wlock is a bitmap of nr_zones
 	 * bits which indicates if a zone is write locked, that is, if a write
 	 * request targeting the zone was dispatched. All three fields are
 	 * initialized by the low level device driver (e.g. scsi/sd.c).
@@ -520,7 +525,7 @@ struct request_queue {
 	 * blk_mq_unfreeze_queue().
 	 */
 	unsigned int		nr_zones;
-	unsigned long		*seq_zones_bitmap;
+	unsigned long		*conv_zones_bitmap;
 	unsigned long		*seq_zones_wlock;
 #endif /* CONFIG_BLK_DEV_ZONED */
 
@@ -726,9 +731,11 @@ static inline unsigned int blk_queue_zone_no(struct request_queue *q,
 static inline bool blk_queue_zone_is_seq(struct request_queue *q,
 					 sector_t sector)
 {
-	if (!blk_queue_is_zoned(q) || !q->seq_zones_bitmap)
+	if (!blk_queue_is_zoned(q))
 		return false;
-	return test_bit(blk_queue_zone_no(q, sector), q->seq_zones_bitmap);
+	if (!q->conv_zones_bitmap)
+		return true;
+	return !test_bit(blk_queue_zone_no(q, sector), q->conv_zones_bitmap);
 }
 #else /* CONFIG_BLK_DEV_ZONED */
 static inline unsigned int blk_queue_nr_zones(struct request_queue *q)
@@ -1563,6 +1570,12 @@ struct blk_integrity *bdev_get_integrity(struct block_device *bdev)
 	return blk_get_integrity(bdev->bd_disk);
 }
 
+static inline bool
+blk_integrity_queue_supports_integrity(struct request_queue *q)
+{
+	return q->integrity.profile;
+}
+
 static inline bool blk_integrity_rq(struct request *rq)
 {
 	return rq->cmd_flags & REQ_INTEGRITY;
@@ -1643,6 +1656,11 @@ static inline struct blk_integrity *blk_get_integrity(struct gendisk *disk)
 {
 	return NULL;
 }
+static inline bool
+blk_integrity_queue_supports_integrity(struct request_queue *q)
+{
+	return false;
+}
 static inline int blk_integrity_compare(struct gendisk *a, struct gendisk *b)
 {
 	return 0;
@@ -1694,6 +1712,25 @@ static inline struct bio_vec *rq_integrity_vec(struct request *rq)
 
 #endif /* CONFIG_BLK_DEV_INTEGRITY */
 
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+
+bool blk_ksm_register(struct blk_keyslot_manager *ksm, struct request_queue *q);
+
+void blk_ksm_unregister(struct request_queue *q);
+
+#else /* CONFIG_BLK_INLINE_ENCRYPTION */
+
+static inline bool blk_ksm_register(struct blk_keyslot_manager *ksm,
+				    struct request_queue *q)
+{
+	return true;
+}
+
+static inline void blk_ksm_unregister(struct request_queue *q) { }
+
+#endif /* CONFIG_BLK_INLINE_ENCRYPTION */
+
+
 struct block_device_operations {
 	int (*open) (struct block_device *, fmode_t);
 	void (*release) (struct gendisk *, fmode_t);
@@ -1710,7 +1747,7 @@ struct block_device_operations {
 	/* this callback is with swap_lock and sometimes page table lock held */
 	void (*swap_slot_free_notify) (struct block_device *, unsigned long);
 	int (*report_zones)(struct gendisk *, sector_t sector,
-			    struct blk_zone *zones, unsigned int *nr_zones);
+			unsigned int nr_zones, report_zones_cb cb, void *data);
 	struct module *owner;
 	const struct pr_ops *pr_ops;
 };
diff --git a/include/linux/bootconfig.h b/include/linux/bootconfig.h
new file mode 100644
index 0000000..9903088
--- /dev/null
+++ b/include/linux/bootconfig.h
@@ -0,0 +1,228 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _LINUX_XBC_H
+#define _LINUX_XBC_H
+/*
+ * Extra Boot Config
+ * Copyright (C) 2019 Linaro Ltd.
+ * Author: Masami Hiramatsu <mhiramat@kernel.org>
+ */
+
+#include <linux/kernel.h>
+#include <linux/types.h>
+
+#define BOOTCONFIG_MAGIC	"#BOOTCONFIG\n"
+#define BOOTCONFIG_MAGIC_LEN	12
+
+/* XBC tree node */
+struct xbc_node {
+	u16 next;
+	u16 child;
+	u16 parent;
+	u16 data;
+} __attribute__ ((__packed__));
+
+#define XBC_KEY		0
+#define XBC_VALUE	(1 << 15)
+/* Maximum size of boot config is 32KB - 1 */
+#define XBC_DATA_MAX	(XBC_VALUE - 1)
+
+#define XBC_NODE_MAX	1024
+#define XBC_KEYLEN_MAX	256
+#define XBC_DEPTH_MAX	16
+
+/* Node tree access raw APIs */
+struct xbc_node * __init xbc_root_node(void);
+int __init xbc_node_index(struct xbc_node *node);
+struct xbc_node * __init xbc_node_get_parent(struct xbc_node *node);
+struct xbc_node * __init xbc_node_get_child(struct xbc_node *node);
+struct xbc_node * __init xbc_node_get_next(struct xbc_node *node);
+const char * __init xbc_node_get_data(struct xbc_node *node);
+
+/**
+ * xbc_node_is_value() - Test the node is a value node
+ * @node: An XBC node.
+ *
+ * Test the @node is a value node and return true if a value node, false if not.
+ */
+static inline __init bool xbc_node_is_value(struct xbc_node *node)
+{
+	return node->data & XBC_VALUE;
+}
+
+/**
+ * xbc_node_is_key() - Test the node is a key node
+ * @node: An XBC node.
+ *
+ * Test the @node is a key node and return true if a key node, false if not.
+ */
+static inline __init bool xbc_node_is_key(struct xbc_node *node)
+{
+	return !xbc_node_is_value(node);
+}
+
+/**
+ * xbc_node_is_array() - Test the node is an arraied value node
+ * @node: An XBC node.
+ *
+ * Test the @node is an arraied value node.
+ */
+static inline __init bool xbc_node_is_array(struct xbc_node *node)
+{
+	return xbc_node_is_value(node) && node->next != 0;
+}
+
+/**
+ * xbc_node_is_leaf() - Test the node is a leaf key node
+ * @node: An XBC node.
+ *
+ * Test the @node is a leaf key node which is a key node and has a value node
+ * or no child. Returns true if it is a leaf node, or false if not.
+ */
+static inline __init bool xbc_node_is_leaf(struct xbc_node *node)
+{
+	return xbc_node_is_key(node) &&
+		(!node->child || xbc_node_is_value(xbc_node_get_child(node)));
+}
+
+/* Tree-based key-value access APIs */
+struct xbc_node * __init xbc_node_find_child(struct xbc_node *parent,
+					     const char *key);
+
+const char * __init xbc_node_find_value(struct xbc_node *parent,
+					const char *key,
+					struct xbc_node **vnode);
+
+struct xbc_node * __init xbc_node_find_next_leaf(struct xbc_node *root,
+						 struct xbc_node *leaf);
+
+const char * __init xbc_node_find_next_key_value(struct xbc_node *root,
+						 struct xbc_node **leaf);
+
+/**
+ * xbc_find_value() - Find a value which matches the key
+ * @key: Search key
+ * @vnode: A container pointer of XBC value node.
+ *
+ * Search a value whose key matches @key from whole of XBC tree and return
+ * the value if found. Found value node is stored in *@vnode.
+ * Note that this can return 0-length string and store NULL in *@vnode for
+ * key-only (non-value) entry.
+ */
+static inline const char * __init
+xbc_find_value(const char *key, struct xbc_node **vnode)
+{
+	return xbc_node_find_value(NULL, key, vnode);
+}
+
+/**
+ * xbc_find_node() - Find a node which matches the key
+ * @key: Search key
+ *
+ * Search a (key) node whose key matches @key from whole of XBC tree and
+ * return the node if found. If not found, returns NULL.
+ */
+static inline struct xbc_node * __init xbc_find_node(const char *key)
+{
+	return xbc_node_find_child(NULL, key);
+}
+
+/**
+ * xbc_array_for_each_value() - Iterate value nodes on an array
+ * @anode: An XBC arraied value node
+ * @value: A value
+ *
+ * Iterate array value nodes and values starts from @anode. This is expected to
+ * be used with xbc_find_value() and xbc_node_find_value(), so that user can
+ * process each array entry node.
+ */
+#define xbc_array_for_each_value(anode, value)				\
+	for (value = xbc_node_get_data(anode); anode != NULL ;		\
+	     anode = xbc_node_get_next(anode),				\
+	     value = anode ? xbc_node_get_data(anode) : NULL)
+
+/**
+ * xbc_node_for_each_child() - Iterate child nodes
+ * @parent: An XBC node.
+ * @child: Iterated XBC node.
+ *
+ * Iterate child nodes of @parent. Each child nodes are stored to @child.
+ */
+#define xbc_node_for_each_child(parent, child)				\
+	for (child = xbc_node_get_child(parent); child != NULL ;	\
+	     child = xbc_node_get_next(child))
+
+/**
+ * xbc_node_for_each_array_value() - Iterate array entries of geven key
+ * @node: An XBC node.
+ * @key: A key string searched under @node
+ * @anode: Iterated XBC node of array entry.
+ * @value: Iterated value of array entry.
+ *
+ * Iterate array entries of given @key under @node. Each array entry node
+ * is stroed to @anode and @value. If the @node doesn't have @key node,
+ * it does nothing.
+ * Note that even if the found key node has only one value (not array)
+ * this executes block once. Hoever, if the found key node has no value
+ * (key-only node), this does nothing. So don't use this for testing the
+ * key-value pair existence.
+ */
+#define xbc_node_for_each_array_value(node, key, anode, value)		\
+	for (value = xbc_node_find_value(node, key, &anode); value != NULL; \
+	     anode = xbc_node_get_next(anode),				\
+	     value = anode ? xbc_node_get_data(anode) : NULL)
+
+/**
+ * xbc_node_for_each_key_value() - Iterate key-value pairs under a node
+ * @node: An XBC node.
+ * @knode: Iterated key node
+ * @value: Iterated value string
+ *
+ * Iterate key-value pairs under @node. Each key node and value string are
+ * stored in @knode and @value respectively.
+ */
+#define xbc_node_for_each_key_value(node, knode, value)			\
+	for (knode = NULL, value = xbc_node_find_next_key_value(node, &knode);\
+	     knode != NULL; value = xbc_node_find_next_key_value(node, &knode))
+
+/**
+ * xbc_for_each_key_value() - Iterate key-value pairs
+ * @knode: Iterated key node
+ * @value: Iterated value string
+ *
+ * Iterate key-value pairs in whole XBC tree. Each key node and value string
+ * are stored in @knode and @value respectively.
+ */
+#define xbc_for_each_key_value(knode, value)				\
+	xbc_node_for_each_key_value(NULL, knode, value)
+
+/* Compose partial key */
+int __init xbc_node_compose_key_after(struct xbc_node *root,
+			struct xbc_node *node, char *buf, size_t size);
+
+/**
+ * xbc_node_compose_key() - Compose full key string of the XBC node
+ * @node: An XBC node.
+ * @buf: A buffer to store the key.
+ * @size: The size of the @buf.
+ *
+ * Compose the full-length key of the @node into @buf. Returns the total
+ * length of the key stored in @buf. Or returns -EINVAL if @node is NULL,
+ * and -ERANGE if the key depth is deeper than max depth.
+ */
+static inline int __init xbc_node_compose_key(struct xbc_node *node,
+					      char *buf, size_t size)
+{
+	return xbc_node_compose_key_after(NULL, node, buf, size);
+}
+
+/* XBC node initializer */
+int __init xbc_init(char *buf, const char **emsg, int *epos);
+
+
+/* XBC cleanup data structures */
+void __init xbc_destroy_all(void);
+
+/* Debug dump functions */
+void __init xbc_debug_dump(void);
+
+#endif
diff --git a/include/linux/bpf.h b/include/linux/bpf.h
index 7aa0d8b..80c2bf2 100644
--- a/include/linux/bpf.h
+++ b/include/linux/bpf.h
@@ -1046,6 +1046,7 @@ extern const struct bpf_func_proto bpf_get_smp_processor_id_proto;
 extern const struct bpf_func_proto bpf_get_numa_node_id_proto;
 extern const struct bpf_func_proto bpf_tail_call_proto;
 extern const struct bpf_func_proto bpf_ktime_get_ns_proto;
+extern const struct bpf_func_proto bpf_ktime_get_boot_ns_proto;
 extern const struct bpf_func_proto bpf_get_current_pid_tgid_proto;
 extern const struct bpf_func_proto bpf_get_current_uid_gid_proto;
 extern const struct bpf_func_proto bpf_get_current_comm_proto;
diff --git a/include/linux/cfi.h b/include/linux/cfi.h
new file mode 100644
index 0000000..6ef37b3
--- /dev/null
+++ b/include/linux/cfi.h
@@ -0,0 +1,44 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Clang Control Flow Integrity (CFI) support.
+ *
+ * Copyright (C) 2019 Google LLC
+ */
+#ifndef _LINUX_CFI_H
+#define _LINUX_CFI_H
+
+#include <linux/stringify.h>
+
+#ifdef CONFIG_CFI_CLANG
+#ifdef CONFIG_MODULES
+
+typedef void (*cfi_check_fn)(uint64_t id, void *ptr, void *diag);
+
+/* Compiler-generated function in each module, and the kernel */
+#define CFI_CHECK_FN		__cfi_check
+#define CFI_CHECK_FN_NAME	__stringify(CFI_CHECK_FN)
+
+extern void CFI_CHECK_FN(uint64_t id, void *ptr, void *diag);
+
+#ifdef CONFIG_CFI_CLANG_SHADOW
+extern void cfi_module_add(struct module *mod, unsigned long min_addr,
+	unsigned long max_addr);
+
+extern void cfi_module_remove(struct module *mod, unsigned long min_addr,
+	unsigned long max_addr);
+#else
+static inline void cfi_module_add(struct module *mod, unsigned long min_addr,
+	unsigned long max_addr)
+{
+}
+
+static inline void cfi_module_remove(struct module *mod, unsigned long min_addr,
+	unsigned long max_addr)
+{
+}
+#endif /* CONFIG_CFI_CLANG_SHADOW */
+
+#endif /* CONFIG_MODULES */
+#endif /* CONFIG_CFI_CLANG */
+
+#endif /* _LINUX_CFI_H */
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
index 2fdfe80..a789b23 100644
--- a/include/linux/clk-provider.h
+++ b/include/linux/clk-provider.h
@@ -32,6 +32,7 @@
 #define CLK_OPS_PARENT_ENABLE	BIT(12)
 /* duty cycle call may be forwarded to the parent clock */
 #define CLK_DUTY_CYCLE_PARENT	BIT(13)
+#define CLK_DONT_HOLD_STATE	BIT(14) /* Don't hold state */
 
 struct clk;
 struct clk_hw;
@@ -199,6 +200,13 @@ struct clk_duty {
  *		directory is provided as an argument.  Called with
  *		prepare_lock held.  Returns 0 on success, -EERROR otherwise.
  *
+ * @pre_rate_change: Optional callback for a clock to fulfill its rate
+ *		change requirements before any rate change has occurred in
+ *		its clock tree. Returns 0 on success, -EERROR otherwise.
+ *
+ * @post_rate_change: Optional callback for a clock to clean up any
+ *		requirements that were needed while the clock and its tree
+ *		was changing states. Returns 0 on success, -EERROR otherwise.
  *
  * The clk_enable/clk_disable and clk_prepare/clk_unprepare pairs allow
  * implementations to split any work between atomic (enable) and sleepable
@@ -245,6 +253,12 @@ struct clk_ops {
 					  struct clk_duty *duty);
 	void		(*init)(struct clk_hw *hw);
 	void		(*debug_init)(struct clk_hw *hw, struct dentry *dentry);
+	int		(*pre_rate_change)(struct clk_hw *hw,
+					   unsigned long rate,
+					   unsigned long new_rate);
+	int		(*post_rate_change)(struct clk_hw *hw,
+					    unsigned long old_rate,
+					    unsigned long rate);
 };
 
 /**
@@ -802,6 +816,7 @@ void devm_clk_unregister(struct device *dev, struct clk *clk);
 
 void clk_hw_unregister(struct clk_hw *hw);
 void devm_clk_hw_unregister(struct device *dev, struct clk_hw *hw);
+void clk_sync_state(struct device *dev);
 
 /* helper functions */
 const char *__clk_get_name(const struct clk *clk);
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h
index b21db53..a781edc 100644
--- a/include/linux/clocksource.h
+++ b/include/linux/clocksource.h
@@ -27,6 +27,8 @@ struct module;
 #include <asm/clocksource.h>
 #endif
 
+#include <vdso/clocksource.h>
+
 /**
  * struct clocksource - hardware abstraction for a free running counter
  *	Provides mostly state-free accessors to the underlying hardware.
diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h
index 0e06df2..ed99a09 100644
--- a/include/linux/compiler-clang.h
+++ b/include/linux/compiler-clang.h
@@ -36,3 +36,19 @@
     __has_builtin(__builtin_sub_overflow)
 #define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1
 #endif
+
+#if __has_feature(shadow_call_stack)
+# define __noscs	__attribute__((__no_sanitize__("shadow-call-stack")))
+#else
+# define __noscs
+#endif
+
+#ifdef CONFIG_LTO_CLANG
+#ifdef CONFIG_FTRACE_MCOUNT_RECORD
+#define __norecordmcount \
+	__attribute__((__section__(".text..ftrace")))
+#endif
+
+
+#define __nocfi		__attribute__((__no_sanitize__("cfi")))
+#endif
diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
index b94d08d..884d84a 100644
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -104,7 +104,7 @@ struct ftrace_likely_data {
 	unsigned long			constant;
 };
 
-#ifdef CONFIG_ENABLE_MUST_CHECK
+#if defined(CONFIG_ENABLE_MUST_CHECK) && !defined(__GENKSYMS__)
 #define __must_check		__attribute__((__warn_unused_result__))
 #else
 #define __must_check
@@ -206,6 +206,18 @@ struct ftrace_likely_data {
 # define randomized_struct_fields_end
 #endif
 
+#ifndef __noscs
+# define __noscs
+#endif
+
+#ifndef __norecordmcount
+# define __norecordmcount
+#endif
+
+#ifndef __nocfi
+# define __nocfi
+#endif
+
 #ifndef asm_volatile_goto
 #define asm_volatile_goto(x...) asm goto(x)
 #endif
diff --git a/include/linux/const.h b/include/linux/const.h
index 7b55a55..81b8aae 100644
--- a/include/linux/const.h
+++ b/include/linux/const.h
@@ -1,9 +1,6 @@
 #ifndef _LINUX_CONST_H
 #define _LINUX_CONST_H
 
-#include <uapi/linux/const.h>
-
-#define UL(x)		(_UL(x))
-#define ULL(x)		(_ULL(x))
+#include <vdso/const.h>
 
 #endif /* _LINUX_CONST_H */
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index 018dce8..486c1dd 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
@@ -201,9 +201,6 @@ static inline bool policy_is_shared(struct cpufreq_policy *policy)
 	return cpumask_weight(policy->cpus) > 1;
 }
 
-/* /sys/devices/system/cpu/cpufreq: entry point for global variables */
-extern struct kobject *cpufreq_global_kobject;
-
 #ifdef CONFIG_CPU_FREQ
 unsigned int cpufreq_get(unsigned int cpu);
 unsigned int cpufreq_quick_get(unsigned int cpu);
@@ -990,6 +987,8 @@ extern unsigned int arch_freq_get_on_cpu(int cpu);
 
 extern void arch_set_freq_scale(struct cpumask *cpus, unsigned long cur_freq,
 				unsigned long max_freq);
+extern void arch_set_max_freq_scale(struct cpumask *cpus,
+				    unsigned long policy_max_freq);
 
 /* the following are really really optional */
 extern struct freq_attr cpufreq_freq_attr_scaling_available_freqs;
diff --git a/include/linux/cpufreq_times.h b/include/linux/cpufreq_times.h
new file mode 100644
index 0000000..38272a5
--- /dev/null
+++ b/include/linux/cpufreq_times.h
@@ -0,0 +1,42 @@
+/* drivers/cpufreq/cpufreq_times.c
+ *
+ * Copyright (C) 2018 Google, Inc.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef _LINUX_CPUFREQ_TIMES_H
+#define _LINUX_CPUFREQ_TIMES_H
+
+#include <linux/cpufreq.h>
+#include <linux/pid.h>
+
+#ifdef CONFIG_CPU_FREQ_TIMES
+void cpufreq_task_times_init(struct task_struct *p);
+void cpufreq_task_times_alloc(struct task_struct *p);
+void cpufreq_task_times_exit(struct task_struct *p);
+int proc_time_in_state_show(struct seq_file *m, struct pid_namespace *ns,
+			    struct pid *pid, struct task_struct *p);
+void cpufreq_acct_update_power(struct task_struct *p, u64 cputime);
+void cpufreq_times_create_policy(struct cpufreq_policy *policy);
+void cpufreq_times_record_transition(struct cpufreq_policy *policy,
+                                     unsigned int new_freq);
+#else
+static inline void cpufreq_task_times_init(struct task_struct *p) {}
+static inline void cpufreq_task_times_alloc(struct task_struct *p) {}
+static inline void cpufreq_task_times_exit(struct task_struct *p) {}
+static inline void cpufreq_acct_update_power(struct task_struct *p,
+					     u64 cputime) {}
+static inline void cpufreq_times_create_policy(struct cpufreq_policy *policy) {}
+static inline void cpufreq_times_record_transition(
+	struct cpufreq_policy *policy, unsigned int new_freq) {}
+#endif /* CONFIG_CPU_FREQ_TIMES */
+#endif /* _LINUX_CPUFREQ_TIMES_H */
diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h
index 4b6b5be..cc3a188 100644
--- a/include/linux/cpuidle.h
+++ b/include/linux/cpuidle.h
@@ -61,10 +61,13 @@ struct cpuidle_state {
 	 * CPUs execute ->enter_s2idle with the local tick or entire timekeeping
 	 * suspended, so it must not re-enable interrupts at any point (even
 	 * temporarily) or attempt to change states of clock event devices.
+	 *
+	 * This callback may point to the same function as ->enter if all of
+	 * the above requirements are met by it.
 	 */
-	void (*enter_s2idle) (struct cpuidle_device *dev,
-			      struct cpuidle_driver *drv,
-			      int index);
+	int (*enter_s2idle)(struct cpuidle_device *dev,
+			    struct cpuidle_driver *drv,
+			    int index);
 };
 
 /* Idle State Flags */
diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h
index 04c20de66..7f1478c 100644
--- a/include/linux/cpuset.h
+++ b/include/linux/cpuset.h
@@ -55,8 +55,6 @@ extern void cpuset_init_smp(void);
 extern void cpuset_force_rebuild(void);
 extern void cpuset_update_active_cpus(void);
 extern void cpuset_wait_for_hotplug(void);
-extern void cpuset_read_lock(void);
-extern void cpuset_read_unlock(void);
 extern void cpuset_cpus_allowed(struct task_struct *p, struct cpumask *mask);
 extern void cpuset_cpus_allowed_fallback(struct task_struct *p);
 extern nodemask_t cpuset_mems_allowed(struct task_struct *p);
@@ -178,9 +176,6 @@ static inline void cpuset_update_active_cpus(void)
 
 static inline void cpuset_wait_for_hotplug(void) { }
 
-static inline void cpuset_read_lock(void) { }
-static inline void cpuset_read_unlock(void) { }
-
 static inline void cpuset_cpus_allowed(struct task_struct *p,
 				       struct cpumask *mask)
 {
diff --git a/include/linux/dcache.h b/include/linux/dcache.h
index 10090f1..f2feba2 100644
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -13,6 +13,7 @@
 #include <linux/lockref.h>
 #include <linux/stringhash.h>
 #include <linux/wait.h>
+#include <linux/android_kabi.h>
 
 struct path;
 struct vfsmount;
@@ -118,6 +119,9 @@ struct dentry {
 		struct hlist_bl_node d_in_lookup_hash;	/* only for in-lookup ones */
 	 	struct rcu_head d_rcu;
 	} d_u;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 } __randomize_layout;
 
 /*
@@ -147,6 +151,12 @@ struct dentry_operations {
 	struct vfsmount *(*d_automount)(struct path *);
 	int (*d_manage)(const struct path *, bool);
 	struct dentry *(*d_real)(struct dentry *, const struct inode *);
+	void (*d_canonical_path)(const struct path *, struct path *);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } ____cacheline_aligned;
 
 /*
@@ -211,7 +221,7 @@ struct dentry_operations {
 
 #define DCACHE_MAY_FREE			0x00800000
 #define DCACHE_FALLTHRU			0x01000000 /* Fall through to lower layer */
-#define DCACHE_ENCRYPTED_NAME		0x02000000 /* Encrypted name (dir key was unavailable) */
+#define DCACHE_NOKEY_NAME		0x02000000 /* Encrypted name encoded without key */
 #define DCACHE_OP_REAL			0x04000000
 
 #define DCACHE_PAR_LOOKUP		0x10000000 /* being looked up (with parent locked shared) */
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
index e4e1f5c..52d0a9d 100644
--- a/include/linux/device-mapper.h
+++ b/include/linux/device-mapper.h
@@ -17,6 +17,7 @@
 struct dm_dev;
 struct dm_target;
 struct dm_table;
+struct dm_report_zones_args;
 struct mapped_device;
 struct bio_vec;
 
@@ -93,9 +94,9 @@ typedef int (*dm_message_fn) (struct dm_target *ti, unsigned argc, char **argv,
 
 typedef int (*dm_prepare_ioctl_fn) (struct dm_target *ti, struct block_device **bdev);
 
-typedef int (*dm_report_zones_fn) (struct dm_target *ti, sector_t sector,
-				   struct blk_zone *zones,
-				   unsigned int *nr_zones);
+typedef int (*dm_report_zones_fn) (struct dm_target *ti,
+				   struct dm_report_zones_args *args,
+				   unsigned int nr_zones);
 
 /*
  * These iteration functions are typically used to check (and combine)
@@ -248,6 +249,12 @@ struct target_type {
 #define DM_TARGET_ZONED_HM		0x00000040
 #define dm_target_supports_zoned_hm(type) ((type)->features & DM_TARGET_ZONED_HM)
 
+/*
+ * A target supports passing through inline crypto support.
+ */
+#define DM_TARGET_PASSES_CRYPTO		0x00000100
+#define dm_target_passes_crypto(type) ((type)->features & DM_TARGET_PASSES_CRYPTO)
+
 struct dm_target {
 	struct dm_table *table;
 	struct target_type *type;
@@ -423,10 +430,23 @@ int dm_suspended(struct dm_target *ti);
 int dm_post_suspending(struct dm_target *ti);
 int dm_noflush_suspending(struct dm_target *ti);
 void dm_accept_partial_bio(struct bio *bio, unsigned n_sectors);
-void dm_remap_zone_report(struct dm_target *ti, sector_t start,
-			  struct blk_zone *zones, unsigned int *nr_zones);
 union map_info *dm_get_rq_mapinfo(struct request *rq);
 
+#ifdef CONFIG_BLK_DEV_ZONED
+struct dm_report_zones_args {
+	struct dm_target *tgt;
+	sector_t next_sector;
+
+	void *orig_data;
+	report_zones_cb orig_cb;
+	unsigned int zone_idx;
+
+	/* must be filled by ->report_zones before calling dm_report_zones_cb */
+	sector_t start;
+};
+int dm_report_zones_cb(struct blk_zone *zone, unsigned int idx, void *data);
+#endif /* CONFIG_BLK_DEV_ZONED */
+
 /*
  * Device mapper functions to parse and create devices specified by the
  * parameter "dm-mod.create="
@@ -521,6 +541,11 @@ struct dm_table *dm_swap_table(struct mapped_device *md,
 			       struct dm_table *t);
 
 /*
+ * Table keyslot manager functions
+ */
+void dm_destroy_keyslot_manager(struct blk_keyslot_manager *ksm);
+
+/*
  * A wrapper around vmalloc.
  */
 void *dm_vcalloc(unsigned long nmemb, unsigned long elem_size);
diff --git a/include/linux/device.h b/include/linux/device.h
index 297239a..659624b 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -26,6 +26,7 @@
 #include <linux/uidgid.h>
 #include <linux/gfp.h>
 #include <linux/overflow.h>
+#include <linux/android_kabi.h>
 #include <asm/device.h>
 
 struct device;
@@ -80,6 +81,13 @@ extern void bus_remove_file(struct bus_type *, struct bus_attribute *);
  *		that generate uevents to add the environment variables.
  * @probe:	Called when a new device or driver add to this bus, and callback
  *		the specific driver's probe to initial the matched device.
+ * @sync_state:	Called to sync device state to software state after all the
+ *		state tracking consumers linked to this device (present at
+ *		the time of late_initcall) have successfully bound to a
+ *		driver. If the device has no consumers, this function will
+ *		be called at late_initcall_sync level. If the device has
+ *		consumers that are never bound to a driver, this function
+ *		will never get called until they do.
  * @remove:	Called when a device removed from this bus.
  * @shutdown:	Called at shut-down time to quiesce the device.
  *
@@ -123,6 +131,7 @@ struct bus_type {
 	int (*match)(struct device *dev, struct device_driver *drv);
 	int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
 	int (*probe)(struct device *dev);
+	void (*sync_state)(struct device *dev);
 	int (*remove)(struct device *dev);
 	void (*shutdown)(struct device *dev);
 
@@ -144,6 +153,11 @@ struct bus_type {
 	struct lock_class_key lock_key;
 
 	bool need_parent_lock;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 extern int __must_check bus_register(struct bus_type *bus);
@@ -340,6 +354,13 @@ enum probe_type {
  * @probe:	Called to query the existence of a specific device,
  *		whether this driver can work with it, and bind the driver
  *		to a specific device.
+ * @sync_state:	Called to sync device state to software state after all the
+ *		state tracking consumers linked to this device (present at
+ *		the time of late_initcall) have successfully bound to a
+ *		driver. If the device has no consumers, this function will
+ *		be called at late_initcall_sync level. If the device has
+ *		consumers that are never bound to a driver, this function
+ *		will never get called until they do.
  * @remove:	Called when the device is removed from the system to
  *		unbind a device from this driver.
  * @shutdown:	Called at shut-down time to quiesce the device.
@@ -379,6 +400,7 @@ struct device_driver {
 	const struct acpi_device_id	*acpi_match_table;
 
 	int (*probe) (struct device *dev);
+	void (*sync_state)(struct device *dev);
 	int (*remove) (struct device *dev);
 	void (*shutdown) (struct device *dev);
 	int (*suspend) (struct device *dev, pm_message_t state);
@@ -390,6 +412,11 @@ struct device_driver {
 	void (*coredump) (struct device *dev);
 
 	struct driver_private *p;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 
@@ -594,6 +621,11 @@ struct class {
 	const struct dev_pm_ops *pm;
 
 	struct subsys_private *p;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct class_dev_iter {
@@ -1080,6 +1112,7 @@ enum device_link_state {
  * AUTOREMOVE_SUPPLIER: Remove the link automatically on supplier driver unbind.
  * AUTOPROBE_CONSUMER: Probe consumer driver automatically after supplier binds.
  * MANAGED: The core tracks presence of supplier/consumer drivers (internal).
+ * SYNC_STATE_ONLY: Link only affects sync_state() behavior.
  */
 #define DL_FLAG_STATELESS		BIT(0)
 #define DL_FLAG_AUTOREMOVE_CONSUMER	BIT(1)
@@ -1088,34 +1121,7 @@ enum device_link_state {
 #define DL_FLAG_AUTOREMOVE_SUPPLIER	BIT(4)
 #define DL_FLAG_AUTOPROBE_CONSUMER	BIT(5)
 #define DL_FLAG_MANAGED			BIT(6)
-
-/**
- * struct device_link - Device link representation.
- * @supplier: The device on the supplier end of the link.
- * @s_node: Hook to the supplier device's list of links to consumers.
- * @consumer: The device on the consumer end of the link.
- * @c_node: Hook to the consumer device's list of links to suppliers.
- * @status: The state of the link (with respect to the presence of drivers).
- * @flags: Link flags.
- * @rpm_active: Whether or not the consumer device is runtime-PM-active.
- * @kref: Count repeated addition of the same link.
- * @rcu_head: An RCU head to use for deferred execution of SRCU callbacks.
- * @supplier_preactivated: Supplier has been made active before consumer probe.
- */
-struct device_link {
-	struct device *supplier;
-	struct list_head s_node;
-	struct device *consumer;
-	struct list_head c_node;
-	enum device_link_state status;
-	u32 flags;
-	refcount_t rpm_active;
-	struct kref kref;
-#ifdef CONFIG_SRCU
-	struct rcu_head rcu_head;
-#endif
-	bool supplier_preactivated; /* Owned by consumer probe. */
-};
+#define DL_FLAG_SYNC_STATE_ONLY		BIT(7)
 
 /**
  * enum dl_dev_state - Device driver presence tracking information.
@@ -1135,12 +1141,25 @@ enum dl_dev_state {
  * struct dev_links_info - Device data related to device links.
  * @suppliers: List of links to supplier devices.
  * @consumers: List of links to consumer devices.
+ * @needs_suppliers: Hook to global list of devices waiting for suppliers.
+ * @defer_hook: Hook to global list of devices that have deferred sync_state or
+ *		deferred fw_devlink.
+ * @need_for_probe: If needs_suppliers is on a list, this indicates if the
+ *		    suppliers are needed for probe or not.
  * @status: Driver status information.
  */
 struct dev_links_info {
 	struct list_head suppliers;
 	struct list_head consumers;
+	struct list_head needs_suppliers;
+	struct list_head defer_hook;
+	bool need_for_probe;
 	enum dl_dev_state status;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /**
@@ -1215,6 +1234,9 @@ struct dev_links_info {
  * @offline:	Set after successful invocation of bus type's .offline().
  * @of_node_reused: Set if the device-tree node is shared with an ancestor
  *              device.
+ * @state_synced: The hardware state of this device has been synced to match
+ *		  the software state of this device by calling the driver/bus
+ *		  sync_state() callback.
  * @dma_coherent: this particular device is dma coherent, even if the
  *		architecture supports non-coherent devices.
  *
@@ -1311,11 +1333,55 @@ struct device {
 	bool			offline_disabled:1;
 	bool			offline:1;
 	bool			of_node_reused:1;
+	bool			state_synced:1;
 #if defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE) || \
     defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU) || \
     defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL)
 	bool			dma_coherent:1;
 #endif
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+	ANDROID_KABI_RESERVE(5);
+	ANDROID_KABI_RESERVE(6);
+	ANDROID_KABI_RESERVE(7);
+	ANDROID_KABI_RESERVE(8);
+};
+
+/**
+ * struct device_link - Device link representation.
+ * @supplier: The device on the supplier end of the link.
+ * @s_node: Hook to the supplier device's list of links to consumers.
+ * @consumer: The device on the consumer end of the link.
+ * @c_node: Hook to the consumer device's list of links to suppliers.
+ * @link_dev: device used to expose link details in sysfs
+ * @status: The state of the link (with respect to the presence of drivers).
+ * @flags: Link flags.
+ * @rpm_active: Whether or not the consumer device is runtime-PM-active.
+ * @kref: Count repeated addition of the same link.
+ * @rcu_head: An RCU head to use for deferred execution of SRCU callbacks.
+ * @supplier_preactivated: Supplier has been made active before consumer probe.
+ */
+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;
+#ifdef CONFIG_SRCU
+	struct rcu_head rcu_head;
+#endif
+	bool supplier_preactivated; /* Owned by consumer probe. */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 static inline struct device *kobj_to_dev(struct kobject *kobj)
@@ -1489,6 +1555,17 @@ static inline struct device_node *dev_of_node(struct device *dev)
 	return dev->of_node;
 }
 
+static inline bool dev_has_sync_state(struct device *dev)
+{
+	if (!dev)
+		return false;
+	if (dev->driver && dev->driver->sync_state)
+		return true;
+	if (dev->bus && dev->bus->sync_state)
+		return true;
+	return false;
+}
+
 void driver_init(void);
 
 /*
@@ -1653,6 +1730,8 @@ struct device_link *device_link_add(struct device *consumer,
 				    struct device *supplier, u32 flags);
 void device_link_del(struct device_link *link);
 void device_link_remove(void *consumer, struct device *supplier);
+void device_links_supplier_sync_state_pause(void);
+void device_links_supplier_sync_state_resume(void);
 
 #ifndef dev_fmt
 #define dev_fmt(fmt) fmt
@@ -1746,7 +1825,8 @@ void _dev_info(const struct device *dev, const char *fmt, ...)
 #define dev_info(dev, fmt, ...)						\
 	_dev_info(dev, dev_fmt(fmt), ##__VA_ARGS__)
 
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 #define dev_dbg(dev, fmt, ...)						\
 	dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__)
 #elif defined(DEBUG)
@@ -1818,7 +1898,8 @@ do {									\
 	dev_level_ratelimited(dev_notice, dev, fmt, ##__VA_ARGS__)
 #define dev_info_ratelimited(dev, fmt, ...)				\
 	dev_level_ratelimited(dev_info, dev, fmt, ##__VA_ARGS__)
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 /* descriptor check is first to prevent flooding with "callbacks suppressed" */
 #define dev_dbg_ratelimited(dev, fmt, ...)				\
 do {									\
diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
index 12eac42..b0e8c96 100644
--- a/include/linux/dma-buf.h
+++ b/include/linux/dma-buf.h
@@ -179,6 +179,41 @@ struct dma_buf_ops {
 	int (*begin_cpu_access)(struct dma_buf *, enum dma_data_direction);
 
 	/**
+	 * @begin_cpu_access_partial:
+	 *
+	 * This is called from dma_buf_begin_cpu_access_partial() and allows the
+	 * exporter to ensure that the memory specified in the range is
+	 * available for cpu access - the exporter might need to allocate or
+	 * swap-in and pin the backing storage.
+	 * The exporter also needs to ensure that cpu access is
+	 * coherent for the access direction. The direction can be used by the
+	 * exporter to optimize the cache flushing, i.e. access with a different
+	 * direction (read instead of write) might return stale or even bogus
+	 * data (e.g. when the exporter needs to copy the data to temporary
+	 * storage).
+	 *
+	 * This callback is optional.
+	 *
+	 * FIXME: This is both called through the DMA_BUF_IOCTL_SYNC command
+	 * from userspace (where storage shouldn't be pinned to avoid handing
+	 * de-factor mlock rights to userspace) and for the kernel-internal
+	 * users of the various kmap interfaces, where the backing storage must
+	 * be pinned to guarantee that the atomic kmap calls can succeed. Since
+	 * there's no in-kernel users of the kmap interfaces yet this isn't a
+	 * real problem.
+	 *
+	 * Returns:
+	 *
+	 * 0 on success or a negative error code on failure. This can for
+	 * example fail when the backing storage can't be allocated. Can also
+	 * return -ERESTARTSYS or -EINTR when the call has been interrupted and
+	 * needs to be restarted.
+	 */
+	int (*begin_cpu_access_partial)(struct dma_buf *dmabuf,
+					enum dma_data_direction,
+					unsigned int offset, unsigned int len);
+
+	/**
 	 * @end_cpu_access:
 	 *
 	 * This is called from dma_buf_end_cpu_access() when the importer is
@@ -198,6 +233,28 @@ struct dma_buf_ops {
 	int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
 
 	/**
+	 * @end_cpu_access_partial:
+	 *
+	 * This is called from dma_buf_end_cpu_access_partial() when the
+	 * importer is done accessing the CPU. The exporter can use to limit
+	 * cache flushing to only the range specefied and to unpin any
+	 * resources pinned in @begin_cpu_access_umapped.
+	 * The result of any dma_buf kmap calls after end_cpu_access_partial is
+	 * undefined.
+	 *
+	 * This callback is optional.
+	 *
+	 * Returns:
+	 *
+	 * 0 on success or a negative error code on failure. Can return
+	 * -ERESTARTSYS or -EINTR when the call has been interrupted and needs
+	 * to be restarted.
+	 */
+	int (*end_cpu_access_partial)(struct dma_buf *dmabuf,
+				      enum dma_data_direction,
+				      unsigned int offset, unsigned int len);
+
+	/**
 	 * @mmap:
 	 *
 	 * This callback is used by the dma_buf_mmap() function
@@ -261,6 +318,35 @@ struct dma_buf_ops {
 
 	void *(*vmap)(struct dma_buf *);
 	void (*vunmap)(struct dma_buf *, void *vaddr);
+
+	/**
+	 * @get_uuid
+	 *
+	 * This is called by dma_buf_get_uuid to get the UUID which identifies
+	 * the buffer to virtio devices.
+	 *
+	 * This callback is optional.
+	 *
+	 * Returns:
+	 *
+	 * 0 on success or a negative error code on failure. On success uuid
+	 * will be populated with the buffer's UUID.
+	 */
+	int (*get_uuid)(struct dma_buf *dmabuf, uuid_t *uuid);
+
+	/**
+	 * @get_flags:
+	 *
+	 * This is called by dma_buf_get_flags and is used to get the buffer's
+	 * flags.
+	 * This callback is optional.
+	 *
+	 * Returns:
+	 *
+	 * 0 on success or a negative error code on failure. On success flags
+	 * will be populated with the buffer's flags.
+	 */
+	int (*get_flags)(struct dma_buf *dmabuf, unsigned long *flags);
 };
 
 /**
@@ -283,6 +369,12 @@ struct dma_buf_ops {
  * @poll: for userspace poll support
  * @cb_excl: for userspace poll support
  * @cb_shared: for userspace poll support
+ * @sysfs_entry: for exposing information about this buffer in sysfs.
+ * The attachment_uid member of @sysfs_entry is protected by dma_resv lock
+ * and is incremented on each attach.
+ * @mmap_count: number of times buffer has been mmapped.
+ * @exp_vm_ops: the vm ops provided by the buffer exporter.
+ * @vm_ops: the overridden vm_ops used to track mmap_count of the buffer.
  *
  * This represents a shared buffer, created by calling dma_buf_export(). The
  * userspace representation is a normal file descriptor, which can be created by
@@ -318,6 +410,18 @@ struct dma_buf {
 
 		__poll_t active;
 	} cb_excl, cb_shared;
+#ifdef CONFIG_DMABUF_SYSFS_STATS
+	/* for sysfs stats */
+	struct dma_buf_sysfs_entry {
+		struct kobject kobj;
+		struct dma_buf *dmabuf;
+		unsigned int attachment_uid;
+		struct kset *attach_stats_kset;
+	} *sysfs_entry;
+	int mmap_count;
+	const struct vm_operations_struct *exp_vm_ops;
+	struct vm_operations_struct vm_ops;
+#endif
 };
 
 /**
@@ -328,6 +432,9 @@ struct dma_buf {
  * @sgt: cached mapping.
  * @dir: direction of cached mapping.
  * @priv: exporter specific attachment data.
+ * @dma_map_attrs: DMA attributes to be used when the exporter maps the buffer
+ * through dma_buf_map_attachment.
+ * @sysfs_entry: For exposing information about this attachment in sysfs.
  *
  * This structure holds the attachment information between the dma_buf buffer
  * and its user device(s). The list contains one attachment struct per device
@@ -345,6 +452,14 @@ struct dma_buf_attachment {
 	struct sg_table *sgt;
 	enum dma_data_direction dir;
 	void *priv;
+	unsigned long dma_map_attrs;
+#ifdef CONFIG_DMABUF_SYSFS_STATS
+	/* for sysfs stats */
+	struct dma_buf_attach_sysfs_entry {
+		struct kobject kobj;
+		unsigned int map_counter;
+	} *sysfs_entry;
+#endif
 };
 
 /**
@@ -412,8 +527,14 @@ void dma_buf_unmap_attachment(struct dma_buf_attachment *, struct sg_table *,
 				enum dma_data_direction);
 int dma_buf_begin_cpu_access(struct dma_buf *dma_buf,
 			     enum dma_data_direction dir);
+int dma_buf_begin_cpu_access_partial(struct dma_buf *dma_buf,
+				     enum dma_data_direction dir,
+				     unsigned int offset, unsigned int len);
 int dma_buf_end_cpu_access(struct dma_buf *dma_buf,
 			   enum dma_data_direction dir);
+int dma_buf_end_cpu_access_partial(struct dma_buf *dma_buf,
+				     enum dma_data_direction dir,
+				     unsigned int offset, unsigned int len);
 void *dma_buf_kmap(struct dma_buf *, unsigned long);
 void dma_buf_kunmap(struct dma_buf *, unsigned long, void *);
 
@@ -421,4 +542,7 @@ int dma_buf_mmap(struct dma_buf *, struct vm_area_struct *,
 		 unsigned long);
 void *dma_buf_vmap(struct dma_buf *);
 void dma_buf_vunmap(struct dma_buf *, void *vaddr);
+int dma_buf_get_flags(struct dma_buf *dmabuf, unsigned long *flags);
+int dma_buf_get_uuid(struct dma_buf *dmabuf, uuid_t *uuid);
+
 #endif /* __DMA_BUF_H__ */
diff --git a/include/linux/dma-heap.h b/include/linux/dma-heap.h
new file mode 100644
index 0000000..47ffce6
--- /dev/null
+++ b/include/linux/dma-heap.h
@@ -0,0 +1,122 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * DMABUF Heaps Allocation Infrastructure
+ *
+ * Copyright (C) 2011 Google, Inc.
+ * Copyright (C) 2019 Linaro Ltd.
+ */
+
+#ifndef _DMA_HEAPS_H
+#define _DMA_HEAPS_H
+
+#include <linux/cdev.h>
+#include <linux/types.h>
+
+struct dma_heap;
+
+/**
+ * struct dma_heap_ops - ops to operate on a given heap
+ * @allocate:		allocate dmabuf and return struct dma_buf ptr
+ *
+ * allocate returns dmabuf on success, ERR_PTR(-errno) on error.
+ */
+struct dma_heap_ops {
+	struct dma_buf *(*allocate)(struct dma_heap *heap,
+			unsigned long len,
+			unsigned long fd_flags,
+			unsigned long heap_flags);
+};
+
+/**
+ * struct dma_heap_export_info - information needed to export a new dmabuf heap
+ * @name:	used for debugging/device-node name
+ * @ops:	ops struct for this heap
+ * @priv:	heap exporter private data
+ *
+ * Information needed to export a new dmabuf heap.
+ */
+struct dma_heap_export_info {
+	const char *name;
+	const struct dma_heap_ops *ops;
+	void *priv;
+};
+
+/**
+ * dma_heap_get_drvdata() - get per-heap driver data
+ * @heap: DMA-Heap to retrieve private data for
+ *
+ * Returns:
+ * The per-heap data for the heap.
+ */
+void *dma_heap_get_drvdata(struct dma_heap *heap);
+
+/**
+ * dma_heap_get_dev() - get device struct for the heap
+ * @heap: DMA-Heap to retrieve device struct from
+ *
+ * Returns:
+ * The device struct for the heap.
+ */
+struct device *dma_heap_get_dev(struct dma_heap *heap);
+
+/**
+ * dma_heap_get_name() - get heap name
+ * @heap: DMA-Heap to retrieve private data for
+ *
+ * Returns:
+ * The char* for the heap name.
+ */
+const char *dma_heap_get_name(struct dma_heap *heap);
+
+/**
+ * dma_heap_add - adds a heap to dmabuf heaps
+ * @exp_info:		information needed to register this heap
+ */
+struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info);
+
+/**
+ * dma_heap_put - drops a reference to a dmabuf heaps, potentially freeing it
+ * @heap:		heap pointer
+ */
+void dma_heap_put(struct dma_heap *heap);
+
+/**
+ * dma_heap_find - Returns the registered dma_heap with the specified name
+ * @name: Name of the heap to find
+ *
+ * NOTE: dma_heaps returned from this function MUST be released
+ * using dma_heap_put() when the user is done.
+ */
+struct dma_heap *dma_heap_find(const char *name);
+
+/**
+ * dma_heap_buffer_alloc - Allocate dma-buf from a dma_heap
+ * @heap:	dma_heap to allocate from
+ * @len:	size to allocate
+ * @fd_flags:	flags to set on returned dma-buf fd
+ * @heap_flags:	flags to pass to the dma heap
+ *
+ * This is for internal dma-buf allocations only.
+ */
+struct dma_buf *dma_heap_buffer_alloc(struct dma_heap *heap, size_t len,
+				      unsigned int fd_flags,
+				      unsigned int heap_flags);
+
+/** dma_heap_buffer_free - Free dma_buf allocated by dma_heap_buffer_alloc
+ * @dma_buf:	dma_buf to free
+ *
+ * This is really only a simple wrapper to dma_buf_put()
+ */
+void dma_heap_buffer_free(struct dma_buf *);
+
+/**
+ * dma_heap_bufferfd_alloc - Allocate dma-buf fd from a dma_heap
+ * @heap:	dma_heap to allocate from
+ * @len:	size to allocate
+ * @fd_flags:	flags to set on returned dma-buf fd
+ * @heap_flags:	flags to pass to the dma heap
+ */
+int dma_heap_bufferfd_alloc(struct dma_heap *heap, size_t len,
+			    unsigned int fd_flags,
+			    unsigned int heap_flags);
+#endif /* _DMA_HEAPS_H */
diff --git a/include/linux/dma-iommu.h b/include/linux/dma-iommu.h
index 2112f21..f51561ed 100644
--- a/include/linux/dma-iommu.h
+++ b/include/linux/dma-iommu.h
@@ -37,6 +37,11 @@ void iommu_dma_compose_msi_msg(struct msi_desc *desc,
 
 void iommu_dma_get_resv_regions(struct device *dev, struct list_head *list);
 
+int iommu_dma_reserve_iova(struct device *dev, dma_addr_t base,
+			   u64 size);
+
+int iommu_dma_enable_best_fit_algo(struct device *dev);
+
 #else /* CONFIG_IOMMU_DMA */
 
 struct iommu_domain;
@@ -78,5 +83,16 @@ static inline void iommu_dma_get_resv_regions(struct device *dev, struct list_he
 {
 }
 
+static inline int iommu_dma_reserve_iova(struct device *dev, dma_addr_t base,
+					 u64 size)
+{
+	return -ENODEV;
+}
+
+static inline int iommu_dma_enable_best_fit_algo(struct device *dev)
+{
+	return -ENODEV;
+}
+
 #endif	/* CONFIG_IOMMU_DMA */
 #endif	/* __DMA_IOMMU_H */
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index 4d450672..6e119c3 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -11,6 +11,7 @@
 #include <linux/scatterlist.h>
 #include <linux/bug.h>
 #include <linux/mem_encrypt.h>
+#include <linux/android_kabi.h>
 
 /**
  * List of possible attributes associated with a DMA mapping. The semantics
@@ -132,6 +133,11 @@ struct dma_map_ops {
 	u64 (*get_required_mask)(struct device *dev);
 	size_t (*max_mapping_size)(struct device *dev);
 	unsigned long (*get_merge_boundary)(struct device *dev);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 #define DMA_MAPPING_ERROR		(~(dma_addr_t)0)
@@ -612,6 +618,86 @@ static inline void dma_sync_single_range_for_device(struct device *dev,
 	return dma_sync_single_for_device(dev, addr + offset, size, dir);
 }
 
+/**
+ * dma_map_sgtable - Map the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ * @attrs:	Optional DMA attributes for the map operation
+ *
+ * Maps a buffer described by a scatterlist stored in the given sg_table
+ * object for the @dir DMA operation by the @dev device. After success the
+ * ownership for the buffer is transferred to the DMA domain.  One has to
+ * call dma_sync_sgtable_for_cpu() or dma_unmap_sgtable() to move the
+ * ownership of the buffer back to the CPU domain before touching the
+ * buffer by the CPU.
+ *
+ * Returns 0 on success or -EINVAL on error during mapping the buffer.
+ */
+static inline int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
+		enum dma_data_direction dir, unsigned long attrs)
+{
+	int nents;
+
+	nents = dma_map_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
+	if (nents <= 0)
+		return -EINVAL;
+	sgt->nents = nents;
+	return 0;
+}
+
+/**
+ * dma_unmap_sgtable - Unmap the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ * @attrs:	Optional DMA attributes for the unmap operation
+ *
+ * Unmaps a buffer described by a scatterlist stored in the given sg_table
+ * object for the @dir DMA operation by the @dev device. After this function
+ * the ownership of the buffer is transferred back to the CPU domain.
+ */
+static inline void dma_unmap_sgtable(struct device *dev, struct sg_table *sgt,
+		enum dma_data_direction dir, unsigned long attrs)
+{
+	dma_unmap_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
+}
+
+/**
+ * dma_sync_sgtable_for_cpu - Synchronize the given buffer for CPU access
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ *
+ * Performs the needed cache synchronization and moves the ownership of the
+ * buffer back to the CPU domain, so it is safe to perform any access to it
+ * by the CPU. Before doing any further DMA operations, one has to transfer
+ * the ownership of the buffer back to the DMA domain by calling the
+ * dma_sync_sgtable_for_device().
+ */
+static inline void dma_sync_sgtable_for_cpu(struct device *dev,
+		struct sg_table *sgt, enum dma_data_direction dir)
+{
+	dma_sync_sg_for_cpu(dev, sgt->sgl, sgt->orig_nents, dir);
+}
+
+/**
+ * dma_sync_sgtable_for_device - Synchronize the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ *
+ * Performs the needed cache synchronization and moves the ownership of the
+ * buffer back to the DMA domain, so it is safe to perform the DMA operation.
+ * Once finished, one has to call dma_sync_sgtable_for_cpu() or
+ * dma_unmap_sgtable().
+ */
+static inline void dma_sync_sgtable_for_device(struct device *dev,
+		struct sg_table *sgt, enum dma_data_direction dir)
+{
+	dma_sync_sg_for_device(dev, sgt->sgl, sgt->orig_nents, dir);
+}
+
 #define dma_map_single(d, a, s, r) dma_map_single_attrs(d, a, s, r, 0)
 #define dma_unmap_single(d, a, s, r) dma_unmap_single_attrs(d, a, s, r, 0)
 #define dma_map_sg(d, s, n, r) dma_map_sg_attrs(d, s, n, r, 0)
diff --git a/include/linux/dma/sprd-dma.h b/include/linux/dma/sprd-dma.h
index ab82df6..d09c6f6 100644
--- a/include/linux/dma/sprd-dma.h
+++ b/include/linux/dma/sprd-dma.h
@@ -118,6 +118,9 @@ enum sprd_dma_int_type {
  * struct sprd_dma_linklist - DMA link-list address structure
  * @virt_addr: link-list virtual address to configure link-list node
  * @phy_addr: link-list physical address to link DMA transfer
+ * @wrap_addr: the wrap address for link-list mode, which means once the
+ * transfer address reaches the wrap address, the next transfer address
+ * will jump to the address specified by wrap_to register.
  *
  * The Spreadtrum DMA controller supports the link-list mode, that means slaves
  * can supply several groups configurations (each configuration represents one
@@ -181,6 +184,7 @@ enum sprd_dma_int_type {
 struct sprd_dma_linklist {
 	unsigned long virt_addr;
 	phys_addr_t phy_addr;
+	phys_addr_t wrap_addr;
 };
 
 #endif
diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
index 4cf02ec..abcd5fd 100644
--- a/include/linux/dynamic_debug.h
+++ b/include/linux/dynamic_debug.h
@@ -48,7 +48,7 @@ struct _ddebug {
 
 
 
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG_CORE)
 int ddebug_add_module(struct _ddebug *tab, unsigned int n,
 				const char *modname);
 extern int ddebug_remove_module(const char *mod_name);
diff --git a/include/linux/elevator.h b/include/linux/elevator.h
index 901bda35..054d765 100644
--- a/include/linux/elevator.h
+++ b/include/linux/elevator.h
@@ -4,6 +4,7 @@
 
 #include <linux/percpu.h>
 #include <linux/hashtable.h>
+#include <linux/android_kabi.h>
 
 #ifdef CONFIG_BLOCK
 
@@ -50,6 +51,11 @@ struct elevator_mq_ops {
 	struct request *(*next_request)(struct request_queue *, struct request *);
 	void (*init_icq)(struct io_cq *);
 	void (*exit_icq)(struct io_cq *);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 #define ELV_NAME_MAX	(16)
@@ -86,6 +92,9 @@ struct elevator_type
 	/* managed by elevator core */
 	char icq_cache_name[ELV_NAME_MAX + 6];	/* elvname + "_io_cq" */
 	struct list_head list;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 #define ELV_HASH_BITS 6
diff --git a/include/linux/elfnote.h b/include/linux/elfnote.h
index 7fdd7f3..69b136e 100644
--- a/include/linux/elfnote.h
+++ b/include/linux/elfnote.h
@@ -59,7 +59,7 @@
 	ELFNOTE_END
 
 #else	/* !__ASSEMBLER__ */
-#include <linux/elf.h>
+#include <uapi/linux/elf.h>
 /*
  * Use an anonymous structure which matches the shape of
  * Elf{32,64}_Nhdr, but includes the name and desc data.  The size and
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
index 95991e43..75e0b00 100644
--- a/include/linux/ethtool.h
+++ b/include/linux/ethtool.h
@@ -15,6 +15,7 @@
 
 #include <linux/bitmap.h>
 #include <linux/compat.h>
+#include <linux/android_kabi.h>
 #include <uapi/linux/ethtool.h>
 
 #ifdef CONFIG_COMPAT
@@ -404,6 +405,11 @@ struct ethtool_ops {
 				      struct ethtool_fecparam *);
 	void	(*get_ethtool_phy_stats)(struct net_device *,
 					 struct ethtool_stats *, u64 *);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct ethtool_rx_flow_rule {
diff --git a/include/linux/export.h b/include/linux/export.h
index 941d075..9f5de83 100644
--- a/include/linux/export.h
+++ b/include/linux/export.h
@@ -129,7 +129,7 @@ struct kernel_symbol {
 #define __EXPORT_SYMBOL_NS(sym, sec, ns)
 #define __EXPORT_SYMBOL(sym, sec)
 
-#elif defined(CONFIG_TRIM_UNUSED_KSYMS)
+#elif defined(CONFIG_TRIM_UNUSED_KSYMS) && !defined(MODULE)
 
 #include <generated/autoksyms.h>
 
diff --git a/include/linux/extcon.h b/include/linux/extcon.h
index 2bdf643..32a558b 100644
--- a/include/linux/extcon.h
+++ b/include/linux/extcon.h
@@ -286,6 +286,11 @@ static inline struct extcon_dev *extcon_get_edev_by_phandle(struct device *dev,
 {
 	return ERR_PTR(-ENODEV);
 }
+
+static inline const char *extcon_get_edev_name(struct extcon_dev *edev)
+{
+	return NULL;
+}
 #endif /* CONFIG_EXTCON */
 
 /*
diff --git a/include/linux/f2fs_fs.h b/include/linux/f2fs_fs.h
index 6bb6f71..7dc2a06 100644
--- a/include/linux/f2fs_fs.h
+++ b/include/linux/f2fs_fs.h
@@ -23,6 +23,7 @@
 
 #define NULL_ADDR		((block_t)0)	/* used as block_t addresses */
 #define NEW_ADDR		((block_t)-1)	/* used as block_t addresses */
+#define COMPRESS_ADDR		((block_t)-2)	/* used as compressed data flag */
 
 #define F2FS_BYTES_TO_BLK(bytes)	((bytes) >> F2FS_BLKSIZE_BITS)
 #define F2FS_BLK_TO_BYTES(blk)		((blk) << F2FS_BLKSIZE_BITS)
@@ -37,9 +38,6 @@
 #define F2FS_MAX_QUOTAS		3
 
 #define F2FS_ENC_UTF8_12_1	1
-#define F2FS_ENC_STRICT_MODE_FL	(1 << 0)
-#define f2fs_has_strict_mode(sbi) \
-	(sbi->s_encoding_flags & F2FS_ENC_STRICT_MODE_FL)
 
 #define F2FS_IO_SIZE(sbi)	(1 << F2FS_OPTION(sbi).write_io_size_bits) /* Blocks */
 #define F2FS_IO_SIZE_KB(sbi)	(1 << (F2FS_OPTION(sbi).write_io_size_bits + 2)) /* KB */
@@ -272,6 +270,10 @@ struct f2fs_inode {
 			__le32 i_inode_checksum;/* inode meta checksum */
 			__le64 i_crtime;	/* creation time */
 			__le32 i_crtime_nsec;	/* creation time in nano scale */
+			__le64 i_compr_blocks;	/* # of compressed blocks */
+			__u8 i_compress_algorithm;	/* compress algorithm */
+			__u8 i_log_cluster_size;	/* log of cluster size */
+			__le16 i_compress_flag;		/* compress flag */
 			__le32 i_extra_end[0];	/* for attribute size calculation */
 		} __packed;
 		__le32 i_addr[DEF_ADDRS_PER_INODE];	/* Pointers to data blocks */
diff --git a/include/linux/filter.h b/include/linux/filter.h
index 79830bc..4caaa97 100644
--- a/include/linux/filter.h
+++ b/include/linux/filter.h
@@ -511,7 +511,12 @@ struct sock_fprog_kern {
 	struct sock_filter	*filter;
 };
 
+#define BPF_BINARY_HEADER_MAGIC	0x05de0e82
+
 struct bpf_binary_header {
+#ifdef CONFIG_CFI_CLANG
+	u32 magic;
+#endif
 	u32 pages;
 	/* Some arches need word alignment for their instructions */
 	u8 image[] __aligned(4);
@@ -553,20 +558,75 @@ struct sk_filter {
 
 DECLARE_STATIC_KEY_FALSE(bpf_stats_enabled_key);
 
+#if IS_ENABLED(CONFIG_BPF_JIT) && IS_ENABLED(CONFIG_CFI_CLANG)
+/*
+ * With JIT, the kernel makes an indirect call to dynamically generated
+ * code. Use bpf_call_func to perform additional validation of the call
+ * target to narrow down attack surface. Architectures implementing BPF
+ * JIT can override arch_bpf_jit_check_func for arch-specific checking.
+ */
+extern bool arch_bpf_jit_check_func(const struct bpf_prog *prog);
+
+static inline unsigned int __bpf_call_func(const struct bpf_prog *prog,
+					   const void *ctx)
+{
+	/* Call interpreter with CFI checking. */
+	return prog->bpf_func(ctx, prog->insnsi);
+}
+
+static inline struct bpf_binary_header *
+bpf_jit_binary_hdr(const struct bpf_prog *fp);
+
+static inline unsigned int __nocfi bpf_call_func(const struct bpf_prog *prog,
+						 const void *ctx)
+{
+	const struct bpf_binary_header *hdr = bpf_jit_binary_hdr(prog);
+
+	if (!IS_ENABLED(CONFIG_BPF_JIT_ALWAYS_ON) && !prog->jited)
+		return __bpf_call_func(prog, ctx);
+
+	/*
+	 * We are about to call dynamically generated code. Check that the
+	 * page has bpf_binary_header with a valid magic to limit possible
+	 * call targets.
+	 */
+	BUG_ON(hdr->magic != BPF_BINARY_HEADER_MAGIC ||
+		!arch_bpf_jit_check_func(prog));
+
+	/* Call jited function without CFI checking. */
+	return prog->bpf_func(ctx, prog->insnsi);
+}
+
+static inline void bpf_jit_set_header_magic(struct bpf_binary_header *hdr)
+{
+	hdr->magic = BPF_BINARY_HEADER_MAGIC;
+}
+#else
+static inline unsigned int bpf_call_func(const struct bpf_prog *prog,
+					 const void *ctx)
+{
+	return prog->bpf_func(ctx, prog->insnsi);
+}
+
+static inline void bpf_jit_set_header_magic(struct bpf_binary_header *hdr)
+{
+}
+#endif
+
 #define BPF_PROG_RUN(prog, ctx)	({				\
 	u32 ret;						\
 	cant_sleep();						\
 	if (static_branch_unlikely(&bpf_stats_enabled_key)) {	\
 		struct bpf_prog_stats *stats;			\
 		u64 start = sched_clock();			\
-		ret = (*(prog)->bpf_func)(ctx, (prog)->insnsi);	\
+		ret = bpf_call_func(prog, ctx);			\
 		stats = this_cpu_ptr(prog->aux->stats);		\
 		u64_stats_update_begin(&stats->syncp);		\
 		stats->cnt++;					\
 		stats->nsecs += sched_clock() - start;		\
 		u64_stats_update_end(&stats->syncp);		\
 	} else {						\
-		ret = (*(prog)->bpf_func)(ctx, (prog)->insnsi);	\
+		ret = bpf_call_func(prog, ctx);			\
 	}							\
 	ret; })
 
diff --git a/include/linux/fs.h b/include/linux/fs.h
index ef118b8..0d37167 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -40,6 +40,7 @@
 #include <linux/fs_types.h>
 #include <linux/build_bug.h>
 #include <linux/stddef.h>
+#include <linux/android_kabi.h>
 
 #include <asm/byteorder.h>
 #include <uapi/linux/fs.h>
@@ -306,14 +307,20 @@ enum rw_hint {
 	WRITE_LIFE_EXTREME	= RWH_WRITE_LIFE_EXTREME,
 };
 
-#define IOCB_EVENTFD		(1 << 0)
-#define IOCB_APPEND		(1 << 1)
-#define IOCB_DIRECT		(1 << 2)
-#define IOCB_HIPRI		(1 << 3)
-#define IOCB_DSYNC		(1 << 4)
-#define IOCB_SYNC		(1 << 5)
-#define IOCB_WRITE		(1 << 6)
-#define IOCB_NOWAIT		(1 << 7)
+/* Match RWF_* bits to IOCB bits */
+#define IOCB_HIPRI		(__force int) RWF_HIPRI
+#define IOCB_DSYNC		(__force int) RWF_DSYNC
+#define IOCB_SYNC		(__force int) RWF_SYNC
+#define IOCB_NOWAIT		(__force int) RWF_NOWAIT
+#define IOCB_APPEND		(__force int) RWF_APPEND
+
+/* non-RWF related bits - start at 16 */
+#define IOCB_EVENTFD		(1 << 16)
+#define IOCB_DIRECT		(1 << 17)
+#define IOCB_WRITE		(1 << 18)
+/* iocb->ki_waitq is valid */
+#define IOCB_WAITQ		(1 << 19)
+#define IOCB_NOIO		(1 << 20)
 
 struct kiocb {
 	struct file		*ki_filp;
@@ -407,6 +414,11 @@ struct address_space_operations {
 	int (*swap_activate)(struct swap_info_struct *sis, struct file *file,
 				sector_t *span);
 	void (*swap_deactivate)(struct file *file);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 extern const struct address_space_operations empty_aops;
@@ -462,6 +474,11 @@ struct address_space {
 	spinlock_t		private_lock;
 	struct list_head	private_list;
 	void			*private_data;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } __attribute__((aligned(sizeof(long)))) __randomize_layout;
 	/*
 	 * On most architectures that alignment is already the case; but
@@ -506,6 +523,11 @@ struct block_device {
 	int			bd_fsfreeze_count;
 	/* Mutex for freeze */
 	struct mutex		bd_fsfreeze_mutex;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } __randomize_layout;
 
 /* XArray tags, for tagging dirty and writeback pages in the pagecache. */
@@ -736,6 +758,9 @@ struct inode {
 #endif
 
 	void			*i_private; /* fs or device private pointer */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 } __randomize_layout;
 
 struct timespec64 timestamp_truncate(struct timespec64 t, struct inode *inode);
@@ -971,6 +996,7 @@ struct file {
 #endif /* #ifdef CONFIG_EPOLL */
 	struct address_space	*f_mapping;
 	errseq_t		f_wb_err;
+	errseq_t		f_sb_err; /* for syncfs */
 } __randomize_layout
   __attribute__((aligned(4)));	/* lest something weird decides that 2 is OK */
 
@@ -1030,6 +1056,9 @@ struct file_lock;
 struct file_lock_operations {
 	void (*fl_copy_lock)(struct file_lock *, struct file_lock *);
 	void (*fl_release_private)(struct file_lock *);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 struct lock_manager_operations {
@@ -1040,6 +1069,9 @@ struct lock_manager_operations {
 	bool (*lm_break)(struct file_lock *);
 	int (*lm_change)(struct file_lock *, int, struct list_head *);
 	void (*lm_setup)(struct file_lock *, void **);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 struct lock_manager {
@@ -1113,6 +1145,10 @@ struct file_lock {
 			unsigned int	debug_id;
 		} afs;
 	} fl_u;
+
+	struct list_head android_reserved1;	/* not a macro as we might just need it as-is */
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 } __randomize_layout;
 
 struct file_lock_context {
@@ -1371,6 +1407,7 @@ extern int send_sigurg(struct fown_struct *fown);
 #define SB_NODIRATIME	2048	/* Do not update directory access times */
 #define SB_SILENT	32768
 #define SB_POSIXACL	(1<<16)	/* VFS does not apply the umask */
+#define SB_INLINECRYPT	(1<<17)	/* Use blk-crypto for encrypted files */
 #define SB_KERNMOUNT	(1<<22) /* this is a kern_mount call */
 #define SB_I_VERSION	(1<<23) /* Update inode I_version field */
 #define SB_LAZYTIME	(1<<25) /* Update the on-disk [acm]times lazily */
@@ -1383,6 +1420,12 @@ extern int send_sigurg(struct fown_struct *fown);
 #define SB_ACTIVE	(1<<30)
 #define SB_NOUSER	(1<<31)
 
+/* These flags relate to encoding and casefolding */
+#define SB_ENC_STRICT_MODE_FL	(1 << 0)
+
+#define sb_has_strict_encoding(sb) \
+	(sb->s_encoding_flags & SB_ENC_STRICT_MODE_FL)
+
 /*
  *	Umount options
  */
@@ -1451,6 +1494,10 @@ struct super_block {
 #ifdef CONFIG_FS_VERITY
 	const struct fsverity_operations *s_vop;
 #endif
+#ifdef CONFIG_UNICODE
+	struct unicode_map *s_encoding;
+	__u16 s_encoding_flags;
+#endif
 	struct hlist_bl_head	s_roots;	/* alternate root dentries for NFS */
 	struct list_head	s_mounts;	/* list of mounts; _not_ for fs use */
 	struct block_device	*s_bdev;
@@ -1515,6 +1562,9 @@ struct super_block {
 	/* Being remounted read-only */
 	int s_readonly_remount;
 
+	/* per-sb errseq_t for reporting writeback errors via syncfs */
+	errseq_t s_wb_err;
+
 	/* AIO completions deferred from interrupt context */
 	struct workqueue_struct *s_dio_done_wq;
 	struct hlist_head s_pins;
@@ -1549,6 +1599,11 @@ struct super_block {
 
 	spinlock_t		s_inode_wblist_lock;
 	struct list_head	s_inodes_wb;	/* writeback inodes */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } __randomize_layout;
 
 /* Helper functions so that in most cases filesystems will
@@ -1751,6 +1806,9 @@ struct fiemap_extent_info {
 	struct fiemap_extent __user *fi_extents_start; /* Start of
 							fiemap_extent array */
 };
+
+int fiemap_prep(struct inode *inode, struct fiemap_extent_info *fieinfo,
+		u64 start, u64 *len, u32 supported_flags);
 int fiemap_fill_next_extent(struct fiemap_extent_info *info, u64 logical,
 			    u64 phys, u64 len, u32 flags);
 int fiemap_check_flags(struct fiemap_extent_info *fieinfo, u32 fs_flags);
@@ -1859,6 +1917,11 @@ struct file_operations {
 				   struct file *file_out, loff_t pos_out,
 				   loff_t len, unsigned int remap_flags);
 	int (*fadvise)(struct file *, loff_t, loff_t, int);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } __randomize_layout;
 
 struct inode_operations {
@@ -1889,6 +1952,11 @@ struct inode_operations {
 			   umode_t create_mode);
 	int (*tmpfile) (struct inode *, struct dentry *, umode_t);
 	int (*set_acl)(struct inode *, struct posix_acl *, int);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } ____cacheline_aligned;
 
 static inline ssize_t call_read_iter(struct file *file, struct kiocb *kio,
@@ -1973,6 +2041,11 @@ struct super_operations {
 				  struct shrink_control *);
 	long (*free_cached_objects)(struct super_block *,
 				    struct shrink_control *);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /*
@@ -2244,6 +2317,11 @@ struct file_system_type {
 	struct lock_class_key i_lock_key;
 	struct lock_class_key i_mutex_key;
 	struct lock_class_key i_mutex_dir_key;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 #define MODULE_ALIAS_FS(NAME) MODULE_ALIAS("fs-" NAME)
@@ -2819,6 +2897,18 @@ static inline errseq_t filemap_sample_wb_err(struct address_space *mapping)
 	return errseq_sample(&mapping->wb_err);
 }
 
+/**
+ * file_sample_sb_err - sample the current errseq_t to test for later errors
+ * @mapping: mapping to be sampled
+ *
+ * Grab the most current superblock-level errseq_t value for the given
+ * struct file.
+ */
+static inline errseq_t file_sample_sb_err(struct file *file)
+{
+	return errseq_sample(&file->f_path.dentry->d_sb->s_wb_err);
+}
+
 static inline int filemap_nr_thps(struct address_space *mapping)
 {
 #ifdef CONFIG_READ_ONLY_THP_FOR_FS
@@ -3348,6 +3438,13 @@ extern int generic_file_fsync(struct file *, loff_t, loff_t, int);
 
 extern int generic_check_addressable(unsigned, u64);
 
+#ifdef CONFIG_UNICODE
+extern int generic_ci_d_hash(const struct dentry *dentry, struct qstr *str);
+extern int generic_ci_d_compare(const struct dentry *dentry, unsigned int len,
+				const char *str, const struct qstr *name);
+#endif
+extern void generic_set_encrypted_ci_d_ops(struct dentry *dentry);
+
 #ifdef CONFIG_MIGRATION
 extern int buffer_migrate_page(struct address_space *,
 				struct page *, struct page *,
@@ -3406,25 +3503,34 @@ static inline int iocb_flags(struct file *file)
 
 static inline int kiocb_set_rw_flags(struct kiocb *ki, rwf_t flags)
 {
+	int kiocb_flags = 0;
+
+	/* make sure there's no overlap between RWF and private IOCB flags */
+	BUILD_BUG_ON((__force int)RWF_SUPPORTED & IOCB_EVENTFD);
+
+	if (!flags)
+		return 0;
 	if (unlikely(flags & ~RWF_SUPPORTED))
 		return -EOPNOTSUPP;
 
 	if (flags & RWF_NOWAIT) {
 		if (!(ki->ki_filp->f_mode & FMODE_NOWAIT))
 			return -EOPNOTSUPP;
-		ki->ki_flags |= IOCB_NOWAIT;
+		kiocb_flags |= IOCB_NOIO;
 	}
-	if (flags & RWF_HIPRI)
-		ki->ki_flags |= IOCB_HIPRI;
-	if (flags & RWF_DSYNC)
-		ki->ki_flags |= IOCB_DSYNC;
+	kiocb_flags |= (__force int)(flags & RWF_SUPPORTED);
 	if (flags & RWF_SYNC)
-		ki->ki_flags |= (IOCB_DSYNC | IOCB_SYNC);
-	if (flags & RWF_APPEND)
-		ki->ki_flags |= IOCB_APPEND;
+		kiocb_flags |= IOCB_DSYNC;
+
+	ki->ki_flags |= kiocb_flags;
 	return 0;
 }
 
+static inline rwf_t iocb_to_rw_flags(int ifl, int iocb_mask)
+{
+	return ifl & iocb_mask;
+}
+
 static inline ino_t parent_ino(struct dentry *dentry)
 {
 	ino_t res;
diff --git a/include/linux/fscrypt.h b/include/linux/fscrypt.h
index 032e5bc..554b219c 100644
--- a/include/linux/fscrypt.h
+++ b/include/linux/fscrypt.h
@@ -20,8 +20,9 @@
 
 #define FS_CRYPTO_BLOCK_SIZE		16
 
-struct fscrypt_ctx;
+union fscrypt_policy;
 struct fscrypt_info;
+struct seq_file;
 
 struct fscrypt_str {
 	unsigned char *name;
@@ -34,7 +35,7 @@ struct fscrypt_name {
 	u32 hash;
 	u32 minor_hash;
 	struct fscrypt_str crypto_buf;
-	bool is_ciphertext_name;
+	bool is_nokey_name;
 };
 
 #define FSTR_INIT(n, l)		{ .name = n, .len = l }
@@ -57,47 +58,57 @@ struct fscrypt_name {
 struct fscrypt_operations {
 	unsigned int flags;
 	const char *key_prefix;
-	int (*get_context)(struct inode *, void *, size_t);
-	int (*set_context)(struct inode *, const void *, size_t, void *);
-	bool (*dummy_context)(struct inode *);
-	bool (*empty_dir)(struct inode *);
+	int (*get_context)(struct inode *inode, void *ctx, size_t len);
+	int (*set_context)(struct inode *inode, const void *ctx, size_t len,
+			   void *fs_data);
+	const union fscrypt_policy *(*get_dummy_policy)(struct super_block *sb);
+	bool (*empty_dir)(struct inode *inode);
 	unsigned int max_namelen;
+	bool (*has_stable_inodes)(struct super_block *sb);
+	void (*get_ino_and_lblk_bits)(struct super_block *sb,
+				      int *ino_bits_ret, int *lblk_bits_ret);
+	int (*get_num_devices)(struct super_block *sb);
+	void (*get_devices)(struct super_block *sb,
+			    struct request_queue **devs);
 };
 
-/* Decryption work */
-struct fscrypt_ctx {
-	union {
-		struct {
-			struct bio *bio;
-			struct work_struct work;
-		};
-		struct list_head free_list;	/* Free list */
-	};
-	u8 flags;				/* Flags */
-};
-
-static inline bool fscrypt_has_encryption_key(const struct inode *inode)
+static inline struct fscrypt_info *fscrypt_get_info(const struct inode *inode)
 {
-	/* pairs with cmpxchg_release() in fscrypt_get_encryption_info() */
-	return READ_ONCE(inode->i_crypt_info) != NULL;
+	/*
+	 * Pairs with the cmpxchg_release() in fscrypt_setup_encryption_info().
+	 * I.e., another task may publish ->i_crypt_info concurrently, executing
+	 * a RELEASE barrier.  We need to use smp_load_acquire() here to safely
+	 * ACQUIRE the memory the other task published.
+	 */
+	return smp_load_acquire(&inode->i_crypt_info);
 }
 
-static inline bool fscrypt_dummy_context_enabled(struct inode *inode)
+/**
+ * fscrypt_needs_contents_encryption() - check whether an inode needs
+ *					 contents encryption
+ * @inode: the inode to check
+ *
+ * Return: %true iff the inode is an encrypted regular file and the kernel was
+ * built with fscrypt support.
+ *
+ * If you need to know whether the encrypt bit is set even when the kernel was
+ * built without fscrypt support, you must use IS_ENCRYPTED() directly instead.
+ */
+static inline bool fscrypt_needs_contents_encryption(const struct inode *inode)
 {
-	return inode->i_sb->s_cop->dummy_context &&
-		inode->i_sb->s_cop->dummy_context(inode);
+	return IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode);
 }
 
 /*
- * When d_splice_alias() moves a directory's encrypted alias to its decrypted
- * alias as a result of the encryption key being added, DCACHE_ENCRYPTED_NAME
- * must be cleared.  Note that we don't have to support arbitrary moves of this
- * flag because fscrypt doesn't allow encrypted aliases to be the source or
- * target of a rename().
+ * When d_splice_alias() moves a directory's no-key alias to its plaintext alias
+ * as a result of the encryption key being added, DCACHE_NOKEY_NAME must be
+ * cleared.  Note that we don't have to support arbitrary moves of this flag
+ * because fscrypt doesn't allow no-key names to be the source or target of a
+ * rename().
  */
 static inline void fscrypt_handle_d_move(struct dentry *dentry)
 {
-	dentry->d_flags &= ~DCACHE_ENCRYPTED_NAME;
+	dentry->d_flags &= ~DCACHE_NOKEY_NAME;
 }
 
 /**
@@ -126,28 +137,25 @@ static inline void fscrypt_handle_d_move(struct dentry *dentry)
  */
 static inline bool fscrypt_is_nokey_name(const struct dentry *dentry)
 {
-	return dentry->d_flags & DCACHE_ENCRYPTED_NAME;
+	return dentry->d_flags & DCACHE_NOKEY_NAME;
 }
 
 /* crypto.c */
-extern void fscrypt_enqueue_decrypt_work(struct work_struct *);
-extern struct fscrypt_ctx *fscrypt_get_ctx(gfp_t);
-extern void fscrypt_release_ctx(struct fscrypt_ctx *);
+void fscrypt_enqueue_decrypt_work(struct work_struct *);
 
-extern struct page *fscrypt_encrypt_pagecache_blocks(struct page *page,
-						     unsigned int len,
-						     unsigned int offs,
-						     gfp_t gfp_flags);
-extern int fscrypt_encrypt_block_inplace(const struct inode *inode,
-					 struct page *page, unsigned int len,
-					 unsigned int offs, u64 lblk_num,
-					 gfp_t gfp_flags);
+struct page *fscrypt_encrypt_pagecache_blocks(struct page *page,
+					      unsigned int len,
+					      unsigned int offs,
+					      gfp_t gfp_flags);
+int fscrypt_encrypt_block_inplace(const struct inode *inode, struct page *page,
+				  unsigned int len, unsigned int offs,
+				  u64 lblk_num, gfp_t gfp_flags);
 
-extern int fscrypt_decrypt_pagecache_blocks(struct page *page, unsigned int len,
-					    unsigned int offs);
-extern int fscrypt_decrypt_block_inplace(const struct inode *inode,
-					 struct page *page, unsigned int len,
-					 unsigned int offs, u64 lblk_num);
+int fscrypt_decrypt_pagecache_blocks(struct page *page, unsigned int len,
+				     unsigned int offs);
+int fscrypt_decrypt_block_inplace(const struct inode *inode, struct page *page,
+				  unsigned int len, unsigned int offs,
+				  u64 lblk_num);
 
 static inline bool fscrypt_is_bounce_page(struct page *page)
 {
@@ -159,145 +167,92 @@ static inline struct page *fscrypt_pagecache_page(struct page *bounce_page)
 	return (struct page *)page_private(bounce_page);
 }
 
-extern void fscrypt_free_bounce_page(struct page *bounce_page);
+void fscrypt_free_bounce_page(struct page *bounce_page);
 
 /* policy.c */
-extern int fscrypt_ioctl_set_policy(struct file *, const void __user *);
-extern int fscrypt_ioctl_get_policy(struct file *, void __user *);
-extern int fscrypt_ioctl_get_policy_ex(struct file *, void __user *);
-extern int fscrypt_has_permitted_context(struct inode *, struct inode *);
-extern int fscrypt_inherit_context(struct inode *, struct inode *,
-					void *, bool);
+int fscrypt_ioctl_set_policy(struct file *filp, const void __user *arg);
+int fscrypt_ioctl_get_policy(struct file *filp, void __user *arg);
+int fscrypt_ioctl_get_policy_ex(struct file *filp, void __user *arg);
+int fscrypt_ioctl_get_nonce(struct file *filp, void __user *arg);
+int fscrypt_has_permitted_context(struct inode *parent, struct inode *child);
+int fscrypt_set_context(struct inode *inode, void *fs_data);
+
+struct fscrypt_dummy_policy {
+	const union fscrypt_policy *policy;
+};
+
+int fscrypt_set_test_dummy_encryption(struct super_block *sb, const char *arg,
+				struct fscrypt_dummy_policy *dummy_policy);
+void fscrypt_show_test_dummy_encryption(struct seq_file *seq, char sep,
+					struct super_block *sb);
+static inline void
+fscrypt_free_dummy_policy(struct fscrypt_dummy_policy *dummy_policy)
+{
+	kfree(dummy_policy->policy);
+	dummy_policy->policy = NULL;
+}
+
 /* keyring.c */
-extern void fscrypt_sb_free(struct super_block *sb);
-extern int fscrypt_ioctl_add_key(struct file *filp, void __user *arg);
-extern int fscrypt_ioctl_remove_key(struct file *filp, void __user *arg);
-extern int fscrypt_ioctl_remove_key_all_users(struct file *filp,
-					      void __user *arg);
-extern int fscrypt_ioctl_get_key_status(struct file *filp, void __user *arg);
+void fscrypt_sb_free(struct super_block *sb);
+int fscrypt_ioctl_add_key(struct file *filp, void __user *arg);
+int fscrypt_ioctl_remove_key(struct file *filp, void __user *arg);
+int fscrypt_ioctl_remove_key_all_users(struct file *filp, void __user *arg);
+int fscrypt_ioctl_get_key_status(struct file *filp, void __user *arg);
 
 /* keysetup.c */
-extern int fscrypt_get_encryption_info(struct inode *);
-extern void fscrypt_put_encryption_info(struct inode *);
-extern void fscrypt_free_inode(struct inode *);
-extern int fscrypt_drop_inode(struct inode *inode);
+int fscrypt_prepare_new_inode(struct inode *dir, struct inode *inode,
+			      bool *encrypt_ret);
+void fscrypt_put_encryption_info(struct inode *inode);
+void fscrypt_free_inode(struct inode *inode);
+int fscrypt_drop_inode(struct inode *inode);
 
 /* fname.c */
-extern int fscrypt_setup_filename(struct inode *, const struct qstr *,
-				int lookup, struct fscrypt_name *);
+int fscrypt_setup_filename(struct inode *inode, const struct qstr *iname,
+			   int lookup, struct fscrypt_name *fname);
 
 static inline void fscrypt_free_filename(struct fscrypt_name *fname)
 {
 	kfree(fname->crypto_buf.name);
 }
 
-extern int fscrypt_fname_alloc_buffer(const struct inode *, u32,
-				struct fscrypt_str *);
-extern void fscrypt_fname_free_buffer(struct fscrypt_str *);
-extern int fscrypt_fname_disk_to_usr(struct inode *, u32, u32,
-			const struct fscrypt_str *, struct fscrypt_str *);
-
-#define FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE	32
-
-/* Extracts the second-to-last ciphertext block; see explanation below */
-#define FSCRYPT_FNAME_DIGEST(name, len)	\
-	((name) + round_down((len) - FS_CRYPTO_BLOCK_SIZE - 1, \
-			     FS_CRYPTO_BLOCK_SIZE))
-
-#define FSCRYPT_FNAME_DIGEST_SIZE	FS_CRYPTO_BLOCK_SIZE
-
-/**
- * fscrypt_digested_name - alternate identifier for an on-disk filename
- *
- * When userspace lists an encrypted directory without access to the key,
- * filenames whose ciphertext is longer than FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE
- * bytes are shown in this abbreviated form (base64-encoded) rather than as the
- * full ciphertext (base64-encoded).  This is necessary to allow supporting
- * filenames up to NAME_MAX bytes, since base64 encoding expands the length.
- *
- * To make it possible for filesystems to still find the correct directory entry
- * despite not knowing the full on-disk name, we encode any filesystem-specific
- * 'hash' and/or 'minor_hash' which the filesystem may need for its lookups,
- * followed by the second-to-last ciphertext block of the filename.  Due to the
- * use of the CBC-CTS encryption mode, the second-to-last ciphertext block
- * depends on the full plaintext.  (Note that ciphertext stealing causes the
- * last two blocks to appear "flipped".)  This makes accidental collisions very
- * unlikely: just a 1 in 2^128 chance for two filenames to collide even if they
- * share the same filesystem-specific hashes.
- *
- * However, this scheme isn't immune to intentional collisions, which can be
- * created by anyone able to create arbitrary plaintext filenames and view them
- * without the key.  Making the "digest" be a real cryptographic hash like
- * SHA-256 over the full ciphertext would prevent this, although it would be
- * less efficient and harder to implement, especially since the filesystem would
- * need to calculate it for each directory entry examined during a search.
- */
-struct fscrypt_digested_name {
-	u32 hash;
-	u32 minor_hash;
-	u8 digest[FSCRYPT_FNAME_DIGEST_SIZE];
-};
-
-/**
- * fscrypt_match_name() - test whether the given name matches a directory entry
- * @fname: the name being searched for
- * @de_name: the name from the directory entry
- * @de_name_len: the length of @de_name in bytes
- *
- * Normally @fname->disk_name will be set, and in that case we simply compare
- * that to the name stored in the directory entry.  The only exception is that
- * if we don't have the key for an encrypted directory and a filename in it is
- * very long, then we won't have the full disk_name and we'll instead need to
- * match against the fscrypt_digested_name.
- *
- * Return: %true if the name matches, otherwise %false.
- */
-static inline bool fscrypt_match_name(const struct fscrypt_name *fname,
-				      const u8 *de_name, u32 de_name_len)
-{
-	if (unlikely(!fname->disk_name.name)) {
-		const struct fscrypt_digested_name *n =
-			(const void *)fname->crypto_buf.name;
-		if (WARN_ON_ONCE(fname->usr_fname->name[0] != '_'))
-			return false;
-		if (de_name_len <= FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE)
-			return false;
-		return !memcmp(FSCRYPT_FNAME_DIGEST(de_name, de_name_len),
-			       n->digest, FSCRYPT_FNAME_DIGEST_SIZE);
-	}
-
-	if (de_name_len != fname->disk_name.len)
-		return false;
-	return !memcmp(de_name, fname->disk_name.name, fname->disk_name.len);
-}
+int fscrypt_fname_alloc_buffer(u32 max_encrypted_len,
+			       struct fscrypt_str *crypto_str);
+void fscrypt_fname_free_buffer(struct fscrypt_str *crypto_str);
+int fscrypt_fname_disk_to_usr(const struct inode *inode,
+			      u32 hash, u32 minor_hash,
+			      const struct fscrypt_str *iname,
+			      struct fscrypt_str *oname);
+bool fscrypt_match_name(const struct fscrypt_name *fname,
+			const u8 *de_name, u32 de_name_len);
+u64 fscrypt_fname_siphash(const struct inode *dir, const struct qstr *name);
+int fscrypt_d_revalidate(struct dentry *dentry, unsigned int flags);
 
 /* bio.c */
-extern void fscrypt_decrypt_bio(struct bio *);
-extern void fscrypt_enqueue_decrypt_bio(struct fscrypt_ctx *ctx,
-					struct bio *bio);
-extern int fscrypt_zeroout_range(const struct inode *, pgoff_t, sector_t,
-				 unsigned int);
+void fscrypt_decrypt_bio(struct bio *bio);
+int fscrypt_zeroout_range(const struct inode *inode, pgoff_t lblk,
+			  sector_t pblk, unsigned int len);
 
 /* hooks.c */
-extern int fscrypt_file_open(struct inode *inode, struct file *filp);
-extern int __fscrypt_prepare_link(struct inode *inode, struct inode *dir,
-				  struct dentry *dentry);
-extern int __fscrypt_prepare_rename(struct inode *old_dir,
-				    struct dentry *old_dentry,
-				    struct inode *new_dir,
-				    struct dentry *new_dentry,
-				    unsigned int flags);
-extern int __fscrypt_prepare_lookup(struct inode *dir, struct dentry *dentry,
-				    struct fscrypt_name *fname);
-extern int __fscrypt_prepare_symlink(struct inode *dir, unsigned int len,
-				     unsigned int max_len,
-				     struct fscrypt_str *disk_link);
-extern int __fscrypt_encrypt_symlink(struct inode *inode, const char *target,
-				     unsigned int len,
-				     struct fscrypt_str *disk_link);
-extern const char *fscrypt_get_symlink(struct inode *inode, const void *caddr,
-				       unsigned int max_size,
-				       struct delayed_call *done);
+int fscrypt_file_open(struct inode *inode, struct file *filp);
+int __fscrypt_prepare_link(struct inode *inode, struct inode *dir,
+			   struct dentry *dentry);
+int __fscrypt_prepare_rename(struct inode *old_dir, struct dentry *old_dentry,
+			     struct inode *new_dir, struct dentry *new_dentry,
+			     unsigned int flags);
+int __fscrypt_prepare_lookup(struct inode *dir, struct dentry *dentry,
+			     struct fscrypt_name *fname);
+int __fscrypt_prepare_readdir(struct inode *dir);
+int __fscrypt_prepare_setattr(struct dentry *dentry, struct iattr *attr);
+int fscrypt_prepare_setflags(struct inode *inode,
+			     unsigned int oldflags, unsigned int flags);
+int fscrypt_prepare_symlink(struct inode *dir, const char *target,
+			    unsigned int len, unsigned int max_len,
+			    struct fscrypt_str *disk_link);
+int __fscrypt_encrypt_symlink(struct inode *inode, const char *target,
+			      unsigned int len, struct fscrypt_str *disk_link);
+const char *fscrypt_get_symlink(struct inode *inode, const void *caddr,
+				unsigned int max_size,
+				struct delayed_call *done);
 static inline void fscrypt_set_ops(struct super_block *sb,
 				   const struct fscrypt_operations *s_cop)
 {
@@ -305,12 +260,12 @@ static inline void fscrypt_set_ops(struct super_block *sb,
 }
 #else  /* !CONFIG_FS_ENCRYPTION */
 
-static inline bool fscrypt_has_encryption_key(const struct inode *inode)
+static inline struct fscrypt_info *fscrypt_get_info(const struct inode *inode)
 {
-	return false;
+	return NULL;
 }
 
-static inline bool fscrypt_dummy_context_enabled(struct inode *inode)
+static inline bool fscrypt_needs_contents_encryption(const struct inode *inode)
 {
 	return false;
 }
@@ -329,16 +284,6 @@ static inline void fscrypt_enqueue_decrypt_work(struct work_struct *work)
 {
 }
 
-static inline struct fscrypt_ctx *fscrypt_get_ctx(gfp_t gfp_flags)
-{
-	return ERR_PTR(-EOPNOTSUPP);
-}
-
-static inline void fscrypt_release_ctx(struct fscrypt_ctx *ctx)
-{
-	return;
-}
-
 static inline struct page *fscrypt_encrypt_pagecache_blocks(struct page *page,
 							    unsigned int len,
 							    unsigned int offs,
@@ -404,19 +349,36 @@ static inline int fscrypt_ioctl_get_policy_ex(struct file *filp,
 	return -EOPNOTSUPP;
 }
 
+static inline int fscrypt_ioctl_get_nonce(struct file *filp, void __user *arg)
+{
+	return -EOPNOTSUPP;
+}
+
 static inline int fscrypt_has_permitted_context(struct inode *parent,
 						struct inode *child)
 {
 	return 0;
 }
 
-static inline int fscrypt_inherit_context(struct inode *parent,
-					  struct inode *child,
-					  void *fs_data, bool preload)
+static inline int fscrypt_set_context(struct inode *inode, void *fs_data)
 {
 	return -EOPNOTSUPP;
 }
 
+struct fscrypt_dummy_policy {
+};
+
+static inline void fscrypt_show_test_dummy_encryption(struct seq_file *seq,
+						      char sep,
+						      struct super_block *sb)
+{
+}
+
+static inline void
+fscrypt_free_dummy_policy(struct fscrypt_dummy_policy *dummy_policy)
+{
+}
+
 /* keyring.c */
 static inline void fscrypt_sb_free(struct super_block *sb)
 {
@@ -445,9 +407,14 @@ static inline int fscrypt_ioctl_get_key_status(struct file *filp,
 }
 
 /* keysetup.c */
-static inline int fscrypt_get_encryption_info(struct inode *inode)
+
+static inline int fscrypt_prepare_new_inode(struct inode *dir,
+					    struct inode *inode,
+					    bool *encrypt_ret)
 {
-	return -EOPNOTSUPP;
+	if (IS_ENCRYPTED(dir))
+		return -EOPNOTSUPP;
+	return 0;
 }
 
 static inline void fscrypt_put_encryption_info(struct inode *inode)
@@ -484,8 +451,7 @@ static inline void fscrypt_free_filename(struct fscrypt_name *fname)
 	return;
 }
 
-static inline int fscrypt_fname_alloc_buffer(const struct inode *inode,
-					     u32 max_encrypted_len,
+static inline int fscrypt_fname_alloc_buffer(u32 max_encrypted_len,
 					     struct fscrypt_str *crypto_str)
 {
 	return -EOPNOTSUPP;
@@ -496,7 +462,7 @@ static inline void fscrypt_fname_free_buffer(struct fscrypt_str *crypto_str)
 	return;
 }
 
-static inline int fscrypt_fname_disk_to_usr(struct inode *inode,
+static inline int fscrypt_fname_disk_to_usr(const struct inode *inode,
 					    u32 hash, u32 minor_hash,
 					    const struct fscrypt_str *iname,
 					    struct fscrypt_str *oname)
@@ -513,13 +479,21 @@ static inline bool fscrypt_match_name(const struct fscrypt_name *fname,
 	return !memcmp(de_name, fname->disk_name.name, fname->disk_name.len);
 }
 
-/* bio.c */
-static inline void fscrypt_decrypt_bio(struct bio *bio)
+static inline u64 fscrypt_fname_siphash(const struct inode *dir,
+					const struct qstr *name)
 {
+	WARN_ON_ONCE(1);
+	return 0;
 }
 
-static inline void fscrypt_enqueue_decrypt_bio(struct fscrypt_ctx *ctx,
-					       struct bio *bio)
+static inline int fscrypt_d_revalidate(struct dentry *dentry,
+				       unsigned int flags)
+{
+	return 1;
+}
+
+/* bio.c */
+static inline void fscrypt_decrypt_bio(struct bio *bio)
 {
 }
 
@@ -560,14 +534,38 @@ static inline int __fscrypt_prepare_lookup(struct inode *dir,
 	return -EOPNOTSUPP;
 }
 
-static inline int __fscrypt_prepare_symlink(struct inode *dir,
-					    unsigned int len,
-					    unsigned int max_len,
-					    struct fscrypt_str *disk_link)
+static inline int __fscrypt_prepare_readdir(struct inode *dir)
 {
 	return -EOPNOTSUPP;
 }
 
+static inline int __fscrypt_prepare_setattr(struct dentry *dentry,
+					    struct iattr *attr)
+{
+	return -EOPNOTSUPP;
+}
+
+static inline int fscrypt_prepare_setflags(struct inode *inode,
+					   unsigned int oldflags,
+					   unsigned int flags)
+{
+	return 0;
+}
+
+static inline int fscrypt_prepare_symlink(struct inode *dir,
+					  const char *target,
+					  unsigned int len,
+					  unsigned int max_len,
+					  struct fscrypt_str *disk_link)
+{
+	if (IS_ENCRYPTED(dir))
+		return -EOPNOTSUPP;
+	disk_link->name = (unsigned char *)target;
+	disk_link->len = len + 1;
+	if (disk_link->len > max_len)
+		return -ENAMETOOLONG;
+	return 0;
+}
 
 static inline int __fscrypt_encrypt_symlink(struct inode *inode,
 					    const char *target,
@@ -592,42 +590,141 @@ static inline void fscrypt_set_ops(struct super_block *sb,
 
 #endif	/* !CONFIG_FS_ENCRYPTION */
 
-/**
- * fscrypt_require_key - require an inode's encryption key
- * @inode: the inode we need the key for
- *
- * If the inode is encrypted, set up its encryption key if not already done.
- * Then require that the key be present and return -ENOKEY otherwise.
- *
- * No locks are needed, and the key will live as long as the struct inode --- so
- * it won't go away from under you.
- *
- * Return: 0 on success, -ENOKEY if the key is missing, or another -errno code
- * if a problem occurred while setting up the encryption key.
- */
-static inline int fscrypt_require_key(struct inode *inode)
-{
-	if (IS_ENCRYPTED(inode)) {
-		int err = fscrypt_get_encryption_info(inode);
+/* inline_crypt.c */
+#ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
 
-		if (err)
-			return err;
-		if (!fscrypt_has_encryption_key(inode))
-			return -ENOKEY;
-	}
-	return 0;
+bool __fscrypt_inode_uses_inline_crypto(const struct inode *inode);
+
+void fscrypt_set_bio_crypt_ctx(struct bio *bio,
+			       const struct inode *inode, u64 first_lblk,
+			       gfp_t gfp_mask);
+
+void fscrypt_set_bio_crypt_ctx_bh(struct bio *bio,
+				  const struct buffer_head *first_bh,
+				  gfp_t gfp_mask);
+
+bool fscrypt_mergeable_bio(struct bio *bio, const struct inode *inode,
+			   u64 next_lblk);
+
+bool fscrypt_mergeable_bio_bh(struct bio *bio,
+			      const struct buffer_head *next_bh);
+
+bool fscrypt_dio_supported(struct kiocb *iocb, struct iov_iter *iter);
+
+u64 fscrypt_limit_io_blocks(const struct inode *inode, u64 lblk, u64 nr_blocks);
+
+#else /* CONFIG_FS_ENCRYPTION_INLINE_CRYPT */
+
+static inline bool __fscrypt_inode_uses_inline_crypto(const struct inode *inode)
+{
+	return false;
+}
+
+static inline void fscrypt_set_bio_crypt_ctx(struct bio *bio,
+					     const struct inode *inode,
+					     u64 first_lblk, gfp_t gfp_mask) { }
+
+static inline void fscrypt_set_bio_crypt_ctx_bh(
+					 struct bio *bio,
+					 const struct buffer_head *first_bh,
+					 gfp_t gfp_mask) { }
+
+static inline bool fscrypt_mergeable_bio(struct bio *bio,
+					 const struct inode *inode,
+					 u64 next_lblk)
+{
+	return true;
+}
+
+static inline bool fscrypt_mergeable_bio_bh(struct bio *bio,
+					    const struct buffer_head *next_bh)
+{
+	return true;
+}
+
+static inline bool fscrypt_dio_supported(struct kiocb *iocb,
+					 struct iov_iter *iter)
+{
+	const struct inode *inode = file_inode(iocb->ki_filp);
+
+	return !fscrypt_needs_contents_encryption(inode);
+}
+
+static inline u64 fscrypt_limit_io_blocks(const struct inode *inode, u64 lblk,
+					  u64 nr_blocks)
+{
+	return nr_blocks;
+}
+#endif /* !CONFIG_FS_ENCRYPTION_INLINE_CRYPT */
+
+#if IS_ENABLED(CONFIG_FS_ENCRYPTION) && IS_ENABLED(CONFIG_DM_DEFAULT_KEY)
+static inline bool
+fscrypt_inode_should_skip_dm_default_key(const struct inode *inode)
+{
+	return IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode);
+}
+#else
+static inline bool
+fscrypt_inode_should_skip_dm_default_key(const struct inode *inode)
+{
+	return false;
+}
+#endif
+
+/**
+ * fscrypt_inode_uses_inline_crypto() - test whether an inode uses inline
+ *					encryption
+ * @inode: an inode. If encrypted, its key must be set up.
+ *
+ * Return: true if the inode requires file contents encryption and if the
+ *	   encryption should be done in the block layer via blk-crypto rather
+ *	   than in the filesystem layer.
+ */
+static inline bool fscrypt_inode_uses_inline_crypto(const struct inode *inode)
+{
+	return fscrypt_needs_contents_encryption(inode) &&
+	       __fscrypt_inode_uses_inline_crypto(inode);
 }
 
 /**
- * fscrypt_prepare_link - prepare to link an inode into a possibly-encrypted directory
+ * fscrypt_inode_uses_fs_layer_crypto() - test whether an inode uses fs-layer
+ *					  encryption
+ * @inode: an inode. If encrypted, its key must be set up.
+ *
+ * Return: true if the inode requires file contents encryption and if the
+ *	   encryption should be done in the filesystem layer rather than in the
+ *	   block layer via blk-crypto.
+ */
+static inline bool fscrypt_inode_uses_fs_layer_crypto(const struct inode *inode)
+{
+	return fscrypt_needs_contents_encryption(inode) &&
+	       !__fscrypt_inode_uses_inline_crypto(inode);
+}
+
+/**
+ * fscrypt_has_encryption_key() - check whether an inode has had its key set up
+ * @inode: the inode to check
+ *
+ * Return: %true if the inode has had its encryption key set up, else %false.
+ *
+ * Usually this should be preceded by fscrypt_get_encryption_info() to try to
+ * set up the key first.
+ */
+static inline bool fscrypt_has_encryption_key(const struct inode *inode)
+{
+	return fscrypt_get_info(inode) != NULL;
+}
+
+/**
+ * fscrypt_prepare_link() - prepare to link an inode into a possibly-encrypted
+ *			    directory
  * @old_dentry: an existing dentry for the inode being linked
  * @dir: the target directory
  * @dentry: negative dentry for the target filename
  *
  * A new link can only be added to an encrypted directory if the directory's
  * encryption key is available --- since otherwise we'd have no way to encrypt
- * the filename.  Therefore, we first set up the directory's encryption key (if
- * not already done) and return an error if it's unavailable.
+ * the filename.
  *
  * We also verify that the link will not violate the constraint that all files
  * in an encrypted directory tree use the same encryption policy.
@@ -646,7 +743,8 @@ static inline int fscrypt_prepare_link(struct dentry *old_dentry,
 }
 
 /**
- * fscrypt_prepare_rename - prepare for a rename between possibly-encrypted directories
+ * fscrypt_prepare_rename() - prepare for a rename between possibly-encrypted
+ *			      directories
  * @old_dir: source directory
  * @old_dentry: dentry for source file
  * @new_dir: target directory
@@ -679,23 +777,27 @@ static inline int fscrypt_prepare_rename(struct inode *old_dir,
 }
 
 /**
- * fscrypt_prepare_lookup - prepare to lookup a name in a possibly-encrypted directory
+ * fscrypt_prepare_lookup() - prepare to lookup a name in a possibly-encrypted
+ *			      directory
  * @dir: directory being searched
  * @dentry: filename being looked up
  * @fname: (output) the name to use to search the on-disk directory
  *
  * Prepare for ->lookup() in a directory which may be encrypted by determining
- * the name that will actually be used to search the directory on-disk.  Lookups
- * can be done with or without the directory's encryption key; without the key,
- * filenames are presented in encrypted form.  Therefore, we'll try to set up
- * the directory's encryption key, but even without it the lookup can continue.
+ * the name that will actually be used to search the directory on-disk.  If the
+ * directory's encryption policy is supported by this kernel and its encryption
+ * key is available, then the lookup is assumed to be by plaintext name;
+ * otherwise, it is assumed to be by no-key name.
  *
- * This also installs a custom ->d_revalidate() method which will invalidate the
- * dentry if it was created without the key and the key is later added.
+ * This will set DCACHE_NOKEY_NAME on the dentry if the lookup is by no-key
+ * name.  In this case the filesystem must assign the dentry a dentry_operations
+ * which contains fscrypt_d_revalidate (or contains a d_revalidate method that
+ * calls fscrypt_d_revalidate), so that the dentry will be invalidated if the
+ * directory's encryption key is later added.
  *
- * Return: 0 on success; -ENOENT if key is unavailable but the filename isn't a
- * correctly formed encoded ciphertext name, so a negative dentry should be
- * created; or another -errno code.
+ * Return: 0 on success; -ENOENT if the directory's key is unavailable but the
+ * filename isn't a valid no-key name, so a negative dentry should be created;
+ * or another -errno code.
  */
 static inline int fscrypt_prepare_lookup(struct inode *dir,
 					 struct dentry *dentry,
@@ -712,7 +814,28 @@ static inline int fscrypt_prepare_lookup(struct inode *dir,
 }
 
 /**
- * fscrypt_prepare_setattr - prepare to change a possibly-encrypted inode's attributes
+ * fscrypt_prepare_readdir() - prepare to read a possibly-encrypted directory
+ * @dir: the directory inode
+ *
+ * If the directory is encrypted and it doesn't already have its encryption key
+ * set up, try to set it up so that the filenames will be listed in plaintext
+ * form rather than in no-key form.
+ *
+ * Return: 0 on success; -errno on error.  Note that the encryption key being
+ *	   unavailable is not considered an error.  It is also not an error if
+ *	   the encryption policy is unsupported by this kernel; that is treated
+ *	   like the key being unavailable, so that files can still be deleted.
+ */
+static inline int fscrypt_prepare_readdir(struct inode *dir)
+{
+	if (IS_ENCRYPTED(dir))
+		return __fscrypt_prepare_readdir(dir);
+	return 0;
+}
+
+/**
+ * fscrypt_prepare_setattr() - prepare to change a possibly-encrypted inode's
+ *			       attributes
  * @dentry: dentry through which the inode is being changed
  * @attr: attributes to change
  *
@@ -731,52 +854,13 @@ static inline int fscrypt_prepare_lookup(struct inode *dir,
 static inline int fscrypt_prepare_setattr(struct dentry *dentry,
 					  struct iattr *attr)
 {
-	if (attr->ia_valid & ATTR_SIZE)
-		return fscrypt_require_key(d_inode(dentry));
+	if (IS_ENCRYPTED(d_inode(dentry)))
+		return __fscrypt_prepare_setattr(dentry, attr);
 	return 0;
 }
 
 /**
- * fscrypt_prepare_symlink - prepare to create a possibly-encrypted symlink
- * @dir: directory in which the symlink is being created
- * @target: plaintext symlink target
- * @len: length of @target excluding null terminator
- * @max_len: space the filesystem has available to store the symlink target
- * @disk_link: (out) the on-disk symlink target being prepared
- *
- * This function computes the size the symlink target will require on-disk,
- * stores it in @disk_link->len, and validates it against @max_len.  An
- * encrypted symlink may be longer than the original.
- *
- * Additionally, @disk_link->name is set to @target if the symlink will be
- * unencrypted, but left NULL if the symlink will be encrypted.  For encrypted
- * symlinks, the filesystem must call fscrypt_encrypt_symlink() to create the
- * on-disk target later.  (The reason for the two-step process is that some
- * filesystems need to know the size of the symlink target before creating the
- * inode, e.g. to determine whether it will be a "fast" or "slow" symlink.)
- *
- * Return: 0 on success, -ENAMETOOLONG if the symlink target is too long,
- * -ENOKEY if the encryption key is missing, or another -errno code if a problem
- * occurred while setting up the encryption key.
- */
-static inline int fscrypt_prepare_symlink(struct inode *dir,
-					  const char *target,
-					  unsigned int len,
-					  unsigned int max_len,
-					  struct fscrypt_str *disk_link)
-{
-	if (IS_ENCRYPTED(dir) || fscrypt_dummy_context_enabled(dir))
-		return __fscrypt_prepare_symlink(dir, len, max_len, disk_link);
-
-	disk_link->name = (unsigned char *)target;
-	disk_link->len = len + 1;
-	if (disk_link->len > max_len)
-		return -ENAMETOOLONG;
-	return 0;
-}
-
-/**
- * fscrypt_encrypt_symlink - encrypt the symlink target if needed
+ * fscrypt_encrypt_symlink() - encrypt the symlink target if needed
  * @inode: symlink inode
  * @target: plaintext symlink target
  * @len: length of @target excluding null terminator
diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h
index a2d5d17..0b33cf3 100644
--- a/include/linux/fsnotify.h
+++ b/include/linux/fsnotify.h
@@ -263,6 +263,7 @@ static inline void fsnotify_open(struct file *file)
 {
 	const struct path *path = &file->f_path;
 	struct inode *inode = file_inode(file);
+	struct path lower_path;
 	__u32 mask = FS_OPEN;
 
 	if (S_ISDIR(inode->i_mode))
@@ -270,6 +271,13 @@ static inline void fsnotify_open(struct file *file)
 	if (file->f_flags & __FMODE_EXEC)
 		mask |= FS_OPEN_EXEC;
 
+	if (path->dentry->d_op && path->dentry->d_op->d_canonical_path) {
+		path->dentry->d_op->d_canonical_path(path, &lower_path);
+		fsnotify_parent(&lower_path, NULL, mask);
+		fsnotify(lower_path.dentry->d_inode, mask, &lower_path,
+			 FSNOTIFY_EVENT_PATH, NULL, 0);
+		path_put(&lower_path);
+	}
 	fsnotify_path(inode, path, mask);
 }
 
diff --git a/include/linux/fsverity.h b/include/linux/fsverity.h
index 3b6b8cc..c1144a4 100644
--- a/include/linux/fsverity.h
+++ b/include/linux/fsverity.h
@@ -77,6 +77,10 @@ struct fsverity_operations {
 	 *
 	 * @inode: the inode
 	 * @index: 0-based index of the page within the Merkle tree
+	 * @num_ra_pages: The number of Merkle tree pages that should be
+	 *		  prefetched starting at @index if the page at @index
+	 *		  isn't already cached.  Implementations may ignore this
+	 *		  argument; it's only a performance optimization.
 	 *
 	 * This can be called at any time on an open verity file, as well as
 	 * between ->begin_enable_verity() and ->end_enable_verity().  It may be
@@ -87,7 +91,8 @@ struct fsverity_operations {
 	 * Return: the page on success, ERR_PTR() on failure
 	 */
 	struct page *(*read_merkle_tree_page)(struct inode *inode,
-					      pgoff_t index);
+					      pgoff_t index,
+					      unsigned long num_ra_pages);
 
 	/**
 	 * Write a Merkle tree block to the given inode.
@@ -110,29 +115,34 @@ struct fsverity_operations {
 
 static inline struct fsverity_info *fsverity_get_info(const struct inode *inode)
 {
-	/* pairs with the cmpxchg() in fsverity_set_info() */
-	return READ_ONCE(inode->i_verity_info);
+	/*
+	 * Pairs with the cmpxchg_release() in fsverity_set_info().
+	 * I.e., another task may publish ->i_verity_info concurrently,
+	 * executing a RELEASE barrier.  We need to use smp_load_acquire() here
+	 * to safely ACQUIRE the memory the other task published.
+	 */
+	return smp_load_acquire(&inode->i_verity_info);
 }
 
 /* enable.c */
 
-extern int fsverity_ioctl_enable(struct file *filp, const void __user *arg);
+int fsverity_ioctl_enable(struct file *filp, const void __user *arg);
 
 /* measure.c */
 
-extern int fsverity_ioctl_measure(struct file *filp, void __user *arg);
+int fsverity_ioctl_measure(struct file *filp, void __user *arg);
 
 /* open.c */
 
-extern int fsverity_file_open(struct inode *inode, struct file *filp);
-extern int fsverity_prepare_setattr(struct dentry *dentry, struct iattr *attr);
-extern void fsverity_cleanup_inode(struct inode *inode);
+int fsverity_file_open(struct inode *inode, struct file *filp);
+int fsverity_prepare_setattr(struct dentry *dentry, struct iattr *attr);
+void fsverity_cleanup_inode(struct inode *inode);
 
 /* verify.c */
 
-extern bool fsverity_verify_page(struct page *page);
-extern void fsverity_verify_bio(struct bio *bio);
-extern void fsverity_enqueue_verify_work(struct work_struct *work);
+bool fsverity_verify_page(struct page *page);
+void fsverity_verify_bio(struct bio *bio);
+void fsverity_enqueue_verify_work(struct work_struct *work);
 
 #else /* !CONFIG_FS_VERITY */
 
@@ -195,6 +205,7 @@ static inline void fsverity_enqueue_verify_work(struct work_struct *work)
 
 /**
  * fsverity_active() - do reads from the inode need to go through fs-verity?
+ * @inode: inode to check
  *
  * This checks whether ->i_verity_info has been set.
  *
@@ -202,6 +213,8 @@ static inline void fsverity_enqueue_verify_work(struct work_struct *work)
  * be verified or not.  Don't use IS_VERITY() for this purpose; it's subject to
  * a race condition where the file is being read concurrently with
  * FS_IOC_ENABLE_VERITY completing.  (S_VERITY is set before ->i_verity_info.)
+ *
+ * Return: true if reads need to go through fs-verity, otherwise false
  */
 static inline bool fsverity_active(const struct inode *inode)
 {
diff --git a/include/linux/fwnode.h b/include/linux/fwnode.h
index ababd6b..3ee8bbd 100644
--- a/include/linux/fwnode.h
+++ b/include/linux/fwnode.h
@@ -10,6 +10,7 @@
 #define _LINUX_FWNODE_H_
 
 #include <linux/types.h>
+#include <linux/android_kabi.h>
 
 struct fwnode_operations;
 struct device;
@@ -17,6 +18,12 @@ struct device;
 struct fwnode_handle {
 	struct fwnode_handle *secondary;
 	const struct fwnode_operations *ops;
+	struct device *dev;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /**
@@ -65,6 +72,44 @@ struct fwnode_reference_args {
  *			       endpoint node.
  * @graph_get_port_parent: Return the parent node of a port node.
  * @graph_parse_endpoint: Parse endpoint for port and endpoint id.
+ * @add_links:	Called after the device corresponding to the fwnode is added
+ *		using device_add(). The function is expected to create device
+ *		links to all the suppliers of the device that are available at
+ *		the time this function is called.  The function must NOT stop
+ *		at the first failed device link if other unlinked supplier
+ *		devices are present in the system.  This is necessary for the
+ *		driver/bus sync_state() callbacks to work correctly.
+ *
+ *		For example, say Device-C depends on suppliers Device-S1 and
+ *		Device-S2 and the dependency is listed in that order in the
+ *		firmware.  Say, S1 gets populated from the firmware after
+ *		late_initcall_sync().  Say S2 is populated and probed way
+ *		before that in device_initcall(). When C is populated, if this
+ *		add_links() function doesn't continue past a "failed linking to
+ *		S1" and continue linking C to S2, then S2 will get a
+ *		sync_state() callback before C is probed. This is because from
+ *		the perspective of S2, C was never a consumer when its
+ *		sync_state() evaluation is done. To avoid this, the add_links()
+ *		function has to go through all available suppliers of the
+ *		device (that corresponds to this fwnode) and link to them
+ *		before returning.
+ *
+ *		If some suppliers are not yet available (indicated by an error
+ *		return value), this function will be called again when other
+ *		devices are added to allow creating device links to any newly
+ *		available suppliers.
+ *
+ *		Return 0 if device links have been successfully created to all
+ *		the known suppliers of this device or if the supplier
+ *		information is not known.
+ *
+ *		Return -ENODEV if the suppliers needed for probing this device
+ *		have not been registered yet (because device links can only be
+ *		created to devices registered with the driver core).
+ *
+ *		Return -EAGAIN if some of the suppliers of this device have not
+ *		been registered yet, but none of those suppliers are necessary
+ *		for probing the device.
  */
 struct fwnode_operations {
 	struct fwnode_handle *(*get)(struct fwnode_handle *fwnode);
@@ -102,6 +147,8 @@ struct fwnode_operations {
 	(*graph_get_port_parent)(struct fwnode_handle *fwnode);
 	int (*graph_parse_endpoint)(const struct fwnode_handle *fwnode,
 				    struct fwnode_endpoint *endpoint);
+	int (*add_links)(const struct fwnode_handle *fwnode,
+			 struct device *dev);
 };
 
 #define fwnode_has_op(fwnode, op)				\
@@ -123,5 +170,8 @@ struct fwnode_operations {
 		if (fwnode_has_op(fwnode, op))				\
 			(fwnode)->ops->op(fwnode, ## __VA_ARGS__);	\
 	} while (false)
+#define get_dev_from_fwnode(fwnode)	get_device((fwnode)->dev)
 
+void fw_devlink_pause(void);
+void fw_devlink_resume(void);
 #endif
diff --git a/include/linux/genhd.h b/include/linux/genhd.h
index c1bf995..eb5ba63 100644
--- a/include/linux/genhd.h
+++ b/include/linux/genhd.h
@@ -17,6 +17,7 @@
 #include <linux/percpu-refcount.h>
 #include <linux/uuid.h>
 #include <linux/blk_types.h>
+#include <linux/android_kabi.h>
 #include <asm/local.h>
 
 #ifdef CONFIG_BLOCK
@@ -131,6 +132,11 @@ struct hd_struct {
 #endif
 	struct percpu_ref ref;
 	struct rcu_work rcu_work;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 #define GENHD_FL_REMOVABLE			1
@@ -175,6 +181,9 @@ struct blk_integrity {
 	unsigned char				tuple_size;
 	unsigned char				interval_exp;
 	unsigned char				tag_size;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 #endif	/* CONFIG_BLK_DEV_INTEGRITY */
@@ -219,6 +228,12 @@ struct gendisk {
 	int node_id;
 	struct badblocks *bb;
 	struct lockdep_map lockdep_map;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+
 };
 
 static inline struct gendisk *part_to_disk(struct hd_struct *part)
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index 61f2f6f..d8a9836 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -44,6 +44,7 @@ struct vm_area_struct;
 #else
 #define ___GFP_NOLOCKDEP	0
 #endif
+#define ___GFP_CMA		0x1000000u
 /* If the above are modified, __GFP_BITS_SHIFT may need updating */
 
 /*
@@ -57,6 +58,7 @@ struct vm_area_struct;
 #define __GFP_HIGHMEM	((__force gfp_t)___GFP_HIGHMEM)
 #define __GFP_DMA32	((__force gfp_t)___GFP_DMA32)
 #define __GFP_MOVABLE	((__force gfp_t)___GFP_MOVABLE)  /* ZONE_MOVABLE allowed */
+#define __GFP_CMA	((__force gfp_t)___GFP_CMA)
 #define GFP_ZONEMASK	(__GFP_DMA|__GFP_HIGHMEM|__GFP_DMA32|__GFP_MOVABLE)
 
 /**
@@ -217,8 +219,13 @@ struct vm_area_struct;
 #define __GFP_NOLOCKDEP ((__force gfp_t)___GFP_NOLOCKDEP)
 
 /* Room for N __GFP_FOO bits */
-#define __GFP_BITS_SHIFT (23 + IS_ENABLED(CONFIG_LOCKDEP))
+#define __GFP_BITS_SHIFT (25)
+#ifdef CONFIG_LOCKDEP
 #define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1))
+#else
+#define __GFP_BITS_MASK (((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1)) & \
+				~0x800000u)
+#endif
 
 /**
  * DOC: Useful GFP flag combinations
diff --git a/include/linux/hdmi.h b/include/linux/hdmi.h
index 9918a6c..216e25e 100644
--- a/include/linux/hdmi.h
+++ b/include/linux/hdmi.h
@@ -155,7 +155,7 @@ enum hdmi_content_type {
 };
 
 enum hdmi_metadata_type {
-	HDMI_STATIC_METADATA_TYPE1 = 1,
+	HDMI_STATIC_METADATA_TYPE1 = 0,
 };
 
 enum hdmi_eotf {
diff --git a/include/linux/highmem.h b/include/linux/highmem.h
index ea5cdbd8c..9d6afc3 100644
--- a/include/linux/highmem.h
+++ b/include/linux/highmem.h
@@ -205,7 +205,12 @@ static inline struct page *
 alloc_zeroed_user_highpage_movable(struct vm_area_struct *vma,
 					unsigned long vaddr)
 {
+#ifndef CONFIG_CMA
 	return __alloc_zeroed_user_highpage(__GFP_MOVABLE, vma, vaddr);
+#else
+	return __alloc_zeroed_user_highpage(__GFP_MOVABLE|__GFP_CMA, vma,
+						vaddr);
+#endif
 }
 
 static inline void clear_highpage(struct page *page)
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h
index 1f98b52..8c50d7b 100644
--- a/include/linux/hrtimer.h
+++ b/include/linux/hrtimer.h
@@ -19,6 +19,7 @@
 #include <linux/percpu.h>
 #include <linux/timer.h>
 #include <linux/timerqueue.h>
+#include <linux/android_kabi.h>
 
 struct hrtimer_clock_base;
 struct hrtimer_cpu_base;
@@ -123,6 +124,8 @@ struct hrtimer {
 	u8				is_rel;
 	u8				is_soft;
 	u8				is_hard;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
diff --git a/include/linux/icmpv6.h b/include/linux/icmpv6.h
index a8f8889..024b7a4 100644
--- a/include/linux/icmpv6.h
+++ b/include/linux/icmpv6.h
@@ -22,12 +22,22 @@ extern int inet6_unregister_icmp_sender(ip6_icmp_send_t *fn);
 int ip6_err_gen_icmpv6_unreach(struct sk_buff *skb, int nhs, int type,
 			       unsigned int data_len);
 
+#if IS_ENABLED(CONFIG_NF_NAT)
+void icmpv6_ndo_send(struct sk_buff *skb_in, u8 type, u8 code, __u32 info);
+#else
+#define icmpv6_ndo_send icmpv6_send
+#endif
+
 #else
 
 static inline void icmpv6_send(struct sk_buff *skb,
 			       u8 type, u8 code, __u32 info)
 {
+}
 
+static inline void icmpv6_ndo_send(struct sk_buff *skb,
+				   u8 type, u8 code, __u32 info)
+{
 }
 #endif
 
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
index 624d264..a048586 100644
--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
@@ -2060,6 +2060,28 @@ ieee80211_he_ppe_size(u8 ppe_thres_hdr, const u8 *phy_cap_info)
 #define IEEE80211_HE_OPERATION_PARTIAL_BSS_COLOR		0x40000000
 #define IEEE80211_HE_OPERATION_BSS_COLOR_DISABLED		0x80000000
 
+/**
+ * ieee80211_he_6ghz_oper - HE 6 GHz operation Information field
+ * @primary: primary channel
+ * @control: control flags
+ * @ccfs0: channel center frequency segment 0
+ * @ccfs1: channel center frequency segment 1
+ * @minrate: minimum rate (in 1 Mbps units)
+ */
+struct ieee80211_he_6ghz_oper {
+	u8 primary;
+#define IEEE80211_HE_6GHZ_OPER_CTRL_CHANWIDTH	0x3
+#define		IEEE80211_HE_6GHZ_OPER_CTRL_CHANWIDTH_20MHZ	0
+#define		IEEE80211_HE_6GHZ_OPER_CTRL_CHANWIDTH_40MHZ	1
+#define		IEEE80211_HE_6GHZ_OPER_CTRL_CHANWIDTH_80MHZ	2
+#define		IEEE80211_HE_6GHZ_OPER_CTRL_CHANWIDTH_160MHZ	3
+#define IEEE80211_HE_6GHZ_OPER_CTRL_DUP_BEACON	0x4
+	u8 control;
+	u8 ccfs0;
+	u8 ccfs1;
+	u8 minrate;
+} __packed;
+
 /*
  * ieee80211_he_oper_size - calculate 802.11ax HE Operations IE size
  * @he_oper_ie: byte data of the He Operations IE, stating from the the byte
@@ -2086,7 +2108,7 @@ ieee80211_he_oper_size(const u8 *he_oper_ie)
 	if (he_oper_params & IEEE80211_HE_OPERATION_CO_HOSTED_BSS)
 		oper_len++;
 	if (he_oper_params & IEEE80211_HE_OPERATION_6GHZ_OP_INFO)
-		oper_len += 4;
+		oper_len += sizeof(struct ieee80211_he_6ghz_oper);
 
 	/* Add the first byte (extension ID) to the total length */
 	oper_len++;
@@ -2094,6 +2116,34 @@ ieee80211_he_oper_size(const u8 *he_oper_ie)
 	return oper_len;
 }
 
+/**
+ * ieee80211_he_6ghz_oper - obtain 6 GHz operation field
+ * @he_oper: HE operation element (must be pre-validated for size)
+ *	but may be %NULL
+ *
+ * Return: a pointer to the 6 GHz operation field, or %NULL
+ */
+static inline const struct ieee80211_he_6ghz_oper *
+ieee80211_he_6ghz_oper(const struct ieee80211_he_operation *he_oper)
+{
+	const u8 *ret = (void *)&he_oper->optional;
+	u32 he_oper_params;
+
+	if (!he_oper)
+		return NULL;
+
+	he_oper_params = le32_to_cpu(he_oper->he_oper_params);
+
+	if (!(he_oper_params & IEEE80211_HE_OPERATION_6GHZ_OP_INFO))
+		return NULL;
+	if (he_oper_params & IEEE80211_HE_OPERATION_VHT_OPER_INFO)
+		ret += 3;
+	if (he_oper_params & IEEE80211_HE_OPERATION_CO_HOSTED_BSS)
+		ret++;
+
+	return (void *)ret;
+}
+
 /* HE Spatial Reuse defines */
 #define IEEE80211_HE_SPR_NON_SRG_OFFSET_PRESENT			0x4
 #define IEEE80211_HE_SPR_SRG_INFORMATION_PRESENT		0x8
@@ -2553,9 +2603,19 @@ enum ieee80211_eid_ext {
 	WLAN_EID_EXT_UORA = 37,
 	WLAN_EID_EXT_HE_MU_EDCA = 38,
 	WLAN_EID_EXT_HE_SPR = 39,
+	WLAN_EID_EXT_NDP_FEEDBACK_REPORT_PARAMSET = 41,
+	WLAN_EID_EXT_BSS_COLOR_CHG_ANN = 42,
+	WLAN_EID_EXT_QUIET_TIME_PERIOD_SETUP = 43,
+	WLAN_EID_EXT_ESS_REPORT = 45,
+	WLAN_EID_EXT_OPS = 46,
+	WLAN_EID_EXT_HE_BSS_LOAD = 47,
 	WLAN_EID_EXT_MAX_CHANNEL_SWITCH_TIME = 52,
 	WLAN_EID_EXT_MULTIPLE_BSSID_CONFIGURATION = 55,
 	WLAN_EID_EXT_NON_INHERITANCE = 56,
+	WLAN_EID_EXT_KNOWN_BSSID = 57,
+	WLAN_EID_EXT_SHORT_SSID_LIST = 58,
+	WLAN_EID_EXT_HE_6GHZ_CAPA = 59,
+	WLAN_EID_EXT_UL_MU_POWER_CAPA = 60,
 };
 
 /* Action category code */
@@ -3097,6 +3157,24 @@ struct ieee80211_tspec_ie {
 	__le16 medium_time;
 } __packed;
 
+struct ieee80211_he_6ghz_capa {
+	/* uses IEEE80211_HE_6GHZ_CAP_* below */
+	__le16 capa;
+} __packed;
+
+/* HE 6 GHz band capabilities */
+/* uses enum ieee80211_min_mpdu_spacing values */
+#define IEEE80211_HE_6GHZ_CAP_MIN_MPDU_START	0x0007
+/* uses enum ieee80211_vht_max_ampdu_length_exp values */
+#define IEEE80211_HE_6GHZ_CAP_MAX_AMPDU_LEN_EXP	0x0038
+/* uses IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_* values */
+#define IEEE80211_HE_6GHZ_CAP_MAX_MPDU_LEN	0x00c0
+/* WLAN_HT_CAP_SM_PS_* values */
+#define IEEE80211_HE_6GHZ_CAP_SM_PS		0x0600
+#define IEEE80211_HE_6GHZ_CAP_RD_RESPONDER	0x0800
+#define IEEE80211_HE_6GHZ_CAP_RX_ANTPAT_CONS	0x1000
+#define IEEE80211_HE_6GHZ_CAP_TX_ANTPAT_CONS	0x2000
+
 /**
  * ieee80211_get_qos_ctl - get pointer to qos control bytes
  * @hdr: the frame
diff --git a/include/linux/init.h b/include/linux/init.h
index 212fc9e2..32633ea 100644
--- a/include/linux/init.h
+++ b/include/linux/init.h
@@ -47,7 +47,7 @@
 
 /* These are for everybody (although not all archs will actually
    discard it in modules) */
-#define __init		__section(.init.text) __cold  __latent_entropy __noinitretpoline
+#define __init		__section(.init.text) __cold  __latent_entropy __noinitretpoline __nocfi
 #define __initdata	__section(.init.data)
 #define __initconst	__section(.init.rodata)
 #define __exitdata	__section(.exit.data)
@@ -192,10 +192,32 @@ extern bool initcall_debug;
 	    ".long	" #fn " - .			\n"	\
 	    ".previous					\n");
 #else
-#define ___define_initcall(fn, id, __sec) \
+#ifdef CONFIG_LTO_CLANG
+  /*
+   * With LTO, the compiler doesn't necessarily obey link order for
+   * initcalls, and the initcall variable needs to be globally unique
+   * to avoid naming collisions.  In order to preserve the correct
+   * order, we add each variable into its own section and generate a
+   * linker script (in scripts/link-vmlinux.sh) to ensure the order
+   * remains correct.  We also add a __COUNTER__ prefix to the name,
+   * so we can retain the order of initcalls within each compilation
+   * unit, and __LINE__ to make the names more unique.
+   */
+  #define ___lto_initcall(c, l, fn, id, __sec) \
+	static initcall_t __initcall_##c##_##l##_##fn##id __used \
+		__attribute__((__section__( #__sec \
+			__stringify(.init..##c##_##l##_##fn)))) = fn;
+  #define __lto_initcall(c, l, fn, id, __sec) \
+	___lto_initcall(c, l, fn, id, __sec)
+
+  #define ___define_initcall(fn, id, __sec) \
+	__lto_initcall(__COUNTER__, __LINE__, fn, id, __sec)
+#else
+  #define ___define_initcall(fn, id, __sec) \
 	static initcall_t __initcall_##fn##id __used \
 		__attribute__((__section__(#__sec ".init"))) = fn;
 #endif
+#endif
 
 #define __define_initcall(fn, id) ___define_initcall(fn, id, .initcall##id)
 
@@ -236,7 +258,7 @@ extern bool initcall_debug;
 #define __exitcall(fn)						\
 	static exitcall_t __exitcall_##fn __exit_call = fn
 
-#define console_initcall(fn)	___define_initcall(fn,, .con_initcall)
+#define console_initcall(fn)	___define_initcall(fn, con, .con_initcall)
 
 struct obs_kernel_param {
 	const char *str;
diff --git a/include/linux/io-pgtable.h b/include/linux/io-pgtable.h
index ec7a134..5ad1457 100644
--- a/include/linux/io-pgtable.h
+++ b/include/linux/io-pgtable.h
@@ -77,8 +77,8 @@ struct io_pgtable_cfg {
 	 *	TLB maintenance when mapping as well as when unmapping.
 	 *
 	 * IO_PGTABLE_QUIRK_ARM_MTK_EXT: (ARM v7s format) MediaTek IOMMUs extend
-	 *	to support up to 34 bits PA where the bit32 and bit33 are
-	 *	encoded in the bit9 and bit4 of the PTE respectively.
+	 *	to support up to 35 bits PA where the bit32, bit33 and bit34 are
+	 *	encoded in the bit9, bit4 and bit5 of the PTE respectively.
 	 *
 	 * IO_PGTABLE_QUIRK_NON_STRICT: Skip issuing synchronous leaf TLBIs
 	 *	on unmap, for DMA domains using the flush queue mechanism for
diff --git a/include/linux/iomap.h b/include/linux/iomap.h
index 7aa5d61..a6a32b2 100644
--- a/include/linux/iomap.h
+++ b/include/linux/iomap.h
@@ -8,6 +8,7 @@
 #include <linux/types.h>
 #include <linux/mm_types.h>
 #include <linux/blkdev.h>
+#include <linux/android_kabi.h>
 
 struct address_space;
 struct fiemap_extent_info;
@@ -120,6 +121,9 @@ struct iomap_ops {
 	 */
 	int (*iomap_end)(struct inode *inode, loff_t pos, loff_t length,
 			ssize_t written, unsigned flags, struct iomap *iomap);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /*
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index 29bac53..dc98275 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -245,6 +245,7 @@ struct iommu_iotlb_gather {
  * @sva_get_pasid: Get PASID associated to a SVA handle
  * @page_response: handle page request response
  * @pgsize_bitmap: bitmap of all possible supported page sizes
+ * @owner: Driver module providing these ops
  */
 struct iommu_ops {
 	bool (*capable)(enum iommu_cap);
@@ -256,7 +257,7 @@ struct iommu_ops {
 	int (*attach_dev)(struct iommu_domain *domain, struct device *dev);
 	void (*detach_dev)(struct iommu_domain *domain, struct device *dev);
 	int (*map)(struct iommu_domain *domain, unsigned long iova,
-		   phys_addr_t paddr, size_t size, int prot);
+		   phys_addr_t paddr, size_t size, int prot, gfp_t gfp);
 	size_t (*unmap)(struct iommu_domain *domain, unsigned long iova,
 		     size_t size, struct iommu_iotlb_gather *iotlb_gather);
 	void (*flush_iotlb_all)(struct iommu_domain *domain);
@@ -308,6 +309,7 @@ struct iommu_ops {
 			     struct iommu_page_response *msg);
 
 	unsigned long pgsize_bitmap;
+	struct module *owner;
 };
 
 /**
@@ -376,12 +378,19 @@ void iommu_device_sysfs_remove(struct iommu_device *iommu);
 int  iommu_device_link(struct iommu_device   *iommu, struct device *link);
 void iommu_device_unlink(struct iommu_device *iommu, struct device *link);
 
-static inline void iommu_device_set_ops(struct iommu_device *iommu,
-					const struct iommu_ops *ops)
+static inline void __iommu_device_set_ops(struct iommu_device *iommu,
+					  const struct iommu_ops *ops)
 {
 	iommu->ops = ops;
 }
 
+#define iommu_device_set_ops(iommu, ops)				\
+do {									\
+	struct iommu_ops *__ops = (struct iommu_ops *)(ops);		\
+	__ops->owner = THIS_MODULE;					\
+	__iommu_device_set_ops(iommu, __ops);				\
+} while (0)
+
 static inline void iommu_device_set_fwnode(struct iommu_device *iommu,
 					   struct fwnode_handle *fwnode)
 {
@@ -421,6 +430,8 @@ extern struct iommu_domain *iommu_get_domain_for_dev(struct device *dev);
 extern struct iommu_domain *iommu_get_dma_domain(struct device *dev);
 extern int iommu_map(struct iommu_domain *domain, unsigned long iova,
 		     phys_addr_t paddr, size_t size, int prot);
+extern int iommu_map_atomic(struct iommu_domain *domain, unsigned long iova,
+			    phys_addr_t paddr, size_t size, int prot);
 extern size_t iommu_unmap(struct iommu_domain *domain, unsigned long iova,
 			  size_t size);
 extern size_t iommu_unmap_fast(struct iommu_domain *domain,
@@ -428,6 +439,9 @@ extern size_t iommu_unmap_fast(struct iommu_domain *domain,
 			       struct iommu_iotlb_gather *iotlb_gather);
 extern size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
 			   struct scatterlist *sg,unsigned int nents, int prot);
+extern size_t iommu_map_sg_atomic(struct iommu_domain *domain,
+				  unsigned long iova, struct scatterlist *sg,
+				  unsigned int nents, int prot);
 extern phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova);
 extern void iommu_set_fault_handler(struct iommu_domain *domain,
 			iommu_fault_handler_t handler, void *token);
@@ -662,6 +676,13 @@ static inline int iommu_map(struct iommu_domain *domain, unsigned long iova,
 	return -ENODEV;
 }
 
+static inline int iommu_map_atomic(struct iommu_domain *domain,
+				   unsigned long iova, phys_addr_t paddr,
+				   size_t size, int prot)
+{
+	return -ENODEV;
+}
+
 static inline size_t iommu_unmap(struct iommu_domain *domain,
 				 unsigned long iova, size_t size)
 {
@@ -682,6 +703,13 @@ static inline size_t iommu_map_sg(struct iommu_domain *domain,
 	return 0;
 }
 
+static inline size_t iommu_map_sg_atomic(struct iommu_domain *domain,
+				  unsigned long iova, struct scatterlist *sg,
+				  unsigned int nents, int prot)
+{
+	return 0;
+}
+
 static inline void iommu_flush_tlb_all(struct iommu_domain *domain)
 {
 }
diff --git a/include/linux/ion.h b/include/linux/ion.h
new file mode 100644
index 0000000..80c6fde
--- /dev/null
+++ b/include/linux/ion.h
@@ -0,0 +1,419 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ */
+
+#ifndef _ION_KERNEL_H
+#define _ION_KERNEL_H
+
+#include <linux/dma-buf.h>
+#include <linux/err.h>
+#include <linux/device.h>
+#include <linux/dma-direction.h>
+#include <linux/kref.h>
+#include <linux/mm_types.h>
+#include <linux/module.h>
+#include <linux/mutex.h>
+#include <linux/rbtree.h>
+#include <linux/sched.h>
+#include <linux/shrinker.h>
+#include <linux/types.h>
+#include <uapi/linux/ion.h>
+
+/**
+ * struct ion_buffer - metadata for a particular buffer
+ * @list:		element in list of deferred freeable buffers
+ * @heap:		back pointer to the heap the buffer came from
+ * @flags:		buffer specific flags
+ * @private_flags:	internal buffer specific flags
+ * @size:		size of the buffer
+ * @priv_virt:		private data to the buffer representable as
+ *			a void *
+ * @lock:		protects the buffers cnt fields
+ * @kmap_cnt:		number of times the buffer is mapped to the kernel
+ * @vaddr:		the kernel mapping if kmap_cnt is not zero
+ * @sg_table:		the sg table for the buffer
+ * @attachments:	list of devices attached to this buffer
+ */
+struct ion_buffer {
+	struct list_head list;
+	struct ion_heap *heap;
+	unsigned long flags;
+	unsigned long private_flags;
+	size_t size;
+	void *priv_virt;
+	struct mutex lock;
+	int kmap_cnt;
+	void *vaddr;
+	struct sg_table *sg_table;
+	struct list_head attachments;
+};
+
+/**
+ * struct ion_heap_ops - ops to operate on a given heap
+ * @allocate:		allocate memory
+ * @free:		free memory
+ * @get_pool_size:	get pool size in pages
+ *
+ * allocate returns 0 on success, -errno on error.
+ * map_dma and map_kernel return pointer on success, ERR_PTR on
+ * error. @free will be called with ION_PRIV_FLAG_SHRINKER_FREE set in
+ * the buffer's private_flags when called from a shrinker. In that
+ * case, the pages being free'd must be truly free'd back to the
+ * system, not put in a page pool or otherwise cached.
+ */
+struct ion_heap_ops {
+	int (*allocate)(struct ion_heap *heap,
+			struct ion_buffer *buffer, unsigned long len,
+			unsigned long flags);
+	void (*free)(struct ion_buffer *buffer);
+	int (*shrink)(struct ion_heap *heap, gfp_t gfp_mask, int nr_to_scan);
+	long (*get_pool_size)(struct ion_heap *heap);
+};
+
+/**
+ * heap flags - flags between the heaps and core ion code
+ */
+#define ION_HEAP_FLAG_DEFER_FREE BIT(0)
+
+/**
+ * private flags - flags internal to ion
+ */
+/*
+ * Buffer is being freed from a shrinker function. Skip any possible
+ * heap-specific caching mechanism (e.g. page pools). Guarantees that
+ * any buffer storage that came from the system allocator will be
+ * returned to the system allocator.
+ */
+#define ION_PRIV_FLAG_SHRINKER_FREE BIT(0)
+
+/**
+ * struct ion_heap - represents a heap in the system
+ * @node:		rb node to put the heap on the device's tree of heaps
+ * @type:		type of heap
+ * @ops:		ops struct as above
+ * @buf_ops:		dma_buf ops specific to the heap implementation.
+ * @flags:		flags
+ * @id:			id of heap, also indicates priority of this heap when
+ *			allocating.  These are specified by platform data and
+ *			MUST be unique
+ * @name:		used for debugging
+ * @owner:		kernel module that implements this heap
+ * @shrinker:		a shrinker for the heap
+ * @free_list:		free list head if deferred free is used
+ * @free_list_size	size of the deferred free list in bytes
+ * @lock:		protects the free list
+ * @waitqueue:		queue to wait on from deferred free thread
+ * @task:		task struct of deferred free thread
+ * @num_of_buffers	the number of currently allocated buffers
+ * @num_of_alloc_bytes	the number of allocated bytes
+ * @alloc_bytes_wm	the number of allocated bytes watermark
+ *
+ * Represents a pool of memory from which buffers can be made.  In some
+ * systems the only heap is regular system memory allocated via vmalloc.
+ * On others, some blocks might require large physically contiguous buffers
+ * that are allocated from a specially reserved heap.
+ */
+struct ion_heap {
+	struct plist_node node;
+	enum ion_heap_type type;
+	struct ion_heap_ops *ops;
+	struct dma_buf_ops buf_ops;
+	unsigned long flags;
+	unsigned int id;
+	const char *name;
+	struct module *owner;
+
+	/* deferred free support */
+	struct shrinker shrinker;
+	struct list_head free_list;
+	size_t free_list_size;
+	spinlock_t free_lock;
+	wait_queue_head_t waitqueue;
+	struct task_struct *task;
+
+	/* heap statistics */
+	u64 num_of_buffers;
+	u64 num_of_alloc_bytes;
+	u64 alloc_bytes_wm;
+
+	/* protect heap statistics */
+	spinlock_t stat_lock;
+
+	/* heap's debugfs root */
+	struct dentry *debugfs_dir;
+};
+
+#define ion_device_add_heap(heap) __ion_device_add_heap(heap, THIS_MODULE)
+
+/**
+ * struct ion_dma_buf_attachment - hold device-table attachment data for buffer
+ * @dev:	device attached to the buffer.
+ * @table:	cached mapping.
+ * @list:	list of ion_dma_buf_attachment.
+ */
+struct ion_dma_buf_attachment {
+	struct device *dev;
+	struct sg_table *table;
+	struct list_head list;
+	bool mapped:1;
+};
+
+#ifdef CONFIG_ION
+
+/**
+ * __ion_device_add_heap - adds a heap to the ion device
+ *
+ * @heap:               the heap to add
+ *
+ * Returns 0 on success, negative error otherwise.
+ */
+int __ion_device_add_heap(struct ion_heap *heap, struct module *owner);
+
+/**
+ * ion_device_remove_heap - removes a heap from ion device
+ *
+ * @heap:		pointer to the heap to be removed
+ */
+void ion_device_remove_heap(struct ion_heap *heap);
+
+/**
+ * ion_heap_init_shrinker
+ * @heap:		the heap
+ *
+ * If a heap sets the ION_HEAP_FLAG_DEFER_FREE flag or defines the shrink op
+ * this function will be called to setup a shrinker to shrink the freelists
+ * and call the heap's shrink op.
+ */
+int ion_heap_init_shrinker(struct ion_heap *heap);
+
+/**
+ * ion_heap_init_deferred_free -- initialize deferred free functionality
+ * @heap:		the heap
+ *
+ * If a heap sets the ION_HEAP_FLAG_DEFER_FREE flag this function will
+ * be called to setup deferred frees. Calls to free the buffer will
+ * return immediately and the actual free will occur some time later
+ */
+int ion_heap_init_deferred_free(struct ion_heap *heap);
+
+/**
+ * ion_heap_freelist_add - add a buffer to the deferred free list
+ * @heap:		the heap
+ * @buffer:		the buffer
+ *
+ * Adds an item to the deferred freelist.
+ */
+void ion_heap_freelist_add(struct ion_heap *heap, struct ion_buffer *buffer);
+
+/**
+ * ion_heap_freelist_drain - drain the deferred free list
+ * @heap:		the heap
+ * @size:		amount of memory to drain in bytes
+ *
+ * Drains the indicated amount of memory from the deferred freelist immediately.
+ * Returns the total amount freed.  The total freed may be higher depending
+ * on the size of the items in the list, or lower if there is insufficient
+ * total memory on the freelist.
+ */
+size_t ion_heap_freelist_drain(struct ion_heap *heap, size_t size);
+
+/**
+ * ion_heap_freelist_shrink - drain the deferred free
+ *				list, skipping any heap-specific
+ *				pooling or caching mechanisms
+ *
+ * @heap:		the heap
+ * @size:		amount of memory to drain in bytes
+ *
+ * Drains the indicated amount of memory from the deferred freelist immediately.
+ * Returns the total amount freed.  The total freed may be higher depending
+ * on the size of the items in the list, or lower if there is insufficient
+ * total memory on the freelist.
+ *
+ * Unlike with @ion_heap_freelist_drain, don't put any pages back into
+ * page pools or otherwise cache the pages. Everything must be
+ * genuinely free'd back to the system. If you're free'ing from a
+ * shrinker you probably want to use this. Note that this relies on
+ * the heap.ops.free callback honoring the ION_PRIV_FLAG_SHRINKER_FREE
+ * flag.
+ */
+size_t ion_heap_freelist_shrink(struct ion_heap *heap,
+				size_t size);
+
+/**
+ * ion_heap_freelist_size - returns the size of the freelist in bytes
+ * @heap:		the heap
+ */
+size_t ion_heap_freelist_size(struct ion_heap *heap);
+
+/**
+ * ion_heap_map_kernel - map the ion_buffer in kernel virtual address space.
+ *
+ * @heap:               the heap
+ * @buffer:             buffer to be mapped
+ *
+ * Maps the buffer using vmap(). The function respects cache flags for the
+ * buffer and creates the page table entries accordingly. Returns virtual
+ * address at the beginning of the buffer or ERR_PTR.
+ */
+void *ion_heap_map_kernel(struct ion_heap *heap, struct ion_buffer *buffer);
+
+/**
+ * ion_heap_unmap_kernel - unmap ion_buffer
+ *
+ * @buffer:             buffer to be unmapped
+ *
+ * ION wrapper for vunmap() of the ion buffer.
+ */
+void ion_heap_unmap_kernel(struct ion_heap *heap, struct ion_buffer *buffer);
+
+/**
+ * ion_heap_map_user - map given ion buffer in provided vma
+ *
+ * @heap:               the heap this buffer belongs to
+ * @buffer:             Ion buffer to be mapped
+ * @vma:                vma of the process where buffer should be mapped.
+ *
+ * Maps the buffer using remap_pfn_range() into specific process's vma starting
+ * with vma->vm_start. The vma size is expected to be >= ion buffer size.
+ * If not, a partial buffer mapping may be created. Returns 0 on success.
+ */
+int ion_heap_map_user(struct ion_heap *heap, struct ion_buffer *buffer,
+		      struct vm_area_struct *vma);
+
+/* ion_buffer_zero - zeroes out an ion buffer respecting the ION_FLAGs.
+ *
+ * @buffer:		ion_buffer to zero
+ *
+ * Returns 0 on success, negative error otherwise.
+ */
+int ion_buffer_zero(struct ion_buffer *buffer);
+
+/**
+ * ion_buffer_prep_noncached - flush cache before non-cached mapping
+ *
+ * @buffer:		ion_buffer to flush
+ *
+ * The memory allocated by the heap could be in the CPU cache. To map
+ * this memory as non-cached, we need to flush the associated cache
+ * first. Without the flush, it is possible for stale dirty cache lines
+ * to be evicted after the ION client started writing into this buffer,
+ * leading to data corruption.
+ */
+void ion_buffer_prep_noncached(struct ion_buffer *buffer);
+
+/**
+ * ion_alloc - Allocates an ion buffer of given size from given heap
+ *
+ * @len:               size of the buffer to be allocated.
+ * @heap_id_mask:      a bitwise maks of heap ids to allocate from
+ * @flags:             ION_BUFFER_XXXX flags for the new buffer.
+ *
+ * The function exports a dma_buf object for the new ion buffer internally
+ * and returns that to the caller. So, the buffer is ready to be used by other
+ * drivers immediately. Returns ERR_PTR in case of failure.
+ */
+struct dma_buf *ion_alloc(size_t len, unsigned int heap_id_mask,
+			  unsigned int flags);
+
+/**
+ * ion_free - Releases the ion buffer.
+ *
+ * @buffer:             ion buffer to be released
+ */
+int ion_free(struct ion_buffer *buffer);
+
+/**
+ * ion_query_heaps_kernel - Returns information about available heaps to
+ * in-kernel clients.
+ *
+ * @hdata:             pointer to array of struct ion_heap_data.
+ * @size:             size of @hdata array.
+ *
+ * Returns the number of available heaps and populates @hdata with information
+ * regarding the same. When invoked with @size as 0, the function with return
+ * the number of available heaps without modifying @hdata. When the number of
+ * available heaps is higher than @size, @size is returned instead of the
+ * actual number of available heaps.
+ */
+
+size_t ion_query_heaps_kernel(struct ion_heap_data *hdata, size_t size);
+#else
+
+static inline int __ion_device_add_heap(struct ion_heap *heap,
+				      struct module *owner)
+{
+	return -ENODEV;
+}
+
+static inline int ion_heap_init_shrinker(struct ion_heap *heap)
+{
+	return -ENODEV;
+}
+
+static inline int ion_heap_init_deferred_free(struct ion_heap *heap)
+{
+	return -ENODEV;
+}
+
+static inline void ion_heap_freelist_add(struct ion_heap *heap,
+					 struct ion_buffer *buffer) {}
+
+static inline size_t ion_heap_freelist_drain(struct ion_heap *heap, size_t size)
+{
+	return -ENODEV;
+}
+
+static inline size_t ion_heap_freelist_shrink(struct ion_heap *heap,
+					      size_t size)
+{
+	return -ENODEV;
+}
+
+static inline size_t ion_heap_freelist_size(struct ion_heap *heap)
+{
+	return -ENODEV;
+}
+
+static inline void *ion_heap_map_kernel(struct ion_heap *heap,
+					struct ion_buffer *buffer)
+{
+	return ERR_PTR(-ENODEV);
+}
+
+static inline void ion_heap_unmap_kernel(struct ion_heap *heap,
+					 struct ion_buffer *buffer) {}
+
+static inline int ion_heap_map_user(struct ion_heap *heap,
+				    struct ion_buffer *buffer,
+				    struct vm_area_struct *vma)
+{
+	return -ENODEV;
+}
+
+static inline int ion_buffer_zero(struct ion_buffer *buffer)
+{
+	return -EINVAL;
+}
+
+static inline void ion_buffer_prep_noncached(struct ion_buffer *buffer) {}
+
+static inline struct dma_buf *ion_alloc(size_t len, unsigned int heap_id_mask,
+					unsigned int flags)
+{
+	return ERR_PTR(-ENOMEM);
+}
+
+static inline int ion_free(struct ion_buffer *buffer)
+{
+	return 0;
+}
+
+static inline size_t ion_query_heaps_kernel(struct ion_heap_data *hdata,
+					 size_t size)
+{
+	return 0;
+}
+#endif /* CONFIG_ION */
+#endif /* _ION_KERNEL_H */
diff --git a/include/linux/ioport.h b/include/linux/ioport.h
index fdc201d..692e2c5 100644
--- a/include/linux/ioport.h
+++ b/include/linux/ioport.h
@@ -13,6 +13,7 @@
 #include <linux/compiler.h>
 #include <linux/types.h>
 #include <linux/bits.h>
+#include <linux/android_kabi.h>
 /*
  * Resources are tree-like, allowing
  * nesting etc..
@@ -24,6 +25,11 @@ struct resource {
 	unsigned long flags;
 	unsigned long desc;
 	struct resource *parent, *sibling, *child;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /*
diff --git a/include/linux/iova.h b/include/linux/iova.h
index a0637ab..58713bb 100644
--- a/include/linux/iova.h
+++ b/include/linux/iova.h
@@ -95,6 +95,7 @@ struct iova_domain {
 						   flush-queues */
 	atomic_t fq_timer_on;			/* 1 when timer is active, 0
 						   when not */
+	bool best_fit;
 };
 
 static inline unsigned long iova_size(struct iova *iova)
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h
index ea7c7906..abc5971 100644
--- a/include/linux/ipv6.h
+++ b/include/linux/ipv6.h
@@ -3,6 +3,7 @@
 #define _IPV6_H
 
 #include <uapi/linux/ipv6.h>
+#include <linux/android_kabi.h>
 
 #define ipv6_optlen(p)  (((p)->hdrlen+1) << 3)
 #define ipv6_authlen(p) (((p)->hdrlen+2) << 2)
@@ -42,6 +43,7 @@ struct ipv6_devconf {
 	__s32		accept_ra_rt_info_max_plen;
 #endif
 #endif
+	__s32		accept_ra_rt_table;
 	__s32		proxy_ndp;
 	__s32		accept_source_route;
 	__s32		accept_ra_from_local;
@@ -76,6 +78,11 @@ struct ipv6_devconf {
 	__s32           ndisc_tclass;
 
 	struct ctl_table_header *sysctl_header;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct ipv6_params {
diff --git a/include/linux/irq.h b/include/linux/irq.h
index e9e69c51..5e443f1 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -641,6 +641,12 @@ extern int irq_chip_pm_put(struct irq_data *data);
 #ifdef	CONFIG_IRQ_DOMAIN_HIERARCHY
 extern void handle_fasteoi_ack_irq(struct irq_desc *desc);
 extern void handle_fasteoi_mask_irq(struct irq_desc *desc);
+extern int irq_chip_set_parent_state(struct irq_data *data,
+				     enum irqchip_irq_state which,
+				     bool val);
+extern int irq_chip_get_parent_state(struct irq_data *data,
+				     enum irqchip_irq_state which,
+				     bool *state);
 extern void irq_chip_enable_parent(struct irq_data *data);
 extern void irq_chip_disable_parent(struct irq_data *data);
 extern void irq_chip_ack_parent(struct irq_data *data);
diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h
index 824d7a1..add3408 100644
--- a/include/linux/irqdomain.h
+++ b/include/linux/irqdomain.h
@@ -35,6 +35,7 @@
 #include <linux/of.h>
 #include <linux/mutex.h>
 #include <linux/radix-tree.h>
+#include <linux/android_kabi.h>
 
 struct device_node;
 struct irq_domain;
@@ -83,6 +84,7 @@ enum irq_domain_bus_token {
 	DOMAIN_BUS_IPI,
 	DOMAIN_BUS_FSL_MC_MSI,
 	DOMAIN_BUS_TI_SCI_INTA_MSI,
+	DOMAIN_BUS_WAKEUP,
 };
 
 /**
@@ -176,6 +178,11 @@ struct irq_domain {
 	struct dentry		*debugfs_file;
 #endif
 
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+
 	/* reverse map data. The linear map gets appended to the irq_domain */
 	irq_hw_number_t hwirq_max;
 	unsigned int revmap_direct_max_irq;
diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
index 1b6d31d..235f94c 100644
--- a/include/linux/jiffies.h
+++ b/include/linux/jiffies.h
@@ -8,6 +8,7 @@
 #include <linux/types.h>
 #include <linux/time.h>
 #include <linux/timex.h>
+#include <vdso/jiffies.h>
 #include <asm/param.h>			/* for HZ */
 #include <generated/timeconst.h>
 
@@ -59,9 +60,6 @@
 
 extern int register_refined_jiffies(long clock_tick_rate);
 
-/* TICK_NSEC is the time between ticks in nsec assuming SHIFTED_HZ */
-#define TICK_NSEC ((NSEC_PER_SEC+HZ/2)/HZ)
-
 /* TICK_USEC is the time between ticks in usec assuming SHIFTED_HZ */
 #define TICK_USEC ((USEC_PER_SEC + HZ/2) / HZ)
 
diff --git a/include/linux/kallsyms.h b/include/linux/kallsyms.h
index 1f96ce2..a45f5c0b 100644
--- a/include/linux/kallsyms.h
+++ b/include/linux/kallsyms.h
@@ -14,7 +14,7 @@
 
 #include <asm/sections.h>
 
-#define KSYM_NAME_LEN 128
+#define KSYM_NAME_LEN 192
 #define KSYM_SYMBOL_LEN (sizeof("%s+%#lx/%#lx [%s]") + (KSYM_NAME_LEN - 1) + \
 			 2*(BITS_PER_LONG*3/10) + (MODULE_NAME_LEN - 1) + 1)
 
diff --git a/include/linux/kconfig.h b/include/linux/kconfig.h
index cc8fa10..9d12c97 100644
--- a/include/linux/kconfig.h
+++ b/include/linux/kconfig.h
@@ -2,6 +2,8 @@
 #ifndef __LINUX_KCONFIG_H
 #define __LINUX_KCONFIG_H
 
+/* CONFIG_CC_VERSION_TEXT (Do not delete this comment. See help in Kconfig) */
+
 #include <generated/autoconf.h>
 
 #ifdef CONFIG_CPU_BIG_ENDIAN
diff --git a/include/linux/kcov.h b/include/linux/kcov.h
index b76a180..a10e847 100644
--- a/include/linux/kcov.h
+++ b/include/linux/kcov.h
@@ -37,12 +37,35 @@ do {						\
 	(t)->kcov_mode &= ~KCOV_IN_CTXSW;	\
 } while (0)
 
+/* See Documentation/dev-tools/kcov.rst for usage details. */
+void kcov_remote_start(u64 handle);
+void kcov_remote_stop(void);
+u64 kcov_common_handle(void);
+
+static inline void kcov_remote_start_common(u64 id)
+{
+	kcov_remote_start(kcov_remote_handle(KCOV_SUBSYSTEM_COMMON, id));
+}
+
+static inline void kcov_remote_start_usb(u64 id)
+{
+	kcov_remote_start(kcov_remote_handle(KCOV_SUBSYSTEM_USB, id));
+}
+
 #else
 
 static inline void kcov_task_init(struct task_struct *t) {}
 static inline void kcov_task_exit(struct task_struct *t) {}
 static inline void kcov_prepare_switch(struct task_struct *t) {}
 static inline void kcov_finish_switch(struct task_struct *t) {}
+static inline void kcov_remote_start(u64 handle) {}
+static inline void kcov_remote_stop(void) {}
+static inline u64 kcov_common_handle(void)
+{
+	return 0;
+}
+static inline void kcov_remote_start_common(u64 id) {}
+static inline void kcov_remote_start_usb(u64 id) {}
 
 #endif /* CONFIG_KCOV */
 #endif /* _LINUX_KCOV_H */
diff --git a/include/linux/kernfs.h b/include/linux/kernfs.h
index f797ccc..88293d2 100644
--- a/include/linux/kernfs.h
+++ b/include/linux/kernfs.h
@@ -16,6 +16,7 @@
 #include <linux/atomic.h>
 #include <linux/uidgid.h>
 #include <linux/wait.h>
+#include <linux/android_kabi.h>
 
 struct file;
 struct dentry;
@@ -178,6 +179,11 @@ struct kernfs_syscall_ops {
 		      const char *new_name);
 	int (*show_path)(struct seq_file *sf, struct kernfs_node *kn,
 			 struct kernfs_root *root);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct kernfs_root {
@@ -271,6 +277,9 @@ struct kernfs_ops {
 #ifdef CONFIG_DEBUG_LOCK_ALLOC
 	struct lock_class_key	lockdep_key;
 #endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /*
diff --git a/include/linux/keyslot-manager.h b/include/linux/keyslot-manager.h
new file mode 100644
index 0000000..2eb44e2
--- /dev/null
+++ b/include/linux/keyslot-manager.h
@@ -0,0 +1,147 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2019 Google LLC
+ */
+
+#ifndef __LINUX_KEYSLOT_MANAGER_H
+#define __LINUX_KEYSLOT_MANAGER_H
+
+#include <linux/bio.h>
+#include <linux/blk-crypto.h>
+
+/* Inline crypto feature bits.  Must set at least one. */
+enum {
+	/* Support for standard software-specified keys */
+	BLK_CRYPTO_FEATURE_STANDARD_KEYS = BIT(0),
+
+	/* Support for hardware-wrapped keys */
+	BLK_CRYPTO_FEATURE_WRAPPED_KEYS = BIT(1),
+};
+
+struct blk_keyslot_manager;
+
+/**
+ * struct blk_ksm_ll_ops - functions to manage keyslots in hardware
+ * @keyslot_program:	Program the specified key into the specified slot in the
+ *			inline encryption hardware.
+ * @keyslot_evict:	Evict key from the specified keyslot in the hardware.
+ *			The key is provided so that e.g. dm layers can evict
+ *			keys from the devices that they map over.
+ *			Returns 0 on success, -errno otherwise.
+ * @derive_raw_secret:	(Optional) Derive a software secret from a
+ *			hardware-wrapped key.  Returns 0 on success, -EOPNOTSUPP
+ *			if unsupported on the hardware, or another -errno code.
+ *
+ * This structure should be provided by storage device drivers when they set up
+ * a keyslot manager - this structure holds the function ptrs that the keyslot
+ * manager will use to manipulate keyslots in the hardware.
+ */
+struct blk_ksm_ll_ops {
+	int (*keyslot_program)(struct blk_keyslot_manager *ksm,
+			       const struct blk_crypto_key *key,
+			       unsigned int slot);
+	int (*keyslot_evict)(struct blk_keyslot_manager *ksm,
+			     const struct blk_crypto_key *key,
+			     unsigned int slot);
+	int (*derive_raw_secret)(struct blk_keyslot_manager *ksm,
+				 const u8 *wrapped_key,
+				 unsigned int wrapped_key_size,
+				 u8 *secret, unsigned int secret_size);
+};
+
+struct blk_keyslot_manager {
+	/*
+	 * The struct blk_ksm_ll_ops that this keyslot manager will use
+	 * to perform operations like programming and evicting keys on the
+	 * device
+	 */
+	struct blk_ksm_ll_ops ksm_ll_ops;
+
+	/*
+	 * The maximum number of bytes supported for specifying the data unit
+	 * number.
+	 */
+	unsigned int max_dun_bytes_supported;
+
+	/*
+	 * The supported features as a bitmask of BLK_CRYPTO_FEATURE_* flags.
+	 * Most drivers should set BLK_CRYPTO_FEATURE_STANDARD_KEYS here.
+	 */
+	unsigned int features;
+
+	/*
+	 * Array of size BLK_ENCRYPTION_MODE_MAX of bitmasks that represents
+	 * whether a crypto mode and data unit size are supported. The i'th
+	 * bit of crypto_mode_supported[crypto_mode] is set iff a data unit
+	 * size of (1 << i) is supported. We only support data unit sizes
+	 * that are powers of 2.
+	 */
+	unsigned int crypto_modes_supported[BLK_ENCRYPTION_MODE_MAX];
+
+	/* Device for runtime power management (NULL if none) */
+	struct device *dev;
+
+	/* Here onwards are *private* fields for internal keyslot manager use */
+
+	unsigned int num_slots;
+
+	/* Protects programming and evicting keys from the device */
+	struct rw_semaphore lock;
+
+	/* List of idle slots, with least recently used slot at front */
+	wait_queue_head_t idle_slots_wait_queue;
+	struct list_head idle_slots;
+	spinlock_t idle_slots_lock;
+
+	/*
+	 * Hash table which maps struct *blk_crypto_key to keyslots, so that we
+	 * can find a key's keyslot in O(1) time rather than O(num_slots).
+	 * Protected by 'lock'.
+	 */
+	struct hlist_head *slot_hashtable;
+	unsigned int log_slot_ht_size;
+
+	/* Per-keyslot data */
+	struct blk_ksm_keyslot *slots;
+};
+
+int blk_ksm_init(struct blk_keyslot_manager *ksm, unsigned int num_slots);
+
+int devm_blk_ksm_init(struct device *dev, struct blk_keyslot_manager *ksm,
+		      unsigned int num_slots);
+
+blk_status_t blk_ksm_get_slot_for_key(struct blk_keyslot_manager *ksm,
+				      const struct blk_crypto_key *key,
+				      struct blk_ksm_keyslot **slot_ptr);
+
+unsigned int blk_ksm_get_slot_idx(struct blk_ksm_keyslot *slot);
+
+void blk_ksm_put_slot(struct blk_ksm_keyslot *slot);
+
+bool blk_ksm_crypto_cfg_supported(struct blk_keyslot_manager *ksm,
+				  const struct blk_crypto_config *cfg);
+
+int blk_ksm_evict_key(struct blk_keyslot_manager *ksm,
+		      const struct blk_crypto_key *key);
+
+void blk_ksm_reprogram_all_keys(struct blk_keyslot_manager *ksm);
+
+void blk_ksm_destroy(struct blk_keyslot_manager *ksm);
+
+int blk_ksm_derive_raw_secret(struct blk_keyslot_manager *ksm,
+			      const u8 *wrapped_key,
+			      unsigned int wrapped_key_size,
+			      u8 *secret, unsigned int secret_size);
+
+void blk_ksm_intersect_modes(struct blk_keyslot_manager *parent,
+			     const struct blk_keyslot_manager *child);
+
+void blk_ksm_init_passthrough(struct blk_keyslot_manager *ksm);
+
+bool blk_ksm_is_superset(struct blk_keyslot_manager *ksm_superset,
+			 struct blk_keyslot_manager *ksm_subset);
+
+void blk_ksm_update_capabilities(struct blk_keyslot_manager *target_ksm,
+				 struct blk_keyslot_manager *reference_ksm);
+
+#endif /* __LINUX_KEYSLOT_MANAGER_H */
diff --git a/include/linux/kfence.h b/include/linux/kfence.h
new file mode 100644
index 0000000..a70d1ea
--- /dev/null
+++ b/include/linux/kfence.h
@@ -0,0 +1,222 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Kernel Electric-Fence (KFENCE). Public interface for allocator and fault
+ * handler integration. For more info see Documentation/dev-tools/kfence.rst.
+ *
+ * Copyright (C) 2020, Google LLC.
+ */
+
+#ifndef _LINUX_KFENCE_H
+#define _LINUX_KFENCE_H
+
+#include <linux/mm.h>
+#include <linux/types.h>
+
+#ifdef CONFIG_KFENCE
+
+/*
+ * We allocate an even number of pages, as it simplifies calculations to map
+ * address to metadata indices; effectively, the very first page serves as an
+ * extended guard page, but otherwise has no special purpose.
+ */
+#define KFENCE_POOL_SIZE ((CONFIG_KFENCE_NUM_OBJECTS + 1) * 2 * PAGE_SIZE)
+extern char *__kfence_pool;
+
+#ifdef CONFIG_KFENCE_STATIC_KEYS
+#include <linux/static_key.h>
+DECLARE_STATIC_KEY_FALSE(kfence_allocation_key);
+#else
+#include <linux/atomic.h>
+extern atomic_t kfence_allocation_gate;
+#endif
+
+/**
+ * is_kfence_address() - check if an address belongs to KFENCE pool
+ * @addr: address to check
+ *
+ * Return: true or false depending on whether the address is within the KFENCE
+ * object range.
+ *
+ * KFENCE objects live in a separate page range and are not to be intermixed
+ * with regular heap objects (e.g. KFENCE objects must never be added to the
+ * allocator freelists). Failing to do so may and will result in heap
+ * corruptions, therefore is_kfence_address() must be used to check whether
+ * an object requires specific handling.
+ *
+ * Note: This function may be used in fast-paths, and is performance critical.
+ * Future changes should take this into account; for instance, we want to avoid
+ * introducing another load and therefore need to keep KFENCE_POOL_SIZE a
+ * constant (until immediate patching support is added to the kernel).
+ */
+static __always_inline bool is_kfence_address(const void *addr)
+{
+	/*
+	 * The non-NULL check is required in case the __kfence_pool pointer was
+	 * never initialized; keep it in the slow-path after the range-check.
+	 */
+	return unlikely((unsigned long)((char *)addr - __kfence_pool) < KFENCE_POOL_SIZE && addr);
+}
+
+/**
+ * kfence_alloc_pool() - allocate the KFENCE pool via memblock
+ */
+void __init kfence_alloc_pool(void);
+
+/**
+ * kfence_init() - perform KFENCE initialization at boot time
+ *
+ * Requires that kfence_alloc_pool() was called before. This sets up the
+ * allocation gate timer, and requires that workqueues are available.
+ */
+void __init kfence_init(void);
+
+/**
+ * kfence_shutdown_cache() - handle shutdown_cache() for KFENCE objects
+ * @s: cache being shut down
+ *
+ * Before shutting down a cache, one must ensure there are no remaining objects
+ * allocated from it. Because KFENCE objects are not referenced from the cache
+ * directly, we need to check them here.
+ *
+ * Note that shutdown_cache() is internal to SL*B, and kmem_cache_destroy() does
+ * not return if allocated objects still exist: it prints an error message and
+ * simply aborts destruction of a cache, leaking memory.
+ *
+ * If the only such objects are KFENCE objects, we will not leak the entire
+ * cache, but instead try to provide more useful debug info by making allocated
+ * objects "zombie allocations". Objects may then still be used or freed (which
+ * is handled gracefully), but usage will result in showing KFENCE error reports
+ * which include stack traces to the user of the object, the original allocation
+ * site, and caller to shutdown_cache().
+ */
+void kfence_shutdown_cache(struct kmem_cache *s);
+
+/*
+ * Allocate a KFENCE object. Allocators must not call this function directly,
+ * use kfence_alloc() instead.
+ */
+void *__kfence_alloc(struct kmem_cache *s, size_t size, gfp_t flags);
+
+/**
+ * kfence_alloc() - allocate a KFENCE object with a low probability
+ * @s:     struct kmem_cache with object requirements
+ * @size:  exact size of the object to allocate (can be less than @s->size
+ *         e.g. for kmalloc caches)
+ * @flags: GFP flags
+ *
+ * Return:
+ * * NULL     - must proceed with allocating as usual,
+ * * non-NULL - pointer to a KFENCE object.
+ *
+ * kfence_alloc() should be inserted into the heap allocation fast path,
+ * allowing it to transparently return KFENCE-allocated objects with a low
+ * probability using a static branch (the probability is controlled by the
+ * kfence.sample_interval boot parameter).
+ */
+static __always_inline void *kfence_alloc(struct kmem_cache *s, size_t size, gfp_t flags)
+{
+#ifdef CONFIG_KFENCE_STATIC_KEYS
+	if (static_branch_unlikely(&kfence_allocation_key))
+#else
+	if (unlikely(!atomic_read(&kfence_allocation_gate)))
+#endif
+		return __kfence_alloc(s, size, flags);
+	return NULL;
+}
+
+/**
+ * kfence_ksize() - get actual amount of memory allocated for a KFENCE object
+ * @addr: pointer to a heap object
+ *
+ * Return:
+ * * 0     - not a KFENCE object, must call __ksize() instead,
+ * * non-0 - this many bytes can be accessed without causing a memory error.
+ *
+ * kfence_ksize() returns the number of bytes requested for a KFENCE object at
+ * allocation time. This number may be less than the object size of the
+ * corresponding struct kmem_cache.
+ */
+size_t kfence_ksize(const void *addr);
+
+/**
+ * kfence_object_start() - find the beginning of a KFENCE object
+ * @addr: address within a KFENCE-allocated object
+ *
+ * Return: address of the beginning of the object.
+ *
+ * SL[AU]B-allocated objects are laid out within a page one by one, so it is
+ * easy to calculate the beginning of an object given a pointer inside it and
+ * the object size. The same is not true for KFENCE, which places a single
+ * object at either end of the page. This helper function is used to find the
+ * beginning of a KFENCE-allocated object.
+ */
+void *kfence_object_start(const void *addr);
+
+/**
+ * __kfence_free() - release a KFENCE heap object to KFENCE pool
+ * @addr: object to be freed
+ *
+ * Requires: is_kfence_address(addr)
+ *
+ * Release a KFENCE object and mark it as freed.
+ */
+void __kfence_free(void *addr);
+
+/**
+ * kfence_free() - try to release an arbitrary heap object to KFENCE pool
+ * @addr: object to be freed
+ *
+ * Return:
+ * * false - object doesn't belong to KFENCE pool and was ignored,
+ * * true  - object was released to KFENCE pool.
+ *
+ * Release a KFENCE object and mark it as freed. May be called on any object,
+ * even non-KFENCE objects, to simplify integration of the hooks into the
+ * allocator's free codepath. The allocator must check the return value to
+ * determine if it was a KFENCE object or not.
+ */
+static __always_inline __must_check bool kfence_free(void *addr)
+{
+	if (!is_kfence_address(addr))
+		return false;
+	__kfence_free(addr);
+	return true;
+}
+
+/**
+ * kfence_handle_page_fault() - perform page fault handling for KFENCE pages
+ * @addr: faulting address
+ * @is_write: is access a write
+ * @regs: current struct pt_regs (can be NULL, but shows full stack trace)
+ *
+ * Return:
+ * * false - address outside KFENCE pool,
+ * * true  - page fault handled by KFENCE, no additional handling required.
+ *
+ * A page fault inside KFENCE pool indicates a memory error, such as an
+ * out-of-bounds access, a use-after-free or an invalid memory access. In these
+ * cases KFENCE prints an error message and marks the offending page as
+ * present, so that the kernel can proceed.
+ */
+bool __must_check kfence_handle_page_fault(unsigned long addr, bool is_write, struct pt_regs *regs);
+
+#else /* CONFIG_KFENCE */
+
+static inline bool is_kfence_address(const void *addr) { return false; }
+static inline void kfence_alloc_pool(void) { }
+static inline void kfence_init(void) { }
+static inline void kfence_shutdown_cache(struct kmem_cache *s) { }
+static inline void *kfence_alloc(struct kmem_cache *s, size_t size, gfp_t flags) { return NULL; }
+static inline size_t kfence_ksize(const void *addr) { return 0; }
+static inline void *kfence_object_start(const void *addr) { return NULL; }
+static inline void __kfence_free(void *addr) { }
+static inline bool __must_check kfence_free(void *addr) { return false; }
+static inline bool __must_check kfence_handle_page_fault(unsigned long addr, bool is_write,
+							 struct pt_regs *regs)
+{
+	return false;
+}
+
+#endif
+
+#endif /* _LINUX_KFENCE_H */
diff --git a/include/linux/kobject.h b/include/linux/kobject.h
index e2ca0a2..f249c00 100644
--- a/include/linux/kobject.h
+++ b/include/linux/kobject.h
@@ -27,6 +27,7 @@
 #include <linux/atomic.h>
 #include <linux/workqueue.h>
 #include <linux/uidgid.h>
+#include <linux/android_kabi.h>
 
 #define UEVENT_HELPER_PATH_LEN		256
 #define UEVENT_NUM_ENVP			32	/* number of env pointers */
@@ -78,6 +79,11 @@ struct kobject {
 	unsigned int state_add_uevent_sent:1;
 	unsigned int state_remove_uevent_sent:1;
 	unsigned int uevent_suppress:1;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 extern __printf(2, 3)
@@ -144,6 +150,11 @@ struct kobj_type {
 	const struct kobj_ns_type_operations *(*child_ns_type)(struct kobject *kobj);
 	const void *(*namespace)(struct kobject *kobj);
 	void (*get_ownership)(struct kobject *kobj, kuid_t *uid, kgid_t *gid);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct kobj_uevent_env {
@@ -195,6 +206,11 @@ struct kset {
 	spinlock_t list_lock;
 	struct kobject kobj;
 	const struct kset_uevent_ops *uevent_ops;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } __randomize_layout;
 
 extern void kset_init(struct kset *kset);
diff --git a/include/linux/ksm.h b/include/linux/ksm.h
index e48b1e4..161e816 100644
--- a/include/linux/ksm.h
+++ b/include/linux/ksm.h
@@ -53,8 +53,6 @@ struct page *ksm_might_need_to_copy(struct page *page,
 
 void rmap_walk_ksm(struct page *page, struct rmap_walk_control *rwc);
 void ksm_migrate_page(struct page *newpage, struct page *oldpage);
-bool reuse_ksm_page(struct page *page,
-			struct vm_area_struct *vma, unsigned long address);
 
 #else  /* !CONFIG_KSM */
 
@@ -88,11 +86,6 @@ static inline void rmap_walk_ksm(struct page *page,
 static inline void ksm_migrate_page(struct page *newpage, struct page *oldpage)
 {
 }
-static inline bool reuse_ksm_page(struct page *page,
-			struct vm_area_struct *vma, unsigned long address)
-{
-	return false;
-}
 #endif /* CONFIG_MMU */
 #endif /* !CONFIG_KSM */
 
diff --git a/include/linux/ktime.h b/include/linux/ktime.h
index b2bb44f..1fcfce97 100644
--- a/include/linux/ktime.h
+++ b/include/linux/ktime.h
@@ -253,14 +253,7 @@ static inline __must_check bool ktime_to_timespec64_cond(const ktime_t kt,
 	}
 }
 
-/*
- * The resolution of the clocks. The resolution value is returned in
- * the clock_getres() system call to give application programmers an
- * idea of the (in)accuracy of timers. Timer values are rounded up to
- * this resolution values.
- */
-#define LOW_RES_NSEC		TICK_NSEC
-#define KTIME_LOW_RES		(LOW_RES_NSEC)
+#include <vdso/ktime.h>
 
 static inline ktime_t ns_to_ktime(u64 ns)
 {
diff --git a/include/linux/limits.h b/include/linux/limits.h
index 76afcd2..7fc497e 100644
--- a/include/linux/limits.h
+++ b/include/linux/limits.h
@@ -4,19 +4,8 @@
 
 #include <uapi/linux/limits.h>
 #include <linux/types.h>
+#include <vdso/limits.h>
 
-#define USHRT_MAX	((unsigned short)~0U)
-#define SHRT_MAX	((short)(USHRT_MAX >> 1))
-#define SHRT_MIN	((short)(-SHRT_MAX - 1))
-#define INT_MAX		((int)(~0U >> 1))
-#define INT_MIN		(-INT_MAX - 1)
-#define UINT_MAX	(~0U)
-#define LONG_MAX	((long)(~0UL >> 1))
-#define LONG_MIN	(-LONG_MAX - 1)
-#define ULONG_MAX	(~0UL)
-#define LLONG_MAX	((long long)(~0ULL >> 1))
-#define LLONG_MIN	(-LLONG_MAX - 1)
-#define ULLONG_MAX	(~0ULL)
 #define SIZE_MAX	(~(size_t)0)
 #define PHYS_ADDR_MAX	(~(phys_addr_t)0)
 
diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h
index a376324..20d8cf1 100644
--- a/include/linux/lsm_hooks.h
+++ b/include/linux/lsm_hooks.h
@@ -1818,6 +1818,14 @@ union security_list_options {
 	void (*bpf_prog_free_security)(struct bpf_prog_aux *aux);
 #endif /* CONFIG_BPF_SYSCALL */
 	int (*locked_down)(enum lockdown_reason what);
+#ifdef CONFIG_PERF_EVENTS
+	int (*perf_event_open)(struct perf_event_attr *attr, int type);
+	int (*perf_event_alloc)(struct perf_event *event);
+	void (*perf_event_free)(struct perf_event *event);
+	int (*perf_event_read)(struct perf_event *event);
+	int (*perf_event_write)(struct perf_event *event);
+
+#endif
 };
 
 struct security_hook_heads {
@@ -2060,6 +2068,13 @@ struct security_hook_heads {
 	struct hlist_head bpf_prog_free_security;
 #endif /* CONFIG_BPF_SYSCALL */
 	struct hlist_head locked_down;
+#ifdef CONFIG_PERF_EVENTS
+	struct hlist_head perf_event_open;
+	struct hlist_head perf_event_alloc;
+	struct hlist_head perf_event_free;
+	struct hlist_head perf_event_read;
+	struct hlist_head perf_event_write;
+#endif
 } __randomize_layout;
 
 /*
diff --git a/include/linux/math64.h b/include/linux/math64.h
index 65bef21..11a2674 100644
--- a/include/linux/math64.h
+++ b/include/linux/math64.h
@@ -3,6 +3,7 @@
 #define _LINUX_MATH64_H
 
 #include <linux/types.h>
+#include <vdso/math64.h>
 #include <asm/div64.h>
 
 #if BITS_PER_LONG == 64
@@ -142,25 +143,6 @@ static inline s64 div_s64(s64 dividend, s32 divisor)
 
 u32 iter_div_u64_rem(u64 dividend, u32 divisor, u64 *remainder);
 
-static __always_inline u32
-__iter_div_u64_rem(u64 dividend, u32 divisor, u64 *remainder)
-{
-	u32 ret = 0;
-
-	while (dividend >= divisor) {
-		/* The following asm() prevents the compiler from
-		   optimising this loop into a modulo operation.  */
-		asm("" : "+rm"(dividend));
-
-		dividend -= divisor;
-		ret++;
-	}
-
-	*remainder = dividend;
-
-	return ret;
-}
-
 #ifndef mul_u32_u32
 /*
  * Many a GCC version messes this up and generates a 64x64 mult :-(
diff --git a/include/linux/mfd/sc27xx-pmic.h b/include/linux/mfd/sc27xx-pmic.h
new file mode 100644
index 0000000..57e45c0
--- /dev/null
+++ b/include/linux/mfd/sc27xx-pmic.h
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __LINUX_MFD_SC27XX_PMIC_H
+#define __LINUX_MFD_SC27XX_PMIC_H
+
+extern enum usb_charger_type sprd_pmic_detect_charger_type(struct device *dev);
+
+#endif /* __LINUX_MFD_SC27XX_PMIC_H */
diff --git a/include/linux/mfd/syscon.h b/include/linux/mfd/syscon.h
index 112dc66..7f20e9b 100644
--- a/include/linux/mfd/syscon.h
+++ b/include/linux/mfd/syscon.h
@@ -23,6 +23,11 @@ extern struct regmap *syscon_regmap_lookup_by_compatible(const char *s);
 extern struct regmap *syscon_regmap_lookup_by_phandle(
 					struct device_node *np,
 					const char *property);
+extern struct regmap *syscon_regmap_lookup_by_phandle_args(
+					struct device_node *np,
+					const char *property,
+					int arg_count,
+					unsigned int *out_args);
 #else
 static inline struct regmap *device_node_to_regmap(struct device_node *np)
 {
@@ -45,6 +50,15 @@ static inline struct regmap *syscon_regmap_lookup_by_phandle(
 {
 	return ERR_PTR(-ENOTSUPP);
 }
+
+static inline struct regmap *syscon_regmap_lookup_by_phandle_args(
+					struct device_node *np,
+					const char *property,
+					int arg_count,
+					unsigned int *out_args)
+{
+	return ERR_PTR(-ENOTSUPP);
+}
 #endif
 
 #endif /* __LINUX_MFD_SYSCON_H__ */
diff --git a/include/linux/mm.h b/include/linux/mm.h
index c63e4b3..24d5a32 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -27,6 +27,8 @@
 #include <linux/memremap.h>
 #include <linux/overflow.h>
 #include <linux/sizes.h>
+#include <linux/android_kabi.h>
+#include <linux/android_vendor.h>
 
 struct mempolicy;
 struct anon_vma;
@@ -114,6 +116,14 @@ extern int mmap_rnd_compat_bits __read_mostly;
 #define __pa_symbol(x)  __pa(RELOC_HIDE((unsigned long)(x), 0))
 #endif
 
+#ifndef __va_function
+#define __va_function(x) (x)
+#endif
+
+#ifndef __pa_function
+#define __pa_function(x) __pa_symbol(x)
+#endif
+
 #ifndef page_to_virt
 #define page_to_virt(x)	__va(PFN_PHYS(page_to_pfn(x)))
 #endif
@@ -383,15 +393,75 @@ extern unsigned int kobjsize(const void *objp);
  */
 extern pgprot_t protection_map[16];
 
-#define FAULT_FLAG_WRITE	0x01	/* Fault was a write access */
-#define FAULT_FLAG_MKWRITE	0x02	/* Fault was mkwrite of existing pte */
-#define FAULT_FLAG_ALLOW_RETRY	0x04	/* Retry fault if blocking */
-#define FAULT_FLAG_RETRY_NOWAIT	0x08	/* Don't drop mmap_sem and wait when retrying */
-#define FAULT_FLAG_KILLABLE	0x10	/* The fault task is in SIGKILL killable region */
-#define FAULT_FLAG_TRIED	0x20	/* Second try */
-#define FAULT_FLAG_USER		0x40	/* The fault originated in userspace */
-#define FAULT_FLAG_REMOTE	0x80	/* faulting for non current tsk/mm */
-#define FAULT_FLAG_INSTRUCTION  0x100	/* The fault was during an instruction fetch */
+/**
+ * Fault flag definitions.
+ *
+ * @FAULT_FLAG_WRITE: Fault was a write fault.
+ * @FAULT_FLAG_MKWRITE: Fault was mkwrite of existing PTE.
+ * @FAULT_FLAG_ALLOW_RETRY: Allow to retry the fault if blocked.
+ * @FAULT_FLAG_RETRY_NOWAIT: Don't drop mmap_sem and wait when retrying.
+ * @FAULT_FLAG_KILLABLE: The fault task is in SIGKILL killable region.
+ * @FAULT_FLAG_TRIED: The fault has been tried once.
+ * @FAULT_FLAG_USER: The fault originated in userspace.
+ * @FAULT_FLAG_REMOTE: The fault is not for current task/mm.
+ * @FAULT_FLAG_INSTRUCTION: The fault was during an instruction fetch.
+ * @FAULT_FLAG_INTERRUPTIBLE: The fault can be interrupted by non-fatal signals.
+ *
+ * About @FAULT_FLAG_ALLOW_RETRY and @FAULT_FLAG_TRIED: we can specify
+ * whether we would allow page faults to retry by specifying these two
+ * fault flags correctly.  Currently there can be three legal combinations:
+ *
+ * (a) ALLOW_RETRY and !TRIED:  this means the page fault allows retry, and
+ *                              this is the first try
+ *
+ * (b) ALLOW_RETRY and TRIED:   this means the page fault allows retry, and
+ *                              we've already tried at least once
+ *
+ * (c) !ALLOW_RETRY and !TRIED: this means the page fault does not allow retry
+ *
+ * The unlisted combination (!ALLOW_RETRY && TRIED) is illegal and should never
+ * be used.  Note that page faults can be allowed to retry for multiple times,
+ * in which case we'll have an initial fault with flags (a) then later on
+ * continuous faults with flags (b).  We should always try to detect pending
+ * signals before a retry to make sure the continuous page faults can still be
+ * interrupted if necessary.
+ */
+#define FAULT_FLAG_WRITE			0x01
+#define FAULT_FLAG_MKWRITE			0x02
+#define FAULT_FLAG_ALLOW_RETRY			0x04
+#define FAULT_FLAG_RETRY_NOWAIT			0x08
+#define FAULT_FLAG_KILLABLE			0x10
+#define FAULT_FLAG_TRIED			0x20
+#define FAULT_FLAG_USER				0x40
+#define FAULT_FLAG_REMOTE			0x80
+#define FAULT_FLAG_INSTRUCTION  		0x100
+#define FAULT_FLAG_INTERRUPTIBLE		0x200
+
+/*
+ * The default fault flags that should be used by most of the
+ * arch-specific page fault handlers.
+ */
+#define FAULT_FLAG_DEFAULT  (FAULT_FLAG_ALLOW_RETRY | \
+			     FAULT_FLAG_KILLABLE | \
+			     FAULT_FLAG_INTERRUPTIBLE)
+
+/**
+ * fault_flag_allow_retry_first - check ALLOW_RETRY the first time
+ *
+ * This is mostly used for places where we want to try to avoid taking
+ * the mmap_sem for too long a time when waiting for another condition
+ * to change, in which case we can try to be polite to release the
+ * mmap_sem in the first round to avoid potential starvation of other
+ * processes that would also want the mmap_sem.
+ *
+ * Return: true if the page fault allows retry and this is the first
+ * attempt of the fault handling; false otherwise.
+ */
+static inline bool fault_flag_allow_retry_first(unsigned int flags)
+{
+	return (flags & FAULT_FLAG_ALLOW_RETRY) &&
+	    (!(flags & FAULT_FLAG_TRIED));
+}
 
 #define FAULT_FLAG_TRACE \
 	{ FAULT_FLAG_WRITE,		"WRITE" }, \
@@ -402,7 +472,8 @@ extern pgprot_t protection_map[16];
 	{ FAULT_FLAG_TRIED,		"TRIED" }, \
 	{ FAULT_FLAG_USER,		"USER" }, \
 	{ FAULT_FLAG_REMOTE,		"REMOTE" }, \
-	{ FAULT_FLAG_INSTRUCTION,	"INSTRUCTION" }
+	{ FAULT_FLAG_INSTRUCTION,	"INSTRUCTION" }, \
+	{ FAULT_FLAG_INTERRUPTIBLE,	"INTERRUPTIBLE" }
 
 /*
  * vm_fault is filled by the the pagefault handler and passed to the vma's
@@ -450,6 +521,10 @@ struct vm_fault {
 					 * page table to avoid allocation from
 					 * atomic context.
 					 */
+	unsigned long vma_flags;	/* Speculative Page Fault field */
+	pgprot_t vma_page_prot;		/* Speculative Page Fault field */
+	ANDROID_VENDOR_DATA(1);
+	ANDROID_VENDOR_DATA(2);
 };
 
 /* page entry size for vm->huge_fault() */
@@ -468,7 +543,7 @@ struct vm_operations_struct {
 	void (*open)(struct vm_area_struct * area);
 	void (*close)(struct vm_area_struct * area);
 	int (*split)(struct vm_area_struct * area, unsigned long addr);
-	int (*mremap)(struct vm_area_struct * area);
+	int (*mremap)(struct vm_area_struct *area, unsigned long flags);
 	vm_fault_t (*fault)(struct vm_fault *vmf);
 	vm_fault_t (*huge_fault)(struct vm_fault *vmf,
 			enum page_entry_size pe_size);
@@ -524,6 +599,12 @@ struct vm_operations_struct {
 	 */
 	struct page *(*find_special_page)(struct vm_area_struct *vma,
 					  unsigned long addr);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+	ANDROID_VENDOR_DATA(1);
 };
 
 static inline void vma_init(struct vm_area_struct *vma, struct mm_struct *mm)
@@ -1657,19 +1738,28 @@ static inline unsigned long get_mm_counter(struct mm_struct *mm, int member)
 	return (unsigned long)val;
 }
 
+void mm_trace_rss_stat(struct mm_struct *mm, int member, long count,
+		       long value);
+
 static inline void add_mm_counter(struct mm_struct *mm, int member, long value)
 {
-	atomic_long_add(value, &mm->rss_stat.count[member]);
+	long count = atomic_long_add_return(value, &mm->rss_stat.count[member]);
+
+	mm_trace_rss_stat(mm, member, count, value);
 }
 
 static inline void inc_mm_counter(struct mm_struct *mm, int member)
 {
-	atomic_long_inc(&mm->rss_stat.count[member]);
+	long count = atomic_long_inc_return(&mm->rss_stat.count[member]);
+
+	mm_trace_rss_stat(mm, member, count, 1);
 }
 
 static inline void dec_mm_counter(struct mm_struct *mm, int member)
 {
-	atomic_long_dec(&mm->rss_stat.count[member]);
+	long count = atomic_long_dec_return(&mm->rss_stat.count[member]);
+
+	mm_trace_rss_stat(mm, member, count, -1);
 }
 
 /* Optimized variant when page is already known not to be PageAnon */
@@ -2287,7 +2377,7 @@ static inline int vma_adjust(struct vm_area_struct *vma, unsigned long start,
 extern struct vm_area_struct *vma_merge(struct mm_struct *,
 	struct vm_area_struct *prev, unsigned long addr, unsigned long end,
 	unsigned long vm_flags, struct anon_vma *, struct file *, pgoff_t,
-	struct mempolicy *, struct vm_userfaultfd_ctx);
+	struct mempolicy *, struct vm_userfaultfd_ctx, const char __user *);
 extern struct anon_vma *find_mergeable_anon_vma(struct vm_area_struct *);
 extern int __split_vma(struct mm_struct *, struct vm_area_struct *,
 	unsigned long addr, int new_below);
@@ -2352,6 +2442,7 @@ extern int __do_munmap(struct mm_struct *, unsigned long, size_t,
 		       struct list_head *uf, bool downgrade);
 extern int do_munmap(struct mm_struct *, unsigned long, size_t,
 		     struct list_head *uf);
+extern int do_madvise(struct mm_struct *mm, unsigned long start, size_t len_in, int behavior);
 
 static inline unsigned long
 do_mmap_pgoff(struct file *file, unsigned long addr,
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index 270aa8f..3cb63ac 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -14,6 +14,8 @@
 #include <linux/uprobes.h>
 #include <linux/page-flags-layout.h>
 #include <linux/workqueue.h>
+#include <linux/android_kabi.h>
+#include <linux/android_vendor.h>
 
 #include <asm/mmu.h>
 
@@ -318,11 +320,18 @@ struct vm_area_struct {
 	/*
 	 * For areas with an address space and backing store,
 	 * linkage into the address_space->i_mmap interval tree.
+	 *
+	 * For private anonymous mappings, a pointer to a null terminated string
+	 * in the user process containing the name given to the vma, or NULL
+	 * if unnamed.
 	 */
-	struct {
-		struct rb_node rb;
-		unsigned long rb_subtree_last;
-	} shared;
+	union {
+		struct {
+			struct rb_node rb;
+			unsigned long rb_subtree_last;
+		} shared;
+		const char __user *anon_name;
+	};
 
 	/*
 	 * A file's MAP_PRIVATE vma can be in both i_mmap tree and anon_vma
@@ -353,6 +362,12 @@ struct vm_area_struct {
 	struct mempolicy *vm_policy;	/* NUMA policy for the VMA */
 #endif
 	struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+	ANDROID_VENDOR_DATA(1);
 } __randomize_layout;
 
 struct core_thread {
@@ -524,6 +539,7 @@ struct mm_struct {
 		atomic_long_t hugetlb_usage;
 #endif
 		struct work_struct async_put_work;
+		ANDROID_VENDOR_DATA(1);
 	} __randomize_layout;
 
 	/*
@@ -754,4 +770,13 @@ typedef struct {
 	unsigned long val;
 } swp_entry_t;
 
+/* Return the name for an anonymous mapping or NULL for a file-backed mapping */
+static inline const char __user *vma_get_anon_name(struct vm_area_struct *vma)
+{
+	if (vma->vm_file)
+		return NULL;
+
+	return vma->anon_name;
+}
+
 #endif /* _LINUX_MM_TYPES_H */
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
index cf3780a..7d46411 100644
--- a/include/linux/mmc/card.h
+++ b/include/linux/mmc/card.h
@@ -48,6 +48,7 @@ struct mmc_ext_csd {
 	u8			sec_feature_support;
 	u8			rel_sectors;
 	u8			rel_param;
+	bool			enhanced_rpmb_supported;
 	u8			part_config;
 	u8			cache_ctrl;
 	u8			rst_n_function;
diff --git a/include/linux/mmc/core.h b/include/linux/mmc/core.h
index b7ba881..68c1ec5 100644
--- a/include/linux/mmc/core.h
+++ b/include/linux/mmc/core.h
@@ -165,6 +165,12 @@ struct mmc_request {
 	bool			cap_cmd_during_tfr;
 
 	int			tag;
+
+#ifdef CONFIG_MMC_CRYPTO
+	bool			crypto_enabled;
+	int			crypto_key_slot;
+	u32			data_unit_num;
+#endif
 };
 
 struct mmc_card;
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index 4c5eb3a..9de0315 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -15,6 +15,7 @@
 #include <linux/mmc/card.h>
 #include <linux/mmc/pm.h>
 #include <linux/dma-direction.h>
+#include <linux/keyslot-manager.h>
 
 struct mmc_ios {
 	unsigned int	clock;			/* clock rate */
@@ -92,6 +93,9 @@ struct mmc_host_ops {
 			    int err);
 	void	(*pre_req)(struct mmc_host *host, struct mmc_request *req);
 	void	(*request)(struct mmc_host *host, struct mmc_request *req);
+	/* Submit one request to host in atomic context. */
+	int	(*request_atomic)(struct mmc_host *host,
+				  struct mmc_request *req);
 
 	/*
 	 * Avoid calling the next three functions too often or in a "fast
@@ -370,6 +374,11 @@ struct mmc_host {
 #define MMC_CAP2_CQE_DCMD	(1 << 24)	/* CQE can issue a direct command */
 #define MMC_CAP2_AVOID_3_3V	(1 << 25)	/* Host must negotiate down from 3.3V */
 #define MMC_CAP2_MERGE_CAPABLE	(1 << 26)	/* Host can merge a segment over the segment size */
+#ifdef CONFIG_MMC_CRYPTO
+#define MMC_CAP2_CRYPTO		(1 << 27)	/* Host supports inline encryption */
+#else
+#define MMC_CAP2_CRYPTO		0
+#endif
 
 	int			fixed_drv_type;	/* fixed driver type for non-removable media */
 
@@ -463,6 +472,14 @@ struct mmc_host {
 	bool			cqe_enabled;
 	bool			cqe_on;
 
+	/* Inline encryption support */
+#ifdef CONFIG_MMC_CRYPTO
+	struct blk_keyslot_manager ksm;
+#endif
+
+	/* Host Software Queue support */
+	bool			hsq_enabled;
+
 	unsigned long		private[0] ____cacheline_aligned;
 };
 
diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h
index 897a87c..3219304f 100644
--- a/include/linux/mmc/mmc.h
+++ b/include/linux/mmc/mmc.h
@@ -315,6 +315,7 @@ static inline bool mmc_op_multi(u32 opcode)
  */
 
 #define EXT_CSD_WR_REL_PARAM_EN		(1<<2)
+#define EXT_CSD_WR_REL_PARAM_EN_RPMB_REL_WR	(1<<4)
 
 #define EXT_CSD_BOOT_WP_B_PWR_WP_DIS	(0x40)
 #define EXT_CSD_BOOT_WP_B_PERM_WP_DIS	(0x10)
diff --git a/include/linux/mmc/pm.h b/include/linux/mmc/pm.h
index 3549f80..1d554b8 100644
--- a/include/linux/mmc/pm.h
+++ b/include/linux/mmc/pm.h
@@ -23,5 +23,6 @@ typedef unsigned int mmc_pm_flag_t;
 
 #define MMC_PM_KEEP_POWER	(1 << 0)	/* preserve card power during suspend */
 #define MMC_PM_WAKE_SDIO_IRQ	(1 << 1)	/* wake up host system on SDIO IRQ assertion */
+#define MMC_PM_IGNORE_PM_NOTIFY	(1 << 2)	/* ignore mmc pm notify */
 
 #endif /* LINUX_MMC_PM_H */
diff --git a/include/linux/mmu_notifier.h b/include/linux/mmu_notifier.h
index 1bd8e6a..ca953d5 100644
--- a/include/linux/mmu_notifier.h
+++ b/include/linux/mmu_notifier.h
@@ -6,6 +6,7 @@
 #include <linux/spinlock.h>
 #include <linux/mm_types.h>
 #include <linux/srcu.h>
+#include <linux/android_kabi.h>
 
 struct mmu_notifier;
 struct mmu_notifier_ops;
@@ -228,6 +229,11 @@ struct mmu_notifier_ops {
 	 */
 	struct mmu_notifier *(*alloc_notifier)(struct mm_struct *mm);
 	void (*free_notifier)(struct mmu_notifier *mn);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /*
@@ -247,6 +253,9 @@ struct mmu_notifier {
 	struct mm_struct *mm;
 	struct rcu_head rcu;
 	unsigned int users;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 static inline int mm_has_notifiers(struct mm_struct *mm)
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index a90aba3..11f0106 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -20,6 +20,7 @@
 #include <linux/atomic.h>
 #include <linux/mm_types.h>
 #include <linux/page-flags.h>
+#include <linux/android_kabi.h>
 #include <asm/page.h>
 
 /* Free memory management - zoned buddy allocator.  */
@@ -42,8 +43,6 @@ enum migratetype {
 	MIGRATE_UNMOVABLE,
 	MIGRATE_MOVABLE,
 	MIGRATE_RECLAIMABLE,
-	MIGRATE_PCPTYPES,	/* the number of types on the pcp lists */
-	MIGRATE_HIGHATOMIC = MIGRATE_PCPTYPES,
 #ifdef CONFIG_CMA
 	/*
 	 * MIGRATE_CMA migration type is designed to mimic the way
@@ -60,6 +59,8 @@ enum migratetype {
 	 */
 	MIGRATE_CMA,
 #endif
+	MIGRATE_PCPTYPES, /* the number of types on the pcp lists */
+	MIGRATE_HIGHATOMIC = MIGRATE_PCPTYPES,
 #ifdef CONFIG_MEMORY_ISOLATION
 	MIGRATE_ISOLATE,	/* can't allocate from here */
 #endif
@@ -72,9 +73,11 @@ extern const char * const migratetype_names[MIGRATE_TYPES];
 #ifdef CONFIG_CMA
 #  define is_migrate_cma(migratetype) unlikely((migratetype) == MIGRATE_CMA)
 #  define is_migrate_cma_page(_page) (get_pageblock_migratetype(_page) == MIGRATE_CMA)
+#  define get_cma_migrate_type() MIGRATE_CMA
 #else
 #  define is_migrate_cma(migratetype) false
 #  define is_migrate_cma_page(_page) false
+#  define get_cma_migrate_type() MIGRATE_MOVABLE
 #endif
 
 static inline bool is_migrate_movable(int mt)
@@ -200,11 +203,12 @@ enum zone_stat_item {
 	NR_MLOCK,		/* mlock()ed pages found and moved off LRU */
 	NR_PAGETABLE,		/* used for pagetables */
 	NR_KERNEL_STACK_KB,	/* measured in KiB */
+#if IS_ENABLED(CONFIG_SHADOW_CALL_STACK)
+	NR_KERNEL_SCS_BYTES,	/* measured in bytes */
+#endif
 	/* Second 128 byte cacheline */
 	NR_BOUNCE,
-#if IS_ENABLED(CONFIG_ZSMALLOC)
 	NR_ZSPAGES,		/* allocated in zsmalloc */
-#endif
 	NR_FREE_CMA_PAGES,
 	NR_VM_ZONE_STAT_ITEMS };
 
@@ -440,6 +444,10 @@ struct zone {
 	struct pglist_data	*zone_pgdat;
 	struct per_cpu_pageset __percpu *pageset;
 
+#ifdef CONFIG_CMA
+	bool			cma_alloc;
+#endif
+
 #ifndef CONFIG_SPARSEMEM
 	/*
 	 * Flags for a pageblock_nr_pages block. See pageblock-flags.h.
@@ -561,6 +569,11 @@ struct zone {
 	/* Zone statistics */
 	atomic_long_t		vm_stat[NR_VM_ZONE_STAT_ITEMS];
 	atomic_long_t		vm_numa_stat[NR_VM_NUMA_STAT_ITEMS];
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } ____cacheline_internodealigned_in_smp;
 
 enum pgdat_flags {
diff --git a/include/linux/module.h b/include/linux/module.h
index 6d20895..4f71785 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -22,6 +22,8 @@
 #include <linux/error-injection.h>
 #include <linux/tracepoint-defs.h>
 #include <linux/srcu.h>
+#include <linux/cfi.h>
+#include <linux/android_kabi.h>
 
 #include <linux/percpu.h>
 #include <asm/module.h>
@@ -365,6 +367,10 @@ struct module {
 	const s32 *crcs;
 	unsigned int num_syms;
 
+#ifdef CONFIG_CFI_CLANG
+	cfi_check_fn cfi_check;
+#endif
+
 	/* Kernel parameters. */
 #ifdef CONFIG_SYSFS
 	struct mutex param_lock;
@@ -376,6 +382,7 @@ struct module {
 	unsigned int num_gpl_syms;
 	const struct kernel_symbol *gpl_syms;
 	const s32 *gpl_crcs;
+	bool using_gplonly_symbols;
 
 #ifdef CONFIG_UNUSED_SYMBOLS
 	/* unused exported symbols. */
@@ -389,10 +396,12 @@ struct module {
 	const s32 *unused_gpl_crcs;
 #endif
 
-#ifdef CONFIG_MODULE_SIG
-	/* Signature was verified. */
+	/*
+	 * Signature was verified. Unconditionally compiled in Android to
+	 * preserve ABI compatibility between kernels without module
+	 * signing enabled and signed modules.
+	 */
 	bool sig_ok;
-#endif
 
 	bool async_probe_requested;
 
@@ -507,6 +516,10 @@ struct module {
 	struct error_injection_entry *ei_funcs;
 	unsigned int num_ei_funcs;
 #endif
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } ____cacheline_aligned __randomize_layout;
 #ifndef MODULE_ARCH_INIT
 #define MODULE_ARCH_INIT {}
@@ -561,34 +574,14 @@ struct module *find_module(const char *name);
 struct symsearch {
 	const struct kernel_symbol *start, *stop;
 	const s32 *crcs;
-	enum {
+	enum mod_license {
 		NOT_GPL_ONLY,
 		GPL_ONLY,
 		WILL_BE_GPL_ONLY,
-	} licence;
+	} license;
 	bool unused;
 };
 
-/*
- * Search for an exported symbol by name.
- *
- * Must be called with module_mutex held or preemption disabled.
- */
-const struct kernel_symbol *find_symbol(const char *name,
-					struct module **owner,
-					const s32 **crc,
-					bool gplok,
-					bool warn);
-
-/*
- * Walk the exported symbol table
- *
- * Must be called with module_mutex held or preemption disabled.
- */
-bool each_symbol_section(bool (*fn)(const struct symsearch *arr,
-				    struct module *owner,
-				    void *data), void *data);
-
 /* Returns 0 and fills in value, defined and namebuf, or -ERANGE if
    symnum out of range. */
 int module_get_kallsym(unsigned int symnum, unsigned long *value, char *type,
@@ -636,7 +629,6 @@ static inline void __module_get(struct module *module)
 #define symbol_put_addr(p) do { } while (0)
 
 #endif /* CONFIG_MODULE_UNLOAD */
-int ref_module(struct module *a, struct module *b);
 
 /* This is a #define so the string doesn't get put in every .o file */
 #define module_name(mod)			\
diff --git a/include/linux/mount.h b/include/linux/mount.h
index bf8cc41..ca388cc 100644
--- a/include/linux/mount.h
+++ b/include/linux/mount.h
@@ -16,6 +16,7 @@
 #include <linux/spinlock.h>
 #include <linux/seqlock.h>
 #include <linux/atomic.h>
+#include <linux/android_kabi.h>
 
 struct super_block;
 struct vfsmount;
@@ -69,6 +70,10 @@ struct vfsmount {
 	struct dentry *mnt_root;	/* root of the mounted tree */
 	struct super_block *mnt_sb;	/* pointer to superblock */
 	int mnt_flags;
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } __randomize_layout;
 
 struct file; /* forward dec */
diff --git a/include/linux/net.h b/include/linux/net.h
index 47dd797..7b63520c 100644
--- a/include/linux/net.h
+++ b/include/linux/net.h
@@ -22,6 +22,7 @@
 #include <linux/once.h>
 #include <linux/fs.h>
 #include <linux/mm.h>
+#include <linux/android_kabi.h>
 
 #include <uapi/linux/net.h>
 
@@ -203,6 +204,11 @@ struct proto_ops {
 	int		(*sendmsg_locked)(struct sock *sk, struct msghdr *msg,
 					  size_t size);
 	int		(*set_rcvlowat)(struct sock *sk, int val);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 #define DECLARE_SOCKADDR(type, dst, src)	\
@@ -264,7 +270,8 @@ do {								\
 	net_ratelimited_function(pr_warn, fmt, ##__VA_ARGS__)
 #define net_info_ratelimited(fmt, ...)				\
 	net_ratelimited_function(pr_info, fmt, ##__VA_ARGS__)
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 #define net_dbg_ratelimited(fmt, ...)					\
 do {									\
 	DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt);			\
diff --git a/include/linux/netdev_features.h b/include/linux/netdev_features.h
index 4b19c54..34d050b 100644
--- a/include/linux/netdev_features.h
+++ b/include/linux/netdev_features.h
@@ -53,8 +53,9 @@ enum {
 	NETIF_F_GSO_ESP_BIT,		/* ... ESP with TSO */
 	NETIF_F_GSO_UDP_BIT,		/* ... UFO, deprecated except tuntap */
 	NETIF_F_GSO_UDP_L4_BIT,		/* ... UDP payload GSO (not UFO) */
+	NETIF_F_GSO_FRAGLIST_BIT,		/* ... Fraglist GSO */
 	/**/NETIF_F_GSO_LAST =		/* last bit, see GSO_MASK */
-		NETIF_F_GSO_UDP_L4_BIT,
+		NETIF_F_GSO_FRAGLIST_BIT,
 
 	NETIF_F_FCOE_CRC_BIT,		/* FCoE CRC32 */
 	NETIF_F_SCTP_CRC_BIT,		/* SCTP checksum offload */
@@ -80,6 +81,7 @@ enum {
 
 	NETIF_F_GRO_HW_BIT,		/* Hardware Generic receive offload */
 	NETIF_F_HW_TLS_RECORD_BIT,	/* Offload TLS record */
+	NETIF_F_GRO_FRAGLIST_BIT,	/* Fraglist GRO */
 
 	/*
 	 * Add your fresh new feature above and remember to update
@@ -150,6 +152,8 @@ enum {
 #define NETIF_F_GSO_UDP_L4	__NETIF_F(GSO_UDP_L4)
 #define NETIF_F_HW_TLS_TX	__NETIF_F(HW_TLS_TX)
 #define NETIF_F_HW_TLS_RX	__NETIF_F(HW_TLS_RX)
+#define NETIF_F_GRO_FRAGLIST	__NETIF_F(GRO_FRAGLIST)
+#define NETIF_F_GSO_FRAGLIST	__NETIF_F(GSO_FRAGLIST)
 
 /* Finds the next feature with the highest number of the range of start till 0.
  */
@@ -226,6 +230,9 @@ static inline int find_next_netdev_feature(u64 feature, unsigned long start)
 /* changeable features with no special hardware requirements */
 #define NETIF_F_SOFT_FEATURES	(NETIF_F_GSO | NETIF_F_GRO)
 
+/* Changeable features with no special hardware requirements that defaults to off. */
+#define NETIF_F_SOFT_FEATURES_OFF	NETIF_F_GRO_FRAGLIST
+
 #define NETIF_F_VLAN_FEATURES	(NETIF_F_HW_VLAN_CTAG_FILTER | \
 				 NETIF_F_HW_VLAN_CTAG_RX | \
 				 NETIF_F_HW_VLAN_CTAG_TX | \
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 3e0692f..2a60cb1 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -48,6 +48,7 @@
 #include <uapi/linux/if_bonding.h>
 #include <uapi/linux/pkt_cls.h>
 #include <linux/hashtable.h>
+#include <linux/android_kabi.h>
 
 struct netpoll_info;
 struct device;
@@ -273,6 +274,9 @@ struct header_ops {
 				const unsigned char *haddr);
 	bool	(*validate)(const char *ll_header, unsigned int len);
 	__be16	(*parse_protocol)(const struct sk_buff *skb);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /* These flag bits are private to the generic network queueing
@@ -340,6 +344,11 @@ struct napi_struct {
 	struct list_head	dev_list;
 	struct hlist_node	napi_hash_node;
 	unsigned int		napi_id;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 enum {
@@ -628,6 +637,11 @@ struct netdev_queue {
 #ifdef CONFIG_BQL
 	struct dql		dql;
 #endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } ____cacheline_aligned_in_smp;
 
 extern int sysctl_fb_tunnels_only_for_init_net;
@@ -746,6 +760,11 @@ struct netdev_rx_queue {
 #ifdef CONFIG_XDP_SOCKETS
 	struct xdp_umem                 *umem;
 #endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } ____cacheline_aligned_in_smp;
 
 /*
@@ -916,6 +935,11 @@ struct xfrmdev_ops {
 	bool	(*xdo_dev_offload_ok) (struct sk_buff *skb,
 				       struct xfrm_state *x);
 	void	(*xdo_dev_state_advance_esn) (struct xfrm_state *x);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 #endif
 
@@ -1442,6 +1466,15 @@ struct net_device_ops {
 	int			(*ndo_xsk_wakeup)(struct net_device *dev,
 						  u32 queue_id, u32 flags);
 	struct devlink_port *	(*ndo_get_devlink_port)(struct net_device *dev);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+	ANDROID_KABI_RESERVE(5);
+	ANDROID_KABI_RESERVE(6);
+	ANDROID_KABI_RESERVE(7);
+	ANDROID_KABI_RESERVE(8);
 };
 
 /**
@@ -2066,6 +2099,16 @@ struct net_device {
 	struct lock_class_key	addr_list_lock_key;
 	bool			proto_down;
 	unsigned		wol_enabled:1;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+	ANDROID_KABI_RESERVE(5);
+	ANDROID_KABI_RESERVE(6);
+	ANDROID_KABI_RESERVE(7);
+	ANDROID_KABI_RESERVE(8);
+
 };
 #define to_net_dev(d) container_of(d, struct net_device, dev)
 
@@ -2307,7 +2350,8 @@ struct napi_gro_cb {
 	/* Number of gro_receive callbacks this packet already went through */
 	u8 recursion_counter:4;
 
-	/* 1 bit hole */
+	/* GRO is done by frag_list pointer chaining. */
+	u8	is_flist:1;
 
 	/* used to support CHECKSUM_COMPLETE for tunneling protocols */
 	__wsum	csum;
@@ -2367,6 +2411,11 @@ struct packet_type {
 					    struct sock *sk);
 	void			*af_packet_priv;
 	struct list_head	list;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct offload_callbacks {
@@ -2657,6 +2706,7 @@ struct net_device *dev_get_by_napi_id(unsigned int napi_id);
 int netdev_get_name(struct net *net, char *name, int ifindex);
 int dev_restart(struct net_device *dev);
 int skb_gro_receive(struct sk_buff *p, struct sk_buff *skb);
+int skb_gro_receive_list(struct sk_buff *p, struct sk_buff *skb);
 
 static inline unsigned int skb_gro_offset(const struct sk_buff *skb)
 {
@@ -4526,6 +4576,7 @@ static inline bool net_gso_ok(netdev_features_t features, int gso_type)
 	BUILD_BUG_ON(SKB_GSO_ESP != (NETIF_F_GSO_ESP >> NETIF_F_GSO_SHIFT));
 	BUILD_BUG_ON(SKB_GSO_UDP != (NETIF_F_GSO_UDP >> NETIF_F_GSO_SHIFT));
 	BUILD_BUG_ON(SKB_GSO_UDP_L4 != (NETIF_F_GSO_UDP_L4 >> NETIF_F_GSO_SHIFT));
+	BUILD_BUG_ON(SKB_GSO_FRAGLIST != (NETIF_F_GSO_FRAGLIST >> NETIF_F_GSO_SHIFT));
 
 	return (features & feature) == feature;
 }
@@ -4755,7 +4806,8 @@ do {								\
 #define MODULE_ALIAS_NETDEV(device) \
 	MODULE_ALIAS("netdev-" device)
 
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 #define netdev_dbg(__dev, format, args...)			\
 do {								\
 	dynamic_netdev_dbg(__dev, format, ##args);		\
@@ -4825,7 +4877,8 @@ do {								\
 #define netif_info(priv, type, dev, fmt, args...)		\
 	netif_level(info, priv, type, dev, fmt, ##args)
 
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 #define netif_dbg(priv, type, netdev, format, args...)		\
 do {								\
 	if (netif_msg_##type(priv))				\
diff --git a/include/linux/netfilter/xt_quota2.h b/include/linux/netfilter/xt_quota2.h
new file mode 100644
index 0000000..a391871
--- /dev/null
+++ b/include/linux/netfilter/xt_quota2.h
@@ -0,0 +1,26 @@
+#ifndef _XT_QUOTA_H
+#define _XT_QUOTA_H
+#include <linux/types.h>
+
+enum xt_quota_flags {
+	XT_QUOTA_INVERT    = 1 << 0,
+	XT_QUOTA_GROW      = 1 << 1,
+	XT_QUOTA_PACKET    = 1 << 2,
+	XT_QUOTA_NO_CHANGE = 1 << 3,
+	XT_QUOTA_MASK      = 0x0F,
+};
+
+struct xt_quota_counter;
+
+struct xt_quota_mtinfo2 {
+	char name[15];
+	u_int8_t flags;
+
+	/* Comparison-invariant */
+	aligned_u64 quota;
+
+	/* Used internally by the kernel */
+	struct xt_quota_counter *master __attribute__((aligned(8)));
+};
+
+#endif /* _XT_QUOTA_H */
diff --git a/include/linux/of_address.h b/include/linux/of_address.h
index 30e40fb..3ecc3fb 100644
--- a/include/linux/of_address.h
+++ b/include/linux/of_address.h
@@ -12,6 +12,7 @@ struct of_pci_range_parser {
 	const __be32 *end;
 	int np;
 	int pna;
+	bool dma;
 };
 
 struct of_pci_range {
@@ -55,8 +56,6 @@ extern int of_pci_dma_range_parser_init(struct of_pci_range_parser *parser,
 extern struct of_pci_range *of_pci_range_parser_one(
 					struct of_pci_range_parser *parser,
 					struct of_pci_range *range);
-extern int of_dma_get_range(struct device_node *np, u64 *dma_addr,
-				u64 *paddr, u64 *size);
 extern bool of_dma_is_coherent(struct device_node *np);
 #else /* CONFIG_OF_ADDRESS */
 static inline void __iomem *of_io_request_and_map(struct device_node *device,
@@ -104,12 +103,6 @@ static inline struct of_pci_range *of_pci_range_parser_one(
 	return NULL;
 }
 
-static inline int of_dma_get_range(struct device_node *np, u64 *dma_addr,
-				u64 *paddr, u64 *size)
-{
-	return -ENODEV;
-}
-
 static inline bool of_dma_is_coherent(struct device_node *np)
 {
 	return false;
diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h
index acf820e..9bbd5c0 100644
--- a/include/linux/of_fdt.h
+++ b/include/linux/of_fdt.h
@@ -58,6 +58,27 @@ extern int of_flat_dt_is_compatible(unsigned long node, const char *name);
 extern unsigned long of_get_flat_dt_root(void);
 extern uint32_t of_get_flat_dt_phandle(unsigned long node);
 
+/*
+ * early_init_dt_scan_chosen - scan the device tree for ramdisk and bootargs
+ *
+ * The boot arguments will be placed into the memory pointed to by @data.
+ * That memory should be COMMAND_LINE_SIZE big and initialized to be a valid
+ * (possibly empty) string.  Logic for what will be in @data after this
+ * function finishes:
+ *
+ * - CONFIG_CMDLINE_FORCE=true
+ *     CONFIG_CMDLINE
+ * - CONFIG_CMDLINE_EXTEND=true, @data is non-empty string
+ *     @data + dt bootargs (even if dt bootargs are empty)
+ * - CONFIG_CMDLINE_EXTEND=true, @data is empty string
+ *     CONFIG_CMDLINE + dt bootargs (even if dt bootargs are empty)
+ * - CMDLINE_FROM_BOOTLOADER=true, dt bootargs=non-empty:
+ *     dt bootargs
+ * - CMDLINE_FROM_BOOTLOADER=true, dt bootargs=empty, @data is non-empty string
+ *     @data is left unchanged
+ * - CMDLINE_FROM_BOOTLOADER=true, dt bootargs=empty, @data is empty string
+ *     CONFIG_CMDLINE (or "" if that's not defined)
+ */
 extern int early_init_dt_scan_chosen(unsigned long node, const char *uname,
 				     int depth, void *data);
 extern int early_init_dt_scan_memory(unsigned long node, const char *uname,
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index 37a4d9e..20b6efe 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -51,7 +51,10 @@ static inline void mapping_set_error(struct address_space *mapping, int error)
 		return;
 
 	/* Record in wb_err for checkers using errseq_t based tracking */
-	filemap_set_wb_err(mapping, error);
+	__filemap_set_wb_err(mapping, error);
+
+	/* Record it in superblock */
+	errseq_set(&mapping->host->i_sb->s_wb_err, error);
 
 	/* Record it in flags for now, for legacy callers */
 	if (error == -ENOSPC)
diff --git a/include/linux/parser.h b/include/linux/parser.h
index 12fc348..89e2b23 100644
--- a/include/linux/parser.h
+++ b/include/linux/parser.h
@@ -7,7 +7,8 @@
  * but could potentially be used anywhere else that simple option=arg
  * parsing is required.
  */
-
+#ifndef _LINUX_PARSER_H
+#define _LINUX_PARSER_H
 
 /* associates an integer enumerator with a pattern string. */
 struct match_token {
@@ -34,3 +35,5 @@ int match_hex(substring_t *, int *result);
 bool match_wildcard(const char *pattern, const char *str);
 size_t match_strlcpy(char *, const substring_t *, size_t);
 char *match_strdup(const substring_t *);
+
+#endif /* _LINUX_PARSER_H */
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 6a6a819..cd9109b 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -41,6 +41,7 @@
 #include <uapi/linux/pci.h>
 
 #include <linux/pci_ids.h>
+#include <linux/android_kabi.h>
 
 /*
  * The PCI interface treats multi-function devices as independent
@@ -469,6 +470,11 @@ struct pci_dev {
 	char		*driver_override; /* Driver name to force a match */
 
 	unsigned long	priv_flags;	/* Private flags for the PCI driver */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 static inline struct pci_dev *pci_physfn(struct pci_dev *dev)
@@ -602,6 +608,11 @@ struct pci_bus {
 	struct bin_attribute	*legacy_io;	/* Legacy I/O for this bus */
 	struct bin_attribute	*legacy_mem;	/* Legacy mem */
 	unsigned int		is_added:1;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 #define to_pci_bus(n)	container_of(n, struct pci_bus, dev)
@@ -839,6 +850,11 @@ struct pci_driver {
 	const struct attribute_group **groups;
 	struct device_driver	driver;
 	struct pci_dynids	dynids;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 #define	to_pci_driver(drv) container_of(drv, struct pci_driver, driver)
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index 0ad5769..99542a2 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -2423,6 +2423,8 @@
 #define PCI_VENDOR_ID_LENOVO		0x17aa
 
 #define PCI_VENDOR_ID_QCOM		0x17cb
+#define PCIE_DEVICE_ID_QCOM_PCIE20	0x0106
+#define PCIE_DEVICE_ID_QCOM_PCIE30	0x0107
 
 #define PCI_VENDOR_ID_CDNS		0x17cd
 
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index 68ccc5b..4f77b22 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -56,6 +56,7 @@ struct perf_guest_info_callbacks {
 #include <linux/perf_regs.h>
 #include <linux/cgroup.h>
 #include <linux/refcount.h>
+#include <linux/security.h>
 #include <asm/local.h>
 
 struct perf_callchain_entry {
@@ -721,6 +722,9 @@ struct perf_event {
 	struct perf_cgroup		*cgrp; /* cgroup event is attach to */
 #endif
 
+#ifdef CONFIG_SECURITY
+	void *security;
+#endif
 	struct list_head		sb_list;
 #endif /* CONFIG_PERF_EVENTS */
 };
@@ -1241,19 +1245,41 @@ extern int perf_cpu_time_max_percent_handler(struct ctl_table *table, int write,
 int perf_event_max_stack_handler(struct ctl_table *table, int write,
 				 void __user *buffer, size_t *lenp, loff_t *ppos);
 
-static inline bool perf_paranoid_tracepoint_raw(void)
+/* Access to perf_event_open(2) syscall. */
+#define PERF_SECURITY_OPEN		0
+
+/* Finer grained perf_event_open(2) access control. */
+#define PERF_SECURITY_CPU		1
+#define PERF_SECURITY_KERNEL		2
+#define PERF_SECURITY_TRACEPOINT	3
+
+static inline int perf_is_paranoid(void)
 {
 	return sysctl_perf_event_paranoid > -1;
 }
 
-static inline bool perf_paranoid_cpu(void)
+static inline int perf_allow_kernel(struct perf_event_attr *attr)
 {
-	return sysctl_perf_event_paranoid > 0;
+	if (sysctl_perf_event_paranoid > 1 && !capable(CAP_SYS_ADMIN))
+		return -EACCES;
+
+	return security_perf_event_open(attr, PERF_SECURITY_KERNEL);
 }
 
-static inline bool perf_paranoid_kernel(void)
+static inline int perf_allow_cpu(struct perf_event_attr *attr)
 {
-	return sysctl_perf_event_paranoid > 1;
+	if (sysctl_perf_event_paranoid > 0 && !capable(CAP_SYS_ADMIN))
+		return -EACCES;
+
+	return security_perf_event_open(attr, PERF_SECURITY_CPU);
+}
+
+static inline int perf_allow_tracepoint(struct perf_event_attr *attr)
+{
+	if (sysctl_perf_event_paranoid > -1 && !capable(CAP_SYS_ADMIN))
+		return -EPERM;
+
+	return security_perf_event_open(attr, PERF_SECURITY_TRACEPOINT);
 }
 
 extern void perf_event_init(void);
diff --git a/include/linux/phy.h b/include/linux/phy.h
index 8075078..2b3726f 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -21,6 +21,7 @@
 #include <linux/timer.h>
 #include <linux/workqueue.h>
 #include <linux/mod_devicetable.h>
+#include <linux/android_kabi.h>
 
 #include <linux/atomic.h>
 
@@ -442,6 +443,11 @@ struct phy_device {
 
 	void (*phy_link_change)(struct phy_device *, bool up, bool do_carrier);
 	void (*adjust_link)(struct net_device *dev);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 #define to_phy_device(d) container_of(to_mdio_device(d), \
 				      struct phy_device, mdio)
@@ -631,6 +637,10 @@ struct phy_driver {
 			    struct ethtool_tunable *tuna,
 			    const void *data);
 	int (*set_loopback)(struct phy_device *dev, bool enable);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+
 };
 #define to_phy_driver(d) container_of(to_mdio_common_driver(d),		\
 				      struct phy_driver, mdiodrv)
diff --git a/include/linux/pid.h b/include/linux/pid.h
index 9645b11..132d106 100644
--- a/include/linux/pid.h
+++ b/include/linux/pid.h
@@ -75,6 +75,7 @@ extern const struct file_operations pidfd_fops;
 struct file;
 
 extern struct pid *pidfd_pid(const struct file *file);
+struct pid *pidfd_get_pid(unsigned int fd, unsigned int *flags);
 
 static inline struct pid *get_pid(struct pid *pid)
 {
diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h
index 24a6263..19eafca 100644
--- a/include/linux/pm_qos.h
+++ b/include/linux/pm_qos.h
@@ -34,6 +34,8 @@ enum pm_qos_flags_status {
 #define PM_QOS_RESUME_LATENCY_NO_CONSTRAINT	PM_QOS_LATENCY_ANY
 #define PM_QOS_RESUME_LATENCY_NO_CONSTRAINT_NS	PM_QOS_LATENCY_ANY_NS
 #define PM_QOS_LATENCY_TOLERANCE_DEFAULT_VALUE	0
+#define PM_QOS_MIN_FREQUENCY_DEFAULT_VALUE	0
+#define PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE	FREQ_QOS_MAX_DEFAULT_VALUE
 #define PM_QOS_LATENCY_TOLERANCE_NO_CONSTRAINT	(-1)
 
 #define PM_QOS_FLAG_NO_POWER_OFF	(1 << 0)
@@ -49,21 +51,6 @@ struct pm_qos_flags_request {
 	s32 flags;	/* Do not change to 64 bit */
 };
 
-enum dev_pm_qos_req_type {
-	DEV_PM_QOS_RESUME_LATENCY = 1,
-	DEV_PM_QOS_LATENCY_TOLERANCE,
-	DEV_PM_QOS_FLAGS,
-};
-
-struct dev_pm_qos_request {
-	enum dev_pm_qos_req_type type;
-	union {
-		struct plist_node pnode;
-		struct pm_qos_flags_request flr;
-	} data;
-	struct device *dev;
-};
-
 enum pm_qos_type {
 	PM_QOS_UNITIALIZED,
 	PM_QOS_MAX,		/* return the largest value */
@@ -90,9 +77,51 @@ struct pm_qos_flags {
 	s32 effective_flags;	/* Do not change to 64 bit */
 };
 
+
+#define FREQ_QOS_MIN_DEFAULT_VALUE	0
+#define FREQ_QOS_MAX_DEFAULT_VALUE	S32_MAX
+
+enum freq_qos_req_type {
+	FREQ_QOS_MIN = 1,
+	FREQ_QOS_MAX,
+};
+
+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 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,
+	DEV_PM_QOS_MIN_FREQUENCY,
+	DEV_PM_QOS_MAX_FREQUENCY,
+	DEV_PM_QOS_FLAGS,
+};
+
+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 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;
@@ -191,6 +220,10 @@ static inline s32 dev_pm_qos_read_value(struct device *dev,
 	switch (type) {
 	case DEV_PM_QOS_RESUME_LATENCY:
 		return PM_QOS_RESUME_LATENCY_NO_CONSTRAINT;
+	case DEV_PM_QOS_MIN_FREQUENCY:
+		return PM_QOS_MIN_FREQUENCY_DEFAULT_VALUE;
+	case DEV_PM_QOS_MAX_FREQUENCY:
+		return PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE;
 	default:
 		WARN_ON(1);
 		return 0;
@@ -255,27 +288,6 @@ static inline s32 dev_pm_qos_raw_resume_latency(struct device *dev)
 }
 #endif
 
-#define FREQ_QOS_MIN_DEFAULT_VALUE	0
-#define FREQ_QOS_MAX_DEFAULT_VALUE	S32_MAX
-
-enum freq_qos_req_type {
-	FREQ_QOS_MIN = 1,
-	FREQ_QOS_MAX,
-};
-
-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 freq_qos_request {
-	enum freq_qos_req_type type;
-	struct plist_node pnode;
-	struct freq_constraints *qos;
-};
-
 static inline int freq_qos_request_active(struct freq_qos_request *req)
 {
 	return !IS_ERR_OR_NULL(req->qos);
@@ -291,6 +303,8 @@ int freq_qos_add_request(struct freq_constraints *qos,
 			 enum freq_qos_req_type type, s32 value);
 int freq_qos_update_request(struct freq_qos_request *req, s32 new_value);
 int freq_qos_remove_request(struct freq_qos_request *req);
+int freq_qos_apply(struct freq_qos_request *req,
+		   enum pm_qos_req_action action, s32 value);
 
 int freq_qos_add_notifier(struct freq_constraints *qos,
 			  enum freq_qos_req_type type,
diff --git a/include/linux/power/charger-manager.h b/include/linux/power/charger-manager.h
index ad19e68..ae94dce 100644
--- a/include/linux/power/charger-manager.h
+++ b/include/linux/power/charger-manager.h
@@ -248,7 +248,7 @@ struct charger_manager {
 	u64 charging_end_time;
 };
 
-#ifdef CONFIG_CHARGER_MANAGER
+#if IS_ENABLED(CONFIG_CHARGER_MANAGER)
 extern void cm_notify_event(struct power_supply *psy,
 				enum cm_event_types type, char *msg);
 #else
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
index 28413f73..b581831 100644
--- a/include/linux/power_supply.h
+++ b/include/linux/power_supply.h
@@ -48,6 +48,12 @@ enum {
 	POWER_SUPPLY_CHARGE_TYPE_STANDARD,	/* normal speed */
 	POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE,	/* dynamically adjusted speed */
 	POWER_SUPPLY_CHARGE_TYPE_CUSTOM,	/* use CHARGE_CONTROL_* props */
+
+	/*
+	 * force to 50 to minimize the chances of userspace binary
+	 * incompatibility on newer upstream kernels
+	 */
+	POWER_SUPPLY_CHARGE_TYPE_TAPER = 50, 	/* charging in CV phase */
 };
 
 enum {
@@ -61,6 +67,10 @@ enum {
 	POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE,
 	POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE,
 	POWER_SUPPLY_HEALTH_OVERCURRENT,
+	POWER_SUPPLY_HEALTH_CALIBRATION_REQUIRED,
+	POWER_SUPPLY_HEALTH_WARM,
+	POWER_SUPPLY_HEALTH_COOL,
+	POWER_SUPPLY_HEALTH_HOT,
 };
 
 enum {
@@ -139,6 +149,7 @@ enum power_supply_property {
 	POWER_SUPPLY_PROP_CAPACITY, /* in percents! */
 	POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN, /* in percents! */
 	POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX, /* in percents! */
+	POWER_SUPPLY_PROP_CAPACITY_ERROR_MARGIN, /* in percents! */
 	POWER_SUPPLY_PROP_CAPACITY_LEVEL,
 	POWER_SUPPLY_PROP_TEMP,
 	POWER_SUPPLY_PROP_TEMP_MAX,
@@ -158,6 +169,9 @@ enum power_supply_property {
 	POWER_SUPPLY_PROP_PRECHARGE_CURRENT,
 	POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT,
 	POWER_SUPPLY_PROP_CALIBRATE,
+	POWER_SUPPLY_PROP_MANUFACTURE_YEAR,
+	POWER_SUPPLY_PROP_MANUFACTURE_MONTH,
+	POWER_SUPPLY_PROP_MANUFACTURE_DAY,
 	/* Properties of type `const char *' */
 	POWER_SUPPLY_PROP_MODEL_NAME,
 	POWER_SUPPLY_PROP_MANUFACTURER,
@@ -177,6 +191,7 @@ enum power_supply_type {
 	POWER_SUPPLY_TYPE_USB_PD,		/* Power Delivery Port */
 	POWER_SUPPLY_TYPE_USB_PD_DRP,		/* PD Dual Role Port */
 	POWER_SUPPLY_TYPE_APPLE_BRICK_ID,	/* Apple Charging Method */
+	POWER_SUPPLY_TYPE_WIRELESS,		/* Wireless */
 };
 
 enum power_supply_usb_type {
@@ -325,6 +340,11 @@ struct power_supply_battery_ocv_table {
 	int capacity;	/* percent */
 };
 
+struct power_supply_resistance_temp_table {
+	int temp;	/* celsius */
+	int resistance;	/* internal resistance percent */
+};
+
 #define POWER_SUPPLY_OCV_TEMP_MAX 20
 
 /*
@@ -349,6 +369,8 @@ struct power_supply_battery_info {
 	int ocv_temp[POWER_SUPPLY_OCV_TEMP_MAX];/* celsius */
 	struct power_supply_battery_ocv_table *ocv_table[POWER_SUPPLY_OCV_TEMP_MAX];
 	int ocv_table_size[POWER_SUPPLY_OCV_TEMP_MAX];
+	struct power_supply_resistance_temp_table *resist_table;
+	int resist_table_size;
 };
 
 extern struct atomic_notifier_head power_supply_notifier;
@@ -359,12 +381,21 @@ extern void power_supply_put(struct power_supply *psy);
 #ifdef CONFIG_OF
 extern struct power_supply *power_supply_get_by_phandle(struct device_node *np,
 							const char *property);
+extern int power_supply_get_by_phandle_array(struct device_node *np,
+					     const char *property,
+					     struct power_supply **psy,
+					     ssize_t size);
 extern struct power_supply *devm_power_supply_get_by_phandle(
 				    struct device *dev, const char *property);
 #else /* !CONFIG_OF */
 static inline struct power_supply *
 power_supply_get_by_phandle(struct device_node *np, const char *property)
 { return NULL; }
+static int power_supply_get_by_phandle_array(struct device_node *np,
+					     const char *property,
+					     struct power_supply **psy,
+					     int size)
+{ return 0; }
 static inline struct power_supply *
 devm_power_supply_get_by_phandle(struct device *dev, const char *property)
 { return NULL; }
@@ -381,6 +412,9 @@ power_supply_find_ocv2cap_table(struct power_supply_battery_info *info,
 				int temp, int *table_len);
 extern int power_supply_batinfo_ocv2cap(struct power_supply_battery_info *info,
 					int ocv, int temp);
+extern int
+power_supply_temp2resist_simple(struct power_supply_resistance_temp_table *table,
+				int table_len, int temp);
 extern void power_supply_changed(struct power_supply *psy);
 extern int power_supply_am_i_supplied(struct power_supply *psy);
 extern int power_supply_set_input_current_limit_from_supplier(
diff --git a/include/linux/printk.h b/include/linux/printk.h
index 3b5cb66..2efa602 100644
--- a/include/linux/printk.h
+++ b/include/linux/printk.h
@@ -286,8 +286,9 @@ extern int kptr_restrict;
 /*
  * These can be used to print at the various log levels.
  * All of these will print unconditionally, although note that pr_debug()
- * and other debug macros are compiled out unless either DEBUG is defined
- * or CONFIG_DYNAMIC_DEBUG is set.
+ * and other debug macros are compiled out unless either DEBUG is defined,
+ * CONFIG_DYNAMIC_DEBUG is set, or CONFIG_DYNAMIC_DEBUG_CORE is set when
+ * DYNAMIC_DEBUG_MODULE being defined for any modules.
  */
 #define pr_emerg(fmt, ...) \
 	printk(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__)
@@ -323,7 +324,8 @@ extern int kptr_restrict;
 
 
 /* If you are writing a driver, please use dev_dbg instead */
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 #include <linux/dynamic_debug.h>
 
 /* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */
@@ -449,7 +451,8 @@ extern int kptr_restrict;
 #endif
 
 /* If you are writing a driver, please use dev_dbg instead */
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 /* descriptor check is first to prevent flooding with "callbacks suppressed" */
 #define pr_debug_ratelimited(fmt, ...)					\
 do {									\
@@ -496,7 +499,8 @@ static inline void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
 
 #endif
 
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 #define print_hex_dump_debug(prefix_str, prefix_type, rowsize,	\
 			     groupsize, buf, len, ascii)	\
 	dynamic_hex_dump(prefix_str, prefix_type, rowsize,	\
diff --git a/include/linux/psi_types.h b/include/linux/psi_types.h
index 07aaf9b..fc18e72 100644
--- a/include/linux/psi_types.h
+++ b/include/linux/psi_types.h
@@ -145,9 +145,10 @@ struct psi_group {
 	unsigned long avg[NR_PSI_STATES - 1][3];
 
 	/* Monitor work control */
-	atomic_t poll_scheduled;
-	struct kthread_worker __rcu *poll_kworker;
-	struct kthread_delayed_work poll_work;
+	struct task_struct __rcu *poll_task;
+	struct timer_list poll_timer;
+	wait_queue_head_t poll_wait;
+	atomic_t poll_wakeup;
 
 	/* Protects data used by the monitor */
 	struct mutex trigger_lock;
diff --git a/include/linux/pwm.h b/include/linux/pwm.h
index b2c9c46..af59e3c 100644
--- a/include/linux/pwm.h
+++ b/include/linux/pwm.h
@@ -39,7 +39,7 @@ enum pwm_polarity {
  * current PWM hardware state.
  */
 struct pwm_args {
-	unsigned int period;
+	u64 period;
 	enum pwm_polarity polarity;
 };
 
@@ -48,6 +48,17 @@ enum {
 	PWMF_EXPORTED = 1 << 1,
 };
 
+/**
+ * enum pwm_output_type - output type of the PWM signal
+ * @PWM_OUTPUT_FIXED: PWM output is fixed until a change request
+ * @PWM_OUTPUT_MODULATED: PWM output is modulated in hardware
+ * autonomously with a predefined pattern
+ */
+enum pwm_output_type {
+	PWM_OUTPUT_FIXED = 1 << 0,
+	PWM_OUTPUT_MODULATED = 1 << 1,
+};
+
 /*
  * struct pwm_state - state of a PWM channel
  * @period: PWM period (in nanoseconds)
@@ -56,9 +67,10 @@ enum {
  * @enabled: PWM enabled status
  */
 struct pwm_state {
-	unsigned int period;
-	unsigned int duty_cycle;
+	u64 period;
+	u64 duty_cycle;
 	enum pwm_polarity polarity;
+	enum pwm_output_type output_type;
 	bool enabled;
 };
 
@@ -105,13 +117,13 @@ static inline bool pwm_is_enabled(const struct pwm_device *pwm)
 	return state.enabled;
 }
 
-static inline void pwm_set_period(struct pwm_device *pwm, unsigned int period)
+static inline void pwm_set_period(struct pwm_device *pwm, u64 period)
 {
 	if (pwm)
 		pwm->state.period = period;
 }
 
-static inline unsigned int pwm_get_period(const struct pwm_device *pwm)
+static inline u64 pwm_get_period(const struct pwm_device *pwm)
 {
 	struct pwm_state state;
 
@@ -126,7 +138,7 @@ static inline void pwm_set_duty_cycle(struct pwm_device *pwm, unsigned int duty)
 		pwm->state.duty_cycle = duty;
 }
 
-static inline unsigned int pwm_get_duty_cycle(const struct pwm_device *pwm)
+static inline u64 pwm_get_duty_cycle(const struct pwm_device *pwm)
 {
 	struct pwm_state state;
 
@@ -144,6 +156,16 @@ static inline enum pwm_polarity pwm_get_polarity(const struct pwm_device *pwm)
 	return state.polarity;
 }
 
+static inline enum pwm_output_type pwm_get_output_type(
+		const struct pwm_device *pwm)
+{
+	struct pwm_state state;
+
+	pwm_get_state(pwm, &state);
+
+	return state.output_type;
+}
+
 static inline void pwm_get_args(const struct pwm_device *pwm,
 				struct pwm_args *args)
 {
@@ -250,6 +272,7 @@ pwm_set_relative_duty_cycle(struct pwm_state *state, unsigned int duty_cycle,
  * @get_state: get the current PWM state. This function is only
  *	       called once per PWM device when the PWM chip is
  *	       registered.
+ * @get_output_type_supported: get the supported output type of this PWM
  * @owner: helps prevent removal of modules exporting active PWMs
  * @config: configure duty cycles and period length for this PWM
  * @set_polarity: configure the polarity of this PWM
@@ -265,6 +288,8 @@ struct pwm_ops {
 		     const struct pwm_state *state);
 	void (*get_state)(struct pwm_chip *chip, struct pwm_device *pwm,
 			  struct pwm_state *state);
+	int (*get_output_type_supported)(struct pwm_chip *chip,
+			struct pwm_device *pwm);
 	struct module *owner;
 
 	/* Only used by legacy drivers */
@@ -308,8 +333,8 @@ struct pwm_chip {
  * @duty_cycle: duty cycle of the PWM signal (in nanoseconds)
  */
 struct pwm_capture {
-	unsigned int period;
-	unsigned int duty_cycle;
+	u64 period;
+	u64 duty_cycle;
 };
 
 #if IS_ENABLED(CONFIG_PWM)
@@ -320,6 +345,24 @@ int pwm_apply_state(struct pwm_device *pwm, const struct pwm_state *state);
 int pwm_adjust_config(struct pwm_device *pwm);
 
 /**
+ * pwm_get_output_type_supported() - obtain output type of a PWM device.
+ * @pwm: PWM device
+ *
+ * Returns:  output type supported by the PWM device
+ */
+static inline int pwm_get_output_type_supported(struct pwm_device *pwm)
+{
+	if (!pwm)
+		return -EINVAL;
+
+	if (pwm->chip->ops->get_output_type_supported)
+		return pwm->chip->ops->get_output_type_supported(pwm->chip,
+				pwm);
+
+	return PWM_OUTPUT_FIXED;
+}
+
+/**
  * pwm_config() - change a PWM device configuration
  * @pwm: PWM device
  * @duty_ns: "on" time (in nanoseconds)
@@ -437,6 +480,11 @@ static inline int pwm_adjust_config(struct pwm_device *pwm)
 	return -ENOTSUPP;
 }
 
+static inline int pwm_get_output_type_supported(struct pwm_device *pwm)
+{
+	return -EINVAL;
+}
+
 static inline int pwm_config(struct pwm_device *pwm, int duty_ns,
 			     int period_ns)
 {
diff --git a/include/linux/qcom_scm.h b/include/linux/qcom_scm.h
index 2d5eff50..c4dc33a 100644
--- a/include/linux/qcom_scm.h
+++ b/include/linux/qcom_scm.h
@@ -24,6 +24,13 @@ struct qcom_scm_vmperm {
 	int perm;
 };
 
+enum qcom_scm_ice_cipher {
+	QCOM_SCM_ICE_CIPHER_AES_128_XTS = 0,
+	QCOM_SCM_ICE_CIPHER_AES_128_CBC = 1,
+	QCOM_SCM_ICE_CIPHER_AES_256_XTS = 3,
+	QCOM_SCM_ICE_CIPHER_AES_256_CBC = 4,
+};
+
 #define QCOM_SCM_VMID_HLOS       0x3
 #define QCOM_SCM_VMID_MSS_MSA    0xF
 #define QCOM_SCM_VMID_WLAN       0x18
@@ -48,6 +55,11 @@ extern int qcom_scm_pas_mem_setup(u32 peripheral, phys_addr_t addr,
 				  phys_addr_t size);
 extern int qcom_scm_pas_auth_and_reset(u32 peripheral);
 extern int qcom_scm_pas_shutdown(u32 peripheral);
+extern bool qcom_scm_ice_available(void);
+extern int qcom_scm_ice_invalidate_key(u32 index);
+extern int qcom_scm_ice_set_key(u32 index, const u8 *key, u32 key_size,
+				enum qcom_scm_ice_cipher cipher,
+				u32 data_unit_size);
 extern int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t mem_sz,
 			       unsigned int *src,
 			       const struct qcom_scm_vmperm *newvm,
@@ -58,6 +70,7 @@ extern int qcom_scm_set_remote_state(u32 state, u32 id);
 extern int qcom_scm_restore_sec_cfg(u32 device_id, u32 spare);
 extern int qcom_scm_iommu_secure_ptbl_size(u32 spare, size_t *size);
 extern int qcom_scm_iommu_secure_ptbl_init(u64 addr, u32 size, u32 spare);
+extern int qcom_scm_qsmmu500_wait_safe_toggle(bool en);
 extern int qcom_scm_io_readl(phys_addr_t addr, unsigned int *val);
 extern int qcom_scm_io_writel(phys_addr_t addr, unsigned int val);
 #else
@@ -86,6 +99,11 @@ static inline int qcom_scm_pas_mem_setup(u32 peripheral, phys_addr_t addr,
 static inline int
 qcom_scm_pas_auth_and_reset(u32 peripheral) { return -ENODEV; }
 static inline int qcom_scm_pas_shutdown(u32 peripheral) { return -ENODEV; }
+static inline bool qcom_scm_ice_available(void) { return false; }
+static inline int qcom_scm_ice_invalidate_key(u32 index) { return -ENODEV; }
+static inline int qcom_scm_ice_set_key(u32 index, const u8 *key, u32 key_size,
+				       enum qcom_scm_ice_cipher cipher,
+				       u32 data_unit_size) { return -ENODEV; }
 static inline int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t mem_sz,
 				      unsigned int *src,
 				      const struct qcom_scm_vmperm *newvm,
@@ -97,6 +115,7 @@ qcom_scm_set_remote_state(u32 state,u32 id) { return -ENODEV; }
 static inline int qcom_scm_restore_sec_cfg(u32 device_id, u32 spare) { return -ENODEV; }
 static inline int qcom_scm_iommu_secure_ptbl_size(u32 spare, size_t *size) { return -ENODEV; }
 static inline int qcom_scm_iommu_secure_ptbl_init(u64 addr, u32 size, u32 spare) { return -ENODEV; }
+static inline int qcom_scm_qsmmu500_wait_safe_toggle(bool en) { return -ENODEV; }
 static inline int qcom_scm_io_readl(phys_addr_t addr, unsigned int *val) { return -ENODEV; }
 static inline int qcom_scm_io_writel(phys_addr_t addr, unsigned int val) { return -ENODEV; }
 #endif
diff --git a/include/linux/quota.h b/include/linux/quota.h
index 27aab84..3088ac9 100644
--- a/include/linux/quota.h
+++ b/include/linux/quota.h
@@ -316,6 +316,9 @@ struct quota_format_ops {
 	int (*commit_dqblk)(struct dquot *dquot);	/* Write structure for one user */
 	int (*release_dqblk)(struct dquot *dquot);	/* Called when last reference to dquot is being dropped */
 	int (*get_next_id)(struct super_block *sb, struct kqid *qid);	/* Get next ID with existing structure in the quota file */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /* Operations working with dquots */
@@ -335,6 +338,9 @@ struct dquot_operations {
 	int (*get_inode_usage) (struct inode *, qsize_t *);
 	/* Get next ID with active quota structure */
 	int (*get_next_id) (struct super_block *sb, struct kqid *qid);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 struct path;
@@ -438,6 +444,9 @@ struct quotactl_ops {
 	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);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 struct quota_format_type {
diff --git a/include/linux/random.h b/include/linux/random.h
index 5b3ec7d..0efabaa 100644
--- a/include/linux/random.h
+++ b/include/linux/random.h
@@ -118,29 +118,21 @@ unsigned long randomize_page(unsigned long start, unsigned long range);
 #ifdef CONFIG_ARCH_RANDOM
 # include <asm/archrandom.h>
 #else
-static inline bool arch_get_random_long(unsigned long *v)
+static inline bool __must_check arch_get_random_long(unsigned long *v)
 {
-	return 0;
+	return false;
 }
-static inline bool arch_get_random_int(unsigned int *v)
+static inline bool __must_check arch_get_random_int(unsigned int *v)
 {
-	return 0;
+	return false;
 }
-static inline bool arch_has_random(void)
+static inline bool __must_check arch_get_random_seed_long(unsigned long *v)
 {
-	return 0;
+	return false;
 }
-static inline bool arch_get_random_seed_long(unsigned long *v)
+static inline bool __must_check arch_get_random_seed_int(unsigned int *v)
 {
-	return 0;
-}
-static inline bool arch_get_random_seed_int(unsigned int *v)
-{
-	return 0;
-}
-static inline bool arch_has_random_seed(void)
-{
-	return 0;
+	return false;
 }
 #endif
 
diff --git a/include/linux/rpmsg.h b/include/linux/rpmsg.h
index 9fe156d..9cc3e79 100644
--- a/include/linux/rpmsg.h
+++ b/include/linux/rpmsg.h
@@ -2,6 +2,7 @@
 /*
  * Remote processor messaging
  *
+ * Copyright (c) 2020 The Linux Foundation.
  * Copyright (C) 2011 Texas Instruments, Inc.
  * Copyright (C) 2011 Google, Inc.
  * All rights reserved.
@@ -60,6 +61,7 @@ struct rpmsg_device {
 };
 
 typedef int (*rpmsg_rx_cb_t)(struct rpmsg_device *, void *, int, void *, u32);
+typedef int (*rpmsg_rx_sig_t)(struct rpmsg_device *, void *, u32, u32);
 
 /**
  * struct rpmsg_endpoint - binds a local rpmsg address to its user
@@ -67,6 +69,7 @@ typedef int (*rpmsg_rx_cb_t)(struct rpmsg_device *, void *, int, void *, u32);
  * @refcount: when this drops to zero, the ept is deallocated
  * @cb: rx callback handler
  * @cb_lock: must be taken before accessing/changing @cb
+ * @sig_cb: rx serial signal handler
  * @addr: local rpmsg address
  * @priv: private data for the driver's use
  *
@@ -89,6 +92,7 @@ struct rpmsg_endpoint {
 	struct kref refcount;
 	rpmsg_rx_cb_t cb;
 	struct mutex cb_lock;
+	rpmsg_rx_sig_t sig_cb;
 	u32 addr;
 	void *priv;
 
@@ -102,6 +106,7 @@ struct rpmsg_endpoint {
  * @probe: invoked when a matching rpmsg channel (i.e. device) is found
  * @remove: invoked when the rpmsg channel is removed
  * @callback: invoked when an inbound message is received on the channel
+ * @signals: invoked when a serial signal change is received on the channel
  */
 struct rpmsg_driver {
 	struct device_driver drv;
@@ -109,6 +114,8 @@ struct rpmsg_driver {
 	int (*probe)(struct rpmsg_device *dev);
 	void (*remove)(struct rpmsg_device *dev);
 	int (*callback)(struct rpmsg_device *, void *, int, void *, u32);
+	int (*signals)(struct rpmsg_device *rpdev,
+		       void *priv, u32 old, u32 new);
 };
 
 #if IS_ENABLED(CONFIG_RPMSG)
@@ -135,6 +142,9 @@ int rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst,
 __poll_t rpmsg_poll(struct rpmsg_endpoint *ept, struct file *filp,
 			poll_table *wait);
 
+int rpmsg_get_signals(struct rpmsg_endpoint *ept);
+int rpmsg_set_signals(struct rpmsg_endpoint *ept, u32 set, u32 clear);
+
 #else
 
 static inline int register_rpmsg_device(struct rpmsg_device *dev)
@@ -242,6 +252,23 @@ static inline __poll_t rpmsg_poll(struct rpmsg_endpoint *ept,
 	return 0;
 }
 
+static inline int rpmsg_get_signals(struct rpmsg_endpoint *ept)
+{
+	/* This shouldn't be possible */
+	WARN_ON(1);
+
+	return -ENXIO;
+}
+
+static inline int rpmsg_set_signals(struct rpmsg_endpoint *ept,
+				    u32 set, u32 clear)
+{
+	/* This shouldn't be possible */
+	WARN_ON(1);
+
+	return -ENXIO;
+}
+
 #endif /* IS_ENABLED(CONFIG_RPMSG) */
 
 /* use a macro to avoid include chaining to get THIS_MODULE */
diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h
index 8a36063..72996508 100644
--- a/include/linux/rwsem.h
+++ b/include/linux/rwsem.h
@@ -19,6 +19,7 @@
 #ifdef CONFIG_RWSEM_SPIN_ON_OWNER
 #include <linux/osq_lock.h>
 #endif
+#include <linux/android_vendor.h>
 
 /*
  * For an uncontended rwsem, count and owner are the only fields a task
@@ -51,6 +52,7 @@ struct rw_semaphore {
 #ifdef CONFIG_DEBUG_LOCK_ALLOC
 	struct lockdep_map	dep_map;
 #endif
+	ANDROID_VENDOR_DATA(1);
 };
 
 /*
diff --git a/include/linux/scatterlist.h b/include/linux/scatterlist.h
index 6eec50f..45cf7b6 100644
--- a/include/linux/scatterlist.h
+++ b/include/linux/scatterlist.h
@@ -151,6 +151,20 @@ static inline void sg_set_buf(struct scatterlist *sg, const void *buf,
 #define for_each_sg(sglist, sg, nr, __i)	\
 	for (__i = 0, sg = (sglist); __i < (nr); __i++, sg = sg_next(sg))
 
+/*
+ * Loop over each sg element in the given sg_table object.
+ */
+#define for_each_sgtable_sg(sgt, sg, i)		\
+	for_each_sg((sgt)->sgl, sg, (sgt)->orig_nents, i)
+
+/*
+ * Loop over each sg element in the given *DMA mapped* sg_table object.
+ * Please use sg_dma_address(sg) and sg_dma_len(sg) to extract DMA addresses
+ * of the each element.
+ */
+#define for_each_sgtable_dma_sg(sgt, sg, i)	\
+	for_each_sg((sgt)->sgl, sg, (sgt)->nents, i)
+
 /**
  * sg_chain - Chain two sglists together
  * @prv:	First scatterlist
@@ -401,9 +415,10 @@ sg_page_iter_dma_address(struct sg_dma_page_iter *dma_iter)
  * @sglist:	sglist to iterate over
  * @piter:	page iterator to hold current page, sg, sg_pgoffset
  * @nents:	maximum number of sg entries to iterate over
- * @pgoffset:	starting page offset
+ * @pgoffset:	starting page offset (in pages)
  *
  * Callers may use sg_page_iter_page() to get each page pointer.
+ * In each loop it operates on PAGE_SIZE unit.
  */
 #define for_each_sg_page(sglist, piter, nents, pgoffset)		   \
 	for (__sg_page_iter_start((piter), (sglist), (nents), (pgoffset)); \
@@ -412,18 +427,47 @@ sg_page_iter_dma_address(struct sg_dma_page_iter *dma_iter)
 /**
  * for_each_sg_dma_page - iterate over the pages of the given sg list
  * @sglist:	sglist to iterate over
- * @dma_iter:	page iterator to hold current page
+ * @dma_iter:	DMA page iterator to hold current page
  * @dma_nents:	maximum number of sg entries to iterate over, this is the value
  *              returned from dma_map_sg
- * @pgoffset:	starting page offset
+ * @pgoffset:	starting page offset (in pages)
  *
  * Callers may use sg_page_iter_dma_address() to get each page's DMA address.
+ * In each loop it operates on PAGE_SIZE unit.
  */
 #define for_each_sg_dma_page(sglist, dma_iter, dma_nents, pgoffset)            \
 	for (__sg_page_iter_start(&(dma_iter)->base, sglist, dma_nents,        \
 				  pgoffset);                                   \
 	     __sg_page_iter_dma_next(dma_iter);)
 
+/**
+ * for_each_sgtable_page - iterate over all pages in the sg_table object
+ * @sgt:	sg_table object to iterate over
+ * @piter:	page iterator to hold current page
+ * @pgoffset:	starting page offset (in pages)
+ *
+ * Iterates over the all memory pages in the buffer described by
+ * a scatterlist stored in the given sg_table object.
+ * See also for_each_sg_page(). In each loop it operates on PAGE_SIZE unit.
+ */
+#define for_each_sgtable_page(sgt, piter, pgoffset)	\
+	for_each_sg_page((sgt)->sgl, piter, (sgt)->orig_nents, pgoffset)
+
+/**
+ * for_each_sgtable_dma_page - iterate over the DMA mapped sg_table object
+ * @sgt:	sg_table object to iterate over
+ * @dma_iter:	DMA page iterator to hold current page
+ * @pgoffset:	starting page offset (in pages)
+ *
+ * Iterates over the all DMA mapped pages in the buffer described by
+ * a scatterlist stored in the given sg_table object.
+ * See also for_each_sg_dma_page(). In each loop it operates on PAGE_SIZE
+ * unit.
+ */
+#define for_each_sgtable_dma_page(sgt, dma_iter, pgoffset)	\
+	for_each_sg_dma_page((sgt)->sgl, dma_iter, (sgt)->nents, pgoffset)
+
+
 /*
  * Mapping sg iterator
  *
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 5710b80..c2b71a87 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -31,6 +31,8 @@
 #include <linux/task_io_accounting.h>
 #include <linux/posix-timers.h>
 #include <linux/rseq.h>
+#include <linux/android_kabi.h>
+#include <linux/android_vendor.h>
 
 /* task_struct member predeclarations (sorted alphabetically): */
 struct audit_context;
@@ -476,6 +478,11 @@ struct sched_entity {
 	 */
 	struct sched_avg		avg;
 #endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct sched_rt_entity {
@@ -494,6 +501,11 @@ struct sched_rt_entity {
 	/* rq "owned" by this entity/group: */
 	struct rt_rq			*my_q;
 #endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } __randomize_layout;
 
 struct sched_dl_entity {
@@ -681,9 +693,15 @@ struct task_struct {
 	struct sched_dl_entity		dl;
 
 #ifdef CONFIG_UCLAMP_TASK
-	/* Clamp values requested for a scheduling entity */
+	/*
+	 * Clamp values requested for a scheduling entity.
+	 * Must be updated with task_rq_lock() held.
+	 */
 	struct uclamp_se		uclamp_req[UCLAMP_CNT];
-	/* Effective clamp values used for a scheduling entity */
+	/*
+	 * Effective clamp values used for a scheduling entity.
+	 * Must be updated with task_rq_lock() held.
+	 */
 	struct uclamp_se		uclamp[UCLAMP_CNT];
 #endif
 
@@ -841,6 +859,10 @@ struct task_struct {
 	u64				stimescaled;
 #endif
 	u64				gtime;
+#ifdef CONFIG_CPU_FREQ_TIMES
+	u64				*time_in_state;
+	unsigned int			max_state;
+#endif
 	struct prev_cputime		prev_cputime;
 #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
 	struct vtime			vtime;
@@ -1205,6 +1227,8 @@ struct task_struct {
 #endif /* CONFIG_TRACING */
 
 #ifdef CONFIG_KCOV
+	/* See kernel/kcov.c for more details. */
+
 	/* Coverage collection mode enabled for this task (0 if disabled): */
 	unsigned int			kcov_mode;
 
@@ -1216,6 +1240,12 @@ struct task_struct {
 
 	/* KCOV descriptor wired with this task or NULL: */
 	struct kcov			*kcov;
+
+	/* KCOV common handle for remote coverage collection: */
+	u64				kcov_handle;
+
+	/* KCOV sequence number: */
+	int				kcov_sequence;
 #endif
 
 #ifdef CONFIG_MEMCG
@@ -1268,6 +1298,18 @@ struct task_struct {
 	unsigned long			prev_lowest_stack;
 #endif
 
+	ANDROID_VENDOR_DATA_ARRAY(1, 2);
+	ANDROID_OEM_DATA_ARRAY(1, 2);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+	ANDROID_KABI_RESERVE(5);
+	ANDROID_KABI_RESERVE(6);
+	ANDROID_KABI_RESERVE(7);
+	ANDROID_KABI_RESERVE(8);
+
 	/*
 	 * New fields for task_struct should be added above here, so that
 	 * they are included in the randomized portion of task_struct.
diff --git a/include/linux/sched/signal.h b/include/linux/sched/signal.h
index baf58f4..1f42ad1 100644
--- a/include/linux/sched/signal.h
+++ b/include/linux/sched/signal.h
@@ -10,6 +10,9 @@
 #include <linux/cred.h>
 #include <linux/refcount.h>
 #include <linux/posix-timers.h>
+#include <linux/android_kabi.h>
+#include <linux/mm_types.h>
+#include <asm/ptrace.h>
 
 /*
  * Types defining task->signal and task->sighand and APIs using them:
@@ -233,6 +236,10 @@ struct signal_struct {
 						 * and may have inconsistent
 						 * permissions.
 						 */
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } __randomize_layout;
 
 /*
@@ -378,6 +385,20 @@ static inline int signal_pending_state(long state, struct task_struct *p)
 }
 
 /*
+ * This should only be used in fault handlers to decide whether we
+ * should stop the current fault routine to handle the signals
+ * instead, especially with the case where we've got interrupted with
+ * a VM_FAULT_RETRY.
+ */
+static inline bool fault_signal_pending(vm_fault_t fault_flags,
+					struct pt_regs *regs)
+{
+	return unlikely((fault_flags & VM_FAULT_RETRY) &&
+			(fatal_signal_pending(current) ||
+			 (user_mode(regs) && signal_pending(current))));
+}
+
+/*
  * Reevaluate whether the task has signals pending delivery.
  * Wake the task if so.
  * This is required every time the blocked sigset_t changes.
diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h
index d4f6215..e62cef0 100644
--- a/include/linux/sched/sysctl.h
+++ b/include/linux/sched/sysctl.h
@@ -59,6 +59,7 @@ extern int sysctl_sched_rt_runtime;
 #ifdef CONFIG_UCLAMP_TASK
 extern unsigned int sysctl_sched_uclamp_util_min;
 extern unsigned int sysctl_sched_uclamp_util_max;
+extern unsigned int sysctl_sched_uclamp_util_min_rt_default;
 #endif
 
 #ifdef CONFIG_CFS_BANDWIDTH
diff --git a/include/linux/sched/task.h b/include/linux/sched/task.h
index 4b1c3b66..302068d 100644
--- a/include/linux/sched/task.h
+++ b/include/linux/sched/task.h
@@ -48,6 +48,7 @@ extern asmlinkage void schedule_tail(struct task_struct *prev);
 extern void init_idle(struct task_struct *idle, int cpu);
 
 extern int sched_fork(unsigned long clone_flags, struct task_struct *p);
+extern void sched_post_fork(struct task_struct *p);
 extern void sched_dead(struct task_struct *p);
 
 void __noreturn do_task_dead(void);
diff --git a/include/linux/sched/topology.h b/include/linux/sched/topology.h
index f341163..509c0d1 100644
--- a/include/linux/sched/topology.h
+++ b/include/linux/sched/topology.h
@@ -3,6 +3,7 @@
 #define _LINUX_SCHED_TOPOLOGY_H
 
 #include <linux/topology.h>
+#include <linux/android_kabi.h>
 
 #include <linux/sched/idle.h>
 
@@ -135,6 +136,10 @@ struct sched_domain {
 	struct sched_domain_shared *shared;
 
 	unsigned int span_weight;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+
 	/*
 	 * Span of all CPUs in this domain.
 	 *
diff --git a/include/linux/sched/user.h b/include/linux/sched/user.h
index 917d88e..573b448 100644
--- a/include/linux/sched/user.h
+++ b/include/linux/sched/user.h
@@ -6,6 +6,7 @@
 #include <linux/atomic.h>
 #include <linux/refcount.h>
 #include <linux/ratelimit.h>
+#include <linux/android_kabi.h>
 
 /*
  * Some day this will be a full-fledged user tracking system..
@@ -39,6 +40,9 @@ struct user_struct {
 
 	/* Miscellaneous per-user rate limit */
 	struct ratelimit_state ratelimit;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 extern int uids_sysfs_init(void);
diff --git a/include/linux/sched/xacct.h b/include/linux/sched/xacct.h
index c078f0a..9544c9d 100644
--- a/include/linux/sched/xacct.h
+++ b/include/linux/sched/xacct.h
@@ -28,6 +28,11 @@ static inline void inc_syscw(struct task_struct *tsk)
 {
 	tsk->ioac.syscw++;
 }
+
+static inline void inc_syscfs(struct task_struct *tsk)
+{
+	tsk->ioac.syscfs++;
+}
 #else
 static inline void add_rchar(struct task_struct *tsk, ssize_t amt)
 {
@@ -44,6 +49,10 @@ static inline void inc_syscr(struct task_struct *tsk)
 static inline void inc_syscw(struct task_struct *tsk)
 {
 }
+
+static inline void inc_syscfs(struct task_struct *tsk)
+{
+}
 #endif
 
 #endif /* _LINUX_SCHED_XACCT_H */
diff --git a/include/linux/scs.h b/include/linux/scs.h
new file mode 100644
index 0000000..f8c8bef
--- /dev/null
+++ b/include/linux/scs.h
@@ -0,0 +1,62 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Shadow Call Stack support.
+ *
+ * Copyright (C) 2019 Google LLC
+ */
+
+#ifndef _LINUX_SCS_H
+#define _LINUX_SCS_H
+
+#include <linux/gfp.h>
+#include <linux/sched.h>
+#include <asm/page.h>
+
+#ifdef CONFIG_SHADOW_CALL_STACK
+
+#ifdef CONFIG_SHADOW_CALL_STACK_VMAP
+#define SCS_SIZE	PAGE_SIZE
+#else
+/*
+ * In testing, 1 KiB shadow stack size (i.e. 128 stack frames on a 64-bit
+ * architecture) provided ~40% safety margin on stack usage while keeping
+ * memory allocation overhead reasonable.
+ */
+#define SCS_SIZE	1024UL
+#endif
+
+#define GFP_SCS		(GFP_KERNEL | __GFP_ZERO)
+
+/*
+ * A random number outside the kernel's virtual address space to mark the
+ * end of the shadow stack.
+ */
+#define SCS_END_MAGIC	0xaf0194819b1635f6UL
+
+#define task_scs(tsk)	(task_thread_info(tsk)->shadow_call_stack)
+
+static inline void task_set_scs(struct task_struct *tsk, void *s)
+{
+	task_scs(tsk) = s;
+}
+
+extern void scs_init(void);
+extern void scs_task_reset(struct task_struct *tsk);
+extern int scs_prepare(struct task_struct *tsk, int node);
+extern bool scs_corrupted(struct task_struct *tsk);
+extern void scs_release(struct task_struct *tsk);
+
+#else /* CONFIG_SHADOW_CALL_STACK */
+
+#define task_scs(tsk)	NULL
+
+static inline void task_set_scs(struct task_struct *tsk, void *s) {}
+static inline void scs_init(void) {}
+static inline void scs_task_reset(struct task_struct *tsk) {}
+static inline int scs_prepare(struct task_struct *tsk, int node) { return 0; }
+static inline bool scs_corrupted(struct task_struct *tsk) { return false; }
+static inline void scs_release(struct task_struct *tsk) {}
+
+#endif /* CONFIG_SHADOW_CALL_STACK */
+
+#endif /* _LINUX_SCS_H */
diff --git a/include/linux/seccomp.h b/include/linux/seccomp.h
index 84868d3..a6f90d9 100644
--- a/include/linux/seccomp.h
+++ b/include/linux/seccomp.h
@@ -12,6 +12,7 @@
 #ifdef CONFIG_SECCOMP
 
 #include <linux/thread_info.h>
+#include <linux/atomic.h>
 #include <asm/seccomp.h>
 
 struct seccomp_filter;
@@ -28,6 +29,7 @@ struct seccomp_filter;
  */
 struct seccomp {
 	int mode;
+	atomic_t filter_count;
 	struct seccomp_filter *filter;
 };
 
@@ -81,10 +83,10 @@ static inline int seccomp_mode(struct seccomp *s)
 #endif /* CONFIG_SECCOMP */
 
 #ifdef CONFIG_SECCOMP_FILTER
-extern void put_seccomp_filter(struct task_struct *tsk);
+extern void seccomp_filter_release(struct task_struct *tsk);
 extern void get_seccomp_filter(struct task_struct *tsk);
 #else  /* CONFIG_SECCOMP_FILTER */
-static inline void put_seccomp_filter(struct task_struct *tsk)
+static inline void seccomp_filter_release(struct task_struct *tsk)
 {
 	return;
 }
diff --git a/include/linux/security.h b/include/linux/security.h
index df90399..2696259 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -1897,5 +1897,42 @@ static inline void security_bpf_prog_free(struct bpf_prog_aux *aux)
 #endif /* CONFIG_SECURITY */
 #endif /* CONFIG_BPF_SYSCALL */
 
-#endif /* ! __LINUX_SECURITY_H */
+#ifdef CONFIG_PERF_EVENTS
+struct perf_event_attr;
+struct perf_event;
 
+#ifdef CONFIG_SECURITY
+extern int security_perf_event_open(struct perf_event_attr *attr, int type);
+extern int security_perf_event_alloc(struct perf_event *event);
+extern void security_perf_event_free(struct perf_event *event);
+extern int security_perf_event_read(struct perf_event *event);
+extern int security_perf_event_write(struct perf_event *event);
+#else
+static inline int security_perf_event_open(struct perf_event_attr *attr,
+					   int type)
+{
+	return 0;
+}
+
+static inline int security_perf_event_alloc(struct perf_event *event)
+{
+	return 0;
+}
+
+static inline void security_perf_event_free(struct perf_event *event)
+{
+}
+
+static inline int security_perf_event_read(struct perf_event *event)
+{
+	return 0;
+}
+
+static inline int security_perf_event_write(struct perf_event *event)
+{
+	return 0;
+}
+#endif /* CONFIG_SECURITY */
+#endif /* CONFIG_PERF_EVENTS */
+
+#endif /* ! __LINUX_SECURITY_H */
diff --git a/include/linux/serdev.h b/include/linux/serdev.h
index 9f14f9c..54df861 100644
--- a/include/linux/serdev.h
+++ b/include/linux/serdev.h
@@ -165,9 +165,21 @@ int serdev_device_add(struct serdev_device *);
 void serdev_device_remove(struct serdev_device *);
 
 struct serdev_controller *serdev_controller_alloc(struct device *, size_t);
-int serdev_controller_add(struct serdev_controller *);
+int serdev_controller_add_platform(struct serdev_controller *, bool);
 void serdev_controller_remove(struct serdev_controller *);
 
+/**
+ * serdev_controller_add() - Add an serdev controller
+ * @ctrl:	controller to be registered.
+ *
+ * Register a controller previously allocated via serdev_controller_alloc() with
+ * the serdev core.
+ */
+static inline int serdev_controller_add(struct serdev_controller *ctrl)
+{
+	return serdev_controller_add_platform(ctrl, false);
+}
+
 static inline void serdev_controller_write_wakeup(struct serdev_controller *ctrl)
 {
 	struct serdev_device *serdev = ctrl->serdev;
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 6493c98..c5cbcf7 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -40,6 +40,7 @@
 #if IS_ENABLED(CONFIG_NF_CONNTRACK)
 #include <linux/netfilter/nf_conntrack_common.h>
 #endif
+#include <linux/android_kabi.h>
 
 /* The interface for checksum offload between the stack and networking drivers
  * is as follows...
@@ -592,6 +593,8 @@ enum {
 	SKB_GSO_UDP = 1 << 16,
 
 	SKB_GSO_UDP_L4 = 1 << 17,
+
+	SKB_GSO_FRAGLIST = 1 << 18,
 };
 
 #if BITS_PER_LONG > 32
@@ -874,6 +877,9 @@ struct sk_buff {
 	__u32			headers_end[0];
 	/* public: */
 
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+
 	/* These elements must be at the end, see alloc_skb() for details.  */
 	sk_buff_data_t		tail;
 	sk_buff_data_t		end;
@@ -3543,6 +3549,8 @@ void skb_scrub_packet(struct sk_buff *skb, bool xnet);
 bool skb_gso_validate_network_len(const struct sk_buff *skb, unsigned int mtu);
 bool skb_gso_validate_mac_len(const struct sk_buff *skb, unsigned int len);
 struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features);
+struct sk_buff *skb_segment_list(struct sk_buff *skb, netdev_features_t features,
+				 unsigned int offset);
 struct sk_buff *skb_vlan_untag(struct sk_buff *skb);
 int skb_ensure_writable(struct sk_buff *skb, int write_len);
 int __skb_vlan_pop(struct sk_buff *skb, u16 *vlan_tci);
diff --git a/include/linux/soc/mediatek/mtk_sip_svc.h b/include/linux/soc/mediatek/mtk_sip_svc.h
new file mode 100644
index 0000000..082398e
--- /dev/null
+++ b/include/linux/soc/mediatek/mtk_sip_svc.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2019 MediaTek Inc.
+ */
+#ifndef __MTK_SIP_SVC_H
+#define __MTK_SIP_SVC_H
+
+/* Error Code */
+#define SIP_SVC_E_SUCCESS               0
+#define SIP_SVC_E_NOT_SUPPORTED         -1
+#define SIP_SVC_E_INVALID_PARAMS        -2
+#define SIP_SVC_E_INVALID_RANGE         -3
+#define SIP_SVC_E_PERMISSION_DENIED     -4
+
+#ifdef CONFIG_ARM64
+#define MTK_SIP_SMC_CONVENTION          ARM_SMCCC_SMC_64
+#else
+#define MTK_SIP_SMC_CONVENTION          ARM_SMCCC_SMC_32
+#endif
+
+#define MTK_SIP_SMC_CMD(fn_id) \
+	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, MTK_SIP_SMC_CONVENTION, \
+			   ARM_SMCCC_OWNER_SIP, fn_id)
+
+#endif
diff --git a/include/linux/soc/qcom/irq.h b/include/linux/soc/qcom/irq.h
new file mode 100644
index 0000000..fcb799c
--- /dev/null
+++ b/include/linux/soc/qcom/irq.h
@@ -0,0 +1,34 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef __QCOM_IRQ_H
+#define __QCOM_IRQ_H
+
+#include <linux/irqdomain.h>
+
+#define GPIO_NO_WAKE_IRQ	~0U
+
+/**
+ * QCOM specific IRQ domain flags that distinguishes the handling of wakeup
+ * capable interrupts by different interrupt controllers.
+ *
+ * IRQ_DOMAIN_FLAG_QCOM_PDC_WAKEUP: Line must be masked at TLMM and the
+ *                                  interrupt configuration is done at PDC
+ * IRQ_DOMAIN_FLAG_QCOM_MPM_WAKEUP: Interrupt configuration is handled at TLMM
+ */
+#define IRQ_DOMAIN_FLAG_QCOM_PDC_WAKEUP		(IRQ_DOMAIN_FLAG_NONCORE << 0)
+#define IRQ_DOMAIN_FLAG_QCOM_MPM_WAKEUP		(IRQ_DOMAIN_FLAG_NONCORE << 1)
+
+/**
+ * irq_domain_qcom_handle_wakeup: Return if the domain handles interrupt
+ *                                configuration
+ * @parent: irq domain
+ *
+ * This QCOM specific irq domain call returns if the interrupt controller
+ * requires the interrupt be masked at the child interrupt controller.
+ */
+static inline bool irq_domain_qcom_handle_wakeup(struct irq_domain *parent)
+{
+	return (parent->flags & IRQ_DOMAIN_FLAG_QCOM_PDC_WAKEUP);
+}
+
+#endif
diff --git a/include/linux/stat.h b/include/linux/stat.h
index 765573d..528c4ba 100644
--- a/include/linux/stat.h
+++ b/include/linux/stat.h
@@ -33,7 +33,8 @@ struct kstat {
 	 STATX_ATTR_IMMUTABLE |				\
 	 STATX_ATTR_APPEND |				\
 	 STATX_ATTR_NODUMP |				\
-	 STATX_ATTR_ENCRYPTED				\
+	 STATX_ATTR_ENCRYPTED |				\
+	 STATX_ATTR_VERITY				\
 	 )/* Attrs corresponding to FS_*_FL flags */
 	u64		ino;
 	dev_t		dev;
diff --git a/include/linux/string.h b/include/linux/string.h
index b226435..32ef8b9 100644
--- a/include/linux/string.h
+++ b/include/linux/string.h
@@ -216,6 +216,8 @@ int bprintf(u32 *bin_buf, size_t size, const char *fmt, ...) __printf(3, 4);
 extern ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
 				       const void *from, size_t available);
 
+int ptr_to_hashval(const void *ptr, unsigned long *hashval_out);
+
 /**
  * strstarts - does @str start with @prefix?
  * @str: string to examine
diff --git a/include/linux/suspend.h b/include/linux/suspend.h
index cd97d2c..58b6662 100644
--- a/include/linux/suspend.h
+++ b/include/linux/suspend.h
@@ -503,6 +503,7 @@ extern bool pm_get_wakeup_count(unsigned int *count, bool block);
 extern bool pm_save_wakeup_count(unsigned int count);
 extern void pm_wakep_autosleep_enabled(bool set);
 extern void pm_print_active_wakeup_sources(void);
+extern void pm_get_active_wakeup_sources(char *pending_sources, size_t max);
 
 extern void lock_system_sleep(void);
 extern void unlock_system_sleep(void);
diff --git a/include/linux/sys_soc.h b/include/linux/sys_soc.h
index 48ceea8..d9b3cf0f 100644
--- a/include/linux/sys_soc.h
+++ b/include/linux/sys_soc.h
@@ -15,6 +15,7 @@ struct soc_device_attribute {
 	const char *serial_number;
 	const char *soc_id;
 	const void *data;
+	const struct attribute_group *custom_attr_group;
 };
 
 /**
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
index f7c561c..d2bf439 100644
--- a/include/linux/syscalls.h
+++ b/include/linux/syscalls.h
@@ -874,6 +874,8 @@ asmlinkage long sys_munlockall(void);
 asmlinkage long sys_mincore(unsigned long start, size_t len,
 				unsigned char __user * vec);
 asmlinkage long sys_madvise(unsigned long start, size_t len, int behavior);
+asmlinkage long sys_process_madvise(int pidfd, const struct iovec __user *vec,
+				size_t vlen, int behavior, unsigned int flags);
 asmlinkage long sys_remap_file_pages(unsigned long start, unsigned long size,
 			unsigned long prot, unsigned long pgoff,
 			unsigned long flags);
diff --git a/include/linux/task_io_accounting.h b/include/linux/task_io_accounting.h
index 6f6acce..bb26108 100644
--- a/include/linux/task_io_accounting.h
+++ b/include/linux/task_io_accounting.h
@@ -19,6 +19,8 @@ struct task_io_accounting {
 	u64 syscr;
 	/* # of write syscalls */
 	u64 syscw;
+	/* # of fsync syscalls */
+	u64 syscfs;
 #endif /* CONFIG_TASK_XACCT */
 
 #ifdef CONFIG_TASK_IO_ACCOUNTING
diff --git a/include/linux/task_io_accounting_ops.h b/include/linux/task_io_accounting_ops.h
index bb5498b..733ab62 100644
--- a/include/linux/task_io_accounting_ops.h
+++ b/include/linux/task_io_accounting_ops.h
@@ -97,6 +97,7 @@ static inline void task_chr_io_accounting_add(struct task_io_accounting *dst,
 	dst->wchar += src->wchar;
 	dst->syscr += src->syscr;
 	dst->syscw += src->syscw;
+	dst->syscfs += src->syscfs;
 }
 #else
 static inline void task_chr_io_accounting_add(struct task_io_accounting *dst,
diff --git a/include/linux/time.h b/include/linux/time.h
index 5f3e499..47ed31f 100644
--- a/include/linux/time.h
+++ b/include/linux/time.h
@@ -109,4 +109,7 @@ static inline bool itimerspec64_valid(const struct itimerspec64 *its)
  * Equivalent to !(time_before32(@t, @l) || time_after32(@t, @h)).
  */
 #define time_between32(t, l, h) ((u32)(h) - (u32)(l) >= (u32)(t) - (u32)(l))
+
+# include <vdso/time.h>
+
 #endif
diff --git a/include/linux/time32.h b/include/linux/time32.h
index 0a1f302a1..a6a4711 100644
--- a/include/linux/time32.h
+++ b/include/linux/time32.h
@@ -12,20 +12,10 @@
 #include <linux/time64.h>
 #include <linux/timex.h>
 
+#include <vdso/time32.h>
+
 #define TIME_T_MAX	(time_t)((1UL << ((sizeof(time_t) << 3) - 1)) - 1)
 
-typedef s32		old_time32_t;
-
-struct old_timespec32 {
-	old_time32_t	tv_sec;
-	s32		tv_nsec;
-};
-
-struct old_timeval32 {
-	old_time32_t	tv_sec;
-	s32		tv_usec;
-};
-
 struct old_itimerspec32 {
 	struct old_timespec32 it_interval;
 	struct old_timespec32 it_value;
diff --git a/include/linux/time64.h b/include/linux/time64.h
index 5eab3f2..5117cb5 100644
--- a/include/linux/time64.h
+++ b/include/linux/time64.h
@@ -3,6 +3,7 @@
 #define _LINUX_TIME64_H
 
 #include <linux/math64.h>
+#include <vdso/time64.h>
 
 typedef __s64 time64_t;
 typedef __u64 timeu64_t;
@@ -19,15 +20,6 @@ struct itimerspec64 {
 	struct timespec64 it_value;
 };
 
-/* Parameters used to convert the timespec values: */
-#define MSEC_PER_SEC	1000L
-#define USEC_PER_MSEC	1000L
-#define NSEC_PER_USEC	1000L
-#define NSEC_PER_MSEC	1000000L
-#define USEC_PER_SEC	1000000L
-#define NSEC_PER_SEC	1000000000L
-#define FSEC_PER_SEC	1000000000000000LL
-
 /* Located here for timespec[64]_valid_strict */
 #define TIME64_MAX			((s64)~((u64)1 << 63))
 #define TIME64_MIN			(-TIME64_MAX - 1)
diff --git a/include/linux/timer.h b/include/linux/timer.h
index 1e6650e..4184069 100644
--- a/include/linux/timer.h
+++ b/include/linux/timer.h
@@ -7,6 +7,7 @@
 #include <linux/stddef.h>
 #include <linux/debugobjects.h>
 #include <linux/stringify.h>
+#include <linux/android_kabi.h>
 
 struct timer_list {
 	/*
@@ -21,6 +22,9 @@ struct timer_list {
 #ifdef CONFIG_LOCKDEP
 	struct lockdep_map	lockdep_map;
 #endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 #ifdef CONFIG_LOCKDEP
diff --git a/include/linux/unicode.h b/include/linux/unicode.h
index 990aa97..74484d4 100644
--- a/include/linux/unicode.h
+++ b/include/linux/unicode.h
@@ -27,6 +27,9 @@ int utf8_normalize(const struct unicode_map *um, const struct qstr *str,
 int utf8_casefold(const struct unicode_map *um, const struct qstr *str,
 		  unsigned char *dest, size_t dlen);
 
+int utf8_casefold_hash(const struct unicode_map *um, const void *salt,
+		       struct qstr *str);
+
 struct unicode_map *utf8_load(const char *version);
 void utf8_unload(struct unicode_map *um);
 
diff --git a/include/linux/usb.h b/include/linux/usb.h
index e656e7b..a39eb4f 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -22,6 +22,7 @@
 #include <linux/sched.h>	/* for current && schedule_timeout */
 #include <linux/mutex.h>	/* for struct mutex */
 #include <linux/pm_runtime.h>	/* for runtime PM */
+#include <linux/android_kabi.h>
 
 struct usb_device;
 struct usb_driver;
@@ -257,6 +258,11 @@ struct usb_interface {
 	struct device dev;		/* interface specific device info */
 	struct device *usb_dev;
 	struct work_struct reset_ws;	/* for resets in atomic context */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 #define	to_usb_interface(d) container_of(d, struct usb_interface, dev)
 
@@ -402,6 +408,11 @@ struct usb_host_bos {
 	struct usb_ssp_cap_descriptor	*ssp_cap;
 	struct usb_ss_container_id_descriptor	*ss_id;
 	struct usb_ptm_cap_descriptor	*ptm_cap;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 int __usb_get_extra_descriptor(char *buffer, unsigned size,
@@ -465,6 +476,11 @@ struct usb_bus {
 	struct mon_bus *mon_bus;	/* non-null when associated */
 	int monitored;			/* non-zero when monitored */
 #endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct usb_dev_state;
@@ -708,6 +724,11 @@ struct usb_device {
 	unsigned lpm_disable_count;
 
 	u16 hub_delay;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 #define	to_usb_device(d) container_of(d, struct usb_device, dev)
 
@@ -1207,6 +1228,11 @@ struct usb_driver {
 	unsigned int supports_autosuspend:1;
 	unsigned int disable_hub_initiated_lpm:1;
 	unsigned int soft_unbind:1;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 #define	to_usb_driver(d) container_of(d, struct usb_driver, drvwrap.driver)
 
@@ -1584,6 +1610,10 @@ struct urb {
 	usb_complete_t complete;	/* (in) completion routine */
 	struct usb_iso_packet_descriptor iso_frame_desc[0];
 					/* (in) ISO ONLY */
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /* ----------------------------------------------------------------------- */
diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h
index 2040696..d667100 100644
--- a/include/linux/usb/composite.h
+++ b/include/linux/usb/composite.h
@@ -590,6 +590,7 @@ struct usb_function_instance {
 	struct config_group group;
 	struct list_head cfs_list;
 	struct usb_function_driver *fd;
+	struct usb_function *f;
 	int (*set_inst_name)(struct usb_function_instance *inst,
 			      const char *name);
 	void (*free_func_inst)(struct usb_function_instance *inst);
diff --git a/include/linux/usb/f_accessory.h b/include/linux/usb/f_accessory.h
new file mode 100644
index 0000000..ebe3c4d
--- /dev/null
+++ b/include/linux/usb/f_accessory.h
@@ -0,0 +1,23 @@
+/*
+ * Gadget Function Driver for Android USB accessories
+ *
+ * Copyright (C) 2011 Google, Inc.
+ * Author: Mike Lockwood <lockwood@android.com>
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef __LINUX_USB_F_ACCESSORY_H
+#define __LINUX_USB_F_ACCESSORY_H
+
+#include <uapi/linux/usb/f_accessory.h>
+
+#endif /* __LINUX_USB_F_ACCESSORY_H */
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index 67f5adc..7b9b3b2 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -25,6 +25,7 @@
 #include <linux/types.h>
 #include <linux/workqueue.h>
 #include <linux/usb/ch9.h>
+#include <linux/android_kabi.h>
 
 #define UDC_TRACE_STR_MAX	512
 
@@ -429,6 +430,11 @@ struct usb_gadget {
 	unsigned			connected:1;
 	unsigned			lpm_capable:1;
 	int				irq;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 #define work_to_gadget(w)	(container_of((w), struct usb_gadget, work))
 
diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h
index 712b2a6..c5b171d 100644
--- a/include/linux/usb/hcd.h
+++ b/include/linux/usb/hcd.h
@@ -25,6 +25,7 @@
 #include <linux/rwsem.h>
 #include <linux/interrupt.h>
 #include <linux/idr.h>
+#include <linux/android_kabi.h>
 
 #define MAX_TOPO_LEVEL		6
 
@@ -225,6 +226,11 @@ struct usb_hcd {
 	 * (ohci 32, uhci 1024, ehci 256/512/1024).
 	 */
 
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+
 	/* The HC driver's private data is stored at the end of
 	 * this structure.
 	 */
@@ -410,6 +416,10 @@ struct hc_driver {
 	/* Call for power on/off the port if necessary */
 	int	(*port_power)(struct usb_hcd *hcd, int portnum, bool enable);
 
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 static inline int hcd_giveback_urb_in_bh(struct usb_hcd *hcd)
@@ -560,6 +570,11 @@ struct usb_tt {
 	spinlock_t		lock;
 	struct list_head	clear_list;	/* of usb_tt_clear */
 	struct work_struct	clear_work;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct usb_tt_clear {
diff --git a/include/linux/usb/typec.h b/include/linux/usb/typec.h
index 7df4eca..8947980 100644
--- a/include/linux/usb/typec.h
+++ b/include/linux/usb/typec.h
@@ -168,6 +168,23 @@ struct typec_partner_desc {
 	struct usb_pd_identity	*identity;
 };
 
+/**
+ * struct typec_operations - USB Type-C Port Operations
+ * @try_role: Set data role preference for DRP port
+ * @dr_set: Set Data Role
+ * @pr_set: Set Power Role
+ * @vconn_set: Source VCONN
+ * @port_type_set: Set port type
+ */
+struct typec_operations {
+	int (*try_role)(struct typec_port *port, int role);
+	int (*dr_set)(struct typec_port *port, enum typec_data_role role);
+	int (*pr_set)(struct typec_port *port, enum typec_role role);
+	int (*vconn_set)(struct typec_port *port, enum typec_role role);
+	int (*port_type_set)(struct typec_port *port,
+			     enum typec_port_type type);
+};
+
 /*
  * struct typec_capability - USB Type-C Port Capabilities
  * @type: Supported power role of the port
@@ -179,11 +196,8 @@ struct typec_partner_desc {
  * @sw: Cable plug orientation switch
  * @mux: Multiplexer switch for Alternate/Accessory Modes
  * @fwnode: Optional fwnode of the port
- * @try_role: Set data role preference for DRP port
- * @dr_set: Set Data Role
- * @pr_set: Set Power Role
- * @vconn_set: Set VCONN Role
- * @port_type_set: Set port type
+ * @driver_data: Private pointer for driver specific info
+ * @ops: Port operations vector
  *
  * Static capabilities of a single USB Type-C port.
  */
@@ -198,18 +212,9 @@ struct typec_capability {
 	struct typec_switch	*sw;
 	struct typec_mux	*mux;
 	struct fwnode_handle	*fwnode;
+	void			*driver_data;
 
-	int		(*try_role)(const struct typec_capability *,
-				    int role);
-
-	int		(*dr_set)(const struct typec_capability *,
-				  enum typec_data_role);
-	int		(*pr_set)(const struct typec_capability *,
-				  enum typec_role);
-	int		(*vconn_set)(const struct typec_capability *,
-				     enum typec_role);
-	int		(*port_type_set)(const struct typec_capability *,
-					 enum typec_port_type);
+	const struct typec_operations	*ops;
 };
 
 /* Specific to try_role(). Indicates the user want's to clear the preference. */
@@ -241,6 +246,8 @@ int typec_set_orientation(struct typec_port *port,
 enum typec_orientation typec_get_orientation(struct typec_port *port);
 int typec_set_mode(struct typec_port *port, int mode);
 
+void *typec_get_drvdata(struct typec_port *port);
+
 int typec_find_port_power_role(const char *name);
 int typec_find_power_role(const char *name);
 int typec_find_port_data_role(const char *name);
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h
index d8860f2..e39a261 100644
--- a/include/linux/usb/usbnet.h
+++ b/include/linux/usb/usbnet.h
@@ -23,6 +23,8 @@
 #ifndef	__LINUX_USB_USBNET_H
 #define	__LINUX_USB_USBNET_H
 
+#include <linux/android_kabi.h>
+
 /* interface from usbnet core to each USB networking link we handle */
 struct usbnet {
 	/* housekeeping */
@@ -83,6 +85,11 @@ struct usbnet {
 #		define EVENT_LINK_CHANGE	11
 #		define EVENT_SET_RX_MODE	12
 #		define EVENT_NO_IP_ALIGN	13
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 static inline struct usb_driver *driver_of(struct usb_interface *intf)
@@ -172,6 +179,9 @@ struct driver_info {
 	int		out;		/* tx endpoint */
 
 	unsigned long	data;		/* Misc driver specific data */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /* Minidrivers are just drivers using the "usbnet" core as a powerful
diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h
index fb9f4f7..a8cb8b1 100644
--- a/include/linux/user_namespace.h
+++ b/include/linux/user_namespace.h
@@ -10,6 +10,7 @@
 #include <linux/rwsem.h>
 #include <linux/sysctl.h>
 #include <linux/err.h>
+#include <linux/android_kabi.h>
 
 #define UID_GID_MAP_MAX_BASE_EXTENTS 5
 #define UID_GID_MAP_MAX_EXTENTS 340
@@ -86,6 +87,9 @@ struct user_namespace {
 #endif
 	struct ucounts		*ucounts;
 	int ucount_max[UCOUNT_COUNTS];
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 } __randomize_layout;
 
 struct ucounts {
diff --git a/include/linux/virtio_vsock.h b/include/linux/virtio_vsock.h
index b139f760..71c81e0 100644
--- a/include/linux/virtio_vsock.h
+++ b/include/linux/virtio_vsock.h
@@ -7,9 +7,6 @@
 #include <net/sock.h>
 #include <net/af_vsock.h>
 
-#define VIRTIO_VSOCK_DEFAULT_MIN_BUF_SIZE	128
-#define VIRTIO_VSOCK_DEFAULT_BUF_SIZE		(1024 * 256)
-#define VIRTIO_VSOCK_DEFAULT_MAX_BUF_SIZE	(1024 * 256)
 #define VIRTIO_VSOCK_DEFAULT_RX_BUF_SIZE	(1024 * 4)
 #define VIRTIO_VSOCK_MAX_BUF_SIZE		0xFFFFFFFFUL
 #define VIRTIO_VSOCK_MAX_PKT_BUF_SIZE		(1024 * 64)
@@ -25,11 +22,6 @@ enum {
 struct virtio_vsock_sock {
 	struct vsock_sock *vsk;
 
-	/* Protected by lock_sock(sk_vsock(trans->vsk)) */
-	u32 buf_size;
-	u32 buf_size_min;
-	u32 buf_size_max;
-
 	spinlock_t tx_lock;
 	spinlock_t rx_lock;
 
@@ -92,12 +84,6 @@ s64 virtio_transport_stream_has_space(struct vsock_sock *vsk);
 
 int virtio_transport_do_socket_init(struct vsock_sock *vsk,
 				 struct vsock_sock *psk);
-u64 virtio_transport_get_buffer_size(struct vsock_sock *vsk);
-u64 virtio_transport_get_min_buffer_size(struct vsock_sock *vsk);
-u64 virtio_transport_get_max_buffer_size(struct vsock_sock *vsk);
-void virtio_transport_set_buffer_size(struct vsock_sock *vsk, u64 val);
-void virtio_transport_set_min_buffer_size(struct vsock_sock *vsk, u64 val);
-void virtio_transport_set_max_buffer_size(struct vsock_sock *vs, u64 val);
 int
 virtio_transport_notify_poll_in(struct vsock_sock *vsk,
 				size_t target,
@@ -124,6 +110,7 @@ int virtio_transport_notify_send_pre_enqueue(struct vsock_sock *vsk,
 	struct vsock_transport_send_notify_data *data);
 int virtio_transport_notify_send_post_enqueue(struct vsock_sock *vsk,
 	ssize_t written, struct vsock_transport_send_notify_data *data);
+void virtio_transport_notify_buffer_size(struct vsock_sock *vsk, u64 *val);
 
 u64 virtio_transport_stream_rcvhiwat(struct vsock_sock *vsk);
 bool virtio_transport_stream_is_active(struct vsock_sock *vsk);
diff --git a/include/linux/vm_sockets.h b/include/linux/vm_sockets.h
deleted file mode 100644
index 33f1a2e..0000000
--- a/include/linux/vm_sockets.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * VMware vSockets Driver
- *
- * Copyright (C) 2007-2013 VMware, Inc. All rights reserved.
- */
-
-#ifndef _VM_SOCKETS_H
-#define _VM_SOCKETS_H
-
-#include <uapi/linux/vm_sockets.h>
-
-int vm_sockets_get_local_cid(void);
-
-#endif /* _VM_SOCKETS_H */
diff --git a/include/linux/vmw_vmci_api.h b/include/linux/vmw_vmci_api.h
index acd9faf..f2890734 100644
--- a/include/linux/vmw_vmci_api.h
+++ b/include/linux/vmw_vmci_api.h
@@ -19,6 +19,7 @@
 struct msghdr;
 typedef void (vmci_device_shutdown_fn) (void *device_registration,
 					void *user_data);
+typedef void (*vmci_vsock_cb) (bool is_host);
 
 int vmci_datagram_create_handle(u32 resource_id, u32 flags,
 				vmci_datagram_recv_cb recv_cb,
@@ -37,6 +38,7 @@ int vmci_doorbell_destroy(struct vmci_handle handle);
 int vmci_doorbell_notify(struct vmci_handle handle, u32 priv_flags);
 u32 vmci_get_context_id(void);
 bool vmci_is_context_owner(u32 context_id, kuid_t uid);
+int vmci_register_vsock_callback(vmci_vsock_cb callback);
 
 int vmci_event_subscribe(u32 event,
 			 vmci_event_cb callback, void *callback_data,
diff --git a/include/linux/wakeup_reason.h b/include/linux/wakeup_reason.h
new file mode 100644
index 0000000..54f5caa
--- /dev/null
+++ b/include/linux/wakeup_reason.h
@@ -0,0 +1,37 @@
+/*
+ * include/linux/wakeup_reason.h
+ *
+ * Logs the reason which caused the kernel to resume
+ * from the suspend mode.
+ *
+ * Copyright (C) 2014 Google, Inc.
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _LINUX_WAKEUP_REASON_H
+#define _LINUX_WAKEUP_REASON_H
+
+#define MAX_SUSPEND_ABORT_LEN 256
+
+#ifdef CONFIG_SUSPEND
+void log_irq_wakeup_reason(int irq);
+void log_threaded_irq_wakeup_reason(int irq, int parent_irq);
+void log_suspend_abort_reason(const char *fmt, ...);
+void log_abnormal_wakeup_reason(const char *fmt, ...);
+void clear_wakeup_reasons(void);
+#else
+static inline void log_irq_wakeup_reason(int irq) { }
+static inline void log_threaded_irq_wakeup_reason(int irq, int parent_irq) { }
+static inline void log_suspend_abort_reason(const char *fmt, ...) { }
+static inline void log_abnormal_wakeup_reason(const char *fmt, ...) { }
+static inline void clear_wakeup_reasons(void) { }
+#endif
+
+#endif /* _LINUX_WAKEUP_REASON_H */
diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h
index 4261d1c6..71726c9 100644
--- a/include/linux/workqueue.h
+++ b/include/linux/workqueue.h
@@ -14,6 +14,7 @@
 #include <linux/atomic.h>
 #include <linux/cpumask.h>
 #include <linux/rcupdate.h>
+#include <linux/android_kabi.h>
 
 struct workqueue_struct;
 
@@ -106,6 +107,8 @@ struct work_struct {
 #ifdef CONFIG_LOCKDEP
 	struct lockdep_map lockdep_map;
 #endif
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 #define WORK_DATA_INIT()	ATOMIC_LONG_INIT((unsigned long)WORK_STRUCT_NO_POOL)
@@ -119,6 +122,9 @@ struct delayed_work {
 	/* target workqueue and CPU ->timer uses to queue ->work */
 	struct workqueue_struct *wq;
 	int cpu;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 struct rcu_work {
diff --git a/include/linux/xattr.h b/include/linux/xattr.h
index 3a71ad7..0d970fd 100644
--- a/include/linux/xattr.h
+++ b/include/linux/xattr.h
@@ -30,10 +30,10 @@ struct xattr_handler {
 	const char *prefix;
 	int flags;      /* fs private flags */
 	bool (*list)(struct dentry *dentry);
-	int (*get)(const struct xattr_handler *, struct dentry *dentry,
+	int (*get)(const struct xattr_handler *handler, struct dentry *dentry,
 		   struct inode *inode, const char *name, void *buffer,
-		   size_t size);
-	int (*set)(const struct xattr_handler *, struct dentry *dentry,
+		   size_t size, int flags);
+	int (*set)(const struct xattr_handler *handler, struct dentry *dentry,
 		   struct inode *inode, const char *name, const void *buffer,
 		   size_t size, int flags);
 };
@@ -46,7 +46,8 @@ struct xattr {
 	size_t value_len;
 };
 
-ssize_t __vfs_getxattr(struct dentry *, struct inode *, const char *, void *, size_t);
+ssize_t __vfs_getxattr(struct dentry *dentry, struct inode *inode,
+		       const char *name, void *buffer, size_t size, int flags);
 ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t);
 ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size);
 int __vfs_setxattr(struct dentry *, struct inode *, const char *, const void *, size_t, int);
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
new file mode 100644
index 0000000..1009cf0
--- /dev/null
+++ b/include/media/hevc-ctrls.h
@@ -0,0 +1,212 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * These are the HEVC state controls for use with stateless HEVC
+ * codec drivers.
+ *
+ * It turns out that these structs are not stable yet and will undergo
+ * more changes. So keep them private until they are stable and ready to
+ * become part of the official public API.
+ */
+
+#ifndef _HEVC_CTRLS_H_
+#define _HEVC_CTRLS_H_
+
+#include <linux/videodev2.h>
+
+/* The pixel format isn't stable at the moment and will likely be renamed. */
+#define V4L2_PIX_FMT_HEVC_SLICE v4l2_fourcc('S', '2', '6', '5') /* HEVC parsed slices */
+
+#define V4L2_CID_MPEG_VIDEO_HEVC_SPS		(V4L2_CID_MPEG_BASE + 1008)
+#define V4L2_CID_MPEG_VIDEO_HEVC_PPS		(V4L2_CID_MPEG_BASE + 1009)
+#define V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS	(V4L2_CID_MPEG_BASE + 1010)
+#define V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE	(V4L2_CID_MPEG_BASE + 1015)
+#define V4L2_CID_MPEG_VIDEO_HEVC_START_CODE	(V4L2_CID_MPEG_BASE + 1016)
+
+/* enum v4l2_ctrl_type type values */
+#define V4L2_CTRL_TYPE_HEVC_SPS 0x0120
+#define V4L2_CTRL_TYPE_HEVC_PPS 0x0121
+#define V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS 0x0122
+
+enum v4l2_mpeg_video_hevc_decode_mode {
+	V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED,
+	V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
+};
+
+enum v4l2_mpeg_video_hevc_start_code {
+	V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE,
+	V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
+};
+
+#define V4L2_HEVC_SLICE_TYPE_B	0
+#define V4L2_HEVC_SLICE_TYPE_P	1
+#define V4L2_HEVC_SLICE_TYPE_I	2
+
+#define V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE		(1ULL << 0)
+#define V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED			(1ULL << 1)
+#define V4L2_HEVC_SPS_FLAG_AMP_ENABLED				(1ULL << 2)
+#define V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET		(1ULL << 3)
+#define V4L2_HEVC_SPS_FLAG_PCM_ENABLED				(1ULL << 4)
+#define V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED		(1ULL << 5)
+#define V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT		(1ULL << 6)
+#define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED		(1ULL << 7)
+#define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED	(1ULL << 8)
+
+/* The controls are not stable at the moment and will likely be reworked. */
+struct v4l2_ctrl_hevc_sps {
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
+	__u16	pic_width_in_luma_samples;
+	__u16	pic_height_in_luma_samples;
+	__u8	bit_depth_luma_minus8;
+	__u8	bit_depth_chroma_minus8;
+	__u8	log2_max_pic_order_cnt_lsb_minus4;
+	__u8	sps_max_dec_pic_buffering_minus1;
+	__u8	sps_max_num_reorder_pics;
+	__u8	sps_max_latency_increase_plus1;
+	__u8	log2_min_luma_coding_block_size_minus3;
+	__u8	log2_diff_max_min_luma_coding_block_size;
+	__u8	log2_min_luma_transform_block_size_minus2;
+	__u8	log2_diff_max_min_luma_transform_block_size;
+	__u8	max_transform_hierarchy_depth_inter;
+	__u8	max_transform_hierarchy_depth_intra;
+	__u8	pcm_sample_bit_depth_luma_minus1;
+	__u8	pcm_sample_bit_depth_chroma_minus1;
+	__u8	log2_min_pcm_luma_coding_block_size_minus3;
+	__u8	log2_diff_max_min_pcm_luma_coding_block_size;
+	__u8	num_short_term_ref_pic_sets;
+	__u8	num_long_term_ref_pics_sps;
+	__u8	chroma_format_idc;
+
+	__u8	padding;
+
+	__u64	flags;
+};
+
+#define V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT		(1ULL << 0)
+#define V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT			(1ULL << 1)
+#define V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED		(1ULL << 2)
+#define V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT			(1ULL << 3)
+#define V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED		(1ULL << 4)
+#define V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED		(1ULL << 5)
+#define V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED			(1ULL << 6)
+#define V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT	(1ULL << 7)
+#define V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED			(1ULL << 8)
+#define V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED			(1ULL << 9)
+#define V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED		(1ULL << 10)
+#define V4L2_HEVC_PPS_FLAG_TILES_ENABLED			(1ULL << 11)
+#define V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED		(1ULL << 12)
+#define V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED	(1ULL << 13)
+#define V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 14)
+#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED	(1ULL << 15)
+#define V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER	(1ULL << 16)
+#define V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT		(1ULL << 17)
+#define V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT (1ULL << 18)
+
+struct v4l2_ctrl_hevc_pps {
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
+	__u8	num_extra_slice_header_bits;
+	__s8	init_qp_minus26;
+	__u8	diff_cu_qp_delta_depth;
+	__s8	pps_cb_qp_offset;
+	__s8	pps_cr_qp_offset;
+	__u8	num_tile_columns_minus1;
+	__u8	num_tile_rows_minus1;
+	__u8	column_width_minus1[20];
+	__u8	row_height_minus1[22];
+	__s8	pps_beta_offset_div2;
+	__s8	pps_tc_offset_div2;
+	__u8	log2_parallel_merge_level_minus2;
+
+	__u8	padding[4];
+	__u64	flags;
+};
+
+#define V4L2_HEVC_DPB_ENTRY_RPS_ST_CURR_BEFORE	0x01
+#define V4L2_HEVC_DPB_ENTRY_RPS_ST_CURR_AFTER	0x02
+#define V4L2_HEVC_DPB_ENTRY_RPS_LT_CURR		0x03
+
+#define V4L2_HEVC_DPB_ENTRIES_NUM_MAX		16
+
+struct v4l2_hevc_dpb_entry {
+	__u64	timestamp;
+	__u8	rps;
+	__u8	field_pic;
+	__u16	pic_order_cnt[2];
+	__u8	padding[2];
+};
+
+struct v4l2_hevc_pred_weight_table {
+	__s8	delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	__s8	luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	__s8	delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+	__s8	chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+
+	__s8	delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	__s8	luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	__s8	delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+	__s8	chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+
+	__u8	padding[6];
+
+	__u8	luma_log2_weight_denom;
+	__s8	delta_chroma_log2_weight_denom;
+};
+
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA		(1ULL << 0)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA		(1ULL << 1)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED	(1ULL << 2)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO			(1ULL << 3)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT			(1ULL << 4)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0		(1ULL << 5)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV		(1ULL << 6)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED (1ULL << 7)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8)
+
+struct v4l2_ctrl_hevc_slice_params {
+	__u32	bit_size;
+	__u32	data_bit_offset;
+
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
+	__u8	nal_unit_type;
+	__u8	nuh_temporal_id_plus1;
+
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
+	__u8	slice_type;
+	__u8	colour_plane_id;
+	__u16	slice_pic_order_cnt;
+	__u8	num_ref_idx_l0_active_minus1;
+	__u8	num_ref_idx_l1_active_minus1;
+	__u8	collocated_ref_idx;
+	__u8	five_minus_max_num_merge_cand;
+	__s8	slice_qp_delta;
+	__s8	slice_cb_qp_offset;
+	__s8	slice_cr_qp_offset;
+	__s8	slice_act_y_qp_offset;
+	__s8	slice_act_cb_qp_offset;
+	__s8	slice_act_cr_qp_offset;
+	__s8	slice_beta_offset_div2;
+	__s8	slice_tc_offset_div2;
+
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture timing SEI message */
+	__u8	pic_struct;
+
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
+	__u8	num_active_dpb_entries;
+	__u8	ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	__u8	ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+
+	__u8	num_rps_poc_st_curr_before;
+	__u8	num_rps_poc_st_curr_after;
+	__u8	num_rps_poc_lt_curr;
+
+	__u8	padding;
+
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
+	struct v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
+	struct v4l2_hevc_pred_weight_table pred_weight_table;
+
+	__u64	flags;
+};
+
+#endif
diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h
index c070d8a..d8c29e0 100644
--- a/include/media/v4l2-common.h
+++ b/include/media/v4l2-common.h
@@ -457,8 +457,24 @@ int v4l2_s_parm_cap(struct video_device *vdev,
 /* Pixel format and FourCC helpers */
 
 /**
+ * enum v4l2_pixel_encoding - specifies the pixel encoding value
+ *
+ * @V4L2_PIXEL_ENC_UNKNOWN:	Pixel encoding is unknown/un-initialized
+ * @V4L2_PIXEL_ENC_YUV:		Pixel encoding is YUV
+ * @V4L2_PIXEL_ENC_RGB:		Pixel encoding is RGB
+ * @V4L2_PIXEL_ENC_BAYER:	Pixel encoding is Bayer
+ */
+enum v4l2_pixel_encoding {
+	V4L2_PIXEL_ENC_UNKNOWN = 0,
+	V4L2_PIXEL_ENC_YUV = 1,
+	V4L2_PIXEL_ENC_RGB = 2,
+	V4L2_PIXEL_ENC_BAYER = 3,
+};
+
+/**
  * struct v4l2_format_info - information about a V4L2 format
  * @format: 4CC format identifier (V4L2_PIX_FMT_*)
+ * @pixel_enc: Pixel encoding (see enum v4l2_pixel_encoding above)
  * @mem_planes: Number of memory planes, which includes the alpha plane (1 to 4).
  * @comp_planes: Number of component planes, which includes the alpha plane (1 to 4).
  * @bpp: Array of per-plane bytes per pixel
@@ -469,6 +485,7 @@ int v4l2_s_parm_cap(struct video_device *vdev,
  */
 struct v4l2_format_info {
 	u32 format;
+	u8 pixel_enc;
 	u8 mem_planes;
 	u8 comp_planes;
 	u8 bpp[4];
@@ -478,8 +495,22 @@ struct v4l2_format_info {
 	u8 block_h[4];
 };
 
-const struct v4l2_format_info *v4l2_format_info(u32 format);
+static inline bool v4l2_is_format_rgb(const struct v4l2_format_info *f)
+{
+	return f && f->pixel_enc == V4L2_PIXEL_ENC_RGB;
+}
 
+static inline bool v4l2_is_format_yuv(const struct v4l2_format_info *f)
+{
+	return f && f->pixel_enc == V4L2_PIXEL_ENC_YUV;
+}
+
+static inline bool v4l2_is_format_bayer(const struct v4l2_format_info *f)
+{
+	return f && f->pixel_enc == V4L2_PIXEL_ENC_BAYER;
+}
+
+const struct v4l2_format_info *v4l2_format_info(u32 format);
 void v4l2_apply_frmsize_constraints(u32 *width, u32 *height,
 				    const struct v4l2_frmsize_stepwise *frmsize);
 int v4l2_fill_pixfmt(struct v4l2_pix_format *pixfmt, u32 pixelformat,
diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
index 570ff4b..59fb0e3 100644
--- a/include/media/v4l2-ctrls.h
+++ b/include/media/v4l2-ctrls.h
@@ -21,6 +21,7 @@
 #include <media/fwht-ctrls.h>
 #include <media/h264-ctrls.h>
 #include <media/vp8-ctrls.h>
+#include <media/hevc-ctrls.h>
 
 /* forward references */
 struct file;
@@ -50,7 +51,12 @@ struct poll_table_struct;
  * @p_h264_slice_params:	Pointer to a struct v4l2_ctrl_h264_slice_params.
  * @p_h264_decode_params:	Pointer to a struct v4l2_ctrl_h264_decode_params.
  * @p_vp8_frame_header:		Pointer to a VP8 frame header structure.
+ * @p_hevc_sps:			Pointer to an HEVC sequence parameter set structure.
+ * @p_hevc_pps:			Pointer to an HEVC picture parameter set structure.
+ * @p_hevc_slice_params:	Pointer to an HEVC slice parameters structure.
+ * @p_area:			Pointer to an area.
  * @p:				Pointer to a compound value.
+ * @p_const:			Pointer to a constant compound value.
  */
 union v4l2_ctrl_ptr {
 	s32 *p_s32;
@@ -68,7 +74,12 @@ union v4l2_ctrl_ptr {
 	struct v4l2_ctrl_h264_slice_params *p_h264_slice_params;
 	struct v4l2_ctrl_h264_decode_params *p_h264_decode_params;
 	struct v4l2_ctrl_vp8_frame_header *p_vp8_frame_header;
+	struct v4l2_ctrl_hevc_sps *p_hevc_sps;
+	struct v4l2_ctrl_hevc_pps *p_hevc_pps;
+	struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params;
+	struct v4l2_area *p_area;
 	void *p;
+	const void *p_const;
 };
 
 /**
@@ -200,6 +211,9 @@ typedef void (*v4l2_ctrl_notify_fnc)(struct v4l2_ctrl *ctrl, void *priv);
  *		not freed when the control is deleted. Should this be needed
  *		then a new internal bitfield can be added to tell the framework
  *		to free this pointer.
+ * @p_def:	The control's default value represented via a union which
+ *		provides a standard way of accessing control types
+ *		through a pointer (for compound controls only).
  * @p_cur:	The control's current value represented via a union which
  *		provides a standard way of accessing control types
  *		through a pointer.
@@ -254,6 +268,7 @@ struct v4l2_ctrl {
 		s32 val;
 	} cur;
 
+	union v4l2_ctrl_ptr p_def;
 	union v4l2_ctrl_ptr p_new;
 	union v4l2_ctrl_ptr p_cur;
 };
@@ -357,6 +372,7 @@ struct v4l2_ctrl_handler {
  * @max:	The control's maximum value.
  * @step:	The control's step value for non-menu controls.
  * @def:	The control's default value.
+ * @p_def:	The control's default value for compound controls.
  * @dims:	The size of each dimension.
  * @elem_size:	The size in bytes of the control.
  * @flags:	The control's flags.
@@ -385,6 +401,7 @@ struct v4l2_ctrl_config {
 	s64 max;
 	u64 step;
 	s64 def;
+	union v4l2_ctrl_ptr p_def;
 	u32 dims[V4L2_CTRL_MAX_DIMS];
 	u32 elem_size;
 	u32 flags;
@@ -647,6 +664,24 @@ struct v4l2_ctrl *v4l2_ctrl_new_std_menu_items(struct v4l2_ctrl_handler *hdl,
 					       const char * const *qmenu);
 
 /**
+ * v4l2_ctrl_new_std_compound() - Allocate and initialize a new standard V4L2
+ *      compound control.
+ *
+ * @hdl:       The control handler.
+ * @ops:       The control ops.
+ * @id:        The control ID.
+ * @p_def:     The control's default value.
+ *
+ * Sames as v4l2_ctrl_new_std(), but with support to compound controls, thanks
+ * to the @p_def field.
+ *
+ */
+struct v4l2_ctrl *v4l2_ctrl_new_std_compound(struct v4l2_ctrl_handler *hdl,
+					     const struct v4l2_ctrl_ops *ops,
+					     u32 id,
+					     const union v4l2_ctrl_ptr p_def);
+
+/**
  * v4l2_ctrl_new_int_menu() - Create a new standard V4L2 integer menu control.
  *
  * @hdl:	The control handler.
@@ -1065,6 +1100,46 @@ static inline int v4l2_ctrl_s_ctrl_string(struct v4l2_ctrl *ctrl, const char *s)
 	return rval;
 }
 
+/**
+ * __v4l2_ctrl_s_ctrl_area() - Unlocked variant of v4l2_ctrl_s_ctrl_area().
+ *
+ * @ctrl:	The control.
+ * @area:	The new area.
+ *
+ * This sets the control's new area safely by going through the control
+ * framework. This function assumes the control's handler is already locked,
+ * allowing it to be used from within the &v4l2_ctrl_ops functions.
+ *
+ * This function is for area type controls only.
+ */
+int __v4l2_ctrl_s_ctrl_area(struct v4l2_ctrl *ctrl,
+			    const struct v4l2_area *area);
+
+/**
+ * v4l2_ctrl_s_ctrl_area() - Helper function to set a control's area value
+ *	 from within a driver.
+ *
+ * @ctrl:	The control.
+ * @area:	The new area.
+ *
+ * This sets the control's new area safely by going through the control
+ * framework. This function will lock the control's handler, so it cannot be
+ * used from within the &v4l2_ctrl_ops functions.
+ *
+ * This function is for area type controls only.
+ */
+static inline int v4l2_ctrl_s_ctrl_area(struct v4l2_ctrl *ctrl,
+					const struct v4l2_area *area)
+{
+	int rval;
+
+	v4l2_ctrl_lock(ctrl);
+	rval = __v4l2_ctrl_s_ctrl_area(ctrl, area);
+	v4l2_ctrl_unlock(ctrl);
+
+	return rval;
+}
+
 /* Internal helper functions that deal with control events. */
 extern const struct v4l2_subscribed_event_ops v4l2_ctrl_sub_ev_ops;
 
diff --git a/include/media/v4l2-fh.h b/include/media/v4l2-fh.h
index 53b4dbb..b5b3e00 100644
--- a/include/media/v4l2-fh.h
+++ b/include/media/v4l2-fh.h
@@ -53,9 +53,7 @@ struct v4l2_fh {
 	unsigned int		navailable;
 	u32			sequence;
 
-#if IS_ENABLED(CONFIG_V4L2_MEM2MEM_DEV)
 	struct v4l2_m2m_ctx	*m2m_ctx;
-#endif
 };
 
 /**
diff --git a/include/media/v4l2-mem2mem.h b/include/media/v4l2-mem2mem.h
index 0b9c3a2..98753f0 100644
--- a/include/media/v4l2-mem2mem.h
+++ b/include/media/v4l2-mem2mem.h
@@ -21,7 +21,8 @@
  *		callback.
  *		The job does NOT have to end before this callback returns
  *		(and it will be the usual case). When the job finishes,
- *		v4l2_m2m_job_finish() has to be called.
+ *		v4l2_m2m_job_finish() or v4l2_m2m_buf_done_and_job_finish()
+ *		has to be called.
  * @job_ready:	optional. Should return 0 if the driver does not have a job
  *		fully prepared to run yet (i.e. it will not be able to finish a
  *		transaction without sleeping). If not provided, it will be
@@ -33,7 +34,8 @@
  *		stop the device safely; e.g. in the next interrupt handler),
  *		even if the transaction would not have been finished by then.
  *		After the driver performs the necessary steps, it has to call
- *		v4l2_m2m_job_finish() (as if the transaction ended normally).
+ *		v4l2_m2m_job_finish() or v4l2_m2m_buf_done_and_job_finish() as
+ *		if the transaction ended normally.
  *		This function does not have to (and will usually not) wait
  *		until the device enters a state when it can be stopped.
  */
@@ -73,6 +75,15 @@ struct v4l2_m2m_queue_ctx {
  * struct v4l2_m2m_ctx - Memory to memory context structure
  *
  * @q_lock: struct &mutex lock
+ * @new_frame: valid in the device_run callback: if true, then this
+ *		starts a new frame; if false, then this is a new slice
+ *		for an existing frame. This is always true unless
+ *		V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF is set, which
+ *		indicates slicing support.
+ * @is_draining: indicates device is in draining phase
+ * @last_src_buf: indicate the last source buffer for draining
+ * @next_buf_last: next capture queud buffer will be tagged as last
+ * @has_stopped: indicate the device has been stopped
  * @m2m_dev: opaque pointer to the internal data to handle M2M context
  * @cap_q_ctx: Capture (output to memory) queue context
  * @out_q_ctx: Output (input from memory) queue context
@@ -89,6 +100,13 @@ struct v4l2_m2m_ctx {
 	/* optional cap/out vb2 queues lock */
 	struct mutex			*q_lock;
 
+	bool				new_frame;
+
+	bool				is_draining;
+	struct vb2_v4l2_buffer		*last_src_buf;
+	bool				next_buf_last;
+	bool				has_stopped;
+
 	/* internal use only */
 	struct v4l2_m2m_dev		*m2m_dev;
 
@@ -173,6 +191,33 @@ void v4l2_m2m_try_schedule(struct v4l2_m2m_ctx *m2m_ctx);
 void v4l2_m2m_job_finish(struct v4l2_m2m_dev *m2m_dev,
 			 struct v4l2_m2m_ctx *m2m_ctx);
 
+/**
+ * v4l2_m2m_buf_done_and_job_finish() - return source/destination buffers with
+ * state and inform the framework that a job has been finished and have it
+ * clean up
+ *
+ * @m2m_dev: opaque pointer to the internal data to handle M2M context
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ * @state: vb2 buffer state passed to v4l2_m2m_buf_done().
+ *
+ * Drivers that set V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF must use this
+ * function instead of job_finish() to take held buffers into account. It is
+ * optional for other drivers.
+ *
+ * This function removes the source buffer from the ready list and returns
+ * it with the given state. The same is done for the destination buffer, unless
+ * it is marked 'held'. In that case the buffer is kept on the ready list.
+ *
+ * After that the job is finished (see job_finish()).
+ *
+ * This allows for multiple output buffers to be used to fill in a single
+ * capture buffer. This is typically used by stateless decoders where
+ * multiple e.g. H.264 slices contribute to a single decoded frame.
+ */
+void v4l2_m2m_buf_done_and_job_finish(struct v4l2_m2m_dev *m2m_dev,
+				      struct v4l2_m2m_ctx *m2m_ctx,
+				      enum vb2_buffer_state state);
+
 static inline void
 v4l2_m2m_buf_done(struct vb2_v4l2_buffer *buf, enum vb2_buffer_state state)
 {
@@ -180,6 +225,86 @@ v4l2_m2m_buf_done(struct vb2_v4l2_buffer *buf, enum vb2_buffer_state state)
 }
 
 /**
+ * v4l2_m2m_clear_state() - clear encoding/decoding state
+ *
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ */
+static inline void
+v4l2_m2m_clear_state(struct v4l2_m2m_ctx *m2m_ctx)
+{
+	m2m_ctx->next_buf_last = false;
+	m2m_ctx->is_draining = false;
+	m2m_ctx->has_stopped = false;
+}
+
+/**
+ * v4l2_m2m_mark_stopped() - set current encoding/decoding state as stopped
+ *
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ */
+static inline void
+v4l2_m2m_mark_stopped(struct v4l2_m2m_ctx *m2m_ctx)
+{
+	m2m_ctx->next_buf_last = false;
+	m2m_ctx->is_draining = false;
+	m2m_ctx->has_stopped = true;
+}
+
+/**
+ * v4l2_m2m_dst_buf_is_last() - return the current encoding/decoding session
+ * draining management state of next queued capture buffer
+ *
+ * This last capture buffer should be tagged with V4L2_BUF_FLAG_LAST to notify
+ * the end of the capture session.
+ *
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ */
+static inline bool
+v4l2_m2m_dst_buf_is_last(struct v4l2_m2m_ctx *m2m_ctx)
+{
+	return m2m_ctx->is_draining && m2m_ctx->next_buf_last;
+}
+
+/**
+ * v4l2_m2m_has_stopped() - return the current encoding/decoding session
+ * stopped state
+ *
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ */
+static inline bool
+v4l2_m2m_has_stopped(struct v4l2_m2m_ctx *m2m_ctx)
+{
+	return m2m_ctx->has_stopped;
+}
+
+/**
+ * v4l2_m2m_is_last_draining_src_buf() - return the output buffer draining
+ * state in the current encoding/decoding session
+ *
+ * This will identify the last output buffer queued before a session stop
+ * was required, leading to an actual encoding/decoding session stop state
+ * in the encoding/decoding process after being processed.
+ *
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ * @vbuf: pointer to struct &v4l2_buffer
+ */
+static inline bool
+v4l2_m2m_is_last_draining_src_buf(struct v4l2_m2m_ctx *m2m_ctx,
+				  struct vb2_v4l2_buffer *vbuf)
+{
+	return m2m_ctx->is_draining && vbuf == m2m_ctx->last_src_buf;
+}
+
+/**
+ * v4l2_m2m_last_buffer_done() - marks the buffer with LAST flag and DONE
+ *
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ * @vbuf: pointer to struct &v4l2_buffer
+ */
+void v4l2_m2m_last_buffer_done(struct v4l2_m2m_ctx *m2m_ctx,
+			       struct vb2_v4l2_buffer *vbuf);
+
+/**
  * v4l2_m2m_reqbufs() - multi-queue-aware REQBUFS multiplexer
  *
  * @file: pointer to struct &file
@@ -277,6 +402,46 @@ int v4l2_m2m_streamoff(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
 		       enum v4l2_buf_type type);
 
 /**
+ * v4l2_m2m_update_start_streaming_state() - update the encoding/decoding
+ * session state when a start of streaming of a video queue is requested
+ *
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ * @q: queue
+ */
+void v4l2_m2m_update_start_streaming_state(struct v4l2_m2m_ctx *m2m_ctx,
+					   struct vb2_queue *q);
+
+/**
+ * v4l2_m2m_update_stop_streaming_state() -  update the encoding/decoding
+ * session state when a stop of streaming of a video queue is requested
+ *
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ * @q: queue
+ */
+void v4l2_m2m_update_stop_streaming_state(struct v4l2_m2m_ctx *m2m_ctx,
+					  struct vb2_queue *q);
+
+/**
+ * v4l2_m2m_encoder_cmd() - execute an encoder command
+ *
+ * @file: pointer to struct &file
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ * @ec: pointer to the encoder command
+ */
+int v4l2_m2m_encoder_cmd(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
+			 struct v4l2_encoder_cmd *ec);
+
+/**
+ * v4l2_m2m_decoder_cmd() - execute a decoder command
+ *
+ * @file: pointer to struct &file
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ * @dc: pointer to the decoder command
+ */
+int v4l2_m2m_decoder_cmd(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
+			 struct v4l2_decoder_cmd *dc);
+
+/**
  * v4l2_m2m_poll() - poll replacement, for destination buffers only
  *
  * @file: pointer to struct &file
@@ -668,10 +833,18 @@ int v4l2_m2m_ioctl_streamon(struct file *file, void *fh,
 				enum v4l2_buf_type type);
 int v4l2_m2m_ioctl_streamoff(struct file *file, void *fh,
 				enum v4l2_buf_type type);
+int v4l2_m2m_ioctl_encoder_cmd(struct file *file, void *fh,
+			       struct v4l2_encoder_cmd *ec);
+int v4l2_m2m_ioctl_decoder_cmd(struct file *file, void *fh,
+			       struct v4l2_decoder_cmd *dc);
 int v4l2_m2m_ioctl_try_encoder_cmd(struct file *file, void *fh,
 				   struct v4l2_encoder_cmd *ec);
 int v4l2_m2m_ioctl_try_decoder_cmd(struct file *file, void *fh,
 				   struct v4l2_decoder_cmd *dc);
+int v4l2_m2m_ioctl_stateless_try_decoder_cmd(struct file *file, void *fh,
+					     struct v4l2_decoder_cmd *dc);
+int v4l2_m2m_ioctl_stateless_decoder_cmd(struct file *file, void *priv,
+					 struct v4l2_decoder_cmd *dc);
 int v4l2_m2m_fop_mmap(struct file *file, struct vm_area_struct *vma);
 __poll_t v4l2_m2m_fop_poll(struct file *file, poll_table *wait);
 
diff --git a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h
index 640aabe..6a5025a5 100644
--- a/include/media/videobuf2-core.h
+++ b/include/media/videobuf2-core.h
@@ -19,7 +19,7 @@
 #include <linux/bitops.h>
 #include <media/media-request.h>
 
-#define VB2_MAX_FRAME	(32)
+#define VB2_MAX_FRAME	(64)
 #define VB2_MAX_PLANES	(8)
 
 /**
@@ -505,6 +505,8 @@ struct vb2_buf_ops {
  * @buf_ops:	callbacks to deliver buffer information.
  *		between user-space and kernel-space.
  * @drv_priv:	driver private data.
+ * @subsystem_flags: Flags specific to the subsystem (V4L2/DVB/etc.). Not used
+ *		by the vb2 core.
  * @buf_struct_size: size of the driver-specific buffer structure;
  *		"0" indicates the driver doesn't want to use a custom buffer
  *		structure type. for example, ``sizeof(struct vb2_v4l2_buffer)``
@@ -571,6 +573,7 @@ struct vb2_queue {
 	const struct vb2_buf_ops	*buf_ops;
 
 	void				*drv_priv;
+	u32				subsystem_flags;
 	unsigned int			buf_struct_size;
 	u32				timestamp_flags;
 	gfp_t				gfp_flags;
diff --git a/include/media/videobuf2-v4l2.h b/include/media/videobuf2-v4l2.h
index 8a10889..59bf33a 100644
--- a/include/media/videobuf2-v4l2.h
+++ b/include/media/videobuf2-v4l2.h
@@ -33,6 +33,7 @@
  * @timecode:	frame timecode.
  * @sequence:	sequence count of this frame.
  * @request_fd:	the request_fd associated with this buffer
+ * @is_held:	if true, then this capture buffer was held
  * @planes:	plane information (userptr/fd, length, bytesused, data_offset).
  *
  * Should contain enough information to be able to cover all the fields
@@ -46,9 +47,13 @@ struct vb2_v4l2_buffer {
 	struct v4l2_timecode	timecode;
 	__u32			sequence;
 	__s32			request_fd;
+	bool			is_held;
 	struct vb2_plane	planes[VB2_MAX_PLANES];
 };
 
+/* VB2 V4L2 flags as set in vb2_queue.subsystem_flags */
+#define VB2_V4L2_FL_SUPPORTS_M2M_HOLD_CAPTURE_BUF (1 << 0)
+
 /*
  * to_vb2_v4l2_buffer() - cast struct vb2_buffer * to struct vb2_v4l2_buffer *
  */
diff --git a/include/net/addrconf.h b/include/net/addrconf.h
index ab8b3eb..f6361e23 100644
--- a/include/net/addrconf.h
+++ b/include/net/addrconf.h
@@ -266,6 +266,18 @@ static inline bool ipv6_is_mld(struct sk_buff *skb, int nexthdr, int offset)
 void addrconf_prefix_rcv(struct net_device *dev,
 			 u8 *opt, int len, bool sllao);
 
+/* Determines into what table to put autoconf PIO/RIO/default routes
+ * learned on this device.
+ *
+ * - If 0, use the same table for every device. This puts routes into
+ *   one of RT_TABLE_{PREFIX,INFO,DFLT} depending on the type of route
+ *   (but note that these three are currently all equal to
+ *   RT6_TABLE_MAIN).
+ * - If > 0, use the specified table.
+ * - If < 0, put routes into table dev->ifindex + (-rt_table).
+ */
+u32 addrconf_rt_table(const struct net_device *dev, u32 default_table);
+
 /*
  *	anycast prototypes (anycast.c)
  */
diff --git a/include/net/af_vsock.h b/include/net/af_vsock.h
index 80ea0f9..4206dc6d 100644
--- a/include/net/af_vsock.h
+++ b/include/net/af_vsock.h
@@ -10,7 +10,7 @@
 
 #include <linux/kernel.h>
 #include <linux/workqueue.h>
-#include <linux/vm_sockets.h>
+#include <uapi/linux/vm_sockets.h>
 
 #include "vsock_addr.h"
 
@@ -27,6 +27,7 @@ extern spinlock_t vsock_table_lock;
 struct vsock_sock {
 	/* sk must be the first member. */
 	struct sock sk;
+	const struct vsock_transport *transport;
 	struct sockaddr_vm local_addr;
 	struct sockaddr_vm remote_addr;
 	/* Links for the global tables of bound and connected sockets. */
@@ -64,16 +65,18 @@ struct vsock_sock {
 	bool sent_request;
 	bool ignore_connecting_rst;
 
+	/* Protected by lock_sock(sk) */
+	u64 buffer_size;
+	u64 buffer_min_size;
+	u64 buffer_max_size;
+
 	/* Private to transport. */
 	void *trans;
 };
 
 s64 vsock_stream_has_data(struct vsock_sock *vsk);
 s64 vsock_stream_has_space(struct vsock_sock *vsk);
-struct sock *__vsock_create(struct net *net,
-			    struct socket *sock,
-			    struct sock *parent,
-			    gfp_t priority, unsigned short type, int kern);
+struct sock *vsock_create_connected(struct sock *parent);
 
 /**** TRANSPORT ****/
 
@@ -88,7 +91,17 @@ struct vsock_transport_send_notify_data {
 	u64 data2; /* Transport-defined. */
 };
 
+/* Transport features flags */
+/* Transport provides host->guest communication */
+#define VSOCK_TRANSPORT_F_H2G		0x00000001
+/* Transport provides guest->host communication */
+#define VSOCK_TRANSPORT_F_G2H		0x00000002
+/* Transport provides DGRAM communication */
+#define VSOCK_TRANSPORT_F_DGRAM		0x00000004
+
 struct vsock_transport {
+	struct module *module;
+
 	/* Initialize/tear-down socket. */
 	int (*init)(struct vsock_sock *, struct vsock_sock *);
 	void (*destruct)(struct vsock_sock *);
@@ -139,33 +152,23 @@ struct vsock_transport {
 		struct vsock_transport_send_notify_data *);
 	int (*notify_send_post_enqueue)(struct vsock_sock *, ssize_t,
 		struct vsock_transport_send_notify_data *);
+	/* sk_lock held by the caller */
+	void (*notify_buffer_size)(struct vsock_sock *, u64 *);
 
 	/* Shutdown. */
 	int (*shutdown)(struct vsock_sock *, int);
 
-	/* Buffer sizes. */
-	void (*set_buffer_size)(struct vsock_sock *, u64);
-	void (*set_min_buffer_size)(struct vsock_sock *, u64);
-	void (*set_max_buffer_size)(struct vsock_sock *, u64);
-	u64 (*get_buffer_size)(struct vsock_sock *);
-	u64 (*get_min_buffer_size)(struct vsock_sock *);
-	u64 (*get_max_buffer_size)(struct vsock_sock *);
-
 	/* Addressing. */
 	u32 (*get_local_cid)(void);
 };
 
 /**** CORE ****/
 
-int __vsock_core_init(const struct vsock_transport *t, struct module *owner);
-static inline int vsock_core_init(const struct vsock_transport *t)
-{
-	return __vsock_core_init(t, THIS_MODULE);
-}
-void vsock_core_exit(void);
+int vsock_core_register(const struct vsock_transport *t, int features);
+void vsock_core_unregister(const struct vsock_transport *t);
 
 /* The transport may downcast this to access transport-specific functions */
-const struct vsock_transport *vsock_core_get_transport(void);
+const struct vsock_transport *vsock_core_get_transport(struct vsock_sock *vsk);
 
 /**** UTILS ****/
 
@@ -193,6 +196,8 @@ struct sock *vsock_find_connected_socket(struct sockaddr_vm *src,
 					 struct sockaddr_vm *dst);
 void vsock_remove_sock(struct vsock_sock *vsk);
 void vsock_for_each_connected_socket(void (*fn)(struct sock *sk));
+int vsock_assign_transport(struct vsock_sock *vsk, struct vsock_sock *psk);
+bool vsock_find_cid(unsigned int cid);
 
 /**** TAP ****/
 
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 68782ba..0cf0d4e 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -126,6 +126,7 @@ enum ieee80211_channel_flags {
  * with cfg80211.
  *
  * @center_freq: center frequency in MHz
+ * @freq_offset: offset from @center_freq, in KHz
  * @hw_value: hardware-specific value for the channel
  * @flags: channel flags from &enum ieee80211_channel_flags.
  * @orig_flags: channel flags at registration time, used by regulatory
@@ -147,6 +148,7 @@ enum ieee80211_channel_flags {
 struct ieee80211_channel {
 	enum nl80211_band band;
 	u32 center_freq;
+	u16 freq_offset;
 	u16 hw_value;
 	u32 flags;
 	int max_antenna_gain;
@@ -324,10 +326,13 @@ struct ieee80211_sta_he_cap {
  *
  * @types_mask: interface types mask
  * @he_cap: holds the HE capabilities
+ * @he_6ghz_capa: HE 6 GHz capabilities, must be filled in for a
+ *	6 GHz band channel (and 0 may be valid value).
  */
 struct ieee80211_sband_iftype_data {
 	u16 types_mask;
 	struct ieee80211_sta_he_cap he_cap;
+	struct ieee80211_he_6ghz_capa he_6ghz_capa;
 };
 
 /**
@@ -480,6 +485,26 @@ ieee80211_get_he_sta_cap(const struct ieee80211_supported_band *sband)
 }
 
 /**
+ * ieee80211_get_he_6ghz_capa - return HE 6 GHz capabilities
+ * @sband: the sband to search for the STA on
+ * @iftype: the iftype to search for
+ *
+ * Return: the 6GHz capabilities
+ */
+static inline __le16
+ieee80211_get_he_6ghz_capa(const struct ieee80211_supported_band *sband,
+			   enum nl80211_iftype iftype)
+{
+	const struct ieee80211_sband_iftype_data *data =
+		ieee80211_get_sband_iftype_data(sband, iftype);
+
+	if (WARN_ON(!data || !data->he_cap.has_he))
+		return 0;
+
+	return data->he_6ghz_capa.capa;
+}
+
+/**
  * wiphy_read_of_freq_limits - read frequency limits from device tree
  *
  * @wiphy: the wireless device to get extra limits for
@@ -587,6 +612,7 @@ struct key_params {
  *	If edmg is requested (i.e. the .channels member is non-zero),
  *	chan will define the primary channel and all other
  *	parameters are ignored.
+ * @freq1_offset: offset from @center_freq1, in KHz
  */
 struct cfg80211_chan_def {
 	struct ieee80211_channel *chan;
@@ -594,6 +620,7 @@ struct cfg80211_chan_def {
 	u32 center_freq1;
 	u32 center_freq2;
 	struct ieee80211_edmg edmg;
+	u16 freq1_offset;
 };
 
 /**
@@ -648,6 +675,7 @@ cfg80211_chandef_identical(const struct cfg80211_chan_def *chandef1,
 	return (chandef1->chan == chandef2->chan &&
 		chandef1->width == chandef2->width &&
 		chandef1->center_freq1 == chandef2->center_freq1 &&
+		chandef1->freq1_offset == chandef2->freq1_offset &&
 		chandef1->center_freq2 == chandef2->center_freq2);
 }
 
@@ -1151,6 +1179,7 @@ struct sta_txpwr {
  * @he_capa: HE capabilities of station
  * @he_capa_len: the length of the HE capabilities
  * @airtime_weight: airtime scheduler weight for this station
+ * @he_6ghz_capa: HE 6 GHz Band capabilities of station
  */
 struct station_parameters {
 	const u8 *supported_rates;
@@ -1182,6 +1211,7 @@ struct station_parameters {
 	u8 he_capa_len;
 	u16 airtime_weight;
 	struct sta_txpwr txpwr;
+	const struct ieee80211_he_6ghz_capa *he_6ghz_capa;
 };
 
 /**
@@ -5008,29 +5038,106 @@ static inline void *wdev_priv(struct wireless_dev *wdev)
  */
 
 /**
+ * ieee80211_channel_equal - compare two struct ieee80211_channel
+ *
+ * @a: 1st struct ieee80211_channel
+ * @b: 2nd struct ieee80211_channel
+ * Return: true if center frequency of @a == @b
+ */
+static inline bool
+ieee80211_channel_equal(struct ieee80211_channel *a,
+			struct ieee80211_channel *b)
+{
+	return (a->center_freq == b->center_freq &&
+		a->freq_offset == b->freq_offset);
+}
+
+/**
+ * ieee80211_channel_to_khz - convert ieee80211_channel to frequency in KHz
+ * @chan: struct ieee80211_channel to convert
+ * Return: The corresponding frequency (in KHz)
+ */
+static inline u32
+ieee80211_channel_to_khz(const struct ieee80211_channel *chan)
+{
+	return MHZ_TO_KHZ(chan->center_freq) + chan->freq_offset;
+}
+
+/**
+ * ieee80211_channel_to_freq_khz - convert channel number to frequency
+ * @chan: channel number
+ * @band: band, necessary due to channel number overlap
+ * Return: The corresponding frequency (in KHz), or 0 if the conversion failed.
+ */
+u32 ieee80211_channel_to_freq_khz(int chan, enum nl80211_band band);
+
+/**
  * ieee80211_channel_to_frequency - convert channel number to frequency
  * @chan: channel number
  * @band: band, necessary due to channel number overlap
  * Return: The corresponding frequency (in MHz), or 0 if the conversion failed.
  */
-int ieee80211_channel_to_frequency(int chan, enum nl80211_band band);
+static inline int
+ieee80211_channel_to_frequency(int chan, enum nl80211_band band)
+{
+	return KHZ_TO_MHZ(ieee80211_channel_to_freq_khz(chan, band));
+}
+
+/**
+ * ieee80211_freq_khz_to_channel - convert frequency to channel number
+ * @freq: center frequency in KHz
+ * Return: The corresponding channel, or 0 if the conversion failed.
+ */
+int ieee80211_freq_khz_to_channel(u32 freq);
 
 /**
  * ieee80211_frequency_to_channel - convert frequency to channel number
- * @freq: center frequency
+ * @freq: center frequency in MHz
  * Return: The corresponding channel, or 0 if the conversion failed.
  */
-int ieee80211_frequency_to_channel(int freq);
+static inline int
+ieee80211_frequency_to_channel(int freq)
+{
+	return ieee80211_freq_khz_to_channel(MHZ_TO_KHZ(freq));
+}
+
+/**
+ * ieee80211_get_channel_khz - get channel struct from wiphy for specified
+ * frequency
+ * @wiphy: the struct wiphy to get the channel for
+ * @freq: the center frequency (in KHz) of the channel
+ * Return: The channel struct from @wiphy at @freq.
+ */
+struct ieee80211_channel *
+ieee80211_get_channel_khz(struct wiphy *wiphy, u32 freq);
 
 /**
  * ieee80211_get_channel - get channel struct from wiphy for specified frequency
  *
  * @wiphy: the struct wiphy to get the channel for
- * @freq: the center frequency of the channel
- *
+ * @freq: the center frequency (in MHz) of the channel
  * Return: The channel struct from @wiphy at @freq.
  */
-struct ieee80211_channel *ieee80211_get_channel(struct wiphy *wiphy, int freq);
+static inline struct ieee80211_channel *
+ieee80211_get_channel(struct wiphy *wiphy, int freq)
+{
+	return ieee80211_get_channel_khz(wiphy, MHZ_TO_KHZ(freq));
+}
+
+/**
+ * cfg80211_channel_is_psc - Check if the channel is a 6 GHz PSC
+ * @chan: control channel to check
+ *
+ * The Preferred Scanning Channels (PSC) are defined in
+ * Draft IEEE P802.11ax/D5.0, 26.17.2.3.3
+ */
+static inline bool cfg80211_channel_is_psc(struct ieee80211_channel *chan)
+{
+	if (chan->band != NL80211_BAND_6GHZ)
+		return false;
+
+	return ieee80211_frequency_to_channel(chan->center_freq) % 16 == 5;
+}
 
 /**
  * ieee80211_get_response_rate - get basic rate for a given rate
@@ -7054,6 +7161,19 @@ bool ieee80211_operating_class_to_band(u8 operating_class,
 bool ieee80211_chandef_to_operating_class(struct cfg80211_chan_def *chandef,
 					  u8 *op_class);
 
+/**
+ * ieee80211_chandef_to_khz - convert chandef to frequency in KHz
+ *
+ * @chandef: the chandef to convert
+ *
+ * Returns the center frequency of chandef (1st segment) in KHz.
+ */
+static inline u32
+ieee80211_chandef_to_khz(const struct cfg80211_chan_def *chandef)
+{
+	return MHZ_TO_KHZ(chandef->center_freq1) + chandef->freq1_offset;
+}
+
 /*
  * cfg80211_tdls_oper_request - request userspace to perform TDLS operation
  * @dev: the device on which the operation is requested
diff --git a/include/net/icmp.h b/include/net/icmp.h
index 5d4bfdb..9ac2d26 100644
--- a/include/net/icmp.h
+++ b/include/net/icmp.h
@@ -43,6 +43,12 @@ static inline void icmp_send(struct sk_buff *skb_in, int type, int code, __be32
 	__icmp_send(skb_in, type, code, info, &IPCB(skb_in)->opt);
 }
 
+#if IS_ENABLED(CONFIG_NF_NAT)
+void icmp_ndo_send(struct sk_buff *skb_in, int type, int code, __be32 info);
+#else
+#define icmp_ndo_send icmp_send
+#endif
+
 int icmp_rcv(struct sk_buff *skb);
 int icmp_err(struct sk_buff *skb, u32 info);
 int icmp_init(void);
diff --git a/include/net/ip.h b/include/net/ip.h
index 0278d63c1..708fcf6 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
@@ -346,6 +346,13 @@ static inline int inet_is_local_reserved_port(struct net *net, int port)
 	return test_bit(port, net->ipv4.sysctl_local_reserved_ports);
 }
 
+static inline bool inet_is_local_unbindable_port(struct net *net, unsigned short port)
+{
+	if (!net->ipv4.sysctl_local_unbindable_ports)
+		return false;
+	return test_bit(port, net->ipv4.sysctl_local_unbindable_ports);
+}
+
 static inline bool sysctl_dev_name_is_allowed(const char *name)
 {
 	return strcmp(name, "default") != 0  && strcmp(name, "all") != 0;
@@ -362,6 +369,11 @@ static inline int inet_is_local_reserved_port(struct net *net, int port)
 	return 0;
 }
 
+static inline bool inet_is_local_unbindable_port(struct net *net, unsigned short port)
+{
+	return false;
+}
+
 static inline int inet_prot_sock(struct net *net)
 {
 	return PROT_SOCK;
diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h
index 56deb25..8545fa2 100644
--- a/include/net/ip_tunnels.h
+++ b/include/net/ip_tunnels.h
@@ -289,6 +289,9 @@ int ip_tunnel_newlink(struct net_device *dev, struct nlattr *tb[],
 		      struct ip_tunnel_parm *p, __u32 fwmark);
 void ip_tunnel_setup(struct net_device *dev, unsigned int net_id);
 
+extern const struct header_ops ip_tunnel_header_ops;
+__be16 ip_tunnel_parse_protocol(const struct sk_buff *skb);
+
 struct ip_tunnel_encap_ops {
 	size_t (*encap_hlen)(struct ip_tunnel_encap *e);
 	int (*build_header)(struct sk_buff *skb, struct ip_tunnel_encap *e,
diff --git a/include/net/ndisc.h b/include/net/ndisc.h
index b5ebeb3..6cb3e6c 100644
--- a/include/net/ndisc.h
+++ b/include/net/ndisc.h
@@ -41,6 +41,7 @@ enum {
 	ND_OPT_DNSSL = 31,		/* RFC6106 */
 	ND_OPT_6CO = 34,		/* RFC6775 */
 	ND_OPT_CAPTIVE_PORTAL = 37,	/* RFC7710 */
+	ND_OPT_PREF64 = 38,		/* RFC8781 */
 	__ND_OPT_MAX
 };
 
diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h
index c0c0791..6a23565 100644
--- a/include/net/netns/ipv4.h
+++ b/include/net/netns/ipv4.h
@@ -197,6 +197,7 @@ struct netns_ipv4 {
 
 #ifdef CONFIG_SYSCTL
 	unsigned long *sysctl_local_reserved_ports;
+	unsigned long *sysctl_local_unbindable_ports;
 	int sysctl_ip_prot_sock;
 #endif
 
diff --git a/include/net/sock.h b/include/net/sock.h
index e6a48eb..6800a90 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -68,6 +68,7 @@
 #include <linux/net_tstamp.h>
 #include <net/smc.h>
 #include <net/l3mdev.h>
+#include <linux/android_kabi.h>
 
 /*
  * This structure really needs to be cleaned up.
@@ -511,6 +512,15 @@ struct sock {
 	struct bpf_sk_storage __rcu	*sk_bpf_storage;
 #endif
 	struct rcu_head		sk_rcu;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+	ANDROID_KABI_RESERVE(5);
+	ANDROID_KABI_RESERVE(6);
+	ANDROID_KABI_RESERVE(7);
+	ANDROID_KABI_RESERVE(8);
 };
 
 enum sk_pacing {
diff --git a/include/net/tls.h b/include/net/tls.h
index 697df45..095d9b7 100644
--- a/include/net/tls.h
+++ b/include/net/tls.h
@@ -43,6 +43,7 @@
 #include <linux/mutex.h>
 #include <linux/netdevice.h>
 #include <linux/rcupdate.h>
+#include <linux/android_kabi.h>
 
 #include <net/tcp.h>
 #include <net/strparser.h>
@@ -314,6 +315,12 @@ struct tlsdev_ops {
 	int (*tls_dev_resync)(struct net_device *netdev,
 			      struct sock *sk, u32 seq, u8 *rcd_sn,
 			      enum tls_offload_ctx_dir direction);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+
 };
 
 enum tls_offload_sync_type {
diff --git a/include/net/udp.h b/include/net/udp.h
index fabf507..e55d5f7 100644
--- a/include/net/udp.h
+++ b/include/net/udp.h
@@ -167,7 +167,7 @@ typedef struct sock *(*udp_lookup_t)(struct sk_buff *skb, __be16 sport,
 				     __be16 dport);
 
 struct sk_buff *udp_gro_receive(struct list_head *head, struct sk_buff *skb,
-				struct udphdr *uh, udp_lookup_t lookup);
+				struct udphdr *uh, struct sock *sk);
 int udp_gro_complete(struct sk_buff *skb, int nhoff, udp_lookup_t lookup);
 
 struct sk_buff *__udp_gso_segment(struct sk_buff *gso_skb,
diff --git a/include/net/virt_wifi.h b/include/net/virt_wifi.h
new file mode 100644
index 0000000..343e739
--- /dev/null
+++ b/include/net/virt_wifi.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* include/net/virt_wifi.h
+ *
+ * Define the extension interface for the network data simulation
+ *
+ * Copyright (C) 2019 Google, Inc.
+ *
+ * Author: lesl@google.com
+ */
+#ifndef __VIRT_WIFI_H
+#define __VIRT_WIFI_H
+
+struct virt_wifi_network_simulation {
+	void (*notify_device_open)(struct net_device *dev);
+	void (*notify_device_stop)(struct net_device *dev);
+	void (*notify_scan_trigger)(struct wiphy *wiphy,
+				    struct cfg80211_scan_request *request);
+	int (*generate_virt_scan_result)(struct wiphy *wiphy);
+};
+
+int virt_wifi_register_network_simulation(
+	    struct virt_wifi_network_simulation *ops);
+int virt_wifi_unregister_network_simulation(void);
+#endif
+
diff --git a/include/net/vsock_addr.h b/include/net/vsock_addr.h
index 57d2db5..cf8cc14 100644
--- a/include/net/vsock_addr.h
+++ b/include/net/vsock_addr.h
@@ -8,7 +8,7 @@
 #ifndef _VSOCK_ADDR_H_
 #define _VSOCK_ADDR_H_
 
-#include <linux/vm_sockets.h>
+#include <uapi/linux/vm_sockets.h>
 
 void vsock_addr_init(struct sockaddr_vm *addr, u32 cid, u32 port);
 int vsock_addr_validate(const struct sockaddr_vm *addr);
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index c00b9ae..b655769 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -1995,4 +1995,38 @@ static inline int xfrm_tunnel_check(struct sk_buff *skb, struct xfrm_state *x,
 
 	return 0;
 }
+
+extern const int xfrm_msg_min[XFRM_NR_MSGTYPES];
+extern const struct nla_policy xfrma_policy[XFRMA_MAX+1];
+
+struct xfrm_translator {
+	/* Allocate frag_list and put compat translation there */
+	int (*alloc_compat)(struct sk_buff *skb, const struct nlmsghdr *src);
+
+	/* Allocate nlmsg with 64-bit translaton of received 32-bit message */
+	struct nlmsghdr *(*rcv_msg_compat)(const struct nlmsghdr *nlh,
+			int maxtype, const struct nla_policy *policy,
+			struct netlink_ext_ack *extack);
+
+	/* Translate 32-bit user_policy from sockptr */
+	int (*xlate_user_policy_sockptr)(u8 **pdata32, int optlen);
+
+	struct module *owner;
+};
+
+#if IS_ENABLED(CONFIG_XFRM_USER_COMPAT)
+extern int xfrm_register_translator(struct xfrm_translator *xtr);
+extern int xfrm_unregister_translator(struct xfrm_translator *xtr);
+extern struct xfrm_translator *xfrm_get_translator(void);
+extern void xfrm_put_translator(struct xfrm_translator *xtr);
+#else
+static inline struct xfrm_translator *xfrm_get_translator(void)
+{
+	return NULL;
+}
+static inline void xfrm_put_translator(struct xfrm_translator *xtr)
+{
+}
+#endif
+
 #endif	/* _NET_XFRM_H */
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 30d5052..83a66c9 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -95,7 +95,8 @@ void ibdev_notice(const struct ib_device *ibdev, const char *format, ...);
 __printf(2, 3) __cold
 void ibdev_info(const struct ib_device *ibdev, const char *format, ...);
 
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 #define ibdev_dbg(__dev, format, args...)                       \
 	dynamic_ibdev_dbg(__dev, format, ##args)
 #else
@@ -128,7 +129,8 @@ do {                                                                    \
 #define ibdev_info_ratelimited(ibdev, fmt, ...) \
 	ibdev_level_ratelimited(ibdev_info, ibdev, fmt, ##__VA_ARGS__)
 
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 /* descriptor check is first to prevent flooding with "callbacks suppressed" */
 #define ibdev_dbg_ratelimited(ibdev, fmt, ...)                          \
 do {                                                                    \
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h
index 91bd749..e998148 100644
--- a/include/scsi/scsi_cmnd.h
+++ b/include/scsi/scsi_cmnd.h
@@ -11,6 +11,7 @@
 #include <linux/scatterlist.h>
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_request.h>
+#include <linux/android_kabi.h>
 
 struct Scsi_Host;
 struct scsi_driver;
@@ -141,6 +142,11 @@ struct scsi_cmnd {
 	unsigned long state;	/* Command completion state */
 
 	unsigned char tag;	/* SCSI-II queued command tag */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /*
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
index 202f4d6..576840c6 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -8,6 +8,7 @@
 #include <linux/blkdev.h>
 #include <scsi/scsi.h>
 #include <linux/atomic.h>
+#include <linux/android_kabi.h>
 
 struct device;
 struct request_queue;
@@ -170,6 +171,7 @@ struct scsi_device {
 				     * because we did a bus reset. */
 	unsigned use_10_for_rw:1; /* first try 10-byte read / write */
 	unsigned use_10_for_ms:1; /* first try 10-byte mode sense/select */
+	unsigned set_dbd_for_ms:1; /* Set "DBD" field in mode sense */
 	unsigned no_report_opcodes:1;	/* no REPORT SUPPORTED OPERATION CODES */
 	unsigned no_write_same:1;	/* no WRITE SAME command */
 	unsigned use_16_for_rw:1; /* Use read/write(16) over read/write(10) */
@@ -199,7 +201,8 @@ struct scsi_device {
 	unsigned broken_fua:1;		/* Don't set FUA bit */
 	unsigned lun_in_cdb:1;		/* Store LUN bits in CDB[1] */
 	unsigned unmap_limit_for_ws:1;	/* Use the UNMAP limit for WRITE SAME */
-
+	unsigned rpm_autosuspend:1;	/* Enable runtime autosuspend at device
+					 * creation time */
 	atomic_t disk_events_disable_depth; /* disable depth for disk events */
 
 	DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */
@@ -228,6 +231,11 @@ struct scsi_device {
 	enum scsi_device_state sdev_state;
 	struct task_struct	*quiesced_by;
 	unsigned long		sdev_data[0];
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } __attribute__((aligned(sizeof(unsigned long))));
 
 #define	to_scsi_device(d)	\
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
index 31e0d6c..10f1b50 100644
--- a/include/scsi/scsi_host.h
+++ b/include/scsi/scsi_host.h
@@ -10,6 +10,7 @@
 #include <linux/seq_file.h>
 #include <linux/blk-mq.h>
 #include <scsi/scsi.h>
+#include <linux/android_kabi.h>
 
 struct block_device;
 struct completion;
@@ -486,6 +487,14 @@ struct scsi_host_template {
 	 */
 	unsigned int cmd_size;
 	struct scsi_host_cmd_pool *cmd_pool;
+
+	/* Delay for runtime autosuspend */
+	int rpm_autosuspend_delay;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /*
diff --git a/include/sound/pcm.h b/include/sound/pcm.h
index bbe6eb1..b8f638e0 100644
--- a/include/sound/pcm.h
+++ b/include/sound/pcm.h
@@ -475,6 +475,7 @@ struct snd_pcm_substream {
 #endif /* CONFIG_SND_VERBOSE_PROCFS */
 	/* misc flags */
 	unsigned int hw_opened: 1;
+	unsigned int hw_no_buffer: 1; /* substream may not have a buffer */
 };
 
 #define SUBSTREAM_BUSY(substream) ((substream)->ref_count > 0)
diff --git a/include/sound/soc.h b/include/sound/soc.h
index 6d2662c..ba0d7a6 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -239,6 +239,14 @@
 	.get = xhandler_get, .put = xhandler_put, \
 	.private_value = SOC_DOUBLE_R_VALUE(reg_left, reg_right, xshift, \
 					    xmax, xinvert) }
+#define SOC_SINGLE_MULTI_EXT(xname, xreg, xshift, xmax, xinvert, xcount,\
+	xhandler_get, xhandler_put) \
+{	.iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
+	.info = snd_soc_info_multi_ext, \
+	.get = xhandler_get, .put = xhandler_put, \
+	.private_value = (unsigned long)&(struct soc_multi_mixer_control) \
+		{.reg = xreg, .shift = xshift, .rshift = xshift, .max = xmax, \
+		.count = xcount, .platform_max = xmax, .invert = xinvert} }
 #define SOC_SINGLE_EXT_TLV(xname, xreg, xshift, xmax, xinvert,\
 	 xhandler_get, xhandler_put, tlv_array) \
 {	.iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
@@ -362,6 +370,10 @@
 #define SOC_ENUM_SINGLE_VIRT_DECL(name, xtexts) \
 	const struct soc_enum name = SOC_ENUM_SINGLE_VIRT(ARRAY_SIZE(xtexts), xtexts)
 
+/* DAI Link Host Mode Support */
+#define SND_SOC_DAI_LINK_NO_HOST		0x1
+#define SND_SOC_DAI_LINK_OPT_HOST		0x2
+
 /*
  * Bias levels
  *
@@ -621,6 +633,8 @@ int snd_soc_get_strobe(struct snd_kcontrol *kcontrol,
 	struct snd_ctl_elem_value *ucontrol);
 int snd_soc_put_strobe(struct snd_kcontrol *kcontrol,
 	struct snd_ctl_elem_value *ucontrol);
+int snd_soc_info_multi_ext(struct snd_kcontrol *kcontrol,
+	struct snd_ctl_elem_info *uinfo);
 
 /**
  * struct snd_soc_jack_pin - Describes a pin to update based on jack detection
@@ -713,6 +727,7 @@ struct snd_soc_pcm_stream {
 	unsigned int channels_min;	/* min channels */
 	unsigned int channels_max;	/* max channels */
 	unsigned int sig_bits;		/* number of bits of content */
+	const char *aif_name;		/* DAPM AIF widget name */
 };
 
 /* SoC audio ops */
@@ -827,6 +842,12 @@ struct snd_soc_dai_link {
 	/* This DAI link can route to other DAI links at runtime (Frontend)*/
 	unsigned int dynamic:1;
 
+	/*
+	 * This DAI can support no host IO (no pcm data is
+	 * copied to from host)
+	 */
+	unsigned int no_host_mode:2;
+
 	/* DPCM capture and Playback support */
 	unsigned int dpcm_capture:1;
 	unsigned int dpcm_playback:1;
@@ -1195,6 +1216,11 @@ struct soc_mreg_control {
 	unsigned int regbase, regcount, nbits, invert;
 };
 
+struct soc_multi_mixer_control {
+	int min, max, platform_max, count;
+	unsigned int reg, rreg, shift, rshift, invert;
+};
+
 /* enumerated kcontrol */
 struct soc_enum {
 	int reg;
diff --git a/include/trace/events/android_fs.h b/include/trace/events/android_fs.h
new file mode 100644
index 0000000..7edb6bc
--- /dev/null
+++ b/include/trace/events/android_fs.h
@@ -0,0 +1,66 @@
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM android_fs
+
+#if !defined(_TRACE_ANDROID_FS_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_ANDROID_FS_H
+
+#include <linux/fs.h>
+#include <linux/tracepoint.h>
+#include <trace/events/android_fs_template.h>
+
+DEFINE_EVENT(android_fs_data_start_template, android_fs_dataread_start,
+	TP_PROTO(struct inode *inode, loff_t offset, int bytes,
+		 pid_t pid, char *pathname, char *command),
+	TP_ARGS(inode, offset, bytes, pid, pathname, command));
+
+DEFINE_EVENT(android_fs_data_end_template, android_fs_dataread_end,
+	TP_PROTO(struct inode *inode, loff_t offset, int bytes),
+	TP_ARGS(inode, offset, bytes));
+
+DEFINE_EVENT(android_fs_data_start_template, android_fs_datawrite_start,
+	TP_PROTO(struct inode *inode, loff_t offset, int bytes,
+		 pid_t pid, char *pathname, char *command),
+	TP_ARGS(inode, offset, bytes, pid, pathname, command));
+
+DEFINE_EVENT(android_fs_data_end_template, android_fs_datawrite_end,
+	TP_PROTO(struct inode *inode, loff_t offset, int bytes),
+	     TP_ARGS(inode, offset, bytes));
+
+#endif /* _TRACE_ANDROID_FS_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
+
+#ifndef ANDROID_FSTRACE_GET_PATHNAME
+#define ANDROID_FSTRACE_GET_PATHNAME
+
+/* Sizes an on-stack array, so careful if sizing this up ! */
+#define MAX_TRACE_PATHBUF_LEN	256
+
+static inline char *
+android_fstrace_get_pathname(char *buf, int buflen, struct inode *inode)
+{
+	char *path;
+	struct dentry *d;
+
+	/*
+	 * d_obtain_alias() will either iput() if it locates an existing
+	 * dentry or transfer the reference to the new dentry created.
+	 * So get an extra reference here.
+	 */
+	ihold(inode);
+	d = d_obtain_alias(inode);
+	if (likely(!IS_ERR(d))) {
+		path = dentry_path_raw(d, buf, buflen);
+		if (unlikely(IS_ERR(path))) {
+			strcpy(buf, "ERROR");
+			path = buf;
+		}
+		dput(d);
+	} else {
+		strcpy(buf, "ERROR");
+		path = buf;
+	}
+	return path;
+}
+#endif
diff --git a/include/trace/events/android_fs_template.h b/include/trace/events/android_fs_template.h
new file mode 100644
index 0000000..b23d17b
--- /dev/null
+++ b/include/trace/events/android_fs_template.h
@@ -0,0 +1,64 @@
+#if !defined(_TRACE_ANDROID_FS_TEMPLATE_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_ANDROID_FS_TEMPLATE_H
+
+#include <linux/tracepoint.h>
+
+DECLARE_EVENT_CLASS(android_fs_data_start_template,
+	TP_PROTO(struct inode *inode, loff_t offset, int bytes,
+		 pid_t pid, char *pathname, char *command),
+	TP_ARGS(inode, offset, bytes, pid, pathname, command),
+	TP_STRUCT__entry(
+		__string(pathbuf, pathname);
+		__field(loff_t,	offset);
+		__field(int,	bytes);
+		__field(loff_t,	i_size);
+		__string(cmdline, command);
+		__field(pid_t,	pid);
+		__field(ino_t,	ino);
+	),
+	TP_fast_assign(
+		{
+			/*
+			 * Replace the spaces in filenames and cmdlines
+			 * because this screws up the tooling that parses
+			 * the traces.
+			 */
+			__assign_str(pathbuf, pathname);
+			(void)strreplace(__get_str(pathbuf), ' ', '_');
+			__entry->offset		= offset;
+			__entry->bytes		= bytes;
+			__entry->i_size		= i_size_read(inode);
+			__assign_str(cmdline, command);
+			(void)strreplace(__get_str(cmdline), ' ', '_');
+			__entry->pid		= pid;
+			__entry->ino		= inode->i_ino;
+		}
+	),
+	TP_printk("entry_name %s, offset %llu, bytes %d, cmdline %s,"
+		  " pid %d, i_size %llu, ino %lu",
+		  __get_str(pathbuf), __entry->offset, __entry->bytes,
+		  __get_str(cmdline), __entry->pid, __entry->i_size,
+		  (unsigned long) __entry->ino)
+);
+
+DECLARE_EVENT_CLASS(android_fs_data_end_template,
+	TP_PROTO(struct inode *inode, loff_t offset, int bytes),
+	TP_ARGS(inode, offset, bytes),
+	TP_STRUCT__entry(
+		__field(ino_t,	ino);
+		__field(loff_t,	offset);
+		__field(int,	bytes);
+	),
+	TP_fast_assign(
+		{
+			__entry->ino		= inode->i_ino;
+			__entry->offset		= offset;
+			__entry->bytes		= bytes;
+		}
+	),
+	TP_printk("ino %lu, offset %llu, bytes %d",
+		  (unsigned long) __entry->ino,
+		  __entry->offset, __entry->bytes)
+);
+
+#endif /* _TRACE_ANDROID_FS_TEMPLATE_H */
diff --git a/include/trace/events/avc.h b/include/trace/events/avc.h
new file mode 100644
index 0000000..b55fda2
--- /dev/null
+++ b/include/trace/events/avc.h
@@ -0,0 +1,53 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Authors:	Thiébaud Weksteen <tweek@google.com>
+ *		Peter Enderborg <Peter.Enderborg@sony.com>
+ */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM avc
+
+#if !defined(_TRACE_SELINUX_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_SELINUX_H
+
+#include <linux/tracepoint.h>
+
+TRACE_EVENT(selinux_audited,
+
+	TP_PROTO(struct selinux_audit_data *sad,
+		char *scontext,
+		char *tcontext,
+		const char *tclass
+	),
+
+	TP_ARGS(sad, scontext, tcontext, tclass),
+
+	TP_STRUCT__entry(
+		__field(u32, requested)
+		__field(u32, denied)
+		__field(u32, audited)
+		__field(int, result)
+		__string(scontext, scontext)
+		__string(tcontext, tcontext)
+		__string(tclass, tclass)
+	),
+
+	TP_fast_assign(
+		__entry->requested	= sad->requested;
+		__entry->denied		= sad->denied;
+		__entry->audited	= sad->audited;
+		__entry->result		= sad->result;
+		__assign_str(tcontext, tcontext);
+		__assign_str(scontext, scontext);
+		__assign_str(tclass, tclass);
+	),
+
+	TP_printk("requested=0x%x denied=0x%x audited=0x%x result=%d scontext=%s tcontext=%s tclass=%s",
+		__entry->requested, __entry->denied, __entry->audited, __entry->result,
+		__get_str(scontext), __get_str(tcontext), __get_str(tclass)
+	)
+);
+
+#endif
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/events/error_report.h b/include/trace/events/error_report.h
new file mode 100644
index 0000000..96f64bf2
--- /dev/null
+++ b/include/trace/events/error_report.h
@@ -0,0 +1,74 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Declarations for error reporting tracepoints.
+ *
+ * Copyright (C) 2021, Google LLC.
+ */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM error_report
+
+#if !defined(_TRACE_ERROR_REPORT_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_ERROR_REPORT_H
+
+#include <linux/tracepoint.h>
+
+#ifndef __ERROR_REPORT_DECLARE_TRACE_ENUMS_ONCE_ONLY
+#define __ERROR_REPORT_DECLARE_TRACE_ENUMS_ONCE_ONLY
+
+enum error_detector {
+	ERROR_DETECTOR_KFENCE,
+	ERROR_DETECTOR_KASAN
+};
+
+#endif /* __ERROR_REPORT_DECLARE_TRACE_ENUMS_ONCE_ONLY */
+
+#define error_detector_list	\
+	EM(ERROR_DETECTOR_KFENCE, "kfence")	\
+	EMe(ERROR_DETECTOR_KASAN, "kasan")
+/* Always end the list with an EMe. */
+
+#undef EM
+#undef EMe
+
+#define EM(a, b)	TRACE_DEFINE_ENUM(a);
+#define EMe(a, b)	TRACE_DEFINE_ENUM(a);
+
+error_detector_list
+
+#undef EM
+#undef EMe
+
+#define EM(a, b) { a, b },
+#define EMe(a, b) { a, b }
+
+#define show_error_detector_list(val) \
+	__print_symbolic(val, error_detector_list)
+
+DECLARE_EVENT_CLASS(error_report_template,
+		    TP_PROTO(enum error_detector error_detector, unsigned long id),
+		    TP_ARGS(error_detector, id),
+		    TP_STRUCT__entry(__field(enum error_detector, error_detector)
+					     __field(unsigned long, id)),
+		    TP_fast_assign(__entry->error_detector = error_detector;
+				   __entry->id = id;),
+		    TP_printk("[%s] %lx",
+			      show_error_detector_list(__entry->error_detector),
+			      __entry->id));
+
+/**
+ * error_report_end - called after printing the error report
+ * @error_detector:	short string describing the error detection tool
+ * @id:			pseudo-unique descriptor identifying the report
+ *			(e.g. the memory access address)
+ *
+ * This event occurs right after a debugging tool finishes printing the error
+ * report.
+ */
+DEFINE_EVENT(error_report_template, error_report_end,
+	     TP_PROTO(enum error_detector error_detector, unsigned long id),
+	     TP_ARGS(error_detector, id));
+
+#endif /* _TRACE_ERROR_REPORT_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/events/f2fs.h b/include/trace/events/f2fs.h
index 1796ff9..9e01204 100644
--- a/include/trace/events/f2fs.h
+++ b/include/trace/events/f2fs.h
@@ -6,6 +6,7 @@
 #define _TRACE_F2FS_H
 
 #include <linux/tracepoint.h>
+#include <uapi/linux/f2fs.h>
 
 #define show_dev(dev)		MAJOR(dev), MINOR(dev)
 #define show_dev_ino(entry)	show_dev(entry->dev), (unsigned long)entry->ino
@@ -49,6 +50,8 @@ TRACE_DEFINE_ENUM(CP_SYNC);
 TRACE_DEFINE_ENUM(CP_RECOVERY);
 TRACE_DEFINE_ENUM(CP_DISCARD);
 TRACE_DEFINE_ENUM(CP_TRIMMED);
+TRACE_DEFINE_ENUM(CP_PAUSE);
+TRACE_DEFINE_ENUM(CP_RESIZE);
 
 #define show_block_type(type)						\
 	__print_symbolic(type,						\
@@ -109,13 +112,15 @@ TRACE_DEFINE_ENUM(CP_TRIMMED);
 
 #define show_alloc_mode(type)						\
 	__print_symbolic(type,						\
-		{ LFS,	"LFS-mode" },					\
-		{ SSR,	"SSR-mode" })
+		{ LFS,		"LFS-mode" },				\
+		{ SSR,		"SSR-mode" },				\
+		{ AT_SSR,	"AT_SSR-mode" })
 
 #define show_victim_policy(type)					\
 	__print_symbolic(type,						\
 		{ GC_GREEDY,	"Greedy" },				\
-		{ GC_CB,	"Cost-Benefit" })
+		{ GC_CB,	"Cost-Benefit" },			\
+		{ GC_AT,	"Age-threshold" })
 
 #define show_cpreason(type)						\
 	__print_flags(type, "|",					\
@@ -124,13 +129,15 @@ TRACE_DEFINE_ENUM(CP_TRIMMED);
 		{ CP_SYNC,	"Sync" },				\
 		{ CP_RECOVERY,	"Recovery" },				\
 		{ CP_DISCARD,	"Discard" },				\
-		{ CP_UMOUNT,	"Umount" },				\
-		{ CP_TRIMMED,	"Trimmed" })
+		{ CP_PAUSE,	"Pause" },				\
+		{ CP_TRIMMED,	"Trimmed" },				\
+		{ CP_RESIZE,	"Resize" })
 
 #define show_fsync_cpreason(type)					\
 	__print_symbolic(type,						\
 		{ CP_NO_NEEDED,		"no needed" },			\
 		{ CP_NON_REGULAR,	"non regular" },		\
+		{ CP_COMPRESSED,	"compressed" },			\
 		{ CP_HARDLINK,		"hardlink" },			\
 		{ CP_SB_NEED_CP,	"sb needs cp" },		\
 		{ CP_WRONG_PINO,	"wrong pino" },			\
@@ -148,6 +155,13 @@ TRACE_DEFINE_ENUM(CP_TRIMMED);
 		{ F2FS_GOING_DOWN_METAFLUSH,	"meta flush" },		\
 		{ F2FS_GOING_DOWN_NEED_FSCK,	"need fsck" })
 
+#define show_compress_algorithm(type)					\
+	__print_symbolic(type,						\
+		{ COMPRESS_LZO,		"LZO" },			\
+		{ COMPRESS_LZ4,		"LZ4" },			\
+		{ COMPRESS_ZSTD,	"ZSTD" },			\
+		{ COMPRESS_LZORLE,	"LZO-RLE" })
+
 struct f2fs_sb_info;
 struct f2fs_io_info;
 struct extent_info;
@@ -1710,6 +1724,239 @@ TRACE_EVENT(f2fs_shutdown,
 		__entry->ret)
 );
 
+DECLARE_EVENT_CLASS(f2fs_zip_start,
+
+	TP_PROTO(struct inode *inode, pgoff_t cluster_idx,
+			unsigned int cluster_size, unsigned char algtype),
+
+	TP_ARGS(inode, cluster_idx, cluster_size, algtype),
+
+	TP_STRUCT__entry(
+		__field(dev_t,	dev)
+		__field(ino_t,	ino)
+		__field(pgoff_t, idx)
+		__field(unsigned int, size)
+		__field(unsigned int, algtype)
+	),
+
+	TP_fast_assign(
+		__entry->dev = inode->i_sb->s_dev;
+		__entry->ino = inode->i_ino;
+		__entry->idx = cluster_idx;
+		__entry->size = cluster_size;
+		__entry->algtype = algtype;
+	),
+
+	TP_printk("dev = (%d,%d), ino = %lu, cluster_idx:%lu, "
+		"cluster_size = %u, algorithm = %s",
+		show_dev_ino(__entry),
+		__entry->idx,
+		__entry->size,
+		show_compress_algorithm(__entry->algtype))
+);
+
+DECLARE_EVENT_CLASS(f2fs_zip_end,
+
+	TP_PROTO(struct inode *inode, pgoff_t cluster_idx,
+			unsigned int compressed_size, int ret),
+
+	TP_ARGS(inode, cluster_idx, compressed_size, ret),
+
+	TP_STRUCT__entry(
+		__field(dev_t,	dev)
+		__field(ino_t,	ino)
+		__field(pgoff_t, idx)
+		__field(unsigned int, size)
+		__field(unsigned int, ret)
+	),
+
+	TP_fast_assign(
+		__entry->dev = inode->i_sb->s_dev;
+		__entry->ino = inode->i_ino;
+		__entry->idx = cluster_idx;
+		__entry->size = compressed_size;
+		__entry->ret = ret;
+	),
+
+	TP_printk("dev = (%d,%d), ino = %lu, cluster_idx:%lu, "
+		"compressed_size = %u, ret = %d",
+		show_dev_ino(__entry),
+		__entry->idx,
+		__entry->size,
+		__entry->ret)
+);
+
+DEFINE_EVENT(f2fs_zip_start, f2fs_compress_pages_start,
+
+	TP_PROTO(struct inode *inode, pgoff_t cluster_idx,
+		unsigned int cluster_size, unsigned char algtype),
+
+	TP_ARGS(inode, cluster_idx, cluster_size, algtype)
+);
+
+DEFINE_EVENT(f2fs_zip_start, f2fs_decompress_pages_start,
+
+	TP_PROTO(struct inode *inode, pgoff_t cluster_idx,
+		unsigned int cluster_size, unsigned char algtype),
+
+	TP_ARGS(inode, cluster_idx, cluster_size, algtype)
+);
+
+DEFINE_EVENT(f2fs_zip_end, f2fs_compress_pages_end,
+
+	TP_PROTO(struct inode *inode, pgoff_t cluster_idx,
+			unsigned int compressed_size, int ret),
+
+	TP_ARGS(inode, cluster_idx, compressed_size, ret)
+);
+
+DEFINE_EVENT(f2fs_zip_end, f2fs_decompress_pages_end,
+
+	TP_PROTO(struct inode *inode, pgoff_t cluster_idx,
+			unsigned int compressed_size, int ret),
+
+	TP_ARGS(inode, cluster_idx, compressed_size, ret)
+);
+
+TRACE_EVENT(f2fs_iostat,
+
+	TP_PROTO(struct f2fs_sb_info *sbi, unsigned long long *iostat),
+
+	TP_ARGS(sbi, iostat),
+
+	TP_STRUCT__entry(
+		__field(dev_t,	dev)
+		__field(unsigned long long,	app_dio)
+		__field(unsigned long long,	app_bio)
+		__field(unsigned long long,	app_wio)
+		__field(unsigned long long,	app_mio)
+		__field(unsigned long long,	fs_dio)
+		__field(unsigned long long,	fs_nio)
+		__field(unsigned long long,	fs_mio)
+		__field(unsigned long long,	fs_gc_dio)
+		__field(unsigned long long,	fs_gc_nio)
+		__field(unsigned long long,	fs_cp_dio)
+		__field(unsigned long long,	fs_cp_nio)
+		__field(unsigned long long,	fs_cp_mio)
+		__field(unsigned long long,	app_drio)
+		__field(unsigned long long,	app_brio)
+		__field(unsigned long long,	app_rio)
+		__field(unsigned long long,	app_mrio)
+		__field(unsigned long long,	fs_drio)
+		__field(unsigned long long,	fs_gdrio)
+		__field(unsigned long long,	fs_cdrio)
+		__field(unsigned long long,	fs_nrio)
+		__field(unsigned long long,	fs_mrio)
+		__field(unsigned long long,	fs_discard)
+	),
+
+	TP_fast_assign(
+		__entry->dev		= sbi->sb->s_dev;
+		__entry->app_dio	= iostat[APP_DIRECT_IO];
+		__entry->app_bio	= iostat[APP_BUFFERED_IO];
+		__entry->app_wio	= iostat[APP_WRITE_IO];
+		__entry->app_mio	= iostat[APP_MAPPED_IO];
+		__entry->fs_dio		= iostat[FS_DATA_IO];
+		__entry->fs_nio		= iostat[FS_NODE_IO];
+		__entry->fs_mio		= iostat[FS_META_IO];
+		__entry->fs_gc_dio	= iostat[FS_GC_DATA_IO];
+		__entry->fs_gc_nio	= iostat[FS_GC_NODE_IO];
+		__entry->fs_cp_dio	= iostat[FS_CP_DATA_IO];
+		__entry->fs_cp_nio	= iostat[FS_CP_NODE_IO];
+		__entry->fs_cp_mio	= iostat[FS_CP_META_IO];
+		__entry->app_drio	= iostat[APP_DIRECT_READ_IO];
+		__entry->app_brio	= iostat[APP_BUFFERED_READ_IO];
+		__entry->app_rio	= iostat[APP_READ_IO];
+		__entry->app_mrio	= iostat[APP_MAPPED_READ_IO];
+		__entry->fs_drio	= iostat[FS_DATA_READ_IO];
+		__entry->fs_gdrio	= iostat[FS_GDATA_READ_IO];
+		__entry->fs_cdrio	= iostat[FS_CDATA_READ_IO];
+		__entry->fs_nrio	= iostat[FS_NODE_READ_IO];
+		__entry->fs_mrio	= iostat[FS_META_READ_IO];
+		__entry->fs_discard	= iostat[FS_DISCARD];
+	),
+
+	TP_printk("dev = (%d,%d), "
+		"app [write=%llu (direct=%llu, buffered=%llu), mapped=%llu], "
+		"fs [data=%llu, node=%llu, meta=%llu, discard=%llu], "
+		"gc [data=%llu, node=%llu], "
+		"cp [data=%llu, node=%llu, meta=%llu], "
+		"app [read=%llu (direct=%llu, buffered=%llu), mapped=%llu], "
+		"fs [data=%llu, (gc_data=%llu, compr_data=%llu), "
+		"node=%llu, meta=%llu]",
+		show_dev(__entry->dev), __entry->app_wio, __entry->app_dio,
+		__entry->app_bio, __entry->app_mio, __entry->fs_dio,
+		__entry->fs_nio, __entry->fs_mio, __entry->fs_discard,
+		__entry->fs_gc_dio, __entry->fs_gc_nio, __entry->fs_cp_dio,
+		__entry->fs_cp_nio, __entry->fs_cp_mio,
+		__entry->app_rio, __entry->app_drio, __entry->app_brio,
+		__entry->app_mrio, __entry->fs_drio, __entry->fs_gdrio,
+		__entry->fs_cdrio, __entry->fs_nrio, __entry->fs_mrio)
+);
+
+TRACE_EVENT(f2fs_bmap,
+
+	TP_PROTO(struct inode *inode, sector_t lblock, sector_t pblock),
+
+	TP_ARGS(inode, lblock, pblock),
+
+	TP_STRUCT__entry(
+		__field(dev_t, dev)
+		__field(ino_t, ino)
+		__field(sector_t, lblock)
+		__field(sector_t, pblock)
+	),
+
+	TP_fast_assign(
+		__entry->dev		= inode->i_sb->s_dev;
+		__entry->ino		= inode->i_ino;
+		__entry->lblock		= lblock;
+		__entry->pblock		= pblock;
+	),
+
+	TP_printk("dev = (%d,%d), ino = %lu, lblock:%lld, pblock:%lld",
+		show_dev_ino(__entry),
+		(unsigned long long)__entry->lblock,
+		(unsigned long long)__entry->pblock)
+);
+
+TRACE_EVENT(f2fs_fiemap,
+
+	TP_PROTO(struct inode *inode, sector_t lblock, sector_t pblock,
+		unsigned long long len, unsigned int flags, int ret),
+
+	TP_ARGS(inode, lblock, pblock, len, flags, ret),
+
+	TP_STRUCT__entry(
+		__field(dev_t, dev)
+		__field(ino_t, ino)
+		__field(sector_t, lblock)
+		__field(sector_t, pblock)
+		__field(unsigned long long, len)
+		__field(unsigned int, flags)
+		__field(int, ret)
+	),
+
+	TP_fast_assign(
+		__entry->dev		= inode->i_sb->s_dev;
+		__entry->ino		= inode->i_ino;
+		__entry->lblock		= lblock;
+		__entry->pblock		= pblock;
+		__entry->len		= len;
+		__entry->flags		= flags;
+		__entry->ret		= ret;
+	),
+
+	TP_printk("dev = (%d,%d), ino = %lu, lblock:%lld, pblock:%lld, "
+		"len:%llu, flags:%u, ret:%d",
+		show_dev_ino(__entry),
+		(unsigned long long)__entry->lblock,
+		(unsigned long long)__entry->pblock,
+		__entry->len,
+		__entry->flags,
+		__entry->ret)
+);
+
 #endif /* _TRACE_F2FS_H */
 
  /* This part must be outside protection */
diff --git a/include/trace/events/gpu_mem.h b/include/trace/events/gpu_mem.h
new file mode 100644
index 0000000..1897822
--- /dev/null
+++ b/include/trace/events/gpu_mem.h
@@ -0,0 +1,57 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * GPU memory trace points
+ *
+ * Copyright (C) 2020 Google, Inc.
+ */
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM gpu_mem
+
+#if !defined(_TRACE_GPU_MEM_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_GPU_MEM_H
+
+#include <linux/tracepoint.h>
+
+/*
+ * The gpu_memory_total event indicates that there's an update to either the
+ * global or process total gpu memory counters.
+ *
+ * This event should be emitted whenever the kernel device driver allocates,
+ * frees, imports, unimports memory in the GPU addressable space.
+ *
+ * @gpu_id: This is the gpu id.
+ *
+ * @pid: Put 0 for global total, while positive pid for process total.
+ *
+ * @size: Virtual size of the allocation in bytes.
+ *
+ */
+TRACE_EVENT(gpu_mem_total,
+
+	TP_PROTO(uint32_t gpu_id, uint32_t pid, uint64_t size),
+
+	TP_ARGS(gpu_id, pid, size),
+
+	TP_STRUCT__entry(
+		__field(uint32_t, gpu_id)
+		__field(uint32_t, pid)
+		__field(uint64_t, size)
+	),
+
+	TP_fast_assign(
+		__entry->gpu_id = gpu_id;
+		__entry->pid = pid;
+		__entry->size = size;
+	),
+
+	TP_printk("gpu_id=%u pid=%u size=%llu",
+		__entry->gpu_id,
+		__entry->pid,
+		__entry->size)
+);
+
+#endif /* _TRACE_GPU_MEM_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/events/kmem.h b/include/trace/events/kmem.h
index 69e8bb8..ad7e642b 100644
--- a/include/trace/events/kmem.h
+++ b/include/trace/events/kmem.h
@@ -316,6 +316,53 @@ TRACE_EVENT(mm_page_alloc_extfrag,
 		__entry->change_ownership)
 );
 
+/*
+ * Required for uniquely and securely identifying mm in rss_stat tracepoint.
+ */
+#ifndef __PTR_TO_HASHVAL
+static unsigned int __maybe_unused mm_ptr_to_hash(const void *ptr)
+{
+	int ret;
+	unsigned long hashval;
+
+	ret = ptr_to_hashval(ptr, &hashval);
+	if (ret)
+		return 0;
+
+	/* The hashed value is only 32-bit */
+	return (unsigned int)hashval;
+}
+#define __PTR_TO_HASHVAL
+#endif
+
+TRACE_EVENT(rss_stat,
+
+	TP_PROTO(struct mm_struct *mm,
+		int member,
+		long count),
+
+	TP_ARGS(mm, member, count),
+
+	TP_STRUCT__entry(
+		__field(unsigned int, mm_id)
+		__field(unsigned int, curr)
+		__field(int, member)
+		__field(long, size)
+	),
+
+	TP_fast_assign(
+		__entry->mm_id = mm_ptr_to_hash(mm);
+		__entry->curr = !!(current->mm == mm);
+		__entry->member = member;
+		__entry->size = (count << PAGE_SHIFT);
+	),
+
+	TP_printk("mm_id=%u curr=%d member=%d size=%ldB",
+		__entry->mm_id,
+		__entry->curr,
+		__entry->member,
+		__entry->size)
+	);
 #endif /* _TRACE_KMEM_H */
 
 /* This part must be outside protection */
diff --git a/include/trace/events/namei.h b/include/trace/events/namei.h
new file mode 100644
index 0000000..e8c3e21
--- /dev/null
+++ b/include/trace/events/namei.h
@@ -0,0 +1,42 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM namei
+
+#if !defined(_TRACE_INODEPATH_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_INODEPATH_H
+
+#include <linux/types.h>
+#include <linux/tracepoint.h>
+#include <linux/mm.h>
+#include <linux/memcontrol.h>
+#include <linux/device.h>
+#include <linux/kdev_t.h>
+
+TRACE_EVENT(inodepath,
+		TP_PROTO(struct inode *inode, char *path),
+
+		TP_ARGS(inode, path),
+
+		TP_STRUCT__entry(
+			/* dev_t and ino_t are arch dependent bit width
+			 * so just use 64-bit
+			 */
+			__field(unsigned long, ino)
+			__field(unsigned long, dev)
+			__string(path, path)
+		),
+
+		TP_fast_assign(
+			__entry->ino = inode->i_ino;
+			__entry->dev = inode->i_sb->s_dev;
+			__assign_str(path, path);
+		),
+
+		TP_printk("dev %d:%d ino=%lu path=%s",
+			MAJOR(__entry->dev), MINOR(__entry->dev),
+			__entry->ino, __get_str(path))
+);
+#endif /* _TRACE_INODEPATH_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
index 420e80e..202676b 100644
--- a/include/trace/events/sched.h
+++ b/include/trace/events/sched.h
@@ -403,6 +403,30 @@ DEFINE_EVENT_SCHEDSTAT(sched_stat_template, sched_stat_blocked,
 	     TP_ARGS(tsk, delay));
 
 /*
+ * Tracepoint for recording the cause of uninterruptible sleep.
+ */
+TRACE_EVENT(sched_blocked_reason,
+
+	TP_PROTO(struct task_struct *tsk),
+
+	TP_ARGS(tsk),
+
+	TP_STRUCT__entry(
+		__field( pid_t,	pid	)
+		__field( void*, caller	)
+		__field( bool, io_wait	)
+	),
+
+	TP_fast_assign(
+		__entry->pid	= tsk->pid;
+		__entry->caller = (void *)get_wchan(tsk);
+		__entry->io_wait = tsk->in_iowait;
+	),
+
+	TP_printk("pid=%d iowait=%d caller=%pS", __entry->pid, __entry->io_wait, __entry->caller)
+);
+
+/*
  * Tracepoint for accounting runtime (time the task is executing
  * on a CPU).
  */
diff --git a/include/trace/events/ufs.h b/include/trace/events/ufs.h
index 5f30073..50654f3 100644
--- a/include/trace/events/ufs.h
+++ b/include/trace/events/ufs.h
@@ -11,6 +11,15 @@
 
 #include <linux/tracepoint.h>
 
+#define str_opcode(opcode)						\
+	__print_symbolic(opcode,					\
+		{ WRITE_16,		"WRITE_16" },			\
+		{ WRITE_10,		"WRITE_10" },			\
+		{ READ_16,		"READ_16" },			\
+		{ READ_10,		"READ_10" },			\
+		{ SYNCHRONIZE_CACHE,	"SYNC" },			\
+		{ UNMAP,		"UNMAP" })
+
 #define UFS_LINK_STATES			\
 	EM(UIC_LINK_OFF_STATE)		\
 	EM(UIC_LINK_ACTIVE_STATE)	\
@@ -215,9 +224,10 @@ DEFINE_EVENT(ufshcd_template, ufshcd_init,
 TRACE_EVENT(ufshcd_command,
 	TP_PROTO(const char *dev_name, const char *str, unsigned int tag,
 			u32 doorbell, int transfer_len, u32 intr, u64 lba,
-			u8 opcode),
+			u8 opcode, u8 group_id),
 
-	TP_ARGS(dev_name, str, tag, doorbell, transfer_len, intr, lba, opcode),
+	TP_ARGS(dev_name, str, tag, doorbell, transfer_len,
+				intr, lba, opcode, group_id),
 
 	TP_STRUCT__entry(
 		__string(dev_name, dev_name)
@@ -228,6 +238,7 @@ TRACE_EVENT(ufshcd_command,
 		__field(u32, intr)
 		__field(u64, lba)
 		__field(u8, opcode)
+		__field(u8, group_id)
 	),
 
 	TP_fast_assign(
@@ -239,13 +250,46 @@ TRACE_EVENT(ufshcd_command,
 		__entry->intr = intr;
 		__entry->lba = lba;
 		__entry->opcode = opcode;
+		__entry->group_id = group_id;
 	),
 
 	TP_printk(
-		"%s: %s: tag: %u, DB: 0x%x, size: %d, IS: %u, LBA: %llu, opcode: 0x%x",
+		"%s: %s: tag: %u, DB: 0x%x, size: %d, IS: %u, LBA: %llu, opcode: 0x%x (%s), group_id: 0x%x",
 		__get_str(str), __get_str(dev_name), __entry->tag,
 		__entry->doorbell, __entry->transfer_len,
-		__entry->intr, __entry->lba, (u32)__entry->opcode
+		__entry->intr, __entry->lba, (u32)__entry->opcode,
+		str_opcode(__entry->opcode), (u32)__entry->group_id
+	)
+);
+
+TRACE_EVENT(ufshcd_uic_command,
+	TP_PROTO(const char *dev_name, const char *str, u32 cmd,
+		 u32 arg1, u32 arg2, u32 arg3),
+
+	TP_ARGS(dev_name, str, cmd, arg1, arg2, arg3),
+
+	TP_STRUCT__entry(
+		__string(dev_name, dev_name)
+		__string(str, str)
+		__field(u32, cmd)
+		__field(u32, arg1)
+		__field(u32, arg2)
+		__field(u32, arg3)
+	),
+
+	TP_fast_assign(
+		__assign_str(dev_name, dev_name);
+		__assign_str(str, str);
+		__entry->cmd = cmd;
+		__entry->arg1 = arg1;
+		__entry->arg2 = arg2;
+		__entry->arg3 = arg3;
+	),
+
+	TP_printk(
+		"%s: %s: cmd: 0x%x, arg1: 0x%x, arg2: 0x%x, arg3: 0x%x",
+		__get_str(str), __get_str(dev_name), __entry->cmd,
+		__entry->arg1, __entry->arg2, __entry->arg3
 	)
 );
 
diff --git a/include/trace/hooks/binder.h b/include/trace/hooks/binder.h
new file mode 100644
index 0000000..4f18859
--- /dev/null
+++ b/include/trace/hooks/binder.h
@@ -0,0 +1,30 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM binder
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH trace/hooks
+#if !defined(_TRACE_HOOK_BINDER_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_BINDER_H
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+/*
+ * Following tracepoints are not exported in tracefs and provide a
+ * mechanism for vendor modules to hook and extend functionality
+ */
+struct binder_transaction;
+struct task_struct;
+DECLARE_HOOK(android_vh_binder_transaction_init,
+	TP_PROTO(struct binder_transaction *t),
+	TP_ARGS(t));
+DECLARE_HOOK(android_vh_binder_set_priority,
+	TP_PROTO(struct binder_transaction *t, struct task_struct *task),
+	TP_ARGS(t, task));
+DECLARE_HOOK(android_vh_binder_restore_priority,
+	TP_PROTO(struct binder_transaction *t, struct task_struct *task),
+	TP_ARGS(t, task));
+
+/* macro versions of hooks are no longer required */
+
+#endif /* _TRACE_HOOK_BINDER_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/debug.h b/include/trace/hooks/debug.h
new file mode 100644
index 0000000..3d309cc
--- /dev/null
+++ b/include/trace/hooks/debug.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM debug
+
+#define TRACE_INCLUDE_PATH trace/hooks
+
+#if !defined(_TRACE_HOOK_DEBUG_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_DEBUG_H
+
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+
+#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS)
+struct pt_regs;
+DECLARE_HOOK(android_vh_ipi_stop,
+	TP_PROTO(struct pt_regs *regs),
+	TP_ARGS(regs))
+#else
+#define trace_android_vh_ipi_stop(regs)
+#define trace_android_vh_ipi_stop_rcuidle(regs)
+#endif
+
+#endif /* _TRACE_HOOK_DEBUG_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/dtask.h b/include/trace/hooks/dtask.h
new file mode 100644
index 0000000..422cb01
--- /dev/null
+++ b/include/trace/hooks/dtask.h
@@ -0,0 +1,45 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM dtask
+#define TRACE_INCLUDE_PATH trace/hooks
+
+#if !defined(_TRACE_HOOK_DTASK_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_DTASK_H
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+/*
+ * Following tracepoints are not exported in tracefs and provide a
+ * mechanism for vendor modules to hook and extend functionality
+ */
+struct mutex;
+DECLARE_HOOK(android_vh_mutex_wait_start,
+	TP_PROTO(struct mutex *lock),
+	TP_ARGS(lock));
+DECLARE_HOOK(android_vh_mutex_wait_finish,
+	TP_PROTO(struct mutex *lock),
+	TP_ARGS(lock));
+
+struct rw_semaphore;
+DECLARE_HOOK(android_vh_rwsem_read_wait_start,
+	TP_PROTO(struct rw_semaphore *sem),
+	TP_ARGS(sem));
+DECLARE_HOOK(android_vh_rwsem_read_wait_finish,
+	TP_PROTO(struct rw_semaphore *sem),
+	TP_ARGS(sem));
+DECLARE_HOOK(android_vh_rwsem_write_wait_start,
+	TP_PROTO(struct rw_semaphore *sem),
+	TP_ARGS(sem));
+DECLARE_HOOK(android_vh_rwsem_write_wait_finish,
+	TP_PROTO(struct rw_semaphore *sem),
+	TP_ARGS(sem));
+
+struct task_struct;
+DECLARE_HOOK(android_vh_sched_show_task,
+	TP_PROTO(struct task_struct *task),
+	TP_ARGS(task));
+
+/* macro versions of hooks are no longer required */
+
+#endif /* _TRACE_HOOK_DTASK_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/futex.h b/include/trace/hooks/futex.h
new file mode 100644
index 0000000..0692dd6
--- /dev/null
+++ b/include/trace/hooks/futex.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM futex
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH trace/hooks
+#if !defined(_TRACE_HOOK_FUTEX_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_FUTEX_H
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+#include <linux/plist.h>
+/*
+ * Following tracepoints are not exported in tracefs and provide a
+ * mechanism for vendor modules to hook and extend functionality
+ */
+DECLARE_HOOK(android_vh_alter_futex_plist_add,
+	TP_PROTO(struct plist_node *node,
+		 struct plist_head *head,
+		 bool *already_on_hb),
+	TP_ARGS(node, head, already_on_hb));
+
+/* macro versions of hooks are no longer required */
+
+#endif /* _TRACE_HOOK_FUTEX_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/net.h b/include/trace/hooks/net.h
new file mode 100644
index 0000000..31e0f21
--- /dev/null
+++ b/include/trace/hooks/net.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM net
+#define TRACE_INCLUDE_PATH trace/hooks
+
+#if !defined(_TRACE_HOOK_NET_VH_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_NET_VH_H
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+
+struct packet_type;
+struct list_head;
+struct sk_buff;
+DECLARE_HOOK(android_vh_ptype_head,
+	TP_PROTO(const struct packet_type *pt, struct list_head *vendor_pt),
+	TP_ARGS(pt, vendor_pt));
+DECLARE_HOOK(android_vh_kfree_skb,
+	TP_PROTO(struct sk_buff *skb), TP_ARGS(skb));
+
+/* macro versions of hooks are no longer required */
+
+#endif /* _TRACE_HOOK_NET_VH_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/rwsem.h b/include/trace/hooks/rwsem.h
new file mode 100644
index 0000000..4ec420d
--- /dev/null
+++ b/include/trace/hooks/rwsem.h
@@ -0,0 +1,34 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM rwsem
+#define TRACE_INCLUDE_PATH trace/hooks
+#if !defined(_TRACE_HOOK_RWSEM_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_RWSEM_H
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+/*
+ * Following tracepoints are not exported in tracefs and provide a
+ * mechanism for vendor modules to hook and extend functionality
+ */
+struct rw_semaphore;
+struct rwsem_waiter;
+DECLARE_HOOK(android_vh_rwsem_init,
+	TP_PROTO(struct rw_semaphore *sem),
+	TP_ARGS(sem));
+DECLARE_HOOK(android_vh_rwsem_wake,
+	TP_PROTO(struct rw_semaphore *sem),
+	TP_ARGS(sem));
+DECLARE_HOOK(android_vh_rwsem_write_finished,
+	TP_PROTO(struct rw_semaphore *sem),
+	TP_ARGS(sem));
+DECLARE_HOOK(android_vh_alter_rwsem_list_add,
+	TP_PROTO(struct rwsem_waiter *waiter,
+		 struct rw_semaphore *sem,
+		 bool *already_on_list),
+	TP_ARGS(waiter, sem, already_on_list));
+
+/* macro versions of hooks are no longer required */
+
+#endif /* _TRACE_HOOK_RWSEM_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h
new file mode 100644
index 0000000..ed5b113
--- /dev/null
+++ b/include/trace/hooks/sched.h
@@ -0,0 +1,89 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM sched
+#define TRACE_INCLUDE_PATH trace/hooks
+#if !defined(_TRACE_HOOK_SCHED_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_SCHED_H
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+/*
+ * Following tracepoints are not exported in tracefs and provide a
+ * mechanism for vendor modules to hook and extend functionality
+ */
+struct task_struct;
+DECLARE_RESTRICTED_HOOK(android_rvh_select_task_rq_fair,
+	TP_PROTO(struct task_struct *p, int prev_cpu, int sd_flag, int wake_flags, int *new_cpu),
+	TP_ARGS(p, prev_cpu, sd_flag, wake_flags, new_cpu), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_select_task_rq_rt,
+	TP_PROTO(struct task_struct *p, int prev_cpu, int sd_flag, int wake_flags, int *new_cpu),
+	TP_ARGS(p, prev_cpu, sd_flag, wake_flags, new_cpu), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_select_fallback_rq,
+	TP_PROTO(int cpu, struct task_struct *p, int *new_cpu),
+	TP_ARGS(cpu, p, new_cpu), 1);
+
+struct rq;
+DECLARE_HOOK(android_vh_scheduler_tick,
+	TP_PROTO(struct rq *rq),
+	TP_ARGS(rq));
+
+DECLARE_RESTRICTED_HOOK(android_rvh_enqueue_task,
+	TP_PROTO(struct rq *rq, struct task_struct *p),
+	TP_ARGS(rq, p), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_dequeue_task,
+	TP_PROTO(struct rq *rq, struct task_struct *p),
+	TP_ARGS(rq, p), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_can_migrate_task,
+	TP_PROTO(struct task_struct *p, int dst_cpu, int *can_migrate),
+	TP_ARGS(p, dst_cpu, can_migrate), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_find_lowest_rq,
+	TP_PROTO(struct task_struct *p, struct cpumask *local_cpu_mask,
+			int *lowest_cpu),
+	TP_ARGS(p, local_cpu_mask, lowest_cpu), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_prepare_prio_fork,
+	TP_PROTO(struct task_struct *p),
+	TP_ARGS(p), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_finish_prio_fork,
+	TP_PROTO(struct task_struct *p),
+	TP_ARGS(p), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_rtmutex_prepare_setprio,
+	TP_PROTO(struct task_struct *p, struct task_struct *pi_task),
+	TP_ARGS(p, pi_task), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_set_user_nice,
+	TP_PROTO(struct task_struct *p, long *nice),
+	TP_ARGS(p, nice), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_setscheduler,
+	TP_PROTO(struct task_struct *p),
+	TP_ARGS(p), 1);
+
+struct sched_group;
+DECLARE_RESTRICTED_HOOK(android_rvh_find_busiest_group,
+	TP_PROTO(struct sched_group *busiest, struct rq *dst_rq, int *out_balance),
+		TP_ARGS(busiest, dst_rq, out_balance), 1);
+
+DECLARE_HOOK(android_vh_map_util_freq,
+	TP_PROTO(unsigned long util, unsigned long freq,
+		unsigned long cap, unsigned long *next_freq),
+	TP_ARGS(util, freq, cap, next_freq));
+
+struct em_perf_domain;
+DECLARE_HOOK(android_vh_em_pd_energy,
+	TP_PROTO(struct em_perf_domain *pd,
+		unsigned long max_util, unsigned long sum_util,
+		unsigned long *energy),
+	TP_ARGS(pd, max_util, sum_util, energy));
+
+/* macro versions of hooks are no longer required */
+
+#endif /* _TRACE_HOOK_SCHED_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/sysrqcrash.h b/include/trace/hooks/sysrqcrash.h
new file mode 100644
index 0000000..d163f89
--- /dev/null
+++ b/include/trace/hooks/sysrqcrash.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM sysrqcrash
+#define TRACE_INCLUDE_PATH trace/hooks
+
+#if !defined(_TRACE_HOOK_SYSRQCRASH_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_SYSRQCRASH_H
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+/*
+ * Following tracepoints are not exported in tracefs and provide a
+ * mechanism for vendor modules to hook and extend functionality
+ */
+DECLARE_HOOK(android_vh_sysrq_crash,
+	TP_PROTO(void *data),
+	TP_ARGS(data));
+
+/* macro versions of hooks are no longer required */
+
+#endif /* _TRACE_HOOK_SYSRQCRASH_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/topology.h b/include/trace/hooks/topology.h
new file mode 100644
index 0000000..be180b5
--- /dev/null
+++ b/include/trace/hooks/topology.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM topology
+
+#define TRACE_INCLUDE_PATH trace/hooks
+
+#if !defined(_TRACE_HOOK_TOPOLOGY_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_TOPOLOGY_H
+
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+#include <linux/cpumask.h>
+
+DECLARE_HOOK(android_vh_arch_set_freq_scale,
+	TP_PROTO(struct cpumask *cpus, unsigned long freq, unsigned long max,
+		unsigned long *scale),
+	TP_ARGS(cpus, freq, max, scale));
+
+/* macro versions of hooks are no longer required */
+
+#endif /* _TRACE_HOOK_TOPOLOGY_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/vendor_hooks.h b/include/trace/hooks/vendor_hooks.h
new file mode 100644
index 0000000..de7f843
--- /dev/null
+++ b/include/trace/hooks/vendor_hooks.h
@@ -0,0 +1,85 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+/*
+ * Note: we intentionally omit include file ifdef protection
+ *  This is due to the way trace events work. If a file includes two
+ *  trace event headers under one "CREATE_TRACE_POINTS" the first include
+ *  will override the DECLARE_RESTRICTED_HOOK and break the second include.
+ */
+
+#include <linux/tracepoint.h>
+
+#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS)
+
+#define DECLARE_HOOK DECLARE_TRACE
+
+#ifdef TRACE_HEADER_MULTI_READ
+
+#undef DECLARE_RESTRICTED_HOOK
+#define DECLARE_RESTRICTED_HOOK(name, proto, args, cond) \
+	DEFINE_TRACE(name)
+
+
+/* prevent additional recursion */
+#undef TRACE_HEADER_MULTI_READ
+#else /* TRACE_HEADER_MULTI_READ */
+
+#define DO_HOOK(tp, proto, args, cond)					\
+	do {								\
+		struct tracepoint_func *it_func_ptr;			\
+		void *it_func;						\
+		void *__data;						\
+									\
+		if (!(cond))						\
+			return;						\
+									\
+		it_func_ptr = (tp)->funcs;				\
+		if (it_func_ptr) {					\
+			it_func = (it_func_ptr)->func;			\
+			__data = (it_func_ptr)->data;			\
+			((void(*)(proto))(it_func))(args);		\
+			WARN_ON(((++it_func_ptr)->func));		\
+		}							\
+	} while (0)
+
+#define __DECLARE_HOOK(name, proto, args, cond, data_proto, data_args)	\
+	extern struct tracepoint __tracepoint_##name;			\
+	static inline void __nocfi trace_##name(proto)			\
+	{								\
+		if (static_key_false(&__tracepoint_##name.key))		\
+			DO_HOOK(&__tracepoint_##name,			\
+				TP_PROTO(data_proto),			\
+				TP_ARGS(data_args),			\
+				TP_CONDITION(cond));			\
+	}								\
+	static inline bool						\
+	trace_##name##_enabled(void)					\
+	{								\
+		return static_key_false(&__tracepoint_##name.key);	\
+	}								\
+	static inline int						\
+	register_trace_##name(void (*probe)(data_proto), void *data) 	\
+	{								\
+		/* only allow a single attachment */			\
+		if (trace_##name##_enabled())				\
+			return -EBUSY;					\
+		return tracepoint_probe_register(&__tracepoint_##name,	\
+						(void *)probe, data);	\
+	}								\
+	/* vendor hooks cannot be unregistered */			\
+
+#undef DECLARE_RESTRICTED_HOOK
+#define DECLARE_RESTRICTED_HOOK(name, proto, args, cond)		\
+	__DECLARE_HOOK(name, PARAMS(proto), PARAMS(args),		\
+			cond,						\
+			PARAMS(void *__data, proto),			\
+			PARAMS(__data, args))
+
+#endif /* TRACE_HEADER_MULTI_READ */
+
+#else /* !CONFIG_TRACEPOINTS || !CONFIG_ANDROID_VENDOR_HOOKS */
+/* suppress trace hooks */
+#define DECLARE_HOOK DECLARE_EVENT_NOP
+#define DECLARE_RESTRICTED_HOOK(name, proto, args, cond)		\
+	DECLARE_EVENT_NOP(name, PARAMS(proto), PARAMS(args))
+#endif
diff --git a/include/trace/hooks/wqlockup.h b/include/trace/hooks/wqlockup.h
new file mode 100644
index 0000000..21e23ad
--- /dev/null
+++ b/include/trace/hooks/wqlockup.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM wqlockup
+#define TRACE_INCLUDE_PATH trace/hooks
+
+#if !defined(_TRACE_HOOK_WQLOCKUP_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_WQLOCKUP_H
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+/*
+ * Following tracepoints are not exported in tracefs and provide a
+ * mechanism for vendor modules to hook and extend functionality
+ */
+DECLARE_HOOK(android_vh_wq_lockup_pool,
+	TP_PROTO(int cpu, unsigned long pool_ts),
+	TP_ARGS(cpu, pool_ts));
+
+/* macro versions of hooks are no longer required */
+
+#endif /* _TRACE_HOOK_WQLOCKUP_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/uapi/asm-generic/unistd.h b/include/uapi/asm-generic/unistd.h
index 1fc8faa..674a0b0 100644
--- a/include/uapi/asm-generic/unistd.h
+++ b/include/uapi/asm-generic/unistd.h
@@ -850,9 +850,11 @@ __SYSCALL(__NR_pidfd_open, sys_pidfd_open)
 #define __NR_clone3 435
 __SYSCALL(__NR_clone3, sys_clone3)
 #endif
+#define __NR_process_madvise 440
+__SYSCALL(__NR_process_madvise, sys_process_madvise)
 
 #undef __NR_syscalls
-#define __NR_syscalls 436
+#define __NR_syscalls 441
 
 /*
  * 32 bit systems traditionally used different
diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h
index 3feeaa3..32b4d1e 100644
--- a/include/uapi/drm/drm_fourcc.h
+++ b/include/uapi/drm/drm_fourcc.h
@@ -447,6 +447,30 @@ extern "C" {
  */
 #define DRM_FORMAT_MOD_QCOM_COMPRESSED	fourcc_mod_code(QCOM, 1)
 
+/*
+ * QTI DX Format
+ *
+ * Refers to a DX variant of the base format.
+ * Implementation may be platform and base-format specific.
+ */
+#define DRM_FORMAT_MOD_QCOM_DX	fourcc_mod_code(QCOM, 0x2)
+
+/*
+ * QTI Tight Format
+ *
+ * Refers to a tightly packed variant of the base format.
+ * Implementation may be platform and base-format specific.
+ */
+#define DRM_FORMAT_MOD_QCOM_TIGHT	fourcc_mod_code(QCOM, 0x4)
+
+/*
+ * QTI Tile Format
+ *
+ * Refers to a tile variant of the base format.
+ * Implementation may be platform and base-format specific.
+ */
+#define DRM_FORMAT_MOD_QCOM_TILE	fourcc_mod_code(QCOM, 0x8)
+
 /* Vivante framebuffer modifiers */
 
 /*
diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
index 735c8cf..7043c57 100644
--- a/include/uapi/drm/drm_mode.h
+++ b/include/uapi/drm/drm_mode.h
@@ -41,7 +41,6 @@ extern "C" {
  * Userspace can refer to these structure definitions and UAPI formats
  * to communicate to driver
  */
-
 #define DRM_CONNECTOR_NAME_LEN	32
 #define DRM_DISPLAY_MODE_LEN	32
 #define DRM_PROP_NAME_LEN	32
@@ -124,6 +123,13 @@ extern "C" {
 #define  DRM_MODE_FLAG_PIC_AR_256_135 \
 			(DRM_MODE_PICTURE_ASPECT_256_135<<19)
 
+#define  DRM_MODE_FLAG_SUPPORTS_RGB		(1<<27)
+
+#define  DRM_MODE_FLAG_SUPPORTS_YUV		(1<<28)
+#define  DRM_MODE_FLAG_VID_MODE_PANEL	(1<<29)
+#define  DRM_MODE_FLAG_CMD_MODE_PANEL	(1<<30)
+#define  DRM_MODE_FLAG_SEAMLESS			(1<<31)
+
 #define  DRM_MODE_FLAG_ALL	(DRM_MODE_FLAG_PHSYNC |		\
 				 DRM_MODE_FLAG_NHSYNC |		\
 				 DRM_MODE_FLAG_PVSYNC |		\
@@ -136,6 +142,10 @@ extern "C" {
 				 DRM_MODE_FLAG_HSKEW |		\
 				 DRM_MODE_FLAG_DBLCLK |		\
 				 DRM_MODE_FLAG_CLKDIV2 |	\
+				 DRM_MODE_FLAG_SUPPORTS_RGB |	\
+				 DRM_MODE_FLAG_SUPPORTS_YUV |	\
+				 DRM_MODE_FLAG_VID_MODE_PANEL |	\
+				 DRM_MODE_FLAG_CMD_MODE_PANEL |	\
 				 DRM_MODE_FLAG_3D_MASK)
 
 /* DPMS flags */
@@ -485,6 +495,7 @@ struct drm_mode_fb_cmd {
 
 #define DRM_MODE_FB_INTERLACED	(1<<0) /* for interlaced framebuffers */
 #define DRM_MODE_FB_MODIFIERS	(1<<1) /* enables ->modifer[] */
+#define DRM_MODE_FB_SECURE	(1<<2) /* for secure framebuffers */
 
 struct drm_mode_fb_cmd2 {
 	__u32 fb_id;
diff --git a/include/uapi/linux/android/binder.h b/include/uapi/linux/android/binder.h
index 7317808..25d12f7 100644
--- a/include/uapi/linux/android/binder.h
+++ b/include/uapi/linux/android/binder.h
@@ -38,11 +38,59 @@ enum {
 	BINDER_TYPE_PTR		= B_PACK_CHARS('p', 't', '*', B_TYPE_LARGE),
 };
 
-enum {
+/**
+ * enum flat_binder_object_shifts: shift values for flat_binder_object_flags
+ * @FLAT_BINDER_FLAG_SCHED_POLICY_SHIFT: shift for getting scheduler policy.
+ *
+ */
+enum flat_binder_object_shifts {
+	FLAT_BINDER_FLAG_SCHED_POLICY_SHIFT = 9,
+};
+
+/**
+ * enum flat_binder_object_flags - flags for use in flat_binder_object.flags
+ */
+enum flat_binder_object_flags {
+	/**
+	 * @FLAT_BINDER_FLAG_PRIORITY_MASK: bit-mask for min scheduler priority
+	 *
+	 * These bits can be used to set the minimum scheduler priority
+	 * at which transactions into this node should run. Valid values
+	 * in these bits depend on the scheduler policy encoded in
+	 * @FLAT_BINDER_FLAG_SCHED_POLICY_MASK.
+	 *
+	 * For SCHED_NORMAL/SCHED_BATCH, the valid range is between [-20..19]
+	 * For SCHED_FIFO/SCHED_RR, the value can run between [1..99]
+	 */
 	FLAT_BINDER_FLAG_PRIORITY_MASK = 0xff,
+	/**
+	 * @FLAT_BINDER_FLAG_ACCEPTS_FDS: whether the node accepts fds.
+	 */
 	FLAT_BINDER_FLAG_ACCEPTS_FDS = 0x100,
 
 	/**
+	 * @FLAT_BINDER_FLAG_SCHED_POLICY_MASK: bit-mask for scheduling policy
+	 *
+	 * These two bits can be used to set the min scheduling policy at which
+	 * transactions on this node should run. These match the UAPI
+	 * scheduler policy values, eg:
+	 * 00b: SCHED_NORMAL
+	 * 01b: SCHED_FIFO
+	 * 10b: SCHED_RR
+	 * 11b: SCHED_BATCH
+	 */
+	FLAT_BINDER_FLAG_SCHED_POLICY_MASK =
+		3U << FLAT_BINDER_FLAG_SCHED_POLICY_SHIFT,
+
+	/**
+	 * @FLAT_BINDER_FLAG_INHERIT_RT: whether the node inherits RT policy
+	 *
+	 * Only when set, calls into this node will inherit a real-time
+	 * scheduling policy from the caller (for synchronous transactions).
+	 */
+	FLAT_BINDER_FLAG_INHERIT_RT = 0x800,
+
+	/**
 	 * @FLAT_BINDER_FLAG_TXN_SECURITY_CTX: request security contexts
 	 *
 	 * Only when set, causes senders to include their security
diff --git a/include/uapi/linux/blkzoned.h b/include/uapi/linux/blkzoned.h
index 498eec8..42c3366 100644
--- a/include/uapi/linux/blkzoned.h
+++ b/include/uapi/linux/blkzoned.h
@@ -74,6 +74,15 @@ enum blk_zone_cond {
 };
 
 /**
+ * enum blk_zone_report_flags - Feature flags of reported zone descriptors.
+ *
+ * @BLK_ZONE_REP_CAPACITY: Zone descriptor has capacity field.
+ */
+enum blk_zone_report_flags {
+	BLK_ZONE_REP_CAPACITY	= (1 << 0),
+};
+
+/**
  * struct blk_zone - Zone descriptor for BLKREPORTZONE ioctl.
  *
  * @start: Zone start in 512 B sector units
@@ -99,7 +108,9 @@ struct blk_zone {
 	__u8	cond;		/* Zone condition */
 	__u8	non_seq;	/* Non-sequential write resources active */
 	__u8	reset;		/* Reset write pointer recommended */
-	__u8	reserved[36];
+	__u8	resv[4];
+	__u64	capacity;	/* Zone capacity in number of sectors */
+	__u8	reserved[24];
 };
 
 /**
@@ -115,14 +126,16 @@ struct blk_zone {
 struct blk_zone_report {
 	__u64		sector;
 	__u32		nr_zones;
-	__u8		reserved[4];
+	__u32		flags;
 	struct blk_zone zones[0];
 };
 
 /**
- * struct blk_zone_range - BLKRESETZONE ioctl request
- * @sector: starting sector of the first zone to issue reset write pointer
- * @nr_sectors: Total number of sectors of 1 or more zones to reset
+ * struct blk_zone_range - BLKRESETZONE/BLKOPENZONE/
+ *                         BLKCLOSEZONE/BLKFINISHZONE ioctl
+ *                         requests
+ * @sector: Starting sector of the first zone to operate on.
+ * @nr_sectors: Total number of sectors of all zones to operate on.
  */
 struct blk_zone_range {
 	__u64		sector;
@@ -139,10 +152,19 @@ struct blk_zone_range {
  *                sector range. The sector range must be zone aligned.
  * @BLKGETZONESZ: Get the device zone size in number of 512 B sectors.
  * @BLKGETNRZONES: Get the total number of zones of the device.
+ * @BLKOPENZONE: Open the zones in the specified sector range.
+ *               The 512 B sector range must be zone aligned.
+ * @BLKCLOSEZONE: Close the zones in the specified sector range.
+ *                The 512 B sector range must be zone aligned.
+ * @BLKFINISHZONE: Mark the zones as full in the specified sector range.
+ *                 The 512 B sector range must be zone aligned.
  */
 #define BLKREPORTZONE	_IOWR(0x12, 130, struct blk_zone_report)
 #define BLKRESETZONE	_IOW(0x12, 131, struct blk_zone_range)
 #define BLKGETZONESZ	_IOR(0x12, 132, __u32)
 #define BLKGETNRZONES	_IOR(0x12, 133, __u32)
+#define BLKOPENZONE	_IOW(0x12, 134, struct blk_zone_range)
+#define BLKCLOSEZONE	_IOW(0x12, 135, struct blk_zone_range)
+#define BLKFINISHZONE	_IOW(0x12, 136, struct blk_zone_range)
 
 #endif /* _UAPI_BLKZONED_H */
diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
index 8649422..fd936ab 100644
--- a/include/uapi/linux/bpf.h
+++ b/include/uapi/linux/bpf.h
@@ -570,6 +570,8 @@ union bpf_attr {
  * u64 bpf_ktime_get_ns(void)
  * 	Description
  * 		Return the time elapsed since system boot, in nanoseconds.
+ * 		Does not include time the system was suspended.
+ * 		See: clock_gettime(CLOCK_MONOTONIC)
  * 	Return
  * 		Current *ktime*.
  *
@@ -2750,6 +2752,14 @@ union bpf_attr {
  *		**-EOPNOTSUPP** kernel configuration does not enable SYN cookies
  *
  *		**-EPROTONOSUPPORT** IP packet version is not 4 or 6
+ *
+ * u64 bpf_ktime_get_boot_ns(void)
+ * 	Description
+ * 		Return the time elapsed since system boot, in nanoseconds.
+ * 		Does include the time the system was suspended.
+ * 		See: clock_gettime(CLOCK_BOOTTIME)
+ * 	Return
+ * 		Current *ktime*.
  */
 #define __BPF_FUNC_MAPPER(FN)		\
 	FN(unspec),			\
@@ -2862,7 +2872,22 @@ union bpf_attr {
 	FN(sk_storage_get),		\
 	FN(sk_storage_delete),		\
 	FN(send_signal),		\
-	FN(tcp_gen_syncookie),
+	FN(tcp_gen_syncookie),		\
+	FN(skb_output),			\
+	FN(probe_read_user),		\
+	FN(probe_read_kernel),		\
+	FN(probe_read_user_str),	\
+	FN(probe_read_kernel_str),	\
+	FN(tcp_send_ack),		\
+	FN(send_signal_thread),		\
+	FN(jiffies64),			\
+	FN(read_branch_records),	\
+	FN(get_ns_current_pid_tgid),	\
+	FN(xdp_output),			\
+	FN(get_netns_cookie),		\
+	FN(get_current_ancestor_cgroup_id),	\
+	FN(sk_assign),			\
+	FN(ktime_get_boot_ns),
 
 /* integer value in 'imm' field of BPF_CALL instruction selects which helper
  * function eBPF program intends to call
@@ -3005,6 +3030,7 @@ struct __sk_buff {
 	__u32 wire_len;
 	__u32 gso_segs;
 	__bpf_md_ptr(struct bpf_sock *, sk);
+	__u32 gso_size;
 };
 
 struct bpf_tunnel_key {
diff --git a/include/uapi/linux/dm-user.h b/include/uapi/linux/dm-user.h
new file mode 100644
index 0000000..6d8f535b
--- /dev/null
+++ b/include/uapi/linux/dm-user.h
@@ -0,0 +1,68 @@
+/* SPDX-License-Identifier: LGPL-2.0+ WITH Linux-syscall-note */
+/*
+ * Copyright (C) 2020 Google, Inc
+ * Copyright (C) 2020 Palmer Dabbelt <palmerdabbelt@google.com>
+ */
+
+#ifndef _LINUX_DM_USER_H
+#define _LINUX_DM_USER_H
+
+#include <linux/types.h>
+
+/*
+ * dm-user proxies device mapper ops between the kernel and userspace.  It's
+ * essentially just an RPC mechanism: all kernel calls create a request,
+ * userspace handles that with a response.  Userspace obtains requests via
+ * read() and provides responses via write().
+ *
+ * See Documentation/block/dm-user.rst for more information.
+ */
+
+#define DM_USER_REQ_MAP_READ 0
+#define DM_USER_REQ_MAP_WRITE 1
+#define DM_USER_REQ_MAP_FLUSH 2
+#define DM_USER_REQ_MAP_DISCARD 3
+#define DM_USER_REQ_MAP_SECURE_ERASE 4
+#define DM_USER_REQ_MAP_WRITE_SAME 5
+#define DM_USER_REQ_MAP_WRITE_ZEROES 6
+#define DM_USER_REQ_MAP_ZONE_OPEN 7
+#define DM_USER_REQ_MAP_ZONE_CLOSE 8
+#define DM_USER_REQ_MAP_ZONE_FINISH 9
+#define DM_USER_REQ_MAP_ZONE_APPEND 10
+#define DM_USER_REQ_MAP_ZONE_RESET 11
+#define DM_USER_REQ_MAP_ZONE_RESET_ALL 12
+
+#define DM_USER_REQ_MAP_FLAG_FAILFAST_DEV 0x00001
+#define DM_USER_REQ_MAP_FLAG_FAILFAST_TRANSPORT 0x00002
+#define DM_USER_REQ_MAP_FLAG_FAILFAST_DRIVER 0x00004
+#define DM_USER_REQ_MAP_FLAG_SYNC 0x00008
+#define DM_USER_REQ_MAP_FLAG_META 0x00010
+#define DM_USER_REQ_MAP_FLAG_PRIO 0x00020
+#define DM_USER_REQ_MAP_FLAG_NOMERGE 0x00040
+#define DM_USER_REQ_MAP_FLAG_IDLE 0x00080
+#define DM_USER_REQ_MAP_FLAG_INTEGRITY 0x00100
+#define DM_USER_REQ_MAP_FLAG_FUA 0x00200
+#define DM_USER_REQ_MAP_FLAG_PREFLUSH 0x00400
+#define DM_USER_REQ_MAP_FLAG_RAHEAD 0x00800
+#define DM_USER_REQ_MAP_FLAG_BACKGROUND 0x01000
+#define DM_USER_REQ_MAP_FLAG_NOWAIT 0x02000
+#define DM_USER_REQ_MAP_FLAG_CGROUP_PUNT 0x04000
+#define DM_USER_REQ_MAP_FLAG_NOUNMAP 0x08000
+#define DM_USER_REQ_MAP_FLAG_HIPRI 0x10000
+#define DM_USER_REQ_MAP_FLAG_DRV 0x20000
+#define DM_USER_REQ_MAP_FLAG_SWAP 0x40000
+
+#define DM_USER_RESP_SUCCESS 0
+#define DM_USER_RESP_ERROR 1
+#define DM_USER_RESP_UNSUPPORTED 2
+
+struct dm_user_message {
+	__u64 seq;
+	__u64 type;
+	__u64 flags;
+	__u64 sector;
+	__u64 len;
+	__u8 buf[];
+};
+
+#endif
diff --git a/include/uapi/linux/dma-heap.h b/include/uapi/linux/dma-heap.h
new file mode 100644
index 0000000..6f84fa0
--- /dev/null
+++ b/include/uapi/linux/dma-heap.h
@@ -0,0 +1,53 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/*
+ * DMABUF Heaps Userspace API
+ *
+ * Copyright (C) 2011 Google, Inc.
+ * Copyright (C) 2019 Linaro Ltd.
+ */
+#ifndef _UAPI_LINUX_DMABUF_POOL_H
+#define _UAPI_LINUX_DMABUF_POOL_H
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/**
+ * DOC: DMABUF Heaps Userspace API
+ */
+
+/* Valid FD_FLAGS are O_CLOEXEC, O_RDONLY, O_WRONLY, O_RDWR */
+#define DMA_HEAP_VALID_FD_FLAGS (O_CLOEXEC | O_ACCMODE)
+
+/* Currently no heap flags */
+#define DMA_HEAP_VALID_HEAP_FLAGS (0)
+
+/**
+ * struct dma_heap_allocation_data - metadata passed from userspace for
+ *                                      allocations
+ * @len:		size of the allocation
+ * @fd:			will be populated with a fd which provides the
+ *			handle to the allocated dma-buf
+ * @fd_flags:		file descriptor flags used when allocating
+ * @heap_flags:		flags passed to heap
+ *
+ * Provided by userspace as an argument to the ioctl
+ */
+struct dma_heap_allocation_data {
+	__u64 len;
+	__u32 fd;
+	__u32 fd_flags;
+	__u64 heap_flags;
+};
+
+#define DMA_HEAP_IOC_MAGIC		'H'
+
+/**
+ * DOC: DMA_HEAP_IOCTL_ALLOC - allocate memory from pool
+ *
+ * Takes a dma_heap_allocation_data struct and returns it with the fd field
+ * populated with the dmabuf handle of the allocation.
+ */
+#define DMA_HEAP_IOCTL_ALLOC	_IOWR(DMA_HEAP_IOC_MAGIC, 0x0,\
+				      struct dma_heap_allocation_data)
+
+#endif /* _UAPI_LINUX_DMABUF_POOL_H */
diff --git a/include/uapi/linux/f2fs.h b/include/uapi/linux/f2fs.h
new file mode 100644
index 0000000..352a822
--- /dev/null
+++ b/include/uapi/linux/f2fs.h
@@ -0,0 +1,98 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+
+#ifndef _UAPI_LINUX_F2FS_H
+#define _UAPI_LINUX_F2FS_H
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+/*
+ * f2fs-specific ioctl commands
+ */
+#define F2FS_IOCTL_MAGIC		0xf5
+#define F2FS_IOC_START_ATOMIC_WRITE	_IO(F2FS_IOCTL_MAGIC, 1)
+#define F2FS_IOC_COMMIT_ATOMIC_WRITE	_IO(F2FS_IOCTL_MAGIC, 2)
+#define F2FS_IOC_START_VOLATILE_WRITE	_IO(F2FS_IOCTL_MAGIC, 3)
+#define F2FS_IOC_RELEASE_VOLATILE_WRITE	_IO(F2FS_IOCTL_MAGIC, 4)
+#define F2FS_IOC_ABORT_VOLATILE_WRITE	_IO(F2FS_IOCTL_MAGIC, 5)
+#define F2FS_IOC_GARBAGE_COLLECT	_IOW(F2FS_IOCTL_MAGIC, 6, __u32)
+#define F2FS_IOC_WRITE_CHECKPOINT	_IO(F2FS_IOCTL_MAGIC, 7)
+#define F2FS_IOC_DEFRAGMENT		_IOWR(F2FS_IOCTL_MAGIC, 8,	\
+						struct f2fs_defragment)
+#define F2FS_IOC_MOVE_RANGE		_IOWR(F2FS_IOCTL_MAGIC, 9,	\
+						struct f2fs_move_range)
+#define F2FS_IOC_FLUSH_DEVICE		_IOW(F2FS_IOCTL_MAGIC, 10,	\
+						struct f2fs_flush_device)
+#define F2FS_IOC_GARBAGE_COLLECT_RANGE	_IOW(F2FS_IOCTL_MAGIC, 11,	\
+						struct f2fs_gc_range)
+#define F2FS_IOC_GET_FEATURES		_IOR(F2FS_IOCTL_MAGIC, 12, __u32)
+#define F2FS_IOC_SET_PIN_FILE		_IOW(F2FS_IOCTL_MAGIC, 13, __u32)
+#define F2FS_IOC_GET_PIN_FILE		_IOR(F2FS_IOCTL_MAGIC, 14, __u32)
+#define F2FS_IOC_PRECACHE_EXTENTS	_IO(F2FS_IOCTL_MAGIC, 15)
+#define F2FS_IOC_RESIZE_FS		_IOW(F2FS_IOCTL_MAGIC, 16, __u64)
+#define F2FS_IOC_GET_COMPRESS_BLOCKS	_IOR(F2FS_IOCTL_MAGIC, 17, __u64)
+#define F2FS_IOC_RELEASE_COMPRESS_BLOCKS				\
+					_IOR(F2FS_IOCTL_MAGIC, 18, __u64)
+#define F2FS_IOC_RESERVE_COMPRESS_BLOCKS				\
+					_IOR(F2FS_IOCTL_MAGIC, 19, __u64)
+#define F2FS_IOC_SEC_TRIM_FILE		_IOW(F2FS_IOCTL_MAGIC, 20,	\
+						struct f2fs_sectrim_range)
+#define F2FS_IOC_GET_COMPRESS_OPTION	_IOR(F2FS_IOCTL_MAGIC, 21,	\
+						struct f2fs_comp_option)
+#define F2FS_IOC_SET_COMPRESS_OPTION	_IOW(F2FS_IOCTL_MAGIC, 22,	\
+						struct f2fs_comp_option)
+#define F2FS_IOC_DECOMPRESS_FILE	_IO(F2FS_IOCTL_MAGIC, 23)
+#define F2FS_IOC_COMPRESS_FILE		_IO(F2FS_IOCTL_MAGIC, 24)
+
+/*
+ * should be same as XFS_IOC_GOINGDOWN.
+ * Flags for going down operation used by FS_IOC_GOINGDOWN
+ */
+#define F2FS_IOC_SHUTDOWN	_IOR('X', 125, __u32)	/* Shutdown */
+#define F2FS_GOING_DOWN_FULLSYNC	0x0	/* going down with full sync */
+#define F2FS_GOING_DOWN_METASYNC	0x1	/* going down with metadata */
+#define F2FS_GOING_DOWN_NOSYNC		0x2	/* going down */
+#define F2FS_GOING_DOWN_METAFLUSH	0x3	/* going down with meta flush */
+#define F2FS_GOING_DOWN_NEED_FSCK	0x4	/* going down to trigger fsck */
+
+/*
+ * Flags used by F2FS_IOC_SEC_TRIM_FILE
+ */
+#define F2FS_TRIM_FILE_DISCARD		0x1	/* send discard command */
+#define F2FS_TRIM_FILE_ZEROOUT		0x2	/* zero out */
+#define F2FS_TRIM_FILE_MASK		0x3
+
+struct f2fs_gc_range {
+	__u32 sync;
+	__u64 start;
+	__u64 len;
+};
+
+struct f2fs_defragment {
+	__u64 start;
+	__u64 len;
+};
+
+struct f2fs_move_range {
+	__u32 dst_fd;		/* destination fd */
+	__u64 pos_in;		/* start position in src_fd */
+	__u64 pos_out;		/* start position in dst_fd */
+	__u64 len;		/* size to move */
+};
+
+struct f2fs_flush_device {
+	__u32 dev_num;		/* device number to flush */
+	__u32 segments;		/* # of segments to flush */
+};
+
+struct f2fs_sectrim_range {
+	__u64 start;
+	__u64 len;
+	__u64 flags;
+};
+
+struct f2fs_comp_option {
+	__u8 algorithm;
+	__u8 log_cluster_size;
+};
+
+#endif /* _UAPI_LINUX_F2FS_H */
diff --git a/include/uapi/linux/fscrypt.h b/include/uapi/linux/fscrypt.h
index b14f436..fceafb5 100644
--- a/include/uapi/linux/fscrypt.h
+++ b/include/uapi/linux/fscrypt.h
@@ -8,6 +8,7 @@
 #ifndef _UAPI_LINUX_FSCRYPT_H
 #define _UAPI_LINUX_FSCRYPT_H
 
+#include <linux/ioctl.h>
 #include <linux/types.h>
 
 /* Encryption policy flags */
@@ -17,6 +18,8 @@
 #define FSCRYPT_POLICY_FLAGS_PAD_32		0x03
 #define FSCRYPT_POLICY_FLAGS_PAD_MASK		0x03
 #define FSCRYPT_POLICY_FLAG_DIRECT_KEY		0x04
+#define FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64	0x08
+#define FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32	0x10
 
 /* Encryption algorithms */
 #define FSCRYPT_MODE_AES_256_XTS		1
@@ -41,7 +44,6 @@ struct fscrypt_policy_v1 {
 	__u8 flags;
 	__u8 master_key_descriptor[FSCRYPT_KEY_DESCRIPTOR_SIZE];
 };
-#define fscrypt_policy	fscrypt_policy_v1
 
 /*
  * Process-subscribed "logon" key description prefix and payload format.
@@ -107,11 +109,25 @@ struct fscrypt_key_specifier {
 	} u;
 };
 
+/*
+ * Payload of Linux keyring key of type "fscrypt-provisioning", referenced by
+ * fscrypt_add_key_arg::key_id as an alternative to fscrypt_add_key_arg::raw.
+ */
+struct fscrypt_provisioning_key_payload {
+	__u32 type;
+	__u32 __reserved;
+	__u8 raw[];
+};
+
 /* Struct passed to FS_IOC_ADD_ENCRYPTION_KEY */
 struct fscrypt_add_key_arg {
 	struct fscrypt_key_specifier key_spec;
 	__u32 raw_size;
-	__u32 __reserved[9];
+	__u32 key_id;
+	__u32 __reserved[7];
+	/* N.B.: "temporary" flag, not reserved upstream */
+#define __FSCRYPT_ADD_KEY_FLAG_HW_WRAPPED		0x00000001
+	__u32 __flags;
 	__u8 raw[];
 };
 
@@ -141,19 +157,21 @@ struct fscrypt_get_key_status_arg {
 	__u32 __out_reserved[13];
 };
 
-#define FS_IOC_SET_ENCRYPTION_POLICY		_IOR('f', 19, struct fscrypt_policy)
+#define FS_IOC_SET_ENCRYPTION_POLICY		_IOR('f', 19, struct fscrypt_policy_v1)
 #define FS_IOC_GET_ENCRYPTION_PWSALT		_IOW('f', 20, __u8[16])
-#define FS_IOC_GET_ENCRYPTION_POLICY		_IOW('f', 21, struct fscrypt_policy)
+#define FS_IOC_GET_ENCRYPTION_POLICY		_IOW('f', 21, struct fscrypt_policy_v1)
 #define FS_IOC_GET_ENCRYPTION_POLICY_EX		_IOWR('f', 22, __u8[9]) /* size + version */
 #define FS_IOC_ADD_ENCRYPTION_KEY		_IOWR('f', 23, struct fscrypt_add_key_arg)
 #define FS_IOC_REMOVE_ENCRYPTION_KEY		_IOWR('f', 24, struct fscrypt_remove_key_arg)
 #define FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS	_IOWR('f', 25, struct fscrypt_remove_key_arg)
 #define FS_IOC_GET_ENCRYPTION_KEY_STATUS	_IOWR('f', 26, struct fscrypt_get_key_status_arg)
+#define FS_IOC_GET_ENCRYPTION_NONCE		_IOR('f', 27, __u8[16])
 
 /**********************************************************************/
 
 /* old names; don't add anything new here! */
 #ifndef __KERNEL__
+#define fscrypt_policy			fscrypt_policy_v1
 #define FS_KEY_DESCRIPTOR_SIZE		FSCRYPT_KEY_DESCRIPTOR_SIZE
 #define FS_POLICY_FLAGS_PAD_4		FSCRYPT_POLICY_FLAGS_PAD_4
 #define FS_POLICY_FLAGS_PAD_8		FSCRYPT_POLICY_FLAGS_PAD_8
diff --git a/include/uapi/linux/fsverity.h b/include/uapi/linux/fsverity.h
index da0daf6..33f4415 100644
--- a/include/uapi/linux/fsverity.h
+++ b/include/uapi/linux/fsverity.h
@@ -34,6 +34,55 @@ struct fsverity_digest {
 	__u8 digest[];
 };
 
+/*
+ * Struct containing a file's Merkle tree properties.  The fs-verity file digest
+ * is the hash of this struct.  A userspace program needs this struct only if it
+ * needs to compute fs-verity file digests itself, e.g. in order to sign files.
+ * It isn't needed just to enable fs-verity on a file.
+ *
+ * Note: when computing the file digest, 'sig_size' and 'signature' must be left
+ * zero and empty, respectively.  These fields are present only because some
+ * filesystems reuse this struct as part of their on-disk format.
+ */
+struct fsverity_descriptor {
+	__u8 version;		/* must be 1 */
+	__u8 hash_algorithm;	/* Merkle tree hash algorithm */
+	__u8 log_blocksize;	/* log2 of size of data and tree blocks */
+	__u8 salt_size;		/* size of salt in bytes; 0 if none */
+#ifdef __KERNEL__
+	__le32 sig_size;
+#else
+	__le32 __reserved_0x04;	/* must be 0 */
+#endif
+	__le64 data_size;	/* size of file the Merkle tree is built over */
+	__u8 root_hash[64];	/* Merkle tree root hash */
+	__u8 salt[32];		/* salt prepended to each hashed block */
+	__u8 __reserved[144];	/* must be 0's */
+#ifdef __KERNEL__
+	__u8 signature[];
+#endif
+};
+
+/*
+ * Format in which fs-verity file digests are signed in built-in signatures.
+ * This is the same as 'struct fsverity_digest', except here some magic bytes
+ * are prepended to provide some context about what is being signed in case the
+ * same key is used for non-fsverity purposes, and here the fields have fixed
+ * endianness.
+ *
+ * This struct is specific to the built-in signature verification support, which
+ * is optional.  fs-verity users may also verify signatures in userspace, in
+ * which case userspace is responsible for deciding on what bytes are signed.
+ * This struct may still be used, but it doesn't have to be.  For example,
+ * userspace could instead use a string like "sha256:$digest_as_hex_string".
+ */
+struct fsverity_formatted_digest {
+	char magic[8];			/* must be "FSVerity" */
+	__le16 digest_algorithm;
+	__le16 digest_size;
+	__u8 digest[];
+};
+
 #define FS_IOC_ENABLE_VERITY	_IOW('f', 133, struct fsverity_enable_arg)
 #define FS_IOC_MEASURE_VERITY	_IOWR('f', 134, struct fsverity_digest)
 
diff --git a/include/uapi/linux/fuse.h b/include/uapi/linux/fuse.h
index 373cada..d179877 100644
--- a/include/uapi/linux/fuse.h
+++ b/include/uapi/linux/fuse.h
@@ -342,6 +342,7 @@ struct fuse_file_lock {
 #define FUSE_NO_OPENDIR_SUPPORT (1 << 24)
 #define FUSE_EXPLICIT_INVAL_DATA (1 << 25)
 #define FUSE_MAP_ALIGNMENT	(1 << 26)
+#define FUSE_PASSTHROUGH	(1 << 31)
 
 /**
  * CUSE INIT request/reply flags
@@ -465,6 +466,7 @@ enum fuse_opcode {
 	FUSE_COPY_FILE_RANGE	= 47,
 	FUSE_SETUPMAPPING	= 48,
 	FUSE_REMOVEMAPPING	= 49,
+	FUSE_CANONICAL_PATH	= 2016,
 
 	/* CUSE specific operations */
 	CUSE_INIT		= 4096,
@@ -591,7 +593,7 @@ struct fuse_create_in {
 struct fuse_open_out {
 	uint64_t	fh;
 	uint32_t	open_flags;
-	uint32_t	padding;
+	uint32_t	passthrough_fh;
 };
 
 struct fuse_release_in {
@@ -794,6 +796,14 @@ struct fuse_in_header {
 	uint32_t	padding;
 };
 
+/* fuse_passthrough_out for passthrough V1 */
+struct fuse_passthrough_out {
+	uint32_t	fd;
+	/* For future implementation */
+	uint32_t	len;
+	void		*vec;
+};
+
 struct fuse_out_header {
 	uint32_t	len;
 	int32_t		error;
@@ -869,7 +879,10 @@ struct fuse_notify_retrieve_in {
 };
 
 /* Device ioctls: */
-#define FUSE_DEV_IOC_CLONE	_IOR(229, 0, uint32_t)
+#define FUSE_DEV_IOC_MAGIC		229
+#define FUSE_DEV_IOC_CLONE		_IOR(FUSE_DEV_IOC_MAGIC, 0, uint32_t)
+/* 127 is reserved for the V1 interface implementation in Android */
+#define FUSE_DEV_IOC_PASSTHROUGH_OPEN	_IOW(FUSE_DEV_IOC_MAGIC, 127, struct fuse_passthrough_out)
 
 struct fuse_lseek_in {
 	uint64_t	fh;
diff --git a/include/uapi/linux/incrementalfs.h b/include/uapi/linux/incrementalfs.h
new file mode 100644
index 0000000..ae8c779
--- /dev/null
+++ b/include/uapi/linux/incrementalfs.h
@@ -0,0 +1,550 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/*
+ * Userspace interface for Incremental FS.
+ *
+ * Incremental FS is special-purpose Linux virtual file system that allows
+ * execution of a program while its binary and resource files are still being
+ * lazily downloaded over the network, USB etc.
+ *
+ * Copyright 2019 Google LLC
+ */
+#ifndef _UAPI_LINUX_INCREMENTALFS_H
+#define _UAPI_LINUX_INCREMENTALFS_H
+
+#include <linux/limits.h>
+#include <linux/ioctl.h>
+#include <linux/types.h>
+#include <linux/xattr.h>
+
+/* ===== constants ===== */
+#define INCFS_NAME "incremental-fs"
+#define INCFS_MAGIC_NUMBER (unsigned long)(0x5346434e49ul)
+#define INCFS_DATA_FILE_BLOCK_SIZE 4096
+#define INCFS_HEADER_VER 1
+
+/* TODO: This value is assumed in incfs_copy_signature_info_from_user to be the
+ * actual signature length. Set back to 64 when fixed.
+ */
+#define INCFS_MAX_HASH_SIZE 32
+#define INCFS_MAX_FILE_ATTR_SIZE 512
+
+#define INCFS_PENDING_READS_FILENAME ".pending_reads"
+#define INCFS_LOG_FILENAME ".log"
+#define INCFS_BLOCKS_WRITTEN_FILENAME ".blocks_written"
+#define INCFS_XATTR_ID_NAME (XATTR_USER_PREFIX "incfs.id")
+#define INCFS_XATTR_SIZE_NAME (XATTR_USER_PREFIX "incfs.size")
+#define INCFS_XATTR_METADATA_NAME (XATTR_USER_PREFIX "incfs.metadata")
+
+#define INCFS_MAX_SIGNATURE_SIZE 8096
+#define INCFS_SIGNATURE_VERSION 2
+#define INCFS_SIGNATURE_SECTIONS 2
+
+#define INCFS_IOCTL_BASE_CODE 'g'
+
+/* ===== ioctl requests on the command dir ===== */
+
+/*
+ * Create a new file
+ * May only be called on .pending_reads file
+ */
+#define INCFS_IOC_CREATE_FILE \
+	_IOWR(INCFS_IOCTL_BASE_CODE, 30, struct incfs_new_file_args)
+
+/* Read file signature */
+#define INCFS_IOC_READ_FILE_SIGNATURE                                          \
+	_IOR(INCFS_IOCTL_BASE_CODE, 31, struct incfs_get_file_sig_args)
+
+/*
+ * Fill in one or more data block. This may only be called on a handle
+ * passed as a parameter to INCFS_IOC_PERMIT_FILLING
+ *
+ * Returns number of blocks filled in, or error if none were
+ */
+#define INCFS_IOC_FILL_BLOCKS                                                  \
+	_IOR(INCFS_IOCTL_BASE_CODE, 32, struct incfs_fill_blocks)
+
+/*
+ * Permit INCFS_IOC_FILL_BLOCKS on the given file descriptor
+ * May only be called on .pending_reads file
+ *
+ * Returns 0 on success or error
+ */
+#define INCFS_IOC_PERMIT_FILL                                                  \
+	_IOW(INCFS_IOCTL_BASE_CODE, 33, struct incfs_permit_fill)
+
+/*
+ * Fills buffer with ranges of populated blocks
+ *
+ * Returns 0 if all ranges written
+ *	   error otherwise
+ *
+ *	   Either way, range_buffer_size_out is set to the number
+ *	   of bytes written. Should be set to 0 by caller. The ranges
+ *	   filled are valid, but if an error was returned there might
+ *	   be more ranges to come.
+ *
+ *	   Ranges are ranges of filled blocks:
+ *
+ *	   1 2 7 9
+ *
+ *	   means blocks 1, 2, 7, 8, 9 are filled, 0, 3, 4, 5, 6 and 10 on
+ *	   are not
+ *
+ *	   If hashing is enabled for the file, the hash blocks are simply
+ *	   treated as though they immediately followed the data blocks.
+ */
+#define INCFS_IOC_GET_FILLED_BLOCKS                                            \
+	_IOR(INCFS_IOCTL_BASE_CODE, 34, struct incfs_get_filled_blocks_args)
+
+/*
+ * Creates a new mapped file
+ * May only be called on .pending_reads file
+ */
+#define INCFS_IOC_CREATE_MAPPED_FILE \
+	_IOWR(INCFS_IOCTL_BASE_CODE, 35, struct incfs_create_mapped_file_args)
+
+/*
+ * Get number of blocks, total and filled
+ * May only be called on .pending_reads file
+ */
+#define INCFS_IOC_GET_BLOCK_COUNT \
+	_IOR(INCFS_IOCTL_BASE_CODE, 36, struct incfs_get_block_count_args)
+
+/*
+ * Get per UID read timeouts
+ * May only be called on .pending_reads file
+ */
+#define INCFS_IOC_GET_READ_TIMEOUTS \
+	_IOR(INCFS_IOCTL_BASE_CODE, 37, struct incfs_get_read_timeouts_args)
+
+/*
+ * Set per UID read timeouts
+ * May only be called on .pending_reads file
+ */
+#define INCFS_IOC_SET_READ_TIMEOUTS \
+	_IOW(INCFS_IOCTL_BASE_CODE, 38, struct incfs_set_read_timeouts_args)
+
+/* ===== sysfs feature flags ===== */
+/*
+ * Each flag is represented by a file in /sys/fs/incremental-fs/features
+ * If the file exists the feature is supported
+ * Also the file contents will be the line "supported"
+ */
+
+/*
+ * Basic flag stating that the core incfs file system is available
+ */
+#define INCFS_FEATURE_FLAG_COREFS "corefs"
+
+/*
+ * zstd compression support
+ */
+#define INCFS_FEATURE_FLAG_ZSTD "zstd"
+
+/*
+ * v2 feature set support. Covers:
+ *   INCFS_IOC_CREATE_MAPPED_FILE
+ *   INCFS_IOC_GET_BLOCK_COUNT
+ *   INCFS_IOC_GET_READ_TIMEOUTS/INCFS_IOC_SET_READ_TIMEOUTS
+ *   .blocks_written status file
+ *   .incomplete folder
+ *   report_uid mount option
+ */
+#define INCFS_FEATURE_FLAG_V2 "v2"
+
+enum incfs_compression_alg {
+	COMPRESSION_NONE = 0,
+	COMPRESSION_LZ4 = 1,
+	COMPRESSION_ZSTD = 2,
+};
+
+enum incfs_block_flags {
+	INCFS_BLOCK_FLAGS_NONE = 0,
+	INCFS_BLOCK_FLAGS_HASH = 1,
+};
+
+typedef struct {
+	__u8 bytes[16];
+} incfs_uuid_t __attribute__((aligned (8)));
+
+/*
+ * Description of a pending read. A pending read - a read call by
+ * a userspace program for which the filesystem currently doesn't have data.
+ *
+ * Reads from .pending_reads and .log return an array of these structure
+ */
+struct incfs_pending_read_info {
+	/* Id of a file that is being read from. */
+	incfs_uuid_t file_id;
+
+	/* A number of microseconds since system boot to the read. */
+	__aligned_u64 timestamp_us;
+
+	/* Index of a file block that is being read. */
+	__u32 block_index;
+
+	/* A serial number of this pending read. */
+	__u32 serial_number;
+};
+
+/*
+ * Description of a pending read. A pending read - a read call by
+ * a userspace program for which the filesystem currently doesn't have data.
+ *
+ * This version of incfs_pending_read_info is used whenever the file system is
+ * mounted with the report_uid flag
+ */
+struct incfs_pending_read_info2 {
+	/* Id of a file that is being read from. */
+	incfs_uuid_t file_id;
+
+	/* A number of microseconds since system boot to the read. */
+	__aligned_u64 timestamp_us;
+
+	/* Index of a file block that is being read. */
+	__u32 block_index;
+
+	/* A serial number of this pending read. */
+	__u32 serial_number;
+
+	/* The UID of the reading process */
+	__u32 uid;
+
+	__u32 reserved;
+};
+
+/*
+ * Description of a data or hash block to add to a data file.
+ */
+struct incfs_fill_block {
+	/* Index of a data block. */
+	__u32 block_index;
+
+	/* Length of data */
+	__u32 data_len;
+
+	/*
+	 * A pointer to an actual data for the block.
+	 *
+	 * Equivalent to: __u8 *data;
+	 */
+	__aligned_u64 data;
+
+	/*
+	 * Compression algorithm used to compress the data block.
+	 * Values from enum incfs_compression_alg.
+	 */
+	__u8 compression;
+
+	/* Values from enum incfs_block_flags */
+	__u8 flags;
+
+	__u16 reserved1;
+
+	__u32 reserved2;
+
+	__aligned_u64 reserved3;
+};
+
+/*
+ * Description of a number of blocks to add to a data file
+ *
+ * Argument for INCFS_IOC_FILL_BLOCKS
+ */
+struct incfs_fill_blocks {
+	/* Number of blocks */
+	__u64 count;
+
+	/* A pointer to an array of incfs_fill_block structs */
+	__aligned_u64 fill_blocks;
+};
+
+/*
+ * Permit INCFS_IOC_FILL_BLOCKS on the given file descriptor
+ * May only be called on .pending_reads file
+ *
+ * Argument for INCFS_IOC_PERMIT_FILL
+ */
+struct incfs_permit_fill {
+	/* File to permit fills on */
+	__u32 file_descriptor;
+};
+
+enum incfs_hash_tree_algorithm {
+	INCFS_HASH_TREE_NONE = 0,
+	INCFS_HASH_TREE_SHA256 = 1
+};
+
+/*
+ * Create a new file or directory.
+ */
+struct incfs_new_file_args {
+	/* Id of a file to create. */
+	incfs_uuid_t file_id;
+
+	/*
+	 * Total size of the new file. Ignored if S_ISDIR(mode).
+	 */
+	__aligned_u64 size;
+
+	/*
+	 * File mode. Permissions and dir flag.
+	 */
+	__u16 mode;
+
+	__u16 reserved1;
+
+	__u32 reserved2;
+
+	/*
+	 * A pointer to a null-terminated relative path to the file's parent
+	 * dir.
+	 * Max length: PATH_MAX
+	 *
+	 * Equivalent to: char *directory_path;
+	 */
+	__aligned_u64 directory_path;
+
+	/*
+	 * A pointer to a null-terminated file's name.
+	 * Max length: PATH_MAX
+	 *
+	 * Equivalent to: char *file_name;
+	 */
+	__aligned_u64 file_name;
+
+	/*
+	 * A pointer to a file attribute to be set on creation.
+	 *
+	 * Equivalent to: u8 *file_attr;
+	 */
+	__aligned_u64 file_attr;
+
+	/*
+	 * Length of the data buffer specfied by file_attr.
+	 * Max value: INCFS_MAX_FILE_ATTR_SIZE
+	 */
+	__u32 file_attr_len;
+
+	__u32 reserved4;
+
+	/*
+	 * Points to an APK V4 Signature data blob
+	 * Signature must have two sections
+	 * Format is:
+	 *	u32 version
+	 *	u32 size_of_hash_info_section
+	 *	u8 hash_info_section[]
+	 *	u32 size_of_signing_info_section
+	 *	u8 signing_info_section[]
+	 *
+	 * Note that incfs does not care about what is in signing_info_section
+	 *
+	 * hash_info_section has following format:
+	 *	u32 hash_algorithm; // Must be SHA256 == 1
+	 *	u8 log2_blocksize;  // Must be 12 for 4096 byte blocks
+	 *	u32 salt_size;
+	 *	u8 salt[];
+	 *	u32 hash_size;
+	 *	u8 root_hash[];
+	 */
+	__aligned_u64 signature_info;
+
+	/* Size of signature_info */
+	__aligned_u64 signature_size;
+
+	__aligned_u64 reserved6;
+};
+
+/*
+ * Request a digital signature blob for a given file.
+ * Argument for INCFS_IOC_READ_FILE_SIGNATURE ioctl
+ */
+struct incfs_get_file_sig_args {
+	/*
+	 * A pointer to the data buffer to save an signature blob to.
+	 *
+	 * Equivalent to: u8 *file_signature;
+	 */
+	__aligned_u64 file_signature;
+
+	/* Size of the buffer at file_signature. */
+	__u32 file_signature_buf_size;
+
+	/*
+	 * Number of bytes save file_signature buffer.
+	 * It is set after ioctl done.
+	 */
+	__u32 file_signature_len_out;
+};
+
+struct incfs_filled_range {
+	__u32 begin;
+	__u32 end;
+};
+
+/*
+ * Request ranges of filled blocks
+ * Argument for INCFS_IOC_GET_FILLED_BLOCKS
+ */
+struct incfs_get_filled_blocks_args {
+	/*
+	 * A buffer to populate with ranges of filled blocks
+	 *
+	 * Equivalent to struct incfs_filled_ranges *range_buffer
+	 */
+	__aligned_u64 range_buffer;
+
+	/* Size of range_buffer */
+	__u32 range_buffer_size;
+
+	/* Start index to read from */
+	__u32 start_index;
+
+	/*
+	 * End index to read to. 0 means read to end. This is a range,
+	 * so incfs will read from start_index to end_index - 1
+	 */
+	__u32 end_index;
+
+	/* Actual number of blocks in file */
+	__u32 total_blocks_out;
+
+	/* The  number of data blocks in file */
+	__u32 data_blocks_out;
+
+	/* Number of bytes written to range buffer */
+	__u32 range_buffer_size_out;
+
+	/* Sector scanned up to, if the call was interrupted */
+	__u32 index_out;
+};
+
+/*
+ * Create a new mapped file
+ * Argument for INCFS_IOC_CREATE_MAPPED_FILE
+ */
+struct incfs_create_mapped_file_args {
+	/*
+	 * Total size of the new file.
+	 */
+	__aligned_u64 size;
+
+	/*
+	 * File mode. Permissions and dir flag.
+	 */
+	__u16 mode;
+
+	__u16 reserved1;
+
+	__u32 reserved2;
+
+	/*
+	 * A pointer to a null-terminated relative path to the incfs mount
+	 * point
+	 * Max length: PATH_MAX
+	 *
+	 * Equivalent to: char *directory_path;
+	 */
+	__aligned_u64 directory_path;
+
+	/*
+	 * A pointer to a null-terminated file name.
+	 * Max length: PATH_MAX
+	 *
+	 * Equivalent to: char *file_name;
+	 */
+	__aligned_u64 file_name;
+
+	/* Id of source file to map. */
+	incfs_uuid_t source_file_id;
+
+	/*
+	 * Offset in source file to start mapping. Must be a multiple of
+	 * INCFS_DATA_FILE_BLOCK_SIZE
+	 */
+	__aligned_u64 source_offset;
+};
+
+/*
+ * Get information about the blocks in this file
+ * Argument for INCFS_IOC_GET_BLOCK_COUNT
+ */
+struct incfs_get_block_count_args {
+	/* Total number of data blocks in the file */
+	__u32 total_data_blocks_out;
+
+	/* Number of filled data blocks in the file */
+	__u32 filled_data_blocks_out;
+
+	/* Total number of hash blocks in the file */
+	__u32 total_hash_blocks_out;
+
+	/* Number of filled hash blocks in the file */
+	__u32 filled_hash_blocks_out;
+};
+
+/* Description of timeouts for one UID */
+struct incfs_per_uid_read_timeouts {
+	/* UID to apply these timeouts to */
+	__u32 uid;
+
+	/*
+	 * Min time in microseconds to read any block. Note that this doesn't
+	 * apply to reads which are satisfied from the page cache.
+	 */
+	__u32 min_time_us;
+
+	/*
+	 * Min time in microseconds to satisfy a pending read. Any pending read
+	 * which is filled before this time will be delayed so that the total
+	 * read time >= this value.
+	 */
+	__u32 min_pending_time_us;
+
+	/*
+	 * Max time in microseconds to satisfy a pending read before the read
+	 * times out. If set to U32_MAX, defaults to mount options
+	 * read_timeout_ms * 1000. Must be >= min_pending_time_us
+	 */
+	__u32 max_pending_time_us;
+};
+
+/*
+ * Get the read timeouts array
+ * Argument for INCFS_IOC_GET_READ_TIMEOUTS
+ */
+struct incfs_get_read_timeouts_args {
+	/*
+	 * A pointer to a buffer to fill with the current timeouts
+	 *
+	 * Equivalent to struct incfs_per_uid_read_timeouts *
+	 */
+	__aligned_u64 timeouts_array;
+
+	/* Size of above buffer in bytes */
+	__u32 timeouts_array_size;
+
+	/* Size used in bytes, or size needed if -ENOMEM returned */
+	__u32 timeouts_array_size_out;
+};
+
+/*
+ * Set the read timeouts array
+ * Arguments for INCFS_IOC_SET_READ_TIMEOUTS
+ */
+struct incfs_set_read_timeouts_args {
+	/*
+	 * A pointer to an array containing the new timeouts
+	 * This will replace any existing timeouts
+	 *
+	 * Equivalent to struct incfs_per_uid_read_timeouts *
+	 */
+	__aligned_u64 timeouts_array;
+
+	/* Size of above array in bytes. Must be < 256 */
+	__u32 timeouts_array_size;
+};
+
+
+#endif /* _UAPI_LINUX_INCREMENTALFS_H */
diff --git a/include/uapi/linux/ion.h b/include/uapi/linux/ion.h
new file mode 100644
index 0000000..371e446
--- /dev/null
+++ b/include/uapi/linux/ion.h
@@ -0,0 +1,150 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/*
+ * drivers/staging/android/uapi/ion.h
+ *
+ * Copyright (C) 2011 Google, Inc.
+ */
+
+#ifndef _UAPI_LINUX_ION_H
+#define _UAPI_LINUX_ION_H
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/**
+ * ion_heap_types - list of all possible types of heaps that Android can use
+ *
+ * @ION_HEAP_TYPE_SYSTEM:        Reserved heap id for ion heap that allocates
+ *				 memory using alloc_page(). Also, supports
+ *				 deferred free and allocation pools.
+* @ION_HEAP_TYPE_DMA:		 Reserved heap id for ion heap that manages
+ * 				 single CMA (contiguous memory allocator)
+ * 				 region. Uses standard DMA APIs for
+ *				 managing memory within the CMA region.
+ */
+enum ion_heap_type {
+	ION_HEAP_TYPE_SYSTEM = 0,
+	ION_HEAP_TYPE_DMA = 2,
+	/* reserved range for future standard heap types */
+	ION_HEAP_TYPE_CUSTOM = 16,
+	ION_HEAP_TYPE_MAX = 31,
+};
+
+/**
+ * ion_heap_id - list of standard heap ids that Android can use
+ *
+ * @ION_HEAP_SYSTEM		Id for the ION_HEAP_TYPE_SYSTEM
+ * @ION_HEAP_DMA_START 		Start of reserved id range for heaps of type
+ *				ION_HEAP_TYPE_DMA
+ * @ION_HEAP_DMA_END		End of reserved id range for heaps of type
+ *				ION_HEAP_TYPE_DMA
+ * @ION_HEAP_CUSTOM_START	Start of reserved id range for heaps of custom
+ *				type
+ * @ION_HEAP_CUSTOM_END		End of reserved id range for heaps of custom
+ *				type
+ */
+enum ion_heap_id {
+	ION_HEAP_SYSTEM = (1 << ION_HEAP_TYPE_SYSTEM),
+	ION_HEAP_DMA_START = (ION_HEAP_SYSTEM << 1),
+	ION_HEAP_DMA_END = (ION_HEAP_DMA_START << 7),
+	ION_HEAP_CUSTOM_START = (ION_HEAP_DMA_END << 1),
+	ION_HEAP_CUSTOM_END = (ION_HEAP_CUSTOM_START << 22),
+};
+
+#define ION_NUM_MAX_HEAPS	(32)
+
+/**
+ * allocation flags - the lower 16 bits are used by core ion, the upper 16
+ * bits are reserved for use by the heaps themselves.
+ */
+
+/*
+ * mappings of this buffer should be cached, ion will do cache maintenance
+ * when the buffer is mapped for dma
+ */
+#define ION_FLAG_CACHED		1
+
+/**
+ * DOC: Ion Userspace API
+ *
+ * create a client by opening /dev/ion
+ * most operations handled via following ioctls
+ *
+ */
+
+/**
+ * struct ion_allocation_data - metadata passed from userspace for allocations
+ * @len:		size of the allocation
+ * @heap_id_mask:	mask of heap ids to allocate from
+ * @flags:		flags passed to heap
+ * @handle:		pointer that will be populated with a cookie to use to
+ *			refer to this allocation
+ *
+ * Provided by userspace as an argument to the ioctl
+ */
+struct ion_allocation_data {
+	__u64 len;
+	__u32 heap_id_mask;
+	__u32 flags;
+	__u32 fd;
+	__u32 unused;
+};
+
+#define MAX_HEAP_NAME			32
+
+/**
+ * struct ion_heap_data - data about a heap
+ * @name - first 32 characters of the heap name
+ * @type - heap type
+ * @heap_id - heap id for the heap
+ */
+struct ion_heap_data {
+	char name[MAX_HEAP_NAME];
+	__u32 type;
+	__u32 heap_id;
+	__u32 reserved0;
+	__u32 reserved1;
+	__u32 reserved2;
+};
+
+/**
+ * struct ion_heap_query - collection of data about all heaps
+ * @cnt - total number of heaps to be copied
+ * @heaps - buffer to copy heap data
+ */
+struct ion_heap_query {
+	__u32 cnt; /* Total number of heaps to be copied */
+	__u32 reserved0; /* align to 64bits */
+	__u64 heaps; /* buffer to be populated */
+	__u32 reserved1;
+	__u32 reserved2;
+};
+
+#define ION_IOC_MAGIC		'I'
+
+/**
+ * DOC: ION_IOC_ALLOC - allocate memory
+ *
+ * Takes an ion_allocation_data struct and returns it with the handle field
+ * populated with the opaque handle for the allocation.
+ */
+#define ION_IOC_ALLOC		_IOWR(ION_IOC_MAGIC, 0, \
+				      struct ion_allocation_data)
+
+/**
+ * DOC: ION_IOC_HEAP_QUERY - information about available heaps
+ *
+ * Takes an ion_heap_query structure and populates information about
+ * available Ion heaps.
+ */
+#define ION_IOC_HEAP_QUERY     _IOWR(ION_IOC_MAGIC, 8, \
+					struct ion_heap_query)
+
+/**
+ * DOC: ION_IOC_HEAP_ABI_VERSION - return ABI version
+ *
+ * Returns ABI version for this driver
+ */
+#define ION_IOC_ABI_VERSION    _IOR(ION_IOC_MAGIC, 9, \
+					__u32)
+#endif /* _UAPI_LINUX_ION_H */
diff --git a/include/uapi/linux/kcov.h b/include/uapi/linux/kcov.h
index 9529867..1d0350e 100644
--- a/include/uapi/linux/kcov.h
+++ b/include/uapi/linux/kcov.h
@@ -4,9 +4,24 @@
 
 #include <linux/types.h>
 
+/*
+ * Argument for KCOV_REMOTE_ENABLE ioctl, see Documentation/dev-tools/kcov.rst
+ * and the comment before kcov_remote_start() for usage details.
+ */
+struct kcov_remote_arg {
+	__u32		trace_mode;	/* KCOV_TRACE_PC or KCOV_TRACE_CMP */
+	__u32		area_size;	/* Length of coverage buffer in words */
+	__u32		num_handles;	/* Size of handles array */
+	__aligned_u64	common_handle;
+	__aligned_u64	handles[0];
+};
+
+#define KCOV_REMOTE_MAX_HANDLES		0x100
+
 #define KCOV_INIT_TRACE			_IOR('c', 1, unsigned long)
 #define KCOV_ENABLE			_IO('c', 100)
 #define KCOV_DISABLE			_IO('c', 101)
+#define KCOV_REMOTE_ENABLE		_IOW('c', 102, struct kcov_remote_arg)
 
 enum {
 	/*
@@ -32,4 +47,17 @@ enum {
 #define KCOV_CMP_SIZE(n)        ((n) << 1)
 #define KCOV_CMP_MASK           KCOV_CMP_SIZE(3)
 
+#define KCOV_SUBSYSTEM_COMMON	(0x00ull << 56)
+#define KCOV_SUBSYSTEM_USB	(0x01ull << 56)
+
+#define KCOV_SUBSYSTEM_MASK	(0xffull << 56)
+#define KCOV_INSTANCE_MASK	(0xffffffffull)
+
+static inline __u64 kcov_remote_handle(__u64 subsys, __u64 inst)
+{
+	if (subsys & ~KCOV_SUBSYSTEM_MASK || inst & ~KCOV_INSTANCE_MASK)
+		return 0;
+	return subsys | inst;
+}
+
 #endif /* _LINUX_KCOV_IOCTLS_H */
diff --git a/include/uapi/linux/loop.h b/include/uapi/linux/loop.h
index 080a8df..24a1c45 100644
--- a/include/uapi/linux/loop.h
+++ b/include/uapi/linux/loop.h
@@ -25,6 +25,16 @@ enum {
 	LO_FLAGS_DIRECT_IO	= 16,
 };
 
+/* LO_FLAGS that can be set using LOOP_SET_STATUS(64) */
+#define LOOP_SET_STATUS_SETTABLE_FLAGS (LO_FLAGS_AUTOCLEAR | LO_FLAGS_PARTSCAN)
+
+/* LO_FLAGS that can be cleared using LOOP_SET_STATUS(64) */
+#define LOOP_SET_STATUS_CLEARABLE_FLAGS (LO_FLAGS_AUTOCLEAR)
+
+/* LO_FLAGS that can be set using LOOP_CONFIGURE */
+#define LOOP_CONFIGURE_SETTABLE_FLAGS (LO_FLAGS_READ_ONLY | LO_FLAGS_AUTOCLEAR \
+				       | LO_FLAGS_PARTSCAN | LO_FLAGS_DIRECT_IO)
+
 #include <asm/posix_types.h>	/* for __kernel_old_dev_t */
 #include <linux/types.h>	/* for __u64 */
 
@@ -37,7 +47,7 @@ struct loop_info {
 	int		   lo_offset;
 	int		   lo_encrypt_type;
 	int		   lo_encrypt_key_size; 	/* ioctl w/o */
-	int		   lo_flags;			/* ioctl r/o */
+	int		   lo_flags;
 	char		   lo_name[LO_NAME_SIZE];
 	unsigned char	   lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
 	unsigned long	   lo_init[2];
@@ -53,13 +63,29 @@ struct loop_info64 {
 	__u32		   lo_number;			/* ioctl r/o */
 	__u32		   lo_encrypt_type;
 	__u32		   lo_encrypt_key_size;		/* ioctl w/o */
-	__u32		   lo_flags;			/* ioctl r/o */
+	__u32		   lo_flags;
 	__u8		   lo_file_name[LO_NAME_SIZE];
 	__u8		   lo_crypt_name[LO_NAME_SIZE];
 	__u8		   lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
 	__u64		   lo_init[2];
 };
 
+/**
+ * struct loop_config - Complete configuration for a loop device.
+ * @fd: fd of the file to be used as a backing file for the loop device.
+ * @block_size: block size to use; ignored if 0.
+ * @info: struct loop_info64 to configure the loop device with.
+ *
+ * This structure is used with the LOOP_CONFIGURE ioctl, and can be used to
+ * atomically setup and configure all loop device parameters at once.
+ */
+struct loop_config {
+	__u32			fd;
+	__u32                   block_size;
+	struct loop_info64	info;
+	__u64			__reserved[8];
+};
+
 /*
  * Loop filter types
  */
@@ -90,6 +116,7 @@ struct loop_info64 {
 #define LOOP_SET_CAPACITY	0x4C07
 #define LOOP_SET_DIRECT_IO	0x4C08
 #define LOOP_SET_BLOCK_SIZE	0x4C09
+#define LOOP_CONFIGURE		0x4C0A
 
 /* /dev/loop-control interface */
 #define LOOP_CTL_ADD		0x4C80
diff --git a/include/uapi/linux/magic.h b/include/uapi/linux/magic.h
index 84ae605..85f539a 100644
--- a/include/uapi/linux/magic.h
+++ b/include/uapi/linux/magic.h
@@ -58,6 +58,8 @@
 #define REISER2FS_SUPER_MAGIC_STRING	"ReIsEr2Fs"
 #define REISER2FS_JR_SUPER_MAGIC_STRING	"ReIsEr3Fs"
 
+#define SDCARDFS_SUPER_MAGIC	0x5dca2df5
+
 #define SMB_SUPER_MAGIC		0x517B
 #define CGROUP_SUPER_MAGIC	0x27e0eb
 #define CGROUP2_SUPER_MAGIC	0x63677270
diff --git a/include/uapi/linux/mman.h b/include/uapi/linux/mman.h
index fc1a64c..923cc16 100644
--- a/include/uapi/linux/mman.h
+++ b/include/uapi/linux/mman.h
@@ -5,8 +5,9 @@
 #include <asm/mman.h>
 #include <asm-generic/hugetlb_encode.h>
 
-#define MREMAP_MAYMOVE	1
-#define MREMAP_FIXED	2
+#define MREMAP_MAYMOVE		1
+#define MREMAP_FIXED		2
+#define MREMAP_DONTUNMAP	4
 
 #define OVERCOMMIT_GUESS		0
 #define OVERCOMMIT_ALWAYS		1
diff --git a/include/uapi/linux/netfilter/xt_IDLETIMER.h b/include/uapi/linux/netfilter/xt_IDLETIMER.h
index 3c586a1..c82a1c1 100644
--- a/include/uapi/linux/netfilter/xt_IDLETIMER.h
+++ b/include/uapi/linux/netfilter/xt_IDLETIMER.h
@@ -5,6 +5,7 @@
  * Header file for Xtables timer target module.
  *
  * Copyright (C) 2004, 2010 Nokia Corporation
+ *
  * Written by Timo Teras <ext-timo.teras@nokia.com>
  *
  * Converted to x_tables and forward-ported to 2.6.34
@@ -33,12 +34,19 @@
 #include <linux/types.h>
 
 #define MAX_IDLETIMER_LABEL_SIZE 28
+#define NLMSG_MAX_SIZE 64
+
+#define NL_EVENT_TYPE_INACTIVE 0
+#define NL_EVENT_TYPE_ACTIVE 1
 
 struct idletimer_tg_info {
 	__u32 timeout;
 
 	char label[MAX_IDLETIMER_LABEL_SIZE];
 
+	/* Use netlink messages for notification in addition to sysfs */
+	__u8 send_nl_msg;
+
 	/* for kernel module internal use only */
 	struct idletimer_tg *timer __attribute__((aligned(8)));
 };
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index beee59c..3043c9af 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -2373,6 +2373,9 @@ enum nl80211_commands {
  *	the allowed channel bandwidth configurations. (u8 attribute)
  *	Defined by IEEE P802.11ay/D4.0 section 9.4.2.251, Table 13.
  *
+ * @NL80211_ATTR_HE_6GHZ_CAPABILITY: HE 6 GHz Band Capability element (from
+ *	association request when used with NL80211_CMD_NEW_STATION).
+ *
  * @NUM_NL80211_ATTR: total number of nl80211_attrs available
  * @NL80211_ATTR_MAX: highest attribute number currently defined
  * @__NL80211_ATTR_AFTER_LAST: internal use
@@ -2835,6 +2838,8 @@ enum nl80211_attrs {
 	NL80211_ATTR_WIPHY_EDMG_CHANNELS,
 	NL80211_ATTR_WIPHY_EDMG_BW_CONFIG,
 
+	NL80211_ATTR_HE_6GHZ_CAPABILITY,
+
 	/* add attributes here, update the policy in nl80211.c */
 
 	__NL80211_ATTR_AFTER_LAST,
@@ -3413,6 +3418,8 @@ enum nl80211_mpath_info {
  *     defined in HE capabilities IE
  * @NL80211_BAND_IFTYPE_ATTR_MAX: highest band HE capability attribute currently
  *     defined
+ * @NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA: HE 6GHz band capabilities (__le16),
+ *	given for all 6 GHz band channels
  * @__NL80211_BAND_IFTYPE_ATTR_AFTER_LAST: internal use
  */
 enum nl80211_band_iftype_attr {
@@ -3423,6 +3430,7 @@ enum nl80211_band_iftype_attr {
 	NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY,
 	NL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET,
 	NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE,
+	NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA,
 
 	/* keep last */
 	__NL80211_BAND_IFTYPE_ATTR_AFTER_LAST,
diff --git a/include/uapi/linux/prctl.h b/include/uapi/linux/prctl.h
index 7da1b37..bc4a5d9 100644
--- a/include/uapi/linux/prctl.h
+++ b/include/uapi/linux/prctl.h
@@ -234,4 +234,7 @@ struct prctl_mm_map {
 #define PR_GET_TAGGED_ADDR_CTRL		56
 # define PR_TAGGED_ADDR_ENABLE		(1UL << 0)
 
+#define PR_SET_VMA		0x53564d41
+# define PR_SET_VMA_ANON_NAME		0
+
 #endif /* _LINUX_PRCTL_H */
diff --git a/include/uapi/linux/random.h b/include/uapi/linux/random.h
index 26ee913..dcc1b3e 100644
--- a/include/uapi/linux/random.h
+++ b/include/uapi/linux/random.h
@@ -48,9 +48,11 @@ struct rand_pool_info {
  * Flags for getrandom(2)
  *
  * GRND_NONBLOCK	Don't block and return EAGAIN instead
- * GRND_RANDOM		Use the /dev/random pool instead of /dev/urandom
+ * GRND_RANDOM		No effect
+ * GRND_INSECURE	Return non-cryptographic random bytes
  */
 #define GRND_NONBLOCK	0x0001
 #define GRND_RANDOM	0x0002
+#define GRND_INSECURE	0x0004
 
 #endif /* _UAPI_LINUX_RANDOM_H */
diff --git a/include/uapi/linux/seccomp.h b/include/uapi/linux/seccomp.h
index b5f901a..df1f471 100644
--- a/include/uapi/linux/seccomp.h
+++ b/include/uapi/linux/seccomp.h
@@ -76,6 +76,35 @@ struct seccomp_notif {
 	struct seccomp_data data;
 };
 
+/*
+ * Valid flags for struct seccomp_notif_resp
+ *
+ * Note, the SECCOMP_USER_NOTIF_FLAG_CONTINUE flag must be used with caution!
+ * If set by the process supervising the syscalls of another process the
+ * syscall will continue. This is problematic because of an inherent TOCTOU.
+ * An attacker can exploit the time while the supervised process is waiting on
+ * a response from the supervising process to rewrite syscall arguments which
+ * are passed as pointers of the intercepted syscall.
+ * It should be absolutely clear that this means that the seccomp notifier
+ * _cannot_ be used to implement a security policy! It should only ever be used
+ * in scenarios where a more privileged process supervises the syscalls of a
+ * lesser privileged process to get around kernel-enforced security
+ * restrictions when the privileged process deems this safe. In other words,
+ * in order to continue a syscall the supervising process should be sure that
+ * another security mechanism or the kernel itself will sufficiently block
+ * syscalls if arguments are rewritten to something unsafe.
+ *
+ * Similar precautions should be applied when stacking SECCOMP_RET_USER_NOTIF
+ * or SECCOMP_RET_TRACE. For SECCOMP_RET_USER_NOTIF filters acting on the
+ * same syscall, the most recently added filter takes precedence. This means
+ * that the new SECCOMP_RET_USER_NOTIF filter can override any
+ * SECCOMP_IOCTL_NOTIF_SEND from earlier filters, essentially allowing all
+ * such filtered syscalls to be executed by sending the response
+ * SECCOMP_USER_NOTIF_FLAG_CONTINUE. Note that SECCOMP_RET_TRACE can equally
+ * be overriden by SECCOMP_USER_NOTIF_FLAG_CONTINUE.
+ */
+#define SECCOMP_USER_NOTIF_FLAG_CONTINUE BIT(0)
+
 struct seccomp_notif_resp {
 	__u64 id;
 	__s64 val;
diff --git a/include/uapi/linux/stat.h b/include/uapi/linux/stat.h
index 7b35e98..ad80a5c 100644
--- a/include/uapi/linux/stat.h
+++ b/include/uapi/linux/stat.h
@@ -167,8 +167,8 @@ struct statx {
 #define STATX_ATTR_APPEND		0x00000020 /* [I] File is append-only */
 #define STATX_ATTR_NODUMP		0x00000040 /* [I] File is not to be dumped */
 #define STATX_ATTR_ENCRYPTED		0x00000800 /* [I] File requires key to decrypt in fs */
-
 #define STATX_ATTR_AUTOMOUNT		0x00001000 /* Dir: Automount trigger */
+#define STATX_ATTR_VERITY		0x00100000 /* [I] Verity protected file */
 
 
 #endif /* _UAPI_LINUX_STAT_H */
diff --git a/include/uapi/linux/usb/f_accessory.h b/include/uapi/linux/usb/f_accessory.h
new file mode 100644
index 0000000..0baeb7d
--- /dev/null
+++ b/include/uapi/linux/usb/f_accessory.h
@@ -0,0 +1,146 @@
+/*
+ * Gadget Function Driver for Android USB accessories
+ *
+ * Copyright (C) 2011 Google, Inc.
+ * Author: Mike Lockwood <lockwood@android.com>
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef _UAPI_LINUX_USB_F_ACCESSORY_H
+#define _UAPI_LINUX_USB_F_ACCESSORY_H
+
+/* Use Google Vendor ID when in accessory mode */
+#define USB_ACCESSORY_VENDOR_ID 0x18D1
+
+
+/* Product ID to use when in accessory mode */
+#define USB_ACCESSORY_PRODUCT_ID 0x2D00
+
+/* Product ID to use when in accessory mode and adb is enabled */
+#define USB_ACCESSORY_ADB_PRODUCT_ID 0x2D01
+
+/* Indexes for strings sent by the host via ACCESSORY_SEND_STRING */
+#define ACCESSORY_STRING_MANUFACTURER   0
+#define ACCESSORY_STRING_MODEL          1
+#define ACCESSORY_STRING_DESCRIPTION    2
+#define ACCESSORY_STRING_VERSION        3
+#define ACCESSORY_STRING_URI            4
+#define ACCESSORY_STRING_SERIAL         5
+
+/* Control request for retrieving device's protocol version
+ *
+ *	requestType:    USB_DIR_IN | USB_TYPE_VENDOR
+ *	request:        ACCESSORY_GET_PROTOCOL
+ *	value:          0
+ *	index:          0
+ *	data            version number (16 bits little endian)
+ *                     1 for original accessory support
+ *                     2 adds HID and device to host audio support
+ */
+#define ACCESSORY_GET_PROTOCOL  51
+
+/* Control request for host to send a string to the device
+ *
+ *	requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
+ *	request:        ACCESSORY_SEND_STRING
+ *	value:          0
+ *	index:          string ID
+ *	data            zero terminated UTF8 string
+ *
+ *  The device can later retrieve these strings via the
+ *  ACCESSORY_GET_STRING_* ioctls
+ */
+#define ACCESSORY_SEND_STRING   52
+
+/* Control request for starting device in accessory mode.
+ * The host sends this after setting all its strings to the device.
+ *
+ *	requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
+ *	request:        ACCESSORY_START
+ *	value:          0
+ *	index:          0
+ *	data            none
+ */
+#define ACCESSORY_START         53
+
+/* Control request for registering a HID device.
+ * Upon registering, a unique ID is sent by the accessory in the
+ * value parameter. This ID will be used for future commands for
+ * the device
+ *
+ *	requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
+ *	request:        ACCESSORY_REGISTER_HID_DEVICE
+ *	value:          Accessory assigned ID for the HID device
+ *	index:          total length of the HID report descriptor
+ *	data            none
+ */
+#define ACCESSORY_REGISTER_HID         54
+
+/* Control request for unregistering a HID device.
+ *
+ *	requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
+ *	request:        ACCESSORY_REGISTER_HID
+ *	value:          Accessory assigned ID for the HID device
+ *	index:          0
+ *	data            none
+ */
+#define ACCESSORY_UNREGISTER_HID         55
+
+/* Control request for sending the HID report descriptor.
+ * If the HID descriptor is longer than the endpoint zero max packet size,
+ * the descriptor will be sent in multiple ACCESSORY_SET_HID_REPORT_DESC
+ * commands. The data for the descriptor must be sent sequentially
+ * if multiple packets are needed.
+ *
+ *	requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
+ *	request:        ACCESSORY_SET_HID_REPORT_DESC
+ *	value:          Accessory assigned ID for the HID device
+ *	index:          offset of data in descriptor
+ *                      (needed when HID descriptor is too big for one packet)
+ *	data            the HID report descriptor
+ */
+#define ACCESSORY_SET_HID_REPORT_DESC         56
+
+/* Control request for sending HID events.
+ *
+ *	requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
+ *	request:        ACCESSORY_SEND_HID_EVENT
+ *	value:          Accessory assigned ID for the HID device
+ *	index:          0
+ *	data            the HID report for the event
+ */
+#define ACCESSORY_SEND_HID_EVENT         57
+
+/* Control request for setting the audio mode.
+ *
+ *	requestType:	USB_DIR_OUT | USB_TYPE_VENDOR
+ *	request:        ACCESSORY_SET_AUDIO_MODE
+ *	value:          0 - no audio
+ *                     1 - device to host, 44100 16-bit stereo PCM
+ *	index:          0
+ *	data            none
+ */
+#define ACCESSORY_SET_AUDIO_MODE         58
+
+/* ioctls for retrieving strings set by the host */
+#define ACCESSORY_GET_STRING_MANUFACTURER   _IOW('M', 1, char[256])
+#define ACCESSORY_GET_STRING_MODEL          _IOW('M', 2, char[256])
+#define ACCESSORY_GET_STRING_DESCRIPTION    _IOW('M', 3, char[256])
+#define ACCESSORY_GET_STRING_VERSION        _IOW('M', 4, char[256])
+#define ACCESSORY_GET_STRING_URI            _IOW('M', 5, char[256])
+#define ACCESSORY_GET_STRING_SERIAL         _IOW('M', 6, char[256])
+/* returns 1 if there is a start request pending */
+#define ACCESSORY_IS_START_REQUESTED        _IO('M', 7)
+/* returns audio mode (set via the ACCESSORY_SET_AUDIO_MODE control request) */
+#define ACCESSORY_GET_AUDIO_MODE            _IO('M', 8)
+
+#endif /* _UAPI_LINUX_USB_F_ACCESSORY_H */
diff --git a/include/uapi/linux/usb/raw_gadget.h b/include/uapi/linux/usb/raw_gadget.h
new file mode 100644
index 0000000..0be6852
--- /dev/null
+++ b/include/uapi/linux/usb/raw_gadget.h
@@ -0,0 +1,249 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/*
+ * USB Raw Gadget driver.
+ *
+ * See Documentation/usb/raw-gadget.rst for more details.
+ */
+
+#ifndef _UAPI__LINUX_USB_RAW_GADGET_H
+#define _UAPI__LINUX_USB_RAW_GADGET_H
+
+#include <asm/ioctl.h>
+#include <linux/types.h>
+#include <linux/usb/ch9.h>
+
+/* Maximum length of driver_name/device_name in the usb_raw_init struct. */
+#define UDC_NAME_LENGTH_MAX 128
+
+/*
+ * struct usb_raw_init - argument for USB_RAW_IOCTL_INIT ioctl.
+ * @speed: The speed of the emulated USB device, takes the same values as
+ *     the usb_device_speed enum: USB_SPEED_FULL, USB_SPEED_HIGH, etc.
+ * @driver_name: The name of the UDC driver.
+ * @device_name: The name of a UDC instance.
+ *
+ * The last two fields identify a UDC the gadget driver should bind to.
+ * For example, Dummy UDC has "dummy_udc" as its driver_name and "dummy_udc.N"
+ * as its device_name, where N in the index of the Dummy UDC instance.
+ * At the same time the dwc2 driver that is used on Raspberry Pi Zero, has
+ * "20980000.usb" as both driver_name and device_name.
+ */
+struct usb_raw_init {
+	__u8	driver_name[UDC_NAME_LENGTH_MAX];
+	__u8	device_name[UDC_NAME_LENGTH_MAX];
+	__u8	speed;
+};
+
+/* The type of event fetched with the USB_RAW_IOCTL_EVENT_FETCH ioctl. */
+enum usb_raw_event_type {
+	USB_RAW_EVENT_INVALID = 0,
+
+	/* This event is queued when the driver has bound to a UDC. */
+	USB_RAW_EVENT_CONNECT = 1,
+
+	/* This event is queued when a new control request arrived to ep0. */
+	USB_RAW_EVENT_CONTROL = 2,
+
+	/* The list might grow in the future. */
+};
+
+/*
+ * struct usb_raw_event - argument for USB_RAW_IOCTL_EVENT_FETCH ioctl.
+ * @type: The type of the fetched event.
+ * @length: Length of the data buffer. Updated by the driver and set to the
+ *     actual length of the fetched event data.
+ * @data: A buffer to store the fetched event data.
+ *
+ * Currently the fetched data buffer is empty for USB_RAW_EVENT_CONNECT,
+ * and contains struct usb_ctrlrequest for USB_RAW_EVENT_CONTROL.
+ */
+struct usb_raw_event {
+	__u32		type;
+	__u32		length;
+	__u8		data[0];
+};
+
+#define USB_RAW_IO_FLAGS_ZERO	0x0001
+#define USB_RAW_IO_FLAGS_MASK	0x0001
+
+static inline int usb_raw_io_flags_valid(__u16 flags)
+{
+	return (flags & ~USB_RAW_IO_FLAGS_MASK) == 0;
+}
+
+static inline int usb_raw_io_flags_zero(__u16 flags)
+{
+	return (flags & USB_RAW_IO_FLAGS_ZERO);
+}
+
+/*
+ * struct usb_raw_ep_io - argument for USB_RAW_IOCTL_EP0/EP_WRITE/READ ioctls.
+ * @ep: Endpoint handle as returned by USB_RAW_IOCTL_EP_ENABLE for
+ *     USB_RAW_IOCTL_EP_WRITE/READ. Ignored for USB_RAW_IOCTL_EP0_WRITE/READ.
+ * @flags: When USB_RAW_IO_FLAGS_ZERO is specified, the zero flag is set on
+ *     the submitted USB request, see include/linux/usb/gadget.h for details.
+ * @length: Length of data.
+ * @data: Data to send for USB_RAW_IOCTL_EP0/EP_WRITE. Buffer to store received
+ *     data for USB_RAW_IOCTL_EP0/EP_READ.
+ */
+struct usb_raw_ep_io {
+	__u16		ep;
+	__u16		flags;
+	__u32		length;
+	__u8		data[0];
+};
+
+/* Maximum number of non-control endpoints in struct usb_raw_eps_info. */
+#define USB_RAW_EPS_NUM_MAX	30
+
+/* Maximum length of UDC endpoint name in struct usb_raw_ep_info. */
+#define USB_RAW_EP_NAME_MAX	16
+
+/* Used as addr in struct usb_raw_ep_info if endpoint accepts any address. */
+#define USB_RAW_EP_ADDR_ANY	0xff
+
+/*
+ * struct usb_raw_ep_caps - exposes endpoint capabilities from struct usb_ep
+ *     (technically from its member struct usb_ep_caps).
+ */
+struct usb_raw_ep_caps {
+	__u32	type_control	: 1;
+	__u32	type_iso	: 1;
+	__u32	type_bulk	: 1;
+	__u32	type_int	: 1;
+	__u32	dir_in		: 1;
+	__u32	dir_out		: 1;
+};
+
+/*
+ * struct usb_raw_ep_limits - exposes endpoint limits from struct usb_ep.
+ * @maxpacket_limit: Maximum packet size value supported by this endpoint.
+ * @max_streams: maximum number of streams supported by this endpoint
+ *     (actual number is 2^n).
+ * @reserved: Empty, reserved for potential future extensions.
+ */
+struct usb_raw_ep_limits {
+	__u16	maxpacket_limit;
+	__u16	max_streams;
+	__u32	reserved;
+};
+
+/*
+ * struct usb_raw_ep_info - stores information about a gadget endpoint.
+ * @name: Name of the endpoint as it is defined in the UDC driver.
+ * @addr: Address of the endpoint that must be specified in the endpoint
+ *     descriptor passed to USB_RAW_IOCTL_EP_ENABLE ioctl.
+ * @caps: Endpoint capabilities.
+ * @limits: Endpoint limits.
+ */
+struct usb_raw_ep_info {
+	__u8				name[USB_RAW_EP_NAME_MAX];
+	__u32				addr;
+	struct usb_raw_ep_caps		caps;
+	struct usb_raw_ep_limits	limits;
+};
+
+/*
+ * struct usb_raw_eps_info - argument for USB_RAW_IOCTL_EPS_INFO ioctl.
+ * eps: Structures that store information about non-control endpoints.
+ */
+struct usb_raw_eps_info {
+	struct usb_raw_ep_info	eps[USB_RAW_EPS_NUM_MAX];
+};
+
+/*
+ * Initializes a Raw Gadget instance.
+ * Accepts a pointer to the usb_raw_init struct as an argument.
+ * Returns 0 on success or negative error code on failure.
+ */
+#define USB_RAW_IOCTL_INIT		_IOW('U', 0, struct usb_raw_init)
+
+/*
+ * Instructs Raw Gadget to bind to a UDC and start emulating a USB device.
+ * Returns 0 on success or negative error code on failure.
+ */
+#define USB_RAW_IOCTL_RUN		_IO('U', 1)
+
+/*
+ * A blocking ioctl that waits for an event and returns fetched event data to
+ * the user.
+ * Accepts a pointer to the usb_raw_event struct.
+ * Returns 0 on success or negative error code on failure.
+ */
+#define USB_RAW_IOCTL_EVENT_FETCH	_IOR('U', 2, struct usb_raw_event)
+
+/*
+ * Queues an IN (OUT for READ) request as a response to the last setup request
+ * received on endpoint 0 (provided that was an IN (OUT for READ) request), and
+ * waits until the request is completed. Copies received data to user for READ.
+ * Accepts a pointer to the usb_raw_ep_io struct as an argument.
+ * Returns length of transferred data on success or negative error code on
+ * failure.
+ */
+#define USB_RAW_IOCTL_EP0_WRITE		_IOW('U', 3, struct usb_raw_ep_io)
+#define USB_RAW_IOCTL_EP0_READ		_IOWR('U', 4, struct usb_raw_ep_io)
+
+/*
+ * Finds an endpoint that satisfies the parameters specified in the provided
+ * descriptors (address, transfer type, etc.) and enables it.
+ * Accepts a pointer to the usb_raw_ep_descs struct as an argument.
+ * Returns enabled endpoint handle on success or negative error code on failure.
+ */
+#define USB_RAW_IOCTL_EP_ENABLE		_IOW('U', 5, struct usb_endpoint_descriptor)
+
+/*
+ * Disables specified endpoint.
+ * Accepts endpoint handle as an argument.
+ * Returns 0 on success or negative error code on failure.
+ */
+#define USB_RAW_IOCTL_EP_DISABLE	_IOW('U', 6, __u32)
+
+/*
+ * Queues an IN (OUT for READ) request as a response to the last setup request
+ * received on endpoint usb_raw_ep_io.ep (provided that was an IN (OUT for READ)
+ * request), and waits until the request is completed. Copies received data to
+ * user for READ.
+ * Accepts a pointer to the usb_raw_ep_io struct as an argument.
+ * Returns length of transferred data on success or negative error code on
+ * failure.
+ */
+#define USB_RAW_IOCTL_EP_WRITE		_IOW('U', 7, struct usb_raw_ep_io)
+#define USB_RAW_IOCTL_EP_READ		_IOWR('U', 8, struct usb_raw_ep_io)
+
+/*
+ * Switches the gadget into the configured state.
+ * Returns 0 on success or negative error code on failure.
+ */
+#define USB_RAW_IOCTL_CONFIGURE		_IO('U', 9)
+
+/*
+ * Constrains UDC VBUS power usage.
+ * Accepts current limit in 2 mA units as an argument.
+ * Returns 0 on success or negative error code on failure.
+ */
+#define USB_RAW_IOCTL_VBUS_DRAW		_IOW('U', 10, __u32)
+
+/*
+ * Fills in the usb_raw_eps_info structure with information about non-control
+ * endpoints available for the currently connected UDC.
+ * Returns the number of available endpoints on success or negative error code
+ * on failure.
+ */
+#define USB_RAW_IOCTL_EPS_INFO		_IOR('U', 11, struct usb_raw_eps_info)
+
+/*
+ * Stalls a pending control request on endpoint 0.
+ * Returns 0 on success or negative error code on failure.
+ */
+#define USB_RAW_IOCTL_EP0_STALL		_IO('U', 12)
+
+/*
+ * Sets or clears halt or wedge status of the endpoint.
+ * Accepts endpoint handle as an argument.
+ * Returns 0 on success or negative error code on failure.
+ */
+#define USB_RAW_IOCTL_EP_SET_HALT	_IOW('U', 13, __u32)
+#define USB_RAW_IOCTL_EP_CLEAR_HALT	_IOW('U', 14, __u32)
+#define USB_RAW_IOCTL_EP_SET_WEDGE	_IOW('U', 15, __u32)
+
+#endif /* _UAPI__LINUX_USB_RAW_GADGET_H */
diff --git a/include/uapi/linux/userfaultfd.h b/include/uapi/linux/userfaultfd.h
index 48f1a7c..fe3565e 100644
--- a/include/uapi/linux/userfaultfd.h
+++ b/include/uapi/linux/userfaultfd.h
@@ -231,4 +231,13 @@ struct uffdio_zeropage {
 	__s64 zeropage;
 };
 
+/*
+ * Flags for the userfaultfd(2) system call itself.
+ */
+
+/*
+ * Create a userfaultfd that can handle page faults only in user mode.
+ */
+#define UFFD_USER_MODE_ONLY 1
+
 #endif /* _LINUX_USERFAULTFD_H */
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index a2669b7..fbe3f82d 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -467,6 +467,10 @@ enum v4l2_mpeg_video_h264_level {
 	V4L2_MPEG_VIDEO_H264_LEVEL_4_2	= 13,
 	V4L2_MPEG_VIDEO_H264_LEVEL_5_0	= 14,
 	V4L2_MPEG_VIDEO_H264_LEVEL_5_1	= 15,
+	V4L2_MPEG_VIDEO_H264_LEVEL_5_2	= 16,
+	V4L2_MPEG_VIDEO_H264_LEVEL_6_0	= 17,
+	V4L2_MPEG_VIDEO_H264_LEVEL_6_1	= 18,
+	V4L2_MPEG_VIDEO_H264_LEVEL_6_2	= 19,
 };
 #define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA	(V4L2_CID_MPEG_BASE+360)
 #define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA	(V4L2_CID_MPEG_BASE+361)
@@ -495,6 +499,7 @@ enum v4l2_mpeg_video_h264_profile {
 	V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH_INTRA	= 14,
 	V4L2_MPEG_VIDEO_H264_PROFILE_STEREO_HIGH		= 15,
 	V4L2_MPEG_VIDEO_H264_PROFILE_MULTIVIEW_HIGH		= 16,
+	V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH		= 17,
 };
 #define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT	(V4L2_CID_MPEG_BASE+364)
 #define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH	(V4L2_CID_MPEG_BASE+365)
@@ -1034,6 +1039,7 @@ enum v4l2_jpeg_chroma_subsampling {
 #define V4L2_CID_TEST_PATTERN_GREENR		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 5)
 #define V4L2_CID_TEST_PATTERN_BLUE		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 6)
 #define V4L2_CID_TEST_PATTERN_GREENB		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 7)
+#define V4L2_CID_UNIT_CELL_SIZE			(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 8)
 
 
 /* Image processing controls */
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 3210b3c..b1ee5a8 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -70,7 +70,7 @@
  * Common stuff for both V4L1 and V4L2
  * Moved from videodev.h
  */
-#define VIDEO_MAX_FRAME               32
+#define VIDEO_MAX_FRAME               64
 #define VIDEO_MAX_PLANES               8
 
 /*
@@ -421,6 +421,11 @@ struct v4l2_fract {
 	__u32   denominator;
 };
 
+struct v4l2_area {
+	__u32   width;
+	__u32   height;
+};
+
 /**
   * struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP
   *
@@ -914,11 +919,12 @@ struct v4l2_requestbuffers {
 };
 
 /* capabilities for struct v4l2_requestbuffers and v4l2_create_buffers */
-#define V4L2_BUF_CAP_SUPPORTS_MMAP	(1 << 0)
-#define V4L2_BUF_CAP_SUPPORTS_USERPTR	(1 << 1)
-#define V4L2_BUF_CAP_SUPPORTS_DMABUF	(1 << 2)
-#define V4L2_BUF_CAP_SUPPORTS_REQUESTS	(1 << 3)
-#define V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS (1 << 4)
+#define V4L2_BUF_CAP_SUPPORTS_MMAP			(1 << 0)
+#define V4L2_BUF_CAP_SUPPORTS_USERPTR			(1 << 1)
+#define V4L2_BUF_CAP_SUPPORTS_DMABUF			(1 << 2)
+#define V4L2_BUF_CAP_SUPPORTS_REQUESTS			(1 << 3)
+#define V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS		(1 << 4)
+#define V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF	(1 << 5)
 
 /**
  * struct v4l2_plane - plane info for multi-planar buffers
@@ -934,7 +940,9 @@ struct v4l2_requestbuffers {
  *			descriptor associated with this plane
  * @data_offset:	offset in the plane to the start of data; usually 0,
  *			unless there is a header in front of the data
- *
+ * @reserved:		few userspace clients and drivers use reserved fields
+ *			and it is up to them how these fields are used. v4l2
+ *			simply copy reserved fields between them.
  * Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer
  * with two planes can have one plane for Y, and another for interleaved CbCr
  * components. Each plane can reside in a separate memory buffer, or even in
@@ -949,6 +957,7 @@ struct v4l2_plane {
 		__s32		fd;
 	} m;
 	__u32			data_offset;
+	/* reserved fields used by few userspace clients and drivers */
 	__u32			reserved[11];
 };
 
@@ -1040,6 +1049,8 @@ static inline __u64 v4l2_timeval_to_ns(const struct timeval *tv)
 #define V4L2_BUF_FLAG_IN_REQUEST		0x00000080
 /* timecode field is valid */
 #define V4L2_BUF_FLAG_TIMECODE			0x00000100
+/* Don't return the capture buffer until OUTPUT timestamp changes */
+#define V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF	0x00000200
 /* Buffer is prepared for queuing */
 #define V4L2_BUF_FLAG_PREPARED			0x00000400
 /* Cache handling flags */
@@ -1674,6 +1685,7 @@ struct v4l2_ext_control {
 		__u8 __user *p_u8;
 		__u16 __user *p_u16;
 		__u32 __user *p_u32;
+		struct v4l2_area __user *p_area;
 		void __user *ptr;
 	};
 } __attribute__ ((packed));
@@ -1719,6 +1731,7 @@ enum v4l2_ctrl_type {
 	V4L2_CTRL_TYPE_U8	     = 0x0100,
 	V4L2_CTRL_TYPE_U16	     = 0x0101,
 	V4L2_CTRL_TYPE_U32	     = 0x0102,
+	V4L2_CTRL_TYPE_AREA          = 0x0106,
 };
 
 /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
@@ -1974,6 +1987,7 @@ struct v4l2_encoder_cmd {
 #define V4L2_DEC_CMD_STOP        (1)
 #define V4L2_DEC_CMD_PAUSE       (2)
 #define V4L2_DEC_CMD_RESUME      (3)
+#define V4L2_DEC_CMD_FLUSH       (4)
 
 /* Flags for V4L2_DEC_CMD_START */
 #define V4L2_DEC_CMD_START_MUTE_AUDIO	(1 << 0)
diff --git a/include/uapi/linux/virtio_ids.h b/include/uapi/linux/virtio_ids.h
index 585e07b..ecc27a1 100644
--- a/include/uapi/linux/virtio_ids.h
+++ b/include/uapi/linux/virtio_ids.h
@@ -46,5 +46,6 @@
 #define VIRTIO_ID_IOMMU        23 /* virtio IOMMU */
 #define VIRTIO_ID_FS           26 /* virtio filesystem */
 #define VIRTIO_ID_PMEM         27 /* virtio pmem */
+#define VIRTIO_ID_MAC80211_HWSIM 29 /* virtio mac80211-hwsim */
 
 #endif /* _LINUX_VIRTIO_IDS_H */
diff --git a/include/uapi/linux/wireguard.h b/include/uapi/linux/wireguard.h
new file mode 100644
index 0000000..ae88be14
--- /dev/null
+++ b/include/uapi/linux/wireguard.h
@@ -0,0 +1,196 @@
+/* SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) OR MIT */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * Documentation
+ * =============
+ *
+ * The below enums and macros are for interfacing with WireGuard, using generic
+ * netlink, with family WG_GENL_NAME and version WG_GENL_VERSION. It defines two
+ * methods: get and set. Note that while they share many common attributes,
+ * these two functions actually accept a slightly different set of inputs and
+ * outputs.
+ *
+ * WG_CMD_GET_DEVICE
+ * -----------------
+ *
+ * May only be called via NLM_F_REQUEST | NLM_F_DUMP. The command should contain
+ * one but not both of:
+ *
+ *    WGDEVICE_A_IFINDEX: NLA_U32
+ *    WGDEVICE_A_IFNAME: NLA_NUL_STRING, maxlen IFNAMSIZ - 1
+ *
+ * The kernel will then return several messages (NLM_F_MULTI) containing the
+ * following tree of nested items:
+ *
+ *    WGDEVICE_A_IFINDEX: NLA_U32
+ *    WGDEVICE_A_IFNAME: NLA_NUL_STRING, maxlen IFNAMSIZ - 1
+ *    WGDEVICE_A_PRIVATE_KEY: NLA_EXACT_LEN, len WG_KEY_LEN
+ *    WGDEVICE_A_PUBLIC_KEY: NLA_EXACT_LEN, len WG_KEY_LEN
+ *    WGDEVICE_A_LISTEN_PORT: NLA_U16
+ *    WGDEVICE_A_FWMARK: NLA_U32
+ *    WGDEVICE_A_PEERS: NLA_NESTED
+ *        0: NLA_NESTED
+ *            WGPEER_A_PUBLIC_KEY: NLA_EXACT_LEN, len WG_KEY_LEN
+ *            WGPEER_A_PRESHARED_KEY: NLA_EXACT_LEN, len WG_KEY_LEN
+ *            WGPEER_A_ENDPOINT: NLA_MIN_LEN(struct sockaddr), struct sockaddr_in or struct sockaddr_in6
+ *            WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL: NLA_U16
+ *            WGPEER_A_LAST_HANDSHAKE_TIME: NLA_EXACT_LEN, struct __kernel_timespec
+ *            WGPEER_A_RX_BYTES: NLA_U64
+ *            WGPEER_A_TX_BYTES: NLA_U64
+ *            WGPEER_A_ALLOWEDIPS: NLA_NESTED
+ *                0: NLA_NESTED
+ *                    WGALLOWEDIP_A_FAMILY: NLA_U16
+ *                    WGALLOWEDIP_A_IPADDR: NLA_MIN_LEN(struct in_addr), struct in_addr or struct in6_addr
+ *                    WGALLOWEDIP_A_CIDR_MASK: NLA_U8
+ *                0: NLA_NESTED
+ *                    ...
+ *                0: NLA_NESTED
+ *                    ...
+ *                ...
+ *            WGPEER_A_PROTOCOL_VERSION: NLA_U32
+ *        0: NLA_NESTED
+ *            ...
+ *        ...
+ *
+ * It is possible that all of the allowed IPs of a single peer will not
+ * fit within a single netlink message. In that case, the same peer will
+ * be written in the following message, except it will only contain
+ * WGPEER_A_PUBLIC_KEY and WGPEER_A_ALLOWEDIPS. This may occur several
+ * times in a row for the same peer. It is then up to the receiver to
+ * coalesce adjacent peers. Likewise, it is possible that all peers will
+ * not fit within a single message. So, subsequent peers will be sent
+ * in following messages, except those will only contain WGDEVICE_A_IFNAME
+ * and WGDEVICE_A_PEERS. It is then up to the receiver to coalesce these
+ * messages to form the complete list of peers.
+ *
+ * Since this is an NLA_F_DUMP command, the final message will always be
+ * NLMSG_DONE, even if an error occurs. However, this NLMSG_DONE message
+ * contains an integer error code. It is either zero or a negative error
+ * code corresponding to the errno.
+ *
+ * WG_CMD_SET_DEVICE
+ * -----------------
+ *
+ * May only be called via NLM_F_REQUEST. The command should contain the
+ * following tree of nested items, containing one but not both of
+ * WGDEVICE_A_IFINDEX and WGDEVICE_A_IFNAME:
+ *
+ *    WGDEVICE_A_IFINDEX: NLA_U32
+ *    WGDEVICE_A_IFNAME: NLA_NUL_STRING, maxlen IFNAMSIZ - 1
+ *    WGDEVICE_A_FLAGS: NLA_U32, 0 or WGDEVICE_F_REPLACE_PEERS if all current
+ *                      peers should be removed prior to adding the list below.
+ *    WGDEVICE_A_PRIVATE_KEY: len WG_KEY_LEN, all zeros to remove
+ *    WGDEVICE_A_LISTEN_PORT: NLA_U16, 0 to choose randomly
+ *    WGDEVICE_A_FWMARK: NLA_U32, 0 to disable
+ *    WGDEVICE_A_PEERS: NLA_NESTED
+ *        0: NLA_NESTED
+ *            WGPEER_A_PUBLIC_KEY: len WG_KEY_LEN
+ *            WGPEER_A_FLAGS: NLA_U32, 0 and/or WGPEER_F_REMOVE_ME if the
+ *                            specified peer should not exist at the end of the
+ *                            operation, rather than added/updated and/or
+ *                            WGPEER_F_REPLACE_ALLOWEDIPS if all current allowed
+ *                            IPs of this peer should be removed prior to adding
+ *                            the list below and/or WGPEER_F_UPDATE_ONLY if the
+ *                            peer should only be set if it already exists.
+ *            WGPEER_A_PRESHARED_KEY: len WG_KEY_LEN, all zeros to remove
+ *            WGPEER_A_ENDPOINT: struct sockaddr_in or struct sockaddr_in6
+ *            WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL: NLA_U16, 0 to disable
+ *            WGPEER_A_ALLOWEDIPS: NLA_NESTED
+ *                0: NLA_NESTED
+ *                    WGALLOWEDIP_A_FAMILY: NLA_U16
+ *                    WGALLOWEDIP_A_IPADDR: struct in_addr or struct in6_addr
+ *                    WGALLOWEDIP_A_CIDR_MASK: NLA_U8
+ *                0: NLA_NESTED
+ *                    ...
+ *                0: NLA_NESTED
+ *                    ...
+ *                ...
+ *            WGPEER_A_PROTOCOL_VERSION: NLA_U32, should not be set or used at
+ *                                       all by most users of this API, as the
+ *                                       most recent protocol will be used when
+ *                                       this is unset. Otherwise, must be set
+ *                                       to 1.
+ *        0: NLA_NESTED
+ *            ...
+ *        ...
+ *
+ * It is possible that the amount of configuration data exceeds that of
+ * the maximum message length accepted by the kernel. In that case, several
+ * messages should be sent one after another, with each successive one
+ * filling in information not contained in the prior. Note that if
+ * WGDEVICE_F_REPLACE_PEERS is specified in the first message, it probably
+ * should not be specified in fragments that come after, so that the list
+ * of peers is only cleared the first time but appended after. Likewise for
+ * peers, if WGPEER_F_REPLACE_ALLOWEDIPS is specified in the first message
+ * of a peer, it likely should not be specified in subsequent fragments.
+ *
+ * If an error occurs, NLMSG_ERROR will reply containing an errno.
+ */
+
+#ifndef _WG_UAPI_WIREGUARD_H
+#define _WG_UAPI_WIREGUARD_H
+
+#define WG_GENL_NAME "wireguard"
+#define WG_GENL_VERSION 1
+
+#define WG_KEY_LEN 32
+
+enum wg_cmd {
+	WG_CMD_GET_DEVICE,
+	WG_CMD_SET_DEVICE,
+	__WG_CMD_MAX
+};
+#define WG_CMD_MAX (__WG_CMD_MAX - 1)
+
+enum wgdevice_flag {
+	WGDEVICE_F_REPLACE_PEERS = 1U << 0,
+	__WGDEVICE_F_ALL = WGDEVICE_F_REPLACE_PEERS
+};
+enum wgdevice_attribute {
+	WGDEVICE_A_UNSPEC,
+	WGDEVICE_A_IFINDEX,
+	WGDEVICE_A_IFNAME,
+	WGDEVICE_A_PRIVATE_KEY,
+	WGDEVICE_A_PUBLIC_KEY,
+	WGDEVICE_A_FLAGS,
+	WGDEVICE_A_LISTEN_PORT,
+	WGDEVICE_A_FWMARK,
+	WGDEVICE_A_PEERS,
+	__WGDEVICE_A_LAST
+};
+#define WGDEVICE_A_MAX (__WGDEVICE_A_LAST - 1)
+
+enum wgpeer_flag {
+	WGPEER_F_REMOVE_ME = 1U << 0,
+	WGPEER_F_REPLACE_ALLOWEDIPS = 1U << 1,
+	WGPEER_F_UPDATE_ONLY = 1U << 2,
+	__WGPEER_F_ALL = WGPEER_F_REMOVE_ME | WGPEER_F_REPLACE_ALLOWEDIPS |
+			 WGPEER_F_UPDATE_ONLY
+};
+enum wgpeer_attribute {
+	WGPEER_A_UNSPEC,
+	WGPEER_A_PUBLIC_KEY,
+	WGPEER_A_PRESHARED_KEY,
+	WGPEER_A_FLAGS,
+	WGPEER_A_ENDPOINT,
+	WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL,
+	WGPEER_A_LAST_HANDSHAKE_TIME,
+	WGPEER_A_RX_BYTES,
+	WGPEER_A_TX_BYTES,
+	WGPEER_A_ALLOWEDIPS,
+	WGPEER_A_PROTOCOL_VERSION,
+	__WGPEER_A_LAST
+};
+#define WGPEER_A_MAX (__WGPEER_A_LAST - 1)
+
+enum wgallowedip_attribute {
+	WGALLOWEDIP_A_UNSPEC,
+	WGALLOWEDIP_A_FAMILY,
+	WGALLOWEDIP_A_IPADDR,
+	WGALLOWEDIP_A_CIDR_MASK,
+	__WGALLOWEDIP_A_LAST
+};
+#define WGALLOWEDIP_A_MAX (__WGALLOWEDIP_A_LAST - 1)
+
+#endif /* _WG_UAPI_WIREGUARD_H */
diff --git a/include/uapi/linux/xattr.h b/include/uapi/linux/xattr.h
index c1395b5..1eba026 100644
--- a/include/uapi/linux/xattr.h
+++ b/include/uapi/linux/xattr.h
@@ -17,8 +17,11 @@
 #if __UAPI_DEF_XATTR
 #define __USE_KERNEL_XATTR_DEFS
 
-#define XATTR_CREATE	0x1	/* set value, fail if attr already exists */
-#define XATTR_REPLACE	0x2	/* set value, fail if attr does not exist */
+#define XATTR_CREATE	 0x1	/* set value, fail if attr already exists */
+#define XATTR_REPLACE	 0x2	/* set value, fail if attr does not exist */
+#ifdef __KERNEL__ /* following is kernel internal, colocated for maintenance */
+#define XATTR_NOSECURITY 0x4	/* get value, do not involve security check */
+#endif
 #endif
 
 /* Namespaces */
diff --git a/include/vdso/bits.h b/include/vdso/bits.h
new file mode 100644
index 0000000..6d005a1
--- /dev/null
+++ b/include/vdso/bits.h
@@ -0,0 +1,9 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_BITS_H
+#define __VDSO_BITS_H
+
+#include <vdso/const.h>
+
+#define BIT(nr)			(UL(1) << (nr))
+
+#endif	/* __VDSO_BITS_H */
diff --git a/include/vdso/clocksource.h b/include/vdso/clocksource.h
new file mode 100644
index 0000000..c682e7c
--- /dev/null
+++ b/include/vdso/clocksource.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_CLOCKSOURCE_H
+#define __VDSO_CLOCKSOURCE_H
+
+#include <vdso/limits.h>
+
+#ifdef CONFIG_GENERIC_GETTIMEOFDAY
+#include <asm/vdso/clocksource.h>
+#endif /* CONFIG_GENERIC_GETTIMEOFDAY */
+
+enum vdso_clock_mode {
+	VDSO_CLOCKMODE_NONE,
+#ifdef CONFIG_GENERIC_GETTIMEOFDAY
+	VDSO_ARCH_CLOCKMODES,
+#endif
+	VDSO_CLOCKMODE_MAX,
+
+	/* Indicator for time namespace VDSO */
+	VDSO_CLOCKMODE_TIMENS = INT_MAX
+};
+
+#endif /* __VDSO_CLOCKSOURCE_H */
diff --git a/include/vdso/const.h b/include/vdso/const.h
new file mode 100644
index 0000000..94b385a
--- /dev/null
+++ b/include/vdso/const.h
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_CONST_H
+#define __VDSO_CONST_H
+
+#include <uapi/linux/const.h>
+
+#define UL(x)		(_UL(x))
+#define ULL(x)		(_ULL(x))
+
+#endif /* __VDSO_CONST_H */
diff --git a/include/vdso/datapage.h b/include/vdso/datapage.h
index 2e302c0..6248411 100644
--- a/include/vdso/datapage.h
+++ b/include/vdso/datapage.h
@@ -4,9 +4,20 @@
 
 #ifndef __ASSEMBLY__
 
-#include <linux/bits.h>
-#include <linux/time.h>
-#include <linux/types.h>
+#include <linux/compiler.h>
+#include <uapi/linux/time.h>
+#include <uapi/linux/types.h>
+#include <uapi/asm-generic/errno-base.h>
+
+#include <vdso/bits.h>
+#include <vdso/clocksource.h>
+#include <vdso/ktime.h>
+#include <vdso/limits.h>
+#include <vdso/math64.h>
+#include <vdso/processor.h>
+#include <vdso/time.h>
+#include <vdso/time32.h>
+#include <vdso/time64.h>
 
 #define VDSO_BASES	(CLOCK_TAI + 1)
 #define VDSO_HRES	(BIT(CLOCK_REALTIME)		| \
@@ -84,6 +95,22 @@ struct vdso_data {
  */
 extern struct vdso_data _vdso_data[CS_BASES] __attribute__((visibility("hidden")));
 
+/*
+ * The generic vDSO implementation requires that gettimeofday.h
+ * provides:
+ * - __arch_get_vdso_data(): to get the vdso datapage.
+ * - __arch_get_hw_counter(): to get the hw counter based on the
+ *   clock_mode.
+ * - gettimeofday_fallback(): fallback for gettimeofday.
+ * - clock_gettime_fallback(): fallback for clock_gettime.
+ * - clock_getres_fallback(): fallback for clock_getres.
+ */
+#ifdef ENABLE_COMPAT_VDSO
+#include <asm/vdso/compat_gettimeofday.h>
+#else
+#include <asm/vdso/gettimeofday.h>
+#endif /* ENABLE_COMPAT_VDSO */
+
 #endif /* !__ASSEMBLY__ */
 
 #endif /* __VDSO_DATAPAGE_H */
diff --git a/include/vdso/jiffies.h b/include/vdso/jiffies.h
new file mode 100644
index 0000000..2f9d596
--- /dev/null
+++ b/include/vdso/jiffies.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_JIFFIES_H
+#define __VDSO_JIFFIES_H
+
+#include <asm/param.h>			/* for HZ */
+#include <vdso/time64.h>
+
+/* TICK_NSEC is the time between ticks in nsec assuming SHIFTED_HZ */
+#define TICK_NSEC ((NSEC_PER_SEC+HZ/2)/HZ)
+
+#endif /* __VDSO_JIFFIES_H */
diff --git a/include/vdso/ktime.h b/include/vdso/ktime.h
new file mode 100644
index 0000000..a0fd072
--- /dev/null
+++ b/include/vdso/ktime.h
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_KTIME_H
+#define __VDSO_KTIME_H
+
+#include <vdso/jiffies.h>
+
+/*
+ * The resolution of the clocks. The resolution value is returned in
+ * the clock_getres() system call to give application programmers an
+ * idea of the (in)accuracy of timers. Timer values are rounded up to
+ * this resolution values.
+ */
+#define LOW_RES_NSEC		TICK_NSEC
+#define KTIME_LOW_RES		(LOW_RES_NSEC)
+
+#endif /* __VDSO_KTIME_H */
diff --git a/include/vdso/limits.h b/include/vdso/limits.h
new file mode 100644
index 0000000..0197888
--- /dev/null
+++ b/include/vdso/limits.h
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_LIMITS_H
+#define __VDSO_LIMITS_H
+
+#define USHRT_MAX	((unsigned short)~0U)
+#define SHRT_MAX	((short)(USHRT_MAX >> 1))
+#define SHRT_MIN	((short)(-SHRT_MAX - 1))
+#define INT_MAX		((int)(~0U >> 1))
+#define INT_MIN		(-INT_MAX - 1)
+#define UINT_MAX	(~0U)
+#define LONG_MAX	((long)(~0UL >> 1))
+#define LONG_MIN	(-LONG_MAX - 1)
+#define ULONG_MAX	(~0UL)
+#define LLONG_MAX	((long long)(~0ULL >> 1))
+#define LLONG_MIN	(-LLONG_MAX - 1)
+#define ULLONG_MAX	(~0ULL)
+#define UINTPTR_MAX	ULONG_MAX
+
+#endif /* __VDSO_LIMITS_H */
diff --git a/include/vdso/math64.h b/include/vdso/math64.h
new file mode 100644
index 0000000..7da703e
--- /dev/null
+++ b/include/vdso/math64.h
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_MATH64_H
+#define __VDSO_MATH64_H
+
+static __always_inline u32
+__iter_div_u64_rem(u64 dividend, u32 divisor, u64 *remainder)
+{
+	u32 ret = 0;
+
+	while (dividend >= divisor) {
+		/* The following asm() prevents the compiler from
+		   optimising this loop into a modulo operation.  */
+		asm("" : "+rm"(dividend));
+
+		dividend -= divisor;
+		ret++;
+	}
+
+	*remainder = dividend;
+
+	return ret;
+}
+
+#endif /* __VDSO_MATH64_H */
diff --git a/include/vdso/processor.h b/include/vdso/processor.h
new file mode 100644
index 0000000..fbe8265
--- /dev/null
+++ b/include/vdso/processor.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2020 ARM Ltd.
+ */
+#ifndef __VDSO_PROCESSOR_H
+#define __VDSO_PROCESSOR_H
+
+#ifndef __ASSEMBLY__
+
+#include <asm/vdso/processor.h>
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __VDSO_PROCESSOR_H */
diff --git a/include/vdso/time.h b/include/vdso/time.h
new file mode 100644
index 0000000..e5afa84
--- /dev/null
+++ b/include/vdso/time.h
@@ -0,0 +1,5 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_TIME_H
+#define __VDSO_TIME_H
+
+#endif /* __VDSO_TIME_H */
diff --git a/include/vdso/time32.h b/include/vdso/time32.h
new file mode 100644
index 0000000..fdf56f9
--- /dev/null
+++ b/include/vdso/time32.h
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_TIME32_H
+#define __VDSO_TIME32_H
+
+typedef s32		old_time32_t;
+
+struct old_timespec32 {
+	old_time32_t	tv_sec;
+	s32		tv_nsec;
+};
+
+struct old_timeval32 {
+	old_time32_t	tv_sec;
+	s32		tv_usec;
+};
+
+#endif /* __VDSO_TIME32_H */
diff --git a/include/vdso/time64.h b/include/vdso/time64.h
new file mode 100644
index 0000000..9d43c3f5
--- /dev/null
+++ b/include/vdso/time64.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_TIME64_H
+#define __VDSO_TIME64_H
+
+/* Parameters used to convert the timespec values: */
+#define MSEC_PER_SEC	1000L
+#define USEC_PER_MSEC	1000L
+#define NSEC_PER_USEC	1000L
+#define NSEC_PER_MSEC	1000000L
+#define USEC_PER_SEC	1000000L
+#define NSEC_PER_SEC	1000000000L
+#define FSEC_PER_SEC	1000000000000000LL
+
+#endif /* __VDSO_TIME64_H */
diff --git a/init/Kconfig b/init/Kconfig
index 96fc45d..1d0ab37 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -9,6 +9,23 @@
 	default ARCH_DEFCONFIG
 	default "arch/$(ARCH)/defconfig"
 
+config CC_VERSION_TEXT
+	string
+	default "$(CC_VERSION_TEXT)"
+	help
+	  This is used in unclear ways:
+
+	  - Re-run Kconfig when the compiler is updated
+	    The 'default' property references the environment variable,
+	    CC_VERSION_TEXT so it is recorded in include/config/auto.conf.cmd.
+	    When the compiler is updated, Kconfig will be invoked.
+
+	  - Ensure full rebuild when the compier is updated
+	    include/linux/kconfig.h contains this option in the comment line so
+	    fixdep adds include/config/cc/version/text.h into the auto-generated
+	    dependency. When the compiler is updated, syncconfig will touch it
+	    and then every file will be rebuilt.
+
 config CC_IS_GCC
 	def_bool $(success,$(CC) --version | head -n 1 | grep -q gcc)
 
@@ -20,6 +37,9 @@
 config CC_IS_CLANG
 	def_bool $(success,$(CC) --version | head -n 1 | grep -q clang)
 
+config LD_IS_LLD
+	def_bool $(success,$(LD) -v | head -n 1 | grep -q LLD)
+
 config CLANG_VERSION
 	int
 	default $(shell,$(srctree)/scripts/clang-version.sh $(CC))
@@ -1197,6 +1217,18 @@
 
 endif
 
+config BOOT_CONFIG
+	bool "Boot config support"
+	depends on BLK_DEV_INITRD
+	help
+	  Extra boot config allows system admin to pass a config file as
+	  complemental extension of kernel cmdline when booting.
+	  The boot config file must be attached at the end of initramfs
+	  with checksum, size and magic word.
+	  See <file:Documentation/admin-guide/bootconfig.rst> for details.
+
+	  If unsure, say Y.
+
 choice
 	prompt "Compiler optimization level"
 	default CC_OPTIMIZE_FOR_PERFORMANCE
@@ -2176,11 +2208,24 @@
 
 	  If unsure, or if you need to build out-of-tree modules, say N.
 
+config UNUSED_KSYMS_WHITELIST
+	string "Whitelist of symbols to keep in ksymtab"
+	depends on TRIM_UNUSED_KSYMS
+	help
+	  By default, all unused exported symbols will be un-exported from the
+	  build when TRIM_UNUSED_KSYMS is selected.
+
+	  UNUSED_KSYMS_WHITELIST allows to whitelist symbols that must be kept
+	  exported at all times, even in absence of in-tree users. The value to
+	  set here is the path to a text file containing the list of symbols,
+	  one per line. The path can be absolute, or relative to the kernel
+	  source tree.
+
 endif # MODULES
 
 config MODULES_TREE_LOOKUP
 	def_bool y
-	depends on PERF_EVENTS || TRACING
+	depends on PERF_EVENTS || TRACING || CFI_CLANG
 
 config INIT_ALL_POSSIBLE
 	bool
@@ -2222,3 +2267,5 @@
 # <asm/syscall_wrapper.h>.
 config ARCH_HAS_SYSCALL_WRAPPER
 	def_bool n
+
+source "init/Kconfig.gki"
diff --git a/init/Kconfig.gki b/init/Kconfig.gki
new file mode 100644
index 0000000..f1cc33d
--- /dev/null
+++ b/init/Kconfig.gki
@@ -0,0 +1,210 @@
+config GKI_HIDDEN_DRM_CONFIGS
+	bool "Hidden DRM configs needed for GKI"
+	select DRM_KMS_HELPER if (HAS_IOMEM && DRM)
+	select DRM_GEM_CMA_HELPER
+	select DRM_KMS_CMA_HELPER
+	select DRM_MIPI_DSI
+	select DRM_TTM if (HAS_IOMEM && DRM)
+	select VIDEOMODE_HELPERS
+	select WANT_DEV_COREDUMP
+	select INTERVAL_TREE
+	help
+	  Dummy config option used to enable hidden DRM configs.
+	  These are normally selected implicitly when including a
+	  DRM module, but for GKI, the modules are built out-of-tree.
+
+config GKI_HIDDEN_REGMAP_CONFIGS
+	bool "Hidden Regmap configs needed for GKI"
+	select REGMAP_IRQ
+	select REGMAP_MMIO
+	help
+	  Dummy config option used to enable hidden regmap configs.
+	  These are normally selected implicitly when a module
+	  that relies on it is configured.
+
+config GKI_HIDDEN_CRYPTO_CONFIGS
+	bool "Hidden CRYPTO configs needed for GKI"
+	select CRYPTO_ENGINE
+	help
+	  Dummy config option used to enable hidden CRYPTO configs.
+	  These are normally selected implicitly when a module
+	  that relies on it is configured.
+
+config GKI_HIDDEN_SND_CONFIGS
+	bool "Hidden SND configs needed for GKI"
+	select SND_VMASTER
+	select SND_PCM_ELD
+	select SND_JACK
+	select SND_JACK_INPUT_DEV
+	help
+	  Dummy config option used to enable hidden SND configs.
+	  These are normally selected implicitly when a module
+	  that relies on it is configured.
+
+config GKI_HIDDEN_SND_SOC_CONFIGS
+	bool "Hidden SND_SOC configs needed for GKI"
+	select SND_SOC_GENERIC_DMAENGINE_PCM if (SND_SOC && SND)
+	select SND_PCM_IEC958
+	select SND_SOC_COMPRESS if (SND_SOC && SND)
+	select SND_SOC_TOPOLOGY if (SND_SOC && SND)
+	help
+	  Dummy config option used to enable hidden SND_SOC configs.
+	  These are normally selected implicitly when a module
+	  that relies on it is configured.
+
+config GKI_HIDDEN_MMC_CONFIGS
+	bool "Hidden MMC configs needed for GKI"
+	select MMC_SDHCI_IO_ACCESSORS if (MMC_SDHCI)
+	help
+	  Dummy config option used to enable hidden MMC configs.
+	  These are normally selected implicitly when a module
+	  that relies on it is configured.
+
+config GKI_HIDDEN_GPIO_CONFIGS
+	bool "Hidden GPIO configs needed for GKI"
+	select PINCTRL_SINGLE if (PINCTRL && OF && HAS_IOMEM)
+	select GPIO_PL061 if (HAS_IOMEM && ARM_AMBA && GPIOLIB)
+	help
+	  Dummy config option used to enable hidden GPIO configs.
+	  These are normally selected implicitly when a module
+	  that relies on it is configured.
+
+config GKI_HIDDEN_QCOM_CONFIGS
+	bool "Hidden QCOM configs needed for GKI"
+	select QCOM_SMEM_STATE
+	select QCOM_GDSC if (ARCH_QCOM)
+	select PINCTRL_MSM if (PINCTRL && ARCH_QCOM)
+	select IOMMU_IO_PGTABLE_LPAE if (ARCH_QCOM)
+
+	help
+	  Dummy config option used to enable hidden QCOM configs.
+	  These are normally selected implicitly when a module
+	  that relies on it is configured.
+
+config GKI_HIDDEN_MEDIA_CONFIGS
+	bool "Hidden Media configs needed for GKI"
+	select VIDEOBUF2_CORE
+	select MEDIA_SUPPORT
+	select FRAME_VECTOR
+	select VIDEOBUF2_DMA_CONTIG
+	select CEC_CORE
+	select CEC_NOTIFIER
+	select CEC_PIN
+	help
+	  Dummy config option used to enable hidden media configs.
+	  These are normally selected implicitly when a module
+	  that relies on it is configured.
+
+config GKI_HIDDEN_VIRTUAL_CONFIGS
+	bool "Hidden Virtual configs needed for GKI"
+	select HVC_DRIVER
+	help
+	  Dummy config option used to enable hidden virtual device configs.
+	  These are normally selected implicitly when a module
+	  that relies on it is configured.
+
+# LEGACY_WEXT_ALLCONFIG Discussed upstream, soundly rejected as a unique
+# problem for GKI to solve.  It should be noted that these extensions are
+# in-effect deprecated and generally unsupported and we should pressure
+# the SOC vendors to drop any modules that require these extensions.
+config GKI_LEGACY_WEXT_ALLCONFIG
+	bool "Hidden wireless extension configs needed for GKI"
+	select WIRELESS_EXT
+	select WEXT_CORE
+	select WEXT_PROC
+	select WEXT_SPY
+	select WEXT_PRIV
+	help
+	  Placeholder config option used to enable all the hidden legacy
+	  wireless extensions to the core wireless network functionality used
+	  by add-in modules.  If you are not building a kernel to be used for
+	  a variety of out-of-kernel built wireless modules, say N here.
+
+config GKI_HIDDEN_USB_CONFIGS
+	bool "Hiddel USB configurations needed for GKI"
+	select USB_PHY
+	help
+	  Dummy config option used to enable all USB related hidden configs.
+	  These configurations are usually only selected by another config
+	  option or a combination of them.
+
+	  If you are not building a kernel to be used for a variety of
+	  out-of-kernel build USB drivers, say N here.
+
+config GKI_HIDDEN_SOC_BUS_CONFIGS
+	bool "Hidden SoC bus configuration needed for GKI"
+	select SOC_BUS
+	  help
+	    Dummy config option used to enable SOC_BUS hidden Kconfig.
+	    The configuration is required for SoCs to register themselves to the bus.
+
+	    If you are not building a kernel to be used for a variety of SoCs and
+	    out-of-tree drivers, say N here.
+
+config GKI_HIDDEN_RPMSG_CONFIGS
+	bool "Hidden RPMSG configuration needed for GKI"
+	select RPMSG
+	help
+	  Dummy config option used to enable the hidden RPMSG config.
+	  This configuration is usually only selected by another config
+	  option or a combination of them.
+
+	  If you are not building a kernel to be used for a variety of
+	  out-of-kernel build RPMSG drivers, say N here.
+
+config GKI_HIDDEN_GPU_CONFIGS
+	bool "Hidden GPU configuration needed for GKI"
+	select TRACE_GPU_MEM
+	help
+	  Dummy config option used to enable the hidden GPU config.
+	  These are normally selected implicitly when a module
+	  that relies on it is configured.
+
+config GKI_HIDDEN_IRQ_CONFIGS
+	bool "Hidden IRQ configuration needed for GKI"
+	select GENERIC_IRQ_CHIP
+	help
+	  Dummy config option used to enable GENERIC_IRQ_CHIP hidden
+	  config, required by various SoC platforms. This is usually
+	  selected by ARCH_*.
+
+config GKI_HIDDEN_HYPERVISOR_CONFIGS
+	bool "Hidden hypervisor configuration needed for GKI"
+	select SYS_HYPERVISOR
+	help
+	  Dummy config option used to enable the SYS_HYPERVISOR hidden
+	  config, required by various SoC platforms. This is usually
+	  selected by XEN or S390.
+
+# Atrocities needed for
+# a) building GKI modules in separate tree, or
+# b) building drivers that are not modularizable
+#
+# All of these should be reworked into an upstream solution
+# if possible.
+#
+config GKI_HACKS_TO_FIX
+	bool "GKI Dummy config options"
+	select GKI_HIDDEN_CRYPTO_CONFIGS
+	select GKI_HIDDEN_DRM_CONFIGS
+	select GKI_HIDDEN_REGMAP_CONFIGS
+	select GKI_HIDDEN_SND_CONFIGS
+	select GKI_HIDDEN_SND_SOC_CONFIGS
+	select GKI_HIDDEN_MMC_CONFIGS
+	select GKI_HIDDEN_GPIO_CONFIGS
+	select GKI_HIDDEN_QCOM_CONFIGS
+	select GKI_LEGACY_WEXT_ALLCONFIG
+	select GKI_HIDDEN_MEDIA_CONFIGS
+	select GKI_HIDDEN_VIRTUAL_CONFIGS
+	select GKI_HIDDEN_USB_CONFIGS
+	select GKI_HIDDEN_SOC_BUS_CONFIGS
+	select GKI_HIDDEN_RPMSG_CONFIGS
+	select GKI_HIDDEN_GPU_CONFIGS
+	select GKI_HIDDEN_IRQ_CONFIGS
+	select GKI_HIDDEN_HYPERVISOR_CONFIGS
+	help
+	  Dummy config option used to enable core functionality used by
+	  modules that may not be selectable in this config.
+
+	  Unless you are building a GKI kernel to be used with modules
+	  built from a different config, say N here.
diff --git a/init/Makefile b/init/Makefile
index 6246a06..57499b1 100644
--- a/init/Makefile
+++ b/init/Makefile
@@ -35,4 +35,4 @@
 	@$($(quiet)chk_compile.h)
 	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@	\
 	"$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT)"	\
-	"$(CONFIG_PREEMPT_RT)" "$(CC) $(KBUILD_CFLAGS)"
+	"$(CONFIG_PREEMPT_RT)" $(CONFIG_CC_VERSION_TEXT) "$(LD)"
diff --git a/init/init_task.c b/init/init_task.c
index 5d8359c..def1a54 100644
--- a/init/init_task.c
+++ b/init/init_task.c
@@ -11,6 +11,7 @@
 #include <linux/mm.h>
 #include <linux/audit.h>
 #include <linux/numa.h>
+#include <linux/scs.h>
 
 #include <asm/pgtable.h>
 #include <linux/uaccess.h>
@@ -183,9 +184,19 @@ struct task_struct init_task
 #ifdef CONFIG_SECURITY
 	.security	= NULL,
 #endif
+#ifdef CONFIG_SECCOMP
+	.seccomp	= { .filter_count = ATOMIC_INIT(0) },
+#endif
 };
 EXPORT_SYMBOL(init_task);
 
+#ifdef CONFIG_SHADOW_CALL_STACK
+unsigned long init_shadow_call_stack[SCS_SIZE / sizeof(long)] __init_task_data
+		__aligned(SCS_SIZE) = {
+	[(SCS_SIZE / sizeof(long)) - 1] = SCS_END_MAGIC
+};
+#endif
+
 /*
  * Initial thread structure. Alignment of this is handled by a special
  * linker map entry.
diff --git a/init/main.c b/init/main.c
index fef9e61..2cea509 100644
--- a/init/main.c
+++ b/init/main.c
@@ -28,6 +28,7 @@
 #include <linux/initrd.h>
 #include <linux/memblock.h>
 #include <linux/acpi.h>
+#include <linux/bootconfig.h>
 #include <linux/console.h>
 #include <linux/nmi.h>
 #include <linux/percpu.h>
@@ -39,6 +40,7 @@
 #include <linux/security.h>
 #include <linux/smp.h>
 #include <linux/profile.h>
+#include <linux/kfence.h>
 #include <linux/rcupdate.h>
 #include <linux/moduleparam.h>
 #include <linux/kallsyms.h>
@@ -137,8 +139,19 @@ char __initdata boot_command_line[COMMAND_LINE_SIZE];
 char *saved_command_line;
 /* Command line for parameter parsing */
 static char *static_command_line;
-/* Command line for per-initcall parameter parsing */
-static char *initcall_command_line;
+/* Untouched extra command line */
+static char *extra_command_line;
+/* Extra init arguments */
+static char *extra_init_args;
+
+#ifdef CONFIG_BOOT_CONFIG
+/* Is bootconfig on command line? */
+static bool bootconfig_found;
+static bool initargs_found;
+#else
+# define bootconfig_found false
+# define initargs_found false
+#endif
 
 static char *execute_command;
 static char *ramdisk_execute_command;
@@ -246,6 +259,218 @@ static int __init loglevel(char *str)
 
 early_param("loglevel", loglevel);
 
+#ifdef CONFIG_BLK_DEV_INITRD
+static void * __init get_boot_config_from_initrd(u32 *_size, u32 *_csum)
+{
+	u32 size, csum;
+	char *data;
+	u32 *hdr;
+
+	if (!initrd_end)
+		return NULL;
+
+	data = (char *)initrd_end - BOOTCONFIG_MAGIC_LEN;
+	if (memcmp(data, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN))
+		return NULL;
+
+	hdr = (u32 *)(data - 8);
+	size = hdr[0];
+	csum = hdr[1];
+
+	data = ((void *)hdr) - size;
+	if ((unsigned long)data < initrd_start) {
+		pr_err("bootconfig size %d is greater than initrd size %ld\n",
+			size, initrd_end - initrd_start);
+		return NULL;
+	}
+
+	/* Remove bootconfig from initramfs/initrd */
+	initrd_end = (unsigned long)data;
+	if (_size)
+		*_size = size;
+	if (_csum)
+		*_csum = csum;
+
+	return data;
+}
+#else
+static void * __init get_boot_config_from_initrd(u32 *_size, u32 *_csum)
+{
+	return NULL;
+}
+#endif
+
+#ifdef CONFIG_BOOT_CONFIG
+
+char xbc_namebuf[XBC_KEYLEN_MAX] __initdata;
+
+#define rest(dst, end) ((end) > (dst) ? (end) - (dst) : 0)
+
+static int __init xbc_snprint_cmdline(char *buf, size_t size,
+				      struct xbc_node *root)
+{
+	struct xbc_node *knode, *vnode;
+	char *end = buf + size;
+	const char *val;
+	int ret;
+
+	xbc_node_for_each_key_value(root, knode, val) {
+		ret = xbc_node_compose_key_after(root, knode,
+					xbc_namebuf, XBC_KEYLEN_MAX);
+		if (ret < 0)
+			return ret;
+
+		vnode = xbc_node_get_child(knode);
+		if (!vnode) {
+			ret = snprintf(buf, rest(buf, end), "%s ", xbc_namebuf);
+			if (ret < 0)
+				return ret;
+			buf += ret;
+			continue;
+		}
+		xbc_array_for_each_value(vnode, val) {
+			ret = snprintf(buf, rest(buf, end), "%s=\"%s\" ",
+				       xbc_namebuf, val);
+			if (ret < 0)
+				return ret;
+			buf += ret;
+		}
+	}
+
+	return buf - (end - size);
+}
+#undef rest
+
+/* Make an extra command line under given key word */
+static char * __init xbc_make_cmdline(const char *key)
+{
+	struct xbc_node *root;
+	char *new_cmdline;
+	int ret, len = 0;
+
+	root = xbc_find_node(key);
+	if (!root)
+		return NULL;
+
+	/* Count required buffer size */
+	len = xbc_snprint_cmdline(NULL, 0, root);
+	if (len <= 0)
+		return NULL;
+
+	new_cmdline = memblock_alloc(len + 1, SMP_CACHE_BYTES);
+	if (!new_cmdline) {
+		pr_err("Failed to allocate memory for extra kernel cmdline.\n");
+		return NULL;
+	}
+
+	ret = xbc_snprint_cmdline(new_cmdline, len + 1, root);
+	if (ret < 0 || ret > len) {
+		pr_err("Failed to print extra kernel cmdline.\n");
+		return NULL;
+	}
+
+	return new_cmdline;
+}
+
+static u32 boot_config_checksum(unsigned char *p, u32 size)
+{
+	u32 ret = 0;
+
+	while (size--)
+		ret += *p++;
+
+	return ret;
+}
+
+static int __init bootconfig_params(char *param, char *val,
+				    const char *unused, void *arg)
+{
+	if (strcmp(param, "bootconfig") == 0) {
+		bootconfig_found = true;
+	} else if (strcmp(param, "--") == 0) {
+		initargs_found = true;
+	}
+	return 0;
+}
+
+static void __init setup_boot_config(const char *cmdline)
+{
+	static char tmp_cmdline[COMMAND_LINE_SIZE] __initdata;
+	const char *msg;
+	int pos;
+	u32 size, csum;
+	char *data, *copy;
+	int ret;
+
+	/* Cut out the bootconfig data even if we have no bootconfig option */
+	data = get_boot_config_from_initrd(&size, &csum);
+
+	strlcpy(tmp_cmdline, boot_command_line, COMMAND_LINE_SIZE);
+	parse_args("bootconfig", tmp_cmdline, NULL, 0, 0, 0, NULL,
+		   bootconfig_params);
+
+	if (!bootconfig_found)
+		return;
+
+	if (!data) {
+		pr_err("'bootconfig' found on command line, but no bootconfig found\n");
+		return;
+	}
+
+	if (size >= XBC_DATA_MAX) {
+		pr_err("bootconfig size %d greater than max size %d\n",
+			size, XBC_DATA_MAX);
+		return;
+	}
+
+	if (boot_config_checksum((unsigned char *)data, size) != csum) {
+		pr_err("bootconfig checksum failed\n");
+		return;
+	}
+
+	copy = memblock_alloc(size + 1, SMP_CACHE_BYTES);
+	if (!copy) {
+		pr_err("Failed to allocate memory for bootconfig\n");
+		return;
+	}
+
+	memcpy(copy, data, size);
+	copy[size] = '\0';
+
+	ret = xbc_init(copy, &msg, &pos);
+	if (ret < 0) {
+		if (pos < 0)
+			pr_err("Failed to init bootconfig: %s.\n", msg);
+		else
+			pr_err("Failed to parse bootconfig: %s at %d.\n",
+				msg, pos);
+	} else {
+		pr_info("Load bootconfig: %d bytes %d nodes\n", size, ret);
+		/* keys starting with "kernel." are passed via cmdline */
+		extra_command_line = xbc_make_cmdline("kernel");
+		/* Also, "init." keys are init arguments */
+		extra_init_args = xbc_make_cmdline("init");
+	}
+	return;
+}
+
+#else
+
+static void __init setup_boot_config(const char *cmdline)
+{
+	/* Remove bootconfig data from initrd */
+	get_boot_config_from_initrd(NULL, NULL);
+}
+
+static int __init warn_bootconfig(char *str)
+{
+	pr_warn("WARNING: 'bootconfig' found on the kernel command line but CONFIG_BOOTCONFIG is not set.\n");
+	return 0;
+}
+early_param("bootconfig", warn_bootconfig);
+
+#endif
+
 /* Change NUL term back to "=", to make "param" the whole string. */
 static int __init repair_env_string(char *param, char *val,
 				    const char *unused, void *arg)
@@ -375,22 +600,51 @@ static inline void smp_prepare_cpus(unsigned int maxcpus) { }
  */
 static void __init setup_command_line(char *command_line)
 {
-	size_t len = strlen(boot_command_line) + 1;
+	size_t len, xlen = 0, ilen = 0;
 
-	saved_command_line = memblock_alloc(len, SMP_CACHE_BYTES);
+	if (extra_command_line)
+		xlen = strlen(extra_command_line);
+	if (extra_init_args)
+		ilen = strlen(extra_init_args) + 4; /* for " -- " */
+
+	len = xlen + strlen(boot_command_line) + 1;
+
+	saved_command_line = memblock_alloc(len + ilen, SMP_CACHE_BYTES);
 	if (!saved_command_line)
-		panic("%s: Failed to allocate %zu bytes\n", __func__, len);
-
-	initcall_command_line =	memblock_alloc(len, SMP_CACHE_BYTES);
-	if (!initcall_command_line)
-		panic("%s: Failed to allocate %zu bytes\n", __func__, len);
+		panic("%s: Failed to allocate %zu bytes\n", __func__, len + ilen);
 
 	static_command_line = memblock_alloc(len, SMP_CACHE_BYTES);
 	if (!static_command_line)
 		panic("%s: Failed to allocate %zu bytes\n", __func__, len);
 
-	strcpy(saved_command_line, boot_command_line);
-	strcpy(static_command_line, command_line);
+	if (xlen) {
+		/*
+		 * We have to put extra_command_line before boot command
+		 * lines because there could be dashes (separator of init
+		 * command line) in the command lines.
+		 */
+		strcpy(saved_command_line, extra_command_line);
+		strcpy(static_command_line, extra_command_line);
+	}
+	strcpy(saved_command_line + xlen, boot_command_line);
+	strcpy(static_command_line + xlen, command_line);
+
+	if (ilen) {
+		/*
+		 * Append supplemental init boot args to saved_command_line
+		 * so that user can check what command line options passed
+		 * to init.
+		 */
+		len = strlen(saved_command_line);
+		if (initargs_found) {
+			saved_command_line[len++] = ' ';
+		} else {
+			strcpy(saved_command_line + len, " -- ");
+			len += 4;
+		}
+
+		strcpy(saved_command_line + len, extra_init_args);
+	}
 }
 
 /*
@@ -526,14 +780,16 @@ static void __init report_meminit(void)
 {
 	const char *stack;
 
-	if (IS_ENABLED(CONFIG_INIT_STACK_ALL))
-		stack = "all";
+	if (IS_ENABLED(CONFIG_INIT_STACK_ALL_PATTERN))
+		stack = "all(pattern)";
+	else if (IS_ENABLED(CONFIG_INIT_STACK_ALL_ZERO))
+		stack = "all(zero)";
 	else if (IS_ENABLED(CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL))
-		stack = "byref_all";
+		stack = "byref_all(zero)";
 	else if (IS_ENABLED(CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF))
-		stack = "byref";
+		stack = "byref(zero)";
 	else if (IS_ENABLED(CONFIG_GCC_PLUGIN_STRUCTLEAK_USER))
-		stack = "__user";
+		stack = "__user(zero)";
 	else
 		stack = "off";
 
@@ -555,6 +811,7 @@ static void __init mm_init(void)
 	 */
 	page_ext_init_flatmem();
 	init_debug_pagealloc();
+	kfence_alloc_pool();
 	report_meminit();
 	mem_init();
 	kmem_cache_init();
@@ -597,6 +854,7 @@ asmlinkage __visible void __init start_kernel(void)
 	pr_notice("%s", linux_banner);
 	early_security_init();
 	setup_arch(&command_line);
+	setup_boot_config(command_line);
 	setup_command_line(command_line);
 	setup_nr_cpu_ids();
 	setup_per_cpu_areas();
@@ -606,7 +864,7 @@ asmlinkage __visible void __init start_kernel(void)
 	build_all_zonelists(NULL);
 	page_alloc_init();
 
-	pr_notice("Kernel command line: %s\n", boot_command_line);
+	pr_notice("Kernel command line: %s\n", saved_command_line);
 	/* parameters may set static keys */
 	jump_label_init();
 	parse_early_param();
@@ -617,6 +875,9 @@ asmlinkage __visible void __init start_kernel(void)
 	if (!IS_ERR_OR_NULL(after_dashes))
 		parse_args("Setting init args", after_dashes, NULL, 0, -1, -1,
 			   NULL, set_init_arg);
+	if (extra_init_args)
+		parse_args("Setting extra init args", extra_init_args,
+			   NULL, 0, -1, -1, NULL, set_init_arg);
 
 	/*
 	 * These use large bootmem allocations and must precede
@@ -680,6 +941,7 @@ asmlinkage __visible void __init start_kernel(void)
 	hrtimers_init();
 	softirq_init();
 	timekeeping_init();
+	kfence_init();
 
 	/*
 	 * For best initial stack canary entropy, prepare it after:
@@ -993,13 +1255,12 @@ static const char *initcall_level_names[] __initdata = {
 	"late",
 };
 
-static void __init do_initcall_level(int level)
+static void __init do_initcall_level(int level, char *command_line)
 {
 	initcall_entry_t *fn;
 
-	strcpy(initcall_command_line, saved_command_line);
 	parse_args(initcall_level_names[level],
-		   initcall_command_line, __start___param,
+		   command_line, __start___param,
 		   __stop___param - __start___param,
 		   level, level,
 		   NULL, &repair_env_string);
@@ -1012,9 +1273,20 @@ static void __init do_initcall_level(int level)
 static void __init do_initcalls(void)
 {
 	int level;
+	size_t len = strlen(saved_command_line) + 1;
+	char *command_line;
 
-	for (level = 0; level < ARRAY_SIZE(initcall_levels) - 1; level++)
-		do_initcall_level(level);
+	command_line = kzalloc(len, GFP_KERNEL);
+	if (!command_line)
+		panic("%s: Failed to allocate %zu bytes\n", __func__, len);
+
+	for (level = 0; level < ARRAY_SIZE(initcall_levels) - 1; level++) {
+		/* Parser modifies command_line, restore it each time */
+		strcpy(command_line, saved_command_line);
+		do_initcall_level(level, command_line);
+	}
+
+	kfree(command_line);
 }
 
 /*
diff --git a/kernel/Makefile b/kernel/Makefile
index 6aef130..45bf07c 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -35,6 +35,9 @@
 # cond_syscall is currently not LTO compatible
 CFLAGS_sys_ni.o = $(DISABLE_LTO)
 
+# Don't instrument error handlers
+CFLAGS_REMOVE_cfi.o := $(CC_FLAGS_CFI)
+
 obj-y += sched/
 obj-y += locking/
 obj-y += power/
@@ -101,6 +104,8 @@
 obj-$(CONFIG_IRQ_WORK) += irq_work.o
 obj-$(CONFIG_CPU_PM) += cpu_pm.o
 obj-$(CONFIG_BPF) += bpf/
+obj-$(CONFIG_SHADOW_CALL_STACK) += scs.o
+obj-$(CONFIG_CFI_CLANG) += cfi.o
 
 obj-$(CONFIG_PERF_EVENTS) += events/
 
diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c
index 56bc96f5a..8be04e1 100644
--- a/kernel/bpf/core.c
+++ b/kernel/bpf/core.c
@@ -792,6 +792,14 @@ void __weak bpf_jit_free_exec(void *addr)
 	module_memfree(addr);
 }
 
+#if IS_ENABLED(CONFIG_BPF_JIT) && IS_ENABLED(CONFIG_CFI_CLANG)
+bool __weak arch_bpf_jit_check_func(const struct bpf_prog *prog)
+{
+	return true;
+}
+EXPORT_SYMBOL_GPL(arch_bpf_jit_check_func);
+#endif
+
 struct bpf_binary_header *
 bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr,
 		     unsigned int alignment,
@@ -818,6 +826,7 @@ bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr,
 	/* Fill space with illegal/arch-dep instructions. */
 	bpf_fill_ill_insns(hdr, size);
 
+	bpf_jit_set_header_magic(hdr);
 	hdr->pages = pages;
 	hole = min_t(unsigned int, size - (proglen + sizeof(*hdr)),
 		     PAGE_SIZE - sizeof(*hdr));
@@ -2036,6 +2045,7 @@ const struct bpf_func_proto bpf_get_prandom_u32_proto __weak;
 const struct bpf_func_proto bpf_get_smp_processor_id_proto __weak;
 const struct bpf_func_proto bpf_get_numa_node_id_proto __weak;
 const struct bpf_func_proto bpf_ktime_get_ns_proto __weak;
+const struct bpf_func_proto bpf_ktime_get_boot_ns_proto __weak;
 
 const struct bpf_func_proto bpf_get_current_pid_tgid_proto __weak;
 const struct bpf_func_proto bpf_get_current_uid_gid_proto __weak;
diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c
index a77d281..e178f18 100644
--- a/kernel/bpf/helpers.c
+++ b/kernel/bpf/helpers.c
@@ -148,7 +148,19 @@ BPF_CALL_0(bpf_ktime_get_ns)
 
 const struct bpf_func_proto bpf_ktime_get_ns_proto = {
 	.func		= bpf_ktime_get_ns,
-	.gpl_only	= true,
+	.gpl_only	= false,
+	.ret_type	= RET_INTEGER,
+};
+
+BPF_CALL_0(bpf_ktime_get_boot_ns)
+{
+	/* NMI safe access to clock boottime */
+	return ktime_get_boot_fast_ns();
+}
+
+const struct bpf_func_proto bpf_ktime_get_boot_ns_proto = {
+	.func		= bpf_ktime_get_boot_ns,
+	.gpl_only	= false,
 	.ret_type	= RET_INTEGER,
 };
 
diff --git a/kernel/cfi.c b/kernel/cfi.c
new file mode 100644
index 0000000..3141974
--- /dev/null
+++ b/kernel/cfi.c
@@ -0,0 +1,317 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Clang Control Flow Integrity (CFI) error and slowpath handling.
+ *
+ * Copyright (C) 2019 Google LLC
+ */
+
+#include <linux/gfp.h>
+#include <linux/hardirq.h>
+#include <linux/module.h>
+#include <linux/mutex.h>
+#include <linux/printk.h>
+#include <linux/ratelimit.h>
+#include <linux/rcupdate.h>
+#include <asm/cacheflush.h>
+#include <asm/set_memory.h>
+
+/* Compiler-defined handler names */
+#ifdef CONFIG_CFI_PERMISSIVE
+#define cfi_failure_handler	__ubsan_handle_cfi_check_fail
+#define cfi_slowpath_handler	__cfi_slowpath_diag
+#else /* enforcing */
+#define cfi_failure_handler	__ubsan_handle_cfi_check_fail_abort
+#define cfi_slowpath_handler	__cfi_slowpath
+#endif /* CONFIG_CFI_PERMISSIVE */
+
+static inline void handle_cfi_failure(void *ptr)
+{
+	if (IS_ENABLED(CONFIG_CFI_PERMISSIVE))
+		WARN_RATELIMIT(1, "CFI failure (target: %pS):\n", ptr);
+	else
+		panic("CFI failure (target: %pS)\n", ptr);
+}
+
+#ifdef CONFIG_MODULES
+#ifdef CONFIG_CFI_CLANG_SHADOW
+struct shadow_range {
+	/* Module address range */
+	unsigned long mod_min_addr;
+	unsigned long mod_max_addr;
+	/* Module page range */
+	unsigned long min_page;
+	unsigned long max_page;
+};
+
+#define SHADOW_ORDER	2
+#define SHADOW_PAGES	(1 << SHADOW_ORDER)
+#define SHADOW_SIZE \
+	((SHADOW_PAGES * PAGE_SIZE - sizeof(struct shadow_range)) / sizeof(u16))
+#define SHADOW_INVALID	0xFFFF
+
+struct cfi_shadow {
+	/* Page range covered by the shadow */
+	struct shadow_range r;
+	/* Page offsets to __cfi_check functions in modules */
+	u16 shadow[SHADOW_SIZE];
+};
+
+static DEFINE_MUTEX(shadow_update_lock);
+static struct cfi_shadow __rcu *cfi_shadow __read_mostly;
+
+static inline int ptr_to_shadow(const struct cfi_shadow *s, unsigned long ptr)
+{
+	unsigned long index;
+	unsigned long page = ptr >> PAGE_SHIFT;
+
+	if (unlikely(page < s->r.min_page))
+		return -1; /* Outside of module area */
+
+	index = page - s->r.min_page;
+
+	if (index >= SHADOW_SIZE)
+		return -1; /* Cannot be addressed with shadow */
+
+	return (int)index;
+}
+
+static inline unsigned long shadow_to_ptr(const struct cfi_shadow *s,
+	int index)
+{
+	if (unlikely(index < 0 || index >= SHADOW_SIZE))
+		return 0;
+
+	if (unlikely(s->shadow[index] == SHADOW_INVALID))
+		return 0;
+
+	return (s->r.min_page + s->shadow[index]) << PAGE_SHIFT;
+}
+
+static inline unsigned long shadow_to_page(const struct cfi_shadow *s,
+	int index)
+{
+	if (unlikely(index < 0 || index >= SHADOW_SIZE))
+		return 0;
+
+	return (s->r.min_page + index) << PAGE_SHIFT;
+}
+
+static void prepare_next_shadow(const struct cfi_shadow __rcu *prev,
+		struct cfi_shadow *next)
+{
+	int i, index, check;
+
+	/* Mark everything invalid */
+	memset(next->shadow, 0xFF, sizeof(next->shadow));
+
+	if (!prev)
+		return; /* No previous shadow */
+
+	/* If the base address didn't change, update is not needed */
+	if (prev->r.min_page == next->r.min_page) {
+		memcpy(next->shadow, prev->shadow, sizeof(next->shadow));
+		return;
+	}
+
+	/* Convert the previous shadow to the new address range */
+	for (i = 0; i < SHADOW_SIZE; ++i) {
+		if (prev->shadow[i] == SHADOW_INVALID)
+			continue;
+
+		index = ptr_to_shadow(next, shadow_to_page(prev, i));
+		if (index < 0)
+			continue;
+
+		check = ptr_to_shadow(next,
+				shadow_to_ptr(prev, prev->shadow[i]));
+		if (check < 0)
+			continue;
+
+		next->shadow[index] = (u16)check;
+	}
+}
+
+static void add_module_to_shadow(struct cfi_shadow *s, struct module *mod)
+{
+	unsigned long ptr;
+	unsigned long min_page_addr;
+	unsigned long max_page_addr;
+	unsigned long check = (unsigned long)mod->cfi_check;
+	int check_index = ptr_to_shadow(s, check);
+
+	if (unlikely((check & PAGE_MASK) != check))
+		return; /* Must be page aligned */
+
+	if (check_index < 0)
+		return; /* Module not addressable with shadow */
+
+	min_page_addr = (unsigned long)mod->core_layout.base & PAGE_MASK;
+	max_page_addr = (unsigned long)mod->core_layout.base +
+				       mod->core_layout.text_size;
+	max_page_addr &= PAGE_MASK;
+
+	/* For each page, store the check function index in the shadow */
+	for (ptr = min_page_addr; ptr <= max_page_addr; ptr += PAGE_SIZE) {
+		int index = ptr_to_shadow(s, ptr);
+
+		if (index >= 0) {
+			/* Each page must only contain one module */
+			WARN_ON(s->shadow[index] != SHADOW_INVALID);
+			s->shadow[index] = (u16)check_index;
+		}
+	}
+}
+
+static void remove_module_from_shadow(struct cfi_shadow *s, struct module *mod)
+{
+	unsigned long ptr;
+	unsigned long min_page_addr;
+	unsigned long max_page_addr;
+
+	min_page_addr = (unsigned long)mod->core_layout.base & PAGE_MASK;
+	max_page_addr = (unsigned long)mod->core_layout.base +
+				       mod->core_layout.text_size;
+	max_page_addr &= PAGE_MASK;
+
+	for (ptr = min_page_addr; ptr <= max_page_addr; ptr += PAGE_SIZE) {
+		int index = ptr_to_shadow(s, ptr);
+
+		if (index >= 0)
+			s->shadow[index] = SHADOW_INVALID;
+	}
+}
+
+typedef void (*update_shadow_fn)(struct cfi_shadow *, struct module *);
+
+static void update_shadow(struct module *mod, unsigned long min_addr,
+	unsigned long max_addr, update_shadow_fn fn)
+{
+	struct cfi_shadow *prev;
+	struct cfi_shadow *next = (struct cfi_shadow *)
+		__get_free_pages(GFP_KERNEL, SHADOW_ORDER);
+
+	next->r.mod_min_addr = min_addr;
+	next->r.mod_max_addr = max_addr;
+	next->r.min_page = min_addr >> PAGE_SHIFT;
+	next->r.max_page = max_addr >> PAGE_SHIFT;
+
+	mutex_lock(&shadow_update_lock);
+	prev = rcu_dereference_protected(cfi_shadow, 1);
+	prepare_next_shadow(prev, next);
+
+	fn(next, mod);
+	set_memory_ro((unsigned long)next, SHADOW_PAGES);
+	rcu_assign_pointer(cfi_shadow, next);
+
+	mutex_unlock(&shadow_update_lock);
+	synchronize_rcu();
+
+	if (prev) {
+		set_memory_rw((unsigned long)prev, SHADOW_PAGES);
+		free_pages((unsigned long)prev, SHADOW_ORDER);
+	}
+}
+
+void cfi_module_add(struct module *mod, unsigned long min_addr,
+	unsigned long max_addr)
+{
+	update_shadow(mod, min_addr, max_addr, add_module_to_shadow);
+}
+EXPORT_SYMBOL_GPL(cfi_module_add);
+
+void cfi_module_remove(struct module *mod, unsigned long min_addr,
+	unsigned long max_addr)
+{
+	update_shadow(mod, min_addr, max_addr, remove_module_from_shadow);
+}
+EXPORT_SYMBOL_GPL(cfi_module_remove);
+
+static inline cfi_check_fn ptr_to_check_fn(const struct cfi_shadow __rcu *s,
+	unsigned long ptr)
+{
+	int index;
+
+	if (unlikely(!s))
+		return NULL; /* No shadow available */
+
+	if (ptr < s->r.mod_min_addr || ptr > s->r.mod_max_addr)
+		return NULL; /* Not in a mapped module */
+
+	index = ptr_to_shadow(s, ptr);
+	if (index < 0)
+		return NULL; /* Cannot be addressed with shadow */
+
+	return (cfi_check_fn)shadow_to_ptr(s, index);
+}
+#endif /* CONFIG_CFI_CLANG_SHADOW */
+
+static inline cfi_check_fn find_module_cfi_check(void *ptr)
+{
+	cfi_check_fn f = CFI_CHECK_FN;
+	struct module *mod;
+
+	preempt_disable();
+	mod = __module_address((unsigned long)ptr);
+	if (mod)
+		f = mod->cfi_check;
+	preempt_enable();
+
+	return f;
+}
+
+static inline cfi_check_fn find_cfi_check(void *ptr)
+{
+	bool rcu;
+	cfi_check_fn f;
+
+	rcu = rcu_is_watching();
+	if (!rcu)
+		rcu_nmi_enter();
+
+#ifdef CONFIG_CFI_CLANG_SHADOW
+	/* Look up the __cfi_check function to use */
+	rcu_read_lock_sched();
+	f = ptr_to_check_fn(rcu_dereference_sched(cfi_shadow),
+			    (unsigned long)ptr);
+	rcu_read_unlock_sched();
+
+	if (f)
+		goto out;
+
+	/*
+	 * Fall back to find_module_cfi_check, which works also for a larger
+	 * module address space, but is slower.
+	 */
+#endif /* CONFIG_CFI_CLANG_SHADOW */
+
+	f = find_module_cfi_check(ptr);
+
+out:
+	if (!rcu)
+		rcu_nmi_exit();
+
+	return f;
+}
+
+void cfi_slowpath_handler(uint64_t id, void *ptr, void *diag)
+{
+	cfi_check_fn check = find_cfi_check(ptr);
+
+	if (likely(check))
+		check(id, ptr, diag);
+	else /* Don't allow unchecked modules */
+		handle_cfi_failure(ptr);
+}
+EXPORT_SYMBOL_GPL(cfi_slowpath_handler);
+#endif /* CONFIG_MODULES */
+
+void cfi_failure_handler(void *data, void *ptr, void *vtable)
+{
+	handle_cfi_failure(ptr);
+}
+EXPORT_SYMBOL_GPL(cfi_failure_handler);
+
+void __cfi_check_fail(void *data, void *ptr)
+{
+	handle_cfi_failure(ptr);
+}
diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c
index 79682c2..fb12c1e 100644
--- a/kernel/cgroup/cgroup-v1.c
+++ b/kernel/cgroup/cgroup-v1.c
@@ -514,7 +514,8 @@ static ssize_t __cgroup1_procs_write(struct kernfs_open_file *of,
 	tcred = get_task_cred(task);
 	if (!uid_eq(cred->euid, GLOBAL_ROOT_UID) &&
 	    !uid_eq(cred->euid, tcred->uid) &&
-	    !uid_eq(cred->euid, tcred->suid))
+	    !uid_eq(cred->euid, tcred->suid) &&
+	    !ns_capable(tcred->user_ns, CAP_SYS_NICE))
 		ret = -EACCES;
 	put_cred(tcred);
 	if (ret)
diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
index bab6a93..1430532 100644
--- a/kernel/cgroup/cpuset.c
+++ b/kernel/cgroup/cpuset.c
@@ -334,17 +334,6 @@ static struct cpuset top_cpuset = {
  */
 
 DEFINE_STATIC_PERCPU_RWSEM(cpuset_rwsem);
-
-void cpuset_read_lock(void)
-{
-	percpu_down_read(&cpuset_rwsem);
-}
-
-void cpuset_read_unlock(void)
-{
-	percpu_up_read(&cpuset_rwsem);
-}
-
 static DEFINE_SPINLOCK(callback_lock);
 
 static struct workqueue_struct *cpuset_migrate_mm_wq;
diff --git a/kernel/cpu.c b/kernel/cpu.c
index fa0e572..5748aa5 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -1301,6 +1301,7 @@ void __weak arch_enable_nonboot_cpus_end(void)
 void enable_nonboot_cpus(void)
 {
 	int cpu, error;
+	struct device *cpu_device;
 
 	/* Allow everyone to use the CPU hotplug again */
 	cpu_maps_update_begin();
@@ -1318,6 +1319,12 @@ void enable_nonboot_cpus(void)
 		trace_suspend_resume(TPS("CPU_ON"), cpu, false);
 		if (!error) {
 			pr_info("CPU%d is up\n", cpu);
+			cpu_device = get_cpu_device(cpu);
+			if (!cpu_device)
+				pr_err("%s: failed to get cpu%d device\n",
+				       __func__, cpu);
+			else
+				kobject_uevent(&cpu_device->kobj, KOBJ_ONLINE);
 			continue;
 		}
 		pr_warn("Error taking CPU%d up: %d\n", cpu, error);
diff --git a/kernel/dma/contiguous.c b/kernel/dma/contiguous.c
index 69cfb43..cb600bb 100644
--- a/kernel/dma/contiguous.c
+++ b/kernel/dma/contiguous.c
@@ -31,6 +31,7 @@
 #endif
 
 struct cma *dma_contiguous_default_area;
+EXPORT_SYMBOL_GPL(dma_contiguous_default_area);
 
 /*
  * Default global CMA area size can be defined in kernel's .config.
diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c
index 0a093a6..05482fe 100644
--- a/kernel/dma/direct.c
+++ b/kernel/dma/direct.c
@@ -50,6 +50,7 @@ u64 dma_direct_get_required_mask(struct device *dev)
 
 	return (1ULL << (fls64(max_dma) - 1)) * 2 - 1;
 }
+EXPORT_SYMBOL_GPL(dma_direct_get_required_mask);
 
 static gfp_t __dma_direct_optimal_gfp_mask(struct device *dev, u64 dma_mask,
 		u64 *phys_mask)
@@ -210,6 +211,7 @@ void *dma_direct_alloc(struct device *dev, size_t size,
 		return arch_dma_alloc(dev, size, dma_handle, gfp, attrs);
 	return dma_direct_alloc_pages(dev, size, dma_handle, gfp, attrs);
 }
+EXPORT_SYMBOL_GPL(dma_direct_alloc);
 
 void dma_direct_free(struct device *dev, size_t size,
 		void *cpu_addr, dma_addr_t dma_addr, unsigned long attrs)
@@ -220,6 +222,7 @@ void dma_direct_free(struct device *dev, size_t size,
 	else
 		dma_direct_free_pages(dev, size, cpu_addr, dma_addr, attrs);
 }
+EXPORT_SYMBOL_GPL(dma_direct_free);
 
 #if defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE) || \
     defined(CONFIG_SWIOTLB)
diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c
index 8682a53..839e736 100644
--- a/kernel/dma/mapping.c
+++ b/kernel/dma/mapping.c
@@ -135,6 +135,7 @@ int dma_common_get_sgtable(struct device *dev, struct sg_table *sgt,
 		sg_set_page(sgt->sgl, page, PAGE_ALIGN(size), 0);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(dma_common_get_sgtable);
 
 /*
  * The whole dma_get_sgtable() idea is fundamentally unsafe - it seems
@@ -223,6 +224,7 @@ int dma_common_mmap(struct device *dev, struct vm_area_struct *vma,
 	return -ENXIO;
 #endif /* CONFIG_MMU */
 }
+EXPORT_SYMBOL_GPL(dma_common_mmap);
 
 /**
  * dma_can_mmap - check if a given device supports dma_mmap_*
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 2ef33e9..c6180f78 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -4243,8 +4243,9 @@ find_get_context(struct pmu *pmu, struct task_struct *task,
 
 	if (!task) {
 		/* Must be root to operate on a CPU event: */
-		if (perf_paranoid_cpu() && !capable(CAP_SYS_ADMIN))
-			return ERR_PTR(-EACCES);
+		err = perf_allow_cpu(&event->attr);
+		if (err)
+			return ERR_PTR(err);
 
 		cpuctx = per_cpu_ptr(pmu->pmu_cpu_context, cpu);
 		ctx = &cpuctx->ctx;
@@ -4553,6 +4554,8 @@ static void _free_event(struct perf_event *event)
 
 	unaccount_event(event);
 
+	security_perf_event_free(event);
+
 	if (event->rb) {
 		/*
 		 * Can happen when we close an event with re-directed output.
@@ -5006,6 +5009,10 @@ perf_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
 	struct perf_event_context *ctx;
 	int ret;
 
+	ret = security_perf_event_read(event);
+	if (ret)
+		return ret;
+
 	ctx = perf_event_ctx_lock(event);
 	ret = __perf_read(event, buf, count);
 	perf_event_ctx_unlock(event, ctx);
@@ -5270,6 +5277,11 @@ static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 	struct perf_event_context *ctx;
 	long ret;
 
+	/* Treat ioctl like writes as it is likely a mutating operation. */
+	ret = security_perf_event_write(event);
+	if (ret)
+		return ret;
+
 	ctx = perf_event_ctx_lock(event);
 	ret = _perf_ioctl(event, cmd, arg);
 	perf_event_ctx_unlock(event, ctx);
@@ -5734,6 +5746,10 @@ static int perf_mmap(struct file *file, struct vm_area_struct *vma)
 	if (!(vma->vm_flags & VM_SHARED))
 		return -EINVAL;
 
+	ret = security_perf_event_read(event);
+	if (ret)
+		return ret;
+
 	vma_size = vma->vm_end - vma->vm_start;
 
 	if (vma->vm_pgoff == 0) {
@@ -5867,7 +5883,7 @@ static int perf_mmap(struct file *file, struct vm_area_struct *vma)
 	lock_limit >>= PAGE_SHIFT;
 	locked = atomic64_read(&vma->vm_mm->pinned_vm) + extra;
 
-	if ((locked > lock_limit) && perf_paranoid_tracepoint_raw() &&
+	if ((locked > lock_limit) && perf_is_paranoid() &&
 		!capable(CAP_IPC_LOCK)) {
 		ret = -EPERM;
 		goto unlock;
@@ -10618,11 +10634,20 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
 		}
 	}
 
+	err = security_perf_event_alloc(event);
+	if (err)
+		goto err_callchain_buffer;
+
 	/* symmetric to unaccount_event() in _free_event() */
 	account_event(event);
 
 	return event;
 
+err_callchain_buffer:
+	if (!event->parent) {
+		if (event->attr.sample_type & PERF_SAMPLE_CALLCHAIN)
+			put_callchain_buffers();
+	}
 err_addr_filters:
 	kfree(event->addr_filter_ranges);
 
@@ -10711,9 +10736,11 @@ static int perf_copy_attr(struct perf_event_attr __user *uattr,
 			attr->branch_sample_type = mask;
 		}
 		/* privileged levels capture (kernel, hv): check permissions */
-		if ((mask & PERF_SAMPLE_BRANCH_PERM_PLM)
-		    && perf_paranoid_kernel() && !capable(CAP_SYS_ADMIN))
-			return -EACCES;
+		if (mask & PERF_SAMPLE_BRANCH_PERM_PLM) {
+			ret = perf_allow_kernel(attr);
+			if (ret)
+				return ret;
+		}
 	}
 
 	if (attr->sample_type & PERF_SAMPLE_REGS_USER) {
@@ -10926,13 +10953,19 @@ SYSCALL_DEFINE5(perf_event_open,
 	if (flags & ~PERF_FLAG_ALL)
 		return -EINVAL;
 
+	/* Do we allow access to perf_event_open(2) ? */
+	err = security_perf_event_open(&attr, PERF_SECURITY_OPEN);
+	if (err)
+		return err;
+
 	err = perf_copy_attr(attr_uptr, &attr);
 	if (err)
 		return err;
 
 	if (!attr.exclude_kernel) {
-		if (perf_paranoid_kernel() && !capable(CAP_SYS_ADMIN))
-			return -EACCES;
+		err = perf_allow_kernel(&attr);
+		if (err)
+			return err;
 	}
 
 	if (attr.namespaces) {
@@ -10949,9 +10982,11 @@ SYSCALL_DEFINE5(perf_event_open,
 	}
 
 	/* Only privileged users can get physical addresses */
-	if ((attr.sample_type & PERF_SAMPLE_PHYS_ADDR) &&
-	    perf_paranoid_kernel() && !capable(CAP_SYS_ADMIN))
-		return -EACCES;
+	if ((attr.sample_type & PERF_SAMPLE_PHYS_ADDR)) {
+		err = perf_allow_kernel(&attr);
+		if (err)
+			return err;
+	}
 
 	err = security_locked_down(LOCKDOWN_PERF);
 	if (err && (attr.sample_type & PERF_SAMPLE_REGS_INTR))
diff --git a/kernel/exit.c b/kernel/exit.c
index ece6477..37bfafdd 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -226,6 +226,7 @@ void release_task(struct task_struct *p)
 	}
 
 	write_unlock_irq(&tasklist_lock);
+	seccomp_filter_release(p);
 	release_thread(p);
 	put_task_struct_rcu_user(p);
 
@@ -1480,23 +1481,6 @@ static long do_wait(struct wait_opts *wo)
 	return retval;
 }
 
-static struct pid *pidfd_get_pid(unsigned int fd)
-{
-	struct fd f;
-	struct pid *pid;
-
-	f = fdget(fd);
-	if (!f.file)
-		return ERR_PTR(-EBADF);
-
-	pid = pidfd_pid(f.file);
-	if (!IS_ERR(pid))
-		get_pid(pid);
-
-	fdput(f);
-	return pid;
-}
-
 static long kernel_waitid(int which, pid_t upid, struct waitid_info *infop,
 			  int options, struct rusage *ru)
 {
@@ -1504,6 +1488,7 @@ static long kernel_waitid(int which, pid_t upid, struct waitid_info *infop,
 	struct pid *pid = NULL;
 	enum pid_type type;
 	long ret;
+	unsigned int f_flags;
 
 	if (options & ~(WNOHANG|WNOWAIT|WEXITED|WSTOPPED|WCONTINUED|
 			__WNOTHREAD|__WCLONE|__WALL))
@@ -1537,7 +1522,7 @@ static long kernel_waitid(int which, pid_t upid, struct waitid_info *infop,
 		if (upid < 0)
 			return -EINVAL;
 
-		pid = pidfd_get_pid(upid);
+		pid = pidfd_get_pid(upid, &f_flags);
 		if (IS_ERR(pid))
 			return PTR_ERR(pid);
 		break;
diff --git a/kernel/fork.c b/kernel/fork.c
index 50f37d5..3ed4f4ca 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -93,7 +93,9 @@
 #include <linux/kcov.h>
 #include <linux/livepatch.h>
 #include <linux/thread_info.h>
+#include <linux/cpufreq_times.h>
 #include <linux/stackleak.h>
+#include <linux/scs.h>
 
 #include <asm/pgtable.h>
 #include <asm/pgalloc.h>
@@ -451,6 +453,9 @@ void put_task_stack(struct task_struct *tsk)
 
 void free_task(struct task_struct *tsk)
 {
+	cpufreq_task_times_exit(tsk);
+	scs_release(tsk);
+
 #ifndef CONFIG_THREAD_INFO_IN_TASK
 	/*
 	 * The task is finally done with both the stack and thread_info,
@@ -466,7 +471,6 @@ void free_task(struct task_struct *tsk)
 #endif
 	rt_mutex_debug_task_free(tsk);
 	ftrace_graph_exit_task(tsk);
-	put_seccomp_filter(tsk);
 	arch_release_task_struct(tsk);
 	if (tsk->flags & PF_KTHREAD)
 		free_kthread_struct(tsk);
@@ -834,6 +838,8 @@ void __init fork_init(void)
 			  NULL, free_vm_stack_cache);
 #endif
 
+	scs_init();
+
 	lockdep_init_task(&init_task);
 	uprobes_init();
 }
@@ -893,6 +899,10 @@ static struct task_struct *dup_task_struct(struct task_struct *orig, int node)
 	if (err)
 		goto free_stack;
 
+	err = scs_prepare(tsk, node);
+	if (err)
+		goto free_stack;
+
 #ifdef CONFIG_SECCOMP
 	/*
 	 * We must handle setting up seccomp filters once we're under
@@ -1868,6 +1878,8 @@ static __latent_entropy struct task_struct *copy_process(
 	if (!p)
 		goto fork_out;
 
+	cpufreq_task_times_init(p);
+
 	/*
 	 * This _must_ happen before we call free_task(), i.e. before we jump
 	 * to any of the bad_fork_* labels. This is to avoid freeing
@@ -2234,6 +2246,7 @@ static __latent_entropy struct task_struct *copy_process(
 	write_unlock_irq(&tasklist_lock);
 
 	proc_fork_connector(p);
+	sched_post_fork(p);
 	cgroup_post_fork(p);
 	cgroup_threadgroup_change_end(current);
 	perf_event_fork(p);
@@ -2381,6 +2394,8 @@ long _do_fork(struct kernel_clone_args *args)
 	if (IS_ERR(p))
 		return PTR_ERR(p);
 
+	cpufreq_task_times_alloc(p);
+
 	/*
 	 * Do this prior waking up the new thread - the thread pointer
 	 * might get invalid after that point, if the thread exits quickly.
diff --git a/kernel/futex.c b/kernel/futex.c
index 042c270..60732a2 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -60,6 +60,7 @@
 #include <asm/futex.h>
 
 #include "locking/rtmutex_common.h"
+#include <trace/hooks/futex.h>
 
 /*
  * READ this before attempting to hack on futexes!
@@ -2356,6 +2357,7 @@ queue_unlock(struct futex_hash_bucket *hb)
 static inline void __queue_me(struct futex_q *q, struct futex_hash_bucket *hb)
 {
 	int prio;
+	bool already_on_hb = false;
 
 	/*
 	 * The priority used to register this element is
@@ -2368,7 +2370,9 @@ static inline void __queue_me(struct futex_q *q, struct futex_hash_bucket *hb)
 	prio = min(current->normal_prio, MAX_RT_PRIO);
 
 	plist_node_init(&q->list, prio);
-	plist_add(&q->list, &hb->chain);
+	trace_android_vh_alter_futex_plist_add(&q->list, &hb->chain, &already_on_hb);
+	if (!already_on_hb)
+		plist_add(&q->list, &hb->chain);
 	q->task = current;
 }
 
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index b76703b..2023023 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -14,6 +14,7 @@
 #include <linux/interrupt.h>
 #include <linux/kernel_stat.h>
 #include <linux/irqdomain.h>
+#include <linux/wakeup_reason.h>
 
 #include <trace/events/irq.h>
 
@@ -507,8 +508,22 @@ static bool irq_may_run(struct irq_desc *desc)
 	 * If the interrupt is not in progress and is not an armed
 	 * wakeup interrupt, proceed.
 	 */
-	if (!irqd_has_set(&desc->irq_data, mask))
+	if (!irqd_has_set(&desc->irq_data, mask)) {
+#ifdef CONFIG_PM_SLEEP
+		if (unlikely(desc->no_suspend_depth &&
+			     irqd_is_wakeup_set(&desc->irq_data))) {
+			unsigned int irq = irq_desc_get_irq(desc);
+			const char *name = "(unnamed)";
+
+			if (desc->action && desc->action->name)
+				name = desc->action->name;
+
+			log_abnormal_wakeup_reason("misconfigured IRQ %u %s",
+						   irq, name);
+		}
+#endif
 		return true;
+	}
 
 	/*
 	 * If the interrupt is an armed wakeup source, mark it pending
@@ -1298,6 +1313,50 @@ EXPORT_SYMBOL_GPL(handle_fasteoi_mask_irq);
 #endif /* CONFIG_IRQ_FASTEOI_HIERARCHY_HANDLERS */
 
 /**
+ * irq_chip_set_parent_state - set the state of a parent interrupt.
+ *
+ * @data: Pointer to interrupt specific data
+ * @which: State to be restored (one of IRQCHIP_STATE_*)
+ * @val: Value corresponding to @which
+ *
+ * Conditional success, if the underlying irqchip does not implement it.
+ */
+int irq_chip_set_parent_state(struct irq_data *data,
+			      enum irqchip_irq_state which,
+			      bool val)
+{
+	data = data->parent_data;
+
+	if (!data || !data->chip->irq_set_irqchip_state)
+		return 0;
+
+	return data->chip->irq_set_irqchip_state(data, which, val);
+}
+EXPORT_SYMBOL_GPL(irq_chip_set_parent_state);
+
+/**
+ * irq_chip_get_parent_state - get the state of a parent interrupt.
+ *
+ * @data: Pointer to interrupt specific data
+ * @which: one of IRQCHIP_STATE_* the caller wants to know
+ * @state: a pointer to a boolean where the state is to be stored
+ *
+ * Conditional success, if the underlying irqchip does not implement it.
+ */
+int irq_chip_get_parent_state(struct irq_data *data,
+			      enum irqchip_irq_state which,
+			      bool *state)
+{
+	data = data->parent_data;
+
+	if (!data || !data->chip->irq_get_irqchip_state)
+		return 0;
+
+	return data->chip->irq_get_irqchip_state(data, which, state);
+}
+EXPORT_SYMBOL_GPL(irq_chip_get_parent_state);
+
+/**
  * irq_chip_enable_parent - Enable the parent interrupt (defaults to unmask if
  * NULL)
  * @data:	Pointer to interrupt specific data
@@ -1434,6 +1493,7 @@ int irq_chip_retrigger_hierarchy(struct irq_data *data)
 
 	return 0;
 }
+EXPORT_SYMBOL_GPL(irq_chip_retrigger_hierarchy);
 
 /**
  * irq_chip_set_vcpu_affinity_parent - Set vcpu affinity on the parent interrupt
@@ -1448,7 +1508,7 @@ int irq_chip_set_vcpu_affinity_parent(struct irq_data *data, void *vcpu_info)
 
 	return -ENOSYS;
 }
-
+EXPORT_SYMBOL_GPL(irq_chip_set_vcpu_affinity_parent);
 /**
  * irq_chip_set_wake_parent - Set/reset wake-up on the parent interrupt
  * @data:	Pointer to interrupt specific data
diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
index 5e03cbe..f7c98c3 100644
--- a/kernel/irq/irqdomain.c
+++ b/kernel/irq/irqdomain.c
@@ -296,6 +296,7 @@ void irq_domain_update_bus_token(struct irq_domain *domain,
 
 	mutex_unlock(&irq_domain_mutex);
 }
+EXPORT_SYMBOL_GPL(irq_domain_update_bus_token);
 
 /**
  * irq_domain_add_simple() - Register an irq_domain and optionally map a range of irqs
diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c
index 61f9d78..14de0c7 100644
--- a/kernel/kallsyms.c
+++ b/kernel/kallsyms.c
@@ -159,6 +159,26 @@ static unsigned long kallsyms_sym_address(int idx)
 	return kallsyms_relative_base - 1 - kallsyms_offsets[idx];
 }
 
+#if defined(CONFIG_CFI_CLANG) && defined(CONFIG_THINLTO)
+/*
+ * LLVM appends a hash to static function names when ThinLTO and CFI are
+ * both enabled, which causes confusion and potentially breaks user space
+ * tools, so we will strip the postfix from expanded symbol names.
+ */
+static inline char *cleanup_symbol_name(char *s)
+{
+	char *res = NULL;
+
+	res = strrchr(s, '$');
+	if (res)
+		*res = '\0';
+
+	return res;
+}
+#else
+static inline char *cleanup_symbol_name(char *s) { return NULL; }
+#endif
+
 /* Lookup the address for this symbol. Returns 0 if not found. */
 unsigned long kallsyms_lookup_name(const char *name)
 {
@@ -171,10 +191,12 @@ unsigned long kallsyms_lookup_name(const char *name)
 
 		if (strcmp(namebuf, name) == 0)
 			return kallsyms_sym_address(i);
+
+		if (cleanup_symbol_name(namebuf) && strcmp(namebuf, name) == 0)
+			return kallsyms_sym_address(i);
 	}
 	return module_kallsyms_lookup_name(name);
 }
-EXPORT_SYMBOL_GPL(kallsyms_lookup_name);
 
 int kallsyms_on_each_symbol(int (*fn)(void *, const char *, struct module *,
 				      unsigned long),
@@ -193,7 +215,6 @@ int kallsyms_on_each_symbol(int (*fn)(void *, const char *, struct module *,
 	}
 	return module_kallsyms_on_each_symbol(fn, data);
 }
-EXPORT_SYMBOL_GPL(kallsyms_on_each_symbol);
 
 static unsigned long get_symbol_pos(unsigned long addr,
 				    unsigned long *symbolsize,
@@ -297,7 +318,9 @@ const char *kallsyms_lookup(unsigned long addr,
 				       namebuf, KSYM_NAME_LEN);
 		if (modname)
 			*modname = NULL;
-		return namebuf;
+
+		ret = namebuf;
+		goto found;
 	}
 
 	/* See if it's in a module or a BPF JITed image. */
@@ -310,11 +333,16 @@ const char *kallsyms_lookup(unsigned long addr,
 	if (!ret)
 		ret = ftrace_mod_address_lookup(addr, symbolsize,
 						offset, modname, namebuf);
+
+found:
+	cleanup_symbol_name(namebuf);
 	return ret;
 }
 
 int lookup_symbol_name(unsigned long addr, char *symname)
 {
+	int res;
+
 	symname[0] = '\0';
 	symname[KSYM_NAME_LEN - 1] = '\0';
 
@@ -325,15 +353,23 @@ int lookup_symbol_name(unsigned long addr, char *symname)
 		/* Grab name */
 		kallsyms_expand_symbol(get_symbol_offset(pos),
 				       symname, KSYM_NAME_LEN);
-		return 0;
+		goto found;
 	}
 	/* See if it's in a module. */
-	return lookup_module_symbol_name(addr, symname);
+	res = lookup_module_symbol_name(addr, symname);
+	if (res)
+		return res;
+
+found:
+	cleanup_symbol_name(symname);
+	return 0;
 }
 
 int lookup_symbol_attrs(unsigned long addr, unsigned long *size,
 			unsigned long *offset, char *modname, char *name)
 {
+	int res;
+
 	name[0] = '\0';
 	name[KSYM_NAME_LEN - 1] = '\0';
 
@@ -345,10 +381,16 @@ int lookup_symbol_attrs(unsigned long addr, unsigned long *size,
 		kallsyms_expand_symbol(get_symbol_offset(pos),
 				       name, KSYM_NAME_LEN);
 		modname[0] = '\0';
-		return 0;
+		goto found;
 	}
 	/* See if it's in a module. */
-	return lookup_module_symbol_attrs(addr, size, offset, modname, name);
+	res = lookup_module_symbol_attrs(addr, size, offset, modname, name);
+	if (res)
+		return res;
+
+found:
+	cleanup_symbol_name(name);
+	return 0;
 }
 
 /* Look up a kernel symbol and return it in a text buffer. */
diff --git a/kernel/kcov.c b/kernel/kcov.c
index 2ee38727..f503542 100644
--- a/kernel/kcov.c
+++ b/kernel/kcov.c
@@ -9,6 +9,7 @@
 #include <linux/types.h>
 #include <linux/file.h>
 #include <linux/fs.h>
+#include <linux/hashtable.h>
 #include <linux/init.h>
 #include <linux/mm.h>
 #include <linux/preempt.h>
@@ -21,8 +22,11 @@
 #include <linux/uaccess.h>
 #include <linux/kcov.h>
 #include <linux/refcount.h>
+#include <linux/log2.h>
 #include <asm/setup.h>
 
+#define kcov_debug(fmt, ...) pr_debug("%s: " fmt, __func__, ##__VA_ARGS__)
+
 /* Number of 64-bit words written per one comparison: */
 #define KCOV_WORDS_PER_CMP 4
 
@@ -44,19 +48,100 @@ struct kcov {
 	 * Reference counter. We keep one for:
 	 *  - opened file descriptor
 	 *  - task with enabled coverage (we can't unwire it from another task)
+	 *  - each code section for remote coverage collection
 	 */
 	refcount_t		refcount;
 	/* The lock protects mode, size, area and t. */
 	spinlock_t		lock;
 	enum kcov_mode		mode;
-	/* Size of arena (in long's for KCOV_MODE_TRACE). */
-	unsigned		size;
+	/* Size of arena (in long's). */
+	unsigned int		size;
 	/* Coverage buffer shared with user space. */
 	void			*area;
 	/* Task for which we collect coverage, or NULL. */
 	struct task_struct	*t;
+	/* Collecting coverage from remote (background) threads. */
+	bool			remote;
+	/* Size of remote area (in long's). */
+	unsigned int		remote_size;
+	/*
+	 * Sequence is incremented each time kcov is reenabled, used by
+	 * kcov_remote_stop(), see the comment there.
+	 */
+	int			sequence;
 };
 
+struct kcov_remote_area {
+	struct list_head	list;
+	unsigned int		size;
+};
+
+struct kcov_remote {
+	u64			handle;
+	struct kcov		*kcov;
+	struct hlist_node	hnode;
+};
+
+static DEFINE_SPINLOCK(kcov_remote_lock);
+static DEFINE_HASHTABLE(kcov_remote_map, 4);
+static struct list_head kcov_remote_areas = LIST_HEAD_INIT(kcov_remote_areas);
+
+/* Must be called with kcov_remote_lock locked. */
+static struct kcov_remote *kcov_remote_find(u64 handle)
+{
+	struct kcov_remote *remote;
+
+	hash_for_each_possible(kcov_remote_map, remote, hnode, handle) {
+		if (remote->handle == handle)
+			return remote;
+	}
+	return NULL;
+}
+
+static struct kcov_remote *kcov_remote_add(struct kcov *kcov, u64 handle)
+{
+	struct kcov_remote *remote;
+
+	if (kcov_remote_find(handle))
+		return ERR_PTR(-EEXIST);
+	remote = kmalloc(sizeof(*remote), GFP_ATOMIC);
+	if (!remote)
+		return ERR_PTR(-ENOMEM);
+	remote->handle = handle;
+	remote->kcov = kcov;
+	hash_add(kcov_remote_map, &remote->hnode, handle);
+	return remote;
+}
+
+/* Must be called with kcov_remote_lock locked. */
+static struct kcov_remote_area *kcov_remote_area_get(unsigned int size)
+{
+	struct kcov_remote_area *area;
+	struct list_head *pos;
+
+	kcov_debug("size = %u\n", size);
+	list_for_each(pos, &kcov_remote_areas) {
+		area = list_entry(pos, struct kcov_remote_area, list);
+		if (area->size == size) {
+			list_del(&area->list);
+			kcov_debug("rv = %px\n", area);
+			return area;
+		}
+	}
+	kcov_debug("rv = NULL\n");
+	return NULL;
+}
+
+/* Must be called with kcov_remote_lock locked. */
+static void kcov_remote_area_put(struct kcov_remote_area *area,
+					unsigned int size)
+{
+	kcov_debug("area = %px, size = %u\n", area, size);
+	INIT_LIST_HEAD(&area->list);
+	area->size = size;
+	list_add(&area->list, &kcov_remote_areas);
+}
+
 static notrace bool check_kcov_mode(enum kcov_mode needed_mode, struct task_struct *t)
 {
 	unsigned int mode;
@@ -73,7 +158,7 @@ static notrace bool check_kcov_mode(enum kcov_mode needed_mode, struct task_stru
 	 * in_interrupt() returns false (e.g. preempt_schedule_irq()).
 	 * READ_ONCE()/barrier() effectively provides load-acquire wrt
 	 * interrupts, there are paired barrier()/WRITE_ONCE() in
-	 * kcov_ioctl_locked().
+	 * kcov_start().
 	 */
 	barrier();
 	return mode == needed_mode;
@@ -227,6 +312,78 @@ void notrace __sanitizer_cov_trace_switch(u64 val, u64 *cases)
 EXPORT_SYMBOL(__sanitizer_cov_trace_switch);
 #endif /* ifdef CONFIG_KCOV_ENABLE_COMPARISONS */
 
+static void kcov_start(struct task_struct *t, unsigned int size,
+			void *area, enum kcov_mode mode, int sequence)
+{
+	kcov_debug("t = %px, size = %u, area = %px\n", t, size, area);
+	/* Cache in task struct for performance. */
+	t->kcov_size = size;
+	t->kcov_area = area;
+	/* See comment in check_kcov_mode(). */
+	barrier();
+	WRITE_ONCE(t->kcov_mode, mode);
+	t->kcov_sequence = sequence;
+}
+
+static void kcov_stop(struct task_struct *t)
+{
+	WRITE_ONCE(t->kcov_mode, KCOV_MODE_DISABLED);
+	barrier();
+	t->kcov_size = 0;
+	t->kcov_area = NULL;
+}
+
+static void kcov_task_reset(struct task_struct *t)
+{
+	kcov_stop(t);
+	t->kcov = NULL;
+	t->kcov_sequence = 0;
+	t->kcov_handle = 0;
+}
+
+void kcov_task_init(struct task_struct *t)
+{
+	kcov_task_reset(t);
+	t->kcov_handle = current->kcov_handle;
+}
+
+static void kcov_reset(struct kcov *kcov)
+{
+	kcov->t = NULL;
+	kcov->mode = KCOV_MODE_INIT;
+	kcov->remote = false;
+	kcov->remote_size = 0;
+	kcov->sequence++;
+}
+
+static void kcov_remote_reset(struct kcov *kcov)
+{
+	int bkt;
+	struct kcov_remote *remote;
+	struct hlist_node *tmp;
+
+	spin_lock(&kcov_remote_lock);
+	hash_for_each_safe(kcov_remote_map, bkt, tmp, remote, hnode) {
+		if (remote->kcov != kcov)
+			continue;
+		kcov_debug("removing handle %llx\n", remote->handle);
+		hash_del(&remote->hnode);
+		kfree(remote);
+	}
+	/* Do reset before unlock to prevent races with kcov_remote_start(). */
+	kcov_reset(kcov);
+	spin_unlock(&kcov_remote_lock);
+}
+
+static void kcov_disable(struct task_struct *t, struct kcov *kcov)
+{
+	kcov_task_reset(t);
+	if (kcov->remote)
+		kcov_remote_reset(kcov);
+	else
+		kcov_reset(kcov);
+}
+
 static void kcov_get(struct kcov *kcov)
 {
 	refcount_inc(&kcov->refcount);
@@ -235,20 +392,12 @@ static void kcov_get(struct kcov *kcov)
 static void kcov_put(struct kcov *kcov)
 {
 	if (refcount_dec_and_test(&kcov->refcount)) {
+		kcov_remote_reset(kcov);
 		vfree(kcov->area);
 		kfree(kcov);
 	}
 }
 
-void kcov_task_init(struct task_struct *t)
-{
-	WRITE_ONCE(t->kcov_mode, KCOV_MODE_DISABLED);
-	barrier();
-	t->kcov_size = 0;
-	t->kcov_area = NULL;
-	t->kcov = NULL;
-}
-
 void kcov_task_exit(struct task_struct *t)
 {
 	struct kcov *kcov;
@@ -256,15 +405,36 @@ void kcov_task_exit(struct task_struct *t)
 	kcov = t->kcov;
 	if (kcov == NULL)
 		return;
+
 	spin_lock(&kcov->lock);
+	kcov_debug("t = %px, kcov->t = %px\n", t, kcov->t);
+	/*
+	 * For KCOV_ENABLE devices we want to make sure that t->kcov->t == t,
+	 * which comes down to:
+	 *        WARN_ON(!kcov->remote && kcov->t != t);
+	 *
+	 * For KCOV_REMOTE_ENABLE devices, the exiting task is either:
+	 * 2. A remote task between kcov_remote_start() and kcov_remote_stop().
+	 *    In this case we should print a warning right away, since a task
+	 *    shouldn't be exiting when it's in a kcov coverage collection
+	 *    section. Here t points to the task that is collecting remote
+	 *    coverage, and t->kcov->t points to the thread that created the
+	 *    kcov device. Which means that to detect this case we need to
+	 *    check that t != t->kcov->t, and this gives us the following:
+	 *        WARN_ON(kcov->remote && kcov->t != t);
+	 *
+	 * 2. The task that created kcov exiting without calling KCOV_DISABLE,
+	 *    and then again we can make sure that t->kcov->t == t:
+	 *        WARN_ON(kcov->remote && kcov->t != t);
+	 *
+	 * By combining all three checks into one we get:
+	 */
 	if (WARN_ON(kcov->t != t)) {
 		spin_unlock(&kcov->lock);
 		return;
 	}
 	/* Just to not leave dangling references behind. */
-	kcov_task_init(t);
-	kcov->t = NULL;
-	kcov->mode = KCOV_MODE_INIT;
+	kcov_disable(t, kcov);
 	spin_unlock(&kcov->lock);
 	kcov_put(kcov);
 }
@@ -313,6 +483,7 @@ static int kcov_open(struct inode *inode, struct file *filep)
 	if (!kcov)
 		return -ENOMEM;
 	kcov->mode = KCOV_MODE_DISABLED;
+	kcov->sequence = 1;
 	refcount_set(&kcov->refcount, 1);
 	spin_lock_init(&kcov->lock);
 	filep->private_data = kcov;
@@ -325,6 +496,20 @@ static int kcov_close(struct inode *inode, struct file *filep)
 	return 0;
 }
 
+static int kcov_get_mode(unsigned long arg)
+{
+	if (arg == KCOV_TRACE_PC)
+		return KCOV_MODE_TRACE_PC;
+	else if (arg == KCOV_TRACE_CMP)
+#ifdef CONFIG_KCOV_ENABLE_COMPARISONS
+		return KCOV_MODE_TRACE_CMP;
+#else
+		return -ENOTSUPP;
+#endif
+	else
+		return -EINVAL;
+}
+
 /*
  * Fault in a lazily-faulted vmalloc area before it can be used by
  * __santizer_cov_trace_pc(), to avoid recursion issues if any code on the
@@ -340,14 +525,35 @@ static void kcov_fault_in_area(struct kcov *kcov)
 		READ_ONCE(area[offset]);
 }
 
+static inline bool kcov_check_handle(u64 handle, bool common_valid,
+				bool uncommon_valid, bool zero_valid)
+{
+	if (handle & ~(KCOV_SUBSYSTEM_MASK | KCOV_INSTANCE_MASK))
+		return false;
+	switch (handle & KCOV_SUBSYSTEM_MASK) {
+	case KCOV_SUBSYSTEM_COMMON:
+		return (handle & KCOV_INSTANCE_MASK) ?
+			common_valid : zero_valid;
+	case KCOV_SUBSYSTEM_USB:
+		return uncommon_valid;
+	default:
+		return false;
+	}
+	return false;
+}
+
 static int kcov_ioctl_locked(struct kcov *kcov, unsigned int cmd,
 			     unsigned long arg)
 {
 	struct task_struct *t;
 	unsigned long size, unused;
+	int mode, i;
+	struct kcov_remote_arg *remote_arg;
+	struct kcov_remote *remote;
 
 	switch (cmd) {
 	case KCOV_INIT_TRACE:
+		kcov_debug("KCOV_INIT_TRACE\n");
 		/*
 		 * Enable kcov in trace mode and setup buffer size.
 		 * Must happen before anything else.
@@ -366,6 +572,7 @@ static int kcov_ioctl_locked(struct kcov *kcov, unsigned int cmd,
 		kcov->mode = KCOV_MODE_INIT;
 		return 0;
 	case KCOV_ENABLE:
+		kcov_debug("KCOV_ENABLE\n");
 		/*
 		 * Enable coverage for the current task.
 		 * At this point user must have been enabled trace mode,
@@ -378,29 +585,20 @@ static int kcov_ioctl_locked(struct kcov *kcov, unsigned int cmd,
 		t = current;
 		if (kcov->t != NULL || t->kcov != NULL)
 			return -EBUSY;
-		if (arg == KCOV_TRACE_PC)
-			kcov->mode = KCOV_MODE_TRACE_PC;
-		else if (arg == KCOV_TRACE_CMP)
-#ifdef CONFIG_KCOV_ENABLE_COMPARISONS
-			kcov->mode = KCOV_MODE_TRACE_CMP;
-#else
-		return -ENOTSUPP;
-#endif
-		else
-			return -EINVAL;
+		mode = kcov_get_mode(arg);
+		if (mode < 0)
+			return mode;
 		kcov_fault_in_area(kcov);
-		/* Cache in task struct for performance. */
-		t->kcov_size = kcov->size;
-		t->kcov_area = kcov->area;
-		/* See comment in check_kcov_mode(). */
-		barrier();
-		WRITE_ONCE(t->kcov_mode, kcov->mode);
+		kcov->mode = mode;
+		kcov_start(t, kcov->size, kcov->area, kcov->mode,
+				kcov->sequence);
 		t->kcov = kcov;
 		kcov->t = t;
-		/* This is put either in kcov_task_exit() or in KCOV_DISABLE. */
+		/* Put either in kcov_task_exit() or in KCOV_DISABLE. */
 		kcov_get(kcov);
 		return 0;
 	case KCOV_DISABLE:
+		kcov_debug("KCOV_DISABLE\n");
 		/* Disable coverage for the current task. */
 		unused = arg;
 		if (unused != 0 || current->kcov != kcov)
@@ -408,11 +606,65 @@ static int kcov_ioctl_locked(struct kcov *kcov, unsigned int cmd,
 		t = current;
 		if (WARN_ON(kcov->t != t))
 			return -EINVAL;
-		kcov_task_init(t);
-		kcov->t = NULL;
-		kcov->mode = KCOV_MODE_INIT;
+		kcov_disable(t, kcov);
 		kcov_put(kcov);
 		return 0;
+	case KCOV_REMOTE_ENABLE:
+		kcov_debug("KCOV_REMOTE_ENABLE\n");
+		if (kcov->mode != KCOV_MODE_INIT || !kcov->area)
+			return -EINVAL;
+		t = current;
+		if (kcov->t != NULL || t->kcov != NULL)
+			return -EBUSY;
+		remote_arg = (struct kcov_remote_arg *)arg;
+		mode = kcov_get_mode(remote_arg->trace_mode);
+		if (mode < 0)
+			return mode;
+		if (remote_arg->area_size > LONG_MAX / sizeof(unsigned long))
+			return -EINVAL;
+		kcov->mode = mode;
+		t->kcov = kcov;
+		kcov->t = t;
+		kcov->remote = true;
+		kcov->remote_size = remote_arg->area_size;
+		spin_lock(&kcov_remote_lock);
+		for (i = 0; i < remote_arg->num_handles; i++) {
+			kcov_debug("handle %llx\n", remote_arg->handles[i]);
+			if (!kcov_check_handle(remote_arg->handles[i],
+						false, true, false)) {
+				spin_unlock(&kcov_remote_lock);
+				kcov_disable(t, kcov);
+				return -EINVAL;
+			}
+			remote = kcov_remote_add(kcov, remote_arg->handles[i]);
+			if (IS_ERR(remote)) {
+				spin_unlock(&kcov_remote_lock);
+				kcov_disable(t, kcov);
+				return PTR_ERR(remote);
+			}
+		}
+		if (remote_arg->common_handle) {
+			kcov_debug("common handle %llx\n",
+					remote_arg->common_handle);
+			if (!kcov_check_handle(remote_arg->common_handle,
+						true, false, false)) {
+				spin_unlock(&kcov_remote_lock);
+				kcov_disable(t, kcov);
+				return -EINVAL;
+			}
+			remote = kcov_remote_add(kcov,
+					remote_arg->common_handle);
+			if (IS_ERR(remote)) {
+				spin_unlock(&kcov_remote_lock);
+				kcov_disable(t, kcov);
+				return PTR_ERR(remote);
+			}
+			t->kcov_handle = remote_arg->common_handle;
+		}
+		spin_unlock(&kcov_remote_lock);
+		/* Put either in kcov_task_exit() or in KCOV_DISABLE. */
+		kcov_get(kcov);
+		return 0;
 	default:
 		return -ENOTTY;
 	}
@@ -422,11 +674,35 @@ static long kcov_ioctl(struct file *filep, unsigned int cmd, unsigned long arg)
 {
 	struct kcov *kcov;
 	int res;
+	struct kcov_remote_arg *remote_arg = NULL;
+	unsigned int remote_num_handles;
+	unsigned long remote_arg_size;
+
+	if (cmd == KCOV_REMOTE_ENABLE) {
+		if (get_user(remote_num_handles, (unsigned __user *)(arg +
+				offsetof(struct kcov_remote_arg, num_handles))))
+			return -EFAULT;
+		if (remote_num_handles > KCOV_REMOTE_MAX_HANDLES)
+			return -EINVAL;
+		remote_arg_size = struct_size(remote_arg, handles,
+					remote_num_handles);
+		remote_arg = memdup_user((void __user *)arg, remote_arg_size);
+		if (IS_ERR(remote_arg))
+			return PTR_ERR(remote_arg);
+		if (remote_arg->num_handles != remote_num_handles) {
+			kfree(remote_arg);
+			return -EINVAL;
+		}
+		arg = (unsigned long)remote_arg;
+	}
 
 	kcov = filep->private_data;
 	spin_lock(&kcov->lock);
 	res = kcov_ioctl_locked(kcov, cmd, arg);
 	spin_unlock(&kcov->lock);
+
+	kfree(remote_arg);
+
 	return res;
 }
 
@@ -438,6 +714,207 @@ static const struct file_operations kcov_fops = {
 	.release        = kcov_close,
 };
 
+/*
+ * kcov_remote_start() and kcov_remote_stop() can be used to annotate a section
+ * of code in a kernel background thread to allow kcov to be used to collect
+ * coverage from that part of code.
+ *
+ * The handle argument of kcov_remote_start() identifies a code section that is
+ * used for coverage collection. A userspace process passes this handle to
+ * KCOV_REMOTE_ENABLE ioctl to make the used kcov device start collecting
+ * coverage for the code section identified by this handle.
+ *
+ * The usage of these annotations in the kernel code is different depending on
+ * the type of the kernel thread whose code is being annotated.
+ *
+ * For global kernel threads that are spawned in a limited number of instances
+ * (e.g. one USB hub_event() worker thread is spawned per USB HCD), each
+ * instance must be assigned a unique 4-byte instance id. The instance id is
+ * then combined with a 1-byte subsystem id to get a handle via
+ * kcov_remote_handle(subsystem_id, instance_id).
+ *
+ * For local kernel threads that are spawned from system calls handler when a
+ * user interacts with some kernel interface (e.g. vhost workers), a handle is
+ * passed from a userspace process as the common_handle field of the
+ * kcov_remote_arg struct (note, that the user must generate a handle by using
+ * kcov_remote_handle() with KCOV_SUBSYSTEM_COMMON as the subsystem id and an
+ * arbitrary 4-byte non-zero number as the instance id). This common handle
+ * then gets saved into the task_struct of the process that issued the
+ * KCOV_REMOTE_ENABLE ioctl. When this proccess issues system calls that spawn
+ * kernel threads, the common handle must be retrived via kcov_common_handle()
+ * and passed to the spawned threads via custom annotations. Those kernel
+ * threads must in turn be annotated with kcov_remote_start(common_handle) and
+ * kcov_remote_stop(). All of the threads that are spawned by the same process
+ * obtain the same handle, hence the name "common".
+ *
+ * See Documentation/dev-tools/kcov.rst for more details.
+ *
+ * Internally, this function looks up the kcov device associated with the
+ * provided handle, allocates an area for coverage collection, and saves the
+ * pointers to kcov and area into the current task_struct to allow coverage to
+ * be collected via __sanitizer_cov_trace_pc()
+ * In turns kcov_remote_stop() clears those pointers from task_struct to stop
+ * collecting coverage and copies all collected coverage into the kcov area.
+ */
+void kcov_remote_start(u64 handle)
+{
+	struct kcov_remote *remote;
+	void *area;
+	struct task_struct *t;
+	unsigned int size;
+	enum kcov_mode mode;
+	int sequence;
+
+	if (WARN_ON(!kcov_check_handle(handle, true, true, true)))
+		return;
+	if (WARN_ON(!in_task()))
+		return;
+	t = current;
+	/*
+	 * Check that kcov_remote_start is not called twice
+	 * nor called by user tasks (with enabled kcov).
+	 */
+	if (WARN_ON(t->kcov))
+		return;
+
+	kcov_debug("handle = %llx\n", handle);
+
+	spin_lock(&kcov_remote_lock);
+	remote = kcov_remote_find(handle);
+	if (!remote) {
+		kcov_debug("no remote found");
+		spin_unlock(&kcov_remote_lock);
+		return;
+	}
+	/* Put in kcov_remote_stop(). */
+	kcov_get(remote->kcov);
+	t->kcov = remote->kcov;
+	/*
+	 * Read kcov fields before unlock to prevent races with
+	 * KCOV_DISABLE / kcov_remote_reset().
+	 */
+	size = remote->kcov->remote_size;
+	mode = remote->kcov->mode;
+	sequence = remote->kcov->sequence;
+	area = kcov_remote_area_get(size);
+	spin_unlock(&kcov_remote_lock);
+
+	if (!area) {
+		area = vmalloc(size * sizeof(unsigned long));
+		if (!area) {
+			t->kcov = NULL;
+			kcov_put(remote->kcov);
+			return;
+		}
+	}
+	/* Reset coverage size. */
+	*(u64 *)area = 0;
+
+	kcov_debug("area = %px, size = %u", area, size);
+
+	kcov_start(t, size, area, mode, sequence);
+
+}
+EXPORT_SYMBOL(kcov_remote_start);
+
+static void kcov_move_area(enum kcov_mode mode, void *dst_area,
+				unsigned int dst_area_size, void *src_area)
+{
+	u64 word_size = sizeof(unsigned long);
+	u64 count_size, entry_size_log;
+	u64 dst_len, src_len;
+	void *dst_entries, *src_entries;
+	u64 dst_occupied, dst_free, bytes_to_move, entries_moved;
+
+	kcov_debug("%px %u <= %px %lu\n",
+		dst_area, dst_area_size, src_area, *(unsigned long *)src_area);
+
+	switch (mode) {
+	case KCOV_MODE_TRACE_PC:
+		dst_len = READ_ONCE(*(unsigned long *)dst_area);
+		src_len = *(unsigned long *)src_area;
+		count_size = sizeof(unsigned long);
+		entry_size_log = __ilog2_u64(sizeof(unsigned long));
+		break;
+	case KCOV_MODE_TRACE_CMP:
+		dst_len = READ_ONCE(*(u64 *)dst_area);
+		src_len = *(u64 *)src_area;
+		count_size = sizeof(u64);
+		BUILD_BUG_ON(!is_power_of_2(KCOV_WORDS_PER_CMP));
+		entry_size_log = __ilog2_u64(sizeof(u64) * KCOV_WORDS_PER_CMP);
+		break;
+	default:
+		WARN_ON(1);
+		return;
+	}
+
+	/* As arm can't divide u64 integers use log of entry size. */
+	if (dst_len > ((dst_area_size * word_size - count_size) >>
+				entry_size_log))
+		return;
+	dst_occupied = count_size + (dst_len << entry_size_log);
+	dst_free = dst_area_size * word_size - dst_occupied;
+	bytes_to_move = min(dst_free, src_len << entry_size_log);
+	dst_entries = dst_area + dst_occupied;
+	src_entries = src_area + count_size;
+	memcpy(dst_entries, src_entries, bytes_to_move);
+	entries_moved = bytes_to_move >> entry_size_log;
+
+	switch (mode) {
+	case KCOV_MODE_TRACE_PC:
+		WRITE_ONCE(*(unsigned long *)dst_area, dst_len + entries_moved);
+		break;
+	case KCOV_MODE_TRACE_CMP:
+		WRITE_ONCE(*(u64 *)dst_area, dst_len + entries_moved);
+		break;
+	default:
+		break;
+	}
+}
+
+/* See the comment before kcov_remote_start() for usage details. */
+void kcov_remote_stop(void)
+{
+	struct task_struct *t = current;
+	struct kcov *kcov = t->kcov;
+	void *area = t->kcov_area;
+	unsigned int size = t->kcov_size;
+	int sequence = t->kcov_sequence;
+
+	if (!kcov) {
+		kcov_debug("no kcov found\n");
+		return;
+	}
+
+	kcov_stop(t);
+	t->kcov = NULL;
+
+	spin_lock(&kcov->lock);
+	/*
+	 * KCOV_DISABLE could have been called between kcov_remote_start()
+	 * and kcov_remote_stop(), hence the check.
+	 */
+	kcov_debug("move if: %d == %d && %d\n",
+		sequence, kcov->sequence, (int)kcov->remote);
+	if (sequence == kcov->sequence && kcov->remote)
+		kcov_move_area(kcov->mode, kcov->area, kcov->size, area);
+	spin_unlock(&kcov->lock);
+
+	spin_lock(&kcov_remote_lock);
+	kcov_remote_area_put(area, size);
+	spin_unlock(&kcov_remote_lock);
+
+	kcov_put(kcov);
+}
+EXPORT_SYMBOL(kcov_remote_stop);
+
+/* See the comment before kcov_remote_start() for usage details. */
+u64 kcov_common_handle(void)
+{
+	return current->kcov_handle;
+}
+EXPORT_SYMBOL(kcov_common_handle);
+
 static int __init kcov_init(void)
 {
 	/*
diff --git a/kernel/kthread.c b/kernel/kthread.c
index 1d4c98a..b161ec30 100644
--- a/kernel/kthread.c
+++ b/kernel/kthread.c
@@ -912,7 +912,9 @@ static void __kthread_queue_delayed_work(struct kthread_worker *worker,
 	struct timer_list *timer = &dwork->timer;
 	struct kthread_work *work = &dwork->work;
 
+#ifndef CONFIG_CFI_CLANG
 	WARN_ON_ONCE(timer->function != kthread_delayed_work_timer_fn);
+#endif
 
 	/*
 	 * If @delay is 0, queue @dwork->work immediately.  This is for
diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
index ab4a460..1a9827a 100644
--- a/kernel/livepatch/core.c
+++ b/kernel/livepatch/core.c
@@ -210,7 +210,7 @@ static int klp_resolve_symbols(Elf_Shdr *relasec, struct module *pmod)
 	 * we use the smallest/strictest upper bound possible (56, based on
 	 * the current definition of MODULE_NAME_LEN) to prevent overflows.
 	 */
-	BUILD_BUG_ON(MODULE_NAME_LEN < 56 || KSYM_NAME_LEN != 128);
+	BUILD_BUG_ON(MODULE_NAME_LEN < 56 || KSYM_NAME_LEN != 192);
 
 	relas = (Elf_Rela *) relasec->sh_addr;
 	/* For each rela in this klp relocation section */
@@ -224,7 +224,7 @@ static int klp_resolve_symbols(Elf_Shdr *relasec, struct module *pmod)
 
 		/* Format: .klp.sym.objname.symname,sympos */
 		cnt = sscanf(strtab + sym->st_name,
-			     ".klp.sym.%55[^.].%127[^,],%lu",
+			     ".klp.sym.%55[^.].%191[^,],%lu",
 			     objname, symname, &sympos);
 		if (cnt != 3) {
 			pr_err("symbol %s has an incorrectly formatted name\n",
diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
index 468a9b8..5227d47 100644
--- a/kernel/locking/mutex.c
+++ b/kernel/locking/mutex.c
@@ -36,6 +36,8 @@
 # include "mutex.h"
 #endif
 
+#include <trace/hooks/dtask.h>
+
 void
 __mutex_init(struct mutex *lock, const char *name, struct lock_class_key *key)
 {
@@ -1002,6 +1004,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
 
 	waiter.task = current;
 
+	trace_android_vh_mutex_wait_start(lock);
 	set_current_state(state);
 	for (;;) {
 		/*
@@ -1057,6 +1060,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
 	spin_lock(&lock->wait_lock);
 acquired:
 	__set_current_state(TASK_RUNNING);
+	trace_android_vh_mutex_wait_finish(lock);
 
 	if (use_ww_ctx && ww_ctx) {
 		/*
@@ -1087,6 +1091,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
 
 err:
 	__set_current_state(TASK_RUNNING);
+	trace_android_vh_mutex_wait_finish(lock);
 	mutex_remove_waiter(lock, &waiter, current);
 err_early_kill:
 	spin_unlock(&lock->wait_lock);
diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c
index 5d54ff3..b91c0cb 100644
--- a/kernel/locking/rwsem.c
+++ b/kernel/locking/rwsem.c
@@ -31,6 +31,9 @@
 #include "rwsem.h"
 #include "lock_events.h"
 
+#include <trace/hooks/dtask.h>
+#include <trace/hooks/rwsem.h>
+
 /*
  * The least significant 3 bits of the owner value has the following
  * meanings when set.
@@ -341,6 +344,7 @@ void __init_rwsem(struct rw_semaphore *sem, const char *name,
 #ifdef CONFIG_RWSEM_SPIN_ON_OWNER
 	osq_lock_init(&sem->osq);
 #endif
+	trace_android_vh_rwsem_init(sem);
 }
 EXPORT_SYMBOL(__init_rwsem);
 
@@ -998,6 +1002,7 @@ rwsem_down_read_slowpath(struct rw_semaphore *sem, int state)
 	struct rwsem_waiter waiter;
 	DEFINE_WAKE_Q(wake_q);
 	bool wake = false;
+	bool already_on_list = false;
 
 	/*
 	 * Save the current read-owner of rwsem, if available, and the
@@ -1059,7 +1064,11 @@ rwsem_down_read_slowpath(struct rw_semaphore *sem, int state)
 		}
 		adjustment += RWSEM_FLAG_WAITERS;
 	}
-	list_add_tail(&waiter.list, &sem->wait_list);
+	trace_android_vh_alter_rwsem_list_add(
+					&waiter,
+					sem, &already_on_list);
+	if (!already_on_list)
+		list_add_tail(&waiter.list, &sem->wait_list);
 
 	/* we're now waiting on the lock, but no longer actively locking */
 	if (adjustment)
@@ -1081,10 +1090,12 @@ rwsem_down_read_slowpath(struct rw_semaphore *sem, int state)
 		    (adjustment & RWSEM_FLAG_WAITERS)))
 		rwsem_mark_wake(sem, RWSEM_WAKE_ANY, &wake_q);
 
+	trace_android_vh_rwsem_wake(sem);
 	raw_spin_unlock_irq(&sem->wait_lock);
 	wake_up_q(&wake_q);
 
 	/* wait to be given the lock */
+	trace_android_vh_rwsem_read_wait_start(sem);
 	for (;;) {
 		set_current_state(state);
 		if (!smp_load_acquire(&waiter.task)) {
@@ -1104,6 +1115,7 @@ rwsem_down_read_slowpath(struct rw_semaphore *sem, int state)
 	}
 
 	__set_current_state(TASK_RUNNING);
+	trace_android_vh_rwsem_read_wait_finish(sem);
 	lockevent_inc(rwsem_rlock);
 	return sem;
 
@@ -1115,6 +1127,7 @@ rwsem_down_read_slowpath(struct rw_semaphore *sem, int state)
 	}
 	raw_spin_unlock_irq(&sem->wait_lock);
 	__set_current_state(TASK_RUNNING);
+	trace_android_vh_rwsem_read_wait_finish(sem);
 	lockevent_inc(rwsem_rlock_fail);
 	return ERR_PTR(-EINTR);
 }
@@ -1144,6 +1157,7 @@ rwsem_down_write_slowpath(struct rw_semaphore *sem, int state)
 	struct rwsem_waiter waiter;
 	struct rw_semaphore *ret = sem;
 	DEFINE_WAKE_Q(wake_q);
+	bool already_on_list = false;
 
 	/* do optimistic spinning and steal lock if possible */
 	if (rwsem_can_spin_on_owner(sem, RWSEM_WR_NONSPINNABLE) &&
@@ -1172,7 +1186,11 @@ rwsem_down_write_slowpath(struct rw_semaphore *sem, int state)
 	/* account for this before adding a new element to the list */
 	wstate = list_empty(&sem->wait_list) ? WRITER_FIRST : WRITER_NOT_FIRST;
 
-	list_add_tail(&waiter.list, &sem->wait_list);
+	trace_android_vh_alter_rwsem_list_add(
+					&waiter,
+					sem, &already_on_list);
+	if (!already_on_list)
+		list_add_tail(&waiter.list, &sem->wait_list);
 
 	/* we're now waiting on the lock */
 	if (wstate == WRITER_NOT_FIRST) {
@@ -1208,7 +1226,9 @@ rwsem_down_write_slowpath(struct rw_semaphore *sem, int state)
 	}
 
 wait:
+	trace_android_vh_rwsem_wake(sem);
 	/* wait until we successfully acquire the lock */
+	trace_android_vh_rwsem_write_wait_start(sem);
 	set_current_state(state);
 	for (;;) {
 		if (rwsem_try_write_lock(sem, wstate)) {
@@ -1268,6 +1288,7 @@ rwsem_down_write_slowpath(struct rw_semaphore *sem, int state)
 		raw_spin_lock_irq(&sem->wait_lock);
 	}
 	__set_current_state(TASK_RUNNING);
+	trace_android_vh_rwsem_write_wait_finish(sem);
 	list_del(&waiter.list);
 	rwsem_disable_reader_optspin(sem, disable_rspin);
 	raw_spin_unlock_irq(&sem->wait_lock);
@@ -1277,6 +1298,7 @@ rwsem_down_write_slowpath(struct rw_semaphore *sem, int state)
 
 out_nolock:
 	__set_current_state(TASK_RUNNING);
+	trace_android_vh_rwsem_write_wait_finish(sem);
 	raw_spin_lock_irq(&sem->wait_lock);
 	list_del(&waiter.list);
 
@@ -1610,6 +1632,7 @@ EXPORT_SYMBOL(up_read);
 void up_write(struct rw_semaphore *sem)
 {
 	rwsem_release(&sem->dep_map, 1, _RET_IP_);
+	trace_android_vh_rwsem_write_finished(sem);
 	__up_write(sem);
 }
 EXPORT_SYMBOL(up_write);
@@ -1620,6 +1643,7 @@ EXPORT_SYMBOL(up_write);
 void downgrade_write(struct rw_semaphore *sem)
 {
 	lock_downgrade(&sem->dep_map, _RET_IP_);
+	trace_android_vh_rwsem_write_finished(sem);
 	__downgrade_write(sem);
 }
 EXPORT_SYMBOL(downgrade_write);
diff --git a/kernel/module.c b/kernel/module.c
index 9e9af40..5a10557 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -420,7 +420,7 @@ static bool each_symbol_in_section(const struct symsearch *arr,
 }
 
 /* Returns true as soon as fn returns true, otherwise false. */
-bool each_symbol_section(bool (*fn)(const struct symsearch *arr,
+static bool each_symbol_section(bool (*fn)(const struct symsearch *arr,
 				    struct module *owner,
 				    void *data),
 			 void *data)
@@ -482,7 +482,6 @@ bool each_symbol_section(bool (*fn)(const struct symsearch *arr,
 	}
 	return false;
 }
-EXPORT_SYMBOL_GPL(each_symbol_section);
 
 struct find_symbol_arg {
 	/* Input */
@@ -494,6 +493,7 @@ struct find_symbol_arg {
 	struct module *owner;
 	const s32 *crc;
 	const struct kernel_symbol *sym;
+	enum mod_license license;
 };
 
 static bool check_exported_symbol(const struct symsearch *syms,
@@ -503,9 +503,9 @@ static bool check_exported_symbol(const struct symsearch *syms,
 	struct find_symbol_arg *fsa = data;
 
 	if (!fsa->gplok) {
-		if (syms->licence == GPL_ONLY)
+		if (syms->license == GPL_ONLY)
 			return false;
-		if (syms->licence == WILL_BE_GPL_ONLY && fsa->warn) {
+		if (syms->license == WILL_BE_GPL_ONLY && fsa->warn) {
 			pr_warn("Symbol %s is being used by a non-GPL module, "
 				"which will not be allowed in the future\n",
 				fsa->name);
@@ -527,6 +527,7 @@ static bool check_exported_symbol(const struct symsearch *syms,
 	fsa->owner = owner;
 	fsa->crc = symversion(syms->crcs, symnum);
 	fsa->sym = &syms->start[symnum];
+	fsa->license = syms->license;
 	return true;
 }
 
@@ -583,9 +584,10 @@ static bool find_exported_symbol_in_section(const struct symsearch *syms,
 
 /* Find an exported symbol and return it, along with, (optional) crc and
  * (optional) module which owns it.  Needs preempt disabled or module_mutex. */
-const struct kernel_symbol *find_symbol(const char *name,
+static const struct kernel_symbol *find_symbol(const char *name,
 					struct module **owner,
 					const s32 **crc,
+					enum mod_license *license,
 					bool gplok,
 					bool warn)
 {
@@ -600,13 +602,14 @@ const struct kernel_symbol *find_symbol(const char *name,
 			*owner = fsa.owner;
 		if (crc)
 			*crc = fsa.crc;
+		if (license)
+			*license = fsa.license;
 		return fsa.sym;
 	}
 
 	pr_debug("Failed to find symbol %s\n", name);
 	return NULL;
 }
-EXPORT_SYMBOL_GPL(find_symbol);
 
 /*
  * Search for module by name: must hold module_mutex (or preempt disabled
@@ -867,7 +870,7 @@ static int add_module_usage(struct module *a, struct module *b)
 }
 
 /* Module a uses b: caller needs module_mutex() */
-int ref_module(struct module *a, struct module *b)
+static int ref_module(struct module *a, struct module *b)
 {
 	int err;
 
@@ -886,7 +889,6 @@ int ref_module(struct module *a, struct module *b)
 	}
 	return 0;
 }
-EXPORT_SYMBOL_GPL(ref_module);
 
 /* Clear the unload stuff of the module. */
 static void module_unload_free(struct module *mod)
@@ -1075,7 +1077,7 @@ void __symbol_put(const char *symbol)
 	struct module *owner;
 
 	preempt_disable();
-	if (!find_symbol(symbol, &owner, NULL, true, false))
+	if (!find_symbol(symbol, &owner, NULL, NULL, true, false))
 		BUG();
 	module_put(owner);
 	preempt_enable();
@@ -1167,11 +1169,10 @@ static inline void module_unload_free(struct module *mod)
 {
 }
 
-int ref_module(struct module *a, struct module *b)
+static int ref_module(struct module *a, struct module *b)
 {
 	return strong_try_module_get(b);
 }
-EXPORT_SYMBOL_GPL(ref_module);
 
 static inline int module_unload_init(struct module *mod)
 {
@@ -1354,7 +1355,7 @@ static inline int check_modstruct_version(const struct load_info *info,
 	 * locking is necessary -- use preempt_disable() to placate lockdep.
 	 */
 	preempt_disable();
-	if (!find_symbol("module_layout", NULL, &crc, true, false)) {
+	if (!find_symbol("module_layout", NULL, &crc, NULL, true, false)) {
 		preempt_enable();
 		BUG();
 	}
@@ -1428,6 +1429,24 @@ static int verify_namespace_is_imported(const struct load_info *info,
 	return 0;
 }
 
+static bool inherit_taint(struct module *mod, struct module *owner)
+{
+	if (!owner || !test_bit(TAINT_PROPRIETARY_MODULE, &owner->taints))
+		return true;
+
+	if (mod->using_gplonly_symbols) {
+		pr_err("%s: module using GPL-only symbols uses symbols from proprietary module %s.\n",
+			mod->name, owner->name);
+		return false;
+	}
+
+	if (!test_bit(TAINT_PROPRIETARY_MODULE, &mod->taints)) {
+		pr_warn("%s: module uses symbols from proprietary module %s, inheriting taint.\n",
+			mod->name, owner->name);
+		set_bit(TAINT_PROPRIETARY_MODULE, &mod->taints);
+	}
+	return true;
+}
 
 /* Resolve a symbol for this module.  I.e. if we find one, record usage. */
 static const struct kernel_symbol *resolve_symbol(struct module *mod,
@@ -1438,6 +1457,7 @@ static const struct kernel_symbol *resolve_symbol(struct module *mod,
 	struct module *owner;
 	const struct kernel_symbol *sym;
 	const s32 *crc;
+	enum mod_license license;
 	int err;
 
 	/*
@@ -1447,11 +1467,19 @@ static const struct kernel_symbol *resolve_symbol(struct module *mod,
 	 */
 	sched_annotate_sleep();
 	mutex_lock(&module_mutex);
-	sym = find_symbol(name, &owner, &crc,
+	sym = find_symbol(name, &owner, &crc, &license,
 			  !(mod->taints & (1 << TAINT_PROPRIETARY_MODULE)), true);
 	if (!sym)
 		goto unlock;
 
+	if (license == GPL_ONLY)
+		mod->using_gplonly_symbols = true;
+
+	if (!inherit_taint(mod, owner)) {
+		sym = NULL;
+		goto getname;
+	}
+
 	if (!check_version(info, name, mod, crc)) {
 		sym = ERR_PTR(-EINVAL);
 		goto getname;
@@ -2204,6 +2232,8 @@ void __weak module_arch_freeing_init(struct module *mod)
 {
 }
 
+static void cfi_cleanup(struct module *mod);
+
 /* Free a module, remove from lists, etc. */
 static void free_module(struct module *mod)
 {
@@ -2243,6 +2273,9 @@ static void free_module(struct module *mod)
 	synchronize_rcu();
 	mutex_unlock(&module_mutex);
 
+	/* Clean up CFI for the module. */
+	cfi_cleanup(mod);
+
 	/* This may be empty, but that's OK */
 	module_arch_freeing_init(mod);
 	module_memfree(mod->init_layout.base);
@@ -2262,7 +2295,7 @@ void *__symbol_get(const char *symbol)
 	const struct kernel_symbol *sym;
 
 	preempt_disable();
-	sym = find_symbol(symbol, &owner, NULL, true, true);
+	sym = find_symbol(symbol, &owner, NULL, NULL, true, true);
 	if (sym && strong_try_module_get(owner))
 		sym = NULL;
 	preempt_enable();
@@ -2298,7 +2331,7 @@ static int verify_exported_symbols(struct module *mod)
 	for (i = 0; i < ARRAY_SIZE(arr); i++) {
 		for (s = arr[i].sym; s < arr[i].sym + arr[i].num; s++) {
 			if (find_symbol(kernel_symbol_name(s), &owner, NULL,
-					true, false)) {
+					NULL, true, false)) {
 				pr_err("%s: exports duplicate symbol %s"
 				       " (owned by %s)\n",
 				       mod->name, kernel_symbol_name(s),
@@ -3493,6 +3526,8 @@ int __weak module_finalize(const Elf_Ehdr *hdr,
 	return 0;
 }
 
+static void cfi_init(struct module *mod);
+
 static int post_relocation(struct module *mod, const struct load_info *info)
 {
 	/* Sort exception table now relocations are done. */
@@ -3505,6 +3540,9 @@ static int post_relocation(struct module *mod, const struct load_info *info)
 	/* Setup kallsyms-specific fields. */
 	add_kallsyms(mod, info);
 
+	/* Setup CFI for the module. */
+	cfi_init(mod);
+
 	/* Arch-specific module finalizing. */
 	return module_finalize(info->hdr, info->sechdrs, mod);
 }
@@ -4304,6 +4342,24 @@ int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *,
 }
 #endif /* CONFIG_KALLSYMS */
 
+static void cfi_init(struct module *mod)
+{
+#ifdef CONFIG_CFI_CLANG
+	rcu_read_lock_sched();
+	mod->cfi_check = (cfi_check_fn)find_kallsyms_symbol_value(mod,
+						CFI_CHECK_FN_NAME);
+	rcu_read_unlock_sched();
+	cfi_module_add(mod, module_addr_min, module_addr_max);
+#endif
+}
+
+static void cfi_cleanup(struct module *mod)
+{
+#ifdef CONFIG_CFI_CLANG
+	cfi_module_remove(mod, module_addr_min, module_addr_max);
+#endif
+}
+
 /* Maximum number of characters written by module_flags() */
 #define MODULE_FLAGS_BUF_SIZE (TAINT_FLAGS_COUNT + 4)
 
@@ -4495,7 +4551,6 @@ struct module *__module_address(unsigned long addr)
 	}
 	return mod;
 }
-EXPORT_SYMBOL_GPL(__module_address);
 
 /*
  * is_module_text_address - is this address inside module code?
@@ -4534,7 +4589,6 @@ struct module *__module_text_address(unsigned long addr)
 	}
 	return mod;
 }
-EXPORT_SYMBOL_GPL(__module_text_address);
 
 /* Don't grab lock, we're oopsing. */
 void print_modules(void)
diff --git a/kernel/pid.c b/kernel/pid.c
index 0a9f2e4..bf2c8b8 100644
--- a/kernel/pid.c
+++ b/kernel/pid.c
@@ -41,6 +41,7 @@
 #include <linux/anon_inodes.h>
 #include <linux/sched/signal.h>
 #include <linux/sched/task.h>
+#include <linux/file.h>
 #include <linux/idr.h>
 
 struct pid init_struct_pid = {
@@ -354,6 +355,7 @@ struct task_struct *find_task_by_vpid(pid_t vnr)
 {
 	return find_task_by_pid_ns(vnr, task_active_pid_ns(current));
 }
+EXPORT_SYMBOL_GPL(find_task_by_vpid);
 
 struct task_struct *find_get_task_by_vpid(pid_t nr)
 {
@@ -454,6 +456,25 @@ struct pid *find_ge_pid(int nr, struct pid_namespace *ns)
 	return idr_get_next(&ns->idr, &nr);
 }
 
+struct pid *pidfd_get_pid(unsigned int fd, unsigned int *flags)
+{
+	struct fd f;
+	struct pid *pid;
+
+	f = fdget(fd);
+	if (!f.file)
+		return ERR_PTR(-EBADF);
+
+	pid = pidfd_pid(f.file);
+	if (!IS_ERR(pid)) {
+		get_pid(pid);
+		*flags = f.file->f_flags;
+	}
+
+	fdput(f);
+	return pid;
+}
+
 /**
  * pidfd_create() - Create a new pid file descriptor.
  *
diff --git a/kernel/power/Makefile b/kernel/power/Makefile
index e7e47d9..c673a1b 100644
--- a/kernel/power/Makefile
+++ b/kernel/power/Makefile
@@ -16,4 +16,5 @@
 
 obj-$(CONFIG_MAGIC_SYSRQ)	+= poweroff.o
 
+obj-$(CONFIG_SUSPEND)		+= wakeup_reason.o
 obj-$(CONFIG_ENERGY_MODEL)	+= energy_model.o
diff --git a/kernel/power/process.c b/kernel/power/process.c
index 4b6a54d..da378ac 100644
--- a/kernel/power/process.c
+++ b/kernel/power/process.c
@@ -85,18 +85,21 @@ static int try_to_freeze_tasks(bool user_only)
 	elapsed = ktime_sub(end, start);
 	elapsed_msecs = ktime_to_ms(elapsed);
 
-	if (todo) {
+	if (wakeup) {
 		pr_cont("\n");
-		pr_err("Freezing of tasks %s after %d.%03d seconds "
-		       "(%d tasks refusing to freeze, wq_busy=%d):\n",
-		       wakeup ? "aborted" : "failed",
+		pr_err("Freezing of tasks aborted after %d.%03d seconds",
+		       elapsed_msecs / 1000, elapsed_msecs % 1000);
+	} else if (todo) {
+		pr_cont("\n");
+		pr_err("Freezing of tasks failed after %d.%03d seconds"
+		       " (%d tasks refusing to freeze, wq_busy=%d):\n",
 		       elapsed_msecs / 1000, elapsed_msecs % 1000,
 		       todo - wq_busy, wq_busy);
 
 		if (wq_busy)
 			show_workqueue_state();
 
-		if (!wakeup || pm_debug_messages_on) {
+		if (pm_debug_messages_on) {
 			read_lock(&tasklist_lock);
 			for_each_process_thread(g, p) {
 				if (p != current && !freezer_should_skip(p)
diff --git a/kernel/power/qos.c b/kernel/power/qos.c
index a45cba7..83edf86 100644
--- a/kernel/power/qos.c
+++ b/kernel/power/qos.c
@@ -714,8 +714,10 @@ s32 freq_qos_read_value(struct freq_constraints *qos,
  * @req: Constraint request to apply.
  * @action: Action to perform (add/update/remove).
  * @value: Value to assign to the QoS request.
+ *
+ * This is only meant to be called from inside pm_qos, not drivers.
  */
-static int freq_qos_apply(struct freq_qos_request *req,
+int freq_qos_apply(struct freq_qos_request *req,
 			  enum pm_qos_req_action action, s32 value)
 {
 	int ret;
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
index 27f149f..44dfe0b 100644
--- a/kernel/power/suspend.c
+++ b/kernel/power/suspend.c
@@ -30,6 +30,7 @@
 #include <trace/events/power.h>
 #include <linux/compiler.h>
 #include <linux/moduleparam.h>
+#include <linux/wakeup_reason.h>
 
 #include "power.h"
 
@@ -139,6 +140,7 @@ static void s2idle_loop(void)
 		}
 
 		pm_wakeup_clear(false);
+		clear_wakeup_reasons();
 
 		s2idle_enter();
 	}
@@ -361,6 +363,7 @@ static int suspend_prepare(suspend_state_t state)
 	if (!error)
 		return 0;
 
+	log_suspend_abort_reason("One or more tasks refusing to freeze");
 	suspend_stats.failed_freeze++;
 	dpm_save_failed_step(SUSPEND_FREEZE);
  Finish:
@@ -390,7 +393,7 @@ void __weak arch_suspend_enable_irqs(void)
  */
 static int suspend_enter(suspend_state_t state, bool *wakeup)
 {
-	int error;
+	int error, last_dev;
 
 	error = platform_suspend_prepare(state);
 	if (error)
@@ -398,7 +401,11 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)
 
 	error = dpm_suspend_late(PMSG_SUSPEND);
 	if (error) {
+		last_dev = suspend_stats.last_failed_dev + REC_FAILED_NUM - 1;
+		last_dev %= REC_FAILED_NUM;
 		pr_err("late suspend of devices failed\n");
+		log_suspend_abort_reason("late suspend of %s device failed",
+					 suspend_stats.failed_devs[last_dev]);
 		goto Platform_finish;
 	}
 	error = platform_suspend_prepare_late(state);
@@ -407,7 +414,11 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)
 
 	error = dpm_suspend_noirq(PMSG_SUSPEND);
 	if (error) {
+		last_dev = suspend_stats.last_failed_dev + REC_FAILED_NUM - 1;
+		last_dev %= REC_FAILED_NUM;
 		pr_err("noirq suspend of devices failed\n");
+		log_suspend_abort_reason("noirq suspend of %s device failed",
+					 suspend_stats.failed_devs[last_dev]);
 		goto Platform_early_resume;
 	}
 	error = platform_suspend_prepare_noirq(state);
@@ -423,8 +434,10 @@ static int suspend_enter(suspend_state_t state, bool *wakeup)
 	}
 
 	error = suspend_disable_secondary_cpus();
-	if (error || suspend_test(TEST_CPUS))
+	if (error || suspend_test(TEST_CPUS)) {
+		log_suspend_abort_reason("Disabling non-boot cpus failed");
 		goto Enable_cpus;
+	}
 
 	arch_suspend_disable_irqs();
 	BUG_ON(!irqs_disabled());
@@ -495,6 +508,8 @@ int suspend_devices_and_enter(suspend_state_t state)
 	error = dpm_suspend_start(PMSG_SUSPEND);
 	if (error) {
 		pr_err("Some devices failed to suspend, or early wake event detected\n");
+		log_suspend_abort_reason(
+				"Some devices failed to suspend, or early wake event detected");
 		goto Recover_platform;
 	}
 	suspend_test_finish("suspend devices");
diff --git a/kernel/power/wakeup_reason.c b/kernel/power/wakeup_reason.c
new file mode 100644
index 0000000..8fefaa3
--- /dev/null
+++ b/kernel/power/wakeup_reason.c
@@ -0,0 +1,438 @@
+/*
+ * kernel/power/wakeup_reason.c
+ *
+ * Logs the reasons which caused the kernel to resume from
+ * the suspend mode.
+ *
+ * Copyright (C) 2020 Google, Inc.
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/wakeup_reason.h>
+#include <linux/kernel.h>
+#include <linux/irq.h>
+#include <linux/interrupt.h>
+#include <linux/io.h>
+#include <linux/kobject.h>
+#include <linux/sysfs.h>
+#include <linux/init.h>
+#include <linux/spinlock.h>
+#include <linux/notifier.h>
+#include <linux/suspend.h>
+#include <linux/slab.h>
+
+/*
+ * struct wakeup_irq_node - stores data and relationships for IRQs logged as
+ * either base or nested wakeup reasons during suspend/resume flow.
+ * @siblings - for membership on leaf or parent IRQ lists
+ * @irq      - the IRQ number
+ * @irq_name - the name associated with the IRQ, or a default if none
+ */
+struct wakeup_irq_node {
+	struct list_head siblings;
+	int irq;
+	const char *irq_name;
+};
+
+enum wakeup_reason_flag {
+	RESUME_NONE = 0,
+	RESUME_IRQ,
+	RESUME_ABORT,
+	RESUME_ABNORMAL,
+};
+
+static DEFINE_SPINLOCK(wakeup_reason_lock);
+
+static LIST_HEAD(leaf_irqs);   /* kept in ascending IRQ sorted order */
+static LIST_HEAD(parent_irqs); /* unordered */
+
+static struct kmem_cache *wakeup_irq_nodes_cache;
+
+static const char *default_irq_name = "(unnamed)";
+
+static struct kobject *kobj;
+
+static bool capture_reasons;
+static int wakeup_reason;
+static char non_irq_wake_reason[MAX_SUSPEND_ABORT_LEN];
+
+static ktime_t last_monotime; /* monotonic time before last suspend */
+static ktime_t curr_monotime; /* monotonic time after last suspend */
+static ktime_t last_stime; /* monotonic boottime offset before last suspend */
+static ktime_t curr_stime; /* monotonic boottime offset after last suspend */
+
+static void init_node(struct wakeup_irq_node *p, int irq)
+{
+	struct irq_desc *desc;
+
+	INIT_LIST_HEAD(&p->siblings);
+
+	p->irq = irq;
+	desc = irq_to_desc(irq);
+	if (desc && desc->action && desc->action->name)
+		p->irq_name = desc->action->name;
+	else
+		p->irq_name = default_irq_name;
+}
+
+static struct wakeup_irq_node *create_node(int irq)
+{
+	struct wakeup_irq_node *result;
+
+	result = kmem_cache_alloc(wakeup_irq_nodes_cache, GFP_ATOMIC);
+	if (unlikely(!result))
+		pr_warn("Failed to log wakeup IRQ %d\n", irq);
+	else
+		init_node(result, irq);
+
+	return result;
+}
+
+static void delete_list(struct list_head *head)
+{
+	struct wakeup_irq_node *n;
+
+	while (!list_empty(head)) {
+		n = list_first_entry(head, struct wakeup_irq_node, siblings);
+		list_del(&n->siblings);
+		kmem_cache_free(wakeup_irq_nodes_cache, n);
+	}
+}
+
+static bool add_sibling_node_sorted(struct list_head *head, int irq)
+{
+	struct wakeup_irq_node *n = NULL;
+	struct list_head *predecessor = head;
+
+	if (unlikely(WARN_ON(!head)))
+		return NULL;
+
+	if (!list_empty(head))
+		list_for_each_entry(n, head, siblings) {
+			if (n->irq < irq)
+				predecessor = &n->siblings;
+			else if (n->irq == irq)
+				return true;
+			else
+				break;
+		}
+
+	n = create_node(irq);
+	if (n) {
+		list_add(&n->siblings, predecessor);
+		return true;
+	}
+
+	return false;
+}
+
+static struct wakeup_irq_node *find_node_in_list(struct list_head *head,
+						 int irq)
+{
+	struct wakeup_irq_node *n;
+
+	if (unlikely(WARN_ON(!head)))
+		return NULL;
+
+	list_for_each_entry(n, head, siblings)
+		if (n->irq == irq)
+			return n;
+
+	return NULL;
+}
+
+void log_irq_wakeup_reason(int irq)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&wakeup_reason_lock, flags);
+	if (wakeup_reason == RESUME_ABNORMAL || wakeup_reason == RESUME_ABORT) {
+		spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+		return;
+	}
+
+	if (!capture_reasons) {
+		spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+		return;
+	}
+
+	if (find_node_in_list(&parent_irqs, irq) == NULL)
+		add_sibling_node_sorted(&leaf_irqs, irq);
+
+	wakeup_reason = RESUME_IRQ;
+	spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+}
+
+void log_threaded_irq_wakeup_reason(int irq, int parent_irq)
+{
+	struct wakeup_irq_node *parent;
+	unsigned long flags;
+
+	/*
+	 * Intentionally unsynchronized.  Calls that come in after we have
+	 * resumed should have a fast exit path since there's no work to be
+	 * done, any any coherence issue that could cause a wrong value here is
+	 * both highly improbable - given the set/clear timing - and very low
+	 * impact (parent IRQ gets logged instead of the specific child).
+	 */
+	if (!capture_reasons)
+		return;
+
+	spin_lock_irqsave(&wakeup_reason_lock, flags);
+
+	if (wakeup_reason == RESUME_ABNORMAL || wakeup_reason == RESUME_ABORT) {
+		spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+		return;
+	}
+
+	if (!capture_reasons || (find_node_in_list(&leaf_irqs, irq) != NULL)) {
+		spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+		return;
+	}
+
+	parent = find_node_in_list(&parent_irqs, parent_irq);
+	if (parent != NULL)
+		add_sibling_node_sorted(&leaf_irqs, irq);
+	else {
+		parent = find_node_in_list(&leaf_irqs, parent_irq);
+		if (parent != NULL) {
+			list_del_init(&parent->siblings);
+			list_add_tail(&parent->siblings, &parent_irqs);
+			add_sibling_node_sorted(&leaf_irqs, irq);
+		}
+	}
+
+	spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+}
+EXPORT_SYMBOL_GPL(log_threaded_irq_wakeup_reason);
+
+static void __log_abort_or_abnormal_wake(bool abort, const char *fmt,
+					 va_list args)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&wakeup_reason_lock, flags);
+
+	/* Suspend abort or abnormal wake reason has already been logged. */
+	if (wakeup_reason != RESUME_NONE) {
+		spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+		return;
+	}
+
+	if (abort)
+		wakeup_reason = RESUME_ABORT;
+	else
+		wakeup_reason = RESUME_ABNORMAL;
+
+	vsnprintf(non_irq_wake_reason, MAX_SUSPEND_ABORT_LEN, fmt, args);
+
+	spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+}
+
+void log_suspend_abort_reason(const char *fmt, ...)
+{
+	va_list args;
+
+	va_start(args, fmt);
+	__log_abort_or_abnormal_wake(true, fmt, args);
+	va_end(args);
+}
+EXPORT_SYMBOL_GPL(log_suspend_abort_reason);
+
+void log_abnormal_wakeup_reason(const char *fmt, ...)
+{
+	va_list args;
+
+	va_start(args, fmt);
+	__log_abort_or_abnormal_wake(false, fmt, args);
+	va_end(args);
+}
+EXPORT_SYMBOL_GPL(log_abnormal_wakeup_reason);
+
+void clear_wakeup_reasons(void)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&wakeup_reason_lock, flags);
+
+	delete_list(&leaf_irqs);
+	delete_list(&parent_irqs);
+	wakeup_reason = RESUME_NONE;
+	capture_reasons = true;
+
+	spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+}
+
+static void print_wakeup_sources(void)
+{
+	struct wakeup_irq_node *n;
+	unsigned long flags;
+
+	spin_lock_irqsave(&wakeup_reason_lock, flags);
+
+	capture_reasons = false;
+
+	if (wakeup_reason == RESUME_ABORT) {
+		pr_info("Abort: %s\n", non_irq_wake_reason);
+		spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+		return;
+	}
+
+	if (wakeup_reason == RESUME_IRQ && !list_empty(&leaf_irqs))
+		list_for_each_entry(n, &leaf_irqs, siblings)
+			pr_info("Resume caused by IRQ %d, %s\n", n->irq,
+				n->irq_name);
+	else if (wakeup_reason == RESUME_ABNORMAL)
+		pr_info("Resume caused by %s\n", non_irq_wake_reason);
+	else
+		pr_info("Resume cause unknown\n");
+
+	spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+}
+
+static ssize_t last_resume_reason_show(struct kobject *kobj,
+				       struct kobj_attribute *attr, char *buf)
+{
+	ssize_t buf_offset = 0;
+	struct wakeup_irq_node *n;
+	unsigned long flags;
+
+	spin_lock_irqsave(&wakeup_reason_lock, flags);
+
+	if (wakeup_reason == RESUME_ABORT) {
+		buf_offset = scnprintf(buf, PAGE_SIZE, "Abort: %s",
+				       non_irq_wake_reason);
+		spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+		return buf_offset;
+	}
+
+	if (wakeup_reason == RESUME_IRQ && !list_empty(&leaf_irqs))
+		list_for_each_entry(n, &leaf_irqs, siblings)
+			buf_offset += scnprintf(buf + buf_offset,
+						PAGE_SIZE - buf_offset,
+						"%d %s\n", n->irq, n->irq_name);
+	else if (wakeup_reason == RESUME_ABNORMAL)
+		buf_offset = scnprintf(buf, PAGE_SIZE, "-1 %s",
+				       non_irq_wake_reason);
+
+	spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+
+	return buf_offset;
+}
+
+static ssize_t last_suspend_time_show(struct kobject *kobj,
+			struct kobj_attribute *attr, char *buf)
+{
+	struct timespec64 sleep_time;
+	struct timespec64 total_time;
+	struct timespec64 suspend_resume_time;
+
+	/*
+	 * total_time is calculated from monotonic bootoffsets because
+	 * unlike CLOCK_MONOTONIC it include the time spent in suspend state.
+	 */
+	total_time = ktime_to_timespec64(ktime_sub(curr_stime, last_stime));
+
+	/*
+	 * suspend_resume_time is calculated as monotonic (CLOCK_MONOTONIC)
+	 * time interval before entering suspend and post suspend.
+	 */
+	suspend_resume_time =
+		ktime_to_timespec64(ktime_sub(curr_monotime, last_monotime));
+
+	/* sleep_time = total_time - suspend_resume_time */
+	sleep_time = timespec64_sub(total_time, suspend_resume_time);
+
+	/* Export suspend_resume_time and sleep_time in pair here. */
+	return sprintf(buf, "%llu.%09lu %llu.%09lu\n",
+		       (unsigned long long)suspend_resume_time.tv_sec,
+		       suspend_resume_time.tv_nsec,
+		       (unsigned long long)sleep_time.tv_sec,
+		       sleep_time.tv_nsec);
+}
+
+static struct kobj_attribute resume_reason = __ATTR_RO(last_resume_reason);
+static struct kobj_attribute suspend_time = __ATTR_RO(last_suspend_time);
+
+static struct attribute *attrs[] = {
+	&resume_reason.attr,
+	&suspend_time.attr,
+	NULL,
+};
+static struct attribute_group attr_group = {
+	.attrs = attrs,
+};
+
+/* Detects a suspend and clears all the previous wake up reasons*/
+static int wakeup_reason_pm_event(struct notifier_block *notifier,
+		unsigned long pm_event, void *unused)
+{
+	switch (pm_event) {
+	case PM_SUSPEND_PREPARE:
+		/* monotonic time since boot */
+		last_monotime = ktime_get();
+		/* monotonic time since boot including the time spent in suspend */
+		last_stime = ktime_get_boottime();
+		clear_wakeup_reasons();
+		break;
+	case PM_POST_SUSPEND:
+		/* monotonic time since boot */
+		curr_monotime = ktime_get();
+		/* monotonic time since boot including the time spent in suspend */
+		curr_stime = ktime_get_boottime();
+		print_wakeup_sources();
+		break;
+	default:
+		break;
+	}
+	return NOTIFY_DONE;
+}
+
+static struct notifier_block wakeup_reason_pm_notifier_block = {
+	.notifier_call = wakeup_reason_pm_event,
+};
+
+static int __init wakeup_reason_init(void)
+{
+	if (register_pm_notifier(&wakeup_reason_pm_notifier_block)) {
+		pr_warn("[%s] failed to register PM notifier\n", __func__);
+		goto fail;
+	}
+
+	kobj = kobject_create_and_add("wakeup_reasons", kernel_kobj);
+	if (!kobj) {
+		pr_warn("[%s] failed to create a sysfs kobject\n", __func__);
+		goto fail_unregister_pm_notifier;
+	}
+
+	if (sysfs_create_group(kobj, &attr_group)) {
+		pr_warn("[%s] failed to create a sysfs group\n", __func__);
+		goto fail_kobject_put;
+	}
+
+	wakeup_irq_nodes_cache =
+		kmem_cache_create("wakeup_irq_node_cache",
+				  sizeof(struct wakeup_irq_node), 0, 0, NULL);
+	if (!wakeup_irq_nodes_cache)
+		goto fail_remove_group;
+
+	return 0;
+
+fail_remove_group:
+	sysfs_remove_group(kobj, &attr_group);
+fail_kobject_put:
+	kobject_put(kobj);
+fail_unregister_pm_notifier:
+	unregister_pm_notifier(&wakeup_reason_pm_notifier_block);
+fail:
+	return 1;
+}
+
+late_initcall(wakeup_reason_init);
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index 1b1d2b0..6fee931 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -603,6 +603,7 @@ void rcu_idle_enter(void)
 	lockdep_assert_irqs_disabled();
 	rcu_eqs_enter(false);
 }
+EXPORT_SYMBOL_GPL(rcu_idle_enter);
 
 #ifdef CONFIG_NO_HZ_FULL
 /**
@@ -768,6 +769,7 @@ void rcu_idle_exit(void)
 	rcu_eqs_exit(false);
 	local_irq_restore(flags);
 }
+EXPORT_SYMBOL_GPL(rcu_idle_exit);
 
 #ifdef CONFIG_NO_HZ_FULL
 /**
diff --git a/kernel/reboot.c b/kernel/reboot.c
index ac19159..64765f5 100644
--- a/kernel/reboot.c
+++ b/kernel/reboot.c
@@ -32,7 +32,9 @@ EXPORT_SYMBOL(cad_pid);
 #define DEFAULT_REBOOT_MODE
 #endif
 enum reboot_mode reboot_mode DEFAULT_REBOOT_MODE;
+EXPORT_SYMBOL_GPL(reboot_mode);
 enum reboot_mode panic_reboot_mode = REBOOT_UNDEFINED;
+EXPORT_SYMBOL_GPL(panic_reboot_mode);
 
 /*
  * This variable is used privately to keep track of whether or not
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 7841e73..fa50132 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -11,6 +11,7 @@
 #include <linux/nospec.h>
 
 #include <linux/kcov.h>
+#include <linux/scs.h>
 
 #include <asm/switch_to.h>
 #include <asm/tlb.h>
@@ -23,6 +24,12 @@
 #define CREATE_TRACE_POINTS
 #include <trace/events/sched.h>
 
+#undef CREATE_TRACE_POINTS
+#include <trace/hooks/dtask.h>
+
+#undef CREATE_TRACE_POINTS
+#include <trace/hooks/sched.h>
+
 /*
  * Export tracepoints that act as a bare tracehook (ie: have no trace event
  * associated with them) to allow external modules to probe them.
@@ -35,6 +42,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(pelt_se_tp);
 EXPORT_TRACEPOINT_SYMBOL_GPL(sched_overutilized_tp);
 
 DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues);
+EXPORT_SYMBOL_GPL(runqueues);
 
 #ifdef CONFIG_SCHED_DEBUG
 /*
@@ -791,6 +799,23 @@ unsigned int sysctl_sched_uclamp_util_min = SCHED_CAPACITY_SCALE;
 /* Max allowed maximum utilization */
 unsigned int sysctl_sched_uclamp_util_max = SCHED_CAPACITY_SCALE;
 
+/*
+ * By default RT tasks run at the maximum performance point/capacity of the
+ * system. Uclamp enforces this by always setting UCLAMP_MIN of RT tasks to
+ * SCHED_CAPACITY_SCALE.
+ *
+ * This knob allows admins to change the default behavior when uclamp is being
+ * used. In battery powered devices, particularly, running at the maximum
+ * capacity and frequency will increase energy consumption and shorten the
+ * battery life.
+ *
+ * This knob only affects RT tasks that their uclamp_se->user_defined == false.
+ *
+ * This knob will not override the system default sched_util_clamp_min defined
+ * above.
+ */
+unsigned int sysctl_sched_uclamp_util_min_rt_default = SCHED_CAPACITY_SCALE;
+
 /* All clamps are required to be less or equal than these values */
 static struct uclamp_se uclamp_default[UCLAMP_CNT];
 
@@ -893,6 +918,64 @@ unsigned int uclamp_rq_max_value(struct rq *rq, enum uclamp_id clamp_id,
 	return uclamp_idle_value(rq, clamp_id, clamp_value);
 }
 
+static void __uclamp_update_util_min_rt_default(struct task_struct *p)
+{
+	unsigned int default_util_min;
+	struct uclamp_se *uc_se;
+
+	lockdep_assert_held(&p->pi_lock);
+
+	uc_se = &p->uclamp_req[UCLAMP_MIN];
+
+	/* Only sync if user didn't override the default */
+	if (uc_se->user_defined)
+		return;
+
+	default_util_min = sysctl_sched_uclamp_util_min_rt_default;
+	uclamp_se_set(uc_se, default_util_min, false);
+}
+
+static void uclamp_update_util_min_rt_default(struct task_struct *p)
+{
+	struct rq_flags rf;
+	struct rq *rq;
+
+	if (!rt_task(p))
+		return;
+
+	/* Protect updates to p->uclamp_* */
+	rq = task_rq_lock(p, &rf);
+	__uclamp_update_util_min_rt_default(p);
+	task_rq_unlock(rq, p, &rf);
+}
+
+static void uclamp_sync_util_min_rt_default(void)
+{
+	struct task_struct *g, *p;
+
+	/*
+	 * copy_process()			sysctl_uclamp
+	 *					  uclamp_min_rt = X;
+	 *   write_lock(&tasklist_lock)		  read_lock(&tasklist_lock)
+	 *   // link thread			  smp_mb__after_spinlock()
+	 *   write_unlock(&tasklist_lock)	  read_unlock(&tasklist_lock);
+	 *   sched_post_fork()			  for_each_process_thread()
+	 *     __uclamp_sync_rt()		    __uclamp_sync_rt()
+	 *
+	 * Ensures that either sched_post_fork() will observe the new
+	 * uclamp_min_rt or for_each_process_thread() will observe the new
+	 * task.
+	 */
+	read_lock(&tasklist_lock);
+	smp_mb__after_spinlock();
+	read_unlock(&tasklist_lock);
+
+	rcu_read_lock();
+	for_each_process_thread(g, p)
+		uclamp_update_util_min_rt_default(p);
+	rcu_read_unlock();
+}
+
 static inline struct uclamp_se
 uclamp_tg_restrict(struct task_struct *p, enum uclamp_id clamp_id)
 {
@@ -938,17 +1021,17 @@ uclamp_eff_get(struct task_struct *p, enum uclamp_id clamp_id)
 	return uc_req;
 }
 
-unsigned int uclamp_eff_value(struct task_struct *p, enum uclamp_id clamp_id)
+unsigned long uclamp_eff_value(struct task_struct *p, enum uclamp_id clamp_id)
 {
 	struct uclamp_se uc_eff;
 
 	/* Task currently refcounted: use back-annotated (effective) value */
 	if (p->uclamp[clamp_id].active)
-		return p->uclamp[clamp_id].value;
+		return (unsigned long)p->uclamp[clamp_id].value;
 
 	uc_eff = uclamp_eff_get(p, clamp_id);
 
-	return uc_eff.value;
+	return (unsigned long)uc_eff.value;
 }
 
 /*
@@ -1181,12 +1264,13 @@ int sysctl_sched_uclamp_handler(struct ctl_table *table, int write,
 				loff_t *ppos)
 {
 	bool update_root_tg = false;
-	int old_min, old_max;
+	int old_min, old_max, old_min_rt;
 	int result;
 
 	mutex_lock(&uclamp_mutex);
 	old_min = sysctl_sched_uclamp_util_min;
 	old_max = sysctl_sched_uclamp_util_max;
+	old_min_rt = sysctl_sched_uclamp_util_min_rt_default;
 
 	result = proc_dointvec(table, write, buffer, lenp, ppos);
 	if (result)
@@ -1195,7 +1279,9 @@ int sysctl_sched_uclamp_handler(struct ctl_table *table, int write,
 		goto done;
 
 	if (sysctl_sched_uclamp_util_min > sysctl_sched_uclamp_util_max ||
-	    sysctl_sched_uclamp_util_max > SCHED_CAPACITY_SCALE) {
+	    sysctl_sched_uclamp_util_max > SCHED_CAPACITY_SCALE	||
+	    sysctl_sched_uclamp_util_min_rt_default > SCHED_CAPACITY_SCALE) {
+
 		result = -EINVAL;
 		goto undo;
 	}
@@ -1216,6 +1302,11 @@ int sysctl_sched_uclamp_handler(struct ctl_table *table, int write,
 		uclamp_update_root_tg();
 	}
 
+	if (old_min_rt != sysctl_sched_uclamp_util_min_rt_default) {
+		static_branch_enable(&sched_uclamp_used);
+		uclamp_sync_util_min_rt_default();
+	}
+
 	/*
 	 * We update all RUNNABLE tasks only when task groups are in use.
 	 * Otherwise, keep it simple and do just a lazy update at each next
@@ -1227,6 +1318,7 @@ int sysctl_sched_uclamp_handler(struct ctl_table *table, int write,
 undo:
 	sysctl_sched_uclamp_util_min = old_min;
 	sysctl_sched_uclamp_util_max = old_max;
+	sysctl_sched_uclamp_util_min_rt_default = old_min_rt;
 done:
 	mutex_unlock(&uclamp_mutex);
 
@@ -1272,17 +1364,20 @@ static void __setscheduler_uclamp(struct task_struct *p,
 	 */
 	for_each_clamp_id(clamp_id) {
 		struct uclamp_se *uc_se = &p->uclamp_req[clamp_id];
-		unsigned int clamp_value = uclamp_none(clamp_id);
 
 		/* Keep using defined clamps across class changes */
 		if (uc_se->user_defined)
 			continue;
 
-		/* By default, RT tasks always get 100% boost */
+		/*
+		 * RT by default have a 100% boost value that could be modified
+		 * at runtime.
+		 */
 		if (unlikely(rt_task(p) && clamp_id == UCLAMP_MIN))
-			clamp_value = uclamp_none(UCLAMP_MAX);
+			__uclamp_update_util_min_rt_default(p);
+		else
+			uclamp_se_set(uc_se, uclamp_none(clamp_id), false);
 
-		uclamp_se_set(uc_se, clamp_value, false);
 	}
 
 	if (likely(!(attr->sched_flags & SCHED_FLAG_UTIL_CLAMP)))
@@ -1303,6 +1398,10 @@ static void uclamp_fork(struct task_struct *p)
 {
 	enum uclamp_id clamp_id;
 
+	/*
+	 * We don't need to hold task_rq_lock() when updating p->uclamp_* here
+	 * as the task is still at its early fork stages.
+	 */
 	for_each_clamp_id(clamp_id)
 		p->uclamp[clamp_id].active = false;
 
@@ -1315,6 +1414,11 @@ static void uclamp_fork(struct task_struct *p)
 	}
 }
 
+static void uclamp_post_fork(struct task_struct *p)
+{
+	uclamp_update_util_min_rt_default(p);
+}
+
 static void __init init_uclamp_rq(struct rq *rq)
 {
 	enum uclamp_id clamp_id;
@@ -1367,6 +1471,7 @@ static inline int uclamp_validate(struct task_struct *p,
 static void __setscheduler_uclamp(struct task_struct *p,
 				  const struct sched_attr *attr) { }
 static inline void uclamp_fork(struct task_struct *p) { }
+static inline void uclamp_post_fork(struct task_struct *p) { }
 static inline void init_uclamp(void) { }
 #endif /* CONFIG_UCLAMP_TASK */
 
@@ -1382,6 +1487,8 @@ static inline void enqueue_task(struct rq *rq, struct task_struct *p, int flags)
 
 	uclamp_rq_inc(rq, p);
 	p->sched_class->enqueue_task(rq, p, flags);
+
+	trace_android_rvh_enqueue_task(rq, p);
 }
 
 static inline void dequeue_task(struct rq *rq, struct task_struct *p, int flags)
@@ -1396,6 +1503,8 @@ static inline void dequeue_task(struct rq *rq, struct task_struct *p, int flags)
 
 	uclamp_rq_dec(rq, p);
 	p->sched_class->dequeue_task(rq, p, flags);
+
+	trace_android_rvh_dequeue_task(rq, p);
 }
 
 void activate_task(struct rq *rq, struct task_struct *p, int flags)
@@ -2116,7 +2225,11 @@ static int select_fallback_rq(int cpu, struct task_struct *p)
 	int nid = cpu_to_node(cpu);
 	const struct cpumask *nodemask = NULL;
 	enum { cpuset, possible, fail } state = cpuset;
-	int dest_cpu;
+	int dest_cpu = -1;
+
+	trace_android_rvh_select_fallback_rq(cpu, p, &dest_cpu);
+	if (dest_cpu >= 0)
+		return dest_cpu;
 
 	/*
 	 * If the node that the CPU is on has been offlined, cpu_to_node()
@@ -2936,6 +3049,7 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p)
 	 * Make sure we do not leak PI boosting priority to the child.
 	 */
 	p->prio = current->normal_prio;
+	trace_android_rvh_prepare_prio_fork(p);
 
 	uclamp_fork(p);
 
@@ -2968,6 +3082,7 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p)
 		p->sched_class = &fair_sched_class;
 
 	init_entity_runnable_average(&p->se);
+	trace_android_rvh_finish_prio_fork(p);
 
 	/*
 	 * The child is not yet in the pid-hash so no cgroup attach races,
@@ -3002,6 +3117,11 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p)
 	return 0;
 }
 
+void sched_post_fork(struct task_struct *p)
+{
+	uclamp_post_fork(p);
+}
+
 unsigned long to_ratio(u64 period, u64 runtime)
 {
 	if (runtime == RUNTIME_INF)
@@ -3696,6 +3816,8 @@ void scheduler_tick(void)
 	rq->idle_balance = idle_cpu(cpu);
 	trigger_load_balance(rq);
 #endif
+
+	trace_android_vh_scheduler_tick(rq);
 }
 
 #ifdef CONFIG_NO_HZ_FULL
@@ -4466,6 +4588,7 @@ void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task)
 	struct rq_flags rf;
 	struct rq *rq;
 
+	trace_android_rvh_rtmutex_prepare_setprio(p, pi_task);
 	/* XXX used to be waiter->prio, not waiter->task->prio */
 	prio = __rt_effective_prio(pi_task, p->normal_prio);
 
@@ -4597,6 +4720,7 @@ void set_user_nice(struct task_struct *p, long nice)
 	 */
 	rq = task_rq_lock(p, &rf);
 	update_rq_clock(rq);
+	trace_android_rvh_set_user_nice(p, &nice);
 
 	/*
 	 * The RT priorities are set via sched_setscheduler(), but we still
@@ -4820,6 +4944,8 @@ static void __setscheduler(struct rq *rq, struct task_struct *p,
 		p->sched_class = &rt_sched_class;
 	else
 		p->sched_class = &fair_sched_class;
+
+	trace_android_rvh_setscheduler(p);
 }
 
 /*
@@ -4948,9 +5074,6 @@ static int __sched_setscheduler(struct task_struct *p,
 			return retval;
 	}
 
-	if (pi)
-		cpuset_read_lock();
-
 	/*
 	 * Make sure no PI-waiters arrive (or leave) while we are
 	 * changing the priority of the task:
@@ -5025,8 +5148,6 @@ static int __sched_setscheduler(struct task_struct *p,
 	if (unlikely(oldpolicy != -1 && oldpolicy != p->policy)) {
 		policy = oldpolicy = -1;
 		task_rq_unlock(rq, p, &rf);
-		if (pi)
-			cpuset_read_unlock();
 		goto recheck;
 	}
 
@@ -5087,10 +5208,8 @@ static int __sched_setscheduler(struct task_struct *p,
 	preempt_disable();
 	task_rq_unlock(rq, p, &rf);
 
-	if (pi) {
-		cpuset_read_unlock();
+	if (pi)
 		rt_mutex_adjust_pi(p);
-	}
 
 	/* Run balance callbacks after we've adjusted the PI chain: */
 	balance_callback(rq);
@@ -5100,8 +5219,6 @@ static int __sched_setscheduler(struct task_struct *p,
 
 unlock:
 	task_rq_unlock(rq, p, &rf);
-	if (pi)
-		cpuset_read_unlock();
 	return retval;
 }
 
@@ -5150,6 +5267,7 @@ int sched_setattr_nocheck(struct task_struct *p, const struct sched_attr *attr)
 {
 	return __sched_setscheduler(p, attr, false, true);
 }
+EXPORT_SYMBOL_GPL(sched_setattr_nocheck);
 
 /**
  * sched_setscheduler_nocheck - change the scheduling policy and/or RT priority of a thread from kernelspace.
@@ -5186,14 +5304,9 @@ do_sched_setscheduler(pid_t pid, int policy, struct sched_param __user *param)
 	rcu_read_lock();
 	retval = -ESRCH;
 	p = find_process_by_pid(pid);
-	if (likely(p))
-		get_task_struct(p);
-	rcu_read_unlock();
-
-	if (likely(p)) {
+	if (p != NULL)
 		retval = sched_setscheduler(p, policy, &lparam);
-		put_task_struct(p);
-	}
+	rcu_read_unlock();
 
 	return retval;
 }
@@ -5460,6 +5573,11 @@ SYSCALL_DEFINE4(sched_getattr, pid_t, pid, struct sched_attr __user *, uattr,
 		kattr.sched_nice = task_nice(p);
 
 #ifdef CONFIG_UCLAMP_TASK
+	/*
+	 * This could race with another potential updater, but this is fine
+	 * because it'll correctly read the old or the new value. We don't need
+	 * to guarantee who wins the race as long as it doesn't return garbage.
+	 */
 	kattr.sched_util_min = p->uclamp_req[UCLAMP_MIN].value;
 	kattr.sched_util_max = p->uclamp_req[UCLAMP_MAX].value;
 #endif
@@ -6028,6 +6146,7 @@ void sched_show_task(struct task_struct *p)
 		(unsigned long)task_thread_info(p)->flags);
 
 	print_worker_info(KERN_INFO, p);
+	trace_android_vh_sched_show_task(p);
 	show_stack(p, NULL);
 	put_task_stack(p);
 }
@@ -6115,6 +6234,7 @@ void init_idle(struct task_struct *idle, int cpu)
 	idle->se.exec_start = sched_clock();
 	idle->flags |= PF_IDLE;
 
+	scs_task_reset(idle);
 	kasan_unpoison_task_stack(idle);
 
 #ifdef CONFIG_SMP
@@ -7440,6 +7560,27 @@ static int cpu_uclamp_max_show(struct seq_file *sf, void *v)
 	cpu_uclamp_print(sf, UCLAMP_MAX);
 	return 0;
 }
+
+static int cpu_uclamp_ls_write_u64(struct cgroup_subsys_state *css,
+				   struct cftype *cftype, u64 ls)
+{
+	struct task_group *tg;
+
+	if (ls > 1)
+		return -EINVAL;
+	tg = css_tg(css);
+	tg->latency_sensitive = (unsigned int) ls;
+
+	return 0;
+}
+
+static u64 cpu_uclamp_ls_read_u64(struct cgroup_subsys_state *css,
+				  struct cftype *cft)
+{
+	struct task_group *tg = css_tg(css);
+
+	return (u64) tg->latency_sensitive;
+}
 #endif /* CONFIG_UCLAMP_TASK_GROUP */
 
 #ifdef CONFIG_FAIR_GROUP_SCHED
@@ -7808,6 +7949,12 @@ static struct cftype cpu_legacy_files[] = {
 		.seq_show = cpu_uclamp_max_show,
 		.write = cpu_uclamp_max_write,
 	},
+	{
+		.name = "uclamp.latency_sensitive",
+		.flags = CFTYPE_NOT_ON_ROOT,
+		.read_u64 = cpu_uclamp_ls_read_u64,
+		.write_u64 = cpu_uclamp_ls_write_u64,
+	},
 #endif
 	{ }	/* Terminate */
 };
@@ -7989,6 +8136,12 @@ static struct cftype cpu_files[] = {
 		.seq_show = cpu_uclamp_max_show,
 		.write = cpu_uclamp_max_write,
 	},
+	{
+		.name = "uclamp.latency_sensitive",
+		.flags = CFTYPE_NOT_ON_ROOT,
+		.read_u64 = cpu_uclamp_ls_read_u64,
+		.write_u64 = cpu_uclamp_ls_write_u64,
+	},
 #endif
 	{ }	/* terminate */
 };
diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
index 4cb80e6..be1a9a3 100644
--- a/kernel/sched/cpufreq_schedutil.c
+++ b/kernel/sched/cpufreq_schedutil.c
@@ -12,6 +12,7 @@
 
 #include <linux/sched/cpufreq.h>
 #include <trace/events/power.h>
+#include <trace/hooks/sched.h>
 
 #define IOWAIT_BOOST_MIN	(SCHED_CAPACITY_SCALE / 8)
 
@@ -172,8 +173,13 @@ static unsigned int get_next_freq(struct sugov_policy *sg_policy,
 	struct cpufreq_policy *policy = sg_policy->policy;
 	unsigned int freq = arch_scale_freq_invariant() ?
 				policy->cpuinfo.max_freq : policy->cur;
+	unsigned long next_freq = 0;
 
-	freq = map_util_freq(util, freq, max);
+	trace_android_vh_map_util_freq(util, freq, max, &next_freq);
+	if (next_freq)
+		freq = next_freq;
+	else
+		freq = map_util_freq(util, freq, max);
 
 	if (freq == sg_policy->cached_raw_freq && !sg_policy->need_freq_update)
 		return sg_policy->next_freq;
@@ -238,7 +244,7 @@ unsigned long schedutil_cpu_util(int cpu, unsigned long util_cfs,
 	 */
 	util = util_cfs + cpu_util_rt(rq);
 	if (type == FREQUENCY_UTIL)
-		util = uclamp_util_with(rq, util, p);
+		util = uclamp_rq_util_with(rq, util, p);
 
 	dl_util = cpu_util_dl(rq);
 
@@ -913,7 +919,7 @@ static int __init sugov_register(void)
 {
 	return cpufreq_register_governor(&schedutil_gov);
 }
-fs_initcall(sugov_register);
+core_initcall(sugov_register);
 
 #ifdef CONFIG_ENERGY_MODEL
 extern bool sched_energy_update;
diff --git a/kernel/sched/cpupri.c b/kernel/sched/cpupri.c
index b7abca9..0033731 100644
--- a/kernel/sched/cpupri.c
+++ b/kernel/sched/cpupri.c
@@ -41,11 +41,72 @@ static int convert_prio(int prio)
 	return cpupri;
 }
 
+static inline int __cpupri_find(struct cpupri *cp, struct task_struct *p,
+				struct cpumask *lowest_mask, int idx)
+{
+	struct cpupri_vec *vec  = &cp->pri_to_cpu[idx];
+	int skip = 0;
+
+	if (!atomic_read(&(vec)->count))
+		skip = 1;
+	/*
+	 * When looking at the vector, we need to read the counter,
+	 * do a memory barrier, then read the mask.
+	 *
+	 * Note: This is still all racey, but we can deal with it.
+	 *  Ideally, we only want to look at masks that are set.
+	 *
+	 *  If a mask is not set, then the only thing wrong is that we
+	 *  did a little more work than necessary.
+	 *
+	 *  If we read a zero count but the mask is set, because of the
+	 *  memory barriers, that can only happen when the highest prio
+	 *  task for a run queue has left the run queue, in which case,
+	 *  it will be followed by a pull. If the task we are processing
+	 *  fails to find a proper place to go, that pull request will
+	 *  pull this task if the run queue is running at a lower
+	 *  priority.
+	 */
+	smp_rmb();
+
+	/* Need to do the rmb for every iteration */
+	if (skip)
+		return 0;
+
+	if (cpumask_any_and(p->cpus_ptr, vec->mask) >= nr_cpu_ids)
+		return 0;
+
+	if (lowest_mask) {
+		cpumask_and(lowest_mask, p->cpus_ptr, vec->mask);
+
+		/*
+		 * We have to ensure that we have at least one bit
+		 * still set in the array, since the map could have
+		 * been concurrently emptied between the first and
+		 * second reads of vec->mask.  If we hit this
+		 * condition, simply act as though we never hit this
+		 * priority level and continue on.
+		 */
+		if (cpumask_empty(lowest_mask))
+			return 0;
+	}
+
+	return 1;
+}
+
+int cpupri_find(struct cpupri *cp, struct task_struct *p,
+		struct cpumask *lowest_mask)
+{
+	return cpupri_find_fitness(cp, p, lowest_mask, NULL);
+}
+
 /**
- * cpupri_find - find the best (lowest-pri) CPU in the system
+ * cpupri_find_fitness - find the best (lowest-pri) CPU in the system
  * @cp: The cpupri context
  * @p: The task
  * @lowest_mask: A mask to fill in with selected CPUs (or NULL)
+ * @fitness_fn: A pointer to a function to do custom checks whether the CPU
+ *              fits a specific criteria so that we only return those CPUs.
  *
  * Note: This function returns the recommended CPUs as calculated during the
  * current invocation.  By the time the call returns, the CPUs may have in
@@ -56,65 +117,59 @@ static int convert_prio(int prio)
  *
  * Return: (int)bool - CPUs were found
  */
-int cpupri_find(struct cpupri *cp, struct task_struct *p,
-		struct cpumask *lowest_mask)
+int cpupri_find_fitness(struct cpupri *cp, struct task_struct *p,
+		struct cpumask *lowest_mask,
+		bool (*fitness_fn)(struct task_struct *p, int cpu))
 {
-	int idx = 0;
 	int task_pri = convert_prio(p->prio);
+	int idx, cpu;
 
 	BUG_ON(task_pri >= CPUPRI_NR_PRIORITIES);
 
 	for (idx = 0; idx < task_pri; idx++) {
-		struct cpupri_vec *vec  = &cp->pri_to_cpu[idx];
-		int skip = 0;
 
-		if (!atomic_read(&(vec)->count))
-			skip = 1;
-		/*
-		 * When looking at the vector, we need to read the counter,
-		 * do a memory barrier, then read the mask.
-		 *
-		 * Note: This is still all racey, but we can deal with it.
-		 *  Ideally, we only want to look at masks that are set.
-		 *
-		 *  If a mask is not set, then the only thing wrong is that we
-		 *  did a little more work than necessary.
-		 *
-		 *  If we read a zero count but the mask is set, because of the
-		 *  memory barriers, that can only happen when the highest prio
-		 *  task for a run queue has left the run queue, in which case,
-		 *  it will be followed by a pull. If the task we are processing
-		 *  fails to find a proper place to go, that pull request will
-		 *  pull this task if the run queue is running at a lower
-		 *  priority.
-		 */
-		smp_rmb();
-
-		/* Need to do the rmb for every iteration */
-		if (skip)
+		if (!__cpupri_find(cp, p, lowest_mask, idx))
 			continue;
 
-		if (cpumask_any_and(p->cpus_ptr, vec->mask) >= nr_cpu_ids)
-			continue;
+		if (!lowest_mask || !fitness_fn)
+			return 1;
 
-		if (lowest_mask) {
-			cpumask_and(lowest_mask, p->cpus_ptr, vec->mask);
-
-			/*
-			 * We have to ensure that we have at least one bit
-			 * still set in the array, since the map could have
-			 * been concurrently emptied between the first and
-			 * second reads of vec->mask.  If we hit this
-			 * condition, simply act as though we never hit this
-			 * priority level and continue on.
-			 */
-			if (cpumask_any(lowest_mask) >= nr_cpu_ids)
-				continue;
+		/* Ensure the capacity of the CPUs fit the task */
+		for_each_cpu(cpu, lowest_mask) {
+			if (!fitness_fn(p, cpu))
+				cpumask_clear_cpu(cpu, lowest_mask);
 		}
 
+		/*
+		 * If no CPU at the current priority can fit the task
+		 * continue looking
+		 */
+		if (cpumask_empty(lowest_mask))
+			continue;
+
 		return 1;
 	}
 
+	/*
+	 * If we failed to find a fitting lowest_mask, kick off a new search
+	 * but without taking into account any fitness criteria this time.
+	 *
+	 * This rule favours honouring priority over fitting the task in the
+	 * correct CPU (Capacity Awareness being the only user now).
+	 * The idea is that if a higher priority task can run, then it should
+	 * run even if this ends up being on unfitting CPU.
+	 *
+	 * The cost of this trade-off is not entirely clear and will probably
+	 * be good for some workloads and bad for others.
+	 *
+	 * The main idea here is that if some CPUs were overcommitted, we try
+	 * to spread which is what the scheduler traditionally did. Sys admins
+	 * must do proper RT planning to avoid overloading the system if they
+	 * really care.
+	 */
+	if (fitness_fn)
+		return cpupri_find(cp, p, lowest_mask);
+
 	return 0;
 }
 
diff --git a/kernel/sched/cpupri.h b/kernel/sched/cpupri.h
index 7dc20a3..efbb492 100644
--- a/kernel/sched/cpupri.h
+++ b/kernel/sched/cpupri.h
@@ -18,7 +18,11 @@ struct cpupri {
 };
 
 #ifdef CONFIG_SMP
-int  cpupri_find(struct cpupri *cp, struct task_struct *p, struct cpumask *lowest_mask);
+int  cpupri_find(struct cpupri *cp, struct task_struct *p,
+		 struct cpumask *lowest_mask);
+int  cpupri_find_fitness(struct cpupri *cp, struct task_struct *p,
+			 struct cpumask *lowest_mask,
+			 bool (*fitness_fn)(struct task_struct *p, int cpu));
 void cpupri_set(struct cpupri *cp, int cpu, int pri);
 int  cpupri_init(struct cpupri *cp);
 void cpupri_cleanup(struct cpupri *cp);
diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c
index 46ed4e1..a147909 100644
--- a/kernel/sched/cputime.c
+++ b/kernel/sched/cputime.c
@@ -2,6 +2,7 @@
 /*
  * Simple CPU accounting cgroup controller
  */
+#include <linux/cpufreq_times.h>
 #include "sched.h"
 
 #ifdef CONFIG_IRQ_TIME_ACCOUNTING
@@ -129,6 +130,9 @@ void account_user_time(struct task_struct *p, u64 cputime)
 
 	/* Account for user time used */
 	acct_account_cputime(p);
+
+	/* Account power usage for user time */
+	cpufreq_acct_update_power(p, cputime);
 }
 
 /*
@@ -173,6 +177,9 @@ void account_system_index_time(struct task_struct *p,
 
 	/* Account for system time used */
 	acct_account_cputime(p);
+
+	/* Account power usage for system time */
+	cpufreq_acct_update_power(p, cputime);
 }
 
 /*
@@ -464,6 +471,7 @@ void thread_group_cputime_adjusted(struct task_struct *p, u64 *ut, u64 *st)
 	*ut = cputime.utime;
 	*st = cputime.stime;
 }
+EXPORT_SYMBOL_GPL(thread_group_cputime_adjusted);
 
 #else /* !CONFIG_VIRT_CPU_ACCOUNTING_NATIVE: */
 
@@ -678,6 +686,8 @@ void thread_group_cputime_adjusted(struct task_struct *p, u64 *ut, u64 *st)
 	thread_group_cputime(p, &cputime);
 	cputime_adjust(&cputime, &p->signal->prev_cputime, ut, st);
 }
+EXPORT_SYMBOL_GPL(thread_group_cputime_adjusted);
+
 #endif /* !CONFIG_VIRT_CPU_ACCOUNTING_NATIVE */
 
 #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 3dd7c10..c319f4f 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -23,6 +23,7 @@
 #include "sched.h"
 
 #include <trace/events/sched.h>
+#include <trace/hooks/sched.h>
 
 /*
  * Targeted preemption latency for CPU-bound tasks:
@@ -972,6 +973,7 @@ update_stats_enqueue_sleeper(struct cfs_rq *cfs_rq, struct sched_entity *se)
 			}
 
 			trace_sched_stat_blocked(tsk, delta);
+			trace_sched_blocked_reason(tsk);
 
 			/*
 			 * Blocking time is in units of nanosecs, so shift by
@@ -3707,6 +3709,20 @@ static inline unsigned long task_util_est(struct task_struct *p)
 	return max(task_util(p), _task_util_est(p));
 }
 
+#ifdef CONFIG_UCLAMP_TASK
+static inline unsigned long uclamp_task_util(struct task_struct *p)
+{
+	return clamp(task_util_est(p),
+		     uclamp_eff_value(p, UCLAMP_MIN),
+		     uclamp_eff_value(p, UCLAMP_MAX));
+}
+#else
+static inline unsigned long uclamp_task_util(struct task_struct *p)
+{
+	return task_util_est(p);
+}
+#endif
+
 static inline void util_est_enqueue(struct cfs_rq *cfs_rq,
 				    struct task_struct *p)
 {
@@ -3765,10 +3781,21 @@ util_est_dequeue(struct cfs_rq *cfs_rq, struct task_struct *p, bool task_sleep)
 		return;
 
 	/*
+	 * Reset EWMA on utilization increases, the moving average is used only
+	 * to smooth utilization decreases.
+	 */
+	ue.enqueued = (task_util(p) | UTIL_AVG_UNCHANGED);
+	if (sched_feat(UTIL_EST_FASTUP)) {
+		if (ue.ewma < ue.enqueued) {
+			ue.ewma = ue.enqueued;
+			goto done;
+		}
+	}
+
+	/*
 	 * Skip update of task's estimated utilization when its EWMA is
 	 * already ~1% close to its last activation value.
 	 */
-	ue.enqueued = (task_util(p) | UTIL_AVG_UNCHANGED);
 	last_ewma_diff = ue.enqueued - ue.ewma;
 	if (within_margin(last_ewma_diff, (SCHED_CAPACITY_SCALE / 100)))
 		return;
@@ -3801,12 +3828,13 @@ util_est_dequeue(struct cfs_rq *cfs_rq, struct task_struct *p, bool task_sleep)
 	ue.ewma <<= UTIL_EST_WEIGHT_SHIFT;
 	ue.ewma  += last_ewma_diff;
 	ue.ewma >>= UTIL_EST_WEIGHT_SHIFT;
+done:
 	WRITE_ONCE(p->se.avg.util_est, ue);
 }
 
 static inline int task_fits_capacity(struct task_struct *p, long capacity)
 {
-	return fits_capacity(task_util_est(p), capacity);
+	return fits_capacity(uclamp_task_util(p), capacity);
 }
 
 static inline void update_misfit_status(struct task_struct *p, struct rq *rq)
@@ -6050,6 +6078,40 @@ static int select_idle_cpu(struct task_struct *p, struct sched_domain *sd, int t
 }
 
 /*
+ * Scan the asym_capacity domain for idle CPUs; pick the first idle one on which
+ * the task fits. If no CPU is big enough, but there are idle ones, try to
+ * maximize capacity.
+ */
+static int
+select_idle_capacity(struct task_struct *p, struct sched_domain *sd, int target)
+{
+	unsigned long best_cap = 0;
+	int cpu, best_cpu = -1;
+	struct cpumask *cpus;
+
+	sync_entity_load_avg(&p->se);
+
+	cpus = this_cpu_cpumask_var_ptr(select_idle_mask);
+	cpumask_and(cpus, sched_domain_span(sd), p->cpus_ptr);
+
+	for_each_cpu_wrap(cpu, cpus, target) {
+		unsigned long cpu_cap = capacity_of(cpu);
+
+		if (!available_idle_cpu(cpu) && !sched_idle_cpu(cpu))
+			continue;
+		if (task_fits_capacity(p, cpu_cap))
+			return cpu;
+
+		if (cpu_cap > best_cap) {
+			best_cap = cpu_cap;
+			best_cpu = cpu;
+		}
+	}
+
+	return best_cpu;
+}
+
+/*
  * Try and locate an idle core/thread in the LLC cache domain.
  */
 static int select_idle_sibling(struct task_struct *p, int prev, int target)
@@ -6057,6 +6119,28 @@ static int select_idle_sibling(struct task_struct *p, int prev, int target)
 	struct sched_domain *sd;
 	int i, recent_used_cpu;
 
+	/*
+	 * For asymmetric CPU capacity systems, our domain of interest is
+	 * sd_asym_cpucapacity rather than sd_llc.
+	 */
+	if (static_branch_unlikely(&sched_asym_cpucapacity)) {
+		sd = rcu_dereference(per_cpu(sd_asym_cpucapacity, target));
+		/*
+		 * On an asymmetric CPU capacity system where an exclusive
+		 * cpuset defines a symmetric island (i.e. one unique
+		 * capacity_orig value through the cpuset), the key will be set
+		 * but the CPUs within that cpuset will not have a domain with
+		 * SD_ASYM_CPUCAPACITY. These should follow the usual symmetric
+		 * capacity path.
+		 */
+		if (!sd)
+			goto symmetric;
+
+		i = select_idle_capacity(p, sd, target);
+		return ((unsigned)i < nr_cpumask_bits) ? i : target;
+	}
+
+symmetric:
 	if (available_idle_cpu(target) || sched_idle_cpu(target))
 		return target;
 
@@ -6243,33 +6327,6 @@ static unsigned long cpu_util_without(int cpu, struct task_struct *p)
 }
 
 /*
- * Disable WAKE_AFFINE in the case where task @p doesn't fit in the
- * capacity of either the waking CPU @cpu or the previous CPU @prev_cpu.
- *
- * In that case WAKE_AFFINE doesn't make sense and we'll let
- * BALANCE_WAKE sort things out.
- */
-static int wake_cap(struct task_struct *p, int cpu, int prev_cpu)
-{
-	long min_cap, max_cap;
-
-	if (!static_branch_unlikely(&sched_asym_cpucapacity))
-		return 0;
-
-	min_cap = min(capacity_orig_of(prev_cpu), capacity_orig_of(cpu));
-	max_cap = cpu_rq(cpu)->rd->max_cpu_capacity;
-
-	/* Minimum capacity is close to max, no need to abort wake_affine */
-	if (max_cap - min_cap < max_cap >> 3)
-		return 0;
-
-	/* Bring task utilization in sync with prev_cpu */
-	sync_entity_load_avg(&p->se);
-
-	return !task_fits_capacity(p, min_cap);
-}
-
-/*
  * Predicts what cpu_util(@cpu) would return if @p was migrated (and enqueued)
  * to @dst_cpu.
  */
@@ -6320,6 +6377,7 @@ compute_energy(struct task_struct *p, int dst_cpu, struct perf_domain *pd)
 	struct cpumask *pd_mask = perf_domain_span(pd);
 	unsigned long cpu_cap = arch_scale_cpu_capacity(cpumask_first(pd_mask));
 	unsigned long max_util = 0, sum_util = 0;
+	unsigned long energy = 0;
 	int cpu;
 
 	/*
@@ -6356,7 +6414,11 @@ compute_energy(struct task_struct *p, int dst_cpu, struct perf_domain *pd)
 		max_util = max(max_util, cpu_util);
 	}
 
-	return em_pd_energy(pd->em_pd, max_util, sum_util);
+	trace_android_vh_em_pd_energy(pd->em_pd, max_util, sum_util, &energy);
+	if (!energy)
+		energy = em_pd_energy(pd->em_pd, max_util, sum_util);
+
+	return energy;
 }
 
 /*
@@ -6398,12 +6460,17 @@ compute_energy(struct task_struct *p, int dst_cpu, struct perf_domain *pd)
  * other use-cases too. So, until someone finds a better way to solve this,
  * let's keep things simple by re-using the existing slow path.
  */
-static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu)
+static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu, int sync)
 {
 	unsigned long prev_delta = ULONG_MAX, best_delta = ULONG_MAX;
 	struct root_domain *rd = cpu_rq(smp_processor_id())->rd;
+	int max_spare_cap_cpu_ls = prev_cpu, best_idle_cpu = -1;
+	unsigned long max_spare_cap_ls = 0, target_cap;
 	unsigned long cpu_cap, util, base_energy = 0;
+	bool boosted, latency_sensitive = false;
+	unsigned int min_exit_lat = UINT_MAX;
 	int cpu, best_energy_cpu = prev_cpu;
+	struct cpuidle_state *idle;
 	struct sched_domain *sd;
 	struct perf_domain *pd;
 
@@ -6412,6 +6479,13 @@ static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu)
 	if (!pd || READ_ONCE(rd->overutilized))
 		goto fail;
 
+	cpu = smp_processor_id();
+	if (sync && cpu_rq(cpu)->nr_running == 1 &&
+	    cpumask_test_cpu(cpu, p->cpus_ptr)) {
+		rcu_read_unlock();
+		return cpu;
+	}
+
 	/*
 	 * Energy-aware wake-up happens on the lowest sched_domain starting
 	 * from sd_asym_cpucapacity spanning over this_cpu and prev_cpu.
@@ -6426,6 +6500,10 @@ static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu)
 	if (!task_util_est(p))
 		goto unlock;
 
+	latency_sensitive = uclamp_latency_sensitive(p);
+	boosted = uclamp_boosted(p);
+	target_cap = boosted ? 0 : ULONG_MAX;
+
 	for (; pd; pd = pd->next) {
 		unsigned long cur_delta, spare_cap, max_spare_cap = 0;
 		unsigned long base_energy_pd;
@@ -6439,14 +6517,24 @@ static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu)
 			if (!cpumask_test_cpu(cpu, p->cpus_ptr))
 				continue;
 
-			/* Skip CPUs that will be overutilized. */
 			util = cpu_util_next(cpu, p, cpu);
 			cpu_cap = capacity_of(cpu);
+			spare_cap = cpu_cap;
+			lsub_positive(&spare_cap, util);
+
+			/*
+			 * Skip CPUs that cannot satisfy the capacity request.
+			 * IOW, placing the task there would make the CPU
+			 * overutilized. Take uclamp into account to see how
+			 * much capacity we can get out of the CPU; this is
+			 * aligned with schedutil_cpu_util().
+			 */
+			util = uclamp_rq_util_with(cpu_rq(cpu), util, p);
 			if (!fits_capacity(util, cpu_cap))
 				continue;
 
 			/* Always use prev_cpu as a candidate. */
-			if (cpu == prev_cpu) {
+			if (!latency_sensitive && cpu == prev_cpu) {
 				prev_delta = compute_energy(p, prev_cpu, pd);
 				prev_delta -= base_energy_pd;
 				best_delta = min(best_delta, prev_delta);
@@ -6456,15 +6544,38 @@ static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu)
 			 * Find the CPU with the maximum spare capacity in
 			 * the performance domain
 			 */
-			spare_cap = cpu_cap - util;
 			if (spare_cap > max_spare_cap) {
 				max_spare_cap = spare_cap;
 				max_spare_cap_cpu = cpu;
 			}
+
+			if (!latency_sensitive)
+				continue;
+
+			if (idle_cpu(cpu)) {
+				cpu_cap = capacity_orig_of(cpu);
+				if (boosted && cpu_cap < target_cap)
+					continue;
+				if (!boosted && cpu_cap > target_cap)
+					continue;
+				idle = idle_get_state(cpu_rq(cpu));
+				if (idle && idle->exit_latency > min_exit_lat &&
+						cpu_cap == target_cap)
+					continue;
+
+				if (idle)
+					min_exit_lat = idle->exit_latency;
+				target_cap = cpu_cap;
+				best_idle_cpu = cpu;
+			} else if (spare_cap > max_spare_cap_ls) {
+				max_spare_cap_ls = spare_cap;
+				max_spare_cap_cpu_ls = cpu;
+			}
 		}
 
 		/* Evaluate the energy impact of using this CPU. */
-		if (max_spare_cap_cpu >= 0 && max_spare_cap_cpu != prev_cpu) {
+		if (!latency_sensitive && max_spare_cap_cpu >= 0 &&
+						max_spare_cap_cpu != prev_cpu) {
 			cur_delta = compute_energy(p, max_spare_cap_cpu, pd);
 			cur_delta -= base_energy_pd;
 			if (cur_delta < best_delta) {
@@ -6476,6 +6587,9 @@ static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu)
 unlock:
 	rcu_read_unlock();
 
+	if (latency_sensitive)
+		return best_idle_cpu >= 0 ? best_idle_cpu : max_spare_cap_cpu_ls;
+
 	/*
 	 * Pick the best CPU if prev_cpu cannot be used, or if it saves at
 	 * least 6% of the energy used by prev_cpu.
@@ -6514,19 +6628,24 @@ select_task_rq_fair(struct task_struct *p, int prev_cpu, int sd_flag, int wake_f
 	int new_cpu = prev_cpu;
 	int want_affine = 0;
 	int sync = (wake_flags & WF_SYNC) && !(current->flags & PF_EXITING);
+	int target_cpu = -1;
+
+	trace_android_rvh_select_task_rq_fair(p, prev_cpu, sd_flag,
+			wake_flags, &target_cpu);
+	if (target_cpu >= 0)
+		return target_cpu;
 
 	if (sd_flag & SD_BALANCE_WAKE) {
 		record_wakee(p);
 
 		if (sched_energy_enabled()) {
-			new_cpu = find_energy_efficient_cpu(p, prev_cpu);
+			new_cpu = find_energy_efficient_cpu(p, prev_cpu, sync);
 			if (new_cpu >= 0)
 				return new_cpu;
 			new_cpu = prev_cpu;
 		}
 
-		want_affine = !wake_wide(p) && !wake_cap(p, cpu, prev_cpu) &&
-			      cpumask_test_cpu(cpu, p->cpus_ptr);
+		want_affine = !wake_wide(p) && cpumask_test_cpu(cpu, p->cpus_ptr);
 	}
 
 	rcu_read_lock();
@@ -7173,6 +7292,7 @@ struct lb_env {
 	int			new_dst_cpu;
 	enum cpu_idle_type	idle;
 	long			imbalance;
+	unsigned int		src_grp_nr_running;
 	/* The set of CPUs under consideration for load-balancing */
 	struct cpumask		*cpus;
 
@@ -7287,9 +7407,14 @@ static
 int can_migrate_task(struct task_struct *p, struct lb_env *env)
 {
 	int tsk_cache_hot;
+	int can_migrate = 1;
 
 	lockdep_assert_held(&env->src_rq->lock);
 
+	trace_android_rvh_can_migrate_task(p, env->dst_cpu, &can_migrate);
+	if (!can_migrate)
+		return 0;
+
 	/*
 	 * We do not migrate tasks that are:
 	 * 1) throttled_lb_pair, or
@@ -7817,10 +7942,9 @@ static inline void init_sd_lb_stats(struct sd_lb_stats *sds)
 	};
 }
 
-static unsigned long scale_rt_capacity(struct sched_domain *sd, int cpu)
+static unsigned long scale_rt_capacity(int cpu, unsigned long max)
 {
 	struct rq *rq = cpu_rq(cpu);
-	unsigned long max = arch_scale_cpu_capacity(cpu);
 	unsigned long used, free;
 	unsigned long irq;
 
@@ -7840,12 +7964,47 @@ static unsigned long scale_rt_capacity(struct sched_domain *sd, int cpu)
 	return scale_irq_capacity(free, irq, max);
 }
 
+void init_max_cpu_capacity(struct max_cpu_capacity *mcc) {
+	raw_spin_lock_init(&mcc->lock);
+	mcc->val = 0;
+	mcc->cpu = -1;
+}
+
 static void update_cpu_capacity(struct sched_domain *sd, int cpu)
 {
-	unsigned long capacity = scale_rt_capacity(sd, cpu);
+	unsigned long capacity = arch_scale_cpu_capacity(cpu);
 	struct sched_group *sdg = sd->groups;
+	struct max_cpu_capacity *mcc;
+	unsigned long max_capacity;
+	int max_cap_cpu;
+	unsigned long flags;
 
-	cpu_rq(cpu)->cpu_capacity_orig = arch_scale_cpu_capacity(cpu);
+	cpu_rq(cpu)->cpu_capacity_orig = capacity;
+
+	capacity *= arch_scale_max_freq_capacity(sd, cpu);
+	capacity >>= SCHED_CAPACITY_SHIFT;
+
+	mcc = &cpu_rq(cpu)->rd->max_cpu_capacity;
+
+	raw_spin_lock_irqsave(&mcc->lock, flags);
+	max_capacity = mcc->val;
+	max_cap_cpu = mcc->cpu;
+
+	if ((max_capacity > capacity && max_cap_cpu == cpu) ||
+	    (max_capacity < capacity)) {
+		mcc->val = capacity;
+		mcc->cpu = cpu;
+#ifdef CONFIG_SCHED_DEBUG
+		raw_spin_unlock_irqrestore(&mcc->lock, flags);
+		printk_deferred(KERN_INFO "CPU%d: update max cpu_capacity %lu\n",
+				cpu, capacity);
+		goto skip_unlock;
+#endif
+	}
+	raw_spin_unlock_irqrestore(&mcc->lock, flags);
+
+skip_unlock: __attribute__ ((unused));
+	capacity = scale_rt_capacity(cpu, capacity);
 
 	if (!capacity)
 		capacity = 1;
@@ -7949,7 +8108,7 @@ check_cpu_capacity(struct rq *rq, struct sched_domain *sd)
 static inline int check_misfit_status(struct rq *rq, struct sched_domain *sd)
 {
 	return rq->misfit_task_load &&
-		(rq->cpu_capacity_orig < rq->rd->max_cpu_capacity ||
+		(rq->cpu_capacity_orig < rq->rd->max_cpu_capacity.val ||
 		 check_cpu_capacity(rq, sd));
 }
 
@@ -8352,6 +8511,8 @@ static inline void update_sd_lb_stats(struct lb_env *env, struct sd_lb_stats *sd
 	if (env->sd->flags & SD_NUMA)
 		env->fbq_type = fbq_classify_group(&sds->busiest_stat);
 
+	env->src_grp_nr_running = sds->busiest_stat.sum_nr_running;
+
 	if (!env->sd->parent) {
 		struct root_domain *rd = env->dst_rq->rd;
 
@@ -8480,7 +8641,22 @@ void fix_small_imbalance(struct lb_env *env, struct sd_lb_stats *sds)
 	capa_move /= SCHED_CAPACITY_SCALE;
 
 	/* Move if we gain throughput */
-	if (capa_move > capa_now)
+	if (capa_move > capa_now) {
+		env->imbalance = busiest->load_per_task;
+		return;
+	}
+
+	/* We can't see throughput improvement with the load-based
+	 * method, but it is possible depending upon group size and
+	 * capacity range that there might still be an underutilized
+	 * cpu available in an asymmetric capacity system. Do one last
+	 * check just in case.
+	 */
+	if (env->sd->flags & SD_ASYM_CPUCAPACITY &&
+		busiest->group_type == group_overloaded &&
+		busiest->sum_nr_running > busiest->group_weight &&
+		local->sum_nr_running < local->group_weight &&
+		local->group_capacity < busiest->group_capacity)
 		env->imbalance = busiest->load_per_task;
 }
 
@@ -8549,8 +8725,18 @@ static inline void calculate_imbalance(struct lb_env *env, struct sd_lb_stats *s
 		(sds->avg_load - local->avg_load) * local->group_capacity
 	) / SCHED_CAPACITY_SCALE;
 
-	/* Boost imbalance to allow misfit task to be balanced. */
-	if (busiest->group_type == group_misfit_task) {
+	/* Boost imbalance to allow misfit task to be balanced.
+	 * Always do this if we are doing a NEWLY_IDLE balance
+	 * on the assumption that any tasks we have must not be
+	 * long-running (and hence we cannot rely upon load).
+	 * However if we are not idle, we should assume the tasks
+	 * we have are longer running and not override load-based
+	 * calculations above unless we are sure that the local
+	 * group is underutilized.
+	 */
+	if (busiest->group_type == group_misfit_task &&
+		(env->idle == CPU_NEWLY_IDLE ||
+		local->sum_nr_running < local->group_weight)) {
 		env->imbalance = max_t(long, env->imbalance,
 				       busiest->group_misfit_task_load);
 	}
@@ -8593,8 +8779,12 @@ static struct sched_group *find_busiest_group(struct lb_env *env)
 
 	if (sched_energy_enabled()) {
 		struct root_domain *rd = env->dst_rq->rd;
+		int out_balance = 1;
 
-		if (rcu_dereference(rd->pd) && !READ_ONCE(rd->overutilized))
+		trace_android_rvh_find_busiest_group(sds.busiest, env->dst_rq,
+					&out_balance);
+		if (rcu_dereference(rd->pd) && !READ_ONCE(rd->overutilized)
+					&& out_balance)
 			goto out_balanced;
 	}
 
@@ -8828,6 +9018,9 @@ static int need_active_balance(struct lb_env *env)
 	if (voluntary_active_balance(env))
 		return 1;
 
+	if (env->src_grp_type == group_overloaded && env->src_rq->misfit_task_load)
+		return 1;
+
 	return unlikely(sd->nr_balance_failed > sd->cache_nice_tries+2);
 }
 
@@ -9046,7 +9239,8 @@ static int load_balance(int this_cpu, struct rq *this_rq,
 		 * excessive cache_hot migrations and active balances.
 		 */
 		if (idle != CPU_NEWLY_IDLE)
-			sd->nr_balance_failed++;
+			if (env.src_grp_nr_running > 1)
+				sd->nr_balance_failed++;
 
 		if (need_active_balance(&env)) {
 			unsigned long flags;
diff --git a/kernel/sched/features.h b/kernel/sched/features.h
index 2410db5..7481cd9 100644
--- a/kernel/sched/features.h
+++ b/kernel/sched/features.h
@@ -89,3 +89,4 @@ SCHED_FEAT(WA_BIAS, true)
  * UtilEstimation. Use estimated CPU utilization.
  */
 SCHED_FEAT(UTIL_EST, true)
+SCHED_FEAT(UTIL_EST_FASTUP, true)
diff --git a/kernel/sched/loadavg.c b/kernel/sched/loadavg.c
index de22da6..b1dfb50f 100644
--- a/kernel/sched/loadavg.c
+++ b/kernel/sched/loadavg.c
@@ -75,6 +75,7 @@ void get_avenrun(unsigned long *loads, unsigned long offset, int shift)
 	loads[1] = (avenrun[1] + offset) << shift;
 	loads[2] = (avenrun[2] + offset) << shift;
 }
+EXPORT_SYMBOL_GPL(get_avenrun);
 
 long calc_load_fold_active(struct rq *this_rq, long adjust)
 {
diff --git a/kernel/sched/psi.c b/kernel/sched/psi.c
index 9154e74..a860e22 100644
--- a/kernel/sched/psi.c
+++ b/kernel/sched/psi.c
@@ -190,7 +190,6 @@ static void group_init(struct psi_group *group)
 	INIT_DELAYED_WORK(&group->avgs_work, psi_avgs_work);
 	mutex_init(&group->avgs_lock);
 	/* Init trigger-related members */
-	atomic_set(&group->poll_scheduled, 0);
 	mutex_init(&group->trigger_lock);
 	INIT_LIST_HEAD(&group->triggers);
 	memset(group->nr_triggers, 0, sizeof(group->nr_triggers));
@@ -199,7 +198,7 @@ static void group_init(struct psi_group *group)
 	memset(group->polling_total, 0, sizeof(group->polling_total));
 	group->polling_next_update = ULLONG_MAX;
 	group->polling_until = 0;
-	rcu_assign_pointer(group->poll_kworker, NULL);
+	rcu_assign_pointer(group->poll_task, NULL);
 }
 
 void __init psi_init(void)
@@ -547,47 +546,38 @@ static u64 update_triggers(struct psi_group *group, u64 now)
 	return now + group->poll_min_period;
 }
 
-/*
- * Schedule polling if it's not already scheduled. It's safe to call even from
- * hotpath because even though kthread_queue_delayed_work takes worker->lock
- * spinlock that spinlock is never contended due to poll_scheduled atomic
- * preventing such competition.
- */
+/* Schedule polling if it's not already scheduled. */
 static void psi_schedule_poll_work(struct psi_group *group, unsigned long delay)
 {
-	struct kthread_worker *kworker;
+	struct task_struct *task;
 
-	/* Do not reschedule if already scheduled */
-	if (atomic_cmpxchg(&group->poll_scheduled, 0, 1) != 0)
+	/*
+	 * Do not reschedule if already scheduled.
+	 * Possible race with a timer scheduled after this check but before
+	 * mod_timer below can be tolerated because group->polling_next_update
+	 * will keep updates on schedule.
+	 */
+	if (timer_pending(&group->poll_timer))
 		return;
 
 	rcu_read_lock();
 
-	kworker = rcu_dereference(group->poll_kworker);
+	task = rcu_dereference(group->poll_task);
 	/*
 	 * kworker might be NULL in case psi_trigger_destroy races with
 	 * psi_task_change (hotpath) which can't use locks
 	 */
-	if (likely(kworker))
-		kthread_queue_delayed_work(kworker, &group->poll_work, delay);
-	else
-		atomic_set(&group->poll_scheduled, 0);
+	if (likely(task))
+		mod_timer(&group->poll_timer, jiffies + delay);
 
 	rcu_read_unlock();
 }
 
-static void psi_poll_work(struct kthread_work *work)
+static void psi_poll_work(struct psi_group *group)
 {
-	struct kthread_delayed_work *dwork;
-	struct psi_group *group;
 	u32 changed_states;
 	u64 now;
 
-	dwork = container_of(work, struct kthread_delayed_work, work);
-	group = container_of(dwork, struct psi_group, poll_work);
-
-	atomic_set(&group->poll_scheduled, 0);
-
 	mutex_lock(&group->trigger_lock);
 
 	now = sched_clock();
@@ -623,6 +613,35 @@ static void psi_poll_work(struct kthread_work *work)
 	mutex_unlock(&group->trigger_lock);
 }
 
+static int psi_poll_worker(void *data)
+{
+	struct psi_group *group = (struct psi_group *)data;
+	struct sched_param param = {
+		.sched_priority = 1,
+	};
+
+	sched_setscheduler_nocheck(current, SCHED_FIFO, &param);
+
+	while (true) {
+		wait_event_interruptible(group->poll_wait,
+				atomic_cmpxchg(&group->poll_wakeup, 1, 0) ||
+				kthread_should_stop());
+		if (kthread_should_stop())
+			break;
+
+		psi_poll_work(group);
+	}
+	return 0;
+}
+
+static void poll_timer_fn(struct timer_list *t)
+{
+	struct psi_group *group = from_timer(group, t, poll_timer);
+
+	atomic_set(&group->poll_wakeup, 1);
+	wake_up_interruptible(&group->poll_wait);
+}
+
 static void record_times(struct psi_group_cpu *groupc, int cpu,
 			 bool memstall_tick)
 {
@@ -1050,22 +1069,20 @@ struct psi_trigger *psi_trigger_create(struct psi_group *group,
 
 	mutex_lock(&group->trigger_lock);
 
-	if (!rcu_access_pointer(group->poll_kworker)) {
-		struct sched_param param = {
-			.sched_priority = 1,
-		};
-		struct kthread_worker *kworker;
+	if (!rcu_access_pointer(group->poll_task)) {
+		struct task_struct *task;
 
-		kworker = kthread_create_worker(0, "psimon");
-		if (IS_ERR(kworker)) {
+		task = kthread_create(psi_poll_worker, group, "psimon");
+		if (IS_ERR(task)) {
 			kfree(t);
 			mutex_unlock(&group->trigger_lock);
-			return ERR_CAST(kworker);
+			return ERR_CAST(task);
 		}
-		sched_setscheduler_nocheck(kworker->task, SCHED_FIFO, &param);
-		kthread_init_delayed_work(&group->poll_work,
-				psi_poll_work);
-		rcu_assign_pointer(group->poll_kworker, kworker);
+		atomic_set(&group->poll_wakeup, 0);
+		init_waitqueue_head(&group->poll_wait);
+		wake_up_process(task);
+		timer_setup(&group->poll_timer, poll_timer_fn, 0);
+		rcu_assign_pointer(group->poll_task, task);
 	}
 
 	list_add(&t->node, &group->triggers);
@@ -1083,7 +1100,7 @@ static void psi_trigger_destroy(struct kref *ref)
 {
 	struct psi_trigger *t = container_of(ref, struct psi_trigger, refcount);
 	struct psi_group *group = t->group;
-	struct kthread_worker *kworker_to_destroy = NULL;
+	struct task_struct *task_to_destroy = NULL;
 
 	if (static_branch_likely(&psi_disabled))
 		return;
@@ -1109,13 +1126,13 @@ static void psi_trigger_destroy(struct kref *ref)
 			period = min(period, div_u64(tmp->win.size,
 					UPDATES_PER_WINDOW));
 		group->poll_min_period = period;
-		/* Destroy poll_kworker when the last trigger is destroyed */
+		/* Destroy poll_task when the last trigger is destroyed */
 		if (group->poll_states == 0) {
 			group->polling_until = 0;
-			kworker_to_destroy = rcu_dereference_protected(
-					group->poll_kworker,
+			task_to_destroy = rcu_dereference_protected(
+					group->poll_task,
 					lockdep_is_held(&group->trigger_lock));
-			rcu_assign_pointer(group->poll_kworker, NULL);
+			rcu_assign_pointer(group->poll_task, NULL);
 		}
 	}
 
@@ -1123,25 +1140,23 @@ static void psi_trigger_destroy(struct kref *ref)
 
 	/*
 	 * Wait for both *trigger_ptr from psi_trigger_replace and
-	 * poll_kworker RCUs to complete their read-side critical sections
-	 * before destroying the trigger and optionally the poll_kworker
+	 * poll_task RCUs to complete their read-side critical sections
+	 * before destroying the trigger and optionally the poll_task
 	 */
 	synchronize_rcu();
 	/*
 	 * Destroy the kworker after releasing trigger_lock to prevent a
 	 * deadlock while waiting for psi_poll_work to acquire trigger_lock
 	 */
-	if (kworker_to_destroy) {
+	if (task_to_destroy) {
 		/*
 		 * After the RCU grace period has expired, the worker
-		 * can no longer be found through group->poll_kworker.
+		 * can no longer be found through group->poll_task.
 		 * But it might have been already scheduled before
 		 * that - deschedule it cleanly before destroying it.
 		 */
-		kthread_cancel_delayed_work_sync(&group->poll_work);
-		atomic_set(&group->poll_scheduled, 0);
-
-		kthread_destroy_worker(kworker_to_destroy);
+		del_timer_sync(&group->poll_timer);
+		kthread_stop(task_to_destroy);
 	}
 	kfree(t);
 }
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index 5b04bba..c3359a82 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -7,6 +7,8 @@
 
 #include "pelt.h"
 
+#include <trace/hooks/sched.h>
+
 int sched_rr_timeslice = RR_TIMESLICE;
 int sysctl_sched_rr_timeslice = (MSEC_PER_SEC / HZ) * RR_TIMESLICE;
 /* More than 4 hours if BW_SHIFT equals 20. */
@@ -439,6 +441,45 @@ static inline int on_rt_rq(struct sched_rt_entity *rt_se)
 	return rt_se->on_rq;
 }
 
+#ifdef CONFIG_UCLAMP_TASK
+/*
+ * Verify the fitness of task @p to run on @cpu taking into account the uclamp
+ * settings.
+ *
+ * This check is only important for heterogeneous systems where uclamp_min value
+ * is higher than the capacity of a @cpu. For non-heterogeneous system this
+ * function will always return true.
+ *
+ * The function will return true if the capacity of the @cpu is >= the
+ * uclamp_min and false otherwise.
+ *
+ * Note that uclamp_min will be clamped to uclamp_max if uclamp_min
+ * > uclamp_max.
+ */
+static inline bool rt_task_fits_capacity(struct task_struct *p, int cpu)
+{
+	unsigned int min_cap;
+	unsigned int max_cap;
+	unsigned int cpu_cap;
+
+	/* Only heterogeneous systems can benefit from this check */
+	if (!static_branch_unlikely(&sched_asym_cpucapacity))
+		return true;
+
+	min_cap = uclamp_eff_value(p, UCLAMP_MIN);
+	max_cap = uclamp_eff_value(p, UCLAMP_MAX);
+
+	cpu_cap = capacity_orig_of(cpu);
+
+	return cpu_cap >= min(min_cap, max_cap);
+}
+#else
+static inline bool rt_task_fits_capacity(struct task_struct *p, int cpu)
+{
+	return true;
+}
+#endif
+
 #ifdef CONFIG_RT_GROUP_SCHED
 
 static inline u64 sched_rt_runtime(struct rt_rq *rt_rq)
@@ -1393,6 +1434,13 @@ select_task_rq_rt(struct task_struct *p, int cpu, int sd_flag, int flags)
 {
 	struct task_struct *curr;
 	struct rq *rq;
+	bool test;
+	int target_cpu = -1;
+
+	trace_android_rvh_select_task_rq_rt(p, cpu, sd_flag,
+					flags, &target_cpu);
+	if (target_cpu >= 0)
+		return target_cpu;
 
 	/* For anything but wake ups, just return the task_cpu */
 	if (sd_flag != SD_BALANCE_WAKE && sd_flag != SD_BALANCE_FORK)
@@ -1424,13 +1472,26 @@ select_task_rq_rt(struct task_struct *p, int cpu, int sd_flag, int flags)
 	 *
 	 * This test is optimistic, if we get it wrong the load-balancer
 	 * will have to sort it out.
+	 *
+	 * We take into account the capacity of the CPU to ensure it fits the
+	 * requirement of the task - which is only important on heterogeneous
+	 * systems like big.LITTLE.
 	 */
-	if (curr && unlikely(rt_task(curr)) &&
-	    (curr->nr_cpus_allowed < 2 ||
-	     curr->prio <= p->prio)) {
+	test = curr &&
+	       unlikely(rt_task(curr)) &&
+	       (curr->nr_cpus_allowed < 2 || curr->prio <= p->prio);
+
+	if (test || !rt_task_fits_capacity(p, cpu)) {
 		int target = find_lowest_rq(p);
 
 		/*
+		 * Bail out if we were forcing a migration to find a better
+		 * fitting CPU but our search failed.
+		 */
+		if (!test && target != -1 && !rt_task_fits_capacity(p, target))
+			goto out_unlock;
+
+		/*
 		 * Don't bother moving it if the destination CPU is
 		 * not running a lower priority task.
 		 */
@@ -1438,6 +1499,8 @@ select_task_rq_rt(struct task_struct *p, int cpu, int sd_flag, int flags)
 		    p->prio < cpu_rq(target)->rt.highest_prio.curr)
 			cpu = target;
 	}
+
+out_unlock:
 	rcu_read_unlock();
 
 out:
@@ -1458,8 +1521,8 @@ static void check_preempt_equal_prio(struct rq *rq, struct task_struct *p)
 	 * p is migratable, so let's not schedule it and
 	 * see if it is pushed or pulled somewhere else.
 	 */
-	if (p->nr_cpus_allowed != 1
-	    && cpupri_find(&rq->rd->cpupri, p, NULL))
+	if (p->nr_cpus_allowed != 1 &&
+	    cpupri_find(&rq->rd->cpupri, p, NULL))
 		return;
 
 	/*
@@ -1640,6 +1703,12 @@ static int find_lowest_rq(struct task_struct *task)
 	struct cpumask *lowest_mask = this_cpu_cpumask_var_ptr(local_cpu_mask);
 	int this_cpu = smp_processor_id();
 	int cpu      = task_cpu(task);
+	int ret;
+	int lowest_cpu = -1;
+
+	trace_android_rvh_find_lowest_rq(task, lowest_mask, &lowest_cpu);
+	if (lowest_cpu >= 0)
+		return lowest_cpu;
 
 	/* Make sure the mask is initialized first */
 	if (unlikely(!lowest_mask))
@@ -1648,7 +1717,22 @@ static int find_lowest_rq(struct task_struct *task)
 	if (task->nr_cpus_allowed == 1)
 		return -1; /* No other targets possible */
 
-	if (!cpupri_find(&task_rq(task)->rd->cpupri, task, lowest_mask))
+	/*
+	 * If we're on asym system ensure we consider the different capacities
+	 * of the CPUs when searching for the lowest_mask.
+	 */
+	if (static_branch_unlikely(&sched_asym_cpucapacity)) {
+
+		ret = cpupri_find_fitness(&task_rq(task)->rd->cpupri,
+					  task, lowest_mask,
+					  rt_task_fits_capacity);
+	} else {
+
+		ret = cpupri_find(&task_rq(task)->rd->cpupri,
+				  task, lowest_mask);
+	}
+
+	if (!ret)
 		return -1; /* No targets found */
 
 	/*
@@ -2152,12 +2236,14 @@ static void pull_rt_task(struct rq *this_rq)
  */
 static void task_woken_rt(struct rq *rq, struct task_struct *p)
 {
-	if (!task_running(rq, p) &&
-	    !test_tsk_need_resched(rq->curr) &&
-	    p->nr_cpus_allowed > 1 &&
-	    (dl_task(rq->curr) || rt_task(rq->curr)) &&
-	    (rq->curr->nr_cpus_allowed < 2 ||
-	     rq->curr->prio <= p->prio))
+	bool need_to_push = !task_running(rq, p) &&
+			    !test_tsk_need_resched(rq->curr) &&
+			    p->nr_cpus_allowed > 1 &&
+			    (dl_task(rq->curr) || rt_task(rq->curr)) &&
+			    (rq->curr->nr_cpus_allowed < 2 ||
+			     rq->curr->prio <= p->prio);
+
+	if (need_to_push)
 		push_rt_tasks(rq);
 }
 
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index e10fb9b..5789bb4 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -399,6 +399,8 @@ struct task_group {
 	struct uclamp_se	uclamp_req[UCLAMP_CNT];
 	/* Effective clamp values used for a task group */
 	struct uclamp_se	uclamp[UCLAMP_CNT];
+	/* Latency-sensitive flag used for a task group */
+	unsigned int		latency_sensitive;
 #endif
 
 };
@@ -717,6 +719,12 @@ struct perf_domain {
 	struct rcu_head rcu;
 };
 
+struct max_cpu_capacity {
+	raw_spinlock_t lock;
+	unsigned long val;
+	int cpu;
+};
+
 /* Scheduling group status flags */
 #define SG_OVERLOAD		0x1 /* More than one runnable task on a CPU. */
 #define SG_OVERUTILIZED		0x2 /* One or more CPUs are over-utilized. */
@@ -775,7 +783,8 @@ struct root_domain {
 	cpumask_var_t		rto_mask;
 	struct cpupri		cpupri;
 
-	unsigned long		max_cpu_capacity;
+	/* Maximum cpu capacity in the system. */
+	struct max_cpu_capacity max_cpu_capacity;
 
 	/*
 	 * NULL-terminated list of performance domains intersecting with the
@@ -785,6 +794,7 @@ struct root_domain {
 };
 
 extern void init_defrootdomain(void);
+extern void init_max_cpu_capacity(struct max_cpu_capacity *mcc);
 extern int sched_init_domains(const struct cpumask *cpu_map);
 extern void rq_attach_root(struct rq *rq, struct root_domain *rd);
 extern void sched_get_rd(struct root_domain *rd);
@@ -1339,8 +1349,6 @@ extern void sched_ttwu_pending(void);
 	for (__sd = rcu_dereference_check_sched_domain(cpu_rq(cpu)->sd); \
 			__sd; __sd = __sd->parent)
 
-#define for_each_lower_domain(sd) for (; sd; sd = sd->child)
-
 /**
  * highest_flag_domain - Return highest sched_domain containing flag.
  * @cpu:	The CPU whose highest level of sched domain is to
@@ -1996,6 +2004,15 @@ unsigned long arch_scale_freq_capacity(int cpu)
 }
 #endif
 
+#ifndef arch_scale_max_freq_capacity
+struct sched_domain;
+static __always_inline
+unsigned long arch_scale_max_freq_capacity(struct sched_domain *sd, int cpu)
+{
+	return SCHED_CAPACITY_SCALE;
+}
+#endif
+
 #ifdef CONFIG_SMP
 #ifdef CONFIG_PREEMPTION
 
@@ -2320,7 +2337,7 @@ static inline void cpufreq_update_util(struct rq *rq, unsigned int flags) {}
 #endif /* CONFIG_CPU_FREQ */
 
 #ifdef CONFIG_UCLAMP_TASK
-unsigned int uclamp_eff_value(struct task_struct *p, enum uclamp_id clamp_id);
+unsigned long uclamp_eff_value(struct task_struct *p, enum uclamp_id clamp_id);
 
 /**
  * uclamp_util_with - clamp @util with @rq and @p effective uclamp values.
@@ -2340,11 +2357,11 @@ unsigned int uclamp_eff_value(struct task_struct *p, enum uclamp_id clamp_id);
  * static key is disabled.
  */
 static __always_inline
-unsigned int uclamp_util_with(struct rq *rq, unsigned int util,
-			      struct task_struct *p)
+unsigned long uclamp_rq_util_with(struct rq *rq, unsigned long util,
+				  struct task_struct *p)
 {
-	unsigned int min_util;
-	unsigned int max_util;
+	unsigned long min_util;
+	unsigned long max_util;
 
 	if (!static_branch_likely(&sched_uclamp_used))
 		return util;
@@ -2368,9 +2385,9 @@ unsigned int uclamp_util_with(struct rq *rq, unsigned int util,
 	return clamp(util, min_util, max_util);
 }
 
-static inline unsigned int uclamp_util(struct rq *rq, unsigned int util)
+static inline bool uclamp_boosted(struct task_struct *p)
 {
-	return uclamp_util_with(rq, util, NULL);
+	return uclamp_eff_value(p, UCLAMP_MIN) > 0;
 }
 
 /*
@@ -2386,14 +2403,15 @@ static inline bool uclamp_is_used(void)
 	return static_branch_likely(&sched_uclamp_used);
 }
 #else /* CONFIG_UCLAMP_TASK */
-static inline unsigned int uclamp_util_with(struct rq *rq, unsigned int util,
-					    struct task_struct *p)
+static inline
+unsigned long uclamp_rq_util_with(struct rq *rq, unsigned long util,
+				  struct task_struct *p)
 {
 	return util;
 }
-static inline unsigned int uclamp_util(struct rq *rq, unsigned int util)
+static inline bool uclamp_boosted(struct task_struct *p)
 {
-	return util;
+	return false;
 }
 
 static inline bool uclamp_is_used(void)
@@ -2402,6 +2420,25 @@ static inline bool uclamp_is_used(void)
 }
 #endif /* CONFIG_UCLAMP_TASK */
 
+#ifdef CONFIG_UCLAMP_TASK_GROUP
+static inline bool uclamp_latency_sensitive(struct task_struct *p)
+{
+	struct cgroup_subsys_state *css = task_css(p, cpu_cgrp_id);
+	struct task_group *tg;
+
+	if (!css)
+		return false;
+	tg = container_of(css, struct task_group, css);
+
+	return tg->latency_sensitive;
+}
+#else
+static inline bool uclamp_latency_sensitive(struct task_struct *p)
+{
+	return false;
+}
+#endif /* CONFIG_UCLAMP_TASK_GROUP */
+
 #ifdef arch_scale_freq_capacity
 # ifndef arch_scale_freq_invariant
 #  define arch_scale_freq_invariant()	true
diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
index ffaa97a..cd3a58c 100644
--- a/kernel/sched/topology.c
+++ b/kernel/sched/topology.c
@@ -510,6 +510,9 @@ static int init_rootdomain(struct root_domain *rd)
 
 	if (cpupri_init(&rd->cpupri) != 0)
 		goto free_cpudl;
+
+	init_max_cpu_capacity(&rd->max_cpu_capacity);
+
 	return 0;
 
 free_cpudl:
@@ -1377,18 +1380,9 @@ sd_init(struct sched_domain_topology_level *tl,
 	 * Convert topological properties into behaviour.
 	 */
 
-	if (sd->flags & SD_ASYM_CPUCAPACITY) {
-		struct sched_domain *t = sd;
-
-		/*
-		 * Don't attempt to spread across CPUs of different capacities.
-		 */
-		if (sd->child)
-			sd->child->flags &= ~SD_PREFER_SIBLING;
-
-		for_each_lower_domain(t)
-			t->flags |= SD_BALANCE_WAKE;
-	}
+	/* Don't attempt to spread across CPUs of different capacities. */
+	if ((sd->flags & SD_ASYM_CPUCAPACITY) && sd->child)
+		sd->child->flags &= ~SD_PREFER_SIBLING;
 
 	if (sd->flags & SD_SHARE_CPUCAPACITY) {
 		sd->imbalance_pct = 110;
@@ -1987,7 +1981,6 @@ build_sched_domains(const struct cpumask *cpu_map, struct sched_domain_attr *att
 	enum s_alloc alloc_state = sa_none;
 	struct sched_domain *sd;
 	struct s_data d;
-	struct rq *rq = NULL;
 	int i, ret = -ENOMEM;
 	struct sched_domain_topology_level *tl_asym;
 	bool has_asym = false;
@@ -2056,13 +2049,7 @@ build_sched_domains(const struct cpumask *cpu_map, struct sched_domain_attr *att
 	/* Attach the domains */
 	rcu_read_lock();
 	for_each_cpu(i, cpu_map) {
-		rq = cpu_rq(i);
 		sd = *per_cpu_ptr(d.sd, i);
-
-		/* Use READ_ONCE()/WRITE_ONCE() to avoid load/store tearing: */
-		if (rq->cpu_capacity_orig > READ_ONCE(d.rd->max_cpu_capacity))
-			WRITE_ONCE(d.rd->max_cpu_capacity, rq->cpu_capacity_orig);
-
 		cpu_attach_domain(sd, d.rd, i);
 	}
 	rcu_read_unlock();
@@ -2070,11 +2057,6 @@ build_sched_domains(const struct cpumask *cpu_map, struct sched_domain_attr *att
 	if (has_asym)
 		static_branch_inc_cpuslocked(&sched_asym_cpucapacity);
 
-	if (rq && sched_debug_enabled) {
-		pr_info("root domain span: %*pbl (max cpu_capacity = %lu)\n",
-			cpumask_pr_args(cpu_map), rq->rd->max_cpu_capacity);
-	}
-
 	ret = 0;
 error:
 	__free_domain_allocs(&d, alloc_state, cpu_map);
diff --git a/kernel/scs.c b/kernel/scs.c
new file mode 100644
index 0000000..c8e5335
--- /dev/null
+++ b/kernel/scs.c
@@ -0,0 +1,241 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Shadow Call Stack support.
+ *
+ * Copyright (C) 2019 Google LLC
+ */
+
+#include <linux/cpuhotplug.h>
+#include <linux/kasan.h>
+#include <linux/mm.h>
+#include <linux/mmzone.h>
+#include <linux/scs.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+#include <linux/vmstat.h>
+#include <asm/scs.h>
+
+static inline void *__scs_base(struct task_struct *tsk)
+{
+	/*
+	 * To minimize risk the of exposure, architectures may clear a
+	 * task's thread_info::shadow_call_stack while that task is
+	 * running, and only save/restore the active shadow call stack
+	 * pointer when the usual register may be clobbered (e.g. across
+	 * context switches).
+	 *
+	 * The shadow call stack is aligned to SCS_SIZE, and grows
+	 * upwards, so we can mask out the low bits to extract the base
+	 * when the task is not running.
+	 */
+	return (void *)((unsigned long)task_scs(tsk) & ~(SCS_SIZE - 1));
+}
+
+static inline unsigned long *scs_magic(void *s)
+{
+	return (unsigned long *)(s + SCS_SIZE) - 1;
+}
+
+static inline void scs_set_magic(void *s)
+{
+	*scs_magic(s) = SCS_END_MAGIC;
+}
+
+#ifdef CONFIG_SHADOW_CALL_STACK_VMAP
+
+/* Matches NR_CACHED_STACKS for VMAP_STACK */
+#define NR_CACHED_SCS 2
+static DEFINE_PER_CPU(void *, scs_cache[NR_CACHED_SCS]);
+
+static void *scs_alloc(int node)
+{
+	int i;
+	void *s;
+
+	for (i = 0; i < NR_CACHED_SCS; i++) {
+		s = this_cpu_xchg(scs_cache[i], NULL);
+		if (s) {
+			memset(s, 0, SCS_SIZE);
+			goto out;
+		}
+	}
+
+	/*
+	 * We allocate a full page for the shadow stack, which should be
+	 * more than we need. Check the assumption nevertheless.
+	 */
+	BUILD_BUG_ON(SCS_SIZE > PAGE_SIZE);
+
+	s = __vmalloc_node_range(PAGE_SIZE, SCS_SIZE,
+				 VMALLOC_START, VMALLOC_END,
+				 GFP_SCS, PAGE_KERNEL, 0,
+				 node, __builtin_return_address(0));
+
+out:
+	if (s)
+		scs_set_magic(s);
+	/* TODO: poison for KASAN, unpoison in scs_free */
+
+	return s;
+}
+
+static void scs_free(void *s)
+{
+	int i;
+
+	for (i = 0; i < NR_CACHED_SCS; i++)
+		if (this_cpu_cmpxchg(scs_cache[i], 0, s) == NULL)
+			return;
+
+	vfree_atomic(s);
+}
+
+static struct page *__scs_page(struct task_struct *tsk)
+{
+	return vmalloc_to_page(__scs_base(tsk));
+}
+
+static int scs_cleanup(unsigned int cpu)
+{
+	int i;
+	void **cache = per_cpu_ptr(scs_cache, cpu);
+
+	for (i = 0; i < NR_CACHED_SCS; i++) {
+		vfree(cache[i]);
+		cache[i] = NULL;
+	}
+
+	return 0;
+}
+
+void __init scs_init(void)
+{
+	WARN_ON(cpuhp_setup_state(CPUHP_BP_PREPARE_DYN, "scs:scs_cache", NULL,
+			scs_cleanup) < 0);
+}
+
+#else /* !CONFIG_SHADOW_CALL_STACK_VMAP */
+
+static struct kmem_cache *scs_cache;
+
+static inline void *scs_alloc(int node)
+{
+	void *s;
+
+	s = kmem_cache_alloc_node(scs_cache, GFP_SCS, node);
+	if (s) {
+		scs_set_magic(s);
+		/*
+		 * Poison the allocation to catch unintentional accesses to
+		 * the shadow stack when KASAN is enabled.
+		 */
+		kasan_poison_object_data(scs_cache, s);
+	}
+
+	return s;
+}
+
+static inline void scs_free(void *s)
+{
+	kasan_unpoison_object_data(scs_cache, s);
+	kmem_cache_free(scs_cache, s);
+}
+
+static struct page *__scs_page(struct task_struct *tsk)
+{
+	return virt_to_page(__scs_base(tsk));
+}
+
+void __init scs_init(void)
+{
+	scs_cache = kmem_cache_create("scs_cache", SCS_SIZE, SCS_SIZE,
+				0, NULL);
+	WARN_ON(!scs_cache);
+}
+
+#endif /* CONFIG_SHADOW_CALL_STACK_VMAP */
+
+void scs_task_reset(struct task_struct *tsk)
+{
+	/*
+	 * Reset the shadow stack to the base address in case the task
+	 * is reused.
+	 */
+	task_set_scs(tsk, __scs_base(tsk));
+}
+
+static void scs_account(struct task_struct *tsk, int account)
+{
+	mod_zone_page_state(page_zone(__scs_page(tsk)), NR_KERNEL_SCS_BYTES,
+		account * SCS_SIZE);
+}
+
+int scs_prepare(struct task_struct *tsk, int node)
+{
+	void *s;
+
+	s = scs_alloc(node);
+	if (!s)
+		return -ENOMEM;
+
+	task_set_scs(tsk, s);
+	scs_account(tsk, 1);
+
+	return 0;
+}
+
+#ifdef CONFIG_DEBUG_STACK_USAGE
+static void scs_check_usage(struct task_struct *tsk)
+{
+	static unsigned long highest;
+
+	unsigned long *p = __scs_base(tsk);
+	unsigned long *end = scs_magic(p);
+	unsigned long prev, curr = highest, used = 0;
+
+	for (; p < end; ++p) {
+		if (!READ_ONCE_NOCHECK(*p))
+			break;
+		used += sizeof(*p);
+	}
+
+	while (used > curr) {
+		prev = cmpxchg_relaxed(&highest, curr, used);
+
+		if (prev == curr) {
+			pr_info("%s (%d): highest shadow stack usage: %lu bytes\n",
+				tsk->comm, task_pid_nr(tsk), used);
+			break;
+		}
+
+		curr = prev;
+	}
+}
+#else
+static inline void scs_check_usage(struct task_struct *tsk)
+{
+}
+#endif
+
+bool scs_corrupted(struct task_struct *tsk)
+{
+	unsigned long *magic = scs_magic(__scs_base(tsk));
+
+	return READ_ONCE_NOCHECK(*magic) != SCS_END_MAGIC;
+}
+
+void scs_release(struct task_struct *tsk)
+{
+	void *s;
+
+	s = __scs_base(tsk);
+	if (!s)
+		return;
+
+	WARN_ON(scs_corrupted(tsk));
+	scs_check_usage(tsk);
+
+	scs_account(tsk, -1);
+	task_set_scs(tsk, NULL);
+	scs_free(s);
+}
diff --git a/kernel/seccomp.c b/kernel/seccomp.c
index 4221a43..0cb6e5f 100644
--- a/kernel/seccomp.c
+++ b/kernel/seccomp.c
@@ -13,6 +13,7 @@
  * Mode 2 allows user-defined system call filters in the form
  *        of Berkeley Packet Filters/Linux Socket Filters.
  */
+#define pr_fmt(fmt) "seccomp: " fmt
 
 #include <linux/refcount.h>
 #include <linux/audit.h>
@@ -41,6 +42,7 @@
 #include <linux/tracehook.h>
 #include <linux/uaccess.h>
 #include <linux/anon_inodes.h>
+#include <linux/lockdep.h>
 
 /*
  * When SECCOMP_IOCTL_NOTIF_ID_VALID was first introduced, it had the
@@ -83,6 +85,7 @@ struct seccomp_knotif {
 	/* The return values, only valid when in SECCOMP_NOTIFY_REPLIED */
 	int error;
 	long val;
+	u32 flags;
 
 	/* Signals when this has entered SECCOMP_NOTIFY_REPLIED */
 	struct completion ready;
@@ -101,27 +104,68 @@ struct seccomp_knotif {
  *           filter->notify_lock.
  * @next_id: The id of the next request.
  * @notifications: A list of struct seccomp_knotif elements.
- * @wqh: A wait queue for poll.
  */
 struct notification {
 	struct semaphore request;
 	u64 next_id;
 	struct list_head notifications;
-	wait_queue_head_t wqh;
 };
 
+#ifdef SECCOMP_ARCH_NATIVE
+/**
+ * struct action_cache - per-filter cache of seccomp actions per
+ * arch/syscall pair
+ *
+ * @allow_native: A bitmap where each bit represents whether the
+ *		  filter will always allow the syscall, for the
+ *		  native architecture.
+ * @allow_compat: A bitmap where each bit represents whether the
+ *		  filter will always allow the syscall, for the
+ *		  compat architecture.
+ */
+struct action_cache {
+	DECLARE_BITMAP(allow_native, SECCOMP_ARCH_NATIVE_NR);
+#ifdef SECCOMP_ARCH_COMPAT
+	DECLARE_BITMAP(allow_compat, SECCOMP_ARCH_COMPAT_NR);
+#endif
+};
+#else
+struct action_cache { };
+
+static inline bool seccomp_cache_check_allow(const struct seccomp_filter *sfilter,
+					     const struct seccomp_data *sd)
+{
+	return false;
+}
+
+static inline void seccomp_cache_prepare(struct seccomp_filter *sfilter)
+{
+}
+#endif /* SECCOMP_ARCH_NATIVE */
+
 /**
  * struct seccomp_filter - container for seccomp BPF programs
  *
- * @usage: reference count to manage the object lifetime.
- *         get/put helpers should be used when accessing an instance
- *         outside of a lifetime-guarded section.  In general, this
- *         is only needed for handling filters shared across tasks.
+ * @refs: Reference count to manage the object lifetime.
+ *	  A filter's reference count is incremented for each directly
+ *	  attached task, once for the dependent filter, and if
+ *	  requested for the user notifier. When @refs reaches zero,
+ *	  the filter can be freed.
+ * @users: A filter's @users count is incremented for each directly
+ *         attached task (filter installation, fork(), thread_sync),
+ *	   and once for the dependent filter (tracked in filter->prev).
+ *	   When it reaches zero it indicates that no direct or indirect
+ *	   users of that filter exist. No new tasks can get associated with
+ *	   this filter after reaching 0. The @users count is always smaller
+ *	   or equal to @refs. Hence, reaching 0 for @users does not mean
+ *	   the filter can be freed.
+ * @cache: cache of arch/syscall mappings to actions
  * @log: true if all actions except for SECCOMP_RET_ALLOW should be logged
  * @prev: points to a previously installed, or inherited, filter
  * @prog: the BPF program to evaluate
  * @notif: the struct that holds all notification related information
  * @notify_lock: A lock for all notification-related accesses.
+ * @wqh: A wait queue for poll if a notifier is in use.
  *
  * seccomp_filter objects are organized in a tree linked via the @prev
  * pointer.  For any task, it appears to be a singly-linked list starting
@@ -131,15 +175,18 @@ struct notification {
  * how namespaces work.
  *
  * seccomp_filter objects should never be modified after being attached
- * to a task_struct (other than @usage).
+ * to a task_struct (other than @refs).
  */
 struct seccomp_filter {
-	refcount_t usage;
+	refcount_t refs;
+	refcount_t users;
 	bool log;
+	struct action_cache cache;
 	struct seccomp_filter *prev;
 	struct bpf_prog *prog;
 	struct notification *notif;
 	struct mutex notify_lock;
+	wait_queue_head_t wqh;
 };
 
 /* Limit any path through the tree to 256KB worth of instructions. */
@@ -151,6 +198,10 @@ struct seccomp_filter {
  */
 static void populate_seccomp_data(struct seccomp_data *sd)
 {
+	/*
+	 * Instead of using current_pt_reg(), we're already doing the work
+	 * to safely fetch "current", so just use "task" everywhere below.
+	 */
 	struct task_struct *task = current;
 	struct pt_regs *regs = task_pt_regs(task);
 	unsigned long args[6];
@@ -249,6 +300,52 @@ static int seccomp_check_filter(struct sock_filter *filter, unsigned int flen)
 	return 0;
 }
 
+#ifdef SECCOMP_ARCH_NATIVE
+static inline bool seccomp_cache_check_allow_bitmap(const void *bitmap,
+						    size_t bitmap_size,
+						    int syscall_nr)
+{
+	if (unlikely(syscall_nr < 0 || syscall_nr >= bitmap_size))
+		return false;
+	syscall_nr = array_index_nospec(syscall_nr, bitmap_size);
+
+	return test_bit(syscall_nr, bitmap);
+}
+
+/**
+ * seccomp_cache_check_allow - lookup seccomp cache
+ * @sfilter: The seccomp filter
+ * @sd: The seccomp data to lookup the cache with
+ *
+ * Returns true if the seccomp_data is cached and allowed.
+ */
+static inline bool seccomp_cache_check_allow(const struct seccomp_filter *sfilter,
+					     const struct seccomp_data *sd)
+{
+	int syscall_nr = sd->nr;
+	const struct action_cache *cache = &sfilter->cache;
+
+#ifndef SECCOMP_ARCH_COMPAT
+	/* A native-only architecture doesn't need to check sd->arch. */
+	return seccomp_cache_check_allow_bitmap(cache->allow_native,
+						SECCOMP_ARCH_NATIVE_NR,
+						syscall_nr);
+#else
+	if (likely(sd->arch == SECCOMP_ARCH_NATIVE))
+		return seccomp_cache_check_allow_bitmap(cache->allow_native,
+							SECCOMP_ARCH_NATIVE_NR,
+							syscall_nr);
+	if (likely(sd->arch == SECCOMP_ARCH_COMPAT))
+		return seccomp_cache_check_allow_bitmap(cache->allow_compat,
+							SECCOMP_ARCH_COMPAT_NR,
+							syscall_nr);
+#endif /* SECCOMP_ARCH_COMPAT */
+
+	WARN_ON_ONCE(true);
+	return false;
+}
+#endif /* SECCOMP_ARCH_NATIVE */
+
 /**
  * seccomp_run_filters - evaluates all seccomp filters against @sd
  * @sd: optional seccomp data to be passed to filters
@@ -271,6 +368,9 @@ static u32 seccomp_run_filters(const struct seccomp_data *sd,
 	if (WARN_ON(f == NULL))
 		return SECCOMP_RET_KILL_PROCESS;
 
+	if (seccomp_cache_check_allow(f, sd))
+		return SECCOMP_RET_ALLOW;
+
 	/*
 	 * All filters in the list are evaluated and the lowest BPF return
 	 * value always takes priority (ignoring the DATA).
@@ -375,6 +475,59 @@ static inline pid_t seccomp_can_sync_threads(void)
 	return 0;
 }
 
+static inline void seccomp_filter_free(struct seccomp_filter *filter)
+{
+	if (filter) {
+		bpf_prog_destroy(filter->prog);
+		kfree(filter);
+	}
+}
+
+static void __seccomp_filter_orphan(struct seccomp_filter *orig)
+{
+	while (orig && refcount_dec_and_test(&orig->users)) {
+		if (waitqueue_active(&orig->wqh))
+			wake_up_poll(&orig->wqh, EPOLLHUP);
+		orig = orig->prev;
+	}
+}
+
+static void __put_seccomp_filter(struct seccomp_filter *orig)
+{
+	/* Clean up single-reference branches iteratively. */
+	while (orig && refcount_dec_and_test(&orig->refs)) {
+		struct seccomp_filter *freeme = orig;
+		orig = orig->prev;
+		seccomp_filter_free(freeme);
+	}
+}
+
+static void __seccomp_filter_release(struct seccomp_filter *orig)
+{
+	/* Notify about any unused filters in the task's former filter tree. */
+	__seccomp_filter_orphan(orig);
+	/* Finally drop all references to the task's former tree. */
+	__put_seccomp_filter(orig);
+}
+
+/**
+ * seccomp_filter_release - Detach the task from its filter tree,
+ *			    drop its reference count, and notify
+ *			    about unused filters
+ *
+ * This function should only be called when the task is exiting as
+ * it detaches it from its filter tree. As such, READ_ONCE() and
+ * barriers are not needed here, as would normally be needed.
+ */
+void seccomp_filter_release(struct task_struct *tsk)
+{
+	struct seccomp_filter *orig = tsk->seccomp.filter;
+
+	/* Detach task from its filter tree. */
+	tsk->seccomp.filter = NULL;
+	__seccomp_filter_release(orig);
+}
+
 /**
  * seccomp_sync_threads: sets all threads to use current's filter
  *
@@ -399,14 +552,19 @@ static inline void seccomp_sync_threads(unsigned long flags)
 
 		/* Get a task reference for the new leaf node. */
 		get_seccomp_filter(caller);
+
 		/*
 		 * Drop the task reference to the shared ancestor since
 		 * current's path will hold a reference.  (This also
 		 * allows a put before the assignment.)
 		 */
-		put_seccomp_filter(thread);
+		__seccomp_filter_release(thread->seccomp.filter);
+
+		/* Make our new filter tree visible. */
 		smp_store_release(&thread->seccomp.filter,
 				  caller->seccomp.filter);
+		atomic_set(&thread->seccomp.filter_count,
+			   atomic_read(&thread->seccomp.filter_count));
 
 		/*
 		 * Don't let an unprivileged task work around
@@ -439,7 +597,12 @@ static struct seccomp_filter *seccomp_prepare_filter(struct sock_fprog *fprog)
 {
 	struct seccomp_filter *sfilter;
 	int ret;
-	const bool save_orig = IS_ENABLED(CONFIG_CHECKPOINT_RESTORE);
+	const bool save_orig =
+#if defined(CONFIG_CHECKPOINT_RESTORE) || defined(SECCOMP_ARCH_NATIVE)
+		true;
+#else
+		false;
+#endif
 
 	if (fprog->len == 0 || fprog->len > BPF_MAXINSNS)
 		return ERR_PTR(-EINVAL);
@@ -469,7 +632,9 @@ static struct seccomp_filter *seccomp_prepare_filter(struct sock_fprog *fprog)
 		return ERR_PTR(ret);
 	}
 
-	refcount_set(&sfilter->usage, 1);
+	refcount_set(&sfilter->refs, 1);
+	refcount_set(&sfilter->users, 1);
+	init_waitqueue_head(&sfilter->wqh);
 
 	return sfilter;
 }
@@ -502,6 +667,148 @@ seccomp_prepare_user_filter(const char __user *user_filter)
 	return filter;
 }
 
+#ifdef SECCOMP_ARCH_NATIVE
+/**
+ * seccomp_is_const_allow - check if filter is constant allow with given data
+ * @fprog: The BPF programs
+ * @sd: The seccomp data to check against, only syscall number and arch
+ *      number are considered constant.
+ */
+static bool seccomp_is_const_allow(struct sock_fprog_kern *fprog,
+				   struct seccomp_data *sd)
+{
+	unsigned int reg_value = 0;
+	unsigned int pc;
+	bool op_res;
+
+	if (WARN_ON_ONCE(!fprog))
+		return false;
+
+	for (pc = 0; pc < fprog->len; pc++) {
+		struct sock_filter *insn = &fprog->filter[pc];
+		u16 code = insn->code;
+		u32 k = insn->k;
+
+		switch (code) {
+		case BPF_LD | BPF_W | BPF_ABS:
+			switch (k) {
+			case offsetof(struct seccomp_data, nr):
+				reg_value = sd->nr;
+				break;
+			case offsetof(struct seccomp_data, arch):
+				reg_value = sd->arch;
+				break;
+			default:
+				/* can't optimize (non-constant value load) */
+				return false;
+			}
+			break;
+		case BPF_RET | BPF_K:
+			/* reached return with constant values only, check allow */
+			return k == SECCOMP_RET_ALLOW;
+		case BPF_JMP | BPF_JA:
+			pc += insn->k;
+			break;
+		case BPF_JMP | BPF_JEQ | BPF_K:
+		case BPF_JMP | BPF_JGE | BPF_K:
+		case BPF_JMP | BPF_JGT | BPF_K:
+		case BPF_JMP | BPF_JSET | BPF_K:
+			switch (BPF_OP(code)) {
+			case BPF_JEQ:
+				op_res = reg_value == k;
+				break;
+			case BPF_JGE:
+				op_res = reg_value >= k;
+				break;
+			case BPF_JGT:
+				op_res = reg_value > k;
+				break;
+			case BPF_JSET:
+				op_res = !!(reg_value & k);
+				break;
+			default:
+				/* can't optimize (unknown jump) */
+				return false;
+			}
+
+			pc += op_res ? insn->jt : insn->jf;
+			break;
+		case BPF_ALU | BPF_AND | BPF_K:
+			reg_value &= k;
+			break;
+		default:
+			/* can't optimize (unknown insn) */
+			return false;
+		}
+	}
+
+	/* ran off the end of the filter?! */
+	WARN_ON(1);
+	return false;
+}
+
+static void seccomp_cache_prepare_bitmap(struct seccomp_filter *sfilter,
+					 void *bitmap, const void *bitmap_prev,
+					 size_t bitmap_size, int arch)
+{
+	struct sock_fprog_kern *fprog = sfilter->prog->orig_prog;
+	struct seccomp_data sd;
+	int nr;
+
+	if (bitmap_prev) {
+		/* The new filter must be as restrictive as the last. */
+		bitmap_copy(bitmap, bitmap_prev, bitmap_size);
+	} else {
+		/* Before any filters, all syscalls are always allowed. */
+		bitmap_fill(bitmap, bitmap_size);
+	}
+
+	for (nr = 0; nr < bitmap_size; nr++) {
+		/* No bitmap change: not a cacheable action. */
+		if (!test_bit(nr, bitmap))
+			continue;
+
+		sd.nr = nr;
+		sd.arch = arch;
+
+		/* No bitmap change: continue to always allow. */
+		if (seccomp_is_const_allow(fprog, &sd))
+			continue;
+
+		/*
+		 * Not a cacheable action: always run filters.
+		 * atomic clear_bit() not needed, filter not visible yet.
+		 */
+		__clear_bit(nr, bitmap);
+	}
+}
+
+/**
+ * seccomp_cache_prepare - emulate the filter to find cachable syscalls
+ * @sfilter: The seccomp filter
+ *
+ * Returns 0 if successful or -errno if error occurred.
+ */
+static void seccomp_cache_prepare(struct seccomp_filter *sfilter)
+{
+	struct action_cache *cache = &sfilter->cache;
+	const struct action_cache *cache_prev =
+		sfilter->prev ? &sfilter->prev->cache : NULL;
+
+	seccomp_cache_prepare_bitmap(sfilter, cache->allow_native,
+				     cache_prev ? cache_prev->allow_native : NULL,
+				     SECCOMP_ARCH_NATIVE_NR,
+				     SECCOMP_ARCH_NATIVE);
+
+#ifdef SECCOMP_ARCH_COMPAT
+	seccomp_cache_prepare_bitmap(sfilter, cache->allow_compat,
+				     cache_prev ? cache_prev->allow_compat : NULL,
+				     SECCOMP_ARCH_COMPAT_NR,
+				     SECCOMP_ARCH_COMPAT);
+#endif /* SECCOMP_ARCH_COMPAT */
+}
+#endif /* SECCOMP_ARCH_NATIVE */
+
 /**
  * seccomp_attach_filter: validate and attach filter
  * @flags:  flags to change filter behavior
@@ -547,7 +854,9 @@ static long seccomp_attach_filter(unsigned int flags,
 	 * task reference.
 	 */
 	filter->prev = current->seccomp.filter;
+	seccomp_cache_prepare(filter);
 	current->seccomp.filter = filter;
+	atomic_inc(&current->seccomp.filter_count);
 
 	/* Now that the new filter is in place, synchronize to all threads. */
 	if (flags & SECCOMP_FILTER_FLAG_TSYNC)
@@ -558,7 +867,7 @@ static long seccomp_attach_filter(unsigned int flags,
 
 static void __get_seccomp_filter(struct seccomp_filter *filter)
 {
-	refcount_inc(&filter->usage);
+	refcount_inc(&filter->refs);
 }
 
 /* get_seccomp_filter - increments the reference count of the filter on @tsk */
@@ -568,30 +877,7 @@ void get_seccomp_filter(struct task_struct *tsk)
 	if (!orig)
 		return;
 	__get_seccomp_filter(orig);
-}
-
-static inline void seccomp_filter_free(struct seccomp_filter *filter)
-{
-	if (filter) {
-		bpf_prog_destroy(filter->prog);
-		kfree(filter);
-	}
-}
-
-static void __put_seccomp_filter(struct seccomp_filter *orig)
-{
-	/* Clean up single-reference branches iteratively. */
-	while (orig && refcount_dec_and_test(&orig->usage)) {
-		struct seccomp_filter *freeme = orig;
-		orig = orig->prev;
-		seccomp_filter_free(freeme);
-	}
-}
-
-/* put_seccomp_filter - decrements the ref count of tsk->seccomp.filter */
-void put_seccomp_filter(struct task_struct *tsk)
-{
-	__put_seccomp_filter(tsk->seccomp.filter);
+	refcount_inc(&orig->users);
 }
 
 static void seccomp_init_siginfo(kernel_siginfo_t *info, int syscall, int reason)
@@ -688,20 +974,20 @@ static inline void seccomp_log(unsigned long syscall, long signr, u32 action,
  */
 static const int mode1_syscalls[] = {
 	__NR_seccomp_read, __NR_seccomp_write, __NR_seccomp_exit, __NR_seccomp_sigreturn,
-	0, /* null terminated */
+	-1, /* negative terminated */
 };
 
 static void __secure_computing_strict(int this_syscall)
 {
-	const int *syscall_whitelist = mode1_syscalls;
+	const int *allowed_syscalls = mode1_syscalls;
 #ifdef CONFIG_COMPAT
 	if (in_compat_syscall())
-		syscall_whitelist = get_compat_mode1_syscalls();
+		allowed_syscalls = get_compat_mode1_syscalls();
 #endif
 	do {
-		if (*syscall_whitelist == this_syscall)
+		if (*allowed_syscalls == this_syscall)
 			return;
-	} while (*++syscall_whitelist);
+	} while (*++allowed_syscalls != -1);
 
 #ifdef SECCOMP_DEBUG
 	dump_stack();
@@ -739,11 +1025,12 @@ static u64 seccomp_next_notify_id(struct seccomp_filter *filter)
 	return filter->notif->next_id++;
 }
 
-static void seccomp_do_user_notification(int this_syscall,
-					 struct seccomp_filter *match,
-					 const struct seccomp_data *sd)
+static int seccomp_do_user_notification(int this_syscall,
+					struct seccomp_filter *match,
+					const struct seccomp_data *sd)
 {
 	int err;
+	u32 flags = 0;
 	long ret = 0;
 	struct seccomp_knotif n = {};
 
@@ -760,7 +1047,7 @@ static void seccomp_do_user_notification(int this_syscall,
 	list_add(&n.list, &match->notif->notifications);
 
 	up(&match->notif->request);
-	wake_up_poll(&match->notif->wqh, EPOLLIN | EPOLLRDNORM);
+	wake_up_poll(&match->wqh, EPOLLIN | EPOLLRDNORM);
 	mutex_unlock(&match->notify_lock);
 
 	/*
@@ -771,6 +1058,7 @@ static void seccomp_do_user_notification(int this_syscall,
 	if (err == 0) {
 		ret = n.val;
 		err = n.error;
+		flags = n.flags;
 	}
 
 	/*
@@ -787,8 +1075,14 @@ static void seccomp_do_user_notification(int this_syscall,
 		list_del(&n.list);
 out:
 	mutex_unlock(&match->notify_lock);
-	syscall_set_return_value(current, task_pt_regs(current),
+
+	/* Userspace requests to continue the syscall. */
+	if (flags & SECCOMP_USER_NOTIF_FLAG_CONTINUE)
+		return 0;
+
+	syscall_set_return_value(current, current_pt_regs(),
 				 err, ret);
+	return -1;
 }
 
 static int __seccomp_filter(int this_syscall, const struct seccomp_data *sd,
@@ -819,13 +1113,13 @@ static int __seccomp_filter(int this_syscall, const struct seccomp_data *sd,
 		/* Set low-order bits as an errno, capped at MAX_ERRNO. */
 		if (data > MAX_ERRNO)
 			data = MAX_ERRNO;
-		syscall_set_return_value(current, task_pt_regs(current),
+		syscall_set_return_value(current, current_pt_regs(),
 					 -data, 0);
 		goto skip;
 
 	case SECCOMP_RET_TRAP:
 		/* Show the handler the original registers. */
-		syscall_rollback(current, task_pt_regs(current));
+		syscall_rollback(current, current_pt_regs());
 		/* Let the filter pass back 16 bits of data. */
 		seccomp_send_sigsys(this_syscall, data);
 		goto skip;
@@ -838,7 +1132,7 @@ static int __seccomp_filter(int this_syscall, const struct seccomp_data *sd,
 		/* ENOSYS these calls if there is no tracer attached. */
 		if (!ptrace_event_enabled(current, PTRACE_EVENT_SECCOMP)) {
 			syscall_set_return_value(current,
-						 task_pt_regs(current),
+						 current_pt_regs(),
 						 -ENOSYS, 0);
 			goto skip;
 		}
@@ -858,7 +1152,7 @@ static int __seccomp_filter(int this_syscall, const struct seccomp_data *sd,
 		if (fatal_signal_pending(current))
 			goto skip;
 		/* Check if the tracer forced the syscall to be skipped. */
-		this_syscall = syscall_get_nr(current, task_pt_regs(current));
+		this_syscall = syscall_get_nr(current, current_pt_regs());
 		if (this_syscall < 0)
 			goto skip;
 
@@ -874,8 +1168,10 @@ static int __seccomp_filter(int this_syscall, const struct seccomp_data *sd,
 		return 0;
 
 	case SECCOMP_RET_USER_NOTIF:
-		seccomp_do_user_notification(this_syscall, match, sd);
-		goto skip;
+		if (seccomp_do_user_notification(this_syscall, match, sd))
+			goto skip;
+
+		return 0;
 
 	case SECCOMP_RET_LOG:
 		seccomp_log(this_syscall, 0, action, true);
@@ -894,20 +1190,20 @@ static int __seccomp_filter(int this_syscall, const struct seccomp_data *sd,
 	default:
 		seccomp_log(this_syscall, SIGSYS, action, true);
 		/* Dump core only if this is the last remaining thread. */
-		if (action == SECCOMP_RET_KILL_PROCESS ||
+		if (action != SECCOMP_RET_KILL_THREAD ||
 		    get_nr_threads(current) == 1) {
 			kernel_siginfo_t info;
 
 			/* Show the original registers in the dump. */
-			syscall_rollback(current, task_pt_regs(current));
+			syscall_rollback(current, current_pt_regs());
 			/* Trigger a manual coredump since do_exit skips it. */
 			seccomp_init_siginfo(&info, this_syscall, data);
 			do_coredump(&info);
 		}
-		if (action == SECCOMP_RET_KILL_PROCESS)
-			do_group_exit(SIGSYS);
-		else
+		if (action == SECCOMP_RET_KILL_THREAD)
 			do_exit(SIGSYS);
+		else
+			do_group_exit(SIGSYS);
 	}
 
 	unreachable();
@@ -934,7 +1230,7 @@ int __secure_computing(const struct seccomp_data *sd)
 		return 0;
 
 	this_syscall = sd ? sd->nr :
-		syscall_get_nr(current, task_pt_regs(current));
+		syscall_get_nr(current, current_pt_regs());
 
 	switch (mode) {
 	case SECCOMP_MODE_STRICT:
@@ -983,13 +1279,18 @@ static long seccomp_set_mode_strict(void)
 }
 
 #ifdef CONFIG_SECCOMP_FILTER
-static int seccomp_notify_release(struct inode *inode, struct file *file)
+static void seccomp_notify_free(struct seccomp_filter *filter)
 {
-	struct seccomp_filter *filter = file->private_data;
+	kfree(filter->notif);
+	filter->notif = NULL;
+}
+
+static void seccomp_notify_detach(struct seccomp_filter *filter)
+{
 	struct seccomp_knotif *knotif;
 
 	if (!filter)
-		return 0;
+		return;
 
 	mutex_lock(&filter->notify_lock);
 
@@ -1008,13 +1309,36 @@ static int seccomp_notify_release(struct inode *inode, struct file *file)
 		complete(&knotif->ready);
 	}
 
-	kfree(filter->notif);
-	filter->notif = NULL;
+	seccomp_notify_free(filter);
 	mutex_unlock(&filter->notify_lock);
+}
+
+static int seccomp_notify_release(struct inode *inode, struct file *file)
+{
+	struct seccomp_filter *filter = file->private_data;
+
+	seccomp_notify_detach(filter);
 	__put_seccomp_filter(filter);
 	return 0;
 }
 
+/* must be called with notif_lock held */
+static inline struct seccomp_knotif *
+find_notification(struct seccomp_filter *filter, u64 id)
+{
+	struct seccomp_knotif *cur;
+
+	lockdep_assert_held(&filter->notify_lock);
+
+	list_for_each_entry(cur, &filter->notif->notifications, list) {
+		if (cur->id == id)
+			return cur;
+	}
+
+	return NULL;
+}
+
+
 static long seccomp_notify_recv(struct seccomp_filter *filter,
 				void __user *buf)
 {
@@ -1058,7 +1382,7 @@ static long seccomp_notify_recv(struct seccomp_filter *filter,
 	unotif.data = *(knotif->data);
 
 	knotif->state = SECCOMP_NOTIFY_SENT;
-	wake_up_poll(&filter->notif->wqh, EPOLLOUT | EPOLLWRNORM);
+	wake_up_poll(&filter->wqh, EPOLLOUT | EPOLLWRNORM);
 	ret = 0;
 out:
 	mutex_unlock(&filter->notify_lock);
@@ -1072,15 +1396,8 @@ static long seccomp_notify_recv(struct seccomp_filter *filter,
 		 * may have died when we released the lock, so we need to make
 		 * sure it's still around.
 		 */
-		knotif = NULL;
 		mutex_lock(&filter->notify_lock);
-		list_for_each_entry(cur, &filter->notif->notifications, list) {
-			if (cur->id == unotif.id) {
-				knotif = cur;
-				break;
-			}
-		}
-
+		knotif = find_notification(filter, unotif.id);
 		if (knotif) {
 			knotif->state = SECCOMP_NOTIFY_INIT;
 			up(&filter->notif->request);
@@ -1095,26 +1412,24 @@ static long seccomp_notify_send(struct seccomp_filter *filter,
 				void __user *buf)
 {
 	struct seccomp_notif_resp resp = {};
-	struct seccomp_knotif *knotif = NULL, *cur;
+	struct seccomp_knotif *knotif;
 	long ret;
 
 	if (copy_from_user(&resp, buf, sizeof(resp)))
 		return -EFAULT;
 
-	if (resp.flags)
+	if (resp.flags & ~SECCOMP_USER_NOTIF_FLAG_CONTINUE)
+		return -EINVAL;
+
+	if ((resp.flags & SECCOMP_USER_NOTIF_FLAG_CONTINUE) &&
+	    (resp.error || resp.val))
 		return -EINVAL;
 
 	ret = mutex_lock_interruptible(&filter->notify_lock);
 	if (ret < 0)
 		return ret;
 
-	list_for_each_entry(cur, &filter->notif->notifications, list) {
-		if (cur->id == resp.id) {
-			knotif = cur;
-			break;
-		}
-	}
-
+	knotif = find_notification(filter, resp.id);
 	if (!knotif) {
 		ret = -ENOENT;
 		goto out;
@@ -1130,6 +1445,7 @@ static long seccomp_notify_send(struct seccomp_filter *filter,
 	knotif->state = SECCOMP_NOTIFY_REPLIED;
 	knotif->error = resp.error;
 	knotif->val = resp.val;
+	knotif->flags = resp.flags;
 	complete(&knotif->ready);
 out:
 	mutex_unlock(&filter->notify_lock);
@@ -1139,7 +1455,7 @@ static long seccomp_notify_send(struct seccomp_filter *filter,
 static long seccomp_notify_id_valid(struct seccomp_filter *filter,
 				    void __user *buf)
 {
-	struct seccomp_knotif *knotif = NULL;
+	struct seccomp_knotif *knotif;
 	u64 id;
 	long ret;
 
@@ -1150,16 +1466,12 @@ static long seccomp_notify_id_valid(struct seccomp_filter *filter,
 	if (ret < 0)
 		return ret;
 
-	ret = -ENOENT;
-	list_for_each_entry(knotif, &filter->notif->notifications, list) {
-		if (knotif->id == id) {
-			if (knotif->state == SECCOMP_NOTIFY_SENT)
-				ret = 0;
-			goto out;
-		}
-	}
+	knotif = find_notification(filter, id);
+	if (knotif && knotif->state == SECCOMP_NOTIFY_SENT)
+		ret = 0;
+	else
+		ret = -ENOENT;
 
-out:
 	mutex_unlock(&filter->notify_lock);
 	return ret;
 }
@@ -1190,7 +1502,7 @@ static __poll_t seccomp_notify_poll(struct file *file,
 	__poll_t ret = 0;
 	struct seccomp_knotif *cur;
 
-	poll_wait(file, &filter->notif->wqh, poll_tab);
+	poll_wait(file, &filter->wqh, poll_tab);
 
 	if (mutex_lock_interruptible(&filter->notify_lock) < 0)
 		return EPOLLERR;
@@ -1206,6 +1518,9 @@ static __poll_t seccomp_notify_poll(struct file *file,
 
 	mutex_unlock(&filter->notify_lock);
 
+	if (refcount_read(&filter->users) == 0)
+		ret |= EPOLLHUP;
+
 	return ret;
 }
 
@@ -1228,7 +1543,6 @@ static struct file *init_listener(struct seccomp_filter *filter)
 	sema_init(&filter->notif->request, 0);
 	filter->notif->next_id = get_random_u64();
 	INIT_LIST_HEAD(&filter->notif->notifications);
-	init_waitqueue_head(&filter->notif->wqh);
 
 	ret = anon_inode_getfile("seccomp notify", &seccomp_notify_ops,
 				 filter, O_RDWR);
@@ -1240,7 +1554,7 @@ static struct file *init_listener(struct seccomp_filter *filter)
 
 out_notif:
 	if (IS_ERR(ret))
-		kfree(filter->notif);
+		seccomp_notify_free(filter);
 out:
 	return ret;
 }
@@ -1361,6 +1675,7 @@ static long seccomp_set_mode_filter(unsigned int flags,
 			listener_f->private_data = NULL;
 			fput(listener_f);
 			put_unused_fd(listener);
+			seccomp_notify_detach(prepared);
 		} else {
 			fd_install(listener, listener_f);
 			ret = listener;
@@ -1708,7 +2023,7 @@ static bool seccomp_actions_logged_from_names(u32 *actions_logged, char *names)
 	return true;
 }
 
-static int read_actions_logged(struct ctl_table *ro_table, void __user *buffer,
+static int read_actions_logged(struct ctl_table *ro_table, void *buffer,
 			       size_t *lenp, loff_t *ppos)
 {
 	char names[sizeof(seccomp_actions_avail)];
@@ -1726,7 +2041,7 @@ static int read_actions_logged(struct ctl_table *ro_table, void __user *buffer,
 	return proc_dostring(&table, 0, buffer, lenp, ppos);
 }
 
-static int write_actions_logged(struct ctl_table *ro_table, void __user *buffer,
+static int write_actions_logged(struct ctl_table *ro_table, void *buffer,
 				size_t *lenp, loff_t *ppos, u32 *actions_logged)
 {
 	char names[sizeof(seccomp_actions_avail)];
@@ -1834,7 +2149,7 @@ static int __init seccomp_sysctl_init(void)
 
 	hdr = register_sysctl_paths(seccomp_sysctl_path, seccomp_sysctl_table);
 	if (!hdr)
-		pr_warn("seccomp: sysctl registration failed\n");
+		pr_warn("sysctl registration failed\n");
 	else
 		kmemleak_not_leak(hdr);
 
diff --git a/kernel/signal.c b/kernel/signal.c
index 8c97fc7..4f5e6be 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -1397,6 +1397,7 @@ struct sighand_struct *__lock_task_sighand(struct task_struct *tsk,
 
 	return sighand;
 }
+EXPORT_SYMBOL_GPL(__lock_task_sighand);
 
 /*
  * send signal info to all the members of a group
diff --git a/kernel/sys.c b/kernel/sys.c
index 3459a5c..730672c 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -42,6 +42,8 @@
 #include <linux/syscore_ops.h>
 #include <linux/version.h>
 #include <linux/ctype.h>
+#include <linux/mm.h>
+#include <linux/mempolicy.h>
 
 #include <linux/compat.h>
 #include <linux/syscalls.h>
@@ -2261,6 +2263,153 @@ int __weak arch_prctl_spec_ctrl_set(struct task_struct *t, unsigned long which,
 	return -EINVAL;
 }
 
+#ifdef CONFIG_MMU
+static int prctl_update_vma_anon_name(struct vm_area_struct *vma,
+		struct vm_area_struct **prev,
+		unsigned long start, unsigned long end,
+		const char __user *name_addr)
+{
+	struct mm_struct *mm = vma->vm_mm;
+	int error = 0;
+	pgoff_t pgoff;
+
+	if (name_addr == vma_get_anon_name(vma)) {
+		*prev = vma;
+		goto out;
+	}
+
+	pgoff = vma->vm_pgoff + ((start - vma->vm_start) >> PAGE_SHIFT);
+	*prev = vma_merge(mm, *prev, start, end, vma->vm_flags, vma->anon_vma,
+				vma->vm_file, pgoff, vma_policy(vma),
+				vma->vm_userfaultfd_ctx, name_addr);
+	if (*prev) {
+		vma = *prev;
+		goto success;
+	}
+
+	*prev = vma;
+
+	if (start != vma->vm_start) {
+		error = split_vma(mm, vma, start, 1);
+		if (error)
+			goto out;
+	}
+
+	if (end != vma->vm_end) {
+		error = split_vma(mm, vma, end, 0);
+		if (error)
+			goto out;
+	}
+
+success:
+	if (!vma->vm_file)
+		vma->anon_name = name_addr;
+
+out:
+	if (error == -ENOMEM)
+		error = -EAGAIN;
+	return error;
+}
+
+static int prctl_set_vma_anon_name(unsigned long start, unsigned long end,
+			unsigned long arg)
+{
+	unsigned long tmp;
+	struct vm_area_struct *vma, *prev;
+	int unmapped_error = 0;
+	int error = -EINVAL;
+
+	/*
+	 * If the interval [start,end) covers some unmapped address
+	 * ranges, just ignore them, but return -ENOMEM at the end.
+	 * - this matches the handling in madvise.
+	 */
+	vma = find_vma_prev(current->mm, start, &prev);
+	if (vma && start > vma->vm_start)
+		prev = vma;
+
+	for (;;) {
+		/* Still start < end. */
+		error = -ENOMEM;
+		if (!vma)
+			return error;
+
+		/* Here start < (end|vma->vm_end). */
+		if (start < vma->vm_start) {
+			unmapped_error = -ENOMEM;
+			start = vma->vm_start;
+			if (start >= end)
+				return error;
+		}
+
+		/* Here vma->vm_start <= start < (end|vma->vm_end) */
+		tmp = vma->vm_end;
+		if (end < tmp)
+			tmp = end;
+
+		/* Here vma->vm_start <= start < tmp <= (end|vma->vm_end). */
+		error = prctl_update_vma_anon_name(vma, &prev, start, tmp,
+				(const char __user *)arg);
+		if (error)
+			return error;
+		start = tmp;
+		if (prev && start < prev->vm_end)
+			start = prev->vm_end;
+		error = unmapped_error;
+		if (start >= end)
+			return error;
+		if (prev)
+			vma = prev->vm_next;
+		else	/* madvise_remove dropped mmap_sem */
+			vma = find_vma(current->mm, start);
+	}
+}
+
+static int prctl_set_vma(unsigned long opt, unsigned long start,
+		unsigned long len_in, unsigned long arg)
+{
+	struct mm_struct *mm = current->mm;
+	int error;
+	unsigned long len;
+	unsigned long end;
+
+	if (start & ~PAGE_MASK)
+		return -EINVAL;
+	len = (len_in + ~PAGE_MASK) & PAGE_MASK;
+
+	/* Check to see whether len was rounded up from small -ve to zero */
+	if (len_in && !len)
+		return -EINVAL;
+
+	end = start + len;
+	if (end < start)
+		return -EINVAL;
+
+	if (end == start)
+		return 0;
+
+	down_write(&mm->mmap_sem);
+
+	switch (opt) {
+	case PR_SET_VMA_ANON_NAME:
+		error = prctl_set_vma_anon_name(start, end, arg);
+		break;
+	default:
+		error = -EINVAL;
+	}
+
+	up_write(&mm->mmap_sem);
+
+	return error;
+}
+#else /* CONFIG_MMU */
+static int prctl_set_vma(unsigned long opt, unsigned long start,
+		unsigned long len_in, unsigned long arg)
+{
+	return -EINVAL;
+}
+#endif
+
 SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
 		unsigned long, arg4, unsigned long, arg5)
 {
@@ -2473,6 +2622,9 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
 			return -EINVAL;
 		error = arch_prctl_spec_ctrl_set(me, arg2, arg3);
 		break;
+	case PR_SET_VMA:
+		error = prctl_set_vma(arg2, arg3, arg4, arg5);
+		break;
 	case PR_PAC_RESET_KEYS:
 		if (arg3 || arg4 || arg5)
 			return -EINVAL;
diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c
index 34b7689..8159cdb 100644
--- a/kernel/sys_ni.c
+++ b/kernel/sys_ni.c
@@ -280,6 +280,7 @@ COND_SYSCALL(mlockall);
 COND_SYSCALL(munlockall);
 COND_SYSCALL(mincore);
 COND_SYSCALL(madvise);
+COND_SYSCALL(process_madvise);
 COND_SYSCALL(remap_file_pages);
 COND_SYSCALL(mbind);
 COND_SYSCALL_COMPAT(mbind);
diff --git a/kernel/sysctl-test.c b/kernel/sysctl-test.c
index 2a63241..ccb7850 100644
--- a/kernel/sysctl-test.c
+++ b/kernel/sysctl-test.c
@@ -389,4 +389,6 @@ static struct kunit_suite sysctl_test_suite = {
 	.test_cases = sysctl_test_cases,
 };
 
-kunit_test_suite(sysctl_test_suite);
+kunit_test_suites(&sysctl_test_suite);
+
+MODULE_LICENSE("GPL v2");
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 7066593..b15f5bd 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -111,6 +111,7 @@ extern char core_pattern[];
 extern unsigned int core_pipe_limit;
 #endif
 extern int pid_max;
+extern int extra_free_kbytes;
 extern int pid_max_min, pid_max_max;
 extern int percpu_pagelist_fraction;
 extern int latencytop_enabled;
@@ -465,6 +466,13 @@ static struct ctl_table kern_table[] = {
 		.mode		= 0644,
 		.proc_handler	= sysctl_sched_uclamp_handler,
 	},
+	{
+		.procname	= "sched_util_clamp_min_rt_default",
+		.data		= &sysctl_sched_uclamp_util_min_rt_default,
+		.maxlen		= sizeof(unsigned int),
+		.mode		= 0644,
+		.proc_handler	= sysctl_sched_uclamp_handler,
+	},
 #endif
 #ifdef CONFIG_SCHED_AUTOGROUP
 	{
@@ -1525,6 +1533,14 @@ static struct ctl_table vm_table[] = {
 		.extra2		= &one_thousand,
 	},
 	{
+		.procname	= "extra_free_kbytes",
+		.data		= &extra_free_kbytes,
+		.maxlen		= sizeof(extra_free_kbytes),
+		.mode		= 0644,
+		.proc_handler	= min_free_kbytes_sysctl_handler,
+		.extra1		= SYSCTL_ZERO,
+	},
+	{
 		.procname	= "percpu_pagelist_fraction",
 		.data		= &percpu_pagelist_fraction,
 		.maxlen		= sizeof(percpu_pagelist_fraction),
diff --git a/kernel/time/time.c b/kernel/time/time.c
index 83f403e..7353f04 100644
--- a/kernel/time/time.c
+++ b/kernel/time/time.c
@@ -776,6 +776,7 @@ u64 nsec_to_clock_t(u64 x)
 	return div_u64(x * 9, (9ull * NSEC_PER_SEC + (USER_HZ / 2)) / USER_HZ);
 #endif
 }
+EXPORT_SYMBOL_GPL(nsec_to_clock_t);
 
 u64 jiffies64_to_nsecs(u64 j)
 {
diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
index 9fa01da..aff75a0 100644
--- a/kernel/trace/Kconfig
+++ b/kernel/trace/Kconfig
@@ -106,7 +106,6 @@
 
 config TRACING
 	bool
-	select DEBUG_FS
 	select RING_BUFFER
 	select STACKTRACE if STACKTRACE_SUPPORT
 	select TRACEPOINTS
diff --git a/kernel/trace/Makefile b/kernel/trace/Makefile
index c2b2148..bb10341 100644
--- a/kernel/trace/Makefile
+++ b/kernel/trace/Makefile
@@ -72,6 +72,7 @@
 obj-$(CONFIG_HIST_TRIGGERS) += trace_events_hist.o
 obj-$(CONFIG_BPF_EVENTS) += bpf_trace.o
 obj-$(CONFIG_KPROBE_EVENTS) += trace_kprobe.o
+obj-$(CONFIG_TRACEPOINTS) += error_report-traces.o
 obj-$(CONFIG_TRACEPOINTS) += power-traces.o
 ifeq ($(CONFIG_PM),y)
 obj-$(CONFIG_TRACEPOINTS) += rpm-traces.o
diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
index 74c1db7..a78ac76 100644
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -701,6 +701,8 @@ tracing_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
 		return &bpf_probe_read_proto;
 	case BPF_FUNC_ktime_get_ns:
 		return &bpf_ktime_get_ns_proto;
+	case BPF_FUNC_ktime_get_boot_ns:
+		return &bpf_ktime_get_boot_ns_proto;
 	case BPF_FUNC_tail_call:
 		return &bpf_tail_call_proto;
 	case BPF_FUNC_get_current_pid_tgid:
diff --git a/kernel/trace/error_report-traces.c b/kernel/trace/error_report-traces.c
new file mode 100644
index 0000000..632c8c7
--- /dev/null
+++ b/kernel/trace/error_report-traces.c
@@ -0,0 +1,12 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Error reporting trace points.
+ *
+ * Copyright (C) 2021, Google LLC.
+ */
+
+#define CREATE_TRACE_POINTS
+#include <trace/events/error_report.h>
+
+EXPORT_TRACEPOINT_SYMBOL_GPL(error_report_end);
+
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index cbb76ff..21d0974 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -5591,9 +5591,9 @@ static int ftrace_cmp_ips(const void *a, const void *b)
 	return 0;
 }
 
-static int ftrace_process_locs(struct module *mod,
-			       unsigned long *start,
-			       unsigned long *end)
+static int __norecordmcount ftrace_process_locs(struct module *mod,
+						unsigned long *start,
+						unsigned long *end)
 {
 	struct ftrace_page *start_pg;
 	struct ftrace_page *pg;
diff --git a/kernel/trace/power-traces.c b/kernel/trace/power-traces.c
index 21bb161..3ca551c 100644
--- a/kernel/trace/power-traces.c
+++ b/kernel/trace/power-traces.c
@@ -18,4 +18,6 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(suspend_resume);
 EXPORT_TRACEPOINT_SYMBOL_GPL(cpu_idle);
 EXPORT_TRACEPOINT_SYMBOL_GPL(cpu_frequency);
 EXPORT_TRACEPOINT_SYMBOL_GPL(powernv_throttle);
-
+EXPORT_TRACEPOINT_SYMBOL_GPL(device_pm_callback_start);
+EXPORT_TRACEPOINT_SYMBOL_GPL(device_pm_callback_end);
+EXPORT_TRACEPOINT_SYMBOL_GPL(clock_set_rate);
diff --git a/kernel/trace/trace_event_perf.c b/kernel/trace/trace_event_perf.c
index a9dfa04..643e0b1 100644
--- a/kernel/trace/trace_event_perf.c
+++ b/kernel/trace/trace_event_perf.c
@@ -8,6 +8,7 @@
 
 #include <linux/module.h>
 #include <linux/kprobes.h>
+#include <linux/security.h>
 #include "trace.h"
 #include "trace_probe.h"
 
@@ -26,8 +27,10 @@ static int	total_ref_count;
 static int perf_trace_event_perm(struct trace_event_call *tp_event,
 				 struct perf_event *p_event)
 {
+	int ret;
+
 	if (tp_event->perf_perm) {
-		int ret = tp_event->perf_perm(tp_event, p_event);
+		ret = tp_event->perf_perm(tp_event, p_event);
 		if (ret)
 			return ret;
 	}
@@ -46,8 +49,9 @@ static int perf_trace_event_perm(struct trace_event_call *tp_event,
 
 	/* The ftrace function trace is allowed only for root. */
 	if (ftrace_event_is_function(tp_event)) {
-		if (perf_paranoid_tracepoint_raw() && !capable(CAP_SYS_ADMIN))
-			return -EPERM;
+		ret = perf_allow_tracepoint(&p_event->attr);
+		if (ret)
+			return ret;
 
 		if (!is_sampling_event(p_event))
 			return 0;
@@ -82,8 +86,9 @@ static int perf_trace_event_perm(struct trace_event_call *tp_event,
 	 * ...otherwise raw tracepoint data can be a severe data leak,
 	 * only allow root to have these.
 	 */
-	if (perf_paranoid_tracepoint_raw() && !capable(CAP_SYS_ADMIN))
-		return -EPERM;
+	ret = perf_allow_tracepoint(&p_event->attr);
+	if (ret)
+		return ret;
 
 	return 0;
 }
diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index 29c36c0..6e132b5 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -53,6 +53,10 @@
 
 #include "workqueue_internal.h"
 
+#include <trace/hooks/wqlockup.h>
+/* events/workqueue.h uses default TRACE_INCLUDE_PATH */
+#undef TRACE_INCLUDE_PATH
+
 enum {
 	/*
 	 * worker_pool flags
@@ -1629,7 +1633,9 @@ static void __queue_delayed_work(int cpu, struct workqueue_struct *wq,
 	struct work_struct *work = &dwork->work;
 
 	WARN_ON_ONCE(!wq);
+#ifndef CONFIG_CFI_CLANG
 	WARN_ON_ONCE(timer->function != delayed_work_timer_fn);
+#endif
 	WARN_ON_ONCE(timer_pending(timer));
 	WARN_ON_ONCE(!list_empty(&work->entry));
 
@@ -5772,6 +5778,7 @@ static void wq_watchdog_timer_fn(struct timer_list *unused)
 			pr_cont_pool_info(pool);
 			pr_cont(" stuck for %us!\n",
 				jiffies_to_msecs(jiffies - pool_ts) / 1000);
+			trace_android_vh_wq_lockup_pool(pool->cpu, pool_ts);
 		}
 	}
 
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index ee00c6c..c2b6ad2 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -98,7 +98,8 @@
 	bool "Enable dynamic printk() support"
 	default n
 	depends on PRINTK
-	depends on DEBUG_FS
+	depends on (DEBUG_FS || PROC_FS)
+	select DYNAMIC_DEBUG_CORE
 	help
 
 	  Compiles debug level messages into the kernel, which would not
@@ -116,8 +117,9 @@
 	  Usage:
 
 	  Dynamic debugging is controlled via the 'dynamic_debug/control' file,
-	  which is contained in the 'debugfs' filesystem. Thus, the debugfs
-	  filesystem must first be mounted before making use of this feature.
+	  which is contained in the 'debugfs' filesystem or procfs.
+	  Thus, the debugfs or procfs filesystem must first be mounted before
+	  making use of this feature.
 	  We refer the control file as: <debugfs>/dynamic_debug/control. This
 	  file contains a list of the debug statements that can be enabled. The
 	  format for each line of the file is:
@@ -164,6 +166,17 @@
 	  See Documentation/admin-guide/dynamic-debug-howto.rst for additional
 	  information.
 
+config DYNAMIC_DEBUG_CORE
+	bool "Enable core function of dynamic debug support"
+	depends on PRINTK
+	depends on (DEBUG_FS || PROC_FS)
+	help
+	  Enable core functional support of dynamic debug. It is useful
+	  when you want to tie dynamic debug to your kernel modules with
+	  DYNAMIC_DEBUG_MODULE defined for each of them, especially for
+	  the case of embedded system where the kernel image size is
+	  sensitive for people.
+
 endmenu # "printk and dmesg options"
 
 menu "Compile-time checks and compiler options"
@@ -746,6 +759,7 @@
 	  If in doubt, say "N".
 
 source "lib/Kconfig.kasan"
+source "lib/Kconfig.kfence"
 
 endmenu # "Memory Debugging"
 
@@ -1655,6 +1669,8 @@
 
 	  See Documentation/debugging-via-ohci1394.txt for more information.
 
+source "lib/kunit/Kconfig"
+
 menuconfig RUNTIME_TESTING_MENU
 	bool "Runtime Testing"
 	def_bool y
@@ -1940,7 +1956,7 @@
 	  If unsure, say N.
 
 config SYSCTL_KUNIT_TEST
-	bool "KUnit test for sysctl"
+	tristate "KUnit test for sysctl"
 	depends on KUNIT
 	help
 	  This builds the proc sysctl unit test, which runs on boot.
@@ -1950,6 +1966,24 @@
 
 	  If unsure, say N.
 
+config LIST_KUNIT_TEST
+	tristate "KUnit Test for Kernel Linked-list structures"
+	depends on KUNIT
+	help
+	  This builds the linked list KUnit test suite.
+	  It tests that the API and basic functionality of the list_head type
+	  and associated macros.
+
+	  KUnit tests run during boot and output the results to the debug log
+	  in TAP format (http://testanything.org/). Only useful for kernel devs
+	  running the KUnit test harness, and not intended for inclusion into a
+	  production build.
+
+	  For more information on KUnit and unit tests in general please refer
+	  to the KUnit documentation in Documentation/dev-tools/kunit/.
+
+	  If unsure, say N.
+
 config TEST_UDELAY
 	tristate "udelay test driver"
 	help
diff --git a/lib/Kconfig.kfence b/lib/Kconfig.kfence
new file mode 100644
index 0000000..78f50cc
--- /dev/null
+++ b/lib/Kconfig.kfence
@@ -0,0 +1,82 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+config HAVE_ARCH_KFENCE
+	bool
+
+menuconfig KFENCE
+	bool "KFENCE: low-overhead sampling-based memory safety error detector"
+	depends on HAVE_ARCH_KFENCE && (SLAB || SLUB)
+	select STACKTRACE
+	help
+	  KFENCE is a low-overhead sampling-based detector of heap out-of-bounds
+	  access, use-after-free, and invalid-free errors. KFENCE is designed
+	  to have negligible cost to permit enabling it in production
+	  environments.
+
+	  See <file:Documentation/dev-tools/kfence.rst> for more details.
+
+	  Note that, KFENCE is not a substitute for explicit testing with tools
+	  such as KASAN. KFENCE can detect a subset of bugs that KASAN can
+	  detect, albeit at very different performance profiles. If you can
+	  afford to use KASAN, continue using KASAN, for example in test
+	  environments. If your kernel targets production use, and cannot
+	  enable KASAN due to its cost, consider using KFENCE.
+
+if KFENCE
+
+config KFENCE_STATIC_KEYS
+	bool "Use static keys to set up allocations"
+	default y
+	depends on JUMP_LABEL # To ensure performance, require jump labels
+	help
+	  Use static keys (static branches) to set up KFENCE allocations. Using
+	  static keys is normally recommended, because it avoids a dynamic
+	  branch in the allocator's fast path. However, with very low sample
+	  intervals, or on systems that do not support jump labels, a dynamic
+	  branch may still be an acceptable performance trade-off.
+
+config KFENCE_SAMPLE_INTERVAL
+	int "Default sample interval in milliseconds"
+	default 100
+	help
+	  The KFENCE sample interval determines the frequency with which heap
+	  allocations will be guarded by KFENCE. May be overridden via boot
+	  parameter "kfence.sample_interval".
+
+	  Set this to 0 to disable KFENCE by default, in which case only
+	  setting "kfence.sample_interval" to a non-zero value enables KFENCE.
+
+config KFENCE_NUM_OBJECTS
+	int "Number of guarded objects available"
+	range 1 65535
+	default 255
+	help
+	  The number of guarded objects available. For each KFENCE object, 2
+	  pages are required; with one containing the object and two adjacent
+	  ones used as guard pages.
+
+config KFENCE_STRESS_TEST_FAULTS
+	int "Stress testing of fault handling and error reporting" if EXPERT
+	default 0
+	help
+	  The inverse probability with which to randomly protect KFENCE object
+	  pages, resulting in spurious use-after-frees. The main purpose of
+	  this option is to stress test KFENCE with concurrent error reports
+	  and allocations/frees. A value of 0 disables stress testing logic.
+
+	  Only for KFENCE testing; set to 0 if you are not a KFENCE developer.
+
+config KFENCE_KUNIT_TEST
+	tristate "KFENCE integration test suite" if !KUNIT_ALL_TESTS
+	default KUNIT_ALL_TESTS
+	depends on TRACEPOINTS && KUNIT
+	help
+	  Test suite for KFENCE, testing various error detection scenarios with
+	  various allocation types, and checking that reports are correctly
+	  output to console.
+
+	  Say Y here if you want the test to be built into the kernel and run
+	  during boot; say M if you want the test to build as a module; say N
+	  if you are unsure.
+
+endif # KFENCE
diff --git a/lib/Makefile b/lib/Makefile
index c589280..bc1b4d3 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -26,8 +26,7 @@
 
 lib-y := ctype.o string.o vsprintf.o cmdline.o \
 	 rbtree.o radix-tree.o timerqueue.o xarray.o \
-	 idr.o extable.o \
-	 sha1.o chacha.o irq_regs.o argv_split.o \
+	 idr.o extable.o sha1.o irq_regs.o argv_split.o \
 	 flex_proportions.o ratelimit.o show_mem.o \
 	 is_single_threaded.o plist.o decompress.o kobject_uevent.o \
 	 earlycpio.o seq_buf.o siphash.o dec_and_lock.o \
@@ -86,12 +85,15 @@
 obj-$(CONFIG_TEST_DEBUG_VIRTUAL) += test_debug_virtual.o
 obj-$(CONFIG_TEST_MEMCAT_P) += test_memcat_p.o
 obj-$(CONFIG_TEST_OBJAGG) += test_objagg.o
+CFLAGS_test_stackinit.o += $(call cc-disable-warning, switch-unreachable)
 obj-$(CONFIG_TEST_STACKINIT) += test_stackinit.o
 obj-$(CONFIG_TEST_BLACKHOLE_DEV) += test_blackhole_dev.o
 obj-$(CONFIG_TEST_MEMINIT) += test_meminit.o
 
 obj-$(CONFIG_TEST_LIVEPATCH) += livepatch/
 
+obj-$(CONFIG_KUNIT) += kunit/
+
 ifeq ($(CONFIG_DEBUG_KOBJECT),y)
 CFLAGS_kobject.o += -DDEBUG
 CFLAGS_kobject_uevent.o += -DDEBUG
@@ -180,7 +182,7 @@
 
 obj-$(CONFIG_HAVE_ARCH_TRACEHOOK) += syscall.o
 
-obj-$(CONFIG_DYNAMIC_DEBUG) += dynamic_debug.o
+obj-$(CONFIG_DYNAMIC_DEBUG_CORE) += dynamic_debug.o
 
 obj-$(CONFIG_NLATTR) += nlattr.o
 
@@ -225,6 +227,8 @@
 	$(eval CFLAGS_$(file) = -I $(srctree)/scripts/dtc/libfdt))
 lib-$(CONFIG_LIBFDT) += $(libfdt_files)
 
+lib-$(CONFIG_BOOT_CONFIG) += bootconfig.o
+
 obj-$(CONFIG_RBTREE_TEST) += rbtree_test.o
 obj-$(CONFIG_INTERVAL_TREE_TEST) += interval_tree_test.o
 
@@ -290,3 +294,6 @@
 obj-$(CONFIG_GENERIC_LIB_CMPDI2) += cmpdi2.o
 obj-$(CONFIG_GENERIC_LIB_UCMPDI2) += ucmpdi2.o
 obj-$(CONFIG_OBJAGG) += objagg.o
+
+# KUnit tests
+obj-$(CONFIG_LIST_KUNIT_TEST) += list-test.o
diff --git a/lib/bootconfig.c b/lib/bootconfig.c
new file mode 100644
index 0000000..912ef49
--- /dev/null
+++ b/lib/bootconfig.c
@@ -0,0 +1,858 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Extra Boot Config
+ * Masami Hiramatsu <mhiramat@kernel.org>
+ */
+
+#define pr_fmt(fmt)    "bootconfig: " fmt
+
+#include <linux/bootconfig.h>
+#include <linux/bug.h>
+#include <linux/ctype.h>
+#include <linux/errno.h>
+#include <linux/kernel.h>
+#include <linux/memblock.h>
+#include <linux/printk.h>
+#include <linux/string.h>
+
+/*
+ * Extra Boot Config (XBC) is given as tree-structured ascii text of
+ * key-value pairs on memory.
+ * xbc_parse() parses the text to build a simple tree. Each tree node is
+ * simply a key word or a value. A key node may have a next key node or/and
+ * a child node (both key and value). A value node may have a next value
+ * node (for array).
+ */
+
+static struct xbc_node *xbc_nodes __initdata;
+static int xbc_node_num __initdata;
+static char *xbc_data __initdata;
+static size_t xbc_data_size __initdata;
+static struct xbc_node *last_parent __initdata;
+static const char *xbc_err_msg __initdata;
+static int xbc_err_pos __initdata;
+
+static int __init xbc_parse_error(const char *msg, const char *p)
+{
+	xbc_err_msg = msg;
+	xbc_err_pos = (int)(p - xbc_data);
+
+	return -EINVAL;
+}
+
+/**
+ * xbc_root_node() - Get the root node of extended boot config
+ *
+ * Return the address of root node of extended boot config. If the
+ * extended boot config is not initiized, return NULL.
+ */
+struct xbc_node * __init xbc_root_node(void)
+{
+	if (unlikely(!xbc_data))
+		return NULL;
+
+	return xbc_nodes;
+}
+
+/**
+ * xbc_node_index() - Get the index of XBC node
+ * @node: A target node of getting index.
+ *
+ * Return the index number of @node in XBC node list.
+ */
+int __init xbc_node_index(struct xbc_node *node)
+{
+	return node - &xbc_nodes[0];
+}
+
+/**
+ * xbc_node_get_parent() - Get the parent XBC node
+ * @node: An XBC node.
+ *
+ * Return the parent node of @node. If the node is top node of the tree,
+ * return NULL.
+ */
+struct xbc_node * __init xbc_node_get_parent(struct xbc_node *node)
+{
+	return node->parent == XBC_NODE_MAX ? NULL : &xbc_nodes[node->parent];
+}
+
+/**
+ * xbc_node_get_child() - Get the child XBC node
+ * @node: An XBC node.
+ *
+ * Return the first child node of @node. If the node has no child, return
+ * NULL.
+ */
+struct xbc_node * __init xbc_node_get_child(struct xbc_node *node)
+{
+	return node->child ? &xbc_nodes[node->child] : NULL;
+}
+
+/**
+ * xbc_node_get_next() - Get the next sibling XBC node
+ * @node: An XBC node.
+ *
+ * Return the NEXT sibling node of @node. If the node has no next sibling,
+ * return NULL. Note that even if this returns NULL, it doesn't mean @node
+ * has no siblings. (You also has to check whether the parent's child node
+ * is @node or not.)
+ */
+struct xbc_node * __init xbc_node_get_next(struct xbc_node *node)
+{
+	return node->next ? &xbc_nodes[node->next] : NULL;
+}
+
+/**
+ * xbc_node_get_data() - Get the data of XBC node
+ * @node: An XBC node.
+ *
+ * Return the data (which is always a null terminated string) of @node.
+ * If the node has invalid data, warn and return NULL.
+ */
+const char * __init xbc_node_get_data(struct xbc_node *node)
+{
+	int offset = node->data & ~XBC_VALUE;
+
+	if (WARN_ON(offset >= xbc_data_size))
+		return NULL;
+
+	return xbc_data + offset;
+}
+
+static bool __init
+xbc_node_match_prefix(struct xbc_node *node, const char **prefix)
+{
+	const char *p = xbc_node_get_data(node);
+	int len = strlen(p);
+
+	if (strncmp(*prefix, p, len))
+		return false;
+
+	p = *prefix + len;
+	if (*p == '.')
+		p++;
+	else if (*p != '\0')
+		return false;
+	*prefix = p;
+
+	return true;
+}
+
+/**
+ * xbc_node_find_child() - Find a child node which matches given key
+ * @parent: An XBC node.
+ * @key: A key string.
+ *
+ * Search a node under @parent which matches @key. The @key can contain
+ * several words jointed with '.'. If @parent is NULL, this searches the
+ * node from whole tree. Return NULL if no node is matched.
+ */
+struct xbc_node * __init
+xbc_node_find_child(struct xbc_node *parent, const char *key)
+{
+	struct xbc_node *node;
+
+	if (parent)
+		node = xbc_node_get_child(parent);
+	else
+		node = xbc_root_node();
+
+	while (node && xbc_node_is_key(node)) {
+		if (!xbc_node_match_prefix(node, &key))
+			node = xbc_node_get_next(node);
+		else if (*key != '\0')
+			node = xbc_node_get_child(node);
+		else
+			break;
+	}
+
+	return node;
+}
+
+/**
+ * xbc_node_find_value() - Find a value node which matches given key
+ * @parent: An XBC node.
+ * @key: A key string.
+ * @vnode: A container pointer of found XBC node.
+ *
+ * Search a value node under @parent whose (parent) key node matches @key,
+ * store it in *@vnode, and returns the value string.
+ * The @key can contain several words jointed with '.'. If @parent is NULL,
+ * this searches the node from whole tree. Return the value string if a
+ * matched key found, return NULL if no node is matched.
+ * Note that this returns 0-length string and stores NULL in *@vnode if the
+ * key has no value. And also it will return the value of the first entry if
+ * the value is an array.
+ */
+const char * __init
+xbc_node_find_value(struct xbc_node *parent, const char *key,
+		    struct xbc_node **vnode)
+{
+	struct xbc_node *node = xbc_node_find_child(parent, key);
+
+	if (!node || !xbc_node_is_key(node))
+		return NULL;
+
+	node = xbc_node_get_child(node);
+	if (node && !xbc_node_is_value(node))
+		return NULL;
+
+	if (vnode)
+		*vnode = node;
+
+	return node ? xbc_node_get_data(node) : "";
+}
+
+/**
+ * xbc_node_compose_key_after() - Compose partial key string of the XBC node
+ * @root: Root XBC node
+ * @node: Target XBC node.
+ * @buf: A buffer to store the key.
+ * @size: The size of the @buf.
+ *
+ * Compose the partial key of the @node into @buf, which is starting right
+ * after @root (@root is not included.) If @root is NULL, this returns full
+ * key words of @node.
+ * Returns the total length of the key stored in @buf. Returns -EINVAL
+ * if @node is NULL or @root is not the ancestor of @node or @root is @node,
+ * or returns -ERANGE if the key depth is deeper than max depth.
+ * This is expected to be used with xbc_find_node() to list up all (child)
+ * keys under given key.
+ */
+int __init xbc_node_compose_key_after(struct xbc_node *root,
+				      struct xbc_node *node,
+				      char *buf, size_t size)
+{
+	u16 keys[XBC_DEPTH_MAX];
+	int depth = 0, ret = 0, total = 0;
+
+	if (!node || node == root)
+		return -EINVAL;
+
+	if (xbc_node_is_value(node))
+		node = xbc_node_get_parent(node);
+
+	while (node && node != root) {
+		keys[depth++] = xbc_node_index(node);
+		if (depth == XBC_DEPTH_MAX)
+			return -ERANGE;
+		node = xbc_node_get_parent(node);
+	}
+	if (!node && root)
+		return -EINVAL;
+
+	while (--depth >= 0) {
+		node = xbc_nodes + keys[depth];
+		ret = snprintf(buf, size, "%s%s", xbc_node_get_data(node),
+			       depth ? "." : "");
+		if (ret < 0)
+			return ret;
+		if (ret > size) {
+			size = 0;
+		} else {
+			size -= ret;
+			buf += ret;
+		}
+		total += ret;
+	}
+
+	return total;
+}
+
+/**
+ * xbc_node_find_next_leaf() - Find the next leaf node under given node
+ * @root: An XBC root node
+ * @node: An XBC node which starts from.
+ *
+ * Search the next leaf node (which means the terminal key node) of @node
+ * under @root node (including @root node itself).
+ * Return the next node or NULL if next leaf node is not found.
+ */
+struct xbc_node * __init xbc_node_find_next_leaf(struct xbc_node *root,
+						 struct xbc_node *node)
+{
+	if (unlikely(!xbc_data))
+		return NULL;
+
+	if (!node) {	/* First try */
+		node = root;
+		if (!node)
+			node = xbc_nodes;
+	} else {
+		if (node == root)	/* @root was a leaf, no child node. */
+			return NULL;
+
+		while (!node->next) {
+			node = xbc_node_get_parent(node);
+			if (node == root)
+				return NULL;
+			/* User passed a node which is not uder parent */
+			if (WARN_ON(!node))
+				return NULL;
+		}
+		node = xbc_node_get_next(node);
+	}
+
+	while (node && !xbc_node_is_leaf(node))
+		node = xbc_node_get_child(node);
+
+	return node;
+}
+
+/**
+ * xbc_node_find_next_key_value() - Find the next key-value pair nodes
+ * @root: An XBC root node
+ * @leaf: A container pointer of XBC node which starts from.
+ *
+ * Search the next leaf node (which means the terminal key node) of *@leaf
+ * under @root node. Returns the value and update *@leaf if next leaf node
+ * is found, or NULL if no next leaf node is found.
+ * Note that this returns 0-length string if the key has no value, or
+ * the value of the first entry if the value is an array.
+ */
+const char * __init xbc_node_find_next_key_value(struct xbc_node *root,
+						 struct xbc_node **leaf)
+{
+	/* tip must be passed */
+	if (WARN_ON(!leaf))
+		return NULL;
+
+	*leaf = xbc_node_find_next_leaf(root, *leaf);
+	if (!*leaf)
+		return NULL;
+	if ((*leaf)->child)
+		return xbc_node_get_data(xbc_node_get_child(*leaf));
+	else
+		return "";	/* No value key */
+}
+
+/* XBC parse and tree build */
+
+static struct xbc_node * __init xbc_add_node(char *data, u32 flag)
+{
+	struct xbc_node *node;
+	unsigned long offset;
+
+	if (xbc_node_num == XBC_NODE_MAX)
+		return NULL;
+
+	node = &xbc_nodes[xbc_node_num++];
+	offset = data - xbc_data;
+	node->data = (u16)offset;
+	if (WARN_ON(offset >= XBC_DATA_MAX))
+		return NULL;
+	node->data |= flag;
+	node->child = 0;
+	node->next = 0;
+
+	return node;
+}
+
+static inline __init struct xbc_node *xbc_last_sibling(struct xbc_node *node)
+{
+	while (node->next)
+		node = xbc_node_get_next(node);
+
+	return node;
+}
+
+static struct xbc_node * __init xbc_add_sibling(char *data, u32 flag)
+{
+	struct xbc_node *sib, *node = xbc_add_node(data, flag);
+
+	if (node) {
+		if (!last_parent) {
+			node->parent = XBC_NODE_MAX;
+			sib = xbc_last_sibling(xbc_nodes);
+			sib->next = xbc_node_index(node);
+		} else {
+			node->parent = xbc_node_index(last_parent);
+			if (!last_parent->child) {
+				last_parent->child = xbc_node_index(node);
+			} else {
+				sib = xbc_node_get_child(last_parent);
+				sib = xbc_last_sibling(sib);
+				sib->next = xbc_node_index(node);
+			}
+		}
+	} else
+		xbc_parse_error("Too many nodes", data);
+
+	return node;
+}
+
+static inline __init struct xbc_node *xbc_add_child(char *data, u32 flag)
+{
+	struct xbc_node *node = xbc_add_sibling(data, flag);
+
+	if (node)
+		last_parent = node;
+
+	return node;
+}
+
+static inline __init bool xbc_valid_keyword(char *key)
+{
+	if (key[0] == '\0')
+		return false;
+
+	while (isalnum(*key) || *key == '-' || *key == '_')
+		key++;
+
+	return *key == '\0';
+}
+
+static char *skip_comment(char *p)
+{
+	char *ret;
+
+	ret = strchr(p, '\n');
+	if (!ret)
+		ret = p + strlen(p);
+	else
+		ret++;
+
+	return ret;
+}
+
+static char *skip_spaces_until_newline(char *p)
+{
+	while (isspace(*p) && *p != '\n')
+		p++;
+	return p;
+}
+
+static int __init __xbc_open_brace(void)
+{
+	/* Mark the last key as open brace */
+	last_parent->next = XBC_NODE_MAX;
+
+	return 0;
+}
+
+static int __init __xbc_close_brace(char *p)
+{
+	struct xbc_node *node;
+
+	if (!last_parent || last_parent->next != XBC_NODE_MAX)
+		return xbc_parse_error("Unexpected closing brace", p);
+
+	node = last_parent;
+	node->next = 0;
+	do {
+		node = xbc_node_get_parent(node);
+	} while (node && node->next != XBC_NODE_MAX);
+	last_parent = node;
+
+	return 0;
+}
+
+/*
+ * Return delimiter or error, no node added. As same as lib/cmdline.c,
+ * you can use " around spaces, but can't escape " for value.
+ */
+static int __init __xbc_parse_value(char **__v, char **__n)
+{
+	char *p, *v = *__v;
+	int c, quotes = 0;
+
+	v = skip_spaces(v);
+	while (*v == '#') {
+		v = skip_comment(v);
+		v = skip_spaces(v);
+	}
+	if (*v == '"' || *v == '\'') {
+		quotes = *v;
+		v++;
+	}
+	p = v - 1;
+	while ((c = *++p)) {
+		if (!isprint(c) && !isspace(c))
+			return xbc_parse_error("Non printable value", p);
+		if (quotes) {
+			if (c != quotes)
+				continue;
+			quotes = 0;
+			*p++ = '\0';
+			p = skip_spaces_until_newline(p);
+			c = *p;
+			if (c && !strchr(",;\n#}", c))
+				return xbc_parse_error("No value delimiter", p);
+			if (*p)
+				p++;
+			break;
+		}
+		if (strchr(",;\n#}", c)) {
+			v = strim(v);
+			*p++ = '\0';
+			break;
+		}
+	}
+	if (quotes)
+		return xbc_parse_error("No closing quotes", p);
+	if (c == '#') {
+		p = skip_comment(p);
+		c = '\n';	/* A comment must be treated as a newline */
+	}
+	*__n = p;
+	*__v = v;
+
+	return c;
+}
+
+static int __init xbc_parse_array(char **__v)
+{
+	struct xbc_node *node;
+	char *next;
+	int c = 0;
+
+	do {
+		c = __xbc_parse_value(__v, &next);
+		if (c < 0)
+			return c;
+
+		node = xbc_add_sibling(*__v, XBC_VALUE);
+		if (!node)
+			return -ENOMEM;
+		*__v = next;
+	} while (c == ',');
+	node->next = 0;
+
+	return c;
+}
+
+static inline __init
+struct xbc_node *find_match_node(struct xbc_node *node, char *k)
+{
+	while (node) {
+		if (!strcmp(xbc_node_get_data(node), k))
+			break;
+		node = xbc_node_get_next(node);
+	}
+	return node;
+}
+
+static int __init __xbc_add_key(char *k)
+{
+	struct xbc_node *node, *child;
+
+	if (!xbc_valid_keyword(k))
+		return xbc_parse_error("Invalid keyword", k);
+
+	if (unlikely(xbc_node_num == 0))
+		goto add_node;
+
+	if (!last_parent)	/* the first level */
+		node = find_match_node(xbc_nodes, k);
+	else {
+		child = xbc_node_get_child(last_parent);
+		if (child && xbc_node_is_value(child))
+			return xbc_parse_error("Subkey is mixed with value", k);
+		node = find_match_node(child, k);
+	}
+
+	if (node)
+		last_parent = node;
+	else {
+add_node:
+		node = xbc_add_child(k, XBC_KEY);
+		if (!node)
+			return -ENOMEM;
+	}
+	return 0;
+}
+
+static int __init __xbc_parse_keys(char *k)
+{
+	char *p;
+	int ret;
+
+	k = strim(k);
+	while ((p = strchr(k, '.'))) {
+		*p++ = '\0';
+		ret = __xbc_add_key(k);
+		if (ret)
+			return ret;
+		k = p;
+	}
+
+	return __xbc_add_key(k);
+}
+
+static int __init xbc_parse_kv(char **k, char *v, int op)
+{
+	struct xbc_node *prev_parent = last_parent;
+	struct xbc_node *child;
+	char *next;
+	int c, ret;
+
+	ret = __xbc_parse_keys(*k);
+	if (ret)
+		return ret;
+
+	child = xbc_node_get_child(last_parent);
+	if (child) {
+		if (xbc_node_is_key(child))
+			return xbc_parse_error("Value is mixed with subkey", v);
+		else if (op == '=')
+			return xbc_parse_error("Value is redefined", v);
+	}
+
+	c = __xbc_parse_value(&v, &next);
+	if (c < 0)
+		return c;
+
+	if (!xbc_add_sibling(v, XBC_VALUE))
+		return -ENOMEM;
+
+	if (c == ',') {	/* Array */
+		c = xbc_parse_array(&next);
+		if (c < 0)
+			return c;
+	}
+
+	last_parent = prev_parent;
+
+	if (c == '}') {
+		ret = __xbc_close_brace(next - 1);
+		if (ret < 0)
+			return ret;
+	}
+
+	*k = next;
+
+	return 0;
+}
+
+static int __init xbc_parse_key(char **k, char *n)
+{
+	struct xbc_node *prev_parent = last_parent;
+	int ret;
+
+	*k = strim(*k);
+	if (**k != '\0') {
+		ret = __xbc_parse_keys(*k);
+		if (ret)
+			return ret;
+		last_parent = prev_parent;
+	}
+	*k = n;
+
+	return 0;
+}
+
+static int __init xbc_open_brace(char **k, char *n)
+{
+	int ret;
+
+	ret = __xbc_parse_keys(*k);
+	if (ret)
+		return ret;
+	*k = n;
+
+	return __xbc_open_brace();
+}
+
+static int __init xbc_close_brace(char **k, char *n)
+{
+	int ret;
+
+	ret = xbc_parse_key(k, n);
+	if (ret)
+		return ret;
+	/* k is updated in xbc_parse_key() */
+
+	return __xbc_close_brace(n - 1);
+}
+
+static int __init xbc_verify_tree(void)
+{
+	int i, depth, len, wlen;
+	struct xbc_node *n, *m;
+
+	/* Empty tree */
+	if (xbc_node_num == 0) {
+		xbc_parse_error("Empty config", xbc_data);
+		return -ENOENT;
+	}
+
+	for (i = 0; i < xbc_node_num; i++) {
+		if (xbc_nodes[i].next > xbc_node_num) {
+			return xbc_parse_error("No closing brace",
+				xbc_node_get_data(xbc_nodes + i));
+		}
+	}
+
+	/* Key tree limitation check */
+	n = &xbc_nodes[0];
+	depth = 1;
+	len = 0;
+
+	while (n) {
+		wlen = strlen(xbc_node_get_data(n)) + 1;
+		len += wlen;
+		if (len > XBC_KEYLEN_MAX)
+			return xbc_parse_error("Too long key length",
+				xbc_node_get_data(n));
+
+		m = xbc_node_get_child(n);
+		if (m && xbc_node_is_key(m)) {
+			n = m;
+			depth++;
+			if (depth > XBC_DEPTH_MAX)
+				return xbc_parse_error("Too many key words",
+						xbc_node_get_data(n));
+			continue;
+		}
+		len -= wlen;
+		m = xbc_node_get_next(n);
+		while (!m) {
+			n = xbc_node_get_parent(n);
+			if (!n)
+				break;
+			len -= strlen(xbc_node_get_data(n)) + 1;
+			depth--;
+			m = xbc_node_get_next(n);
+		}
+		n = m;
+	}
+
+	return 0;
+}
+
+/**
+ * xbc_destroy_all() - Clean up all parsed bootconfig
+ *
+ * This clears all data structures of parsed bootconfig on memory.
+ * If you need to reuse xbc_init() with new boot config, you can
+ * use this.
+ */
+void __init xbc_destroy_all(void)
+{
+	xbc_data = NULL;
+	xbc_data_size = 0;
+	xbc_node_num = 0;
+	memblock_free(__pa(xbc_nodes), sizeof(struct xbc_node) * XBC_NODE_MAX);
+	xbc_nodes = NULL;
+}
+
+/**
+ * xbc_init() - Parse given XBC file and build XBC internal tree
+ * @buf: boot config text
+ * @emsg: A pointer of const char * to store the error message
+ * @epos: A pointer of int to store the error position
+ *
+ * This parses the boot config text in @buf. @buf must be a
+ * null terminated string and smaller than XBC_DATA_MAX.
+ * Return the number of stored nodes (>0) if succeeded, or -errno
+ * if there is any error.
+ * In error cases, @emsg will be updated with an error message and
+ * @epos will be updated with the error position which is the byte offset
+ * of @buf. If the error is not a parser error, @epos will be -1.
+ */
+int __init xbc_init(char *buf, const char **emsg, int *epos)
+{
+	char *p, *q;
+	int ret, c;
+
+	if (epos)
+		*epos = -1;
+
+	if (xbc_data) {
+		if (emsg)
+			*emsg = "Bootconfig is already initialized";
+		return -EBUSY;
+	}
+
+	ret = strlen(buf);
+	if (ret > XBC_DATA_MAX - 1 || ret == 0) {
+		if (emsg)
+			*emsg = ret ? "Config data is too big" :
+				"Config data is empty";
+		return -ERANGE;
+	}
+
+	xbc_nodes = memblock_alloc(sizeof(struct xbc_node) * XBC_NODE_MAX,
+				   SMP_CACHE_BYTES);
+	if (!xbc_nodes) {
+		if (emsg)
+			*emsg = "Failed to allocate bootconfig nodes";
+		return -ENOMEM;
+	}
+	memset(xbc_nodes, 0, sizeof(struct xbc_node) * XBC_NODE_MAX);
+	xbc_data = buf;
+	xbc_data_size = ret + 1;
+	last_parent = NULL;
+
+	p = buf;
+	do {
+		q = strpbrk(p, "{}=+;\n#");
+		if (!q) {
+			p = skip_spaces(p);
+			if (*p != '\0')
+				ret = xbc_parse_error("No delimiter", p);
+			break;
+		}
+
+		c = *q;
+		*q++ = '\0';
+		switch (c) {
+		case '+':
+			if (*q++ != '=') {
+				ret = xbc_parse_error("Wrong '+' operator",
+							q - 2);
+				break;
+			}
+			/* Fall through */
+		case '=':
+			ret = xbc_parse_kv(&p, q, c);
+			break;
+		case '{':
+			ret = xbc_open_brace(&p, q);
+			break;
+		case '#':
+			q = skip_comment(q);
+			/* fall through */
+		case ';':
+		case '\n':
+			ret = xbc_parse_key(&p, q);
+			break;
+		case '}':
+			ret = xbc_close_brace(&p, q);
+			break;
+		}
+	} while (!ret);
+
+	if (!ret)
+		ret = xbc_verify_tree();
+
+	if (ret < 0) {
+		if (epos)
+			*epos = xbc_err_pos;
+		if (emsg)
+			*emsg = xbc_err_msg;
+		xbc_destroy_all();
+	} else
+		ret = xbc_node_num;
+
+	return ret;
+}
+
+/**
+ * xbc_debug_dump() - Dump current XBC node list
+ *
+ * Dump the current XBC node list on printk buffer for debug.
+ */
+void __init xbc_debug_dump(void)
+{
+	int i;
+
+	for (i = 0; i < xbc_node_num; i++) {
+		pr_debug("[%d] %s (%s) .next=%d, .child=%d .parent=%d\n", i,
+			xbc_node_get_data(xbc_nodes + i),
+			xbc_node_is_value(xbc_nodes + i) ? "value" : "key",
+			xbc_nodes[i].next, xbc_nodes[i].child,
+			xbc_nodes[i].parent);
+	}
+}
diff --git a/lib/chacha.c b/lib/chacha.c
deleted file mode 100644
index c7c9826..0000000
--- a/lib/chacha.c
+++ /dev/null
@@ -1,113 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-/*
- * The "hash function" used as the core of the ChaCha stream cipher (RFC7539)
- *
- * Copyright (C) 2015 Martin Willi
- */
-
-#include <linux/kernel.h>
-#include <linux/export.h>
-#include <linux/bitops.h>
-#include <linux/cryptohash.h>
-#include <asm/unaligned.h>
-#include <crypto/chacha.h>
-
-static void chacha_permute(u32 *x, int nrounds)
-{
-	int i;
-
-	/* whitelist the allowed round counts */
-	WARN_ON_ONCE(nrounds != 20 && nrounds != 12);
-
-	for (i = 0; i < nrounds; i += 2) {
-		x[0]  += x[4];    x[12] = rol32(x[12] ^ x[0],  16);
-		x[1]  += x[5];    x[13] = rol32(x[13] ^ x[1],  16);
-		x[2]  += x[6];    x[14] = rol32(x[14] ^ x[2],  16);
-		x[3]  += x[7];    x[15] = rol32(x[15] ^ x[3],  16);
-
-		x[8]  += x[12];   x[4]  = rol32(x[4]  ^ x[8],  12);
-		x[9]  += x[13];   x[5]  = rol32(x[5]  ^ x[9],  12);
-		x[10] += x[14];   x[6]  = rol32(x[6]  ^ x[10], 12);
-		x[11] += x[15];   x[7]  = rol32(x[7]  ^ x[11], 12);
-
-		x[0]  += x[4];    x[12] = rol32(x[12] ^ x[0],   8);
-		x[1]  += x[5];    x[13] = rol32(x[13] ^ x[1],   8);
-		x[2]  += x[6];    x[14] = rol32(x[14] ^ x[2],   8);
-		x[3]  += x[7];    x[15] = rol32(x[15] ^ x[3],   8);
-
-		x[8]  += x[12];   x[4]  = rol32(x[4]  ^ x[8],   7);
-		x[9]  += x[13];   x[5]  = rol32(x[5]  ^ x[9],   7);
-		x[10] += x[14];   x[6]  = rol32(x[6]  ^ x[10],  7);
-		x[11] += x[15];   x[7]  = rol32(x[7]  ^ x[11],  7);
-
-		x[0]  += x[5];    x[15] = rol32(x[15] ^ x[0],  16);
-		x[1]  += x[6];    x[12] = rol32(x[12] ^ x[1],  16);
-		x[2]  += x[7];    x[13] = rol32(x[13] ^ x[2],  16);
-		x[3]  += x[4];    x[14] = rol32(x[14] ^ x[3],  16);
-
-		x[10] += x[15];   x[5]  = rol32(x[5]  ^ x[10], 12);
-		x[11] += x[12];   x[6]  = rol32(x[6]  ^ x[11], 12);
-		x[8]  += x[13];   x[7]  = rol32(x[7]  ^ x[8],  12);
-		x[9]  += x[14];   x[4]  = rol32(x[4]  ^ x[9],  12);
-
-		x[0]  += x[5];    x[15] = rol32(x[15] ^ x[0],   8);
-		x[1]  += x[6];    x[12] = rol32(x[12] ^ x[1],   8);
-		x[2]  += x[7];    x[13] = rol32(x[13] ^ x[2],   8);
-		x[3]  += x[4];    x[14] = rol32(x[14] ^ x[3],   8);
-
-		x[10] += x[15];   x[5]  = rol32(x[5]  ^ x[10],  7);
-		x[11] += x[12];   x[6]  = rol32(x[6]  ^ x[11],  7);
-		x[8]  += x[13];   x[7]  = rol32(x[7]  ^ x[8],   7);
-		x[9]  += x[14];   x[4]  = rol32(x[4]  ^ x[9],   7);
-	}
-}
-
-/**
- * chacha_block - generate one keystream block and increment block counter
- * @state: input state matrix (16 32-bit words)
- * @stream: output keystream block (64 bytes)
- * @nrounds: number of rounds (20 or 12; 20 is recommended)
- *
- * This is the ChaCha core, a function from 64-byte strings to 64-byte strings.
- * The caller has already converted the endianness of the input.  This function
- * also handles incrementing the block counter in the input matrix.
- */
-void chacha_block(u32 *state, u8 *stream, int nrounds)
-{
-	u32 x[16];
-	int i;
-
-	memcpy(x, state, 64);
-
-	chacha_permute(x, nrounds);
-
-	for (i = 0; i < ARRAY_SIZE(x); i++)
-		put_unaligned_le32(x[i] + state[i], &stream[i * sizeof(u32)]);
-
-	state[12]++;
-}
-EXPORT_SYMBOL(chacha_block);
-
-/**
- * hchacha_block - abbreviated ChaCha core, for XChaCha
- * @in: input state matrix (16 32-bit words)
- * @out: output (8 32-bit words)
- * @nrounds: number of rounds (20 or 12; 20 is recommended)
- *
- * HChaCha is the ChaCha equivalent of HSalsa and is an intermediate step
- * towards XChaCha (see https://cr.yp.to/snuffle/xsalsa-20081128.pdf).  HChaCha
- * skips the final addition of the initial state, and outputs only certain words
- * of the state.  It should not be used for streaming directly.
- */
-void hchacha_block(const u32 *in, u32 *out, int nrounds)
-{
-	u32 x[16];
-
-	memcpy(x, in, 64);
-
-	chacha_permute(x, nrounds);
-
-	memcpy(&out[0], &x[0], 16);
-	memcpy(&out[4], &x[12], 16);
-}
-EXPORT_SYMBOL(hchacha_block);
diff --git a/lib/crypto/Kconfig b/lib/crypto/Kconfig
new file mode 100644
index 0000000..14c032d
--- /dev/null
+++ b/lib/crypto/Kconfig
@@ -0,0 +1,130 @@
+# SPDX-License-Identifier: GPL-2.0
+
+comment "Crypto library routines"
+
+config CRYPTO_LIB_AES
+	tristate
+
+config CRYPTO_LIB_ARC4
+	tristate
+
+config CRYPTO_ARCH_HAVE_LIB_BLAKE2S
+	tristate
+	help
+	  Declares whether the architecture provides an arch-specific
+	  accelerated implementation of the Blake2s library interface,
+	  either builtin or as a module.
+
+config CRYPTO_LIB_BLAKE2S_GENERIC
+	tristate
+	help
+	  This symbol can be depended upon by arch implementations of the
+	  Blake2s library interface that require the generic code as a
+	  fallback, e.g., for SIMD implementations. If no arch specific
+	  implementation is enabled, this implementation serves the users
+	  of CRYPTO_LIB_BLAKE2S.
+
+config CRYPTO_LIB_BLAKE2S
+	tristate "BLAKE2s hash function library"
+	depends on CRYPTO_ARCH_HAVE_LIB_BLAKE2S || !CRYPTO_ARCH_HAVE_LIB_BLAKE2S
+	select CRYPTO_LIB_BLAKE2S_GENERIC if CRYPTO_ARCH_HAVE_LIB_BLAKE2S=n
+	help
+	  Enable the Blake2s library interface. This interface may be fulfilled
+	  by either the generic implementation or an arch-specific one, if one
+	  is available and enabled.
+
+config CRYPTO_ARCH_HAVE_LIB_CHACHA
+	tristate
+	help
+	  Declares whether the architecture provides an arch-specific
+	  accelerated implementation of the ChaCha library interface,
+	  either builtin or as a module.
+
+config CRYPTO_LIB_CHACHA_GENERIC
+	tristate
+	select CRYPTO_ALGAPI
+	help
+	  This symbol can be depended upon by arch implementations of the
+	  ChaCha library interface that require the generic code as a
+	  fallback, e.g., for SIMD implementations. If no arch specific
+	  implementation is enabled, this implementation serves the users
+	  of CRYPTO_LIB_CHACHA.
+
+config CRYPTO_LIB_CHACHA
+	tristate "ChaCha library interface"
+	depends on CRYPTO_ARCH_HAVE_LIB_CHACHA || !CRYPTO_ARCH_HAVE_LIB_CHACHA
+	select CRYPTO_LIB_CHACHA_GENERIC if CRYPTO_ARCH_HAVE_LIB_CHACHA=n
+	help
+	  Enable the ChaCha library interface. This interface may be fulfilled
+	  by either the generic implementation or an arch-specific one, if one
+	  is available and enabled.
+
+config CRYPTO_ARCH_HAVE_LIB_CURVE25519
+	tristate
+	help
+	  Declares whether the architecture provides an arch-specific
+	  accelerated implementation of the Curve25519 library interface,
+	  either builtin or as a module.
+
+config CRYPTO_LIB_CURVE25519_GENERIC
+	tristate
+	help
+	  This symbol can be depended upon by arch implementations of the
+	  Curve25519 library interface that require the generic code as a
+	  fallback, e.g., for SIMD implementations. If no arch specific
+	  implementation is enabled, this implementation serves the users
+	  of CRYPTO_LIB_CURVE25519.
+
+config CRYPTO_LIB_CURVE25519
+	tristate "Curve25519 scalar multiplication library"
+	depends on CRYPTO_ARCH_HAVE_LIB_CURVE25519 || !CRYPTO_ARCH_HAVE_LIB_CURVE25519
+	select CRYPTO_LIB_CURVE25519_GENERIC if CRYPTO_ARCH_HAVE_LIB_CURVE25519=n
+	help
+	  Enable the Curve25519 library interface. This interface may be
+	  fulfilled by either the generic implementation or an arch-specific
+	  one, if one is available and enabled.
+
+config CRYPTO_LIB_DES
+	tristate
+
+config CRYPTO_LIB_POLY1305_RSIZE
+	int
+	default 2 if MIPS
+	default 11 if X86_64
+	default 9 if ARM || ARM64
+	default 1
+
+config CRYPTO_ARCH_HAVE_LIB_POLY1305
+	tristate
+	help
+	  Declares whether the architecture provides an arch-specific
+	  accelerated implementation of the Poly1305 library interface,
+	  either builtin or as a module.
+
+config CRYPTO_LIB_POLY1305_GENERIC
+	tristate
+	help
+	  This symbol can be depended upon by arch implementations of the
+	  Poly1305 library interface that require the generic code as a
+	  fallback, e.g., for SIMD implementations. If no arch specific
+	  implementation is enabled, this implementation serves the users
+	  of CRYPTO_LIB_POLY1305.
+
+config CRYPTO_LIB_POLY1305
+	tristate "Poly1305 library interface"
+	depends on CRYPTO_ARCH_HAVE_LIB_POLY1305 || !CRYPTO_ARCH_HAVE_LIB_POLY1305
+	select CRYPTO_LIB_POLY1305_GENERIC if CRYPTO_ARCH_HAVE_LIB_POLY1305=n
+	help
+	  Enable the Poly1305 library interface. This interface may be fulfilled
+	  by either the generic implementation or an arch-specific one, if one
+	  is available and enabled.
+
+config CRYPTO_LIB_CHACHA20POLY1305
+	tristate "ChaCha20-Poly1305 AEAD support (8-byte nonce library version)"
+	depends on CRYPTO_ARCH_HAVE_LIB_CHACHA || !CRYPTO_ARCH_HAVE_LIB_CHACHA
+	depends on CRYPTO_ARCH_HAVE_LIB_POLY1305 || !CRYPTO_ARCH_HAVE_LIB_POLY1305
+	select CRYPTO_LIB_CHACHA
+	select CRYPTO_LIB_POLY1305
+
+config CRYPTO_LIB_SHA256
+	tristate
diff --git a/lib/crypto/Makefile b/lib/crypto/Makefile
index cbe0b6a..3a43562 100644
--- a/lib/crypto/Makefile
+++ b/lib/crypto/Makefile
@@ -1,13 +1,45 @@
 # SPDX-License-Identifier: GPL-2.0
 
-obj-$(CONFIG_CRYPTO_LIB_AES) += libaes.o
-libaes-y := aes.o
+# chacha is used by the /dev/random driver which is always builtin
+obj-y						+= chacha.o
+obj-$(CONFIG_CRYPTO_LIB_CHACHA_GENERIC)		+= libchacha.o
 
-obj-$(CONFIG_CRYPTO_LIB_ARC4) += libarc4.o
-libarc4-y := arc4.o
+obj-$(CONFIG_CRYPTO_LIB_AES)			+= libaes.o
+libaes-y					:= aes.o
 
-obj-$(CONFIG_CRYPTO_LIB_DES) += libdes.o
-libdes-y := des.o
+obj-$(CONFIG_CRYPTO_LIB_ARC4)			+= libarc4.o
+libarc4-y					:= arc4.o
 
-obj-$(CONFIG_CRYPTO_LIB_SHA256) += libsha256.o
-libsha256-y := sha256.o
+obj-$(CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC)	+= libblake2s-generic.o
+libblake2s-generic-y				+= blake2s-generic.o
+
+obj-$(CONFIG_CRYPTO_LIB_BLAKE2S)		+= libblake2s.o
+libblake2s-y					+= blake2s.o
+
+obj-$(CONFIG_CRYPTO_LIB_CHACHA20POLY1305)	+= libchacha20poly1305.o
+libchacha20poly1305-y				+= chacha20poly1305.o
+
+obj-$(CONFIG_CRYPTO_LIB_CURVE25519_GENERIC)	+= libcurve25519-generic.o
+libcurve25519-generic-y				:= curve25519-fiat32.o
+libcurve25519-generic-$(CONFIG_ARCH_SUPPORTS_INT128)	:= curve25519-hacl64.o
+libcurve25519-generic-y				+= curve25519-generic.o
+
+obj-$(CONFIG_CRYPTO_LIB_CURVE25519)		+= libcurve25519.o
+libcurve25519-y					+= curve25519.o
+
+obj-$(CONFIG_CRYPTO_LIB_DES)			+= libdes.o
+libdes-y					:= des.o
+
+obj-$(CONFIG_CRYPTO_LIB_POLY1305_GENERIC)	+= libpoly1305.o
+libpoly1305-y					:= poly1305-donna32.o
+libpoly1305-$(CONFIG_ARCH_SUPPORTS_INT128)	:= poly1305-donna64.o
+libpoly1305-y					+= poly1305.o
+
+obj-$(CONFIG_CRYPTO_LIB_SHA256)			+= libsha256.o
+libsha256-y					:= sha256.o
+
+ifneq ($(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS),y)
+libblake2s-y					+= blake2s-selftest.o
+libchacha20poly1305-y				+= chacha20poly1305-selftest.o
+libcurve25519-y					+= curve25519-selftest.o
+endif
diff --git a/lib/crypto/blake2s-generic.c b/lib/crypto/blake2s-generic.c
new file mode 100644
index 0000000..04ff8df
--- /dev/null
+++ b/lib/crypto/blake2s-generic.c
@@ -0,0 +1,111 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This is an implementation of the BLAKE2s hash and PRF functions.
+ *
+ * Information: https://blake2.net/
+ *
+ */
+
+#include <crypto/internal/blake2s.h>
+#include <linux/types.h>
+#include <linux/string.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/bug.h>
+#include <asm/unaligned.h>
+
+static const u8 blake2s_sigma[10][16] = {
+	{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
+	{ 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 },
+	{ 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 },
+	{ 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 },
+	{ 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 },
+	{ 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 },
+	{ 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 },
+	{ 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 },
+	{ 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 },
+	{ 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0 },
+};
+
+static inline void blake2s_increment_counter(struct blake2s_state *state,
+					     const u32 inc)
+{
+	state->t[0] += inc;
+	state->t[1] += (state->t[0] < inc);
+}
+
+void blake2s_compress_generic(struct blake2s_state *state,const u8 *block,
+			      size_t nblocks, const u32 inc)
+{
+	u32 m[16];
+	u32 v[16];
+	int i;
+
+	WARN_ON(IS_ENABLED(DEBUG) &&
+		(nblocks > 1 && inc != BLAKE2S_BLOCK_SIZE));
+
+	while (nblocks > 0) {
+		blake2s_increment_counter(state, inc);
+		memcpy(m, block, BLAKE2S_BLOCK_SIZE);
+		le32_to_cpu_array(m, ARRAY_SIZE(m));
+		memcpy(v, state->h, 32);
+		v[ 8] = BLAKE2S_IV0;
+		v[ 9] = BLAKE2S_IV1;
+		v[10] = BLAKE2S_IV2;
+		v[11] = BLAKE2S_IV3;
+		v[12] = BLAKE2S_IV4 ^ state->t[0];
+		v[13] = BLAKE2S_IV5 ^ state->t[1];
+		v[14] = BLAKE2S_IV6 ^ state->f[0];
+		v[15] = BLAKE2S_IV7 ^ state->f[1];
+
+#define G(r, i, a, b, c, d) do { \
+	a += b + m[blake2s_sigma[r][2 * i + 0]]; \
+	d = ror32(d ^ a, 16); \
+	c += d; \
+	b = ror32(b ^ c, 12); \
+	a += b + m[blake2s_sigma[r][2 * i + 1]]; \
+	d = ror32(d ^ a, 8); \
+	c += d; \
+	b = ror32(b ^ c, 7); \
+} while (0)
+
+#define ROUND(r) do { \
+	G(r, 0, v[0], v[ 4], v[ 8], v[12]); \
+	G(r, 1, v[1], v[ 5], v[ 9], v[13]); \
+	G(r, 2, v[2], v[ 6], v[10], v[14]); \
+	G(r, 3, v[3], v[ 7], v[11], v[15]); \
+	G(r, 4, v[0], v[ 5], v[10], v[15]); \
+	G(r, 5, v[1], v[ 6], v[11], v[12]); \
+	G(r, 6, v[2], v[ 7], v[ 8], v[13]); \
+	G(r, 7, v[3], v[ 4], v[ 9], v[14]); \
+} while (0)
+		ROUND(0);
+		ROUND(1);
+		ROUND(2);
+		ROUND(3);
+		ROUND(4);
+		ROUND(5);
+		ROUND(6);
+		ROUND(7);
+		ROUND(8);
+		ROUND(9);
+
+#undef G
+#undef ROUND
+
+		for (i = 0; i < 8; ++i)
+			state->h[i] ^= v[i] ^ v[i + 8];
+
+		block += BLAKE2S_BLOCK_SIZE;
+		--nblocks;
+	}
+}
+
+EXPORT_SYMBOL(blake2s_compress_generic);
+
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("BLAKE2s hash function");
+MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
diff --git a/lib/crypto/blake2s-selftest.c b/lib/crypto/blake2s-selftest.c
new file mode 100644
index 0000000..5d9ea53
--- /dev/null
+++ b/lib/crypto/blake2s-selftest.c
@@ -0,0 +1,622 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include <crypto/internal/blake2s.h>
+#include <linux/string.h>
+
+/*
+ * blake2s_testvecs[] generated with the program below (using libb2-dev and
+ * libssl-dev [OpenSSL])
+ *
+ * #include <blake2.h>
+ * #include <stdint.h>
+ * #include <stdio.h>
+ *
+ * #include <openssl/evp.h>
+ * #include <openssl/hmac.h>
+ *
+ * #define BLAKE2S_TESTVEC_COUNT	256
+ *
+ * static void print_vec(const uint8_t vec[], int len)
+ * {
+ *	int i;
+ *
+ *	printf("  { ");
+ *	for (i = 0; i < len; i++) {
+ *		if (i && (i % 12) == 0)
+ *			printf("\n    ");
+ *		printf("0x%02x, ", vec[i]);
+ *	}
+ *	printf("},\n");
+ * }
+ *
+ * int main(void)
+ * {
+ *	uint8_t key[BLAKE2S_KEYBYTES];
+ *	uint8_t buf[BLAKE2S_TESTVEC_COUNT];
+ *	uint8_t hash[BLAKE2S_OUTBYTES];
+ *	int i, j;
+ *
+ *	key[0] = key[1] = 1;
+ *	for (i = 2; i < BLAKE2S_KEYBYTES; ++i)
+ *		key[i] = key[i - 2] + key[i - 1];
+ *
+ *	for (i = 0; i < BLAKE2S_TESTVEC_COUNT; ++i)
+ *		buf[i] = (uint8_t)i;
+ *
+ *	printf("static const u8 blake2s_testvecs[][BLAKE2S_HASH_SIZE] __initconst = {\n");
+ *
+ *	for (i = 0; i < BLAKE2S_TESTVEC_COUNT; ++i) {
+ *		int outlen = 1 + i % BLAKE2S_OUTBYTES;
+ *		int keylen = (13 * i) % (BLAKE2S_KEYBYTES + 1);
+ *
+ *		blake2s(hash, buf, key + BLAKE2S_KEYBYTES - keylen, outlen, i,
+ *			keylen);
+ *		print_vec(hash, outlen);
+ *	}
+ *	printf("};\n\n");
+ *
+ *	printf("static const u8 blake2s_hmac_testvecs[][BLAKE2S_HASH_SIZE] __initconst = {\n");
+ *
+ *	HMAC(EVP_blake2s256(), key, sizeof(key), buf, sizeof(buf), hash, NULL);
+ *	print_vec(hash, BLAKE2S_OUTBYTES);
+ *
+ *	HMAC(EVP_blake2s256(), buf, sizeof(buf), key, sizeof(key), hash, NULL);
+ *	print_vec(hash, BLAKE2S_OUTBYTES);
+ *
+ *	printf("};\n");
+ *
+ *	return 0;
+ *}
+ */
+static const u8 blake2s_testvecs[][BLAKE2S_HASH_SIZE] __initconst = {
+  { 0xa1, },
+  { 0x7c, 0x89, },
+  { 0x74, 0x0e, 0xd4, },
+  { 0x47, 0x0c, 0x21, 0x15, },
+  { 0x18, 0xd6, 0x9c, 0xa6, 0xc4, },
+  { 0x13, 0x5d, 0x16, 0x63, 0x2e, 0xf9, },
+  { 0x2c, 0xb5, 0x04, 0xb7, 0x99, 0xe2, 0x73, },
+  { 0x9a, 0x0f, 0xd2, 0x39, 0xd6, 0x68, 0x1b, 0x92, },
+  { 0xc8, 0xde, 0x7a, 0xea, 0x2f, 0xf4, 0xd2, 0xe3, 0x2b, },
+  { 0x5b, 0xf9, 0x43, 0x52, 0x0c, 0x12, 0xba, 0xb5, 0x93, 0x9f, },
+  { 0xc6, 0x2c, 0x4e, 0x80, 0xfc, 0x32, 0x5b, 0x33, 0xb8, 0xb8, 0x0a, },
+  { 0xa7, 0x5c, 0xfd, 0x3a, 0xcc, 0xbf, 0x90, 0xca, 0xb7, 0x97, 0xde, 0xd8, },
+  { 0x66, 0xca, 0x3c, 0xc4, 0x19, 0xef, 0x92, 0x66, 0x3f, 0x21, 0x8f, 0xda,
+    0xb7, },
+  { 0xba, 0xe5, 0xbb, 0x30, 0x25, 0x94, 0x6d, 0xc3, 0x89, 0x09, 0xc4, 0x25,
+    0x52, 0x3e, },
+  { 0xa2, 0xef, 0x0e, 0x52, 0x0b, 0x5f, 0xa2, 0x01, 0x6d, 0x0a, 0x25, 0xbc,
+    0x57, 0xe2, 0x27, },
+  { 0x4f, 0xe0, 0xf9, 0x52, 0x12, 0xda, 0x84, 0xb7, 0xab, 0xae, 0xb0, 0xa6,
+    0x47, 0x2a, 0xc7, 0xf5, },
+  { 0x56, 0xe7, 0xa8, 0x1c, 0x4c, 0xca, 0xed, 0x90, 0x31, 0xec, 0x87, 0x43,
+    0xe7, 0x72, 0x08, 0xec, 0xbe, },
+  { 0x7e, 0xdf, 0x80, 0x1c, 0x93, 0x33, 0xfd, 0x53, 0x44, 0xba, 0xfd, 0x96,
+    0xe1, 0xbb, 0xb5, 0x65, 0xa5, 0x00, },
+  { 0xec, 0x6b, 0xed, 0xf7, 0x7b, 0x62, 0x1d, 0x7d, 0xf4, 0x82, 0xf3, 0x1e,
+    0x18, 0xff, 0x2b, 0xc4, 0x06, 0x20, 0x2a, },
+  { 0x74, 0x98, 0xd7, 0x68, 0x63, 0xed, 0x87, 0xe4, 0x5d, 0x8d, 0x9e, 0x1d,
+    0xfd, 0x2a, 0xbb, 0x86, 0xac, 0xe9, 0x2a, 0x89, },
+  { 0x89, 0xc3, 0x88, 0xce, 0x2b, 0x33, 0x1e, 0x10, 0xd1, 0x37, 0x20, 0x86,
+    0x28, 0x43, 0x70, 0xd9, 0xfb, 0x96, 0xd9, 0xb5, 0xd3, },
+  { 0xcb, 0x56, 0x74, 0x41, 0x8d, 0x80, 0x01, 0x9a, 0x6b, 0x38, 0xe1, 0x41,
+    0xad, 0x9c, 0x62, 0x74, 0xce, 0x35, 0xd5, 0x6c, 0x89, 0x6e, },
+  { 0x79, 0xaf, 0x94, 0x59, 0x99, 0x26, 0xe1, 0xc9, 0x34, 0xfe, 0x7c, 0x22,
+    0xf7, 0x43, 0xd7, 0x65, 0xd4, 0x48, 0x18, 0xac, 0x3d, 0xfd, 0x93, },
+  { 0x85, 0x0d, 0xff, 0xb8, 0x3e, 0x87, 0x41, 0xb0, 0x95, 0xd3, 0x3d, 0x00,
+    0x47, 0x55, 0x9e, 0xd2, 0x69, 0xea, 0xbf, 0xe9, 0x7a, 0x2d, 0x61, 0x45, },
+  { 0x03, 0xe0, 0x85, 0xec, 0x54, 0xb5, 0x16, 0x53, 0xa8, 0xc4, 0x71, 0xe9,
+    0x6a, 0xe7, 0xcb, 0xc4, 0x15, 0x02, 0xfc, 0x34, 0xa4, 0xa4, 0x28, 0x13,
+    0xd1, },
+  { 0xe3, 0x34, 0x4b, 0xe1, 0xd0, 0x4b, 0x55, 0x61, 0x8f, 0xc0, 0x24, 0x05,
+    0xe6, 0xe0, 0x3d, 0x70, 0x24, 0x4d, 0xda, 0xb8, 0x91, 0x05, 0x29, 0x07,
+    0x01, 0x3e, },
+  { 0x61, 0xff, 0x01, 0x72, 0xb1, 0x4d, 0xf6, 0xfe, 0xd1, 0xd1, 0x08, 0x74,
+    0xe6, 0x91, 0x44, 0xeb, 0x61, 0xda, 0x40, 0xaf, 0xfc, 0x8c, 0x91, 0x6b,
+    0xec, 0x13, 0xed, },
+  { 0xd4, 0x40, 0xd2, 0xa0, 0x7f, 0xc1, 0x58, 0x0c, 0x85, 0xa0, 0x86, 0xc7,
+    0x86, 0xb9, 0x61, 0xc9, 0xea, 0x19, 0x86, 0x1f, 0xab, 0x07, 0xce, 0x37,
+    0x72, 0x67, 0x09, 0xfc, },
+  { 0x9e, 0xf8, 0x18, 0x67, 0x93, 0x10, 0x9b, 0x39, 0x75, 0xe8, 0x8b, 0x38,
+    0x82, 0x7d, 0xb8, 0xb7, 0xa5, 0xaf, 0xe6, 0x6a, 0x22, 0x5e, 0x1f, 0x9c,
+    0x95, 0x29, 0x19, 0xf2, 0x4b, },
+  { 0xc8, 0x62, 0x25, 0xf5, 0x98, 0xc9, 0xea, 0xe5, 0x29, 0x3a, 0xd3, 0x22,
+    0xeb, 0xeb, 0x07, 0x7c, 0x15, 0x07, 0xee, 0x15, 0x61, 0xbb, 0x05, 0x30,
+    0x99, 0x7f, 0x11, 0xf6, 0x0a, 0x1d, },
+  { 0x68, 0x70, 0xf7, 0x90, 0xa1, 0x8b, 0x1f, 0x0f, 0xbb, 0xce, 0xd2, 0x0e,
+    0x33, 0x1f, 0x7f, 0xa9, 0x78, 0xa8, 0xa6, 0x81, 0x66, 0xab, 0x8d, 0xcd,
+    0x58, 0x55, 0x3a, 0x0b, 0x7a, 0xdb, 0xb5, },
+  { 0xdd, 0x35, 0xd2, 0xb4, 0xf6, 0xc7, 0xea, 0xab, 0x64, 0x24, 0x4e, 0xfe,
+    0xe5, 0x3d, 0x4e, 0x95, 0x8b, 0x6d, 0x6c, 0xbc, 0xb0, 0xf8, 0x88, 0x61,
+    0x09, 0xb7, 0x78, 0xa3, 0x31, 0xfe, 0xd9, 0x2f, },
+  { 0x0a, },
+  { 0x6e, 0xd4, },
+  { 0x64, 0xe9, 0xd1, },
+  { 0x30, 0xdd, 0x71, 0xef, },
+  { 0x11, 0xb5, 0x0c, 0x87, 0xc9, },
+  { 0x06, 0x1c, 0x6d, 0x04, 0x82, 0xd0, },
+  { 0x5c, 0x42, 0x0b, 0xee, 0xc5, 0x9c, 0xb2, },
+  { 0xe8, 0x29, 0xd6, 0xb4, 0x5d, 0xf7, 0x2b, 0x93, },
+  { 0x18, 0xca, 0x27, 0x72, 0x43, 0x39, 0x16, 0xbc, 0x6a, },
+  { 0x39, 0x8f, 0xfd, 0x64, 0xf5, 0x57, 0x23, 0xb0, 0x45, 0xf8, },
+  { 0xbb, 0x3a, 0x78, 0x6b, 0x02, 0x1d, 0x0b, 0x16, 0xe3, 0xb2, 0x9a, },
+  { 0xb8, 0xb4, 0x0b, 0xe5, 0xd4, 0x1d, 0x0d, 0x85, 0x49, 0x91, 0x35, 0xfa, },
+  { 0x6d, 0x48, 0x2a, 0x0c, 0x42, 0x08, 0xbd, 0xa9, 0x78, 0x6f, 0x18, 0xaf,
+    0xe2, },
+  { 0x10, 0x45, 0xd4, 0x58, 0x88, 0xec, 0x4e, 0x1e, 0xf6, 0x14, 0x92, 0x64,
+    0x7e, 0xb0, },
+  { 0x8b, 0x0b, 0x95, 0xee, 0x92, 0xc6, 0x3b, 0x91, 0xf1, 0x1e, 0xeb, 0x51,
+    0x98, 0x0a, 0x8d, },
+  { 0xa3, 0x50, 0x4d, 0xa5, 0x1d, 0x03, 0x68, 0xe9, 0x57, 0x78, 0xd6, 0x04,
+    0xf1, 0xc3, 0x94, 0xd8, },
+  { 0xb8, 0x66, 0x6e, 0xdd, 0x46, 0x15, 0xae, 0x3d, 0x83, 0x7e, 0xcf, 0xe7,
+    0x2c, 0xe8, 0x8f, 0xc7, 0x34, },
+  { 0x2e, 0xc0, 0x1f, 0x29, 0xea, 0xf6, 0xb9, 0xe2, 0xc2, 0x93, 0xeb, 0x41,
+    0x0d, 0xf0, 0x0a, 0x13, 0x0e, 0xa2, },
+  { 0x71, 0xb8, 0x33, 0xa9, 0x1b, 0xac, 0xf1, 0xb5, 0x42, 0x8f, 0x5e, 0x81,
+    0x34, 0x43, 0xb7, 0xa4, 0x18, 0x5c, 0x47, },
+  { 0xda, 0x45, 0xb8, 0x2e, 0x82, 0x1e, 0xc0, 0x59, 0x77, 0x9d, 0xfa, 0xb4,
+    0x1c, 0x5e, 0xa0, 0x2b, 0x33, 0x96, 0x5a, 0x58, },
+  { 0xe3, 0x09, 0x05, 0xa9, 0xeb, 0x48, 0x13, 0xad, 0x71, 0x88, 0x81, 0x9a,
+    0x3e, 0x2c, 0xe1, 0x23, 0x99, 0x13, 0x35, 0x9f, 0xb5, },
+  { 0xb7, 0x86, 0x2d, 0x16, 0xe1, 0x04, 0x00, 0x47, 0x47, 0x61, 0x31, 0xfb,
+    0x14, 0xac, 0xd8, 0xe9, 0xe3, 0x49, 0xbd, 0xf7, 0x9c, 0x3f, },
+  { 0x7f, 0xd9, 0x95, 0xa8, 0xa7, 0xa0, 0xcc, 0xba, 0xef, 0xb1, 0x0a, 0xa9,
+    0x21, 0x62, 0x08, 0x0f, 0x1b, 0xff, 0x7b, 0x9d, 0xae, 0xb2, 0x95, },
+  { 0x85, 0x99, 0xea, 0x33, 0xe0, 0x56, 0xff, 0x13, 0xc6, 0x61, 0x8c, 0xf9,
+    0x57, 0x05, 0x03, 0x11, 0xf9, 0xfb, 0x3a, 0xf7, 0xce, 0xbb, 0x52, 0x30, },
+  { 0xb2, 0x72, 0x9c, 0xf8, 0x77, 0x4e, 0x8f, 0x6b, 0x01, 0x6c, 0xff, 0x4e,
+    0x4f, 0x02, 0xd2, 0xbc, 0xeb, 0x51, 0x28, 0x99, 0x50, 0xab, 0xc4, 0x42,
+    0xe3, },
+  { 0x8b, 0x0a, 0xb5, 0x90, 0x8f, 0xf5, 0x7b, 0xdd, 0xba, 0x47, 0x37, 0xc9,
+    0x2a, 0xd5, 0x4b, 0x25, 0x08, 0x8b, 0x02, 0x17, 0xa7, 0x9e, 0x6b, 0x6e,
+    0xe3, 0x90, },
+  { 0x90, 0xdd, 0xf7, 0x75, 0xa7, 0xa3, 0x99, 0x5e, 0x5b, 0x7d, 0x75, 0xc3,
+    0x39, 0x6b, 0xa0, 0xe2, 0x44, 0x53, 0xb1, 0x9e, 0xc8, 0xf1, 0x77, 0x10,
+    0x58, 0x06, 0x9a, },
+  { 0x99, 0x52, 0xf0, 0x49, 0xa8, 0x8c, 0xec, 0xa6, 0x97, 0x32, 0x13, 0xb5,
+    0xf7, 0xa3, 0x8e, 0xfb, 0x4b, 0x59, 0x31, 0x3d, 0x01, 0x59, 0x98, 0x5d,
+    0x53, 0x03, 0x1a, 0x39, },
+  { 0x9f, 0xe0, 0xc2, 0xe5, 0x5d, 0x93, 0xd6, 0x9b, 0x47, 0x8f, 0x9b, 0xe0,
+    0x26, 0x35, 0x84, 0x20, 0x1d, 0xc5, 0x53, 0x10, 0x0f, 0x22, 0xb9, 0xb5,
+    0xd4, 0x36, 0xb1, 0xac, 0x73, },
+  { 0x30, 0x32, 0x20, 0x3b, 0x10, 0x28, 0xec, 0x1f, 0x4f, 0x9b, 0x47, 0x59,
+    0xeb, 0x7b, 0xee, 0x45, 0xfb, 0x0c, 0x49, 0xd8, 0x3d, 0x69, 0xbd, 0x90,
+    0x2c, 0xf0, 0x9e, 0x8d, 0xbf, 0xd5, },
+  { 0x2a, 0x37, 0x73, 0x7f, 0xf9, 0x96, 0x19, 0xaa, 0x25, 0xd8, 0x13, 0x28,
+    0x01, 0x29, 0x89, 0xdf, 0x6e, 0x0c, 0x9b, 0x43, 0x44, 0x51, 0xe9, 0x75,
+    0x26, 0x0c, 0xb7, 0x87, 0x66, 0x0b, 0x5f, },
+  { 0x23, 0xdf, 0x96, 0x68, 0x91, 0x86, 0xd0, 0x93, 0x55, 0x33, 0x24, 0xf6,
+    0xba, 0x08, 0x75, 0x5b, 0x59, 0x11, 0x69, 0xb8, 0xb9, 0xe5, 0x2c, 0x77,
+    0x02, 0xf6, 0x47, 0xee, 0x81, 0xdd, 0xb9, 0x06, },
+  { 0x9d, },
+  { 0x9d, 0x7d, },
+  { 0xfd, 0xc3, 0xda, },
+  { 0xe8, 0x82, 0xcd, 0x21, },
+  { 0xc3, 0x1d, 0x42, 0x4c, 0x74, },
+  { 0xe9, 0xda, 0xf1, 0xa2, 0xe5, 0x7c, },
+  { 0x52, 0xb8, 0x6f, 0x81, 0x5c, 0x3a, 0x4c, },
+  { 0x5b, 0x39, 0x26, 0xfc, 0x92, 0x5e, 0xe0, 0x49, },
+  { 0x59, 0xe4, 0x7c, 0x93, 0x1c, 0xf9, 0x28, 0x93, 0xde, },
+  { 0xde, 0xdf, 0xb2, 0x43, 0x61, 0x0b, 0x86, 0x16, 0x4c, 0x2e, },
+  { 0x14, 0x8f, 0x75, 0x51, 0xaf, 0xb9, 0xee, 0x51, 0x5a, 0xae, 0x23, },
+  { 0x43, 0x5f, 0x50, 0xd5, 0x70, 0xb0, 0x5b, 0x87, 0xf5, 0xd9, 0xb3, 0x6d, },
+  { 0x66, 0x0a, 0x64, 0x93, 0x79, 0x71, 0x94, 0x40, 0xb7, 0x68, 0x2d, 0xd3,
+    0x63, },
+  { 0x15, 0x00, 0xc4, 0x0c, 0x7d, 0x1b, 0x10, 0xa9, 0x73, 0x1b, 0x90, 0x6f,
+    0xe6, 0xa9, },
+  { 0x34, 0x75, 0xf3, 0x86, 0x8f, 0x56, 0xcf, 0x2a, 0x0a, 0xf2, 0x62, 0x0a,
+    0xf6, 0x0e, 0x20, },
+  { 0xb1, 0xde, 0xc9, 0xf5, 0xdb, 0xf3, 0x2f, 0x4c, 0xd6, 0x41, 0x7d, 0x39,
+    0x18, 0x3e, 0xc7, 0xc3, },
+  { 0xc5, 0x89, 0xb2, 0xf8, 0xb8, 0xc0, 0xa3, 0xb9, 0x3b, 0x10, 0x6d, 0x7c,
+    0x92, 0xfc, 0x7f, 0x34, 0x41, },
+  { 0xc4, 0xd8, 0xef, 0xba, 0xef, 0xd2, 0xaa, 0xc5, 0x6c, 0x8e, 0x3e, 0xbb,
+    0x12, 0xfc, 0x0f, 0x72, 0xbf, 0x0f, },
+  { 0xdd, 0x91, 0xd1, 0x15, 0x9e, 0x7d, 0xf8, 0xc1, 0xb9, 0x14, 0x63, 0x96,
+    0xb5, 0xcb, 0x83, 0x1d, 0x35, 0x1c, 0xec, },
+  { 0xa9, 0xf8, 0x52, 0xc9, 0x67, 0x76, 0x2b, 0xad, 0xfb, 0xd8, 0x3a, 0xa6,
+    0x74, 0x02, 0xae, 0xb8, 0x25, 0x2c, 0x63, 0x49, },
+  { 0x77, 0x1f, 0x66, 0x70, 0xfd, 0x50, 0x29, 0xaa, 0xeb, 0xdc, 0xee, 0xba,
+    0x75, 0x98, 0xdc, 0x93, 0x12, 0x3f, 0xdc, 0x7c, 0x38, },
+  { 0xe2, 0xe1, 0x89, 0x5c, 0x37, 0x38, 0x6a, 0xa3, 0x40, 0xac, 0x3f, 0xb0,
+    0xca, 0xfc, 0xa7, 0xf3, 0xea, 0xf9, 0x0f, 0x5d, 0x8e, 0x39, },
+  { 0x0f, 0x67, 0xc8, 0x38, 0x01, 0xb1, 0xb7, 0xb8, 0xa2, 0xe7, 0x0a, 0x6d,
+    0xd2, 0x63, 0x69, 0x9e, 0xcc, 0xf0, 0xf2, 0xbe, 0x9b, 0x98, 0xdd, },
+  { 0x13, 0xe1, 0x36, 0x30, 0xfe, 0xc6, 0x01, 0x8a, 0xa1, 0x63, 0x96, 0x59,
+    0xc2, 0xa9, 0x68, 0x3f, 0x58, 0xd4, 0x19, 0x0c, 0x40, 0xf3, 0xde, 0x02, },
+  { 0xa3, 0x9e, 0xce, 0xda, 0x42, 0xee, 0x8c, 0x6c, 0x5a, 0x7d, 0xdc, 0x89,
+    0x02, 0x77, 0xdd, 0xe7, 0x95, 0xbb, 0xff, 0x0d, 0xa4, 0xb5, 0x38, 0x1e,
+    0xaf, },
+  { 0x9a, 0xf6, 0xb5, 0x9a, 0x4f, 0xa9, 0x4f, 0x2c, 0x35, 0x3c, 0x24, 0xdc,
+    0x97, 0x6f, 0xd9, 0xa1, 0x7d, 0x1a, 0x85, 0x0b, 0xf5, 0xda, 0x2e, 0xe7,
+    0xb1, 0x1d, },
+  { 0x84, 0x1e, 0x8e, 0x3d, 0x45, 0xa5, 0xf2, 0x27, 0xf3, 0x31, 0xfe, 0xb9,
+    0xfb, 0xc5, 0x45, 0x99, 0x99, 0xdd, 0x93, 0x43, 0x02, 0xee, 0x58, 0xaf,
+    0xee, 0x6a, 0xbe, },
+  { 0x07, 0x2f, 0xc0, 0xa2, 0x04, 0xc4, 0xab, 0x7c, 0x26, 0xbb, 0xa8, 0xd8,
+    0xe3, 0x1c, 0x75, 0x15, 0x64, 0x5d, 0x02, 0x6a, 0xf0, 0x86, 0xe9, 0xcd,
+    0x5c, 0xef, 0xa3, 0x25, },
+  { 0x2f, 0x3b, 0x1f, 0xb5, 0x91, 0x8f, 0x86, 0xe0, 0xdc, 0x31, 0x48, 0xb6,
+    0xa1, 0x8c, 0xfd, 0x75, 0xbb, 0x7d, 0x3d, 0xc1, 0xf0, 0x10, 0x9a, 0xd8,
+    0x4b, 0x0e, 0xe3, 0x94, 0x9f, },
+  { 0x29, 0xbb, 0x8f, 0x6c, 0xd1, 0xf2, 0xb6, 0xaf, 0xe5, 0xe3, 0x2d, 0xdc,
+    0x6f, 0xa4, 0x53, 0x88, 0xd8, 0xcf, 0x4d, 0x45, 0x42, 0x62, 0xdb, 0xdf,
+    0xf8, 0x45, 0xc2, 0x13, 0xec, 0x35, },
+  { 0x06, 0x3c, 0xe3, 0x2c, 0x15, 0xc6, 0x43, 0x03, 0x81, 0xfb, 0x08, 0x76,
+    0x33, 0xcb, 0x02, 0xc1, 0xba, 0x33, 0xe5, 0xe0, 0xd1, 0x92, 0xa8, 0x46,
+    0x28, 0x3f, 0x3e, 0x9d, 0x2c, 0x44, 0x54, },
+  { 0xea, 0xbb, 0x96, 0xf8, 0xd1, 0x8b, 0x04, 0x11, 0x40, 0x78, 0x42, 0x02,
+    0x19, 0xd1, 0xbc, 0x65, 0x92, 0xd3, 0xc3, 0xd6, 0xd9, 0x19, 0xe7, 0xc3,
+    0x40, 0x97, 0xbd, 0xd4, 0xed, 0xfa, 0x5e, 0x28, },
+  { 0x02, },
+  { 0x52, 0xa8, },
+  { 0x38, 0x25, 0x0d, },
+  { 0xe3, 0x04, 0xd4, 0x92, },
+  { 0x97, 0xdb, 0xf7, 0x81, 0xca, },
+  { 0x8a, 0x56, 0x9d, 0x62, 0x56, 0xcc, },
+  { 0xa1, 0x8e, 0x3c, 0x72, 0x8f, 0x63, 0x03, },
+  { 0xf7, 0xf3, 0x39, 0x09, 0x0a, 0xa1, 0xbb, 0x23, },
+  { 0x6b, 0x03, 0xc0, 0xe9, 0xd9, 0x83, 0x05, 0x22, 0x01, },
+  { 0x1b, 0x4b, 0xf5, 0xd6, 0x4f, 0x05, 0x75, 0x91, 0x4c, 0x7f, },
+  { 0x4c, 0x8c, 0x25, 0x20, 0x21, 0xcb, 0xc2, 0x4b, 0x3a, 0x5b, 0x8d, },
+  { 0x56, 0xe2, 0x77, 0xa0, 0xb6, 0x9f, 0x81, 0xec, 0x83, 0x75, 0xc4, 0xf9, },
+  { 0x71, 0x70, 0x0f, 0xad, 0x4d, 0x35, 0x81, 0x9d, 0x88, 0x69, 0xf9, 0xaa,
+    0xd3, },
+  { 0x50, 0x6e, 0x86, 0x6e, 0x43, 0xc0, 0xc2, 0x44, 0xc2, 0xe2, 0xa0, 0x1c,
+    0xb7, 0x9a, },
+  { 0xe4, 0x7e, 0x72, 0xc6, 0x12, 0x8e, 0x7c, 0xfc, 0xbd, 0xe2, 0x08, 0x31,
+    0x3d, 0x47, 0x3d, },
+  { 0x08, 0x97, 0x5b, 0x80, 0xae, 0xc4, 0x1d, 0x50, 0x77, 0xdf, 0x1f, 0xd0,
+    0x24, 0xf0, 0x17, 0xc0, },
+  { 0x01, 0xb6, 0x29, 0xf4, 0xaf, 0x78, 0x5f, 0xb6, 0x91, 0xdd, 0x76, 0x76,
+    0xd2, 0xfd, 0x0c, 0x47, 0x40, },
+  { 0xa1, 0xd8, 0x09, 0x97, 0x7a, 0xa6, 0xc8, 0x94, 0xf6, 0x91, 0x7b, 0xae,
+    0x2b, 0x9f, 0x0d, 0x83, 0x48, 0xf7, },
+  { 0x12, 0xd5, 0x53, 0x7d, 0x9a, 0xb0, 0xbe, 0xd9, 0xed, 0xe9, 0x9e, 0xee,
+    0x61, 0x5b, 0x42, 0xf2, 0xc0, 0x73, 0xc0, },
+  { 0xd5, 0x77, 0xd6, 0x5c, 0x6e, 0xa5, 0x69, 0x2b, 0x3b, 0x8c, 0xd6, 0x7d,
+    0x1d, 0xbe, 0x2c, 0xa1, 0x02, 0x21, 0xcd, 0x29, },
+  { 0xa4, 0x98, 0x80, 0xca, 0x22, 0xcf, 0x6a, 0xab, 0x5e, 0x40, 0x0d, 0x61,
+    0x08, 0x21, 0xef, 0xc0, 0x6c, 0x52, 0xb4, 0xb0, 0x53, },
+  { 0xbf, 0xaf, 0x8f, 0x3b, 0x7a, 0x97, 0x33, 0xe5, 0xca, 0x07, 0x37, 0xfd,
+    0x15, 0xdf, 0xce, 0x26, 0x2a, 0xb1, 0xa7, 0x0b, 0xb3, 0xac, },
+  { 0x16, 0x22, 0xe1, 0xbc, 0x99, 0x4e, 0x01, 0xf0, 0xfa, 0xff, 0x8f, 0xa5,
+    0x0c, 0x61, 0xb0, 0xad, 0xcc, 0xb1, 0xe1, 0x21, 0x46, 0xfa, 0x2e, },
+  { 0x11, 0x5b, 0x0b, 0x2b, 0xe6, 0x14, 0xc1, 0xd5, 0x4d, 0x71, 0x5e, 0x17,
+    0xea, 0x23, 0xdd, 0x6c, 0xbd, 0x1d, 0xbe, 0x12, 0x1b, 0xee, 0x4c, 0x1a, },
+  { 0x40, 0x88, 0x22, 0xf3, 0x20, 0x6c, 0xed, 0xe1, 0x36, 0x34, 0x62, 0x2c,
+    0x98, 0x83, 0x52, 0xe2, 0x25, 0xee, 0xe9, 0xf5, 0xe1, 0x17, 0xf0, 0x5c,
+    0xae, },
+  { 0xc3, 0x76, 0x37, 0xde, 0x95, 0x8c, 0xca, 0x2b, 0x0c, 0x23, 0xe7, 0xb5,
+    0x38, 0x70, 0x61, 0xcc, 0xff, 0xd3, 0x95, 0x7b, 0xf3, 0xff, 0x1f, 0x9d,
+    0x59, 0x00, },
+  { 0x0c, 0x19, 0x52, 0x05, 0x22, 0x53, 0xcb, 0x48, 0xd7, 0x10, 0x0e, 0x7e,
+    0x14, 0x69, 0xb5, 0xa2, 0x92, 0x43, 0xa3, 0x9e, 0x4b, 0x8f, 0x51, 0x2c,
+    0x5a, 0x2c, 0x3b, },
+  { 0xe1, 0x9d, 0x70, 0x70, 0x28, 0xec, 0x86, 0x40, 0x55, 0x33, 0x56, 0xda,
+    0x88, 0xca, 0xee, 0xc8, 0x6a, 0x20, 0xb1, 0xe5, 0x3d, 0x57, 0xf8, 0x3c,
+    0x10, 0x07, 0x2a, 0xc4, },
+  { 0x0b, 0xae, 0xf1, 0xc4, 0x79, 0xee, 0x1b, 0x3d, 0x27, 0x35, 0x8d, 0x14,
+    0xd6, 0xae, 0x4e, 0x3c, 0xe9, 0x53, 0x50, 0xb5, 0xcc, 0x0c, 0xf7, 0xdf,
+    0xee, 0xa1, 0x74, 0xd6, 0x71, },
+  { 0xe6, 0xa4, 0xf4, 0x99, 0x98, 0xb9, 0x80, 0xea, 0x96, 0x7f, 0x4f, 0x33,
+    0xcf, 0x74, 0x25, 0x6f, 0x17, 0x6c, 0xbf, 0xf5, 0x5c, 0x38, 0xd0, 0xff,
+    0x96, 0xcb, 0x13, 0xf9, 0xdf, 0xfd, },
+  { 0xbe, 0x92, 0xeb, 0xba, 0x44, 0x2c, 0x24, 0x74, 0xd4, 0x03, 0x27, 0x3c,
+    0x5d, 0x5b, 0x03, 0x30, 0x87, 0x63, 0x69, 0xe0, 0xb8, 0x94, 0xf4, 0x44,
+    0x7e, 0xad, 0xcd, 0x20, 0x12, 0x16, 0x79, },
+  { 0x30, 0xf1, 0xc4, 0x8e, 0x05, 0x90, 0x2a, 0x97, 0x63, 0x94, 0x46, 0xff,
+    0xce, 0xd8, 0x67, 0xa7, 0xac, 0x33, 0x8c, 0x95, 0xb7, 0xcd, 0xa3, 0x23,
+    0x98, 0x9d, 0x76, 0x6c, 0x9d, 0xa8, 0xd6, 0x8a, },
+  { 0xbe, },
+  { 0x17, 0x6c, },
+  { 0x1a, 0x42, 0x4f, },
+  { 0xba, 0xaf, 0xb7, 0x65, },
+  { 0xc2, 0x63, 0x43, 0x6a, 0xea, },
+  { 0xe4, 0x4d, 0xad, 0xf2, 0x0b, 0x02, },
+  { 0x04, 0xc7, 0xc4, 0x7f, 0xa9, 0x2b, 0xce, },
+  { 0x66, 0xf6, 0x67, 0xcb, 0x03, 0x53, 0xc8, 0xf1, },
+  { 0x56, 0xa3, 0x60, 0x78, 0xc9, 0x5f, 0x70, 0x1b, 0x5e, },
+  { 0x99, 0xff, 0x81, 0x7c, 0x13, 0x3c, 0x29, 0x79, 0x4b, 0x65, },
+  { 0x51, 0x10, 0x50, 0x93, 0x01, 0x93, 0xb7, 0x01, 0xc9, 0x18, 0xb7, },
+  { 0x8e, 0x3c, 0x42, 0x1e, 0x5e, 0x7d, 0xc1, 0x50, 0x70, 0x1f, 0x00, 0x98, },
+  { 0x5f, 0xd9, 0x9b, 0xc8, 0xd7, 0xb2, 0x72, 0x62, 0x1a, 0x1e, 0xba, 0x92,
+    0xe9, },
+  { 0x70, 0x2b, 0xba, 0xfe, 0xad, 0x5d, 0x96, 0x3f, 0x27, 0xc2, 0x41, 0x6d,
+    0xc4, 0xb3, },
+  { 0xae, 0xe0, 0xd5, 0xd4, 0xc7, 0xae, 0x15, 0x5e, 0xdc, 0xdd, 0x33, 0x60,
+    0xd7, 0xd3, 0x5e, },
+  { 0x79, 0x8e, 0xbc, 0x9e, 0x20, 0xb9, 0x19, 0x4b, 0x63, 0x80, 0xf3, 0x16,
+    0xaf, 0x39, 0xbd, 0x92, },
+  { 0xc2, 0x0e, 0x85, 0xa0, 0x0b, 0x9a, 0xb0, 0xec, 0xde, 0x38, 0xd3, 0x10,
+    0xd9, 0xa7, 0x66, 0x27, 0xcf, },
+  { 0x0e, 0x3b, 0x75, 0x80, 0x67, 0x14, 0x0c, 0x02, 0x90, 0xd6, 0xb3, 0x02,
+    0x81, 0xf6, 0xa6, 0x87, 0xce, 0x58, },
+  { 0x79, 0xb5, 0xe9, 0x5d, 0x52, 0x4d, 0xf7, 0x59, 0xf4, 0x2e, 0x27, 0xdd,
+    0xb3, 0xed, 0x57, 0x5b, 0x82, 0xea, 0x6f, },
+  { 0xa2, 0x97, 0xf5, 0x80, 0x02, 0x3d, 0xde, 0xa3, 0xf9, 0xf6, 0xab, 0xe3,
+    0x57, 0x63, 0x7b, 0x9b, 0x10, 0x42, 0x6f, 0xf2, },
+  { 0x12, 0x7a, 0xfc, 0xb7, 0x67, 0x06, 0x0c, 0x78, 0x1a, 0xfe, 0x88, 0x4f,
+    0xc6, 0xac, 0x52, 0x96, 0x64, 0x28, 0x97, 0x84, 0x06, },
+  { 0xc5, 0x04, 0x44, 0x6b, 0xb2, 0xa5, 0xa4, 0x66, 0xe1, 0x76, 0xa2, 0x51,
+    0xf9, 0x59, 0x69, 0x97, 0x56, 0x0b, 0xbf, 0x50, 0xb3, 0x34, },
+  { 0x21, 0x32, 0x6b, 0x42, 0xb5, 0xed, 0x71, 0x8d, 0xf7, 0x5a, 0x35, 0xe3,
+    0x90, 0xe2, 0xee, 0xaa, 0x89, 0xf6, 0xc9, 0x9c, 0x4d, 0x73, 0xf4, },
+  { 0x4c, 0xa6, 0x09, 0xf4, 0x48, 0xe7, 0x46, 0xbc, 0x49, 0xfc, 0xe5, 0xda,
+    0xd1, 0x87, 0x13, 0x17, 0x4c, 0x59, 0x71, 0x26, 0x5b, 0x2c, 0x42, 0xb7, },
+  { 0x13, 0x63, 0xf3, 0x40, 0x02, 0xe5, 0xa3, 0x3a, 0x5e, 0x8e, 0xf8, 0xb6,
+    0x8a, 0x49, 0x60, 0x76, 0x34, 0x72, 0x94, 0x73, 0xf6, 0xd9, 0x21, 0x6a,
+    0x26, },
+  { 0xdf, 0x75, 0x16, 0x10, 0x1b, 0x5e, 0x81, 0xc3, 0xc8, 0xde, 0x34, 0x24,
+    0xb0, 0x98, 0xeb, 0x1b, 0x8f, 0xa1, 0x9b, 0x05, 0xee, 0xa5, 0xe9, 0x35,
+    0xf4, 0x1d, },
+  { 0xcd, 0x21, 0x93, 0x6e, 0x5b, 0xa0, 0x26, 0x2b, 0x21, 0x0e, 0xa0, 0xb9,
+    0x1c, 0xb5, 0xbb, 0xb8, 0xf8, 0x1e, 0xff, 0x5c, 0xa8, 0xf9, 0x39, 0x46,
+    0x4e, 0x29, 0x26, },
+  { 0x73, 0x7f, 0x0e, 0x3b, 0x0b, 0x5c, 0xf9, 0x60, 0xaa, 0x88, 0xa1, 0x09,
+    0xb1, 0x5d, 0x38, 0x7b, 0x86, 0x8f, 0x13, 0x7a, 0x8d, 0x72, 0x7a, 0x98,
+    0x1a, 0x5b, 0xff, 0xc9, },
+  { 0xd3, 0x3c, 0x61, 0x71, 0x44, 0x7e, 0x31, 0x74, 0x98, 0x9d, 0x9a, 0xd2,
+    0x27, 0xf3, 0x46, 0x43, 0x42, 0x51, 0xd0, 0x5f, 0xe9, 0x1c, 0x5c, 0x69,
+    0xbf, 0xf6, 0xbe, 0x3c, 0x40, },
+  { 0x31, 0x99, 0x31, 0x9f, 0xaa, 0x43, 0x2e, 0x77, 0x3e, 0x74, 0x26, 0x31,
+    0x5e, 0x61, 0xf1, 0x87, 0xe2, 0xeb, 0x9b, 0xcd, 0xd0, 0x3a, 0xee, 0x20,
+    0x7e, 0x10, 0x0a, 0x0b, 0x7e, 0xfa, },
+  { 0xa4, 0x27, 0x80, 0x67, 0x81, 0x2a, 0xa7, 0x62, 0xf7, 0x6e, 0xda, 0xd4,
+    0x5c, 0x39, 0x74, 0xad, 0x7e, 0xbe, 0xad, 0xa5, 0x84, 0x7f, 0xa9, 0x30,
+    0x5d, 0xdb, 0xe2, 0x05, 0x43, 0xf7, 0x1b, },
+  { 0x0b, 0x37, 0xd8, 0x02, 0xe1, 0x83, 0xd6, 0x80, 0xf2, 0x35, 0xc2, 0xb0,
+    0x37, 0xef, 0xef, 0x5e, 0x43, 0x93, 0xf0, 0x49, 0x45, 0x0a, 0xef, 0xb5,
+    0x76, 0x70, 0x12, 0x44, 0xc4, 0xdb, 0xf5, 0x7a, },
+  { 0x1f, },
+  { 0x82, 0x60, },
+  { 0xcc, 0xe3, 0x08, },
+  { 0x56, 0x17, 0xe4, 0x59, },
+  { 0xe2, 0xd7, 0x9e, 0xc4, 0x4c, },
+  { 0xb2, 0xad, 0xd3, 0x78, 0x58, 0x5a, },
+  { 0xce, 0x43, 0xb4, 0x02, 0x96, 0xab, 0x3c, },
+  { 0xe6, 0x05, 0x1a, 0x73, 0x22, 0x32, 0xbb, 0x77, },
+  { 0x23, 0xe7, 0xda, 0xfe, 0x2c, 0xef, 0x8c, 0x22, 0xec, },
+  { 0xe9, 0x8e, 0x55, 0x38, 0xd1, 0xd7, 0x35, 0x23, 0x98, 0xc7, },
+  { 0xb5, 0x81, 0x1a, 0xe5, 0xb5, 0xa5, 0xd9, 0x4d, 0xca, 0x41, 0xe7, },
+  { 0x41, 0x16, 0x16, 0x95, 0x8d, 0x9e, 0x0c, 0xea, 0x8c, 0x71, 0x9a, 0xc1, },
+  { 0x7c, 0x33, 0xc0, 0xa4, 0x00, 0x62, 0xea, 0x60, 0x67, 0xe4, 0x20, 0xbc,
+    0x5b, },
+  { 0xdb, 0xb1, 0xdc, 0xfd, 0x08, 0xc0, 0xde, 0x82, 0xd1, 0xde, 0x38, 0xc0,
+    0x90, 0x48, },
+  { 0x37, 0x18, 0x2e, 0x0d, 0x61, 0xaa, 0x61, 0xd7, 0x86, 0x20, 0x16, 0x60,
+    0x04, 0xd9, 0xd5, },
+  { 0xb0, 0xcf, 0x2c, 0x4c, 0x5e, 0x5b, 0x4f, 0x2a, 0x23, 0x25, 0x58, 0x47,
+    0xe5, 0x31, 0x06, 0x70, },
+  { 0x91, 0xa0, 0xa3, 0x86, 0x4e, 0xe0, 0x72, 0x38, 0x06, 0x67, 0x59, 0x5c,
+    0x70, 0x25, 0xdb, 0x33, 0x27, },
+  { 0x44, 0x58, 0x66, 0xb8, 0x58, 0xc7, 0x13, 0xed, 0x4c, 0xc0, 0xf4, 0x9a,
+    0x1e, 0x67, 0x75, 0x33, 0xb6, 0xb8, },
+  { 0x7f, 0x98, 0x4a, 0x8e, 0x50, 0xa2, 0x5c, 0xcd, 0x59, 0xde, 0x72, 0xb3,
+    0x9d, 0xc3, 0x09, 0x8a, 0xab, 0x56, 0xf1, },
+  { 0x80, 0x96, 0x49, 0x1a, 0x59, 0xa2, 0xc5, 0xd5, 0xa7, 0x20, 0x8a, 0xb7,
+    0x27, 0x62, 0x84, 0x43, 0xc6, 0xe1, 0x1b, 0x5d, },
+  { 0x6b, 0xb7, 0x2b, 0x26, 0x62, 0x14, 0x70, 0x19, 0x3d, 0x4d, 0xac, 0xac,
+    0x63, 0x58, 0x5e, 0x94, 0xb5, 0xb7, 0xe8, 0xe8, 0xa2, },
+  { 0x20, 0xa8, 0xc0, 0xfd, 0x63, 0x3d, 0x6e, 0x98, 0xcf, 0x0c, 0x49, 0x98,
+    0xe4, 0x5a, 0xfe, 0x8c, 0xaa, 0x70, 0x82, 0x1c, 0x7b, 0x74, },
+  { 0xc8, 0xe8, 0xdd, 0xdf, 0x69, 0x30, 0x01, 0xc2, 0x0f, 0x7e, 0x2f, 0x11,
+    0xcc, 0x3e, 0x17, 0xa5, 0x69, 0x40, 0x3f, 0x0e, 0x79, 0x7f, 0xcf, },
+  { 0xdb, 0x61, 0xc0, 0xe2, 0x2e, 0x49, 0x07, 0x31, 0x1d, 0x91, 0x42, 0x8a,
+    0xfc, 0x5e, 0xd3, 0xf8, 0x56, 0x1f, 0x2b, 0x73, 0xfd, 0x9f, 0xb2, 0x8e, },
+  { 0x0c, 0x89, 0x55, 0x0c, 0x1f, 0x59, 0x2c, 0x9d, 0x1b, 0x29, 0x1d, 0x41,
+    0x1d, 0xe6, 0x47, 0x8f, 0x8c, 0x2b, 0xea, 0x8f, 0xf0, 0xff, 0x21, 0x70,
+    0x88, },
+  { 0x12, 0x18, 0x95, 0xa6, 0x59, 0xb1, 0x31, 0x24, 0x45, 0x67, 0x55, 0xa4,
+    0x1a, 0x2d, 0x48, 0x67, 0x1b, 0x43, 0x88, 0x2d, 0x8e, 0xa0, 0x70, 0xb3,
+    0xc6, 0xbb, },
+  { 0xe7, 0xb1, 0x1d, 0xb2, 0x76, 0x4d, 0x68, 0x68, 0x68, 0x23, 0x02, 0x55,
+    0x3a, 0xe2, 0xe5, 0xd5, 0x4b, 0x43, 0xf9, 0x34, 0x77, 0x5c, 0xa1, 0xf5,
+    0x55, 0xfd, 0x4f, },
+  { 0x8c, 0x87, 0x5a, 0x08, 0x3a, 0x73, 0xad, 0x61, 0xe1, 0xe7, 0x99, 0x7e,
+    0xf0, 0x5d, 0xe9, 0x5d, 0x16, 0x43, 0x80, 0x2f, 0xd0, 0x66, 0x34, 0xe2,
+    0x42, 0x64, 0x3b, 0x1a, },
+  { 0x39, 0xc1, 0x99, 0xcf, 0x22, 0xbf, 0x16, 0x8f, 0x9f, 0x80, 0x7f, 0x95,
+    0x0a, 0x05, 0x67, 0x27, 0xe7, 0x15, 0xdf, 0x9d, 0xb2, 0xfe, 0x1c, 0xb5,
+    0x1d, 0x60, 0x8f, 0x8a, 0x1d, },
+  { 0x9b, 0x6e, 0x08, 0x09, 0x06, 0x73, 0xab, 0x68, 0x02, 0x62, 0x1a, 0xe4,
+    0xd4, 0xdf, 0xc7, 0x02, 0x4c, 0x6a, 0x5f, 0xfd, 0x23, 0xac, 0xae, 0x6d,
+    0x43, 0xa4, 0x7a, 0x50, 0x60, 0x3c, },
+  { 0x1d, 0xb4, 0xc6, 0xe1, 0xb1, 0x4b, 0xe3, 0xf2, 0xe2, 0x1a, 0x73, 0x1b,
+    0xa0, 0x92, 0xa7, 0xf5, 0xff, 0x8f, 0x8b, 0x5d, 0xdf, 0xa8, 0x04, 0xb3,
+    0xb0, 0xf7, 0xcc, 0x12, 0xfa, 0x35, 0x46, },
+  { 0x49, 0x45, 0x97, 0x11, 0x0f, 0x1c, 0x60, 0x8e, 0xe8, 0x47, 0x30, 0xcf,
+    0x60, 0xa8, 0x71, 0xc5, 0x1b, 0xe9, 0x39, 0x4d, 0x49, 0xb6, 0x12, 0x1f,
+    0x24, 0xab, 0x37, 0xff, 0x83, 0xc2, 0xe1, 0x3a, },
+  { 0x60, },
+  { 0x24, 0x26, },
+  { 0x47, 0xeb, 0xc9, },
+  { 0x4a, 0xd0, 0xbc, 0xf0, },
+  { 0x8e, 0x2b, 0xc9, 0x85, 0x3c, },
+  { 0xa2, 0x07, 0x15, 0xb8, 0x12, 0x74, },
+  { 0x0f, 0xdb, 0x5b, 0x33, 0x69, 0xfe, 0x4b, },
+  { 0xa2, 0x86, 0x54, 0xf4, 0xfd, 0xb2, 0xd4, 0xe6, },
+  { 0xbb, 0x84, 0x78, 0x49, 0x27, 0x8e, 0x61, 0xda, 0x60, },
+  { 0x04, 0xc3, 0xcd, 0xaa, 0x8f, 0xa7, 0x03, 0xc9, 0xf9, 0xb6, },
+  { 0xf8, 0x27, 0x1d, 0x61, 0xdc, 0x21, 0x42, 0xdd, 0xad, 0x92, 0x40, },
+  { 0x12, 0x87, 0xdf, 0xc2, 0x41, 0x45, 0x5a, 0x36, 0x48, 0x5b, 0x51, 0x2b, },
+  { 0xbb, 0x37, 0x5d, 0x1f, 0xf1, 0x68, 0x7a, 0xc4, 0xa5, 0xd2, 0xa4, 0x91,
+    0x8d, },
+  { 0x5b, 0x27, 0xd1, 0x04, 0x54, 0x52, 0x9f, 0xa3, 0x47, 0x86, 0x33, 0x33,
+    0xbf, 0xa0, },
+  { 0xcf, 0x04, 0xea, 0xf8, 0x03, 0x2a, 0x43, 0xff, 0xa6, 0x68, 0x21, 0x4c,
+    0xd5, 0x4b, 0xed, },
+  { 0xaf, 0xb8, 0xbc, 0x63, 0x0f, 0x18, 0x4d, 0xe2, 0x7a, 0xdd, 0x46, 0x44,
+    0xc8, 0x24, 0x0a, 0xb7, },
+  { 0x3e, 0xdc, 0x36, 0xe4, 0x89, 0xb1, 0xfa, 0xc6, 0x40, 0x93, 0x2e, 0x75,
+    0xb2, 0x15, 0xd1, 0xb1, 0x10, },
+  { 0x6c, 0xd8, 0x20, 0x3b, 0x82, 0x79, 0xf9, 0xc8, 0xbc, 0x9d, 0xe0, 0x35,
+    0xbe, 0x1b, 0x49, 0x1a, 0xbc, 0x3a, },
+  { 0x78, 0x65, 0x2c, 0xbe, 0x35, 0x67, 0xdc, 0x78, 0xd4, 0x41, 0xf6, 0xc9,
+    0xde, 0xde, 0x1f, 0x18, 0x13, 0x31, 0x11, },
+  { 0x8a, 0x7f, 0xb1, 0x33, 0x8f, 0x0c, 0x3c, 0x0a, 0x06, 0x61, 0xf0, 0x47,
+    0x29, 0x1b, 0x29, 0xbc, 0x1c, 0x47, 0xef, 0x7a, },
+  { 0x65, 0x91, 0xf1, 0xe6, 0xb3, 0x96, 0xd3, 0x8c, 0xc2, 0x4a, 0x59, 0x35,
+    0x72, 0x8e, 0x0b, 0x9a, 0x87, 0xca, 0x34, 0x7b, 0x63, },
+  { 0x5f, 0x08, 0x87, 0x80, 0x56, 0x25, 0x89, 0x77, 0x61, 0x8c, 0x64, 0xa1,
+    0x59, 0x6d, 0x59, 0x62, 0xe8, 0x4a, 0xc8, 0x58, 0x99, 0xd1, },
+  { 0x23, 0x87, 0x1d, 0xed, 0x6f, 0xf2, 0x91, 0x90, 0xe2, 0xfe, 0x43, 0x21,
+    0xaf, 0x97, 0xc6, 0xbc, 0xd7, 0x15, 0xc7, 0x2d, 0x08, 0x77, 0x91, },
+  { 0x90, 0x47, 0x9a, 0x9e, 0x3a, 0xdf, 0xf3, 0xc9, 0x4c, 0x1e, 0xa7, 0xd4,
+    0x6a, 0x32, 0x90, 0xfe, 0xb7, 0xb6, 0x7b, 0xfa, 0x96, 0x61, 0xfb, 0xa4, },
+  { 0xb1, 0x67, 0x60, 0x45, 0xb0, 0x96, 0xc5, 0x15, 0x9f, 0x4d, 0x26, 0xd7,
+    0x9d, 0xf1, 0xf5, 0x6d, 0x21, 0x00, 0x94, 0x31, 0x64, 0x94, 0xd3, 0xa7,
+    0xd3, },
+  { 0x02, 0x3e, 0xaf, 0xf3, 0x79, 0x73, 0xa5, 0xf5, 0xcc, 0x7a, 0x7f, 0xfb,
+    0x79, 0x2b, 0x85, 0x8c, 0x88, 0x72, 0x06, 0xbe, 0xfe, 0xaf, 0xc1, 0x16,
+    0xa6, 0xd6, },
+  { 0x2a, 0xb0, 0x1a, 0xe5, 0xaa, 0x6e, 0xb3, 0xae, 0x53, 0x85, 0x33, 0x80,
+    0x75, 0xae, 0x30, 0xe6, 0xb8, 0x72, 0x42, 0xf6, 0x25, 0x4f, 0x38, 0x88,
+    0x55, 0xd1, 0xa9, },
+  { 0x90, 0xd8, 0x0c, 0xc0, 0x93, 0x4b, 0x4f, 0x9e, 0x65, 0x6c, 0xa1, 0x54,
+    0xa6, 0xf6, 0x6e, 0xca, 0xd2, 0xbb, 0x7e, 0x6a, 0x1c, 0xd3, 0xce, 0x46,
+    0xef, 0xb0, 0x00, 0x8d, },
+  { 0xed, 0x9c, 0x49, 0xcd, 0xc2, 0xde, 0x38, 0x0e, 0xe9, 0x98, 0x6c, 0xc8,
+    0x90, 0x9e, 0x3c, 0xd4, 0xd3, 0xeb, 0x88, 0x32, 0xc7, 0x28, 0xe3, 0x94,
+    0x1c, 0x9f, 0x8b, 0xf3, 0xcb, },
+  { 0xac, 0xe7, 0x92, 0x16, 0xb4, 0x14, 0xa0, 0xe4, 0x04, 0x79, 0xa2, 0xf4,
+    0x31, 0xe6, 0x0c, 0x26, 0xdc, 0xbf, 0x2f, 0x69, 0x1b, 0x55, 0x94, 0x67,
+    0xda, 0x0c, 0xd7, 0x32, 0x1f, 0xef, },
+  { 0x68, 0x63, 0x85, 0x57, 0x95, 0x9e, 0x42, 0x27, 0x41, 0x43, 0x42, 0x02,
+    0xa5, 0x78, 0xa7, 0xc6, 0x43, 0xc1, 0x6a, 0xba, 0x70, 0x80, 0xcd, 0x04,
+    0xb6, 0x78, 0x76, 0x29, 0xf3, 0xe8, 0xa0, },
+  { 0xe6, 0xac, 0x8d, 0x9d, 0xf0, 0xc0, 0xf7, 0xf7, 0xe3, 0x3e, 0x4e, 0x28,
+    0x0f, 0x59, 0xb2, 0x67, 0x9e, 0x84, 0x34, 0x42, 0x96, 0x30, 0x2b, 0xca,
+    0x49, 0xb6, 0xc5, 0x9a, 0x84, 0x59, 0xa7, 0x81, },
+  { 0x7e, },
+  { 0x1e, 0x21, },
+  { 0x26, 0xd3, 0xdd, },
+  { 0x2c, 0xd4, 0xb3, 0x3d, },
+  { 0x86, 0x7b, 0x76, 0x3c, 0xf0, },
+  { 0x12, 0xc3, 0x70, 0x1d, 0x55, 0x18, },
+  { 0x96, 0xc2, 0xbd, 0x61, 0x55, 0xf4, 0x24, },
+  { 0x20, 0x51, 0xf7, 0x86, 0x58, 0x8f, 0x07, 0x2a, },
+  { 0x93, 0x15, 0xa8, 0x1d, 0xda, 0x97, 0xee, 0x0e, 0x6c, },
+  { 0x39, 0x93, 0xdf, 0xd5, 0x0e, 0xca, 0xdc, 0x7a, 0x92, 0xce, },
+  { 0x60, 0xd5, 0xfd, 0xf5, 0x1b, 0x26, 0x82, 0x26, 0x73, 0x02, 0xbc, },
+  { 0x98, 0xf2, 0x34, 0xe1, 0xf5, 0xfb, 0x00, 0xac, 0x10, 0x4a, 0x38, 0x9f, },
+  { 0xda, 0x3a, 0x92, 0x8a, 0xd0, 0xcd, 0x12, 0xcd, 0x15, 0xbb, 0xab, 0x77,
+    0x66, },
+  { 0xa2, 0x92, 0x1a, 0xe5, 0xca, 0x0c, 0x30, 0x75, 0xeb, 0xaf, 0x00, 0x31,
+    0x55, 0x66, },
+  { 0x06, 0xea, 0xfd, 0x3e, 0x86, 0x38, 0x62, 0x4e, 0xa9, 0x12, 0xa4, 0x12,
+    0x43, 0xbf, 0xa1, },
+  { 0xe4, 0x71, 0x7b, 0x94, 0xdb, 0xa0, 0xd2, 0xff, 0x9b, 0xeb, 0xad, 0x8e,
+    0x95, 0x8a, 0xc5, 0xed, },
+  { 0x25, 0x5a, 0x77, 0x71, 0x41, 0x0e, 0x7a, 0xe9, 0xed, 0x0c, 0x10, 0xef,
+    0xf6, 0x2b, 0x3a, 0xba, 0x60, },
+  { 0xee, 0xe2, 0xa3, 0x67, 0x64, 0x1d, 0xc6, 0x04, 0xc4, 0xe1, 0x68, 0xd2,
+    0x6e, 0xd2, 0x91, 0x75, 0x53, 0x07, },
+  { 0xe0, 0xf6, 0x4d, 0x8f, 0x68, 0xfc, 0x06, 0x7e, 0x18, 0x79, 0x7f, 0x2b,
+    0x6d, 0xef, 0x46, 0x7f, 0xab, 0xb2, 0xad, },
+  { 0x3d, 0x35, 0x88, 0x9f, 0x2e, 0xcf, 0x96, 0x45, 0x07, 0x60, 0x71, 0x94,
+    0x00, 0x8d, 0xbf, 0xf4, 0xef, 0x46, 0x2e, 0x3c, },
+  { 0x43, 0xcf, 0x98, 0xf7, 0x2d, 0xf4, 0x17, 0xe7, 0x8c, 0x05, 0x2d, 0x9b,
+    0x24, 0xfb, 0x4d, 0xea, 0x4a, 0xec, 0x01, 0x25, 0x29, },
+  { 0x8e, 0x73, 0x9a, 0x78, 0x11, 0xfe, 0x48, 0xa0, 0x3b, 0x1a, 0x26, 0xdf,
+    0x25, 0xe9, 0x59, 0x1c, 0x70, 0x07, 0x9f, 0xdc, 0xa0, 0xa6, },
+  { 0xe8, 0x47, 0x71, 0xc7, 0x3e, 0xdf, 0xb5, 0x13, 0xb9, 0x85, 0x13, 0xa8,
+    0x54, 0x47, 0x6e, 0x59, 0x96, 0x09, 0x13, 0x5f, 0x82, 0x16, 0x0b, },
+  { 0xfb, 0xc0, 0x8c, 0x03, 0x21, 0xb3, 0xc4, 0xb5, 0x43, 0x32, 0x6c, 0xea,
+    0x7f, 0xa8, 0x43, 0x91, 0xe8, 0x4e, 0x3f, 0xbf, 0x45, 0x58, 0x6a, 0xa3, },
+  { 0x55, 0xf8, 0xf3, 0x00, 0x76, 0x09, 0xef, 0x69, 0x5d, 0xd2, 0x8a, 0xf2,
+    0x65, 0xc3, 0xcb, 0x9b, 0x43, 0xfd, 0xb1, 0x7e, 0x7f, 0xa1, 0x94, 0xb0,
+    0xd7, },
+  { 0xaa, 0x13, 0xc1, 0x51, 0x40, 0x6d, 0x8d, 0x4c, 0x0a, 0x95, 0x64, 0x7b,
+    0xd1, 0x96, 0xb6, 0x56, 0xb4, 0x5b, 0xcf, 0xd6, 0xd9, 0x15, 0x97, 0xdd,
+    0xb6, 0xef, },
+  { 0xaf, 0xb7, 0x36, 0xb0, 0x04, 0xdb, 0xd7, 0x9c, 0x9a, 0x44, 0xc4, 0xf6,
+    0x1f, 0x12, 0x21, 0x2d, 0x59, 0x30, 0x54, 0xab, 0x27, 0x61, 0xa3, 0x57,
+    0xef, 0xf8, 0x53, },
+  { 0x97, 0x34, 0x45, 0x3e, 0xce, 0x7c, 0x35, 0xa2, 0xda, 0x9f, 0x4b, 0x46,
+    0x6c, 0x11, 0x67, 0xff, 0x2f, 0x76, 0x58, 0x15, 0x71, 0xfa, 0x44, 0x89,
+    0x89, 0xfd, 0xf7, 0x99, },
+  { 0x1f, 0xb1, 0x62, 0xeb, 0x83, 0xc5, 0x9c, 0x89, 0xf9, 0x2c, 0xd2, 0x03,
+    0x61, 0xbc, 0xbb, 0xa5, 0x74, 0x0e, 0x9b, 0x7e, 0x82, 0x3e, 0x70, 0x0a,
+    0xa9, 0x8f, 0x2b, 0x59, 0xfb, },
+  { 0xf8, 0xca, 0x5e, 0x3a, 0x4f, 0x9e, 0x10, 0x69, 0x10, 0xd5, 0x4c, 0xeb,
+    0x1a, 0x0f, 0x3c, 0x6a, 0x98, 0xf5, 0xb0, 0x97, 0x5b, 0x37, 0x2f, 0x0d,
+    0xbd, 0x42, 0x4b, 0x69, 0xa1, 0x82, },
+  { 0x12, 0x8c, 0x6d, 0x52, 0x08, 0xef, 0x74, 0xb2, 0xe6, 0xaa, 0xd3, 0xb0,
+    0x26, 0xb0, 0xd9, 0x94, 0xb6, 0x11, 0x45, 0x0e, 0x36, 0x71, 0x14, 0x2d,
+    0x41, 0x8c, 0x21, 0x53, 0x31, 0xe9, 0x68, },
+  { 0xee, 0xea, 0x0d, 0x89, 0x47, 0x7e, 0x72, 0xd1, 0xd8, 0xce, 0x58, 0x4c,
+    0x94, 0x1f, 0x0d, 0x51, 0x08, 0xa3, 0xb6, 0x3d, 0xe7, 0x82, 0x46, 0x92,
+    0xd6, 0x98, 0x6b, 0x07, 0x10, 0x65, 0x52, 0x65, },
+};
+
+static const u8 blake2s_hmac_testvecs[][BLAKE2S_HASH_SIZE] __initconst = {
+  { 0xce, 0xe1, 0x57, 0x69, 0x82, 0xdc, 0xbf, 0x43, 0xad, 0x56, 0x4c, 0x70,
+    0xed, 0x68, 0x16, 0x96, 0xcf, 0xa4, 0x73, 0xe8, 0xe8, 0xfc, 0x32, 0x79,
+    0x08, 0x0a, 0x75, 0x82, 0xda, 0x3f, 0x05, 0x11, },
+  { 0x77, 0x2f, 0x0c, 0x71, 0x41, 0xf4, 0x4b, 0x2b, 0xb3, 0xc6, 0xb6, 0xf9,
+    0x60, 0xde, 0xe4, 0x52, 0x38, 0x66, 0xe8, 0xbf, 0x9b, 0x96, 0xc4, 0x9f,
+    0x60, 0xd9, 0x24, 0x37, 0x99, 0xd6, 0xec, 0x31, },
+};
+
+bool __init blake2s_selftest(void)
+{
+	u8 key[BLAKE2S_KEY_SIZE];
+	u8 buf[ARRAY_SIZE(blake2s_testvecs)];
+	u8 hash[BLAKE2S_HASH_SIZE];
+	struct blake2s_state state;
+	bool success = true;
+	int i, l;
+
+	key[0] = key[1] = 1;
+	for (i = 2; i < sizeof(key); ++i)
+		key[i] = key[i - 2] + key[i - 1];
+
+	for (i = 0; i < sizeof(buf); ++i)
+		buf[i] = (u8)i;
+
+	for (i = l = 0; i < ARRAY_SIZE(blake2s_testvecs); l = (l + 37) % ++i) {
+		int outlen = 1 + i % BLAKE2S_HASH_SIZE;
+		int keylen = (13 * i) % (BLAKE2S_KEY_SIZE + 1);
+
+		blake2s(hash, buf, key + BLAKE2S_KEY_SIZE - keylen, outlen, i,
+			keylen);
+		if (memcmp(hash, blake2s_testvecs[i], outlen)) {
+			pr_err("blake2s self-test %d: FAIL\n", i + 1);
+			success = false;
+		}
+
+		if (!keylen)
+			blake2s_init(&state, outlen);
+		else
+			blake2s_init_key(&state, outlen,
+					 key + BLAKE2S_KEY_SIZE - keylen,
+					 keylen);
+
+		blake2s_update(&state, buf, l);
+		blake2s_update(&state, buf + l, i - l);
+		blake2s_final(&state, hash);
+		if (memcmp(hash, blake2s_testvecs[i], outlen)) {
+			pr_err("blake2s init/update/final self-test %d: FAIL\n",
+			       i + 1);
+			success = false;
+		}
+	}
+
+	if (success) {
+		blake2s256_hmac(hash, buf, key, sizeof(buf), sizeof(key));
+		success &= !memcmp(hash, blake2s_hmac_testvecs[0], BLAKE2S_HASH_SIZE);
+
+		blake2s256_hmac(hash, key, buf, sizeof(key), sizeof(buf));
+		success &= !memcmp(hash, blake2s_hmac_testvecs[1], BLAKE2S_HASH_SIZE);
+
+		if (!success)
+			pr_err("blake2s256_hmac self-test: FAIL\n");
+	}
+
+	return success;
+}
diff --git a/lib/crypto/blake2s.c b/lib/crypto/blake2s.c
new file mode 100644
index 0000000..c64ac8b
--- /dev/null
+++ b/lib/crypto/blake2s.c
@@ -0,0 +1,92 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This is an implementation of the BLAKE2s hash and PRF functions.
+ *
+ * Information: https://blake2.net/
+ *
+ */
+
+#include <crypto/internal/blake2s.h>
+#include <linux/types.h>
+#include <linux/string.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/bug.h>
+
+#if IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_BLAKE2S)
+#  define blake2s_compress blake2s_compress_arch
+#else
+#  define blake2s_compress blake2s_compress_generic
+#endif
+
+void blake2s_update(struct blake2s_state *state, const u8 *in, size_t inlen)
+{
+	__blake2s_update(state, in, inlen, blake2s_compress);
+}
+EXPORT_SYMBOL(blake2s_update);
+
+void blake2s_final(struct blake2s_state *state, u8 *out)
+{
+	WARN_ON(IS_ENABLED(DEBUG) && !out);
+	__blake2s_final(state, out, blake2s_compress);
+	memzero_explicit(state, sizeof(*state));
+}
+EXPORT_SYMBOL(blake2s_final);
+
+void blake2s256_hmac(u8 *out, const u8 *in, const u8 *key, const size_t inlen,
+		     const size_t keylen)
+{
+	struct blake2s_state state;
+	u8 x_key[BLAKE2S_BLOCK_SIZE] __aligned(__alignof__(u32)) = { 0 };
+	u8 i_hash[BLAKE2S_HASH_SIZE] __aligned(__alignof__(u32));
+	int i;
+
+	if (keylen > BLAKE2S_BLOCK_SIZE) {
+		blake2s_init(&state, BLAKE2S_HASH_SIZE);
+		blake2s_update(&state, key, keylen);
+		blake2s_final(&state, x_key);
+	} else
+		memcpy(x_key, key, keylen);
+
+	for (i = 0; i < BLAKE2S_BLOCK_SIZE; ++i)
+		x_key[i] ^= 0x36;
+
+	blake2s_init(&state, BLAKE2S_HASH_SIZE);
+	blake2s_update(&state, x_key, BLAKE2S_BLOCK_SIZE);
+	blake2s_update(&state, in, inlen);
+	blake2s_final(&state, i_hash);
+
+	for (i = 0; i < BLAKE2S_BLOCK_SIZE; ++i)
+		x_key[i] ^= 0x5c ^ 0x36;
+
+	blake2s_init(&state, BLAKE2S_HASH_SIZE);
+	blake2s_update(&state, x_key, BLAKE2S_BLOCK_SIZE);
+	blake2s_update(&state, i_hash, BLAKE2S_HASH_SIZE);
+	blake2s_final(&state, i_hash);
+
+	memcpy(out, i_hash, BLAKE2S_HASH_SIZE);
+	memzero_explicit(x_key, BLAKE2S_BLOCK_SIZE);
+	memzero_explicit(i_hash, BLAKE2S_HASH_SIZE);
+}
+EXPORT_SYMBOL(blake2s256_hmac);
+
+static int __init mod_init(void)
+{
+	if (!IS_ENABLED(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS) &&
+	    WARN_ON(!blake2s_selftest()))
+		return -ENODEV;
+	return 0;
+}
+
+static void __exit mod_exit(void)
+{
+}
+
+module_init(mod_init);
+module_exit(mod_exit);
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("BLAKE2s hash function");
+MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
diff --git a/lib/crypto/chacha.c b/lib/crypto/chacha.c
new file mode 100644
index 0000000..65ead6b
--- /dev/null
+++ b/lib/crypto/chacha.c
@@ -0,0 +1,115 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * The "hash function" used as the core of the ChaCha stream cipher (RFC7539)
+ *
+ * Copyright (C) 2015 Martin Willi
+ */
+
+#include <linux/bug.h>
+#include <linux/kernel.h>
+#include <linux/export.h>
+#include <linux/bitops.h>
+#include <linux/string.h>
+#include <linux/cryptohash.h>
+#include <asm/unaligned.h>
+#include <crypto/chacha.h>
+
+static void chacha_permute(u32 *x, int nrounds)
+{
+	int i;
+
+	/* whitelist the allowed round counts */
+	WARN_ON_ONCE(nrounds != 20 && nrounds != 12);
+
+	for (i = 0; i < nrounds; i += 2) {
+		x[0]  += x[4];    x[12] = rol32(x[12] ^ x[0],  16);
+		x[1]  += x[5];    x[13] = rol32(x[13] ^ x[1],  16);
+		x[2]  += x[6];    x[14] = rol32(x[14] ^ x[2],  16);
+		x[3]  += x[7];    x[15] = rol32(x[15] ^ x[3],  16);
+
+		x[8]  += x[12];   x[4]  = rol32(x[4]  ^ x[8],  12);
+		x[9]  += x[13];   x[5]  = rol32(x[5]  ^ x[9],  12);
+		x[10] += x[14];   x[6]  = rol32(x[6]  ^ x[10], 12);
+		x[11] += x[15];   x[7]  = rol32(x[7]  ^ x[11], 12);
+
+		x[0]  += x[4];    x[12] = rol32(x[12] ^ x[0],   8);
+		x[1]  += x[5];    x[13] = rol32(x[13] ^ x[1],   8);
+		x[2]  += x[6];    x[14] = rol32(x[14] ^ x[2],   8);
+		x[3]  += x[7];    x[15] = rol32(x[15] ^ x[3],   8);
+
+		x[8]  += x[12];   x[4]  = rol32(x[4]  ^ x[8],   7);
+		x[9]  += x[13];   x[5]  = rol32(x[5]  ^ x[9],   7);
+		x[10] += x[14];   x[6]  = rol32(x[6]  ^ x[10],  7);
+		x[11] += x[15];   x[7]  = rol32(x[7]  ^ x[11],  7);
+
+		x[0]  += x[5];    x[15] = rol32(x[15] ^ x[0],  16);
+		x[1]  += x[6];    x[12] = rol32(x[12] ^ x[1],  16);
+		x[2]  += x[7];    x[13] = rol32(x[13] ^ x[2],  16);
+		x[3]  += x[4];    x[14] = rol32(x[14] ^ x[3],  16);
+
+		x[10] += x[15];   x[5]  = rol32(x[5]  ^ x[10], 12);
+		x[11] += x[12];   x[6]  = rol32(x[6]  ^ x[11], 12);
+		x[8]  += x[13];   x[7]  = rol32(x[7]  ^ x[8],  12);
+		x[9]  += x[14];   x[4]  = rol32(x[4]  ^ x[9],  12);
+
+		x[0]  += x[5];    x[15] = rol32(x[15] ^ x[0],   8);
+		x[1]  += x[6];    x[12] = rol32(x[12] ^ x[1],   8);
+		x[2]  += x[7];    x[13] = rol32(x[13] ^ x[2],   8);
+		x[3]  += x[4];    x[14] = rol32(x[14] ^ x[3],   8);
+
+		x[10] += x[15];   x[5]  = rol32(x[5]  ^ x[10],  7);
+		x[11] += x[12];   x[6]  = rol32(x[6]  ^ x[11],  7);
+		x[8]  += x[13];   x[7]  = rol32(x[7]  ^ x[8],   7);
+		x[9]  += x[14];   x[4]  = rol32(x[4]  ^ x[9],   7);
+	}
+}
+
+/**
+ * chacha_block - generate one keystream block and increment block counter
+ * @state: input state matrix (16 32-bit words)
+ * @stream: output keystream block (64 bytes)
+ * @nrounds: number of rounds (20 or 12; 20 is recommended)
+ *
+ * This is the ChaCha core, a function from 64-byte strings to 64-byte strings.
+ * The caller has already converted the endianness of the input.  This function
+ * also handles incrementing the block counter in the input matrix.
+ */
+void chacha_block_generic(u32 *state, u8 *stream, int nrounds)
+{
+	u32 x[16];
+	int i;
+
+	memcpy(x, state, 64);
+
+	chacha_permute(x, nrounds);
+
+	for (i = 0; i < ARRAY_SIZE(x); i++)
+		put_unaligned_le32(x[i] + state[i], &stream[i * sizeof(u32)]);
+
+	state[12]++;
+}
+EXPORT_SYMBOL(chacha_block_generic);
+
+/**
+ * hchacha_block_generic - abbreviated ChaCha core, for XChaCha
+ * @state: input state matrix (16 32-bit words)
+ * @out: output (8 32-bit words)
+ * @nrounds: number of rounds (20 or 12; 20 is recommended)
+ *
+ * HChaCha is the ChaCha equivalent of HSalsa and is an intermediate step
+ * towards XChaCha (see https://cr.yp.to/snuffle/xsalsa-20081128.pdf).  HChaCha
+ * skips the final addition of the initial state, and outputs only certain words
+ * of the state.  It should not be used for streaming directly.
+ */
+void hchacha_block_generic(const u32 *state, u32 *stream, int nrounds)
+{
+	u32 x[16];
+
+	memcpy(x, state, 64);
+
+	chacha_permute(x, nrounds);
+
+	memcpy(&stream[0], &x[0], 16);
+	memcpy(&stream[4], &x[12], 16);
+}
+EXPORT_SYMBOL(hchacha_block_generic);
diff --git a/lib/crypto/chacha20poly1305-selftest.c b/lib/crypto/chacha20poly1305-selftest.c
new file mode 100644
index 0000000..fa43ded
--- /dev/null
+++ b/lib/crypto/chacha20poly1305-selftest.c
@@ -0,0 +1,9082 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include <crypto/chacha20poly1305.h>
+#include <crypto/chacha.h>
+#include <crypto/poly1305.h>
+
+#include <asm/unaligned.h>
+#include <linux/bug.h>
+#include <linux/init.h>
+#include <linux/mm.h>
+#include <linux/kernel.h>
+#include <linux/slab.h>
+
+struct chacha20poly1305_testvec {
+	const u8 *input, *output, *assoc, *nonce, *key;
+	size_t ilen, alen, nlen;
+	bool failure;
+};
+
+/* The first of these are the ChaCha20-Poly1305 AEAD test vectors from RFC7539
+ * 2.8.2. After they are generated by reference implementations. And the final
+ * marked ones are taken from wycheproof, but we only do these for the encrypt
+ * side, because mostly we're stressing the primitives rather than the actual
+ * chapoly construction.
+ */
+
+static const u8 enc_input001[] __initconst = {
+	0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74,
+	0x2d, 0x44, 0x72, 0x61, 0x66, 0x74, 0x73, 0x20,
+	0x61, 0x72, 0x65, 0x20, 0x64, 0x72, 0x61, 0x66,
+	0x74, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x20, 0x76, 0x61, 0x6c, 0x69,
+	0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20,
+	0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20,
+	0x6f, 0x66, 0x20, 0x73, 0x69, 0x78, 0x20, 0x6d,
+	0x6f, 0x6e, 0x74, 0x68, 0x73, 0x20, 0x61, 0x6e,
+	0x64, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65,
+	0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
+	0x2c, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63,
+	0x65, 0x64, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x6f,
+	0x62, 0x73, 0x6f, 0x6c, 0x65, 0x74, 0x65, 0x64,
+	0x20, 0x62, 0x79, 0x20, 0x6f, 0x74, 0x68, 0x65,
+	0x72, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x20, 0x61, 0x74, 0x20, 0x61,
+	0x6e, 0x79, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e,
+	0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69,
+	0x6e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72,
+	0x69, 0x61, 0x74, 0x65, 0x20, 0x74, 0x6f, 0x20,
+	0x75, 0x73, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65,
+	0x72, 0x6e, 0x65, 0x74, 0x2d, 0x44, 0x72, 0x61,
+	0x66, 0x74, 0x73, 0x20, 0x61, 0x73, 0x20, 0x72,
+	0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+	0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61,
+	0x6c, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20,
+	0x63, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65,
+	0x6d, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20,
+	0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x20,
+	0x2f, 0xe2, 0x80, 0x9c, 0x77, 0x6f, 0x72, 0x6b,
+	0x20, 0x69, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x67,
+	0x72, 0x65, 0x73, 0x73, 0x2e, 0x2f, 0xe2, 0x80,
+	0x9d
+};
+static const u8 enc_output001[] __initconst = {
+	0x64, 0xa0, 0x86, 0x15, 0x75, 0x86, 0x1a, 0xf4,
+	0x60, 0xf0, 0x62, 0xc7, 0x9b, 0xe6, 0x43, 0xbd,
+	0x5e, 0x80, 0x5c, 0xfd, 0x34, 0x5c, 0xf3, 0x89,
+	0xf1, 0x08, 0x67, 0x0a, 0xc7, 0x6c, 0x8c, 0xb2,
+	0x4c, 0x6c, 0xfc, 0x18, 0x75, 0x5d, 0x43, 0xee,
+	0xa0, 0x9e, 0xe9, 0x4e, 0x38, 0x2d, 0x26, 0xb0,
+	0xbd, 0xb7, 0xb7, 0x3c, 0x32, 0x1b, 0x01, 0x00,
+	0xd4, 0xf0, 0x3b, 0x7f, 0x35, 0x58, 0x94, 0xcf,
+	0x33, 0x2f, 0x83, 0x0e, 0x71, 0x0b, 0x97, 0xce,
+	0x98, 0xc8, 0xa8, 0x4a, 0xbd, 0x0b, 0x94, 0x81,
+	0x14, 0xad, 0x17, 0x6e, 0x00, 0x8d, 0x33, 0xbd,
+	0x60, 0xf9, 0x82, 0xb1, 0xff, 0x37, 0xc8, 0x55,
+	0x97, 0x97, 0xa0, 0x6e, 0xf4, 0xf0, 0xef, 0x61,
+	0xc1, 0x86, 0x32, 0x4e, 0x2b, 0x35, 0x06, 0x38,
+	0x36, 0x06, 0x90, 0x7b, 0x6a, 0x7c, 0x02, 0xb0,
+	0xf9, 0xf6, 0x15, 0x7b, 0x53, 0xc8, 0x67, 0xe4,
+	0xb9, 0x16, 0x6c, 0x76, 0x7b, 0x80, 0x4d, 0x46,
+	0xa5, 0x9b, 0x52, 0x16, 0xcd, 0xe7, 0xa4, 0xe9,
+	0x90, 0x40, 0xc5, 0xa4, 0x04, 0x33, 0x22, 0x5e,
+	0xe2, 0x82, 0xa1, 0xb0, 0xa0, 0x6c, 0x52, 0x3e,
+	0xaf, 0x45, 0x34, 0xd7, 0xf8, 0x3f, 0xa1, 0x15,
+	0x5b, 0x00, 0x47, 0x71, 0x8c, 0xbc, 0x54, 0x6a,
+	0x0d, 0x07, 0x2b, 0x04, 0xb3, 0x56, 0x4e, 0xea,
+	0x1b, 0x42, 0x22, 0x73, 0xf5, 0x48, 0x27, 0x1a,
+	0x0b, 0xb2, 0x31, 0x60, 0x53, 0xfa, 0x76, 0x99,
+	0x19, 0x55, 0xeb, 0xd6, 0x31, 0x59, 0x43, 0x4e,
+	0xce, 0xbb, 0x4e, 0x46, 0x6d, 0xae, 0x5a, 0x10,
+	0x73, 0xa6, 0x72, 0x76, 0x27, 0x09, 0x7a, 0x10,
+	0x49, 0xe6, 0x17, 0xd9, 0x1d, 0x36, 0x10, 0x94,
+	0xfa, 0x68, 0xf0, 0xff, 0x77, 0x98, 0x71, 0x30,
+	0x30, 0x5b, 0xea, 0xba, 0x2e, 0xda, 0x04, 0xdf,
+	0x99, 0x7b, 0x71, 0x4d, 0x6c, 0x6f, 0x2c, 0x29,
+	0xa6, 0xad, 0x5c, 0xb4, 0x02, 0x2b, 0x02, 0x70,
+	0x9b, 0xee, 0xad, 0x9d, 0x67, 0x89, 0x0c, 0xbb,
+	0x22, 0x39, 0x23, 0x36, 0xfe, 0xa1, 0x85, 0x1f,
+	0x38
+};
+static const u8 enc_assoc001[] __initconst = {
+	0xf3, 0x33, 0x88, 0x86, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x4e, 0x91
+};
+static const u8 enc_nonce001[] __initconst = {
+	0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
+};
+static const u8 enc_key001[] __initconst = {
+	0x1c, 0x92, 0x40, 0xa5, 0xeb, 0x55, 0xd3, 0x8a,
+	0xf3, 0x33, 0x88, 0x86, 0x04, 0xf6, 0xb5, 0xf0,
+	0x47, 0x39, 0x17, 0xc1, 0x40, 0x2b, 0x80, 0x09,
+	0x9d, 0xca, 0x5c, 0xbc, 0x20, 0x70, 0x75, 0xc0
+};
+
+static const u8 enc_input002[] __initconst = { };
+static const u8 enc_output002[] __initconst = {
+	0xea, 0xe0, 0x1e, 0x9e, 0x2c, 0x91, 0xaa, 0xe1,
+	0xdb, 0x5d, 0x99, 0x3f, 0x8a, 0xf7, 0x69, 0x92
+};
+static const u8 enc_assoc002[] __initconst = { };
+static const u8 enc_nonce002[] __initconst = {
+	0xca, 0xbf, 0x33, 0x71, 0x32, 0x45, 0x77, 0x8e
+};
+static const u8 enc_key002[] __initconst = {
+	0x4c, 0xf5, 0x96, 0x83, 0x38, 0xe6, 0xae, 0x7f,
+	0x2d, 0x29, 0x25, 0x76, 0xd5, 0x75, 0x27, 0x86,
+	0x91, 0x9a, 0x27, 0x7a, 0xfb, 0x46, 0xc5, 0xef,
+	0x94, 0x81, 0x79, 0x57, 0x14, 0x59, 0x40, 0x68
+};
+
+static const u8 enc_input003[] __initconst = { };
+static const u8 enc_output003[] __initconst = {
+	0xdd, 0x6b, 0x3b, 0x82, 0xce, 0x5a, 0xbd, 0xd6,
+	0xa9, 0x35, 0x83, 0xd8, 0x8c, 0x3d, 0x85, 0x77
+};
+static const u8 enc_assoc003[] __initconst = {
+	0x33, 0x10, 0x41, 0x12, 0x1f, 0xf3, 0xd2, 0x6b
+};
+static const u8 enc_nonce003[] __initconst = {
+	0x3d, 0x86, 0xb5, 0x6b, 0xc8, 0xa3, 0x1f, 0x1d
+};
+static const u8 enc_key003[] __initconst = {
+	0x2d, 0xb0, 0x5d, 0x40, 0xc8, 0xed, 0x44, 0x88,
+	0x34, 0xd1, 0x13, 0xaf, 0x57, 0xa1, 0xeb, 0x3a,
+	0x2a, 0x80, 0x51, 0x36, 0xec, 0x5b, 0xbc, 0x08,
+	0x93, 0x84, 0x21, 0xb5, 0x13, 0x88, 0x3c, 0x0d
+};
+
+static const u8 enc_input004[] __initconst = {
+	0xa4
+};
+static const u8 enc_output004[] __initconst = {
+	0xb7, 0x1b, 0xb0, 0x73, 0x59, 0xb0, 0x84, 0xb2,
+	0x6d, 0x8e, 0xab, 0x94, 0x31, 0xa1, 0xae, 0xac,
+	0x89
+};
+static const u8 enc_assoc004[] __initconst = {
+	0x6a, 0xe2, 0xad, 0x3f, 0x88, 0x39, 0x5a, 0x40
+};
+static const u8 enc_nonce004[] __initconst = {
+	0xd2, 0x32, 0x1f, 0x29, 0x28, 0xc6, 0xc4, 0xc4
+};
+static const u8 enc_key004[] __initconst = {
+	0x4b, 0x28, 0x4b, 0xa3, 0x7b, 0xbe, 0xe9, 0xf8,
+	0x31, 0x80, 0x82, 0xd7, 0xd8, 0xe8, 0xb5, 0xa1,
+	0xe2, 0x18, 0x18, 0x8a, 0x9c, 0xfa, 0xa3, 0x3d,
+	0x25, 0x71, 0x3e, 0x40, 0xbc, 0x54, 0x7a, 0x3e
+};
+
+static const u8 enc_input005[] __initconst = {
+	0x2d
+};
+static const u8 enc_output005[] __initconst = {
+	0xbf, 0xe1, 0x5b, 0x0b, 0xdb, 0x6b, 0xf5, 0x5e,
+	0x6c, 0x5d, 0x84, 0x44, 0x39, 0x81, 0xc1, 0x9c,
+	0xac
+};
+static const u8 enc_assoc005[] __initconst = { };
+static const u8 enc_nonce005[] __initconst = {
+	0x20, 0x1c, 0xaa, 0x5f, 0x9c, 0xbf, 0x92, 0x30
+};
+static const u8 enc_key005[] __initconst = {
+	0x66, 0xca, 0x9c, 0x23, 0x2a, 0x4b, 0x4b, 0x31,
+	0x0e, 0x92, 0x89, 0x8b, 0xf4, 0x93, 0xc7, 0x87,
+	0x98, 0xa3, 0xd8, 0x39, 0xf8, 0xf4, 0xa7, 0x01,
+	0xc0, 0x2e, 0x0a, 0xa6, 0x7e, 0x5a, 0x78, 0x87
+};
+
+static const u8 enc_input006[] __initconst = {
+	0x33, 0x2f, 0x94, 0xc1, 0xa4, 0xef, 0xcc, 0x2a,
+	0x5b, 0xa6, 0xe5, 0x8f, 0x1d, 0x40, 0xf0, 0x92,
+	0x3c, 0xd9, 0x24, 0x11, 0xa9, 0x71, 0xf9, 0x37,
+	0x14, 0x99, 0xfa, 0xbe, 0xe6, 0x80, 0xde, 0x50,
+	0xc9, 0x96, 0xd4, 0xb0, 0xec, 0x9e, 0x17, 0xec,
+	0xd2, 0x5e, 0x72, 0x99, 0xfc, 0x0a, 0xe1, 0xcb,
+	0x48, 0xd2, 0x85, 0xdd, 0x2f, 0x90, 0xe0, 0x66,
+	0x3b, 0xe6, 0x20, 0x74, 0xbe, 0x23, 0x8f, 0xcb,
+	0xb4, 0xe4, 0xda, 0x48, 0x40, 0xa6, 0xd1, 0x1b,
+	0xc7, 0x42, 0xce, 0x2f, 0x0c, 0xa6, 0x85, 0x6e,
+	0x87, 0x37, 0x03, 0xb1, 0x7c, 0x25, 0x96, 0xa3,
+	0x05, 0xd8, 0xb0, 0xf4, 0xed, 0xea, 0xc2, 0xf0,
+	0x31, 0x98, 0x6c, 0xd1, 0x14, 0x25, 0xc0, 0xcb,
+	0x01, 0x74, 0xd0, 0x82, 0xf4, 0x36, 0xf5, 0x41,
+	0xd5, 0xdc, 0xca, 0xc5, 0xbb, 0x98, 0xfe, 0xfc,
+	0x69, 0x21, 0x70, 0xd8, 0xa4, 0x4b, 0xc8, 0xde,
+	0x8f
+};
+static const u8 enc_output006[] __initconst = {
+	0x8b, 0x06, 0xd3, 0x31, 0xb0, 0x93, 0x45, 0xb1,
+	0x75, 0x6e, 0x26, 0xf9, 0x67, 0xbc, 0x90, 0x15,
+	0x81, 0x2c, 0xb5, 0xf0, 0xc6, 0x2b, 0xc7, 0x8c,
+	0x56, 0xd1, 0xbf, 0x69, 0x6c, 0x07, 0xa0, 0xda,
+	0x65, 0x27, 0xc9, 0x90, 0x3d, 0xef, 0x4b, 0x11,
+	0x0f, 0x19, 0x07, 0xfd, 0x29, 0x92, 0xd9, 0xc8,
+	0xf7, 0x99, 0x2e, 0x4a, 0xd0, 0xb8, 0x2c, 0xdc,
+	0x93, 0xf5, 0x9e, 0x33, 0x78, 0xd1, 0x37, 0xc3,
+	0x66, 0xd7, 0x5e, 0xbc, 0x44, 0xbf, 0x53, 0xa5,
+	0xbc, 0xc4, 0xcb, 0x7b, 0x3a, 0x8e, 0x7f, 0x02,
+	0xbd, 0xbb, 0xe7, 0xca, 0xa6, 0x6c, 0x6b, 0x93,
+	0x21, 0x93, 0x10, 0x61, 0xe7, 0x69, 0xd0, 0x78,
+	0xf3, 0x07, 0x5a, 0x1a, 0x8f, 0x73, 0xaa, 0xb1,
+	0x4e, 0xd3, 0xda, 0x4f, 0xf3, 0x32, 0xe1, 0x66,
+	0x3e, 0x6c, 0xc6, 0x13, 0xba, 0x06, 0x5b, 0xfc,
+	0x6a, 0xe5, 0x6f, 0x60, 0xfb, 0x07, 0x40, 0xb0,
+	0x8c, 0x9d, 0x84, 0x43, 0x6b, 0xc1, 0xf7, 0x8d,
+	0x8d, 0x31, 0xf7, 0x7a, 0x39, 0x4d, 0x8f, 0x9a,
+	0xeb
+};
+static const u8 enc_assoc006[] __initconst = {
+	0x70, 0xd3, 0x33, 0xf3, 0x8b, 0x18, 0x0b
+};
+static const u8 enc_nonce006[] __initconst = {
+	0xdf, 0x51, 0x84, 0x82, 0x42, 0x0c, 0x75, 0x9c
+};
+static const u8 enc_key006[] __initconst = {
+	0x68, 0x7b, 0x8d, 0x8e, 0xe3, 0xc4, 0xdd, 0xae,
+	0xdf, 0x72, 0x7f, 0x53, 0x72, 0x25, 0x1e, 0x78,
+	0x91, 0xcb, 0x69, 0x76, 0x1f, 0x49, 0x93, 0xf9,
+	0x6f, 0x21, 0xcc, 0x39, 0x9c, 0xad, 0xb1, 0x01
+};
+
+static const u8 enc_input007[] __initconst = {
+	0x9b, 0x18, 0xdb, 0xdd, 0x9a, 0x0f, 0x3e, 0xa5,
+	0x15, 0x17, 0xde, 0xdf, 0x08, 0x9d, 0x65, 0x0a,
+	0x67, 0x30, 0x12, 0xe2, 0x34, 0x77, 0x4b, 0xc1,
+	0xd9, 0xc6, 0x1f, 0xab, 0xc6, 0x18, 0x50, 0x17,
+	0xa7, 0x9d, 0x3c, 0xa6, 0xc5, 0x35, 0x8c, 0x1c,
+	0xc0, 0xa1, 0x7c, 0x9f, 0x03, 0x89, 0xca, 0xe1,
+	0xe6, 0xe9, 0xd4, 0xd3, 0x88, 0xdb, 0xb4, 0x51,
+	0x9d, 0xec, 0xb4, 0xfc, 0x52, 0xee, 0x6d, 0xf1,
+	0x75, 0x42, 0xc6, 0xfd, 0xbd, 0x7a, 0x8e, 0x86,
+	0xfc, 0x44, 0xb3, 0x4f, 0xf3, 0xea, 0x67, 0x5a,
+	0x41, 0x13, 0xba, 0xb0, 0xdc, 0xe1, 0xd3, 0x2a,
+	0x7c, 0x22, 0xb3, 0xca, 0xac, 0x6a, 0x37, 0x98,
+	0x3e, 0x1d, 0x40, 0x97, 0xf7, 0x9b, 0x1d, 0x36,
+	0x6b, 0xb3, 0x28, 0xbd, 0x60, 0x82, 0x47, 0x34,
+	0xaa, 0x2f, 0x7d, 0xe9, 0xa8, 0x70, 0x81, 0x57,
+	0xd4, 0xb9, 0x77, 0x0a, 0x9d, 0x29, 0xa7, 0x84,
+	0x52, 0x4f, 0xc2, 0x4a, 0x40, 0x3b, 0x3c, 0xd4,
+	0xc9, 0x2a, 0xdb, 0x4a, 0x53, 0xc4, 0xbe, 0x80,
+	0xe9, 0x51, 0x7f, 0x8f, 0xc7, 0xa2, 0xce, 0x82,
+	0x5c, 0x91, 0x1e, 0x74, 0xd9, 0xd0, 0xbd, 0xd5,
+	0xf3, 0xfd, 0xda, 0x4d, 0x25, 0xb4, 0xbb, 0x2d,
+	0xac, 0x2f, 0x3d, 0x71, 0x85, 0x7b, 0xcf, 0x3c,
+	0x7b, 0x3e, 0x0e, 0x22, 0x78, 0x0c, 0x29, 0xbf,
+	0xe4, 0xf4, 0x57, 0xb3, 0xcb, 0x49, 0xa0, 0xfc,
+	0x1e, 0x05, 0x4e, 0x16, 0xbc, 0xd5, 0xa8, 0xa3,
+	0xee, 0x05, 0x35, 0xc6, 0x7c, 0xab, 0x60, 0x14,
+	0x55, 0x1a, 0x8e, 0xc5, 0x88, 0x5d, 0xd5, 0x81,
+	0xc2, 0x81, 0xa5, 0xc4, 0x60, 0xdb, 0xaf, 0x77,
+	0x91, 0xe1, 0xce, 0xa2, 0x7e, 0x7f, 0x42, 0xe3,
+	0xb0, 0x13, 0x1c, 0x1f, 0x25, 0x60, 0x21, 0xe2,
+	0x40, 0x5f, 0x99, 0xb7, 0x73, 0xec, 0x9b, 0x2b,
+	0xf0, 0x65, 0x11, 0xc8, 0xd0, 0x0a, 0x9f, 0xd3
+};
+static const u8 enc_output007[] __initconst = {
+	0x85, 0x04, 0xc2, 0xed, 0x8d, 0xfd, 0x97, 0x5c,
+	0xd2, 0xb7, 0xe2, 0xc1, 0x6b, 0xa3, 0xba, 0xf8,
+	0xc9, 0x50, 0xc3, 0xc6, 0xa5, 0xe3, 0xa4, 0x7c,
+	0xc3, 0x23, 0x49, 0x5e, 0xa9, 0xb9, 0x32, 0xeb,
+	0x8a, 0x7c, 0xca, 0xe5, 0xec, 0xfb, 0x7c, 0xc0,
+	0xcb, 0x7d, 0xdc, 0x2c, 0x9d, 0x92, 0x55, 0x21,
+	0x0a, 0xc8, 0x43, 0x63, 0x59, 0x0a, 0x31, 0x70,
+	0x82, 0x67, 0x41, 0x03, 0xf8, 0xdf, 0xf2, 0xac,
+	0xa7, 0x02, 0xd4, 0xd5, 0x8a, 0x2d, 0xc8, 0x99,
+	0x19, 0x66, 0xd0, 0xf6, 0x88, 0x2c, 0x77, 0xd9,
+	0xd4, 0x0d, 0x6c, 0xbd, 0x98, 0xde, 0xe7, 0x7f,
+	0xad, 0x7e, 0x8a, 0xfb, 0xe9, 0x4b, 0xe5, 0xf7,
+	0xe5, 0x50, 0xa0, 0x90, 0x3f, 0xd6, 0x22, 0x53,
+	0xe3, 0xfe, 0x1b, 0xcc, 0x79, 0x3b, 0xec, 0x12,
+	0x47, 0x52, 0xa7, 0xd6, 0x04, 0xe3, 0x52, 0xe6,
+	0x93, 0x90, 0x91, 0x32, 0x73, 0x79, 0xb8, 0xd0,
+	0x31, 0xde, 0x1f, 0x9f, 0x2f, 0x05, 0x38, 0x54,
+	0x2f, 0x35, 0x04, 0x39, 0xe0, 0xa7, 0xba, 0xc6,
+	0x52, 0xf6, 0x37, 0x65, 0x4c, 0x07, 0xa9, 0x7e,
+	0xb3, 0x21, 0x6f, 0x74, 0x8c, 0xc9, 0xde, 0xdb,
+	0x65, 0x1b, 0x9b, 0xaa, 0x60, 0xb1, 0x03, 0x30,
+	0x6b, 0xb2, 0x03, 0xc4, 0x1c, 0x04, 0xf8, 0x0f,
+	0x64, 0xaf, 0x46, 0xe4, 0x65, 0x99, 0x49, 0xe2,
+	0xea, 0xce, 0x78, 0x00, 0xd8, 0x8b, 0xd5, 0x2e,
+	0xcf, 0xfc, 0x40, 0x49, 0xe8, 0x58, 0xdc, 0x34,
+	0x9c, 0x8c, 0x61, 0xbf, 0x0a, 0x8e, 0xec, 0x39,
+	0xa9, 0x30, 0x05, 0x5a, 0xd2, 0x56, 0x01, 0xc7,
+	0xda, 0x8f, 0x4e, 0xbb, 0x43, 0xa3, 0x3a, 0xf9,
+	0x15, 0x2a, 0xd0, 0xa0, 0x7a, 0x87, 0x34, 0x82,
+	0xfe, 0x8a, 0xd1, 0x2d, 0x5e, 0xc7, 0xbf, 0x04,
+	0x53, 0x5f, 0x3b, 0x36, 0xd4, 0x25, 0x5c, 0x34,
+	0x7a, 0x8d, 0xd5, 0x05, 0xce, 0x72, 0xca, 0xef,
+	0x7a, 0x4b, 0xbc, 0xb0, 0x10, 0x5c, 0x96, 0x42,
+	0x3a, 0x00, 0x98, 0xcd, 0x15, 0xe8, 0xb7, 0x53
+};
+static const u8 enc_assoc007[] __initconst = { };
+static const u8 enc_nonce007[] __initconst = {
+	0xde, 0x7b, 0xef, 0xc3, 0x65, 0x1b, 0x68, 0xb0
+};
+static const u8 enc_key007[] __initconst = {
+	0x8d, 0xb8, 0x91, 0x48, 0xf0, 0xe7, 0x0a, 0xbd,
+	0xf9, 0x3f, 0xcd, 0xd9, 0xa0, 0x1e, 0x42, 0x4c,
+	0xe7, 0xde, 0x25, 0x3d, 0xa3, 0xd7, 0x05, 0x80,
+	0x8d, 0xf2, 0x82, 0xac, 0x44, 0x16, 0x51, 0x01
+};
+
+static const u8 enc_input008[] __initconst = {
+	0xc3, 0x09, 0x94, 0x62, 0xe6, 0x46, 0x2e, 0x10,
+	0xbe, 0x00, 0xe4, 0xfc, 0xf3, 0x40, 0xa3, 0xe2,
+	0x0f, 0xc2, 0x8b, 0x28, 0xdc, 0xba, 0xb4, 0x3c,
+	0xe4, 0x21, 0x58, 0x61, 0xcd, 0x8b, 0xcd, 0xfb,
+	0xac, 0x94, 0xa1, 0x45, 0xf5, 0x1c, 0xe1, 0x12,
+	0xe0, 0x3b, 0x67, 0x21, 0x54, 0x5e, 0x8c, 0xaa,
+	0xcf, 0xdb, 0xb4, 0x51, 0xd4, 0x13, 0xda, 0xe6,
+	0x83, 0x89, 0xb6, 0x92, 0xe9, 0x21, 0x76, 0xa4,
+	0x93, 0x7d, 0x0e, 0xfd, 0x96, 0x36, 0x03, 0x91,
+	0x43, 0x5c, 0x92, 0x49, 0x62, 0x61, 0x7b, 0xeb,
+	0x43, 0x89, 0xb8, 0x12, 0x20, 0x43, 0xd4, 0x47,
+	0x06, 0x84, 0xee, 0x47, 0xe9, 0x8a, 0x73, 0x15,
+	0x0f, 0x72, 0xcf, 0xed, 0xce, 0x96, 0xb2, 0x7f,
+	0x21, 0x45, 0x76, 0xeb, 0x26, 0x28, 0x83, 0x6a,
+	0xad, 0xaa, 0xa6, 0x81, 0xd8, 0x55, 0xb1, 0xa3,
+	0x85, 0xb3, 0x0c, 0xdf, 0xf1, 0x69, 0x2d, 0x97,
+	0x05, 0x2a, 0xbc, 0x7c, 0x7b, 0x25, 0xf8, 0x80,
+	0x9d, 0x39, 0x25, 0xf3, 0x62, 0xf0, 0x66, 0x5e,
+	0xf4, 0xa0, 0xcf, 0xd8, 0xfd, 0x4f, 0xb1, 0x1f,
+	0x60, 0x3a, 0x08, 0x47, 0xaf, 0xe1, 0xf6, 0x10,
+	0x77, 0x09, 0xa7, 0x27, 0x8f, 0x9a, 0x97, 0x5a,
+	0x26, 0xfa, 0xfe, 0x41, 0x32, 0x83, 0x10, 0xe0,
+	0x1d, 0xbf, 0x64, 0x0d, 0xf4, 0x1c, 0x32, 0x35,
+	0xe5, 0x1b, 0x36, 0xef, 0xd4, 0x4a, 0x93, 0x4d,
+	0x00, 0x7c, 0xec, 0x02, 0x07, 0x8b, 0x5d, 0x7d,
+	0x1b, 0x0e, 0xd1, 0xa6, 0xa5, 0x5d, 0x7d, 0x57,
+	0x88, 0xa8, 0xcc, 0x81, 0xb4, 0x86, 0x4e, 0xb4,
+	0x40, 0xe9, 0x1d, 0xc3, 0xb1, 0x24, 0x3e, 0x7f,
+	0xcc, 0x8a, 0x24, 0x9b, 0xdf, 0x6d, 0xf0, 0x39,
+	0x69, 0x3e, 0x4c, 0xc0, 0x96, 0xe4, 0x13, 0xda,
+	0x90, 0xda, 0xf4, 0x95, 0x66, 0x8b, 0x17, 0x17,
+	0xfe, 0x39, 0x43, 0x25, 0xaa, 0xda, 0xa0, 0x43,
+	0x3c, 0xb1, 0x41, 0x02, 0xa3, 0xf0, 0xa7, 0x19,
+	0x59, 0xbc, 0x1d, 0x7d, 0x6c, 0x6d, 0x91, 0x09,
+	0x5c, 0xb7, 0x5b, 0x01, 0xd1, 0x6f, 0x17, 0x21,
+	0x97, 0xbf, 0x89, 0x71, 0xa5, 0xb0, 0x6e, 0x07,
+	0x45, 0xfd, 0x9d, 0xea, 0x07, 0xf6, 0x7a, 0x9f,
+	0x10, 0x18, 0x22, 0x30, 0x73, 0xac, 0xd4, 0x6b,
+	0x72, 0x44, 0xed, 0xd9, 0x19, 0x9b, 0x2d, 0x4a,
+	0x41, 0xdd, 0xd1, 0x85, 0x5e, 0x37, 0x19, 0xed,
+	0xd2, 0x15, 0x8f, 0x5e, 0x91, 0xdb, 0x33, 0xf2,
+	0xe4, 0xdb, 0xff, 0x98, 0xfb, 0xa3, 0xb5, 0xca,
+	0x21, 0x69, 0x08, 0xe7, 0x8a, 0xdf, 0x90, 0xff,
+	0x3e, 0xe9, 0x20, 0x86, 0x3c, 0xe9, 0xfc, 0x0b,
+	0xfe, 0x5c, 0x61, 0xaa, 0x13, 0x92, 0x7f, 0x7b,
+	0xec, 0xe0, 0x6d, 0xa8, 0x23, 0x22, 0xf6, 0x6b,
+	0x77, 0xc4, 0xfe, 0x40, 0x07, 0x3b, 0xb6, 0xf6,
+	0x8e, 0x5f, 0xd4, 0xb9, 0xb7, 0x0f, 0x21, 0x04,
+	0xef, 0x83, 0x63, 0x91, 0x69, 0x40, 0xa3, 0x48,
+	0x5c, 0xd2, 0x60, 0xf9, 0x4f, 0x6c, 0x47, 0x8b,
+	0x3b, 0xb1, 0x9f, 0x8e, 0xee, 0x16, 0x8a, 0x13,
+	0xfc, 0x46, 0x17, 0xc3, 0xc3, 0x32, 0x56, 0xf8,
+	0x3c, 0x85, 0x3a, 0xb6, 0x3e, 0xaa, 0x89, 0x4f,
+	0xb3, 0xdf, 0x38, 0xfd, 0xf1, 0xe4, 0x3a, 0xc0,
+	0xe6, 0x58, 0xb5, 0x8f, 0xc5, 0x29, 0xa2, 0x92,
+	0x4a, 0xb6, 0xa0, 0x34, 0x7f, 0xab, 0xb5, 0x8a,
+	0x90, 0xa1, 0xdb, 0x4d, 0xca, 0xb6, 0x2c, 0x41,
+	0x3c, 0xf7, 0x2b, 0x21, 0xc3, 0xfd, 0xf4, 0x17,
+	0x5c, 0xb5, 0x33, 0x17, 0x68, 0x2b, 0x08, 0x30,
+	0xf3, 0xf7, 0x30, 0x3c, 0x96, 0xe6, 0x6a, 0x20,
+	0x97, 0xe7, 0x4d, 0x10, 0x5f, 0x47, 0x5f, 0x49,
+	0x96, 0x09, 0xf0, 0x27, 0x91, 0xc8, 0xf8, 0x5a,
+	0x2e, 0x79, 0xb5, 0xe2, 0xb8, 0xe8, 0xb9, 0x7b,
+	0xd5, 0x10, 0xcb, 0xff, 0x5d, 0x14, 0x73, 0xf3
+};
+static const u8 enc_output008[] __initconst = {
+	0x14, 0xf6, 0x41, 0x37, 0xa6, 0xd4, 0x27, 0xcd,
+	0xdb, 0x06, 0x3e, 0x9a, 0x4e, 0xab, 0xd5, 0xb1,
+	0x1e, 0x6b, 0xd2, 0xbc, 0x11, 0xf4, 0x28, 0x93,
+	0x63, 0x54, 0xef, 0xbb, 0x5e, 0x1d, 0x3a, 0x1d,
+	0x37, 0x3c, 0x0a, 0x6c, 0x1e, 0xc2, 0xd1, 0x2c,
+	0xb5, 0xa3, 0xb5, 0x7b, 0xb8, 0x8f, 0x25, 0xa6,
+	0x1b, 0x61, 0x1c, 0xec, 0x28, 0x58, 0x26, 0xa4,
+	0xa8, 0x33, 0x28, 0x25, 0x5c, 0x45, 0x05, 0xe5,
+	0x6c, 0x99, 0xe5, 0x45, 0xc4, 0xa2, 0x03, 0x84,
+	0x03, 0x73, 0x1e, 0x8c, 0x49, 0xac, 0x20, 0xdd,
+	0x8d, 0xb3, 0xc4, 0xf5, 0xe7, 0x4f, 0xf1, 0xed,
+	0xa1, 0x98, 0xde, 0xa4, 0x96, 0xdd, 0x2f, 0xab,
+	0xab, 0x97, 0xcf, 0x3e, 0xd2, 0x9e, 0xb8, 0x13,
+	0x07, 0x28, 0x29, 0x19, 0xaf, 0xfd, 0xf2, 0x49,
+	0x43, 0xea, 0x49, 0x26, 0x91, 0xc1, 0x07, 0xd6,
+	0xbb, 0x81, 0x75, 0x35, 0x0d, 0x24, 0x7f, 0xc8,
+	0xda, 0xd4, 0xb7, 0xeb, 0xe8, 0x5c, 0x09, 0xa2,
+	0x2f, 0xdc, 0x28, 0x7d, 0x3a, 0x03, 0xfa, 0x94,
+	0xb5, 0x1d, 0x17, 0x99, 0x36, 0xc3, 0x1c, 0x18,
+	0x34, 0xe3, 0x9f, 0xf5, 0x55, 0x7c, 0xb0, 0x60,
+	0x9d, 0xff, 0xac, 0xd4, 0x61, 0xf2, 0xad, 0xf8,
+	0xce, 0xc7, 0xbe, 0x5c, 0xd2, 0x95, 0xa8, 0x4b,
+	0x77, 0x13, 0x19, 0x59, 0x26, 0xc9, 0xb7, 0x8f,
+	0x6a, 0xcb, 0x2d, 0x37, 0x91, 0xea, 0x92, 0x9c,
+	0x94, 0x5b, 0xda, 0x0b, 0xce, 0xfe, 0x30, 0x20,
+	0xf8, 0x51, 0xad, 0xf2, 0xbe, 0xe7, 0xc7, 0xff,
+	0xb3, 0x33, 0x91, 0x6a, 0xc9, 0x1a, 0x41, 0xc9,
+	0x0f, 0xf3, 0x10, 0x0e, 0xfd, 0x53, 0xff, 0x6c,
+	0x16, 0x52, 0xd9, 0xf3, 0xf7, 0x98, 0x2e, 0xc9,
+	0x07, 0x31, 0x2c, 0x0c, 0x72, 0xd7, 0xc5, 0xc6,
+	0x08, 0x2a, 0x7b, 0xda, 0xbd, 0x7e, 0x02, 0xea,
+	0x1a, 0xbb, 0xf2, 0x04, 0x27, 0x61, 0x28, 0x8e,
+	0xf5, 0x04, 0x03, 0x1f, 0x4c, 0x07, 0x55, 0x82,
+	0xec, 0x1e, 0xd7, 0x8b, 0x2f, 0x65, 0x56, 0xd1,
+	0xd9, 0x1e, 0x3c, 0xe9, 0x1f, 0x5e, 0x98, 0x70,
+	0x38, 0x4a, 0x8c, 0x49, 0xc5, 0x43, 0xa0, 0xa1,
+	0x8b, 0x74, 0x9d, 0x4c, 0x62, 0x0d, 0x10, 0x0c,
+	0xf4, 0x6c, 0x8f, 0xe0, 0xaa, 0x9a, 0x8d, 0xb7,
+	0xe0, 0xbe, 0x4c, 0x87, 0xf1, 0x98, 0x2f, 0xcc,
+	0xed, 0xc0, 0x52, 0x29, 0xdc, 0x83, 0xf8, 0xfc,
+	0x2c, 0x0e, 0xa8, 0x51, 0x4d, 0x80, 0x0d, 0xa3,
+	0xfe, 0xd8, 0x37, 0xe7, 0x41, 0x24, 0xfc, 0xfb,
+	0x75, 0xe3, 0x71, 0x7b, 0x57, 0x45, 0xf5, 0x97,
+	0x73, 0x65, 0x63, 0x14, 0x74, 0xb8, 0x82, 0x9f,
+	0xf8, 0x60, 0x2f, 0x8a, 0xf2, 0x4e, 0xf1, 0x39,
+	0xda, 0x33, 0x91, 0xf8, 0x36, 0xe0, 0x8d, 0x3f,
+	0x1f, 0x3b, 0x56, 0xdc, 0xa0, 0x8f, 0x3c, 0x9d,
+	0x71, 0x52, 0xa7, 0xb8, 0xc0, 0xa5, 0xc6, 0xa2,
+	0x73, 0xda, 0xf4, 0x4b, 0x74, 0x5b, 0x00, 0x3d,
+	0x99, 0xd7, 0x96, 0xba, 0xe6, 0xe1, 0xa6, 0x96,
+	0x38, 0xad, 0xb3, 0xc0, 0xd2, 0xba, 0x91, 0x6b,
+	0xf9, 0x19, 0xdd, 0x3b, 0xbe, 0xbe, 0x9c, 0x20,
+	0x50, 0xba, 0xa1, 0xd0, 0xce, 0x11, 0xbd, 0x95,
+	0xd8, 0xd1, 0xdd, 0x33, 0x85, 0x74, 0xdc, 0xdb,
+	0x66, 0x76, 0x44, 0xdc, 0x03, 0x74, 0x48, 0x35,
+	0x98, 0xb1, 0x18, 0x47, 0x94, 0x7d, 0xff, 0x62,
+	0xe4, 0x58, 0x78, 0xab, 0xed, 0x95, 0x36, 0xd9,
+	0x84, 0x91, 0x82, 0x64, 0x41, 0xbb, 0x58, 0xe6,
+	0x1c, 0x20, 0x6d, 0x15, 0x6b, 0x13, 0x96, 0xe8,
+	0x35, 0x7f, 0xdc, 0x40, 0x2c, 0xe9, 0xbc, 0x8a,
+	0x4f, 0x92, 0xec, 0x06, 0x2d, 0x50, 0xdf, 0x93,
+	0x5d, 0x65, 0x5a, 0xa8, 0xfc, 0x20, 0x50, 0x14,
+	0xa9, 0x8a, 0x7e, 0x1d, 0x08, 0x1f, 0xe2, 0x99,
+	0xd0, 0xbe, 0xfb, 0x3a, 0x21, 0x9d, 0xad, 0x86,
+	0x54, 0xfd, 0x0d, 0x98, 0x1c, 0x5a, 0x6f, 0x1f,
+	0x9a, 0x40, 0xcd, 0xa2, 0xff, 0x6a, 0xf1, 0x54
+};
+static const u8 enc_assoc008[] __initconst = { };
+static const u8 enc_nonce008[] __initconst = {
+	0x0e, 0x0d, 0x57, 0xbb, 0x7b, 0x40, 0x54, 0x02
+};
+static const u8 enc_key008[] __initconst = {
+	0xf2, 0xaa, 0x4f, 0x99, 0xfd, 0x3e, 0xa8, 0x53,
+	0xc1, 0x44, 0xe9, 0x81, 0x18, 0xdc, 0xf5, 0xf0,
+	0x3e, 0x44, 0x15, 0x59, 0xe0, 0xc5, 0x44, 0x86,
+	0xc3, 0x91, 0xa8, 0x75, 0xc0, 0x12, 0x46, 0xba
+};
+
+static const u8 enc_input009[] __initconst = {
+	0xe6, 0xc3, 0xdb, 0x63, 0x55, 0x15, 0xe3, 0x5b,
+	0xb7, 0x4b, 0x27, 0x8b, 0x5a, 0xdd, 0xc2, 0xe8,
+	0x3a, 0x6b, 0xd7, 0x81, 0x96, 0x35, 0x97, 0xca,
+	0xd7, 0x68, 0xe8, 0xef, 0xce, 0xab, 0xda, 0x09,
+	0x6e, 0xd6, 0x8e, 0xcb, 0x55, 0xb5, 0xe1, 0xe5,
+	0x57, 0xfd, 0xc4, 0xe3, 0xe0, 0x18, 0x4f, 0x85,
+	0xf5, 0x3f, 0x7e, 0x4b, 0x88, 0xc9, 0x52, 0x44,
+	0x0f, 0xea, 0xaf, 0x1f, 0x71, 0x48, 0x9f, 0x97,
+	0x6d, 0xb9, 0x6f, 0x00, 0xa6, 0xde, 0x2b, 0x77,
+	0x8b, 0x15, 0xad, 0x10, 0xa0, 0x2b, 0x7b, 0x41,
+	0x90, 0x03, 0x2d, 0x69, 0xae, 0xcc, 0x77, 0x7c,
+	0xa5, 0x9d, 0x29, 0x22, 0xc2, 0xea, 0xb4, 0x00,
+	0x1a, 0xd2, 0x7a, 0x98, 0x8a, 0xf9, 0xf7, 0x82,
+	0xb0, 0xab, 0xd8, 0xa6, 0x94, 0x8d, 0x58, 0x2f,
+	0x01, 0x9e, 0x00, 0x20, 0xfc, 0x49, 0xdc, 0x0e,
+	0x03, 0xe8, 0x45, 0x10, 0xd6, 0xa8, 0xda, 0x55,
+	0x10, 0x9a, 0xdf, 0x67, 0x22, 0x8b, 0x43, 0xab,
+	0x00, 0xbb, 0x02, 0xc8, 0xdd, 0x7b, 0x97, 0x17,
+	0xd7, 0x1d, 0x9e, 0x02, 0x5e, 0x48, 0xde, 0x8e,
+	0xcf, 0x99, 0x07, 0x95, 0x92, 0x3c, 0x5f, 0x9f,
+	0xc5, 0x8a, 0xc0, 0x23, 0xaa, 0xd5, 0x8c, 0x82,
+	0x6e, 0x16, 0x92, 0xb1, 0x12, 0x17, 0x07, 0xc3,
+	0xfb, 0x36, 0xf5, 0x6c, 0x35, 0xd6, 0x06, 0x1f,
+	0x9f, 0xa7, 0x94, 0xa2, 0x38, 0x63, 0x9c, 0xb0,
+	0x71, 0xb3, 0xa5, 0xd2, 0xd8, 0xba, 0x9f, 0x08,
+	0x01, 0xb3, 0xff, 0x04, 0x97, 0x73, 0x45, 0x1b,
+	0xd5, 0xa9, 0x9c, 0x80, 0xaf, 0x04, 0x9a, 0x85,
+	0xdb, 0x32, 0x5b, 0x5d, 0x1a, 0xc1, 0x36, 0x28,
+	0x10, 0x79, 0xf1, 0x3c, 0xbf, 0x1a, 0x41, 0x5c,
+	0x4e, 0xdf, 0xb2, 0x7c, 0x79, 0x3b, 0x7a, 0x62,
+	0x3d, 0x4b, 0xc9, 0x9b, 0x2a, 0x2e, 0x7c, 0xa2,
+	0xb1, 0x11, 0x98, 0xa7, 0x34, 0x1a, 0x00, 0xf3,
+	0xd1, 0xbc, 0x18, 0x22, 0xba, 0x02, 0x56, 0x62,
+	0x31, 0x10, 0x11, 0x6d, 0xe0, 0x54, 0x9d, 0x40,
+	0x1f, 0x26, 0x80, 0x41, 0xca, 0x3f, 0x68, 0x0f,
+	0x32, 0x1d, 0x0a, 0x8e, 0x79, 0xd8, 0xa4, 0x1b,
+	0x29, 0x1c, 0x90, 0x8e, 0xc5, 0xe3, 0xb4, 0x91,
+	0x37, 0x9a, 0x97, 0x86, 0x99, 0xd5, 0x09, 0xc5,
+	0xbb, 0xa3, 0x3f, 0x21, 0x29, 0x82, 0x14, 0x5c,
+	0xab, 0x25, 0xfb, 0xf2, 0x4f, 0x58, 0x26, 0xd4,
+	0x83, 0xaa, 0x66, 0x89, 0x67, 0x7e, 0xc0, 0x49,
+	0xe1, 0x11, 0x10, 0x7f, 0x7a, 0xda, 0x29, 0x04,
+	0xff, 0xf0, 0xcb, 0x09, 0x7c, 0x9d, 0xfa, 0x03,
+	0x6f, 0x81, 0x09, 0x31, 0x60, 0xfb, 0x08, 0xfa,
+	0x74, 0xd3, 0x64, 0x44, 0x7c, 0x55, 0x85, 0xec,
+	0x9c, 0x6e, 0x25, 0xb7, 0x6c, 0xc5, 0x37, 0xb6,
+	0x83, 0x87, 0x72, 0x95, 0x8b, 0x9d, 0xe1, 0x69,
+	0x5c, 0x31, 0x95, 0x42, 0xa6, 0x2c, 0xd1, 0x36,
+	0x47, 0x1f, 0xec, 0x54, 0xab, 0xa2, 0x1c, 0xd8,
+	0x00, 0xcc, 0xbc, 0x0d, 0x65, 0xe2, 0x67, 0xbf,
+	0xbc, 0xea, 0xee, 0x9e, 0xe4, 0x36, 0x95, 0xbe,
+	0x73, 0xd9, 0xa6, 0xd9, 0x0f, 0xa0, 0xcc, 0x82,
+	0x76, 0x26, 0xad, 0x5b, 0x58, 0x6c, 0x4e, 0xab,
+	0x29, 0x64, 0xd3, 0xd9, 0xa9, 0x08, 0x8c, 0x1d,
+	0xa1, 0x4f, 0x80, 0xd8, 0x3f, 0x94, 0xfb, 0xd3,
+	0x7b, 0xfc, 0xd1, 0x2b, 0xc3, 0x21, 0xeb, 0xe5,
+	0x1c, 0x84, 0x23, 0x7f, 0x4b, 0xfa, 0xdb, 0x34,
+	0x18, 0xa2, 0xc2, 0xe5, 0x13, 0xfe, 0x6c, 0x49,
+	0x81, 0xd2, 0x73, 0xe7, 0xe2, 0xd7, 0xe4, 0x4f,
+	0x4b, 0x08, 0x6e, 0xb1, 0x12, 0x22, 0x10, 0x9d,
+	0xac, 0x51, 0x1e, 0x17, 0xd9, 0x8a, 0x0b, 0x42,
+	0x88, 0x16, 0x81, 0x37, 0x7c, 0x6a, 0xf7, 0xef,
+	0x2d, 0xe3, 0xd9, 0xf8, 0x5f, 0xe0, 0x53, 0x27,
+	0x74, 0xb9, 0xe2, 0xd6, 0x1c, 0x80, 0x2c, 0x52,
+	0x65
+};
+static const u8 enc_output009[] __initconst = {
+	0xfd, 0x81, 0x8d, 0xd0, 0x3d, 0xb4, 0xd5, 0xdf,
+	0xd3, 0x42, 0x47, 0x5a, 0x6d, 0x19, 0x27, 0x66,
+	0x4b, 0x2e, 0x0c, 0x27, 0x9c, 0x96, 0x4c, 0x72,
+	0x02, 0xa3, 0x65, 0xc3, 0xb3, 0x6f, 0x2e, 0xbd,
+	0x63, 0x8a, 0x4a, 0x5d, 0x29, 0xa2, 0xd0, 0x28,
+	0x48, 0xc5, 0x3d, 0x98, 0xa3, 0xbc, 0xe0, 0xbe,
+	0x3b, 0x3f, 0xe6, 0x8a, 0xa4, 0x7f, 0x53, 0x06,
+	0xfa, 0x7f, 0x27, 0x76, 0x72, 0x31, 0xa1, 0xf5,
+	0xd6, 0x0c, 0x52, 0x47, 0xba, 0xcd, 0x4f, 0xd7,
+	0xeb, 0x05, 0x48, 0x0d, 0x7c, 0x35, 0x4a, 0x09,
+	0xc9, 0x76, 0x71, 0x02, 0xa3, 0xfb, 0xb7, 0x1a,
+	0x65, 0xb7, 0xed, 0x98, 0xc6, 0x30, 0x8a, 0x00,
+	0xae, 0xa1, 0x31, 0xe5, 0xb5, 0x9e, 0x6d, 0x62,
+	0xda, 0xda, 0x07, 0x0f, 0x38, 0x38, 0xd3, 0xcb,
+	0xc1, 0xb0, 0xad, 0xec, 0x72, 0xec, 0xb1, 0xa2,
+	0x7b, 0x59, 0xf3, 0x3d, 0x2b, 0xef, 0xcd, 0x28,
+	0x5b, 0x83, 0xcc, 0x18, 0x91, 0x88, 0xb0, 0x2e,
+	0xf9, 0x29, 0x31, 0x18, 0xf9, 0x4e, 0xe9, 0x0a,
+	0x91, 0x92, 0x9f, 0xae, 0x2d, 0xad, 0xf4, 0xe6,
+	0x1a, 0xe2, 0xa4, 0xee, 0x47, 0x15, 0xbf, 0x83,
+	0x6e, 0xd7, 0x72, 0x12, 0x3b, 0x2d, 0x24, 0xe9,
+	0xb2, 0x55, 0xcb, 0x3c, 0x10, 0xf0, 0x24, 0x8a,
+	0x4a, 0x02, 0xea, 0x90, 0x25, 0xf0, 0xb4, 0x79,
+	0x3a, 0xef, 0x6e, 0xf5, 0x52, 0xdf, 0xb0, 0x0a,
+	0xcd, 0x24, 0x1c, 0xd3, 0x2e, 0x22, 0x74, 0xea,
+	0x21, 0x6f, 0xe9, 0xbd, 0xc8, 0x3e, 0x36, 0x5b,
+	0x19, 0xf1, 0xca, 0x99, 0x0a, 0xb4, 0xa7, 0x52,
+	0x1a, 0x4e, 0xf2, 0xad, 0x8d, 0x56, 0x85, 0xbb,
+	0x64, 0x89, 0xba, 0x26, 0xf9, 0xc7, 0xe1, 0x89,
+	0x19, 0x22, 0x77, 0xc3, 0xa8, 0xfc, 0xff, 0xad,
+	0xfe, 0xb9, 0x48, 0xae, 0x12, 0x30, 0x9f, 0x19,
+	0xfb, 0x1b, 0xef, 0x14, 0x87, 0x8a, 0x78, 0x71,
+	0xf3, 0xf4, 0xb7, 0x00, 0x9c, 0x1d, 0xb5, 0x3d,
+	0x49, 0x00, 0x0c, 0x06, 0xd4, 0x50, 0xf9, 0x54,
+	0x45, 0xb2, 0x5b, 0x43, 0xdb, 0x6d, 0xcf, 0x1a,
+	0xe9, 0x7a, 0x7a, 0xcf, 0xfc, 0x8a, 0x4e, 0x4d,
+	0x0b, 0x07, 0x63, 0x28, 0xd8, 0xe7, 0x08, 0x95,
+	0xdf, 0xa6, 0x72, 0x93, 0x2e, 0xbb, 0xa0, 0x42,
+	0x89, 0x16, 0xf1, 0xd9, 0x0c, 0xf9, 0xa1, 0x16,
+	0xfd, 0xd9, 0x03, 0xb4, 0x3b, 0x8a, 0xf5, 0xf6,
+	0xe7, 0x6b, 0x2e, 0x8e, 0x4c, 0x3d, 0xe2, 0xaf,
+	0x08, 0x45, 0x03, 0xff, 0x09, 0xb6, 0xeb, 0x2d,
+	0xc6, 0x1b, 0x88, 0x94, 0xac, 0x3e, 0xf1, 0x9f,
+	0x0e, 0x0e, 0x2b, 0xd5, 0x00, 0x4d, 0x3f, 0x3b,
+	0x53, 0xae, 0xaf, 0x1c, 0x33, 0x5f, 0x55, 0x6e,
+	0x8d, 0xaf, 0x05, 0x7a, 0x10, 0x34, 0xc9, 0xf4,
+	0x66, 0xcb, 0x62, 0x12, 0xa6, 0xee, 0xe8, 0x1c,
+	0x5d, 0x12, 0x86, 0xdb, 0x6f, 0x1c, 0x33, 0xc4,
+	0x1c, 0xda, 0x82, 0x2d, 0x3b, 0x59, 0xfe, 0xb1,
+	0xa4, 0x59, 0x41, 0x86, 0xd0, 0xef, 0xae, 0xfb,
+	0xda, 0x6d, 0x11, 0xb8, 0xca, 0xe9, 0x6e, 0xff,
+	0xf7, 0xa9, 0xd9, 0x70, 0x30, 0xfc, 0x53, 0xe2,
+	0xd7, 0xa2, 0x4e, 0xc7, 0x91, 0xd9, 0x07, 0x06,
+	0xaa, 0xdd, 0xb0, 0x59, 0x28, 0x1d, 0x00, 0x66,
+	0xc5, 0x54, 0xc2, 0xfc, 0x06, 0xda, 0x05, 0x90,
+	0x52, 0x1d, 0x37, 0x66, 0xee, 0xf0, 0xb2, 0x55,
+	0x8a, 0x5d, 0xd2, 0x38, 0x86, 0x94, 0x9b, 0xfc,
+	0x10, 0x4c, 0xa1, 0xb9, 0x64, 0x3e, 0x44, 0xb8,
+	0x5f, 0xb0, 0x0c, 0xec, 0xe0, 0xc9, 0xe5, 0x62,
+	0x75, 0x3f, 0x09, 0xd5, 0xf5, 0xd9, 0x26, 0xba,
+	0x9e, 0xd2, 0xf4, 0xb9, 0x48, 0x0a, 0xbc, 0xa2,
+	0xd6, 0x7c, 0x36, 0x11, 0x7d, 0x26, 0x81, 0x89,
+	0xcf, 0xa4, 0xad, 0x73, 0x0e, 0xee, 0xcc, 0x06,
+	0xa9, 0xdb, 0xb1, 0xfd, 0xfb, 0x09, 0x7f, 0x90,
+	0x42, 0x37, 0x2f, 0xe1, 0x9c, 0x0f, 0x6f, 0xcf,
+	0x43, 0xb5, 0xd9, 0x90, 0xe1, 0x85, 0xf5, 0xa8,
+	0xae
+};
+static const u8 enc_assoc009[] __initconst = {
+	0x5a, 0x27, 0xff, 0xeb, 0xdf, 0x84, 0xb2, 0x9e,
+	0xef
+};
+static const u8 enc_nonce009[] __initconst = {
+	0xef, 0x2d, 0x63, 0xee, 0x6b, 0x80, 0x8b, 0x78
+};
+static const u8 enc_key009[] __initconst = {
+	0xea, 0xbc, 0x56, 0x99, 0xe3, 0x50, 0xff, 0xc5,
+	0xcc, 0x1a, 0xd7, 0xc1, 0x57, 0x72, 0xea, 0x86,
+	0x5b, 0x89, 0x88, 0x61, 0x3d, 0x2f, 0x9b, 0xb2,
+	0xe7, 0x9c, 0xec, 0x74, 0x6e, 0x3e, 0xf4, 0x3b
+};
+
+static const u8 enc_input010[] __initconst = {
+	0x42, 0x93, 0xe4, 0xeb, 0x97, 0xb0, 0x57, 0xbf,
+	0x1a, 0x8b, 0x1f, 0xe4, 0x5f, 0x36, 0x20, 0x3c,
+	0xef, 0x0a, 0xa9, 0x48, 0x5f, 0x5f, 0x37, 0x22,
+	0x3a, 0xde, 0xe3, 0xae, 0xbe, 0xad, 0x07, 0xcc,
+	0xb1, 0xf6, 0xf5, 0xf9, 0x56, 0xdd, 0xe7, 0x16,
+	0x1e, 0x7f, 0xdf, 0x7a, 0x9e, 0x75, 0xb7, 0xc7,
+	0xbe, 0xbe, 0x8a, 0x36, 0x04, 0xc0, 0x10, 0xf4,
+	0x95, 0x20, 0x03, 0xec, 0xdc, 0x05, 0xa1, 0x7d,
+	0xc4, 0xa9, 0x2c, 0x82, 0xd0, 0xbc, 0x8b, 0xc5,
+	0xc7, 0x45, 0x50, 0xf6, 0xa2, 0x1a, 0xb5, 0x46,
+	0x3b, 0x73, 0x02, 0xa6, 0x83, 0x4b, 0x73, 0x82,
+	0x58, 0x5e, 0x3b, 0x65, 0x2f, 0x0e, 0xfd, 0x2b,
+	0x59, 0x16, 0xce, 0xa1, 0x60, 0x9c, 0xe8, 0x3a,
+	0x99, 0xed, 0x8d, 0x5a, 0xcf, 0xf6, 0x83, 0xaf,
+	0xba, 0xd7, 0x73, 0x73, 0x40, 0x97, 0x3d, 0xca,
+	0xef, 0x07, 0x57, 0xe6, 0xd9, 0x70, 0x0e, 0x95,
+	0xae, 0xa6, 0x8d, 0x04, 0xcc, 0xee, 0xf7, 0x09,
+	0x31, 0x77, 0x12, 0xa3, 0x23, 0x97, 0x62, 0xb3,
+	0x7b, 0x32, 0xfb, 0x80, 0x14, 0x48, 0x81, 0xc3,
+	0xe5, 0xea, 0x91, 0x39, 0x52, 0x81, 0xa2, 0x4f,
+	0xe4, 0xb3, 0x09, 0xff, 0xde, 0x5e, 0xe9, 0x58,
+	0x84, 0x6e, 0xf9, 0x3d, 0xdf, 0x25, 0xea, 0xad,
+	0xae, 0xe6, 0x9a, 0xd1, 0x89, 0x55, 0xd3, 0xde,
+	0x6c, 0x52, 0xdb, 0x70, 0xfe, 0x37, 0xce, 0x44,
+	0x0a, 0xa8, 0x25, 0x5f, 0x92, 0xc1, 0x33, 0x4a,
+	0x4f, 0x9b, 0x62, 0x35, 0xff, 0xce, 0xc0, 0xa9,
+	0x60, 0xce, 0x52, 0x00, 0x97, 0x51, 0x35, 0x26,
+	0x2e, 0xb9, 0x36, 0xa9, 0x87, 0x6e, 0x1e, 0xcc,
+	0x91, 0x78, 0x53, 0x98, 0x86, 0x5b, 0x9c, 0x74,
+	0x7d, 0x88, 0x33, 0xe1, 0xdf, 0x37, 0x69, 0x2b,
+	0xbb, 0xf1, 0x4d, 0xf4, 0xd1, 0xf1, 0x39, 0x93,
+	0x17, 0x51, 0x19, 0xe3, 0x19, 0x1e, 0x76, 0x37,
+	0x25, 0xfb, 0x09, 0x27, 0x6a, 0xab, 0x67, 0x6f,
+	0x14, 0x12, 0x64, 0xe7, 0xc4, 0x07, 0xdf, 0x4d,
+	0x17, 0xbb, 0x6d, 0xe0, 0xe9, 0xb9, 0xab, 0xca,
+	0x10, 0x68, 0xaf, 0x7e, 0xb7, 0x33, 0x54, 0x73,
+	0x07, 0x6e, 0xf7, 0x81, 0x97, 0x9c, 0x05, 0x6f,
+	0x84, 0x5f, 0xd2, 0x42, 0xfb, 0x38, 0xcf, 0xd1,
+	0x2f, 0x14, 0x30, 0x88, 0x98, 0x4d, 0x5a, 0xa9,
+	0x76, 0xd5, 0x4f, 0x3e, 0x70, 0x6c, 0x85, 0x76,
+	0xd7, 0x01, 0xa0, 0x1a, 0xc8, 0x4e, 0xaa, 0xac,
+	0x78, 0xfe, 0x46, 0xde, 0x6a, 0x05, 0x46, 0xa7,
+	0x43, 0x0c, 0xb9, 0xde, 0xb9, 0x68, 0xfb, 0xce,
+	0x42, 0x99, 0x07, 0x4d, 0x0b, 0x3b, 0x5a, 0x30,
+	0x35, 0xa8, 0xf9, 0x3a, 0x73, 0xef, 0x0f, 0xdb,
+	0x1e, 0x16, 0x42, 0xc4, 0xba, 0xae, 0x58, 0xaa,
+	0xf8, 0xe5, 0x75, 0x2f, 0x1b, 0x15, 0x5c, 0xfd,
+	0x0a, 0x97, 0xd0, 0xe4, 0x37, 0x83, 0x61, 0x5f,
+	0x43, 0xa6, 0xc7, 0x3f, 0x38, 0x59, 0xe6, 0xeb,
+	0xa3, 0x90, 0xc3, 0xaa, 0xaa, 0x5a, 0xd3, 0x34,
+	0xd4, 0x17, 0xc8, 0x65, 0x3e, 0x57, 0xbc, 0x5e,
+	0xdd, 0x9e, 0xb7, 0xf0, 0x2e, 0x5b, 0xb2, 0x1f,
+	0x8a, 0x08, 0x0d, 0x45, 0x91, 0x0b, 0x29, 0x53,
+	0x4f, 0x4c, 0x5a, 0x73, 0x56, 0xfe, 0xaf, 0x41,
+	0x01, 0x39, 0x0a, 0x24, 0x3c, 0x7e, 0xbe, 0x4e,
+	0x53, 0xf3, 0xeb, 0x06, 0x66, 0x51, 0x28, 0x1d,
+	0xbd, 0x41, 0x0a, 0x01, 0xab, 0x16, 0x47, 0x27,
+	0x47, 0x47, 0xf7, 0xcb, 0x46, 0x0a, 0x70, 0x9e,
+	0x01, 0x9c, 0x09, 0xe1, 0x2a, 0x00, 0x1a, 0xd8,
+	0xd4, 0x79, 0x9d, 0x80, 0x15, 0x8e, 0x53, 0x2a,
+	0x65, 0x83, 0x78, 0x3e, 0x03, 0x00, 0x07, 0x12,
+	0x1f, 0x33, 0x3e, 0x7b, 0x13, 0x37, 0xf1, 0xc3,
+	0xef, 0xb7, 0xc1, 0x20, 0x3c, 0x3e, 0x67, 0x66,
+	0x5d, 0x88, 0xa7, 0x7d, 0x33, 0x50, 0x77, 0xb0,
+	0x28, 0x8e, 0xe7, 0x2c, 0x2e, 0x7a, 0xf4, 0x3c,
+	0x8d, 0x74, 0x83, 0xaf, 0x8e, 0x87, 0x0f, 0xe4,
+	0x50, 0xff, 0x84, 0x5c, 0x47, 0x0c, 0x6a, 0x49,
+	0xbf, 0x42, 0x86, 0x77, 0x15, 0x48, 0xa5, 0x90,
+	0x5d, 0x93, 0xd6, 0x2a, 0x11, 0xd5, 0xd5, 0x11,
+	0xaa, 0xce, 0xe7, 0x6f, 0xa5, 0xb0, 0x09, 0x2c,
+	0x8d, 0xd3, 0x92, 0xf0, 0x5a, 0x2a, 0xda, 0x5b,
+	0x1e, 0xd5, 0x9a, 0xc4, 0xc4, 0xf3, 0x49, 0x74,
+	0x41, 0xca, 0xe8, 0xc1, 0xf8, 0x44, 0xd6, 0x3c,
+	0xae, 0x6c, 0x1d, 0x9a, 0x30, 0x04, 0x4d, 0x27,
+	0x0e, 0xb1, 0x5f, 0x59, 0xa2, 0x24, 0xe8, 0xe1,
+	0x98, 0xc5, 0x6a, 0x4c, 0xfe, 0x41, 0xd2, 0x27,
+	0x42, 0x52, 0xe1, 0xe9, 0x7d, 0x62, 0xe4, 0x88,
+	0x0f, 0xad, 0xb2, 0x70, 0xcb, 0x9d, 0x4c, 0x27,
+	0x2e, 0x76, 0x1e, 0x1a, 0x63, 0x65, 0xf5, 0x3b,
+	0xf8, 0x57, 0x69, 0xeb, 0x5b, 0x38, 0x26, 0x39,
+	0x33, 0x25, 0x45, 0x3e, 0x91, 0xb8, 0xd8, 0xc7,
+	0xd5, 0x42, 0xc0, 0x22, 0x31, 0x74, 0xf4, 0xbc,
+	0x0c, 0x23, 0xf1, 0xca, 0xc1, 0x8d, 0xd7, 0xbe,
+	0xc9, 0x62, 0xe4, 0x08, 0x1a, 0xcf, 0x36, 0xd5,
+	0xfe, 0x55, 0x21, 0x59, 0x91, 0x87, 0x87, 0xdf,
+	0x06, 0xdb, 0xdf, 0x96, 0x45, 0x58, 0xda, 0x05,
+	0xcd, 0x50, 0x4d, 0xd2, 0x7d, 0x05, 0x18, 0x73,
+	0x6a, 0x8d, 0x11, 0x85, 0xa6, 0x88, 0xe8, 0xda,
+	0xe6, 0x30, 0x33, 0xa4, 0x89, 0x31, 0x75, 0xbe,
+	0x69, 0x43, 0x84, 0x43, 0x50, 0x87, 0xdd, 0x71,
+	0x36, 0x83, 0xc3, 0x78, 0x74, 0x24, 0x0a, 0xed,
+	0x7b, 0xdb, 0xa4, 0x24, 0x0b, 0xb9, 0x7e, 0x5d,
+	0xff, 0xde, 0xb1, 0xef, 0x61, 0x5a, 0x45, 0x33,
+	0xf6, 0x17, 0x07, 0x08, 0x98, 0x83, 0x92, 0x0f,
+	0x23, 0x6d, 0xe6, 0xaa, 0x17, 0x54, 0xad, 0x6a,
+	0xc8, 0xdb, 0x26, 0xbe, 0xb8, 0xb6, 0x08, 0xfa,
+	0x68, 0xf1, 0xd7, 0x79, 0x6f, 0x18, 0xb4, 0x9e,
+	0x2d, 0x3f, 0x1b, 0x64, 0xaf, 0x8d, 0x06, 0x0e,
+	0x49, 0x28, 0xe0, 0x5d, 0x45, 0x68, 0x13, 0x87,
+	0xfa, 0xde, 0x40, 0x7b, 0xd2, 0xc3, 0x94, 0xd5,
+	0xe1, 0xd9, 0xc2, 0xaf, 0x55, 0x89, 0xeb, 0xb4,
+	0x12, 0x59, 0xa8, 0xd4, 0xc5, 0x29, 0x66, 0x38,
+	0xe6, 0xac, 0x22, 0x22, 0xd9, 0x64, 0x9b, 0x34,
+	0x0a, 0x32, 0x9f, 0xc2, 0xbf, 0x17, 0x6c, 0x3f,
+	0x71, 0x7a, 0x38, 0x6b, 0x98, 0xfb, 0x49, 0x36,
+	0x89, 0xc9, 0xe2, 0xd6, 0xc7, 0x5d, 0xd0, 0x69,
+	0x5f, 0x23, 0x35, 0xc9, 0x30, 0xe2, 0xfd, 0x44,
+	0x58, 0x39, 0xd7, 0x97, 0xfb, 0x5c, 0x00, 0xd5,
+	0x4f, 0x7a, 0x1a, 0x95, 0x8b, 0x62, 0x4b, 0xce,
+	0xe5, 0x91, 0x21, 0x7b, 0x30, 0x00, 0xd6, 0xdd,
+	0x6d, 0x02, 0x86, 0x49, 0x0f, 0x3c, 0x1a, 0x27,
+	0x3c, 0xd3, 0x0e, 0x71, 0xf2, 0xff, 0xf5, 0x2f,
+	0x87, 0xac, 0x67, 0x59, 0x81, 0xa3, 0xf7, 0xf8,
+	0xd6, 0x11, 0x0c, 0x84, 0xa9, 0x03, 0xee, 0x2a,
+	0xc4, 0xf3, 0x22, 0xab, 0x7c, 0xe2, 0x25, 0xf5,
+	0x67, 0xa3, 0xe4, 0x11, 0xe0, 0x59, 0xb3, 0xca,
+	0x87, 0xa0, 0xae, 0xc9, 0xa6, 0x62, 0x1b, 0x6e,
+	0x4d, 0x02, 0x6b, 0x07, 0x9d, 0xfd, 0xd0, 0x92,
+	0x06, 0xe1, 0xb2, 0x9a, 0x4a, 0x1f, 0x1f, 0x13,
+	0x49, 0x99, 0x97, 0x08, 0xde, 0x7f, 0x98, 0xaf,
+	0x51, 0x98, 0xee, 0x2c, 0xcb, 0xf0, 0x0b, 0xc6,
+	0xb6, 0xb7, 0x2d, 0x9a, 0xb1, 0xac, 0xa6, 0xe3,
+	0x15, 0x77, 0x9d, 0x6b, 0x1a, 0xe4, 0xfc, 0x8b,
+	0xf2, 0x17, 0x59, 0x08, 0x04, 0x58, 0x81, 0x9d,
+	0x1b, 0x1b, 0x69, 0x55, 0xc2, 0xb4, 0x3c, 0x1f,
+	0x50, 0xf1, 0x7f, 0x77, 0x90, 0x4c, 0x66, 0x40,
+	0x5a, 0xc0, 0x33, 0x1f, 0xcb, 0x05, 0x6d, 0x5c,
+	0x06, 0x87, 0x52, 0xa2, 0x8f, 0x26, 0xd5, 0x4f
+};
+static const u8 enc_output010[] __initconst = {
+	0xe5, 0x26, 0xa4, 0x3d, 0xbd, 0x33, 0xd0, 0x4b,
+	0x6f, 0x05, 0xa7, 0x6e, 0x12, 0x7a, 0xd2, 0x74,
+	0xa6, 0xdd, 0xbd, 0x95, 0xeb, 0xf9, 0xa4, 0xf1,
+	0x59, 0x93, 0x91, 0x70, 0xd9, 0xfe, 0x9a, 0xcd,
+	0x53, 0x1f, 0x3a, 0xab, 0xa6, 0x7c, 0x9f, 0xa6,
+	0x9e, 0xbd, 0x99, 0xd9, 0xb5, 0x97, 0x44, 0xd5,
+	0x14, 0x48, 0x4d, 0x9d, 0xc0, 0xd0, 0x05, 0x96,
+	0xeb, 0x4c, 0x78, 0x55, 0x09, 0x08, 0x01, 0x02,
+	0x30, 0x90, 0x7b, 0x96, 0x7a, 0x7b, 0x5f, 0x30,
+	0x41, 0x24, 0xce, 0x68, 0x61, 0x49, 0x86, 0x57,
+	0x82, 0xdd, 0x53, 0x1c, 0x51, 0x28, 0x2b, 0x53,
+	0x6e, 0x2d, 0xc2, 0x20, 0x4c, 0xdd, 0x8f, 0x65,
+	0x10, 0x20, 0x50, 0xdd, 0x9d, 0x50, 0xe5, 0x71,
+	0x40, 0x53, 0x69, 0xfc, 0x77, 0x48, 0x11, 0xb9,
+	0xde, 0xa4, 0x8d, 0x58, 0xe4, 0xa6, 0x1a, 0x18,
+	0x47, 0x81, 0x7e, 0xfc, 0xdd, 0xf6, 0xef, 0xce,
+	0x2f, 0x43, 0x68, 0xd6, 0x06, 0xe2, 0x74, 0x6a,
+	0xad, 0x90, 0xf5, 0x37, 0xf3, 0x3d, 0x82, 0x69,
+	0x40, 0xe9, 0x6b, 0xa7, 0x3d, 0xa8, 0x1e, 0xd2,
+	0x02, 0x7c, 0xb7, 0x9b, 0xe4, 0xda, 0x8f, 0x95,
+	0x06, 0xc5, 0xdf, 0x73, 0xa3, 0x20, 0x9a, 0x49,
+	0xde, 0x9c, 0xbc, 0xee, 0x14, 0x3f, 0x81, 0x5e,
+	0xf8, 0x3b, 0x59, 0x3c, 0xe1, 0x68, 0x12, 0x5a,
+	0x3a, 0x76, 0x3a, 0x3f, 0xf7, 0x87, 0x33, 0x0a,
+	0x01, 0xb8, 0xd4, 0xed, 0xb6, 0xbe, 0x94, 0x5e,
+	0x70, 0x40, 0x56, 0x67, 0x1f, 0x50, 0x44, 0x19,
+	0xce, 0x82, 0x70, 0x10, 0x87, 0x13, 0x20, 0x0b,
+	0x4c, 0x5a, 0xb6, 0xf6, 0xa7, 0xae, 0x81, 0x75,
+	0x01, 0x81, 0xe6, 0x4b, 0x57, 0x7c, 0xdd, 0x6d,
+	0xf8, 0x1c, 0x29, 0x32, 0xf7, 0xda, 0x3c, 0x2d,
+	0xf8, 0x9b, 0x25, 0x6e, 0x00, 0xb4, 0xf7, 0x2f,
+	0xf7, 0x04, 0xf7, 0xa1, 0x56, 0xac, 0x4f, 0x1a,
+	0x64, 0xb8, 0x47, 0x55, 0x18, 0x7b, 0x07, 0x4d,
+	0xbd, 0x47, 0x24, 0x80, 0x5d, 0xa2, 0x70, 0xc5,
+	0xdd, 0x8e, 0x82, 0xd4, 0xeb, 0xec, 0xb2, 0x0c,
+	0x39, 0xd2, 0x97, 0xc1, 0xcb, 0xeb, 0xf4, 0x77,
+	0x59, 0xb4, 0x87, 0xef, 0xcb, 0x43, 0x2d, 0x46,
+	0x54, 0xd1, 0xa7, 0xd7, 0x15, 0x99, 0x0a, 0x43,
+	0xa1, 0xe0, 0x99, 0x33, 0x71, 0xc1, 0xed, 0xfe,
+	0x72, 0x46, 0x33, 0x8e, 0x91, 0x08, 0x9f, 0xc8,
+	0x2e, 0xca, 0xfa, 0xdc, 0x59, 0xd5, 0xc3, 0x76,
+	0x84, 0x9f, 0xa3, 0x37, 0x68, 0xc3, 0xf0, 0x47,
+	0x2c, 0x68, 0xdb, 0x5e, 0xc3, 0x49, 0x4c, 0xe8,
+	0x92, 0x85, 0xe2, 0x23, 0xd3, 0x3f, 0xad, 0x32,
+	0xe5, 0x2b, 0x82, 0xd7, 0x8f, 0x99, 0x0a, 0x59,
+	0x5c, 0x45, 0xd9, 0xb4, 0x51, 0x52, 0xc2, 0xae,
+	0xbf, 0x80, 0xcf, 0xc9, 0xc9, 0x51, 0x24, 0x2a,
+	0x3b, 0x3a, 0x4d, 0xae, 0xeb, 0xbd, 0x22, 0xc3,
+	0x0e, 0x0f, 0x59, 0x25, 0x92, 0x17, 0xe9, 0x74,
+	0xc7, 0x8b, 0x70, 0x70, 0x36, 0x55, 0x95, 0x75,
+	0x4b, 0xad, 0x61, 0x2b, 0x09, 0xbc, 0x82, 0xf2,
+	0x6e, 0x94, 0x43, 0xae, 0xc3, 0xd5, 0xcd, 0x8e,
+	0xfe, 0x5b, 0x9a, 0x88, 0x43, 0x01, 0x75, 0xb2,
+	0x23, 0x09, 0xf7, 0x89, 0x83, 0xe7, 0xfa, 0xf9,
+	0xb4, 0x9b, 0xf8, 0xef, 0xbd, 0x1c, 0x92, 0xc1,
+	0xda, 0x7e, 0xfe, 0x05, 0xba, 0x5a, 0xcd, 0x07,
+	0x6a, 0x78, 0x9e, 0x5d, 0xfb, 0x11, 0x2f, 0x79,
+	0x38, 0xb6, 0xc2, 0x5b, 0x6b, 0x51, 0xb4, 0x71,
+	0xdd, 0xf7, 0x2a, 0xe4, 0xf4, 0x72, 0x76, 0xad,
+	0xc2, 0xdd, 0x64, 0x5d, 0x79, 0xb6, 0xf5, 0x7a,
+	0x77, 0x20, 0x05, 0x3d, 0x30, 0x06, 0xd4, 0x4c,
+	0x0a, 0x2c, 0x98, 0x5a, 0xb9, 0xd4, 0x98, 0xa9,
+	0x3f, 0xc6, 0x12, 0xea, 0x3b, 0x4b, 0xc5, 0x79,
+	0x64, 0x63, 0x6b, 0x09, 0x54, 0x3b, 0x14, 0x27,
+	0xba, 0x99, 0x80, 0xc8, 0x72, 0xa8, 0x12, 0x90,
+	0x29, 0xba, 0x40, 0x54, 0x97, 0x2b, 0x7b, 0xfe,
+	0xeb, 0xcd, 0x01, 0x05, 0x44, 0x72, 0xdb, 0x99,
+	0xe4, 0x61, 0xc9, 0x69, 0xd6, 0xb9, 0x28, 0xd1,
+	0x05, 0x3e, 0xf9, 0x0b, 0x49, 0x0a, 0x49, 0xe9,
+	0x8d, 0x0e, 0xa7, 0x4a, 0x0f, 0xaf, 0x32, 0xd0,
+	0xe0, 0xb2, 0x3a, 0x55, 0x58, 0xfe, 0x5c, 0x28,
+	0x70, 0x51, 0x23, 0xb0, 0x7b, 0x6a, 0x5f, 0x1e,
+	0xb8, 0x17, 0xd7, 0x94, 0x15, 0x8f, 0xee, 0x20,
+	0xc7, 0x42, 0x25, 0x3e, 0x9a, 0x14, 0xd7, 0x60,
+	0x72, 0x39, 0x47, 0x48, 0xa9, 0xfe, 0xdd, 0x47,
+	0x0a, 0xb1, 0xe6, 0x60, 0x28, 0x8c, 0x11, 0x68,
+	0xe1, 0xff, 0xd7, 0xce, 0xc8, 0xbe, 0xb3, 0xfe,
+	0x27, 0x30, 0x09, 0x70, 0xd7, 0xfa, 0x02, 0x33,
+	0x3a, 0x61, 0x2e, 0xc7, 0xff, 0xa4, 0x2a, 0xa8,
+	0x6e, 0xb4, 0x79, 0x35, 0x6d, 0x4c, 0x1e, 0x38,
+	0xf8, 0xee, 0xd4, 0x84, 0x4e, 0x6e, 0x28, 0xa7,
+	0xce, 0xc8, 0xc1, 0xcf, 0x80, 0x05, 0xf3, 0x04,
+	0xef, 0xc8, 0x18, 0x28, 0x2e, 0x8d, 0x5e, 0x0c,
+	0xdf, 0xb8, 0x5f, 0x96, 0xe8, 0xc6, 0x9c, 0x2f,
+	0xe5, 0xa6, 0x44, 0xd7, 0xe7, 0x99, 0x44, 0x0c,
+	0xec, 0xd7, 0x05, 0x60, 0x97, 0xbb, 0x74, 0x77,
+	0x58, 0xd5, 0xbb, 0x48, 0xde, 0x5a, 0xb2, 0x54,
+	0x7f, 0x0e, 0x46, 0x70, 0x6a, 0x6f, 0x78, 0xa5,
+	0x08, 0x89, 0x05, 0x4e, 0x7e, 0xa0, 0x69, 0xb4,
+	0x40, 0x60, 0x55, 0x77, 0x75, 0x9b, 0x19, 0xf2,
+	0xd5, 0x13, 0x80, 0x77, 0xf9, 0x4b, 0x3f, 0x1e,
+	0xee, 0xe6, 0x76, 0x84, 0x7b, 0x8c, 0xe5, 0x27,
+	0xa8, 0x0a, 0x91, 0x01, 0x68, 0x71, 0x8a, 0x3f,
+	0x06, 0xab, 0xf6, 0xa9, 0xa5, 0xe6, 0x72, 0x92,
+	0xe4, 0x67, 0xe2, 0xa2, 0x46, 0x35, 0x84, 0x55,
+	0x7d, 0xca, 0xa8, 0x85, 0xd0, 0xf1, 0x3f, 0xbe,
+	0xd7, 0x34, 0x64, 0xfc, 0xae, 0xe3, 0xe4, 0x04,
+	0x9f, 0x66, 0x02, 0xb9, 0x88, 0x10, 0xd9, 0xc4,
+	0x4c, 0x31, 0x43, 0x7a, 0x93, 0xe2, 0x9b, 0x56,
+	0x43, 0x84, 0xdc, 0xdc, 0xde, 0x1d, 0xa4, 0x02,
+	0x0e, 0xc2, 0xef, 0xc3, 0xf8, 0x78, 0xd1, 0xb2,
+	0x6b, 0x63, 0x18, 0xc9, 0xa9, 0xe5, 0x72, 0xd8,
+	0xf3, 0xb9, 0xd1, 0x8a, 0xc7, 0x1a, 0x02, 0x27,
+	0x20, 0x77, 0x10, 0xe5, 0xc8, 0xd4, 0x4a, 0x47,
+	0xe5, 0xdf, 0x5f, 0x01, 0xaa, 0xb0, 0xd4, 0x10,
+	0xbb, 0x69, 0xe3, 0x36, 0xc8, 0xe1, 0x3d, 0x43,
+	0xfb, 0x86, 0xcd, 0xcc, 0xbf, 0xf4, 0x88, 0xe0,
+	0x20, 0xca, 0xb7, 0x1b, 0xf1, 0x2f, 0x5c, 0xee,
+	0xd4, 0xd3, 0xa3, 0xcc, 0xa4, 0x1e, 0x1c, 0x47,
+	0xfb, 0xbf, 0xfc, 0xa2, 0x41, 0x55, 0x9d, 0xf6,
+	0x5a, 0x5e, 0x65, 0x32, 0x34, 0x7b, 0x52, 0x8d,
+	0xd5, 0xd0, 0x20, 0x60, 0x03, 0xab, 0x3f, 0x8c,
+	0xd4, 0x21, 0xea, 0x2a, 0xd9, 0xc4, 0xd0, 0xd3,
+	0x65, 0xd8, 0x7a, 0x13, 0x28, 0x62, 0x32, 0x4b,
+	0x2c, 0x87, 0x93, 0xa8, 0xb4, 0x52, 0x45, 0x09,
+	0x44, 0xec, 0xec, 0xc3, 0x17, 0xdb, 0x9a, 0x4d,
+	0x5c, 0xa9, 0x11, 0xd4, 0x7d, 0xaf, 0x9e, 0xf1,
+	0x2d, 0xb2, 0x66, 0xc5, 0x1d, 0xed, 0xb7, 0xcd,
+	0x0b, 0x25, 0x5e, 0x30, 0x47, 0x3f, 0x40, 0xf4,
+	0xa1, 0xa0, 0x00, 0x94, 0x10, 0xc5, 0x6a, 0x63,
+	0x1a, 0xd5, 0x88, 0x92, 0x8e, 0x82, 0x39, 0x87,
+	0x3c, 0x78, 0x65, 0x58, 0x42, 0x75, 0x5b, 0xdd,
+	0x77, 0x3e, 0x09, 0x4e, 0x76, 0x5b, 0xe6, 0x0e,
+	0x4d, 0x38, 0xb2, 0xc0, 0xb8, 0x95, 0x01, 0x7a,
+	0x10, 0xe0, 0xfb, 0x07, 0xf2, 0xab, 0x2d, 0x8c,
+	0x32, 0xed, 0x2b, 0xc0, 0x46, 0xc2, 0xf5, 0x38,
+	0x83, 0xf0, 0x17, 0xec, 0xc1, 0x20, 0x6a, 0x9a,
+	0x0b, 0x00, 0xa0, 0x98, 0x22, 0x50, 0x23, 0xd5,
+	0x80, 0x6b, 0xf6, 0x1f, 0xc3, 0xcc, 0x97, 0xc9,
+	0x24, 0x9f, 0xf3, 0xaf, 0x43, 0x14, 0xd5, 0xa0
+};
+static const u8 enc_assoc010[] __initconst = {
+	0xd2, 0xa1, 0x70, 0xdb, 0x7a, 0xf8, 0xfa, 0x27,
+	0xba, 0x73, 0x0f, 0xbf, 0x3d, 0x1e, 0x82, 0xb2
+};
+static const u8 enc_nonce010[] __initconst = {
+	0xdb, 0x92, 0x0f, 0x7f, 0x17, 0x54, 0x0c, 0x30
+};
+static const u8 enc_key010[] __initconst = {
+	0x47, 0x11, 0xeb, 0x86, 0x2b, 0x2c, 0xab, 0x44,
+	0x34, 0xda, 0x7f, 0x57, 0x03, 0x39, 0x0c, 0xaf,
+	0x2c, 0x14, 0xfd, 0x65, 0x23, 0xe9, 0x8e, 0x74,
+	0xd5, 0x08, 0x68, 0x08, 0xe7, 0xb4, 0x72, 0xd7
+};
+
+static const u8 enc_input011[] __initconst = {
+	0x7a, 0x57, 0xf2, 0xc7, 0x06, 0x3f, 0x50, 0x7b,
+	0x36, 0x1a, 0x66, 0x5c, 0xb9, 0x0e, 0x5e, 0x3b,
+	0x45, 0x60, 0xbe, 0x9a, 0x31, 0x9f, 0xff, 0x5d,
+	0x66, 0x34, 0xb4, 0xdc, 0xfb, 0x9d, 0x8e, 0xee,
+	0x6a, 0x33, 0xa4, 0x07, 0x3c, 0xf9, 0x4c, 0x30,
+	0xa1, 0x24, 0x52, 0xf9, 0x50, 0x46, 0x88, 0x20,
+	0x02, 0x32, 0x3a, 0x0e, 0x99, 0x63, 0xaf, 0x1f,
+	0x15, 0x28, 0x2a, 0x05, 0xff, 0x57, 0x59, 0x5e,
+	0x18, 0xa1, 0x1f, 0xd0, 0x92, 0x5c, 0x88, 0x66,
+	0x1b, 0x00, 0x64, 0xa5, 0x93, 0x8d, 0x06, 0x46,
+	0xb0, 0x64, 0x8b, 0x8b, 0xef, 0x99, 0x05, 0x35,
+	0x85, 0xb3, 0xf3, 0x33, 0xbb, 0xec, 0x66, 0xb6,
+	0x3d, 0x57, 0x42, 0xe3, 0xb4, 0xc6, 0xaa, 0xb0,
+	0x41, 0x2a, 0xb9, 0x59, 0xa9, 0xf6, 0x3e, 0x15,
+	0x26, 0x12, 0x03, 0x21, 0x4c, 0x74, 0x43, 0x13,
+	0x2a, 0x03, 0x27, 0x09, 0xb4, 0xfb, 0xe7, 0xb7,
+	0x40, 0xff, 0x5e, 0xce, 0x48, 0x9a, 0x60, 0xe3,
+	0x8b, 0x80, 0x8c, 0x38, 0x2d, 0xcb, 0x93, 0x37,
+	0x74, 0x05, 0x52, 0x6f, 0x73, 0x3e, 0xc3, 0xbc,
+	0xca, 0x72, 0x0a, 0xeb, 0xf1, 0x3b, 0xa0, 0x95,
+	0xdc, 0x8a, 0xc4, 0xa9, 0xdc, 0xca, 0x44, 0xd8,
+	0x08, 0x63, 0x6a, 0x36, 0xd3, 0x3c, 0xb8, 0xac,
+	0x46, 0x7d, 0xfd, 0xaa, 0xeb, 0x3e, 0x0f, 0x45,
+	0x8f, 0x49, 0xda, 0x2b, 0xf2, 0x12, 0xbd, 0xaf,
+	0x67, 0x8a, 0x63, 0x48, 0x4b, 0x55, 0x5f, 0x6d,
+	0x8c, 0xb9, 0x76, 0x34, 0x84, 0xae, 0xc2, 0xfc,
+	0x52, 0x64, 0x82, 0xf7, 0xb0, 0x06, 0xf0, 0x45,
+	0x73, 0x12, 0x50, 0x30, 0x72, 0xea, 0x78, 0x9a,
+	0xa8, 0xaf, 0xb5, 0xe3, 0xbb, 0x77, 0x52, 0xec,
+	0x59, 0x84, 0xbf, 0x6b, 0x8f, 0xce, 0x86, 0x5e,
+	0x1f, 0x23, 0xe9, 0xfb, 0x08, 0x86, 0xf7, 0x10,
+	0xb9, 0xf2, 0x44, 0x96, 0x44, 0x63, 0xa9, 0xa8,
+	0x78, 0x00, 0x23, 0xd6, 0xc7, 0xe7, 0x6e, 0x66,
+	0x4f, 0xcc, 0xee, 0x15, 0xb3, 0xbd, 0x1d, 0xa0,
+	0xe5, 0x9c, 0x1b, 0x24, 0x2c, 0x4d, 0x3c, 0x62,
+	0x35, 0x9c, 0x88, 0x59, 0x09, 0xdd, 0x82, 0x1b,
+	0xcf, 0x0a, 0x83, 0x6b, 0x3f, 0xae, 0x03, 0xc4,
+	0xb4, 0xdd, 0x7e, 0x5b, 0x28, 0x76, 0x25, 0x96,
+	0xd9, 0xc9, 0x9d, 0x5f, 0x86, 0xfa, 0xf6, 0xd7,
+	0xd2, 0xe6, 0x76, 0x1d, 0x0f, 0xa1, 0xdc, 0x74,
+	0x05, 0x1b, 0x1d, 0xe0, 0xcd, 0x16, 0xb0, 0xa8,
+	0x8a, 0x34, 0x7b, 0x15, 0x11, 0x77, 0xe5, 0x7b,
+	0x7e, 0x20, 0xf7, 0xda, 0x38, 0xda, 0xce, 0x70,
+	0xe9, 0xf5, 0x6c, 0xd9, 0xbe, 0x0c, 0x4c, 0x95,
+	0x4c, 0xc2, 0x9b, 0x34, 0x55, 0x55, 0xe1, 0xf3,
+	0x46, 0x8e, 0x48, 0x74, 0x14, 0x4f, 0x9d, 0xc9,
+	0xf5, 0xe8, 0x1a, 0xf0, 0x11, 0x4a, 0xc1, 0x8d,
+	0xe0, 0x93, 0xa0, 0xbe, 0x09, 0x1c, 0x2b, 0x4e,
+	0x0f, 0xb2, 0x87, 0x8b, 0x84, 0xfe, 0x92, 0x32,
+	0x14, 0xd7, 0x93, 0xdf, 0xe7, 0x44, 0xbc, 0xc5,
+	0xae, 0x53, 0x69, 0xd8, 0xb3, 0x79, 0x37, 0x80,
+	0xe3, 0x17, 0x5c, 0xec, 0x53, 0x00, 0x9a, 0xe3,
+	0x8e, 0xdc, 0x38, 0xb8, 0x66, 0xf0, 0xd3, 0xad,
+	0x1d, 0x02, 0x96, 0x86, 0x3e, 0x9d, 0x3b, 0x5d,
+	0xa5, 0x7f, 0x21, 0x10, 0xf1, 0x1f, 0x13, 0x20,
+	0xf9, 0x57, 0x87, 0x20, 0xf5, 0x5f, 0xf1, 0x17,
+	0x48, 0x0a, 0x51, 0x5a, 0xcd, 0x19, 0x03, 0xa6,
+	0x5a, 0xd1, 0x12, 0x97, 0xe9, 0x48, 0xe2, 0x1d,
+	0x83, 0x75, 0x50, 0xd9, 0x75, 0x7d, 0x6a, 0x82,
+	0xa1, 0xf9, 0x4e, 0x54, 0x87, 0x89, 0xc9, 0x0c,
+	0xb7, 0x5b, 0x6a, 0x91, 0xc1, 0x9c, 0xb2, 0xa9,
+	0xdc, 0x9a, 0xa4, 0x49, 0x0a, 0x6d, 0x0d, 0xbb,
+	0xde, 0x86, 0x44, 0xdd, 0x5d, 0x89, 0x2b, 0x96,
+	0x0f, 0x23, 0x95, 0xad, 0xcc, 0xa2, 0xb3, 0xb9,
+	0x7e, 0x74, 0x38, 0xba, 0x9f, 0x73, 0xae, 0x5f,
+	0xf8, 0x68, 0xa2, 0xe0, 0xa9, 0xce, 0xbd, 0x40,
+	0xd4, 0x4c, 0x6b, 0xd2, 0x56, 0x62, 0xb0, 0xcc,
+	0x63, 0x7e, 0x5b, 0xd3, 0xae, 0xd1, 0x75, 0xce,
+	0xbb, 0xb4, 0x5b, 0xa8, 0xf8, 0xb4, 0xac, 0x71,
+	0x75, 0xaa, 0xc9, 0x9f, 0xbb, 0x6c, 0xad, 0x0f,
+	0x55, 0x5d, 0xe8, 0x85, 0x7d, 0xf9, 0x21, 0x35,
+	0xea, 0x92, 0x85, 0x2b, 0x00, 0xec, 0x84, 0x90,
+	0x0a, 0x63, 0x96, 0xe4, 0x6b, 0xa9, 0x77, 0xb8,
+	0x91, 0xf8, 0x46, 0x15, 0x72, 0x63, 0x70, 0x01,
+	0x40, 0xa3, 0xa5, 0x76, 0x62, 0x2b, 0xbf, 0xf1,
+	0xe5, 0x8d, 0x9f, 0xa3, 0xfa, 0x9b, 0x03, 0xbe,
+	0xfe, 0x65, 0x6f, 0xa2, 0x29, 0x0d, 0x54, 0xb4,
+	0x71, 0xce, 0xa9, 0xd6, 0x3d, 0x88, 0xf9, 0xaf,
+	0x6b, 0xa8, 0x9e, 0xf4, 0x16, 0x96, 0x36, 0xb9,
+	0x00, 0xdc, 0x10, 0xab, 0xb5, 0x08, 0x31, 0x1f,
+	0x00, 0xb1, 0x3c, 0xd9, 0x38, 0x3e, 0xc6, 0x04,
+	0xa7, 0x4e, 0xe8, 0xae, 0xed, 0x98, 0xc2, 0xf7,
+	0xb9, 0x00, 0x5f, 0x8c, 0x60, 0xd1, 0xe5, 0x15,
+	0xf7, 0xae, 0x1e, 0x84, 0x88, 0xd1, 0xf6, 0xbc,
+	0x3a, 0x89, 0x35, 0x22, 0x83, 0x7c, 0xca, 0xf0,
+	0x33, 0x82, 0x4c, 0x79, 0x3c, 0xfd, 0xb1, 0xae,
+	0x52, 0x62, 0x55, 0xd2, 0x41, 0x60, 0xc6, 0xbb,
+	0xfa, 0x0e, 0x59, 0xd6, 0xa8, 0xfe, 0x5d, 0xed,
+	0x47, 0x3d, 0xe0, 0xea, 0x1f, 0x6e, 0x43, 0x51,
+	0xec, 0x10, 0x52, 0x56, 0x77, 0x42, 0x6b, 0x52,
+	0x87, 0xd8, 0xec, 0xe0, 0xaa, 0x76, 0xa5, 0x84,
+	0x2a, 0x22, 0x24, 0xfd, 0x92, 0x40, 0x88, 0xd5,
+	0x85, 0x1c, 0x1f, 0x6b, 0x47, 0xa0, 0xc4, 0xe4,
+	0xef, 0xf4, 0xea, 0xd7, 0x59, 0xac, 0x2a, 0x9e,
+	0x8c, 0xfa, 0x1f, 0x42, 0x08, 0xfe, 0x4f, 0x74,
+	0xa0, 0x26, 0xf5, 0xb3, 0x84, 0xf6, 0x58, 0x5f,
+	0x26, 0x66, 0x3e, 0xd7, 0xe4, 0x22, 0x91, 0x13,
+	0xc8, 0xac, 0x25, 0x96, 0x23, 0xd8, 0x09, 0xea,
+	0x45, 0x75, 0x23, 0xb8, 0x5f, 0xc2, 0x90, 0x8b,
+	0x09, 0xc4, 0xfc, 0x47, 0x6c, 0x6d, 0x0a, 0xef,
+	0x69, 0xa4, 0x38, 0x19, 0xcf, 0x7d, 0xf9, 0x09,
+	0x73, 0x9b, 0x60, 0x5a, 0xf7, 0x37, 0xb5, 0xfe,
+	0x9f, 0xe3, 0x2b, 0x4c, 0x0d, 0x6e, 0x19, 0xf1,
+	0xd6, 0xc0, 0x70, 0xf3, 0x9d, 0x22, 0x3c, 0xf9,
+	0x49, 0xce, 0x30, 0x8e, 0x44, 0xb5, 0x76, 0x15,
+	0x8f, 0x52, 0xfd, 0xa5, 0x04, 0xb8, 0x55, 0x6a,
+	0x36, 0x59, 0x7c, 0xc4, 0x48, 0xb8, 0xd7, 0xab,
+	0x05, 0x66, 0xe9, 0x5e, 0x21, 0x6f, 0x6b, 0x36,
+	0x29, 0xbb, 0xe9, 0xe3, 0xa2, 0x9a, 0xa8, 0xcd,
+	0x55, 0x25, 0x11, 0xba, 0x5a, 0x58, 0xa0, 0xde,
+	0xae, 0x19, 0x2a, 0x48, 0x5a, 0xff, 0x36, 0xcd,
+	0x6d, 0x16, 0x7a, 0x73, 0x38, 0x46, 0xe5, 0x47,
+	0x59, 0xc8, 0xa2, 0xf6, 0xe2, 0x6c, 0x83, 0xc5,
+	0x36, 0x2c, 0x83, 0x7d, 0xb4, 0x01, 0x05, 0x69,
+	0xe7, 0xaf, 0x5c, 0xc4, 0x64, 0x82, 0x12, 0x21,
+	0xef, 0xf7, 0xd1, 0x7d, 0xb8, 0x8d, 0x8c, 0x98,
+	0x7c, 0x5f, 0x7d, 0x92, 0x88, 0xb9, 0x94, 0x07,
+	0x9c, 0xd8, 0xe9, 0x9c, 0x17, 0x38, 0xe3, 0x57,
+	0x6c, 0xe0, 0xdc, 0xa5, 0x92, 0x42, 0xb3, 0xbd,
+	0x50, 0xa2, 0x7e, 0xb5, 0xb1, 0x52, 0x72, 0x03,
+	0x97, 0xd8, 0xaa, 0x9a, 0x1e, 0x75, 0x41, 0x11,
+	0xa3, 0x4f, 0xcc, 0xd4, 0xe3, 0x73, 0xad, 0x96,
+	0xdc, 0x47, 0x41, 0x9f, 0xb0, 0xbe, 0x79, 0x91,
+	0xf5, 0xb6, 0x18, 0xfe, 0xc2, 0x83, 0x18, 0x7d,
+	0x73, 0xd9, 0x4f, 0x83, 0x84, 0x03, 0xb3, 0xf0,
+	0x77, 0x66, 0x3d, 0x83, 0x63, 0x2e, 0x2c, 0xf9,
+	0xdd, 0xa6, 0x1f, 0x89, 0x82, 0xb8, 0x23, 0x42,
+	0xeb, 0xe2, 0xca, 0x70, 0x82, 0x61, 0x41, 0x0a,
+	0x6d, 0x5f, 0x75, 0xc5, 0xe2, 0xc4, 0x91, 0x18,
+	0x44, 0x22, 0xfa, 0x34, 0x10, 0xf5, 0x20, 0xdc,
+	0xb7, 0xdd, 0x2a, 0x20, 0x77, 0xf5, 0xf9, 0xce,
+	0xdb, 0xa0, 0x0a, 0x52, 0x2a, 0x4e, 0xdd, 0xcc,
+	0x97, 0xdf, 0x05, 0xe4, 0x5e, 0xb7, 0xaa, 0xf0,
+	0xe2, 0x80, 0xff, 0xba, 0x1a, 0x0f, 0xac, 0xdf,
+	0x02, 0x32, 0xe6, 0xf7, 0xc7, 0x17, 0x13, 0xb7,
+	0xfc, 0x98, 0x48, 0x8c, 0x0d, 0x82, 0xc9, 0x80,
+	0x7a, 0xe2, 0x0a, 0xc5, 0xb4, 0xde, 0x7c, 0x3c,
+	0x79, 0x81, 0x0e, 0x28, 0x65, 0x79, 0x67, 0x82,
+	0x69, 0x44, 0x66, 0x09, 0xf7, 0x16, 0x1a, 0xf9,
+	0x7d, 0x80, 0xa1, 0x79, 0x14, 0xa9, 0xc8, 0x20,
+	0xfb, 0xa2, 0x46, 0xbe, 0x08, 0x35, 0x17, 0x58,
+	0xc1, 0x1a, 0xda, 0x2a, 0x6b, 0x2e, 0x1e, 0xe6,
+	0x27, 0x55, 0x7b, 0x19, 0xe2, 0xfb, 0x64, 0xfc,
+	0x5e, 0x15, 0x54, 0x3c, 0xe7, 0xc2, 0x11, 0x50,
+	0x30, 0xb8, 0x72, 0x03, 0x0b, 0x1a, 0x9f, 0x86,
+	0x27, 0x11, 0x5c, 0x06, 0x2b, 0xbd, 0x75, 0x1a,
+	0x0a, 0xda, 0x01, 0xfa, 0x5c, 0x4a, 0xc1, 0x80,
+	0x3a, 0x6e, 0x30, 0xc8, 0x2c, 0xeb, 0x56, 0xec,
+	0x89, 0xfa, 0x35, 0x7b, 0xb2, 0xf0, 0x97, 0x08,
+	0x86, 0x53, 0xbe, 0xbd, 0x40, 0x41, 0x38, 0x1c,
+	0xb4, 0x8b, 0x79, 0x2e, 0x18, 0x96, 0x94, 0xde,
+	0xe8, 0xca, 0xe5, 0x9f, 0x92, 0x9f, 0x15, 0x5d,
+	0x56, 0x60, 0x5c, 0x09, 0xf9, 0x16, 0xf4, 0x17,
+	0x0f, 0xf6, 0x4c, 0xda, 0xe6, 0x67, 0x89, 0x9f,
+	0xca, 0x6c, 0xe7, 0x9b, 0x04, 0x62, 0x0e, 0x26,
+	0xa6, 0x52, 0xbd, 0x29, 0xff, 0xc7, 0xa4, 0x96,
+	0xe6, 0x6a, 0x02, 0xa5, 0x2e, 0x7b, 0xfe, 0x97,
+	0x68, 0x3e, 0x2e, 0x5f, 0x3b, 0x0f, 0x36, 0xd6,
+	0x98, 0x19, 0x59, 0x48, 0xd2, 0xc6, 0xe1, 0x55,
+	0x1a, 0x6e, 0xd6, 0xed, 0x2c, 0xba, 0xc3, 0x9e,
+	0x64, 0xc9, 0x95, 0x86, 0x35, 0x5e, 0x3e, 0x88,
+	0x69, 0x99, 0x4b, 0xee, 0xbe, 0x9a, 0x99, 0xb5,
+	0x6e, 0x58, 0xae, 0xdd, 0x22, 0xdb, 0xdd, 0x6b,
+	0xfc, 0xaf, 0x90, 0xa3, 0x3d, 0xa4, 0xc1, 0x15,
+	0x92, 0x18, 0x8d, 0xd2, 0x4b, 0x7b, 0x06, 0xd1,
+	0x37, 0xb5, 0xe2, 0x7c, 0x2c, 0xf0, 0x25, 0xe4,
+	0x94, 0x2a, 0xbd, 0xe3, 0x82, 0x70, 0x78, 0xa3,
+	0x82, 0x10, 0x5a, 0x90, 0xd7, 0xa4, 0xfa, 0xaf,
+	0x1a, 0x88, 0x59, 0xdc, 0x74, 0x12, 0xb4, 0x8e,
+	0xd7, 0x19, 0x46, 0xf4, 0x84, 0x69, 0x9f, 0xbb,
+	0x70, 0xa8, 0x4c, 0x52, 0x81, 0xa9, 0xff, 0x76,
+	0x1c, 0xae, 0xd8, 0x11, 0x3d, 0x7f, 0x7d, 0xc5,
+	0x12, 0x59, 0x28, 0x18, 0xc2, 0xa2, 0xb7, 0x1c,
+	0x88, 0xf8, 0xd6, 0x1b, 0xa6, 0x7d, 0x9e, 0xde,
+	0x29, 0xf8, 0xed, 0xff, 0xeb, 0x92, 0x24, 0x4f,
+	0x05, 0xaa, 0xd9, 0x49, 0xba, 0x87, 0x59, 0x51,
+	0xc9, 0x20, 0x5c, 0x9b, 0x74, 0xcf, 0x03, 0xd9,
+	0x2d, 0x34, 0xc7, 0x5b, 0xa5, 0x40, 0xb2, 0x99,
+	0xf5, 0xcb, 0xb4, 0xf6, 0xb7, 0x72, 0x4a, 0xd6,
+	0xbd, 0xb0, 0xf3, 0x93, 0xe0, 0x1b, 0xa8, 0x04,
+	0x1e, 0x35, 0xd4, 0x80, 0x20, 0xf4, 0x9c, 0x31,
+	0x6b, 0x45, 0xb9, 0x15, 0xb0, 0x5e, 0xdd, 0x0a,
+	0x33, 0x9c, 0x83, 0xcd, 0x58, 0x89, 0x50, 0x56,
+	0xbb, 0x81, 0x00, 0x91, 0x32, 0xf3, 0x1b, 0x3e,
+	0xcf, 0x45, 0xe1, 0xf9, 0xe1, 0x2c, 0x26, 0x78,
+	0x93, 0x9a, 0x60, 0x46, 0xc9, 0xb5, 0x5e, 0x6a,
+	0x28, 0x92, 0x87, 0x3f, 0x63, 0x7b, 0xdb, 0xf7,
+	0xd0, 0x13, 0x9d, 0x32, 0x40, 0x5e, 0xcf, 0xfb,
+	0x79, 0x68, 0x47, 0x4c, 0xfd, 0x01, 0x17, 0xe6,
+	0x97, 0x93, 0x78, 0xbb, 0xa6, 0x27, 0xa3, 0xe8,
+	0x1a, 0xe8, 0x94, 0x55, 0x7d, 0x08, 0xe5, 0xdc,
+	0x66, 0xa3, 0x69, 0xc8, 0xca, 0xc5, 0xa1, 0x84,
+	0x55, 0xde, 0x08, 0x91, 0x16, 0x3a, 0x0c, 0x86,
+	0xab, 0x27, 0x2b, 0x64, 0x34, 0x02, 0x6c, 0x76,
+	0x8b, 0xc6, 0xaf, 0xcc, 0xe1, 0xd6, 0x8c, 0x2a,
+	0x18, 0x3d, 0xa6, 0x1b, 0x37, 0x75, 0x45, 0x73,
+	0xc2, 0x75, 0xd7, 0x53, 0x78, 0x3a, 0xd6, 0xe8,
+	0x29, 0xd2, 0x4a, 0xa8, 0x1e, 0x82, 0xf6, 0xb6,
+	0x81, 0xde, 0x21, 0xed, 0x2b, 0x56, 0xbb, 0xf2,
+	0xd0, 0x57, 0xc1, 0x7c, 0xd2, 0x6a, 0xd2, 0x56,
+	0xf5, 0x13, 0x5f, 0x1c, 0x6a, 0x0b, 0x74, 0xfb,
+	0xe9, 0xfe, 0x9e, 0xea, 0x95, 0xb2, 0x46, 0xab,
+	0x0a, 0xfc, 0xfd, 0xf3, 0xbb, 0x04, 0x2b, 0x76,
+	0x1b, 0xa4, 0x74, 0xb0, 0xc1, 0x78, 0xc3, 0x69,
+	0xe2, 0xb0, 0x01, 0xe1, 0xde, 0x32, 0x4c, 0x8d,
+	0x1a, 0xb3, 0x38, 0x08, 0xd5, 0xfc, 0x1f, 0xdc,
+	0x0e, 0x2c, 0x9c, 0xb1, 0xa1, 0x63, 0x17, 0x22,
+	0xf5, 0x6c, 0x93, 0x70, 0x74, 0x00, 0xf8, 0x39,
+	0x01, 0x94, 0xd1, 0x32, 0x23, 0x56, 0x5d, 0xa6,
+	0x02, 0x76, 0x76, 0x93, 0xce, 0x2f, 0x19, 0xe9,
+	0x17, 0x52, 0xae, 0x6e, 0x2c, 0x6d, 0x61, 0x7f,
+	0x3b, 0xaa, 0xe0, 0x52, 0x85, 0xc5, 0x65, 0xc1,
+	0xbb, 0x8e, 0x5b, 0x21, 0xd5, 0xc9, 0x78, 0x83,
+	0x07, 0x97, 0x4c, 0x62, 0x61, 0x41, 0xd4, 0xfc,
+	0xc9, 0x39, 0xe3, 0x9b, 0xd0, 0xcc, 0x75, 0xc4,
+	0x97, 0xe6, 0xdd, 0x2a, 0x5f, 0xa6, 0xe8, 0x59,
+	0x6c, 0x98, 0xb9, 0x02, 0xe2, 0xa2, 0xd6, 0x68,
+	0xee, 0x3b, 0x1d, 0xe3, 0x4d, 0x5b, 0x30, 0xef,
+	0x03, 0xf2, 0xeb, 0x18, 0x57, 0x36, 0xe8, 0xa1,
+	0xf4, 0x47, 0xfb, 0xcb, 0x8f, 0xcb, 0xc8, 0xf3,
+	0x4f, 0x74, 0x9d, 0x9d, 0xb1, 0x8d, 0x14, 0x44,
+	0xd9, 0x19, 0xb4, 0x54, 0x4f, 0x75, 0x19, 0x09,
+	0xa0, 0x75, 0xbc, 0x3b, 0x82, 0xc6, 0x3f, 0xb8,
+	0x83, 0x19, 0x6e, 0xd6, 0x37, 0xfe, 0x6e, 0x8a,
+	0x4e, 0xe0, 0x4a, 0xab, 0x7b, 0xc8, 0xb4, 0x1d,
+	0xf4, 0xed, 0x27, 0x03, 0x65, 0xa2, 0xa1, 0xae,
+	0x11, 0xe7, 0x98, 0x78, 0x48, 0x91, 0xd2, 0xd2,
+	0xd4, 0x23, 0x78, 0x50, 0xb1, 0x5b, 0x85, 0x10,
+	0x8d, 0xca, 0x5f, 0x0f, 0x71, 0xae, 0x72, 0x9a,
+	0xf6, 0x25, 0x19, 0x60, 0x06, 0xf7, 0x10, 0x34,
+	0x18, 0x0d, 0xc9, 0x9f, 0x7b, 0x0c, 0x9b, 0x8f,
+	0x91, 0x1b, 0x9f, 0xcd, 0x10, 0xee, 0x75, 0xf9,
+	0x97, 0x66, 0xfc, 0x4d, 0x33, 0x6e, 0x28, 0x2b,
+	0x92, 0x85, 0x4f, 0xab, 0x43, 0x8d, 0x8f, 0x7d,
+	0x86, 0xa7, 0xc7, 0xd8, 0xd3, 0x0b, 0x8b, 0x57,
+	0xb6, 0x1d, 0x95, 0x0d, 0xe9, 0xbc, 0xd9, 0x03,
+	0xd9, 0x10, 0x19, 0xc3, 0x46, 0x63, 0x55, 0x87,
+	0x61, 0x79, 0x6c, 0x95, 0x0e, 0x9c, 0xdd, 0xca,
+	0xc3, 0xf3, 0x64, 0xf0, 0x7d, 0x76, 0xb7, 0x53,
+	0x67, 0x2b, 0x1e, 0x44, 0x56, 0x81, 0xea, 0x8f,
+	0x5c, 0x42, 0x16, 0xb8, 0x28, 0xeb, 0x1b, 0x61,
+	0x10, 0x1e, 0xbf, 0xec, 0xa8
+};
+static const u8 enc_output011[] __initconst = {
+	0x6a, 0xfc, 0x4b, 0x25, 0xdf, 0xc0, 0xe4, 0xe8,
+	0x17, 0x4d, 0x4c, 0xc9, 0x7e, 0xde, 0x3a, 0xcc,
+	0x3c, 0xba, 0x6a, 0x77, 0x47, 0xdb, 0xe3, 0x74,
+	0x7a, 0x4d, 0x5f, 0x8d, 0x37, 0x55, 0x80, 0x73,
+	0x90, 0x66, 0x5d, 0x3a, 0x7d, 0x5d, 0x86, 0x5e,
+	0x8d, 0xfd, 0x83, 0xff, 0x4e, 0x74, 0x6f, 0xf9,
+	0xe6, 0x70, 0x17, 0x70, 0x3e, 0x96, 0xa7, 0x7e,
+	0xcb, 0xab, 0x8f, 0x58, 0x24, 0x9b, 0x01, 0xfd,
+	0xcb, 0xe6, 0x4d, 0x9b, 0xf0, 0x88, 0x94, 0x57,
+	0x66, 0xef, 0x72, 0x4c, 0x42, 0x6e, 0x16, 0x19,
+	0x15, 0xea, 0x70, 0x5b, 0xac, 0x13, 0xdb, 0x9f,
+	0x18, 0xe2, 0x3c, 0x26, 0x97, 0xbc, 0xdc, 0x45,
+	0x8c, 0x6c, 0x24, 0x69, 0x9c, 0xf7, 0x65, 0x1e,
+	0x18, 0x59, 0x31, 0x7c, 0xe4, 0x73, 0xbc, 0x39,
+	0x62, 0xc6, 0x5c, 0x9f, 0xbf, 0xfa, 0x90, 0x03,
+	0xc9, 0x72, 0x26, 0xb6, 0x1b, 0xc2, 0xb7, 0x3f,
+	0xf2, 0x13, 0x77, 0xf2, 0x8d, 0xb9, 0x47, 0xd0,
+	0x53, 0xdd, 0xc8, 0x91, 0x83, 0x8b, 0xb1, 0xce,
+	0xa3, 0xfe, 0xcd, 0xd9, 0xdd, 0x92, 0x7b, 0xdb,
+	0xb8, 0xfb, 0xc9, 0x2d, 0x01, 0x59, 0x39, 0x52,
+	0xad, 0x1b, 0xec, 0xcf, 0xd7, 0x70, 0x13, 0x21,
+	0xf5, 0x47, 0xaa, 0x18, 0x21, 0x5c, 0xc9, 0x9a,
+	0xd2, 0x6b, 0x05, 0x9c, 0x01, 0xa1, 0xda, 0x35,
+	0x5d, 0xb3, 0x70, 0xe6, 0xa9, 0x80, 0x8b, 0x91,
+	0xb7, 0xb3, 0x5f, 0x24, 0x9a, 0xb7, 0xd1, 0x6b,
+	0xa1, 0x1c, 0x50, 0xba, 0x49, 0xe0, 0xee, 0x2e,
+	0x75, 0xac, 0x69, 0xc0, 0xeb, 0x03, 0xdd, 0x19,
+	0xe5, 0xf6, 0x06, 0xdd, 0xc3, 0xd7, 0x2b, 0x07,
+	0x07, 0x30, 0xa7, 0x19, 0x0c, 0xbf, 0xe6, 0x18,
+	0xcc, 0xb1, 0x01, 0x11, 0x85, 0x77, 0x1d, 0x96,
+	0xa7, 0xa3, 0x00, 0x84, 0x02, 0xa2, 0x83, 0x68,
+	0xda, 0x17, 0x27, 0xc8, 0x7f, 0x23, 0xb7, 0xf4,
+	0x13, 0x85, 0xcf, 0xdd, 0x7a, 0x7d, 0x24, 0x57,
+	0xfe, 0x05, 0x93, 0xf5, 0x74, 0xce, 0xed, 0x0c,
+	0x20, 0x98, 0x8d, 0x92, 0x30, 0xa1, 0x29, 0x23,
+	0x1a, 0xa0, 0x4f, 0x69, 0x56, 0x4c, 0xe1, 0xc8,
+	0xce, 0xf6, 0x9a, 0x0c, 0xa4, 0xfa, 0x04, 0xf6,
+	0x62, 0x95, 0xf2, 0xfa, 0xc7, 0x40, 0x68, 0x40,
+	0x8f, 0x41, 0xda, 0xb4, 0x26, 0x6f, 0x70, 0xab,
+	0x40, 0x61, 0xa4, 0x0e, 0x75, 0xfb, 0x86, 0xeb,
+	0x9d, 0x9a, 0x1f, 0xec, 0x76, 0x99, 0xe7, 0xea,
+	0xaa, 0x1e, 0x2d, 0xb5, 0xd4, 0xa6, 0x1a, 0xb8,
+	0x61, 0x0a, 0x1d, 0x16, 0x5b, 0x98, 0xc2, 0x31,
+	0x40, 0xe7, 0x23, 0x1d, 0x66, 0x99, 0xc8, 0xc0,
+	0xd7, 0xce, 0xf3, 0x57, 0x40, 0x04, 0x3f, 0xfc,
+	0xea, 0xb3, 0xfc, 0xd2, 0xd3, 0x99, 0xa4, 0x94,
+	0x69, 0xa0, 0xef, 0xd1, 0x85, 0xb3, 0xa6, 0xb1,
+	0x28, 0xbf, 0x94, 0x67, 0x22, 0xc3, 0x36, 0x46,
+	0xf8, 0xd2, 0x0f, 0x5f, 0xf4, 0x59, 0x80, 0xe6,
+	0x2d, 0x43, 0x08, 0x7d, 0x19, 0x09, 0x97, 0xa7,
+	0x4c, 0x3d, 0x8d, 0xba, 0x65, 0x62, 0xa3, 0x71,
+	0x33, 0x29, 0x62, 0xdb, 0xc1, 0x33, 0x34, 0x1a,
+	0x63, 0x33, 0x16, 0xb6, 0x64, 0x7e, 0xab, 0x33,
+	0xf0, 0xe6, 0x26, 0x68, 0xba, 0x1d, 0x2e, 0x38,
+	0x08, 0xe6, 0x02, 0xd3, 0x25, 0x2c, 0x47, 0x23,
+	0x58, 0x34, 0x0f, 0x9d, 0x63, 0x4f, 0x63, 0xbb,
+	0x7f, 0x3b, 0x34, 0x38, 0xa7, 0xb5, 0x8d, 0x65,
+	0xd9, 0x9f, 0x79, 0x55, 0x3e, 0x4d, 0xe7, 0x73,
+	0xd8, 0xf6, 0x98, 0x97, 0x84, 0x60, 0x9c, 0xc8,
+	0xa9, 0x3c, 0xf6, 0xdc, 0x12, 0x5c, 0xe1, 0xbb,
+	0x0b, 0x8b, 0x98, 0x9c, 0x9d, 0x26, 0x7c, 0x4a,
+	0xe6, 0x46, 0x36, 0x58, 0x21, 0x4a, 0xee, 0xca,
+	0xd7, 0x3b, 0xc2, 0x6c, 0x49, 0x2f, 0xe5, 0xd5,
+	0x03, 0x59, 0x84, 0x53, 0xcb, 0xfe, 0x92, 0x71,
+	0x2e, 0x7c, 0x21, 0xcc, 0x99, 0x85, 0x7f, 0xb8,
+	0x74, 0x90, 0x13, 0x42, 0x3f, 0xe0, 0x6b, 0x1d,
+	0xf2, 0x4d, 0x54, 0xd4, 0xfc, 0x3a, 0x05, 0xe6,
+	0x74, 0xaf, 0xa6, 0xa0, 0x2a, 0x20, 0x23, 0x5d,
+	0x34, 0x5c, 0xd9, 0x3e, 0x4e, 0xfa, 0x93, 0xe7,
+	0xaa, 0xe9, 0x6f, 0x08, 0x43, 0x67, 0x41, 0xc5,
+	0xad, 0xfb, 0x31, 0x95, 0x82, 0x73, 0x32, 0xd8,
+	0xa6, 0xa3, 0xed, 0x0e, 0x2d, 0xf6, 0x5f, 0xfd,
+	0x80, 0xa6, 0x7a, 0xe0, 0xdf, 0x78, 0x15, 0x29,
+	0x74, 0x33, 0xd0, 0x9e, 0x83, 0x86, 0x72, 0x22,
+	0x57, 0x29, 0xb9, 0x9e, 0x5d, 0xd3, 0x1a, 0xb5,
+	0x96, 0x72, 0x41, 0x3d, 0xf1, 0x64, 0x43, 0x67,
+	0xee, 0xaa, 0x5c, 0xd3, 0x9a, 0x96, 0x13, 0x11,
+	0x5d, 0xf3, 0x0c, 0x87, 0x82, 0x1e, 0x41, 0x9e,
+	0xd0, 0x27, 0xd7, 0x54, 0x3b, 0x67, 0x73, 0x09,
+	0x91, 0xe9, 0xd5, 0x36, 0xa7, 0xb5, 0x55, 0xe4,
+	0xf3, 0x21, 0x51, 0x49, 0x22, 0x07, 0x55, 0x4f,
+	0x44, 0x4b, 0xd2, 0x15, 0x93, 0x17, 0x2a, 0xfa,
+	0x4d, 0x4a, 0x57, 0xdb, 0x4c, 0xa6, 0xeb, 0xec,
+	0x53, 0x25, 0x6c, 0x21, 0xed, 0x00, 0x4c, 0x3b,
+	0xca, 0x14, 0x57, 0xa9, 0xd6, 0x6a, 0xcd, 0x8d,
+	0x5e, 0x74, 0xac, 0x72, 0xc1, 0x97, 0xe5, 0x1b,
+	0x45, 0x4e, 0xda, 0xfc, 0xcc, 0x40, 0xe8, 0x48,
+	0x88, 0x0b, 0xa3, 0xe3, 0x8d, 0x83, 0x42, 0xc3,
+	0x23, 0xfd, 0x68, 0xb5, 0x8e, 0xf1, 0x9d, 0x63,
+	0x77, 0xe9, 0xa3, 0x8e, 0x8c, 0x26, 0x6b, 0xbd,
+	0x72, 0x73, 0x35, 0x0c, 0x03, 0xf8, 0x43, 0x78,
+	0x52, 0x71, 0x15, 0x1f, 0x71, 0x5d, 0x6e, 0xed,
+	0xb9, 0xcc, 0x86, 0x30, 0xdb, 0x2b, 0xd3, 0x82,
+	0x88, 0x23, 0x71, 0x90, 0x53, 0x5c, 0xa9, 0x2f,
+	0x76, 0x01, 0xb7, 0x9a, 0xfe, 0x43, 0x55, 0xa3,
+	0x04, 0x9b, 0x0e, 0xe4, 0x59, 0xdf, 0xc9, 0xe9,
+	0xb1, 0xea, 0x29, 0x28, 0x3c, 0x5c, 0xae, 0x72,
+	0x84, 0xb6, 0xc6, 0xeb, 0x0c, 0x27, 0x07, 0x74,
+	0x90, 0x0d, 0x31, 0xb0, 0x00, 0x77, 0xe9, 0x40,
+	0x70, 0x6f, 0x68, 0xa7, 0xfd, 0x06, 0xec, 0x4b,
+	0xc0, 0xb7, 0xac, 0xbc, 0x33, 0xb7, 0x6d, 0x0a,
+	0xbd, 0x12, 0x1b, 0x59, 0xcb, 0xdd, 0x32, 0xf5,
+	0x1d, 0x94, 0x57, 0x76, 0x9e, 0x0c, 0x18, 0x98,
+	0x71, 0xd7, 0x2a, 0xdb, 0x0b, 0x7b, 0xa7, 0x71,
+	0xb7, 0x67, 0x81, 0x23, 0x96, 0xae, 0xb9, 0x7e,
+	0x32, 0x43, 0x92, 0x8a, 0x19, 0xa0, 0xc4, 0xd4,
+	0x3b, 0x57, 0xf9, 0x4a, 0x2c, 0xfb, 0x51, 0x46,
+	0xbb, 0xcb, 0x5d, 0xb3, 0xef, 0x13, 0x93, 0x6e,
+	0x68, 0x42, 0x54, 0x57, 0xd3, 0x6a, 0x3a, 0x8f,
+	0x9d, 0x66, 0xbf, 0xbd, 0x36, 0x23, 0xf5, 0x93,
+	0x83, 0x7b, 0x9c, 0xc0, 0xdd, 0xc5, 0x49, 0xc0,
+	0x64, 0xed, 0x07, 0x12, 0xb3, 0xe6, 0xe4, 0xe5,
+	0x38, 0x95, 0x23, 0xb1, 0xa0, 0x3b, 0x1a, 0x61,
+	0xda, 0x17, 0xac, 0xc3, 0x58, 0xdd, 0x74, 0x64,
+	0x22, 0x11, 0xe8, 0x32, 0x1d, 0x16, 0x93, 0x85,
+	0x99, 0xa5, 0x9c, 0x34, 0x55, 0xb1, 0xe9, 0x20,
+	0x72, 0xc9, 0x28, 0x7b, 0x79, 0x00, 0xa1, 0xa6,
+	0xa3, 0x27, 0x40, 0x18, 0x8a, 0x54, 0xe0, 0xcc,
+	0xe8, 0x4e, 0x8e, 0x43, 0x96, 0xe7, 0x3f, 0xc8,
+	0xe9, 0xb2, 0xf9, 0xc9, 0xda, 0x04, 0x71, 0x50,
+	0x47, 0xe4, 0xaa, 0xce, 0xa2, 0x30, 0xc8, 0xe4,
+	0xac, 0xc7, 0x0d, 0x06, 0x2e, 0xe6, 0xe8, 0x80,
+	0x36, 0x29, 0x9e, 0x01, 0xb8, 0xc3, 0xf0, 0xa0,
+	0x5d, 0x7a, 0xca, 0x4d, 0xa0, 0x57, 0xbd, 0x2a,
+	0x45, 0xa7, 0x7f, 0x9c, 0x93, 0x07, 0x8f, 0x35,
+	0x67, 0x92, 0xe3, 0xe9, 0x7f, 0xa8, 0x61, 0x43,
+	0x9e, 0x25, 0x4f, 0x33, 0x76, 0x13, 0x6e, 0x12,
+	0xb9, 0xdd, 0xa4, 0x7c, 0x08, 0x9f, 0x7c, 0xe7,
+	0x0a, 0x8d, 0x84, 0x06, 0xa4, 0x33, 0x17, 0x34,
+	0x5e, 0x10, 0x7c, 0xc0, 0xa8, 0x3d, 0x1f, 0x42,
+	0x20, 0x51, 0x65, 0x5d, 0x09, 0xc3, 0xaa, 0xc0,
+	0xc8, 0x0d, 0xf0, 0x79, 0xbc, 0x20, 0x1b, 0x95,
+	0xe7, 0x06, 0x7d, 0x47, 0x20, 0x03, 0x1a, 0x74,
+	0xdd, 0xe2, 0xd4, 0xae, 0x38, 0x71, 0x9b, 0xf5,
+	0x80, 0xec, 0x08, 0x4e, 0x56, 0xba, 0x76, 0x12,
+	0x1a, 0xdf, 0x48, 0xf3, 0xae, 0xb3, 0xe6, 0xe6,
+	0xbe, 0xc0, 0x91, 0x2e, 0x01, 0xb3, 0x01, 0x86,
+	0xa2, 0xb9, 0x52, 0xd1, 0x21, 0xae, 0xd4, 0x97,
+	0x1d, 0xef, 0x41, 0x12, 0x95, 0x3d, 0x48, 0x45,
+	0x1c, 0x56, 0x32, 0x8f, 0xb8, 0x43, 0xbb, 0x19,
+	0xf3, 0xca, 0xe9, 0xeb, 0x6d, 0x84, 0xbe, 0x86,
+	0x06, 0xe2, 0x36, 0xb2, 0x62, 0x9d, 0xd3, 0x4c,
+	0x48, 0x18, 0x54, 0x13, 0x4e, 0xcf, 0xfd, 0xba,
+	0x84, 0xb9, 0x30, 0x53, 0xcf, 0xfb, 0xb9, 0x29,
+	0x8f, 0xdc, 0x9f, 0xef, 0x60, 0x0b, 0x64, 0xf6,
+	0x8b, 0xee, 0xa6, 0x91, 0xc2, 0x41, 0x6c, 0xf6,
+	0xfa, 0x79, 0x67, 0x4b, 0xc1, 0x3f, 0xaf, 0x09,
+	0x81, 0xd4, 0x5d, 0xcb, 0x09, 0xdf, 0x36, 0x31,
+	0xc0, 0x14, 0x3c, 0x7c, 0x0e, 0x65, 0x95, 0x99,
+	0x6d, 0xa3, 0xf4, 0xd7, 0x38, 0xee, 0x1a, 0x2b,
+	0x37, 0xe2, 0xa4, 0x3b, 0x4b, 0xd0, 0x65, 0xca,
+	0xf8, 0xc3, 0xe8, 0x15, 0x20, 0xef, 0xf2, 0x00,
+	0xfd, 0x01, 0x09, 0xc5, 0xc8, 0x17, 0x04, 0x93,
+	0xd0, 0x93, 0x03, 0x55, 0xc5, 0xfe, 0x32, 0xa3,
+	0x3e, 0x28, 0x2d, 0x3b, 0x93, 0x8a, 0xcc, 0x07,
+	0x72, 0x80, 0x8b, 0x74, 0x16, 0x24, 0xbb, 0xda,
+	0x94, 0x39, 0x30, 0x8f, 0xb1, 0xcd, 0x4a, 0x90,
+	0x92, 0x7c, 0x14, 0x8f, 0x95, 0x4e, 0xac, 0x9b,
+	0xd8, 0x8f, 0x1a, 0x87, 0xa4, 0x32, 0x27, 0x8a,
+	0xba, 0xf7, 0x41, 0xcf, 0x84, 0x37, 0x19, 0xe6,
+	0x06, 0xf5, 0x0e, 0xcf, 0x36, 0xf5, 0x9e, 0x6c,
+	0xde, 0xbc, 0xff, 0x64, 0x7e, 0x4e, 0x59, 0x57,
+	0x48, 0xfe, 0x14, 0xf7, 0x9c, 0x93, 0x5d, 0x15,
+	0xad, 0xcc, 0x11, 0xb1, 0x17, 0x18, 0xb2, 0x7e,
+	0xcc, 0xab, 0xe9, 0xce, 0x7d, 0x77, 0x5b, 0x51,
+	0x1b, 0x1e, 0x20, 0xa8, 0x32, 0x06, 0x0e, 0x75,
+	0x93, 0xac, 0xdb, 0x35, 0x37, 0x1f, 0xe9, 0x19,
+	0x1d, 0xb4, 0x71, 0x97, 0xd6, 0x4e, 0x2c, 0x08,
+	0xa5, 0x13, 0xf9, 0x0e, 0x7e, 0x78, 0x6e, 0x14,
+	0xe0, 0xa9, 0xb9, 0x96, 0x4c, 0x80, 0x82, 0xba,
+	0x17, 0xb3, 0x9d, 0x69, 0xb0, 0x84, 0x46, 0xff,
+	0xf9, 0x52, 0x79, 0x94, 0x58, 0x3a, 0x62, 0x90,
+	0x15, 0x35, 0x71, 0x10, 0x37, 0xed, 0xa1, 0x8e,
+	0x53, 0x6e, 0xf4, 0x26, 0x57, 0x93, 0x15, 0x93,
+	0xf6, 0x81, 0x2c, 0x5a, 0x10, 0xda, 0x92, 0xad,
+	0x2f, 0xdb, 0x28, 0x31, 0x2d, 0x55, 0x04, 0xd2,
+	0x06, 0x28, 0x8c, 0x1e, 0xdc, 0xea, 0x54, 0xac,
+	0xff, 0xb7, 0x6c, 0x30, 0x15, 0xd4, 0xb4, 0x0d,
+	0x00, 0x93, 0x57, 0xdd, 0xd2, 0x07, 0x07, 0x06,
+	0xd9, 0x43, 0x9b, 0xcd, 0x3a, 0xf4, 0x7d, 0x4c,
+	0x36, 0x5d, 0x23, 0xa2, 0xcc, 0x57, 0x40, 0x91,
+	0xe9, 0x2c, 0x2f, 0x2c, 0xd5, 0x30, 0x9b, 0x17,
+	0xb0, 0xc9, 0xf7, 0xa7, 0x2f, 0xd1, 0x93, 0x20,
+	0x6b, 0xc6, 0xc1, 0xe4, 0x6f, 0xcb, 0xd1, 0xe7,
+	0x09, 0x0f, 0x9e, 0xdc, 0xaa, 0x9f, 0x2f, 0xdf,
+	0x56, 0x9f, 0xd4, 0x33, 0x04, 0xaf, 0xd3, 0x6c,
+	0x58, 0x61, 0xf0, 0x30, 0xec, 0xf2, 0x7f, 0xf2,
+	0x9c, 0xdf, 0x39, 0xbb, 0x6f, 0xa2, 0x8c, 0x7e,
+	0xc4, 0x22, 0x51, 0x71, 0xc0, 0x4d, 0x14, 0x1a,
+	0xc4, 0xcd, 0x04, 0xd9, 0x87, 0x08, 0x50, 0x05,
+	0xcc, 0xaf, 0xf6, 0xf0, 0x8f, 0x92, 0x54, 0x58,
+	0xc2, 0xc7, 0x09, 0x7a, 0x59, 0x02, 0x05, 0xe8,
+	0xb0, 0x86, 0xd9, 0xbf, 0x7b, 0x35, 0x51, 0x4d,
+	0xaf, 0x08, 0x97, 0x2c, 0x65, 0xda, 0x2a, 0x71,
+	0x3a, 0xa8, 0x51, 0xcc, 0xf2, 0x73, 0x27, 0xc3,
+	0xfd, 0x62, 0xcf, 0xe3, 0xb2, 0xca, 0xcb, 0xbe,
+	0x1a, 0x0a, 0xa1, 0x34, 0x7b, 0x77, 0xc4, 0x62,
+	0x68, 0x78, 0x5f, 0x94, 0x07, 0x04, 0x65, 0x16,
+	0x4b, 0x61, 0xcb, 0xff, 0x75, 0x26, 0x50, 0x66,
+	0x1f, 0x6e, 0x93, 0xf8, 0xc5, 0x51, 0xeb, 0xa4,
+	0x4a, 0x48, 0x68, 0x6b, 0xe2, 0x5e, 0x44, 0xb2,
+	0x50, 0x2c, 0x6c, 0xae, 0x79, 0x4e, 0x66, 0x35,
+	0x81, 0x50, 0xac, 0xbc, 0x3f, 0xb1, 0x0c, 0xf3,
+	0x05, 0x3c, 0x4a, 0xa3, 0x6c, 0x2a, 0x79, 0xb4,
+	0xb7, 0xab, 0xca, 0xc7, 0x9b, 0x8e, 0xcd, 0x5f,
+	0x11, 0x03, 0xcb, 0x30, 0xa3, 0xab, 0xda, 0xfe,
+	0x64, 0xb9, 0xbb, 0xd8, 0x5e, 0x3a, 0x1a, 0x56,
+	0xe5, 0x05, 0x48, 0x90, 0x1e, 0x61, 0x69, 0x1b,
+	0x22, 0xe6, 0x1a, 0x3c, 0x75, 0xad, 0x1f, 0x37,
+	0x28, 0xdc, 0xe4, 0x6d, 0xbd, 0x42, 0xdc, 0xd3,
+	0xc8, 0xb6, 0x1c, 0x48, 0xfe, 0x94, 0x77, 0x7f,
+	0xbd, 0x62, 0xac, 0xa3, 0x47, 0x27, 0xcf, 0x5f,
+	0xd9, 0xdb, 0xaf, 0xec, 0xf7, 0x5e, 0xc1, 0xb0,
+	0x9d, 0x01, 0x26, 0x99, 0x7e, 0x8f, 0x03, 0x70,
+	0xb5, 0x42, 0xbe, 0x67, 0x28, 0x1b, 0x7c, 0xbd,
+	0x61, 0x21, 0x97, 0xcc, 0x5c, 0xe1, 0x97, 0x8f,
+	0x8d, 0xde, 0x2b, 0xaa, 0xa7, 0x71, 0x1d, 0x1e,
+	0x02, 0x73, 0x70, 0x58, 0x32, 0x5b, 0x1d, 0x67,
+	0x3d, 0xe0, 0x74, 0x4f, 0x03, 0xf2, 0x70, 0x51,
+	0x79, 0xf1, 0x61, 0x70, 0x15, 0x74, 0x9d, 0x23,
+	0x89, 0xde, 0xac, 0xfd, 0xde, 0xd0, 0x1f, 0xc3,
+	0x87, 0x44, 0x35, 0x4b, 0xe5, 0xb0, 0x60, 0xc5,
+	0x22, 0xe4, 0x9e, 0xca, 0xeb, 0xd5, 0x3a, 0x09,
+	0x45, 0xa4, 0xdb, 0xfa, 0x3f, 0xeb, 0x1b, 0xc7,
+	0xc8, 0x14, 0x99, 0x51, 0x92, 0x10, 0xed, 0xed,
+	0x28, 0xe0, 0xa1, 0xf8, 0x26, 0xcf, 0xcd, 0xcb,
+	0x63, 0xa1, 0x3b, 0xe3, 0xdf, 0x7e, 0xfe, 0xa6,
+	0xf0, 0x81, 0x9a, 0xbf, 0x55, 0xde, 0x54, 0xd5,
+	0x56, 0x60, 0x98, 0x10, 0x68, 0xf4, 0x38, 0x96,
+	0x8e, 0x6f, 0x1d, 0x44, 0x7f, 0xd6, 0x2f, 0xfe,
+	0x55, 0xfb, 0x0c, 0x7e, 0x67, 0xe2, 0x61, 0x44,
+	0xed, 0xf2, 0x35, 0x30, 0x5d, 0xe9, 0xc7, 0xd6,
+	0x6d, 0xe0, 0xa0, 0xed, 0xf3, 0xfc, 0xd8, 0x3e,
+	0x0a, 0x7b, 0xcd, 0xaf, 0x65, 0x68, 0x18, 0xc0,
+	0xec, 0x04, 0x1c, 0x74, 0x6d, 0xe2, 0x6e, 0x79,
+	0xd4, 0x11, 0x2b, 0x62, 0xd5, 0x27, 0xad, 0x4f,
+	0x01, 0x59, 0x73, 0xcc, 0x6a, 0x53, 0xfb, 0x2d,
+	0xd5, 0x4e, 0x99, 0x21, 0x65, 0x4d, 0xf5, 0x82,
+	0xf7, 0xd8, 0x42, 0xce, 0x6f, 0x3d, 0x36, 0x47,
+	0xf1, 0x05, 0x16, 0xe8, 0x1b, 0x6a, 0x8f, 0x93,
+	0xf2, 0x8f, 0x37, 0x40, 0x12, 0x28, 0xa3, 0xe6,
+	0xb9, 0x17, 0x4a, 0x1f, 0xb1, 0xd1, 0x66, 0x69,
+	0x86, 0xc4, 0xfc, 0x97, 0xae, 0x3f, 0x8f, 0x1e,
+	0x2b, 0xdf, 0xcd, 0xf9, 0x3c
+};
+static const u8 enc_assoc011[] __initconst = {
+	0xd6, 0x31, 0xda, 0x5d, 0x42, 0x5e, 0xd7
+};
+static const u8 enc_nonce011[] __initconst = {
+	0xfd, 0x87, 0xd4, 0xd8, 0x62, 0xfd, 0xec, 0xaa
+};
+static const u8 enc_key011[] __initconst = {
+	0x35, 0x4e, 0xb5, 0x70, 0x50, 0x42, 0x8a, 0x85,
+	0xf2, 0xfb, 0xed, 0x7b, 0xd0, 0x9e, 0x97, 0xca,
+	0xfa, 0x98, 0x66, 0x63, 0xee, 0x37, 0xcc, 0x52,
+	0xfe, 0xd1, 0xdf, 0x95, 0x15, 0x34, 0x29, 0x38
+};
+
+static const u8 enc_input012[] __initconst = {
+	0x74, 0xa6, 0x3e, 0xe4, 0xb1, 0xcb, 0xaf, 0xb0,
+	0x40, 0xe5, 0x0f, 0x9e, 0xf1, 0xf2, 0x89, 0xb5,
+	0x42, 0x34, 0x8a, 0xa1, 0x03, 0xb7, 0xe9, 0x57,
+	0x46, 0xbe, 0x20, 0xe4, 0x6e, 0xb0, 0xeb, 0xff,
+	0xea, 0x07, 0x7e, 0xef, 0xe2, 0x55, 0x9f, 0xe5,
+	0x78, 0x3a, 0xb7, 0x83, 0xc2, 0x18, 0x40, 0x7b,
+	0xeb, 0xcd, 0x81, 0xfb, 0x90, 0x12, 0x9e, 0x46,
+	0xa9, 0xd6, 0x4a, 0xba, 0xb0, 0x62, 0xdb, 0x6b,
+	0x99, 0xc4, 0xdb, 0x54, 0x4b, 0xb8, 0xa5, 0x71,
+	0xcb, 0xcd, 0x63, 0x32, 0x55, 0xfb, 0x31, 0xf0,
+	0x38, 0xf5, 0xbe, 0x78, 0xe4, 0x45, 0xce, 0x1b,
+	0x6a, 0x5b, 0x0e, 0xf4, 0x16, 0xe4, 0xb1, 0x3d,
+	0xf6, 0x63, 0x7b, 0xa7, 0x0c, 0xde, 0x6f, 0x8f,
+	0x74, 0xdf, 0xe0, 0x1e, 0x9d, 0xce, 0x8f, 0x24,
+	0xef, 0x23, 0x35, 0x33, 0x7b, 0x83, 0x34, 0x23,
+	0x58, 0x74, 0x14, 0x77, 0x1f, 0xc2, 0x4f, 0x4e,
+	0xc6, 0x89, 0xf9, 0x52, 0x09, 0x37, 0x64, 0x14,
+	0xc4, 0x01, 0x6b, 0x9d, 0x77, 0xe8, 0x90, 0x5d,
+	0xa8, 0x4a, 0x2a, 0xef, 0x5c, 0x7f, 0xeb, 0xbb,
+	0xb2, 0xc6, 0x93, 0x99, 0x66, 0xdc, 0x7f, 0xd4,
+	0x9e, 0x2a, 0xca, 0x8d, 0xdb, 0xe7, 0x20, 0xcf,
+	0xe4, 0x73, 0xae, 0x49, 0x7d, 0x64, 0x0f, 0x0e,
+	0x28, 0x46, 0xa9, 0xa8, 0x32, 0xe4, 0x0e, 0xf6,
+	0x51, 0x53, 0xb8, 0x3c, 0xb1, 0xff, 0xa3, 0x33,
+	0x41, 0x75, 0xff, 0xf1, 0x6f, 0xf1, 0xfb, 0xbb,
+	0x83, 0x7f, 0x06, 0x9b, 0xe7, 0x1b, 0x0a, 0xe0,
+	0x5c, 0x33, 0x60, 0x5b, 0xdb, 0x5b, 0xed, 0xfe,
+	0xa5, 0x16, 0x19, 0x72, 0xa3, 0x64, 0x23, 0x00,
+	0x02, 0xc7, 0xf3, 0x6a, 0x81, 0x3e, 0x44, 0x1d,
+	0x79, 0x15, 0x5f, 0x9a, 0xde, 0xe2, 0xfd, 0x1b,
+	0x73, 0xc1, 0xbc, 0x23, 0xba, 0x31, 0xd2, 0x50,
+	0xd5, 0xad, 0x7f, 0x74, 0xa7, 0xc9, 0xf8, 0x3e,
+	0x2b, 0x26, 0x10, 0xf6, 0x03, 0x36, 0x74, 0xe4,
+	0x0e, 0x6a, 0x72, 0xb7, 0x73, 0x0a, 0x42, 0x28,
+	0xc2, 0xad, 0x5e, 0x03, 0xbe, 0xb8, 0x0b, 0xa8,
+	0x5b, 0xd4, 0xb8, 0xba, 0x52, 0x89, 0xb1, 0x9b,
+	0xc1, 0xc3, 0x65, 0x87, 0xed, 0xa5, 0xf4, 0x86,
+	0xfd, 0x41, 0x80, 0x91, 0x27, 0x59, 0x53, 0x67,
+	0x15, 0x78, 0x54, 0x8b, 0x2d, 0x3d, 0xc7, 0xff,
+	0x02, 0x92, 0x07, 0x5f, 0x7a, 0x4b, 0x60, 0x59,
+	0x3c, 0x6f, 0x5c, 0xd8, 0xec, 0x95, 0xd2, 0xfe,
+	0xa0, 0x3b, 0xd8, 0x3f, 0xd1, 0x69, 0xa6, 0xd6,
+	0x41, 0xb2, 0xf4, 0x4d, 0x12, 0xf4, 0x58, 0x3e,
+	0x66, 0x64, 0x80, 0x31, 0x9b, 0xa8, 0x4c, 0x8b,
+	0x07, 0xb2, 0xec, 0x66, 0x94, 0x66, 0x47, 0x50,
+	0x50, 0x5f, 0x18, 0x0b, 0x0e, 0xd6, 0xc0, 0x39,
+	0x21, 0x13, 0x9e, 0x33, 0xbc, 0x79, 0x36, 0x02,
+	0x96, 0x70, 0xf0, 0x48, 0x67, 0x2f, 0x26, 0xe9,
+	0x6d, 0x10, 0xbb, 0xd6, 0x3f, 0xd1, 0x64, 0x7a,
+	0x2e, 0xbe, 0x0c, 0x61, 0xf0, 0x75, 0x42, 0x38,
+	0x23, 0xb1, 0x9e, 0x9f, 0x7c, 0x67, 0x66, 0xd9,
+	0x58, 0x9a, 0xf1, 0xbb, 0x41, 0x2a, 0x8d, 0x65,
+	0x84, 0x94, 0xfc, 0xdc, 0x6a, 0x50, 0x64, 0xdb,
+	0x56, 0x33, 0x76, 0x00, 0x10, 0xed, 0xbe, 0xd2,
+	0x12, 0xf6, 0xf6, 0x1b, 0xa2, 0x16, 0xde, 0xae,
+	0x31, 0x95, 0xdd, 0xb1, 0x08, 0x7e, 0x4e, 0xee,
+	0xe7, 0xf9, 0xa5, 0xfb, 0x5b, 0x61, 0x43, 0x00,
+	0x40, 0xf6, 0x7e, 0x02, 0x04, 0x32, 0x4e, 0x0c,
+	0xe2, 0x66, 0x0d, 0xd7, 0x07, 0x98, 0x0e, 0xf8,
+	0x72, 0x34, 0x6d, 0x95, 0x86, 0xd7, 0xcb, 0x31,
+	0x54, 0x47, 0xd0, 0x38, 0x29, 0x9c, 0x5a, 0x68,
+	0xd4, 0x87, 0x76, 0xc9, 0xe7, 0x7e, 0xe3, 0xf4,
+	0x81, 0x6d, 0x18, 0xcb, 0xc9, 0x05, 0xaf, 0xa0,
+	0xfb, 0x66, 0xf7, 0xf1, 0x1c, 0xc6, 0x14, 0x11,
+	0x4f, 0x2b, 0x79, 0x42, 0x8b, 0xbc, 0xac, 0xe7,
+	0x6c, 0xfe, 0x0f, 0x58, 0xe7, 0x7c, 0x78, 0x39,
+	0x30, 0xb0, 0x66, 0x2c, 0x9b, 0x6d, 0x3a, 0xe1,
+	0xcf, 0xc9, 0xa4, 0x0e, 0x6d, 0x6d, 0x8a, 0xa1,
+	0x3a, 0xe7, 0x28, 0xd4, 0x78, 0x4c, 0xa6, 0xa2,
+	0x2a, 0xa6, 0x03, 0x30, 0xd7, 0xa8, 0x25, 0x66,
+	0x87, 0x2f, 0x69, 0x5c, 0x4e, 0xdd, 0xa5, 0x49,
+	0x5d, 0x37, 0x4a, 0x59, 0xc4, 0xaf, 0x1f, 0xa2,
+	0xe4, 0xf8, 0xa6, 0x12, 0x97, 0xd5, 0x79, 0xf5,
+	0xe2, 0x4a, 0x2b, 0x5f, 0x61, 0xe4, 0x9e, 0xe3,
+	0xee, 0xb8, 0xa7, 0x5b, 0x2f, 0xf4, 0x9e, 0x6c,
+	0xfb, 0xd1, 0xc6, 0x56, 0x77, 0xba, 0x75, 0xaa,
+	0x3d, 0x1a, 0xa8, 0x0b, 0xb3, 0x68, 0x24, 0x00,
+	0x10, 0x7f, 0xfd, 0xd7, 0xa1, 0x8d, 0x83, 0x54,
+	0x4f, 0x1f, 0xd8, 0x2a, 0xbe, 0x8a, 0x0c, 0x87,
+	0xab, 0xa2, 0xde, 0xc3, 0x39, 0xbf, 0x09, 0x03,
+	0xa5, 0xf3, 0x05, 0x28, 0xe1, 0xe1, 0xee, 0x39,
+	0x70, 0x9c, 0xd8, 0x81, 0x12, 0x1e, 0x02, 0x40,
+	0xd2, 0x6e, 0xf0, 0xeb, 0x1b, 0x3d, 0x22, 0xc6,
+	0xe5, 0xe3, 0xb4, 0x5a, 0x98, 0xbb, 0xf0, 0x22,
+	0x28, 0x8d, 0xe5, 0xd3, 0x16, 0x48, 0x24, 0xa5,
+	0xe6, 0x66, 0x0c, 0xf9, 0x08, 0xf9, 0x7e, 0x1e,
+	0xe1, 0x28, 0x26, 0x22, 0xc7, 0xc7, 0x0a, 0x32,
+	0x47, 0xfa, 0xa3, 0xbe, 0x3c, 0xc4, 0xc5, 0x53,
+	0x0a, 0xd5, 0x94, 0x4a, 0xd7, 0x93, 0xd8, 0x42,
+	0x99, 0xb9, 0x0a, 0xdb, 0x56, 0xf7, 0xb9, 0x1c,
+	0x53, 0x4f, 0xfa, 0xd3, 0x74, 0xad, 0xd9, 0x68,
+	0xf1, 0x1b, 0xdf, 0x61, 0xc6, 0x5e, 0xa8, 0x48,
+	0xfc, 0xd4, 0x4a, 0x4c, 0x3c, 0x32, 0xf7, 0x1c,
+	0x96, 0x21, 0x9b, 0xf9, 0xa3, 0xcc, 0x5a, 0xce,
+	0xd5, 0xd7, 0x08, 0x24, 0xf6, 0x1c, 0xfd, 0xdd,
+	0x38, 0xc2, 0x32, 0xe9, 0xb8, 0xe7, 0xb6, 0xfa,
+	0x9d, 0x45, 0x13, 0x2c, 0x83, 0xfd, 0x4a, 0x69,
+	0x82, 0xcd, 0xdc, 0xb3, 0x76, 0x0c, 0x9e, 0xd8,
+	0xf4, 0x1b, 0x45, 0x15, 0xb4, 0x97, 0xe7, 0x58,
+	0x34, 0xe2, 0x03, 0x29, 0x5a, 0xbf, 0xb6, 0xe0,
+	0x5d, 0x13, 0xd9, 0x2b, 0xb4, 0x80, 0xb2, 0x45,
+	0x81, 0x6a, 0x2e, 0x6c, 0x89, 0x7d, 0xee, 0xbb,
+	0x52, 0xdd, 0x1f, 0x18, 0xe7, 0x13, 0x6b, 0x33,
+	0x0e, 0xea, 0x36, 0x92, 0x77, 0x7b, 0x6d, 0x9c,
+	0x5a, 0x5f, 0x45, 0x7b, 0x7b, 0x35, 0x62, 0x23,
+	0xd1, 0xbf, 0x0f, 0xd0, 0x08, 0x1b, 0x2b, 0x80,
+	0x6b, 0x7e, 0xf1, 0x21, 0x47, 0xb0, 0x57, 0xd1,
+	0x98, 0x72, 0x90, 0x34, 0x1c, 0x20, 0x04, 0xff,
+	0x3d, 0x5c, 0xee, 0x0e, 0x57, 0x5f, 0x6f, 0x24,
+	0x4e, 0x3c, 0xea, 0xfc, 0xa5, 0xa9, 0x83, 0xc9,
+	0x61, 0xb4, 0x51, 0x24, 0xf8, 0x27, 0x5e, 0x46,
+	0x8c, 0xb1, 0x53, 0x02, 0x96, 0x35, 0xba, 0xb8,
+	0x4c, 0x71, 0xd3, 0x15, 0x59, 0x35, 0x22, 0x20,
+	0xad, 0x03, 0x9f, 0x66, 0x44, 0x3b, 0x9c, 0x35,
+	0x37, 0x1f, 0x9b, 0xbb, 0xf3, 0xdb, 0x35, 0x63,
+	0x30, 0x64, 0xaa, 0xa2, 0x06, 0xa8, 0x5d, 0xbb,
+	0xe1, 0x9f, 0x70, 0xec, 0x82, 0x11, 0x06, 0x36,
+	0xec, 0x8b, 0x69, 0x66, 0x24, 0x44, 0xc9, 0x4a,
+	0x57, 0xbb, 0x9b, 0x78, 0x13, 0xce, 0x9c, 0x0c,
+	0xba, 0x92, 0x93, 0x63, 0xb8, 0xe2, 0x95, 0x0f,
+	0x0f, 0x16, 0x39, 0x52, 0xfd, 0x3a, 0x6d, 0x02,
+	0x4b, 0xdf, 0x13, 0xd3, 0x2a, 0x22, 0xb4, 0x03,
+	0x7c, 0x54, 0x49, 0x96, 0x68, 0x54, 0x10, 0xfa,
+	0xef, 0xaa, 0x6c, 0xe8, 0x22, 0xdc, 0x71, 0x16,
+	0x13, 0x1a, 0xf6, 0x28, 0xe5, 0x6d, 0x77, 0x3d,
+	0xcd, 0x30, 0x63, 0xb1, 0x70, 0x52, 0xa1, 0xc5,
+	0x94, 0x5f, 0xcf, 0xe8, 0xb8, 0x26, 0x98, 0xf7,
+	0x06, 0xa0, 0x0a, 0x70, 0xfa, 0x03, 0x80, 0xac,
+	0xc1, 0xec, 0xd6, 0x4c, 0x54, 0xd7, 0xfe, 0x47,
+	0xb6, 0x88, 0x4a, 0xf7, 0x71, 0x24, 0xee, 0xf3,
+	0xd2, 0xc2, 0x4a, 0x7f, 0xfe, 0x61, 0xc7, 0x35,
+	0xc9, 0x37, 0x67, 0xcb, 0x24, 0x35, 0xda, 0x7e,
+	0xca, 0x5f, 0xf3, 0x8d, 0xd4, 0x13, 0x8e, 0xd6,
+	0xcb, 0x4d, 0x53, 0x8f, 0x53, 0x1f, 0xc0, 0x74,
+	0xf7, 0x53, 0xb9, 0x5e, 0x23, 0x37, 0xba, 0x6e,
+	0xe3, 0x9d, 0x07, 0x55, 0x25, 0x7b, 0xe6, 0x2a,
+	0x64, 0xd1, 0x32, 0xdd, 0x54, 0x1b, 0x4b, 0xc0,
+	0xe1, 0xd7, 0x69, 0x58, 0xf8, 0x93, 0x29, 0xc4,
+	0xdd, 0x23, 0x2f, 0xa5, 0xfc, 0x9d, 0x7e, 0xf8,
+	0xd4, 0x90, 0xcd, 0x82, 0x55, 0xdc, 0x16, 0x16,
+	0x9f, 0x07, 0x52, 0x9b, 0x9d, 0x25, 0xed, 0x32,
+	0xc5, 0x7b, 0xdf, 0xf6, 0x83, 0x46, 0x3d, 0x65,
+	0xb7, 0xef, 0x87, 0x7a, 0x12, 0x69, 0x8f, 0x06,
+	0x7c, 0x51, 0x15, 0x4a, 0x08, 0xe8, 0xac, 0x9a,
+	0x0c, 0x24, 0xa7, 0x27, 0xd8, 0x46, 0x2f, 0xe7,
+	0x01, 0x0e, 0x1c, 0xc6, 0x91, 0xb0, 0x6e, 0x85,
+	0x65, 0xf0, 0x29, 0x0d, 0x2e, 0x6b, 0x3b, 0xfb,
+	0x4b, 0xdf, 0xe4, 0x80, 0x93, 0x03, 0x66, 0x46,
+	0x3e, 0x8a, 0x6e, 0xf3, 0x5e, 0x4d, 0x62, 0x0e,
+	0x49, 0x05, 0xaf, 0xd4, 0xf8, 0x21, 0x20, 0x61,
+	0x1d, 0x39, 0x17, 0xf4, 0x61, 0x47, 0x95, 0xfb,
+	0x15, 0x2e, 0xb3, 0x4f, 0xd0, 0x5d, 0xf5, 0x7d,
+	0x40, 0xda, 0x90, 0x3c, 0x6b, 0xcb, 0x17, 0x00,
+	0x13, 0x3b, 0x64, 0x34, 0x1b, 0xf0, 0xf2, 0xe5,
+	0x3b, 0xb2, 0xc7, 0xd3, 0x5f, 0x3a, 0x44, 0xa6,
+	0x9b, 0xb7, 0x78, 0x0e, 0x42, 0x5d, 0x4c, 0xc1,
+	0xe9, 0xd2, 0xcb, 0xb7, 0x78, 0xd1, 0xfe, 0x9a,
+	0xb5, 0x07, 0xe9, 0xe0, 0xbe, 0xe2, 0x8a, 0xa7,
+	0x01, 0x83, 0x00, 0x8c, 0x5c, 0x08, 0xe6, 0x63,
+	0x12, 0x92, 0xb7, 0xb7, 0xa6, 0x19, 0x7d, 0x38,
+	0x13, 0x38, 0x92, 0x87, 0x24, 0xf9, 0x48, 0xb3,
+	0x5e, 0x87, 0x6a, 0x40, 0x39, 0x5c, 0x3f, 0xed,
+	0x8f, 0xee, 0xdb, 0x15, 0x82, 0x06, 0xda, 0x49,
+	0x21, 0x2b, 0xb5, 0xbf, 0x32, 0x7c, 0x9f, 0x42,
+	0x28, 0x63, 0xcf, 0xaf, 0x1e, 0xf8, 0xc6, 0xa0,
+	0xd1, 0x02, 0x43, 0x57, 0x62, 0xec, 0x9b, 0x0f,
+	0x01, 0x9e, 0x71, 0xd8, 0x87, 0x9d, 0x01, 0xc1,
+	0x58, 0x77, 0xd9, 0xaf, 0xb1, 0x10, 0x7e, 0xdd,
+	0xa6, 0x50, 0x96, 0xe5, 0xf0, 0x72, 0x00, 0x6d,
+	0x4b, 0xf8, 0x2a, 0x8f, 0x19, 0xf3, 0x22, 0x88,
+	0x11, 0x4a, 0x8b, 0x7c, 0xfd, 0xb7, 0xed, 0xe1,
+	0xf6, 0x40, 0x39, 0xe0, 0xe9, 0xf6, 0x3d, 0x25,
+	0xe6, 0x74, 0x3c, 0x58, 0x57, 0x7f, 0xe1, 0x22,
+	0x96, 0x47, 0x31, 0x91, 0xba, 0x70, 0x85, 0x28,
+	0x6b, 0x9f, 0x6e, 0x25, 0xac, 0x23, 0x66, 0x2f,
+	0x29, 0x88, 0x28, 0xce, 0x8c, 0x5c, 0x88, 0x53,
+	0xd1, 0x3b, 0xcc, 0x6a, 0x51, 0xb2, 0xe1, 0x28,
+	0x3f, 0x91, 0xb4, 0x0d, 0x00, 0x3a, 0xe3, 0xf8,
+	0xc3, 0x8f, 0xd7, 0x96, 0x62, 0x0e, 0x2e, 0xfc,
+	0xc8, 0x6c, 0x77, 0xa6, 0x1d, 0x22, 0xc1, 0xb8,
+	0xe6, 0x61, 0xd7, 0x67, 0x36, 0x13, 0x7b, 0xbb,
+	0x9b, 0x59, 0x09, 0xa6, 0xdf, 0xf7, 0x6b, 0xa3,
+	0x40, 0x1a, 0xf5, 0x4f, 0xb4, 0xda, 0xd3, 0xf3,
+	0x81, 0x93, 0xc6, 0x18, 0xd9, 0x26, 0xee, 0xac,
+	0xf0, 0xaa, 0xdf, 0xc5, 0x9c, 0xca, 0xc2, 0xa2,
+	0xcc, 0x7b, 0x5c, 0x24, 0xb0, 0xbc, 0xd0, 0x6a,
+	0x4d, 0x89, 0x09, 0xb8, 0x07, 0xfe, 0x87, 0xad,
+	0x0a, 0xea, 0xb8, 0x42, 0xf9, 0x5e, 0xb3, 0x3e,
+	0x36, 0x4c, 0xaf, 0x75, 0x9e, 0x1c, 0xeb, 0xbd,
+	0xbc, 0xbb, 0x80, 0x40, 0xa7, 0x3a, 0x30, 0xbf,
+	0xa8, 0x44, 0xf4, 0xeb, 0x38, 0xad, 0x29, 0xba,
+	0x23, 0xed, 0x41, 0x0c, 0xea, 0xd2, 0xbb, 0x41,
+	0x18, 0xd6, 0xb9, 0xba, 0x65, 0x2b, 0xa3, 0x91,
+	0x6d, 0x1f, 0xa9, 0xf4, 0xd1, 0x25, 0x8d, 0x4d,
+	0x38, 0xff, 0x64, 0xa0, 0xec, 0xde, 0xa6, 0xb6,
+	0x79, 0xab, 0x8e, 0x33, 0x6c, 0x47, 0xde, 0xaf,
+	0x94, 0xa4, 0xa5, 0x86, 0x77, 0x55, 0x09, 0x92,
+	0x81, 0x31, 0x76, 0xc7, 0x34, 0x22, 0x89, 0x8e,
+	0x3d, 0x26, 0x26, 0xd7, 0xfc, 0x1e, 0x16, 0x72,
+	0x13, 0x33, 0x63, 0xd5, 0x22, 0xbe, 0xb8, 0x04,
+	0x34, 0x84, 0x41, 0xbb, 0x80, 0xd0, 0x9f, 0x46,
+	0x48, 0x07, 0xa7, 0xfc, 0x2b, 0x3a, 0x75, 0x55,
+	0x8c, 0xc7, 0x6a, 0xbd, 0x7e, 0x46, 0x08, 0x84,
+	0x0f, 0xd5, 0x74, 0xc0, 0x82, 0x8e, 0xaa, 0x61,
+	0x05, 0x01, 0xb2, 0x47, 0x6e, 0x20, 0x6a, 0x2d,
+	0x58, 0x70, 0x48, 0x32, 0xa7, 0x37, 0xd2, 0xb8,
+	0x82, 0x1a, 0x51, 0xb9, 0x61, 0xdd, 0xfd, 0x9d,
+	0x6b, 0x0e, 0x18, 0x97, 0xf8, 0x45, 0x5f, 0x87,
+	0x10, 0xcf, 0x34, 0x72, 0x45, 0x26, 0x49, 0x70,
+	0xe7, 0xa3, 0x78, 0xe0, 0x52, 0x89, 0x84, 0x94,
+	0x83, 0x82, 0xc2, 0x69, 0x8f, 0xe3, 0xe1, 0x3f,
+	0x60, 0x74, 0x88, 0xc4, 0xf7, 0x75, 0x2c, 0xfb,
+	0xbd, 0xb6, 0xc4, 0x7e, 0x10, 0x0a, 0x6c, 0x90,
+	0x04, 0x9e, 0xc3, 0x3f, 0x59, 0x7c, 0xce, 0x31,
+	0x18, 0x60, 0x57, 0x73, 0x46, 0x94, 0x7d, 0x06,
+	0xa0, 0x6d, 0x44, 0xec, 0xa2, 0x0a, 0x9e, 0x05,
+	0x15, 0xef, 0xca, 0x5c, 0xbf, 0x00, 0xeb, 0xf7,
+	0x3d, 0x32, 0xd4, 0xa5, 0xef, 0x49, 0x89, 0x5e,
+	0x46, 0xb0, 0xa6, 0x63, 0x5b, 0x8a, 0x73, 0xae,
+	0x6f, 0xd5, 0x9d, 0xf8, 0x4f, 0x40, 0xb5, 0xb2,
+	0x6e, 0xd3, 0xb6, 0x01, 0xa9, 0x26, 0xa2, 0x21,
+	0xcf, 0x33, 0x7a, 0x3a, 0xa4, 0x23, 0x13, 0xb0,
+	0x69, 0x6a, 0xee, 0xce, 0xd8, 0x9d, 0x01, 0x1d,
+	0x50, 0xc1, 0x30, 0x6c, 0xb1, 0xcd, 0xa0, 0xf0,
+	0xf0, 0xa2, 0x64, 0x6f, 0xbb, 0xbf, 0x5e, 0xe6,
+	0xab, 0x87, 0xb4, 0x0f, 0x4f, 0x15, 0xaf, 0xb5,
+	0x25, 0xa1, 0xb2, 0xd0, 0x80, 0x2c, 0xfb, 0xf9,
+	0xfe, 0xd2, 0x33, 0xbb, 0x76, 0xfe, 0x7c, 0xa8,
+	0x66, 0xf7, 0xe7, 0x85, 0x9f, 0x1f, 0x85, 0x57,
+	0x88, 0xe1, 0xe9, 0x63, 0xe4, 0xd8, 0x1c, 0xa1,
+	0xfb, 0xda, 0x44, 0x05, 0x2e, 0x1d, 0x3a, 0x1c,
+	0xff, 0xc8, 0x3b, 0xc0, 0xfe, 0xda, 0x22, 0x0b,
+	0x43, 0xd6, 0x88, 0x39, 0x4c, 0x4a, 0xa6, 0x69,
+	0x18, 0x93, 0x42, 0x4e, 0xb5, 0xcc, 0x66, 0x0d,
+	0x09, 0xf8, 0x1e, 0x7c, 0xd3, 0x3c, 0x99, 0x0d,
+	0x50, 0x1d, 0x62, 0xe9, 0x57, 0x06, 0xbf, 0x19,
+	0x88, 0xdd, 0xad, 0x7b, 0x4f, 0xf9, 0xc7, 0x82,
+	0x6d, 0x8d, 0xc8, 0xc4, 0xc5, 0x78, 0x17, 0x20,
+	0x15, 0xc5, 0x52, 0x41, 0xcf, 0x5b, 0xd6, 0x7f,
+	0x94, 0x02, 0x41, 0xe0, 0x40, 0x22, 0x03, 0x5e,
+	0xd1, 0x53, 0xd4, 0x86, 0xd3, 0x2c, 0x9f, 0x0f,
+	0x96, 0xe3, 0x6b, 0x9a, 0x76, 0x32, 0x06, 0x47,
+	0x4b, 0x11, 0xb3, 0xdd, 0x03, 0x65, 0xbd, 0x9b,
+	0x01, 0xda, 0x9c, 0xb9, 0x7e, 0x3f, 0x6a, 0xc4,
+	0x7b, 0xea, 0xd4, 0x3c, 0xb9, 0xfb, 0x5c, 0x6b,
+	0x64, 0x33, 0x52, 0xba, 0x64, 0x78, 0x8f, 0xa4,
+	0xaf, 0x7a, 0x61, 0x8d, 0xbc, 0xc5, 0x73, 0xe9,
+	0x6b, 0x58, 0x97, 0x4b, 0xbf, 0x63, 0x22, 0xd3,
+	0x37, 0x02, 0x54, 0xc5, 0xb9, 0x16, 0x4a, 0xf0,
+	0x19, 0xd8, 0x94, 0x57, 0xb8, 0x8a, 0xb3, 0x16,
+	0x3b, 0xd0, 0x84, 0x8e, 0x67, 0xa6, 0xa3, 0x7d,
+	0x78, 0xec, 0x00
+};
+static const u8 enc_output012[] __initconst = {
+	0x52, 0x34, 0xb3, 0x65, 0x3b, 0xb7, 0xe5, 0xd3,
+	0xab, 0x49, 0x17, 0x60, 0xd2, 0x52, 0x56, 0xdf,
+	0xdf, 0x34, 0x56, 0x82, 0xe2, 0xbe, 0xe5, 0xe1,
+	0x28, 0xd1, 0x4e, 0x5f, 0x4f, 0x01, 0x7d, 0x3f,
+	0x99, 0x6b, 0x30, 0x6e, 0x1a, 0x7c, 0x4c, 0x8e,
+	0x62, 0x81, 0xae, 0x86, 0x3f, 0x6b, 0xd0, 0xb5,
+	0xa9, 0xcf, 0x50, 0xf1, 0x02, 0x12, 0xa0, 0x0b,
+	0x24, 0xe9, 0xe6, 0x72, 0x89, 0x2c, 0x52, 0x1b,
+	0x34, 0x38, 0xf8, 0x75, 0x5f, 0xa0, 0x74, 0xe2,
+	0x99, 0xdd, 0xa6, 0x4b, 0x14, 0x50, 0x4e, 0xf1,
+	0xbe, 0xd6, 0x9e, 0xdb, 0xb2, 0x24, 0x27, 0x74,
+	0x12, 0x4a, 0x78, 0x78, 0x17, 0xa5, 0x58, 0x8e,
+	0x2f, 0xf9, 0xf4, 0x8d, 0xee, 0x03, 0x88, 0xae,
+	0xb8, 0x29, 0xa1, 0x2f, 0x4b, 0xee, 0x92, 0xbd,
+	0x87, 0xb3, 0xce, 0x34, 0x21, 0x57, 0x46, 0x04,
+	0x49, 0x0c, 0x80, 0xf2, 0x01, 0x13, 0xa1, 0x55,
+	0xb3, 0xff, 0x44, 0x30, 0x3c, 0x1c, 0xd0, 0xef,
+	0xbc, 0x18, 0x74, 0x26, 0xad, 0x41, 0x5b, 0x5b,
+	0x3e, 0x9a, 0x7a, 0x46, 0x4f, 0x16, 0xd6, 0x74,
+	0x5a, 0xb7, 0x3a, 0x28, 0x31, 0xd8, 0xae, 0x26,
+	0xac, 0x50, 0x53, 0x86, 0xf2, 0x56, 0xd7, 0x3f,
+	0x29, 0xbc, 0x45, 0x68, 0x8e, 0xcb, 0x98, 0x64,
+	0xdd, 0xc9, 0xba, 0xb8, 0x4b, 0x7b, 0x82, 0xdd,
+	0x14, 0xa7, 0xcb, 0x71, 0x72, 0x00, 0x5c, 0xad,
+	0x7b, 0x6a, 0x89, 0xa4, 0x3d, 0xbf, 0xb5, 0x4b,
+	0x3e, 0x7c, 0x5a, 0xcf, 0xb8, 0xa1, 0xc5, 0x6e,
+	0xc8, 0xb6, 0x31, 0x57, 0x7b, 0xdf, 0xa5, 0x7e,
+	0xb1, 0xd6, 0x42, 0x2a, 0x31, 0x36, 0xd1, 0xd0,
+	0x3f, 0x7a, 0xe5, 0x94, 0xd6, 0x36, 0xa0, 0x6f,
+	0xb7, 0x40, 0x7d, 0x37, 0xc6, 0x55, 0x7c, 0x50,
+	0x40, 0x6d, 0x29, 0x89, 0xe3, 0x5a, 0xae, 0x97,
+	0xe7, 0x44, 0x49, 0x6e, 0xbd, 0x81, 0x3d, 0x03,
+	0x93, 0x06, 0x12, 0x06, 0xe2, 0x41, 0x12, 0x4a,
+	0xf1, 0x6a, 0xa4, 0x58, 0xa2, 0xfb, 0xd2, 0x15,
+	0xba, 0xc9, 0x79, 0xc9, 0xce, 0x5e, 0x13, 0xbb,
+	0xf1, 0x09, 0x04, 0xcc, 0xfd, 0xe8, 0x51, 0x34,
+	0x6a, 0xe8, 0x61, 0x88, 0xda, 0xed, 0x01, 0x47,
+	0x84, 0xf5, 0x73, 0x25, 0xf9, 0x1c, 0x42, 0x86,
+	0x07, 0xf3, 0x5b, 0x1a, 0x01, 0xb3, 0xeb, 0x24,
+	0x32, 0x8d, 0xf6, 0xed, 0x7c, 0x4b, 0xeb, 0x3c,
+	0x36, 0x42, 0x28, 0xdf, 0xdf, 0xb6, 0xbe, 0xd9,
+	0x8c, 0x52, 0xd3, 0x2b, 0x08, 0x90, 0x8c, 0xe7,
+	0x98, 0x31, 0xe2, 0x32, 0x8e, 0xfc, 0x11, 0x48,
+	0x00, 0xa8, 0x6a, 0x42, 0x4a, 0x02, 0xc6, 0x4b,
+	0x09, 0xf1, 0xe3, 0x49, 0xf3, 0x45, 0x1f, 0x0e,
+	0xbc, 0x56, 0xe2, 0xe4, 0xdf, 0xfb, 0xeb, 0x61,
+	0xfa, 0x24, 0xc1, 0x63, 0x75, 0xbb, 0x47, 0x75,
+	0xaf, 0xe1, 0x53, 0x16, 0x96, 0x21, 0x85, 0x26,
+	0x11, 0xb3, 0x76, 0xe3, 0x23, 0xa1, 0x6b, 0x74,
+	0x37, 0xd0, 0xde, 0x06, 0x90, 0x71, 0x5d, 0x43,
+	0x88, 0x9b, 0x00, 0x54, 0xa6, 0x75, 0x2f, 0xa1,
+	0xc2, 0x0b, 0x73, 0x20, 0x1d, 0xb6, 0x21, 0x79,
+	0x57, 0x3f, 0xfa, 0x09, 0xbe, 0x8a, 0x33, 0xc3,
+	0x52, 0xf0, 0x1d, 0x82, 0x31, 0xd1, 0x55, 0xb5,
+	0x6c, 0x99, 0x25, 0xcf, 0x5c, 0x32, 0xce, 0xe9,
+	0x0d, 0xfa, 0x69, 0x2c, 0xd5, 0x0d, 0xc5, 0x6d,
+	0x86, 0xd0, 0x0c, 0x3b, 0x06, 0x50, 0x79, 0xe8,
+	0xc3, 0xae, 0x04, 0xe6, 0xcd, 0x51, 0xe4, 0x26,
+	0x9b, 0x4f, 0x7e, 0xa6, 0x0f, 0xab, 0xd8, 0xe5,
+	0xde, 0xa9, 0x00, 0x95, 0xbe, 0xa3, 0x9d, 0x5d,
+	0xb2, 0x09, 0x70, 0x18, 0x1c, 0xf0, 0xac, 0x29,
+	0x23, 0x02, 0x29, 0x28, 0xd2, 0x74, 0x35, 0x57,
+	0x62, 0x0f, 0x24, 0xea, 0x5e, 0x33, 0xc2, 0x92,
+	0xf3, 0x78, 0x4d, 0x30, 0x1e, 0xa1, 0x99, 0xa9,
+	0x82, 0xb0, 0x42, 0x31, 0x8d, 0xad, 0x8a, 0xbc,
+	0xfc, 0xd4, 0x57, 0x47, 0x3e, 0xb4, 0x50, 0xdd,
+	0x6e, 0x2c, 0x80, 0x4d, 0x22, 0xf1, 0xfb, 0x57,
+	0xc4, 0xdd, 0x17, 0xe1, 0x8a, 0x36, 0x4a, 0xb3,
+	0x37, 0xca, 0xc9, 0x4e, 0xab, 0xd5, 0x69, 0xc4,
+	0xf4, 0xbc, 0x0b, 0x3b, 0x44, 0x4b, 0x29, 0x9c,
+	0xee, 0xd4, 0x35, 0x22, 0x21, 0xb0, 0x1f, 0x27,
+	0x64, 0xa8, 0x51, 0x1b, 0xf0, 0x9f, 0x19, 0x5c,
+	0xfb, 0x5a, 0x64, 0x74, 0x70, 0x45, 0x09, 0xf5,
+	0x64, 0xfe, 0x1a, 0x2d, 0xc9, 0x14, 0x04, 0x14,
+	0xcf, 0xd5, 0x7d, 0x60, 0xaf, 0x94, 0x39, 0x94,
+	0xe2, 0x7d, 0x79, 0x82, 0xd0, 0x65, 0x3b, 0x6b,
+	0x9c, 0x19, 0x84, 0xb4, 0x6d, 0xb3, 0x0c, 0x99,
+	0xc0, 0x56, 0xa8, 0xbd, 0x73, 0xce, 0x05, 0x84,
+	0x3e, 0x30, 0xaa, 0xc4, 0x9b, 0x1b, 0x04, 0x2a,
+	0x9f, 0xd7, 0x43, 0x2b, 0x23, 0xdf, 0xbf, 0xaa,
+	0xd5, 0xc2, 0x43, 0x2d, 0x70, 0xab, 0xdc, 0x75,
+	0xad, 0xac, 0xf7, 0xc0, 0xbe, 0x67, 0xb2, 0x74,
+	0xed, 0x67, 0x10, 0x4a, 0x92, 0x60, 0xc1, 0x40,
+	0x50, 0x19, 0x8a, 0x8a, 0x8c, 0x09, 0x0e, 0x72,
+	0xe1, 0x73, 0x5e, 0xe8, 0x41, 0x85, 0x63, 0x9f,
+	0x3f, 0xd7, 0x7d, 0xc4, 0xfb, 0x22, 0x5d, 0x92,
+	0x6c, 0xb3, 0x1e, 0xe2, 0x50, 0x2f, 0x82, 0xa8,
+	0x28, 0xc0, 0xb5, 0xd7, 0x5f, 0x68, 0x0d, 0x2c,
+	0x2d, 0xaf, 0x7e, 0xfa, 0x2e, 0x08, 0x0f, 0x1f,
+	0x70, 0x9f, 0xe9, 0x19, 0x72, 0x55, 0xf8, 0xfb,
+	0x51, 0xd2, 0x33, 0x5d, 0xa0, 0xd3, 0x2b, 0x0a,
+	0x6c, 0xbc, 0x4e, 0xcf, 0x36, 0x4d, 0xdc, 0x3b,
+	0xe9, 0x3e, 0x81, 0x7c, 0x61, 0xdb, 0x20, 0x2d,
+	0x3a, 0xc3, 0xb3, 0x0c, 0x1e, 0x00, 0xb9, 0x7c,
+	0xf5, 0xca, 0x10, 0x5f, 0x3a, 0x71, 0xb3, 0xe4,
+	0x20, 0xdb, 0x0c, 0x2a, 0x98, 0x63, 0x45, 0x00,
+	0x58, 0xf6, 0x68, 0xe4, 0x0b, 0xda, 0x13, 0x3b,
+	0x60, 0x5c, 0x76, 0xdb, 0xb9, 0x97, 0x71, 0xe4,
+	0xd9, 0xb7, 0xdb, 0xbd, 0x68, 0xc7, 0x84, 0x84,
+	0xaa, 0x7c, 0x68, 0x62, 0x5e, 0x16, 0xfc, 0xba,
+	0x72, 0xaa, 0x9a, 0xa9, 0xeb, 0x7c, 0x75, 0x47,
+	0x97, 0x7e, 0xad, 0xe2, 0xd9, 0x91, 0xe8, 0xe4,
+	0xa5, 0x31, 0xd7, 0x01, 0x8e, 0xa2, 0x11, 0x88,
+	0x95, 0xb9, 0xf2, 0x9b, 0xd3, 0x7f, 0x1b, 0x81,
+	0x22, 0xf7, 0x98, 0x60, 0x0a, 0x64, 0xa6, 0xc1,
+	0xf6, 0x49, 0xc7, 0xe3, 0x07, 0x4d, 0x94, 0x7a,
+	0xcf, 0x6e, 0x68, 0x0c, 0x1b, 0x3f, 0x6e, 0x2e,
+	0xee, 0x92, 0xfa, 0x52, 0xb3, 0x59, 0xf8, 0xf1,
+	0x8f, 0x6a, 0x66, 0xa3, 0x82, 0x76, 0x4a, 0x07,
+	0x1a, 0xc7, 0xdd, 0xf5, 0xda, 0x9c, 0x3c, 0x24,
+	0xbf, 0xfd, 0x42, 0xa1, 0x10, 0x64, 0x6a, 0x0f,
+	0x89, 0xee, 0x36, 0xa5, 0xce, 0x99, 0x48, 0x6a,
+	0xf0, 0x9f, 0x9e, 0x69, 0xa4, 0x40, 0x20, 0xe9,
+	0x16, 0x15, 0xf7, 0xdb, 0x75, 0x02, 0xcb, 0xe9,
+	0x73, 0x8b, 0x3b, 0x49, 0x2f, 0xf0, 0xaf, 0x51,
+	0x06, 0x5c, 0xdf, 0x27, 0x27, 0x49, 0x6a, 0xd1,
+	0xcc, 0xc7, 0xb5, 0x63, 0xb5, 0xfc, 0xb8, 0x5c,
+	0x87, 0x7f, 0x84, 0xb4, 0xcc, 0x14, 0xa9, 0x53,
+	0xda, 0xa4, 0x56, 0xf8, 0xb6, 0x1b, 0xcc, 0x40,
+	0x27, 0x52, 0x06, 0x5a, 0x13, 0x81, 0xd7, 0x3a,
+	0xd4, 0x3b, 0xfb, 0x49, 0x65, 0x31, 0x33, 0xb2,
+	0xfa, 0xcd, 0xad, 0x58, 0x4e, 0x2b, 0xae, 0xd2,
+	0x20, 0xfb, 0x1a, 0x48, 0xb4, 0x3f, 0x9a, 0xd8,
+	0x7a, 0x35, 0x4a, 0xc8, 0xee, 0x88, 0x5e, 0x07,
+	0x66, 0x54, 0xb9, 0xec, 0x9f, 0xa3, 0xe3, 0xb9,
+	0x37, 0xaa, 0x49, 0x76, 0x31, 0xda, 0x74, 0x2d,
+	0x3c, 0xa4, 0x65, 0x10, 0x32, 0x38, 0xf0, 0xde,
+	0xd3, 0x99, 0x17, 0xaa, 0x71, 0xaa, 0x8f, 0x0f,
+	0x8c, 0xaf, 0xa2, 0xf8, 0x5d, 0x64, 0xba, 0x1d,
+	0xa3, 0xef, 0x96, 0x73, 0xe8, 0xa1, 0x02, 0x8d,
+	0x0c, 0x6d, 0xb8, 0x06, 0x90, 0xb8, 0x08, 0x56,
+	0x2c, 0xa7, 0x06, 0xc9, 0xc2, 0x38, 0xdb, 0x7c,
+	0x63, 0xb1, 0x57, 0x8e, 0xea, 0x7c, 0x79, 0xf3,
+	0x49, 0x1d, 0xfe, 0x9f, 0xf3, 0x6e, 0xb1, 0x1d,
+	0xba, 0x19, 0x80, 0x1a, 0x0a, 0xd3, 0xb0, 0x26,
+	0x21, 0x40, 0xb1, 0x7c, 0xf9, 0x4d, 0x8d, 0x10,
+	0xc1, 0x7e, 0xf4, 0xf6, 0x3c, 0xa8, 0xfd, 0x7c,
+	0xa3, 0x92, 0xb2, 0x0f, 0xaa, 0xcc, 0xa6, 0x11,
+	0xfe, 0x04, 0xe3, 0xd1, 0x7a, 0x32, 0x89, 0xdf,
+	0x0d, 0xc4, 0x8f, 0x79, 0x6b, 0xca, 0x16, 0x7c,
+	0x6e, 0xf9, 0xad, 0x0f, 0xf6, 0xfe, 0x27, 0xdb,
+	0xc4, 0x13, 0x70, 0xf1, 0x62, 0x1a, 0x4f, 0x79,
+	0x40, 0xc9, 0x9b, 0x8b, 0x21, 0xea, 0x84, 0xfa,
+	0xf5, 0xf1, 0x89, 0xce, 0xb7, 0x55, 0x0a, 0x80,
+	0x39, 0x2f, 0x55, 0x36, 0x16, 0x9c, 0x7b, 0x08,
+	0xbd, 0x87, 0x0d, 0xa5, 0x32, 0xf1, 0x52, 0x7c,
+	0xe8, 0x55, 0x60, 0x5b, 0xd7, 0x69, 0xe4, 0xfc,
+	0xfa, 0x12, 0x85, 0x96, 0xea, 0x50, 0x28, 0xab,
+	0x8a, 0xf7, 0xbb, 0x0e, 0x53, 0x74, 0xca, 0xa6,
+	0x27, 0x09, 0xc2, 0xb5, 0xde, 0x18, 0x14, 0xd9,
+	0xea, 0xe5, 0x29, 0x1c, 0x40, 0x56, 0xcf, 0xd7,
+	0xae, 0x05, 0x3f, 0x65, 0xaf, 0x05, 0x73, 0xe2,
+	0x35, 0x96, 0x27, 0x07, 0x14, 0xc0, 0xad, 0x33,
+	0xf1, 0xdc, 0x44, 0x7a, 0x89, 0x17, 0x77, 0xd2,
+	0x9c, 0x58, 0x60, 0xf0, 0x3f, 0x7b, 0x2d, 0x2e,
+	0x57, 0x95, 0x54, 0x87, 0xed, 0xf2, 0xc7, 0x4c,
+	0xf0, 0xae, 0x56, 0x29, 0x19, 0x7d, 0x66, 0x4b,
+	0x9b, 0x83, 0x84, 0x42, 0x3b, 0x01, 0x25, 0x66,
+	0x8e, 0x02, 0xde, 0xb9, 0x83, 0x54, 0x19, 0xf6,
+	0x9f, 0x79, 0x0d, 0x67, 0xc5, 0x1d, 0x7a, 0x44,
+	0x02, 0x98, 0xa7, 0x16, 0x1c, 0x29, 0x0d, 0x74,
+	0xff, 0x85, 0x40, 0x06, 0xef, 0x2c, 0xa9, 0xc6,
+	0xf5, 0x53, 0x07, 0x06, 0xae, 0xe4, 0xfa, 0x5f,
+	0xd8, 0x39, 0x4d, 0xf1, 0x9b, 0x6b, 0xd9, 0x24,
+	0x84, 0xfe, 0x03, 0x4c, 0xb2, 0x3f, 0xdf, 0xa1,
+	0x05, 0x9e, 0x50, 0x14, 0x5a, 0xd9, 0x1a, 0xa2,
+	0xa7, 0xfa, 0xfa, 0x17, 0xf7, 0x78, 0xd6, 0xb5,
+	0x92, 0x61, 0x91, 0xac, 0x36, 0xfa, 0x56, 0x0d,
+	0x38, 0x32, 0x18, 0x85, 0x08, 0x58, 0x37, 0xf0,
+	0x4b, 0xdb, 0x59, 0xe7, 0xa4, 0x34, 0xc0, 0x1b,
+	0x01, 0xaf, 0x2d, 0xde, 0xa1, 0xaa, 0x5d, 0xd3,
+	0xec, 0xe1, 0xd4, 0xf7, 0xe6, 0x54, 0x68, 0xf0,
+	0x51, 0x97, 0xa7, 0x89, 0xea, 0x24, 0xad, 0xd3,
+	0x6e, 0x47, 0x93, 0x8b, 0x4b, 0xb4, 0xf7, 0x1c,
+	0x42, 0x06, 0x67, 0xe8, 0x99, 0xf6, 0xf5, 0x7b,
+	0x85, 0xb5, 0x65, 0xb5, 0xb5, 0xd2, 0x37, 0xf5,
+	0xf3, 0x02, 0xa6, 0x4d, 0x11, 0xa7, 0xdc, 0x51,
+	0x09, 0x7f, 0xa0, 0xd8, 0x88, 0x1c, 0x13, 0x71,
+	0xae, 0x9c, 0xb7, 0x7b, 0x34, 0xd6, 0x4e, 0x68,
+	0x26, 0x83, 0x51, 0xaf, 0x1d, 0xee, 0x8b, 0xbb,
+	0x69, 0x43, 0x2b, 0x9e, 0x8a, 0xbc, 0x02, 0x0e,
+	0xa0, 0x1b, 0xe0, 0xa8, 0x5f, 0x6f, 0xaf, 0x1b,
+	0x8f, 0xe7, 0x64, 0x71, 0x74, 0x11, 0x7e, 0xa8,
+	0xd8, 0xf9, 0x97, 0x06, 0xc3, 0xb6, 0xfb, 0xfb,
+	0xb7, 0x3d, 0x35, 0x9d, 0x3b, 0x52, 0xed, 0x54,
+	0xca, 0xf4, 0x81, 0x01, 0x2d, 0x1b, 0xc3, 0xa7,
+	0x00, 0x3d, 0x1a, 0x39, 0x54, 0xe1, 0xf6, 0xff,
+	0xed, 0x6f, 0x0b, 0x5a, 0x68, 0xda, 0x58, 0xdd,
+	0xa9, 0xcf, 0x5c, 0x4a, 0xe5, 0x09, 0x4e, 0xde,
+	0x9d, 0xbc, 0x3e, 0xee, 0x5a, 0x00, 0x3b, 0x2c,
+	0x87, 0x10, 0x65, 0x60, 0xdd, 0xd7, 0x56, 0xd1,
+	0x4c, 0x64, 0x45, 0xe4, 0x21, 0xec, 0x78, 0xf8,
+	0x25, 0x7a, 0x3e, 0x16, 0x5d, 0x09, 0x53, 0x14,
+	0xbe, 0x4f, 0xae, 0x87, 0xd8, 0xd1, 0xaa, 0x3c,
+	0xf6, 0x3e, 0xa4, 0x70, 0x8c, 0x5e, 0x70, 0xa4,
+	0xb3, 0x6b, 0x66, 0x73, 0xd3, 0xbf, 0x31, 0x06,
+	0x19, 0x62, 0x93, 0x15, 0xf2, 0x86, 0xe4, 0x52,
+	0x7e, 0x53, 0x4c, 0x12, 0x38, 0xcc, 0x34, 0x7d,
+	0x57, 0xf6, 0x42, 0x93, 0x8a, 0xc4, 0xee, 0x5c,
+	0x8a, 0xe1, 0x52, 0x8f, 0x56, 0x64, 0xf6, 0xa6,
+	0xd1, 0x91, 0x57, 0x70, 0xcd, 0x11, 0x76, 0xf5,
+	0x59, 0x60, 0x60, 0x3c, 0xc1, 0xc3, 0x0b, 0x7f,
+	0x58, 0x1a, 0x50, 0x91, 0xf1, 0x68, 0x8f, 0x6e,
+	0x74, 0x74, 0xa8, 0x51, 0x0b, 0xf7, 0x7a, 0x98,
+	0x37, 0xf2, 0x0a, 0x0e, 0xa4, 0x97, 0x04, 0xb8,
+	0x9b, 0xfd, 0xa0, 0xea, 0xf7, 0x0d, 0xe1, 0xdb,
+	0x03, 0xf0, 0x31, 0x29, 0xf8, 0xdd, 0x6b, 0x8b,
+	0x5d, 0xd8, 0x59, 0xa9, 0x29, 0xcf, 0x9a, 0x79,
+	0x89, 0x19, 0x63, 0x46, 0x09, 0x79, 0x6a, 0x11,
+	0xda, 0x63, 0x68, 0x48, 0x77, 0x23, 0xfb, 0x7d,
+	0x3a, 0x43, 0xcb, 0x02, 0x3b, 0x7a, 0x6d, 0x10,
+	0x2a, 0x9e, 0xac, 0xf1, 0xd4, 0x19, 0xf8, 0x23,
+	0x64, 0x1d, 0x2c, 0x5f, 0xf2, 0xb0, 0x5c, 0x23,
+	0x27, 0xf7, 0x27, 0x30, 0x16, 0x37, 0xb1, 0x90,
+	0xab, 0x38, 0xfb, 0x55, 0xcd, 0x78, 0x58, 0xd4,
+	0x7d, 0x43, 0xf6, 0x45, 0x5e, 0x55, 0x8d, 0xb1,
+	0x02, 0x65, 0x58, 0xb4, 0x13, 0x4b, 0x36, 0xf7,
+	0xcc, 0xfe, 0x3d, 0x0b, 0x82, 0xe2, 0x12, 0x11,
+	0xbb, 0xe6, 0xb8, 0x3a, 0x48, 0x71, 0xc7, 0x50,
+	0x06, 0x16, 0x3a, 0xe6, 0x7c, 0x05, 0xc7, 0xc8,
+	0x4d, 0x2f, 0x08, 0x6a, 0x17, 0x9a, 0x95, 0x97,
+	0x50, 0x68, 0xdc, 0x28, 0x18, 0xc4, 0x61, 0x38,
+	0xb9, 0xe0, 0x3e, 0x78, 0xdb, 0x29, 0xe0, 0x9f,
+	0x52, 0xdd, 0xf8, 0x4f, 0x91, 0xc1, 0xd0, 0x33,
+	0xa1, 0x7a, 0x8e, 0x30, 0x13, 0x82, 0x07, 0x9f,
+	0xd3, 0x31, 0x0f, 0x23, 0xbe, 0x32, 0x5a, 0x75,
+	0xcf, 0x96, 0xb2, 0xec, 0xb5, 0x32, 0xac, 0x21,
+	0xd1, 0x82, 0x33, 0xd3, 0x15, 0x74, 0xbd, 0x90,
+	0xf1, 0x2c, 0xe6, 0x5f, 0x8d, 0xe3, 0x02, 0xe8,
+	0xe9, 0xc4, 0xca, 0x96, 0xeb, 0x0e, 0xbc, 0x91,
+	0xf4, 0xb9, 0xea, 0xd9, 0x1b, 0x75, 0xbd, 0xe1,
+	0xac, 0x2a, 0x05, 0x37, 0x52, 0x9b, 0x1b, 0x3f,
+	0x5a, 0xdc, 0x21, 0xc3, 0x98, 0xbb, 0xaf, 0xa3,
+	0xf2, 0x00, 0xbf, 0x0d, 0x30, 0x89, 0x05, 0xcc,
+	0xa5, 0x76, 0xf5, 0x06, 0xf0, 0xc6, 0x54, 0x8a,
+	0x5d, 0xd4, 0x1e, 0xc1, 0xf2, 0xce, 0xb0, 0x62,
+	0xc8, 0xfc, 0x59, 0x42, 0x9a, 0x90, 0x60, 0x55,
+	0xfe, 0x88, 0xa5, 0x8b, 0xb8, 0x33, 0x0c, 0x23,
+	0x24, 0x0d, 0x15, 0x70, 0x37, 0x1e, 0x3d, 0xf6,
+	0xd2, 0xea, 0x92, 0x10, 0xb2, 0xc4, 0x51, 0xac,
+	0xf2, 0xac, 0xf3, 0x6b, 0x6c, 0xaa, 0xcf, 0x12,
+	0xc5, 0x6c, 0x90, 0x50, 0xb5, 0x0c, 0xfc, 0x1a,
+	0x15, 0x52, 0xe9, 0x26, 0xc6, 0x52, 0xa4, 0xe7,
+	0x81, 0x69, 0xe1, 0xe7, 0x9e, 0x30, 0x01, 0xec,
+	0x84, 0x89, 0xb2, 0x0d, 0x66, 0xdd, 0xce, 0x28,
+	0x5c, 0xec, 0x98, 0x46, 0x68, 0x21, 0x9f, 0x88,
+	0x3f, 0x1f, 0x42, 0x77, 0xce, 0xd0, 0x61, 0xd4,
+	0x20, 0xa7, 0xff, 0x53, 0xad, 0x37, 0xd0, 0x17,
+	0x35, 0xc9, 0xfc, 0xba, 0x0a, 0x78, 0x3f, 0xf2,
+	0xcc, 0x86, 0x89, 0xe8, 0x4b, 0x3c, 0x48, 0x33,
+	0x09, 0x7f, 0xc6, 0xc0, 0xdd, 0xb8, 0xfd, 0x7a,
+	0x66, 0x66, 0x65, 0xeb, 0x47, 0xa7, 0x04, 0x28,
+	0xa3, 0x19, 0x8e, 0xa9, 0xb1, 0x13, 0x67, 0x62,
+	0x70, 0xcf, 0xd6
+};
+static const u8 enc_assoc012[] __initconst = {
+	0xb1, 0x69, 0x83, 0x87, 0x30, 0xaa, 0x5d, 0xb8,
+	0x77, 0xe8, 0x21, 0xff, 0x06, 0x59, 0x35, 0xce,
+	0x75, 0xfe, 0x38, 0xef, 0xb8, 0x91, 0x43, 0x8c,
+	0xcf, 0x70, 0xdd, 0x0a, 0x68, 0xbf, 0xd4, 0xbc,
+	0x16, 0x76, 0x99, 0x36, 0x1e, 0x58, 0x79, 0x5e,
+	0xd4, 0x29, 0xf7, 0x33, 0x93, 0x48, 0xdb, 0x5f,
+	0x01, 0xae, 0x9c, 0xb6, 0xe4, 0x88, 0x6d, 0x2b,
+	0x76, 0x75, 0xe0, 0xf3, 0x74, 0xe2, 0xc9
+};
+static const u8 enc_nonce012[] __initconst = {
+	0x05, 0xa3, 0x93, 0xed, 0x30, 0xc5, 0xa2, 0x06
+};
+static const u8 enc_key012[] __initconst = {
+	0xb3, 0x35, 0x50, 0x03, 0x54, 0x2e, 0x40, 0x5e,
+	0x8f, 0x59, 0x8e, 0xc5, 0x90, 0xd5, 0x27, 0x2d,
+	0xba, 0x29, 0x2e, 0xcb, 0x1b, 0x70, 0x44, 0x1e,
+	0x65, 0x91, 0x6e, 0x2a, 0x79, 0x22, 0xda, 0x64
+};
+
+/* wycheproof - rfc7539 */
+static const u8 enc_input013[] __initconst = {
+	0x4c, 0x61, 0x64, 0x69, 0x65, 0x73, 0x20, 0x61,
+	0x6e, 0x64, 0x20, 0x47, 0x65, 0x6e, 0x74, 0x6c,
+	0x65, 0x6d, 0x65, 0x6e, 0x20, 0x6f, 0x66, 0x20,
+	0x74, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x61, 0x73,
+	0x73, 0x20, 0x6f, 0x66, 0x20, 0x27, 0x39, 0x39,
+	0x3a, 0x20, 0x49, 0x66, 0x20, 0x49, 0x20, 0x63,
+	0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6f, 0x66, 0x66,
+	0x65, 0x72, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6f,
+	0x6e, 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x65, 0x20,
+	0x74, 0x69, 0x70, 0x20, 0x66, 0x6f, 0x72, 0x20,
+	0x74, 0x68, 0x65, 0x20, 0x66, 0x75, 0x74, 0x75,
+	0x72, 0x65, 0x2c, 0x20, 0x73, 0x75, 0x6e, 0x73,
+	0x63, 0x72, 0x65, 0x65, 0x6e, 0x20, 0x77, 0x6f,
+	0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x69,
+	0x74, 0x2e
+};
+static const u8 enc_output013[] __initconst = {
+	0xd3, 0x1a, 0x8d, 0x34, 0x64, 0x8e, 0x60, 0xdb,
+	0x7b, 0x86, 0xaf, 0xbc, 0x53, 0xef, 0x7e, 0xc2,
+	0xa4, 0xad, 0xed, 0x51, 0x29, 0x6e, 0x08, 0xfe,
+	0xa9, 0xe2, 0xb5, 0xa7, 0x36, 0xee, 0x62, 0xd6,
+	0x3d, 0xbe, 0xa4, 0x5e, 0x8c, 0xa9, 0x67, 0x12,
+	0x82, 0xfa, 0xfb, 0x69, 0xda, 0x92, 0x72, 0x8b,
+	0x1a, 0x71, 0xde, 0x0a, 0x9e, 0x06, 0x0b, 0x29,
+	0x05, 0xd6, 0xa5, 0xb6, 0x7e, 0xcd, 0x3b, 0x36,
+	0x92, 0xdd, 0xbd, 0x7f, 0x2d, 0x77, 0x8b, 0x8c,
+	0x98, 0x03, 0xae, 0xe3, 0x28, 0x09, 0x1b, 0x58,
+	0xfa, 0xb3, 0x24, 0xe4, 0xfa, 0xd6, 0x75, 0x94,
+	0x55, 0x85, 0x80, 0x8b, 0x48, 0x31, 0xd7, 0xbc,
+	0x3f, 0xf4, 0xde, 0xf0, 0x8e, 0x4b, 0x7a, 0x9d,
+	0xe5, 0x76, 0xd2, 0x65, 0x86, 0xce, 0xc6, 0x4b,
+	0x61, 0x16, 0x1a, 0xe1, 0x0b, 0x59, 0x4f, 0x09,
+	0xe2, 0x6a, 0x7e, 0x90, 0x2e, 0xcb, 0xd0, 0x60,
+	0x06, 0x91
+};
+static const u8 enc_assoc013[] __initconst = {
+	0x50, 0x51, 0x52, 0x53, 0xc0, 0xc1, 0xc2, 0xc3,
+	0xc4, 0xc5, 0xc6, 0xc7
+};
+static const u8 enc_nonce013[] __initconst = {
+	0x07, 0x00, 0x00, 0x00, 0x40, 0x41, 0x42, 0x43,
+	0x44, 0x45, 0x46, 0x47
+};
+static const u8 enc_key013[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input014[] __initconst = { };
+static const u8 enc_output014[] __initconst = {
+	0x76, 0xac, 0xb3, 0x42, 0xcf, 0x31, 0x66, 0xa5,
+	0xb6, 0x3c, 0x0c, 0x0e, 0xa1, 0x38, 0x3c, 0x8d
+};
+static const u8 enc_assoc014[] __initconst = { };
+static const u8 enc_nonce014[] __initconst = {
+	0x4d, 0xa5, 0xbf, 0x8d, 0xfd, 0x58, 0x52, 0xc1,
+	0xea, 0x12, 0x37, 0x9d
+};
+static const u8 enc_key014[] __initconst = {
+	0x80, 0xba, 0x31, 0x92, 0xc8, 0x03, 0xce, 0x96,
+	0x5e, 0xa3, 0x71, 0xd5, 0xff, 0x07, 0x3c, 0xf0,
+	0xf4, 0x3b, 0x6a, 0x2a, 0xb5, 0x76, 0xb2, 0x08,
+	0x42, 0x6e, 0x11, 0x40, 0x9c, 0x09, 0xb9, 0xb0
+};
+
+/* wycheproof - misc */
+static const u8 enc_input015[] __initconst = { };
+static const u8 enc_output015[] __initconst = {
+	0x90, 0x6f, 0xa6, 0x28, 0x4b, 0x52, 0xf8, 0x7b,
+	0x73, 0x59, 0xcb, 0xaa, 0x75, 0x63, 0xc7, 0x09
+};
+static const u8 enc_assoc015[] __initconst = {
+	0xbd, 0x50, 0x67, 0x64, 0xf2, 0xd2, 0xc4, 0x10
+};
+static const u8 enc_nonce015[] __initconst = {
+	0xa9, 0x2e, 0xf0, 0xac, 0x99, 0x1d, 0xd5, 0x16,
+	0xa3, 0xc6, 0xf6, 0x89
+};
+static const u8 enc_key015[] __initconst = {
+	0x7a, 0x4c, 0xd7, 0x59, 0x17, 0x2e, 0x02, 0xeb,
+	0x20, 0x4d, 0xb2, 0xc3, 0xf5, 0xc7, 0x46, 0x22,
+	0x7d, 0xf5, 0x84, 0xfc, 0x13, 0x45, 0x19, 0x63,
+	0x91, 0xdb, 0xb9, 0x57, 0x7a, 0x25, 0x07, 0x42
+};
+
+/* wycheproof - misc */
+static const u8 enc_input016[] __initconst = {
+	0x2a
+};
+static const u8 enc_output016[] __initconst = {
+	0x3a, 0xca, 0xc2, 0x7d, 0xec, 0x09, 0x68, 0x80,
+	0x1e, 0x9f, 0x6e, 0xde, 0xd6, 0x9d, 0x80, 0x75,
+	0x22
+};
+static const u8 enc_assoc016[] __initconst = { };
+static const u8 enc_nonce016[] __initconst = {
+	0x99, 0xe2, 0x3e, 0xc4, 0x89, 0x85, 0xbc, 0xcd,
+	0xee, 0xab, 0x60, 0xf1
+};
+static const u8 enc_key016[] __initconst = {
+	0xcc, 0x56, 0xb6, 0x80, 0x55, 0x2e, 0xb7, 0x50,
+	0x08, 0xf5, 0x48, 0x4b, 0x4c, 0xb8, 0x03, 0xfa,
+	0x50, 0x63, 0xeb, 0xd6, 0xea, 0xb9, 0x1f, 0x6a,
+	0xb6, 0xae, 0xf4, 0x91, 0x6a, 0x76, 0x62, 0x73
+};
+
+/* wycheproof - misc */
+static const u8 enc_input017[] __initconst = {
+	0x51
+};
+static const u8 enc_output017[] __initconst = {
+	0xc4, 0x16, 0x83, 0x10, 0xca, 0x45, 0xb1, 0xf7,
+	0xc6, 0x6c, 0xad, 0x4e, 0x99, 0xe4, 0x3f, 0x72,
+	0xb9
+};
+static const u8 enc_assoc017[] __initconst = {
+	0x91, 0xca, 0x6c, 0x59, 0x2c, 0xbc, 0xca, 0x53
+};
+static const u8 enc_nonce017[] __initconst = {
+	0xab, 0x0d, 0xca, 0x71, 0x6e, 0xe0, 0x51, 0xd2,
+	0x78, 0x2f, 0x44, 0x03
+};
+static const u8 enc_key017[] __initconst = {
+	0x46, 0xf0, 0x25, 0x49, 0x65, 0xf7, 0x69, 0xd5,
+	0x2b, 0xdb, 0x4a, 0x70, 0xb4, 0x43, 0x19, 0x9f,
+	0x8e, 0xf2, 0x07, 0x52, 0x0d, 0x12, 0x20, 0xc5,
+	0x5e, 0x4b, 0x70, 0xf0, 0xfd, 0xa6, 0x20, 0xee
+};
+
+/* wycheproof - misc */
+static const u8 enc_input018[] __initconst = {
+	0x5c, 0x60
+};
+static const u8 enc_output018[] __initconst = {
+	0x4d, 0x13, 0x91, 0xe8, 0xb6, 0x1e, 0xfb, 0x39,
+	0xc1, 0x22, 0x19, 0x54, 0x53, 0x07, 0x7b, 0x22,
+	0xe5, 0xe2
+};
+static const u8 enc_assoc018[] __initconst = { };
+static const u8 enc_nonce018[] __initconst = {
+	0x46, 0x1a, 0xf1, 0x22, 0xe9, 0xf2, 0xe0, 0x34,
+	0x7e, 0x03, 0xf2, 0xdb
+};
+static const u8 enc_key018[] __initconst = {
+	0x2f, 0x7f, 0x7e, 0x4f, 0x59, 0x2b, 0xb3, 0x89,
+	0x19, 0x49, 0x89, 0x74, 0x35, 0x07, 0xbf, 0x3e,
+	0xe9, 0xcb, 0xde, 0x17, 0x86, 0xb6, 0x69, 0x5f,
+	0xe6, 0xc0, 0x25, 0xfd, 0x9b, 0xa4, 0xc1, 0x00
+};
+
+/* wycheproof - misc */
+static const u8 enc_input019[] __initconst = {
+	0xdd, 0xf2
+};
+static const u8 enc_output019[] __initconst = {
+	0xb6, 0x0d, 0xea, 0xd0, 0xfd, 0x46, 0x97, 0xec,
+	0x2e, 0x55, 0x58, 0x23, 0x77, 0x19, 0xd0, 0x24,
+	0x37, 0xa2
+};
+static const u8 enc_assoc019[] __initconst = {
+	0x88, 0x36, 0x4f, 0xc8, 0x06, 0x05, 0x18, 0xbf
+};
+static const u8 enc_nonce019[] __initconst = {
+	0x61, 0x54, 0x6b, 0xa5, 0xf1, 0x72, 0x05, 0x90,
+	0xb6, 0x04, 0x0a, 0xc6
+};
+static const u8 enc_key019[] __initconst = {
+	0xc8, 0x83, 0x3d, 0xce, 0x5e, 0xa9, 0xf2, 0x48,
+	0xaa, 0x20, 0x30, 0xea, 0xcf, 0xe7, 0x2b, 0xff,
+	0xe6, 0x9a, 0x62, 0x0c, 0xaf, 0x79, 0x33, 0x44,
+	0xe5, 0x71, 0x8f, 0xe0, 0xd7, 0xab, 0x1a, 0x58
+};
+
+/* wycheproof - misc */
+static const u8 enc_input020[] __initconst = {
+	0xab, 0x85, 0xe9, 0xc1, 0x57, 0x17, 0x31
+};
+static const u8 enc_output020[] __initconst = {
+	0x5d, 0xfe, 0x34, 0x40, 0xdb, 0xb3, 0xc3, 0xed,
+	0x7a, 0x43, 0x4e, 0x26, 0x02, 0xd3, 0x94, 0x28,
+	0x1e, 0x0a, 0xfa, 0x9f, 0xb7, 0xaa, 0x42
+};
+static const u8 enc_assoc020[] __initconst = { };
+static const u8 enc_nonce020[] __initconst = {
+	0x3c, 0x4e, 0x65, 0x4d, 0x66, 0x3f, 0xa4, 0x59,
+	0x6d, 0xc5, 0x5b, 0xb7
+};
+static const u8 enc_key020[] __initconst = {
+	0x55, 0x56, 0x81, 0x58, 0xd3, 0xa6, 0x48, 0x3f,
+	0x1f, 0x70, 0x21, 0xea, 0xb6, 0x9b, 0x70, 0x3f,
+	0x61, 0x42, 0x51, 0xca, 0xdc, 0x1a, 0xf5, 0xd3,
+	0x4a, 0x37, 0x4f, 0xdb, 0xfc, 0x5a, 0xda, 0xc7
+};
+
+/* wycheproof - misc */
+static const u8 enc_input021[] __initconst = {
+	0x4e, 0xe5, 0xcd, 0xa2, 0x0d, 0x42, 0x90
+};
+static const u8 enc_output021[] __initconst = {
+	0x4b, 0xd4, 0x72, 0x12, 0x94, 0x1c, 0xe3, 0x18,
+	0x5f, 0x14, 0x08, 0xee, 0x7f, 0xbf, 0x18, 0xf5,
+	0xab, 0xad, 0x6e, 0x22, 0x53, 0xa1, 0xba
+};
+static const u8 enc_assoc021[] __initconst = {
+	0x84, 0xe4, 0x6b, 0xe8, 0xc0, 0x91, 0x90, 0x53
+};
+static const u8 enc_nonce021[] __initconst = {
+	0x58, 0x38, 0x93, 0x75, 0xc6, 0x9e, 0xe3, 0x98,
+	0xde, 0x94, 0x83, 0x96
+};
+static const u8 enc_key021[] __initconst = {
+	0xe3, 0xc0, 0x9e, 0x7f, 0xab, 0x1a, 0xef, 0xb5,
+	0x16, 0xda, 0x6a, 0x33, 0x02, 0x2a, 0x1d, 0xd4,
+	0xeb, 0x27, 0x2c, 0x80, 0xd5, 0x40, 0xc5, 0xda,
+	0x52, 0xa7, 0x30, 0xf3, 0x4d, 0x84, 0x0d, 0x7f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input022[] __initconst = {
+	0xbe, 0x33, 0x08, 0xf7, 0x2a, 0x2c, 0x6a, 0xed
+};
+static const u8 enc_output022[] __initconst = {
+	0x8e, 0x94, 0x39, 0xa5, 0x6e, 0xee, 0xc8, 0x17,
+	0xfb, 0xe8, 0xa6, 0xed, 0x8f, 0xab, 0xb1, 0x93,
+	0x75, 0x39, 0xdd, 0x6c, 0x00, 0xe9, 0x00, 0x21
+};
+static const u8 enc_assoc022[] __initconst = { };
+static const u8 enc_nonce022[] __initconst = {
+	0x4f, 0x07, 0xaf, 0xed, 0xfd, 0xc3, 0xb6, 0xc2,
+	0x36, 0x18, 0x23, 0xd3
+};
+static const u8 enc_key022[] __initconst = {
+	0x51, 0xe4, 0xbf, 0x2b, 0xad, 0x92, 0xb7, 0xaf,
+	0xf1, 0xa4, 0xbc, 0x05, 0x55, 0x0b, 0xa8, 0x1d,
+	0xf4, 0xb9, 0x6f, 0xab, 0xf4, 0x1c, 0x12, 0xc7,
+	0xb0, 0x0e, 0x60, 0xe4, 0x8d, 0xb7, 0xe1, 0x52
+};
+
+/* wycheproof - misc */
+static const u8 enc_input023[] __initconst = {
+	0xa4, 0xc9, 0xc2, 0x80, 0x1b, 0x71, 0xf7, 0xdf
+};
+static const u8 enc_output023[] __initconst = {
+	0xb9, 0xb9, 0x10, 0x43, 0x3a, 0xf0, 0x52, 0xb0,
+	0x45, 0x30, 0xf5, 0x1a, 0xee, 0xe0, 0x24, 0xe0,
+	0xa4, 0x45, 0xa6, 0x32, 0x8f, 0xa6, 0x7a, 0x18
+};
+static const u8 enc_assoc023[] __initconst = {
+	0x66, 0xc0, 0xae, 0x70, 0x07, 0x6c, 0xb1, 0x4d
+};
+static const u8 enc_nonce023[] __initconst = {
+	0xb4, 0xea, 0x66, 0x6e, 0xe1, 0x19, 0x56, 0x33,
+	0x66, 0x48, 0x4a, 0x78
+};
+static const u8 enc_key023[] __initconst = {
+	0x11, 0x31, 0xc1, 0x41, 0x85, 0x77, 0xa0, 0x54,
+	0xde, 0x7a, 0x4a, 0xc5, 0x51, 0x95, 0x0f, 0x1a,
+	0x05, 0x3f, 0x9a, 0xe4, 0x6e, 0x5b, 0x75, 0xfe,
+	0x4a, 0xbd, 0x56, 0x08, 0xd7, 0xcd, 0xda, 0xdd
+};
+
+/* wycheproof - misc */
+static const u8 enc_input024[] __initconst = {
+	0x42, 0xba, 0xae, 0x59, 0x78, 0xfe, 0xaf, 0x5c,
+	0x36, 0x8d, 0x14, 0xe0
+};
+static const u8 enc_output024[] __initconst = {
+	0xff, 0x7d, 0xc2, 0x03, 0xb2, 0x6c, 0x46, 0x7a,
+	0x6b, 0x50, 0xdb, 0x33, 0x57, 0x8c, 0x0f, 0x27,
+	0x58, 0xc2, 0xe1, 0x4e, 0x36, 0xd4, 0xfc, 0x10,
+	0x6d, 0xcb, 0x29, 0xb4
+};
+static const u8 enc_assoc024[] __initconst = { };
+static const u8 enc_nonce024[] __initconst = {
+	0x9a, 0x59, 0xfc, 0xe2, 0x6d, 0xf0, 0x00, 0x5e,
+	0x07, 0x53, 0x86, 0x56
+};
+static const u8 enc_key024[] __initconst = {
+	0x99, 0xb6, 0x2b, 0xd5, 0xaf, 0xbe, 0x3f, 0xb0,
+	0x15, 0xbd, 0xe9, 0x3f, 0x0a, 0xbf, 0x48, 0x39,
+	0x57, 0xa1, 0xc3, 0xeb, 0x3c, 0xa5, 0x9c, 0xb5,
+	0x0b, 0x39, 0xf7, 0xf8, 0xa9, 0xcc, 0x51, 0xbe
+};
+
+/* wycheproof - misc */
+static const u8 enc_input025[] __initconst = {
+	0xfd, 0xc8, 0x5b, 0x94, 0xa4, 0xb2, 0xa6, 0xb7,
+	0x59, 0xb1, 0xa0, 0xda
+};
+static const u8 enc_output025[] __initconst = {
+	0x9f, 0x88, 0x16, 0xde, 0x09, 0x94, 0xe9, 0x38,
+	0xd9, 0xe5, 0x3f, 0x95, 0xd0, 0x86, 0xfc, 0x6c,
+	0x9d, 0x8f, 0xa9, 0x15, 0xfd, 0x84, 0x23, 0xa7,
+	0xcf, 0x05, 0x07, 0x2f
+};
+static const u8 enc_assoc025[] __initconst = {
+	0xa5, 0x06, 0xe1, 0xa5, 0xc6, 0x90, 0x93, 0xf9
+};
+static const u8 enc_nonce025[] __initconst = {
+	0x58, 0xdb, 0xd4, 0xad, 0x2c, 0x4a, 0xd3, 0x5d,
+	0xd9, 0x06, 0xe9, 0xce
+};
+static const u8 enc_key025[] __initconst = {
+	0x85, 0xf3, 0x5b, 0x62, 0x82, 0xcf, 0xf4, 0x40,
+	0xbc, 0x10, 0x20, 0xc8, 0x13, 0x6f, 0xf2, 0x70,
+	0x31, 0x11, 0x0f, 0xa6, 0x3e, 0xc1, 0x6f, 0x1e,
+	0x82, 0x51, 0x18, 0xb0, 0x06, 0xb9, 0x12, 0x57
+};
+
+/* wycheproof - misc */
+static const u8 enc_input026[] __initconst = {
+	0x51, 0xf8, 0xc1, 0xf7, 0x31, 0xea, 0x14, 0xac,
+	0xdb, 0x21, 0x0a, 0x6d, 0x97, 0x3e, 0x07
+};
+static const u8 enc_output026[] __initconst = {
+	0x0b, 0x29, 0x63, 0x8e, 0x1f, 0xbd, 0xd6, 0xdf,
+	0x53, 0x97, 0x0b, 0xe2, 0x21, 0x00, 0x42, 0x2a,
+	0x91, 0x34, 0x08, 0x7d, 0x67, 0xa4, 0x6e, 0x79,
+	0x17, 0x8d, 0x0a, 0x93, 0xf5, 0xe1, 0xd2
+};
+static const u8 enc_assoc026[] __initconst = { };
+static const u8 enc_nonce026[] __initconst = {
+	0x68, 0xab, 0x7f, 0xdb, 0xf6, 0x19, 0x01, 0xda,
+	0xd4, 0x61, 0xd2, 0x3c
+};
+static const u8 enc_key026[] __initconst = {
+	0x67, 0x11, 0x96, 0x27, 0xbd, 0x98, 0x8e, 0xda,
+	0x90, 0x62, 0x19, 0xe0, 0x8c, 0x0d, 0x0d, 0x77,
+	0x9a, 0x07, 0xd2, 0x08, 0xce, 0x8a, 0x4f, 0xe0,
+	0x70, 0x9a, 0xf7, 0x55, 0xee, 0xec, 0x6d, 0xcb
+};
+
+/* wycheproof - misc */
+static const u8 enc_input027[] __initconst = {
+	0x97, 0x46, 0x9d, 0xa6, 0x67, 0xd6, 0x11, 0x0f,
+	0x9c, 0xbd, 0xa1, 0xd1, 0xa2, 0x06, 0x73
+};
+static const u8 enc_output027[] __initconst = {
+	0x32, 0xdb, 0x66, 0xc4, 0xa3, 0x81, 0x9d, 0x81,
+	0x55, 0x74, 0x55, 0xe5, 0x98, 0x0f, 0xed, 0xfe,
+	0xae, 0x30, 0xde, 0xc9, 0x4e, 0x6a, 0xd3, 0xa9,
+	0xee, 0xa0, 0x6a, 0x0d, 0x70, 0x39, 0x17
+};
+static const u8 enc_assoc027[] __initconst = {
+	0x64, 0x53, 0xa5, 0x33, 0x84, 0x63, 0x22, 0x12
+};
+static const u8 enc_nonce027[] __initconst = {
+	0xd9, 0x5b, 0x32, 0x43, 0xaf, 0xae, 0xf7, 0x14,
+	0xc5, 0x03, 0x5b, 0x6a
+};
+static const u8 enc_key027[] __initconst = {
+	0xe6, 0xf1, 0x11, 0x8d, 0x41, 0xe4, 0xb4, 0x3f,
+	0xb5, 0x82, 0x21, 0xb7, 0xed, 0x79, 0x67, 0x38,
+	0x34, 0xe0, 0xd8, 0xac, 0x5c, 0x4f, 0xa6, 0x0b,
+	0xbc, 0x8b, 0xc4, 0x89, 0x3a, 0x58, 0x89, 0x4d
+};
+
+/* wycheproof - misc */
+static const u8 enc_input028[] __initconst = {
+	0x54, 0x9b, 0x36, 0x5a, 0xf9, 0x13, 0xf3, 0xb0,
+	0x81, 0x13, 0x1c, 0xcb, 0x6b, 0x82, 0x55, 0x88
+};
+static const u8 enc_output028[] __initconst = {
+	0xe9, 0x11, 0x0e, 0x9f, 0x56, 0xab, 0x3c, 0xa4,
+	0x83, 0x50, 0x0c, 0xea, 0xba, 0xb6, 0x7a, 0x13,
+	0x83, 0x6c, 0xca, 0xbf, 0x15, 0xa6, 0xa2, 0x2a,
+	0x51, 0xc1, 0x07, 0x1c, 0xfa, 0x68, 0xfa, 0x0c
+};
+static const u8 enc_assoc028[] __initconst = { };
+static const u8 enc_nonce028[] __initconst = {
+	0x2f, 0xcb, 0x1b, 0x38, 0xa9, 0x9e, 0x71, 0xb8,
+	0x47, 0x40, 0xad, 0x9b
+};
+static const u8 enc_key028[] __initconst = {
+	0x59, 0xd4, 0xea, 0xfb, 0x4d, 0xe0, 0xcf, 0xc7,
+	0xd3, 0xdb, 0x99, 0xa8, 0xf5, 0x4b, 0x15, 0xd7,
+	0xb3, 0x9f, 0x0a, 0xcc, 0x8d, 0xa6, 0x97, 0x63,
+	0xb0, 0x19, 0xc1, 0x69, 0x9f, 0x87, 0x67, 0x4a
+};
+
+/* wycheproof - misc */
+static const u8 enc_input029[] __initconst = {
+	0x55, 0xa4, 0x65, 0x64, 0x4f, 0x5b, 0x65, 0x09,
+	0x28, 0xcb, 0xee, 0x7c, 0x06, 0x32, 0x14, 0xd6
+};
+static const u8 enc_output029[] __initconst = {
+	0xe4, 0xb1, 0x13, 0xcb, 0x77, 0x59, 0x45, 0xf3,
+	0xd3, 0xa8, 0xae, 0x9e, 0xc1, 0x41, 0xc0, 0x0c,
+	0x7c, 0x43, 0xf1, 0x6c, 0xe0, 0x96, 0xd0, 0xdc,
+	0x27, 0xc9, 0x58, 0x49, 0xdc, 0x38, 0x3b, 0x7d
+};
+static const u8 enc_assoc029[] __initconst = {
+	0x03, 0x45, 0x85, 0x62, 0x1a, 0xf8, 0xd7, 0xff
+};
+static const u8 enc_nonce029[] __initconst = {
+	0x11, 0x8a, 0x69, 0x64, 0xc2, 0xd3, 0xe3, 0x80,
+	0x07, 0x1f, 0x52, 0x66
+};
+static const u8 enc_key029[] __initconst = {
+	0xb9, 0x07, 0xa4, 0x50, 0x75, 0x51, 0x3f, 0xe8,
+	0xa8, 0x01, 0x9e, 0xde, 0xe3, 0xf2, 0x59, 0x14,
+	0x87, 0xb2, 0xa0, 0x30, 0xb0, 0x3c, 0x6e, 0x1d,
+	0x77, 0x1c, 0x86, 0x25, 0x71, 0xd2, 0xea, 0x1e
+};
+
+/* wycheproof - misc */
+static const u8 enc_input030[] __initconst = {
+	0x3f, 0xf1, 0x51, 0x4b, 0x1c, 0x50, 0x39, 0x15,
+	0x91, 0x8f, 0x0c, 0x0c, 0x31, 0x09, 0x4a, 0x6e,
+	0x1f
+};
+static const u8 enc_output030[] __initconst = {
+	0x02, 0xcc, 0x3a, 0xcb, 0x5e, 0xe1, 0xfc, 0xdd,
+	0x12, 0xa0, 0x3b, 0xb8, 0x57, 0x97, 0x64, 0x74,
+	0xd3, 0xd8, 0x3b, 0x74, 0x63, 0xa2, 0xc3, 0x80,
+	0x0f, 0xe9, 0x58, 0xc2, 0x8e, 0xaa, 0x29, 0x08,
+	0x13
+};
+static const u8 enc_assoc030[] __initconst = { };
+static const u8 enc_nonce030[] __initconst = {
+	0x45, 0xaa, 0xa3, 0xe5, 0xd1, 0x6d, 0x2d, 0x42,
+	0xdc, 0x03, 0x44, 0x5d
+};
+static const u8 enc_key030[] __initconst = {
+	0x3b, 0x24, 0x58, 0xd8, 0x17, 0x6e, 0x16, 0x21,
+	0xc0, 0xcc, 0x24, 0xc0, 0xc0, 0xe2, 0x4c, 0x1e,
+	0x80, 0xd7, 0x2f, 0x7e, 0xe9, 0x14, 0x9a, 0x4b,
+	0x16, 0x61, 0x76, 0x62, 0x96, 0x16, 0xd0, 0x11
+};
+
+/* wycheproof - misc */
+static const u8 enc_input031[] __initconst = {
+	0x63, 0x85, 0x8c, 0xa3, 0xe2, 0xce, 0x69, 0x88,
+	0x7b, 0x57, 0x8a, 0x3c, 0x16, 0x7b, 0x42, 0x1c,
+	0x9c
+};
+static const u8 enc_output031[] __initconst = {
+	0x35, 0x76, 0x64, 0x88, 0xd2, 0xbc, 0x7c, 0x2b,
+	0x8d, 0x17, 0xcb, 0xbb, 0x9a, 0xbf, 0xad, 0x9e,
+	0x6d, 0x1f, 0x39, 0x1e, 0x65, 0x7b, 0x27, 0x38,
+	0xdd, 0xa0, 0x84, 0x48, 0xcb, 0xa2, 0x81, 0x1c,
+	0xeb
+};
+static const u8 enc_assoc031[] __initconst = {
+	0x9a, 0xaf, 0x29, 0x9e, 0xee, 0xa7, 0x8f, 0x79
+};
+static const u8 enc_nonce031[] __initconst = {
+	0xf0, 0x38, 0x4f, 0xb8, 0x76, 0x12, 0x14, 0x10,
+	0x63, 0x3d, 0x99, 0x3d
+};
+static const u8 enc_key031[] __initconst = {
+	0xf6, 0x0c, 0x6a, 0x1b, 0x62, 0x57, 0x25, 0xf7,
+	0x6c, 0x70, 0x37, 0xb4, 0x8f, 0xe3, 0x57, 0x7f,
+	0xa7, 0xf7, 0xb8, 0x7b, 0x1b, 0xd5, 0xa9, 0x82,
+	0x17, 0x6d, 0x18, 0x23, 0x06, 0xff, 0xb8, 0x70
+};
+
+/* wycheproof - misc */
+static const u8 enc_input032[] __initconst = {
+	0x10, 0xf1, 0xec, 0xf9, 0xc6, 0x05, 0x84, 0x66,
+	0x5d, 0x9a, 0xe5, 0xef, 0xe2, 0x79, 0xe7, 0xf7,
+	0x37, 0x7e, 0xea, 0x69, 0x16, 0xd2, 0xb1, 0x11
+};
+static const u8 enc_output032[] __initconst = {
+	0x42, 0xf2, 0x6c, 0x56, 0xcb, 0x4b, 0xe2, 0x1d,
+	0x9d, 0x8d, 0x0c, 0x80, 0xfc, 0x99, 0xdd, 0xe0,
+	0x0d, 0x75, 0xf3, 0x80, 0x74, 0xbf, 0xe7, 0x64,
+	0x54, 0xaa, 0x7e, 0x13, 0xd4, 0x8f, 0xff, 0x7d,
+	0x75, 0x57, 0x03, 0x94, 0x57, 0x04, 0x0a, 0x3a
+};
+static const u8 enc_assoc032[] __initconst = { };
+static const u8 enc_nonce032[] __initconst = {
+	0xe6, 0xb1, 0xad, 0xf2, 0xfd, 0x58, 0xa8, 0x76,
+	0x2c, 0x65, 0xf3, 0x1b
+};
+static const u8 enc_key032[] __initconst = {
+	0x02, 0x12, 0xa8, 0xde, 0x50, 0x07, 0xed, 0x87,
+	0xb3, 0x3f, 0x1a, 0x70, 0x90, 0xb6, 0x11, 0x4f,
+	0x9e, 0x08, 0xce, 0xfd, 0x96, 0x07, 0xf2, 0xc2,
+	0x76, 0xbd, 0xcf, 0xdb, 0xc5, 0xce, 0x9c, 0xd7
+};
+
+/* wycheproof - misc */
+static const u8 enc_input033[] __initconst = {
+	0x92, 0x22, 0xf9, 0x01, 0x8e, 0x54, 0xfd, 0x6d,
+	0xe1, 0x20, 0x08, 0x06, 0xa9, 0xee, 0x8e, 0x4c,
+	0xc9, 0x04, 0xd2, 0x9f, 0x25, 0xcb, 0xa1, 0x93
+};
+static const u8 enc_output033[] __initconst = {
+	0x12, 0x30, 0x32, 0x43, 0x7b, 0x4b, 0xfd, 0x69,
+	0x20, 0xe8, 0xf7, 0xe7, 0xe0, 0x08, 0x7a, 0xe4,
+	0x88, 0x9e, 0xbe, 0x7a, 0x0a, 0xd0, 0xe9, 0x00,
+	0x3c, 0xf6, 0x8f, 0x17, 0x95, 0x50, 0xda, 0x63,
+	0xd3, 0xb9, 0x6c, 0x2d, 0x55, 0x41, 0x18, 0x65
+};
+static const u8 enc_assoc033[] __initconst = {
+	0x3e, 0x8b, 0xc5, 0xad, 0xe1, 0x82, 0xff, 0x08
+};
+static const u8 enc_nonce033[] __initconst = {
+	0x6b, 0x28, 0x2e, 0xbe, 0xcc, 0x54, 0x1b, 0xcd,
+	0x78, 0x34, 0xed, 0x55
+};
+static const u8 enc_key033[] __initconst = {
+	0xc5, 0xbc, 0x09, 0x56, 0x56, 0x46, 0xe7, 0xed,
+	0xda, 0x95, 0x4f, 0x1f, 0x73, 0x92, 0x23, 0xda,
+	0xda, 0x20, 0xb9, 0x5c, 0x44, 0xab, 0x03, 0x3d,
+	0x0f, 0xae, 0x4b, 0x02, 0x83, 0xd1, 0x8b, 0xe3
+};
+
+/* wycheproof - misc */
+static const u8 enc_input034[] __initconst = {
+	0xb0, 0x53, 0x99, 0x92, 0x86, 0xa2, 0x82, 0x4f,
+	0x42, 0xcc, 0x8c, 0x20, 0x3a, 0xb2, 0x4e, 0x2c,
+	0x97, 0xa6, 0x85, 0xad, 0xcc, 0x2a, 0xd3, 0x26,
+	0x62, 0x55, 0x8e, 0x55, 0xa5, 0xc7, 0x29
+};
+static const u8 enc_output034[] __initconst = {
+	0x45, 0xc7, 0xd6, 0xb5, 0x3a, 0xca, 0xd4, 0xab,
+	0xb6, 0x88, 0x76, 0xa6, 0xe9, 0x6a, 0x48, 0xfb,
+	0x59, 0x52, 0x4d, 0x2c, 0x92, 0xc9, 0xd8, 0xa1,
+	0x89, 0xc9, 0xfd, 0x2d, 0xb9, 0x17, 0x46, 0x56,
+	0x6d, 0x3c, 0xa1, 0x0e, 0x31, 0x1b, 0x69, 0x5f,
+	0x3e, 0xae, 0x15, 0x51, 0x65, 0x24, 0x93
+};
+static const u8 enc_assoc034[] __initconst = { };
+static const u8 enc_nonce034[] __initconst = {
+	0x04, 0xa9, 0xbe, 0x03, 0x50, 0x8a, 0x5f, 0x31,
+	0x37, 0x1a, 0x6f, 0xd2
+};
+static const u8 enc_key034[] __initconst = {
+	0x2e, 0xb5, 0x1c, 0x46, 0x9a, 0xa8, 0xeb, 0x9e,
+	0x6c, 0x54, 0xa8, 0x34, 0x9b, 0xae, 0x50, 0xa2,
+	0x0f, 0x0e, 0x38, 0x27, 0x11, 0xbb, 0xa1, 0x15,
+	0x2c, 0x42, 0x4f, 0x03, 0xb6, 0x67, 0x1d, 0x71
+};
+
+/* wycheproof - misc */
+static const u8 enc_input035[] __initconst = {
+	0xf4, 0x52, 0x06, 0xab, 0xc2, 0x55, 0x52, 0xb2,
+	0xab, 0xc9, 0xab, 0x7f, 0xa2, 0x43, 0x03, 0x5f,
+	0xed, 0xaa, 0xdd, 0xc3, 0xb2, 0x29, 0x39, 0x56,
+	0xf1, 0xea, 0x6e, 0x71, 0x56, 0xe7, 0xeb
+};
+static const u8 enc_output035[] __initconst = {
+	0x46, 0xa8, 0x0c, 0x41, 0x87, 0x02, 0x47, 0x20,
+	0x08, 0x46, 0x27, 0x58, 0x00, 0x80, 0xdd, 0xe5,
+	0xa3, 0xf4, 0xa1, 0x10, 0x93, 0xa7, 0x07, 0x6e,
+	0xd6, 0xf3, 0xd3, 0x26, 0xbc, 0x7b, 0x70, 0x53,
+	0x4d, 0x4a, 0xa2, 0x83, 0x5a, 0x52, 0xe7, 0x2d,
+	0x14, 0xdf, 0x0e, 0x4f, 0x47, 0xf2, 0x5f
+};
+static const u8 enc_assoc035[] __initconst = {
+	0x37, 0x46, 0x18, 0xa0, 0x6e, 0xa9, 0x8a, 0x48
+};
+static const u8 enc_nonce035[] __initconst = {
+	0x47, 0x0a, 0x33, 0x9e, 0xcb, 0x32, 0x19, 0xb8,
+	0xb8, 0x1a, 0x1f, 0x8b
+};
+static const u8 enc_key035[] __initconst = {
+	0x7f, 0x5b, 0x74, 0xc0, 0x7e, 0xd1, 0xb4, 0x0f,
+	0xd1, 0x43, 0x58, 0xfe, 0x2f, 0xf2, 0xa7, 0x40,
+	0xc1, 0x16, 0xc7, 0x70, 0x65, 0x10, 0xe6, 0xa4,
+	0x37, 0xf1, 0x9e, 0xa4, 0x99, 0x11, 0xce, 0xc4
+};
+
+/* wycheproof - misc */
+static const u8 enc_input036[] __initconst = {
+	0xb9, 0xc5, 0x54, 0xcb, 0xc3, 0x6a, 0xc1, 0x8a,
+	0xe8, 0x97, 0xdf, 0x7b, 0xee, 0xca, 0xc1, 0xdb,
+	0xeb, 0x4e, 0xaf, 0xa1, 0x56, 0xbb, 0x60, 0xce,
+	0x2e, 0x5d, 0x48, 0xf0, 0x57, 0x15, 0xe6, 0x78
+};
+static const u8 enc_output036[] __initconst = {
+	0xea, 0x29, 0xaf, 0xa4, 0x9d, 0x36, 0xe8, 0x76,
+	0x0f, 0x5f, 0xe1, 0x97, 0x23, 0xb9, 0x81, 0x1e,
+	0xd5, 0xd5, 0x19, 0x93, 0x4a, 0x44, 0x0f, 0x50,
+	0x81, 0xac, 0x43, 0x0b, 0x95, 0x3b, 0x0e, 0x21,
+	0x22, 0x25, 0x41, 0xaf, 0x46, 0xb8, 0x65, 0x33,
+	0xc6, 0xb6, 0x8d, 0x2f, 0xf1, 0x08, 0xa7, 0xea
+};
+static const u8 enc_assoc036[] __initconst = { };
+static const u8 enc_nonce036[] __initconst = {
+	0x72, 0xcf, 0xd9, 0x0e, 0xf3, 0x02, 0x6c, 0xa2,
+	0x2b, 0x7e, 0x6e, 0x6a
+};
+static const u8 enc_key036[] __initconst = {
+	0xe1, 0x73, 0x1d, 0x58, 0x54, 0xe1, 0xb7, 0x0c,
+	0xb3, 0xff, 0xe8, 0xb7, 0x86, 0xa2, 0xb3, 0xeb,
+	0xf0, 0x99, 0x43, 0x70, 0x95, 0x47, 0x57, 0xb9,
+	0xdc, 0x8c, 0x7b, 0xc5, 0x35, 0x46, 0x34, 0xa3
+};
+
+/* wycheproof - misc */
+static const u8 enc_input037[] __initconst = {
+	0x6b, 0x26, 0x04, 0x99, 0x6c, 0xd3, 0x0c, 0x14,
+	0xa1, 0x3a, 0x52, 0x57, 0xed, 0x6c, 0xff, 0xd3,
+	0xbc, 0x5e, 0x29, 0xd6, 0xb9, 0x7e, 0xb1, 0x79,
+	0x9e, 0xb3, 0x35, 0xe2, 0x81, 0xea, 0x45, 0x1e
+};
+static const u8 enc_output037[] __initconst = {
+	0x6d, 0xad, 0x63, 0x78, 0x97, 0x54, 0x4d, 0x8b,
+	0xf6, 0xbe, 0x95, 0x07, 0xed, 0x4d, 0x1b, 0xb2,
+	0xe9, 0x54, 0xbc, 0x42, 0x7e, 0x5d, 0xe7, 0x29,
+	0xda, 0xf5, 0x07, 0x62, 0x84, 0x6f, 0xf2, 0xf4,
+	0x7b, 0x99, 0x7d, 0x93, 0xc9, 0x82, 0x18, 0x9d,
+	0x70, 0x95, 0xdc, 0x79, 0x4c, 0x74, 0x62, 0x32
+};
+static const u8 enc_assoc037[] __initconst = {
+	0x23, 0x33, 0xe5, 0xce, 0x0f, 0x93, 0xb0, 0x59
+};
+static const u8 enc_nonce037[] __initconst = {
+	0x26, 0x28, 0x80, 0xd4, 0x75, 0xf3, 0xda, 0xc5,
+	0x34, 0x0d, 0xd1, 0xb8
+};
+static const u8 enc_key037[] __initconst = {
+	0x27, 0xd8, 0x60, 0x63, 0x1b, 0x04, 0x85, 0xa4,
+	0x10, 0x70, 0x2f, 0xea, 0x61, 0xbc, 0x87, 0x3f,
+	0x34, 0x42, 0x26, 0x0c, 0xad, 0xed, 0x4a, 0xbd,
+	0xe2, 0x5b, 0x78, 0x6a, 0x2d, 0x97, 0xf1, 0x45
+};
+
+/* wycheproof - misc */
+static const u8 enc_input038[] __initconst = {
+	0x97, 0x3d, 0x0c, 0x75, 0x38, 0x26, 0xba, 0xe4,
+	0x66, 0xcf, 0x9a, 0xbb, 0x34, 0x93, 0x15, 0x2e,
+	0x9d, 0xe7, 0x81, 0x9e, 0x2b, 0xd0, 0xc7, 0x11,
+	0x71, 0x34, 0x6b, 0x4d, 0x2c, 0xeb, 0xf8, 0x04,
+	0x1a, 0xa3, 0xce, 0xdc, 0x0d, 0xfd, 0x7b, 0x46,
+	0x7e, 0x26, 0x22, 0x8b, 0xc8, 0x6c, 0x9a
+};
+static const u8 enc_output038[] __initconst = {
+	0xfb, 0xa7, 0x8a, 0xe4, 0xf9, 0xd8, 0x08, 0xa6,
+	0x2e, 0x3d, 0xa4, 0x0b, 0xe2, 0xcb, 0x77, 0x00,
+	0xc3, 0x61, 0x3d, 0x9e, 0xb2, 0xc5, 0x29, 0xc6,
+	0x52, 0xe7, 0x6a, 0x43, 0x2c, 0x65, 0x8d, 0x27,
+	0x09, 0x5f, 0x0e, 0xb8, 0xf9, 0x40, 0xc3, 0x24,
+	0x98, 0x1e, 0xa9, 0x35, 0xe5, 0x07, 0xf9, 0x8f,
+	0x04, 0x69, 0x56, 0xdb, 0x3a, 0x51, 0x29, 0x08,
+	0xbd, 0x7a, 0xfc, 0x8f, 0x2a, 0xb0, 0xa9
+};
+static const u8 enc_assoc038[] __initconst = { };
+static const u8 enc_nonce038[] __initconst = {
+	0xe7, 0x4a, 0x51, 0x5e, 0x7e, 0x21, 0x02, 0xb9,
+	0x0b, 0xef, 0x55, 0xd2
+};
+static const u8 enc_key038[] __initconst = {
+	0xcf, 0x0d, 0x40, 0xa4, 0x64, 0x4e, 0x5f, 0x51,
+	0x81, 0x51, 0x65, 0xd5, 0x30, 0x1b, 0x22, 0x63,
+	0x1f, 0x45, 0x44, 0xc4, 0x9a, 0x18, 0x78, 0xe3,
+	0xa0, 0xa5, 0xe8, 0xe1, 0xaa, 0xe0, 0xf2, 0x64
+};
+
+/* wycheproof - misc */
+static const u8 enc_input039[] __initconst = {
+	0xa9, 0x89, 0x95, 0x50, 0x4d, 0xf1, 0x6f, 0x74,
+	0x8b, 0xfb, 0x77, 0x85, 0xff, 0x91, 0xee, 0xb3,
+	0xb6, 0x60, 0xea, 0x9e, 0xd3, 0x45, 0x0c, 0x3d,
+	0x5e, 0x7b, 0x0e, 0x79, 0xef, 0x65, 0x36, 0x59,
+	0xa9, 0x97, 0x8d, 0x75, 0x54, 0x2e, 0xf9, 0x1c,
+	0x45, 0x67, 0x62, 0x21, 0x56, 0x40, 0xb9
+};
+static const u8 enc_output039[] __initconst = {
+	0xa1, 0xff, 0xed, 0x80, 0x76, 0x18, 0x29, 0xec,
+	0xce, 0x24, 0x2e, 0x0e, 0x88, 0xb1, 0x38, 0x04,
+	0x90, 0x16, 0xbc, 0xa0, 0x18, 0xda, 0x2b, 0x6e,
+	0x19, 0x98, 0x6b, 0x3e, 0x31, 0x8c, 0xae, 0x8d,
+	0x80, 0x61, 0x98, 0xfb, 0x4c, 0x52, 0x7c, 0xc3,
+	0x93, 0x50, 0xeb, 0xdd, 0xea, 0xc5, 0x73, 0xc4,
+	0xcb, 0xf0, 0xbe, 0xfd, 0xa0, 0xb7, 0x02, 0x42,
+	0xc6, 0x40, 0xd7, 0xcd, 0x02, 0xd7, 0xa3
+};
+static const u8 enc_assoc039[] __initconst = {
+	0xb3, 0xe4, 0x06, 0x46, 0x83, 0xb0, 0x2d, 0x84
+};
+static const u8 enc_nonce039[] __initconst = {
+	0xd4, 0xd8, 0x07, 0x34, 0x16, 0x83, 0x82, 0x5b,
+	0x31, 0xcd, 0x4d, 0x95
+};
+static const u8 enc_key039[] __initconst = {
+	0x6c, 0xbf, 0xd7, 0x1c, 0x64, 0x5d, 0x18, 0x4c,
+	0xf5, 0xd2, 0x3c, 0x40, 0x2b, 0xdb, 0x0d, 0x25,
+	0xec, 0x54, 0x89, 0x8c, 0x8a, 0x02, 0x73, 0xd4,
+	0x2e, 0xb5, 0xbe, 0x10, 0x9f, 0xdc, 0xb2, 0xac
+};
+
+/* wycheproof - misc */
+static const u8 enc_input040[] __initconst = {
+	0xd0, 0x96, 0x80, 0x31, 0x81, 0xbe, 0xef, 0x9e,
+	0x00, 0x8f, 0xf8, 0x5d, 0x5d, 0xdc, 0x38, 0xdd,
+	0xac, 0xf0, 0xf0, 0x9e, 0xe5, 0xf7, 0xe0, 0x7f,
+	0x1e, 0x40, 0x79, 0xcb, 0x64, 0xd0, 0xdc, 0x8f,
+	0x5e, 0x67, 0x11, 0xcd, 0x49, 0x21, 0xa7, 0x88,
+	0x7d, 0xe7, 0x6e, 0x26, 0x78, 0xfd, 0xc6, 0x76,
+	0x18, 0xf1, 0x18, 0x55, 0x86, 0xbf, 0xea, 0x9d,
+	0x4c, 0x68, 0x5d, 0x50, 0xe4, 0xbb, 0x9a, 0x82
+};
+static const u8 enc_output040[] __initconst = {
+	0x9a, 0x4e, 0xf2, 0x2b, 0x18, 0x16, 0x77, 0xb5,
+	0x75, 0x5c, 0x08, 0xf7, 0x47, 0xc0, 0xf8, 0xd8,
+	0xe8, 0xd4, 0xc1, 0x8a, 0x9c, 0xc2, 0x40, 0x5c,
+	0x12, 0xbb, 0x51, 0xbb, 0x18, 0x72, 0xc8, 0xe8,
+	0xb8, 0x77, 0x67, 0x8b, 0xec, 0x44, 0x2c, 0xfc,
+	0xbb, 0x0f, 0xf4, 0x64, 0xa6, 0x4b, 0x74, 0x33,
+	0x2c, 0xf0, 0x72, 0x89, 0x8c, 0x7e, 0x0e, 0xdd,
+	0xf6, 0x23, 0x2e, 0xa6, 0xe2, 0x7e, 0xfe, 0x50,
+	0x9f, 0xf3, 0x42, 0x7a, 0x0f, 0x32, 0xfa, 0x56,
+	0x6d, 0x9c, 0xa0, 0xa7, 0x8a, 0xef, 0xc0, 0x13
+};
+static const u8 enc_assoc040[] __initconst = { };
+static const u8 enc_nonce040[] __initconst = {
+	0xd6, 0x10, 0x40, 0xa3, 0x13, 0xed, 0x49, 0x28,
+	0x23, 0xcc, 0x06, 0x5b
+};
+static const u8 enc_key040[] __initconst = {
+	0x5b, 0x1d, 0x10, 0x35, 0xc0, 0xb1, 0x7e, 0xe0,
+	0xb0, 0x44, 0x47, 0x67, 0xf8, 0x0a, 0x25, 0xb8,
+	0xc1, 0xb7, 0x41, 0xf4, 0xb5, 0x0a, 0x4d, 0x30,
+	0x52, 0x22, 0x6b, 0xaa, 0x1c, 0x6f, 0xb7, 0x01
+};
+
+/* wycheproof - misc */
+static const u8 enc_input041[] __initconst = {
+	0x94, 0xee, 0x16, 0x6d, 0x6d, 0x6e, 0xcf, 0x88,
+	0x32, 0x43, 0x71, 0x36, 0xb4, 0xae, 0x80, 0x5d,
+	0x42, 0x88, 0x64, 0x35, 0x95, 0x86, 0xd9, 0x19,
+	0x3a, 0x25, 0x01, 0x62, 0x93, 0xed, 0xba, 0x44,
+	0x3c, 0x58, 0xe0, 0x7e, 0x7b, 0x71, 0x95, 0xec,
+	0x5b, 0xd8, 0x45, 0x82, 0xa9, 0xd5, 0x6c, 0x8d,
+	0x4a, 0x10, 0x8c, 0x7d, 0x7c, 0xe3, 0x4e, 0x6c,
+	0x6f, 0x8e, 0xa1, 0xbe, 0xc0, 0x56, 0x73, 0x17
+};
+static const u8 enc_output041[] __initconst = {
+	0x5f, 0xbb, 0xde, 0xcc, 0x34, 0xbe, 0x20, 0x16,
+	0x14, 0xf6, 0x36, 0x03, 0x1e, 0xeb, 0x42, 0xf1,
+	0xca, 0xce, 0x3c, 0x79, 0xa1, 0x2c, 0xff, 0xd8,
+	0x71, 0xee, 0x8e, 0x73, 0x82, 0x0c, 0x82, 0x97,
+	0x49, 0xf1, 0xab, 0xb4, 0x29, 0x43, 0x67, 0x84,
+	0x9f, 0xb6, 0xc2, 0xaa, 0x56, 0xbd, 0xa8, 0xa3,
+	0x07, 0x8f, 0x72, 0x3d, 0x7c, 0x1c, 0x85, 0x20,
+	0x24, 0xb0, 0x17, 0xb5, 0x89, 0x73, 0xfb, 0x1e,
+	0x09, 0x26, 0x3d, 0xa7, 0xb4, 0xcb, 0x92, 0x14,
+	0x52, 0xf9, 0x7d, 0xca, 0x40, 0xf5, 0x80, 0xec
+};
+static const u8 enc_assoc041[] __initconst = {
+	0x71, 0x93, 0xf6, 0x23, 0x66, 0x33, 0x21, 0xa2
+};
+static const u8 enc_nonce041[] __initconst = {
+	0xd3, 0x1c, 0x21, 0xab, 0xa1, 0x75, 0xb7, 0x0d,
+	0xe4, 0xeb, 0xb1, 0x9c
+};
+static const u8 enc_key041[] __initconst = {
+	0x97, 0xd6, 0x35, 0xc4, 0xf4, 0x75, 0x74, 0xd9,
+	0x99, 0x8a, 0x90, 0x87, 0x5d, 0xa1, 0xd3, 0xa2,
+	0x84, 0xb7, 0x55, 0xb2, 0xd3, 0x92, 0x97, 0xa5,
+	0x72, 0x52, 0x35, 0x19, 0x0e, 0x10, 0xa9, 0x7e
+};
+
+/* wycheproof - misc */
+static const u8 enc_input042[] __initconst = {
+	0xb4, 0x29, 0xeb, 0x80, 0xfb, 0x8f, 0xe8, 0xba,
+	0xed, 0xa0, 0xc8, 0x5b, 0x9c, 0x33, 0x34, 0x58,
+	0xe7, 0xc2, 0x99, 0x2e, 0x55, 0x84, 0x75, 0x06,
+	0x9d, 0x12, 0xd4, 0x5c, 0x22, 0x21, 0x75, 0x64,
+	0x12, 0x15, 0x88, 0x03, 0x22, 0x97, 0xef, 0xf5,
+	0x67, 0x83, 0x74, 0x2a, 0x5f, 0xc2, 0x2d, 0x74,
+	0x10, 0xff, 0xb2, 0x9d, 0x66, 0x09, 0x86, 0x61,
+	0xd7, 0x6f, 0x12, 0x6c, 0x3c, 0x27, 0x68, 0x9e,
+	0x43, 0xb3, 0x72, 0x67, 0xca, 0xc5, 0xa3, 0xa6,
+	0xd3, 0xab, 0x49, 0xe3, 0x91, 0xda, 0x29, 0xcd,
+	0x30, 0x54, 0xa5, 0x69, 0x2e, 0x28, 0x07, 0xe4,
+	0xc3, 0xea, 0x46, 0xc8, 0x76, 0x1d, 0x50, 0xf5,
+	0x92
+};
+static const u8 enc_output042[] __initconst = {
+	0xd0, 0x10, 0x2f, 0x6c, 0x25, 0x8b, 0xf4, 0x97,
+	0x42, 0xce, 0xc3, 0x4c, 0xf2, 0xd0, 0xfe, 0xdf,
+	0x23, 0xd1, 0x05, 0xfb, 0x4c, 0x84, 0xcf, 0x98,
+	0x51, 0x5e, 0x1b, 0xc9, 0xa6, 0x4f, 0x8a, 0xd5,
+	0xbe, 0x8f, 0x07, 0x21, 0xbd, 0xe5, 0x06, 0x45,
+	0xd0, 0x00, 0x83, 0xc3, 0xa2, 0x63, 0xa3, 0x10,
+	0x53, 0xb7, 0x60, 0x24, 0x5f, 0x52, 0xae, 0x28,
+	0x66, 0xa5, 0xec, 0x83, 0xb1, 0x9f, 0x61, 0xbe,
+	0x1d, 0x30, 0xd5, 0xc5, 0xd9, 0xfe, 0xcc, 0x4c,
+	0xbb, 0xe0, 0x8f, 0xd3, 0x85, 0x81, 0x3a, 0x2a,
+	0xa3, 0x9a, 0x00, 0xff, 0x9c, 0x10, 0xf7, 0xf2,
+	0x37, 0x02, 0xad, 0xd1, 0xe4, 0xb2, 0xff, 0xa3,
+	0x1c, 0x41, 0x86, 0x5f, 0xc7, 0x1d, 0xe1, 0x2b,
+	0x19, 0x61, 0x21, 0x27, 0xce, 0x49, 0x99, 0x3b,
+	0xb0
+};
+static const u8 enc_assoc042[] __initconst = { };
+static const u8 enc_nonce042[] __initconst = {
+	0x17, 0xc8, 0x6a, 0x8a, 0xbb, 0xb7, 0xe0, 0x03,
+	0xac, 0xde, 0x27, 0x99
+};
+static const u8 enc_key042[] __initconst = {
+	0xfe, 0x6e, 0x55, 0xbd, 0xae, 0xd1, 0xf7, 0x28,
+	0x4c, 0xa5, 0xfc, 0x0f, 0x8c, 0x5f, 0x2b, 0x8d,
+	0xf5, 0x6d, 0xc0, 0xf4, 0x9e, 0x8c, 0xa6, 0x6a,
+	0x41, 0x99, 0x5e, 0x78, 0x33, 0x51, 0xf9, 0x01
+};
+
+/* wycheproof - misc */
+static const u8 enc_input043[] __initconst = {
+	0xce, 0xb5, 0x34, 0xce, 0x50, 0xdc, 0x23, 0xff,
+	0x63, 0x8a, 0xce, 0x3e, 0xf6, 0x3a, 0xb2, 0xcc,
+	0x29, 0x73, 0xee, 0xad, 0xa8, 0x07, 0x85, 0xfc,
+	0x16, 0x5d, 0x06, 0xc2, 0xf5, 0x10, 0x0f, 0xf5,
+	0xe8, 0xab, 0x28, 0x82, 0xc4, 0x75, 0xaf, 0xcd,
+	0x05, 0xcc, 0xd4, 0x9f, 0x2e, 0x7d, 0x8f, 0x55,
+	0xef, 0x3a, 0x72, 0xe3, 0xdc, 0x51, 0xd6, 0x85,
+	0x2b, 0x8e, 0x6b, 0x9e, 0x7a, 0xec, 0xe5, 0x7b,
+	0xe6, 0x55, 0x6b, 0x0b, 0x6d, 0x94, 0x13, 0xe3,
+	0x3f, 0xc5, 0xfc, 0x24, 0xa9, 0xa2, 0x05, 0xad,
+	0x59, 0x57, 0x4b, 0xb3, 0x9d, 0x94, 0x4a, 0x92,
+	0xdc, 0x47, 0x97, 0x0d, 0x84, 0xa6, 0xad, 0x31,
+	0x76
+};
+static const u8 enc_output043[] __initconst = {
+	0x75, 0x45, 0x39, 0x1b, 0x51, 0xde, 0x01, 0xd5,
+	0xc5, 0x3d, 0xfa, 0xca, 0x77, 0x79, 0x09, 0x06,
+	0x3e, 0x58, 0xed, 0xee, 0x4b, 0xb1, 0x22, 0x7e,
+	0x71, 0x10, 0xac, 0x4d, 0x26, 0x20, 0xc2, 0xae,
+	0xc2, 0xf8, 0x48, 0xf5, 0x6d, 0xee, 0xb0, 0x37,
+	0xa8, 0xdc, 0xed, 0x75, 0xaf, 0xa8, 0xa6, 0xc8,
+	0x90, 0xe2, 0xde, 0xe4, 0x2f, 0x95, 0x0b, 0xb3,
+	0x3d, 0x9e, 0x24, 0x24, 0xd0, 0x8a, 0x50, 0x5d,
+	0x89, 0x95, 0x63, 0x97, 0x3e, 0xd3, 0x88, 0x70,
+	0xf3, 0xde, 0x6e, 0xe2, 0xad, 0xc7, 0xfe, 0x07,
+	0x2c, 0x36, 0x6c, 0x14, 0xe2, 0xcf, 0x7c, 0xa6,
+	0x2f, 0xb3, 0xd3, 0x6b, 0xee, 0x11, 0x68, 0x54,
+	0x61, 0xb7, 0x0d, 0x44, 0xef, 0x8c, 0x66, 0xc5,
+	0xc7, 0xbb, 0xf1, 0x0d, 0xca, 0xdd, 0x7f, 0xac,
+	0xf6
+};
+static const u8 enc_assoc043[] __initconst = {
+	0xa1, 0x1c, 0x40, 0xb6, 0x03, 0x76, 0x73, 0x30
+};
+static const u8 enc_nonce043[] __initconst = {
+	0x46, 0x36, 0x2f, 0x45, 0xd6, 0x37, 0x9e, 0x63,
+	0xe5, 0x22, 0x94, 0x60
+};
+static const u8 enc_key043[] __initconst = {
+	0xaa, 0xbc, 0x06, 0x34, 0x74, 0xe6, 0x5c, 0x4c,
+	0x3e, 0x9b, 0xdc, 0x48, 0x0d, 0xea, 0x97, 0xb4,
+	0x51, 0x10, 0xc8, 0x61, 0x88, 0x46, 0xff, 0x6b,
+	0x15, 0xbd, 0xd2, 0xa4, 0xa5, 0x68, 0x2c, 0x4e
+};
+
+/* wycheproof - misc */
+static const u8 enc_input044[] __initconst = {
+	0xe5, 0xcc, 0xaa, 0x44, 0x1b, 0xc8, 0x14, 0x68,
+	0x8f, 0x8f, 0x6e, 0x8f, 0x28, 0xb5, 0x00, 0xb2
+};
+static const u8 enc_output044[] __initconst = {
+	0x7e, 0x72, 0xf5, 0xa1, 0x85, 0xaf, 0x16, 0xa6,
+	0x11, 0x92, 0x1b, 0x43, 0x8f, 0x74, 0x9f, 0x0b,
+	0x12, 0x42, 0xc6, 0x70, 0x73, 0x23, 0x34, 0x02,
+	0x9a, 0xdf, 0xe1, 0xc5, 0x00, 0x16, 0x51, 0xe4
+};
+static const u8 enc_assoc044[] __initconst = {
+	0x02
+};
+static const u8 enc_nonce044[] __initconst = {
+	0x87, 0x34, 0x5f, 0x10, 0x55, 0xfd, 0x9e, 0x21,
+	0x02, 0xd5, 0x06, 0x56
+};
+static const u8 enc_key044[] __initconst = {
+	0x7d, 0x00, 0xb4, 0x80, 0x95, 0xad, 0xfa, 0x32,
+	0x72, 0x05, 0x06, 0x07, 0xb2, 0x64, 0x18, 0x50,
+	0x02, 0xba, 0x99, 0x95, 0x7c, 0x49, 0x8b, 0xe0,
+	0x22, 0x77, 0x0f, 0x2c, 0xe2, 0xf3, 0x14, 0x3c
+};
+
+/* wycheproof - misc */
+static const u8 enc_input045[] __initconst = {
+	0x02, 0xcd, 0xe1, 0x68, 0xfb, 0xa3, 0xf5, 0x44,
+	0xbb, 0xd0, 0x33, 0x2f, 0x7a, 0xde, 0xad, 0xa8
+};
+static const u8 enc_output045[] __initconst = {
+	0x85, 0xf2, 0x9a, 0x71, 0x95, 0x57, 0xcd, 0xd1,
+	0x4d, 0x1f, 0x8f, 0xff, 0xab, 0x6d, 0x9e, 0x60,
+	0x73, 0x2c, 0xa3, 0x2b, 0xec, 0xd5, 0x15, 0xa1,
+	0xed, 0x35, 0x3f, 0x54, 0x2e, 0x99, 0x98, 0x58
+};
+static const u8 enc_assoc045[] __initconst = {
+	0xb6, 0x48
+};
+static const u8 enc_nonce045[] __initconst = {
+	0x87, 0xa3, 0x16, 0x3e, 0xc0, 0x59, 0x8a, 0xd9,
+	0x5b, 0x3a, 0xa7, 0x13
+};
+static const u8 enc_key045[] __initconst = {
+	0x64, 0x32, 0x71, 0x7f, 0x1d, 0xb8, 0x5e, 0x41,
+	0xac, 0x78, 0x36, 0xbc, 0xe2, 0x51, 0x85, 0xa0,
+	0x80, 0xd5, 0x76, 0x2b, 0x9e, 0x2b, 0x18, 0x44,
+	0x4b, 0x6e, 0xc7, 0x2c, 0x3b, 0xd8, 0xe4, 0xdc
+};
+
+/* wycheproof - misc */
+static const u8 enc_input046[] __initconst = {
+	0x16, 0xdd, 0xd2, 0x3f, 0xf5, 0x3f, 0x3d, 0x23,
+	0xc0, 0x63, 0x34, 0x48, 0x70, 0x40, 0xeb, 0x47
+};
+static const u8 enc_output046[] __initconst = {
+	0xc1, 0xb2, 0x95, 0x93, 0x6d, 0x56, 0xfa, 0xda,
+	0xc0, 0x3e, 0x5f, 0x74, 0x2b, 0xff, 0x73, 0xa1,
+	0x39, 0xc4, 0x57, 0xdb, 0xab, 0x66, 0x38, 0x2b,
+	0xab, 0xb3, 0xb5, 0x58, 0x00, 0xcd, 0xa5, 0xb8
+};
+static const u8 enc_assoc046[] __initconst = {
+	0xbd, 0x4c, 0xd0, 0x2f, 0xc7, 0x50, 0x2b, 0xbd,
+	0xbd, 0xf6, 0xc9, 0xa3, 0xcb, 0xe8, 0xf0
+};
+static const u8 enc_nonce046[] __initconst = {
+	0x6f, 0x57, 0x3a, 0xa8, 0x6b, 0xaa, 0x49, 0x2b,
+	0xa4, 0x65, 0x96, 0xdf
+};
+static const u8 enc_key046[] __initconst = {
+	0x8e, 0x34, 0xcf, 0x73, 0xd2, 0x45, 0xa1, 0x08,
+	0x2a, 0x92, 0x0b, 0x86, 0x36, 0x4e, 0xb8, 0x96,
+	0xc4, 0x94, 0x64, 0x67, 0xbc, 0xb3, 0xd5, 0x89,
+	0x29, 0xfc, 0xb3, 0x66, 0x90, 0xe6, 0x39, 0x4f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input047[] __initconst = {
+	0x62, 0x3b, 0x78, 0x50, 0xc3, 0x21, 0xe2, 0xcf,
+	0x0c, 0x6f, 0xbc, 0xc8, 0xdf, 0xd1, 0xaf, 0xf2
+};
+static const u8 enc_output047[] __initconst = {
+	0xc8, 0x4c, 0x9b, 0xb7, 0xc6, 0x1c, 0x1b, 0xcb,
+	0x17, 0x77, 0x2a, 0x1c, 0x50, 0x0c, 0x50, 0x95,
+	0xdb, 0xad, 0xf7, 0xa5, 0x13, 0x8c, 0xa0, 0x34,
+	0x59, 0xa2, 0xcd, 0x65, 0x83, 0x1e, 0x09, 0x2f
+};
+static const u8 enc_assoc047[] __initconst = {
+	0x89, 0xcc, 0xe9, 0xfb, 0x47, 0x44, 0x1d, 0x07,
+	0xe0, 0x24, 0x5a, 0x66, 0xfe, 0x8b, 0x77, 0x8b
+};
+static const u8 enc_nonce047[] __initconst = {
+	0x1a, 0x65, 0x18, 0xf0, 0x2e, 0xde, 0x1d, 0xa6,
+	0x80, 0x92, 0x66, 0xd9
+};
+static const u8 enc_key047[] __initconst = {
+	0xcb, 0x55, 0x75, 0xf5, 0xc7, 0xc4, 0x5c, 0x91,
+	0xcf, 0x32, 0x0b, 0x13, 0x9f, 0xb5, 0x94, 0x23,
+	0x75, 0x60, 0xd0, 0xa3, 0xe6, 0xf8, 0x65, 0xa6,
+	0x7d, 0x4f, 0x63, 0x3f, 0x2c, 0x08, 0xf0, 0x16
+};
+
+/* wycheproof - misc */
+static const u8 enc_input048[] __initconst = {
+	0x87, 0xb3, 0xa4, 0xd7, 0xb2, 0x6d, 0x8d, 0x32,
+	0x03, 0xa0, 0xde, 0x1d, 0x64, 0xef, 0x82, 0xe3
+};
+static const u8 enc_output048[] __initconst = {
+	0x94, 0xbc, 0x80, 0x62, 0x1e, 0xd1, 0xe7, 0x1b,
+	0x1f, 0xd2, 0xb5, 0xc3, 0xa1, 0x5e, 0x35, 0x68,
+	0x33, 0x35, 0x11, 0x86, 0x17, 0x96, 0x97, 0x84,
+	0x01, 0x59, 0x8b, 0x96, 0x37, 0x22, 0xf5, 0xb3
+};
+static const u8 enc_assoc048[] __initconst = {
+	0xd1, 0x9f, 0x2d, 0x98, 0x90, 0x95, 0xf7, 0xab,
+	0x03, 0xa5, 0xfd, 0xe8, 0x44, 0x16, 0xe0, 0x0c,
+	0x0e
+};
+static const u8 enc_nonce048[] __initconst = {
+	0x56, 0x4d, 0xee, 0x49, 0xab, 0x00, 0xd2, 0x40,
+	0xfc, 0x10, 0x68, 0xc3
+};
+static const u8 enc_key048[] __initconst = {
+	0xa5, 0x56, 0x9e, 0x72, 0x9a, 0x69, 0xb2, 0x4b,
+	0xa6, 0xe0, 0xff, 0x15, 0xc4, 0x62, 0x78, 0x97,
+	0x43, 0x68, 0x24, 0xc9, 0x41, 0xe9, 0xd0, 0x0b,
+	0x2e, 0x93, 0xfd, 0xdc, 0x4b, 0xa7, 0x76, 0x57
+};
+
+/* wycheproof - misc */
+static const u8 enc_input049[] __initconst = {
+	0xe6, 0x01, 0xb3, 0x85, 0x57, 0x79, 0x7d, 0xa2,
+	0xf8, 0xa4, 0x10, 0x6a, 0x08, 0x9d, 0x1d, 0xa6
+};
+static const u8 enc_output049[] __initconst = {
+	0x29, 0x9b, 0x5d, 0x3f, 0x3d, 0x03, 0xc0, 0x87,
+	0x20, 0x9a, 0x16, 0xe2, 0x85, 0x14, 0x31, 0x11,
+	0x4b, 0x45, 0x4e, 0xd1, 0x98, 0xde, 0x11, 0x7e,
+	0x83, 0xec, 0x49, 0xfa, 0x8d, 0x85, 0x08, 0xd6
+};
+static const u8 enc_assoc049[] __initconst = {
+	0x5e, 0x64, 0x70, 0xfa, 0xcd, 0x99, 0xc1, 0xd8,
+	0x1e, 0x37, 0xcd, 0x44, 0x01, 0x5f, 0xe1, 0x94,
+	0x80, 0xa2, 0xa4, 0xd3, 0x35, 0x2a, 0x4f, 0xf5,
+	0x60, 0xc0, 0x64, 0x0f, 0xdb, 0xda
+};
+static const u8 enc_nonce049[] __initconst = {
+	0xdf, 0x87, 0x13, 0xe8, 0x7e, 0xc3, 0xdb, 0xcf,
+	0xad, 0x14, 0xd5, 0x3e
+};
+static const u8 enc_key049[] __initconst = {
+	0x56, 0x20, 0x74, 0x65, 0xb4, 0xe4, 0x8e, 0x6d,
+	0x04, 0x63, 0x0f, 0x4a, 0x42, 0xf3, 0x5c, 0xfc,
+	0x16, 0x3a, 0xb2, 0x89, 0xc2, 0x2a, 0x2b, 0x47,
+	0x84, 0xf6, 0xf9, 0x29, 0x03, 0x30, 0xbe, 0xe0
+};
+
+/* wycheproof - misc */
+static const u8 enc_input050[] __initconst = {
+	0xdc, 0x9e, 0x9e, 0xaf, 0x11, 0xe3, 0x14, 0x18,
+	0x2d, 0xf6, 0xa4, 0xeb, 0xa1, 0x7a, 0xec, 0x9c
+};
+static const u8 enc_output050[] __initconst = {
+	0x60, 0x5b, 0xbf, 0x90, 0xae, 0xb9, 0x74, 0xf6,
+	0x60, 0x2b, 0xc7, 0x78, 0x05, 0x6f, 0x0d, 0xca,
+	0x38, 0xea, 0x23, 0xd9, 0x90, 0x54, 0xb4, 0x6b,
+	0x42, 0xff, 0xe0, 0x04, 0x12, 0x9d, 0x22, 0x04
+};
+static const u8 enc_assoc050[] __initconst = {
+	0xba, 0x44, 0x6f, 0x6f, 0x9a, 0x0c, 0xed, 0x22,
+	0x45, 0x0f, 0xeb, 0x10, 0x73, 0x7d, 0x90, 0x07,
+	0xfd, 0x69, 0xab, 0xc1, 0x9b, 0x1d, 0x4d, 0x90,
+	0x49, 0xa5, 0x55, 0x1e, 0x86, 0xec, 0x2b, 0x37
+};
+static const u8 enc_nonce050[] __initconst = {
+	0x8d, 0xf4, 0xb1, 0x5a, 0x88, 0x8c, 0x33, 0x28,
+	0x6a, 0x7b, 0x76, 0x51
+};
+static const u8 enc_key050[] __initconst = {
+	0x39, 0x37, 0x98, 0x6a, 0xf8, 0x6d, 0xaf, 0xc1,
+	0xba, 0x0c, 0x46, 0x72, 0xd8, 0xab, 0xc4, 0x6c,
+	0x20, 0x70, 0x62, 0x68, 0x2d, 0x9c, 0x26, 0x4a,
+	0xb0, 0x6d, 0x6c, 0x58, 0x07, 0x20, 0x51, 0x30
+};
+
+/* wycheproof - misc */
+static const u8 enc_input051[] __initconst = {
+	0x81, 0xce, 0x84, 0xed, 0xe9, 0xb3, 0x58, 0x59,
+	0xcc, 0x8c, 0x49, 0xa8, 0xf6, 0xbe, 0x7d, 0xc6
+};
+static const u8 enc_output051[] __initconst = {
+	0x7b, 0x7c, 0xe0, 0xd8, 0x24, 0x80, 0x9a, 0x70,
+	0xde, 0x32, 0x56, 0x2c, 0xcf, 0x2c, 0x2b, 0xbd,
+	0x15, 0xd4, 0x4a, 0x00, 0xce, 0x0d, 0x19, 0xb4,
+	0x23, 0x1f, 0x92, 0x1e, 0x22, 0xbc, 0x0a, 0x43
+};
+static const u8 enc_assoc051[] __initconst = {
+	0xd4, 0x1a, 0x82, 0x8d, 0x5e, 0x71, 0x82, 0x92,
+	0x47, 0x02, 0x19, 0x05, 0x40, 0x2e, 0xa2, 0x57,
+	0xdc, 0xcb, 0xc3, 0xb8, 0x0f, 0xcd, 0x56, 0x75,
+	0x05, 0x6b, 0x68, 0xbb, 0x59, 0xe6, 0x2e, 0x88,
+	0x73
+};
+static const u8 enc_nonce051[] __initconst = {
+	0xbe, 0x40, 0xe5, 0xf1, 0xa1, 0x18, 0x17, 0xa0,
+	0xa8, 0xfa, 0x89, 0x49
+};
+static const u8 enc_key051[] __initconst = {
+	0x36, 0x37, 0x2a, 0xbc, 0xdb, 0x78, 0xe0, 0x27,
+	0x96, 0x46, 0xac, 0x3d, 0x17, 0x6b, 0x96, 0x74,
+	0xe9, 0x15, 0x4e, 0xec, 0xf0, 0xd5, 0x46, 0x9c,
+	0x65, 0x1e, 0xc7, 0xe1, 0x6b, 0x4c, 0x11, 0x99
+};
+
+/* wycheproof - misc */
+static const u8 enc_input052[] __initconst = {
+	0xa6, 0x67, 0x47, 0xc8, 0x9e, 0x85, 0x7a, 0xf3,
+	0xa1, 0x8e, 0x2c, 0x79, 0x50, 0x00, 0x87, 0xed
+};
+static const u8 enc_output052[] __initconst = {
+	0xca, 0x82, 0xbf, 0xf3, 0xe2, 0xf3, 0x10, 0xcc,
+	0xc9, 0x76, 0x67, 0x2c, 0x44, 0x15, 0xe6, 0x9b,
+	0x57, 0x63, 0x8c, 0x62, 0xa5, 0xd8, 0x5d, 0xed,
+	0x77, 0x4f, 0x91, 0x3c, 0x81, 0x3e, 0xa0, 0x32
+};
+static const u8 enc_assoc052[] __initconst = {
+	0x3f, 0x2d, 0xd4, 0x9b, 0xbf, 0x09, 0xd6, 0x9a,
+	0x78, 0xa3, 0xd8, 0x0e, 0xa2, 0x56, 0x66, 0x14,
+	0xfc, 0x37, 0x94, 0x74, 0x19, 0x6c, 0x1a, 0xae,
+	0x84, 0x58, 0x3d, 0xa7, 0x3d, 0x7f, 0xf8, 0x5c,
+	0x6f, 0x42, 0xca, 0x42, 0x05, 0x6a, 0x97, 0x92,
+	0xcc, 0x1b, 0x9f, 0xb3, 0xc7, 0xd2, 0x61
+};
+static const u8 enc_nonce052[] __initconst = {
+	0x84, 0xc8, 0x7d, 0xae, 0x4e, 0xee, 0x27, 0x73,
+	0x0e, 0xc3, 0x5d, 0x12
+};
+static const u8 enc_key052[] __initconst = {
+	0x9f, 0x14, 0x79, 0xed, 0x09, 0x7d, 0x7f, 0xe5,
+	0x29, 0xc1, 0x1f, 0x2f, 0x5a, 0xdd, 0x9a, 0xaf,
+	0xf4, 0xa1, 0xca, 0x0b, 0x68, 0x99, 0x7a, 0x2c,
+	0xb7, 0xf7, 0x97, 0x49, 0xbd, 0x90, 0xaa, 0xf4
+};
+
+/* wycheproof - misc */
+static const u8 enc_input053[] __initconst = {
+	0x25, 0x6d, 0x40, 0x88, 0x80, 0x94, 0x17, 0x83,
+	0x55, 0xd3, 0x04, 0x84, 0x64, 0x43, 0xfe, 0xe8,
+	0xdf, 0x99, 0x47, 0x03, 0x03, 0xfb, 0x3b, 0x7b,
+	0x80, 0xe0, 0x30, 0xbe, 0xeb, 0xd3, 0x29, 0xbe
+};
+static const u8 enc_output053[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0xe6, 0xd3, 0xd7, 0x32, 0x4a, 0x1c, 0xbb, 0xa7,
+	0x77, 0xbb, 0xb0, 0xec, 0xdd, 0xa3, 0x78, 0x07
+};
+static const u8 enc_assoc053[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static const u8 enc_nonce053[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key053[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input054[] __initconst = {
+	0x25, 0x6d, 0x40, 0x88, 0x80, 0x94, 0x17, 0x83,
+	0x55, 0xd3, 0x04, 0x84, 0x64, 0x43, 0xfe, 0xe8,
+	0xdf, 0x99, 0x47, 0x03, 0x03, 0xfb, 0x3b, 0x7b,
+	0x80, 0xe0, 0x30, 0xbe, 0xeb, 0xd3, 0x29, 0xbe,
+	0xe3, 0xbc, 0xdb, 0x5b, 0x1e, 0xde, 0xfc, 0xfe,
+	0x8b, 0xcd, 0xa1, 0xb6, 0xa1, 0x5c, 0x8c, 0x2b,
+	0x08, 0x69, 0xff, 0xd2, 0xec, 0x5e, 0x26, 0xe5,
+	0x53, 0xb7, 0xb2, 0x27, 0xfe, 0x87, 0xfd, 0xbd
+};
+static const u8 enc_output054[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x06, 0x2d, 0xe6, 0x79, 0x5f, 0x27, 0x4f, 0xd2,
+	0xa3, 0x05, 0xd7, 0x69, 0x80, 0xbc, 0x9c, 0xce
+};
+static const u8 enc_assoc054[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static const u8 enc_nonce054[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key054[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input055[] __initconst = {
+	0x25, 0x6d, 0x40, 0x88, 0x80, 0x94, 0x17, 0x83,
+	0x55, 0xd3, 0x04, 0x84, 0x64, 0x43, 0xfe, 0xe8,
+	0xdf, 0x99, 0x47, 0x03, 0x03, 0xfb, 0x3b, 0x7b,
+	0x80, 0xe0, 0x30, 0xbe, 0xeb, 0xd3, 0x29, 0xbe,
+	0xe3, 0xbc, 0xdb, 0x5b, 0x1e, 0xde, 0xfc, 0xfe,
+	0x8b, 0xcd, 0xa1, 0xb6, 0xa1, 0x5c, 0x8c, 0x2b,
+	0x08, 0x69, 0xff, 0xd2, 0xec, 0x5e, 0x26, 0xe5,
+	0x53, 0xb7, 0xb2, 0x27, 0xfe, 0x87, 0xfd, 0xbd,
+	0x7a, 0xda, 0x44, 0x42, 0x42, 0x69, 0xbf, 0xfa,
+	0x55, 0x27, 0xf2, 0x70, 0xac, 0xf6, 0x85, 0x02,
+	0xb7, 0x4c, 0x5a, 0xe2, 0xe6, 0x0c, 0x05, 0x80,
+	0x98, 0x1a, 0x49, 0x38, 0x45, 0x93, 0x92, 0xc4,
+	0x9b, 0xb2, 0xf2, 0x84, 0xb6, 0x46, 0xef, 0xc7,
+	0xf3, 0xf0, 0xb1, 0x36, 0x1d, 0xc3, 0x48, 0xed,
+	0x77, 0xd3, 0x0b, 0xc5, 0x76, 0x92, 0xed, 0x38,
+	0xfb, 0xac, 0x01, 0x88, 0x38, 0x04, 0x88, 0xc7
+};
+static const u8 enc_output055[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0xd8, 0xb4, 0x79, 0x02, 0xba, 0xae, 0xaf, 0xb3,
+	0x42, 0x03, 0x05, 0x15, 0x29, 0xaf, 0x28, 0x2e
+};
+static const u8 enc_assoc055[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static const u8 enc_nonce055[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key055[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input056[] __initconst = {
+	0xda, 0x92, 0xbf, 0x77, 0x7f, 0x6b, 0xe8, 0x7c,
+	0xaa, 0x2c, 0xfb, 0x7b, 0x9b, 0xbc, 0x01, 0x17,
+	0x20, 0x66, 0xb8, 0xfc, 0xfc, 0x04, 0xc4, 0x84,
+	0x7f, 0x1f, 0xcf, 0x41, 0x14, 0x2c, 0xd6, 0x41
+};
+static const u8 enc_output056[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xb3, 0x89, 0x1c, 0x84, 0x9c, 0xb5, 0x2c, 0x27,
+	0x74, 0x7e, 0xdf, 0xcf, 0x31, 0x21, 0x3b, 0xb6
+};
+static const u8 enc_assoc056[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce056[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key056[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input057[] __initconst = {
+	0xda, 0x92, 0xbf, 0x77, 0x7f, 0x6b, 0xe8, 0x7c,
+	0xaa, 0x2c, 0xfb, 0x7b, 0x9b, 0xbc, 0x01, 0x17,
+	0x20, 0x66, 0xb8, 0xfc, 0xfc, 0x04, 0xc4, 0x84,
+	0x7f, 0x1f, 0xcf, 0x41, 0x14, 0x2c, 0xd6, 0x41,
+	0x1c, 0x43, 0x24, 0xa4, 0xe1, 0x21, 0x03, 0x01,
+	0x74, 0x32, 0x5e, 0x49, 0x5e, 0xa3, 0x73, 0xd4,
+	0xf7, 0x96, 0x00, 0x2d, 0x13, 0xa1, 0xd9, 0x1a,
+	0xac, 0x48, 0x4d, 0xd8, 0x01, 0x78, 0x02, 0x42
+};
+static const u8 enc_output057[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xf0, 0xc1, 0x2d, 0x26, 0xef, 0x03, 0x02, 0x9b,
+	0x62, 0xc0, 0x08, 0xda, 0x27, 0xc5, 0xdc, 0x68
+};
+static const u8 enc_assoc057[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce057[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key057[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input058[] __initconst = {
+	0xda, 0x92, 0xbf, 0x77, 0x7f, 0x6b, 0xe8, 0x7c,
+	0xaa, 0x2c, 0xfb, 0x7b, 0x9b, 0xbc, 0x01, 0x17,
+	0x20, 0x66, 0xb8, 0xfc, 0xfc, 0x04, 0xc4, 0x84,
+	0x7f, 0x1f, 0xcf, 0x41, 0x14, 0x2c, 0xd6, 0x41,
+	0x1c, 0x43, 0x24, 0xa4, 0xe1, 0x21, 0x03, 0x01,
+	0x74, 0x32, 0x5e, 0x49, 0x5e, 0xa3, 0x73, 0xd4,
+	0xf7, 0x96, 0x00, 0x2d, 0x13, 0xa1, 0xd9, 0x1a,
+	0xac, 0x48, 0x4d, 0xd8, 0x01, 0x78, 0x02, 0x42,
+	0x85, 0x25, 0xbb, 0xbd, 0xbd, 0x96, 0x40, 0x05,
+	0xaa, 0xd8, 0x0d, 0x8f, 0x53, 0x09, 0x7a, 0xfd,
+	0x48, 0xb3, 0xa5, 0x1d, 0x19, 0xf3, 0xfa, 0x7f,
+	0x67, 0xe5, 0xb6, 0xc7, 0xba, 0x6c, 0x6d, 0x3b,
+	0x64, 0x4d, 0x0d, 0x7b, 0x49, 0xb9, 0x10, 0x38,
+	0x0c, 0x0f, 0x4e, 0xc9, 0xe2, 0x3c, 0xb7, 0x12,
+	0x88, 0x2c, 0xf4, 0x3a, 0x89, 0x6d, 0x12, 0xc7,
+	0x04, 0x53, 0xfe, 0x77, 0xc7, 0xfb, 0x77, 0x38
+};
+static const u8 enc_output058[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xee, 0x65, 0x78, 0x30, 0x01, 0xc2, 0x56, 0x91,
+	0xfa, 0x28, 0xd0, 0xf5, 0xf1, 0xc1, 0xd7, 0x62
+};
+static const u8 enc_assoc058[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce058[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key058[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input059[] __initconst = {
+	0x25, 0x6d, 0x40, 0x08, 0x80, 0x94, 0x17, 0x03,
+	0x55, 0xd3, 0x04, 0x04, 0x64, 0x43, 0xfe, 0x68,
+	0xdf, 0x99, 0x47, 0x83, 0x03, 0xfb, 0x3b, 0xfb,
+	0x80, 0xe0, 0x30, 0x3e, 0xeb, 0xd3, 0x29, 0x3e
+};
+static const u8 enc_output059[] __initconst = {
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x79, 0xba, 0x7a, 0x29, 0xf5, 0xa7, 0xbb, 0x75,
+	0x79, 0x7a, 0xf8, 0x7a, 0x61, 0x01, 0x29, 0xa4
+};
+static const u8 enc_assoc059[] __initconst = {
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80
+};
+static const u8 enc_nonce059[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key059[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input060[] __initconst = {
+	0x25, 0x6d, 0x40, 0x08, 0x80, 0x94, 0x17, 0x03,
+	0x55, 0xd3, 0x04, 0x04, 0x64, 0x43, 0xfe, 0x68,
+	0xdf, 0x99, 0x47, 0x83, 0x03, 0xfb, 0x3b, 0xfb,
+	0x80, 0xe0, 0x30, 0x3e, 0xeb, 0xd3, 0x29, 0x3e,
+	0xe3, 0xbc, 0xdb, 0xdb, 0x1e, 0xde, 0xfc, 0x7e,
+	0x8b, 0xcd, 0xa1, 0x36, 0xa1, 0x5c, 0x8c, 0xab,
+	0x08, 0x69, 0xff, 0x52, 0xec, 0x5e, 0x26, 0x65,
+	0x53, 0xb7, 0xb2, 0xa7, 0xfe, 0x87, 0xfd, 0x3d
+};
+static const u8 enc_output060[] __initconst = {
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x36, 0xb1, 0x74, 0x38, 0x19, 0xe1, 0xb9, 0xba,
+	0x15, 0x51, 0xe8, 0xed, 0x92, 0x2a, 0x95, 0x9a
+};
+static const u8 enc_assoc060[] __initconst = {
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80
+};
+static const u8 enc_nonce060[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key060[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input061[] __initconst = {
+	0x25, 0x6d, 0x40, 0x08, 0x80, 0x94, 0x17, 0x03,
+	0x55, 0xd3, 0x04, 0x04, 0x64, 0x43, 0xfe, 0x68,
+	0xdf, 0x99, 0x47, 0x83, 0x03, 0xfb, 0x3b, 0xfb,
+	0x80, 0xe0, 0x30, 0x3e, 0xeb, 0xd3, 0x29, 0x3e,
+	0xe3, 0xbc, 0xdb, 0xdb, 0x1e, 0xde, 0xfc, 0x7e,
+	0x8b, 0xcd, 0xa1, 0x36, 0xa1, 0x5c, 0x8c, 0xab,
+	0x08, 0x69, 0xff, 0x52, 0xec, 0x5e, 0x26, 0x65,
+	0x53, 0xb7, 0xb2, 0xa7, 0xfe, 0x87, 0xfd, 0x3d,
+	0x7a, 0xda, 0x44, 0xc2, 0x42, 0x69, 0xbf, 0x7a,
+	0x55, 0x27, 0xf2, 0xf0, 0xac, 0xf6, 0x85, 0x82,
+	0xb7, 0x4c, 0x5a, 0x62, 0xe6, 0x0c, 0x05, 0x00,
+	0x98, 0x1a, 0x49, 0xb8, 0x45, 0x93, 0x92, 0x44,
+	0x9b, 0xb2, 0xf2, 0x04, 0xb6, 0x46, 0xef, 0x47,
+	0xf3, 0xf0, 0xb1, 0xb6, 0x1d, 0xc3, 0x48, 0x6d,
+	0x77, 0xd3, 0x0b, 0x45, 0x76, 0x92, 0xed, 0xb8,
+	0xfb, 0xac, 0x01, 0x08, 0x38, 0x04, 0x88, 0x47
+};
+static const u8 enc_output061[] __initconst = {
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0xfe, 0xac, 0x49, 0x55, 0x55, 0x4e, 0x80, 0x6f,
+	0x3a, 0x19, 0x02, 0xe2, 0x44, 0x32, 0xc0, 0x8a
+};
+static const u8 enc_assoc061[] __initconst = {
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80
+};
+static const u8 enc_nonce061[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key061[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input062[] __initconst = {
+	0xda, 0x92, 0xbf, 0xf7, 0x7f, 0x6b, 0xe8, 0xfc,
+	0xaa, 0x2c, 0xfb, 0xfb, 0x9b, 0xbc, 0x01, 0x97,
+	0x20, 0x66, 0xb8, 0x7c, 0xfc, 0x04, 0xc4, 0x04,
+	0x7f, 0x1f, 0xcf, 0xc1, 0x14, 0x2c, 0xd6, 0xc1
+};
+static const u8 enc_output062[] __initconst = {
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0x20, 0xa3, 0x79, 0x8d, 0xf1, 0x29, 0x2c, 0x59,
+	0x72, 0xbf, 0x97, 0x41, 0xae, 0xc3, 0x8a, 0x19
+};
+static const u8 enc_assoc062[] __initconst = {
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f
+};
+static const u8 enc_nonce062[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key062[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input063[] __initconst = {
+	0xda, 0x92, 0xbf, 0xf7, 0x7f, 0x6b, 0xe8, 0xfc,
+	0xaa, 0x2c, 0xfb, 0xfb, 0x9b, 0xbc, 0x01, 0x97,
+	0x20, 0x66, 0xb8, 0x7c, 0xfc, 0x04, 0xc4, 0x04,
+	0x7f, 0x1f, 0xcf, 0xc1, 0x14, 0x2c, 0xd6, 0xc1,
+	0x1c, 0x43, 0x24, 0x24, 0xe1, 0x21, 0x03, 0x81,
+	0x74, 0x32, 0x5e, 0xc9, 0x5e, 0xa3, 0x73, 0x54,
+	0xf7, 0x96, 0x00, 0xad, 0x13, 0xa1, 0xd9, 0x9a,
+	0xac, 0x48, 0x4d, 0x58, 0x01, 0x78, 0x02, 0xc2
+};
+static const u8 enc_output063[] __initconst = {
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xc0, 0x3d, 0x9f, 0x67, 0x35, 0x4a, 0x97, 0xb2,
+	0xf0, 0x74, 0xf7, 0x55, 0x15, 0x57, 0xe4, 0x9c
+};
+static const u8 enc_assoc063[] __initconst = {
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f
+};
+static const u8 enc_nonce063[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key063[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input064[] __initconst = {
+	0xda, 0x92, 0xbf, 0xf7, 0x7f, 0x6b, 0xe8, 0xfc,
+	0xaa, 0x2c, 0xfb, 0xfb, 0x9b, 0xbc, 0x01, 0x97,
+	0x20, 0x66, 0xb8, 0x7c, 0xfc, 0x04, 0xc4, 0x04,
+	0x7f, 0x1f, 0xcf, 0xc1, 0x14, 0x2c, 0xd6, 0xc1,
+	0x1c, 0x43, 0x24, 0x24, 0xe1, 0x21, 0x03, 0x81,
+	0x74, 0x32, 0x5e, 0xc9, 0x5e, 0xa3, 0x73, 0x54,
+	0xf7, 0x96, 0x00, 0xad, 0x13, 0xa1, 0xd9, 0x9a,
+	0xac, 0x48, 0x4d, 0x58, 0x01, 0x78, 0x02, 0xc2,
+	0x85, 0x25, 0xbb, 0x3d, 0xbd, 0x96, 0x40, 0x85,
+	0xaa, 0xd8, 0x0d, 0x0f, 0x53, 0x09, 0x7a, 0x7d,
+	0x48, 0xb3, 0xa5, 0x9d, 0x19, 0xf3, 0xfa, 0xff,
+	0x67, 0xe5, 0xb6, 0x47, 0xba, 0x6c, 0x6d, 0xbb,
+	0x64, 0x4d, 0x0d, 0xfb, 0x49, 0xb9, 0x10, 0xb8,
+	0x0c, 0x0f, 0x4e, 0x49, 0xe2, 0x3c, 0xb7, 0x92,
+	0x88, 0x2c, 0xf4, 0xba, 0x89, 0x6d, 0x12, 0x47,
+	0x04, 0x53, 0xfe, 0xf7, 0xc7, 0xfb, 0x77, 0xb8
+};
+static const u8 enc_output064[] __initconst = {
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xc8, 0x6d, 0xa8, 0xdd, 0x65, 0x22, 0x86, 0xd5,
+	0x02, 0x13, 0xd3, 0x28, 0xd6, 0x3e, 0x40, 0x06
+};
+static const u8 enc_assoc064[] __initconst = {
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f
+};
+static const u8 enc_nonce064[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key064[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input065[] __initconst = {
+	0x5a, 0x92, 0xbf, 0x77, 0xff, 0x6b, 0xe8, 0x7c,
+	0x2a, 0x2c, 0xfb, 0x7b, 0x1b, 0xbc, 0x01, 0x17,
+	0xa0, 0x66, 0xb8, 0xfc, 0x7c, 0x04, 0xc4, 0x84,
+	0xff, 0x1f, 0xcf, 0x41, 0x94, 0x2c, 0xd6, 0x41
+};
+static const u8 enc_output065[] __initconst = {
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0xbe, 0xde, 0x90, 0x83, 0xce, 0xb3, 0x6d, 0xdf,
+	0xe5, 0xfa, 0x81, 0x1f, 0x95, 0x47, 0x1c, 0x67
+};
+static const u8 enc_assoc065[] __initconst = {
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce065[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key065[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input066[] __initconst = {
+	0x5a, 0x92, 0xbf, 0x77, 0xff, 0x6b, 0xe8, 0x7c,
+	0x2a, 0x2c, 0xfb, 0x7b, 0x1b, 0xbc, 0x01, 0x17,
+	0xa0, 0x66, 0xb8, 0xfc, 0x7c, 0x04, 0xc4, 0x84,
+	0xff, 0x1f, 0xcf, 0x41, 0x94, 0x2c, 0xd6, 0x41,
+	0x9c, 0x43, 0x24, 0xa4, 0x61, 0x21, 0x03, 0x01,
+	0xf4, 0x32, 0x5e, 0x49, 0xde, 0xa3, 0x73, 0xd4,
+	0x77, 0x96, 0x00, 0x2d, 0x93, 0xa1, 0xd9, 0x1a,
+	0x2c, 0x48, 0x4d, 0xd8, 0x81, 0x78, 0x02, 0x42
+};
+static const u8 enc_output066[] __initconst = {
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x30, 0x08, 0x74, 0xbb, 0x06, 0x92, 0xb6, 0x89,
+	0xde, 0xad, 0x9a, 0xe1, 0x5b, 0x06, 0x73, 0x90
+};
+static const u8 enc_assoc066[] __initconst = {
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce066[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key066[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input067[] __initconst = {
+	0x5a, 0x92, 0xbf, 0x77, 0xff, 0x6b, 0xe8, 0x7c,
+	0x2a, 0x2c, 0xfb, 0x7b, 0x1b, 0xbc, 0x01, 0x17,
+	0xa0, 0x66, 0xb8, 0xfc, 0x7c, 0x04, 0xc4, 0x84,
+	0xff, 0x1f, 0xcf, 0x41, 0x94, 0x2c, 0xd6, 0x41,
+	0x9c, 0x43, 0x24, 0xa4, 0x61, 0x21, 0x03, 0x01,
+	0xf4, 0x32, 0x5e, 0x49, 0xde, 0xa3, 0x73, 0xd4,
+	0x77, 0x96, 0x00, 0x2d, 0x93, 0xa1, 0xd9, 0x1a,
+	0x2c, 0x48, 0x4d, 0xd8, 0x81, 0x78, 0x02, 0x42,
+	0x05, 0x25, 0xbb, 0xbd, 0x3d, 0x96, 0x40, 0x05,
+	0x2a, 0xd8, 0x0d, 0x8f, 0xd3, 0x09, 0x7a, 0xfd,
+	0xc8, 0xb3, 0xa5, 0x1d, 0x99, 0xf3, 0xfa, 0x7f,
+	0xe7, 0xe5, 0xb6, 0xc7, 0x3a, 0x6c, 0x6d, 0x3b,
+	0xe4, 0x4d, 0x0d, 0x7b, 0xc9, 0xb9, 0x10, 0x38,
+	0x8c, 0x0f, 0x4e, 0xc9, 0x62, 0x3c, 0xb7, 0x12,
+	0x08, 0x2c, 0xf4, 0x3a, 0x09, 0x6d, 0x12, 0xc7,
+	0x84, 0x53, 0xfe, 0x77, 0x47, 0xfb, 0x77, 0x38
+};
+static const u8 enc_output067[] __initconst = {
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x99, 0xca, 0xd8, 0x5f, 0x45, 0xca, 0x40, 0x94,
+	0x2d, 0x0d, 0x4d, 0x5e, 0x95, 0x0a, 0xde, 0x22
+};
+static const u8 enc_assoc067[] __initconst = {
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce067[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key067[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input068[] __initconst = {
+	0x25, 0x6d, 0x40, 0x88, 0x7f, 0x6b, 0xe8, 0x7c,
+	0x55, 0xd3, 0x04, 0x84, 0x9b, 0xbc, 0x01, 0x17,
+	0xdf, 0x99, 0x47, 0x03, 0xfc, 0x04, 0xc4, 0x84,
+	0x80, 0xe0, 0x30, 0xbe, 0x14, 0x2c, 0xd6, 0x41
+};
+static const u8 enc_output068[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x8b, 0xbe, 0x14, 0x52, 0x72, 0xe7, 0xc2, 0xd9,
+	0xa1, 0x89, 0x1a, 0x3a, 0xb0, 0x98, 0x3d, 0x9d
+};
+static const u8 enc_assoc068[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce068[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key068[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input069[] __initconst = {
+	0x25, 0x6d, 0x40, 0x88, 0x7f, 0x6b, 0xe8, 0x7c,
+	0x55, 0xd3, 0x04, 0x84, 0x9b, 0xbc, 0x01, 0x17,
+	0xdf, 0x99, 0x47, 0x03, 0xfc, 0x04, 0xc4, 0x84,
+	0x80, 0xe0, 0x30, 0xbe, 0x14, 0x2c, 0xd6, 0x41,
+	0xe3, 0xbc, 0xdb, 0x5b, 0xe1, 0x21, 0x03, 0x01,
+	0x8b, 0xcd, 0xa1, 0xb6, 0x5e, 0xa3, 0x73, 0xd4,
+	0x08, 0x69, 0xff, 0xd2, 0x13, 0xa1, 0xd9, 0x1a,
+	0x53, 0xb7, 0xb2, 0x27, 0x01, 0x78, 0x02, 0x42
+};
+static const u8 enc_output069[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x3b, 0x41, 0x86, 0x19, 0x13, 0xa8, 0xf6, 0xde,
+	0x7f, 0x61, 0xe2, 0x25, 0x63, 0x1b, 0xc3, 0x82
+};
+static const u8 enc_assoc069[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce069[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key069[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input070[] __initconst = {
+	0x25, 0x6d, 0x40, 0x88, 0x7f, 0x6b, 0xe8, 0x7c,
+	0x55, 0xd3, 0x04, 0x84, 0x9b, 0xbc, 0x01, 0x17,
+	0xdf, 0x99, 0x47, 0x03, 0xfc, 0x04, 0xc4, 0x84,
+	0x80, 0xe0, 0x30, 0xbe, 0x14, 0x2c, 0xd6, 0x41,
+	0xe3, 0xbc, 0xdb, 0x5b, 0xe1, 0x21, 0x03, 0x01,
+	0x8b, 0xcd, 0xa1, 0xb6, 0x5e, 0xa3, 0x73, 0xd4,
+	0x08, 0x69, 0xff, 0xd2, 0x13, 0xa1, 0xd9, 0x1a,
+	0x53, 0xb7, 0xb2, 0x27, 0x01, 0x78, 0x02, 0x42,
+	0x7a, 0xda, 0x44, 0x42, 0xbd, 0x96, 0x40, 0x05,
+	0x55, 0x27, 0xf2, 0x70, 0x53, 0x09, 0x7a, 0xfd,
+	0xb7, 0x4c, 0x5a, 0xe2, 0x19, 0xf3, 0xfa, 0x7f,
+	0x98, 0x1a, 0x49, 0x38, 0xba, 0x6c, 0x6d, 0x3b,
+	0x9b, 0xb2, 0xf2, 0x84, 0x49, 0xb9, 0x10, 0x38,
+	0xf3, 0xf0, 0xb1, 0x36, 0xe2, 0x3c, 0xb7, 0x12,
+	0x77, 0xd3, 0x0b, 0xc5, 0x89, 0x6d, 0x12, 0xc7,
+	0xfb, 0xac, 0x01, 0x88, 0xc7, 0xfb, 0x77, 0x38
+};
+static const u8 enc_output070[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x84, 0x28, 0xbc, 0xf0, 0x23, 0xec, 0x6b, 0xf3,
+	0x1f, 0xd9, 0xef, 0xb2, 0x03, 0xff, 0x08, 0x71
+};
+static const u8 enc_assoc070[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce070[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key070[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input071[] __initconst = {
+	0xda, 0x92, 0xbf, 0x77, 0x80, 0x94, 0x17, 0x83,
+	0xaa, 0x2c, 0xfb, 0x7b, 0x64, 0x43, 0xfe, 0xe8,
+	0x20, 0x66, 0xb8, 0xfc, 0x03, 0xfb, 0x3b, 0x7b,
+	0x7f, 0x1f, 0xcf, 0x41, 0xeb, 0xd3, 0x29, 0xbe
+};
+static const u8 enc_output071[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0x13, 0x9f, 0xdf, 0x64, 0x74, 0xea, 0x24, 0xf5,
+	0x49, 0xb0, 0x75, 0x82, 0x5f, 0x2c, 0x76, 0x20
+};
+static const u8 enc_assoc071[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00
+};
+static const u8 enc_nonce071[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key071[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input072[] __initconst = {
+	0xda, 0x92, 0xbf, 0x77, 0x80, 0x94, 0x17, 0x83,
+	0xaa, 0x2c, 0xfb, 0x7b, 0x64, 0x43, 0xfe, 0xe8,
+	0x20, 0x66, 0xb8, 0xfc, 0x03, 0xfb, 0x3b, 0x7b,
+	0x7f, 0x1f, 0xcf, 0x41, 0xeb, 0xd3, 0x29, 0xbe,
+	0x1c, 0x43, 0x24, 0xa4, 0x1e, 0xde, 0xfc, 0xfe,
+	0x74, 0x32, 0x5e, 0x49, 0xa1, 0x5c, 0x8c, 0x2b,
+	0xf7, 0x96, 0x00, 0x2d, 0xec, 0x5e, 0x26, 0xe5,
+	0xac, 0x48, 0x4d, 0xd8, 0xfe, 0x87, 0xfd, 0xbd
+};
+static const u8 enc_output072[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xbb, 0xad, 0x8d, 0x86, 0x3b, 0x83, 0x5a, 0x8e,
+	0x86, 0x64, 0xfd, 0x1d, 0x45, 0x66, 0xb6, 0xb4
+};
+static const u8 enc_assoc072[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00
+};
+static const u8 enc_nonce072[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key072[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input073[] __initconst = {
+	0xda, 0x92, 0xbf, 0x77, 0x80, 0x94, 0x17, 0x83,
+	0xaa, 0x2c, 0xfb, 0x7b, 0x64, 0x43, 0xfe, 0xe8,
+	0x20, 0x66, 0xb8, 0xfc, 0x03, 0xfb, 0x3b, 0x7b,
+	0x7f, 0x1f, 0xcf, 0x41, 0xeb, 0xd3, 0x29, 0xbe,
+	0x1c, 0x43, 0x24, 0xa4, 0x1e, 0xde, 0xfc, 0xfe,
+	0x74, 0x32, 0x5e, 0x49, 0xa1, 0x5c, 0x8c, 0x2b,
+	0xf7, 0x96, 0x00, 0x2d, 0xec, 0x5e, 0x26, 0xe5,
+	0xac, 0x48, 0x4d, 0xd8, 0xfe, 0x87, 0xfd, 0xbd,
+	0x85, 0x25, 0xbb, 0xbd, 0x42, 0x69, 0xbf, 0xfa,
+	0xaa, 0xd8, 0x0d, 0x8f, 0xac, 0xf6, 0x85, 0x02,
+	0x48, 0xb3, 0xa5, 0x1d, 0xe6, 0x0c, 0x05, 0x80,
+	0x67, 0xe5, 0xb6, 0xc7, 0x45, 0x93, 0x92, 0xc4,
+	0x64, 0x4d, 0x0d, 0x7b, 0xb6, 0x46, 0xef, 0xc7,
+	0x0c, 0x0f, 0x4e, 0xc9, 0x1d, 0xc3, 0x48, 0xed,
+	0x88, 0x2c, 0xf4, 0x3a, 0x76, 0x92, 0xed, 0x38,
+	0x04, 0x53, 0xfe, 0x77, 0x38, 0x04, 0x88, 0xc7
+};
+static const u8 enc_output073[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0x42, 0xf2, 0x35, 0x42, 0x97, 0x84, 0x9a, 0x51,
+	0x1d, 0x53, 0xe5, 0x57, 0x17, 0x72, 0xf7, 0x1f
+};
+static const u8 enc_assoc073[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00
+};
+static const u8 enc_nonce073[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key073[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input074[] __initconst = {
+	0xd4, 0x50, 0x0b, 0xf0, 0x09, 0x49, 0x35, 0x51,
+	0xc3, 0x80, 0xad, 0xf5, 0x2c, 0x57, 0x3a, 0x69,
+	0xdf, 0x7e, 0x8b, 0x76, 0x24, 0x63, 0x33, 0x0f,
+	0xac, 0xc1, 0x6a, 0x57, 0x26, 0xbe, 0x71, 0x90,
+	0xc6, 0x3c, 0x5a, 0x1c, 0x92, 0x65, 0x84, 0xa0,
+	0x96, 0x75, 0x68, 0x28, 0xdc, 0xdc, 0x64, 0xac,
+	0xdf, 0x96, 0x3d, 0x93, 0x1b, 0xf1, 0xda, 0xe2,
+	0x38, 0xf3, 0xf1, 0x57, 0x22, 0x4a, 0xc4, 0xb5,
+	0x42, 0xd7, 0x85, 0xb0, 0xdd, 0x84, 0xdb, 0x6b,
+	0xe3, 0xbc, 0x5a, 0x36, 0x63, 0xe8, 0x41, 0x49,
+	0xff, 0xbe, 0xd0, 0x9e, 0x54, 0xf7, 0x8f, 0x16,
+	0xa8, 0x22, 0x3b, 0x24, 0xcb, 0x01, 0x9f, 0x58,
+	0xb2, 0x1b, 0x0e, 0x55, 0x1e, 0x7a, 0xa0, 0x73,
+	0x27, 0x62, 0x95, 0x51, 0x37, 0x6c, 0xcb, 0xc3,
+	0x93, 0x76, 0x71, 0xa0, 0x62, 0x9b, 0xd9, 0x5c,
+	0x99, 0x15, 0xc7, 0x85, 0x55, 0x77, 0x1e, 0x7a
+};
+static const u8 enc_output074[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x0b, 0x30, 0x0d, 0x8d, 0xa5, 0x6c, 0x21, 0x85,
+	0x75, 0x52, 0x79, 0x55, 0x3c, 0x4c, 0x82, 0xca
+};
+static const u8 enc_assoc074[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce074[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x00, 0x02, 0x50, 0x6e
+};
+static const u8 enc_key074[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input075[] __initconst = {
+	0x7d, 0xe8, 0x7f, 0x67, 0x29, 0x94, 0x52, 0x75,
+	0xd0, 0x65, 0x5d, 0xa4, 0xc7, 0xfd, 0xe4, 0x56,
+	0x9e, 0x16, 0xf1, 0x11, 0xb5, 0xeb, 0x26, 0xc2,
+	0x2d, 0x85, 0x9e, 0x3f, 0xf8, 0x22, 0xec, 0xed,
+	0x3a, 0x6d, 0xd9, 0xa6, 0x0f, 0x22, 0x95, 0x7f,
+	0x7b, 0x7c, 0x85, 0x7e, 0x88, 0x22, 0xeb, 0x9f,
+	0xe0, 0xb8, 0xd7, 0x02, 0x21, 0x41, 0xf2, 0xd0,
+	0xb4, 0x8f, 0x4b, 0x56, 0x12, 0xd3, 0x22, 0xa8,
+	0x8d, 0xd0, 0xfe, 0x0b, 0x4d, 0x91, 0x79, 0x32,
+	0x4f, 0x7c, 0x6c, 0x9e, 0x99, 0x0e, 0xfb, 0xd8,
+	0x0e, 0x5e, 0xd6, 0x77, 0x58, 0x26, 0x49, 0x8b,
+	0x1e, 0xfe, 0x0f, 0x71, 0xa0, 0xf3, 0xec, 0x5b,
+	0x29, 0xcb, 0x28, 0xc2, 0x54, 0x0a, 0x7d, 0xcd,
+	0x51, 0xb7, 0xda, 0xae, 0xe0, 0xff, 0x4a, 0x7f,
+	0x3a, 0xc1, 0xee, 0x54, 0xc2, 0x9e, 0xe4, 0xc1,
+	0x70, 0xde, 0x40, 0x8f, 0x66, 0x69, 0x21, 0x94
+};
+static const u8 enc_output075[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xc5, 0x78, 0xe2, 0xaa, 0x44, 0xd3, 0x09, 0xb7,
+	0xb6, 0xa5, 0x19, 0x3b, 0xdc, 0x61, 0x18, 0xf5
+};
+static const u8 enc_assoc075[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce075[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x00, 0x03, 0x18, 0xa5
+};
+static const u8 enc_key075[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input076[] __initconst = {
+	0x1b, 0x99, 0x6f, 0x9a, 0x3c, 0xcc, 0x67, 0x85,
+	0xde, 0x22, 0xff, 0x5b, 0x8a, 0xdd, 0x95, 0x02,
+	0xce, 0x03, 0xa0, 0xfa, 0xf5, 0x99, 0x2a, 0x09,
+	0x52, 0x2c, 0xdd, 0x12, 0x06, 0xd2, 0x20, 0xb8,
+	0xf8, 0xbd, 0x07, 0xd1, 0xf1, 0xf5, 0xa1, 0xbd,
+	0x9a, 0x71, 0xd1, 0x1c, 0x7f, 0x57, 0x9b, 0x85,
+	0x58, 0x18, 0xc0, 0x8d, 0x4d, 0xe0, 0x36, 0x39,
+	0x31, 0x83, 0xb7, 0xf5, 0x90, 0xb3, 0x35, 0xae,
+	0xd8, 0xde, 0x5b, 0x57, 0xb1, 0x3c, 0x5f, 0xed,
+	0xe2, 0x44, 0x1c, 0x3e, 0x18, 0x4a, 0xa9, 0xd4,
+	0x6e, 0x61, 0x59, 0x85, 0x06, 0xb3, 0xe1, 0x1c,
+	0x43, 0xc6, 0x2c, 0xbc, 0xac, 0xec, 0xed, 0x33,
+	0x19, 0x08, 0x75, 0xb0, 0x12, 0x21, 0x8b, 0x19,
+	0x30, 0xfb, 0x7c, 0x38, 0xec, 0x45, 0xac, 0x11,
+	0xc3, 0x53, 0xd0, 0xcf, 0x93, 0x8d, 0xcc, 0xb9,
+	0xef, 0xad, 0x8f, 0xed, 0xbe, 0x46, 0xda, 0xa5
+};
+static const u8 enc_output076[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x4b, 0x0b, 0xda, 0x8a, 0xd0, 0x43, 0x83, 0x0d,
+	0x83, 0x19, 0xab, 0x82, 0xc5, 0x0c, 0x76, 0x63
+};
+static const u8 enc_assoc076[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce076[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xb4, 0xf0
+};
+static const u8 enc_key076[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input077[] __initconst = {
+	0x86, 0xcb, 0xac, 0xae, 0x4d, 0x3f, 0x74, 0xae,
+	0x01, 0x21, 0x3e, 0x05, 0x51, 0xcc, 0x15, 0x16,
+	0x0e, 0xa1, 0xbe, 0x84, 0x08, 0xe3, 0xd5, 0xd7,
+	0x4f, 0x01, 0x46, 0x49, 0x95, 0xa6, 0x9e, 0x61,
+	0x76, 0xcb, 0x9e, 0x02, 0xb2, 0x24, 0x7e, 0xd2,
+	0x99, 0x89, 0x2f, 0x91, 0x82, 0xa4, 0x5c, 0xaf,
+	0x4c, 0x69, 0x40, 0x56, 0x11, 0x76, 0x6e, 0xdf,
+	0xaf, 0xdc, 0x28, 0x55, 0x19, 0xea, 0x30, 0x48,
+	0x0c, 0x44, 0xf0, 0x5e, 0x78, 0x1e, 0xac, 0xf8,
+	0xfc, 0xec, 0xc7, 0x09, 0x0a, 0xbb, 0x28, 0xfa,
+	0x5f, 0xd5, 0x85, 0xac, 0x8c, 0xda, 0x7e, 0x87,
+	0x72, 0xe5, 0x94, 0xe4, 0xce, 0x6c, 0x88, 0x32,
+	0x81, 0x93, 0x2e, 0x0f, 0x89, 0xf8, 0x77, 0xa1,
+	0xf0, 0x4d, 0x9c, 0x32, 0xb0, 0x6c, 0xf9, 0x0b,
+	0x0e, 0x76, 0x2b, 0x43, 0x0c, 0x4d, 0x51, 0x7c,
+	0x97, 0x10, 0x70, 0x68, 0xf4, 0x98, 0xef, 0x7f
+};
+static const u8 enc_output077[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x4b, 0xc9, 0x8f, 0x72, 0xc4, 0x94, 0xc2, 0xa4,
+	0x3c, 0x2b, 0x15, 0xa1, 0x04, 0x3f, 0x1c, 0xfa
+};
+static const u8 enc_assoc077[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce077[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xfb, 0x66
+};
+static const u8 enc_key077[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input078[] __initconst = {
+	0xfa, 0xb1, 0xcd, 0xdf, 0x4f, 0xe1, 0x98, 0xef,
+	0x63, 0xad, 0xd8, 0x81, 0xd6, 0xea, 0xd6, 0xc5,
+	0x76, 0x37, 0xbb, 0xe9, 0x20, 0x18, 0xca, 0x7c,
+	0x0b, 0x96, 0xfb, 0xa0, 0x87, 0x1e, 0x93, 0x2d,
+	0xb1, 0xfb, 0xf9, 0x07, 0x61, 0xbe, 0x25, 0xdf,
+	0x8d, 0xfa, 0xf9, 0x31, 0xce, 0x57, 0x57, 0xe6,
+	0x17, 0xb3, 0xd7, 0xa9, 0xf0, 0xbf, 0x0f, 0xfe,
+	0x5d, 0x59, 0x1a, 0x33, 0xc1, 0x43, 0xb8, 0xf5,
+	0x3f, 0xd0, 0xb5, 0xa1, 0x96, 0x09, 0xfd, 0x62,
+	0xe5, 0xc2, 0x51, 0xa4, 0x28, 0x1a, 0x20, 0x0c,
+	0xfd, 0xc3, 0x4f, 0x28, 0x17, 0x10, 0x40, 0x6f,
+	0x4e, 0x37, 0x62, 0x54, 0x46, 0xff, 0x6e, 0xf2,
+	0x24, 0x91, 0x3d, 0xeb, 0x0d, 0x89, 0xaf, 0x33,
+	0x71, 0x28, 0xe3, 0xd1, 0x55, 0xd1, 0x6d, 0x3e,
+	0xc3, 0x24, 0x60, 0x41, 0x43, 0x21, 0x43, 0xe9,
+	0xab, 0x3a, 0x6d, 0x2c, 0xcc, 0x2f, 0x4d, 0x62
+};
+static const u8 enc_output078[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xf7, 0xe9, 0xe1, 0x51, 0xb0, 0x25, 0x33, 0xc7,
+	0x46, 0x58, 0xbf, 0xc7, 0x73, 0x7c, 0x68, 0x0d
+};
+static const u8 enc_assoc078[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce078[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xbb, 0x90
+};
+static const u8 enc_key078[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input079[] __initconst = {
+	0x22, 0x72, 0x02, 0xbe, 0x7f, 0x35, 0x15, 0xe9,
+	0xd1, 0xc0, 0x2e, 0xea, 0x2f, 0x19, 0x50, 0xb6,
+	0x48, 0x1b, 0x04, 0x8a, 0x4c, 0x91, 0x50, 0x6c,
+	0xb4, 0x0d, 0x50, 0x4e, 0x6c, 0x94, 0x9f, 0x82,
+	0xd1, 0x97, 0xc2, 0x5a, 0xd1, 0x7d, 0xc7, 0x21,
+	0x65, 0x11, 0x25, 0x78, 0x2a, 0xc7, 0xa7, 0x12,
+	0x47, 0xfe, 0xae, 0xf3, 0x2f, 0x1f, 0x25, 0x0c,
+	0xe4, 0xbb, 0x8f, 0x79, 0xac, 0xaa, 0x17, 0x9d,
+	0x45, 0xa7, 0xb0, 0x54, 0x5f, 0x09, 0x24, 0x32,
+	0x5e, 0xfa, 0x87, 0xd5, 0xe4, 0x41, 0xd2, 0x84,
+	0x78, 0xc6, 0x1f, 0x22, 0x23, 0xee, 0x67, 0xc3,
+	0xb4, 0x1f, 0x43, 0x94, 0x53, 0x5e, 0x2a, 0x24,
+	0x36, 0x9a, 0x2e, 0x16, 0x61, 0x3c, 0x45, 0x94,
+	0x90, 0xc1, 0x4f, 0xb1, 0xd7, 0x55, 0xfe, 0x53,
+	0xfb, 0xe1, 0xee, 0x45, 0xb1, 0xb2, 0x1f, 0x71,
+	0x62, 0xe2, 0xfc, 0xaa, 0x74, 0x2a, 0xbe, 0xfd
+};
+static const u8 enc_output079[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x79, 0x5b, 0xcf, 0xf6, 0x47, 0xc5, 0x53, 0xc2,
+	0xe4, 0xeb, 0x6e, 0x0e, 0xaf, 0xd9, 0xe0, 0x4e
+};
+static const u8 enc_assoc079[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce079[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x48, 0x4a
+};
+static const u8 enc_key079[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input080[] __initconst = {
+	0xfa, 0xe5, 0x83, 0x45, 0xc1, 0x6c, 0xb0, 0xf5,
+	0xcc, 0x53, 0x7f, 0x2b, 0x1b, 0x34, 0x69, 0xc9,
+	0x69, 0x46, 0x3b, 0x3e, 0xa7, 0x1b, 0xcf, 0x6b,
+	0x98, 0xd6, 0x69, 0xa8, 0xe6, 0x0e, 0x04, 0xfc,
+	0x08, 0xd5, 0xfd, 0x06, 0x9c, 0x36, 0x26, 0x38,
+	0xe3, 0x40, 0x0e, 0xf4, 0xcb, 0x24, 0x2e, 0x27,
+	0xe2, 0x24, 0x5e, 0x68, 0xcb, 0x9e, 0xc5, 0x83,
+	0xda, 0x53, 0x40, 0xb1, 0x2e, 0xdf, 0x42, 0x3b,
+	0x73, 0x26, 0xad, 0x20, 0xfe, 0xeb, 0x57, 0xda,
+	0xca, 0x2e, 0x04, 0x67, 0xa3, 0x28, 0x99, 0xb4,
+	0x2d, 0xf8, 0xe5, 0x6d, 0x84, 0xe0, 0x06, 0xbc,
+	0x8a, 0x7a, 0xcc, 0x73, 0x1e, 0x7c, 0x1f, 0x6b,
+	0xec, 0xb5, 0x71, 0x9f, 0x70, 0x77, 0xf0, 0xd4,
+	0xf4, 0xc6, 0x1a, 0xb1, 0x1e, 0xba, 0xc1, 0x00,
+	0x18, 0x01, 0xce, 0x33, 0xc4, 0xe4, 0xa7, 0x7d,
+	0x83, 0x1d, 0x3c, 0xe3, 0x4e, 0x84, 0x10, 0xe1
+};
+static const u8 enc_output080[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x19, 0x46, 0xd6, 0x53, 0x96, 0x0f, 0x94, 0x7a,
+	0x74, 0xd3, 0xe8, 0x09, 0x3c, 0xf4, 0x85, 0x02
+};
+static const u8 enc_assoc080[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce080[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x2f, 0x40
+};
+static const u8 enc_key080[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input081[] __initconst = {
+	0xeb, 0xb2, 0x16, 0xdd, 0xd7, 0xca, 0x70, 0x92,
+	0x15, 0xf5, 0x03, 0xdf, 0x9c, 0xe6, 0x3c, 0x5c,
+	0xd2, 0x19, 0x4e, 0x7d, 0x90, 0x99, 0xe8, 0xa9,
+	0x0b, 0x2a, 0xfa, 0xad, 0x5e, 0xba, 0x35, 0x06,
+	0x99, 0x25, 0xa6, 0x03, 0xfd, 0xbc, 0x34, 0x1a,
+	0xae, 0xd4, 0x15, 0x05, 0xb1, 0x09, 0x41, 0xfa,
+	0x38, 0x56, 0xa7, 0xe2, 0x47, 0xb1, 0x04, 0x07,
+	0x09, 0x74, 0x6c, 0xfc, 0x20, 0x96, 0xca, 0xa6,
+	0x31, 0xb2, 0xff, 0xf4, 0x1c, 0x25, 0x05, 0x06,
+	0xd8, 0x89, 0xc1, 0xc9, 0x06, 0x71, 0xad, 0xe8,
+	0x53, 0xee, 0x63, 0x94, 0xc1, 0x91, 0x92, 0xa5,
+	0xcf, 0x37, 0x10, 0xd1, 0x07, 0x30, 0x99, 0xe5,
+	0xbc, 0x94, 0x65, 0x82, 0xfc, 0x0f, 0xab, 0x9f,
+	0x54, 0x3c, 0x71, 0x6a, 0xe2, 0x48, 0x6a, 0x86,
+	0x83, 0xfd, 0xca, 0x39, 0xd2, 0xe1, 0x4f, 0x23,
+	0xd0, 0x0a, 0x58, 0x26, 0x64, 0xf4, 0xec, 0xb1
+};
+static const u8 enc_output081[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x36, 0xc3, 0x00, 0x29, 0x85, 0xdd, 0x21, 0xba,
+	0xf8, 0x95, 0xd6, 0x33, 0x57, 0x3f, 0x12, 0xc0
+};
+static const u8 enc_assoc081[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce081[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0xe2, 0x93, 0x35
+};
+static const u8 enc_key081[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input082[] __initconst = {
+	0x40, 0x8a, 0xe6, 0xef, 0x1c, 0x7e, 0xf0, 0xfb,
+	0x2c, 0x2d, 0x61, 0x08, 0x16, 0xfc, 0x78, 0x49,
+	0xef, 0xa5, 0x8f, 0x78, 0x27, 0x3f, 0x5f, 0x16,
+	0x6e, 0xa6, 0x5f, 0x81, 0xb5, 0x75, 0x74, 0x7d,
+	0x03, 0x5b, 0x30, 0x40, 0xfe, 0xde, 0x1e, 0xb9,
+	0x45, 0x97, 0x88, 0x66, 0x97, 0x88, 0x40, 0x8e,
+	0x00, 0x41, 0x3b, 0x3e, 0x37, 0x6d, 0x15, 0x2d,
+	0x20, 0x4a, 0xa2, 0xb7, 0xa8, 0x35, 0x58, 0xfc,
+	0xd4, 0x8a, 0x0e, 0xf7, 0xa2, 0x6b, 0x1c, 0xd6,
+	0xd3, 0x5d, 0x23, 0xb3, 0xf5, 0xdf, 0xe0, 0xca,
+	0x77, 0xa4, 0xce, 0x32, 0xb9, 0x4a, 0xbf, 0x83,
+	0xda, 0x2a, 0xef, 0xca, 0xf0, 0x68, 0x38, 0x08,
+	0x79, 0xe8, 0x9f, 0xb0, 0xa3, 0x82, 0x95, 0x95,
+	0xcf, 0x44, 0xc3, 0x85, 0x2a, 0xe2, 0xcc, 0x66,
+	0x2b, 0x68, 0x9f, 0x93, 0x55, 0xd9, 0xc1, 0x83,
+	0x80, 0x1f, 0x6a, 0xcc, 0x31, 0x3f, 0x89, 0x07
+};
+static const u8 enc_output082[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x65, 0x14, 0x51, 0x8e, 0x0a, 0x26, 0x41, 0x42,
+	0xe0, 0xb7, 0x35, 0x1f, 0x96, 0x7f, 0xc2, 0xae
+};
+static const u8 enc_assoc082[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce082[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xf7, 0xd5
+};
+static const u8 enc_key082[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input083[] __initconst = {
+	0x0a, 0x0a, 0x24, 0x49, 0x9b, 0xca, 0xde, 0x58,
+	0xcf, 0x15, 0x76, 0xc3, 0x12, 0xac, 0xa9, 0x84,
+	0x71, 0x8c, 0xb4, 0xcc, 0x7e, 0x01, 0x53, 0xf5,
+	0xa9, 0x01, 0x58, 0x10, 0x85, 0x96, 0x44, 0xdf,
+	0xc0, 0x21, 0x17, 0x4e, 0x0b, 0x06, 0x0a, 0x39,
+	0x74, 0x48, 0xde, 0x8b, 0x48, 0x4a, 0x86, 0x03,
+	0xbe, 0x68, 0x0a, 0x69, 0x34, 0xc0, 0x90, 0x6f,
+	0x30, 0xdd, 0x17, 0xea, 0xe2, 0xd4, 0xc5, 0xfa,
+	0xa7, 0x77, 0xf8, 0xca, 0x53, 0x37, 0x0e, 0x08,
+	0x33, 0x1b, 0x88, 0xc3, 0x42, 0xba, 0xc9, 0x59,
+	0x78, 0x7b, 0xbb, 0x33, 0x93, 0x0e, 0x3b, 0x56,
+	0xbe, 0x86, 0xda, 0x7f, 0x2a, 0x6e, 0xb1, 0xf9,
+	0x40, 0x89, 0xd1, 0xd1, 0x81, 0x07, 0x4d, 0x43,
+	0x02, 0xf8, 0xe0, 0x55, 0x2d, 0x0d, 0xe1, 0xfa,
+	0xb3, 0x06, 0xa2, 0x1b, 0x42, 0xd4, 0xc3, 0xba,
+	0x6e, 0x6f, 0x0c, 0xbc, 0xc8, 0x1e, 0x87, 0x7a
+};
+static const u8 enc_output083[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x4c, 0x19, 0x4d, 0xa6, 0xa9, 0x9f, 0xd6, 0x5b,
+	0x40, 0xe9, 0xca, 0xd7, 0x98, 0xf4, 0x4b, 0x19
+};
+static const u8 enc_assoc083[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce083[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xfc, 0xe4
+};
+static const u8 enc_key083[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input084[] __initconst = {
+	0x4a, 0x0a, 0xaf, 0xf8, 0x49, 0x47, 0x29, 0x18,
+	0x86, 0x91, 0x70, 0x13, 0x40, 0xf3, 0xce, 0x2b,
+	0x8a, 0x78, 0xee, 0xd3, 0xa0, 0xf0, 0x65, 0x99,
+	0x4b, 0x72, 0x48, 0x4e, 0x79, 0x91, 0xd2, 0x5c,
+	0x29, 0xaa, 0x07, 0x5e, 0xb1, 0xfc, 0x16, 0xde,
+	0x93, 0xfe, 0x06, 0x90, 0x58, 0x11, 0x2a, 0xb2,
+	0x84, 0xa3, 0xed, 0x18, 0x78, 0x03, 0x26, 0xd1,
+	0x25, 0x8a, 0x47, 0x22, 0x2f, 0xa6, 0x33, 0xd8,
+	0xb2, 0x9f, 0x3b, 0xd9, 0x15, 0x0b, 0x23, 0x9b,
+	0x15, 0x46, 0xc2, 0xbb, 0x9b, 0x9f, 0x41, 0x0f,
+	0xeb, 0xea, 0xd3, 0x96, 0x00, 0x0e, 0xe4, 0x77,
+	0x70, 0x15, 0x32, 0xc3, 0xd0, 0xf5, 0xfb, 0xf8,
+	0x95, 0xd2, 0x80, 0x19, 0x6d, 0x2f, 0x73, 0x7c,
+	0x5e, 0x9f, 0xec, 0x50, 0xd9, 0x2b, 0xb0, 0xdf,
+	0x5d, 0x7e, 0x51, 0x3b, 0xe5, 0xb8, 0xea, 0x97,
+	0x13, 0x10, 0xd5, 0xbf, 0x16, 0xba, 0x7a, 0xee
+};
+static const u8 enc_output084[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xc8, 0xae, 0x77, 0x88, 0xcd, 0x28, 0x74, 0xab,
+	0xc1, 0x38, 0x54, 0x1e, 0x11, 0xfd, 0x05, 0x87
+};
+static const u8 enc_assoc084[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce084[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0x84, 0x86, 0xa8
+};
+static const u8 enc_key084[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input085[] __initconst = {
+	0xff, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0x78, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x9f, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0x9c, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0x47, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0xd4, 0xd2, 0x06, 0x61, 0x6f, 0x92, 0x93, 0xf6,
+	0x5b, 0x45, 0xdb, 0xbc, 0x74, 0xe7, 0xc2, 0xed,
+	0xfb, 0xcb, 0xbf, 0x1c, 0xfb, 0x67, 0x9b, 0xb7,
+	0x39, 0xa5, 0x86, 0x2d, 0xe2, 0xbc, 0xb9, 0x37,
+	0xf7, 0x4d, 0x5b, 0xf8, 0x67, 0x1c, 0x5a, 0x8a,
+	0x50, 0x92, 0xf6, 0x1d, 0x54, 0xc9, 0xaa, 0x5b
+};
+static const u8 enc_output085[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x93, 0x3a, 0x51, 0x63, 0xc7, 0xf6, 0x23, 0x68,
+	0x32, 0x7b, 0x3f, 0xbc, 0x10, 0x36, 0xc9, 0x43
+};
+static const u8 enc_assoc085[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce085[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key085[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - special case tag */
+static const u8 enc_input086[] __initconst = {
+	0x9a, 0x49, 0xc4, 0x0f, 0x8b, 0x48, 0xd7, 0xc6,
+	0x6d, 0x1d, 0xb4, 0xe5, 0x3f, 0x20, 0xf2, 0xdd,
+	0x4a, 0xaa, 0x24, 0x1d, 0xda, 0xb2, 0x6b, 0x5b,
+	0xc0, 0xe2, 0x18, 0xb7, 0x2c, 0x33, 0x90, 0xf2,
+	0xdf, 0x3e, 0xbd, 0x01, 0x76, 0x70, 0x44, 0x19,
+	0x97, 0x2b, 0xcd, 0xbc, 0x6b, 0xbc, 0xb3, 0xe4,
+	0xe7, 0x4a, 0x71, 0x52, 0x8e, 0xf5, 0x12, 0x63,
+	0xce, 0x24, 0xe0, 0xd5, 0x75, 0xe0, 0xe4, 0x4d
+};
+static const u8 enc_output086[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
+};
+static const u8 enc_assoc086[] __initconst = {
+	0x85, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xa6, 0x90, 0x2f, 0xcb, 0xc8, 0x83, 0xbb, 0xc1,
+	0x80, 0xb2, 0x56, 0xae, 0x34, 0xad, 0x7f, 0x00
+};
+static const u8 enc_nonce086[] __initconst = {
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b
+};
+static const u8 enc_key086[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - special case tag */
+static const u8 enc_input087[] __initconst = {
+	0x9a, 0x49, 0xc4, 0x0f, 0x8b, 0x48, 0xd7, 0xc6,
+	0x6d, 0x1d, 0xb4, 0xe5, 0x3f, 0x20, 0xf2, 0xdd,
+	0x4a, 0xaa, 0x24, 0x1d, 0xda, 0xb2, 0x6b, 0x5b,
+	0xc0, 0xe2, 0x18, 0xb7, 0x2c, 0x33, 0x90, 0xf2,
+	0xdf, 0x3e, 0xbd, 0x01, 0x76, 0x70, 0x44, 0x19,
+	0x97, 0x2b, 0xcd, 0xbc, 0x6b, 0xbc, 0xb3, 0xe4,
+	0xe7, 0x4a, 0x71, 0x52, 0x8e, 0xf5, 0x12, 0x63,
+	0xce, 0x24, 0xe0, 0xd5, 0x75, 0xe0, 0xe4, 0x4d
+};
+static const u8 enc_output087[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static const u8 enc_assoc087[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x24, 0x7e, 0x50, 0x64, 0x2a, 0x1c, 0x0a, 0x2f,
+	0x8f, 0x77, 0x21, 0x96, 0x09, 0xdb, 0xa9, 0x58
+};
+static const u8 enc_nonce087[] __initconst = {
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b
+};
+static const u8 enc_key087[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - special case tag */
+static const u8 enc_input088[] __initconst = {
+	0x9a, 0x49, 0xc4, 0x0f, 0x8b, 0x48, 0xd7, 0xc6,
+	0x6d, 0x1d, 0xb4, 0xe5, 0x3f, 0x20, 0xf2, 0xdd,
+	0x4a, 0xaa, 0x24, 0x1d, 0xda, 0xb2, 0x6b, 0x5b,
+	0xc0, 0xe2, 0x18, 0xb7, 0x2c, 0x33, 0x90, 0xf2,
+	0xdf, 0x3e, 0xbd, 0x01, 0x76, 0x70, 0x44, 0x19,
+	0x97, 0x2b, 0xcd, 0xbc, 0x6b, 0xbc, 0xb3, 0xe4,
+	0xe7, 0x4a, 0x71, 0x52, 0x8e, 0xf5, 0x12, 0x63,
+	0xce, 0x24, 0xe0, 0xd5, 0x75, 0xe0, 0xe4, 0x4d
+};
+static const u8 enc_output088[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_assoc088[] __initconst = {
+	0x7c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xd9, 0xe7, 0x2c, 0x06, 0x4a, 0xc8, 0x96, 0x1f,
+	0x3f, 0xa5, 0x85, 0xe0, 0xe2, 0xab, 0xd6, 0x00
+};
+static const u8 enc_nonce088[] __initconst = {
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b
+};
+static const u8 enc_key088[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - special case tag */
+static const u8 enc_input089[] __initconst = {
+	0x9a, 0x49, 0xc4, 0x0f, 0x8b, 0x48, 0xd7, 0xc6,
+	0x6d, 0x1d, 0xb4, 0xe5, 0x3f, 0x20, 0xf2, 0xdd,
+	0x4a, 0xaa, 0x24, 0x1d, 0xda, 0xb2, 0x6b, 0x5b,
+	0xc0, 0xe2, 0x18, 0xb7, 0x2c, 0x33, 0x90, 0xf2,
+	0xdf, 0x3e, 0xbd, 0x01, 0x76, 0x70, 0x44, 0x19,
+	0x97, 0x2b, 0xcd, 0xbc, 0x6b, 0xbc, 0xb3, 0xe4,
+	0xe7, 0x4a, 0x71, 0x52, 0x8e, 0xf5, 0x12, 0x63,
+	0xce, 0x24, 0xe0, 0xd5, 0x75, 0xe0, 0xe4, 0x4d
+};
+static const u8 enc_output089[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80
+};
+static const u8 enc_assoc089[] __initconst = {
+	0x65, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x95, 0xaf, 0x0f, 0x4d, 0x0b, 0x68, 0x6e, 0xae,
+	0xcc, 0xca, 0x43, 0x07, 0xd5, 0x96, 0xf5, 0x02
+};
+static const u8 enc_nonce089[] __initconst = {
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b
+};
+static const u8 enc_key089[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - special case tag */
+static const u8 enc_input090[] __initconst = {
+	0x9a, 0x49, 0xc4, 0x0f, 0x8b, 0x48, 0xd7, 0xc6,
+	0x6d, 0x1d, 0xb4, 0xe5, 0x3f, 0x20, 0xf2, 0xdd,
+	0x4a, 0xaa, 0x24, 0x1d, 0xda, 0xb2, 0x6b, 0x5b,
+	0xc0, 0xe2, 0x18, 0xb7, 0x2c, 0x33, 0x90, 0xf2,
+	0xdf, 0x3e, 0xbd, 0x01, 0x76, 0x70, 0x44, 0x19,
+	0x97, 0x2b, 0xcd, 0xbc, 0x6b, 0xbc, 0xb3, 0xe4,
+	0xe7, 0x4a, 0x71, 0x52, 0x8e, 0xf5, 0x12, 0x63,
+	0xce, 0x24, 0xe0, 0xd5, 0x75, 0xe0, 0xe4, 0x4d
+};
+static const u8 enc_output090[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f
+};
+static const u8 enc_assoc090[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x85, 0x40, 0xb4, 0x64, 0x35, 0x77, 0x07, 0xbe,
+	0x3a, 0x39, 0xd5, 0x5c, 0x34, 0xf8, 0xbc, 0xb3
+};
+static const u8 enc_nonce090[] __initconst = {
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b
+};
+static const u8 enc_key090[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - special case tag */
+static const u8 enc_input091[] __initconst = {
+	0x9a, 0x49, 0xc4, 0x0f, 0x8b, 0x48, 0xd7, 0xc6,
+	0x6d, 0x1d, 0xb4, 0xe5, 0x3f, 0x20, 0xf2, 0xdd,
+	0x4a, 0xaa, 0x24, 0x1d, 0xda, 0xb2, 0x6b, 0x5b,
+	0xc0, 0xe2, 0x18, 0xb7, 0x2c, 0x33, 0x90, 0xf2,
+	0xdf, 0x3e, 0xbd, 0x01, 0x76, 0x70, 0x44, 0x19,
+	0x97, 0x2b, 0xcd, 0xbc, 0x6b, 0xbc, 0xb3, 0xe4,
+	0xe7, 0x4a, 0x71, 0x52, 0x8e, 0xf5, 0x12, 0x63,
+	0xce, 0x24, 0xe0, 0xd5, 0x75, 0xe0, 0xe4, 0x4d
+};
+static const u8 enc_output091[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+	0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
+};
+static const u8 enc_assoc091[] __initconst = {
+	0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x66, 0x23, 0xd9, 0x90, 0xb8, 0x98, 0xd8, 0x30,
+	0xd2, 0x12, 0xaf, 0x23, 0x83, 0x33, 0x07, 0x01
+};
+static const u8 enc_nonce091[] __initconst = {
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b
+};
+static const u8 enc_key091[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - special case tag */
+static const u8 enc_input092[] __initconst = {
+	0x9a, 0x49, 0xc4, 0x0f, 0x8b, 0x48, 0xd7, 0xc6,
+	0x6d, 0x1d, 0xb4, 0xe5, 0x3f, 0x20, 0xf2, 0xdd,
+	0x4a, 0xaa, 0x24, 0x1d, 0xda, 0xb2, 0x6b, 0x5b,
+	0xc0, 0xe2, 0x18, 0xb7, 0x2c, 0x33, 0x90, 0xf2,
+	0xdf, 0x3e, 0xbd, 0x01, 0x76, 0x70, 0x44, 0x19,
+	0x97, 0x2b, 0xcd, 0xbc, 0x6b, 0xbc, 0xb3, 0xe4,
+	0xe7, 0x4a, 0x71, 0x52, 0x8e, 0xf5, 0x12, 0x63,
+	0xce, 0x24, 0xe0, 0xd5, 0x75, 0xe0, 0xe4, 0x4d
+};
+static const u8 enc_output092[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static const u8 enc_assoc092[] __initconst = {
+	0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x5f, 0x16, 0xd0, 0x9f, 0x17, 0x78, 0x72, 0x11,
+	0xb7, 0xd4, 0x84, 0xe0, 0x24, 0xf8, 0x97, 0x01
+};
+static const u8 enc_nonce092[] __initconst = {
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b
+};
+static const u8 enc_key092[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input093[] __initconst = {
+	0x00, 0x52, 0x35, 0xd2, 0xa9, 0x19, 0xf2, 0x8d,
+	0x3d, 0xb7, 0x66, 0x4a, 0x34, 0xae, 0x6b, 0x44,
+	0x4d, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x5b, 0x8b, 0x94, 0x50, 0x9e, 0x2b, 0x74, 0xa3,
+	0x6d, 0x34, 0x6e, 0x33, 0xd5, 0x72, 0x65, 0x9b,
+	0xa9, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0x83, 0xdc, 0xe9, 0xf3, 0x07, 0x3e, 0xfa, 0xdb,
+	0x7d, 0x23, 0xb8, 0x7a, 0xce, 0x35, 0x16, 0x8c
+};
+static const u8 enc_output093[] __initconst = {
+	0x00, 0x39, 0xe2, 0xfd, 0x2f, 0xd3, 0x12, 0x14,
+	0x9e, 0x98, 0x98, 0x80, 0x88, 0x48, 0x13, 0xe7,
+	0xca, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x3b, 0x0e, 0x86, 0x9a, 0xaa, 0x8e, 0xa4, 0x96,
+	0x32, 0xff, 0xff, 0x37, 0xb9, 0xe8, 0xce, 0x00,
+	0xca, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x3b, 0x0e, 0x86, 0x9a, 0xaa, 0x8e, 0xa4, 0x96,
+	0x32, 0xff, 0xff, 0x37, 0xb9, 0xe8, 0xce, 0x00,
+	0xa5, 0x19, 0xac, 0x1a, 0x35, 0xb4, 0xa5, 0x77,
+	0x87, 0x51, 0x0a, 0xf7, 0x8d, 0x8d, 0x20, 0x0a
+};
+static const u8 enc_assoc093[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce093[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key093[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input094[] __initconst = {
+	0xd3, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0xe5, 0xda, 0x78, 0x76, 0x6f, 0xa1, 0x92, 0x90,
+	0xc0, 0x31, 0xf7, 0x52, 0x08, 0x50, 0x67, 0x45,
+	0xae, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0x49, 0x6d, 0xde, 0xb0, 0x55, 0x09, 0xc6, 0xef,
+	0xff, 0xab, 0x75, 0xeb, 0x2d, 0xf4, 0xab, 0x09,
+	0x76, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x01, 0x49, 0xef, 0x50, 0x4b, 0x71, 0xb1, 0x20,
+	0xca, 0x4f, 0xf3, 0x95, 0x19, 0xc2, 0xc2, 0x10
+};
+static const u8 enc_output094[] __initconst = {
+	0xd3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x62, 0x18, 0xb2, 0x7f, 0x83, 0xb8, 0xb4, 0x66,
+	0x02, 0xf6, 0xe1, 0xd8, 0x34, 0x20, 0x7b, 0x02,
+	0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x2a, 0x64, 0x16, 0xce, 0xdb, 0x1c, 0xdd, 0x29,
+	0x6e, 0xf5, 0xd7, 0xd6, 0x92, 0xda, 0xff, 0x02,
+	0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x2a, 0x64, 0x16, 0xce, 0xdb, 0x1c, 0xdd, 0x29,
+	0x6e, 0xf5, 0xd7, 0xd6, 0x92, 0xda, 0xff, 0x02,
+	0x30, 0x2f, 0xe8, 0x2a, 0xb0, 0xa0, 0x9a, 0xf6,
+	0x44, 0x00, 0xd0, 0x15, 0xae, 0x83, 0xd9, 0xcc
+};
+static const u8 enc_assoc094[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce094[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key094[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input095[] __initconst = {
+	0xe9, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0x6d, 0xf1, 0x39, 0x4e, 0xdc, 0x53, 0x9b, 0x5b,
+	0x3a, 0x09, 0x57, 0xbe, 0x0f, 0xb8, 0x59, 0x46,
+	0x80, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0xd1, 0x76, 0x9f, 0xe8, 0x06, 0xbb, 0xfe, 0xb6,
+	0xf5, 0x90, 0x95, 0x0f, 0x2e, 0xac, 0x9e, 0x0a,
+	0x58, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x99, 0x52, 0xae, 0x08, 0x18, 0xc3, 0x89, 0x79,
+	0xc0, 0x74, 0x13, 0x71, 0x1a, 0x9a, 0xf7, 0x13
+};
+static const u8 enc_output095[] __initconst = {
+	0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xea, 0x33, 0xf3, 0x47, 0x30, 0x4a, 0xbd, 0xad,
+	0xf8, 0xce, 0x41, 0x34, 0x33, 0xc8, 0x45, 0x01,
+	0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xb2, 0x7f, 0x57, 0x96, 0x88, 0xae, 0xe5, 0x70,
+	0x64, 0xce, 0x37, 0x32, 0x91, 0x82, 0xca, 0x01,
+	0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xb2, 0x7f, 0x57, 0x96, 0x88, 0xae, 0xe5, 0x70,
+	0x64, 0xce, 0x37, 0x32, 0x91, 0x82, 0xca, 0x01,
+	0x98, 0xa7, 0xe8, 0x36, 0xe0, 0xee, 0x4d, 0x02,
+	0x35, 0x00, 0xd0, 0x55, 0x7e, 0xc2, 0xcb, 0xe0
+};
+static const u8 enc_assoc095[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce095[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key095[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input096[] __initconst = {
+	0xff, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0x64, 0xf9, 0x0f, 0x5b, 0x26, 0x92, 0xb8, 0x60,
+	0xd4, 0x59, 0x6f, 0xf4, 0xb3, 0x40, 0x2c, 0x5c,
+	0x00, 0xb9, 0xbb, 0x53, 0x70, 0x7a, 0xa6, 0x67,
+	0xd3, 0x56, 0xfe, 0x50, 0xc7, 0x19, 0x96, 0x94,
+	0x03, 0x35, 0x61, 0xe7, 0xca, 0xca, 0x6d, 0x94,
+	0x1d, 0xc3, 0xcd, 0x69, 0x14, 0xad, 0x69, 0x04
+};
+static const u8 enc_output096[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xe3, 0x3b, 0xc5, 0x52, 0xca, 0x8b, 0x9e, 0x96,
+	0x16, 0x9e, 0x79, 0x7e, 0x8f, 0x30, 0x30, 0x1b,
+	0x60, 0x3c, 0xa9, 0x99, 0x44, 0xdf, 0x76, 0x52,
+	0x8c, 0x9d, 0x6f, 0x54, 0xab, 0x83, 0x3d, 0x0f,
+	0x60, 0x3c, 0xa9, 0x99, 0x44, 0xdf, 0x76, 0x52,
+	0x8c, 0x9d, 0x6f, 0x54, 0xab, 0x83, 0x3d, 0x0f,
+	0x6a, 0xb8, 0xdc, 0xe2, 0xc5, 0x9d, 0xa4, 0x73,
+	0x71, 0x30, 0xb0, 0x25, 0x2f, 0x68, 0xa8, 0xd8
+};
+static const u8 enc_assoc096[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce096[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key096[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input097[] __initconst = {
+	0x68, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0xb0, 0x8f, 0x25, 0x67, 0x5b, 0x9b, 0xcb, 0xf6,
+	0xe3, 0x84, 0x07, 0xde, 0x2e, 0xc7, 0x5a, 0x47,
+	0x9f, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0x2d, 0x2a, 0xf7, 0xcd, 0x6b, 0x08, 0x05, 0x01,
+	0xd3, 0x1b, 0xa5, 0x4f, 0xb2, 0xeb, 0x75, 0x96,
+	0x47, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x65, 0x0e, 0xc6, 0x2d, 0x75, 0x70, 0x72, 0xce,
+	0xe6, 0xff, 0x23, 0x31, 0x86, 0xdd, 0x1c, 0x8f
+};
+static const u8 enc_output097[] __initconst = {
+	0x68, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x37, 0x4d, 0xef, 0x6e, 0xb7, 0x82, 0xed, 0x00,
+	0x21, 0x43, 0x11, 0x54, 0x12, 0xb7, 0x46, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x4e, 0x23, 0x3f, 0xb3, 0xe5, 0x1d, 0x1e, 0xc7,
+	0x42, 0x45, 0x07, 0x72, 0x0d, 0xc5, 0x21, 0x9d,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x4e, 0x23, 0x3f, 0xb3, 0xe5, 0x1d, 0x1e, 0xc7,
+	0x42, 0x45, 0x07, 0x72, 0x0d, 0xc5, 0x21, 0x9d,
+	0x04, 0x4d, 0xea, 0x60, 0x88, 0x80, 0x41, 0x2b,
+	0xfd, 0xff, 0xcf, 0x35, 0x57, 0x9e, 0x9b, 0x26
+};
+static const u8 enc_assoc097[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce097[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key097[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input098[] __initconst = {
+	0x6d, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0xa1, 0x61, 0xb5, 0xab, 0x04, 0x09, 0x00, 0x62,
+	0x9e, 0xfe, 0xff, 0x78, 0xd7, 0xd8, 0x6b, 0x45,
+	0x9f, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0xc6, 0xf8, 0x07, 0x8c, 0xc8, 0xef, 0x12, 0xa0,
+	0xff, 0x65, 0x7d, 0x6d, 0x08, 0xdb, 0x10, 0xb8,
+	0x47, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x8e, 0xdc, 0x36, 0x6c, 0xd6, 0x97, 0x65, 0x6f,
+	0xca, 0x81, 0xfb, 0x13, 0x3c, 0xed, 0x79, 0xa1
+};
+static const u8 enc_output098[] __initconst = {
+	0x6d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x26, 0xa3, 0x7f, 0xa2, 0xe8, 0x10, 0x26, 0x94,
+	0x5c, 0x39, 0xe9, 0xf2, 0xeb, 0xa8, 0x77, 0x02,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xa5, 0xf1, 0xcf, 0xf2, 0x46, 0xfa, 0x09, 0x66,
+	0x6e, 0x3b, 0xdf, 0x50, 0xb7, 0xf5, 0x44, 0xb3,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xa5, 0xf1, 0xcf, 0xf2, 0x46, 0xfa, 0x09, 0x66,
+	0x6e, 0x3b, 0xdf, 0x50, 0xb7, 0xf5, 0x44, 0xb3,
+	0x1e, 0x6b, 0xea, 0x63, 0x14, 0x54, 0x2e, 0x2e,
+	0xf9, 0xff, 0xcf, 0x45, 0x0b, 0x2e, 0x98, 0x2b
+};
+static const u8 enc_assoc098[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce098[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key098[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input099[] __initconst = {
+	0xff, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0xfc, 0x01, 0xb8, 0x91, 0xe5, 0xf0, 0xf9, 0x12,
+	0x8d, 0x7d, 0x1c, 0x57, 0x91, 0x92, 0xb6, 0x98,
+	0x63, 0x41, 0x44, 0x15, 0xb6, 0x99, 0x68, 0x95,
+	0x9a, 0x72, 0x91, 0xb7, 0xa5, 0xaf, 0x13, 0x48,
+	0x60, 0xcd, 0x9e, 0xa1, 0x0c, 0x29, 0xa3, 0x66,
+	0x54, 0xe7, 0xa2, 0x8e, 0x76, 0x1b, 0xec, 0xd8
+};
+static const u8 enc_output099[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x7b, 0xc3, 0x72, 0x98, 0x09, 0xe9, 0xdf, 0xe4,
+	0x4f, 0xba, 0x0a, 0xdd, 0xad, 0xe2, 0xaa, 0xdf,
+	0x03, 0xc4, 0x56, 0xdf, 0x82, 0x3c, 0xb8, 0xa0,
+	0xc5, 0xb9, 0x00, 0xb3, 0xc9, 0x35, 0xb8, 0xd3,
+	0x03, 0xc4, 0x56, 0xdf, 0x82, 0x3c, 0xb8, 0xa0,
+	0xc5, 0xb9, 0x00, 0xb3, 0xc9, 0x35, 0xb8, 0xd3,
+	0xed, 0x20, 0x17, 0xc8, 0xdb, 0xa4, 0x77, 0x56,
+	0x29, 0x04, 0x9d, 0x78, 0x6e, 0x3b, 0xce, 0xb1
+};
+static const u8 enc_assoc099[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce099[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key099[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input100[] __initconst = {
+	0xff, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0x6b, 0x6d, 0xc9, 0xd2, 0x1a, 0x81, 0x9e, 0x70,
+	0xb5, 0x77, 0xf4, 0x41, 0x37, 0xd3, 0xd6, 0xbd,
+	0x13, 0x35, 0xf5, 0xeb, 0x44, 0x49, 0x40, 0x77,
+	0xb2, 0x64, 0x49, 0xa5, 0x4b, 0x6c, 0x7c, 0x75,
+	0x10, 0xb9, 0x2f, 0x5f, 0xfe, 0xf9, 0x8b, 0x84,
+	0x7c, 0xf1, 0x7a, 0x9c, 0x98, 0xd8, 0x83, 0xe5
+};
+static const u8 enc_output100[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xec, 0xaf, 0x03, 0xdb, 0xf6, 0x98, 0xb8, 0x86,
+	0x77, 0xb0, 0xe2, 0xcb, 0x0b, 0xa3, 0xca, 0xfa,
+	0x73, 0xb0, 0xe7, 0x21, 0x70, 0xec, 0x90, 0x42,
+	0xed, 0xaf, 0xd8, 0xa1, 0x27, 0xf6, 0xd7, 0xee,
+	0x73, 0xb0, 0xe7, 0x21, 0x70, 0xec, 0x90, 0x42,
+	0xed, 0xaf, 0xd8, 0xa1, 0x27, 0xf6, 0xd7, 0xee,
+	0x07, 0x3f, 0x17, 0xcb, 0x67, 0x78, 0x64, 0x59,
+	0x25, 0x04, 0x9d, 0x88, 0x22, 0xcb, 0xca, 0xb6
+};
+static const u8 enc_assoc100[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce100[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key100[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input101[] __initconst = {
+	0xff, 0xcb, 0x2b, 0x11, 0x06, 0xf8, 0x23, 0x4c,
+	0x5e, 0x99, 0xd4, 0xdb, 0x4c, 0x70, 0x48, 0xde,
+	0x32, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x16, 0xe9, 0x88, 0x4a, 0x11, 0x4f, 0x0e, 0x92,
+	0x66, 0xce, 0xa3, 0x88, 0x5f, 0xe3, 0x6b, 0x9f,
+	0xd6, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0xce, 0xbe, 0xf5, 0xe9, 0x88, 0x5a, 0x80, 0xea,
+	0x76, 0xd9, 0x75, 0xc1, 0x44, 0xa4, 0x18, 0x88
+};
+static const u8 enc_output101[] __initconst = {
+	0xff, 0xa0, 0xfc, 0x3e, 0x80, 0x32, 0xc3, 0xd5,
+	0xfd, 0xb6, 0x2a, 0x11, 0xf0, 0x96, 0x30, 0x7d,
+	0xb5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x76, 0x6c, 0x9a, 0x80, 0x25, 0xea, 0xde, 0xa7,
+	0x39, 0x05, 0x32, 0x8c, 0x33, 0x79, 0xc0, 0x04,
+	0xb5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x76, 0x6c, 0x9a, 0x80, 0x25, 0xea, 0xde, 0xa7,
+	0x39, 0x05, 0x32, 0x8c, 0x33, 0x79, 0xc0, 0x04,
+	0x8b, 0x9b, 0xb4, 0xb4, 0x86, 0x12, 0x89, 0x65,
+	0x8c, 0x69, 0x6a, 0x83, 0x40, 0x15, 0x04, 0x05
+};
+static const u8 enc_assoc101[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce101[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key101[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input102[] __initconst = {
+	0x6f, 0x9e, 0x70, 0xed, 0x3b, 0x8b, 0xac, 0xa0,
+	0x26, 0xe4, 0x6a, 0x5a, 0x09, 0x43, 0x15, 0x8d,
+	0x21, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x0c, 0x61, 0x2c, 0x5e, 0x8d, 0x89, 0xa8, 0x73,
+	0xdb, 0xca, 0xad, 0x5b, 0x73, 0x46, 0x42, 0x9b,
+	0xc5, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0xd4, 0x36, 0x51, 0xfd, 0x14, 0x9c, 0x26, 0x0b,
+	0xcb, 0xdd, 0x7b, 0x12, 0x68, 0x01, 0x31, 0x8c
+};
+static const u8 enc_output102[] __initconst = {
+	0x6f, 0xf5, 0xa7, 0xc2, 0xbd, 0x41, 0x4c, 0x39,
+	0x85, 0xcb, 0x94, 0x90, 0xb5, 0xa5, 0x6d, 0x2e,
+	0xa6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x6c, 0xe4, 0x3e, 0x94, 0xb9, 0x2c, 0x78, 0x46,
+	0x84, 0x01, 0x3c, 0x5f, 0x1f, 0xdc, 0xe9, 0x00,
+	0xa6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x6c, 0xe4, 0x3e, 0x94, 0xb9, 0x2c, 0x78, 0x46,
+	0x84, 0x01, 0x3c, 0x5f, 0x1f, 0xdc, 0xe9, 0x00,
+	0x8b, 0x3b, 0xbd, 0x51, 0x64, 0x44, 0x59, 0x56,
+	0x8d, 0x81, 0xca, 0x1f, 0xa7, 0x2c, 0xe4, 0x04
+};
+static const u8 enc_assoc102[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce102[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key102[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input103[] __initconst = {
+	0x41, 0x2b, 0x08, 0x0a, 0x3e, 0x19, 0xc1, 0x0d,
+	0x44, 0xa1, 0xaf, 0x1e, 0xab, 0xde, 0xb4, 0xce,
+	0x35, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x6b, 0x83, 0x94, 0x33, 0x09, 0x21, 0x48, 0x6c,
+	0xa1, 0x1d, 0x29, 0x1c, 0x3e, 0x97, 0xee, 0x9a,
+	0xd1, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0xb3, 0xd4, 0xe9, 0x90, 0x90, 0x34, 0xc6, 0x14,
+	0xb1, 0x0a, 0xff, 0x55, 0x25, 0xd0, 0x9d, 0x8d
+};
+static const u8 enc_output103[] __initconst = {
+	0x41, 0x40, 0xdf, 0x25, 0xb8, 0xd3, 0x21, 0x94,
+	0xe7, 0x8e, 0x51, 0xd4, 0x17, 0x38, 0xcc, 0x6d,
+	0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x0b, 0x06, 0x86, 0xf9, 0x3d, 0x84, 0x98, 0x59,
+	0xfe, 0xd6, 0xb8, 0x18, 0x52, 0x0d, 0x45, 0x01,
+	0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x0b, 0x06, 0x86, 0xf9, 0x3d, 0x84, 0x98, 0x59,
+	0xfe, 0xd6, 0xb8, 0x18, 0x52, 0x0d, 0x45, 0x01,
+	0x86, 0xfb, 0xab, 0x2b, 0x4a, 0x94, 0xf4, 0x7a,
+	0xa5, 0x6f, 0x0a, 0xea, 0x65, 0xd1, 0x10, 0x08
+};
+static const u8 enc_assoc103[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce103[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key103[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input104[] __initconst = {
+	0xb2, 0x47, 0xa7, 0x47, 0x23, 0x49, 0x1a, 0xac,
+	0xac, 0xaa, 0xd7, 0x09, 0xc9, 0x1e, 0x93, 0x2b,
+	0x31, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x9a, 0xde, 0x04, 0xe7, 0x5b, 0xb7, 0x01, 0xd9,
+	0x66, 0x06, 0x01, 0xb3, 0x47, 0x65, 0xde, 0x98,
+	0xd5, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0x42, 0x89, 0x79, 0x44, 0xc2, 0xa2, 0x8f, 0xa1,
+	0x76, 0x11, 0xd7, 0xfa, 0x5c, 0x22, 0xad, 0x8f
+};
+static const u8 enc_output104[] __initconst = {
+	0xb2, 0x2c, 0x70, 0x68, 0xa5, 0x83, 0xfa, 0x35,
+	0x0f, 0x85, 0x29, 0xc3, 0x75, 0xf8, 0xeb, 0x88,
+	0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xfa, 0x5b, 0x16, 0x2d, 0x6f, 0x12, 0xd1, 0xec,
+	0x39, 0xcd, 0x90, 0xb7, 0x2b, 0xff, 0x75, 0x03,
+	0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xfa, 0x5b, 0x16, 0x2d, 0x6f, 0x12, 0xd1, 0xec,
+	0x39, 0xcd, 0x90, 0xb7, 0x2b, 0xff, 0x75, 0x03,
+	0xa0, 0x19, 0xac, 0x2e, 0xd6, 0x67, 0xe1, 0x7d,
+	0xa1, 0x6f, 0x0a, 0xfa, 0x19, 0x61, 0x0d, 0x0d
+};
+static const u8 enc_assoc104[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce104[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key104[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input105[] __initconst = {
+	0x74, 0x0f, 0x9e, 0x49, 0xf6, 0x10, 0xef, 0xa5,
+	0x85, 0xb6, 0x59, 0xca, 0x6e, 0xd8, 0xb4, 0x99,
+	0x2d, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x41, 0x2d, 0x96, 0xaf, 0xbe, 0x80, 0xec, 0x3e,
+	0x79, 0xd4, 0x51, 0xb0, 0x0a, 0x2d, 0xb2, 0x9a,
+	0xc9, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0x99, 0x7a, 0xeb, 0x0c, 0x27, 0x95, 0x62, 0x46,
+	0x69, 0xc3, 0x87, 0xf9, 0x11, 0x6a, 0xc1, 0x8d
+};
+static const u8 enc_output105[] __initconst = {
+	0x74, 0x64, 0x49, 0x66, 0x70, 0xda, 0x0f, 0x3c,
+	0x26, 0x99, 0xa7, 0x00, 0xd2, 0x3e, 0xcc, 0x3a,
+	0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x21, 0xa8, 0x84, 0x65, 0x8a, 0x25, 0x3c, 0x0b,
+	0x26, 0x1f, 0xc0, 0xb4, 0x66, 0xb7, 0x19, 0x01,
+	0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x21, 0xa8, 0x84, 0x65, 0x8a, 0x25, 0x3c, 0x0b,
+	0x26, 0x1f, 0xc0, 0xb4, 0x66, 0xb7, 0x19, 0x01,
+	0x73, 0x6e, 0x18, 0x18, 0x16, 0x96, 0xa5, 0x88,
+	0x9c, 0x31, 0x59, 0xfa, 0xab, 0xab, 0x20, 0xfd
+};
+static const u8 enc_assoc105[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce105[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key105[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input106[] __initconst = {
+	0xad, 0xba, 0x5d, 0x10, 0x5b, 0xc8, 0xaa, 0x06,
+	0x2c, 0x23, 0x36, 0xcb, 0x88, 0x9d, 0xdb, 0xd5,
+	0x37, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x17, 0x7c, 0x5f, 0xfe, 0x28, 0x75, 0xf4, 0x68,
+	0xf6, 0xc2, 0x96, 0x57, 0x48, 0xf3, 0x59, 0x9a,
+	0xd3, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0xcf, 0x2b, 0x22, 0x5d, 0xb1, 0x60, 0x7a, 0x10,
+	0xe6, 0xd5, 0x40, 0x1e, 0x53, 0xb4, 0x2a, 0x8d
+};
+static const u8 enc_output106[] __initconst = {
+	0xad, 0xd1, 0x8a, 0x3f, 0xdd, 0x02, 0x4a, 0x9f,
+	0x8f, 0x0c, 0xc8, 0x01, 0x34, 0x7b, 0xa3, 0x76,
+	0xb0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x77, 0xf9, 0x4d, 0x34, 0x1c, 0xd0, 0x24, 0x5d,
+	0xa9, 0x09, 0x07, 0x53, 0x24, 0x69, 0xf2, 0x01,
+	0xb0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x77, 0xf9, 0x4d, 0x34, 0x1c, 0xd0, 0x24, 0x5d,
+	0xa9, 0x09, 0x07, 0x53, 0x24, 0x69, 0xf2, 0x01,
+	0xba, 0xd5, 0x8f, 0x10, 0xa9, 0x1e, 0x6a, 0x88,
+	0x9a, 0xba, 0x32, 0xfd, 0x17, 0xd8, 0x33, 0x1a
+};
+static const u8 enc_assoc106[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce106[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key106[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input107[] __initconst = {
+	0xfe, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0xc0, 0x01, 0xed, 0xc5, 0xda, 0x44, 0x2e, 0x71,
+	0x9b, 0xce, 0x9a, 0xbe, 0x27, 0x3a, 0xf1, 0x44,
+	0xb4, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0x48, 0x02, 0x5f, 0x41, 0xfa, 0x4e, 0x33, 0x6c,
+	0x78, 0x69, 0x57, 0xa2, 0xa7, 0xc4, 0x93, 0x0a,
+	0x6c, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x00, 0x26, 0x6e, 0xa1, 0xe4, 0x36, 0x44, 0xa3,
+	0x4d, 0x8d, 0xd1, 0xdc, 0x93, 0xf2, 0xfa, 0x13
+};
+static const u8 enc_output107[] __initconst = {
+	0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x47, 0xc3, 0x27, 0xcc, 0x36, 0x5d, 0x08, 0x87,
+	0x59, 0x09, 0x8c, 0x34, 0x1b, 0x4a, 0xed, 0x03,
+	0xd4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x2b, 0x0b, 0x97, 0x3f, 0x74, 0x5b, 0x28, 0xaa,
+	0xe9, 0x37, 0xf5, 0x9f, 0x18, 0xea, 0xc7, 0x01,
+	0xd4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x2b, 0x0b, 0x97, 0x3f, 0x74, 0x5b, 0x28, 0xaa,
+	0xe9, 0x37, 0xf5, 0x9f, 0x18, 0xea, 0xc7, 0x01,
+	0xd6, 0x8c, 0xe1, 0x74, 0x07, 0x9a, 0xdd, 0x02,
+	0x8d, 0xd0, 0x5c, 0xf8, 0x14, 0x63, 0x04, 0x88
+};
+static const u8 enc_assoc107[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce107[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key107[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input108[] __initconst = {
+	0xb5, 0x13, 0xb0, 0x6a, 0xb9, 0xac, 0x14, 0x43,
+	0x5a, 0xcb, 0x8a, 0xa3, 0xa3, 0x7a, 0xfd, 0xb6,
+	0x54, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x61, 0x95, 0x01, 0x93, 0xb1, 0xbf, 0x03, 0x11,
+	0xff, 0x11, 0x79, 0x89, 0xae, 0xd9, 0xa9, 0x99,
+	0xb0, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0xb9, 0xc2, 0x7c, 0x30, 0x28, 0xaa, 0x8d, 0x69,
+	0xef, 0x06, 0xaf, 0xc0, 0xb5, 0x9e, 0xda, 0x8e
+};
+static const u8 enc_output108[] __initconst = {
+	0xb5, 0x78, 0x67, 0x45, 0x3f, 0x66, 0xf4, 0xda,
+	0xf9, 0xe4, 0x74, 0x69, 0x1f, 0x9c, 0x85, 0x15,
+	0xd3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x01, 0x10, 0x13, 0x59, 0x85, 0x1a, 0xd3, 0x24,
+	0xa0, 0xda, 0xe8, 0x8d, 0xc2, 0x43, 0x02, 0x02,
+	0xd3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x01, 0x10, 0x13, 0x59, 0x85, 0x1a, 0xd3, 0x24,
+	0xa0, 0xda, 0xe8, 0x8d, 0xc2, 0x43, 0x02, 0x02,
+	0xaa, 0x48, 0xa3, 0x88, 0x7d, 0x4b, 0x05, 0x96,
+	0x99, 0xc2, 0xfd, 0xf9, 0xc6, 0x78, 0x7e, 0x0a
+};
+static const u8 enc_assoc108[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce108[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key108[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input109[] __initconst = {
+	0xff, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0xd4, 0xf1, 0x09, 0xe8, 0x14, 0xce, 0xa8, 0x5a,
+	0x08, 0xc0, 0x11, 0xd8, 0x50, 0xdd, 0x1d, 0xcb,
+	0xcf, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0x53, 0x40, 0xb8, 0x5a, 0x9a, 0xa0, 0x82, 0x96,
+	0xb7, 0x7a, 0x5f, 0xc3, 0x96, 0x1f, 0x66, 0x0f,
+	0x17, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x1b, 0x64, 0x89, 0xba, 0x84, 0xd8, 0xf5, 0x59,
+	0x82, 0x9e, 0xd9, 0xbd, 0xa2, 0x29, 0x0f, 0x16
+};
+static const u8 enc_output109[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x53, 0x33, 0xc3, 0xe1, 0xf8, 0xd7, 0x8e, 0xac,
+	0xca, 0x07, 0x07, 0x52, 0x6c, 0xad, 0x01, 0x8c,
+	0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x30, 0x49, 0x70, 0x24, 0x14, 0xb5, 0x99, 0x50,
+	0x26, 0x24, 0xfd, 0xfe, 0x29, 0x31, 0x32, 0x04,
+	0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x30, 0x49, 0x70, 0x24, 0x14, 0xb5, 0x99, 0x50,
+	0x26, 0x24, 0xfd, 0xfe, 0x29, 0x31, 0x32, 0x04,
+	0xb9, 0x36, 0xa8, 0x17, 0xf2, 0x21, 0x1a, 0xf1,
+	0x29, 0xe2, 0xcf, 0x16, 0x0f, 0xd4, 0x2b, 0xcb
+};
+static const u8 enc_assoc109[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce109[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key109[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input110[] __initconst = {
+	0xff, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0xdf, 0x4c, 0x62, 0x03, 0x2d, 0x41, 0x19, 0xb5,
+	0x88, 0x47, 0x7e, 0x99, 0x92, 0x5a, 0x56, 0xd9,
+	0xd6, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0xfa, 0x84, 0xf0, 0x64, 0x55, 0x36, 0x42, 0x1b,
+	0x2b, 0xb9, 0x24, 0x6e, 0xc2, 0x19, 0xed, 0x0b,
+	0x0e, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0xb2, 0xa0, 0xc1, 0x84, 0x4b, 0x4e, 0x35, 0xd4,
+	0x1e, 0x5d, 0xa2, 0x10, 0xf6, 0x2f, 0x84, 0x12
+};
+static const u8 enc_output110[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x58, 0x8e, 0xa8, 0x0a, 0xc1, 0x58, 0x3f, 0x43,
+	0x4a, 0x80, 0x68, 0x13, 0xae, 0x2a, 0x4a, 0x9e,
+	0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x99, 0x8d, 0x38, 0x1a, 0xdb, 0x23, 0x59, 0xdd,
+	0xba, 0xe7, 0x86, 0x53, 0x7d, 0x37, 0xb9, 0x00,
+	0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x99, 0x8d, 0x38, 0x1a, 0xdb, 0x23, 0x59, 0xdd,
+	0xba, 0xe7, 0x86, 0x53, 0x7d, 0x37, 0xb9, 0x00,
+	0x9f, 0x7a, 0xc4, 0x35, 0x1f, 0x6b, 0x91, 0xe6,
+	0x30, 0x97, 0xa7, 0x13, 0x11, 0x5d, 0x05, 0xbe
+};
+static const u8 enc_assoc110[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce110[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key110[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input111[] __initconst = {
+	0xff, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0x13, 0xf8, 0x0a, 0x00, 0x6d, 0xc1, 0xbb, 0xda,
+	0xd6, 0x39, 0xa9, 0x2f, 0xc7, 0xec, 0xa6, 0x55,
+	0xf7, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0x63, 0x48, 0xb8, 0xfd, 0x29, 0xbf, 0x96, 0xd5,
+	0x63, 0xa5, 0x17, 0xe2, 0x7d, 0x7b, 0xfc, 0x0f,
+	0x2f, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x2b, 0x6c, 0x89, 0x1d, 0x37, 0xc7, 0xe1, 0x1a,
+	0x56, 0x41, 0x91, 0x9c, 0x49, 0x4d, 0x95, 0x16
+};
+static const u8 enc_output111[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x94, 0x3a, 0xc0, 0x09, 0x81, 0xd8, 0x9d, 0x2c,
+	0x14, 0xfe, 0xbf, 0xa5, 0xfb, 0x9c, 0xba, 0x12,
+	0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x41, 0x70, 0x83, 0xa7, 0xaa, 0x8d, 0x13,
+	0xf2, 0xfb, 0xb5, 0xdf, 0xc2, 0x55, 0xa8, 0x04,
+	0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x41, 0x70, 0x83, 0xa7, 0xaa, 0x8d, 0x13,
+	0xf2, 0xfb, 0xb5, 0xdf, 0xc2, 0x55, 0xa8, 0x04,
+	0x9a, 0x18, 0xa8, 0x28, 0x07, 0x02, 0x69, 0xf4,
+	0x47, 0x00, 0xd0, 0x09, 0xe7, 0x17, 0x1c, 0xc9
+};
+static const u8 enc_assoc111[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce111[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key111[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input112[] __initconst = {
+	0xff, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0x82, 0xe5, 0x9b, 0x45, 0x82, 0x91, 0x50, 0x38,
+	0xf9, 0x33, 0x81, 0x1e, 0x65, 0x2d, 0xc6, 0x6a,
+	0xfc, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0xb6, 0x71, 0xc8, 0xca, 0xc2, 0x70, 0xc2, 0x65,
+	0xa0, 0xac, 0x2f, 0x53, 0x57, 0x99, 0x88, 0x0a,
+	0x24, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0xfe, 0x55, 0xf9, 0x2a, 0xdc, 0x08, 0xb5, 0xaa,
+	0x95, 0x48, 0xa9, 0x2d, 0x63, 0xaf, 0xe1, 0x13
+};
+static const u8 enc_output112[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x05, 0x27, 0x51, 0x4c, 0x6e, 0x88, 0x76, 0xce,
+	0x3b, 0xf4, 0x97, 0x94, 0x59, 0x5d, 0xda, 0x2d,
+	0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xd5, 0x78, 0x00, 0xb4, 0x4c, 0x65, 0xd9, 0xa3,
+	0x31, 0xf2, 0x8d, 0x6e, 0xe8, 0xb7, 0xdc, 0x01,
+	0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xd5, 0x78, 0x00, 0xb4, 0x4c, 0x65, 0xd9, 0xa3,
+	0x31, 0xf2, 0x8d, 0x6e, 0xe8, 0xb7, 0xdc, 0x01,
+	0xb4, 0x36, 0xa8, 0x2b, 0x93, 0xd5, 0x55, 0xf7,
+	0x43, 0x00, 0xd0, 0x19, 0x9b, 0xa7, 0x18, 0xce
+};
+static const u8 enc_assoc112[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce112[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key112[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input113[] __initconst = {
+	0xff, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0xf1, 0xd1, 0x28, 0x87, 0xb7, 0x21, 0x69, 0x86,
+	0xa1, 0x2d, 0x79, 0x09, 0x8b, 0x6d, 0xe6, 0x0f,
+	0xc0, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0xa7, 0xc7, 0x58, 0x99, 0xf3, 0xe6, 0x0a, 0xf1,
+	0xfc, 0xb6, 0xc7, 0x30, 0x7d, 0x87, 0x59, 0x0f,
+	0x18, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0xef, 0xe3, 0x69, 0x79, 0xed, 0x9e, 0x7d, 0x3e,
+	0xc9, 0x52, 0x41, 0x4e, 0x49, 0xb1, 0x30, 0x16
+};
+static const u8 enc_output113[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x76, 0x13, 0xe2, 0x8e, 0x5b, 0x38, 0x4f, 0x70,
+	0x63, 0xea, 0x6f, 0x83, 0xb7, 0x1d, 0xfa, 0x48,
+	0xa0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xc4, 0xce, 0x90, 0xe7, 0x7d, 0xf3, 0x11, 0x37,
+	0x6d, 0xe8, 0x65, 0x0d, 0xc2, 0xa9, 0x0d, 0x04,
+	0xa0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xc4, 0xce, 0x90, 0xe7, 0x7d, 0xf3, 0x11, 0x37,
+	0x6d, 0xe8, 0x65, 0x0d, 0xc2, 0xa9, 0x0d, 0x04,
+	0xce, 0x54, 0xa8, 0x2e, 0x1f, 0xa9, 0x42, 0xfa,
+	0x3f, 0x00, 0xd0, 0x29, 0x4f, 0x37, 0x15, 0xd3
+};
+static const u8 enc_assoc113[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce113[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key113[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input114[] __initconst = {
+	0xcb, 0xf1, 0xda, 0x9e, 0x0b, 0xa9, 0x37, 0x73,
+	0x74, 0xe6, 0x9e, 0x1c, 0x0e, 0x60, 0x0c, 0xfc,
+	0x34, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0xbe, 0x3f, 0xa6, 0x6b, 0x6c, 0xe7, 0x80, 0x8a,
+	0xa3, 0xe4, 0x59, 0x49, 0xf9, 0x44, 0x64, 0x9f,
+	0xd0, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0x66, 0x68, 0xdb, 0xc8, 0xf5, 0xf2, 0x0e, 0xf2,
+	0xb3, 0xf3, 0x8f, 0x00, 0xe2, 0x03, 0x17, 0x88
+};
+static const u8 enc_output114[] __initconst = {
+	0xcb, 0x9a, 0x0d, 0xb1, 0x8d, 0x63, 0xd7, 0xea,
+	0xd7, 0xc9, 0x60, 0xd6, 0xb2, 0x86, 0x74, 0x5f,
+	0xb3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xde, 0xba, 0xb4, 0xa1, 0x58, 0x42, 0x50, 0xbf,
+	0xfc, 0x2f, 0xc8, 0x4d, 0x95, 0xde, 0xcf, 0x04,
+	0xb3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xde, 0xba, 0xb4, 0xa1, 0x58, 0x42, 0x50, 0xbf,
+	0xfc, 0x2f, 0xc8, 0x4d, 0x95, 0xde, 0xcf, 0x04,
+	0x23, 0x83, 0xab, 0x0b, 0x79, 0x92, 0x05, 0x69,
+	0x9b, 0x51, 0x0a, 0xa7, 0x09, 0xbf, 0x31, 0xf1
+};
+static const u8 enc_assoc114[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce114[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key114[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input115[] __initconst = {
+	0x8f, 0x27, 0x86, 0x94, 0xc4, 0xe9, 0xda, 0xeb,
+	0xd5, 0x8d, 0x3e, 0x5b, 0x96, 0x6e, 0x8b, 0x68,
+	0x42, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x06, 0x53, 0xe7, 0xa3, 0x31, 0x71, 0x88, 0x33,
+	0xac, 0xc3, 0xb9, 0xad, 0xff, 0x1c, 0x31, 0x98,
+	0xa6, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0xde, 0x04, 0x9a, 0x00, 0xa8, 0x64, 0x06, 0x4b,
+	0xbc, 0xd4, 0x6f, 0xe4, 0xe4, 0x5b, 0x42, 0x8f
+};
+static const u8 enc_output115[] __initconst = {
+	0x8f, 0x4c, 0x51, 0xbb, 0x42, 0x23, 0x3a, 0x72,
+	0x76, 0xa2, 0xc0, 0x91, 0x2a, 0x88, 0xf3, 0xcb,
+	0xc5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x66, 0xd6, 0xf5, 0x69, 0x05, 0xd4, 0x58, 0x06,
+	0xf3, 0x08, 0x28, 0xa9, 0x93, 0x86, 0x9a, 0x03,
+	0xc5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x66, 0xd6, 0xf5, 0x69, 0x05, 0xd4, 0x58, 0x06,
+	0xf3, 0x08, 0x28, 0xa9, 0x93, 0x86, 0x9a, 0x03,
+	0x8b, 0xfb, 0xab, 0x17, 0xa9, 0xe0, 0xb8, 0x74,
+	0x8b, 0x51, 0x0a, 0xe7, 0xd9, 0xfd, 0x23, 0x05
+};
+static const u8 enc_assoc115[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce115[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key115[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input116[] __initconst = {
+	0xd5, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0x9a, 0x22, 0xd7, 0x0a, 0x48, 0xe2, 0x4f, 0xdd,
+	0xcd, 0xd4, 0x41, 0x9d, 0xe6, 0x4c, 0x8f, 0x44,
+	0xfc, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0x77, 0xb5, 0xc9, 0x07, 0xd9, 0xc9, 0xe1, 0xea,
+	0x51, 0x85, 0x1a, 0x20, 0x4a, 0xad, 0x9f, 0x0a,
+	0x24, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x3f, 0x91, 0xf8, 0xe7, 0xc7, 0xb1, 0x96, 0x25,
+	0x64, 0x61, 0x9c, 0x5e, 0x7e, 0x9b, 0xf6, 0x13
+};
+static const u8 enc_output116[] __initconst = {
+	0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x1d, 0xe0, 0x1d, 0x03, 0xa4, 0xfb, 0x69, 0x2b,
+	0x0f, 0x13, 0x57, 0x17, 0xda, 0x3c, 0x93, 0x03,
+	0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x14, 0xbc, 0x01, 0x79, 0x57, 0xdc, 0xfa, 0x2c,
+	0xc0, 0xdb, 0xb8, 0x1d, 0xf5, 0x83, 0xcb, 0x01,
+	0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x14, 0xbc, 0x01, 0x79, 0x57, 0xdc, 0xfa, 0x2c,
+	0xc0, 0xdb, 0xb8, 0x1d, 0xf5, 0x83, 0xcb, 0x01,
+	0x49, 0xbc, 0x6e, 0x9f, 0xc5, 0x1c, 0x4d, 0x50,
+	0x30, 0x36, 0x64, 0x4d, 0x84, 0x27, 0x73, 0xd2
+};
+static const u8 enc_assoc116[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce116[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key116[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input117[] __initconst = {
+	0xdb, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0x75, 0xd5, 0x64, 0x3a, 0xa5, 0xaf, 0x93, 0x4d,
+	0x8c, 0xce, 0x39, 0x2c, 0xc3, 0xee, 0xdb, 0x47,
+	0xc0, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0x60, 0x1b, 0x5a, 0xd2, 0x06, 0x7f, 0x28, 0x06,
+	0x6a, 0x8f, 0x32, 0x81, 0x71, 0x5b, 0xa8, 0x08,
+	0x18, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x28, 0x3f, 0x6b, 0x32, 0x18, 0x07, 0x5f, 0xc9,
+	0x5f, 0x6b, 0xb4, 0xff, 0x45, 0x6d, 0xc1, 0x11
+};
+static const u8 enc_output117[] __initconst = {
+	0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xf2, 0x17, 0xae, 0x33, 0x49, 0xb6, 0xb5, 0xbb,
+	0x4e, 0x09, 0x2f, 0xa6, 0xff, 0x9e, 0xc7, 0x00,
+	0xa0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x03, 0x12, 0x92, 0xac, 0x88, 0x6a, 0x33, 0xc0,
+	0xfb, 0xd1, 0x90, 0xbc, 0xce, 0x75, 0xfc, 0x03,
+	0xa0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x03, 0x12, 0x92, 0xac, 0x88, 0x6a, 0x33, 0xc0,
+	0xfb, 0xd1, 0x90, 0xbc, 0xce, 0x75, 0xfc, 0x03,
+	0x63, 0xda, 0x6e, 0xa2, 0x51, 0xf0, 0x39, 0x53,
+	0x2c, 0x36, 0x64, 0x5d, 0x38, 0xb7, 0x6f, 0xd7
+};
+static const u8 enc_assoc117[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce117[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key117[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input118[] __initconst = {
+	0x93, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0x62, 0x48, 0x39, 0x60, 0x42, 0x16, 0xe4, 0x03,
+	0xeb, 0xcc, 0x6a, 0xf5, 0x59, 0xec, 0x8b, 0x43,
+	0x97, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0xd8, 0xc8, 0xc3, 0xfa, 0x1a, 0x9e, 0x47, 0x4a,
+	0xbe, 0x52, 0xd0, 0x2c, 0x81, 0x87, 0xe9, 0x0f,
+	0x4f, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x90, 0xec, 0xf2, 0x1a, 0x04, 0xe6, 0x30, 0x85,
+	0x8b, 0xb6, 0x56, 0x52, 0xb5, 0xb1, 0x80, 0x16
+};
+static const u8 enc_output118[] __initconst = {
+	0x93, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xe5, 0x8a, 0xf3, 0x69, 0xae, 0x0f, 0xc2, 0xf5,
+	0x29, 0x0b, 0x7c, 0x7f, 0x65, 0x9c, 0x97, 0x04,
+	0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xbb, 0xc1, 0x0b, 0x84, 0x94, 0x8b, 0x5c, 0x8c,
+	0x2f, 0x0c, 0x72, 0x11, 0x3e, 0xa9, 0xbd, 0x04,
+	0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xbb, 0xc1, 0x0b, 0x84, 0x94, 0x8b, 0x5c, 0x8c,
+	0x2f, 0x0c, 0x72, 0x11, 0x3e, 0xa9, 0xbd, 0x04,
+	0x73, 0xeb, 0x27, 0x24, 0xb5, 0xc4, 0x05, 0xf0,
+	0x4d, 0x00, 0xd0, 0xf1, 0x58, 0x40, 0xa1, 0xc1
+};
+static const u8 enc_assoc118[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce118[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key118[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+static const struct chacha20poly1305_testvec
+chacha20poly1305_enc_vectors[] __initconst = {
+	{ enc_input001, enc_output001, enc_assoc001, enc_nonce001, enc_key001,
+	  sizeof(enc_input001), sizeof(enc_assoc001), sizeof(enc_nonce001) },
+	{ enc_input002, enc_output002, enc_assoc002, enc_nonce002, enc_key002,
+	  sizeof(enc_input002), sizeof(enc_assoc002), sizeof(enc_nonce002) },
+	{ enc_input003, enc_output003, enc_assoc003, enc_nonce003, enc_key003,
+	  sizeof(enc_input003), sizeof(enc_assoc003), sizeof(enc_nonce003) },
+	{ enc_input004, enc_output004, enc_assoc004, enc_nonce004, enc_key004,
+	  sizeof(enc_input004), sizeof(enc_assoc004), sizeof(enc_nonce004) },
+	{ enc_input005, enc_output005, enc_assoc005, enc_nonce005, enc_key005,
+	  sizeof(enc_input005), sizeof(enc_assoc005), sizeof(enc_nonce005) },
+	{ enc_input006, enc_output006, enc_assoc006, enc_nonce006, enc_key006,
+	  sizeof(enc_input006), sizeof(enc_assoc006), sizeof(enc_nonce006) },
+	{ enc_input007, enc_output007, enc_assoc007, enc_nonce007, enc_key007,
+	  sizeof(enc_input007), sizeof(enc_assoc007), sizeof(enc_nonce007) },
+	{ enc_input008, enc_output008, enc_assoc008, enc_nonce008, enc_key008,
+	  sizeof(enc_input008), sizeof(enc_assoc008), sizeof(enc_nonce008) },
+	{ enc_input009, enc_output009, enc_assoc009, enc_nonce009, enc_key009,
+	  sizeof(enc_input009), sizeof(enc_assoc009), sizeof(enc_nonce009) },
+	{ enc_input010, enc_output010, enc_assoc010, enc_nonce010, enc_key010,
+	  sizeof(enc_input010), sizeof(enc_assoc010), sizeof(enc_nonce010) },
+	{ enc_input011, enc_output011, enc_assoc011, enc_nonce011, enc_key011,
+	  sizeof(enc_input011), sizeof(enc_assoc011), sizeof(enc_nonce011) },
+	{ enc_input012, enc_output012, enc_assoc012, enc_nonce012, enc_key012,
+	  sizeof(enc_input012), sizeof(enc_assoc012), sizeof(enc_nonce012) },
+	{ enc_input013, enc_output013, enc_assoc013, enc_nonce013, enc_key013,
+	  sizeof(enc_input013), sizeof(enc_assoc013), sizeof(enc_nonce013) },
+	{ enc_input014, enc_output014, enc_assoc014, enc_nonce014, enc_key014,
+	  sizeof(enc_input014), sizeof(enc_assoc014), sizeof(enc_nonce014) },
+	{ enc_input015, enc_output015, enc_assoc015, enc_nonce015, enc_key015,
+	  sizeof(enc_input015), sizeof(enc_assoc015), sizeof(enc_nonce015) },
+	{ enc_input016, enc_output016, enc_assoc016, enc_nonce016, enc_key016,
+	  sizeof(enc_input016), sizeof(enc_assoc016), sizeof(enc_nonce016) },
+	{ enc_input017, enc_output017, enc_assoc017, enc_nonce017, enc_key017,
+	  sizeof(enc_input017), sizeof(enc_assoc017), sizeof(enc_nonce017) },
+	{ enc_input018, enc_output018, enc_assoc018, enc_nonce018, enc_key018,
+	  sizeof(enc_input018), sizeof(enc_assoc018), sizeof(enc_nonce018) },
+	{ enc_input019, enc_output019, enc_assoc019, enc_nonce019, enc_key019,
+	  sizeof(enc_input019), sizeof(enc_assoc019), sizeof(enc_nonce019) },
+	{ enc_input020, enc_output020, enc_assoc020, enc_nonce020, enc_key020,
+	  sizeof(enc_input020), sizeof(enc_assoc020), sizeof(enc_nonce020) },
+	{ enc_input021, enc_output021, enc_assoc021, enc_nonce021, enc_key021,
+	  sizeof(enc_input021), sizeof(enc_assoc021), sizeof(enc_nonce021) },
+	{ enc_input022, enc_output022, enc_assoc022, enc_nonce022, enc_key022,
+	  sizeof(enc_input022), sizeof(enc_assoc022), sizeof(enc_nonce022) },
+	{ enc_input023, enc_output023, enc_assoc023, enc_nonce023, enc_key023,
+	  sizeof(enc_input023), sizeof(enc_assoc023), sizeof(enc_nonce023) },
+	{ enc_input024, enc_output024, enc_assoc024, enc_nonce024, enc_key024,
+	  sizeof(enc_input024), sizeof(enc_assoc024), sizeof(enc_nonce024) },
+	{ enc_input025, enc_output025, enc_assoc025, enc_nonce025, enc_key025,
+	  sizeof(enc_input025), sizeof(enc_assoc025), sizeof(enc_nonce025) },
+	{ enc_input026, enc_output026, enc_assoc026, enc_nonce026, enc_key026,
+	  sizeof(enc_input026), sizeof(enc_assoc026), sizeof(enc_nonce026) },
+	{ enc_input027, enc_output027, enc_assoc027, enc_nonce027, enc_key027,
+	  sizeof(enc_input027), sizeof(enc_assoc027), sizeof(enc_nonce027) },
+	{ enc_input028, enc_output028, enc_assoc028, enc_nonce028, enc_key028,
+	  sizeof(enc_input028), sizeof(enc_assoc028), sizeof(enc_nonce028) },
+	{ enc_input029, enc_output029, enc_assoc029, enc_nonce029, enc_key029,
+	  sizeof(enc_input029), sizeof(enc_assoc029), sizeof(enc_nonce029) },
+	{ enc_input030, enc_output030, enc_assoc030, enc_nonce030, enc_key030,
+	  sizeof(enc_input030), sizeof(enc_assoc030), sizeof(enc_nonce030) },
+	{ enc_input031, enc_output031, enc_assoc031, enc_nonce031, enc_key031,
+	  sizeof(enc_input031), sizeof(enc_assoc031), sizeof(enc_nonce031) },
+	{ enc_input032, enc_output032, enc_assoc032, enc_nonce032, enc_key032,
+	  sizeof(enc_input032), sizeof(enc_assoc032), sizeof(enc_nonce032) },
+	{ enc_input033, enc_output033, enc_assoc033, enc_nonce033, enc_key033,
+	  sizeof(enc_input033), sizeof(enc_assoc033), sizeof(enc_nonce033) },
+	{ enc_input034, enc_output034, enc_assoc034, enc_nonce034, enc_key034,
+	  sizeof(enc_input034), sizeof(enc_assoc034), sizeof(enc_nonce034) },
+	{ enc_input035, enc_output035, enc_assoc035, enc_nonce035, enc_key035,
+	  sizeof(enc_input035), sizeof(enc_assoc035), sizeof(enc_nonce035) },
+	{ enc_input036, enc_output036, enc_assoc036, enc_nonce036, enc_key036,
+	  sizeof(enc_input036), sizeof(enc_assoc036), sizeof(enc_nonce036) },
+	{ enc_input037, enc_output037, enc_assoc037, enc_nonce037, enc_key037,
+	  sizeof(enc_input037), sizeof(enc_assoc037), sizeof(enc_nonce037) },
+	{ enc_input038, enc_output038, enc_assoc038, enc_nonce038, enc_key038,
+	  sizeof(enc_input038), sizeof(enc_assoc038), sizeof(enc_nonce038) },
+	{ enc_input039, enc_output039, enc_assoc039, enc_nonce039, enc_key039,
+	  sizeof(enc_input039), sizeof(enc_assoc039), sizeof(enc_nonce039) },
+	{ enc_input040, enc_output040, enc_assoc040, enc_nonce040, enc_key040,
+	  sizeof(enc_input040), sizeof(enc_assoc040), sizeof(enc_nonce040) },
+	{ enc_input041, enc_output041, enc_assoc041, enc_nonce041, enc_key041,
+	  sizeof(enc_input041), sizeof(enc_assoc041), sizeof(enc_nonce041) },
+	{ enc_input042, enc_output042, enc_assoc042, enc_nonce042, enc_key042,
+	  sizeof(enc_input042), sizeof(enc_assoc042), sizeof(enc_nonce042) },
+	{ enc_input043, enc_output043, enc_assoc043, enc_nonce043, enc_key043,
+	  sizeof(enc_input043), sizeof(enc_assoc043), sizeof(enc_nonce043) },
+	{ enc_input044, enc_output044, enc_assoc044, enc_nonce044, enc_key044,
+	  sizeof(enc_input044), sizeof(enc_assoc044), sizeof(enc_nonce044) },
+	{ enc_input045, enc_output045, enc_assoc045, enc_nonce045, enc_key045,
+	  sizeof(enc_input045), sizeof(enc_assoc045), sizeof(enc_nonce045) },
+	{ enc_input046, enc_output046, enc_assoc046, enc_nonce046, enc_key046,
+	  sizeof(enc_input046), sizeof(enc_assoc046), sizeof(enc_nonce046) },
+	{ enc_input047, enc_output047, enc_assoc047, enc_nonce047, enc_key047,
+	  sizeof(enc_input047), sizeof(enc_assoc047), sizeof(enc_nonce047) },
+	{ enc_input048, enc_output048, enc_assoc048, enc_nonce048, enc_key048,
+	  sizeof(enc_input048), sizeof(enc_assoc048), sizeof(enc_nonce048) },
+	{ enc_input049, enc_output049, enc_assoc049, enc_nonce049, enc_key049,
+	  sizeof(enc_input049), sizeof(enc_assoc049), sizeof(enc_nonce049) },
+	{ enc_input050, enc_output050, enc_assoc050, enc_nonce050, enc_key050,
+	  sizeof(enc_input050), sizeof(enc_assoc050), sizeof(enc_nonce050) },
+	{ enc_input051, enc_output051, enc_assoc051, enc_nonce051, enc_key051,
+	  sizeof(enc_input051), sizeof(enc_assoc051), sizeof(enc_nonce051) },
+	{ enc_input052, enc_output052, enc_assoc052, enc_nonce052, enc_key052,
+	  sizeof(enc_input052), sizeof(enc_assoc052), sizeof(enc_nonce052) },
+	{ enc_input053, enc_output053, enc_assoc053, enc_nonce053, enc_key053,
+	  sizeof(enc_input053), sizeof(enc_assoc053), sizeof(enc_nonce053) },
+	{ enc_input054, enc_output054, enc_assoc054, enc_nonce054, enc_key054,
+	  sizeof(enc_input054), sizeof(enc_assoc054), sizeof(enc_nonce054) },
+	{ enc_input055, enc_output055, enc_assoc055, enc_nonce055, enc_key055,
+	  sizeof(enc_input055), sizeof(enc_assoc055), sizeof(enc_nonce055) },
+	{ enc_input056, enc_output056, enc_assoc056, enc_nonce056, enc_key056,
+	  sizeof(enc_input056), sizeof(enc_assoc056), sizeof(enc_nonce056) },
+	{ enc_input057, enc_output057, enc_assoc057, enc_nonce057, enc_key057,
+	  sizeof(enc_input057), sizeof(enc_assoc057), sizeof(enc_nonce057) },
+	{ enc_input058, enc_output058, enc_assoc058, enc_nonce058, enc_key058,
+	  sizeof(enc_input058), sizeof(enc_assoc058), sizeof(enc_nonce058) },
+	{ enc_input059, enc_output059, enc_assoc059, enc_nonce059, enc_key059,
+	  sizeof(enc_input059), sizeof(enc_assoc059), sizeof(enc_nonce059) },
+	{ enc_input060, enc_output060, enc_assoc060, enc_nonce060, enc_key060,
+	  sizeof(enc_input060), sizeof(enc_assoc060), sizeof(enc_nonce060) },
+	{ enc_input061, enc_output061, enc_assoc061, enc_nonce061, enc_key061,
+	  sizeof(enc_input061), sizeof(enc_assoc061), sizeof(enc_nonce061) },
+	{ enc_input062, enc_output062, enc_assoc062, enc_nonce062, enc_key062,
+	  sizeof(enc_input062), sizeof(enc_assoc062), sizeof(enc_nonce062) },
+	{ enc_input063, enc_output063, enc_assoc063, enc_nonce063, enc_key063,
+	  sizeof(enc_input063), sizeof(enc_assoc063), sizeof(enc_nonce063) },
+	{ enc_input064, enc_output064, enc_assoc064, enc_nonce064, enc_key064,
+	  sizeof(enc_input064), sizeof(enc_assoc064), sizeof(enc_nonce064) },
+	{ enc_input065, enc_output065, enc_assoc065, enc_nonce065, enc_key065,
+	  sizeof(enc_input065), sizeof(enc_assoc065), sizeof(enc_nonce065) },
+	{ enc_input066, enc_output066, enc_assoc066, enc_nonce066, enc_key066,
+	  sizeof(enc_input066), sizeof(enc_assoc066), sizeof(enc_nonce066) },
+	{ enc_input067, enc_output067, enc_assoc067, enc_nonce067, enc_key067,
+	  sizeof(enc_input067), sizeof(enc_assoc067), sizeof(enc_nonce067) },
+	{ enc_input068, enc_output068, enc_assoc068, enc_nonce068, enc_key068,
+	  sizeof(enc_input068), sizeof(enc_assoc068), sizeof(enc_nonce068) },
+	{ enc_input069, enc_output069, enc_assoc069, enc_nonce069, enc_key069,
+	  sizeof(enc_input069), sizeof(enc_assoc069), sizeof(enc_nonce069) },
+	{ enc_input070, enc_output070, enc_assoc070, enc_nonce070, enc_key070,
+	  sizeof(enc_input070), sizeof(enc_assoc070), sizeof(enc_nonce070) },
+	{ enc_input071, enc_output071, enc_assoc071, enc_nonce071, enc_key071,
+	  sizeof(enc_input071), sizeof(enc_assoc071), sizeof(enc_nonce071) },
+	{ enc_input072, enc_output072, enc_assoc072, enc_nonce072, enc_key072,
+	  sizeof(enc_input072), sizeof(enc_assoc072), sizeof(enc_nonce072) },
+	{ enc_input073, enc_output073, enc_assoc073, enc_nonce073, enc_key073,
+	  sizeof(enc_input073), sizeof(enc_assoc073), sizeof(enc_nonce073) },
+	{ enc_input074, enc_output074, enc_assoc074, enc_nonce074, enc_key074,
+	  sizeof(enc_input074), sizeof(enc_assoc074), sizeof(enc_nonce074) },
+	{ enc_input075, enc_output075, enc_assoc075, enc_nonce075, enc_key075,
+	  sizeof(enc_input075), sizeof(enc_assoc075), sizeof(enc_nonce075) },
+	{ enc_input076, enc_output076, enc_assoc076, enc_nonce076, enc_key076,
+	  sizeof(enc_input076), sizeof(enc_assoc076), sizeof(enc_nonce076) },
+	{ enc_input077, enc_output077, enc_assoc077, enc_nonce077, enc_key077,
+	  sizeof(enc_input077), sizeof(enc_assoc077), sizeof(enc_nonce077) },
+	{ enc_input078, enc_output078, enc_assoc078, enc_nonce078, enc_key078,
+	  sizeof(enc_input078), sizeof(enc_assoc078), sizeof(enc_nonce078) },
+	{ enc_input079, enc_output079, enc_assoc079, enc_nonce079, enc_key079,
+	  sizeof(enc_input079), sizeof(enc_assoc079), sizeof(enc_nonce079) },
+	{ enc_input080, enc_output080, enc_assoc080, enc_nonce080, enc_key080,
+	  sizeof(enc_input080), sizeof(enc_assoc080), sizeof(enc_nonce080) },
+	{ enc_input081, enc_output081, enc_assoc081, enc_nonce081, enc_key081,
+	  sizeof(enc_input081), sizeof(enc_assoc081), sizeof(enc_nonce081) },
+	{ enc_input082, enc_output082, enc_assoc082, enc_nonce082, enc_key082,
+	  sizeof(enc_input082), sizeof(enc_assoc082), sizeof(enc_nonce082) },
+	{ enc_input083, enc_output083, enc_assoc083, enc_nonce083, enc_key083,
+	  sizeof(enc_input083), sizeof(enc_assoc083), sizeof(enc_nonce083) },
+	{ enc_input084, enc_output084, enc_assoc084, enc_nonce084, enc_key084,
+	  sizeof(enc_input084), sizeof(enc_assoc084), sizeof(enc_nonce084) },
+	{ enc_input085, enc_output085, enc_assoc085, enc_nonce085, enc_key085,
+	  sizeof(enc_input085), sizeof(enc_assoc085), sizeof(enc_nonce085) },
+	{ enc_input086, enc_output086, enc_assoc086, enc_nonce086, enc_key086,
+	  sizeof(enc_input086), sizeof(enc_assoc086), sizeof(enc_nonce086) },
+	{ enc_input087, enc_output087, enc_assoc087, enc_nonce087, enc_key087,
+	  sizeof(enc_input087), sizeof(enc_assoc087), sizeof(enc_nonce087) },
+	{ enc_input088, enc_output088, enc_assoc088, enc_nonce088, enc_key088,
+	  sizeof(enc_input088), sizeof(enc_assoc088), sizeof(enc_nonce088) },
+	{ enc_input089, enc_output089, enc_assoc089, enc_nonce089, enc_key089,
+	  sizeof(enc_input089), sizeof(enc_assoc089), sizeof(enc_nonce089) },
+	{ enc_input090, enc_output090, enc_assoc090, enc_nonce090, enc_key090,
+	  sizeof(enc_input090), sizeof(enc_assoc090), sizeof(enc_nonce090) },
+	{ enc_input091, enc_output091, enc_assoc091, enc_nonce091, enc_key091,
+	  sizeof(enc_input091), sizeof(enc_assoc091), sizeof(enc_nonce091) },
+	{ enc_input092, enc_output092, enc_assoc092, enc_nonce092, enc_key092,
+	  sizeof(enc_input092), sizeof(enc_assoc092), sizeof(enc_nonce092) },
+	{ enc_input093, enc_output093, enc_assoc093, enc_nonce093, enc_key093,
+	  sizeof(enc_input093), sizeof(enc_assoc093), sizeof(enc_nonce093) },
+	{ enc_input094, enc_output094, enc_assoc094, enc_nonce094, enc_key094,
+	  sizeof(enc_input094), sizeof(enc_assoc094), sizeof(enc_nonce094) },
+	{ enc_input095, enc_output095, enc_assoc095, enc_nonce095, enc_key095,
+	  sizeof(enc_input095), sizeof(enc_assoc095), sizeof(enc_nonce095) },
+	{ enc_input096, enc_output096, enc_assoc096, enc_nonce096, enc_key096,
+	  sizeof(enc_input096), sizeof(enc_assoc096), sizeof(enc_nonce096) },
+	{ enc_input097, enc_output097, enc_assoc097, enc_nonce097, enc_key097,
+	  sizeof(enc_input097), sizeof(enc_assoc097), sizeof(enc_nonce097) },
+	{ enc_input098, enc_output098, enc_assoc098, enc_nonce098, enc_key098,
+	  sizeof(enc_input098), sizeof(enc_assoc098), sizeof(enc_nonce098) },
+	{ enc_input099, enc_output099, enc_assoc099, enc_nonce099, enc_key099,
+	  sizeof(enc_input099), sizeof(enc_assoc099), sizeof(enc_nonce099) },
+	{ enc_input100, enc_output100, enc_assoc100, enc_nonce100, enc_key100,
+	  sizeof(enc_input100), sizeof(enc_assoc100), sizeof(enc_nonce100) },
+	{ enc_input101, enc_output101, enc_assoc101, enc_nonce101, enc_key101,
+	  sizeof(enc_input101), sizeof(enc_assoc101), sizeof(enc_nonce101) },
+	{ enc_input102, enc_output102, enc_assoc102, enc_nonce102, enc_key102,
+	  sizeof(enc_input102), sizeof(enc_assoc102), sizeof(enc_nonce102) },
+	{ enc_input103, enc_output103, enc_assoc103, enc_nonce103, enc_key103,
+	  sizeof(enc_input103), sizeof(enc_assoc103), sizeof(enc_nonce103) },
+	{ enc_input104, enc_output104, enc_assoc104, enc_nonce104, enc_key104,
+	  sizeof(enc_input104), sizeof(enc_assoc104), sizeof(enc_nonce104) },
+	{ enc_input105, enc_output105, enc_assoc105, enc_nonce105, enc_key105,
+	  sizeof(enc_input105), sizeof(enc_assoc105), sizeof(enc_nonce105) },
+	{ enc_input106, enc_output106, enc_assoc106, enc_nonce106, enc_key106,
+	  sizeof(enc_input106), sizeof(enc_assoc106), sizeof(enc_nonce106) },
+	{ enc_input107, enc_output107, enc_assoc107, enc_nonce107, enc_key107,
+	  sizeof(enc_input107), sizeof(enc_assoc107), sizeof(enc_nonce107) },
+	{ enc_input108, enc_output108, enc_assoc108, enc_nonce108, enc_key108,
+	  sizeof(enc_input108), sizeof(enc_assoc108), sizeof(enc_nonce108) },
+	{ enc_input109, enc_output109, enc_assoc109, enc_nonce109, enc_key109,
+	  sizeof(enc_input109), sizeof(enc_assoc109), sizeof(enc_nonce109) },
+	{ enc_input110, enc_output110, enc_assoc110, enc_nonce110, enc_key110,
+	  sizeof(enc_input110), sizeof(enc_assoc110), sizeof(enc_nonce110) },
+	{ enc_input111, enc_output111, enc_assoc111, enc_nonce111, enc_key111,
+	  sizeof(enc_input111), sizeof(enc_assoc111), sizeof(enc_nonce111) },
+	{ enc_input112, enc_output112, enc_assoc112, enc_nonce112, enc_key112,
+	  sizeof(enc_input112), sizeof(enc_assoc112), sizeof(enc_nonce112) },
+	{ enc_input113, enc_output113, enc_assoc113, enc_nonce113, enc_key113,
+	  sizeof(enc_input113), sizeof(enc_assoc113), sizeof(enc_nonce113) },
+	{ enc_input114, enc_output114, enc_assoc114, enc_nonce114, enc_key114,
+	  sizeof(enc_input114), sizeof(enc_assoc114), sizeof(enc_nonce114) },
+	{ enc_input115, enc_output115, enc_assoc115, enc_nonce115, enc_key115,
+	  sizeof(enc_input115), sizeof(enc_assoc115), sizeof(enc_nonce115) },
+	{ enc_input116, enc_output116, enc_assoc116, enc_nonce116, enc_key116,
+	  sizeof(enc_input116), sizeof(enc_assoc116), sizeof(enc_nonce116) },
+	{ enc_input117, enc_output117, enc_assoc117, enc_nonce117, enc_key117,
+	  sizeof(enc_input117), sizeof(enc_assoc117), sizeof(enc_nonce117) },
+	{ enc_input118, enc_output118, enc_assoc118, enc_nonce118, enc_key118,
+	  sizeof(enc_input118), sizeof(enc_assoc118), sizeof(enc_nonce118) }
+};
+
+static const u8 dec_input001[] __initconst = {
+	0x64, 0xa0, 0x86, 0x15, 0x75, 0x86, 0x1a, 0xf4,
+	0x60, 0xf0, 0x62, 0xc7, 0x9b, 0xe6, 0x43, 0xbd,
+	0x5e, 0x80, 0x5c, 0xfd, 0x34, 0x5c, 0xf3, 0x89,
+	0xf1, 0x08, 0x67, 0x0a, 0xc7, 0x6c, 0x8c, 0xb2,
+	0x4c, 0x6c, 0xfc, 0x18, 0x75, 0x5d, 0x43, 0xee,
+	0xa0, 0x9e, 0xe9, 0x4e, 0x38, 0x2d, 0x26, 0xb0,
+	0xbd, 0xb7, 0xb7, 0x3c, 0x32, 0x1b, 0x01, 0x00,
+	0xd4, 0xf0, 0x3b, 0x7f, 0x35, 0x58, 0x94, 0xcf,
+	0x33, 0x2f, 0x83, 0x0e, 0x71, 0x0b, 0x97, 0xce,
+	0x98, 0xc8, 0xa8, 0x4a, 0xbd, 0x0b, 0x94, 0x81,
+	0x14, 0xad, 0x17, 0x6e, 0x00, 0x8d, 0x33, 0xbd,
+	0x60, 0xf9, 0x82, 0xb1, 0xff, 0x37, 0xc8, 0x55,
+	0x97, 0x97, 0xa0, 0x6e, 0xf4, 0xf0, 0xef, 0x61,
+	0xc1, 0x86, 0x32, 0x4e, 0x2b, 0x35, 0x06, 0x38,
+	0x36, 0x06, 0x90, 0x7b, 0x6a, 0x7c, 0x02, 0xb0,
+	0xf9, 0xf6, 0x15, 0x7b, 0x53, 0xc8, 0x67, 0xe4,
+	0xb9, 0x16, 0x6c, 0x76, 0x7b, 0x80, 0x4d, 0x46,
+	0xa5, 0x9b, 0x52, 0x16, 0xcd, 0xe7, 0xa4, 0xe9,
+	0x90, 0x40, 0xc5, 0xa4, 0x04, 0x33, 0x22, 0x5e,
+	0xe2, 0x82, 0xa1, 0xb0, 0xa0, 0x6c, 0x52, 0x3e,
+	0xaf, 0x45, 0x34, 0xd7, 0xf8, 0x3f, 0xa1, 0x15,
+	0x5b, 0x00, 0x47, 0x71, 0x8c, 0xbc, 0x54, 0x6a,
+	0x0d, 0x07, 0x2b, 0x04, 0xb3, 0x56, 0x4e, 0xea,
+	0x1b, 0x42, 0x22, 0x73, 0xf5, 0x48, 0x27, 0x1a,
+	0x0b, 0xb2, 0x31, 0x60, 0x53, 0xfa, 0x76, 0x99,
+	0x19, 0x55, 0xeb, 0xd6, 0x31, 0x59, 0x43, 0x4e,
+	0xce, 0xbb, 0x4e, 0x46, 0x6d, 0xae, 0x5a, 0x10,
+	0x73, 0xa6, 0x72, 0x76, 0x27, 0x09, 0x7a, 0x10,
+	0x49, 0xe6, 0x17, 0xd9, 0x1d, 0x36, 0x10, 0x94,
+	0xfa, 0x68, 0xf0, 0xff, 0x77, 0x98, 0x71, 0x30,
+	0x30, 0x5b, 0xea, 0xba, 0x2e, 0xda, 0x04, 0xdf,
+	0x99, 0x7b, 0x71, 0x4d, 0x6c, 0x6f, 0x2c, 0x29,
+	0xa6, 0xad, 0x5c, 0xb4, 0x02, 0x2b, 0x02, 0x70,
+	0x9b, 0xee, 0xad, 0x9d, 0x67, 0x89, 0x0c, 0xbb,
+	0x22, 0x39, 0x23, 0x36, 0xfe, 0xa1, 0x85, 0x1f,
+	0x38
+};
+static const u8 dec_output001[] __initconst = {
+	0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74,
+	0x2d, 0x44, 0x72, 0x61, 0x66, 0x74, 0x73, 0x20,
+	0x61, 0x72, 0x65, 0x20, 0x64, 0x72, 0x61, 0x66,
+	0x74, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x20, 0x76, 0x61, 0x6c, 0x69,
+	0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20,
+	0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20,
+	0x6f, 0x66, 0x20, 0x73, 0x69, 0x78, 0x20, 0x6d,
+	0x6f, 0x6e, 0x74, 0x68, 0x73, 0x20, 0x61, 0x6e,
+	0x64, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65,
+	0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
+	0x2c, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63,
+	0x65, 0x64, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x6f,
+	0x62, 0x73, 0x6f, 0x6c, 0x65, 0x74, 0x65, 0x64,
+	0x20, 0x62, 0x79, 0x20, 0x6f, 0x74, 0x68, 0x65,
+	0x72, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x20, 0x61, 0x74, 0x20, 0x61,
+	0x6e, 0x79, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e,
+	0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69,
+	0x6e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72,
+	0x69, 0x61, 0x74, 0x65, 0x20, 0x74, 0x6f, 0x20,
+	0x75, 0x73, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65,
+	0x72, 0x6e, 0x65, 0x74, 0x2d, 0x44, 0x72, 0x61,
+	0x66, 0x74, 0x73, 0x20, 0x61, 0x73, 0x20, 0x72,
+	0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+	0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61,
+	0x6c, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20,
+	0x63, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65,
+	0x6d, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20,
+	0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x20,
+	0x2f, 0xe2, 0x80, 0x9c, 0x77, 0x6f, 0x72, 0x6b,
+	0x20, 0x69, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x67,
+	0x72, 0x65, 0x73, 0x73, 0x2e, 0x2f, 0xe2, 0x80,
+	0x9d
+};
+static const u8 dec_assoc001[] __initconst = {
+	0xf3, 0x33, 0x88, 0x86, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x4e, 0x91
+};
+static const u8 dec_nonce001[] __initconst = {
+	0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
+};
+static const u8 dec_key001[] __initconst = {
+	0x1c, 0x92, 0x40, 0xa5, 0xeb, 0x55, 0xd3, 0x8a,
+	0xf3, 0x33, 0x88, 0x86, 0x04, 0xf6, 0xb5, 0xf0,
+	0x47, 0x39, 0x17, 0xc1, 0x40, 0x2b, 0x80, 0x09,
+	0x9d, 0xca, 0x5c, 0xbc, 0x20, 0x70, 0x75, 0xc0
+};
+
+static const u8 dec_input002[] __initconst = {
+	0xea, 0xe0, 0x1e, 0x9e, 0x2c, 0x91, 0xaa, 0xe1,
+	0xdb, 0x5d, 0x99, 0x3f, 0x8a, 0xf7, 0x69, 0x92
+};
+static const u8 dec_output002[] __initconst = { };
+static const u8 dec_assoc002[] __initconst = { };
+static const u8 dec_nonce002[] __initconst = {
+	0xca, 0xbf, 0x33, 0x71, 0x32, 0x45, 0x77, 0x8e
+};
+static const u8 dec_key002[] __initconst = {
+	0x4c, 0xf5, 0x96, 0x83, 0x38, 0xe6, 0xae, 0x7f,
+	0x2d, 0x29, 0x25, 0x76, 0xd5, 0x75, 0x27, 0x86,
+	0x91, 0x9a, 0x27, 0x7a, 0xfb, 0x46, 0xc5, 0xef,
+	0x94, 0x81, 0x79, 0x57, 0x14, 0x59, 0x40, 0x68
+};
+
+static const u8 dec_input003[] __initconst = {
+	0xdd, 0x6b, 0x3b, 0x82, 0xce, 0x5a, 0xbd, 0xd6,
+	0xa9, 0x35, 0x83, 0xd8, 0x8c, 0x3d, 0x85, 0x77
+};
+static const u8 dec_output003[] __initconst = { };
+static const u8 dec_assoc003[] __initconst = {
+	0x33, 0x10, 0x41, 0x12, 0x1f, 0xf3, 0xd2, 0x6b
+};
+static const u8 dec_nonce003[] __initconst = {
+	0x3d, 0x86, 0xb5, 0x6b, 0xc8, 0xa3, 0x1f, 0x1d
+};
+static const u8 dec_key003[] __initconst = {
+	0x2d, 0xb0, 0x5d, 0x40, 0xc8, 0xed, 0x44, 0x88,
+	0x34, 0xd1, 0x13, 0xaf, 0x57, 0xa1, 0xeb, 0x3a,
+	0x2a, 0x80, 0x51, 0x36, 0xec, 0x5b, 0xbc, 0x08,
+	0x93, 0x84, 0x21, 0xb5, 0x13, 0x88, 0x3c, 0x0d
+};
+
+static const u8 dec_input004[] __initconst = {
+	0xb7, 0x1b, 0xb0, 0x73, 0x59, 0xb0, 0x84, 0xb2,
+	0x6d, 0x8e, 0xab, 0x94, 0x31, 0xa1, 0xae, 0xac,
+	0x89
+};
+static const u8 dec_output004[] __initconst = {
+	0xa4
+};
+static const u8 dec_assoc004[] __initconst = {
+	0x6a, 0xe2, 0xad, 0x3f, 0x88, 0x39, 0x5a, 0x40
+};
+static const u8 dec_nonce004[] __initconst = {
+	0xd2, 0x32, 0x1f, 0x29, 0x28, 0xc6, 0xc4, 0xc4
+};
+static const u8 dec_key004[] __initconst = {
+	0x4b, 0x28, 0x4b, 0xa3, 0x7b, 0xbe, 0xe9, 0xf8,
+	0x31, 0x80, 0x82, 0xd7, 0xd8, 0xe8, 0xb5, 0xa1,
+	0xe2, 0x18, 0x18, 0x8a, 0x9c, 0xfa, 0xa3, 0x3d,
+	0x25, 0x71, 0x3e, 0x40, 0xbc, 0x54, 0x7a, 0x3e
+};
+
+static const u8 dec_input005[] __initconst = {
+	0xbf, 0xe1, 0x5b, 0x0b, 0xdb, 0x6b, 0xf5, 0x5e,
+	0x6c, 0x5d, 0x84, 0x44, 0x39, 0x81, 0xc1, 0x9c,
+	0xac
+};
+static const u8 dec_output005[] __initconst = {
+	0x2d
+};
+static const u8 dec_assoc005[] __initconst = { };
+static const u8 dec_nonce005[] __initconst = {
+	0x20, 0x1c, 0xaa, 0x5f, 0x9c, 0xbf, 0x92, 0x30
+};
+static const u8 dec_key005[] __initconst = {
+	0x66, 0xca, 0x9c, 0x23, 0x2a, 0x4b, 0x4b, 0x31,
+	0x0e, 0x92, 0x89, 0x8b, 0xf4, 0x93, 0xc7, 0x87,
+	0x98, 0xa3, 0xd8, 0x39, 0xf8, 0xf4, 0xa7, 0x01,
+	0xc0, 0x2e, 0x0a, 0xa6, 0x7e, 0x5a, 0x78, 0x87
+};
+
+static const u8 dec_input006[] __initconst = {
+	0x8b, 0x06, 0xd3, 0x31, 0xb0, 0x93, 0x45, 0xb1,
+	0x75, 0x6e, 0x26, 0xf9, 0x67, 0xbc, 0x90, 0x15,
+	0x81, 0x2c, 0xb5, 0xf0, 0xc6, 0x2b, 0xc7, 0x8c,
+	0x56, 0xd1, 0xbf, 0x69, 0x6c, 0x07, 0xa0, 0xda,
+	0x65, 0x27, 0xc9, 0x90, 0x3d, 0xef, 0x4b, 0x11,
+	0x0f, 0x19, 0x07, 0xfd, 0x29, 0x92, 0xd9, 0xc8,
+	0xf7, 0x99, 0x2e, 0x4a, 0xd0, 0xb8, 0x2c, 0xdc,
+	0x93, 0xf5, 0x9e, 0x33, 0x78, 0xd1, 0x37, 0xc3,
+	0x66, 0xd7, 0x5e, 0xbc, 0x44, 0xbf, 0x53, 0xa5,
+	0xbc, 0xc4, 0xcb, 0x7b, 0x3a, 0x8e, 0x7f, 0x02,
+	0xbd, 0xbb, 0xe7, 0xca, 0xa6, 0x6c, 0x6b, 0x93,
+	0x21, 0x93, 0x10, 0x61, 0xe7, 0x69, 0xd0, 0x78,
+	0xf3, 0x07, 0x5a, 0x1a, 0x8f, 0x73, 0xaa, 0xb1,
+	0x4e, 0xd3, 0xda, 0x4f, 0xf3, 0x32, 0xe1, 0x66,
+	0x3e, 0x6c, 0xc6, 0x13, 0xba, 0x06, 0x5b, 0xfc,
+	0x6a, 0xe5, 0x6f, 0x60, 0xfb, 0x07, 0x40, 0xb0,
+	0x8c, 0x9d, 0x84, 0x43, 0x6b, 0xc1, 0xf7, 0x8d,
+	0x8d, 0x31, 0xf7, 0x7a, 0x39, 0x4d, 0x8f, 0x9a,
+	0xeb
+};
+static const u8 dec_output006[] __initconst = {
+	0x33, 0x2f, 0x94, 0xc1, 0xa4, 0xef, 0xcc, 0x2a,
+	0x5b, 0xa6, 0xe5, 0x8f, 0x1d, 0x40, 0xf0, 0x92,
+	0x3c, 0xd9, 0x24, 0x11, 0xa9, 0x71, 0xf9, 0x37,
+	0x14, 0x99, 0xfa, 0xbe, 0xe6, 0x80, 0xde, 0x50,
+	0xc9, 0x96, 0xd4, 0xb0, 0xec, 0x9e, 0x17, 0xec,
+	0xd2, 0x5e, 0x72, 0x99, 0xfc, 0x0a, 0xe1, 0xcb,
+	0x48, 0xd2, 0x85, 0xdd, 0x2f, 0x90, 0xe0, 0x66,
+	0x3b, 0xe6, 0x20, 0x74, 0xbe, 0x23, 0x8f, 0xcb,
+	0xb4, 0xe4, 0xda, 0x48, 0x40, 0xa6, 0xd1, 0x1b,
+	0xc7, 0x42, 0xce, 0x2f, 0x0c, 0xa6, 0x85, 0x6e,
+	0x87, 0x37, 0x03, 0xb1, 0x7c, 0x25, 0x96, 0xa3,
+	0x05, 0xd8, 0xb0, 0xf4, 0xed, 0xea, 0xc2, 0xf0,
+	0x31, 0x98, 0x6c, 0xd1, 0x14, 0x25, 0xc0, 0xcb,
+	0x01, 0x74, 0xd0, 0x82, 0xf4, 0x36, 0xf5, 0x41,
+	0xd5, 0xdc, 0xca, 0xc5, 0xbb, 0x98, 0xfe, 0xfc,
+	0x69, 0x21, 0x70, 0xd8, 0xa4, 0x4b, 0xc8, 0xde,
+	0x8f
+};
+static const u8 dec_assoc006[] __initconst = {
+	0x70, 0xd3, 0x33, 0xf3, 0x8b, 0x18, 0x0b
+};
+static const u8 dec_nonce006[] __initconst = {
+	0xdf, 0x51, 0x84, 0x82, 0x42, 0x0c, 0x75, 0x9c
+};
+static const u8 dec_key006[] __initconst = {
+	0x68, 0x7b, 0x8d, 0x8e, 0xe3, 0xc4, 0xdd, 0xae,
+	0xdf, 0x72, 0x7f, 0x53, 0x72, 0x25, 0x1e, 0x78,
+	0x91, 0xcb, 0x69, 0x76, 0x1f, 0x49, 0x93, 0xf9,
+	0x6f, 0x21, 0xcc, 0x39, 0x9c, 0xad, 0xb1, 0x01
+};
+
+static const u8 dec_input007[] __initconst = {
+	0x85, 0x04, 0xc2, 0xed, 0x8d, 0xfd, 0x97, 0x5c,
+	0xd2, 0xb7, 0xe2, 0xc1, 0x6b, 0xa3, 0xba, 0xf8,
+	0xc9, 0x50, 0xc3, 0xc6, 0xa5, 0xe3, 0xa4, 0x7c,
+	0xc3, 0x23, 0x49, 0x5e, 0xa9, 0xb9, 0x32, 0xeb,
+	0x8a, 0x7c, 0xca, 0xe5, 0xec, 0xfb, 0x7c, 0xc0,
+	0xcb, 0x7d, 0xdc, 0x2c, 0x9d, 0x92, 0x55, 0x21,
+	0x0a, 0xc8, 0x43, 0x63, 0x59, 0x0a, 0x31, 0x70,
+	0x82, 0x67, 0x41, 0x03, 0xf8, 0xdf, 0xf2, 0xac,
+	0xa7, 0x02, 0xd4, 0xd5, 0x8a, 0x2d, 0xc8, 0x99,
+	0x19, 0x66, 0xd0, 0xf6, 0x88, 0x2c, 0x77, 0xd9,
+	0xd4, 0x0d, 0x6c, 0xbd, 0x98, 0xde, 0xe7, 0x7f,
+	0xad, 0x7e, 0x8a, 0xfb, 0xe9, 0x4b, 0xe5, 0xf7,
+	0xe5, 0x50, 0xa0, 0x90, 0x3f, 0xd6, 0x22, 0x53,
+	0xe3, 0xfe, 0x1b, 0xcc, 0x79, 0x3b, 0xec, 0x12,
+	0x47, 0x52, 0xa7, 0xd6, 0x04, 0xe3, 0x52, 0xe6,
+	0x93, 0x90, 0x91, 0x32, 0x73, 0x79, 0xb8, 0xd0,
+	0x31, 0xde, 0x1f, 0x9f, 0x2f, 0x05, 0x38, 0x54,
+	0x2f, 0x35, 0x04, 0x39, 0xe0, 0xa7, 0xba, 0xc6,
+	0x52, 0xf6, 0x37, 0x65, 0x4c, 0x07, 0xa9, 0x7e,
+	0xb3, 0x21, 0x6f, 0x74, 0x8c, 0xc9, 0xde, 0xdb,
+	0x65, 0x1b, 0x9b, 0xaa, 0x60, 0xb1, 0x03, 0x30,
+	0x6b, 0xb2, 0x03, 0xc4, 0x1c, 0x04, 0xf8, 0x0f,
+	0x64, 0xaf, 0x46, 0xe4, 0x65, 0x99, 0x49, 0xe2,
+	0xea, 0xce, 0x78, 0x00, 0xd8, 0x8b, 0xd5, 0x2e,
+	0xcf, 0xfc, 0x40, 0x49, 0xe8, 0x58, 0xdc, 0x34,
+	0x9c, 0x8c, 0x61, 0xbf, 0x0a, 0x8e, 0xec, 0x39,
+	0xa9, 0x30, 0x05, 0x5a, 0xd2, 0x56, 0x01, 0xc7,
+	0xda, 0x8f, 0x4e, 0xbb, 0x43, 0xa3, 0x3a, 0xf9,
+	0x15, 0x2a, 0xd0, 0xa0, 0x7a, 0x87, 0x34, 0x82,
+	0xfe, 0x8a, 0xd1, 0x2d, 0x5e, 0xc7, 0xbf, 0x04,
+	0x53, 0x5f, 0x3b, 0x36, 0xd4, 0x25, 0x5c, 0x34,
+	0x7a, 0x8d, 0xd5, 0x05, 0xce, 0x72, 0xca, 0xef,
+	0x7a, 0x4b, 0xbc, 0xb0, 0x10, 0x5c, 0x96, 0x42,
+	0x3a, 0x00, 0x98, 0xcd, 0x15, 0xe8, 0xb7, 0x53
+};
+static const u8 dec_output007[] __initconst = {
+	0x9b, 0x18, 0xdb, 0xdd, 0x9a, 0x0f, 0x3e, 0xa5,
+	0x15, 0x17, 0xde, 0xdf, 0x08, 0x9d, 0x65, 0x0a,
+	0x67, 0x30, 0x12, 0xe2, 0x34, 0x77, 0x4b, 0xc1,
+	0xd9, 0xc6, 0x1f, 0xab, 0xc6, 0x18, 0x50, 0x17,
+	0xa7, 0x9d, 0x3c, 0xa6, 0xc5, 0x35, 0x8c, 0x1c,
+	0xc0, 0xa1, 0x7c, 0x9f, 0x03, 0x89, 0xca, 0xe1,
+	0xe6, 0xe9, 0xd4, 0xd3, 0x88, 0xdb, 0xb4, 0x51,
+	0x9d, 0xec, 0xb4, 0xfc, 0x52, 0xee, 0x6d, 0xf1,
+	0x75, 0x42, 0xc6, 0xfd, 0xbd, 0x7a, 0x8e, 0x86,
+	0xfc, 0x44, 0xb3, 0x4f, 0xf3, 0xea, 0x67, 0x5a,
+	0x41, 0x13, 0xba, 0xb0, 0xdc, 0xe1, 0xd3, 0x2a,
+	0x7c, 0x22, 0xb3, 0xca, 0xac, 0x6a, 0x37, 0x98,
+	0x3e, 0x1d, 0x40, 0x97, 0xf7, 0x9b, 0x1d, 0x36,
+	0x6b, 0xb3, 0x28, 0xbd, 0x60, 0x82, 0x47, 0x34,
+	0xaa, 0x2f, 0x7d, 0xe9, 0xa8, 0x70, 0x81, 0x57,
+	0xd4, 0xb9, 0x77, 0x0a, 0x9d, 0x29, 0xa7, 0x84,
+	0x52, 0x4f, 0xc2, 0x4a, 0x40, 0x3b, 0x3c, 0xd4,
+	0xc9, 0x2a, 0xdb, 0x4a, 0x53, 0xc4, 0xbe, 0x80,
+	0xe9, 0x51, 0x7f, 0x8f, 0xc7, 0xa2, 0xce, 0x82,
+	0x5c, 0x91, 0x1e, 0x74, 0xd9, 0xd0, 0xbd, 0xd5,
+	0xf3, 0xfd, 0xda, 0x4d, 0x25, 0xb4, 0xbb, 0x2d,
+	0xac, 0x2f, 0x3d, 0x71, 0x85, 0x7b, 0xcf, 0x3c,
+	0x7b, 0x3e, 0x0e, 0x22, 0x78, 0x0c, 0x29, 0xbf,
+	0xe4, 0xf4, 0x57, 0xb3, 0xcb, 0x49, 0xa0, 0xfc,
+	0x1e, 0x05, 0x4e, 0x16, 0xbc, 0xd5, 0xa8, 0xa3,
+	0xee, 0x05, 0x35, 0xc6, 0x7c, 0xab, 0x60, 0x14,
+	0x55, 0x1a, 0x8e, 0xc5, 0x88, 0x5d, 0xd5, 0x81,
+	0xc2, 0x81, 0xa5, 0xc4, 0x60, 0xdb, 0xaf, 0x77,
+	0x91, 0xe1, 0xce, 0xa2, 0x7e, 0x7f, 0x42, 0xe3,
+	0xb0, 0x13, 0x1c, 0x1f, 0x25, 0x60, 0x21, 0xe2,
+	0x40, 0x5f, 0x99, 0xb7, 0x73, 0xec, 0x9b, 0x2b,
+	0xf0, 0x65, 0x11, 0xc8, 0xd0, 0x0a, 0x9f, 0xd3
+};
+static const u8 dec_assoc007[] __initconst = { };
+static const u8 dec_nonce007[] __initconst = {
+	0xde, 0x7b, 0xef, 0xc3, 0x65, 0x1b, 0x68, 0xb0
+};
+static const u8 dec_key007[] __initconst = {
+	0x8d, 0xb8, 0x91, 0x48, 0xf0, 0xe7, 0x0a, 0xbd,
+	0xf9, 0x3f, 0xcd, 0xd9, 0xa0, 0x1e, 0x42, 0x4c,
+	0xe7, 0xde, 0x25, 0x3d, 0xa3, 0xd7, 0x05, 0x80,
+	0x8d, 0xf2, 0x82, 0xac, 0x44, 0x16, 0x51, 0x01
+};
+
+static const u8 dec_input008[] __initconst = {
+	0x14, 0xf6, 0x41, 0x37, 0xa6, 0xd4, 0x27, 0xcd,
+	0xdb, 0x06, 0x3e, 0x9a, 0x4e, 0xab, 0xd5, 0xb1,
+	0x1e, 0x6b, 0xd2, 0xbc, 0x11, 0xf4, 0x28, 0x93,
+	0x63, 0x54, 0xef, 0xbb, 0x5e, 0x1d, 0x3a, 0x1d,
+	0x37, 0x3c, 0x0a, 0x6c, 0x1e, 0xc2, 0xd1, 0x2c,
+	0xb5, 0xa3, 0xb5, 0x7b, 0xb8, 0x8f, 0x25, 0xa6,
+	0x1b, 0x61, 0x1c, 0xec, 0x28, 0x58, 0x26, 0xa4,
+	0xa8, 0x33, 0x28, 0x25, 0x5c, 0x45, 0x05, 0xe5,
+	0x6c, 0x99, 0xe5, 0x45, 0xc4, 0xa2, 0x03, 0x84,
+	0x03, 0x73, 0x1e, 0x8c, 0x49, 0xac, 0x20, 0xdd,
+	0x8d, 0xb3, 0xc4, 0xf5, 0xe7, 0x4f, 0xf1, 0xed,
+	0xa1, 0x98, 0xde, 0xa4, 0x96, 0xdd, 0x2f, 0xab,
+	0xab, 0x97, 0xcf, 0x3e, 0xd2, 0x9e, 0xb8, 0x13,
+	0x07, 0x28, 0x29, 0x19, 0xaf, 0xfd, 0xf2, 0x49,
+	0x43, 0xea, 0x49, 0x26, 0x91, 0xc1, 0x07, 0xd6,
+	0xbb, 0x81, 0x75, 0x35, 0x0d, 0x24, 0x7f, 0xc8,
+	0xda, 0xd4, 0xb7, 0xeb, 0xe8, 0x5c, 0x09, 0xa2,
+	0x2f, 0xdc, 0x28, 0x7d, 0x3a, 0x03, 0xfa, 0x94,
+	0xb5, 0x1d, 0x17, 0x99, 0x36, 0xc3, 0x1c, 0x18,
+	0x34, 0xe3, 0x9f, 0xf5, 0x55, 0x7c, 0xb0, 0x60,
+	0x9d, 0xff, 0xac, 0xd4, 0x61, 0xf2, 0xad, 0xf8,
+	0xce, 0xc7, 0xbe, 0x5c, 0xd2, 0x95, 0xa8, 0x4b,
+	0x77, 0x13, 0x19, 0x59, 0x26, 0xc9, 0xb7, 0x8f,
+	0x6a, 0xcb, 0x2d, 0x37, 0x91, 0xea, 0x92, 0x9c,
+	0x94, 0x5b, 0xda, 0x0b, 0xce, 0xfe, 0x30, 0x20,
+	0xf8, 0x51, 0xad, 0xf2, 0xbe, 0xe7, 0xc7, 0xff,
+	0xb3, 0x33, 0x91, 0x6a, 0xc9, 0x1a, 0x41, 0xc9,
+	0x0f, 0xf3, 0x10, 0x0e, 0xfd, 0x53, 0xff, 0x6c,
+	0x16, 0x52, 0xd9, 0xf3, 0xf7, 0x98, 0x2e, 0xc9,
+	0x07, 0x31, 0x2c, 0x0c, 0x72, 0xd7, 0xc5, 0xc6,
+	0x08, 0x2a, 0x7b, 0xda, 0xbd, 0x7e, 0x02, 0xea,
+	0x1a, 0xbb, 0xf2, 0x04, 0x27, 0x61, 0x28, 0x8e,
+	0xf5, 0x04, 0x03, 0x1f, 0x4c, 0x07, 0x55, 0x82,
+	0xec, 0x1e, 0xd7, 0x8b, 0x2f, 0x65, 0x56, 0xd1,
+	0xd9, 0x1e, 0x3c, 0xe9, 0x1f, 0x5e, 0x98, 0x70,
+	0x38, 0x4a, 0x8c, 0x49, 0xc5, 0x43, 0xa0, 0xa1,
+	0x8b, 0x74, 0x9d, 0x4c, 0x62, 0x0d, 0x10, 0x0c,
+	0xf4, 0x6c, 0x8f, 0xe0, 0xaa, 0x9a, 0x8d, 0xb7,
+	0xe0, 0xbe, 0x4c, 0x87, 0xf1, 0x98, 0x2f, 0xcc,
+	0xed, 0xc0, 0x52, 0x29, 0xdc, 0x83, 0xf8, 0xfc,
+	0x2c, 0x0e, 0xa8, 0x51, 0x4d, 0x80, 0x0d, 0xa3,
+	0xfe, 0xd8, 0x37, 0xe7, 0x41, 0x24, 0xfc, 0xfb,
+	0x75, 0xe3, 0x71, 0x7b, 0x57, 0x45, 0xf5, 0x97,
+	0x73, 0x65, 0x63, 0x14, 0x74, 0xb8, 0x82, 0x9f,
+	0xf8, 0x60, 0x2f, 0x8a, 0xf2, 0x4e, 0xf1, 0x39,
+	0xda, 0x33, 0x91, 0xf8, 0x36, 0xe0, 0x8d, 0x3f,
+	0x1f, 0x3b, 0x56, 0xdc, 0xa0, 0x8f, 0x3c, 0x9d,
+	0x71, 0x52, 0xa7, 0xb8, 0xc0, 0xa5, 0xc6, 0xa2,
+	0x73, 0xda, 0xf4, 0x4b, 0x74, 0x5b, 0x00, 0x3d,
+	0x99, 0xd7, 0x96, 0xba, 0xe6, 0xe1, 0xa6, 0x96,
+	0x38, 0xad, 0xb3, 0xc0, 0xd2, 0xba, 0x91, 0x6b,
+	0xf9, 0x19, 0xdd, 0x3b, 0xbe, 0xbe, 0x9c, 0x20,
+	0x50, 0xba, 0xa1, 0xd0, 0xce, 0x11, 0xbd, 0x95,
+	0xd8, 0xd1, 0xdd, 0x33, 0x85, 0x74, 0xdc, 0xdb,
+	0x66, 0x76, 0x44, 0xdc, 0x03, 0x74, 0x48, 0x35,
+	0x98, 0xb1, 0x18, 0x47, 0x94, 0x7d, 0xff, 0x62,
+	0xe4, 0x58, 0x78, 0xab, 0xed, 0x95, 0x36, 0xd9,
+	0x84, 0x91, 0x82, 0x64, 0x41, 0xbb, 0x58, 0xe6,
+	0x1c, 0x20, 0x6d, 0x15, 0x6b, 0x13, 0x96, 0xe8,
+	0x35, 0x7f, 0xdc, 0x40, 0x2c, 0xe9, 0xbc, 0x8a,
+	0x4f, 0x92, 0xec, 0x06, 0x2d, 0x50, 0xdf, 0x93,
+	0x5d, 0x65, 0x5a, 0xa8, 0xfc, 0x20, 0x50, 0x14,
+	0xa9, 0x8a, 0x7e, 0x1d, 0x08, 0x1f, 0xe2, 0x99,
+	0xd0, 0xbe, 0xfb, 0x3a, 0x21, 0x9d, 0xad, 0x86,
+	0x54, 0xfd, 0x0d, 0x98, 0x1c, 0x5a, 0x6f, 0x1f,
+	0x9a, 0x40, 0xcd, 0xa2, 0xff, 0x6a, 0xf1, 0x54
+};
+static const u8 dec_output008[] __initconst = {
+	0xc3, 0x09, 0x94, 0x62, 0xe6, 0x46, 0x2e, 0x10,
+	0xbe, 0x00, 0xe4, 0xfc, 0xf3, 0x40, 0xa3, 0xe2,
+	0x0f, 0xc2, 0x8b, 0x28, 0xdc, 0xba, 0xb4, 0x3c,
+	0xe4, 0x21, 0x58, 0x61, 0xcd, 0x8b, 0xcd, 0xfb,
+	0xac, 0x94, 0xa1, 0x45, 0xf5, 0x1c, 0xe1, 0x12,
+	0xe0, 0x3b, 0x67, 0x21, 0x54, 0x5e, 0x8c, 0xaa,
+	0xcf, 0xdb, 0xb4, 0x51, 0xd4, 0x13, 0xda, 0xe6,
+	0x83, 0x89, 0xb6, 0x92, 0xe9, 0x21, 0x76, 0xa4,
+	0x93, 0x7d, 0x0e, 0xfd, 0x96, 0x36, 0x03, 0x91,
+	0x43, 0x5c, 0x92, 0x49, 0x62, 0x61, 0x7b, 0xeb,
+	0x43, 0x89, 0xb8, 0x12, 0x20, 0x43, 0xd4, 0x47,
+	0x06, 0x84, 0xee, 0x47, 0xe9, 0x8a, 0x73, 0x15,
+	0x0f, 0x72, 0xcf, 0xed, 0xce, 0x96, 0xb2, 0x7f,
+	0x21, 0x45, 0x76, 0xeb, 0x26, 0x28, 0x83, 0x6a,
+	0xad, 0xaa, 0xa6, 0x81, 0xd8, 0x55, 0xb1, 0xa3,
+	0x85, 0xb3, 0x0c, 0xdf, 0xf1, 0x69, 0x2d, 0x97,
+	0x05, 0x2a, 0xbc, 0x7c, 0x7b, 0x25, 0xf8, 0x80,
+	0x9d, 0x39, 0x25, 0xf3, 0x62, 0xf0, 0x66, 0x5e,
+	0xf4, 0xa0, 0xcf, 0xd8, 0xfd, 0x4f, 0xb1, 0x1f,
+	0x60, 0x3a, 0x08, 0x47, 0xaf, 0xe1, 0xf6, 0x10,
+	0x77, 0x09, 0xa7, 0x27, 0x8f, 0x9a, 0x97, 0x5a,
+	0x26, 0xfa, 0xfe, 0x41, 0x32, 0x83, 0x10, 0xe0,
+	0x1d, 0xbf, 0x64, 0x0d, 0xf4, 0x1c, 0x32, 0x35,
+	0xe5, 0x1b, 0x36, 0xef, 0xd4, 0x4a, 0x93, 0x4d,
+	0x00, 0x7c, 0xec, 0x02, 0x07, 0x8b, 0x5d, 0x7d,
+	0x1b, 0x0e, 0xd1, 0xa6, 0xa5, 0x5d, 0x7d, 0x57,
+	0x88, 0xa8, 0xcc, 0x81, 0xb4, 0x86, 0x4e, 0xb4,
+	0x40, 0xe9, 0x1d, 0xc3, 0xb1, 0x24, 0x3e, 0x7f,
+	0xcc, 0x8a, 0x24, 0x9b, 0xdf, 0x6d, 0xf0, 0x39,
+	0x69, 0x3e, 0x4c, 0xc0, 0x96, 0xe4, 0x13, 0xda,
+	0x90, 0xda, 0xf4, 0x95, 0x66, 0x8b, 0x17, 0x17,
+	0xfe, 0x39, 0x43, 0x25, 0xaa, 0xda, 0xa0, 0x43,
+	0x3c, 0xb1, 0x41, 0x02, 0xa3, 0xf0, 0xa7, 0x19,
+	0x59, 0xbc, 0x1d, 0x7d, 0x6c, 0x6d, 0x91, 0x09,
+	0x5c, 0xb7, 0x5b, 0x01, 0xd1, 0x6f, 0x17, 0x21,
+	0x97, 0xbf, 0x89, 0x71, 0xa5, 0xb0, 0x6e, 0x07,
+	0x45, 0xfd, 0x9d, 0xea, 0x07, 0xf6, 0x7a, 0x9f,
+	0x10, 0x18, 0x22, 0x30, 0x73, 0xac, 0xd4, 0x6b,
+	0x72, 0x44, 0xed, 0xd9, 0x19, 0x9b, 0x2d, 0x4a,
+	0x41, 0xdd, 0xd1, 0x85, 0x5e, 0x37, 0x19, 0xed,
+	0xd2, 0x15, 0x8f, 0x5e, 0x91, 0xdb, 0x33, 0xf2,
+	0xe4, 0xdb, 0xff, 0x98, 0xfb, 0xa3, 0xb5, 0xca,
+	0x21, 0x69, 0x08, 0xe7, 0x8a, 0xdf, 0x90, 0xff,
+	0x3e, 0xe9, 0x20, 0x86, 0x3c, 0xe9, 0xfc, 0x0b,
+	0xfe, 0x5c, 0x61, 0xaa, 0x13, 0x92, 0x7f, 0x7b,
+	0xec, 0xe0, 0x6d, 0xa8, 0x23, 0x22, 0xf6, 0x6b,
+	0x77, 0xc4, 0xfe, 0x40, 0x07, 0x3b, 0xb6, 0xf6,
+	0x8e, 0x5f, 0xd4, 0xb9, 0xb7, 0x0f, 0x21, 0x04,
+	0xef, 0x83, 0x63, 0x91, 0x69, 0x40, 0xa3, 0x48,
+	0x5c, 0xd2, 0x60, 0xf9, 0x4f, 0x6c, 0x47, 0x8b,
+	0x3b, 0xb1, 0x9f, 0x8e, 0xee, 0x16, 0x8a, 0x13,
+	0xfc, 0x46, 0x17, 0xc3, 0xc3, 0x32, 0x56, 0xf8,
+	0x3c, 0x85, 0x3a, 0xb6, 0x3e, 0xaa, 0x89, 0x4f,
+	0xb3, 0xdf, 0x38, 0xfd, 0xf1, 0xe4, 0x3a, 0xc0,
+	0xe6, 0x58, 0xb5, 0x8f, 0xc5, 0x29, 0xa2, 0x92,
+	0x4a, 0xb6, 0xa0, 0x34, 0x7f, 0xab, 0xb5, 0x8a,
+	0x90, 0xa1, 0xdb, 0x4d, 0xca, 0xb6, 0x2c, 0x41,
+	0x3c, 0xf7, 0x2b, 0x21, 0xc3, 0xfd, 0xf4, 0x17,
+	0x5c, 0xb5, 0x33, 0x17, 0x68, 0x2b, 0x08, 0x30,
+	0xf3, 0xf7, 0x30, 0x3c, 0x96, 0xe6, 0x6a, 0x20,
+	0x97, 0xe7, 0x4d, 0x10, 0x5f, 0x47, 0x5f, 0x49,
+	0x96, 0x09, 0xf0, 0x27, 0x91, 0xc8, 0xf8, 0x5a,
+	0x2e, 0x79, 0xb5, 0xe2, 0xb8, 0xe8, 0xb9, 0x7b,
+	0xd5, 0x10, 0xcb, 0xff, 0x5d, 0x14, 0x73, 0xf3
+};
+static const u8 dec_assoc008[] __initconst = { };
+static const u8 dec_nonce008[] __initconst = {
+	0x0e, 0x0d, 0x57, 0xbb, 0x7b, 0x40, 0x54, 0x02
+};
+static const u8 dec_key008[] __initconst = {
+	0xf2, 0xaa, 0x4f, 0x99, 0xfd, 0x3e, 0xa8, 0x53,
+	0xc1, 0x44, 0xe9, 0x81, 0x18, 0xdc, 0xf5, 0xf0,
+	0x3e, 0x44, 0x15, 0x59, 0xe0, 0xc5, 0x44, 0x86,
+	0xc3, 0x91, 0xa8, 0x75, 0xc0, 0x12, 0x46, 0xba
+};
+
+static const u8 dec_input009[] __initconst = {
+	0xfd, 0x81, 0x8d, 0xd0, 0x3d, 0xb4, 0xd5, 0xdf,
+	0xd3, 0x42, 0x47, 0x5a, 0x6d, 0x19, 0x27, 0x66,
+	0x4b, 0x2e, 0x0c, 0x27, 0x9c, 0x96, 0x4c, 0x72,
+	0x02, 0xa3, 0x65, 0xc3, 0xb3, 0x6f, 0x2e, 0xbd,
+	0x63, 0x8a, 0x4a, 0x5d, 0x29, 0xa2, 0xd0, 0x28,
+	0x48, 0xc5, 0x3d, 0x98, 0xa3, 0xbc, 0xe0, 0xbe,
+	0x3b, 0x3f, 0xe6, 0x8a, 0xa4, 0x7f, 0x53, 0x06,
+	0xfa, 0x7f, 0x27, 0x76, 0x72, 0x31, 0xa1, 0xf5,
+	0xd6, 0x0c, 0x52, 0x47, 0xba, 0xcd, 0x4f, 0xd7,
+	0xeb, 0x05, 0x48, 0x0d, 0x7c, 0x35, 0x4a, 0x09,
+	0xc9, 0x76, 0x71, 0x02, 0xa3, 0xfb, 0xb7, 0x1a,
+	0x65, 0xb7, 0xed, 0x98, 0xc6, 0x30, 0x8a, 0x00,
+	0xae, 0xa1, 0x31, 0xe5, 0xb5, 0x9e, 0x6d, 0x62,
+	0xda, 0xda, 0x07, 0x0f, 0x38, 0x38, 0xd3, 0xcb,
+	0xc1, 0xb0, 0xad, 0xec, 0x72, 0xec, 0xb1, 0xa2,
+	0x7b, 0x59, 0xf3, 0x3d, 0x2b, 0xef, 0xcd, 0x28,
+	0x5b, 0x83, 0xcc, 0x18, 0x91, 0x88, 0xb0, 0x2e,
+	0xf9, 0x29, 0x31, 0x18, 0xf9, 0x4e, 0xe9, 0x0a,
+	0x91, 0x92, 0x9f, 0xae, 0x2d, 0xad, 0xf4, 0xe6,
+	0x1a, 0xe2, 0xa4, 0xee, 0x47, 0x15, 0xbf, 0x83,
+	0x6e, 0xd7, 0x72, 0x12, 0x3b, 0x2d, 0x24, 0xe9,
+	0xb2, 0x55, 0xcb, 0x3c, 0x10, 0xf0, 0x24, 0x8a,
+	0x4a, 0x02, 0xea, 0x90, 0x25, 0xf0, 0xb4, 0x79,
+	0x3a, 0xef, 0x6e, 0xf5, 0x52, 0xdf, 0xb0, 0x0a,
+	0xcd, 0x24, 0x1c, 0xd3, 0x2e, 0x22, 0x74, 0xea,
+	0x21, 0x6f, 0xe9, 0xbd, 0xc8, 0x3e, 0x36, 0x5b,
+	0x19, 0xf1, 0xca, 0x99, 0x0a, 0xb4, 0xa7, 0x52,
+	0x1a, 0x4e, 0xf2, 0xad, 0x8d, 0x56, 0x85, 0xbb,
+	0x64, 0x89, 0xba, 0x26, 0xf9, 0xc7, 0xe1, 0x89,
+	0x19, 0x22, 0x77, 0xc3, 0xa8, 0xfc, 0xff, 0xad,
+	0xfe, 0xb9, 0x48, 0xae, 0x12, 0x30, 0x9f, 0x19,
+	0xfb, 0x1b, 0xef, 0x14, 0x87, 0x8a, 0x78, 0x71,
+	0xf3, 0xf4, 0xb7, 0x00, 0x9c, 0x1d, 0xb5, 0x3d,
+	0x49, 0x00, 0x0c, 0x06, 0xd4, 0x50, 0xf9, 0x54,
+	0x45, 0xb2, 0x5b, 0x43, 0xdb, 0x6d, 0xcf, 0x1a,
+	0xe9, 0x7a, 0x7a, 0xcf, 0xfc, 0x8a, 0x4e, 0x4d,
+	0x0b, 0x07, 0x63, 0x28, 0xd8, 0xe7, 0x08, 0x95,
+	0xdf, 0xa6, 0x72, 0x93, 0x2e, 0xbb, 0xa0, 0x42,
+	0x89, 0x16, 0xf1, 0xd9, 0x0c, 0xf9, 0xa1, 0x16,
+	0xfd, 0xd9, 0x03, 0xb4, 0x3b, 0x8a, 0xf5, 0xf6,
+	0xe7, 0x6b, 0x2e, 0x8e, 0x4c, 0x3d, 0xe2, 0xaf,
+	0x08, 0x45, 0x03, 0xff, 0x09, 0xb6, 0xeb, 0x2d,
+	0xc6, 0x1b, 0x88, 0x94, 0xac, 0x3e, 0xf1, 0x9f,
+	0x0e, 0x0e, 0x2b, 0xd5, 0x00, 0x4d, 0x3f, 0x3b,
+	0x53, 0xae, 0xaf, 0x1c, 0x33, 0x5f, 0x55, 0x6e,
+	0x8d, 0xaf, 0x05, 0x7a, 0x10, 0x34, 0xc9, 0xf4,
+	0x66, 0xcb, 0x62, 0x12, 0xa6, 0xee, 0xe8, 0x1c,
+	0x5d, 0x12, 0x86, 0xdb, 0x6f, 0x1c, 0x33, 0xc4,
+	0x1c, 0xda, 0x82, 0x2d, 0x3b, 0x59, 0xfe, 0xb1,
+	0xa4, 0x59, 0x41, 0x86, 0xd0, 0xef, 0xae, 0xfb,
+	0xda, 0x6d, 0x11, 0xb8, 0xca, 0xe9, 0x6e, 0xff,
+	0xf7, 0xa9, 0xd9, 0x70, 0x30, 0xfc, 0x53, 0xe2,
+	0xd7, 0xa2, 0x4e, 0xc7, 0x91, 0xd9, 0x07, 0x06,
+	0xaa, 0xdd, 0xb0, 0x59, 0x28, 0x1d, 0x00, 0x66,
+	0xc5, 0x54, 0xc2, 0xfc, 0x06, 0xda, 0x05, 0x90,
+	0x52, 0x1d, 0x37, 0x66, 0xee, 0xf0, 0xb2, 0x55,
+	0x8a, 0x5d, 0xd2, 0x38, 0x86, 0x94, 0x9b, 0xfc,
+	0x10, 0x4c, 0xa1, 0xb9, 0x64, 0x3e, 0x44, 0xb8,
+	0x5f, 0xb0, 0x0c, 0xec, 0xe0, 0xc9, 0xe5, 0x62,
+	0x75, 0x3f, 0x09, 0xd5, 0xf5, 0xd9, 0x26, 0xba,
+	0x9e, 0xd2, 0xf4, 0xb9, 0x48, 0x0a, 0xbc, 0xa2,
+	0xd6, 0x7c, 0x36, 0x11, 0x7d, 0x26, 0x81, 0x89,
+	0xcf, 0xa4, 0xad, 0x73, 0x0e, 0xee, 0xcc, 0x06,
+	0xa9, 0xdb, 0xb1, 0xfd, 0xfb, 0x09, 0x7f, 0x90,
+	0x42, 0x37, 0x2f, 0xe1, 0x9c, 0x0f, 0x6f, 0xcf,
+	0x43, 0xb5, 0xd9, 0x90, 0xe1, 0x85, 0xf5, 0xa8,
+	0xae
+};
+static const u8 dec_output009[] __initconst = {
+	0xe6, 0xc3, 0xdb, 0x63, 0x55, 0x15, 0xe3, 0x5b,
+	0xb7, 0x4b, 0x27, 0x8b, 0x5a, 0xdd, 0xc2, 0xe8,
+	0x3a, 0x6b, 0xd7, 0x81, 0x96, 0x35, 0x97, 0xca,
+	0xd7, 0x68, 0xe8, 0xef, 0xce, 0xab, 0xda, 0x09,
+	0x6e, 0xd6, 0x8e, 0xcb, 0x55, 0xb5, 0xe1, 0xe5,
+	0x57, 0xfd, 0xc4, 0xe3, 0xe0, 0x18, 0x4f, 0x85,
+	0xf5, 0x3f, 0x7e, 0x4b, 0x88, 0xc9, 0x52, 0x44,
+	0x0f, 0xea, 0xaf, 0x1f, 0x71, 0x48, 0x9f, 0x97,
+	0x6d, 0xb9, 0x6f, 0x00, 0xa6, 0xde, 0x2b, 0x77,
+	0x8b, 0x15, 0xad, 0x10, 0xa0, 0x2b, 0x7b, 0x41,
+	0x90, 0x03, 0x2d, 0x69, 0xae, 0xcc, 0x77, 0x7c,
+	0xa5, 0x9d, 0x29, 0x22, 0xc2, 0xea, 0xb4, 0x00,
+	0x1a, 0xd2, 0x7a, 0x98, 0x8a, 0xf9, 0xf7, 0x82,
+	0xb0, 0xab, 0xd8, 0xa6, 0x94, 0x8d, 0x58, 0x2f,
+	0x01, 0x9e, 0x00, 0x20, 0xfc, 0x49, 0xdc, 0x0e,
+	0x03, 0xe8, 0x45, 0x10, 0xd6, 0xa8, 0xda, 0x55,
+	0x10, 0x9a, 0xdf, 0x67, 0x22, 0x8b, 0x43, 0xab,
+	0x00, 0xbb, 0x02, 0xc8, 0xdd, 0x7b, 0x97, 0x17,
+	0xd7, 0x1d, 0x9e, 0x02, 0x5e, 0x48, 0xde, 0x8e,
+	0xcf, 0x99, 0x07, 0x95, 0x92, 0x3c, 0x5f, 0x9f,
+	0xc5, 0x8a, 0xc0, 0x23, 0xaa, 0xd5, 0x8c, 0x82,
+	0x6e, 0x16, 0x92, 0xb1, 0x12, 0x17, 0x07, 0xc3,
+	0xfb, 0x36, 0xf5, 0x6c, 0x35, 0xd6, 0x06, 0x1f,
+	0x9f, 0xa7, 0x94, 0xa2, 0x38, 0x63, 0x9c, 0xb0,
+	0x71, 0xb3, 0xa5, 0xd2, 0xd8, 0xba, 0x9f, 0x08,
+	0x01, 0xb3, 0xff, 0x04, 0x97, 0x73, 0x45, 0x1b,
+	0xd5, 0xa9, 0x9c, 0x80, 0xaf, 0x04, 0x9a, 0x85,
+	0xdb, 0x32, 0x5b, 0x5d, 0x1a, 0xc1, 0x36, 0x28,
+	0x10, 0x79, 0xf1, 0x3c, 0xbf, 0x1a, 0x41, 0x5c,
+	0x4e, 0xdf, 0xb2, 0x7c, 0x79, 0x3b, 0x7a, 0x62,
+	0x3d, 0x4b, 0xc9, 0x9b, 0x2a, 0x2e, 0x7c, 0xa2,
+	0xb1, 0x11, 0x98, 0xa7, 0x34, 0x1a, 0x00, 0xf3,
+	0xd1, 0xbc, 0x18, 0x22, 0xba, 0x02, 0x56, 0x62,
+	0x31, 0x10, 0x11, 0x6d, 0xe0, 0x54, 0x9d, 0x40,
+	0x1f, 0x26, 0x80, 0x41, 0xca, 0x3f, 0x68, 0x0f,
+	0x32, 0x1d, 0x0a, 0x8e, 0x79, 0xd8, 0xa4, 0x1b,
+	0x29, 0x1c, 0x90, 0x8e, 0xc5, 0xe3, 0xb4, 0x91,
+	0x37, 0x9a, 0x97, 0x86, 0x99, 0xd5, 0x09, 0xc5,
+	0xbb, 0xa3, 0x3f, 0x21, 0x29, 0x82, 0x14, 0x5c,
+	0xab, 0x25, 0xfb, 0xf2, 0x4f, 0x58, 0x26, 0xd4,
+	0x83, 0xaa, 0x66, 0x89, 0x67, 0x7e, 0xc0, 0x49,
+	0xe1, 0x11, 0x10, 0x7f, 0x7a, 0xda, 0x29, 0x04,
+	0xff, 0xf0, 0xcb, 0x09, 0x7c, 0x9d, 0xfa, 0x03,
+	0x6f, 0x81, 0x09, 0x31, 0x60, 0xfb, 0x08, 0xfa,
+	0x74, 0xd3, 0x64, 0x44, 0x7c, 0x55, 0x85, 0xec,
+	0x9c, 0x6e, 0x25, 0xb7, 0x6c, 0xc5, 0x37, 0xb6,
+	0x83, 0x87, 0x72, 0x95, 0x8b, 0x9d, 0xe1, 0x69,
+	0x5c, 0x31, 0x95, 0x42, 0xa6, 0x2c, 0xd1, 0x36,
+	0x47, 0x1f, 0xec, 0x54, 0xab, 0xa2, 0x1c, 0xd8,
+	0x00, 0xcc, 0xbc, 0x0d, 0x65, 0xe2, 0x67, 0xbf,
+	0xbc, 0xea, 0xee, 0x9e, 0xe4, 0x36, 0x95, 0xbe,
+	0x73, 0xd9, 0xa6, 0xd9, 0x0f, 0xa0, 0xcc, 0x82,
+	0x76, 0x26, 0xad, 0x5b, 0x58, 0x6c, 0x4e, 0xab,
+	0x29, 0x64, 0xd3, 0xd9, 0xa9, 0x08, 0x8c, 0x1d,
+	0xa1, 0x4f, 0x80, 0xd8, 0x3f, 0x94, 0xfb, 0xd3,
+	0x7b, 0xfc, 0xd1, 0x2b, 0xc3, 0x21, 0xeb, 0xe5,
+	0x1c, 0x84, 0x23, 0x7f, 0x4b, 0xfa, 0xdb, 0x34,
+	0x18, 0xa2, 0xc2, 0xe5, 0x13, 0xfe, 0x6c, 0x49,
+	0x81, 0xd2, 0x73, 0xe7, 0xe2, 0xd7, 0xe4, 0x4f,
+	0x4b, 0x08, 0x6e, 0xb1, 0x12, 0x22, 0x10, 0x9d,
+	0xac, 0x51, 0x1e, 0x17, 0xd9, 0x8a, 0x0b, 0x42,
+	0x88, 0x16, 0x81, 0x37, 0x7c, 0x6a, 0xf7, 0xef,
+	0x2d, 0xe3, 0xd9, 0xf8, 0x5f, 0xe0, 0x53, 0x27,
+	0x74, 0xb9, 0xe2, 0xd6, 0x1c, 0x80, 0x2c, 0x52,
+	0x65
+};
+static const u8 dec_assoc009[] __initconst = {
+	0x5a, 0x27, 0xff, 0xeb, 0xdf, 0x84, 0xb2, 0x9e,
+	0xef
+};
+static const u8 dec_nonce009[] __initconst = {
+	0xef, 0x2d, 0x63, 0xee, 0x6b, 0x80, 0x8b, 0x78
+};
+static const u8 dec_key009[] __initconst = {
+	0xea, 0xbc, 0x56, 0x99, 0xe3, 0x50, 0xff, 0xc5,
+	0xcc, 0x1a, 0xd7, 0xc1, 0x57, 0x72, 0xea, 0x86,
+	0x5b, 0x89, 0x88, 0x61, 0x3d, 0x2f, 0x9b, 0xb2,
+	0xe7, 0x9c, 0xec, 0x74, 0x6e, 0x3e, 0xf4, 0x3b
+};
+
+static const u8 dec_input010[] __initconst = {
+	0xe5, 0x26, 0xa4, 0x3d, 0xbd, 0x33, 0xd0, 0x4b,
+	0x6f, 0x05, 0xa7, 0x6e, 0x12, 0x7a, 0xd2, 0x74,
+	0xa6, 0xdd, 0xbd, 0x95, 0xeb, 0xf9, 0xa4, 0xf1,
+	0x59, 0x93, 0x91, 0x70, 0xd9, 0xfe, 0x9a, 0xcd,
+	0x53, 0x1f, 0x3a, 0xab, 0xa6, 0x7c, 0x9f, 0xa6,
+	0x9e, 0xbd, 0x99, 0xd9, 0xb5, 0x97, 0x44, 0xd5,
+	0x14, 0x48, 0x4d, 0x9d, 0xc0, 0xd0, 0x05, 0x96,
+	0xeb, 0x4c, 0x78, 0x55, 0x09, 0x08, 0x01, 0x02,
+	0x30, 0x90, 0x7b, 0x96, 0x7a, 0x7b, 0x5f, 0x30,
+	0x41, 0x24, 0xce, 0x68, 0x61, 0x49, 0x86, 0x57,
+	0x82, 0xdd, 0x53, 0x1c, 0x51, 0x28, 0x2b, 0x53,
+	0x6e, 0x2d, 0xc2, 0x20, 0x4c, 0xdd, 0x8f, 0x65,
+	0x10, 0x20, 0x50, 0xdd, 0x9d, 0x50, 0xe5, 0x71,
+	0x40, 0x53, 0x69, 0xfc, 0x77, 0x48, 0x11, 0xb9,
+	0xde, 0xa4, 0x8d, 0x58, 0xe4, 0xa6, 0x1a, 0x18,
+	0x47, 0x81, 0x7e, 0xfc, 0xdd, 0xf6, 0xef, 0xce,
+	0x2f, 0x43, 0x68, 0xd6, 0x06, 0xe2, 0x74, 0x6a,
+	0xad, 0x90, 0xf5, 0x37, 0xf3, 0x3d, 0x82, 0x69,
+	0x40, 0xe9, 0x6b, 0xa7, 0x3d, 0xa8, 0x1e, 0xd2,
+	0x02, 0x7c, 0xb7, 0x9b, 0xe4, 0xda, 0x8f, 0x95,
+	0x06, 0xc5, 0xdf, 0x73, 0xa3, 0x20, 0x9a, 0x49,
+	0xde, 0x9c, 0xbc, 0xee, 0x14, 0x3f, 0x81, 0x5e,
+	0xf8, 0x3b, 0x59, 0x3c, 0xe1, 0x68, 0x12, 0x5a,
+	0x3a, 0x76, 0x3a, 0x3f, 0xf7, 0x87, 0x33, 0x0a,
+	0x01, 0xb8, 0xd4, 0xed, 0xb6, 0xbe, 0x94, 0x5e,
+	0x70, 0x40, 0x56, 0x67, 0x1f, 0x50, 0x44, 0x19,
+	0xce, 0x82, 0x70, 0x10, 0x87, 0x13, 0x20, 0x0b,
+	0x4c, 0x5a, 0xb6, 0xf6, 0xa7, 0xae, 0x81, 0x75,
+	0x01, 0x81, 0xe6, 0x4b, 0x57, 0x7c, 0xdd, 0x6d,
+	0xf8, 0x1c, 0x29, 0x32, 0xf7, 0xda, 0x3c, 0x2d,
+	0xf8, 0x9b, 0x25, 0x6e, 0x00, 0xb4, 0xf7, 0x2f,
+	0xf7, 0x04, 0xf7, 0xa1, 0x56, 0xac, 0x4f, 0x1a,
+	0x64, 0xb8, 0x47, 0x55, 0x18, 0x7b, 0x07, 0x4d,
+	0xbd, 0x47, 0x24, 0x80, 0x5d, 0xa2, 0x70, 0xc5,
+	0xdd, 0x8e, 0x82, 0xd4, 0xeb, 0xec, 0xb2, 0x0c,
+	0x39, 0xd2, 0x97, 0xc1, 0xcb, 0xeb, 0xf4, 0x77,
+	0x59, 0xb4, 0x87, 0xef, 0xcb, 0x43, 0x2d, 0x46,
+	0x54, 0xd1, 0xa7, 0xd7, 0x15, 0x99, 0x0a, 0x43,
+	0xa1, 0xe0, 0x99, 0x33, 0x71, 0xc1, 0xed, 0xfe,
+	0x72, 0x46, 0x33, 0x8e, 0x91, 0x08, 0x9f, 0xc8,
+	0x2e, 0xca, 0xfa, 0xdc, 0x59, 0xd5, 0xc3, 0x76,
+	0x84, 0x9f, 0xa3, 0x37, 0x68, 0xc3, 0xf0, 0x47,
+	0x2c, 0x68, 0xdb, 0x5e, 0xc3, 0x49, 0x4c, 0xe8,
+	0x92, 0x85, 0xe2, 0x23, 0xd3, 0x3f, 0xad, 0x32,
+	0xe5, 0x2b, 0x82, 0xd7, 0x8f, 0x99, 0x0a, 0x59,
+	0x5c, 0x45, 0xd9, 0xb4, 0x51, 0x52, 0xc2, 0xae,
+	0xbf, 0x80, 0xcf, 0xc9, 0xc9, 0x51, 0x24, 0x2a,
+	0x3b, 0x3a, 0x4d, 0xae, 0xeb, 0xbd, 0x22, 0xc3,
+	0x0e, 0x0f, 0x59, 0x25, 0x92, 0x17, 0xe9, 0x74,
+	0xc7, 0x8b, 0x70, 0x70, 0x36, 0x55, 0x95, 0x75,
+	0x4b, 0xad, 0x61, 0x2b, 0x09, 0xbc, 0x82, 0xf2,
+	0x6e, 0x94, 0x43, 0xae, 0xc3, 0xd5, 0xcd, 0x8e,
+	0xfe, 0x5b, 0x9a, 0x88, 0x43, 0x01, 0x75, 0xb2,
+	0x23, 0x09, 0xf7, 0x89, 0x83, 0xe7, 0xfa, 0xf9,
+	0xb4, 0x9b, 0xf8, 0xef, 0xbd, 0x1c, 0x92, 0xc1,
+	0xda, 0x7e, 0xfe, 0x05, 0xba, 0x5a, 0xcd, 0x07,
+	0x6a, 0x78, 0x9e, 0x5d, 0xfb, 0x11, 0x2f, 0x79,
+	0x38, 0xb6, 0xc2, 0x5b, 0x6b, 0x51, 0xb4, 0x71,
+	0xdd, 0xf7, 0x2a, 0xe4, 0xf4, 0x72, 0x76, 0xad,
+	0xc2, 0xdd, 0x64, 0x5d, 0x79, 0xb6, 0xf5, 0x7a,
+	0x77, 0x20, 0x05, 0x3d, 0x30, 0x06, 0xd4, 0x4c,
+	0x0a, 0x2c, 0x98, 0x5a, 0xb9, 0xd4, 0x98, 0xa9,
+	0x3f, 0xc6, 0x12, 0xea, 0x3b, 0x4b, 0xc5, 0x79,
+	0x64, 0x63, 0x6b, 0x09, 0x54, 0x3b, 0x14, 0x27,
+	0xba, 0x99, 0x80, 0xc8, 0x72, 0xa8, 0x12, 0x90,
+	0x29, 0xba, 0x40, 0x54, 0x97, 0x2b, 0x7b, 0xfe,
+	0xeb, 0xcd, 0x01, 0x05, 0x44, 0x72, 0xdb, 0x99,
+	0xe4, 0x61, 0xc9, 0x69, 0xd6, 0xb9, 0x28, 0xd1,
+	0x05, 0x3e, 0xf9, 0x0b, 0x49, 0x0a, 0x49, 0xe9,
+	0x8d, 0x0e, 0xa7, 0x4a, 0x0f, 0xaf, 0x32, 0xd0,
+	0xe0, 0xb2, 0x3a, 0x55, 0x58, 0xfe, 0x5c, 0x28,
+	0x70, 0x51, 0x23, 0xb0, 0x7b, 0x6a, 0x5f, 0x1e,
+	0xb8, 0x17, 0xd7, 0x94, 0x15, 0x8f, 0xee, 0x20,
+	0xc7, 0x42, 0x25, 0x3e, 0x9a, 0x14, 0xd7, 0x60,
+	0x72, 0x39, 0x47, 0x48, 0xa9, 0xfe, 0xdd, 0x47,
+	0x0a, 0xb1, 0xe6, 0x60, 0x28, 0x8c, 0x11, 0x68,
+	0xe1, 0xff, 0xd7, 0xce, 0xc8, 0xbe, 0xb3, 0xfe,
+	0x27, 0x30, 0x09, 0x70, 0xd7, 0xfa, 0x02, 0x33,
+	0x3a, 0x61, 0x2e, 0xc7, 0xff, 0xa4, 0x2a, 0xa8,
+	0x6e, 0xb4, 0x79, 0x35, 0x6d, 0x4c, 0x1e, 0x38,
+	0xf8, 0xee, 0xd4, 0x84, 0x4e, 0x6e, 0x28, 0xa7,
+	0xce, 0xc8, 0xc1, 0xcf, 0x80, 0x05, 0xf3, 0x04,
+	0xef, 0xc8, 0x18, 0x28, 0x2e, 0x8d, 0x5e, 0x0c,
+	0xdf, 0xb8, 0x5f, 0x96, 0xe8, 0xc6, 0x9c, 0x2f,
+	0xe5, 0xa6, 0x44, 0xd7, 0xe7, 0x99, 0x44, 0x0c,
+	0xec, 0xd7, 0x05, 0x60, 0x97, 0xbb, 0x74, 0x77,
+	0x58, 0xd5, 0xbb, 0x48, 0xde, 0x5a, 0xb2, 0x54,
+	0x7f, 0x0e, 0x46, 0x70, 0x6a, 0x6f, 0x78, 0xa5,
+	0x08, 0x89, 0x05, 0x4e, 0x7e, 0xa0, 0x69, 0xb4,
+	0x40, 0x60, 0x55, 0x77, 0x75, 0x9b, 0x19, 0xf2,
+	0xd5, 0x13, 0x80, 0x77, 0xf9, 0x4b, 0x3f, 0x1e,
+	0xee, 0xe6, 0x76, 0x84, 0x7b, 0x8c, 0xe5, 0x27,
+	0xa8, 0x0a, 0x91, 0x01, 0x68, 0x71, 0x8a, 0x3f,
+	0x06, 0xab, 0xf6, 0xa9, 0xa5, 0xe6, 0x72, 0x92,
+	0xe4, 0x67, 0xe2, 0xa2, 0x46, 0x35, 0x84, 0x55,
+	0x7d, 0xca, 0xa8, 0x85, 0xd0, 0xf1, 0x3f, 0xbe,
+	0xd7, 0x34, 0x64, 0xfc, 0xae, 0xe3, 0xe4, 0x04,
+	0x9f, 0x66, 0x02, 0xb9, 0x88, 0x10, 0xd9, 0xc4,
+	0x4c, 0x31, 0x43, 0x7a, 0x93, 0xe2, 0x9b, 0x56,
+	0x43, 0x84, 0xdc, 0xdc, 0xde, 0x1d, 0xa4, 0x02,
+	0x0e, 0xc2, 0xef, 0xc3, 0xf8, 0x78, 0xd1, 0xb2,
+	0x6b, 0x63, 0x18, 0xc9, 0xa9, 0xe5, 0x72, 0xd8,
+	0xf3, 0xb9, 0xd1, 0x8a, 0xc7, 0x1a, 0x02, 0x27,
+	0x20, 0x77, 0x10, 0xe5, 0xc8, 0xd4, 0x4a, 0x47,
+	0xe5, 0xdf, 0x5f, 0x01, 0xaa, 0xb0, 0xd4, 0x10,
+	0xbb, 0x69, 0xe3, 0x36, 0xc8, 0xe1, 0x3d, 0x43,
+	0xfb, 0x86, 0xcd, 0xcc, 0xbf, 0xf4, 0x88, 0xe0,
+	0x20, 0xca, 0xb7, 0x1b, 0xf1, 0x2f, 0x5c, 0xee,
+	0xd4, 0xd3, 0xa3, 0xcc, 0xa4, 0x1e, 0x1c, 0x47,
+	0xfb, 0xbf, 0xfc, 0xa2, 0x41, 0x55, 0x9d, 0xf6,
+	0x5a, 0x5e, 0x65, 0x32, 0x34, 0x7b, 0x52, 0x8d,
+	0xd5, 0xd0, 0x20, 0x60, 0x03, 0xab, 0x3f, 0x8c,
+	0xd4, 0x21, 0xea, 0x2a, 0xd9, 0xc4, 0xd0, 0xd3,
+	0x65, 0xd8, 0x7a, 0x13, 0x28, 0x62, 0x32, 0x4b,
+	0x2c, 0x87, 0x93, 0xa8, 0xb4, 0x52, 0x45, 0x09,
+	0x44, 0xec, 0xec, 0xc3, 0x17, 0xdb, 0x9a, 0x4d,
+	0x5c, 0xa9, 0x11, 0xd4, 0x7d, 0xaf, 0x9e, 0xf1,
+	0x2d, 0xb2, 0x66, 0xc5, 0x1d, 0xed, 0xb7, 0xcd,
+	0x0b, 0x25, 0x5e, 0x30, 0x47, 0x3f, 0x40, 0xf4,
+	0xa1, 0xa0, 0x00, 0x94, 0x10, 0xc5, 0x6a, 0x63,
+	0x1a, 0xd5, 0x88, 0x92, 0x8e, 0x82, 0x39, 0x87,
+	0x3c, 0x78, 0x65, 0x58, 0x42, 0x75, 0x5b, 0xdd,
+	0x77, 0x3e, 0x09, 0x4e, 0x76, 0x5b, 0xe6, 0x0e,
+	0x4d, 0x38, 0xb2, 0xc0, 0xb8, 0x95, 0x01, 0x7a,
+	0x10, 0xe0, 0xfb, 0x07, 0xf2, 0xab, 0x2d, 0x8c,
+	0x32, 0xed, 0x2b, 0xc0, 0x46, 0xc2, 0xf5, 0x38,
+	0x83, 0xf0, 0x17, 0xec, 0xc1, 0x20, 0x6a, 0x9a,
+	0x0b, 0x00, 0xa0, 0x98, 0x22, 0x50, 0x23, 0xd5,
+	0x80, 0x6b, 0xf6, 0x1f, 0xc3, 0xcc, 0x97, 0xc9,
+	0x24, 0x9f, 0xf3, 0xaf, 0x43, 0x14, 0xd5, 0xa0
+};
+static const u8 dec_output010[] __initconst = {
+	0x42, 0x93, 0xe4, 0xeb, 0x97, 0xb0, 0x57, 0xbf,
+	0x1a, 0x8b, 0x1f, 0xe4, 0x5f, 0x36, 0x20, 0x3c,
+	0xef, 0x0a, 0xa9, 0x48, 0x5f, 0x5f, 0x37, 0x22,
+	0x3a, 0xde, 0xe3, 0xae, 0xbe, 0xad, 0x07, 0xcc,
+	0xb1, 0xf6, 0xf5, 0xf9, 0x56, 0xdd, 0xe7, 0x16,
+	0x1e, 0x7f, 0xdf, 0x7a, 0x9e, 0x75, 0xb7, 0xc7,
+	0xbe, 0xbe, 0x8a, 0x36, 0x04, 0xc0, 0x10, 0xf4,
+	0x95, 0x20, 0x03, 0xec, 0xdc, 0x05, 0xa1, 0x7d,
+	0xc4, 0xa9, 0x2c, 0x82, 0xd0, 0xbc, 0x8b, 0xc5,
+	0xc7, 0x45, 0x50, 0xf6, 0xa2, 0x1a, 0xb5, 0x46,
+	0x3b, 0x73, 0x02, 0xa6, 0x83, 0x4b, 0x73, 0x82,
+	0x58, 0x5e, 0x3b, 0x65, 0x2f, 0x0e, 0xfd, 0x2b,
+	0x59, 0x16, 0xce, 0xa1, 0x60, 0x9c, 0xe8, 0x3a,
+	0x99, 0xed, 0x8d, 0x5a, 0xcf, 0xf6, 0x83, 0xaf,
+	0xba, 0xd7, 0x73, 0x73, 0x40, 0x97, 0x3d, 0xca,
+	0xef, 0x07, 0x57, 0xe6, 0xd9, 0x70, 0x0e, 0x95,
+	0xae, 0xa6, 0x8d, 0x04, 0xcc, 0xee, 0xf7, 0x09,
+	0x31, 0x77, 0x12, 0xa3, 0x23, 0x97, 0x62, 0xb3,
+	0x7b, 0x32, 0xfb, 0x80, 0x14, 0x48, 0x81, 0xc3,
+	0xe5, 0xea, 0x91, 0x39, 0x52, 0x81, 0xa2, 0x4f,
+	0xe4, 0xb3, 0x09, 0xff, 0xde, 0x5e, 0xe9, 0x58,
+	0x84, 0x6e, 0xf9, 0x3d, 0xdf, 0x25, 0xea, 0xad,
+	0xae, 0xe6, 0x9a, 0xd1, 0x89, 0x55, 0xd3, 0xde,
+	0x6c, 0x52, 0xdb, 0x70, 0xfe, 0x37, 0xce, 0x44,
+	0x0a, 0xa8, 0x25, 0x5f, 0x92, 0xc1, 0x33, 0x4a,
+	0x4f, 0x9b, 0x62, 0x35, 0xff, 0xce, 0xc0, 0xa9,
+	0x60, 0xce, 0x52, 0x00, 0x97, 0x51, 0x35, 0x26,
+	0x2e, 0xb9, 0x36, 0xa9, 0x87, 0x6e, 0x1e, 0xcc,
+	0x91, 0x78, 0x53, 0x98, 0x86, 0x5b, 0x9c, 0x74,
+	0x7d, 0x88, 0x33, 0xe1, 0xdf, 0x37, 0x69, 0x2b,
+	0xbb, 0xf1, 0x4d, 0xf4, 0xd1, 0xf1, 0x39, 0x93,
+	0x17, 0x51, 0x19, 0xe3, 0x19, 0x1e, 0x76, 0x37,
+	0x25, 0xfb, 0x09, 0x27, 0x6a, 0xab, 0x67, 0x6f,
+	0x14, 0x12, 0x64, 0xe7, 0xc4, 0x07, 0xdf, 0x4d,
+	0x17, 0xbb, 0x6d, 0xe0, 0xe9, 0xb9, 0xab, 0xca,
+	0x10, 0x68, 0xaf, 0x7e, 0xb7, 0x33, 0x54, 0x73,
+	0x07, 0x6e, 0xf7, 0x81, 0x97, 0x9c, 0x05, 0x6f,
+	0x84, 0x5f, 0xd2, 0x42, 0xfb, 0x38, 0xcf, 0xd1,
+	0x2f, 0x14, 0x30, 0x88, 0x98, 0x4d, 0x5a, 0xa9,
+	0x76, 0xd5, 0x4f, 0x3e, 0x70, 0x6c, 0x85, 0x76,
+	0xd7, 0x01, 0xa0, 0x1a, 0xc8, 0x4e, 0xaa, 0xac,
+	0x78, 0xfe, 0x46, 0xde, 0x6a, 0x05, 0x46, 0xa7,
+	0x43, 0x0c, 0xb9, 0xde, 0xb9, 0x68, 0xfb, 0xce,
+	0x42, 0x99, 0x07, 0x4d, 0x0b, 0x3b, 0x5a, 0x30,
+	0x35, 0xa8, 0xf9, 0x3a, 0x73, 0xef, 0x0f, 0xdb,
+	0x1e, 0x16, 0x42, 0xc4, 0xba, 0xae, 0x58, 0xaa,
+	0xf8, 0xe5, 0x75, 0x2f, 0x1b, 0x15, 0x5c, 0xfd,
+	0x0a, 0x97, 0xd0, 0xe4, 0x37, 0x83, 0x61, 0x5f,
+	0x43, 0xa6, 0xc7, 0x3f, 0x38, 0x59, 0xe6, 0xeb,
+	0xa3, 0x90, 0xc3, 0xaa, 0xaa, 0x5a, 0xd3, 0x34,
+	0xd4, 0x17, 0xc8, 0x65, 0x3e, 0x57, 0xbc, 0x5e,
+	0xdd, 0x9e, 0xb7, 0xf0, 0x2e, 0x5b, 0xb2, 0x1f,
+	0x8a, 0x08, 0x0d, 0x45, 0x91, 0x0b, 0x29, 0x53,
+	0x4f, 0x4c, 0x5a, 0x73, 0x56, 0xfe, 0xaf, 0x41,
+	0x01, 0x39, 0x0a, 0x24, 0x3c, 0x7e, 0xbe, 0x4e,
+	0x53, 0xf3, 0xeb, 0x06, 0x66, 0x51, 0x28, 0x1d,
+	0xbd, 0x41, 0x0a, 0x01, 0xab, 0x16, 0x47, 0x27,
+	0x47, 0x47, 0xf7, 0xcb, 0x46, 0x0a, 0x70, 0x9e,
+	0x01, 0x9c, 0x09, 0xe1, 0x2a, 0x00, 0x1a, 0xd8,
+	0xd4, 0x79, 0x9d, 0x80, 0x15, 0x8e, 0x53, 0x2a,
+	0x65, 0x83, 0x78, 0x3e, 0x03, 0x00, 0x07, 0x12,
+	0x1f, 0x33, 0x3e, 0x7b, 0x13, 0x37, 0xf1, 0xc3,
+	0xef, 0xb7, 0xc1, 0x20, 0x3c, 0x3e, 0x67, 0x66,
+	0x5d, 0x88, 0xa7, 0x7d, 0x33, 0x50, 0x77, 0xb0,
+	0x28, 0x8e, 0xe7, 0x2c, 0x2e, 0x7a, 0xf4, 0x3c,
+	0x8d, 0x74, 0x83, 0xaf, 0x8e, 0x87, 0x0f, 0xe4,
+	0x50, 0xff, 0x84, 0x5c, 0x47, 0x0c, 0x6a, 0x49,
+	0xbf, 0x42, 0x86, 0x77, 0x15, 0x48, 0xa5, 0x90,
+	0x5d, 0x93, 0xd6, 0x2a, 0x11, 0xd5, 0xd5, 0x11,
+	0xaa, 0xce, 0xe7, 0x6f, 0xa5, 0xb0, 0x09, 0x2c,
+	0x8d, 0xd3, 0x92, 0xf0, 0x5a, 0x2a, 0xda, 0x5b,
+	0x1e, 0xd5, 0x9a, 0xc4, 0xc4, 0xf3, 0x49, 0x74,
+	0x41, 0xca, 0xe8, 0xc1, 0xf8, 0x44, 0xd6, 0x3c,
+	0xae, 0x6c, 0x1d, 0x9a, 0x30, 0x04, 0x4d, 0x27,
+	0x0e, 0xb1, 0x5f, 0x59, 0xa2, 0x24, 0xe8, 0xe1,
+	0x98, 0xc5, 0x6a, 0x4c, 0xfe, 0x41, 0xd2, 0x27,
+	0x42, 0x52, 0xe1, 0xe9, 0x7d, 0x62, 0xe4, 0x88,
+	0x0f, 0xad, 0xb2, 0x70, 0xcb, 0x9d, 0x4c, 0x27,
+	0x2e, 0x76, 0x1e, 0x1a, 0x63, 0x65, 0xf5, 0x3b,
+	0xf8, 0x57, 0x69, 0xeb, 0x5b, 0x38, 0x26, 0x39,
+	0x33, 0x25, 0x45, 0x3e, 0x91, 0xb8, 0xd8, 0xc7,
+	0xd5, 0x42, 0xc0, 0x22, 0x31, 0x74, 0xf4, 0xbc,
+	0x0c, 0x23, 0xf1, 0xca, 0xc1, 0x8d, 0xd7, 0xbe,
+	0xc9, 0x62, 0xe4, 0x08, 0x1a, 0xcf, 0x36, 0xd5,
+	0xfe, 0x55, 0x21, 0x59, 0x91, 0x87, 0x87, 0xdf,
+	0x06, 0xdb, 0xdf, 0x96, 0x45, 0x58, 0xda, 0x05,
+	0xcd, 0x50, 0x4d, 0xd2, 0x7d, 0x05, 0x18, 0x73,
+	0x6a, 0x8d, 0x11, 0x85, 0xa6, 0x88, 0xe8, 0xda,
+	0xe6, 0x30, 0x33, 0xa4, 0x89, 0x31, 0x75, 0xbe,
+	0x69, 0x43, 0x84, 0x43, 0x50, 0x87, 0xdd, 0x71,
+	0x36, 0x83, 0xc3, 0x78, 0x74, 0x24, 0x0a, 0xed,
+	0x7b, 0xdb, 0xa4, 0x24, 0x0b, 0xb9, 0x7e, 0x5d,
+	0xff, 0xde, 0xb1, 0xef, 0x61, 0x5a, 0x45, 0x33,
+	0xf6, 0x17, 0x07, 0x08, 0x98, 0x83, 0x92, 0x0f,
+	0x23, 0x6d, 0xe6, 0xaa, 0x17, 0x54, 0xad, 0x6a,
+	0xc8, 0xdb, 0x26, 0xbe, 0xb8, 0xb6, 0x08, 0xfa,
+	0x68, 0xf1, 0xd7, 0x79, 0x6f, 0x18, 0xb4, 0x9e,
+	0x2d, 0x3f, 0x1b, 0x64, 0xaf, 0x8d, 0x06, 0x0e,
+	0x49, 0x28, 0xe0, 0x5d, 0x45, 0x68, 0x13, 0x87,
+	0xfa, 0xde, 0x40, 0x7b, 0xd2, 0xc3, 0x94, 0xd5,
+	0xe1, 0xd9, 0xc2, 0xaf, 0x55, 0x89, 0xeb, 0xb4,
+	0x12, 0x59, 0xa8, 0xd4, 0xc5, 0x29, 0x66, 0x38,
+	0xe6, 0xac, 0x22, 0x22, 0xd9, 0x64, 0x9b, 0x34,
+	0x0a, 0x32, 0x9f, 0xc2, 0xbf, 0x17, 0x6c, 0x3f,
+	0x71, 0x7a, 0x38, 0x6b, 0x98, 0xfb, 0x49, 0x36,
+	0x89, 0xc9, 0xe2, 0xd6, 0xc7, 0x5d, 0xd0, 0x69,
+	0x5f, 0x23, 0x35, 0xc9, 0x30, 0xe2, 0xfd, 0x44,
+	0x58, 0x39, 0xd7, 0x97, 0xfb, 0x5c, 0x00, 0xd5,
+	0x4f, 0x7a, 0x1a, 0x95, 0x8b, 0x62, 0x4b, 0xce,
+	0xe5, 0x91, 0x21, 0x7b, 0x30, 0x00, 0xd6, 0xdd,
+	0x6d, 0x02, 0x86, 0x49, 0x0f, 0x3c, 0x1a, 0x27,
+	0x3c, 0xd3, 0x0e, 0x71, 0xf2, 0xff, 0xf5, 0x2f,
+	0x87, 0xac, 0x67, 0x59, 0x81, 0xa3, 0xf7, 0xf8,
+	0xd6, 0x11, 0x0c, 0x84, 0xa9, 0x03, 0xee, 0x2a,
+	0xc4, 0xf3, 0x22, 0xab, 0x7c, 0xe2, 0x25, 0xf5,
+	0x67, 0xa3, 0xe4, 0x11, 0xe0, 0x59, 0xb3, 0xca,
+	0x87, 0xa0, 0xae, 0xc9, 0xa6, 0x62, 0x1b, 0x6e,
+	0x4d, 0x02, 0x6b, 0x07, 0x9d, 0xfd, 0xd0, 0x92,
+	0x06, 0xe1, 0xb2, 0x9a, 0x4a, 0x1f, 0x1f, 0x13,
+	0x49, 0x99, 0x97, 0x08, 0xde, 0x7f, 0x98, 0xaf,
+	0x51, 0x98, 0xee, 0x2c, 0xcb, 0xf0, 0x0b, 0xc6,
+	0xb6, 0xb7, 0x2d, 0x9a, 0xb1, 0xac, 0xa6, 0xe3,
+	0x15, 0x77, 0x9d, 0x6b, 0x1a, 0xe4, 0xfc, 0x8b,
+	0xf2, 0x17, 0x59, 0x08, 0x04, 0x58, 0x81, 0x9d,
+	0x1b, 0x1b, 0x69, 0x55, 0xc2, 0xb4, 0x3c, 0x1f,
+	0x50, 0xf1, 0x7f, 0x77, 0x90, 0x4c, 0x66, 0x40,
+	0x5a, 0xc0, 0x33, 0x1f, 0xcb, 0x05, 0x6d, 0x5c,
+	0x06, 0x87, 0x52, 0xa2, 0x8f, 0x26, 0xd5, 0x4f
+};
+static const u8 dec_assoc010[] __initconst = {
+	0xd2, 0xa1, 0x70, 0xdb, 0x7a, 0xf8, 0xfa, 0x27,
+	0xba, 0x73, 0x0f, 0xbf, 0x3d, 0x1e, 0x82, 0xb2
+};
+static const u8 dec_nonce010[] __initconst = {
+	0xdb, 0x92, 0x0f, 0x7f, 0x17, 0x54, 0x0c, 0x30
+};
+static const u8 dec_key010[] __initconst = {
+	0x47, 0x11, 0xeb, 0x86, 0x2b, 0x2c, 0xab, 0x44,
+	0x34, 0xda, 0x7f, 0x57, 0x03, 0x39, 0x0c, 0xaf,
+	0x2c, 0x14, 0xfd, 0x65, 0x23, 0xe9, 0x8e, 0x74,
+	0xd5, 0x08, 0x68, 0x08, 0xe7, 0xb4, 0x72, 0xd7
+};
+
+static const u8 dec_input011[] __initconst = {
+	0x6a, 0xfc, 0x4b, 0x25, 0xdf, 0xc0, 0xe4, 0xe8,
+	0x17, 0x4d, 0x4c, 0xc9, 0x7e, 0xde, 0x3a, 0xcc,
+	0x3c, 0xba, 0x6a, 0x77, 0x47, 0xdb, 0xe3, 0x74,
+	0x7a, 0x4d, 0x5f, 0x8d, 0x37, 0x55, 0x80, 0x73,
+	0x90, 0x66, 0x5d, 0x3a, 0x7d, 0x5d, 0x86, 0x5e,
+	0x8d, 0xfd, 0x83, 0xff, 0x4e, 0x74, 0x6f, 0xf9,
+	0xe6, 0x70, 0x17, 0x70, 0x3e, 0x96, 0xa7, 0x7e,
+	0xcb, 0xab, 0x8f, 0x58, 0x24, 0x9b, 0x01, 0xfd,
+	0xcb, 0xe6, 0x4d, 0x9b, 0xf0, 0x88, 0x94, 0x57,
+	0x66, 0xef, 0x72, 0x4c, 0x42, 0x6e, 0x16, 0x19,
+	0x15, 0xea, 0x70, 0x5b, 0xac, 0x13, 0xdb, 0x9f,
+	0x18, 0xe2, 0x3c, 0x26, 0x97, 0xbc, 0xdc, 0x45,
+	0x8c, 0x6c, 0x24, 0x69, 0x9c, 0xf7, 0x65, 0x1e,
+	0x18, 0x59, 0x31, 0x7c, 0xe4, 0x73, 0xbc, 0x39,
+	0x62, 0xc6, 0x5c, 0x9f, 0xbf, 0xfa, 0x90, 0x03,
+	0xc9, 0x72, 0x26, 0xb6, 0x1b, 0xc2, 0xb7, 0x3f,
+	0xf2, 0x13, 0x77, 0xf2, 0x8d, 0xb9, 0x47, 0xd0,
+	0x53, 0xdd, 0xc8, 0x91, 0x83, 0x8b, 0xb1, 0xce,
+	0xa3, 0xfe, 0xcd, 0xd9, 0xdd, 0x92, 0x7b, 0xdb,
+	0xb8, 0xfb, 0xc9, 0x2d, 0x01, 0x59, 0x39, 0x52,
+	0xad, 0x1b, 0xec, 0xcf, 0xd7, 0x70, 0x13, 0x21,
+	0xf5, 0x47, 0xaa, 0x18, 0x21, 0x5c, 0xc9, 0x9a,
+	0xd2, 0x6b, 0x05, 0x9c, 0x01, 0xa1, 0xda, 0x35,
+	0x5d, 0xb3, 0x70, 0xe6, 0xa9, 0x80, 0x8b, 0x91,
+	0xb7, 0xb3, 0x5f, 0x24, 0x9a, 0xb7, 0xd1, 0x6b,
+	0xa1, 0x1c, 0x50, 0xba, 0x49, 0xe0, 0xee, 0x2e,
+	0x75, 0xac, 0x69, 0xc0, 0xeb, 0x03, 0xdd, 0x19,
+	0xe5, 0xf6, 0x06, 0xdd, 0xc3, 0xd7, 0x2b, 0x07,
+	0x07, 0x30, 0xa7, 0x19, 0x0c, 0xbf, 0xe6, 0x18,
+	0xcc, 0xb1, 0x01, 0x11, 0x85, 0x77, 0x1d, 0x96,
+	0xa7, 0xa3, 0x00, 0x84, 0x02, 0xa2, 0x83, 0x68,
+	0xda, 0x17, 0x27, 0xc8, 0x7f, 0x23, 0xb7, 0xf4,
+	0x13, 0x85, 0xcf, 0xdd, 0x7a, 0x7d, 0x24, 0x57,
+	0xfe, 0x05, 0x93, 0xf5, 0x74, 0xce, 0xed, 0x0c,
+	0x20, 0x98, 0x8d, 0x92, 0x30, 0xa1, 0x29, 0x23,
+	0x1a, 0xa0, 0x4f, 0x69, 0x56, 0x4c, 0xe1, 0xc8,
+	0xce, 0xf6, 0x9a, 0x0c, 0xa4, 0xfa, 0x04, 0xf6,
+	0x62, 0x95, 0xf2, 0xfa, 0xc7, 0x40, 0x68, 0x40,
+	0x8f, 0x41, 0xda, 0xb4, 0x26, 0x6f, 0x70, 0xab,
+	0x40, 0x61, 0xa4, 0x0e, 0x75, 0xfb, 0x86, 0xeb,
+	0x9d, 0x9a, 0x1f, 0xec, 0x76, 0x99, 0xe7, 0xea,
+	0xaa, 0x1e, 0x2d, 0xb5, 0xd4, 0xa6, 0x1a, 0xb8,
+	0x61, 0x0a, 0x1d, 0x16, 0x5b, 0x98, 0xc2, 0x31,
+	0x40, 0xe7, 0x23, 0x1d, 0x66, 0x99, 0xc8, 0xc0,
+	0xd7, 0xce, 0xf3, 0x57, 0x40, 0x04, 0x3f, 0xfc,
+	0xea, 0xb3, 0xfc, 0xd2, 0xd3, 0x99, 0xa4, 0x94,
+	0x69, 0xa0, 0xef, 0xd1, 0x85, 0xb3, 0xa6, 0xb1,
+	0x28, 0xbf, 0x94, 0x67, 0x22, 0xc3, 0x36, 0x46,
+	0xf8, 0xd2, 0x0f, 0x5f, 0xf4, 0x59, 0x80, 0xe6,
+	0x2d, 0x43, 0x08, 0x7d, 0x19, 0x09, 0x97, 0xa7,
+	0x4c, 0x3d, 0x8d, 0xba, 0x65, 0x62, 0xa3, 0x71,
+	0x33, 0x29, 0x62, 0xdb, 0xc1, 0x33, 0x34, 0x1a,
+	0x63, 0x33, 0x16, 0xb6, 0x64, 0x7e, 0xab, 0x33,
+	0xf0, 0xe6, 0x26, 0x68, 0xba, 0x1d, 0x2e, 0x38,
+	0x08, 0xe6, 0x02, 0xd3, 0x25, 0x2c, 0x47, 0x23,
+	0x58, 0x34, 0x0f, 0x9d, 0x63, 0x4f, 0x63, 0xbb,
+	0x7f, 0x3b, 0x34, 0x38, 0xa7, 0xb5, 0x8d, 0x65,
+	0xd9, 0x9f, 0x79, 0x55, 0x3e, 0x4d, 0xe7, 0x73,
+	0xd8, 0xf6, 0x98, 0x97, 0x84, 0x60, 0x9c, 0xc8,
+	0xa9, 0x3c, 0xf6, 0xdc, 0x12, 0x5c, 0xe1, 0xbb,
+	0x0b, 0x8b, 0x98, 0x9c, 0x9d, 0x26, 0x7c, 0x4a,
+	0xe6, 0x46, 0x36, 0x58, 0x21, 0x4a, 0xee, 0xca,
+	0xd7, 0x3b, 0xc2, 0x6c, 0x49, 0x2f, 0xe5, 0xd5,
+	0x03, 0x59, 0x84, 0x53, 0xcb, 0xfe, 0x92, 0x71,
+	0x2e, 0x7c, 0x21, 0xcc, 0x99, 0x85, 0x7f, 0xb8,
+	0x74, 0x90, 0x13, 0x42, 0x3f, 0xe0, 0x6b, 0x1d,
+	0xf2, 0x4d, 0x54, 0xd4, 0xfc, 0x3a, 0x05, 0xe6,
+	0x74, 0xaf, 0xa6, 0xa0, 0x2a, 0x20, 0x23, 0x5d,
+	0x34, 0x5c, 0xd9, 0x3e, 0x4e, 0xfa, 0x93, 0xe7,
+	0xaa, 0xe9, 0x6f, 0x08, 0x43, 0x67, 0x41, 0xc5,
+	0xad, 0xfb, 0x31, 0x95, 0x82, 0x73, 0x32, 0xd8,
+	0xa6, 0xa3, 0xed, 0x0e, 0x2d, 0xf6, 0x5f, 0xfd,
+	0x80, 0xa6, 0x7a, 0xe0, 0xdf, 0x78, 0x15, 0x29,
+	0x74, 0x33, 0xd0, 0x9e, 0x83, 0x86, 0x72, 0x22,
+	0x57, 0x29, 0xb9, 0x9e, 0x5d, 0xd3, 0x1a, 0xb5,
+	0x96, 0x72, 0x41, 0x3d, 0xf1, 0x64, 0x43, 0x67,
+	0xee, 0xaa, 0x5c, 0xd3, 0x9a, 0x96, 0x13, 0x11,
+	0x5d, 0xf3, 0x0c, 0x87, 0x82, 0x1e, 0x41, 0x9e,
+	0xd0, 0x27, 0xd7, 0x54, 0x3b, 0x67, 0x73, 0x09,
+	0x91, 0xe9, 0xd5, 0x36, 0xa7, 0xb5, 0x55, 0xe4,
+	0xf3, 0x21, 0x51, 0x49, 0x22, 0x07, 0x55, 0x4f,
+	0x44, 0x4b, 0xd2, 0x15, 0x93, 0x17, 0x2a, 0xfa,
+	0x4d, 0x4a, 0x57, 0xdb, 0x4c, 0xa6, 0xeb, 0xec,
+	0x53, 0x25, 0x6c, 0x21, 0xed, 0x00, 0x4c, 0x3b,
+	0xca, 0x14, 0x57, 0xa9, 0xd6, 0x6a, 0xcd, 0x8d,
+	0x5e, 0x74, 0xac, 0x72, 0xc1, 0x97, 0xe5, 0x1b,
+	0x45, 0x4e, 0xda, 0xfc, 0xcc, 0x40, 0xe8, 0x48,
+	0x88, 0x0b, 0xa3, 0xe3, 0x8d, 0x83, 0x42, 0xc3,
+	0x23, 0xfd, 0x68, 0xb5, 0x8e, 0xf1, 0x9d, 0x63,
+	0x77, 0xe9, 0xa3, 0x8e, 0x8c, 0x26, 0x6b, 0xbd,
+	0x72, 0x73, 0x35, 0x0c, 0x03, 0xf8, 0x43, 0x78,
+	0x52, 0x71, 0x15, 0x1f, 0x71, 0x5d, 0x6e, 0xed,
+	0xb9, 0xcc, 0x86, 0x30, 0xdb, 0x2b, 0xd3, 0x82,
+	0x88, 0x23, 0x71, 0x90, 0x53, 0x5c, 0xa9, 0x2f,
+	0x76, 0x01, 0xb7, 0x9a, 0xfe, 0x43, 0x55, 0xa3,
+	0x04, 0x9b, 0x0e, 0xe4, 0x59, 0xdf, 0xc9, 0xe9,
+	0xb1, 0xea, 0x29, 0x28, 0x3c, 0x5c, 0xae, 0x72,
+	0x84, 0xb6, 0xc6, 0xeb, 0x0c, 0x27, 0x07, 0x74,
+	0x90, 0x0d, 0x31, 0xb0, 0x00, 0x77, 0xe9, 0x40,
+	0x70, 0x6f, 0x68, 0xa7, 0xfd, 0x06, 0xec, 0x4b,
+	0xc0, 0xb7, 0xac, 0xbc, 0x33, 0xb7, 0x6d, 0x0a,
+	0xbd, 0x12, 0x1b, 0x59, 0xcb, 0xdd, 0x32, 0xf5,
+	0x1d, 0x94, 0x57, 0x76, 0x9e, 0x0c, 0x18, 0x98,
+	0x71, 0xd7, 0x2a, 0xdb, 0x0b, 0x7b, 0xa7, 0x71,
+	0xb7, 0x67, 0x81, 0x23, 0x96, 0xae, 0xb9, 0x7e,
+	0x32, 0x43, 0x92, 0x8a, 0x19, 0xa0, 0xc4, 0xd4,
+	0x3b, 0x57, 0xf9, 0x4a, 0x2c, 0xfb, 0x51, 0x46,
+	0xbb, 0xcb, 0x5d, 0xb3, 0xef, 0x13, 0x93, 0x6e,
+	0x68, 0x42, 0x54, 0x57, 0xd3, 0x6a, 0x3a, 0x8f,
+	0x9d, 0x66, 0xbf, 0xbd, 0x36, 0x23, 0xf5, 0x93,
+	0x83, 0x7b, 0x9c, 0xc0, 0xdd, 0xc5, 0x49, 0xc0,
+	0x64, 0xed, 0x07, 0x12, 0xb3, 0xe6, 0xe4, 0xe5,
+	0x38, 0x95, 0x23, 0xb1, 0xa0, 0x3b, 0x1a, 0x61,
+	0xda, 0x17, 0xac, 0xc3, 0x58, 0xdd, 0x74, 0x64,
+	0x22, 0x11, 0xe8, 0x32, 0x1d, 0x16, 0x93, 0x85,
+	0x99, 0xa5, 0x9c, 0x34, 0x55, 0xb1, 0xe9, 0x20,
+	0x72, 0xc9, 0x28, 0x7b, 0x79, 0x00, 0xa1, 0xa6,
+	0xa3, 0x27, 0x40, 0x18, 0x8a, 0x54, 0xe0, 0xcc,
+	0xe8, 0x4e, 0x8e, 0x43, 0x96, 0xe7, 0x3f, 0xc8,
+	0xe9, 0xb2, 0xf9, 0xc9, 0xda, 0x04, 0x71, 0x50,
+	0x47, 0xe4, 0xaa, 0xce, 0xa2, 0x30, 0xc8, 0xe4,
+	0xac, 0xc7, 0x0d, 0x06, 0x2e, 0xe6, 0xe8, 0x80,
+	0x36, 0x29, 0x9e, 0x01, 0xb8, 0xc3, 0xf0, 0xa0,
+	0x5d, 0x7a, 0xca, 0x4d, 0xa0, 0x57, 0xbd, 0x2a,
+	0x45, 0xa7, 0x7f, 0x9c, 0x93, 0x07, 0x8f, 0x35,
+	0x67, 0x92, 0xe3, 0xe9, 0x7f, 0xa8, 0x61, 0x43,
+	0x9e, 0x25, 0x4f, 0x33, 0x76, 0x13, 0x6e, 0x12,
+	0xb9, 0xdd, 0xa4, 0x7c, 0x08, 0x9f, 0x7c, 0xe7,
+	0x0a, 0x8d, 0x84, 0x06, 0xa4, 0x33, 0x17, 0x34,
+	0x5e, 0x10, 0x7c, 0xc0, 0xa8, 0x3d, 0x1f, 0x42,
+	0x20, 0x51, 0x65, 0x5d, 0x09, 0xc3, 0xaa, 0xc0,
+	0xc8, 0x0d, 0xf0, 0x79, 0xbc, 0x20, 0x1b, 0x95,
+	0xe7, 0x06, 0x7d, 0x47, 0x20, 0x03, 0x1a, 0x74,
+	0xdd, 0xe2, 0xd4, 0xae, 0x38, 0x71, 0x9b, 0xf5,
+	0x80, 0xec, 0x08, 0x4e, 0x56, 0xba, 0x76, 0x12,
+	0x1a, 0xdf, 0x48, 0xf3, 0xae, 0xb3, 0xe6, 0xe6,
+	0xbe, 0xc0, 0x91, 0x2e, 0x01, 0xb3, 0x01, 0x86,
+	0xa2, 0xb9, 0x52, 0xd1, 0x21, 0xae, 0xd4, 0x97,
+	0x1d, 0xef, 0x41, 0x12, 0x95, 0x3d, 0x48, 0x45,
+	0x1c, 0x56, 0x32, 0x8f, 0xb8, 0x43, 0xbb, 0x19,
+	0xf3, 0xca, 0xe9, 0xeb, 0x6d, 0x84, 0xbe, 0x86,
+	0x06, 0xe2, 0x36, 0xb2, 0x62, 0x9d, 0xd3, 0x4c,
+	0x48, 0x18, 0x54, 0x13, 0x4e, 0xcf, 0xfd, 0xba,
+	0x84, 0xb9, 0x30, 0x53, 0xcf, 0xfb, 0xb9, 0x29,
+	0x8f, 0xdc, 0x9f, 0xef, 0x60, 0x0b, 0x64, 0xf6,
+	0x8b, 0xee, 0xa6, 0x91, 0xc2, 0x41, 0x6c, 0xf6,
+	0xfa, 0x79, 0x67, 0x4b, 0xc1, 0x3f, 0xaf, 0x09,
+	0x81, 0xd4, 0x5d, 0xcb, 0x09, 0xdf, 0x36, 0x31,
+	0xc0, 0x14, 0x3c, 0x7c, 0x0e, 0x65, 0x95, 0x99,
+	0x6d, 0xa3, 0xf4, 0xd7, 0x38, 0xee, 0x1a, 0x2b,
+	0x37, 0xe2, 0xa4, 0x3b, 0x4b, 0xd0, 0x65, 0xca,
+	0xf8, 0xc3, 0xe8, 0x15, 0x20, 0xef, 0xf2, 0x00,
+	0xfd, 0x01, 0x09, 0xc5, 0xc8, 0x17, 0x04, 0x93,
+	0xd0, 0x93, 0x03, 0x55, 0xc5, 0xfe, 0x32, 0xa3,
+	0x3e, 0x28, 0x2d, 0x3b, 0x93, 0x8a, 0xcc, 0x07,
+	0x72, 0x80, 0x8b, 0x74, 0x16, 0x24, 0xbb, 0xda,
+	0x94, 0x39, 0x30, 0x8f, 0xb1, 0xcd, 0x4a, 0x90,
+	0x92, 0x7c, 0x14, 0x8f, 0x95, 0x4e, 0xac, 0x9b,
+	0xd8, 0x8f, 0x1a, 0x87, 0xa4, 0x32, 0x27, 0x8a,
+	0xba, 0xf7, 0x41, 0xcf, 0x84, 0x37, 0x19, 0xe6,
+	0x06, 0xf5, 0x0e, 0xcf, 0x36, 0xf5, 0x9e, 0x6c,
+	0xde, 0xbc, 0xff, 0x64, 0x7e, 0x4e, 0x59, 0x57,
+	0x48, 0xfe, 0x14, 0xf7, 0x9c, 0x93, 0x5d, 0x15,
+	0xad, 0xcc, 0x11, 0xb1, 0x17, 0x18, 0xb2, 0x7e,
+	0xcc, 0xab, 0xe9, 0xce, 0x7d, 0x77, 0x5b, 0x51,
+	0x1b, 0x1e, 0x20, 0xa8, 0x32, 0x06, 0x0e, 0x75,
+	0x93, 0xac, 0xdb, 0x35, 0x37, 0x1f, 0xe9, 0x19,
+	0x1d, 0xb4, 0x71, 0x97, 0xd6, 0x4e, 0x2c, 0x08,
+	0xa5, 0x13, 0xf9, 0x0e, 0x7e, 0x78, 0x6e, 0x14,
+	0xe0, 0xa9, 0xb9, 0x96, 0x4c, 0x80, 0x82, 0xba,
+	0x17, 0xb3, 0x9d, 0x69, 0xb0, 0x84, 0x46, 0xff,
+	0xf9, 0x52, 0x79, 0x94, 0x58, 0x3a, 0x62, 0x90,
+	0x15, 0x35, 0x71, 0x10, 0x37, 0xed, 0xa1, 0x8e,
+	0x53, 0x6e, 0xf4, 0x26, 0x57, 0x93, 0x15, 0x93,
+	0xf6, 0x81, 0x2c, 0x5a, 0x10, 0xda, 0x92, 0xad,
+	0x2f, 0xdb, 0x28, 0x31, 0x2d, 0x55, 0x04, 0xd2,
+	0x06, 0x28, 0x8c, 0x1e, 0xdc, 0xea, 0x54, 0xac,
+	0xff, 0xb7, 0x6c, 0x30, 0x15, 0xd4, 0xb4, 0x0d,
+	0x00, 0x93, 0x57, 0xdd, 0xd2, 0x07, 0x07, 0x06,
+	0xd9, 0x43, 0x9b, 0xcd, 0x3a, 0xf4, 0x7d, 0x4c,
+	0x36, 0x5d, 0x23, 0xa2, 0xcc, 0x57, 0x40, 0x91,
+	0xe9, 0x2c, 0x2f, 0x2c, 0xd5, 0x30, 0x9b, 0x17,
+	0xb0, 0xc9, 0xf7, 0xa7, 0x2f, 0xd1, 0x93, 0x20,
+	0x6b, 0xc6, 0xc1, 0xe4, 0x6f, 0xcb, 0xd1, 0xe7,
+	0x09, 0x0f, 0x9e, 0xdc, 0xaa, 0x9f, 0x2f, 0xdf,
+	0x56, 0x9f, 0xd4, 0x33, 0x04, 0xaf, 0xd3, 0x6c,
+	0x58, 0x61, 0xf0, 0x30, 0xec, 0xf2, 0x7f, 0xf2,
+	0x9c, 0xdf, 0x39, 0xbb, 0x6f, 0xa2, 0x8c, 0x7e,
+	0xc4, 0x22, 0x51, 0x71, 0xc0, 0x4d, 0x14, 0x1a,
+	0xc4, 0xcd, 0x04, 0xd9, 0x87, 0x08, 0x50, 0x05,
+	0xcc, 0xaf, 0xf6, 0xf0, 0x8f, 0x92, 0x54, 0x58,
+	0xc2, 0xc7, 0x09, 0x7a, 0x59, 0x02, 0x05, 0xe8,
+	0xb0, 0x86, 0xd9, 0xbf, 0x7b, 0x35, 0x51, 0x4d,
+	0xaf, 0x08, 0x97, 0x2c, 0x65, 0xda, 0x2a, 0x71,
+	0x3a, 0xa8, 0x51, 0xcc, 0xf2, 0x73, 0x27, 0xc3,
+	0xfd, 0x62, 0xcf, 0xe3, 0xb2, 0xca, 0xcb, 0xbe,
+	0x1a, 0x0a, 0xa1, 0x34, 0x7b, 0x77, 0xc4, 0x62,
+	0x68, 0x78, 0x5f, 0x94, 0x07, 0x04, 0x65, 0x16,
+	0x4b, 0x61, 0xcb, 0xff, 0x75, 0x26, 0x50, 0x66,
+	0x1f, 0x6e, 0x93, 0xf8, 0xc5, 0x51, 0xeb, 0xa4,
+	0x4a, 0x48, 0x68, 0x6b, 0xe2, 0x5e, 0x44, 0xb2,
+	0x50, 0x2c, 0x6c, 0xae, 0x79, 0x4e, 0x66, 0x35,
+	0x81, 0x50, 0xac, 0xbc, 0x3f, 0xb1, 0x0c, 0xf3,
+	0x05, 0x3c, 0x4a, 0xa3, 0x6c, 0x2a, 0x79, 0xb4,
+	0xb7, 0xab, 0xca, 0xc7, 0x9b, 0x8e, 0xcd, 0x5f,
+	0x11, 0x03, 0xcb, 0x30, 0xa3, 0xab, 0xda, 0xfe,
+	0x64, 0xb9, 0xbb, 0xd8, 0x5e, 0x3a, 0x1a, 0x56,
+	0xe5, 0x05, 0x48, 0x90, 0x1e, 0x61, 0x69, 0x1b,
+	0x22, 0xe6, 0x1a, 0x3c, 0x75, 0xad, 0x1f, 0x37,
+	0x28, 0xdc, 0xe4, 0x6d, 0xbd, 0x42, 0xdc, 0xd3,
+	0xc8, 0xb6, 0x1c, 0x48, 0xfe, 0x94, 0x77, 0x7f,
+	0xbd, 0x62, 0xac, 0xa3, 0x47, 0x27, 0xcf, 0x5f,
+	0xd9, 0xdb, 0xaf, 0xec, 0xf7, 0x5e, 0xc1, 0xb0,
+	0x9d, 0x01, 0x26, 0x99, 0x7e, 0x8f, 0x03, 0x70,
+	0xb5, 0x42, 0xbe, 0x67, 0x28, 0x1b, 0x7c, 0xbd,
+	0x61, 0x21, 0x97, 0xcc, 0x5c, 0xe1, 0x97, 0x8f,
+	0x8d, 0xde, 0x2b, 0xaa, 0xa7, 0x71, 0x1d, 0x1e,
+	0x02, 0x73, 0x70, 0x58, 0x32, 0x5b, 0x1d, 0x67,
+	0x3d, 0xe0, 0x74, 0x4f, 0x03, 0xf2, 0x70, 0x51,
+	0x79, 0xf1, 0x61, 0x70, 0x15, 0x74, 0x9d, 0x23,
+	0x89, 0xde, 0xac, 0xfd, 0xde, 0xd0, 0x1f, 0xc3,
+	0x87, 0x44, 0x35, 0x4b, 0xe5, 0xb0, 0x60, 0xc5,
+	0x22, 0xe4, 0x9e, 0xca, 0xeb, 0xd5, 0x3a, 0x09,
+	0x45, 0xa4, 0xdb, 0xfa, 0x3f, 0xeb, 0x1b, 0xc7,
+	0xc8, 0x14, 0x99, 0x51, 0x92, 0x10, 0xed, 0xed,
+	0x28, 0xe0, 0xa1, 0xf8, 0x26, 0xcf, 0xcd, 0xcb,
+	0x63, 0xa1, 0x3b, 0xe3, 0xdf, 0x7e, 0xfe, 0xa6,
+	0xf0, 0x81, 0x9a, 0xbf, 0x55, 0xde, 0x54, 0xd5,
+	0x56, 0x60, 0x98, 0x10, 0x68, 0xf4, 0x38, 0x96,
+	0x8e, 0x6f, 0x1d, 0x44, 0x7f, 0xd6, 0x2f, 0xfe,
+	0x55, 0xfb, 0x0c, 0x7e, 0x67, 0xe2, 0x61, 0x44,
+	0xed, 0xf2, 0x35, 0x30, 0x5d, 0xe9, 0xc7, 0xd6,
+	0x6d, 0xe0, 0xa0, 0xed, 0xf3, 0xfc, 0xd8, 0x3e,
+	0x0a, 0x7b, 0xcd, 0xaf, 0x65, 0x68, 0x18, 0xc0,
+	0xec, 0x04, 0x1c, 0x74, 0x6d, 0xe2, 0x6e, 0x79,
+	0xd4, 0x11, 0x2b, 0x62, 0xd5, 0x27, 0xad, 0x4f,
+	0x01, 0x59, 0x73, 0xcc, 0x6a, 0x53, 0xfb, 0x2d,
+	0xd5, 0x4e, 0x99, 0x21, 0x65, 0x4d, 0xf5, 0x82,
+	0xf7, 0xd8, 0x42, 0xce, 0x6f, 0x3d, 0x36, 0x47,
+	0xf1, 0x05, 0x16, 0xe8, 0x1b, 0x6a, 0x8f, 0x93,
+	0xf2, 0x8f, 0x37, 0x40, 0x12, 0x28, 0xa3, 0xe6,
+	0xb9, 0x17, 0x4a, 0x1f, 0xb1, 0xd1, 0x66, 0x69,
+	0x86, 0xc4, 0xfc, 0x97, 0xae, 0x3f, 0x8f, 0x1e,
+	0x2b, 0xdf, 0xcd, 0xf9, 0x3c
+};
+static const u8 dec_output011[] __initconst = {
+	0x7a, 0x57, 0xf2, 0xc7, 0x06, 0x3f, 0x50, 0x7b,
+	0x36, 0x1a, 0x66, 0x5c, 0xb9, 0x0e, 0x5e, 0x3b,
+	0x45, 0x60, 0xbe, 0x9a, 0x31, 0x9f, 0xff, 0x5d,
+	0x66, 0x34, 0xb4, 0xdc, 0xfb, 0x9d, 0x8e, 0xee,
+	0x6a, 0x33, 0xa4, 0x07, 0x3c, 0xf9, 0x4c, 0x30,
+	0xa1, 0x24, 0x52, 0xf9, 0x50, 0x46, 0x88, 0x20,
+	0x02, 0x32, 0x3a, 0x0e, 0x99, 0x63, 0xaf, 0x1f,
+	0x15, 0x28, 0x2a, 0x05, 0xff, 0x57, 0x59, 0x5e,
+	0x18, 0xa1, 0x1f, 0xd0, 0x92, 0x5c, 0x88, 0x66,
+	0x1b, 0x00, 0x64, 0xa5, 0x93, 0x8d, 0x06, 0x46,
+	0xb0, 0x64, 0x8b, 0x8b, 0xef, 0x99, 0x05, 0x35,
+	0x85, 0xb3, 0xf3, 0x33, 0xbb, 0xec, 0x66, 0xb6,
+	0x3d, 0x57, 0x42, 0xe3, 0xb4, 0xc6, 0xaa, 0xb0,
+	0x41, 0x2a, 0xb9, 0x59, 0xa9, 0xf6, 0x3e, 0x15,
+	0x26, 0x12, 0x03, 0x21, 0x4c, 0x74, 0x43, 0x13,
+	0x2a, 0x03, 0x27, 0x09, 0xb4, 0xfb, 0xe7, 0xb7,
+	0x40, 0xff, 0x5e, 0xce, 0x48, 0x9a, 0x60, 0xe3,
+	0x8b, 0x80, 0x8c, 0x38, 0x2d, 0xcb, 0x93, 0x37,
+	0x74, 0x05, 0x52, 0x6f, 0x73, 0x3e, 0xc3, 0xbc,
+	0xca, 0x72, 0x0a, 0xeb, 0xf1, 0x3b, 0xa0, 0x95,
+	0xdc, 0x8a, 0xc4, 0xa9, 0xdc, 0xca, 0x44, 0xd8,
+	0x08, 0x63, 0x6a, 0x36, 0xd3, 0x3c, 0xb8, 0xac,
+	0x46, 0x7d, 0xfd, 0xaa, 0xeb, 0x3e, 0x0f, 0x45,
+	0x8f, 0x49, 0xda, 0x2b, 0xf2, 0x12, 0xbd, 0xaf,
+	0x67, 0x8a, 0x63, 0x48, 0x4b, 0x55, 0x5f, 0x6d,
+	0x8c, 0xb9, 0x76, 0x34, 0x84, 0xae, 0xc2, 0xfc,
+	0x52, 0x64, 0x82, 0xf7, 0xb0, 0x06, 0xf0, 0x45,
+	0x73, 0x12, 0x50, 0x30, 0x72, 0xea, 0x78, 0x9a,
+	0xa8, 0xaf, 0xb5, 0xe3, 0xbb, 0x77, 0x52, 0xec,
+	0x59, 0x84, 0xbf, 0x6b, 0x8f, 0xce, 0x86, 0x5e,
+	0x1f, 0x23, 0xe9, 0xfb, 0x08, 0x86, 0xf7, 0x10,
+	0xb9, 0xf2, 0x44, 0x96, 0x44, 0x63, 0xa9, 0xa8,
+	0x78, 0x00, 0x23, 0xd6, 0xc7, 0xe7, 0x6e, 0x66,
+	0x4f, 0xcc, 0xee, 0x15, 0xb3, 0xbd, 0x1d, 0xa0,
+	0xe5, 0x9c, 0x1b, 0x24, 0x2c, 0x4d, 0x3c, 0x62,
+	0x35, 0x9c, 0x88, 0x59, 0x09, 0xdd, 0x82, 0x1b,
+	0xcf, 0x0a, 0x83, 0x6b, 0x3f, 0xae, 0x03, 0xc4,
+	0xb4, 0xdd, 0x7e, 0x5b, 0x28, 0x76, 0x25, 0x96,
+	0xd9, 0xc9, 0x9d, 0x5f, 0x86, 0xfa, 0xf6, 0xd7,
+	0xd2, 0xe6, 0x76, 0x1d, 0x0f, 0xa1, 0xdc, 0x74,
+	0x05, 0x1b, 0x1d, 0xe0, 0xcd, 0x16, 0xb0, 0xa8,
+	0x8a, 0x34, 0x7b, 0x15, 0x11, 0x77, 0xe5, 0x7b,
+	0x7e, 0x20, 0xf7, 0xda, 0x38, 0xda, 0xce, 0x70,
+	0xe9, 0xf5, 0x6c, 0xd9, 0xbe, 0x0c, 0x4c, 0x95,
+	0x4c, 0xc2, 0x9b, 0x34, 0x55, 0x55, 0xe1, 0xf3,
+	0x46, 0x8e, 0x48, 0x74, 0x14, 0x4f, 0x9d, 0xc9,
+	0xf5, 0xe8, 0x1a, 0xf0, 0x11, 0x4a, 0xc1, 0x8d,
+	0xe0, 0x93, 0xa0, 0xbe, 0x09, 0x1c, 0x2b, 0x4e,
+	0x0f, 0xb2, 0x87, 0x8b, 0x84, 0xfe, 0x92, 0x32,
+	0x14, 0xd7, 0x93, 0xdf, 0xe7, 0x44, 0xbc, 0xc5,
+	0xae, 0x53, 0x69, 0xd8, 0xb3, 0x79, 0x37, 0x80,
+	0xe3, 0x17, 0x5c, 0xec, 0x53, 0x00, 0x9a, 0xe3,
+	0x8e, 0xdc, 0x38, 0xb8, 0x66, 0xf0, 0xd3, 0xad,
+	0x1d, 0x02, 0x96, 0x86, 0x3e, 0x9d, 0x3b, 0x5d,
+	0xa5, 0x7f, 0x21, 0x10, 0xf1, 0x1f, 0x13, 0x20,
+	0xf9, 0x57, 0x87, 0x20, 0xf5, 0x5f, 0xf1, 0x17,
+	0x48, 0x0a, 0x51, 0x5a, 0xcd, 0x19, 0x03, 0xa6,
+	0x5a, 0xd1, 0x12, 0x97, 0xe9, 0x48, 0xe2, 0x1d,
+	0x83, 0x75, 0x50, 0xd9, 0x75, 0x7d, 0x6a, 0x82,
+	0xa1, 0xf9, 0x4e, 0x54, 0x87, 0x89, 0xc9, 0x0c,
+	0xb7, 0x5b, 0x6a, 0x91, 0xc1, 0x9c, 0xb2, 0xa9,
+	0xdc, 0x9a, 0xa4, 0x49, 0x0a, 0x6d, 0x0d, 0xbb,
+	0xde, 0x86, 0x44, 0xdd, 0x5d, 0x89, 0x2b, 0x96,
+	0x0f, 0x23, 0x95, 0xad, 0xcc, 0xa2, 0xb3, 0xb9,
+	0x7e, 0x74, 0x38, 0xba, 0x9f, 0x73, 0xae, 0x5f,
+	0xf8, 0x68, 0xa2, 0xe0, 0xa9, 0xce, 0xbd, 0x40,
+	0xd4, 0x4c, 0x6b, 0xd2, 0x56, 0x62, 0xb0, 0xcc,
+	0x63, 0x7e, 0x5b, 0xd3, 0xae, 0xd1, 0x75, 0xce,
+	0xbb, 0xb4, 0x5b, 0xa8, 0xf8, 0xb4, 0xac, 0x71,
+	0x75, 0xaa, 0xc9, 0x9f, 0xbb, 0x6c, 0xad, 0x0f,
+	0x55, 0x5d, 0xe8, 0x85, 0x7d, 0xf9, 0x21, 0x35,
+	0xea, 0x92, 0x85, 0x2b, 0x00, 0xec, 0x84, 0x90,
+	0x0a, 0x63, 0x96, 0xe4, 0x6b, 0xa9, 0x77, 0xb8,
+	0x91, 0xf8, 0x46, 0x15, 0x72, 0x63, 0x70, 0x01,
+	0x40, 0xa3, 0xa5, 0x76, 0x62, 0x2b, 0xbf, 0xf1,
+	0xe5, 0x8d, 0x9f, 0xa3, 0xfa, 0x9b, 0x03, 0xbe,
+	0xfe, 0x65, 0x6f, 0xa2, 0x29, 0x0d, 0x54, 0xb4,
+	0x71, 0xce, 0xa9, 0xd6, 0x3d, 0x88, 0xf9, 0xaf,
+	0x6b, 0xa8, 0x9e, 0xf4, 0x16, 0x96, 0x36, 0xb9,
+	0x00, 0xdc, 0x10, 0xab, 0xb5, 0x08, 0x31, 0x1f,
+	0x00, 0xb1, 0x3c, 0xd9, 0x38, 0x3e, 0xc6, 0x04,
+	0xa7, 0x4e, 0xe8, 0xae, 0xed, 0x98, 0xc2, 0xf7,
+	0xb9, 0x00, 0x5f, 0x8c, 0x60, 0xd1, 0xe5, 0x15,
+	0xf7, 0xae, 0x1e, 0x84, 0x88, 0xd1, 0xf6, 0xbc,
+	0x3a, 0x89, 0x35, 0x22, 0x83, 0x7c, 0xca, 0xf0,
+	0x33, 0x82, 0x4c, 0x79, 0x3c, 0xfd, 0xb1, 0xae,
+	0x52, 0x62, 0x55, 0xd2, 0x41, 0x60, 0xc6, 0xbb,
+	0xfa, 0x0e, 0x59, 0xd6, 0xa8, 0xfe, 0x5d, 0xed,
+	0x47, 0x3d, 0xe0, 0xea, 0x1f, 0x6e, 0x43, 0x51,
+	0xec, 0x10, 0x52, 0x56, 0x77, 0x42, 0x6b, 0x52,
+	0x87, 0xd8, 0xec, 0xe0, 0xaa, 0x76, 0xa5, 0x84,
+	0x2a, 0x22, 0x24, 0xfd, 0x92, 0x40, 0x88, 0xd5,
+	0x85, 0x1c, 0x1f, 0x6b, 0x47, 0xa0, 0xc4, 0xe4,
+	0xef, 0xf4, 0xea, 0xd7, 0x59, 0xac, 0x2a, 0x9e,
+	0x8c, 0xfa, 0x1f, 0x42, 0x08, 0xfe, 0x4f, 0x74,
+	0xa0, 0x26, 0xf5, 0xb3, 0x84, 0xf6, 0x58, 0x5f,
+	0x26, 0x66, 0x3e, 0xd7, 0xe4, 0x22, 0x91, 0x13,
+	0xc8, 0xac, 0x25, 0x96, 0x23, 0xd8, 0x09, 0xea,
+	0x45, 0x75, 0x23, 0xb8, 0x5f, 0xc2, 0x90, 0x8b,
+	0x09, 0xc4, 0xfc, 0x47, 0x6c, 0x6d, 0x0a, 0xef,
+	0x69, 0xa4, 0x38, 0x19, 0xcf, 0x7d, 0xf9, 0x09,
+	0x73, 0x9b, 0x60, 0x5a, 0xf7, 0x37, 0xb5, 0xfe,
+	0x9f, 0xe3, 0x2b, 0x4c, 0x0d, 0x6e, 0x19, 0xf1,
+	0xd6, 0xc0, 0x70, 0xf3, 0x9d, 0x22, 0x3c, 0xf9,
+	0x49, 0xce, 0x30, 0x8e, 0x44, 0xb5, 0x76, 0x15,
+	0x8f, 0x52, 0xfd, 0xa5, 0x04, 0xb8, 0x55, 0x6a,
+	0x36, 0x59, 0x7c, 0xc4, 0x48, 0xb8, 0xd7, 0xab,
+	0x05, 0x66, 0xe9, 0x5e, 0x21, 0x6f, 0x6b, 0x36,
+	0x29, 0xbb, 0xe9, 0xe3, 0xa2, 0x9a, 0xa8, 0xcd,
+	0x55, 0x25, 0x11, 0xba, 0x5a, 0x58, 0xa0, 0xde,
+	0xae, 0x19, 0x2a, 0x48, 0x5a, 0xff, 0x36, 0xcd,
+	0x6d, 0x16, 0x7a, 0x73, 0x38, 0x46, 0xe5, 0x47,
+	0x59, 0xc8, 0xa2, 0xf6, 0xe2, 0x6c, 0x83, 0xc5,
+	0x36, 0x2c, 0x83, 0x7d, 0xb4, 0x01, 0x05, 0x69,
+	0xe7, 0xaf, 0x5c, 0xc4, 0x64, 0x82, 0x12, 0x21,
+	0xef, 0xf7, 0xd1, 0x7d, 0xb8, 0x8d, 0x8c, 0x98,
+	0x7c, 0x5f, 0x7d, 0x92, 0x88, 0xb9, 0x94, 0x07,
+	0x9c, 0xd8, 0xe9, 0x9c, 0x17, 0x38, 0xe3, 0x57,
+	0x6c, 0xe0, 0xdc, 0xa5, 0x92, 0x42, 0xb3, 0xbd,
+	0x50, 0xa2, 0x7e, 0xb5, 0xb1, 0x52, 0x72, 0x03,
+	0x97, 0xd8, 0xaa, 0x9a, 0x1e, 0x75, 0x41, 0x11,
+	0xa3, 0x4f, 0xcc, 0xd4, 0xe3, 0x73, 0xad, 0x96,
+	0xdc, 0x47, 0x41, 0x9f, 0xb0, 0xbe, 0x79, 0x91,
+	0xf5, 0xb6, 0x18, 0xfe, 0xc2, 0x83, 0x18, 0x7d,
+	0x73, 0xd9, 0x4f, 0x83, 0x84, 0x03, 0xb3, 0xf0,
+	0x77, 0x66, 0x3d, 0x83, 0x63, 0x2e, 0x2c, 0xf9,
+	0xdd, 0xa6, 0x1f, 0x89, 0x82, 0xb8, 0x23, 0x42,
+	0xeb, 0xe2, 0xca, 0x70, 0x82, 0x61, 0x41, 0x0a,
+	0x6d, 0x5f, 0x75, 0xc5, 0xe2, 0xc4, 0x91, 0x18,
+	0x44, 0x22, 0xfa, 0x34, 0x10, 0xf5, 0x20, 0xdc,
+	0xb7, 0xdd, 0x2a, 0x20, 0x77, 0xf5, 0xf9, 0xce,
+	0xdb, 0xa0, 0x0a, 0x52, 0x2a, 0x4e, 0xdd, 0xcc,
+	0x97, 0xdf, 0x05, 0xe4, 0x5e, 0xb7, 0xaa, 0xf0,
+	0xe2, 0x80, 0xff, 0xba, 0x1a, 0x0f, 0xac, 0xdf,
+	0x02, 0x32, 0xe6, 0xf7, 0xc7, 0x17, 0x13, 0xb7,
+	0xfc, 0x98, 0x48, 0x8c, 0x0d, 0x82, 0xc9, 0x80,
+	0x7a, 0xe2, 0x0a, 0xc5, 0xb4, 0xde, 0x7c, 0x3c,
+	0x79, 0x81, 0x0e, 0x28, 0x65, 0x79, 0x67, 0x82,
+	0x69, 0x44, 0x66, 0x09, 0xf7, 0x16, 0x1a, 0xf9,
+	0x7d, 0x80, 0xa1, 0x79, 0x14, 0xa9, 0xc8, 0x20,
+	0xfb, 0xa2, 0x46, 0xbe, 0x08, 0x35, 0x17, 0x58,
+	0xc1, 0x1a, 0xda, 0x2a, 0x6b, 0x2e, 0x1e, 0xe6,
+	0x27, 0x55, 0x7b, 0x19, 0xe2, 0xfb, 0x64, 0xfc,
+	0x5e, 0x15, 0x54, 0x3c, 0xe7, 0xc2, 0x11, 0x50,
+	0x30, 0xb8, 0x72, 0x03, 0x0b, 0x1a, 0x9f, 0x86,
+	0x27, 0x11, 0x5c, 0x06, 0x2b, 0xbd, 0x75, 0x1a,
+	0x0a, 0xda, 0x01, 0xfa, 0x5c, 0x4a, 0xc1, 0x80,
+	0x3a, 0x6e, 0x30, 0xc8, 0x2c, 0xeb, 0x56, 0xec,
+	0x89, 0xfa, 0x35, 0x7b, 0xb2, 0xf0, 0x97, 0x08,
+	0x86, 0x53, 0xbe, 0xbd, 0x40, 0x41, 0x38, 0x1c,
+	0xb4, 0x8b, 0x79, 0x2e, 0x18, 0x96, 0x94, 0xde,
+	0xe8, 0xca, 0xe5, 0x9f, 0x92, 0x9f, 0x15, 0x5d,
+	0x56, 0x60, 0x5c, 0x09, 0xf9, 0x16, 0xf4, 0x17,
+	0x0f, 0xf6, 0x4c, 0xda, 0xe6, 0x67, 0x89, 0x9f,
+	0xca, 0x6c, 0xe7, 0x9b, 0x04, 0x62, 0x0e, 0x26,
+	0xa6, 0x52, 0xbd, 0x29, 0xff, 0xc7, 0xa4, 0x96,
+	0xe6, 0x6a, 0x02, 0xa5, 0x2e, 0x7b, 0xfe, 0x97,
+	0x68, 0x3e, 0x2e, 0x5f, 0x3b, 0x0f, 0x36, 0xd6,
+	0x98, 0x19, 0x59, 0x48, 0xd2, 0xc6, 0xe1, 0x55,
+	0x1a, 0x6e, 0xd6, 0xed, 0x2c, 0xba, 0xc3, 0x9e,
+	0x64, 0xc9, 0x95, 0x86, 0x35, 0x5e, 0x3e, 0x88,
+	0x69, 0x99, 0x4b, 0xee, 0xbe, 0x9a, 0x99, 0xb5,
+	0x6e, 0x58, 0xae, 0xdd, 0x22, 0xdb, 0xdd, 0x6b,
+	0xfc, 0xaf, 0x90, 0xa3, 0x3d, 0xa4, 0xc1, 0x15,
+	0x92, 0x18, 0x8d, 0xd2, 0x4b, 0x7b, 0x06, 0xd1,
+	0x37, 0xb5, 0xe2, 0x7c, 0x2c, 0xf0, 0x25, 0xe4,
+	0x94, 0x2a, 0xbd, 0xe3, 0x82, 0x70, 0x78, 0xa3,
+	0x82, 0x10, 0x5a, 0x90, 0xd7, 0xa4, 0xfa, 0xaf,
+	0x1a, 0x88, 0x59, 0xdc, 0x74, 0x12, 0xb4, 0x8e,
+	0xd7, 0x19, 0x46, 0xf4, 0x84, 0x69, 0x9f, 0xbb,
+	0x70, 0xa8, 0x4c, 0x52, 0x81, 0xa9, 0xff, 0x76,
+	0x1c, 0xae, 0xd8, 0x11, 0x3d, 0x7f, 0x7d, 0xc5,
+	0x12, 0x59, 0x28, 0x18, 0xc2, 0xa2, 0xb7, 0x1c,
+	0x88, 0xf8, 0xd6, 0x1b, 0xa6, 0x7d, 0x9e, 0xde,
+	0x29, 0xf8, 0xed, 0xff, 0xeb, 0x92, 0x24, 0x4f,
+	0x05, 0xaa, 0xd9, 0x49, 0xba, 0x87, 0x59, 0x51,
+	0xc9, 0x20, 0x5c, 0x9b, 0x74, 0xcf, 0x03, 0xd9,
+	0x2d, 0x34, 0xc7, 0x5b, 0xa5, 0x40, 0xb2, 0x99,
+	0xf5, 0xcb, 0xb4, 0xf6, 0xb7, 0x72, 0x4a, 0xd6,
+	0xbd, 0xb0, 0xf3, 0x93, 0xe0, 0x1b, 0xa8, 0x04,
+	0x1e, 0x35, 0xd4, 0x80, 0x20, 0xf4, 0x9c, 0x31,
+	0x6b, 0x45, 0xb9, 0x15, 0xb0, 0x5e, 0xdd, 0x0a,
+	0x33, 0x9c, 0x83, 0xcd, 0x58, 0x89, 0x50, 0x56,
+	0xbb, 0x81, 0x00, 0x91, 0x32, 0xf3, 0x1b, 0x3e,
+	0xcf, 0x45, 0xe1, 0xf9, 0xe1, 0x2c, 0x26, 0x78,
+	0x93, 0x9a, 0x60, 0x46, 0xc9, 0xb5, 0x5e, 0x6a,
+	0x28, 0x92, 0x87, 0x3f, 0x63, 0x7b, 0xdb, 0xf7,
+	0xd0, 0x13, 0x9d, 0x32, 0x40, 0x5e, 0xcf, 0xfb,
+	0x79, 0x68, 0x47, 0x4c, 0xfd, 0x01, 0x17, 0xe6,
+	0x97, 0x93, 0x78, 0xbb, 0xa6, 0x27, 0xa3, 0xe8,
+	0x1a, 0xe8, 0x94, 0x55, 0x7d, 0x08, 0xe5, 0xdc,
+	0x66, 0xa3, 0x69, 0xc8, 0xca, 0xc5, 0xa1, 0x84,
+	0x55, 0xde, 0x08, 0x91, 0x16, 0x3a, 0x0c, 0x86,
+	0xab, 0x27, 0x2b, 0x64, 0x34, 0x02, 0x6c, 0x76,
+	0x8b, 0xc6, 0xaf, 0xcc, 0xe1, 0xd6, 0x8c, 0x2a,
+	0x18, 0x3d, 0xa6, 0x1b, 0x37, 0x75, 0x45, 0x73,
+	0xc2, 0x75, 0xd7, 0x53, 0x78, 0x3a, 0xd6, 0xe8,
+	0x29, 0xd2, 0x4a, 0xa8, 0x1e, 0x82, 0xf6, 0xb6,
+	0x81, 0xde, 0x21, 0xed, 0x2b, 0x56, 0xbb, 0xf2,
+	0xd0, 0x57, 0xc1, 0x7c, 0xd2, 0x6a, 0xd2, 0x56,
+	0xf5, 0x13, 0x5f, 0x1c, 0x6a, 0x0b, 0x74, 0xfb,
+	0xe9, 0xfe, 0x9e, 0xea, 0x95, 0xb2, 0x46, 0xab,
+	0x0a, 0xfc, 0xfd, 0xf3, 0xbb, 0x04, 0x2b, 0x76,
+	0x1b, 0xa4, 0x74, 0xb0, 0xc1, 0x78, 0xc3, 0x69,
+	0xe2, 0xb0, 0x01, 0xe1, 0xde, 0x32, 0x4c, 0x8d,
+	0x1a, 0xb3, 0x38, 0x08, 0xd5, 0xfc, 0x1f, 0xdc,
+	0x0e, 0x2c, 0x9c, 0xb1, 0xa1, 0x63, 0x17, 0x22,
+	0xf5, 0x6c, 0x93, 0x70, 0x74, 0x00, 0xf8, 0x39,
+	0x01, 0x94, 0xd1, 0x32, 0x23, 0x56, 0x5d, 0xa6,
+	0x02, 0x76, 0x76, 0x93, 0xce, 0x2f, 0x19, 0xe9,
+	0x17, 0x52, 0xae, 0x6e, 0x2c, 0x6d, 0x61, 0x7f,
+	0x3b, 0xaa, 0xe0, 0x52, 0x85, 0xc5, 0x65, 0xc1,
+	0xbb, 0x8e, 0x5b, 0x21, 0xd5, 0xc9, 0x78, 0x83,
+	0x07, 0x97, 0x4c, 0x62, 0x61, 0x41, 0xd4, 0xfc,
+	0xc9, 0x39, 0xe3, 0x9b, 0xd0, 0xcc, 0x75, 0xc4,
+	0x97, 0xe6, 0xdd, 0x2a, 0x5f, 0xa6, 0xe8, 0x59,
+	0x6c, 0x98, 0xb9, 0x02, 0xe2, 0xa2, 0xd6, 0x68,
+	0xee, 0x3b, 0x1d, 0xe3, 0x4d, 0x5b, 0x30, 0xef,
+	0x03, 0xf2, 0xeb, 0x18, 0x57, 0x36, 0xe8, 0xa1,
+	0xf4, 0x47, 0xfb, 0xcb, 0x8f, 0xcb, 0xc8, 0xf3,
+	0x4f, 0x74, 0x9d, 0x9d, 0xb1, 0x8d, 0x14, 0x44,
+	0xd9, 0x19, 0xb4, 0x54, 0x4f, 0x75, 0x19, 0x09,
+	0xa0, 0x75, 0xbc, 0x3b, 0x82, 0xc6, 0x3f, 0xb8,
+	0x83, 0x19, 0x6e, 0xd6, 0x37, 0xfe, 0x6e, 0x8a,
+	0x4e, 0xe0, 0x4a, 0xab, 0x7b, 0xc8, 0xb4, 0x1d,
+	0xf4, 0xed, 0x27, 0x03, 0x65, 0xa2, 0xa1, 0xae,
+	0x11, 0xe7, 0x98, 0x78, 0x48, 0x91, 0xd2, 0xd2,
+	0xd4, 0x23, 0x78, 0x50, 0xb1, 0x5b, 0x85, 0x10,
+	0x8d, 0xca, 0x5f, 0x0f, 0x71, 0xae, 0x72, 0x9a,
+	0xf6, 0x25, 0x19, 0x60, 0x06, 0xf7, 0x10, 0x34,
+	0x18, 0x0d, 0xc9, 0x9f, 0x7b, 0x0c, 0x9b, 0x8f,
+	0x91, 0x1b, 0x9f, 0xcd, 0x10, 0xee, 0x75, 0xf9,
+	0x97, 0x66, 0xfc, 0x4d, 0x33, 0x6e, 0x28, 0x2b,
+	0x92, 0x85, 0x4f, 0xab, 0x43, 0x8d, 0x8f, 0x7d,
+	0x86, 0xa7, 0xc7, 0xd8, 0xd3, 0x0b, 0x8b, 0x57,
+	0xb6, 0x1d, 0x95, 0x0d, 0xe9, 0xbc, 0xd9, 0x03,
+	0xd9, 0x10, 0x19, 0xc3, 0x46, 0x63, 0x55, 0x87,
+	0x61, 0x79, 0x6c, 0x95, 0x0e, 0x9c, 0xdd, 0xca,
+	0xc3, 0xf3, 0x64, 0xf0, 0x7d, 0x76, 0xb7, 0x53,
+	0x67, 0x2b, 0x1e, 0x44, 0x56, 0x81, 0xea, 0x8f,
+	0x5c, 0x42, 0x16, 0xb8, 0x28, 0xeb, 0x1b, 0x61,
+	0x10, 0x1e, 0xbf, 0xec, 0xa8
+};
+static const u8 dec_assoc011[] __initconst = {
+	0xd6, 0x31, 0xda, 0x5d, 0x42, 0x5e, 0xd7
+};
+static const u8 dec_nonce011[] __initconst = {
+	0xfd, 0x87, 0xd4, 0xd8, 0x62, 0xfd, 0xec, 0xaa
+};
+static const u8 dec_key011[] __initconst = {
+	0x35, 0x4e, 0xb5, 0x70, 0x50, 0x42, 0x8a, 0x85,
+	0xf2, 0xfb, 0xed, 0x7b, 0xd0, 0x9e, 0x97, 0xca,
+	0xfa, 0x98, 0x66, 0x63, 0xee, 0x37, 0xcc, 0x52,
+	0xfe, 0xd1, 0xdf, 0x95, 0x15, 0x34, 0x29, 0x38
+};
+
+static const u8 dec_input012[] __initconst = {
+	0x52, 0x34, 0xb3, 0x65, 0x3b, 0xb7, 0xe5, 0xd3,
+	0xab, 0x49, 0x17, 0x60, 0xd2, 0x52, 0x56, 0xdf,
+	0xdf, 0x34, 0x56, 0x82, 0xe2, 0xbe, 0xe5, 0xe1,
+	0x28, 0xd1, 0x4e, 0x5f, 0x4f, 0x01, 0x7d, 0x3f,
+	0x99, 0x6b, 0x30, 0x6e, 0x1a, 0x7c, 0x4c, 0x8e,
+	0x62, 0x81, 0xae, 0x86, 0x3f, 0x6b, 0xd0, 0xb5,
+	0xa9, 0xcf, 0x50, 0xf1, 0x02, 0x12, 0xa0, 0x0b,
+	0x24, 0xe9, 0xe6, 0x72, 0x89, 0x2c, 0x52, 0x1b,
+	0x34, 0x38, 0xf8, 0x75, 0x5f, 0xa0, 0x74, 0xe2,
+	0x99, 0xdd, 0xa6, 0x4b, 0x14, 0x50, 0x4e, 0xf1,
+	0xbe, 0xd6, 0x9e, 0xdb, 0xb2, 0x24, 0x27, 0x74,
+	0x12, 0x4a, 0x78, 0x78, 0x17, 0xa5, 0x58, 0x8e,
+	0x2f, 0xf9, 0xf4, 0x8d, 0xee, 0x03, 0x88, 0xae,
+	0xb8, 0x29, 0xa1, 0x2f, 0x4b, 0xee, 0x92, 0xbd,
+	0x87, 0xb3, 0xce, 0x34, 0x21, 0x57, 0x46, 0x04,
+	0x49, 0x0c, 0x80, 0xf2, 0x01, 0x13, 0xa1, 0x55,
+	0xb3, 0xff, 0x44, 0x30, 0x3c, 0x1c, 0xd0, 0xef,
+	0xbc, 0x18, 0x74, 0x26, 0xad, 0x41, 0x5b, 0x5b,
+	0x3e, 0x9a, 0x7a, 0x46, 0x4f, 0x16, 0xd6, 0x74,
+	0x5a, 0xb7, 0x3a, 0x28, 0x31, 0xd8, 0xae, 0x26,
+	0xac, 0x50, 0x53, 0x86, 0xf2, 0x56, 0xd7, 0x3f,
+	0x29, 0xbc, 0x45, 0x68, 0x8e, 0xcb, 0x98, 0x64,
+	0xdd, 0xc9, 0xba, 0xb8, 0x4b, 0x7b, 0x82, 0xdd,
+	0x14, 0xa7, 0xcb, 0x71, 0x72, 0x00, 0x5c, 0xad,
+	0x7b, 0x6a, 0x89, 0xa4, 0x3d, 0xbf, 0xb5, 0x4b,
+	0x3e, 0x7c, 0x5a, 0xcf, 0xb8, 0xa1, 0xc5, 0x6e,
+	0xc8, 0xb6, 0x31, 0x57, 0x7b, 0xdf, 0xa5, 0x7e,
+	0xb1, 0xd6, 0x42, 0x2a, 0x31, 0x36, 0xd1, 0xd0,
+	0x3f, 0x7a, 0xe5, 0x94, 0xd6, 0x36, 0xa0, 0x6f,
+	0xb7, 0x40, 0x7d, 0x37, 0xc6, 0x55, 0x7c, 0x50,
+	0x40, 0x6d, 0x29, 0x89, 0xe3, 0x5a, 0xae, 0x97,
+	0xe7, 0x44, 0x49, 0x6e, 0xbd, 0x81, 0x3d, 0x03,
+	0x93, 0x06, 0x12, 0x06, 0xe2, 0x41, 0x12, 0x4a,
+	0xf1, 0x6a, 0xa4, 0x58, 0xa2, 0xfb, 0xd2, 0x15,
+	0xba, 0xc9, 0x79, 0xc9, 0xce, 0x5e, 0x13, 0xbb,
+	0xf1, 0x09, 0x04, 0xcc, 0xfd, 0xe8, 0x51, 0x34,
+	0x6a, 0xe8, 0x61, 0x88, 0xda, 0xed, 0x01, 0x47,
+	0x84, 0xf5, 0x73, 0x25, 0xf9, 0x1c, 0x42, 0x86,
+	0x07, 0xf3, 0x5b, 0x1a, 0x01, 0xb3, 0xeb, 0x24,
+	0x32, 0x8d, 0xf6, 0xed, 0x7c, 0x4b, 0xeb, 0x3c,
+	0x36, 0x42, 0x28, 0xdf, 0xdf, 0xb6, 0xbe, 0xd9,
+	0x8c, 0x52, 0xd3, 0x2b, 0x08, 0x90, 0x8c, 0xe7,
+	0x98, 0x31, 0xe2, 0x32, 0x8e, 0xfc, 0x11, 0x48,
+	0x00, 0xa8, 0x6a, 0x42, 0x4a, 0x02, 0xc6, 0x4b,
+	0x09, 0xf1, 0xe3, 0x49, 0xf3, 0x45, 0x1f, 0x0e,
+	0xbc, 0x56, 0xe2, 0xe4, 0xdf, 0xfb, 0xeb, 0x61,
+	0xfa, 0x24, 0xc1, 0x63, 0x75, 0xbb, 0x47, 0x75,
+	0xaf, 0xe1, 0x53, 0x16, 0x96, 0x21, 0x85, 0x26,
+	0x11, 0xb3, 0x76, 0xe3, 0x23, 0xa1, 0x6b, 0x74,
+	0x37, 0xd0, 0xde, 0x06, 0x90, 0x71, 0x5d, 0x43,
+	0x88, 0x9b, 0x00, 0x54, 0xa6, 0x75, 0x2f, 0xa1,
+	0xc2, 0x0b, 0x73, 0x20, 0x1d, 0xb6, 0x21, 0x79,
+	0x57, 0x3f, 0xfa, 0x09, 0xbe, 0x8a, 0x33, 0xc3,
+	0x52, 0xf0, 0x1d, 0x82, 0x31, 0xd1, 0x55, 0xb5,
+	0x6c, 0x99, 0x25, 0xcf, 0x5c, 0x32, 0xce, 0xe9,
+	0x0d, 0xfa, 0x69, 0x2c, 0xd5, 0x0d, 0xc5, 0x6d,
+	0x86, 0xd0, 0x0c, 0x3b, 0x06, 0x50, 0x79, 0xe8,
+	0xc3, 0xae, 0x04, 0xe6, 0xcd, 0x51, 0xe4, 0x26,
+	0x9b, 0x4f, 0x7e, 0xa6, 0x0f, 0xab, 0xd8, 0xe5,
+	0xde, 0xa9, 0x00, 0x95, 0xbe, 0xa3, 0x9d, 0x5d,
+	0xb2, 0x09, 0x70, 0x18, 0x1c, 0xf0, 0xac, 0x29,
+	0x23, 0x02, 0x29, 0x28, 0xd2, 0x74, 0x35, 0x57,
+	0x62, 0x0f, 0x24, 0xea, 0x5e, 0x33, 0xc2, 0x92,
+	0xf3, 0x78, 0x4d, 0x30, 0x1e, 0xa1, 0x99, 0xa9,
+	0x82, 0xb0, 0x42, 0x31, 0x8d, 0xad, 0x8a, 0xbc,
+	0xfc, 0xd4, 0x57, 0x47, 0x3e, 0xb4, 0x50, 0xdd,
+	0x6e, 0x2c, 0x80, 0x4d, 0x22, 0xf1, 0xfb, 0x57,
+	0xc4, 0xdd, 0x17, 0xe1, 0x8a, 0x36, 0x4a, 0xb3,
+	0x37, 0xca, 0xc9, 0x4e, 0xab, 0xd5, 0x69, 0xc4,
+	0xf4, 0xbc, 0x0b, 0x3b, 0x44, 0x4b, 0x29, 0x9c,
+	0xee, 0xd4, 0x35, 0x22, 0x21, 0xb0, 0x1f, 0x27,
+	0x64, 0xa8, 0x51, 0x1b, 0xf0, 0x9f, 0x19, 0x5c,
+	0xfb, 0x5a, 0x64, 0x74, 0x70, 0x45, 0x09, 0xf5,
+	0x64, 0xfe, 0x1a, 0x2d, 0xc9, 0x14, 0x04, 0x14,
+	0xcf, 0xd5, 0x7d, 0x60, 0xaf, 0x94, 0x39, 0x94,
+	0xe2, 0x7d, 0x79, 0x82, 0xd0, 0x65, 0x3b, 0x6b,
+	0x9c, 0x19, 0x84, 0xb4, 0x6d, 0xb3, 0x0c, 0x99,
+	0xc0, 0x56, 0xa8, 0xbd, 0x73, 0xce, 0x05, 0x84,
+	0x3e, 0x30, 0xaa, 0xc4, 0x9b, 0x1b, 0x04, 0x2a,
+	0x9f, 0xd7, 0x43, 0x2b, 0x23, 0xdf, 0xbf, 0xaa,
+	0xd5, 0xc2, 0x43, 0x2d, 0x70, 0xab, 0xdc, 0x75,
+	0xad, 0xac, 0xf7, 0xc0, 0xbe, 0x67, 0xb2, 0x74,
+	0xed, 0x67, 0x10, 0x4a, 0x92, 0x60, 0xc1, 0x40,
+	0x50, 0x19, 0x8a, 0x8a, 0x8c, 0x09, 0x0e, 0x72,
+	0xe1, 0x73, 0x5e, 0xe8, 0x41, 0x85, 0x63, 0x9f,
+	0x3f, 0xd7, 0x7d, 0xc4, 0xfb, 0x22, 0x5d, 0x92,
+	0x6c, 0xb3, 0x1e, 0xe2, 0x50, 0x2f, 0x82, 0xa8,
+	0x28, 0xc0, 0xb5, 0xd7, 0x5f, 0x68, 0x0d, 0x2c,
+	0x2d, 0xaf, 0x7e, 0xfa, 0x2e, 0x08, 0x0f, 0x1f,
+	0x70, 0x9f, 0xe9, 0x19, 0x72, 0x55, 0xf8, 0xfb,
+	0x51, 0xd2, 0x33, 0x5d, 0xa0, 0xd3, 0x2b, 0x0a,
+	0x6c, 0xbc, 0x4e, 0xcf, 0x36, 0x4d, 0xdc, 0x3b,
+	0xe9, 0x3e, 0x81, 0x7c, 0x61, 0xdb, 0x20, 0x2d,
+	0x3a, 0xc3, 0xb3, 0x0c, 0x1e, 0x00, 0xb9, 0x7c,
+	0xf5, 0xca, 0x10, 0x5f, 0x3a, 0x71, 0xb3, 0xe4,
+	0x20, 0xdb, 0x0c, 0x2a, 0x98, 0x63, 0x45, 0x00,
+	0x58, 0xf6, 0x68, 0xe4, 0x0b, 0xda, 0x13, 0x3b,
+	0x60, 0x5c, 0x76, 0xdb, 0xb9, 0x97, 0x71, 0xe4,
+	0xd9, 0xb7, 0xdb, 0xbd, 0x68, 0xc7, 0x84, 0x84,
+	0xaa, 0x7c, 0x68, 0x62, 0x5e, 0x16, 0xfc, 0xba,
+	0x72, 0xaa, 0x9a, 0xa9, 0xeb, 0x7c, 0x75, 0x47,
+	0x97, 0x7e, 0xad, 0xe2, 0xd9, 0x91, 0xe8, 0xe4,
+	0xa5, 0x31, 0xd7, 0x01, 0x8e, 0xa2, 0x11, 0x88,
+	0x95, 0xb9, 0xf2, 0x9b, 0xd3, 0x7f, 0x1b, 0x81,
+	0x22, 0xf7, 0x98, 0x60, 0x0a, 0x64, 0xa6, 0xc1,
+	0xf6, 0x49, 0xc7, 0xe3, 0x07, 0x4d, 0x94, 0x7a,
+	0xcf, 0x6e, 0x68, 0x0c, 0x1b, 0x3f, 0x6e, 0x2e,
+	0xee, 0x92, 0xfa, 0x52, 0xb3, 0x59, 0xf8, 0xf1,
+	0x8f, 0x6a, 0x66, 0xa3, 0x82, 0x76, 0x4a, 0x07,
+	0x1a, 0xc7, 0xdd, 0xf5, 0xda, 0x9c, 0x3c, 0x24,
+	0xbf, 0xfd, 0x42, 0xa1, 0x10, 0x64, 0x6a, 0x0f,
+	0x89, 0xee, 0x36, 0xa5, 0xce, 0x99, 0x48, 0x6a,
+	0xf0, 0x9f, 0x9e, 0x69, 0xa4, 0x40, 0x20, 0xe9,
+	0x16, 0x15, 0xf7, 0xdb, 0x75, 0x02, 0xcb, 0xe9,
+	0x73, 0x8b, 0x3b, 0x49, 0x2f, 0xf0, 0xaf, 0x51,
+	0x06, 0x5c, 0xdf, 0x27, 0x27, 0x49, 0x6a, 0xd1,
+	0xcc, 0xc7, 0xb5, 0x63, 0xb5, 0xfc, 0xb8, 0x5c,
+	0x87, 0x7f, 0x84, 0xb4, 0xcc, 0x14, 0xa9, 0x53,
+	0xda, 0xa4, 0x56, 0xf8, 0xb6, 0x1b, 0xcc, 0x40,
+	0x27, 0x52, 0x06, 0x5a, 0x13, 0x81, 0xd7, 0x3a,
+	0xd4, 0x3b, 0xfb, 0x49, 0x65, 0x31, 0x33, 0xb2,
+	0xfa, 0xcd, 0xad, 0x58, 0x4e, 0x2b, 0xae, 0xd2,
+	0x20, 0xfb, 0x1a, 0x48, 0xb4, 0x3f, 0x9a, 0xd8,
+	0x7a, 0x35, 0x4a, 0xc8, 0xee, 0x88, 0x5e, 0x07,
+	0x66, 0x54, 0xb9, 0xec, 0x9f, 0xa3, 0xe3, 0xb9,
+	0x37, 0xaa, 0x49, 0x76, 0x31, 0xda, 0x74, 0x2d,
+	0x3c, 0xa4, 0x65, 0x10, 0x32, 0x38, 0xf0, 0xde,
+	0xd3, 0x99, 0x17, 0xaa, 0x71, 0xaa, 0x8f, 0x0f,
+	0x8c, 0xaf, 0xa2, 0xf8, 0x5d, 0x64, 0xba, 0x1d,
+	0xa3, 0xef, 0x96, 0x73, 0xe8, 0xa1, 0x02, 0x8d,
+	0x0c, 0x6d, 0xb8, 0x06, 0x90, 0xb8, 0x08, 0x56,
+	0x2c, 0xa7, 0x06, 0xc9, 0xc2, 0x38, 0xdb, 0x7c,
+	0x63, 0xb1, 0x57, 0x8e, 0xea, 0x7c, 0x79, 0xf3,
+	0x49, 0x1d, 0xfe, 0x9f, 0xf3, 0x6e, 0xb1, 0x1d,
+	0xba, 0x19, 0x80, 0x1a, 0x0a, 0xd3, 0xb0, 0x26,
+	0x21, 0x40, 0xb1, 0x7c, 0xf9, 0x4d, 0x8d, 0x10,
+	0xc1, 0x7e, 0xf4, 0xf6, 0x3c, 0xa8, 0xfd, 0x7c,
+	0xa3, 0x92, 0xb2, 0x0f, 0xaa, 0xcc, 0xa6, 0x11,
+	0xfe, 0x04, 0xe3, 0xd1, 0x7a, 0x32, 0x89, 0xdf,
+	0x0d, 0xc4, 0x8f, 0x79, 0x6b, 0xca, 0x16, 0x7c,
+	0x6e, 0xf9, 0xad, 0x0f, 0xf6, 0xfe, 0x27, 0xdb,
+	0xc4, 0x13, 0x70, 0xf1, 0x62, 0x1a, 0x4f, 0x79,
+	0x40, 0xc9, 0x9b, 0x8b, 0x21, 0xea, 0x84, 0xfa,
+	0xf5, 0xf1, 0x89, 0xce, 0xb7, 0x55, 0x0a, 0x80,
+	0x39, 0x2f, 0x55, 0x36, 0x16, 0x9c, 0x7b, 0x08,
+	0xbd, 0x87, 0x0d, 0xa5, 0x32, 0xf1, 0x52, 0x7c,
+	0xe8, 0x55, 0x60, 0x5b, 0xd7, 0x69, 0xe4, 0xfc,
+	0xfa, 0x12, 0x85, 0x96, 0xea, 0x50, 0x28, 0xab,
+	0x8a, 0xf7, 0xbb, 0x0e, 0x53, 0x74, 0xca, 0xa6,
+	0x27, 0x09, 0xc2, 0xb5, 0xde, 0x18, 0x14, 0xd9,
+	0xea, 0xe5, 0x29, 0x1c, 0x40, 0x56, 0xcf, 0xd7,
+	0xae, 0x05, 0x3f, 0x65, 0xaf, 0x05, 0x73, 0xe2,
+	0x35, 0x96, 0x27, 0x07, 0x14, 0xc0, 0xad, 0x33,
+	0xf1, 0xdc, 0x44, 0x7a, 0x89, 0x17, 0x77, 0xd2,
+	0x9c, 0x58, 0x60, 0xf0, 0x3f, 0x7b, 0x2d, 0x2e,
+	0x57, 0x95, 0x54, 0x87, 0xed, 0xf2, 0xc7, 0x4c,
+	0xf0, 0xae, 0x56, 0x29, 0x19, 0x7d, 0x66, 0x4b,
+	0x9b, 0x83, 0x84, 0x42, 0x3b, 0x01, 0x25, 0x66,
+	0x8e, 0x02, 0xde, 0xb9, 0x83, 0x54, 0x19, 0xf6,
+	0x9f, 0x79, 0x0d, 0x67, 0xc5, 0x1d, 0x7a, 0x44,
+	0x02, 0x98, 0xa7, 0x16, 0x1c, 0x29, 0x0d, 0x74,
+	0xff, 0x85, 0x40, 0x06, 0xef, 0x2c, 0xa9, 0xc6,
+	0xf5, 0x53, 0x07, 0x06, 0xae, 0xe4, 0xfa, 0x5f,
+	0xd8, 0x39, 0x4d, 0xf1, 0x9b, 0x6b, 0xd9, 0x24,
+	0x84, 0xfe, 0x03, 0x4c, 0xb2, 0x3f, 0xdf, 0xa1,
+	0x05, 0x9e, 0x50, 0x14, 0x5a, 0xd9, 0x1a, 0xa2,
+	0xa7, 0xfa, 0xfa, 0x17, 0xf7, 0x78, 0xd6, 0xb5,
+	0x92, 0x61, 0x91, 0xac, 0x36, 0xfa, 0x56, 0x0d,
+	0x38, 0x32, 0x18, 0x85, 0x08, 0x58, 0x37, 0xf0,
+	0x4b, 0xdb, 0x59, 0xe7, 0xa4, 0x34, 0xc0, 0x1b,
+	0x01, 0xaf, 0x2d, 0xde, 0xa1, 0xaa, 0x5d, 0xd3,
+	0xec, 0xe1, 0xd4, 0xf7, 0xe6, 0x54, 0x68, 0xf0,
+	0x51, 0x97, 0xa7, 0x89, 0xea, 0x24, 0xad, 0xd3,
+	0x6e, 0x47, 0x93, 0x8b, 0x4b, 0xb4, 0xf7, 0x1c,
+	0x42, 0x06, 0x67, 0xe8, 0x99, 0xf6, 0xf5, 0x7b,
+	0x85, 0xb5, 0x65, 0xb5, 0xb5, 0xd2, 0x37, 0xf5,
+	0xf3, 0x02, 0xa6, 0x4d, 0x11, 0xa7, 0xdc, 0x51,
+	0x09, 0x7f, 0xa0, 0xd8, 0x88, 0x1c, 0x13, 0x71,
+	0xae, 0x9c, 0xb7, 0x7b, 0x34, 0xd6, 0x4e, 0x68,
+	0x26, 0x83, 0x51, 0xaf, 0x1d, 0xee, 0x8b, 0xbb,
+	0x69, 0x43, 0x2b, 0x9e, 0x8a, 0xbc, 0x02, 0x0e,
+	0xa0, 0x1b, 0xe0, 0xa8, 0x5f, 0x6f, 0xaf, 0x1b,
+	0x8f, 0xe7, 0x64, 0x71, 0x74, 0x11, 0x7e, 0xa8,
+	0xd8, 0xf9, 0x97, 0x06, 0xc3, 0xb6, 0xfb, 0xfb,
+	0xb7, 0x3d, 0x35, 0x9d, 0x3b, 0x52, 0xed, 0x54,
+	0xca, 0xf4, 0x81, 0x01, 0x2d, 0x1b, 0xc3, 0xa7,
+	0x00, 0x3d, 0x1a, 0x39, 0x54, 0xe1, 0xf6, 0xff,
+	0xed, 0x6f, 0x0b, 0x5a, 0x68, 0xda, 0x58, 0xdd,
+	0xa9, 0xcf, 0x5c, 0x4a, 0xe5, 0x09, 0x4e, 0xde,
+	0x9d, 0xbc, 0x3e, 0xee, 0x5a, 0x00, 0x3b, 0x2c,
+	0x87, 0x10, 0x65, 0x60, 0xdd, 0xd7, 0x56, 0xd1,
+	0x4c, 0x64, 0x45, 0xe4, 0x21, 0xec, 0x78, 0xf8,
+	0x25, 0x7a, 0x3e, 0x16, 0x5d, 0x09, 0x53, 0x14,
+	0xbe, 0x4f, 0xae, 0x87, 0xd8, 0xd1, 0xaa, 0x3c,
+	0xf6, 0x3e, 0xa4, 0x70, 0x8c, 0x5e, 0x70, 0xa4,
+	0xb3, 0x6b, 0x66, 0x73, 0xd3, 0xbf, 0x31, 0x06,
+	0x19, 0x62, 0x93, 0x15, 0xf2, 0x86, 0xe4, 0x52,
+	0x7e, 0x53, 0x4c, 0x12, 0x38, 0xcc, 0x34, 0x7d,
+	0x57, 0xf6, 0x42, 0x93, 0x8a, 0xc4, 0xee, 0x5c,
+	0x8a, 0xe1, 0x52, 0x8f, 0x56, 0x64, 0xf6, 0xa6,
+	0xd1, 0x91, 0x57, 0x70, 0xcd, 0x11, 0x76, 0xf5,
+	0x59, 0x60, 0x60, 0x3c, 0xc1, 0xc3, 0x0b, 0x7f,
+	0x58, 0x1a, 0x50, 0x91, 0xf1, 0x68, 0x8f, 0x6e,
+	0x74, 0x74, 0xa8, 0x51, 0x0b, 0xf7, 0x7a, 0x98,
+	0x37, 0xf2, 0x0a, 0x0e, 0xa4, 0x97, 0x04, 0xb8,
+	0x9b, 0xfd, 0xa0, 0xea, 0xf7, 0x0d, 0xe1, 0xdb,
+	0x03, 0xf0, 0x31, 0x29, 0xf8, 0xdd, 0x6b, 0x8b,
+	0x5d, 0xd8, 0x59, 0xa9, 0x29, 0xcf, 0x9a, 0x79,
+	0x89, 0x19, 0x63, 0x46, 0x09, 0x79, 0x6a, 0x11,
+	0xda, 0x63, 0x68, 0x48, 0x77, 0x23, 0xfb, 0x7d,
+	0x3a, 0x43, 0xcb, 0x02, 0x3b, 0x7a, 0x6d, 0x10,
+	0x2a, 0x9e, 0xac, 0xf1, 0xd4, 0x19, 0xf8, 0x23,
+	0x64, 0x1d, 0x2c, 0x5f, 0xf2, 0xb0, 0x5c, 0x23,
+	0x27, 0xf7, 0x27, 0x30, 0x16, 0x37, 0xb1, 0x90,
+	0xab, 0x38, 0xfb, 0x55, 0xcd, 0x78, 0x58, 0xd4,
+	0x7d, 0x43, 0xf6, 0x45, 0x5e, 0x55, 0x8d, 0xb1,
+	0x02, 0x65, 0x58, 0xb4, 0x13, 0x4b, 0x36, 0xf7,
+	0xcc, 0xfe, 0x3d, 0x0b, 0x82, 0xe2, 0x12, 0x11,
+	0xbb, 0xe6, 0xb8, 0x3a, 0x48, 0x71, 0xc7, 0x50,
+	0x06, 0x16, 0x3a, 0xe6, 0x7c, 0x05, 0xc7, 0xc8,
+	0x4d, 0x2f, 0x08, 0x6a, 0x17, 0x9a, 0x95, 0x97,
+	0x50, 0x68, 0xdc, 0x28, 0x18, 0xc4, 0x61, 0x38,
+	0xb9, 0xe0, 0x3e, 0x78, 0xdb, 0x29, 0xe0, 0x9f,
+	0x52, 0xdd, 0xf8, 0x4f, 0x91, 0xc1, 0xd0, 0x33,
+	0xa1, 0x7a, 0x8e, 0x30, 0x13, 0x82, 0x07, 0x9f,
+	0xd3, 0x31, 0x0f, 0x23, 0xbe, 0x32, 0x5a, 0x75,
+	0xcf, 0x96, 0xb2, 0xec, 0xb5, 0x32, 0xac, 0x21,
+	0xd1, 0x82, 0x33, 0xd3, 0x15, 0x74, 0xbd, 0x90,
+	0xf1, 0x2c, 0xe6, 0x5f, 0x8d, 0xe3, 0x02, 0xe8,
+	0xe9, 0xc4, 0xca, 0x96, 0xeb, 0x0e, 0xbc, 0x91,
+	0xf4, 0xb9, 0xea, 0xd9, 0x1b, 0x75, 0xbd, 0xe1,
+	0xac, 0x2a, 0x05, 0x37, 0x52, 0x9b, 0x1b, 0x3f,
+	0x5a, 0xdc, 0x21, 0xc3, 0x98, 0xbb, 0xaf, 0xa3,
+	0xf2, 0x00, 0xbf, 0x0d, 0x30, 0x89, 0x05, 0xcc,
+	0xa5, 0x76, 0xf5, 0x06, 0xf0, 0xc6, 0x54, 0x8a,
+	0x5d, 0xd4, 0x1e, 0xc1, 0xf2, 0xce, 0xb0, 0x62,
+	0xc8, 0xfc, 0x59, 0x42, 0x9a, 0x90, 0x60, 0x55,
+	0xfe, 0x88, 0xa5, 0x8b, 0xb8, 0x33, 0x0c, 0x23,
+	0x24, 0x0d, 0x15, 0x70, 0x37, 0x1e, 0x3d, 0xf6,
+	0xd2, 0xea, 0x92, 0x10, 0xb2, 0xc4, 0x51, 0xac,
+	0xf2, 0xac, 0xf3, 0x6b, 0x6c, 0xaa, 0xcf, 0x12,
+	0xc5, 0x6c, 0x90, 0x50, 0xb5, 0x0c, 0xfc, 0x1a,
+	0x15, 0x52, 0xe9, 0x26, 0xc6, 0x52, 0xa4, 0xe7,
+	0x81, 0x69, 0xe1, 0xe7, 0x9e, 0x30, 0x01, 0xec,
+	0x84, 0x89, 0xb2, 0x0d, 0x66, 0xdd, 0xce, 0x28,
+	0x5c, 0xec, 0x98, 0x46, 0x68, 0x21, 0x9f, 0x88,
+	0x3f, 0x1f, 0x42, 0x77, 0xce, 0xd0, 0x61, 0xd4,
+	0x20, 0xa7, 0xff, 0x53, 0xad, 0x37, 0xd0, 0x17,
+	0x35, 0xc9, 0xfc, 0xba, 0x0a, 0x78, 0x3f, 0xf2,
+	0xcc, 0x86, 0x89, 0xe8, 0x4b, 0x3c, 0x48, 0x33,
+	0x09, 0x7f, 0xc6, 0xc0, 0xdd, 0xb8, 0xfd, 0x7a,
+	0x66, 0x66, 0x65, 0xeb, 0x47, 0xa7, 0x04, 0x28,
+	0xa3, 0x19, 0x8e, 0xa9, 0xb1, 0x13, 0x67, 0x62,
+	0x70, 0xcf, 0xd6
+};
+static const u8 dec_output012[] __initconst = {
+	0x74, 0xa6, 0x3e, 0xe4, 0xb1, 0xcb, 0xaf, 0xb0,
+	0x40, 0xe5, 0x0f, 0x9e, 0xf1, 0xf2, 0x89, 0xb5,
+	0x42, 0x34, 0x8a, 0xa1, 0x03, 0xb7, 0xe9, 0x57,
+	0x46, 0xbe, 0x20, 0xe4, 0x6e, 0xb0, 0xeb, 0xff,
+	0xea, 0x07, 0x7e, 0xef, 0xe2, 0x55, 0x9f, 0xe5,
+	0x78, 0x3a, 0xb7, 0x83, 0xc2, 0x18, 0x40, 0x7b,
+	0xeb, 0xcd, 0x81, 0xfb, 0x90, 0x12, 0x9e, 0x46,
+	0xa9, 0xd6, 0x4a, 0xba, 0xb0, 0x62, 0xdb, 0x6b,
+	0x99, 0xc4, 0xdb, 0x54, 0x4b, 0xb8, 0xa5, 0x71,
+	0xcb, 0xcd, 0x63, 0x32, 0x55, 0xfb, 0x31, 0xf0,
+	0x38, 0xf5, 0xbe, 0x78, 0xe4, 0x45, 0xce, 0x1b,
+	0x6a, 0x5b, 0x0e, 0xf4, 0x16, 0xe4, 0xb1, 0x3d,
+	0xf6, 0x63, 0x7b, 0xa7, 0x0c, 0xde, 0x6f, 0x8f,
+	0x74, 0xdf, 0xe0, 0x1e, 0x9d, 0xce, 0x8f, 0x24,
+	0xef, 0x23, 0x35, 0x33, 0x7b, 0x83, 0x34, 0x23,
+	0x58, 0x74, 0x14, 0x77, 0x1f, 0xc2, 0x4f, 0x4e,
+	0xc6, 0x89, 0xf9, 0x52, 0x09, 0x37, 0x64, 0x14,
+	0xc4, 0x01, 0x6b, 0x9d, 0x77, 0xe8, 0x90, 0x5d,
+	0xa8, 0x4a, 0x2a, 0xef, 0x5c, 0x7f, 0xeb, 0xbb,
+	0xb2, 0xc6, 0x93, 0x99, 0x66, 0xdc, 0x7f, 0xd4,
+	0x9e, 0x2a, 0xca, 0x8d, 0xdb, 0xe7, 0x20, 0xcf,
+	0xe4, 0x73, 0xae, 0x49, 0x7d, 0x64, 0x0f, 0x0e,
+	0x28, 0x46, 0xa9, 0xa8, 0x32, 0xe4, 0x0e, 0xf6,
+	0x51, 0x53, 0xb8, 0x3c, 0xb1, 0xff, 0xa3, 0x33,
+	0x41, 0x75, 0xff, 0xf1, 0x6f, 0xf1, 0xfb, 0xbb,
+	0x83, 0x7f, 0x06, 0x9b, 0xe7, 0x1b, 0x0a, 0xe0,
+	0x5c, 0x33, 0x60, 0x5b, 0xdb, 0x5b, 0xed, 0xfe,
+	0xa5, 0x16, 0x19, 0x72, 0xa3, 0x64, 0x23, 0x00,
+	0x02, 0xc7, 0xf3, 0x6a, 0x81, 0x3e, 0x44, 0x1d,
+	0x79, 0x15, 0x5f, 0x9a, 0xde, 0xe2, 0xfd, 0x1b,
+	0x73, 0xc1, 0xbc, 0x23, 0xba, 0x31, 0xd2, 0x50,
+	0xd5, 0xad, 0x7f, 0x74, 0xa7, 0xc9, 0xf8, 0x3e,
+	0x2b, 0x26, 0x10, 0xf6, 0x03, 0x36, 0x74, 0xe4,
+	0x0e, 0x6a, 0x72, 0xb7, 0x73, 0x0a, 0x42, 0x28,
+	0xc2, 0xad, 0x5e, 0x03, 0xbe, 0xb8, 0x0b, 0xa8,
+	0x5b, 0xd4, 0xb8, 0xba, 0x52, 0x89, 0xb1, 0x9b,
+	0xc1, 0xc3, 0x65, 0x87, 0xed, 0xa5, 0xf4, 0x86,
+	0xfd, 0x41, 0x80, 0x91, 0x27, 0x59, 0x53, 0x67,
+	0x15, 0x78, 0x54, 0x8b, 0x2d, 0x3d, 0xc7, 0xff,
+	0x02, 0x92, 0x07, 0x5f, 0x7a, 0x4b, 0x60, 0x59,
+	0x3c, 0x6f, 0x5c, 0xd8, 0xec, 0x95, 0xd2, 0xfe,
+	0xa0, 0x3b, 0xd8, 0x3f, 0xd1, 0x69, 0xa6, 0xd6,
+	0x41, 0xb2, 0xf4, 0x4d, 0x12, 0xf4, 0x58, 0x3e,
+	0x66, 0x64, 0x80, 0x31, 0x9b, 0xa8, 0x4c, 0x8b,
+	0x07, 0xb2, 0xec, 0x66, 0x94, 0x66, 0x47, 0x50,
+	0x50, 0x5f, 0x18, 0x0b, 0x0e, 0xd6, 0xc0, 0x39,
+	0x21, 0x13, 0x9e, 0x33, 0xbc, 0x79, 0x36, 0x02,
+	0x96, 0x70, 0xf0, 0x48, 0x67, 0x2f, 0x26, 0xe9,
+	0x6d, 0x10, 0xbb, 0xd6, 0x3f, 0xd1, 0x64, 0x7a,
+	0x2e, 0xbe, 0x0c, 0x61, 0xf0, 0x75, 0x42, 0x38,
+	0x23, 0xb1, 0x9e, 0x9f, 0x7c, 0x67, 0x66, 0xd9,
+	0x58, 0x9a, 0xf1, 0xbb, 0x41, 0x2a, 0x8d, 0x65,
+	0x84, 0x94, 0xfc, 0xdc, 0x6a, 0x50, 0x64, 0xdb,
+	0x56, 0x33, 0x76, 0x00, 0x10, 0xed, 0xbe, 0xd2,
+	0x12, 0xf6, 0xf6, 0x1b, 0xa2, 0x16, 0xde, 0xae,
+	0x31, 0x95, 0xdd, 0xb1, 0x08, 0x7e, 0x4e, 0xee,
+	0xe7, 0xf9, 0xa5, 0xfb, 0x5b, 0x61, 0x43, 0x00,
+	0x40, 0xf6, 0x7e, 0x02, 0x04, 0x32, 0x4e, 0x0c,
+	0xe2, 0x66, 0x0d, 0xd7, 0x07, 0x98, 0x0e, 0xf8,
+	0x72, 0x34, 0x6d, 0x95, 0x86, 0xd7, 0xcb, 0x31,
+	0x54, 0x47, 0xd0, 0x38, 0x29, 0x9c, 0x5a, 0x68,
+	0xd4, 0x87, 0x76, 0xc9, 0xe7, 0x7e, 0xe3, 0xf4,
+	0x81, 0x6d, 0x18, 0xcb, 0xc9, 0x05, 0xaf, 0xa0,
+	0xfb, 0x66, 0xf7, 0xf1, 0x1c, 0xc6, 0x14, 0x11,
+	0x4f, 0x2b, 0x79, 0x42, 0x8b, 0xbc, 0xac, 0xe7,
+	0x6c, 0xfe, 0x0f, 0x58, 0xe7, 0x7c, 0x78, 0x39,
+	0x30, 0xb0, 0x66, 0x2c, 0x9b, 0x6d, 0x3a, 0xe1,
+	0xcf, 0xc9, 0xa4, 0x0e, 0x6d, 0x6d, 0x8a, 0xa1,
+	0x3a, 0xe7, 0x28, 0xd4, 0x78, 0x4c, 0xa6, 0xa2,
+	0x2a, 0xa6, 0x03, 0x30, 0xd7, 0xa8, 0x25, 0x66,
+	0x87, 0x2f, 0x69, 0x5c, 0x4e, 0xdd, 0xa5, 0x49,
+	0x5d, 0x37, 0x4a, 0x59, 0xc4, 0xaf, 0x1f, 0xa2,
+	0xe4, 0xf8, 0xa6, 0x12, 0x97, 0xd5, 0x79, 0xf5,
+	0xe2, 0x4a, 0x2b, 0x5f, 0x61, 0xe4, 0x9e, 0xe3,
+	0xee, 0xb8, 0xa7, 0x5b, 0x2f, 0xf4, 0x9e, 0x6c,
+	0xfb, 0xd1, 0xc6, 0x56, 0x77, 0xba, 0x75, 0xaa,
+	0x3d, 0x1a, 0xa8, 0x0b, 0xb3, 0x68, 0x24, 0x00,
+	0x10, 0x7f, 0xfd, 0xd7, 0xa1, 0x8d, 0x83, 0x54,
+	0x4f, 0x1f, 0xd8, 0x2a, 0xbe, 0x8a, 0x0c, 0x87,
+	0xab, 0xa2, 0xde, 0xc3, 0x39, 0xbf, 0x09, 0x03,
+	0xa5, 0xf3, 0x05, 0x28, 0xe1, 0xe1, 0xee, 0x39,
+	0x70, 0x9c, 0xd8, 0x81, 0x12, 0x1e, 0x02, 0x40,
+	0xd2, 0x6e, 0xf0, 0xeb, 0x1b, 0x3d, 0x22, 0xc6,
+	0xe5, 0xe3, 0xb4, 0x5a, 0x98, 0xbb, 0xf0, 0x22,
+	0x28, 0x8d, 0xe5, 0xd3, 0x16, 0x48, 0x24, 0xa5,
+	0xe6, 0x66, 0x0c, 0xf9, 0x08, 0xf9, 0x7e, 0x1e,
+	0xe1, 0x28, 0x26, 0x22, 0xc7, 0xc7, 0x0a, 0x32,
+	0x47, 0xfa, 0xa3, 0xbe, 0x3c, 0xc4, 0xc5, 0x53,
+	0x0a, 0xd5, 0x94, 0x4a, 0xd7, 0x93, 0xd8, 0x42,
+	0x99, 0xb9, 0x0a, 0xdb, 0x56, 0xf7, 0xb9, 0x1c,
+	0x53, 0x4f, 0xfa, 0xd3, 0x74, 0xad, 0xd9, 0x68,
+	0xf1, 0x1b, 0xdf, 0x61, 0xc6, 0x5e, 0xa8, 0x48,
+	0xfc, 0xd4, 0x4a, 0x4c, 0x3c, 0x32, 0xf7, 0x1c,
+	0x96, 0x21, 0x9b, 0xf9, 0xa3, 0xcc, 0x5a, 0xce,
+	0xd5, 0xd7, 0x08, 0x24, 0xf6, 0x1c, 0xfd, 0xdd,
+	0x38, 0xc2, 0x32, 0xe9, 0xb8, 0xe7, 0xb6, 0xfa,
+	0x9d, 0x45, 0x13, 0x2c, 0x83, 0xfd, 0x4a, 0x69,
+	0x82, 0xcd, 0xdc, 0xb3, 0x76, 0x0c, 0x9e, 0xd8,
+	0xf4, 0x1b, 0x45, 0x15, 0xb4, 0x97, 0xe7, 0x58,
+	0x34, 0xe2, 0x03, 0x29, 0x5a, 0xbf, 0xb6, 0xe0,
+	0x5d, 0x13, 0xd9, 0x2b, 0xb4, 0x80, 0xb2, 0x45,
+	0x81, 0x6a, 0x2e, 0x6c, 0x89, 0x7d, 0xee, 0xbb,
+	0x52, 0xdd, 0x1f, 0x18, 0xe7, 0x13, 0x6b, 0x33,
+	0x0e, 0xea, 0x36, 0x92, 0x77, 0x7b, 0x6d, 0x9c,
+	0x5a, 0x5f, 0x45, 0x7b, 0x7b, 0x35, 0x62, 0x23,
+	0xd1, 0xbf, 0x0f, 0xd0, 0x08, 0x1b, 0x2b, 0x80,
+	0x6b, 0x7e, 0xf1, 0x21, 0x47, 0xb0, 0x57, 0xd1,
+	0x98, 0x72, 0x90, 0x34, 0x1c, 0x20, 0x04, 0xff,
+	0x3d, 0x5c, 0xee, 0x0e, 0x57, 0x5f, 0x6f, 0x24,
+	0x4e, 0x3c, 0xea, 0xfc, 0xa5, 0xa9, 0x83, 0xc9,
+	0x61, 0xb4, 0x51, 0x24, 0xf8, 0x27, 0x5e, 0x46,
+	0x8c, 0xb1, 0x53, 0x02, 0x96, 0x35, 0xba, 0xb8,
+	0x4c, 0x71, 0xd3, 0x15, 0x59, 0x35, 0x22, 0x20,
+	0xad, 0x03, 0x9f, 0x66, 0x44, 0x3b, 0x9c, 0x35,
+	0x37, 0x1f, 0x9b, 0xbb, 0xf3, 0xdb, 0x35, 0x63,
+	0x30, 0x64, 0xaa, 0xa2, 0x06, 0xa8, 0x5d, 0xbb,
+	0xe1, 0x9f, 0x70, 0xec, 0x82, 0x11, 0x06, 0x36,
+	0xec, 0x8b, 0x69, 0x66, 0x24, 0x44, 0xc9, 0x4a,
+	0x57, 0xbb, 0x9b, 0x78, 0x13, 0xce, 0x9c, 0x0c,
+	0xba, 0x92, 0x93, 0x63, 0xb8, 0xe2, 0x95, 0x0f,
+	0x0f, 0x16, 0x39, 0x52, 0xfd, 0x3a, 0x6d, 0x02,
+	0x4b, 0xdf, 0x13, 0xd3, 0x2a, 0x22, 0xb4, 0x03,
+	0x7c, 0x54, 0x49, 0x96, 0x68, 0x54, 0x10, 0xfa,
+	0xef, 0xaa, 0x6c, 0xe8, 0x22, 0xdc, 0x71, 0x16,
+	0x13, 0x1a, 0xf6, 0x28, 0xe5, 0x6d, 0x77, 0x3d,
+	0xcd, 0x30, 0x63, 0xb1, 0x70, 0x52, 0xa1, 0xc5,
+	0x94, 0x5f, 0xcf, 0xe8, 0xb8, 0x26, 0x98, 0xf7,
+	0x06, 0xa0, 0x0a, 0x70, 0xfa, 0x03, 0x80, 0xac,
+	0xc1, 0xec, 0xd6, 0x4c, 0x54, 0xd7, 0xfe, 0x47,
+	0xb6, 0x88, 0x4a, 0xf7, 0x71, 0x24, 0xee, 0xf3,
+	0xd2, 0xc2, 0x4a, 0x7f, 0xfe, 0x61, 0xc7, 0x35,
+	0xc9, 0x37, 0x67, 0xcb, 0x24, 0x35, 0xda, 0x7e,
+	0xca, 0x5f, 0xf3, 0x8d, 0xd4, 0x13, 0x8e, 0xd6,
+	0xcb, 0x4d, 0x53, 0x8f, 0x53, 0x1f, 0xc0, 0x74,
+	0xf7, 0x53, 0xb9, 0x5e, 0x23, 0x37, 0xba, 0x6e,
+	0xe3, 0x9d, 0x07, 0x55, 0x25, 0x7b, 0xe6, 0x2a,
+	0x64, 0xd1, 0x32, 0xdd, 0x54, 0x1b, 0x4b, 0xc0,
+	0xe1, 0xd7, 0x69, 0x58, 0xf8, 0x93, 0x29, 0xc4,
+	0xdd, 0x23, 0x2f, 0xa5, 0xfc, 0x9d, 0x7e, 0xf8,
+	0xd4, 0x90, 0xcd, 0x82, 0x55, 0xdc, 0x16, 0x16,
+	0x9f, 0x07, 0x52, 0x9b, 0x9d, 0x25, 0xed, 0x32,
+	0xc5, 0x7b, 0xdf, 0xf6, 0x83, 0x46, 0x3d, 0x65,
+	0xb7, 0xef, 0x87, 0x7a, 0x12, 0x69, 0x8f, 0x06,
+	0x7c, 0x51, 0x15, 0x4a, 0x08, 0xe8, 0xac, 0x9a,
+	0x0c, 0x24, 0xa7, 0x27, 0xd8, 0x46, 0x2f, 0xe7,
+	0x01, 0x0e, 0x1c, 0xc6, 0x91, 0xb0, 0x6e, 0x85,
+	0x65, 0xf0, 0x29, 0x0d, 0x2e, 0x6b, 0x3b, 0xfb,
+	0x4b, 0xdf, 0xe4, 0x80, 0x93, 0x03, 0x66, 0x46,
+	0x3e, 0x8a, 0x6e, 0xf3, 0x5e, 0x4d, 0x62, 0x0e,
+	0x49, 0x05, 0xaf, 0xd4, 0xf8, 0x21, 0x20, 0x61,
+	0x1d, 0x39, 0x17, 0xf4, 0x61, 0x47, 0x95, 0xfb,
+	0x15, 0x2e, 0xb3, 0x4f, 0xd0, 0x5d, 0xf5, 0x7d,
+	0x40, 0xda, 0x90, 0x3c, 0x6b, 0xcb, 0x17, 0x00,
+	0x13, 0x3b, 0x64, 0x34, 0x1b, 0xf0, 0xf2, 0xe5,
+	0x3b, 0xb2, 0xc7, 0xd3, 0x5f, 0x3a, 0x44, 0xa6,
+	0x9b, 0xb7, 0x78, 0x0e, 0x42, 0x5d, 0x4c, 0xc1,
+	0xe9, 0xd2, 0xcb, 0xb7, 0x78, 0xd1, 0xfe, 0x9a,
+	0xb5, 0x07, 0xe9, 0xe0, 0xbe, 0xe2, 0x8a, 0xa7,
+	0x01, 0x83, 0x00, 0x8c, 0x5c, 0x08, 0xe6, 0x63,
+	0x12, 0x92, 0xb7, 0xb7, 0xa6, 0x19, 0x7d, 0x38,
+	0x13, 0x38, 0x92, 0x87, 0x24, 0xf9, 0x48, 0xb3,
+	0x5e, 0x87, 0x6a, 0x40, 0x39, 0x5c, 0x3f, 0xed,
+	0x8f, 0xee, 0xdb, 0x15, 0x82, 0x06, 0xda, 0x49,
+	0x21, 0x2b, 0xb5, 0xbf, 0x32, 0x7c, 0x9f, 0x42,
+	0x28, 0x63, 0xcf, 0xaf, 0x1e, 0xf8, 0xc6, 0xa0,
+	0xd1, 0x02, 0x43, 0x57, 0x62, 0xec, 0x9b, 0x0f,
+	0x01, 0x9e, 0x71, 0xd8, 0x87, 0x9d, 0x01, 0xc1,
+	0x58, 0x77, 0xd9, 0xaf, 0xb1, 0x10, 0x7e, 0xdd,
+	0xa6, 0x50, 0x96, 0xe5, 0xf0, 0x72, 0x00, 0x6d,
+	0x4b, 0xf8, 0x2a, 0x8f, 0x19, 0xf3, 0x22, 0x88,
+	0x11, 0x4a, 0x8b, 0x7c, 0xfd, 0xb7, 0xed, 0xe1,
+	0xf6, 0x40, 0x39, 0xe0, 0xe9, 0xf6, 0x3d, 0x25,
+	0xe6, 0x74, 0x3c, 0x58, 0x57, 0x7f, 0xe1, 0x22,
+	0x96, 0x47, 0x31, 0x91, 0xba, 0x70, 0x85, 0x28,
+	0x6b, 0x9f, 0x6e, 0x25, 0xac, 0x23, 0x66, 0x2f,
+	0x29, 0x88, 0x28, 0xce, 0x8c, 0x5c, 0x88, 0x53,
+	0xd1, 0x3b, 0xcc, 0x6a, 0x51, 0xb2, 0xe1, 0x28,
+	0x3f, 0x91, 0xb4, 0x0d, 0x00, 0x3a, 0xe3, 0xf8,
+	0xc3, 0x8f, 0xd7, 0x96, 0x62, 0x0e, 0x2e, 0xfc,
+	0xc8, 0x6c, 0x77, 0xa6, 0x1d, 0x22, 0xc1, 0xb8,
+	0xe6, 0x61, 0xd7, 0x67, 0x36, 0x13, 0x7b, 0xbb,
+	0x9b, 0x59, 0x09, 0xa6, 0xdf, 0xf7, 0x6b, 0xa3,
+	0x40, 0x1a, 0xf5, 0x4f, 0xb4, 0xda, 0xd3, 0xf3,
+	0x81, 0x93, 0xc6, 0x18, 0xd9, 0x26, 0xee, 0xac,
+	0xf0, 0xaa, 0xdf, 0xc5, 0x9c, 0xca, 0xc2, 0xa2,
+	0xcc, 0x7b, 0x5c, 0x24, 0xb0, 0xbc, 0xd0, 0x6a,
+	0x4d, 0x89, 0x09, 0xb8, 0x07, 0xfe, 0x87, 0xad,
+	0x0a, 0xea, 0xb8, 0x42, 0xf9, 0x5e, 0xb3, 0x3e,
+	0x36, 0x4c, 0xaf, 0x75, 0x9e, 0x1c, 0xeb, 0xbd,
+	0xbc, 0xbb, 0x80, 0x40, 0xa7, 0x3a, 0x30, 0xbf,
+	0xa8, 0x44, 0xf4, 0xeb, 0x38, 0xad, 0x29, 0xba,
+	0x23, 0xed, 0x41, 0x0c, 0xea, 0xd2, 0xbb, 0x41,
+	0x18, 0xd6, 0xb9, 0xba, 0x65, 0x2b, 0xa3, 0x91,
+	0x6d, 0x1f, 0xa9, 0xf4, 0xd1, 0x25, 0x8d, 0x4d,
+	0x38, 0xff, 0x64, 0xa0, 0xec, 0xde, 0xa6, 0xb6,
+	0x79, 0xab, 0x8e, 0x33, 0x6c, 0x47, 0xde, 0xaf,
+	0x94, 0xa4, 0xa5, 0x86, 0x77, 0x55, 0x09, 0x92,
+	0x81, 0x31, 0x76, 0xc7, 0x34, 0x22, 0x89, 0x8e,
+	0x3d, 0x26, 0x26, 0xd7, 0xfc, 0x1e, 0x16, 0x72,
+	0x13, 0x33, 0x63, 0xd5, 0x22, 0xbe, 0xb8, 0x04,
+	0x34, 0x84, 0x41, 0xbb, 0x80, 0xd0, 0x9f, 0x46,
+	0x48, 0x07, 0xa7, 0xfc, 0x2b, 0x3a, 0x75, 0x55,
+	0x8c, 0xc7, 0x6a, 0xbd, 0x7e, 0x46, 0x08, 0x84,
+	0x0f, 0xd5, 0x74, 0xc0, 0x82, 0x8e, 0xaa, 0x61,
+	0x05, 0x01, 0xb2, 0x47, 0x6e, 0x20, 0x6a, 0x2d,
+	0x58, 0x70, 0x48, 0x32, 0xa7, 0x37, 0xd2, 0xb8,
+	0x82, 0x1a, 0x51, 0xb9, 0x61, 0xdd, 0xfd, 0x9d,
+	0x6b, 0x0e, 0x18, 0x97, 0xf8, 0x45, 0x5f, 0x87,
+	0x10, 0xcf, 0x34, 0x72, 0x45, 0x26, 0x49, 0x70,
+	0xe7, 0xa3, 0x78, 0xe0, 0x52, 0x89, 0x84, 0x94,
+	0x83, 0x82, 0xc2, 0x69, 0x8f, 0xe3, 0xe1, 0x3f,
+	0x60, 0x74, 0x88, 0xc4, 0xf7, 0x75, 0x2c, 0xfb,
+	0xbd, 0xb6, 0xc4, 0x7e, 0x10, 0x0a, 0x6c, 0x90,
+	0x04, 0x9e, 0xc3, 0x3f, 0x59, 0x7c, 0xce, 0x31,
+	0x18, 0x60, 0x57, 0x73, 0x46, 0x94, 0x7d, 0x06,
+	0xa0, 0x6d, 0x44, 0xec, 0xa2, 0x0a, 0x9e, 0x05,
+	0x15, 0xef, 0xca, 0x5c, 0xbf, 0x00, 0xeb, 0xf7,
+	0x3d, 0x32, 0xd4, 0xa5, 0xef, 0x49, 0x89, 0x5e,
+	0x46, 0xb0, 0xa6, 0x63, 0x5b, 0x8a, 0x73, 0xae,
+	0x6f, 0xd5, 0x9d, 0xf8, 0x4f, 0x40, 0xb5, 0xb2,
+	0x6e, 0xd3, 0xb6, 0x01, 0xa9, 0x26, 0xa2, 0x21,
+	0xcf, 0x33, 0x7a, 0x3a, 0xa4, 0x23, 0x13, 0xb0,
+	0x69, 0x6a, 0xee, 0xce, 0xd8, 0x9d, 0x01, 0x1d,
+	0x50, 0xc1, 0x30, 0x6c, 0xb1, 0xcd, 0xa0, 0xf0,
+	0xf0, 0xa2, 0x64, 0x6f, 0xbb, 0xbf, 0x5e, 0xe6,
+	0xab, 0x87, 0xb4, 0x0f, 0x4f, 0x15, 0xaf, 0xb5,
+	0x25, 0xa1, 0xb2, 0xd0, 0x80, 0x2c, 0xfb, 0xf9,
+	0xfe, 0xd2, 0x33, 0xbb, 0x76, 0xfe, 0x7c, 0xa8,
+	0x66, 0xf7, 0xe7, 0x85, 0x9f, 0x1f, 0x85, 0x57,
+	0x88, 0xe1, 0xe9, 0x63, 0xe4, 0xd8, 0x1c, 0xa1,
+	0xfb, 0xda, 0x44, 0x05, 0x2e, 0x1d, 0x3a, 0x1c,
+	0xff, 0xc8, 0x3b, 0xc0, 0xfe, 0xda, 0x22, 0x0b,
+	0x43, 0xd6, 0x88, 0x39, 0x4c, 0x4a, 0xa6, 0x69,
+	0x18, 0x93, 0x42, 0x4e, 0xb5, 0xcc, 0x66, 0x0d,
+	0x09, 0xf8, 0x1e, 0x7c, 0xd3, 0x3c, 0x99, 0x0d,
+	0x50, 0x1d, 0x62, 0xe9, 0x57, 0x06, 0xbf, 0x19,
+	0x88, 0xdd, 0xad, 0x7b, 0x4f, 0xf9, 0xc7, 0x82,
+	0x6d, 0x8d, 0xc8, 0xc4, 0xc5, 0x78, 0x17, 0x20,
+	0x15, 0xc5, 0x52, 0x41, 0xcf, 0x5b, 0xd6, 0x7f,
+	0x94, 0x02, 0x41, 0xe0, 0x40, 0x22, 0x03, 0x5e,
+	0xd1, 0x53, 0xd4, 0x86, 0xd3, 0x2c, 0x9f, 0x0f,
+	0x96, 0xe3, 0x6b, 0x9a, 0x76, 0x32, 0x06, 0x47,
+	0x4b, 0x11, 0xb3, 0xdd, 0x03, 0x65, 0xbd, 0x9b,
+	0x01, 0xda, 0x9c, 0xb9, 0x7e, 0x3f, 0x6a, 0xc4,
+	0x7b, 0xea, 0xd4, 0x3c, 0xb9, 0xfb, 0x5c, 0x6b,
+	0x64, 0x33, 0x52, 0xba, 0x64, 0x78, 0x8f, 0xa4,
+	0xaf, 0x7a, 0x61, 0x8d, 0xbc, 0xc5, 0x73, 0xe9,
+	0x6b, 0x58, 0x97, 0x4b, 0xbf, 0x63, 0x22, 0xd3,
+	0x37, 0x02, 0x54, 0xc5, 0xb9, 0x16, 0x4a, 0xf0,
+	0x19, 0xd8, 0x94, 0x57, 0xb8, 0x8a, 0xb3, 0x16,
+	0x3b, 0xd0, 0x84, 0x8e, 0x67, 0xa6, 0xa3, 0x7d,
+	0x78, 0xec, 0x00
+};
+static const u8 dec_assoc012[] __initconst = {
+	0xb1, 0x69, 0x83, 0x87, 0x30, 0xaa, 0x5d, 0xb8,
+	0x77, 0xe8, 0x21, 0xff, 0x06, 0x59, 0x35, 0xce,
+	0x75, 0xfe, 0x38, 0xef, 0xb8, 0x91, 0x43, 0x8c,
+	0xcf, 0x70, 0xdd, 0x0a, 0x68, 0xbf, 0xd4, 0xbc,
+	0x16, 0x76, 0x99, 0x36, 0x1e, 0x58, 0x79, 0x5e,
+	0xd4, 0x29, 0xf7, 0x33, 0x93, 0x48, 0xdb, 0x5f,
+	0x01, 0xae, 0x9c, 0xb6, 0xe4, 0x88, 0x6d, 0x2b,
+	0x76, 0x75, 0xe0, 0xf3, 0x74, 0xe2, 0xc9
+};
+static const u8 dec_nonce012[] __initconst = {
+	0x05, 0xa3, 0x93, 0xed, 0x30, 0xc5, 0xa2, 0x06
+};
+static const u8 dec_key012[] __initconst = {
+	0xb3, 0x35, 0x50, 0x03, 0x54, 0x2e, 0x40, 0x5e,
+	0x8f, 0x59, 0x8e, 0xc5, 0x90, 0xd5, 0x27, 0x2d,
+	0xba, 0x29, 0x2e, 0xcb, 0x1b, 0x70, 0x44, 0x1e,
+	0x65, 0x91, 0x6e, 0x2a, 0x79, 0x22, 0xda, 0x64
+};
+
+static const u8 dec_input013[] __initconst = {
+	0x52, 0x34, 0xb3, 0x65, 0x3b, 0xb7, 0xe5, 0xd3,
+	0xab, 0x49, 0x17, 0x60, 0xd2, 0x52, 0x56, 0xdf,
+	0xdf, 0x34, 0x56, 0x82, 0xe2, 0xbe, 0xe5, 0xe1,
+	0x28, 0xd1, 0x4e, 0x5f, 0x4f, 0x01, 0x7d, 0x3f,
+	0x99, 0x6b, 0x30, 0x6e, 0x1a, 0x7c, 0x4c, 0x8e,
+	0x62, 0x81, 0xae, 0x86, 0x3f, 0x6b, 0xd0, 0xb5,
+	0xa9, 0xcf, 0x50, 0xf1, 0x02, 0x12, 0xa0, 0x0b,
+	0x24, 0xe9, 0xe6, 0x72, 0x89, 0x2c, 0x52, 0x1b,
+	0x34, 0x38, 0xf8, 0x75, 0x5f, 0xa0, 0x74, 0xe2,
+	0x99, 0xdd, 0xa6, 0x4b, 0x14, 0x50, 0x4e, 0xf1,
+	0xbe, 0xd6, 0x9e, 0xdb, 0xb2, 0x24, 0x27, 0x74,
+	0x12, 0x4a, 0x78, 0x78, 0x17, 0xa5, 0x58, 0x8e,
+	0x2f, 0xf9, 0xf4, 0x8d, 0xee, 0x03, 0x88, 0xae,
+	0xb8, 0x29, 0xa1, 0x2f, 0x4b, 0xee, 0x92, 0xbd,
+	0x87, 0xb3, 0xce, 0x34, 0x21, 0x57, 0x46, 0x04,
+	0x49, 0x0c, 0x80, 0xf2, 0x01, 0x13, 0xa1, 0x55,
+	0xb3, 0xff, 0x44, 0x30, 0x3c, 0x1c, 0xd0, 0xef,
+	0xbc, 0x18, 0x74, 0x26, 0xad, 0x41, 0x5b, 0x5b,
+	0x3e, 0x9a, 0x7a, 0x46, 0x4f, 0x16, 0xd6, 0x74,
+	0x5a, 0xb7, 0x3a, 0x28, 0x31, 0xd8, 0xae, 0x26,
+	0xac, 0x50, 0x53, 0x86, 0xf2, 0x56, 0xd7, 0x3f,
+	0x29, 0xbc, 0x45, 0x68, 0x8e, 0xcb, 0x98, 0x64,
+	0xdd, 0xc9, 0xba, 0xb8, 0x4b, 0x7b, 0x82, 0xdd,
+	0x14, 0xa7, 0xcb, 0x71, 0x72, 0x00, 0x5c, 0xad,
+	0x7b, 0x6a, 0x89, 0xa4, 0x3d, 0xbf, 0xb5, 0x4b,
+	0x3e, 0x7c, 0x5a, 0xcf, 0xb8, 0xa1, 0xc5, 0x6e,
+	0xc8, 0xb6, 0x31, 0x57, 0x7b, 0xdf, 0xa5, 0x7e,
+	0xb1, 0xd6, 0x42, 0x2a, 0x31, 0x36, 0xd1, 0xd0,
+	0x3f, 0x7a, 0xe5, 0x94, 0xd6, 0x36, 0xa0, 0x6f,
+	0xb7, 0x40, 0x7d, 0x37, 0xc6, 0x55, 0x7c, 0x50,
+	0x40, 0x6d, 0x29, 0x89, 0xe3, 0x5a, 0xae, 0x97,
+	0xe7, 0x44, 0x49, 0x6e, 0xbd, 0x81, 0x3d, 0x03,
+	0x93, 0x06, 0x12, 0x06, 0xe2, 0x41, 0x12, 0x4a,
+	0xf1, 0x6a, 0xa4, 0x58, 0xa2, 0xfb, 0xd2, 0x15,
+	0xba, 0xc9, 0x79, 0xc9, 0xce, 0x5e, 0x13, 0xbb,
+	0xf1, 0x09, 0x04, 0xcc, 0xfd, 0xe8, 0x51, 0x34,
+	0x6a, 0xe8, 0x61, 0x88, 0xda, 0xed, 0x01, 0x47,
+	0x84, 0xf5, 0x73, 0x25, 0xf9, 0x1c, 0x42, 0x86,
+	0x07, 0xf3, 0x5b, 0x1a, 0x01, 0xb3, 0xeb, 0x24,
+	0x32, 0x8d, 0xf6, 0xed, 0x7c, 0x4b, 0xeb, 0x3c,
+	0x36, 0x42, 0x28, 0xdf, 0xdf, 0xb6, 0xbe, 0xd9,
+	0x8c, 0x52, 0xd3, 0x2b, 0x08, 0x90, 0x8c, 0xe7,
+	0x98, 0x31, 0xe2, 0x32, 0x8e, 0xfc, 0x11, 0x48,
+	0x00, 0xa8, 0x6a, 0x42, 0x4a, 0x02, 0xc6, 0x4b,
+	0x09, 0xf1, 0xe3, 0x49, 0xf3, 0x45, 0x1f, 0x0e,
+	0xbc, 0x56, 0xe2, 0xe4, 0xdf, 0xfb, 0xeb, 0x61,
+	0xfa, 0x24, 0xc1, 0x63, 0x75, 0xbb, 0x47, 0x75,
+	0xaf, 0xe1, 0x53, 0x16, 0x96, 0x21, 0x85, 0x26,
+	0x11, 0xb3, 0x76, 0xe3, 0x23, 0xa1, 0x6b, 0x74,
+	0x37, 0xd0, 0xde, 0x06, 0x90, 0x71, 0x5d, 0x43,
+	0x88, 0x9b, 0x00, 0x54, 0xa6, 0x75, 0x2f, 0xa1,
+	0xc2, 0x0b, 0x73, 0x20, 0x1d, 0xb6, 0x21, 0x79,
+	0x57, 0x3f, 0xfa, 0x09, 0xbe, 0x8a, 0x33, 0xc3,
+	0x52, 0xf0, 0x1d, 0x82, 0x31, 0xd1, 0x55, 0xb5,
+	0x6c, 0x99, 0x25, 0xcf, 0x5c, 0x32, 0xce, 0xe9,
+	0x0d, 0xfa, 0x69, 0x2c, 0xd5, 0x0d, 0xc5, 0x6d,
+	0x86, 0xd0, 0x0c, 0x3b, 0x06, 0x50, 0x79, 0xe8,
+	0xc3, 0xae, 0x04, 0xe6, 0xcd, 0x51, 0xe4, 0x26,
+	0x9b, 0x4f, 0x7e, 0xa6, 0x0f, 0xab, 0xd8, 0xe5,
+	0xde, 0xa9, 0x00, 0x95, 0xbe, 0xa3, 0x9d, 0x5d,
+	0xb2, 0x09, 0x70, 0x18, 0x1c, 0xf0, 0xac, 0x29,
+	0x23, 0x02, 0x29, 0x28, 0xd2, 0x74, 0x35, 0x57,
+	0x62, 0x0f, 0x24, 0xea, 0x5e, 0x33, 0xc2, 0x92,
+	0xf3, 0x78, 0x4d, 0x30, 0x1e, 0xa1, 0x99, 0xa9,
+	0x82, 0xb0, 0x42, 0x31, 0x8d, 0xad, 0x8a, 0xbc,
+	0xfc, 0xd4, 0x57, 0x47, 0x3e, 0xb4, 0x50, 0xdd,
+	0x6e, 0x2c, 0x80, 0x4d, 0x22, 0xf1, 0xfb, 0x57,
+	0xc4, 0xdd, 0x17, 0xe1, 0x8a, 0x36, 0x4a, 0xb3,
+	0x37, 0xca, 0xc9, 0x4e, 0xab, 0xd5, 0x69, 0xc4,
+	0xf4, 0xbc, 0x0b, 0x3b, 0x44, 0x4b, 0x29, 0x9c,
+	0xee, 0xd4, 0x35, 0x22, 0x21, 0xb0, 0x1f, 0x27,
+	0x64, 0xa8, 0x51, 0x1b, 0xf0, 0x9f, 0x19, 0x5c,
+	0xfb, 0x5a, 0x64, 0x74, 0x70, 0x45, 0x09, 0xf5,
+	0x64, 0xfe, 0x1a, 0x2d, 0xc9, 0x14, 0x04, 0x14,
+	0xcf, 0xd5, 0x7d, 0x60, 0xaf, 0x94, 0x39, 0x94,
+	0xe2, 0x7d, 0x79, 0x82, 0xd0, 0x65, 0x3b, 0x6b,
+	0x9c, 0x19, 0x84, 0xb4, 0x6d, 0xb3, 0x0c, 0x99,
+	0xc0, 0x56, 0xa8, 0xbd, 0x73, 0xce, 0x05, 0x84,
+	0x3e, 0x30, 0xaa, 0xc4, 0x9b, 0x1b, 0x04, 0x2a,
+	0x9f, 0xd7, 0x43, 0x2b, 0x23, 0xdf, 0xbf, 0xaa,
+	0xd5, 0xc2, 0x43, 0x2d, 0x70, 0xab, 0xdc, 0x75,
+	0xad, 0xac, 0xf7, 0xc0, 0xbe, 0x67, 0xb2, 0x74,
+	0xed, 0x67, 0x10, 0x4a, 0x92, 0x60, 0xc1, 0x40,
+	0x50, 0x19, 0x8a, 0x8a, 0x8c, 0x09, 0x0e, 0x72,
+	0xe1, 0x73, 0x5e, 0xe8, 0x41, 0x85, 0x63, 0x9f,
+	0x3f, 0xd7, 0x7d, 0xc4, 0xfb, 0x22, 0x5d, 0x92,
+	0x6c, 0xb3, 0x1e, 0xe2, 0x50, 0x2f, 0x82, 0xa8,
+	0x28, 0xc0, 0xb5, 0xd7, 0x5f, 0x68, 0x0d, 0x2c,
+	0x2d, 0xaf, 0x7e, 0xfa, 0x2e, 0x08, 0x0f, 0x1f,
+	0x70, 0x9f, 0xe9, 0x19, 0x72, 0x55, 0xf8, 0xfb,
+	0x51, 0xd2, 0x33, 0x5d, 0xa0, 0xd3, 0x2b, 0x0a,
+	0x6c, 0xbc, 0x4e, 0xcf, 0x36, 0x4d, 0xdc, 0x3b,
+	0xe9, 0x3e, 0x81, 0x7c, 0x61, 0xdb, 0x20, 0x2d,
+	0x3a, 0xc3, 0xb3, 0x0c, 0x1e, 0x00, 0xb9, 0x7c,
+	0xf5, 0xca, 0x10, 0x5f, 0x3a, 0x71, 0xb3, 0xe4,
+	0x20, 0xdb, 0x0c, 0x2a, 0x98, 0x63, 0x45, 0x00,
+	0x58, 0xf6, 0x68, 0xe4, 0x0b, 0xda, 0x13, 0x3b,
+	0x60, 0x5c, 0x76, 0xdb, 0xb9, 0x97, 0x71, 0xe4,
+	0xd9, 0xb7, 0xdb, 0xbd, 0x68, 0xc7, 0x84, 0x84,
+	0xaa, 0x7c, 0x68, 0x62, 0x5e, 0x16, 0xfc, 0xba,
+	0x72, 0xaa, 0x9a, 0xa9, 0xeb, 0x7c, 0x75, 0x47,
+	0x97, 0x7e, 0xad, 0xe2, 0xd9, 0x91, 0xe8, 0xe4,
+	0xa5, 0x31, 0xd7, 0x01, 0x8e, 0xa2, 0x11, 0x88,
+	0x95, 0xb9, 0xf2, 0x9b, 0xd3, 0x7f, 0x1b, 0x81,
+	0x22, 0xf7, 0x98, 0x60, 0x0a, 0x64, 0xa6, 0xc1,
+	0xf6, 0x49, 0xc7, 0xe3, 0x07, 0x4d, 0x94, 0x7a,
+	0xcf, 0x6e, 0x68, 0x0c, 0x1b, 0x3f, 0x6e, 0x2e,
+	0xee, 0x92, 0xfa, 0x52, 0xb3, 0x59, 0xf8, 0xf1,
+	0x8f, 0x6a, 0x66, 0xa3, 0x82, 0x76, 0x4a, 0x07,
+	0x1a, 0xc7, 0xdd, 0xf5, 0xda, 0x9c, 0x3c, 0x24,
+	0xbf, 0xfd, 0x42, 0xa1, 0x10, 0x64, 0x6a, 0x0f,
+	0x89, 0xee, 0x36, 0xa5, 0xce, 0x99, 0x48, 0x6a,
+	0xf0, 0x9f, 0x9e, 0x69, 0xa4, 0x40, 0x20, 0xe9,
+	0x16, 0x15, 0xf7, 0xdb, 0x75, 0x02, 0xcb, 0xe9,
+	0x73, 0x8b, 0x3b, 0x49, 0x2f, 0xf0, 0xaf, 0x51,
+	0x06, 0x5c, 0xdf, 0x27, 0x27, 0x49, 0x6a, 0xd1,
+	0xcc, 0xc7, 0xb5, 0x63, 0xb5, 0xfc, 0xb8, 0x5c,
+	0x87, 0x7f, 0x84, 0xb4, 0xcc, 0x14, 0xa9, 0x53,
+	0xda, 0xa4, 0x56, 0xf8, 0xb6, 0x1b, 0xcc, 0x40,
+	0x27, 0x52, 0x06, 0x5a, 0x13, 0x81, 0xd7, 0x3a,
+	0xd4, 0x3b, 0xfb, 0x49, 0x65, 0x31, 0x33, 0xb2,
+	0xfa, 0xcd, 0xad, 0x58, 0x4e, 0x2b, 0xae, 0xd2,
+	0x20, 0xfb, 0x1a, 0x48, 0xb4, 0x3f, 0x9a, 0xd8,
+	0x7a, 0x35, 0x4a, 0xc8, 0xee, 0x88, 0x5e, 0x07,
+	0x66, 0x54, 0xb9, 0xec, 0x9f, 0xa3, 0xe3, 0xb9,
+	0x37, 0xaa, 0x49, 0x76, 0x31, 0xda, 0x74, 0x2d,
+	0x3c, 0xa4, 0x65, 0x10, 0x32, 0x38, 0xf0, 0xde,
+	0xd3, 0x99, 0x17, 0xaa, 0x71, 0xaa, 0x8f, 0x0f,
+	0x8c, 0xaf, 0xa2, 0xf8, 0x5d, 0x64, 0xba, 0x1d,
+	0xa3, 0xef, 0x96, 0x73, 0xe8, 0xa1, 0x02, 0x8d,
+	0x0c, 0x6d, 0xb8, 0x06, 0x90, 0xb8, 0x08, 0x56,
+	0x2c, 0xa7, 0x06, 0xc9, 0xc2, 0x38, 0xdb, 0x7c,
+	0x63, 0xb1, 0x57, 0x8e, 0xea, 0x7c, 0x79, 0xf3,
+	0x49, 0x1d, 0xfe, 0x9f, 0xf3, 0x6e, 0xb1, 0x1d,
+	0xba, 0x19, 0x80, 0x1a, 0x0a, 0xd3, 0xb0, 0x26,
+	0x21, 0x40, 0xb1, 0x7c, 0xf9, 0x4d, 0x8d, 0x10,
+	0xc1, 0x7e, 0xf4, 0xf6, 0x3c, 0xa8, 0xfd, 0x7c,
+	0xa3, 0x92, 0xb2, 0x0f, 0xaa, 0xcc, 0xa6, 0x11,
+	0xfe, 0x04, 0xe3, 0xd1, 0x7a, 0x32, 0x89, 0xdf,
+	0x0d, 0xc4, 0x8f, 0x79, 0x6b, 0xca, 0x16, 0x7c,
+	0x6e, 0xf9, 0xad, 0x0f, 0xf6, 0xfe, 0x27, 0xdb,
+	0xc4, 0x13, 0x70, 0xf1, 0x62, 0x1a, 0x4f, 0x79,
+	0x40, 0xc9, 0x9b, 0x8b, 0x21, 0xea, 0x84, 0xfa,
+	0xf5, 0xf1, 0x89, 0xce, 0xb7, 0x55, 0x0a, 0x80,
+	0x39, 0x2f, 0x55, 0x36, 0x16, 0x9c, 0x7b, 0x08,
+	0xbd, 0x87, 0x0d, 0xa5, 0x32, 0xf1, 0x52, 0x7c,
+	0xe8, 0x55, 0x60, 0x5b, 0xd7, 0x69, 0xe4, 0xfc,
+	0xfa, 0x12, 0x85, 0x96, 0xea, 0x50, 0x28, 0xab,
+	0x8a, 0xf7, 0xbb, 0x0e, 0x53, 0x74, 0xca, 0xa6,
+	0x27, 0x09, 0xc2, 0xb5, 0xde, 0x18, 0x14, 0xd9,
+	0xea, 0xe5, 0x29, 0x1c, 0x40, 0x56, 0xcf, 0xd7,
+	0xae, 0x05, 0x3f, 0x65, 0xaf, 0x05, 0x73, 0xe2,
+	0x35, 0x96, 0x27, 0x07, 0x14, 0xc0, 0xad, 0x33,
+	0xf1, 0xdc, 0x44, 0x7a, 0x89, 0x17, 0x77, 0xd2,
+	0x9c, 0x58, 0x60, 0xf0, 0x3f, 0x7b, 0x2d, 0x2e,
+	0x57, 0x95, 0x54, 0x87, 0xed, 0xf2, 0xc7, 0x4c,
+	0xf0, 0xae, 0x56, 0x29, 0x19, 0x7d, 0x66, 0x4b,
+	0x9b, 0x83, 0x84, 0x42, 0x3b, 0x01, 0x25, 0x66,
+	0x8e, 0x02, 0xde, 0xb9, 0x83, 0x54, 0x19, 0xf6,
+	0x9f, 0x79, 0x0d, 0x67, 0xc5, 0x1d, 0x7a, 0x44,
+	0x02, 0x98, 0xa7, 0x16, 0x1c, 0x29, 0x0d, 0x74,
+	0xff, 0x85, 0x40, 0x06, 0xef, 0x2c, 0xa9, 0xc6,
+	0xf5, 0x53, 0x07, 0x06, 0xae, 0xe4, 0xfa, 0x5f,
+	0xd8, 0x39, 0x4d, 0xf1, 0x9b, 0x6b, 0xd9, 0x24,
+	0x84, 0xfe, 0x03, 0x4c, 0xb2, 0x3f, 0xdf, 0xa1,
+	0x05, 0x9e, 0x50, 0x14, 0x5a, 0xd9, 0x1a, 0xa2,
+	0xa7, 0xfa, 0xfa, 0x17, 0xf7, 0x78, 0xd6, 0xb5,
+	0x92, 0x61, 0x91, 0xac, 0x36, 0xfa, 0x56, 0x0d,
+	0x38, 0x32, 0x18, 0x85, 0x08, 0x58, 0x37, 0xf0,
+	0x4b, 0xdb, 0x59, 0xe7, 0xa4, 0x34, 0xc0, 0x1b,
+	0x01, 0xaf, 0x2d, 0xde, 0xa1, 0xaa, 0x5d, 0xd3,
+	0xec, 0xe1, 0xd4, 0xf7, 0xe6, 0x54, 0x68, 0xf0,
+	0x51, 0x97, 0xa7, 0x89, 0xea, 0x24, 0xad, 0xd3,
+	0x6e, 0x47, 0x93, 0x8b, 0x4b, 0xb4, 0xf7, 0x1c,
+	0x42, 0x06, 0x67, 0xe8, 0x99, 0xf6, 0xf5, 0x7b,
+	0x85, 0xb5, 0x65, 0xb5, 0xb5, 0xd2, 0x37, 0xf5,
+	0xf3, 0x02, 0xa6, 0x4d, 0x11, 0xa7, 0xdc, 0x51,
+	0x09, 0x7f, 0xa0, 0xd8, 0x88, 0x1c, 0x13, 0x71,
+	0xae, 0x9c, 0xb7, 0x7b, 0x34, 0xd6, 0x4e, 0x68,
+	0x26, 0x83, 0x51, 0xaf, 0x1d, 0xee, 0x8b, 0xbb,
+	0x69, 0x43, 0x2b, 0x9e, 0x8a, 0xbc, 0x02, 0x0e,
+	0xa0, 0x1b, 0xe0, 0xa8, 0x5f, 0x6f, 0xaf, 0x1b,
+	0x8f, 0xe7, 0x64, 0x71, 0x74, 0x11, 0x7e, 0xa8,
+	0xd8, 0xf9, 0x97, 0x06, 0xc3, 0xb6, 0xfb, 0xfb,
+	0xb7, 0x3d, 0x35, 0x9d, 0x3b, 0x52, 0xed, 0x54,
+	0xca, 0xf4, 0x81, 0x01, 0x2d, 0x1b, 0xc3, 0xa7,
+	0x00, 0x3d, 0x1a, 0x39, 0x54, 0xe1, 0xf6, 0xff,
+	0xed, 0x6f, 0x0b, 0x5a, 0x68, 0xda, 0x58, 0xdd,
+	0xa9, 0xcf, 0x5c, 0x4a, 0xe5, 0x09, 0x4e, 0xde,
+	0x9d, 0xbc, 0x3e, 0xee, 0x5a, 0x00, 0x3b, 0x2c,
+	0x87, 0x10, 0x65, 0x60, 0xdd, 0xd7, 0x56, 0xd1,
+	0x4c, 0x64, 0x45, 0xe4, 0x21, 0xec, 0x78, 0xf8,
+	0x25, 0x7a, 0x3e, 0x16, 0x5d, 0x09, 0x53, 0x14,
+	0xbe, 0x4f, 0xae, 0x87, 0xd8, 0xd1, 0xaa, 0x3c,
+	0xf6, 0x3e, 0xa4, 0x70, 0x8c, 0x5e, 0x70, 0xa4,
+	0xb3, 0x6b, 0x66, 0x73, 0xd3, 0xbf, 0x31, 0x06,
+	0x19, 0x62, 0x93, 0x15, 0xf2, 0x86, 0xe4, 0x52,
+	0x7e, 0x53, 0x4c, 0x12, 0x38, 0xcc, 0x34, 0x7d,
+	0x57, 0xf6, 0x42, 0x93, 0x8a, 0xc4, 0xee, 0x5c,
+	0x8a, 0xe1, 0x52, 0x8f, 0x56, 0x64, 0xf6, 0xa6,
+	0xd1, 0x91, 0x57, 0x70, 0xcd, 0x11, 0x76, 0xf5,
+	0x59, 0x60, 0x60, 0x3c, 0xc1, 0xc3, 0x0b, 0x7f,
+	0x58, 0x1a, 0x50, 0x91, 0xf1, 0x68, 0x8f, 0x6e,
+	0x74, 0x74, 0xa8, 0x51, 0x0b, 0xf7, 0x7a, 0x98,
+	0x37, 0xf2, 0x0a, 0x0e, 0xa4, 0x97, 0x04, 0xb8,
+	0x9b, 0xfd, 0xa0, 0xea, 0xf7, 0x0d, 0xe1, 0xdb,
+	0x03, 0xf0, 0x31, 0x29, 0xf8, 0xdd, 0x6b, 0x8b,
+	0x5d, 0xd8, 0x59, 0xa9, 0x29, 0xcf, 0x9a, 0x79,
+	0x89, 0x19, 0x63, 0x46, 0x09, 0x79, 0x6a, 0x11,
+	0xda, 0x63, 0x68, 0x48, 0x77, 0x23, 0xfb, 0x7d,
+	0x3a, 0x43, 0xcb, 0x02, 0x3b, 0x7a, 0x6d, 0x10,
+	0x2a, 0x9e, 0xac, 0xf1, 0xd4, 0x19, 0xf8, 0x23,
+	0x64, 0x1d, 0x2c, 0x5f, 0xf2, 0xb0, 0x5c, 0x23,
+	0x27, 0xf7, 0x27, 0x30, 0x16, 0x37, 0xb1, 0x90,
+	0xab, 0x38, 0xfb, 0x55, 0xcd, 0x78, 0x58, 0xd4,
+	0x7d, 0x43, 0xf6, 0x45, 0x5e, 0x55, 0x8d, 0xb1,
+	0x02, 0x65, 0x58, 0xb4, 0x13, 0x4b, 0x36, 0xf7,
+	0xcc, 0xfe, 0x3d, 0x0b, 0x82, 0xe2, 0x12, 0x11,
+	0xbb, 0xe6, 0xb8, 0x3a, 0x48, 0x71, 0xc7, 0x50,
+	0x06, 0x16, 0x3a, 0xe6, 0x7c, 0x05, 0xc7, 0xc8,
+	0x4d, 0x2f, 0x08, 0x6a, 0x17, 0x9a, 0x95, 0x97,
+	0x50, 0x68, 0xdc, 0x28, 0x18, 0xc4, 0x61, 0x38,
+	0xb9, 0xe0, 0x3e, 0x78, 0xdb, 0x29, 0xe0, 0x9f,
+	0x52, 0xdd, 0xf8, 0x4f, 0x91, 0xc1, 0xd0, 0x33,
+	0xa1, 0x7a, 0x8e, 0x30, 0x13, 0x82, 0x07, 0x9f,
+	0xd3, 0x31, 0x0f, 0x23, 0xbe, 0x32, 0x5a, 0x75,
+	0xcf, 0x96, 0xb2, 0xec, 0xb5, 0x32, 0xac, 0x21,
+	0xd1, 0x82, 0x33, 0xd3, 0x15, 0x74, 0xbd, 0x90,
+	0xf1, 0x2c, 0xe6, 0x5f, 0x8d, 0xe3, 0x02, 0xe8,
+	0xe9, 0xc4, 0xca, 0x96, 0xeb, 0x0e, 0xbc, 0x91,
+	0xf4, 0xb9, 0xea, 0xd9, 0x1b, 0x75, 0xbd, 0xe1,
+	0xac, 0x2a, 0x05, 0x37, 0x52, 0x9b, 0x1b, 0x3f,
+	0x5a, 0xdc, 0x21, 0xc3, 0x98, 0xbb, 0xaf, 0xa3,
+	0xf2, 0x00, 0xbf, 0x0d, 0x30, 0x89, 0x05, 0xcc,
+	0xa5, 0x76, 0xf5, 0x06, 0xf0, 0xc6, 0x54, 0x8a,
+	0x5d, 0xd4, 0x1e, 0xc1, 0xf2, 0xce, 0xb0, 0x62,
+	0xc8, 0xfc, 0x59, 0x42, 0x9a, 0x90, 0x60, 0x55,
+	0xfe, 0x88, 0xa5, 0x8b, 0xb8, 0x33, 0x0c, 0x23,
+	0x24, 0x0d, 0x15, 0x70, 0x37, 0x1e, 0x3d, 0xf6,
+	0xd2, 0xea, 0x92, 0x10, 0xb2, 0xc4, 0x51, 0xac,
+	0xf2, 0xac, 0xf3, 0x6b, 0x6c, 0xaa, 0xcf, 0x12,
+	0xc5, 0x6c, 0x90, 0x50, 0xb5, 0x0c, 0xfc, 0x1a,
+	0x15, 0x52, 0xe9, 0x26, 0xc6, 0x52, 0xa4, 0xe7,
+	0x81, 0x69, 0xe1, 0xe7, 0x9e, 0x30, 0x01, 0xec,
+	0x84, 0x89, 0xb2, 0x0d, 0x66, 0xdd, 0xce, 0x28,
+	0x5c, 0xec, 0x98, 0x46, 0x68, 0x21, 0x9f, 0x88,
+	0x3f, 0x1f, 0x42, 0x77, 0xce, 0xd0, 0x61, 0xd4,
+	0x20, 0xa7, 0xff, 0x53, 0xad, 0x37, 0xd0, 0x17,
+	0x35, 0xc9, 0xfc, 0xba, 0x0a, 0x78, 0x3f, 0xf2,
+	0xcc, 0x86, 0x89, 0xe8, 0x4b, 0x3c, 0x48, 0x33,
+	0x09, 0x7f, 0xc6, 0xc0, 0xdd, 0xb8, 0xfd, 0x7a,
+	0x66, 0x66, 0x65, 0xeb, 0x47, 0xa7, 0x04, 0x28,
+	0xa3, 0x19, 0x8e, 0xa9, 0xb1, 0x13, 0x67, 0x62,
+	0x70, 0xcf, 0xd7
+};
+static const u8 dec_output013[] __initconst = {
+	0x74, 0xa6, 0x3e, 0xe4, 0xb1, 0xcb, 0xaf, 0xb0,
+	0x40, 0xe5, 0x0f, 0x9e, 0xf1, 0xf2, 0x89, 0xb5,
+	0x42, 0x34, 0x8a, 0xa1, 0x03, 0xb7, 0xe9, 0x57,
+	0x46, 0xbe, 0x20, 0xe4, 0x6e, 0xb0, 0xeb, 0xff,
+	0xea, 0x07, 0x7e, 0xef, 0xe2, 0x55, 0x9f, 0xe5,
+	0x78, 0x3a, 0xb7, 0x83, 0xc2, 0x18, 0x40, 0x7b,
+	0xeb, 0xcd, 0x81, 0xfb, 0x90, 0x12, 0x9e, 0x46,
+	0xa9, 0xd6, 0x4a, 0xba, 0xb0, 0x62, 0xdb, 0x6b,
+	0x99, 0xc4, 0xdb, 0x54, 0x4b, 0xb8, 0xa5, 0x71,
+	0xcb, 0xcd, 0x63, 0x32, 0x55, 0xfb, 0x31, 0xf0,
+	0x38, 0xf5, 0xbe, 0x78, 0xe4, 0x45, 0xce, 0x1b,
+	0x6a, 0x5b, 0x0e, 0xf4, 0x16, 0xe4, 0xb1, 0x3d,
+	0xf6, 0x63, 0x7b, 0xa7, 0x0c, 0xde, 0x6f, 0x8f,
+	0x74, 0xdf, 0xe0, 0x1e, 0x9d, 0xce, 0x8f, 0x24,
+	0xef, 0x23, 0x35, 0x33, 0x7b, 0x83, 0x34, 0x23,
+	0x58, 0x74, 0x14, 0x77, 0x1f, 0xc2, 0x4f, 0x4e,
+	0xc6, 0x89, 0xf9, 0x52, 0x09, 0x37, 0x64, 0x14,
+	0xc4, 0x01, 0x6b, 0x9d, 0x77, 0xe8, 0x90, 0x5d,
+	0xa8, 0x4a, 0x2a, 0xef, 0x5c, 0x7f, 0xeb, 0xbb,
+	0xb2, 0xc6, 0x93, 0x99, 0x66, 0xdc, 0x7f, 0xd4,
+	0x9e, 0x2a, 0xca, 0x8d, 0xdb, 0xe7, 0x20, 0xcf,
+	0xe4, 0x73, 0xae, 0x49, 0x7d, 0x64, 0x0f, 0x0e,
+	0x28, 0x46, 0xa9, 0xa8, 0x32, 0xe4, 0x0e, 0xf6,
+	0x51, 0x53, 0xb8, 0x3c, 0xb1, 0xff, 0xa3, 0x33,
+	0x41, 0x75, 0xff, 0xf1, 0x6f, 0xf1, 0xfb, 0xbb,
+	0x83, 0x7f, 0x06, 0x9b, 0xe7, 0x1b, 0x0a, 0xe0,
+	0x5c, 0x33, 0x60, 0x5b, 0xdb, 0x5b, 0xed, 0xfe,
+	0xa5, 0x16, 0x19, 0x72, 0xa3, 0x64, 0x23, 0x00,
+	0x02, 0xc7, 0xf3, 0x6a, 0x81, 0x3e, 0x44, 0x1d,
+	0x79, 0x15, 0x5f, 0x9a, 0xde, 0xe2, 0xfd, 0x1b,
+	0x73, 0xc1, 0xbc, 0x23, 0xba, 0x31, 0xd2, 0x50,
+	0xd5, 0xad, 0x7f, 0x74, 0xa7, 0xc9, 0xf8, 0x3e,
+	0x2b, 0x26, 0x10, 0xf6, 0x03, 0x36, 0x74, 0xe4,
+	0x0e, 0x6a, 0x72, 0xb7, 0x73, 0x0a, 0x42, 0x28,
+	0xc2, 0xad, 0x5e, 0x03, 0xbe, 0xb8, 0x0b, 0xa8,
+	0x5b, 0xd4, 0xb8, 0xba, 0x52, 0x89, 0xb1, 0x9b,
+	0xc1, 0xc3, 0x65, 0x87, 0xed, 0xa5, 0xf4, 0x86,
+	0xfd, 0x41, 0x80, 0x91, 0x27, 0x59, 0x53, 0x67,
+	0x15, 0x78, 0x54, 0x8b, 0x2d, 0x3d, 0xc7, 0xff,
+	0x02, 0x92, 0x07, 0x5f, 0x7a, 0x4b, 0x60, 0x59,
+	0x3c, 0x6f, 0x5c, 0xd8, 0xec, 0x95, 0xd2, 0xfe,
+	0xa0, 0x3b, 0xd8, 0x3f, 0xd1, 0x69, 0xa6, 0xd6,
+	0x41, 0xb2, 0xf4, 0x4d, 0x12, 0xf4, 0x58, 0x3e,
+	0x66, 0x64, 0x80, 0x31, 0x9b, 0xa8, 0x4c, 0x8b,
+	0x07, 0xb2, 0xec, 0x66, 0x94, 0x66, 0x47, 0x50,
+	0x50, 0x5f, 0x18, 0x0b, 0x0e, 0xd6, 0xc0, 0x39,
+	0x21, 0x13, 0x9e, 0x33, 0xbc, 0x79, 0x36, 0x02,
+	0x96, 0x70, 0xf0, 0x48, 0x67, 0x2f, 0x26, 0xe9,
+	0x6d, 0x10, 0xbb, 0xd6, 0x3f, 0xd1, 0x64, 0x7a,
+	0x2e, 0xbe, 0x0c, 0x61, 0xf0, 0x75, 0x42, 0x38,
+	0x23, 0xb1, 0x9e, 0x9f, 0x7c, 0x67, 0x66, 0xd9,
+	0x58, 0x9a, 0xf1, 0xbb, 0x41, 0x2a, 0x8d, 0x65,
+	0x84, 0x94, 0xfc, 0xdc, 0x6a, 0x50, 0x64, 0xdb,
+	0x56, 0x33, 0x76, 0x00, 0x10, 0xed, 0xbe, 0xd2,
+	0x12, 0xf6, 0xf6, 0x1b, 0xa2, 0x16, 0xde, 0xae,
+	0x31, 0x95, 0xdd, 0xb1, 0x08, 0x7e, 0x4e, 0xee,
+	0xe7, 0xf9, 0xa5, 0xfb, 0x5b, 0x61, 0x43, 0x00,
+	0x40, 0xf6, 0x7e, 0x02, 0x04, 0x32, 0x4e, 0x0c,
+	0xe2, 0x66, 0x0d, 0xd7, 0x07, 0x98, 0x0e, 0xf8,
+	0x72, 0x34, 0x6d, 0x95, 0x86, 0xd7, 0xcb, 0x31,
+	0x54, 0x47, 0xd0, 0x38, 0x29, 0x9c, 0x5a, 0x68,
+	0xd4, 0x87, 0x76, 0xc9, 0xe7, 0x7e, 0xe3, 0xf4,
+	0x81, 0x6d, 0x18, 0xcb, 0xc9, 0x05, 0xaf, 0xa0,
+	0xfb, 0x66, 0xf7, 0xf1, 0x1c, 0xc6, 0x14, 0x11,
+	0x4f, 0x2b, 0x79, 0x42, 0x8b, 0xbc, 0xac, 0xe7,
+	0x6c, 0xfe, 0x0f, 0x58, 0xe7, 0x7c, 0x78, 0x39,
+	0x30, 0xb0, 0x66, 0x2c, 0x9b, 0x6d, 0x3a, 0xe1,
+	0xcf, 0xc9, 0xa4, 0x0e, 0x6d, 0x6d, 0x8a, 0xa1,
+	0x3a, 0xe7, 0x28, 0xd4, 0x78, 0x4c, 0xa6, 0xa2,
+	0x2a, 0xa6, 0x03, 0x30, 0xd7, 0xa8, 0x25, 0x66,
+	0x87, 0x2f, 0x69, 0x5c, 0x4e, 0xdd, 0xa5, 0x49,
+	0x5d, 0x37, 0x4a, 0x59, 0xc4, 0xaf, 0x1f, 0xa2,
+	0xe4, 0xf8, 0xa6, 0x12, 0x97, 0xd5, 0x79, 0xf5,
+	0xe2, 0x4a, 0x2b, 0x5f, 0x61, 0xe4, 0x9e, 0xe3,
+	0xee, 0xb8, 0xa7, 0x5b, 0x2f, 0xf4, 0x9e, 0x6c,
+	0xfb, 0xd1, 0xc6, 0x56, 0x77, 0xba, 0x75, 0xaa,
+	0x3d, 0x1a, 0xa8, 0x0b, 0xb3, 0x68, 0x24, 0x00,
+	0x10, 0x7f, 0xfd, 0xd7, 0xa1, 0x8d, 0x83, 0x54,
+	0x4f, 0x1f, 0xd8, 0x2a, 0xbe, 0x8a, 0x0c, 0x87,
+	0xab, 0xa2, 0xde, 0xc3, 0x39, 0xbf, 0x09, 0x03,
+	0xa5, 0xf3, 0x05, 0x28, 0xe1, 0xe1, 0xee, 0x39,
+	0x70, 0x9c, 0xd8, 0x81, 0x12, 0x1e, 0x02, 0x40,
+	0xd2, 0x6e, 0xf0, 0xeb, 0x1b, 0x3d, 0x22, 0xc6,
+	0xe5, 0xe3, 0xb4, 0x5a, 0x98, 0xbb, 0xf0, 0x22,
+	0x28, 0x8d, 0xe5, 0xd3, 0x16, 0x48, 0x24, 0xa5,
+	0xe6, 0x66, 0x0c, 0xf9, 0x08, 0xf9, 0x7e, 0x1e,
+	0xe1, 0x28, 0x26, 0x22, 0xc7, 0xc7, 0x0a, 0x32,
+	0x47, 0xfa, 0xa3, 0xbe, 0x3c, 0xc4, 0xc5, 0x53,
+	0x0a, 0xd5, 0x94, 0x4a, 0xd7, 0x93, 0xd8, 0x42,
+	0x99, 0xb9, 0x0a, 0xdb, 0x56, 0xf7, 0xb9, 0x1c,
+	0x53, 0x4f, 0xfa, 0xd3, 0x74, 0xad, 0xd9, 0x68,
+	0xf1, 0x1b, 0xdf, 0x61, 0xc6, 0x5e, 0xa8, 0x48,
+	0xfc, 0xd4, 0x4a, 0x4c, 0x3c, 0x32, 0xf7, 0x1c,
+	0x96, 0x21, 0x9b, 0xf9, 0xa3, 0xcc, 0x5a, 0xce,
+	0xd5, 0xd7, 0x08, 0x24, 0xf6, 0x1c, 0xfd, 0xdd,
+	0x38, 0xc2, 0x32, 0xe9, 0xb8, 0xe7, 0xb6, 0xfa,
+	0x9d, 0x45, 0x13, 0x2c, 0x83, 0xfd, 0x4a, 0x69,
+	0x82, 0xcd, 0xdc, 0xb3, 0x76, 0x0c, 0x9e, 0xd8,
+	0xf4, 0x1b, 0x45, 0x15, 0xb4, 0x97, 0xe7, 0x58,
+	0x34, 0xe2, 0x03, 0x29, 0x5a, 0xbf, 0xb6, 0xe0,
+	0x5d, 0x13, 0xd9, 0x2b, 0xb4, 0x80, 0xb2, 0x45,
+	0x81, 0x6a, 0x2e, 0x6c, 0x89, 0x7d, 0xee, 0xbb,
+	0x52, 0xdd, 0x1f, 0x18, 0xe7, 0x13, 0x6b, 0x33,
+	0x0e, 0xea, 0x36, 0x92, 0x77, 0x7b, 0x6d, 0x9c,
+	0x5a, 0x5f, 0x45, 0x7b, 0x7b, 0x35, 0x62, 0x23,
+	0xd1, 0xbf, 0x0f, 0xd0, 0x08, 0x1b, 0x2b, 0x80,
+	0x6b, 0x7e, 0xf1, 0x21, 0x47, 0xb0, 0x57, 0xd1,
+	0x98, 0x72, 0x90, 0x34, 0x1c, 0x20, 0x04, 0xff,
+	0x3d, 0x5c, 0xee, 0x0e, 0x57, 0x5f, 0x6f, 0x24,
+	0x4e, 0x3c, 0xea, 0xfc, 0xa5, 0xa9, 0x83, 0xc9,
+	0x61, 0xb4, 0x51, 0x24, 0xf8, 0x27, 0x5e, 0x46,
+	0x8c, 0xb1, 0x53, 0x02, 0x96, 0x35, 0xba, 0xb8,
+	0x4c, 0x71, 0xd3, 0x15, 0x59, 0x35, 0x22, 0x20,
+	0xad, 0x03, 0x9f, 0x66, 0x44, 0x3b, 0x9c, 0x35,
+	0x37, 0x1f, 0x9b, 0xbb, 0xf3, 0xdb, 0x35, 0x63,
+	0x30, 0x64, 0xaa, 0xa2, 0x06, 0xa8, 0x5d, 0xbb,
+	0xe1, 0x9f, 0x70, 0xec, 0x82, 0x11, 0x06, 0x36,
+	0xec, 0x8b, 0x69, 0x66, 0x24, 0x44, 0xc9, 0x4a,
+	0x57, 0xbb, 0x9b, 0x78, 0x13, 0xce, 0x9c, 0x0c,
+	0xba, 0x92, 0x93, 0x63, 0xb8, 0xe2, 0x95, 0x0f,
+	0x0f, 0x16, 0x39, 0x52, 0xfd, 0x3a, 0x6d, 0x02,
+	0x4b, 0xdf, 0x13, 0xd3, 0x2a, 0x22, 0xb4, 0x03,
+	0x7c, 0x54, 0x49, 0x96, 0x68, 0x54, 0x10, 0xfa,
+	0xef, 0xaa, 0x6c, 0xe8, 0x22, 0xdc, 0x71, 0x16,
+	0x13, 0x1a, 0xf6, 0x28, 0xe5, 0x6d, 0x77, 0x3d,
+	0xcd, 0x30, 0x63, 0xb1, 0x70, 0x52, 0xa1, 0xc5,
+	0x94, 0x5f, 0xcf, 0xe8, 0xb8, 0x26, 0x98, 0xf7,
+	0x06, 0xa0, 0x0a, 0x70, 0xfa, 0x03, 0x80, 0xac,
+	0xc1, 0xec, 0xd6, 0x4c, 0x54, 0xd7, 0xfe, 0x47,
+	0xb6, 0x88, 0x4a, 0xf7, 0x71, 0x24, 0xee, 0xf3,
+	0xd2, 0xc2, 0x4a, 0x7f, 0xfe, 0x61, 0xc7, 0x35,
+	0xc9, 0x37, 0x67, 0xcb, 0x24, 0x35, 0xda, 0x7e,
+	0xca, 0x5f, 0xf3, 0x8d, 0xd4, 0x13, 0x8e, 0xd6,
+	0xcb, 0x4d, 0x53, 0x8f, 0x53, 0x1f, 0xc0, 0x74,
+	0xf7, 0x53, 0xb9, 0x5e, 0x23, 0x37, 0xba, 0x6e,
+	0xe3, 0x9d, 0x07, 0x55, 0x25, 0x7b, 0xe6, 0x2a,
+	0x64, 0xd1, 0x32, 0xdd, 0x54, 0x1b, 0x4b, 0xc0,
+	0xe1, 0xd7, 0x69, 0x58, 0xf8, 0x93, 0x29, 0xc4,
+	0xdd, 0x23, 0x2f, 0xa5, 0xfc, 0x9d, 0x7e, 0xf8,
+	0xd4, 0x90, 0xcd, 0x82, 0x55, 0xdc, 0x16, 0x16,
+	0x9f, 0x07, 0x52, 0x9b, 0x9d, 0x25, 0xed, 0x32,
+	0xc5, 0x7b, 0xdf, 0xf6, 0x83, 0x46, 0x3d, 0x65,
+	0xb7, 0xef, 0x87, 0x7a, 0x12, 0x69, 0x8f, 0x06,
+	0x7c, 0x51, 0x15, 0x4a, 0x08, 0xe8, 0xac, 0x9a,
+	0x0c, 0x24, 0xa7, 0x27, 0xd8, 0x46, 0x2f, 0xe7,
+	0x01, 0x0e, 0x1c, 0xc6, 0x91, 0xb0, 0x6e, 0x85,
+	0x65, 0xf0, 0x29, 0x0d, 0x2e, 0x6b, 0x3b, 0xfb,
+	0x4b, 0xdf, 0xe4, 0x80, 0x93, 0x03, 0x66, 0x46,
+	0x3e, 0x8a, 0x6e, 0xf3, 0x5e, 0x4d, 0x62, 0x0e,
+	0x49, 0x05, 0xaf, 0xd4, 0xf8, 0x21, 0x20, 0x61,
+	0x1d, 0x39, 0x17, 0xf4, 0x61, 0x47, 0x95, 0xfb,
+	0x15, 0x2e, 0xb3, 0x4f, 0xd0, 0x5d, 0xf5, 0x7d,
+	0x40, 0xda, 0x90, 0x3c, 0x6b, 0xcb, 0x17, 0x00,
+	0x13, 0x3b, 0x64, 0x34, 0x1b, 0xf0, 0xf2, 0xe5,
+	0x3b, 0xb2, 0xc7, 0xd3, 0x5f, 0x3a, 0x44, 0xa6,
+	0x9b, 0xb7, 0x78, 0x0e, 0x42, 0x5d, 0x4c, 0xc1,
+	0xe9, 0xd2, 0xcb, 0xb7, 0x78, 0xd1, 0xfe, 0x9a,
+	0xb5, 0x07, 0xe9, 0xe0, 0xbe, 0xe2, 0x8a, 0xa7,
+	0x01, 0x83, 0x00, 0x8c, 0x5c, 0x08, 0xe6, 0x63,
+	0x12, 0x92, 0xb7, 0xb7, 0xa6, 0x19, 0x7d, 0x38,
+	0x13, 0x38, 0x92, 0x87, 0x24, 0xf9, 0x48, 0xb3,
+	0x5e, 0x87, 0x6a, 0x40, 0x39, 0x5c, 0x3f, 0xed,
+	0x8f, 0xee, 0xdb, 0x15, 0x82, 0x06, 0xda, 0x49,
+	0x21, 0x2b, 0xb5, 0xbf, 0x32, 0x7c, 0x9f, 0x42,
+	0x28, 0x63, 0xcf, 0xaf, 0x1e, 0xf8, 0xc6, 0xa0,
+	0xd1, 0x02, 0x43, 0x57, 0x62, 0xec, 0x9b, 0x0f,
+	0x01, 0x9e, 0x71, 0xd8, 0x87, 0x9d, 0x01, 0xc1,
+	0x58, 0x77, 0xd9, 0xaf, 0xb1, 0x10, 0x7e, 0xdd,
+	0xa6, 0x50, 0x96, 0xe5, 0xf0, 0x72, 0x00, 0x6d,
+	0x4b, 0xf8, 0x2a, 0x8f, 0x19, 0xf3, 0x22, 0x88,
+	0x11, 0x4a, 0x8b, 0x7c, 0xfd, 0xb7, 0xed, 0xe1,
+	0xf6, 0x40, 0x39, 0xe0, 0xe9, 0xf6, 0x3d, 0x25,
+	0xe6, 0x74, 0x3c, 0x58, 0x57, 0x7f, 0xe1, 0x22,
+	0x96, 0x47, 0x31, 0x91, 0xba, 0x70, 0x85, 0x28,
+	0x6b, 0x9f, 0x6e, 0x25, 0xac, 0x23, 0x66, 0x2f,
+	0x29, 0x88, 0x28, 0xce, 0x8c, 0x5c, 0x88, 0x53,
+	0xd1, 0x3b, 0xcc, 0x6a, 0x51, 0xb2, 0xe1, 0x28,
+	0x3f, 0x91, 0xb4, 0x0d, 0x00, 0x3a, 0xe3, 0xf8,
+	0xc3, 0x8f, 0xd7, 0x96, 0x62, 0x0e, 0x2e, 0xfc,
+	0xc8, 0x6c, 0x77, 0xa6, 0x1d, 0x22, 0xc1, 0xb8,
+	0xe6, 0x61, 0xd7, 0x67, 0x36, 0x13, 0x7b, 0xbb,
+	0x9b, 0x59, 0x09, 0xa6, 0xdf, 0xf7, 0x6b, 0xa3,
+	0x40, 0x1a, 0xf5, 0x4f, 0xb4, 0xda, 0xd3, 0xf3,
+	0x81, 0x93, 0xc6, 0x18, 0xd9, 0x26, 0xee, 0xac,
+	0xf0, 0xaa, 0xdf, 0xc5, 0x9c, 0xca, 0xc2, 0xa2,
+	0xcc, 0x7b, 0x5c, 0x24, 0xb0, 0xbc, 0xd0, 0x6a,
+	0x4d, 0x89, 0x09, 0xb8, 0x07, 0xfe, 0x87, 0xad,
+	0x0a, 0xea, 0xb8, 0x42, 0xf9, 0x5e, 0xb3, 0x3e,
+	0x36, 0x4c, 0xaf, 0x75, 0x9e, 0x1c, 0xeb, 0xbd,
+	0xbc, 0xbb, 0x80, 0x40, 0xa7, 0x3a, 0x30, 0xbf,
+	0xa8, 0x44, 0xf4, 0xeb, 0x38, 0xad, 0x29, 0xba,
+	0x23, 0xed, 0x41, 0x0c, 0xea, 0xd2, 0xbb, 0x41,
+	0x18, 0xd6, 0xb9, 0xba, 0x65, 0x2b, 0xa3, 0x91,
+	0x6d, 0x1f, 0xa9, 0xf4, 0xd1, 0x25, 0x8d, 0x4d,
+	0x38, 0xff, 0x64, 0xa0, 0xec, 0xde, 0xa6, 0xb6,
+	0x79, 0xab, 0x8e, 0x33, 0x6c, 0x47, 0xde, 0xaf,
+	0x94, 0xa4, 0xa5, 0x86, 0x77, 0x55, 0x09, 0x92,
+	0x81, 0x31, 0x76, 0xc7, 0x34, 0x22, 0x89, 0x8e,
+	0x3d, 0x26, 0x26, 0xd7, 0xfc, 0x1e, 0x16, 0x72,
+	0x13, 0x33, 0x63, 0xd5, 0x22, 0xbe, 0xb8, 0x04,
+	0x34, 0x84, 0x41, 0xbb, 0x80, 0xd0, 0x9f, 0x46,
+	0x48, 0x07, 0xa7, 0xfc, 0x2b, 0x3a, 0x75, 0x55,
+	0x8c, 0xc7, 0x6a, 0xbd, 0x7e, 0x46, 0x08, 0x84,
+	0x0f, 0xd5, 0x74, 0xc0, 0x82, 0x8e, 0xaa, 0x61,
+	0x05, 0x01, 0xb2, 0x47, 0x6e, 0x20, 0x6a, 0x2d,
+	0x58, 0x70, 0x48, 0x32, 0xa7, 0x37, 0xd2, 0xb8,
+	0x82, 0x1a, 0x51, 0xb9, 0x61, 0xdd, 0xfd, 0x9d,
+	0x6b, 0x0e, 0x18, 0x97, 0xf8, 0x45, 0x5f, 0x87,
+	0x10, 0xcf, 0x34, 0x72, 0x45, 0x26, 0x49, 0x70,
+	0xe7, 0xa3, 0x78, 0xe0, 0x52, 0x89, 0x84, 0x94,
+	0x83, 0x82, 0xc2, 0x69, 0x8f, 0xe3, 0xe1, 0x3f,
+	0x60, 0x74, 0x88, 0xc4, 0xf7, 0x75, 0x2c, 0xfb,
+	0xbd, 0xb6, 0xc4, 0x7e, 0x10, 0x0a, 0x6c, 0x90,
+	0x04, 0x9e, 0xc3, 0x3f, 0x59, 0x7c, 0xce, 0x31,
+	0x18, 0x60, 0x57, 0x73, 0x46, 0x94, 0x7d, 0x06,
+	0xa0, 0x6d, 0x44, 0xec, 0xa2, 0x0a, 0x9e, 0x05,
+	0x15, 0xef, 0xca, 0x5c, 0xbf, 0x00, 0xeb, 0xf7,
+	0x3d, 0x32, 0xd4, 0xa5, 0xef, 0x49, 0x89, 0x5e,
+	0x46, 0xb0, 0xa6, 0x63, 0x5b, 0x8a, 0x73, 0xae,
+	0x6f, 0xd5, 0x9d, 0xf8, 0x4f, 0x40, 0xb5, 0xb2,
+	0x6e, 0xd3, 0xb6, 0x01, 0xa9, 0x26, 0xa2, 0x21,
+	0xcf, 0x33, 0x7a, 0x3a, 0xa4, 0x23, 0x13, 0xb0,
+	0x69, 0x6a, 0xee, 0xce, 0xd8, 0x9d, 0x01, 0x1d,
+	0x50, 0xc1, 0x30, 0x6c, 0xb1, 0xcd, 0xa0, 0xf0,
+	0xf0, 0xa2, 0x64, 0x6f, 0xbb, 0xbf, 0x5e, 0xe6,
+	0xab, 0x87, 0xb4, 0x0f, 0x4f, 0x15, 0xaf, 0xb5,
+	0x25, 0xa1, 0xb2, 0xd0, 0x80, 0x2c, 0xfb, 0xf9,
+	0xfe, 0xd2, 0x33, 0xbb, 0x76, 0xfe, 0x7c, 0xa8,
+	0x66, 0xf7, 0xe7, 0x85, 0x9f, 0x1f, 0x85, 0x57,
+	0x88, 0xe1, 0xe9, 0x63, 0xe4, 0xd8, 0x1c, 0xa1,
+	0xfb, 0xda, 0x44, 0x05, 0x2e, 0x1d, 0x3a, 0x1c,
+	0xff, 0xc8, 0x3b, 0xc0, 0xfe, 0xda, 0x22, 0x0b,
+	0x43, 0xd6, 0x88, 0x39, 0x4c, 0x4a, 0xa6, 0x69,
+	0x18, 0x93, 0x42, 0x4e, 0xb5, 0xcc, 0x66, 0x0d,
+	0x09, 0xf8, 0x1e, 0x7c, 0xd3, 0x3c, 0x99, 0x0d,
+	0x50, 0x1d, 0x62, 0xe9, 0x57, 0x06, 0xbf, 0x19,
+	0x88, 0xdd, 0xad, 0x7b, 0x4f, 0xf9, 0xc7, 0x82,
+	0x6d, 0x8d, 0xc8, 0xc4, 0xc5, 0x78, 0x17, 0x20,
+	0x15, 0xc5, 0x52, 0x41, 0xcf, 0x5b, 0xd6, 0x7f,
+	0x94, 0x02, 0x41, 0xe0, 0x40, 0x22, 0x03, 0x5e,
+	0xd1, 0x53, 0xd4, 0x86, 0xd3, 0x2c, 0x9f, 0x0f,
+	0x96, 0xe3, 0x6b, 0x9a, 0x76, 0x32, 0x06, 0x47,
+	0x4b, 0x11, 0xb3, 0xdd, 0x03, 0x65, 0xbd, 0x9b,
+	0x01, 0xda, 0x9c, 0xb9, 0x7e, 0x3f, 0x6a, 0xc4,
+	0x7b, 0xea, 0xd4, 0x3c, 0xb9, 0xfb, 0x5c, 0x6b,
+	0x64, 0x33, 0x52, 0xba, 0x64, 0x78, 0x8f, 0xa4,
+	0xaf, 0x7a, 0x61, 0x8d, 0xbc, 0xc5, 0x73, 0xe9,
+	0x6b, 0x58, 0x97, 0x4b, 0xbf, 0x63, 0x22, 0xd3,
+	0x37, 0x02, 0x54, 0xc5, 0xb9, 0x16, 0x4a, 0xf0,
+	0x19, 0xd8, 0x94, 0x57, 0xb8, 0x8a, 0xb3, 0x16,
+	0x3b, 0xd0, 0x84, 0x8e, 0x67, 0xa6, 0xa3, 0x7d,
+	0x78, 0xec, 0x00
+};
+static const u8 dec_assoc013[] __initconst = {
+	0xb1, 0x69, 0x83, 0x87, 0x30, 0xaa, 0x5d, 0xb8,
+	0x77, 0xe8, 0x21, 0xff, 0x06, 0x59, 0x35, 0xce,
+	0x75, 0xfe, 0x38, 0xef, 0xb8, 0x91, 0x43, 0x8c,
+	0xcf, 0x70, 0xdd, 0x0a, 0x68, 0xbf, 0xd4, 0xbc,
+	0x16, 0x76, 0x99, 0x36, 0x1e, 0x58, 0x79, 0x5e,
+	0xd4, 0x29, 0xf7, 0x33, 0x93, 0x48, 0xdb, 0x5f,
+	0x01, 0xae, 0x9c, 0xb6, 0xe4, 0x88, 0x6d, 0x2b,
+	0x76, 0x75, 0xe0, 0xf3, 0x74, 0xe2, 0xc9
+};
+static const u8 dec_nonce013[] __initconst = {
+	0x05, 0xa3, 0x93, 0xed, 0x30, 0xc5, 0xa2, 0x06
+};
+static const u8 dec_key013[] __initconst = {
+	0xb3, 0x35, 0x50, 0x03, 0x54, 0x2e, 0x40, 0x5e,
+	0x8f, 0x59, 0x8e, 0xc5, 0x90, 0xd5, 0x27, 0x2d,
+	0xba, 0x29, 0x2e, 0xcb, 0x1b, 0x70, 0x44, 0x1e,
+	0x65, 0x91, 0x6e, 0x2a, 0x79, 0x22, 0xda, 0x64
+};
+
+static const struct chacha20poly1305_testvec
+chacha20poly1305_dec_vectors[] __initconst = {
+	{ dec_input001, dec_output001, dec_assoc001, dec_nonce001, dec_key001,
+	  sizeof(dec_input001), sizeof(dec_assoc001), sizeof(dec_nonce001) },
+	{ dec_input002, dec_output002, dec_assoc002, dec_nonce002, dec_key002,
+	  sizeof(dec_input002), sizeof(dec_assoc002), sizeof(dec_nonce002) },
+	{ dec_input003, dec_output003, dec_assoc003, dec_nonce003, dec_key003,
+	  sizeof(dec_input003), sizeof(dec_assoc003), sizeof(dec_nonce003) },
+	{ dec_input004, dec_output004, dec_assoc004, dec_nonce004, dec_key004,
+	  sizeof(dec_input004), sizeof(dec_assoc004), sizeof(dec_nonce004) },
+	{ dec_input005, dec_output005, dec_assoc005, dec_nonce005, dec_key005,
+	  sizeof(dec_input005), sizeof(dec_assoc005), sizeof(dec_nonce005) },
+	{ dec_input006, dec_output006, dec_assoc006, dec_nonce006, dec_key006,
+	  sizeof(dec_input006), sizeof(dec_assoc006), sizeof(dec_nonce006) },
+	{ dec_input007, dec_output007, dec_assoc007, dec_nonce007, dec_key007,
+	  sizeof(dec_input007), sizeof(dec_assoc007), sizeof(dec_nonce007) },
+	{ dec_input008, dec_output008, dec_assoc008, dec_nonce008, dec_key008,
+	  sizeof(dec_input008), sizeof(dec_assoc008), sizeof(dec_nonce008) },
+	{ dec_input009, dec_output009, dec_assoc009, dec_nonce009, dec_key009,
+	  sizeof(dec_input009), sizeof(dec_assoc009), sizeof(dec_nonce009) },
+	{ dec_input010, dec_output010, dec_assoc010, dec_nonce010, dec_key010,
+	  sizeof(dec_input010), sizeof(dec_assoc010), sizeof(dec_nonce010) },
+	{ dec_input011, dec_output011, dec_assoc011, dec_nonce011, dec_key011,
+	  sizeof(dec_input011), sizeof(dec_assoc011), sizeof(dec_nonce011) },
+	{ dec_input012, dec_output012, dec_assoc012, dec_nonce012, dec_key012,
+	  sizeof(dec_input012), sizeof(dec_assoc012), sizeof(dec_nonce012) },
+	{ dec_input013, dec_output013, dec_assoc013, dec_nonce013, dec_key013,
+	  sizeof(dec_input013), sizeof(dec_assoc013), sizeof(dec_nonce013),
+	  true }
+};
+
+static const u8 xenc_input001[] __initconst = {
+	0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74,
+	0x2d, 0x44, 0x72, 0x61, 0x66, 0x74, 0x73, 0x20,
+	0x61, 0x72, 0x65, 0x20, 0x64, 0x72, 0x61, 0x66,
+	0x74, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x20, 0x76, 0x61, 0x6c, 0x69,
+	0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20,
+	0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20,
+	0x6f, 0x66, 0x20, 0x73, 0x69, 0x78, 0x20, 0x6d,
+	0x6f, 0x6e, 0x74, 0x68, 0x73, 0x20, 0x61, 0x6e,
+	0x64, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65,
+	0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
+	0x2c, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63,
+	0x65, 0x64, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x6f,
+	0x62, 0x73, 0x6f, 0x6c, 0x65, 0x74, 0x65, 0x64,
+	0x20, 0x62, 0x79, 0x20, 0x6f, 0x74, 0x68, 0x65,
+	0x72, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x20, 0x61, 0x74, 0x20, 0x61,
+	0x6e, 0x79, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e,
+	0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69,
+	0x6e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72,
+	0x69, 0x61, 0x74, 0x65, 0x20, 0x74, 0x6f, 0x20,
+	0x75, 0x73, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65,
+	0x72, 0x6e, 0x65, 0x74, 0x2d, 0x44, 0x72, 0x61,
+	0x66, 0x74, 0x73, 0x20, 0x61, 0x73, 0x20, 0x72,
+	0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+	0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61,
+	0x6c, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20,
+	0x63, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65,
+	0x6d, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20,
+	0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x20,
+	0x2f, 0xe2, 0x80, 0x9c, 0x77, 0x6f, 0x72, 0x6b,
+	0x20, 0x69, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x67,
+	0x72, 0x65, 0x73, 0x73, 0x2e, 0x2f, 0xe2, 0x80,
+	0x9d
+};
+static const u8 xenc_output001[] __initconst = {
+	0x1a, 0x6e, 0x3a, 0xd9, 0xfd, 0x41, 0x3f, 0x77,
+	0x54, 0x72, 0x0a, 0x70, 0x9a, 0xa0, 0x29, 0x92,
+	0x2e, 0xed, 0x93, 0xcf, 0x0f, 0x71, 0x88, 0x18,
+	0x7a, 0x9d, 0x2d, 0x24, 0xe0, 0xf5, 0xea, 0x3d,
+	0x55, 0x64, 0xd7, 0xad, 0x2a, 0x1a, 0x1f, 0x7e,
+	0x86, 0x6d, 0xb0, 0xce, 0x80, 0x41, 0x72, 0x86,
+	0x26, 0xee, 0x84, 0xd7, 0xef, 0x82, 0x9e, 0xe2,
+	0x60, 0x9d, 0x5a, 0xfc, 0xf0, 0xe4, 0x19, 0x85,
+	0xea, 0x09, 0xc6, 0xfb, 0xb3, 0xa9, 0x50, 0x09,
+	0xec, 0x5e, 0x11, 0x90, 0xa1, 0xc5, 0x4e, 0x49,
+	0xef, 0x50, 0xd8, 0x8f, 0xe0, 0x78, 0xd7, 0xfd,
+	0xb9, 0x3b, 0xc9, 0xf2, 0x91, 0xc8, 0x25, 0xc8,
+	0xa7, 0x63, 0x60, 0xce, 0x10, 0xcd, 0xc6, 0x7f,
+	0xf8, 0x16, 0xf8, 0xe1, 0x0a, 0xd9, 0xde, 0x79,
+	0x50, 0x33, 0xf2, 0x16, 0x0f, 0x17, 0xba, 0xb8,
+	0x5d, 0xd8, 0xdf, 0x4e, 0x51, 0xa8, 0x39, 0xd0,
+	0x85, 0xca, 0x46, 0x6a, 0x10, 0xa7, 0xa3, 0x88,
+	0xef, 0x79, 0xb9, 0xf8, 0x24, 0xf3, 0xe0, 0x71,
+	0x7b, 0x76, 0x28, 0x46, 0x3a, 0x3a, 0x1b, 0x91,
+	0xb6, 0xd4, 0x3e, 0x23, 0xe5, 0x44, 0x15, 0xbf,
+	0x60, 0x43, 0x9d, 0xa4, 0xbb, 0xd5, 0x5f, 0x89,
+	0xeb, 0xef, 0x8e, 0xfd, 0xdd, 0xb4, 0x0d, 0x46,
+	0xf0, 0x69, 0x23, 0x63, 0xae, 0x94, 0xf5, 0x5e,
+	0xa5, 0xad, 0x13, 0x1c, 0x41, 0x76, 0xe6, 0x90,
+	0xd6, 0x6d, 0xa2, 0x8f, 0x97, 0x4c, 0xa8, 0x0b,
+	0xcf, 0x8d, 0x43, 0x2b, 0x9c, 0x9b, 0xc5, 0x58,
+	0xa5, 0xb6, 0x95, 0x9a, 0xbf, 0x81, 0xc6, 0x54,
+	0xc9, 0x66, 0x0c, 0xe5, 0x4f, 0x6a, 0x53, 0xa1,
+	0xe5, 0x0c, 0xba, 0x31, 0xde, 0x34, 0x64, 0x73,
+	0x8a, 0x3b, 0xbd, 0x92, 0x01, 0xdb, 0x71, 0x69,
+	0xf3, 0x58, 0x99, 0xbc, 0xd1, 0xcb, 0x4a, 0x05,
+	0xe2, 0x58, 0x9c, 0x25, 0x17, 0xcd, 0xdc, 0x83,
+	0xb7, 0xff, 0xfb, 0x09, 0x61, 0xad, 0xbf, 0x13,
+	0x5b, 0x5e, 0xed, 0x46, 0x82, 0x6f, 0x22, 0xd8,
+	0x93, 0xa6, 0x85, 0x5b, 0x40, 0x39, 0x5c, 0xc5,
+	0x9c
+};
+static const u8 xenc_assoc001[] __initconst = {
+	0xf3, 0x33, 0x88, 0x86, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x4e, 0x91
+};
+static const u8 xenc_nonce001[] __initconst = {
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17
+};
+static const u8 xenc_key001[] __initconst = {
+	0x1c, 0x92, 0x40, 0xa5, 0xeb, 0x55, 0xd3, 0x8a,
+	0xf3, 0x33, 0x88, 0x86, 0x04, 0xf6, 0xb5, 0xf0,
+	0x47, 0x39, 0x17, 0xc1, 0x40, 0x2b, 0x80, 0x09,
+	0x9d, 0xca, 0x5c, 0xbc, 0x20, 0x70, 0x75, 0xc0
+};
+
+static const struct chacha20poly1305_testvec
+xchacha20poly1305_enc_vectors[] __initconst = {
+	{ xenc_input001, xenc_output001, xenc_assoc001, xenc_nonce001, xenc_key001,
+	  sizeof(xenc_input001), sizeof(xenc_assoc001), sizeof(xenc_nonce001) }
+};
+
+static const u8 xdec_input001[] __initconst = {
+	0x1a, 0x6e, 0x3a, 0xd9, 0xfd, 0x41, 0x3f, 0x77,
+	0x54, 0x72, 0x0a, 0x70, 0x9a, 0xa0, 0x29, 0x92,
+	0x2e, 0xed, 0x93, 0xcf, 0x0f, 0x71, 0x88, 0x18,
+	0x7a, 0x9d, 0x2d, 0x24, 0xe0, 0xf5, 0xea, 0x3d,
+	0x55, 0x64, 0xd7, 0xad, 0x2a, 0x1a, 0x1f, 0x7e,
+	0x86, 0x6d, 0xb0, 0xce, 0x80, 0x41, 0x72, 0x86,
+	0x26, 0xee, 0x84, 0xd7, 0xef, 0x82, 0x9e, 0xe2,
+	0x60, 0x9d, 0x5a, 0xfc, 0xf0, 0xe4, 0x19, 0x85,
+	0xea, 0x09, 0xc6, 0xfb, 0xb3, 0xa9, 0x50, 0x09,
+	0xec, 0x5e, 0x11, 0x90, 0xa1, 0xc5, 0x4e, 0x49,
+	0xef, 0x50, 0xd8, 0x8f, 0xe0, 0x78, 0xd7, 0xfd,
+	0xb9, 0x3b, 0xc9, 0xf2, 0x91, 0xc8, 0x25, 0xc8,
+	0xa7, 0x63, 0x60, 0xce, 0x10, 0xcd, 0xc6, 0x7f,
+	0xf8, 0x16, 0xf8, 0xe1, 0x0a, 0xd9, 0xde, 0x79,
+	0x50, 0x33, 0xf2, 0x16, 0x0f, 0x17, 0xba, 0xb8,
+	0x5d, 0xd8, 0xdf, 0x4e, 0x51, 0xa8, 0x39, 0xd0,
+	0x85, 0xca, 0x46, 0x6a, 0x10, 0xa7, 0xa3, 0x88,
+	0xef, 0x79, 0xb9, 0xf8, 0x24, 0xf3, 0xe0, 0x71,
+	0x7b, 0x76, 0x28, 0x46, 0x3a, 0x3a, 0x1b, 0x91,
+	0xb6, 0xd4, 0x3e, 0x23, 0xe5, 0x44, 0x15, 0xbf,
+	0x60, 0x43, 0x9d, 0xa4, 0xbb, 0xd5, 0x5f, 0x89,
+	0xeb, 0xef, 0x8e, 0xfd, 0xdd, 0xb4, 0x0d, 0x46,
+	0xf0, 0x69, 0x23, 0x63, 0xae, 0x94, 0xf5, 0x5e,
+	0xa5, 0xad, 0x13, 0x1c, 0x41, 0x76, 0xe6, 0x90,
+	0xd6, 0x6d, 0xa2, 0x8f, 0x97, 0x4c, 0xa8, 0x0b,
+	0xcf, 0x8d, 0x43, 0x2b, 0x9c, 0x9b, 0xc5, 0x58,
+	0xa5, 0xb6, 0x95, 0x9a, 0xbf, 0x81, 0xc6, 0x54,
+	0xc9, 0x66, 0x0c, 0xe5, 0x4f, 0x6a, 0x53, 0xa1,
+	0xe5, 0x0c, 0xba, 0x31, 0xde, 0x34, 0x64, 0x73,
+	0x8a, 0x3b, 0xbd, 0x92, 0x01, 0xdb, 0x71, 0x69,
+	0xf3, 0x58, 0x99, 0xbc, 0xd1, 0xcb, 0x4a, 0x05,
+	0xe2, 0x58, 0x9c, 0x25, 0x17, 0xcd, 0xdc, 0x83,
+	0xb7, 0xff, 0xfb, 0x09, 0x61, 0xad, 0xbf, 0x13,
+	0x5b, 0x5e, 0xed, 0x46, 0x82, 0x6f, 0x22, 0xd8,
+	0x93, 0xa6, 0x85, 0x5b, 0x40, 0x39, 0x5c, 0xc5,
+	0x9c
+};
+static const u8 xdec_output001[] __initconst = {
+	0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74,
+	0x2d, 0x44, 0x72, 0x61, 0x66, 0x74, 0x73, 0x20,
+	0x61, 0x72, 0x65, 0x20, 0x64, 0x72, 0x61, 0x66,
+	0x74, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x20, 0x76, 0x61, 0x6c, 0x69,
+	0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20,
+	0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20,
+	0x6f, 0x66, 0x20, 0x73, 0x69, 0x78, 0x20, 0x6d,
+	0x6f, 0x6e, 0x74, 0x68, 0x73, 0x20, 0x61, 0x6e,
+	0x64, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65,
+	0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
+	0x2c, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63,
+	0x65, 0x64, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x6f,
+	0x62, 0x73, 0x6f, 0x6c, 0x65, 0x74, 0x65, 0x64,
+	0x20, 0x62, 0x79, 0x20, 0x6f, 0x74, 0x68, 0x65,
+	0x72, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x20, 0x61, 0x74, 0x20, 0x61,
+	0x6e, 0x79, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e,
+	0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69,
+	0x6e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72,
+	0x69, 0x61, 0x74, 0x65, 0x20, 0x74, 0x6f, 0x20,
+	0x75, 0x73, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65,
+	0x72, 0x6e, 0x65, 0x74, 0x2d, 0x44, 0x72, 0x61,
+	0x66, 0x74, 0x73, 0x20, 0x61, 0x73, 0x20, 0x72,
+	0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+	0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61,
+	0x6c, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20,
+	0x63, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65,
+	0x6d, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20,
+	0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x20,
+	0x2f, 0xe2, 0x80, 0x9c, 0x77, 0x6f, 0x72, 0x6b,
+	0x20, 0x69, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x67,
+	0x72, 0x65, 0x73, 0x73, 0x2e, 0x2f, 0xe2, 0x80,
+	0x9d
+};
+static const u8 xdec_assoc001[] __initconst = {
+	0xf3, 0x33, 0x88, 0x86, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x4e, 0x91
+};
+static const u8 xdec_nonce001[] __initconst = {
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17
+};
+static const u8 xdec_key001[] __initconst = {
+	0x1c, 0x92, 0x40, 0xa5, 0xeb, 0x55, 0xd3, 0x8a,
+	0xf3, 0x33, 0x88, 0x86, 0x04, 0xf6, 0xb5, 0xf0,
+	0x47, 0x39, 0x17, 0xc1, 0x40, 0x2b, 0x80, 0x09,
+	0x9d, 0xca, 0x5c, 0xbc, 0x20, 0x70, 0x75, 0xc0
+};
+
+static const struct chacha20poly1305_testvec
+xchacha20poly1305_dec_vectors[] __initconst = {
+	{ xdec_input001, xdec_output001, xdec_assoc001, xdec_nonce001, xdec_key001,
+	  sizeof(xdec_input001), sizeof(xdec_assoc001), sizeof(xdec_nonce001) }
+};
+
+/* This is for the selftests-only, since it is only useful for the purpose of
+ * testing the underlying primitives and interactions.
+ */
+static void __init
+chacha20poly1305_encrypt_bignonce(u8 *dst, const u8 *src, const size_t src_len,
+				  const u8 *ad, const size_t ad_len,
+				  const u8 nonce[12],
+				  const u8 key[CHACHA20POLY1305_KEY_SIZE])
+{
+	const u8 *pad0 = page_address(ZERO_PAGE(0));
+	struct poly1305_desc_ctx poly1305_state;
+	u32 chacha20_state[CHACHA_STATE_WORDS];
+	union {
+		u8 block0[POLY1305_KEY_SIZE];
+		__le64 lens[2];
+	} b = {{ 0 }};
+	u8 bottom_row[16] = { 0 };
+	u32 le_key[8];
+	int i;
+
+	memcpy(&bottom_row[4], nonce, 12);
+	for (i = 0; i < 8; ++i)
+		le_key[i] = get_unaligned_le32(key + sizeof(le_key[i]) * i);
+	chacha_init(chacha20_state, le_key, bottom_row);
+	chacha20_crypt(chacha20_state, b.block0, b.block0, sizeof(b.block0));
+	poly1305_init(&poly1305_state, b.block0);
+	poly1305_update(&poly1305_state, ad, ad_len);
+	poly1305_update(&poly1305_state, pad0, (0x10 - ad_len) & 0xf);
+	chacha20_crypt(chacha20_state, dst, src, src_len);
+	poly1305_update(&poly1305_state, dst, src_len);
+	poly1305_update(&poly1305_state, pad0, (0x10 - src_len) & 0xf);
+	b.lens[0] = cpu_to_le64(ad_len);
+	b.lens[1] = cpu_to_le64(src_len);
+	poly1305_update(&poly1305_state, (u8 *)b.lens, sizeof(b.lens));
+	poly1305_final(&poly1305_state, dst + src_len);
+}
+
+static void __init
+chacha20poly1305_selftest_encrypt(u8 *dst, const u8 *src, const size_t src_len,
+				  const u8 *ad, const size_t ad_len,
+				  const u8 *nonce, const size_t nonce_len,
+				  const u8 key[CHACHA20POLY1305_KEY_SIZE])
+{
+	if (nonce_len == 8)
+		chacha20poly1305_encrypt(dst, src, src_len, ad, ad_len,
+					 get_unaligned_le64(nonce), key);
+	else if (nonce_len == 12)
+		chacha20poly1305_encrypt_bignonce(dst, src, src_len, ad,
+						  ad_len, nonce, key);
+	else
+		BUG();
+}
+
+static bool __init
+decryption_success(bool func_ret, bool expect_failure, int memcmp_result)
+{
+	if (expect_failure)
+		return !func_ret;
+	return func_ret && !memcmp_result;
+}
+
+bool __init chacha20poly1305_selftest(void)
+{
+	enum { MAXIMUM_TEST_BUFFER_LEN = 1UL << 12 };
+	size_t i, j, k, total_len;
+	u8 *computed_output = NULL, *input = NULL;
+	bool success = true, ret;
+	struct scatterlist sg_src[3];
+
+	computed_output = kmalloc(MAXIMUM_TEST_BUFFER_LEN, GFP_KERNEL);
+	input = kmalloc(MAXIMUM_TEST_BUFFER_LEN, GFP_KERNEL);
+	if (!computed_output || !input) {
+		pr_err("chacha20poly1305 self-test malloc: FAIL\n");
+		success = false;
+		goto out;
+	}
+
+	for (i = 0; i < ARRAY_SIZE(chacha20poly1305_enc_vectors); ++i) {
+		memset(computed_output, 0, MAXIMUM_TEST_BUFFER_LEN);
+		chacha20poly1305_selftest_encrypt(computed_output,
+					chacha20poly1305_enc_vectors[i].input,
+					chacha20poly1305_enc_vectors[i].ilen,
+					chacha20poly1305_enc_vectors[i].assoc,
+					chacha20poly1305_enc_vectors[i].alen,
+					chacha20poly1305_enc_vectors[i].nonce,
+					chacha20poly1305_enc_vectors[i].nlen,
+					chacha20poly1305_enc_vectors[i].key);
+		if (memcmp(computed_output,
+			   chacha20poly1305_enc_vectors[i].output,
+			   chacha20poly1305_enc_vectors[i].ilen +
+							POLY1305_DIGEST_SIZE)) {
+			pr_err("chacha20poly1305 encryption self-test %zu: FAIL\n",
+			       i + 1);
+			success = false;
+		}
+	}
+
+	for (i = 0; i < ARRAY_SIZE(chacha20poly1305_enc_vectors); ++i) {
+		if (chacha20poly1305_enc_vectors[i].nlen != 8)
+			continue;
+		memcpy(computed_output, chacha20poly1305_enc_vectors[i].input,
+		       chacha20poly1305_enc_vectors[i].ilen);
+		sg_init_one(sg_src, computed_output,
+			    chacha20poly1305_enc_vectors[i].ilen + POLY1305_DIGEST_SIZE);
+		ret = chacha20poly1305_encrypt_sg_inplace(sg_src,
+			chacha20poly1305_enc_vectors[i].ilen,
+			chacha20poly1305_enc_vectors[i].assoc,
+			chacha20poly1305_enc_vectors[i].alen,
+			get_unaligned_le64(chacha20poly1305_enc_vectors[i].nonce),
+			chacha20poly1305_enc_vectors[i].key);
+		if (!ret || memcmp(computed_output,
+				   chacha20poly1305_enc_vectors[i].output,
+				   chacha20poly1305_enc_vectors[i].ilen +
+							POLY1305_DIGEST_SIZE)) {
+			pr_err("chacha20poly1305 sg encryption self-test %zu: FAIL\n",
+			       i + 1);
+			success = false;
+		}
+	}
+
+	for (i = 0; i < ARRAY_SIZE(chacha20poly1305_dec_vectors); ++i) {
+		memset(computed_output, 0, MAXIMUM_TEST_BUFFER_LEN);
+		ret = chacha20poly1305_decrypt(computed_output,
+			chacha20poly1305_dec_vectors[i].input,
+			chacha20poly1305_dec_vectors[i].ilen,
+			chacha20poly1305_dec_vectors[i].assoc,
+			chacha20poly1305_dec_vectors[i].alen,
+			get_unaligned_le64(chacha20poly1305_dec_vectors[i].nonce),
+			chacha20poly1305_dec_vectors[i].key);
+		if (!decryption_success(ret,
+				chacha20poly1305_dec_vectors[i].failure,
+				memcmp(computed_output,
+				       chacha20poly1305_dec_vectors[i].output,
+				       chacha20poly1305_dec_vectors[i].ilen -
+							POLY1305_DIGEST_SIZE))) {
+			pr_err("chacha20poly1305 decryption self-test %zu: FAIL\n",
+			       i + 1);
+			success = false;
+		}
+	}
+
+	for (i = 0; i < ARRAY_SIZE(chacha20poly1305_dec_vectors); ++i) {
+		memcpy(computed_output, chacha20poly1305_dec_vectors[i].input,
+		       chacha20poly1305_dec_vectors[i].ilen);
+		sg_init_one(sg_src, computed_output,
+			    chacha20poly1305_dec_vectors[i].ilen);
+		ret = chacha20poly1305_decrypt_sg_inplace(sg_src,
+			chacha20poly1305_dec_vectors[i].ilen,
+			chacha20poly1305_dec_vectors[i].assoc,
+			chacha20poly1305_dec_vectors[i].alen,
+			get_unaligned_le64(chacha20poly1305_dec_vectors[i].nonce),
+			chacha20poly1305_dec_vectors[i].key);
+		if (!decryption_success(ret,
+			chacha20poly1305_dec_vectors[i].failure,
+			memcmp(computed_output, chacha20poly1305_dec_vectors[i].output,
+			       chacha20poly1305_dec_vectors[i].ilen -
+							POLY1305_DIGEST_SIZE))) {
+			pr_err("chacha20poly1305 sg decryption self-test %zu: FAIL\n",
+			       i + 1);
+			success = false;
+		}
+	}
+
+	for (i = 0; i < ARRAY_SIZE(xchacha20poly1305_enc_vectors); ++i) {
+		memset(computed_output, 0, MAXIMUM_TEST_BUFFER_LEN);
+		xchacha20poly1305_encrypt(computed_output,
+					xchacha20poly1305_enc_vectors[i].input,
+					xchacha20poly1305_enc_vectors[i].ilen,
+					xchacha20poly1305_enc_vectors[i].assoc,
+					xchacha20poly1305_enc_vectors[i].alen,
+					xchacha20poly1305_enc_vectors[i].nonce,
+					xchacha20poly1305_enc_vectors[i].key);
+		if (memcmp(computed_output,
+			   xchacha20poly1305_enc_vectors[i].output,
+			   xchacha20poly1305_enc_vectors[i].ilen +
+							POLY1305_DIGEST_SIZE)) {
+			pr_err("xchacha20poly1305 encryption self-test %zu: FAIL\n",
+			       i + 1);
+			success = false;
+		}
+	}
+
+	for (i = 0; i < ARRAY_SIZE(xchacha20poly1305_dec_vectors); ++i) {
+		memset(computed_output, 0, MAXIMUM_TEST_BUFFER_LEN);
+		ret = xchacha20poly1305_decrypt(computed_output,
+					xchacha20poly1305_dec_vectors[i].input,
+					xchacha20poly1305_dec_vectors[i].ilen,
+					xchacha20poly1305_dec_vectors[i].assoc,
+					xchacha20poly1305_dec_vectors[i].alen,
+					xchacha20poly1305_dec_vectors[i].nonce,
+					xchacha20poly1305_dec_vectors[i].key);
+		if (!decryption_success(ret,
+				xchacha20poly1305_dec_vectors[i].failure,
+				memcmp(computed_output,
+				       xchacha20poly1305_dec_vectors[i].output,
+				       xchacha20poly1305_dec_vectors[i].ilen -
+							POLY1305_DIGEST_SIZE))) {
+			pr_err("xchacha20poly1305 decryption self-test %zu: FAIL\n",
+			       i + 1);
+			success = false;
+		}
+	}
+
+	for (total_len = POLY1305_DIGEST_SIZE; IS_ENABLED(DEBUG_CHACHA20POLY1305_SLOW_CHUNK_TEST)
+	     && total_len <= 1 << 10; ++total_len) {
+		for (i = 0; i <= total_len; ++i) {
+			for (j = i; j <= total_len; ++j) {
+				k = 0;
+				sg_init_table(sg_src, 3);
+				if (i)
+					sg_set_buf(&sg_src[k++], input, i);
+				if (j - i)
+					sg_set_buf(&sg_src[k++], input + i, j - i);
+				if (total_len - j)
+					sg_set_buf(&sg_src[k++], input + j, total_len - j);
+				sg_init_marker(sg_src, k);
+				memset(computed_output, 0, total_len);
+				memset(input, 0, total_len);
+
+				if (!chacha20poly1305_encrypt_sg_inplace(sg_src,
+					total_len - POLY1305_DIGEST_SIZE, NULL, 0,
+					0, enc_key001))
+					goto chunkfail;
+				chacha20poly1305_encrypt(computed_output,
+					computed_output,
+					total_len - POLY1305_DIGEST_SIZE, NULL, 0, 0,
+					enc_key001);
+				if (memcmp(computed_output, input, total_len))
+					goto chunkfail;
+				if (!chacha20poly1305_decrypt(computed_output,
+					input, total_len, NULL, 0, 0, enc_key001))
+					goto chunkfail;
+				for (k = 0; k < total_len - POLY1305_DIGEST_SIZE; ++k) {
+					if (computed_output[k])
+						goto chunkfail;
+				}
+				if (!chacha20poly1305_decrypt_sg_inplace(sg_src,
+					total_len, NULL, 0, 0, enc_key001))
+					goto chunkfail;
+				for (k = 0; k < total_len - POLY1305_DIGEST_SIZE; ++k) {
+					if (input[k])
+						goto chunkfail;
+				}
+				continue;
+
+			chunkfail:
+				pr_err("chacha20poly1305 chunked self-test %zu/%zu/%zu: FAIL\n",
+				       total_len, i, j);
+				success = false;
+			}
+
+		}
+	}
+
+out:
+	kfree(computed_output);
+	kfree(input);
+	return success;
+}
diff --git a/lib/crypto/chacha20poly1305.c b/lib/crypto/chacha20poly1305.c
new file mode 100644
index 0000000..431e042
--- /dev/null
+++ b/lib/crypto/chacha20poly1305.c
@@ -0,0 +1,370 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This is an implementation of the ChaCha20Poly1305 AEAD construction.
+ *
+ * Information: https://tools.ietf.org/html/rfc8439
+ */
+
+#include <crypto/algapi.h>
+#include <crypto/chacha20poly1305.h>
+#include <crypto/chacha.h>
+#include <crypto/poly1305.h>
+#include <crypto/scatterwalk.h>
+
+#include <asm/unaligned.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/mm.h>
+#include <linux/module.h>
+
+#define CHACHA_KEY_WORDS	(CHACHA_KEY_SIZE / sizeof(u32))
+
+static void chacha_load_key(u32 *k, const u8 *in)
+{
+	k[0] = get_unaligned_le32(in);
+	k[1] = get_unaligned_le32(in + 4);
+	k[2] = get_unaligned_le32(in + 8);
+	k[3] = get_unaligned_le32(in + 12);
+	k[4] = get_unaligned_le32(in + 16);
+	k[5] = get_unaligned_le32(in + 20);
+	k[6] = get_unaligned_le32(in + 24);
+	k[7] = get_unaligned_le32(in + 28);
+}
+
+static void xchacha_init(u32 *chacha_state, const u8 *key, const u8 *nonce)
+{
+	u32 k[CHACHA_KEY_WORDS];
+	u8 iv[CHACHA_IV_SIZE];
+
+	memset(iv, 0, 8);
+	memcpy(iv + 8, nonce + 16, 8);
+
+	chacha_load_key(k, key);
+
+	/* Compute the subkey given the original key and first 128 nonce bits */
+	chacha_init(chacha_state, k, nonce);
+	hchacha_block(chacha_state, k, 20);
+
+	chacha_init(chacha_state, k, iv);
+
+	memzero_explicit(k, sizeof(k));
+	memzero_explicit(iv, sizeof(iv));
+}
+
+static void
+__chacha20poly1305_encrypt(u8 *dst, const u8 *src, const size_t src_len,
+			   const u8 *ad, const size_t ad_len, u32 *chacha_state)
+{
+	const u8 *pad0 = page_address(ZERO_PAGE(0));
+	struct poly1305_desc_ctx poly1305_state;
+	union {
+		u8 block0[POLY1305_KEY_SIZE];
+		__le64 lens[2];
+	} b;
+
+	chacha20_crypt(chacha_state, b.block0, pad0, sizeof(b.block0));
+	poly1305_init(&poly1305_state, b.block0);
+
+	poly1305_update(&poly1305_state, ad, ad_len);
+	if (ad_len & 0xf)
+		poly1305_update(&poly1305_state, pad0, 0x10 - (ad_len & 0xf));
+
+	chacha20_crypt(chacha_state, dst, src, src_len);
+
+	poly1305_update(&poly1305_state, dst, src_len);
+	if (src_len & 0xf)
+		poly1305_update(&poly1305_state, pad0, 0x10 - (src_len & 0xf));
+
+	b.lens[0] = cpu_to_le64(ad_len);
+	b.lens[1] = cpu_to_le64(src_len);
+	poly1305_update(&poly1305_state, (u8 *)b.lens, sizeof(b.lens));
+
+	poly1305_final(&poly1305_state, dst + src_len);
+
+	memzero_explicit(chacha_state, CHACHA_STATE_WORDS * sizeof(u32));
+	memzero_explicit(&b, sizeof(b));
+}
+
+void chacha20poly1305_encrypt(u8 *dst, const u8 *src, const size_t src_len,
+			      const u8 *ad, const size_t ad_len,
+			      const u64 nonce,
+			      const u8 key[CHACHA20POLY1305_KEY_SIZE])
+{
+	u32 chacha_state[CHACHA_STATE_WORDS];
+	u32 k[CHACHA_KEY_WORDS];
+	__le64 iv[2];
+
+	chacha_load_key(k, key);
+
+	iv[0] = 0;
+	iv[1] = cpu_to_le64(nonce);
+
+	chacha_init(chacha_state, k, (u8 *)iv);
+	__chacha20poly1305_encrypt(dst, src, src_len, ad, ad_len, chacha_state);
+
+	memzero_explicit(iv, sizeof(iv));
+	memzero_explicit(k, sizeof(k));
+}
+EXPORT_SYMBOL(chacha20poly1305_encrypt);
+
+void xchacha20poly1305_encrypt(u8 *dst, const u8 *src, const size_t src_len,
+			       const u8 *ad, const size_t ad_len,
+			       const u8 nonce[XCHACHA20POLY1305_NONCE_SIZE],
+			       const u8 key[CHACHA20POLY1305_KEY_SIZE])
+{
+	u32 chacha_state[CHACHA_STATE_WORDS];
+
+	xchacha_init(chacha_state, key, nonce);
+	__chacha20poly1305_encrypt(dst, src, src_len, ad, ad_len, chacha_state);
+}
+EXPORT_SYMBOL(xchacha20poly1305_encrypt);
+
+static bool
+__chacha20poly1305_decrypt(u8 *dst, const u8 *src, const size_t src_len,
+			   const u8 *ad, const size_t ad_len, u32 *chacha_state)
+{
+	const u8 *pad0 = page_address(ZERO_PAGE(0));
+	struct poly1305_desc_ctx poly1305_state;
+	size_t dst_len;
+	int ret;
+	union {
+		u8 block0[POLY1305_KEY_SIZE];
+		u8 mac[POLY1305_DIGEST_SIZE];
+		__le64 lens[2];
+	} b;
+
+	if (unlikely(src_len < POLY1305_DIGEST_SIZE))
+		return false;
+
+	chacha20_crypt(chacha_state, b.block0, pad0, sizeof(b.block0));
+	poly1305_init(&poly1305_state, b.block0);
+
+	poly1305_update(&poly1305_state, ad, ad_len);
+	if (ad_len & 0xf)
+		poly1305_update(&poly1305_state, pad0, 0x10 - (ad_len & 0xf));
+
+	dst_len = src_len - POLY1305_DIGEST_SIZE;
+	poly1305_update(&poly1305_state, src, dst_len);
+	if (dst_len & 0xf)
+		poly1305_update(&poly1305_state, pad0, 0x10 - (dst_len & 0xf));
+
+	b.lens[0] = cpu_to_le64(ad_len);
+	b.lens[1] = cpu_to_le64(dst_len);
+	poly1305_update(&poly1305_state, (u8 *)b.lens, sizeof(b.lens));
+
+	poly1305_final(&poly1305_state, b.mac);
+
+	ret = crypto_memneq(b.mac, src + dst_len, POLY1305_DIGEST_SIZE);
+	if (likely(!ret))
+		chacha20_crypt(chacha_state, dst, src, dst_len);
+
+	memzero_explicit(&b, sizeof(b));
+
+	return !ret;
+}
+
+bool chacha20poly1305_decrypt(u8 *dst, const u8 *src, const size_t src_len,
+			      const u8 *ad, const size_t ad_len,
+			      const u64 nonce,
+			      const u8 key[CHACHA20POLY1305_KEY_SIZE])
+{
+	u32 chacha_state[CHACHA_STATE_WORDS];
+	u32 k[CHACHA_KEY_WORDS];
+	__le64 iv[2];
+	bool ret;
+
+	chacha_load_key(k, key);
+
+	iv[0] = 0;
+	iv[1] = cpu_to_le64(nonce);
+
+	chacha_init(chacha_state, k, (u8 *)iv);
+	ret = __chacha20poly1305_decrypt(dst, src, src_len, ad, ad_len,
+					 chacha_state);
+
+	memzero_explicit(chacha_state, sizeof(chacha_state));
+	memzero_explicit(iv, sizeof(iv));
+	memzero_explicit(k, sizeof(k));
+	return ret;
+}
+EXPORT_SYMBOL(chacha20poly1305_decrypt);
+
+bool xchacha20poly1305_decrypt(u8 *dst, const u8 *src, const size_t src_len,
+			       const u8 *ad, const size_t ad_len,
+			       const u8 nonce[XCHACHA20POLY1305_NONCE_SIZE],
+			       const u8 key[CHACHA20POLY1305_KEY_SIZE])
+{
+	u32 chacha_state[CHACHA_STATE_WORDS];
+
+	xchacha_init(chacha_state, key, nonce);
+	return __chacha20poly1305_decrypt(dst, src, src_len, ad, ad_len,
+					  chacha_state);
+}
+EXPORT_SYMBOL(xchacha20poly1305_decrypt);
+
+static
+bool chacha20poly1305_crypt_sg_inplace(struct scatterlist *src,
+				       const size_t src_len,
+				       const u8 *ad, const size_t ad_len,
+				       const u64 nonce,
+				       const u8 key[CHACHA20POLY1305_KEY_SIZE],
+				       int encrypt)
+{
+	const u8 *pad0 = page_address(ZERO_PAGE(0));
+	struct poly1305_desc_ctx poly1305_state;
+	u32 chacha_state[CHACHA_STATE_WORDS];
+	struct sg_mapping_iter miter;
+	size_t partial = 0;
+	unsigned int flags;
+	bool ret = true;
+	int sl;
+	union {
+		struct {
+			u32 k[CHACHA_KEY_WORDS];
+			__le64 iv[2];
+		};
+		u8 block0[POLY1305_KEY_SIZE];
+		u8 chacha_stream[CHACHA_BLOCK_SIZE];
+		struct {
+			u8 mac[2][POLY1305_DIGEST_SIZE];
+		};
+		__le64 lens[2];
+	} b __aligned(16);
+
+	if (WARN_ON(src_len > INT_MAX))
+		return false;
+
+	chacha_load_key(b.k, key);
+
+	b.iv[0] = 0;
+	b.iv[1] = cpu_to_le64(nonce);
+
+	chacha_init(chacha_state, b.k, (u8 *)b.iv);
+	chacha20_crypt(chacha_state, b.block0, pad0, sizeof(b.block0));
+	poly1305_init(&poly1305_state, b.block0);
+
+	if (unlikely(ad_len)) {
+		poly1305_update(&poly1305_state, ad, ad_len);
+		if (ad_len & 0xf)
+			poly1305_update(&poly1305_state, pad0, 0x10 - (ad_len & 0xf));
+	}
+
+	flags = SG_MITER_TO_SG;
+	if (!preemptible())
+		flags |= SG_MITER_ATOMIC;
+
+	sg_miter_start(&miter, src, sg_nents(src), flags);
+
+	for (sl = src_len; sl > 0 && sg_miter_next(&miter); sl -= miter.length) {
+		u8 *addr = miter.addr;
+		size_t length = min_t(size_t, sl, miter.length);
+
+		if (!encrypt)
+			poly1305_update(&poly1305_state, addr, length);
+
+		if (unlikely(partial)) {
+			size_t l = min(length, CHACHA_BLOCK_SIZE - partial);
+
+			crypto_xor(addr, b.chacha_stream + partial, l);
+			partial = (partial + l) & (CHACHA_BLOCK_SIZE - 1);
+
+			addr += l;
+			length -= l;
+		}
+
+		if (likely(length >= CHACHA_BLOCK_SIZE || length == sl)) {
+			size_t l = length;
+
+			if (unlikely(length < sl))
+				l &= ~(CHACHA_BLOCK_SIZE - 1);
+			chacha20_crypt(chacha_state, addr, addr, l);
+			addr += l;
+			length -= l;
+		}
+
+		if (unlikely(length > 0)) {
+			chacha20_crypt(chacha_state, b.chacha_stream, pad0,
+				       CHACHA_BLOCK_SIZE);
+			crypto_xor(addr, b.chacha_stream, length);
+			partial = length;
+		}
+
+		if (encrypt)
+			poly1305_update(&poly1305_state, miter.addr,
+					min_t(size_t, sl, miter.length));
+	}
+
+	if (src_len & 0xf)
+		poly1305_update(&poly1305_state, pad0, 0x10 - (src_len & 0xf));
+
+	b.lens[0] = cpu_to_le64(ad_len);
+	b.lens[1] = cpu_to_le64(src_len);
+	poly1305_update(&poly1305_state, (u8 *)b.lens, sizeof(b.lens));
+
+	if (likely(sl <= -POLY1305_DIGEST_SIZE)) {
+		if (encrypt) {
+			poly1305_final(&poly1305_state,
+				       miter.addr + miter.length + sl);
+			ret = true;
+		} else {
+			poly1305_final(&poly1305_state, b.mac[0]);
+			ret = !crypto_memneq(b.mac[0],
+					     miter.addr + miter.length + sl,
+					     POLY1305_DIGEST_SIZE);
+		}
+	}
+
+	sg_miter_stop(&miter);
+
+	if (unlikely(sl > -POLY1305_DIGEST_SIZE)) {
+		poly1305_final(&poly1305_state, b.mac[1]);
+		scatterwalk_map_and_copy(b.mac[encrypt], src, src_len,
+					 sizeof(b.mac[1]), encrypt);
+		ret = encrypt ||
+		      !crypto_memneq(b.mac[0], b.mac[1], POLY1305_DIGEST_SIZE);
+	}
+
+	memzero_explicit(chacha_state, sizeof(chacha_state));
+	memzero_explicit(&b, sizeof(b));
+
+	return ret;
+}
+
+bool chacha20poly1305_encrypt_sg_inplace(struct scatterlist *src, size_t src_len,
+					 const u8 *ad, const size_t ad_len,
+					 const u64 nonce,
+					 const u8 key[CHACHA20POLY1305_KEY_SIZE])
+{
+	return chacha20poly1305_crypt_sg_inplace(src, src_len, ad, ad_len,
+						 nonce, key, 1);
+}
+EXPORT_SYMBOL(chacha20poly1305_encrypt_sg_inplace);
+
+bool chacha20poly1305_decrypt_sg_inplace(struct scatterlist *src, size_t src_len,
+					 const u8 *ad, const size_t ad_len,
+					 const u64 nonce,
+					 const u8 key[CHACHA20POLY1305_KEY_SIZE])
+{
+	if (unlikely(src_len < POLY1305_DIGEST_SIZE))
+		return false;
+
+	return chacha20poly1305_crypt_sg_inplace(src,
+						 src_len - POLY1305_DIGEST_SIZE,
+						 ad, ad_len, nonce, key, 0);
+}
+EXPORT_SYMBOL(chacha20poly1305_decrypt_sg_inplace);
+
+static int __init mod_init(void)
+{
+	if (!IS_ENABLED(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS) &&
+	    WARN_ON(!chacha20poly1305_selftest()))
+		return -ENODEV;
+	return 0;
+}
+
+module_init(mod_init);
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("ChaCha20Poly1305 AEAD construction");
+MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
diff --git a/lib/crypto/curve25519-fiat32.c b/lib/crypto/curve25519-fiat32.c
new file mode 100644
index 0000000..2fde0ec
--- /dev/null
+++ b/lib/crypto/curve25519-fiat32.c
@@ -0,0 +1,864 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2016 The fiat-crypto Authors.
+ * Copyright (C) 2018-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This is a machine-generated formally verified implementation of Curve25519
+ * ECDH from: <https://github.com/mit-plv/fiat-crypto>. Though originally
+ * machine generated, it has been tweaked to be suitable for use in the kernel.
+ * It is optimized for 32-bit machines and machines that cannot work efficiently
+ * with 128-bit integer types.
+ */
+
+#include <asm/unaligned.h>
+#include <crypto/curve25519.h>
+#include <linux/string.h>
+
+/* fe means field element. Here the field is \Z/(2^255-19). An element t,
+ * entries t[0]...t[9], represents the integer t[0]+2^26 t[1]+2^51 t[2]+2^77
+ * t[3]+2^102 t[4]+...+2^230 t[9].
+ * fe limbs are bounded by 1.125*2^26,1.125*2^25,1.125*2^26,1.125*2^25,etc.
+ * Multiplication and carrying produce fe from fe_loose.
+ */
+typedef struct fe { u32 v[10]; } fe;
+
+/* fe_loose limbs are bounded by 3.375*2^26,3.375*2^25,3.375*2^26,3.375*2^25,etc
+ * Addition and subtraction produce fe_loose from (fe, fe).
+ */
+typedef struct fe_loose { u32 v[10]; } fe_loose;
+
+static __always_inline void fe_frombytes_impl(u32 h[10], const u8 *s)
+{
+	/* Ignores top bit of s. */
+	u32 a0 = get_unaligned_le32(s);
+	u32 a1 = get_unaligned_le32(s+4);
+	u32 a2 = get_unaligned_le32(s+8);
+	u32 a3 = get_unaligned_le32(s+12);
+	u32 a4 = get_unaligned_le32(s+16);
+	u32 a5 = get_unaligned_le32(s+20);
+	u32 a6 = get_unaligned_le32(s+24);
+	u32 a7 = get_unaligned_le32(s+28);
+	h[0] = a0&((1<<26)-1);                    /* 26 used, 32-26 left.   26 */
+	h[1] = (a0>>26) | ((a1&((1<<19)-1))<< 6); /* (32-26) + 19 =  6+19 = 25 */
+	h[2] = (a1>>19) | ((a2&((1<<13)-1))<<13); /* (32-19) + 13 = 13+13 = 26 */
+	h[3] = (a2>>13) | ((a3&((1<< 6)-1))<<19); /* (32-13) +  6 = 19+ 6 = 25 */
+	h[4] = (a3>> 6);                          /* (32- 6)              = 26 */
+	h[5] = a4&((1<<25)-1);                    /*                        25 */
+	h[6] = (a4>>25) | ((a5&((1<<19)-1))<< 7); /* (32-25) + 19 =  7+19 = 26 */
+	h[7] = (a5>>19) | ((a6&((1<<12)-1))<<13); /* (32-19) + 12 = 13+12 = 25 */
+	h[8] = (a6>>12) | ((a7&((1<< 6)-1))<<20); /* (32-12) +  6 = 20+ 6 = 26 */
+	h[9] = (a7>> 6)&((1<<25)-1); /*                                     25 */
+}
+
+static __always_inline void fe_frombytes(fe *h, const u8 *s)
+{
+	fe_frombytes_impl(h->v, s);
+}
+
+static __always_inline u8 /*bool*/
+addcarryx_u25(u8 /*bool*/ c, u32 a, u32 b, u32 *low)
+{
+	/* This function extracts 25 bits of result and 1 bit of carry
+	 * (26 total), so a 32-bit intermediate is sufficient.
+	 */
+	u32 x = a + b + c;
+	*low = x & ((1 << 25) - 1);
+	return (x >> 25) & 1;
+}
+
+static __always_inline u8 /*bool*/
+addcarryx_u26(u8 /*bool*/ c, u32 a, u32 b, u32 *low)
+{
+	/* This function extracts 26 bits of result and 1 bit of carry
+	 * (27 total), so a 32-bit intermediate is sufficient.
+	 */
+	u32 x = a + b + c;
+	*low = x & ((1 << 26) - 1);
+	return (x >> 26) & 1;
+}
+
+static __always_inline u8 /*bool*/
+subborrow_u25(u8 /*bool*/ c, u32 a, u32 b, u32 *low)
+{
+	/* This function extracts 25 bits of result and 1 bit of borrow
+	 * (26 total), so a 32-bit intermediate is sufficient.
+	 */
+	u32 x = a - b - c;
+	*low = x & ((1 << 25) - 1);
+	return x >> 31;
+}
+
+static __always_inline u8 /*bool*/
+subborrow_u26(u8 /*bool*/ c, u32 a, u32 b, u32 *low)
+{
+	/* This function extracts 26 bits of result and 1 bit of borrow
+	 *(27 total), so a 32-bit intermediate is sufficient.
+	 */
+	u32 x = a - b - c;
+	*low = x & ((1 << 26) - 1);
+	return x >> 31;
+}
+
+static __always_inline u32 cmovznz32(u32 t, u32 z, u32 nz)
+{
+	t = -!!t; /* all set if nonzero, 0 if 0 */
+	return (t&nz) | ((~t)&z);
+}
+
+static __always_inline void fe_freeze(u32 out[10], const u32 in1[10])
+{
+	{ const u32 x17 = in1[9];
+	{ const u32 x18 = in1[8];
+	{ const u32 x16 = in1[7];
+	{ const u32 x14 = in1[6];
+	{ const u32 x12 = in1[5];
+	{ const u32 x10 = in1[4];
+	{ const u32 x8 = in1[3];
+	{ const u32 x6 = in1[2];
+	{ const u32 x4 = in1[1];
+	{ const u32 x2 = in1[0];
+	{ u32 x20; u8/*bool*/ x21 = subborrow_u26(0x0, x2, 0x3ffffed, &x20);
+	{ u32 x23; u8/*bool*/ x24 = subborrow_u25(x21, x4, 0x1ffffff, &x23);
+	{ u32 x26; u8/*bool*/ x27 = subborrow_u26(x24, x6, 0x3ffffff, &x26);
+	{ u32 x29; u8/*bool*/ x30 = subborrow_u25(x27, x8, 0x1ffffff, &x29);
+	{ u32 x32; u8/*bool*/ x33 = subborrow_u26(x30, x10, 0x3ffffff, &x32);
+	{ u32 x35; u8/*bool*/ x36 = subborrow_u25(x33, x12, 0x1ffffff, &x35);
+	{ u32 x38; u8/*bool*/ x39 = subborrow_u26(x36, x14, 0x3ffffff, &x38);
+	{ u32 x41; u8/*bool*/ x42 = subborrow_u25(x39, x16, 0x1ffffff, &x41);
+	{ u32 x44; u8/*bool*/ x45 = subborrow_u26(x42, x18, 0x3ffffff, &x44);
+	{ u32 x47; u8/*bool*/ x48 = subborrow_u25(x45, x17, 0x1ffffff, &x47);
+	{ u32 x49 = cmovznz32(x48, 0x0, 0xffffffff);
+	{ u32 x50 = (x49 & 0x3ffffed);
+	{ u32 x52; u8/*bool*/ x53 = addcarryx_u26(0x0, x20, x50, &x52);
+	{ u32 x54 = (x49 & 0x1ffffff);
+	{ u32 x56; u8/*bool*/ x57 = addcarryx_u25(x53, x23, x54, &x56);
+	{ u32 x58 = (x49 & 0x3ffffff);
+	{ u32 x60; u8/*bool*/ x61 = addcarryx_u26(x57, x26, x58, &x60);
+	{ u32 x62 = (x49 & 0x1ffffff);
+	{ u32 x64; u8/*bool*/ x65 = addcarryx_u25(x61, x29, x62, &x64);
+	{ u32 x66 = (x49 & 0x3ffffff);
+	{ u32 x68; u8/*bool*/ x69 = addcarryx_u26(x65, x32, x66, &x68);
+	{ u32 x70 = (x49 & 0x1ffffff);
+	{ u32 x72; u8/*bool*/ x73 = addcarryx_u25(x69, x35, x70, &x72);
+	{ u32 x74 = (x49 & 0x3ffffff);
+	{ u32 x76; u8/*bool*/ x77 = addcarryx_u26(x73, x38, x74, &x76);
+	{ u32 x78 = (x49 & 0x1ffffff);
+	{ u32 x80; u8/*bool*/ x81 = addcarryx_u25(x77, x41, x78, &x80);
+	{ u32 x82 = (x49 & 0x3ffffff);
+	{ u32 x84; u8/*bool*/ x85 = addcarryx_u26(x81, x44, x82, &x84);
+	{ u32 x86 = (x49 & 0x1ffffff);
+	{ u32 x88; addcarryx_u25(x85, x47, x86, &x88);
+	out[0] = x52;
+	out[1] = x56;
+	out[2] = x60;
+	out[3] = x64;
+	out[4] = x68;
+	out[5] = x72;
+	out[6] = x76;
+	out[7] = x80;
+	out[8] = x84;
+	out[9] = x88;
+	}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
+
+static __always_inline void fe_tobytes(u8 s[32], const fe *f)
+{
+	u32 h[10];
+	fe_freeze(h, f->v);
+	s[0] = h[0] >> 0;
+	s[1] = h[0] >> 8;
+	s[2] = h[0] >> 16;
+	s[3] = (h[0] >> 24) | (h[1] << 2);
+	s[4] = h[1] >> 6;
+	s[5] = h[1] >> 14;
+	s[6] = (h[1] >> 22) | (h[2] << 3);
+	s[7] = h[2] >> 5;
+	s[8] = h[2] >> 13;
+	s[9] = (h[2] >> 21) | (h[3] << 5);
+	s[10] = h[3] >> 3;
+	s[11] = h[3] >> 11;
+	s[12] = (h[3] >> 19) | (h[4] << 6);
+	s[13] = h[4] >> 2;
+	s[14] = h[4] >> 10;
+	s[15] = h[4] >> 18;
+	s[16] = h[5] >> 0;
+	s[17] = h[5] >> 8;
+	s[18] = h[5] >> 16;
+	s[19] = (h[5] >> 24) | (h[6] << 1);
+	s[20] = h[6] >> 7;
+	s[21] = h[6] >> 15;
+	s[22] = (h[6] >> 23) | (h[7] << 3);
+	s[23] = h[7] >> 5;
+	s[24] = h[7] >> 13;
+	s[25] = (h[7] >> 21) | (h[8] << 4);
+	s[26] = h[8] >> 4;
+	s[27] = h[8] >> 12;
+	s[28] = (h[8] >> 20) | (h[9] << 6);
+	s[29] = h[9] >> 2;
+	s[30] = h[9] >> 10;
+	s[31] = h[9] >> 18;
+}
+
+/* h = f */
+static __always_inline void fe_copy(fe *h, const fe *f)
+{
+	memmove(h, f, sizeof(u32) * 10);
+}
+
+static __always_inline void fe_copy_lt(fe_loose *h, const fe *f)
+{
+	memmove(h, f, sizeof(u32) * 10);
+}
+
+/* h = 0 */
+static __always_inline void fe_0(fe *h)
+{
+	memset(h, 0, sizeof(u32) * 10);
+}
+
+/* h = 1 */
+static __always_inline void fe_1(fe *h)
+{
+	memset(h, 0, sizeof(u32) * 10);
+	h->v[0] = 1;
+}
+
+static noinline void fe_add_impl(u32 out[10], const u32 in1[10], const u32 in2[10])
+{
+	{ const u32 x20 = in1[9];
+	{ const u32 x21 = in1[8];
+	{ const u32 x19 = in1[7];
+	{ const u32 x17 = in1[6];
+	{ const u32 x15 = in1[5];
+	{ const u32 x13 = in1[4];
+	{ const u32 x11 = in1[3];
+	{ const u32 x9 = in1[2];
+	{ const u32 x7 = in1[1];
+	{ const u32 x5 = in1[0];
+	{ const u32 x38 = in2[9];
+	{ const u32 x39 = in2[8];
+	{ const u32 x37 = in2[7];
+	{ const u32 x35 = in2[6];
+	{ const u32 x33 = in2[5];
+	{ const u32 x31 = in2[4];
+	{ const u32 x29 = in2[3];
+	{ const u32 x27 = in2[2];
+	{ const u32 x25 = in2[1];
+	{ const u32 x23 = in2[0];
+	out[0] = (x5 + x23);
+	out[1] = (x7 + x25);
+	out[2] = (x9 + x27);
+	out[3] = (x11 + x29);
+	out[4] = (x13 + x31);
+	out[5] = (x15 + x33);
+	out[6] = (x17 + x35);
+	out[7] = (x19 + x37);
+	out[8] = (x21 + x39);
+	out[9] = (x20 + x38);
+	}}}}}}}}}}}}}}}}}}}}
+}
+
+/* h = f + g
+ * Can overlap h with f or g.
+ */
+static __always_inline void fe_add(fe_loose *h, const fe *f, const fe *g)
+{
+	fe_add_impl(h->v, f->v, g->v);
+}
+
+static noinline void fe_sub_impl(u32 out[10], const u32 in1[10], const u32 in2[10])
+{
+	{ const u32 x20 = in1[9];
+	{ const u32 x21 = in1[8];
+	{ const u32 x19 = in1[7];
+	{ const u32 x17 = in1[6];
+	{ const u32 x15 = in1[5];
+	{ const u32 x13 = in1[4];
+	{ const u32 x11 = in1[3];
+	{ const u32 x9 = in1[2];
+	{ const u32 x7 = in1[1];
+	{ const u32 x5 = in1[0];
+	{ const u32 x38 = in2[9];
+	{ const u32 x39 = in2[8];
+	{ const u32 x37 = in2[7];
+	{ const u32 x35 = in2[6];
+	{ const u32 x33 = in2[5];
+	{ const u32 x31 = in2[4];
+	{ const u32 x29 = in2[3];
+	{ const u32 x27 = in2[2];
+	{ const u32 x25 = in2[1];
+	{ const u32 x23 = in2[0];
+	out[0] = ((0x7ffffda + x5) - x23);
+	out[1] = ((0x3fffffe + x7) - x25);
+	out[2] = ((0x7fffffe + x9) - x27);
+	out[3] = ((0x3fffffe + x11) - x29);
+	out[4] = ((0x7fffffe + x13) - x31);
+	out[5] = ((0x3fffffe + x15) - x33);
+	out[6] = ((0x7fffffe + x17) - x35);
+	out[7] = ((0x3fffffe + x19) - x37);
+	out[8] = ((0x7fffffe + x21) - x39);
+	out[9] = ((0x3fffffe + x20) - x38);
+	}}}}}}}}}}}}}}}}}}}}
+}
+
+/* h = f - g
+ * Can overlap h with f or g.
+ */
+static __always_inline void fe_sub(fe_loose *h, const fe *f, const fe *g)
+{
+	fe_sub_impl(h->v, f->v, g->v);
+}
+
+static noinline void fe_mul_impl(u32 out[10], const u32 in1[10], const u32 in2[10])
+{
+	{ const u32 x20 = in1[9];
+	{ const u32 x21 = in1[8];
+	{ const u32 x19 = in1[7];
+	{ const u32 x17 = in1[6];
+	{ const u32 x15 = in1[5];
+	{ const u32 x13 = in1[4];
+	{ const u32 x11 = in1[3];
+	{ const u32 x9 = in1[2];
+	{ const u32 x7 = in1[1];
+	{ const u32 x5 = in1[0];
+	{ const u32 x38 = in2[9];
+	{ const u32 x39 = in2[8];
+	{ const u32 x37 = in2[7];
+	{ const u32 x35 = in2[6];
+	{ const u32 x33 = in2[5];
+	{ const u32 x31 = in2[4];
+	{ const u32 x29 = in2[3];
+	{ const u32 x27 = in2[2];
+	{ const u32 x25 = in2[1];
+	{ const u32 x23 = in2[0];
+	{ u64 x40 = ((u64)x23 * x5);
+	{ u64 x41 = (((u64)x23 * x7) + ((u64)x25 * x5));
+	{ u64 x42 = ((((u64)(0x2 * x25) * x7) + ((u64)x23 * x9)) + ((u64)x27 * x5));
+	{ u64 x43 = (((((u64)x25 * x9) + ((u64)x27 * x7)) + ((u64)x23 * x11)) + ((u64)x29 * x5));
+	{ u64 x44 = (((((u64)x27 * x9) + (0x2 * (((u64)x25 * x11) + ((u64)x29 * x7)))) + ((u64)x23 * x13)) + ((u64)x31 * x5));
+	{ u64 x45 = (((((((u64)x27 * x11) + ((u64)x29 * x9)) + ((u64)x25 * x13)) + ((u64)x31 * x7)) + ((u64)x23 * x15)) + ((u64)x33 * x5));
+	{ u64 x46 = (((((0x2 * ((((u64)x29 * x11) + ((u64)x25 * x15)) + ((u64)x33 * x7))) + ((u64)x27 * x13)) + ((u64)x31 * x9)) + ((u64)x23 * x17)) + ((u64)x35 * x5));
+	{ u64 x47 = (((((((((u64)x29 * x13) + ((u64)x31 * x11)) + ((u64)x27 * x15)) + ((u64)x33 * x9)) + ((u64)x25 * x17)) + ((u64)x35 * x7)) + ((u64)x23 * x19)) + ((u64)x37 * x5));
+	{ u64 x48 = (((((((u64)x31 * x13) + (0x2 * (((((u64)x29 * x15) + ((u64)x33 * x11)) + ((u64)x25 * x19)) + ((u64)x37 * x7)))) + ((u64)x27 * x17)) + ((u64)x35 * x9)) + ((u64)x23 * x21)) + ((u64)x39 * x5));
+	{ u64 x49 = (((((((((((u64)x31 * x15) + ((u64)x33 * x13)) + ((u64)x29 * x17)) + ((u64)x35 * x11)) + ((u64)x27 * x19)) + ((u64)x37 * x9)) + ((u64)x25 * x21)) + ((u64)x39 * x7)) + ((u64)x23 * x20)) + ((u64)x38 * x5));
+	{ u64 x50 = (((((0x2 * ((((((u64)x33 * x15) + ((u64)x29 * x19)) + ((u64)x37 * x11)) + ((u64)x25 * x20)) + ((u64)x38 * x7))) + ((u64)x31 * x17)) + ((u64)x35 * x13)) + ((u64)x27 * x21)) + ((u64)x39 * x9));
+	{ u64 x51 = (((((((((u64)x33 * x17) + ((u64)x35 * x15)) + ((u64)x31 * x19)) + ((u64)x37 * x13)) + ((u64)x29 * x21)) + ((u64)x39 * x11)) + ((u64)x27 * x20)) + ((u64)x38 * x9));
+	{ u64 x52 = (((((u64)x35 * x17) + (0x2 * (((((u64)x33 * x19) + ((u64)x37 * x15)) + ((u64)x29 * x20)) + ((u64)x38 * x11)))) + ((u64)x31 * x21)) + ((u64)x39 * x13));
+	{ u64 x53 = (((((((u64)x35 * x19) + ((u64)x37 * x17)) + ((u64)x33 * x21)) + ((u64)x39 * x15)) + ((u64)x31 * x20)) + ((u64)x38 * x13));
+	{ u64 x54 = (((0x2 * ((((u64)x37 * x19) + ((u64)x33 * x20)) + ((u64)x38 * x15))) + ((u64)x35 * x21)) + ((u64)x39 * x17));
+	{ u64 x55 = (((((u64)x37 * x21) + ((u64)x39 * x19)) + ((u64)x35 * x20)) + ((u64)x38 * x17));
+	{ u64 x56 = (((u64)x39 * x21) + (0x2 * (((u64)x37 * x20) + ((u64)x38 * x19))));
+	{ u64 x57 = (((u64)x39 * x20) + ((u64)x38 * x21));
+	{ u64 x58 = ((u64)(0x2 * x38) * x20);
+	{ u64 x59 = (x48 + (x58 << 0x4));
+	{ u64 x60 = (x59 + (x58 << 0x1));
+	{ u64 x61 = (x60 + x58);
+	{ u64 x62 = (x47 + (x57 << 0x4));
+	{ u64 x63 = (x62 + (x57 << 0x1));
+	{ u64 x64 = (x63 + x57);
+	{ u64 x65 = (x46 + (x56 << 0x4));
+	{ u64 x66 = (x65 + (x56 << 0x1));
+	{ u64 x67 = (x66 + x56);
+	{ u64 x68 = (x45 + (x55 << 0x4));
+	{ u64 x69 = (x68 + (x55 << 0x1));
+	{ u64 x70 = (x69 + x55);
+	{ u64 x71 = (x44 + (x54 << 0x4));
+	{ u64 x72 = (x71 + (x54 << 0x1));
+	{ u64 x73 = (x72 + x54);
+	{ u64 x74 = (x43 + (x53 << 0x4));
+	{ u64 x75 = (x74 + (x53 << 0x1));
+	{ u64 x76 = (x75 + x53);
+	{ u64 x77 = (x42 + (x52 << 0x4));
+	{ u64 x78 = (x77 + (x52 << 0x1));
+	{ u64 x79 = (x78 + x52);
+	{ u64 x80 = (x41 + (x51 << 0x4));
+	{ u64 x81 = (x80 + (x51 << 0x1));
+	{ u64 x82 = (x81 + x51);
+	{ u64 x83 = (x40 + (x50 << 0x4));
+	{ u64 x84 = (x83 + (x50 << 0x1));
+	{ u64 x85 = (x84 + x50);
+	{ u64 x86 = (x85 >> 0x1a);
+	{ u32 x87 = ((u32)x85 & 0x3ffffff);
+	{ u64 x88 = (x86 + x82);
+	{ u64 x89 = (x88 >> 0x19);
+	{ u32 x90 = ((u32)x88 & 0x1ffffff);
+	{ u64 x91 = (x89 + x79);
+	{ u64 x92 = (x91 >> 0x1a);
+	{ u32 x93 = ((u32)x91 & 0x3ffffff);
+	{ u64 x94 = (x92 + x76);
+	{ u64 x95 = (x94 >> 0x19);
+	{ u32 x96 = ((u32)x94 & 0x1ffffff);
+	{ u64 x97 = (x95 + x73);
+	{ u64 x98 = (x97 >> 0x1a);
+	{ u32 x99 = ((u32)x97 & 0x3ffffff);
+	{ u64 x100 = (x98 + x70);
+	{ u64 x101 = (x100 >> 0x19);
+	{ u32 x102 = ((u32)x100 & 0x1ffffff);
+	{ u64 x103 = (x101 + x67);
+	{ u64 x104 = (x103 >> 0x1a);
+	{ u32 x105 = ((u32)x103 & 0x3ffffff);
+	{ u64 x106 = (x104 + x64);
+	{ u64 x107 = (x106 >> 0x19);
+	{ u32 x108 = ((u32)x106 & 0x1ffffff);
+	{ u64 x109 = (x107 + x61);
+	{ u64 x110 = (x109 >> 0x1a);
+	{ u32 x111 = ((u32)x109 & 0x3ffffff);
+	{ u64 x112 = (x110 + x49);
+	{ u64 x113 = (x112 >> 0x19);
+	{ u32 x114 = ((u32)x112 & 0x1ffffff);
+	{ u64 x115 = (x87 + (0x13 * x113));
+	{ u32 x116 = (u32) (x115 >> 0x1a);
+	{ u32 x117 = ((u32)x115 & 0x3ffffff);
+	{ u32 x118 = (x116 + x90);
+	{ u32 x119 = (x118 >> 0x19);
+	{ u32 x120 = (x118 & 0x1ffffff);
+	out[0] = x117;
+	out[1] = x120;
+	out[2] = (x119 + x93);
+	out[3] = x96;
+	out[4] = x99;
+	out[5] = x102;
+	out[6] = x105;
+	out[7] = x108;
+	out[8] = x111;
+	out[9] = x114;
+	}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
+
+static __always_inline void fe_mul_ttt(fe *h, const fe *f, const fe *g)
+{
+	fe_mul_impl(h->v, f->v, g->v);
+}
+
+static __always_inline void fe_mul_tlt(fe *h, const fe_loose *f, const fe *g)
+{
+	fe_mul_impl(h->v, f->v, g->v);
+}
+
+static __always_inline void
+fe_mul_tll(fe *h, const fe_loose *f, const fe_loose *g)
+{
+	fe_mul_impl(h->v, f->v, g->v);
+}
+
+static noinline void fe_sqr_impl(u32 out[10], const u32 in1[10])
+{
+	{ const u32 x17 = in1[9];
+	{ const u32 x18 = in1[8];
+	{ const u32 x16 = in1[7];
+	{ const u32 x14 = in1[6];
+	{ const u32 x12 = in1[5];
+	{ const u32 x10 = in1[4];
+	{ const u32 x8 = in1[3];
+	{ const u32 x6 = in1[2];
+	{ const u32 x4 = in1[1];
+	{ const u32 x2 = in1[0];
+	{ u64 x19 = ((u64)x2 * x2);
+	{ u64 x20 = ((u64)(0x2 * x2) * x4);
+	{ u64 x21 = (0x2 * (((u64)x4 * x4) + ((u64)x2 * x6)));
+	{ u64 x22 = (0x2 * (((u64)x4 * x6) + ((u64)x2 * x8)));
+	{ u64 x23 = ((((u64)x6 * x6) + ((u64)(0x4 * x4) * x8)) + ((u64)(0x2 * x2) * x10));
+	{ u64 x24 = (0x2 * ((((u64)x6 * x8) + ((u64)x4 * x10)) + ((u64)x2 * x12)));
+	{ u64 x25 = (0x2 * (((((u64)x8 * x8) + ((u64)x6 * x10)) + ((u64)x2 * x14)) + ((u64)(0x2 * x4) * x12)));
+	{ u64 x26 = (0x2 * (((((u64)x8 * x10) + ((u64)x6 * x12)) + ((u64)x4 * x14)) + ((u64)x2 * x16)));
+	{ u64 x27 = (((u64)x10 * x10) + (0x2 * ((((u64)x6 * x14) + ((u64)x2 * x18)) + (0x2 * (((u64)x4 * x16) + ((u64)x8 * x12))))));
+	{ u64 x28 = (0x2 * ((((((u64)x10 * x12) + ((u64)x8 * x14)) + ((u64)x6 * x16)) + ((u64)x4 * x18)) + ((u64)x2 * x17)));
+	{ u64 x29 = (0x2 * (((((u64)x12 * x12) + ((u64)x10 * x14)) + ((u64)x6 * x18)) + (0x2 * (((u64)x8 * x16) + ((u64)x4 * x17)))));
+	{ u64 x30 = (0x2 * (((((u64)x12 * x14) + ((u64)x10 * x16)) + ((u64)x8 * x18)) + ((u64)x6 * x17)));
+	{ u64 x31 = (((u64)x14 * x14) + (0x2 * (((u64)x10 * x18) + (0x2 * (((u64)x12 * x16) + ((u64)x8 * x17))))));
+	{ u64 x32 = (0x2 * ((((u64)x14 * x16) + ((u64)x12 * x18)) + ((u64)x10 * x17)));
+	{ u64 x33 = (0x2 * ((((u64)x16 * x16) + ((u64)x14 * x18)) + ((u64)(0x2 * x12) * x17)));
+	{ u64 x34 = (0x2 * (((u64)x16 * x18) + ((u64)x14 * x17)));
+	{ u64 x35 = (((u64)x18 * x18) + ((u64)(0x4 * x16) * x17));
+	{ u64 x36 = ((u64)(0x2 * x18) * x17);
+	{ u64 x37 = ((u64)(0x2 * x17) * x17);
+	{ u64 x38 = (x27 + (x37 << 0x4));
+	{ u64 x39 = (x38 + (x37 << 0x1));
+	{ u64 x40 = (x39 + x37);
+	{ u64 x41 = (x26 + (x36 << 0x4));
+	{ u64 x42 = (x41 + (x36 << 0x1));
+	{ u64 x43 = (x42 + x36);
+	{ u64 x44 = (x25 + (x35 << 0x4));
+	{ u64 x45 = (x44 + (x35 << 0x1));
+	{ u64 x46 = (x45 + x35);
+	{ u64 x47 = (x24 + (x34 << 0x4));
+	{ u64 x48 = (x47 + (x34 << 0x1));
+	{ u64 x49 = (x48 + x34);
+	{ u64 x50 = (x23 + (x33 << 0x4));
+	{ u64 x51 = (x50 + (x33 << 0x1));
+	{ u64 x52 = (x51 + x33);
+	{ u64 x53 = (x22 + (x32 << 0x4));
+	{ u64 x54 = (x53 + (x32 << 0x1));
+	{ u64 x55 = (x54 + x32);
+	{ u64 x56 = (x21 + (x31 << 0x4));
+	{ u64 x57 = (x56 + (x31 << 0x1));
+	{ u64 x58 = (x57 + x31);
+	{ u64 x59 = (x20 + (x30 << 0x4));
+	{ u64 x60 = (x59 + (x30 << 0x1));
+	{ u64 x61 = (x60 + x30);
+	{ u64 x62 = (x19 + (x29 << 0x4));
+	{ u64 x63 = (x62 + (x29 << 0x1));
+	{ u64 x64 = (x63 + x29);
+	{ u64 x65 = (x64 >> 0x1a);
+	{ u32 x66 = ((u32)x64 & 0x3ffffff);
+	{ u64 x67 = (x65 + x61);
+	{ u64 x68 = (x67 >> 0x19);
+	{ u32 x69 = ((u32)x67 & 0x1ffffff);
+	{ u64 x70 = (x68 + x58);
+	{ u64 x71 = (x70 >> 0x1a);
+	{ u32 x72 = ((u32)x70 & 0x3ffffff);
+	{ u64 x73 = (x71 + x55);
+	{ u64 x74 = (x73 >> 0x19);
+	{ u32 x75 = ((u32)x73 & 0x1ffffff);
+	{ u64 x76 = (x74 + x52);
+	{ u64 x77 = (x76 >> 0x1a);
+	{ u32 x78 = ((u32)x76 & 0x3ffffff);
+	{ u64 x79 = (x77 + x49);
+	{ u64 x80 = (x79 >> 0x19);
+	{ u32 x81 = ((u32)x79 & 0x1ffffff);
+	{ u64 x82 = (x80 + x46);
+	{ u64 x83 = (x82 >> 0x1a);
+	{ u32 x84 = ((u32)x82 & 0x3ffffff);
+	{ u64 x85 = (x83 + x43);
+	{ u64 x86 = (x85 >> 0x19);
+	{ u32 x87 = ((u32)x85 & 0x1ffffff);
+	{ u64 x88 = (x86 + x40);
+	{ u64 x89 = (x88 >> 0x1a);
+	{ u32 x90 = ((u32)x88 & 0x3ffffff);
+	{ u64 x91 = (x89 + x28);
+	{ u64 x92 = (x91 >> 0x19);
+	{ u32 x93 = ((u32)x91 & 0x1ffffff);
+	{ u64 x94 = (x66 + (0x13 * x92));
+	{ u32 x95 = (u32) (x94 >> 0x1a);
+	{ u32 x96 = ((u32)x94 & 0x3ffffff);
+	{ u32 x97 = (x95 + x69);
+	{ u32 x98 = (x97 >> 0x19);
+	{ u32 x99 = (x97 & 0x1ffffff);
+	out[0] = x96;
+	out[1] = x99;
+	out[2] = (x98 + x72);
+	out[3] = x75;
+	out[4] = x78;
+	out[5] = x81;
+	out[6] = x84;
+	out[7] = x87;
+	out[8] = x90;
+	out[9] = x93;
+	}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
+
+static __always_inline void fe_sq_tl(fe *h, const fe_loose *f)
+{
+	fe_sqr_impl(h->v, f->v);
+}
+
+static __always_inline void fe_sq_tt(fe *h, const fe *f)
+{
+	fe_sqr_impl(h->v, f->v);
+}
+
+static __always_inline void fe_loose_invert(fe *out, const fe_loose *z)
+{
+	fe t0;
+	fe t1;
+	fe t2;
+	fe t3;
+	int i;
+
+	fe_sq_tl(&t0, z);
+	fe_sq_tt(&t1, &t0);
+	for (i = 1; i < 2; ++i)
+		fe_sq_tt(&t1, &t1);
+	fe_mul_tlt(&t1, z, &t1);
+	fe_mul_ttt(&t0, &t0, &t1);
+	fe_sq_tt(&t2, &t0);
+	fe_mul_ttt(&t1, &t1, &t2);
+	fe_sq_tt(&t2, &t1);
+	for (i = 1; i < 5; ++i)
+		fe_sq_tt(&t2, &t2);
+	fe_mul_ttt(&t1, &t2, &t1);
+	fe_sq_tt(&t2, &t1);
+	for (i = 1; i < 10; ++i)
+		fe_sq_tt(&t2, &t2);
+	fe_mul_ttt(&t2, &t2, &t1);
+	fe_sq_tt(&t3, &t2);
+	for (i = 1; i < 20; ++i)
+		fe_sq_tt(&t3, &t3);
+	fe_mul_ttt(&t2, &t3, &t2);
+	fe_sq_tt(&t2, &t2);
+	for (i = 1; i < 10; ++i)
+		fe_sq_tt(&t2, &t2);
+	fe_mul_ttt(&t1, &t2, &t1);
+	fe_sq_tt(&t2, &t1);
+	for (i = 1; i < 50; ++i)
+		fe_sq_tt(&t2, &t2);
+	fe_mul_ttt(&t2, &t2, &t1);
+	fe_sq_tt(&t3, &t2);
+	for (i = 1; i < 100; ++i)
+		fe_sq_tt(&t3, &t3);
+	fe_mul_ttt(&t2, &t3, &t2);
+	fe_sq_tt(&t2, &t2);
+	for (i = 1; i < 50; ++i)
+		fe_sq_tt(&t2, &t2);
+	fe_mul_ttt(&t1, &t2, &t1);
+	fe_sq_tt(&t1, &t1);
+	for (i = 1; i < 5; ++i)
+		fe_sq_tt(&t1, &t1);
+	fe_mul_ttt(out, &t1, &t0);
+}
+
+static __always_inline void fe_invert(fe *out, const fe *z)
+{
+	fe_loose l;
+	fe_copy_lt(&l, z);
+	fe_loose_invert(out, &l);
+}
+
+/* Replace (f,g) with (g,f) if b == 1;
+ * replace (f,g) with (f,g) if b == 0.
+ *
+ * Preconditions: b in {0,1}
+ */
+static noinline void fe_cswap(fe *f, fe *g, unsigned int b)
+{
+	unsigned i;
+	b = 0 - b;
+	for (i = 0; i < 10; i++) {
+		u32 x = f->v[i] ^ g->v[i];
+		x &= b;
+		f->v[i] ^= x;
+		g->v[i] ^= x;
+	}
+}
+
+/* NOTE: based on fiat-crypto fe_mul, edited for in2=121666, 0, 0.*/
+static __always_inline void fe_mul_121666_impl(u32 out[10], const u32 in1[10])
+{
+	{ const u32 x20 = in1[9];
+	{ const u32 x21 = in1[8];
+	{ const u32 x19 = in1[7];
+	{ const u32 x17 = in1[6];
+	{ const u32 x15 = in1[5];
+	{ const u32 x13 = in1[4];
+	{ const u32 x11 = in1[3];
+	{ const u32 x9 = in1[2];
+	{ const u32 x7 = in1[1];
+	{ const u32 x5 = in1[0];
+	{ const u32 x38 = 0;
+	{ const u32 x39 = 0;
+	{ const u32 x37 = 0;
+	{ const u32 x35 = 0;
+	{ const u32 x33 = 0;
+	{ const u32 x31 = 0;
+	{ const u32 x29 = 0;
+	{ const u32 x27 = 0;
+	{ const u32 x25 = 0;
+	{ const u32 x23 = 121666;
+	{ u64 x40 = ((u64)x23 * x5);
+	{ u64 x41 = (((u64)x23 * x7) + ((u64)x25 * x5));
+	{ u64 x42 = ((((u64)(0x2 * x25) * x7) + ((u64)x23 * x9)) + ((u64)x27 * x5));
+	{ u64 x43 = (((((u64)x25 * x9) + ((u64)x27 * x7)) + ((u64)x23 * x11)) + ((u64)x29 * x5));
+	{ u64 x44 = (((((u64)x27 * x9) + (0x2 * (((u64)x25 * x11) + ((u64)x29 * x7)))) + ((u64)x23 * x13)) + ((u64)x31 * x5));
+	{ u64 x45 = (((((((u64)x27 * x11) + ((u64)x29 * x9)) + ((u64)x25 * x13)) + ((u64)x31 * x7)) + ((u64)x23 * x15)) + ((u64)x33 * x5));
+	{ u64 x46 = (((((0x2 * ((((u64)x29 * x11) + ((u64)x25 * x15)) + ((u64)x33 * x7))) + ((u64)x27 * x13)) + ((u64)x31 * x9)) + ((u64)x23 * x17)) + ((u64)x35 * x5));
+	{ u64 x47 = (((((((((u64)x29 * x13) + ((u64)x31 * x11)) + ((u64)x27 * x15)) + ((u64)x33 * x9)) + ((u64)x25 * x17)) + ((u64)x35 * x7)) + ((u64)x23 * x19)) + ((u64)x37 * x5));
+	{ u64 x48 = (((((((u64)x31 * x13) + (0x2 * (((((u64)x29 * x15) + ((u64)x33 * x11)) + ((u64)x25 * x19)) + ((u64)x37 * x7)))) + ((u64)x27 * x17)) + ((u64)x35 * x9)) + ((u64)x23 * x21)) + ((u64)x39 * x5));
+	{ u64 x49 = (((((((((((u64)x31 * x15) + ((u64)x33 * x13)) + ((u64)x29 * x17)) + ((u64)x35 * x11)) + ((u64)x27 * x19)) + ((u64)x37 * x9)) + ((u64)x25 * x21)) + ((u64)x39 * x7)) + ((u64)x23 * x20)) + ((u64)x38 * x5));
+	{ u64 x50 = (((((0x2 * ((((((u64)x33 * x15) + ((u64)x29 * x19)) + ((u64)x37 * x11)) + ((u64)x25 * x20)) + ((u64)x38 * x7))) + ((u64)x31 * x17)) + ((u64)x35 * x13)) + ((u64)x27 * x21)) + ((u64)x39 * x9));
+	{ u64 x51 = (((((((((u64)x33 * x17) + ((u64)x35 * x15)) + ((u64)x31 * x19)) + ((u64)x37 * x13)) + ((u64)x29 * x21)) + ((u64)x39 * x11)) + ((u64)x27 * x20)) + ((u64)x38 * x9));
+	{ u64 x52 = (((((u64)x35 * x17) + (0x2 * (((((u64)x33 * x19) + ((u64)x37 * x15)) + ((u64)x29 * x20)) + ((u64)x38 * x11)))) + ((u64)x31 * x21)) + ((u64)x39 * x13));
+	{ u64 x53 = (((((((u64)x35 * x19) + ((u64)x37 * x17)) + ((u64)x33 * x21)) + ((u64)x39 * x15)) + ((u64)x31 * x20)) + ((u64)x38 * x13));
+	{ u64 x54 = (((0x2 * ((((u64)x37 * x19) + ((u64)x33 * x20)) + ((u64)x38 * x15))) + ((u64)x35 * x21)) + ((u64)x39 * x17));
+	{ u64 x55 = (((((u64)x37 * x21) + ((u64)x39 * x19)) + ((u64)x35 * x20)) + ((u64)x38 * x17));
+	{ u64 x56 = (((u64)x39 * x21) + (0x2 * (((u64)x37 * x20) + ((u64)x38 * x19))));
+	{ u64 x57 = (((u64)x39 * x20) + ((u64)x38 * x21));
+	{ u64 x58 = ((u64)(0x2 * x38) * x20);
+	{ u64 x59 = (x48 + (x58 << 0x4));
+	{ u64 x60 = (x59 + (x58 << 0x1));
+	{ u64 x61 = (x60 + x58);
+	{ u64 x62 = (x47 + (x57 << 0x4));
+	{ u64 x63 = (x62 + (x57 << 0x1));
+	{ u64 x64 = (x63 + x57);
+	{ u64 x65 = (x46 + (x56 << 0x4));
+	{ u64 x66 = (x65 + (x56 << 0x1));
+	{ u64 x67 = (x66 + x56);
+	{ u64 x68 = (x45 + (x55 << 0x4));
+	{ u64 x69 = (x68 + (x55 << 0x1));
+	{ u64 x70 = (x69 + x55);
+	{ u64 x71 = (x44 + (x54 << 0x4));
+	{ u64 x72 = (x71 + (x54 << 0x1));
+	{ u64 x73 = (x72 + x54);
+	{ u64 x74 = (x43 + (x53 << 0x4));
+	{ u64 x75 = (x74 + (x53 << 0x1));
+	{ u64 x76 = (x75 + x53);
+	{ u64 x77 = (x42 + (x52 << 0x4));
+	{ u64 x78 = (x77 + (x52 << 0x1));
+	{ u64 x79 = (x78 + x52);
+	{ u64 x80 = (x41 + (x51 << 0x4));
+	{ u64 x81 = (x80 + (x51 << 0x1));
+	{ u64 x82 = (x81 + x51);
+	{ u64 x83 = (x40 + (x50 << 0x4));
+	{ u64 x84 = (x83 + (x50 << 0x1));
+	{ u64 x85 = (x84 + x50);
+	{ u64 x86 = (x85 >> 0x1a);
+	{ u32 x87 = ((u32)x85 & 0x3ffffff);
+	{ u64 x88 = (x86 + x82);
+	{ u64 x89 = (x88 >> 0x19);
+	{ u32 x90 = ((u32)x88 & 0x1ffffff);
+	{ u64 x91 = (x89 + x79);
+	{ u64 x92 = (x91 >> 0x1a);
+	{ u32 x93 = ((u32)x91 & 0x3ffffff);
+	{ u64 x94 = (x92 + x76);
+	{ u64 x95 = (x94 >> 0x19);
+	{ u32 x96 = ((u32)x94 & 0x1ffffff);
+	{ u64 x97 = (x95 + x73);
+	{ u64 x98 = (x97 >> 0x1a);
+	{ u32 x99 = ((u32)x97 & 0x3ffffff);
+	{ u64 x100 = (x98 + x70);
+	{ u64 x101 = (x100 >> 0x19);
+	{ u32 x102 = ((u32)x100 & 0x1ffffff);
+	{ u64 x103 = (x101 + x67);
+	{ u64 x104 = (x103 >> 0x1a);
+	{ u32 x105 = ((u32)x103 & 0x3ffffff);
+	{ u64 x106 = (x104 + x64);
+	{ u64 x107 = (x106 >> 0x19);
+	{ u32 x108 = ((u32)x106 & 0x1ffffff);
+	{ u64 x109 = (x107 + x61);
+	{ u64 x110 = (x109 >> 0x1a);
+	{ u32 x111 = ((u32)x109 & 0x3ffffff);
+	{ u64 x112 = (x110 + x49);
+	{ u64 x113 = (x112 >> 0x19);
+	{ u32 x114 = ((u32)x112 & 0x1ffffff);
+	{ u64 x115 = (x87 + (0x13 * x113));
+	{ u32 x116 = (u32) (x115 >> 0x1a);
+	{ u32 x117 = ((u32)x115 & 0x3ffffff);
+	{ u32 x118 = (x116 + x90);
+	{ u32 x119 = (x118 >> 0x19);
+	{ u32 x120 = (x118 & 0x1ffffff);
+	out[0] = x117;
+	out[1] = x120;
+	out[2] = (x119 + x93);
+	out[3] = x96;
+	out[4] = x99;
+	out[5] = x102;
+	out[6] = x105;
+	out[7] = x108;
+	out[8] = x111;
+	out[9] = x114;
+	}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
+
+static __always_inline void fe_mul121666(fe *h, const fe_loose *f)
+{
+	fe_mul_121666_impl(h->v, f->v);
+}
+
+void curve25519_generic(u8 out[CURVE25519_KEY_SIZE],
+			const u8 scalar[CURVE25519_KEY_SIZE],
+			const u8 point[CURVE25519_KEY_SIZE])
+{
+	fe x1, x2, z2, x3, z3;
+	fe_loose x2l, z2l, x3l;
+	unsigned swap = 0;
+	int pos;
+	u8 e[32];
+
+	memcpy(e, scalar, 32);
+	curve25519_clamp_secret(e);
+
+	/* The following implementation was transcribed to Coq and proven to
+	 * correspond to unary scalar multiplication in affine coordinates given
+	 * that x1 != 0 is the x coordinate of some point on the curve. It was
+	 * also checked in Coq that doing a ladderstep with x1 = x3 = 0 gives
+	 * z2' = z3' = 0, and z2 = z3 = 0 gives z2' = z3' = 0. The statement was
+	 * quantified over the underlying field, so it applies to Curve25519
+	 * itself and the quadratic twist of Curve25519. It was not proven in
+	 * Coq that prime-field arithmetic correctly simulates extension-field
+	 * arithmetic on prime-field values. The decoding of the byte array
+	 * representation of e was not considered.
+	 *
+	 * Specification of Montgomery curves in affine coordinates:
+	 * <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Spec/MontgomeryCurve.v#L27>
+	 *
+	 * Proof that these form a group that is isomorphic to a Weierstrass
+	 * curve:
+	 * <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/AffineProofs.v#L35>
+	 *
+	 * Coq transcription and correctness proof of the loop
+	 * (where scalarbits=255):
+	 * <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/XZ.v#L118>
+	 * <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/XZProofs.v#L278>
+	 * preconditions: 0 <= e < 2^255 (not necessarily e < order),
+	 * fe_invert(0) = 0
+	 */
+	fe_frombytes(&x1, point);
+	fe_1(&x2);
+	fe_0(&z2);
+	fe_copy(&x3, &x1);
+	fe_1(&z3);
+
+	for (pos = 254; pos >= 0; --pos) {
+		fe tmp0, tmp1;
+		fe_loose tmp0l, tmp1l;
+		/* loop invariant as of right before the test, for the case
+		 * where x1 != 0:
+		 *   pos >= -1; if z2 = 0 then x2 is nonzero; if z3 = 0 then x3
+		 *   is nonzero
+		 *   let r := e >> (pos+1) in the following equalities of
+		 *   projective points:
+		 *   to_xz (r*P)     === if swap then (x3, z3) else (x2, z2)
+		 *   to_xz ((r+1)*P) === if swap then (x2, z2) else (x3, z3)
+		 *   x1 is the nonzero x coordinate of the nonzero
+		 *   point (r*P-(r+1)*P)
+		 */
+		unsigned b = 1 & (e[pos / 8] >> (pos & 7));
+		swap ^= b;
+		fe_cswap(&x2, &x3, swap);
+		fe_cswap(&z2, &z3, swap);
+		swap = b;
+		/* Coq transcription of ladderstep formula (called from
+		 * transcribed loop):
+		 * <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/XZ.v#L89>
+		 * <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/XZProofs.v#L131>
+		 * x1 != 0 <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/XZProofs.v#L217>
+		 * x1  = 0 <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/XZProofs.v#L147>
+		 */
+		fe_sub(&tmp0l, &x3, &z3);
+		fe_sub(&tmp1l, &x2, &z2);
+		fe_add(&x2l, &x2, &z2);
+		fe_add(&z2l, &x3, &z3);
+		fe_mul_tll(&z3, &tmp0l, &x2l);
+		fe_mul_tll(&z2, &z2l, &tmp1l);
+		fe_sq_tl(&tmp0, &tmp1l);
+		fe_sq_tl(&tmp1, &x2l);
+		fe_add(&x3l, &z3, &z2);
+		fe_sub(&z2l, &z3, &z2);
+		fe_mul_ttt(&x2, &tmp1, &tmp0);
+		fe_sub(&tmp1l, &tmp1, &tmp0);
+		fe_sq_tl(&z2, &z2l);
+		fe_mul121666(&z3, &tmp1l);
+		fe_sq_tl(&x3, &x3l);
+		fe_add(&tmp0l, &tmp0, &z3);
+		fe_mul_ttt(&z3, &x1, &z2);
+		fe_mul_tll(&z2, &tmp1l, &tmp0l);
+	}
+	/* here pos=-1, so r=e, so to_xz (e*P) === if swap then (x3, z3)
+	 * else (x2, z2)
+	 */
+	fe_cswap(&x2, &x3, swap);
+	fe_cswap(&z2, &z3, swap);
+
+	fe_invert(&z2, &z2);
+	fe_mul_ttt(&x2, &x2, &z2);
+	fe_tobytes(out, &x2);
+
+	memzero_explicit(&x1, sizeof(x1));
+	memzero_explicit(&x2, sizeof(x2));
+	memzero_explicit(&z2, sizeof(z2));
+	memzero_explicit(&x3, sizeof(x3));
+	memzero_explicit(&z3, sizeof(z3));
+	memzero_explicit(&x2l, sizeof(x2l));
+	memzero_explicit(&z2l, sizeof(z2l));
+	memzero_explicit(&x3l, sizeof(x3l));
+	memzero_explicit(&e, sizeof(e));
+}
diff --git a/lib/crypto/curve25519-generic.c b/lib/crypto/curve25519-generic.c
new file mode 100644
index 0000000..de7c991
--- /dev/null
+++ b/lib/crypto/curve25519-generic.c
@@ -0,0 +1,24 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This is an implementation of the Curve25519 ECDH algorithm, using either
+ * a 32-bit implementation or a 64-bit implementation with 128-bit integers,
+ * depending on what is supported by the target compiler.
+ *
+ * Information: https://cr.yp.to/ecdh.html
+ */
+
+#include <crypto/curve25519.h>
+#include <linux/module.h>
+
+const u8 curve25519_null_point[CURVE25519_KEY_SIZE] __aligned(32) = { 0 };
+const u8 curve25519_base_point[CURVE25519_KEY_SIZE] __aligned(32) = { 9 };
+
+EXPORT_SYMBOL(curve25519_null_point);
+EXPORT_SYMBOL(curve25519_base_point);
+EXPORT_SYMBOL(curve25519_generic);
+
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("Curve25519 scalar multiplication");
+MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
diff --git a/lib/crypto/curve25519-hacl64.c b/lib/crypto/curve25519-hacl64.c
new file mode 100644
index 0000000..771d82d
--- /dev/null
+++ b/lib/crypto/curve25519-hacl64.c
@@ -0,0 +1,788 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2016-2017 INRIA and Microsoft Corporation.
+ * Copyright (C) 2018-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This is a machine-generated formally verified implementation of Curve25519
+ * ECDH from: <https://github.com/mitls/hacl-star>. Though originally machine
+ * generated, it has been tweaked to be suitable for use in the kernel. It is
+ * optimized for 64-bit machines that can efficiently work with 128-bit
+ * integer types.
+ */
+
+#include <asm/unaligned.h>
+#include <crypto/curve25519.h>
+#include <linux/string.h>
+
+typedef __uint128_t u128;
+
+static __always_inline u64 u64_eq_mask(u64 a, u64 b)
+{
+	u64 x = a ^ b;
+	u64 minus_x = ~x + (u64)1U;
+	u64 x_or_minus_x = x | minus_x;
+	u64 xnx = x_or_minus_x >> (u32)63U;
+	u64 c = xnx - (u64)1U;
+	return c;
+}
+
+static __always_inline u64 u64_gte_mask(u64 a, u64 b)
+{
+	u64 x = a;
+	u64 y = b;
+	u64 x_xor_y = x ^ y;
+	u64 x_sub_y = x - y;
+	u64 x_sub_y_xor_y = x_sub_y ^ y;
+	u64 q = x_xor_y | x_sub_y_xor_y;
+	u64 x_xor_q = x ^ q;
+	u64 x_xor_q_ = x_xor_q >> (u32)63U;
+	u64 c = x_xor_q_ - (u64)1U;
+	return c;
+}
+
+static __always_inline void modulo_carry_top(u64 *b)
+{
+	u64 b4 = b[4];
+	u64 b0 = b[0];
+	u64 b4_ = b4 & 0x7ffffffffffffLLU;
+	u64 b0_ = b0 + 19 * (b4 >> 51);
+	b[4] = b4_;
+	b[0] = b0_;
+}
+
+static __always_inline void fproduct_copy_from_wide_(u64 *output, u128 *input)
+{
+	{
+		u128 xi = input[0];
+		output[0] = ((u64)(xi));
+	}
+	{
+		u128 xi = input[1];
+		output[1] = ((u64)(xi));
+	}
+	{
+		u128 xi = input[2];
+		output[2] = ((u64)(xi));
+	}
+	{
+		u128 xi = input[3];
+		output[3] = ((u64)(xi));
+	}
+	{
+		u128 xi = input[4];
+		output[4] = ((u64)(xi));
+	}
+}
+
+static __always_inline void
+fproduct_sum_scalar_multiplication_(u128 *output, u64 *input, u64 s)
+{
+	output[0] += (u128)input[0] * s;
+	output[1] += (u128)input[1] * s;
+	output[2] += (u128)input[2] * s;
+	output[3] += (u128)input[3] * s;
+	output[4] += (u128)input[4] * s;
+}
+
+static __always_inline void fproduct_carry_wide_(u128 *tmp)
+{
+	{
+		u32 ctr = 0;
+		u128 tctr = tmp[ctr];
+		u128 tctrp1 = tmp[ctr + 1];
+		u64 r0 = ((u64)(tctr)) & 0x7ffffffffffffLLU;
+		u128 c = ((tctr) >> (51));
+		tmp[ctr] = ((u128)(r0));
+		tmp[ctr + 1] = ((tctrp1) + (c));
+	}
+	{
+		u32 ctr = 1;
+		u128 tctr = tmp[ctr];
+		u128 tctrp1 = tmp[ctr + 1];
+		u64 r0 = ((u64)(tctr)) & 0x7ffffffffffffLLU;
+		u128 c = ((tctr) >> (51));
+		tmp[ctr] = ((u128)(r0));
+		tmp[ctr + 1] = ((tctrp1) + (c));
+	}
+
+	{
+		u32 ctr = 2;
+		u128 tctr = tmp[ctr];
+		u128 tctrp1 = tmp[ctr + 1];
+		u64 r0 = ((u64)(tctr)) & 0x7ffffffffffffLLU;
+		u128 c = ((tctr) >> (51));
+		tmp[ctr] = ((u128)(r0));
+		tmp[ctr + 1] = ((tctrp1) + (c));
+	}
+	{
+		u32 ctr = 3;
+		u128 tctr = tmp[ctr];
+		u128 tctrp1 = tmp[ctr + 1];
+		u64 r0 = ((u64)(tctr)) & 0x7ffffffffffffLLU;
+		u128 c = ((tctr) >> (51));
+		tmp[ctr] = ((u128)(r0));
+		tmp[ctr + 1] = ((tctrp1) + (c));
+	}
+}
+
+static __always_inline void fmul_shift_reduce(u64 *output)
+{
+	u64 tmp = output[4];
+	u64 b0;
+	{
+		u32 ctr = 5 - 0 - 1;
+		u64 z = output[ctr - 1];
+		output[ctr] = z;
+	}
+	{
+		u32 ctr = 5 - 1 - 1;
+		u64 z = output[ctr - 1];
+		output[ctr] = z;
+	}
+	{
+		u32 ctr = 5 - 2 - 1;
+		u64 z = output[ctr - 1];
+		output[ctr] = z;
+	}
+	{
+		u32 ctr = 5 - 3 - 1;
+		u64 z = output[ctr - 1];
+		output[ctr] = z;
+	}
+	output[0] = tmp;
+	b0 = output[0];
+	output[0] = 19 * b0;
+}
+
+static __always_inline void fmul_mul_shift_reduce_(u128 *output, u64 *input,
+						   u64 *input21)
+{
+	u32 i;
+	u64 input2i;
+	{
+		u64 input2i = input21[0];
+		fproduct_sum_scalar_multiplication_(output, input, input2i);
+		fmul_shift_reduce(input);
+	}
+	{
+		u64 input2i = input21[1];
+		fproduct_sum_scalar_multiplication_(output, input, input2i);
+		fmul_shift_reduce(input);
+	}
+	{
+		u64 input2i = input21[2];
+		fproduct_sum_scalar_multiplication_(output, input, input2i);
+		fmul_shift_reduce(input);
+	}
+	{
+		u64 input2i = input21[3];
+		fproduct_sum_scalar_multiplication_(output, input, input2i);
+		fmul_shift_reduce(input);
+	}
+	i = 4;
+	input2i = input21[i];
+	fproduct_sum_scalar_multiplication_(output, input, input2i);
+}
+
+static __always_inline void fmul_fmul(u64 *output, u64 *input, u64 *input21)
+{
+	u64 tmp[5] = { input[0], input[1], input[2], input[3], input[4] };
+	{
+		u128 b4;
+		u128 b0;
+		u128 b4_;
+		u128 b0_;
+		u64 i0;
+		u64 i1;
+		u64 i0_;
+		u64 i1_;
+		u128 t[5] = { 0 };
+		fmul_mul_shift_reduce_(t, tmp, input21);
+		fproduct_carry_wide_(t);
+		b4 = t[4];
+		b0 = t[0];
+		b4_ = ((b4) & (((u128)(0x7ffffffffffffLLU))));
+		b0_ = ((b0) + (((u128)(19) * (((u64)(((b4) >> (51))))))));
+		t[4] = b4_;
+		t[0] = b0_;
+		fproduct_copy_from_wide_(output, t);
+		i0 = output[0];
+		i1 = output[1];
+		i0_ = i0 & 0x7ffffffffffffLLU;
+		i1_ = i1 + (i0 >> 51);
+		output[0] = i0_;
+		output[1] = i1_;
+	}
+}
+
+static __always_inline void fsquare_fsquare__(u128 *tmp, u64 *output)
+{
+	u64 r0 = output[0];
+	u64 r1 = output[1];
+	u64 r2 = output[2];
+	u64 r3 = output[3];
+	u64 r4 = output[4];
+	u64 d0 = r0 * 2;
+	u64 d1 = r1 * 2;
+	u64 d2 = r2 * 2 * 19;
+	u64 d419 = r4 * 19;
+	u64 d4 = d419 * 2;
+	u128 s0 = ((((((u128)(r0) * (r0))) + (((u128)(d4) * (r1))))) +
+		   (((u128)(d2) * (r3))));
+	u128 s1 = ((((((u128)(d0) * (r1))) + (((u128)(d4) * (r2))))) +
+		   (((u128)(r3 * 19) * (r3))));
+	u128 s2 = ((((((u128)(d0) * (r2))) + (((u128)(r1) * (r1))))) +
+		   (((u128)(d4) * (r3))));
+	u128 s3 = ((((((u128)(d0) * (r3))) + (((u128)(d1) * (r2))))) +
+		   (((u128)(r4) * (d419))));
+	u128 s4 = ((((((u128)(d0) * (r4))) + (((u128)(d1) * (r3))))) +
+		   (((u128)(r2) * (r2))));
+	tmp[0] = s0;
+	tmp[1] = s1;
+	tmp[2] = s2;
+	tmp[3] = s3;
+	tmp[4] = s4;
+}
+
+static __always_inline void fsquare_fsquare_(u128 *tmp, u64 *output)
+{
+	u128 b4;
+	u128 b0;
+	u128 b4_;
+	u128 b0_;
+	u64 i0;
+	u64 i1;
+	u64 i0_;
+	u64 i1_;
+	fsquare_fsquare__(tmp, output);
+	fproduct_carry_wide_(tmp);
+	b4 = tmp[4];
+	b0 = tmp[0];
+	b4_ = ((b4) & (((u128)(0x7ffffffffffffLLU))));
+	b0_ = ((b0) + (((u128)(19) * (((u64)(((b4) >> (51))))))));
+	tmp[4] = b4_;
+	tmp[0] = b0_;
+	fproduct_copy_from_wide_(output, tmp);
+	i0 = output[0];
+	i1 = output[1];
+	i0_ = i0 & 0x7ffffffffffffLLU;
+	i1_ = i1 + (i0 >> 51);
+	output[0] = i0_;
+	output[1] = i1_;
+}
+
+static __always_inline void fsquare_fsquare_times_(u64 *output, u128 *tmp,
+						   u32 count1)
+{
+	u32 i;
+	fsquare_fsquare_(tmp, output);
+	for (i = 1; i < count1; ++i)
+		fsquare_fsquare_(tmp, output);
+}
+
+static __always_inline void fsquare_fsquare_times(u64 *output, u64 *input,
+						  u32 count1)
+{
+	u128 t[5];
+	memcpy(output, input, 5 * sizeof(*input));
+	fsquare_fsquare_times_(output, t, count1);
+}
+
+static __always_inline void fsquare_fsquare_times_inplace(u64 *output,
+							  u32 count1)
+{
+	u128 t[5];
+	fsquare_fsquare_times_(output, t, count1);
+}
+
+static __always_inline void crecip_crecip(u64 *out, u64 *z)
+{
+	u64 buf[20] = { 0 };
+	u64 *a0 = buf;
+	u64 *t00 = buf + 5;
+	u64 *b0 = buf + 10;
+	u64 *t01;
+	u64 *b1;
+	u64 *c0;
+	u64 *a;
+	u64 *t0;
+	u64 *b;
+	u64 *c;
+	fsquare_fsquare_times(a0, z, 1);
+	fsquare_fsquare_times(t00, a0, 2);
+	fmul_fmul(b0, t00, z);
+	fmul_fmul(a0, b0, a0);
+	fsquare_fsquare_times(t00, a0, 1);
+	fmul_fmul(b0, t00, b0);
+	fsquare_fsquare_times(t00, b0, 5);
+	t01 = buf + 5;
+	b1 = buf + 10;
+	c0 = buf + 15;
+	fmul_fmul(b1, t01, b1);
+	fsquare_fsquare_times(t01, b1, 10);
+	fmul_fmul(c0, t01, b1);
+	fsquare_fsquare_times(t01, c0, 20);
+	fmul_fmul(t01, t01, c0);
+	fsquare_fsquare_times_inplace(t01, 10);
+	fmul_fmul(b1, t01, b1);
+	fsquare_fsquare_times(t01, b1, 50);
+	a = buf;
+	t0 = buf + 5;
+	b = buf + 10;
+	c = buf + 15;
+	fmul_fmul(c, t0, b);
+	fsquare_fsquare_times(t0, c, 100);
+	fmul_fmul(t0, t0, c);
+	fsquare_fsquare_times_inplace(t0, 50);
+	fmul_fmul(t0, t0, b);
+	fsquare_fsquare_times_inplace(t0, 5);
+	fmul_fmul(out, t0, a);
+}
+
+static __always_inline void fsum(u64 *a, u64 *b)
+{
+	a[0] += b[0];
+	a[1] += b[1];
+	a[2] += b[2];
+	a[3] += b[3];
+	a[4] += b[4];
+}
+
+static __always_inline void fdifference(u64 *a, u64 *b)
+{
+	u64 tmp[5] = { 0 };
+	u64 b0;
+	u64 b1;
+	u64 b2;
+	u64 b3;
+	u64 b4;
+	memcpy(tmp, b, 5 * sizeof(*b));
+	b0 = tmp[0];
+	b1 = tmp[1];
+	b2 = tmp[2];
+	b3 = tmp[3];
+	b4 = tmp[4];
+	tmp[0] = b0 + 0x3fffffffffff68LLU;
+	tmp[1] = b1 + 0x3ffffffffffff8LLU;
+	tmp[2] = b2 + 0x3ffffffffffff8LLU;
+	tmp[3] = b3 + 0x3ffffffffffff8LLU;
+	tmp[4] = b4 + 0x3ffffffffffff8LLU;
+	{
+		u64 xi = a[0];
+		u64 yi = tmp[0];
+		a[0] = yi - xi;
+	}
+	{
+		u64 xi = a[1];
+		u64 yi = tmp[1];
+		a[1] = yi - xi;
+	}
+	{
+		u64 xi = a[2];
+		u64 yi = tmp[2];
+		a[2] = yi - xi;
+	}
+	{
+		u64 xi = a[3];
+		u64 yi = tmp[3];
+		a[3] = yi - xi;
+	}
+	{
+		u64 xi = a[4];
+		u64 yi = tmp[4];
+		a[4] = yi - xi;
+	}
+}
+
+static __always_inline void fscalar(u64 *output, u64 *b, u64 s)
+{
+	u128 tmp[5];
+	u128 b4;
+	u128 b0;
+	u128 b4_;
+	u128 b0_;
+	{
+		u64 xi = b[0];
+		tmp[0] = ((u128)(xi) * (s));
+	}
+	{
+		u64 xi = b[1];
+		tmp[1] = ((u128)(xi) * (s));
+	}
+	{
+		u64 xi = b[2];
+		tmp[2] = ((u128)(xi) * (s));
+	}
+	{
+		u64 xi = b[3];
+		tmp[3] = ((u128)(xi) * (s));
+	}
+	{
+		u64 xi = b[4];
+		tmp[4] = ((u128)(xi) * (s));
+	}
+	fproduct_carry_wide_(tmp);
+	b4 = tmp[4];
+	b0 = tmp[0];
+	b4_ = ((b4) & (((u128)(0x7ffffffffffffLLU))));
+	b0_ = ((b0) + (((u128)(19) * (((u64)(((b4) >> (51))))))));
+	tmp[4] = b4_;
+	tmp[0] = b0_;
+	fproduct_copy_from_wide_(output, tmp);
+}
+
+static __always_inline void fmul(u64 *output, u64 *a, u64 *b)
+{
+	fmul_fmul(output, a, b);
+}
+
+static __always_inline void crecip(u64 *output, u64 *input)
+{
+	crecip_crecip(output, input);
+}
+
+static __always_inline void point_swap_conditional_step(u64 *a, u64 *b,
+							u64 swap1, u32 ctr)
+{
+	u32 i = ctr - 1;
+	u64 ai = a[i];
+	u64 bi = b[i];
+	u64 x = swap1 & (ai ^ bi);
+	u64 ai1 = ai ^ x;
+	u64 bi1 = bi ^ x;
+	a[i] = ai1;
+	b[i] = bi1;
+}
+
+static __always_inline void point_swap_conditional5(u64 *a, u64 *b, u64 swap1)
+{
+	point_swap_conditional_step(a, b, swap1, 5);
+	point_swap_conditional_step(a, b, swap1, 4);
+	point_swap_conditional_step(a, b, swap1, 3);
+	point_swap_conditional_step(a, b, swap1, 2);
+	point_swap_conditional_step(a, b, swap1, 1);
+}
+
+static __always_inline void point_swap_conditional(u64 *a, u64 *b, u64 iswap)
+{
+	u64 swap1 = 0 - iswap;
+	point_swap_conditional5(a, b, swap1);
+	point_swap_conditional5(a + 5, b + 5, swap1);
+}
+
+static __always_inline void point_copy(u64 *output, u64 *input)
+{
+	memcpy(output, input, 5 * sizeof(*input));
+	memcpy(output + 5, input + 5, 5 * sizeof(*input));
+}
+
+static __always_inline void addanddouble_fmonty(u64 *pp, u64 *ppq, u64 *p,
+						u64 *pq, u64 *qmqp)
+{
+	u64 *qx = qmqp;
+	u64 *x2 = pp;
+	u64 *z2 = pp + 5;
+	u64 *x3 = ppq;
+	u64 *z3 = ppq + 5;
+	u64 *x = p;
+	u64 *z = p + 5;
+	u64 *xprime = pq;
+	u64 *zprime = pq + 5;
+	u64 buf[40] = { 0 };
+	u64 *origx = buf;
+	u64 *origxprime0 = buf + 5;
+	u64 *xxprime0;
+	u64 *zzprime0;
+	u64 *origxprime;
+	xxprime0 = buf + 25;
+	zzprime0 = buf + 30;
+	memcpy(origx, x, 5 * sizeof(*x));
+	fsum(x, z);
+	fdifference(z, origx);
+	memcpy(origxprime0, xprime, 5 * sizeof(*xprime));
+	fsum(xprime, zprime);
+	fdifference(zprime, origxprime0);
+	fmul(xxprime0, xprime, z);
+	fmul(zzprime0, x, zprime);
+	origxprime = buf + 5;
+	{
+		u64 *xx0;
+		u64 *zz0;
+		u64 *xxprime;
+		u64 *zzprime;
+		u64 *zzzprime;
+		xx0 = buf + 15;
+		zz0 = buf + 20;
+		xxprime = buf + 25;
+		zzprime = buf + 30;
+		zzzprime = buf + 35;
+		memcpy(origxprime, xxprime, 5 * sizeof(*xxprime));
+		fsum(xxprime, zzprime);
+		fdifference(zzprime, origxprime);
+		fsquare_fsquare_times(x3, xxprime, 1);
+		fsquare_fsquare_times(zzzprime, zzprime, 1);
+		fmul(z3, zzzprime, qx);
+		fsquare_fsquare_times(xx0, x, 1);
+		fsquare_fsquare_times(zz0, z, 1);
+		{
+			u64 *zzz;
+			u64 *xx;
+			u64 *zz;
+			u64 scalar;
+			zzz = buf + 10;
+			xx = buf + 15;
+			zz = buf + 20;
+			fmul(x2, xx, zz);
+			fdifference(zz, xx);
+			scalar = 121665;
+			fscalar(zzz, zz, scalar);
+			fsum(zzz, xx);
+			fmul(z2, zzz, zz);
+		}
+	}
+}
+
+static __always_inline void
+ladder_smallloop_cmult_small_loop_step(u64 *nq, u64 *nqpq, u64 *nq2, u64 *nqpq2,
+				       u64 *q, u8 byt)
+{
+	u64 bit0 = (u64)(byt >> 7);
+	u64 bit;
+	point_swap_conditional(nq, nqpq, bit0);
+	addanddouble_fmonty(nq2, nqpq2, nq, nqpq, q);
+	bit = (u64)(byt >> 7);
+	point_swap_conditional(nq2, nqpq2, bit);
+}
+
+static __always_inline void
+ladder_smallloop_cmult_small_loop_double_step(u64 *nq, u64 *nqpq, u64 *nq2,
+					      u64 *nqpq2, u64 *q, u8 byt)
+{
+	u8 byt1;
+	ladder_smallloop_cmult_small_loop_step(nq, nqpq, nq2, nqpq2, q, byt);
+	byt1 = byt << 1;
+	ladder_smallloop_cmult_small_loop_step(nq2, nqpq2, nq, nqpq, q, byt1);
+}
+
+static __always_inline void
+ladder_smallloop_cmult_small_loop(u64 *nq, u64 *nqpq, u64 *nq2, u64 *nqpq2,
+				  u64 *q, u8 byt, u32 i)
+{
+	while (i--) {
+		ladder_smallloop_cmult_small_loop_double_step(nq, nqpq, nq2,
+							      nqpq2, q, byt);
+		byt <<= 2;
+	}
+}
+
+static __always_inline void ladder_bigloop_cmult_big_loop(u8 *n1, u64 *nq,
+							  u64 *nqpq, u64 *nq2,
+							  u64 *nqpq2, u64 *q,
+							  u32 i)
+{
+	while (i--) {
+		u8 byte = n1[i];
+		ladder_smallloop_cmult_small_loop(nq, nqpq, nq2, nqpq2, q,
+						  byte, 4);
+	}
+}
+
+static void ladder_cmult(u64 *result, u8 *n1, u64 *q)
+{
+	u64 point_buf[40] = { 0 };
+	u64 *nq = point_buf;
+	u64 *nqpq = point_buf + 10;
+	u64 *nq2 = point_buf + 20;
+	u64 *nqpq2 = point_buf + 30;
+	point_copy(nqpq, q);
+	nq[0] = 1;
+	ladder_bigloop_cmult_big_loop(n1, nq, nqpq, nq2, nqpq2, q, 32);
+	point_copy(result, nq);
+}
+
+static __always_inline void format_fexpand(u64 *output, const u8 *input)
+{
+	const u8 *x00 = input + 6;
+	const u8 *x01 = input + 12;
+	const u8 *x02 = input + 19;
+	const u8 *x0 = input + 24;
+	u64 i0, i1, i2, i3, i4, output0, output1, output2, output3, output4;
+	i0 = get_unaligned_le64(input);
+	i1 = get_unaligned_le64(x00);
+	i2 = get_unaligned_le64(x01);
+	i3 = get_unaligned_le64(x02);
+	i4 = get_unaligned_le64(x0);
+	output0 = i0 & 0x7ffffffffffffLLU;
+	output1 = i1 >> 3 & 0x7ffffffffffffLLU;
+	output2 = i2 >> 6 & 0x7ffffffffffffLLU;
+	output3 = i3 >> 1 & 0x7ffffffffffffLLU;
+	output4 = i4 >> 12 & 0x7ffffffffffffLLU;
+	output[0] = output0;
+	output[1] = output1;
+	output[2] = output2;
+	output[3] = output3;
+	output[4] = output4;
+}
+
+static __always_inline void format_fcontract_first_carry_pass(u64 *input)
+{
+	u64 t0 = input[0];
+	u64 t1 = input[1];
+	u64 t2 = input[2];
+	u64 t3 = input[3];
+	u64 t4 = input[4];
+	u64 t1_ = t1 + (t0 >> 51);
+	u64 t0_ = t0 & 0x7ffffffffffffLLU;
+	u64 t2_ = t2 + (t1_ >> 51);
+	u64 t1__ = t1_ & 0x7ffffffffffffLLU;
+	u64 t3_ = t3 + (t2_ >> 51);
+	u64 t2__ = t2_ & 0x7ffffffffffffLLU;
+	u64 t4_ = t4 + (t3_ >> 51);
+	u64 t3__ = t3_ & 0x7ffffffffffffLLU;
+	input[0] = t0_;
+	input[1] = t1__;
+	input[2] = t2__;
+	input[3] = t3__;
+	input[4] = t4_;
+}
+
+static __always_inline void format_fcontract_first_carry_full(u64 *input)
+{
+	format_fcontract_first_carry_pass(input);
+	modulo_carry_top(input);
+}
+
+static __always_inline void format_fcontract_second_carry_pass(u64 *input)
+{
+	u64 t0 = input[0];
+	u64 t1 = input[1];
+	u64 t2 = input[2];
+	u64 t3 = input[3];
+	u64 t4 = input[4];
+	u64 t1_ = t1 + (t0 >> 51);
+	u64 t0_ = t0 & 0x7ffffffffffffLLU;
+	u64 t2_ = t2 + (t1_ >> 51);
+	u64 t1__ = t1_ & 0x7ffffffffffffLLU;
+	u64 t3_ = t3 + (t2_ >> 51);
+	u64 t2__ = t2_ & 0x7ffffffffffffLLU;
+	u64 t4_ = t4 + (t3_ >> 51);
+	u64 t3__ = t3_ & 0x7ffffffffffffLLU;
+	input[0] = t0_;
+	input[1] = t1__;
+	input[2] = t2__;
+	input[3] = t3__;
+	input[4] = t4_;
+}
+
+static __always_inline void format_fcontract_second_carry_full(u64 *input)
+{
+	u64 i0;
+	u64 i1;
+	u64 i0_;
+	u64 i1_;
+	format_fcontract_second_carry_pass(input);
+	modulo_carry_top(input);
+	i0 = input[0];
+	i1 = input[1];
+	i0_ = i0 & 0x7ffffffffffffLLU;
+	i1_ = i1 + (i0 >> 51);
+	input[0] = i0_;
+	input[1] = i1_;
+}
+
+static __always_inline void format_fcontract_trim(u64 *input)
+{
+	u64 a0 = input[0];
+	u64 a1 = input[1];
+	u64 a2 = input[2];
+	u64 a3 = input[3];
+	u64 a4 = input[4];
+	u64 mask0 = u64_gte_mask(a0, 0x7ffffffffffedLLU);
+	u64 mask1 = u64_eq_mask(a1, 0x7ffffffffffffLLU);
+	u64 mask2 = u64_eq_mask(a2, 0x7ffffffffffffLLU);
+	u64 mask3 = u64_eq_mask(a3, 0x7ffffffffffffLLU);
+	u64 mask4 = u64_eq_mask(a4, 0x7ffffffffffffLLU);
+	u64 mask = (((mask0 & mask1) & mask2) & mask3) & mask4;
+	u64 a0_ = a0 - (0x7ffffffffffedLLU & mask);
+	u64 a1_ = a1 - (0x7ffffffffffffLLU & mask);
+	u64 a2_ = a2 - (0x7ffffffffffffLLU & mask);
+	u64 a3_ = a3 - (0x7ffffffffffffLLU & mask);
+	u64 a4_ = a4 - (0x7ffffffffffffLLU & mask);
+	input[0] = a0_;
+	input[1] = a1_;
+	input[2] = a2_;
+	input[3] = a3_;
+	input[4] = a4_;
+}
+
+static __always_inline void format_fcontract_store(u8 *output, u64 *input)
+{
+	u64 t0 = input[0];
+	u64 t1 = input[1];
+	u64 t2 = input[2];
+	u64 t3 = input[3];
+	u64 t4 = input[4];
+	u64 o0 = t1 << 51 | t0;
+	u64 o1 = t2 << 38 | t1 >> 13;
+	u64 o2 = t3 << 25 | t2 >> 26;
+	u64 o3 = t4 << 12 | t3 >> 39;
+	u8 *b0 = output;
+	u8 *b1 = output + 8;
+	u8 *b2 = output + 16;
+	u8 *b3 = output + 24;
+	put_unaligned_le64(o0, b0);
+	put_unaligned_le64(o1, b1);
+	put_unaligned_le64(o2, b2);
+	put_unaligned_le64(o3, b3);
+}
+
+static __always_inline void format_fcontract(u8 *output, u64 *input)
+{
+	format_fcontract_first_carry_full(input);
+	format_fcontract_second_carry_full(input);
+	format_fcontract_trim(input);
+	format_fcontract_store(output, input);
+}
+
+static __always_inline void format_scalar_of_point(u8 *scalar, u64 *point)
+{
+	u64 *x = point;
+	u64 *z = point + 5;
+	u64 buf[10] __aligned(32) = { 0 };
+	u64 *zmone = buf;
+	u64 *sc = buf + 5;
+	crecip(zmone, z);
+	fmul(sc, x, zmone);
+	format_fcontract(scalar, sc);
+}
+
+void curve25519_generic(u8 mypublic[CURVE25519_KEY_SIZE],
+			const u8 secret[CURVE25519_KEY_SIZE],
+			const u8 basepoint[CURVE25519_KEY_SIZE])
+{
+	u64 buf0[10] __aligned(32) = { 0 };
+	u64 *x0 = buf0;
+	u64 *z = buf0 + 5;
+	u64 *q;
+	format_fexpand(x0, basepoint);
+	z[0] = 1;
+	q = buf0;
+	{
+		u8 e[32] __aligned(32) = { 0 };
+		u8 *scalar;
+		memcpy(e, secret, 32);
+		curve25519_clamp_secret(e);
+		scalar = e;
+		{
+			u64 buf[15] = { 0 };
+			u64 *nq = buf;
+			u64 *x = nq;
+			x[0] = 1;
+			ladder_cmult(nq, scalar, q);
+			format_scalar_of_point(mypublic, nq);
+			memzero_explicit(buf, sizeof(buf));
+		}
+		memzero_explicit(e, sizeof(e));
+	}
+	memzero_explicit(buf0, sizeof(buf0));
+}
diff --git a/lib/crypto/curve25519-selftest.c b/lib/crypto/curve25519-selftest.c
new file mode 100644
index 0000000..c85e853
--- /dev/null
+++ b/lib/crypto/curve25519-selftest.c
@@ -0,0 +1,1321 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include <crypto/curve25519.h>
+
+struct curve25519_test_vector {
+	u8 private[CURVE25519_KEY_SIZE];
+	u8 public[CURVE25519_KEY_SIZE];
+	u8 result[CURVE25519_KEY_SIZE];
+	bool valid;
+};
+static const struct curve25519_test_vector curve25519_test_vectors[] __initconst = {
+	{
+		.private = { 0x77, 0x07, 0x6d, 0x0a, 0x73, 0x18, 0xa5, 0x7d,
+			     0x3c, 0x16, 0xc1, 0x72, 0x51, 0xb2, 0x66, 0x45,
+			     0xdf, 0x4c, 0x2f, 0x87, 0xeb, 0xc0, 0x99, 0x2a,
+			     0xb1, 0x77, 0xfb, 0xa5, 0x1d, 0xb9, 0x2c, 0x2a },
+		.public = { 0xde, 0x9e, 0xdb, 0x7d, 0x7b, 0x7d, 0xc1, 0xb4,
+			    0xd3, 0x5b, 0x61, 0xc2, 0xec, 0xe4, 0x35, 0x37,
+			    0x3f, 0x83, 0x43, 0xc8, 0x5b, 0x78, 0x67, 0x4d,
+			    0xad, 0xfc, 0x7e, 0x14, 0x6f, 0x88, 0x2b, 0x4f },
+		.result = { 0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d, 0xe1,
+			    0x72, 0x8e, 0x3b, 0xf4, 0x80, 0x35, 0x0f, 0x25,
+			    0xe0, 0x7e, 0x21, 0xc9, 0x47, 0xd1, 0x9e, 0x33,
+			    0x76, 0xf0, 0x9b, 0x3c, 0x1e, 0x16, 0x17, 0x42 },
+		.valid = true
+	},
+	{
+		.private = { 0x5d, 0xab, 0x08, 0x7e, 0x62, 0x4a, 0x8a, 0x4b,
+			     0x79, 0xe1, 0x7f, 0x8b, 0x83, 0x80, 0x0e, 0xe6,
+			     0x6f, 0x3b, 0xb1, 0x29, 0x26, 0x18, 0xb6, 0xfd,
+			     0x1c, 0x2f, 0x8b, 0x27, 0xff, 0x88, 0xe0, 0xeb },
+		.public = { 0x85, 0x20, 0xf0, 0x09, 0x89, 0x30, 0xa7, 0x54,
+			    0x74, 0x8b, 0x7d, 0xdc, 0xb4, 0x3e, 0xf7, 0x5a,
+			    0x0d, 0xbf, 0x3a, 0x0d, 0x26, 0x38, 0x1a, 0xf4,
+			    0xeb, 0xa4, 0xa9, 0x8e, 0xaa, 0x9b, 0x4e, 0x6a },
+		.result = { 0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d, 0xe1,
+			    0x72, 0x8e, 0x3b, 0xf4, 0x80, 0x35, 0x0f, 0x25,
+			    0xe0, 0x7e, 0x21, 0xc9, 0x47, 0xd1, 0x9e, 0x33,
+			    0x76, 0xf0, 0x9b, 0x3c, 0x1e, 0x16, 0x17, 0x42 },
+		.valid = true
+	},
+	{
+		.private = { 1 },
+		.public = { 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.result = { 0x3c, 0x77, 0x77, 0xca, 0xf9, 0x97, 0xb2, 0x64,
+			    0x41, 0x60, 0x77, 0x66, 0x5b, 0x4e, 0x22, 0x9d,
+			    0x0b, 0x95, 0x48, 0xdc, 0x0c, 0xd8, 0x19, 0x98,
+			    0xdd, 0xcd, 0xc5, 0xc8, 0x53, 0x3c, 0x79, 0x7f },
+		.valid = true
+	},
+	{
+		.private = { 1 },
+		.public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0xb3, 0x2d, 0x13, 0x62, 0xc2, 0x48, 0xd6, 0x2f,
+			    0xe6, 0x26, 0x19, 0xcf, 0xf0, 0x4d, 0xd4, 0x3d,
+			    0xb7, 0x3f, 0xfc, 0x1b, 0x63, 0x08, 0xed, 0xe3,
+			    0x0b, 0x78, 0xd8, 0x73, 0x80, 0xf1, 0xe8, 0x34 },
+		.valid = true
+	},
+	{
+		.private = { 0xa5, 0x46, 0xe3, 0x6b, 0xf0, 0x52, 0x7c, 0x9d,
+			     0x3b, 0x16, 0x15, 0x4b, 0x82, 0x46, 0x5e, 0xdd,
+			     0x62, 0x14, 0x4c, 0x0a, 0xc1, 0xfc, 0x5a, 0x18,
+			     0x50, 0x6a, 0x22, 0x44, 0xba, 0x44, 0x9a, 0xc4 },
+		.public = { 0xe6, 0xdb, 0x68, 0x67, 0x58, 0x30, 0x30, 0xdb,
+			    0x35, 0x94, 0xc1, 0xa4, 0x24, 0xb1, 0x5f, 0x7c,
+			    0x72, 0x66, 0x24, 0xec, 0x26, 0xb3, 0x35, 0x3b,
+			    0x10, 0xa9, 0x03, 0xa6, 0xd0, 0xab, 0x1c, 0x4c },
+		.result = { 0xc3, 0xda, 0x55, 0x37, 0x9d, 0xe9, 0xc6, 0x90,
+			    0x8e, 0x94, 0xea, 0x4d, 0xf2, 0x8d, 0x08, 0x4f,
+			    0x32, 0xec, 0xcf, 0x03, 0x49, 0x1c, 0x71, 0xf7,
+			    0x54, 0xb4, 0x07, 0x55, 0x77, 0xa2, 0x85, 0x52 },
+		.valid = true
+	},
+	{
+		.private = { 1, 2, 3, 4 },
+		.public = { 0 },
+		.result = { 0 },
+		.valid = false
+	},
+	{
+		.private = { 2, 4, 6, 8 },
+		.public = { 0xe0, 0xeb, 0x7a, 0x7c, 0x3b, 0x41, 0xb8, 0xae,
+			    0x16, 0x56, 0xe3, 0xfa, 0xf1, 0x9f, 0xc4, 0x6a,
+			    0xda, 0x09, 0x8d, 0xeb, 0x9c, 0x32, 0xb1, 0xfd,
+			    0x86, 0x62, 0x05, 0x16, 0x5f, 0x49, 0xb8 },
+		.result = { 0 },
+		.valid = false
+	},
+	{
+		.private = { 0xff, 0xff, 0xff, 0xff, 0x0a, 0xff, 0xff, 0xff,
+			     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0xfb, 0x9f },
+		.result = { 0x77, 0x52, 0xb6, 0x18, 0xc1, 0x2d, 0x48, 0xd2,
+			    0xc6, 0x93, 0x46, 0x83, 0x81, 0x7c, 0xc6, 0x57,
+			    0xf3, 0x31, 0x03, 0x19, 0x49, 0x48, 0x20, 0x05,
+			    0x42, 0x2b, 0x4e, 0xae, 0x8d, 0x1d, 0x43, 0x23 },
+		.valid = true
+	},
+	{
+		.private = { 0x8e, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.public = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x06 },
+		.result = { 0x5a, 0xdf, 0xaa, 0x25, 0x86, 0x8e, 0x32, 0x3d,
+			    0xae, 0x49, 0x62, 0xc1, 0x01, 0x5c, 0xb3, 0x12,
+			    0xe1, 0xc5, 0xc7, 0x9e, 0x95, 0x3f, 0x03, 0x99,
+			    0xb0, 0xba, 0x16, 0x22, 0xf3, 0xb6, 0xf7, 0x0c },
+		.valid = true
+	},
+	/* wycheproof - normal case */
+	{
+		.private = { 0x48, 0x52, 0x83, 0x4d, 0x9d, 0x6b, 0x77, 0xda,
+			     0xde, 0xab, 0xaa, 0xf2, 0xe1, 0x1d, 0xca, 0x66,
+			     0xd1, 0x9f, 0xe7, 0x49, 0x93, 0xa7, 0xbe, 0xc3,
+			     0x6c, 0x6e, 0x16, 0xa0, 0x98, 0x3f, 0xea, 0xba },
+		.public = { 0x9c, 0x64, 0x7d, 0x9a, 0xe5, 0x89, 0xb9, 0xf5,
+			    0x8f, 0xdc, 0x3c, 0xa4, 0x94, 0x7e, 0xfb, 0xc9,
+			    0x15, 0xc4, 0xb2, 0xe0, 0x8e, 0x74, 0x4a, 0x0e,
+			    0xdf, 0x46, 0x9d, 0xac, 0x59, 0xc8, 0xf8, 0x5a },
+		.result = { 0x87, 0xb7, 0xf2, 0x12, 0xb6, 0x27, 0xf7, 0xa5,
+			    0x4c, 0xa5, 0xe0, 0xbc, 0xda, 0xdd, 0xd5, 0x38,
+			    0x9d, 0x9d, 0xe6, 0x15, 0x6c, 0xdb, 0xcf, 0x8e,
+			    0xbe, 0x14, 0xff, 0xbc, 0xfb, 0x43, 0x65, 0x51 },
+		.valid = true
+	},
+	/* wycheproof - public key on twist */
+	{
+		.private = { 0x58, 0x8c, 0x06, 0x1a, 0x50, 0x80, 0x4a, 0xc4,
+			     0x88, 0xad, 0x77, 0x4a, 0xc7, 0x16, 0xc3, 0xf5,
+			     0xba, 0x71, 0x4b, 0x27, 0x12, 0xe0, 0x48, 0x49,
+			     0x13, 0x79, 0xa5, 0x00, 0x21, 0x19, 0x98, 0xa8 },
+		.public = { 0x63, 0xaa, 0x40, 0xc6, 0xe3, 0x83, 0x46, 0xc5,
+			    0xca, 0xf2, 0x3a, 0x6d, 0xf0, 0xa5, 0xe6, 0xc8,
+			    0x08, 0x89, 0xa0, 0x86, 0x47, 0xe5, 0x51, 0xb3,
+			    0x56, 0x34, 0x49, 0xbe, 0xfc, 0xfc, 0x97, 0x33 },
+		.result = { 0xb1, 0xa7, 0x07, 0x51, 0x94, 0x95, 0xff, 0xff,
+			    0xb2, 0x98, 0xff, 0x94, 0x17, 0x16, 0xb0, 0x6d,
+			    0xfa, 0xb8, 0x7c, 0xf8, 0xd9, 0x11, 0x23, 0xfe,
+			    0x2b, 0xe9, 0xa2, 0x33, 0xdd, 0xa2, 0x22, 0x12 },
+		.valid = true
+	},
+	/* wycheproof - public key on twist */
+	{
+		.private = { 0xb0, 0x5b, 0xfd, 0x32, 0xe5, 0x53, 0x25, 0xd9,
+			     0xfd, 0x64, 0x8c, 0xb3, 0x02, 0x84, 0x80, 0x39,
+			     0x00, 0x0b, 0x39, 0x0e, 0x44, 0xd5, 0x21, 0xe5,
+			     0x8a, 0xab, 0x3b, 0x29, 0xa6, 0x96, 0x0b, 0xa8 },
+		.public = { 0x0f, 0x83, 0xc3, 0x6f, 0xde, 0xd9, 0xd3, 0x2f,
+			    0xad, 0xf4, 0xef, 0xa3, 0xae, 0x93, 0xa9, 0x0b,
+			    0xb5, 0xcf, 0xa6, 0x68, 0x93, 0xbc, 0x41, 0x2c,
+			    0x43, 0xfa, 0x72, 0x87, 0xdb, 0xb9, 0x97, 0x79 },
+		.result = { 0x67, 0xdd, 0x4a, 0x6e, 0x16, 0x55, 0x33, 0x53,
+			    0x4c, 0x0e, 0x3f, 0x17, 0x2e, 0x4a, 0xb8, 0x57,
+			    0x6b, 0xca, 0x92, 0x3a, 0x5f, 0x07, 0xb2, 0xc0,
+			    0x69, 0xb4, 0xc3, 0x10, 0xff, 0x2e, 0x93, 0x5b },
+		.valid = true
+	},
+	/* wycheproof - public key on twist */
+	{
+		.private = { 0x70, 0xe3, 0x4b, 0xcb, 0xe1, 0xf4, 0x7f, 0xbc,
+			     0x0f, 0xdd, 0xfd, 0x7c, 0x1e, 0x1a, 0xa5, 0x3d,
+			     0x57, 0xbf, 0xe0, 0xf6, 0x6d, 0x24, 0x30, 0x67,
+			     0xb4, 0x24, 0xbb, 0x62, 0x10, 0xbe, 0xd1, 0x9c },
+		.public = { 0x0b, 0x82, 0x11, 0xa2, 0xb6, 0x04, 0x90, 0x97,
+			    0xf6, 0x87, 0x1c, 0x6c, 0x05, 0x2d, 0x3c, 0x5f,
+			    0xc1, 0xba, 0x17, 0xda, 0x9e, 0x32, 0xae, 0x45,
+			    0x84, 0x03, 0xb0, 0x5b, 0xb2, 0x83, 0x09, 0x2a },
+		.result = { 0x4a, 0x06, 0x38, 0xcf, 0xaa, 0x9e, 0xf1, 0x93,
+			    0x3b, 0x47, 0xf8, 0x93, 0x92, 0x96, 0xa6, 0xb2,
+			    0x5b, 0xe5, 0x41, 0xef, 0x7f, 0x70, 0xe8, 0x44,
+			    0xc0, 0xbc, 0xc0, 0x0b, 0x13, 0x4d, 0xe6, 0x4a },
+		.valid = true
+	},
+	/* wycheproof - public key on twist */
+	{
+		.private = { 0x68, 0xc1, 0xf3, 0xa6, 0x53, 0xa4, 0xcd, 0xb1,
+			     0xd3, 0x7b, 0xba, 0x94, 0x73, 0x8f, 0x8b, 0x95,
+			     0x7a, 0x57, 0xbe, 0xb2, 0x4d, 0x64, 0x6e, 0x99,
+			     0x4d, 0xc2, 0x9a, 0x27, 0x6a, 0xad, 0x45, 0x8d },
+		.public = { 0x34, 0x3a, 0xc2, 0x0a, 0x3b, 0x9c, 0x6a, 0x27,
+			    0xb1, 0x00, 0x81, 0x76, 0x50, 0x9a, 0xd3, 0x07,
+			    0x35, 0x85, 0x6e, 0xc1, 0xc8, 0xd8, 0xfc, 0xae,
+			    0x13, 0x91, 0x2d, 0x08, 0xd1, 0x52, 0xf4, 0x6c },
+		.result = { 0x39, 0x94, 0x91, 0xfc, 0xe8, 0xdf, 0xab, 0x73,
+			    0xb4, 0xf9, 0xf6, 0x11, 0xde, 0x8e, 0xa0, 0xb2,
+			    0x7b, 0x28, 0xf8, 0x59, 0x94, 0x25, 0x0b, 0x0f,
+			    0x47, 0x5d, 0x58, 0x5d, 0x04, 0x2a, 0xc2, 0x07 },
+		.valid = true
+	},
+	/* wycheproof - public key on twist */
+	{
+		.private = { 0xd8, 0x77, 0xb2, 0x6d, 0x06, 0xdf, 0xf9, 0xd9,
+			     0xf7, 0xfd, 0x4c, 0x5b, 0x37, 0x69, 0xf8, 0xcd,
+			     0xd5, 0xb3, 0x05, 0x16, 0xa5, 0xab, 0x80, 0x6b,
+			     0xe3, 0x24, 0xff, 0x3e, 0xb6, 0x9e, 0xa0, 0xb2 },
+		.public = { 0xfa, 0x69, 0x5f, 0xc7, 0xbe, 0x8d, 0x1b, 0xe5,
+			    0xbf, 0x70, 0x48, 0x98, 0xf3, 0x88, 0xc4, 0x52,
+			    0xba, 0xfd, 0xd3, 0xb8, 0xea, 0xe8, 0x05, 0xf8,
+			    0x68, 0x1a, 0x8d, 0x15, 0xc2, 0xd4, 0xe1, 0x42 },
+		.result = { 0x2c, 0x4f, 0xe1, 0x1d, 0x49, 0x0a, 0x53, 0x86,
+			    0x17, 0x76, 0xb1, 0x3b, 0x43, 0x54, 0xab, 0xd4,
+			    0xcf, 0x5a, 0x97, 0x69, 0x9d, 0xb6, 0xe6, 0xc6,
+			    0x8c, 0x16, 0x26, 0xd0, 0x76, 0x62, 0xf7, 0x58 },
+		.valid = true
+	},
+	/* wycheproof - public key = 0 */
+	{
+		.private = { 0x20, 0x74, 0x94, 0x03, 0x8f, 0x2b, 0xb8, 0x11,
+			     0xd4, 0x78, 0x05, 0xbc, 0xdf, 0x04, 0xa2, 0xac,
+			     0x58, 0x5a, 0xda, 0x7f, 0x2f, 0x23, 0x38, 0x9b,
+			     0xfd, 0x46, 0x58, 0xf9, 0xdd, 0xd4, 0xde, 0xbc },
+		.public = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.valid = false
+	},
+	/* wycheproof - public key = 1 */
+	{
+		.private = { 0x20, 0x2e, 0x89, 0x72, 0xb6, 0x1c, 0x7e, 0x61,
+			     0x93, 0x0e, 0xb9, 0x45, 0x0b, 0x50, 0x70, 0xea,
+			     0xe1, 0xc6, 0x70, 0x47, 0x56, 0x85, 0x54, 0x1f,
+			     0x04, 0x76, 0x21, 0x7e, 0x48, 0x18, 0xcf, 0xab },
+		.public = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.valid = false
+	},
+	/* wycheproof - edge case on twist */
+	{
+		.private = { 0x38, 0xdd, 0xe9, 0xf3, 0xe7, 0xb7, 0x99, 0x04,
+			     0x5f, 0x9a, 0xc3, 0x79, 0x3d, 0x4a, 0x92, 0x77,
+			     0xda, 0xde, 0xad, 0xc4, 0x1b, 0xec, 0x02, 0x90,
+			     0xf8, 0x1f, 0x74, 0x4f, 0x73, 0x77, 0x5f, 0x84 },
+		.public = { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.result = { 0x9a, 0x2c, 0xfe, 0x84, 0xff, 0x9c, 0x4a, 0x97,
+			    0x39, 0x62, 0x5c, 0xae, 0x4a, 0x3b, 0x82, 0xa9,
+			    0x06, 0x87, 0x7a, 0x44, 0x19, 0x46, 0xf8, 0xd7,
+			    0xb3, 0xd7, 0x95, 0xfe, 0x8f, 0x5d, 0x16, 0x39 },
+		.valid = true
+	},
+	/* wycheproof - edge case on twist */
+	{
+		.private = { 0x98, 0x57, 0xa9, 0x14, 0xe3, 0xc2, 0x90, 0x36,
+			     0xfd, 0x9a, 0x44, 0x2b, 0xa5, 0x26, 0xb5, 0xcd,
+			     0xcd, 0xf2, 0x82, 0x16, 0x15, 0x3e, 0x63, 0x6c,
+			     0x10, 0x67, 0x7a, 0xca, 0xb6, 0xbd, 0x6a, 0xa5 },
+		.public = { 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.result = { 0x4d, 0xa4, 0xe0, 0xaa, 0x07, 0x2c, 0x23, 0x2e,
+			    0xe2, 0xf0, 0xfa, 0x4e, 0x51, 0x9a, 0xe5, 0x0b,
+			    0x52, 0xc1, 0xed, 0xd0, 0x8a, 0x53, 0x4d, 0x4e,
+			    0xf3, 0x46, 0xc2, 0xe1, 0x06, 0xd2, 0x1d, 0x60 },
+		.valid = true
+	},
+	/* wycheproof - edge case on twist */
+	{
+		.private = { 0x48, 0xe2, 0x13, 0x0d, 0x72, 0x33, 0x05, 0xed,
+			     0x05, 0xe6, 0xe5, 0x89, 0x4d, 0x39, 0x8a, 0x5e,
+			     0x33, 0x36, 0x7a, 0x8c, 0x6a, 0xac, 0x8f, 0xcd,
+			     0xf0, 0xa8, 0x8e, 0x4b, 0x42, 0x82, 0x0d, 0xb7 },
+		.public = { 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xf8, 0xff,
+			    0xff, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff,
+			    0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x07, 0x00,
+			    0x00, 0xf0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00 },
+		.result = { 0x9e, 0xd1, 0x0c, 0x53, 0x74, 0x7f, 0x64, 0x7f,
+			    0x82, 0xf4, 0x51, 0x25, 0xd3, 0xde, 0x15, 0xa1,
+			    0xe6, 0xb8, 0x24, 0x49, 0x6a, 0xb4, 0x04, 0x10,
+			    0xff, 0xcc, 0x3c, 0xfe, 0x95, 0x76, 0x0f, 0x3b },
+		.valid = true
+	},
+	/* wycheproof - edge case on twist */
+	{
+		.private = { 0x28, 0xf4, 0x10, 0x11, 0x69, 0x18, 0x51, 0xb3,
+			     0xa6, 0x2b, 0x64, 0x15, 0x53, 0xb3, 0x0d, 0x0d,
+			     0xfd, 0xdc, 0xb8, 0xff, 0xfc, 0xf5, 0x37, 0x00,
+			     0xa7, 0xbe, 0x2f, 0x6a, 0x87, 0x2e, 0x9f, 0xb0 },
+		.public = { 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0x00,
+			    0x00, 0xe0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00,
+			    0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0xf8, 0xff,
+			    0xff, 0x0f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x7f },
+		.result = { 0xcf, 0x72, 0xb4, 0xaa, 0x6a, 0xa1, 0xc9, 0xf8,
+			    0x94, 0xf4, 0x16, 0x5b, 0x86, 0x10, 0x9a, 0xa4,
+			    0x68, 0x51, 0x76, 0x48, 0xe1, 0xf0, 0xcc, 0x70,
+			    0xe1, 0xab, 0x08, 0x46, 0x01, 0x76, 0x50, 0x6b },
+		.valid = true
+	},
+	/* wycheproof - edge case on twist */
+	{
+		.private = { 0x18, 0xa9, 0x3b, 0x64, 0x99, 0xb9, 0xf6, 0xb3,
+			     0x22, 0x5c, 0xa0, 0x2f, 0xef, 0x41, 0x0e, 0x0a,
+			     0xde, 0xc2, 0x35, 0x32, 0x32, 0x1d, 0x2d, 0x8e,
+			     0xf1, 0xa6, 0xd6, 0x02, 0xa8, 0xc6, 0x5b, 0x83 },
+		.public = { 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+			    0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+			    0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+			    0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 0x5d, 0x50, 0xb6, 0x28, 0x36, 0xbb, 0x69, 0x57,
+			    0x94, 0x10, 0x38, 0x6c, 0xf7, 0xbb, 0x81, 0x1c,
+			    0x14, 0xbf, 0x85, 0xb1, 0xc7, 0xb1, 0x7e, 0x59,
+			    0x24, 0xc7, 0xff, 0xea, 0x91, 0xef, 0x9e, 0x12 },
+		.valid = true
+	},
+	/* wycheproof - edge case on twist */
+	{
+		.private = { 0xc0, 0x1d, 0x13, 0x05, 0xa1, 0x33, 0x8a, 0x1f,
+			     0xca, 0xc2, 0xba, 0x7e, 0x2e, 0x03, 0x2b, 0x42,
+			     0x7e, 0x0b, 0x04, 0x90, 0x31, 0x65, 0xac, 0xa9,
+			     0x57, 0xd8, 0xd0, 0x55, 0x3d, 0x87, 0x17, 0xb0 },
+		.public = { 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 0x19, 0x23, 0x0e, 0xb1, 0x48, 0xd5, 0xd6, 0x7c,
+			    0x3c, 0x22, 0xab, 0x1d, 0xae, 0xff, 0x80, 0xa5,
+			    0x7e, 0xae, 0x42, 0x65, 0xce, 0x28, 0x72, 0x65,
+			    0x7b, 0x2c, 0x80, 0x99, 0xfc, 0x69, 0x8e, 0x50 },
+		.valid = true
+	},
+	/* wycheproof - edge case for public key */
+	{
+		.private = { 0x38, 0x6f, 0x7f, 0x16, 0xc5, 0x07, 0x31, 0xd6,
+			     0x4f, 0x82, 0xe6, 0xa1, 0x70, 0xb1, 0x42, 0xa4,
+			     0xe3, 0x4f, 0x31, 0xfd, 0x77, 0x68, 0xfc, 0xb8,
+			     0x90, 0x29, 0x25, 0xe7, 0xd1, 0xe2, 0x1a, 0xbe },
+		.public = { 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.result = { 0x0f, 0xca, 0xb5, 0xd8, 0x42, 0xa0, 0x78, 0xd7,
+			    0xa7, 0x1f, 0xc5, 0x9b, 0x57, 0xbf, 0xb4, 0xca,
+			    0x0b, 0xe6, 0x87, 0x3b, 0x49, 0xdc, 0xdb, 0x9f,
+			    0x44, 0xe1, 0x4a, 0xe8, 0xfb, 0xdf, 0xa5, 0x42 },
+		.valid = true
+	},
+	/* wycheproof - edge case for public key */
+	{
+		.private = { 0xe0, 0x23, 0xa2, 0x89, 0xbd, 0x5e, 0x90, 0xfa,
+			     0x28, 0x04, 0xdd, 0xc0, 0x19, 0xa0, 0x5e, 0xf3,
+			     0xe7, 0x9d, 0x43, 0x4b, 0xb6, 0xea, 0x2f, 0x52,
+			     0x2e, 0xcb, 0x64, 0x3a, 0x75, 0x29, 0x6e, 0x95 },
+		.public = { 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+			    0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+			    0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+			    0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 },
+		.result = { 0x54, 0xce, 0x8f, 0x22, 0x75, 0xc0, 0x77, 0xe3,
+			    0xb1, 0x30, 0x6a, 0x39, 0x39, 0xc5, 0xe0, 0x3e,
+			    0xef, 0x6b, 0xbb, 0x88, 0x06, 0x05, 0x44, 0x75,
+			    0x8d, 0x9f, 0xef, 0x59, 0xb0, 0xbc, 0x3e, 0x4f },
+		.valid = true
+	},
+	/* wycheproof - edge case for public key */
+	{
+		.private = { 0x68, 0xf0, 0x10, 0xd6, 0x2e, 0xe8, 0xd9, 0x26,
+			     0x05, 0x3a, 0x36, 0x1c, 0x3a, 0x75, 0xc6, 0xea,
+			     0x4e, 0xbd, 0xc8, 0x60, 0x6a, 0xb2, 0x85, 0x00,
+			     0x3a, 0x6f, 0x8f, 0x40, 0x76, 0xb0, 0x1e, 0x83 },
+		.public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03 },
+		.result = { 0xf1, 0x36, 0x77, 0x5c, 0x5b, 0xeb, 0x0a, 0xf8,
+			    0x11, 0x0a, 0xf1, 0x0b, 0x20, 0x37, 0x23, 0x32,
+			    0x04, 0x3c, 0xab, 0x75, 0x24, 0x19, 0x67, 0x87,
+			    0x75, 0xa2, 0x23, 0xdf, 0x57, 0xc9, 0xd3, 0x0d },
+		.valid = true
+	},
+	/* wycheproof - edge case for public key */
+	{
+		.private = { 0x58, 0xeb, 0xcb, 0x35, 0xb0, 0xf8, 0x84, 0x5c,
+			     0xaf, 0x1e, 0xc6, 0x30, 0xf9, 0x65, 0x76, 0xb6,
+			     0x2c, 0x4b, 0x7b, 0x6c, 0x36, 0xb2, 0x9d, 0xeb,
+			     0x2c, 0xb0, 0x08, 0x46, 0x51, 0x75, 0x5c, 0x96 },
+		.public = { 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfb, 0xff,
+			    0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
+			    0xfe, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xf7, 0xff,
+			    0xff, 0xf7, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x3f },
+		.result = { 0xbf, 0x9a, 0xff, 0xd0, 0x6b, 0x84, 0x40, 0x85,
+			    0x58, 0x64, 0x60, 0x96, 0x2e, 0xf2, 0x14, 0x6f,
+			    0xf3, 0xd4, 0x53, 0x3d, 0x94, 0x44, 0xaa, 0xb0,
+			    0x06, 0xeb, 0x88, 0xcc, 0x30, 0x54, 0x40, 0x7d },
+		.valid = true
+	},
+	/* wycheproof - edge case for public key */
+	{
+		.private = { 0x18, 0x8c, 0x4b, 0xc5, 0xb9, 0xc4, 0x4b, 0x38,
+			     0xbb, 0x65, 0x8b, 0x9b, 0x2a, 0xe8, 0x2d, 0x5b,
+			     0x01, 0x01, 0x5e, 0x09, 0x31, 0x84, 0xb1, 0x7c,
+			     0xb7, 0x86, 0x35, 0x03, 0xa7, 0x83, 0xe1, 0xbb },
+		.public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+		.result = { 0xd4, 0x80, 0xde, 0x04, 0xf6, 0x99, 0xcb, 0x3b,
+			    0xe0, 0x68, 0x4a, 0x9c, 0xc2, 0xe3, 0x12, 0x81,
+			    0xea, 0x0b, 0xc5, 0xa9, 0xdc, 0xc1, 0x57, 0xd3,
+			    0xd2, 0x01, 0x58, 0xd4, 0x6c, 0xa5, 0x24, 0x6d },
+		.valid = true
+	},
+	/* wycheproof - edge case for public key */
+	{
+		.private = { 0xe0, 0x6c, 0x11, 0xbb, 0x2e, 0x13, 0xce, 0x3d,
+			     0xc7, 0x67, 0x3f, 0x67, 0xf5, 0x48, 0x22, 0x42,
+			     0x90, 0x94, 0x23, 0xa9, 0xae, 0x95, 0xee, 0x98,
+			     0x6a, 0x98, 0x8d, 0x98, 0xfa, 0xee, 0x23, 0xa2 },
+		.public = { 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f,
+			    0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f,
+			    0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f,
+			    0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f },
+		.result = { 0x4c, 0x44, 0x01, 0xcc, 0xe6, 0xb5, 0x1e, 0x4c,
+			    0xb1, 0x8f, 0x27, 0x90, 0x24, 0x6c, 0x9b, 0xf9,
+			    0x14, 0xdb, 0x66, 0x77, 0x50, 0xa1, 0xcb, 0x89,
+			    0x06, 0x90, 0x92, 0xaf, 0x07, 0x29, 0x22, 0x76 },
+		.valid = true
+	},
+	/* wycheproof - edge case for public key */
+	{
+		.private = { 0xc0, 0x65, 0x8c, 0x46, 0xdd, 0xe1, 0x81, 0x29,
+			     0x29, 0x38, 0x77, 0x53, 0x5b, 0x11, 0x62, 0xb6,
+			     0xf9, 0xf5, 0x41, 0x4a, 0x23, 0xcf, 0x4d, 0x2c,
+			     0xbc, 0x14, 0x0a, 0x4d, 0x99, 0xda, 0x2b, 0x8f },
+		.public = { 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 0x57, 0x8b, 0xa8, 0xcc, 0x2d, 0xbd, 0xc5, 0x75,
+			    0xaf, 0xcf, 0x9d, 0xf2, 0xb3, 0xee, 0x61, 0x89,
+			    0xf5, 0x33, 0x7d, 0x68, 0x54, 0xc7, 0x9b, 0x4c,
+			    0xe1, 0x65, 0xea, 0x12, 0x29, 0x3b, 0x3a, 0x0f },
+		.valid = true
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0x10, 0x25, 0x5c, 0x92, 0x30, 0xa9, 0x7a, 0x30,
+			     0xa4, 0x58, 0xca, 0x28, 0x4a, 0x62, 0x96, 0x69,
+			     0x29, 0x3a, 0x31, 0x89, 0x0c, 0xda, 0x9d, 0x14,
+			     0x7f, 0xeb, 0xc7, 0xd1, 0xe2, 0x2d, 0x6b, 0xb1 },
+		.public = { 0xe0, 0xeb, 0x7a, 0x7c, 0x3b, 0x41, 0xb8, 0xae,
+			    0x16, 0x56, 0xe3, 0xfa, 0xf1, 0x9f, 0xc4, 0x6a,
+			    0xda, 0x09, 0x8d, 0xeb, 0x9c, 0x32, 0xb1, 0xfd,
+			    0x86, 0x62, 0x05, 0x16, 0x5f, 0x49, 0xb8, 0x00 },
+		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0x78, 0xf1, 0xe8, 0xed, 0xf1, 0x44, 0x81, 0xb3,
+			     0x89, 0x44, 0x8d, 0xac, 0x8f, 0x59, 0xc7, 0x0b,
+			     0x03, 0x8e, 0x7c, 0xf9, 0x2e, 0xf2, 0xc7, 0xef,
+			     0xf5, 0x7a, 0x72, 0x46, 0x6e, 0x11, 0x52, 0x96 },
+		.public = { 0x5f, 0x9c, 0x95, 0xbc, 0xa3, 0x50, 0x8c, 0x24,
+			    0xb1, 0xd0, 0xb1, 0x55, 0x9c, 0x83, 0xef, 0x5b,
+			    0x04, 0x44, 0x5c, 0xc4, 0x58, 0x1c, 0x8e, 0x86,
+			    0xd8, 0x22, 0x4e, 0xdd, 0xd0, 0x9f, 0x11, 0x57 },
+		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0xa0, 0xa0, 0x5a, 0x3e, 0x8f, 0x9f, 0x44, 0x20,
+			     0x4d, 0x5f, 0x80, 0x59, 0xa9, 0x4a, 0xc7, 0xdf,
+			     0xc3, 0x9a, 0x49, 0xac, 0x01, 0x6d, 0xd7, 0x43,
+			     0xdb, 0xfa, 0x43, 0xc5, 0xd6, 0x71, 0xfd, 0x88 },
+		.public = { 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0xd0, 0xdb, 0xb3, 0xed, 0x19, 0x06, 0x66, 0x3f,
+			     0x15, 0x42, 0x0a, 0xf3, 0x1f, 0x4e, 0xaf, 0x65,
+			     0x09, 0xd9, 0xa9, 0x94, 0x97, 0x23, 0x50, 0x06,
+			     0x05, 0xad, 0x7c, 0x1c, 0x6e, 0x74, 0x50, 0xa9 },
+		.public = { 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0xc0, 0xb1, 0xd0, 0xeb, 0x22, 0xb2, 0x44, 0xfe,
+			     0x32, 0x91, 0x14, 0x00, 0x72, 0xcd, 0xd9, 0xd9,
+			     0x89, 0xb5, 0xf0, 0xec, 0xd9, 0x6c, 0x10, 0x0f,
+			     0xeb, 0x5b, 0xca, 0x24, 0x1c, 0x1d, 0x9f, 0x8f },
+		.public = { 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0x48, 0x0b, 0xf4, 0x5f, 0x59, 0x49, 0x42, 0xa8,
+			     0xbc, 0x0f, 0x33, 0x53, 0xc6, 0xe8, 0xb8, 0x85,
+			     0x3d, 0x77, 0xf3, 0x51, 0xf1, 0xc2, 0xca, 0x6c,
+			     0x2d, 0x1a, 0xbf, 0x8a, 0x00, 0xb4, 0x22, 0x9c },
+		.public = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
+		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0x30, 0xf9, 0x93, 0xfc, 0xf8, 0x51, 0x4f, 0xc8,
+			     0x9b, 0xd8, 0xdb, 0x14, 0xcd, 0x43, 0xba, 0x0d,
+			     0x4b, 0x25, 0x30, 0xe7, 0x3c, 0x42, 0x76, 0xa0,
+			     0x5e, 0x1b, 0x14, 0x5d, 0x42, 0x0c, 0xed, 0xb4 },
+		.public = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
+		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0xc0, 0x49, 0x74, 0xb7, 0x58, 0x38, 0x0e, 0x2a,
+			     0x5b, 0x5d, 0xf6, 0xeb, 0x09, 0xbb, 0x2f, 0x6b,
+			     0x34, 0x34, 0xf9, 0x82, 0x72, 0x2a, 0x8e, 0x67,
+			     0x6d, 0x3d, 0xa2, 0x51, 0xd1, 0xb3, 0xde, 0x83 },
+		.public = { 0xe0, 0xeb, 0x7a, 0x7c, 0x3b, 0x41, 0xb8, 0xae,
+			    0x16, 0x56, 0xe3, 0xfa, 0xf1, 0x9f, 0xc4, 0x6a,
+			    0xda, 0x09, 0x8d, 0xeb, 0x9c, 0x32, 0xb1, 0xfd,
+			    0x86, 0x62, 0x05, 0x16, 0x5f, 0x49, 0xb8, 0x80 },
+		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0x50, 0x2a, 0x31, 0x37, 0x3d, 0xb3, 0x24, 0x46,
+			     0x84, 0x2f, 0xe5, 0xad, 0xd3, 0xe0, 0x24, 0x02,
+			     0x2e, 0xa5, 0x4f, 0x27, 0x41, 0x82, 0xaf, 0xc3,
+			     0xd9, 0xf1, 0xbb, 0x3d, 0x39, 0x53, 0x4e, 0xb5 },
+		.public = { 0x5f, 0x9c, 0x95, 0xbc, 0xa3, 0x50, 0x8c, 0x24,
+			    0xb1, 0xd0, 0xb1, 0x55, 0x9c, 0x83, 0xef, 0x5b,
+			    0x04, 0x44, 0x5c, 0xc4, 0x58, 0x1c, 0x8e, 0x86,
+			    0xd8, 0x22, 0x4e, 0xdd, 0xd0, 0x9f, 0x11, 0xd7 },
+		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0x90, 0xfa, 0x64, 0x17, 0xb0, 0xe3, 0x70, 0x30,
+			     0xfd, 0x6e, 0x43, 0xef, 0xf2, 0xab, 0xae, 0xf1,
+			     0x4c, 0x67, 0x93, 0x11, 0x7a, 0x03, 0x9c, 0xf6,
+			     0x21, 0x31, 0x8b, 0xa9, 0x0f, 0x4e, 0x98, 0xbe },
+		.public = { 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0x78, 0xad, 0x3f, 0x26, 0x02, 0x7f, 0x1c, 0x9f,
+			     0xdd, 0x97, 0x5a, 0x16, 0x13, 0xb9, 0x47, 0x77,
+			     0x9b, 0xad, 0x2c, 0xf2, 0xb7, 0x41, 0xad, 0xe0,
+			     0x18, 0x40, 0x88, 0x5a, 0x30, 0xbb, 0x97, 0x9c },
+		.public = { 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0x98, 0xe2, 0x3d, 0xe7, 0xb1, 0xe0, 0x92, 0x6e,
+			     0xd9, 0xc8, 0x7e, 0x7b, 0x14, 0xba, 0xf5, 0x5f,
+			     0x49, 0x7a, 0x1d, 0x70, 0x96, 0xf9, 0x39, 0x77,
+			     0x68, 0x0e, 0x44, 0xdc, 0x1c, 0x7b, 0x7b, 0x8b },
+		.public = { 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.valid = false
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0xf0, 0x1e, 0x48, 0xda, 0xfa, 0xc9, 0xd7, 0xbc,
+			     0xf5, 0x89, 0xcb, 0xc3, 0x82, 0xc8, 0x78, 0xd1,
+			     0x8b, 0xda, 0x35, 0x50, 0x58, 0x9f, 0xfb, 0x5d,
+			     0x50, 0xb5, 0x23, 0xbe, 0xbe, 0x32, 0x9d, 0xae },
+		.public = { 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 0xbd, 0x36, 0xa0, 0x79, 0x0e, 0xb8, 0x83, 0x09,
+			    0x8c, 0x98, 0x8b, 0x21, 0x78, 0x67, 0x73, 0xde,
+			    0x0b, 0x3a, 0x4d, 0xf1, 0x62, 0x28, 0x2c, 0xf1,
+			    0x10, 0xde, 0x18, 0xdd, 0x48, 0x4c, 0xe7, 0x4b },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x28, 0x87, 0x96, 0xbc, 0x5a, 0xff, 0x4b, 0x81,
+			     0xa3, 0x75, 0x01, 0x75, 0x7b, 0xc0, 0x75, 0x3a,
+			     0x3c, 0x21, 0x96, 0x47, 0x90, 0xd3, 0x86, 0x99,
+			     0x30, 0x8d, 0xeb, 0xc1, 0x7a, 0x6e, 0xaf, 0x8d },
+		.public = { 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 0xb4, 0xe0, 0xdd, 0x76, 0xda, 0x7b, 0x07, 0x17,
+			    0x28, 0xb6, 0x1f, 0x85, 0x67, 0x71, 0xaa, 0x35,
+			    0x6e, 0x57, 0xed, 0xa7, 0x8a, 0x5b, 0x16, 0x55,
+			    0xcc, 0x38, 0x20, 0xfb, 0x5f, 0x85, 0x4c, 0x5c },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x98, 0xdf, 0x84, 0x5f, 0x66, 0x51, 0xbf, 0x11,
+			     0x38, 0x22, 0x1f, 0x11, 0x90, 0x41, 0xf7, 0x2b,
+			     0x6d, 0xbc, 0x3c, 0x4a, 0xce, 0x71, 0x43, 0xd9,
+			     0x9f, 0xd5, 0x5a, 0xd8, 0x67, 0x48, 0x0d, 0xa8 },
+		.public = { 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 0x6f, 0xdf, 0x6c, 0x37, 0x61, 0x1d, 0xbd, 0x53,
+			    0x04, 0xdc, 0x0f, 0x2e, 0xb7, 0xc9, 0x51, 0x7e,
+			    0xb3, 0xc5, 0x0e, 0x12, 0xfd, 0x05, 0x0a, 0xc6,
+			    0xde, 0xc2, 0x70, 0x71, 0xd4, 0xbf, 0xc0, 0x34 },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0xf0, 0x94, 0x98, 0xe4, 0x6f, 0x02, 0xf8, 0x78,
+			     0x82, 0x9e, 0x78, 0xb8, 0x03, 0xd3, 0x16, 0xa2,
+			     0xed, 0x69, 0x5d, 0x04, 0x98, 0xa0, 0x8a, 0xbd,
+			     0xf8, 0x27, 0x69, 0x30, 0xe2, 0x4e, 0xdc, 0xb0 },
+		.public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 0x4c, 0x8f, 0xc4, 0xb1, 0xc6, 0xab, 0x88, 0xfb,
+			    0x21, 0xf1, 0x8f, 0x6d, 0x4c, 0x81, 0x02, 0x40,
+			    0xd4, 0xe9, 0x46, 0x51, 0xba, 0x44, 0xf7, 0xa2,
+			    0xc8, 0x63, 0xce, 0xc7, 0xdc, 0x56, 0x60, 0x2d },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x18, 0x13, 0xc1, 0x0a, 0x5c, 0x7f, 0x21, 0xf9,
+			     0x6e, 0x17, 0xf2, 0x88, 0xc0, 0xcc, 0x37, 0x60,
+			     0x7c, 0x04, 0xc5, 0xf5, 0xae, 0xa2, 0xdb, 0x13,
+			     0x4f, 0x9e, 0x2f, 0xfc, 0x66, 0xbd, 0x9d, 0xb8 },
+		.public = { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
+		.result = { 0x1c, 0xd0, 0xb2, 0x82, 0x67, 0xdc, 0x54, 0x1c,
+			    0x64, 0x2d, 0x6d, 0x7d, 0xca, 0x44, 0xa8, 0xb3,
+			    0x8a, 0x63, 0x73, 0x6e, 0xef, 0x5c, 0x4e, 0x65,
+			    0x01, 0xff, 0xbb, 0xb1, 0x78, 0x0c, 0x03, 0x3c },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x78, 0x57, 0xfb, 0x80, 0x86, 0x53, 0x64, 0x5a,
+			     0x0b, 0xeb, 0x13, 0x8a, 0x64, 0xf5, 0xf4, 0xd7,
+			     0x33, 0xa4, 0x5e, 0xa8, 0x4c, 0x3c, 0xda, 0x11,
+			     0xa9, 0xc0, 0x6f, 0x7e, 0x71, 0x39, 0x14, 0x9e },
+		.public = { 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
+		.result = { 0x87, 0x55, 0xbe, 0x01, 0xc6, 0x0a, 0x7e, 0x82,
+			    0x5c, 0xff, 0x3e, 0x0e, 0x78, 0xcb, 0x3a, 0xa4,
+			    0x33, 0x38, 0x61, 0x51, 0x6a, 0xa5, 0x9b, 0x1c,
+			    0x51, 0xa8, 0xb2, 0xa5, 0x43, 0xdf, 0xa8, 0x22 },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0xe0, 0x3a, 0xa8, 0x42, 0xe2, 0xab, 0xc5, 0x6e,
+			     0x81, 0xe8, 0x7b, 0x8b, 0x9f, 0x41, 0x7b, 0x2a,
+			     0x1e, 0x59, 0x13, 0xc7, 0x23, 0xee, 0xd2, 0x8d,
+			     0x75, 0x2f, 0x8d, 0x47, 0xa5, 0x9f, 0x49, 0x8f },
+		.public = { 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 },
+		.result = { 0x54, 0xc9, 0xa1, 0xed, 0x95, 0xe5, 0x46, 0xd2,
+			    0x78, 0x22, 0xa3, 0x60, 0x93, 0x1d, 0xda, 0x60,
+			    0xa1, 0xdf, 0x04, 0x9d, 0xa6, 0xf9, 0x04, 0x25,
+			    0x3c, 0x06, 0x12, 0xbb, 0xdc, 0x08, 0x74, 0x76 },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0xf8, 0xf7, 0x07, 0xb7, 0x99, 0x9b, 0x18, 0xcb,
+			     0x0d, 0x6b, 0x96, 0x12, 0x4f, 0x20, 0x45, 0x97,
+			     0x2c, 0xa2, 0x74, 0xbf, 0xc1, 0x54, 0xad, 0x0c,
+			     0x87, 0x03, 0x8c, 0x24, 0xc6, 0xd0, 0xd4, 0xb2 },
+		.public = { 0xda, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0xcc, 0x1f, 0x40, 0xd7, 0x43, 0xcd, 0xc2, 0x23,
+			    0x0e, 0x10, 0x43, 0xda, 0xba, 0x8b, 0x75, 0xe8,
+			    0x10, 0xf1, 0xfb, 0xab, 0x7f, 0x25, 0x52, 0x69,
+			    0xbd, 0x9e, 0xbb, 0x29, 0xe6, 0xbf, 0x49, 0x4f },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0xa0, 0x34, 0xf6, 0x84, 0xfa, 0x63, 0x1e, 0x1a,
+			     0x34, 0x81, 0x18, 0xc1, 0xce, 0x4c, 0x98, 0x23,
+			     0x1f, 0x2d, 0x9e, 0xec, 0x9b, 0xa5, 0x36, 0x5b,
+			     0x4a, 0x05, 0xd6, 0x9a, 0x78, 0x5b, 0x07, 0x96 },
+		.public = { 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0x54, 0x99, 0x8e, 0xe4, 0x3a, 0x5b, 0x00, 0x7b,
+			    0xf4, 0x99, 0xf0, 0x78, 0xe7, 0x36, 0x52, 0x44,
+			    0x00, 0xa8, 0xb5, 0xc7, 0xe9, 0xb9, 0xb4, 0x37,
+			    0x71, 0x74, 0x8c, 0x7c, 0xdf, 0x88, 0x04, 0x12 },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x30, 0xb6, 0xc6, 0xa0, 0xf2, 0xff, 0xa6, 0x80,
+			     0x76, 0x8f, 0x99, 0x2b, 0xa8, 0x9e, 0x15, 0x2d,
+			     0x5b, 0xc9, 0x89, 0x3d, 0x38, 0xc9, 0x11, 0x9b,
+			     0xe4, 0xf7, 0x67, 0xbf, 0xab, 0x6e, 0x0c, 0xa5 },
+		.public = { 0xdc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0xea, 0xd9, 0xb3, 0x8e, 0xfd, 0xd7, 0x23, 0x63,
+			    0x79, 0x34, 0xe5, 0x5a, 0xb7, 0x17, 0xa7, 0xae,
+			    0x09, 0xeb, 0x86, 0xa2, 0x1d, 0xc3, 0x6a, 0x3f,
+			    0xee, 0xb8, 0x8b, 0x75, 0x9e, 0x39, 0x1e, 0x09 },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x90, 0x1b, 0x9d, 0xcf, 0x88, 0x1e, 0x01, 0xe0,
+			     0x27, 0x57, 0x50, 0x35, 0xd4, 0x0b, 0x43, 0xbd,
+			     0xc1, 0xc5, 0x24, 0x2e, 0x03, 0x08, 0x47, 0x49,
+			     0x5b, 0x0c, 0x72, 0x86, 0x46, 0x9b, 0x65, 0x91 },
+		.public = { 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0x60, 0x2f, 0xf4, 0x07, 0x89, 0xb5, 0x4b, 0x41,
+			    0x80, 0x59, 0x15, 0xfe, 0x2a, 0x62, 0x21, 0xf0,
+			    0x7a, 0x50, 0xff, 0xc2, 0xc3, 0xfc, 0x94, 0xcf,
+			    0x61, 0xf1, 0x3d, 0x79, 0x04, 0xe8, 0x8e, 0x0e },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x80, 0x46, 0x67, 0x7c, 0x28, 0xfd, 0x82, 0xc9,
+			     0xa1, 0xbd, 0xb7, 0x1a, 0x1a, 0x1a, 0x34, 0xfa,
+			     0xba, 0x12, 0x25, 0xe2, 0x50, 0x7f, 0xe3, 0xf5,
+			     0x4d, 0x10, 0xbd, 0x5b, 0x0d, 0x86, 0x5f, 0x8e },
+		.public = { 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0xe0, 0x0a, 0xe8, 0xb1, 0x43, 0x47, 0x12, 0x47,
+			    0xba, 0x24, 0xf1, 0x2c, 0x88, 0x55, 0x36, 0xc3,
+			    0xcb, 0x98, 0x1b, 0x58, 0xe1, 0xe5, 0x6b, 0x2b,
+			    0xaf, 0x35, 0xc1, 0x2a, 0xe1, 0xf7, 0x9c, 0x26 },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x60, 0x2f, 0x7e, 0x2f, 0x68, 0xa8, 0x46, 0xb8,
+			     0x2c, 0xc2, 0x69, 0xb1, 0xd4, 0x8e, 0x93, 0x98,
+			     0x86, 0xae, 0x54, 0xfd, 0x63, 0x6c, 0x1f, 0xe0,
+			     0x74, 0xd7, 0x10, 0x12, 0x7d, 0x47, 0x24, 0x91 },
+		.public = { 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0x98, 0xcb, 0x9b, 0x50, 0xdd, 0x3f, 0xc2, 0xb0,
+			    0xd4, 0xf2, 0xd2, 0xbf, 0x7c, 0x5c, 0xfd, 0xd1,
+			    0x0c, 0x8f, 0xcd, 0x31, 0xfc, 0x40, 0xaf, 0x1a,
+			    0xd4, 0x4f, 0x47, 0xc1, 0x31, 0x37, 0x63, 0x62 },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x60, 0x88, 0x7b, 0x3d, 0xc7, 0x24, 0x43, 0x02,
+			     0x6e, 0xbe, 0xdb, 0xbb, 0xb7, 0x06, 0x65, 0xf4,
+			     0x2b, 0x87, 0xad, 0xd1, 0x44, 0x0e, 0x77, 0x68,
+			     0xfb, 0xd7, 0xe8, 0xe2, 0xce, 0x5f, 0x63, 0x9d },
+		.public = { 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0x38, 0xd6, 0x30, 0x4c, 0x4a, 0x7e, 0x6d, 0x9f,
+			    0x79, 0x59, 0x33, 0x4f, 0xb5, 0x24, 0x5b, 0xd2,
+			    0xc7, 0x54, 0x52, 0x5d, 0x4c, 0x91, 0xdb, 0x95,
+			    0x02, 0x06, 0x92, 0x62, 0x34, 0xc1, 0xf6, 0x33 },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x78, 0xd3, 0x1d, 0xfa, 0x85, 0x44, 0x97, 0xd7,
+			     0x2d, 0x8d, 0xef, 0x8a, 0x1b, 0x7f, 0xb0, 0x06,
+			     0xce, 0xc2, 0xd8, 0xc4, 0x92, 0x46, 0x47, 0xc9,
+			     0x38, 0x14, 0xae, 0x56, 0xfa, 0xed, 0xa4, 0x95 },
+		.public = { 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0x78, 0x6c, 0xd5, 0x49, 0x96, 0xf0, 0x14, 0xa5,
+			    0xa0, 0x31, 0xec, 0x14, 0xdb, 0x81, 0x2e, 0xd0,
+			    0x83, 0x55, 0x06, 0x1f, 0xdb, 0x5d, 0xe6, 0x80,
+			    0xa8, 0x00, 0xac, 0x52, 0x1f, 0x31, 0x8e, 0x23 },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0xc0, 0x4c, 0x5b, 0xae, 0xfa, 0x83, 0x02, 0xdd,
+			     0xde, 0xd6, 0xa4, 0xbb, 0x95, 0x77, 0x61, 0xb4,
+			     0xeb, 0x97, 0xae, 0xfa, 0x4f, 0xc3, 0xb8, 0x04,
+			     0x30, 0x85, 0xf9, 0x6a, 0x56, 0x59, 0xb3, 0xa5 },
+		.public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0x29, 0xae, 0x8b, 0xc7, 0x3e, 0x9b, 0x10, 0xa0,
+			    0x8b, 0x4f, 0x68, 0x1c, 0x43, 0xc3, 0xe0, 0xac,
+			    0x1a, 0x17, 0x1d, 0x31, 0xb3, 0x8f, 0x1a, 0x48,
+			    0xef, 0xba, 0x29, 0xae, 0x63, 0x9e, 0xa1, 0x34 },
+		.valid = true
+	},
+	/* wycheproof - RFC 7748 */
+	{
+		.private = { 0xa0, 0x46, 0xe3, 0x6b, 0xf0, 0x52, 0x7c, 0x9d,
+			     0x3b, 0x16, 0x15, 0x4b, 0x82, 0x46, 0x5e, 0xdd,
+			     0x62, 0x14, 0x4c, 0x0a, 0xc1, 0xfc, 0x5a, 0x18,
+			     0x50, 0x6a, 0x22, 0x44, 0xba, 0x44, 0x9a, 0x44 },
+		.public = { 0xe6, 0xdb, 0x68, 0x67, 0x58, 0x30, 0x30, 0xdb,
+			    0x35, 0x94, 0xc1, 0xa4, 0x24, 0xb1, 0x5f, 0x7c,
+			    0x72, 0x66, 0x24, 0xec, 0x26, 0xb3, 0x35, 0x3b,
+			    0x10, 0xa9, 0x03, 0xa6, 0xd0, 0xab, 0x1c, 0x4c },
+		.result = { 0xc3, 0xda, 0x55, 0x37, 0x9d, 0xe9, 0xc6, 0x90,
+			    0x8e, 0x94, 0xea, 0x4d, 0xf2, 0x8d, 0x08, 0x4f,
+			    0x32, 0xec, 0xcf, 0x03, 0x49, 0x1c, 0x71, 0xf7,
+			    0x54, 0xb4, 0x07, 0x55, 0x77, 0xa2, 0x85, 0x52 },
+		.valid = true
+	},
+	/* wycheproof - RFC 7748 */
+	{
+		.private = { 0x48, 0x66, 0xe9, 0xd4, 0xd1, 0xb4, 0x67, 0x3c,
+			     0x5a, 0xd2, 0x26, 0x91, 0x95, 0x7d, 0x6a, 0xf5,
+			     0xc1, 0x1b, 0x64, 0x21, 0xe0, 0xea, 0x01, 0xd4,
+			     0x2c, 0xa4, 0x16, 0x9e, 0x79, 0x18, 0xba, 0x4d },
+		.public = { 0xe5, 0x21, 0x0f, 0x12, 0x78, 0x68, 0x11, 0xd3,
+			    0xf4, 0xb7, 0x95, 0x9d, 0x05, 0x38, 0xae, 0x2c,
+			    0x31, 0xdb, 0xe7, 0x10, 0x6f, 0xc0, 0x3c, 0x3e,
+			    0xfc, 0x4c, 0xd5, 0x49, 0xc7, 0x15, 0xa4, 0x13 },
+		.result = { 0x95, 0xcb, 0xde, 0x94, 0x76, 0xe8, 0x90, 0x7d,
+			    0x7a, 0xad, 0xe4, 0x5c, 0xb4, 0xb8, 0x73, 0xf8,
+			    0x8b, 0x59, 0x5a, 0x68, 0x79, 0x9f, 0xa1, 0x52,
+			    0xe6, 0xf8, 0xf7, 0x64, 0x7a, 0xac, 0x79, 0x57 },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x0a, 0xb4, 0xe7, 0x63, 0x80, 0xd8, 0x4d, 0xde,
+			    0x4f, 0x68, 0x33, 0xc5, 0x8f, 0x2a, 0x9f, 0xb8,
+			    0xf8, 0x3b, 0xb0, 0x16, 0x9b, 0x17, 0x2b, 0xe4,
+			    0xb6, 0xe0, 0x59, 0x28, 0x87, 0x74, 0x1a, 0x36 },
+		.result = { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x89, 0xe1, 0x0d, 0x57, 0x01, 0xb4, 0x33, 0x7d,
+			    0x2d, 0x03, 0x21, 0x81, 0x53, 0x8b, 0x10, 0x64,
+			    0xbd, 0x40, 0x84, 0x40, 0x1c, 0xec, 0xa1, 0xfd,
+			    0x12, 0x66, 0x3a, 0x19, 0x59, 0x38, 0x80, 0x00 },
+		.result = { 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x2b, 0x55, 0xd3, 0xaa, 0x4a, 0x8f, 0x80, 0xc8,
+			    0xc0, 0xb2, 0xae, 0x5f, 0x93, 0x3e, 0x85, 0xaf,
+			    0x49, 0xbe, 0xac, 0x36, 0xc2, 0xfa, 0x73, 0x94,
+			    0xba, 0xb7, 0x6c, 0x89, 0x33, 0xf8, 0xf8, 0x1d },
+		.result = { 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x63, 0xe5, 0xb1, 0xfe, 0x96, 0x01, 0xfe, 0x84,
+			    0x38, 0x5d, 0x88, 0x66, 0xb0, 0x42, 0x12, 0x62,
+			    0xf7, 0x8f, 0xbf, 0xa5, 0xaf, 0xf9, 0x58, 0x5e,
+			    0x62, 0x66, 0x79, 0xb1, 0x85, 0x47, 0xd9, 0x59 },
+		.result = { 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0xe4, 0x28, 0xf3, 0xda, 0xc1, 0x78, 0x09, 0xf8,
+			    0x27, 0xa5, 0x22, 0xce, 0x32, 0x35, 0x50, 0x58,
+			    0xd0, 0x73, 0x69, 0x36, 0x4a, 0xa7, 0x89, 0x02,
+			    0xee, 0x10, 0x13, 0x9b, 0x9f, 0x9d, 0xd6, 0x53 },
+		.result = { 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0xb3, 0xb5, 0x0e, 0x3e, 0xd3, 0xa4, 0x07, 0xb9,
+			    0x5d, 0xe9, 0x42, 0xef, 0x74, 0x57, 0x5b, 0x5a,
+			    0xb8, 0xa1, 0x0c, 0x09, 0xee, 0x10, 0x35, 0x44,
+			    0xd6, 0x0b, 0xdf, 0xed, 0x81, 0x38, 0xab, 0x2b },
+		.result = { 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x21, 0x3f, 0xff, 0xe9, 0x3d, 0x5e, 0xa8, 0xcd,
+			    0x24, 0x2e, 0x46, 0x28, 0x44, 0x02, 0x99, 0x22,
+			    0xc4, 0x3c, 0x77, 0xc9, 0xe3, 0xe4, 0x2f, 0x56,
+			    0x2f, 0x48, 0x5d, 0x24, 0xc5, 0x01, 0xa2, 0x0b },
+		.result = { 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x91, 0xb2, 0x32, 0xa1, 0x78, 0xb3, 0xcd, 0x53,
+			    0x09, 0x32, 0x44, 0x1e, 0x61, 0x39, 0x41, 0x8f,
+			    0x72, 0x17, 0x22, 0x92, 0xf1, 0xda, 0x4c, 0x18,
+			    0x34, 0xfc, 0x5e, 0xbf, 0xef, 0xb5, 0x1e, 0x3f },
+		.result = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03 },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x04, 0x5c, 0x6e, 0x11, 0xc5, 0xd3, 0x32, 0x55,
+			    0x6c, 0x78, 0x22, 0xfe, 0x94, 0xeb, 0xf8, 0x9b,
+			    0x56, 0xa3, 0x87, 0x8d, 0xc2, 0x7c, 0xa0, 0x79,
+			    0x10, 0x30, 0x58, 0x84, 0x9f, 0xab, 0xcb, 0x4f },
+		.result = { 0xe5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x1c, 0xa2, 0x19, 0x0b, 0x71, 0x16, 0x35, 0x39,
+			    0x06, 0x3c, 0x35, 0x77, 0x3b, 0xda, 0x0c, 0x9c,
+			    0x92, 0x8e, 0x91, 0x36, 0xf0, 0x62, 0x0a, 0xeb,
+			    0x09, 0x3f, 0x09, 0x91, 0x97, 0xb7, 0xf7, 0x4e },
+		.result = { 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0xf7, 0x6e, 0x90, 0x10, 0xac, 0x33, 0xc5, 0x04,
+			    0x3b, 0x2d, 0x3b, 0x76, 0xa8, 0x42, 0x17, 0x10,
+			    0x00, 0xc4, 0x91, 0x62, 0x22, 0xe9, 0xe8, 0x58,
+			    0x97, 0xa0, 0xae, 0xc7, 0xf6, 0x35, 0x0b, 0x3c },
+		.result = { 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0xbb, 0x72, 0x68, 0x8d, 0x8f, 0x8a, 0xa7, 0xa3,
+			    0x9c, 0xd6, 0x06, 0x0c, 0xd5, 0xc8, 0x09, 0x3c,
+			    0xde, 0xc6, 0xfe, 0x34, 0x19, 0x37, 0xc3, 0x88,
+			    0x6a, 0x99, 0x34, 0x6c, 0xd0, 0x7f, 0xaa, 0x55 },
+		.result = { 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x88, 0xfd, 0xde, 0xa1, 0x93, 0x39, 0x1c, 0x6a,
+			    0x59, 0x33, 0xef, 0x9b, 0x71, 0x90, 0x15, 0x49,
+			    0x44, 0x72, 0x05, 0xaa, 0xe9, 0xda, 0x92, 0x8a,
+			    0x6b, 0x91, 0xa3, 0x52, 0xba, 0x10, 0xf4, 0x1f },
+		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x30, 0x3b, 0x39, 0x2f, 0x15, 0x31, 0x16, 0xca,
+			    0xd9, 0xcc, 0x68, 0x2a, 0x00, 0xcc, 0xc4, 0x4c,
+			    0x95, 0xff, 0x0d, 0x3b, 0xbe, 0x56, 0x8b, 0xeb,
+			    0x6c, 0x4e, 0x73, 0x9b, 0xaf, 0xdc, 0x2c, 0x68 },
+		.result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00 },
+		.valid = true
+	},
+	/* wycheproof - checking for overflow */
+	{
+		.private = { 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+			     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+			     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+			     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+		.public = { 0xfd, 0x30, 0x0a, 0xeb, 0x40, 0xe1, 0xfa, 0x58,
+			    0x25, 0x18, 0x41, 0x2b, 0x49, 0xb2, 0x08, 0xa7,
+			    0x84, 0x2b, 0x1e, 0x1f, 0x05, 0x6a, 0x04, 0x01,
+			    0x78, 0xea, 0x41, 0x41, 0x53, 0x4f, 0x65, 0x2d },
+		.result = { 0xb7, 0x34, 0x10, 0x5d, 0xc2, 0x57, 0x58, 0x5d,
+			    0x73, 0xb5, 0x66, 0xcc, 0xb7, 0x6f, 0x06, 0x27,
+			    0x95, 0xcc, 0xbe, 0xc8, 0x91, 0x28, 0xe5, 0x2b,
+			    0x02, 0xf3, 0xe5, 0x96, 0x39, 0xf1, 0x3c, 0x46 },
+		.valid = true
+	},
+	/* wycheproof - checking for overflow */
+	{
+		.private = { 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+			     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+			     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+			     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+		.public = { 0xc8, 0xef, 0x79, 0xb5, 0x14, 0xd7, 0x68, 0x26,
+			    0x77, 0xbc, 0x79, 0x31, 0xe0, 0x6e, 0xe5, 0xc2,
+			    0x7c, 0x9b, 0x39, 0x2b, 0x4a, 0xe9, 0x48, 0x44,
+			    0x73, 0xf5, 0x54, 0xe6, 0x67, 0x8e, 0xcc, 0x2e },
+		.result = { 0x64, 0x7a, 0x46, 0xb6, 0xfc, 0x3f, 0x40, 0xd6,
+			    0x21, 0x41, 0xee, 0x3c, 0xee, 0x70, 0x6b, 0x4d,
+			    0x7a, 0x92, 0x71, 0x59, 0x3a, 0x7b, 0x14, 0x3e,
+			    0x8e, 0x2e, 0x22, 0x79, 0x88, 0x3e, 0x45, 0x50 },
+		.valid = true
+	},
+	/* wycheproof - checking for overflow */
+	{
+		.private = { 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+			     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+			     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+			     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+		.public = { 0x64, 0xae, 0xac, 0x25, 0x04, 0x14, 0x48, 0x61,
+			    0x53, 0x2b, 0x7b, 0xbc, 0xb6, 0xc8, 0x7d, 0x67,
+			    0xdd, 0x4c, 0x1f, 0x07, 0xeb, 0xc2, 0xe0, 0x6e,
+			    0xff, 0xb9, 0x5a, 0xec, 0xc6, 0x17, 0x0b, 0x2c },
+		.result = { 0x4f, 0xf0, 0x3d, 0x5f, 0xb4, 0x3c, 0xd8, 0x65,
+			    0x7a, 0x3c, 0xf3, 0x7c, 0x13, 0x8c, 0xad, 0xce,
+			    0xcc, 0xe5, 0x09, 0xe4, 0xeb, 0xa0, 0x89, 0xd0,
+			    0xef, 0x40, 0xb4, 0xe4, 0xfb, 0x94, 0x61, 0x55 },
+		.valid = true
+	},
+	/* wycheproof - checking for overflow */
+	{
+		.private = { 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+			     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+			     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+			     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+		.public = { 0xbf, 0x68, 0xe3, 0x5e, 0x9b, 0xdb, 0x7e, 0xee,
+			    0x1b, 0x50, 0x57, 0x02, 0x21, 0x86, 0x0f, 0x5d,
+			    0xcd, 0xad, 0x8a, 0xcb, 0xab, 0x03, 0x1b, 0x14,
+			    0x97, 0x4c, 0xc4, 0x90, 0x13, 0xc4, 0x98, 0x31 },
+		.result = { 0x21, 0xce, 0xe5, 0x2e, 0xfd, 0xbc, 0x81, 0x2e,
+			    0x1d, 0x02, 0x1a, 0x4a, 0xf1, 0xe1, 0xd8, 0xbc,
+			    0x4d, 0xb3, 0xc4, 0x00, 0xe4, 0xd2, 0xa2, 0xc5,
+			    0x6a, 0x39, 0x26, 0xdb, 0x4d, 0x99, 0xc6, 0x5b },
+		.valid = true
+	},
+	/* wycheproof - checking for overflow */
+	{
+		.private = { 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+			     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+			     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+			     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+		.public = { 0x53, 0x47, 0xc4, 0x91, 0x33, 0x1a, 0x64, 0xb4,
+			    0x3d, 0xdc, 0x68, 0x30, 0x34, 0xe6, 0x77, 0xf5,
+			    0x3d, 0xc3, 0x2b, 0x52, 0xa5, 0x2a, 0x57, 0x7c,
+			    0x15, 0xa8, 0x3b, 0xf2, 0x98, 0xe9, 0x9f, 0x19 },
+		.result = { 0x18, 0xcb, 0x89, 0xe4, 0xe2, 0x0c, 0x0c, 0x2b,
+			    0xd3, 0x24, 0x30, 0x52, 0x45, 0x26, 0x6c, 0x93,
+			    0x27, 0x69, 0x0b, 0xbe, 0x79, 0xac, 0xb8, 0x8f,
+			    0x5b, 0x8f, 0xb3, 0xf7, 0x4e, 0xca, 0x3e, 0x52 },
+		.valid = true
+	},
+	/* wycheproof - private key == -1 (mod order) */
+	{
+		.private = { 0xa0, 0x23, 0xcd, 0xd0, 0x83, 0xef, 0x5b, 0xb8,
+			     0x2f, 0x10, 0xd6, 0x2e, 0x59, 0xe1, 0x5a, 0x68,
+			     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50 },
+		.public = { 0x25, 0x8e, 0x04, 0x52, 0x3b, 0x8d, 0x25, 0x3e,
+			    0xe6, 0x57, 0x19, 0xfc, 0x69, 0x06, 0xc6, 0x57,
+			    0x19, 0x2d, 0x80, 0x71, 0x7e, 0xdc, 0x82, 0x8f,
+			    0xa0, 0xaf, 0x21, 0x68, 0x6e, 0x2f, 0xaa, 0x75 },
+		.result = { 0x25, 0x8e, 0x04, 0x52, 0x3b, 0x8d, 0x25, 0x3e,
+			    0xe6, 0x57, 0x19, 0xfc, 0x69, 0x06, 0xc6, 0x57,
+			    0x19, 0x2d, 0x80, 0x71, 0x7e, 0xdc, 0x82, 0x8f,
+			    0xa0, 0xaf, 0x21, 0x68, 0x6e, 0x2f, 0xaa, 0x75 },
+		.valid = true
+	},
+	/* wycheproof - private key == 1 (mod order) on twist */
+	{
+		.private = { 0x58, 0x08, 0x3d, 0xd2, 0x61, 0xad, 0x91, 0xef,
+			     0xf9, 0x52, 0x32, 0x2e, 0xc8, 0x24, 0xc6, 0x82,
+			     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f },
+		.public = { 0x2e, 0xae, 0x5e, 0xc3, 0xdd, 0x49, 0x4e, 0x9f,
+			    0x2d, 0x37, 0xd2, 0x58, 0xf8, 0x73, 0xa8, 0xe6,
+			    0xe9, 0xd0, 0xdb, 0xd1, 0xe3, 0x83, 0xef, 0x64,
+			    0xd9, 0x8b, 0xb9, 0x1b, 0x3e, 0x0b, 0xe0, 0x35 },
+		.result = { 0x2e, 0xae, 0x5e, 0xc3, 0xdd, 0x49, 0x4e, 0x9f,
+			    0x2d, 0x37, 0xd2, 0x58, 0xf8, 0x73, 0xa8, 0xe6,
+			    0xe9, 0xd0, 0xdb, 0xd1, 0xe3, 0x83, 0xef, 0x64,
+			    0xd9, 0x8b, 0xb9, 0x1b, 0x3e, 0x0b, 0xe0, 0x35 },
+		.valid = true
+	}
+};
+
+bool __init curve25519_selftest(void)
+{
+	bool success = true, ret, ret2;
+	size_t i = 0, j;
+	u8 in[CURVE25519_KEY_SIZE];
+	u8 out[CURVE25519_KEY_SIZE], out2[CURVE25519_KEY_SIZE],
+	   out3[CURVE25519_KEY_SIZE];
+
+	for (i = 0; i < ARRAY_SIZE(curve25519_test_vectors); ++i) {
+		memset(out, 0, CURVE25519_KEY_SIZE);
+		ret = curve25519(out, curve25519_test_vectors[i].private,
+				 curve25519_test_vectors[i].public);
+		if (ret != curve25519_test_vectors[i].valid ||
+		    memcmp(out, curve25519_test_vectors[i].result,
+			   CURVE25519_KEY_SIZE)) {
+			pr_err("curve25519 self-test %zu: FAIL\n", i + 1);
+			success = false;
+		}
+	}
+
+	for (i = 0; i < 5; ++i) {
+		get_random_bytes(in, sizeof(in));
+		ret = curve25519_generate_public(out, in);
+		ret2 = curve25519(out2, in, (u8[CURVE25519_KEY_SIZE]){ 9 });
+		curve25519_generic(out3, in, (u8[CURVE25519_KEY_SIZE]){ 9 });
+		if (ret != ret2 ||
+		    memcmp(out, out2, CURVE25519_KEY_SIZE) ||
+		    memcmp(out, out3, CURVE25519_KEY_SIZE)) {
+			pr_err("curve25519 basepoint self-test %zu: FAIL: input - 0x",
+			       i + 1);
+			for (j = CURVE25519_KEY_SIZE; j-- > 0;)
+				printk(KERN_CONT "%02x", in[j]);
+			printk(KERN_CONT "\n");
+			success = false;
+		}
+	}
+
+	return success;
+}
diff --git a/lib/crypto/curve25519.c b/lib/crypto/curve25519.c
new file mode 100644
index 0000000..288a62c
--- /dev/null
+++ b/lib/crypto/curve25519.c
@@ -0,0 +1,35 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This is an implementation of the Curve25519 ECDH algorithm, using either
+ * a 32-bit implementation or a 64-bit implementation with 128-bit integers,
+ * depending on what is supported by the target compiler.
+ *
+ * Information: https://cr.yp.to/ecdh.html
+ */
+
+#include <crypto/curve25519.h>
+#include <linux/module.h>
+#include <linux/init.h>
+
+bool curve25519_selftest(void);
+
+static int __init mod_init(void)
+{
+	if (!IS_ENABLED(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS) &&
+	    WARN_ON(!curve25519_selftest()))
+		return -ENODEV;
+	return 0;
+}
+
+static void __exit mod_exit(void)
+{
+}
+
+module_init(mod_init);
+module_exit(mod_exit);
+
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("Curve25519 scalar multiplication");
+MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
diff --git a/lib/crypto/libchacha.c b/lib/crypto/libchacha.c
new file mode 100644
index 0000000..dabc3ac
--- /dev/null
+++ b/lib/crypto/libchacha.c
@@ -0,0 +1,35 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * The ChaCha stream cipher (RFC7539)
+ *
+ * Copyright (C) 2015 Martin Willi
+ */
+
+#include <linux/kernel.h>
+#include <linux/export.h>
+#include <linux/module.h>
+
+#include <crypto/algapi.h> // for crypto_xor_cpy
+#include <crypto/chacha.h>
+
+void chacha_crypt_generic(u32 *state, u8 *dst, const u8 *src,
+			  unsigned int bytes, int nrounds)
+{
+	/* aligned to potentially speed up crypto_xor() */
+	u8 stream[CHACHA_BLOCK_SIZE] __aligned(sizeof(long));
+
+	while (bytes >= CHACHA_BLOCK_SIZE) {
+		chacha_block_generic(state, stream, nrounds);
+		crypto_xor_cpy(dst, src, stream, CHACHA_BLOCK_SIZE);
+		bytes -= CHACHA_BLOCK_SIZE;
+		dst += CHACHA_BLOCK_SIZE;
+		src += CHACHA_BLOCK_SIZE;
+	}
+	if (bytes) {
+		chacha_block_generic(state, stream, nrounds);
+		crypto_xor_cpy(dst, src, stream, bytes);
+	}
+}
+EXPORT_SYMBOL(chacha_crypt_generic);
+
+MODULE_LICENSE("GPL");
diff --git a/lib/crypto/poly1305-donna32.c b/lib/crypto/poly1305-donna32.c
new file mode 100644
index 0000000..3cc77d9
--- /dev/null
+++ b/lib/crypto/poly1305-donna32.c
@@ -0,0 +1,204 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This is based in part on Andrew Moon's poly1305-donna, which is in the
+ * public domain.
+ */
+
+#include <linux/kernel.h>
+#include <asm/unaligned.h>
+#include <crypto/internal/poly1305.h>
+
+void poly1305_core_setkey(struct poly1305_core_key *key, const u8 raw_key[16])
+{
+	/* r &= 0xffffffc0ffffffc0ffffffc0fffffff */
+	key->key.r[0] = (get_unaligned_le32(&raw_key[0])) & 0x3ffffff;
+	key->key.r[1] = (get_unaligned_le32(&raw_key[3]) >> 2) & 0x3ffff03;
+	key->key.r[2] = (get_unaligned_le32(&raw_key[6]) >> 4) & 0x3ffc0ff;
+	key->key.r[3] = (get_unaligned_le32(&raw_key[9]) >> 6) & 0x3f03fff;
+	key->key.r[4] = (get_unaligned_le32(&raw_key[12]) >> 8) & 0x00fffff;
+
+	/* s = 5*r */
+	key->precomputed_s.r[0] = key->key.r[1] * 5;
+	key->precomputed_s.r[1] = key->key.r[2] * 5;
+	key->precomputed_s.r[2] = key->key.r[3] * 5;
+	key->precomputed_s.r[3] = key->key.r[4] * 5;
+}
+EXPORT_SYMBOL(poly1305_core_setkey);
+
+void poly1305_core_blocks(struct poly1305_state *state,
+			  const struct poly1305_core_key *key, const void *src,
+			  unsigned int nblocks, u32 hibit)
+{
+	const u8 *input = src;
+	u32 r0, r1, r2, r3, r4;
+	u32 s1, s2, s3, s4;
+	u32 h0, h1, h2, h3, h4;
+	u64 d0, d1, d2, d3, d4;
+	u32 c;
+
+	if (!nblocks)
+		return;
+
+	hibit <<= 24;
+
+	r0 = key->key.r[0];
+	r1 = key->key.r[1];
+	r2 = key->key.r[2];
+	r3 = key->key.r[3];
+	r4 = key->key.r[4];
+
+	s1 = key->precomputed_s.r[0];
+	s2 = key->precomputed_s.r[1];
+	s3 = key->precomputed_s.r[2];
+	s4 = key->precomputed_s.r[3];
+
+	h0 = state->h[0];
+	h1 = state->h[1];
+	h2 = state->h[2];
+	h3 = state->h[3];
+	h4 = state->h[4];
+
+	do {
+		/* h += m[i] */
+		h0 += (get_unaligned_le32(&input[0])) & 0x3ffffff;
+		h1 += (get_unaligned_le32(&input[3]) >> 2) & 0x3ffffff;
+		h2 += (get_unaligned_le32(&input[6]) >> 4) & 0x3ffffff;
+		h3 += (get_unaligned_le32(&input[9]) >> 6) & 0x3ffffff;
+		h4 += (get_unaligned_le32(&input[12]) >> 8) | hibit;
+
+		/* h *= r */
+		d0 = ((u64)h0 * r0) + ((u64)h1 * s4) +
+		     ((u64)h2 * s3) + ((u64)h3 * s2) +
+		     ((u64)h4 * s1);
+		d1 = ((u64)h0 * r1) + ((u64)h1 * r0) +
+		     ((u64)h2 * s4) + ((u64)h3 * s3) +
+		     ((u64)h4 * s2);
+		d2 = ((u64)h0 * r2) + ((u64)h1 * r1) +
+		     ((u64)h2 * r0) + ((u64)h3 * s4) +
+		     ((u64)h4 * s3);
+		d3 = ((u64)h0 * r3) + ((u64)h1 * r2) +
+		     ((u64)h2 * r1) + ((u64)h3 * r0) +
+		     ((u64)h4 * s4);
+		d4 = ((u64)h0 * r4) + ((u64)h1 * r3) +
+		     ((u64)h2 * r2) + ((u64)h3 * r1) +
+		     ((u64)h4 * r0);
+
+		/* (partial) h %= p */
+		c = (u32)(d0 >> 26);
+		h0 = (u32)d0 & 0x3ffffff;
+		d1 += c;
+		c = (u32)(d1 >> 26);
+		h1 = (u32)d1 & 0x3ffffff;
+		d2 += c;
+		c = (u32)(d2 >> 26);
+		h2 = (u32)d2 & 0x3ffffff;
+		d3 += c;
+		c = (u32)(d3 >> 26);
+		h3 = (u32)d3 & 0x3ffffff;
+		d4 += c;
+		c = (u32)(d4 >> 26);
+		h4 = (u32)d4 & 0x3ffffff;
+		h0 += c * 5;
+		c = (h0 >> 26);
+		h0 = h0 & 0x3ffffff;
+		h1 += c;
+
+		input += POLY1305_BLOCK_SIZE;
+	} while (--nblocks);
+
+	state->h[0] = h0;
+	state->h[1] = h1;
+	state->h[2] = h2;
+	state->h[3] = h3;
+	state->h[4] = h4;
+}
+EXPORT_SYMBOL(poly1305_core_blocks);
+
+void poly1305_core_emit(const struct poly1305_state *state, const u32 nonce[4],
+			void *dst)
+{
+	u8 *mac = dst;
+	u32 h0, h1, h2, h3, h4, c;
+	u32 g0, g1, g2, g3, g4;
+	u64 f;
+	u32 mask;
+
+	/* fully carry h */
+	h0 = state->h[0];
+	h1 = state->h[1];
+	h2 = state->h[2];
+	h3 = state->h[3];
+	h4 = state->h[4];
+
+	c = h1 >> 26;
+	h1 = h1 & 0x3ffffff;
+	h2 += c;
+	c = h2 >> 26;
+	h2 = h2 & 0x3ffffff;
+	h3 += c;
+	c = h3 >> 26;
+	h3 = h3 & 0x3ffffff;
+	h4 += c;
+	c = h4 >> 26;
+	h4 = h4 & 0x3ffffff;
+	h0 += c * 5;
+	c = h0 >> 26;
+	h0 = h0 & 0x3ffffff;
+	h1 += c;
+
+	/* compute h + -p */
+	g0 = h0 + 5;
+	c = g0 >> 26;
+	g0 &= 0x3ffffff;
+	g1 = h1 + c;
+	c = g1 >> 26;
+	g1 &= 0x3ffffff;
+	g2 = h2 + c;
+	c = g2 >> 26;
+	g2 &= 0x3ffffff;
+	g3 = h3 + c;
+	c = g3 >> 26;
+	g3 &= 0x3ffffff;
+	g4 = h4 + c - (1UL << 26);
+
+	/* select h if h < p, or h + -p if h >= p */
+	mask = (g4 >> ((sizeof(u32) * 8) - 1)) - 1;
+	g0 &= mask;
+	g1 &= mask;
+	g2 &= mask;
+	g3 &= mask;
+	g4 &= mask;
+	mask = ~mask;
+
+	h0 = (h0 & mask) | g0;
+	h1 = (h1 & mask) | g1;
+	h2 = (h2 & mask) | g2;
+	h3 = (h3 & mask) | g3;
+	h4 = (h4 & mask) | g4;
+
+	/* h = h % (2^128) */
+	h0 = ((h0) | (h1 << 26)) & 0xffffffff;
+	h1 = ((h1 >> 6) | (h2 << 20)) & 0xffffffff;
+	h2 = ((h2 >> 12) | (h3 << 14)) & 0xffffffff;
+	h3 = ((h3 >> 18) | (h4 << 8)) & 0xffffffff;
+
+	if (likely(nonce)) {
+		/* mac = (h + nonce) % (2^128) */
+		f = (u64)h0 + nonce[0];
+		h0 = (u32)f;
+		f = (u64)h1 + nonce[1] + (f >> 32);
+		h1 = (u32)f;
+		f = (u64)h2 + nonce[2] + (f >> 32);
+		h2 = (u32)f;
+		f = (u64)h3 + nonce[3] + (f >> 32);
+		h3 = (u32)f;
+	}
+
+	put_unaligned_le32(h0, &mac[0]);
+	put_unaligned_le32(h1, &mac[4]);
+	put_unaligned_le32(h2, &mac[8]);
+	put_unaligned_le32(h3, &mac[12]);
+}
+EXPORT_SYMBOL(poly1305_core_emit);
diff --git a/lib/crypto/poly1305-donna64.c b/lib/crypto/poly1305-donna64.c
new file mode 100644
index 0000000..6ae181b
--- /dev/null
+++ b/lib/crypto/poly1305-donna64.c
@@ -0,0 +1,185 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This is based in part on Andrew Moon's poly1305-donna, which is in the
+ * public domain.
+ */
+
+#include <linux/kernel.h>
+#include <asm/unaligned.h>
+#include <crypto/internal/poly1305.h>
+
+typedef __uint128_t u128;
+
+void poly1305_core_setkey(struct poly1305_core_key *key, const u8 raw_key[16])
+{
+	u64 t0, t1;
+
+	/* r &= 0xffffffc0ffffffc0ffffffc0fffffff */
+	t0 = get_unaligned_le64(&raw_key[0]);
+	t1 = get_unaligned_le64(&raw_key[8]);
+
+	key->key.r64[0] = t0 & 0xffc0fffffffULL;
+	key->key.r64[1] = ((t0 >> 44) | (t1 << 20)) & 0xfffffc0ffffULL;
+	key->key.r64[2] = ((t1 >> 24)) & 0x00ffffffc0fULL;
+
+	/* s = 20*r */
+	key->precomputed_s.r64[0] = key->key.r64[1] * 20;
+	key->precomputed_s.r64[1] = key->key.r64[2] * 20;
+}
+EXPORT_SYMBOL(poly1305_core_setkey);
+
+void poly1305_core_blocks(struct poly1305_state *state,
+			  const struct poly1305_core_key *key, const void *src,
+			  unsigned int nblocks, u32 hibit)
+{
+	const u8 *input = src;
+	u64 hibit64;
+	u64 r0, r1, r2;
+	u64 s1, s2;
+	u64 h0, h1, h2;
+	u64 c;
+	u128 d0, d1, d2, d;
+
+	if (!nblocks)
+		return;
+
+	hibit64 = ((u64)hibit) << 40;
+
+	r0 = key->key.r64[0];
+	r1 = key->key.r64[1];
+	r2 = key->key.r64[2];
+
+	h0 = state->h64[0];
+	h1 = state->h64[1];
+	h2 = state->h64[2];
+
+	s1 = key->precomputed_s.r64[0];
+	s2 = key->precomputed_s.r64[1];
+
+	do {
+		u64 t0, t1;
+
+		/* h += m[i] */
+		t0 = get_unaligned_le64(&input[0]);
+		t1 = get_unaligned_le64(&input[8]);
+
+		h0 += t0 & 0xfffffffffffULL;
+		h1 += ((t0 >> 44) | (t1 << 20)) & 0xfffffffffffULL;
+		h2 += (((t1 >> 24)) & 0x3ffffffffffULL) | hibit64;
+
+		/* h *= r */
+		d0 = (u128)h0 * r0;
+		d = (u128)h1 * s2;
+		d0 += d;
+		d = (u128)h2 * s1;
+		d0 += d;
+		d1 = (u128)h0 * r1;
+		d = (u128)h1 * r0;
+		d1 += d;
+		d = (u128)h2 * s2;
+		d1 += d;
+		d2 = (u128)h0 * r2;
+		d = (u128)h1 * r1;
+		d2 += d;
+		d = (u128)h2 * r0;
+		d2 += d;
+
+		/* (partial) h %= p */
+		c = (u64)(d0 >> 44);
+		h0 = (u64)d0 & 0xfffffffffffULL;
+		d1 += c;
+		c = (u64)(d1 >> 44);
+		h1 = (u64)d1 & 0xfffffffffffULL;
+		d2 += c;
+		c = (u64)(d2 >> 42);
+		h2 = (u64)d2 & 0x3ffffffffffULL;
+		h0 += c * 5;
+		c = h0 >> 44;
+		h0 = h0 & 0xfffffffffffULL;
+		h1 += c;
+
+		input += POLY1305_BLOCK_SIZE;
+	} while (--nblocks);
+
+	state->h64[0] = h0;
+	state->h64[1] = h1;
+	state->h64[2] = h2;
+}
+EXPORT_SYMBOL(poly1305_core_blocks);
+
+void poly1305_core_emit(const struct poly1305_state *state, const u32 nonce[4],
+			void *dst)
+{
+	u8 *mac = dst;
+	u64 h0, h1, h2, c;
+	u64 g0, g1, g2;
+	u64 t0, t1;
+
+	/* fully carry h */
+	h0 = state->h64[0];
+	h1 = state->h64[1];
+	h2 = state->h64[2];
+
+	c = h1 >> 44;
+	h1 &= 0xfffffffffffULL;
+	h2 += c;
+	c = h2 >> 42;
+	h2 &= 0x3ffffffffffULL;
+	h0 += c * 5;
+	c = h0 >> 44;
+	h0 &= 0xfffffffffffULL;
+	h1 += c;
+	c = h1 >> 44;
+	h1 &= 0xfffffffffffULL;
+	h2 += c;
+	c = h2 >> 42;
+	h2 &= 0x3ffffffffffULL;
+	h0 += c * 5;
+	c = h0 >> 44;
+	h0 &= 0xfffffffffffULL;
+	h1 += c;
+
+	/* compute h + -p */
+	g0 = h0 + 5;
+	c  = g0 >> 44;
+	g0 &= 0xfffffffffffULL;
+	g1 = h1 + c;
+	c  = g1 >> 44;
+	g1 &= 0xfffffffffffULL;
+	g2 = h2 + c - (1ULL << 42);
+
+	/* select h if h < p, or h + -p if h >= p */
+	c = (g2 >> ((sizeof(u64) * 8) - 1)) - 1;
+	g0 &= c;
+	g1 &= c;
+	g2 &= c;
+	c  = ~c;
+	h0 = (h0 & c) | g0;
+	h1 = (h1 & c) | g1;
+	h2 = (h2 & c) | g2;
+
+	if (likely(nonce)) {
+		/* h = (h + nonce) */
+		t0 = ((u64)nonce[1] << 32) | nonce[0];
+		t1 = ((u64)nonce[3] << 32) | nonce[2];
+
+		h0 += t0 & 0xfffffffffffULL;
+		c = h0 >> 44;
+		h0 &= 0xfffffffffffULL;
+		h1 += (((t0 >> 44) | (t1 << 20)) & 0xfffffffffffULL) + c;
+		c = h1 >> 44;
+		h1 &= 0xfffffffffffULL;
+		h2 += (((t1 >> 24)) & 0x3ffffffffffULL) + c;
+		h2 &= 0x3ffffffffffULL;
+	}
+
+	/* mac = h % (2^128) */
+	h0 = h0 | (h1 << 44);
+	h1 = (h1 >> 20) | (h2 << 24);
+
+	put_unaligned_le64(h0, &mac[0]);
+	put_unaligned_le64(h1, &mac[8]);
+}
+EXPORT_SYMBOL(poly1305_core_emit);
diff --git a/lib/crypto/poly1305.c b/lib/crypto/poly1305.c
new file mode 100644
index 0000000..9d2d14d
--- /dev/null
+++ b/lib/crypto/poly1305.c
@@ -0,0 +1,77 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Poly1305 authenticator algorithm, RFC7539
+ *
+ * Copyright (C) 2015 Martin Willi
+ *
+ * Based on public domain code by Andrew Moon and Daniel J. Bernstein.
+ */
+
+#include <crypto/internal/poly1305.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <asm/unaligned.h>
+
+void poly1305_init_generic(struct poly1305_desc_ctx *desc, const u8 *key)
+{
+	poly1305_core_setkey(&desc->core_r, key);
+	desc->s[0] = get_unaligned_le32(key + 16);
+	desc->s[1] = get_unaligned_le32(key + 20);
+	desc->s[2] = get_unaligned_le32(key + 24);
+	desc->s[3] = get_unaligned_le32(key + 28);
+	poly1305_core_init(&desc->h);
+	desc->buflen = 0;
+	desc->sset = true;
+	desc->rset = 2;
+}
+EXPORT_SYMBOL_GPL(poly1305_init_generic);
+
+void poly1305_update_generic(struct poly1305_desc_ctx *desc, const u8 *src,
+			     unsigned int nbytes)
+{
+	unsigned int bytes;
+
+	if (unlikely(desc->buflen)) {
+		bytes = min(nbytes, POLY1305_BLOCK_SIZE - desc->buflen);
+		memcpy(desc->buf + desc->buflen, src, bytes);
+		src += bytes;
+		nbytes -= bytes;
+		desc->buflen += bytes;
+
+		if (desc->buflen == POLY1305_BLOCK_SIZE) {
+			poly1305_core_blocks(&desc->h, &desc->core_r, desc->buf,
+					     1, 1);
+			desc->buflen = 0;
+		}
+	}
+
+	if (likely(nbytes >= POLY1305_BLOCK_SIZE)) {
+		poly1305_core_blocks(&desc->h, &desc->core_r, src,
+				     nbytes / POLY1305_BLOCK_SIZE, 1);
+		src += nbytes - (nbytes % POLY1305_BLOCK_SIZE);
+		nbytes %= POLY1305_BLOCK_SIZE;
+	}
+
+	if (unlikely(nbytes)) {
+		desc->buflen = nbytes;
+		memcpy(desc->buf, src, nbytes);
+	}
+}
+EXPORT_SYMBOL_GPL(poly1305_update_generic);
+
+void poly1305_final_generic(struct poly1305_desc_ctx *desc, u8 *dst)
+{
+	if (unlikely(desc->buflen)) {
+		desc->buf[desc->buflen++] = 1;
+		memset(desc->buf + desc->buflen, 0,
+		       POLY1305_BLOCK_SIZE - desc->buflen);
+		poly1305_core_blocks(&desc->h, &desc->core_r, desc->buf, 1, 0);
+	}
+
+	poly1305_core_emit(&desc->h, desc->s, dst);
+	*desc = (struct poly1305_desc_ctx){};
+}
+EXPORT_SYMBOL_GPL(poly1305_final_generic);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Martin Willi <martin@strongswan.org>");
diff --git a/lib/crypto/sha256.c b/lib/crypto/sha256.c
index 66cb04b..2321f6c 100644
--- a/lib/crypto/sha256.c
+++ b/lib/crypto/sha256.c
@@ -206,7 +206,7 @@ static void sha256_transform(u32 *state, const u8 *input)
 	memzero_explicit(W, 64 * sizeof(u32));
 }
 
-int sha256_update(struct sha256_state *sctx, const u8 *data, unsigned int len)
+void sha256_update(struct sha256_state *sctx, const u8 *data, unsigned int len)
 {
 	unsigned int partial, done;
 	const u8 *src;
@@ -232,18 +232,16 @@ int sha256_update(struct sha256_state *sctx, const u8 *data, unsigned int len)
 		partial = 0;
 	}
 	memcpy(sctx->buf + partial, src, len - done);
-
-	return 0;
 }
 EXPORT_SYMBOL(sha256_update);
 
-int sha224_update(struct sha256_state *sctx, const u8 *data, unsigned int len)
+void sha224_update(struct sha256_state *sctx, const u8 *data, unsigned int len)
 {
-	return sha256_update(sctx, data, len);
+	sha256_update(sctx, data, len);
 }
 EXPORT_SYMBOL(sha224_update);
 
-static int __sha256_final(struct sha256_state *sctx, u8 *out, int digest_words)
+static void __sha256_final(struct sha256_state *sctx, u8 *out, int digest_words)
 {
 	__be32 *dst = (__be32 *)out;
 	__be64 bits;
@@ -268,20 +266,28 @@ static int __sha256_final(struct sha256_state *sctx, u8 *out, int digest_words)
 
 	/* Zeroize sensitive information. */
 	memset(sctx, 0, sizeof(*sctx));
-
-	return 0;
 }
 
-int sha256_final(struct sha256_state *sctx, u8 *out)
+void sha256_final(struct sha256_state *sctx, u8 *out)
 {
-	return __sha256_final(sctx, out, 8);
+	__sha256_final(sctx, out, 8);
 }
 EXPORT_SYMBOL(sha256_final);
 
-int sha224_final(struct sha256_state *sctx, u8 *out)
+void sha224_final(struct sha256_state *sctx, u8 *out)
 {
-	return __sha256_final(sctx, out, 7);
+	__sha256_final(sctx, out, 7);
 }
 EXPORT_SYMBOL(sha224_final);
 
+void sha256(const u8 *data, unsigned int len, u8 *out)
+{
+	struct sha256_state sctx;
+
+	sha256_init(&sctx);
+	sha256_update(&sctx, data, len);
+	sha256_final(&sctx, out);
+}
+EXPORT_SYMBOL(sha256);
+
 MODULE_LICENSE("GPL");
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index ccf0571..f428e83 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -990,15 +990,25 @@ static void ddebug_remove_all_tables(void)
 
 static __initdata int ddebug_init_success;
 
-static int __init dynamic_debug_init_debugfs(void)
+static int __init dynamic_debug_init_control(void)
 {
-	struct dentry *dir;
+	struct proc_dir_entry *procfs_dir;
+	struct dentry *debugfs_dir;
 
 	if (!ddebug_init_success)
 		return -ENODEV;
 
-	dir = debugfs_create_dir("dynamic_debug", NULL);
-	debugfs_create_file("control", 0644, dir, NULL, &ddebug_proc_fops);
+	/* Create the control file in debugfs if it is enabled */
+	if (debugfs_initialized()) {
+		debugfs_dir = debugfs_create_dir("dynamic_debug", NULL);
+		debugfs_create_file("control", 0644, debugfs_dir, NULL,
+				    &ddebug_proc_fops);
+	}
+
+	/* Also create the control file in procfs */
+	procfs_dir = proc_mkdir("dynamic_debug", NULL);
+	if (procfs_dir)
+		proc_create("control", 0644, procfs_dir, &ddebug_proc_fops);
 
 	return 0;
 }
@@ -1013,8 +1023,13 @@ static int __init dynamic_debug_init(void)
 	int verbose_bytes = 0;
 
 	if (__start___verbose == __stop___verbose) {
-		pr_warn("_ddebug table is empty in a CONFIG_DYNAMIC_DEBUG build\n");
-		return 1;
+		if (IS_ENABLED(CONFIG_DYNAMIC_DEBUG)) {
+			pr_warn("_ddebug table is empty in a CONFIG_DYNAMIC_DEBUG build\n");
+			return 1;
+		}
+		pr_info("Ignore empty _ddebug table in a CONFIG_DYNAMIC_DEBUG_CORE build\n");
+		ddebug_init_success = 1;
+		return 0;
 	}
 	iter = __start___verbose;
 	modname = iter->modname;
@@ -1076,4 +1091,4 @@ static int __init dynamic_debug_init(void)
 early_initcall(dynamic_debug_init);
 
 /* Debugfs setup must be done later */
-fs_initcall(dynamic_debug_init_debugfs);
+fs_initcall(dynamic_debug_init_control);
diff --git a/lib/kunit/Kconfig b/lib/kunit/Kconfig
new file mode 100644
index 0000000..00909e6
--- /dev/null
+++ b/lib/kunit/Kconfig
@@ -0,0 +1,61 @@
+#
+# KUnit base configuration
+#
+
+menuconfig KUNIT
+	tristate "KUnit - Enable support for unit tests"
+	help
+	  Enables support for kernel unit tests (KUnit), a lightweight unit
+	  testing and mocking framework for the Linux kernel. These tests are
+	  able to be run locally on a developer's workstation without a VM or
+	  special hardware when using UML. Can also be used on most other
+	  architectures. For more information, please see
+	  Documentation/dev-tools/kunit/.
+
+if KUNIT
+
+config KUNIT_DEBUGFS
+	bool "KUnit - Enable /sys/kernel/debug/kunit debugfs representation" if !KUNIT_ALL_TESTS
+	default KUNIT_ALL_TESTS
+	help
+	  Enable debugfs representation for kunit.  Currently this consists
+	  of /sys/kernel/debug/kunit/<test_suite>/results files for each
+	  test suite, which allow users to see results of the last test suite
+	  run that occurred.
+
+config KUNIT_TEST
+	tristate "KUnit test for KUnit" if !KUNIT_ALL_TESTS
+	default KUNIT_ALL_TESTS
+	help
+	  Enables the unit tests for the KUnit test framework. These tests test
+	  the KUnit test framework itself; the tests are both written using
+	  KUnit and test KUnit. This option should only be enabled for testing
+	  purposes by developers interested in testing that KUnit works as
+	  expected.
+
+config KUNIT_EXAMPLE_TEST
+	tristate "Example test for KUnit" if !KUNIT_ALL_TESTS
+	default KUNIT_ALL_TESTS
+	help
+	  Enables an example unit test that illustrates some of the basic
+	  features of KUnit. This test only exists to help new users understand
+	  what KUnit is and how it is used. Please refer to the example test
+	  itself, lib/kunit/example-test.c, for more information. This option
+	  is intended for curious hackers who would like to understand how to
+	  use KUnit for kernel development.
+
+config KUNIT_ALL_TESTS
+	tristate "All KUnit tests with satisfied dependencies"
+	help
+	  Enables all KUnit tests, if they can be enabled.
+	  KUnit tests run during boot and output the results to the debug log
+	  in TAP format (http://testanything.org/). Only useful for kernel devs
+	  running the KUnit test harness, and not intended for inclusion into a
+	  production build.
+
+	  For more information on KUnit and unit tests in general please refer
+	  to the KUnit documentation in Documentation/dev-tools/kunit/.
+
+	  If unsure, say N.
+
+endif # KUNIT
diff --git a/lib/kunit/Makefile b/lib/kunit/Makefile
new file mode 100644
index 0000000..724b943
--- /dev/null
+++ b/lib/kunit/Makefile
@@ -0,0 +1,19 @@
+obj-$(CONFIG_KUNIT) +=			kunit.o
+
+kunit-objs +=				test.o \
+					string-stream.o \
+					assert.o \
+					try-catch.o
+
+ifeq ($(CONFIG_KUNIT_DEBUGFS),y)
+kunit-objs +=				debugfs.o
+endif
+
+obj-$(CONFIG_KUNIT_TEST) +=		kunit-test.o
+
+# string-stream-test compiles built-in only.
+ifeq ($(CONFIG_KUNIT_TEST),y)
+obj-$(CONFIG_KUNIT_TEST) +=		string-stream-test.o
+endif
+
+obj-$(CONFIG_KUNIT_EXAMPLE_TEST) +=	kunit-example-test.o
diff --git a/lib/kunit/assert.c b/lib/kunit/assert.c
new file mode 100644
index 0000000..b24bebca
--- /dev/null
+++ b/lib/kunit/assert.c
@@ -0,0 +1,151 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Assertion and expectation serialization API.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+#include <kunit/assert.h>
+
+#include "string-stream.h"
+
+void kunit_base_assert_format(const struct kunit_assert *assert,
+			      struct string_stream *stream)
+{
+	const char *expect_or_assert = NULL;
+
+	switch (assert->type) {
+	case KUNIT_EXPECTATION:
+		expect_or_assert = "EXPECTATION";
+		break;
+	case KUNIT_ASSERTION:
+		expect_or_assert = "ASSERTION";
+		break;
+	}
+
+	string_stream_add(stream, "%s FAILED at %s:%d\n",
+			 expect_or_assert, assert->file, assert->line);
+}
+EXPORT_SYMBOL_GPL(kunit_base_assert_format);
+
+void kunit_assert_print_msg(const struct kunit_assert *assert,
+			    struct string_stream *stream)
+{
+	if (assert->message.fmt)
+		string_stream_add(stream, "\n%pV", &assert->message);
+}
+EXPORT_SYMBOL_GPL(kunit_assert_print_msg);
+
+void kunit_fail_assert_format(const struct kunit_assert *assert,
+			      struct string_stream *stream)
+{
+	kunit_base_assert_format(assert, stream);
+	string_stream_add(stream, "%pV", &assert->message);
+}
+EXPORT_SYMBOL_GPL(kunit_fail_assert_format);
+
+void kunit_unary_assert_format(const struct kunit_assert *assert,
+			       struct string_stream *stream)
+{
+	struct kunit_unary_assert *unary_assert = container_of(
+			assert, struct kunit_unary_assert, assert);
+
+	kunit_base_assert_format(assert, stream);
+	if (unary_assert->expected_true)
+		string_stream_add(stream,
+				 "\tExpected %s to be true, but is false\n",
+				 unary_assert->condition);
+	else
+		string_stream_add(stream,
+				 "\tExpected %s to be false, but is true\n",
+				 unary_assert->condition);
+	kunit_assert_print_msg(assert, stream);
+}
+EXPORT_SYMBOL_GPL(kunit_unary_assert_format);
+
+void kunit_ptr_not_err_assert_format(const struct kunit_assert *assert,
+				     struct string_stream *stream)
+{
+	struct kunit_ptr_not_err_assert *ptr_assert = container_of(
+			assert, struct kunit_ptr_not_err_assert, assert);
+
+	kunit_base_assert_format(assert, stream);
+	if (!ptr_assert->value) {
+		string_stream_add(stream,
+				 "\tExpected %s is not null, but is\n",
+				 ptr_assert->text);
+	} else if (IS_ERR(ptr_assert->value)) {
+		string_stream_add(stream,
+				 "\tExpected %s is not error, but is: %ld\n",
+				 ptr_assert->text,
+				 PTR_ERR(ptr_assert->value));
+	}
+	kunit_assert_print_msg(assert, stream);
+}
+EXPORT_SYMBOL_GPL(kunit_ptr_not_err_assert_format);
+
+void kunit_binary_assert_format(const struct kunit_assert *assert,
+				struct string_stream *stream)
+{
+	struct kunit_binary_assert *binary_assert = container_of(
+			assert, struct kunit_binary_assert, assert);
+
+	kunit_base_assert_format(assert, stream);
+	string_stream_add(stream,
+			 "\tExpected %s %s %s, but\n",
+			 binary_assert->left_text,
+			 binary_assert->operation,
+			 binary_assert->right_text);
+	string_stream_add(stream, "\t\t%s == %lld\n",
+			 binary_assert->left_text,
+			 binary_assert->left_value);
+	string_stream_add(stream, "\t\t%s == %lld",
+			 binary_assert->right_text,
+			 binary_assert->right_value);
+	kunit_assert_print_msg(assert, stream);
+}
+EXPORT_SYMBOL_GPL(kunit_binary_assert_format);
+
+void kunit_binary_ptr_assert_format(const struct kunit_assert *assert,
+				    struct string_stream *stream)
+{
+	struct kunit_binary_ptr_assert *binary_assert = container_of(
+			assert, struct kunit_binary_ptr_assert, assert);
+
+	kunit_base_assert_format(assert, stream);
+	string_stream_add(stream,
+			 "\tExpected %s %s %s, but\n",
+			 binary_assert->left_text,
+			 binary_assert->operation,
+			 binary_assert->right_text);
+	string_stream_add(stream, "\t\t%s == %pK\n",
+			 binary_assert->left_text,
+			 binary_assert->left_value);
+	string_stream_add(stream, "\t\t%s == %pK",
+			 binary_assert->right_text,
+			 binary_assert->right_value);
+	kunit_assert_print_msg(assert, stream);
+}
+EXPORT_SYMBOL_GPL(kunit_binary_ptr_assert_format);
+
+void kunit_binary_str_assert_format(const struct kunit_assert *assert,
+				    struct string_stream *stream)
+{
+	struct kunit_binary_str_assert *binary_assert = container_of(
+			assert, struct kunit_binary_str_assert, assert);
+
+	kunit_base_assert_format(assert, stream);
+	string_stream_add(stream,
+			 "\tExpected %s %s %s, but\n",
+			 binary_assert->left_text,
+			 binary_assert->operation,
+			 binary_assert->right_text);
+	string_stream_add(stream, "\t\t%s == %s\n",
+			 binary_assert->left_text,
+			 binary_assert->left_value);
+	string_stream_add(stream, "\t\t%s == %s",
+			 binary_assert->right_text,
+			 binary_assert->right_value);
+	kunit_assert_print_msg(assert, stream);
+}
+EXPORT_SYMBOL_GPL(kunit_binary_str_assert_format);
diff --git a/lib/kunit/debugfs.c b/lib/kunit/debugfs.c
new file mode 100644
index 0000000..9214c49
--- /dev/null
+++ b/lib/kunit/debugfs.c
@@ -0,0 +1,116 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2020, Oracle and/or its affiliates.
+ *    Author: Alan Maguire <alan.maguire@oracle.com>
+ */
+
+#include <linux/debugfs.h>
+#include <linux/module.h>
+
+#include <kunit/test.h>
+
+#include "string-stream.h"
+
+#define KUNIT_DEBUGFS_ROOT             "kunit"
+#define KUNIT_DEBUGFS_RESULTS          "results"
+
+/*
+ * Create a debugfs representation of test suites:
+ *
+ * Path						Semantics
+ * /sys/kernel/debug/kunit/<testsuite>/results	Show results of last run for
+ *						testsuite
+ *
+ */
+
+static struct dentry *debugfs_rootdir;
+
+void kunit_debugfs_cleanup(void)
+{
+	debugfs_remove_recursive(debugfs_rootdir);
+}
+
+void kunit_debugfs_init(void)
+{
+	if (!debugfs_rootdir)
+		debugfs_rootdir = debugfs_create_dir(KUNIT_DEBUGFS_ROOT, NULL);
+}
+
+static void debugfs_print_result(struct seq_file *seq,
+				 struct kunit_suite *suite,
+				 struct kunit_case *test_case)
+{
+	if (!test_case || !test_case->log)
+		return;
+
+	seq_printf(seq, "%s", test_case->log);
+}
+
+/*
+ * /sys/kernel/debug/kunit/<testsuite>/results shows all results for testsuite.
+ */
+static int debugfs_print_results(struct seq_file *seq, void *v)
+{
+	struct kunit_suite *suite = (struct kunit_suite *)seq->private;
+	bool success = kunit_suite_has_succeeded(suite);
+	struct kunit_case *test_case;
+
+	if (!suite || !suite->log)
+		return 0;
+
+	seq_printf(seq, "%s", suite->log);
+
+	kunit_suite_for_each_test_case(suite, test_case)
+		debugfs_print_result(seq, suite, test_case);
+
+	seq_printf(seq, "%s %d - %s\n",
+		   kunit_status_to_string(success), 1, suite->name);
+	return 0;
+}
+
+static int debugfs_release(struct inode *inode, struct file *file)
+{
+	return single_release(inode, file);
+}
+
+static int debugfs_results_open(struct inode *inode, struct file *file)
+{
+	struct kunit_suite *suite;
+
+	suite = (struct kunit_suite *)inode->i_private;
+
+	return single_open(file, debugfs_print_results, suite);
+}
+
+static const struct file_operations debugfs_results_fops = {
+	.open = debugfs_results_open,
+	.read = seq_read,
+	.llseek = seq_lseek,
+	.release = debugfs_release,
+};
+
+void kunit_debugfs_create_suite(struct kunit_suite *suite)
+{
+	struct kunit_case *test_case;
+
+	/* Allocate logs before creating debugfs representation. */
+	suite->log = kzalloc(KUNIT_LOG_SIZE, GFP_KERNEL);
+	kunit_suite_for_each_test_case(suite, test_case)
+		test_case->log = kzalloc(KUNIT_LOG_SIZE, GFP_KERNEL);
+
+	suite->debugfs = debugfs_create_dir(suite->name, debugfs_rootdir);
+
+	debugfs_create_file(KUNIT_DEBUGFS_RESULTS, S_IFREG | 0444,
+			    suite->debugfs,
+			    suite, &debugfs_results_fops);
+}
+
+void kunit_debugfs_destroy_suite(struct kunit_suite *suite)
+{
+	struct kunit_case *test_case;
+
+	debugfs_remove_recursive(suite->debugfs);
+	kfree(suite->log);
+	kunit_suite_for_each_test_case(suite, test_case)
+		kfree(test_case->log);
+}
diff --git a/lib/kunit/debugfs.h b/lib/kunit/debugfs.h
new file mode 100644
index 0000000..dcc7d75
--- /dev/null
+++ b/lib/kunit/debugfs.h
@@ -0,0 +1,30 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020, Oracle and/or its affiliates.
+ */
+
+#ifndef _KUNIT_DEBUGFS_H
+#define _KUNIT_DEBUGFS_H
+
+#include <kunit/test.h>
+
+#ifdef CONFIG_KUNIT_DEBUGFS
+
+void kunit_debugfs_create_suite(struct kunit_suite *suite);
+void kunit_debugfs_destroy_suite(struct kunit_suite *suite);
+void kunit_debugfs_init(void);
+void kunit_debugfs_cleanup(void);
+
+#else
+
+static inline void kunit_debugfs_create_suite(struct kunit_suite *suite) { }
+
+static inline void kunit_debugfs_destroy_suite(struct kunit_suite *suite) { }
+
+static inline void kunit_debugfs_init(void) { }
+
+static inline void kunit_debugfs_cleanup(void) { }
+
+#endif /* CONFIG_KUNIT_DEBUGFS */
+
+#endif /* _KUNIT_DEBUGFS_H */
diff --git a/lib/kunit/kunit-example-test.c b/lib/kunit/kunit-example-test.c
new file mode 100644
index 0000000..be1164e
--- /dev/null
+++ b/lib/kunit/kunit-example-test.c
@@ -0,0 +1,90 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Example KUnit test to show how to use KUnit.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#include <kunit/test.h>
+
+/*
+ * This is the most fundamental element of KUnit, the test case. A test case
+ * makes a set EXPECTATIONs and ASSERTIONs about the behavior of some code; if
+ * any expectations or assertions are not met, the test fails; otherwise, the
+ * test passes.
+ *
+ * In KUnit, a test case is just a function with the signature
+ * `void (*)(struct kunit *)`. `struct kunit` is a context object that stores
+ * information about the current test.
+ */
+static void example_simple_test(struct kunit *test)
+{
+	/*
+	 * This is an EXPECTATION; it is how KUnit tests things. When you want
+	 * to test a piece of code, you set some expectations about what the
+	 * code should do. KUnit then runs the test and verifies that the code's
+	 * behavior matched what was expected.
+	 */
+	KUNIT_EXPECT_EQ(test, 1 + 1, 2);
+}
+
+/*
+ * This is run once before each test case, see the comment on
+ * example_test_suite for more information.
+ */
+static int example_test_init(struct kunit *test)
+{
+	kunit_info(test, "initializing\n");
+
+	return 0;
+}
+
+/*
+ * Here we make a list of all the test cases we want to add to the test suite
+ * below.
+ */
+static struct kunit_case example_test_cases[] = {
+	/*
+	 * This is a helper to create a test case object from a test case
+	 * function; its exact function is not important to understand how to
+	 * use KUnit, just know that this is how you associate test cases with a
+	 * test suite.
+	 */
+	KUNIT_CASE(example_simple_test),
+	{}
+};
+
+/*
+ * This defines a suite or grouping of tests.
+ *
+ * Test cases are defined as belonging to the suite by adding them to
+ * `kunit_cases`.
+ *
+ * Often it is desirable to run some function which will set up things which
+ * will be used by every test; this is accomplished with an `init` function
+ * which runs before each test case is invoked. Similarly, an `exit` function
+ * may be specified which runs after every test case and can be used to for
+ * cleanup. For clarity, running tests in a test suite would behave as follows:
+ *
+ * suite.init(test);
+ * suite.test_case[0](test);
+ * suite.exit(test);
+ * suite.init(test);
+ * suite.test_case[1](test);
+ * suite.exit(test);
+ * ...;
+ */
+static struct kunit_suite example_test_suite = {
+	.name = "example",
+	.init = example_test_init,
+	.test_cases = example_test_cases,
+};
+
+/*
+ * This registers the above test suite telling KUnit that this is a suite of
+ * tests that need to be run.
+ */
+kunit_test_suites(&example_test_suite);
+
+MODULE_LICENSE("GPL v2");
diff --git a/lib/kunit/kunit-test.c b/lib/kunit/kunit-test.c
new file mode 100644
index 0000000..aceb5bf
--- /dev/null
+++ b/lib/kunit/kunit-test.c
@@ -0,0 +1,334 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * KUnit test for core test infrastructure.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+#include <kunit/test.h>
+
+#include "try-catch-impl.h"
+
+struct kunit_try_catch_test_context {
+	struct kunit_try_catch *try_catch;
+	bool function_called;
+};
+
+static void kunit_test_successful_try(void *data)
+{
+	struct kunit *test = data;
+	struct kunit_try_catch_test_context *ctx = test->priv;
+
+	ctx->function_called = true;
+}
+
+static void kunit_test_no_catch(void *data)
+{
+	struct kunit *test = data;
+
+	KUNIT_FAIL(test, "Catch should not be called\n");
+}
+
+static void kunit_test_try_catch_successful_try_no_catch(struct kunit *test)
+{
+	struct kunit_try_catch_test_context *ctx = test->priv;
+	struct kunit_try_catch *try_catch = ctx->try_catch;
+
+	kunit_try_catch_init(try_catch,
+			     test,
+			     kunit_test_successful_try,
+			     kunit_test_no_catch);
+	kunit_try_catch_run(try_catch, test);
+
+	KUNIT_EXPECT_TRUE(test, ctx->function_called);
+}
+
+static void kunit_test_unsuccessful_try(void *data)
+{
+	struct kunit *test = data;
+	struct kunit_try_catch_test_context *ctx = test->priv;
+	struct kunit_try_catch *try_catch = ctx->try_catch;
+
+	kunit_try_catch_throw(try_catch);
+	KUNIT_FAIL(test, "This line should never be reached\n");
+}
+
+static void kunit_test_catch(void *data)
+{
+	struct kunit *test = data;
+	struct kunit_try_catch_test_context *ctx = test->priv;
+
+	ctx->function_called = true;
+}
+
+static void kunit_test_try_catch_unsuccessful_try_does_catch(struct kunit *test)
+{
+	struct kunit_try_catch_test_context *ctx = test->priv;
+	struct kunit_try_catch *try_catch = ctx->try_catch;
+
+	kunit_try_catch_init(try_catch,
+			     test,
+			     kunit_test_unsuccessful_try,
+			     kunit_test_catch);
+	kunit_try_catch_run(try_catch, test);
+
+	KUNIT_EXPECT_TRUE(test, ctx->function_called);
+}
+
+static int kunit_try_catch_test_init(struct kunit *test)
+{
+	struct kunit_try_catch_test_context *ctx;
+
+	ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
+	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
+	test->priv = ctx;
+
+	ctx->try_catch = kunit_kmalloc(test,
+				       sizeof(*ctx->try_catch),
+				       GFP_KERNEL);
+	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->try_catch);
+
+	return 0;
+}
+
+static struct kunit_case kunit_try_catch_test_cases[] = {
+	KUNIT_CASE(kunit_test_try_catch_successful_try_no_catch),
+	KUNIT_CASE(kunit_test_try_catch_unsuccessful_try_does_catch),
+	{}
+};
+
+static struct kunit_suite kunit_try_catch_test_suite = {
+	.name = "kunit-try-catch-test",
+	.init = kunit_try_catch_test_init,
+	.test_cases = kunit_try_catch_test_cases,
+};
+
+/*
+ * Context for testing test managed resources
+ * is_resource_initialized is used to test arbitrary resources
+ */
+struct kunit_test_resource_context {
+	struct kunit test;
+	bool is_resource_initialized;
+	int allocate_order[2];
+	int free_order[2];
+};
+
+static int fake_resource_init(struct kunit_resource *res, void *context)
+{
+	struct kunit_test_resource_context *ctx = context;
+
+	res->allocation = &ctx->is_resource_initialized;
+	ctx->is_resource_initialized = true;
+	return 0;
+}
+
+static void fake_resource_free(struct kunit_resource *res)
+{
+	bool *is_resource_initialized = res->allocation;
+
+	*is_resource_initialized = false;
+}
+
+static void kunit_resource_test_init_resources(struct kunit *test)
+{
+	struct kunit_test_resource_context *ctx = test->priv;
+
+	kunit_init_test(&ctx->test, "testing_test_init_test", NULL);
+
+	KUNIT_EXPECT_TRUE(test, list_empty(&ctx->test.resources));
+}
+
+static void kunit_resource_test_alloc_resource(struct kunit *test)
+{
+	struct kunit_test_resource_context *ctx = test->priv;
+	struct kunit_resource *res;
+	kunit_resource_free_t free = fake_resource_free;
+
+	res = kunit_alloc_and_get_resource(&ctx->test,
+					   fake_resource_init,
+					   fake_resource_free,
+					   GFP_KERNEL,
+					   ctx);
+
+	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, res);
+	KUNIT_EXPECT_PTR_EQ(test,
+			    &ctx->is_resource_initialized,
+			    (bool *) res->allocation);
+	KUNIT_EXPECT_TRUE(test, list_is_last(&res->node, &ctx->test.resources));
+	KUNIT_EXPECT_PTR_EQ(test, free, res->free);
+}
+
+static void kunit_resource_test_destroy_resource(struct kunit *test)
+{
+	struct kunit_test_resource_context *ctx = test->priv;
+	struct kunit_resource *res = kunit_alloc_and_get_resource(
+			&ctx->test,
+			fake_resource_init,
+			fake_resource_free,
+			GFP_KERNEL,
+			ctx);
+
+	KUNIT_ASSERT_FALSE(test,
+			   kunit_resource_destroy(&ctx->test,
+						  kunit_resource_instance_match,
+						  res->free,
+						  res->allocation));
+
+	KUNIT_EXPECT_FALSE(test, ctx->is_resource_initialized);
+	KUNIT_EXPECT_TRUE(test, list_empty(&ctx->test.resources));
+}
+
+static void kunit_resource_test_cleanup_resources(struct kunit *test)
+{
+	int i;
+	struct kunit_test_resource_context *ctx = test->priv;
+	struct kunit_resource *resources[5];
+
+	for (i = 0; i < ARRAY_SIZE(resources); i++) {
+		resources[i] = kunit_alloc_and_get_resource(&ctx->test,
+							    fake_resource_init,
+							    fake_resource_free,
+							    GFP_KERNEL,
+							    ctx);
+	}
+
+	kunit_cleanup(&ctx->test);
+
+	KUNIT_EXPECT_TRUE(test, list_empty(&ctx->test.resources));
+}
+
+static void kunit_resource_test_mark_order(int order_array[],
+					   size_t order_size,
+					   int key)
+{
+	int i;
+
+	for (i = 0; i < order_size && order_array[i]; i++)
+		;
+
+	order_array[i] = key;
+}
+
+#define KUNIT_RESOURCE_TEST_MARK_ORDER(ctx, order_field, key)		       \
+		kunit_resource_test_mark_order(ctx->order_field,	       \
+					       ARRAY_SIZE(ctx->order_field),   \
+					       key)
+
+static int fake_resource_2_init(struct kunit_resource *res, void *context)
+{
+	struct kunit_test_resource_context *ctx = context;
+
+	KUNIT_RESOURCE_TEST_MARK_ORDER(ctx, allocate_order, 2);
+
+	res->allocation = ctx;
+
+	return 0;
+}
+
+static void fake_resource_2_free(struct kunit_resource *res)
+{
+	struct kunit_test_resource_context *ctx = res->allocation;
+
+	KUNIT_RESOURCE_TEST_MARK_ORDER(ctx, free_order, 2);
+}
+
+static int fake_resource_1_init(struct kunit_resource *res, void *context)
+{
+	struct kunit_test_resource_context *ctx = context;
+
+	kunit_alloc_and_get_resource(&ctx->test,
+				     fake_resource_2_init,
+				     fake_resource_2_free,
+				     GFP_KERNEL,
+				     ctx);
+
+	KUNIT_RESOURCE_TEST_MARK_ORDER(ctx, allocate_order, 1);
+
+	res->allocation = ctx;
+
+	return 0;
+}
+
+static void fake_resource_1_free(struct kunit_resource *res)
+{
+	struct kunit_test_resource_context *ctx = res->allocation;
+
+	KUNIT_RESOURCE_TEST_MARK_ORDER(ctx, free_order, 1);
+}
+
+/*
+ * TODO(brendanhiggins@google.com): replace the arrays that keep track of the
+ * order of allocation and freeing with strict mocks using the IN_SEQUENCE macro
+ * to assert allocation and freeing order when the feature becomes available.
+ */
+static void kunit_resource_test_proper_free_ordering(struct kunit *test)
+{
+	struct kunit_test_resource_context *ctx = test->priv;
+
+	/* fake_resource_1 allocates a fake_resource_2 in its init. */
+	kunit_alloc_and_get_resource(&ctx->test,
+				     fake_resource_1_init,
+				     fake_resource_1_free,
+				     GFP_KERNEL,
+				     ctx);
+
+	/*
+	 * Since fake_resource_2_init calls KUNIT_RESOURCE_TEST_MARK_ORDER
+	 * before returning to fake_resource_1_init, it should be the first to
+	 * put its key in the allocate_order array.
+	 */
+	KUNIT_EXPECT_EQ(test, ctx->allocate_order[0], 2);
+	KUNIT_EXPECT_EQ(test, ctx->allocate_order[1], 1);
+
+	kunit_cleanup(&ctx->test);
+
+	/*
+	 * Because fake_resource_2 finishes allocation before fake_resource_1,
+	 * fake_resource_1 should be freed first since it could depend on
+	 * fake_resource_2.
+	 */
+	KUNIT_EXPECT_EQ(test, ctx->free_order[0], 1);
+	KUNIT_EXPECT_EQ(test, ctx->free_order[1], 2);
+}
+
+static int kunit_resource_test_init(struct kunit *test)
+{
+	struct kunit_test_resource_context *ctx =
+			kzalloc(sizeof(*ctx), GFP_KERNEL);
+
+	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
+
+	test->priv = ctx;
+
+	kunit_init_test(&ctx->test, "test_test_context", NULL);
+
+	return 0;
+}
+
+static void kunit_resource_test_exit(struct kunit *test)
+{
+	struct kunit_test_resource_context *ctx = test->priv;
+
+	kunit_cleanup(&ctx->test);
+	kfree(ctx);
+}
+
+static struct kunit_case kunit_resource_test_cases[] = {
+	KUNIT_CASE(kunit_resource_test_init_resources),
+	KUNIT_CASE(kunit_resource_test_alloc_resource),
+	KUNIT_CASE(kunit_resource_test_destroy_resource),
+	KUNIT_CASE(kunit_resource_test_cleanup_resources),
+	KUNIT_CASE(kunit_resource_test_proper_free_ordering),
+	{}
+};
+
+static struct kunit_suite kunit_resource_test_suite = {
+	.name = "kunit-resource-test",
+	.init = kunit_resource_test_init,
+	.exit = kunit_resource_test_exit,
+	.test_cases = kunit_resource_test_cases,
+};
+kunit_test_suites(&kunit_try_catch_test_suite, &kunit_resource_test_suite);
+
+MODULE_LICENSE("GPL v2");
diff --git a/lib/kunit/string-stream-test.c b/lib/kunit/string-stream-test.c
new file mode 100644
index 0000000..110f3a9
--- /dev/null
+++ b/lib/kunit/string-stream-test.c
@@ -0,0 +1,53 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * KUnit test for struct string_stream.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#include <kunit/test.h>
+#include <linux/slab.h>
+
+#include "string-stream.h"
+
+static void string_stream_test_empty_on_creation(struct kunit *test)
+{
+	struct string_stream *stream = alloc_string_stream(test, GFP_KERNEL);
+
+	KUNIT_EXPECT_TRUE(test, string_stream_is_empty(stream));
+}
+
+static void string_stream_test_not_empty_after_add(struct kunit *test)
+{
+	struct string_stream *stream = alloc_string_stream(test, GFP_KERNEL);
+
+	string_stream_add(stream, "Foo");
+
+	KUNIT_EXPECT_FALSE(test, string_stream_is_empty(stream));
+}
+
+static void string_stream_test_get_string(struct kunit *test)
+{
+	struct string_stream *stream = alloc_string_stream(test, GFP_KERNEL);
+	char *output;
+
+	string_stream_add(stream, "Foo");
+	string_stream_add(stream, " %s", "bar");
+
+	output = string_stream_get_string(stream);
+	KUNIT_ASSERT_STREQ(test, output, "Foo bar");
+}
+
+static struct kunit_case string_stream_test_cases[] = {
+	KUNIT_CASE(string_stream_test_empty_on_creation),
+	KUNIT_CASE(string_stream_test_not_empty_after_add),
+	KUNIT_CASE(string_stream_test_get_string),
+	{}
+};
+
+static struct kunit_suite string_stream_test_suite = {
+	.name = "string-stream-test",
+	.test_cases = string_stream_test_cases
+};
+kunit_test_suites(&string_stream_test_suite);
diff --git a/lib/kunit/string-stream.c b/lib/kunit/string-stream.c
new file mode 100644
index 0000000..3503920
--- /dev/null
+++ b/lib/kunit/string-stream.c
@@ -0,0 +1,218 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * C++ stream style string builder used in KUnit for building messages.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#include <kunit/test.h>
+#include <linux/list.h>
+#include <linux/slab.h>
+
+#include "string-stream.h"
+
+struct string_stream_fragment_alloc_context {
+	struct kunit *test;
+	int len;
+	gfp_t gfp;
+};
+
+static int string_stream_fragment_init(struct kunit_resource *res,
+				       void *context)
+{
+	struct string_stream_fragment_alloc_context *ctx = context;
+	struct string_stream_fragment *frag;
+
+	frag = kunit_kzalloc(ctx->test, sizeof(*frag), ctx->gfp);
+	if (!frag)
+		return -ENOMEM;
+
+	frag->test = ctx->test;
+	frag->fragment = kunit_kmalloc(ctx->test, ctx->len, ctx->gfp);
+	if (!frag->fragment)
+		return -ENOMEM;
+
+	res->allocation = frag;
+
+	return 0;
+}
+
+static void string_stream_fragment_free(struct kunit_resource *res)
+{
+	struct string_stream_fragment *frag = res->allocation;
+
+	list_del(&frag->node);
+	kunit_kfree(frag->test, frag->fragment);
+	kunit_kfree(frag->test, frag);
+}
+
+static struct string_stream_fragment *alloc_string_stream_fragment(
+		struct kunit *test, int len, gfp_t gfp)
+{
+	struct string_stream_fragment_alloc_context context = {
+		.test = test,
+		.len = len,
+		.gfp = gfp
+	};
+
+	return kunit_alloc_resource(test,
+				    string_stream_fragment_init,
+				    string_stream_fragment_free,
+				    gfp,
+				    &context);
+}
+
+static int string_stream_fragment_destroy(struct string_stream_fragment *frag)
+{
+	return kunit_resource_destroy(frag->test,
+				      kunit_resource_instance_match,
+				      string_stream_fragment_free,
+				      frag);
+}
+
+int string_stream_vadd(struct string_stream *stream,
+		       const char *fmt,
+		       va_list args)
+{
+	struct string_stream_fragment *frag_container;
+	int len;
+	va_list args_for_counting;
+
+	/* Make a copy because `vsnprintf` could change it */
+	va_copy(args_for_counting, args);
+
+	/* Need space for null byte. */
+	len = vsnprintf(NULL, 0, fmt, args_for_counting) + 1;
+
+	va_end(args_for_counting);
+
+	frag_container = alloc_string_stream_fragment(stream->test,
+						      len,
+						      stream->gfp);
+	if (!frag_container)
+		return -ENOMEM;
+
+	len = vsnprintf(frag_container->fragment, len, fmt, args);
+	spin_lock(&stream->lock);
+	stream->length += len;
+	list_add_tail(&frag_container->node, &stream->fragments);
+	spin_unlock(&stream->lock);
+
+	return 0;
+}
+
+int string_stream_add(struct string_stream *stream, const char *fmt, ...)
+{
+	va_list args;
+	int result;
+
+	va_start(args, fmt);
+	result = string_stream_vadd(stream, fmt, args);
+	va_end(args);
+
+	return result;
+}
+
+static void string_stream_clear(struct string_stream *stream)
+{
+	struct string_stream_fragment *frag_container, *frag_container_safe;
+
+	spin_lock(&stream->lock);
+	list_for_each_entry_safe(frag_container,
+				 frag_container_safe,
+				 &stream->fragments,
+				 node) {
+		string_stream_fragment_destroy(frag_container);
+	}
+	stream->length = 0;
+	spin_unlock(&stream->lock);
+}
+
+char *string_stream_get_string(struct string_stream *stream)
+{
+	struct string_stream_fragment *frag_container;
+	size_t buf_len = stream->length + 1; /* +1 for null byte. */
+	char *buf;
+
+	buf = kunit_kzalloc(stream->test, buf_len, stream->gfp);
+	if (!buf)
+		return NULL;
+
+	spin_lock(&stream->lock);
+	list_for_each_entry(frag_container, &stream->fragments, node)
+		strlcat(buf, frag_container->fragment, buf_len);
+	spin_unlock(&stream->lock);
+
+	return buf;
+}
+
+int string_stream_append(struct string_stream *stream,
+			 struct string_stream *other)
+{
+	const char *other_content;
+
+	other_content = string_stream_get_string(other);
+
+	if (!other_content)
+		return -ENOMEM;
+
+	return string_stream_add(stream, other_content);
+}
+
+bool string_stream_is_empty(struct string_stream *stream)
+{
+	return list_empty(&stream->fragments);
+}
+
+struct string_stream_alloc_context {
+	struct kunit *test;
+	gfp_t gfp;
+};
+
+static int string_stream_init(struct kunit_resource *res, void *context)
+{
+	struct string_stream *stream;
+	struct string_stream_alloc_context *ctx = context;
+
+	stream = kunit_kzalloc(ctx->test, sizeof(*stream), ctx->gfp);
+	if (!stream)
+		return -ENOMEM;
+
+	res->allocation = stream;
+	stream->gfp = ctx->gfp;
+	stream->test = ctx->test;
+	INIT_LIST_HEAD(&stream->fragments);
+	spin_lock_init(&stream->lock);
+
+	return 0;
+}
+
+static void string_stream_free(struct kunit_resource *res)
+{
+	struct string_stream *stream = res->allocation;
+
+	string_stream_clear(stream);
+}
+
+struct string_stream *alloc_string_stream(struct kunit *test, gfp_t gfp)
+{
+	struct string_stream_alloc_context context = {
+		.test = test,
+		.gfp = gfp
+	};
+
+	return kunit_alloc_resource(test,
+				    string_stream_init,
+				    string_stream_free,
+				    gfp,
+				    &context);
+}
+
+int string_stream_destroy(struct string_stream *stream)
+{
+	return kunit_resource_destroy(stream->test,
+				      kunit_resource_instance_match,
+				      string_stream_free,
+				      stream);
+}
diff --git a/lib/kunit/string-stream.h b/lib/kunit/string-stream.h
new file mode 100644
index 0000000..fe98a00
--- /dev/null
+++ b/lib/kunit/string-stream.h
@@ -0,0 +1,51 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * C++ stream style string builder used in KUnit for building messages.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#ifndef _KUNIT_STRING_STREAM_H
+#define _KUNIT_STRING_STREAM_H
+
+#include <linux/spinlock.h>
+#include <linux/types.h>
+#include <stdarg.h>
+
+struct string_stream_fragment {
+	struct kunit *test;
+	struct list_head node;
+	char *fragment;
+};
+
+struct string_stream {
+	size_t length;
+	struct list_head fragments;
+	/* length and fragments are protected by this lock */
+	spinlock_t lock;
+	struct kunit *test;
+	gfp_t gfp;
+};
+
+struct kunit;
+
+struct string_stream *alloc_string_stream(struct kunit *test, gfp_t gfp);
+
+int __printf(2, 3) string_stream_add(struct string_stream *stream,
+				     const char *fmt, ...);
+
+int string_stream_vadd(struct string_stream *stream,
+		       const char *fmt,
+		       va_list args);
+
+char *string_stream_get_string(struct string_stream *stream);
+
+int string_stream_append(struct string_stream *stream,
+			 struct string_stream *other);
+
+bool string_stream_is_empty(struct string_stream *stream);
+
+int string_stream_destroy(struct string_stream *stream);
+
+#endif /* _KUNIT_STRING_STREAM_H */
diff --git a/lib/kunit/test.c b/lib/kunit/test.c
new file mode 100644
index 0000000..2b48838
--- /dev/null
+++ b/lib/kunit/test.c
@@ -0,0 +1,586 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Base unit test (KUnit) API.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#include <kunit/test.h>
+#include <linux/kernel.h>
+#include <linux/sched/debug.h>
+
+#include "debugfs.h"
+#include "string-stream.h"
+#include "try-catch-impl.h"
+
+static void kunit_set_failure(struct kunit *test)
+{
+	WRITE_ONCE(test->success, false);
+}
+
+static void kunit_print_tap_version(void)
+{
+	static bool kunit_has_printed_tap_version;
+
+	if (!kunit_has_printed_tap_version) {
+		pr_info("TAP version 14\n");
+		kunit_has_printed_tap_version = true;
+	}
+}
+
+/*
+ * Append formatted message to log, size of which is limited to
+ * KUNIT_LOG_SIZE bytes (including null terminating byte).
+ */
+void kunit_log_append(char *log, const char *fmt, ...)
+{
+	char line[KUNIT_LOG_SIZE];
+	va_list args;
+	int len_left;
+
+	if (!log)
+		return;
+
+	len_left = KUNIT_LOG_SIZE - strlen(log) - 1;
+	if (len_left <= 0)
+		return;
+
+	va_start(args, fmt);
+	vsnprintf(line, sizeof(line), fmt, args);
+	va_end(args);
+
+	strncat(log, line, len_left);
+}
+EXPORT_SYMBOL_GPL(kunit_log_append);
+
+size_t kunit_suite_num_test_cases(struct kunit_suite *suite)
+{
+	struct kunit_case *test_case;
+	size_t len = 0;
+
+	kunit_suite_for_each_test_case(suite, test_case)
+		len++;
+
+	return len;
+}
+EXPORT_SYMBOL_GPL(kunit_suite_num_test_cases);
+
+static void kunit_print_subtest_start(struct kunit_suite *suite)
+{
+	kunit_print_tap_version();
+	kunit_log(KERN_INFO, suite, "\t# Subtest: %s", suite->name);
+	kunit_log(KERN_INFO, suite, "\t1..%zd",
+		  kunit_suite_num_test_cases(suite));
+}
+
+static void kunit_print_ok_not_ok(void *test_or_suite,
+				  bool is_test,
+				  bool is_ok,
+				  size_t test_number,
+				  const char *description)
+{
+	struct kunit_suite *suite = is_test ? NULL : test_or_suite;
+	struct kunit *test = is_test ? test_or_suite : NULL;
+
+	/*
+	 * We do not log the test suite results as doing so would
+	 * mean debugfs display would consist of the test suite
+	 * description and status prior to individual test results.
+	 * Hence directly printk the suite status, and we will
+	 * separately seq_printf() the suite status for the debugfs
+	 * representation.
+	 */
+	if (suite)
+		pr_info("%s %zd - %s\n",
+			kunit_status_to_string(is_ok),
+			test_number, description);
+	else
+		kunit_log(KERN_INFO, test, "\t%s %zd - %s",
+			  kunit_status_to_string(is_ok),
+			  test_number, description);
+}
+
+bool kunit_suite_has_succeeded(struct kunit_suite *suite)
+{
+	const struct kunit_case *test_case;
+
+	kunit_suite_for_each_test_case(suite, test_case) {
+		if (!test_case->success)
+			return false;
+	}
+
+	return true;
+}
+EXPORT_SYMBOL_GPL(kunit_suite_has_succeeded);
+
+static void kunit_print_subtest_end(struct kunit_suite *suite)
+{
+	static size_t kunit_suite_counter = 1;
+
+	kunit_print_ok_not_ok((void *)suite, false,
+			      kunit_suite_has_succeeded(suite),
+			      kunit_suite_counter++,
+			      suite->name);
+}
+
+unsigned int kunit_test_case_num(struct kunit_suite *suite,
+				 struct kunit_case *test_case)
+{
+	struct kunit_case *tc;
+	unsigned int i = 1;
+
+	kunit_suite_for_each_test_case(suite, tc) {
+		if (tc == test_case)
+			return i;
+		i++;
+	}
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(kunit_test_case_num);
+
+static void kunit_print_string_stream(struct kunit *test,
+				      struct string_stream *stream)
+{
+	struct string_stream_fragment *fragment;
+	char *buf;
+
+	if (string_stream_is_empty(stream))
+		return;
+
+	buf = string_stream_get_string(stream);
+	if (!buf) {
+		kunit_err(test,
+			  "Could not allocate buffer, dumping stream:\n");
+		list_for_each_entry(fragment, &stream->fragments, node) {
+			kunit_err(test, "%s", fragment->fragment);
+		}
+		kunit_err(test, "\n");
+	} else {
+		kunit_err(test, "%s", buf);
+		kunit_kfree(test, buf);
+	}
+}
+
+static void kunit_fail(struct kunit *test, struct kunit_assert *assert)
+{
+	struct string_stream *stream;
+
+	kunit_set_failure(test);
+
+	stream = alloc_string_stream(test, GFP_KERNEL);
+	if (!stream) {
+		WARN(true,
+		     "Could not allocate stream to print failed assertion in %s:%d\n",
+		     assert->file,
+		     assert->line);
+		return;
+	}
+
+	assert->format(assert, stream);
+
+	kunit_print_string_stream(test, stream);
+
+	WARN_ON(string_stream_destroy(stream));
+}
+
+static void __noreturn kunit_abort(struct kunit *test)
+{
+	kunit_try_catch_throw(&test->try_catch); /* Does not return. */
+
+	/*
+	 * Throw could not abort from test.
+	 *
+	 * XXX: we should never reach this line! As kunit_try_catch_throw is
+	 * marked __noreturn.
+	 */
+	WARN_ONCE(true, "Throw could not abort from test!\n");
+}
+
+void kunit_do_assertion(struct kunit *test,
+			struct kunit_assert *assert,
+			bool pass,
+			const char *fmt, ...)
+{
+	va_list args;
+
+	if (pass)
+		return;
+
+	va_start(args, fmt);
+
+	assert->message.fmt = fmt;
+	assert->message.va = &args;
+
+	kunit_fail(test, assert);
+
+	va_end(args);
+
+	if (assert->type == KUNIT_ASSERTION)
+		kunit_abort(test);
+}
+EXPORT_SYMBOL_GPL(kunit_do_assertion);
+
+void kunit_init_test(struct kunit *test, const char *name, char *log)
+{
+	spin_lock_init(&test->lock);
+	INIT_LIST_HEAD(&test->resources);
+	test->name = name;
+	test->log = log;
+	if (test->log)
+		test->log[0] = '\0';
+	test->success = true;
+}
+EXPORT_SYMBOL_GPL(kunit_init_test);
+
+/*
+ * Initializes and runs test case. Does not clean up or do post validations.
+ */
+static void kunit_run_case_internal(struct kunit *test,
+				    struct kunit_suite *suite,
+				    struct kunit_case *test_case)
+{
+	if (suite->init) {
+		int ret;
+
+		ret = suite->init(test);
+		if (ret) {
+			kunit_err(test, "failed to initialize: %d\n", ret);
+			kunit_set_failure(test);
+			return;
+		}
+	}
+
+	test_case->run_case(test);
+}
+
+static void kunit_case_internal_cleanup(struct kunit *test)
+{
+	kunit_cleanup(test);
+}
+
+/*
+ * Performs post validations and cleanup after a test case was run.
+ * XXX: Should ONLY BE CALLED AFTER kunit_run_case_internal!
+ */
+static void kunit_run_case_cleanup(struct kunit *test,
+				   struct kunit_suite *suite)
+{
+	if (suite->exit)
+		suite->exit(test);
+
+	kunit_case_internal_cleanup(test);
+}
+
+struct kunit_try_catch_context {
+	struct kunit *test;
+	struct kunit_suite *suite;
+	struct kunit_case *test_case;
+};
+
+static void kunit_try_run_case(void *data)
+{
+	struct kunit_try_catch_context *ctx = data;
+	struct kunit *test = ctx->test;
+	struct kunit_suite *suite = ctx->suite;
+	struct kunit_case *test_case = ctx->test_case;
+
+	/*
+	 * kunit_run_case_internal may encounter a fatal error; if it does,
+	 * abort will be called, this thread will exit, and finally the parent
+	 * thread will resume control and handle any necessary clean up.
+	 */
+	kunit_run_case_internal(test, suite, test_case);
+	/* This line may never be reached. */
+	kunit_run_case_cleanup(test, suite);
+}
+
+static void kunit_catch_run_case(void *data)
+{
+	struct kunit_try_catch_context *ctx = data;
+	struct kunit *test = ctx->test;
+	struct kunit_suite *suite = ctx->suite;
+	int try_exit_code = kunit_try_catch_get_result(&test->try_catch);
+
+	if (try_exit_code) {
+		kunit_set_failure(test);
+		/*
+		 * Test case could not finish, we have no idea what state it is
+		 * in, so don't do clean up.
+		 */
+		if (try_exit_code == -ETIMEDOUT) {
+			kunit_err(test, "test case timed out\n");
+		/*
+		 * Unknown internal error occurred preventing test case from
+		 * running, so there is nothing to clean up.
+		 */
+		} else {
+			kunit_err(test, "internal error occurred preventing test case from running: %d\n",
+				  try_exit_code);
+		}
+		return;
+	}
+
+	/*
+	 * Test case was run, but aborted. It is the test case's business as to
+	 * whether it failed or not, we just need to clean up.
+	 */
+	kunit_run_case_cleanup(test, suite);
+}
+
+/*
+ * Performs all logic to run a test case. It also catches most errors that
+ * occur in a test case and reports them as failures.
+ */
+static void kunit_run_case_catch_errors(struct kunit_suite *suite,
+					struct kunit_case *test_case)
+{
+	struct kunit_try_catch_context context;
+	struct kunit_try_catch *try_catch;
+	struct kunit test;
+
+	kunit_init_test(&test, test_case->name, test_case->log);
+	try_catch = &test.try_catch;
+
+	kunit_try_catch_init(try_catch,
+			     &test,
+			     kunit_try_run_case,
+			     kunit_catch_run_case);
+	context.test = &test;
+	context.suite = suite;
+	context.test_case = test_case;
+	kunit_try_catch_run(try_catch, &context);
+
+	test_case->success = test.success;
+
+	kunit_print_ok_not_ok(&test, true, test_case->success,
+			      kunit_test_case_num(suite, test_case),
+			      test_case->name);
+}
+
+int kunit_run_tests(struct kunit_suite *suite)
+{
+	struct kunit_case *test_case;
+
+	kunit_print_subtest_start(suite);
+
+	kunit_suite_for_each_test_case(suite, test_case)
+		kunit_run_case_catch_errors(suite, test_case);
+
+	kunit_print_subtest_end(suite);
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(kunit_run_tests);
+
+static void kunit_init_suite(struct kunit_suite *suite)
+{
+	kunit_debugfs_create_suite(suite);
+}
+
+int __kunit_test_suites_init(struct kunit_suite **suites)
+{
+	unsigned int i;
+
+	for (i = 0; suites[i] != NULL; i++) {
+		kunit_init_suite(suites[i]);
+		kunit_run_tests(suites[i]);
+	}
+	return 0;
+}
+EXPORT_SYMBOL_GPL(__kunit_test_suites_init);
+
+static void kunit_exit_suite(struct kunit_suite *suite)
+{
+	kunit_debugfs_destroy_suite(suite);
+}
+
+void __kunit_test_suites_exit(struct kunit_suite **suites)
+{
+	unsigned int i;
+
+	for (i = 0; suites[i] != NULL; i++)
+		kunit_exit_suite(suites[i]);
+}
+EXPORT_SYMBOL_GPL(__kunit_test_suites_exit);
+
+struct kunit_resource *kunit_alloc_and_get_resource(struct kunit *test,
+						    kunit_resource_init_t init,
+						    kunit_resource_free_t free,
+						    gfp_t internal_gfp,
+						    void *context)
+{
+	struct kunit_resource *res;
+	int ret;
+
+	res = kzalloc(sizeof(*res), internal_gfp);
+	if (!res)
+		return NULL;
+
+	ret = init(res, context);
+	if (ret)
+		return NULL;
+
+	res->free = free;
+	spin_lock(&test->lock);
+	list_add_tail(&res->node, &test->resources);
+	spin_unlock(&test->lock);
+
+	return res;
+}
+EXPORT_SYMBOL_GPL(kunit_alloc_and_get_resource);
+
+static void kunit_resource_free(struct kunit *test, struct kunit_resource *res)
+{
+	res->free(res);
+	kfree(res);
+}
+
+static struct kunit_resource *kunit_resource_find(struct kunit *test,
+						  kunit_resource_match_t match,
+						  kunit_resource_free_t free,
+						  void *match_data)
+{
+	struct kunit_resource *resource;
+
+	lockdep_assert_held(&test->lock);
+
+	list_for_each_entry_reverse(resource, &test->resources, node) {
+		if (resource->free != free)
+			continue;
+		if (match(test, resource->allocation, match_data))
+			return resource;
+	}
+
+	return NULL;
+}
+
+static struct kunit_resource *kunit_resource_remove(
+		struct kunit *test,
+		kunit_resource_match_t match,
+		kunit_resource_free_t free,
+		void *match_data)
+{
+	struct kunit_resource *resource;
+
+	spin_lock(&test->lock);
+	resource = kunit_resource_find(test, match, free, match_data);
+	if (resource)
+		list_del(&resource->node);
+	spin_unlock(&test->lock);
+
+	return resource;
+}
+
+int kunit_resource_destroy(struct kunit *test,
+			   kunit_resource_match_t match,
+			   kunit_resource_free_t free,
+			   void *match_data)
+{
+	struct kunit_resource *resource;
+
+	resource = kunit_resource_remove(test, match, free, match_data);
+
+	if (!resource)
+		return -ENOENT;
+
+	kunit_resource_free(test, resource);
+	return 0;
+}
+EXPORT_SYMBOL_GPL(kunit_resource_destroy);
+
+struct kunit_kmalloc_params {
+	size_t size;
+	gfp_t gfp;
+};
+
+static int kunit_kmalloc_init(struct kunit_resource *res, void *context)
+{
+	struct kunit_kmalloc_params *params = context;
+
+	res->allocation = kmalloc(params->size, params->gfp);
+	if (!res->allocation)
+		return -ENOMEM;
+
+	return 0;
+}
+
+static void kunit_kmalloc_free(struct kunit_resource *res)
+{
+	kfree(res->allocation);
+}
+
+void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp)
+{
+	struct kunit_kmalloc_params params = {
+		.size = size,
+		.gfp = gfp
+	};
+
+	return kunit_alloc_resource(test,
+				    kunit_kmalloc_init,
+				    kunit_kmalloc_free,
+				    gfp,
+				    &params);
+}
+EXPORT_SYMBOL_GPL(kunit_kmalloc);
+
+void kunit_kfree(struct kunit *test, const void *ptr)
+{
+	int rc;
+
+	rc = kunit_resource_destroy(test,
+				    kunit_resource_instance_match,
+				    kunit_kmalloc_free,
+				    (void *)ptr);
+
+	WARN_ON(rc);
+}
+EXPORT_SYMBOL_GPL(kunit_kfree);
+
+void kunit_cleanup(struct kunit *test)
+{
+	struct kunit_resource *resource;
+
+	/*
+	 * test->resources is a stack - each allocation must be freed in the
+	 * reverse order from which it was added since one resource may depend
+	 * on another for its entire lifetime.
+	 * Also, we cannot use the normal list_for_each constructs, even the
+	 * safe ones because *arbitrary* nodes may be deleted when
+	 * kunit_resource_free is called; the list_for_each_safe variants only
+	 * protect against the current node being deleted, not the next.
+	 */
+	while (true) {
+		spin_lock(&test->lock);
+		if (list_empty(&test->resources)) {
+			spin_unlock(&test->lock);
+			break;
+		}
+		resource = list_last_entry(&test->resources,
+					   struct kunit_resource,
+					   node);
+		list_del(&resource->node);
+		spin_unlock(&test->lock);
+
+		kunit_resource_free(test, resource);
+	}
+}
+EXPORT_SYMBOL_GPL(kunit_cleanup);
+
+static int __init kunit_init(void)
+{
+	kunit_debugfs_init();
+
+	return 0;
+}
+late_initcall(kunit_init);
+
+static void __exit kunit_exit(void)
+{
+	kunit_debugfs_cleanup();
+}
+module_exit(kunit_exit);
+
+MODULE_LICENSE("GPL v2");
diff --git a/lib/kunit/try-catch-impl.h b/lib/kunit/try-catch-impl.h
new file mode 100644
index 0000000..203ba6a
--- /dev/null
+++ b/lib/kunit/try-catch-impl.h
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Internal kunit try catch implementation to be shared with tests.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#ifndef _KUNIT_TRY_CATCH_IMPL_H
+#define _KUNIT_TRY_CATCH_IMPL_H
+
+#include <kunit/try-catch.h>
+#include <linux/types.h>
+
+struct kunit;
+
+static inline void kunit_try_catch_init(struct kunit_try_catch *try_catch,
+					struct kunit *test,
+					kunit_try_catch_func_t try,
+					kunit_try_catch_func_t catch)
+{
+	try_catch->test = test;
+	try_catch->try = try;
+	try_catch->catch = catch;
+}
+
+#endif /* _KUNIT_TRY_CATCH_IMPL_H */
diff --git a/lib/kunit/try-catch.c b/lib/kunit/try-catch.c
new file mode 100644
index 0000000..0dd434e
--- /dev/null
+++ b/lib/kunit/try-catch.c
@@ -0,0 +1,97 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * An API to allow a function, that may fail, to be executed, and recover in a
+ * controlled manner.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#include <kunit/test.h>
+#include <linux/completion.h>
+#include <linux/kernel.h>
+#include <linux/kthread.h>
+
+#include "try-catch-impl.h"
+
+void __noreturn kunit_try_catch_throw(struct kunit_try_catch *try_catch)
+{
+	try_catch->try_result = -EFAULT;
+	complete_and_exit(try_catch->try_completion, -EFAULT);
+}
+EXPORT_SYMBOL_GPL(kunit_try_catch_throw);
+
+static int kunit_generic_run_threadfn_adapter(void *data)
+{
+	struct kunit_try_catch *try_catch = data;
+
+	try_catch->try(try_catch->context);
+
+	complete_and_exit(try_catch->try_completion, 0);
+}
+
+static unsigned long kunit_test_timeout(void)
+{
+	/*
+	 * TODO(brendanhiggins@google.com): We should probably have some type of
+	 * variable timeout here. The only question is what that timeout value
+	 * should be.
+	 *
+	 * The intention has always been, at some point, to be able to label
+	 * tests with some type of size bucket (unit/small, integration/medium,
+	 * large/system/end-to-end, etc), where each size bucket would get a
+	 * default timeout value kind of like what Bazel does:
+	 * https://docs.bazel.build/versions/master/be/common-definitions.html#test.size
+	 * There is still some debate to be had on exactly how we do this. (For
+	 * one, we probably want to have some sort of test runner level
+	 * timeout.)
+	 *
+	 * For more background on this topic, see:
+	 * https://mike-bland.com/2011/11/01/small-medium-large.html
+	 *
+	 * If tests timeout due to exceeding sysctl_hung_task_timeout_secs,
+	 * the task will be killed and an oops generated.
+	 */
+	return 300 * MSEC_PER_SEC; /* 5 min */
+}
+
+void kunit_try_catch_run(struct kunit_try_catch *try_catch, void *context)
+{
+	DECLARE_COMPLETION_ONSTACK(try_completion);
+	struct kunit *test = try_catch->test;
+	struct task_struct *task_struct;
+	int exit_code, time_remaining;
+
+	try_catch->context = context;
+	try_catch->try_completion = &try_completion;
+	try_catch->try_result = 0;
+	task_struct = kthread_run(kunit_generic_run_threadfn_adapter,
+				  try_catch,
+				  "kunit_try_catch_thread");
+	if (IS_ERR(task_struct)) {
+		try_catch->catch(try_catch->context);
+		return;
+	}
+
+	time_remaining = wait_for_completion_timeout(&try_completion,
+						     kunit_test_timeout());
+	if (time_remaining == 0) {
+		kunit_err(test, "try timed out\n");
+		try_catch->try_result = -ETIMEDOUT;
+	}
+
+	exit_code = try_catch->try_result;
+
+	if (!exit_code)
+		return;
+
+	if (exit_code == -EFAULT)
+		try_catch->try_result = 0;
+	else if (exit_code == -EINTR)
+		kunit_err(test, "wake_up_process() was never called\n");
+	else if (exit_code)
+		kunit_err(test, "Unknown error: %d\n", exit_code);
+
+	try_catch->catch(try_catch->context);
+}
+EXPORT_SYMBOL_GPL(kunit_try_catch_run);
diff --git a/lib/list-test.c b/lib/list-test.c
new file mode 100644
index 0000000..76babb1
--- /dev/null
+++ b/lib/list-test.c
@@ -0,0 +1,748 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * KUnit test for the Kernel Linked-list structures.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: David Gow <davidgow@google.com>
+ */
+#include <kunit/test.h>
+
+#include <linux/list.h>
+
+struct list_test_struct {
+	int data;
+	struct list_head list;
+};
+
+static void list_test_list_init(struct kunit *test)
+{
+	/* Test the different ways of initialising a list. */
+	struct list_head list1 = LIST_HEAD_INIT(list1);
+	struct list_head list2;
+	LIST_HEAD(list3);
+	struct list_head *list4;
+	struct list_head *list5;
+
+	INIT_LIST_HEAD(&list2);
+
+	list4 = kzalloc(sizeof(*list4), GFP_KERNEL | __GFP_NOFAIL);
+	INIT_LIST_HEAD(list4);
+
+	list5 = kmalloc(sizeof(*list5), GFP_KERNEL | __GFP_NOFAIL);
+	memset(list5, 0xFF, sizeof(*list5));
+	INIT_LIST_HEAD(list5);
+
+	/* list_empty_careful() checks both next and prev. */
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(&list1));
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(&list2));
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(&list3));
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(list4));
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(list5));
+
+	kfree(list4);
+	kfree(list5);
+}
+
+static void list_test_list_add(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list);
+
+	list_add(&a, &list);
+	list_add(&b, &list);
+
+	/* should be [list] -> b -> a */
+	KUNIT_EXPECT_PTR_EQ(test, list.next, &b);
+	KUNIT_EXPECT_PTR_EQ(test, b.prev, &list);
+	KUNIT_EXPECT_PTR_EQ(test, b.next, &a);
+}
+
+static void list_test_list_add_tail(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list);
+
+	list_add_tail(&a, &list);
+	list_add_tail(&b, &list);
+
+	/* should be [list] -> a -> b */
+	KUNIT_EXPECT_PTR_EQ(test, list.next, &a);
+	KUNIT_EXPECT_PTR_EQ(test, a.prev, &list);
+	KUNIT_EXPECT_PTR_EQ(test, a.next, &b);
+}
+
+static void list_test_list_del(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list);
+
+	list_add_tail(&a, &list);
+	list_add_tail(&b, &list);
+
+	/* before: [list] -> a -> b */
+	list_del(&a);
+
+	/* now: [list] -> b */
+	KUNIT_EXPECT_PTR_EQ(test, list.next, &b);
+	KUNIT_EXPECT_PTR_EQ(test, b.prev, &list);
+}
+
+static void list_test_list_replace(struct kunit *test)
+{
+	struct list_head a_old, a_new, b;
+	LIST_HEAD(list);
+
+	list_add_tail(&a_old, &list);
+	list_add_tail(&b, &list);
+
+	/* before: [list] -> a_old -> b */
+	list_replace(&a_old, &a_new);
+
+	/* now: [list] -> a_new -> b */
+	KUNIT_EXPECT_PTR_EQ(test, list.next, &a_new);
+	KUNIT_EXPECT_PTR_EQ(test, b.prev, &a_new);
+}
+
+static void list_test_list_replace_init(struct kunit *test)
+{
+	struct list_head a_old, a_new, b;
+	LIST_HEAD(list);
+
+	list_add_tail(&a_old, &list);
+	list_add_tail(&b, &list);
+
+	/* before: [list] -> a_old -> b */
+	list_replace_init(&a_old, &a_new);
+
+	/* now: [list] -> a_new -> b */
+	KUNIT_EXPECT_PTR_EQ(test, list.next, &a_new);
+	KUNIT_EXPECT_PTR_EQ(test, b.prev, &a_new);
+
+	/* check a_old is empty (initialized) */
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(&a_old));
+}
+
+static void list_test_list_swap(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list);
+
+	list_add_tail(&a, &list);
+	list_add_tail(&b, &list);
+
+	/* before: [list] -> a -> b */
+	list_swap(&a, &b);
+
+	/* after: [list] -> b -> a */
+	KUNIT_EXPECT_PTR_EQ(test, &b, list.next);
+	KUNIT_EXPECT_PTR_EQ(test, &a, list.prev);
+
+	KUNIT_EXPECT_PTR_EQ(test, &a, b.next);
+	KUNIT_EXPECT_PTR_EQ(test, &list, b.prev);
+
+	KUNIT_EXPECT_PTR_EQ(test, &list, a.next);
+	KUNIT_EXPECT_PTR_EQ(test, &b, a.prev);
+}
+
+static void list_test_list_del_init(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list);
+
+	list_add_tail(&a, &list);
+	list_add_tail(&b, &list);
+
+	/* before: [list] -> a -> b */
+	list_del_init(&a);
+	/* after: [list] -> b, a initialised */
+
+	KUNIT_EXPECT_PTR_EQ(test, list.next, &b);
+	KUNIT_EXPECT_PTR_EQ(test, b.prev, &list);
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(&a));
+}
+
+static void list_test_list_move(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+
+	list_add_tail(&a, &list1);
+	list_add_tail(&b, &list2);
+
+	/* before: [list1] -> a, [list2] -> b */
+	list_move(&a, &list2);
+	/* after: [list1] empty, [list2] -> a -> b */
+
+	KUNIT_EXPECT_TRUE(test, list_empty(&list1));
+
+	KUNIT_EXPECT_PTR_EQ(test, &a, list2.next);
+	KUNIT_EXPECT_PTR_EQ(test, &b, a.next);
+}
+
+static void list_test_list_move_tail(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+
+	list_add_tail(&a, &list1);
+	list_add_tail(&b, &list2);
+
+	/* before: [list1] -> a, [list2] -> b */
+	list_move_tail(&a, &list2);
+	/* after: [list1] empty, [list2] -> b -> a */
+
+	KUNIT_EXPECT_TRUE(test, list_empty(&list1));
+
+	KUNIT_EXPECT_PTR_EQ(test, &b, list2.next);
+	KUNIT_EXPECT_PTR_EQ(test, &a, b.next);
+}
+
+static void list_test_list_bulk_move_tail(struct kunit *test)
+{
+	struct list_head a, b, c, d, x, y;
+	struct list_head *list1_values[] = { &x, &b, &c, &y };
+	struct list_head *list2_values[] = { &a, &d };
+	struct list_head *ptr;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+	int i = 0;
+
+	list_add_tail(&x, &list1);
+	list_add_tail(&y, &list1);
+
+	list_add_tail(&a, &list2);
+	list_add_tail(&b, &list2);
+	list_add_tail(&c, &list2);
+	list_add_tail(&d, &list2);
+
+	/* before: [list1] -> x -> y, [list2] -> a -> b -> c -> d */
+	list_bulk_move_tail(&y, &b, &c);
+	/* after: [list1] -> x -> b -> c -> y, [list2] -> a -> d */
+
+	list_for_each(ptr, &list1) {
+		KUNIT_EXPECT_PTR_EQ(test, ptr, list1_values[i]);
+		i++;
+	}
+	KUNIT_EXPECT_EQ(test, i, 4);
+	i = 0;
+	list_for_each(ptr, &list2) {
+		KUNIT_EXPECT_PTR_EQ(test, ptr, list2_values[i]);
+		i++;
+	}
+	KUNIT_EXPECT_EQ(test, i, 2);
+}
+
+static void list_test_list_is_first(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list);
+
+	list_add_tail(&a, &list);
+	list_add_tail(&b, &list);
+
+	KUNIT_EXPECT_TRUE(test, list_is_first(&a, &list));
+	KUNIT_EXPECT_FALSE(test, list_is_first(&b, &list));
+}
+
+static void list_test_list_is_last(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list);
+
+	list_add_tail(&a, &list);
+	list_add_tail(&b, &list);
+
+	KUNIT_EXPECT_FALSE(test, list_is_last(&a, &list));
+	KUNIT_EXPECT_TRUE(test, list_is_last(&b, &list));
+}
+
+static void list_test_list_empty(struct kunit *test)
+{
+	struct list_head a;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+
+	list_add_tail(&a, &list1);
+
+	KUNIT_EXPECT_FALSE(test, list_empty(&list1));
+	KUNIT_EXPECT_TRUE(test, list_empty(&list2));
+}
+
+static void list_test_list_empty_careful(struct kunit *test)
+{
+	/* This test doesn't check correctness under concurrent access */
+	struct list_head a;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+
+	list_add_tail(&a, &list1);
+
+	KUNIT_EXPECT_FALSE(test, list_empty_careful(&list1));
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(&list2));
+}
+
+static void list_test_list_rotate_left(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list);
+
+	list_add_tail(&a, &list);
+	list_add_tail(&b, &list);
+
+	/* before: [list] -> a -> b */
+	list_rotate_left(&list);
+	/* after: [list] -> b -> a */
+
+	KUNIT_EXPECT_PTR_EQ(test, list.next, &b);
+	KUNIT_EXPECT_PTR_EQ(test, b.prev, &list);
+	KUNIT_EXPECT_PTR_EQ(test, b.next, &a);
+}
+
+static void list_test_list_rotate_to_front(struct kunit *test)
+{
+	struct list_head a, b, c, d;
+	struct list_head *list_values[] = { &c, &d, &a, &b };
+	struct list_head *ptr;
+	LIST_HEAD(list);
+	int i = 0;
+
+	list_add_tail(&a, &list);
+	list_add_tail(&b, &list);
+	list_add_tail(&c, &list);
+	list_add_tail(&d, &list);
+
+	/* before: [list] -> a -> b -> c -> d */
+	list_rotate_to_front(&c, &list);
+	/* after: [list] -> c -> d -> a -> b */
+
+	list_for_each(ptr, &list) {
+		KUNIT_EXPECT_PTR_EQ(test, ptr, list_values[i]);
+		i++;
+	}
+	KUNIT_EXPECT_EQ(test, i, 4);
+}
+
+static void list_test_list_is_singular(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list);
+
+	/* [list] empty */
+	KUNIT_EXPECT_FALSE(test, list_is_singular(&list));
+
+	list_add_tail(&a, &list);
+
+	/* [list] -> a */
+	KUNIT_EXPECT_TRUE(test, list_is_singular(&list));
+
+	list_add_tail(&b, &list);
+
+	/* [list] -> a -> b */
+	KUNIT_EXPECT_FALSE(test, list_is_singular(&list));
+}
+
+static void list_test_list_cut_position(struct kunit *test)
+{
+	struct list_head entries[3], *cur;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+	int i = 0;
+
+	list_add_tail(&entries[0], &list1);
+	list_add_tail(&entries[1], &list1);
+	list_add_tail(&entries[2], &list1);
+
+	/* before: [list1] -> entries[0] -> entries[1] -> entries[2] */
+	list_cut_position(&list2, &list1, &entries[1]);
+	/* after: [list2] -> entries[0] -> entries[1], [list1] -> entries[2] */
+
+	list_for_each(cur, &list2) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i++;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, 2);
+
+	list_for_each(cur, &list1) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i++;
+	}
+}
+
+static void list_test_list_cut_before(struct kunit *test)
+{
+	struct list_head entries[3], *cur;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+	int i = 0;
+
+	list_add_tail(&entries[0], &list1);
+	list_add_tail(&entries[1], &list1);
+	list_add_tail(&entries[2], &list1);
+
+	/* before: [list1] -> entries[0] -> entries[1] -> entries[2] */
+	list_cut_before(&list2, &list1, &entries[1]);
+	/* after: [list2] -> entries[0], [list1] -> entries[1] -> entries[2] */
+
+	list_for_each(cur, &list2) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i++;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, 1);
+
+	list_for_each(cur, &list1) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i++;
+	}
+}
+
+static void list_test_list_splice(struct kunit *test)
+{
+	struct list_head entries[5], *cur;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+	int i = 0;
+
+	list_add_tail(&entries[0], &list1);
+	list_add_tail(&entries[1], &list1);
+	list_add_tail(&entries[2], &list2);
+	list_add_tail(&entries[3], &list2);
+	list_add_tail(&entries[4], &list1);
+
+	/* before: [list1]->e[0]->e[1]->e[4], [list2]->e[2]->e[3] */
+	list_splice(&list2, &entries[1]);
+	/* after: [list1]->e[0]->e[1]->e[2]->e[3]->e[4], [list2] uninit */
+
+	list_for_each(cur, &list1) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i++;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, 5);
+}
+
+static void list_test_list_splice_tail(struct kunit *test)
+{
+	struct list_head entries[5], *cur;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+	int i = 0;
+
+	list_add_tail(&entries[0], &list1);
+	list_add_tail(&entries[1], &list1);
+	list_add_tail(&entries[2], &list2);
+	list_add_tail(&entries[3], &list2);
+	list_add_tail(&entries[4], &list1);
+
+	/* before: [list1]->e[0]->e[1]->e[4], [list2]->e[2]->e[3] */
+	list_splice_tail(&list2, &entries[4]);
+	/* after: [list1]->e[0]->e[1]->e[2]->e[3]->e[4], [list2] uninit */
+
+	list_for_each(cur, &list1) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i++;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, 5);
+}
+
+static void list_test_list_splice_init(struct kunit *test)
+{
+	struct list_head entries[5], *cur;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+	int i = 0;
+
+	list_add_tail(&entries[0], &list1);
+	list_add_tail(&entries[1], &list1);
+	list_add_tail(&entries[2], &list2);
+	list_add_tail(&entries[3], &list2);
+	list_add_tail(&entries[4], &list1);
+
+	/* before: [list1]->e[0]->e[1]->e[4], [list2]->e[2]->e[3] */
+	list_splice_init(&list2, &entries[1]);
+	/* after: [list1]->e[0]->e[1]->e[2]->e[3]->e[4], [list2] empty */
+
+	list_for_each(cur, &list1) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i++;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, 5);
+
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(&list2));
+}
+
+static void list_test_list_splice_tail_init(struct kunit *test)
+{
+	struct list_head entries[5], *cur;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+	int i = 0;
+
+	list_add_tail(&entries[0], &list1);
+	list_add_tail(&entries[1], &list1);
+	list_add_tail(&entries[2], &list2);
+	list_add_tail(&entries[3], &list2);
+	list_add_tail(&entries[4], &list1);
+
+	/* before: [list1]->e[0]->e[1]->e[4], [list2]->e[2]->e[3] */
+	list_splice_tail_init(&list2, &entries[4]);
+	/* after: [list1]->e[0]->e[1]->e[2]->e[3]->e[4], [list2] empty */
+
+	list_for_each(cur, &list1) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i++;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, 5);
+
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(&list2));
+}
+
+static void list_test_list_entry(struct kunit *test)
+{
+	struct list_test_struct test_struct;
+
+	KUNIT_EXPECT_PTR_EQ(test, &test_struct, list_entry(&(test_struct.list),
+				struct list_test_struct, list));
+}
+
+static void list_test_list_first_entry(struct kunit *test)
+{
+	struct list_test_struct test_struct1, test_struct2;
+	LIST_HEAD(list);
+
+	list_add_tail(&test_struct1.list, &list);
+	list_add_tail(&test_struct2.list, &list);
+
+
+	KUNIT_EXPECT_PTR_EQ(test, &test_struct1, list_first_entry(&list,
+				struct list_test_struct, list));
+}
+
+static void list_test_list_last_entry(struct kunit *test)
+{
+	struct list_test_struct test_struct1, test_struct2;
+	LIST_HEAD(list);
+
+	list_add_tail(&test_struct1.list, &list);
+	list_add_tail(&test_struct2.list, &list);
+
+
+	KUNIT_EXPECT_PTR_EQ(test, &test_struct2, list_last_entry(&list,
+				struct list_test_struct, list));
+}
+
+static void list_test_list_first_entry_or_null(struct kunit *test)
+{
+	struct list_test_struct test_struct1, test_struct2;
+	LIST_HEAD(list);
+
+	KUNIT_EXPECT_FALSE(test, list_first_entry_or_null(&list,
+				struct list_test_struct, list));
+
+	list_add_tail(&test_struct1.list, &list);
+	list_add_tail(&test_struct2.list, &list);
+
+	KUNIT_EXPECT_PTR_EQ(test, &test_struct1,
+			list_first_entry_or_null(&list,
+				struct list_test_struct, list));
+}
+
+static void list_test_list_next_entry(struct kunit *test)
+{
+	struct list_test_struct test_struct1, test_struct2;
+	LIST_HEAD(list);
+
+	list_add_tail(&test_struct1.list, &list);
+	list_add_tail(&test_struct2.list, &list);
+
+
+	KUNIT_EXPECT_PTR_EQ(test, &test_struct2, list_next_entry(&test_struct1,
+				list));
+}
+
+static void list_test_list_prev_entry(struct kunit *test)
+{
+	struct list_test_struct test_struct1, test_struct2;
+	LIST_HEAD(list);
+
+	list_add_tail(&test_struct1.list, &list);
+	list_add_tail(&test_struct2.list, &list);
+
+
+	KUNIT_EXPECT_PTR_EQ(test, &test_struct1, list_prev_entry(&test_struct2,
+				list));
+}
+
+static void list_test_list_for_each(struct kunit *test)
+{
+	struct list_head entries[3], *cur;
+	LIST_HEAD(list);
+	int i = 0;
+
+	list_add_tail(&entries[0], &list);
+	list_add_tail(&entries[1], &list);
+	list_add_tail(&entries[2], &list);
+
+	list_for_each(cur, &list) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i++;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, 3);
+}
+
+static void list_test_list_for_each_prev(struct kunit *test)
+{
+	struct list_head entries[3], *cur;
+	LIST_HEAD(list);
+	int i = 2;
+
+	list_add_tail(&entries[0], &list);
+	list_add_tail(&entries[1], &list);
+	list_add_tail(&entries[2], &list);
+
+	list_for_each_prev(cur, &list) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i--;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, -1);
+}
+
+static void list_test_list_for_each_safe(struct kunit *test)
+{
+	struct list_head entries[3], *cur, *n;
+	LIST_HEAD(list);
+	int i = 0;
+
+
+	list_add_tail(&entries[0], &list);
+	list_add_tail(&entries[1], &list);
+	list_add_tail(&entries[2], &list);
+
+	list_for_each_safe(cur, n, &list) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		list_del(&entries[i]);
+		i++;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, 3);
+	KUNIT_EXPECT_TRUE(test, list_empty(&list));
+}
+
+static void list_test_list_for_each_prev_safe(struct kunit *test)
+{
+	struct list_head entries[3], *cur, *n;
+	LIST_HEAD(list);
+	int i = 2;
+
+	list_add_tail(&entries[0], &list);
+	list_add_tail(&entries[1], &list);
+	list_add_tail(&entries[2], &list);
+
+	list_for_each_prev_safe(cur, n, &list) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		list_del(&entries[i]);
+		i--;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, -1);
+	KUNIT_EXPECT_TRUE(test, list_empty(&list));
+}
+
+static void list_test_list_for_each_entry(struct kunit *test)
+{
+	struct list_test_struct entries[5], *cur;
+	static LIST_HEAD(list);
+	int i = 0;
+
+	for (i = 0; i < 5; ++i) {
+		entries[i].data = i;
+		list_add_tail(&entries[i].list, &list);
+	}
+
+	i = 0;
+
+	list_for_each_entry(cur, &list, list) {
+		KUNIT_EXPECT_EQ(test, cur->data, i);
+		i++;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, 5);
+}
+
+static void list_test_list_for_each_entry_reverse(struct kunit *test)
+{
+	struct list_test_struct entries[5], *cur;
+	static LIST_HEAD(list);
+	int i = 0;
+
+	for (i = 0; i < 5; ++i) {
+		entries[i].data = i;
+		list_add_tail(&entries[i].list, &list);
+	}
+
+	i = 4;
+
+	list_for_each_entry_reverse(cur, &list, list) {
+		KUNIT_EXPECT_EQ(test, cur->data, i);
+		i--;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, -1);
+}
+
+static struct kunit_case list_test_cases[] = {
+	KUNIT_CASE(list_test_list_init),
+	KUNIT_CASE(list_test_list_add),
+	KUNIT_CASE(list_test_list_add_tail),
+	KUNIT_CASE(list_test_list_del),
+	KUNIT_CASE(list_test_list_replace),
+	KUNIT_CASE(list_test_list_replace_init),
+	KUNIT_CASE(list_test_list_swap),
+	KUNIT_CASE(list_test_list_del_init),
+	KUNIT_CASE(list_test_list_move),
+	KUNIT_CASE(list_test_list_move_tail),
+	KUNIT_CASE(list_test_list_bulk_move_tail),
+	KUNIT_CASE(list_test_list_is_first),
+	KUNIT_CASE(list_test_list_is_last),
+	KUNIT_CASE(list_test_list_empty),
+	KUNIT_CASE(list_test_list_empty_careful),
+	KUNIT_CASE(list_test_list_rotate_left),
+	KUNIT_CASE(list_test_list_rotate_to_front),
+	KUNIT_CASE(list_test_list_is_singular),
+	KUNIT_CASE(list_test_list_cut_position),
+	KUNIT_CASE(list_test_list_cut_before),
+	KUNIT_CASE(list_test_list_splice),
+	KUNIT_CASE(list_test_list_splice_tail),
+	KUNIT_CASE(list_test_list_splice_init),
+	KUNIT_CASE(list_test_list_splice_tail_init),
+	KUNIT_CASE(list_test_list_entry),
+	KUNIT_CASE(list_test_list_first_entry),
+	KUNIT_CASE(list_test_list_last_entry),
+	KUNIT_CASE(list_test_list_first_entry_or_null),
+	KUNIT_CASE(list_test_list_next_entry),
+	KUNIT_CASE(list_test_list_prev_entry),
+	KUNIT_CASE(list_test_list_for_each),
+	KUNIT_CASE(list_test_list_for_each_prev),
+	KUNIT_CASE(list_test_list_for_each_safe),
+	KUNIT_CASE(list_test_list_for_each_prev_safe),
+	KUNIT_CASE(list_test_list_for_each_entry),
+	KUNIT_CASE(list_test_list_for_each_entry_reverse),
+	{},
+};
+
+static struct kunit_suite list_test_module = {
+	.name = "list-kunit-test",
+	.test_cases = list_test_cases,
+};
+
+kunit_test_suites(&list_test_module);
+
+MODULE_LICENSE("GPL v2");
diff --git a/lib/list_sort.c b/lib/list_sort.c
index 52f0c25..b14accf 100644
--- a/lib/list_sort.c
+++ b/lib/list_sort.c
@@ -8,7 +8,7 @@
 #include <linux/list.h>
 
 typedef int __attribute__((nonnull(2,3))) (*cmp_func)(void *,
-		struct list_head const *, struct list_head const *);
+		struct list_head *, struct list_head *);
 
 /*
  * Returns a list organized in an intermediate format suited
@@ -227,7 +227,7 @@ void list_sort(void *priv, struct list_head *head,
 		if (likely(bits)) {
 			struct list_head *a = *tail, *b = a->prev;
 
-			a = merge(priv, (cmp_func)cmp, b, a);
+			a = merge(priv, cmp, b, a);
 			/* Install the merged result in place of the inputs */
 			a->prev = b->prev;
 			*tail = a;
@@ -249,10 +249,10 @@ void list_sort(void *priv, struct list_head *head,
 
 		if (!next)
 			break;
-		list = merge(priv, (cmp_func)cmp, pending, list);
+		list = merge(priv, cmp, pending, list);
 		pending = next;
 	}
 	/* The final merge, rebuilding prev links */
-	merge_final(priv, (cmp_func)cmp, head, pending, list);
+	merge_final(priv, cmp, head, pending, list);
 }
 EXPORT_SYMBOL(list_sort);
diff --git a/lib/test_stackinit.c b/lib/test_stackinit.c
index 2d7d257..f93b1e1 100644
--- a/lib/test_stackinit.c
+++ b/lib/test_stackinit.c
@@ -92,8 +92,9 @@ static bool range_contains(char *haystack_start, size_t haystack_size,
  * @var_type: type to be tested for zeroing initialization
  * @which: is this a SCALAR, STRING, or STRUCT type?
  * @init_level: what kind of initialization is performed
+ * @xfail: is this test expected to fail?
  */
-#define DEFINE_TEST_DRIVER(name, var_type, which)		\
+#define DEFINE_TEST_DRIVER(name, var_type, which, xfail)	\
 /* Returns 0 on success, 1 on failure. */			\
 static noinline __init int test_ ## name (void)			\
 {								\
@@ -139,13 +140,14 @@ static noinline __init int test_ ## name (void)			\
 	for (sum = 0, i = 0; i < target_size; i++)		\
 		sum += (check_buf[i] == 0xFF);			\
 								\
-	if (sum == 0)						\
+	if (sum == 0) {						\
 		pr_info(#name " ok\n");				\
-	else							\
-		pr_warn(#name " FAIL (uninit bytes: %d)\n",	\
-			sum);					\
-								\
-	return (sum != 0);					\
+		return 0;					\
+	} else {						\
+		pr_warn(#name " %sFAIL (uninit bytes: %d)\n",	\
+			(xfail) ? "X" : "", sum);		\
+		return (xfail) ? 0 : 1;				\
+	}							\
 }
 #define DEFINE_TEST(name, var_type, which, init_level)		\
 /* no-op to force compiler into ignoring "uninitialized" vars */\
@@ -189,7 +191,7 @@ static noinline __init int leaf_ ## name(unsigned long sp,	\
 								\
 	return (int)buf[0] | (int)buf[sizeof(buf) - 1];		\
 }								\
-DEFINE_TEST_DRIVER(name, var_type, which)
+DEFINE_TEST_DRIVER(name, var_type, which, 0)
 
 /* Structure with no padding. */
 struct test_packed {
@@ -326,8 +328,14 @@ static noinline __init int leaf_switch_2_none(unsigned long sp, bool fill,
 	return __leaf_switch_none(2, fill);
 }
 
-DEFINE_TEST_DRIVER(switch_1_none, uint64_t, SCALAR);
-DEFINE_TEST_DRIVER(switch_2_none, uint64_t, SCALAR);
+/*
+ * These are expected to fail for most configurations because neither
+ * GCC nor Clang have a way to perform initialization of variables in
+ * non-code areas (i.e. in a switch statement before the first "case").
+ * https://bugs.llvm.org/show_bug.cgi?id=44916
+ */
+DEFINE_TEST_DRIVER(switch_1_none, uint64_t, SCALAR, 1);
+DEFINE_TEST_DRIVER(switch_2_none, uint64_t, SCALAR, 1);
 
 static int __init test_stackinit_init(void)
 {
diff --git a/lib/vdso/gettimeofday.c b/lib/vdso/gettimeofday.c
index 45f57fd..4f82b7a 100644
--- a/lib/vdso/gettimeofday.c
+++ b/lib/vdso/gettimeofday.c
@@ -2,30 +2,9 @@
 /*
  * Generic userspace implementations of gettimeofday() and similar.
  */
-#include <linux/compiler.h>
-#include <linux/math64.h>
-#include <linux/time.h>
-#include <linux/kernel.h>
-#include <linux/hrtimer_defs.h>
 #include <vdso/datapage.h>
 #include <vdso/helpers.h>
 
-/*
- * The generic vDSO implementation requires that gettimeofday.h
- * provides:
- * - __arch_get_vdso_data(): to get the vdso datapage.
- * - __arch_get_hw_counter(): to get the hw counter based on the
- *   clock_mode.
- * - gettimeofday_fallback(): fallback for gettimeofday.
- * - clock_gettime_fallback(): fallback for clock_gettime.
- * - clock_getres_fallback(): fallback for clock_getres.
- */
-#ifdef ENABLE_COMPAT_VDSO
-#include <asm/vdso/compat_gettimeofday.h>
-#else
-#include <asm/vdso/gettimeofday.h>
-#endif /* ENABLE_COMPAT_VDSO */
-
 #ifndef vdso_calc_delta
 /*
  * Default implementation which works for all sane clocksources. That
@@ -38,13 +17,24 @@ u64 vdso_calc_delta(u64 cycles, u64 last, u64 mask, u32 mult)
 }
 #endif
 
-static int do_hres(const struct vdso_data *vd, clockid_t clk,
+#ifndef __arch_vdso_hres_capable
+static inline bool __arch_vdso_hres_capable(void)
+{
+	return true;
+}
+#endif
+
+static __always_inline int do_hres(const struct vdso_data *vd, clockid_t clk,
 		   struct __kernel_timespec *ts)
 {
 	const struct vdso_timestamp *vdso_ts = &vd->basetime[clk];
 	u64 cycles, last, sec, ns;
 	u32 seq;
 
+	/* Allows to compile the high resolution parts out */
+	if (!__arch_vdso_hres_capable())
+		return -1;
+
 	do {
 		seq = vdso_read_begin(vd);
 		cycles = __arch_get_hw_counter(vd->clock_mode);
@@ -68,8 +58,8 @@ static int do_hres(const struct vdso_data *vd, clockid_t clk,
 	return 0;
 }
 
-static void do_coarse(const struct vdso_data *vd, clockid_t clk,
-		      struct __kernel_timespec *ts)
+static __always_inline int do_coarse(const struct vdso_data *vd, clockid_t clk,
+				     struct __kernel_timespec *ts)
 {
 	const struct vdso_timestamp *vdso_ts = &vd->basetime[clk];
 	u32 seq;
@@ -79,6 +69,8 @@ static void do_coarse(const struct vdso_data *vd, clockid_t clk,
 		ts->tv_sec = vdso_ts->sec;
 		ts->tv_nsec = vdso_ts->nsec;
 	} while (unlikely(vdso_read_retry(vd, seq)));
+
+	return 0;
 }
 
 static __maybe_unused int
@@ -96,15 +88,16 @@ __cvdso_clock_gettime_common(clockid_t clock, struct __kernel_timespec *ts)
 	 * clocks are handled in the VDSO directly.
 	 */
 	msk = 1U << clock;
-	if (likely(msk & VDSO_HRES)) {
-		return do_hres(&vd[CS_HRES_COARSE], clock, ts);
-	} else if (msk & VDSO_COARSE) {
-		do_coarse(&vd[CS_HRES_COARSE], clock, ts);
-		return 0;
-	} else if (msk & VDSO_RAW) {
-		return do_hres(&vd[CS_RAW], clock, ts);
-	}
-	return -1;
+	if (likely(msk & VDSO_HRES))
+		vd = &vd[CS_HRES_COARSE];
+	else if (msk & VDSO_COARSE)
+		return do_coarse(&vd[CS_HRES_COARSE], clock, ts);
+	else if (msk & VDSO_RAW)
+		vd = &vd[CS_RAW];
+	else
+		return -1;
+
+	return do_hres(vd, clock, ts);
 }
 
 static __maybe_unused int
@@ -117,6 +110,7 @@ __cvdso_clock_gettime(clockid_t clock, struct __kernel_timespec *ts)
 	return 0;
 }
 
+#ifdef BUILD_VDSO32
 static __maybe_unused int
 __cvdso_clock_gettime32(clockid_t clock, struct old_timespec32 *res)
 {
@@ -133,12 +127,13 @@ __cvdso_clock_gettime32(clockid_t clock, struct old_timespec32 *res)
 		ret = clock_gettime_fallback(clock, &ts);
 #endif
 
-	if (likely(!ret)) {
-		res->tv_sec = ts.tv_sec;
-		res->tv_nsec = ts.tv_nsec;
-	}
+	/* For ret == 0 */
+	res->tv_sec = ts.tv_sec;
+	res->tv_nsec = ts.tv_nsec;
+
 	return ret;
 }
+#endif /* BUILD_VDSO32 */
 
 static __maybe_unused int
 __cvdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz)
@@ -181,7 +176,6 @@ static __maybe_unused
 int __cvdso_clock_getres_common(clockid_t clock, struct __kernel_timespec *res)
 {
 	const struct vdso_data *vd = __arch_get_vdso_data();
-	u64 hrtimer_res;
 	u32 msk;
 	u64 ns;
 
@@ -189,27 +183,21 @@ int __cvdso_clock_getres_common(clockid_t clock, struct __kernel_timespec *res)
 	if (unlikely((u32) clock >= MAX_CLOCKS))
 		return -1;
 
-	hrtimer_res = READ_ONCE(vd[CS_HRES_COARSE].hrtimer_res);
 	/*
 	 * Convert the clockid to a bitmask and use it to check which
 	 * clocks are handled in the VDSO directly.
 	 */
 	msk = 1U << clock;
-	if (msk & VDSO_HRES) {
+	if (msk & (VDSO_HRES | VDSO_RAW)) {
 		/*
 		 * Preserves the behaviour of posix_get_hrtimer_res().
 		 */
-		ns = hrtimer_res;
+		ns = READ_ONCE(vd[CS_HRES_COARSE].hrtimer_res);
 	} else if (msk & VDSO_COARSE) {
 		/*
 		 * Preserves the behaviour of posix_get_coarse_res().
 		 */
 		ns = LOW_RES_NSEC;
-	} else if (msk & VDSO_RAW) {
-		/*
-		 * Preserves the behaviour of posix_get_hrtimer_res().
-		 */
-		ns = hrtimer_res;
 	} else {
 		return -1;
 	}
@@ -221,6 +209,7 @@ int __cvdso_clock_getres_common(clockid_t clock, struct __kernel_timespec *res)
 	return 0;
 }
 
+static __maybe_unused
 int __cvdso_clock_getres(clockid_t clock, struct __kernel_timespec *res)
 {
 	int ret = __cvdso_clock_getres_common(clock, res);
@@ -230,6 +219,7 @@ int __cvdso_clock_getres(clockid_t clock, struct __kernel_timespec *res)
 	return 0;
 }
 
+#ifdef BUILD_VDSO32
 static __maybe_unused int
 __cvdso_clock_getres_time32(clockid_t clock, struct old_timespec32 *res)
 {
@@ -246,10 +236,11 @@ __cvdso_clock_getres_time32(clockid_t clock, struct old_timespec32 *res)
 		ret = clock_getres_fallback(clock, &ts);
 #endif
 
-	if (likely(!ret && res)) {
+	if (likely(res)) {
 		res->tv_sec = ts.tv_sec;
 		res->tv_nsec = ts.tv_nsec;
 	}
 	return ret;
 }
+#endif /* BUILD_VDSO32 */
 #endif /* VDSO_HAS_CLOCK_GETRES */
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index fb4af73..bbfba45 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -738,6 +738,32 @@ static int __init initialize_ptr_random(void)
 	return ret;
 }
 early_initcall(initialize_ptr_random);
+ 
+static inline int __ptr_to_hashval(const void *ptr, unsigned long *hashval_out)
+{
+	unsigned long hashval;
+
+	if (static_branch_unlikely(&not_filled_random_ptr_key))
+		return -EAGAIN;
+
+#ifdef CONFIG_64BIT
+	hashval = (unsigned long)siphash_1u64((u64)ptr, &ptr_key);
+	/*
+	 * Mask off the first 32 bits, this makes explicit that we have
+	 * modified the address (and 32 bits is plenty for a unique ID).
+	 */
+	hashval = hashval & 0xffffffff;
+#else
+	hashval = (unsigned long)siphash_1u32((u32)ptr, &ptr_key);
+#endif
+	*hashval_out = hashval;
+	return 0;
+}
+
+int ptr_to_hashval(const void *ptr, unsigned long *hashval_out)
+{
+	return __ptr_to_hashval(ptr, hashval_out);
+}
 
 /* Maps a pointer to a 32 bit unique identifier. */
 static char *ptr_to_id(char *buf, char *end, const void *ptr,
@@ -745,6 +771,7 @@ static char *ptr_to_id(char *buf, char *end, const void *ptr,
 {
 	const char *str = sizeof(ptr) == 8 ? "(____ptrval____)" : "(ptrval)";
 	unsigned long hashval;
+	int ret;
 
 	/*
 	 * Print the real pointer value for NULL and error pointers,
@@ -759,22 +786,13 @@ static char *ptr_to_id(char *buf, char *end, const void *ptr,
 		return pointer_string(buf, end, (const void *)hashval, spec);
 	}
 
-	if (static_branch_unlikely(&not_filled_random_ptr_key)) {
+	ret = __ptr_to_hashval(ptr, &hashval);
+	if (ret) {
 		spec.field_width = 2 * sizeof(ptr);
 		/* string length must be less than default_width */
 		return error_string(buf, end, str, spec);
 	}
 
-#ifdef CONFIG_64BIT
-	hashval = (unsigned long)siphash_1u64((u64)ptr, &ptr_key);
-	/*
-	 * Mask off the first 32 bits, this makes explicit that we have
-	 * modified the address (and 32 bits is plenty for a unique ID).
-	 */
-	hashval = hashval & 0xffffffff;
-#else
-	hashval = (unsigned long)siphash_1u32((u32)ptr, &ptr_key);
-#endif
 	return pointer_string(buf, end, (const void *)hashval, spec);
 }
 
diff --git a/mm/Makefile b/mm/Makefile
index d996846..07dee30 100644
--- a/mm/Makefile
+++ b/mm/Makefile
@@ -71,6 +71,7 @@
 obj-$(CONFIG_SLAB) += slab.o
 obj-$(CONFIG_SLUB) += slub.o
 obj-$(CONFIG_KASAN)	+= kasan/
+obj-$(CONFIG_KFENCE) += kfence/
 obj-$(CONFIG_FAILSLAB) += failslab.o
 obj-$(CONFIG_MEMORY_HOTPLUG) += memory_hotplug.o
 obj-$(CONFIG_MEMTEST)		+= memtest.o
diff --git a/mm/cma.c b/mm/cma.c
index 7de520c..e1bf400 100644
--- a/mm/cma.c
+++ b/mm/cma.c
@@ -24,6 +24,7 @@
 #include <linux/memblock.h>
 #include <linux/err.h>
 #include <linux/mm.h>
+#include <linux/module.h>
 #include <linux/mutex.h>
 #include <linux/sizes.h>
 #include <linux/slab.h>
@@ -54,6 +55,7 @@ const char *cma_get_name(const struct cma *cma)
 {
 	return cma->name ? cma->name : "(undefined)";
 }
+EXPORT_SYMBOL_GPL(cma_get_name);
 
 static unsigned long cma_bitmap_aligned_mask(const struct cma *cma,
 					     unsigned int align_order)
@@ -493,6 +495,7 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align,
 	pr_debug("%s(): returned %p\n", __func__, page);
 	return page;
 }
+EXPORT_SYMBOL_GPL(cma_alloc);
 
 /**
  * cma_release() - release allocated pages
@@ -526,6 +529,7 @@ bool cma_release(struct cma *cma, const struct page *pages, unsigned int count)
 
 	return true;
 }
+EXPORT_SYMBOL_GPL(cma_release);
 
 int cma_for_each_area(int (*it)(struct cma *cma, void *data), void *data)
 {
@@ -540,3 +544,4 @@ int cma_for_each_area(int (*it)(struct cma *cma, void *data), void *data)
 
 	return 0;
 }
+EXPORT_SYMBOL_GPL(cma_for_each_area);
diff --git a/mm/filemap.c b/mm/filemap.c
index db542b4..b9d1a70 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -1408,7 +1408,7 @@ EXPORT_SYMBOL_GPL(__lock_page_killable);
 int __lock_page_or_retry(struct page *page, struct mm_struct *mm,
 			 unsigned int flags)
 {
-	if (flags & FAULT_FLAG_ALLOW_RETRY) {
+	if (fault_flag_allow_retry_first(flags)) {
 		/*
 		 * CAUTION! In this case, mmap_sem is not released
 		 * even though return 0.
diff --git a/mm/gup.c b/mm/gup.c
index 3ef76952..f764cee 100644
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -161,22 +161,13 @@ static int follow_pfn_pte(struct vm_area_struct *vma, unsigned long address,
 }
 
 /*
- * FOLL_FORCE or a forced COW break can write even to unwritable pte's,
- * but only after we've gone through a COW cycle and they are dirty.
+ * FOLL_FORCE can write to even unwritable pte's, but only
+ * after we've gone through a COW cycle and they are dirty.
  */
 static inline bool can_follow_write_pte(pte_t pte, unsigned int flags)
 {
-	return pte_write(pte) || ((flags & FOLL_COW) && pte_dirty(pte));
-}
-
-/*
- * A (separate) COW fault might break the page the other way and
- * get_user_pages() would return the page from what is now the wrong
- * VM. So we need to force a COW break at GUP time even for reads.
- */
-static inline bool should_force_cow_break(struct vm_area_struct *vma, unsigned int flags)
-{
-	return is_cow_mapping(vma->vm_flags) && (flags & FOLL_GET);
+	return pte_write(pte) ||
+		((flags & FOLL_FORCE) && (flags & FOLL_COW) && pte_dirty(pte));
 }
 
 static struct page *follow_page_pte(struct vm_area_struct *vma,
@@ -620,12 +611,12 @@ static int get_gate_page(struct mm_struct *mm, unsigned long address,
 }
 
 /*
- * mmap_sem must be held on entry.  If @nonblocking != NULL and
- * *@flags does not include FOLL_NOWAIT, the mmap_sem may be released.
- * If it is, *@nonblocking will be set to 0 and -EBUSY returned.
+ * mmap_sem must be held on entry.  If @locked != NULL and *@flags
+ * does not include FOLL_NOWAIT, the mmap_sem may be released.  If it
+ * is, *@locked will be set to 0 and -EBUSY returned.
  */
 static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma,
-		unsigned long address, unsigned int *flags, int *nonblocking)
+		unsigned long address, unsigned int *flags, int *locked)
 {
 	unsigned int fault_flags = 0;
 	vm_fault_t ret;
@@ -637,12 +628,15 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma,
 		fault_flags |= FAULT_FLAG_WRITE;
 	if (*flags & FOLL_REMOTE)
 		fault_flags |= FAULT_FLAG_REMOTE;
-	if (nonblocking)
-		fault_flags |= FAULT_FLAG_ALLOW_RETRY;
+	if (locked)
+		fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
 	if (*flags & FOLL_NOWAIT)
 		fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_RETRY_NOWAIT;
 	if (*flags & FOLL_TRIED) {
-		VM_WARN_ON_ONCE(fault_flags & FAULT_FLAG_ALLOW_RETRY);
+		/*
+		 * Note: FAULT_FLAG_ALLOW_RETRY and FAULT_FLAG_TRIED
+		 * can co-exist
+		 */
 		fault_flags |= FAULT_FLAG_TRIED;
 	}
 
@@ -663,8 +657,8 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma,
 	}
 
 	if (ret & VM_FAULT_RETRY) {
-		if (nonblocking && !(fault_flags & FAULT_FLAG_RETRY_NOWAIT))
-			*nonblocking = 0;
+		if (locked && !(fault_flags & FAULT_FLAG_RETRY_NOWAIT))
+			*locked = 0;
 		return -EBUSY;
 	}
 
@@ -741,13 +735,20 @@ static int check_vma_flags(struct vm_area_struct *vma, unsigned long gup_flags)
  *		only intends to ensure the pages are faulted in.
  * @vmas:	array of pointers to vmas corresponding to each page.
  *		Or NULL if the caller does not require them.
- * @nonblocking: whether waiting for disk IO or mmap_sem contention
+ * @locked:     whether we're still with the mmap_sem held
  *
- * Returns number of pages pinned. This may be fewer than the number
- * requested. If nr_pages is 0 or negative, returns 0. If no pages
- * were pinned, returns -errno. Each page returned must be released
- * with a put_page() call when it is finished with. vmas will only
- * remain valid while mmap_sem is held.
+ * Returns either number of pages pinned (which may be less than the
+ * number requested), or an error. Details about the return value:
+ *
+ * -- If nr_pages is 0, returns 0.
+ * -- If nr_pages is >0, but no pages were pinned, returns -errno.
+ * -- If nr_pages is >0, and some pages were pinned, returns the number of
+ *    pages pinned. Again, this may be less than nr_pages.
+ * -- 0 return value is possible when the fault would need to be retried.
+ *
+ * The caller is responsible for releasing returned @pages, via put_page().
+ *
+ * @vmas are valid only as long as mmap_sem is held.
  *
  * Must be called with mmap_sem held.  It may be released.  See below.
  *
@@ -770,13 +771,11 @@ static int check_vma_flags(struct vm_area_struct *vma, unsigned long gup_flags)
  * appropriate) must be called after the page is finished with, and
  * before put_page is called.
  *
- * If @nonblocking != NULL, __get_user_pages will not wait for disk IO
- * or mmap_sem contention, and if waiting is needed to pin all pages,
- * *@nonblocking will be set to 0.  Further, if @gup_flags does not
- * include FOLL_NOWAIT, the mmap_sem will be released via up_read() in
- * this case.
+ * If @locked != NULL, *@locked will be set to 0 when mmap_sem is
+ * released by an up_read().  That can happen if @gup_flags does not
+ * have FOLL_NOWAIT.
  *
- * A caller using such a combination of @nonblocking and @gup_flags
+ * A caller using such a combination of @locked and @gup_flags
  * must therefore hold the mmap_sem for reading only, and recognize
  * when it's been released.  Otherwise, it must be held for either
  * reading or writing and will not be released.
@@ -788,7 +787,7 @@ static int check_vma_flags(struct vm_area_struct *vma, unsigned long gup_flags)
 static long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
 		unsigned long start, unsigned long nr_pages,
 		unsigned int gup_flags, struct page **pages,
-		struct vm_area_struct **vmas, int *nonblocking)
+		struct vm_area_struct **vmas, int *locked)
 {
 	long ret = 0, i = 0;
 	struct vm_area_struct *vma = NULL;
@@ -832,18 +831,22 @@ static long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
 				goto out;
 			}
 			if (is_vm_hugetlb_page(vma)) {
-				if (should_force_cow_break(vma, foll_flags))
-					foll_flags |= FOLL_WRITE;
 				i = follow_hugetlb_page(mm, vma, pages, vmas,
 						&start, &nr_pages, i,
-						foll_flags, nonblocking);
+						gup_flags, locked);
+				if (locked && *locked == 0) {
+					/*
+					 * We've got a VM_FAULT_RETRY
+					 * and we've lost mmap_sem.
+					 * We must stop here.
+					 */
+					BUG_ON(gup_flags & FOLL_NOWAIT);
+					BUG_ON(ret != 0);
+					goto out;
+				}
 				continue;
 			}
 		}
-
-		if (should_force_cow_break(vma, foll_flags))
-			foll_flags |= FOLL_WRITE;
-
 retry:
 		/*
 		 * If we have a pending SIGKILL, don't keep faulting pages and
@@ -858,7 +861,7 @@ static long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
 		page = follow_page_mask(vma, start, foll_flags, &ctx);
 		if (!page) {
 			ret = faultin_page(tsk, vma, start, &foll_flags,
-					nonblocking);
+					   locked);
 			switch (ret) {
 			case 0:
 				goto retry;
@@ -970,7 +973,7 @@ int fixup_user_fault(struct task_struct *tsk, struct mm_struct *mm,
 	address = untagged_addr(address);
 
 	if (unlocked)
-		fault_flags |= FAULT_FLAG_ALLOW_RETRY;
+		fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
 
 retry:
 	vma = find_extend_vma(mm, address);
@@ -980,6 +983,10 @@ int fixup_user_fault(struct task_struct *tsk, struct mm_struct *mm,
 	if (!vma_permits_fault(vma, fault_flags))
 		return -EFAULT;
 
+	if ((fault_flags & FAULT_FLAG_KILLABLE) &&
+	    fatal_signal_pending(current))
+		return -EINTR;
+
 	ret = handle_mm_fault(vma, address, fault_flags);
 	major |= ret & VM_FAULT_MAJOR;
 	if (ret & VM_FAULT_ERROR) {
@@ -992,12 +999,9 @@ int fixup_user_fault(struct task_struct *tsk, struct mm_struct *mm,
 
 	if (ret & VM_FAULT_RETRY) {
 		down_read(&mm->mmap_sem);
-		if (!(fault_flags & FAULT_FLAG_TRIED)) {
-			*unlocked = true;
-			fault_flags &= ~FAULT_FLAG_ALLOW_RETRY;
-			fault_flags |= FAULT_FLAG_TRIED;
-			goto retry;
-		}
+		*unlocked = true;
+		fault_flags |= FAULT_FLAG_TRIED;
+		goto retry;
 	}
 
 	if (tsk) {
@@ -1010,6 +1014,10 @@ int fixup_user_fault(struct task_struct *tsk, struct mm_struct *mm,
 }
 EXPORT_SYMBOL_GPL(fixup_user_fault);
 
+/*
+ * Please note that this function, unlike __get_user_pages will not
+ * return 0 for nr_pages > 0 without FOLL_NOWAIT
+ */
 static __always_inline long __get_user_pages_locked(struct task_struct *tsk,
 						struct mm_struct *mm,
 						unsigned long start,
@@ -1069,17 +1077,39 @@ static __always_inline long __get_user_pages_locked(struct task_struct *tsk,
 		if (likely(pages))
 			pages += ret;
 		start += ret << PAGE_SHIFT;
+		lock_dropped = true;
 
+retry:
 		/*
 		 * Repeat on the address that fired VM_FAULT_RETRY
-		 * without FAULT_FLAG_ALLOW_RETRY but with
-		 * FAULT_FLAG_TRIED.
+		 * with both FAULT_FLAG_ALLOW_RETRY and
+		 * FAULT_FLAG_TRIED.  Note that GUP can be interrupted
+		 * by fatal signals, so we need to check it before we
+		 * start trying again otherwise it can loop forever.
 		 */
+
+		if (fatal_signal_pending(current)) {
+			if (!pages_done)
+				pages_done = -EINTR;
+			break;
+		}
+
+		ret = down_read_killable(&mm->mmap_sem);
+		if (ret) {
+			BUG_ON(ret > 0);
+			if (!pages_done)
+				pages_done = ret;
+			break;
+		}
+
 		*locked = 1;
-		lock_dropped = true;
-		down_read(&mm->mmap_sem);
 		ret = __get_user_pages(tsk, mm, start, 1, flags | FOLL_TRIED,
-				       pages, NULL, NULL);
+				       pages, NULL, locked);
+		if (!*locked) {
+			/* Continue to retry until we succeeded */
+			BUG_ON(ret != 0);
+			goto retry;
+		}
 		if (ret != 1) {
 			BUG_ON(ret > 1);
 			if (!pages_done)
@@ -1186,7 +1216,7 @@ EXPORT_SYMBOL(get_user_pages_remote);
  * @vma:   target vma
  * @start: start address
  * @end:   end address
- * @nonblocking:
+ * @locked: whether the mmap_sem is still held
  *
  * This takes care of mlocking the pages too if VM_LOCKED is set.
  *
@@ -1194,14 +1224,14 @@ EXPORT_SYMBOL(get_user_pages_remote);
  *
  * vma->vm_mm->mmap_sem must be held.
  *
- * If @nonblocking is NULL, it may be held for read or write and will
+ * If @locked is NULL, it may be held for read or write and will
  * be unperturbed.
  *
- * If @nonblocking is non-NULL, it must held for read only and may be
- * released.  If it's released, *@nonblocking will be set to 0.
+ * If @locked is non-NULL, it must held for read only and may be
+ * released.  If it's released, *@locked will be set to 0.
  */
 long populate_vma_page_range(struct vm_area_struct *vma,
-		unsigned long start, unsigned long end, int *nonblocking)
+		unsigned long start, unsigned long end, int *locked)
 {
 	struct mm_struct *mm = vma->vm_mm;
 	unsigned long nr_pages = (end - start) / PAGE_SIZE;
@@ -1236,7 +1266,7 @@ long populate_vma_page_range(struct vm_area_struct *vma,
 	 * not result in a stack expansion that recurses back here.
 	 */
 	return __get_user_pages(current, mm, start, nr_pages, gup_flags,
-				NULL, NULL, nonblocking);
+				NULL, NULL, locked);
 }
 
 /*
@@ -2331,10 +2361,6 @@ static bool gup_fast_permitted(unsigned long start, unsigned long end)
  *
  * If the architecture does not support this function, simply return with no
  * pages pinned.
- *
- * Careful, careful! COW breaking can go either way, so a non-write
- * access can get ambiguous page results. If you call this function without
- * 'write' set, you'd better be sure that you're ok with that ambiguity.
  */
 int __get_user_pages_fast(unsigned long start, int nr_pages, int write,
 			  struct page **pages)
@@ -2362,12 +2388,6 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write,
 	 *
 	 * We do not adopt an rcu_read_lock(.) here as we also want to
 	 * block IPIs that come from THPs splitting.
-	 *
-	 * NOTE! We allow read-only gup_fast() here, but you'd better be
-	 * careful about possible COW pages. You'll get _a_ COW page, but
-	 * not necessarily the one you intended to get depending on what
-	 * COW event happens after this. COW may break the page copy in a
-	 * random direction.
 	 */
 
 	if (IS_ENABLED(CONFIG_HAVE_FAST_GUP) &&
@@ -2440,17 +2460,10 @@ int get_user_pages_fast(unsigned long start, int nr_pages,
 	if (unlikely(!access_ok((void __user *)start, len)))
 		return -EFAULT;
 
-	/*
-	 * The FAST_GUP case requires FOLL_WRITE even for pure reads,
-	 * because get_user_pages() may need to cause an early COW in
-	 * order to avoid confusing the normal COW routines. So only
-	 * targets that are already writable are safe to do by just
-	 * looking at the page tables.
-	 */
 	if (IS_ENABLED(CONFIG_HAVE_FAST_GUP) &&
 	    gup_fast_permitted(start, end)) {
 		local_irq_disable();
-		gup_pgd_range(addr, end, gup_flags | FOLL_WRITE, pages, &nr);
+		gup_pgd_range(addr, end, gup_flags, pages, &nr);
 		local_irq_enable();
 		ret = nr;
 	}
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index 7bbf419..3289b57 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -1453,12 +1453,13 @@ vm_fault_t do_huge_pmd_wp_page(struct vm_fault *vmf, pmd_t orig_pmd)
 }
 
 /*
- * FOLL_FORCE or a forced COW break can write even to unwritable pmd's,
- * but only after we've gone through a COW cycle and they are dirty.
+ * FOLL_FORCE can write to even unwritable pmd's, but only
+ * after we've gone through a COW cycle and they are dirty.
  */
 static inline bool can_follow_write_pmd(pmd_t pmd, unsigned int flags)
 {
-	return pmd_write(pmd) || ((flags & FOLL_COW) && pmd_dirty(pmd));
+	return pmd_write(pmd) ||
+	       ((flags & FOLL_FORCE) && (flags & FOLL_COW) && pmd_dirty(pmd));
 }
 
 struct page *follow_trans_huge_pmd(struct vm_area_struct *vma,
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index d5b03b9..8b3852ee 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -4439,7 +4439,7 @@ int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm,
 long follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,
 			 struct page **pages, struct vm_area_struct **vmas,
 			 unsigned long *position, unsigned long *nr_pages,
-			 long i, unsigned int flags, int *nonblocking)
+			 long i, unsigned int flags, int *locked)
 {
 	unsigned long pfn_offset;
 	unsigned long vaddr = *position;
@@ -4510,14 +4510,17 @@ long follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,
 				spin_unlock(ptl);
 			if (flags & FOLL_WRITE)
 				fault_flags |= FAULT_FLAG_WRITE;
-			if (nonblocking)
-				fault_flags |= FAULT_FLAG_ALLOW_RETRY;
+			if (locked)
+				fault_flags |= FAULT_FLAG_ALLOW_RETRY |
+					FAULT_FLAG_KILLABLE;
 			if (flags & FOLL_NOWAIT)
 				fault_flags |= FAULT_FLAG_ALLOW_RETRY |
 					FAULT_FLAG_RETRY_NOWAIT;
 			if (flags & FOLL_TRIED) {
-				VM_WARN_ON_ONCE(fault_flags &
-						FAULT_FLAG_ALLOW_RETRY);
+				/*
+				 * Note: FAULT_FLAG_ALLOW_RETRY and
+				 * FAULT_FLAG_TRIED can co-exist
+				 */
 				fault_flags |= FAULT_FLAG_TRIED;
 			}
 			ret = hugetlb_fault(mm, vma, vaddr, fault_flags);
@@ -4527,9 +4530,9 @@ long follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,
 				break;
 			}
 			if (ret & VM_FAULT_RETRY) {
-				if (nonblocking &&
+				if (locked &&
 				    !(fault_flags & FAULT_FLAG_RETRY_NOWAIT))
-					*nonblocking = 0;
+					*locked = 0;
 				*nr_pages = 0;
 				/*
 				 * VM_FAULT_RETRY must not return an
diff --git a/mm/internal.h b/mm/internal.h
index 7dd7fbb..db8539a 100644
--- a/mm/internal.h
+++ b/mm/internal.h
@@ -373,10 +373,10 @@ static inline struct file *maybe_unlock_mmap_for_io(struct vm_fault *vmf,
 	/*
 	 * FAULT_FLAG_RETRY_NOWAIT means we don't want to wait on page locks or
 	 * anything, so we only pin the file and drop the mmap_sem if only
-	 * FAULT_FLAG_ALLOW_RETRY is set.
+	 * FAULT_FLAG_ALLOW_RETRY is set, while this is the first attempt.
 	 */
-	if ((flags & (FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_RETRY_NOWAIT)) ==
-	    FAULT_FLAG_ALLOW_RETRY) {
+	if (fault_flag_allow_retry_first(flags) &&
+	    !(flags & FAULT_FLAG_RETRY_NOWAIT)) {
 		fpin = get_file(vmf->vma->vm_file);
 		up_read(&vmf->vma->vm_mm->mmap_sem);
 	}
diff --git a/mm/kasan/common.c b/mm/kasan/common.c
index 6814d6d..4362eca 100644
--- a/mm/kasan/common.c
+++ b/mm/kasan/common.c
@@ -19,6 +19,7 @@
 #include <linux/init.h>
 #include <linux/kasan.h>
 #include <linux/kernel.h>
+#include <linux/kfence.h>
 #include <linux/kmemleak.h>
 #include <linux/linkage.h>
 #include <linux/memblock.h>
@@ -445,6 +446,9 @@ static bool __kasan_slab_free(struct kmem_cache *cache, void *object,
 	tagged_object = object;
 	object = reset_tag(object);
 
+	if (is_kfence_address(object))
+		return false;
+
 	if (unlikely(nearest_obj(cache, virt_to_head_page(object), object) !=
 	    object)) {
 		kasan_report_invalid_free(tagged_object, ip);
@@ -493,6 +497,9 @@ static void *__kasan_kmalloc(struct kmem_cache *cache, const void *object,
 	if (unlikely(object == NULL))
 		return NULL;
 
+	if (is_kfence_address(object))
+		return (void *)object;
+
 	redzone_start = round_up((unsigned long)(object + size),
 				KASAN_SHADOW_SCALE_SIZE);
 	redzone_end = round_up((unsigned long)object + cache->object_size,
diff --git a/mm/kasan/report.c b/mm/kasan/report.c
index 62178210..fc202d5 100644
--- a/mm/kasan/report.c
+++ b/mm/kasan/report.c
@@ -29,6 +29,7 @@
 #include <linux/kasan.h>
 #include <linux/module.h>
 #include <linux/sched/task_stack.h>
+#include <trace/events/error_report.h>
 
 #include <asm/sections.h>
 
@@ -87,8 +88,9 @@ static void start_report(unsigned long *flags)
 	pr_err("==================================================================\n");
 }
 
-static void end_report(unsigned long *flags)
+static void end_report(unsigned long *flags, unsigned long addr)
 {
+	trace_error_report_end(ERROR_DETECTOR_KASAN, addr);
 	pr_err("==================================================================\n");
 	add_taint(TAINT_BAD_PAGE, LOCKDEP_NOW_UNRELIABLE);
 	spin_unlock_irqrestore(&report_lock, *flags);
@@ -468,7 +470,7 @@ void kasan_report_invalid_free(void *object, unsigned long ip)
 	print_address_description(object, tag);
 	pr_err("\n");
 	print_shadow_for_address(object);
-	end_report(&flags);
+	end_report(&flags, (unsigned long)object);
 }
 
 void __kasan_report(unsigned long addr, size_t size, bool is_write, unsigned long ip)
@@ -510,5 +512,5 @@ void __kasan_report(unsigned long addr, size_t size, bool is_write, unsigned lon
 		dump_stack();
 	}
 
-	end_report(&flags);
+	end_report(&flags, addr);
 }
diff --git a/mm/kfence/Makefile b/mm/kfence/Makefile
new file mode 100644
index 0000000..6872cd5
--- /dev/null
+++ b/mm/kfence/Makefile
@@ -0,0 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0
+
+obj-$(CONFIG_KFENCE) := core.o report.o
+
+CFLAGS_kfence_test.o := -g -fno-omit-frame-pointer -fno-optimize-sibling-calls
+obj-$(CONFIG_KFENCE_KUNIT_TEST) += kfence_test.o
diff --git a/mm/kfence/core.c b/mm/kfence/core.c
new file mode 100644
index 0000000..a1ce4f4
--- /dev/null
+++ b/mm/kfence/core.c
@@ -0,0 +1,845 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * KFENCE guarded object allocator and fault handling.
+ *
+ * Copyright (C) 2020, Google LLC.
+ */
+
+#define pr_fmt(fmt) "kfence: " fmt
+
+#include <linux/atomic.h>
+#include <linux/bug.h>
+#include <linux/debugfs.h>
+#include <linux/kfence.h>
+#include <linux/list.h>
+#include <linux/lockdep.h>
+#include <linux/memblock.h>
+#include <linux/moduleparam.h>
+#include <linux/random.h>
+#include <linux/rcupdate.h>
+#include <linux/seq_file.h>
+#include <linux/slab.h>
+#include <linux/spinlock.h>
+#include <linux/string.h>
+
+#include <asm/kfence.h>
+
+#include "kfence.h"
+
+/*
+ * Android 4.19 kernel does not support KCSAN, so we have to disable data race
+ * annotations.
+ */
+#ifndef data_race
+#define data_race(x) (x)
+#endif
+
+/* Disables KFENCE on the first warning assuming an irrecoverable error. */
+#define KFENCE_WARN_ON(cond)                                                   \
+	({                                                                     \
+		const bool __cond = WARN_ON(cond);                             \
+		if (unlikely(__cond))                                          \
+			WRITE_ONCE(kfence_enabled, false);                     \
+		__cond;                                                        \
+	})
+
+/* === Data ================================================================= */
+
+static bool kfence_enabled __read_mostly;
+
+static unsigned long kfence_sample_interval __read_mostly = CONFIG_KFENCE_SAMPLE_INTERVAL;
+
+#ifdef MODULE_PARAM_PREFIX
+#undef MODULE_PARAM_PREFIX
+#endif
+#define MODULE_PARAM_PREFIX "kfence."
+
+static int param_set_sample_interval(const char *val, const struct kernel_param *kp)
+{
+	unsigned long num;
+	int ret = kstrtoul(val, 0, &num);
+
+	if (ret < 0)
+		return ret;
+
+	if (!num) /* Using 0 to indicate KFENCE is disabled. */
+		WRITE_ONCE(kfence_enabled, false);
+	else if (!READ_ONCE(kfence_enabled) && system_state != SYSTEM_BOOTING)
+		return -EINVAL; /* Cannot (re-)enable KFENCE on-the-fly. */
+
+	*((unsigned long *)kp->arg) = num;
+	return 0;
+}
+
+static int param_get_sample_interval(char *buffer, const struct kernel_param *kp)
+{
+	if (!READ_ONCE(kfence_enabled))
+		return sprintf(buffer, "0\n");
+
+	return param_get_ulong(buffer, kp);
+}
+
+static const struct kernel_param_ops sample_interval_param_ops = {
+	.set = param_set_sample_interval,
+	.get = param_get_sample_interval,
+};
+module_param_cb(sample_interval, &sample_interval_param_ops, &kfence_sample_interval, 0600);
+
+/* The pool of pages used for guard pages and objects. */
+char *__kfence_pool __ro_after_init;
+EXPORT_SYMBOL(__kfence_pool); /* Export for test modules. */
+
+/*
+ * Per-object metadata, with one-to-one mapping of object metadata to
+ * backing pages (in __kfence_pool).
+ */
+static_assert(CONFIG_KFENCE_NUM_OBJECTS > 0);
+struct kfence_metadata kfence_metadata[CONFIG_KFENCE_NUM_OBJECTS];
+
+/* Freelist with available objects. */
+static struct list_head kfence_freelist = LIST_HEAD_INIT(kfence_freelist);
+static DEFINE_RAW_SPINLOCK(kfence_freelist_lock); /* Lock protecting freelist. */
+
+#ifdef CONFIG_KFENCE_STATIC_KEYS
+/* The static key to set up a KFENCE allocation. */
+DEFINE_STATIC_KEY_FALSE(kfence_allocation_key);
+#endif
+
+/* Gates the allocation, ensuring only one succeeds in a given period. */
+atomic_t kfence_allocation_gate = ATOMIC_INIT(1);
+
+/* Statistics counters for debugfs. */
+enum kfence_counter_id {
+	KFENCE_COUNTER_ALLOCATED,
+	KFENCE_COUNTER_ALLOCS,
+	KFENCE_COUNTER_FREES,
+	KFENCE_COUNTER_ZOMBIES,
+	KFENCE_COUNTER_BUGS,
+	KFENCE_COUNTER_COUNT,
+};
+static atomic_long_t counters[KFENCE_COUNTER_COUNT];
+static const char *const counter_names[] = {
+	[KFENCE_COUNTER_ALLOCATED]	= "currently allocated",
+	[KFENCE_COUNTER_ALLOCS]		= "total allocations",
+	[KFENCE_COUNTER_FREES]		= "total frees",
+	[KFENCE_COUNTER_ZOMBIES]	= "zombie allocations",
+	[KFENCE_COUNTER_BUGS]		= "total bugs",
+};
+static_assert(ARRAY_SIZE(counter_names) == KFENCE_COUNTER_COUNT);
+
+/* === Internals ============================================================ */
+
+static bool kfence_protect(unsigned long addr)
+{
+	return !KFENCE_WARN_ON(!kfence_protect_page(ALIGN_DOWN(addr, PAGE_SIZE), true));
+}
+
+static bool kfence_unprotect(unsigned long addr)
+{
+	return !KFENCE_WARN_ON(!kfence_protect_page(ALIGN_DOWN(addr, PAGE_SIZE), false));
+}
+
+static inline struct kfence_metadata *addr_to_metadata(unsigned long addr)
+{
+	long index;
+
+	/* The checks do not affect performance; only called from slow-paths. */
+
+	if (!is_kfence_address((void *)addr))
+		return NULL;
+
+	/*
+	 * May be an invalid index if called with an address at the edge of
+	 * __kfence_pool, in which case we would report an "invalid access"
+	 * error.
+	 */
+	index = (addr - (unsigned long)__kfence_pool) / (PAGE_SIZE * 2) - 1;
+	if (index < 0 || index >= CONFIG_KFENCE_NUM_OBJECTS)
+		return NULL;
+
+	return &kfence_metadata[index];
+}
+
+static inline unsigned long metadata_to_pageaddr(const struct kfence_metadata *meta)
+{
+	unsigned long offset = (meta - kfence_metadata + 1) * PAGE_SIZE * 2;
+	unsigned long pageaddr = (unsigned long)&__kfence_pool[offset];
+
+	/* The checks do not affect performance; only called from slow-paths. */
+
+	/* Only call with a pointer into kfence_metadata. */
+	if (KFENCE_WARN_ON(meta < kfence_metadata ||
+			   meta >= kfence_metadata + CONFIG_KFENCE_NUM_OBJECTS))
+		return 0;
+
+	/*
+	 * This metadata object only ever maps to 1 page; verify that the stored
+	 * address is in the expected range.
+	 */
+	if (KFENCE_WARN_ON(ALIGN_DOWN(meta->addr, PAGE_SIZE) != pageaddr))
+		return 0;
+
+	return pageaddr;
+}
+
+/*
+ * Update the object's metadata state, including updating the alloc/free stacks
+ * depending on the state transition.
+ */
+static noinline void metadata_update_state(struct kfence_metadata *meta,
+					   enum kfence_object_state next)
+{
+	struct kfence_track *track =
+		next == KFENCE_OBJECT_FREED ? &meta->free_track : &meta->alloc_track;
+
+	lockdep_assert_held(&meta->lock);
+
+	/*
+	 * Skip over 1 (this) functions; noinline ensures we do not accidentally
+	 * skip over the caller by never inlining.
+	 */
+	track->num_stack_entries = stack_trace_save(track->stack_entries, KFENCE_STACK_DEPTH, 1);
+	track->pid = task_pid_nr(current);
+
+	/*
+	 * Pairs with READ_ONCE() in
+	 *	kfence_shutdown_cache(),
+	 *	kfence_handle_page_fault().
+	 */
+	WRITE_ONCE(meta->state, next);
+}
+
+/* Write canary byte to @addr. */
+static inline bool set_canary_byte(u8 *addr)
+{
+	*addr = KFENCE_CANARY_PATTERN(addr);
+	return true;
+}
+
+/* Check canary byte at @addr. */
+static inline bool check_canary_byte(u8 *addr)
+{
+	if (likely(*addr == KFENCE_CANARY_PATTERN(addr)))
+		return true;
+
+	atomic_long_inc(&counters[KFENCE_COUNTER_BUGS]);
+	kfence_report_error((unsigned long)addr, false, NULL, addr_to_metadata((unsigned long)addr),
+			    KFENCE_ERROR_CORRUPTION);
+	return false;
+}
+
+/* __always_inline this to ensure we won't do an indirect call to fn. */
+static __always_inline void for_each_canary(const struct kfence_metadata *meta, bool (*fn)(u8 *))
+{
+	const unsigned long pageaddr = ALIGN_DOWN(meta->addr, PAGE_SIZE);
+	unsigned long addr;
+
+	lockdep_assert_held(&meta->lock);
+
+	/*
+	 * We'll iterate over each canary byte per-side until fn() returns
+	 * false. However, we'll still iterate over the canary bytes to the
+	 * right of the object even if there was an error in the canary bytes to
+	 * the left of the object. Specifically, if check_canary_byte()
+	 * generates an error, showing both sides might give more clues as to
+	 * what the error is about when displaying which bytes were corrupted.
+	 */
+
+	/* Apply to left of object. */
+	for (addr = pageaddr; addr < meta->addr; addr++) {
+		if (!fn((u8 *)addr))
+			break;
+	}
+
+	/* Apply to right of object. */
+	for (addr = meta->addr + meta->size; addr < pageaddr + PAGE_SIZE; addr++) {
+		if (!fn((u8 *)addr))
+			break;
+	}
+}
+
+static void *kfence_guarded_alloc(struct kmem_cache *cache, size_t size, gfp_t gfp)
+{
+	struct kfence_metadata *meta = NULL;
+	unsigned long flags;
+	struct page *page;
+	void *addr;
+
+	/* Try to obtain a free object. */
+	raw_spin_lock_irqsave(&kfence_freelist_lock, flags);
+	if (!list_empty(&kfence_freelist)) {
+		meta = list_entry(kfence_freelist.next, struct kfence_metadata, list);
+		list_del_init(&meta->list);
+	}
+	raw_spin_unlock_irqrestore(&kfence_freelist_lock, flags);
+	if (!meta)
+		return NULL;
+
+	if (unlikely(!raw_spin_trylock_irqsave(&meta->lock, flags))) {
+		/*
+		 * This is extremely unlikely -- we are reporting on a
+		 * use-after-free, which locked meta->lock, and the reporting
+		 * code via printk calls kmalloc() which ends up in
+		 * kfence_alloc() and tries to grab the same object that we're
+		 * reporting on. While it has never been observed, lockdep does
+		 * report that there is a possibility of deadlock. Fix it by
+		 * using trylock and bailing out gracefully.
+		 */
+		raw_spin_lock_irqsave(&kfence_freelist_lock, flags);
+		/* Put the object back on the freelist. */
+		list_add_tail(&meta->list, &kfence_freelist);
+		raw_spin_unlock_irqrestore(&kfence_freelist_lock, flags);
+
+		return NULL;
+	}
+
+	meta->addr = metadata_to_pageaddr(meta);
+	/* Unprotect if we're reusing this page. */
+	if (meta->state == KFENCE_OBJECT_FREED)
+		kfence_unprotect(meta->addr);
+
+	/*
+	 * Note: for allocations made before RNG initialization, will always
+	 * return zero. We still benefit from enabling KFENCE as early as
+	 * possible, even when the RNG is not yet available, as this will allow
+	 * KFENCE to detect bugs due to earlier allocations. The only downside
+	 * is that the out-of-bounds accesses detected are deterministic for
+	 * such allocations.
+	 */
+	if (prandom_u32_max(2)) {
+		/* Allocate on the "right" side, re-calculate address. */
+		meta->addr += PAGE_SIZE - size;
+		meta->addr = ALIGN_DOWN(meta->addr, cache->align);
+	}
+
+	addr = (void *)meta->addr;
+
+	/* Update remaining metadata. */
+	metadata_update_state(meta, KFENCE_OBJECT_ALLOCATED);
+	/* Pairs with READ_ONCE() in kfence_shutdown_cache(). */
+	WRITE_ONCE(meta->cache, cache);
+	meta->size = size;
+	for_each_canary(meta, set_canary_byte);
+
+	/* Set required struct page fields. */
+	page = virt_to_page(meta->addr);
+	page->slab_cache = cache;
+	if (IS_ENABLED(CONFIG_SLUB))
+		page->objects = 1;
+	if (IS_ENABLED(CONFIG_SLAB))
+		page->s_mem = addr;
+
+	raw_spin_unlock_irqrestore(&meta->lock, flags);
+
+	/* Memory initialization. */
+
+	/*
+	 * We check slab_want_init_on_alloc() ourselves, rather than letting
+	 * SL*B do the initialization, as otherwise we might overwrite KFENCE's
+	 * redzone.
+	 */
+	if (unlikely(slab_want_init_on_alloc(gfp, cache)))
+		memzero_explicit(addr, size);
+	if (cache->ctor)
+		cache->ctor(addr);
+
+	if (CONFIG_KFENCE_STRESS_TEST_FAULTS && !prandom_u32_max(CONFIG_KFENCE_STRESS_TEST_FAULTS))
+		kfence_protect(meta->addr); /* Random "faults" by protecting the object. */
+
+	atomic_long_inc(&counters[KFENCE_COUNTER_ALLOCATED]);
+	atomic_long_inc(&counters[KFENCE_COUNTER_ALLOCS]);
+
+	return addr;
+}
+
+static void kfence_guarded_free(void *addr, struct kfence_metadata *meta, bool zombie)
+{
+	unsigned long flags;
+
+	raw_spin_lock_irqsave(&meta->lock, flags);
+
+	if (meta->state != KFENCE_OBJECT_ALLOCATED || meta->addr != (unsigned long)addr) {
+		/* Invalid or double-free, bail out. */
+		atomic_long_inc(&counters[KFENCE_COUNTER_BUGS]);
+		kfence_report_error((unsigned long)addr, false, NULL, meta,
+				    KFENCE_ERROR_INVALID_FREE);
+		raw_spin_unlock_irqrestore(&meta->lock, flags);
+		return;
+	}
+
+	if (CONFIG_KFENCE_STRESS_TEST_FAULTS)
+		kfence_unprotect((unsigned long)addr); /* To check canary bytes. */
+
+	/* Restore page protection if there was an OOB access. */
+	if (meta->unprotected_page) {
+		kfence_protect(meta->unprotected_page);
+		meta->unprotected_page = 0;
+	}
+
+	/* Check canary bytes for memory corruption. */
+	for_each_canary(meta, check_canary_byte);
+
+	/*
+	 * Clear memory if init-on-free is set. While we protect the page, the
+	 * data is still there, and after a use-after-free is detected, we
+	 * unprotect the page, so the data is still accessible.
+	 */
+	if (!zombie && unlikely(slab_want_init_on_free(meta->cache)))
+		memzero_explicit(addr, meta->size);
+
+	/* Mark the object as freed. */
+	metadata_update_state(meta, KFENCE_OBJECT_FREED);
+
+	raw_spin_unlock_irqrestore(&meta->lock, flags);
+
+	/* Protect to detect use-after-frees. */
+	kfence_protect((unsigned long)addr);
+
+	if (!zombie) {
+		/* Add it to the tail of the freelist for reuse. */
+		raw_spin_lock_irqsave(&kfence_freelist_lock, flags);
+		KFENCE_WARN_ON(!list_empty(&meta->list));
+		list_add_tail(&meta->list, &kfence_freelist);
+		raw_spin_unlock_irqrestore(&kfence_freelist_lock, flags);
+
+		atomic_long_dec(&counters[KFENCE_COUNTER_ALLOCATED]);
+		atomic_long_inc(&counters[KFENCE_COUNTER_FREES]);
+	} else {
+		/* See kfence_shutdown_cache(). */
+		atomic_long_inc(&counters[KFENCE_COUNTER_ZOMBIES]);
+	}
+}
+
+static void rcu_guarded_free(struct rcu_head *h)
+{
+	struct kfence_metadata *meta = container_of(h, struct kfence_metadata, rcu_head);
+
+	kfence_guarded_free((void *)meta->addr, meta, false);
+}
+
+static bool __init kfence_init_pool(void)
+{
+	unsigned long addr = (unsigned long)__kfence_pool;
+	struct page *pages;
+	int i;
+
+	if (!__kfence_pool)
+		return false;
+
+	if (!arch_kfence_init_pool())
+		goto err;
+
+	pages = virt_to_page(addr);
+
+	/*
+	 * Set up object pages: they must have PG_slab set, to avoid freeing
+	 * these as real pages.
+	 *
+	 * We also want to avoid inserting kfence_free() in the kfree()
+	 * fast-path in SLUB, and therefore need to ensure kfree() correctly
+	 * enters __slab_free() slow-path.
+	 */
+	for (i = 0; i < KFENCE_POOL_SIZE / PAGE_SIZE; i++) {
+		if (!i || (i % 2))
+			continue;
+
+		/* Verify we do not have a compound head page. */
+		if (WARN_ON(compound_head(&pages[i]) != &pages[i]))
+			goto err;
+
+		__SetPageSlab(&pages[i]);
+	}
+
+	/*
+	 * Protect the first 2 pages. The first page is mostly unnecessary, and
+	 * merely serves as an extended guard page. However, adding one
+	 * additional page in the beginning gives us an even number of pages,
+	 * which simplifies the mapping of address to metadata index.
+	 */
+	for (i = 0; i < 2; i++) {
+		if (unlikely(!kfence_protect(addr)))
+			goto err;
+
+		addr += PAGE_SIZE;
+	}
+
+	for (i = 0; i < CONFIG_KFENCE_NUM_OBJECTS; i++) {
+		struct kfence_metadata *meta = &kfence_metadata[i];
+
+		/* Initialize metadata. */
+		INIT_LIST_HEAD(&meta->list);
+		raw_spin_lock_init(&meta->lock);
+		meta->state = KFENCE_OBJECT_UNUSED;
+		meta->addr = addr; /* Initialize for validation in metadata_to_pageaddr(). */
+		list_add_tail(&meta->list, &kfence_freelist);
+
+		/* Protect the right redzone. */
+		if (unlikely(!kfence_protect(addr + PAGE_SIZE)))
+			goto err;
+
+		addr += 2 * PAGE_SIZE;
+	}
+
+	return true;
+
+err:
+	/*
+	 * Only release unprotected pages, and do not try to go back and change
+	 * page attributes due to risk of failing to do so as well. If changing
+	 * page attributes for some pages fails, it is very likely that it also
+	 * fails for the first page, and therefore expect addr==__kfence_pool in
+	 * most failure cases.
+	 */
+	memblock_free_late(__pa(addr), KFENCE_POOL_SIZE - (addr - (unsigned long)__kfence_pool));
+	__kfence_pool = NULL;
+	return false;
+}
+
+/* === DebugFS Interface ==================================================== */
+
+static int stats_show(struct seq_file *seq, void *v)
+{
+	int i;
+
+	seq_printf(seq, "enabled: %i\n", READ_ONCE(kfence_enabled));
+	for (i = 0; i < KFENCE_COUNTER_COUNT; i++)
+		seq_printf(seq, "%s: %ld\n", counter_names[i], atomic_long_read(&counters[i]));
+
+	return 0;
+}
+DEFINE_SHOW_ATTRIBUTE(stats);
+
+/*
+ * debugfs seq_file operations for /sys/kernel/debug/kfence/objects.
+ * start_object() and next_object() return the object index + 1, because NULL is used
+ * to stop iteration.
+ */
+static void *start_object(struct seq_file *seq, loff_t *pos)
+{
+	if (*pos < CONFIG_KFENCE_NUM_OBJECTS)
+		return (void *)((long)*pos + 1);
+	return NULL;
+}
+
+static void stop_object(struct seq_file *seq, void *v)
+{
+}
+
+static void *next_object(struct seq_file *seq, void *v, loff_t *pos)
+{
+	++*pos;
+	if (*pos < CONFIG_KFENCE_NUM_OBJECTS)
+		return (void *)((long)*pos + 1);
+	return NULL;
+}
+
+static int show_object(struct seq_file *seq, void *v)
+{
+	struct kfence_metadata *meta = &kfence_metadata[(long)v - 1];
+	unsigned long flags;
+
+	raw_spin_lock_irqsave(&meta->lock, flags);
+	kfence_print_object(seq, meta);
+	raw_spin_unlock_irqrestore(&meta->lock, flags);
+	seq_puts(seq, "---------------------------------\n");
+
+	return 0;
+}
+
+static const struct seq_operations object_seqops = {
+	.start = start_object,
+	.next = next_object,
+	.stop = stop_object,
+	.show = show_object,
+};
+
+static int open_objects(struct inode *inode, struct file *file)
+{
+	return seq_open(file, &object_seqops);
+}
+
+static const struct file_operations objects_fops = {
+	.open = open_objects,
+	.read = seq_read,
+	.llseek = seq_lseek,
+};
+
+static int __init kfence_debugfs_init(void)
+{
+	struct dentry *kfence_dir = debugfs_create_dir("kfence", NULL);
+
+	debugfs_create_file("stats", 0444, kfence_dir, NULL, &stats_fops);
+	debugfs_create_file("objects", 0400, kfence_dir, NULL, &objects_fops);
+	return 0;
+}
+
+late_initcall(kfence_debugfs_init);
+
+/* === Allocation Gate Timer ================================================ */
+
+/*
+ * Set up delayed work, which will enable and disable the static key. We need to
+ * use a work queue (rather than a simple timer), since enabling and disabling a
+ * static key cannot be done from an interrupt.
+ *
+ * Note: Toggling a static branch currently causes IPIs, and here we'll end up
+ * with a total of 2 IPIs to all CPUs. If this ends up a problem in future (with
+ * more aggressive sampling intervals), we could get away with a variant that
+ * avoids IPIs, at the cost of not immediately capturing allocations if the
+ * instructions remain cached.
+ */
+static struct delayed_work kfence_timer;
+static void toggle_allocation_gate(struct work_struct *work)
+{
+	if (!READ_ONCE(kfence_enabled))
+		return;
+
+	/* Enable static key, and await allocation to happen. */
+	atomic_set(&kfence_allocation_gate, 0);
+#ifdef CONFIG_KFENCE_STATIC_KEYS
+	static_branch_enable(&kfence_allocation_key);
+	/*
+	 * Await an allocation. Timeout after 1 second, in case the kernel stops
+	 * doing allocations, to avoid stalling this worker task for too long.
+	 */
+	{
+		unsigned long end_wait = jiffies + HZ;
+
+		do {
+			set_current_state(TASK_UNINTERRUPTIBLE);
+			if (atomic_read(&kfence_allocation_gate) != 0)
+				break;
+			schedule_timeout(1);
+		} while (time_before(jiffies, end_wait));
+		__set_current_state(TASK_RUNNING);
+	}
+	/* Disable static key and reset timer. */
+	static_branch_disable(&kfence_allocation_key);
+#endif
+	schedule_delayed_work(&kfence_timer, msecs_to_jiffies(kfence_sample_interval));
+}
+static DECLARE_DELAYED_WORK(kfence_timer, toggle_allocation_gate);
+
+/* === Public interface ===================================================== */
+
+void __init kfence_alloc_pool(void)
+{
+	if (!kfence_sample_interval)
+		return;
+
+	__kfence_pool = memblock_alloc(KFENCE_POOL_SIZE, PAGE_SIZE);
+
+	if (!__kfence_pool)
+		pr_err("failed to allocate pool\n");
+}
+
+void __init kfence_init(void)
+{
+	/* Setting kfence_sample_interval to 0 on boot disables KFENCE. */
+	if (!kfence_sample_interval)
+		return;
+
+	if (!kfence_init_pool()) {
+		pr_err("%s failed\n", __func__);
+		return;
+	}
+
+	WRITE_ONCE(kfence_enabled, true);
+	schedule_delayed_work(&kfence_timer, 0);
+	pr_info("initialized - using %lu bytes for %d objects", KFENCE_POOL_SIZE,
+		CONFIG_KFENCE_NUM_OBJECTS);
+	if (IS_ENABLED(CONFIG_DEBUG_KERNEL))
+		pr_cont(" at 0x%px-0x%px\n", (void *)__kfence_pool,
+			(void *)(__kfence_pool + KFENCE_POOL_SIZE));
+	else
+		pr_cont("\n");
+}
+
+void kfence_shutdown_cache(struct kmem_cache *s)
+{
+	unsigned long flags;
+	struct kfence_metadata *meta;
+	int i;
+
+	for (i = 0; i < CONFIG_KFENCE_NUM_OBJECTS; i++) {
+		bool in_use;
+
+		meta = &kfence_metadata[i];
+
+		/*
+		 * If we observe some inconsistent cache and state pair where we
+		 * should have returned false here, cache destruction is racing
+		 * with either kmem_cache_alloc() or kmem_cache_free(). Taking
+		 * the lock will not help, as different critical section
+		 * serialization will have the same outcome.
+		 */
+		if (READ_ONCE(meta->cache) != s ||
+		    READ_ONCE(meta->state) != KFENCE_OBJECT_ALLOCATED)
+			continue;
+
+		raw_spin_lock_irqsave(&meta->lock, flags);
+		in_use = meta->cache == s && meta->state == KFENCE_OBJECT_ALLOCATED;
+		raw_spin_unlock_irqrestore(&meta->lock, flags);
+
+		if (in_use) {
+			/*
+			 * This cache still has allocations, and we should not
+			 * release them back into the freelist so they can still
+			 * safely be used and retain the kernel's default
+			 * behaviour of keeping the allocations alive (leak the
+			 * cache); however, they effectively become "zombie
+			 * allocations" as the KFENCE objects are the only ones
+			 * still in use and the owning cache is being destroyed.
+			 *
+			 * We mark them freed, so that any subsequent use shows
+			 * more useful error messages that will include stack
+			 * traces of the user of the object, the original
+			 * allocation, and caller to shutdown_cache().
+			 */
+			kfence_guarded_free((void *)meta->addr, meta, /*zombie=*/true);
+		}
+	}
+
+	for (i = 0; i < CONFIG_KFENCE_NUM_OBJECTS; i++) {
+		meta = &kfence_metadata[i];
+
+		/* See above. */
+		if (READ_ONCE(meta->cache) != s || READ_ONCE(meta->state) != KFENCE_OBJECT_FREED)
+			continue;
+
+		raw_spin_lock_irqsave(&meta->lock, flags);
+		if (meta->cache == s && meta->state == KFENCE_OBJECT_FREED)
+			meta->cache = NULL;
+		raw_spin_unlock_irqrestore(&meta->lock, flags);
+	}
+}
+
+void *__kfence_alloc(struct kmem_cache *s, size_t size, gfp_t flags)
+{
+	/*
+	 * allocation_gate only needs to become non-zero, so it doesn't make
+	 * sense to continue writing to it and pay the associated contention
+	 * cost, in case we have a large number of concurrent allocations.
+	 */
+	if (atomic_read(&kfence_allocation_gate) || atomic_inc_return(&kfence_allocation_gate) > 1)
+		return NULL;
+
+	if (!READ_ONCE(kfence_enabled))
+		return NULL;
+
+	if (size > PAGE_SIZE)
+		return NULL;
+
+	return kfence_guarded_alloc(s, size, flags);
+}
+
+size_t kfence_ksize(const void *addr)
+{
+	const struct kfence_metadata *meta = addr_to_metadata((unsigned long)addr);
+
+	/*
+	 * Read locklessly -- if there is a race with __kfence_alloc(), this is
+	 * either a use-after-free or invalid access.
+	 */
+	return meta ? meta->size : 0;
+}
+
+void *kfence_object_start(const void *addr)
+{
+	const struct kfence_metadata *meta = addr_to_metadata((unsigned long)addr);
+
+	/*
+	 * Read locklessly -- if there is a race with __kfence_alloc(), this is
+	 * either a use-after-free or invalid access.
+	 */
+	return meta ? (void *)meta->addr : NULL;
+}
+
+void __kfence_free(void *addr)
+{
+	struct kfence_metadata *meta = addr_to_metadata((unsigned long)addr);
+
+	/*
+	 * If the objects of the cache are SLAB_TYPESAFE_BY_RCU, defer freeing
+	 * the object, as the object page may be recycled for other-typed
+	 * objects once it has been freed. meta->cache may be NULL if the cache
+	 * was destroyed.
+	 */
+	if (unlikely(meta->cache && (meta->cache->flags & SLAB_TYPESAFE_BY_RCU)))
+		call_rcu(&meta->rcu_head, rcu_guarded_free);
+	else
+		kfence_guarded_free(addr, meta, false);
+}
+
+bool kfence_handle_page_fault(unsigned long addr, bool is_write, struct pt_regs *regs)
+{
+	const int page_index = (addr - (unsigned long)__kfence_pool) / PAGE_SIZE;
+	struct kfence_metadata *to_report = NULL;
+	enum kfence_error_type error_type;
+	unsigned long flags;
+
+	if (!is_kfence_address((void *)addr))
+		return false;
+
+	if (!READ_ONCE(kfence_enabled)) /* If disabled at runtime ... */
+		return kfence_unprotect(addr); /* ... unprotect and proceed. */
+
+	atomic_long_inc(&counters[KFENCE_COUNTER_BUGS]);
+
+	if (page_index % 2) {
+		/* This is a redzone, report a buffer overflow. */
+		struct kfence_metadata *meta;
+		int distance = 0;
+
+		meta = addr_to_metadata(addr - PAGE_SIZE);
+		if (meta && READ_ONCE(meta->state) == KFENCE_OBJECT_ALLOCATED) {
+			to_report = meta;
+			/* Data race ok; distance calculation approximate. */
+			distance = addr - data_race(meta->addr + meta->size);
+		}
+
+		meta = addr_to_metadata(addr + PAGE_SIZE);
+		if (meta && READ_ONCE(meta->state) == KFENCE_OBJECT_ALLOCATED) {
+			/* Data race ok; distance calculation approximate. */
+			if (!to_report || distance > data_race(meta->addr) - addr)
+				to_report = meta;
+		}
+
+		if (!to_report)
+			goto out;
+
+		raw_spin_lock_irqsave(&to_report->lock, flags);
+		to_report->unprotected_page = addr;
+		error_type = KFENCE_ERROR_OOB;
+
+		/*
+		 * If the object was freed before we took the look we can still
+		 * report this as an OOB -- the report will simply show the
+		 * stacktrace of the free as well.
+		 */
+	} else {
+		to_report = addr_to_metadata(addr);
+		if (!to_report)
+			goto out;
+
+		raw_spin_lock_irqsave(&to_report->lock, flags);
+		error_type = KFENCE_ERROR_UAF;
+		/*
+		 * We may race with __kfence_alloc(), and it is possible that a
+		 * freed object may be reallocated. We simply report this as a
+		 * use-after-free, with the stack trace showing the place where
+		 * the object was re-allocated.
+		 */
+	}
+
+out:
+	if (to_report) {
+		kfence_report_error(addr, is_write, regs, to_report, error_type);
+		raw_spin_unlock_irqrestore(&to_report->lock, flags);
+	} else {
+		/* This may be a UAF or OOB access, but we can't be sure. */
+		kfence_report_error(addr, is_write, regs, NULL, KFENCE_ERROR_INVALID);
+	}
+
+	return kfence_unprotect(addr); /* Unprotect and let access proceed. */
+}
diff --git a/mm/kfence/kfence.h b/mm/kfence/kfence.h
new file mode 100644
index 0000000..1accc84
--- /dev/null
+++ b/mm/kfence/kfence.h
@@ -0,0 +1,113 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Kernel Electric-Fence (KFENCE). For more info please see
+ * Documentation/dev-tools/kfence.rst.
+ *
+ * Copyright (C) 2020, Google LLC.
+ */
+
+#ifndef MM_KFENCE_KFENCE_H
+#define MM_KFENCE_KFENCE_H
+
+#include <linux/mm.h>
+#include <linux/slab.h>
+#include <linux/spinlock.h>
+#include <linux/types.h>
+
+#include "../slab.h" /* for struct kmem_cache */
+
+/* For non-debug builds, avoid leaking kernel pointers into dmesg. */
+#ifdef CONFIG_DEBUG_KERNEL
+#define PTR_FMT "%px"
+#else
+#define PTR_FMT "%p"
+#endif
+
+/*
+ * Get the canary byte pattern for @addr. Use a pattern that varies based on the
+ * lower 3 bits of the address, to detect memory corruptions with higher
+ * probability, where similar constants are used.
+ */
+#define KFENCE_CANARY_PATTERN(addr) ((u8)0xaa ^ (u8)((unsigned long)(addr) & 0x7))
+
+/* Maximum stack depth for reports. */
+#define KFENCE_STACK_DEPTH 64
+
+/* KFENCE object states. */
+enum kfence_object_state {
+	KFENCE_OBJECT_UNUSED,		/* Object is unused. */
+	KFENCE_OBJECT_ALLOCATED,	/* Object is currently allocated. */
+	KFENCE_OBJECT_FREED,		/* Object was allocated, and then freed. */
+};
+
+/* Alloc/free tracking information. */
+struct kfence_track {
+	pid_t pid;
+	int num_stack_entries;
+	unsigned long stack_entries[KFENCE_STACK_DEPTH];
+};
+
+/* KFENCE metadata per guarded allocation. */
+struct kfence_metadata {
+	struct list_head list;		/* Freelist node; access under kfence_freelist_lock. */
+	struct rcu_head rcu_head;	/* For delayed freeing. */
+
+	/*
+	 * Lock protecting below data; to ensure consistency of the below data,
+	 * since the following may execute concurrently: __kfence_alloc(),
+	 * __kfence_free(), kfence_handle_page_fault(). However, note that we
+	 * cannot grab the same metadata off the freelist twice, and multiple
+	 * __kfence_alloc() cannot run concurrently on the same metadata.
+	 */
+	raw_spinlock_t lock;
+
+	/* The current state of the object; see above. */
+	enum kfence_object_state state;
+
+	/*
+	 * Allocated object address; cannot be calculated from size, because of
+	 * alignment requirements.
+	 *
+	 * Invariant: ALIGN_DOWN(addr, PAGE_SIZE) is constant.
+	 */
+	unsigned long addr;
+
+	/*
+	 * The size of the original allocation.
+	 */
+	size_t size;
+
+	/*
+	 * The kmem_cache cache of the last allocation; NULL if never allocated
+	 * or the cache has already been destroyed.
+	 */
+	struct kmem_cache *cache;
+
+	/*
+	 * In case of an invalid access, the page that was unprotected; we
+	 * optimistically only store one address.
+	 */
+	unsigned long unprotected_page;
+
+	/* Allocation and free stack information. */
+	struct kfence_track alloc_track;
+	struct kfence_track free_track;
+};
+
+extern struct kfence_metadata kfence_metadata[CONFIG_KFENCE_NUM_OBJECTS];
+
+/* KFENCE error types for report generation. */
+enum kfence_error_type {
+	KFENCE_ERROR_OOB,		/* Detected a out-of-bounds access. */
+	KFENCE_ERROR_UAF,		/* Detected a use-after-free access. */
+	KFENCE_ERROR_CORRUPTION,	/* Detected a memory corruption on free. */
+	KFENCE_ERROR_INVALID,		/* Invalid access of unknown type. */
+	KFENCE_ERROR_INVALID_FREE,	/* Invalid free. */
+};
+
+void kfence_report_error(unsigned long address, bool is_write, struct pt_regs *regs,
+			 const struct kfence_metadata *meta, enum kfence_error_type type);
+
+void kfence_print_object(struct seq_file *seq, const struct kfence_metadata *meta);
+
+#endif /* MM_KFENCE_KFENCE_H */
diff --git a/mm/kfence/kfence_test.c b/mm/kfence/kfence_test.c
new file mode 100644
index 0000000..bb98874
--- /dev/null
+++ b/mm/kfence/kfence_test.c
@@ -0,0 +1,850 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Test cases for KFENCE memory safety error detector. Since the interface with
+ * which KFENCE's reports are obtained is via the console, this is the output we
+ * should verify. For each test case checks the presence (or absence) of
+ * generated reports. Relies on 'console' tracepoint to capture reports as they
+ * appear in the kernel log.
+ *
+ * Copyright (C) 2020, Google LLC.
+ * Author: Alexander Potapenko <glider@google.com>
+ *         Marco Elver <elver@google.com>
+ */
+
+#include <kunit/test.h>
+#include <linux/jiffies.h>
+#include <linux/kernel.h>
+#include <linux/kfence.h>
+#include <linux/mm.h>
+#include <linux/random.h>
+#include <linux/slab.h>
+#include <linux/spinlock.h>
+#include <linux/string.h>
+#include <linux/tracepoint.h>
+#include <trace/events/printk.h>
+
+#include "kfence.h"
+
+/* Report as observed from console. */
+static struct {
+	spinlock_t lock;
+	int nlines;
+	char lines[2][256];
+} observed = {
+	.lock = __SPIN_LOCK_UNLOCKED(observed.lock),
+};
+
+/* Probe for console output: obtains observed lines of interest. */
+static void probe_console(void *ignore, const char *buf, size_t len)
+{
+	unsigned long flags;
+	int nlines;
+
+	spin_lock_irqsave(&observed.lock, flags);
+	nlines = observed.nlines;
+
+	if (strnstr(buf, "BUG: KFENCE: ", len) && strnstr(buf, "test_", len)) {
+		/*
+		 * KFENCE report and related to the test.
+		 *
+		 * The provided @buf is not NUL-terminated; copy no more than
+		 * @len bytes and let strscpy() add the missing NUL-terminator.
+		 */
+		strscpy(observed.lines[0], buf, min(len + 1, sizeof(observed.lines[0])));
+		nlines = 1;
+	} else if (nlines == 1 && (strnstr(buf, "at 0x", len) || strnstr(buf, "of 0x", len))) {
+		strscpy(observed.lines[nlines++], buf, min(len + 1, sizeof(observed.lines[0])));
+	}
+
+	WRITE_ONCE(observed.nlines, nlines); /* Publish new nlines. */
+	spin_unlock_irqrestore(&observed.lock, flags);
+}
+
+/* Check if a report related to the test exists. */
+static bool report_available(void)
+{
+	return READ_ONCE(observed.nlines) == ARRAY_SIZE(observed.lines);
+}
+
+/* Information we expect in a report. */
+struct expect_report {
+	enum kfence_error_type type; /* The type or error. */
+	void *fn; /* Function pointer to expected function where access occurred. */
+	char *addr; /* Address at which the bad access occurred. */
+	bool is_write; /* Is access a write. */
+};
+
+static const char *get_access_type(const struct expect_report *r)
+{
+	return r->is_write ? "write" : "read";
+}
+
+/* Check observed report matches information in @r. */
+static bool report_matches(const struct expect_report *r)
+{
+	bool ret = false;
+	unsigned long flags;
+	typeof(observed.lines) expect;
+	const char *end;
+	char *cur;
+
+	/* Doubled-checked locking. */
+	if (!report_available())
+		return false;
+
+	/* Generate expected report contents. */
+
+	/* Title */
+	cur = expect[0];
+	end = &expect[0][sizeof(expect[0]) - 1];
+	switch (r->type) {
+	case KFENCE_ERROR_OOB:
+		cur += scnprintf(cur, end - cur, "BUG: KFENCE: out-of-bounds %s",
+				 get_access_type(r));
+		break;
+	case KFENCE_ERROR_UAF:
+		cur += scnprintf(cur, end - cur, "BUG: KFENCE: use-after-free %s",
+				 get_access_type(r));
+		break;
+	case KFENCE_ERROR_CORRUPTION:
+		cur += scnprintf(cur, end - cur, "BUG: KFENCE: memory corruption");
+		break;
+	case KFENCE_ERROR_INVALID:
+		cur += scnprintf(cur, end - cur, "BUG: KFENCE: invalid %s",
+				 get_access_type(r));
+		break;
+	case KFENCE_ERROR_INVALID_FREE:
+		cur += scnprintf(cur, end - cur, "BUG: KFENCE: invalid free");
+		break;
+	}
+
+	scnprintf(cur, end - cur, " in %pS", r->fn);
+	/* The exact offset won't match, remove it; also strip module name. */
+	cur = strchr(expect[0], '+');
+	if (cur)
+		*cur = '\0';
+
+	/* Access information */
+	cur = expect[1];
+	end = &expect[1][sizeof(expect[1]) - 1];
+
+	switch (r->type) {
+	case KFENCE_ERROR_OOB:
+		cur += scnprintf(cur, end - cur, "Out-of-bounds %s at", get_access_type(r));
+		break;
+	case KFENCE_ERROR_UAF:
+		cur += scnprintf(cur, end - cur, "Use-after-free %s at", get_access_type(r));
+		break;
+	case KFENCE_ERROR_CORRUPTION:
+		cur += scnprintf(cur, end - cur, "Corrupted memory at");
+		break;
+	case KFENCE_ERROR_INVALID:
+		cur += scnprintf(cur, end - cur, "Invalid %s at", get_access_type(r));
+		break;
+	case KFENCE_ERROR_INVALID_FREE:
+		cur += scnprintf(cur, end - cur, "Invalid free of");
+		break;
+	}
+
+	cur += scnprintf(cur, end - cur, " 0x" PTR_FMT, (void *)r->addr);
+
+	spin_lock_irqsave(&observed.lock, flags);
+	if (!report_available())
+		goto out; /* A new report is being captured. */
+
+	/* Finally match expected output to what we actually observed. */
+	ret = strstr(observed.lines[0], expect[0]) && strstr(observed.lines[1], expect[1]);
+out:
+	spin_unlock_irqrestore(&observed.lock, flags);
+	return ret;
+}
+
+/* ===== Test cases ===== */
+
+#define TEST_PRIV_WANT_MEMCACHE ((void *)1)
+
+/* Cache used by tests; if NULL, allocate from kmalloc instead. */
+static struct kmem_cache *test_cache;
+
+static size_t setup_test_cache(struct kunit *test, size_t size, slab_flags_t flags,
+			       void (*ctor)(void *))
+{
+	if (test->priv != TEST_PRIV_WANT_MEMCACHE)
+		return size;
+
+	kunit_info(test, "%s: size=%zu, ctor=%ps\n", __func__, size, ctor);
+
+	/*
+	 * Use SLAB_NOLEAKTRACE to prevent merging with existing caches. Any
+	 * other flag in SLAB_NEVER_MERGE also works. Use SLAB_ACCOUNT to
+	 * allocate via memcg, if enabled.
+	 */
+	flags |= SLAB_NOLEAKTRACE | SLAB_ACCOUNT;
+	test_cache = kmem_cache_create("test", size, 1, flags, ctor);
+	KUNIT_ASSERT_TRUE_MSG(test, test_cache, "could not create cache");
+
+	return size;
+}
+
+static void test_cache_destroy(void)
+{
+	if (!test_cache)
+		return;
+
+	kmem_cache_destroy(test_cache);
+	test_cache = NULL;
+}
+
+static inline size_t kmalloc_cache_alignment(size_t size)
+{
+	return kmalloc_caches[kmalloc_type(GFP_KERNEL)][kmalloc_index(size)]->align;
+}
+
+/* Must always inline to match stack trace against caller. */
+static __always_inline void test_free(void *ptr)
+{
+	if (test_cache)
+		kmem_cache_free(test_cache, ptr);
+	else
+		kfree(ptr);
+}
+
+/*
+ * If this should be a KFENCE allocation, and on which side the allocation and
+ * the closest guard page should be.
+ */
+enum allocation_policy {
+	ALLOCATE_ANY, /* KFENCE, any side. */
+	ALLOCATE_LEFT, /* KFENCE, left side of page. */
+	ALLOCATE_RIGHT, /* KFENCE, right side of page. */
+	ALLOCATE_NONE, /* No KFENCE allocation. */
+};
+
+/*
+ * Try to get a guarded allocation from KFENCE. Uses either kmalloc() or the
+ * current test_cache if set up.
+ */
+static void *test_alloc(struct kunit *test, size_t size, gfp_t gfp, enum allocation_policy policy)
+{
+	void *alloc;
+	unsigned long timeout, resched_after;
+	const char *policy_name;
+
+	switch (policy) {
+	case ALLOCATE_ANY:
+		policy_name = "any";
+		break;
+	case ALLOCATE_LEFT:
+		policy_name = "left";
+		break;
+	case ALLOCATE_RIGHT:
+		policy_name = "right";
+		break;
+	case ALLOCATE_NONE:
+		policy_name = "none";
+		break;
+	}
+
+	kunit_info(test, "%s: size=%zu, gfp=%x, policy=%s, cache=%i\n", __func__, size, gfp,
+		   policy_name, !!test_cache);
+
+	/*
+	 * 100x the sample interval should be more than enough to ensure we get
+	 * a KFENCE allocation eventually.
+	 */
+	timeout = jiffies + msecs_to_jiffies(100 * CONFIG_KFENCE_SAMPLE_INTERVAL);
+	/*
+	 * Especially for non-preemption kernels, ensure the allocation-gate
+	 * timer can catch up: after @resched_after, every failed allocation
+	 * attempt yields, to ensure the allocation-gate timer is scheduled.
+	 */
+	resched_after = jiffies + msecs_to_jiffies(CONFIG_KFENCE_SAMPLE_INTERVAL);
+	do {
+		if (test_cache)
+			alloc = kmem_cache_alloc(test_cache, gfp);
+		else
+			alloc = kmalloc(size, gfp);
+
+		if (is_kfence_address(alloc)) {
+			struct page *page = virt_to_head_page(alloc);
+			struct kmem_cache *s = test_cache ?: kmalloc_caches[kmalloc_type(GFP_KERNEL)][kmalloc_index(size)];
+
+			if (policy == ALLOCATE_ANY)
+				return alloc;
+			if (policy == ALLOCATE_LEFT && IS_ALIGNED((unsigned long)alloc, PAGE_SIZE))
+				return alloc;
+			if (policy == ALLOCATE_RIGHT &&
+			    !IS_ALIGNED((unsigned long)alloc, PAGE_SIZE))
+				return alloc;
+		} else if (policy == ALLOCATE_NONE)
+			return alloc;
+
+		test_free(alloc);
+
+		if (time_after(jiffies, resched_after))
+			cond_resched();
+	} while (time_before(jiffies, timeout));
+
+	KUNIT_ASSERT_TRUE_MSG(test, false, "failed to allocate from KFENCE");
+	return NULL; /* Unreachable. */
+}
+
+static void test_out_of_bounds_read(struct kunit *test)
+{
+	size_t size = 32;
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_OOB,
+		.fn = test_out_of_bounds_read,
+		.is_write = false,
+	};
+	char *buf;
+
+	setup_test_cache(test, size, 0, NULL);
+
+	/*
+	 * If we don't have our own cache, adjust based on alignment, so that we
+	 * actually access guard pages on either side.
+	 */
+	if (!test_cache)
+		size = kmalloc_cache_alignment(size);
+
+	/* Test both sides. */
+
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_LEFT);
+	expect.addr = buf - 1;
+	READ_ONCE(*expect.addr);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+	test_free(buf);
+
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_RIGHT);
+	expect.addr = buf + size;
+	READ_ONCE(*expect.addr);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+	test_free(buf);
+}
+
+static void test_out_of_bounds_write(struct kunit *test)
+{
+	size_t size = 32;
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_OOB,
+		.fn = test_out_of_bounds_write,
+		.is_write = true,
+	};
+	char *buf;
+
+	setup_test_cache(test, size, 0, NULL);
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_LEFT);
+	expect.addr = buf - 1;
+	WRITE_ONCE(*expect.addr, 42);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+	test_free(buf);
+}
+
+static void test_use_after_free_read(struct kunit *test)
+{
+	const size_t size = 32;
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_UAF,
+		.fn = test_use_after_free_read,
+		.is_write = false,
+	};
+
+	setup_test_cache(test, size, 0, NULL);
+	expect.addr = test_alloc(test, size, GFP_KERNEL, ALLOCATE_ANY);
+	test_free(expect.addr);
+	READ_ONCE(*expect.addr);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+}
+
+static void test_double_free(struct kunit *test)
+{
+	const size_t size = 32;
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_INVALID_FREE,
+		.fn = test_double_free,
+	};
+
+	setup_test_cache(test, size, 0, NULL);
+	expect.addr = test_alloc(test, size, GFP_KERNEL, ALLOCATE_ANY);
+	test_free(expect.addr);
+	test_free(expect.addr); /* Double-free. */
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+}
+
+static void test_invalid_addr_free(struct kunit *test)
+{
+	const size_t size = 32;
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_INVALID_FREE,
+		.fn = test_invalid_addr_free,
+	};
+	char *buf;
+
+	setup_test_cache(test, size, 0, NULL);
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_ANY);
+	expect.addr = buf + 1; /* Free on invalid address. */
+	test_free(expect.addr); /* Invalid address free. */
+	test_free(buf); /* No error. */
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+}
+
+static void test_corruption(struct kunit *test)
+{
+	size_t size = 32;
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_CORRUPTION,
+		.fn = test_corruption,
+	};
+	char *buf;
+
+	setup_test_cache(test, size, 0, NULL);
+
+	/* Test both sides. */
+
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_LEFT);
+	expect.addr = buf + size;
+	WRITE_ONCE(*expect.addr, 42);
+	test_free(buf);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_RIGHT);
+	expect.addr = buf - 1;
+	WRITE_ONCE(*expect.addr, 42);
+	test_free(buf);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+}
+
+/*
+ * KFENCE is unable to detect an OOB if the allocation's alignment requirements
+ * leave a gap between the object and the guard page. Specifically, an
+ * allocation of e.g. 73 bytes is aligned on 8 and 128 bytes for SLUB or SLAB
+ * respectively. Therefore it is impossible for the allocated object to
+ * contiguously line up with the right guard page.
+ *
+ * However, we test that an access to memory beyond the gap results in KFENCE
+ * detecting an OOB access.
+ */
+static void test_kmalloc_aligned_oob_read(struct kunit *test)
+{
+	const size_t size = 73;
+	const size_t align = kmalloc_cache_alignment(size);
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_OOB,
+		.fn = test_kmalloc_aligned_oob_read,
+		.is_write = false,
+	};
+	char *buf;
+
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_RIGHT);
+
+	/*
+	 * The object is offset to the right, so there won't be an OOB to the
+	 * left of it.
+	 */
+	READ_ONCE(*(buf - 1));
+	KUNIT_EXPECT_FALSE(test, report_available());
+
+	/*
+	 * @buf must be aligned on @align, therefore buf + size belongs to the
+	 * same page -> no OOB.
+	 */
+	READ_ONCE(*(buf + size));
+	KUNIT_EXPECT_FALSE(test, report_available());
+
+	/* Overflowing by @align bytes will result in an OOB. */
+	expect.addr = buf + size + align;
+	READ_ONCE(*expect.addr);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+
+	test_free(buf);
+}
+
+static void test_kmalloc_aligned_oob_write(struct kunit *test)
+{
+	const size_t size = 73;
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_CORRUPTION,
+		.fn = test_kmalloc_aligned_oob_write,
+	};
+	char *buf;
+
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_RIGHT);
+	/*
+	 * The object is offset to the right, so we won't get a page
+	 * fault immediately after it.
+	 */
+	expect.addr = buf + size;
+	WRITE_ONCE(*expect.addr, READ_ONCE(*expect.addr) + 1);
+	KUNIT_EXPECT_FALSE(test, report_available());
+	test_free(buf);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+}
+
+/* Test cache shrinking and destroying with KFENCE. */
+static void test_shrink_memcache(struct kunit *test)
+{
+	const size_t size = 32;
+	void *buf;
+
+	setup_test_cache(test, size, 0, NULL);
+	KUNIT_EXPECT_TRUE(test, test_cache);
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_ANY);
+	kmem_cache_shrink(test_cache);
+	test_free(buf);
+
+	KUNIT_EXPECT_FALSE(test, report_available());
+}
+
+static void ctor_set_x(void *obj)
+{
+	/* Every object has at least 8 bytes. */
+	memset(obj, 'x', 8);
+}
+
+/* Ensure that SL*B does not modify KFENCE objects on bulk free. */
+static void test_free_bulk(struct kunit *test)
+{
+	int iter;
+
+	for (iter = 0; iter < 5; iter++) {
+		const size_t size = setup_test_cache(test, 8 + prandom_u32_max(300), 0,
+						     (iter & 1) ? ctor_set_x : NULL);
+		void *objects[] = {
+			test_alloc(test, size, GFP_KERNEL, ALLOCATE_RIGHT),
+			test_alloc(test, size, GFP_KERNEL, ALLOCATE_NONE),
+			test_alloc(test, size, GFP_KERNEL, ALLOCATE_LEFT),
+			test_alloc(test, size, GFP_KERNEL, ALLOCATE_NONE),
+			test_alloc(test, size, GFP_KERNEL, ALLOCATE_NONE),
+		};
+
+		kmem_cache_free_bulk(test_cache, ARRAY_SIZE(objects), objects);
+		KUNIT_ASSERT_FALSE(test, report_available());
+		test_cache_destroy();
+	}
+}
+
+/* Test init-on-free works. */
+static void test_init_on_free(struct kunit *test)
+{
+	const size_t size = 32;
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_UAF,
+		.fn = test_init_on_free,
+		.is_write = false,
+	};
+	int i;
+
+	if (!IS_ENABLED(CONFIG_INIT_ON_FREE_DEFAULT_ON))
+		return;
+	/* Assume it hasn't been disabled on command line. */
+
+	setup_test_cache(test, size, 0, NULL);
+	expect.addr = test_alloc(test, size, GFP_KERNEL, ALLOCATE_ANY);
+	for (i = 0; i < size; i++)
+		expect.addr[i] = i + 1;
+	test_free(expect.addr);
+
+	for (i = 0; i < size; i++) {
+		/*
+		 * This may fail if the page was recycled by KFENCE and then
+		 * written to again -- this however, is near impossible with a
+		 * default config.
+		 */
+		KUNIT_EXPECT_EQ(test, expect.addr[i], (char)0);
+
+		if (!i) /* Only check first access to not fail test if page is ever re-protected. */
+			KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+	}
+}
+
+/* Ensure that constructors work properly. */
+static void test_memcache_ctor(struct kunit *test)
+{
+	const size_t size = 32;
+	char *buf;
+	int i;
+
+	setup_test_cache(test, size, 0, ctor_set_x);
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_ANY);
+
+	for (i = 0; i < 8; i++)
+		KUNIT_EXPECT_EQ(test, buf[i], (char)'x');
+
+	test_free(buf);
+
+	KUNIT_EXPECT_FALSE(test, report_available());
+}
+
+/* Test that memory is zeroed if requested. */
+static void test_gfpzero(struct kunit *test)
+{
+	const size_t size = PAGE_SIZE; /* PAGE_SIZE so we can use ALLOCATE_ANY. */
+	char *buf1, *buf2;
+	int i;
+
+	if (CONFIG_KFENCE_SAMPLE_INTERVAL > 100) {
+		kunit_warn(test, "skipping ... would take too long\n");
+		return;
+	}
+
+	setup_test_cache(test, size, 0, NULL);
+	buf1 = test_alloc(test, size, GFP_KERNEL, ALLOCATE_ANY);
+	for (i = 0; i < size; i++)
+		buf1[i] = i + 1;
+	test_free(buf1);
+
+	/* Try to get same address again -- this can take a while. */
+	for (i = 0;; i++) {
+		buf2 = test_alloc(test, size, GFP_KERNEL | __GFP_ZERO, ALLOCATE_ANY);
+		if (buf1 == buf2)
+			break;
+		test_free(buf2);
+
+		if (i == CONFIG_KFENCE_NUM_OBJECTS) {
+			kunit_warn(test, "giving up ... cannot get same object back\n");
+			return;
+		}
+	}
+
+	for (i = 0; i < size; i++)
+		KUNIT_EXPECT_EQ(test, buf2[i], (char)0);
+
+	test_free(buf2);
+
+	KUNIT_EXPECT_FALSE(test, report_available());
+}
+
+static void test_invalid_access(struct kunit *test)
+{
+	const struct expect_report expect = {
+		.type = KFENCE_ERROR_INVALID,
+		.fn = test_invalid_access,
+		.addr = &__kfence_pool[10],
+		.is_write = false,
+	};
+
+	READ_ONCE(__kfence_pool[10]);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+}
+
+/* Test SLAB_TYPESAFE_BY_RCU works. */
+static void test_memcache_typesafe_by_rcu(struct kunit *test)
+{
+	const size_t size = 32;
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_UAF,
+		.fn = test_memcache_typesafe_by_rcu,
+		.is_write = false,
+	};
+
+	setup_test_cache(test, size, SLAB_TYPESAFE_BY_RCU, NULL);
+	KUNIT_EXPECT_TRUE(test, test_cache); /* Want memcache. */
+
+	expect.addr = test_alloc(test, size, GFP_KERNEL, ALLOCATE_ANY);
+	*expect.addr = 42;
+
+	rcu_read_lock();
+	test_free(expect.addr);
+	KUNIT_EXPECT_EQ(test, *expect.addr, (char)42);
+	/*
+	 * Up to this point, memory should not have been freed yet, and
+	 * therefore there should be no KFENCE report from the above access.
+	 */
+	rcu_read_unlock();
+
+	/* Above access to @expect.addr should not have generated a report! */
+	KUNIT_EXPECT_FALSE(test, report_available());
+
+	/* Only after rcu_barrier() is the memory guaranteed to be freed. */
+	rcu_barrier();
+
+	/* Expect use-after-free. */
+	KUNIT_EXPECT_EQ(test, *expect.addr, (char)42);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+}
+
+/* Test krealloc(). */
+static void test_krealloc(struct kunit *test)
+{
+	const size_t size = 32;
+	const struct expect_report expect = {
+		.type = KFENCE_ERROR_UAF,
+		.fn = test_krealloc,
+		.addr = test_alloc(test, size, GFP_KERNEL, ALLOCATE_ANY),
+		.is_write = false,
+	};
+	char *buf = expect.addr;
+	int i;
+
+	KUNIT_EXPECT_FALSE(test, test_cache);
+	KUNIT_EXPECT_EQ(test, ksize(buf), size); /* Precise size match after KFENCE alloc. */
+	for (i = 0; i < size; i++)
+		buf[i] = i + 1;
+
+	/* Check that we successfully change the size. */
+	buf = krealloc(buf, size * 3, GFP_KERNEL); /* Grow. */
+	/* Note: Might no longer be a KFENCE alloc. */
+	KUNIT_EXPECT_GE(test, ksize(buf), size * 3);
+	for (i = 0; i < size; i++)
+		KUNIT_EXPECT_EQ(test, buf[i], (char)(i + 1));
+	for (; i < size * 3; i++) /* Fill to extra bytes. */
+		buf[i] = i + 1;
+
+	buf = krealloc(buf, size * 2, GFP_KERNEL); /* Shrink. */
+	KUNIT_EXPECT_GE(test, ksize(buf), size * 2);
+	for (i = 0; i < size * 2; i++)
+		KUNIT_EXPECT_EQ(test, buf[i], (char)(i + 1));
+
+	buf = krealloc(buf, 0, GFP_KERNEL); /* Free. */
+	KUNIT_EXPECT_EQ(test, (unsigned long)buf, (unsigned long)ZERO_SIZE_PTR);
+	KUNIT_ASSERT_FALSE(test, report_available()); /* No reports yet! */
+
+	READ_ONCE(*expect.addr); /* Ensure krealloc() actually freed earlier KFENCE object. */
+	KUNIT_ASSERT_TRUE(test, report_matches(&expect));
+}
+
+/* Test that some objects from a bulk allocation belong to KFENCE pool. */
+static void test_memcache_alloc_bulk(struct kunit *test)
+{
+	const size_t size = 32;
+	bool pass = false;
+	unsigned long timeout;
+
+	setup_test_cache(test, size, 0, NULL);
+	KUNIT_EXPECT_TRUE(test, test_cache); /* Want memcache. */
+	/*
+	 * 100x the sample interval should be more than enough to ensure we get
+	 * a KFENCE allocation eventually.
+	 */
+	timeout = jiffies + msecs_to_jiffies(100 * CONFIG_KFENCE_SAMPLE_INTERVAL);
+	do {
+		void *objects[100];
+		int i, num = kmem_cache_alloc_bulk(test_cache, GFP_ATOMIC, ARRAY_SIZE(objects),
+						   objects);
+		if (!num)
+			continue;
+		for (i = 0; i < ARRAY_SIZE(objects); i++) {
+			if (is_kfence_address(objects[i])) {
+				pass = true;
+				break;
+			}
+		}
+		kmem_cache_free_bulk(test_cache, num, objects);
+		/*
+		 * kmem_cache_alloc_bulk() disables interrupts, and calling it
+		 * in a tight loop may not give KFENCE a chance to switch the
+		 * static branch. Call cond_resched() to let KFENCE chime in.
+		 */
+		cond_resched();
+	} while (!pass && time_before(jiffies, timeout));
+
+	KUNIT_EXPECT_TRUE(test, pass);
+	KUNIT_EXPECT_FALSE(test, report_available());
+}
+
+/*
+ * KUnit does not provide a way to provide arguments to tests, and we encode
+ * additional info in the name. Set up 2 tests per test case, one using the
+ * default allocator, and another using a custom memcache (suffix '-memcache').
+ */
+#define KFENCE_KUNIT_CASE(test_name)						\
+	{ .run_case = test_name, .name = #test_name },				\
+	{ .run_case = test_name, .name = #test_name "-memcache" }
+
+static struct kunit_case kfence_test_cases[] = {
+	KFENCE_KUNIT_CASE(test_out_of_bounds_read),
+	KFENCE_KUNIT_CASE(test_out_of_bounds_write),
+	KFENCE_KUNIT_CASE(test_use_after_free_read),
+	KFENCE_KUNIT_CASE(test_double_free),
+	KFENCE_KUNIT_CASE(test_invalid_addr_free),
+	KFENCE_KUNIT_CASE(test_corruption),
+	KFENCE_KUNIT_CASE(test_free_bulk),
+	KFENCE_KUNIT_CASE(test_init_on_free),
+	KUNIT_CASE(test_kmalloc_aligned_oob_read),
+	KUNIT_CASE(test_kmalloc_aligned_oob_write),
+	KUNIT_CASE(test_shrink_memcache),
+	KUNIT_CASE(test_memcache_ctor),
+	KUNIT_CASE(test_invalid_access),
+	KUNIT_CASE(test_gfpzero),
+	KUNIT_CASE(test_memcache_typesafe_by_rcu),
+	KUNIT_CASE(test_krealloc),
+	KUNIT_CASE(test_memcache_alloc_bulk),
+	{},
+};
+
+/* ===== End test cases ===== */
+
+static int test_init(struct kunit *test)
+{
+	unsigned long flags;
+	int i;
+
+	spin_lock_irqsave(&observed.lock, flags);
+	for (i = 0; i < ARRAY_SIZE(observed.lines); i++)
+		observed.lines[i][0] = '\0';
+	observed.nlines = 0;
+	spin_unlock_irqrestore(&observed.lock, flags);
+
+	/* Any test with 'memcache' in its name will want a memcache. */
+	if (strstr(test->name, "memcache"))
+		test->priv = TEST_PRIV_WANT_MEMCACHE;
+	else
+		test->priv = NULL;
+
+	return 0;
+}
+
+static void test_exit(struct kunit *test)
+{
+	test_cache_destroy();
+}
+
+static struct kunit_suite kfence_test_suite = {
+	.name = "kfence",
+	.test_cases = kfence_test_cases,
+	.init = test_init,
+	.exit = test_exit,
+};
+static struct kunit_suite *kfence_test_suites[] = { &kfence_test_suite, NULL };
+
+static void register_tracepoints(struct tracepoint *tp, void *ignore)
+{
+	check_trace_callback_type_console(probe_console);
+	if (!strcmp(tp->name, "console"))
+		WARN_ON(tracepoint_probe_register(tp, probe_console, NULL));
+}
+
+static void unregister_tracepoints(struct tracepoint *tp, void *ignore)
+{
+	if (!strcmp(tp->name, "console"))
+		tracepoint_probe_unregister(tp, probe_console, NULL);
+}
+
+/*
+ * We only want to do tracepoints setup and teardown once, therefore we have to
+ * customize the init and exit functions and cannot rely on kunit_test_suite().
+ */
+static int __init kfence_test_init(void)
+{
+	/*
+	 * Because we want to be able to build the test as a module, we need to
+	 * iterate through all known tracepoints, since the static registration
+	 * won't work here.
+	 */
+	for_each_kernel_tracepoint(register_tracepoints, NULL);
+	return __kunit_test_suites_init(kfence_test_suites);
+}
+
+static void kfence_test_exit(void)
+{
+	__kunit_test_suites_exit(kfence_test_suites);
+	for_each_kernel_tracepoint(unregister_tracepoints, NULL);
+	tracepoint_synchronize_unregister();
+}
+
+late_initcall(kfence_test_init);
+module_exit(kfence_test_exit);
+
+MODULE_LICENSE("GPL v2");
+MODULE_AUTHOR("Alexander Potapenko <glider@google.com>, Marco Elver <elver@google.com>");
diff --git a/mm/kfence/report.c b/mm/kfence/report.c
new file mode 100644
index 0000000..f9fc93b
--- /dev/null
+++ b/mm/kfence/report.c
@@ -0,0 +1,260 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * KFENCE reporting.
+ *
+ * Copyright (C) 2020, Google LLC.
+ */
+
+#include <stdarg.h>
+
+#include <linux/kernel.h>
+#include <linux/lockdep.h>
+#include <linux/printk.h>
+#include <linux/sched/debug.h>
+#include <linux/seq_file.h>
+#include <linux/stacktrace.h>
+#include <linux/string.h>
+#include <trace/events/error_report.h>
+
+#include <asm/kfence.h>
+
+#include "kfence.h"
+
+/* Helper function to either print to a seq_file or to console. */
+__printf(2, 3)
+static void seq_con_printf(struct seq_file *seq, const char *fmt, ...)
+{
+	va_list args;
+
+	va_start(args, fmt);
+	if (seq)
+		seq_vprintf(seq, fmt, args);
+	else
+		vprintk(fmt, args);
+	va_end(args);
+}
+
+/*
+ * Get the number of stack entries to skip to get out of MM internals. @type is
+ * optional, and if set to NULL, assumes an allocation or free stack.
+ */
+static int get_stack_skipnr(const unsigned long stack_entries[], int num_entries,
+			    const enum kfence_error_type *type)
+{
+	char buf[64];
+	int skipnr, fallback = 0;
+
+	if (type) {
+		/* Depending on error type, find different stack entries. */
+		switch (*type) {
+		case KFENCE_ERROR_UAF:
+		case KFENCE_ERROR_OOB:
+		case KFENCE_ERROR_INVALID:
+			/*
+			 * kfence_handle_page_fault() may be called with pt_regs
+			 * set to NULL; in that case we'll simply show the full
+			 * stack trace.
+			 */
+			return 0;
+		case KFENCE_ERROR_CORRUPTION:
+		case KFENCE_ERROR_INVALID_FREE:
+			break;
+		}
+	}
+
+	for (skipnr = 0; skipnr < num_entries; skipnr++) {
+		int len = scnprintf(buf, sizeof(buf), "%ps", (void *)stack_entries[skipnr]);
+
+		if (str_has_prefix(buf, "kfence_") || str_has_prefix(buf, "__kfence_") ||
+		    !strncmp(buf, "__slab_free", len)) {
+			/*
+			 * In case of tail calls from any of the below
+			 * to any of the above.
+			 */
+			fallback = skipnr + 1;
+		}
+
+		/* Also the *_bulk() variants by only checking prefixes. */
+		if (str_has_prefix(buf, "kfree") ||
+		    str_has_prefix(buf, "kmem_cache_free") ||
+		    str_has_prefix(buf, "__kmalloc") ||
+		    str_has_prefix(buf, "kmem_cache_alloc"))
+			goto found;
+	}
+	if (fallback < num_entries)
+		return fallback;
+found:
+	skipnr++;
+	return skipnr < num_entries ? skipnr : 0;
+}
+
+static void kfence_print_stack(struct seq_file *seq, const struct kfence_metadata *meta,
+			       bool show_alloc)
+{
+	const struct kfence_track *track = show_alloc ? &meta->alloc_track : &meta->free_track;
+
+	if (track->num_stack_entries) {
+		/* Skip allocation/free internals stack. */
+		int i = get_stack_skipnr(track->stack_entries, track->num_stack_entries, NULL);
+
+		/* stack_trace_seq_print() does not exist; open code our own. */
+		for (; i < track->num_stack_entries; i++)
+			seq_con_printf(seq, " %pS\n", (void *)track->stack_entries[i]);
+	} else {
+		seq_con_printf(seq, " no %s stack\n", show_alloc ? "allocation" : "deallocation");
+	}
+}
+
+void kfence_print_object(struct seq_file *seq, const struct kfence_metadata *meta)
+{
+	const int size = abs(meta->size);
+	const unsigned long start = meta->addr;
+	const struct kmem_cache *const cache = meta->cache;
+
+	lockdep_assert_held(&meta->lock);
+
+	if (meta->state == KFENCE_OBJECT_UNUSED) {
+		seq_con_printf(seq, "kfence-#%zd unused\n", meta - kfence_metadata);
+		return;
+	}
+
+	seq_con_printf(seq,
+		       "kfence-#%zd [0x" PTR_FMT "-0x" PTR_FMT
+		       ", size=%d, cache=%s] allocated by task %d:\n",
+		       meta - kfence_metadata, (void *)start, (void *)(start + size - 1), size,
+		       (cache && cache->name) ? cache->name : "<destroyed>", meta->alloc_track.pid);
+	kfence_print_stack(seq, meta, true);
+
+	if (meta->state == KFENCE_OBJECT_FREED) {
+		seq_con_printf(seq, "\nfreed by task %d:\n", meta->free_track.pid);
+		kfence_print_stack(seq, meta, false);
+	}
+}
+
+/*
+ * Show bytes at @addr that are different from the expected canary values, up to
+ * @max_bytes.
+ */
+static void print_diff_canary(unsigned long address, size_t bytes_to_show,
+			      const struct kfence_metadata *meta)
+{
+	const unsigned long show_until_addr = address + bytes_to_show;
+	const u8 *cur, *end;
+
+	/* Do not show contents of object nor read into following guard page. */
+	end = (const u8 *)(address < meta->addr ? min(show_until_addr, meta->addr)
+						: min(show_until_addr, PAGE_ALIGN(address)));
+
+	pr_cont("[");
+	for (cur = (const u8 *)address; cur < end; cur++) {
+		if (*cur == KFENCE_CANARY_PATTERN(cur))
+			pr_cont(" .");
+		else if (IS_ENABLED(CONFIG_DEBUG_KERNEL))
+			pr_cont(" 0x%02x", *cur);
+		else /* Do not leak kernel memory in non-debug builds. */
+			pr_cont(" !");
+	}
+	pr_cont(" ]");
+}
+
+static const char *get_access_type(bool is_write)
+{
+	return is_write ? "write" : "read";
+}
+
+void kfence_report_error(unsigned long address, bool is_write, struct pt_regs *regs,
+			 const struct kfence_metadata *meta, enum kfence_error_type type)
+{
+	unsigned long stack_entries[KFENCE_STACK_DEPTH] = { 0 };
+	const ptrdiff_t object_index = meta ? meta - kfence_metadata : -1;
+	int num_stack_entries;
+	int skipnr = 0;
+
+	if (regs) {
+		num_stack_entries = stack_trace_save_regs(regs, stack_entries, KFENCE_STACK_DEPTH, 0);
+	} else {
+		num_stack_entries = stack_trace_save(stack_entries, KFENCE_STACK_DEPTH, 1);
+		skipnr = get_stack_skipnr(stack_entries, num_stack_entries, &type);
+	}
+
+	/* Require non-NULL meta, except if KFENCE_ERROR_INVALID. */
+	if (WARN_ON(type != KFENCE_ERROR_INVALID && !meta))
+		return;
+
+	if (meta)
+		lockdep_assert_held(&meta->lock);
+	/*
+	 * Because we may generate reports in printk-unfriendly parts of the
+	 * kernel, such as scheduler code, the use of printk() could deadlock.
+	 * Until such time that all printing code here is safe in all parts of
+	 * the kernel, accept the risk, and just get our message out (given the
+	 * system might already behave unpredictably due to the memory error).
+	 * As such, also disable lockdep to hide warnings, and avoid disabling
+	 * lockdep for the rest of the kernel.
+	 */
+	lockdep_off();
+
+	pr_err("==================================================================\n");
+	/* Print report header. */
+	switch (type) {
+	case KFENCE_ERROR_OOB: {
+		const bool left_of_object = address < meta->addr;
+
+		pr_err("BUG: KFENCE: out-of-bounds %s in %pS\n\n", get_access_type(is_write),
+		       (void *)stack_entries[skipnr]);
+		pr_err("Out-of-bounds %s at 0x" PTR_FMT " (%luB %s of kfence-#%zd):\n",
+		       get_access_type(is_write), (void *)address,
+		       left_of_object ? meta->addr - address : address - meta->addr,
+		       left_of_object ? "left" : "right", object_index);
+		break;
+	}
+	case KFENCE_ERROR_UAF:
+		pr_err("BUG: KFENCE: use-after-free %s in %pS\n\n", get_access_type(is_write),
+		       (void *)stack_entries[skipnr]);
+		pr_err("Use-after-free %s at 0x" PTR_FMT " (in kfence-#%zd):\n",
+		       get_access_type(is_write), (void *)address, object_index);
+		break;
+	case KFENCE_ERROR_CORRUPTION:
+		pr_err("BUG: KFENCE: memory corruption in %pS\n\n", (void *)stack_entries[skipnr]);
+		pr_err("Corrupted memory at 0x" PTR_FMT " ", (void *)address);
+		print_diff_canary(address, 16, meta);
+		pr_cont(" (in kfence-#%zd):\n", object_index);
+		break;
+	case KFENCE_ERROR_INVALID:
+		pr_err("BUG: KFENCE: invalid %s in %pS\n\n", get_access_type(is_write),
+		       (void *)stack_entries[skipnr]);
+		pr_err("Invalid %s at 0x" PTR_FMT ":\n", get_access_type(is_write),
+		       (void *)address);
+		break;
+	case KFENCE_ERROR_INVALID_FREE:
+		pr_err("BUG: KFENCE: invalid free in %pS\n\n", (void *)stack_entries[skipnr]);
+		pr_err("Invalid free of 0x" PTR_FMT " (in kfence-#%zd):\n", (void *)address,
+		       object_index);
+		break;
+	}
+
+	/* Print stack trace and object info. */
+	stack_trace_print(stack_entries + skipnr, num_stack_entries - skipnr, 0);
+
+	if (meta) {
+		pr_err("\n");
+		kfence_print_object(NULL, meta);
+	}
+
+	/* Print report footer. */
+	pr_err("\n");
+	if (IS_ENABLED(CONFIG_DEBUG_KERNEL) && regs)
+		show_regs(regs);
+	else
+		dump_stack_print_info(KERN_ERR);
+	trace_error_report_end(ERROR_DETECTOR_KFENCE, address);
+	pr_err("==================================================================\n");
+
+	lockdep_on();
+
+	if (panic_on_warn)
+		panic("panic_on_warn set ...\n");
+
+	/* We encountered a memory unsafety error, taint the kernel! */
+	add_taint(TAINT_BAD_PAGE, LOCKDEP_STILL_OK);
+}
diff --git a/mm/ksm.c b/mm/ksm.c
index e486c54..1e700c6 100644
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -2659,31 +2659,6 @@ void rmap_walk_ksm(struct page *page, struct rmap_walk_control *rwc)
 		goto again;
 }
 
-bool reuse_ksm_page(struct page *page,
-		    struct vm_area_struct *vma,
-		    unsigned long address)
-{
-#ifdef CONFIG_DEBUG_VM
-	if (WARN_ON(is_zero_pfn(page_to_pfn(page))) ||
-			WARN_ON(!page_mapped(page)) ||
-			WARN_ON(!PageLocked(page))) {
-		dump_page(page, "reuse_ksm_page");
-		return false;
-	}
-#endif
-
-	if (PageSwapCache(page) || !page_stable_node(page))
-		return false;
-	/* Prohibit parallel get_ksm_page() */
-	if (!page_ref_freeze(page, 1))
-		return false;
-
-	page_move_anon_rmap(page, vma);
-	page->index = linear_page_index(vma, address);
-	page_ref_unfreeze(page, 1);
-
-	return true;
-}
 #ifdef CONFIG_MIGRATION
 void ksm_migrate_page(struct page *newpage, struct page *oldpage)
 {
diff --git a/mm/madvise.c b/mm/madvise.c
index 1107e99..2175cf0 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -17,6 +17,7 @@
 #include <linux/falloc.h>
 #include <linux/fadvise.h>
 #include <linux/sched.h>
+#include <linux/sched/mm.h>
 #include <linux/ksm.h>
 #include <linux/fs.h>
 #include <linux/file.h>
@@ -27,7 +28,7 @@
 #include <linux/swapops.h>
 #include <linux/shmem_fs.h>
 #include <linux/mmu_notifier.h>
-
+#include <linux/uio.h>
 #include <asm/tlb.h>
 
 #include "internal.h"
@@ -134,7 +135,7 @@ static long madvise_behavior(struct vm_area_struct *vma,
 	pgoff = vma->vm_pgoff + ((start - vma->vm_start) >> PAGE_SHIFT);
 	*prev = vma_merge(mm, *prev, start, end, new_flags, vma->anon_vma,
 			  vma->vm_file, pgoff, vma_policy(vma),
-			  vma->vm_userfaultfd_ctx);
+			  vma->vm_userfaultfd_ctx, vma_get_anon_name(vma));
 	if (*prev) {
 		vma = *prev;
 		goto success;
@@ -254,6 +255,7 @@ static long madvise_willneed(struct vm_area_struct *vma,
 			     struct vm_area_struct **prev,
 			     unsigned long start, unsigned long end)
 {
+	struct mm_struct *mm = vma->vm_mm;
 	struct file *file = vma->vm_file;
 	loff_t offset;
 
@@ -290,10 +292,10 @@ static long madvise_willneed(struct vm_area_struct *vma,
 	get_file(file);
 	offset = (loff_t)(start - vma->vm_start)
 			+ ((loff_t)vma->vm_pgoff << PAGE_SHIFT);
-	up_read(&current->mm->mmap_sem);
+	up_read(&mm->mmap_sem);
 	vfs_fadvise(file, offset, end - start, POSIX_FADV_WILLNEED);
 	fput(file);
-	down_read(&current->mm->mmap_sem);
+	down_read(&mm->mmap_sem);
 	return 0;
 }
 
@@ -762,6 +764,8 @@ static long madvise_dontneed_free(struct vm_area_struct *vma,
 				  unsigned long start, unsigned long end,
 				  int behavior)
 {
+	struct mm_struct *mm = vma->vm_mm;
+
 	*prev = vma;
 	if (!can_madv_lru_vma(vma))
 		return -EINVAL;
@@ -769,8 +773,8 @@ static long madvise_dontneed_free(struct vm_area_struct *vma,
 	if (!userfaultfd_remove(vma, start, end)) {
 		*prev = NULL; /* mmap_sem has been dropped, prev is stale */
 
-		down_read(&current->mm->mmap_sem);
-		vma = find_vma(current->mm, start);
+		down_read(&mm->mmap_sem);
+		vma = find_vma(mm, start);
 		if (!vma)
 			return -ENOMEM;
 		if (start < vma->vm_start) {
@@ -824,6 +828,7 @@ static long madvise_remove(struct vm_area_struct *vma,
 	loff_t offset;
 	int error;
 	struct file *f;
+	struct mm_struct *mm = vma->vm_mm;
 
 	*prev = NULL;	/* tell sys_madvise we drop mmap_sem */
 
@@ -851,13 +856,13 @@ static long madvise_remove(struct vm_area_struct *vma,
 	get_file(f);
 	if (userfaultfd_remove(vma, start, end)) {
 		/* mmap_sem was not released by userfaultfd_remove() */
-		up_read(&current->mm->mmap_sem);
+		up_read(&mm->mmap_sem);
 	}
 	error = vfs_fallocate(f,
 				FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
 				offset, end - start);
 	fput(f);
-	down_read(&current->mm->mmap_sem);
+	down_read(&mm->mmap_sem);
 	return error;
 }
 
@@ -989,6 +994,18 @@ madvise_behavior_valid(int behavior)
 	}
 }
 
+static bool
+process_madvise_behavior_valid(int behavior)
+{
+	switch (behavior) {
+	case MADV_COLD:
+	case MADV_PAGEOUT:
+		return true;
+	default:
+		return false;
+	}
+}
+
 /*
  * The madvise(2) system call.
  *
@@ -1036,6 +1053,11 @@ madvise_behavior_valid(int behavior)
  *  MADV_DONTDUMP - the application wants to prevent pages in the given range
  *		from being included in its core dump.
  *  MADV_DODUMP - cancel MADV_DONTDUMP: no longer exclude from core dump.
+ *  MADV_COLD - the application is not expected to use this memory soon,
+ *		deactivate pages in this range so that they can be reclaimed
+ *		easily if memory pressure hanppens.
+ *  MADV_PAGEOUT - the application is not expected to use this memory soon,
+ *		page out the pages in this range immediately.
  *
  * return values:
  *  zero    - success
@@ -1050,7 +1072,7 @@ madvise_behavior_valid(int behavior)
  *  -EBADF  - map exists, but area maps something that isn't a file.
  *  -EAGAIN - a kernel resource was temporarily unavailable.
  */
-SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior)
+int do_madvise(struct mm_struct *mm, unsigned long start, size_t len_in, int behavior)
 {
 	unsigned long end, tmp;
 	struct vm_area_struct *vma, *prev;
@@ -1088,10 +1110,27 @@ SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior)
 
 	write = madvise_need_mmap_write(behavior);
 	if (write) {
-		if (down_write_killable(&current->mm->mmap_sem))
+		if (down_write_killable(&mm->mmap_sem))
 			return -EINTR;
+
+		/*
+		 * We may have stolen the mm from another process
+		 * that is undergoing core dumping.
+		 *
+		 * Right now that's io_ring, in the future it may
+		 * be remote process management and not "current"
+		 * at all.
+		 *
+		 * We need to fix core dumping to not do this,
+		 * but for now we have the mmget_still_valid()
+		 * model.
+		 */
+		if (!mmget_still_valid(mm)) {
+			up_write(&mm->mmap_sem);
+			return -EINTR;
+		}
 	} else {
-		down_read(&current->mm->mmap_sem);
+		down_read(&mm->mmap_sem);
 	}
 
 	/*
@@ -1099,7 +1138,7 @@ SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior)
 	 * ranges, just ignore them, but return -ENOMEM at the end.
 	 * - different from the way of handling in mlock etc.
 	 */
-	vma = find_vma_prev(current->mm, start, &prev);
+	vma = find_vma_prev(mm, start, &prev);
 	if (vma && start > vma->vm_start)
 		prev = vma;
 
@@ -1136,14 +1175,101 @@ SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior)
 		if (prev)
 			vma = prev->vm_next;
 		else	/* madvise_remove dropped mmap_sem */
-			vma = find_vma(current->mm, start);
+			vma = find_vma(mm, start);
 	}
 out:
 	blk_finish_plug(&plug);
 	if (write)
-		up_write(&current->mm->mmap_sem);
+		up_write(&mm->mmap_sem);
 	else
-		up_read(&current->mm->mmap_sem);
+		up_read(&mm->mmap_sem);
 
 	return error;
 }
+
+SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior)
+{
+	return do_madvise(current->mm, start, len_in, behavior);
+}
+
+SYSCALL_DEFINE5(process_madvise, int, pidfd, const struct iovec __user *, vec,
+		size_t, vlen, int, behavior, unsigned int, flags)
+{
+	ssize_t ret;
+	struct iovec iovstack[UIO_FASTIOV], iovec;
+	struct iovec *iov = iovstack;
+	struct iov_iter iter;
+	struct pid *pid;
+	struct task_struct *task;
+	struct mm_struct *mm;
+	size_t total_len;
+	unsigned int f_flags;
+
+	if (flags != 0) {
+		ret = -EINVAL;
+		goto out;
+	}
+
+	ret = import_iovec(READ, vec, vlen, ARRAY_SIZE(iovstack), &iov, &iter);
+	if (ret < 0)
+		goto out;
+
+	pid = pidfd_get_pid(pidfd, &f_flags);
+	if (IS_ERR(pid)) {
+		ret = PTR_ERR(pid);
+		goto free_iov;
+	}
+
+	task = get_pid_task(pid, PIDTYPE_PID);
+	if (!task) {
+		ret = -ESRCH;
+		goto put_pid;
+	}
+
+	if (!process_madvise_behavior_valid(behavior)) {
+		ret = -EINVAL;
+		goto release_task;
+	}
+
+	/* Require PTRACE_MODE_READ to avoid leaking ASLR metadata. */
+	mm = mm_access(task, PTRACE_MODE_READ_FSCREDS);
+	if (IS_ERR_OR_NULL(mm)) {
+		ret = IS_ERR(mm) ? PTR_ERR(mm) : -ESRCH;
+		goto release_task;
+	}
+
+	/*
+	 * Require CAP_SYS_NICE for influencing process performance. Note that
+	 * only non-destructive hints are currently supported.
+	 */
+	if (!capable(CAP_SYS_NICE)) {
+		ret = -EPERM;
+		goto release_mm;
+	}
+
+	total_len = iov_iter_count(&iter);
+
+	while (iov_iter_count(&iter)) {
+		iovec = iov_iter_iovec(&iter);
+		ret = do_madvise(mm, (unsigned long)iovec.iov_base,
+				 iovec.iov_len, behavior);
+		if (ret < 0)
+			break;
+		iov_iter_advance(&iter, iovec.iov_len);
+	}
+
+	if (ret == 0)
+		ret = total_len - iov_iter_count(&iter);
+
+release_mm:
+	mmput(mm);
+
+release_task:
+	put_task_struct(task);
+put_pid:
+	put_pid(pid);
+free_iov:
+	kfree(iov);
+out:
+	return ret;
+}
\ No newline at end of file
diff --git a/mm/memblock.c b/mm/memblock.c
index 11f6ae3..4de2af2 100644
--- a/mm/memblock.c
+++ b/mm/memblock.c
@@ -786,6 +786,9 @@ int __init_memblock memblock_free(phys_addr_t base, phys_addr_t size)
 	kmemleak_free_part_phys(base, size);
 	return memblock_remove_range(&memblock.reserved, base, size);
 }
+#ifdef CONFIG_ARCH_KEEP_MEMBLOCK
+EXPORT_SYMBOL_GPL(memblock_free);
+#endif
 
 int __init_memblock memblock_reserve(phys_addr_t base, phys_addr_t size)
 {
@@ -1586,6 +1589,7 @@ phys_addr_t __init_memblock memblock_end_of_DRAM(void)
 
 	return (memblock.memory.regions[idx].base + memblock.memory.regions[idx].size);
 }
+EXPORT_SYMBOL_GPL(memblock_end_of_DRAM);
 
 static phys_addr_t __init_memblock __find_max_addr(phys_addr_t limit)
 {
diff --git a/mm/memory.c b/mm/memory.c
index b238311..9df8989 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -72,6 +72,8 @@
 #include <linux/oom.h>
 #include <linux/numa.h>
 
+#include <trace/events/kmem.h>
+
 #include <asm/io.h>
 #include <asm/mmu_context.h>
 #include <asm/pgalloc.h>
@@ -152,6 +154,23 @@ static int __init init_zero_pfn(void)
 }
 core_initcall(init_zero_pfn);
 
+/*
+ * Only trace rss_stat when there is a 512kb cross over.
+ * Smaller changes may be lost unless every small change is
+ * crossing into or returning to a 512kb boundary.
+ */
+#define TRACE_MM_COUNTER_THRESHOLD 128
+
+void mm_trace_rss_stat(struct mm_struct *mm, int member, long count,
+		       long value)
+{
+	long thresh_mask = ~(TRACE_MM_COUNTER_THRESHOLD - 1);
+
+	/* Threshold roll-over, trace it */
+	if ((count & thresh_mask) != ((count - value) & thresh_mask))
+		trace_rss_stat(mm, member, count);
+}
+EXPORT_SYMBOL_GPL(mm_trace_rss_stat);
 
 #if defined(SPLIT_RSS_COUNTING)
 
@@ -2680,49 +2699,25 @@ static vm_fault_t do_wp_page(struct vm_fault *vmf)
 	 * not dirty accountable.
 	 */
 	if (PageAnon(vmf->page)) {
-		int total_map_swapcount;
-		if (PageKsm(vmf->page) && (PageSwapCache(vmf->page) ||
-					   page_count(vmf->page) != 1))
+		struct page *page = vmf->page;
+
+		/* PageKsm() doesn't necessarily raise the page refcount */
+		if (PageKsm(page) || page_count(page) != 1)
 			goto copy;
-		if (!trylock_page(vmf->page)) {
-			get_page(vmf->page);
-			pte_unmap_unlock(vmf->pte, vmf->ptl);
-			lock_page(vmf->page);
-			vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd,
-					vmf->address, &vmf->ptl);
-			if (!pte_same(*vmf->pte, vmf->orig_pte)) {
-				unlock_page(vmf->page);
-				pte_unmap_unlock(vmf->pte, vmf->ptl);
-				put_page(vmf->page);
-				return 0;
-			}
-			put_page(vmf->page);
+		if (!trylock_page(page))
+			goto copy;
+		if (PageKsm(page) || page_mapcount(page) != 1 || page_count(page) != 1) {
+			unlock_page(page);
+			goto copy;
 		}
-		if (PageKsm(vmf->page)) {
-			bool reused = reuse_ksm_page(vmf->page, vmf->vma,
-						     vmf->address);
-			unlock_page(vmf->page);
-			if (!reused)
-				goto copy;
-			wp_page_reuse(vmf);
-			return VM_FAULT_WRITE;
-		}
-		if (reuse_swap_page(vmf->page, &total_map_swapcount)) {
-			if (total_map_swapcount == 1) {
-				/*
-				 * The page is all ours. Move it to
-				 * our anon_vma so the rmap code will
-				 * not search our parent or siblings.
-				 * Protected against the rmap code by
-				 * the page lock.
-				 */
-				page_move_anon_rmap(vmf->page, vma);
-			}
-			unlock_page(vmf->page);
-			wp_page_reuse(vmf);
-			return VM_FAULT_WRITE;
-		}
-		unlock_page(vmf->page);
+		/*
+		 * Ok, we've got the only map reference, and the only
+		 * page count reference, and the page is locked,
+		 * it's dark out, and we're wearing sunglasses. Hit it.
+		 */
+		unlock_page(page);
+		wp_page_reuse(vmf);
+		return VM_FAULT_WRITE;
 	} else if (unlikely((vma->vm_flags & (VM_WRITE|VM_SHARED)) ==
 					(VM_WRITE|VM_SHARED))) {
 		return wp_page_shared(vmf);
@@ -3300,13 +3295,14 @@ static vm_fault_t do_set_pmd(struct vm_fault *vmf, struct page *page)
 	unsigned long haddr = vmf->address & HPAGE_PMD_MASK;
 	pmd_t entry;
 	int i;
-	vm_fault_t ret;
+	vm_fault_t ret = VM_FAULT_FALLBACK;
 
 	if (!transhuge_vma_suitable(vma, haddr))
-		return VM_FAULT_FALLBACK;
+		return ret;
 
-	ret = VM_FAULT_FALLBACK;
-	page = compound_head(page);
+        page = compound_head(page);
+        if (compound_order(page) != HPAGE_PMD_ORDER)
+                return ret;
 
 	/*
 	 * Archs like ppc64 need additonal space to store information
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index 87d1659..61d665c 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -759,7 +759,8 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
 			((vmstart - vma->vm_start) >> PAGE_SHIFT);
 		prev = vma_merge(mm, prev, vmstart, vmend, vma->vm_flags,
 				 vma->anon_vma, vma->vm_file, pgoff,
-				 new_pol, vma->vm_userfaultfd_ctx);
+				 new_pol, vma->vm_userfaultfd_ctx,
+				 vma_get_anon_name(vma));
 		if (prev) {
 			vma = prev;
 			next = vma->vm_next;
@@ -853,12 +854,12 @@ static void get_policy_nodemask(struct mempolicy *p, nodemask_t *nodes)
 
 static int lookup_node(struct mm_struct *mm, unsigned long addr)
 {
-	struct page *p;
+	struct page *p = NULL;
 	int err;
 
 	int locked = 1;
 	err = get_user_pages_locked(addr & PAGE_MASK, 1, 0, &p, &locked);
-	if (err >= 0) {
+	if (err > 0) {
 		err = page_to_nid(p);
 		put_page(p);
 	}
diff --git a/mm/mlock.c b/mm/mlock.c
index a72c1ee..646acba 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -535,7 +535,7 @@ static int mlock_fixup(struct vm_area_struct *vma, struct vm_area_struct **prev,
 	pgoff = vma->vm_pgoff + ((start - vma->vm_start) >> PAGE_SHIFT);
 	*prev = vma_merge(mm, *prev, start, end, newflags, vma->anon_vma,
 			  vma->vm_file, pgoff, vma_policy(vma),
-			  vma->vm_userfaultfd_ctx);
+			  vma->vm_userfaultfd_ctx, vma_get_anon_name(vma));
 	if (*prev) {
 		vma = *prev;
 		goto success;
diff --git a/mm/mmap.c b/mm/mmap.c
index ba78f1f..c623091 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -1009,7 +1009,8 @@ int __vma_adjust(struct vm_area_struct *vma, unsigned long start,
  */
 static inline int is_mergeable_vma(struct vm_area_struct *vma,
 				struct file *file, unsigned long vm_flags,
-				struct vm_userfaultfd_ctx vm_userfaultfd_ctx)
+				struct vm_userfaultfd_ctx vm_userfaultfd_ctx,
+				const char __user *anon_name)
 {
 	/*
 	 * VM_SOFTDIRTY should not prevent from VMA merging, if we
@@ -1027,6 +1028,8 @@ static inline int is_mergeable_vma(struct vm_area_struct *vma,
 		return 0;
 	if (!is_mergeable_vm_userfaultfd_ctx(vma, vm_userfaultfd_ctx))
 		return 0;
+	if (vma_get_anon_name(vma) != anon_name)
+		return 0;
 	return 1;
 }
 
@@ -1059,9 +1062,10 @@ static int
 can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags,
 		     struct anon_vma *anon_vma, struct file *file,
 		     pgoff_t vm_pgoff,
-		     struct vm_userfaultfd_ctx vm_userfaultfd_ctx)
+		     struct vm_userfaultfd_ctx vm_userfaultfd_ctx,
+		     const char __user *anon_name)
 {
-	if (is_mergeable_vma(vma, file, vm_flags, vm_userfaultfd_ctx) &&
+	if (is_mergeable_vma(vma, file, vm_flags, vm_userfaultfd_ctx, anon_name) &&
 	    is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) {
 		if (vma->vm_pgoff == vm_pgoff)
 			return 1;
@@ -1080,9 +1084,10 @@ static int
 can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags,
 		    struct anon_vma *anon_vma, struct file *file,
 		    pgoff_t vm_pgoff,
-		    struct vm_userfaultfd_ctx vm_userfaultfd_ctx)
+		    struct vm_userfaultfd_ctx vm_userfaultfd_ctx,
+		    const char __user *anon_name)
 {
-	if (is_mergeable_vma(vma, file, vm_flags, vm_userfaultfd_ctx) &&
+	if (is_mergeable_vma(vma, file, vm_flags, vm_userfaultfd_ctx, anon_name) &&
 	    is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) {
 		pgoff_t vm_pglen;
 		vm_pglen = vma_pages(vma);
@@ -1093,9 +1098,9 @@ can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags,
 }
 
 /*
- * Given a mapping request (addr,end,vm_flags,file,pgoff), figure out
- * whether that can be merged with its predecessor or its successor.
- * Or both (it neatly fills a hole).
+ * Given a mapping request (addr,end,vm_flags,file,pgoff,anon_name),
+ * figure out whether that can be merged with its predecessor or its
+ * successor.  Or both (it neatly fills a hole).
  *
  * In most cases - when called for mmap, brk or mremap - [addr,end) is
  * certain not to be mapped by the time vma_merge is called; but when
@@ -1137,7 +1142,8 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
 			unsigned long end, unsigned long vm_flags,
 			struct anon_vma *anon_vma, struct file *file,
 			pgoff_t pgoff, struct mempolicy *policy,
-			struct vm_userfaultfd_ctx vm_userfaultfd_ctx)
+			struct vm_userfaultfd_ctx vm_userfaultfd_ctx,
+			const char __user *anon_name)
 {
 	pgoff_t pglen = (end - addr) >> PAGE_SHIFT;
 	struct vm_area_struct *area, *next;
@@ -1170,7 +1176,8 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
 			mpol_equal(vma_policy(prev), policy) &&
 			can_vma_merge_after(prev, vm_flags,
 					    anon_vma, file, pgoff,
-					    vm_userfaultfd_ctx)) {
+					    vm_userfaultfd_ctx,
+					    anon_name)) {
 		/*
 		 * OK, it can.  Can we now merge in the successor as well?
 		 */
@@ -1179,7 +1186,8 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
 				can_vma_merge_before(next, vm_flags,
 						     anon_vma, file,
 						     pgoff+pglen,
-						     vm_userfaultfd_ctx) &&
+						     vm_userfaultfd_ctx,
+						     anon_name) &&
 				is_mergeable_anon_vma(prev->anon_vma,
 						      next->anon_vma, NULL)) {
 							/* cases 1, 6 */
@@ -1202,7 +1210,8 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
 			mpol_equal(policy, vma_policy(next)) &&
 			can_vma_merge_before(next, vm_flags,
 					     anon_vma, file, pgoff+pglen,
-					     vm_userfaultfd_ctx)) {
+					     vm_userfaultfd_ctx,
+					     anon_name)) {
 		if (prev && addr < prev->vm_end)	/* case 4 */
 			err = __vma_adjust(prev, prev->vm_start,
 					 addr, prev->vm_pgoff, NULL, next);
@@ -1754,7 +1763,7 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
 	 * Can we just expand an old mapping?
 	 */
 	vma = vma_merge(mm, prev, addr, addr + len, vm_flags,
-			NULL, file, pgoff, NULL, NULL_VM_UFFD_CTX);
+			NULL, file, pgoff, NULL, NULL_VM_UFFD_CTX, NULL);
 	if (vma)
 		goto out;
 
@@ -3045,7 +3054,7 @@ static int do_brk_flags(unsigned long addr, unsigned long len, unsigned long fla
 
 	/* Can we just expand an old private anonymous mapping? */
 	vma = vma_merge(mm, prev, addr, addr + len, flags,
-			NULL, NULL, pgoff, NULL, NULL_VM_UFFD_CTX);
+			NULL, NULL, pgoff, NULL, NULL_VM_UFFD_CTX, NULL);
 	if (vma)
 		goto out;
 
@@ -3244,7 +3253,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
 		return NULL;	/* should never get here */
 	new_vma = vma_merge(mm, prev, addr, addr + len, vma->vm_flags,
 			    vma->anon_vma, vma->vm_file, pgoff, vma_policy(vma),
-			    vma->vm_userfaultfd_ctx);
+			    vma->vm_userfaultfd_ctx, vma_get_anon_name(vma));
 	if (new_vma) {
 		/*
 		 * Source vma may have been merged into new_vma
@@ -3350,10 +3359,14 @@ static const char *special_mapping_name(struct vm_area_struct *vma)
 	return ((struct vm_special_mapping *)vma->vm_private_data)->name;
 }
 
-static int special_mapping_mremap(struct vm_area_struct *new_vma)
+static int special_mapping_mremap(struct vm_area_struct *new_vma,
+				  unsigned long flags)
 {
 	struct vm_special_mapping *sm = new_vma->vm_private_data;
 
+	if (flags & MREMAP_DONTUNMAP)
+		return -EINVAL;
+
 	if (WARN_ON_ONCE(current->mm != new_vma->vm_mm))
 		return -EFAULT;
 
diff --git a/mm/mprotect.c b/mm/mprotect.c
index 95dee88..65d3170 100644
--- a/mm/mprotect.c
+++ b/mm/mprotect.c
@@ -428,7 +428,7 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
 	pgoff = vma->vm_pgoff + ((start - vma->vm_start) >> PAGE_SHIFT);
 	*pprev = vma_merge(mm, *pprev, start, end, newflags,
 			   vma->anon_vma, vma->vm_file, pgoff, vma_policy(vma),
-			   vma->vm_userfaultfd_ctx);
+			   vma->vm_userfaultfd_ctx, vma_get_anon_name(vma));
 	if (*pprev) {
 		vma = *pprev;
 		VM_WARN_ON((vma->vm_flags ^ newflags) & ~VM_SOFTDIRTY);
diff --git a/mm/mremap.c b/mm/mremap.c
index 8005d0b..a469de1 100644
--- a/mm/mremap.c
+++ b/mm/mremap.c
@@ -30,12 +30,11 @@
 
 #include "internal.h"
 
-static pmd_t *get_old_pmd(struct mm_struct *mm, unsigned long addr)
+static pud_t *get_old_pud(struct mm_struct *mm, unsigned long addr)
 {
 	pgd_t *pgd;
 	p4d_t *p4d;
 	pud_t *pud;
-	pmd_t *pmd;
 
 	pgd = pgd_offset(mm, addr);
 	if (pgd_none_or_clear_bad(pgd))
@@ -49,6 +48,18 @@ static pmd_t *get_old_pmd(struct mm_struct *mm, unsigned long addr)
 	if (pud_none_or_clear_bad(pud))
 		return NULL;
 
+	return pud;
+}
+
+static pmd_t *get_old_pmd(struct mm_struct *mm, unsigned long addr)
+{
+	pud_t *pud;
+	pmd_t *pmd;
+
+	pud = get_old_pud(mm, addr);
+	if (!pud)
+		return NULL;
+
 	pmd = pmd_offset(pud, addr);
 	if (pmd_none(*pmd))
 		return NULL;
@@ -56,19 +67,27 @@ static pmd_t *get_old_pmd(struct mm_struct *mm, unsigned long addr)
 	return pmd;
 }
 
-static pmd_t *alloc_new_pmd(struct mm_struct *mm, struct vm_area_struct *vma,
+static pud_t *alloc_new_pud(struct mm_struct *mm, struct vm_area_struct *vma,
 			    unsigned long addr)
 {
 	pgd_t *pgd;
 	p4d_t *p4d;
-	pud_t *pud;
-	pmd_t *pmd;
 
 	pgd = pgd_offset(mm, addr);
 	p4d = p4d_alloc(mm, pgd, addr);
 	if (!p4d)
 		return NULL;
-	pud = pud_alloc(mm, p4d, addr);
+
+	return pud_alloc(mm, p4d, addr);
+}
+
+static pmd_t *alloc_new_pmd(struct mm_struct *mm, struct vm_area_struct *vma,
+			    unsigned long addr)
+{
+	pud_t *pud;
+	pmd_t *pmd;
+
+	pud = alloc_new_pud(mm, vma, addr);
 	if (!pud)
 		return NULL;
 
@@ -235,14 +254,151 @@ static bool move_normal_pmd(struct vm_area_struct *vma, unsigned long old_addr,
 
 	return true;
 }
+#else
+static inline bool move_normal_pmd(struct vm_area_struct *vma,
+		unsigned long old_addr, unsigned long new_addr,
+		unsigned long old_end, pmd_t *old_pmd, pmd_t *new_pmd)
+{
+	return false;
+}
 #endif
 
+#ifdef CONFIG_HAVE_MOVE_PUD
+static bool move_normal_pud(struct vm_area_struct *vma, unsigned long old_addr,
+		  unsigned long new_addr, pud_t *old_pud, pud_t *new_pud)
+{
+	spinlock_t *old_ptl, *new_ptl;
+	struct mm_struct *mm = vma->vm_mm;
+	pud_t pud;
+
+	/*
+	 * The destination pud shouldn't be established, free_pgtables()
+	 * should have released it.
+	 */
+	if (WARN_ON_ONCE(!pud_none(*new_pud)))
+		return false;
+
+	/*
+	 * We don't have to worry about the ordering of src and dst
+	 * ptlocks because exclusive mmap_lock prevents deadlock.
+	 */
+	old_ptl = pud_lock(vma->vm_mm, old_pud);
+	new_ptl = pud_lockptr(mm, new_pud);
+	if (new_ptl != old_ptl)
+		spin_lock_nested(new_ptl, SINGLE_DEPTH_NESTING);
+
+	/* Clear the pud */
+	pud = *old_pud;
+	pud_clear(old_pud);
+
+	VM_BUG_ON(!pud_none(*new_pud));
+
+	/* Set the new pud */
+	set_pud_at(mm, new_addr, new_pud, pud);
+	flush_tlb_range(vma, old_addr, old_addr + PUD_SIZE);
+	if (new_ptl != old_ptl)
+		spin_unlock(new_ptl);
+	spin_unlock(old_ptl);
+
+	return true;
+}
+#else
+static inline bool move_normal_pud(struct vm_area_struct *vma,
+		unsigned long old_addr, unsigned long new_addr, pud_t *old_pud,
+		pud_t *new_pud)
+{
+	return false;
+}
+#endif
+
+enum pgt_entry {
+	NORMAL_PMD,
+	HPAGE_PMD,
+	NORMAL_PUD,
+};
+
+/*
+ * Returns an extent of the corresponding size for the pgt_entry specified if
+ * valid. Else returns a smaller extent bounded by the end of the source and
+ * destination pgt_entry.
+ */
+static unsigned long get_extent(enum pgt_entry entry, unsigned long old_addr,
+			unsigned long old_end, unsigned long new_addr)
+{
+	unsigned long next, extent, mask, size;
+
+	switch (entry) {
+	case HPAGE_PMD:
+	case NORMAL_PMD:
+		mask = PMD_MASK;
+		size = PMD_SIZE;
+		break;
+	case NORMAL_PUD:
+		mask = PUD_MASK;
+		size = PUD_SIZE;
+		break;
+	default:
+		BUILD_BUG();
+		break;
+	}
+
+	next = (old_addr + size) & mask;
+	/* even if next overflowed, extent below will be ok */
+	extent = next - old_addr;
+	if (extent > old_end - old_addr)
+		extent = old_end - old_addr;
+	next = (new_addr + size) & mask;
+	if (extent > next - new_addr)
+		extent = next - new_addr;
+	return extent;
+}
+
+/*
+ * Attempts to speedup the move by moving entry at the level corresponding to
+ * pgt_entry. Returns true if the move was successful, else false.
+ */
+static bool move_pgt_entry(enum pgt_entry entry, struct vm_area_struct *vma,
+			unsigned long old_addr, unsigned long new_addr,
+			unsigned long old_end, void *old_entry,
+			void *new_entry, bool need_rmap_locks)
+{
+	bool moved = false;
+
+	/* See comment in move_ptes() */
+	if (need_rmap_locks)
+		take_rmap_locks(vma);
+
+	switch (entry) {
+	case NORMAL_PMD:
+		moved = move_normal_pmd(vma, old_addr, new_addr, old_end,
+					old_entry, new_entry);
+		break;
+	case NORMAL_PUD:
+		moved = move_normal_pud(vma, old_addr, new_addr, old_entry,
+					new_entry);
+		break;
+	case HPAGE_PMD:
+		moved = IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) &&
+			move_huge_pmd(vma, old_addr, new_addr, old_end,
+					old_entry, new_entry);
+		break;
+	default:
+		WARN_ON_ONCE(1);
+		break;
+	}
+
+	if (need_rmap_locks)
+		drop_rmap_locks(vma);
+
+	return moved;
+}
+
 unsigned long move_page_tables(struct vm_area_struct *vma,
 		unsigned long old_addr, struct vm_area_struct *new_vma,
 		unsigned long new_addr, unsigned long len,
 		bool need_rmap_locks)
 {
-	unsigned long extent, next, old_end;
+	unsigned long extent, old_end;
 	struct mmu_notifier_range range;
 	pmd_t *old_pmd, *new_pmd;
 
@@ -255,57 +411,56 @@ unsigned long move_page_tables(struct vm_area_struct *vma,
 
 	for (; old_addr < old_end; old_addr += extent, new_addr += extent) {
 		cond_resched();
-		next = (old_addr + PMD_SIZE) & PMD_MASK;
-		/* even if next overflowed, extent below will be ok */
-		extent = next - old_addr;
-		if (extent > old_end - old_addr)
-			extent = old_end - old_addr;
+		/*
+		 * If extent is PUD-sized try to speed up the move by moving at the
+		 * PUD level if possible.
+		 */
+		extent = get_extent(NORMAL_PUD, old_addr, old_end, new_addr);
+		if (IS_ENABLED(CONFIG_HAVE_MOVE_PUD) && extent == PUD_SIZE) {
+			pud_t *old_pud, *new_pud;
+
+			old_pud = get_old_pud(vma->vm_mm, old_addr);
+			if (!old_pud)
+				continue;
+			new_pud = alloc_new_pud(vma->vm_mm, vma, new_addr);
+			if (!new_pud)
+				break;
+			if (move_pgt_entry(NORMAL_PUD, vma, old_addr, new_addr,
+						old_end, old_pud, new_pud,
+						need_rmap_locks))
+				continue;
+		}
+
+		extent = get_extent(NORMAL_PMD, old_addr, old_end, new_addr);
 		old_pmd = get_old_pmd(vma->vm_mm, old_addr);
 		if (!old_pmd)
 			continue;
 		new_pmd = alloc_new_pmd(vma->vm_mm, vma, new_addr);
 		if (!new_pmd)
 			break;
-		if (is_swap_pmd(*old_pmd) || pmd_trans_huge(*old_pmd) || pmd_devmap(*old_pmd)) {
-			if (extent == HPAGE_PMD_SIZE) {
-				bool moved;
-				/* See comment in move_ptes() */
-				if (need_rmap_locks)
-					take_rmap_locks(vma);
-				moved = move_huge_pmd(vma, old_addr, new_addr,
-						    old_end, old_pmd, new_pmd);
-				if (need_rmap_locks)
-					drop_rmap_locks(vma);
-				if (moved)
-					continue;
-			}
+		if (is_swap_pmd(*old_pmd) || pmd_trans_huge(*old_pmd) ||
+		    pmd_devmap(*old_pmd)) {
+			if (extent == HPAGE_PMD_SIZE &&
+			    move_pgt_entry(HPAGE_PMD, vma, old_addr, new_addr,
+				    old_end, old_pmd, new_pmd, need_rmap_locks))
+				continue;
 			split_huge_pmd(vma, old_pmd, old_addr);
 			if (pmd_trans_unstable(old_pmd))
 				continue;
-		} else if (extent == PMD_SIZE) {
-#ifdef CONFIG_HAVE_MOVE_PMD
+		} else if (IS_ENABLED(CONFIG_HAVE_MOVE_PMD) &&
+			   extent == PMD_SIZE) {
 			/*
 			 * If the extent is PMD-sized, try to speed the move by
 			 * moving at the PMD level if possible.
 			 */
-			bool moved;
-
-			if (need_rmap_locks)
-				take_rmap_locks(vma);
-			moved = move_normal_pmd(vma, old_addr, new_addr,
-					old_end, old_pmd, new_pmd);
-			if (need_rmap_locks)
-				drop_rmap_locks(vma);
-			if (moved)
+			if (move_pgt_entry(NORMAL_PMD, vma, old_addr, new_addr,
+						old_end, old_pmd, new_pmd,
+						need_rmap_locks))
 				continue;
-#endif
 		}
 
 		if (pte_alloc(new_vma->vm_mm, new_pmd))
 			break;
-		next = (new_addr + PMD_SIZE) & PMD_MASK;
-		if (extent > next - new_addr)
-			extent = next - new_addr;
 		move_ptes(vma, old_pmd, old_addr, old_addr + extent, new_vma,
 			  new_pmd, new_addr, need_rmap_locks);
 	}
@@ -318,8 +473,8 @@ unsigned long move_page_tables(struct vm_area_struct *vma,
 static unsigned long move_vma(struct vm_area_struct *vma,
 		unsigned long old_addr, unsigned long old_len,
 		unsigned long new_len, unsigned long new_addr,
-		bool *locked, struct vm_userfaultfd_ctx *uf,
-		struct list_head *uf_unmap)
+		bool *locked, unsigned long flags,
+		struct vm_userfaultfd_ctx *uf, struct list_head *uf_unmap)
 {
 	struct mm_struct *mm = vma->vm_mm;
 	struct vm_area_struct *new_vma;
@@ -351,18 +506,26 @@ static unsigned long move_vma(struct vm_area_struct *vma,
 	if (err)
 		return err;
 
+	if (unlikely(flags & MREMAP_DONTUNMAP && vm_flags & VM_ACCOUNT)) {
+		if (security_vm_enough_memory_mm(mm, new_len >> PAGE_SHIFT))
+			return -ENOMEM;
+	}
+
 	new_pgoff = vma->vm_pgoff + ((old_addr - vma->vm_start) >> PAGE_SHIFT);
 	new_vma = copy_vma(&vma, new_addr, new_len, new_pgoff,
 			   &need_rmap_locks);
-	if (!new_vma)
+	if (!new_vma) {
+		if (unlikely(flags & MREMAP_DONTUNMAP && vm_flags & VM_ACCOUNT))
+			vm_unacct_memory(new_len >> PAGE_SHIFT);
 		return -ENOMEM;
+	}
 
 	moved_len = move_page_tables(vma, old_addr, new_vma, new_addr, old_len,
 				     need_rmap_locks);
 	if (moved_len < old_len) {
 		err = -ENOMEM;
 	} else if (vma->vm_ops && vma->vm_ops->mremap) {
-		err = vma->vm_ops->mremap(new_vma);
+		err = vma->vm_ops->mremap(new_vma, flags);
 	}
 
 	if (unlikely(err)) {
@@ -384,7 +547,7 @@ static unsigned long move_vma(struct vm_area_struct *vma,
 	}
 
 	/* Conceal VM_ACCOUNT so old reservation is not undone */
-	if (vm_flags & VM_ACCOUNT) {
+	if (vm_flags & VM_ACCOUNT && !(flags & MREMAP_DONTUNMAP)) {
 		vma->vm_flags &= ~VM_ACCOUNT;
 		excess = vma->vm_end - vma->vm_start - old_len;
 		if (old_addr > vma->vm_start &&
@@ -408,11 +571,26 @@ static unsigned long move_vma(struct vm_area_struct *vma,
 	if (unlikely(vma->vm_flags & VM_PFNMAP))
 		untrack_pfn_moved(vma);
 
+	if (unlikely(!err && (flags & MREMAP_DONTUNMAP))) {
+		/* We always clear VM_LOCKED[ONFAULT] on the old vma */
+		vma->vm_flags &= VM_LOCKED_CLEAR_MASK;
+
+		/* Because we won't unmap we don't need to touch locked_vm */
+		return new_addr;
+	}
+
 	if (do_munmap(mm, old_addr, old_len, uf_unmap) < 0) {
 		/* OOM: unable to split vma, just get accounts right */
-		vm_unacct_memory(excess >> PAGE_SHIFT);
+		if (vm_flags & VM_ACCOUNT && !(flags & MREMAP_DONTUNMAP))
+			vm_acct_memory(new_len >> PAGE_SHIFT);
 		excess = 0;
 	}
+
+	if (vm_flags & VM_LOCKED) {
+		mm->locked_vm += new_len >> PAGE_SHIFT;
+		*locked = true;
+	}
+
 	mm->hiwater_vm = hiwater_vm;
 
 	/* Restore VM_ACCOUNT if one or two pieces of vma left */
@@ -422,16 +600,12 @@ static unsigned long move_vma(struct vm_area_struct *vma,
 			vma->vm_next->vm_flags |= VM_ACCOUNT;
 	}
 
-	if (vm_flags & VM_LOCKED) {
-		mm->locked_vm += new_len >> PAGE_SHIFT;
-		*locked = true;
-	}
-
 	return new_addr;
 }
 
 static struct vm_area_struct *vma_to_resize(unsigned long addr,
-	unsigned long old_len, unsigned long new_len, unsigned long *p)
+	unsigned long old_len, unsigned long new_len, unsigned long flags,
+	unsigned long *p)
 {
 	struct mm_struct *mm = current->mm;
 	struct vm_area_struct *vma = find_vma(mm, addr);
@@ -453,6 +627,10 @@ static struct vm_area_struct *vma_to_resize(unsigned long addr,
 		return ERR_PTR(-EINVAL);
 	}
 
+	if (flags & MREMAP_DONTUNMAP && (!vma_is_anonymous(vma) ||
+			vma->vm_flags & VM_SHARED))
+		return ERR_PTR(-EINVAL);
+
 	if (is_vm_hugetlb_page(vma))
 		return ERR_PTR(-EINVAL);
 
@@ -497,7 +675,7 @@ static struct vm_area_struct *vma_to_resize(unsigned long addr,
 
 static unsigned long mremap_to(unsigned long addr, unsigned long old_len,
 		unsigned long new_addr, unsigned long new_len, bool *locked,
-		struct vm_userfaultfd_ctx *uf,
+		unsigned long flags, struct vm_userfaultfd_ctx *uf,
 		struct list_head *uf_unmap_early,
 		struct list_head *uf_unmap)
 {
@@ -505,7 +683,7 @@ static unsigned long mremap_to(unsigned long addr, unsigned long old_len,
 	struct vm_area_struct *vma;
 	unsigned long ret = -EINVAL;
 	unsigned long charged = 0;
-	unsigned long map_flags;
+	unsigned long map_flags = 0;
 
 	if (offset_in_page(new_addr))
 		goto out;
@@ -534,9 +712,11 @@ static unsigned long mremap_to(unsigned long addr, unsigned long old_len,
 	if ((mm->map_count + 2) >= sysctl_max_map_count - 3)
 		return -ENOMEM;
 
-	ret = do_munmap(mm, new_addr, new_len, uf_unmap_early);
-	if (ret)
-		goto out;
+	if (flags & MREMAP_FIXED) {
+		ret = do_munmap(mm, new_addr, new_len, uf_unmap_early);
+		if (ret)
+			goto out;
+	}
 
 	if (old_len >= new_len) {
 		ret = do_munmap(mm, addr+new_len, old_len - new_len, uf_unmap);
@@ -545,13 +725,22 @@ static unsigned long mremap_to(unsigned long addr, unsigned long old_len,
 		old_len = new_len;
 	}
 
-	vma = vma_to_resize(addr, old_len, new_len, &charged);
+	vma = vma_to_resize(addr, old_len, new_len, flags, &charged);
 	if (IS_ERR(vma)) {
 		ret = PTR_ERR(vma);
 		goto out;
 	}
 
-	map_flags = MAP_FIXED;
+	/* MREMAP_DONTUNMAP expands by old_len since old_len == new_len */
+	if (flags & MREMAP_DONTUNMAP &&
+		!may_expand_vm(mm, vma->vm_flags, old_len >> PAGE_SHIFT)) {
+		ret = -ENOMEM;
+		goto out;
+	}
+
+	if (flags & MREMAP_FIXED)
+		map_flags |= MAP_FIXED;
+
 	if (vma->vm_flags & VM_MAYSHARE)
 		map_flags |= MAP_SHARED;
 
@@ -561,10 +750,16 @@ static unsigned long mremap_to(unsigned long addr, unsigned long old_len,
 	if (offset_in_page(ret))
 		goto out1;
 
-	ret = move_vma(vma, addr, old_len, new_len, new_addr, locked, uf,
+	/* We got a new mapping */
+	if (!(flags & MREMAP_FIXED))
+		new_addr = ret;
+
+	ret = move_vma(vma, addr, old_len, new_len, new_addr, locked, flags, uf,
 		       uf_unmap);
+
 	if (!(offset_in_page(ret)))
 		goto out;
+
 out1:
 	vm_unacct_memory(charged);
 
@@ -618,12 +813,21 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
 	 */
 	addr = untagged_addr(addr);
 
-	if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE))
+	if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE | MREMAP_DONTUNMAP))
 		return ret;
 
 	if (flags & MREMAP_FIXED && !(flags & MREMAP_MAYMOVE))
 		return ret;
 
+	/*
+	 * MREMAP_DONTUNMAP is always a move and it does not allow resizing
+	 * in the process.
+	 */
+	if (flags & MREMAP_DONTUNMAP &&
+			(!(flags & MREMAP_MAYMOVE) || old_len != new_len))
+		return ret;
+
+
 	if (offset_in_page(addr))
 		return ret;
 
@@ -641,9 +845,10 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
 	if (down_write_killable(&current->mm->mmap_sem))
 		return -EINTR;
 
-	if (flags & MREMAP_FIXED) {
+	if (flags & (MREMAP_FIXED | MREMAP_DONTUNMAP)) {
 		ret = mremap_to(addr, old_len, new_addr, new_len,
-				&locked, &uf, &uf_unmap_early, &uf_unmap);
+				&locked, flags, &uf, &uf_unmap_early,
+				&uf_unmap);
 		goto out;
 	}
 
@@ -671,7 +876,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
 	/*
 	 * Ok, we need to grow..
 	 */
-	vma = vma_to_resize(addr, old_len, new_len, &charged);
+	vma = vma_to_resize(addr, old_len, new_len, flags, &charged);
 	if (IS_ERR(vma)) {
 		ret = PTR_ERR(vma);
 		goto out;
@@ -721,7 +926,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
 		}
 
 		ret = move_vma(vma, addr, old_len, new_len, new_addr,
-			       &locked, &uf, &uf_unmap);
+			       &locked, flags, &uf, &uf_unmap);
 	}
 out:
 	if (offset_in_page(ret)) {
@@ -735,7 +940,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
 	if (locked && new_len > old_len)
 		mm_populate(new_addr + old_len, new_len - old_len);
 	userfaultfd_unmap_complete(mm, &uf_unmap_early);
-	mremap_userfaultfd_complete(&uf, addr, new_addr, old_len);
+	mremap_userfaultfd_complete(&uf, addr, ret, old_len);
 	userfaultfd_unmap_complete(mm, &uf_unmap);
 	return ret;
 }
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 4357f54..5c19464 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -294,10 +294,10 @@ const char * const migratetype_names[MIGRATE_TYPES] = {
 	"Unmovable",
 	"Movable",
 	"Reclaimable",
-	"HighAtomic",
 #ifdef CONFIG_CMA
 	"CMA",
 #endif
+	"HighAtomic",
 #ifdef CONFIG_MEMORY_ISOLATION
 	"Isolate",
 #endif
@@ -314,6 +314,11 @@ compound_page_dtor * const compound_page_dtors[] = {
 #endif
 };
 
+/*
+ * Try to keep at least this much lowmem free.  Do not allow normal
+ * allocations below this point, only high priority ones. Automatically
+ * tuned according to the amount of memory in the system.
+ */
 int min_free_kbytes = 1024;
 int user_min_free_kbytes = -1;
 #ifdef CONFIG_DISCONTIGMEM
@@ -332,6 +337,13 @@ int watermark_boost_factor __read_mostly = 15000;
 #endif
 int watermark_scale_factor = 10;
 
+/*
+ * Extra memory for the system to try freeing. Used to temporarily
+ * free memory, to make space for new workloads. Anyone can allocate
+ * down to the min watermarks controlled by min_free_kbytes above.
+ */
+int extra_free_kbytes = 0;
+
 static unsigned long nr_kernel_pages __initdata;
 static unsigned long nr_all_pages __initdata;
 static unsigned long dma_reserve __initdata;
@@ -2724,19 +2736,37 @@ __rmqueue(struct zone *zone, unsigned int order, int migratetype,
 
 retry:
 	page = __rmqueue_smallest(zone, order, migratetype);
-	if (unlikely(!page)) {
-		if (migratetype == MIGRATE_MOVABLE)
-			page = __rmqueue_cma_fallback(zone, order);
 
-		if (!page && __rmqueue_fallback(zone, order, migratetype,
-								alloc_flags))
-			goto retry;
-	}
+	if (unlikely(!page) && __rmqueue_fallback(zone, order, migratetype,
+						  alloc_flags))
+		goto retry;
 
 	trace_mm_page_alloc_zone_locked(page, order, migratetype);
 	return page;
 }
 
+#ifdef CONFIG_CMA
+static struct page *__rmqueue_cma(struct zone *zone, unsigned int order,
+				  int migratetype,
+				  unsigned int alloc_flags)
+{
+	struct page *page = 0;
+
+	if (IS_ENABLED(CONFIG_CMA))
+		if (!zone->cma_alloc)
+			page = __rmqueue_cma_fallback(zone, order);
+	trace_mm_page_alloc_zone_locked(page, order, MIGRATE_CMA);
+	return page;
+}
+#else
+static inline struct page *__rmqueue_cma(struct zone *zone, unsigned int order,
+					 int migratetype,
+					 unsigned int alloc_flags)
+{
+	return NULL;
+}
+#endif
+
 /*
  * Obtain a specified number of elements from the buddy allocator, all under
  * a single hold of the lock, for efficiency.  Add them to the supplied list.
@@ -2750,8 +2780,19 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order,
 
 	spin_lock(&zone->lock);
 	for (i = 0; i < count; ++i) {
-		struct page *page = __rmqueue(zone, order, migratetype,
-								alloc_flags);
+		struct page *page;
+
+		/*
+		 * If migrate type CMA is being requested only try to
+		 * satisfy the request with CMA pages to try and increase
+		 * CMA utlization.
+		 */
+		if (is_migrate_cma(migratetype))
+			page = __rmqueue_cma(zone, order, migratetype,
+					     alloc_flags);
+		else
+			page = __rmqueue(zone, order, migratetype, alloc_flags);
+
 		if (unlikely(page == NULL))
 			break;
 
@@ -2786,6 +2827,28 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order,
 	return alloced;
 }
 
+/*
+ * Return the pcp list that corresponds to the migrate type if that list isn't
+ * empty.
+ * If the list is empty return NULL.
+ */
+static struct list_head *get_populated_pcp_list(struct zone *zone,
+			unsigned int order, struct per_cpu_pages *pcp,
+			int migratetype, unsigned int alloc_flags)
+{
+	struct list_head *list = &pcp->lists[migratetype];
+
+	if (list_empty(list)) {
+		pcp->count += rmqueue_bulk(zone, order,
+				pcp->batch, list,
+				migratetype, alloc_flags);
+
+		if (list_empty(list))
+			list = NULL;
+	}
+	return list;
+}
+
 #ifdef CONFIG_NUMA
 /*
  * Called from the vmstat counter updater to drain pagesets of this
@@ -3215,16 +3278,28 @@ static inline void zone_statistics(struct zone *preferred_zone, struct zone *z)
 static struct page *__rmqueue_pcplist(struct zone *zone, int migratetype,
 			unsigned int alloc_flags,
 			struct per_cpu_pages *pcp,
-			struct list_head *list)
+			gfp_t gfp_flags)
 {
-	struct page *page;
+	struct page *page = NULL;
+	struct list_head *list = NULL;
 
 	do {
-		if (list_empty(list)) {
-			pcp->count += rmqueue_bulk(zone, 0,
-					pcp->batch, list,
+		/* First try to get CMA pages */
+		if (migratetype == MIGRATE_MOVABLE &&
+				gfp_flags & __GFP_CMA) {
+			list = get_populated_pcp_list(zone, 0, pcp,
+					get_cma_migrate_type(), alloc_flags);
+		}
+
+		if (list == NULL) {
+			/*
+			 * Either CMA is not suitable or there are no
+			 * free CMA pages.
+			 */
+			list = get_populated_pcp_list(zone, 0, pcp,
 					migratetype, alloc_flags);
-			if (unlikely(list_empty(list)))
+			if (unlikely(list == NULL) ||
+					unlikely(list_empty(list)))
 				return NULL;
 		}
 
@@ -3242,14 +3317,13 @@ static struct page *rmqueue_pcplist(struct zone *preferred_zone,
 			int migratetype, unsigned int alloc_flags)
 {
 	struct per_cpu_pages *pcp;
-	struct list_head *list;
 	struct page *page;
 	unsigned long flags;
 
 	local_irq_save(flags);
 	pcp = &this_cpu_ptr(zone->pageset)->pcp;
-	list = &pcp->lists[migratetype];
-	page = __rmqueue_pcplist(zone,  migratetype, alloc_flags, pcp, list);
+	page = __rmqueue_pcplist(zone,  migratetype, alloc_flags, pcp,
+				 gfp_flags);
 	if (page) {
 		__count_zid_vm_events(PGALLOC, page_zonenum(page), 1);
 		zone_statistics(preferred_zone, zone);
@@ -3285,14 +3359,22 @@ struct page *rmqueue(struct zone *preferred_zone,
 
 	do {
 		page = NULL;
+
 		if (alloc_flags & ALLOC_HARDER) {
 			page = __rmqueue_smallest(zone, order, MIGRATE_HIGHATOMIC);
 			if (page)
 				trace_mm_page_alloc_zone_locked(page, order, migratetype);
 		}
+
+		if (!page && migratetype == MIGRATE_MOVABLE &&
+				gfp_flags & __GFP_CMA)
+			page = __rmqueue_cma(zone, order, migratetype,
+					     alloc_flags);
+
 		if (!page)
 			page = __rmqueue(zone, order, migratetype, alloc_flags);
 	} while (page && check_new_pages(page, order));
+
 	spin_unlock(&zone->lock);
 	if (!page)
 		goto failed;
@@ -5386,6 +5468,9 @@ void show_free_areas(unsigned int filter, nodemask_t *nodemask)
 			" managed:%lukB"
 			" mlocked:%lukB"
 			" kernel_stack:%lukB"
+#ifdef CONFIG_SHADOW_CALL_STACK
+			" shadow_call_stack:%lukB"
+#endif
 			" pagetables:%lukB"
 			" bounce:%lukB"
 			" free_pcp:%lukB"
@@ -5407,6 +5492,9 @@ void show_free_areas(unsigned int filter, nodemask_t *nodemask)
 			K(zone_managed_pages(zone)),
 			K(zone_page_state(zone, NR_MLOCK)),
 			zone_page_state(zone, NR_KERNEL_STACK_KB),
+#ifdef CONFIG_SHADOW_CALL_STACK
+			zone_page_state(zone, NR_KERNEL_SCS_BYTES) / 1024,
+#endif
 			K(zone_page_state(zone, NR_PAGETABLE)),
 			K(zone_page_state(zone, NR_BOUNCE)),
 			K(free_pcp),
@@ -7768,6 +7856,7 @@ static void setup_per_zone_lowmem_reserve(void)
 static void __setup_per_zone_wmarks(void)
 {
 	unsigned long pages_min = min_free_kbytes >> (PAGE_SHIFT - 10);
+	unsigned long pages_low = extra_free_kbytes >> (PAGE_SHIFT - 10);
 	unsigned long lowmem_pages = 0;
 	struct zone *zone;
 	unsigned long flags;
@@ -7779,11 +7868,13 @@ static void __setup_per_zone_wmarks(void)
 	}
 
 	for_each_zone(zone) {
-		u64 tmp;
+		u64 tmp, low;
 
 		spin_lock_irqsave(&zone->lock, flags);
 		tmp = (u64)pages_min * zone_managed_pages(zone);
 		do_div(tmp, lowmem_pages);
+		low = (u64)pages_low * zone_managed_pages(zone);
+		do_div(low, vm_total_pages);
 		if (is_highmem(zone)) {
 			/*
 			 * __GFP_HIGH and PF_MEMALLOC allocations usually don't
@@ -7816,8 +7907,10 @@ static void __setup_per_zone_wmarks(void)
 			    mult_frac(zone_managed_pages(zone),
 				      watermark_scale_factor, 10000));
 
-		zone->_watermark[WMARK_LOW]  = min_wmark_pages(zone) + tmp;
-		zone->_watermark[WMARK_HIGH] = min_wmark_pages(zone) + tmp * 2;
+		zone->_watermark[WMARK_LOW]  = min_wmark_pages(zone) +
+					low + tmp;
+		zone->_watermark[WMARK_HIGH] = min_wmark_pages(zone) +
+					low + tmp * 2;
 		zone->watermark_boost = 0;
 
 		spin_unlock_irqrestore(&zone->lock, flags);
@@ -7903,7 +7996,7 @@ postcore_initcall(init_per_zone_wmark_min)
 /*
  * min_free_kbytes_sysctl_handler - just a wrapper around proc_dointvec() so
  *	that we can call two helper functions whenever min_free_kbytes
- *	changes.
+ *	or extra_free_kbytes changes.
  */
 int min_free_kbytes_sysctl_handler(struct ctl_table *table, int write,
 	void __user *buffer, size_t *length, loff_t *ppos)
@@ -8453,6 +8546,9 @@ int alloc_contig_range(unsigned long start, unsigned long end,
 	if (ret < 0)
 		return ret;
 
+#ifdef CONFIG_CMA
+	cc.zone->cma_alloc = 1;
+#endif
 	/*
 	 * In case of -EBUSY, we'd like to know which page causes problem.
 	 * So, just fall through. test_pages_isolated() has a tracepoint
@@ -8534,6 +8630,9 @@ int alloc_contig_range(unsigned long start, unsigned long end,
 done:
 	undo_isolate_page_range(pfn_max_align_down(start),
 				pfn_max_align_up(end), migratetype);
+#ifdef CONFIG_CMA
+	cc.zone->cma_alloc = 0;
+#endif
 	return ret;
 }
 #endif /* CONFIG_CONTIG_ALLOC */
diff --git a/mm/page_io.c b/mm/page_io.c
index 60a66a5..3a198de 100644
--- a/mm/page_io.c
+++ b/mm/page_io.c
@@ -22,6 +22,7 @@
 #include <linux/writeback.h>
 #include <linux/frontswap.h>
 #include <linux/blkdev.h>
+#include <linux/psi.h>
 #include <linux/uio.h>
 #include <linux/sched/task.h>
 #include <asm/pgtable.h>
@@ -354,10 +355,19 @@ int swap_readpage(struct page *page, bool synchronous)
 	struct swap_info_struct *sis = page_swap_info(page);
 	blk_qc_t qc;
 	struct gendisk *disk;
+	unsigned long pflags;
 
 	VM_BUG_ON_PAGE(!PageSwapCache(page) && !synchronous, page);
 	VM_BUG_ON_PAGE(!PageLocked(page), page);
 	VM_BUG_ON_PAGE(PageUptodate(page), page);
+
+	/*
+	 * Count submission time as memory stall. When the device is congested,
+	 * or the submitting cgroup IO-throttled, submission can be a
+	 * significant part of overall IO time.
+	 */
+	psi_memstall_enter(&pflags);
+
 	if (frontswap_load(page) == 0) {
 		SetPageUptodate(page);
 		unlock_page(page);
@@ -371,7 +381,7 @@ int swap_readpage(struct page *page, bool synchronous)
 		ret = mapping->a_ops->readpage(swap_file, page);
 		if (!ret)
 			count_vm_event(PSWPIN);
-		return ret;
+		goto out;
 	}
 
 	ret = bdev_read_page(sis->bdev, swap_page_sector(page), page);
@@ -382,7 +392,7 @@ int swap_readpage(struct page *page, bool synchronous)
 		}
 
 		count_vm_event(PSWPIN);
-		return 0;
+		goto out;
 	}
 
 	ret = 0;
@@ -418,6 +428,7 @@ int swap_readpage(struct page *page, bool synchronous)
 	bio_put(bio);
 
 out:
+	psi_memstall_leave(&pflags);
 	return ret;
 }
 
diff --git a/mm/shmem.c b/mm/shmem.c
index 98802ca..b0e5097 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -3229,7 +3229,8 @@ static int shmem_initxattrs(struct inode *inode,
 
 static int shmem_xattr_handler_get(const struct xattr_handler *handler,
 				   struct dentry *unused, struct inode *inode,
-				   const char *name, void *buffer, size_t size)
+				   const char *name, void *buffer, size_t size,
+				   int flags)
 {
 	struct shmem_inode_info *info = SHMEM_I(inode);
 
diff --git a/mm/slab.c b/mm/slab.c
index d1d7624..cdeaf56 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -100,6 +100,7 @@
 #include	<linux/seq_file.h>
 #include	<linux/notifier.h>
 #include	<linux/kallsyms.h>
+#include	<linux/kfence.h>
 #include	<linux/cpu.h>
 #include	<linux/sysctl.h>
 #include	<linux/module.h>
@@ -3215,18 +3216,28 @@ static void *____cache_alloc_node(struct kmem_cache *cachep, gfp_t flags,
 }
 
 static __always_inline void *
-slab_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid,
+slab_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid, size_t orig_size,
 		   unsigned long caller)
 {
 	unsigned long save_flags;
 	void *ptr;
 	int slab_node = numa_mem_id();
+	struct kmem_cache *orig_cachep = cachep;
 
 	flags &= gfp_allowed_mask;
 	cachep = slab_pre_alloc_hook(cachep, flags);
 	if (unlikely(!cachep))
 		return NULL;
 
+	/*
+	 * 5.4 note: passing in original cachep to avoid problems with memcg
+	 * accounting. Making KFENCE properly work with memcgs on older kernels
+	 * is not worth the effort.
+	 */
+	ptr = kfence_alloc(orig_cachep, orig_size, flags);
+	if (unlikely(ptr))
+		goto out_hooks;
+
 	cache_alloc_debugcheck_before(cachep, flags);
 	local_irq_save(save_flags);
 
@@ -3259,6 +3270,7 @@ slab_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid,
 	if (unlikely(slab_want_init_on_alloc(flags, cachep)) && ptr)
 		memset(ptr, 0, cachep->object_size);
 
+out_hooks:
 	slab_post_alloc_hook(cachep, flags, 1, &ptr);
 	return ptr;
 }
@@ -3296,16 +3308,26 @@ __do_cache_alloc(struct kmem_cache *cachep, gfp_t flags)
 #endif /* CONFIG_NUMA */
 
 static __always_inline void *
-slab_alloc(struct kmem_cache *cachep, gfp_t flags, unsigned long caller)
+slab_alloc(struct kmem_cache *cachep, gfp_t flags, size_t orig_size, unsigned long caller)
 {
 	unsigned long save_flags;
 	void *objp;
+	struct kmem_cache *orig_cachep = cachep;
 
 	flags &= gfp_allowed_mask;
 	cachep = slab_pre_alloc_hook(cachep, flags);
 	if (unlikely(!cachep))
 		return NULL;
 
+	/*
+	 * 5.4 note: passing in original cachep to avoid problems with memcg
+	 * accounting. Making KFENCE properly work with memcgs on older kernels
+	 * is not worth the effort.
+	 */
+	objp = kfence_alloc(orig_cachep, orig_size, flags);
+	if (unlikely(objp))
+		goto out;
+
 	cache_alloc_debugcheck_before(cachep, flags);
 	local_irq_save(save_flags);
 	objp = __do_cache_alloc(cachep, flags);
@@ -3316,6 +3338,7 @@ slab_alloc(struct kmem_cache *cachep, gfp_t flags, unsigned long caller)
 	if (unlikely(slab_want_init_on_alloc(flags, cachep)) && objp)
 		memset(objp, 0, cachep->object_size);
 
+out:
 	slab_post_alloc_hook(cachep, flags, 1, &objp);
 	return objp;
 }
@@ -3421,6 +3444,15 @@ static void cache_flusharray(struct kmem_cache *cachep, struct array_cache *ac)
 static __always_inline void __cache_free(struct kmem_cache *cachep, void *objp,
 					 unsigned long caller)
 {
+	if (is_kfence_address(objp)) {
+		kmemleak_free_recursive(objp, cachep->flags);
+		__kfence_free(objp);
+		return;
+	}
+
+	if (unlikely(slab_want_init_on_free(cachep)))
+		memset(objp, 0, cachep->object_size);
+
 	/* Put the object into the quarantine, don't touch it for now. */
 	if (kasan_slab_free(cachep, objp, _RET_IP_))
 		return;
@@ -3434,8 +3466,6 @@ void ___cache_free(struct kmem_cache *cachep, void *objp,
 	struct array_cache *ac = cpu_cache_get(cachep);
 
 	check_irq_off();
-	if (unlikely(slab_want_init_on_free(cachep)))
-		memset(objp, 0, cachep->object_size);
 	kmemleak_free_recursive(objp, cachep->flags);
 	objp = cache_free_debugcheck(cachep, objp, caller);
 
@@ -3480,7 +3510,7 @@ void ___cache_free(struct kmem_cache *cachep, void *objp,
  */
 void *kmem_cache_alloc(struct kmem_cache *cachep, gfp_t flags)
 {
-	void *ret = slab_alloc(cachep, flags, _RET_IP_);
+	void *ret = slab_alloc(cachep, flags, cachep->object_size, _RET_IP_);
 
 	trace_kmem_cache_alloc(_RET_IP_, ret,
 			       cachep->object_size, cachep->size, flags);
@@ -3503,6 +3533,7 @@ int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size,
 			  void **p)
 {
 	size_t i;
+	struct kmem_cache *root_s = s;
 
 	s = slab_pre_alloc_hook(s, flags);
 	if (!s)
@@ -3512,7 +3543,13 @@ int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size,
 
 	local_irq_disable();
 	for (i = 0; i < size; i++) {
-		void *objp = __do_cache_alloc(s, flags);
+		/*
+		 * 5.4 note: passing in original cachep to avoid problems with
+		 * memcg accounting. Making KFENCE properly work with memcgs on
+		 * older kernels is not worth the effort.
+		 */
+		void *objp = kfence_alloc(root_s, s->object_size, flags) ?:
+					  __do_cache_alloc(s, flags);
 
 		if (unlikely(!objp))
 			goto error;
@@ -3545,7 +3582,7 @@ kmem_cache_alloc_trace(struct kmem_cache *cachep, gfp_t flags, size_t size)
 {
 	void *ret;
 
-	ret = slab_alloc(cachep, flags, _RET_IP_);
+	ret = slab_alloc(cachep, flags, size, _RET_IP_);
 
 	ret = kasan_kmalloc(cachep, ret, size, flags);
 	trace_kmalloc(_RET_IP_, ret,
@@ -3571,7 +3608,7 @@ EXPORT_SYMBOL(kmem_cache_alloc_trace);
  */
 void *kmem_cache_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid)
 {
-	void *ret = slab_alloc_node(cachep, flags, nodeid, _RET_IP_);
+	void *ret = slab_alloc_node(cachep, flags, nodeid, cachep->object_size, _RET_IP_);
 
 	trace_kmem_cache_alloc_node(_RET_IP_, ret,
 				    cachep->object_size, cachep->size,
@@ -3589,7 +3626,7 @@ void *kmem_cache_alloc_node_trace(struct kmem_cache *cachep,
 {
 	void *ret;
 
-	ret = slab_alloc_node(cachep, flags, nodeid, _RET_IP_);
+	ret = slab_alloc_node(cachep, flags, nodeid, size, _RET_IP_);
 
 	ret = kasan_kmalloc(cachep, ret, size, flags);
 	trace_kmalloc_node(_RET_IP_, ret,
@@ -3650,7 +3687,7 @@ static __always_inline void *__do_kmalloc(size_t size, gfp_t flags,
 	cachep = kmalloc_slab(size, flags);
 	if (unlikely(ZERO_OR_NULL_PTR(cachep)))
 		return cachep;
-	ret = slab_alloc(cachep, flags, caller);
+	ret = slab_alloc(cachep, flags, size, caller);
 
 	ret = kasan_kmalloc(cachep, ret, size, flags);
 	trace_kmalloc(caller, ret,
@@ -4179,7 +4216,10 @@ void __check_heap_object(const void *ptr, unsigned long n, struct page *page,
 	BUG_ON(objnr >= cachep->num);
 
 	/* Find offset within object. */
-	offset = ptr - index_to_obj(cachep, page, objnr) - obj_offset(cachep);
+	if (is_kfence_address(ptr))
+		offset = ptr - kfence_object_start(ptr);
+	else
+		offset = ptr - index_to_obj(cachep, page, objnr) - obj_offset(cachep);
 
 	/* Allow address range falling entirely within usercopy region. */
 	if (offset >= cachep->useroffset &&
diff --git a/mm/slab_common.c b/mm/slab_common.c
index e36dd36..fcd24ce 100644
--- a/mm/slab_common.c
+++ b/mm/slab_common.c
@@ -12,6 +12,7 @@
 #include <linux/memory.h>
 #include <linux/cache.h>
 #include <linux/compiler.h>
+#include <linux/kfence.h>
 #include <linux/module.h>
 #include <linux/cpu.h>
 #include <linux/uaccess.h>
@@ -598,6 +599,7 @@ static void slab_caches_to_rcu_destroy_workfn(struct work_struct *work)
 	rcu_barrier();
 
 	list_for_each_entry_safe(s, s2, &to_destroy, list) {
+		kfence_shutdown_cache(s);
 #ifdef SLAB_SUPPORTS_SYSFS
 		sysfs_slab_release(s);
 #else
@@ -624,6 +626,7 @@ static int shutdown_cache(struct kmem_cache *s)
 		list_add_tail(&s->list, &slab_caches_to_rcu_destroy);
 		schedule_work(&slab_caches_to_rcu_destroy_work);
 	} else {
+		kfence_shutdown_cache(s);
 #ifdef SLAB_SUPPORTS_SYSFS
 		sysfs_slab_unlink(s);
 		sysfs_slab_release(s);
@@ -1802,7 +1805,7 @@ size_t ksize(const void *objp)
 	if (unlikely(objp == ZERO_SIZE_PTR) || !__kasan_check_read(objp, 1))
 		return 0;
 
-	size = __ksize(objp);
+	size = kfence_ksize(objp) ?: __ksize(objp);
 	/*
 	 * We assume that ksize callers could use whole allocated area,
 	 * so we need to unpoison this area.
diff --git a/mm/slob.c b/mm/slob.c
index fa53e9f..ac2aecf 100644
--- a/mm/slob.c
+++ b/mm/slob.c
@@ -524,6 +524,7 @@ void *__kmalloc_track_caller(size_t size, gfp_t gfp, unsigned long caller)
 {
 	return __do_kmalloc_node(size, gfp, NUMA_NO_NODE, caller);
 }
+EXPORT_SYMBOL(__kmalloc_track_caller);
 
 #ifdef CONFIG_NUMA
 void *__kmalloc_node_track_caller(size_t size, gfp_t gfp,
@@ -531,6 +532,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfp,
 {
 	return __do_kmalloc_node(size, gfp, node, caller);
 }
+EXPORT_SYMBOL(__kmalloc_node_track_caller);
 #endif
 
 void kfree(const void *block)
diff --git a/mm/slub.c b/mm/slub.c
index e622e8f4..cbc5a07 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -27,6 +27,7 @@
 #include <linux/ctype.h>
 #include <linux/debugobjects.h>
 #include <linux/kallsyms.h>
+#include <linux/kfence.h>
 #include <linux/memory.h>
 #include <linux/math64.h>
 #include <linux/fault-inject.h>
@@ -1462,6 +1463,11 @@ static inline bool slab_free_freelist_hook(struct kmem_cache *s,
 	void *old_tail = *tail ? *tail : *head;
 	int rsize;
 
+	if (is_kfence_address(next)) {
+		slab_free_hook(s, next);
+		return true;
+	}
+
 	/* Head and tail of the reconstructed freelist */
 	*head = NULL;
 	*tail = NULL;
@@ -2717,16 +2723,27 @@ static __always_inline void maybe_wipe_obj_freeptr(struct kmem_cache *s,
  * Otherwise we can simply pick the next object from the lockless free list.
  */
 static __always_inline void *slab_alloc_node(struct kmem_cache *s,
-		gfp_t gfpflags, int node, unsigned long addr)
+		gfp_t gfpflags, int node, unsigned long addr, size_t orig_size)
 {
 	void *object;
 	struct kmem_cache_cpu *c;
 	struct page *page;
 	unsigned long tid;
+	struct kmem_cache *root_s = s;
 
 	s = slab_pre_alloc_hook(s, gfpflags);
 	if (!s)
 		return NULL;
+
+	/*
+	 * 5.4 note: passing in original cachep to avoid problems with memcg
+	 * accounting. Making KFENCE properly work with memcgs on older kernels
+	 * is not worth the effort.
+	 */
+	object = kfence_alloc(root_s, orig_size, gfpflags);
+	if (unlikely(object))
+		goto out;
+
 redo:
 	/*
 	 * Must read kmem_cache cpu data via this cpu ptr. Preemption is
@@ -2800,20 +2817,21 @@ static __always_inline void *slab_alloc_node(struct kmem_cache *s,
 	if (unlikely(slab_want_init_on_alloc(gfpflags, s)) && object)
 		memset(object, 0, s->object_size);
 
+out:
 	slab_post_alloc_hook(s, gfpflags, 1, &object);
 
 	return object;
 }
 
 static __always_inline void *slab_alloc(struct kmem_cache *s,
-		gfp_t gfpflags, unsigned long addr)
+		gfp_t gfpflags, unsigned long addr, size_t orig_size)
 {
-	return slab_alloc_node(s, gfpflags, NUMA_NO_NODE, addr);
+	return slab_alloc_node(s, gfpflags, NUMA_NO_NODE, addr, orig_size);
 }
 
 void *kmem_cache_alloc(struct kmem_cache *s, gfp_t gfpflags)
 {
-	void *ret = slab_alloc(s, gfpflags, _RET_IP_);
+	void *ret = slab_alloc(s, gfpflags, _RET_IP_, s->object_size);
 
 	trace_kmem_cache_alloc(_RET_IP_, ret, s->object_size,
 				s->size, gfpflags);
@@ -2825,7 +2843,7 @@ EXPORT_SYMBOL(kmem_cache_alloc);
 #ifdef CONFIG_TRACING
 void *kmem_cache_alloc_trace(struct kmem_cache *s, gfp_t gfpflags, size_t size)
 {
-	void *ret = slab_alloc(s, gfpflags, _RET_IP_);
+	void *ret = slab_alloc(s, gfpflags, _RET_IP_, size);
 	trace_kmalloc(_RET_IP_, ret, size, s->size, gfpflags);
 	ret = kasan_kmalloc(s, ret, size, gfpflags);
 	return ret;
@@ -2836,7 +2854,7 @@ EXPORT_SYMBOL(kmem_cache_alloc_trace);
 #ifdef CONFIG_NUMA
 void *kmem_cache_alloc_node(struct kmem_cache *s, gfp_t gfpflags, int node)
 {
-	void *ret = slab_alloc_node(s, gfpflags, node, _RET_IP_);
+	void *ret = slab_alloc_node(s, gfpflags, node, _RET_IP_, s->object_size);
 
 	trace_kmem_cache_alloc_node(_RET_IP_, ret,
 				    s->object_size, s->size, gfpflags, node);
@@ -2850,7 +2868,7 @@ void *kmem_cache_alloc_node_trace(struct kmem_cache *s,
 				    gfp_t gfpflags,
 				    int node, size_t size)
 {
-	void *ret = slab_alloc_node(s, gfpflags, node, _RET_IP_);
+	void *ret = slab_alloc_node(s, gfpflags, node, _RET_IP_, size);
 
 	trace_kmalloc_node(_RET_IP_, ret,
 			   size, s->size, gfpflags, node);
@@ -2884,6 +2902,9 @@ static void __slab_free(struct kmem_cache *s, struct page *page,
 
 	stat(s, FREE_SLOWPATH);
 
+	if (kfence_free(head))
+		return;
+
 	if (kmem_cache_debug(s) &&
 	    !free_debug_processing(s, page, head, tail, cnt, addr))
 		return;
@@ -3125,6 +3146,13 @@ int build_detached_freelist(struct kmem_cache *s, size_t size,
 		df->s = cache_from_obj(s, object); /* Support for memcg */
 	}
 
+	if (is_kfence_address(object)) {
+		slab_free_hook(df->s, object);
+		__kfence_free(object);
+		p[size] = NULL; /* mark object processed */
+		return size;
+	}
+
 	/* Start new detached freelist */
 	df->page = page;
 	set_freepointer(df->s, object, NULL);
@@ -3184,6 +3212,7 @@ int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size,
 {
 	struct kmem_cache_cpu *c;
 	int i;
+	struct kmem_cache *root_s = s;
 
 	/* memcg and kmem_cache debug support */
 	s = slab_pre_alloc_hook(s, flags);
@@ -3198,8 +3227,19 @@ int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size,
 	c = this_cpu_ptr(s->cpu_slab);
 
 	for (i = 0; i < size; i++) {
-		void *object = c->freelist;
+		/*
+		 * 5.4 note: passing in original cachep to avoid problems with memcg
+		 * accounting. Making KFENCE properly work with memcgs on older kernels
+		 * is not worth the effort.
+		 */
+		void *object = kfence_alloc(root_s, s->object_size, flags);
 
+		if (unlikely(object)) {
+			p[i] = object;
+			continue;
+		}
+
+		object = c->freelist;
 		if (unlikely(!object)) {
 			/*
 			 * We may have removed an object from c->freelist using
@@ -3856,7 +3896,7 @@ void *__kmalloc(size_t size, gfp_t flags)
 	if (unlikely(ZERO_OR_NULL_PTR(s)))
 		return s;
 
-	ret = slab_alloc(s, flags, _RET_IP_);
+	ret = slab_alloc(s, flags, _RET_IP_, size);
 
 	trace_kmalloc(_RET_IP_, ret, size, s->size, flags);
 
@@ -3904,7 +3944,7 @@ void *__kmalloc_node(size_t size, gfp_t flags, int node)
 	if (unlikely(ZERO_OR_NULL_PTR(s)))
 		return s;
 
-	ret = slab_alloc_node(s, flags, node, _RET_IP_);
+	ret = slab_alloc_node(s, flags, node, _RET_IP_, size);
 
 	trace_kmalloc_node(_RET_IP_, ret, size, s->size, flags, node);
 
@@ -3930,6 +3970,7 @@ void __check_heap_object(const void *ptr, unsigned long n, struct page *page,
 	struct kmem_cache *s;
 	unsigned int offset;
 	size_t object_size;
+	bool is_kfence = is_kfence_address(ptr);
 
 	ptr = kasan_reset_tag(ptr);
 
@@ -3942,10 +3983,13 @@ void __check_heap_object(const void *ptr, unsigned long n, struct page *page,
 			       to_user, 0, n);
 
 	/* Find offset within object. */
-	offset = (ptr - page_address(page)) % s->size;
+	if (is_kfence)
+		offset = ptr - kfence_object_start(ptr);
+	else
+		offset = (ptr - page_address(page)) % s->size;
 
 	/* Adjust for redzone and reject if within the redzone. */
-	if (kmem_cache_debug(s) && s->flags & SLAB_RED_ZONE) {
+	if (!is_kfence && kmem_cache_debug(s) && s->flags & SLAB_RED_ZONE) {
 		if (offset < s->red_left_pad)
 			usercopy_abort("SLUB object in left red zone",
 				       s->name, to_user, offset, n);
@@ -4392,13 +4436,14 @@ void *__kmalloc_track_caller(size_t size, gfp_t gfpflags, unsigned long caller)
 	if (unlikely(ZERO_OR_NULL_PTR(s)))
 		return s;
 
-	ret = slab_alloc(s, gfpflags, caller);
+	ret = slab_alloc(s, gfpflags, caller, size);
 
 	/* Honor the call site pointer we received. */
 	trace_kmalloc(caller, ret, size, s->size, gfpflags);
 
 	return ret;
 }
+EXPORT_SYMBOL(__kmalloc_track_caller);
 
 #ifdef CONFIG_NUMA
 void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags,
@@ -4422,13 +4467,14 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags,
 	if (unlikely(ZERO_OR_NULL_PTR(s)))
 		return s;
 
-	ret = slab_alloc_node(s, gfpflags, node, caller);
+	ret = slab_alloc_node(s, gfpflags, node, caller, size);
 
 	/* Honor the call site pointer we received. */
 	trace_kmalloc_node(caller, ret, size, s->size, gfpflags, node);
 
 	return ret;
 }
+EXPORT_SYMBOL(__kmalloc_node_track_caller);
 #endif
 
 #ifdef CONFIG_SYSFS
diff --git a/mm/swapfile.c b/mm/swapfile.c
index 7947633..b90393e1 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -3157,7 +3157,6 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
 		error = -EBUSY;
 		goto bad_swap_unlock_inode;
 	}
-
 	/*
 	 * Read the swap header.
 	 */
@@ -3168,7 +3167,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
 	page = read_mapping_page(mapping, 0, swap_file);
 	if (IS_ERR(page)) {
 		error = PTR_ERR(page);
-		goto bad_swap;
+		goto bad_swap_unlock_inode;
 	}
 	swap_header = kmap(page);
 
diff --git a/mm/vmstat.c b/mm/vmstat.c
index a822204..3748615 100644
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
@@ -1118,10 +1118,11 @@ const char * const vmstat_text[] = {
 	"nr_mlock",
 	"nr_page_table_pages",
 	"nr_kernel_stack",
-	"nr_bounce",
-#if IS_ENABLED(CONFIG_ZSMALLOC)
-	"nr_zspages",
+#if IS_ENABLED(CONFIG_SHADOW_CALL_STACK)
+	"nr_shadow_call_stack_bytes",
 #endif
+	"nr_bounce",
+	"nr_zspages",
 	"nr_free_cma",
 
 	/* enum numa_stat_item counters */
diff --git a/net/Kconfig b/net/Kconfig
index 0b2fecc..2ce3667f 100644
--- a/net/Kconfig
+++ b/net/Kconfig
@@ -190,7 +190,6 @@
 	depends on NETFILTER_ADVANCED
 	select NETFILTER_FAMILY_BRIDGE
 	select SKB_EXTENSIONS
-	default m
 	---help---
 	  Enabling this option will let arptables resp. iptables see bridged
 	  ARP resp. IP traffic. If you want a bridging firewall, you probably
diff --git a/net/core/dev.c b/net/core/dev.c
index d90e8bd..65e2e7c 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -143,6 +143,7 @@
 #include <linux/net_namespace.h>
 #include <linux/indirect_call_wrapper.h>
 #include <net/devlink.h>
+#include <trace/hooks/net.h>
 
 #include "net-sysfs.h"
 
@@ -302,6 +303,12 @@ EXPORT_PER_CPU_SYMBOL(softnet_data);
 
 static inline struct list_head *ptype_head(const struct packet_type *pt)
 {
+	struct list_head vendor_pt = { .next  = NULL, };
+
+	trace_android_vh_ptype_head(pt, &vendor_pt);
+	if (vendor_pt.next)
+		return vendor_pt.next;
+
 	if (pt->type == htons(ETH_P_ALL))
 		return pt->dev ? &pt->dev->ptype_all : &ptype_all;
 	else
@@ -3025,7 +3032,7 @@ struct sk_buff *__skb_gso_segment(struct sk_buff *skb,
 
 	segs = skb_mac_gso_segment(skb, features);
 
-	if (unlikely(skb_needs_check(skb, tx_path) && !IS_ERR(segs)))
+	if (segs != skb && unlikely(skb_needs_check(skb, tx_path) && !IS_ERR(segs)))
 		skb_warn_bad_offload(skb);
 
 	return segs;
@@ -9042,7 +9049,7 @@ int register_netdevice(struct net_device *dev)
 	/* Transfer changeable features to wanted_features and enable
 	 * software offloads (GSO and GRO).
 	 */
-	dev->hw_features |= NETIF_F_SOFT_FEATURES;
+	dev->hw_features |= (NETIF_F_SOFT_FEATURES | NETIF_F_SOFT_FEATURES_OFF);
 	dev->features |= NETIF_F_SOFT_FEATURES;
 
 	if (dev->netdev_ops->ndo_udp_tunnel_add) {
diff --git a/net/core/filter.c b/net/core/filter.c
index 2fa10fd..7b1b678 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -3148,8 +3148,9 @@ static int bpf_skb_net_shrink(struct sk_buff *skb, u32 off, u32 len_diff,
 
 static u32 __bpf_skb_max_len(const struct sk_buff *skb)
 {
-	return skb->dev ? skb->dev->mtu + skb->dev->hard_header_len :
-			  SKB_MAX_ALLOC;
+	if (skb_at_tc_ingress(skb) || !skb->dev)
+		return SKB_MAX_ALLOC;
+	return skb->dev->mtu + skb->dev->hard_header_len;
 }
 
 BPF_CALL_4(bpf_skb_adjust_room, struct sk_buff *, skb, s32, len_diff,
@@ -5997,6 +5998,8 @@ bpf_base_func_proto(enum bpf_func_id func_id)
 		return &bpf_tail_call_proto;
 	case BPF_FUNC_ktime_get_ns:
 		return &bpf_ktime_get_ns_proto;
+	case BPF_FUNC_ktime_get_boot_ns:
+		return &bpf_ktime_get_boot_ns_proto;
 	default:
 		break;
 	}
@@ -6161,6 +6164,8 @@ tc_cls_act_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
 		return &bpf_skb_adjust_room_proto;
 	case BPF_FUNC_skb_change_tail:
 		return &bpf_skb_change_tail_proto;
+	case BPF_FUNC_skb_change_head:
+		return &bpf_skb_change_head_proto;
 	case BPF_FUNC_skb_get_tunnel_key:
 		return &bpf_skb_get_tunnel_key_proto;
 	case BPF_FUNC_skb_set_tunnel_key:
@@ -7226,6 +7231,27 @@ static u32 flow_dissector_convert_ctx_access(enum bpf_access_type type,
 	return insn - insn_buf;
 }
 
+static struct bpf_insn *bpf_convert_shinfo_access(const struct bpf_insn *si,
+						  struct bpf_insn *insn)
+{
+	/* si->dst_reg = skb_shinfo(SKB); */
+#ifdef NET_SKBUFF_DATA_USES_OFFSET
+	*insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct sk_buff, end),
+			      BPF_REG_AX, si->src_reg,
+			      offsetof(struct sk_buff, end));
+	*insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct sk_buff, head),
+			      si->dst_reg, si->src_reg,
+			      offsetof(struct sk_buff, head));
+	*insn++ = BPF_ALU64_REG(BPF_ADD, si->dst_reg, BPF_REG_AX);
+#else
+	*insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct sk_buff, end),
+			      si->dst_reg, si->src_reg,
+			      offsetof(struct sk_buff, end));
+#endif
+
+	return insn;
+}
+
 static u32 bpf_convert_ctx_access(enum bpf_access_type type,
 				  const struct bpf_insn *si,
 				  struct bpf_insn *insn_buf,
@@ -7548,26 +7574,21 @@ static u32 bpf_convert_ctx_access(enum bpf_access_type type,
 		break;
 
 	case offsetof(struct __sk_buff, gso_segs):
-		/* si->dst_reg = skb_shinfo(SKB); */
-#ifdef NET_SKBUFF_DATA_USES_OFFSET
-		*insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct sk_buff, end),
-				      BPF_REG_AX, si->src_reg,
-				      offsetof(struct sk_buff, end));
-		*insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct sk_buff, head),
-				      si->dst_reg, si->src_reg,
-				      offsetof(struct sk_buff, head));
-		*insn++ = BPF_ALU64_REG(BPF_ADD, si->dst_reg, BPF_REG_AX);
-#else
-		*insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct sk_buff, end),
-				      si->dst_reg, si->src_reg,
-				      offsetof(struct sk_buff, end));
-#endif
+		insn = bpf_convert_shinfo_access(si, insn);
 		*insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct skb_shared_info, gso_segs),
 				      si->dst_reg, si->dst_reg,
 				      bpf_target_off(struct skb_shared_info,
 						     gso_segs, 2,
 						     target_size));
 		break;
+	case offsetof(struct __sk_buff, gso_size):
+		insn = bpf_convert_shinfo_access(si, insn);
+		*insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct skb_shared_info, gso_size),
+				      si->dst_reg, si->dst_reg,
+				      bpf_target_off(struct skb_shared_info,
+						     gso_size, 2,
+						     target_size));
+		break;
 	case offsetof(struct __sk_buff, wire_len):
 		BUILD_BUG_ON(FIELD_SIZEOF(struct qdisc_skb_cb, pkt_len) != 4);
 
diff --git a/net/core/net-traces.c b/net/core/net-traces.c
index 283ddb2..465362a 100644
--- a/net/core/net-traces.c
+++ b/net/core/net-traces.c
@@ -35,13 +35,11 @@
 #include <trace/events/tcp.h>
 #include <trace/events/fib.h>
 #include <trace/events/qdisc.h>
-#if IS_ENABLED(CONFIG_BRIDGE)
 #include <trace/events/bridge.h>
 EXPORT_TRACEPOINT_SYMBOL_GPL(br_fdb_add);
 EXPORT_TRACEPOINT_SYMBOL_GPL(br_fdb_external_learn_add);
 EXPORT_TRACEPOINT_SYMBOL_GPL(fdb_delete);
 EXPORT_TRACEPOINT_SYMBOL_GPL(br_fdb_update);
-#endif
 
 #if IS_ENABLED(CONFIG_PAGE_POOL)
 #include <trace/events/page_pool.h>
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 45117fa..58a433c 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -75,6 +75,7 @@
 #include <linux/capability.h>
 #include <linux/user_namespace.h>
 #include <linux/indirect_call_wrapper.h>
+#include <trace/hooks/net.h>
 
 #include "datagram.h"
 
@@ -702,6 +703,7 @@ void kfree_skb(struct sk_buff *skb)
 	if (!skb_unref(skb))
 		return;
 
+	trace_android_vh_kfree_skb(skb);
 	trace_kfree_skb(skb, __builtin_return_address(0));
 	__kfree_skb(skb);
 }
@@ -3653,6 +3655,98 @@ static inline skb_frag_t skb_head_frag_to_page_desc(struct sk_buff *frag_skb)
 	return head_frag;
 }
 
+struct sk_buff *skb_segment_list(struct sk_buff *skb,
+				 netdev_features_t features,
+				 unsigned int offset)
+{
+	struct sk_buff *list_skb = skb_shinfo(skb)->frag_list;
+	unsigned int tnl_hlen = skb_tnl_header_len(skb);
+	unsigned int delta_truesize = 0;
+	unsigned int delta_len = 0;
+	struct sk_buff *tail = NULL;
+	struct sk_buff *nskb;
+
+	skb_push(skb, -skb_network_offset(skb) + offset);
+
+	skb_shinfo(skb)->frag_list = NULL;
+
+	do {
+		nskb = list_skb;
+		list_skb = list_skb->next;
+
+		if (!tail)
+			skb->next = nskb;
+		else
+			tail->next = nskb;
+
+		tail = nskb;
+
+		delta_len += nskb->len;
+		delta_truesize += nskb->truesize;
+
+		skb_push(nskb, -skb_network_offset(nskb) + offset);
+
+		skb_release_head_state(nskb);
+		 __copy_skb_header(nskb, skb);
+
+		skb_headers_offset_update(nskb, skb_headroom(nskb) - skb_headroom(skb));
+		skb_copy_from_linear_data_offset(skb, -tnl_hlen,
+						 nskb->data - tnl_hlen,
+						 offset + tnl_hlen);
+
+		if (skb_needs_linearize(nskb, features) &&
+		    __skb_linearize(nskb))
+			goto err_linearize;
+
+	} while (list_skb);
+
+	skb->truesize = skb->truesize - delta_truesize;
+	skb->data_len = skb->data_len - delta_len;
+	skb->len = skb->len - delta_len;
+
+	skb_gso_reset(skb);
+
+	skb->prev = tail;
+
+	if (skb_needs_linearize(skb, features) &&
+	    __skb_linearize(skb))
+		goto err_linearize;
+
+	skb_get(skb);
+
+	return skb;
+
+err_linearize:
+	kfree_skb_list(skb->next);
+	skb->next = NULL;
+	return ERR_PTR(-ENOMEM);
+}
+EXPORT_SYMBOL_GPL(skb_segment_list);
+
+int skb_gro_receive_list(struct sk_buff *p, struct sk_buff *skb)
+{
+	if (unlikely(p->len + skb->len >= 65536))
+		return -E2BIG;
+
+	if (NAPI_GRO_CB(p)->last == p)
+		skb_shinfo(p)->frag_list = skb;
+	else
+		NAPI_GRO_CB(p)->last->next = skb;
+
+	skb_pull(skb, skb_gro_offset(skb));
+
+	NAPI_GRO_CB(p)->last = skb;
+	NAPI_GRO_CB(p)->count++;
+	p->data_len += skb->len;
+	p->truesize += skb->truesize;
+	p->len += skb->len;
+
+	NAPI_GRO_CB(skb)->same_flow = 1;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(skb_gro_receive_list);
+
 /**
  *	skb_segment - Perform protocol segmentation on skb.
  *	@head_skb: buffer to segment
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
index 70f92aa..e37150f 100644
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
@@ -494,6 +494,10 @@ int __inet_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len,
 		goto out;
 
 	snum = ntohs(addr->sin_port);
+	err = -EPERM;
+	if (snum && inet_is_local_unbindable_port(net, snum))
+		goto out;
+
 	err = -EACCES;
 	if (snum && snum < inet_prot_sock(net) &&
 	    !ns_capable(net->user_ns, CAP_NET_BIND_SERVICE))
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
index d00533a..5b7717da 100644
--- a/net/ipv4/icmp.c
+++ b/net/ipv4/icmp.c
@@ -750,6 +750,39 @@ out:;
 }
 EXPORT_SYMBOL(__icmp_send);
 
+#if IS_ENABLED(CONFIG_NF_NAT)
+#include <net/netfilter/nf_conntrack.h>
+void icmp_ndo_send(struct sk_buff *skb_in, int type, int code, __be32 info)
+{
+	struct sk_buff *cloned_skb = NULL;
+	enum ip_conntrack_info ctinfo;
+	struct nf_conn *ct;
+	__be32 orig_ip;
+
+	ct = nf_ct_get(skb_in, &ctinfo);
+	if (!ct || !(ct->status & IPS_SRC_NAT)) {
+		icmp_send(skb_in, type, code, info);
+		return;
+	}
+
+	if (skb_shared(skb_in))
+		skb_in = cloned_skb = skb_clone(skb_in, GFP_ATOMIC);
+
+	if (unlikely(!skb_in || skb_network_header(skb_in) < skb_in->head ||
+	    (skb_network_header(skb_in) + sizeof(struct iphdr)) >
+	    skb_tail_pointer(skb_in) || skb_ensure_writable(skb_in,
+	    skb_network_offset(skb_in) + sizeof(struct iphdr))))
+		goto out;
+
+	orig_ip = ip_hdr(skb_in)->saddr;
+	ip_hdr(skb_in)->saddr = ct->tuplehash[0].tuple.src.u3.ip;
+	icmp_send(skb_in, type, code, info);
+	ip_hdr(skb_in)->saddr = orig_ip;
+out:
+	consume_skb(cloned_skb);
+}
+EXPORT_SYMBOL(icmp_ndo_send);
+#endif
 
 static void icmp_socket_deliver(struct sk_buff *skb, u32 info)
 {
diff --git a/net/ipv4/ip_tunnel_core.c b/net/ipv4/ip_tunnel_core.c
index 1452a97..cfe21c3 100644
--- a/net/ipv4/ip_tunnel_core.c
+++ b/net/ipv4/ip_tunnel_core.c
@@ -446,3 +446,21 @@ void ip_tunnel_unneed_metadata(void)
 	static_branch_dec(&ip_tunnel_metadata_cnt);
 }
 EXPORT_SYMBOL_GPL(ip_tunnel_unneed_metadata);
+
+/* Returns either the correct skb->protocol value, or 0 if invalid. */
+__be16 ip_tunnel_parse_protocol(const struct sk_buff *skb)
+{
+	if (skb_network_header(skb) >= skb->head &&
+	    (skb_network_header(skb) + sizeof(struct iphdr)) <= skb_tail_pointer(skb) &&
+	    ip_hdr(skb)->version == 4)
+		return htons(ETH_P_IP);
+	if (skb_network_header(skb) >= skb->head &&
+	    (skb_network_header(skb) + sizeof(struct ipv6hdr)) <= skb_tail_pointer(skb) &&
+	    ipv6_hdr(skb)->version == 6)
+		return htons(ETH_P_IPV6);
+	return 0;
+}
+EXPORT_SYMBOL(ip_tunnel_parse_protocol);
+
+const struct header_ops ip_tunnel_header_ops = { .parse_protocol = ip_tunnel_parse_protocol };
+EXPORT_SYMBOL(ip_tunnel_header_ops);
diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
index c83a5d0..ef0dff5 100644
--- a/net/ipv4/sysctl_net_ipv4.c
+++ b/net/ipv4/sysctl_net_ipv4.c
@@ -734,6 +734,13 @@ static struct ctl_table ipv4_net_table[] = {
 		.proc_handler	= proc_do_large_bitmap,
 	},
 	{
+		.procname	= "ip_local_unbindable_ports",
+		.data		= &init_net.ipv4.sysctl_local_unbindable_ports,
+		.maxlen		= 65536,
+		.mode		= 0644,
+		.proc_handler	= proc_do_large_bitmap,
+	},
+	{
 		.procname	= "ip_no_pmtu_disc",
 		.data		= &init_net.ipv4.sysctl_ip_no_pmtu_disc,
 		.maxlen		= sizeof(int),
@@ -1341,11 +1348,17 @@ static __net_init int ipv4_sysctl_init_net(struct net *net)
 
 	net->ipv4.sysctl_local_reserved_ports = kzalloc(65536 / 8, GFP_KERNEL);
 	if (!net->ipv4.sysctl_local_reserved_ports)
-		goto err_ports;
+		goto err_reserved_ports;
+
+	net->ipv4.sysctl_local_unbindable_ports = kzalloc(65536 / 8, GFP_KERNEL);
+	if (!net->ipv4.sysctl_local_unbindable_ports)
+		goto err_unbindable_ports;
 
 	return 0;
 
-err_ports:
+err_unbindable_ports:
+	kfree(net->ipv4.sysctl_local_reserved_ports);
+err_reserved_ports:
 	unregister_net_sysctl_table(net->ipv4.ipv4_hdr);
 err_reg:
 	if (!net_eq(net, &init_net))
@@ -1358,6 +1371,7 @@ static __net_exit void ipv4_sysctl_exit_net(struct net *net)
 {
 	struct ctl_table *table;
 
+	kfree(net->ipv4.sysctl_local_unbindable_ports);
 	kfree(net->ipv4.sysctl_local_reserved_ports);
 	table = net->ipv4.ipv4_hdr->ctl_table_arg;
 	unregister_net_sysctl_table(net->ipv4.ipv4_hdr);
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index a1768ded..9ae4590 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -79,6 +79,7 @@
 #include <trace/events/tcp.h>
 #include <linux/jump_label_ratelimit.h>
 #include <net/busy_poll.h>
+#include <trace/hooks/net.h>
 
 int sysctl_tcp_max_orphans __read_mostly = NR_FILE;
 
@@ -4486,6 +4487,7 @@ static bool tcp_ooo_try_coalesce(struct sock *sk,
 
 static void tcp_drop(struct sock *sk, struct sk_buff *skb)
 {
+	trace_android_vh_kfree_skb(skb);
 	sk_drops_add(sk, skb);
 	__kfree_skb(skb);
 }
diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c
index d7c64e9..9298b0e 100644
--- a/net/ipv4/udp_offload.c
+++ b/net/ipv4/udp_offload.c
@@ -184,6 +184,20 @@ struct sk_buff *skb_udp_tunnel_segment(struct sk_buff *skb,
 }
 EXPORT_SYMBOL(skb_udp_tunnel_segment);
 
+static struct sk_buff *__udp_gso_segment_list(struct sk_buff *skb,
+					      netdev_features_t features)
+{
+	unsigned int mss = skb_shinfo(skb)->gso_size;
+
+	skb = skb_segment_list(skb, features, skb_mac_header_len(skb));
+	if (IS_ERR(skb))
+		return skb;
+
+	udp_hdr(skb)->len = htons(sizeof(struct udphdr) + mss);
+
+	return skb;
+}
+
 struct sk_buff *__udp_gso_segment(struct sk_buff *gso_skb,
 				  netdev_features_t features)
 {
@@ -196,6 +210,9 @@ struct sk_buff *__udp_gso_segment(struct sk_buff *gso_skb,
 	__sum16 check;
 	__be16 newlen;
 
+	if (skb_shinfo(gso_skb)->gso_type & SKB_GSO_FRAGLIST)
+		return __udp_gso_segment_list(gso_skb, features);
+
 	mss = skb_shinfo(gso_skb)->gso_size;
 	if (gso_skb->len <= sizeof(*uh) + mss)
 		return ERR_PTR(-EINVAL);
@@ -354,6 +371,7 @@ static struct sk_buff *udp_gro_receive_segment(struct list_head *head,
 	struct udphdr *uh2;
 	struct sk_buff *p;
 	unsigned int ulen;
+	int ret = 0;
 
 	/* requires non zero csum, for symmetry with GSO */
 	if (!uh->check) {
@@ -369,7 +387,6 @@ static struct sk_buff *udp_gro_receive_segment(struct list_head *head,
 	}
 	/* pull encapsulating udp header */
 	skb_gro_pull(skb, sizeof(struct udphdr));
-	skb_gro_postpull_rcsum(skb, uh, sizeof(struct udphdr));
 
 	list_for_each_entry(p, head, list) {
 		if (!NAPI_GRO_CB(p)->same_flow)
@@ -383,14 +400,40 @@ static struct sk_buff *udp_gro_receive_segment(struct list_head *head,
 			continue;
 		}
 
+		if (NAPI_GRO_CB(skb)->is_flist != NAPI_GRO_CB(p)->is_flist) {
+			NAPI_GRO_CB(skb)->flush = 1;
+			return p;
+		}
+
 		/* Terminate the flow on len mismatch or if it grow "too much".
 		 * Under small packet flood GRO count could elsewhere grow a lot
 		 * leading to excessive truesize values.
 		 * On len mismatch merge the first packet shorter than gso_size,
 		 * otherwise complete the GRO packet.
 		 */
-		if (ulen > ntohs(uh2->len) || skb_gro_receive(p, skb) ||
-		    ulen != ntohs(uh2->len) ||
+		if (ulen > ntohs(uh2->len)) {
+			pp = p;
+		} else {
+			if (NAPI_GRO_CB(skb)->is_flist) {
+				if (!pskb_may_pull(skb, skb_gro_offset(skb))) {
+					NAPI_GRO_CB(skb)->flush = 1;
+					return NULL;
+				}
+				if ((skb->ip_summed != p->ip_summed) ||
+				    (skb->csum_level != p->csum_level)) {
+					NAPI_GRO_CB(skb)->flush = 1;
+					return NULL;
+				}
+				ret = skb_gro_receive_list(p, skb);
+			} else {
+				skb_gro_postpull_rcsum(skb, uh,
+						       sizeof(struct udphdr));
+
+				ret = skb_gro_receive(p, skb);
+			}
+		}
+
+		if (ret || ulen != ntohs(uh2->len) ||
 		    NAPI_GRO_CB(p)->count >= UDP_GRO_CNT_MAX)
 			pp = p;
 
@@ -401,36 +444,30 @@ static struct sk_buff *udp_gro_receive_segment(struct list_head *head,
 	return NULL;
 }
 
-INDIRECT_CALLABLE_DECLARE(struct sock *udp6_lib_lookup_skb(struct sk_buff *skb,
-						   __be16 sport, __be16 dport));
 struct sk_buff *udp_gro_receive(struct list_head *head, struct sk_buff *skb,
-				struct udphdr *uh, udp_lookup_t lookup)
+				struct udphdr *uh, struct sock *sk)
 {
 	struct sk_buff *pp = NULL;
 	struct sk_buff *p;
 	struct udphdr *uh2;
 	unsigned int off = skb_gro_offset(skb);
 	int flush = 1;
-	struct sock *sk;
 
-	rcu_read_lock();
-	sk = INDIRECT_CALL_INET(lookup, udp6_lib_lookup_skb,
-				udp4_lib_lookup_skb, skb, uh->source, uh->dest);
-	if (!sk)
-		goto out_unlock;
+	NAPI_GRO_CB(skb)->is_flist = 0;
+	if (skb->dev->features & NETIF_F_GRO_FRAGLIST)
+		NAPI_GRO_CB(skb)->is_flist = sk ? !udp_sk(sk)->gro_enabled: 1;
 
-	if (udp_sk(sk)->gro_enabled) {
+	if ((sk && udp_sk(sk)->gro_enabled) || NAPI_GRO_CB(skb)->is_flist) {
 		pp = call_gro_receive(udp_gro_receive_segment, head, skb);
-		rcu_read_unlock();
 		return pp;
 	}
 
-	if (NAPI_GRO_CB(skb)->encap_mark ||
+	if (!sk || NAPI_GRO_CB(skb)->encap_mark ||
 	    (skb->ip_summed != CHECKSUM_PARTIAL &&
 	     NAPI_GRO_CB(skb)->csum_cnt == 0 &&
 	     !NAPI_GRO_CB(skb)->csum_valid) ||
 	    !udp_sk(sk)->gro_receive)
-		goto out_unlock;
+		goto out;
 
 	/* mark that this skb passed once through the tunnel gro layer */
 	NAPI_GRO_CB(skb)->encap_mark = 1;
@@ -457,8 +494,7 @@ struct sk_buff *udp_gro_receive(struct list_head *head, struct sk_buff *skb,
 	skb_gro_postpull_rcsum(skb, uh, sizeof(struct udphdr));
 	pp = call_gro_receive_sk(udp_sk(sk)->gro_receive, sk, head, skb);
 
-out_unlock:
-	rcu_read_unlock();
+out:
 	skb_gro_flush_final(skb, pp, flush);
 	return pp;
 }
@@ -468,8 +504,10 @@ INDIRECT_CALLABLE_SCOPE
 struct sk_buff *udp4_gro_receive(struct list_head *head, struct sk_buff *skb)
 {
 	struct udphdr *uh = udp_gro_udphdr(skb);
+	struct sk_buff *pp;
+	struct sock *sk;
 
-	if (unlikely(!uh) || !static_branch_unlikely(&udp_encap_needed_key))
+	if (unlikely(!uh))
 		goto flush;
 
 	/* Don't bother verifying checksum if we're going to flush anyway. */
@@ -484,7 +522,11 @@ struct sk_buff *udp4_gro_receive(struct list_head *head, struct sk_buff *skb)
 					     inet_gro_compute_pseudo);
 skip:
 	NAPI_GRO_CB(skb)->is_ipv6 = 0;
-	return udp_gro_receive(head, skb, uh, udp4_lib_lookup_skb);
+	rcu_read_lock();
+	sk = static_branch_unlikely(&udp_encap_needed_key) ? udp4_lib_lookup_skb(skb, uh->source, uh->dest) : NULL;
+	pp = udp_gro_receive(head, skb, uh, sk);
+	rcu_read_unlock();
+	return pp;
 
 flush:
 	NAPI_GRO_CB(skb)->flush = 1;
@@ -517,9 +559,7 @@ int udp_gro_complete(struct sk_buff *skb, int nhoff,
 	rcu_read_lock();
 	sk = INDIRECT_CALL_INET(lookup, udp6_lib_lookup_skb,
 				udp4_lib_lookup_skb, skb, uh->source, uh->dest);
-	if (sk && udp_sk(sk)->gro_enabled) {
-		err = udp_gro_complete_segment(skb);
-	} else if (sk && udp_sk(sk)->gro_complete) {
+	if (sk && udp_sk(sk)->gro_complete) {
 		skb_shinfo(skb)->gso_type = uh->check ? SKB_GSO_UDP_TUNNEL_CSUM
 					: SKB_GSO_UDP_TUNNEL;
 
@@ -529,6 +569,8 @@ int udp_gro_complete(struct sk_buff *skb, int nhoff,
 		skb->encapsulation = 1;
 		err = udp_sk(sk)->gro_complete(sk, skb,
 				nhoff + sizeof(struct udphdr));
+	} else {
+		err = udp_gro_complete_segment(skb);
 	}
 	rcu_read_unlock();
 
@@ -544,6 +586,23 @@ INDIRECT_CALLABLE_SCOPE int udp4_gro_complete(struct sk_buff *skb, int nhoff)
 	const struct iphdr *iph = ip_hdr(skb);
 	struct udphdr *uh = (struct udphdr *)(skb->data + nhoff);
 
+	if (NAPI_GRO_CB(skb)->is_flist) {
+		uh->len = htons(skb->len - nhoff);
+
+		skb_shinfo(skb)->gso_type |= (SKB_GSO_FRAGLIST|SKB_GSO_UDP_L4);
+		skb_shinfo(skb)->gso_segs = NAPI_GRO_CB(skb)->count;
+
+		if (skb->ip_summed == CHECKSUM_UNNECESSARY) {
+			if (skb->csum_level < SKB_MAX_CSUM_LEVEL)
+				skb->csum_level++;
+		} else {
+			skb->ip_summed = CHECKSUM_UNNECESSARY;
+			skb->csum_level = 0;
+		}
+
+		return 0;
+	}
+
 	if (uh->check)
 		uh->check = ~udp_v4_check(skb->len - nhoff, iph->saddr,
 					  iph->daddr, 0);
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 52feab2..d147dd5 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -217,6 +217,7 @@ static struct ipv6_devconf ipv6_devconf __read_mostly = {
 	.accept_ra_rt_info_max_plen = 0,
 #endif
 #endif
+	.accept_ra_rt_table	= 0,
 	.proxy_ndp		= 0,
 	.accept_source_route	= 0,	/* we do not accept RH0 by default. */
 	.disable_ipv6		= 0,
@@ -271,6 +272,7 @@ static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
 	.accept_ra_rt_info_max_plen = 0,
 #endif
 #endif
+	.accept_ra_rt_table	= 0,
 	.proxy_ndp		= 0,
 	.accept_source_route	= 0,	/* we do not accept RH0 by default. */
 	.disable_ipv6		= 0,
@@ -2363,6 +2365,26 @@ static void  ipv6_try_regen_rndid(struct inet6_dev *idev, struct in6_addr *tmpad
 		ipv6_regen_rndid(idev);
 }
 
+u32 addrconf_rt_table(const struct net_device *dev, u32 default_table)
+{
+	struct inet6_dev *idev = in6_dev_get(dev);
+	int sysctl;
+	u32 table;
+
+	if (!idev)
+		return default_table;
+	sysctl = idev->cnf.accept_ra_rt_table;
+	if (sysctl == 0) {
+		table = default_table;
+	} else if (sysctl > 0) {
+		table = (u32) sysctl;
+	} else {
+		table = (unsigned) dev->ifindex + (-sysctl);
+	}
+	in6_dev_put(idev);
+	return table;
+}
+
 /*
  *	Add prefix route.
  */
@@ -2373,7 +2395,7 @@ addrconf_prefix_route(struct in6_addr *pfx, int plen, u32 metric,
 		      u32 flags, gfp_t gfp_flags)
 {
 	struct fib6_config cfg = {
-		.fc_table = l3mdev_fib_table(dev) ? : RT6_TABLE_PREFIX,
+		.fc_table = l3mdev_fib_table(dev) ? : addrconf_rt_table(dev, RT6_TABLE_PREFIX),
 		.fc_metric = metric ? : IP6_RT_PRIO_ADDRCONF,
 		.fc_ifindex = dev->ifindex,
 		.fc_expires = expires,
@@ -2408,7 +2430,7 @@ static struct fib6_info *addrconf_get_prefix_route(const struct in6_addr *pfx,
 	struct fib6_node *fn;
 	struct fib6_info *rt = NULL;
 	struct fib6_table *table;
-	u32 tb_id = l3mdev_fib_table(dev) ? : RT6_TABLE_PREFIX;
+	u32 tb_id = l3mdev_fib_table(dev) ? : addrconf_rt_table(dev, RT6_TABLE_PREFIX);
 
 	table = fib6_get_table(dev_net(dev), tb_id);
 	if (!table)
@@ -6683,6 +6705,13 @@ static const struct ctl_table addrconf_sysctl[] = {
 #endif
 #endif
 	{
+		.procname	= "accept_ra_rt_table",
+		.data		= &ipv6_devconf.accept_ra_rt_table,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= proc_dointvec,
+	},
+	{
 		.procname	= "proxy_ndp",
 		.data		= &ipv6_devconf.proxy_ndp,
 		.maxlen		= sizeof(int),
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
index 14ac1d9..ff76df5 100644
--- a/net/ipv6/af_inet6.c
+++ b/net/ipv6/af_inet6.c
@@ -292,6 +292,8 @@ static int __inet6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len,
 		return -EINVAL;
 
 	snum = ntohs(addr->sin6_port);
+	if (snum && inet_is_local_unbindable_port(net, snum))
+		return -EPERM;
 	if (snum && snum < inet_prot_sock(net) &&
 	    !ns_capable(net->user_ns, CAP_NET_BIND_SERVICE))
 		return -EACCES;
diff --git a/net/ipv6/ip6_icmp.c b/net/ipv6/ip6_icmp.c
index 0204549..e008675 100644
--- a/net/ipv6/ip6_icmp.c
+++ b/net/ipv6/ip6_icmp.c
@@ -45,4 +45,38 @@ void icmpv6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info)
 	rcu_read_unlock();
 }
 EXPORT_SYMBOL(icmpv6_send);
+
+#if IS_ENABLED(CONFIG_NF_NAT)
+#include <net/netfilter/nf_conntrack.h>
+void icmpv6_ndo_send(struct sk_buff *skb_in, u8 type, u8 code, __u32 info)
+{
+	struct sk_buff *cloned_skb = NULL;
+	enum ip_conntrack_info ctinfo;
+	struct in6_addr orig_ip;
+	struct nf_conn *ct;
+
+	ct = nf_ct_get(skb_in, &ctinfo);
+	if (!ct || !(ct->status & IPS_SRC_NAT)) {
+		icmpv6_send(skb_in, type, code, info);
+		return;
+	}
+
+	if (skb_shared(skb_in))
+		skb_in = cloned_skb = skb_clone(skb_in, GFP_ATOMIC);
+
+	if (unlikely(!skb_in || skb_network_header(skb_in) < skb_in->head ||
+	    (skb_network_header(skb_in) + sizeof(struct ipv6hdr)) >
+	    skb_tail_pointer(skb_in) || skb_ensure_writable(skb_in,
+	    skb_network_offset(skb_in) + sizeof(struct ipv6hdr))))
+		goto out;
+
+	orig_ip = ipv6_hdr(skb_in)->saddr;
+	ipv6_hdr(skb_in)->saddr = ct->tuplehash[0].tuple.src.u3.in6;
+	icmpv6_send(skb_in, type, code, info);
+	ipv6_hdr(skb_in)->saddr = orig_ip;
+out:
+	consume_skb(cloned_skb);
+}
+EXPORT_SYMBOL(icmpv6_ndo_send);
+#endif
 #endif
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
index 118e19c..455ef84 100644
--- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c
@@ -199,6 +199,7 @@ static inline int ndisc_is_useropt(const struct net_device *dev,
 	return opt->nd_opt_type == ND_OPT_RDNSS ||
 		opt->nd_opt_type == ND_OPT_DNSSL ||
 		opt->nd_opt_type == ND_OPT_CAPTIVE_PORTAL ||
+		opt->nd_opt_type == ND_OPT_PREF64 ||
 		ndisc_ops_is_useropt(dev, opt->nd_opt_type);
 }
 
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 46df6345..792656c 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -4124,7 +4124,7 @@ static struct fib6_info *rt6_get_route_info(struct net *net,
 					   const struct in6_addr *gwaddr,
 					   struct net_device *dev)
 {
-	u32 tb_id = l3mdev_fib_table(dev) ? : RT6_TABLE_INFO;
+	u32 tb_id = l3mdev_fib_table(dev) ? : addrconf_rt_table(dev, RT6_TABLE_INFO);
 	int ifindex = dev->ifindex;
 	struct fib6_node *fn;
 	struct fib6_info *rt = NULL;
@@ -4178,7 +4178,7 @@ static struct fib6_info *rt6_add_route_info(struct net *net,
 		.fc_nlinfo.nl_net = net,
 	};
 
-	cfg.fc_table = l3mdev_fib_table(dev) ? : RT6_TABLE_INFO,
+	cfg.fc_table = l3mdev_fib_table(dev) ? : addrconf_rt_table(dev, RT6_TABLE_INFO),
 	cfg.fc_dst = *prefix;
 	cfg.fc_gateway = *gwaddr;
 
@@ -4196,7 +4196,7 @@ struct fib6_info *rt6_get_dflt_router(struct net *net,
 				     const struct in6_addr *addr,
 				     struct net_device *dev)
 {
-	u32 tb_id = l3mdev_fib_table(dev) ? : RT6_TABLE_DFLT;
+	u32 tb_id = l3mdev_fib_table(dev) ? : addrconf_rt_table(dev, RT6_TABLE_DFLT);
 	struct fib6_info *rt;
 	struct fib6_table *table;
 
@@ -4230,7 +4230,7 @@ struct fib6_info *rt6_add_dflt_router(struct net *net,
 				     unsigned int pref)
 {
 	struct fib6_config cfg = {
-		.fc_table	= l3mdev_fib_table(dev) ? : RT6_TABLE_DFLT,
+		.fc_table	= l3mdev_fib_table(dev) ? : addrconf_rt_table(dev, RT6_TABLE_DFLT),
 		.fc_metric	= IP6_RT_PRIO_USER,
 		.fc_ifindex	= dev->ifindex,
 		.fc_flags	= RTF_GATEWAY | RTF_ADDRCONF | RTF_DEFAULT |
@@ -4255,47 +4255,24 @@ struct fib6_info *rt6_add_dflt_router(struct net *net,
 	return rt6_get_dflt_router(net, gwaddr, dev);
 }
 
-static void __rt6_purge_dflt_routers(struct net *net,
-				     struct fib6_table *table)
+static int rt6_addrconf_purge(struct fib6_info *rt, void *arg)
 {
-	struct fib6_info *rt;
+	struct net_device *dev = fib6_info_nh_dev(rt);
+	struct inet6_dev *idev = dev ? __in6_dev_get(dev) : NULL;
 
-restart:
-	rcu_read_lock();
-	for_each_fib6_node_rt_rcu(&table->tb6_root) {
-		struct net_device *dev = fib6_info_nh_dev(rt);
-		struct inet6_dev *idev = dev ? __in6_dev_get(dev) : NULL;
-
-		if (rt->fib6_flags & (RTF_DEFAULT | RTF_ADDRCONF) &&
-		    (!idev || idev->cnf.accept_ra != 2) &&
-		    fib6_info_hold_safe(rt)) {
-			rcu_read_unlock();
-			ip6_del_rt(net, rt);
-			goto restart;
-		}
+	if (rt->fib6_flags & (RTF_DEFAULT | RTF_ADDRCONF) &&
+	    (!idev || idev->cnf.accept_ra != 2)) {
+		/* Delete this route. See fib6_clean_tree() */
+		return -1;
 	}
-	rcu_read_unlock();
 
-	table->flags &= ~RT6_TABLE_HAS_DFLT_ROUTER;
+	/* Continue walking */
+	return 0;
 }
 
 void rt6_purge_dflt_routers(struct net *net)
 {
-	struct fib6_table *table;
-	struct hlist_head *head;
-	unsigned int h;
-
-	rcu_read_lock();
-
-	for (h = 0; h < FIB6_TABLE_HASHSZ; h++) {
-		head = &net->ipv6.fib_table_hash[h];
-		hlist_for_each_entry_rcu(table, head, tb6_hlist) {
-			if (table->flags & RT6_TABLE_HAS_DFLT_ROUTER)
-				__rt6_purge_dflt_routers(net, table);
-		}
-	}
-
-	rcu_read_unlock();
+	fib6_clean_all(net, rt6_addrconf_purge, NULL);
 }
 
 static void rtmsg_to_fib6_config(struct net *net,
diff --git a/net/ipv6/udp_offload.c b/net/ipv6/udp_offload.c
index 64b8f05..7a46bd3 100644
--- a/net/ipv6/udp_offload.c
+++ b/net/ipv6/udp_offload.c
@@ -115,8 +115,10 @@ INDIRECT_CALLABLE_SCOPE
 struct sk_buff *udp6_gro_receive(struct list_head *head, struct sk_buff *skb)
 {
 	struct udphdr *uh = udp_gro_udphdr(skb);
+	struct sk_buff *pp;
+	struct sock *sk;
 
-	if (unlikely(!uh) || !static_branch_unlikely(&udpv6_encap_needed_key))
+	if (unlikely(!uh))
 		goto flush;
 
 	/* Don't bother verifying checksum if we're going to flush anyway. */
@@ -132,7 +134,11 @@ struct sk_buff *udp6_gro_receive(struct list_head *head, struct sk_buff *skb)
 
 skip:
 	NAPI_GRO_CB(skb)->is_ipv6 = 1;
-	return udp_gro_receive(head, skb, uh, udp6_lib_lookup_skb);
+	rcu_read_lock();
+	sk = static_branch_unlikely(&udpv6_encap_needed_key) ? udp6_lib_lookup_skb(skb, uh->source, uh->dest) : NULL;
+	pp = udp_gro_receive(head, skb, uh, sk);
+	rcu_read_unlock();
+	return pp;
 
 flush:
 	NAPI_GRO_CB(skb)->flush = 1;
@@ -144,6 +150,23 @@ INDIRECT_CALLABLE_SCOPE int udp6_gro_complete(struct sk_buff *skb, int nhoff)
 	const struct ipv6hdr *ipv6h = ipv6_hdr(skb);
 	struct udphdr *uh = (struct udphdr *)(skb->data + nhoff);
 
+	if (NAPI_GRO_CB(skb)->is_flist) {
+		uh->len = htons(skb->len - nhoff);
+
+		skb_shinfo(skb)->gso_type |= (SKB_GSO_FRAGLIST|SKB_GSO_UDP_L4);
+		skb_shinfo(skb)->gso_segs = NAPI_GRO_CB(skb)->count;
+
+		if (skb->ip_summed == CHECKSUM_UNNECESSARY) {
+			if (skb->csum_level < SKB_MAX_CSUM_LEVEL)
+				skb->csum_level++;
+		} else {
+			skb->ip_summed = CHECKSUM_UNNECESSARY;
+			skb->csum_level = 0;
+		}
+
+		return 0;
+	}
+
 	if (uh->check)
 		uh->check = ~udp_v6_check(skb->len - nhoff, &ipv6h->saddr,
 					  &ipv6h->daddr, 0);
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index 268f1d8..1f7455a 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -2110,7 +2110,7 @@ enum {
 	IEEE80211_PROBE_FLAG_RANDOM_SN		= BIT(2),
 };
 
-int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer,
+int ieee80211_build_preq_ies(struct ieee80211_sub_if_data *sdata, u8 *buffer,
 			     size_t buffer_len,
 			     struct ieee80211_scan_ies *ie_desc,
 			     const u8 *ie, size_t ie_len,
@@ -2150,6 +2150,8 @@ u8 ieee80211_ie_len_he_cap(struct ieee80211_sub_if_data *sdata, u8 iftype);
 u8 *ieee80211_ie_build_he_cap(u8 *pos,
 			      const struct ieee80211_sta_he_cap *he_cap,
 			      u8 *end);
+void ieee80211_ie_build_he_6ghz_cap(struct ieee80211_sub_if_data *sdata,
+				    struct sk_buff *skb);
 u8 *ieee80211_ie_build_he_oper(u8 *pos);
 int ieee80211_parse_bitrates(struct cfg80211_chan_def *chandef,
 			     const struct ieee80211_supported_band *sband,
diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c
index 36978a0..66e8307 100644
--- a/net/mac80211/mesh.c
+++ b/net/mac80211/mesh.c
@@ -587,6 +587,26 @@ int mesh_add_he_oper_ie(struct ieee80211_sub_if_data *sdata,
 	return 0;
 }
 
+int mesh_add_he_6ghz_cap_ie(struct ieee80211_sub_if_data *sdata,
+			    struct sk_buff *skb)
+{
+	struct ieee80211_supported_band *sband;
+	const struct ieee80211_sband_iftype_data *iftd;
+
+	sband = ieee80211_get_sband(sdata);
+	if (!sband)
+		return -EINVAL;
+
+	iftd = ieee80211_get_sband_iftype_data(sband,
+					       NL80211_IFTYPE_MESH_POINT);
+	/* The device doesn't support HE in mesh mode or at all */
+	if (!iftd)
+		return 0;
+
+	ieee80211_ie_build_he_6ghz_cap(sdata, skb);
+	return 0;
+}
+
 static void ieee80211_mesh_path_timer(struct timer_list *t)
 {
 	struct ieee80211_sub_if_data *sdata =
@@ -766,6 +786,7 @@ ieee80211_mesh_build_beacon(struct ieee80211_if_mesh *ifmsh)
 		   2 + sizeof(struct ieee80211_vht_operation) +
 		   ie_len_he_cap +
 		   2 + 1 + sizeof(struct ieee80211_he_operation) +
+		   2 + 1 + sizeof(struct ieee80211_he_6ghz_capa) +
 		   ifmsh->ie_len;
 
 	bcn = kzalloc(sizeof(*bcn) + head_len + tail_len, GFP_KERNEL);
@@ -885,6 +906,7 @@ ieee80211_mesh_build_beacon(struct ieee80211_if_mesh *ifmsh)
 	    mesh_add_vht_oper_ie(sdata, skb) ||
 	    mesh_add_he_cap_ie(sdata, skb, ie_len_he_cap) ||
 	    mesh_add_he_oper_ie(sdata, skb) ||
+	    mesh_add_he_6ghz_cap_ie(sdata, skb) ||
 	    mesh_add_vendor_ies(sdata, skb))
 		goto out_free;
 
diff --git a/net/mac80211/mesh.h b/net/mac80211/mesh.h
index 953f720..40492d1 100644
--- a/net/mac80211/mesh.h
+++ b/net/mac80211/mesh.h
@@ -222,6 +222,8 @@ int mesh_add_he_cap_ie(struct ieee80211_sub_if_data *sdata,
 		       struct sk_buff *skb, u8 ie_len);
 int mesh_add_he_oper_ie(struct ieee80211_sub_if_data *sdata,
 			struct sk_buff *skb);
+int mesh_add_he_6ghz_cap_ie(struct ieee80211_sub_if_data *sdata,
+			    struct sk_buff *skb);
 void mesh_rmc_free(struct ieee80211_sub_if_data *sdata);
 int mesh_rmc_init(struct ieee80211_sub_if_data *sdata);
 void ieee80211s_init(void);
diff --git a/net/mac80211/mesh_plink.c b/net/mac80211/mesh_plink.c
index 737c5f4..3aca89c 100644
--- a/net/mac80211/mesh_plink.c
+++ b/net/mac80211/mesh_plink.c
@@ -238,6 +238,7 @@ static int mesh_plink_frame_tx(struct ieee80211_sub_if_data *sdata,
 			    2 + sizeof(struct ieee80211_vht_operation) +
 			    ie_len_he_cap +
 			    2 + 1 + sizeof(struct ieee80211_he_operation) +
+			    2 + 1 + sizeof(struct ieee80211_he_6ghz_capa) +
 			    2 + 8 + /* peering IE */
 			    sdata->u.mesh.ie_len);
 	if (!skb)
@@ -328,7 +329,8 @@ static int mesh_plink_frame_tx(struct ieee80211_sub_if_data *sdata,
 		    mesh_add_vht_cap_ie(sdata, skb) ||
 		    mesh_add_vht_oper_ie(sdata, skb) ||
 		    mesh_add_he_cap_ie(sdata, skb, ie_len_he_cap) ||
-		    mesh_add_he_oper_ie(sdata, skb))
+		    mesh_add_he_oper_ie(sdata, skb) ||
+		    mesh_add_he_6ghz_cap_ie(sdata, skb))
 			goto free;
 	}
 
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 17a3a1c..7820615a 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -633,6 +633,8 @@ static void ieee80211_add_he_ie(struct ieee80211_sub_if_data *sdata,
 				      he_cap->he_cap_elem.phy_cap_info);
 	pos = skb_put(skb, he_cap_size);
 	ieee80211_ie_build_he_cap(pos, he_cap, pos + he_cap_size);
+
+	ieee80211_ie_build_he_6ghz_cap(sdata, skb);
 }
 
 static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata)
@@ -699,6 +701,7 @@ static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata)
 			2 + 1 + sizeof(struct ieee80211_he_cap_elem) + /* HE */
 				sizeof(struct ieee80211_he_mcs_nss_supp) +
 				IEEE80211_HE_PPE_THRES_MAX_LEN +
+			2 + 1 + sizeof(struct ieee80211_he_6ghz_capa) +
 			assoc_data->ie_len + /* extra IEs */
 			(assoc_data->fils_kek_len ? 16 /* AES-SIV */ : 0) +
 			9, /* WMM */
diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
index 4d31d96..b8ac4df 100644
--- a/net/mac80211/scan.c
+++ b/net/mac80211/scan.c
@@ -307,8 +307,9 @@ ieee80211_prepare_scan_chandef(struct cfg80211_chan_def *chandef,
 }
 
 /* return false if no more work */
-static bool ieee80211_prep_hw_scan(struct ieee80211_local *local)
+static bool ieee80211_prep_hw_scan(struct ieee80211_sub_if_data *sdata)
 {
+	struct ieee80211_local *local = sdata->local;
 	struct cfg80211_scan_request *req;
 	struct cfg80211_chan_def chandef;
 	u8 bands_used = 0;
@@ -355,7 +356,7 @@ static bool ieee80211_prep_hw_scan(struct ieee80211_local *local)
 	if (req->flags & NL80211_SCAN_FLAG_MIN_PREQ_CONTENT)
 		flags |= IEEE80211_PROBE_FLAG_MIN_CONTENT;
 
-	ielen = ieee80211_build_preq_ies(local,
+	ielen = ieee80211_build_preq_ies(sdata,
 					 (u8 *)local->hw_scan_req->req.ie,
 					 local->hw_scan_ies_bufsize,
 					 &local->hw_scan_req->ies,
@@ -395,9 +396,12 @@ static void __ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted)
 	if (WARN_ON(!local->scan_req))
 		return;
 
+	scan_sdata = rcu_dereference_protected(local->scan_sdata,
+					       lockdep_is_held(&local->mtx));
+
 	if (hw_scan && !aborted &&
 	    !ieee80211_hw_check(&local->hw, SINGLE_SCAN_ON_ALL_BANDS) &&
-	    ieee80211_prep_hw_scan(local)) {
+	    ieee80211_prep_hw_scan(scan_sdata)) {
 		int rc;
 
 		rc = drv_hw_scan(local,
@@ -426,9 +430,6 @@ static void __ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted)
 		cfg80211_scan_done(scan_req, &local->scan_info);
 	}
 	RCU_INIT_POINTER(local->scan_req, NULL);
-
-	scan_sdata = rcu_dereference_protected(local->scan_sdata,
-					       lockdep_is_held(&local->mtx));
 	RCU_INIT_POINTER(local->scan_sdata, NULL);
 
 	local->scanning = 0;
@@ -770,7 +771,7 @@ static int __ieee80211_start_scan(struct ieee80211_sub_if_data *sdata,
 	ieee80211_recalc_idle(local);
 
 	if (hw_scan) {
-		WARN_ON(!ieee80211_prep_hw_scan(local));
+		WARN_ON(!ieee80211_prep_hw_scan(sdata));
 		rc = drv_hw_scan(local, sdata, local->hw_scan_req);
 	} else {
 		rc = ieee80211_start_sw_scan(local, sdata);
@@ -1267,7 +1268,7 @@ int __ieee80211_request_sched_scan_start(struct ieee80211_sub_if_data *sdata,
 
 	ieee80211_prepare_scan_chandef(&chandef, req->scan_width);
 
-	ieee80211_build_preq_ies(local, ie, num_bands * iebufsz,
+	ieee80211_build_preq_ies(sdata, ie, num_bands * iebufsz,
 				 &sched_scan_ies, req->ie,
 				 req->ie_len, bands_used, rate_masks, &chandef,
 				 flags);
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index decd46b3..9fdee72 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -1630,7 +1630,20 @@ void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata,
 	}
 }
 
-static int ieee80211_build_preq_ies_band(struct ieee80211_local *local,
+static u8 *ieee80211_write_he_6ghz_cap(u8 *pos, __le16 cap, u8 *end)
+{
+	if ((end - pos) < 5)
+		return pos;
+
+	*pos++ = WLAN_EID_EXTENSION;
+	*pos++ = 1 + sizeof(cap);
+	*pos++ = WLAN_EID_EXT_HE_6GHZ_CAPA;
+	memcpy(pos, &cap, sizeof(cap));
+
+	return pos + 2;
+}
+
+static int ieee80211_build_preq_ies_band(struct ieee80211_sub_if_data *sdata,
 					 u8 *buffer, size_t buffer_len,
 					 const u8 *ie, size_t ie_len,
 					 enum nl80211_band band,
@@ -1638,6 +1651,7 @@ static int ieee80211_build_preq_ies_band(struct ieee80211_local *local,
 					 struct cfg80211_chan_def *chandef,
 					 size_t *offset, u32 flags)
 {
+	struct ieee80211_local *local = sdata->local;
 	struct ieee80211_supported_band *sband;
 	const struct ieee80211_sta_he_cap *he_cap;
 	u8 *pos = buffer, *end = buffer + buffer_len;
@@ -1815,6 +1829,14 @@ static int ieee80211_build_preq_ies_band(struct ieee80211_local *local,
 		pos = ieee80211_ie_build_he_cap(pos, he_cap, end);
 		if (!pos)
 			goto out_err;
+
+		if (sband->band == NL80211_BAND_6GHZ) {
+			enum nl80211_iftype iftype =
+				ieee80211_vif_type_p2p(&sdata->vif);
+			__le16 cap = ieee80211_get_he_6ghz_capa(sband, iftype);
+
+			pos = ieee80211_write_he_6ghz_cap(pos, cap, end);
+		}
 	}
 
 	/*
@@ -1829,7 +1851,7 @@ static int ieee80211_build_preq_ies_band(struct ieee80211_local *local,
 	return pos - buffer;
 }
 
-int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer,
+int ieee80211_build_preq_ies(struct ieee80211_sub_if_data *sdata, u8 *buffer,
 			     size_t buffer_len,
 			     struct ieee80211_scan_ies *ie_desc,
 			     const u8 *ie, size_t ie_len,
@@ -1844,7 +1866,7 @@ int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer,
 
 	for (i = 0; i < NUM_NL80211_BANDS; i++) {
 		if (bands_used & BIT(i)) {
-			pos += ieee80211_build_preq_ies_band(local,
+			pos += ieee80211_build_preq_ies_band(sdata,
 							     buffer + pos,
 							     buffer_len - pos,
 							     ie, ie_len, i,
@@ -1906,7 +1928,7 @@ struct sk_buff *ieee80211_build_probe_req(struct ieee80211_sub_if_data *sdata,
 		return NULL;
 
 	rate_masks[chan->band] = ratemask;
-	ies_len = ieee80211_build_preq_ies(local, skb_tail_pointer(skb),
+	ies_len = ieee80211_build_preq_ies(sdata, skb_tail_pointer(skb),
 					   skb_tailroom(skb), &dummy_ie_desc,
 					   ie, ie_len, BIT(chan->band),
 					   rate_masks, &chandef, flags);
@@ -2806,6 +2828,54 @@ u8 *ieee80211_ie_build_he_cap(u8 *pos,
 	return pos;
 }
 
+void ieee80211_ie_build_he_6ghz_cap(struct ieee80211_sub_if_data *sdata,
+				    struct sk_buff *skb)
+{
+	struct ieee80211_supported_band *sband;
+	const struct ieee80211_sband_iftype_data *iftd;
+	enum nl80211_iftype iftype = ieee80211_vif_type_p2p(&sdata->vif);
+	u8 *pos;
+	u16 cap;
+
+	sband = ieee80211_get_sband(sdata);
+	if (!sband)
+		return;
+
+	iftd = ieee80211_get_sband_iftype_data(sband, iftype);
+	if (WARN_ON(!iftd))
+		return;
+
+	/* Check for device HE 6 GHz capability before adding element */
+	if (!iftd->he_6ghz_capa.capa)
+		return;
+
+	cap = le16_to_cpu(iftd->he_6ghz_capa.capa);
+	cap &= ~IEEE80211_HE_6GHZ_CAP_SM_PS;
+
+	switch (sdata->smps_mode) {
+	case IEEE80211_SMPS_AUTOMATIC:
+	case IEEE80211_SMPS_NUM_MODES:
+		WARN_ON(1);
+		/* fall through */
+	case IEEE80211_SMPS_OFF:
+		cap |= u16_encode_bits(WLAN_HT_CAP_SM_PS_DISABLED,
+				       IEEE80211_HE_6GHZ_CAP_SM_PS);
+		break;
+	case IEEE80211_SMPS_STATIC:
+		cap |= u16_encode_bits(WLAN_HT_CAP_SM_PS_STATIC,
+				       IEEE80211_HE_6GHZ_CAP_SM_PS);
+		break;
+	case IEEE80211_SMPS_DYNAMIC:
+		cap |= u16_encode_bits(WLAN_HT_CAP_SM_PS_DYNAMIC,
+				       IEEE80211_HE_6GHZ_CAP_SM_PS);
+		break;
+	}
+
+	pos = skb_put(skb, 2 + 1 + sizeof(cap));
+	ieee80211_write_he_6ghz_cap(pos, cpu_to_le16(cap),
+				    pos + 2 + 1 + sizeof(cap));
+}
+
 u8 *ieee80211_ie_build_ht_oper(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
 			       const struct cfg80211_chan_def *chandef,
 			       u16 prot_mode, bool rifs_mode)
diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig
index 91efae8..ea957f7 100644
--- a/net/netfilter/Kconfig
+++ b/net/netfilter/Kconfig
@@ -1484,6 +1484,29 @@
 	  If you want to compile it as a module, say M here and read
 	  <file:Documentation/kbuild/modules.rst>.  If unsure, say `N'.
 
+config NETFILTER_XT_MATCH_QUOTA2
+	tristate '"quota2" match support'
+	depends on NETFILTER_ADVANCED
+	help
+	  This option adds a `quota2' match, which allows to match on a
+	  byte counter correctly and not per CPU.
+	  It allows naming the quotas.
+	  This is based on http://xtables-addons.git.sourceforge.net
+
+	  If you want to compile it as a module, say M here and read
+	  <file:Documentation/kbuild/modules.txt>.  If unsure, say `N'.
+
+config NETFILTER_XT_MATCH_QUOTA2_LOG
+	bool '"quota2" Netfilter LOG support'
+	depends on NETFILTER_XT_MATCH_QUOTA2
+	default n
+	help
+	  This option allows `quota2' to log ONCE when a quota limit
+	  is passed. It logs via NETLINK using the NETLINK_NFLOG family.
+	  It logs similarly to how ipt_ULOG would without data.
+
+	  If unsure, say `N'.
+
 config NETFILTER_XT_MATCH_RATEEST
 	tristate '"rateest" match support'
 	depends on NETFILTER_ADVANCED
diff --git a/net/netfilter/Makefile b/net/netfilter/Makefile
index 4fc075b..f3e1af38 100644
--- a/net/netfilter/Makefile
+++ b/net/netfilter/Makefile
@@ -192,6 +192,7 @@
 obj-$(CONFIG_NETFILTER_XT_MATCH_PKTTYPE) += xt_pkttype.o
 obj-$(CONFIG_NETFILTER_XT_MATCH_POLICY) += xt_policy.o
 obj-$(CONFIG_NETFILTER_XT_MATCH_QUOTA) += xt_quota.o
+obj-$(CONFIG_NETFILTER_XT_MATCH_QUOTA2) += xt_quota2.o
 obj-$(CONFIG_NETFILTER_XT_MATCH_RATEEST) += xt_rateest.o
 obj-$(CONFIG_NETFILTER_XT_MATCH_REALM) += xt_realm.o
 obj-$(CONFIG_NETFILTER_XT_MATCH_RECENT) += xt_recent.o
diff --git a/net/netfilter/xt_IDLETIMER.c b/net/netfilter/xt_IDLETIMER.c
index f56d3ed..a7e0b7f 100644
--- a/net/netfilter/xt_IDLETIMER.c
+++ b/net/netfilter/xt_IDLETIMER.c
@@ -6,6 +6,7 @@
  * After timer expires a kevent will be sent.
  *
  * Copyright (C) 2004, 2010 Nokia Corporation
+ *
  * Written by Timo Teras <ext-timo.teras@nokia.com>
  *
  * Converted to x_tables and reworked for upstream inclusion
@@ -25,8 +26,17 @@
 #include <linux/netfilter/xt_IDLETIMER.h>
 #include <linux/kdev_t.h>
 #include <linux/kobject.h>
+#include <linux/skbuff.h>
 #include <linux/workqueue.h>
 #include <linux/sysfs.h>
+#include <linux/rtc.h>
+#include <linux/time.h>
+#include <linux/math64.h>
+#include <linux/suspend.h>
+#include <linux/notifier.h>
+#include <net/net_namespace.h>
+#include <net/sock.h>
+#include <net/inet_sock.h>
 
 struct idletimer_tg {
 	struct list_head entry;
@@ -36,14 +46,112 @@ struct idletimer_tg {
 	struct kobject *kobj;
 	struct device_attribute attr;
 
+	struct timespec64 delayed_timer_trigger;
+	struct timespec64 last_modified_timer;
+	struct timespec64 last_suspend_time;
+	struct notifier_block pm_nb;
+
+	int timeout;
 	unsigned int refcnt;
+	bool work_pending;
+	bool send_nl_msg;
+	bool active;
+	uid_t uid;
+	bool suspend_time_valid;
 };
 
 static LIST_HEAD(idletimer_tg_list);
 static DEFINE_MUTEX(list_mutex);
+static DEFINE_SPINLOCK(timestamp_lock);
 
 static struct kobject *idletimer_tg_kobj;
 
+static bool check_for_delayed_trigger(struct idletimer_tg *timer,
+		struct timespec64 *ts)
+{
+	bool state;
+	struct timespec64 temp;
+	spin_lock_bh(&timestamp_lock);
+	timer->work_pending = false;
+	if ((ts->tv_sec - timer->last_modified_timer.tv_sec) > timer->timeout ||
+			timer->delayed_timer_trigger.tv_sec != 0) {
+		state = false;
+		temp.tv_sec = timer->timeout;
+		temp.tv_nsec = 0;
+		if (timer->delayed_timer_trigger.tv_sec != 0) {
+			temp = timespec64_add(timer->delayed_timer_trigger,
+					      temp);
+			ts->tv_sec = temp.tv_sec;
+			ts->tv_nsec = temp.tv_nsec;
+			timer->delayed_timer_trigger.tv_sec = 0;
+			timer->work_pending = true;
+			schedule_work(&timer->work);
+		} else {
+			temp = timespec64_add(timer->last_modified_timer, temp);
+			ts->tv_sec = temp.tv_sec;
+			ts->tv_nsec = temp.tv_nsec;
+		}
+	} else {
+		state = timer->active;
+	}
+	spin_unlock_bh(&timestamp_lock);
+	return state;
+}
+
+static void notify_netlink_uevent(const char *iface, struct idletimer_tg *timer)
+{
+	char iface_msg[NLMSG_MAX_SIZE];
+	char state_msg[NLMSG_MAX_SIZE];
+	char timestamp_msg[NLMSG_MAX_SIZE];
+	char uid_msg[NLMSG_MAX_SIZE];
+	char *envp[] = { iface_msg, state_msg, timestamp_msg, uid_msg, NULL };
+	int res;
+	struct timespec64 ts;
+	uint64_t time_ns;
+	bool state;
+
+	res = snprintf(iface_msg, NLMSG_MAX_SIZE, "INTERFACE=%s",
+		       iface);
+	if (NLMSG_MAX_SIZE <= res) {
+		pr_err("message too long (%d)", res);
+		return;
+	}
+
+	ts = ktime_to_timespec64(ktime_get_boottime());
+	state = check_for_delayed_trigger(timer, &ts);
+	res = snprintf(state_msg, NLMSG_MAX_SIZE, "STATE=%s",
+			state ? "active" : "inactive");
+
+	if (NLMSG_MAX_SIZE <= res) {
+		pr_err("message too long (%d)", res);
+		return;
+	}
+
+	if (state) {
+		res = snprintf(uid_msg, NLMSG_MAX_SIZE, "UID=%u", timer->uid);
+		if (NLMSG_MAX_SIZE <= res)
+			pr_err("message too long (%d)", res);
+	} else {
+		res = snprintf(uid_msg, NLMSG_MAX_SIZE, "UID=");
+		if (NLMSG_MAX_SIZE <= res)
+			pr_err("message too long (%d)", res);
+	}
+
+	time_ns = timespec64_to_ns(&ts);
+	res = snprintf(timestamp_msg, NLMSG_MAX_SIZE, "TIME_NS=%llu", time_ns);
+	if (NLMSG_MAX_SIZE <= res) {
+		timestamp_msg[0] = '\0';
+		pr_err("message too long (%d)", res);
+	}
+
+	pr_debug("putting nlmsg: <%s> <%s> <%s> <%s>\n", iface_msg, state_msg,
+		 timestamp_msg, uid_msg);
+	kobject_uevent_env(idletimer_tg_kobj, KOBJ_CHANGE, envp);
+	return;
+
+
+}
+
 static
 struct idletimer_tg *__idletimer_tg_find_by_label(const char *label)
 {
@@ -62,6 +170,7 @@ static ssize_t idletimer_tg_show(struct device *dev,
 {
 	struct idletimer_tg *timer;
 	unsigned long expires = 0;
+	unsigned long now = jiffies;
 
 	mutex_lock(&list_mutex);
 
@@ -71,11 +180,15 @@ static ssize_t idletimer_tg_show(struct device *dev,
 
 	mutex_unlock(&list_mutex);
 
-	if (time_after(expires, jiffies))
+	if (time_after(expires, now))
 		return sprintf(buf, "%u\n",
-			       jiffies_to_msecs(expires - jiffies) / 1000);
+			       jiffies_to_msecs(expires - now) / 1000);
 
-	return sprintf(buf, "0\n");
+	if (timer->send_nl_msg)
+		return sprintf(buf, "0 %d\n",
+			jiffies_to_msecs(now - expires) / 1000);
+	else
+		return sprintf(buf, "0\n");
 }
 
 static void idletimer_tg_work(struct work_struct *work)
@@ -84,6 +197,9 @@ static void idletimer_tg_work(struct work_struct *work)
 						  work);
 
 	sysfs_notify(idletimer_tg_kobj, NULL, timer->attr.attr.name);
+
+	if (timer->send_nl_msg)
+		notify_netlink_uevent(timer->attr.attr.name, timer);
 }
 
 static void idletimer_tg_expired(struct timer_list *t)
@@ -91,8 +207,61 @@ static void idletimer_tg_expired(struct timer_list *t)
 	struct idletimer_tg *timer = from_timer(timer, t, timer);
 
 	pr_debug("timer %s expired\n", timer->attr.attr.name);
-
+	spin_lock_bh(&timestamp_lock);
+	timer->active = false;
+	timer->work_pending = true;
 	schedule_work(&timer->work);
+	spin_unlock_bh(&timestamp_lock);
+}
+
+static int idletimer_resume(struct notifier_block *notifier,
+		unsigned long pm_event, void *unused)
+{
+	struct timespec64 ts;
+	unsigned long time_diff, now = jiffies;
+	struct idletimer_tg *timer = container_of(notifier,
+			struct idletimer_tg, pm_nb);
+	if (!timer)
+		return NOTIFY_DONE;
+	switch (pm_event) {
+	case PM_SUSPEND_PREPARE:
+		timer->last_suspend_time =
+			ktime_to_timespec64(ktime_get_boottime());
+		timer->suspend_time_valid = true;
+		break;
+	case PM_POST_SUSPEND:
+		if (!timer->suspend_time_valid)
+			break;
+		timer->suspend_time_valid = false;
+
+		spin_lock_bh(&timestamp_lock);
+		if (!timer->active) {
+			spin_unlock_bh(&timestamp_lock);
+			break;
+		}
+		/* since jiffies are not updated when suspended now represents
+		 * the time it would have suspended */
+		if (time_after(timer->timer.expires, now)) {
+			ts = ktime_to_timespec64(ktime_get_boottime());
+			ts = timespec64_sub(ts, timer->last_suspend_time);
+			time_diff = timespec64_to_jiffies(&ts);
+			if (timer->timer.expires > (time_diff + now)) {
+				mod_timer_pending(&timer->timer,
+						(timer->timer.expires - time_diff));
+			} else {
+				del_timer(&timer->timer);
+				timer->timer.expires = 0;
+				timer->active = false;
+				timer->work_pending = true;
+				schedule_work(&timer->work);
+			}
+		}
+		spin_unlock_bh(&timestamp_lock);
+		break;
+	default:
+		break;
+	}
+	return NOTIFY_DONE;
 }
 
 static int idletimer_check_sysfs_name(const char *name, unsigned int size)
@@ -115,7 +284,7 @@ static int idletimer_tg_create(struct idletimer_tg_info *info)
 {
 	int ret;
 
-	info->timer = kmalloc(sizeof(*info->timer), GFP_KERNEL);
+	info->timer = kzalloc(sizeof(*info->timer), GFP_KERNEL);
 	if (!info->timer) {
 		ret = -ENOMEM;
 		goto out;
@@ -144,6 +313,22 @@ static int idletimer_tg_create(struct idletimer_tg_info *info)
 
 	timer_setup(&info->timer->timer, idletimer_tg_expired, 0);
 	info->timer->refcnt = 1;
+	info->timer->send_nl_msg = (info->send_nl_msg == 0) ? false : true;
+	info->timer->active = true;
+	info->timer->timeout = info->timeout;
+
+	info->timer->delayed_timer_trigger.tv_sec = 0;
+	info->timer->delayed_timer_trigger.tv_nsec = 0;
+	info->timer->work_pending = false;
+	info->timer->uid = 0;
+	info->timer->last_modified_timer =
+		ktime_to_timespec64(ktime_get_boottime());
+
+	info->timer->pm_nb.notifier_call = idletimer_resume;
+	ret = register_pm_notifier(&info->timer->pm_nb);
+	if (ret)
+		printk(KERN_WARNING "[%s] Failed to register pm notifier %d\n",
+				__func__, ret);
 
 	INIT_WORK(&info->timer->work, idletimer_tg_work);
 
@@ -160,6 +345,42 @@ static int idletimer_tg_create(struct idletimer_tg_info *info)
 	return ret;
 }
 
+static void reset_timer(const struct idletimer_tg_info *info,
+			struct sk_buff *skb)
+{
+	unsigned long now = jiffies;
+	struct idletimer_tg *timer = info->timer;
+	bool timer_prev;
+
+	spin_lock_bh(&timestamp_lock);
+	timer_prev = timer->active;
+	timer->active = true;
+	/* timer_prev is used to guard overflow problem in time_before*/
+	if (!timer_prev || time_before(timer->timer.expires, now)) {
+		pr_debug("Starting Checkentry timer (Expired, Jiffies): %lu, %lu\n",
+				timer->timer.expires, now);
+
+		/* Stores the uid resposible for waking up the radio */
+		if (skb && (skb->sk)) {
+			timer->uid = from_kuid_munged(current_user_ns(),
+					sock_i_uid(skb_to_full_sk(skb)));
+		}
+
+		/* checks if there is a pending inactive notification*/
+		if (timer->work_pending)
+			timer->delayed_timer_trigger = timer->last_modified_timer;
+		else {
+			timer->work_pending = true;
+			schedule_work(&timer->work);
+		}
+	}
+
+	timer->last_modified_timer = ktime_to_timespec64(ktime_get_boottime());
+	mod_timer(&timer->timer,
+			msecs_to_jiffies(info->timeout * 1000) + now);
+	spin_unlock_bh(&timestamp_lock);
+}
+
 /*
  * The actual xt_tables plugin.
  */
@@ -167,13 +388,23 @@ static unsigned int idletimer_tg_target(struct sk_buff *skb,
 					 const struct xt_action_param *par)
 {
 	const struct idletimer_tg_info *info = par->targinfo;
+	unsigned long now = jiffies;
 
 	pr_debug("resetting timer %s, timeout period %u\n",
 		 info->label, info->timeout);
 
-	mod_timer(&info->timer->timer,
-		  msecs_to_jiffies(info->timeout * 1000) + jiffies);
+	BUG_ON(!info->timer);
 
+	info->timer->active = true;
+
+	if (time_before(info->timer->timer.expires, now)) {
+		schedule_work(&info->timer->work);
+		pr_debug("Starting timer %s (Expired, Jiffies): %lu, %lu\n",
+			 info->label, info->timer->timer.expires, now);
+	}
+
+	/* TODO: Avoid modifying timers on each packet */
+	reset_timer(info, skb);
 	return XT_CONTINUE;
 }
 
@@ -182,7 +413,7 @@ static int idletimer_tg_checkentry(const struct xt_tgchk_param *par)
 	struct idletimer_tg_info *info = par->targinfo;
 	int ret;
 
-	pr_debug("checkentry targinfo%s\n", info->label);
+	pr_debug("checkentry targinfo %s\n", info->label);
 
 	if (info->timeout == 0) {
 		pr_debug("timeout value is zero\n");
@@ -204,9 +435,7 @@ static int idletimer_tg_checkentry(const struct xt_tgchk_param *par)
 	info->timer = __idletimer_tg_find_by_label(info->label);
 	if (info->timer) {
 		info->timer->refcnt++;
-		mod_timer(&info->timer->timer,
-			  msecs_to_jiffies(info->timeout * 1000) + jiffies);
-
+		reset_timer(info, NULL);
 		pr_debug("increased refcnt of timer %s to %u\n",
 			 info->label, info->timer->refcnt);
 	} else {
@@ -219,6 +448,7 @@ static int idletimer_tg_checkentry(const struct xt_tgchk_param *par)
 	}
 
 	mutex_unlock(&list_mutex);
+
 	return 0;
 }
 
@@ -235,13 +465,14 @@ static void idletimer_tg_destroy(const struct xt_tgdtor_param *par)
 
 		list_del(&info->timer->entry);
 		del_timer_sync(&info->timer->timer);
-		cancel_work_sync(&info->timer->work);
 		sysfs_remove_file(idletimer_tg_kobj, &info->timer->attr.attr);
+		unregister_pm_notifier(&info->timer->pm_nb);
+		cancel_work_sync(&info->timer->work);
 		kfree(info->timer->attr.attr.name);
 		kfree(info->timer);
 	} else {
 		pr_debug("decreased refcnt of timer %s to %u\n",
-			 info->label, info->timer->refcnt);
+		info->label, info->timer->refcnt);
 	}
 
 	mutex_unlock(&list_mutex);
@@ -249,6 +480,7 @@ static void idletimer_tg_destroy(const struct xt_tgdtor_param *par)
 
 static struct xt_target idletimer_tg __read_mostly = {
 	.name		= "IDLETIMER",
+	.revision	= 1,
 	.family		= NFPROTO_UNSPEC,
 	.target		= idletimer_tg_target,
 	.targetsize     = sizeof(struct idletimer_tg_info),
@@ -315,3 +547,4 @@ MODULE_DESCRIPTION("Xtables: idle time monitor");
 MODULE_LICENSE("GPL v2");
 MODULE_ALIAS("ipt_IDLETIMER");
 MODULE_ALIAS("ip6t_IDLETIMER");
+MODULE_ALIAS("arpt_IDLETIMER");
diff --git a/net/netfilter/xt_quota2.c b/net/netfilter/xt_quota2.c
new file mode 100644
index 0000000..c9a06d0
--- /dev/null
+++ b/net/netfilter/xt_quota2.c
@@ -0,0 +1,400 @@
+/*
+ * xt_quota2 - enhanced xt_quota that can count upwards and in packets
+ * as a minimal accounting match.
+ * by Jan Engelhardt <jengelh@medozas.de>, 2008
+ *
+ * Originally based on xt_quota.c:
+ * 	netfilter module to enforce network quotas
+ * 	Sam Johnston <samj@samj.net>
+ *
+ *	This program is free software; you can redistribute it and/or modify
+ *	it under the terms of the GNU General Public License; either
+ *	version 2 of the License, as published by the Free Software Foundation.
+ */
+#include <linux/list.h>
+#include <linux/module.h>
+#include <linux/proc_fs.h>
+#include <linux/skbuff.h>
+#include <linux/spinlock.h>
+#include <asm/atomic.h>
+#include <net/netlink.h>
+
+#include <linux/netfilter/x_tables.h>
+#include <linux/netfilter/xt_quota2.h>
+
+#ifdef CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG
+/* For compatibility, these definitions are copied from the
+ * deprecated header file <linux/netfilter_ipv4/ipt_ULOG.h> */
+#define ULOG_MAC_LEN	80
+#define ULOG_PREFIX_LEN	32
+
+/* Format of the ULOG packets passed through netlink */
+typedef struct ulog_packet_msg {
+	unsigned long mark;
+	long timestamp_sec;
+	long timestamp_usec;
+	unsigned int hook;
+	char indev_name[IFNAMSIZ];
+	char outdev_name[IFNAMSIZ];
+	size_t data_len;
+	char prefix[ULOG_PREFIX_LEN];
+	unsigned char mac_len;
+	unsigned char mac[ULOG_MAC_LEN];
+	unsigned char payload[0];
+} ulog_packet_msg_t;
+#endif
+
+/**
+ * @lock:	lock to protect quota writers from each other
+ */
+struct xt_quota_counter {
+	u_int64_t quota;
+	spinlock_t lock;
+	struct list_head list;
+	atomic_t ref;
+	char name[sizeof(((struct xt_quota_mtinfo2 *)NULL)->name)];
+	struct proc_dir_entry *procfs_entry;
+};
+
+#ifdef CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG
+/* Harald's favorite number +1 :D From ipt_ULOG.C */
+static int qlog_nl_event = 112;
+module_param_named(event_num, qlog_nl_event, uint, S_IRUGO | S_IWUSR);
+MODULE_PARM_DESC(event_num,
+		 "Event number for NETLINK_NFLOG message. 0 disables log."
+		 "111 is what ipt_ULOG uses.");
+static struct sock *nflognl;
+#endif
+
+static LIST_HEAD(counter_list);
+static DEFINE_SPINLOCK(counter_list_lock);
+
+static struct proc_dir_entry *proc_xt_quota;
+static unsigned int quota_list_perms = S_IRUGO | S_IWUSR;
+static kuid_t quota_list_uid = KUIDT_INIT(0);
+static kgid_t quota_list_gid = KGIDT_INIT(0);
+module_param_named(perms, quota_list_perms, uint, S_IRUGO | S_IWUSR);
+
+#ifdef CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG
+static void quota2_log(unsigned int hooknum,
+		       const struct sk_buff *skb,
+		       const struct net_device *in,
+		       const struct net_device *out,
+		       const char *prefix)
+{
+	ulog_packet_msg_t *pm;
+	struct sk_buff *log_skb;
+	size_t size;
+	struct nlmsghdr *nlh;
+
+	if (!qlog_nl_event)
+		return;
+
+	size = NLMSG_SPACE(sizeof(*pm));
+	size = max(size, (size_t)NLMSG_GOODSIZE);
+	log_skb = alloc_skb(size, GFP_ATOMIC);
+	if (!log_skb) {
+		pr_err("xt_quota2: cannot alloc skb for logging\n");
+		return;
+	}
+
+	nlh = nlmsg_put(log_skb, /*pid*/0, /*seq*/0, qlog_nl_event,
+			sizeof(*pm), 0);
+	if (!nlh) {
+		pr_err("xt_quota2: nlmsg_put failed\n");
+		kfree_skb(log_skb);
+		return;
+	}
+	pm = nlmsg_data(nlh);
+	if (skb->tstamp == 0)
+		__net_timestamp((struct sk_buff *)skb);
+	pm->data_len = 0;
+	pm->hook = hooknum;
+	if (prefix != NULL)
+		strlcpy(pm->prefix, prefix, sizeof(pm->prefix));
+	else
+		*(pm->prefix) = '\0';
+	if (in)
+		strlcpy(pm->indev_name, in->name, sizeof(pm->indev_name));
+	else
+		pm->indev_name[0] = '\0';
+
+	if (out)
+		strlcpy(pm->outdev_name, out->name, sizeof(pm->outdev_name));
+	else
+		pm->outdev_name[0] = '\0';
+
+	NETLINK_CB(log_skb).dst_group = 1;
+	pr_debug("throwing 1 packets to netlink group 1\n");
+	netlink_broadcast(nflognl, log_skb, 0, 1, GFP_ATOMIC);
+}
+#else
+static void quota2_log(unsigned int hooknum,
+		       const struct sk_buff *skb,
+		       const struct net_device *in,
+		       const struct net_device *out,
+		       const char *prefix)
+{
+}
+#endif  /* if+else CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG */
+
+static ssize_t quota_proc_read(struct file *file, char __user *buf,
+			   size_t size, loff_t *ppos)
+{
+	struct xt_quota_counter *e = PDE_DATA(file_inode(file));
+	char tmp[24];
+	size_t tmp_size;
+
+	spin_lock_bh(&e->lock);
+	tmp_size = scnprintf(tmp, sizeof(tmp), "%llu\n", e->quota);
+	spin_unlock_bh(&e->lock);
+	return simple_read_from_buffer(buf, size, ppos, tmp, tmp_size);
+}
+
+static ssize_t quota_proc_write(struct file *file, const char __user *input,
+                            size_t size, loff_t *ppos)
+{
+	struct xt_quota_counter *e = PDE_DATA(file_inode(file));
+	char buf[sizeof("18446744073709551616")];
+
+	if (size > sizeof(buf))
+		size = sizeof(buf);
+	if (copy_from_user(buf, input, size) != 0)
+		return -EFAULT;
+	buf[sizeof(buf)-1] = '\0';
+
+	spin_lock_bh(&e->lock);
+	e->quota = simple_strtoull(buf, NULL, 0);
+	spin_unlock_bh(&e->lock);
+	return size;
+}
+
+static const struct file_operations q2_counter_fops = {
+	.read		= quota_proc_read,
+	.write		= quota_proc_write,
+	.llseek		= default_llseek,
+};
+
+static struct xt_quota_counter *
+q2_new_counter(const struct xt_quota_mtinfo2 *q, bool anon)
+{
+	struct xt_quota_counter *e;
+	unsigned int size;
+
+	/* Do not need all the procfs things for anonymous counters. */
+	size = anon ? offsetof(typeof(*e), list) : sizeof(*e);
+	e = kmalloc(size, GFP_KERNEL);
+	if (e == NULL)
+		return NULL;
+
+	e->quota = q->quota;
+	spin_lock_init(&e->lock);
+	if (!anon) {
+		INIT_LIST_HEAD(&e->list);
+		atomic_set(&e->ref, 1);
+		strlcpy(e->name, q->name, sizeof(e->name));
+	}
+	return e;
+}
+
+/**
+ * q2_get_counter - get ref to counter or create new
+ * @name:	name of counter
+ */
+static struct xt_quota_counter *
+q2_get_counter(const struct xt_quota_mtinfo2 *q)
+{
+	struct proc_dir_entry *p;
+	struct xt_quota_counter *e = NULL;
+	struct xt_quota_counter *new_e;
+
+	if (*q->name == '\0')
+		return q2_new_counter(q, true);
+
+	/* No need to hold a lock while getting a new counter */
+	new_e = q2_new_counter(q, false);
+	if (new_e == NULL)
+		goto out;
+
+	spin_lock_bh(&counter_list_lock);
+	list_for_each_entry(e, &counter_list, list)
+		if (strcmp(e->name, q->name) == 0) {
+			atomic_inc(&e->ref);
+			spin_unlock_bh(&counter_list_lock);
+			kfree(new_e);
+			pr_debug("xt_quota2: old counter name=%s", e->name);
+			return e;
+		}
+	e = new_e;
+	pr_debug("xt_quota2: new_counter name=%s", e->name);
+	list_add_tail(&e->list, &counter_list);
+	/* The entry having a refcount of 1 is not directly destructible.
+	 * This func has not yet returned the new entry, thus iptables
+	 * has not references for destroying this entry.
+	 * For another rule to try to destroy it, it would 1st need for this
+	 * func* to be re-invoked, acquire a new ref for the same named quota.
+	 * Nobody will access the e->procfs_entry either.
+	 * So release the lock. */
+	spin_unlock_bh(&counter_list_lock);
+
+	/* create_proc_entry() is not spin_lock happy */
+	p = e->procfs_entry = proc_create_data(e->name, quota_list_perms,
+	                      proc_xt_quota, &q2_counter_fops, e);
+
+	if (IS_ERR_OR_NULL(p)) {
+		spin_lock_bh(&counter_list_lock);
+		list_del(&e->list);
+		spin_unlock_bh(&counter_list_lock);
+		goto out;
+	}
+	proc_set_user(p, quota_list_uid, quota_list_gid);
+	return e;
+
+ out:
+	kfree(e);
+	return NULL;
+}
+
+static int quota_mt2_check(const struct xt_mtchk_param *par)
+{
+	struct xt_quota_mtinfo2 *q = par->matchinfo;
+
+	pr_debug("xt_quota2: check() flags=0x%04x", q->flags);
+
+	if (q->flags & ~XT_QUOTA_MASK)
+		return -EINVAL;
+
+	q->name[sizeof(q->name)-1] = '\0';
+	if (*q->name == '.' || strchr(q->name, '/') != NULL) {
+		printk(KERN_ERR "xt_quota.3: illegal name\n");
+		return -EINVAL;
+	}
+
+	q->master = q2_get_counter(q);
+	if (q->master == NULL) {
+		printk(KERN_ERR "xt_quota.3: memory alloc failure\n");
+		return -ENOMEM;
+	}
+
+	return 0;
+}
+
+static void quota_mt2_destroy(const struct xt_mtdtor_param *par)
+{
+	struct xt_quota_mtinfo2 *q = par->matchinfo;
+	struct xt_quota_counter *e = q->master;
+
+	if (*q->name == '\0') {
+		kfree(e);
+		return;
+	}
+
+	spin_lock_bh(&counter_list_lock);
+	if (!atomic_dec_and_test(&e->ref)) {
+		spin_unlock_bh(&counter_list_lock);
+		return;
+	}
+
+	list_del(&e->list);
+	spin_unlock_bh(&counter_list_lock);
+	remove_proc_entry(e->name, proc_xt_quota);
+	kfree(e);
+}
+
+static bool
+quota_mt2(const struct sk_buff *skb, struct xt_action_param *par)
+{
+	struct xt_quota_mtinfo2 *q = (void *)par->matchinfo;
+	struct xt_quota_counter *e = q->master;
+	int charge = (q->flags & XT_QUOTA_PACKET) ? 1 : skb->len;
+	bool no_change = q->flags & XT_QUOTA_NO_CHANGE;
+	bool ret = q->flags & XT_QUOTA_INVERT;
+
+	spin_lock_bh(&e->lock);
+	if (q->flags & XT_QUOTA_GROW) {
+		/*
+		 * While no_change is pointless in "grow" mode, we will
+		 * implement it here simply to have a consistent behavior.
+		 */
+		if (!no_change)
+			e->quota += charge;
+		ret = true; /* note: does not respect inversion (bug??) */
+	} else {
+		if (e->quota > charge) {
+			if (!no_change)
+				e->quota -= charge;
+			ret = !ret;
+		} else if (e->quota) {
+			/* We are transitioning, log that fact. */
+			quota2_log(xt_hooknum(par),
+				   skb,
+				   xt_in(par),
+				   xt_out(par),
+				   q->name);
+			/* we do not allow even small packets from now on */
+			e->quota = 0;
+		}
+	}
+	spin_unlock_bh(&e->lock);
+	return ret;
+}
+
+static struct xt_match quota_mt2_reg[] __read_mostly = {
+	{
+		.name       = "quota2",
+		.revision   = 3,
+		.family     = NFPROTO_IPV4,
+		.checkentry = quota_mt2_check,
+		.match      = quota_mt2,
+		.destroy    = quota_mt2_destroy,
+		.matchsize  = sizeof(struct xt_quota_mtinfo2),
+		.me         = THIS_MODULE,
+	},
+	{
+		.name       = "quota2",
+		.revision   = 3,
+		.family     = NFPROTO_IPV6,
+		.checkentry = quota_mt2_check,
+		.match      = quota_mt2,
+		.destroy    = quota_mt2_destroy,
+		.matchsize  = sizeof(struct xt_quota_mtinfo2),
+		.me         = THIS_MODULE,
+	},
+};
+
+static int __init quota_mt2_init(void)
+{
+	int ret;
+	pr_debug("xt_quota2: init()");
+
+#ifdef CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG
+	nflognl = netlink_kernel_create(&init_net, NETLINK_NFLOG, NULL);
+	if (!nflognl)
+		return -ENOMEM;
+#endif
+
+	proc_xt_quota = proc_mkdir("xt_quota", init_net.proc_net);
+	if (proc_xt_quota == NULL)
+		return -EACCES;
+
+	ret = xt_register_matches(quota_mt2_reg, ARRAY_SIZE(quota_mt2_reg));
+	if (ret < 0)
+		remove_proc_entry("xt_quota", init_net.proc_net);
+	pr_debug("xt_quota2: init() %d", ret);
+	return ret;
+}
+
+static void __exit quota_mt2_exit(void)
+{
+	xt_unregister_matches(quota_mt2_reg, ARRAY_SIZE(quota_mt2_reg));
+	remove_proc_entry("xt_quota", init_net.proc_net);
+}
+
+module_init(quota_mt2_init);
+module_exit(quota_mt2_exit);
+MODULE_DESCRIPTION("Xtables: countdown quota match; up counter");
+MODULE_AUTHOR("Sam Johnston <samj@samj.net>");
+MODULE_AUTHOR("Jan Engelhardt <jengelh@medozas.de>");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("ipt_quota2");
+MODULE_ALIAS("ip6t_quota2");
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index 41abfff..cd9310a 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -399,6 +399,9 @@ static int sctp_do_bind(struct sock *sk, union sctp_addr *addr, int len)
 		}
 	}
 
+	if (snum && inet_is_local_unbindable_port(net, snum))
+		return -EPERM;
+
 	if (snum && snum < inet_prot_sock(net) &&
 	    !ns_capable(net->user_ns, CAP_NET_BIND_SERVICE))
 		return -EACCES;
@@ -1076,6 +1079,8 @@ static int sctp_connect_new_asoc(struct sctp_endpoint *ep,
 		if (sctp_autobind(sk))
 			return -EAGAIN;
 	} else {
+		if (inet_is_local_unbindable_port(net, ep->base.bind_addr.port))
+			return -EPERM;
 		if (ep->base.bind_addr.port < inet_prot_sock(net) &&
 		    !ns_capable(net->user_ns, CAP_NET_BIND_SERVICE))
 			return -EACCES;
diff --git a/net/socket.c b/net/socket.c
index d1a02644..72e5dfb 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -300,7 +300,8 @@ static const struct dentry_operations sockfs_dentry_operations = {
 
 static int sockfs_xattr_get(const struct xattr_handler *handler,
 			    struct dentry *dentry, struct inode *inode,
-			    const char *suffix, void *value, size_t size)
+			    const char *suffix, void *value, size_t size,
+			    int flags)
 {
 	if (value) {
 		if (dentry->d_name.len + 1 > size)
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
index 5d32357..2671290b 100644
--- a/net/vmw_vsock/af_vsock.c
+++ b/net/vmw_vsock/af_vsock.c
@@ -126,19 +126,18 @@ static struct proto vsock_proto = {
  */
 #define VSOCK_DEFAULT_CONNECT_TIMEOUT (2 * HZ)
 
-static const struct vsock_transport *transport;
+#define VSOCK_DEFAULT_BUFFER_SIZE     (1024 * 256)
+#define VSOCK_DEFAULT_BUFFER_MAX_SIZE (1024 * 256)
+#define VSOCK_DEFAULT_BUFFER_MIN_SIZE 128
+
+/* Transport used for host->guest communication */
+static const struct vsock_transport *transport_h2g;
+/* Transport used for guest->host communication */
+static const struct vsock_transport *transport_g2h;
+/* Transport used for DGRAM communication */
+static const struct vsock_transport *transport_dgram;
 static DEFINE_MUTEX(vsock_register_mutex);
 
-/**** EXPORTS ****/
-
-/* Get the ID of the local context.  This is transport dependent. */
-
-int vm_sockets_get_local_cid(void)
-{
-	return transport->get_local_cid();
-}
-EXPORT_SYMBOL_GPL(vm_sockets_get_local_cid);
-
 /**** UTILS ****/
 
 /* Each bound VSocket is stored in the bind hash table and each connected
@@ -188,7 +187,7 @@ static int vsock_auto_bind(struct vsock_sock *vsk)
 	return __vsock_bind(sk, &local_addr);
 }
 
-static int __init vsock_init_tables(void)
+static void vsock_init_tables(void)
 {
 	int i;
 
@@ -197,7 +196,6 @@ static int __init vsock_init_tables(void)
 
 	for (i = 0; i < ARRAY_SIZE(vsock_connected_table); i++)
 		INIT_LIST_HEAD(&vsock_connected_table[i]);
-	return 0;
 }
 
 static void __vsock_insert_bound(struct list_head *list,
@@ -230,10 +228,16 @@ static struct sock *__vsock_find_bound_socket(struct sockaddr_vm *addr)
 {
 	struct vsock_sock *vsk;
 
-	list_for_each_entry(vsk, vsock_bound_sockets(addr), bound_table)
-		if (addr->svm_port == vsk->local_addr.svm_port)
+	list_for_each_entry(vsk, vsock_bound_sockets(addr), bound_table) {
+		if (vsock_addr_equals_addr(addr, &vsk->local_addr))
 			return sk_vsock(vsk);
 
+		if (addr->svm_port == vsk->local_addr.svm_port &&
+		    (vsk->local_addr.svm_cid == VMADDR_CID_ANY ||
+		     addr->svm_cid == VMADDR_CID_ANY))
+			return sk_vsock(vsk);
+	}
+
 	return NULL;
 }
 
@@ -382,6 +386,88 @@ void vsock_enqueue_accept(struct sock *listener, struct sock *connected)
 }
 EXPORT_SYMBOL_GPL(vsock_enqueue_accept);
 
+static void vsock_deassign_transport(struct vsock_sock *vsk)
+{
+	if (!vsk->transport)
+		return;
+
+	vsk->transport->destruct(vsk);
+	module_put(vsk->transport->module);
+	vsk->transport = NULL;
+}
+
+/* Assign a transport to a socket and call the .init transport callback.
+ *
+ * Note: for stream socket this must be called when vsk->remote_addr is set
+ * (e.g. during the connect() or when a connection request on a listener
+ * socket is received).
+ * The vsk->remote_addr is used to decide which transport to use:
+ *  - remote CID <= VMADDR_CID_HOST will use guest->host transport;
+ *  - remote CID == local_cid (guest->host transport) will use guest->host
+ *    transport for loopback (host->guest transports don't support loopback);
+ *  - remote CID > VMADDR_CID_HOST will use host->guest transport;
+ */
+int vsock_assign_transport(struct vsock_sock *vsk, struct vsock_sock *psk)
+{
+	const struct vsock_transport *new_transport;
+	struct sock *sk = sk_vsock(vsk);
+	unsigned int remote_cid = vsk->remote_addr.svm_cid;
+	int ret;
+
+	switch (sk->sk_type) {
+	case SOCK_DGRAM:
+		new_transport = transport_dgram;
+		break;
+	case SOCK_STREAM:
+		if (remote_cid <= VMADDR_CID_HOST ||
+		    (transport_g2h &&
+		     remote_cid == transport_g2h->get_local_cid()))
+			new_transport = transport_g2h;
+		else
+			new_transport = transport_h2g;
+		break;
+	default:
+		return -ESOCKTNOSUPPORT;
+	}
+
+	if (vsk->transport) {
+		if (vsk->transport == new_transport)
+			return 0;
+
+		vsk->transport->release(vsk);
+		vsock_deassign_transport(vsk);
+	}
+
+	/* We increase the module refcnt to prevent the transport unloading
+	 * while there are open sockets assigned to it.
+	 */
+	if (!new_transport || !try_module_get(new_transport->module))
+		return -ENODEV;
+
+	ret = new_transport->init(vsk, psk);
+	if (ret) {
+		module_put(new_transport->module);
+		return ret;
+	}
+
+	vsk->transport = new_transport;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(vsock_assign_transport);
+
+bool vsock_find_cid(unsigned int cid)
+{
+	if (transport_g2h && cid == transport_g2h->get_local_cid())
+		return true;
+
+	if (transport_h2g && cid == VMADDR_CID_HOST)
+		return true;
+
+	return false;
+}
+EXPORT_SYMBOL_GPL(vsock_find_cid);
+
 static struct sock *vsock_dequeue_accept(struct sock *listener)
 {
 	struct vsock_sock *vlistener;
@@ -418,7 +504,12 @@ static bool vsock_is_pending(struct sock *sk)
 
 static int vsock_send_shutdown(struct sock *sk, int mode)
 {
-	return transport->shutdown(vsock_sk(sk), mode);
+	struct vsock_sock *vsk = vsock_sk(sk);
+
+	if (!vsk->transport)
+		return -ENODEV;
+
+	return vsk->transport->shutdown(vsk, mode);
 }
 
 static void vsock_pending_work(struct work_struct *work)
@@ -528,13 +619,12 @@ static int __vsock_bind_stream(struct vsock_sock *vsk,
 static int __vsock_bind_dgram(struct vsock_sock *vsk,
 			      struct sockaddr_vm *addr)
 {
-	return transport->dgram_bind(vsk, addr);
+	return vsk->transport->dgram_bind(vsk, addr);
 }
 
 static int __vsock_bind(struct sock *sk, struct sockaddr_vm *addr)
 {
 	struct vsock_sock *vsk = vsock_sk(sk);
-	u32 cid;
 	int retval;
 
 	/* First ensure this socket isn't already bound. */
@@ -544,10 +634,9 @@ static int __vsock_bind(struct sock *sk, struct sockaddr_vm *addr)
 	/* Now bind to the provided address or select appropriate values if
 	 * none are provided (VMADDR_CID_ANY and VMADDR_PORT_ANY).  Note that
 	 * like AF_INET prevents binding to a non-local IP address (in most
-	 * cases), we only allow binding to the local CID.
+	 * cases), we only allow binding to a local CID.
 	 */
-	cid = transport->get_local_cid();
-	if (addr->svm_cid != cid && addr->svm_cid != VMADDR_CID_ANY)
+	if (addr->svm_cid != VMADDR_CID_ANY && !vsock_find_cid(addr->svm_cid))
 		return -EADDRNOTAVAIL;
 
 	switch (sk->sk_socket->type) {
@@ -571,12 +660,12 @@ static int __vsock_bind(struct sock *sk, struct sockaddr_vm *addr)
 
 static void vsock_connect_timeout(struct work_struct *work);
 
-struct sock *__vsock_create(struct net *net,
-			    struct socket *sock,
-			    struct sock *parent,
-			    gfp_t priority,
-			    unsigned short type,
-			    int kern)
+static struct sock *__vsock_create(struct net *net,
+				   struct socket *sock,
+				   struct sock *parent,
+				   gfp_t priority,
+				   unsigned short type,
+				   int kern)
 {
 	struct sock *sk;
 	struct vsock_sock *psk;
@@ -620,23 +709,20 @@ struct sock *__vsock_create(struct net *net,
 		vsk->trusted = psk->trusted;
 		vsk->owner = get_cred(psk->owner);
 		vsk->connect_timeout = psk->connect_timeout;
+		vsk->buffer_size = psk->buffer_size;
+		vsk->buffer_min_size = psk->buffer_min_size;
+		vsk->buffer_max_size = psk->buffer_max_size;
 	} else {
 		vsk->trusted = ns_capable_noaudit(&init_user_ns, CAP_NET_ADMIN);
 		vsk->owner = get_current_cred();
 		vsk->connect_timeout = VSOCK_DEFAULT_CONNECT_TIMEOUT;
+		vsk->buffer_size = VSOCK_DEFAULT_BUFFER_SIZE;
+		vsk->buffer_min_size = VSOCK_DEFAULT_BUFFER_MIN_SIZE;
+		vsk->buffer_max_size = VSOCK_DEFAULT_BUFFER_MAX_SIZE;
 	}
 
-	if (transport->init(vsk, psk) < 0) {
-		sk_free(sk);
-		return NULL;
-	}
-
-	if (sock)
-		vsock_insert_unbound(vsk);
-
 	return sk;
 }
-EXPORT_SYMBOL_GPL(__vsock_create);
 
 static void __vsock_release(struct sock *sk, int level)
 {
@@ -651,7 +737,10 @@ static void __vsock_release(struct sock *sk, int level)
 		/* The release call is supposed to use lock_sock_nested()
 		 * rather than lock_sock(), if a sock lock should be acquired.
 		 */
-		transport->release(vsk);
+		if (vsk->transport)
+			vsk->transport->release(vsk);
+		else if (sk->sk_type == SOCK_STREAM)
+			vsock_remove_sock(vsk);
 
 		/* When "level" is SINGLE_DEPTH_NESTING, use the nested
 		 * version to avoid the warning "possible recursive locking
@@ -680,7 +769,7 @@ static void vsock_sk_destruct(struct sock *sk)
 {
 	struct vsock_sock *vsk = vsock_sk(sk);
 
-	transport->destruct(vsk);
+	vsock_deassign_transport(vsk);
 
 	/* When clearing these addresses, there's no need to set the family and
 	 * possibly register the address family with the kernel.
@@ -702,15 +791,22 @@ static int vsock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
 	return err;
 }
 
+struct sock *vsock_create_connected(struct sock *parent)
+{
+	return __vsock_create(sock_net(parent), NULL, parent, GFP_KERNEL,
+			      parent->sk_type, 0);
+}
+EXPORT_SYMBOL_GPL(vsock_create_connected);
+
 s64 vsock_stream_has_data(struct vsock_sock *vsk)
 {
-	return transport->stream_has_data(vsk);
+	return vsk->transport->stream_has_data(vsk);
 }
 EXPORT_SYMBOL_GPL(vsock_stream_has_data);
 
 s64 vsock_stream_has_space(struct vsock_sock *vsk)
 {
-	return transport->stream_has_space(vsk);
+	return vsk->transport->stream_has_space(vsk);
 }
 EXPORT_SYMBOL_GPL(vsock_stream_has_space);
 
@@ -881,8 +977,12 @@ static __poll_t vsock_poll(struct file *file, struct socket *sock,
 			mask |= EPOLLOUT | EPOLLWRNORM | EPOLLWRBAND;
 
 	} else if (sock->type == SOCK_STREAM) {
+		const struct vsock_transport *transport;
+
 		lock_sock(sk);
 
+		transport = vsk->transport;
+
 		/* Listening sockets that have connections in their accept
 		 * queue can be read.
 		 */
@@ -891,7 +991,7 @@ static __poll_t vsock_poll(struct file *file, struct socket *sock,
 			mask |= EPOLLIN | EPOLLRDNORM;
 
 		/* If there is something in the queue then we can read. */
-		if (transport->stream_is_active(vsk) &&
+		if (transport && transport->stream_is_active(vsk) &&
 		    !(sk->sk_shutdown & RCV_SHUTDOWN)) {
 			bool data_ready_now = false;
 			int ret = transport->notify_poll_in(
@@ -956,6 +1056,7 @@ static int vsock_dgram_sendmsg(struct socket *sock, struct msghdr *msg,
 	struct sock *sk;
 	struct vsock_sock *vsk;
 	struct sockaddr_vm *remote_addr;
+	const struct vsock_transport *transport;
 
 	if (msg->msg_flags & MSG_OOB)
 		return -EOPNOTSUPP;
@@ -967,6 +1068,8 @@ static int vsock_dgram_sendmsg(struct socket *sock, struct msghdr *msg,
 
 	lock_sock(sk);
 
+	transport = vsk->transport;
+
 	err = vsock_auto_bind(vsk);
 	if (err)
 		goto out;
@@ -1048,8 +1151,8 @@ static int vsock_dgram_connect(struct socket *sock,
 	if (err)
 		goto out;
 
-	if (!transport->dgram_allow(remote_addr->svm_cid,
-				    remote_addr->svm_port)) {
+	if (!vsk->transport->dgram_allow(remote_addr->svm_cid,
+					 remote_addr->svm_port)) {
 		err = -EINVAL;
 		goto out;
 	}
@@ -1065,7 +1168,9 @@ static int vsock_dgram_connect(struct socket *sock,
 static int vsock_dgram_recvmsg(struct socket *sock, struct msghdr *msg,
 			       size_t len, int flags)
 {
-	return transport->dgram_dequeue(vsock_sk(sock->sk), msg, len, flags);
+	struct vsock_sock *vsk = vsock_sk(sock->sk);
+
+	return vsk->transport->dgram_dequeue(vsk, msg, len, flags);
 }
 
 static const struct proto_ops vsock_dgram_ops = {
@@ -1091,6 +1196,8 @@ static const struct proto_ops vsock_dgram_ops = {
 
 static int vsock_transport_cancel_pkt(struct vsock_sock *vsk)
 {
+	const struct vsock_transport *transport = vsk->transport;
+
 	if (!transport->cancel_pkt)
 		return -EOPNOTSUPP;
 
@@ -1124,6 +1231,7 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr,
 	int err;
 	struct sock *sk;
 	struct vsock_sock *vsk;
+	const struct vsock_transport *transport;
 	struct sockaddr_vm *remote_addr;
 	long timeout;
 	DEFINE_WAIT(wait);
@@ -1158,19 +1266,26 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr,
 			goto out;
 		}
 
+		/* Set the remote address that we are connecting to. */
+		memcpy(&vsk->remote_addr, remote_addr,
+		       sizeof(vsk->remote_addr));
+
+		err = vsock_assign_transport(vsk, NULL);
+		if (err)
+			goto out;
+
+		transport = vsk->transport;
+
 		/* The hypervisor and well-known contexts do not have socket
 		 * endpoints.
 		 */
-		if (!transport->stream_allow(remote_addr->svm_cid,
+		if (!transport ||
+		    !transport->stream_allow(remote_addr->svm_cid,
 					     remote_addr->svm_port)) {
 			err = -ENETUNREACH;
 			goto out;
 		}
 
-		/* Set the remote address that we are connecting to. */
-		memcpy(&vsk->remote_addr, remote_addr,
-		       sizeof(vsk->remote_addr));
-
 		err = vsock_auto_bind(vsk);
 		if (err)
 			goto out;
@@ -1365,6 +1480,23 @@ static int vsock_listen(struct socket *sock, int backlog)
 	return err;
 }
 
+static void vsock_update_buffer_size(struct vsock_sock *vsk,
+				     const struct vsock_transport *transport,
+				     u64 val)
+{
+	if (val > vsk->buffer_max_size)
+		val = vsk->buffer_max_size;
+
+	if (val < vsk->buffer_min_size)
+		val = vsk->buffer_min_size;
+
+	if (val != vsk->buffer_size &&
+	    transport && transport->notify_buffer_size)
+		transport->notify_buffer_size(vsk, &val);
+
+	vsk->buffer_size = val;
+}
+
 static int vsock_stream_setsockopt(struct socket *sock,
 				   int level,
 				   int optname,
@@ -1374,6 +1506,7 @@ static int vsock_stream_setsockopt(struct socket *sock,
 	int err;
 	struct sock *sk;
 	struct vsock_sock *vsk;
+	const struct vsock_transport *transport;
 	u64 val;
 
 	if (level != AF_VSOCK)
@@ -1397,20 +1530,24 @@ static int vsock_stream_setsockopt(struct socket *sock,
 
 	lock_sock(sk);
 
+	transport = vsk->transport;
+
 	switch (optname) {
 	case SO_VM_SOCKETS_BUFFER_SIZE:
 		COPY_IN(val);
-		transport->set_buffer_size(vsk, val);
+		vsock_update_buffer_size(vsk, transport, val);
 		break;
 
 	case SO_VM_SOCKETS_BUFFER_MAX_SIZE:
 		COPY_IN(val);
-		transport->set_max_buffer_size(vsk, val);
+		vsk->buffer_max_size = val;
+		vsock_update_buffer_size(vsk, transport, vsk->buffer_size);
 		break;
 
 	case SO_VM_SOCKETS_BUFFER_MIN_SIZE:
 		COPY_IN(val);
-		transport->set_min_buffer_size(vsk, val);
+		vsk->buffer_min_size = val;
+		vsock_update_buffer_size(vsk, transport, vsk->buffer_size);
 		break;
 
 	case SO_VM_SOCKETS_CONNECT_TIMEOUT: {
@@ -1477,17 +1614,17 @@ static int vsock_stream_getsockopt(struct socket *sock,
 
 	switch (optname) {
 	case SO_VM_SOCKETS_BUFFER_SIZE:
-		val = transport->get_buffer_size(vsk);
+		val = vsk->buffer_size;
 		COPY_OUT(val);
 		break;
 
 	case SO_VM_SOCKETS_BUFFER_MAX_SIZE:
-		val = transport->get_max_buffer_size(vsk);
+		val = vsk->buffer_max_size;
 		COPY_OUT(val);
 		break;
 
 	case SO_VM_SOCKETS_BUFFER_MIN_SIZE:
-		val = transport->get_min_buffer_size(vsk);
+		val = vsk->buffer_min_size;
 		COPY_OUT(val);
 		break;
 
@@ -1518,6 +1655,7 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg,
 {
 	struct sock *sk;
 	struct vsock_sock *vsk;
+	const struct vsock_transport *transport;
 	ssize_t total_written;
 	long timeout;
 	int err;
@@ -1534,6 +1672,8 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg,
 
 	lock_sock(sk);
 
+	transport = vsk->transport;
+
 	/* Callers should not provide a destination with stream sockets. */
 	if (msg->msg_namelen) {
 		err = sk->sk_state == TCP_ESTABLISHED ? -EISCONN : -EOPNOTSUPP;
@@ -1547,7 +1687,7 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg,
 		goto out;
 	}
 
-	if (sk->sk_state != TCP_ESTABLISHED ||
+	if (!transport || sk->sk_state != TCP_ESTABLISHED ||
 	    !vsock_addr_bound(&vsk->local_addr)) {
 		err = -ENOTCONN;
 		goto out;
@@ -1657,6 +1797,7 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
 {
 	struct sock *sk;
 	struct vsock_sock *vsk;
+	const struct vsock_transport *transport;
 	int err;
 	size_t target;
 	ssize_t copied;
@@ -1671,7 +1812,9 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
 
 	lock_sock(sk);
 
-	if (sk->sk_state != TCP_ESTABLISHED) {
+	transport = vsk->transport;
+
+	if (!transport || sk->sk_state != TCP_ESTABLISHED) {
 		/* Recvmsg is supposed to return 0 if a peer performs an
 		 * orderly shutdown. Differentiate between that case and when a
 		 * peer has not connected or a local shutdown occured with the
@@ -1845,6 +1988,10 @@ static const struct proto_ops vsock_stream_ops = {
 static int vsock_create(struct net *net, struct socket *sock,
 			int protocol, int kern)
 {
+	struct vsock_sock *vsk;
+	struct sock *sk;
+	int ret;
+
 	if (!sock)
 		return -EINVAL;
 
@@ -1864,7 +2011,23 @@ static int vsock_create(struct net *net, struct socket *sock,
 
 	sock->state = SS_UNCONNECTED;
 
-	return __vsock_create(net, sock, NULL, GFP_KERNEL, 0, kern) ? 0 : -ENOMEM;
+	sk = __vsock_create(net, sock, NULL, GFP_KERNEL, 0, kern);
+	if (!sk)
+		return -ENOMEM;
+
+	vsk = vsock_sk(sk);
+
+	if (sock->type == SOCK_DGRAM) {
+		ret = vsock_assign_transport(vsk, NULL);
+		if (ret < 0) {
+			sock_put(sk);
+			return ret;
+		}
+	}
+
+	vsock_insert_unbound(vsk);
+
+	return 0;
 }
 
 static const struct net_proto_family vsock_family_ops = {
@@ -1877,11 +2040,20 @@ static long vsock_dev_do_ioctl(struct file *filp,
 			       unsigned int cmd, void __user *ptr)
 {
 	u32 __user *p = ptr;
+	u32 cid = VMADDR_CID_ANY;
 	int retval = 0;
 
 	switch (cmd) {
 	case IOCTL_VM_SOCKETS_GET_LOCAL_CID:
-		if (put_user(transport->get_local_cid(), p) != 0)
+		/* To be compatible with the VMCI behavior, we prioritize the
+		 * guest CID instead of well-know host CID (VMADDR_CID_HOST).
+		 */
+		if (transport_g2h)
+			cid = transport_g2h->get_local_cid();
+		else if (transport_h2g)
+			cid = transport_h2g->get_local_cid();
+
+		if (put_user(cid, p) != 0)
 			retval = -EFAULT;
 		break;
 
@@ -1921,24 +2093,13 @@ static struct miscdevice vsock_device = {
 	.fops		= &vsock_device_ops,
 };
 
-int __vsock_core_init(const struct vsock_transport *t, struct module *owner)
+static int __init vsock_init(void)
 {
-	int err = mutex_lock_interruptible(&vsock_register_mutex);
+	int err = 0;
 
-	if (err)
-		return err;
+	vsock_init_tables();
 
-	if (transport) {
-		err = -EBUSY;
-		goto err_busy;
-	}
-
-	/* Transport must be the owner of the protocol so that it can't
-	 * unload while there are open sockets.
-	 */
-	vsock_proto.owner = owner;
-	transport = t;
-
+	vsock_proto.owner = THIS_MODULE;
 	vsock_device.minor = MISC_DYNAMIC_MINOR;
 	err = misc_register(&vsock_device);
 	if (err) {
@@ -1959,7 +2120,6 @@ int __vsock_core_init(const struct vsock_transport *t, struct module *owner)
 		goto err_unregister_proto;
 	}
 
-	mutex_unlock(&vsock_register_mutex);
 	return 0;
 
 err_unregister_proto:
@@ -1967,44 +2127,86 @@ int __vsock_core_init(const struct vsock_transport *t, struct module *owner)
 err_deregister_misc:
 	misc_deregister(&vsock_device);
 err_reset_transport:
-	transport = NULL;
+	return err;
+}
+
+static void __exit vsock_exit(void)
+{
+	misc_deregister(&vsock_device);
+	sock_unregister(AF_VSOCK);
+	proto_unregister(&vsock_proto);
+}
+
+const struct vsock_transport *vsock_core_get_transport(struct vsock_sock *vsk)
+{
+	return vsk->transport;
+}
+EXPORT_SYMBOL_GPL(vsock_core_get_transport);
+
+int vsock_core_register(const struct vsock_transport *t, int features)
+{
+	const struct vsock_transport *t_h2g, *t_g2h, *t_dgram;
+	int err = mutex_lock_interruptible(&vsock_register_mutex);
+
+	if (err)
+		return err;
+
+	t_h2g = transport_h2g;
+	t_g2h = transport_g2h;
+	t_dgram = transport_dgram;
+
+	if (features & VSOCK_TRANSPORT_F_H2G) {
+		if (t_h2g) {
+			err = -EBUSY;
+			goto err_busy;
+		}
+		t_h2g = t;
+	}
+
+	if (features & VSOCK_TRANSPORT_F_G2H) {
+		if (t_g2h) {
+			err = -EBUSY;
+			goto err_busy;
+		}
+		t_g2h = t;
+	}
+
+	if (features & VSOCK_TRANSPORT_F_DGRAM) {
+		if (t_dgram) {
+			err = -EBUSY;
+			goto err_busy;
+		}
+		t_dgram = t;
+	}
+
+	transport_h2g = t_h2g;
+	transport_g2h = t_g2h;
+	transport_dgram = t_dgram;
+
 err_busy:
 	mutex_unlock(&vsock_register_mutex);
 	return err;
 }
-EXPORT_SYMBOL_GPL(__vsock_core_init);
+EXPORT_SYMBOL_GPL(vsock_core_register);
 
-void vsock_core_exit(void)
+void vsock_core_unregister(const struct vsock_transport *t)
 {
 	mutex_lock(&vsock_register_mutex);
 
-	misc_deregister(&vsock_device);
-	sock_unregister(AF_VSOCK);
-	proto_unregister(&vsock_proto);
+	if (transport_h2g == t)
+		transport_h2g = NULL;
 
-	/* We do not want the assignment below re-ordered. */
-	mb();
-	transport = NULL;
+	if (transport_g2h == t)
+		transport_g2h = NULL;
+
+	if (transport_dgram == t)
+		transport_dgram = NULL;
 
 	mutex_unlock(&vsock_register_mutex);
 }
-EXPORT_SYMBOL_GPL(vsock_core_exit);
+EXPORT_SYMBOL_GPL(vsock_core_unregister);
 
-const struct vsock_transport *vsock_core_get_transport(void)
-{
-	/* vsock_register_mutex not taken since only the transport uses this
-	 * function and only while registered.
-	 */
-	return transport;
-}
-EXPORT_SYMBOL_GPL(vsock_core_get_transport);
-
-static void __exit vsock_exit(void)
-{
-	/* Do nothing.  This function makes this module removable. */
-}
-
-module_init(vsock_init_tables);
+module_init(vsock_init);
 module_exit(vsock_exit);
 
 MODULE_AUTHOR("VMware, Inc.");
diff --git a/net/vmw_vsock/hyperv_transport.c b/net/vmw_vsock/hyperv_transport.c
index a3c57c0..e52100c 100644
--- a/net/vmw_vsock/hyperv_transport.c
+++ b/net/vmw_vsock/hyperv_transport.c
@@ -150,6 +150,8 @@ static const guid_t srv_id_template =
 	GUID_INIT(0x00000000, 0xfacb, 0x11e6, 0xbd, 0x58,
 		  0x64, 0x00, 0x6a, 0x79, 0x86, 0xd3);
 
+static bool hvs_check_transport(struct vsock_sock *vsk);
+
 static bool is_valid_srv_id(const guid_t *id)
 {
 	return !memcmp(&id->b[4], &srv_id_template.b[4], sizeof(guid_t) - 4);
@@ -313,8 +315,7 @@ static void hvs_open_connection(struct vmbus_channel *chan)
 		if (sk->sk_ack_backlog >= sk->sk_max_ack_backlog)
 			goto out;
 
-		new = __vsock_create(sock_net(sk), NULL, sk, GFP_KERNEL,
-				     sk->sk_type, 0);
+		new = vsock_create_connected(sk);
 		if (!new)
 			goto out;
 
@@ -327,6 +328,14 @@ static void hvs_open_connection(struct vmbus_channel *chan)
 		vsock_addr_init(&vnew->remote_addr,
 				VMADDR_CID_HOST, VMADDR_PORT_ANY);
 		vnew->remote_addr.svm_port = get_port_by_srv_id(if_instance);
+		ret = vsock_assign_transport(vnew, vsock_sk(sk));
+		/* Transport assigned (looking at remote_addr) must be the
+		 * same where we received the request.
+		 */
+		if (ret || !hvs_check_transport(vnew)) {
+			sock_put(new);
+			goto out;
+		}
 		hvs_new = vnew->trans;
 		hvs_new->chan = chan;
 	} else {
@@ -390,7 +399,6 @@ static void hvs_open_connection(struct vmbus_channel *chan)
 		new->sk_state = TCP_ESTABLISHED;
 		sk->sk_ack_backlog++;
 
-		hvs_addr_init(&vnew->local_addr, if_type);
 		hvs_new->vm_srv_id = *if_type;
 		hvs_new->host_srv_id = *if_instance;
 
@@ -789,37 +797,9 @@ int hvs_notify_send_post_enqueue(struct vsock_sock *vsk, ssize_t written,
 	return 0;
 }
 
-static void hvs_set_buffer_size(struct vsock_sock *vsk, u64 val)
-{
-	/* Ignored. */
-}
-
-static void hvs_set_min_buffer_size(struct vsock_sock *vsk, u64 val)
-{
-	/* Ignored. */
-}
-
-static void hvs_set_max_buffer_size(struct vsock_sock *vsk, u64 val)
-{
-	/* Ignored. */
-}
-
-static u64 hvs_get_buffer_size(struct vsock_sock *vsk)
-{
-	return -ENOPROTOOPT;
-}
-
-static u64 hvs_get_min_buffer_size(struct vsock_sock *vsk)
-{
-	return -ENOPROTOOPT;
-}
-
-static u64 hvs_get_max_buffer_size(struct vsock_sock *vsk)
-{
-	return -ENOPROTOOPT;
-}
-
 static struct vsock_transport hvs_transport = {
+	.module                   = THIS_MODULE,
+
 	.get_local_cid            = hvs_get_local_cid,
 
 	.init                     = hvs_sock_init,
@@ -852,14 +832,13 @@ static struct vsock_transport hvs_transport = {
 	.notify_send_pre_enqueue  = hvs_notify_send_pre_enqueue,
 	.notify_send_post_enqueue = hvs_notify_send_post_enqueue,
 
-	.set_buffer_size          = hvs_set_buffer_size,
-	.set_min_buffer_size      = hvs_set_min_buffer_size,
-	.set_max_buffer_size      = hvs_set_max_buffer_size,
-	.get_buffer_size          = hvs_get_buffer_size,
-	.get_min_buffer_size      = hvs_get_min_buffer_size,
-	.get_max_buffer_size      = hvs_get_max_buffer_size,
 };
 
+static bool hvs_check_transport(struct vsock_sock *vsk)
+{
+	return vsk->transport == &hvs_transport;
+}
+
 static int hvs_probe(struct hv_device *hdev,
 		     const struct hv_vmbus_device_id *dev_id)
 {
@@ -908,7 +887,7 @@ static int __init hvs_init(void)
 	if (ret != 0)
 		return ret;
 
-	ret = vsock_core_init(&hvs_transport);
+	ret = vsock_core_register(&hvs_transport, VSOCK_TRANSPORT_F_G2H);
 	if (ret) {
 		vmbus_driver_unregister(&hvs_drv);
 		return ret;
@@ -919,7 +898,7 @@ static int __init hvs_init(void)
 
 static void __exit hvs_exit(void)
 {
-	vsock_core_exit();
+	vsock_core_unregister(&hvs_transport);
 	vmbus_driver_unregister(&hvs_drv);
 }
 
diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c
index 5905f0c..cd5e3c9 100644
--- a/net/vmw_vsock/virtio_transport.c
+++ b/net/vmw_vsock/virtio_transport.c
@@ -462,6 +462,8 @@ static void virtio_vsock_rx_done(struct virtqueue *vq)
 
 static struct virtio_transport virtio_transport = {
 	.transport = {
+		.module                   = THIS_MODULE,
+
 		.get_local_cid            = virtio_transport_get_local_cid,
 
 		.init                     = virtio_transport_do_socket_init,
@@ -494,13 +496,7 @@ static struct virtio_transport virtio_transport = {
 		.notify_send_pre_block    = virtio_transport_notify_send_pre_block,
 		.notify_send_pre_enqueue  = virtio_transport_notify_send_pre_enqueue,
 		.notify_send_post_enqueue = virtio_transport_notify_send_post_enqueue,
-
-		.set_buffer_size          = virtio_transport_set_buffer_size,
-		.set_min_buffer_size      = virtio_transport_set_min_buffer_size,
-		.set_max_buffer_size      = virtio_transport_set_max_buffer_size,
-		.get_buffer_size          = virtio_transport_get_buffer_size,
-		.get_min_buffer_size      = virtio_transport_get_min_buffer_size,
-		.get_max_buffer_size      = virtio_transport_get_max_buffer_size,
+		.notify_buffer_size       = virtio_transport_notify_buffer_size,
 	},
 
 	.send_pkt = virtio_transport_send_pkt,
@@ -776,7 +772,8 @@ static int __init virtio_vsock_init(void)
 	if (!virtio_vsock_workqueue)
 		return -ENOMEM;
 
-	ret = vsock_core_init(&virtio_transport.transport);
+	ret = vsock_core_register(&virtio_transport.transport,
+				  VSOCK_TRANSPORT_F_G2H);
 	if (ret)
 		goto out_wq;
 
@@ -787,7 +784,7 @@ static int __init virtio_vsock_init(void)
 	return 0;
 
 out_vci:
-	vsock_core_exit();
+	vsock_core_unregister(&virtio_transport.transport);
 out_wq:
 	destroy_workqueue(virtio_vsock_workqueue);
 	return ret;
@@ -796,7 +793,7 @@ static int __init virtio_vsock_init(void)
 static void __exit virtio_vsock_exit(void)
 {
 	unregister_virtio_driver(&virtio_vsock_driver);
-	vsock_core_exit();
+	vsock_core_unregister(&virtio_transport.transport);
 	destroy_workqueue(virtio_vsock_workqueue);
 }
 
diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index dde16a0..a2e275e 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -29,9 +29,13 @@
 /* Threshold for detecting small packets to copy */
 #define GOOD_COPY_LEN  128
 
-static const struct virtio_transport *virtio_transport_get_ops(void)
+static const struct virtio_transport *
+virtio_transport_get_ops(struct vsock_sock *vsk)
 {
-	const struct vsock_transport *t = vsock_core_get_transport();
+	const struct vsock_transport *t = vsock_core_get_transport(vsk);
+
+	if (WARN_ON(!t))
+		return NULL;
 
 	return container_of(t, struct virtio_transport, transport);
 }
@@ -160,15 +164,25 @@ void virtio_transport_deliver_tap_pkt(struct virtio_vsock_pkt *pkt)
 }
 EXPORT_SYMBOL_GPL(virtio_transport_deliver_tap_pkt);
 
+/* This function can only be used on connecting/connected sockets,
+ * since a socket assigned to a transport is required.
+ *
+ * Do not use on listener sockets!
+ */
 static int virtio_transport_send_pkt_info(struct vsock_sock *vsk,
 					  struct virtio_vsock_pkt_info *info)
 {
 	u32 src_cid, src_port, dst_cid, dst_port;
+	const struct virtio_transport *t_ops;
 	struct virtio_vsock_sock *vvs;
 	struct virtio_vsock_pkt *pkt;
 	u32 pkt_len = info->pkt_len;
 
-	src_cid = vm_sockets_get_local_cid();
+	t_ops = virtio_transport_get_ops(vsk);
+	if (unlikely(!t_ops))
+		return -EFAULT;
+
+	src_cid = t_ops->transport.get_local_cid();
 	src_port = vsk->local_addr.svm_port;
 	if (!info->remote_cid) {
 		dst_cid	= vsk->remote_addr.svm_cid;
@@ -201,7 +215,7 @@ static int virtio_transport_send_pkt_info(struct vsock_sock *vsk,
 
 	virtio_transport_inc_tx_pkt(vvs, pkt);
 
-	return virtio_transport_get_ops()->send_pkt(pkt);
+	return t_ops->send_pkt(pkt);
 }
 
 static bool virtio_transport_inc_rx_pkt(struct virtio_vsock_sock *vvs,
@@ -403,20 +417,16 @@ int virtio_transport_do_socket_init(struct vsock_sock *vsk,
 
 	vsk->trans = vvs;
 	vvs->vsk = vsk;
-	if (psk) {
+	if (psk && psk->trans) {
 		struct virtio_vsock_sock *ptrans = psk->trans;
 
-		vvs->buf_size	= ptrans->buf_size;
-		vvs->buf_size_min = ptrans->buf_size_min;
-		vvs->buf_size_max = ptrans->buf_size_max;
 		vvs->peer_buf_alloc = ptrans->peer_buf_alloc;
-	} else {
-		vvs->buf_size = VIRTIO_VSOCK_DEFAULT_BUF_SIZE;
-		vvs->buf_size_min = VIRTIO_VSOCK_DEFAULT_MIN_BUF_SIZE;
-		vvs->buf_size_max = VIRTIO_VSOCK_DEFAULT_MAX_BUF_SIZE;
 	}
 
-	vvs->buf_alloc = vvs->buf_size;
+	if (vsk->buffer_size > VIRTIO_VSOCK_MAX_BUF_SIZE)
+		vsk->buffer_size = VIRTIO_VSOCK_MAX_BUF_SIZE;
+
+	vvs->buf_alloc = vsk->buffer_size;
 
 	spin_lock_init(&vvs->rx_lock);
 	spin_lock_init(&vvs->tx_lock);
@@ -426,71 +436,20 @@ int virtio_transport_do_socket_init(struct vsock_sock *vsk,
 }
 EXPORT_SYMBOL_GPL(virtio_transport_do_socket_init);
 
-u64 virtio_transport_get_buffer_size(struct vsock_sock *vsk)
+/* sk_lock held by the caller */
+void virtio_transport_notify_buffer_size(struct vsock_sock *vsk, u64 *val)
 {
 	struct virtio_vsock_sock *vvs = vsk->trans;
 
-	return vvs->buf_size;
-}
-EXPORT_SYMBOL_GPL(virtio_transport_get_buffer_size);
+	if (*val > VIRTIO_VSOCK_MAX_BUF_SIZE)
+		*val = VIRTIO_VSOCK_MAX_BUF_SIZE;
 
-u64 virtio_transport_get_min_buffer_size(struct vsock_sock *vsk)
-{
-	struct virtio_vsock_sock *vvs = vsk->trans;
-
-	return vvs->buf_size_min;
-}
-EXPORT_SYMBOL_GPL(virtio_transport_get_min_buffer_size);
-
-u64 virtio_transport_get_max_buffer_size(struct vsock_sock *vsk)
-{
-	struct virtio_vsock_sock *vvs = vsk->trans;
-
-	return vvs->buf_size_max;
-}
-EXPORT_SYMBOL_GPL(virtio_transport_get_max_buffer_size);
-
-void virtio_transport_set_buffer_size(struct vsock_sock *vsk, u64 val)
-{
-	struct virtio_vsock_sock *vvs = vsk->trans;
-
-	if (val > VIRTIO_VSOCK_MAX_BUF_SIZE)
-		val = VIRTIO_VSOCK_MAX_BUF_SIZE;
-	if (val < vvs->buf_size_min)
-		vvs->buf_size_min = val;
-	if (val > vvs->buf_size_max)
-		vvs->buf_size_max = val;
-	vvs->buf_size = val;
-	vvs->buf_alloc = val;
+	vvs->buf_alloc = *val;
 
 	virtio_transport_send_credit_update(vsk, VIRTIO_VSOCK_TYPE_STREAM,
 					    NULL);
 }
-EXPORT_SYMBOL_GPL(virtio_transport_set_buffer_size);
-
-void virtio_transport_set_min_buffer_size(struct vsock_sock *vsk, u64 val)
-{
-	struct virtio_vsock_sock *vvs = vsk->trans;
-
-	if (val > VIRTIO_VSOCK_MAX_BUF_SIZE)
-		val = VIRTIO_VSOCK_MAX_BUF_SIZE;
-	if (val > vvs->buf_size)
-		vvs->buf_size = val;
-	vvs->buf_size_min = val;
-}
-EXPORT_SYMBOL_GPL(virtio_transport_set_min_buffer_size);
-
-void virtio_transport_set_max_buffer_size(struct vsock_sock *vsk, u64 val)
-{
-	struct virtio_vsock_sock *vvs = vsk->trans;
-
-	if (val > VIRTIO_VSOCK_MAX_BUF_SIZE)
-		val = VIRTIO_VSOCK_MAX_BUF_SIZE;
-	if (val < vvs->buf_size)
-		vvs->buf_size = val;
-	vvs->buf_size_max = val;
-}
-EXPORT_SYMBOL_GPL(virtio_transport_set_max_buffer_size);
+EXPORT_SYMBOL_GPL(virtio_transport_notify_buffer_size);
 
 int
 virtio_transport_notify_poll_in(struct vsock_sock *vsk,
@@ -582,9 +541,7 @@ EXPORT_SYMBOL_GPL(virtio_transport_notify_send_post_enqueue);
 
 u64 virtio_transport_stream_rcvhiwat(struct vsock_sock *vsk)
 {
-	struct virtio_vsock_sock *vvs = vsk->trans;
-
-	return vvs->buf_size;
+	return vsk->buffer_size;
 }
 EXPORT_SYMBOL_GPL(virtio_transport_stream_rcvhiwat);
 
@@ -993,28 +950,53 @@ virtio_transport_send_response(struct vsock_sock *vsk,
 	return virtio_transport_send_pkt_info(vsk, &info);
 }
 
+static bool virtio_transport_space_update(struct sock *sk,
+					  struct virtio_vsock_pkt *pkt)
+{
+	struct vsock_sock *vsk = vsock_sk(sk);
+	struct virtio_vsock_sock *vvs = vsk->trans;
+	bool space_available;
+
+	/* Listener sockets are not associated with any transport, so we are
+	 * not able to take the state to see if there is space available in the
+	 * remote peer, but since they are only used to receive requests, we
+	 * can assume that there is always space available in the other peer.
+	 */
+	if (!vvs)
+		return true;
+
+	/* buf_alloc and fwd_cnt is always included in the hdr */
+	spin_lock_bh(&vvs->tx_lock);
+	vvs->peer_buf_alloc = le32_to_cpu(pkt->hdr.buf_alloc);
+	vvs->peer_fwd_cnt = le32_to_cpu(pkt->hdr.fwd_cnt);
+	space_available = virtio_transport_has_space(vsk);
+	spin_unlock_bh(&vvs->tx_lock);
+	return space_available;
+}
+
 /* Handle server socket */
 static int
-virtio_transport_recv_listen(struct sock *sk, struct virtio_vsock_pkt *pkt)
+virtio_transport_recv_listen(struct sock *sk, struct virtio_vsock_pkt *pkt,
+			     struct virtio_transport *t)
 {
 	struct vsock_sock *vsk = vsock_sk(sk);
 	struct vsock_sock *vchild;
 	struct sock *child;
+	int ret;
 
 	if (le16_to_cpu(pkt->hdr.op) != VIRTIO_VSOCK_OP_REQUEST) {
-		virtio_transport_reset(vsk, pkt);
+		virtio_transport_reset_no_sock(t, pkt);
 		return -EINVAL;
 	}
 
 	if (sk_acceptq_is_full(sk)) {
-		virtio_transport_reset(vsk, pkt);
+		virtio_transport_reset_no_sock(t, pkt);
 		return -ENOMEM;
 	}
 
-	child = __vsock_create(sock_net(sk), NULL, sk, GFP_KERNEL,
-			       sk->sk_type, 0);
+	child = vsock_create_connected(sk);
 	if (!child) {
-		virtio_transport_reset(vsk, pkt);
+		virtio_transport_reset_no_sock(t, pkt);
 		return -ENOMEM;
 	}
 
@@ -1030,6 +1012,20 @@ virtio_transport_recv_listen(struct sock *sk, struct virtio_vsock_pkt *pkt)
 	vsock_addr_init(&vchild->remote_addr, le64_to_cpu(pkt->hdr.src_cid),
 			le32_to_cpu(pkt->hdr.src_port));
 
+	ret = vsock_assign_transport(vchild, vsk);
+	/* Transport assigned (looking at remote_addr) must be the same
+	 * where we received the request.
+	 */
+	if (ret || vchild->transport != &t->transport) {
+		release_sock(child);
+		virtio_transport_reset_no_sock(t, pkt);
+		sock_put(child);
+		return ret;
+	}
+
+	if (virtio_transport_space_update(child, pkt))
+		child->sk_write_space(child);
+
 	vsock_insert_connected(vchild);
 	vsock_enqueue_accept(sk, child);
 	virtio_transport_send_response(vchild, pkt);
@@ -1040,22 +1036,6 @@ virtio_transport_recv_listen(struct sock *sk, struct virtio_vsock_pkt *pkt)
 	return 0;
 }
 
-static bool virtio_transport_space_update(struct sock *sk,
-					  struct virtio_vsock_pkt *pkt)
-{
-	struct vsock_sock *vsk = vsock_sk(sk);
-	struct virtio_vsock_sock *vvs = vsk->trans;
-	bool space_available;
-
-	/* buf_alloc and fwd_cnt is always included in the hdr */
-	spin_lock_bh(&vvs->tx_lock);
-	vvs->peer_buf_alloc = le32_to_cpu(pkt->hdr.buf_alloc);
-	vvs->peer_fwd_cnt = le32_to_cpu(pkt->hdr.fwd_cnt);
-	space_available = virtio_transport_has_space(vsk);
-	spin_unlock_bh(&vvs->tx_lock);
-	return space_available;
-}
-
 /* We are under the virtio-vsock's vsock->rx_lock or vhost-vsock's vq->mutex
  * lock.
  */
@@ -1112,7 +1092,7 @@ void virtio_transport_recv_pkt(struct virtio_transport *t,
 
 	switch (sk->sk_state) {
 	case TCP_LISTEN:
-		virtio_transport_recv_listen(sk, pkt);
+		virtio_transport_recv_listen(sk, pkt, t);
 		virtio_transport_free_pkt(pkt);
 		break;
 	case TCP_SYN_SENT:
@@ -1131,6 +1111,7 @@ void virtio_transport_recv_pkt(struct virtio_transport *t,
 		virtio_transport_free_pkt(pkt);
 		break;
 	}
+
 	release_sock(sk);
 
 	/* Release refcnt obtained when we fetched this socket out of the
diff --git a/net/vmw_vsock/vmci_transport.c b/net/vmw_vsock/vmci_transport.c
index 8c9c4ed..6d61148 100644
--- a/net/vmw_vsock/vmci_transport.c
+++ b/net/vmw_vsock/vmci_transport.c
@@ -57,6 +57,7 @@ static bool vmci_transport_old_proto_override(bool *old_pkt_proto);
 static u16 vmci_transport_new_proto_supported_versions(void);
 static bool vmci_transport_proto_to_notify_struct(struct sock *sk, u16 *proto,
 						  bool old_pkt_proto);
+static bool vmci_check_transport(struct vsock_sock *vsk);
 
 struct vmci_transport_recv_pkt_info {
 	struct work_struct work;
@@ -74,15 +75,6 @@ static u32 vmci_transport_qp_resumed_sub_id = VMCI_INVALID_ID;
 
 static int PROTOCOL_OVERRIDE = -1;
 
-#define VMCI_TRANSPORT_DEFAULT_QP_SIZE_MIN   128
-#define VMCI_TRANSPORT_DEFAULT_QP_SIZE       262144
-#define VMCI_TRANSPORT_DEFAULT_QP_SIZE_MAX   262144
-
-/* The default peer timeout indicates how long we will wait for a peer response
- * to a control message.
- */
-#define VSOCK_DEFAULT_CONNECT_TIMEOUT (2 * HZ)
-
 /* Helper function to convert from a VMCI error code to a VSock error code. */
 
 static s32 vmci_transport_error_to_vsock_error(s32 vmci_error)
@@ -1013,8 +1005,7 @@ static int vmci_transport_recv_listen(struct sock *sk,
 		return -ECONNREFUSED;
 	}
 
-	pending = __vsock_create(sock_net(sk), NULL, sk, GFP_KERNEL,
-				 sk->sk_type, 0);
+	pending = vsock_create_connected(sk);
 	if (!pending) {
 		vmci_transport_send_reset(sk, pkt);
 		return -ENOMEM;
@@ -1027,14 +1018,24 @@ static int vmci_transport_recv_listen(struct sock *sk,
 	vsock_addr_init(&vpending->remote_addr, pkt->dg.src.context,
 			pkt->src_port);
 
+	err = vsock_assign_transport(vpending, vsock_sk(sk));
+	/* Transport assigned (looking at remote_addr) must be the same
+	 * where we received the request.
+	 */
+	if (err || !vmci_check_transport(vpending)) {
+		vmci_transport_send_reset(sk, pkt);
+		sock_put(pending);
+		return err;
+	}
+
 	/* If the proposed size fits within our min/max, accept it. Otherwise
 	 * propose our own size.
 	 */
-	if (pkt->u.size >= vmci_trans(vpending)->queue_pair_min_size &&
-	    pkt->u.size <= vmci_trans(vpending)->queue_pair_max_size) {
+	if (pkt->u.size >= vpending->buffer_min_size &&
+	    pkt->u.size <= vpending->buffer_max_size) {
 		qp_size = pkt->u.size;
 	} else {
-		qp_size = vmci_trans(vpending)->queue_pair_size;
+		qp_size = vpending->buffer_size;
 	}
 
 	/* Figure out if we are using old or new requests based on the
@@ -1103,7 +1104,7 @@ static int vmci_transport_recv_listen(struct sock *sk,
 	pending->sk_state = TCP_SYN_SENT;
 	vmci_trans(vpending)->produce_size =
 		vmci_trans(vpending)->consume_size = qp_size;
-	vmci_trans(vpending)->queue_pair_size = qp_size;
+	vpending->buffer_size = qp_size;
 
 	vmci_trans(vpending)->notify_ops->process_request(pending);
 
@@ -1397,8 +1398,8 @@ static int vmci_transport_recv_connecting_client_negotiate(
 	vsk->ignore_connecting_rst = false;
 
 	/* Verify that we're OK with the proposed queue pair size */
-	if (pkt->u.size < vmci_trans(vsk)->queue_pair_min_size ||
-	    pkt->u.size > vmci_trans(vsk)->queue_pair_max_size) {
+	if (pkt->u.size < vsk->buffer_min_size ||
+	    pkt->u.size > vsk->buffer_max_size) {
 		err = -EINVAL;
 		goto destroy;
 	}
@@ -1503,8 +1504,7 @@ vmci_transport_recv_connecting_client_invalid(struct sock *sk,
 		vsk->sent_request = false;
 		vsk->ignore_connecting_rst = true;
 
-		err = vmci_transport_send_conn_request(
-			sk, vmci_trans(vsk)->queue_pair_size);
+		err = vmci_transport_send_conn_request(sk, vsk->buffer_size);
 		if (err < 0)
 			err = vmci_transport_error_to_vsock_error(err);
 		else
@@ -1588,21 +1588,6 @@ static int vmci_transport_socket_init(struct vsock_sock *vsk,
 	INIT_LIST_HEAD(&vmci_trans(vsk)->elem);
 	vmci_trans(vsk)->sk = &vsk->sk;
 	spin_lock_init(&vmci_trans(vsk)->lock);
-	if (psk) {
-		vmci_trans(vsk)->queue_pair_size =
-			vmci_trans(psk)->queue_pair_size;
-		vmci_trans(vsk)->queue_pair_min_size =
-			vmci_trans(psk)->queue_pair_min_size;
-		vmci_trans(vsk)->queue_pair_max_size =
-			vmci_trans(psk)->queue_pair_max_size;
-	} else {
-		vmci_trans(vsk)->queue_pair_size =
-			VMCI_TRANSPORT_DEFAULT_QP_SIZE;
-		vmci_trans(vsk)->queue_pair_min_size =
-			 VMCI_TRANSPORT_DEFAULT_QP_SIZE_MIN;
-		vmci_trans(vsk)->queue_pair_max_size =
-			VMCI_TRANSPORT_DEFAULT_QP_SIZE_MAX;
-	}
 
 	return 0;
 }
@@ -1818,8 +1803,7 @@ static int vmci_transport_connect(struct vsock_sock *vsk)
 
 	if (vmci_transport_old_proto_override(&old_pkt_proto) &&
 		old_pkt_proto) {
-		err = vmci_transport_send_conn_request(
-			sk, vmci_trans(vsk)->queue_pair_size);
+		err = vmci_transport_send_conn_request(sk, vsk->buffer_size);
 		if (err < 0) {
 			sk->sk_state = TCP_CLOSE;
 			return err;
@@ -1827,8 +1811,7 @@ static int vmci_transport_connect(struct vsock_sock *vsk)
 	} else {
 		int supported_proto_versions =
 			vmci_transport_new_proto_supported_versions();
-		err = vmci_transport_send_conn_request2(
-				sk, vmci_trans(vsk)->queue_pair_size,
+		err = vmci_transport_send_conn_request2(sk, vsk->buffer_size,
 				supported_proto_versions);
 		if (err < 0) {
 			sk->sk_state = TCP_CLOSE;
@@ -1881,46 +1864,6 @@ static bool vmci_transport_stream_is_active(struct vsock_sock *vsk)
 	return !vmci_handle_is_invalid(vmci_trans(vsk)->qp_handle);
 }
 
-static u64 vmci_transport_get_buffer_size(struct vsock_sock *vsk)
-{
-	return vmci_trans(vsk)->queue_pair_size;
-}
-
-static u64 vmci_transport_get_min_buffer_size(struct vsock_sock *vsk)
-{
-	return vmci_trans(vsk)->queue_pair_min_size;
-}
-
-static u64 vmci_transport_get_max_buffer_size(struct vsock_sock *vsk)
-{
-	return vmci_trans(vsk)->queue_pair_max_size;
-}
-
-static void vmci_transport_set_buffer_size(struct vsock_sock *vsk, u64 val)
-{
-	if (val < vmci_trans(vsk)->queue_pair_min_size)
-		vmci_trans(vsk)->queue_pair_min_size = val;
-	if (val > vmci_trans(vsk)->queue_pair_max_size)
-		vmci_trans(vsk)->queue_pair_max_size = val;
-	vmci_trans(vsk)->queue_pair_size = val;
-}
-
-static void vmci_transport_set_min_buffer_size(struct vsock_sock *vsk,
-					       u64 val)
-{
-	if (val > vmci_trans(vsk)->queue_pair_size)
-		vmci_trans(vsk)->queue_pair_size = val;
-	vmci_trans(vsk)->queue_pair_min_size = val;
-}
-
-static void vmci_transport_set_max_buffer_size(struct vsock_sock *vsk,
-					       u64 val)
-{
-	if (val < vmci_trans(vsk)->queue_pair_size)
-		vmci_trans(vsk)->queue_pair_size = val;
-	vmci_trans(vsk)->queue_pair_max_size = val;
-}
-
 static int vmci_transport_notify_poll_in(
 	struct vsock_sock *vsk,
 	size_t target,
@@ -2076,7 +2019,8 @@ static u32 vmci_transport_get_local_cid(void)
 	return vmci_get_context_id();
 }
 
-static const struct vsock_transport vmci_transport = {
+static struct vsock_transport vmci_transport = {
+	.module = THIS_MODULE,
 	.init = vmci_transport_socket_init,
 	.destruct = vmci_transport_destruct,
 	.release = vmci_transport_release,
@@ -2103,15 +2047,26 @@ static const struct vsock_transport vmci_transport = {
 	.notify_send_pre_enqueue = vmci_transport_notify_send_pre_enqueue,
 	.notify_send_post_enqueue = vmci_transport_notify_send_post_enqueue,
 	.shutdown = vmci_transport_shutdown,
-	.set_buffer_size = vmci_transport_set_buffer_size,
-	.set_min_buffer_size = vmci_transport_set_min_buffer_size,
-	.set_max_buffer_size = vmci_transport_set_max_buffer_size,
-	.get_buffer_size = vmci_transport_get_buffer_size,
-	.get_min_buffer_size = vmci_transport_get_min_buffer_size,
-	.get_max_buffer_size = vmci_transport_get_max_buffer_size,
 	.get_local_cid = vmci_transport_get_local_cid,
 };
 
+static bool vmci_check_transport(struct vsock_sock *vsk)
+{
+	return vsk->transport == &vmci_transport;
+}
+
+void vmci_vsock_transport_cb(bool is_host)
+{
+	int features;
+
+	if (is_host)
+		features = VSOCK_TRANSPORT_F_H2G;
+	else
+		features = VSOCK_TRANSPORT_F_G2H;
+
+	vsock_core_register(&vmci_transport, features);
+}
+
 static int __init vmci_transport_init(void)
 {
 	int err;
@@ -2128,7 +2083,6 @@ static int __init vmci_transport_init(void)
 		pr_err("Unable to create datagram handle. (%d)\n", err);
 		return vmci_transport_error_to_vsock_error(err);
 	}
-
 	err = vmci_event_subscribe(VMCI_EVENT_QP_RESUMED,
 				   vmci_transport_qp_resumed_cb,
 				   NULL, &vmci_transport_qp_resumed_sub_id);
@@ -2139,12 +2093,21 @@ static int __init vmci_transport_init(void)
 		goto err_destroy_stream_handle;
 	}
 
-	err = vsock_core_init(&vmci_transport);
+	/* Register only with dgram feature, other features (H2G, G2H) will be
+	 * registered when the first host or guest becomes active.
+	 */
+	err = vsock_core_register(&vmci_transport, VSOCK_TRANSPORT_F_DGRAM);
 	if (err < 0)
 		goto err_unsubscribe;
 
+	err = vmci_register_vsock_callback(vmci_vsock_transport_cb);
+	if (err < 0)
+		goto err_unregister;
+
 	return 0;
 
+err_unregister:
+	vsock_core_unregister(&vmci_transport);
 err_unsubscribe:
 	vmci_event_unsubscribe(vmci_transport_qp_resumed_sub_id);
 err_destroy_stream_handle:
@@ -2170,7 +2133,8 @@ static void __exit vmci_transport_exit(void)
 		vmci_transport_qp_resumed_sub_id = VMCI_INVALID_ID;
 	}
 
-	vsock_core_exit();
+	vmci_register_vsock_callback(NULL);
+	vsock_core_unregister(&vmci_transport);
 }
 module_exit(vmci_transport_exit);
 
diff --git a/net/vmw_vsock/vmci_transport.h b/net/vmw_vsock/vmci_transport.h
index 1ca1e86..b7b07219 100644
--- a/net/vmw_vsock/vmci_transport.h
+++ b/net/vmw_vsock/vmci_transport.h
@@ -108,9 +108,6 @@ struct vmci_transport {
 	struct vmci_qp *qpair;
 	u64 produce_size;
 	u64 consume_size;
-	u64 queue_pair_size;
-	u64 queue_pair_min_size;
-	u64 queue_pair_max_size;
 	u32 detach_sub_id;
 	union vmci_transport_notify notify;
 	const struct vmci_transport_notify_ops *notify_ops;
diff --git a/net/vmw_vsock/vmci_transport_notify.h b/net/vmw_vsock/vmci_transport_notify.h
index 7843f08..a1aa5a9 100644
--- a/net/vmw_vsock/vmci_transport_notify.h
+++ b/net/vmw_vsock/vmci_transport_notify.h
@@ -11,7 +11,6 @@
 #include <linux/types.h>
 #include <linux/vmw_vmci_defs.h>
 #include <linux/vmw_vmci_api.h>
-#include <linux/vm_sockets.h>
 
 #include "vmci_transport.h"
 
diff --git a/net/wireless/chan.c b/net/wireless/chan.c
index fcac5c6..dd8bb88 100644
--- a/net/wireless/chan.c
+++ b/net/wireless/chan.c
@@ -6,7 +6,7 @@
  *
  * Copyright 2009	Johannes Berg <johannes@sipsolutions.net>
  * Copyright 2013-2014  Intel Mobile Communications GmbH
- * Copyright 2018       Intel Corporation
+ * Copyright 2018-2020	Intel Corporation
  */
 
 #include <linux/export.h>
@@ -27,6 +27,7 @@ void cfg80211_chandef_create(struct cfg80211_chan_def *chandef,
 		return;
 
 	chandef->chan = chan;
+	chandef->freq1_offset = chan->freq_offset;
 	chandef->center_freq2 = 0;
 	chandef->edmg.bw_config = 0;
 	chandef->edmg.channels = 0;
@@ -153,7 +154,8 @@ bool cfg80211_chandef_valid(const struct cfg80211_chan_def *chandef)
 	case NL80211_CHAN_WIDTH_10:
 	case NL80211_CHAN_WIDTH_20:
 	case NL80211_CHAN_WIDTH_20_NOHT:
-		if (chandef->center_freq1 != control_freq)
+		if (ieee80211_chandef_to_khz(chandef) !=
+		    ieee80211_channel_to_khz(chandef->chan))
 			return false;
 		if (chandef->center_freq2)
 			return false;
@@ -386,10 +388,11 @@ static u32 cfg80211_get_start_freq(u32 center_freq,
 {
 	u32 start_freq;
 
-	if (bandwidth <= 20)
+	bandwidth = MHZ_TO_KHZ(bandwidth);
+	if (bandwidth <= MHZ_TO_KHZ(20))
 		start_freq = center_freq;
 	else
-		start_freq = center_freq - bandwidth/2 + 10;
+		start_freq = center_freq - bandwidth / 2 + MHZ_TO_KHZ(10);
 
 	return start_freq;
 }
@@ -399,10 +402,11 @@ static u32 cfg80211_get_end_freq(u32 center_freq,
 {
 	u32 end_freq;
 
-	if (bandwidth <= 20)
+	bandwidth = MHZ_TO_KHZ(bandwidth);
+	if (bandwidth <= MHZ_TO_KHZ(20))
 		end_freq = center_freq;
 	else
-		end_freq = center_freq + bandwidth/2 - 10;
+		end_freq = center_freq + bandwidth / 2 - MHZ_TO_KHZ(10);
 
 	return end_freq;
 }
@@ -417,8 +421,8 @@ static int cfg80211_get_chans_dfs_required(struct wiphy *wiphy,
 	start_freq = cfg80211_get_start_freq(center_freq, bandwidth);
 	end_freq = cfg80211_get_end_freq(center_freq, bandwidth);
 
-	for (freq = start_freq; freq <= end_freq; freq += 20) {
-		c = ieee80211_get_channel(wiphy, freq);
+	for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) {
+		c = ieee80211_get_channel_khz(wiphy, freq);
 		if (!c)
 			return -EINVAL;
 
@@ -449,8 +453,8 @@ int cfg80211_chandef_dfs_required(struct wiphy *wiphy,
 			return -EINVAL;
 
 		ret = cfg80211_get_chans_dfs_required(wiphy,
-						      chandef->center_freq1,
-						      width);
+					ieee80211_chandef_to_khz(chandef),
+					width);
 		if (ret < 0)
 			return ret;
 		else if (ret > 0)
@@ -460,8 +464,8 @@ int cfg80211_chandef_dfs_required(struct wiphy *wiphy,
 			return 0;
 
 		ret = cfg80211_get_chans_dfs_required(wiphy,
-						      chandef->center_freq2,
-						      width);
+					MHZ_TO_KHZ(chandef->center_freq2),
+					width);
 		if (ret < 0)
 			return ret;
 		else if (ret > 0)
@@ -503,8 +507,8 @@ static int cfg80211_get_chans_dfs_usable(struct wiphy *wiphy,
 	 * DFS_AVAILABLE). Return number of usable channels
 	 * (require CAC). Allow DFS and non-DFS channel mix.
 	 */
-	for (freq = start_freq; freq <= end_freq; freq += 20) {
-		c = ieee80211_get_channel(wiphy, freq);
+	for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) {
+		c = ieee80211_get_channel_khz(wiphy, freq);
 		if (!c)
 			return -EINVAL;
 
@@ -536,8 +540,9 @@ bool cfg80211_chandef_dfs_usable(struct wiphy *wiphy,
 	if (width < 0)
 		return false;
 
-	r1 = cfg80211_get_chans_dfs_usable(wiphy, chandef->center_freq1,
-					  width);
+	r1 = cfg80211_get_chans_dfs_usable(wiphy,
+					   MHZ_TO_KHZ(chandef->center_freq1),
+					   width);
 
 	if (r1 < 0)
 		return false;
@@ -546,8 +551,8 @@ bool cfg80211_chandef_dfs_usable(struct wiphy *wiphy,
 	case NL80211_CHAN_WIDTH_80P80:
 		WARN_ON(!chandef->center_freq2);
 		r2 = cfg80211_get_chans_dfs_usable(wiphy,
-						   chandef->center_freq2,
-						   width);
+					MHZ_TO_KHZ(chandef->center_freq2),
+					width);
 		if (r2 < 0)
 			return false;
 		break;
@@ -694,8 +699,8 @@ static bool cfg80211_get_chans_dfs_available(struct wiphy *wiphy,
 	 * If any channel in between is disabled or has not
 	 * had gone through CAC return false
 	 */
-	for (freq = start_freq; freq <= end_freq; freq += 20) {
-		c = ieee80211_get_channel(wiphy, freq);
+	for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) {
+		c = ieee80211_get_channel_khz(wiphy, freq);
 		if (!c)
 			return false;
 
@@ -724,7 +729,8 @@ static bool cfg80211_chandef_dfs_available(struct wiphy *wiphy,
 	if (width < 0)
 		return false;
 
-	r = cfg80211_get_chans_dfs_available(wiphy, chandef->center_freq1,
+	r = cfg80211_get_chans_dfs_available(wiphy,
+					     MHZ_TO_KHZ(chandef->center_freq1),
 					     width);
 
 	/* If any of channels unavailable for cf1 just return */
@@ -735,8 +741,8 @@ static bool cfg80211_chandef_dfs_available(struct wiphy *wiphy,
 	case NL80211_CHAN_WIDTH_80P80:
 		WARN_ON(!chandef->center_freq2);
 		r = cfg80211_get_chans_dfs_available(wiphy,
-						     chandef->center_freq2,
-						     width);
+					MHZ_TO_KHZ(chandef->center_freq2),
+					width);
 		break;
 	default:
 		WARN_ON(chandef->center_freq2);
@@ -757,8 +763,8 @@ static unsigned int cfg80211_get_chans_dfs_cac_time(struct wiphy *wiphy,
 	start_freq = cfg80211_get_start_freq(center_freq, bandwidth);
 	end_freq = cfg80211_get_end_freq(center_freq, bandwidth);
 
-	for (freq = start_freq; freq <= end_freq; freq += 20) {
-		c = ieee80211_get_channel(wiphy, freq);
+	for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) {
+		c = ieee80211_get_channel_khz(wiphy, freq);
 		if (!c)
 			return 0;
 
@@ -790,14 +796,14 @@ cfg80211_chandef_dfs_cac_time(struct wiphy *wiphy,
 		return 0;
 
 	t1 = cfg80211_get_chans_dfs_cac_time(wiphy,
-					     chandef->center_freq1,
+					     MHZ_TO_KHZ(chandef->center_freq1),
 					     width);
 
 	if (!chandef->center_freq2)
 		return t1;
 
 	t2 = cfg80211_get_chans_dfs_cac_time(wiphy,
-					     chandef->center_freq2,
+					     MHZ_TO_KHZ(chandef->center_freq2),
 					     width);
 
 	return max(t1, t2);
@@ -813,8 +819,8 @@ static bool cfg80211_secondary_chans_ok(struct wiphy *wiphy,
 	start_freq = cfg80211_get_start_freq(center_freq, bandwidth);
 	end_freq = cfg80211_get_end_freq(center_freq, bandwidth);
 
-	for (freq = start_freq; freq <= end_freq; freq += 20) {
-		c = ieee80211_get_channel(wiphy, freq);
+	for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) {
+		c = ieee80211_get_channel_khz(wiphy, freq);
 		if (!c || c->flags & prohibited_flags)
 			return false;
 	}
@@ -910,7 +916,8 @@ bool cfg80211_chandef_usable(struct wiphy *wiphy,
 		width = 10;
 		break;
 	case NL80211_CHAN_WIDTH_20:
-		if (!ht_cap->ht_supported)
+		if (!ht_cap->ht_supported &&
+		    chandef->chan->band != NL80211_BAND_6GHZ)
 			return false;
 		/* fall through */
 	case NL80211_CHAN_WIDTH_20_NOHT:
@@ -919,6 +926,8 @@ bool cfg80211_chandef_usable(struct wiphy *wiphy,
 		break;
 	case NL80211_CHAN_WIDTH_40:
 		width = 40;
+		if (chandef->chan->band == NL80211_BAND_6GHZ)
+			break;
 		if (!ht_cap->ht_supported)
 			return false;
 		if (!(ht_cap->cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) ||
@@ -933,24 +942,29 @@ bool cfg80211_chandef_usable(struct wiphy *wiphy,
 		break;
 	case NL80211_CHAN_WIDTH_80P80:
 		cap = vht_cap->cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK;
-		if (cap != IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ)
+		if (chandef->chan->band != NL80211_BAND_6GHZ &&
+		    cap != IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ)
 			return false;
 		/* fall through */
 	case NL80211_CHAN_WIDTH_80:
-		if (!vht_cap->vht_supported)
-			return false;
 		prohibited_flags |= IEEE80211_CHAN_NO_80MHZ;
 		width = 80;
+		if (chandef->chan->band == NL80211_BAND_6GHZ)
+			break;
+		if (!vht_cap->vht_supported)
+			return false;
 		break;
 	case NL80211_CHAN_WIDTH_160:
+		prohibited_flags |= IEEE80211_CHAN_NO_160MHZ;
+		width = 160;
+		if (chandef->chan->band == NL80211_BAND_6GHZ)
+			break;
 		if (!vht_cap->vht_supported)
 			return false;
 		cap = vht_cap->cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK;
 		if (cap != IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ &&
 		    cap != IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ)
 			return false;
-		prohibited_flags |= IEEE80211_CHAN_NO_160MHZ;
-		width = 160;
 		break;
 	default:
 		WARN_ON_ONCE(1);
@@ -976,13 +990,15 @@ bool cfg80211_chandef_usable(struct wiphy *wiphy,
 		prohibited_flags |= IEEE80211_CHAN_NO_OFDM;
 
 
-	if (!cfg80211_secondary_chans_ok(wiphy, chandef->center_freq1,
+	if (!cfg80211_secondary_chans_ok(wiphy,
+					 ieee80211_chandef_to_khz(chandef),
 					 width, prohibited_flags))
 		return false;
 
 	if (!chandef->center_freq2)
 		return true;
-	return cfg80211_secondary_chans_ok(wiphy, chandef->center_freq2,
+	return cfg80211_secondary_chans_ok(wiphy,
+					   MHZ_TO_KHZ(chandef->center_freq2),
 					   width, prohibited_flags);
 }
 EXPORT_SYMBOL(cfg80211_chandef_usable);
diff --git a/net/wireless/core.c b/net/wireless/core.c
index 5d151e8..52261cb 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -5,7 +5,7 @@
  * Copyright 2006-2010		Johannes Berg <johannes@sipsolutions.net>
  * Copyright 2013-2014  Intel Mobile Communications GmbH
  * Copyright 2015-2017	Intel Deutschland GmbH
- * Copyright (C) 2018-2019 Intel Corporation
+ * Copyright (C) 2018-2020 Intel Corporation
  */
 
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
@@ -788,6 +788,7 @@ int wiphy_register(struct wiphy *wiphy)
 	/* sanity check supported bands/channels */
 	for (band = 0; band < NUM_NL80211_BANDS; band++) {
 		u16 types = 0;
+		bool have_he = false;
 
 		sband = wiphy->bands[band];
 		if (!sband)
@@ -804,6 +805,11 @@ int wiphy_register(struct wiphy *wiphy)
 			    !sband->n_bitrates))
 			return -EINVAL;
 
+		if (WARN_ON(band == NL80211_BAND_6GHZ &&
+			    (sband->ht_cap.ht_supported ||
+			     sband->vht_cap.vht_supported)))
+			return -EINVAL;
+
 		/*
 		 * Since cfg80211_disable_40mhz_24ghz is global, we can
 		 * modify the sband's ht data even if the driver uses a
@@ -848,8 +854,17 @@ int wiphy_register(struct wiphy *wiphy)
 				return -EINVAL;
 
 			types |= iftd->types_mask;
+
+			if (i == 0)
+				have_he = iftd->he_cap.has_he;
+			else
+				have_he = have_he &&
+					  iftd->he_cap.has_he;
 		}
 
+		if (WARN_ON(!have_he && band == NL80211_BAND_6GHZ))
+			return -EINVAL;
+
 		have_band = true;
 	}
 
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 5bb2316b..b21a482 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -628,6 +628,10 @@ const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
 					.len = SAE_PASSWORD_MAX_LEN },
 	[NL80211_ATTR_TWT_RESPONDER] = { .type = NLA_FLAG },
 	[NL80211_ATTR_HE_OBSS_PD] = NLA_POLICY_NESTED(he_obss_pd_policy),
+	[NL80211_ATTR_HE_6GHZ_CAPABILITY] = {
+		.type = NLA_EXACT_LEN,
+		.len = sizeof(struct ieee80211_he_6ghz_capa),
+	},
 };
 
 /* policy for the key attributes */
@@ -1536,6 +1540,7 @@ static int nl80211_send_coalesce(struct sk_buff *msg,
 
 static int
 nl80211_send_iftype_data(struct sk_buff *msg,
+			 const struct ieee80211_supported_band *sband,
 			 const struct ieee80211_sband_iftype_data *iftdata)
 {
 	const struct ieee80211_sta_he_cap *he_cap = &iftdata->he_cap;
@@ -1559,6 +1564,12 @@ nl80211_send_iftype_data(struct sk_buff *msg,
 			return -ENOBUFS;
 	}
 
+	if (sband->band == NL80211_BAND_6GHZ &&
+	    nla_put(msg, NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA,
+		    sizeof(iftdata->he_6ghz_capa),
+		    &iftdata->he_6ghz_capa))
+		return -ENOBUFS;
+
 	return 0;
 }
 
@@ -1607,7 +1618,7 @@ static int nl80211_send_band_rateinfo(struct sk_buff *msg,
 			if (!iftdata)
 				return -ENOBUFS;
 
-			err = nl80211_send_iftype_data(msg,
+			err = nl80211_send_iftype_data(msg, sband,
 						       &sband->iftype_data[i]);
 			if (err)
 				return err;
@@ -5784,6 +5795,10 @@ static int nl80211_set_station(struct sk_buff *skb, struct genl_info *info)
 			nla_get_u8(info->attrs[NL80211_ATTR_OPMODE_NOTIF]);
 	}
 
+	if (info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY])
+		params.he_6ghz_capa =
+			nla_data(info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY]);
+
 	if (info->attrs[NL80211_ATTR_AIRTIME_WEIGHT])
 		params.airtime_weight =
 			nla_get_u16(info->attrs[NL80211_ATTR_AIRTIME_WEIGHT]);
@@ -5915,6 +5930,10 @@ static int nl80211_new_station(struct sk_buff *skb, struct genl_info *info)
 			return -EINVAL;
 	}
 
+	if (info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY])
+		params.he_6ghz_capa =
+			nla_data(info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY]);
+
 	if (info->attrs[NL80211_ATTR_OPMODE_NOTIF]) {
 		params.opmode_notif_used = true;
 		params.opmode_notif =
@@ -5959,10 +5978,14 @@ static int nl80211_new_station(struct sk_buff *skb, struct genl_info *info)
 		params.vht_capa = NULL;
 
 		/* HE requires WME */
-		if (params.he_capa_len)
+		if (params.he_capa_len || params.he_6ghz_capa)
 			return -EINVAL;
 	}
 
+	/* Ensure that HT/VHT capabilities are not set for 6 GHz HE STA */
+	if (params.he_6ghz_capa && (params.ht_capa || params.vht_capa))
+		return -EINVAL;
+
 	/* When you run into this, adjust the code below for the new flag */
 	BUILD_BUG_ON(NL80211_STA_FLAG_MAX != 7);
 
diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index 0f3b57a..9cb4523 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -1656,22 +1656,23 @@ static uint32_t reg_rule_to_chan_bw_flags(const struct ieee80211_regdomain *regd
 					  const struct ieee80211_channel *chan)
 {
 	const struct ieee80211_freq_range *freq_range = NULL;
-	u32 max_bandwidth_khz, bw_flags = 0;
+	u32 max_bandwidth_khz, center_freq_khz, bw_flags = 0;
 
 	freq_range = &reg_rule->freq_range;
 
 	max_bandwidth_khz = freq_range->max_bandwidth_khz;
+	center_freq_khz = ieee80211_channel_to_khz(chan);
 	/* Check if auto calculation requested */
 	if (reg_rule->flags & NL80211_RRF_AUTO_BW)
 		max_bandwidth_khz = reg_get_max_bandwidth(regd, reg_rule);
 
 	/* If we get a reg_rule we can assume that at least 5Mhz fit */
 	if (!cfg80211_does_bw_fit_range(freq_range,
-					MHZ_TO_KHZ(chan->center_freq),
+					center_freq_khz,
 					MHZ_TO_KHZ(10)))
 		bw_flags |= IEEE80211_CHAN_NO_10MHZ;
 	if (!cfg80211_does_bw_fit_range(freq_range,
-					MHZ_TO_KHZ(chan->center_freq),
+					center_freq_khz,
 					MHZ_TO_KHZ(20)))
 		bw_flags |= IEEE80211_CHAN_NO_20MHZ;
 
@@ -1708,7 +1709,7 @@ static void handle_channel(struct wiphy *wiphy,
 
 	flags = chan->orig_flags;
 
-	reg_rule = freq_reg_info(wiphy, MHZ_TO_KHZ(chan->center_freq));
+	reg_rule = freq_reg_info(wiphy, ieee80211_channel_to_khz(chan));
 	if (IS_ERR(reg_rule)) {
 		/*
 		 * We will disable all channels that do not match our
@@ -1727,13 +1728,13 @@ static void handle_channel(struct wiphy *wiphy,
 		if (lr->initiator == NL80211_REGDOM_SET_BY_DRIVER &&
 		    request_wiphy && request_wiphy == wiphy &&
 		    request_wiphy->regulatory_flags & REGULATORY_STRICT_REG) {
-			pr_debug("Disabling freq %d MHz for good\n",
-				 chan->center_freq);
+			pr_debug("Disabling freq %d.%03d MHz for good\n",
+				 chan->center_freq, chan->freq_offset);
 			chan->orig_flags |= IEEE80211_CHAN_DISABLED;
 			chan->flags = chan->orig_flags;
 		} else {
-			pr_debug("Disabling freq %d MHz\n",
-				 chan->center_freq);
+			pr_debug("Disabling freq %d.%03d MHz\n",
+				 chan->center_freq, chan->freq_offset);
 			chan->flags |= IEEE80211_CHAN_DISABLED;
 		}
 		return;
@@ -1934,7 +1935,7 @@ static void handle_reg_beacon(struct wiphy *wiphy, unsigned int chan_idx,
 	sband = wiphy->bands[reg_beacon->chan.band];
 	chan = &sband->channels[chan_idx];
 
-	if (likely(chan->center_freq != reg_beacon->chan.center_freq))
+	if (likely(!ieee80211_channel_equal(chan, &reg_beacon->chan)))
 		return;
 
 	if (chan->beacon_found)
@@ -2267,18 +2268,18 @@ static void handle_channel_custom(struct wiphy *wiphy,
 	u32 bw_flags = 0;
 	const struct ieee80211_reg_rule *reg_rule = NULL;
 	const struct ieee80211_power_rule *power_rule = NULL;
-	u32 bw;
+	u32 bw, center_freq_khz;
 
+	center_freq_khz = ieee80211_channel_to_khz(chan);
 	for (bw = MHZ_TO_KHZ(20); bw >= min_bw; bw = bw / 2) {
-		reg_rule = freq_reg_info_regd(MHZ_TO_KHZ(chan->center_freq),
-					      regd, bw);
+		reg_rule = freq_reg_info_regd(center_freq_khz, regd, bw);
 		if (!IS_ERR(reg_rule))
 			break;
 	}
 
 	if (IS_ERR_OR_NULL(reg_rule)) {
-		pr_debug("Disabling freq %d MHz as custom regd has no rule that fits it\n",
-			 chan->center_freq);
+		pr_debug("Disabling freq %d.%03d MHz as custom regd has no rule that fits it\n",
+			 chan->center_freq, chan->freq_offset);
 		if (wiphy->regulatory_flags & REGULATORY_WIPHY_SELF_MANAGED) {
 			chan->flags |= IEEE80211_CHAN_DISABLED;
 		} else {
@@ -3338,8 +3339,8 @@ static bool pending_reg_beacon(struct ieee80211_channel *beacon_chan)
 	struct reg_beacon *pending_beacon;
 
 	list_for_each_entry(pending_beacon, &reg_pending_beacons, list)
-		if (beacon_chan->center_freq ==
-		    pending_beacon->chan.center_freq)
+		if (ieee80211_channel_equal(beacon_chan,
+					    &pending_beacon->chan))
 			return true;
 	return false;
 }
@@ -3368,9 +3369,10 @@ int regulatory_hint_found_beacon(struct wiphy *wiphy,
 	if (!reg_beacon)
 		return -ENOMEM;
 
-	pr_debug("Found new beacon on frequency: %d MHz (Ch %d) on %s\n",
-		 beacon_chan->center_freq,
-		 ieee80211_frequency_to_channel(beacon_chan->center_freq),
+	pr_debug("Found new beacon on frequency: %d.%03d MHz (Ch %d) on %s\n",
+		 beacon_chan->center_freq, beacon_chan->freq_offset,
+		 ieee80211_freq_khz_to_channel(
+			 ieee80211_channel_to_khz(beacon_chan)),
 		 wiphy_name(wiphy));
 
 	memcpy(&reg_beacon->chan, beacon_chan,
diff --git a/net/wireless/scan.c b/net/wireless/scan.c
index 328402a..33b3c99 100644
--- a/net/wireless/scan.c
+++ b/net/wireless/scan.c
@@ -1323,8 +1323,8 @@ cfg80211_get_bss_channel(struct wiphy *wiphy, const u8 *ie, size_t ielen,
 		return channel;
 	}
 
-	freq = ieee80211_channel_to_frequency(channel_number, channel->band);
-	alt_channel = ieee80211_get_channel(wiphy, freq);
+	freq = ieee80211_channel_to_freq_khz(channel_number, channel->band);
+	alt_channel = ieee80211_get_channel_khz(wiphy, freq);
 	if (!alt_channel) {
 		if (channel->band == NL80211_BAND_2GHZ) {
 			/*
diff --git a/net/wireless/trace.h b/net/wireless/trace.h
index 8677d7a..0445cf5 100644
--- a/net/wireless/trace.h
+++ b/net/wireless/trace.h
@@ -112,24 +112,29 @@
 	} while (0)
 
 #define CHAN_ENTRY __field(enum nl80211_band, band) \
-		   __field(u32, center_freq)
+		   __field(u32, center_freq)		\
+		   __field(u16, freq_offset)
 #define CHAN_ASSIGN(chan)					  \
 	do {							  \
 		if (chan) {					  \
 			__entry->band = chan->band;		  \
 			__entry->center_freq = chan->center_freq; \
+			__entry->freq_offset = chan->freq_offset; \
 		} else {					  \
 			__entry->band = 0;			  \
 			__entry->center_freq = 0;		  \
+			__entry->freq_offset = 0;		  \
 		}						  \
 	} while (0)
-#define CHAN_PR_FMT "band: %d, freq: %u"
-#define CHAN_PR_ARG __entry->band, __entry->center_freq
+#define CHAN_PR_FMT "band: %d, freq: %u.%03u"
+#define CHAN_PR_ARG __entry->band, __entry->center_freq, __entry->freq_offset
 
 #define CHAN_DEF_ENTRY __field(enum nl80211_band, band)		\
 		       __field(u32, control_freq)			\
+		       __field(u32, freq_offset)			\
 		       __field(u32, width)				\
 		       __field(u32, center_freq1)			\
+		       __field(u32, freq1_offset)			\
 		       __field(u32, center_freq2)
 #define CHAN_DEF_ASSIGN(chandef)					\
 	do {								\
@@ -137,21 +142,27 @@
 			__entry->band = (chandef)->chan->band;		\
 			__entry->control_freq =				\
 				(chandef)->chan->center_freq;		\
+			__entry->freq_offset =				\
+				(chandef)->chan->freq_offset;		\
 			__entry->width = (chandef)->width;		\
 			__entry->center_freq1 = (chandef)->center_freq1;\
+			__entry->freq1_offset = (chandef)->freq1_offset;\
 			__entry->center_freq2 = (chandef)->center_freq2;\
 		} else {						\
 			__entry->band = 0;				\
 			__entry->control_freq = 0;			\
+			__entry->freq_offset = 0;			\
 			__entry->width = 0;				\
 			__entry->center_freq1 = 0;			\
+			__entry->freq1_offset = 0;			\
 			__entry->center_freq2 = 0;			\
 		}							\
 	} while (0)
 #define CHAN_DEF_PR_FMT							\
-	"band: %d, control freq: %u, width: %d, cf1: %u, cf2: %u"
+	"band: %d, control freq: %u.%03u, width: %d, cf1: %u.%03u, cf2: %u"
 #define CHAN_DEF_PR_ARG __entry->band, __entry->control_freq,		\
-			__entry->width, __entry->center_freq1,		\
+			__entry->freq_offset, __entry->width,		\
+			__entry->center_freq1, __entry->freq1_offset,	\
 			__entry->center_freq2
 
 #define SINFO_ENTRY __field(int, generation)	    \
diff --git a/net/wireless/util.c b/net/wireless/util.c
index 9abafd7..bb03a22 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -72,7 +72,7 @@ u32 ieee80211_mandatory_rates(struct ieee80211_supported_band *sband,
 }
 EXPORT_SYMBOL(ieee80211_mandatory_rates);
 
-int ieee80211_channel_to_frequency(int chan, enum nl80211_band band)
+u32 ieee80211_channel_to_freq_khz(int chan, enum nl80211_band band)
 {
 	/* see 802.11 17.3.8.3.2 and Annex J
 	 * there are overlapping channel numbers in 5GHz and 2GHz bands */
@@ -81,34 +81,39 @@ int ieee80211_channel_to_frequency(int chan, enum nl80211_band band)
 	switch (band) {
 	case NL80211_BAND_2GHZ:
 		if (chan == 14)
-			return 2484;
+			return MHZ_TO_KHZ(2484);
 		else if (chan < 14)
-			return 2407 + chan * 5;
+			return MHZ_TO_KHZ(2407 + chan * 5);
 		break;
 	case NL80211_BAND_5GHZ:
 		if (chan >= 182 && chan <= 196)
-			return 4000 + chan * 5;
+			return MHZ_TO_KHZ(4000 + chan * 5);
 		else
-			return 5000 + chan * 5;
+			return MHZ_TO_KHZ(5000 + chan * 5);
 		break;
 	case NL80211_BAND_6GHZ:
-		/* see 802.11ax D4.1 27.3.22.2 */
-		if (chan <= 253)
-			return 5940 + chan * 5;
+		/* see 802.11ax D6.1 27.3.23.2 */
+		if (chan == 2)
+			return MHZ_TO_KHZ(5935);
+		if (chan <= 233)
+			return MHZ_TO_KHZ(5950 + chan * 5);
 		break;
 	case NL80211_BAND_60GHZ:
 		if (chan < 7)
-			return 56160 + chan * 2160;
+			return MHZ_TO_KHZ(56160 + chan * 2160);
 		break;
 	default:
 		;
 	}
 	return 0; /* not supported */
 }
-EXPORT_SYMBOL(ieee80211_channel_to_frequency);
+EXPORT_SYMBOL(ieee80211_channel_to_freq_khz);
 
-int ieee80211_frequency_to_channel(int freq)
+int ieee80211_freq_khz_to_channel(u32 freq)
 {
+	/* TODO: just handle MHz for now */
+	freq = KHZ_TO_MHZ(freq);
+
 	/* see 802.11 17.3.8.3.2 and Annex J */
 	if (freq == 2484)
 		return 14;
@@ -128,9 +133,10 @@ int ieee80211_frequency_to_channel(int freq)
 	else
 		return 0;
 }
-EXPORT_SYMBOL(ieee80211_frequency_to_channel);
+EXPORT_SYMBOL(ieee80211_freq_khz_to_channel);
 
-struct ieee80211_channel *ieee80211_get_channel(struct wiphy *wiphy, int freq)
+struct ieee80211_channel *ieee80211_get_channel_khz(struct wiphy *wiphy,
+						    u32 freq)
 {
 	enum nl80211_band band;
 	struct ieee80211_supported_band *sband;
@@ -143,14 +149,16 @@ struct ieee80211_channel *ieee80211_get_channel(struct wiphy *wiphy, int freq)
 			continue;
 
 		for (i = 0; i < sband->n_channels; i++) {
-			if (sband->channels[i].center_freq == freq)
-				return &sband->channels[i];
+			struct ieee80211_channel *chan = &sband->channels[i];
+
+			if (ieee80211_channel_to_khz(chan) == freq)
+				return chan;
 		}
 	}
 
 	return NULL;
 }
-EXPORT_SYMBOL(ieee80211_get_channel);
+EXPORT_SYMBOL(ieee80211_get_channel_khz);
 
 static void set_mandatory_flags_band(struct ieee80211_supported_band *sband)
 {
diff --git a/net/xfrm/Kconfig b/net/xfrm/Kconfig
index 51bb601..e5815cb 100644
--- a/net/xfrm/Kconfig
+++ b/net/xfrm/Kconfig
@@ -28,6 +28,17 @@
 
 	  If unsure, say Y.
 
+config XFRM_USER_COMPAT
+	tristate "Compatible ABI support"
+	depends on XFRM_USER && COMPAT_FOR_U64_ALIGNMENT && \
+		HAVE_EFFICIENT_UNALIGNED_ACCESS
+	select WANT_COMPAT_NETLINK_MESSAGES
+	help
+	  Transformation(XFRM) user configuration interface like IPsec
+	  used by compatible Linux applications.
+
+	  If unsure, say N.
+
 config XFRM_INTERFACE
 	tristate "Transformation virtual interface"
 	depends on XFRM && IPV6
diff --git a/net/xfrm/Makefile b/net/xfrm/Makefile
index fbc4552d..f325115 100644
--- a/net/xfrm/Makefile
+++ b/net/xfrm/Makefile
@@ -9,5 +9,6 @@
 obj-$(CONFIG_XFRM_STATISTICS) += xfrm_proc.o
 obj-$(CONFIG_XFRM_ALGO) += xfrm_algo.o
 obj-$(CONFIG_XFRM_USER) += xfrm_user.o
+obj-$(CONFIG_XFRM_USER_COMPAT) += xfrm_compat.o
 obj-$(CONFIG_XFRM_IPCOMP) += xfrm_ipcomp.o
 obj-$(CONFIG_XFRM_INTERFACE) += xfrm_interface.o
diff --git a/net/xfrm/xfrm_algo.c b/net/xfrm/xfrm_algo.c
index 32a378e..8b06ef5 100644
--- a/net/xfrm/xfrm_algo.c
+++ b/net/xfrm/xfrm_algo.c
@@ -237,7 +237,7 @@ static struct xfrm_algo_desc aalg_list[] = {
 
 	.uinfo = {
 		.auth = {
-			.icv_truncbits = 96,
+			.icv_truncbits = 128,
 			.icv_fullbits = 256,
 		}
 	},
diff --git a/net/xfrm/xfrm_compat.c b/net/xfrm/xfrm_compat.c
new file mode 100644
index 0000000..e28f0c9
--- /dev/null
+++ b/net/xfrm/xfrm_compat.c
@@ -0,0 +1,625 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * XFRM compat layer
+ * Author: Dmitry Safonov <dima@arista.com>
+ * Based on code and translator idea by: Florian Westphal <fw@strlen.de>
+ */
+#include <linux/compat.h>
+#include <linux/xfrm.h>
+#include <net/xfrm.h>
+
+struct compat_xfrm_lifetime_cfg {
+	compat_u64 soft_byte_limit, hard_byte_limit;
+	compat_u64 soft_packet_limit, hard_packet_limit;
+	compat_u64 soft_add_expires_seconds, hard_add_expires_seconds;
+	compat_u64 soft_use_expires_seconds, hard_use_expires_seconds;
+}; /* same size on 32bit, but only 4 byte alignment required */
+
+struct compat_xfrm_lifetime_cur {
+	compat_u64 bytes, packets, add_time, use_time;
+}; /* same size on 32bit, but only 4 byte alignment required */
+
+struct compat_xfrm_userpolicy_info {
+	struct xfrm_selector sel;
+	struct compat_xfrm_lifetime_cfg lft;
+	struct compat_xfrm_lifetime_cur curlft;
+	__u32 priority, index;
+	u8 dir, action, flags, share;
+	/* 4 bytes additional padding on 64bit */
+};
+
+struct compat_xfrm_usersa_info {
+	struct xfrm_selector sel;
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	struct compat_xfrm_lifetime_cfg lft;
+	struct compat_xfrm_lifetime_cur curlft;
+	struct xfrm_stats stats;
+	__u32 seq, reqid;
+	u16 family;
+	u8 mode, replay_window, flags;
+	/* 4 bytes additional padding on 64bit */
+};
+
+struct compat_xfrm_user_acquire {
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	struct xfrm_selector sel;
+	struct compat_xfrm_userpolicy_info policy;
+	/* 4 bytes additional padding on 64bit */
+	__u32 aalgos, ealgos, calgos, seq;
+};
+
+struct compat_xfrm_userspi_info {
+	struct compat_xfrm_usersa_info info;
+	/* 4 bytes additional padding on 64bit */
+	__u32 min, max;
+};
+
+struct compat_xfrm_user_expire {
+	struct compat_xfrm_usersa_info state;
+	/* 8 bytes additional padding on 64bit */
+	u8 hard;
+};
+
+struct compat_xfrm_user_polexpire {
+	struct compat_xfrm_userpolicy_info pol;
+	/* 8 bytes additional padding on 64bit */
+	u8 hard;
+};
+
+#define XMSGSIZE(type) sizeof(struct type)
+
+static const int compat_msg_min[XFRM_NR_MSGTYPES] = {
+	[XFRM_MSG_NEWSA       - XFRM_MSG_BASE] = XMSGSIZE(compat_xfrm_usersa_info),
+	[XFRM_MSG_DELSA       - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_id),
+	[XFRM_MSG_GETSA       - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_id),
+	[XFRM_MSG_NEWPOLICY   - XFRM_MSG_BASE] = XMSGSIZE(compat_xfrm_userpolicy_info),
+	[XFRM_MSG_DELPOLICY   - XFRM_MSG_BASE] = XMSGSIZE(xfrm_userpolicy_id),
+	[XFRM_MSG_GETPOLICY   - XFRM_MSG_BASE] = XMSGSIZE(xfrm_userpolicy_id),
+	[XFRM_MSG_ALLOCSPI    - XFRM_MSG_BASE] = XMSGSIZE(compat_xfrm_userspi_info),
+	[XFRM_MSG_ACQUIRE     - XFRM_MSG_BASE] = XMSGSIZE(compat_xfrm_user_acquire),
+	[XFRM_MSG_EXPIRE      - XFRM_MSG_BASE] = XMSGSIZE(compat_xfrm_user_expire),
+	[XFRM_MSG_UPDPOLICY   - XFRM_MSG_BASE] = XMSGSIZE(compat_xfrm_userpolicy_info),
+	[XFRM_MSG_UPDSA       - XFRM_MSG_BASE] = XMSGSIZE(compat_xfrm_usersa_info),
+	[XFRM_MSG_POLEXPIRE   - XFRM_MSG_BASE] = XMSGSIZE(compat_xfrm_user_polexpire),
+	[XFRM_MSG_FLUSHSA     - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_flush),
+	[XFRM_MSG_FLUSHPOLICY - XFRM_MSG_BASE] = 0,
+	[XFRM_MSG_NEWAE       - XFRM_MSG_BASE] = XMSGSIZE(xfrm_aevent_id),
+	[XFRM_MSG_GETAE       - XFRM_MSG_BASE] = XMSGSIZE(xfrm_aevent_id),
+	[XFRM_MSG_REPORT      - XFRM_MSG_BASE] = XMSGSIZE(xfrm_user_report),
+	[XFRM_MSG_MIGRATE     - XFRM_MSG_BASE] = XMSGSIZE(xfrm_userpolicy_id),
+	[XFRM_MSG_NEWSADINFO  - XFRM_MSG_BASE] = sizeof(u32),
+	[XFRM_MSG_GETSADINFO  - XFRM_MSG_BASE] = sizeof(u32),
+	[XFRM_MSG_NEWSPDINFO  - XFRM_MSG_BASE] = sizeof(u32),
+	[XFRM_MSG_GETSPDINFO  - XFRM_MSG_BASE] = sizeof(u32),
+	[XFRM_MSG_MAPPING     - XFRM_MSG_BASE] = XMSGSIZE(xfrm_user_mapping)
+};
+
+static const struct nla_policy compat_policy[XFRMA_MAX+1] = {
+	[XFRMA_SA]		= { .len = XMSGSIZE(compat_xfrm_usersa_info)},
+	[XFRMA_POLICY]		= { .len = XMSGSIZE(compat_xfrm_userpolicy_info)},
+	[XFRMA_LASTUSED]	= { .type = NLA_U64},
+	[XFRMA_ALG_AUTH_TRUNC]	= { .len = sizeof(struct xfrm_algo_auth)},
+	[XFRMA_ALG_AEAD]	= { .len = sizeof(struct xfrm_algo_aead) },
+	[XFRMA_ALG_AUTH]	= { .len = sizeof(struct xfrm_algo) },
+	[XFRMA_ALG_CRYPT]	= { .len = sizeof(struct xfrm_algo) },
+	[XFRMA_ALG_COMP]	= { .len = sizeof(struct xfrm_algo) },
+	[XFRMA_ENCAP]		= { .len = sizeof(struct xfrm_encap_tmpl) },
+	[XFRMA_TMPL]		= { .len = sizeof(struct xfrm_user_tmpl) },
+	[XFRMA_SEC_CTX]		= { .len = sizeof(struct xfrm_sec_ctx) },
+	[XFRMA_LTIME_VAL]	= { .len = sizeof(struct xfrm_lifetime_cur) },
+	[XFRMA_REPLAY_VAL]	= { .len = sizeof(struct xfrm_replay_state) },
+	[XFRMA_REPLAY_THRESH]	= { .type = NLA_U32 },
+	[XFRMA_ETIMER_THRESH]	= { .type = NLA_U32 },
+	[XFRMA_SRCADDR]		= { .len = sizeof(xfrm_address_t) },
+	[XFRMA_COADDR]		= { .len = sizeof(xfrm_address_t) },
+	[XFRMA_POLICY_TYPE]	= { .len = sizeof(struct xfrm_userpolicy_type)},
+	[XFRMA_MIGRATE]		= { .len = sizeof(struct xfrm_user_migrate) },
+	[XFRMA_KMADDRESS]	= { .len = sizeof(struct xfrm_user_kmaddress) },
+	[XFRMA_MARK]		= { .len = sizeof(struct xfrm_mark) },
+	[XFRMA_TFCPAD]		= { .type = NLA_U32 },
+	[XFRMA_REPLAY_ESN_VAL]	= { .len = sizeof(struct xfrm_replay_state_esn) },
+	[XFRMA_SA_EXTRA_FLAGS]	= { .type = NLA_U32 },
+	[XFRMA_PROTO]		= { .type = NLA_U8 },
+	[XFRMA_ADDRESS_FILTER]	= { .len = sizeof(struct xfrm_address_filter) },
+	[XFRMA_OFFLOAD_DEV]	= { .len = sizeof(struct xfrm_user_offload) },
+	[XFRMA_SET_MARK]	= { .type = NLA_U32 },
+	[XFRMA_SET_MARK_MASK]	= { .type = NLA_U32 },
+	[XFRMA_IF_ID]		= { .type = NLA_U32 },
+};
+
+static struct nlmsghdr *xfrm_nlmsg_put_compat(struct sk_buff *skb,
+			const struct nlmsghdr *nlh_src, u16 type)
+{
+	int payload = compat_msg_min[type];
+	int src_len = xfrm_msg_min[type];
+	struct nlmsghdr *nlh_dst;
+
+	/* Compat messages are shorter or equal to native (+padding) */
+	if (WARN_ON_ONCE(src_len < payload))
+		return ERR_PTR(-EMSGSIZE);
+
+	nlh_dst = nlmsg_put(skb, nlh_src->nlmsg_pid, nlh_src->nlmsg_seq,
+			    nlh_src->nlmsg_type, payload, nlh_src->nlmsg_flags);
+	if (!nlh_dst)
+		return ERR_PTR(-EMSGSIZE);
+
+	memset(nlmsg_data(nlh_dst), 0, payload);
+
+	switch (nlh_src->nlmsg_type) {
+	/* Compat message has the same layout as native */
+	case XFRM_MSG_DELSA:
+	case XFRM_MSG_DELPOLICY:
+	case XFRM_MSG_FLUSHSA:
+	case XFRM_MSG_FLUSHPOLICY:
+	case XFRM_MSG_NEWAE:
+	case XFRM_MSG_REPORT:
+	case XFRM_MSG_MIGRATE:
+	case XFRM_MSG_NEWSADINFO:
+	case XFRM_MSG_NEWSPDINFO:
+	case XFRM_MSG_MAPPING:
+		WARN_ON_ONCE(src_len != payload);
+		memcpy(nlmsg_data(nlh_dst), nlmsg_data(nlh_src), src_len);
+		break;
+	/* 4 byte alignment for trailing u64 on native, but not on compat */
+	case XFRM_MSG_NEWSA:
+	case XFRM_MSG_NEWPOLICY:
+	case XFRM_MSG_UPDSA:
+	case XFRM_MSG_UPDPOLICY:
+		WARN_ON_ONCE(src_len != payload + 4);
+		memcpy(nlmsg_data(nlh_dst), nlmsg_data(nlh_src), payload);
+		break;
+	case XFRM_MSG_EXPIRE: {
+		const struct xfrm_user_expire *src_ue  = nlmsg_data(nlh_src);
+		struct compat_xfrm_user_expire *dst_ue = nlmsg_data(nlh_dst);
+
+		/* compat_xfrm_user_expire has 4-byte smaller state */
+		memcpy(dst_ue, src_ue, sizeof(dst_ue->state));
+		dst_ue->hard = src_ue->hard;
+		break;
+	}
+	case XFRM_MSG_ACQUIRE: {
+		const struct xfrm_user_acquire *src_ua  = nlmsg_data(nlh_src);
+		struct compat_xfrm_user_acquire *dst_ua = nlmsg_data(nlh_dst);
+
+		memcpy(dst_ua, src_ua, offsetof(struct compat_xfrm_user_acquire, aalgos));
+		dst_ua->aalgos = src_ua->aalgos;
+		dst_ua->ealgos = src_ua->ealgos;
+		dst_ua->calgos = src_ua->calgos;
+		dst_ua->seq    = src_ua->seq;
+		break;
+	}
+	case XFRM_MSG_POLEXPIRE: {
+		const struct xfrm_user_polexpire *src_upe  = nlmsg_data(nlh_src);
+		struct compat_xfrm_user_polexpire *dst_upe = nlmsg_data(nlh_dst);
+
+		/* compat_xfrm_user_polexpire has 4-byte smaller state */
+		memcpy(dst_upe, src_upe, sizeof(dst_upe->pol));
+		dst_upe->hard = src_upe->hard;
+		break;
+	}
+	case XFRM_MSG_ALLOCSPI: {
+		const struct xfrm_userspi_info *src_usi = nlmsg_data(nlh_src);
+		struct compat_xfrm_userspi_info *dst_usi = nlmsg_data(nlh_dst);
+
+		/* compat_xfrm_user_polexpire has 4-byte smaller state */
+		memcpy(dst_usi, src_usi, sizeof(src_usi->info));
+		dst_usi->min = src_usi->min;
+		dst_usi->max = src_usi->max;
+		break;
+	}
+	/* Not being sent by kernel */
+	case XFRM_MSG_GETSA:
+	case XFRM_MSG_GETPOLICY:
+	case XFRM_MSG_GETAE:
+	case XFRM_MSG_GETSADINFO:
+	case XFRM_MSG_GETSPDINFO:
+	default:
+		WARN_ONCE(1, "unsupported nlmsg_type %d", nlh_src->nlmsg_type);
+		return ERR_PTR(-EOPNOTSUPP);
+	}
+
+	return nlh_dst;
+}
+
+static int xfrm_nla_cpy(struct sk_buff *dst, const struct nlattr *src, int len)
+{
+	return nla_put(dst, src->nla_type, len, nla_data(src));
+}
+
+static int xfrm_xlate64_attr(struct sk_buff *dst, const struct nlattr *src)
+{
+	switch (src->nla_type) {
+	case XFRMA_PAD:
+		/* Ignore */
+		return 0;
+	case XFRMA_ALG_AUTH:
+	case XFRMA_ALG_CRYPT:
+	case XFRMA_ALG_COMP:
+	case XFRMA_ENCAP:
+	case XFRMA_TMPL:
+		return xfrm_nla_cpy(dst, src, nla_len(src));
+	case XFRMA_SA:
+		return xfrm_nla_cpy(dst, src, XMSGSIZE(compat_xfrm_usersa_info));
+	case XFRMA_POLICY:
+		return xfrm_nla_cpy(dst, src, XMSGSIZE(compat_xfrm_userpolicy_info));
+	case XFRMA_SEC_CTX:
+		return xfrm_nla_cpy(dst, src, nla_len(src));
+	case XFRMA_LTIME_VAL:
+		return nla_put_64bit(dst, src->nla_type, nla_len(src),
+			nla_data(src), XFRMA_PAD);
+	case XFRMA_REPLAY_VAL:
+	case XFRMA_REPLAY_THRESH:
+	case XFRMA_ETIMER_THRESH:
+	case XFRMA_SRCADDR:
+	case XFRMA_COADDR:
+		return xfrm_nla_cpy(dst, src, nla_len(src));
+	case XFRMA_LASTUSED:
+		return nla_put_64bit(dst, src->nla_type, nla_len(src),
+			nla_data(src), XFRMA_PAD);
+	case XFRMA_POLICY_TYPE:
+	case XFRMA_MIGRATE:
+	case XFRMA_ALG_AEAD:
+	case XFRMA_KMADDRESS:
+	case XFRMA_ALG_AUTH_TRUNC:
+	case XFRMA_MARK:
+	case XFRMA_TFCPAD:
+	case XFRMA_REPLAY_ESN_VAL:
+	case XFRMA_SA_EXTRA_FLAGS:
+	case XFRMA_PROTO:
+	case XFRMA_ADDRESS_FILTER:
+	case XFRMA_OFFLOAD_DEV:
+	case XFRMA_SET_MARK:
+	case XFRMA_SET_MARK_MASK:
+	case XFRMA_IF_ID:
+		return xfrm_nla_cpy(dst, src, nla_len(src));
+	default:
+		BUILD_BUG_ON(XFRMA_MAX != XFRMA_IF_ID);
+		WARN_ONCE(1, "unsupported nla_type %d", src->nla_type);
+		return -EOPNOTSUPP;
+	}
+}
+
+/* Take kernel-built (64bit layout) and create 32bit layout for userspace */
+static int xfrm_xlate64(struct sk_buff *dst, const struct nlmsghdr *nlh_src)
+{
+	u16 type = nlh_src->nlmsg_type - XFRM_MSG_BASE;
+	const struct nlattr *nla, *attrs;
+	struct nlmsghdr *nlh_dst;
+	int len, remaining;
+
+	nlh_dst = xfrm_nlmsg_put_compat(dst, nlh_src, type);
+	if (IS_ERR(nlh_dst))
+		return PTR_ERR(nlh_dst);
+
+	attrs = nlmsg_attrdata(nlh_src, xfrm_msg_min[type]);
+	len = nlmsg_attrlen(nlh_src, xfrm_msg_min[type]);
+
+	nla_for_each_attr(nla, attrs, len, remaining) {
+		int err = xfrm_xlate64_attr(dst, nla);
+
+		if (err)
+			return err;
+	}
+
+	nlmsg_end(dst, nlh_dst);
+
+	return 0;
+}
+
+static int xfrm_alloc_compat(struct sk_buff *skb, const struct nlmsghdr *nlh_src)
+{
+	u16 type = nlh_src->nlmsg_type - XFRM_MSG_BASE;
+	struct sk_buff *new = NULL;
+	int err;
+
+	if (WARN_ON_ONCE(type >= ARRAY_SIZE(xfrm_msg_min)))
+		return -EOPNOTSUPP;
+
+	if (skb_shinfo(skb)->frag_list == NULL) {
+		new = alloc_skb(skb->len + skb_tailroom(skb), GFP_ATOMIC);
+		if (!new)
+			return -ENOMEM;
+		skb_shinfo(skb)->frag_list = new;
+	}
+
+	err = xfrm_xlate64(skb_shinfo(skb)->frag_list, nlh_src);
+	if (err) {
+		if (new) {
+			kfree_skb(new);
+			skb_shinfo(skb)->frag_list = NULL;
+		}
+		return err;
+	}
+
+	return 0;
+}
+
+/* Calculates len of translated 64-bit message. */
+static size_t xfrm_user_rcv_calculate_len64(const struct nlmsghdr *src,
+					    struct nlattr *attrs[XFRMA_MAX+1])
+{
+	size_t len = nlmsg_len(src);
+
+	switch (src->nlmsg_type) {
+	case XFRM_MSG_NEWSA:
+	case XFRM_MSG_NEWPOLICY:
+	case XFRM_MSG_ALLOCSPI:
+	case XFRM_MSG_ACQUIRE:
+	case XFRM_MSG_UPDPOLICY:
+	case XFRM_MSG_UPDSA:
+		len += 4;
+		break;
+	case XFRM_MSG_EXPIRE:
+	case XFRM_MSG_POLEXPIRE:
+		len += 8;
+		break;
+	default:
+		break;
+	}
+
+	if (attrs[XFRMA_SA])
+		len += 4;
+	if (attrs[XFRMA_POLICY])
+		len += 4;
+
+	/* XXX: some attrs may need to be realigned
+	 * if !CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+	 */
+
+	return len;
+}
+
+static int xfrm_attr_cpy32(void *dst, size_t *pos, const struct nlattr *src,
+			   size_t size, int copy_len, int payload)
+{
+	struct nlmsghdr *nlmsg = dst;
+	struct nlattr *nla;
+
+	if (WARN_ON_ONCE(copy_len > payload))
+		copy_len = payload;
+
+	if (size - *pos < nla_attr_size(payload))
+		return -ENOBUFS;
+
+	nla = dst + *pos;
+
+	memcpy(nla, src, nla_attr_size(copy_len));
+	nla->nla_len = nla_attr_size(payload);
+	*pos += nla_attr_size(payload);
+	nlmsg->nlmsg_len += nla->nla_len;
+
+	memset(dst + *pos, 0, payload - copy_len);
+	*pos += payload - copy_len;
+
+	return 0;
+}
+
+static int xfrm_xlate32_attr(void *dst, const struct nlattr *nla,
+			     size_t *pos, size_t size,
+			     struct netlink_ext_ack *extack)
+{
+	int type = nla_type(nla);
+	u16 pol_len32, pol_len64;
+	int err;
+
+	if (type > XFRMA_MAX) {
+		BUILD_BUG_ON(XFRMA_MAX != XFRMA_IF_ID);
+		NL_SET_ERR_MSG(extack, "Bad attribute");
+		return -EOPNOTSUPP;
+	}
+	if (nla_len(nla) < compat_policy[type].len) {
+		NL_SET_ERR_MSG(extack, "Attribute bad length");
+		return -EOPNOTSUPP;
+	}
+
+	pol_len32 = compat_policy[type].len;
+	pol_len64 = xfrma_policy[type].len;
+
+	/* XFRMA_SA and XFRMA_POLICY - need to know how-to translate */
+	if (pol_len32 != pol_len64) {
+		if (nla_len(nla) != compat_policy[type].len) {
+			NL_SET_ERR_MSG(extack, "Attribute bad length");
+			return -EOPNOTSUPP;
+		}
+		err = xfrm_attr_cpy32(dst, pos, nla, size, pol_len32, pol_len64);
+		if (err)
+			return err;
+	}
+
+	return xfrm_attr_cpy32(dst, pos, nla, size, nla_len(nla), nla_len(nla));
+}
+
+static int xfrm_xlate32(struct nlmsghdr *dst, const struct nlmsghdr *src,
+			struct nlattr *attrs[XFRMA_MAX+1],
+			size_t size, u8 type, struct netlink_ext_ack *extack)
+{
+	size_t pos;
+	int i;
+
+	memcpy(dst, src, NLMSG_HDRLEN);
+	dst->nlmsg_len = NLMSG_HDRLEN + xfrm_msg_min[type];
+	memset(nlmsg_data(dst), 0, xfrm_msg_min[type]);
+
+	switch (src->nlmsg_type) {
+	/* Compat message has the same layout as native */
+	case XFRM_MSG_DELSA:
+	case XFRM_MSG_GETSA:
+	case XFRM_MSG_DELPOLICY:
+	case XFRM_MSG_GETPOLICY:
+	case XFRM_MSG_FLUSHSA:
+	case XFRM_MSG_FLUSHPOLICY:
+	case XFRM_MSG_NEWAE:
+	case XFRM_MSG_GETAE:
+	case XFRM_MSG_REPORT:
+	case XFRM_MSG_MIGRATE:
+	case XFRM_MSG_NEWSADINFO:
+	case XFRM_MSG_GETSADINFO:
+	case XFRM_MSG_NEWSPDINFO:
+	case XFRM_MSG_GETSPDINFO:
+	case XFRM_MSG_MAPPING:
+		memcpy(nlmsg_data(dst), nlmsg_data(src), compat_msg_min[type]);
+		break;
+	/* 4 byte alignment for trailing u64 on native, but not on compat */
+	case XFRM_MSG_NEWSA:
+	case XFRM_MSG_NEWPOLICY:
+	case XFRM_MSG_UPDSA:
+	case XFRM_MSG_UPDPOLICY:
+		memcpy(nlmsg_data(dst), nlmsg_data(src), compat_msg_min[type]);
+		break;
+	case XFRM_MSG_EXPIRE: {
+		const struct compat_xfrm_user_expire *src_ue = nlmsg_data(src);
+		struct xfrm_user_expire *dst_ue = nlmsg_data(dst);
+
+		/* compat_xfrm_user_expire has 4-byte smaller state */
+		memcpy(dst_ue, src_ue, sizeof(src_ue->state));
+		dst_ue->hard = src_ue->hard;
+		break;
+	}
+	case XFRM_MSG_ACQUIRE: {
+		const struct compat_xfrm_user_acquire *src_ua = nlmsg_data(src);
+		struct xfrm_user_acquire *dst_ua = nlmsg_data(dst);
+
+		memcpy(dst_ua, src_ua, offsetof(struct compat_xfrm_user_acquire, aalgos));
+		dst_ua->aalgos = src_ua->aalgos;
+		dst_ua->ealgos = src_ua->ealgos;
+		dst_ua->calgos = src_ua->calgos;
+		dst_ua->seq    = src_ua->seq;
+		break;
+	}
+	case XFRM_MSG_POLEXPIRE: {
+		const struct compat_xfrm_user_polexpire *src_upe = nlmsg_data(src);
+		struct xfrm_user_polexpire *dst_upe = nlmsg_data(dst);
+
+		/* compat_xfrm_user_polexpire has 4-byte smaller state */
+		memcpy(dst_upe, src_upe, sizeof(src_upe->pol));
+		dst_upe->hard = src_upe->hard;
+		break;
+	}
+	case XFRM_MSG_ALLOCSPI: {
+		const struct compat_xfrm_userspi_info *src_usi = nlmsg_data(src);
+		struct xfrm_userspi_info *dst_usi = nlmsg_data(dst);
+
+		/* compat_xfrm_user_polexpire has 4-byte smaller state */
+		memcpy(dst_usi, src_usi, sizeof(src_usi->info));
+		dst_usi->min = src_usi->min;
+		dst_usi->max = src_usi->max;
+		break;
+	}
+	default:
+		NL_SET_ERR_MSG(extack, "Unsupported message type");
+		return -EOPNOTSUPP;
+	}
+	pos = dst->nlmsg_len;
+
+	for (i = 1; i < XFRMA_MAX + 1; i++) {
+		int err;
+
+		if (i == XFRMA_PAD)
+			continue;
+
+		if (!attrs[i])
+			continue;
+
+		err = xfrm_xlate32_attr(dst, attrs[i], &pos, size, extack);
+		if (err)
+			return err;
+	}
+
+	return 0;
+}
+
+static struct nlmsghdr *xfrm_user_rcv_msg_compat(const struct nlmsghdr *h32,
+			int maxtype, const struct nla_policy *policy,
+			struct netlink_ext_ack *extack)
+{
+	/* netlink_rcv_skb() checks if a message has full (struct nlmsghdr) */
+	u16 type = h32->nlmsg_type - XFRM_MSG_BASE;
+	struct nlattr *attrs[XFRMA_MAX+1];
+	struct nlmsghdr *h64;
+	size_t len;
+	int err;
+
+	BUILD_BUG_ON(ARRAY_SIZE(xfrm_msg_min) != ARRAY_SIZE(compat_msg_min));
+
+	if (type >= ARRAY_SIZE(xfrm_msg_min))
+		return ERR_PTR(-EINVAL);
+
+	/* Don't call parse: the message might have only nlmsg header */
+	if ((h32->nlmsg_type == XFRM_MSG_GETSA ||
+	     h32->nlmsg_type == XFRM_MSG_GETPOLICY) &&
+	    (h32->nlmsg_flags & NLM_F_DUMP))
+		return NULL;
+
+	err = nlmsg_parse_deprecated(h32, compat_msg_min[type], attrs,
+			maxtype ? : XFRMA_MAX, policy ? : compat_policy, extack);
+	if (err < 0)
+		return ERR_PTR(err);
+
+	len = xfrm_user_rcv_calculate_len64(h32, attrs);
+	/* The message doesn't need translation */
+	if (len == nlmsg_len(h32))
+		return NULL;
+
+	len += NLMSG_HDRLEN;
+	h64 = kvmalloc(len, GFP_KERNEL | __GFP_ZERO);
+	if (!h64)
+		return ERR_PTR(-ENOMEM);
+
+	err = xfrm_xlate32(h64, h32, attrs, len, type, extack);
+	if (err < 0) {
+		kvfree(h64);
+		return ERR_PTR(err);
+	}
+
+	return h64;
+}
+
+static int xfrm_user_policy_compat(u8 **pdata32, int optlen)
+{
+	struct compat_xfrm_userpolicy_info *p = (void *)*pdata32;
+	u8 *src_templates, *dst_templates;
+	u8 *data64;
+
+	if (optlen < sizeof(*p))
+		return -EINVAL;
+
+	data64 = kmalloc_track_caller(optlen + 4, GFP_USER | __GFP_NOWARN);
+	if (!data64)
+		return -ENOMEM;
+
+	memcpy(data64, *pdata32, sizeof(*p));
+	memset(data64 + sizeof(*p), 0, 4);
+
+	src_templates = *pdata32 + sizeof(*p);
+	dst_templates = data64 + sizeof(*p) + 4;
+	memcpy(dst_templates, src_templates, optlen - sizeof(*p));
+
+	kfree(*pdata32);
+	*pdata32 = data64;
+	return 0;
+}
+
+static struct xfrm_translator xfrm_translator = {
+	.owner				= THIS_MODULE,
+	.alloc_compat			= xfrm_alloc_compat,
+	.rcv_msg_compat			= xfrm_user_rcv_msg_compat,
+	.xlate_user_policy_sockptr	= xfrm_user_policy_compat,
+};
+
+static int __init xfrm_compat_init(void)
+{
+	return xfrm_register_translator(&xfrm_translator);
+}
+
+static void __exit xfrm_compat_exit(void)
+{
+	xfrm_unregister_translator(&xfrm_translator);
+}
+
+module_init(xfrm_compat_init);
+module_exit(xfrm_compat_exit);
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Dmitry Safonov");
+MODULE_DESCRIPTION("XFRM 32-bit compatibility layer");
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
index 61fd056..83a8cbf 100644
--- a/net/xfrm/xfrm_state.c
+++ b/net/xfrm/xfrm_state.c
@@ -2295,6 +2295,66 @@ static bool km_is_alive(const struct km_event *c)
 	return is_alive;
 }
 
+#if IS_ENABLED(CONFIG_XFRM_USER_COMPAT)
+static DEFINE_SPINLOCK(xfrm_translator_lock);
+static struct xfrm_translator __rcu *xfrm_translator;
+
+struct xfrm_translator *xfrm_get_translator(void)
+{
+	struct xfrm_translator *xtr;
+
+	rcu_read_lock();
+	xtr = rcu_dereference(xfrm_translator);
+	if (unlikely(!xtr))
+		goto out;
+	if (!try_module_get(xtr->owner))
+		xtr = NULL;
+out:
+	rcu_read_unlock();
+	return xtr;
+}
+EXPORT_SYMBOL_GPL(xfrm_get_translator);
+
+void xfrm_put_translator(struct xfrm_translator *xtr)
+{
+	module_put(xtr->owner);
+}
+EXPORT_SYMBOL_GPL(xfrm_put_translator);
+
+int xfrm_register_translator(struct xfrm_translator *xtr)
+{
+	int err = 0;
+
+	spin_lock_bh(&xfrm_translator_lock);
+	if (unlikely(xfrm_translator != NULL))
+		err = -EEXIST;
+	else
+		rcu_assign_pointer(xfrm_translator, xtr);
+	spin_unlock_bh(&xfrm_translator_lock);
+
+	return err;
+}
+EXPORT_SYMBOL_GPL(xfrm_register_translator);
+
+int xfrm_unregister_translator(struct xfrm_translator *xtr)
+{
+	int err = 0;
+
+	spin_lock_bh(&xfrm_translator_lock);
+	if (likely(xfrm_translator != NULL)) {
+		if (rcu_access_pointer(xfrm_translator) != xtr)
+			err = -EINVAL;
+		else
+			RCU_INIT_POINTER(xfrm_translator, NULL);
+	}
+	spin_unlock_bh(&xfrm_translator_lock);
+	synchronize_rcu();
+
+	return err;
+}
+EXPORT_SYMBOL_GPL(xfrm_unregister_translator);
+#endif
+
 int xfrm_user_policy(struct sock *sk, int optname, u8 __user *optval, int optlen)
 {
 	int err;
@@ -2302,9 +2362,6 @@ int xfrm_user_policy(struct sock *sk, int optname, u8 __user *optval, int optlen
 	struct xfrm_mgr *km;
 	struct xfrm_policy *pol = NULL;
 
-	if (in_compat_syscall())
-		return -EOPNOTSUPP;
-
 	if (!optval && !optlen) {
 		xfrm_sk_policy_insert(sk, XFRM_POLICY_IN, NULL);
 		xfrm_sk_policy_insert(sk, XFRM_POLICY_OUT, NULL);
@@ -2319,6 +2376,23 @@ int xfrm_user_policy(struct sock *sk, int optname, u8 __user *optval, int optlen
 	if (IS_ERR(data))
 		return PTR_ERR(data);
 
+	/* Use the 64-bit / untranslated format on Android, even for compat */
+	if (!IS_ENABLED(CONFIG_ANDROID) || IS_ENABLED(CONFIG_XFRM_USER_COMPAT)) {
+		if (in_compat_syscall()) {
+			struct xfrm_translator *xtr = xfrm_get_translator();
+
+			if (!xtr)
+				return -EOPNOTSUPP;
+
+			err = xtr->xlate_user_policy_sockptr(&data, optlen);
+			xfrm_put_translator(xtr);
+			if (err) {
+				kfree(data);
+				return err;
+			}
+		}
+	}
+
 	err = -EINVAL;
 	rcu_read_lock();
 	list_for_each_entry_rcu(km, &xfrm_km_list, list) {
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
index fbb7d9d0..4968742 100644
--- a/net/xfrm/xfrm_user.c
+++ b/net/xfrm/xfrm_user.c
@@ -975,6 +975,7 @@ static int dump_one_state(struct xfrm_state *x, int count, void *ptr)
 	struct xfrm_dump_info *sp = ptr;
 	struct sk_buff *in_skb = sp->in_skb;
 	struct sk_buff *skb = sp->out_skb;
+	struct xfrm_translator *xtr;
 	struct xfrm_usersa_info *p;
 	struct nlmsghdr *nlh;
 	int err;
@@ -992,6 +993,18 @@ static int dump_one_state(struct xfrm_state *x, int count, void *ptr)
 		return err;
 	}
 	nlmsg_end(skb, nlh);
+
+	xtr = xfrm_get_translator();
+	if (xtr) {
+		err = xtr->alloc_compat(skb, nlh);
+
+		xfrm_put_translator(xtr);
+		if (err) {
+			nlmsg_cancel(skb, nlh);
+			return err;
+		}
+	}
+
 	return 0;
 }
 
@@ -1006,7 +1019,6 @@ static int xfrm_dump_sa_done(struct netlink_callback *cb)
 	return 0;
 }
 
-static const struct nla_policy xfrma_policy[XFRMA_MAX+1];
 static int xfrm_dump_sa(struct sk_buff *skb, struct netlink_callback *cb)
 {
 	struct net *net = sock_net(skb->sk);
@@ -1083,12 +1095,24 @@ static inline int xfrm_nlmsg_multicast(struct net *net, struct sk_buff *skb,
 				       u32 pid, unsigned int group)
 {
 	struct sock *nlsk = rcu_dereference(net->xfrm.nlsk);
+	struct xfrm_translator *xtr;
 
 	if (!nlsk) {
 		kfree_skb(skb);
 		return -EPIPE;
 	}
 
+	xtr = xfrm_get_translator();
+	if (xtr) {
+		int err = xtr->alloc_compat(skb, nlmsg_hdr(skb));
+
+		xfrm_put_translator(xtr);
+		if (err) {
+			kfree_skb(skb);
+			return err;
+		}
+	}
+
 	return nlmsg_multicast(nlsk, skb, pid, group, GFP_ATOMIC);
 }
 
@@ -1308,6 +1332,7 @@ static int xfrm_alloc_userspi(struct sk_buff *skb, struct nlmsghdr *nlh,
 	struct net *net = sock_net(skb->sk);
 	struct xfrm_state *x;
 	struct xfrm_userspi_info *p;
+	struct xfrm_translator *xtr;
 	struct sk_buff *resp_skb;
 	xfrm_address_t *daddr;
 	int family;
@@ -1358,6 +1383,17 @@ static int xfrm_alloc_userspi(struct sk_buff *skb, struct nlmsghdr *nlh,
 		goto out;
 	}
 
+	xtr = xfrm_get_translator();
+	if (xtr) {
+		err = xtr->alloc_compat(skb, nlmsg_hdr(skb));
+
+		xfrm_put_translator(xtr);
+		if (err) {
+			kfree_skb(resp_skb);
+			goto out;
+		}
+	}
+
 	err = nlmsg_unicast(net->xfrm.nlsk, resp_skb, NETLINK_CB(skb).portid);
 
 out:
@@ -1764,6 +1800,7 @@ static int dump_one_policy(struct xfrm_policy *xp, int dir, int count, void *ptr
 	struct xfrm_userpolicy_info *p;
 	struct sk_buff *in_skb = sp->in_skb;
 	struct sk_buff *skb = sp->out_skb;
+	struct xfrm_translator *xtr;
 	struct nlmsghdr *nlh;
 	int err;
 
@@ -1788,6 +1825,18 @@ static int dump_one_policy(struct xfrm_policy *xp, int dir, int count, void *ptr
 		return err;
 	}
 	nlmsg_end(skb, nlh);
+
+	xtr = xfrm_get_translator();
+	if (xtr) {
+		err = xtr->alloc_compat(skb, nlh);
+
+		xfrm_put_translator(xtr);
+		if (err) {
+			nlmsg_cancel(skb, nlh);
+			return err;
+		}
+	}
+
 	return 0;
 }
 
@@ -2533,7 +2582,7 @@ static int xfrm_send_migrate(const struct xfrm_selector *sel, u8 dir, u8 type,
 
 #define XMSGSIZE(type) sizeof(struct type)
 
-static const int xfrm_msg_min[XFRM_NR_MSGTYPES] = {
+const int xfrm_msg_min[XFRM_NR_MSGTYPES] = {
 	[XFRM_MSG_NEWSA       - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_info),
 	[XFRM_MSG_DELSA       - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_id),
 	[XFRM_MSG_GETSA       - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_id),
@@ -2556,10 +2605,11 @@ static const int xfrm_msg_min[XFRM_NR_MSGTYPES] = {
 	[XFRM_MSG_NEWSPDINFO  - XFRM_MSG_BASE] = sizeof(u32),
 	[XFRM_MSG_GETSPDINFO  - XFRM_MSG_BASE] = sizeof(u32),
 };
+EXPORT_SYMBOL_GPL(xfrm_msg_min);
 
 #undef XMSGSIZE
 
-static const struct nla_policy xfrma_policy[XFRMA_MAX+1] = {
+const struct nla_policy xfrma_policy[XFRMA_MAX+1] = {
 	[XFRMA_SA]		= { .len = sizeof(struct xfrm_usersa_info)},
 	[XFRMA_POLICY]		= { .len = sizeof(struct xfrm_userpolicy_info)},
 	[XFRMA_LASTUSED]	= { .type = NLA_U64},
@@ -2591,6 +2641,7 @@ static const struct nla_policy xfrma_policy[XFRMA_MAX+1] = {
 	[XFRMA_SET_MARK_MASK]	= { .type = NLA_U32 },
 	[XFRMA_IF_ID]		= { .type = NLA_U32 },
 };
+EXPORT_SYMBOL_GPL(xfrma_policy);
 
 static const struct nla_policy xfrma_spd_policy[XFRMA_SPD_MAX+1] = {
 	[XFRMA_SPD_IPV4_HTHRESH] = { .len = sizeof(struct xfrmu_spdhthresh) },
@@ -2640,11 +2691,9 @@ static int xfrm_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
 	struct net *net = sock_net(skb->sk);
 	struct nlattr *attrs[XFRMA_MAX+1];
 	const struct xfrm_link *link;
+	struct nlmsghdr *nlh64 = NULL;
 	int type, err;
 
-	if (in_compat_syscall())
-		return -EOPNOTSUPP;
-
 	type = nlh->nlmsg_type;
 	if (type > XFRM_MSG_MAX)
 		return -EINVAL;
@@ -2656,32 +2705,58 @@ static int xfrm_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
 	if (!netlink_net_capable(skb, CAP_NET_ADMIN))
 		return -EPERM;
 
+	/* Use the 64-bit / untranslated format on Android, even for compat */
+	if (!IS_ENABLED(CONFIG_ANDROID) || IS_ENABLED(CONFIG_XFRM_USER_COMPAT)) {
+		if (in_compat_syscall()) {
+			struct xfrm_translator *xtr = xfrm_get_translator();
+
+			if (!xtr)
+				return -EOPNOTSUPP;
+
+			nlh64 = xtr->rcv_msg_compat(nlh, link->nla_max,
+						    link->nla_pol, extack);
+			xfrm_put_translator(xtr);
+			if (IS_ERR(nlh64))
+				return PTR_ERR(nlh64);
+			if (nlh64)
+				nlh = nlh64;
+		}
+	}
+
 	if ((type == (XFRM_MSG_GETSA - XFRM_MSG_BASE) ||
 	     type == (XFRM_MSG_GETPOLICY - XFRM_MSG_BASE)) &&
 	    (nlh->nlmsg_flags & NLM_F_DUMP)) {
-		if (link->dump == NULL)
-			return -EINVAL;
+		struct netlink_dump_control c = {
+			.start = link->start,
+			.dump = link->dump,
+			.done = link->done,
+		};
 
-		{
-			struct netlink_dump_control c = {
-				.start = link->start,
-				.dump = link->dump,
-				.done = link->done,
-			};
-			return netlink_dump_start(net->xfrm.nlsk, skb, nlh, &c);
+		if (link->dump == NULL) {
+			err = -EINVAL;
+			goto err;
 		}
+
+		err = netlink_dump_start(net->xfrm.nlsk, skb, nlh, &c);
+		goto err;
 	}
 
 	err = nlmsg_parse_deprecated(nlh, xfrm_msg_min[type], attrs,
 				     link->nla_max ? : XFRMA_MAX,
 				     link->nla_pol ? : xfrma_policy, extack);
 	if (err < 0)
-		return err;
+		goto err;
 
-	if (link->doit == NULL)
-		return -EINVAL;
+	if (link->doit == NULL) {
+		err = -EINVAL;
+		goto err;
+	}
 
-	return link->doit(skb, nlh, attrs);
+	err = link->doit(skb, nlh, attrs);
+
+err:
+	kvfree(nlh64);
+	return err;
 }
 
 static void xfrm_netlink_rcv(struct sk_buff *skb)
diff --git a/samples/hw_breakpoint/data_breakpoint.c b/samples/hw_breakpoint/data_breakpoint.c
index c585047..418c46f 100644
--- a/samples/hw_breakpoint/data_breakpoint.c
+++ b/samples/hw_breakpoint/data_breakpoint.c
@@ -23,7 +23,7 @@
 
 struct perf_event * __percpu *sample_hbp;
 
-static char ksym_name[KSYM_NAME_LEN] = "pid_max";
+static char ksym_name[KSYM_NAME_LEN] = "jiffies";
 module_param_string(ksym, ksym_name, KSYM_NAME_LEN, S_IRUGO);
 MODULE_PARM_DESC(ksym, "Kernel symbol to monitor; this module will report any"
 			" write operations on the kernel symbol");
@@ -41,11 +41,15 @@ static int __init hw_break_module_init(void)
 {
 	int ret;
 	struct perf_event_attr attr;
+	void *addr = __symbol_get(ksym_name);
+
+	if (!addr)
+		return -ENXIO;
 
 	hw_breakpoint_init(&attr);
-	attr.bp_addr = kallsyms_lookup_name(ksym_name);
+	attr.bp_addr = (unsigned long)addr;
 	attr.bp_len = HW_BREAKPOINT_LEN_4;
-	attr.bp_type = HW_BREAKPOINT_W | HW_BREAKPOINT_R;
+	attr.bp_type = HW_BREAKPOINT_W;
 
 	sample_hbp = register_wide_hw_breakpoint(&attr, sample_hbp_handler, NULL);
 	if (IS_ERR((void __force *)sample_hbp)) {
@@ -66,6 +70,7 @@ static int __init hw_break_module_init(void)
 static void __exit hw_break_module_exit(void)
 {
 	unregister_wide_hw_breakpoint(sample_hbp);
+	symbol_put(ksym_name);
 	printk(KERN_INFO "HW Breakpoint for %s write uninstalled\n", ksym_name);
 }
 
diff --git a/scripts/Makefile b/scripts/Makefile
index b4b7d8b..b12691a 100644
--- a/scripts/Makefile
+++ b/scripts/Makefile
@@ -36,6 +36,8 @@
 # The following hostprogs-y programs are only build on demand
 hostprogs-y += unifdef
 
+extra-$(CONFIG_LTO_CLANG)   += module-lto.lds
+
 subdir-$(CONFIG_GCC_PLUGINS) += gcc-plugins
 subdir-$(CONFIG_MODVERSIONS) += genksyms
 subdir-$(CONFIG_SECURITY_SELINUX) += selinux
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 9c689d0..f98eafa 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -93,7 +93,7 @@
 # ---------------------------------------------------------------------------
 
 quiet_cmd_cc_s_c = CC $(quiet_modtag)  $@
-      cmd_cc_s_c = $(CC) $(filter-out $(DEBUG_CFLAGS), $(c_flags)) $(DISABLE_LTO) -fverbose-asm -S -o $@ $<
+      cmd_cc_s_c = $(CC) $(filter-out $(DEBUG_CFLAGS) $(CC_FLAGS_LTO), $(c_flags)) $(DISABLE_LTO) -fverbose-asm -S -o $@ $<
 
 $(obj)/%.s: $(src)/%.c FORCE
 	$(call if_changed_dep,cc_s_c)
@@ -148,6 +148,15 @@
 #   the actual value of the checksum generated by genksyms
 # o remove .tmp_<file>.o to <file>.o
 
+ifdef CONFIG_LTO_CLANG
+# Generate .o.symversions files for each .o with exported symbols, and link these
+# to the kernel and/or modules at the end.
+cmd_modversions_c =								\
+	if $(LLVM_NM) $@ | grep -q __ksymtab; then				\
+		$(call cmd_gensymtypes_c,$(KBUILD_SYMTYPES),$(@:.o=.symtypes))	\
+		    > $@.symversions;						\
+	fi;
+else
 cmd_modversions_c =								\
 	if $(OBJDUMP) -h $@ | grep -q __ksymtab; then				\
 		$(call cmd_gensymtypes_c,$(KBUILD_SYMTYPES),$(@:.o=.symtypes))	\
@@ -159,6 +168,7 @@
 		rm -f $(@D)/.tmp_$(@F:.o=.ver);					\
 	fi
 endif
+endif
 
 ifdef CONFIG_FTRACE_MCOUNT_RECORD
 ifndef CC_USING_RECORD_MCOUNT
@@ -167,6 +177,12 @@
 ifeq ("$(origin RECORDMCOUNT_WARN)", "command line")
   RECORDMCOUNT_FLAGS = -w
 endif
+
+ifdef CONFIG_LTO_CLANG
+# With LTO, we postpone running recordmcount until after the LTO link step, so
+# let's export the parameters for the link script.
+export RECORDMCOUNT_FLAGS
+else
 # Due to recursion, we must skip empty.o.
 # The empty.o file is created in the make process in order to determine
 # the target endianness and word size. It is made before all other C
@@ -175,6 +191,8 @@
 	if [ $(@) != "scripts/mod/empty.o" ]; then	\
 		$(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) "$(@)";	\
 	fi;
+endif
+
 recordmcount_source := $(srctree)/scripts/recordmcount.c \
 		    $(srctree)/scripts/recordmcount.h
 else
@@ -184,10 +202,13 @@
 	"$(OBJDUMP)" "$(OBJCOPY)" "$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS)" \
 	"$(LD) $(KBUILD_LDFLAGS)" "$(NM)" "$(RM)" "$(MV)" \
 	"$(if $(part-of-module),1,0)" "$(@)";
+
 recordmcount_source := $(srctree)/scripts/recordmcount.pl
 endif # BUILD_C_RECORDMCOUNT
+ifndef CONFIG_LTO_CLANG
 cmd_record_mcount = $(if $(findstring $(strip $(CC_FLAGS_FTRACE)),$(_c_flags)),	\
 	$(sub_cmd_record_mcount))
+endif # CONFIG_LTO_CLANG
 endif # CC_USING_RECORD_MCOUNT
 endif # CONFIG_FTRACE_MCOUNT_RECORD
 
@@ -370,6 +391,20 @@
 # To build objects in subdirs, we need to descend into the directories
 $(sort $(subdir-obj-y)): $(subdir-ym) ;
 
+# combine symversions for later processing
+quiet_cmd_update_lto_symversions = SYMVER  $@
+ifeq ($(CONFIG_LTO_CLANG) $(CONFIG_MODVERSIONS),y y)
+      cmd_update_lto_symversions =					\
+	rm -f $@.symversions;						\
+	for i in $(foreach n,						\
+			$(filter-out FORCE,$^),				\
+			$(if $(wildcard $(n).symversions),$(n))); do	\
+		cat $$i.symversions >> $@.symversions;			\
+	done
+else
+      cmd_update_lto_symversions = echo >/dev/null
+endif
+
 #
 # Rule to compile a set of .o files into one .a file (without symbol table)
 #
@@ -378,8 +413,11 @@
 quiet_cmd_ar_builtin = AR      $@
       cmd_ar_builtin = rm -f $@; $(AR) cDPrST $@ $(real-prereqs)
 
+quiet_cmd_ar_and_symver = AR      $@
+      cmd_ar_and_symver = $(cmd_update_lto_symversions); $(cmd_ar_builtin)
+
 $(builtin-target): $(real-obj-y) FORCE
-	$(call if_changed,ar_builtin)
+	$(call if_changed,ar_and_symver)
 
 targets += $(builtin-target)
 endif # builtin-target
@@ -399,16 +437,26 @@
 #
 ifdef lib-target
 
+quiet_cmd_ar_lib = AR      $@
+      cmd_ar_lib = $(cmd_update_lto_symversions); $(cmd_ar)
+
 $(lib-target): $(lib-y) FORCE
-	$(call if_changed,ar)
+	$(call if_changed,ar_lib)
 
 targets += $(lib-target)
 
 dummy-object = $(obj)/.lib_exports.o
 ksyms-lds = $(dot-target).lds
 
+ifdef CONFIG_LTO_CLANG
+# Objdump doesn't understand LLVM IR. Use llvm-nm to dump symbols.
+dump_export_list = $(LLVM_NM)
+else
+dump_export_list = $(OBJDUMP) -h
+endif
+
 quiet_cmd_export_list = EXPORTS $@
-cmd_export_list = $(OBJDUMP) -h $< | \
+cmd_export_list = $(dump_export_list) $< | \
 	sed -ne '/___ksymtab/s/.*+\([^ ]*\).*/EXTERN(\1)/p' >$(ksyms-lds);\
 	rm -f $(dummy-object);\
 	echo | $(CC) $(a_flags) -c -o $(dummy-object) -x assembler -;\
@@ -426,8 +474,16 @@
 # Do not replace $(filter %.o,^) with $(real-prereqs). When a single object
 # module is turned into a multi object module, $^ will contain header file
 # dependencies recorded in the .*.cmd file.
+ifdef CONFIG_LTO_CLANG
+quiet_cmd_link_multi-m = AR [M]  $@
+cmd_link_multi-m =						\
+	$(cmd_update_lto_symversions);				\
+	rm -f $@; 						\
+	$(AR) rcsTP$(KBUILD_ARFLAGS) $@ $(filter %.o,$^)
+else
 quiet_cmd_link_multi-m = LD [M]  $@
       cmd_link_multi-m = $(LD) $(ld_flags) -r -o $@ $(filter %.o,$^)
+endif
 
 $(multi-used-m): FORCE
 	$(call if_changed,link_multi-m)
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index a6d0044..8319a40 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -334,7 +334,8 @@
       cmd_lzo = { cat $(real-prereqs) | $(KLZOP) -9; $(size_append); } > $@
 
 quiet_cmd_lz4 = LZ4     $@
-      cmd_lz4 = { cat $(real-prereqs) | $(LZ4) -l -c1 stdin stdout; \
+      cmd_lz4 = { cat $(real-prereqs) | \
+                  lz4 -l -12 --favor-decSpeed stdin stdout; \
                   $(size_append); } > $@
 
 # U-Boot mkimage
diff --git a/scripts/Makefile.modfinal b/scripts/Makefile.modfinal
index 411c1e60..216a3f8 100644
--- a/scripts/Makefile.modfinal
+++ b/scripts/Makefile.modfinal
@@ -6,6 +6,7 @@
 PHONY := __modfinal
 __modfinal:
 
+include $(objtree)/include/config/auto.conf
 include $(srctree)/scripts/Kbuild.include
 
 # for c_flags
@@ -30,12 +31,28 @@
 ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
 
 quiet_cmd_ld_ko_o = LD [M]  $@
+
+ifdef CONFIG_LTO_CLANG
+      cmd_ld_ko_o = 							\
+	$(LD) -r $(LDFLAGS)                                 		\
+		 $(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) 		\
+		 $(addprefix -T , $(KBUILD_LDS_MODULE))			\
+		 $(shell [ -s $(@:.ko=.o.symversions) ] &&		\
+			echo -T $(@:.ko=.o.symversions))  		\
+		 -o $@ --whole-archive $(filter %.o, $^);		\
+	$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
+
+  ifdef CONFIG_FTRACE_MCOUNT_RECORD
+      cmd_ld_ko_o += ; $(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) $@
+  endif
+else
       cmd_ld_ko_o =                                                     \
 	$(LD) -r $(KBUILD_LDFLAGS)					\
 		$(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE)		\
 		$(addprefix -T , $(KBUILD_LDS_MODULE))			\
 		-o $@ $(filter %.o, $^);				\
 	$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
+endif
 
 $(modules): %.ko: %.o %.mod.o $(KBUILD_LDS_MODULE) FORCE
 	+$(call if_changed,ld_ko_o)
diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost
index 952fff4..b8b447b 100644
--- a/scripts/Makefile.modpost
+++ b/scripts/Makefile.modpost
@@ -84,12 +84,32 @@
 # find all modules listed in modules.order
 modules := $(sort $(shell cat $(MODORDER)))
 
+# With CONFIG_LTO_CLANG, .o files might be LLVM IR, so we need to link them
+# into actual objects before passing them to modpost
+modpost-ext = $(if $(CONFIG_LTO_CLANG),.lto,)
+
+ifdef CONFIG_LTO_CLANG
+quiet_cmd_cc_lto_link_modules = LTO [M] $@
+cmd_cc_lto_link_modules =						\
+	$(LD) $(ld_flags) -r -o $(@)					\
+		$(shell [ -s $(@:$(modpost-ext).o=.o.symversions) ] &&	\
+			echo -T $(@:$(modpost-ext).o=.o.symversions))	\
+		--whole-archive $(filter-out FORCE,$^)
+
+$(modules:.ko=$(modpost-ext).o): %$(modpost-ext).o: %.o FORCE
+	$(call if_changed,cc_lto_link_modules)
+
+PHONY += FORCE
+FORCE:
+
+endif
+
 # Read out modules.order instead of expanding $(modules) to pass in modpost.
 # Otherwise, allmodconfig would fail with "Argument list too long".
 quiet_cmd_modpost = MODPOST $(words $(modules)) modules
-      cmd_modpost = sed 's/ko$$/o/' $(MODORDER) | $(MODPOST)
+      cmd_modpost = sed 's/\.ko$$/$(modpost-ext)\.o/' $(MODORDER) | $(MODPOST)
 
-__modpost:
+__modpost: $(modules:.ko=$(modpost-ext).o)
 	@$(kecho) '  Building modules, stage 2.'
 	$(call cmd,modpost)
 ifneq ($(KBUILD_MODPOST_NOFINAL),1)
diff --git a/scripts/adjust_autoksyms.sh b/scripts/adjust_autoksyms.sh
index a904bf1..2b366d9 100755
--- a/scripts/adjust_autoksyms.sh
+++ b/scripts/adjust_autoksyms.sh
@@ -1,14 +1,13 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0-only
 
-# Script to create/update include/generated/autoksyms.h and dependency files
+# Script to update include/generated/autoksyms.h and dependency files
 #
 # Copyright:	(C) 2016  Linaro Limited
 # Created by:	Nicolas Pitre, January 2016
 #
 
-# Create/update the include/generated/autoksyms.h file from the list
-# of all module's needed symbols as recorded on the second line of *.mod files.
+# Update the include/generated/autoksyms.h file.
 #
 # For each symbol being added or removed, the corresponding dependency
 # file's timestamp is updated to force a rebuild of the affected source
@@ -38,23 +37,8 @@
 # We need access to CONFIG_ symbols
 . include/config/auto.conf
 
-# Generate a new ksym list file with symbols needed by the current
-# set of modules.
-cat > "$new_ksyms_file" << EOT
-/*
- * Automatically generated file; DO NOT EDIT.
- */
-
-EOT
-sed 's/ko$/mod/' modules.order |
-xargs -n1 sed -n -e '2{s/ /\n/g;/^$/!p;}' -- |
-sort -u |
-sed -e 's/\(.*\)/#define __KSYM_\1 1/' >> "$new_ksyms_file"
-
-# Special case for modversions (see modpost.c)
-if [ -n "$CONFIG_MODVERSIONS" ]; then
-	echo "#define __KSYM_module_layout 1" >> "$new_ksyms_file"
-fi
+# Generate a new symbol list file
+$CONFIG_SHELL $srctree/scripts/gen_autoksyms.sh "$new_ksyms_file"
 
 # Extract changes between old and new list and touch corresponding
 # dependency files.
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index a358af9..978cfc9 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -51,7 +51,7 @@
 my @ignore = ();
 my $help = 0;
 my $configuration_file = ".checkpatch.conf";
-my $max_line_length = 80;
+my $max_line_length = 100;
 my $ignore_perl_version = 0;
 my $minimum_perl_version = 5.10.0;
 my $min_conf_desc_length = 4;
@@ -59,11 +59,12 @@
 my $codespell = 0;
 my $codespellfile = "/usr/share/codespell/dictionary.txt";
 my $conststructsfile = "$D/const_structs.checkpatch";
-my $typedefsfile = "";
+my $typedefsfile;
 my $color = "auto";
 my $allow_c99_comments = 1; # Can be overridden by --ignore C99_COMMENT_TOLERANCE
 # git output parsing needs US English output, so first set backtick child process LANGUAGE
 my $git_command ='export LANGUAGE=en_US.UTF-8; git';
+my $tabsize = 8;
 
 sub help {
 	my ($exitcode) = @_;
@@ -96,8 +97,11 @@
   --types TYPE(,TYPE2...)    show only these comma separated message types
   --ignore TYPE(,TYPE2...)   ignore various comma separated message types
   --show-types               show the specific message type in the output
-  --max-line-length=n        set the maximum line length, if exceeded, warn
+  --max-line-length=n        set the maximum line length, (default $max_line_length)
+                             if exceeded, warn on patches
+                             requires --strict for use with --file
   --min-conf-desc-length=n   set the min description length, if shorter, warn
+  --tab-size=n               set the number of spaces for tab (default $tabsize)
   --root=PATH                PATH to the kernel tree root
   --no-summary               suppress the per-file summary
   --mailback                 only produce a report in case of warnings/errors
@@ -215,6 +219,7 @@
 	'list-types!'	=> \$list_types,
 	'max-line-length=i' => \$max_line_length,
 	'min-conf-desc-length=i' => \$min_conf_desc_length,
+	'tab-size=i'	=> \$tabsize,
 	'root=s'	=> \$root,
 	'summary!'	=> \$summary,
 	'mailback!'	=> \$mailback,
@@ -241,6 +246,8 @@
 $fix = 1 if ($fix_inplace);
 $check_orig = $check;
 
+die "$P: --git cannot be used with --file or --fix\n" if ($git && ($file || $fix));
+
 my $exit = 0;
 
 my $perl_version_ok = 1;
@@ -264,9 +271,12 @@
 } elsif ($color =~ /^auto$/i) {
 	$color = (-t STDOUT);
 } else {
-	die "Invalid color mode: $color\n";
+	die "$P: Invalid color mode: $color\n";
 }
 
+# skip TAB size 1 to avoid additional checks on $tabsize - 1
+die "$P: Invalid TAB size: $tabsize\n" if ($tabsize < 2);
+
 sub hash_save_array_words {
 	my ($hashRef, $arrayRef) = @_;
 
@@ -473,7 +483,7 @@
 		(?:kv|k|v)[czm]alloc(?:_node|_array)? |
 		kstrdup(?:_const)? |
 		kmemdup(?:_nul)?) |
-	(?:\w+)?alloc_skb(?:ip_align)? |
+	(?:\w+)?alloc_skb(?:_ip_align)? |
 				# dev_alloc_skb/netdev_alloc_skb, et al
 	dma_alloc_coherent
 )};
@@ -578,6 +588,8 @@
 	["__ATTR", 2],
 );
 
+my $word_pattern = '\b[A-Z]?[a-z]{2,}\b';
+
 #Create a search pattern for all these functions to speed up a loop below
 our $mode_perms_search = "";
 foreach my $entry (@mode_permission_funcs) {
@@ -746,7 +758,7 @@
 				next;
 			}
 
-			$$wordsRef .= '|' if ($$wordsRef ne "");
+			$$wordsRef .= '|' if (defined $$wordsRef);
 			$$wordsRef .= $line;
 		}
 		close($file);
@@ -756,16 +768,18 @@
 	return 0;
 }
 
-my $const_structs = "";
-read_words(\$const_structs, $conststructsfile)
-    or warn "No structs that should be const will be found - file '$conststructsfile': $!\n";
+my $const_structs;
+if (show_type("CONST_STRUCT")) {
+	read_words(\$const_structs, $conststructsfile)
+	    or warn "No structs that should be const will be found - file '$conststructsfile': $!\n";
+}
 
-my $typeOtherTypedefs = "";
-if (length($typedefsfile)) {
+if (defined($typedefsfile)) {
+	my $typeOtherTypedefs;
 	read_words(\$typeOtherTypedefs, $typedefsfile)
 	    or warn "No additional types will be considered - file '$typedefsfile': $!\n";
+	$typeTypedefs .= '|' . $typeOtherTypedefs if (defined $typeOtherTypedefs);
 }
-$typeTypedefs .= '|' . $typeOtherTypedefs if ($typeOtherTypedefs ne "");
 
 sub build_types {
 	my $mods = "(?x:  \n" . join("|\n  ", (@modifierList, @modifierListFile)) . "\n)";
@@ -804,12 +818,12 @@
 		  }x;
 	$Type	= qr{
 			$NonptrType
-			(?:(?:\s|\*|\[\])+\s*const|(?:\s|\*\s*(?:const\s*)?|\[\])+|(?:\s*\[\s*\])+)?
+			(?:(?:\s|\*|\[\])+\s*const|(?:\s|\*\s*(?:const\s*)?|\[\])+|(?:\s*\[\s*\])+){0,4}
 			(?:\s+$Inline|\s+$Modifier)*
 		  }x;
 	$TypeMisordered	= qr{
 			$NonptrTypeMisordered
-			(?:(?:\s|\*|\[\])+\s*const|(?:\s|\*\s*(?:const\s*)?|\[\])+|(?:\s*\[\s*\])+)?
+			(?:(?:\s|\*|\[\])+\s*const|(?:\s|\*\s*(?:const\s*)?|\[\])+|(?:\s*\[\s*\])+){0,4}
 			(?:\s+$Inline|\s+$Modifier)*
 		  }x;
 	$Declare	= qr{(?:$Storage\s+(?:$Inline\s+)?)?$Type};
@@ -830,7 +844,6 @@
 our $declaration_macros = qr{(?x:
 	(?:$Storage\s+)?(?:[A-Z_][A-Z0-9]*_){0,2}(?:DEFINE|DECLARE)(?:_[A-Z0-9]+){1,6}\s*\(|
 	(?:$Storage\s+)?[HLP]?LIST_HEAD\s*\(|
-	(?:$Storage\s+)?${Type}\s+uninitialized_var\s*\(|
 	(?:SKCIPHER_REQUEST|SHASH_DESC|AHASH_REQUEST)_ON_STACK\s*\(
 )};
 
@@ -874,14 +887,18 @@
 	}
 }
 
+our %maintained_status = ();
+
 sub is_maintained_obsolete {
 	my ($filename) = @_;
 
 	return 0 if (!$tree || !(-e "$root/scripts/get_maintainer.pl"));
 
-	my $status = `perl $root/scripts/get_maintainer.pl --status --nom --nol --nogit --nogit-fallback -f $filename 2>&1`;
+	if (!exists($maintained_status{$filename})) {
+		$maintained_status{$filename} = `perl $root/scripts/get_maintainer.pl --status --nom --nol --nogit --nogit-fallback -f $filename 2>&1`;
+	}
 
-	return $status =~ /obsolete/i;
+	return $maintained_status{$filename} =~ /obsolete/i;
 }
 
 sub is_SPDX_License_valid {
@@ -1048,6 +1065,7 @@
 	while (<$FILE>) {
 		chomp;
 		push(@rawlines, $_);
+		$vname = qq("$1") if ($filename eq '-' && $_ =~ m/^Subject:\s+(.+)/i);
 	}
 	close($FILE);
 
@@ -1114,6 +1132,7 @@
 	my ($formatted_email) = @_;
 
 	my $name = "";
+	my $name_comment = "";
 	my $address = "";
 	my $comment = "";
 
@@ -1146,6 +1165,10 @@
 
 	$name = trim($name);
 	$name =~ s/^\"|\"$//g;
+	$name =~ s/(\s*\([^\)]+\))\s*//;
+	if (defined($1)) {
+		$name_comment = trim($1);
+	}
 	$address = trim($address);
 	$address =~ s/^\<|\>$//g;
 
@@ -1154,7 +1177,7 @@
 		$name = "\"$name\"";
 	}
 
-	return ($name, $address, $comment);
+	return ($name, $name_comment, $address, $comment);
 }
 
 sub format_email {
@@ -1180,6 +1203,23 @@
 	return $formatted_email;
 }
 
+sub reformat_email {
+	my ($email) = @_;
+
+	my ($email_name, $name_comment, $email_address, $comment) = parse_email($email);
+	return format_email($email_name, $email_address);
+}
+
+sub same_email_addresses {
+	my ($email1, $email2) = @_;
+
+	my ($email1_name, $name1_comment, $email1_address, $comment1) = parse_email($email1);
+	my ($email2_name, $name2_comment, $email2_address, $comment2) = parse_email($email2);
+
+	return $email1_name eq $email2_name &&
+	       $email1_address eq $email2_address;
+}
+
 sub which {
 	my ($bin) = @_;
 
@@ -1213,7 +1253,7 @@
 		if ($c eq "\t") {
 			$res .= ' ';
 			$n++;
-			for (; ($n % 8) != 0; $n++) {
+			for (; ($n % $tabsize) != 0; $n++) {
 				$res .= ' ';
 			}
 			next;
@@ -1642,8 +1682,16 @@
 sub ctx_locate_comment {
 	my ($first_line, $end_line) = @_;
 
+	# If c99 comment on the current line, or the line before or after
+	my ($current_comment) = ($rawlines[$end_line - 1] =~ m@^\+.*(//.*$)@);
+	return $current_comment if (defined $current_comment);
+	($current_comment) = ($rawlines[$end_line - 2] =~ m@^[\+ ].*(//.*$)@);
+	return $current_comment if (defined $current_comment);
+	($current_comment) = ($rawlines[$end_line] =~ m@^[\+ ].*(//.*$)@);
+	return $current_comment if (defined $current_comment);
+
 	# Catch a comment on the end of the line itself.
-	my ($current_comment) = ($rawlines[$end_line - 1] =~ m@.*(/\*.*\*/)\s*(?:\\\s*)?$@);
+	($current_comment) = ($rawlines[$end_line - 1] =~ m@.*(/\*.*\*/)\s*(?:\\\s*)?$@);
 	return $current_comment if (defined $current_comment);
 
 	# Look through the context and try and figure out if there is a
@@ -2226,7 +2274,7 @@
 sub tabify {
 	my ($leading) = @_;
 
-	my $source_indent = 8;
+	my $source_indent = $tabsize;
 	my $max_spaces_before_tab = $source_indent - 1;
 	my $spaces_to_tab = " " x $source_indent;
 
@@ -2268,6 +2316,19 @@
 	return length(expand_tabs(substr($line, 0, $last_openparen))) + 1;
 }
 
+sub get_raw_comment {
+	my ($line, $rawline) = @_;
+	my $comment = '';
+
+	for my $i (0 .. (length($line) - 1)) {
+		if (substr($line, $i, 1) eq "$;") {
+			$comment .= substr($rawline, $i, 1);
+		}
+	}
+
+	return $comment;
+}
+
 sub process {
 	my $filename = shift;
 
@@ -2290,6 +2351,7 @@
 	my $is_binding_patch = -1;
 	my $in_header_lines = $file ? 0 : 1;
 	my $in_commit_log = 0;		#Scanning lines before patch
+	my $has_patch_separator = 0;	#Found a --- line
 	my $has_commit_log = 0;		#Encountered lines before patch
 	my $commit_log_lines = 0;	#Number of commit log lines
 	my $commit_log_possible_stack_dump = 0;
@@ -2348,7 +2410,7 @@
 
 		if ($rawline=~/^\+\+\+\s+(\S+)/) {
 			$setup_docs = 0;
-			if ($1 =~ m@Documentation/admin-guide/kernel-parameters.rst$@) {
+			if ($1 =~ m@Documentation/admin-guide/kernel-parameters.txt$@) {
 				$setup_docs = 1;
 			}
 			#next;
@@ -2429,6 +2491,7 @@
 		$sline =~ s/$;/ /g;	#with comments as spaces
 
 		my $rawline = $rawlines[$linenr - 1];
+		my $raw_comment = get_raw_comment($line, $rawline);
 
 # check if it's a mode change, rename or start of a patch
 		if (!$in_commit_log &&
@@ -2547,7 +2610,7 @@
 				if (($last_binding_patch != -1) &&
 				    ($last_binding_patch ^ $is_binding_patch)) {
 					WARN("DT_SPLIT_BINDING_PATCH",
-					     "DT binding docs and includes should be a separate patch. See: Documentation/devicetree/bindings/submitting-patches.txt\n");
+					     "DT binding docs and includes should be a separate patch. See: Documentation/devicetree/bindings/submitting-patches.rst\n");
 				}
 			}
 
@@ -2600,21 +2663,26 @@
 			$author = $1;
 			$author = encode("utf8", $author) if ($line =~ /=\?utf-8\?/i);
 			$author =~ s/"//g;
+			$author = reformat_email($author);
 		}
 
 # Check the patch for a signoff:
-		if ($line =~ /^\s*signed-off-by:/i) {
+		if ($line =~ /^\s*signed-off-by:\s*(.*)/i) {
 			$signoff++;
 			$in_commit_log = 0;
 			if ($author ne '') {
-				my $l = $line;
-				$l =~ s/"//g;
-				if ($l =~ /^\s*signed-off-by:\s*\Q$author\E/i) {
-				    $authorsignoff = 1;
+				if (same_email_addresses($1, $author)) {
+					$authorsignoff = 1;
 				}
 			}
 		}
 
+# Check for patch separator
+		if ($line =~ /^---$/) {
+			$has_patch_separator = 1;
+			$in_commit_log = 0;
+		}
+
 # Check if MAINTAINERS is being updated.  If so, there's probably no need to
 # emit the "does MAINTAINERS need updating?" message on file add/move/delete
 		if ($line =~ /^\s*MAINTAINERS\s*\|/) {
@@ -2660,7 +2728,7 @@
 				}
 			}
 
-			my ($email_name, $email_address, $comment) = parse_email($email);
+			my ($email_name, $name_comment, $email_address, $comment) = parse_email($email);
 			my $suggested_email = format_email(($email_name, $email_address));
 			if ($suggested_email eq "") {
 				ERROR("BAD_SIGN_OFF",
@@ -2671,9 +2739,7 @@
 				$dequoted =~ s/" </ </;
 				# Don't force email to have quotes
 				# Allow just an angle bracketed address
-				if ("$dequoted$comment" ne $email &&
-				    "<$email_address>$comment" ne $email &&
-				    "$suggested_email$comment" ne $email) {
+				if (!same_email_addresses($email, $suggested_email)) {
 					WARN("BAD_SIGN_OFF",
 					     "email address '$email' might be better as '$suggested_email$comment'\n" . $herecurr);
 				}
@@ -2716,10 +2782,10 @@
 			     "A patch subject line should describe the change not the tool that found it\n" . $herecurr);
 		}
 
-# Check for unwanted Gerrit info
-		if ($in_commit_log && $line =~ /^\s*change-id:/i) {
+# Check for Gerrit Change-Ids not in any patch context
+		if ($realfile eq '' && !$has_patch_separator && $line =~ /^\s*change-id:/i) {
 			ERROR("GERRIT_CHANGE_ID",
-			      "Remove Gerrit Change-Id's before submitting upstream.\n" . $herecurr);
+			      "Remove Gerrit Change-Id's before submitting upstream\n" . $herecurr);
 		}
 
 # Check if the commit log is in a possible stack dump
@@ -2757,7 +2823,7 @@
 
 # Check for git id commit length and improperly formed commit descriptions
 		if ($in_commit_log && !$commit_log_possible_stack_dump &&
-		    $line !~ /^\s*(?:Link|Patchwork|http|https|BugLink):/i &&
+		    $line !~ /^\s*(?:Link|Patchwork|http|https|BugLink|base-commit):/i &&
 		    $line !~ /^This reverts commit [0-9a-f]{7,40}/ &&
 		    ($line =~ /\bcommit\s+[0-9a-f]{5,}\b/i ||
 		     ($line =~ /(?:\s|^)[0-9a-f]{12,40}(?:[\s"'\(\[]|$)/i &&
@@ -2826,6 +2892,14 @@
 			     "added, moved or deleted file(s), does MAINTAINERS need updating?\n" . $herecurr);
 		}
 
+# Check for adding new DT bindings not in schema format
+		if (!$in_commit_log &&
+		    ($line =~ /^new file mode\s*\d+\s*$/) &&
+		    ($realfile =~ m@^Documentation/devicetree/bindings/.*\.txt$@)) {
+			WARN("DT_SCHEMA_BINDING_PATCH",
+			     "DT bindings should be in DT schema format. See: Documentation/devicetree/writing-schema.rst\n");
+		}
+
 # Check for wrappage within a valid hunk of the file
 		if ($realcnt != 0 && $line !~ m{^(?:\+|-| |\\ No newline|$)}) {
 			ERROR("CORRUPTED_PATCH",
@@ -3002,14 +3076,43 @@
 			#print "is_start<$is_start> is_end<$is_end> length<$length>\n";
 		}
 
-# check for MAINTAINERS entries that don't have the right form
-		if ($realfile =~ /^MAINTAINERS$/ &&
-		    $rawline =~ /^\+[A-Z]:/ &&
-		    $rawline !~ /^\+[A-Z]:\t\S/) {
-			if (WARN("MAINTAINERS_STYLE",
-				 "MAINTAINERS entries use one tab after TYPE:\n" . $herecurr) &&
-			    $fix) {
-				$fixed[$fixlinenr] =~ s/^(\+[A-Z]):\s*/$1:\t/;
+# check MAINTAINERS entries
+		if ($realfile =~ /^MAINTAINERS$/) {
+# check MAINTAINERS entries for the right form
+			if ($rawline =~ /^\+[A-Z]:/ &&
+			    $rawline !~ /^\+[A-Z]:\t\S/) {
+				if (WARN("MAINTAINERS_STYLE",
+					 "MAINTAINERS entries use one tab after TYPE:\n" . $herecurr) &&
+				    $fix) {
+					$fixed[$fixlinenr] =~ s/^(\+[A-Z]):\s*/$1:\t/;
+				}
+			}
+# check MAINTAINERS entries for the right ordering too
+			my $preferred_order = 'MRLSWQBCPTFXNK';
+			if ($rawline =~ /^\+[A-Z]:/ &&
+			    $prevrawline =~ /^[\+ ][A-Z]:/) {
+				$rawline =~ /^\+([A-Z]):\s*(.*)/;
+				my $cur = $1;
+				my $curval = $2;
+				$prevrawline =~ /^[\+ ]([A-Z]):\s*(.*)/;
+				my $prev = $1;
+				my $prevval = $2;
+				my $curindex = index($preferred_order, $cur);
+				my $previndex = index($preferred_order, $prev);
+				if ($curindex < 0) {
+					WARN("MAINTAINERS_STYLE",
+					     "Unknown MAINTAINERS entry type: '$cur'\n" . $herecurr);
+				} else {
+					if ($previndex >= 0 && $curindex < $previndex) {
+						WARN("MAINTAINERS_STYLE",
+						     "Misordered MAINTAINERS entry - list '$cur:' before '$prev:'\n" . $hereprev);
+					} elsif ((($prev eq 'F' && $cur eq 'F') ||
+						  ($prev eq 'X' && $cur eq 'X')) &&
+						 ($prevval cmp $curval) > 0) {
+						WARN("MAINTAINERS_STYLE",
+						     "Misordered MAINTAINERS entry - list file patterns in alphabetic order\n" . $hereprev);
+					}
+				}
 			}
 		}
 
@@ -3075,7 +3178,7 @@
 					$comment = '/*';
 				} elsif ($realfile =~ /\.(c|dts|dtsi)$/) {
 					$comment = '//';
-				} elsif (($checklicenseline == 2) || $realfile =~ /\.(sh|pl|py|awk|tc)$/) {
+				} elsif (($checklicenseline == 2) || $realfile =~ /\.(sh|pl|py|awk|tc|yaml)$/) {
 					$comment = '#';
 				} elsif ($realfile =~ /\.rst$/) {
 					$comment = '..';
@@ -3099,6 +3202,17 @@
 						WARN("SPDX_LICENSE_TAG",
 						     "'$spdx_license' is not supported in LICENSES/...\n" . $herecurr);
 					}
+					if ($realfile =~ m@^Documentation/devicetree/bindings/@ &&
+					    not $spdx_license =~ /GPL-2\.0.*BSD-2-Clause/) {
+						my $msg_level = \&WARN;
+						$msg_level = \&CHK if ($file);
+						if (&{$msg_level}("SPDX_LICENSE_TAG",
+
+								  "DT binding documents should be licensed (GPL-2.0-only OR BSD-2-Clause)\n" . $herecurr) &&
+						    $fix) {
+							$fixed[$fixlinenr] =~ s/SPDX-License-Identifier: .*/SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)/;
+						}
+					}
 				}
 			}
 		}
@@ -3171,8 +3285,10 @@
 
 			if ($msg_type ne "" &&
 			    (show_type("LONG_LINE") || show_type($msg_type))) {
-				WARN($msg_type,
-				     "line over $max_line_length characters\n" . $herecurr);
+				my $msg_level = \&WARN;
+				$msg_level = \&CHK if ($file);
+				&{$msg_level}($msg_type,
+					      "line length of $length exceeds $max_line_length columns\n" . $herecurr);
 			}
 		}
 
@@ -3186,7 +3302,7 @@
 		next if ($realfile !~ /\.(h|c|pl|dtsi|dts)$/);
 
 # at the beginning of a line any tabs must come first and anything
-# more than 8 must use tabs.
+# more than $tabsize must use tabs.
 		if ($rawline =~ /^\+\s* \t\s*\S/ ||
 		    $rawline =~ /^\+\s*        \s*/) {
 			my $herevet = "$here\n" . cat_vet($rawline) . "\n";
@@ -3198,6 +3314,42 @@
 			}
 		}
 
+# check for repeated words separated by a single space
+		if ($rawline =~ /^\+/) {
+			while ($rawline =~ /\b($word_pattern) (?=($word_pattern))/g) {
+
+				my $first = $1;
+				my $second = $2;
+
+				if ($first =~ /(?:struct|union|enum)/) {
+					pos($rawline) += length($first) + length($second) + 1;
+					next;
+				}
+
+				next if ($first ne $second);
+				next if ($first eq 'long');
+
+				if (WARN("REPEATED_WORD",
+					 "Possible repeated word: '$first'\n" . $herecurr) &&
+				    $fix) {
+					$fixed[$fixlinenr] =~ s/\b$first $second\b/$first/;
+				}
+			}
+
+			# if it's a repeated word on consecutive lines in a comment block
+			if ($prevline =~ /$;+\s*$/ &&
+			    $prevrawline =~ /($word_pattern)\s*$/) {
+				my $last_word = $1;
+				if ($rawline =~ /^\+\s*\*\s*$last_word /) {
+					if (WARN("REPEATED_WORD",
+						 "Possible repeated word: '$last_word'\n" . $hereprev) &&
+					    $fix) {
+						$fixed[$fixlinenr] =~ s/(\+\s*\*\s*)$last_word /$1/;
+					}
+				}
+			}
+		}
+
 # check for space before tabs.
 		if ($rawline =~ /^\+/ && $rawline =~ / \t/) {
 			my $herevet = "$here\n" . cat_vet($rawline) . "\n";
@@ -3205,7 +3357,7 @@
 				"please, no space before tabs\n" . $herevet) &&
 			    $fix) {
 				while ($fixed[$fixlinenr] =~
-					   s/(^\+.*) {8,8}\t/$1\t\t/) {}
+					   s/(^\+.*) {$tabsize,$tabsize}\t/$1\t\t/) {}
 				while ($fixed[$fixlinenr] =~
 					   s/(^\+.*) +\t/$1\t/) {}
 			}
@@ -3227,11 +3379,11 @@
 		if ($perl_version_ok &&
 		    $sline =~ /^\+\t+( +)(?:$c90_Keywords\b|\{\s*$|\}\s*(?:else\b|while\b|\s*$)|$Declare\s*$Ident\s*[;=])/) {
 			my $indent = length($1);
-			if ($indent % 8) {
+			if ($indent % $tabsize) {
 				if (WARN("TABSTOP",
 					 "Statements should start on a tabstop\n" . $herecurr) &&
 				    $fix) {
-					$fixed[$fixlinenr] =~ s@(^\+\t+) +@$1 . "\t" x ($indent/8)@e;
+					$fixed[$fixlinenr] =~ s@(^\+\t+) +@$1 . "\t" x ($indent/$tabsize)@e;
 				}
 			}
 		}
@@ -3249,8 +3401,8 @@
 				my $newindent = $2;
 
 				my $goodtabindent = $oldindent .
-					"\t" x ($pos / 8) .
-					" "  x ($pos % 8);
+					"\t" x ($pos / $tabsize) .
+					" "  x ($pos % $tabsize);
 				my $goodspaceindent = $oldindent . " "  x $pos;
 
 				if ($newindent ne $goodtabindent &&
@@ -3721,11 +3873,11 @@
 			#print "line<$line> prevline<$prevline> indent<$indent> sindent<$sindent> check<$check> continuation<$continuation> s<$s> cond_lines<$cond_lines> stat_real<$stat_real> stat<$stat>\n";
 
 			if ($check && $s ne '' &&
-			    (($sindent % 8) != 0 ||
+			    (($sindent % $tabsize) != 0 ||
 			     ($sindent < $indent) ||
 			     ($sindent == $indent &&
 			      ($s !~ /^\s*(?:\}|\{|else\b)/)) ||
-			     ($sindent > $indent + 8))) {
+			     ($sindent > $indent + $tabsize))) {
 				WARN("SUSPECT_CODE_INDENT",
 				     "suspect code indent for conditional statements ($indent, $sindent)\n" . $herecurr . "$stat_real\n");
 			}
@@ -4002,7 +4154,7 @@
 		}
 
 # check for function declarations without arguments like "int foo()"
-		if ($line =~ /(\b$Type\s+$Ident)\s*\(\s*\)/) {
+		if ($line =~ /(\b$Type\s*$Ident)\s*\(\s*\)/) {
 			if (ERROR("FUNCTION_WITHOUT_ARGS",
 				  "Bad function definition - $1() should probably be $1(void)\n" . $herecurr) &&
 			    $fix) {
@@ -4113,15 +4265,6 @@
 			     "Prefer [subsystem eg: netdev]_$level2([subsystem]dev, ... then dev_$level2(dev, ... then pr_$level(...  to printk(KERN_$orig ...\n" . $herecurr);
 		}
 
-		if ($line =~ /\bpr_warning\s*\(/) {
-			if (WARN("PREFER_PR_LEVEL",
-				 "Prefer pr_warn(... to pr_warning(...\n" . $herecurr) &&
-			    $fix) {
-				$fixed[$fixlinenr] =~
-				    s/\bpr_warning\b/pr_warn/;
-			}
-		}
-
 		if ($line =~ /\bdev_printk\s*\(\s*KERN_([A-Z]+)/) {
 			my $orig = $1;
 			my $level = lc($orig);
@@ -4139,6 +4282,17 @@
 			     "ENOSYS means 'invalid syscall nr' and nothing else\n" . $herecurr);
 		}
 
+# ENOTSUPP is not a standard error code and should be avoided in new patches.
+# Folks usually mean EOPNOTSUPP (also called ENOTSUP), when they type ENOTSUPP.
+# Similarly to ENOSYS warning a small number of false positives is expected.
+		if (!$file && $line =~ /\bENOTSUPP\b/) {
+			if (WARN("ENOTSUPP",
+				 "ENOTSUPP is not a SUSV4 error code, prefer EOPNOTSUPP\n" . $herecurr) &&
+			    $fix) {
+				$fixed[$fixlinenr] =~ s/\bENOTSUPP\b/EOPNOTSUPP/;
+			}
+		}
+
 # function brace can't be on same line, except for #defines of do while,
 # or if closed on same line
 		if ($perl_version_ok &&
@@ -4579,7 +4733,7 @@
 					    ($op eq '>' &&
 					     $ca =~ /<\S+\@\S+$/))
 					{
-					    	$ok = 1;
+						$ok = 1;
 					}
 
 					# for asm volatile statements
@@ -4906,15 +5060,37 @@
 			my ($s, $c) = ($stat, $cond);
 
 			if ($c =~ /\bif\s*\(.*[^<>!=]=[^=].*/s) {
-				ERROR("ASSIGN_IN_IF",
-				      "do not use assignment in if condition\n" . $herecurr);
+				if (ERROR("ASSIGN_IN_IF",
+					  "do not use assignment in if condition\n" . $herecurr) &&
+				    $fix && $perl_version_ok) {
+					if ($rawline =~ /^\+(\s+)if\s*\(\s*(\!)?\s*\(\s*(($Lval)\s*=\s*$LvalOrFunc)\s*\)\s*(?:($Compare)\s*($FuncArg))?\s*\)\s*(\{)?\s*$/) {
+						my $space = $1;
+						my $not = $2;
+						my $statement = $3;
+						my $assigned = $4;
+						my $test = $8;
+						my $against = $9;
+						my $brace = $15;
+						fix_delete_line($fixlinenr, $rawline);
+						fix_insert_line($fixlinenr, "$space$statement;");
+						my $newline = "${space}if (";
+						$newline .= '!' if defined($not);
+						$newline .= '(' if (defined $not && defined($test) && defined($against));
+						$newline .= "$assigned";
+						$newline .= " $test $against" if (defined($test) && defined($against));
+						$newline .= ')' if (defined $not && defined($test) && defined($against));
+						$newline .= ')';
+						$newline .= " {" if (defined($brace));
+						fix_insert_line($fixlinenr + 1, $newline);
+					}
+				}
 			}
 
 			# Find out what is on the end of the line after the
 			# conditional.
 			substr($s, 0, length($c), '');
 			$s =~ s/\n.*//g;
-			$s =~ s/$;//g; 	# Remove any comments
+			$s =~ s/$;//g;	# Remove any comments
 			if (length($c) && $s !~ /^\s*{?\s*\\*\s*$/ &&
 			    $c !~ /}\s*while\s*/)
 			{
@@ -4953,7 +5129,7 @@
 # if and else should not have general statements after it
 		if ($line =~ /^.\s*(?:}\s*)?else\b(.*)/) {
 			my $s = $1;
-			$s =~ s/$;//g; 	# Remove any comments
+			$s =~ s/$;//g;	# Remove any comments
 			if ($s !~ /^\s*(?:\sif|(?:{|)\s*\\?\s*$)/) {
 				ERROR("TRAILING_STATEMENTS",
 				      "trailing statements should be on next line\n" . $herecurr);
@@ -5030,8 +5206,9 @@
 			    $var =~ /[A-Z][a-z]|[a-z][A-Z]/ &&
 #Ignore Page<foo> variants
 			    $var !~ /^(?:Clear|Set|TestClear|TestSet|)Page[A-Z]/ &&
-#Ignore SI style variants like nS, mV and dB (ie: max_uV, regulator_min_uA_show)
-			    $var !~ /^(?:[a-z_]*?)_?[a-z][A-Z](?:_[a-z_]+)?$/ &&
+#Ignore SI style variants like nS, mV and dB
+#(ie: max_uV, regulator_min_uA_show, RANGE_mA_VALUE)
+			    $var !~ /^(?:[a-z0-9_]*|[A-Z0-9_]*)?_?[a-z][A-Z](?:_[a-z0-9_]+|_[A-Z0-9_]+)?$/ &&
 #Ignore some three character SI units explicitly, like MiB and KHz
 			    $var !~ /^(?:[a-z_]*?)_?(?:[KMGT]iB|[KMGT]?Hz)(?:_[a-z_]+)?$/) {
 				while ($var =~ m{($Ident)}g) {
@@ -5128,7 +5305,7 @@
 			{
 			}
 
-			# Flatten any obvious string concatentation.
+			# Flatten any obvious string concatenation.
 			while ($dstat =~ s/($String)\s*$Ident/$1/ ||
 			       $dstat =~ s/$Ident\s*($String)/$1/)
 			{
@@ -5787,8 +5964,7 @@
 		my $barriers = qr{
 			mb|
 			rmb|
-			wmb|
-			read_barrier_depends
+			wmb
 		}x;
 		my $barrier_stems = qr{
 			mb__before_atomic|
@@ -5829,10 +6005,12 @@
 			}
 		}
 
-# check for smp_read_barrier_depends and read_barrier_depends
-		if (!$file && $line =~ /\b(smp_|)read_barrier_depends\s*\(/) {
-			WARN("READ_BARRIER_DEPENDS",
-			     "$1read_barrier_depends should only be used in READ_ONCE or DEC Alpha code\n" . $herecurr);
+# check for data_race without a comment.
+		if ($line =~ /\bdata_race\s*\(/) {
+			if (!ctx_has_comment($first_line, $linenr)) {
+				WARN("DATA_RACE",
+				     "data_race without comment\n" . $herecurr);
+			}
 		}
 
 # check of hardware specific defines
@@ -6015,14 +6193,18 @@
 		        for (my $count = $linenr; $count <= $lc; $count++) {
 				my $specifier;
 				my $extension;
+				my $qualifier;
 				my $bad_specifier = "";
 				my $fmt = get_quoted_string($lines[$count - 1], raw_line($count, 0));
 				$fmt =~ s/%%//g;
 
-				while ($fmt =~ /(\%[\*\d\.]*p(\w))/g) {
+				while ($fmt =~ /(\%[\*\d\.]*p(\w)(\w*))/g) {
 					$specifier = $1;
 					$extension = $2;
-					if ($extension !~ /[SsBKRraEhMmIiUDdgVCbGNOxt]/) {
+					$qualifier = $3;
+					if ($extension !~ /[SsBKRraEehMmIiUDdgVCbGNOxtf]/ ||
+					    ($extension eq "f" &&
+					     defined $qualifier && $qualifier !~ /^w/)) {
 						$bad_specifier = $specifier;
 						last;
 					}
@@ -6039,7 +6221,6 @@
 					my $ext_type = "Invalid";
 					my $use = "";
 					if ($bad_specifier =~ /p[Ff]/) {
-						$ext_type = "Deprecated";
 						$use = " - use %pS instead";
 						$use =~ s/pS/ps/ if ($bad_specifier =~ /pf/);
 					}
@@ -6203,8 +6384,7 @@
 			if (defined $cond) {
 				substr($s, 0, length($cond), '');
 			}
-			if ($s =~ /^\s*;/ &&
-			    $function_name ne 'uninitialized_var')
+			if ($s =~ /^\s*;/)
 			{
 				WARN("AVOID_EXTERNS",
 				     "externs should be avoided in .c files\n" .  $herecurr);
@@ -6265,7 +6445,7 @@
 
 			if (!grep(/$name/, @setup_docs)) {
 				CHK("UNDOCUMENTED_SETUP",
-				    "__setup appears un-documented -- check Documentation/admin-guide/kernel-parameters.rst\n" . $herecurr);
+				    "__setup appears un-documented -- check Documentation/admin-guide/kernel-parameters.txt\n" . $herecurr);
 			}
 		}
 
@@ -6347,6 +6527,12 @@
 			}
 		}
 
+# check for IS_ENABLED() without CONFIG_<FOO> ($rawline for comments too)
+		if ($rawline =~ /\bIS_ENABLED\s*\(\s*(\w+)\s*\)/ && $1 !~ /^CONFIG_/) {
+			WARN("IS_ENABLED_CONFIG",
+			     "IS_ENABLED($1) is normally used as IS_ENABLED(CONFIG_$1)\n" . $herecurr);
+		}
+
 # check for #if defined CONFIG_<FOO> || defined CONFIG_<FOO>_MODULE
 		if ($line =~ /^\+\s*#\s*if\s+defined(?:\s*\(?\s*|\s+)(CONFIG_[A-Z_]+)\s*\)?\s*\|\|\s*defined(?:\s*\(?\s*|\s+)\1_MODULE\s*\)?\s*$/) {
 			my $config = $1;
@@ -6357,28 +6543,25 @@
 			}
 		}
 
-# check for case / default statements not preceded by break/fallthrough/switch
-		if ($line =~ /^.\s*(?:case\s+(?:$Ident|$Constant)\s*|default):/) {
-			my $has_break = 0;
-			my $has_statement = 0;
-			my $count = 0;
-			my $prevline = $linenr;
-			while ($prevline > 1 && ($file || $count < 3) && !$has_break) {
-				$prevline--;
-				my $rline = $rawlines[$prevline - 1];
-				my $fline = $lines[$prevline - 1];
-				last if ($fline =~ /^\@\@/);
-				next if ($fline =~ /^\-/);
-				next if ($fline =~ /^.(?:\s*(?:case\s+(?:$Ident|$Constant)[\s$;]*|default):[\s$;]*)*$/);
-				$has_break = 1 if ($rline =~ /fall[\s_-]*(through|thru)/i);
-				next if ($fline =~ /^.[\s$;]*$/);
-				$has_statement = 1;
-				$count++;
-				$has_break = 1 if ($fline =~ /\bswitch\b|\b(?:break\s*;[\s$;]*$|exit\s*\(\b|return\b|goto\b|continue\b)/);
-			}
-			if (!$has_break && $has_statement) {
-				WARN("MISSING_BREAK",
-				     "Possible switch case/default not preceded by break or fallthrough comment\n" . $herecurr);
+# check for /* fallthrough */ like comment, prefer fallthrough;
+		my @fallthroughs = (
+			'fallthrough',
+			'@fallthrough@',
+			'lint -fallthrough[ \t]*',
+			'intentional(?:ly)?[ \t]*fall(?:(?:s | |-)[Tt]|t)hr(?:ough|u|ew)',
+			'(?:else,?\s*)?FALL(?:S | |-)?THR(?:OUGH|U|EW)[ \t.!]*(?:-[^\n\r]*)?',
+			'Fall(?:(?:s | |-)[Tt]|t)hr(?:ough|u|ew)[ \t.!]*(?:-[^\n\r]*)?',
+			'fall(?:s | |-)?thr(?:ough|u|ew)[ \t.!]*(?:-[^\n\r]*)?',
+		    );
+		if ($raw_comment ne '') {
+			foreach my $ft (@fallthroughs) {
+				if ($raw_comment =~ /$ft/) {
+					my $msg_level = \&WARN;
+					$msg_level = \&CHK if ($file);
+					&{$msg_level}("PREFER_FALLTHROUGH",
+						      "Prefer 'fallthrough;' over fallthrough comment\n" . $herecurr);
+					last;
+				}
 			}
 		}
 
@@ -6475,7 +6658,8 @@
 
 # check for various structs that are normally const (ops, kgdb, device_tree)
 # and avoid what seem like struct definitions 'struct foo {'
-		if ($line !~ /\bconst\b/ &&
+		if (defined($const_structs) &&
+		    $line !~ /\bconst\b/ &&
 		    $line =~ /\bstruct\s+($const_structs)\b(?!\s*\{)/) {
 			WARN("CONST_STRUCT",
 			     "struct $1 should normally be const\n" . $herecurr);
diff --git a/scripts/gen_autoksyms.sh b/scripts/gen_autoksyms.sh
new file mode 100755
index 0000000..16c0b2d
--- /dev/null
+++ b/scripts/gen_autoksyms.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-only
+
+# Create an autoksyms.h header file from the list of all module's needed symbols
+# as recorded on the second line of *.mod files and the user-provided symbol
+# whitelist.
+
+set -e
+
+output_file="$1"
+
+# Use "make V=1" to debug this script.
+case "$KBUILD_VERBOSE" in
+*1*)
+	set -x
+	;;
+esac
+
+# We need access to CONFIG_ symbols
+. include/config/auto.conf
+
+ksym_wl=/dev/null
+if [ -n "$CONFIG_UNUSED_KSYMS_WHITELIST" ]; then
+	# Use 'eval' to expand the whitelist path and check if it is relative
+	eval ksym_wl="$CONFIG_UNUSED_KSYMS_WHITELIST"
+	[ "${ksym_wl}" != "${ksym_wl#/}" ] || ksym_wl="$abs_srctree/$ksym_wl"
+	if [ ! -f "$ksym_wl" ] || [ ! -r "$ksym_wl" ]; then
+		echo "ERROR: '$ksym_wl' whitelist file not found" >&2
+		exit 1
+	fi
+fi
+
+# Generate a new ksym list file with symbols needed by the current
+# set of modules.
+cat > "$output_file" << EOT
+/*
+ * Automatically generated file; DO NOT EDIT.
+ */
+
+EOT
+
+[ -f modules.order ] && modlist=modules.order || modlist=/dev/null
+sed 's/ko$/mod/' $modlist |
+xargs -n1 sed -n -e '2{s/ /\n/g;/^$/!p;}' -- |
+cat - "$ksym_wl" |
+sort -u |
+sed -e 's/\(.*\)/#define __KSYM_\1 1/' >> "$output_file"
+
+# Special case for modversions (see modpost.c)
+if [ -n "$CONFIG_MODVERSIONS" ]; then
+	echo "#define __KSYM_module_layout 1" >> "$output_file"
+fi
diff --git a/scripts/generate_initcall_order.pl b/scripts/generate_initcall_order.pl
new file mode 100755
index 0000000..f772b4a
--- /dev/null
+++ b/scripts/generate_initcall_order.pl
@@ -0,0 +1,250 @@
+#!/usr/bin/env perl
+# SPDX-License-Identifier: GPL-2.0
+#
+# Generates a linker script that specifies the correct initcall order.
+#
+# Copyright (C) 2019 Google LLC
+
+use strict;
+use warnings;
+use IO::Handle;
+
+my $nm = $ENV{'LLVM_NM'} || "llvm-nm";
+my $ar = $ENV{'AR'}	 || "llvm-ar";
+my $objtree = $ENV{'objtree'} || ".";
+
+## list of all object files to process, in link order
+my @objects;
+## currently active child processes
+my $jobs = {};		# child process pid -> file handle
+## results from child processes
+my $results = {};	# object index -> { level, function }
+
+## reads _NPROCESSORS_ONLN to determine the number of processes to start
+sub get_online_processors {
+	open(my $fh, "getconf _NPROCESSORS_ONLN 2>/dev/null |")
+		or die "$0: failed to execute getconf: $!";
+	my $procs = <$fh>;
+	close($fh);
+
+	if (!($procs =~ /^\d+$/)) {
+		return 1;
+	}
+
+	return int($procs);
+}
+
+## finds initcalls defined in an object file, parses level and function name,
+## and prints it out to the parent process
+sub find_initcalls {
+	my ($object) = @_;
+
+	die "$0: object file $object doesn't exist?" if (! -f $object);
+
+	open(my $fh, "\"$nm\" -just-symbol-name -defined-only \"$object\" 2>/dev/null |")
+		or die "$0: failed to execute \"$nm\": $!";
+
+	my $initcalls = {};
+
+	while (<$fh>) {
+		chomp;
+
+		my ($counter, $line, $symbol) = $_ =~ /^__initcall_(\d+)_(\d+)_(.*)$/;
+
+		if (!defined($counter) || !defined($line) || !defined($symbol)) {
+			next;
+		}
+
+		my ($function, $level) = $symbol =~
+			/^(.*)((early|rootfs|con|security|[0-9])s?)$/;
+
+		die "$0: duplicate initcall counter value in object $object: $_"
+			if exists($initcalls->{$counter});
+
+		$initcalls->{$counter} = {
+			'level'    => $level,
+			'line'     => $line,
+			'function' => $function
+		};
+	}
+
+	close($fh);
+
+	# sort initcalls in each object file numerically by the counter value
+	# to ensure they are in the order they were defined
+	foreach my $counter (sort { $a <=> $b } keys(%{$initcalls})) {
+		print $initcalls->{$counter}->{"level"} . " " .
+		      $counter . " " .
+		      $initcalls->{$counter}->{"line"} . " " .
+		      $initcalls->{$counter}->{"function"} . "\n";
+	}
+}
+
+## waits for any child process to complete, reads the results, and adds them to
+## the $results array for later processing
+sub wait_for_results {
+	my $pid = wait();
+	if ($pid > 0) {
+		my $fh = $jobs->{$pid};
+
+		# the child process prints out results in the following format:
+		#  line 1:    <object file index>
+		#  line 2..n: <level> <counter> <line> <function>
+
+		my $index = <$fh>;
+		chomp($index);
+
+		if (!($index =~ /^\d+$/)) {
+			die "$0: child $pid returned an invalid index: $index";
+		}
+		$index = int($index);
+
+		while (<$fh>) {
+			chomp;
+			my ($level, $counter, $line, $function) = $_ =~
+				/^([^\ ]+)\ (\d+)\ (\d+)\ (.*)$/;
+
+			if (!defined($level) ||
+				!defined($counter) ||
+				!defined($line) ||
+				!defined($function)) {
+				die "$0: child $pid returned invalid data";
+			}
+
+			if (!exists($results->{$index})) {
+				$results->{$index} = [];
+			}
+
+			push (@{$results->{$index}}, {
+				'level'    => $level,
+				'counter'  => $counter,
+				'line'     => $line,
+				'function' => $function
+			});
+		}
+
+		close($fh);
+		delete($jobs->{$pid});
+	}
+}
+
+## launches child processes to find initcalls from the object files, waits for
+## each process to complete and collects the results
+sub process_objects {
+	my $index = 0;	# link order index of the object file
+	my $njobs = get_online_processors();
+
+	while (scalar(@objects) > 0) {
+		my $object = shift(@objects);
+
+		# fork a child process and read it's stdout
+		my $pid = open(my $fh, '-|');
+
+		if (!defined($pid)) {
+			die "$0: failed to fork: $!";
+		} elsif ($pid) {
+			# save the child process pid and the file handle
+			$jobs->{$pid} = $fh;
+		} else {
+			STDOUT->autoflush(1);
+			print "$index\n";
+			find_initcalls("$objtree/$object");
+			exit;
+		}
+
+		$index++;
+
+		# if we reached the maximum number of processes, wait for one
+		# to complete before launching new ones
+		if (scalar(keys(%{$jobs})) >= $njobs && scalar(@objects) > 0) {
+			wait_for_results();
+		}
+	}
+
+	# wait for the remaining children to complete
+	while (scalar(keys(%{$jobs})) > 0) {
+		wait_for_results();
+	}
+}
+
+## gets a list of actual object files from thin archives, and adds them to
+## @objects in link order
+sub find_objects {
+	while (my $file = shift(@ARGV)) {
+		my $pid = open (my $fh, "\"$ar\" t \"$file\" 2>/dev/null |")
+			or die "$0: failed to execute $ar: $!";
+
+		my @output;
+
+		while (<$fh>) {
+			chomp;
+			push(@output, $_);
+		}
+
+		close($fh);
+
+		# if $ar failed, assume we have an object file
+		if ($? != 0) {
+			push(@objects, $file);
+			next;
+		}
+
+		# if $ar succeeded, read the list of object files
+		foreach (@output) {
+			push(@objects, $_);
+		}
+	}
+}
+
+## START
+find_objects();
+process_objects();
+
+## process results and add them to $sections in the correct order
+my $sections = {};
+
+foreach my $index (sort { $a <=> $b } keys(%{$results})) {
+	foreach my $result (@{$results->{$index}}) {
+		my $level = $result->{'level'};
+
+		if (!exists($sections->{$level})) {
+			$sections->{$level} = [];
+		}
+
+		my $fsname = $result->{'counter'} . '_' .
+			     $result->{'line'}    . '_' .
+			     $result->{'function'};
+
+		push(@{$sections->{$level}}, $fsname);
+	}
+}
+
+if (!keys(%{$sections})) {
+	exit(0); # no initcalls...?
+}
+
+## print out a linker script that defines the order of initcalls for each
+## level
+print "SECTIONS {\n";
+
+foreach my $level (sort(keys(%{$sections}))) {
+	my $section;
+
+	if ($level eq 'con') {
+		$section = '.con_initcall.init';
+	} elsif ($level eq 'security') {
+		$section = '.security_initcall.init';
+	} else {
+		$section = ".initcall${level}.init";
+	}
+
+	print "\t${section} : {\n";
+
+	foreach my $fsname (@{$sections->{$level}}) {
+		print "\t\t*(${section}..${fsname}) ;\n"
+	}
+
+	print "\t}\n";
+}
+
+print "}\n";
diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c
index fb15f09..4a4a05a7 100644
--- a/scripts/kallsyms.c
+++ b/scripts/kallsyms.c
@@ -28,7 +28,7 @@
 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
 #endif
 
-#define KSYM_NAME_LEN		128
+#define KSYM_NAME_LEN		192
 
 struct sym_entry {
 	unsigned long long addr;
diff --git a/scripts/kconfig/merge_config.sh b/scripts/kconfig/merge_config.sh
index 63c8565..e5b4698 100755
--- a/scripts/kconfig/merge_config.sh
+++ b/scripts/kconfig/merge_config.sh
@@ -28,6 +28,7 @@
 	echo "  -r    list redundant entries when merging fragments"
 	echo "  -y    make builtin have precedence over modules"
 	echo "  -O    dir to put generated output files.  Consider setting \$KCONFIG_CONFIG instead."
+	echo "  -s    strict mode. Fail if the fragment redefines any value."
 	echo
 	echo "Used prefix: '$CONFIG_PREFIX'. You can redefine it with \$CONFIG_ environment variable."
 }
@@ -37,6 +38,7 @@
 WARNREDUN=false
 BUILTIN=false
 OUTPUT=.
+STRICT=false
 CONFIG_PREFIX=${CONFIG_-CONFIG_}
 
 while true; do
@@ -75,6 +77,11 @@
 		shift 2
 		continue
 		;;
+	"-s")
+		STRICT=true
+		shift
+		continue
+		;;
 	*)
 		break
 		;;
@@ -141,6 +148,9 @@
 			echo Previous  value: $PREV_VAL
 			echo New value:       $NEW_VAL
 			echo
+			if [ "$STRICT" = "true" ]; then
+				STRICT_MODE_VIOLATED=true
+			fi
 		elif [ "$WARNREDUN" = "true" ]; then
 			echo Value of $CFG is redundant by fragment $ORIG_MERGE_FILE:
 		fi
@@ -153,6 +163,11 @@
 	cat $MERGE_FILE >> $TMP_FILE
 done
 
+if [ "$STRICT_MODE_VIOLATED" = "true" ]; then
+	echo "The fragment redefined a value and strict mode had been passed."
+	exit 1
+fi
+
 if [ "$RUNMAKE" = "false" ]; then
 	cp -T -- "$TMP_FILE" "$KCONFIG_CONFIG"
 	echo "#"
diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
index 8b6325c..8f6ca44 100755
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
@@ -39,6 +39,32 @@
 	fi
 }
 
+# If CONFIG_LTO_CLANG is selected, generate a linker script to ensure correct
+# ordering of initcalls, and with CONFIG_MODVERSIONS also enabled, collect the
+# previously generated symbol versions into the same script.
+lto_lds()
+{
+	if [ -z "${CONFIG_LTO_CLANG}" ]; then
+		return
+	fi
+
+	${srctree}/scripts/generate_initcall_order.pl \
+		${KBUILD_VMLINUX_OBJS} ${KBUILD_VMLINUX_LIBS} \
+		> .tmp_lto.lds
+
+	if [ -n "${CONFIG_MODVERSIONS}" ]; then
+		for a in ${KBUILD_VMLINUX_OBJS} ${KBUILD_VMLINUX_LIBS}; do
+			for o in $(${AR} t $a 2>/dev/null); do
+				if [ -f ${o}.symversions ]; then
+					cat ${o}.symversions >> .tmp_lto.lds
+				fi
+			done
+		done
+	fi
+
+	echo "-T .tmp_lto.lds"
+}
+
 # Link of vmlinux.o used for section mismatch analysis
 # ${1} output file
 modpost_link()
@@ -52,7 +78,28 @@
 		${KBUILD_VMLINUX_LIBS}				\
 		--end-group"
 
-	${LD} ${KBUILD_LDFLAGS} -r -o ${1} ${objects}
+	if [ -n "${CONFIG_LTO_CLANG}" ]; then
+		# This might take a while, so indicate that we're doing
+		# an LTO link
+		info LTO ${1}
+	else
+		info LD ${1}
+	fi
+
+	${LD} ${KBUILD_LDFLAGS} -r -o ${1} $(lto_lds) ${objects}
+}
+
+# If CONFIG_LTO_CLANG is selected, we postpone running recordmcount until
+# we have compiled LLVM IR to an object file.
+recordmcount()
+{
+	if [ -z "${CONFIG_LTO_CLANG}" ]; then
+		return
+	fi
+
+	if [ -n "${CONFIG_FTRACE_MCOUNT_RECORD}" ]; then
+		scripts/recordmcount ${RECORDMCOUNT_FLAGS} $*
+	fi
 }
 
 # Link of vmlinux
@@ -76,13 +123,22 @@
 	fi
 
 	if [ "${SRCARCH}" != "um" ]; then
-		objects="--whole-archive			\
-			${KBUILD_VMLINUX_OBJS}			\
-			--no-whole-archive			\
-			--start-group				\
-			${KBUILD_VMLINUX_LIBS}			\
-			--end-group				\
-			${@}"
+		if [ -n "${CONFIG_LTO_CLANG}" ]; then
+			# Use vmlinux.o instead of performing the slow LTO
+			# link again.
+			objects="--whole-archive		\
+				vmlinux.o 			\
+				--no-whole-archive		\
+				${@}"
+		else
+			objects="--whole-archive		\
+				${KBUILD_VMLINUX_OBJS}		\
+				--no-whole-archive		\
+				--start-group			\
+				${KBUILD_VMLINUX_LIBS}		\
+				--end-group			\
+				${@}"
+		fi
 
 		${LD} ${KBUILD_LDFLAGS} ${LDFLAGS_vmlinux}	\
 			${strip_debug#-Wl,}			\
@@ -198,6 +254,7 @@
 {
 	rm -f .btf.*
 	rm -f .tmp_System.map
+	rm -f .tmp_lto.lds
 	rm -f .tmp_vmlinux*
 	rm -f System.map
 	rm -f vmlinux
@@ -249,12 +306,16 @@
 ${MAKE} -f "${srctree}/scripts/Makefile.build" obj=init
 
 #link vmlinux.o
-info LD vmlinux.o
 modpost_link vmlinux.o
 
 # modpost vmlinux.o to check for section mismatches
 ${MAKE} -f "${srctree}/scripts/Makefile.modpost" MODPOST_VMLINUX=1
 
+if [ -n "${CONFIG_LTO_CLANG}" ]; then
+	# Call recordmcount if needed
+	recordmcount vmlinux.o
+fi
+
 info MODINFO modules.builtin.modinfo
 ${OBJCOPY} -j .modinfo -O binary vmlinux.o modules.builtin.modinfo
 
diff --git a/scripts/mkcompile_h b/scripts/mkcompile_h
index d1d757c..4578e41 100755
--- a/scripts/mkcompile_h
+++ b/scripts/mkcompile_h
@@ -6,7 +6,8 @@
 SMP=$3
 PREEMPT=$4
 PREEMPT_RT=$5
-CC=$6
+CC_VERSION="$6"
+LD=$7
 
 vecho() { [ "${quiet}" = "silent_" ] || echo "$@" ; }
 
@@ -74,7 +75,9 @@
   echo \#define LINUX_COMPILE_BY \"`echo $LINUX_COMPILE_BY | $UTS_TRUNCATE`\"
   echo \#define LINUX_COMPILE_HOST \"`echo $LINUX_COMPILE_HOST | $UTS_TRUNCATE`\"
 
-  echo \#define LINUX_COMPILER \"`$CC -v 2>&1 | grep ' version ' | sed 's/[[:space:]]*$//'`\"
+  LD_VERSION=$($LD -v | head -n1 | sed 's/(compatible with [^)]*)//' \
+		      | sed 's/[[:space:]]*$//')
+  printf '#define LINUX_COMPILER "%s"\n' "$CC_VERSION, $LD_VERSION"
 } > .tmpcompile
 
 # Only replace the real compile.h if the new one is different,
diff --git a/scripts/mod/Makefile b/scripts/mod/Makefile
index 42c5d50..9cbf463 100644
--- a/scripts/mod/Makefile
+++ b/scripts/mod/Makefile
@@ -1,5 +1,6 @@
 # SPDX-License-Identifier: GPL-2.0
 OBJECT_FILES_NON_STANDARD := y
+CFLAGS_REMOVE_empty.o += $(CC_FLAGS_LTO)
 
 hostprogs-y	:= modpost mk_elfconfig
 always		:= $(hostprogs-y) empty.o
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 13cda6a..7b3d571 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -146,6 +146,9 @@ static struct module *new_module(const char *modname)
 		p[strlen(p) - 2] = '\0';
 		mod->is_dot_o = 1;
 	}
+	/* strip trailing .lto */
+	if (strends(p, ".lto"))
+		p[strlen(p) - 4] = '\0';
 
 	/* add to list */
 	mod->name = p;
@@ -387,9 +390,9 @@ static struct symbol *sym_add_exported(const char *name, struct module *mod,
 		s = new_symbol(name, mod, export);
 	} else {
 		if (!s->preloaded) {
-			warn("%s: '%s' exported twice. Previous export was in %s%s\n",
-			     mod->name, name, s->module->name,
-			     is_vmlinux(s->module->name) ? "" : ".ko");
+			fatal("%s: '%s' exported twice. Previous export was in %s%s\n",
+			      mod->name, name, s->module->name,
+			      is_vmlinux(s->module->name) ? "" : ".ko");
 		} else {
 			/* In case Module.symvers was out of date */
 			s->module = mod;
@@ -2000,6 +2003,10 @@ static char *remove_dot(char *s)
 		size_t m = strspn(s + n + 1, "0123456789");
 		if (m && (s[n + m] == '.' || s[n + m] == 0))
 			s[n] = 0;
+
+		/* strip trailing .lto */
+		if (strends(s, ".lto"))
+			s[strlen(s) - 4] = '\0';
 	}
 	return s;
 }
@@ -2258,8 +2265,12 @@ static int check_modname_len(struct module *mod)
  **/
 static void add_header(struct buffer *b, struct module *mod)
 {
-	buf_printf(b, "#include <linux/build-salt.h>\n");
 	buf_printf(b, "#include <linux/module.h>\n");
+	/*
+	 * Include build-salt.h after module.h in order to
+	 * inherit the definitions.
+	 */
+	buf_printf(b, "#include <linux/build-salt.h>\n");
 	buf_printf(b, "#include <linux/vermagic.h>\n");
 	buf_printf(b, "#include <linux/compiler.h>\n");
 	buf_printf(b, "\n");
diff --git a/scripts/module-lto.lds.S b/scripts/module-lto.lds.S
new file mode 100644
index 0000000..a89f0c5
--- /dev/null
+++ b/scripts/module-lto.lds.S
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#include <asm/page.h>
+
+/*
+ * With CONFIG_LTO_CLANG, LLD always enables -fdata-sections and
+ * -ffunction-sections, which increases the size of the final module.
+ * Merge the split sections in the final binary.
+ */
+SECTIONS {
+	/*
+	 * LLVM may emit .eh_frame with CONFIG_CFI_CLANG despite
+	 * -fno-asynchronous-unwind-tables. Discard the section.
+	 */
+	/DISCARD/ : {
+		*(.eh_frame)
+	}
+
+	.bss : {
+		*(.bss .bss.[0-9a-zA-Z_]*)
+		*(.bss..L*)
+	}
+
+	.data : {
+		*(.data .data.[0-9a-zA-Z_]*)
+		*(.data..L*)
+	}
+
+	.rodata : {
+		*(.rodata .rodata.[0-9a-zA-Z_]*)
+		*(.rodata..L*)
+	}
+
+	/*
+	 * With CFI_CLANG, ensure __cfi_check is at the beginning of the
+	 * .text section, and that the section is aligned to page size.
+	 */
+	.text : ALIGN(PAGE_SIZE) {
+		*(.text.__cfi_check)
+		*(.text .text.[0-9a-zA-Z_]* .text..L.cfi*)
+	}
+}
diff --git a/scripts/recordmcount.c b/scripts/recordmcount.c
index b9c2ee7..d8f5e02 100644
--- a/scripts/recordmcount.c
+++ b/scripts/recordmcount.c
@@ -414,7 +414,9 @@ static int is_mcounted_section_name(char const *const txtname)
 		strcmp(".irqentry.text", txtname) == 0 ||
 		strcmp(".softirqentry.text", txtname) == 0 ||
 		strcmp(".kprobes.text", txtname) == 0 ||
-		strcmp(".cpuidle.text", txtname) == 0;
+		strcmp(".cpuidle.text", txtname) == 0 ||
+		(strncmp(".text.",       txtname, 6) == 0 &&
+		 strcmp(".text..ftrace", txtname) != 0);
 }
 
 static char const *already_has_rel_mcount = "success"; /* our work here is done! */
diff --git a/scripts/recordmcount.h b/scripts/recordmcount.h
index f9b1952..295837d 100644
--- a/scripts/recordmcount.h
+++ b/scripts/recordmcount.h
@@ -529,6 +529,12 @@ static int find_secsym_ndx(unsigned const txtndx,
 		if (txtndx == get_symindex(symp, symtab, symtab_shndx)
 			/* avoid STB_WEAK */
 		    && (STB_LOCAL == st_bind || STB_GLOBAL == st_bind)) {
+			/* avoid file symbols */
+			if (ELF_ST_TYPE(symp->st_info) == STT_FILE)
+				continue;
+			/* avoid SHN_ABS */
+			if (symp->st_shndx == SHN_ABS)
+				continue;
 			/* function symbols on ARM have quirks, avoid them */
 			if (w2(ehdr->e_machine) == EM_ARM
 			    && ELF_ST_TYPE(symp->st_info) == STT_FUNC)
diff --git a/scripts/setlocalversion b/scripts/setlocalversion
index 45609db..63a87f4 100755
--- a/scripts/setlocalversion
+++ b/scripts/setlocalversion
@@ -11,12 +11,14 @@
 #
 
 usage() {
-	echo "Usage: $0 [--save-scmversion] [srctree]" >&2
+	echo "Usage: $0 [--save-scmversion] [srctree] [branch] [kmi-generation]" >&2
 	exit 1
 }
 
 scm_only=false
 srctree=.
+android_release=
+kmi_generation=
 if test "$1" = "--save-scmversion"; then
 	scm_only=true
 	shift
@@ -25,6 +27,24 @@
 	srctree=$1
 	shift
 fi
+if test $# -gt 0; then
+	# Extract the Android release version. If there is no match, then return 255
+	# and clear the var $android_release
+	android_release=`echo "$1" | sed -e '/android[0-9]\{2,\}/!{q255}; \
+		s/^\(android[0-9]\{2,\}\)-.*/\1/'`
+	if test $? -ne 0; then
+		android_release=
+	fi
+	shift
+
+	if test $# -gt 0; then
+		kmi_generation=$1
+		[ $(expr $kmi_generation : '^[0-9]\+$') -eq 0 ] && usage
+		shift
+	else
+		usage
+	fi
+fi
 if test $# -gt 0 -o ! -d "$srctree"; then
 	usage
 fi
@@ -47,6 +67,10 @@
 	if test -z "$(git rev-parse --show-cdup 2>/dev/null)" &&
 	   head=$(git rev-parse --verify HEAD 2>/dev/null); then
 
+		if [ -n "$android_release" ] && [ -n "$kmi_generation" ]; then
+			printf '%s' "-$android_release-$kmi_generation"
+		fi
+
 		# If we are at a tagged commit (like "v2.6.30-rc6"), we ignore
 		# it, because this version is defined in the top level Makefile.
 		if [ -z "`git describe --exact-match 2>/dev/null`" ]; then
diff --git a/security/Kconfig.hardening b/security/Kconfig.hardening
index af4c979b..269967c 100644
--- a/security/Kconfig.hardening
+++ b/security/Kconfig.hardening
@@ -19,13 +19,16 @@
 
 menu "Memory initialization"
 
-config CC_HAS_AUTO_VAR_INIT
+config CC_HAS_AUTO_VAR_INIT_PATTERN
 	def_bool $(cc-option,-ftrivial-auto-var-init=pattern)
 
+config CC_HAS_AUTO_VAR_INIT_ZERO
+	def_bool $(cc-option,-ftrivial-auto-var-init=zero -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang)
+
 choice
 	prompt "Initialize kernel stack variables at function entry"
 	default GCC_PLUGIN_STRUCTLEAK_BYREF_ALL if COMPILE_TEST && GCC_PLUGINS
-	default INIT_STACK_ALL if COMPILE_TEST && CC_HAS_AUTO_VAR_INIT
+	default INIT_STACK_ALL_PATTERN if COMPILE_TEST && CC_HAS_AUTO_VAR_INIT_PATTERN
 	default INIT_STACK_NONE
 	help
 	  This option enables initialization of stack variables at
@@ -88,9 +91,9 @@
 		  of uninitialized stack variable exploits and information
 		  exposures.
 
-	config INIT_STACK_ALL
+	config INIT_STACK_ALL_PATTERN
 		bool "0xAA-init everything on the stack (strongest)"
-		depends on CC_HAS_AUTO_VAR_INIT
+		depends on CC_HAS_AUTO_VAR_INIT_PATTERN
 		help
 		  Initializes everything on the stack with a 0xAA
 		  pattern. This is intended to eliminate all classes
@@ -98,6 +101,24 @@
 		  exposures, even variables that were warned to have been
 		  left uninitialized.
 
+		  Pattern initialization is known to provoke many existing bugs
+		  related to uninitialized locals, e.g. pointers receive
+		  non-NULL values, buffer sizes and indices are very big.
+
+	config INIT_STACK_ALL_ZERO
+		bool "zero-init everything on the stack (strongest and safest)"
+		depends on CC_HAS_AUTO_VAR_INIT_ZERO
+		help
+		  Initializes everything on the stack with a zero
+		  value. This is intended to eliminate all classes
+		  of uninitialized stack variable exploits and information
+		  exposures, even variables that were warned to have been
+		  left uninitialized.
+
+		  Zero initialization provides safe defaults for strings,
+		  pointers, indices and sizes, and is therefore
+		  more suitable as a security mitigation measure.
+
 endchoice
 
 config GCC_PLUGIN_STRUCTLEAK_VERBOSE
diff --git a/security/commoncap.c b/security/commoncap.c
index 28a6939..387277d 100644
--- a/security/commoncap.c
+++ b/security/commoncap.c
@@ -297,7 +297,8 @@ int cap_inode_need_killpriv(struct dentry *dentry)
 	struct inode *inode = d_backing_inode(dentry);
 	int error;
 
-	error = __vfs_getxattr(dentry, inode, XATTR_NAME_CAPS, NULL, 0);
+	error = __vfs_getxattr(dentry, inode, XATTR_NAME_CAPS, NULL, 0,
+			       XATTR_NOSECURITY);
 	return error > 0;
 }
 
@@ -605,7 +606,8 @@ int get_vfs_caps_from_disk(const struct dentry *dentry, struct cpu_vfs_cap_data
 
 	fs_ns = inode->i_sb->s_user_ns;
 	size = __vfs_getxattr((struct dentry *)dentry, inode,
-			      XATTR_NAME_CAPS, &data, XATTR_CAPS_SZ);
+			      XATTR_NAME_CAPS, &data, XATTR_CAPS_SZ,
+			      XATTR_NOSECURITY);
 	if (size == -ENODATA || size == -EOPNOTSUPP)
 		/* no data, that's ok */
 		return -ENODATA;
diff --git a/security/integrity/evm/evm_main.c b/security/integrity/evm/evm_main.c
index 615094ed..8f24b82 100644
--- a/security/integrity/evm/evm_main.c
+++ b/security/integrity/evm/evm_main.c
@@ -100,7 +100,8 @@ static int evm_find_protected_xattrs(struct dentry *dentry)
 		return -EOPNOTSUPP;
 
 	list_for_each_entry_lockless(xattr, &evm_config_xattrnames, list) {
-		error = __vfs_getxattr(dentry, inode, xattr->name, NULL, 0);
+		error = __vfs_getxattr(dentry, inode, xattr->name, NULL, 0,
+				       XATTR_NOSECURITY);
 		if (error < 0) {
 			if (error == -ENODATA)
 				continue;
diff --git a/security/security.c b/security/security.c
index 1bc000f..cd2d18d 100644
--- a/security/security.c
+++ b/security/security.c
@@ -2404,3 +2404,30 @@ int security_locked_down(enum lockdown_reason what)
 	return call_int_hook(locked_down, 0, what);
 }
 EXPORT_SYMBOL(security_locked_down);
+
+#ifdef CONFIG_PERF_EVENTS
+int security_perf_event_open(struct perf_event_attr *attr, int type)
+{
+	return call_int_hook(perf_event_open, 0, attr, type);
+}
+
+int security_perf_event_alloc(struct perf_event *event)
+{
+	return call_int_hook(perf_event_alloc, 0, event);
+}
+
+void security_perf_event_free(struct perf_event *event)
+{
+	call_void_hook(perf_event_free, event);
+}
+
+int security_perf_event_read(struct perf_event *event)
+{
+	return call_int_hook(perf_event_read, 0, event);
+}
+
+int security_perf_event_write(struct perf_event *event)
+{
+	return call_int_hook(perf_event_write, 0, event);
+}
+#endif /* CONFIG_PERF_EVENTS */
diff --git a/security/selinux/Kconfig b/security/selinux/Kconfig
index 5711689..c9e576c 100644
--- a/security/selinux/Kconfig
+++ b/security/selinux/Kconfig
@@ -85,3 +85,15 @@
 	  via /selinux/checkreqprot if authorized by policy.
 
 	  If you are unsure how to answer this question, answer 0.
+
+config SECURITY_SELINUX_SIDTAB_HASH_BITS
+	int "NSA SELinux sidtab hashtable size"
+	depends on SECURITY_SELINUX
+	range 8 13
+	default 9
+	help
+	  This option sets the number of buckets used in the sidtab hashtable
+	  to 2^SECURITY_SELINUX_SIDTAB_HASH_BITS buckets. The number of hash
+	  collisions may be viewed at /sys/fs/selinux/ss/sidtab_hash_stats. If
+	  chain lengths are high (e.g. > 20) then selecting a higher value here
+	  will ensure that lookups times are short and stable.
diff --git a/security/selinux/avc.c b/security/selinux/avc.c
index d18cb32..3c05827 100644
--- a/security/selinux/avc.c
+++ b/security/selinux/avc.c
@@ -31,6 +31,9 @@
 #include "avc_ss.h"
 #include "classmap.h"
 
+#define CREATE_TRACE_POINTS
+#include <trace/events/avc.h>
+
 #define AVC_CACHE_SLOTS			512
 #define AVC_DEF_CACHE_THRESHOLD		512
 #define AVC_CACHE_RECLAIM		16
@@ -702,33 +705,37 @@ static void avc_audit_post_callback(struct audit_buffer *ab, void *a)
 {
 	struct common_audit_data *ad = a;
 	struct selinux_audit_data *sad = ad->selinux_audit_data;
-	char *scontext;
+	char *scontext = NULL;
+	char *tcontext = NULL;
+	const char *tclass = NULL;
 	u32 scontext_len;
+	u32 tcontext_len;
 	int rc;
 
 	rc = security_sid_to_context(sad->state, sad->ssid, &scontext,
 				     &scontext_len);
 	if (rc)
 		audit_log_format(ab, " ssid=%d", sad->ssid);
-	else {
+	else
 		audit_log_format(ab, " scontext=%s", scontext);
-		kfree(scontext);
-	}
 
-	rc = security_sid_to_context(sad->state, sad->tsid, &scontext,
-				     &scontext_len);
+	rc = security_sid_to_context(sad->state, sad->tsid, &tcontext,
+				     &tcontext_len);
 	if (rc)
 		audit_log_format(ab, " tsid=%d", sad->tsid);
-	else {
-		audit_log_format(ab, " tcontext=%s", scontext);
-		kfree(scontext);
-	}
+	else
+		audit_log_format(ab, " tcontext=%s", tcontext);
 
-	audit_log_format(ab, " tclass=%s", secclass_map[sad->tclass-1].name);
+	tclass = secclass_map[sad->tclass-1].name;
+	audit_log_format(ab, " tclass=%s", tclass);
 
 	if (sad->denied)
 		audit_log_format(ab, " permissive=%u", sad->result ? 0 : 1);
 
+	trace_selinux_audited(sad, scontext, tcontext, tclass);
+	kfree(tcontext);
+	kfree(scontext);
+
 	/* in case of invalid context report also the actual context string */
 	rc = security_sid_to_context_inval(sad->state, sad->ssid, &scontext,
 					   &scontext_len);
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index 717a398..461221c 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -554,7 +554,8 @@ static int sb_finish_set_opts(struct super_block *sb)
 			goto out;
 		}
 
-		rc = __vfs_getxattr(root, root_inode, XATTR_NAME_SELINUX, NULL, 0);
+		rc = __vfs_getxattr(root, root_inode, XATTR_NAME_SELINUX, NULL,
+				    0, XATTR_NOSECURITY);
 		if (rc < 0 && rc != -ENODATA) {
 			if (rc == -EOPNOTSUPP)
 				pr_warn("SELinux: (dev %s, type "
@@ -752,6 +753,7 @@ static int selinux_set_mnt_opts(struct super_block *sb,
 
 	if (!strcmp(sb->s_type->name, "debugfs") ||
 	    !strcmp(sb->s_type->name, "tracefs") ||
+	    !strcmp(sb->s_type->name, "binder") ||
 	    !strcmp(sb->s_type->name, "pstore"))
 		sbsec->flags |= SE_SBGENFS;
 
@@ -1380,12 +1382,14 @@ static int inode_doinit_use_xattr(struct inode *inode, struct dentry *dentry,
 		return -ENOMEM;
 
 	context[len] = '\0';
-	rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, context, len);
+	rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, context, len,
+			    XATTR_NOSECURITY);
 	if (rc == -ERANGE) {
 		kfree(context);
 
 		/* Need a larger buffer.  Query for the right size. */
-		rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, NULL, 0);
+		rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, NULL, 0,
+				    XATTR_NOSECURITY);
 		if (rc < 0)
 			return rc;
 
@@ -1396,7 +1400,7 @@ static int inode_doinit_use_xattr(struct inode *inode, struct dentry *dentry,
 
 		context[len] = '\0';
 		rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX,
-				    context, len);
+				    context, len, XATTR_NOSECURITY);
 	}
 	if (rc < 0) {
 		kfree(context);
@@ -6847,6 +6851,67 @@ struct lsm_blob_sizes selinux_blob_sizes __lsm_ro_after_init = {
 	.lbs_msg_msg = sizeof(struct msg_security_struct),
 };
 
+#ifdef CONFIG_PERF_EVENTS
+static int selinux_perf_event_open(struct perf_event_attr *attr, int type)
+{
+	u32 requested, sid = current_sid();
+
+	if (type == PERF_SECURITY_OPEN)
+		requested = PERF_EVENT__OPEN;
+	else if (type == PERF_SECURITY_CPU)
+		requested = PERF_EVENT__CPU;
+	else if (type == PERF_SECURITY_KERNEL)
+		requested = PERF_EVENT__KERNEL;
+	else if (type == PERF_SECURITY_TRACEPOINT)
+		requested = PERF_EVENT__TRACEPOINT;
+	else
+		return -EINVAL;
+
+	return avc_has_perm(&selinux_state, sid, sid, SECCLASS_PERF_EVENT,
+			    requested, NULL);
+}
+
+static int selinux_perf_event_alloc(struct perf_event *event)
+{
+	struct perf_event_security_struct *perfsec;
+
+	perfsec = kzalloc(sizeof(*perfsec), GFP_KERNEL);
+	if (!perfsec)
+		return -ENOMEM;
+
+	perfsec->sid = current_sid();
+	event->security = perfsec;
+
+	return 0;
+}
+
+static void selinux_perf_event_free(struct perf_event *event)
+{
+	struct perf_event_security_struct *perfsec = event->security;
+
+	event->security = NULL;
+	kfree(perfsec);
+}
+
+static int selinux_perf_event_read(struct perf_event *event)
+{
+	struct perf_event_security_struct *perfsec = event->security;
+	u32 sid = current_sid();
+
+	return avc_has_perm(&selinux_state, sid, perfsec->sid,
+			    SECCLASS_PERF_EVENT, PERF_EVENT__READ, NULL);
+}
+
+static int selinux_perf_event_write(struct perf_event *event)
+{
+	struct perf_event_security_struct *perfsec = event->security;
+	u32 sid = current_sid();
+
+	return avc_has_perm(&selinux_state, sid, perfsec->sid,
+			    SECCLASS_PERF_EVENT, PERF_EVENT__WRITE, NULL);
+}
+#endif
+
 static struct security_hook_list selinux_hooks[] __lsm_ro_after_init = {
 	LSM_HOOK_INIT(binder_set_context_mgr, selinux_binder_set_context_mgr),
 	LSM_HOOK_INIT(binder_transaction, selinux_binder_transaction),
@@ -7084,6 +7149,14 @@ static struct security_hook_list selinux_hooks[] __lsm_ro_after_init = {
 	LSM_HOOK_INIT(bpf_map_free_security, selinux_bpf_map_free),
 	LSM_HOOK_INIT(bpf_prog_free_security, selinux_bpf_prog_free),
 #endif
+
+#ifdef CONFIG_PERF_EVENTS
+	LSM_HOOK_INIT(perf_event_open, selinux_perf_event_open),
+	LSM_HOOK_INIT(perf_event_alloc, selinux_perf_event_alloc),
+	LSM_HOOK_INIT(perf_event_free, selinux_perf_event_free),
+	LSM_HOOK_INIT(perf_event_read, selinux_perf_event_read),
+	LSM_HOOK_INIT(perf_event_write, selinux_perf_event_write),
+#endif
 };
 
 static __init int selinux_init(void)
diff --git a/security/selinux/include/classmap.h b/security/selinux/include/classmap.h
index 32e9b03..562bd18 100644
--- a/security/selinux/include/classmap.h
+++ b/security/selinux/include/classmap.h
@@ -116,7 +116,7 @@ struct security_class_mapping secclass_map[] = {
 	  { COMMON_IPC_PERMS, NULL } },
 	{ "netlink_route_socket",
 	  { COMMON_SOCK_PERMS,
-	    "nlmsg_read", "nlmsg_write", NULL } },
+	    "nlmsg_read", "nlmsg_write", "nlmsg_readpriv", NULL } },
 	{ "netlink_tcpdiag_socket",
 	  { COMMON_SOCK_PERMS,
 	    "nlmsg_read", "nlmsg_write", NULL } },
@@ -244,6 +244,8 @@ struct security_class_mapping secclass_map[] = {
 	  {"map_create", "map_read", "map_write", "prog_load", "prog_run"} },
 	{ "xdp_socket",
 	  { COMMON_SOCK_PERMS, NULL } },
+	{ "perf_event",
+	  {"open", "cpu", "kernel", "tracepoint", "read", "write"} },
 	{ NULL }
   };
 
diff --git a/security/selinux/include/objsec.h b/security/selinux/include/objsec.h
index 586b7ab..a4a86cb 100644
--- a/security/selinux/include/objsec.h
+++ b/security/selinux/include/objsec.h
@@ -141,7 +141,11 @@ struct pkey_security_struct {
 };
 
 struct bpf_security_struct {
-	u32 sid;  /*SID of bpf obj creater*/
+	u32 sid;  /* SID of bpf obj creator */
+};
+
+struct perf_event_security_struct {
+	u32 sid;  /* SID of perf_event obj creator */
 };
 
 extern struct lsm_blob_sizes selinux_blob_sizes;
diff --git a/security/selinux/include/security.h b/security/selinux/include/security.h
index 1111212..6d60684 100644
--- a/security/selinux/include/security.h
+++ b/security/selinux/include/security.h
@@ -105,6 +105,7 @@ struct selinux_state {
 	bool checkreqprot;
 	bool initialized;
 	bool policycap[__POLICYDB_CAPABILITY_MAX];
+	bool android_netlink_route;
 	struct selinux_avc *avc;
 	struct selinux_ss *ss;
 };
@@ -177,6 +178,13 @@ static inline bool selinux_policycap_nnp_nosuid_transition(void)
 	return state->policycap[POLICYDB_CAPABILITY_NNP_NOSUID_TRANSITION];
 }
 
+static inline bool selinux_android_nlroute_getlink(void)
+{
+	struct selinux_state *state = &selinux_state;
+
+	return state->android_netlink_route;
+}
+
 int security_mls_enabled(struct selinux_state *state);
 int security_load_policy(struct selinux_state *state,
 			 void *data, size_t len);
@@ -394,5 +402,7 @@ extern int selinux_nlmsg_lookup(u16 sclass, u16 nlmsg_type, u32 *perm);
 extern void avtab_cache_init(void);
 extern void ebitmap_cache_init(void);
 extern void hashtab_cache_init(void);
+extern void selinux_nlmsg_init(void);
+extern int security_sidtab_hash_stats(struct selinux_state *state, char *page);
 
 #endif /* _SELINUX_SECURITY_H_ */
diff --git a/security/selinux/nlmsgtab.c b/security/selinux/nlmsgtab.c
index 58345ba..d1bec5a 100644
--- a/security/selinux/nlmsgtab.c
+++ b/security/selinux/nlmsgtab.c
@@ -25,7 +25,7 @@ struct nlmsg_perm {
 	u32	perm;
 };
 
-static const struct nlmsg_perm nlmsg_route_perms[] =
+static struct nlmsg_perm nlmsg_route_perms[] =
 {
 	{ RTM_NEWLINK,		NETLINK_ROUTE_SOCKET__NLMSG_WRITE },
 	{ RTM_DELLINK,		NETLINK_ROUTE_SOCKET__NLMSG_WRITE },
@@ -206,3 +206,27 @@ int selinux_nlmsg_lookup(u16 sclass, u16 nlmsg_type, u32 *perm)
 
 	return err;
 }
+
+static void nlmsg_set_getlink_perm(u32 perm)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(nlmsg_route_perms); i++) {
+		if (nlmsg_route_perms[i].nlmsg_type == RTM_GETLINK) {
+			nlmsg_route_perms[i].perm = perm;
+			break;
+		}
+	}
+}
+
+/**
+ * Use nlmsg_readpriv as the permission for RTM_GETLINK messages if the
+ * netlink_route_getlink policy capability is set. Otherwise use nlmsg_read.
+ */
+void selinux_nlmsg_init(void)
+{
+	if (selinux_android_nlroute_getlink())
+		nlmsg_set_getlink_perm(NETLINK_ROUTE_SOCKET__NLMSG_READPRIV);
+	else
+		nlmsg_set_getlink_perm(NETLINK_ROUTE_SOCKET__NLMSG_READ);
+}
diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c
index e9eaff9..5df5e71 100644
--- a/security/selinux/selinuxfs.c
+++ b/security/selinux/selinuxfs.c
@@ -1486,6 +1486,32 @@ static ssize_t sel_read_avc_hash_stats(struct file *filp, char __user *buf,
 	return length;
 }
 
+static ssize_t sel_read_sidtab_hash_stats(struct file *filp, char __user *buf,
+					size_t count, loff_t *ppos)
+{
+	struct selinux_fs_info *fsi = file_inode(filp)->i_sb->s_fs_info;
+	struct selinux_state *state = fsi->state;
+	char *page;
+	ssize_t length;
+
+	page = (char *)__get_free_page(GFP_KERNEL);
+	if (!page)
+		return -ENOMEM;
+
+	length = security_sidtab_hash_stats(state, page);
+	if (length >= 0)
+		length = simple_read_from_buffer(buf, count, ppos, page,
+						length);
+	free_page((unsigned long)page);
+
+	return length;
+}
+
+static const struct file_operations sel_sidtab_hash_stats_ops = {
+	.read		= sel_read_sidtab_hash_stats,
+	.llseek		= generic_file_llseek,
+};
+
 static const struct file_operations sel_avc_cache_threshold_ops = {
 	.read		= sel_read_avc_cache_threshold,
 	.write		= sel_write_avc_cache_threshold,
@@ -1604,6 +1630,37 @@ static int sel_make_avc_files(struct dentry *dir)
 	return 0;
 }
 
+static int sel_make_ss_files(struct dentry *dir)
+{
+	struct super_block *sb = dir->d_sb;
+	struct selinux_fs_info *fsi = sb->s_fs_info;
+	int i;
+	static struct tree_descr files[] = {
+		{ "sidtab_hash_stats", &sel_sidtab_hash_stats_ops, S_IRUGO },
+	};
+
+	for (i = 0; i < ARRAY_SIZE(files); i++) {
+		struct inode *inode;
+		struct dentry *dentry;
+
+		dentry = d_alloc_name(dir, files[i].name);
+		if (!dentry)
+			return -ENOMEM;
+
+		inode = sel_make_inode(dir->d_sb, S_IFREG|files[i].mode);
+		if (!inode) {
+			dput(dentry);
+			return -ENOMEM;
+		}
+
+		inode->i_fop = files[i].ops;
+		inode->i_ino = ++fsi->last_ino;
+		d_add(dentry, inode);
+	}
+
+	return 0;
+}
+
 static ssize_t sel_read_initcon(struct file *file, char __user *buf,
 				size_t count, loff_t *ppos)
 {
@@ -1968,6 +2025,14 @@ static int sel_fill_super(struct super_block *sb, struct fs_context *fc)
 	}
 
 	ret = sel_make_avc_files(dentry);
+
+	dentry = sel_make_dir(sb->s_root, "ss", &fsi->last_ino);
+	if (IS_ERR(dentry)) {
+		ret = PTR_ERR(dentry);
+		goto err;
+	}
+
+	ret = sel_make_ss_files(dentry);
 	if (ret)
 		goto err;
 
diff --git a/security/selinux/ss/context.h b/security/selinux/ss/context.h
index 2260c44..69fd194 100644
--- a/security/selinux/ss/context.h
+++ b/security/selinux/ss/context.h
@@ -31,6 +31,7 @@ struct context {
 	u32 len;        /* length of string in bytes */
 	struct mls_range range;
 	char *str;	/* string representation if context cannot be mapped. */
+	u32 hash;	/* a hash of the string representation */
 };
 
 static inline void mls_context_init(struct context *c)
@@ -136,12 +137,13 @@ static inline int context_cpy(struct context *dst, struct context *src)
 		kfree(dst->str);
 		return rc;
 	}
+	dst->hash = src->hash;
 	return 0;
 }
 
 static inline void context_destroy(struct context *c)
 {
-	c->user = c->role = c->type = 0;
+	c->user = c->role = c->type = c->hash = 0;
 	kfree(c->str);
 	c->str = NULL;
 	c->len = 0;
@@ -150,6 +152,8 @@ static inline void context_destroy(struct context *c)
 
 static inline int context_cmp(struct context *c1, struct context *c2)
 {
+	if (c1->hash && c2->hash && (c1->hash != c2->hash))
+		return 0;
 	if (c1->len && c2->len)
 		return (c1->len == c2->len && !strcmp(c1->str, c2->str));
 	if (c1->len || c2->len)
@@ -160,5 +164,10 @@ static inline int context_cmp(struct context *c1, struct context *c2)
 		mls_context_cmp(c1, c2));
 }
 
+static inline unsigned int context_compute_hash(const char *s)
+{
+	return full_name_hash(NULL, s, strlen(s));
+}
+
 #endif	/* _SS_CONTEXT_H_ */
 
diff --git a/security/selinux/ss/policydb.c b/security/selinux/ss/policydb.c
index dd7aabd..99a2077 100644
--- a/security/selinux/ss/policydb.c
+++ b/security/selinux/ss/policydb.c
@@ -873,6 +873,11 @@ int policydb_load_isids(struct policydb *p, struct sidtab *s)
 			sidtab_destroy(s);
 			goto out;
 		}
+		rc = context_add_hash(p, &c->context[0]);
+		if (rc) {
+			sidtab_destroy(s);
+			goto out;
+		}
 
 		rc = sidtab_set_initial(s, c->sid[0], &c->context[0]);
 		if (rc) {
@@ -2344,6 +2349,10 @@ int policydb_read(struct policydb *p, void *fp)
 	p->reject_unknown = !!(le32_to_cpu(buf[1]) & REJECT_UNKNOWN);
 	p->allow_unknown = !!(le32_to_cpu(buf[1]) & ALLOW_UNKNOWN);
 
+	if ((le32_to_cpu(buf[1]) & POLICYDB_CONFIG_ANDROID_NETLINK_ROUTE)) {
+		p->android_netlink_route = 1;
+	}
+
 	if (p->policyvers >= POLICYDB_VERSION_POLCAP) {
 		rc = ebitmap_read(&p->policycaps, fp);
 		if (rc)
diff --git a/security/selinux/ss/policydb.h b/security/selinux/ss/policydb.h
index 162d0e7..95fb360 100644
--- a/security/selinux/ss/policydb.h
+++ b/security/selinux/ss/policydb.h
@@ -234,6 +234,7 @@ struct genfs {
 /* The policy database */
 struct policydb {
 	int mls_enabled;
+	int android_netlink_route;
 
 	/* symbol tables */
 	struct symtab symtab[SYM_NUM];
@@ -320,6 +321,7 @@ extern int policydb_write(struct policydb *p, void *fp);
 #define PERM_SYMTAB_SIZE 32
 
 #define POLICYDB_CONFIG_MLS    1
+#define POLICYDB_CONFIG_ANDROID_NETLINK_ROUTE    (1 << 31)
 
 /* the config flags related to unknown classes/perms are bits 2 and 3 */
 #define REJECT_UNKNOWN	0x00000002
diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c
index f62adf3..5199dd3 100644
--- a/security/selinux/ss/services.c
+++ b/security/selinux/ss/services.c
@@ -1257,6 +1257,23 @@ static int context_struct_to_string(struct policydb *p,
 
 #include "initial_sid_to_string.h"
 
+int security_sidtab_hash_stats(struct selinux_state *state, char *page)
+{
+	int rc;
+
+	if (!state->initialized) {
+		pr_err("SELinux: %s:  called before initial load_policy\n",
+		       __func__);
+		return -EINVAL;
+	}
+
+	read_lock(&state->ss->policy_rwlock);
+	rc = sidtab_hash_stats(state->ss->sidtab, page);
+	read_unlock(&state->ss->policy_rwlock);
+
+	return rc;
+}
+
 const char *security_get_initial_sid_context(u32 sid)
 {
 	if (unlikely(sid > SECINITSID_NUM))
@@ -1449,6 +1466,42 @@ static int string_to_context_struct(struct policydb *pol,
 	return rc;
 }
 
+int context_add_hash(struct policydb *policydb,
+		     struct context *context)
+{
+	int rc;
+	char *str;
+	int len;
+
+	if (context->str) {
+		context->hash = context_compute_hash(context->str);
+	} else {
+		rc = context_struct_to_string(policydb, context,
+					      &str, &len);
+		if (rc)
+			return rc;
+		context->hash = context_compute_hash(str);
+		kfree(str);
+	}
+	return 0;
+}
+
+static int context_struct_to_sid(struct selinux_state *state,
+				 struct context *context, u32 *sid)
+{
+	int rc;
+	struct sidtab *sidtab = state->ss->sidtab;
+	struct policydb *policydb = &state->ss->policydb;
+
+	if (!context->hash) {
+		rc = context_add_hash(policydb, context);
+		if (rc)
+			return rc;
+	}
+
+	return sidtab_context_to_sid(sidtab, context, sid);
+}
+
 static int security_context_to_sid_core(struct selinux_state *state,
 					const char *scontext, u32 scontext_len,
 					u32 *sid, u32 def_sid, gfp_t gfp_flags,
@@ -1501,7 +1554,7 @@ static int security_context_to_sid_core(struct selinux_state *state,
 		str = NULL;
 	} else if (rc)
 		goto out_unlock;
-	rc = sidtab_context_to_sid(sidtab, &context, sid);
+	rc = context_struct_to_sid(state, &context, sid);
 	context_destroy(&context);
 out_unlock:
 	read_unlock(&state->ss->policy_rwlock);
@@ -1805,7 +1858,7 @@ static int security_compute_sid(struct selinux_state *state,
 			goto out_unlock;
 	}
 	/* Obtain the sid for the context. */
-	rc = sidtab_context_to_sid(sidtab, &newcontext, out_sid);
+	rc = context_struct_to_sid(state, &newcontext, out_sid);
 out_unlock:
 	read_unlock(&state->ss->policy_rwlock);
 	context_destroy(&newcontext);
@@ -1957,6 +2010,7 @@ static int convert_context(struct context *oldc, struct context *newc, void *p)
 			context_init(newc);
 			newc->str = s;
 			newc->len = oldc->len;
+			newc->hash = oldc->hash;
 			return 0;
 		}
 		kfree(s);
@@ -2033,6 +2087,10 @@ static int convert_context(struct context *oldc, struct context *newc, void *p)
 			goto bad;
 	}
 
+	rc = context_add_hash(args->newp, newc);
+	if (rc)
+		goto bad;
+
 	return 0;
 bad:
 	/* Map old representation to string and save it. */
@@ -2042,6 +2100,7 @@ static int convert_context(struct context *oldc, struct context *newc, void *p)
 	context_destroy(newc);
 	newc->str = s;
 	newc->len = len;
+	newc->hash = context_compute_hash(s);
 	pr_info("SELinux:  Context %s became invalid (unmapped).\n",
 		newc->str);
 	return 0;
@@ -2066,6 +2125,9 @@ static void security_load_policycaps(struct selinux_state *state)
 			pr_info("SELinux:  unknown policy capability %u\n",
 				i);
 	}
+
+	state->android_netlink_route = p->android_netlink_route;
+	selinux_nlmsg_init();
 }
 
 static int security_preserve_bools(struct selinux_state *state,
@@ -2280,8 +2342,7 @@ int security_port_sid(struct selinux_state *state,
 
 	if (c) {
 		if (!c->sid[0]) {
-			rc = sidtab_context_to_sid(sidtab,
-						   &c->context[0],
+			rc = context_struct_to_sid(state, &c->context[0],
 						   &c->sid[0]);
 			if (rc)
 				goto out;
@@ -2306,14 +2367,12 @@ int security_ib_pkey_sid(struct selinux_state *state,
 			 u64 subnet_prefix, u16 pkey_num, u32 *out_sid)
 {
 	struct policydb *policydb;
-	struct sidtab *sidtab;
 	struct ocontext *c;
 	int rc = 0;
 
 	read_lock(&state->ss->policy_rwlock);
 
 	policydb = &state->ss->policydb;
-	sidtab = state->ss->sidtab;
 
 	c = policydb->ocontexts[OCON_IBPKEY];
 	while (c) {
@@ -2327,7 +2386,7 @@ int security_ib_pkey_sid(struct selinux_state *state,
 
 	if (c) {
 		if (!c->sid[0]) {
-			rc = sidtab_context_to_sid(sidtab,
+			rc = context_struct_to_sid(state,
 						   &c->context[0],
 						   &c->sid[0]);
 			if (rc)
@@ -2374,8 +2433,7 @@ int security_ib_endport_sid(struct selinux_state *state,
 
 	if (c) {
 		if (!c->sid[0]) {
-			rc = sidtab_context_to_sid(sidtab,
-						   &c->context[0],
+			rc = context_struct_to_sid(state, &c->context[0],
 						   &c->sid[0]);
 			if (rc)
 				goto out;
@@ -2416,13 +2474,11 @@ int security_netif_sid(struct selinux_state *state,
 
 	if (c) {
 		if (!c->sid[0] || !c->sid[1]) {
-			rc = sidtab_context_to_sid(sidtab,
-						  &c->context[0],
-						  &c->sid[0]);
+			rc = context_struct_to_sid(state, &c->context[0],
+						   &c->sid[0]);
 			if (rc)
 				goto out;
-			rc = sidtab_context_to_sid(sidtab,
-						   &c->context[1],
+			rc = context_struct_to_sid(state, &c->context[1],
 						   &c->sid[1]);
 			if (rc)
 				goto out;
@@ -2463,14 +2519,12 @@ int security_node_sid(struct selinux_state *state,
 		      u32 *out_sid)
 {
 	struct policydb *policydb;
-	struct sidtab *sidtab;
 	int rc;
 	struct ocontext *c;
 
 	read_lock(&state->ss->policy_rwlock);
 
 	policydb = &state->ss->policydb;
-	sidtab = state->ss->sidtab;
 
 	switch (domain) {
 	case AF_INET: {
@@ -2512,7 +2566,7 @@ int security_node_sid(struct selinux_state *state,
 
 	if (c) {
 		if (!c->sid[0]) {
-			rc = sidtab_context_to_sid(sidtab,
+			rc = context_struct_to_sid(state,
 						   &c->context[0],
 						   &c->sid[0]);
 			if (rc)
@@ -2596,12 +2650,17 @@ int security_get_user_sids(struct selinux_state *state,
 		usercon.role = i + 1;
 		ebitmap_for_each_positive_bit(&role->types, tnode, j) {
 			usercon.type = j + 1;
+			/*
+			 * The same context struct is reused here so the hash
+			 * must be reset.
+			 */
+			usercon.hash = 0;
 
 			if (mls_setup_user_range(policydb, fromcon, user,
 						 &usercon))
 				continue;
 
-			rc = sidtab_context_to_sid(sidtab, &usercon, &sid);
+			rc = context_struct_to_sid(state, &usercon, &sid);
 			if (rc)
 				goto out_unlock;
 			if (mynel < maxnel) {
@@ -2672,7 +2731,6 @@ static inline int __security_genfs_sid(struct selinux_state *state,
 				       u32 *sid)
 {
 	struct policydb *policydb = &state->ss->policydb;
-	struct sidtab *sidtab = state->ss->sidtab;
 	int len;
 	u16 sclass;
 	struct genfs *genfs;
@@ -2707,7 +2765,7 @@ static inline int __security_genfs_sid(struct selinux_state *state,
 		goto out;
 
 	if (!c->sid[0]) {
-		rc = sidtab_context_to_sid(sidtab, &c->context[0], &c->sid[0]);
+		rc = context_struct_to_sid(state, &c->context[0], &c->sid[0]);
 		if (rc)
 			goto out;
 	}
@@ -2770,7 +2828,7 @@ int security_fs_use(struct selinux_state *state, struct super_block *sb)
 	if (c) {
 		sbsec->behavior = c->v.behavior;
 		if (!c->sid[0]) {
-			rc = sidtab_context_to_sid(sidtab, &c->context[0],
+			rc = context_struct_to_sid(state, &c->context[0],
 						   &c->sid[0]);
 			if (rc)
 				goto out;
@@ -3030,8 +3088,7 @@ int security_sid_mls_copy(struct selinux_state *state,
 			goto out_unlock;
 		}
 	}
-
-	rc = sidtab_context_to_sid(sidtab, &newcon, new_sid);
+	rc = context_struct_to_sid(state, &newcon, new_sid);
 out_unlock:
 	read_unlock(&state->ss->policy_rwlock);
 	context_destroy(&newcon);
@@ -3624,7 +3681,7 @@ int security_netlbl_secattr_to_sid(struct selinux_state *state,
 		if (!mls_context_isvalid(policydb, &ctx_new))
 			goto out_free;
 
-		rc = sidtab_context_to_sid(sidtab, &ctx_new, sid);
+		rc = context_struct_to_sid(state, &ctx_new, sid);
 		if (rc)
 			goto out_free;
 
diff --git a/security/selinux/ss/services.h b/security/selinux/ss/services.h
index 9a36de8..fc40640 100644
--- a/security/selinux/ss/services.h
+++ b/security/selinux/ss/services.h
@@ -8,7 +8,7 @@
 #define _SS_SERVICES_H_
 
 #include "policydb.h"
-#include "sidtab.h"
+#include "context.h"
 
 /* Mapping for a single class */
 struct selinux_mapping {
@@ -39,4 +39,6 @@ void services_compute_xperms_drivers(struct extended_perms *xperms,
 void services_compute_xperms_decision(struct extended_perms_decision *xpermd,
 					struct avtab_node *node);
 
+int context_add_hash(struct policydb *policydb, struct context *context);
+
 #endif	/* _SS_SERVICES_H_ */
diff --git a/security/selinux/ss/sidtab.c b/security/selinux/ss/sidtab.c
index 7d49994..d9d8599 100644
--- a/security/selinux/ss/sidtab.c
+++ b/security/selinux/ss/sidtab.c
@@ -17,26 +17,43 @@
 #include "security.h"
 #include "sidtab.h"
 
+#define index_to_sid(index) (index + SECINITSID_NUM + 1)
+#define sid_to_index(sid) (sid - (SECINITSID_NUM + 1))
+
 int sidtab_init(struct sidtab *s)
 {
 	u32 i;
 
 	memset(s->roots, 0, sizeof(s->roots));
 
-	/* max count is SIDTAB_MAX so valid index is always < SIDTAB_MAX */
-	for (i = 0; i < SIDTAB_RCACHE_SIZE; i++)
-		s->rcache[i] = SIDTAB_MAX;
-
 	for (i = 0; i < SECINITSID_NUM; i++)
 		s->isids[i].set = 0;
 
 	s->count = 0;
 	s->convert = NULL;
+	hash_init(s->context_to_sid);
 
 	spin_lock_init(&s->lock);
 	return 0;
 }
 
+static u32 context_to_sid(struct sidtab *s, struct context *context)
+{
+	struct sidtab_entry_leaf *entry;
+	u32 sid = 0;
+
+	rcu_read_lock();
+	hash_for_each_possible_rcu(s->context_to_sid, entry, list,
+				   context->hash) {
+		if (context_cmp(&entry->context, context)) {
+			sid = entry->sid;
+			break;
+		}
+	}
+	rcu_read_unlock();
+	return sid;
+}
+
 int sidtab_set_initial(struct sidtab *s, u32 sid, struct context *context)
 {
 	struct sidtab_isid_entry *entry;
@@ -47,14 +64,60 @@ int sidtab_set_initial(struct sidtab *s, u32 sid, struct context *context)
 
 	entry = &s->isids[sid - 1];
 
-	rc = context_cpy(&entry->context, context);
+	rc = context_cpy(&entry->leaf.context, context);
 	if (rc)
 		return rc;
 
 	entry->set = 1;
+
+	/*
+	 * Multiple initial sids may map to the same context. Check that this
+	 * context is not already represented in the context_to_sid hashtable
+	 * to avoid duplicate entries and long linked lists upon hash
+	 * collision.
+	 */
+	if (!context_to_sid(s, context)) {
+		entry->leaf.sid = sid;
+		hash_add(s->context_to_sid, &entry->leaf.list, context->hash);
+	}
+
 	return 0;
 }
 
+int sidtab_hash_stats(struct sidtab *sidtab, char *page)
+{
+	int i;
+	int chain_len = 0;
+	int slots_used = 0;
+	int entries = 0;
+	int max_chain_len = 0;
+	int cur_bucket = 0;
+	struct sidtab_entry_leaf *entry;
+
+	rcu_read_lock();
+	hash_for_each_rcu(sidtab->context_to_sid, i, entry, list) {
+		entries++;
+		if (i == cur_bucket) {
+			chain_len++;
+			if (chain_len == 1)
+				slots_used++;
+		} else {
+			cur_bucket = i;
+			if (chain_len > max_chain_len)
+				max_chain_len = chain_len;
+			chain_len = 0;
+		}
+	}
+	rcu_read_unlock();
+
+	if (chain_len > max_chain_len)
+		max_chain_len = chain_len;
+
+	return scnprintf(page, PAGE_SIZE, "entries: %d\nbuckets used: %d/%d\n"
+			 "longest chain: %d\n", entries,
+			 slots_used, SIDTAB_HASH_BUCKETS, max_chain_len);
+}
+
 static u32 sidtab_level_from_count(u32 count)
 {
 	u32 capacity = SIDTAB_LEAF_ENTRIES;
@@ -88,7 +151,8 @@ static int sidtab_alloc_roots(struct sidtab *s, u32 level)
 	return 0;
 }
 
-static struct context *sidtab_do_lookup(struct sidtab *s, u32 index, int alloc)
+static struct sidtab_entry_leaf *sidtab_do_lookup(struct sidtab *s, u32 index,
+						  int alloc)
 {
 	union sidtab_entry_inner *entry;
 	u32 level, capacity_shift, leaf_index = index / SIDTAB_LEAF_ENTRIES;
@@ -125,7 +189,7 @@ static struct context *sidtab_do_lookup(struct sidtab *s, u32 index, int alloc)
 		if (!entry->ptr_leaf)
 			return NULL;
 	}
-	return &entry->ptr_leaf->entries[index % SIDTAB_LEAF_ENTRIES].context;
+	return &entry->ptr_leaf->entries[index % SIDTAB_LEAF_ENTRIES];
 }
 
 static struct context *sidtab_lookup(struct sidtab *s, u32 index)
@@ -136,12 +200,12 @@ static struct context *sidtab_lookup(struct sidtab *s, u32 index)
 	if (index >= count)
 		return NULL;
 
-	return sidtab_do_lookup(s, index, 0);
+	return &sidtab_do_lookup(s, index, 0)->context;
 }
 
 static struct context *sidtab_lookup_initial(struct sidtab *s, u32 sid)
 {
-	return s->isids[sid - 1].set ? &s->isids[sid - 1].context : NULL;
+	return s->isids[sid - 1].set ? &s->isids[sid - 1].leaf.context : NULL;
 }
 
 static struct context *sidtab_search_core(struct sidtab *s, u32 sid, int force)
@@ -150,7 +214,7 @@ static struct context *sidtab_search_core(struct sidtab *s, u32 sid, int force)
 
 	if (sid != 0) {
 		if (sid > SECINITSID_NUM)
-			context = sidtab_lookup(s, sid - (SECINITSID_NUM + 1));
+			context = sidtab_lookup(s, sid_to_index(sid));
 		else
 			context = sidtab_lookup_initial(s, sid);
 		if (context && (!context->len || force))
@@ -170,117 +234,30 @@ struct context *sidtab_search_force(struct sidtab *s, u32 sid)
 	return sidtab_search_core(s, sid, 1);
 }
 
-static int sidtab_find_context(union sidtab_entry_inner entry,
-			       u32 *pos, u32 count, u32 level,
-			       struct context *context, u32 *index)
-{
-	int rc;
-	u32 i;
-
-	if (level != 0) {
-		struct sidtab_node_inner *node = entry.ptr_inner;
-
-		i = 0;
-		while (i < SIDTAB_INNER_ENTRIES && *pos < count) {
-			rc = sidtab_find_context(node->entries[i],
-						 pos, count, level - 1,
-						 context, index);
-			if (rc == 0)
-				return 0;
-			i++;
-		}
-	} else {
-		struct sidtab_node_leaf *node = entry.ptr_leaf;
-
-		i = 0;
-		while (i < SIDTAB_LEAF_ENTRIES && *pos < count) {
-			if (context_cmp(&node->entries[i].context, context)) {
-				*index = *pos;
-				return 0;
-			}
-			(*pos)++;
-			i++;
-		}
-	}
-	return -ENOENT;
-}
-
-static void sidtab_rcache_update(struct sidtab *s, u32 index, u32 pos)
-{
-	while (pos > 0) {
-		WRITE_ONCE(s->rcache[pos], READ_ONCE(s->rcache[pos - 1]));
-		--pos;
-	}
-	WRITE_ONCE(s->rcache[0], index);
-}
-
-static void sidtab_rcache_push(struct sidtab *s, u32 index)
-{
-	sidtab_rcache_update(s, index, SIDTAB_RCACHE_SIZE - 1);
-}
-
-static int sidtab_rcache_search(struct sidtab *s, struct context *context,
-				u32 *index)
-{
-	u32 i;
-
-	for (i = 0; i < SIDTAB_RCACHE_SIZE; i++) {
-		u32 v = READ_ONCE(s->rcache[i]);
-
-		if (v >= SIDTAB_MAX)
-			continue;
-
-		if (context_cmp(sidtab_do_lookup(s, v, 0), context)) {
-			sidtab_rcache_update(s, v, i);
-			*index = v;
-			return 0;
-		}
-	}
-	return -ENOENT;
-}
-
-static int sidtab_reverse_lookup(struct sidtab *s, struct context *context,
-				 u32 *index)
+int sidtab_context_to_sid(struct sidtab *s, struct context *context,
+			  u32 *sid)
 {
 	unsigned long flags;
-	u32 count, count_locked, level, pos;
+	u32 count;
 	struct sidtab_convert_params *convert;
-	struct context *dst, *dst_convert;
+	struct sidtab_entry_leaf *dst, *dst_convert;
 	int rc;
 
-	rc = sidtab_rcache_search(s, context, index);
-	if (rc == 0)
+	*sid = context_to_sid(s, context);
+	if (*sid)
 		return 0;
 
-	/* read entries only after reading count */
-	count = smp_load_acquire(&s->count);
-	level = sidtab_level_from_count(count);
-
-	pos = 0;
-	rc = sidtab_find_context(s->roots[level], &pos, count, level,
-				 context, index);
-	if (rc == 0) {
-		sidtab_rcache_push(s, *index);
-		return 0;
-	}
-
 	/* lock-free search failed: lock, re-search, and insert if not found */
 	spin_lock_irqsave(&s->lock, flags);
 
-	convert = s->convert;
-	count_locked = s->count;
-	level = sidtab_level_from_count(count_locked);
+	rc = 0;
+	*sid = context_to_sid(s, context);
+	if (*sid)
+		goto out_unlock;
 
-	/* if count has changed before we acquired the lock, then catch up */
-	while (count < count_locked) {
-		if (context_cmp(sidtab_do_lookup(s, count, 0), context)) {
-			sidtab_rcache_push(s, count);
-			*index = count;
-			rc = 0;
-			goto out_unlock;
-		}
-		++count;
-	}
+	/* read entries only after reading count */
+	count = smp_load_acquire(&s->count);
+	convert = s->convert;
 
 	/* bail out if we already reached max entries */
 	rc = -EOVERFLOW;
@@ -293,7 +270,9 @@ static int sidtab_reverse_lookup(struct sidtab *s, struct context *context,
 	if (!dst)
 		goto out_unlock;
 
-	rc = context_cpy(dst, context);
+	dst->sid = index_to_sid(count);
+
+	rc = context_cpy(&dst->context, context);
 	if (rc)
 		goto out_unlock;
 
@@ -305,29 +284,32 @@ static int sidtab_reverse_lookup(struct sidtab *s, struct context *context,
 		rc = -ENOMEM;
 		dst_convert = sidtab_do_lookup(convert->target, count, 1);
 		if (!dst_convert) {
-			context_destroy(dst);
+			context_destroy(&dst->context);
 			goto out_unlock;
 		}
 
-		rc = convert->func(context, dst_convert, convert->args);
+		rc = convert->func(context, &dst_convert->context,
+				convert->args);
 		if (rc) {
-			context_destroy(dst);
+			context_destroy(&dst->context);
 			goto out_unlock;
 		}
-
-		/* at this point we know the insert won't fail */
+		dst_convert->sid = index_to_sid(count);
 		convert->target->count = count + 1;
+
+		hash_add_rcu(convert->target->context_to_sid,
+				&dst_convert->list, dst_convert->context.hash);
 	}
 
 	if (context->len)
 		pr_info("SELinux:  Context %s is not valid (left unmapped).\n",
 			context->str);
 
-	sidtab_rcache_push(s, count);
-	*index = count;
+	*sid = index_to_sid(count);
 
-	/* write entries before writing new count */
+	/* write entries before updating count */
 	smp_store_release(&s->count, count + 1);
+	hash_add_rcu(s->context_to_sid, &dst->list, dst->context.hash);
 
 	rc = 0;
 out_unlock:
@@ -335,25 +317,19 @@ static int sidtab_reverse_lookup(struct sidtab *s, struct context *context,
 	return rc;
 }
 
-int sidtab_context_to_sid(struct sidtab *s, struct context *context, u32 *sid)
+static void sidtab_convert_hashtable(struct sidtab *s, u32 count)
 {
-	int rc;
+	struct sidtab_entry_leaf *entry;
 	u32 i;
 
-	for (i = 0; i < SECINITSID_NUM; i++) {
-		struct sidtab_isid_entry *entry = &s->isids[i];
+	for (i = 0; i < count; i++) {
+		entry = sidtab_do_lookup(s, i, 0);
+		entry->sid = index_to_sid(i);
 
-		if (entry->set && context_cmp(context, &entry->context)) {
-			*sid = i + 1;
-			return 0;
-		}
+		hash_add_rcu(s->context_to_sid, &entry->list,
+				entry->context.hash);
+
 	}
-
-	rc = sidtab_reverse_lookup(s, context, sid);
-	if (rc)
-		return rc;
-	*sid += SECINITSID_NUM + 1;
-	return 0;
 }
 
 static int sidtab_convert_tree(union sidtab_entry_inner *edst,
@@ -400,6 +376,7 @@ static int sidtab_convert_tree(union sidtab_entry_inner *edst,
 		}
 		cond_resched();
 	}
+
 	return 0;
 }
 
@@ -435,7 +412,7 @@ int sidtab_convert(struct sidtab *s, struct sidtab_convert_params *params)
 	/* enable live convert of new entries */
 	s->convert = params;
 
-	/* we can safely do the rest of the conversion outside the lock */
+	/* we can safely convert the tree outside the lock */
 	spin_unlock_irqrestore(&s->lock, flags);
 
 	pr_info("SELinux:  Converting %u SID table entries...\n", count);
@@ -449,8 +426,17 @@ int sidtab_convert(struct sidtab *s, struct sidtab_convert_params *params)
 		spin_lock_irqsave(&s->lock, flags);
 		s->convert = NULL;
 		spin_unlock_irqrestore(&s->lock, flags);
+		return rc;
 	}
-	return rc;
+	/*
+	 * The hashtable can also be modified in sidtab_context_to_sid()
+	 * so we must re-acquire the lock here.
+	 */
+	spin_lock_irqsave(&s->lock, flags);
+	sidtab_convert_hashtable(params->target, count);
+	spin_unlock_irqrestore(&s->lock, flags);
+
+	return 0;
 }
 
 static void sidtab_destroy_tree(union sidtab_entry_inner entry, u32 level)
@@ -484,11 +470,16 @@ void sidtab_destroy(struct sidtab *s)
 
 	for (i = 0; i < SECINITSID_NUM; i++)
 		if (s->isids[i].set)
-			context_destroy(&s->isids[i].context);
+			context_destroy(&s->isids[i].leaf.context);
 
 	level = SIDTAB_MAX_LEVEL;
 	while (level && !s->roots[level].ptr_inner)
 		--level;
 
 	sidtab_destroy_tree(s->roots[level], level);
+	/*
+	 * The context_to_sid hashtable's objects are all shared
+	 * with the isids array and context tree, and so don't need
+	 * to be cleaned up here.
+	 */
 }
diff --git a/security/selinux/ss/sidtab.h b/security/selinux/ss/sidtab.h
index 1f47631..e280940 100644
--- a/security/selinux/ss/sidtab.h
+++ b/security/selinux/ss/sidtab.h
@@ -13,11 +13,14 @@
 
 #include <linux/spinlock_types.h>
 #include <linux/log2.h>
+#include <linux/hashtable.h>
 
 #include "context.h"
 
 struct sidtab_entry_leaf {
+	u32 sid;
 	struct context context;
+	struct hlist_node list;
 };
 
 struct sidtab_node_inner;
@@ -57,7 +60,7 @@ struct sidtab_node_inner {
 
 struct sidtab_isid_entry {
 	int set;
-	struct context context;
+	struct sidtab_entry_leaf leaf;
 };
 
 struct sidtab_convert_params {
@@ -66,7 +69,8 @@ struct sidtab_convert_params {
 	struct sidtab *target;
 };
 
-#define SIDTAB_RCACHE_SIZE 3
+#define SIDTAB_HASH_BITS CONFIG_SECURITY_SELINUX_SIDTAB_HASH_BITS
+#define SIDTAB_HASH_BUCKETS (1 << SIDTAB_HASH_BITS)
 
 struct sidtab {
 	/*
@@ -83,11 +87,11 @@ struct sidtab {
 	struct sidtab_convert_params *convert;
 	spinlock_t lock;
 
-	/* reverse lookup cache - access atomically via {READ|WRITE}_ONCE() */
-	u32 rcache[SIDTAB_RCACHE_SIZE];
-
 	/* index == SID - 1 (no entry for SECSID_NULL) */
 	struct sidtab_isid_entry isids[SECINITSID_NUM];
+
+	/* Hash table for fast reverse context-to-sid lookups. */
+	DECLARE_HASHTABLE(context_to_sid, SIDTAB_HASH_BITS);
 };
 
 int sidtab_init(struct sidtab *s);
@@ -101,6 +105,8 @@ int sidtab_context_to_sid(struct sidtab *s, struct context *context, u32 *sid);
 
 void sidtab_destroy(struct sidtab *s);
 
+int sidtab_hash_stats(struct sidtab *sidtab, char *page);
+
 #endif	/* _SS_SIDTAB_H_ */
 
 
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
index 12c0fa8..302bec7 100644
--- a/security/smack/smack_lsm.c
+++ b/security/smack/smack_lsm.c
@@ -290,7 +290,8 @@ static struct smack_known *smk_fetch(const char *name, struct inode *ip,
 	if (buffer == NULL)
 		return ERR_PTR(-ENOMEM);
 
-	rc = __vfs_getxattr(dp, ip, name, buffer, SMK_LONGLABEL);
+	rc = __vfs_getxattr(dp, ip, name, buffer, SMK_LONGLABEL,
+			    XATTR_NOSECURITY);
 	if (rc < 0)
 		skp = ERR_PTR(rc);
 	else if (rc == 0)
@@ -3428,7 +3429,7 @@ static void smack_d_instantiate(struct dentry *opt_dentry, struct inode *inode)
 			} else {
 				rc = __vfs_getxattr(dp, inode,
 					XATTR_NAME_SMACKTRANSMUTE, trattr,
-					TRANS_TRUE_SIZE);
+					TRANS_TRUE_SIZE, XATTR_NOSECURITY);
 				if (rc >= 0 && strncmp(trattr, TRANS_TRUE,
 						       TRANS_TRUE_SIZE) != 0)
 					rc = -EINVAL;
diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
index 1662573..816d665 100644
--- a/sound/core/pcm_lib.c
+++ b/sound/core/pcm_lib.c
@@ -2051,6 +2051,8 @@ static int pcm_sanity_check(struct snd_pcm_substream *substream)
 	struct snd_pcm_runtime *runtime;
 	if (PCM_RUNTIME_CHECK(substream))
 		return -ENXIO;
+	if (substream->hw_no_buffer)
+		snd_printd("%s: warning this PCM is host less\n", __func__);
 	runtime = substream->runtime;
 	if (snd_BUG_ON(!substream->ops->copy_user && !runtime->dma_area))
 		return -EINVAL;
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
index 0c5b7a54..def3eb2 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -1219,6 +1219,7 @@ static int snd_pcm_pre_start(struct snd_pcm_substream *substream, int state)
 	if (runtime->status->state != SNDRV_PCM_STATE_PREPARED)
 		return -EBADFD;
 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK &&
+	    !substream->hw_no_buffer &&
 	    !snd_pcm_playback_data(substream))
 		return -EPIPE;
 	runtime->trigger_tstamp_latched = false;
diff --git a/sound/soc/hisilicon/Kconfig b/sound/soc/hisilicon/Kconfig
index df8fbd8..93f0f28 100644
--- a/sound/soc/hisilicon/Kconfig
+++ b/sound/soc/hisilicon/Kconfig
@@ -1,6 +1,12 @@
 # SPDX-License-Identifier: GPL-2.0-only
 config SND_I2S_HI6210_I2S
-	tristate "Hisilicon I2S controller"
+	tristate "Hisilicon Hi6210 I2S controller"
+	select SND_SOC_GENERIC_DMAENGINE_PCM
+	help
+	  Hisilicon I2S
+
+config SND_I2S_HI3660_I2S
+	tristate "Hisilicon 960 I2S controller"
 	select SND_SOC_GENERIC_DMAENGINE_PCM
 	help
 	  Hisilicon I2S
diff --git a/sound/soc/hisilicon/Makefile b/sound/soc/hisilicon/Makefile
index 02e7663..7ca808c 100644
--- a/sound/soc/hisilicon/Makefile
+++ b/sound/soc/hisilicon/Makefile
@@ -1,2 +1,3 @@
 # SPDX-License-Identifier: GPL-2.0-only
 obj-$(CONFIG_SND_I2S_HI6210_I2S) += hi6210-i2s.o
+obj-$(CONFIG_SND_I2S_HI3660_I2S) += hi3660-i2s.o
diff --git a/sound/soc/hisilicon/hi3660-i2s.c b/sound/soc/hisilicon/hi3660-i2s.c
new file mode 100644
index 0000000..b894007
--- /dev/null
+++ b/sound/soc/hisilicon/hi3660-i2s.c
@@ -0,0 +1,448 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * linux/sound/soc/hisilicon/hi3660-i2s.c
+ *
+ * I2S IP driver for hi3660.
+ *
+ * Copyright (c) 2001-2021, Huawei Tech. Co., Ltd.
+ */
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/device.h>
+#include <linux/delay.h>
+#include <linux/clk.h>
+#include <linux/jiffies.h>
+#include <linux/io.h>
+#include <linux/gpio.h>
+#include <sound/core.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/dmaengine_pcm.h>
+#include <sound/initval.h>
+#include <sound/soc.h>
+#include <linux/interrupt.h>
+#include <linux/reset.h>
+#include <linux/of_address.h>
+#include <linux/of_irq.h>
+#include <linux/reset-controller.h>
+#include <linux/clk.h>
+#include <linux/regulator/consumer.h>
+
+#include "hi3660-i2s.h"
+
+struct hi3660_i2s {
+	struct device *dev;
+	struct reset_control *rc;
+	int clocks;
+	struct regulator *regu_asp;
+	struct pinctrl *pctrl;
+	struct pinctrl_state *pin_default;
+	struct pinctrl_state *pin_idle;
+	struct clk *asp_subsys_clk;
+	struct snd_soc_dai_driver dai;
+	void __iomem *base;
+	void __iomem *base_syscon;
+	phys_addr_t base_phys;
+	struct snd_dmaengine_dai_dma_data dma_data[2];
+	spinlock_t lock;
+	int rate;
+	int format;
+	int bits;
+	int channels;
+	u32 master;
+	u32 status;
+};
+
+static void update_bits(struct hi3660_i2s *i2s, u32 ofs, u32 reset, u32 set)
+{
+	u32 val = readl(i2s->base + ofs) & ~reset;
+
+	writel(val | set, i2s->base + ofs);
+}
+
+static void update_bits_syscon(struct hi3660_i2s *i2s,
+			u32 ofs, u32 reset, u32 set)
+{
+	u32 val = readl(i2s->base_syscon + ofs) & ~reset;
+
+	writel(val | set, i2s->base_syscon + ofs);
+}
+
+static int enable_format(struct hi3660_i2s *i2s,
+			       struct snd_pcm_substream *substream)
+{
+	switch (i2s->format & SND_SOC_DAIFMT_MASTER_MASK) {
+	case SND_SOC_DAIFMT_CBM_CFM:
+		i2s->master = false;
+		update_bits_syscon(i2s, HI_ASP_CFG_R_CLK_SEL_REG,
+				0, HI_ASP_CFG_R_CLK_SEL_EN);
+		break;
+	case SND_SOC_DAIFMT_CBS_CFS:
+		i2s->master = true;
+		update_bits_syscon(i2s, HI_ASP_CFG_R_CLK_SEL_REG,
+				HI_ASP_CFG_R_CLK_SEL_EN, 0);
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int startup(struct snd_pcm_substream *substream,
+		     struct snd_soc_dai *cpu_dai)
+{
+	struct hi3660_i2s *i2s = dev_get_drvdata(cpu_dai->dev);
+
+	/* deassert reset on sio_bt*/
+	update_bits_syscon(i2s, HI_ASP_CFG_R_RST_CTRLDIS_REG,
+			0, BIT(2)|BIT(6)|BIT(8)|BIT(16));
+
+	/* enable clk before frequency division */
+	update_bits_syscon(i2s, HI_ASP_CFG_R_GATE_EN_REG,
+			0, BIT(5)|BIT(6));
+
+	/* enable frequency division */
+	update_bits_syscon(i2s, HI_ASP_CFG_R_GATE_CLKDIV_EN_REG,
+			0, BIT(2)|BIT(5));
+
+	/* select clk */
+	update_bits_syscon(i2s, HI_ASP_CFG_R_CLK_SEL_REG,
+			HI_ASP_MASK, HI_ASP_CFG_R_CLK_SEL);
+
+	/* select clk_div */
+	update_bits_syscon(i2s, HI_ASP_CFG_R_CLK1_DIV_REG,
+			HI_ASP_MASK, HI_ASP_CFG_R_CLK1_DIV_SEL);
+	update_bits_syscon(i2s, HI_ASP_CFG_R_CLK4_DIV_REG,
+			HI_ASP_MASK, HI_ASP_CFG_R_CLK4_DIV_SEL);
+	update_bits_syscon(i2s, HI_ASP_CFG_R_CLK6_DIV_REG,
+			HI_ASP_MASK, HI_ASP_CFG_R_CLK6_DIV_SEL);
+
+	/* sio config */
+	update_bits(i2s, HI_ASP_SIO_MODE_REG, HI_ASP_MASK, 0x0);
+	update_bits(i2s, HI_ASP_SIO_DATA_WIDTH_SET_REG, HI_ASP_MASK, 0x9);
+	update_bits(i2s, HI_ASP_SIO_I2S_POS_MERGE_EN_REG, HI_ASP_MASK, 0x1);
+	update_bits(i2s, HI_ASP_SIO_I2S_START_POS_REG, HI_ASP_MASK, 0x0);
+
+	return 0;
+}
+
+static void shutdown(struct snd_pcm_substream *substream,
+		       struct snd_soc_dai *cpu_dai)
+{
+	struct hi3660_i2s *i2s = dev_get_drvdata(cpu_dai->dev);
+
+	if (!IS_ERR_OR_NULL(i2s->asp_subsys_clk))
+		clk_disable_unprepare(i2s->asp_subsys_clk);
+}
+
+static void txctrl(struct snd_soc_dai *cpu_dai, int on)
+{
+	struct hi3660_i2s *i2s = dev_get_drvdata(cpu_dai->dev);
+
+	spin_lock(&i2s->lock);
+
+	if (on) {
+		/* enable SIO TX */
+		update_bits(i2s, HI_ASP_SIO_CT_SET_REG, 0,
+			HI_ASP_SIO_TX_ENABLE |
+			HI_ASP_SIO_TX_DATA_MERGE |
+			HI_ASP_SIO_TX_FIFO_THRESHOLD |
+			HI_ASP_SIO_RX_ENABLE |
+			HI_ASP_SIO_RX_DATA_MERGE |
+			HI_ASP_SIO_RX_FIFO_THRESHOLD);
+	} else {
+		/* disable SIO TX */
+		update_bits(i2s, HI_ASP_SIO_CT_CLR_REG, 0,
+			HI_ASP_SIO_TX_ENABLE | HI_ASP_SIO_RX_ENABLE);
+	}
+	spin_unlock(&i2s->lock);
+}
+
+static void rxctrl(struct snd_soc_dai *cpu_dai, int on)
+{
+	struct hi3660_i2s *i2s = dev_get_drvdata(cpu_dai->dev);
+
+	spin_lock(&i2s->lock);
+	if (on)
+		/* enable SIO RX */
+		update_bits(i2s, HI_ASP_SIO_CT_SET_REG, 0,
+			HI_ASP_SIO_TX_ENABLE |
+			HI_ASP_SIO_TX_DATA_MERGE |
+			HI_ASP_SIO_TX_FIFO_THRESHOLD |
+			HI_ASP_SIO_RX_ENABLE |
+			HI_ASP_SIO_RX_DATA_MERGE |
+			HI_ASP_SIO_RX_FIFO_THRESHOLD);
+	else
+		/* disable SIO RX */
+		update_bits(i2s, HI_ASP_SIO_CT_CLR_REG, 0,
+			HI_ASP_SIO_TX_ENABLE | HI_ASP_SIO_RX_ENABLE);
+	spin_unlock(&i2s->lock);
+}
+
+static int set_sysclk(struct snd_soc_dai *cpu_dai,
+			     int clk_id, unsigned int freq, int dir)
+{
+	return 0;
+}
+
+static int set_format(struct snd_soc_dai *cpu_dai, unsigned int fmt)
+{
+	struct hi3660_i2s *i2s = dev_get_drvdata(cpu_dai->dev);
+
+	i2s->format = fmt;
+	i2s->master = (i2s->format & SND_SOC_DAIFMT_MASTER_MASK) ==
+		      SND_SOC_DAIFMT_CBS_CFS;
+
+	return 0;
+}
+
+static int hw_params(struct snd_pcm_substream *substream,
+			    struct snd_pcm_hw_params *params,
+			    struct snd_soc_dai *cpu_dai)
+{
+	struct hi3660_i2s *i2s = dev_get_drvdata(cpu_dai->dev);
+	struct snd_dmaengine_dai_dma_data *dma_data;
+
+	dma_data = snd_soc_dai_get_dma_data(cpu_dai, substream);
+
+	enable_format(i2s, substream);
+
+	dma_data->maxburst = 4;
+
+	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
+		dma_data->addr = i2s->base_phys +
+			HI_ASP_SIO_I2S_DUAL_TX_CHN_REG;
+	else
+		dma_data->addr = i2s->base_phys +
+			HI_ASP_SIO_I2S_DUAL_RX_CHN_REG;
+
+	switch (params_format(params)) {
+	case SNDRV_PCM_FORMAT_U16_LE:
+	case SNDRV_PCM_FORMAT_S16_LE:
+		i2s->bits = 16;
+		dma_data->addr_width = 4;
+		break;
+
+	case SNDRV_PCM_FORMAT_U24_LE:
+	case SNDRV_PCM_FORMAT_S24_LE:
+		i2s->bits = 32;
+		dma_data->addr_width = 4;
+		break;
+	default:
+		dev_err(cpu_dai->dev, "Bad format\n");
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int trigger(struct snd_pcm_substream *substream, int cmd,
+			  struct snd_soc_dai *cpu_dai)
+{
+	switch (cmd) {
+	case SNDRV_PCM_TRIGGER_START:
+	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
+		if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
+			rxctrl(cpu_dai, 1);
+		else
+			txctrl(cpu_dai, 1);
+		break;
+	case SNDRV_PCM_TRIGGER_STOP:
+	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
+		if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
+			rxctrl(cpu_dai, 0);
+		else
+			txctrl(cpu_dai, 0);
+		break;
+	default:
+		dev_err(cpu_dai->dev, "unknown cmd\n");
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int dai_probe(struct snd_soc_dai *dai)
+{
+	struct hi3660_i2s *i2s = snd_soc_dai_get_drvdata(dai);
+
+	snd_soc_dai_init_dma_data(dai,
+		&i2s->dma_data[SNDRV_PCM_STREAM_PLAYBACK],
+		&i2s->dma_data[SNDRV_PCM_STREAM_CAPTURE]);
+
+	return 0;
+}
+
+
+static struct snd_soc_dai_ops dai_ops = {
+	.trigger	= trigger,
+	.hw_params	= hw_params,
+	.set_fmt	= set_format,
+	.set_sysclk	= set_sysclk,
+	.startup	= startup,
+	.shutdown	= shutdown,
+};
+
+static struct snd_soc_dai_driver dai_init = {
+	.name = "hi3660_i2s",
+	.probe = dai_probe,
+	.playback = {
+		.channels_min = 2,
+		.channels_max = 2,
+		.formats = SNDRV_PCM_FMTBIT_S16_LE |
+			   SNDRV_PCM_FMTBIT_U16_LE,
+		.rates = SNDRV_PCM_RATE_48000,
+	},
+	.capture = {
+		.channels_min = 2,
+		.channels_max = 2,
+		.formats = SNDRV_PCM_FMTBIT_S16_LE |
+			   SNDRV_PCM_FMTBIT_U16_LE,
+		.rates = SNDRV_PCM_RATE_48000,
+	},
+	.ops = &dai_ops,
+};
+
+static const struct snd_soc_component_driver component_driver = {
+	.name = "hi3660_i2s",
+};
+
+#include <sound/dmaengine_pcm.h>
+
+static const struct snd_pcm_hardware sound_hardware = {
+	.info = SNDRV_PCM_INFO_MMAP |
+		SNDRV_PCM_INFO_MMAP_VALID |
+		SNDRV_PCM_INFO_PAUSE |
+		SNDRV_PCM_INFO_RESUME |
+		SNDRV_PCM_INFO_INTERLEAVED |
+		SNDRV_PCM_INFO_HALF_DUPLEX,
+	.period_bytes_min = 4096,
+	.period_bytes_max = 4096,
+	.periods_min = 4,
+	.periods_max = UINT_MAX,
+	.buffer_bytes_max = SIZE_MAX,
+};
+
+static const struct snd_dmaengine_pcm_config dmaengine_pcm_config = {
+	.pcm_hardware = &sound_hardware,
+	.prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
+	.prealloc_buffer_size = 64 * 1024,
+};
+
+static int hi3660_i2s_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct hi3660_i2s *i2s;
+	struct resource *res;
+	int ret;
+
+	i2s = devm_kzalloc(dev, sizeof(*i2s), GFP_KERNEL);
+	if (!i2s)
+		return -ENOMEM;
+
+	i2s->dev = dev;
+	spin_lock_init(&i2s->lock);
+
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	if (!res) {
+		ret = -ENODEV;
+		return ret;
+	}
+	i2s->base_phys = (phys_addr_t)res->start;
+
+	i2s->dai = dai_init;
+	dev_set_drvdata(&pdev->dev, i2s);
+
+	i2s->base = devm_ioremap_resource(dev, res);
+	if (IS_ERR(i2s->base)) {
+		dev_err(&pdev->dev, "ioremap failed\n");
+		ret = PTR_ERR(i2s->base);
+		return ret;
+	}
+
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+	if (!res) {
+		ret = -ENODEV;
+		return ret;
+	}
+	i2s->base_syscon = devm_ioremap(dev, res->start, resource_size(res));
+	if (IS_ERR(i2s->base_syscon)) {
+		dev_err(&pdev->dev, "ioremap failed\n");
+		ret = PTR_ERR(i2s->base_syscon);
+		return ret;
+	}
+
+	/* i2s iomux config */
+	i2s->pctrl = devm_pinctrl_get(dev);
+	if (IS_ERR(i2s->pctrl)) {
+		dev_err(dev, "could not get pinctrl\n");
+		ret = -EIO;
+		return ret;
+	}
+
+	i2s->pin_default = pinctrl_lookup_state(i2s->pctrl,
+					PINCTRL_STATE_DEFAULT);
+	if (IS_ERR(i2s->pin_default)) {
+		dev_err(dev,
+			"could not get default state (%li)\n",
+			PTR_ERR(i2s->pin_default));
+		ret = -EIO;
+		return ret;
+	}
+
+	if (pinctrl_select_state(i2s->pctrl, i2s->pin_default)) {
+		dev_err(dev, "could not set pins to default state\n");
+		ret = -EIO;
+		return ret;
+	}
+
+	ret = devm_snd_dmaengine_pcm_register(&pdev->dev,
+				&dmaengine_pcm_config, 0);
+	if (ret)
+		return ret;
+
+	ret = snd_soc_register_component(&pdev->dev, &component_driver,
+				&i2s->dai, 1);
+	if (ret) {
+		dev_err(&pdev->dev, "Failed to register dai\n");
+		return ret;
+	}
+
+	return 0;
+}
+
+static int hi3660_i2s_remove(struct platform_device *pdev)
+{
+	struct hi3660_i2s *i2s = dev_get_drvdata(&pdev->dev);
+
+	snd_soc_unregister_component(&pdev->dev);
+	dev_set_drvdata(&pdev->dev, NULL);
+
+	pinctrl_put(i2s->pctrl);
+
+	return 0;
+}
+
+static const struct of_device_id dt_ids[] = {
+	{ .compatible = "hisilicon,hi3660-i2s-1.0" },
+	{ /* sentinel */ }
+};
+
+MODULE_DEVICE_TABLE(of, dt_ids);
+
+static struct platform_driver local_platform_driver = {
+	.probe = hi3660_i2s_probe,
+	.remove = hi3660_i2s_remove,
+	.driver = {
+		.name = "hi3660_i2s",
+		.owner = THIS_MODULE,
+		.of_match_table = dt_ids,
+	},
+};
+
+module_platform_driver(local_platform_driver);
+
+MODULE_DESCRIPTION("Hisilicon I2S driver");
+MODULE_AUTHOR("Guangke Ji <j00209069@notesmail.huawei.com>");
+MODULE_LICENSE("GPL");
diff --git a/sound/soc/hisilicon/hi3660-i2s.h b/sound/soc/hisilicon/hi3660-i2s.h
new file mode 100644
index 0000000..1874855
--- /dev/null
+++ b/sound/soc/hisilicon/hi3660-i2s.h
@@ -0,0 +1,99 @@
+/* SPDX-License-Identifier: GPL-2.0+
+ *
+ * linux/sound/soc/hisilicon/hi3660-i2s.c
+ *
+ * I2S IP driver for hi3660.
+ *
+ * Copyright (c) 2001-2021, Huawei Tech. Co., Ltd.
+ *
+ */
+
+#ifndef _HI3660_I2S_H
+#define _HI3660_I2S_H
+
+enum hisi_bits {
+	HII2S_BITS_16,
+	HII2S_BITS_18,
+	HII2S_BITS_20,
+	HII2S_BITS_24,
+};
+
+enum hisi_i2s_rates {
+	HII2S_FS_RATE_8KHZ = 0,
+	HII2S_FS_RATE_16KHZ = 1,
+	HII2S_FS_RATE_32KHZ = 2,
+	HII2S_FS_RATE_48KHZ = 4,
+	HII2S_FS_RATE_96KHZ = 5,
+	HII2S_FS_RATE_192KHZ = 6,
+};
+
+#define HI_ASP_CFG_R_RST_CTRLEN_REG		0x0
+#define HI_ASP_CFG_R_RST_CTRLDIS_REG		0x4
+#define HI_ASP_CFG_R_GATE_EN_REG		0xC
+#define HI_ASP_CFG_R_GATE_DIS_REG		0x10
+#define HI_ASP_CFG_R_GATE_CLKEN_REG		0x14
+#define HI_ASP_CFG_R_GATE_CLKSTAT_REG		0x18
+#define HI_ASP_CFG_R_GATE_CLKDIV_EN_REG		0x1C
+#define HI_ASP_CFG_R_CLK1_DIV_REG		0x20
+#define HI_ASP_CFG_R_CLK2_DIV_REG		0x24
+#define HI_ASP_CFG_R_CLK3_DIV_REG		0x28
+#define HI_ASP_CFG_R_CLK4_DIV_REG		0x2C
+#define HI_ASP_CFG_R_CLK5_DIV_REG		0x30
+#define HI_ASP_CFG_R_CLK6_DIV_REG		0x34
+#define HI_ASP_CFG_R_CLK_SEL_REG		0x38
+#define HI_ASP_CFG_R_SEC_REG			0x100
+
+
+#define HI_ASP_SIO_VERSION_REG			(0x3C)
+#define HI_ASP_SIO_MODE_REG			(0x40)
+#define HI_ASP_SIO_INTSTATUS_REG		(0x44)
+#define HI_ASP_SIO_INTCLR_REG			(0x48)
+#define HI_ASP_SIO_I2S_LEFT_XD_REG		(0x4C)
+#define HI_ASP_SIO_I2S_RIGHT_XD_REG		(0x50)
+#define HI_ASP_SIO_I2S_LEFT_RD_REG		(0x54)
+#define HI_ASP_SIO_I2S_RIGHT_RD_REG		(0x58)
+#define HI_ASP_SIO_CT_SET_REG			(0x5C)
+#define HI_ASP_SIO_CT_CLR_REG			(0x60)
+#define HI_ASP_SIO_RX_STA_REG			(0x68)
+#define HI_ASP_SIO_TX_STA_REG			(0x6C)
+#define HI_ASP_SIO_DATA_WIDTH_SET_REG		(0x78)
+#define HI_ASP_SIO_I2S_START_POS_REG		(0x7C)
+#define HI_ASP_SIO_I2S_POS_FLAG_REG		(0x80)
+#define HI_ASP_SIO_SIGNED_EXT_REG		(0x84)
+#define HI_ASP_SIO_I2S_POS_MERGE_EN_REG		(0x88)
+#define HI_ASP_SIO_INTMASK_REG			(0x8C)
+#define HI_ASP_SIO_I2S_DUAL_RX_CHN_REG		(0xA0)
+#define HI_ASP_SIO_I2S_DUAL_TX_CHN_REG		(0xC0)
+
+
+#define HI_ASP_CFG_R_CLK_SEL_EN			BIT(2)
+#define HI_ASP_CFG_R_CLK_SEL			0x140010
+#define HI_ASP_CFG_R_CLK1_DIV_SEL		0xbcdc9a
+#define HI_ASP_CFG_R_CLK4_DIV_SEL		0x00ff000f
+#define HI_ASP_CFG_R_CLK6_DIV_SEL		0x00ff003f
+#define HI_ASP_CFG_SIO_MODE			0
+#define HI_ASP_SIO_MODE_SEL_EN			BIT(0)
+#define HI_ASP_MASK				0xffffffff
+
+#define HI_ASP_SIO_RX_ENABLE			BIT(13)
+#define HI_ASP_SIO_TX_ENABLE			BIT(12)
+#define HI_ASP_SIO_RX_FIFO_DISABLE		BIT(11)
+#define HI_ASP_SIO_TX_FIFO_DISABLE		BIT(10)
+#define HI_ASP_SIO_RX_DATA_MERGE		BIT(9)
+#define HI_ASP_SIO_TX_DATA_MERGE		BIT(8)
+#define HI_ASP_SIO_RX_FIFO_THRESHOLD		(0x5 << 4)
+#define HI_ASP_SIO_TX_FIFO_THRESHOLD		(0xB << 0)
+#define HI_ASP_SIO_RX_FIFO_THRESHOLD_CLR	(0xF << 4)
+#define HI_ASP_SIO_TX_FIFO_THRESHOLD_CLR	(0xF << 0)
+#define HI_ASP_SIO_BURST			(0x4)
+
+
+enum hisi_i2s_formats {
+	HII2S_FORMAT_I2S,
+	HII2S_FORMAT_PCM_STD,
+	HII2S_FORMAT_PCM_USER,
+	HII2S_FORMAT_LEFT_JUST,
+	HII2S_FORMAT_RIGHT_JUST,
+};
+
+#endif/* _HI3660_I2S_H */
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 9df2076..41b6312 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -3351,6 +3351,39 @@ int snd_soc_get_dai_id(struct device_node *ep)
 }
 EXPORT_SYMBOL_GPL(snd_soc_get_dai_id);
 
+/**
+ * snd_soc_info_multi_ext - external single mixer info callback
+ * @kcontrol: mixer control
+ * @uinfo: control element information
+ *
+ * Callback to provide information about a single external mixer control.
+ * that accepts multiple input.
+ *
+ * Returns 0 for success.
+ */
+int snd_soc_info_multi_ext(struct snd_kcontrol *kcontrol,
+	struct snd_ctl_elem_info *uinfo)
+{
+	struct soc_multi_mixer_control *mc =
+		(struct soc_multi_mixer_control *)kcontrol->private_value;
+	int platform_max;
+
+	if (!mc->platform_max)
+		mc->platform_max = mc->max;
+	platform_max = mc->platform_max;
+
+	if (platform_max == 1 && !strnstr(kcontrol->id.name, " Volume", 30))
+		uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
+	else
+		uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+
+	uinfo->count = mc->count;
+	uinfo->value.integer.min = 0;
+	uinfo->value.integer.max = platform_max;
+	return 0;
+}
+EXPORT_SYMBOL_GPL(snd_soc_info_multi_ext);
+
 int snd_soc_get_dai_name(struct of_phandle_args *args,
 				const char **dai_name)
 {
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index 1196167..0ff61b3 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -19,6 +19,7 @@
 #include <linux/workqueue.h>
 #include <linux/export.h>
 #include <linux/debugfs.h>
+#include <linux/dma-mapping.h>
 #include <sound/core.h>
 #include <sound/pcm.h>
 #include <sound/pcm_params.h>
@@ -28,6 +29,27 @@
 
 #define DPCM_MAX_BE_USERS	8
 
+/* ASoC no host IO hardware */
+static const struct snd_pcm_hardware no_host_hardware = {
+	.info			= SNDRV_PCM_INFO_MMAP |
+				  SNDRV_PCM_INFO_MMAP_VALID |
+				  SNDRV_PCM_INFO_INTERLEAVED |
+				  SNDRV_PCM_INFO_PAUSE |
+				  SNDRV_PCM_INFO_RESUME,
+	.formats		= SNDRV_PCM_FMTBIT_S16_LE |
+				  SNDRV_PCM_FMTBIT_S32_LE,
+	.period_bytes_min	= PAGE_SIZE >> 2,
+	.period_bytes_max	= PAGE_SIZE >> 1,
+	.periods_min		= 2,
+	.periods_max		= 4,
+	/*
+	 * Increase the max buffer bytes as PAGE_SIZE bytes is
+	 * not enough to encompass all the scenarios sent by
+	 * userspapce.
+	 */
+	.buffer_bytes_max	= PAGE_SIZE * 4,
+};
+
 /**
  * snd_soc_runtime_activate() - Increment active count for PCM runtime components
  * @rtd: ASoC PCM runtime that is activated
@@ -138,6 +160,8 @@ int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream,
 	const struct snd_pcm_hardware *hw)
 {
 	struct snd_pcm_runtime *runtime = substream->runtime;
+	if (!runtime)
+		return 0;
 	runtime->hw.info = hw->info;
 	runtime->hw.formats = hw->formats;
 	runtime->hw.period_bytes_min = hw->period_bytes_min;
@@ -508,6 +532,9 @@ static int soc_pcm_open(struct snd_pcm_substream *substream)
 
 	mutex_lock_nested(&rtd->card->pcm_mutex, rtd->card->pcm_subclass);
 
+	if (rtd->dai_link->no_host_mode == SND_SOC_DAI_LINK_NO_HOST)
+		snd_soc_set_runtime_hwparams(substream, &no_host_hardware);
+
 	/* startup the audio subsystem */
 	ret = snd_soc_dai_startup(cpu_dai, substream);
 	if (ret < 0) {
@@ -882,6 +909,16 @@ static int soc_pcm_hw_params(struct snd_pcm_substream *substream,
 	if (ret)
 		goto out;
 
+	/* perform any hw_params fixups */
+	if ((rtd->dai_link->no_host_mode == SND_SOC_DAI_LINK_NO_HOST) &&
+				rtd->dai_link->be_hw_params_fixup) {
+		ret = rtd->dai_link->be_hw_params_fixup(rtd,
+				params);
+		if (ret < 0)
+			dev_err(rtd->card->dev, "ASoC: fixup failed for %s\n",
+				rtd->dai_link->name);
+	}
+
 	if (rtd->dai_link->ops->hw_params) {
 		ret = rtd->dai_link->ops->hw_params(substream, params);
 		if (ret < 0) {
@@ -963,6 +1000,20 @@ static int soc_pcm_hw_params(struct snd_pcm_substream *substream,
 	}
 	component = NULL;
 
+	/* malloc a page for hostless IO */
+	if (rtd->dai_link->no_host_mode == SND_SOC_DAI_LINK_NO_HOST) {
+		substream->dma_buffer.dev.type = SNDRV_DMA_TYPE_DEV;
+		substream->dma_buffer.dev.dev = rtd->dev;
+		substream->dma_buffer.dev.dev->coherent_dma_mask =
+					DMA_BIT_MASK(sizeof(dma_addr_t) * 8);
+		substream->dma_buffer.private_data = NULL;
+
+		arch_setup_dma_ops(substream->dma_buffer.dev.dev,
+				   0, 0, NULL, 0);
+		ret = snd_pcm_lib_malloc_pages(substream, PAGE_SIZE);
+		if (ret < 0)
+			goto component_err;
+	}
 out:
 	mutex_unlock(&rtd->card->pcm_mutex);
 	return ret;
@@ -1045,6 +1096,8 @@ static int soc_pcm_hw_free(struct snd_pcm_substream *substream)
 
 	snd_soc_dai_hw_free(cpu_dai, substream);
 
+	if (rtd->dai_link->no_host_mode == SND_SOC_DAI_LINK_NO_HOST)
+		snd_pcm_lib_free_pages(substream);
 	mutex_unlock(&rtd->card->pcm_mutex);
 	return 0;
 }
@@ -2878,6 +2931,7 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)
 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
 	struct snd_soc_rtdcom_list *rtdcom;
 	struct snd_pcm *pcm;
+	struct snd_pcm_str *stream;
 	char new_name[64];
 	int ret = 0, playback = 0, capture = 0;
 	int i;
@@ -2967,6 +3021,22 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)
 		goto out;
 	}
 
+	/* setup any hostless PCMs - i.e. no host IO is performed */
+	if (rtd->dai_link->no_host_mode) {
+		if (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream) {
+			stream = &pcm->streams[SNDRV_PCM_STREAM_PLAYBACK];
+			stream->substream->hw_no_buffer = 1;
+			snd_soc_set_runtime_hwparams(stream->substream,
+						     &no_host_hardware);
+		}
+		if (pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream) {
+			stream = &pcm->streams[SNDRV_PCM_STREAM_CAPTURE];
+			stream->substream->hw_no_buffer = 1;
+			snd_soc_set_runtime_hwparams(stream->substream,
+						     &no_host_hardware);
+		}
+	}
+
 	/* ASoC PCM operations */
 	if (rtd->dai_link->dynamic) {
 		rtd->ops.open		= dpcm_fe_dai_open;
diff --git a/sound/soc/sprd/Kconfig b/sound/soc/sprd/Kconfig
index 5474fd3..5e0ac82 100644
--- a/sound/soc/sprd/Kconfig
+++ b/sound/soc/sprd/Kconfig
@@ -8,7 +8,7 @@
 	  the Spreadtrum SoCs' Audio interfaces.
 
 config SND_SOC_SPRD_MCDT
-	bool "Spreadtrum multi-channel data transfer support"
+	tristate "Spreadtrum multi-channel data transfer support"
 	depends on SND_SOC_SPRD
 	help
 	  Say y here to enable multi-channel data transfer support. It
diff --git a/sound/soc/sprd/sprd-mcdt.h b/sound/soc/sprd/sprd-mcdt.h
index 9cc7e207..679e3af 100644
--- a/sound/soc/sprd/sprd-mcdt.h
+++ b/sound/soc/sprd/sprd-mcdt.h
@@ -48,7 +48,7 @@ struct sprd_mcdt_chan {
 	struct list_head list;
 };
 
-#ifdef CONFIG_SND_SOC_SPRD_MCDT
+#if IS_ENABLED(CONFIG_SND_SOC_SPRD_MCDT)
 struct sprd_mcdt_chan *sprd_mcdt_request_chan(u8 channel,
 					      enum sprd_mcdt_channel_type type);
 void sprd_mcdt_free_chan(struct sprd_mcdt_chan *chan);
diff --git a/sound/usb/card.c b/sound/usb/card.c
index 230d862..416e495 100644
--- a/sound/usb/card.c
+++ b/sound/usb/card.c
@@ -106,6 +106,185 @@ static DEFINE_MUTEX(register_mutex);
 static struct snd_usb_audio *usb_chip[SNDRV_CARDS];
 static struct usb_driver usb_audio_driver;
 
+static struct snd_usb_audio_vendor_ops *usb_vendor_ops;
+
+int snd_vendor_set_ops(struct snd_usb_audio_vendor_ops *ops)
+{
+	if ((!ops->connect) ||
+	    (!ops->disconnect) ||
+	    (!ops->set_interface) ||
+	    (!ops->set_rate) ||
+	    (!ops->set_pcm_buf) ||
+	    (!ops->set_pcm_intf) ||
+	    (!ops->set_pcm_connection) ||
+	    (!ops->set_pcm_binterval) ||
+	    (!ops->usb_add_ctls))
+		return -EINVAL;
+
+	usb_vendor_ops = ops;
+	return 0;
+}
+EXPORT_SYMBOL_GPL(snd_vendor_set_ops);
+
+struct snd_usb_audio_vendor_ops *snd_vendor_get_ops(void)
+{
+	return usb_vendor_ops;
+}
+
+static int snd_vendor_connect(struct usb_interface *intf)
+{
+	struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
+
+	if (ops)
+		return ops->connect(intf);
+	return 0;
+}
+
+static void snd_vendor_disconnect(struct usb_interface *intf)
+{
+	struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
+
+	if (ops)
+		ops->disconnect(intf);
+}
+
+int snd_vendor_set_interface(struct usb_device *udev,
+			     struct usb_host_interface *intf,
+			     int iface, int alt)
+{
+	struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
+
+	if (ops)
+		return ops->set_interface(udev, intf, iface, alt);
+	return 0;
+}
+
+int snd_vendor_set_rate(struct usb_interface *intf, int iface, int rate,
+			int alt)
+{
+	struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
+
+	if (ops)
+		return ops->set_rate(intf, iface, rate, alt);
+	return 0;
+}
+
+int snd_vendor_set_pcm_buf(struct usb_device *udev, int iface)
+{
+	struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
+
+	if (ops)
+		ops->set_pcm_buf(udev, iface);
+	return 0;
+}
+
+int snd_vendor_set_pcm_intf(struct usb_interface *intf, int iface, int alt,
+			    int direction)
+{
+	struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
+
+	if (ops)
+		return ops->set_pcm_intf(intf, iface, alt, direction);
+	return 0;
+}
+
+int snd_vendor_set_pcm_connection(struct usb_device *udev,
+				  enum snd_vendor_pcm_open_close onoff,
+				  int direction)
+{
+	struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
+
+	if (ops)
+		return ops->set_pcm_connection(udev, onoff, direction);
+	return 0;
+}
+
+int snd_vendor_set_pcm_binterval(struct audioformat *fp,
+				 struct audioformat *found,
+				 int *cur_attr, int *attr)
+{
+	struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
+
+	if (ops)
+		return ops->set_pcm_binterval(fp, found, cur_attr, attr);
+	return 0;
+}
+
+static int snd_vendor_usb_add_ctls(struct snd_usb_audio *chip)
+{
+	struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
+
+	if (ops)
+		return ops->usb_add_ctls(chip);
+	return 0;
+}
+
+struct snd_usb_substream *find_snd_usb_substream(unsigned int card_num,
+	unsigned int pcm_idx, unsigned int direction, struct snd_usb_audio
+	**uchip, void (*disconnect_cb)(struct snd_usb_audio *chip))
+{
+	int idx;
+	struct snd_usb_stream *as;
+	struct snd_usb_substream *subs = NULL;
+	struct snd_usb_audio *chip = NULL;
+
+	mutex_lock(&register_mutex);
+	/*
+	 * legacy audio snd card number assignment is dynamic. Hence
+	 * search using chip->card->number
+	 */
+	for (idx = 0; idx < SNDRV_CARDS; idx++) {
+		if (!usb_chip[idx])
+			continue;
+		if (usb_chip[idx]->card->number == card_num) {
+			chip = usb_chip[idx];
+			break;
+		}
+	}
+
+	if (!chip || atomic_read(&chip->shutdown)) {
+		pr_debug("%s: instance of usb crad # %d does not exist\n",
+			__func__, card_num);
+		goto err;
+	}
+
+	if (pcm_idx >= chip->pcm_devs) {
+		pr_err("%s: invalid pcm dev number %u > %d\n", __func__,
+			pcm_idx, chip->pcm_devs);
+		goto err;
+	}
+
+	if (direction > SNDRV_PCM_STREAM_CAPTURE) {
+		pr_err("%s: invalid direction %u\n", __func__, direction);
+		goto err;
+	}
+
+	list_for_each_entry(as, &chip->pcm_list, list) {
+		if (as->pcm_index == pcm_idx) {
+			subs = &as->substream[direction];
+			if (subs->interface < 0 && !subs->data_endpoint &&
+				!subs->sync_endpoint) {
+				pr_debug("%s: stream disconnected, bail out\n",
+					__func__);
+				subs = NULL;
+				goto err;
+			}
+			goto done;
+		}
+	}
+
+done:
+	chip->card_num = card_num;
+	chip->disconnect_cb = disconnect_cb;
+err:
+	*uchip = chip;
+	if (!subs)
+		pr_debug("%s: substream instance not found\n", __func__);
+	mutex_unlock(&register_mutex);
+	return subs;
+}
+EXPORT_SYMBOL_GPL(find_snd_usb_substream);
+
 /*
  * disconnect streams
  * called from usb_audio_disconnect()
@@ -341,6 +520,7 @@ static void snd_usb_audio_free(struct snd_card *card)
 	list_for_each_entry_safe(ep, n, &chip->ep_list, list)
 		snd_usb_endpoint_free(ep);
 
+	mutex_destroy(&chip->dev_lock);
 	mutex_destroy(&chip->mutex);
 	if (!atomic_read(&chip->shutdown))
 		dev_set_drvdata(&chip->dev->dev, NULL);
@@ -468,6 +648,7 @@ static int snd_usb_audio_create(struct usb_interface *intf,
 
 	chip = card->private_data;
 	mutex_init(&chip->mutex);
+	mutex_init(&chip->dev_lock);
 	init_waitqueue_head(&chip->shutdown_wait);
 	chip->index = idx;
 	chip->dev = dev;
@@ -577,6 +758,10 @@ static int usb_audio_probe(struct usb_interface *intf,
 	if (err < 0)
 		return err;
 
+	err = snd_vendor_connect(intf);
+	if (err)
+		return err;
+
 	/*
 	 * found a config.  now register to ALSA
 	 */
@@ -632,6 +817,8 @@ static int usb_audio_probe(struct usb_interface *intf,
 	}
 	dev_set_drvdata(&dev->dev, chip);
 
+	snd_vendor_usb_add_ctls(chip);
+
 	/*
 	 * For devices with more than one control interface, we assume the
 	 * first contains the audio controls. We might need a more specific
@@ -708,6 +895,11 @@ static void usb_audio_disconnect(struct usb_interface *intf)
 
 	card = chip->card;
 
+	if (chip->disconnect_cb)
+		chip->disconnect_cb(chip);
+
+	snd_vendor_disconnect(intf);
+
 	mutex_lock(&register_mutex);
 	if (atomic_inc_return(&chip->shutdown) == 1) {
 		struct snd_usb_stream *as;
diff --git a/sound/usb/card.h b/sound/usb/card.h
index d8ec5ca..e52f619 100644
--- a/sound/usb/card.h
+++ b/sound/usb/card.h
@@ -2,6 +2,8 @@
 #ifndef __USBAUDIO_CARD_H
 #define __USBAUDIO_CARD_H
 
+#include <linux/android_kabi.h>
+
 #define MAX_NR_RATES	1024
 #define MAX_PACKS	6		/* per URB */
 #define MAX_PACKS_HS	(MAX_PACKS * 8)	/* in high speed mode */
@@ -108,6 +110,11 @@ struct snd_usb_endpoint {
 
 	spinlock_t lock;
 	struct list_head list;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct media_ctl;
@@ -178,4 +185,25 @@ struct snd_usb_stream {
 	struct list_head list;
 };
 
+struct snd_usb_substream *find_snd_usb_substream(unsigned int card_num,
+	unsigned int pcm_idx, unsigned int direction, struct snd_usb_audio
+	**uchip, void (*disconnect_cb)(struct snd_usb_audio *chip));
+
+int snd_vendor_set_ops(struct snd_usb_audio_vendor_ops *vendor_ops);
+struct snd_usb_audio_vendor_ops *snd_vendor_get_ops(void);
+int snd_vendor_set_interface(struct usb_device *udev,
+			     struct usb_host_interface *alts,
+			     int iface, int alt);
+int snd_vendor_set_rate(struct usb_interface *intf, int iface, int rate,
+			int alt);
+int snd_vendor_set_pcm_buf(struct usb_device *udev, int iface);
+int snd_vendor_set_pcm_intf(struct usb_interface *intf, int iface, int alt,
+			    int direction);
+int snd_vendor_set_pcm_connection(struct usb_device *udev,
+				  enum snd_vendor_pcm_open_close onoff,
+				  int direction);
+int snd_vendor_set_pcm_binterval(struct audioformat *fp,
+				 struct audioformat *found,
+				 int *cur_attr, int *attr);
+
 #endif /* __USBAUDIO_CARD_H */
diff --git a/sound/usb/clock.c b/sound/usb/clock.c
index 385a488c..436ff1a 100644
--- a/sound/usb/clock.c
+++ b/sound/usb/clock.c
@@ -648,8 +648,13 @@ static int set_sample_rate_v2v3(struct snd_usb_audio *chip, int iface,
 	 * interface is active. */
 	if (rate != prev_rate) {
 		usb_set_interface(dev, iface, 0);
+
+		snd_vendor_set_interface(dev, alts, iface, 0);
+
 		snd_usb_set_interface_quirk(dev);
 		usb_set_interface(dev, iface, fmt->altsetting);
+
+		snd_vendor_set_interface(dev, alts, iface, fmt->altsetting);
 		snd_usb_set_interface_quirk(dev);
 	}
 
diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
index 1a5e555..0f0cf52 100644
--- a/sound/usb/pcm.c
+++ b/sound/usb/pcm.c
@@ -134,6 +134,71 @@ static struct audioformat *find_format(struct snd_usb_substream *subs)
 			found = fp;
 			cur_attr = attr;
 		}
+
+		snd_vendor_set_pcm_binterval(fp, found, &cur_attr, &attr);
+	}
+	return found;
+}
+
+/*
+ * find a matching audio format as well as non-zero service interval
+ */
+static struct audioformat *find_format_and_si(struct snd_usb_substream *subs,
+	unsigned int datainterval)
+{
+	unsigned int i;
+	struct audioformat *fp;
+	struct audioformat *found = NULL;
+	int cur_attr = 0, attr;
+
+	list_for_each_entry(fp, &subs->fmt_list, list) {
+		if (datainterval != fp->datainterval)
+			continue;
+		if (!(fp->formats & pcm_format_to_bits(subs->pcm_format)))
+			continue;
+		if (fp->channels != subs->channels)
+			continue;
+		if (subs->cur_rate < fp->rate_min ||
+		    subs->cur_rate > fp->rate_max)
+			continue;
+		if (!(fp->rates & SNDRV_PCM_RATE_CONTINUOUS)) {
+			for (i = 0; i < fp->nr_rates; i++)
+				if (fp->rate_table[i] == subs->cur_rate)
+					break;
+			if (i >= fp->nr_rates)
+				continue;
+		}
+		attr = fp->ep_attr & USB_ENDPOINT_SYNCTYPE;
+		if (!found) {
+			found = fp;
+			cur_attr = attr;
+			continue;
+		}
+		/* avoid async out and adaptive in if the other method
+		 * supports the same format.
+		 * this is a workaround for the case like
+		 * M-audio audiophile USB.
+		 */
+		if (attr != cur_attr) {
+			if ((attr == USB_ENDPOINT_SYNC_ASYNC &&
+			     subs->direction == SNDRV_PCM_STREAM_PLAYBACK) ||
+			    (attr == USB_ENDPOINT_SYNC_ADAPTIVE &&
+			     subs->direction == SNDRV_PCM_STREAM_CAPTURE))
+				continue;
+			if ((cur_attr == USB_ENDPOINT_SYNC_ASYNC &&
+			     subs->direction == SNDRV_PCM_STREAM_PLAYBACK) ||
+			    (cur_attr == USB_ENDPOINT_SYNC_ADAPTIVE &&
+			     subs->direction == SNDRV_PCM_STREAM_CAPTURE)) {
+				found = fp;
+				cur_attr = attr;
+				continue;
+			}
+		}
+		/* find the format with the largest max. packet size */
+		if (fp->maxpacksize > found->maxpacksize) {
+			found = fp;
+			cur_attr = attr;
+		}
 	}
 	return found;
 }
@@ -570,6 +635,10 @@ static int set_format(struct snd_usb_substream *subs, struct audioformat *fmt)
 		}
 		dev_dbg(&dev->dev, "setting usb interface %d:%d\n",
 			fmt->iface, fmt->altsetting);
+		err = snd_vendor_set_pcm_intf(iface, fmt->iface,
+					      fmt->altsetting, subs->direction);
+		if (err)
+			return err;
 		snd_usb_set_interface_quirk(dev);
 	}
 
@@ -597,6 +666,74 @@ static int set_format(struct snd_usb_substream *subs, struct audioformat *fmt)
 	return 0;
 }
 
+int snd_usb_enable_audio_stream(struct snd_usb_substream *subs,
+	int datainterval, bool enable)
+{
+	struct audioformat *fmt;
+	struct usb_host_interface *alts;
+	struct usb_interface *iface;
+	int ret;
+
+	if (!enable) {
+		if (subs->interface >= 0) {
+			usb_set_interface(subs->dev, subs->interface, 0);
+			subs->altset_idx = 0;
+			subs->interface = -1;
+			subs->cur_audiofmt = NULL;
+		}
+
+		snd_usb_autosuspend(subs->stream->chip);
+		return 0;
+	}
+
+	snd_usb_autoresume(subs->stream->chip);
+	if (datainterval != -EINVAL)
+		fmt = find_format_and_si(subs, datainterval);
+	else
+		fmt = find_format(subs);
+	if (!fmt) {
+		dev_err(&subs->dev->dev,
+		"cannot set format: format = %#x, rate = %d, channels = %d\n",
+			   subs->pcm_format, subs->cur_rate, subs->channels);
+		return -EINVAL;
+	}
+
+	subs->altset_idx = 0;
+	subs->interface = -1;
+	if (atomic_read(&subs->stream->chip->shutdown)) {
+		ret = -ENODEV;
+	} else {
+		ret = set_format(subs, fmt);
+		if (ret < 0)
+			return ret;
+
+		iface = usb_ifnum_to_if(subs->dev, subs->cur_audiofmt->iface);
+		if (!iface) {
+			dev_err(&subs->dev->dev, "Could not get iface %d\n",
+				subs->cur_audiofmt->iface);
+			return -ENODEV;
+		}
+
+		alts = &iface->altsetting[subs->cur_audiofmt->altset_idx];
+		ret = snd_usb_init_sample_rate(subs->stream->chip,
+					       subs->cur_audiofmt->iface,
+					       alts,
+					       subs->cur_audiofmt,
+					       subs->cur_rate);
+		if (ret < 0) {
+			dev_err(&subs->dev->dev, "failed to set rate %d\n",
+				subs->cur_rate);
+			return ret;
+		}
+	}
+
+	subs->interface = fmt->iface;
+	subs->altset_idx = fmt->altset_idx;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(snd_usb_enable_audio_stream);
+
 /*
  * Return the score of matching two audioformats.
  * Veto the audioformat if:
@@ -903,6 +1040,10 @@ static int snd_usb_pcm_prepare(struct snd_pcm_substream *substream)
 	struct usb_interface *iface;
 	int ret;
 
+	ret = snd_vendor_set_pcm_buf(subs->dev, subs->cur_audiofmt->iface);
+	if (ret)
+		return ret;
+
 	if (! subs->cur_audiofmt) {
 		dev_err(&subs->dev->dev, "no format is specified!\n");
 		return -ENXIO;
@@ -939,6 +1080,17 @@ static int snd_usb_pcm_prepare(struct snd_pcm_substream *substream)
 		if (ret < 0)
 			goto unlock;
 
+		if (snd_vendor_get_ops()) {
+			ret = snd_vendor_set_rate(iface,
+						  subs->cur_audiofmt->iface,
+						  subs->cur_rate,
+						  subs->cur_audiofmt->altsetting);
+			if (!ret) {
+				subs->need_setup_ep = false;
+				goto unlock;
+			}
+		}
+
 		ret = configure_endpoint(subs);
 		if (ret < 0)
 			goto unlock;
@@ -1348,6 +1500,11 @@ static int snd_usb_pcm_open(struct snd_pcm_substream *substream)
 	struct snd_usb_substream *subs = &as->substream[direction];
 	int ret;
 
+	ret = snd_vendor_set_pcm_connection(subs->dev, SOUND_PCM_OPEN,
+					    direction);
+	if (ret)
+		return ret;
+
 	subs->interface = -1;
 	subs->altset_idx = 0;
 	runtime->hw = snd_usb_hardware;
@@ -1376,6 +1533,11 @@ static int snd_usb_pcm_close(struct snd_pcm_substream *substream)
 	struct snd_usb_substream *subs = &as->substream[direction];
 	int ret;
 
+	ret = snd_vendor_set_pcm_connection(subs->dev, SOUND_PCM_CLOSE,
+					    direction);
+	if (ret)
+		return ret;
+
 	stop_endpoints(subs, true);
 	snd_media_stop_pipeline(subs);
 
@@ -1383,6 +1545,12 @@ static int snd_usb_pcm_close(struct snd_pcm_substream *substream)
 	    subs->interface >= 0 &&
 	    !snd_usb_lock_shutdown(subs->stream->chip)) {
 		usb_set_interface(subs->dev, subs->interface, 0);
+		ret = snd_vendor_set_pcm_intf(usb_ifnum_to_if(subs->dev,
+							      subs->interface),
+					      subs->interface, 0,
+					      direction);
+		if (ret)
+			return ret;
 		subs->interface = -1;
 		ret = snd_usb_pcm_change_state(subs, UAC3_PD_STATE_D1);
 		snd_usb_unlock_shutdown(subs->stream->chip);
diff --git a/sound/usb/pcm.h b/sound/usb/pcm.h
index 9833627..6e28e79 100644
--- a/sound/usb/pcm.h
+++ b/sound/usb/pcm.h
@@ -14,5 +14,7 @@ int snd_usb_init_pitch(struct snd_usb_audio *chip, int iface,
 		       struct audioformat *fmt);
 void snd_usb_preallocate_buffer(struct snd_usb_substream *subs);
 
+int snd_usb_enable_audio_stream(struct snd_usb_substream *subs,
+				int datainterval, bool enable);
 
 #endif /* __USBAUDIO_PCM_H */
diff --git a/sound/usb/stream.c b/sound/usb/stream.c
index c5cbba9..1ef965fc 100644
--- a/sound/usb/stream.c
+++ b/sound/usb/stream.c
@@ -67,9 +67,13 @@ static void snd_usb_audio_stream_free(struct snd_usb_stream *stream)
 static void snd_usb_audio_pcm_free(struct snd_pcm *pcm)
 {
 	struct snd_usb_stream *stream = pcm->private_data;
+	struct snd_usb_audio *chip;
 	if (stream) {
+		mutex_lock(&stream->chip->dev_lock);
+		chip = stream->chip;
 		stream->pcm = NULL;
 		snd_usb_audio_stream_free(stream);
+		mutex_unlock(&chip->dev_lock);
 	}
 }
 
diff --git a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h
index 55a2119..082a679 100644
--- a/sound/usb/usbaudio.h
+++ b/sound/usb/usbaudio.h
@@ -57,6 +57,9 @@ struct snd_usb_audio {
 	struct usb_host_interface *ctrl_intf;	/* the audio control interface */
 	struct media_device *media_dev;
 	struct media_intf_devnode *ctl_intf_media_devnode;
+	struct mutex dev_lock;  /* to protect any race with disconnect */
+	int card_num;	/* cache pcm card number to use upon disconnect */
+	void (*disconnect_cb)(struct snd_usb_audio *chip);
 };
 
 #define usb_audio_err(chip, fmt, args...) \
@@ -122,4 +125,50 @@ void snd_usb_unlock_shutdown(struct snd_usb_audio *chip);
 
 extern bool snd_usb_use_vmalloc;
 
+struct audioformat;
+
+enum snd_vendor_pcm_open_close {
+	SOUND_PCM_CLOSE = 0,
+	SOUND_PCM_OPEN,
+};
+
+/**
+ * struct snd_usb_audio_vendor_ops - function callbacks for USB audio accelerators
+ * @connect: called when a new interface is found
+ * @disconnect: called when an interface is removed
+ * @set_interface: called when an interface is initialized
+ * @set_rate: called when the rate is set
+ * @set_pcm_buf: called when the pcm buffer is set
+ * @set_pcm_intf: called when the pcm interface is set
+ * @set_pcm_connection: called when pcm is opened/closed
+ * @set_pcm_binterval: called when the pcm binterval is set
+ * @usb_add_ctls: called when USB controls are added
+ *
+ * Set of callbacks for some accelerated USB audio streaming hardware.
+ *
+ * TODO: make this USB host-controller specific, right now this only works for
+ * one USB controller in the system at a time, which is only realistic for
+ * self-contained systems like phones.
+ */
+struct snd_usb_audio_vendor_ops {
+	int (*connect)(struct usb_interface *intf);
+	void (*disconnect)(struct usb_interface *intf);
+
+	int (*set_interface)(struct usb_device *udev,
+			     struct usb_host_interface *alts,
+			     int iface, int alt);
+	int (*set_rate)(struct usb_interface *intf, int iface, int rate,
+			int alt);
+	int (*set_pcm_buf)(struct usb_device *udev, int iface);
+	int (*set_pcm_intf)(struct usb_interface *intf, int iface, int alt,
+			    int direction);
+	int (*set_pcm_connection)(struct usb_device *udev,
+				  enum snd_vendor_pcm_open_close onoff,
+				  int direction);
+	int (*set_pcm_binterval)(struct audioformat *fp,
+				 struct audioformat *found,
+				 int *cur_attr, int *attr);
+	int (*usb_add_ctls)(struct snd_usb_audio *chip);
+};
+
 #endif /* __USBAUDIO_H */
diff --git a/tools/Makefile b/tools/Makefile
index 7e42f7b..bd77881 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -28,6 +28,7 @@
 	@echo '  pci                    - PCI tools'
 	@echo '  perf                   - Linux performance measurement and analysis tool'
 	@echo '  selftests              - various kernel selftests'
+	@echo '  bootconfig             - boot config tool'
 	@echo '  spi                    - spi tools'
 	@echo '  tmon                   - thermal monitoring and tuning tool'
 	@echo '  turbostat              - Intel CPU idle stats and freq reporting tool'
@@ -63,7 +64,7 @@
 cpupower: FORCE
 	$(call descend,power/$@)
 
-cgroup firewire hv guest spi usb virtio vm bpf iio gpio objtool leds wmi pci firmware debugging: FORCE
+cgroup firewire hv guest bootconfig spi usb virtio vm bpf iio gpio objtool leds wmi pci firmware debugging: FORCE
 	$(call descend,$@)
 
 liblockdep: FORCE
@@ -96,7 +97,7 @@
 	$(call descend,kvm/$@)
 
 all: acpi cgroup cpupower gpio hv firewire liblockdep \
-		perf selftests spi turbostat usb \
+		perf selftests bootconfig spi turbostat usb \
 		virtio vm bpf x86_energy_perf_policy \
 		tmon freefall iio objtool kvm_stat wmi \
 		pci debugging
@@ -107,7 +108,7 @@
 cpupower_install:
 	$(call descend,power/$(@:_install=),install)
 
-cgroup_install firewire_install gpio_install hv_install iio_install perf_install spi_install usb_install virtio_install vm_install bpf_install objtool_install wmi_install pci_install debugging_install:
+cgroup_install firewire_install gpio_install hv_install iio_install perf_install bootconfig_install spi_install usb_install virtio_install vm_install bpf_install objtool_install wmi_install pci_install debugging_install:
 	$(call descend,$(@:_install=),install)
 
 liblockdep_install:
@@ -141,7 +142,7 @@
 cpupower_clean:
 	$(call descend,power/cpupower,clean)
 
-cgroup_clean hv_clean firewire_clean spi_clean usb_clean virtio_clean vm_clean wmi_clean bpf_clean iio_clean gpio_clean objtool_clean leds_clean pci_clean firmware_clean debugging_clean:
+cgroup_clean hv_clean firewire_clean bootconfig_clean spi_clean usb_clean virtio_clean vm_clean wmi_clean bpf_clean iio_clean gpio_clean objtool_clean leds_clean pci_clean firmware_clean debugging_clean:
 	$(call descend,$(@:_clean=),clean)
 
 liblockdep_clean:
@@ -176,7 +177,7 @@
 	$(call descend,build,clean)
 
 clean: acpi_clean cgroup_clean cpupower_clean hv_clean firewire_clean \
-		perf_clean selftests_clean turbostat_clean spi_clean usb_clean virtio_clean \
+		perf_clean selftests_clean turbostat_clean bootconfig_clean spi_clean usb_clean virtio_clean \
 		vm_clean bpf_clean iio_clean x86_energy_perf_policy_clean tmon_clean \
 		freefall_clean build_clean libbpf_clean libsubcmd_clean liblockdep_clean \
 		gpio_clean objtool_clean leds_clean wmi_clean pci_clean firmware_clean debugging_clean \
diff --git a/tools/bootconfig/.gitignore b/tools/bootconfig/.gitignore
new file mode 100644
index 0000000..e7644df
--- /dev/null
+++ b/tools/bootconfig/.gitignore
@@ -0,0 +1 @@
+bootconfig
diff --git a/tools/bootconfig/Makefile b/tools/bootconfig/Makefile
new file mode 100644
index 0000000..da59757
--- /dev/null
+++ b/tools/bootconfig/Makefile
@@ -0,0 +1,30 @@
+# SPDX-License-Identifier: GPL-2.0
+# Makefile for bootconfig command
+include ../scripts/Makefile.include
+
+bindir ?= /usr/bin
+
+ifeq ($(srctree),)
+srctree := $(patsubst %/,%,$(dir $(CURDIR)))
+srctree := $(patsubst %/,%,$(dir $(srctree)))
+endif
+
+LIBSRC = $(srctree)/lib/bootconfig.c $(srctree)/include/linux/bootconfig.h
+CFLAGS = -Wall -g -I$(CURDIR)/include
+
+ALL_TARGETS := bootconfig
+ALL_PROGRAMS := $(patsubst %,$(OUTPUT)%,$(ALL_TARGETS))
+
+all: $(ALL_PROGRAMS)
+
+$(OUTPUT)bootconfig: main.c $(LIBSRC)
+	$(CC) $(filter %.c,$^) $(CFLAGS) -o $@
+
+test: $(ALL_PROGRAMS) test-bootconfig.sh
+	./test-bootconfig.sh $(OUTPUT)
+
+install: $(ALL_PROGRAMS)
+	install $(OUTPUT)bootconfig $(DESTDIR)$(bindir)
+
+clean:
+	$(RM) -f $(OUTPUT)*.o $(ALL_PROGRAMS)
diff --git a/tools/bootconfig/include/linux/bootconfig.h b/tools/bootconfig/include/linux/bootconfig.h
new file mode 100644
index 0000000..078cbd2
--- /dev/null
+++ b/tools/bootconfig/include/linux/bootconfig.h
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _BOOTCONFIG_LINUX_BOOTCONFIG_H
+#define _BOOTCONFIG_LINUX_BOOTCONFIG_H
+
+#include "../../../../include/linux/bootconfig.h"
+
+#endif
diff --git a/tools/bootconfig/include/linux/bug.h b/tools/bootconfig/include/linux/bug.h
new file mode 100644
index 0000000..7b65a38
--- /dev/null
+++ b/tools/bootconfig/include/linux/bug.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _SKC_LINUX_BUG_H
+#define _SKC_LINUX_BUG_H
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#define WARN_ON(cond)	\
+	((cond) ? printf("Internal warning(%s:%d, %s): %s\n",	\
+			__FILE__, __LINE__, __func__, #cond) : 0)
+
+#endif
diff --git a/tools/bootconfig/include/linux/ctype.h b/tools/bootconfig/include/linux/ctype.h
new file mode 100644
index 0000000..c56ecc1
--- /dev/null
+++ b/tools/bootconfig/include/linux/ctype.h
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _SKC_LINUX_CTYPE_H
+#define _SKC_LINUX_CTYPE_H
+
+#include <ctype.h>
+
+#endif
diff --git a/tools/bootconfig/include/linux/errno.h b/tools/bootconfig/include/linux/errno.h
new file mode 100644
index 0000000..5d9f91e
--- /dev/null
+++ b/tools/bootconfig/include/linux/errno.h
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _SKC_LINUX_ERRNO_H
+#define _SKC_LINUX_ERRNO_H
+
+#include <asm/errno.h>
+
+#endif
diff --git a/tools/bootconfig/include/linux/kernel.h b/tools/bootconfig/include/linux/kernel.h
new file mode 100644
index 0000000..2d93320
--- /dev/null
+++ b/tools/bootconfig/include/linux/kernel.h
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _SKC_LINUX_KERNEL_H
+#define _SKC_LINUX_KERNEL_H
+
+#include <stdlib.h>
+#include <stdbool.h>
+
+#include <linux/printk.h>
+
+typedef unsigned short u16;
+typedef unsigned int   u32;
+
+#define unlikely(cond)	(cond)
+
+#define __init
+#define __initdata
+
+#endif
diff --git a/tools/bootconfig/include/linux/memblock.h b/tools/bootconfig/include/linux/memblock.h
new file mode 100644
index 0000000..7862f21
--- /dev/null
+++ b/tools/bootconfig/include/linux/memblock.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _XBC_LINUX_MEMBLOCK_H
+#define _XBC_LINUX_MEMBLOCK_H
+
+#include <stdlib.h>
+
+#define __pa(addr)	(addr)
+#define SMP_CACHE_BYTES	0
+#define memblock_alloc(size, align)	malloc(size)
+#define memblock_free(paddr, size)	free(paddr)
+
+#endif
diff --git a/tools/bootconfig/include/linux/printk.h b/tools/bootconfig/include/linux/printk.h
new file mode 100644
index 0000000..036e667
--- /dev/null
+++ b/tools/bootconfig/include/linux/printk.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _SKC_LINUX_PRINTK_H
+#define _SKC_LINUX_PRINTK_H
+
+#include <stdio.h>
+
+#define printk(fmt, ...) printf(fmt, ##__VA_ARGS__)
+
+#define pr_err printk
+#define pr_warn	printk
+#define pr_info	printk
+#define pr_debug printk
+
+#endif
diff --git a/tools/bootconfig/include/linux/string.h b/tools/bootconfig/include/linux/string.h
new file mode 100644
index 0000000..8267af7
--- /dev/null
+++ b/tools/bootconfig/include/linux/string.h
@@ -0,0 +1,32 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _SKC_LINUX_STRING_H
+#define _SKC_LINUX_STRING_H
+
+#include <string.h>
+
+/* Copied from lib/string.c */
+static inline char *skip_spaces(const char *str)
+{
+	while (isspace(*str))
+		++str;
+	return (char *)str;
+}
+
+static inline char *strim(char *s)
+{
+	size_t size;
+	char *end;
+
+	size = strlen(s);
+	if (!size)
+		return s;
+
+	end = s + size - 1;
+	while (end >= s && isspace(*end))
+		end--;
+	*(end + 1) = '\0';
+
+	return skip_spaces(s);
+}
+
+#endif
diff --git a/tools/bootconfig/main.c b/tools/bootconfig/main.c
new file mode 100644
index 0000000..e0878f5
--- /dev/null
+++ b/tools/bootconfig/main.c
@@ -0,0 +1,402 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Boot config tool for initrd image
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+
+#include <linux/kernel.h>
+#include <linux/bootconfig.h>
+
+static int xbc_show_value(struct xbc_node *node)
+{
+	const char *val;
+	char q;
+	int i = 0;
+
+	xbc_array_for_each_value(node, val) {
+		if (strchr(val, '"'))
+			q = '\'';
+		else
+			q = '"';
+		printf("%c%s%c%s", q, val, q, node->next ? ", " : ";\n");
+		i++;
+	}
+	return i;
+}
+
+static void xbc_show_compact_tree(void)
+{
+	struct xbc_node *node, *cnode;
+	int depth = 0, i;
+
+	node = xbc_root_node();
+	while (node && xbc_node_is_key(node)) {
+		for (i = 0; i < depth; i++)
+			printf("\t");
+		cnode = xbc_node_get_child(node);
+		while (cnode && xbc_node_is_key(cnode) && !cnode->next) {
+			printf("%s.", xbc_node_get_data(node));
+			node = cnode;
+			cnode = xbc_node_get_child(node);
+		}
+		if (cnode && xbc_node_is_key(cnode)) {
+			printf("%s {\n", xbc_node_get_data(node));
+			depth++;
+			node = cnode;
+			continue;
+		} else if (cnode && xbc_node_is_value(cnode)) {
+			printf("%s = ", xbc_node_get_data(node));
+			xbc_show_value(cnode);
+		} else {
+			printf("%s;\n", xbc_node_get_data(node));
+		}
+
+		if (node->next) {
+			node = xbc_node_get_next(node);
+			continue;
+		}
+		while (!node->next) {
+			node = xbc_node_get_parent(node);
+			if (!node)
+				return;
+			if (!xbc_node_get_child(node)->next)
+				continue;
+			depth--;
+			for (i = 0; i < depth; i++)
+				printf("\t");
+			printf("}\n");
+		}
+		node = xbc_node_get_next(node);
+	}
+}
+
+/* Simple real checksum */
+int checksum(unsigned char *buf, int len)
+{
+	int i, sum = 0;
+
+	for (i = 0; i < len; i++)
+		sum += buf[i];
+
+	return sum;
+}
+
+#define PAGE_SIZE	4096
+
+int load_xbc_fd(int fd, char **buf, int size)
+{
+	int ret;
+
+	*buf = malloc(size + 1);
+	if (!*buf)
+		return -ENOMEM;
+
+	ret = read(fd, *buf, size);
+	if (ret < 0)
+		return -errno;
+	(*buf)[size] = '\0';
+
+	return ret;
+}
+
+/* Return the read size or -errno */
+int load_xbc_file(const char *path, char **buf)
+{
+	struct stat stat;
+	int fd, ret;
+
+	fd = open(path, O_RDONLY);
+	if (fd < 0)
+		return -errno;
+	ret = fstat(fd, &stat);
+	if (ret < 0)
+		return -errno;
+
+	ret = load_xbc_fd(fd, buf, stat.st_size);
+
+	close(fd);
+
+	return ret;
+}
+
+int load_xbc_from_initrd(int fd, char **buf)
+{
+	struct stat stat;
+	int ret;
+	u32 size = 0, csum = 0, rcsum;
+	char magic[BOOTCONFIG_MAGIC_LEN];
+	const char *msg;
+
+	ret = fstat(fd, &stat);
+	if (ret < 0)
+		return -errno;
+
+	if (stat.st_size < 8 + BOOTCONFIG_MAGIC_LEN)
+		return 0;
+
+	if (lseek(fd, -BOOTCONFIG_MAGIC_LEN, SEEK_END) < 0) {
+		pr_err("Failed to lseek: %d\n", -errno);
+		return -errno;
+	}
+	if (read(fd, magic, BOOTCONFIG_MAGIC_LEN) < 0)
+		return -errno;
+	/* Check the bootconfig magic bytes */
+	if (memcmp(magic, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN) != 0)
+		return 0;
+
+	if (lseek(fd, -(8 + BOOTCONFIG_MAGIC_LEN), SEEK_END) < 0) {
+		pr_err("Failed to lseek: %d\n", -errno);
+		return -errno;
+	}
+
+	if (read(fd, &size, sizeof(u32)) < 0)
+		return -errno;
+
+	if (read(fd, &csum, sizeof(u32)) < 0)
+		return -errno;
+
+	/* Wrong size error  */
+	if (stat.st_size < size + 8 + BOOTCONFIG_MAGIC_LEN) {
+		pr_err("bootconfig size is too big\n");
+		return -E2BIG;
+	}
+
+	if (lseek(fd, stat.st_size - (size + 8 + BOOTCONFIG_MAGIC_LEN),
+		  SEEK_SET) < 0) {
+		pr_err("Failed to lseek: %d\n", -errno);
+		return -errno;
+	}
+
+	ret = load_xbc_fd(fd, buf, size);
+	if (ret < 0)
+		return ret;
+
+	/* Wrong Checksum */
+	rcsum = checksum((unsigned char *)*buf, size);
+	if (csum != rcsum) {
+		pr_err("checksum error: %d != %d\n", csum, rcsum);
+		return -EINVAL;
+	}
+
+	ret = xbc_init(*buf, &msg, NULL);
+	/* Wrong data */
+	if (ret < 0) {
+		pr_err("parse error: %s.\n", msg);
+		return ret;
+	}
+
+	return size;
+}
+
+int show_xbc(const char *path)
+{
+	int ret, fd;
+	char *buf = NULL;
+
+	fd = open(path, O_RDONLY);
+	if (fd < 0) {
+		pr_err("Failed to open initrd %s: %d\n", path, fd);
+		return -errno;
+	}
+
+	ret = load_xbc_from_initrd(fd, &buf);
+	if (ret < 0) {
+		pr_err("Failed to load a boot config from initrd: %d\n", ret);
+		goto out;
+	}
+	xbc_show_compact_tree();
+	ret = 0;
+out:
+	close(fd);
+	free(buf);
+
+	return ret;
+}
+
+int delete_xbc(const char *path)
+{
+	struct stat stat;
+	int ret = 0, fd, size;
+	char *buf = NULL;
+
+	fd = open(path, O_RDWR);
+	if (fd < 0) {
+		pr_err("Failed to open initrd %s: %d\n", path, fd);
+		return -errno;
+	}
+
+	size = load_xbc_from_initrd(fd, &buf);
+	if (size < 0) {
+		ret = size;
+		pr_err("Failed to load a boot config from initrd: %d\n", ret);
+	} else if (size > 0) {
+		ret = fstat(fd, &stat);
+		if (!ret)
+			ret = ftruncate(fd, stat.st_size
+					- size - 8 - BOOTCONFIG_MAGIC_LEN);
+		if (ret)
+			ret = -errno;
+	} /* Ignore if there is no boot config in initrd */
+
+	close(fd);
+	free(buf);
+
+	return ret;
+}
+
+static void show_xbc_error(const char *data, const char *msg, int pos)
+{
+	int lin = 1, col, i;
+
+	if (pos < 0) {
+		pr_err("Error: %s.\n", msg);
+		return;
+	}
+
+	/* Note that pos starts from 0 but lin and col should start from 1. */
+	col = pos + 1;
+	for (i = 0; i < pos; i++) {
+		if (data[i] == '\n') {
+			lin++;
+			col = pos - i;
+		}
+	}
+	pr_err("Parse Error: %s at %d:%d\n", msg, lin, col);
+
+}
+
+int apply_xbc(const char *path, const char *xbc_path)
+{
+	u32 size, csum;
+	char *buf, *data;
+	int ret, fd;
+	const char *msg;
+	int pos;
+
+	ret = load_xbc_file(xbc_path, &buf);
+	if (ret < 0) {
+		pr_err("Failed to load %s : %d\n", xbc_path, ret);
+		return ret;
+	}
+	size = strlen(buf) + 1;
+	csum = checksum((unsigned char *)buf, size);
+
+	/* Prepare xbc_path data */
+	data = malloc(size + 8);
+	if (!data)
+		return -ENOMEM;
+	strcpy(data, buf);
+	*(u32 *)(data + size) = size;
+	*(u32 *)(data + size + 4) = csum;
+
+	/* Check the data format */
+	ret = xbc_init(buf, &msg, &pos);
+	if (ret < 0) {
+		show_xbc_error(data, msg, pos);
+		free(data);
+		free(buf);
+
+		return ret;
+	}
+	printf("Apply %s to %s\n", xbc_path, path);
+	printf("\tNumber of nodes: %d\n", ret);
+	printf("\tSize: %u bytes\n", (unsigned int)size);
+	printf("\tChecksum: %d\n", (unsigned int)csum);
+
+	/* TODO: Check the options by schema */
+	xbc_destroy_all();
+	free(buf);
+
+	/* Remove old boot config if exists */
+	ret = delete_xbc(path);
+	if (ret < 0) {
+		pr_err("Failed to delete previous boot config: %d\n", ret);
+		free(data);
+		return ret;
+	}
+
+	/* Apply new one */
+	fd = open(path, O_RDWR | O_APPEND);
+	if (fd < 0) {
+		pr_err("Failed to open %s: %d\n", path, fd);
+		free(data);
+		return fd;
+	}
+	/* TODO: Ensure the @path is initramfs/initrd image */
+	ret = write(fd, data, size + 8);
+	if (ret < 0) {
+		pr_err("Failed to apply a boot config: %d\n", ret);
+		goto out;
+	}
+	/* Write a magic word of the bootconfig */
+	ret = write(fd, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN);
+	if (ret < 0) {
+		pr_err("Failed to apply a boot config magic: %d\n", ret);
+		goto out;
+	}
+	ret = 0;
+out:
+	close(fd);
+	free(data);
+
+	return ret;
+}
+
+int usage(void)
+{
+	printf("Usage: bootconfig [OPTIONS] <INITRD>\n"
+		" Apply, delete or show boot config to initrd.\n"
+		" Options:\n"
+		"		-a <config>: Apply boot config to initrd\n"
+		"		-d : Delete boot config file from initrd\n\n"
+		" If no option is given, show current applied boot config.\n");
+	return -1;
+}
+
+int main(int argc, char **argv)
+{
+	char *path = NULL;
+	char *apply = NULL;
+	bool delete = false;
+	int opt;
+
+	while ((opt = getopt(argc, argv, "hda:")) != -1) {
+		switch (opt) {
+		case 'd':
+			delete = true;
+			break;
+		case 'a':
+			apply = optarg;
+			break;
+		case 'h':
+		default:
+			return usage();
+		}
+	}
+
+	if (apply && delete) {
+		pr_err("Error: You can not specify both -a and -d at once.\n");
+		return usage();
+	}
+
+	if (optind >= argc) {
+		pr_err("Error: No initrd is specified.\n");
+		return usage();
+	}
+
+	path = argv[optind];
+
+	if (apply)
+		return apply_xbc(path, apply);
+	else if (delete)
+		return delete_xbc(path);
+
+	return show_xbc(path);
+}
diff --git a/tools/bootconfig/samples/bad-array-space-comment.bconf b/tools/bootconfig/samples/bad-array-space-comment.bconf
new file mode 100644
index 0000000..fda19e4
--- /dev/null
+++ b/tools/bootconfig/samples/bad-array-space-comment.bconf
@@ -0,0 +1,5 @@
+key =	# comment
+	"value1",	  # comment1
+	"value2" 	  # comment2
+,
+	"value3"
diff --git a/tools/bootconfig/samples/bad-array.bconf b/tools/bootconfig/samples/bad-array.bconf
new file mode 100644
index 0000000..0174af0
--- /dev/null
+++ b/tools/bootconfig/samples/bad-array.bconf
@@ -0,0 +1,2 @@
+# Array must be comma separated.
+key = "value1" "value2"
diff --git a/tools/bootconfig/samples/bad-dotword.bconf b/tools/bootconfig/samples/bad-dotword.bconf
new file mode 100644
index 0000000..ba5557b
--- /dev/null
+++ b/tools/bootconfig/samples/bad-dotword.bconf
@@ -0,0 +1,4 @@
+# do not start keyword with .
+key {
+  .word = 1
+}
diff --git a/tools/bootconfig/samples/bad-empty.bconf b/tools/bootconfig/samples/bad-empty.bconf
new file mode 100644
index 0000000..2ba3f6cc
--- /dev/null
+++ b/tools/bootconfig/samples/bad-empty.bconf
@@ -0,0 +1 @@
+# Wrong boot config: comment only
diff --git a/tools/bootconfig/samples/bad-keyerror.bconf b/tools/bootconfig/samples/bad-keyerror.bconf
new file mode 100644
index 0000000..b6e247a
--- /dev/null
+++ b/tools/bootconfig/samples/bad-keyerror.bconf
@@ -0,0 +1,2 @@
+# key word can not contain ","
+key,word
diff --git a/tools/bootconfig/samples/bad-longkey.bconf b/tools/bootconfig/samples/bad-longkey.bconf
new file mode 100644
index 0000000..eb97369
--- /dev/null
+++ b/tools/bootconfig/samples/bad-longkey.bconf
@@ -0,0 +1 @@
+key_word_is_too_long01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345
diff --git a/tools/bootconfig/samples/bad-manywords.bconf b/tools/bootconfig/samples/bad-manywords.bconf
new file mode 100644
index 0000000..8db8196
--- /dev/null
+++ b/tools/bootconfig/samples/bad-manywords.bconf
@@ -0,0 +1 @@
+key1.is2.too3.long4.5.6.7.8.9.10.11.12.13.14.15.16.17
diff --git a/tools/bootconfig/samples/bad-mixed-kv1.bconf b/tools/bootconfig/samples/bad-mixed-kv1.bconf
new file mode 100644
index 0000000..1761547
--- /dev/null
+++ b/tools/bootconfig/samples/bad-mixed-kv1.bconf
@@ -0,0 +1,3 @@
+# value -> subkey pattern
+key = value
+key.subkey = another-value
diff --git a/tools/bootconfig/samples/bad-mixed-kv2.bconf b/tools/bootconfig/samples/bad-mixed-kv2.bconf
new file mode 100644
index 0000000..6b32e0c
--- /dev/null
+++ b/tools/bootconfig/samples/bad-mixed-kv2.bconf
@@ -0,0 +1,3 @@
+# subkey -> value pattern
+key.subkey = value
+key = another-value
diff --git a/tools/bootconfig/samples/bad-no-keyword.bconf b/tools/bootconfig/samples/bad-no-keyword.bconf
new file mode 100644
index 0000000..eff2680
--- /dev/null
+++ b/tools/bootconfig/samples/bad-no-keyword.bconf
@@ -0,0 +1,2 @@
+# No keyword
+{}
diff --git a/tools/bootconfig/samples/bad-nonprintable.bconf b/tools/bootconfig/samples/bad-nonprintable.bconf
new file mode 100644
index 0000000..3bb1a28
--- /dev/null
+++ b/tools/bootconfig/samples/bad-nonprintable.bconf
@@ -0,0 +1,2 @@
+# Non printable
+key = ""
diff --git a/tools/bootconfig/samples/bad-samekey.bconf b/tools/bootconfig/samples/bad-samekey.bconf
new file mode 100644
index 0000000..e8d983a
--- /dev/null
+++ b/tools/bootconfig/samples/bad-samekey.bconf
@@ -0,0 +1,6 @@
+# Same key value is not allowed
+key {
+	foo = value
+	bar = value2
+}
+key.foo = value
diff --git a/tools/bootconfig/samples/bad-spaceword.bconf b/tools/bootconfig/samples/bad-spaceword.bconf
new file mode 100644
index 0000000..90c703d32
--- /dev/null
+++ b/tools/bootconfig/samples/bad-spaceword.bconf
@@ -0,0 +1,2 @@
+# No space between words
+key . word
diff --git a/tools/bootconfig/samples/bad-tree.bconf b/tools/bootconfig/samples/bad-tree.bconf
new file mode 100644
index 0000000..5a6038e
--- /dev/null
+++ b/tools/bootconfig/samples/bad-tree.bconf
@@ -0,0 +1,5 @@
+# brace is not closing
+tree {
+  node {
+    value = 1
+}
diff --git a/tools/bootconfig/samples/bad-value.bconf b/tools/bootconfig/samples/bad-value.bconf
new file mode 100644
index 0000000..a1217fe
--- /dev/null
+++ b/tools/bootconfig/samples/bad-value.bconf
@@ -0,0 +1,3 @@
+# Quotes error
+value = "data
+
diff --git a/tools/bootconfig/samples/escaped.bconf b/tools/bootconfig/samples/escaped.bconf
new file mode 100644
index 0000000..9f72043
--- /dev/null
+++ b/tools/bootconfig/samples/escaped.bconf
@@ -0,0 +1,3 @@
+key1 = "A\B\C"
+key2 = '\'\''
+key3 = "\\"
diff --git a/tools/bootconfig/samples/good-array-space-comment.bconf b/tools/bootconfig/samples/good-array-space-comment.bconf
new file mode 100644
index 0000000..45b938dc
--- /dev/null
+++ b/tools/bootconfig/samples/good-array-space-comment.bconf
@@ -0,0 +1,4 @@
+key =	# comment
+	"value1",	  # comment1
+	"value2"	 , # comment2
+	"value3"
diff --git a/tools/bootconfig/samples/good-comment-after-value.bconf b/tools/bootconfig/samples/good-comment-after-value.bconf
new file mode 100644
index 0000000..0d92a85
--- /dev/null
+++ b/tools/bootconfig/samples/good-comment-after-value.bconf
@@ -0,0 +1 @@
+key = "value"  # comment
diff --git a/tools/bootconfig/samples/good-printables.bconf b/tools/bootconfig/samples/good-printables.bconf
new file mode 100644
index 0000000..ebb985a
--- /dev/null
+++ b/tools/bootconfig/samples/good-printables.bconf
@@ -0,0 +1,2 @@
+key = "	
+ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
diff --git a/tools/bootconfig/samples/good-simple.bconf b/tools/bootconfig/samples/good-simple.bconf
new file mode 100644
index 0000000..37dd6d2
--- /dev/null
+++ b/tools/bootconfig/samples/good-simple.bconf
@@ -0,0 +1,11 @@
+# A good simple bootconfig
+
+key.word1 = 1
+key.word2=2
+key.word3 = 3;
+
+key {
+word4 = 4 }
+
+key { word5 = 5; word6 = 6 }
+
diff --git a/tools/bootconfig/samples/good-single.bconf b/tools/bootconfig/samples/good-single.bconf
new file mode 100644
index 0000000..98e55ad
--- /dev/null
+++ b/tools/bootconfig/samples/good-single.bconf
@@ -0,0 +1,4 @@
+# single key style
+key = 1
+key2 = 2
+key3 = "alpha", "beta"
diff --git a/tools/bootconfig/samples/good-space-after-value.bconf b/tools/bootconfig/samples/good-space-after-value.bconf
new file mode 100644
index 0000000..56c15cb
--- /dev/null
+++ b/tools/bootconfig/samples/good-space-after-value.bconf
@@ -0,0 +1 @@
+key = "value"   
diff --git a/tools/bootconfig/samples/good-tree.bconf b/tools/bootconfig/samples/good-tree.bconf
new file mode 100644
index 0000000..f2ddefc
--- /dev/null
+++ b/tools/bootconfig/samples/good-tree.bconf
@@ -0,0 +1,12 @@
+key {
+  word {
+    tree {
+      value = "0"}
+  }
+  word2 {
+    tree {
+      value = 1,2 }
+  }
+}
+other.tree {
+  value = 2; value2 = 3;}
diff --git a/tools/bootconfig/test-bootconfig.sh b/tools/bootconfig/test-bootconfig.sh
new file mode 100755
index 0000000..3c2ab9e
--- /dev/null
+++ b/tools/bootconfig/test-bootconfig.sh
@@ -0,0 +1,149 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-only
+
+echo "Boot config test script"
+
+if [ -d "$1" ]; then
+  TESTDIR=$1
+else
+  TESTDIR=.
+fi
+BOOTCONF=${TESTDIR}/bootconfig
+
+INITRD=`mktemp ${TESTDIR}/initrd-XXXX`
+TEMPCONF=`mktemp ${TESTDIR}/temp-XXXX.bconf`
+OUTFILE=`mktemp ${TESTDIR}/tempout-XXXX`
+NG=0
+
+cleanup() {
+  rm -f $INITRD $TEMPCONF $OUTFILE
+  exit $NG
+}
+
+trap cleanup EXIT TERM
+
+NO=1
+
+xpass() { # pass test command
+  echo "test case $NO ($3)... "
+  if ! ($@ && echo "\t\t[OK]"); then
+     echo "\t\t[NG]"; NG=$((NG + 1))
+  fi
+  NO=$((NO + 1))
+}
+
+xfail() { # fail test command
+  echo "test case $NO ($3)... "
+  if ! (! $@ && echo "\t\t[OK]"); then
+     echo "\t\t[NG]"; NG=$((NG + 1))
+  fi
+  NO=$((NO + 1))
+}
+
+echo "Basic command test"
+xpass $BOOTCONF $INITRD
+
+echo "Delete command should success without bootconfig"
+xpass $BOOTCONF -d $INITRD
+
+dd if=/dev/zero of=$INITRD bs=4096 count=1
+echo "key = value;" > $TEMPCONF
+bconf_size=$(stat -c %s $TEMPCONF)
+initrd_size=$(stat -c %s $INITRD)
+
+echo "Apply command test"
+xpass $BOOTCONF -a $TEMPCONF $INITRD
+new_size=$(stat -c %s $INITRD)
+
+echo "Show command test"
+xpass $BOOTCONF $INITRD
+
+echo "File size check"
+xpass test $new_size -eq $(expr $bconf_size + $initrd_size + 9 + 12)
+
+echo "Apply command repeat test"
+xpass $BOOTCONF -a $TEMPCONF $INITRD
+
+echo "File size check"
+xpass test $new_size -eq $(stat -c %s $INITRD)
+
+echo "Delete command check"
+xpass $BOOTCONF -d $INITRD
+
+echo "File size check"
+new_size=$(stat -c %s $INITRD)
+xpass test $new_size -eq $initrd_size
+
+echo "No error messge while applying"
+dd if=/dev/zero of=$INITRD bs=4096 count=1
+printf " \0\0\0 \0\0\0" >> $INITRD
+$BOOTCONF -a $TEMPCONF $INITRD > $OUTFILE 2>&1
+xfail grep -i "failed" $OUTFILE
+xfail grep -i "error" $OUTFILE
+
+echo "Max node number check"
+
+echo -n > $TEMPCONF
+for i in `seq 1 1024` ; do
+   echo "node$i" >> $TEMPCONF
+done
+xpass $BOOTCONF -a $TEMPCONF $INITRD
+
+echo "badnode" >> $TEMPCONF
+xfail $BOOTCONF -a $TEMPCONF $INITRD
+
+echo "Max filesize check"
+
+# Max size is 32767 (including terminal byte)
+echo -n "data = \"" > $TEMPCONF
+dd if=/dev/urandom bs=768 count=32 | base64 -w0 >> $TEMPCONF
+echo "\"" >> $TEMPCONF
+xfail $BOOTCONF -a $TEMPCONF $INITRD
+
+truncate -s 32764 $TEMPCONF
+echo "\"" >> $TEMPCONF	# add 2 bytes + terminal ('\"\n\0')
+xpass $BOOTCONF -a $TEMPCONF $INITRD
+
+echo "Adding same-key values"
+cat > $TEMPCONF << EOF
+key = bar, baz
+key += qux
+EOF
+echo > $INITRD
+
+xpass $BOOTCONF -a $TEMPCONF $INITRD
+$BOOTCONF $INITRD > $OUTFILE
+xpass grep -q "bar" $OUTFILE
+xpass grep -q "baz" $OUTFILE
+xpass grep -q "qux" $OUTFILE
+
+echo "Double/single quotes test"
+echo "key = '\"string\"';" > $TEMPCONF
+$BOOTCONF -a $TEMPCONF $INITRD
+$BOOTCONF $INITRD > $TEMPCONF
+cat $TEMPCONF
+xpass grep \'\"string\"\' $TEMPCONF
+
+echo "=== expected failure cases ==="
+for i in samples/bad-* ; do
+  xfail $BOOTCONF -a $i $INITRD
+done
+
+echo "=== expected success cases ==="
+for i in samples/good-* ; do
+  xpass $BOOTCONF -a $i $INITRD
+done
+
+
+echo
+echo "=== Summary ==="
+echo "# of Passed: $(expr $NO - $NG - 1)"
+echo "# of Failed: $NG"
+
+echo
+if [ $NG -eq 0 ]; then
+	echo "All tests passed"
+else
+	echo "$NG tests failed"
+	exit 1
+fi
diff --git a/tools/include/uapi/asm-generic/unistd.h b/tools/include/uapi/asm-generic/unistd.h
index 1fc8faa..674a0b0 100644
--- a/tools/include/uapi/asm-generic/unistd.h
+++ b/tools/include/uapi/asm-generic/unistd.h
@@ -850,9 +850,11 @@ __SYSCALL(__NR_pidfd_open, sys_pidfd_open)
 #define __NR_clone3 435
 __SYSCALL(__NR_clone3, sys_clone3)
 #endif
+#define __NR_process_madvise 440
+__SYSCALL(__NR_process_madvise, sys_process_madvise)
 
 #undef __NR_syscalls
-#define __NR_syscalls 436
+#define __NR_syscalls 441
 
 /*
  * 32 bit systems traditionally used different
diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h
index 8649422..f2c6b21 100644
--- a/tools/include/uapi/linux/bpf.h
+++ b/tools/include/uapi/linux/bpf.h
@@ -570,6 +570,8 @@ union bpf_attr {
  * u64 bpf_ktime_get_ns(void)
  * 	Description
  * 		Return the time elapsed since system boot, in nanoseconds.
+ * 		Does not include time the system was suspended.
+ * 		See: clock_gettime(CLOCK_MONOTONIC)
  * 	Return
  * 		Current *ktime*.
  *
@@ -2750,6 +2752,14 @@ union bpf_attr {
  *		**-EOPNOTSUPP** kernel configuration does not enable SYN cookies
  *
  *		**-EPROTONOSUPPORT** IP packet version is not 4 or 6
+ *
+ * u64 bpf_ktime_get_boot_ns(void)
+ * 	Description
+ * 		Return the time elapsed since system boot, in nanoseconds.
+ * 		Does include the time the system was suspended.
+ * 		See: clock_gettime(CLOCK_BOOTTIME)
+ * 	Return
+ * 		Current *ktime*.
  */
 #define __BPF_FUNC_MAPPER(FN)		\
 	FN(unspec),			\
@@ -2862,7 +2872,22 @@ union bpf_attr {
 	FN(sk_storage_get),		\
 	FN(sk_storage_delete),		\
 	FN(send_signal),		\
-	FN(tcp_gen_syncookie),
+	FN(tcp_gen_syncookie),		\
+	FN(skb_output),			\
+	FN(probe_read_user),		\
+	FN(probe_read_kernel),		\
+	FN(probe_read_user_str),	\
+	FN(probe_read_kernel_str),	\
+	FN(tcp_send_ack),		\
+	FN(send_signal_thread),		\
+	FN(jiffies64),			\
+	FN(read_branch_records),	\
+	FN(get_ns_current_pid_tgid),	\
+	FN(xdp_output),			\
+	FN(get_netns_cookie),		\
+	FN(get_current_ancestor_cgroup_id),	\
+	FN(sk_assign),			\
+	FN(ktime_get_boot_ns),
 
 /* integer value in 'imm' field of BPF_CALL instruction selects which helper
  * function eBPF program intends to call
diff --git a/tools/include/uapi/linux/mman.h b/tools/include/uapi/linux/mman.h
index fc1a64c..923cc16 100644
--- a/tools/include/uapi/linux/mman.h
+++ b/tools/include/uapi/linux/mman.h
@@ -5,8 +5,9 @@
 #include <asm/mman.h>
 #include <asm-generic/hugetlb_encode.h>
 
-#define MREMAP_MAYMOVE	1
-#define MREMAP_FIXED	2
+#define MREMAP_MAYMOVE		1
+#define MREMAP_FIXED		2
+#define MREMAP_DONTUNMAP	4
 
 #define OVERCOMMIT_GUESS		0
 #define OVERCOMMIT_ALWAYS		1
diff --git a/tools/objtool/check.c b/tools/objtool/check.c
index 1b7e748..a474bec 100644
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -144,6 +144,7 @@ static bool __dead_end_function(struct objtool_file *file, struct symbol *func,
 		"usercopy_abort",
 		"machine_real_restart",
 		"rewind_stack_do_exit",
+		"kunit_try_catch_throw",
 	};
 
 	if (!func)
diff --git a/tools/perf/arch/powerpc/entry/syscalls/syscall.tbl b/tools/perf/arch/powerpc/entry/syscalls/syscall.tbl
index 43f736e..c855a27 100644
--- a/tools/perf/arch/powerpc/entry/syscalls/syscall.tbl
+++ b/tools/perf/arch/powerpc/entry/syscalls/syscall.tbl
@@ -517,3 +517,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 435	nospu	clone3				ppc_clone3
+440	common	process_madvise		sys_process_madvise
\ No newline at end of file
diff --git a/tools/perf/arch/s390/entry/syscalls/syscall.tbl b/tools/perf/arch/s390/entry/syscalls/syscall.tbl
index b38d484..bb1fb03 100644
--- a/tools/perf/arch/s390/entry/syscalls/syscall.tbl
+++ b/tools/perf/arch/s390/entry/syscalls/syscall.tbl
@@ -388,3 +388,4 @@
 378  common	s390_guarded_storage	sys_s390_guarded_storage	compat_sys_s390_guarded_storage
 379  common	statx			sys_statx			compat_sys_statx
 380  common	s390_sthyi		sys_s390_sthyi			compat_sys_s390_sthyi
+440	common	process_madvise		sys_process_madvise
\ No newline at end of file
diff --git a/tools/perf/arch/x86/entry/syscalls/syscall_64.tbl b/tools/perf/arch/x86/entry/syscalls/syscall_64.tbl
index c29976e..2a49bd0 100644
--- a/tools/perf/arch/x86/entry/syscalls/syscall_64.tbl
+++ b/tools/perf/arch/x86/entry/syscalls/syscall_64.tbl
@@ -357,6 +357,7 @@
 433	common	fspick			__x64_sys_fspick
 434	common	pidfd_open		__x64_sys_pidfd_open
 435	common	clone3			__x64_sys_clone3/ptregs
+440	common	process_madvise		__x64_sys_process_madvise
 
 #
 # x32-specific system call numbers start at 512 to avoid cache impact
@@ -399,4 +400,4 @@
 544	x32	io_submit		__x32_compat_sys_io_submit
 545	x32	execveat		__x32_compat_sys_execveat/ptregs
 546	x32	preadv2			__x32_compat_sys_preadv64v2
-547	x32	pwritev2		__x32_compat_sys_pwritev64v2
+547	x32	pwritev2		__x32_compat_sys_pwritev64v2
\ No newline at end of file
diff --git a/tools/perf/trace/beauty/mmap.c b/tools/perf/trace/beauty/mmap.c
index 859a8a9..60ba97d 100644
--- a/tools/perf/trace/beauty/mmap.c
+++ b/tools/perf/trace/beauty/mmap.c
@@ -69,6 +69,7 @@ static size_t syscall_arg__scnprintf_mremap_flags(char *bf, size_t size,
 
 	P_MREMAP_FLAG(MAYMOVE);
 	P_MREMAP_FLAG(FIXED);
+	P_MREMAP_FLAG(DONTUNMAP);
 #undef P_MREMAP_FLAG
 
 	if (flags)
diff --git a/tools/testing/kunit/.gitignore b/tools/testing/kunit/.gitignore
new file mode 100644
index 0000000..c791ff5
--- /dev/null
+++ b/tools/testing/kunit/.gitignore
@@ -0,0 +1,3 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
\ No newline at end of file
diff --git a/tools/testing/kunit/configs/all_tests.config b/tools/testing/kunit/configs/all_tests.config
new file mode 100644
index 0000000..9235b7d
--- /dev/null
+++ b/tools/testing/kunit/configs/all_tests.config
@@ -0,0 +1,3 @@
+CONFIG_KUNIT=y
+CONFIG_KUNIT_TEST=y
+CONFIG_KUNIT_EXAMPLE_TEST=y
diff --git a/tools/testing/kunit/kunit.py b/tools/testing/kunit/kunit.py
new file mode 100755
index 0000000..efe06d6
--- /dev/null
+++ b/tools/testing/kunit/kunit.py
@@ -0,0 +1,138 @@
+#!/usr/bin/python3
+# SPDX-License-Identifier: GPL-2.0
+#
+# A thin wrapper on top of the KUnit Kernel
+#
+# Copyright (C) 2019, Google LLC.
+# Author: Felix Guo <felixguoxiuping@gmail.com>
+# Author: Brendan Higgins <brendanhiggins@google.com>
+
+import argparse
+import sys
+import os
+import time
+import shutil
+
+from collections import namedtuple
+from enum import Enum, auto
+
+import kunit_config
+import kunit_kernel
+import kunit_parser
+
+KunitResult = namedtuple('KunitResult', ['status','result'])
+
+KunitRequest = namedtuple('KunitRequest', ['raw_output','timeout', 'jobs', 'build_dir', 'defconfig'])
+
+class KunitStatus(Enum):
+	SUCCESS = auto()
+	CONFIG_FAILURE = auto()
+	BUILD_FAILURE = auto()
+	TEST_FAILURE = auto()
+
+def create_default_kunitconfig():
+	if not os.path.exists(kunit_kernel.KUNITCONFIG_PATH):
+		shutil.copyfile('arch/um/configs/kunit_defconfig',
+				kunit_kernel.KUNITCONFIG_PATH)
+
+def run_tests(linux: kunit_kernel.LinuxSourceTree,
+	      request: KunitRequest) -> KunitResult:
+	if request.defconfig:
+		create_default_kunitconfig()
+
+	config_start = time.time()
+	success = linux.build_reconfig(request.build_dir)
+	config_end = time.time()
+	if not success:
+		return KunitResult(KunitStatus.CONFIG_FAILURE, 'could not configure kernel')
+
+	kunit_parser.print_with_timestamp('Building KUnit Kernel ...')
+
+	build_start = time.time()
+	success = linux.build_um_kernel(request.jobs, request.build_dir)
+	build_end = time.time()
+	if not success:
+		return KunitResult(KunitStatus.BUILD_FAILURE, 'could not build kernel')
+
+	kunit_parser.print_with_timestamp('Starting KUnit Kernel ...')
+	test_start = time.time()
+
+	test_result = kunit_parser.TestResult(kunit_parser.TestStatus.SUCCESS,
+					      [],
+					      'Tests not Parsed.')
+	if request.raw_output:
+		kunit_parser.raw_output(
+			linux.run_kernel(timeout=request.timeout,
+					 build_dir=request.build_dir))
+	else:
+		kunit_output = linux.run_kernel(timeout=request.timeout,
+						build_dir=request.build_dir)
+		test_result = kunit_parser.parse_run_tests(kunit_output)
+	test_end = time.time()
+
+	kunit_parser.print_with_timestamp((
+		'Elapsed time: %.3fs total, %.3fs configuring, %.3fs ' +
+		'building, %.3fs running\n') % (
+				test_end - config_start,
+				config_end - config_start,
+				build_end - build_start,
+				test_end - test_start))
+
+	if test_result.status != kunit_parser.TestStatus.SUCCESS:
+		return KunitResult(KunitStatus.TEST_FAILURE, test_result)
+	else:
+		return KunitResult(KunitStatus.SUCCESS, test_result)
+
+def main(argv, linux=None):
+	parser = argparse.ArgumentParser(
+			description='Helps writing and running KUnit tests.')
+	subparser = parser.add_subparsers(dest='subcommand')
+
+	run_parser = subparser.add_parser('run', help='Runs KUnit tests.')
+	run_parser.add_argument('--raw_output', help='don\'t format output from kernel',
+				action='store_true')
+
+	run_parser.add_argument('--timeout',
+				help='maximum number of seconds to allow for all tests '
+				'to run. This does not include time taken to build the '
+				'tests.',
+				type=int,
+				default=300,
+				metavar='timeout')
+
+	run_parser.add_argument('--jobs',
+				help='As in the make command, "Specifies  the number of '
+				'jobs (commands) to run simultaneously."',
+				type=int, default=8, metavar='jobs')
+
+	run_parser.add_argument('--build_dir',
+				help='As in the make command, it specifies the build '
+				'directory.',
+				type=str, default=None, metavar='build_dir')
+
+	run_parser.add_argument('--defconfig',
+				help='Uses a default kunitconfig.',
+				action='store_true')
+
+	cli_args = parser.parse_args(argv)
+
+	if cli_args.subcommand == 'run':
+		if cli_args.defconfig:
+			create_default_kunitconfig()
+
+		if not linux:
+			linux = kunit_kernel.LinuxSourceTree()
+
+		request = KunitRequest(cli_args.raw_output,
+				       cli_args.timeout,
+				       cli_args.jobs,
+				       cli_args.build_dir,
+				       cli_args.defconfig)
+		result = run_tests(linux, request)
+		if result.status != KunitStatus.SUCCESS:
+			sys.exit(1)
+	else:
+		parser.print_help()
+
+if __name__ == '__main__':
+	main(sys.argv[1:])
diff --git a/tools/testing/kunit/kunit_config.py b/tools/testing/kunit/kunit_config.py
new file mode 100644
index 0000000..ebf3942
--- /dev/null
+++ b/tools/testing/kunit/kunit_config.py
@@ -0,0 +1,66 @@
+# SPDX-License-Identifier: GPL-2.0
+#
+# Builds a .config from a kunitconfig.
+#
+# Copyright (C) 2019, Google LLC.
+# Author: Felix Guo <felixguoxiuping@gmail.com>
+# Author: Brendan Higgins <brendanhiggins@google.com>
+
+import collections
+import re
+
+CONFIG_IS_NOT_SET_PATTERN = r'^# CONFIG_\w+ is not set$'
+CONFIG_PATTERN = r'^CONFIG_\w+=\S+$'
+
+KconfigEntryBase = collections.namedtuple('KconfigEntry', ['raw_entry'])
+
+
+class KconfigEntry(KconfigEntryBase):
+
+	def __str__(self) -> str:
+		return self.raw_entry
+
+
+class KconfigParseError(Exception):
+	"""Error parsing Kconfig defconfig or .config."""
+
+
+class Kconfig(object):
+	"""Represents defconfig or .config specified using the Kconfig language."""
+
+	def __init__(self):
+		self._entries = []
+
+	def entries(self):
+		return set(self._entries)
+
+	def add_entry(self, entry: KconfigEntry) -> None:
+		self._entries.append(entry)
+
+	def is_subset_of(self, other: 'Kconfig') -> bool:
+		return self.entries().issubset(other.entries())
+
+	def write_to_file(self, path: str) -> None:
+		with open(path, 'w') as f:
+			for entry in self.entries():
+				f.write(str(entry) + '\n')
+
+	def parse_from_string(self, blob: str) -> None:
+		"""Parses a string containing KconfigEntrys and populates this Kconfig."""
+		self._entries = []
+		is_not_set_matcher = re.compile(CONFIG_IS_NOT_SET_PATTERN)
+		config_matcher = re.compile(CONFIG_PATTERN)
+		for line in blob.split('\n'):
+			line = line.strip()
+			if not line:
+				continue
+			elif config_matcher.match(line) or is_not_set_matcher.match(line):
+				self._entries.append(KconfigEntry(line))
+			elif line[0] == '#':
+				continue
+			else:
+				raise KconfigParseError('Failed to parse: ' + line)
+
+	def read_from_file(self, path: str) -> None:
+		with open(path, 'r') as f:
+			self.parse_from_string(f.read())
diff --git a/tools/testing/kunit/kunit_kernel.py b/tools/testing/kunit/kunit_kernel.py
new file mode 100644
index 0000000..bf38768
--- /dev/null
+++ b/tools/testing/kunit/kunit_kernel.py
@@ -0,0 +1,149 @@
+# SPDX-License-Identifier: GPL-2.0
+#
+# Runs UML kernel, collects output, and handles errors.
+#
+# Copyright (C) 2019, Google LLC.
+# Author: Felix Guo <felixguoxiuping@gmail.com>
+# Author: Brendan Higgins <brendanhiggins@google.com>
+
+
+import logging
+import subprocess
+import os
+
+import kunit_config
+
+KCONFIG_PATH = '.config'
+KUNITCONFIG_PATH = 'kunitconfig'
+
+class ConfigError(Exception):
+	"""Represents an error trying to configure the Linux kernel."""
+
+
+class BuildError(Exception):
+	"""Represents an error trying to build the Linux kernel."""
+
+
+class LinuxSourceTreeOperations(object):
+	"""An abstraction over command line operations performed on a source tree."""
+
+	def make_mrproper(self):
+		try:
+			subprocess.check_output(['make', 'mrproper'])
+		except OSError as e:
+			raise ConfigError('Could not call make command: ' + e)
+		except subprocess.CalledProcessError as e:
+			raise ConfigError(e.output)
+
+	def make_olddefconfig(self, build_dir):
+		command = ['make', 'ARCH=um', 'olddefconfig']
+		if build_dir:
+			command += ['O=' + build_dir]
+		try:
+			subprocess.check_output(command)
+		except OSError as e:
+			raise ConfigError('Could not call make command: ' + e)
+		except subprocess.CalledProcessError as e:
+			raise ConfigError(e.output)
+
+	def make(self, jobs, build_dir):
+		command = ['make', 'ARCH=um', '--jobs=' + str(jobs)]
+		if build_dir:
+			command += ['O=' + build_dir]
+		try:
+			subprocess.check_output(command)
+		except OSError as e:
+			raise BuildError('Could not call execute make: ' + e)
+		except subprocess.CalledProcessError as e:
+			raise BuildError(e.output)
+
+	def linux_bin(self, params, timeout, build_dir):
+		"""Runs the Linux UML binary. Must be named 'linux'."""
+		linux_bin = './linux'
+		if build_dir:
+			linux_bin = os.path.join(build_dir, 'linux')
+		process = subprocess.Popen(
+			[linux_bin] + params,
+			stdin=subprocess.PIPE,
+			stdout=subprocess.PIPE,
+			stderr=subprocess.PIPE)
+		process.wait(timeout=timeout)
+		return process
+
+
+def get_kconfig_path(build_dir):
+	kconfig_path = KCONFIG_PATH
+	if build_dir:
+		kconfig_path = os.path.join(build_dir, KCONFIG_PATH)
+	return kconfig_path
+
+class LinuxSourceTree(object):
+	"""Represents a Linux kernel source tree with KUnit tests."""
+
+	def __init__(self):
+		self._kconfig = kunit_config.Kconfig()
+		self._kconfig.read_from_file(KUNITCONFIG_PATH)
+		self._ops = LinuxSourceTreeOperations()
+
+	def clean(self):
+		try:
+			self._ops.make_mrproper()
+		except ConfigError as e:
+			logging.error(e)
+			return False
+		return True
+
+	def build_config(self, build_dir):
+		kconfig_path = get_kconfig_path(build_dir)
+		if build_dir and not os.path.exists(build_dir):
+			os.mkdir(build_dir)
+		self._kconfig.write_to_file(kconfig_path)
+		try:
+			self._ops.make_olddefconfig(build_dir)
+		except ConfigError as e:
+			logging.error(e)
+			return False
+		validated_kconfig = kunit_config.Kconfig()
+		validated_kconfig.read_from_file(kconfig_path)
+		if not self._kconfig.is_subset_of(validated_kconfig):
+			logging.error('Provided Kconfig is not contained in validated .config!')
+			return False
+		return True
+
+	def build_reconfig(self, build_dir):
+		"""Creates a new .config if it is not a subset of the kunitconfig."""
+		kconfig_path = get_kconfig_path(build_dir)
+		if os.path.exists(kconfig_path):
+			existing_kconfig = kunit_config.Kconfig()
+			existing_kconfig.read_from_file(kconfig_path)
+			if not self._kconfig.is_subset_of(existing_kconfig):
+				print('Regenerating .config ...')
+				os.remove(kconfig_path)
+				return self.build_config(build_dir)
+			else:
+				return True
+		else:
+			print('Generating .config ...')
+			return self.build_config(build_dir)
+
+	def build_um_kernel(self, jobs, build_dir):
+		try:
+			self._ops.make_olddefconfig(build_dir)
+			self._ops.make(jobs, build_dir)
+		except (ConfigError, BuildError) as e:
+			logging.error(e)
+			return False
+		used_kconfig = kunit_config.Kconfig()
+		used_kconfig.read_from_file(get_kconfig_path(build_dir))
+		if not self._kconfig.is_subset_of(used_kconfig):
+			logging.error('Provided Kconfig is not contained in final config!')
+			return False
+		return True
+
+	def run_kernel(self, args=[], timeout=None, build_dir=None):
+		args.extend(['mem=256M'])
+		process = self._ops.linux_bin(args, timeout, build_dir)
+		with open('test.log', 'w') as f:
+			for line in process.stdout:
+				f.write(line.rstrip().decode('ascii') + '\n')
+				yield line.rstrip().decode('ascii')
diff --git a/tools/testing/kunit/kunit_parser.py b/tools/testing/kunit/kunit_parser.py
new file mode 100644
index 0000000..4ffbae0f
--- /dev/null
+++ b/tools/testing/kunit/kunit_parser.py
@@ -0,0 +1,310 @@
+# SPDX-License-Identifier: GPL-2.0
+#
+# Parses test results from a kernel dmesg log.
+#
+# Copyright (C) 2019, Google LLC.
+# Author: Felix Guo <felixguoxiuping@gmail.com>
+# Author: Brendan Higgins <brendanhiggins@google.com>
+
+import re
+
+from collections import namedtuple
+from datetime import datetime
+from enum import Enum, auto
+from functools import reduce
+from typing import List
+
+TestResult = namedtuple('TestResult', ['status','suites','log'])
+
+class TestSuite(object):
+	def __init__(self):
+		self.status = None
+		self.name = None
+		self.cases = []
+
+	def __str__(self):
+		return 'TestSuite(' + self.status + ',' + self.name + ',' + str(self.cases) + ')'
+
+	def __repr__(self):
+		return str(self)
+
+class TestCase(object):
+	def __init__(self):
+		self.status = None
+		self.name = ''
+		self.log = []
+
+	def __str__(self):
+		return 'TestCase(' + self.status + ',' + self.name + ',' + str(self.log) + ')'
+
+	def __repr__(self):
+		return str(self)
+
+class TestStatus(Enum):
+	SUCCESS = auto()
+	FAILURE = auto()
+	TEST_CRASHED = auto()
+	NO_TESTS = auto()
+
+kunit_start_re = re.compile(r'^TAP version [0-9]+$')
+kunit_end_re = re.compile('List of all partitions:')
+
+def isolate_kunit_output(kernel_output):
+	started = False
+	for line in kernel_output:
+		if kunit_start_re.match(line):
+			started = True
+			yield line
+		elif kunit_end_re.match(line):
+			break
+		elif started:
+			yield line
+
+def raw_output(kernel_output):
+	for line in kernel_output:
+		print(line)
+
+DIVIDER = '=' * 60
+
+RESET = '\033[0;0m'
+
+def red(text):
+	return '\033[1;31m' + text + RESET
+
+def yellow(text):
+	return '\033[1;33m' + text + RESET
+
+def green(text):
+	return '\033[1;32m' + text + RESET
+
+def print_with_timestamp(message):
+	print('[%s] %s' % (datetime.now().strftime('%H:%M:%S'), message))
+
+def format_suite_divider(message):
+	return '======== ' + message + ' ========'
+
+def print_suite_divider(message):
+	print_with_timestamp(DIVIDER)
+	print_with_timestamp(format_suite_divider(message))
+
+def print_log(log):
+	for m in log:
+		print_with_timestamp(m)
+
+TAP_ENTRIES = re.compile(r'^(TAP|\t?ok|\t?not ok|\t?[0-9]+\.\.[0-9]+|\t?#).*$')
+
+def consume_non_diagnositic(lines: List[str]) -> None:
+	while lines and not TAP_ENTRIES.match(lines[0]):
+		lines.pop(0)
+
+def save_non_diagnositic(lines: List[str], test_case: TestCase) -> None:
+	while lines and not TAP_ENTRIES.match(lines[0]):
+		test_case.log.append(lines[0])
+		lines.pop(0)
+
+OkNotOkResult = namedtuple('OkNotOkResult', ['is_ok','description', 'text'])
+
+OK_NOT_OK_SUBTEST = re.compile(r'^\t(ok|not ok) [0-9]+ - (.*)$')
+
+OK_NOT_OK_MODULE = re.compile(r'^(ok|not ok) [0-9]+ - (.*)$')
+
+def parse_ok_not_ok_test_case(lines: List[str],
+			      test_case: TestCase,
+			      expecting_test_case: bool) -> bool:
+	save_non_diagnositic(lines, test_case)
+	if not lines:
+		if expecting_test_case:
+			test_case.status = TestStatus.TEST_CRASHED
+			return True
+		else:
+			return False
+	line = lines[0]
+	match = OK_NOT_OK_SUBTEST.match(line)
+	if match:
+		test_case.log.append(lines.pop(0))
+		test_case.name = match.group(2)
+		if test_case.status == TestStatus.TEST_CRASHED:
+			return True
+		if match.group(1) == 'ok':
+			test_case.status = TestStatus.SUCCESS
+		else:
+			test_case.status = TestStatus.FAILURE
+		return True
+	else:
+		return False
+
+SUBTEST_DIAGNOSTIC = re.compile(r'^\t# .*?: (.*)$')
+DIAGNOSTIC_CRASH_MESSAGE = 'kunit test case crashed!'
+
+def parse_diagnostic(lines: List[str], test_case: TestCase) -> bool:
+	save_non_diagnositic(lines, test_case)
+	if not lines:
+		return False
+	line = lines[0]
+	match = SUBTEST_DIAGNOSTIC.match(line)
+	if match:
+		test_case.log.append(lines.pop(0))
+		if match.group(1) == DIAGNOSTIC_CRASH_MESSAGE:
+			test_case.status = TestStatus.TEST_CRASHED
+		return True
+	else:
+		return False
+
+def parse_test_case(lines: List[str], expecting_test_case: bool) -> TestCase:
+	test_case = TestCase()
+	save_non_diagnositic(lines, test_case)
+	while parse_diagnostic(lines, test_case):
+		pass
+	if parse_ok_not_ok_test_case(lines, test_case, expecting_test_case):
+		return test_case
+	else:
+		return None
+
+SUBTEST_HEADER = re.compile(r'^\t# Subtest: (.*)$')
+
+def parse_subtest_header(lines: List[str]) -> str:
+	consume_non_diagnositic(lines)
+	if not lines:
+		return None
+	match = SUBTEST_HEADER.match(lines[0])
+	if match:
+		lines.pop(0)
+		return match.group(1)
+	else:
+		return None
+
+SUBTEST_PLAN = re.compile(r'\t[0-9]+\.\.([0-9]+)')
+
+def parse_subtest_plan(lines: List[str]) -> int:
+	consume_non_diagnositic(lines)
+	match = SUBTEST_PLAN.match(lines[0])
+	if match:
+		lines.pop(0)
+		return int(match.group(1))
+	else:
+		return None
+
+def max_status(left: TestStatus, right: TestStatus) -> TestStatus:
+	if left == TestStatus.TEST_CRASHED or right == TestStatus.TEST_CRASHED:
+		return TestStatus.TEST_CRASHED
+	elif left == TestStatus.FAILURE or right == TestStatus.FAILURE:
+		return TestStatus.FAILURE
+	elif left != TestStatus.SUCCESS:
+		return left
+	elif right != TestStatus.SUCCESS:
+		return right
+	else:
+		return TestStatus.SUCCESS
+
+def parse_ok_not_ok_test_suite(lines: List[str], test_suite: TestSuite) -> bool:
+	consume_non_diagnositic(lines)
+	if not lines:
+		test_suite.status = TestStatus.TEST_CRASHED
+		return False
+	line = lines[0]
+	match = OK_NOT_OK_MODULE.match(line)
+	if match:
+		lines.pop(0)
+		if match.group(1) == 'ok':
+			test_suite.status = TestStatus.SUCCESS
+		else:
+			test_suite.status = TestStatus.FAILURE
+		return True
+	else:
+		return False
+
+def bubble_up_errors(to_status, status_container_list) -> TestStatus:
+	status_list = map(to_status, status_container_list)
+	return reduce(max_status, status_list, TestStatus.SUCCESS)
+
+def bubble_up_test_case_errors(test_suite: TestSuite) -> TestStatus:
+	max_test_case_status = bubble_up_errors(lambda x: x.status, test_suite.cases)
+	return max_status(max_test_case_status, test_suite.status)
+
+def parse_test_suite(lines: List[str]) -> TestSuite:
+	if not lines:
+		return None
+	consume_non_diagnositic(lines)
+	test_suite = TestSuite()
+	test_suite.status = TestStatus.SUCCESS
+	name = parse_subtest_header(lines)
+	if not name:
+		return None
+	test_suite.name = name
+	expected_test_case_num = parse_subtest_plan(lines)
+	if not expected_test_case_num:
+		return None
+	test_case = parse_test_case(lines, expected_test_case_num > 0)
+	expected_test_case_num -= 1
+	while test_case:
+		test_suite.cases.append(test_case)
+		test_case = parse_test_case(lines, expected_test_case_num > 0)
+		expected_test_case_num -= 1
+	if parse_ok_not_ok_test_suite(lines, test_suite):
+		test_suite.status = bubble_up_test_case_errors(test_suite)
+		return test_suite
+	elif not lines:
+		print_with_timestamp(red('[ERROR] ') + 'ran out of lines before end token')
+		return test_suite
+	else:
+		print('failed to parse end of suite' + lines[0])
+		return None
+
+TAP_HEADER = re.compile(r'^TAP version 14$')
+
+def parse_tap_header(lines: List[str]) -> bool:
+	consume_non_diagnositic(lines)
+	if TAP_HEADER.match(lines[0]):
+		lines.pop(0)
+		return True
+	else:
+		return False
+
+def bubble_up_suite_errors(test_suite_list: List[TestSuite]) -> TestStatus:
+	return bubble_up_errors(lambda x: x.status, test_suite_list)
+
+def parse_test_result(lines: List[str]) -> TestResult:
+	if not lines:
+		return TestResult(TestStatus.NO_TESTS, [], lines)
+	consume_non_diagnositic(lines)
+	if not parse_tap_header(lines):
+		return None
+	test_suites = []
+	test_suite = parse_test_suite(lines)
+	while test_suite:
+		test_suites.append(test_suite)
+		test_suite = parse_test_suite(lines)
+	return TestResult(bubble_up_suite_errors(test_suites), test_suites, lines)
+
+def parse_run_tests(kernel_output) -> TestResult:
+	total_tests = 0
+	failed_tests = 0
+	crashed_tests = 0
+	test_result = parse_test_result(list(isolate_kunit_output(kernel_output)))
+	for test_suite in test_result.suites:
+		if test_suite.status == TestStatus.SUCCESS:
+			print_suite_divider(green('[PASSED] ') + test_suite.name)
+		elif test_suite.status == TestStatus.TEST_CRASHED:
+			print_suite_divider(red('[CRASHED] ' + test_suite.name))
+		else:
+			print_suite_divider(red('[FAILED] ') + test_suite.name)
+		for test_case in test_suite.cases:
+			total_tests += 1
+			if test_case.status == TestStatus.SUCCESS:
+				print_with_timestamp(green('[PASSED] ') + test_case.name)
+			elif test_case.status == TestStatus.TEST_CRASHED:
+				crashed_tests += 1
+				print_with_timestamp(red('[CRASHED] ' + test_case.name))
+				print_log(map(yellow, test_case.log))
+				print_with_timestamp('')
+			else:
+				failed_tests += 1
+				print_with_timestamp(red('[FAILED] ') + test_case.name)
+				print_log(map(yellow, test_case.log))
+				print_with_timestamp('')
+	print_with_timestamp(DIVIDER)
+	fmt = green if test_result.status == TestStatus.SUCCESS else red
+	print_with_timestamp(
+		fmt('Testing complete. %d tests run. %d failed. %d crashed.' %
+		    (total_tests, failed_tests, crashed_tests)))
+	return test_result
diff --git a/tools/testing/kunit/kunit_tool_test.py b/tools/testing/kunit/kunit_tool_test.py
new file mode 100755
index 0000000..4a12baa
--- /dev/null
+++ b/tools/testing/kunit/kunit_tool_test.py
@@ -0,0 +1,206 @@
+#!/usr/bin/python3
+# SPDX-License-Identifier: GPL-2.0
+#
+# A collection of tests for tools/testing/kunit/kunit.py
+#
+# Copyright (C) 2019, Google LLC.
+# Author: Brendan Higgins <brendanhiggins@google.com>
+
+import unittest
+from unittest import mock
+
+import tempfile, shutil # Handling test_tmpdir
+
+import os
+
+import kunit_config
+import kunit_parser
+import kunit_kernel
+import kunit
+
+test_tmpdir = ''
+
+def setUpModule():
+	global test_tmpdir
+	test_tmpdir = tempfile.mkdtemp()
+
+def tearDownModule():
+	shutil.rmtree(test_tmpdir)
+
+def get_absolute_path(path):
+	return os.path.join(os.path.dirname(__file__), path)
+
+class KconfigTest(unittest.TestCase):
+
+	def test_is_subset_of(self):
+		kconfig0 = kunit_config.Kconfig()
+		self.assertTrue(kconfig0.is_subset_of(kconfig0))
+
+		kconfig1 = kunit_config.Kconfig()
+		kconfig1.add_entry(kunit_config.KconfigEntry('CONFIG_TEST=y'))
+		self.assertTrue(kconfig1.is_subset_of(kconfig1))
+		self.assertTrue(kconfig0.is_subset_of(kconfig1))
+		self.assertFalse(kconfig1.is_subset_of(kconfig0))
+
+	def test_read_from_file(self):
+		kconfig = kunit_config.Kconfig()
+		kconfig_path = get_absolute_path(
+			'test_data/test_read_from_file.kconfig')
+
+		kconfig.read_from_file(kconfig_path)
+
+		expected_kconfig = kunit_config.Kconfig()
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('CONFIG_UML=y'))
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('CONFIG_MMU=y'))
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('CONFIG_TEST=y'))
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('CONFIG_EXAMPLE_TEST=y'))
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('# CONFIG_MK8 is not set'))
+
+		self.assertEqual(kconfig.entries(), expected_kconfig.entries())
+
+	def test_write_to_file(self):
+		kconfig_path = os.path.join(test_tmpdir, '.config')
+
+		expected_kconfig = kunit_config.Kconfig()
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('CONFIG_UML=y'))
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('CONFIG_MMU=y'))
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('CONFIG_TEST=y'))
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('CONFIG_EXAMPLE_TEST=y'))
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('# CONFIG_MK8 is not set'))
+
+		expected_kconfig.write_to_file(kconfig_path)
+
+		actual_kconfig = kunit_config.Kconfig()
+		actual_kconfig.read_from_file(kconfig_path)
+
+		self.assertEqual(actual_kconfig.entries(),
+				 expected_kconfig.entries())
+
+class KUnitParserTest(unittest.TestCase):
+
+	def assertContains(self, needle, haystack):
+		for line in haystack:
+			if needle in line:
+				return
+		raise AssertionError('"' +
+			str(needle) + '" not found in "' + str(haystack) + '"!')
+
+	def test_output_isolated_correctly(self):
+		log_path = get_absolute_path(
+			'test_data/test_output_isolated_correctly.log')
+		file = open(log_path)
+		result = kunit_parser.isolate_kunit_output(file.readlines())
+		self.assertContains('TAP version 14\n', result)
+		self.assertContains('	# Subtest: example', result)
+		self.assertContains('	1..2', result)
+		self.assertContains('	ok 1 - example_simple_test', result)
+		self.assertContains('	ok 2 - example_mock_test', result)
+		self.assertContains('ok 1 - example', result)
+		file.close()
+
+	def test_parse_successful_test_log(self):
+		all_passed_log = get_absolute_path(
+			'test_data/test_is_test_passed-all_passed.log')
+		file = open(all_passed_log)
+		result = kunit_parser.parse_run_tests(file.readlines())
+		self.assertEqual(
+			kunit_parser.TestStatus.SUCCESS,
+			result.status)
+		file.close()
+
+	def test_parse_failed_test_log(self):
+		failed_log = get_absolute_path(
+			'test_data/test_is_test_passed-failure.log')
+		file = open(failed_log)
+		result = kunit_parser.parse_run_tests(file.readlines())
+		self.assertEqual(
+			kunit_parser.TestStatus.FAILURE,
+			result.status)
+		file.close()
+
+	def test_no_tests(self):
+		empty_log = get_absolute_path(
+			'test_data/test_is_test_passed-no_tests_run.log')
+		file = open(empty_log)
+		result = kunit_parser.parse_run_tests(
+			kunit_parser.isolate_kunit_output(file.readlines()))
+		self.assertEqual(0, len(result.suites))
+		self.assertEqual(
+			kunit_parser.TestStatus.NO_TESTS,
+			result.status)
+		file.close()
+
+	def test_crashed_test(self):
+		crashed_log = get_absolute_path(
+			'test_data/test_is_test_passed-crash.log')
+		file = open(crashed_log)
+		result = kunit_parser.parse_run_tests(file.readlines())
+		self.assertEqual(
+			kunit_parser.TestStatus.TEST_CRASHED,
+			result.status)
+		file.close()
+
+class StrContains(str):
+	def __eq__(self, other):
+		return self in other
+
+class KUnitMainTest(unittest.TestCase):
+	def setUp(self):
+		path = get_absolute_path('test_data/test_is_test_passed-all_passed.log')
+		file = open(path)
+		all_passed_log = file.readlines()
+		self.print_patch = mock.patch('builtins.print')
+		self.print_mock = self.print_patch.start()
+		self.linux_source_mock = mock.Mock()
+		self.linux_source_mock.build_reconfig = mock.Mock(return_value=True)
+		self.linux_source_mock.build_um_kernel = mock.Mock(return_value=True)
+		self.linux_source_mock.run_kernel = mock.Mock(return_value=all_passed_log)
+
+	def tearDown(self):
+		self.print_patch.stop()
+		pass
+
+	def test_run_passes_args_pass(self):
+		kunit.main(['run'], self.linux_source_mock)
+		assert self.linux_source_mock.build_reconfig.call_count == 1
+		assert self.linux_source_mock.run_kernel.call_count == 1
+		self.print_mock.assert_any_call(StrContains('Testing complete.'))
+
+	def test_run_passes_args_fail(self):
+		self.linux_source_mock.run_kernel = mock.Mock(return_value=[])
+		with self.assertRaises(SystemExit) as e:
+			kunit.main(['run'], self.linux_source_mock)
+		assert type(e.exception) == SystemExit
+		assert e.exception.code == 1
+		assert self.linux_source_mock.build_reconfig.call_count == 1
+		assert self.linux_source_mock.run_kernel.call_count == 1
+		self.print_mock.assert_any_call(StrContains(' 0 tests run'))
+
+	def test_run_raw_output(self):
+		self.linux_source_mock.run_kernel = mock.Mock(return_value=[])
+		kunit.main(['run', '--raw_output'], self.linux_source_mock)
+		assert self.linux_source_mock.build_reconfig.call_count == 1
+		assert self.linux_source_mock.run_kernel.call_count == 1
+		for kall in self.print_mock.call_args_list:
+			assert kall != mock.call(StrContains('Testing complete.'))
+			assert kall != mock.call(StrContains(' 0 tests run'))
+
+	def test_run_timeout(self):
+		timeout = 3453
+		kunit.main(['run', '--timeout', str(timeout)], self.linux_source_mock)
+		assert self.linux_source_mock.build_reconfig.call_count == 1
+		self.linux_source_mock.run_kernel.assert_called_once_with(timeout=timeout)
+		self.print_mock.assert_any_call(StrContains('Testing complete.'))
+
+if __name__ == '__main__':
+	unittest.main()
diff --git a/tools/testing/kunit/test_data/test_is_test_passed-all_passed.log b/tools/testing/kunit/test_data/test_is_test_passed-all_passed.log
new file mode 100644
index 0000000..62ebc02
--- /dev/null
+++ b/tools/testing/kunit/test_data/test_is_test_passed-all_passed.log
@@ -0,0 +1,32 @@
+TAP version 14
+	# Subtest: sysctl_test
+	1..8
+	# sysctl_test_dointvec_null_tbl_data: sysctl_test_dointvec_null_tbl_data passed
+	ok 1 - sysctl_test_dointvec_null_tbl_data
+	# sysctl_test_dointvec_table_maxlen_unset: sysctl_test_dointvec_table_maxlen_unset passed
+	ok 2 - sysctl_test_dointvec_table_maxlen_unset
+	# sysctl_test_dointvec_table_len_is_zero: sysctl_test_dointvec_table_len_is_zero passed
+	ok 3 - sysctl_test_dointvec_table_len_is_zero
+	# sysctl_test_dointvec_table_read_but_position_set: sysctl_test_dointvec_table_read_but_position_set passed
+	ok 4 - sysctl_test_dointvec_table_read_but_position_set
+	# sysctl_test_dointvec_happy_single_positive: sysctl_test_dointvec_happy_single_positive passed
+	ok 5 - sysctl_test_dointvec_happy_single_positive
+	# sysctl_test_dointvec_happy_single_negative: sysctl_test_dointvec_happy_single_negative passed
+	ok 6 - sysctl_test_dointvec_happy_single_negative
+	# sysctl_test_dointvec_single_less_int_min: sysctl_test_dointvec_single_less_int_min passed
+	ok 7 - sysctl_test_dointvec_single_less_int_min
+	# sysctl_test_dointvec_single_greater_int_max: sysctl_test_dointvec_single_greater_int_max passed
+	ok 8 - sysctl_test_dointvec_single_greater_int_max
+kunit sysctl_test: all tests passed
+ok 1 - sysctl_test
+	# Subtest: example
+	1..2
+init_suite
+	# example_simple_test: initializing
+	# example_simple_test: example_simple_test passed
+	ok 1 - example_simple_test
+	# example_mock_test: initializing
+	# example_mock_test: example_mock_test passed
+	ok 2 - example_mock_test
+kunit example: all tests passed
+ok 2 - example
diff --git a/tools/testing/kunit/test_data/test_is_test_passed-crash.log b/tools/testing/kunit/test_data/test_is_test_passed-crash.log
new file mode 100644
index 0000000..0b24987
--- /dev/null
+++ b/tools/testing/kunit/test_data/test_is_test_passed-crash.log
@@ -0,0 +1,69 @@
+printk: console [tty0] enabled
+printk: console [mc-1] enabled
+TAP version 14
+	# Subtest: sysctl_test
+	1..8
+	# sysctl_test_dointvec_null_tbl_data: sysctl_test_dointvec_null_tbl_data passed
+	ok 1 - sysctl_test_dointvec_null_tbl_data
+	# sysctl_test_dointvec_table_maxlen_unset: sysctl_test_dointvec_table_maxlen_unset passed
+	ok 2 - sysctl_test_dointvec_table_maxlen_unset
+	# sysctl_test_dointvec_table_len_is_zero: sysctl_test_dointvec_table_len_is_zero passed
+	ok 3 - sysctl_test_dointvec_table_len_is_zero
+	# sysctl_test_dointvec_table_read_but_position_set: sysctl_test_dointvec_table_read_but_position_set passed
+	ok 4 - sysctl_test_dointvec_table_read_but_position_set
+	# sysctl_test_dointvec_happy_single_positive: sysctl_test_dointvec_happy_single_positive passed
+	ok 5 - sysctl_test_dointvec_happy_single_positive
+	# sysctl_test_dointvec_happy_single_negative: sysctl_test_dointvec_happy_single_negative passed
+	ok 6 - sysctl_test_dointvec_happy_single_negative
+	# sysctl_test_dointvec_single_less_int_min: sysctl_test_dointvec_single_less_int_min passed
+	ok 7 - sysctl_test_dointvec_single_less_int_min
+	# sysctl_test_dointvec_single_greater_int_max: sysctl_test_dointvec_single_greater_int_max passed
+	ok 8 - sysctl_test_dointvec_single_greater_int_max
+kunit sysctl_test: all tests passed
+ok 1 - sysctl_test
+	# Subtest: example
+	1..2
+init_suite
+	# example_simple_test: initializing
+Stack:
+ 6016f7db 6f81bd30 6f81bdd0 60021450
+ 6024b0e8 60021440 60018bbe 16f81bdc0
+ 00000001 6f81bd30 6f81bd20 6f81bdd0
+Call Trace:
+ [<6016f7db>] ? kunit_try_run_case+0xab/0xf0
+ [<60021450>] ? set_signals+0x0/0x60
+ [<60021440>] ? get_signals+0x0/0x10
+ [<60018bbe>] ? kunit_um_run_try_catch+0x5e/0xc0
+ [<60021450>] ? set_signals+0x0/0x60
+ [<60021440>] ? get_signals+0x0/0x10
+ [<60018bb3>] ? kunit_um_run_try_catch+0x53/0xc0
+ [<6016f321>] ? kunit_run_case_catch_errors+0x121/0x1a0
+ [<60018b60>] ? kunit_um_run_try_catch+0x0/0xc0
+ [<600189e0>] ? kunit_um_throw+0x0/0x180
+ [<6016f730>] ? kunit_try_run_case+0x0/0xf0
+ [<6016f600>] ? kunit_catch_run_case+0x0/0x130
+ [<6016edd0>] ? kunit_vprintk+0x0/0x30
+ [<6016ece0>] ? kunit_fail+0x0/0x40
+ [<6016eca0>] ? kunit_abort+0x0/0x40
+ [<6016ed20>] ? kunit_printk_emit+0x0/0xb0
+ [<6016f200>] ? kunit_run_case_catch_errors+0x0/0x1a0
+ [<6016f46e>] ? kunit_run_tests+0xce/0x260
+ [<6005b390>] ? unregister_console+0x0/0x190
+ [<60175b70>] ? suite_kunit_initexample_test_suite+0x0/0x20
+ [<60001cbb>] ? do_one_initcall+0x0/0x197
+ [<60001d47>] ? do_one_initcall+0x8c/0x197
+ [<6005cd20>] ? irq_to_desc+0x0/0x30
+ [<60002005>] ? kernel_init_freeable+0x1b3/0x272
+ [<6005c5ec>] ? printk+0x0/0x9b
+ [<601c0086>] ? kernel_init+0x26/0x160
+ [<60014442>] ? new_thread_handler+0x82/0xc0
+
+	# example_simple_test: kunit test case crashed!
+	# example_simple_test: example_simple_test failed
+	not ok 1 - example_simple_test
+	# example_mock_test: initializing
+	# example_mock_test: example_mock_test passed
+	ok 2 - example_mock_test
+kunit example: one or more tests failed
+not ok 2 - example
+List of all partitions:
diff --git a/tools/testing/kunit/test_data/test_is_test_passed-failure.log b/tools/testing/kunit/test_data/test_is_test_passed-failure.log
new file mode 100644
index 0000000..9e89d32
--- /dev/null
+++ b/tools/testing/kunit/test_data/test_is_test_passed-failure.log
@@ -0,0 +1,36 @@
+TAP version 14
+	# Subtest: sysctl_test
+	1..8
+	# sysctl_test_dointvec_null_tbl_data: sysctl_test_dointvec_null_tbl_data passed
+	ok 1 - sysctl_test_dointvec_null_tbl_data
+	# sysctl_test_dointvec_table_maxlen_unset: sysctl_test_dointvec_table_maxlen_unset passed
+	ok 2 - sysctl_test_dointvec_table_maxlen_unset
+	# sysctl_test_dointvec_table_len_is_zero: sysctl_test_dointvec_table_len_is_zero passed
+	ok 3 - sysctl_test_dointvec_table_len_is_zero
+	# sysctl_test_dointvec_table_read_but_position_set: sysctl_test_dointvec_table_read_but_position_set passed
+	ok 4 - sysctl_test_dointvec_table_read_but_position_set
+	# sysctl_test_dointvec_happy_single_positive: sysctl_test_dointvec_happy_single_positive passed
+	ok 5 - sysctl_test_dointvec_happy_single_positive
+	# sysctl_test_dointvec_happy_single_negative: sysctl_test_dointvec_happy_single_negative passed
+	ok 6 - sysctl_test_dointvec_happy_single_negative
+	# sysctl_test_dointvec_single_less_int_min: sysctl_test_dointvec_single_less_int_min passed
+	ok 7 - sysctl_test_dointvec_single_less_int_min
+	# sysctl_test_dointvec_single_greater_int_max: sysctl_test_dointvec_single_greater_int_max passed
+	ok 8 - sysctl_test_dointvec_single_greater_int_max
+kunit sysctl_test: all tests passed
+ok 1 - sysctl_test
+	# Subtest: example
+	1..2
+init_suite
+	# example_simple_test: initializing
+	# example_simple_test: EXPECTATION FAILED at lib/kunit/example-test.c:30
+	Expected 1 + 1 == 3, but
+		1 + 1 == 2
+		3 == 3
+	# example_simple_test: example_simple_test failed
+	not ok 1 - example_simple_test
+	# example_mock_test: initializing
+	# example_mock_test: example_mock_test passed
+	ok 2 - example_mock_test
+kunit example: one or more tests failed
+not ok 2 - example
diff --git a/tools/testing/kunit/test_data/test_is_test_passed-no_tests_run.log b/tools/testing/kunit/test_data/test_is_test_passed-no_tests_run.log
new file mode 100644
index 0000000..ba69f5c
--- /dev/null
+++ b/tools/testing/kunit/test_data/test_is_test_passed-no_tests_run.log
@@ -0,0 +1,75 @@
+Core dump limits :
+	soft - 0
+	hard - NONE
+Checking environment variables for a tempdir...none found
+Checking if /dev/shm is on tmpfs...OK
+Checking PROT_EXEC mmap in /dev/shm...OK
+Adding 24743936 bytes to physical memory to account for exec-shield gap
+Linux version 4.12.0-rc3-00010-g7319eb35f493-dirty (brendanhiggins@mactruck.svl.corp.google.com) (gcc version 7.3.0 (Debian 7.3.0-5) ) #29 Thu Mar 15 14:57:19 PDT 2018
+Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 14038
+Kernel command line: root=98:0
+PID hash table entries: 256 (order: -1, 2048 bytes)
+Dentry cache hash table entries: 8192 (order: 4, 65536 bytes)
+Inode-cache hash table entries: 4096 (order: 3, 32768 bytes)
+Memory: 27868K/56932K available (1681K kernel code, 480K rwdata, 400K rodata, 89K init, 205K bss, 29064K reserved, 0K cma-reserved)
+SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
+NR_IRQS:15
+clocksource: timer: mask: 0xffffffffffffffff max_cycles: 0x1cd42e205, max_idle_ns: 881590404426 ns
+Calibrating delay loop... 7384.26 BogoMIPS (lpj=36921344)
+pid_max: default: 32768 minimum: 301
+Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
+Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes)
+Checking that host ptys support output SIGIO...Yes
+Checking that host ptys support SIGIO on close...No, enabling workaround
+Using 2.6 host AIO
+clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
+futex hash table entries: 256 (order: 0, 6144 bytes)
+clocksource: Switched to clocksource timer
+console [stderr0] disabled
+mconsole (version 2) initialized on /usr/local/google/home/brendanhiggins/.uml/6Ijecl/mconsole
+Checking host MADV_REMOVE support...OK
+workingset: timestamp_bits=62 max_order=13 bucket_order=0
+Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
+io scheduler noop registered
+io scheduler deadline registered
+io scheduler cfq registered (default)
+io scheduler mq-deadline registered
+io scheduler kyber registered
+Initialized stdio console driver
+Using a channel type which is configured out of UML
+setup_one_line failed for device 1 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 2 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 3 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 4 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 5 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 6 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 7 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 8 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 9 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 10 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 11 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 12 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 13 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 14 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 15 : Configuration failed
+Console initialized on /dev/tty0
+console [tty0] enabled
+console [mc-1] enabled
+List of all partitions:
+No filesystem could mount root, tried:
+
+Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(98,0)
diff --git a/tools/testing/kunit/test_data/test_output_isolated_correctly.log b/tools/testing/kunit/test_data/test_output_isolated_correctly.log
new file mode 100644
index 0000000..94a6b3a
--- /dev/null
+++ b/tools/testing/kunit/test_data/test_output_isolated_correctly.log
@@ -0,0 +1,106 @@
+Linux version 5.1.0-rc7-00061-g04652f1cb4aa0 (brendanhiggins@mactruck.svl.corp.google.com) (gcc version 7.3.0 (Debian 7.3.0-18)) #163 Wed May 8 16:18:20 PDT 2019
+Built 1 zonelists, mobility grouping on.  Total pages: 69906
+Kernel command line: mem=256M root=98:0
+Dentry cache hash table entries: 65536 (order: 7, 524288 bytes)
+Inode-cache hash table entries: 32768 (order: 6, 262144 bytes)
+Memory: 254468K/283500K available (1734K kernel code, 489K rwdata, 396K rodata, 85K init, 216K bss, 29032K reserved, 0K cma-reserved)
+SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
+NR_IRQS: 15
+clocksource: timer: mask: 0xffffffffffffffff max_cycles: 0x1cd42e205, max_idle_ns: 881590404426 ns
+------------[ cut here ]------------
+WARNING: CPU: 0 PID: 0 at kernel/time/clockevents.c:458 clockevents_register_device+0x143/0x160
+posix-timer cpumask == cpu_all_mask, using cpu_possible_mask instead
+CPU: 0 PID: 0 Comm: swapper Not tainted 5.1.0-rc7-00061-g04652f1cb4aa0 #163
+Stack:
+ 6005cc00 60233e18 60233e60 60233e18
+ 60233e60 00000009 00000000 6002a1b4
+ 1ca00000000 60071c23 60233e78 100000000000062
+Call Trace:
+ [<600214c5>] ? os_is_signal_stack+0x15/0x30
+ [<6005c5ec>] ? printk+0x0/0x9b
+ [<6001597e>] ? show_stack+0xbe/0x1c0
+ [<6005cc00>] ? __printk_safe_exit+0x0/0x40
+ [<6002a1b4>] ? __warn+0x144/0x170
+ [<60071c23>] ? clockevents_register_device+0x143/0x160
+ [<60021440>] ? get_signals+0x0/0x10
+ [<6005c5ec>] ? printk+0x0/0x9b
+ [<6002a27b>] ? warn_slowpath_fmt+0x9b/0xb0
+ [<6005c5ec>] ? printk+0x0/0x9b
+ [<6002a1e0>] ? warn_slowpath_fmt+0x0/0xb0
+ [<6005c5ec>] ? printk+0x0/0x9b
+ [<60021440>] ? get_signals+0x0/0x10
+ [<600213f0>] ? block_signals+0x0/0x20
+ [<60071c23>] ? clockevents_register_device+0x143/0x160
+ [<60021440>] ? get_signals+0x0/0x10
+ [<600213f0>] ? block_signals+0x0/0x20
+ [<6005c5ec>] ? printk+0x0/0x9b
+ [<60001bc8>] ? start_kernel+0x477/0x56a
+ [<600036f1>] ? start_kernel_proc+0x46/0x4d
+ [<60014442>] ? new_thread_handler+0x82/0xc0
+
+random: get_random_bytes called from print_oops_end_marker+0x4c/0x60 with crng_init=0
+---[ end trace c83434852b3702d3 ]---
+Calibrating delay loop... 6958.28 BogoMIPS (lpj=34791424)
+pid_max: default: 32768 minimum: 301
+Mount-cache hash table entries: 1024 (order: 1, 8192 bytes)
+Mountpoint-cache hash table entries: 1024 (order: 1, 8192 bytes)
+*** VALIDATE proc ***
+Checking that host ptys support output SIGIO...Yes
+Checking that host ptys support SIGIO on close...No, enabling workaround
+clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
+futex hash table entries: 256 (order: 0, 6144 bytes)
+clocksource: Switched to clocksource timer
+printk: console [stderr0] disabled
+mconsole (version 2) initialized on /usr/local/google/home/brendanhiggins/.uml/VZ2qMm/mconsole
+Checking host MADV_REMOVE support...OK
+workingset: timestamp_bits=62 max_order=16 bucket_order=0
+Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
+io scheduler mq-deadline registered
+io scheduler kyber registered
+Initialized stdio console driver
+Using a channel type which is configured out of UML
+setup_one_line failed for device 1 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 2 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 3 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 4 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 5 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 6 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 7 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 8 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 9 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 10 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 11 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 12 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 13 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 14 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 15 : Configuration failed
+Console initialized on /dev/tty0
+printk: console [tty0] enabled
+printk: console [mc-1] enabled
+TAP version 14
+	# Subtest: example
+	1..2
+init_suite
+	# example_simple_test: initializing
+	# example_simple_test: example_simple_test passed
+	ok 1 - example_simple_test
+	# example_mock_test: initializing
+	# example_mock_test: example_mock_test passed
+	ok 2 - example_mock_test
+kunit example: all tests passed
+ok 1 - example
+List of all partitions:
diff --git a/tools/testing/kunit/test_data/test_read_from_file.kconfig b/tools/testing/kunit/test_data/test_read_from_file.kconfig
new file mode 100644
index 0000000..d2a4928
--- /dev/null
+++ b/tools/testing/kunit/test_data/test_read_from_file.kconfig
@@ -0,0 +1,17 @@
+#
+# Automatically generated file; DO NOT EDIT.
+# User Mode Linux/x86 4.12.0-rc3 Kernel Configuration
+#
+CONFIG_UML=y
+CONFIG_MMU=y
+
+#
+# UML-specific options
+#
+
+#
+# Host processor type and features
+#
+# CONFIG_MK8 is not set
+CONFIG_TEST=y
+CONFIG_EXAMPLE_TEST=y
diff --git a/tools/testing/selftests/dmabuf-heaps/Makefile b/tools/testing/selftests/dmabuf-heaps/Makefile
new file mode 100644
index 0000000..607c2ac
--- /dev/null
+++ b/tools/testing/selftests/dmabuf-heaps/Makefile
@@ -0,0 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0
+CFLAGS += -static -O3 -Wl,-no-as-needed -Wall -I../../../../usr/include
+
+TEST_GEN_PROGS = dmabuf-heap
+
+include ../lib.mk
diff --git a/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c
new file mode 100644
index 0000000..cd5e1f6
--- /dev/null
+++ b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c
@@ -0,0 +1,396 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+
+#include <linux/dma-buf.h>
+#include <drm/drm.h>
+
+#include "../../../../include/uapi/linux/dma-heap.h"
+
+#define DEVPATH "/dev/dma_heap"
+
+static int check_vgem(int fd)
+{
+	drm_version_t version = { 0 };
+	char name[5];
+	int ret;
+
+	version.name_len = 4;
+	version.name = name;
+
+	ret = ioctl(fd, DRM_IOCTL_VERSION, &version);
+	if (ret)
+		return 0;
+
+	return !strcmp(name, "vgem");
+}
+
+static int open_vgem(void)
+{
+	int i, fd;
+	const char *drmstr = "/dev/dri/card";
+
+	fd = -1;
+	for (i = 0; i < 16; i++) {
+		char name[80];
+
+		snprintf(name, 80, "%s%u", drmstr, i);
+
+		fd = open(name, O_RDWR);
+		if (fd < 0)
+			continue;
+
+		if (!check_vgem(fd)) {
+			close(fd);
+			fd = -1;
+			continue;
+		} else {
+			break;
+		}
+	}
+	return fd;
+}
+
+static int import_vgem_fd(int vgem_fd, int dma_buf_fd, uint32_t *handle)
+{
+	struct drm_prime_handle import_handle = {
+		.fd = dma_buf_fd,
+		.flags = 0,
+		.handle = 0,
+	 };
+	int ret;
+
+	ret = ioctl(vgem_fd, DRM_IOCTL_PRIME_FD_TO_HANDLE, &import_handle);
+	if (ret == 0)
+		*handle = import_handle.handle;
+	return ret;
+}
+
+static void close_handle(int vgem_fd, uint32_t handle)
+{
+	struct drm_gem_close close = {
+		.handle = handle,
+	};
+
+	ioctl(vgem_fd, DRM_IOCTL_GEM_CLOSE, &close);
+}
+
+static int dmabuf_heap_open(char *name)
+{
+	int ret, fd;
+	char buf[256];
+
+	ret = snprintf(buf, 256, "%s/%s", DEVPATH, name);
+	if (ret < 0) {
+		printf("snprintf failed!\n");
+		return ret;
+	}
+
+	fd = open(buf, O_RDWR);
+	if (fd < 0)
+		printf("open %s failed!\n", buf);
+	return fd;
+}
+
+static int dmabuf_heap_alloc_fdflags(int fd, size_t len, unsigned int fd_flags,
+				     unsigned int heap_flags, int *dmabuf_fd)
+{
+	struct dma_heap_allocation_data data = {
+		.len = len,
+		.fd = 0,
+		.fd_flags = fd_flags,
+		.heap_flags = heap_flags,
+	};
+	int ret;
+
+	if (!dmabuf_fd)
+		return -EINVAL;
+
+	ret = ioctl(fd, DMA_HEAP_IOCTL_ALLOC, &data);
+	if (ret < 0)
+		return ret;
+	*dmabuf_fd = (int)data.fd;
+	return ret;
+}
+
+static int dmabuf_heap_alloc(int fd, size_t len, unsigned int flags,
+			     int *dmabuf_fd)
+{
+	return dmabuf_heap_alloc_fdflags(fd, len, O_RDWR | O_CLOEXEC, flags,
+					 dmabuf_fd);
+}
+
+static void dmabuf_sync(int fd, int start_stop)
+{
+	struct dma_buf_sync sync = {
+		.flags = start_stop | DMA_BUF_SYNC_RW,
+	};
+	int ret;
+
+	ret = ioctl(fd, DMA_BUF_IOCTL_SYNC, &sync);
+	if (ret)
+		printf("sync failed %d\n", errno);
+}
+
+#define ONE_MEG (1024 * 1024)
+
+static int test_alloc_and_import(char *heap_name)
+{
+	int heap_fd = -1, dmabuf_fd = -1, importer_fd = -1;
+	uint32_t handle = 0;
+	void *p = NULL;
+	int ret;
+
+	printf("Testing heap: %s\n", heap_name);
+
+	heap_fd = dmabuf_heap_open(heap_name);
+	if (heap_fd < 0)
+		return -1;
+
+	printf("Allocating 1 MEG\n");
+	ret = dmabuf_heap_alloc(heap_fd, ONE_MEG, 0, &dmabuf_fd);
+	if (ret) {
+		printf("Allocation Failed!\n");
+		ret = -1;
+		goto out;
+	}
+	/* mmap and write a simple pattern */
+	p = mmap(NULL,
+		 ONE_MEG,
+		 PROT_READ | PROT_WRITE,
+		 MAP_SHARED,
+		 dmabuf_fd,
+		 0);
+	if (p == MAP_FAILED) {
+		printf("mmap() failed: %m\n");
+		ret = -1;
+		goto out;
+	}
+	printf("mmap passed\n");
+
+	dmabuf_sync(dmabuf_fd, DMA_BUF_SYNC_START);
+	memset(p, 1, ONE_MEG / 2);
+	memset((char *)p + ONE_MEG / 2, 0, ONE_MEG / 2);
+	dmabuf_sync(dmabuf_fd, DMA_BUF_SYNC_END);
+
+	importer_fd = open_vgem();
+	if (importer_fd < 0) {
+		ret = importer_fd;
+		printf("Failed to open vgem\n");
+		goto out;
+	}
+
+	ret = import_vgem_fd(importer_fd, dmabuf_fd, &handle);
+	if (ret < 0) {
+		printf("Failed to import buffer\n");
+		goto out;
+	}
+	printf("import passed\n");
+
+	dmabuf_sync(dmabuf_fd, DMA_BUF_SYNC_START);
+	memset(p, 0xff, ONE_MEG);
+	dmabuf_sync(dmabuf_fd, DMA_BUF_SYNC_END);
+	printf("syncs passed\n");
+
+	close_handle(importer_fd, handle);
+	ret = 0;
+
+out:
+	if (p)
+		munmap(p, ONE_MEG);
+	if (importer_fd >= 0)
+		close(importer_fd);
+	if (dmabuf_fd >= 0)
+		close(dmabuf_fd);
+	if (heap_fd >= 0)
+		close(heap_fd);
+
+	return ret;
+}
+
+/* Test the ioctl version compatibility w/ a smaller structure then expected */
+static int dmabuf_heap_alloc_older(int fd, size_t len, unsigned int flags,
+				   int *dmabuf_fd)
+{
+	int ret;
+	unsigned int older_alloc_ioctl;
+	struct dma_heap_allocation_data_smaller {
+		__u64 len;
+		__u32 fd;
+		__u32 fd_flags;
+	} data = {
+		.len = len,
+		.fd = 0,
+		.fd_flags = O_RDWR | O_CLOEXEC,
+	};
+
+	older_alloc_ioctl = _IOWR(DMA_HEAP_IOC_MAGIC, 0x0,
+				  struct dma_heap_allocation_data_smaller);
+	if (!dmabuf_fd)
+		return -EINVAL;
+
+	ret = ioctl(fd, older_alloc_ioctl, &data);
+	if (ret < 0)
+		return ret;
+	*dmabuf_fd = (int)data.fd;
+	return ret;
+}
+
+/* Test the ioctl version compatibility w/ a larger structure then expected */
+static int dmabuf_heap_alloc_newer(int fd, size_t len, unsigned int flags,
+				   int *dmabuf_fd)
+{
+	int ret;
+	unsigned int newer_alloc_ioctl;
+	struct dma_heap_allocation_data_bigger {
+		__u64 len;
+		__u32 fd;
+		__u32 fd_flags;
+		__u64 heap_flags;
+		__u64 garbage1;
+		__u64 garbage2;
+		__u64 garbage3;
+	} data = {
+		.len = len,
+		.fd = 0,
+		.fd_flags = O_RDWR | O_CLOEXEC,
+		.heap_flags = flags,
+		.garbage1 = 0xffffffff,
+		.garbage2 = 0x88888888,
+		.garbage3 = 0x11111111,
+	};
+
+	newer_alloc_ioctl = _IOWR(DMA_HEAP_IOC_MAGIC, 0x0,
+				  struct dma_heap_allocation_data_bigger);
+	if (!dmabuf_fd)
+		return -EINVAL;
+
+	ret = ioctl(fd, newer_alloc_ioctl, &data);
+	if (ret < 0)
+		return ret;
+
+	*dmabuf_fd = (int)data.fd;
+	return ret;
+}
+
+static int test_alloc_compat(char *heap_name)
+{
+	int heap_fd = -1, dmabuf_fd = -1;
+	int ret;
+
+	heap_fd = dmabuf_heap_open(heap_name);
+	if (heap_fd < 0)
+		return -1;
+
+	printf("Testing (theoretical)older alloc compat\n");
+	ret = dmabuf_heap_alloc_older(heap_fd, ONE_MEG, 0, &dmabuf_fd);
+	if (ret) {
+		printf("Older compat allocation failed!\n");
+		ret = -1;
+		goto out;
+	}
+	close(dmabuf_fd);
+
+	printf("Testing (theoretical)newer alloc compat\n");
+	ret = dmabuf_heap_alloc_newer(heap_fd, ONE_MEG, 0, &dmabuf_fd);
+	if (ret) {
+		printf("Newer compat allocation failed!\n");
+		ret = -1;
+		goto out;
+	}
+	printf("Ioctl compatibility tests passed\n");
+out:
+	if (dmabuf_fd >= 0)
+		close(dmabuf_fd);
+	if (heap_fd >= 0)
+		close(heap_fd);
+
+	return ret;
+}
+
+static int test_alloc_errors(char *heap_name)
+{
+	int heap_fd = -1, dmabuf_fd = -1;
+	int ret;
+
+	heap_fd = dmabuf_heap_open(heap_name);
+	if (heap_fd < 0)
+		return -1;
+
+	printf("Testing expected error cases\n");
+	ret = dmabuf_heap_alloc(0, ONE_MEG, 0x111111, &dmabuf_fd);
+	if (!ret) {
+		printf("Did not see expected error (invalid fd)!\n");
+		ret = -1;
+		goto out;
+	}
+
+	ret = dmabuf_heap_alloc(heap_fd, ONE_MEG, 0x111111, &dmabuf_fd);
+	if (!ret) {
+		printf("Did not see expected error (invalid heap flags)!\n");
+		ret = -1;
+		goto out;
+	}
+
+	ret = dmabuf_heap_alloc_fdflags(heap_fd, ONE_MEG,
+					~(O_RDWR | O_CLOEXEC), 0, &dmabuf_fd);
+	if (!ret) {
+		printf("Did not see expected error (invalid fd flags)!\n");
+		ret = -1;
+		goto out;
+	}
+
+	printf("Expected error checking passed\n");
+out:
+	if (dmabuf_fd >= 0)
+		close(dmabuf_fd);
+	if (heap_fd >= 0)
+		close(heap_fd);
+
+	return ret;
+}
+
+int main(void)
+{
+	DIR *d;
+	struct dirent *dir;
+	int ret = -1;
+
+	d = opendir(DEVPATH);
+	if (!d) {
+		printf("No %s directory?\n", DEVPATH);
+		return -1;
+	}
+
+	while ((dir = readdir(d)) != NULL) {
+		if (!strncmp(dir->d_name, ".", 2))
+			continue;
+		if (!strncmp(dir->d_name, "..", 3))
+			continue;
+
+		ret = test_alloc_and_import(dir->d_name);
+		if (ret)
+			break;
+
+		ret = test_alloc_compat(dir->d_name);
+		if (ret)
+			break;
+
+		ret = test_alloc_errors(dir->d_name);
+		if (ret)
+			break;
+	}
+	closedir(d);
+
+	return ret;
+}
diff --git a/tools/testing/selftests/filesystems/incfs/.gitignore b/tools/testing/selftests/filesystems/incfs/.gitignore
new file mode 100644
index 0000000..f0e3cd9
--- /dev/null
+++ b/tools/testing/selftests/filesystems/incfs/.gitignore
@@ -0,0 +1,3 @@
+incfs_test
+incfs_stress
+incfs_perf
diff --git a/tools/testing/selftests/filesystems/incfs/Makefile b/tools/testing/selftests/filesystems/incfs/Makefile
new file mode 100644
index 0000000..f379802
--- /dev/null
+++ b/tools/testing/selftests/filesystems/incfs/Makefile
@@ -0,0 +1,11 @@
+# SPDX-License-Identifier: GPL-2.0
+CFLAGS += -D_FILE_OFFSET_BITS=64 -Wall -Werror -I../.. -I../../../../..
+LDLIBS := -llz4 -lzstd -lcrypto -lpthread
+TEST_GEN_PROGS := incfs_test incfs_stress incfs_perf
+
+include ../../lib.mk
+
+# Put after include ../../lib.mk since that changes $(TEST_GEN_PROGS)
+# Otherwise you get multiple targets, this becomes the default, and it's a mess
+EXTRA_SOURCES := utils.c
+$(TEST_GEN_PROGS) : $(EXTRA_SOURCES)
diff --git a/tools/testing/selftests/filesystems/incfs/incfs_perf.c b/tools/testing/selftests/filesystems/incfs/incfs_perf.c
new file mode 100644
index 0000000..ed36bbd
--- /dev/null
+++ b/tools/testing/selftests/filesystems/incfs/incfs_perf.c
@@ -0,0 +1,717 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2020 Google LLC
+ */
+#include <errno.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <lz4.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <time.h>
+#include <ctype.h>
+#include <unistd.h>
+
+#include "utils.h"
+
+#define err_msg(...)                                                           \
+	do {                                                                   \
+		fprintf(stderr, "%s: (%d) ", TAG, __LINE__);                   \
+		fprintf(stderr, __VA_ARGS__);                                  \
+		fprintf(stderr, " (%s)\n", strerror(errno));                   \
+	} while (false)
+
+#define TAG "incfs_perf"
+
+struct options {
+	int blocks; /* -b number of diff block sizes */
+	bool no_cleanup; /* -c don't clean up after */
+	const char *test_dir; /* -d working directory */
+	const char *file_types; /* -f sScCvV */
+	bool no_native; /* -n don't test native files */
+	bool no_random; /* -r don't do random reads*/
+	bool no_linear; /* -R random reads only */
+	size_t size; /* -s file size as power of 2 */
+	int tries; /* -t times to run test*/
+};
+
+enum flags {
+	SHUFFLE = 1,
+	COMPRESS = 2,
+	VERIFY = 4,
+	LAST_FLAG = 8,
+};
+
+void print_help(void)
+{
+	puts(
+	"incfs_perf. Performance test tool for incfs\n"
+	"\tTests read performance of incfs by creating files of various types\n"
+	"\tflushing caches and then reading them back.\n"
+	"\tEach file is read with different block sizes and average\n"
+	"\tthroughput in megabytes/second and memory usage are reported for\n"
+	"\teach block size\n"
+	"\tNative files are tested for comparison\n"
+	"\tNative files are created in native folder, incfs files are created\n"
+	"\tin src folder which is mounted on dst folder\n"
+	"\n"
+	"\t-bn (default 8) number of different block sizes, starting at 4096\n"
+	"\t                and doubling\n"
+	"\t-c		   don't Clean up - leave files and mount point\n"
+	"\t-d dir          create directories in dir\n"
+	"\t-fs|Sc|Cv|V     restrict which files are created.\n"
+	"\t                s blocks not shuffled, S blocks shuffled\n"
+	"\t                c blocks not compress, C blocks compressed\n"
+	"\t                v files not verified, V files verified\n"
+	"\t                If a letter is omitted, both options are tested\n"
+	"\t                If no letter are given, incfs is not tested\n"
+	"\t-n              Don't test native files\n"
+	"\t-r              No random reads (sequential only)\n"
+	"\t-R              Random reads only (no sequential)\n"
+	"\t-sn (default 30)File size as power of 2\n"
+	"\t-tn (default 5) Number of tries per file. Results are averaged\n"
+	);
+}
+
+int parse_options(int argc, char *const *argv, struct options *options)
+{
+	signed char c;
+
+	/* Set defaults here */
+	*options = (struct options){
+		.blocks = 8,
+		.test_dir = ".",
+		.tries = 5,
+		.size = 30,
+	};
+
+	/* Load options from command line here */
+	while ((c = getopt(argc, argv, "b:cd:f::hnrRs:t:")) != -1) {
+		switch (c) {
+		case 'b':
+			options->blocks = strtol(optarg, NULL, 10);
+			break;
+
+		case 'c':
+			options->no_cleanup = true;
+			break;
+
+		case 'd':
+			options->test_dir = optarg;
+			break;
+
+		case 'f':
+			if (optarg)
+				options->file_types = optarg;
+			else
+				options->file_types = "sS";
+			break;
+
+		case 'h':
+			print_help();
+			exit(0);
+
+		case 'n':
+			options->no_native = true;
+			break;
+
+		case 'r':
+			options->no_random = true;
+			break;
+
+		case 'R':
+			options->no_linear = true;
+			break;
+
+		case 's':
+			options->size = strtol(optarg, NULL, 10);
+			break;
+
+		case 't':
+			options->tries = strtol(optarg, NULL, 10);
+			break;
+
+		default:
+			print_help();
+			return -EINVAL;
+		}
+	}
+
+	options->size = 1L << options->size;
+
+	return 0;
+}
+
+void shuffle(size_t *buffer, size_t size)
+{
+	size_t i;
+
+	for (i = 0; i < size; ++i) {
+		size_t j = random() * (size - i - 1) / RAND_MAX;
+		size_t temp = buffer[i];
+
+		buffer[i] = buffer[j];
+		buffer[j] = temp;
+	}
+}
+
+int get_free_memory(void)
+{
+	FILE *meminfo = fopen("/proc/meminfo", "re");
+	char field[256];
+	char value[256] = {};
+
+	if (!meminfo)
+		return -ENOENT;
+
+	while (fscanf(meminfo, "%[^:]: %s kB\n", field, value) == 2) {
+		if (!strcmp(field, "MemFree"))
+			break;
+		*value = 0;
+	}
+
+	fclose(meminfo);
+
+	if (!*value)
+		return -ENOENT;
+
+	return strtol(value, NULL, 10);
+}
+
+int write_data(int cmd_fd, int dir_fd, const char *name, size_t size, int flags)
+{
+	int fd = openat(dir_fd, name, O_RDWR | O_CLOEXEC);
+	struct incfs_permit_fill permit_fill = {
+		.file_descriptor = fd,
+	};
+	int block_count = 1 + (size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+	size_t *blocks = malloc(sizeof(size_t) * block_count);
+	int error = 0;
+	size_t i;
+	uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE] = {};
+	uint8_t compressed_data[INCFS_DATA_FILE_BLOCK_SIZE] = {};
+	struct incfs_fill_block fill_block = {
+		.compression = COMPRESSION_NONE,
+		.data_len = sizeof(data),
+		.data = ptr_to_u64(data),
+	};
+
+	if (!blocks) {
+		err_msg("Out of memory");
+		error = -errno;
+		goto out;
+	}
+
+	if (fd == -1) {
+		err_msg("Could not open file for writing %s", name);
+		error = -errno;
+		goto out;
+	}
+
+	if (ioctl(cmd_fd, INCFS_IOC_PERMIT_FILL, &permit_fill)) {
+		err_msg("Failed to call PERMIT_FILL");
+		error = -errno;
+		goto out;
+	}
+
+	for (i = 0; i < block_count; ++i)
+		blocks[i] = i;
+
+	if (flags & SHUFFLE)
+		shuffle(blocks, block_count);
+
+	if (flags & COMPRESS) {
+		size_t comp_size = LZ4_compress_default(
+			(char *)data, (char *)compressed_data, sizeof(data),
+			ARRAY_SIZE(compressed_data));
+
+		if (comp_size <= 0) {
+			error = -EBADMSG;
+			goto out;
+		}
+		fill_block.compression = COMPRESSION_LZ4;
+		fill_block.data = ptr_to_u64(compressed_data);
+		fill_block.data_len = comp_size;
+	}
+
+	for (i = 0; i < block_count; ++i) {
+		struct incfs_fill_blocks fill_blocks = {
+			.count = 1,
+			.fill_blocks = ptr_to_u64(&fill_block),
+		};
+
+		fill_block.block_index = blocks[i];
+		int written = ioctl(fd, INCFS_IOC_FILL_BLOCKS, &fill_blocks);
+
+		if (written != 1) {
+			error = -errno;
+			err_msg("Failed to write block %lu in file %s", i,
+				name);
+			break;
+		}
+	}
+
+out:
+	free(blocks);
+	close(fd);
+	sync();
+	return error;
+}
+
+int measure_read_throughput_internal(const char *tag, int dir, const char *name,
+				     const struct options *options, bool random)
+{
+	int block;
+
+	if (random)
+		printf("%32s(random)", tag);
+	else
+		printf("%40s", tag);
+
+	for (block = 0; block < options->blocks; ++block) {
+		size_t buffer_size;
+		char *buffer;
+		int try;
+		double time = 0;
+		double throughput;
+		int memory = 0;
+
+		buffer_size = 1 << (block + 12);
+		buffer = malloc(buffer_size);
+
+		for (try = 0; try < options->tries; ++try) {
+			int err;
+			struct timespec start_time, end_time;
+			off_t i;
+			int fd;
+			size_t offsets_size = options->size / buffer_size;
+			size_t *offsets =
+				malloc(offsets_size * sizeof(*offsets));
+			int start_memory, end_memory;
+
+			if (!offsets) {
+				err_msg("Not enough memory");
+				return -ENOMEM;
+			}
+
+			for (i = 0; i < offsets_size; ++i)
+				offsets[i] = i * buffer_size;
+
+			if (random)
+				shuffle(offsets, offsets_size);
+
+			err = drop_caches();
+			if (err) {
+				err_msg("Failed to drop caches");
+				return err;
+			}
+
+			start_memory = get_free_memory();
+			if (start_memory < 0) {
+				err_msg("Failed to get start memory");
+				return start_memory;
+			}
+
+			fd = openat(dir, name, O_RDONLY | O_CLOEXEC);
+			if (fd == -1) {
+				err_msg("Failed to open file");
+				return err;
+			}
+
+			err = clock_gettime(CLOCK_MONOTONIC, &start_time);
+			if (err) {
+				err_msg("Failed to get start time");
+				return err;
+			}
+
+			for (i = 0; i < offsets_size; ++i)
+				if (pread(fd, buffer, buffer_size,
+					  offsets[i]) != buffer_size) {
+					err_msg("Failed to read file");
+					err = -errno;
+					goto fail;
+				}
+
+			err = clock_gettime(CLOCK_MONOTONIC, &end_time);
+			if (err) {
+				err_msg("Failed to get start time");
+				goto fail;
+			}
+
+			end_memory = get_free_memory();
+			if (end_memory < 0) {
+				err_msg("Failed to get end memory");
+				return end_memory;
+			}
+
+			time += end_time.tv_sec - start_time.tv_sec;
+			time += (end_time.tv_nsec - start_time.tv_nsec) / 1e9;
+
+			close(fd);
+			fd = -1;
+			memory += start_memory - end_memory;
+
+fail:
+			free(offsets);
+			close(fd);
+			if (err)
+				return err;
+		}
+
+		throughput = options->size * options->tries / time;
+		printf("%10.3e %10d", throughput, memory / options->tries);
+		free(buffer);
+	}
+
+	printf("\n");
+	return 0;
+}
+
+int measure_read_throughput(const char *tag, int dir, const char *name,
+			    const struct options *options)
+{
+	int err = 0;
+
+	if (!options->no_linear)
+		err = measure_read_throughput_internal(tag, dir, name, options,
+						       false);
+
+	if (!err && !options->no_random)
+		err = measure_read_throughput_internal(tag, dir, name, options,
+						       true);
+	return err;
+}
+
+int test_native_file(int dir, const struct options *options)
+{
+	const char *name = "file";
+	int fd;
+	char buffer[4096] = {};
+	off_t i;
+	int err;
+
+	fd = openat(dir, name, O_CREAT | O_WRONLY | O_CLOEXEC, 0600);
+	if (fd == -1) {
+		err_msg("Could not open native file");
+		return -errno;
+	}
+
+	for (i = 0; i < options->size; i += sizeof(buffer))
+		if (pwrite(fd, buffer, sizeof(buffer), i) != sizeof(buffer)) {
+			err_msg("Failed to write file");
+			err = -errno;
+			goto fail;
+		}
+
+	close(fd);
+	sync();
+	fd = -1;
+
+	err = measure_read_throughput("native", dir, name, options);
+
+fail:
+	close(fd);
+	return err;
+}
+
+struct hash_block {
+	char data[INCFS_DATA_FILE_BLOCK_SIZE];
+};
+
+static struct hash_block *build_mtree(size_t size, char *root_hash,
+				      int *mtree_block_count)
+{
+	char data[INCFS_DATA_FILE_BLOCK_SIZE] = {};
+	const int digest_size = SHA256_DIGEST_SIZE;
+	const int hash_per_block = INCFS_DATA_FILE_BLOCK_SIZE / digest_size;
+	int block_count = 0;
+	int hash_block_count = 0;
+	int total_tree_block_count = 0;
+	int tree_lvl_index[INCFS_MAX_MTREE_LEVELS] = {};
+	int tree_lvl_count[INCFS_MAX_MTREE_LEVELS] = {};
+	int levels_count = 0;
+	int i, level;
+	struct hash_block *mtree;
+
+	if (size == 0)
+		return 0;
+
+	block_count = 1 + (size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+	hash_block_count = block_count;
+	for (i = 0; hash_block_count > 1; i++) {
+		hash_block_count = (hash_block_count + hash_per_block - 1) /
+				   hash_per_block;
+		tree_lvl_count[i] = hash_block_count;
+		total_tree_block_count += hash_block_count;
+	}
+	levels_count = i;
+
+	for (i = 0; i < levels_count; i++) {
+		int prev_lvl_base = (i == 0) ? total_tree_block_count :
+					       tree_lvl_index[i - 1];
+
+		tree_lvl_index[i] = prev_lvl_base - tree_lvl_count[i];
+	}
+
+	*mtree_block_count = total_tree_block_count;
+	mtree = calloc(total_tree_block_count, sizeof(*mtree));
+	/* Build level 0 hashes. */
+	for (i = 0; i < block_count; i++) {
+		int block_index = tree_lvl_index[0] + i / hash_per_block;
+		int block_off = (i % hash_per_block) * digest_size;
+		char *hash_ptr = mtree[block_index].data + block_off;
+
+		sha256(data, INCFS_DATA_FILE_BLOCK_SIZE, hash_ptr);
+	}
+
+	/* Build higher levels of hash tree. */
+	for (level = 1; level < levels_count; level++) {
+		int prev_lvl_base = tree_lvl_index[level - 1];
+		int prev_lvl_count = tree_lvl_count[level - 1];
+
+		for (i = 0; i < prev_lvl_count; i++) {
+			int block_index =
+				i / hash_per_block + tree_lvl_index[level];
+			int block_off = (i % hash_per_block) * digest_size;
+			char *hash_ptr = mtree[block_index].data + block_off;
+
+			sha256(mtree[i + prev_lvl_base].data,
+			       INCFS_DATA_FILE_BLOCK_SIZE, hash_ptr);
+		}
+	}
+
+	/* Calculate root hash from the top block */
+	sha256(mtree[0].data, INCFS_DATA_FILE_BLOCK_SIZE, root_hash);
+
+	return mtree;
+}
+
+static int load_hash_tree(int cmd_fd, int dir, const char *name,
+			  struct hash_block *mtree, int mtree_block_count)
+{
+	int err;
+	int i;
+	int fd;
+	struct incfs_fill_block *fill_block_array =
+		calloc(mtree_block_count, sizeof(struct incfs_fill_block));
+	struct incfs_fill_blocks fill_blocks = {
+		.count = mtree_block_count,
+		.fill_blocks = ptr_to_u64(fill_block_array),
+	};
+	struct incfs_permit_fill permit_fill;
+
+	if (!fill_block_array)
+		return -ENOMEM;
+
+	for (i = 0; i < fill_blocks.count; i++) {
+		fill_block_array[i] = (struct incfs_fill_block){
+			.block_index = i,
+			.data_len = INCFS_DATA_FILE_BLOCK_SIZE,
+			.data = ptr_to_u64(mtree[i].data),
+			.flags = INCFS_BLOCK_FLAGS_HASH
+		};
+	}
+
+	fd = openat(dir, name, O_RDONLY | O_CLOEXEC);
+	if (fd < 0) {
+		err = errno;
+		goto failure;
+	}
+
+	permit_fill.file_descriptor = fd;
+	if (ioctl(cmd_fd, INCFS_IOC_PERMIT_FILL, &permit_fill)) {
+		err_msg("Failed to call PERMIT_FILL");
+		err = -errno;
+		goto failure;
+	}
+
+	err = ioctl(fd, INCFS_IOC_FILL_BLOCKS, &fill_blocks);
+	close(fd);
+	if (err < fill_blocks.count)
+		err = errno;
+	else
+		err = 0;
+
+failure:
+	free(fill_block_array);
+	return err;
+}
+
+int test_incfs_file(int dst_dir, const struct options *options, int flags)
+{
+	int cmd_file = openat(dst_dir, INCFS_PENDING_READS_FILENAME,
+			      O_RDONLY | O_CLOEXEC);
+	int err;
+	char name[4];
+	incfs_uuid_t id;
+	char tag[256];
+
+	snprintf(name, sizeof(name), "%c%c%c",
+		 flags & SHUFFLE ? 'S' : 's',
+		 flags & COMPRESS ? 'C' : 'c',
+		 flags & VERIFY ? 'V' : 'v');
+
+	if (cmd_file == -1) {
+		err_msg("Could not open command file");
+		return -errno;
+	}
+
+	if (flags & VERIFY) {
+		char root_hash[INCFS_MAX_HASH_SIZE];
+		int mtree_block_count;
+		struct hash_block *mtree = build_mtree(options->size, root_hash,
+						       &mtree_block_count);
+
+		if (!mtree) {
+			err_msg("Failed to build hash tree");
+			err = -ENOMEM;
+			goto fail;
+		}
+
+		err = crypto_emit_file(cmd_file, NULL, name, &id, options->size,
+				       root_hash, "add_data");
+
+		if (!err)
+			err = load_hash_tree(cmd_file, dst_dir, name, mtree,
+					     mtree_block_count);
+
+		free(mtree);
+	} else
+		err = emit_file(cmd_file, NULL, name, &id, options->size, NULL);
+
+	if (err) {
+		err_msg("Failed to create file %s", name);
+		goto fail;
+	}
+
+	if (write_data(cmd_file, dst_dir, name, options->size, flags))
+		goto fail;
+
+	snprintf(tag, sizeof(tag), "incfs%s%s%s",
+		 flags & SHUFFLE ? "(shuffle)" : "",
+		 flags & COMPRESS ? "(compress)" : "",
+		 flags & VERIFY ? "(verify)" : "");
+
+	err = measure_read_throughput(tag, dst_dir, name, options);
+
+fail:
+	close(cmd_file);
+	return err;
+}
+
+bool skip(struct options const *options, int flag, char c)
+{
+	if (!options->file_types)
+		return false;
+
+	if (flag && strchr(options->file_types, tolower(c)))
+		return true;
+
+	if (!flag && strchr(options->file_types, toupper(c)))
+		return true;
+
+	return false;
+}
+
+int main(int argc, char *const *argv)
+{
+	struct options options;
+	int err;
+	const char *native_dir = "native";
+	const char *src_dir = "src";
+	const char *dst_dir = "dst";
+	int native_dir_fd = -1;
+	int src_dir_fd = -1;
+	int dst_dir_fd = -1;
+	int block;
+	int flags;
+
+	err = parse_options(argc, argv, &options);
+	if (err)
+		return err;
+
+	err = chdir(options.test_dir);
+	if (err) {
+		err_msg("Failed to change to %s", options.test_dir);
+		return -errno;
+	}
+
+	/* Clean up any interrupted previous runs */
+	while (!umount(dst_dir))
+		;
+
+	err = remove_dir(native_dir) || remove_dir(src_dir) ||
+	      remove_dir(dst_dir);
+	if (err)
+		return err;
+
+	err = mkdir(native_dir, 0700);
+	if (err) {
+		err_msg("Failed to make directory %s", src_dir);
+		err = -errno;
+		goto cleanup;
+	}
+
+	err = mkdir(src_dir, 0700);
+	if (err) {
+		err_msg("Failed to make directory %s", src_dir);
+		err = -errno;
+		goto cleanup;
+	}
+
+	err = mkdir(dst_dir, 0700);
+	if (err) {
+		err_msg("Failed to make directory %s", src_dir);
+		err = -errno;
+		goto cleanup;
+	}
+
+	err = mount_fs_opt(dst_dir, src_dir, "readahead=0,rlog_pages=0", 0);
+	if (err) {
+		err_msg("Failed to mount incfs");
+		goto cleanup;
+	}
+
+	native_dir_fd = open(native_dir, O_RDONLY | O_CLOEXEC);
+	src_dir_fd = open(src_dir, O_RDONLY | O_CLOEXEC);
+	dst_dir_fd = open(dst_dir, O_RDONLY | O_CLOEXEC);
+	if (native_dir_fd == -1 || src_dir_fd == -1 || dst_dir_fd == -1) {
+		err_msg("Failed to open native, src or dst dir");
+		err = -errno;
+		goto cleanup;
+	}
+
+	printf("%40s", "");
+	for (block = 0; block < options.blocks; ++block)
+		printf("%21d", 1 << (block + 12));
+	printf("\n");
+
+	if (!err && !options.no_native)
+		err = test_native_file(native_dir_fd, &options);
+
+	for (flags = 0; flags < LAST_FLAG && !err; ++flags) {
+		if (skip(&options, flags & SHUFFLE, 's') ||
+		    skip(&options, flags & COMPRESS, 'c') ||
+		    skip(&options, flags & VERIFY, 'v'))
+			continue;
+		err = test_incfs_file(dst_dir_fd, &options, flags);
+	}
+
+cleanup:
+	close(native_dir_fd);
+	close(src_dir_fd);
+	close(dst_dir_fd);
+	if (!options.no_cleanup) {
+		umount(dst_dir);
+		remove_dir(native_dir);
+		remove_dir(dst_dir);
+		remove_dir(src_dir);
+	}
+
+	return err;
+}
diff --git a/tools/testing/selftests/filesystems/incfs/incfs_stress.c b/tools/testing/selftests/filesystems/incfs/incfs_stress.c
new file mode 100644
index 0000000..a1d4917
--- /dev/null
+++ b/tools/testing/selftests/filesystems/incfs/incfs_stress.c
@@ -0,0 +1,322 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2020 Google LLC
+ */
+#include <errno.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <pthread.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "utils.h"
+
+#define err_msg(...)                                                           \
+	do {                                                                   \
+		fprintf(stderr, "%s: (%d) ", TAG, __LINE__);                   \
+		fprintf(stderr, __VA_ARGS__);                                  \
+		fprintf(stderr, " (%s)\n", strerror(errno));                   \
+	} while (false)
+
+#define TAG "incfs_stress"
+
+struct options {
+	bool no_cleanup; /* -c */
+	const char *test_dir; /* -d */
+	unsigned int rng_seed; /* -g */
+	int num_reads; /* -n */
+	int readers; /* -r */
+	int size; /* -s */
+	int timeout; /* -t */
+};
+
+struct read_data {
+	const char *filename;
+	int dir_fd;
+	size_t filesize;
+	int num_reads;
+	unsigned int rng_seed;
+};
+
+int cancel_threads;
+
+int parse_options(int argc, char *const *argv, struct options *options)
+{
+	signed char c;
+
+	/* Set defaults here */
+	*options = (struct options){
+		.test_dir = ".",
+		.num_reads = 1000,
+		.readers = 10,
+		.size = 10,
+	};
+
+	/* Load options from command line here */
+	while ((c = getopt(argc, argv, "cd:g:n:r:s:t:")) != -1) {
+		switch (c) {
+		case 'c':
+			options->no_cleanup = true;
+			break;
+
+		case 'd':
+			options->test_dir = optarg;
+			break;
+
+		case 'g':
+			options->rng_seed = strtol(optarg, NULL, 10);
+			break;
+
+		case 'n':
+			options->num_reads = strtol(optarg, NULL, 10);
+			break;
+
+		case 'r':
+			options->readers = strtol(optarg, NULL, 10);
+			break;
+
+		case 's':
+			options->size = strtol(optarg, NULL, 10);
+			break;
+
+		case 't':
+			options->timeout = strtol(optarg, NULL, 10);
+			break;
+		}
+	}
+
+	return 0;
+}
+
+void *reader(void *data)
+{
+	struct read_data *read_data = (struct read_data *)data;
+	int i;
+	int fd = -1;
+	void *buffer = malloc(read_data->filesize);
+
+	if (!buffer) {
+		err_msg("Failed to alloc read buffer");
+		goto out;
+	}
+
+	fd = openat(read_data->dir_fd, read_data->filename,
+		    O_RDONLY | O_CLOEXEC);
+	if (fd == -1) {
+		err_msg("Failed to open file");
+		goto out;
+	}
+
+	for (i = 0; i < read_data->num_reads && !cancel_threads; ++i) {
+		off_t offset = rnd(read_data->filesize, &read_data->rng_seed);
+		size_t count =
+			rnd(read_data->filesize - offset, &read_data->rng_seed);
+		ssize_t err = pread(fd, buffer, count, offset);
+
+		if (err != count)
+			err_msg("failed to read with value %lu", err);
+	}
+
+out:
+	close(fd);
+	free(read_data);
+	free(buffer);
+	return NULL;
+}
+
+int write_data(int cmd_fd, int dir_fd, const char *name, size_t size)
+{
+	int fd = openat(dir_fd, name, O_RDWR | O_CLOEXEC);
+	struct incfs_permit_fill permit_fill = {
+		.file_descriptor = fd,
+	};
+	int error = 0;
+	int i;
+	int block_count = 1 + (size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+
+	if (fd == -1) {
+		err_msg("Could not open file for writing %s", name);
+		return -errno;
+	}
+
+	if (ioctl(cmd_fd, INCFS_IOC_PERMIT_FILL, &permit_fill)) {
+		err_msg("Failed to call PERMIT_FILL");
+		error = -errno;
+		goto out;
+	}
+
+	for (i = 0; i < block_count; ++i) {
+		uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE] = {};
+		size_t block_size =
+			size > i * INCFS_DATA_FILE_BLOCK_SIZE ?
+				INCFS_DATA_FILE_BLOCK_SIZE :
+				size - (i * INCFS_DATA_FILE_BLOCK_SIZE);
+		struct incfs_fill_block fill_block = {
+			.compression = COMPRESSION_NONE,
+			.block_index = i,
+			.data_len = block_size,
+			.data = ptr_to_u64(data),
+		};
+		struct incfs_fill_blocks fill_blocks = {
+			.count = 1,
+			.fill_blocks = ptr_to_u64(&fill_block),
+		};
+		int written = ioctl(fd, INCFS_IOC_FILL_BLOCKS, &fill_blocks);
+
+		if (written != 1) {
+			error = -errno;
+			err_msg("Failed to write block %d in file %s", i, name);
+			break;
+		}
+	}
+out:
+	close(fd);
+	return error;
+}
+
+int test_files(int src_dir, int dst_dir, struct options const *options)
+{
+	unsigned int seed = options->rng_seed;
+	int cmd_file = openat(dst_dir, INCFS_PENDING_READS_FILENAME,
+			      O_RDONLY | O_CLOEXEC);
+	int err;
+	const char *name = "001";
+	incfs_uuid_t id;
+	size_t size;
+	int i;
+	pthread_t *threads = NULL;
+
+	size = 1 << (rnd(options->size, &seed) + 12);
+	size += rnd(size, &seed);
+
+	if (cmd_file == -1) {
+		err_msg("Could not open command file");
+		return -errno;
+	}
+
+	err = emit_file(cmd_file, NULL, name, &id, size, NULL);
+	if (err) {
+		err_msg("Failed to create file %s", name);
+		return err;
+	}
+
+	threads = malloc(sizeof(pthread_t) * options->readers);
+	if (!threads) {
+		err_msg("Could not allocate memory for threads");
+		return -ENOMEM;
+	}
+
+	for (i = 0; i < options->readers; ++i) {
+		struct read_data *read_data = malloc(sizeof(*read_data));
+
+		if (!read_data) {
+			err_msg("Failed to allocate read_data");
+			err = -ENOMEM;
+			break;
+		}
+
+		*read_data = (struct read_data){
+			.filename = name,
+			.dir_fd = dst_dir,
+			.filesize = size,
+			.num_reads = options->num_reads,
+			.rng_seed = seed,
+		};
+
+		rnd(0, &seed);
+
+		err = pthread_create(threads + i, 0, reader, read_data);
+		if (err) {
+			err_msg("Failed to create thread");
+			free(read_data);
+			break;
+		}
+	}
+
+	if (err)
+		cancel_threads = 1;
+	else
+		err = write_data(cmd_file, dst_dir, name, size);
+
+	for (; i > 0; --i) {
+		if (pthread_join(threads[i - 1], NULL)) {
+			err_msg("FATAL: failed to join thread");
+			exit(-errno);
+		}
+	}
+
+	free(threads);
+	close(cmd_file);
+	return err;
+}
+
+int main(int argc, char *const *argv)
+{
+	struct options options;
+	int err;
+	const char *src_dir = "src";
+	const char *dst_dir = "dst";
+	int src_dir_fd = -1;
+	int dst_dir_fd = -1;
+
+	err = parse_options(argc, argv, &options);
+	if (err)
+		return err;
+
+	err = chdir(options.test_dir);
+	if (err) {
+		err_msg("Failed to change to %s", options.test_dir);
+		return -errno;
+	}
+
+	err = remove_dir(src_dir) || remove_dir(dst_dir);
+	if (err)
+		return err;
+
+	err = mkdir(src_dir, 0700);
+	if (err) {
+		err_msg("Failed to make directory %s", src_dir);
+		err = -errno;
+		goto cleanup;
+	}
+
+	err = mkdir(dst_dir, 0700);
+	if (err) {
+		err_msg("Failed to make directory %s", src_dir);
+		err = -errno;
+		goto cleanup;
+	}
+
+	err = mount_fs(dst_dir, src_dir, options.timeout);
+	if (err) {
+		err_msg("Failed to mount incfs");
+		goto cleanup;
+	}
+
+	src_dir_fd = open(src_dir, O_RDONLY | O_CLOEXEC);
+	dst_dir_fd = open(dst_dir, O_RDONLY | O_CLOEXEC);
+	if (src_dir_fd == -1 || dst_dir_fd == -1) {
+		err_msg("Failed to open src or dst dir");
+		err = -errno;
+		goto cleanup;
+	}
+
+	err = test_files(src_dir_fd, dst_dir_fd, &options);
+
+cleanup:
+	close(src_dir_fd);
+	close(dst_dir_fd);
+	if (!options.no_cleanup) {
+		umount(dst_dir);
+		remove_dir(dst_dir);
+		remove_dir(src_dir);
+	}
+
+	return err;
+}
diff --git a/tools/testing/selftests/filesystems/incfs/incfs_test.c b/tools/testing/selftests/filesystems/incfs/incfs_test.c
new file mode 100644
index 0000000..6db0935
--- /dev/null
+++ b/tools/testing/selftests/filesystems/incfs/incfs_test.c
@@ -0,0 +1,3606 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2018 Google LLC
+ */
+#include <alloca.h>
+#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <lz4.h>
+#include <poll.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+#include <zstd.h>
+
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/xattr.h>
+
+#include <linux/random.h>
+#include <linux/unistd.h>
+
+#include <kselftest.h>
+
+#include "utils.h"
+
+#define TEST_FAILURE 1
+#define TEST_SUCCESS 0
+
+#define INCFS_ROOT_INODE 0
+
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+#define le16_to_cpu(x)          (x)
+#define le32_to_cpu(x)          (x)
+#define le64_to_cpu(x)          (x)
+#else
+#error Big endian not supported!
+#endif
+
+struct {
+	int file;
+	int test;
+	bool verbose;
+} options;
+
+#define TESTCOND(condition)						\
+	do {								\
+		if (!(condition)) {					\
+			ksft_print_msg("%s failed %d\n",		\
+				       __func__, __LINE__);		\
+			goto out;					\
+		} else if (options.verbose)				\
+			ksft_print_msg("%s succeeded %d\n",		\
+				       __func__, __LINE__);		\
+	} while (false)
+
+#define TEST(statement, condition)					\
+	do {								\
+		statement;						\
+		TESTCOND(condition);					\
+	} while (false)
+
+#define TESTEQUAL(statement, res)					\
+	TESTCOND((statement) == (res))
+
+#define TESTNE(statement, res)					\
+	TESTCOND((statement) != (res))
+
+struct hash_block {
+	char data[INCFS_DATA_FILE_BLOCK_SIZE];
+};
+
+struct test_signature {
+	void *data;
+	size_t size;
+
+	char add_data[100];
+	size_t add_data_size;
+};
+
+struct test_file {
+	int index;
+	incfs_uuid_t id;
+	char *name;
+	off_t size;
+	char root_hash[INCFS_MAX_HASH_SIZE];
+	struct hash_block *mtree;
+	int mtree_block_count;
+	struct test_signature sig;
+};
+
+struct test_files_set {
+	struct test_file *files;
+	int files_count;
+};
+
+struct linux_dirent64 {
+	uint64_t       d_ino;
+	int64_t        d_off;
+	unsigned short d_reclen;
+	unsigned char  d_type;
+	char	       d_name[0];
+} __packed;
+
+struct test_files_set get_test_files_set(void)
+{
+	static struct test_file files[] = {
+		{ .index = 0, .name = "file_one_byte", .size = 1 },
+		{ .index = 1,
+		  .name = "file_one_block",
+		  .size = INCFS_DATA_FILE_BLOCK_SIZE },
+		{ .index = 2,
+		  .name = "file_one_and_a_half_blocks",
+		  .size = INCFS_DATA_FILE_BLOCK_SIZE +
+			  INCFS_DATA_FILE_BLOCK_SIZE / 2 },
+		{ .index = 3,
+		  .name = "file_three",
+		  .size = 300 * INCFS_DATA_FILE_BLOCK_SIZE + 3 },
+		{ .index = 4,
+		  .name = "file_four",
+		  .size = 400 * INCFS_DATA_FILE_BLOCK_SIZE + 7 },
+		{ .index = 5,
+		  .name = "file_five",
+		  .size = 500 * INCFS_DATA_FILE_BLOCK_SIZE + 7 },
+		{ .index = 6,
+		  .name = "file_six",
+		  .size = 600 * INCFS_DATA_FILE_BLOCK_SIZE + 7 },
+		{ .index = 7,
+		  .name = "file_seven",
+		  .size = 700 * INCFS_DATA_FILE_BLOCK_SIZE + 7 },
+		{ .index = 8,
+		  .name = "file_eight",
+		  .size = 800 * INCFS_DATA_FILE_BLOCK_SIZE + 7 },
+		{ .index = 9,
+		  .name = "file_nine",
+		  .size = 900 * INCFS_DATA_FILE_BLOCK_SIZE + 7 },
+		{ .index = 10, .name = "file_big", .size = 500 * 1024 * 1024 }
+	};
+
+	if (options.file)
+		return (struct test_files_set) {
+			.files = files + options.file - 1,
+			.files_count = 1,
+		};
+
+	return (struct test_files_set){ .files = files,
+					.files_count = ARRAY_SIZE(files) };
+}
+
+struct test_files_set get_small_test_files_set(void)
+{
+	static struct test_file files[] = {
+		{ .index = 0, .name = "file_one_byte", .size = 1 },
+		{ .index = 1,
+		  .name = "file_one_block",
+		  .size = INCFS_DATA_FILE_BLOCK_SIZE },
+		{ .index = 2,
+		  .name = "file_one_and_a_half_blocks",
+		  .size = INCFS_DATA_FILE_BLOCK_SIZE +
+			  INCFS_DATA_FILE_BLOCK_SIZE / 2 },
+		{ .index = 3,
+		  .name = "file_three",
+		  .size = 300 * INCFS_DATA_FILE_BLOCK_SIZE + 3 },
+		{ .index = 4,
+		  .name = "file_four",
+		  .size = 400 * INCFS_DATA_FILE_BLOCK_SIZE + 7 }
+	};
+	return (struct test_files_set){ .files = files,
+					.files_count = ARRAY_SIZE(files) };
+}
+
+static int get_file_block_seed(int file, int block)
+{
+	return 7919 * file + block;
+}
+
+static loff_t min(loff_t a, loff_t b)
+{
+	return a < b ? a : b;
+}
+
+static pid_t flush_and_fork(void)
+{
+	fflush(stdout);
+	return fork();
+}
+
+static void print_error(char *msg)
+{
+	ksft_print_msg("%s: %s\n", msg, strerror(errno));
+}
+
+static int wait_for_process(pid_t pid)
+{
+	int status;
+	int wait_res;
+
+	wait_res = waitpid(pid, &status, 0);
+	if (wait_res <= 0) {
+		print_error("Can't wait for the child");
+		return -EINVAL;
+	}
+	if (!WIFEXITED(status)) {
+		ksft_print_msg("Unexpected child status pid=%d\n", pid);
+		return -EINVAL;
+	}
+	status = WEXITSTATUS(status);
+	if (status != 0)
+		return status;
+	return 0;
+}
+
+static void rnd_buf(uint8_t *data, size_t len, unsigned int seed)
+{
+	int i;
+
+	for (i = 0; i < len; i++) {
+		seed = 1103515245 * seed + 12345;
+		data[i] = (uint8_t)(seed >> (i % 13));
+	}
+}
+
+char *bin2hex(char *dst, const void *src, size_t count)
+{
+	const unsigned char *_src = src;
+	static const char hex_asc[] = "0123456789abcdef";
+
+	while (count--) {
+		unsigned char x = *_src++;
+
+		*dst++ = hex_asc[(x & 0xf0) >> 4];
+		*dst++ = hex_asc[(x & 0x0f)];
+	}
+	*dst = 0;
+	return dst;
+}
+
+static char *get_index_filename(const char *mnt_dir, incfs_uuid_t id)
+{
+	char path[FILENAME_MAX];
+	char str_id[1 + 2 * sizeof(id)];
+
+	bin2hex(str_id, id.bytes, sizeof(id.bytes));
+	snprintf(path, ARRAY_SIZE(path), "%s/.index/%s", mnt_dir, str_id);
+
+	return strdup(path);
+}
+
+static char *get_incomplete_filename(const char *mnt_dir, incfs_uuid_t id)
+{
+	char path[FILENAME_MAX];
+	char str_id[1 + 2 * sizeof(id)];
+
+	bin2hex(str_id, id.bytes, sizeof(id.bytes));
+	snprintf(path, ARRAY_SIZE(path), "%s/.incomplete/%s", mnt_dir, str_id);
+
+	return strdup(path);
+}
+
+int open_file_by_id(const char *mnt_dir, incfs_uuid_t id, bool use_ioctl)
+{
+	char *path = get_index_filename(mnt_dir, id);
+	int cmd_fd = open_commands_file(mnt_dir);
+	int fd = open(path, O_RDWR | O_CLOEXEC);
+	struct incfs_permit_fill permit_fill = {
+		.file_descriptor = fd,
+	};
+	int error = 0;
+
+	if (fd < 0) {
+		print_error("Can't open file by id.");
+		error = -errno;
+		goto out;
+	}
+
+	if (use_ioctl && ioctl(cmd_fd, INCFS_IOC_PERMIT_FILL, &permit_fill)) {
+		print_error("Failed to call PERMIT_FILL");
+		error = -errno;
+		goto out;
+	}
+
+	if (ioctl(fd, INCFS_IOC_PERMIT_FILL, &permit_fill) != -1) {
+		print_error(
+			"Successfully called PERMIT_FILL on non pending_read file");
+		return -errno;
+		goto out;
+	}
+
+out:
+	free(path);
+	close(cmd_fd);
+
+	if (error) {
+		close(fd);
+		return error;
+	}
+
+	return fd;
+}
+
+int get_file_attr(const char *mnt_dir, incfs_uuid_t id, char *value, int size)
+{
+	char *path = get_index_filename(mnt_dir, id);
+	int res;
+
+	res = getxattr(path, INCFS_XATTR_METADATA_NAME, value, size);
+	if (res < 0)
+		res = -errno;
+
+	free(path);
+	return res;
+}
+
+static bool same_id(incfs_uuid_t *id1, incfs_uuid_t *id2)
+{
+	return !memcmp(id1->bytes, id2->bytes, sizeof(id1->bytes));
+}
+
+ssize_t ZSTD_compress_default(char *data, char *comp_data, size_t data_size,
+					size_t comp_size)
+{
+	return ZSTD_compress(comp_data, comp_size, data, data_size, 1);
+}
+
+static int emit_test_blocks(const char *mnt_dir, struct test_file *file,
+			int blocks[], int count)
+{
+	uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE];
+	uint8_t comp_data[2 * INCFS_DATA_FILE_BLOCK_SIZE];
+	int block_count = (count > 32) ? 32 : count;
+	int data_buf_size = 2 * INCFS_DATA_FILE_BLOCK_SIZE * block_count;
+	uint8_t *data_buf = malloc(data_buf_size);
+	uint8_t *current_data = data_buf;
+	uint8_t *data_end = data_buf + data_buf_size;
+	struct incfs_fill_block *block_buf =
+		calloc(block_count, sizeof(struct incfs_fill_block));
+	struct incfs_fill_blocks fill_blocks = {
+		.count = block_count,
+		.fill_blocks = ptr_to_u64(block_buf),
+	};
+	ssize_t write_res = 0;
+	int fd = -1;
+	int error = 0;
+	int i = 0;
+	int blocks_written = 0;
+
+	for (i = 0; i < block_count; i++) {
+		int block_index = blocks[i];
+		bool compress_zstd = (file->index + block_index) % 4 == 2;
+		bool compress_lz4 = (file->index + block_index) % 4 == 0;
+		int seed = get_file_block_seed(file->index, block_index);
+		off_t block_offset =
+			((off_t)block_index) * INCFS_DATA_FILE_BLOCK_SIZE;
+		size_t block_size = 0;
+
+		if (block_offset > file->size) {
+			error = -EINVAL;
+			break;
+		}
+		if (file->size - block_offset >
+			INCFS_DATA_FILE_BLOCK_SIZE)
+			block_size = INCFS_DATA_FILE_BLOCK_SIZE;
+		else
+			block_size = file->size - block_offset;
+
+		rnd_buf(data, block_size, seed);
+		if (compress_lz4) {
+			size_t comp_size = LZ4_compress_default((char *)data,
+					(char *)comp_data, block_size,
+					ARRAY_SIZE(comp_data));
+
+			if (comp_size <= 0) {
+				error = -EBADMSG;
+				break;
+			}
+			if (current_data + comp_size > data_end) {
+				error = -ENOMEM;
+				break;
+			}
+			memcpy(current_data, comp_data, comp_size);
+			block_size = comp_size;
+			block_buf[i].compression = COMPRESSION_LZ4;
+		} else if (compress_zstd) {
+			size_t comp_size = ZSTD_compress(comp_data,
+					ARRAY_SIZE(comp_data), data, block_size,
+					1);
+
+			if (comp_size <= 0) {
+				error = -EBADMSG;
+				break;
+			}
+			if (current_data + comp_size > data_end) {
+				error = -ENOMEM;
+				break;
+			}
+			memcpy(current_data, comp_data, comp_size);
+			block_size = comp_size;
+			block_buf[i].compression = COMPRESSION_ZSTD;
+		} else {
+			if (current_data + block_size > data_end) {
+				error = -ENOMEM;
+				break;
+			}
+			memcpy(current_data, data, block_size);
+			block_buf[i].compression = COMPRESSION_NONE;
+		}
+
+		block_buf[i].block_index = block_index;
+		block_buf[i].data_len = block_size;
+		block_buf[i].data = ptr_to_u64(current_data);
+		current_data += block_size;
+	}
+
+	if (!error) {
+		fd = open_file_by_id(mnt_dir, file->id, false);
+		if (fd < 0) {
+			error = -errno;
+			goto out;
+		}
+		write_res = ioctl(fd, INCFS_IOC_FILL_BLOCKS, &fill_blocks);
+		if (write_res >= 0) {
+			ksft_print_msg("Wrote to file via normal fd error\n");
+			error = -EPERM;
+			goto out;
+		}
+
+		close(fd);
+		fd = open_file_by_id(mnt_dir, file->id, true);
+		if (fd < 0) {
+			error = -errno;
+			goto out;
+		}
+		write_res = ioctl(fd, INCFS_IOC_FILL_BLOCKS, &fill_blocks);
+		if (write_res < 0)
+			error = -errno;
+		else
+			blocks_written = write_res;
+	}
+	if (error) {
+		ksft_print_msg(
+			"Writing data block error. Write returned: %d. Error:%s\n",
+			write_res, strerror(-error));
+	}
+
+out:
+	free(block_buf);
+	free(data_buf);
+	close(fd);
+	return (error < 0) ? error : blocks_written;
+}
+
+static int emit_test_block(const char *mnt_dir, struct test_file *file,
+				int block_index)
+{
+	int res = emit_test_blocks(mnt_dir, file, &block_index, 1);
+
+	if (res == 0)
+		return -EINVAL;
+	if (res == 1)
+		return 0;
+	return res;
+}
+
+static void shuffle(int array[], int count, unsigned int seed)
+{
+	int i;
+
+	for (i = 0; i < count - 1; i++) {
+		int items_left = count - i;
+		int shuffle_index;
+		int v;
+
+		seed = 1103515245 * seed + 12345;
+		shuffle_index = i + seed % items_left;
+
+		v = array[shuffle_index];
+		array[shuffle_index] = array[i];
+		array[i] = v;
+	}
+}
+
+static int emit_test_file_data(const char *mount_dir, struct test_file *file)
+{
+	int i;
+	int block_cnt = 1 + (file->size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+	int *block_indexes = NULL;
+	int result = 0;
+	int blocks_written = 0;
+
+	if (file->size == 0)
+		return 0;
+
+	block_indexes = calloc(block_cnt, sizeof(*block_indexes));
+	for (i = 0; i < block_cnt; i++)
+		block_indexes[i] = i;
+	shuffle(block_indexes, block_cnt, file->index);
+
+	for (i = 0; i < block_cnt; i += blocks_written) {
+		blocks_written = emit_test_blocks(mount_dir, file,
+					block_indexes + i, block_cnt - i);
+		if (blocks_written < 0) {
+			result = blocks_written;
+			goto out;
+		}
+		if (blocks_written == 0) {
+			result = -EIO;
+			goto out;
+		}
+	}
+out:
+	free(block_indexes);
+	return result;
+}
+
+static loff_t read_whole_file(const char *filename)
+{
+	int fd = -1;
+	loff_t result;
+	loff_t bytes_read = 0;
+	uint8_t buff[16 * 1024];
+
+	fd = open(filename, O_RDONLY | O_CLOEXEC);
+	if (fd <= 0)
+		return fd;
+
+	while (1) {
+		int read_result = read(fd, buff, ARRAY_SIZE(buff));
+
+		if (read_result < 0) {
+			print_error("Error during reading from a file.");
+			result = -errno;
+			goto cleanup;
+		} else if (read_result == 0)
+			break;
+
+		bytes_read += read_result;
+	}
+	result = bytes_read;
+
+cleanup:
+	close(fd);
+	return result;
+}
+
+static int read_test_file(uint8_t *buf, size_t len, char *filename,
+			  int block_idx)
+{
+	int fd = -1;
+	int result;
+	int bytes_read = 0;
+	size_t bytes_to_read = len;
+	off_t offset = ((off_t)block_idx) * INCFS_DATA_FILE_BLOCK_SIZE;
+
+	fd = open(filename, O_RDONLY | O_CLOEXEC);
+	if (fd <= 0)
+		return fd;
+
+	if (lseek(fd, offset, SEEK_SET) != offset) {
+		print_error("Seek error");
+		return -errno;
+	}
+
+	while (bytes_read < bytes_to_read) {
+		int read_result =
+			read(fd, buf + bytes_read, bytes_to_read - bytes_read);
+		if (read_result < 0) {
+			result = -errno;
+			goto cleanup;
+		} else if (read_result == 0)
+			break;
+
+		bytes_read += read_result;
+	}
+	result = bytes_read;
+
+cleanup:
+	close(fd);
+	return result;
+}
+
+static char *create_backing_dir(const char *mount_dir)
+{
+	struct stat st;
+	char backing_dir_name[255];
+
+	snprintf(backing_dir_name, ARRAY_SIZE(backing_dir_name), "%s-src",
+		 mount_dir);
+
+	if (stat(backing_dir_name, &st) == 0) {
+		if (S_ISDIR(st.st_mode)) {
+			int error = delete_dir_tree(backing_dir_name);
+
+			if (error) {
+				ksft_print_msg(
+				      "Can't delete existing backing dir. %d\n",
+				      error);
+				return NULL;
+			}
+		} else {
+			if (unlink(backing_dir_name)) {
+				print_error("Can't clear backing dir");
+				return NULL;
+			}
+		}
+	}
+
+	if (mkdir(backing_dir_name, 0777)) {
+		if (errno != EEXIST) {
+			print_error("Can't open/create backing dir");
+			return NULL;
+		}
+	}
+
+	return strdup(backing_dir_name);
+}
+
+static int validate_test_file_content_with_seed(const char *mount_dir,
+						struct test_file *file,
+						unsigned int shuffle_seed)
+{
+	int error = -1;
+	char *filename = concat_file_name(mount_dir, file->name);
+	off_t size = file->size;
+	loff_t actual_size = get_file_size(filename);
+	int block_cnt = 1 + (size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+	int *block_indexes = NULL;
+	int i;
+
+	block_indexes = alloca(sizeof(int) * block_cnt);
+	for (i = 0; i < block_cnt; i++)
+		block_indexes[i] = i;
+
+	if (shuffle_seed != 0)
+		shuffle(block_indexes, block_cnt, shuffle_seed);
+
+	if (actual_size != size) {
+		ksft_print_msg(
+			"File size doesn't match. name: %s expected size:%ld actual size:%ld\n",
+			filename, size, actual_size);
+		error = -1;
+		goto failure;
+	}
+
+	for (i = 0; i < block_cnt; i++) {
+		int block_idx = block_indexes[i];
+		uint8_t expected_block[INCFS_DATA_FILE_BLOCK_SIZE];
+		uint8_t actual_block[INCFS_DATA_FILE_BLOCK_SIZE];
+		int seed = get_file_block_seed(file->index, block_idx);
+		size_t bytes_to_compare = min(
+			(off_t)INCFS_DATA_FILE_BLOCK_SIZE,
+			size - ((off_t)block_idx) * INCFS_DATA_FILE_BLOCK_SIZE);
+		int read_result =
+			read_test_file(actual_block, INCFS_DATA_FILE_BLOCK_SIZE,
+				       filename, block_idx);
+		if (read_result < 0) {
+			ksft_print_msg(
+				"Error reading block %d from file %s. Error: %s\n",
+				block_idx, filename, strerror(-read_result));
+			error = read_result;
+			goto failure;
+		}
+		rnd_buf(expected_block, INCFS_DATA_FILE_BLOCK_SIZE, seed);
+		if (memcmp(expected_block, actual_block, bytes_to_compare)) {
+			ksft_print_msg(
+				"File contents don't match. name: %s block:%d\n",
+				file->name, block_idx);
+			error = -2;
+			goto failure;
+		}
+	}
+	free(filename);
+	return 0;
+
+failure:
+	free(filename);
+	return error;
+}
+
+static int validate_test_file_content(const char *mount_dir,
+				      struct test_file *file)
+{
+	return validate_test_file_content_with_seed(mount_dir, file, 0);
+}
+
+static int data_producer(const char *mount_dir, struct test_files_set *test_set)
+{
+	int ret = 0;
+	int timeout_ms = 1000;
+	struct incfs_pending_read_info prs[100] = {};
+	int prs_size = ARRAY_SIZE(prs);
+	int fd = open_commands_file(mount_dir);
+
+	if (fd < 0)
+		return -errno;
+
+	while ((ret = wait_for_pending_reads(fd, timeout_ms, prs, prs_size)) >
+	       0) {
+		int read_count = ret;
+		int i;
+
+		for (i = 0; i < read_count; i++) {
+			int j = 0;
+			struct test_file *file = NULL;
+
+			for (j = 0; j < test_set->files_count; j++) {
+				bool same = same_id(&(test_set->files[j].id),
+					&(prs[i].file_id));
+
+				if (same) {
+					file = &test_set->files[j];
+					break;
+				}
+			}
+			if (!file) {
+				ksft_print_msg(
+					"Unknown file in pending reads.\n");
+				break;
+			}
+
+			ret = emit_test_block(mount_dir, file,
+				prs[i].block_index);
+			if (ret < 0) {
+				ksft_print_msg("Emitting test data error: %s\n",
+						strerror(-ret));
+				break;
+			}
+		}
+	}
+	close(fd);
+	return ret;
+}
+
+static int data_producer2(const char *mount_dir,
+			  struct test_files_set *test_set)
+{
+	int ret = 0;
+	int timeout_ms = 1000;
+	struct incfs_pending_read_info2 prs[100] = {};
+	int prs_size = ARRAY_SIZE(prs);
+	int fd = open_commands_file(mount_dir);
+
+	if (fd < 0)
+		return -errno;
+
+	while ((ret = wait_for_pending_reads2(fd, timeout_ms, prs, prs_size)) >
+	       0) {
+		int read_count = ret;
+		int i;
+
+		for (i = 0; i < read_count; i++) {
+			int j = 0;
+			struct test_file *file = NULL;
+
+			for (j = 0; j < test_set->files_count; j++) {
+				bool same = same_id(&(test_set->files[j].id),
+					&(prs[i].file_id));
+
+				if (same) {
+					file = &test_set->files[j];
+					break;
+				}
+			}
+			if (!file) {
+				ksft_print_msg(
+					"Unknown file in pending reads.\n");
+				break;
+			}
+
+			ret = emit_test_block(mount_dir, file,
+				prs[i].block_index);
+			if (ret < 0) {
+				ksft_print_msg("Emitting test data error: %s\n",
+						strerror(-ret));
+				break;
+			}
+		}
+	}
+	close(fd);
+	return ret;
+}
+
+static int build_mtree(struct test_file *file)
+{
+	char data[INCFS_DATA_FILE_BLOCK_SIZE] = {};
+	const int digest_size = SHA256_DIGEST_SIZE;
+	const int hash_per_block = INCFS_DATA_FILE_BLOCK_SIZE / digest_size;
+	int block_count = 0;
+	int hash_block_count = 0;
+	int total_tree_block_count = 0;
+	int tree_lvl_index[INCFS_MAX_MTREE_LEVELS] = {};
+	int tree_lvl_count[INCFS_MAX_MTREE_LEVELS] = {};
+	int levels_count = 0;
+	int i, level;
+
+	if (file->size == 0)
+		return 0;
+
+	block_count = 1 + (file->size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+	hash_block_count = block_count;
+	for (i = 0; hash_block_count > 1; i++) {
+		hash_block_count = (hash_block_count + hash_per_block - 1)
+			/ hash_per_block;
+		tree_lvl_count[i] = hash_block_count;
+		total_tree_block_count += hash_block_count;
+	}
+	levels_count = i;
+
+	for (i = 0; i < levels_count; i++) {
+		int prev_lvl_base = (i == 0) ? total_tree_block_count :
+			tree_lvl_index[i - 1];
+
+		tree_lvl_index[i] = prev_lvl_base - tree_lvl_count[i];
+	}
+
+	file->mtree_block_count = total_tree_block_count;
+	if (block_count == 1) {
+		int seed = get_file_block_seed(file->index, 0);
+
+		memset(data, 0, INCFS_DATA_FILE_BLOCK_SIZE);
+		rnd_buf((uint8_t *)data, file->size, seed);
+		sha256(data, INCFS_DATA_FILE_BLOCK_SIZE, file->root_hash);
+		return 0;
+	}
+
+	file->mtree = calloc(total_tree_block_count, sizeof(*file->mtree));
+	/* Build level 0 hashes. */
+	for (i = 0; i < block_count; i++) {
+		off_t offset = i * INCFS_DATA_FILE_BLOCK_SIZE;
+		size_t block_size = INCFS_DATA_FILE_BLOCK_SIZE;
+		int block_index = tree_lvl_index[0] +
+					i / hash_per_block;
+		int block_off = (i % hash_per_block) * digest_size;
+		int seed = get_file_block_seed(file->index, i);
+		char *hash_ptr = file->mtree[block_index].data + block_off;
+
+		if (file->size - offset < block_size) {
+			block_size = file->size - offset;
+			memset(data, 0, INCFS_DATA_FILE_BLOCK_SIZE);
+		}
+
+		rnd_buf((uint8_t *)data, block_size, seed);
+		sha256(data, INCFS_DATA_FILE_BLOCK_SIZE, hash_ptr);
+	}
+
+	/* Build higher levels of hash tree. */
+	for (level = 1; level < levels_count; level++) {
+		int prev_lvl_base = tree_lvl_index[level - 1];
+		int prev_lvl_count = tree_lvl_count[level - 1];
+
+		for (i = 0; i < prev_lvl_count; i++) {
+			int block_index =
+				i / hash_per_block + tree_lvl_index[level];
+			int block_off = (i % hash_per_block) * digest_size;
+			char *hash_ptr =
+				file->mtree[block_index].data + block_off;
+
+			sha256(file->mtree[i + prev_lvl_base].data,
+			       INCFS_DATA_FILE_BLOCK_SIZE, hash_ptr);
+		}
+	}
+
+	/* Calculate root hash from the top block */
+	sha256(file->mtree[0].data,
+		INCFS_DATA_FILE_BLOCK_SIZE, file->root_hash);
+
+	return 0;
+}
+
+static int load_hash_tree(const char *mount_dir, struct test_file *file)
+{
+	int err;
+	int i;
+	int fd;
+	struct incfs_fill_blocks fill_blocks = {
+		.count = file->mtree_block_count,
+	};
+	struct incfs_fill_block *fill_block_array =
+		calloc(fill_blocks.count, sizeof(struct incfs_fill_block));
+
+	if (fill_blocks.count == 0)
+		return 0;
+
+	if (!fill_block_array)
+		return -ENOMEM;
+	fill_blocks.fill_blocks = ptr_to_u64(fill_block_array);
+
+	for (i = 0; i < fill_blocks.count; i++) {
+		fill_block_array[i] = (struct incfs_fill_block){
+			.block_index = i,
+			.data_len = INCFS_DATA_FILE_BLOCK_SIZE,
+			.data = ptr_to_u64(file->mtree[i].data),
+			.flags = INCFS_BLOCK_FLAGS_HASH
+		};
+	}
+
+	fd = open_file_by_id(mount_dir, file->id, false);
+	if (fd < 0) {
+		err = errno;
+		goto failure;
+	}
+
+	err = ioctl(fd, INCFS_IOC_FILL_BLOCKS, &fill_blocks);
+	close(fd);
+	if (err >= 0) {
+		err = -EPERM;
+		goto failure;
+	}
+
+	fd = open_file_by_id(mount_dir, file->id, true);
+	if (fd < 0) {
+		err = errno;
+		goto failure;
+	}
+
+	err = ioctl(fd, INCFS_IOC_FILL_BLOCKS, &fill_blocks);
+	close(fd);
+	if (err < fill_blocks.count)
+		err = errno;
+	else {
+		err = 0;
+		free(file->mtree);
+	}
+
+failure:
+	free(fill_block_array);
+	return err;
+}
+
+static int cant_touch_index_test(const char *mount_dir)
+{
+	char *file_name = "test_file";
+	int file_size = 123;
+	incfs_uuid_t file_id;
+	char *index_path = concat_file_name(mount_dir, ".index");
+	char *subdir = concat_file_name(index_path, "subdir");
+	char *dst_name = concat_file_name(mount_dir, "something");
+	char *filename_in_index = NULL;
+	char *file_path = concat_file_name(mount_dir, file_name);
+	char *backing_dir;
+	int cmd_fd = -1;
+	int err;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	/* Mount FS and release the backing file. */
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+	free(backing_dir);
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+
+	err = mkdir(subdir, 0777);
+	if (err == 0 || errno != EBUSY) {
+		print_error("Shouldn't be able to crate subdir in index\n");
+		goto failure;
+	}
+
+	err = rmdir(index_path);
+	if (err == 0 || errno != EBUSY) {
+		print_error(".index directory should not be removed\n");
+		goto failure;
+	}
+
+	err = emit_file(cmd_fd, ".index", file_name, &file_id,
+				file_size, NULL);
+	if (err != -EBUSY) {
+		print_error("Shouldn't be able to crate a file in index\n");
+		goto failure;
+	}
+
+	err = emit_file(cmd_fd, NULL, file_name, &file_id,
+				file_size, NULL);
+	if (err < 0)
+		goto failure;
+	filename_in_index = get_index_filename(mount_dir, file_id);
+
+	err = unlink(filename_in_index);
+	if (err == 0 || errno != EBUSY) {
+		print_error("Shouldn't be delete from index\n");
+		goto failure;
+	}
+
+
+	err = rename(filename_in_index, dst_name);
+	if (err == 0 || errno != EBUSY) {
+		print_error("Shouldn't be able to move from index\n");
+		goto failure;
+	}
+
+	free(filename_in_index);
+	filename_in_index = concat_file_name(index_path, "abc");
+	err = link(file_path, filename_in_index);
+	if (err == 0 || errno != EBUSY) {
+		print_error("Shouldn't be able to link inside index\n");
+		goto failure;
+	}
+
+	err = rename(index_path, dst_name);
+	if (err == 0 || errno != EBUSY) {
+		print_error("Shouldn't rename .index directory\n");
+		goto failure;
+	}
+
+	close(cmd_fd);
+	free(subdir);
+	free(index_path);
+	free(dst_name);
+	free(filename_in_index);
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	return TEST_SUCCESS;
+
+failure:
+	free(subdir);
+	free(dst_name);
+	free(index_path);
+	free(filename_in_index);
+	close(cmd_fd);
+	umount(mount_dir);
+	return TEST_FAILURE;
+}
+
+static bool iterate_directory(const char *dir_to_iterate, bool root,
+			      int file_count)
+{
+	struct expected_name {
+		const char *name;
+		bool root_only;
+		bool found;
+	} names[] = {
+		{INCFS_LOG_FILENAME, true, false},
+		{INCFS_PENDING_READS_FILENAME, true, false},
+		{INCFS_BLOCKS_WRITTEN_FILENAME, true, false},
+		{".index", true, false},
+		{".incomplete", true, false},
+		{"..", false, false},
+		{".", false, false},
+	};
+
+	bool pass = true, found;
+	int i;
+
+	/* Test directory iteration */
+	int fd = open(dir_to_iterate, O_RDONLY | O_DIRECTORY | O_CLOEXEC);
+
+	if (fd < 0) {
+		print_error("Can't open directory\n");
+		return false;
+	}
+
+	for (;;) {
+		/* Enough space for one dirent - no name over 30 */
+		char buf[sizeof(struct linux_dirent64) + NAME_MAX];
+		struct linux_dirent64 *dirent = (struct linux_dirent64 *) buf;
+		int nread;
+		int i;
+
+		for (i = 0; i < NAME_MAX; ++i) {
+			nread = syscall(__NR_getdents64, fd, buf,
+					 sizeof(struct linux_dirent64) + i);
+
+			if (nread >= 0)
+				break;
+			if (errno != EINVAL)
+				break;
+		}
+
+		if (nread == 0)
+			break;
+		if (nread < 0) {
+			print_error("Error iterating directory\n");
+			pass = false;
+			goto failure;
+		}
+
+		/* Expected size is rounded up to 8 byte boundary. Not sure if
+		 * this is universal truth or just happenstance, but useful test
+		 * for the moment
+		 */
+		if (nread != (((sizeof(struct linux_dirent64)
+				+ strlen(dirent->d_name) + 1) + 7) & ~7)) {
+			print_error("Wrong dirent size");
+			pass = false;
+			goto failure;
+		}
+
+		found = false;
+		for (i = 0; i < sizeof(names) / sizeof(*names); ++i)
+			if (!strcmp(dirent->d_name, names[i].name)) {
+				if (names[i].root_only && !root) {
+					print_error("Root file error");
+					pass = false;
+					goto failure;
+				}
+
+				if (names[i].found) {
+					print_error("File appears twice");
+					pass = false;
+					goto failure;
+				}
+
+				names[i].found = true;
+				found = true;
+				break;
+			}
+
+		if (!found)
+			--file_count;
+	}
+
+	for (i = 0; i < sizeof(names) / sizeof(*names); ++i) {
+		if (!names[i].found)
+			if (root || !names[i].root_only) {
+				print_error("Expected file not present");
+				pass = false;
+				goto failure;
+			}
+	}
+
+	if (file_count) {
+		print_error("Wrong number of files\n");
+		pass = false;
+		goto failure;
+	}
+
+failure:
+	close(fd);
+	return pass;
+}
+
+static int basic_file_ops_test(const char *mount_dir)
+{
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+	char *subdir1 = concat_file_name(mount_dir, "subdir1");
+	char *subdir2 = concat_file_name(mount_dir, "subdir2");
+	char *backing_dir;
+	int cmd_fd = -1;
+	int i, err;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	/* Mount FS and release the backing file. */
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+	free(backing_dir);
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	err = mkdir(subdir1, 0777);
+	if (err < 0 && errno != EEXIST) {
+		print_error("Can't create subdir1\n");
+		goto failure;
+	}
+
+	err = mkdir(subdir2, 0777);
+	if (err < 0 && errno != EEXIST) {
+		print_error("Can't create subdir2\n");
+		goto failure;
+	}
+
+	/* Create all test files in subdir1 directory */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		loff_t size;
+		char *file_path = concat_file_name(subdir1, file->name);
+
+		err = emit_file(cmd_fd, "subdir1", file->name, &file->id,
+				     file->size, NULL);
+		if (err < 0)
+			goto failure;
+
+		size = get_file_size(file_path);
+		free(file_path);
+		if (size != file->size) {
+			ksft_print_msg("Wrong size %lld of %s.\n",
+				size, file->name);
+			goto failure;
+		}
+	}
+
+	if (!iterate_directory(subdir1, false, file_num))
+		goto failure;
+
+	/* Link the files to subdir2 */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		char *src_name = concat_file_name(subdir1, file->name);
+		char *dst_name = concat_file_name(subdir2, file->name);
+		loff_t size;
+
+		err = link(src_name, dst_name);
+		if (err < 0) {
+			print_error("Can't move file\n");
+			goto failure;
+		}
+
+		size = get_file_size(dst_name);
+		if (size != file->size) {
+			ksft_print_msg("Wrong size %lld of %s.\n",
+				size, file->name);
+			goto failure;
+		}
+		free(src_name);
+		free(dst_name);
+	}
+
+	/* Move the files from subdir2 to the mount dir */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		char *src_name = concat_file_name(subdir2, file->name);
+		char *dst_name = concat_file_name(mount_dir, file->name);
+		loff_t size;
+
+		err = rename(src_name, dst_name);
+		if (err < 0) {
+			print_error("Can't move file\n");
+			goto failure;
+		}
+
+		size = get_file_size(dst_name);
+		if (size != file->size) {
+			ksft_print_msg("Wrong size %lld of %s.\n",
+				size, file->name);
+			goto failure;
+		}
+		free(src_name);
+		free(dst_name);
+	}
+
+	/* +2 because there are 2 subdirs */
+	if (!iterate_directory(mount_dir, true, file_num + 2))
+		goto failure;
+
+	/* Open and close all files from the mount dir */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		char *path = concat_file_name(mount_dir, file->name);
+		int fd;
+
+		fd = open(path, O_RDWR | O_CLOEXEC);
+		free(path);
+		if (fd <= 0) {
+			print_error("Can't open file");
+			goto failure;
+		}
+		if (close(fd)) {
+			print_error("Can't close file");
+			goto failure;
+		}
+	}
+
+	/* Delete all files from the mount dir */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		char *path = concat_file_name(mount_dir, file->name);
+
+		err = unlink(path);
+		free(path);
+		if (err < 0) {
+			print_error("Can't unlink file");
+			goto failure;
+		}
+	}
+
+	err = delete_dir_tree(subdir1);
+	if (err) {
+		ksft_print_msg("Error deleting subdir1 %d", err);
+		goto failure;
+	}
+
+	err = rmdir(subdir2);
+	if (err) {
+		print_error("Error deleting subdir2");
+		goto failure;
+	}
+
+	close(cmd_fd);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	umount(mount_dir);
+	return TEST_FAILURE;
+}
+
+static int dynamic_files_and_data_test(const char *mount_dir)
+{
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+	const int missing_file_idx = 5;
+	int cmd_fd = -1;
+	char *backing_dir;
+	int i;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	/* Mount FS and release the backing file. */
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+	free(backing_dir);
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Check that test files don't exist in the filesystem. */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		char *filename = concat_file_name(mount_dir, file->name);
+
+		if (access(filename, F_OK) != -1) {
+			ksft_print_msg(
+				"File %s somehow already exists in a clean FS.\n",
+				filename);
+			goto failure;
+		}
+		free(filename);
+	}
+
+	/* Write test data into the command file. */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		int res;
+
+		build_mtree(file);
+		res = emit_file(cmd_fd, NULL, file->name, &file->id,
+				     file->size, NULL);
+		if (res < 0) {
+			ksft_print_msg("Error %s emiting file %s.\n",
+				       strerror(-res), file->name);
+			goto failure;
+		}
+
+		/* Skip writing data to one file so we can check */
+		/* that it's missing later. */
+		if (i == missing_file_idx)
+			continue;
+
+		res = emit_test_file_data(mount_dir, file);
+		if (res) {
+			ksft_print_msg("Error %s emiting data for %s.\n",
+				       strerror(-res), file->name);
+			goto failure;
+		}
+	}
+
+	/* Validate contents of the FS */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (i == missing_file_idx) {
+			/* No data has been written to this file. */
+			/* Check for read error; */
+			uint8_t buf;
+			char *filename =
+				concat_file_name(mount_dir, file->name);
+			int res = read_test_file(&buf, 1, filename, 0);
+
+			free(filename);
+			if (res > 0) {
+				ksft_print_msg(
+					"Data present, even though never writtern.\n");
+				goto failure;
+			}
+			if (res != -ETIME) {
+				ksft_print_msg("Wrong error code: %d.\n", res);
+				goto failure;
+			}
+		} else {
+			if (validate_test_file_content(mount_dir, file) < 0)
+				goto failure;
+		}
+	}
+
+	close(cmd_fd);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	umount(mount_dir);
+	return TEST_FAILURE;
+}
+
+static int concurrent_reads_and_writes_test(const char *mount_dir)
+{
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+	/* Validate each file from that many child processes. */
+	const int child_multiplier = 3;
+	int cmd_fd = -1;
+	char *backing_dir;
+	int status;
+	int i;
+	pid_t producer_pid;
+	pid_t *child_pids = alloca(child_multiplier * file_num * sizeof(pid_t));
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	/* Mount FS and release the backing file. */
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+	free(backing_dir);
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Tell FS about the files, without actually providing the data. */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		int res;
+
+		res = emit_file(cmd_fd, NULL, file->name, &file->id,
+				     file->size, NULL);
+		if (res)
+			goto failure;
+	}
+
+	/* Start child processes acessing data in the files */
+	for (i = 0; i < file_num * child_multiplier; i++) {
+		struct test_file *file = &test.files[i / child_multiplier];
+		pid_t child_pid = flush_and_fork();
+
+		if (child_pid == 0) {
+			/* This is a child process, do the data validation. */
+			int ret = validate_test_file_content_with_seed(
+				mount_dir, file, i);
+			if (ret >= 0) {
+				/* Zero exit status if data is valid. */
+				exit(0);
+			}
+
+			/* Positive status if validation error found. */
+			exit(-ret);
+		} else if (child_pid > 0) {
+			child_pids[i] = child_pid;
+		} else {
+			print_error("Fork error");
+			goto failure;
+		}
+	}
+
+	producer_pid = flush_and_fork();
+	if (producer_pid == 0) {
+		int ret;
+		/*
+		 * This is a child that should provide data to
+		 * pending reads.
+		 */
+
+		ret = data_producer(mount_dir, &test);
+		exit(-ret);
+	} else {
+		status = wait_for_process(producer_pid);
+		if (status != 0) {
+			ksft_print_msg("Data produces failed. %d(%s) ", status,
+				       strerror(status));
+			goto failure;
+		}
+	}
+
+	/* Check that all children has finished with 0 exit status */
+	for (i = 0; i < file_num * child_multiplier; i++) {
+		struct test_file *file = &test.files[i / child_multiplier];
+
+		status = wait_for_process(child_pids[i]);
+		if (status != 0) {
+			ksft_print_msg(
+				"Validation for the file %s failed with code %d (%s)\n",
+				file->name, status, strerror(status));
+			goto failure;
+		}
+	}
+
+	/* Check that there are no pending reads left */
+	{
+		struct incfs_pending_read_info prs[1] = {};
+		int timeout = 0;
+		int read_count = wait_for_pending_reads(cmd_fd, timeout, prs,
+							ARRAY_SIZE(prs));
+
+		if (read_count) {
+			ksft_print_msg(
+				"Pending reads pending when all data written\n");
+			goto failure;
+		}
+	}
+
+	close(cmd_fd);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	umount(mount_dir);
+	return TEST_FAILURE;
+}
+
+static int work_after_remount_test(const char *mount_dir)
+{
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+	const int file_num_stage1 = file_num / 2;
+	const int file_num_stage2 = file_num;
+	char *backing_dir = NULL;
+	int i = 0;
+	int cmd_fd = -1;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	/* Mount FS and release the backing file. */
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Write first half of the data into the command file. (stage 1) */
+	for (i = 0; i < file_num_stage1; i++) {
+		struct test_file *file = &test.files[i];
+
+		build_mtree(file);
+		if (emit_file(cmd_fd, NULL, file->name, &file->id,
+				     file->size, NULL))
+			goto failure;
+
+		if (emit_test_file_data(mount_dir, file))
+			goto failure;
+	}
+
+	/* Unmount and mount again, to see that data is persistent. */
+	close(cmd_fd);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Write the second half of the data into the command file. (stage 2) */
+	for (; i < file_num_stage2; i++) {
+		struct test_file *file = &test.files[i];
+		int res = emit_file(cmd_fd, NULL, file->name, &file->id,
+				     file->size, NULL);
+
+		if (res)
+			goto failure;
+
+		if (emit_test_file_data(mount_dir, file))
+			goto failure;
+	}
+
+	/* Validate contents of the FS */
+	for (i = 0; i < file_num_stage2; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (validate_test_file_content(mount_dir, file) < 0)
+			goto failure;
+	}
+
+	/* Delete all files */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		char *filename = concat_file_name(mount_dir, file->name);
+		char *filename_in_index = get_index_filename(mount_dir,
+							file->id);
+
+		if (access(filename, F_OK) != 0) {
+			ksft_print_msg("File %s is not visible.\n", filename);
+			goto failure;
+		}
+
+		if (access(filename_in_index, F_OK) != 0) {
+			ksft_print_msg("File %s is not visible.\n",
+				filename_in_index);
+			goto failure;
+		}
+
+		unlink(filename);
+
+		if (access(filename, F_OK) != -1) {
+			ksft_print_msg("File %s is still present.\n", filename);
+			goto failure;
+		}
+
+		if (access(filename_in_index, F_OK) != 0) {
+			ksft_print_msg("File %s is still present.\n",
+				filename_in_index);
+			goto failure;
+		}
+		free(filename);
+		free(filename_in_index);
+	}
+
+	/* Unmount and mount again, to see that deleted files stay deleted. */
+	close(cmd_fd);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Validate all deleted files are still deleted. */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		char *filename = concat_file_name(mount_dir, file->name);
+
+		if (access(filename, F_OK) != -1) {
+			ksft_print_msg("File %s is still visible.\n", filename);
+			goto failure;
+		}
+		free(filename);
+	}
+
+	/* Final unmount */
+	close(cmd_fd);
+	free(backing_dir);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	free(backing_dir);
+	umount(mount_dir);
+	return TEST_FAILURE;
+}
+
+static int attribute_test(const char *mount_dir)
+{
+	char file_attr[] = "metadata123123";
+	char attr_buf[INCFS_MAX_FILE_ATTR_SIZE] = {};
+	int cmd_fd = -1;
+	incfs_uuid_t file_id;
+	int attr_res = 0;
+	char *backing_dir;
+
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	/* Mount FS and release the backing file. */
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	if (emit_file(cmd_fd, NULL, "file", &file_id, 12, file_attr))
+		goto failure;
+
+	/* Test attribute values */
+	attr_res = get_file_attr(mount_dir, file_id, attr_buf,
+		ARRAY_SIZE(attr_buf));
+	if (attr_res != strlen(file_attr)) {
+		ksft_print_msg("Get file attr error: %d\n", attr_res);
+		goto failure;
+	}
+	if (strcmp(attr_buf, file_attr) != 0) {
+		ksft_print_msg("Incorrect file attr value: '%s'", attr_buf);
+		goto failure;
+	}
+
+	/* Unmount and mount again, to see that attributes are persistent. */
+	close(cmd_fd);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Test attribute values again after remount*/
+	attr_res = get_file_attr(mount_dir, file_id, attr_buf,
+		ARRAY_SIZE(attr_buf));
+	if (attr_res != strlen(file_attr)) {
+		ksft_print_msg("Get dir attr error: %d\n", attr_res);
+		goto failure;
+	}
+	if (strcmp(attr_buf, file_attr) != 0) {
+		ksft_print_msg("Incorrect file attr value: '%s'", attr_buf);
+		goto failure;
+	}
+
+	/* Final unmount */
+	close(cmd_fd);
+	free(backing_dir);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	free(backing_dir);
+	umount(mount_dir);
+	return TEST_FAILURE;
+}
+
+static int child_procs_waiting_for_data_test(const char *mount_dir)
+{
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+	int cmd_fd = -1;
+	int i;
+	pid_t *child_pids = alloca(file_num * sizeof(pid_t));
+	char *backing_dir;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	/* Mount FS and release the backing file.  (10s wait time) */
+	if (mount_fs(mount_dir, backing_dir, 10000) != 0)
+		goto failure;
+
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Tell FS about the files, without actually providing the data. */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		emit_file(cmd_fd, NULL, file->name, &file->id,
+				     file->size, NULL);
+	}
+
+	/* Start child processes acessing data in the files */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		pid_t child_pid = flush_and_fork();
+
+		if (child_pid == 0) {
+			/* This is a child process, do the data validation. */
+			int ret = validate_test_file_content(mount_dir, file);
+
+			if (ret >= 0) {
+				/* Zero exit status if data is valid. */
+				exit(0);
+			}
+
+			/* Positive status if validation error found. */
+			exit(-ret);
+		} else if (child_pid > 0) {
+			child_pids[i] = child_pid;
+		} else {
+			print_error("Fork error");
+			goto failure;
+		}
+	}
+
+	/* Write test data into the command file. */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (emit_test_file_data(mount_dir, file))
+			goto failure;
+	}
+
+	/* Check that all children has finished with 0 exit status */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		int status = wait_for_process(child_pids[i]);
+
+		if (status != 0) {
+			ksft_print_msg(
+				"Validation for the file %s failed with code %d (%s)\n",
+				file->name, status, strerror(status));
+			goto failure;
+		}
+	}
+
+	close(cmd_fd);
+	free(backing_dir);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	free(backing_dir);
+	umount(mount_dir);
+	return TEST_FAILURE;
+}
+
+static int multiple_providers_test(const char *mount_dir)
+{
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+	const int producer_count = 5;
+	int cmd_fd = -1;
+	int status;
+	int i;
+	pid_t *producer_pids = alloca(producer_count * sizeof(pid_t));
+	char *backing_dir;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	/* Mount FS and release the backing file.  (10s wait time) */
+	if (mount_fs_opt(mount_dir, backing_dir,
+			 "read_timeout_ms=10000,report_uid", false) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Tell FS about the files, without actually providing the data. */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (emit_file(cmd_fd, NULL, file->name, &file->id,
+				     file->size, NULL) < 0)
+			goto failure;
+	}
+
+	/* Start producer processes */
+	for (i = 0; i < producer_count; i++) {
+		pid_t producer_pid = flush_and_fork();
+
+		if (producer_pid == 0) {
+			int ret;
+			/*
+			 * This is a child that should provide data to
+			 * pending reads.
+			 */
+
+			ret = data_producer2(mount_dir, &test);
+			exit(-ret);
+		} else if (producer_pid > 0) {
+			producer_pids[i] = producer_pid;
+		} else {
+			print_error("Fork error");
+			goto failure;
+		}
+	}
+
+	/* Validate FS content */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		char *filename = concat_file_name(mount_dir, file->name);
+		loff_t read_result = read_whole_file(filename);
+
+		free(filename);
+		if (read_result != file->size) {
+			ksft_print_msg(
+				"Error validating file %s. Result: %ld\n",
+				file->name, read_result);
+			goto failure;
+		}
+	}
+
+	/* Check that all producers has finished with 0 exit status */
+	for (i = 0; i < producer_count; i++) {
+		status = wait_for_process(producer_pids[i]);
+		if (status != 0) {
+			ksft_print_msg("Producer %d failed with code (%s)\n", i,
+				       strerror(status));
+			goto failure;
+		}
+	}
+
+	close(cmd_fd);
+	free(backing_dir);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	free(backing_dir);
+	umount(mount_dir);
+	return TEST_FAILURE;
+}
+
+static int hash_tree_test(const char *mount_dir)
+{
+	char *backing_dir;
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+	const int corrupted_file_idx = 5;
+	int i = 0;
+	int cmd_fd = -1;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	/* Mount FS and release the backing file. */
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Write hashes and data. */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		int res;
+
+		build_mtree(file);
+		res = crypto_emit_file(cmd_fd, NULL, file->name, &file->id,
+				       file->size, file->root_hash,
+				       file->sig.add_data);
+
+		if (i == corrupted_file_idx) {
+			/* Corrupt third blocks hash */
+			file->mtree[0].data[2 * SHA256_DIGEST_SIZE] ^= 0xff;
+		}
+		if (emit_test_file_data(mount_dir, file))
+			goto failure;
+
+		res = load_hash_tree(mount_dir, file);
+		if (res) {
+			ksft_print_msg("Can't load hashes for %s. error: %s\n",
+				file->name, strerror(-res));
+			goto failure;
+		}
+	}
+
+	/* Validate data */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (i == corrupted_file_idx) {
+			uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE];
+			char *filename =
+				concat_file_name(mount_dir, file->name);
+			int res;
+
+			res = read_test_file(data, INCFS_DATA_FILE_BLOCK_SIZE,
+					     filename, 2);
+			free(filename);
+			if (res != -EBADMSG) {
+				ksft_print_msg("Hash violation missed1. %d\n",
+					       res);
+				goto failure;
+			}
+		} else if (validate_test_file_content(mount_dir, file) < 0)
+			goto failure;
+	}
+
+	/* Unmount and mount again, to that hashes are persistent. */
+	close(cmd_fd);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Validate data again */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (i == corrupted_file_idx) {
+			uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE];
+			char *filename =
+				concat_file_name(mount_dir, file->name);
+			int res;
+
+			res = read_test_file(data, INCFS_DATA_FILE_BLOCK_SIZE,
+					     filename, 2);
+			free(filename);
+			if (res != -EBADMSG) {
+				ksft_print_msg("Hash violation missed2. %d\n",
+					       res);
+				goto failure;
+			}
+		} else if (validate_test_file_content(mount_dir, file) < 0)
+			goto failure;
+	}
+
+	/* Final unmount */
+	close(cmd_fd);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	free(backing_dir);
+	umount(mount_dir);
+	return TEST_FAILURE;
+}
+
+enum expected_log { FULL_LOG, NO_LOG, PARTIAL_LOG };
+
+static int validate_logs(const char *mount_dir, int log_fd,
+			 struct test_file *file,
+			 enum expected_log expected_log,
+			 bool report_uid, bool expect_data)
+{
+	int result = TEST_FAILURE;
+	uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE];
+	struct incfs_pending_read_info prs[2048] = {};
+	struct incfs_pending_read_info2 prs2[2048] = {};
+	struct incfs_pending_read_info *previous_record = NULL;
+	int prs_size = ARRAY_SIZE(prs);
+	int block_count = 1 + (file->size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+	int expected_read_count, read_count, block_index, read_index;
+	char *filename = NULL;
+	int fd = -1;
+
+	TEST(filename = concat_file_name(mount_dir, file->name), filename);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+
+	if (block_count > prs_size)
+		block_count = prs_size;
+	expected_read_count = block_count;
+
+	for (block_index = 0; block_index < block_count; block_index++) {
+		int result = pread(fd, data, sizeof(data),
+			    INCFS_DATA_FILE_BLOCK_SIZE * block_index);
+
+		/* Make some read logs of type SAME_FILE_NEXT_BLOCK */
+		if (block_index % 100 == 10)
+			usleep(20000);
+
+		/* Skip some blocks to make logs of type SAME_FILE */
+		if (block_index % 10 == 5) {
+			++block_index;
+			--expected_read_count;
+		}
+
+		if (expect_data)
+			TESTCOND(result > 0);
+
+		if (!expect_data)
+			TESTEQUAL(result, -1);
+	}
+
+	if (report_uid)
+		read_count = wait_for_pending_reads2(log_fd,
+				expected_log == NO_LOG ? 10 : 0,
+				prs2, prs_size);
+	else
+		read_count = wait_for_pending_reads(log_fd,
+				expected_log == NO_LOG ? 10 : 0,
+				prs, prs_size);
+
+	if (expected_log == NO_LOG)
+		TESTEQUAL(read_count, 0);
+
+	if (expected_log == PARTIAL_LOG)
+		TESTCOND(read_count > 0 &&
+			 read_count <= expected_read_count);
+
+	if (expected_log == FULL_LOG)
+		TESTEQUAL(read_count, expected_read_count);
+
+	/* If read less than expected, advance block_index appropriately */
+	for (block_index = 0, read_index = 0;
+	     read_index < expected_read_count - read_count;
+	     block_index++, read_index++)
+		if (block_index % 10 == 5)
+			++block_index;
+
+	for (read_index = 0; read_index < read_count;
+	     block_index++, read_index++) {
+		struct incfs_pending_read_info *record = report_uid ?
+			(struct incfs_pending_read_info *) &prs2[read_index] :
+			&prs[read_index];
+
+		TESTCOND(same_id(&record->file_id, &file->id));
+		TESTEQUAL(record->block_index, block_index);
+		TESTNE(record->timestamp_us, 0);
+		if (previous_record)
+			TESTEQUAL(record->serial_number,
+				  previous_record->serial_number + 1);
+
+		previous_record = record;
+		if (block_index % 10 == 5)
+			++block_index;
+	}
+
+	result = TEST_SUCCESS;
+out:
+	close(fd);
+	free(filename);
+	return result;
+}
+
+static int read_log_test(const char *mount_dir)
+{
+	int result = TEST_FAILURE;
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+	int i = 0;
+	int cmd_fd = -1, log_fd = -1;
+	char *backing_dir = NULL;
+
+	/* Create files */
+	TEST(backing_dir = create_backing_dir(mount_dir), backing_dir);
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir,
+			       "readahead=0,report_uid,read_timeout_ms=0",
+				 false), 0);
+	TEST(cmd_fd = open_commands_file(mount_dir), cmd_fd != -1);
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		TESTEQUAL(emit_file(cmd_fd, NULL, file->name, &file->id,
+				    file->size, NULL), 0);
+	}
+	close(cmd_fd);
+	cmd_fd = -1;
+
+	/* Validate logs */
+	TEST(log_fd = open_log_file(mount_dir), log_fd != -1);
+	for (i = 0; i < file_num; i++)
+		TESTEQUAL(validate_logs(mount_dir, log_fd, &test.files[i],
+					FULL_LOG, true, false), 0);
+
+	/* Unmount and mount again without report_uid */
+	close(log_fd);
+	log_fd = -1;
+	TESTEQUAL(umount(mount_dir), 0);
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir,
+			       "readahead=0,read_timeout_ms=0", false), 0);
+
+	TEST(log_fd = open_log_file(mount_dir), log_fd != -1);
+	for (i = 0; i < file_num; i++)
+		TESTEQUAL(validate_logs(mount_dir, log_fd, &test.files[i],
+					FULL_LOG, false, false), 0);
+
+	/* No read log to make sure poll doesn't crash */
+	close(log_fd);
+	log_fd = -1;
+	TESTEQUAL(umount(mount_dir), 0);
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir,
+			       "readahead=0,rlog_pages=0,read_timeout_ms=0",
+			       false), 0);
+
+	TEST(log_fd = open_log_file(mount_dir), log_fd != -1);
+	for (i = 0; i < file_num; i++)
+		TESTEQUAL(validate_logs(mount_dir, log_fd, &test.files[i],
+					NO_LOG, false, false), 0);
+
+	/* Remount and check that logs start working again */
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir,
+			       "readahead=0,rlog_pages=1,read_timeout_ms=0",
+			       true), 0);
+	for (i = 0; i < file_num; i++)
+		TESTEQUAL(validate_logs(mount_dir, log_fd, &test.files[i],
+					PARTIAL_LOG, false, false), 0);
+
+	/* Remount and check that logs continue working */
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir,
+			       "readahead=0,rlog_pages=4,read_timeout_ms=0",
+			       true), 0);
+	for (i = 0; i < file_num; i++)
+		TESTEQUAL(validate_logs(mount_dir, log_fd, &test.files[i],
+					FULL_LOG, false, false), 0);
+
+	/* Check logs work with data */
+	for (i = 0; i < file_num; i++) {
+		TESTEQUAL(emit_test_file_data(mount_dir, &test.files[i]), 0);
+		TESTEQUAL(validate_logs(mount_dir, log_fd, &test.files[i],
+					FULL_LOG, false, true), 0);
+	}
+
+	/* Final unmount */
+	close(log_fd);
+	log_fd = -1;
+	TESTEQUAL(umount(mount_dir), 0);
+
+	result = TEST_SUCCESS;
+out:
+	close(cmd_fd);
+	close(log_fd);
+	free(backing_dir);
+	umount(mount_dir);
+	return result;
+}
+
+static int emit_partial_test_file_data(const char *mount_dir,
+				       struct test_file *file)
+{
+	int i, j;
+	int block_cnt = 1 + (file->size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+	int *block_indexes = NULL;
+	int result = 0;
+	int blocks_written = 0;
+	int bw_fd = -1;
+	char buffer[20];
+	struct pollfd pollfd;
+	long blocks_written_total, blocks_written_new_total;
+
+	if (file->size == 0)
+		return 0;
+
+	bw_fd = open_blocks_written_file(mount_dir);
+	if (bw_fd == -1)
+		return -errno;
+
+	result = read(bw_fd, buffer, sizeof(buffer));
+	if (result <= 0) {
+		result = -EIO;
+		goto out;
+	}
+
+	buffer[result] = 0;
+	blocks_written_total = strtol(buffer, NULL, 10);
+	result = 0;
+
+	pollfd = (struct pollfd) {
+		.fd = bw_fd,
+		.events = POLLIN,
+	};
+
+	result = poll(&pollfd, 1, 0);
+	if (result) {
+		result = -EIO;
+		goto out;
+	}
+
+	/* Emit 2 blocks, skip 2 blocks etc*/
+	block_indexes = calloc(block_cnt, sizeof(*block_indexes));
+	for (i = 0, j = 0; i < block_cnt; ++i)
+		if ((i & 2) == 0) {
+			block_indexes[j] = i;
+			++j;
+		}
+
+	for (i = 0; i < j; i += blocks_written) {
+		blocks_written = emit_test_blocks(mount_dir, file,
+						  block_indexes + i, j - i);
+		if (blocks_written < 0) {
+			result = blocks_written;
+			goto out;
+		}
+		if (blocks_written == 0) {
+			result = -EIO;
+			goto out;
+		}
+
+		result = poll(&pollfd, 1, 0);
+		if (result != 1 || pollfd.revents != POLLIN) {
+			result = -EIO;
+			goto out;
+		}
+
+		result = read(bw_fd, buffer, sizeof(buffer));
+		buffer[result] = 0;
+		blocks_written_new_total = strtol(buffer, NULL, 10);
+
+		if (blocks_written_new_total - blocks_written_total
+		    != blocks_written) {
+			result = -EIO;
+			goto out;
+		}
+
+		blocks_written_total = blocks_written_new_total;
+		result = 0;
+	}
+out:
+	free(block_indexes);
+	close(bw_fd);
+	return result;
+}
+
+static int validate_ranges(const char *mount_dir, struct test_file *file)
+{
+	int block_cnt = 1 + (file->size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+	char *filename = concat_file_name(mount_dir, file->name);
+	int fd;
+	struct incfs_filled_range ranges[128];
+	struct incfs_get_filled_blocks_args fba = {
+		.range_buffer = ptr_to_u64(ranges),
+		.range_buffer_size = sizeof(ranges),
+	};
+	int error = TEST_SUCCESS;
+	int i;
+	int range_cnt;
+	int cmd_fd = -1;
+	struct incfs_permit_fill permit_fill;
+
+	fd = open(filename, O_RDONLY | O_CLOEXEC);
+	free(filename);
+	if (fd <= 0)
+		return TEST_FAILURE;
+
+	error = ioctl(fd, INCFS_IOC_GET_FILLED_BLOCKS, &fba);
+	if (error != -1 || errno != EPERM) {
+		ksft_print_msg("INCFS_IOC_GET_FILLED_BLOCKS not blocked\n");
+		error = -EPERM;
+		goto out;
+	}
+
+	cmd_fd = open_commands_file(mount_dir);
+	permit_fill.file_descriptor = fd;
+	if (ioctl(cmd_fd, INCFS_IOC_PERMIT_FILL, &permit_fill)) {
+		print_error("INCFS_IOC_PERMIT_FILL failed");
+		return -EPERM;
+		goto out;
+	}
+
+	error = ioctl(fd, INCFS_IOC_GET_FILLED_BLOCKS, &fba);
+	if (error && errno != ERANGE)
+		goto out;
+
+	if (error && errno == ERANGE && block_cnt < 509)
+		goto out;
+
+	if (!error && block_cnt >= 509) {
+		error = -ERANGE;
+		goto out;
+	}
+
+	if (fba.total_blocks_out != block_cnt) {
+		error = -EINVAL;
+		goto out;
+	}
+
+	if (fba.data_blocks_out != block_cnt) {
+		error = -EINVAL;
+		goto out;
+	}
+
+	range_cnt = (block_cnt + 3) / 4;
+	if (range_cnt > 128)
+		range_cnt = 128;
+	if (range_cnt != fba.range_buffer_size_out / sizeof(*ranges)) {
+		error = -ERANGE;
+		goto out;
+	}
+
+	error = TEST_SUCCESS;
+	for (i = 0; i < fba.range_buffer_size_out / sizeof(*ranges) - 1; ++i)
+		if (ranges[i].begin != i * 4 || ranges[i].end != i * 4 + 2) {
+			error = -EINVAL;
+			goto out;
+		}
+
+	if (ranges[i].begin != i * 4 ||
+	    (ranges[i].end != i * 4 + 1 && ranges[i].end != i * 4 + 2)) {
+		error = -EINVAL;
+		goto out;
+	}
+
+	for (i = 0; i < 64; ++i) {
+		fba.start_index = i * 2;
+		fba.end_index = i * 2 + 2;
+		error = ioctl(fd, INCFS_IOC_GET_FILLED_BLOCKS, &fba);
+		if (error)
+			goto out;
+
+		if (fba.total_blocks_out != block_cnt) {
+			error = -EINVAL;
+			goto out;
+		}
+
+		if (fba.start_index >= block_cnt) {
+			if (fba.index_out != fba.start_index) {
+				error = -EINVAL;
+				goto out;
+			}
+
+			break;
+		}
+
+		if (i % 2) {
+			if (fba.range_buffer_size_out != 0) {
+				error = -EINVAL;
+				goto out;
+			}
+		} else {
+			if (fba.range_buffer_size_out != sizeof(*ranges)) {
+				error = -EINVAL;
+				goto out;
+			}
+
+			if (ranges[0].begin != i * 2) {
+				error = -EINVAL;
+				goto out;
+			}
+
+			if (ranges[0].end != i * 2 + 1 &&
+			    ranges[0].end != i * 2 + 2) {
+				error = -EINVAL;
+				goto out;
+			}
+		}
+	}
+
+out:
+	close(fd);
+	close(cmd_fd);
+	return error;
+}
+
+static int get_blocks_test(const char *mount_dir)
+{
+	char *backing_dir;
+	int cmd_fd = -1;
+	int i;
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	if (mount_fs_opt(mount_dir, backing_dir, "readahead=0", false) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Write data. */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (emit_file(cmd_fd, NULL, file->name, &file->id, file->size,
+			      NULL))
+			goto failure;
+
+		if (emit_partial_test_file_data(mount_dir, file))
+			goto failure;
+	}
+
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (validate_ranges(mount_dir, file))
+			goto failure;
+
+		/*
+		 * The smallest files are filled completely, so this checks that
+		 * the fast get_filled_blocks path is not causing issues
+		 */
+		if (validate_ranges(mount_dir, file))
+			goto failure;
+	}
+
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return TEST_FAILURE;
+}
+
+static int emit_partial_test_file_hash(const char *mount_dir,
+				       struct test_file *file)
+{
+	int err;
+	int fd;
+	struct incfs_fill_blocks fill_blocks = {
+		.count = 1,
+	};
+	struct incfs_fill_block *fill_block_array =
+		calloc(fill_blocks.count, sizeof(struct incfs_fill_block));
+	uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE];
+
+	if (file->size <= 4096 / 32 * 4096)
+		return 0;
+
+	if (!fill_block_array)
+		return -ENOMEM;
+	fill_blocks.fill_blocks = ptr_to_u64(fill_block_array);
+
+	rnd_buf(data, sizeof(data), 0);
+
+	fill_block_array[0] =
+		(struct incfs_fill_block){ .block_index = 1,
+					   .data_len =
+						   INCFS_DATA_FILE_BLOCK_SIZE,
+					   .data = ptr_to_u64(data),
+					   .flags = INCFS_BLOCK_FLAGS_HASH };
+
+	fd = open_file_by_id(mount_dir, file->id, true);
+	if (fd < 0) {
+		err = errno;
+		goto failure;
+	}
+
+	err = ioctl(fd, INCFS_IOC_FILL_BLOCKS, &fill_blocks);
+	close(fd);
+	if (err < fill_blocks.count)
+		err = errno;
+	else
+		err = 0;
+
+failure:
+	free(fill_block_array);
+	return err;
+}
+
+static int validate_hash_ranges(const char *mount_dir, struct test_file *file)
+{
+	int block_cnt = 1 + (file->size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+	char *filename = concat_file_name(mount_dir, file->name);
+	int fd;
+	struct incfs_filled_range ranges[128];
+	struct incfs_get_filled_blocks_args fba = {
+		.range_buffer = ptr_to_u64(ranges),
+		.range_buffer_size = sizeof(ranges),
+	};
+	int error = TEST_SUCCESS;
+	int file_blocks = (file->size + INCFS_DATA_FILE_BLOCK_SIZE - 1) /
+			  INCFS_DATA_FILE_BLOCK_SIZE;
+	int cmd_fd = -1;
+	struct incfs_permit_fill permit_fill;
+
+	if (file->size <= 4096 / 32 * 4096)
+		return 0;
+
+	fd = open(filename, O_RDONLY | O_CLOEXEC);
+	free(filename);
+	if (fd <= 0)
+		return TEST_FAILURE;
+
+	error = ioctl(fd, INCFS_IOC_GET_FILLED_BLOCKS, &fba);
+	if (error != -1 || errno != EPERM) {
+		ksft_print_msg("INCFS_IOC_GET_FILLED_BLOCKS not blocked\n");
+		error = -EPERM;
+		goto out;
+	}
+
+	cmd_fd = open_commands_file(mount_dir);
+	permit_fill.file_descriptor = fd;
+	if (ioctl(cmd_fd, INCFS_IOC_PERMIT_FILL, &permit_fill)) {
+		print_error("INCFS_IOC_PERMIT_FILL failed");
+		return -EPERM;
+		goto out;
+	}
+
+	error = ioctl(fd, INCFS_IOC_GET_FILLED_BLOCKS, &fba);
+	if (error)
+		goto out;
+
+	if (fba.total_blocks_out <= block_cnt) {
+		error = -EINVAL;
+		goto out;
+	}
+
+	if (fba.data_blocks_out != block_cnt) {
+		error = -EINVAL;
+		goto out;
+	}
+
+	if (fba.range_buffer_size_out != sizeof(struct incfs_filled_range)) {
+		error = -EINVAL;
+		goto out;
+	}
+
+	if (ranges[0].begin != file_blocks + 1 ||
+	    ranges[0].end != file_blocks + 2) {
+		error = -EINVAL;
+		goto out;
+	}
+
+out:
+	close(cmd_fd);
+	close(fd);
+	return error;
+}
+
+static int get_hash_blocks_test(const char *mount_dir)
+{
+	char *backing_dir;
+	int cmd_fd = -1;
+	int i;
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	if (mount_fs_opt(mount_dir, backing_dir, "readahead=0", false) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (crypto_emit_file(cmd_fd, NULL, file->name, &file->id,
+				     file->size, file->root_hash,
+				     file->sig.add_data))
+			goto failure;
+
+		if (emit_partial_test_file_hash(mount_dir, file))
+			goto failure;
+	}
+
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (validate_hash_ranges(mount_dir, file))
+			goto failure;
+	}
+
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return TEST_FAILURE;
+}
+
+static int large_file_test(const char *mount_dir)
+{
+	char *backing_dir;
+	int cmd_fd = -1;
+	int i;
+	int result = TEST_FAILURE;
+	uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE] = {};
+	int block_count = 3LL * 1024 * 1024 * 1024 / INCFS_DATA_FILE_BLOCK_SIZE;
+	struct incfs_fill_block *block_buf =
+		calloc(block_count, sizeof(struct incfs_fill_block));
+	struct incfs_fill_blocks fill_blocks = {
+		.count = block_count,
+		.fill_blocks = ptr_to_u64(block_buf),
+	};
+	incfs_uuid_t id;
+	int fd = -1;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	if (mount_fs_opt(mount_dir, backing_dir, "readahead=0", false) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	if (emit_file(cmd_fd, NULL, "very_large_file", &id,
+		      (uint64_t)block_count * INCFS_DATA_FILE_BLOCK_SIZE,
+		      NULL) < 0)
+		goto failure;
+
+	for (i = 0; i < block_count; i++) {
+		block_buf[i].compression = COMPRESSION_NONE;
+		block_buf[i].block_index = i;
+		block_buf[i].data_len = INCFS_DATA_FILE_BLOCK_SIZE;
+		block_buf[i].data = ptr_to_u64(data);
+	}
+
+	fd = open_file_by_id(mount_dir, id, true);
+	if (fd < 0)
+		goto failure;
+
+	if (ioctl(fd, INCFS_IOC_FILL_BLOCKS, &fill_blocks) != block_count)
+		goto failure;
+
+	if (emit_file(cmd_fd, NULL, "very_very_large_file", &id, 1LL << 40,
+		      NULL) < 0)
+		goto failure;
+
+	result = TEST_SUCCESS;
+
+failure:
+	close(fd);
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return result;
+}
+
+static int validate_mapped_file(const char *orig_name, const char *name,
+				size_t size, size_t offset)
+{
+	struct stat st;
+	int orig_fd = -1, fd = -1;
+	size_t block;
+	int result = TEST_FAILURE;
+
+	if (stat(name, &st)) {
+		ksft_print_msg("Failed to stat %s with error %s\n",
+			       name, strerror(errno));
+		goto failure;
+	}
+
+	if (size != st.st_size) {
+		ksft_print_msg("Mismatched file sizes for file %s - expected %llu, got %llu\n",
+				   name, size, st.st_size);
+		goto failure;
+	}
+
+	fd = open(name, O_RDONLY | O_CLOEXEC);
+	if (fd == -1) {
+		ksft_print_msg("Failed to open %s with error %s\n", name,
+			       strerror(errno));
+		goto failure;
+	}
+
+	orig_fd = open(orig_name, O_RDONLY | O_CLOEXEC);
+	if (orig_fd == -1) {
+		ksft_print_msg("Failed to open %s with error %s\n", orig_name,
+			       strerror(errno));
+		goto failure;
+	}
+
+	for (block = 0; block < size; block += INCFS_DATA_FILE_BLOCK_SIZE) {
+		uint8_t orig_data[INCFS_DATA_FILE_BLOCK_SIZE];
+		uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE];
+		ssize_t orig_read, mapped_read;
+
+		orig_read = pread(orig_fd, orig_data,
+				 INCFS_DATA_FILE_BLOCK_SIZE, block + offset);
+		mapped_read = pread(fd, data, INCFS_DATA_FILE_BLOCK_SIZE,
+				    block);
+
+		if (orig_read < mapped_read ||
+		    mapped_read != min(size - block,
+				       INCFS_DATA_FILE_BLOCK_SIZE)) {
+			ksft_print_msg("Failed to read enough data: %llu %llu %llu %lld %lld\n",
+				       block, size, offset, orig_read,
+				       mapped_read);
+			goto failure;
+		}
+
+		if (memcmp(orig_data, data, mapped_read)) {
+			ksft_print_msg("Data doesn't match: %llu %llu %llu %lld %lld\n",
+				       block, size, offset, orig_read,
+				       mapped_read);
+			goto failure;
+		}
+	}
+
+	result = TEST_SUCCESS;
+
+failure:
+	close(orig_fd);
+	close(fd);
+	return result;
+}
+
+static int mapped_file_test(const char *mount_dir)
+{
+	char *backing_dir;
+	int result = TEST_FAILURE;
+	int cmd_fd = -1;
+	int i;
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	if (mount_fs_opt(mount_dir, backing_dir, "readahead=0", false) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	for (i = 0; i < file_num; ++i) {
+		struct test_file *file = &test.files[i];
+		size_t blocks = file->size / INCFS_DATA_FILE_BLOCK_SIZE;
+		size_t mapped_offset = blocks / 4 *
+			INCFS_DATA_FILE_BLOCK_SIZE;
+		size_t mapped_size = file->size / 4 * 3 - mapped_offset;
+		struct incfs_create_mapped_file_args mfa;
+		char mapped_file_name[FILENAME_MAX];
+		char orig_file_path[PATH_MAX];
+		char mapped_file_path[PATH_MAX];
+
+		if (emit_file(cmd_fd, NULL, file->name, &file->id, file->size,
+					NULL) < 0)
+			goto failure;
+
+		if (emit_test_file_data(mount_dir, file))
+			goto failure;
+
+		if (snprintf(mapped_file_name, ARRAY_SIZE(mapped_file_name),
+					"%s.mapped", file->name) < 0)
+			goto failure;
+
+		mfa = (struct incfs_create_mapped_file_args) {
+			.size = mapped_size,
+			.mode = 0664,
+			.file_name = ptr_to_u64(mapped_file_name),
+			.source_file_id = file->id,
+			.source_offset = mapped_offset,
+		};
+
+		result = ioctl(cmd_fd, INCFS_IOC_CREATE_MAPPED_FILE, &mfa);
+		if (result) {
+			ksft_print_msg(
+				"Failed to create mapped file with error %d\n",
+				result);
+			goto failure;
+		}
+
+		result = snprintf(orig_file_path,
+				  ARRAY_SIZE(orig_file_path), "%s/%s",
+				  mount_dir, file->name);
+
+		if (result < 0 || result >= ARRAY_SIZE(mapped_file_path)) {
+			result = TEST_FAILURE;
+			goto failure;
+		}
+
+		result = snprintf(mapped_file_path,
+				  ARRAY_SIZE(mapped_file_path), "%s/%s",
+				  mount_dir, mapped_file_name);
+
+		if (result < 0 || result >= ARRAY_SIZE(mapped_file_path)) {
+			result = TEST_FAILURE;
+			goto failure;
+		}
+
+		result = validate_mapped_file(orig_file_path, mapped_file_path,
+					      mapped_size, mapped_offset);
+		if (result)
+			goto failure;
+	}
+
+failure:
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return result;
+}
+
+static const char v1_file[] = {
+	/* Header */
+	/* 0x00: Magic number */
+	0x49, 0x4e, 0x43, 0x46, 0x53, 0x00, 0x00, 0x00,
+	/* 0x08: Version */
+	0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	/* 0x10: Header size */
+	0x38, 0x00,
+	/* 0x12: Block size */
+	0x00, 0x10,
+	/* 0x14: Flags */
+	0x00, 0x00, 0x00, 0x00,
+	/* 0x18: First md offset */
+	0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	/* 0x20: File size */
+	0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	/* 0x28: UUID */
+	0x8c, 0x7d, 0xd9, 0x22, 0xad, 0x47, 0x49, 0x4f,
+	0xc0, 0x2c, 0x38, 0x8e, 0x12, 0xc0, 0x0e, 0xac,
+
+	/* 0x38: Attribute */
+	0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+	0x31, 0x32, 0x33, 0x31, 0x32, 0x33,
+
+	/* Attribute md record */
+	/* 0x46: Type */
+	0x02,
+	/* 0x47: Size */
+	0x25, 0x00,
+	/* 0x49: CRC */
+	0x9a, 0xef, 0xef, 0x72,
+	/* 0x4d: Next md offset */
+	0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	/* 0x55: Prev md offset */
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	/* 0x5d: fa_offset */
+	0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	/* 0x65: fa_size */
+	0x0e, 0x00,
+	/* 0x67: fa_crc */
+	0xfb, 0x5e, 0x72, 0x89,
+
+	/* Blockmap table */
+	/* 0x6b: First 10-byte entry */
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+	/* Blockmap md record */
+	/* 0x75: Type */
+	0x01,
+	/* 0x76: Size */
+	0x23, 0x00,
+	/* 0x78: CRC */
+	0x74, 0x45, 0xd3, 0xb9,
+	/* 0x7c: Next md offset */
+	0x00, 0x00, 0x00, 0x00,	0x00, 0x00, 0x00, 0x00,
+	/* 0x84: Prev md offset */
+	0x46, 0x00, 0x00, 0x00,	0x00, 0x00, 0x00, 0x00,
+	/* 0x8c: blockmap offset */
+	0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	/* 0x94: blockmap count */
+	0x01, 0x00, 0x00, 0x00,
+};
+
+static int compatibility_test(const char *mount_dir)
+{
+	static const char *name = "file";
+	int result = TEST_FAILURE;
+	char *backing_dir = NULL;
+	char *filename = NULL;
+	int fd = -1;
+	uint64_t size = 0x0c;
+
+	TEST(backing_dir = create_backing_dir(mount_dir), backing_dir);
+	TEST(filename = concat_file_name(backing_dir, name), filename);
+	TEST(fd = open(filename, O_CREAT | O_WRONLY | O_CLOEXEC, 0777),
+	     fd != -1);
+	TESTEQUAL(write(fd, v1_file, sizeof(v1_file)), sizeof(v1_file));
+	TESTEQUAL(fsetxattr(fd, INCFS_XATTR_SIZE_NAME, &size, sizeof(size), 0),
+		  0);
+	TESTEQUAL(mount_fs(mount_dir, backing_dir, 50), 0);
+	free(filename);
+	TEST(filename = concat_file_name(mount_dir, name), filename);
+	close(fd);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+
+	result = TEST_SUCCESS;
+out:
+	close(fd);
+	umount(mount_dir);
+	free(backing_dir);
+	free(filename);
+	return result;
+}
+
+static int zero_blocks_written_count(int fd, uint32_t data_blocks_written,
+				     uint32_t hash_blocks_written)
+{
+	int test_result = TEST_FAILURE;
+	uint64_t offset;
+	uint8_t type;
+	uint32_t bw;
+
+	/* Get first md record */
+	TESTEQUAL(pread(fd, &offset, sizeof(offset), 24), sizeof(offset));
+
+	/* Find status md record */
+	for (;;) {
+		TESTNE(offset, 0);
+		TESTEQUAL(pread(fd, &type, sizeof(type), le64_to_cpu(offset)),
+			  sizeof(type));
+		if (type == 4)
+			break;
+		TESTEQUAL(pread(fd, &offset, sizeof(offset),
+				le64_to_cpu(offset) + 7),
+			  sizeof(offset));
+	}
+
+	/* Read blocks_written */
+	offset = le64_to_cpu(offset);
+	TESTEQUAL(pread(fd, &bw, sizeof(bw), offset + 23), sizeof(bw));
+	TESTEQUAL(le32_to_cpu(bw), data_blocks_written);
+	TESTEQUAL(pread(fd, &bw, sizeof(bw), offset + 27), sizeof(bw));
+	TESTEQUAL(le32_to_cpu(bw), hash_blocks_written);
+
+	/* Write out zero */
+	bw = 0;
+	TESTEQUAL(pwrite(fd, &bw, sizeof(bw), offset + 23), sizeof(bw));
+	TESTEQUAL(pwrite(fd, &bw, sizeof(bw), offset + 27), sizeof(bw));
+
+	test_result = TEST_SUCCESS;
+out:
+	return test_result;
+}
+
+static int validate_block_count(const char *mount_dir, const char *backing_dir,
+				struct test_file *file,
+				int total_data_blocks, int filled_data_blocks,
+				int total_hash_blocks, int filled_hash_blocks)
+{
+	char *filename = NULL;
+	char *backing_filename = NULL;
+	int fd = -1;
+	struct incfs_get_block_count_args bca = {};
+	int test_result = TEST_FAILURE;
+	struct incfs_filled_range ranges[128];
+	struct incfs_get_filled_blocks_args fba = {
+		.range_buffer = ptr_to_u64(ranges),
+		.range_buffer_size = sizeof(ranges),
+	};
+	int cmd_fd = -1;
+	struct incfs_permit_fill permit_fill;
+
+	TEST(filename = concat_file_name(mount_dir, file->name), filename);
+	TEST(backing_filename = concat_file_name(backing_dir, file->name),
+	     backing_filename);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+
+	TESTEQUAL(ioctl(fd, INCFS_IOC_GET_BLOCK_COUNT, &bca), 0);
+	TESTEQUAL(bca.total_data_blocks_out, total_data_blocks);
+	TESTEQUAL(bca.filled_data_blocks_out, filled_data_blocks);
+	TESTEQUAL(bca.total_hash_blocks_out, total_hash_blocks);
+	TESTEQUAL(bca.filled_hash_blocks_out, filled_hash_blocks);
+
+	close(fd);
+	TESTEQUAL(umount(mount_dir), 0);
+	TEST(fd = open(backing_filename, O_RDWR | O_CLOEXEC), fd != -1);
+	TESTEQUAL(zero_blocks_written_count(fd, filled_data_blocks,
+					    filled_hash_blocks),
+		  TEST_SUCCESS);
+	close(fd);
+	fd = -1;
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir, "readahead=0", false),
+		  0);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+
+	TESTEQUAL(ioctl(fd, INCFS_IOC_GET_BLOCK_COUNT, &bca), 0);
+	TESTEQUAL(bca.total_data_blocks_out, total_data_blocks);
+	TESTEQUAL(bca.filled_data_blocks_out, 0);
+	TESTEQUAL(bca.total_hash_blocks_out, total_hash_blocks);
+	TESTEQUAL(bca.filled_hash_blocks_out, 0);
+
+	TEST(cmd_fd = open_commands_file(mount_dir), cmd_fd != -1);
+	permit_fill.file_descriptor = fd;
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_PERMIT_FILL, &permit_fill), 0);
+	do {
+		ioctl(fd, INCFS_IOC_GET_FILLED_BLOCKS, &fba);
+		fba.start_index = fba.index_out + 1;
+	} while (fba.index_out < fba.total_blocks_out);
+
+	TESTEQUAL(ioctl(fd, INCFS_IOC_GET_BLOCK_COUNT, &bca), 0);
+	TESTEQUAL(bca.total_data_blocks_out, total_data_blocks);
+	TESTEQUAL(bca.filled_data_blocks_out, filled_data_blocks);
+	TESTEQUAL(bca.total_hash_blocks_out, total_hash_blocks);
+	TESTEQUAL(bca.filled_hash_blocks_out, filled_hash_blocks);
+
+	test_result = TEST_SUCCESS;
+out:
+	close(cmd_fd);
+	close(fd);
+	free(filename);
+	free(backing_filename);
+	return test_result;
+}
+
+
+
+static int validate_data_block_count(const char *mount_dir,
+				     const char *backing_dir,
+				     struct test_file *file)
+{
+	const int total_data_blocks = 1 + (file->size - 1) /
+						INCFS_DATA_FILE_BLOCK_SIZE;
+	const int filled_data_blocks = (total_data_blocks + 1) / 2;
+
+	int test_result = TEST_FAILURE;
+	char *filename = NULL;
+	char *incomplete_filename = NULL;
+	struct stat stat_buf_incomplete, stat_buf_file;
+	int fd = -1;
+	struct incfs_get_block_count_args bca = {};
+	int i;
+
+	TEST(filename = concat_file_name(mount_dir, file->name), filename);
+	TEST(incomplete_filename = get_incomplete_filename(mount_dir, file->id),
+	     incomplete_filename);
+
+	TESTEQUAL(stat(filename, &stat_buf_file), 0);
+	TESTEQUAL(stat(incomplete_filename, &stat_buf_incomplete), 0);
+	TESTEQUAL(stat_buf_file.st_ino, stat_buf_incomplete.st_ino);
+	TESTEQUAL(stat_buf_file.st_nlink, 3);
+
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+	TESTEQUAL(ioctl(fd, INCFS_IOC_GET_BLOCK_COUNT, &bca), 0);
+	TESTEQUAL(bca.total_data_blocks_out, total_data_blocks);
+	TESTEQUAL(bca.filled_data_blocks_out, 0);
+	TESTEQUAL(bca.total_hash_blocks_out, 0);
+	TESTEQUAL(bca.filled_hash_blocks_out, 0);
+
+	for (i = 0; i < total_data_blocks; i += 2)
+		TESTEQUAL(emit_test_block(mount_dir, file, i), 0);
+
+	TESTEQUAL(ioctl(fd, INCFS_IOC_GET_BLOCK_COUNT, &bca), 0);
+	TESTEQUAL(bca.total_data_blocks_out, total_data_blocks);
+	TESTEQUAL(bca.filled_data_blocks_out, filled_data_blocks);
+	TESTEQUAL(bca.total_hash_blocks_out, 0);
+	TESTEQUAL(bca.filled_hash_blocks_out, 0);
+	close(fd);
+	fd = -1;
+
+	TESTEQUAL(validate_block_count(mount_dir, backing_dir, file,
+				       total_data_blocks, filled_data_blocks,
+				       0, 0),
+		  0);
+
+	for (i = 1; i < total_data_blocks; i += 2)
+		TESTEQUAL(emit_test_block(mount_dir, file, i), 0);
+
+	TESTEQUAL(stat(incomplete_filename, &stat_buf_incomplete), -1);
+	TESTEQUAL(errno, ENOENT);
+
+	test_result = TEST_SUCCESS;
+out:
+	close(fd);
+	free(incomplete_filename);
+	free(filename);
+	return test_result;
+}
+
+static int data_block_count_test(const char *mount_dir)
+{
+	int result = TEST_FAILURE;
+	char *backing_dir;
+	int cmd_fd = -1;
+	int i;
+	struct test_files_set test = get_test_files_set();
+
+	TEST(backing_dir = create_backing_dir(mount_dir), backing_dir);
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir, "readahead=0", false),
+		  0);
+
+	for (i = 0; i < test.files_count; ++i) {
+		struct test_file *file = &test.files[i];
+
+		TEST(cmd_fd = open_commands_file(mount_dir), cmd_fd != -1);
+		TESTEQUAL(emit_file(cmd_fd, NULL, file->name, &file->id,
+				    file->size,	NULL),
+			  0);
+		close(cmd_fd);
+		cmd_fd = -1;
+
+		TESTEQUAL(validate_data_block_count(mount_dir, backing_dir,
+						    file),
+			  0);
+	}
+
+	result = TEST_SUCCESS;
+out:
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return result;
+}
+
+static int validate_hash_block_count(const char *mount_dir,
+				     const char *backing_dir,
+				     struct test_file *file)
+{
+	const int digest_size = SHA256_DIGEST_SIZE;
+	const int hash_per_block = INCFS_DATA_FILE_BLOCK_SIZE / digest_size;
+	const int total_data_blocks = 1 + (file->size - 1) /
+					INCFS_DATA_FILE_BLOCK_SIZE;
+
+	int result = TEST_FAILURE;
+	int hash_layer = total_data_blocks;
+	int total_hash_blocks = 0;
+	int filled_hash_blocks;
+	char *filename = NULL;
+	int fd = -1;
+	struct incfs_get_block_count_args bca = {};
+
+	while (hash_layer > 1) {
+		hash_layer = (hash_layer + hash_per_block - 1) / hash_per_block;
+		total_hash_blocks += hash_layer;
+	}
+	filled_hash_blocks = total_hash_blocks > 1 ? 1 : 0;
+
+	TEST(filename = concat_file_name(mount_dir, file->name), filename);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+
+	TESTEQUAL(ioctl(fd, INCFS_IOC_GET_BLOCK_COUNT, &bca), 0);
+	TESTEQUAL(bca.total_data_blocks_out, total_data_blocks);
+	TESTEQUAL(bca.filled_data_blocks_out, 0);
+	TESTEQUAL(bca.total_hash_blocks_out, total_hash_blocks);
+	TESTEQUAL(bca.filled_hash_blocks_out, 0);
+
+	TESTEQUAL(emit_partial_test_file_hash(mount_dir, file), 0);
+
+	TESTEQUAL(ioctl(fd, INCFS_IOC_GET_BLOCK_COUNT, &bca), 0);
+	TESTEQUAL(bca.total_data_blocks_out, total_data_blocks);
+	TESTEQUAL(bca.filled_data_blocks_out, 0);
+	TESTEQUAL(bca.total_hash_blocks_out, total_hash_blocks);
+	TESTEQUAL(bca.filled_hash_blocks_out, filled_hash_blocks);
+	close(fd);
+	fd = -1;
+
+	if (filled_hash_blocks)
+		TESTEQUAL(validate_block_count(mount_dir, backing_dir, file,
+				       total_data_blocks, 0,
+				       total_hash_blocks, filled_hash_blocks),
+		  0);
+
+	result = TEST_SUCCESS;
+out:
+	close(fd);
+	free(filename);
+	return result;
+}
+
+static int hash_block_count_test(const char *mount_dir)
+{
+	int result = TEST_FAILURE;
+	char *backing_dir;
+	int cmd_fd = -1;
+	int i;
+	struct test_files_set test = get_test_files_set();
+
+	TEST(backing_dir = create_backing_dir(mount_dir), backing_dir);
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir, "readahead=0", false),
+		  0);
+
+	for (i = 0; i < test.files_count; i++) {
+		struct test_file *file = &test.files[i];
+
+		TEST(cmd_fd = open_commands_file(mount_dir), cmd_fd != -1);
+		TESTEQUAL(crypto_emit_file(cmd_fd, NULL, file->name, &file->id,
+				     file->size, file->root_hash,
+				     file->sig.add_data),
+			  0);
+		close(cmd_fd);
+		cmd_fd = -1;
+
+		TESTEQUAL(validate_hash_block_count(mount_dir, backing_dir,
+						    &test.files[i]),
+			  0);
+	}
+
+	result = TEST_SUCCESS;
+out:
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return result;
+}
+
+static int is_close(struct timespec *start, int expected_ms)
+{
+	const int allowed_variance = 100;
+	int result = TEST_FAILURE;
+	struct timespec finish;
+	int diff;
+
+	TESTEQUAL(clock_gettime(CLOCK_MONOTONIC, &finish), 0);
+	diff = (finish.tv_sec - start->tv_sec) * 1000 +
+		(finish.tv_nsec - start->tv_nsec) / 1000000;
+
+	TESTCOND(diff >= expected_ms - allowed_variance);
+	TESTCOND(diff <= expected_ms + allowed_variance);
+	result = TEST_SUCCESS;
+out:
+	return result;
+}
+
+static int per_uid_read_timeouts_test(const char *mount_dir)
+{
+	struct test_file file = {
+		.name = "file",
+		.size = 16 * INCFS_DATA_FILE_BLOCK_SIZE
+	};
+
+	int result = TEST_FAILURE;
+	char *backing_dir = NULL;
+	int pid = -1;
+	int cmd_fd = -1;
+	char *filename = NULL;
+	int fd = -1;
+	struct timespec start;
+	char buffer[4096];
+	struct incfs_per_uid_read_timeouts purt_get[1];
+	struct incfs_get_read_timeouts_args grt = {
+		ptr_to_u64(purt_get),
+		sizeof(purt_get)
+	};
+	struct incfs_per_uid_read_timeouts purt_set[] = {
+		{
+			.uid = 0,
+			.min_time_us = 1000000,
+			.min_pending_time_us = 2000000,
+			.max_pending_time_us = 3000000,
+		},
+	};
+	struct incfs_set_read_timeouts_args srt = {
+		ptr_to_u64(purt_set),
+		sizeof(purt_set)
+	};
+	int status;
+
+	TEST(backing_dir = create_backing_dir(mount_dir), backing_dir);
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir,
+			       "read_timeout_ms=1000,readahead=0", false), 0);
+
+	TEST(cmd_fd = open_commands_file(mount_dir), cmd_fd != -1);
+	TESTEQUAL(emit_file(cmd_fd, NULL, file.name, &file.id, file.size,
+			    NULL), 0);
+
+	TEST(filename = concat_file_name(mount_dir, file.name), filename);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+	TESTEQUAL(fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC), 0);
+
+	/* Default mount options read failure is 1000 */
+	TESTEQUAL(clock_gettime(CLOCK_MONOTONIC, &start), 0);
+	TESTEQUAL(pread(fd, buffer, sizeof(buffer), 0), -1);
+	TESTEQUAL(is_close(&start, 1000), 0);
+
+	grt.timeouts_array_size = 0;
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_GET_READ_TIMEOUTS, &grt), 0);
+	TESTEQUAL(grt.timeouts_array_size_out, 0);
+
+	/* Set it to 3000 */
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_SET_READ_TIMEOUTS, &srt), 0);
+	TESTEQUAL(clock_gettime(CLOCK_MONOTONIC, &start), 0);
+	TESTEQUAL(pread(fd, buffer, sizeof(buffer), 0), -1);
+	TESTEQUAL(is_close(&start, 3000), 0);
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_GET_READ_TIMEOUTS, &grt), -1);
+	TESTEQUAL(errno, E2BIG);
+	TESTEQUAL(grt.timeouts_array_size_out, sizeof(purt_get));
+	grt.timeouts_array_size = sizeof(purt_get);
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_GET_READ_TIMEOUTS, &grt), 0);
+	TESTEQUAL(grt.timeouts_array_size_out, sizeof(purt_get));
+	TESTEQUAL(purt_get[0].uid, purt_set[0].uid);
+	TESTEQUAL(purt_get[0].min_time_us, purt_set[0].min_time_us);
+	TESTEQUAL(purt_get[0].min_pending_time_us,
+		  purt_set[0].min_pending_time_us);
+	TESTEQUAL(purt_get[0].max_pending_time_us,
+		  purt_set[0].max_pending_time_us);
+
+	/* Still 1000 in UID 2 */
+	TESTEQUAL(clock_gettime(CLOCK_MONOTONIC, &start), 0);
+	TEST(pid = fork(), pid != -1);
+	if (pid == 0) {
+		TESTEQUAL(setuid(2), 0);
+		TESTEQUAL(pread(fd, buffer, sizeof(buffer), 0), -1);
+		exit(0);
+	}
+	TESTNE(wait(&status), -1);
+	TESTEQUAL(WEXITSTATUS(status), 0);
+	TESTEQUAL(is_close(&start, 1000), 0);
+
+	/* Set it to default */
+	purt_set[0].max_pending_time_us = UINT32_MAX;
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_SET_READ_TIMEOUTS, &srt), 0);
+	TESTEQUAL(clock_gettime(CLOCK_MONOTONIC, &start), 0);
+	TESTEQUAL(pread(fd, buffer, sizeof(buffer), 0), -1);
+	TESTEQUAL(is_close(&start, 1000), 0);
+
+	/* Test min read time */
+	TESTEQUAL(emit_test_block(mount_dir, &file, 0), 0);
+	TESTEQUAL(clock_gettime(CLOCK_MONOTONIC, &start), 0);
+	TESTEQUAL(pread(fd, buffer, sizeof(buffer), 0), sizeof(buffer));
+	TESTEQUAL(is_close(&start, 1000), 0);
+
+	/* Test min pending time */
+	purt_set[0].uid = 2;
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_SET_READ_TIMEOUTS, &srt), 0);
+	TESTEQUAL(clock_gettime(CLOCK_MONOTONIC, &start), 0);
+	TEST(pid = fork(), pid != -1);
+	if (pid == 0) {
+		TESTEQUAL(setuid(2), 0);
+		TESTEQUAL(pread(fd, buffer, sizeof(buffer), sizeof(buffer)),
+			  sizeof(buffer));
+		exit(0);
+	}
+	sleep(1);
+	TESTEQUAL(emit_test_block(mount_dir, &file, 1), 0);
+	TESTNE(wait(&status), -1);
+	TESTEQUAL(WEXITSTATUS(status), 0);
+	TESTEQUAL(is_close(&start, 2000), 0);
+
+	/* Clear timeouts */
+	srt.timeouts_array_size = 0;
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_SET_READ_TIMEOUTS, &srt), 0);
+	grt.timeouts_array_size = 0;
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_GET_READ_TIMEOUTS, &grt), 0);
+	TESTEQUAL(grt.timeouts_array_size_out, 0);
+
+	result = TEST_SUCCESS;
+out:
+	close(fd);
+
+	if (pid == 0)
+		exit(result);
+
+	free(filename);
+	close(cmd_fd);
+	umount(backing_dir);
+	free(backing_dir);
+	return result;
+}
+
+static char *setup_mount_dir()
+{
+	struct stat st;
+	char *current_dir = getcwd(NULL, 0);
+	char *mount_dir = concat_file_name(current_dir, "incfs-mount-dir");
+
+	free(current_dir);
+	if (stat(mount_dir, &st) == 0) {
+		if (S_ISDIR(st.st_mode))
+			return mount_dir;
+
+		ksft_print_msg("%s is a file, not a dir.\n", mount_dir);
+		return NULL;
+	}
+
+	if (mkdir(mount_dir, 0777)) {
+		print_error("Can't create mount dir.");
+		return NULL;
+	}
+
+	return mount_dir;
+}
+
+int parse_options(int argc, char *const *argv)
+{
+	signed char c;
+
+	while ((c = getopt(argc, argv, "f:t:v")) != -1)
+		switch (c) {
+		case 'f':
+			options.file = strtol(optarg, NULL, 10);
+			break;
+
+		case 't':
+			options.test = strtol(optarg, NULL, 10);
+			break;
+
+		case 'v':
+			options.verbose = true;
+			break;
+
+		default:
+			return -EINVAL;
+		}
+
+	return 0;
+}
+
+struct test_case {
+	int (*pfunc)(const char *dir);
+	const char *name;
+};
+
+void run_one_test(const char *mount_dir, struct test_case *test_case)
+{
+	ksft_print_msg("Running %s\n", test_case->name);
+	if (test_case->pfunc(mount_dir) == TEST_SUCCESS)
+		ksft_test_result_pass("%s\n", test_case->name);
+	else
+		ksft_test_result_fail("%s\n", test_case->name);
+}
+
+int main(int argc, char *argv[])
+{
+	char *mount_dir = NULL;
+	int i;
+	int fd, count;
+
+	if (parse_options(argc, argv))
+		ksft_exit_fail_msg("Bad options\n");
+
+	// Seed randomness pool for testing on QEMU
+	// NOTE - this abuses the concept of randomness - do *not* ever do this
+	// on a machine for production use - the device will think it has good
+	// randomness when it does not.
+	fd = open("/dev/urandom", O_WRONLY | O_CLOEXEC);
+	count = 4096;
+	for (int i = 0; i < 128; ++i)
+		ioctl(fd, RNDADDTOENTCNT, &count);
+	close(fd);
+
+	ksft_print_header();
+
+	if (geteuid() != 0)
+		ksft_print_msg("Not a root, might fail to mount.\n");
+
+	mount_dir = setup_mount_dir();
+	if (mount_dir == NULL)
+		ksft_exit_fail_msg("Can't create a mount dir\n");
+
+#define MAKE_TEST(test)                                                        \
+	{                                                                      \
+		test, #test                                                    \
+	}
+	struct test_case cases[] = {
+		MAKE_TEST(basic_file_ops_test),
+		MAKE_TEST(cant_touch_index_test),
+		MAKE_TEST(dynamic_files_and_data_test),
+		MAKE_TEST(concurrent_reads_and_writes_test),
+		MAKE_TEST(attribute_test),
+		MAKE_TEST(work_after_remount_test),
+		MAKE_TEST(child_procs_waiting_for_data_test),
+		MAKE_TEST(multiple_providers_test),
+		MAKE_TEST(hash_tree_test),
+		MAKE_TEST(read_log_test),
+		MAKE_TEST(get_blocks_test),
+		MAKE_TEST(get_hash_blocks_test),
+		MAKE_TEST(large_file_test),
+		MAKE_TEST(mapped_file_test),
+		MAKE_TEST(compatibility_test),
+		MAKE_TEST(data_block_count_test),
+		MAKE_TEST(hash_block_count_test),
+		MAKE_TEST(per_uid_read_timeouts_test),
+	};
+#undef MAKE_TEST
+
+	if (options.test) {
+		if (options.test <= 0 || options.test > ARRAY_SIZE(cases))
+			ksft_exit_fail_msg("Invalid test\n");
+
+		ksft_set_plan(1);
+		run_one_test(mount_dir, &cases[options.test - 1]);
+	} else {
+		ksft_set_plan(ARRAY_SIZE(cases));
+		for (i = 0; i < ARRAY_SIZE(cases); ++i)
+			run_one_test(mount_dir, &cases[i]);
+	}
+
+	umount2(mount_dir, MNT_FORCE);
+	rmdir(mount_dir);
+	return !ksft_get_fail_cnt() ? ksft_exit_pass() : ksft_exit_fail();
+}
diff --git a/tools/testing/selftests/filesystems/incfs/utils.c b/tools/testing/selftests/filesystems/incfs/utils.c
new file mode 100644
index 0000000..e60b0d36
--- /dev/null
+++ b/tools/testing/selftests/filesystems/incfs/utils.c
@@ -0,0 +1,378 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2018 Google LLC
+ */
+#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <poll.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <sys/ioctl.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <openssl/sha.h>
+#include <openssl/md5.h>
+
+#include "utils.h"
+
+#ifndef __S_IFREG
+#define __S_IFREG S_IFREG
+#endif
+
+unsigned int rnd(unsigned int max, unsigned int *seed)
+{
+	return rand_r(seed) * ((uint64_t)max + 1) / RAND_MAX;
+}
+
+int remove_dir(const char *dir)
+{
+	int err = rmdir(dir);
+
+	if (err && errno == ENOTEMPTY) {
+		err = delete_dir_tree(dir);
+		if (err)
+			return err;
+		return 0;
+	}
+
+	if (err && errno != ENOENT)
+		return -errno;
+
+	return 0;
+}
+
+int drop_caches(void)
+{
+	int drop_caches =
+		open("/proc/sys/vm/drop_caches", O_WRONLY | O_CLOEXEC);
+	int i;
+
+	if (drop_caches == -1)
+		return -errno;
+	i = write(drop_caches, "3", 1);
+	close(drop_caches);
+
+	if (i != 1)
+		return -errno;
+
+	return 0;
+}
+
+int mount_fs(const char *mount_dir, const char *backing_dir,
+	     int read_timeout_ms)
+{
+	static const char fs_name[] = INCFS_NAME;
+	char mount_options[512];
+	int result;
+
+	snprintf(mount_options, ARRAY_SIZE(mount_options),
+		 "read_timeout_ms=%u",
+		  read_timeout_ms);
+
+	result = mount(backing_dir, mount_dir, fs_name, 0, mount_options);
+	if (result != 0)
+		perror("Error mounting fs.");
+	return result;
+}
+
+int mount_fs_opt(const char *mount_dir, const char *backing_dir,
+		 const char *opt, bool remount)
+{
+	static const char fs_name[] = INCFS_NAME;
+	int result;
+
+	result = mount(backing_dir, mount_dir, fs_name,
+		       remount ? MS_REMOUNT : 0, opt);
+	if (result != 0)
+		perror("Error mounting fs.");
+	return result;
+}
+
+struct hash_section {
+	uint32_t algorithm;
+	uint8_t log2_blocksize;
+	uint32_t salt_size;
+	/* no salt */
+	uint32_t hash_size;
+	uint8_t hash[SHA256_DIGEST_SIZE];
+} __packed;
+
+struct signature_blob {
+	uint32_t version;
+	uint32_t hash_section_size;
+	struct hash_section hash_section;
+	uint32_t signing_section_size;
+	uint8_t signing_section[];
+} __packed;
+
+size_t format_signature(void **buf, const char *root_hash, const char *add_data)
+{
+	size_t size = sizeof(struct signature_blob) + strlen(add_data) + 1;
+	struct signature_blob *sb = malloc(size);
+
+	*sb = (struct signature_blob){
+		.version = INCFS_SIGNATURE_VERSION,
+		.hash_section_size = sizeof(struct hash_section),
+		.hash_section =
+			(struct hash_section){
+				.algorithm = INCFS_HASH_TREE_SHA256,
+				.log2_blocksize = 12,
+				.salt_size = 0,
+				.hash_size = SHA256_DIGEST_SIZE,
+			},
+		.signing_section_size = sizeof(uint32_t) + strlen(add_data) + 1,
+	};
+
+	memcpy(sb->hash_section.hash, root_hash, SHA256_DIGEST_SIZE);
+	memcpy((char *)sb->signing_section, add_data, strlen(add_data) + 1);
+	*buf = sb;
+	return size;
+}
+
+int crypto_emit_file(int fd, const char *dir, const char *filename,
+		     incfs_uuid_t *id_out, size_t size, const char *root_hash,
+		     const char *add_data)
+{
+	int mode = __S_IFREG | 0555;
+	void *signature;
+	int error = 0;
+
+	struct incfs_new_file_args args = {
+			.size = size,
+			.mode = mode,
+			.file_name = ptr_to_u64(filename),
+			.directory_path = ptr_to_u64(dir),
+			.file_attr = 0,
+			.file_attr_len = 0
+	};
+
+	args.signature_size = format_signature(&signature, root_hash, add_data);
+	args.signature_info = ptr_to_u64(signature);
+
+	md5(filename, strlen(filename), (char *)args.file_id.bytes);
+
+	if (ioctl(fd, INCFS_IOC_CREATE_FILE, &args) != 0) {
+		error = -errno;
+		goto out;
+	}
+
+	*id_out = args.file_id;
+
+out:
+	free(signature);
+	return error;
+}
+
+int emit_file(int fd, const char *dir, const char *filename,
+	      incfs_uuid_t *id_out, size_t size, const char *attr)
+{
+	int mode = __S_IFREG | 0555;
+	struct incfs_new_file_args args = { .size = size,
+					    .mode = mode,
+					    .file_name = ptr_to_u64(filename),
+					    .directory_path = ptr_to_u64(dir),
+					    .signature_info = ptr_to_u64(NULL),
+					    .signature_size = 0,
+					    .file_attr = ptr_to_u64(attr),
+					    .file_attr_len =
+						    attr ? strlen(attr) : 0 };
+
+	md5(filename, strlen(filename), (char *)args.file_id.bytes);
+
+	if (ioctl(fd, INCFS_IOC_CREATE_FILE, &args) != 0)
+		return -errno;
+
+	*id_out = args.file_id;
+	return 0;
+}
+
+int get_file_bmap(int cmd_fd, int ino, unsigned char *buf, int buf_size)
+{
+	return 0;
+}
+
+int get_file_signature(int fd, unsigned char *buf, int buf_size)
+{
+	struct incfs_get_file_sig_args args = {
+		.file_signature = ptr_to_u64(buf),
+		.file_signature_buf_size = buf_size
+	};
+
+	if (ioctl(fd, INCFS_IOC_READ_FILE_SIGNATURE, &args) == 0)
+		return args.file_signature_len_out;
+	return -errno;
+}
+
+loff_t get_file_size(const char *name)
+{
+	struct stat st;
+
+	if (stat(name, &st) == 0)
+		return st.st_size;
+	return -ENOENT;
+}
+
+int open_commands_file(const char *mount_dir)
+{
+	char cmd_file[255];
+	int cmd_fd;
+
+	snprintf(cmd_file, ARRAY_SIZE(cmd_file),
+			"%s/%s", mount_dir, INCFS_PENDING_READS_FILENAME);
+	cmd_fd = open(cmd_file, O_RDONLY | O_CLOEXEC);
+
+	if (cmd_fd < 0)
+		perror("Can't open commands file");
+	return cmd_fd;
+}
+
+int open_log_file(const char *mount_dir)
+{
+	char file[255];
+	int fd;
+
+	snprintf(file, ARRAY_SIZE(file), "%s/.log", mount_dir);
+	fd = open(file, O_RDWR | O_CLOEXEC);
+	if (fd < 0)
+		perror("Can't open log file");
+	return fd;
+}
+
+int open_blocks_written_file(const char *mount_dir)
+{
+	char file[255];
+	int fd;
+
+	snprintf(file, ARRAY_SIZE(file),
+			"%s/%s", mount_dir, INCFS_BLOCKS_WRITTEN_FILENAME);
+	fd = open(file, O_RDONLY | O_CLOEXEC);
+
+	if (fd < 0)
+		perror("Can't open blocks_written file");
+	return fd;
+}
+
+int wait_for_pending_reads(int fd, int timeout_ms,
+	struct incfs_pending_read_info *prs, int prs_count)
+{
+	ssize_t read_res = 0;
+
+	if (timeout_ms > 0) {
+		int poll_res = 0;
+		struct pollfd pollfd = {
+			.fd = fd,
+			.events = POLLIN
+		};
+
+		poll_res = poll(&pollfd, 1, timeout_ms);
+		if (poll_res < 0)
+			return -errno;
+		if (poll_res == 0)
+			return 0;
+		if (!(pollfd.revents | POLLIN))
+			return 0;
+	}
+
+	read_res = read(fd, prs, prs_count * sizeof(*prs));
+	if (read_res < 0)
+		return -errno;
+
+	return read_res / sizeof(*prs);
+}
+
+int wait_for_pending_reads2(int fd, int timeout_ms,
+	struct incfs_pending_read_info2 *prs, int prs_count)
+{
+	ssize_t read_res = 0;
+
+	if (timeout_ms > 0) {
+		int poll_res = 0;
+		struct pollfd pollfd = {
+			.fd = fd,
+			.events = POLLIN
+		};
+
+		poll_res = poll(&pollfd, 1, timeout_ms);
+		if (poll_res < 0)
+			return -errno;
+		if (poll_res == 0)
+			return 0;
+		if (!(pollfd.revents | POLLIN))
+			return 0;
+	}
+
+	read_res = read(fd, prs, prs_count * sizeof(*prs));
+	if (read_res < 0)
+		return -errno;
+
+	return read_res / sizeof(*prs);
+}
+
+char *concat_file_name(const char *dir, const char *file)
+{
+	char full_name[FILENAME_MAX] = "";
+
+	if (snprintf(full_name, ARRAY_SIZE(full_name), "%s/%s", dir, file) < 0)
+		return NULL;
+	return strdup(full_name);
+}
+
+int delete_dir_tree(const char *dir_path)
+{
+	DIR *dir = NULL;
+	struct dirent *dp;
+	int result = 0;
+
+	dir = opendir(dir_path);
+	if (!dir) {
+		result = -errno;
+		goto out;
+	}
+
+	while ((dp = readdir(dir))) {
+		char *full_path;
+
+		if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, ".."))
+			continue;
+
+		full_path = concat_file_name(dir_path, dp->d_name);
+		if (dp->d_type == DT_DIR)
+			result = delete_dir_tree(full_path);
+		else
+			result = unlink(full_path);
+		free(full_path);
+		if (result)
+			goto out;
+	}
+
+out:
+	if (dir)
+		closedir(dir);
+	if (!result)
+		rmdir(dir_path);
+	return result;
+}
+
+void sha256(const char *data, size_t dsize, char *hash)
+{
+	SHA256_CTX ctx;
+
+	SHA256_Init(&ctx);
+	SHA256_Update(&ctx, data, dsize);
+	SHA256_Final((unsigned char *)hash, &ctx);
+}
+
+void md5(const char *data, size_t dsize, char *hash)
+{
+	MD5_CTX ctx;
+
+	MD5_Init(&ctx);
+	MD5_Update(&ctx, data, dsize);
+	MD5_Final((unsigned char *)hash, &ctx);
+}
diff --git a/tools/testing/selftests/filesystems/incfs/utils.h b/tools/testing/selftests/filesystems/incfs/utils.h
new file mode 100644
index 0000000..f5ed8dc
--- /dev/null
+++ b/tools/testing/selftests/filesystems/incfs/utils.h
@@ -0,0 +1,69 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2019 Google LLC
+ */
+#include <stdbool.h>
+#include <sys/stat.h>
+
+#include <include/uapi/linux/incrementalfs.h>
+
+#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
+
+#define __packed __attribute__((__packed__))
+
+#ifdef __LP64__
+#define ptr_to_u64(p) ((__u64)p)
+#else
+#define ptr_to_u64(p) ((__u64)(__u32)p)
+#endif
+
+#define SHA256_DIGEST_SIZE 32
+#define INCFS_MAX_MTREE_LEVELS 8
+
+unsigned int rnd(unsigned int max, unsigned int *seed);
+
+int remove_dir(const char *dir);
+
+int drop_caches(void);
+
+int mount_fs(const char *mount_dir, const char *backing_dir,
+	     int read_timeout_ms);
+
+int mount_fs_opt(const char *mount_dir, const char *backing_dir,
+		 const char *opt, bool remount);
+
+int get_file_bmap(int cmd_fd, int ino, unsigned char *buf, int buf_size);
+
+int get_file_signature(int fd, unsigned char *buf, int buf_size);
+
+int emit_node(int fd, char *filename, int *ino_out, int parent_ino,
+		size_t size, mode_t mode, char *attr);
+
+int emit_file(int fd, const char *dir, const char *filename,
+	      incfs_uuid_t *id_out, size_t size, const char *attr);
+
+int crypto_emit_file(int fd, const char *dir, const char *filename,
+		     incfs_uuid_t *id_out, size_t size, const char *root_hash,
+		     const char *add_data);
+
+loff_t get_file_size(const char *name);
+
+int open_commands_file(const char *mount_dir);
+
+int open_log_file(const char *mount_dir);
+
+int open_blocks_written_file(const char *mount_dir);
+
+int wait_for_pending_reads(int fd, int timeout_ms,
+	struct incfs_pending_read_info *prs, int prs_count);
+
+int wait_for_pending_reads2(int fd, int timeout_ms,
+	struct incfs_pending_read_info2 *prs, int prs_count);
+
+char *concat_file_name(const char *dir, const char *file);
+
+void sha256(const char *data, size_t dsize, char *hash);
+
+void md5(const char *data, size_t dsize, char *hash);
+
+int delete_dir_tree(const char *path);
diff --git a/tools/testing/selftests/seccomp/seccomp_benchmark.c b/tools/testing/selftests/seccomp/seccomp_benchmark.c
index 5838c869..fcc8065 100644
--- a/tools/testing/selftests/seccomp/seccomp_benchmark.c
+++ b/tools/testing/selftests/seccomp/seccomp_benchmark.c
@@ -4,12 +4,16 @@
  */
 #define _GNU_SOURCE
 #include <assert.h>
+#include <limits.h>
+#include <stdbool.h>
+#include <stddef.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <time.h>
 #include <unistd.h>
 #include <linux/filter.h>
 #include <linux/seccomp.h>
+#include <sys/param.h>
 #include <sys/prctl.h>
 #include <sys/syscall.h>
 #include <sys/types.h>
@@ -18,9 +22,9 @@
 
 unsigned long long timing(clockid_t clk_id, unsigned long long samples)
 {
-	pid_t pid, ret;
-	unsigned long long i;
 	struct timespec start, finish;
+	unsigned long long i;
+	pid_t pid, ret;
 
 	pid = getpid();
 	assert(clock_gettime(clk_id, &start) == 0);
@@ -31,69 +35,208 @@ unsigned long long timing(clockid_t clk_id, unsigned long long samples)
 	assert(clock_gettime(clk_id, &finish) == 0);
 
 	i = finish.tv_sec - start.tv_sec;
-	i *= 1000000000;
+	i *= 1000000000ULL;
 	i += finish.tv_nsec - start.tv_nsec;
 
-	printf("%lu.%09lu - %lu.%09lu = %llu\n",
+	printf("%lu.%09lu - %lu.%09lu = %llu (%.1fs)\n",
 		finish.tv_sec, finish.tv_nsec,
 		start.tv_sec, start.tv_nsec,
-		i);
+		i, (double)i / 1000000000.0);
 
 	return i;
 }
 
 unsigned long long calibrate(void)
 {
-	unsigned long long i;
+	struct timespec start, finish;
+	unsigned long long i, samples, step = 9973;
+	pid_t pid, ret;
+	int seconds = 15;
 
-	printf("Calibrating reasonable sample size...\n");
+	printf("Calibrating sample size for %d seconds worth of syscalls ...\n", seconds);
 
-	for (i = 5; ; i++) {
-		unsigned long long samples = 1 << i;
+	samples = 0;
+	pid = getpid();
+	assert(clock_gettime(CLOCK_MONOTONIC, &start) == 0);
+	do {
+		for (i = 0; i < step; i++) {
+			ret = syscall(__NR_getpid);
+			assert(pid == ret);
+		}
+		assert(clock_gettime(CLOCK_MONOTONIC, &finish) == 0);
 
-		/* Find something that takes more than 5 seconds to run. */
-		if (timing(CLOCK_REALTIME, samples) / 1000000000ULL > 5)
-			return samples;
+		samples += step;
+		i = finish.tv_sec - start.tv_sec;
+		i *= 1000000000ULL;
+		i += finish.tv_nsec - start.tv_nsec;
+	} while (i < 1000000000ULL);
+
+	return samples * seconds;
+}
+
+bool approx(int i_one, int i_two)
+{
+	double one = i_one, one_bump = one * 0.01;
+	double two = i_two, two_bump = two * 0.01;
+
+	one_bump = one + MAX(one_bump, 2.0);
+	two_bump = two + MAX(two_bump, 2.0);
+
+	/* Equal to, or within 1% or 2 digits */
+	if (one == two ||
+	    (one > two && one <= two_bump) ||
+	    (two > one && two <= one_bump))
+		return true;
+	return false;
+}
+
+bool le(int i_one, int i_two)
+{
+	if (i_one <= i_two)
+		return true;
+	return false;
+}
+
+long compare(const char *name_one, const char *name_eval, const char *name_two,
+	     unsigned long long one, bool (*eval)(int, int), unsigned long long two)
+{
+	bool good;
+
+	printf("\t%s %s %s (%lld %s %lld): ", name_one, name_eval, name_two,
+	       (long long)one, name_eval, (long long)two);
+	if (one > INT_MAX) {
+		printf("Miscalculation! Measurement went negative: %lld\n", (long long)one);
+		return 1;
 	}
+	if (two > INT_MAX) {
+		printf("Miscalculation! Measurement went negative: %lld\n", (long long)two);
+		return 1;
+	}
+
+	good = eval(one, two);
+	printf("%s\n", good ? "✔️" : "❌");
+
+	return good ? 0 : 1;
 }
 
 int main(int argc, char *argv[])
 {
+	struct sock_filter bitmap_filter[] = {
+		BPF_STMT(BPF_LD|BPF_W|BPF_ABS, offsetof(struct seccomp_data, nr)),
+		BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_ALLOW),
+	};
+	struct sock_fprog bitmap_prog = {
+		.len = (unsigned short)ARRAY_SIZE(bitmap_filter),
+		.filter = bitmap_filter,
+	};
 	struct sock_filter filter[] = {
+		BPF_STMT(BPF_LD|BPF_W|BPF_ABS, offsetof(struct seccomp_data, args[0])),
 		BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_ALLOW),
 	};
 	struct sock_fprog prog = {
 		.len = (unsigned short)ARRAY_SIZE(filter),
 		.filter = filter,
 	};
-	long ret;
-	unsigned long long samples;
-	unsigned long long native, filtered;
+
+	long ret, bits;
+	unsigned long long samples, calc;
+	unsigned long long native, filter1, filter2, bitmap1, bitmap2;
+	unsigned long long entry, per_filter1, per_filter2;
+
+	printf("Current BPF sysctl settings:\n");
+	system("sysctl net.core.bpf_jit_enable");
+	system("sysctl net.core.bpf_jit_harden");
 
 	if (argc > 1)
 		samples = strtoull(argv[1], NULL, 0);
 	else
 		samples = calibrate();
 
-	printf("Benchmarking %llu samples...\n", samples);
+	printf("Benchmarking %llu syscalls...\n", samples);
 
+	/* Native call */
 	native = timing(CLOCK_PROCESS_CPUTIME_ID, samples) / samples;
 	printf("getpid native: %llu ns\n", native);
 
 	ret = prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);
 	assert(ret == 0);
 
+	/* One filter resulting in a bitmap */
+	ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &bitmap_prog);
+	assert(ret == 0);
+
+	bitmap1 = timing(CLOCK_PROCESS_CPUTIME_ID, samples) / samples;
+	printf("getpid RET_ALLOW 1 filter (bitmap): %llu ns\n", bitmap1);
+
+	/* Second filter resulting in a bitmap */
+	ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &bitmap_prog);
+	assert(ret == 0);
+
+	bitmap2 = timing(CLOCK_PROCESS_CPUTIME_ID, samples) / samples;
+	printf("getpid RET_ALLOW 2 filters (bitmap): %llu ns\n", bitmap2);
+
+	/* Third filter, can no longer be converted to bitmap */
 	ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &prog);
 	assert(ret == 0);
 
-	filtered = timing(CLOCK_PROCESS_CPUTIME_ID, samples) / samples;
-	printf("getpid RET_ALLOW: %llu ns\n", filtered);
+	filter1 = timing(CLOCK_PROCESS_CPUTIME_ID, samples) / samples;
+	printf("getpid RET_ALLOW 3 filters (full): %llu ns\n", filter1);
 
-	printf("Estimated seccomp overhead per syscall: %llu ns\n",
-		filtered - native);
+	/* Fourth filter, can not be converted to bitmap because of filter 3 */
+	ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &bitmap_prog);
+	assert(ret == 0);
 
-	if (filtered == native)
-		printf("Trying running again with more samples.\n");
+	filter2 = timing(CLOCK_PROCESS_CPUTIME_ID, samples) / samples;
+	printf("getpid RET_ALLOW 4 filters (full): %llu ns\n", filter2);
 
+	/* Estimations */
+#define ESTIMATE(fmt, var, what)	do {			\
+		var = (what);					\
+		printf("Estimated " fmt ": %llu ns\n", var);	\
+		if (var > INT_MAX)				\
+			goto more_samples;			\
+	} while (0)
+
+	ESTIMATE("total seccomp overhead for 1 bitmapped filter", calc,
+		 bitmap1 - native);
+	ESTIMATE("total seccomp overhead for 2 bitmapped filters", calc,
+		 bitmap2 - native);
+	ESTIMATE("total seccomp overhead for 3 full filters", calc,
+		 filter1 - native);
+	ESTIMATE("total seccomp overhead for 4 full filters", calc,
+		 filter2 - native);
+	ESTIMATE("seccomp entry overhead", entry,
+		 bitmap1 - native - (bitmap2 - bitmap1));
+	ESTIMATE("seccomp per-filter overhead (last 2 diff)", per_filter1,
+		 filter2 - filter1);
+	ESTIMATE("seccomp per-filter overhead (filters / 4)", per_filter2,
+		 (filter2 - native - entry) / 4);
+
+	printf("Expectations:\n");
+	ret |= compare("native", "≤", "1 bitmap", native, le, bitmap1);
+	bits = compare("native", "≤", "1 filter", native, le, filter1);
+	if (bits)
+		goto more_samples;
+
+	ret |= compare("per-filter (last 2 diff)", "≈", "per-filter (filters / 4)",
+			per_filter1, approx, per_filter2);
+
+	bits = compare("1 bitmapped", "≈", "2 bitmapped",
+			bitmap1 - native, approx, bitmap2 - native);
+	if (bits) {
+		printf("Skipping constant action bitmap expectations: they appear unsupported.\n");
+		goto out;
+	}
+
+	ret |= compare("entry", "≈", "1 bitmapped", entry, approx, bitmap1 - native);
+	ret |= compare("entry", "≈", "2 bitmapped", entry, approx, bitmap2 - native);
+	ret |= compare("native + entry + (per filter * 4)", "≈", "4 filters total",
+			entry + (per_filter1 * 4) + native, approx, filter2);
+	if (ret == 0)
+		goto out;
+
+more_samples:
+	printf("Saw unexpected benchmark result. Try running again with more samples?\n");
+out:
 	return 0;
 }
diff --git a/tools/testing/selftests/seccomp/seccomp_bpf.c b/tools/testing/selftests/seccomp/seccomp_bpf.c
index 19c7351..64d4d6d 100644
--- a/tools/testing/selftests/seccomp/seccomp_bpf.c
+++ b/tools/testing/selftests/seccomp/seccomp_bpf.c
@@ -3501,7 +3501,6 @@ TEST(seccomp_get_notif_sizes)
 
 /*
  * TODO:
- * - add microbenchmarks
  * - expand NNP testing
  * - better arch-specific TRACE and TRAP handlers.
  * - endianness checking when appropriate
@@ -3509,7 +3508,6 @@ TEST(seccomp_get_notif_sizes)
  * - arch value testing (x86 modes especially)
  * - verify that FILTER_FLAG_LOG filters generate log messages
  * - verify that RET_LOG generates log messages
- * - ...
  */
 
 TEST_HARNESS_MAIN
diff --git a/tools/testing/selftests/seccomp/settings b/tools/testing/selftests/seccomp/settings
new file mode 100644
index 0000000..6091b45
--- /dev/null
+++ b/tools/testing/selftests/seccomp/settings
@@ -0,0 +1 @@
+timeout=120
diff --git a/tools/testing/selftests/wireguard/netns.sh b/tools/testing/selftests/wireguard/netns.sh
new file mode 100755
index 0000000..d77f482
--- /dev/null
+++ b/tools/testing/selftests/wireguard/netns.sh
@@ -0,0 +1,614 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+#
+# Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+#
+# This script tests the below topology:
+#
+# ┌─────────────────────┐   ┌──────────────────────────────────┐   ┌─────────────────────┐
+# │   $ns1 namespace    │   │          $ns0 namespace          │   │   $ns2 namespace    │
+# │                     │   │                                  │   │                     │
+# │┌────────┐           │   │            ┌────────┐            │   │           ┌────────┐│
+# ││  wg0   │───────────┼───┼────────────│   lo   │────────────┼───┼───────────│  wg0   ││
+# │├────────┴──────────┐│   │    ┌───────┴────────┴────────┐   │   │┌──────────┴────────┤│
+# ││192.168.241.1/24   ││   │    │(ns1)         (ns2)      │   │   ││192.168.241.2/24   ││
+# ││fd00::1/24         ││   │    │127.0.0.1:1   127.0.0.1:2│   │   ││fd00::2/24         ││
+# │└───────────────────┘│   │    │[::]:1        [::]:2     │   │   │└───────────────────┘│
+# └─────────────────────┘   │    └─────────────────────────┘   │   └─────────────────────┘
+#                           └──────────────────────────────────┘
+#
+# After the topology is prepared we run a series of TCP/UDP iperf3 tests between the
+# wireguard peers in $ns1 and $ns2. Note that $ns0 is the endpoint for the wg0
+# interfaces in $ns1 and $ns2. See https://www.wireguard.com/netns/ for further
+# details on how this is accomplished.
+set -e
+
+exec 3>&1
+export LANG=C
+export WG_HIDE_KEYS=never
+netns0="wg-test-$$-0"
+netns1="wg-test-$$-1"
+netns2="wg-test-$$-2"
+pretty() { echo -e "\x1b[32m\x1b[1m[+] ${1:+NS$1: }${2}\x1b[0m" >&3; }
+pp() { pretty "" "$*"; "$@"; }
+maybe_exec() { if [[ $BASHPID -eq $$ ]]; then "$@"; else exec "$@"; fi; }
+n0() { pretty 0 "$*"; maybe_exec ip netns exec $netns0 "$@"; }
+n1() { pretty 1 "$*"; maybe_exec ip netns exec $netns1 "$@"; }
+n2() { pretty 2 "$*"; maybe_exec ip netns exec $netns2 "$@"; }
+ip0() { pretty 0 "ip $*"; ip -n $netns0 "$@"; }
+ip1() { pretty 1 "ip $*"; ip -n $netns1 "$@"; }
+ip2() { pretty 2 "ip $*"; ip -n $netns2 "$@"; }
+sleep() { read -t "$1" -N 1 || true; }
+waitiperf() { pretty "${1//*-}" "wait for iperf:5201 pid $2"; while [[ $(ss -N "$1" -tlpH 'sport = 5201') != *\"iperf3\",pid=$2,fd=* ]]; do sleep 0.1; done; }
+waitncatudp() { pretty "${1//*-}" "wait for udp:1111 pid $2"; while [[ $(ss -N "$1" -ulpH 'sport = 1111') != *\"ncat\",pid=$2,fd=* ]]; do sleep 0.1; done; }
+waitiface() { pretty "${1//*-}" "wait for $2 to come up"; ip netns exec "$1" bash -c "while [[ \$(< \"/sys/class/net/$2/operstate\") != up ]]; do read -t .1 -N 0 || true; done;"; }
+
+cleanup() {
+	set +e
+	exec 2>/dev/null
+	printf "$orig_message_cost" > /proc/sys/net/core/message_cost
+	ip0 link del dev wg0
+	ip0 link del dev wg1
+	ip1 link del dev wg0
+	ip1 link del dev wg1
+	ip2 link del dev wg0
+	ip2 link del dev wg1
+	local to_kill="$(ip netns pids $netns0) $(ip netns pids $netns1) $(ip netns pids $netns2)"
+	[[ -n $to_kill ]] && kill $to_kill
+	pp ip netns del $netns1
+	pp ip netns del $netns2
+	pp ip netns del $netns0
+	exit
+}
+
+orig_message_cost="$(< /proc/sys/net/core/message_cost)"
+trap cleanup EXIT
+printf 0 > /proc/sys/net/core/message_cost
+
+ip netns del $netns0 2>/dev/null || true
+ip netns del $netns1 2>/dev/null || true
+ip netns del $netns2 2>/dev/null || true
+pp ip netns add $netns0
+pp ip netns add $netns1
+pp ip netns add $netns2
+ip0 link set up dev lo
+
+ip0 link add dev wg0 type wireguard
+ip0 link set wg0 netns $netns1
+ip0 link add dev wg0 type wireguard
+ip0 link set wg0 netns $netns2
+key1="$(pp wg genkey)"
+key2="$(pp wg genkey)"
+key3="$(pp wg genkey)"
+key4="$(pp wg genkey)"
+pub1="$(pp wg pubkey <<<"$key1")"
+pub2="$(pp wg pubkey <<<"$key2")"
+pub3="$(pp wg pubkey <<<"$key3")"
+pub4="$(pp wg pubkey <<<"$key4")"
+psk="$(pp wg genpsk)"
+[[ -n $key1 && -n $key2 && -n $psk ]]
+
+configure_peers() {
+	ip1 addr add 192.168.241.1/24 dev wg0
+	ip1 addr add fd00::1/112 dev wg0
+
+	ip2 addr add 192.168.241.2/24 dev wg0
+	ip2 addr add fd00::2/112 dev wg0
+
+	n1 wg set wg0 \
+		private-key <(echo "$key1") \
+		listen-port 1 \
+		peer "$pub2" \
+			preshared-key <(echo "$psk") \
+			allowed-ips 192.168.241.2/32,fd00::2/128
+	n2 wg set wg0 \
+		private-key <(echo "$key2") \
+		listen-port 2 \
+		peer "$pub1" \
+			preshared-key <(echo "$psk") \
+			allowed-ips 192.168.241.1/32,fd00::1/128
+
+	ip1 link set up dev wg0
+	ip2 link set up dev wg0
+}
+configure_peers
+
+tests() {
+	# Ping over IPv4
+	n2 ping -c 10 -f -W 1 192.168.241.1
+	n1 ping -c 10 -f -W 1 192.168.241.2
+
+	# Ping over IPv6
+	n2 ping6 -c 10 -f -W 1 fd00::1
+	n1 ping6 -c 10 -f -W 1 fd00::2
+
+	# TCP over IPv4
+	n2 iperf3 -s -1 -B 192.168.241.2 &
+	waitiperf $netns2 $!
+	n1 iperf3 -Z -t 3 -c 192.168.241.2
+
+	# TCP over IPv6
+	n1 iperf3 -s -1 -B fd00::1 &
+	waitiperf $netns1 $!
+	n2 iperf3 -Z -t 3 -c fd00::1
+
+	# UDP over IPv4
+	n1 iperf3 -s -1 -B 192.168.241.1 &
+	waitiperf $netns1 $!
+	n2 iperf3 -Z -t 3 -b 0 -u -c 192.168.241.1
+
+	# UDP over IPv6
+	n2 iperf3 -s -1 -B fd00::2 &
+	waitiperf $netns2 $!
+	n1 iperf3 -Z -t 3 -b 0 -u -c fd00::2
+}
+
+[[ $(ip1 link show dev wg0) =~ mtu\ ([0-9]+) ]] && orig_mtu="${BASH_REMATCH[1]}"
+big_mtu=$(( 34816 - 1500 + $orig_mtu ))
+
+# Test using IPv4 as outer transport
+n1 wg set wg0 peer "$pub2" endpoint 127.0.0.1:2
+n2 wg set wg0 peer "$pub1" endpoint 127.0.0.1:1
+# Before calling tests, we first make sure that the stats counters and timestamper are working
+n2 ping -c 10 -f -W 1 192.168.241.1
+{ read _; read _; read _; read rx_bytes _; read _; read tx_bytes _; } < <(ip2 -stats link show dev wg0)
+(( rx_bytes == 1372 && (tx_bytes == 1428 || tx_bytes == 1460) ))
+{ read _; read _; read _; read rx_bytes _; read _; read tx_bytes _; } < <(ip1 -stats link show dev wg0)
+(( tx_bytes == 1372 && (rx_bytes == 1428 || rx_bytes == 1460) ))
+read _ rx_bytes tx_bytes < <(n2 wg show wg0 transfer)
+(( rx_bytes == 1372 && (tx_bytes == 1428 || tx_bytes == 1460) ))
+read _ rx_bytes tx_bytes < <(n1 wg show wg0 transfer)
+(( tx_bytes == 1372 && (rx_bytes == 1428 || rx_bytes == 1460) ))
+read _ timestamp < <(n1 wg show wg0 latest-handshakes)
+(( timestamp != 0 ))
+
+tests
+ip1 link set wg0 mtu $big_mtu
+ip2 link set wg0 mtu $big_mtu
+tests
+
+ip1 link set wg0 mtu $orig_mtu
+ip2 link set wg0 mtu $orig_mtu
+
+# Test using IPv6 as outer transport
+n1 wg set wg0 peer "$pub2" endpoint [::1]:2
+n2 wg set wg0 peer "$pub1" endpoint [::1]:1
+tests
+ip1 link set wg0 mtu $big_mtu
+ip2 link set wg0 mtu $big_mtu
+tests
+
+# Test that route MTUs work with the padding
+ip1 link set wg0 mtu 1300
+ip2 link set wg0 mtu 1300
+n1 wg set wg0 peer "$pub2" endpoint 127.0.0.1:2
+n2 wg set wg0 peer "$pub1" endpoint 127.0.0.1:1
+n0 iptables -A INPUT -m length --length 1360 -j DROP
+n1 ip route add 192.168.241.2/32 dev wg0 mtu 1299
+n2 ip route add 192.168.241.1/32 dev wg0 mtu 1299
+n2 ping -c 1 -W 1 -s 1269 192.168.241.1
+n2 ip route delete 192.168.241.1/32 dev wg0 mtu 1299
+n1 ip route delete 192.168.241.2/32 dev wg0 mtu 1299
+n0 iptables -F INPUT
+
+ip1 link set wg0 mtu $orig_mtu
+ip2 link set wg0 mtu $orig_mtu
+
+# Test using IPv4 that roaming works
+ip0 -4 addr del 127.0.0.1/8 dev lo
+ip0 -4 addr add 127.212.121.99/8 dev lo
+n1 wg set wg0 listen-port 9999
+n1 wg set wg0 peer "$pub2" endpoint 127.0.0.1:2
+n1 ping6 -W 1 -c 1 fd00::2
+[[ $(n2 wg show wg0 endpoints) == "$pub1	127.212.121.99:9999" ]]
+
+# Test using IPv6 that roaming works
+n1 wg set wg0 listen-port 9998
+n1 wg set wg0 peer "$pub2" endpoint [::1]:2
+n1 ping -W 1 -c 1 192.168.241.2
+[[ $(n2 wg show wg0 endpoints) == "$pub1	[::1]:9998" ]]
+
+# Test that crypto-RP filter works
+n1 wg set wg0 peer "$pub2" allowed-ips 192.168.241.0/24
+exec 4< <(n1 ncat -l -u -p 1111)
+ncat_pid=$!
+waitncatudp $netns1 $ncat_pid
+n2 ncat -u 192.168.241.1 1111 <<<"X"
+read -r -N 1 -t 1 out <&4 && [[ $out == "X" ]]
+kill $ncat_pid
+more_specific_key="$(pp wg genkey | pp wg pubkey)"
+n1 wg set wg0 peer "$more_specific_key" allowed-ips 192.168.241.2/32
+n2 wg set wg0 listen-port 9997
+exec 4< <(n1 ncat -l -u -p 1111)
+ncat_pid=$!
+waitncatudp $netns1 $ncat_pid
+n2 ncat -u 192.168.241.1 1111 <<<"X"
+! read -r -N 1 -t 1 out <&4 || false
+kill $ncat_pid
+n1 wg set wg0 peer "$more_specific_key" remove
+[[ $(n1 wg show wg0 endpoints) == "$pub2	[::1]:9997" ]]
+
+# Test that we can change private keys keys and immediately handshake
+n1 wg set wg0 private-key <(echo "$key1") peer "$pub2" preshared-key <(echo "$psk") allowed-ips 192.168.241.2/32 endpoint 127.0.0.1:2
+n2 wg set wg0 private-key <(echo "$key2") listen-port 2 peer "$pub1" preshared-key <(echo "$psk") allowed-ips 192.168.241.1/32
+n1 ping -W 1 -c 1 192.168.241.2
+n1 wg set wg0 private-key <(echo "$key3")
+n2 wg set wg0 peer "$pub3" preshared-key <(echo "$psk") allowed-ips 192.168.241.1/32 peer "$pub1" remove
+n1 ping -W 1 -c 1 192.168.241.2
+n2 wg set wg0 peer "$pub3" remove
+
+# Test that we can route wg through wg
+ip1 addr flush dev wg0
+ip2 addr flush dev wg0
+ip1 addr add fd00::5:1/112 dev wg0
+ip2 addr add fd00::5:2/112 dev wg0
+n1 wg set wg0 private-key <(echo "$key1") peer "$pub2" preshared-key <(echo "$psk") allowed-ips fd00::5:2/128 endpoint 127.0.0.1:2
+n2 wg set wg0 private-key <(echo "$key2") listen-port 2 peer "$pub1" preshared-key <(echo "$psk") allowed-ips fd00::5:1/128 endpoint 127.212.121.99:9998
+ip1 link add wg1 type wireguard
+ip2 link add wg1 type wireguard
+ip1 addr add 192.168.241.1/24 dev wg1
+ip1 addr add fd00::1/112 dev wg1
+ip2 addr add 192.168.241.2/24 dev wg1
+ip2 addr add fd00::2/112 dev wg1
+ip1 link set mtu 1340 up dev wg1
+ip2 link set mtu 1340 up dev wg1
+n1 wg set wg1 listen-port 5 private-key <(echo "$key3") peer "$pub4" allowed-ips 192.168.241.2/32,fd00::2/128 endpoint [fd00::5:2]:5
+n2 wg set wg1 listen-port 5 private-key <(echo "$key4") peer "$pub3" allowed-ips 192.168.241.1/32,fd00::1/128 endpoint [fd00::5:1]:5
+tests
+# Try to set up a routing loop between the two namespaces
+ip1 link set netns $netns0 dev wg1
+ip0 addr add 192.168.241.1/24 dev wg1
+ip0 link set up dev wg1
+n0 ping -W 1 -c 1 192.168.241.2
+n1 wg set wg0 peer "$pub2" endpoint 192.168.241.2:7
+ip2 link del wg0
+ip2 link del wg1
+! n0 ping -W 1 -c 10 -f 192.168.241.2 || false # Should not crash kernel
+
+ip0 link del wg1
+ip1 link del wg0
+
+# Test using NAT. We now change the topology to this:
+# ┌────────────────────────────────────────┐    ┌────────────────────────────────────────────────┐     ┌────────────────────────────────────────┐
+# │             $ns1 namespace             │    │                 $ns0 namespace                 │     │             $ns2 namespace             │
+# │                                        │    │                                                │     │                                        │
+# │  ┌─────┐             ┌─────┐           │    │    ┌──────┐              ┌──────┐              │     │  ┌─────┐            ┌─────┐            │
+# │  │ wg0 │─────────────│vethc│───────────┼────┼────│vethrc│              │vethrs│──────────────┼─────┼──│veths│────────────│ wg0 │            │
+# │  ├─────┴──────────┐  ├─────┴──────────┐│    │    ├──────┴─────────┐    ├──────┴────────────┐ │     │  ├─────┴──────────┐ ├─────┴──────────┐ │
+# │  │192.168.241.1/24│  │192.168.1.100/24││    │    │192.168.1.1/24  │    │10.0.0.1/24        │ │     │  │10.0.0.100/24   │ │192.168.241.2/24│ │
+# │  │fd00::1/24      │  │                ││    │    │                │    │SNAT:192.168.1.0/24│ │     │  │                │ │fd00::2/24      │ │
+# │  └────────────────┘  └────────────────┘│    │    └────────────────┘    └───────────────────┘ │     │  └────────────────┘ └────────────────┘ │
+# └────────────────────────────────────────┘    └────────────────────────────────────────────────┘     └────────────────────────────────────────┘
+
+ip1 link add dev wg0 type wireguard
+ip2 link add dev wg0 type wireguard
+configure_peers
+
+ip0 link add vethrc type veth peer name vethc
+ip0 link add vethrs type veth peer name veths
+ip0 link set vethc netns $netns1
+ip0 link set veths netns $netns2
+ip0 link set vethrc up
+ip0 link set vethrs up
+ip0 addr add 192.168.1.1/24 dev vethrc
+ip0 addr add 10.0.0.1/24 dev vethrs
+ip1 addr add 192.168.1.100/24 dev vethc
+ip1 link set vethc up
+ip1 route add default via 192.168.1.1
+ip2 addr add 10.0.0.100/24 dev veths
+ip2 link set veths up
+waitiface $netns0 vethrc
+waitiface $netns0 vethrs
+waitiface $netns1 vethc
+waitiface $netns2 veths
+
+n0 bash -c 'printf 1 > /proc/sys/net/ipv4/ip_forward'
+n0 bash -c 'printf 2 > /proc/sys/net/netfilter/nf_conntrack_udp_timeout'
+n0 bash -c 'printf 2 > /proc/sys/net/netfilter/nf_conntrack_udp_timeout_stream'
+n0 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 10.0.0.0/24 -j SNAT --to 10.0.0.1
+
+n1 wg set wg0 peer "$pub2" endpoint 10.0.0.100:2 persistent-keepalive 1
+n1 ping -W 1 -c 1 192.168.241.2
+n2 ping -W 1 -c 1 192.168.241.1
+[[ $(n2 wg show wg0 endpoints) == "$pub1	10.0.0.1:1" ]]
+# Demonstrate n2 can still send packets to n1, since persistent-keepalive will prevent connection tracking entry from expiring (to see entries: `n0 conntrack -L`).
+pp sleep 3
+n2 ping -W 1 -c 1 192.168.241.1
+n1 wg set wg0 peer "$pub2" persistent-keepalive 0
+
+# Test that onion routing works, even when it loops
+n1 wg set wg0 peer "$pub3" allowed-ips 192.168.242.2/32 endpoint 192.168.241.2:5
+ip1 addr add 192.168.242.1/24 dev wg0
+ip2 link add wg1 type wireguard
+ip2 addr add 192.168.242.2/24 dev wg1
+n2 wg set wg1 private-key <(echo "$key3") listen-port 5 peer "$pub1" allowed-ips 192.168.242.1/32
+ip2 link set wg1 up
+n1 ping -W 1 -c 1 192.168.242.2
+ip2 link del wg1
+n1 wg set wg0 peer "$pub3" endpoint 192.168.242.2:5
+! n1 ping -W 1 -c 1 192.168.242.2 || false # Should not crash kernel
+n1 wg set wg0 peer "$pub3" remove
+ip1 addr del 192.168.242.1/24 dev wg0
+
+# Do a wg-quick(8)-style policy routing for the default route, making sure vethc has a v6 address to tease out bugs.
+ip1 -6 addr add fc00::9/96 dev vethc
+ip1 -6 route add default via fc00::1
+ip2 -4 addr add 192.168.99.7/32 dev wg0
+ip2 -6 addr add abab::1111/128 dev wg0
+n1 wg set wg0 fwmark 51820 peer "$pub2" allowed-ips 192.168.99.7,abab::1111
+ip1 -6 route add default dev wg0 table 51820
+ip1 -6 rule add not fwmark 51820 table 51820
+ip1 -6 rule add table main suppress_prefixlength 0
+ip1 -4 route add default dev wg0 table 51820
+ip1 -4 rule add not fwmark 51820 table 51820
+ip1 -4 rule add table main suppress_prefixlength 0
+# Flood the pings instead of sending just one, to trigger routing table reference counting bugs.
+n1 ping -W 1 -c 100 -f 192.168.99.7
+n1 ping -W 1 -c 100 -f abab::1111
+
+# Have ns2 NAT into wg0 packets from ns0, but return an icmp error along the right route.
+n2 iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -d 192.168.241.0/24 -j SNAT --to 192.168.241.2
+n0 iptables -t filter -A INPUT \! -s 10.0.0.0/24 -i vethrs -j DROP # Manual rpfilter just to be explicit.
+n2 bash -c 'printf 1 > /proc/sys/net/ipv4/ip_forward'
+ip0 -4 route add 192.168.241.1 via 10.0.0.100
+n2 wg set wg0 peer "$pub1" remove
+[[ $(! n0 ping -W 1 -c 1 192.168.241.1 || false) == *"From 10.0.0.100 icmp_seq=1 Destination Host Unreachable"* ]]
+
+n0 iptables -t nat -F
+n0 iptables -t filter -F
+n2 iptables -t nat -F
+ip0 link del vethrc
+ip0 link del vethrs
+ip1 link del wg0
+ip2 link del wg0
+
+# Test that saddr routing is sticky but not too sticky, changing to this topology:
+# ┌────────────────────────────────────────┐    ┌────────────────────────────────────────┐
+# │             $ns1 namespace             │    │             $ns2 namespace             │
+# │                                        │    │                                        │
+# │  ┌─────┐             ┌─────┐           │    │  ┌─────┐            ┌─────┐            │
+# │  │ wg0 │─────────────│veth1│───────────┼────┼──│veth2│────────────│ wg0 │            │
+# │  ├─────┴──────────┐  ├─────┴──────────┐│    │  ├─────┴──────────┐ ├─────┴──────────┐ │
+# │  │192.168.241.1/24│  │10.0.0.1/24     ││    │  │10.0.0.2/24     │ │192.168.241.2/24│ │
+# │  │fd00::1/24      │  │fd00:aa::1/96   ││    │  │fd00:aa::2/96   │ │fd00::2/24      │ │
+# │  └────────────────┘  └────────────────┘│    │  └────────────────┘ └────────────────┘ │
+# └────────────────────────────────────────┘    └────────────────────────────────────────┘
+
+ip1 link add dev wg0 type wireguard
+ip2 link add dev wg0 type wireguard
+configure_peers
+ip1 link add veth1 type veth peer name veth2
+ip1 link set veth2 netns $netns2
+n1 bash -c 'printf 0 > /proc/sys/net/ipv6/conf/all/accept_dad'
+n2 bash -c 'printf 0 > /proc/sys/net/ipv6/conf/all/accept_dad'
+n1 bash -c 'printf 0 > /proc/sys/net/ipv6/conf/veth1/accept_dad'
+n2 bash -c 'printf 0 > /proc/sys/net/ipv6/conf/veth2/accept_dad'
+n1 bash -c 'printf 1 > /proc/sys/net/ipv4/conf/veth1/promote_secondaries'
+
+# First we check that we aren't overly sticky and can fall over to new IPs when old ones are removed
+ip1 addr add 10.0.0.1/24 dev veth1
+ip1 addr add fd00:aa::1/96 dev veth1
+ip2 addr add 10.0.0.2/24 dev veth2
+ip2 addr add fd00:aa::2/96 dev veth2
+ip1 link set veth1 up
+ip2 link set veth2 up
+waitiface $netns1 veth1
+waitiface $netns2 veth2
+n1 wg set wg0 peer "$pub2" endpoint 10.0.0.2:2
+n1 ping -W 1 -c 1 192.168.241.2
+ip1 addr add 10.0.0.10/24 dev veth1
+ip1 addr del 10.0.0.1/24 dev veth1
+n1 ping -W 1 -c 1 192.168.241.2
+n1 wg set wg0 peer "$pub2" endpoint [fd00:aa::2]:2
+n1 ping -W 1 -c 1 192.168.241.2
+ip1 addr add fd00:aa::10/96 dev veth1
+ip1 addr del fd00:aa::1/96 dev veth1
+n1 ping -W 1 -c 1 192.168.241.2
+
+# Now we show that we can successfully do reply to sender routing
+ip1 link set veth1 down
+ip2 link set veth2 down
+ip1 addr flush dev veth1
+ip2 addr flush dev veth2
+ip1 addr add 10.0.0.1/24 dev veth1
+ip1 addr add 10.0.0.2/24 dev veth1
+ip1 addr add fd00:aa::1/96 dev veth1
+ip1 addr add fd00:aa::2/96 dev veth1
+ip2 addr add 10.0.0.3/24 dev veth2
+ip2 addr add fd00:aa::3/96 dev veth2
+ip1 link set veth1 up
+ip2 link set veth2 up
+waitiface $netns1 veth1
+waitiface $netns2 veth2
+n2 wg set wg0 peer "$pub1" endpoint 10.0.0.1:1
+n2 ping -W 1 -c 1 192.168.241.1
+[[ $(n2 wg show wg0 endpoints) == "$pub1	10.0.0.1:1" ]]
+n2 wg set wg0 peer "$pub1" endpoint [fd00:aa::1]:1
+n2 ping -W 1 -c 1 192.168.241.1
+[[ $(n2 wg show wg0 endpoints) == "$pub1	[fd00:aa::1]:1" ]]
+n2 wg set wg0 peer "$pub1" endpoint 10.0.0.2:1
+n2 ping -W 1 -c 1 192.168.241.1
+[[ $(n2 wg show wg0 endpoints) == "$pub1	10.0.0.2:1" ]]
+n2 wg set wg0 peer "$pub1" endpoint [fd00:aa::2]:1
+n2 ping -W 1 -c 1 192.168.241.1
+[[ $(n2 wg show wg0 endpoints) == "$pub1	[fd00:aa::2]:1" ]]
+
+# What happens if the inbound destination address belongs to a different interface as the default route?
+ip1 link add dummy0 type dummy
+ip1 addr add 10.50.0.1/24 dev dummy0
+ip1 link set dummy0 up
+ip2 route add 10.50.0.0/24 dev veth2
+n2 wg set wg0 peer "$pub1" endpoint 10.50.0.1:1
+n2 ping -W 1 -c 1 192.168.241.1
+[[ $(n2 wg show wg0 endpoints) == "$pub1	10.50.0.1:1" ]]
+
+ip1 link del dummy0
+ip1 addr flush dev veth1
+ip2 addr flush dev veth2
+ip1 route flush dev veth1
+ip2 route flush dev veth2
+
+# Now we see what happens if another interface route takes precedence over an ongoing one
+ip1 link add veth3 type veth peer name veth4
+ip1 link set veth4 netns $netns2
+ip1 addr add 10.0.0.1/24 dev veth1
+ip2 addr add 10.0.0.2/24 dev veth2
+ip1 addr add 10.0.0.3/24 dev veth3
+ip1 link set veth1 up
+ip2 link set veth2 up
+ip1 link set veth3 up
+ip2 link set veth4 up
+waitiface $netns1 veth1
+waitiface $netns2 veth2
+waitiface $netns1 veth3
+waitiface $netns2 veth4
+ip1 route flush dev veth1
+ip1 route flush dev veth3
+ip1 route add 10.0.0.0/24 dev veth1 src 10.0.0.1 metric 2
+n1 wg set wg0 peer "$pub2" endpoint 10.0.0.2:2
+n1 ping -W 1 -c 1 192.168.241.2
+[[ $(n2 wg show wg0 endpoints) == "$pub1	10.0.0.1:1" ]]
+ip1 route add 10.0.0.0/24 dev veth3 src 10.0.0.3 metric 1
+n1 bash -c 'printf 0 > /proc/sys/net/ipv4/conf/veth1/rp_filter'
+n2 bash -c 'printf 0 > /proc/sys/net/ipv4/conf/veth4/rp_filter'
+n1 bash -c 'printf 0 > /proc/sys/net/ipv4/conf/all/rp_filter'
+n2 bash -c 'printf 0 > /proc/sys/net/ipv4/conf/all/rp_filter'
+n1 ping -W 1 -c 1 192.168.241.2
+[[ $(n2 wg show wg0 endpoints) == "$pub1	10.0.0.3:1" ]]
+
+ip1 link del veth1
+ip1 link del veth3
+ip1 link del wg0
+ip2 link del wg0
+
+# We test that Netlink/IPC is working properly by doing things that usually cause split responses
+ip0 link add dev wg0 type wireguard
+config=( "[Interface]" "PrivateKey=$(wg genkey)" "[Peer]" "PublicKey=$(wg genkey)" )
+for a in {1..255}; do
+	for b in {0..255}; do
+		config+=( "AllowedIPs=$a.$b.0.0/16,$a::$b/128" )
+	done
+done
+n0 wg setconf wg0 <(printf '%s\n' "${config[@]}")
+i=0
+for ip in $(n0 wg show wg0 allowed-ips); do
+	((++i))
+done
+((i == 255*256*2+1))
+ip0 link del wg0
+ip0 link add dev wg0 type wireguard
+config=( "[Interface]" "PrivateKey=$(wg genkey)" )
+for a in {1..40}; do
+	config+=( "[Peer]" "PublicKey=$(wg genkey)" )
+	for b in {1..52}; do
+		config+=( "AllowedIPs=$a.$b.0.0/16" )
+	done
+done
+n0 wg setconf wg0 <(printf '%s\n' "${config[@]}")
+i=0
+while read -r line; do
+	j=0
+	for ip in $line; do
+		((++j))
+	done
+	((j == 53))
+	((++i))
+done < <(n0 wg show wg0 allowed-ips)
+((i == 40))
+ip0 link del wg0
+ip0 link add wg0 type wireguard
+config=( )
+for i in {1..29}; do
+	config+=( "[Peer]" "PublicKey=$(wg genkey)" )
+done
+config+=( "[Peer]" "PublicKey=$(wg genkey)" "AllowedIPs=255.2.3.4/32,abcd::255/128" )
+n0 wg setconf wg0 <(printf '%s\n' "${config[@]}")
+n0 wg showconf wg0 > /dev/null
+ip0 link del wg0
+
+allowedips=( )
+for i in {1..197}; do
+        allowedips+=( abcd::$i )
+done
+saved_ifs="$IFS"
+IFS=,
+allowedips="${allowedips[*]}"
+IFS="$saved_ifs"
+ip0 link add wg0 type wireguard
+n0 wg set wg0 peer "$pub1"
+n0 wg set wg0 peer "$pub2" allowed-ips "$allowedips"
+{
+	read -r pub allowedips
+	[[ $pub == "$pub1" && $allowedips == "(none)" ]]
+	read -r pub allowedips
+	[[ $pub == "$pub2" ]]
+	i=0
+	for _ in $allowedips; do
+		((++i))
+	done
+	((i == 197))
+} < <(n0 wg show wg0 allowed-ips)
+ip0 link del wg0
+
+! n0 wg show doesnotexist || false
+
+ip0 link add wg0 type wireguard
+n0 wg set wg0 private-key <(echo "$key1") peer "$pub2" preshared-key <(echo "$psk")
+[[ $(n0 wg show wg0 private-key) == "$key1" ]]
+[[ $(n0 wg show wg0 preshared-keys) == "$pub2	$psk" ]]
+n0 wg set wg0 private-key /dev/null peer "$pub2" preshared-key /dev/null
+[[ $(n0 wg show wg0 private-key) == "(none)" ]]
+[[ $(n0 wg show wg0 preshared-keys) == "$pub2	(none)" ]]
+n0 wg set wg0 peer "$pub2"
+n0 wg set wg0 private-key <(echo "$key2")
+[[ $(n0 wg show wg0 public-key) == "$pub2" ]]
+[[ -z $(n0 wg show wg0 peers) ]]
+n0 wg set wg0 peer "$pub2"
+[[ -z $(n0 wg show wg0 peers) ]]
+n0 wg set wg0 private-key <(echo "$key1")
+n0 wg set wg0 peer "$pub2"
+[[ $(n0 wg show wg0 peers) == "$pub2" ]]
+n0 wg set wg0 private-key <(echo "/${key1:1}")
+[[ $(n0 wg show wg0 private-key) == "+${key1:1}" ]]
+n0 wg set wg0 peer "$pub2" allowed-ips 0.0.0.0/0,10.0.0.0/8,100.0.0.0/10,172.16.0.0/12,192.168.0.0/16
+n0 wg set wg0 peer "$pub2" allowed-ips 0.0.0.0/0
+n0 wg set wg0 peer "$pub2" allowed-ips ::/0,1700::/111,5000::/4,e000::/37,9000::/75
+n0 wg set wg0 peer "$pub2" allowed-ips ::/0
+n0 wg set wg0 peer "$pub2" remove
+for low_order_point in AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= 4Ot6fDtBuK4WVuP68Z/EatoJjeucMrH9hmIFFl9JuAA= X5yVvKNQjCSx0LFVnIPvWwREXMRYHI6G2CJO3dCfEVc= 7P///////////////////////////////////////38= 7f///////////////////////////////////////38= 7v///////////////////////////////////////38=; do
+	n0 wg set wg0 peer "$low_order_point" persistent-keepalive 1 endpoint 127.0.0.1:1111
+done
+[[ -n $(n0 wg show wg0 peers) ]]
+exec 4< <(n0 ncat -l -u -p 1111)
+ncat_pid=$!
+waitncatudp $netns0 $ncat_pid
+ip0 link set wg0 up
+! read -r -n 1 -t 2 <&4 || false
+kill $ncat_pid
+ip0 link del wg0
+
+# Ensure there aren't circular reference loops
+ip1 link add wg1 type wireguard
+ip2 link add wg2 type wireguard
+ip1 link set wg1 netns $netns2
+ip2 link set wg2 netns $netns1
+pp ip netns delete $netns1
+pp ip netns delete $netns2
+pp ip netns add $netns1
+pp ip netns add $netns2
+
+sleep 2 # Wait for cleanup and grace periods
+declare -A objects
+while read -t 0.1 -r line 2>/dev/null || [[ $? -ne 142 ]]; do
+	[[ $line =~ .*(wg[0-9]+:\ [A-Z][a-z]+\ ?[0-9]*)\ .*(created|destroyed).* ]] || continue
+	objects["${BASH_REMATCH[1]}"]+="${BASH_REMATCH[2]}"
+done < /dev/kmsg
+alldeleted=1
+for object in "${!objects[@]}"; do
+	if [[ ${objects["$object"]} != *createddestroyed ]]; then
+		echo "Error: $object: merely ${objects["$object"]}" >&3
+		alldeleted=0
+	fi
+done
+[[ $alldeleted -eq 1 ]]
+pretty "" "Objects that were created were also destroyed."
diff --git a/tools/testing/selftests/wireguard/qemu/.gitignore b/tools/testing/selftests/wireguard/qemu/.gitignore
new file mode 100644
index 0000000..415b542
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/.gitignore
@@ -0,0 +1,2 @@
+build/
+distfiles/
diff --git a/tools/testing/selftests/wireguard/qemu/Makefile b/tools/testing/selftests/wireguard/qemu/Makefile
new file mode 100644
index 0000000..2dab4f5
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/Makefile
@@ -0,0 +1,377 @@
+# SPDX-License-Identifier: GPL-2.0
+#
+# Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+
+PWD := $(shell pwd)
+
+CHOST := $(shell gcc -dumpmachine)
+HOST_ARCH := $(firstword $(subst -, ,$(CHOST)))
+ifneq (,$(ARCH))
+CBUILD := $(subst -gcc,,$(lastword $(subst /, ,$(firstword $(wildcard $(foreach bindir,$(subst :, ,$(PATH)),$(bindir)/$(ARCH)-*-gcc))))))
+ifeq (,$(CBUILD))
+$(error The toolchain for $(ARCH) is not installed)
+endif
+else
+CBUILD := $(CHOST)
+ARCH := $(firstword $(subst -, ,$(CBUILD)))
+endif
+
+# Set these from the environment to override
+KERNEL_PATH ?= $(PWD)/../../../../..
+BUILD_PATH ?= $(PWD)/build/$(ARCH)
+DISTFILES_PATH ?= $(PWD)/distfiles
+NR_CPUS ?= 4
+
+MIRROR := https://download.wireguard.com/qemu-test/distfiles/
+
+default: qemu
+
+# variable name, tarball project name, version, tarball extension, default URI base
+define tar_download =
+$(1)_VERSION := $(3)
+$(1)_NAME := $(2)-$$($(1)_VERSION)
+$(1)_TAR := $(DISTFILES_PATH)/$$($(1)_NAME)$(4)
+$(1)_PATH := $(BUILD_PATH)/$$($(1)_NAME)
+$(call file_download,$$($(1)_NAME)$(4),$(5),$(6))
+endef
+
+define file_download =
+$(DISTFILES_PATH)/$(1):
+	mkdir -p $(DISTFILES_PATH)
+	flock -x $$@.lock -c '[ -f $$@ ] && exit 0; wget -O $$@.tmp $(MIRROR)$(1) || wget -O $$@.tmp $(2)$(1) || rm -f $$@.tmp; [ -f $$@.tmp ] || exit 1; if echo "$(3)  $$@.tmp" | sha256sum -c -; then mv $$@.tmp $$@; else rm -f $$@.tmp; exit 71; fi'
+endef
+
+$(eval $(call tar_download,MUSL,musl,1.1.24,.tar.gz,https://www.musl-libc.org/releases/,1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3))
+$(eval $(call tar_download,IPERF,iperf,3.7,.tar.gz,https://downloads.es.net/pub/iperf/,d846040224317caf2f75c843d309a950a7db23f9b44b94688ccbe557d6d1710c))
+$(eval $(call tar_download,BASH,bash,5.0,.tar.gz,https://ftp.gnu.org/gnu/bash/,b4a80f2ac66170b2913efbfb9f2594f1f76c7b1afd11f799e22035d63077fb4d))
+$(eval $(call tar_download,IPROUTE2,iproute2,5.6.0,.tar.xz,https://www.kernel.org/pub/linux/utils/net/iproute2/,1b5b0e25ce6e23da7526ea1da044e814ad85ba761b10dd29c2b027c056b04692))
+$(eval $(call tar_download,IPTABLES,iptables,1.8.4,.tar.bz2,https://www.netfilter.org/projects/iptables/files/,993a3a5490a544c2cbf2ef15cf7e7ed21af1845baf228318d5c36ef8827e157c))
+$(eval $(call tar_download,NMAP,nmap,7.80,.tar.bz2,https://nmap.org/dist/,fcfa5a0e42099e12e4bf7a68ebe6fde05553383a682e816a7ec9256ab4773faa))
+$(eval $(call tar_download,IPUTILS,iputils,s20190709,.tar.gz,https://github.com/iputils/iputils/archive/s20190709.tar.gz/#,a15720dd741d7538dd2645f9f516d193636ae4300ff7dbc8bfca757bf166490a))
+$(eval $(call tar_download,WIREGUARD_TOOLS,wireguard-tools,1.0.20200206,.tar.xz,https://git.zx2c4.com/wireguard-tools/snapshot/,f5207248c6a3c3e3bfc9ab30b91c1897b00802ed861e1f9faaed873366078c64))
+
+KERNEL_BUILD_PATH := $(BUILD_PATH)/kernel$(if $(findstring yes,$(DEBUG_KERNEL)),-debug)
+rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d))
+WIREGUARD_SOURCES := $(call rwildcard,$(KERNEL_PATH)/drivers/net/wireguard/,*)
+
+export CFLAGS ?= -O3 -pipe
+export LDFLAGS ?=
+export CPPFLAGS := -I$(BUILD_PATH)/include
+
+ifeq ($(HOST_ARCH),$(ARCH))
+CROSS_COMPILE_FLAG := --host=$(CHOST)
+CFLAGS += -march=native
+STRIP := strip
+else
+$(info Cross compilation: building for $(CBUILD) using $(CHOST))
+CROSS_COMPILE_FLAG := --build=$(CBUILD) --host=$(CHOST)
+export CROSS_COMPILE=$(CBUILD)-
+STRIP := $(CBUILD)-strip
+endif
+ifeq ($(ARCH),aarch64)
+QEMU_ARCH := aarch64
+KERNEL_ARCH := arm64
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/arm64/boot/Image
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host -machine virt,gic_version=host,accel=kvm
+else
+QEMU_MACHINE := -cpu cortex-a53 -machine virt
+CFLAGS += -march=armv8-a -mtune=cortex-a53
+endif
+else ifeq ($(ARCH),aarch64_be)
+QEMU_ARCH := aarch64
+KERNEL_ARCH := arm64
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/arm64/boot/Image
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host -machine virt,gic_version=host,accel=kvm
+else
+QEMU_MACHINE := -cpu cortex-a53 -machine virt
+CFLAGS += -march=armv8-a -mtune=cortex-a53
+endif
+else ifeq ($(ARCH),arm)
+QEMU_ARCH := arm
+KERNEL_ARCH := arm
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/arm/boot/zImage
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host -machine virt,gic_version=host,accel=kvm
+else
+QEMU_MACHINE := -cpu cortex-a15 -machine virt
+CFLAGS += -march=armv7-a -mtune=cortex-a15 -mabi=aapcs-linux
+endif
+else ifeq ($(ARCH),armeb)
+QEMU_ARCH := arm
+KERNEL_ARCH := arm
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/arm/boot/zImage
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host -machine virt,gic_version=host,accel=kvm
+else
+QEMU_MACHINE := -cpu cortex-a15 -machine virt
+CFLAGS += -march=armv7-a -mabi=aapcs-linux # We don't pass -mtune=cortex-a15 due to a compiler bug on big endian.
+LDFLAGS += -Wl,--be8
+endif
+else ifeq ($(ARCH),x86_64)
+QEMU_ARCH := x86_64
+KERNEL_ARCH := x86_64
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/x86/boot/bzImage
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host -machine q35,accel=kvm
+else
+QEMU_MACHINE := -cpu Skylake-Server -machine q35
+CFLAGS += -march=skylake-avx512
+endif
+else ifeq ($(ARCH),i686)
+QEMU_ARCH := i386
+KERNEL_ARCH := x86
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/x86/boot/bzImage
+ifeq ($(subst x86_64,i686,$(HOST_ARCH)),$(ARCH))
+QEMU_MACHINE := -cpu host -machine q35,accel=kvm
+else
+QEMU_MACHINE := -cpu coreduo -machine q35
+CFLAGS += -march=prescott
+endif
+else ifeq ($(ARCH),mips64)
+QEMU_ARCH := mips64
+KERNEL_ARCH := mips
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host -machine malta,accel=kvm
+CFLAGS += -EB
+else
+QEMU_MACHINE := -cpu MIPS64R2-generic -machine malta -smp 1
+CFLAGS += -march=mips64r2 -EB
+endif
+else ifeq ($(ARCH),mips64el)
+QEMU_ARCH := mips64el
+KERNEL_ARCH := mips
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host -machine malta,accel=kvm
+CFLAGS += -EL
+else
+QEMU_MACHINE := -cpu MIPS64R2-generic -machine malta -smp 1
+CFLAGS += -march=mips64r2 -EL
+endif
+else ifeq ($(ARCH),mips)
+QEMU_ARCH := mips
+KERNEL_ARCH := mips
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host -machine malta,accel=kvm
+CFLAGS += -EB
+else
+QEMU_MACHINE := -cpu 24Kf -machine malta -smp 1
+CFLAGS += -march=mips32r2 -EB
+endif
+else ifeq ($(ARCH),mipsel)
+QEMU_ARCH := mipsel
+KERNEL_ARCH := mips
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host -machine malta,accel=kvm
+CFLAGS += -EL
+else
+QEMU_MACHINE := -cpu 24Kf -machine malta -smp 1
+CFLAGS += -march=mips32r2 -EL
+endif
+else ifeq ($(ARCH),powerpc64le)
+QEMU_ARCH := ppc64
+KERNEL_ARCH := powerpc
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host,accel=kvm -machine pseries
+else
+QEMU_MACHINE := -machine pseries
+endif
+CFLAGS += -mcpu=powerpc64le -mlong-double-64
+else ifeq ($(ARCH),powerpc)
+QEMU_ARCH := ppc
+KERNEL_ARCH := powerpc
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/powerpc/boot/uImage
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host,accel=kvm -machine ppce500
+else
+QEMU_MACHINE := -machine ppce500
+endif
+CFLAGS += -mcpu=powerpc -mlong-double-64 -msecure-plt
+else ifeq ($(ARCH),m68k)
+QEMU_ARCH := m68k
+KERNEL_ARCH := m68k
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux
+KERNEL_CMDLINE := $(shell sed -n 's/CONFIG_CMDLINE=\(.*\)/\1/p' arch/m68k.config)
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host,accel=kvm -machine q800 -smp 1 -append $(KERNEL_CMDLINE)
+else
+QEMU_MACHINE := -machine q800 -smp 1 -append $(KERNEL_CMDLINE)
+endif
+else
+$(error I only build: x86_64, i686, arm, armeb, aarch64, aarch64_be, mips, mipsel, mips64, mips64el, powerpc64le, powerpc, m68k)
+endif
+
+REAL_CC := $(CBUILD)-gcc
+MUSL_CC := $(BUILD_PATH)/musl-gcc
+export CC := $(MUSL_CC)
+USERSPACE_DEPS := $(MUSL_CC) $(BUILD_PATH)/include/.installed $(BUILD_PATH)/include/linux/.installed
+
+build: $(KERNEL_BZIMAGE)
+qemu: $(KERNEL_BZIMAGE)
+	rm -f $(BUILD_PATH)/result
+	timeout --foreground 20m qemu-system-$(QEMU_ARCH) \
+		-nodefaults \
+		-nographic \
+		-smp $(NR_CPUS) \
+		$(QEMU_MACHINE) \
+		-m $$(grep -q CONFIG_DEBUG_KMEMLEAK=y $(KERNEL_BUILD_PATH)/.config && echo 1G || echo 256M) \
+		-serial stdio \
+		-serial file:$(BUILD_PATH)/result \
+		-no-reboot \
+		-monitor none \
+		-kernel $<
+	grep -Fq success $(BUILD_PATH)/result
+
+$(BUILD_PATH)/init-cpio-spec.txt:
+	mkdir -p $(BUILD_PATH)
+	echo "file /init $(BUILD_PATH)/init 755 0 0" > $@
+	echo "file /init.sh $(PWD)/../netns.sh 755 0 0" >> $@
+	echo "dir /dev 755 0 0" >> $@
+	echo "nod /dev/console 644 0 0 c 5 1" >> $@
+	echo "dir /bin 755 0 0" >> $@
+	echo "file /bin/iperf3 $(IPERF_PATH)/src/iperf3 755 0 0" >> $@
+	echo "file /bin/wg $(WIREGUARD_TOOLS_PATH)/src/wg 755 0 0" >> $@
+	echo "file /bin/bash $(BASH_PATH)/bash 755 0 0" >> $@
+	echo "file /bin/ip $(IPROUTE2_PATH)/ip/ip 755 0 0" >> $@
+	echo "file /bin/ss $(IPROUTE2_PATH)/misc/ss 755 0 0" >> $@
+	echo "file /bin/ping $(IPUTILS_PATH)/ping 755 0 0" >> $@
+	echo "file /bin/ncat $(NMAP_PATH)/ncat/ncat 755 0 0" >> $@
+	echo "file /bin/xtables-legacy-multi $(IPTABLES_PATH)/iptables/xtables-legacy-multi 755 0 0" >> $@
+	echo "slink /bin/iptables xtables-legacy-multi 777 0 0" >> $@
+	echo "slink /bin/ping6 ping 777 0 0" >> $@
+	echo "dir /lib 755 0 0" >> $@
+	echo "file /lib/libc.so $(MUSL_PATH)/lib/libc.so 755 0 0" >> $@
+	echo "slink /lib/ld-linux.so.1 libc.so 777 0 0" >> $@
+
+$(KERNEL_BUILD_PATH)/.config: kernel.config arch/$(ARCH).config
+	mkdir -p $(KERNEL_BUILD_PATH)
+	cp kernel.config $(KERNEL_BUILD_PATH)/minimal.config
+	printf 'CONFIG_NR_CPUS=$(NR_CPUS)\nCONFIG_INITRAMFS_SOURCE="$(BUILD_PATH)/init-cpio-spec.txt"\n' >> $(KERNEL_BUILD_PATH)/minimal.config
+	cat arch/$(ARCH).config >> $(KERNEL_BUILD_PATH)/minimal.config
+	$(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_BUILD_PATH) ARCH=$(KERNEL_ARCH) allnoconfig
+	cd $(KERNEL_BUILD_PATH) && ARCH=$(KERNEL_ARCH) $(KERNEL_PATH)/scripts/kconfig/merge_config.sh -n $(KERNEL_BUILD_PATH)/.config $(KERNEL_BUILD_PATH)/minimal.config
+	$(if $(findstring yes,$(DEBUG_KERNEL)),cp debug.config $(KERNEL_BUILD_PATH) && cd $(KERNEL_BUILD_PATH) && ARCH=$(KERNEL_ARCH) $(KERNEL_PATH)/scripts/kconfig/merge_config.sh -n $(KERNEL_BUILD_PATH)/.config debug.config,)
+
+$(KERNEL_BZIMAGE): $(KERNEL_BUILD_PATH)/.config $(BUILD_PATH)/init-cpio-spec.txt $(MUSL_PATH)/lib/libc.so $(IPERF_PATH)/src/iperf3 $(IPUTILS_PATH)/ping $(BASH_PATH)/bash $(IPROUTE2_PATH)/misc/ss $(IPROUTE2_PATH)/ip/ip $(IPTABLES_PATH)/iptables/xtables-legacy-multi $(NMAP_PATH)/ncat/ncat $(WIREGUARD_TOOLS_PATH)/src/wg $(BUILD_PATH)/init ../netns.sh $(WIREGUARD_SOURCES)
+	$(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_BUILD_PATH) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE)
+
+$(BUILD_PATH)/include/linux/.installed: | $(KERNEL_BUILD_PATH)/.config
+	$(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_BUILD_PATH) INSTALL_HDR_PATH=$(BUILD_PATH) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE) headers_install
+	touch $@
+
+$(MUSL_PATH)/lib/libc.so: $(MUSL_TAR)
+	mkdir -p $(BUILD_PATH)
+	flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
+	cd $(MUSL_PATH) && CC=$(REAL_CC) ./configure --prefix=/ --disable-static --build=$(CBUILD)
+	$(MAKE) -C $(MUSL_PATH)
+	$(STRIP) -s $@
+
+$(BUILD_PATH)/include/.installed: $(MUSL_PATH)/lib/libc.so
+	$(MAKE) -C $(MUSL_PATH) DESTDIR=$(BUILD_PATH) install-headers
+	touch $@
+
+$(MUSL_CC): $(MUSL_PATH)/lib/libc.so
+	sh $(MUSL_PATH)/tools/musl-gcc.specs.sh $(BUILD_PATH)/include $(MUSL_PATH)/lib /lib/ld-linux.so.1 > $(BUILD_PATH)/musl-gcc.specs
+	printf '#!/bin/sh\nexec "$(REAL_CC)" --specs="$(BUILD_PATH)/musl-gcc.specs" "$$@"\n' > $(BUILD_PATH)/musl-gcc
+	chmod +x $(BUILD_PATH)/musl-gcc
+
+$(IPERF_PATH)/.installed: $(IPERF_TAR)
+	mkdir -p $(BUILD_PATH)
+	flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
+	sed -i '1s/^/#include <stdint.h>/' $(IPERF_PATH)/src/cjson.h $(IPERF_PATH)/src/timer.h
+	sed -i -r 's/-p?g//g' $(IPERF_PATH)/src/Makefile*
+	touch $@
+
+$(IPERF_PATH)/src/iperf3: | $(IPERF_PATH)/.installed $(USERSPACE_DEPS)
+	cd $(IPERF_PATH) && CFLAGS="$(CFLAGS) -D_GNU_SOURCE" ./configure --prefix=/ $(CROSS_COMPILE_FLAG) --enable-static --disable-shared --with-openssl=no
+	$(MAKE) -C $(IPERF_PATH)
+	$(STRIP) -s $@
+
+$(WIREGUARD_TOOLS_PATH)/.installed: $(WIREGUARD_TOOLS_TAR)
+	mkdir -p $(BUILD_PATH)
+	flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
+	touch $@
+
+$(WIREGUARD_TOOLS_PATH)/src/wg: | $(WIREGUARD_TOOLS_PATH)/.installed $(USERSPACE_DEPS)
+	$(MAKE) -C $(WIREGUARD_TOOLS_PATH)/src wg
+	$(STRIP) -s $@
+
+$(BUILD_PATH)/init: init.c | $(USERSPACE_DEPS)
+	mkdir -p $(BUILD_PATH)
+	$(MUSL_CC) -o $@ $(CFLAGS) $(LDFLAGS) -std=gnu11 $<
+	$(STRIP) -s $@
+
+$(IPUTILS_PATH)/.installed: $(IPUTILS_TAR)
+	mkdir -p $(BUILD_PATH)
+	flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
+	touch $@
+
+$(IPUTILS_PATH)/ping: | $(IPUTILS_PATH)/.installed $(USERSPACE_DEPS)
+	sed -i /atexit/d $(IPUTILS_PATH)/ping.c
+	cd $(IPUTILS_PATH) && $(CC) $(CFLAGS) -std=c99 -o $@ ping.c ping_common.c ping6_common.c iputils_common.c -D_GNU_SOURCE -D'IPUTILS_VERSION(f)=f' -lresolv $(LDFLAGS)
+	$(STRIP) -s $@
+
+$(BASH_PATH)/.installed: $(BASH_TAR)
+	mkdir -p $(BUILD_PATH)
+	flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
+	touch $@
+
+$(BASH_PATH)/bash: | $(BASH_PATH)/.installed $(USERSPACE_DEPS)
+	cd $(BASH_PATH) && ./configure --prefix=/ $(CROSS_COMPILE_FLAG) --without-bash-malloc --disable-debugger --disable-help-builtin --disable-history --disable-multibyte --disable-progcomp --disable-readline --disable-mem-scramble
+	$(MAKE) -C $(BASH_PATH)
+	$(STRIP) -s $@
+
+$(IPROUTE2_PATH)/.installed: $(IPROUTE2_TAR)
+	mkdir -p $(BUILD_PATH)
+	flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
+	printf 'CC:=$(CC)\nPKG_CONFIG:=pkg-config\nTC_CONFIG_XT:=n\nTC_CONFIG_ATM:=n\nTC_CONFIG_IPSET:=n\nIP_CONFIG_SETNS:=y\nHAVE_ELF:=n\nHAVE_MNL:=n\nHAVE_BERKELEY_DB:=n\nHAVE_LATEX:=n\nHAVE_PDFLATEX:=n\nCFLAGS+=-DHAVE_SETNS\n' > $(IPROUTE2_PATH)/config.mk
+	printf 'lib: snapshot\n\t$$(MAKE) -C lib\nip/ip: lib\n\t$$(MAKE) -C ip ip\nmisc/ss: lib\n\t$$(MAKE) -C misc ss\n' >> $(IPROUTE2_PATH)/Makefile
+	touch $@
+
+$(IPROUTE2_PATH)/ip/ip: | $(IPROUTE2_PATH)/.installed $(USERSPACE_DEPS)
+	$(MAKE) -C $(IPROUTE2_PATH) PREFIX=/ ip/ip
+	$(STRIP) -s $@
+
+$(IPROUTE2_PATH)/misc/ss: | $(IPROUTE2_PATH)/.installed $(USERSPACE_DEPS)
+	$(MAKE) -C $(IPROUTE2_PATH) PREFIX=/ misc/ss
+	$(STRIP) -s $@
+
+$(IPTABLES_PATH)/.installed: $(IPTABLES_TAR)
+	mkdir -p $(BUILD_PATH)
+	flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
+	sed -i -e "/nfnetlink=[01]/s:=[01]:=0:" -e "/nfconntrack=[01]/s:=[01]:=0:" $(IPTABLES_PATH)/configure
+	touch $@
+
+$(IPTABLES_PATH)/iptables/xtables-legacy-multi: | $(IPTABLES_PATH)/.installed $(USERSPACE_DEPS)
+	cd $(IPTABLES_PATH) && ./configure --prefix=/ $(CROSS_COMPILE_FLAG) --enable-static --disable-shared --disable-nftables --disable-bpf-compiler --disable-nfsynproxy --disable-libipq --disable-connlabel --with-kernel=$(BUILD_PATH)/include
+	$(MAKE) -C $(IPTABLES_PATH)
+	$(STRIP) -s $@
+
+$(NMAP_PATH)/.installed: $(NMAP_TAR)
+	mkdir -p $(BUILD_PATH)
+	flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
+	touch $@
+
+$(NMAP_PATH)/ncat/ncat: | $(NMAP_PATH)/.installed $(USERSPACE_DEPS)
+	cd $(NMAP_PATH) && ./configure --prefix=/ $(CROSS_COMPILE_FLAG) --enable-static --disable-shared --without-ndiff --without-zenmap --without-nping --with-libpcap=included --with-libpcre=included --with-libdnet=included --without-liblua --with-liblinear=included --without-nmap-update --without-openssl --with-pcap=linux --without-libssh
+	$(MAKE) -C $(NMAP_PATH)/libpcap
+	$(MAKE) -C $(NMAP_PATH)/ncat
+	$(STRIP) -s $@
+
+clean:
+	rm -rf $(BUILD_PATH)
+
+distclean: clean
+	rm -rf $(DISTFILES_PATH)
+
+menuconfig: $(KERNEL_BUILD_PATH)/.config
+	$(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_BUILD_PATH) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE) menuconfig
+
+.PHONY: qemu build clean distclean menuconfig
+.DELETE_ON_ERROR:
diff --git a/tools/testing/selftests/wireguard/qemu/arch/aarch64.config b/tools/testing/selftests/wireguard/qemu/arch/aarch64.config
new file mode 100644
index 0000000..3d063bb
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/aarch64.config
@@ -0,0 +1,5 @@
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyAMA0 wg.success=ttyAMA1"
+CONFIG_FRAME_WARN=1280
diff --git a/tools/testing/selftests/wireguard/qemu/arch/aarch64_be.config b/tools/testing/selftests/wireguard/qemu/arch/aarch64_be.config
new file mode 100644
index 0000000..dbdc7e4
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/aarch64_be.config
@@ -0,0 +1,6 @@
+CONFIG_CPU_BIG_ENDIAN=y
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyAMA0 wg.success=ttyAMA1"
+CONFIG_FRAME_WARN=1280
diff --git a/tools/testing/selftests/wireguard/qemu/arch/arm.config b/tools/testing/selftests/wireguard/qemu/arch/arm.config
new file mode 100644
index 0000000..148f499
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/arm.config
@@ -0,0 +1,9 @@
+CONFIG_MMU=y
+CONFIG_ARCH_MULTI_V7=y
+CONFIG_ARCH_VIRT=y
+CONFIG_THUMB2_KERNEL=n
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyAMA0 wg.success=ttyAMA1"
+CONFIG_FRAME_WARN=1024
diff --git a/tools/testing/selftests/wireguard/qemu/arch/armeb.config b/tools/testing/selftests/wireguard/qemu/arch/armeb.config
new file mode 100644
index 0000000..bd76b07
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/armeb.config
@@ -0,0 +1,10 @@
+CONFIG_MMU=y
+CONFIG_ARCH_MULTI_V7=y
+CONFIG_ARCH_VIRT=y
+CONFIG_THUMB2_KERNEL=n
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyAMA0 wg.success=ttyAMA1"
+CONFIG_CPU_BIG_ENDIAN=y
+CONFIG_FRAME_WARN=1024
diff --git a/tools/testing/selftests/wireguard/qemu/arch/i686.config b/tools/testing/selftests/wireguard/qemu/arch/i686.config
new file mode 100644
index 0000000..a85025d
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/i686.config
@@ -0,0 +1,5 @@
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
+CONFIG_FRAME_WARN=1024
diff --git a/tools/testing/selftests/wireguard/qemu/arch/m68k.config b/tools/testing/selftests/wireguard/qemu/arch/m68k.config
new file mode 100644
index 0000000..62a15bd
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/m68k.config
@@ -0,0 +1,9 @@
+CONFIG_MMU=y
+CONFIG_M68KCLASSIC=y
+CONFIG_M68040=y
+CONFIG_MAC=y
+CONFIG_SERIAL_PMACZILOG=y
+CONFIG_SERIAL_PMACZILOG_TTYS=y
+CONFIG_SERIAL_PMACZILOG_CONSOLE=y
+CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
+CONFIG_FRAME_WARN=1024
diff --git a/tools/testing/selftests/wireguard/qemu/arch/mips.config b/tools/testing/selftests/wireguard/qemu/arch/mips.config
new file mode 100644
index 0000000..df71d6b9
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/mips.config
@@ -0,0 +1,11 @@
+CONFIG_CPU_MIPS32_R2=y
+CONFIG_MIPS_MALTA=y
+CONFIG_MIPS_CPS=y
+CONFIG_MIPS_FP_SUPPORT=y
+CONFIG_POWER_RESET=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
+CONFIG_FRAME_WARN=1024
diff --git a/tools/testing/selftests/wireguard/qemu/arch/mips64.config b/tools/testing/selftests/wireguard/qemu/arch/mips64.config
new file mode 100644
index 0000000..90c783f
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/mips64.config
@@ -0,0 +1,14 @@
+CONFIG_64BIT=y
+CONFIG_CPU_MIPS64_R2=y
+CONFIG_MIPS32_N32=y
+CONFIG_CPU_HAS_MSA=y
+CONFIG_MIPS_MALTA=y
+CONFIG_MIPS_CPS=y
+CONFIG_MIPS_FP_SUPPORT=y
+CONFIG_POWER_RESET=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
+CONFIG_FRAME_WARN=1280
diff --git a/tools/testing/selftests/wireguard/qemu/arch/mips64el.config b/tools/testing/selftests/wireguard/qemu/arch/mips64el.config
new file mode 100644
index 0000000..435b0b4
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/mips64el.config
@@ -0,0 +1,15 @@
+CONFIG_64BIT=y
+CONFIG_CPU_MIPS64_R2=y
+CONFIG_MIPS32_N32=y
+CONFIG_CPU_HAS_MSA=y
+CONFIG_MIPS_MALTA=y
+CONFIG_CPU_LITTLE_ENDIAN=y
+CONFIG_MIPS_CPS=y
+CONFIG_MIPS_FP_SUPPORT=y
+CONFIG_POWER_RESET=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
+CONFIG_FRAME_WARN=1280
diff --git a/tools/testing/selftests/wireguard/qemu/arch/mipsel.config b/tools/testing/selftests/wireguard/qemu/arch/mipsel.config
new file mode 100644
index 0000000..62bb50c
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/mipsel.config
@@ -0,0 +1,12 @@
+CONFIG_CPU_MIPS32_R2=y
+CONFIG_MIPS_MALTA=y
+CONFIG_CPU_LITTLE_ENDIAN=y
+CONFIG_MIPS_CPS=y
+CONFIG_MIPS_FP_SUPPORT=y
+CONFIG_POWER_RESET=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
+CONFIG_FRAME_WARN=1024
diff --git a/tools/testing/selftests/wireguard/qemu/arch/powerpc.config b/tools/testing/selftests/wireguard/qemu/arch/powerpc.config
new file mode 100644
index 0000000..5795709
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/powerpc.config
@@ -0,0 +1,10 @@
+CONFIG_PPC_QEMU_E500=y
+CONFIG_FSL_SOC_BOOKE=y
+CONFIG_PPC_85xx=y
+CONFIG_PHYS_64BIT=y
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_MATH_EMULATION=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
+CONFIG_FRAME_WARN=1024
diff --git a/tools/testing/selftests/wireguard/qemu/arch/powerpc64le.config b/tools/testing/selftests/wireguard/qemu/arch/powerpc64le.config
new file mode 100644
index 0000000..f52f1e2
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/powerpc64le.config
@@ -0,0 +1,13 @@
+CONFIG_PPC64=y
+CONFIG_PPC_PSERIES=y
+CONFIG_ALTIVEC=y
+CONFIG_VSX=y
+CONFIG_PPC_OF_BOOT_TRAMPOLINE=y
+CONFIG_PPC_RADIX_MMU=y
+CONFIG_HVC_CONSOLE=y
+CONFIG_CPU_LITTLE_ENDIAN=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=hvc0 wg.success=hvc1"
+CONFIG_SECTION_MISMATCH_WARN_ONLY=y
+CONFIG_FRAME_WARN=1280
+CONFIG_THREAD_SHIFT=14
diff --git a/tools/testing/selftests/wireguard/qemu/arch/x86_64.config b/tools/testing/selftests/wireguard/qemu/arch/x86_64.config
new file mode 100644
index 0000000..00a1ef4
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/x86_64.config
@@ -0,0 +1,5 @@
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
+CONFIG_FRAME_WARN=1280
diff --git a/tools/testing/selftests/wireguard/qemu/debug.config b/tools/testing/selftests/wireguard/qemu/debug.config
new file mode 100644
index 0000000..b9c7270
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/debug.config
@@ -0,0 +1,67 @@
+CONFIG_LOCALVERSION="-debug"
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_POINTER=y
+CONFIG_STACK_VALIDATION=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_DEBUG_INFO=y
+CONFIG_DEBUG_INFO_DWARF4=y
+CONFIG_PAGE_EXTENSION=y
+CONFIG_PAGE_POISONING=y
+CONFIG_DEBUG_OBJECTS=y
+CONFIG_DEBUG_OBJECTS_FREE=y
+CONFIG_DEBUG_OBJECTS_TIMERS=y
+CONFIG_DEBUG_OBJECTS_WORK=y
+CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
+CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
+CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
+CONFIG_SLUB_DEBUG_ON=y
+CONFIG_DEBUG_VM=y
+CONFIG_DEBUG_MEMORY_INIT=y
+CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
+CONFIG_DEBUG_STACKOVERFLOW=y
+CONFIG_HAVE_ARCH_KMEMCHECK=y
+CONFIG_HAVE_ARCH_KASAN=y
+CONFIG_KASAN=y
+CONFIG_KASAN_INLINE=y
+CONFIG_UBSAN=y
+CONFIG_UBSAN_SANITIZE_ALL=y
+CONFIG_UBSAN_NO_ALIGNMENT=y
+CONFIG_UBSAN_NULL=y
+CONFIG_DEBUG_KMEMLEAK=y
+CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=8192
+CONFIG_DEBUG_STACK_USAGE=y
+CONFIG_DEBUG_SHIRQ=y
+CONFIG_WQ_WATCHDOG=y
+CONFIG_SCHED_DEBUG=y
+CONFIG_SCHED_INFO=y
+CONFIG_SCHEDSTATS=y
+CONFIG_SCHED_STACK_END_CHECK=y
+CONFIG_DEBUG_TIMEKEEPING=y
+CONFIG_TIMER_STATS=y
+CONFIG_DEBUG_PREEMPT=y
+CONFIG_DEBUG_RT_MUTEXES=y
+CONFIG_DEBUG_SPINLOCK=y
+CONFIG_DEBUG_MUTEXES=y
+CONFIG_DEBUG_LOCK_ALLOC=y
+CONFIG_PROVE_LOCKING=y
+CONFIG_LOCKDEP=y
+CONFIG_DEBUG_ATOMIC_SLEEP=y
+CONFIG_TRACE_IRQFLAGS=y
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_LIST=y
+CONFIG_DEBUG_PI_LIST=y
+CONFIG_PROVE_RCU=y
+CONFIG_SPARSE_RCU_POINTER=y
+CONFIG_RCU_CPU_STALL_TIMEOUT=21
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_EQS_DEBUG=y
+CONFIG_USER_STACKTRACE_SUPPORT=y
+CONFIG_DEBUG_SG=y
+CONFIG_DEBUG_NOTIFIERS=y
+CONFIG_DOUBLEFAULT=y
+CONFIG_X86_DEBUG_FPU=y
+CONFIG_DEBUG_SECTION_MISMATCH=y
+CONFIG_DEBUG_PAGEALLOC=y
+CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT=y
+CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y
diff --git a/tools/testing/selftests/wireguard/qemu/init.c b/tools/testing/selftests/wireguard/qemu/init.c
new file mode 100644
index 0000000..c969812
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/init.c
@@ -0,0 +1,284 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#define _GNU_SOURCE
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <fcntl.h>
+#include <sys/wait.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/io.h>
+#include <sys/ioctl.h>
+#include <sys/reboot.h>
+#include <sys/utsname.h>
+#include <sys/sendfile.h>
+#include <sys/sysmacros.h>
+#include <linux/random.h>
+#include <linux/version.h>
+
+__attribute__((noreturn)) static void poweroff(void)
+{
+	fflush(stdout);
+	fflush(stderr);
+	reboot(RB_AUTOBOOT);
+	sleep(30);
+	fprintf(stderr, "\x1b[37m\x1b[41m\x1b[1mFailed to power off!!!\x1b[0m\n");
+	exit(1);
+}
+
+static void panic(const char *what)
+{
+	fprintf(stderr, "\n\n\x1b[37m\x1b[41m\x1b[1mSOMETHING WENT HORRIBLY WRONG\x1b[0m\n\n    \x1b[31m\x1b[1m%s: %s\x1b[0m\n\n\x1b[37m\x1b[44m\x1b[1mPower off...\x1b[0m\n\n", what, strerror(errno));
+	poweroff();
+}
+
+#define pretty_message(msg) puts("\x1b[32m\x1b[1m" msg "\x1b[0m")
+
+static void print_banner(void)
+{
+	struct utsname utsname;
+	int len;
+
+	if (uname(&utsname) < 0)
+		panic("uname");
+
+	len = strlen("    WireGuard Test Suite on       ") + strlen(utsname.sysname) + strlen(utsname.release) + strlen(utsname.machine);
+	printf("\x1b[45m\x1b[33m\x1b[1m%*.s\x1b[0m\n\x1b[45m\x1b[33m\x1b[1m    WireGuard Test Suite on %s %s %s    \x1b[0m\n\x1b[45m\x1b[33m\x1b[1m%*.s\x1b[0m\n\n", len, "", utsname.sysname, utsname.release, utsname.machine, len, "");
+}
+
+static void seed_rng(void)
+{
+	int fd;
+	struct {
+		int entropy_count;
+		int buffer_size;
+		unsigned char buffer[256];
+	} entropy = {
+		.entropy_count = sizeof(entropy.buffer) * 8,
+		.buffer_size = sizeof(entropy.buffer),
+		.buffer = "Adding real entropy is not actually important for these tests. Don't try this at home, kids!"
+	};
+
+	if (mknod("/dev/urandom", S_IFCHR | 0644, makedev(1, 9)))
+		panic("mknod(/dev/urandom)");
+	fd = open("/dev/urandom", O_WRONLY);
+	if (fd < 0)
+		panic("open(urandom)");
+	for (int i = 0; i < 256; ++i) {
+		if (ioctl(fd, RNDADDENTROPY, &entropy) < 0)
+			panic("ioctl(urandom)");
+	}
+	close(fd);
+}
+
+static void mount_filesystems(void)
+{
+	pretty_message("[+] Mounting filesystems...");
+	mkdir("/dev", 0755);
+	mkdir("/proc", 0755);
+	mkdir("/sys", 0755);
+	mkdir("/tmp", 0755);
+	mkdir("/run", 0755);
+	mkdir("/var", 0755);
+	if (mount("none", "/dev", "devtmpfs", 0, NULL))
+		panic("devtmpfs mount");
+	if (mount("none", "/proc", "proc", 0, NULL))
+		panic("procfs mount");
+	if (mount("none", "/sys", "sysfs", 0, NULL))
+		panic("sysfs mount");
+	if (mount("none", "/tmp", "tmpfs", 0, NULL))
+		panic("tmpfs mount");
+	if (mount("none", "/run", "tmpfs", 0, NULL))
+		panic("tmpfs mount");
+	if (mount("none", "/sys/kernel/debug", "debugfs", 0, NULL))
+		; /* Not a problem if it fails.*/
+	if (symlink("/run", "/var/run"))
+		panic("run symlink");
+	if (symlink("/proc/self/fd", "/dev/fd"))
+		panic("fd symlink");
+}
+
+static void enable_logging(void)
+{
+	int fd;
+	pretty_message("[+] Enabling logging...");
+	fd = open("/proc/sys/kernel/printk", O_WRONLY);
+	if (fd >= 0) {
+		if (write(fd, "9\n", 2) != 2)
+			panic("write(printk)");
+		close(fd);
+	}
+	fd = open("/proc/sys/debug/exception-trace", O_WRONLY);
+	if (fd >= 0) {
+		if (write(fd, "1\n", 2) != 2)
+			panic("write(exception-trace)");
+		close(fd);
+	}
+	fd = open("/proc/sys/kernel/panic_on_warn", O_WRONLY);
+	if (fd >= 0) {
+		if (write(fd, "1\n", 2) != 2)
+			panic("write(panic_on_warn)");
+		close(fd);
+	}
+}
+
+static void kmod_selftests(void)
+{
+	FILE *file;
+	char line[2048], *start, *pass;
+	bool success = true;
+	pretty_message("[+] Module self-tests:");
+	file = fopen("/proc/kmsg", "r");
+	if (!file)
+		panic("fopen(kmsg)");
+	if (fcntl(fileno(file), F_SETFL, O_NONBLOCK) < 0)
+		panic("fcntl(kmsg, nonblock)");
+	while (fgets(line, sizeof(line), file)) {
+		start = strstr(line, "wireguard: ");
+		if (!start)
+			continue;
+		start += 11;
+		*strchrnul(start, '\n') = '\0';
+		if (strstr(start, "www.wireguard.com"))
+			break;
+		pass = strstr(start, ": pass");
+		if (!pass || pass[6] != '\0') {
+			success = false;
+			printf(" \x1b[31m*  %s\x1b[0m\n", start);
+		} else
+			printf(" \x1b[32m*  %s\x1b[0m\n", start);
+	}
+	fclose(file);
+	if (!success) {
+		puts("\x1b[31m\x1b[1m[-] Tests failed! \u2639\x1b[0m");
+		poweroff();
+	}
+}
+
+static void launch_tests(void)
+{
+	char cmdline[4096], *success_dev;
+	int status, fd;
+	pid_t pid;
+
+	pretty_message("[+] Launching tests...");
+	pid = fork();
+	if (pid == -1)
+		panic("fork");
+	else if (pid == 0) {
+		execl("/init.sh", "init", NULL);
+		panic("exec");
+	}
+	if (waitpid(pid, &status, 0) < 0)
+		panic("waitpid");
+	if (WIFEXITED(status) && WEXITSTATUS(status) == 0) {
+		pretty_message("[+] Tests successful! :-)");
+		fd = open("/proc/cmdline", O_RDONLY);
+		if (fd < 0)
+			panic("open(/proc/cmdline)");
+		if (read(fd, cmdline, sizeof(cmdline) - 1) <= 0)
+			panic("read(/proc/cmdline)");
+		cmdline[sizeof(cmdline) - 1] = '\0';
+		for (success_dev = strtok(cmdline, " \n"); success_dev; success_dev = strtok(NULL, " \n")) {
+			if (strncmp(success_dev, "wg.success=", 11))
+				continue;
+			memcpy(success_dev + 11 - 5, "/dev/", 5);
+			success_dev += 11 - 5;
+			break;
+		}
+		if (!success_dev || !strlen(success_dev))
+			panic("Unable to find success device");
+
+		fd = open(success_dev, O_WRONLY);
+		if (fd < 0)
+			panic("open(success_dev)");
+		if (write(fd, "success\n", 8) != 8)
+			panic("write(success_dev)");
+		close(fd);
+	} else {
+		const char *why = "unknown cause";
+		int what = -1;
+
+		if (WIFEXITED(status)) {
+			why = "exit code";
+			what = WEXITSTATUS(status);
+		} else if (WIFSIGNALED(status)) {
+			why = "signal";
+			what = WTERMSIG(status);
+		}
+		printf("\x1b[31m\x1b[1m[-] Tests failed with %s %d! \u2639\x1b[0m\n", why, what);
+	}
+}
+
+static void ensure_console(void)
+{
+	for (unsigned int i = 0; i < 1000; ++i) {
+		int fd = open("/dev/console", O_RDWR);
+		if (fd < 0) {
+			usleep(50000);
+			continue;
+		}
+		dup2(fd, 0);
+		dup2(fd, 1);
+		dup2(fd, 2);
+		close(fd);
+		if (write(1, "\0\0\0\0\n", 5) == 5)
+			return;
+	}
+	panic("Unable to open console device");
+}
+
+static void clear_leaks(void)
+{
+	int fd;
+
+	fd = open("/sys/kernel/debug/kmemleak", O_WRONLY);
+	if (fd < 0)
+		return;
+	pretty_message("[+] Starting memory leak detection...");
+	write(fd, "clear\n", 5);
+	close(fd);
+}
+
+static void check_leaks(void)
+{
+	int fd;
+
+	fd = open("/sys/kernel/debug/kmemleak", O_WRONLY);
+	if (fd < 0)
+		return;
+	pretty_message("[+] Scanning for memory leaks...");
+	sleep(2); /* Wait for any grace periods. */
+	write(fd, "scan\n", 5);
+	close(fd);
+
+	fd = open("/sys/kernel/debug/kmemleak", O_RDONLY);
+	if (fd < 0)
+		return;
+	if (sendfile(1, fd, NULL, 0x7ffff000) > 0)
+		panic("Memory leaks encountered");
+	close(fd);
+}
+
+int main(int argc, char *argv[])
+{
+	seed_rng();
+	ensure_console();
+	print_banner();
+	mount_filesystems();
+	kmod_selftests();
+	enable_logging();
+	clear_leaks();
+	launch_tests();
+	check_leaks();
+	poweroff();
+	return 1;
+}
diff --git a/tools/testing/selftests/wireguard/qemu/kernel.config b/tools/testing/selftests/wireguard/qemu/kernel.config
new file mode 100644
index 0000000..af9323a
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/kernel.config
@@ -0,0 +1,88 @@
+CONFIG_LOCALVERSION=""
+CONFIG_NET=y
+CONFIG_NETDEVICES=y
+CONFIG_NET_CORE=y
+CONFIG_NET_IPIP=y
+CONFIG_DUMMY=y
+CONFIG_VETH=y
+CONFIG_MULTIUSER=y
+CONFIG_NAMESPACES=y
+CONFIG_NET_NS=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+CONFIG_IPV6=y
+CONFIG_NETFILTER=y
+CONFIG_NETFILTER_ADVANCED=y
+CONFIG_NF_CONNTRACK=y
+CONFIG_NF_NAT=y
+CONFIG_NETFILTER_XTABLES=y
+CONFIG_NETFILTER_XT_NAT=y
+CONFIG_NETFILTER_XT_MATCH_LENGTH=y
+CONFIG_NF_CONNTRACK_IPV4=y
+CONFIG_NF_NAT_IPV4=y
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_NAT=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_TTY=y
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_SCRIPT=y
+CONFIG_VDSO=y
+CONFIG_VIRTUALIZATION=y
+CONFIG_HYPERVISOR_GUEST=y
+CONFIG_PARAVIRT=y
+CONFIG_KVM_GUEST=y
+CONFIG_PARAVIRT_SPINLOCKS=y
+CONFIG_PRINTK=y
+CONFIG_KALLSYMS=y
+CONFIG_BUG=y
+CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
+CONFIG_JUMP_LABEL=y
+CONFIG_EMBEDDED=n
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_SHMEM=y
+CONFIG_SLUB=y
+CONFIG_SPARSEMEM_VMEMMAP=y
+CONFIG_SMP=y
+CONFIG_SCHED_SMT=y
+CONFIG_SCHED_MC=y
+CONFIG_NUMA=y
+CONFIG_PREEMPT=y
+CONFIG_NO_HZ=y
+CONFIG_NO_HZ_IDLE=y
+CONFIG_NO_HZ_FULL=n
+CONFIG_HZ_PERIODIC=n
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_COMPAT_32BIT_TIME=y
+CONFIG_ARCH_RANDOM=y
+CONFIG_FILE_LOCKING=y
+CONFIG_POSIX_TIMERS=y
+CONFIG_DEVTMPFS=y
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+CONFIG_CONSOLE_LOGLEVEL_DEFAULT=15
+CONFIG_PRINTK_TIME=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_LEGACY_VSYSCALL_NONE=y
+CONFIG_KERNEL_GZIP=y
+CONFIG_PANIC_ON_OOPS=y
+CONFIG_BUG_ON_DATA_CORRUPTION=y
+CONFIG_LOCKUP_DETECTOR=y
+CONFIG_SOFTLOCKUP_DETECTOR=y
+CONFIG_HARDLOCKUP_DETECTOR=y
+CONFIG_WQ_WATCHDOG=y
+CONFIG_DETECT_HUNG_TASK=y
+CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
+CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
+CONFIG_PANIC_TIMEOUT=-1
+CONFIG_STACKTRACE=y
+CONFIG_EARLY_PRINTK=y
+CONFIG_GDB_SCRIPTS=y
+CONFIG_WIREGUARD=y
+CONFIG_WIREGUARD_DEBUG=y